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+CitEYXRlOiBNb24sIDE4IEp1bCAyMDE2IDE5OjUzOjAwIC0wNzAwCitTdWJqZWN0OiBbUEFUQ0hdIFJldmVydCAiQ3JlYXRlIG1hbiBwYWdlIGluIHRoZSBtYWtlLWluc3RhbGwtZnJvbS1naXQtcmVwbworIGNhc2UiCisKK1RoaXMgcmV2ZXJ0cyBjb21taXQgYjg2Nzg0OTAyZDI4ZGVmZDVlNDc1Yzg5MjJkZTU5NDc4N2RmNDU0MS4KKworV2UgZG9udCcgaGF2ZSBhc2NpaWRvYywgc28gcmV2ZXJ0IGl0LgorCitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW09FLUNvcmUgc3BlY2lmaWNdCisKK1NpZ25lZC1vZmYtYnk6IFJvYmVydCBZYW5nIDxsaWV6aGkueWFuZ0B3aW5kcml2ZXIuY29tPgorLS0tCisgTWFrZWZpbGUuaW4gfCAyICstCisgMSBmaWxlIGNoYW5nZWQsIDEgaW5zZXJ0aW9uKCspLCAxIGRlbGV0aW9uKC0pCisKK2RpZmYgLS1naXQgYS9NYWtlZmlsZS5pbiBiL01ha2VmaWxlLmluCitpbmRleCBkNDc0ZjJhLi5jNmNkYzA0IDEwMDY0NAorLS0tIGEvTWFrZWZpbGUuaW4KKysrKyBiL01ha2VmaWxlLmluCitAQCAtNzYsNyArNzYsNyBAQCBjY2FjaGUkKEVYRUVYVCk6ICQoY2NhY2hlX29ianMpICQoZXh0cmFfbGlicykKKyAJJChDQykgJChhbGxfY2ZsYWdzKSAtbyAkQCAkKGNjYWNoZV9vYmpzKSAkKExERkxBR1MpICQoZXh0cmFfbGlicykgJChMSUJTKQorIAorIC5QSE9OWTogaW5zdGFsbAorLWluc3RhbGw6IGFsbCAkKHNyY2RpcikvY2NhY2hlLjEKKytpbnN0YWxsOiBhbGwKKyAJJChpbnN0YWxsY21kKSAtZCAkKERFU1RESVIpJChiaW5kaXIpCisgCSQoaW5zdGFsbGNtZCkgLW0gNzU1IGNjYWNoZSQoRVhFRVhUKSAkKERFU1RESVIpJChiaW5kaXIpCisgCSQoaW5zdGFsbGNtZCkgLWQgJChERVNURElSKSQobWFuZGlyKS9tYW4xCistLSAKKzIuOS4wCisKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvY21ha2UvY21ha2UtbmF0aXZlXzMuNC4zLmJiIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9jbWFrZS9jbWFrZS1uYXRpdmVfMy40LjMuYmIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGNiNGU3NDkuLjAwMDAwMDAKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9jbWFrZS9jbWFrZS1uYXRpdmVfMy40LjMuYmIKKysrIC9kZXYvbnVsbApAQCAtMSwxNiArMCwwIEBACi1yZXF1aXJlIGNtYWtlLmluYwotaW5oZXJpdCBuYXRpdmUKLQotIyBVc2luZyBjbWFrZSdzIGludGVybmFsIGxpYmFyY2hpdmUsIHNvIHNvbWUgZGVwZW5kZW5jaWVzIGFyZSBuZWVkZWQKLURFUEVORFMgKz0gImJ6aXAyLW5hdGl2ZSB6bGliLW5hdGl2ZSIKLQotU1JDX1VSSSArPSAiXAotICAgIGZpbGU6Ly9jbWxpYmFyY2hpdmUtZGlzYWJsZS1leHQyZnMucGF0Y2ggXAotIgotCi0jIERpc2FibGUgY2NtYWtlIHNpbmNlIHdlIGRvbid0IGRlcGVuZCBvbiBuY3Vyc2VzCi1DTUFLRV9FWFRSQUNPTkYgPSAiXAotICAgIC1EQlVJTERfQ3Vyc2VzRGlhbG9nPTAgXAotICAgIC1ERU5BQkxFX0FDTD0wIC1ESEFWRV9BQ0xfTElCQUNMX0g9MCBcCi0gICAgLURIQVZFX1NZU19BQ0xfSD0wIFwKLSIKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvY21ha2UvY21ha2UtbmF0aXZlXzMuNi4xLmJiIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9jbWFrZS9jbWFrZS1uYXRpdmVfMy42LjEuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWVjMGQ2NAotLS0gL2Rldi9udWxsCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvY21ha2UvY21ha2UtbmF0aXZlXzMuNi4xLmJiCkBAIC0wLDAgKzEsMzYgQEAKK3JlcXVpcmUgY21ha2UuaW5jCitpbmhlcml0IG5hdGl2ZQorCitERVBFTkRTICs9ICJiemlwMi1yZXBsYWNlbWVudC1uYXRpdmUgZXhwYXQtbmF0aXZlIHh6LW5hdGl2ZSB6bGliLW5hdGl2ZSBjdXJsLW5hdGl2ZSIKKworU1JDX1VSSSArPSAiXAorICAgIGZpbGU6Ly9jbWxpYmFyY2hpdmUtZGlzYWJsZS1leHQyZnMucGF0Y2ggXAorIgorCitCID0gIiR7V09SS0RJUn0vYnVpbGQiCitkb19jb25maWd1cmVbY2xlYW5kaXJzXSA9ICIke0J9IgorCisjIERpc2FibGUgY2NtYWtlIHNpbmNlIHdlIGRvbid0IGRlcGVuZCBvbiBuY3Vyc2VzCitDTUFLRV9FWFRSQUNPTkYgPSAiXAorICAgIC1EQ01BS0VfTElCUkFSWV9QQVRIPSR7U1RBR0lOR19MSUJESVJfTkFUSVZFfSBcCisgICAgLURCVUlMRF9DdXJzZXNEaWFsb2c9MCBcCisgICAgLURDTUFLRV9VU0VfU1lTVEVNX0xJQlJBUklFUz0xIFwKKyAgICAtRENNQUtFX1VTRV9TWVNURU1fTElCUkFSWV9KU09OQ1BQPTAgXAorICAgIC1EQ01BS0VfVVNFX1NZU1RFTV9MSUJSQVJZX0xJQkFSQ0hJVkU9MCBcCisgICAgLURFTkFCTEVfQUNMPTAgLURIQVZFX0FDTF9MSUJBQ0xfSD0wIFwKKyAgICAtREhBVkVfU1lTX0FDTF9IPTAgXAorIgorCitkb19jb25maWd1cmUgKCkgeworCSR7U30vY29uZmlndXJlIC0tdmVyYm9zZSAtLXByZWZpeD0ke3ByZWZpeH0gLS0gJHtDTUFLRV9FWFRSQUNPTkZ9Cit9CisKK2RvX2NvbXBpbGUoKSB7CisJb2VfcnVubWFrZQorfQorCitkb19pbnN0YWxsKCkgeworCW9lX3J1bm1ha2UgJ0RFU1RESVI9JHtEfScgaW5zdGFsbAorfQorCitkb19jb21waWxlW3Byb2dyZXNzXSA9ICJwZXJjZW50IgpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9jbWFrZS9jbWFrZS5pbmMgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2NtYWtlL2NtYWtlLmluYwppbmRleCA5NjhkMDAzLi40ZmNiMGIxIDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2NtYWtlL2NtYWtlLmluYworKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2NtYWtlL2NtYWtlLmluYwpAQCAtNiwyNCArNiwyMSBAQAogQlVHVFJBQ0tFUiA9ICJodHRwOi8vcHVibGljLmtpdHdhcmUuY29tL0J1Zy9teV92aWV3X3BhZ2UucGhwIgogU0VDVElPTiA9ICJjb25zb2xlL3V0aWxzIgogTElDRU5TRSA9ICJCU0QiCi1MSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9Db3B5cmlnaHQudHh0O21kNT0zYmE1YTZjMzQ0ODE2NTJjZTU3M2U1YzRlMWQ3MDdlNCBcCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9Db3B5cmlnaHQudHh0O21kNT0wNTJmODZjMTViYmRlNjhhZjU1YzdmN2IzNDBhYjYzOSBcCiAgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9Tb3VyY2UvY21ha2UuaDtiZWdpbmxpbmU9MTtlbmRsaW5lPTEwO21kNT0zNDE3MzZkYWU4M2M5ZTM0NGI1M2VlYjFiYzdkN2JjMiIKIAotQ01BS0VfTUFKT1JfVkVSU0lPTiA9ICIke0AnLicuam9pbihkLmdldFZhcignUFYnLDEpLnNwbGl0KCcuJylbMDoyXSl9IgorQ01BS0VfTUFKT1JfVkVSU0lPTiA9ICIke0AnLicuam9pbihkLmdldFZhcignUFYnLCBUcnVlKS5zcGxpdCgnLicpWzA6Ml0pfSIKIAogU1JDX1VSSSA9ICJodHRwczovL2NtYWtlLm9yZy9maWxlcy92JHtDTUFLRV9NQUpPUl9WRVJTSU9OfS9jbWFrZS0ke1BWfS50YXIuZ3ogXAogICAgICAgICAgICBmaWxlOi8vc3VwcG9ydC1vZS1xdDQtdG9vbHMtbmFtZXMucGF0Y2ggXAogICAgICAgICAgICBmaWxlOi8vcXQ0LWZhaWwtc2lsZW50LnBhdGNoIFwKLSAgICAgICAgICAgZmlsZTovLzAwMDEtQWRkLU5JT1MyLUNQVS1zdXBwb3J0LnBhdGNoIFwKICAgICAgICAgICAgIgogCi1TUkNfVVJJW21kNXN1bV0gPSAiNGNiM2ZmMzViMjQ3MmFhZTcwZjU0MjExNmQ2MTZlNjMiCi1TUkNfVVJJW3NoYTI1NnN1bV0gPSAiYjczZjhjMTAyOTYxMWRmN2VkODE3OTZiZjVjYThiYTBlZjQxYzY3NjExMzIzNDBjNzNmZmU0MjcwNGY5ODBmYSIKK1NSQ19VUklbbWQ1c3VtXSA9ICJkNmRkNjYxMzgwYWRhY2RiMTJmNDFiOTI2ZWM5OTU0NSIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICIyOGVlOThlYzQwNDI3ZDQxYTQ1NjczODQ3ZGI3YTkwNWI1OWNlOTI0M2JiODY2ZWFmNTlkY2UwZjU4YWFlZjExIgogCiBVUFNUUkVBTV9DSEVDS19SRUdFWCA9ICJjbWFrZS0oP1A8cHZlcj5cZCsoXC5cZCspKylcLnRhciIKIAotaW5oZXJpdCBhdXRvdG9vbHMKLQogIyBVZ2x5IGhhY2sgdG8gd29yayBhcm91bmQgdW5kZWZpbmVkIE9FX1FNQUtFX1BBVEhfRVhURVJOQUxfSE9TVF9CSU5TIHZhcmlhYmxlCiAjIGFuZCBwb3NzaWJseSBtaXNzaW5nIHFtYWtlIGJpbmFyeSAocXRiYXNlLW5hdGl2ZSBjYW4gYmUgcmVtb3ZlZCBmcm9tIHN5c3Jvb3QKICMgZS5nLiBpbiBvcmRlciB0byB1cGdyYWRlIGl0LCBldmVuIHdoZW4gdGhlcmUgaXMgdGFyZ2V0IHF0YmFzZSkKQEAgLTQ2LDEwICs0MywzIEBACiAJc2VkIC1pICdzL14gIGZpbmRfcGFja2FnZShRdDVXaWRnZXRzIFJFUVVJUkVEKS8jICBmaW5kX3BhY2thZ2UoUXQ1V2lkZ2V0cyBSRVFVSVJFRCkvZycgJHtTfS9UZXN0cy9RdEF1dG9nZW4vQ01ha2VMaXN0cy50eHQKIAlzZWQgLWkgJ3MvXiAgZmluZF9wYWNrYWdlKFF0NUNvcmUgUkVRVUlSRUQpLyMgIGZpbmRfcGFja2FnZShRdDVDb3JlIFJFUVVJUkVEKS9nJyAke1N9L1Rlc3RzL1F0QXV0b2dlbi9hdXRvcmNjX2RlcGVuZHMvQ01ha2VMaXN0cy50eHQKIH0KLQotIyBFeHRyYSBmbGFncyB0byBwYXNzIHRvIGNtYWtlIGludm9rZWQgYnkgYm9vdHN0cmFwCi1DTUFLRV9FWFRSQUNPTkYgPSAiIgotCi1kb19jb25maWd1cmUgKCkgewotCSR7U30vY29uZmlndXJlIC0tcHJlZml4PSR7cHJlZml4fSAtLSAke0NNQUtFX0VYVFJBQ09ORn0KLX0KZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvY21ha2UvY21ha2UvMDAwMS1BZGQtTklPUzItQ1BVLXN1cHBvcnQucGF0Y2ggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2NtYWtlL2NtYWtlLzAwMDEtQWRkLU5JT1MyLUNQVS1zdXBwb3J0LnBhdGNoCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2ZTBhYjlmLi4wMDAwMDAwCi0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvY21ha2UvY21ha2UvMDAwMS1BZGQtTklPUzItQ1BVLXN1cHBvcnQucGF0Y2gKKysrIC9kZXYvbnVsbApAQCAtMSw1MCArMCwwIEBACi1Gcm9tIDNmOGMzZDMwMTFlYTE5MmRhMmM3NjE1NjBiNjE1ZjU1NzYzNzE1ZWYgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCi1Gcm9tOiBNYXJlayBWYXN1dCA8bWFyZXhAZGVueC5kZT4KLURhdGU6IFRodSwgMjYgTm92IDIwMTUgMjE6MzE6MDQgKzAxMDAKLVN1YmplY3Q6IFtQQVRDSF0gQWRkIE5JT1MyIENQVSBzdXBwb3J0Ci0KLUFkZCBuZWNlc3NhcnkgYml0cyB0byBzdXBwb3J0IHRoZSBOSU9TMiBsaXR0bGUtZW5kaWFuIENQVS4KLQotU2lnbmVkLW9mZi1ieTogTWFyZWsgVmFzdXQgPG1hcmV4QGRlbnguZGU+Ci1DYzogTGV5IEZvb24gVGFuIDxsZnRhbkBhbHRlcmEuY29tPgotQ2M6IFRob21hcyBDaG91IDx0aG9tYXNAd3l0cm9uLmNvbS50dz4KLUNjOiBXYWx0ZXIgR29vc3NlbnMgPHdhbHRlcmdvb3NzZW5zQGhvbWUubmw+Ci1VcHN0cmVhbS1TdGF0dXM6IFN1Ym1pdHRlZAotLS0tCi0gU291cmNlL2t3c3lzL0NQVS5oLmluICAgIHwgNCArKysrCi0gVXRpbGl0aWVzL0tXSU1ML0FCSS5oLmluIHwgNCArKysrCi0gMiBmaWxlcyBjaGFuZ2VkLCA4IGluc2VydGlvbnMoKykKLQotZGlmZiAtLWdpdCBhL1NvdXJjZS9rd3N5cy9DUFUuaC5pbiBiL1NvdXJjZS9rd3N5cy9DUFUuaC5pbgotaW5kZXggODg0ZDcxYS4uNjZmZmJiMSAxMDA2NDQKLS0tLSBhL1NvdXJjZS9rd3N5cy9DUFUuaC5pbgotKysrIGIvU291cmNlL2t3c3lzL0NQVS5oLmluCi1AQCAtODgsNiArODgsMTAgQEAKLSAjZWxpZiBkZWZpbmVkKF9fbWlwcykgfHwgZGVmaW5lZChfX21pcHNfXykgfHwgZGVmaW5lZChfX01JUFNfXykKLSAjIGRlZmluZSBAS1dTWVNfTkFNRVNQQUNFQF9DUFVfRU5ESUFOX0lEIEBLV1NZU19OQU1FU1BBQ0VAX0NQVV9FTkRJQU5fSURfQklHCi0gCi0rLyogTklPUzIgKi8KLSsjZWxpZiBkZWZpbmVkKF9fTklPUzJfXykgfHwgZGVmaW5lZChfX05JT1MyKSB8fCBkZWZpbmVkKF9fbmlvczJfXykKLSsjIGRlZmluZSBAS1dTWVNfTkFNRVNQQUNFQF9DUFVfRU5ESUFOX0lEIEBLV1NZU19OQU1FU1BBQ0VAX0NQVV9FTkRJQU5fSURfTElUVExFCi0rCi0gLyogT3BlblJJU0MgMTAwMCAqLwotICNlbGlmIGRlZmluZWQoX19vcjFrX18pCi0gIyBkZWZpbmUgQEtXU1lTX05BTUVTUEFDRUBfQ1BVX0VORElBTl9JRCBAS1dTWVNfTkFNRVNQQUNFQF9DUFVfRU5ESUFOX0lEX0JJRwotZGlmZiAtLWdpdCBhL1V0aWxpdGllcy9LV0lNTC9BQkkuaC5pbiBiL1V0aWxpdGllcy9LV0lNTC9BQkkuaC5pbgotaW5kZXggNjMwMGFkYS4uODdiNmU5NiAxMDA2NDQKLS0tLSBhL1V0aWxpdGllcy9LV0lNTC9BQkkuaC5pbgotKysrIGIvVXRpbGl0aWVzL0tXSU1ML0FCSS5oLmluCi1AQCAtMzk4LDYgKzM5OCwxMCBAQCBzdXBwcmVzc2lvbiBtYWNybyBAS1dJTUxAX0FCSV9OT19WRVJJRlkgd2FzIGRlZmluZWQuCi0gI2VsaWYgZGVmaW5lZChfX21pcHMpIHx8IGRlZmluZWQoX19taXBzX18pIHx8IGRlZmluZWQoX19NSVBTX18pCi0gIyBkZWZpbmUgQEtXSU1MQF9BQklfRU5ESUFOX0lEIEBLV0lNTEBfQUJJX0VORElBTl9JRF9CSUcKLSAKLSsvKiBOSU9TMiAqLwotKyNlbGlmIGRlZmluZWQoX19OSU9TMl9fKSB8fCBkZWZpbmVkKF9fTklPUzIpIHx8IGRlZmluZWQoX19uaW9zMl9fKQotKyMgZGVmaW5lIEBLV0lNTEBfQUJJX0VORElBTl9JRCBAS1dJTUxAX0FCSV9FTkRJQU5fSURfTElUVExFCi0rCi0gLyogT3BlblJJU0MgMTAwMCAqLwotICNlbGlmIGRlZmluZWQoX19vcjFrX18pCi0gIyBkZWZpbmUgQEtXSU1MQF9BQklfRU5ESUFOX0lEIEBLV0lNTEBfQUJJX0VORElBTl9JRF9CSUcKLS0tIAotMi42LjIKLQpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9jbWFrZS9jbWFrZS9PRVRvb2xjaGFpbkNvbmZpZy5jbWFrZSBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvY21ha2UvY21ha2UvT0VUb29sY2hhaW5Db25maWcuY21ha2UKaW5kZXggNjAwMTRiYi4uNjUxODQwOCAxMDA2NDQKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9jbWFrZS9jbWFrZS9PRVRvb2xjaGFpbkNvbmZpZy5jbWFrZQorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2NtYWtlL2NtYWtlL09FVG9vbGNoYWluQ29uZmlnLmNtYWtlCkBAIC0zLDEzICszLDE3IEBACiBzZXQoIENNQUtFX0NYWF9GTEFHUyAkRU5We0NYWEZMQUdTfSAgQ0FDSEUgU1RSSU5HICIiIEZPUkNFICkKIHNldCggQ01BS0UgQVNNX0ZMQUdTICR7Q01BS0VfQ19GTEFHU30gQ0FDSEUgU1RSSU5HICIiIEZPUkNFICkKIHNldCggQ01BS0VfTERGTEFHU19GTEFHUyAke0NNQUtFX0NYWF9GTEFHU30gQ0FDSEUgU1RSSU5HICIiIEZPUkNFICkKKwogc2V0KCBDTUFLRV9GSU5EX1JPT1RfUEFUSCAkRU5We09FQ09SRV9UQVJHRVRfU1lTUk9PVH0gJEVOVntPRUNPUkVfTkFUSVZFX1NZU1JPT1R9ICkKIHNldCggQ01BS0VfRklORF9ST09UX1BBVEhfTU9ERV9QUk9HUkFNIE5FVkVSICkKIHNldCggQ01BS0VfRklORF9ST09UX1BBVEhfTU9ERV9MSUJSQVJZIE9OTFkgKQogc2V0KCBDTUFLRV9GSU5EX1JPT1RfUEFUSF9NT0RFX0lOQ0xVREUgT05MWSApCitzZXQoIENNQUtFX0ZJTkRfUk9PVF9QQVRIX01PREVfUEFDS0FHRSBPTkxZICkKIAotc3RyaW5nKFJFR0VYIE1BVENIICJzeXNyb290cy8oW2EtekEtWjAtOV0rKSIgQ01BS0VfU1lTVEVNX1BST0NFU1NPUiAkRU5We1NES1RBUkdFVFNZU1JPT1R9KQotc3RyaW5nKFJFR0VYIFJFUExBQ0UgInN5c3Jvb3RzLyIgIiIgQ01BS0VfU1lTVEVNX1BST0NFU1NPUiAke0NNQUtFX1NZU1RFTV9QUk9DRVNTT1J9KQorIyBTZXQgQ01BS0VfU1lTVEVNX1BST0NFU1NPUiBmcm9tIHRoZSBzeXNyb290IG5hbWUgKGFzc3VtaW5nIHByb2Nlc3Nvci1kaXN0cm8tb3MpLgoraWYgKCRFTlZ7U0RLVEFSR0VUU1lTUk9PVH0gTUFUQ0hFUyAiL3N5c3Jvb3RzLyhbYS16QS1aMC05Xy1dKyktListLisiKQorICBzZXQoQ01BS0VfU1lTVEVNX1BST0NFU1NPUiAke0NNQUtFX01BVENIXzF9KQorZW5kaWYoKQogCiAjIEluY2x1ZGUgdGhlIHRvb2xjaGFpbiBjb25maWd1cmF0aW9uIHN1YnNjcmlwdHMKIGZpbGUoIEdMT0IgdG9vbGNoYWluX2NvbmZpZ19maWxlcyAiJHtDTUFLRV9UT09MQ0hBSU5fRklMRX0uZC8qLmNtYWtlIiApCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2NtYWtlL2NtYWtlXzMuNC4zLmJiIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9jbWFrZS9jbWFrZV8zLjQuMy5iYgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMmYxODhmMC4uMDAwMDAwMAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2NtYWtlL2NtYWtlXzMuNC4zLmJiCisrKyAvZGV2L251bGwKQEAgLTEsNTMgKzAsMCBAQAotcmVxdWlyZSBjbWFrZS5pbmMKLQotaW5oZXJpdCBjbWFrZQotCi1ERVBFTkRTICs9ICJjdXJsIGV4cGF0IHpsaWIgbGliYXJjaGl2ZSB4eiBuY3Vyc2VzIGJ6aXAyIgotCi1TUkNfVVJJX2FwcGVuZF9jbGFzcy1uYXRpdmVzZGsgPSAiIFwKLSAgICBmaWxlOi8vT0VUb29sY2hhaW5Db25maWcuY21ha2UgXAotICAgIGZpbGU6Ly9lbnZpcm9ubWVudC5kLWNtYWtlLnNoIgotCi0jIFN0cmlwICR7cHJlZml4fSBmcm9tICR7ZG9jZGlyfSwgc2V0IHJlc3VsdCBpbnRvIGRvY2Rpcl9zdHJpcHBlZAotcHl0aG9uICgpIHsKLSAgICBwcmVmaXg9ZC5nZXRWYXIoInByZWZpeCIsIFRydWUpCi0gICAgZG9jZGlyPWQuZ2V0VmFyKCJkb2NkaXIiLCBUcnVlKQotCi0gICAgaWYgbm90IGRvY2Rpci5zdGFydHN3aXRoKHByZWZpeCk6Ci0gICAgICAgIHJhaXNlIGJiLmJ1aWxkLkZ1bmNGYWlsZWQoJ2RvY2RpciBtdXN0IGNvbnRhaW4gcHJlZml4IGFzIGl0cyBwcmVmaXgnKQotCi0gICAgZG9jZGlyX3N0cmlwcGVkID0gZG9jZGlyW2xlbihwcmVmaXgpOl0KLSAgICBpZiBsZW4oZG9jZGlyX3N0cmlwcGVkKSA+IDAgYW5kIGRvY2Rpcl9zdHJpcHBlZFswXSA9PSAnLyc6Ci0gICAgICAgIGRvY2Rpcl9zdHJpcHBlZCA9IGRvY2Rpcl9zdHJpcHBlZFsxOl0KLQotICAgIGQuc2V0VmFyKCJkb2NkaXJfc3RyaXBwZWQiLCBkb2NkaXJfc3RyaXBwZWQpCi19Ci0KLUVYVFJBX09FQ01BS0U9IiBcCi0gICAgLURDTUFLRV9ET0NfRElSPSR7ZG9jZGlyX3N0cmlwcGVkfS9jbWFrZS0ke0NNQUtFX01BSk9SX1ZFUlNJT059IFwKLSAgICAtRENNQUtFX1VTRV9TWVNURU1fTElCUkFSWV9CWklQMj0xIFwKLSAgICAtRENNQUtFX1VTRV9TWVNURU1fTElCUkFSWV9DVVJMPTEgXAotICAgIC1EQ01BS0VfVVNFX1NZU1RFTV9MSUJSQVJZX0VYUEFUPTEgXAotICAgIC1EQ01BS0VfVVNFX1NZU1RFTV9MSUJSQVJZX0ZPUk09MSBcCi0gICAgLURDTUFLRV9VU0VfU1lTVEVNX0xJQlJBUllfTElCQVJDSElWRT0xIFwKLSAgICAtRENNQUtFX1VTRV9TWVNURU1fTElCUkFSWV9MSUJMWk1BPTEgXAotICAgIC1EQ01BS0VfVVNFX1NZU1RFTV9MSUJSQVJZX1pMSUI9MSBcCi0gICAgLURLV1NZU19DSEFSX0lTX1NJR05FRD0xIFwKLSAgICAtREJVSUxEX0N1cnNlc0RpYWxvZz0wIFwKLSAgICAke0BiYi51dGlscy5jb250YWlucygnRElTVFJPX0ZFQVRVUkVTJywgJ2xhcmdlZmlsZScsICctREtXU1lTX0xGU19XT1JLUz0xJywgJy1ES1dTWVNfTEZTX0RJU0FCTEU9MScsIGQpfSBcCi0iCi0KLWRvX2luc3RhbGxfYXBwZW5kX2NsYXNzLW5hdGl2ZXNkaygpIHsKLSAgICBta2RpciAtcCAke0R9JHtkYXRhZGlyfS9jbWFrZQotICAgIGluc3RhbGwgLW0gNjQ0ICR7V09SS0RJUn0vT0VUb29sY2hhaW5Db25maWcuY21ha2UgJHtEfSR7ZGF0YWRpcn0vY21ha2UvCi0KLSAgICBta2RpciAtcCAke0R9JHtTREtQQVRITkFUSVZFfS9lbnZpcm9ubWVudC1zZXR1cC5kCi0gICAgaW5zdGFsbCAtbSA2NDQgJHtXT1JLRElSfS9lbnZpcm9ubWVudC5kLWNtYWtlLnNoICR7RH0ke1NES1BBVEhOQVRJVkV9L2Vudmlyb25tZW50LXNldHVwLmQvY21ha2Uuc2gKLX0KLQotRklMRVNfJHtQTn1fYXBwZW5kX2NsYXNzLW5hdGl2ZXNkayA9ICIgJHtTREtQQVRITkFUSVZFfSIKLQotRklMRVNfJHtQTn0gKz0gIiR7ZGF0YWRpcn0vY21ha2UtJHtDTUFLRV9NQUpPUl9WRVJTSU9OfSIKLUZJTEVTXyR7UE59LWRvYyArPSAiJHtkb2NkaXJ9L2NtYWtlLSR7Q01BS0VfTUFKT1JfVkVSU0lPTn0iCi0KLUJCQ0xBU1NFWFRFTkQgPSAibmF0aXZlc2RrIgpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9jbWFrZS9jbWFrZV8zLjYuMS5iYiBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvY21ha2UvY21ha2VfMy42LjEuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODUwZDZkZQotLS0gL2Rldi9udWxsCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvY21ha2UvY21ha2VfMy42LjEuYmIKQEAgLTAsMCArMSw0OCBAQAorcmVxdWlyZSBjbWFrZS5pbmMKKworaW5oZXJpdCBjbWFrZQorCitERVBFTkRTICs9ICJjdXJsIGV4cGF0IHpsaWIgbGliYXJjaGl2ZSB4eiBuY3Vyc2VzIGJ6aXAyIgorCitTUkNfVVJJX2FwcGVuZF9jbGFzcy1uYXRpdmVzZGsgPSAiIFwKKyAgICBmaWxlOi8vT0VUb29sY2hhaW5Db25maWcuY21ha2UgXAorICAgIGZpbGU6Ly9lbnZpcm9ubWVudC5kLWNtYWtlLnNoIgorCisjIFN0cmlwICR7cHJlZml4fSBmcm9tICR7ZG9jZGlyfSwgc2V0IHJlc3VsdCBpbnRvIGRvY2Rpcl9zdHJpcHBlZAorcHl0aG9uICgpIHsKKyAgICBwcmVmaXg9ZC5nZXRWYXIoInByZWZpeCIsIFRydWUpCisgICAgZG9jZGlyPWQuZ2V0VmFyKCJkb2NkaXIiLCBUcnVlKQorCisgICAgaWYgbm90IGRvY2Rpci5zdGFydHN3aXRoKHByZWZpeCk6CisgICAgICAgIGJiLmZhdGFsKCdkb2NkaXIgbXVzdCBjb250YWluIHByZWZpeCBhcyBpdHMgcHJlZml4JykKKworICAgIGRvY2Rpcl9zdHJpcHBlZCA9IGRvY2RpcltsZW4ocHJlZml4KTpdCisgICAgaWYgbGVuKGRvY2Rpcl9zdHJpcHBlZCkgPiAwIGFuZCBkb2NkaXJfc3RyaXBwZWRbMF0gPT0gJy8nOgorICAgICAgICBkb2NkaXJfc3RyaXBwZWQgPSBkb2NkaXJfc3RyaXBwZWRbMTpdCisKKyAgICBkLnNldFZhcigiZG9jZGlyX3N0cmlwcGVkIiwgZG9jZGlyX3N0cmlwcGVkKQorfQorCitFWFRSQV9PRUNNQUtFPSIgXAorICAgIC1EQ01BS0VfRE9DX0RJUj0ke2RvY2Rpcl9zdHJpcHBlZH0vY21ha2UtJHtDTUFLRV9NQUpPUl9WRVJTSU9OfSBcCisgICAgLURDTUFLRV9VU0VfU1lTVEVNX0xJQlJBUklFUz0xIFwKKyAgICAtRENNQUtFX1VTRV9TWVNURU1fTElCUkFSWV9KU09OQ1BQPTAgXAorICAgIC1ES1dTWVNfQ0hBUl9JU19TSUdORUQ9MSBcCisgICAgLURCVUlMRF9DdXJzZXNEaWFsb2c9MCBcCisgICAgJHtAYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsICdsYXJnZWZpbGUnLCAnLURLV1NZU19MRlNfV09SS1M9MScsICctREtXU1lTX0xGU19ESVNBQkxFPTEnLCBkKX0gXAorIgorCitkb19pbnN0YWxsX2FwcGVuZF9jbGFzcy1uYXRpdmVzZGsoKSB7CisgICAgbWtkaXIgLXAgJHtEfSR7ZGF0YWRpcn0vY21ha2UKKyAgICBpbnN0YWxsIC1tIDY0NCAke1dPUktESVJ9L09FVG9vbGNoYWluQ29uZmlnLmNtYWtlICR7RH0ke2RhdGFkaXJ9L2NtYWtlLworCisgICAgbWtkaXIgLXAgJHtEfSR7U0RLUEFUSE5BVElWRX0vZW52aXJvbm1lbnQtc2V0dXAuZAorICAgIGluc3RhbGwgLW0gNjQ0ICR7V09SS0RJUn0vZW52aXJvbm1lbnQuZC1jbWFrZS5zaCAke0R9JHtTREtQQVRITkFUSVZFfS9lbnZpcm9ubWVudC1zZXR1cC5kL2NtYWtlLnNoCit9CisKK0ZJTEVTXyR7UE59X2FwcGVuZF9jbGFzcy1uYXRpdmVzZGsgPSAiICR7U0RLUEFUSE5BVElWRX0iCisKK0ZJTEVTXyR7UE59ICs9ICIke2RhdGFkaXJ9L2NtYWtlLSR7Q01BS0VfTUFKT1JfVkVSU0lPTn0iCitGSUxFU18ke1BOfS1kb2MgKz0gIiR7ZG9jZGlyfS9jbWFrZS0ke0NNQUtFX01BSk9SX1ZFUlNJT059IgorCitCQkNMQVNTRVhURU5EID0gIm5hdGl2ZXNkayIKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvY3ZlLWNoZWNrLXRvb2wvY3ZlLWNoZWNrLXRvb2xfNS42LjQuYmIgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2N2ZS1jaGVjay10b29sL2N2ZS1jaGVjay10b29sXzUuNi40LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFiYWFkZWEKLS0tIC9kZXYvbnVsbAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2N2ZS1jaGVjay10b29sL2N2ZS1jaGVjay10b29sXzUuNi40LmJiCkBAIC0wLDAgKzEsNTQgQEAKK1NVTU1BUlkgPSAiY3ZlLWNoZWNrLXRvb2wiCitERVNDUklQVElPTiA9ICJjdmUtY2hlY2stdG9vbCBpcyBhIHRvb2wgZm9yIGNoZWNraW5nIGtub3duIChwdWJsaWMpIENWRXMuXAorVGhlIHRvb2wgd2lsbCBpZGVudGlmeSBwb3RlbnRpYWxseSB2dW5sbmVyYWJsZSBzb2Z0d2FyZSBwYWNrYWdlcyB3aXRoaW4gTGludXggZGlzdHJpYnV0aW9ucyB0aHJvdWdoIHZlcnNpb24gbWF0Y2hpbmcuIgorSE9NRVBBR0UgPSAiaHR0cHM6Ly9naXRodWIuY29tL2lrZXlkb2hlcnR5L2N2ZS1jaGVjay10b29sIgorU0VDVElPTiA9ICJEZXZlbG9wbWVudC9Ub29scyIKK0xJQ0VOU0UgPSAiR1BMLTIuMCsiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9MSUNFTlNFO21kNT1lOGMxNDU4NDM4ZWFkM2MzNDk3NGJjMGJlM2EwM2VkNiIKKworU1JDX1VSSSA9ICJodHRwczovL2dpdGh1Yi5jb20vaWtleWRvaGVydHkvJHtCUE59L3JlbGVhc2VzL2Rvd25sb2FkL3Yke1BWfS8ke0JQfS50YXIueHogXAorICAgICAgICAgICBmaWxlOi8vY2hlY2stZm9yLW1hbGxvY190cmltLWJlZm9yZS11c2luZy1pdC5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly8wMDAxLXByaW50LXByb2dyZXNzLWluLXBlcmNlbnQtd2hlbi1kb3dubG9hZGluZy1DVkUtZGIucGF0Y2ggXAorICAgICAgICAgICIKKworU1JDX1VSSVttZDVzdW1dID0gImM1ZjQyNDcxNDBmYzliZTNiZjQxNDkxZDMxYTM0MTU1IgorU1JDX1VSSVtzaGEyNTZzdW1dID0gImI4ZjI4M2JlNzE4YWY4ZDMxMjMyYWMxYmZjMTBhMDM3OGZiOTU4YWFhYTQ5YWYzOTE2OGY4YWNmNTAxZTZhNWIiCisKK0RFUEVORFMgPSAibGliY2hlY2sgZ2xpYi0yLjAganNvbi1nbGliIGN1cmwgbGlieG1sMiBzcWxpdGUzIG9wZW5zc2wgY2EtY2VydGlmaWNhdGVzIgorCitSREVQRU5EU18ke1BOfSA9ICJjYS1jZXJ0aWZpY2F0ZXMiCisKK2luaGVyaXQgcGtnY29uZmlnIGF1dG90b29scworCitFWFRSQV9PRUNPTkYgPSAiLS1kaXNhYmxlLWNvdmVyYWdlIgorQ0ZMQUdTX2FwcGVuZCA9ICIgLVduby1lcnJvcj1wZWRhbnRpYyIKKworZG9fcG9wdWxhdGVfY3ZlX2RiKCkgeworICAgIGlmIFsgIiR7QkJfTk9fTkVUV09SS30iID0gIjEiIF0gOyB0aGVuCisgICAgICAgIGJiZXJyb3IgIkJCX05PX05FVFdPUksgaXMgc2V0OyBDYW4ndCB1cGRhdGUgY3ZlLWNoZWNrLXRvb2wgZGF0YWJhc2UsIENWRXMgd29uJ3QgYmUgY2hlY2tlZCIKKyAgICAgICAgcmV0dXJuCisgICAgZmkKKworICAgICMgSW4gY2FzZSB3ZSBkb24ndCBpbmhlcml0IGN2ZS1jaGVjayBjbGFzcywgdXNlIGRlZmF1bHQgdmFsdWVzIGRlZmluZWQgaW4gdGhlIGNsYXNzLgorICAgIGN2ZV9kaXI9IiR7Q1ZFX0NIRUNLX0RCX0RJUn0iCisgICAgY3ZlX2ZpbGU9IiR7Q1ZFX0NIRUNLX1RNUF9GSUxFfSIKKworICAgIFsgLXogIiR7Y3ZlX2Rpcn0iIF0gJiYgY3ZlX2Rpcj0iJHtETF9ESVJ9L0NWRV9DSEVDSyIKKyAgICBbIC16ICIke2N2ZV9maWxlfSIgXSAmJiBjdmVfZmlsZT0iJHtUTVBESVJ9L2N2ZV9jaGVjayIKKworICAgIGJiZGVidWcgMiAiVXBkYXRpbmcgY3ZlLWNoZWNrLXRvb2wgZGF0YWJhc2UgbG9jYXRlZCBpbiAkY3ZlX2RpciIKKyAgICBpZiBjdmUtY2hlY2stdXBkYXRlIC1kICIkY3ZlX2RpciIgOyB0aGVuCisgICAgICAgIHByaW50ZiAiQ1ZFIGRhdGFiYXNlIHdhcyB1cGRhdGVkIG9uICVzIFVUQ1xuXG4iICIkKExBTkc9QyBkYXRlIC0tdXRjICsnJUYgJVQnKSIgPiAiJGN2ZV9maWxlIgorICAgIGVsc2UKKyAgICAgICAgYmJ3YXJuICJFcnJvciBpbiBleGVjdXRpbmcgY3ZlLWNoZWNrLXVwZGF0ZSIKKyAgICAgICAgaWYgWyAiJHtAJzEnIGlmIGJiLmRhdGEuaW5oZXJpdHNfY2xhc3MoJ2N2ZS1jaGVjaycsIGQpIGVsc2UgJzAnfSIgLW5lIDAgXSA7IHRoZW4KKyAgICAgICAgICAgIGJid2FybiAiRmFpbGVkIHRvIHVwZGF0ZSBjdmUtY2hlY2stdG9vbCBkYXRhYmFzZSwgQ1ZFcyB3b24ndCBiZSBjaGVja2VkIgorICAgICAgICBmaQorICAgIGZpCit9CisKK2FkZHRhc2sgcG9wdWxhdGVfY3ZlX2RiIGFmdGVyIGRvX3BvcHVsYXRlX3N5c3Jvb3QKK2RvX3BvcHVsYXRlX2N2ZV9kYltub3N0YW1wXSA9ICIxIgorZG9fcG9wdWxhdGVfY3ZlX2RiW3Byb2dyZXNzXSA9ICJwZXJjZW50IgorCitCQkNMQVNTRVhURU5EID0gIm5hdGl2ZSBuYXRpdmVzZGsiCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2N2ZS1jaGVjay10b29sL2ZpbGVzLzAwMDEtcHJpbnQtcHJvZ3Jlc3MtaW4tcGVyY2VudC13aGVuLWRvd25sb2FkaW5nLUNWRS1kYi5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvY3ZlLWNoZWNrLXRvb2wvZmlsZXMvMDAwMS1wcmludC1wcm9ncmVzcy1pbi1wZXJjZW50LXdoZW4tZG93bmxvYWRpbmctQ1ZFLWRiLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA1MTBlM2EKLS0tIC9kZXYvbnVsbAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2N2ZS1jaGVjay10b29sL2ZpbGVzLzAwMDEtcHJpbnQtcHJvZ3Jlc3MtaW4tcGVyY2VudC13aGVuLWRvd25sb2FkaW5nLUNWRS1kYi5wYXRjaApAQCAtMCwwICsxLDEzNSBAQAorRnJvbSBlOWVkMjZjZGU2M2Y4Y2E3NjA3YTAxMGE1MTgzMjkzMzlmOGMwMmQzIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogPT9VVEYtOD9xP0FuZHI9QzM9QTk9MjBEcmFzemlrPz0gPGdpdEBhbmRyZWQubmV0PgorRGF0ZTogTW9uLCAyNiBTZXAgMjAxNiAxMjoxMjo0MSArMDEwMAorU3ViamVjdDogW1BBVENIXSBwcmludCBwcm9ncmVzcyBpbiBwZXJjZW50IHdoZW4gZG93bmxvYWRpbmcgQ1ZFIGRiCitNSU1FLVZlcnNpb246IDEuMAorQ29udGVudC1UeXBlOiB0ZXh0L3BsYWluOyBjaGFyc2V0PVVURi04CitDb250ZW50LVRyYW5zZmVyLUVuY29kaW5nOiA4Yml0CisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworU2lnbmVkLW9mZi1ieTogQW5kcsOpIERyYXN6aWsgPGdpdEBhbmRyZWQubmV0PgorLS0tCisgc3JjL2xpYnJhcnkvZmV0Y2guYyB8IDI4ICsrKysrKysrKysrKysrKysrKysrKysrKysrKy0KKyBzcmMvbGlicmFyeS9mZXRjaC5oIHwgIDMgKystCisgc3JjL3VwZGF0ZS5jICAgICAgICB8IDE2ICsrKysrKysrKysrKy0tLS0KKyAzIGZpbGVzIGNoYW5nZWQsIDQxIGluc2VydGlvbnMoKyksIDYgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9zcmMvbGlicmFyeS9mZXRjaC5jIGIvc3JjL2xpYnJhcnkvZmV0Y2guYworaW5kZXggMDZkNGIzMC4uMGZlNmQ3NiAxMDA2NDQKKy0tLSBhL3NyYy9saWJyYXJ5L2ZldGNoLmMKKysrKyBiL3NyYy9saWJyYXJ5L2ZldGNoLmMKK0BAIC0zNywxMyArMzcsMzcgQEAgc3RhdGljIHNpemVfdCB3cml0ZV9mdW5jKHZvaWQgKnB0ciwgc2l6ZV90IHNpemUsIHNpemVfdCBubWVtYiwgc3RydWN0IGZldGNoX3QgKmYKKyAgICAgICAgIHJldHVybiBmd3JpdGUocHRyLCBzaXplLCBubWVtYiwgZi0+Zik7CisgfQorIAorLUZldGNoU3RhdHVzIGZldGNoX3VyaShjb25zdCBjaGFyICp1cmksIGNvbnN0IGNoYXIgKnRhcmdldCwgYm9vbCB2ZXJib3NlKQorK3N0cnVjdCBwZXJjZW50X3QgeworKyAgICAgICAgdW5zaWduZWQgaW50IHN0YXJ0OworKyAgICAgICAgdW5zaWduZWQgaW50IGVuZDsKKyt9OworKworK3N0YXRpYyBpbnQgcHJvZ3Jlc3NfY2FsbGJhY2tfbmV3KHZvaWQgKnB0ciwgY3VybF9vZmZfdCBkbHRvdGFsLCBjdXJsX29mZl90IGRsbm93LCBjdXJsX29mZl90IHVsdG90YWwsIGN1cmxfb2ZmX3QgdWxub3cpCisreworKyAgICAgICAgKHZvaWQpIHVsdG90YWw7CisrICAgICAgICAodm9pZCkgdWxub3c7CisrCisrICAgICAgICBzdHJ1Y3QgcGVyY2VudF90ICpwZXJjZW50ID0gKHN0cnVjdCBwZXJjZW50X3QgKikgcHRyOworKworKyAgICAgICAgaWYgKGRsdG90YWwgJiYgcGVyY2VudCAmJiBwZXJjZW50LT5lbmQgPj0gcGVyY2VudC0+c3RhcnQpIHsKKysgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IGRpZmYgPSBwZXJjZW50LT5lbmQgLSBwZXJjZW50LT5zdGFydDsKKysgICAgICAgICAgICAgICAgaWYgKGRpZmYpIHsKKysgICAgICAgICAgICAgICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwiY29tcGxldGVkOiAiQ1VSTF9GT1JNQVRfT0ZGX1QiJSVcciIsIHBlcmNlbnQtPnN0YXJ0ICsgKGRpZmYgKiBkbG5vdyAvIGRsdG90YWwpKTsKKysgICAgICAgICAgICAgICAgfQorKyAgICAgICAgfQorKworKyAgICAgICAgcmV0dXJuIDA7CisrfQorKworK0ZldGNoU3RhdHVzIGZldGNoX3VyaShjb25zdCBjaGFyICp1cmksIGNvbnN0IGNoYXIgKnRhcmdldCwgYm9vbCB2ZXJib3NlLAorKyAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgc3RhcnRfcGVyY2VudCwgdW5zaWduZWQgaW50IGVuZF9wZXJjZW50KQorIHsKKyAgICAgICAgIEZldGNoU3RhdHVzIHJldCA9IEZFVENIX1NUQVRVU19GQUlMOworICAgICAgICAgQ1VSTGNvZGUgcmVzOworICAgICAgICAgc3RydWN0IHN0YXQgc3Q7CisgICAgICAgICBDVVJMICpjdXJsID0gTlVMTDsKKyAgICAgICAgIHN0cnVjdCBmZXRjaF90ICpmID0gTlVMTDsKKysgICAgICAgIHN0cnVjdCBwZXJjZW50X3QgcGVyY2VudCA9IHsgLnN0YXJ0ID0gc3RhcnRfcGVyY2VudCwgLmVuZCA9IGVuZF9wZXJjZW50IH07CisgCisgICAgICAgICBjdXJsID0gY3VybF9lYXN5X2luaXQoKTsKKyAgICAgICAgIGlmICghY3VybCkgeworQEAgLTY3LDYgKzkxLDggQEAgRmV0Y2hTdGF0dXMgZmV0Y2hfdXJpKGNvbnN0IGNoYXIgKnVyaSwgY29uc3QgY2hhciAqdGFyZ2V0LCBib29sIHZlcmJvc2UpCisgICAgICAgICB9CisgICAgICAgICBpZiAodmVyYm9zZSkgeworICAgICAgICAgICAgICAgICAodm9pZCljdXJsX2Vhc3lfc2V0b3B0KGN1cmwsIENVUkxPUFRfTk9QUk9HUkVTUywgMEwpOworKyAgICAgICAgICAgICAgICAodm9pZCljdXJsX2Vhc3lfc2V0b3B0KGN1cmwsIENVUkxPUFRfWEZFUklORk9EQVRBLCAmcGVyY2VudCk7CisrICAgICAgICAgICAgICAgICh2b2lkKWN1cmxfZWFzeV9zZXRvcHQoY3VybCwgQ1VSTE9QVF9YRkVSSU5GT0ZVTkNUSU9OLCBwcm9ncmVzc19jYWxsYmFja19uZXcpOworICAgICAgICAgfQorICAgICAgICAgcmVzID0gY3VybF9lYXN5X3NldG9wdChjdXJsLCBDVVJMT1BUX1dSSVRFRlVOQ1RJT04sIChjdXJsX3dyaXRlX2NhbGxiYWNrKXdyaXRlX2Z1bmMpOworICAgICAgICAgaWYgKHJlcyAhPSBDVVJMRV9PSykgeworZGlmZiAtLWdpdCBhL3NyYy9saWJyYXJ5L2ZldGNoLmggYi9zcmMvbGlicmFyeS9mZXRjaC5oCitpbmRleCA3MGMzNzc5Li40Y2NlNWQxIDEwMDY0NAorLS0tIGEvc3JjL2xpYnJhcnkvZmV0Y2guaAorKysrIGIvc3JjL2xpYnJhcnkvZmV0Y2guaAorQEAgLTI4LDcgKzI4LDggQEAgdHlwZWRlZiBlbnVtIHsKKyAgKiBAcGFyYW0gdmVyYm9zZSBXaGV0aGVyIHRvIGJlIHZlcmJvc2UKKyAgKiBAcmV0dXJuIEEgRmV0Y2hTdGF0dXMsIGluZGljYXRpbmcgdGhlIG9wZXJhdGlvbiB0YWtlbgorICAqLworLUZldGNoU3RhdHVzIGZldGNoX3VyaShjb25zdCBjaGFyICp1cmksIGNvbnN0IGNoYXIgKnRhcmdldCwgYm9vbCB2ZXJib3NlKTsKKytGZXRjaFN0YXR1cyBmZXRjaF91cmkoY29uc3QgY2hhciAqdXJpLCBjb25zdCBjaGFyICp0YXJnZXQsIGJvb2wgdmVyYm9zZSwKKysgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IHRoaXNfcGVyY2VudCwgdW5zaWduZWQgaW50IG5leHRfcGVyY2VudCk7CisgCisgLyoqCisgICogQXR0ZW1wdCB0byBleHRyYWN0IHRoZSBnaXZlbiBnemlwcGVkIGZpbGUKK2RpZmYgLS1naXQgYS9zcmMvdXBkYXRlLmMgYi9zcmMvdXBkYXRlLmMKK2luZGV4IDMwZmJlOTYuLmVhZWVlZmQgMTAwNjQ0CistLS0gYS9zcmMvdXBkYXRlLmMKKysrKyBiL3NyYy91cGRhdGUuYworQEAgLTI2Niw3ICsyNjYsOCBAQCBzdGF0aWMgaW5saW5lIHZvaWQgdXBkYXRlX2VuZChpbnQgZmQsIGNvbnN0IGNoYXIgKnVwZGF0ZV9mbmFtZSwgYm9vbCBvaykKKyB9CisgCisgc3RhdGljIGludCBkb19mZXRjaF91cGRhdGUoaW50IHllYXIsIGNvbnN0IGNoYXIgKmRiX2RpciwgQ3ZlREIgKmN2ZV9kYiwKKy0gICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIGRiX2V4aXN0LCBib29sIHZlcmJvc2UpCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBkYl9leGlzdCwgYm9vbCB2ZXJib3NlLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCB0aGlzX3BlcmNlbnQsIHVuc2lnbmVkIGludCBuZXh0X3BlcmNlbnQpCisgeworICAgICAgICAgY29uc3QgY2hhciBudmRfdXJpW10gPSBVUklfUFJFRklYOworICAgICAgICAgYXV0b2ZyZWUoY3ZlX3N0cmluZykgKnVyaV9tZXRhID0gTlVMTDsKK0BAIC0zMzAsMTQgKzMzMSwxNCBAQCByZWZldGNoOgorICAgICAgICAgfQorIAorICAgICAgICAgLyogRmV0Y2ggTlZEIE1FVEEgZmlsZSAqLworLSAgICAgICAgc3QgPSBmZXRjaF91cmkodXJpX21ldGEtPnN0ciwgbnZkY3ZlX21ldGEtPnN0ciwgdmVyYm9zZSk7CisrICAgICAgICBzdCA9IGZldGNoX3VyaSh1cmlfbWV0YS0+c3RyLCBudmRjdmVfbWV0YS0+c3RyLCB2ZXJib3NlLCB0aGlzX3BlcmNlbnQsIHRoaXNfcGVyY2VudCk7CisgICAgICAgICBpZiAoc3QgPT0gRkVUQ0hfU1RBVFVTX0ZBSUwpIHsKKyAgICAgICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICJGYWlsZWQgdG8gZmV0Y2ggJXNcbiIsIHVyaV9tZXRhLT5zdHIpOworICAgICAgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgICB9CisgCisgICAgICAgICAvKiBGZXRjaCBOVkQgWE1MIGZpbGUgKi8KKy0gICAgICAgIHN0ID0gZmV0Y2hfdXJpKHVyaV9kYXRhX2d6LT5zdHIsIG52ZGN2ZV9kYXRhX2d6LT5zdHIsIHZlcmJvc2UpOworKyAgICAgICAgc3QgPSBmZXRjaF91cmkodXJpX2RhdGFfZ3otPnN0ciwgbnZkY3ZlX2RhdGFfZ3otPnN0ciwgdmVyYm9zZSwgdGhpc19wZXJjZW50LCBuZXh0X3BlcmNlbnQpOworICAgICAgICAgc3dpdGNoIChzdCkgeworICAgICAgICAgY2FzZSBGRVRDSF9TVEFUVVNfRkFJTDoKKyAgICAgICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICJGYWlsZWQgdG8gZmV0Y2ggJXNcbiIsIHVyaV9kYXRhX2d6LT5zdHIpOworQEAgLTQ1OSwxMCArNDYwLDE3IEBAIGJvb2wgdXBkYXRlX2RiKGJvb2wgcXVpZXQsIGNvbnN0IGNoYXIgKmRiX2ZpbGUpCisgICAgICAgICBmb3IgKGludCBpID0gWUVBUl9TVEFSVDsgaSA8PSB5ZWFyKzE7IGkrKykgeworICAgICAgICAgICAgICAgICBpbnQgeSA9IGkgPiB5ZWFyID8gLTEgOiBpOworICAgICAgICAgICAgICAgICBpbnQgcmM7CisrICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBzdGFydF9wZXJjZW50ID0gKChpKzAgLSBZRUFSX1NUQVJUKSAqIDEwMCkgLyAoeWVhcisyIC0gWUVBUl9TVEFSVCk7CisrICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBlbmRfcGVyY2VudCA9ICgoaSsxIC0gWUVBUl9TVEFSVCkgKiAxMDApIC8gKHllYXIrMiAtIFlFQVJfU1RBUlQpOworIAorLSAgICAgICAgICAgICAgICByYyA9IGRvX2ZldGNoX3VwZGF0ZSh5LCBkYl9kaXIsIGN2ZV9kYiwgZGJfZXhpc3QsICFxdWlldCk7CisrICAgICAgICAgICAgICAgIGlmICghcXVpZXQpCisrICAgICAgICAgICAgICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICJjb21wbGV0ZWQ6ICV1JSVcciIsIHN0YXJ0X3BlcmNlbnQpOworKyAgICAgICAgICAgICAgICByYyA9IGRvX2ZldGNoX3VwZGF0ZSh5LCBkYl9kaXIsIGN2ZV9kYiwgZGJfZXhpc3QsICFxdWlldCwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhcnRfcGVyY2VudCwgZW5kX3BlcmNlbnQpOworICAgICAgICAgICAgICAgICBzd2l0Y2ggKHJjKSB7CisgICAgICAgICAgICAgICAgIGNhc2UgMDoKKysgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXF1aWV0KQorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsImNvbXBsZXRlZDogJXUlJVxyIiwgZW5kX3BlcmNlbnQpOworICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAgICBjYXNlIEVOT01FTToKKyAgICAgICAgICAgICAgICAgICAgICAgICBnb3RvIG9vbTsKKy0tIAorMi45LjMKKwpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9jdmUtY2hlY2stdG9vbC9maWxlcy9jaGVjay1mb3ItbWFsbG9jX3RyaW0tYmVmb3JlLXVzaW5nLWl0LnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9jdmUtY2hlY2stdG9vbC9maWxlcy9jaGVjay1mb3ItbWFsbG9jX3RyaW0tYmVmb3JlLXVzaW5nLWl0LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA3NzRhZDkKLS0tIC9kZXYvbnVsbAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2N2ZS1jaGVjay10b29sL2ZpbGVzL2NoZWNrLWZvci1tYWxsb2NfdHJpbS1iZWZvcmUtdXNpbmctaXQucGF0Y2gKQEAgLTAsMCArMSw1MSBAQAorRnJvbSBjZTY0NjMzYjk3MzNlOTYyYjhkODQ4MjI0NDMwMWY2MTRkOGI1ODQ1IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KK0RhdGU6IE1vbiwgMjIgQXVnIDIwMTYgMjI6NTQ6MjQgLTA3MDAKK1N1YmplY3Q6IFtQQVRDSF0gQ2hlY2sgZm9yIG1hbGxvY190cmltIGJlZm9yZSB1c2luZyBpdAorCittYWxsb2NfdHJpbSBpcyBnbnUgc3BlY2lmaWMgYW5kIG5vdCBhbGwgbGliYworaW1wbGVtZW50IGl0LCB0aHJlZm9yZSB3cml0ZSBhIGNvbmZpZ3VyZSBjaGVjawordG8gcG9rZSBmb3IgaXQgZmlyc3QgYW5kIHVzZSB0aGUgZGVmaW5lIHRvCitndWFyZCBpdHMgdXNlLgorCitIZWxwcyBpbiBjb21waWxpbmcgb24gbXVzbCBiYXNlZCBzeXN0ZW1zCisKK1NpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CistLS0KK1Vwc3RyZWFtLVN0YXR1czogU3VibWl0dGVkIFtodHRwczovL2dpdGh1Yi5jb20vaWtleWRvaGVydHkvY3ZlLWNoZWNrLXRvb2wvcHVsbC80OF0KKyBjb25maWd1cmUuYWMgfCAyICsrCisgc3JjL2NvcmUuYyAgIHwgNCArKy0tCisgMiBmaWxlcyBjaGFuZ2VkLCA0IGluc2VydGlvbnMoKyksIDIgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9jb25maWd1cmUuYWMgYi9jb25maWd1cmUuYWMKK2luZGV4IGQzYjY2Y2UuLjc5YzM1NDIgMTAwNjQ0CistLS0gYS9jb25maWd1cmUuYWMKKysrKyBiL2NvbmZpZ3VyZS5hYworQEAgLTE5LDYgKzE5LDggQEAgbTRfZGVmaW5lKFtqc29uX3JlcXVpcmVkX3ZlcnNpb25dLCBbMC4xNi4wXSkKKyBtNF9kZWZpbmUoW29wZW5zc2xfcmVxdWlyZWRfdmVyc2lvbl0sWzEuMC4wXSkKKyAjIFRPRE86IFNldCBtaW5pbXVtIHNxbGl0ZQorIAorK0FDX0NIRUNLX0ZVTkNTX09OQ0UobWFsbG9jX3RyaW0pCisrCisgUEtHX0NIRUNLX01PRFVMRVMoQ1ZFX0NIRUNLX1RPT0wsCisgICAgICAgICAgICAgICAgICBbCisgICAgICAgICAgICAgICAgICAgZ2xpYi0yLjAgPj0gZ2xpYl9yZXF1aXJlZF92ZXJzaW9uLAorZGlmZiAtLWdpdCBhL3NyYy9jb3JlLmMgYi9zcmMvY29yZS5jCitpbmRleCA2MjYzMDMxLi4wZDVkZjI5IDEwMDY0NAorLS0tIGEvc3JjL2NvcmUuYworKysrIGIvc3JjL2NvcmUuYworQEAgLTQ5OCw5ICs0OTgsOSBAQCBib29sIGN2ZV9kYl9sb2FkKEN2ZURCICpzZWxmLCBjb25zdCBjaGFyICpmbmFtZSkKKyAgICAgICAgIH0KKyAKKyAgICAgICAgIGIgPSB0cnVlOworLQorKyNpZmRlZiBIQVZFX01BTExPQ19UUklNCisgICAgICAgICBtYWxsb2NfdHJpbSgwKTsKKy0KKysjZW5kaWYKKyAgICAgICAgIHhtbEZyZWVUZXh0UmVhZGVyKHIpOworICAgICAgICAgaWYgKGZkKSB7CisgICAgICAgICAgICAgICAgIGNsb3NlKGZkKTsKKy0tIAorMi45LjMKKwpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9kZXNrdG9wLWZpbGUtdXRpbHMvZGVza3RvcC1maWxlLXV0aWxzLW5hdGl2ZV8wLjIyLmJiIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9kZXNrdG9wLWZpbGUtdXRpbHMvZGVza3RvcC1maWxlLXV0aWxzLW5hdGl2ZV8wLjIyLmJiCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmODk5Y2QyLi4wMDAwMDAwCi0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZGVza3RvcC1maWxlLXV0aWxzL2Rlc2t0b3AtZmlsZS11dGlscy1uYXRpdmVfMC4yMi5iYgorKysgL2Rldi9udWxsCkBAIC0xLDE4ICswLDAgQEAKLVNFQ1RJT04gPSAiY29uc29sZS91dGlscyIKLVNVTU1BUlkgPSAiQ29tbWFuZCBsaW5lIHV0aWxpdGllcyBmb3Igd29ya2luZyB3aXRoICouZGVza3RvcCBmaWxlcyIKLUhPTUVQQUdFID0gImh0dHA6Ly93d3cuZnJlZWRlc2t0b3Aub3JnL3dpa2kvU29mdHdhcmUvZGVza3RvcC1maWxlLXV0aWxzIgotTElDRU5TRSA9ICJHUEx2MiIKLQotTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9YjIzNGVlNGQ2OWY1ZmNlNDQ4NmE4MGZkYWY0YTQyNjMiCi1ERVBFTkRTID0gImdsaWItMi4wLW5hdGl2ZSIKLQotU1JDX1VSSSA9ICJodHRwOi8vZnJlZWRlc2t0b3Aub3JnL3NvZnR3YXJlL2Rlc2t0b3AtZmlsZS11dGlscy9yZWxlYXNlcy9kZXNrdG9wLWZpbGUtdXRpbHMtJHtQVn0udGFyLnh6IgotCi1TUkNfVVJJW21kNXN1bV0gPSAiYzZiOWY5YWFjMWVhMTQzMDkxMTc4YzIzNDM3ZTZjZDAiCi1TUkNfVVJJW3NoYTI1NnN1bV0gPSAiODQzNTMyNjcyNjkyZjk4ZTliMmQ2YWU2Y2M4NjU4ZGE1NjJkZmRlMTYwNmM3ZjMzZDlkMjI3YTM0NGRlNTZjNSIKLQotaW5oZXJpdCBhdXRvdG9vbHMgbmF0aXZlCi0KLVMgPSAiJHtXT1JLRElSfS9kZXNrdG9wLWZpbGUtdXRpbHMtJHtQVn0iCi0KLUVYVFJBX09FQ09ORiArPSAiYWNfY3ZfcHJvZ19FTUFDUz1ubyIKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZGVza3RvcC1maWxlLXV0aWxzL2Rlc2t0b3AtZmlsZS11dGlscy1uYXRpdmVfMC4yMy5iYiBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZGVza3RvcC1maWxlLXV0aWxzL2Rlc2t0b3AtZmlsZS11dGlscy1uYXRpdmVfMC4yMy5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NGRhYWJlCi0tLSAvZGV2L251bGwKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9kZXNrdG9wLWZpbGUtdXRpbHMvZGVza3RvcC1maWxlLXV0aWxzLW5hdGl2ZV8wLjIzLmJiCkBAIC0wLDAgKzEsMTggQEAKK1NFQ1RJT04gPSAiY29uc29sZS91dGlscyIKK1NVTU1BUlkgPSAiQ29tbWFuZCBsaW5lIHV0aWxpdGllcyBmb3Igd29ya2luZyB3aXRoICouZGVza3RvcCBmaWxlcyIKK0hPTUVQQUdFID0gImh0dHA6Ly93d3cuZnJlZWRlc2t0b3Aub3JnL3dpa2kvU29mdHdhcmUvZGVza3RvcC1maWxlLXV0aWxzIgorTElDRU5TRSA9ICJHUEx2MiIKKworTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9YjIzNGVlNGQ2OWY1ZmNlNDQ4NmE4MGZkYWY0YTQyNjMiCitERVBFTkRTID0gImdsaWItMi4wLW5hdGl2ZSIKKworU1JDX1VSSSA9ICJodHRwOi8vZnJlZWRlc2t0b3Aub3JnL3NvZnR3YXJlL2Rlc2t0b3AtZmlsZS11dGlscy9yZWxlYXNlcy9kZXNrdG9wLWZpbGUtdXRpbHMtJHtQVn0udGFyLnh6IgorCitTUkNfVVJJW21kNXN1bV0gPSAiNTk5MTMzZDUxY2M5YTQxYmZlYzE4NjQxNDkwNmI2ZjEiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiNmMwOTQwMzFiZGVjNDZjOWY2MjE3MDhmOTE5MDg0ZTFjYjUyOTRlMmM1YjFlNGM4ODNiM2U3MGNiODkwMzM4NSIKKworaW5oZXJpdCBhdXRvdG9vbHMgbmF0aXZlCisKK1MgPSAiJHtXT1JLRElSfS9kZXNrdG9wLWZpbGUtdXRpbHMtJHtQVn0iCisKK0VYVFJBX09FQ09ORiArPSAiYWNfY3ZfcHJvZ19FTUFDUz1ubyIKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZGlzdGNjL2Rpc3RjY18zLjEuYmIgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2Rpc3RjYy9kaXN0Y2NfMy4xLmJiCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmODg3OWM4Li4wMDAwMDAwCi0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZGlzdGNjL2Rpc3RjY18zLjEuYmIKKysrIC9kZXYvbnVsbApAQCAtMSw3NCArMCwwIEBACi1TVU1NQVJZID0gIkEgcGFyYWxsZWwgYnVpbGQgc3lzdGVtIgotREVTQ1JJUFRJT04gPSAiZGlzdGNjIGlzIGEgcGFyYWxsZWwgYnVpbGQgc3lzdGVtIHRoYXQgZGlzdHJpYnV0ZXMgXAotY29tcGlsYXRpb24gb2YgQy9DKysvT2JqQyBjb2RlIGFjcm9zcyBtYWNoaW5lcyBvbiBhIG5ldHdvcmsuIgotU0VDVElPTiA9ICJkZXZlbCIKLUxJQ0VOU0UgPSAiR1BMdjIiCi1MSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT05NGQ1NWQ1MTJhOWJhMzZjYWE5YjdkZjA3OWJhZTE5ZiIKLQotREVQRU5EUyA9ICJhdmFoaSIKLQotR1RLQ09ORklHID0gImd0ayIKLUdUS0NPTkZJR19saWJjLXVjbGliYyA9ICIiCi0KLVBBQ0tBR0VDT05GSUcgPz89ICIke0BiYi51dGlscy5jb250YWlucygnRElTVFJPX0ZFQVRVUkVTJywgJ3gxMScsICcke0dUS0NPTkZJR30nLCAnJywgZCl9IHBvcHQiCi1QQUNLQUdFQ09ORklHW2d0a10gPSAiLS13aXRoLWd0aywtLXdpdGhvdXQtZ3RrIC0td2l0aG91dC1nbm9tZSxndGsrIgotIyB1c2Ugc3lzdGVtIHBvcHQgYnkgZGVmYXVsdAotUEFDS0FHRUNPTkZJR1twb3B0XSA9ICItLXdpdGhvdXQtaW5jbHVkZWQtcG9wdCwtLXdpdGgtaW5jbHVkZWQtcG9wdCxwb3B0IgotCi1SUkVDT01NRU5EU18ke1BOfSA9ICJhdmFoaS1kYWVtb24iCi0KLVNSQ19VUkkgPSAiZ2l0Oi8vZ2l0aHViLmNvbS9kaXN0Y2MvZGlzdGNjLmdpdCBcCi0gICAgICAgICAgIGZpbGU6Ly9zZXBhcmF0ZWJ1aWxkZGlyLnBhdGNoIFwKLSAgICAgICAgICAgZmlsZTovLzAwMDEtemVyb2NvbmYtSW5jbHVkZS1mY250bC5oLnBhdGNoIFwKLSAgICAgICAgICAgZmlsZTovL2RlZmF1bHQgXAotICAgICAgICAgICBmaWxlOi8vZGlzdGNjbW9uLWdub21lLmRlc2t0b3AgXAotICAgICAgICAgICBmaWxlOi8vZGlzdGNjIFwKLSAgICAgICAgICAgZmlsZTovL2Rpc3RjYy5zZXJ2aWNlIgotU1JDUkVWID0gIjlhMTcyZDNkMjAwNDI3NTRhMzBjMGNkOWE1ZDYzZmQxYTgxMjBjMzEiCi1TID0gIiR7V09SS0RJUn0vZ2l0IgotCi1pbmhlcml0IGF1dG90b29scyBwa2djb25maWcgdXBkYXRlLXJjLmQgdXNlcmFkZCBzeXN0ZW1kCi0KLUVYVFJBX09FQ09ORiArPSAiLS1kaXNhYmxlLVdlcnJvciBQWVRIT049L2Rldi9udWxsIgotCi1VU0VSQUREX1BBQ0tBR0VTID0gIiR7UE59IgotVVNFUkFERF9QQVJBTV8ke1BOfSA9ICItLXN5c3RlbSBcCi0gICAgICAgICAgICAgICAgICAgICAgIC0taG9tZSAvZGV2L251bGwgXAotICAgICAgICAgICAgICAgICAgICAgICAtLW5vLWNyZWF0ZS1ob21lIFwKLSAgICAgICAgICAgICAgICAgICAgICAgLS1naWQgbm9ncm91cCBcCi0gICAgICAgICAgICAgICAgICAgICAgIGRpc3RjYyIKLQotSU5JVFNDUklQVF9OQU1FID0gImRpc3RjYyIKLQotU1lTVEVNRF9QQUNLQUdFUyA9ICIke1BOfSIKLVNZU1RFTURfU0VSVklDRV8ke1BOfSA9ICJkaXN0Y2Muc2VydmljZSIKLQotZG9faW5zdGFsbF9hcHBlbmQoKSB7Ci0gICAgaW5zdGFsbCAtZCAke0R9JHtzeXNjb25mZGlyfS9pbml0LmQvCi0gICAgaW5zdGFsbCAtZCAke0R9JHtzeXNjb25mZGlyfS9kZWZhdWx0Ci0gICAgaW5zdGFsbCAtbSAwNzU1ICR7V09SS0RJUn0vZGlzdGNjICR7RH0ke3N5c2NvbmZkaXJ9L2luaXQuZC8KLSAgICBpbnN0YWxsIC1tIDA3NTUgJHtXT1JLRElSfS9kZWZhdWx0ICR7RH0ke3N5c2NvbmZkaXJ9L2RlZmF1bHQvZGlzdGNjCi0gICAgaW5zdGFsbCAtZCAke0R9JHtzeXN0ZW1kX3VuaXRkaXJ9L3N5c3RlbS8KLSAgICBpbnN0YWxsIC1tIDA2NDQgJHtXT1JLRElSfS9kaXN0Y2Muc2VydmljZSAke0R9JHtzeXN0ZW1kX3VuaXRkaXJ9L3N5c3RlbQotICAgIHNlZCAtaSAtZSAncyxAQklORElSQCwke2JpbmRpcn0sZycgJHtEfSR7c3lzdGVtZF91bml0ZGlyfS9zeXN0ZW0vZGlzdGNjLnNlcnZpY2UKLSAgICAke0RFU0tUT1BJTlNUQUxMfQotfQotREVTS1RPUElOU1RBTEwgPSAiIgotREVTS1RPUElOU1RBTExfbGliYy1nbGliYyAoKSB7Ci0gICAgaW5zdGFsbCAtZCAke0R9JHtkYXRhZGlyfS9kaXN0Y2MvCi0gICAgaW5zdGFsbCAtbSAwNjQ0ICR7V09SS0RJUn0vZGlzdGNjbW9uLWdub21lLmRlc2t0b3AgJHtEfSR7ZGF0YWRpcn0vZGlzdGNjLwotfQotUEFDS0FHRVMgKz0gImRpc3RjYy1kaXN0bW9uLWdub21lIgotCi1GSUxFU18ke1BOfSA9ICIgJHtzeXNjb25mZGlyfSBcCi0JCSR7YmluZGlyfS9kaXN0Y2MgXAotICAgICR7YmluZGlyfS9sc2Rpc3RjYyBcCi0JCSR7YmluZGlyfS9kaXN0Y2NkIFwKLQkJJHtiaW5kaXJ9L2Rpc3RjY21vbi10ZXh0IFwKLQkJJHtzeXN0ZW1kX3VuaXRkaXJ9L3N5c3RlbS9kaXN0Y2Muc2VydmljZSIKLUZJTEVTX2Rpc3RjYy1kaXN0bW9uLWdub21lID0gIiAgJHtiaW5kaXJ9L2Rpc3RjY21vbi1nbm9tZSBcCi0JCQkJJHtkYXRhZGlyfS9kaXN0Y2MiCi0KLXBrZ19wb3N0cm1fJHtQTn0gKCkgewotCWRlbHVzZXIgZGlzdGNjIHx8IHRydWUKLX0KZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZGlzdGNjL2Rpc3RjY18zLjIuYmIgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2Rpc3RjYy9kaXN0Y2NfMy4yLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMwODRhZDIKLS0tIC9kZXYvbnVsbAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2Rpc3RjYy9kaXN0Y2NfMy4yLmJiCkBAIC0wLDAgKzEsNzEgQEAKK1NVTU1BUlkgPSAiQSBwYXJhbGxlbCBidWlsZCBzeXN0ZW0iCitERVNDUklQVElPTiA9ICJkaXN0Y2MgaXMgYSBwYXJhbGxlbCBidWlsZCBzeXN0ZW0gdGhhdCBkaXN0cmlidXRlcyBcCitjb21waWxhdGlvbiBvZiBDL0MrKy9PYmpDIGNvZGUgYWNyb3NzIG1hY2hpbmVzIG9uIGEgbmV0d29yay4iCitTRUNUSU9OID0gImRldmVsIgorTElDRU5TRSA9ICJHUEx2MiIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PTk0ZDU1ZDUxMmE5YmEzNmNhYTliN2RmMDc5YmFlMTlmIgorCitERVBFTkRTID0gImF2YWhpIGJpbnV0aWxzIgorCitQQUNLQUdFQ09ORklHID8/PSAicG9wdCIKK1BBQ0tBR0VDT05GSUdbZ3RrXSA9ICItLXdpdGgtZ3RrLC0td2l0aG91dC1ndGsgLS13aXRob3V0LWdub21lLGd0aysiCisjIHVzZSBzeXN0ZW0gcG9wdCBieSBkZWZhdWx0CitQQUNLQUdFQ09ORklHW3BvcHRdID0gIi0td2l0aG91dC1pbmNsdWRlZC1wb3B0LC0td2l0aC1pbmNsdWRlZC1wb3B0LHBvcHQiCisKK1JSRUNPTU1FTkRTXyR7UE59ID0gImF2YWhpLWRhZW1vbiIKKworU1JDX1VSSSA9ICJnaXQ6Ly9naXRodWIuY29tL2Rpc3RjYy9kaXN0Y2MuZ2l0O2JyYW5jaD0ke1BWfSBcCisgICAgICAgICAgIGZpbGU6Ly9zZXBhcmF0ZWJ1aWxkZGlyLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovLzAwMDEtemVyb2NvbmYtSW5jbHVkZS1mY250bC5oLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL2RlZmF1bHQgXAorICAgICAgICAgICBmaWxlOi8vZGlzdGNjbW9uLWdub21lLmRlc2t0b3AgXAorICAgICAgICAgICBmaWxlOi8vZGlzdGNjIFwKKyAgICAgICAgICAgZmlsZTovL2Rpc3RjYy5zZXJ2aWNlIgorU1JDUkVWID0gImQ4YjE4ZGYzZTlkY2JlNGYwOTJiZWQ1NjU4MzVkMzk3NWU5OTQzMmMiCitTID0gIiR7V09SS0RJUn0vZ2l0IgorCitpbmhlcml0IGF1dG90b29scyBwa2djb25maWcgdXBkYXRlLXJjLmQgdXNlcmFkZCBzeXN0ZW1kCisKK0VYVFJBX09FQ09ORiArPSAiLS1kaXNhYmxlLVdlcnJvciBQWVRIT049JycgLS1kaXNhYmxlLXB1bXAtbW9kZSIKKworVVNFUkFERF9QQUNLQUdFUyA9ICIke1BOfSIKK1VTRVJBRERfUEFSQU1fJHtQTn0gPSAiLS1zeXN0ZW0gXAorICAgICAgICAgICAgICAgICAgICAgICAtLWhvbWUgL2Rldi9udWxsIFwKKyAgICAgICAgICAgICAgICAgICAgICAgLS1uby1jcmVhdGUtaG9tZSBcCisgICAgICAgICAgICAgICAgICAgICAgIC0tZ2lkIG5vZ3JvdXAgXAorICAgICAgICAgICAgICAgICAgICAgICBkaXN0Y2MiCisKK0lOSVRTQ1JJUFRfTkFNRSA9ICJkaXN0Y2MiCisKK1NZU1RFTURfUEFDS0FHRVMgPSAiJHtQTn0iCitTWVNURU1EX1NFUlZJQ0VfJHtQTn0gPSAiZGlzdGNjLnNlcnZpY2UiCisKK2RvX2luc3RhbGxfYXBwZW5kKCkgeworICAgIGluc3RhbGwgLWQgJHtEfSR7c3lzY29uZmRpcn0vaW5pdC5kLworICAgIGluc3RhbGwgLWQgJHtEfSR7c3lzY29uZmRpcn0vZGVmYXVsdAorICAgIGluc3RhbGwgLW0gMDc1NSAke1dPUktESVJ9L2Rpc3RjYyAke0R9JHtzeXNjb25mZGlyfS9pbml0LmQvCisgICAgaW5zdGFsbCAtbSAwNzU1ICR7V09SS0RJUn0vZGVmYXVsdCAke0R9JHtzeXNjb25mZGlyfS9kZWZhdWx0L2Rpc3RjYworICAgIGluc3RhbGwgLWQgJHtEfSR7c3lzdGVtZF91bml0ZGlyfS9zeXN0ZW0vCisgICAgaW5zdGFsbCAtbSAwNjQ0ICR7V09SS0RJUn0vZGlzdGNjLnNlcnZpY2UgJHtEfSR7c3lzdGVtZF91bml0ZGlyfS9zeXN0ZW0KKyAgICBzZWQgLWkgLWUgJ3MsQEJJTkRJUkAsJHtiaW5kaXJ9LGcnICR7RH0ke3N5c3RlbWRfdW5pdGRpcn0vc3lzdGVtL2Rpc3RjYy5zZXJ2aWNlCisgICAgJHtERVNLVE9QSU5TVEFMTH0KK30KK0RFU0tUT1BJTlNUQUxMID0gIiIKK0RFU0tUT1BJTlNUQUxMX2xpYmMtZ2xpYmMgKCkgeworICAgIGluc3RhbGwgLWQgJHtEfSR7ZGF0YWRpcn0vZGlzdGNjLworICAgIGluc3RhbGwgLW0gMDY0NCAke1dPUktESVJ9L2Rpc3RjY21vbi1nbm9tZS5kZXNrdG9wICR7RH0ke2RhdGFkaXJ9L2Rpc3RjYy8KK30KK1BBQ0tBR0VTICs9ICJkaXN0Y2MtZGlzdG1vbi1nbm9tZSIKKworRklMRVNfJHtQTn0gPSAiICR7c3lzY29uZmRpcn0gXAorCQkke2JpbmRpcn0vZGlzdGNjIFwKKyAgICAke2JpbmRpcn0vbHNkaXN0Y2MgXAorCQkke2JpbmRpcn0vZGlzdGNjZCBcCisJCSR7YmluZGlyfS9kaXN0Y2Ntb24tdGV4dCBcCisJCSR7c3lzdGVtZF91bml0ZGlyfS9zeXN0ZW0vZGlzdGNjLnNlcnZpY2UiCitGSUxFU19kaXN0Y2MtZGlzdG1vbi1nbm9tZSA9ICIgICR7YmluZGlyfS9kaXN0Y2Ntb24tZ25vbWUgXAorCQkJCSR7ZGF0YWRpcn0vZGlzdGNjIgorCitwa2dfcG9zdHJtXyR7UE59ICgpIHsKKwlkZWx1c2VyIGRpc3RjYyB8fCB0cnVlCit9CmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2Rpc3RjYy9maWxlcy9zZXBhcmF0ZWJ1aWxkZGlyLnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9kaXN0Y2MvZmlsZXMvc2VwYXJhdGVidWlsZGRpci5wYXRjaAppbmRleCBiOWUzZTQyLi43NTgwYjU1IDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2Rpc3RjYy9maWxlcy9zZXBhcmF0ZWJ1aWxkZGlyLnBhdGNoCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZGlzdGNjL2ZpbGVzL3NlcGFyYXRlYnVpbGRkaXIucGF0Y2gKQEAgLTYsMTYgKzYsMTYgQEAKIAogVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCiAKLUluZGV4OiBkaXN0Y2MtMy4xL01ha2VmaWxlLmluCitJbmRleDogZ2l0L01ha2VmaWxlLmluCiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLS0gZGlzdGNjLTMuMS5vcmlnL01ha2VmaWxlLmluCTIwMDgtMTItMDIgMjE6NTA6MzEuMDAwMDAwMDAwICswMDAwCi0rKysgZGlzdGNjLTMuMS9NYWtlZmlsZS5pbgkyMDEzLTAzLTA4IDEwOjQ5OjI0LjIyNDQwMDkzNyArMDAwMAotQEAgLTEwODgsNyArMTA4OCw3IEBACistLS0gZ2l0Lm9yaWcvTWFrZWZpbGUuaW4KKysrKyBnaXQvTWFrZWZpbGUuaW4KK0BAIC0xMTE3LDcgKzExMTcsNyBAQCBpbnN0YWxsLWV4YW1wbGU6ICQoZXhhbXBsZV9ET0NTKQogIGluc3RhbGwtZ25vbWUtZGF0YTogJChnbm9tZV9kYXRhKQogIAkkKG1raW5zdGFsbGRpcnMpICIkKERFU1RESVIpJChwa2dkYXRhZGlyKSIKLSAJZm9yIHAgaW4gJChnbm9tZV9kYXRhKTsgZG8JCQkJXAotLQkkKElOU1RBTExfREFUQSkgIiQkcCIgIiQoREVTVERJUikkKHBrZ2RhdGFkaXIpIiB8fCBleGl0IDE7IFwKLSsJJChJTlNUQUxMX0RBVEEpICIkKHNyY2RpcikvJCRwIiAiJChERVNURElSKSQocGtnZGF0YWRpcikiIHx8IGV4aXQgMTsgXAorIAlmb3IgcCBpbiAkKGdub21lX2RhdGEpOyBkbyBcCistCSAgJChJTlNUQUxMX0RBVEEpICIkJHAiICIkKERFU1RESVIpJChwa2dkYXRhZGlyKSIgfHwgZXhpdCAxOyBcCisrCSAgJChJTlNUQUxMX0RBVEEpICIkKHNyY2RpcikvJCRwIiAiJChERVNURElSKSQocGtnZGF0YWRpcikiIHx8IGV4aXQgMTsgXAogIAlkb25lCiAgCiAgaW5zdGFsbC1jb25mOiAkKGNvbmZfZmlsZXMpICQoZGVmYXVsdF9maWxlcykKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZG9jYm9vay14bWwvZG9jYm9vay14bWwtZHRkNF80LjUuYmIgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2RvY2Jvb2steG1sL2RvY2Jvb2steG1sLWR0ZDRfNC41LmJiCmluZGV4IGRlMWJjMzkuLjJmMTNkYmEgMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZG9jYm9vay14bWwvZG9jYm9vay14bWwtZHRkNF80LjUuYmIKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9kb2Nib29rLXhtbC9kb2Nib29rLXhtbC1kdGQ0XzQuNS5iYgpAQCAtMTEsNyArMTEsNyBAQAogIyBOb3RlOiB0aGUgdXBzdHJlYW0gc291cmNlcyBhcmUgbm90IGRpc3RyaWJ1dGVkIHdpdGggYSBsaWNlbnNlIGZpbGUuCiAjIExJQ0VOU0UtT0FTSVMgaXMgaW5jbHVkZWQgYXMgYSAicGF0Y2giIHRvIHdvcmthcm91bmQgdGhpcy4gV2hlbgogIyB1cGdyYWRpbmcgdGhpcyByZWNpcGUsIHBsZWFzZSB2ZXJpZnkgd2hldGhlciB0aGlzIGlzIHN0aWxsIG5lZWRlZC4KLVNSQ19VUkkgPSAiJHtERUJJQU5fTUlSUk9SfS9tYWluL2QvZG9jYm9vay14bWwvZG9jYm9vay14bWxfJHtQVn0ub3JpZy50YXIuZ3ogXAorU1JDX1VSSSA9ICJodHRwOi8vc25hcHNob3QuZGViaWFuLm9yZy9hcmNoaXZlL2RlYmlhbi8yMDE2MDcyOFQwNDM0NDNaL3Bvb2wvbWFpbi9kL2RvY2Jvb2steG1sL2RvY2Jvb2steG1sXyR7UFZ9Lm9yaWcudGFyLmd6IFwKICAgICAgICAgICAgZmlsZTovL0xJQ0VOU0UtT0FTSVMgXAogICAgICAgICAgICBmaWxlOi8vZG9jYm9vay14bWwtdXBkYXRlLWNhdGFsb2cueG1sLnBhdGNoIFwKICAgICAgICAgICAgZmlsZTovL2RvY2Jvb2steG1sLnhtbCBcCkBAIC0yMCw2ICsyMCw4IEBACiBTUkNfVVJJW21kNXN1bV0gPSAiNDg3YjRkNDRlMTVjZmZiMWY0MDQ4YWYyM2Y5ODIwOGUiCiBTUkNfVVJJW3NoYTI1NnN1bV0gPSAiYjBmOGVkY2Y2OTdmNTMxOGU2M2RkOThjOWE5MzFmM2ZlZTE2N2FmMDgwNWJhNDQxZGIzNzJlMGYxN2IyYTQ0ZiIKIAorVVBTVFJFQU1fQ0hFQ0tfVVJJID0gIiR7REVCSUFOX01JUlJPUn0vbWFpbi9kL2RvY2Jvb2steG1sLyIKKwogUz0iJHtXT1JLRElSfS9kb2Nib29rLXhtbC00LjUuYzMxNDI0IgogCiBpbmhlcml0IGFsbGFyY2gKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZG9jYm9vay14bWwvZG9jYm9vay14c2wtc3R5bGVzaGVldHMvZG9jYm9vay14c2wueG1sIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9kb2Nib29rLXhtbC9kb2Nib29rLXhzbC1zdHlsZXNoZWV0cy9kb2Nib29rLXhzbC54bWwKaW5kZXggYTFhNTc2YS4uYzYwNTU1YSAxMDA2NDQKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9kb2Nib29rLXhtbC9kb2Nib29rLXhzbC1zdHlsZXNoZWV0cy9kb2Nib29rLXhzbC54bWwKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9kb2Nib29rLXhtbC9kb2Nib29rLXhzbC1zdHlsZXNoZWV0cy9kb2Nib29rLXhzbC54bWwKQEAgLTEsNiArMSw2IEBACiA8P3htbCB2ZXJzaW9uPSIxLjAiPz4KIDwhRE9DVFlQRSBjYXRhbG9nIFBVQkxJQyAiLS8vT0FTSVMvL0RURCBFbnRpdHkgUmVzb2x1dGlvbiBYTUwgQ2F0YWxvZyBWMS4wLy9FTiIgImh0dHA6Ly93d3cub2FzaXMtb3Blbi5vcmcvY29tbWl0dGVlcy9lbnRpdHkvcmVsZWFzZS8xLjAvY2F0YWxvZy5kdGQiPgogPGNhdGFsb2cgeG1sbnM9InVybjpvYXNpczpuYW1lczp0YzplbnRpdHk6eG1sbnM6eG1sOmNhdGFsb2ciPgotPGRlbGVnYXRlVVJJIHVyaVN0YXJ0U3RyaW5nPSJodHRwOi8vZG9jYm9vay5zb3VyY2Vmb3JnZS5uZXQvcmVsZWFzZS94c2wvIiBjYXRhbG9nPSJmaWxlOi8vL3Vzci9zaGFyZS94bWwvZG9jYm9vay94c2wtc3R5bGVzaGVldHMtMS43OC4xL2NhdGFsb2cueG1sIi8+Ci08ZGVsZWdhdGVTeXN0ZW0gc3lzdGVtSWRTdGFydFN0cmluZz0iaHR0cDovL2RvY2Jvb2suc291cmNlZm9yZ2UubmV0L3JlbGVhc2UveHNsLyIgY2F0YWxvZz0iZmlsZTovLy91c3Ivc2hhcmUveG1sL2RvY2Jvb2sveHNsLXN0eWxlc2hlZXRzLTEuNzguMS9jYXRhbG9nLnhtbCIvPgorPGRlbGVnYXRlVVJJIHVyaVN0YXJ0U3RyaW5nPSJodHRwOi8vZG9jYm9vay5zb3VyY2Vmb3JnZS5uZXQvcmVsZWFzZS94c2wvIiBjYXRhbG9nPSJmaWxlOi8vL3Vzci9zaGFyZS94bWwvZG9jYm9vay94c2wtc3R5bGVzaGVldHMvY2F0YWxvZy54bWwiLz4KKzxkZWxlZ2F0ZVN5c3RlbSBzeXN0ZW1JZFN0YXJ0U3RyaW5nPSJodHRwOi8vZG9jYm9vay5zb3VyY2Vmb3JnZS5uZXQvcmVsZWFzZS94c2wvIiBjYXRhbG9nPSJmaWxlOi8vL3Vzci9zaGFyZS94bWwvZG9jYm9vay94c2wtc3R5bGVzaGVldHMvY2F0YWxvZy54bWwiLz4KIDwvY2F0YWxvZz4KZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZG9jYm9vay14bWwvZG9jYm9vay14c2wtc3R5bGVzaGVldHNfMS43OC4xLmJiIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9kb2Nib29rLXhtbC9kb2Nib29rLXhzbC1zdHlsZXNoZWV0c18xLjc4LjEuYmIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDUyZGUzYWIuLjAwMDAwMDAKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9kb2Nib29rLXhtbC9kb2Nib29rLXhzbC1zdHlsZXNoZWV0c18xLjc4LjEuYmIKKysrIC9kZXYvbnVsbApAQCAtMSw3NCArMCwwIEBACi1TVU1NQVJZID0gIlhTTCBzdHlsZXNoZWV0cyBmb3IgcHJvY2Vzc2luZyBEb2NCb29rIFhNTCB0byB2YXJpb3VzIG91dHB1dCBmb3JtYXRzIgotSE9NRVBBR0UgPSAiaHR0cDovL2RvY2Jvb2suc291cmNlZm9yZ2UubmV0IgotTElDRU5TRSA9ICJYU0wiCi1MSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT1hNmVlZWVkNDNkNDk4YzIyYTgzNTM4MjUzMzM1NjQ2MiIKLQotU1JDX1VSSSA9ICIke1NPVVJDRUZPUkdFX01JUlJPUn0vZG9jYm9vay9kb2Nib29rLXhzbC0ke1BWfS50YXIuYnoyIFwKLSAgICAgICAgICAgZmlsZTovL2RvY2Jvb2steHNsLnhtbCBcCi0gICAgICAgICAgIGZpbGU6Ly9kb2Nib29rLXhzbC1zdHlsZXNoZWV0cy1uby1iYXNoaXNtLWluLWRvY2Jvb2steHNsLXVwLnBhdGNoIFwKLSIKLQotU1JDX1VSSVttZDVzdW1dID0gIjZkZDBmODkxMzFjYzM1YmY0ZjJlZDEwNWExYzE3NzcxIgotU1JDX1VSSVtzaGEyNTZzdW1dID0gImM5OGY3Mjk2YWI1YzhjY2QyZTBiYzA3NjM0OTc2YTM3ZjUwODQ3ZGYyZDhhNTliZGIxZTE1NzY2NDcwMGI0NjciCi0KLVVQU1RSRUFNX0NIRUNLX1VSSSA9ICJodHRwOi8vc291cmNlZm9yZ2UubmV0L3Byb2plY3RzL2RvY2Jvb2svZmlsZXMvZG9jYm9vay14c2wvIgotIyBSZWplY3QgdmVyc2lvbnMgZW5kaW5nIGluIC4wIGFzIHRob3NlIGFyZSByZWxlYXNlIGNhbmRpZGF0ZXMKLVVQU1RSRUFNX0NIRUNLX1JFR0VYID0gIi9kb2Nib29rLXhzbC8oP1A8cHZlcj4oXGQrW1wuXC1fXSopKyg/IVwuMClcLlxkKykvIgotCi1TID0gIiR7V09SS0RJUn0vZG9jYm9vay14c2wtJHtQVn0iCi0KLWluaGVyaXQgYWxsYXJjaAotQkJDTEFTU0VYVEVORCA9ICJuYXRpdmUiCi0KLVNTVEFURVBPU1RJTlNURlVOQ1NfYXBwZW5kX2NsYXNzLW5hdGl2ZSA9ICIgZG9jYm9va194c2xfc3R5bGVzaGVldHNfc3N0YXRlX3Bvc3RpbnN0IgotU1lTUk9PVF9QUkVQUk9DRVNTX0ZVTkNTX2FwcGVuZF9jbGFzcy1uYXRpdmUgPSAiIGRvY2Jvb2tfeHNsX3N0eWxlc2hlZXRzX3N5c3Jvb3RfcHJlcHJvY2VzcyIKLQotZG9fY29uZmlndXJlICgpewotCToKLX0KLQotZG9fY29tcGlsZSAoKXsKLQk6Ci19Ci0KLWRvX2luc3RhbGwgKCkgewotCSMgUmVmZXIgdG8gaHR0cDovL3d3dy5saW51eGZyb21zY3JhdGNoLm9yZy9ibGZzL3ZpZXcvc3RhYmxlL3BzdC9kb2Nib29rLXhzbC5odG1sCi0JIyBmb3IgZGV0YWlscy4KLQlpbnN0YWxsIC12IC1tNzU1IC1kICR7RH0ke2RhdGFkaXJ9L3htbC9kb2Nib29rL3hzbC1zdHlsZXNoZWV0cy0ke1BWfQotCWxuIC1zIHhzbC1zdHlsZXNoZWV0cy0ke1BWfSAke0R9JHtkYXRhZGlyfS94bWwvZG9jYm9vay94c2wtc3R5bGVzaGVldHMKLQotCWNwIC12IC1SIFZFUlNJT04gY29tbW9uIGVjbGlwc2UgZXB1YiBleHRlbnNpb25zIGZvIGhpZ2hsaWdodGluZyBodG1sIFwKLQkJaHRtbGhlbHAgaW1hZ2VzIGphdmFoZWxwIGxpYiBtYW5wYWdlcyBwYXJhbXMgcHJvZmlsaW5nIFwKLQkJcm91bmR0cmlwIHNsaWRlcyB0ZW1wbGF0ZSB0ZXN0cyB0b29scyB3ZWJoZWxwIHdlYnNpdGUgXAotCQl4aHRtbCB4aHRtbC0xXzEgY2F0YWxvZy54bWwgXAotCSR7RH0ke2RhdGFkaXJ9L3htbC9kb2Nib29rL3hzbC1zdHlsZXNoZWV0cy0xLjc4LjEKLQotCWxuIC1zIFZFUlNJT04gJHtEfS8ke2RhdGFkaXJ9L3htbC9kb2Nib29rL3hzbC1zdHlsZXNoZWV0cy0xLjc4LjEvVkVSU0lPTi54c2wKLQotCWluc3RhbGwgLXYgLW02NDQgLUQgUkVBRE1FIFwKLQkJJHtEfSR7ZGF0YWRpcn0vZG9jL2RvY2Jvb2steHNsLTEuNzguMS9SRUFETUUudHh0Ci0JaW5zdGFsbCAtdiAtbTY0NCAgICBSRUxFQVNFLU5PVEVTKiBORVdTKiBcCi0JCSR7RH0ke2RhdGFkaXJ9L2RvYy9kb2Nib29rLXhzbC0xLjc4LjEKLQotCWluc3RhbGwgLWQgJHtEfSR7c3lzY29uZmRpcn0veG1sLwotCWluc3RhbGwgLW0gNzU1ICAke1dPUktESVJ9L2RvY2Jvb2steHNsLnhtbCAke0R9JHtzeXNjb25mZGlyfS94bWwvZG9jYm9vay14c2wueG1sCi0KLX0KLQotZG9jYm9va194c2xfc3R5bGVzaGVldHNfc3N0YXRlX3Bvc3RpbnN0ICgpIHsKLSAgICBpZiBbICIke0JCX0NVUlJFTlRUQVNLfSIgPSAicG9wdWxhdGVfc3lzcm9vdCIgLW8gIiR7QkJfQ1VSUkVOVFRBU0t9IiA9ICJwb3B1bGF0ZV9zeXNyb290X3NldHNjZW5lIiBdCi0gICAgdGhlbgotICAgICAgICAjIEVuc3VyZSB0aGF0IHRoZSBjYXRhbG9nIGZpbGUgc2dtbC1kb2Nib29rLmNhdCBpcyBwcm9wZXJseQotICAgICAgICAjIHVwZGF0ZWQgd2hlbiB0aGUgcGFja2FnZSBpcyBpbnN0YWxsZWQgZnJvbSBzc3RhdGUgY2FjaGUuCi0gICAgICAgIHNlZCAtaSAtZSAic3xmaWxlOi8vLiovdXNyL3NoYXJlL3htbHxmaWxlOi8vJHtkYXRhZGlyfS94bWx8ZyIgJHtTWVNST09UX0RFU1RESVJ9JHtzeXNjb25mZGlyfS94bWwvZG9jYm9vay14c2wueG1sCi0gICAgZmkKLX0KLQotZG9jYm9va194c2xfc3R5bGVzaGVldHNfc3lzcm9vdF9wcmVwcm9jZXNzICgpIHsKLSAgICAjIFVwZGF0ZSB0aGUgaGFyZGNvZGUgZGlyIGluIGRvY2Jvb2steG1sLnhtbAotICAgIHNlZCAtaSAtZSAic3xmaWxlOi8vL3Vzci9zaGFyZS94bWx8ZmlsZTovLyR7ZGF0YWRpcn0veG1sfGciICR7U1lTUk9PVF9ERVNURElSfSR7c3lzY29uZmRpcn0veG1sL2RvY2Jvb2steHNsLnhtbAotfQotCi1SREVQRU5EU18ke1BOfSArPSAicGVybCIKLUZJTEVTXyR7UE59ID0gIiR7ZGF0YWRpcn0veG1sLyogJHtzeXNjb25mZGlyfS94bWwvZG9jYm9vay14c2wueG1sIgotRklMRVNfJHtQTn0tZG9jID0gIiR7ZGF0YWRpcn0vZG9jLyoiCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2RvY2Jvb2steG1sL2RvY2Jvb2steHNsLXN0eWxlc2hlZXRzXzEuNzkuMS5iYiBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZG9jYm9vay14bWwvZG9jYm9vay14c2wtc3R5bGVzaGVldHNfMS43OS4xLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFhMDNhODIKLS0tIC9kZXYvbnVsbAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2RvY2Jvb2steG1sL2RvY2Jvb2steHNsLXN0eWxlc2hlZXRzXzEuNzkuMS5iYgpAQCAtMCwwICsxLDc0IEBACitTVU1NQVJZID0gIlhTTCBzdHlsZXNoZWV0cyBmb3IgcHJvY2Vzc2luZyBEb2NCb29rIFhNTCB0byB2YXJpb3VzIG91dHB1dCBmb3JtYXRzIgorSE9NRVBBR0UgPSAiaHR0cDovL2RvY2Jvb2suc291cmNlZm9yZ2UubmV0IgorTElDRU5TRSA9ICJYU0wiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT02YmVhZGQ5OGY5YzU0YWIwYzM4N2UxNDIxMWVlNGQwZSIKKworU1JDX1VSSSA9ICIke1NPVVJDRUZPUkdFX01JUlJPUn0vZG9jYm9vay9kb2Nib29rLXhzbC0ke1BWfS50YXIuYnoyIFwKKyAgICAgICAgICAgZmlsZTovL2RvY2Jvb2steHNsLnhtbCBcCisgICAgICAgICAgIGZpbGU6Ly9kb2Nib29rLXhzbC1zdHlsZXNoZWV0cy1uby1iYXNoaXNtLWluLWRvY2Jvb2steHNsLXVwLnBhdGNoIFwKKyIKKworU1JDX1VSSVttZDVzdW1dID0gImI0OGNiZjkyOWEyYWQ4NWU2NjcyZjcxMDc3N2NhN2JjIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjcyNWY0NTJlMTJiMjk2OTU2ZThiZmI4NzZjY2VjZTcxZWVlY2RkMTRiOTRmNjY3ZjNlZDkwOTE3NjFhNGE5NjgiCisKK1VQU1RSRUFNX0NIRUNLX1VSSSA9ICJodHRwOi8vc291cmNlZm9yZ2UubmV0L3Byb2plY3RzL2RvY2Jvb2svZmlsZXMvZG9jYm9vay14c2wvIgorIyBSZWplY3QgdmVyc2lvbnMgZW5kaW5nIGluIC4wIGFzIHRob3NlIGFyZSByZWxlYXNlIGNhbmRpZGF0ZXMKK1VQU1RSRUFNX0NIRUNLX1JFR0VYID0gIi9kb2Nib29rLXhzbC8oP1A8cHZlcj4oXGQrW1wuXC1fXSopKyg/IVwuMClcLlxkKykvIgorCitTID0gIiR7V09SS0RJUn0vZG9jYm9vay14c2wtJHtQVn0iCisKK2luaGVyaXQgYWxsYXJjaAorQkJDTEFTU0VYVEVORCA9ICJuYXRpdmUiCisKK1NTVEFURVBPU1RJTlNURlVOQ1NfYXBwZW5kX2NsYXNzLW5hdGl2ZSA9ICIgZG9jYm9va194c2xfc3R5bGVzaGVldHNfc3N0YXRlX3Bvc3RpbnN0IgorU1lTUk9PVF9QUkVQUk9DRVNTX0ZVTkNTX2FwcGVuZF9jbGFzcy1uYXRpdmUgPSAiIGRvY2Jvb2tfeHNsX3N0eWxlc2hlZXRzX3N5c3Jvb3RfcHJlcHJvY2VzcyIKKworZG9fY29uZmlndXJlICgpeworCToKK30KKworZG9fY29tcGlsZSAoKXsKKwk6Cit9CisKK2RvX2luc3RhbGwgKCkgeworCSMgUmVmZXIgdG8gaHR0cDovL3d3dy5saW51eGZyb21zY3JhdGNoLm9yZy9ibGZzL3ZpZXcvc3RhYmxlL3BzdC9kb2Nib29rLXhzbC5odG1sCisJIyBmb3IgZGV0YWlscy4KKwlpbnN0YWxsIC12IC1tNzU1IC1kICR7RH0ke2RhdGFkaXJ9L3htbC9kb2Nib29rL3hzbC1zdHlsZXNoZWV0cy0ke1BWfQorCWxuIC1zIHhzbC1zdHlsZXNoZWV0cy0ke1BWfSAke0R9JHtkYXRhZGlyfS94bWwvZG9jYm9vay94c2wtc3R5bGVzaGVldHMKKworCWNwIC12IC1SIFZFUlNJT04gYXNzZW1ibHkgY29tbW9uIGVjbGlwc2UgZXB1YiBlcHViMyBmbyBcCisJCWhpZ2hsaWdodGluZyBodG1sIGh0bWxoZWxwIGltYWdlcyBqYXZhaGVscCBsaWIgbWFucGFnZXMgXAorCQlwYXJhbXMgcHJvZmlsaW5nIHJvdW5kdHJpcCBzbGlkZXMgdGVtcGxhdGUgd2ViaGVscCB3ZWJzaXRlIFwKKwkJeGh0bWwgeGh0bWwtMV8xIHhodG1sNSBjYXRhbG9nLnhtbCBcCisJCSR7RH0ke2RhdGFkaXJ9L3htbC9kb2Nib29rL3hzbC1zdHlsZXNoZWV0cy0ke1BWfQorCisJbG4gLXMgVkVSU0lPTiAke0R9LyR7ZGF0YWRpcn0veG1sL2RvY2Jvb2sveHNsLXN0eWxlc2hlZXRzLSR7UFZ9L1ZFUlNJT04ueHNsCisKKwlpbnN0YWxsIC12IC1tNjQ0IC1EIFJFQURNRSBcCisJCSR7RH0ke2RhdGFkaXJ9L2RvYy9kb2Nib29rLXhzbC0ke1BWfS9SRUFETUUudHh0CisJaW5zdGFsbCAtdiAtbTY0NCAgICBSRUxFQVNFLU5PVEVTKiBORVdTKiBcCisJCSR7RH0ke2RhdGFkaXJ9L2RvYy9kb2Nib29rLXhzbC0ke1BWfQorCisJaW5zdGFsbCAtZCAke0R9JHtzeXNjb25mZGlyfS94bWwvCisJaW5zdGFsbCAtbSA3NTUgICR7V09SS0RJUn0vZG9jYm9vay14c2wueG1sICR7RH0ke3N5c2NvbmZkaXJ9L3htbC9kb2Nib29rLXhzbC54bWwKKworfQorCitkb2Nib29rX3hzbF9zdHlsZXNoZWV0c19zc3RhdGVfcG9zdGluc3QgKCkgeworICAgIGlmIFsgIiR7QkJfQ1VSUkVOVFRBU0t9IiA9ICJwb3B1bGF0ZV9zeXNyb290IiAtbyAiJHtCQl9DVVJSRU5UVEFTS30iID0gInBvcHVsYXRlX3N5c3Jvb3Rfc2V0c2NlbmUiIF0KKyAgICB0aGVuCisgICAgICAgICMgRW5zdXJlIHRoYXQgdGhlIGNhdGFsb2cgZmlsZSBzZ21sLWRvY2Jvb2suY2F0IGlzIHByb3Blcmx5CisgICAgICAgICMgdXBkYXRlZCB3aGVuIHRoZSBwYWNrYWdlIGlzIGluc3RhbGxlZCBmcm9tIHNzdGF0ZSBjYWNoZS4KKyAgICAgICAgc2VkIC1pIC1lICJzfGZpbGU6Ly8uKi91c3Ivc2hhcmUveG1sfGZpbGU6Ly8ke2RhdGFkaXJ9L3htbHxnIiAke1NZU1JPT1RfREVTVERJUn0ke3N5c2NvbmZkaXJ9L3htbC9kb2Nib29rLXhzbC54bWwKKyAgICBmaQorfQorCitkb2Nib29rX3hzbF9zdHlsZXNoZWV0c19zeXNyb290X3ByZXByb2Nlc3MgKCkgeworICAgICMgVXBkYXRlIHRoZSBoYXJkY29kZSBkaXIgaW4gZG9jYm9vay14bWwueG1sCisgICAgc2VkIC1pIC1lICJzfGZpbGU6Ly8vdXNyL3NoYXJlL3htbHxmaWxlOi8vJHtkYXRhZGlyfS94bWx8ZyIgJHtTWVNST09UX0RFU1RESVJ9JHtzeXNjb25mZGlyfS94bWwvZG9jYm9vay14c2wueG1sCit9CisKK1JERVBFTkRTXyR7UE59ICs9ICJwZXJsIgorRklMRVNfJHtQTn0gPSAiJHtkYXRhZGlyfS94bWwvKiAke3N5c2NvbmZkaXJ9L3htbC9kb2Nib29rLXhzbC54bWwiCitGSUxFU18ke1BOfS1kb2MgPSAiJHtkYXRhZGlyfS9kb2MvKiIKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZG9zZnN0b29scy9kb3Nmc3Rvb2xzLzAwMDEtbWtmcy5mYXQtZml4LWluY29ycmVjdC1pbnQtdHlwZS5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZG9zZnN0b29scy9kb3Nmc3Rvb2xzLzAwMDEtbWtmcy5mYXQtZml4LWluY29ycmVjdC1pbnQtdHlwZS5wYXRjaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzQ5N2NhNS4uMDAwMDAwMAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2Rvc2ZzdG9vbHMvZG9zZnN0b29scy8wMDAxLW1rZnMuZmF0LWZpeC1pbmNvcnJlY3QtaW50LXR5cGUucGF0Y2gKKysrIC9kZXYvbnVsbApAQCAtMSw0NiArMCwwIEBACi1Gcm9tIDNiOTU3ODZhZjEzZTI4MTU3ZDg4OWJkOTBhMzg0ZWUyNTVmMmQ5MWQgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCi1Gcm9tOiAiWWFubiBFLiBNT1JJTiIgPHlhbm4ubW9yaW4uMTk5OEBmcmVlLmZyPgotRGF0ZTogU3VuLCAxNiBBdWcgMjAxNSAxNTo1NTo0MyArMDIwMAotU3ViamVjdDogW1BBVENIXSBta2ZzLmZhdDogZml4IGluY29ycmVjdCBpbnQgdHlwZQotCi11X2ludDMyX3QgaXMgbm90IGEgc3RhbmFyZCB0eXBlLCB3aGlsZSB1aW50MzJfdCBpcy4gVGhpcyBmaXhlcyBidWlsZHMKLXdpdGggdGhlIG11c2wgQyBsaWJyYXJ5LCB3aGljaCBvbmx5IGRlZmluZXMgc28tY2FsbGVkICJjbGVhbiIgaGVhZGVyczsKLWJ1aWxkIGZhaWx1cmVzIGFyZSBsaWtlIChiYWNrLXF1b3RlcyBhbmQgZWxpc2lvbiBtYW51YWxseSBhZGRlZCBmb3IKLXJlYWRhYmlsaXR5KToKLQotICAgIGh0dHA6Ly9hdXRvYnVpbGQuYnVpbGRyb290Lm9yZy9yZXN1bHRzL2EwOS9hMDkyM2Q3ZjZkNGRiYWUwMmViYTRjNTAyNGJiZGFlM2E1MmFhODVhL2J1aWxkLWVuZC5sb2cKLQotICAgIC9ob21lL3Bla28vYXV0b2J1aWxkL2luc3RhbmNlLTEvb3V0cHV0L2hvc3QvdXNyL2Jpbi94ODZfNjQtbGludXgtZ2NjIC1EX0xBUkdFRklMRV9TT1VSQ0UgXAotICAgICAgICAtRF9MQVJHRUZJTEU2NF9TT1VSQ0UgLURfRklMRV9PRkZTRVRfQklUUz02NCAgIC1PcyAgLURfR05VX1NPVVJDRSAtRF9MQVJHRUZJTEVfU09VUkNFIFwKLSAgICAgICAgLURfTEFSR0VGSUxFNjRfU09VUkNFIC1EX0ZJTEVfT0ZGU0VUX0JJVFM9NjQgIC1jIC1vIG1rZnMuZmF0Lm8gc3JjL21rZnMuZmF0LmMKLSAgICBzcmMvbWtmcy5mYXQuYzogSW4gZnVuY3Rpb24gJ21haW4nOgotICAgIHNyYy9ta2ZzLmZhdC5jOjE0MTU6MTg6IGVycm9yOiAndV9pbnQzMl90JyB1bmRlY2xhcmVkIChmaXJzdCB1c2UgaW4gdGhpcyBmdW5jdGlvbikKLSAgICAgICAgIHZvbHVtZV9pZCA9ICh1X2ludDMyX3QpICgoY3JlYXRlX3RpbWV2YWwudHZfc2VjIDw8IDIwKSB8IGNyZWF0ZV90aW1ldmFsLnR2X3VzZWMpOyBbLi4uXQotICAgICAgICAgICAgICAgICAgICAgIF4KLSAgICBzcmMvbWtmcy5mYXQuYzoxNDE1OjE4OiBub3RlOiBlYWNoIHVuZGVjbGFyZWQgaWRlbnRpZmllciBpcyByZXBvcnRlZCBvbmx5IG9uY2UgZm9yIGVhY2gKLSAgICBmdW5jdGlvbiBpdCBhcHBlYXJzIGluCi0KLVNpZ25lZC1vZmYtYnk6ICJZYW5uIEUuIE1PUklOIiA8eWFubi5tb3Jpbi4xOTk4QGZyZWUuZnI+Ci1TaWduZWQtb2ZmLWJ5OiBBbmRyZWFzIEJvbWJlIDxhZWJAZGViaWFuLm9yZz4KLS0tLQotVXBzdHJlYW0tU3RhdHVzOiBCYWNrcG9ydAotCi0gc3JjL21rZnMuZmF0LmMgfCAyICstCi0gMSBmaWxlIGNoYW5nZWQsIDEgaW5zZXJ0aW9uKCspLCAxIGRlbGV0aW9uKC0pCi0KLWRpZmYgLS1naXQgYS9zcmMvbWtmcy5mYXQuYyBiL3NyYy9ta2ZzLmZhdC5jCi1pbmRleCBiMzhkMTE2Li5kZGRiZTI0IDEwMDY0NAotLS0tIGEvc3JjL21rZnMuZmF0LmMKLSsrKyBiL3NyYy9ta2ZzLmZhdC5jCi1AQCAtMTQxMiw3ICsxNDEyLDcgQEAgaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KQotIAotICAgICBnZXR0aW1lb2ZkYXkoJmNyZWF0ZV90aW1ldmFsLCBOVUxMKTsKLSAgICAgY3JlYXRlX3RpbWUgPSBjcmVhdGVfdGltZXZhbC50dl9zZWM7Ci0tICAgIHZvbHVtZV9pZCA9ICh1X2ludDMyX3QpICgoY3JlYXRlX3RpbWV2YWwudHZfc2VjIDw8IDIwKSB8IGNyZWF0ZV90aW1ldmFsLnR2X3VzZWMpOwkvKiBEZWZhdWx0IHZvbHVtZSBJRCA9IGNyZWF0aW9uIHRpbWUsIGZ1ZGdlZCBmb3IgbW9yZSB1bmlxdWVuZXNzICovCi0rICAgIHZvbHVtZV9pZCA9ICh1aW50MzJfdCkgKChjcmVhdGVfdGltZXZhbC50dl9zZWMgPDwgMjApIHwgY3JlYXRlX3RpbWV2YWwudHZfdXNlYyk7CS8qIERlZmF1bHQgdm9sdW1lIElEID0gY3JlYXRpb24gdGltZSwgZnVkZ2VkIGZvciBtb3JlIHVuaXF1ZW5lc3MgKi8KLSAgICAgY2hlY2tfYXRhcmkoKTsKLSAKLSAgICAgcHJpbnRmKCJta2ZzLmZhdCAiIFZFUlNJT04gIiAoIiBWRVJTSU9OX0RBVEUgIilcbiIpOwotLS0gCi0yLjcuMAotCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2Rvc2ZzdG9vbHMvZG9zZnN0b29scy9sYXJnZWZpbGUucGF0Y2ggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2Rvc2ZzdG9vbHMvZG9zZnN0b29scy9sYXJnZWZpbGUucGF0Y2gKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDdmN2Q4MzUuLjAwMDAwMDAKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9kb3Nmc3Rvb2xzL2Rvc2ZzdG9vbHMvbGFyZ2VmaWxlLnBhdGNoCisrKyAvZGV2L251bGwKQEAgLTEsMTkgKzAsMCBAQAotZGVmZXIgc2V0dGluZyBsYXJnZWZpbGUgZmxhZ3MgdG8gYnVpbGQgbWFrZXJ5Ci1pbiBhIGNyb3NzIGJ1aWxkIHdlIGNhbiBub3QgZG8gcnVudGltZSBjb25maWcgdGVzdHMKLQotU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KLVVwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZVtDcm9zcyBjb21waWxlIFNwZWNpZmljXQotSW5kZXg6IGRvc2ZzdG9vbHMtMy4wLjI4L01ha2VmaWxlCi09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLS0gZG9zZnN0b29scy0zLjAuMjgub3JpZy9NYWtlZmlsZQotKysrIGRvc2ZzdG9vbHMtMy4wLjI4L01ha2VmaWxlCi1AQCAtMjcsOCArMjcsNyBAQCBTQklORElSID0gJChQUkVGSVgpL3NiaW4KLSBET0NESVIgPSAkKFBSRUZJWCkvc2hhcmUvZG9jCi0gTUFORElSID0gJChQUkVGSVgpL3NoYXJlL21hbgotIAotLSNPUFRGTEFHUyA9IC1PMiAtZm9taXQtZnJhbWUtcG9pbnRlciAtRF9MQVJHRUZJTEVfU09VUkNFIC1EX0ZJTEVfT0ZGU0VUX0JJVFM9NjQKLS1PUFRGTEFHUyA9IC1PMiAtZm9taXQtZnJhbWUtcG9pbnRlciAtRF9HTlVfU09VUkNFICQoc2hlbGwgZ2V0Y29uZiBMRlNfQ0ZMQUdTKQotK09QVEZMQUdTID0gLU8yIC1mb21pdC1mcmFtZS1wb2ludGVyCi0gI1dBUk5GTEFHUyA9IC1XYWxsIC1wZWRhbnRpYyAtc3RkPWM5OQotIFdBUk5GTEFHUyA9IC1XYWxsIC1XZXh0cmEgLVduby1zaWduLWNvbXBhcmUgLVduby1taXNzaW5nLWZpZWxkLWluaXRpYWxpemVycyAtV21pc3NpbmctcHJvdG90eXBlcyAtV3N0cmljdC1wcm90b3R5cGVzIC1Xd3JpdGUtc3RyaW5ncwotIERFQlVHRkxBR1MgPSAtZwpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9kb3Nmc3Rvb2xzL2Rvc2ZzdG9vbHNfMy4wLjI4LmJiIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9kb3Nmc3Rvb2xzL2Rvc2ZzdG9vbHNfMy4wLjI4LmJiCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2ZmMzZTQxLi4wMDAwMDAwCi0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZG9zZnN0b29scy9kb3Nmc3Rvb2xzXzMuMC4yOC5iYgorKysgL2Rldi9udWxsCkBAIC0xLDMxICswLDAgQEAKLSMgZG9zZnN0b29scyBPRSBidWlsZCBmaWxlCi0jIENvcHlyaWdodCAoQykgMjAwNC0yMDA2LCBBZHZhbmNlZCBNaWNybyBEZXZpY2VzLCBJbmMuICBBbGwgUmlnaHRzIFJlc2VydmVkCi0jIENvcHlyaWdodCAoQykgMjAxNSwgU8ODwrZyZW4gQnJpbmttYW5uIDxzb2VyZW4uYnJpbmttYW5uQGdtYWlsPiAgQWxsIFJpZ2h0cyBSZXNlcnZlZAotIyBSZWxlYXNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UgKHNlZSBwYWNrYWdlcy9DT1BZSU5HKQotU1VNTUFSWSA9ICJET1MgRkFUIEZpbGVzeXN0ZW0gVXRpbGl0aWVzIgotSE9NRVBBR0UgPSAiaHR0cHM6Ly9naXRodWIuY29tL2Rvc2ZzdG9vbHMvZG9zZnN0b29scyIKLQotU0VDVElPTiA9ICJiYXNlIgotTElDRU5TRSA9ICJHUEx2MyIKLUxJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PWQzMjIzOWJjYjY3MzQ2M2FiODc0ZTgwZDQ3ZmFlNTA0IgotCi1TUkNfVVJJID0gImh0dHBzOi8vZ2l0aHViLmNvbS9kb3Nmc3Rvb2xzL2Rvc2ZzdG9vbHMvcmVsZWFzZXMvZG93bmxvYWQvdjMuMC4yOC9kb3Nmc3Rvb2xzLTMuMC4yOC50YXIueHogXAotICAgICAgICAgICBmaWxlOi8vbGFyZ2VmaWxlLnBhdGNoIFwKLSAgICAgICAgICAgZmlsZTovLzAwMDEtbWtmcy5mYXQtZml4LWluY29ycmVjdC1pbnQtdHlwZS5wYXRjaCBcCi0gICAgICAgICAgIgotU1JDX1VSSVttZDVzdW1dID0gIjZhMDQ3YTZjNjUxODZiOWViYjE4NTM3MDlhZGIzNmRiIgotU1JDX1VSSVtzaGEyNTZzdW1dID0gImVlOTU5MTMwNDRlY2YyNzE5YjYzZWExMTIxMjkxNzY0OTcwOWE2ZTUzMjA5YTcyZDYyMjEzNWFhYTg1MTdlZTIiCi0KLVVQU1RSRUFNX0NIRUNLX1VSSSA9ICJodHRwczovL2dpdGh1Yi5jb20vZG9zZnN0b29scy9kb3Nmc3Rvb2xzL3JlbGVhc2VzIgotCi1DRkxBR1MgKz0gIi1EX0dOVV9TT1VSQ0UgJHtAYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsICdsYXJnZWZpbGUnLCAnLURfTEFSR0VGSUxFX1NPVVJDRSAtRF9GSUxFX09GRlNFVF9CSVRTPTY0JywgJycsIGQpfSIKLQotRklMRVNfJHtQTn0gPSAiJHtiYXNlX3NiaW5kaXJ9IgotRklMRVNfJHtQTn0tZG9jID0gIiR7bWFuZGlyfSAke2RvY2Rpcn0iCi0KLWRvX2luc3RhbGwgKCkgewotCW9lX3J1bm1ha2UgIlBSRUZJWD0ke0R9JHtwcmVmaXh9IiAiU0JJTkRJUj0ke0R9JHtiYXNlX3NiaW5kaXJ9IiBcCi0JCSAgICJNQU5ESVI9JHtEfSR7bWFuZGlyfSIgIkRPQ0RJUj0ke0R9JHtkb2NkaXJ9IiBpbnN0YWxsCi19Ci0KLUJCQ0xBU1NFWFRFTkQgPSAibmF0aXZlIgpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9kb3Nmc3Rvb2xzL2Rvc2ZzdG9vbHNfNC4wLmJiIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9kb3Nmc3Rvb2xzL2Rvc2ZzdG9vbHNfNC4wLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU3YjFmNjEKLS0tIC9kZXYvbnVsbAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2Rvc2ZzdG9vbHMvZG9zZnN0b29sc180LjAuYmIKQEAgLTAsMCArMSwyNSBAQAorIyBkb3Nmc3Rvb2xzIE9FIGJ1aWxkIGZpbGUKKyMgQ29weXJpZ2h0IChDKSAyMDA0LTIwMDYsIEFkdmFuY2VkIE1pY3JvIERldmljZXMsIEluYy4gIEFsbCBSaWdodHMgUmVzZXJ2ZWQKKyMgQ29weXJpZ2h0IChDKSAyMDE1LCBTw4PCtnJlbiBCcmlua21hbm4gPHNvZXJlbi5icmlua21hbm5AZ21haWw+ICBBbGwgUmlnaHRzIFJlc2VydmVkCisjIFJlbGVhc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZSAoc2VlIHBhY2thZ2VzL0NPUFlJTkcpCitTVU1NQVJZID0gIkRPUyBGQVQgRmlsZXN5c3RlbSBVdGlsaXRpZXMiCitIT01FUEFHRSA9ICJodHRwczovL2dpdGh1Yi5jb20vZG9zZnN0b29scy9kb3Nmc3Rvb2xzIgorCitTRUNUSU9OID0gImJhc2UiCitMSUNFTlNFID0gIkdQTHYzIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9ZDMyMjM5YmNiNjczNDYzYWI4NzRlODBkNDdmYWU1MDQiCisKK1NSQ19VUkkgPSAiaHR0cHM6Ly9naXRodWIuY29tL2Rvc2ZzdG9vbHMvZG9zZnN0b29scy9yZWxlYXNlcy9kb3dubG9hZC92JHtQVn0vJHtCUH0udGFyLnh6IFwKKyAgICAgICAgICAiCitTUkNfVVJJW21kNXN1bV0gPSAiMjBmODM4OGI5OTcwMmYyNzZjOTczZDIyOGM3Y2ZmNDUiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiOTAzNzczODk1MzU1OWQxZWZlMDRmYzU0MDhiNjg0NjIxNmNjMDEzOGY3ZjlkMzJkZTgwYjZlYzNjMzVlN2RhZiIKKworVVBTVFJFQU1fQ0hFQ0tfVVJJID0gImh0dHBzOi8vZ2l0aHViLmNvbS9kb3Nmc3Rvb2xzL2Rvc2ZzdG9vbHMvcmVsZWFzZXMiCisKK2luaGVyaXQgYXV0b3Rvb2xzIHBrZ2NvbmZpZworCitFWFRSQV9PRUNPTkYgPSAiLS13aXRob3V0LXVkZXYgLS1lbmFibGUtY29tcGF0LXN5bWxpbmtzIgorCitDRkxBR1MgKz0gIi1EX0dOVV9TT1VSQ0UgJHtAYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsICdsYXJnZWZpbGUnLCAnLURfTEFSR0VGSUxFX1NPVVJDRSAtRF9GSUxFX09GRlNFVF9CSVRTPTY0JywgJycsIGQpfSIKKworQkJDTEFTU0VYVEVORCA9ICJuYXRpdmUiCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2Rwa2cvZHBrZy5pbmMgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2Rwa2cvZHBrZy5pbmMKaW5kZXggM2Q5ZTdlMy4uZThkOGE5YiAxMDA2NDQKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9kcGtnL2Rwa2cuaW5jCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZHBrZy9kcGtnLmluYwpAQCAtMiwxNSArMiwxMyBAQAogTElDRU5TRSA9ICJHUEx2Mi4wKyIKIFNFQ1RJT04gPSAiYmFzZSIKIAotU1JDX1VSSSA9ICIke0RFQklBTl9NSVJST1J9L21haW4vZC9kcGtnL2Rwa2dfJHtQVn0udGFyLnh6IgotCi1TUkNfVVJJX2FwcGVuZF9jbGFzcy1uYXRpdmUgPSAiIGZpbGU6Ly8wMDAxLVdoZW4tcnVubmluZy1kb19wYWNrYWdlX3dyaXRlX2RlYi13ZS1oYXZlLXRyZWVzLW9mLWgucGF0Y2giCi0KIERFUEVORFMgPSAiemxpYiBiemlwMiBwZXJsIG5jdXJzZXMiCiBERVBFTkRTX2NsYXNzLW5hdGl2ZSA9ICJiemlwMi1yZXBsYWNlbWVudC1uYXRpdmUgemxpYi1uYXRpdmUgdmlydHVhbC91cGRhdGUtYWx0ZXJuYXRpdmVzLW5hdGl2ZSBnZXR0ZXh0LW5hdGl2ZSBwZXJsLW5hdGl2ZSIKIFJERVBFTkRTXyR7UE59ID0gIiR7VklSVFVBTC1SVU5USU1FX3VwZGF0ZS1hbHRlcm5hdGl2ZXN9IHh6IHJ1bi1wb3N0aW5zdHMgcGVybCIKIFJERVBFTkRTXyR7UE59X2NsYXNzLW5hdGl2ZSA9ICJ4ei1uYXRpdmUiCiAKK1VQU1RSRUFNX0NIRUNLX1VSSSA9ICIke0RFQklBTl9NSVJST1J9L21haW4vZC9kcGtnLyIKKwogaW5oZXJpdCBhdXRvdG9vbHMgZ2V0dGV4dCBwZXJsbmF0aXZlIHBrZ2NvbmZpZyBzeXN0ZW1kCiAKIHB5dGhvbiAoKSB7CkBAIC0zNSw2ICszMyw3IEBACiAJCSIKIAogRVhUUkFfT0VDT05GICs9ICJUQVI9dGFyIgorRVhUUkFfT0VDT05GX2FwcGVuZF9jbGFzcy10YXJnZXQgPSAiIERFQl9IT1NUX0FSQ0g9JHtEUEtHX0FSQ0h9IgogCiBkb19jb25maWd1cmUgKCkgewogICAgIGVjaG8gPj4gJHtTfS9tNC9jb21waWxlci5tNApAQCAtNzQsNiArNzMsMTQgQEAKIFBBQ0tBR0VTICs9ICIke1BOfS1wZXJsIgogRklMRVNfJHtQTn0tcGVybCA9ICIke2xpYmRpcn0vcGVybCIKIAorIyBTcGxpdCBvdXQgc3RhcnQtc3RvcC1kYWVtb24gdG8gaXRzIG93biBwYWNrYWdlLiAgTm90ZSB0aGF0IGl0CisjIGlzIGluc3RhbGxlZCBpbiBhIGRpZmZlcmVudCBkaXJlY3RvcnkgdGhhbiB0aGUgb25lIHVzZWQgZm9yCisjIHRoZSBiaXRiYWtlIHZlcnNpb24uCisjCitQQUNLQUdFUyA9KyAiJHtQTn0tc3RhcnQtc3RvcCIKK0ZJTEVTXyR7UE59LXN0YXJ0LXN0b3AgPSAiJHtzYmluZGlyfS9zdGFydC1zdG9wLWRhZW1vbiIKKworUkRFUEVORFNfJHtQTn0gKz0gIiR7UE59LXN0YXJ0LXN0b3AiCisKKwogQkJDTEFTU0VYVEVORCA9ICJuYXRpdmUiCi0KLQpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9kcGtnL2Rwa2cvMDAwMS1XaGVuLXJ1bm5pbmctZG9fcGFja2FnZV93cml0ZV9kZWItd2UtaGF2ZS10cmVlcy1vZi1oLnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9kcGtnL2Rwa2cvMDAwMS1XaGVuLXJ1bm5pbmctZG9fcGFja2FnZV93cml0ZV9kZWItd2UtaGF2ZS10cmVlcy1vZi1oLnBhdGNoCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0OWVmODUzLi4wMDAwMDAwCi0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZHBrZy9kcGtnLzAwMDEtV2hlbi1ydW5uaW5nLWRvX3BhY2thZ2Vfd3JpdGVfZGViLXdlLWhhdmUtdHJlZXMtb2YtaC5wYXRjaAorKysgL2Rldi9udWxsCkBAIC0xLDcxICswLDAgQEAKLUZyb20gZTM5MWJkYmEyMzhkMTM3MWZjNWI2N2NkYWUwOGIwNmViNWFkYTVjMiBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKLUZyb206IEFsZXhhbmRlciBLYW5hdmluIDxhbGV4LmthbmF2aW5AZ21haWwuY29tPgotRGF0ZTogV2VkLCAyNiBBdWcgMjAxNSAxNTo0ODoxMyArMDMwMAotU3ViamVjdDogW1BBVENIXSBXaGVuIHJ1bm5pbmcgZG9fcGFja2FnZV93cml0ZV9kZWIsIHdlIGhhdmUgdHJlZXMgb2YKLSBoYXJkbGlua2VkIGZpbGVzIHN1Y2ggYXMgdGhlIGRiZyBzb3VyY2UgZmlsZXMgaW4gJHtQTn0tZGJnLiBJZiBzb21ldGhpbmcKLSBtYWtlcyBhbm90aGVyIGNvcHkgb2Ygb25lIG9mIHRob3NlIGZpbGVzIChvciBkZWxldGVzIG9uZSksIHRoZSBudW1iZXIgb2YKLSBsaW5rcyBhIGZpbGUgaGFzIGNoYW5nZXMgYW5kIHRhciBjYW4gbm90aWNlIHRoaXMsIGUuZy46Ci0KLXwgREVCVUc6IEV4ZWN1dGluZyBweXRob24gZnVuY3Rpb24gZG9fcGFja2FnZV9kZWIKLXwgZHBrZy1kZWI6IGJ1aWxkaW5nIHBhY2thZ2UgYHNlZC1wdGVzdCcgaW4gYC9tZWRpYS9idWlsZDEvcG9reS9idWlsZC90bXAvd29yay9pNTg2LXBva3ktbGludXgvc2VkLzQuMi4yLXIwL2RlcGxveS1kZWJzL2k1ODYvc2VkLXB0ZXN0XzQuMi4yLXIwLjNfaTM4Ni5kZWInLgotfCB0YXI6IC4vdXNyL2xpYi9zZWQvcHRlc3QvdGVzdHN1aXRlL3RzdC1yZWdleDI6IGZpbGUgY2hhbmdlZCBhcyB3ZSByZWFkIGl0Ci18IGRwa2ctZGViOiBlcnJvcjogc3VicHJvY2VzcyB0YXIgLWNmIHJldHVybmVkIGVycm9yIGV4aXQgc3RhdHVzIDEKLQotVGFyIHJldHVybnMgYW4gZXJyb3Igb2YgMSB3aGVuIGZpbGVzICdjaGFuZ2UnIGFuZCBvdGhlciBlcnJvcnMgY29kZXMKLWluIG90aGVyIGVycm9yIGNhc2VzLiBXZSB0d2VhayBkcGtnLWRlYiBoZXJlIHNvIHRoYXQgaXQgaWdub3JlcyBhbiBleGl0Ci1jb2RlIG9mIDEgZnJvbSB0YXIuIFRoZSBmaWxlcyBkb24ndCByZWFsbHkgY2hhbmdlIChhbmQgd2UgaGF2ZSBsb2NraW5nIGluCi1wbGFjZSB0byBhdm9pZCB0aGF0IGtpbmQgb2YgaXNzdWUpLgotCi1VcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUKLVJQIDIwMTUvMy8yNwotLS0tCi0gZHBrZy1kZWIvYnVpbGQuYyB8IDEyICsrKysrKysrLS0tLQotIDEgZmlsZSBjaGFuZ2VkLCA4IGluc2VydGlvbnMoKyksIDQgZGVsZXRpb25zKC0pCi0KLWRpZmYgLS1naXQgYS9kcGtnLWRlYi9idWlsZC5jIGIvZHBrZy1kZWIvYnVpbGQuYwotaW5kZXggMmRkZWVjNi4uYWYzNjNmMCAxMDA2NDQKLS0tLSBhL2Rwa2ctZGViL2J1aWxkLmMKLSsrKyBiL2Rwa2ctZGViL2J1aWxkLmMKLUBAIC00NTIsNyArNDUyLDcgQEAgc3RhdGljIHZvaWQKLSB0YXJiYWxsX3BhY2soY29uc3QgY2hhciAqZGlyLCBmaWxlbmFtZXNfZmVlZF9mdW5jICp0YXJfZmlsZW5hbWVzX2ZlZWRlciwKLSAgICAgICAgICAgICAgc3RydWN0IGNvbXByZXNzX3BhcmFtcyAqdGFyX2NvbXByZXNzX3BhcmFtcywgaW50IGZkX291dCkKLSB7Ci0tICBpbnQgcGlwZV9maWxlbmFtZXNbMl0sIHBpcGVfdGFyYmFsbFsyXTsKLSsgIGludCBwaXBlX2ZpbGVuYW1lc1syXSwgcGlwZV90YXJiYWxsWzJdLCByYzsKLSAgIHBpZF90IHBpZF90YXIsIHBpZF9jb21wOwotIAotICAgLyogRm9yayBvZmYgYSB0YXIuIFdlIHdpbGwgZmVlZCBpdCBhIGxpc3Qgb2YgZmlsZW5hbWVzIG9uIHN0ZGluIGxhdGVyLiAqLwotQEAgLTQ5Myw3ICs0OTMsOSBAQCB0YXJiYWxsX3BhY2soY29uc3QgY2hhciAqZGlyLCBmaWxlbmFtZXNfZmVlZF9mdW5jICp0YXJfZmlsZW5hbWVzX2ZlZWRlciwKLSAgIC8qIEFsbCBkb25lLCBjbGVhbiB1cCB3YWl0IGZvciB0YXIgYW5kIDxjb21wcmVzcz4gdG8gZmluaXNoIHRoZWlyIGpvYi4gKi8KLSAgIGNsb3NlKHBpcGVfZmlsZW5hbWVzWzFdKTsKLSAgIHN1YnByb2NfcmVhcChwaWRfY29tcCwgXygiPGNvbXByZXNzPiBmcm9tIHRhciAtY2YiKSwgMCk7Ci0tICBzdWJwcm9jX3JlYXAocGlkX3RhciwgInRhciAtY2YiLCAwKTsKLSsgIHJjID0gc3VicHJvY19yZWFwKHBpZF90YXIsICJ0YXIgLWNmIiwgU1VCUFJPQ19SRVRFUlJPUik7Ci0rICBpZiAocmMgJiYgcmMgIT0gMSkKLSsgICAgb2hzaGl0ZShfKCJzdWJwcm9jZXNzICVzIHJldHVybmVkIGVycm9yIGV4aXQgc3RhdHVzICVkIiksICJ0YXIgLWNmIiwgcmMpOwotIH0KLSAKLSAvKioKLUBAIC01MDksNyArNTExLDcgQEAgZG9fYnVpbGQoY29uc3QgY2hhciAqY29uc3QgKmFyZ3YpCi0gICBjaGFyICpkZWJhcjsKLSAgIGNoYXIgKnRmYnVmOwotICAgaW50IGFyZmQ7Ci0tICBpbnQgcDFbMl0sIGd6ZmQ7Ci0rICBpbnQgcDFbMl0sIGd6ZmQsIHJjOwotICAgcGlkX3QgYzEsIGMyOwotIAotICAgLyogRGVjb2RlIG91ciBhcmd1bWVudHMuICovCi1AQCAtNTkwLDcgKzU5Miw5IEBAIGRvX2J1aWxkKGNvbnN0IGNoYXIgKmNvbnN0ICphcmd2KQotICAgfQotICAgY2xvc2UocDFbMF0pOwotICAgc3VicHJvY19yZWFwKGMyLCBfKCI8Y29tcHJlc3M+IGZyb20gdGFyIC1jZiIpLCAwKTsKLS0gIHN1YnByb2NfcmVhcChjMSwgInRhciAtY2YiLCAwKTsKLSsgIHJjID0gc3VicHJvY19yZWFwKGMxLCAidGFyIC1jZiIsIFNVQlBST0NfUkVURVJST1IpOwotKyAgaWYgKHJjICYmIHJjICE9IDEpCi0rICAgIG9oc2hpdGUoXygic3VicHJvY2VzcyAlcyByZXR1cm5lZCBlcnJvciBleGl0IHN0YXR1cyAlZCIpLCAidGFyIC1jZiIsIHJjKTsKLSAKLSAgIGlmIChsc2VlayhnemZkLCAwLCBTRUVLX1NFVCkpCi0gICAgIG9oc2hpdGUoXygiZmFpbGVkIHRvIHJld2luZCB0ZW1wb3JhcnkgZmlsZSAoJXMpIiksIF8oImNvbnRyb2wgbWVtYmVyIikpOwotLS0gCi0yLjcuMAotCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2Rwa2cvZHBrZy8wMDAzLU91ci1wcmUtcG9zdGluc3RzLWV4cGVjdC1ELXRvLWJlLXNldC13aGVuLXJ1bm5pbmctaW4ucGF0Y2ggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2Rwa2cvZHBrZy8wMDAzLU91ci1wcmUtcG9zdGluc3RzLWV4cGVjdC1ELXRvLWJlLXNldC13aGVuLXJ1bm5pbmctaW4ucGF0Y2gKaW5kZXggOWY3N2M2Yy4uODA1MDRjZSAxMDA2NDQKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9kcGtnL2Rwa2cvMDAwMy1PdXItcHJlLXBvc3RpbnN0cy1leHBlY3QtRC10by1iZS1zZXQtd2hlbi1ydW5uaW5nLWluLnBhdGNoCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZHBrZy9kcGtnLzAwMDMtT3VyLXByZS1wb3N0aW5zdHMtZXhwZWN0LUQtdG8tYmUtc2V0LXdoZW4tcnVubmluZy1pbi5wYXRjaApAQCAtOCwzMCArOCw0MSBAQAogVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtPRSBTcGVjaWZpY10KIAogUlAgMjAxMS8xMi8wNworQUxJTU9OIDIwMTYvMDUvMjYKKwogLS0tCi0gc3JjL3NjcmlwdC5jIHwgMzEgKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotIDEgZmlsZSBjaGFuZ2VkLCAyIGluc2VydGlvbnMoKyksIDI5IGRlbGV0aW9ucygtKQorIHNyYy9zY3JpcHQuYyB8IDM5ICsrKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIDEgZmlsZSBjaGFuZ2VkLCAzIGluc2VydGlvbnMoKyksIDM2IGRlbGV0aW9ucygtKQogCiBkaWZmIC0tZ2l0IGEvc3JjL3NjcmlwdC5jIGIvc3JjL3NjcmlwdC5jCi1pbmRleCBhOTU4MTQ1Li4yNGM0OWY5IDEwMDY0NAoraW5kZXggM2M4OGJlOC4uY2U2NmE4NiAxMDA2NDQKIC0tLSBhL3NyYy9zY3JpcHQuYwogKysrIGIvc3JjL3NjcmlwdC5jCi1AQCAtMTAwLDM2ICsxMDAsOSBAQCBtYWludHNjcmlwdF9wcmVfZXhlYyhzdHJ1Y3QgY29tbWFuZCAqY21kKQotIAlzaXplX3QgaW5zdGRpcmwgPSBzdHJsZW4oaW5zdGRpcik7Ci0gCi0gCWlmICgqaW5zdGRpcikgeworQEAgLTk3LDQzICs5NywxMCBAQCBzZXRleGVjdXRlKGNvbnN0IGNoYXIgKnBhdGgsIHN0cnVjdCBzdGF0ICpzdGFiKQorIHN0YXRpYyBjb25zdCBjaGFyICoKKyBtYWludHNjcmlwdF9wcmVfZXhlYyhzdHJ1Y3QgY29tbWFuZCAqY21kKQorIHsKKy0JY29uc3QgY2hhciAqYWRtaW5kaXIgPSBkcGtnX2RiX2dldF9kaXIoKTsKKy0JY29uc3QgY2hhciAqY2hhbmdlZGlyID0gZmNfc2NyaXB0X2Nocm9vdGxlc3MgPyBpbnN0ZGlyIDogIi8iOworLQlzaXplX3QgaW5zdGRpcmwgPSBzdHJsZW4oaW5zdGRpcik7CistCistCWlmICgqaW5zdGRpciAmJiAhZmNfc2NyaXB0X2Nocm9vdGxlc3MpIHsKIC0JCWlmIChzdHJuY21wKGFkbWluZGlyLCBpbnN0ZGlyLCBpbnN0ZGlybCkgIT0gMCkKIC0JCQlvaHNoaXQoXygiYWRtaW5kaXIgbXVzdCBiZSBpbnNpZGUgaW5zdGRpciBmb3IgZHBrZyB0byB3b3JrIHByb3Blcmx5IikpOwogLQkJaWYgKHNldGVudigiRFBLR19BRE1JTkRJUiIsIGFkbWluZGlyICsgaW5zdGRpcmwsIDEpIDwgMCkKIC0JCQlvaHNoaXRlKF8oInVuYWJsZSB0byBzZXRlbnYgZm9yIHN1YnByb2Nlc3NlcyIpKTsKKy0JCWlmIChzZXRlbnYoIkRQS0dfUk9PVCIsICIiLCAxKSA8IDApCistCQkJb2hzaGl0ZShfKCJ1bmFibGUgdG8gc2V0ZW52IGZvciBzdWJwcm9jZXNzZXMiKSk7CiAtCiAtCQlpZiAoY2hyb290KGluc3RkaXIpKQogLQkJCW9oc2hpdGUoXygiZmFpbGVkIHRvIGNocm9vdCB0byAnJS4yNTBzJyIpLCBpbnN0ZGlyKTsKLS0JfQorKwlpZiAoKmluc3RkaXIpIHsKKysJCXNldGVudigiRCIsIGluc3RkaXIsIDEpOworIAl9CiAtCS8qIFN3aXRjaCB0byBhIGtub3duIGdvb2QgZGlyZWN0b3J5IHRvIGdpdmUgdGhlIG1haW50YWluZXIgc2NyaXB0CiAtCSAqIGEgc2FuZXIgZW52aXJvbm1lbnQsIGFsc28gbmVlZGVkIGFmdGVyIHRoZSBjaHJvb3QoKS4gKi8KLS0JaWYgKGNoZGlyKCIvIikpCi0tCQlvaHNoaXRlKF8oImZhaWxlZCB0byBjaGRpciB0byAnJS4yNTVzJyIpLCAiLyIpOworLQlpZiAoY2hkaXIoY2hhbmdlZGlyKSkKKy0JCW9oc2hpdGUoXygiZmFpbGVkIHRvIGNoZGlyIHRvICclLjI1NXMnIiksIGNoYW5nZWRpcik7CiAtCWlmIChkZWJ1Z19oYXNfZmxhZyhkYmdfc2NyaXB0cykpIHsKIC0JCXN0cnVjdCB2YXJidWYgYXJncyA9IFZBUkJVRl9JTklUOwogLQkJY29uc3QgY2hhciAqKmFyZ3YgPSBjbWQtPmFyZ3Y7CkBAIC00NCw5ICs1NSw4IEBACiAtCQlkZWJ1ZyhkYmdfc2NyaXB0cywgImZvcmsvZXhlYyAlcyAoJXMgKSIsIGNtZC0+ZmlsZW5hbWUsCiAtCQkgICAgICBhcmdzLmJ1Zik7CiAtCQl2YXJidWZfZGVzdHJveSgmYXJncyk7Ci0rCQlzZXRlbnYoIkQiLCBpbnN0ZGlyLCAxKTsKLSAJfQotLQlpZiAoIWluc3RkaXJsKQorLQl9CistCWlmICghaW5zdGRpcmwgfHwgZmNfc2NyaXB0X2Nocm9vdGxlc3MpCiAtCQlyZXR1cm4gY21kLT5maWxlbmFtZTsKIC0KIC0JYXNzZXJ0KHN0cmxlbihjbWQtPmZpbGVuYW1lKSA+PSBpbnN0ZGlybCk7CmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2Rwa2cvZHBrZy9hZGRfYXJtZWJfdHJpcGxldF9lbnRyeS5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZHBrZy9kcGtnL2FkZF9hcm1lYl90cmlwbGV0X2VudHJ5LnBhdGNoCmluZGV4IGFmMjc1ZGUuLmRjNjllYjIgMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZHBrZy9kcGtnL2FkZF9hcm1lYl90cmlwbGV0X2VudHJ5LnBhdGNoCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZHBrZy9kcGtnL2FkZF9hcm1lYl90cmlwbGV0X2VudHJ5LnBhdGNoCkBAIC0yNSwxNCArMjUsMjIgQEAKIAogU2lnbmVkLW9mZi1ieTogS3Jpc2huYW5qYW5hcHBhLCBKYWdhZGVlc2ggPGphZ2FkZWVzaC5rcmlzaG5hbmphbmFwcGFAY2F2aXVtbmV0d29ya3MuY29tPgogCi1kaWZmIC1OYXVycCBkcGtnLTEuMTcuMjFfb3JnL3RyaXBsZXR0YWJsZSBkcGtnLTEuMTcuMjEvdHJpcGxldHRhYmxlCi0tLS0gZHBrZy0xLjE3LjIxX29yZy90cmlwbGV0dGFibGUJMjAxNS0wNC0wOCAxNzowODo1Mi4zNzA3NTkxNzEgKzA1MzAKLSsrKyBkcGtnLTEuMTcuMjEvdHJpcGxldHRhYmxlCTIwMTUtMDQtMDggMTc6MDk6MTIuNDA2NzUyMDgxICswNTMwCi1AQCAtOSw2ICs5LDcgQEAgbXVzbGVhYmloZi1saW51eC1hcm0JbXVzbC1saW51eC1hcm1oZgotIG11c2wtbGludXgtPGNwdT4JbXVzbC1saW51eC08Y3B1PgotIGdudWVhYmloZi1saW51eC1hcm0JYXJtaGYKKy0tLQorIHRyaXBsZXR0YWJsZSB8IDEgKworIDEgZmlsZSBjaGFuZ2VkLCAxIGluc2VydGlvbigrKQorCitkaWZmIC0tZ2l0IGEvdHJpcGxldHRhYmxlIGIvdHJpcGxldHRhYmxlCitpbmRleCBhYmU0NzI2Li4xZTljMjQ3IDEwMDY0NAorLS0tIGEvdHJpcGxldHRhYmxlCisrKysgYi90cmlwbGV0dGFibGUKK0BAIC0xMSw2ICsxMSw3IEBAIGdudWVhYmloZi1saW51eC1hcm0JYXJtaGYKICBnbnVlYWJpLWxpbnV4LWFybQlhcm1lbAorIGdudWFiaW4zMi1saW51eC1taXBzNjRyNmVsCW1pcHNuMzJyNmVsCisgZ251YWJpbjMyLWxpbnV4LW1pcHM2NHI2CW1pcHNuMzJyNgogK2dudWVhYmktbGludXgtYXJtZWIJYXJtZWIKICBnbnVhYmluMzItbGludXgtbWlwczY0ZWwJbWlwc24zMmVsCiAgZ251YWJpbjMyLWxpbnV4LW1pcHM2NAltaXBzbjMyCi0gZ251YWJpNjQtbGludXgtbWlwczY0ZWwJbWlwczY0ZWwKKyBnbnVhYmk2NC1saW51eC1taXBzNjRyNmVsCW1pcHM2NHI2ZWwKKy0tIAorMi4xLjQKKwpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9kcGtnL2Rwa2cvZml4LWFicy1yZWRlZmluZS5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZHBrZy9kcGtnL2ZpeC1hYnMtcmVkZWZpbmUucGF0Y2gKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGU3MzMxMWMuLjAwMDAwMDAKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9kcGtnL2Rwa2cvZml4LWFicy1yZWRlZmluZS5wYXRjaAorKysgL2Rldi9udWxsCkBAIC0xLDQwICswLDAgQEAKLVVwc3RyZWFtLVN0YXR1czogUGVuZGluZwotCi1kcGtnIGRlZmluZXM6Ci0jZGVmaW5lIERQS0dfQkVHSU5fREVDTFMJZXh0ZXJuICJDIiB7Ci0KLVRoYXQgbWFrZXMgaGVhZGVyIGNzdGRsaWIgaW5jbHVkZWQgaW4gYSBleHRlcm4gIkMiIGJsb2NrIHdoaWNoIGlzIG5vdCBzdXBwb3J0ZWQKLWJ5IGdjYyA0LjguIEl0IGZhaWxzIG9uIEZlZG9yYSAxOToKLQotL3Vzci9pbmNsdWRlL2MrKy80LjguMS9jc3RkbGliOiBJbiBmdW5jdGlvbiDigJhsb25nIGxvbmcgaW50IHN0ZDo6YWJzKGxvbmcgbG9uZyBpbnQp4oCZOgotL3Vzci9pbmNsdWRlL2MrKy80LjguMS9jc3RkbGliOjE3NDoyMDogZXJyb3I6IGRlY2xhcmF0aW9uIG9mIEMgZnVuY3Rpb24g4oCYbG9uZyBsb25nIGludCBzdGQ6OmFicyhsb25nIGxvbmcgaW50KeKAmSBjb25mbGljdHMgd2l0aAotICAgYWJzKGxvbmcgbG9uZyBfX3gpIHsgcmV0dXJuIF9fYnVpbHRpbl9sbGFicyAoX194KTsgfQotICAgICAgICAgICAgICAgICAgICBeCi0vdXNyL2luY2x1ZGUvYysrLzQuOC4xL2NzdGRsaWI6MTY2OjM6IGVycm9yOiBwcmV2aW91cyBkZWNsYXJhdGlvbiDigJhsb25nIGludCBzdGQ6OmFicyhsb25nIGludCnigJkgaGVyZQotICAgYWJzKGxvbmcgX19pKSB7IHJldHVybiBfX2J1aWx0aW5fbGFicyhfX2kpOyB9Ci0gICBeCi0KLU1vdmUgaW5jbHVkZSBnZXR0ZXh0Lmggb3V0IG9mIHRoZSBleHRlcm4gIkMiIGJsb2NrIHRvIGZpeCB0aGlzIGlzc3VlLgotCi1TaWduZWQtb2ZmLWJ5OiBLYWkgS2FuZyA8a2FpLmthbmdAd2luZHJpdmVyLmNvbT4KLQotLS0tIGRwa2ctMS4xNy4xL2xpYi9kcGtnL2kxOG4uaC5vcmlnCTIwMTMtMDgtMTMgMTc6MzE6MjguODcwOTM1NTczICswODAwCi0rKysgZHBrZy0xLjE3LjEvbGliL2Rwa2cvaTE4bi5oCTIwMTMtMDgtMTMgMTc6MzE6MzcuODkzMDY1MjQ5ICswODAwCi1AQCAtMjMsOCArMjMsNiBAQAotIAotICNpbmNsdWRlIDxkcGtnL21hY3Jvcy5oPgotIAotLURQS0dfQkVHSU5fREVDTFMKLS0KLSAvKioKLSAgKiBAZGVmZ3JvdXAgaTE4biBJbnRlcm5hdGlvbmFsaXphdGlvbiBzdXBwb3J0Ci0gICogQGluZ3JvdXAgZHBrZy1pbnRlcm5hbAotQEAgLTMzLDYgKzMxLDggQEAKLSAKLSAjaW5jbHVkZSA8Z2V0dGV4dC5oPgotIAotK0RQS0dfQkVHSU5fREVDTFMKLSsKLSAvKiBXZSBuZWVkIHRvIGluY2x1ZGUgdGhpcyBiZWNhdXNlIHBnZXR0ZXh0KCkgdXNlcyBMQ19NRVNTQUdFUywgYnV0IGxpYmludGwuaAotICAqIHdoaWNoIGdldHMgcHVsbGVkIGJ5IGdldHRleHQuaCBvbmx5IGluY2x1ZGVzIGl0IGlmIGJ1aWxkaW5nIG9wdGltaXplZC4gKi8KLSAjaW5jbHVkZSA8bG9jYWxlLmg+CmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2Rwa2cvZHBrZ18xLjE4LjQuYmIgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2Rwa2cvZHBrZ18xLjE4LjQuYmIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDc4NzY5NDQuLjAwMDAwMDAKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9kcGtnL2Rwa2dfMS4xOC40LmJiCisrKyAvZGV2L251bGwKQEAgLTEsMjAgKzAsMCBAQAotcmVxdWlyZSBkcGtnLmluYwotTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9NzUxNDE5MjYwYWE5NTQ0OTlmN2FiYWFiYWE4ODJiYmUiCi0KLVNSQ19VUklfYXBwZW5kX2NsYXNzLW5hdGl2ZSA9IiBmaWxlOi8vZ2xpYmMyLjUtc3luY19maWxlX3JhbmdlLnBhdGNoICIKLVNSQ19VUkkgKz0gImZpbGU6Ly9ub21hbi5wYXRjaCBcCi0gICAgICAgICAgICBmaWxlOi8vcmVtb3ZlLXRhci1uby10aW1lc3RhbXAucGF0Y2ggXAotICAgICAgICAgICAgZmlsZTovL2ZpeC1hYnMtcmVkZWZpbmUucGF0Y2ggXAotICAgICAgICAgICAgZmlsZTovL2FyY2hfcG0ucGF0Y2ggXAotICAgICAgICAgICAgZmlsZTovL2Rwa2ctY29uZmlndXJlLnNlcnZpY2UgXAotICAgICAgICAgICAgZmlsZTovL2FkZF9hcm1lYl90cmlwbGV0X2VudHJ5LnBhdGNoIFwKLQkgICAgZmlsZTovLzAwMDItQWRhcHQtdG8tbGludXgtd3JzLWtlcm5lbC12ZXJzaW9uLXdoaWNoLWhhcy1jaGFyYWN0ZS5wYXRjaCBcCi0JICAgIGZpbGU6Ly8wMDAzLU91ci1wcmUtcG9zdGluc3RzLWV4cGVjdC1ELXRvLWJlLXNldC13aGVuLXJ1bm5pbmctaW4ucGF0Y2ggXAotCSAgICBmaWxlOi8vMDAwNC1UaGUtbHV0aW1lcy1mdW5jdGlvbi1kb2Vzbi10LXdvcmstcHJvcGVybHktZm9yLWFsbC1zLnBhdGNoIFwKLQkgICAgZmlsZTovLzAwMDUtZHBrZy1jb21waWxlci5tNC1yZW1vdmUtV3ZsYS5wYXRjaCBcCi0JICAgIGZpbGU6Ly8wMDA2LWFkZC1tdXNsZWFiaS10by1rbm93bi10YXJnZXQtdHJpcGV0cy5wYXRjaCBcCi0gICAgICAgICAgICIKLQotU1JDX1VSSVttZDVzdW1dID0gImU5NWI1MTNjODk2OTNmNmVjM2FiNTNiNmIxYzNkZWZkIgotU1JDX1VSSVtzaGEyNTZzdW1dID0gImZlODkyNDM4Njg4ODhjZTcxNWJmNDU4NjFmMjYyNjRmNzY3ZDRlNGRiZDBkNmYxYTI2Y2U2MGJiYmJmMTA2ZGEiCi0KZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZHBrZy9kcGtnXzEuMTguNy5iYiBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZHBrZy9kcGtnXzEuMTguNy5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yOGZkYzEzCi0tLSAvZGV2L251bGwKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9kcGtnL2Rwa2dfMS4xOC43LmJiCkBAIC0wLDAgKzEsMTkgQEAKK3JlcXVpcmUgZHBrZy5pbmMKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PTc1MTQxOTI2MGFhOTU0NDk5ZjdhYmFhYmFhODgyYmJlIgorCitTUkNfVVJJID0gImh0dHA6Ly9zbmFwc2hvdC5kZWJpYW4ub3JnL2FyY2hpdmUvZGViaWFuLzIwMTYwNTA5VDEwMDA0MlovcG9vbC9tYWluL2QvJHtCUE59LyR7QlBOfV8ke1BWfS50YXIueHogXAorICAgICAgICAgICBmaWxlOi8vbm9tYW4ucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vcmVtb3ZlLXRhci1uby10aW1lc3RhbXAucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vYXJjaF9wbS5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9kcGtnLWNvbmZpZ3VyZS5zZXJ2aWNlIFwKKyAgICAgICAgICAgZmlsZTovL2FkZF9hcm1lYl90cmlwbGV0X2VudHJ5LnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovLzAwMDItQWRhcHQtdG8tbGludXgtd3JzLWtlcm5lbC12ZXJzaW9uLXdoaWNoLWhhcy1jaGFyYWN0ZS5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly8wMDAzLU91ci1wcmUtcG9zdGluc3RzLWV4cGVjdC1ELXRvLWJlLXNldC13aGVuLXJ1bm5pbmctaW4ucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vMDAwNC1UaGUtbHV0aW1lcy1mdW5jdGlvbi1kb2Vzbi10LXdvcmstcHJvcGVybHktZm9yLWFsbC1zLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovLzAwMDUtZHBrZy1jb21waWxlci5tNC1yZW1vdmUtV3ZsYS5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly8wMDA2LWFkZC1tdXNsZWFiaS10by1rbm93bi10YXJnZXQtdHJpcGV0cy5wYXRjaCBcCisgICAgICAgICAgICIKK1NSQ19VUklfYXBwZW5kX2NsYXNzLW5hdGl2ZSA9ICIgZmlsZTovL2dsaWJjMi41LXN5bmNfZmlsZV9yYW5nZS5wYXRjaCAiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICIwNzNkYmYyMTI5YTU0YjBmYzYyNzQ2NGJmOGFmNGExYiIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICJhY2UzNmQzYTZkYzc1MGE0MmJhZjc5N2Y5ZTc1ZWM1ODBhMjFmOTJiYjlmZjk2YjQ4MjEwMDc1NWQ2ZDliODdiIgpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9lMmZzcHJvZ3MvZTJmc3Byb2dzLmluYyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZTJmc3Byb2dzL2UyZnNwcm9ncy5pbmMKaW5kZXggMDllNGVhNS4uNzRlOTJmNiAxMDA2NDQKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9lMmZzcHJvZ3MvZTJmc3Byb2dzLmluYworKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2UyZnNwcm9ncy9lMmZzcHJvZ3MuaW5jCkBAIC05LDcgKzksNyBAQAogTElDRU5TRV9lMmZzcHJvZ3MtZnNjayA9ICJHUEx2MiIKIExJQ0VOU0VfZTJmc3Byb2dzLXR1bmUyZnMgPSAiR1BMdjIiCiBMSUNFTlNFX2UyZnNwcm9ncy1iYWRibG9ja3MgPSAiR1BMdjIiCi1MSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT1iNDhmMjFkNzY1Yjg3NWJkMTA0MDA5NzVkMTJjMWNhMiBcCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9OT1RJQ0U7bWQ1PWI0OGYyMWQ3NjViODc1YmQxMDQwMDk3NWQxMmMxY2EyIFwKICAgICAgICAgICAgICAgICAgICAgICBmaWxlOi8vbGliL2V4dDJmcy9leHQyZnMuaDtiZWdpbmxpbmU9MTtlbmRsaW5lPTk7bWQ1PTU5NmE4ZGVkY2I0ZTczMWM2YjIxYzdhNDZmYmE2YmVmIFwKICAgICAgICAgICAgICAgICAgICAgICBmaWxlOi8vbGliL2UycC9lMnAuaDtiZWdpbmxpbmU9MTtlbmRsaW5lPTc7bWQ1PThhNzRhZGU4ZjlkNjUwOTVkNzBlZjJkNGJmNDhlMzZhIFwKICAgICAgICAgICAgICAgICAgICAgICBmaWxlOi8vbGliL3V1aWQvdXVpZC5oLmluO2JlZ2lubGluZT0xO2VuZGxpbmU9MzI7bWQ1PWRiYjgwNzllMTE0YTVmODQxOTM0Yjk5ZTU5Yzg4MjBhIFwKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZTJmc3Byb2dzL2UyZnNwcm9ncy9SZXZlcnQtbWtlMmZzLWVuYWJsZS10aGUtbWV0YWRhdGFfY3N1bS1hbmQtNjRiaXQtZmVhLnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9lMmZzcHJvZ3MvZTJmc3Byb2dzL1JldmVydC1ta2UyZnMtZW5hYmxlLXRoZS1tZXRhZGF0YV9jc3VtLWFuZC02NGJpdC1mZWEucGF0Y2gKaW5kZXggNjU2ZmI2ZS4uZTY2Y2Q0ZCAxMDA2NDQKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9lMmZzcHJvZ3MvZTJmc3Byb2dzL1JldmVydC1ta2UyZnMtZW5hYmxlLXRoZS1tZXRhZGF0YV9jc3VtLWFuZC02NGJpdC1mZWEucGF0Y2gKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9lMmZzcHJvZ3MvZTJmc3Byb2dzL1JldmVydC1ta2UyZnMtZW5hYmxlLXRoZS1tZXRhZGF0YV9jc3VtLWFuZC02NGJpdC1mZWEucGF0Y2gKQEAgLTksMjYgKzksMzEgQEAKIHRoZSBsYXRlc3Qgc3RhYmxlIGUyZnNwcm9ncyByZWxlYXNlLgogCiBVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW2NvbmZpZ3VyYXRpb25dCi0KIFNpZ25lZC1vZmYtYnk6IEpvbmF0aGFuIExpdSA8bmV0MTQ3QGdtYWlsLmNvbT4KKworUmViYXNlIHRvIDEuNDM6CitUaGUgdXBzdHJlYW0gaGFzIGRpc2FibGVkIG1ldGFkYXRhX2NzdW0gYnkgZGVmYXVsdAordGhpcyByZWJhc2UganVzdCByZXZlcnQgNjRiaXQgZmVhdHVyZS4KK1NpZ25lZC1vZmYtYnk6IEhvbmd4dSBKaWEgPGhvbmd4dS5qaWFAd2luZHJpdmVyLmNvbT4KIC0tLQogIG1pc2MvbWtlMmZzLmNvbmYuaW4gfCAzICsrLQogIDEgZmlsZSBjaGFuZ2VkLCAyIGluc2VydGlvbnMoKyksIDEgZGVsZXRpb24oLSkKIAogZGlmZiAtLWdpdCBhL21pc2MvbWtlMmZzLmNvbmYuaW4gYi9taXNjL21rZTJmcy5jb25mLmluCi1pbmRleCBhMDQ5ZDYxLi4xMDZlZTgwIDEwMDY0NAoraW5kZXggNzhmZTUwYS4uNmYxOTQwZSAxMDA2NDQKIC0tLSBhL21pc2MvbWtlMmZzLmNvbmYuaW4KICsrKyBiL21pc2MvbWtlMmZzLmNvbmYuaW4KLUBAIC0xMSw3ICsxMSw4IEBACitAQCAtMTEsOCArMTEsOSBAQAogIAkJZmVhdHVyZXMgPSBoYXNfam91cm5hbAogIAl9CiAgCWV4dDQgPSB7Ci0tCQlmZWF0dXJlcyA9IGhhc19qb3VybmFsLGV4dGVudCxodWdlX2ZpbGUsZmxleF9iZyxtZXRhZGF0YV9jc3VtLDY0Yml0LGRpcl9ubGluayxleHRyYV9pc2l6ZQorLQkJZmVhdHVyZXMgPSBoYXNfam91cm5hbCxleHRlbnQsaHVnZV9maWxlLGZsZXhfYmcsNjRiaXQsZGlyX25saW5rLGV4dHJhX2lzaXplCiArCQlmZWF0dXJlcyA9IGhhc19qb3VybmFsLGV4dGVudCxodWdlX2ZpbGUsZmxleF9iZyx1bmluaXRfYmcsZGlyX25saW5rLGV4dHJhX2lzaXplCi0rCQlhdXRvXzY0LWJpdF9zdXBwb3J0ID0gMQogIAkJaW5vZGVfc2l6ZSA9IDI1NgorKwkJYXV0b182NC1iaXRfc3VwcG9ydCA9IDEKICAJfQogIAlleHQ0ZGV2ID0geworIAkJZmVhdHVyZXMgPSBoYXNfam91cm5hbCxleHRlbnQsaHVnZV9maWxlLGZsZXhfYmcsaW5saW5lX2RhdGEsNjRiaXQsZGlyX25saW5rLGV4dHJhX2lzaXplCiAtLSAKLTIuNy4yCisyLjguMQogCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2UyZnNwcm9ncy9lMmZzcHJvZ3MvZTJmc3Byb2dzLWZpeC1taXNzaW5nLWNoZWNrLWZvci1wZXJtaXNzaW9uLWRlbmllZC5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZTJmc3Byb2dzL2UyZnNwcm9ncy9lMmZzcHJvZ3MtZml4LW1pc3NpbmctY2hlY2stZm9yLXBlcm1pc3Npb24tZGVuaWVkLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMzMDU0YzYKLS0tIC9kZXYvbnVsbAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2UyZnNwcm9ncy9lMmZzcHJvZ3MvZTJmc3Byb2dzLWZpeC1taXNzaW5nLWNoZWNrLWZvci1wZXJtaXNzaW9uLWRlbmllZC5wYXRjaApAQCAtMCwwICsxLDMyIEBACitTdWJqZWN0OiBbUEFUQ0hdIEZpeCBtaXNzaW5nIGNoZWNrIGZvciBwZXJtaXNzaW9uIGRlbmllZC4KKworSWYgdGhlIHBhdGggdG8gIlJPT1RfU1lTQ09ORkRJUi9ta2UyZnMuY29uZiIgaGFzIGEgcGVybWlzc2lvbiBkZW5pZWQgcHJvYmxlbSwKK3RoZW4gdGhlIGdldF9kaXJsaXN0KCkgY2FsbCB3aWxsIHJldHVybiBFQUNDRVMuIEJ1dCB0aGUgY29kZSBpbiBwcm9maWxlX2luaXQKK3dpbGwgdHJlYXQgdGhhdCBhcyBhIGZhdGFsIGVycm9yIGFuZCBhbGwgZXhlY3V0aW9ucyB3aWxsIGZhaWwgd2l0aDoKKyAgICAgIENvdWxkbid0IGluaXQgcHJvZmlsZSBzdWNjZXNzZnVsbHkgKGVycm9yOiAxMykuCisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitXcml0dGVuLWJ5OiBIZW5yaWsgV2FsbGluIDxoZW5yaWsuYi53YWxsaW5AZXJpY3Nzb24uY29tPgorCitTaWduZWQtb2ZmLWJ5OiBKYWNraWUgSHVhbmcgPGphY2tpZS5odWFuZ0B3aW5kcml2ZXIuY29tPgorLS0tCisgbGliL3N1cHBvcnQvcHJvZmlsZS5jIHwgMiArLQorIDEgZmlsZSBjaGFuZ2VkLCAxIGluc2VydGlvbigrKSwgMSBkZWxldGlvbigtKQorCitkaWZmIC0tZ2l0IGEvbGliL3N1cHBvcnQvcHJvZmlsZS5jIGIvbGliL3N1cHBvcnQvcHJvZmlsZS5jCitpbmRleCA1MWEzMzE0Li4xYzEwMzlmIDEwMDY0NAorLS0tIGEvbGliL3N1cHBvcnQvcHJvZmlsZS5jCisrKysgYi9saWIvc3VwcG9ydC9wcm9maWxlLmMKK0BAIC0zMzUsNyArMzM1LDcgQEAgcHJvZmlsZV9pbml0KGNvbnN0IGNoYXIgKipmaWxlcywgcHJvZmlsZV90ICpyZXRfcHJvZmlsZSkKKyAJCQkJKmxhc3QgPSBuZXdfZmlsZTsKKyAJCQkJbGFzdCA9ICZuZXdfZmlsZS0+bmV4dDsKKyAJCQl9CistCQl9IGVsc2UgaWYgKChyZXR2YWwgIT0gRU5PVERJUikgJiYKKysJCX0gZWxzZSBpZiAoKHJldHZhbCAhPSBFTk9URElSKSAmJiAocmV0dmFsICE9IEVBQ0NFUykgJiYKKyAJCQkgICBzdHJjbXAoKmZzLCBkZWZhdWx0X2ZpbGVuYW1lKSkKKyAJCQlnb3RvIGVycm91dDsKKyAKKy0tIAorMi43LjQKKwpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9lMmZzcHJvZ3MvZTJmc3Byb2dzL3hhdHRyX29yZGVyaW5nLnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9lMmZzcHJvZ3MvZTJmc3Byb2dzL3hhdHRyX29yZGVyaW5nLnBhdGNoCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3ODJhN2IxLi4wMDAwMDAwCi0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZTJmc3Byb2dzL2UyZnNwcm9ncy94YXR0cl9vcmRlcmluZy5wYXRjaAorKysgL2Rldi9udWxsCkBAIC0xLDIxOSArMCwwIEBACi1Gcm9tOiAiRGFycmljayBKLiBXb25nIiA8ZGFycmljay53b25nQG9yYWNsZS5jb20+Ci1UbzogdHl0c29AbWl0LmVkdSwgZGFycmljay53b25nQG9yYWNsZS5jb20KLUNjOiBsaW51eC1leHQ0QHZnZXIua2VybmVsLm9yZywgRGFycmVuIEhhcnQgPGR2aGFydEBsaW51eC5pbnRlbC5jb20+LAotIFJpY2hhcmQgUHVyZGllIDxyaWNoYXJkLnB1cmRpZUBsaW51eGZvdW5kYXRpb24ub3JnPgotRGF0ZTogU2F0LCAxMyBGZWIgMjAxNiAxNDozODoyNCAtMDgwMAotTWVzc2FnZS1JRDogPDIwMTYwMjEzMjIzODI0LjI1MzgxLjgwMDIuc3RnaXRAYmlyY2guZGp3b25nLm9yZz4KLUluLVJlcGx5LVRvOiA8MjAxNjAyMTMyMjM3MjUuMjUzODEuMjA5Mjkuc3RnaXRAYmlyY2guZGp3b25nLm9yZz4KLVJlZmVyZW5jZXM6IDwyMDE2MDIxMzIyMzcyNS4yNTM4MS4yMDkyOS5zdGdpdEBiaXJjaC5kandvbmcub3JnPgotVXNlci1BZ2VudDogU3RHaXQvMC4xNy4xLWRpcnR5Ci1NSU1FLVZlcnNpb246IDEuMAotQ29udGVudC1UeXBlOiB0ZXh0L3BsYWluOyBjaGFyc2V0PSJ1dGYtOCIKLVgtU291cmNlLUlQOiBhc2VydjAwMjIub3JhY2xlLmNvbSBbMTQxLjE0Ni4xMjYuMjM0XQotWC1Fdm9sdXRpb24tU291cmNlOiAxMzU4ODYwMzYxLjQ1NjYuMzNAdGVkCi1Db250ZW50LVRyYW5zZmVyLUVuY29kaW5nOiA4Yml0Ci0KLVJpY2hhcmQgUHVyZGllIHJlcG9ydHMgdGhhdCBsaWJleHQyZnMgZG9lc24ndCBzb3J0IGF0dHJpYnV0ZSBrZXlzIGluCi10aGUgeGF0dHIgYmxvY2sgY29ycmVjdGx5LCBjYXVzaW5nIHRoZSBrZXJuZWwgdG8gcmV0dXJuIC1FTk9EQVRBIHdoZW4KLXF1ZXJ5aW5nIGF0dHJpYnV0ZXMgdGhhdCBzaG91bGQgYmUgdGhlcmUuICBUaGVyZWZvcmUsIHNvcnQgYXR0cmlidXRlcwotc28gdGhhdCB3aGF0ZXZlciBlbmRzIHVwIGluIHRoZSB4YXR0ciBibG9jayBpcyBzb3J0ZWQgYWNjb3JkaW5nIHRvCi13aGF0IHRoZSBrZXJuZWwgZXhwZWN0cy4KLQotQ2M6IERhcnJlbiBIYXJ0IDxkdmhhcnRAbGludXguaW50ZWwuY29tPgotUmVwb3J0ZWQtYnk6IFJpY2hhcmQgUHVyZGllIDxyaWNoYXJkLnB1cmRpZUBsaW51eGZvdW5kYXRpb24ub3JnPgotU2lnbmVkLW9mZi1ieTogRGFycmljayBKLiBXb25nIDxkYXJyaWNrLndvbmdAb3JhY2xlLmNvbT4KLS0tLQotIGxpYi9leHQyZnMvZXh0X2F0dHIuYyAgICAgICAgfCAgIDI0ICsrKysrKysrKysrLQotIHRlc3RzL2RfeGF0dHJfc29ydGluZy9leHBlY3QgfCAgIDI5ICsrKysrKysrKysrKysrCi0gdGVzdHMvZF94YXR0cl9zb3J0aW5nL25hbWUgICB8ICAgIDEgCi0gdGVzdHMvZF94YXR0cl9zb3J0aW5nL3NjcmlwdCB8ICAgODYgKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrCi0gNCBmaWxlcyBjaGFuZ2VkLCAxMzkgaW5zZXJ0aW9ucygrKSwgMSBkZWxldGlvbigtKQotIGNyZWF0ZSBtb2RlIDEwMDY0NCB0ZXN0cy9kX3hhdHRyX3NvcnRpbmcvZXhwZWN0Ci0gY3JlYXRlIG1vZGUgMTAwNjQ0IHRlc3RzL2RfeGF0dHJfc29ydGluZy9uYW1lCi0gY3JlYXRlIG1vZGUgMTAwNjQ0IHRlc3RzL2RfeGF0dHJfc29ydGluZy9zY3JpcHQKLQotVXBzdHJlYW0tU3RhdHVzOiBTdWJtaXR0ZWQKLQotCi1kaWZmIC0tZ2l0IGEvbGliL2V4dDJmcy9leHRfYXR0ci5jIGIvbGliL2V4dDJmcy9leHRfYXR0ci5jCi1pbmRleCAwYTRmOGMwLi5iMTIxODM3IDEwMDY0NAotLS0tIGEvbGliL2V4dDJmcy9leHRfYXR0ci5jCi0rKysgYi9saWIvZXh0MmZzL2V4dF9hdHRyLmMKLUBAIC0yNTQsMTAgKzI1NCwxNSBAQCBzdGF0aWMgc3RydWN0IGVhX25hbWVfaW5kZXggZWFfbmFtZXNbXSA9IHsKLSAJezAsIE5VTEx9LAotIH07Ci0gCi0rc3RhdGljIGludCBmaW5kX2VhX2luZGV4KGNoYXIgKmZ1bGxuYW1lLCBjaGFyICoqbmFtZSwgaW50ICppbmRleCk7Ci0rCi0gLyogUHVzaCBlbXB0eSBhdHRyaWJ1dGVzIHRvIHRoZSBlbmQgYW5kIGlubGluZWRhdGEgdG8gdGhlIGZyb250LiAqLwotIHN0YXRpYyBpbnQgYXR0cl9jb21wYXJlKGNvbnN0IHZvaWQgKmEsIGNvbnN0IHZvaWQgKmIpCi0gewotIAljb25zdCBzdHJ1Y3QgZXh0Ml94YXR0ciAqeGEgPSBhLCAqeGIgPSBiOwotKwljaGFyICp4YV9zdWZmaXgsICp4Yl9zdWZmaXg7Ci0rCWludCB4YV9pZHgsIHhiX2lkeDsKLSsJaW50IGNtcDsKLSAKLSAJaWYgKHhhLT5uYW1lID09IE5VTEwpCi0gCQlyZXR1cm4gKzE7Ci1AQCAtMjY3LDcgKzI3MiwyNCBAQCBzdGF0aWMgaW50IGF0dHJfY29tcGFyZShjb25zdCB2b2lkICphLCBjb25zdCB2b2lkICpiKQotIAkJcmV0dXJuIC0xOwotIAllbHNlIGlmICghc3RyY21wKHhiLT5uYW1lLCAic3lzdGVtLmRhdGEiKSkKLSAJCXJldHVybiArMTsKLS0JcmV0dXJuIDA7Ci0rCi0rCS8qCi0rCSAqIER1cGxpY2F0ZSB0aGUga2VybmVsJ3Mgc29ydGluZyBhbGdvcml0aG0gYmVjYXVzZSB4YXR0ciBibG9ja3MKLSsJICogcmVxdWlyZSBzb3J0ZWQga2V5cy4KLSsJICovCi0rCXhhX3N1ZmZpeCA9IHhhLT5uYW1lOwotKwl4Yl9zdWZmaXggPSB4Yi0+bmFtZTsKLSsJeGFfaWR4ID0geGJfaWR4ID0gMDsKLSsJZmluZF9lYV9pbmRleCh4YS0+bmFtZSwgJnhhX3N1ZmZpeCwgJnhhX2lkeCk7Ci0rCWZpbmRfZWFfaW5kZXgoeGItPm5hbWUsICZ4Yl9zdWZmaXgsICZ4Yl9pZHgpOwotKwljbXAgPSB4YV9pZHggLSB4Yl9pZHg7Ci0rCWlmIChjbXApCi0rCQlyZXR1cm4gY21wOwotKwljbXAgPSBzdHJsZW4oeGFfc3VmZml4KSAtIHN0cmxlbih4Yl9zdWZmaXgpOwotKwlpZiAoY21wKQotKwkJcmV0dXJuIGNtcDsKLSsJY21wID0gc3RyY21wKHhhX3N1ZmZpeCwgeGJfc3VmZml4KTsKLSsJcmV0dXJuIGNtcDsKLSB9Ci0gCi0gc3RhdGljIGNvbnN0IGNoYXIgKmZpbmRfZWFfcHJlZml4KGludCBpbmRleCkKLWRpZmYgLS1naXQgYS90ZXN0cy9kX3hhdHRyX3NvcnRpbmcvZXhwZWN0IGIvdGVzdHMvZF94YXR0cl9zb3J0aW5nL2V4cGVjdAotbmV3IGZpbGUgbW9kZSAxMDA2NDQKLWluZGV4IDAwMDAwMDAuLjE3ZGE2NjMKLS0tLSAvZGV2L251bGwKLSsrKyBiL3Rlc3RzL2RfeGF0dHJfc29ydGluZy9leHBlY3QKLUBAIC0wLDAgKzEsMjkgQEAKLStkZWJ1Z2ZzIHNvcnQgZXh0ZW5kZWQgYXR0cmlidXRlcwotK21rZTJmcyAtRnEgLWIgMTAyNCB0ZXN0LmltZyA1MTIKLStFeGl0IHN0YXR1cyBpcyAwCi0rZWFfc2V0IC8gc2VjdXJpdHkuU01FRzY0IC1mIC90bXAvYgotK0V4aXQgc3RhdHVzIGlzIDAKLStlYV9zZXQgLyBzZWN1cml0eS5pbWIgLWYgL3RtcC9iCi0rRXhpdCBzdGF0dXMgaXMgMAotK2VhX3NldCAvIHVzZXIubW9vIGNvdwotK0V4aXQgc3RhdHVzIGlzIDAKLStlYV9saXN0IC8KLStFeHRlbmRlZCBhdHRyaWJ1dGVzOgotKyAgdXNlci5tb28gPSAiY293IiAoMykKLSsgIHNlY3VyaXR5LmltYiA9ICJ4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4IiAoMjU2KQotKyAgc2VjdXJpdHkuU01FRzY0ID0gInh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHgiICgyNTYpCi0rRXhpdCBzdGF0dXMgaXMgMAotK2VhX2dldCAvIHNlY3VyaXR5LmltYgotK3h4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHgKLStFeGl0IHN0YXR1cyBpcyAwCi0rZWFfZ2V0IC8gbm9zdWNoZWEKLStlYV9nZXQ6IEV4dGVuZGVkIGF0dHJpYnV0ZSBrZXkgbm90IGZvdW5kIHdoaWxlIGdldHRpbmcgZXh0ZW5kZWQgYXR0cmlidXRlCi0rRXhpdCBzdGF0dXMgaXMgMAotK2UyZnNjayAteWYgLU4gdGVzdF9maWxlc3lzCi0rUGFzcyAxOiBDaGVja2luZyBpbm9kZXMsIGJsb2NrcywgYW5kIHNpemVzCi0rUGFzcyAyOiBDaGVja2luZyBkaXJlY3Rvcnkgc3RydWN0dXJlCi0rUGFzcyAzOiBDaGVja2luZyBkaXJlY3RvcnkgY29ubmVjdGl2aXR5Ci0rUGFzcyA0OiBDaGVja2luZyByZWZlcmVuY2UgY291bnRzCi0rUGFzcyA1OiBDaGVja2luZyBncm91cCBzdW1tYXJ5IGluZm9ybWF0aW9uCi0rdGVzdF9maWxlc3lzOiAxMS82NCBmaWxlcyAoMC4wJSBub24tY29udGlndW91cyksIDI5LzUxMiBibG9ja3MKLStFeGl0IHN0YXR1cyBpcyAwCi1kaWZmIC0tZ2l0IGEvdGVzdHMvZF94YXR0cl9zb3J0aW5nL25hbWUgYi90ZXN0cy9kX3hhdHRyX3NvcnRpbmcvbmFtZQotbmV3IGZpbGUgbW9kZSAxMDA2NDQKLWluZGV4IDAwMDAwMDAuLmRkZTg5MjYKLS0tLSAvZGV2L251bGwKLSsrKyBiL3Rlc3RzL2RfeGF0dHJfc29ydGluZy9uYW1lCi1AQCAtMCwwICsxIEBACi0rc29ydCBleHRlbmRlZCBhdHRyaWJ1dGVzIGluIGRlYnVnZnMKLWRpZmYgLS1naXQgYS90ZXN0cy9kX3hhdHRyX3NvcnRpbmcvc2NyaXB0IGIvdGVzdHMvZF94YXR0cl9zb3J0aW5nL3NjcmlwdAotbmV3IGZpbGUgbW9kZSAxMDA2NDQKLWluZGV4IDAwMDAwMDAuLjMwYzE4OWEKLS0tLSAvZGV2L251bGwKLSsrKyBiL3Rlc3RzL2RfeGF0dHJfc29ydGluZy9zY3JpcHQKLUBAIC0wLDAgKzEsODYgQEAKLStpZiB0ZXN0IC14ICRERUJVR0ZTX0VYRTsgdGhlbgotKwotK09VVD0kdGVzdF9uYW1lLmxvZwotK0VYUD0kdGVzdF9kaXIvZXhwZWN0Ci0rVkVSSUZZX0ZTQ0tfT1BUPS15ZgotKwotK1RFU1RfREFUQT0kdGVzdF9uYW1lLnRtcAotK1ZFUklGWV9EQVRBPSR0ZXN0X25hbWUudmVyLnRtcAotKwotK2VjaG8gImRlYnVnZnMgc29ydCBleHRlbmRlZCBhdHRyaWJ1dGVzIiA+ICRPVVQKLSsKLStkZCBpZj0vZGV2L3plcm8gb2Y9JFRNUEZJTEUgYnM9MWsgY291bnQ9NTEyID4gL2Rldi9udWxsIDI+JjEKLSsKLStlY2hvICJta2UyZnMgLUZxIC1iIDEwMjQgdGVzdC5pbWcgNTEyIiA+PiAkT1VUCi0rCi0rJE1LRTJGUyAtRnEgJFRNUEZJTEUgNTEyID4gL2Rldi9udWxsIDI+JjEKLStzdGF0dXM9JD8KLStlY2hvIEV4aXQgc3RhdHVzIGlzICRzdGF0dXMgPj4gJE9VVAotKwotK3BlcmwgLWUgJ3ByaW50ICJ4IiB4IDI1NjsnID4gL3RtcC9iCi0rCi0rZWNobyAiZWFfc2V0IC8gc2VjdXJpdHkuU01FRzY0IC1mIC90bXAvYiIgPiAkT1VULm5ldwotKyRERUJVR0ZTIC13IC1SICJlYV9zZXQgLyBzZWN1cml0eS5TTUVHNjQgLWYgL3RtcC9iIiAkVE1QRklMRSA+PiAkT1VULm5ldyAyPiYxCi0rc3RhdHVzPSQ/Ci0rZWNobyBFeGl0IHN0YXR1cyBpcyAkc3RhdHVzID4+ICRPVVQubmV3Ci0rc2VkIC1mICRjbWRfZGlyL2ZpbHRlci5zZWQgJE9VVC5uZXcgPj4gJE9VVAotKwotK2VjaG8gImVhX3NldCAvIHNlY3VyaXR5LmltYiAtZiAvdG1wL2IiID4gJE9VVC5uZXcKLSskREVCVUdGUyAtdyAtUiAiZWFfc2V0IC8gc2VjdXJpdHkuaW1iIC1mIC90bXAvYiIgJFRNUEZJTEUgPj4gJE9VVC5uZXcgMj4mMQotK3N0YXR1cz0kPwotK2VjaG8gRXhpdCBzdGF0dXMgaXMgJHN0YXR1cyA+PiAkT1VULm5ldwotK3NlZCAtZiAkY21kX2Rpci9maWx0ZXIuc2VkICRPVVQubmV3ID4+ICRPVVQKLSsKLStlY2hvICJlYV9zZXQgLyB1c2VyLm1vbyBjb3ciID4gJE9VVC5uZXcKLSskREVCVUdGUyAtdyAtUiAiZWFfc2V0IC8gdXNlci5tb28gY293IiAkVE1QRklMRSA+PiAkT1VULm5ldyAyPiYxCi0rc3RhdHVzPSQ/Ci0rZWNobyBFeGl0IHN0YXR1cyBpcyAkc3RhdHVzID4+ICRPVVQubmV3Ci0rc2VkIC1mICRjbWRfZGlyL2ZpbHRlci5zZWQgJE9VVC5uZXcgPj4gJE9VVAotKwotK3JtIC1yZiAvdG1wL2IKLSsKLStlY2hvICJlYV9saXN0IC8iID4gJE9VVC5uZXcKLSskREVCVUdGUyAtdyAtUiAiZWFfbGlzdCAvIiAkVE1QRklMRSA+PiAkT1VULm5ldyAyPiYxCi0rc3RhdHVzPSQ/Ci0rZWNobyBFeGl0IHN0YXR1cyBpcyAkc3RhdHVzID4+ICRPVVQubmV3Ci0rc2VkIC1mICRjbWRfZGlyL2ZpbHRlci5zZWQgJE9VVC5uZXcgPj4gJE9VVAotKwotK2VjaG8gImVhX2dldCAvIHNlY3VyaXR5LmltYiIgPiAkT1VULm5ldwotKyRERUJVR0ZTIC13IC1SICJlYV9nZXQgLyBzZWN1cml0eS5pbWIiICRUTVBGSUxFID4+ICRPVVQubmV3IDI+JjEKLStzdGF0dXM9JD8KLStlY2hvIEV4aXQgc3RhdHVzIGlzICRzdGF0dXMgPj4gJE9VVC5uZXcKLStzZWQgLWYgJGNtZF9kaXIvZmlsdGVyLnNlZCAkT1VULm5ldyA+PiAkT1VUCi0rCi0rZWNobyAiZWFfZ2V0IC8gbm9zdWNoZWEiID4gJE9VVC5uZXcKLSskREVCVUdGUyAtdyAtUiAiZWFfZ2V0IC8gbm9zdWNoZWEiICRUTVBGSUxFID4+ICRPVVQubmV3IDI+JjEKLStzdGF0dXM9JD8KLStlY2hvIEV4aXQgc3RhdHVzIGlzICRzdGF0dXMgPj4gJE9VVC5uZXcKLStzZWQgLWYgJGNtZF9kaXIvZmlsdGVyLnNlZCAkT1VULm5ldyA+PiAkT1VUCi0rCi0rZWNobyBlMmZzY2sgJFZFUklGWV9GU0NLX09QVCAtTiB0ZXN0X2ZpbGVzeXMgPiAkT1VULm5ldwotKyRGU0NLICRWRVJJRllfRlNDS19PUFQgLU4gdGVzdF9maWxlc3lzICRUTVBGSUxFID4+ICRPVVQubmV3IDI+JjEKLStzdGF0dXM9JD8KLStlY2hvIEV4aXQgc3RhdHVzIGlzICRzdGF0dXMgPj4gJE9VVC5uZXcKLStzZWQgLWYgJGNtZF9kaXIvZmlsdGVyLnNlZCAkT1VULm5ldyA+PiAkT1VUCi0rCi0rIwotKyMgRG8gdGhlIHZlcmlmaWNhdGlvbgotKyMKLSsKLStybSAtZiAkVE1QRklMRSAkT1VULm5ldwotK2NtcCAtcyAkT1VUICRFWFAKLStzdGF0dXM9JD8KLSsKLStpZiBbICIkc3RhdHVzIiA9IDAgXSA7IHRoZW4KLSsJZWNobyAiJHRlc3RfbmFtZTogJHRlc3RfZGVzY3JpcHRpb246IG9rIgotKwl0b3VjaCAkdGVzdF9uYW1lLm9rCi0rZWxzZQotKwllY2hvICIkdGVzdF9uYW1lOiAkdGVzdF9kZXNjcmlwdGlvbjogZmFpbGVkIgotKwlkaWZmICRESUZGX09QVFMgJEVYUCAkT1VUID4gJHRlc3RfbmFtZS5mYWlsZWQKLStmaQotKwotK3Vuc2V0IFZFUklGWV9GU0NLX09QVCBOQVRJVkVfRlNDS19PUFQgT1VUIEVYUCBURVNUX0RBVEEgVkVSSUZZX0RBVEEKLSsKLStlbHNlICNpZiB0ZXN0IC14ICRERUJVR0ZTX0VYRTsgdGhlbgotKwllY2hvICIkdGVzdF9uYW1lOiAkdGVzdF9kZXNjcmlwdGlvbjogc2tpcHBlZCIKLStmaQotCi0KZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZTJmc3Byb2dzL2UyZnNwcm9nc18xLjQzLmJiIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9lMmZzcHJvZ3MvZTJmc3Byb2dzXzEuNDMuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjQ4NTViYwotLS0gL2Rldi9udWxsCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZTJmc3Byb2dzL2UyZnNwcm9nc18xLjQzLmJiCkBAIC0wLDAgKzEsMTExIEBACityZXF1aXJlIGUyZnNwcm9ncy5pbmMKKworUFIgPSAicjEiCisKK1NSQ19VUkkgKz0gImZpbGU6Ly9hY2luY2x1ZGUubTQgXAorICAgICAgICAgICAgZmlsZTovL3JlbW92ZS5sZGNvbmZpZy5jYWxsLnBhdGNoIFwKKyAgICAgICAgICAgIGZpbGU6Ly9xdWlldC1kZWJ1Z2ZzLnBhdGNoIFwKKyAgICAgICAgICAgIGZpbGU6Ly9ydW4tcHRlc3QgXAorICAgICAgICAgICAgZmlsZTovL3B0ZXN0LnBhdGNoIFwKKyAgICAgICAgICAgIGZpbGU6Ly9ta2Rpci5wYXRjaCBcCisgICAgICAgICAgICBmaWxlOi8vUmV2ZXJ0LW1rZTJmcy1lbmFibGUtdGhlLW1ldGFkYXRhX2NzdW0tYW5kLTY0Yml0LWZlYS5wYXRjaCBcCisiCisKK1NSQ19VUklfYXBwZW5kX2NsYXNzLW5hdGl2ZSA9ICIgZmlsZTovL2UyZnNwcm9ncy1maXgtbWlzc2luZy1jaGVjay1mb3ItcGVybWlzc2lvbi1kZW5pZWQucGF0Y2giCisKK1NSQ1JFViA9ICJkNmFkZjA3MGIwZTg1ZjIwOWMwZDdmMzEwMTg4YjEzNGI1Y2I3MTgwIgorVVBTVFJFQU1fQ0hFQ0tfR0lUVEFHUkVHRVggPSAidig/UDxwdmVyPlxkK1wuXGQrKFwuXGQrKSopJCIKKworRVhUUkFfT0VDT05GICs9ICItLWxpYmRpcj0ke2Jhc2VfbGliZGlyfSAtLXNiaW5kaXI9JHtiYXNlX3NiaW5kaXJ9IFwKKyAgICAgICAgICAgICAgICAtLWVuYWJsZS1lbGYtc2hsaWJzIC0tZGlzYWJsZS1saWJ1dWlkIC0tZGlzYWJsZS11dWlkZCBcCisgICAgICAgICAgICAgICAgLS1kaXNhYmxlLWxpYmJsa2lkIC0tZW5hYmxlLXZlcmJvc2UtbWFrZWNtZHMiCisKK0VYVFJBX09FQ09ORl9kYXJ3aW4gPSAiLS1saWJkaXI9JHtiYXNlX2xpYmRpcn0gLS1zYmluZGlyPSR7YmFzZV9zYmluZGlyfSAtLWVuYWJsZS1ic2Qtc2hsaWJzIgorCitQQUNLQUdFQ09ORklHID8/PSAiIgorUEFDS0FHRUNPTkZJR1tmdXNlXSA9ICctLWVuYWJsZS1mdXNlMmZzLC0tZGlzYWJsZS1mdXNlMmZzLGZ1c2UnCisKK2RvX2NvbmZpZ3VyZV9wcmVwZW5kICgpIHsKKwljcCAke1dPUktESVJ9L2FjaW5jbHVkZS5tNCAke1N9LworfQorCitkb19pbnN0YWxsICgpIHsKKwlvZV9ydW5tYWtlICdERVNURElSPSR7RH0nIGluc3RhbGwKKwlvZV9ydW5tYWtlICdERVNURElSPSR7RH0nIGluc3RhbGwtbGlicworCSMgV2UgdXNlIGJsa2lkIGZyb20gdXRpbC1saW51eCBub3cgc28gcmVtb3ZlIGZyb20gaGVyZQorCXJtIC1mICR7RH0ke2Jhc2VfbGliZGlyfS9saWJibGtpZCoKKwlybSAtcmYgJHtEfSR7aW5jbHVkZWRpcn0vYmxraWQKKwlybSAtZiAke0R9JHtiYXNlX2xpYmRpcn0vcGtnY29uZmlnL2Jsa2lkLnBjCisJcm0gLWYgJHtEfSR7YmFzZV9zYmluZGlyfS9ibGtpZAorCXJtIC1mICR7RH0ke2Jhc2Vfc2JpbmRpcn0vZnNjaworCXJtIC1mICR7RH0ke2Jhc2Vfc2JpbmRpcn0vZmluZGZzCisKKwkjIGUyaW5pdHJkX2hlbHBlciBhbmQgdGhlIHBrZ2NvbmZpZyBmaWxlcyBiZWxvbmcgaW4gbGliZGlyCisJaWYgWyAhICR7RH0ke2xpYmRpcn0gLWVmICR7RH0ke2Jhc2VfbGliZGlyfSBdOyB0aGVuCisJCWluc3RhbGwgLWQgJHtEfSR7bGliZGlyfQorCQltdiAke0R9JHtiYXNlX2xpYmRpcn0vZTJpbml0cmRfaGVscGVyICR7RH0ke2xpYmRpcn0KKwkJbXYgJHtEfSR7YmFzZV9saWJkaXJ9L3BrZ2NvbmZpZyAke0R9JHtsaWJkaXJ9CisJZmkKKworCW9lX211bHRpbGliX2hlYWRlciBleHQyZnMvZXh0Ml90eXBlcy5oCisJaW5zdGFsbCAtZCAke0R9JHtiYXNlX2JpbmRpcn0KKwltdiAke0R9JHtiaW5kaXJ9L2NoYXR0ciAke0R9JHtiYXNlX2JpbmRpcn0vY2hhdHRyLmUyZnNwcm9ncworCisJaW5zdGFsbCAtdiAtbSA3NTUgJHtTfS9jb250cmliL3BvcHVsYXRlLWV4dGZzLnNoICR7RH0ke2Jhc2Vfc2JpbmRpcn0vCisKKwkjIENsZWFuIGhvc3QgcGF0aCAoYnVpbGQgZGlyZWN0b3J5KSBpbiBjb21waWxlX2V0LCBta19jbWRzCisJc2VkIC1pIC1lICJzLFwoRVRfRElSPS4qXCkke1N9L2xpYi9ldFwoLipcKSxcMSR7ZGF0YWRpcn0vZXRcMixnIiAke0R9JHtiaW5kaXJ9L2NvbXBpbGVfZXQKKwlzZWQgLWkgLWUgInMsXChTU19ESVI9LipcKSR7U30vbGliL3NzXCguKlwpLFwxJHtkYXRhZGlyfS9zc1wyLGciICR7RH0ke2JpbmRpcn0vbWtfY21kcworfQorCisjIE5lZWQgdG8gZmluZCB0aGUgcmlnaHQgbWtlMmZzLmNvbmYgZmlsZQorZTJmc3Byb2dzX2NvbmZfZml4dXAgKCkgeworCWZvciBpIGluIG1rZTJmcyBta2ZzLmV4dDIgbWtmcy5leHQzIG1rZnMuZXh0NCBta2ZzLmV4dDRkZXY7IGRvCisJCWNyZWF0ZV93cmFwcGVyICR7RH0ke2Jhc2Vfc2JpbmRpcn0vJGkgTUtFMkZTX0NPTkZJRz0ke3N5c2NvbmZkaXJ9L21rZTJmcy5jb25mCisJZG9uZQorfQorCitkb19pbnN0YWxsX2FwcGVuZF9jbGFzcy1uYXRpdmUoKSB7CisJZTJmc3Byb2dzX2NvbmZfZml4dXAKK30KKworZG9faW5zdGFsbF9hcHBlbmRfY2xhc3MtbmF0aXZlc2RrKCkgeworCWUyZnNwcm9nc19jb25mX2ZpeHVwCit9CisKK1JERVBFTkRTX2UyZnNwcm9ncyA9ICJlMmZzcHJvZ3MtYmFkYmxvY2tzIgorUlJFQ09NTUVORFNfZTJmc3Byb2dzID0gImUyZnNwcm9ncy1ta2UyZnMgZTJmc3Byb2dzLWUyZnNjayIKKworUEFDS0FHRVMgPSsgImUyZnNwcm9ncy1lMmZzY2sgZTJmc3Byb2dzLW1rZTJmcyBlMmZzcHJvZ3MtdHVuZTJmcyBlMmZzcHJvZ3MtYmFkYmxvY2tzIGUyZnNwcm9ncy1yZXNpemUyZnMiCitQQUNLQUdFUyA9KyAibGliY29tZXJyIGxpYnNzIGxpYmUycCBsaWJleHQyZnMiCisKK0ZJTEVTX2UyZnNwcm9ncy1yZXNpemUyZnMgPSAiJHtiYXNlX3NiaW5kaXJ9L3Jlc2l6ZTJmcyoiCitGSUxFU19lMmZzcHJvZ3MtZTJmc2NrID0gIiR7YmFzZV9zYmluZGlyfS9lMmZzY2sgJHtiYXNlX3NiaW5kaXJ9L2ZzY2suZXh0KiIKK0ZJTEVTX2UyZnNwcm9ncy1ta2UyZnMgPSAiJHtiYXNlX3NiaW5kaXJ9L21rZTJmcyAke2Jhc2Vfc2JpbmRpcn0vbWtmcy5leHQqICR7c3lzY29uZmRpcn0vbWtlMmZzLmNvbmYiCitGSUxFU19lMmZzcHJvZ3MtdHVuZTJmcyA9ICIke2Jhc2Vfc2JpbmRpcn0vdHVuZTJmcyAke2Jhc2Vfc2JpbmRpcn0vZTJsYWJlbCIKK0ZJTEVTX2UyZnNwcm9ncy1iYWRibG9ja3MgPSAiJHtiYXNlX3NiaW5kaXJ9L2JhZGJsb2NrcyIKK0ZJTEVTX2xpYmNvbWVyciA9ICIke2Jhc2VfbGliZGlyfS9saWJjb21fZXJyLnNvLioiCitGSUxFU19saWJzcyA9ICIke2Jhc2VfbGliZGlyfS9saWJzcy5zby4qIgorRklMRVNfbGliZTJwID0gIiR7YmFzZV9saWJkaXJ9L2xpYmUycC5zby4qIgorRklMRVNfbGliZXh0MmZzID0gIiR7bGliZGlyfS9lMmluaXRyZF9oZWxwZXIgJHtiYXNlX2xpYmRpcn0vbGliZXh0MmZzLnNvLioiCitGSUxFU18ke1BOfS1kZXYgKz0gIiR7ZGF0YWRpcn0vKi8qLmF3ayAke2RhdGFkaXJ9LyovKi5zZWQgJHtiYXNlX2xpYmRpcn0vKi5zbyAke2JpbmRpcn0vY29tcGlsZV9ldCAke2JpbmRpcn0vbWtfY21kcyIKKworQUxURVJOQVRJVkVfJHtQTn0gPSAiY2hhdHRyIgorQUxURVJOQVRJVkVfUFJJT1JJVFkgPSAiMTAwIgorQUxURVJOQVRJVkVfTElOS19OQU1FW2NoYXR0cl0gPSAiJHtiYXNlX2JpbmRpcn0vY2hhdHRyIgorQUxURVJOQVRJVkVfVEFSR0VUW2NoYXR0cl0gPSAiJHtiYXNlX2JpbmRpcn0vY2hhdHRyLmUyZnNwcm9ncyIKKworQUxURVJOQVRJVkVfJHtQTn0tZG9jID0gImZzY2suOCIKK0FMVEVSTkFUSVZFX0xJTktfTkFNRVtmc2NrLjhdID0gIiR7bWFuZGlyfS9tYW44L2ZzY2suOCIKKworUkRFUEVORFNfJHtQTn0tcHRlc3QgKz0gIiR7UE59ICR7UE59LXR1bmUyZnMgY29yZXV0aWxzIHByb2NwcyBiYXNoIgorCitkb19jb21waWxlX3B0ZXN0KCkgeworCW9lX3J1bm1ha2UgLUMgJHtCfS90ZXN0cworfQorCitkb19pbnN0YWxsX3B0ZXN0KCkgeworCWNwIC1hICR7Qn0vdGVzdHMgJHtEfSR7UFRFU1RfUEFUSH0vdGVzdAorCWNwIC1hICR7U30vdGVzdHMvKiAke0R9JHtQVEVTVF9QQVRIfS90ZXN0CisJc2VkIC1lICdzIS4uL2UyZnNjay9lMmZzY2shZTJmc2NrIWcnIC1pICR7RH0ke1BURVNUX1BBVEh9L3Rlc3QvKi9leHBlY3QqCit9CmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2UyZnNwcm9ncy9lMmZzcHJvZ3NfZ2l0LmJiIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9lMmZzcHJvZ3MvZTJmc3Byb2dzX2dpdC5iYgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOWNkZThlNC4uMDAwMDAwMAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2UyZnNwcm9ncy9lMmZzcHJvZ3NfZ2l0LmJiCisrKyAvZGV2L251bGwKQEAgLTEsMTExICswLDAgQEAKLXJlcXVpcmUgZTJmc3Byb2dzLmluYwotCi1TUkNfVVJJICs9ICJmaWxlOi8vYWNpbmNsdWRlLm00IFwKLSAgICAgICAgICAgIGZpbGU6Ly9yZW1vdmUubGRjb25maWcuY2FsbC5wYXRjaCBcCi0gICAgICAgICAgICBmaWxlOi8vcXVpZXQtZGVidWdmcy5wYXRjaCBcCi0gICAgICAgICAgICBmaWxlOi8vcnVuLXB0ZXN0IFwKLSAgICAgICAgICAgIGZpbGU6Ly9wdGVzdC5wYXRjaCBcCi0gICAgICAgICAgICBmaWxlOi8vbWtkaXIucGF0Y2ggXAotICAgICAgICAgICAgZmlsZTovL3hhdHRyX29yZGVyaW5nLnBhdGNoIFwKLSAgICAgICAgICAgIGZpbGU6Ly9SZXZlcnQtbWtlMmZzLWVuYWJsZS10aGUtbWV0YWRhdGFfY3N1bS1hbmQtNjRiaXQtZmVhLnBhdGNoIFwKLSIKLQotU1JDUkVWID0gIjBmMjY3NDcxNjdjYzlkODJkZjg0OWIwYWFkMzg3YmY4MjRmMDQ1NDQiCi1QViA9ICIxLjQyLjk5KzEuNDMrZ2l0JHtTUkNQVn0iCi1VUFNUUkVBTV9DSEVDS19HSVRUQUdSRUdFWCA9ICJ2KD9QPHB2ZXI+XGQrXC5cZCsoXC5cZCspKikkIgotCi1FWFRSQV9PRUNPTkYgKz0gIi0tbGliZGlyPSR7YmFzZV9saWJkaXJ9IC0tc2JpbmRpcj0ke2Jhc2Vfc2JpbmRpcn0gXAotICAgICAgICAgICAgICAgIC0tZW5hYmxlLWVsZi1zaGxpYnMgLS1kaXNhYmxlLWxpYnV1aWQgLS1kaXNhYmxlLXV1aWRkIFwKLSAgICAgICAgICAgICAgICAtLWRpc2FibGUtbGliYmxraWQgLS1lbmFibGUtdmVyYm9zZS1tYWtlY21kcyIKLQotRVhUUkFfT0VDT05GX2RhcndpbiA9ICItLWxpYmRpcj0ke2Jhc2VfbGliZGlyfSAtLXNiaW5kaXI9JHtiYXNlX3NiaW5kaXJ9IC0tZW5hYmxlLWJzZC1zaGxpYnMiCi0KLVBBQ0tBR0VDT05GSUcgPz89ICIiCi1QQUNLQUdFQ09ORklHW2Z1c2VdID0gJy0tZW5hYmxlLWZ1c2UyZnMsLS1kaXNhYmxlLWZ1c2UyZnMsZnVzZScKLQotZG9fY29uZmlndXJlX3ByZXBlbmQgKCkgewotCWNwICR7V09SS0RJUn0vYWNpbmNsdWRlLm00ICR7U30vCi19Ci0KLWRvX2luc3RhbGwgKCkgewotCW9lX3J1bm1ha2UgJ0RFU1RESVI9JHtEfScgaW5zdGFsbAotCW9lX3J1bm1ha2UgJ0RFU1RESVI9JHtEfScgaW5zdGFsbC1saWJzCi0JIyBXZSB1c2UgYmxraWQgZnJvbSB1dGlsLWxpbnV4IG5vdyBzbyByZW1vdmUgZnJvbSBoZXJlCi0Jcm0gLWYgJHtEfSR7YmFzZV9saWJkaXJ9L2xpYmJsa2lkKgotCXJtIC1yZiAke0R9JHtpbmNsdWRlZGlyfS9ibGtpZAotCXJtIC1mICR7RH0ke2Jhc2VfbGliZGlyfS9wa2djb25maWcvYmxraWQucGMKLQlybSAtZiAke0R9JHtiYXNlX3NiaW5kaXJ9L2Jsa2lkCi0Jcm0gLWYgJHtEfSR7YmFzZV9zYmluZGlyfS9mc2NrCi0Jcm0gLWYgJHtEfSR7YmFzZV9zYmluZGlyfS9maW5kZnMKLQotCSMgZTJpbml0cmRfaGVscGVyIGFuZCB0aGUgcGtnY29uZmlnIGZpbGVzIGJlbG9uZyBpbiBsaWJkaXIKLQlpZiBbICEgJHtEfSR7bGliZGlyfSAtZWYgJHtEfSR7YmFzZV9saWJkaXJ9IF07IHRoZW4KLQkJaW5zdGFsbCAtZCAke0R9JHtsaWJkaXJ9Ci0JCW12ICR7RH0ke2Jhc2VfbGliZGlyfS9lMmluaXRyZF9oZWxwZXIgJHtEfSR7bGliZGlyfQotCQltdiAke0R9JHtiYXNlX2xpYmRpcn0vcGtnY29uZmlnICR7RH0ke2xpYmRpcn0KLQlmaQotCi0Jb2VfbXVsdGlsaWJfaGVhZGVyIGV4dDJmcy9leHQyX3R5cGVzLmgKLQlpbnN0YWxsIC1kICR7RH0ke2Jhc2VfYmluZGlyfQotCW12ICR7RH0ke2JpbmRpcn0vY2hhdHRyICR7RH0ke2Jhc2VfYmluZGlyfS9jaGF0dHIuZTJmc3Byb2dzCi0KLQlpbnN0YWxsIC12IC1tIDc1NSAke1N9L2NvbnRyaWIvcG9wdWxhdGUtZXh0ZnMuc2ggJHtEfSR7YmFzZV9zYmluZGlyfS8KLX0KLQotIyBOZWVkIHRvIGZpbmQgdGhlIHJpZ2h0IG1rZTJmcy5jb25mIGZpbGUKLWUyZnNwcm9nc19jb25mX2ZpeHVwICgpIHsKLQlmb3IgaSBpbiBta2UyZnMgbWtmcy5leHQyIG1rZnMuZXh0MyBta2ZzLmV4dDQgbWtmcy5leHQ0ZGV2OyBkbwotCQljcmVhdGVfd3JhcHBlciAke0R9JHtiYXNlX3NiaW5kaXJ9LyRpIE1LRTJGU19DT05GSUc9JHtzeXNjb25mZGlyfS9ta2UyZnMuY29uZgotCWRvbmUKLX0KLQotZG9faW5zdGFsbF9hcHBlbmRfY2xhc3MtdGFyZ2V0KCkgewotCSMgQ2xlYW4gaG9zdCBwYXRoIGluIGNvbXBpbGVfZXQsIG1rX2NtZHMKLQlzZWQgLWkgLWUgInMsRVRfRElSPVwiJHtTfS9saWIvZXRcIixFVF9ESVI9XCIke2RhdGFkaXJ9L2V0XCIsZyIgJHtEfSR7YmluZGlyfS9jb21waWxlX2V0Ci0Jc2VkIC1pIC1lICJzLFNTX0RJUj1cIiR7U30vbGliL3NzXCIsU1NfRElSPVwiJHtkYXRhZGlyfS9zc1wiLGciICR7RH0ke2JpbmRpcn0vbWtfY21kcwotfQotCi1kb19pbnN0YWxsX2FwcGVuZF9jbGFzcy1uYXRpdmUoKSB7Ci0JZTJmc3Byb2dzX2NvbmZfZml4dXAKLX0KLQotZG9faW5zdGFsbF9hcHBlbmRfY2xhc3MtbmF0aXZlc2RrKCkgewotCWUyZnNwcm9nc19jb25mX2ZpeHVwCi19Ci0KLVJERVBFTkRTX2UyZnNwcm9ncyA9ICJlMmZzcHJvZ3MtYmFkYmxvY2tzIgotUlJFQ09NTUVORFNfZTJmc3Byb2dzID0gImUyZnNwcm9ncy1ta2UyZnMgZTJmc3Byb2dzLWUyZnNjayIKLQotUEFDS0FHRVMgPSsgImUyZnNwcm9ncy1lMmZzY2sgZTJmc3Byb2dzLW1rZTJmcyBlMmZzcHJvZ3MtdHVuZTJmcyBlMmZzcHJvZ3MtYmFkYmxvY2tzIGUyZnNwcm9ncy1yZXNpemUyZnMiCi1QQUNLQUdFUyA9KyAibGliY29tZXJyIGxpYnNzIGxpYmUycCBsaWJleHQyZnMiCi0KLUZJTEVTX2UyZnNwcm9ncy1yZXNpemUyZnMgPSAiJHtiYXNlX3NiaW5kaXJ9L3Jlc2l6ZTJmcyoiCi1GSUxFU19lMmZzcHJvZ3MtZTJmc2NrID0gIiR7YmFzZV9zYmluZGlyfS9lMmZzY2sgJHtiYXNlX3NiaW5kaXJ9L2ZzY2suZXh0KiIKLUZJTEVTX2UyZnNwcm9ncy1ta2UyZnMgPSAiJHtiYXNlX3NiaW5kaXJ9L21rZTJmcyAke2Jhc2Vfc2JpbmRpcn0vbWtmcy5leHQqICR7c3lzY29uZmRpcn0vbWtlMmZzLmNvbmYiCi1GSUxFU19lMmZzcHJvZ3MtdHVuZTJmcyA9ICIke2Jhc2Vfc2JpbmRpcn0vdHVuZTJmcyAke2Jhc2Vfc2JpbmRpcn0vZTJsYWJlbCIKLUZJTEVTX2UyZnNwcm9ncy1iYWRibG9ja3MgPSAiJHtiYXNlX3NiaW5kaXJ9L2JhZGJsb2NrcyIKLUZJTEVTX2xpYmNvbWVyciA9ICIke2Jhc2VfbGliZGlyfS9saWJjb21fZXJyLnNvLioiCi1GSUxFU19saWJzcyA9ICIke2Jhc2VfbGliZGlyfS9saWJzcy5zby4qIgotRklMRVNfbGliZTJwID0gIiR7YmFzZV9saWJkaXJ9L2xpYmUycC5zby4qIgotRklMRVNfbGliZXh0MmZzID0gIiR7bGliZGlyfS9lMmluaXRyZF9oZWxwZXIgJHtiYXNlX2xpYmRpcn0vbGliZXh0MmZzLnNvLioiCi1GSUxFU18ke1BOfS1kZXYgKz0gIiR7ZGF0YWRpcn0vKi8qLmF3ayAke2RhdGFkaXJ9LyovKi5zZWQgJHtiYXNlX2xpYmRpcn0vKi5zbyIKLQotQUxURVJOQVRJVkVfJHtQTn0gPSAiY2hhdHRyIgotQUxURVJOQVRJVkVfUFJJT1JJVFkgPSAiMTAwIgotQUxURVJOQVRJVkVfTElOS19OQU1FW2NoYXR0cl0gPSAiJHtiYXNlX2JpbmRpcn0vY2hhdHRyIgotQUxURVJOQVRJVkVfVEFSR0VUW2NoYXR0cl0gPSAiJHtiYXNlX2JpbmRpcn0vY2hhdHRyLmUyZnNwcm9ncyIKLQotQUxURVJOQVRJVkVfJHtQTn0tZG9jID0gImZzY2suOCIKLUFMVEVSTkFUSVZFX0xJTktfTkFNRVtmc2NrLjhdID0gIiR7bWFuZGlyfS9tYW44L2ZzY2suOCIKLQotUkRFUEVORFNfJHtQTn0tcHRlc3QgKz0gIiR7UE59ICR7UE59LXR1bmUyZnMgY29yZXV0aWxzIHByb2NwcyBiYXNoIgotCi1kb19jb21waWxlX3B0ZXN0KCkgewotCW9lX3J1bm1ha2UgLUMgJHtCfS90ZXN0cwotfQotCi1kb19pbnN0YWxsX3B0ZXN0KCkgewotCWNwIC1hICR7Qn0vdGVzdHMgJHtEfSR7UFRFU1RfUEFUSH0vdGVzdAotCWNwIC1hICR7U30vdGVzdHMvKiAke0R9JHtQVEVTVF9QQVRIfS90ZXN0Ci0Jc2VkIC1lICdzIS4uL2UyZnNjay9lMmZzY2shZTJmc2NrIWcnIC1pICR7RH0ke1BURVNUX1BBVEh9L3Rlc3QvKi9leHBlY3QqCi19CmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2VsZnV0aWxzL2VsZnV0aWxzLTAuMTQ4L2ZpeF9mb3JfZ2NjLTQuNy5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZWxmdXRpbHMvZWxmdXRpbHMtMC4xNDgvZml4X2Zvcl9nY2MtNC43LnBhdGNoCmluZGV4IGJkNjM0YjQuLmM3OGY5NWQgMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZWxmdXRpbHMvZWxmdXRpbHMtMC4xNDgvZml4X2Zvcl9nY2MtNC43LnBhdGNoCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZWxmdXRpbHMvZWxmdXRpbHMtMC4xNDgvZml4X2Zvcl9nY2MtNC43LnBhdGNoCkBAIC0yLDcgKzIsNyBAQAogZ2NjIDQuNyBkb2VzIG5vdCBsaWtlIHBvaW50ZXIgY29udmVyc2lvbiwgc28gaGF2ZSBhIHZvaWQgKiB0bXAgdmFyIHRvIHdvcmsgCiBhcm91bmQgZm9sbG93aW5nIGNvbXBpbGF0aW9uIGlzc3VlLgogCi1TaWduZWQtT2ZmLUJ5OiBOaXRpbiBBIEthbWJsZSA8bml0aW4uYS5rYW1ibGVAaW50ZWwuY29tPgorU2lnbmVkLW9mZi1ieTogTml0aW4gQSBLYW1ibGUgPG5pdGluLmEua2FtYmxlQGludGVsLmNvbT4KIDIwMTEvMDcvMDcKIAogfCBtZDUuYzogSW4gZnVuY3Rpb24gJ21kNV9maW5pc2hfY3R4JzoKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZWxmdXRpbHMvZWxmdXRpbHMtMC4xNDgvZ2NjNi5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZWxmdXRpbHMvZWxmdXRpbHMtMC4xNDgvZ2NjNi5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNTZhNzU0Ci0tLSAvZGV2L251bGwKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9lbGZ1dGlscy9lbGZ1dGlscy0wLjE0OC9nY2M2LnBhdGNoCkBAIC0wLDAgKzEsMjMgQEAKK0ZpeCB3YXJuaW5ncyBmb3VuZCB3aXRoIGdjYzYKKworfCAuLi8uLi9lbGZ1dGlscy0wLjE0OC9saWJkdy9kd2FyZl9zaWJsaW5nb2YuYzogSW4gZnVuY3Rpb24gJ2R3YXJmX3NpYmxpbmdvZic6Cit8IC4uLy4uL2VsZnV0aWxzLTAuMTQ4L2xpYmR3L2R3YXJmX3NpYmxpbmdvZi5jOjY5OjY6IGVycm9yOiBub25udWxsIGFyZ3VtZW50ICdyZXN1bHQnIGNvbXBhcmVkIHRvIE5VTEwgWy1XZXJyb3I9bm9ubnVsbC1jb21wYXJlXQorfCAgICBpZiAocmVzdWx0ID09IE5VTEwpCit8ICAgICAgIF4KKworU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbIHVubWFpbnRhaW5lZCBdCitJbmRleDogZWxmdXRpbHMtMC4xNDgvbGliZHcvZHdhcmZfc2libGluZ29mLmMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBlbGZ1dGlscy0wLjE0OC5vcmlnL2xpYmR3L2R3YXJmX3NpYmxpbmdvZi5jCisrKysgZWxmdXRpbHMtMC4xNDgvbGliZHcvZHdhcmZfc2libGluZ29mLmMKK0BAIC02Niw5ICs2Niw2IEBAIGR3YXJmX3NpYmxpbmdvZiAoZGllLCByZXN1bHQpCisgICBpZiAoZGllID09IE5VTEwpCisgICAgIHJldHVybiAtMTsKKyAKKy0gIGlmIChyZXN1bHQgPT0gTlVMTCkKKy0gICAgcmV0dXJuIC0xOworLQorICAgaWYgKHJlc3VsdCAhPSBkaWUpCisgICAgIHJlc3VsdC0+YWRkciA9IE5VTEw7CisgCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2VsZnV0aWxzL2VsZnV0aWxzLTAuMTY0LzAwMDEtYnVpbGQtUHJvdmlkZS1hbHRlcm5hdGl2ZXMtZm9yLWdsaWJjLWFzc3VtcHRpb25zLWhlbC5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZWxmdXRpbHMvZWxmdXRpbHMtMC4xNjQvMDAwMS1idWlsZC1Qcm92aWRlLWFsdGVybmF0aXZlcy1mb3ItZ2xpYmMtYXNzdW1wdGlvbnMtaGVsLnBhdGNoCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjOGQxYzg5Li4wMDAwMDAwCi0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZWxmdXRpbHMvZWxmdXRpbHMtMC4xNjQvMDAwMS1idWlsZC1Qcm92aWRlLWFsdGVybmF0aXZlcy1mb3ItZ2xpYmMtYXNzdW1wdGlvbnMtaGVsLnBhdGNoCisrKyAvZGV2L251bGwKQEAgLTEsMTE2MyArMCwwIEBACi1Gcm9tIDRiMGZlODBiMzk1MWYwNDRjMWMxYjE0ZDFkN2Y1ZjBiOGFiNjc1MDcgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCi1Gcm9tOiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgotRGF0ZTogVGh1LCAzMSBEZWMgMjAxNSAwNjozNTozNCArMDAwMAotU3ViamVjdDogW1BBVENIXSBidWlsZDogUHJvdmlkZSBhbHRlcm5hdGl2ZXMgZm9yIGdsaWJjIGFzc3VtcHRpb25zIGhlbHBzCi0gY29tcGlsaW5nIGl0IG9uIG11c2wKLQotU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KLS0tLQotVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCi0KLSBNYWtlZmlsZS5hbSAgICAgICAgICAgICAgICAgICAgICB8ICAyICstCi0gbGliL2NvbG9yLmMgICAgICAgICAgICAgICAgICAgICAgfCAgMiArLQotIGxpYi9jcmMzMl9maWxlLmMgICAgICAgICAgICAgICAgIHwgIDQgKysrLQotIGxpYi9maXhlZHNpemVoYXNoLmggICAgICAgICAgICAgIHwgIDQgKystLQotIGxpYi9zeXN0ZW0uaCAgICAgICAgICAgICAgICAgICAgIHwgMTEgKysrKysrKysrKysKLSBsaWIveG1hbGxvYy5jICAgICAgICAgICAgICAgICAgICB8ICAyICstCi0gbGliYXNtL2FzbV9lbmQuYyAgICAgICAgICAgICAgICAgfCAgMiArLQotIGxpYmFzbS9hc21fbmV3c2NuLmMgICAgICAgICAgICAgIHwgIDIgKy0KLSBsaWJjcHUvaTM4Nl9nZW5kaXMuYyAgICAgICAgICAgICB8ICAyICstCi0gbGliY3B1L2kzODZfbGV4LmMgICAgICAgICAgICAgICAgfCAgMiArLQotIGxpYmNwdS9pMzg2X3BhcnNlLmMgICAgICAgICAgICAgIHwgIDIgKy0KLSBsaWJkdy9NYWtlZmlsZS5hbSAgICAgICAgICAgICAgICB8ICAyICstCi0gbGliZHcvbGliZHdfYWxsb2MuYyAgICAgICAgICAgICAgfCAgMyArKy0KLSBsaWJkd2ZsL01ha2VmaWxlLmFtICAgICAgICAgICAgICB8ICAyICsrCi0gbGliZHdmbC9kd2ZsX2J1aWxkX2lkX2ZpbmRfZWxmLmMgfCAgMyArKy0KLSBsaWJkd2ZsL2R3ZmxfZXJyb3IuYyAgICAgICAgICAgICB8ICA0ICsrKy0KLSBsaWJkd2ZsL2R3ZmxfbW9kdWxlX2dldGR3YXJmLmMgICB8ICAxICsKLSBsaWJkd2ZsL2ZpbmQtZGVidWdpbmZvLmMgICAgICAgICB8ICAyICstCi0gbGliZHdmbC9saWJkd2ZsX2NyYzMyX2ZpbGUuYyAgICAgfCAxMCArKysrKysrKysrCi0gbGliZHdmbC9saW51eC1rZXJuZWwtbW9kdWxlcy5jICAgfCAgMSArCi0gbGliZWJsL2VibG9wZW5iYWNrZW5kLmMgICAgICAgICAgfCAgMiArLQotIGxpYmVibC9lYmx3c3RydGFiLmMgICAgICAgICAgICAgIHwgIDIgKy0KLSBsaWJlbGYvZWxmLmggICAgICAgICAgICAgICAgICAgICB8ICA5ICsrKysrKy0tLQotIGxpYmVsZi9saWJlbGYuaCAgICAgICAgICAgICAgICAgIHwgIDEgKwotIGxpYmVsZi9saWJlbGZQLmggICAgICAgICAgICAgICAgIHwgIDEgKwotIHNyYy9hZGRyMmxpbmUuYyAgICAgICAgICAgICAgICAgIHwgIDIgKy0KLSBzcmMvYXIuYyAgICAgICAgICAgICAgICAgICAgICAgICB8ICAyICstCi0gc3JjL2FybGliLmMgICAgICAgICAgICAgICAgICAgICAgfCAgMiArLQotIHNyYy9hcmxpYjIuYyAgICAgICAgICAgICAgICAgICAgIHwgIDIgKy0KLSBzcmMvZWxmY21wLmMgICAgICAgICAgICAgICAgICAgICB8ICAyICstCi0gc3JjL2VsZmxpbnQuYyAgICAgICAgICAgICAgICAgICAgfCAgMiArLQotIHNyYy9maW5kdGV4dHJlbC5jICAgICAgICAgICAgICAgIHwgIDIgKy0KLSBzcmMvaTM4Nl9sZC5jICAgICAgICAgICAgICAgICAgICB8ICAyICstCi0gc3JjL2xkLmMgICAgICAgICAgICAgICAgICAgICAgICAgfCAgMiArLQotIHNyYy9sZGdlbmVyaWMuYyAgICAgICAgICAgICAgICAgIHwgIDIgKy0KLSBzcmMvbGRsZXguYyAgICAgICAgICAgICAgICAgICAgICB8ICAyICstCi0gc3JjL2xkc2NyaXB0LmMgICAgICAgICAgICAgICAgICAgfCAgMiArLQotIHNyYy9ubS5jICAgICAgICAgICAgICAgICAgICAgICAgIHwgIDIgKy0KLSBzcmMvb2JqZHVtcC5jICAgICAgICAgICAgICAgICAgICB8ICAyICstCi0gc3JjL3JhbmxpYi5jICAgICAgICAgICAgICAgICAgICAgfCAgMiArLQotIHNyYy9yZWFkZWxmLmMgICAgICAgICAgICAgICAgICAgIHwgIDIgKy0KLSBzcmMvc2l6ZS5jICAgICAgICAgICAgICAgICAgICAgICB8ICAyICstCi0gc3JjL3N0YWNrLmMgICAgICAgICAgICAgICAgICAgICAgfCAgMiArLQotIHNyYy9zdHJpbmdzLmMgICAgICAgICAgICAgICAgICAgIHwgIDIgKy0KLSBzcmMvc3RyaXAuYyAgICAgICAgICAgICAgICAgICAgICB8ICAyICstCi0gc3JjL3Vuc3RyaXAuYyAgICAgICAgICAgICAgICAgICAgfCAgMiArLQotIHRlc3RzL2FkZHJzY29wZXMuYyAgICAgICAgICAgICAgIHwgIDIgKy0KLSB0ZXN0cy9hbGxyZWdzLmMgICAgICAgICAgICAgICAgICB8ICAyICstCi0gdGVzdHMvYmFja3RyYWNlLWRhdGEuYyAgICAgICAgICAgfCAgMiArLQotIHRlc3RzL2JhY2t0cmFjZS1kd2FyZi5jICAgICAgICAgIHwgIDIgKy0KLSB0ZXN0cy9iYWNrdHJhY2UuYyAgICAgICAgICAgICAgICB8ICAyICstCi0gdGVzdHMvYnVpbGRpZC5jICAgICAgICAgICAgICAgICAgfCAgMiArLQotIHRlc3RzL2RlYnVnYWx0bGluay5jICAgICAgICAgICAgIHwgIDIgKy0KLSB0ZXN0cy9kZWJ1Z2xpbmsuYyAgICAgICAgICAgICAgICB8ICAyICstCi0gdGVzdHMvZGVsZXRlZC5jICAgICAgICAgICAgICAgICAgfCAgMiArLQotIHRlc3RzL2R3ZmwtYWRkci1zZWN0LmMgICAgICAgICAgIHwgIDIgKy0KLSB0ZXN0cy9kd2ZsLWJ1Zy1hZGRyLW92ZXJmbG93LmMgICB8ICAyICstCi0gdGVzdHMvZHdmbC1idWctZmQtbGVhay5jICAgICAgICAgfCAgMiArLQotIHRlc3RzL2R3ZmwtYnVnLWdldG1vZHVsZXMuYyAgICAgIHwgIDIgKy0KLSB0ZXN0cy9kd2ZsLXJlcG9ydC1lbGYtYWxpZ24uYyAgICB8ICAyICstCi0gdGVzdHMvZHdmbGxpbmVzLmMgICAgICAgICAgICAgICAgfCAgMiArLQotIHRlc3RzL2R3Zmxtb2R0ZXN0LmMgICAgICAgICAgICAgIHwgIDIgKy0KLSB0ZXN0cy9kd2Zsc3ltcy5jICAgICAgICAgICAgICAgICB8ICAyICstCi0gdGVzdHMvZWFybHktb2Zmc2NuLmMgICAgICAgICAgICAgfCAgMiArLQotIHRlc3RzL2VjcC5jICAgICAgICAgICAgICAgICAgICAgIHwgIDIgKy0KLSB0ZXN0cy9maW5kLXByb2xvZ3Vlcy5jICAgICAgICAgICB8ICAyICstCi0gdGVzdHMvZnVuY3JldHZhbC5jICAgICAgICAgICAgICAgfCAgMiArLQotIHRlc3RzL2Z1bmNzY29wZXMuYyAgICAgICAgICAgICAgIHwgIDIgKy0KLSB0ZXN0cy9nZXRzcmNfZGllLmMgICAgICAgICAgICAgICB8ICAyICstCi0gdGVzdHMvbGluZTJhZGRyLmMgICAgICAgICAgICAgICAgfCAgMiArLQotIHRlc3RzL2xvd19oaWdoX3BjLmMgICAgICAgICAgICAgIHwgIDIgKy0KLSB0ZXN0cy9tZDUtc2hhMS10ZXN0LmMgICAgICAgICAgICB8ICAyICstCi0gdGVzdHMvcmR3cm1tYXAuYyAgICAgICAgICAgICAgICAgfCAgMiArLQotIHRlc3RzL3NhcmlkeC5jICAgICAgICAgICAgICAgICAgIHwgIDIgKy0KLSB0ZXN0cy9zZWN0aW9uZHVtcC5jICAgICAgICAgICAgICB8ICAyICstCi0gdGVzdHMvdmFybG9jcy5jICAgICAgICAgICAgICAgICAgfCAgMiArLQotIHRlc3RzL3Zkc29zeW1zLmMgICAgICAgICAgICAgICAgIHwgIDIgKy0KLSA3NyBmaWxlcyBjaGFuZ2VkLCAxMDkgaW5zZXJ0aW9ucygrKSwgNzMgZGVsZXRpb25zKC0pCi0KLUluZGV4OiBlbGZ1dGlscy0wLjE2NC9NYWtlZmlsZS5hbQotPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0tIGVsZnV0aWxzLTAuMTY0Lm9yaWcvTWFrZWZpbGUuYW0KLSsrKyBlbGZ1dGlscy0wLjE2NC9NYWtlZmlsZS5hbQotQEAgLTI0LDcgKzI0LDcgQEAgcGtnaW5jbHVkZV9IRUFERVJTID0gdmVyc2lvbi5oCi0gCi0gIyBBZGQgZG9jIGJhY2sgd2hlbiB3ZSBoYXZlIHNvbWUgcmVhbCBjb250ZW50LgotIFNVQkRJUlMgPSBjb25maWcgbTQgbGliIGxpYmVsZiBsaWJlYmwgbGliZHdlbGYgbGliZHdmbCBsaWJkdyBsaWJjcHUgbGliYXNtIFwKLS0JICBiYWNrZW5kcyBzcmMgcG8gdGVzdHMKLSsJICBiYWNrZW5kcyBwbyB0ZXN0cwotIAotIEVYVFJBX0RJU1QgPSBlbGZ1dGlscy5zcGVjIEdQRy1LRVkgTk9URVMgQ09OVFJJQlVUSU5HIFwKLSAJICAgICBDT1BZSU5HIENPUFlJTkctR1BMVjIgQ09QWUlORy1MR1BMVjMKLUluZGV4OiBlbGZ1dGlscy0wLjE2NC9saWIvY29sb3IuYwotPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0tIGVsZnV0aWxzLTAuMTY0Lm9yaWcvbGliL2NvbG9yLmMKLSsrKyBlbGZ1dGlscy0wLjE2NC9saWIvY29sb3IuYwotQEAgLTMyLDcgKzMyLDcgQEAKLSAjZW5kaWYKLSAKLSAjaW5jbHVkZSA8YXJncC5oPgotLSNpbmNsdWRlIDxlcnJvci5oPgotKyNpbmNsdWRlIDxlcnIuaD4KLSAjaW5jbHVkZSA8bGliaW50bC5oPgotICNpbmNsdWRlIDxzdGRsaWIuaD4KLSAjaW5jbHVkZSA8c3RyaW5nLmg+Ci1JbmRleDogZWxmdXRpbHMtMC4xNjQvbGliL2NyYzMyX2ZpbGUuYwotPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0tIGVsZnV0aWxzLTAuMTY0Lm9yaWcvbGliL2NyYzMyX2ZpbGUuYwotKysrIGVsZnV0aWxzLTAuMTY0L2xpYi9jcmMzMl9maWxlLmMKLUBAIC0zMCwxMiArMzAsMTQgQEAKLSAjIGluY2x1ZGUgPGNvbmZpZy5oPgotICNlbmRpZgotIAotLSNpbmNsdWRlICJzeXN0ZW0uaCIKLSAjaW5jbHVkZSA8ZXJybm8uaD4KLSAjaW5jbHVkZSA8dW5pc3RkLmg+Ci0rI2luY2x1ZGUgPHN0ZGludC5oPgotICNpbmNsdWRlIDxzeXMvc3RhdC5oPgotICNpbmNsdWRlIDxzeXMvbW1hbi5oPgotIAotKyNpbmNsdWRlICJzeXN0ZW0uaCIKLSsKLSBpbnQKLSBjcmMzMl9maWxlIChpbnQgZmQsIHVpbnQzMl90ICpyZXNwKQotIHsKLUluZGV4OiBlbGZ1dGlscy0wLjE2NC9saWIvZml4ZWRzaXplaGFzaC5oCi09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLS0gZWxmdXRpbHMtMC4xNjQub3JpZy9saWIvZml4ZWRzaXplaGFzaC5oCi0rKysgZWxmdXRpbHMtMC4xNjQvbGliL2ZpeGVkc2l6ZWhhc2guaAotQEAgLTMwLDEyICszMCwxMiBAQAotICNpbmNsdWRlIDxlcnJuby5oPgotICNpbmNsdWRlIDxzdGRsaWIuaD4KLSAjaW5jbHVkZSA8c3RyaW5nLmg+Ci0tI2luY2x1ZGUgPHN5cy9jZGVmcy5oPgotICNpbmNsdWRlIDxzeXMvcGFyYW0uaD4KLSAKLSAjaW5jbHVkZSA8c3lzdGVtLmg+Ci0gCi0tI2RlZmluZSBDT05DQVQodDEsdDIpIF9fQ09OQ0FUICh0MSx0MikKLSsjZGVmaW5lIENPTkNBVDEoeCx5KSB4IyN5Ci0rI2RlZmluZSBDT05DQVQoeCx5KSBDT05DQVQxKHgseSkKLSAKLSAvKiBCZWZvcmUgaW5jbHVkaW5nIHRoaXMgZmlsZSB0aGUgZm9sbG93aW5nIG1hY3JvcyBtdXN0IGJlIGRlZmluZWQ6Ci0gCi1JbmRleDogZWxmdXRpbHMtMC4xNjQvbGliL3N5c3RlbS5oCi09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLS0gZWxmdXRpbHMtMC4xNjQub3JpZy9saWIvc3lzdGVtLmgKLSsrKyBlbGZ1dGlscy0wLjE2NC9saWIvc3lzdGVtLmgKLUBAIC00OSw2ICs0OSwxNiBAQAotICNlbHNlCi0gIyBlcnJvciAiVW5rbm93biBieXRlIG9yZGVyIgotICNlbmRpZgotKyNpZm5kZWYgVEVNUF9GQUlMVVJFX1JFVFJZCi0rI2RlZmluZSBURU1QX0ZBSUxVUkVfUkVUUlkoZXhwcmVzc2lvbikgXAotKyAgKF9fZXh0ZW5zaW9uX18JCQkJCQkJICAgICAgXAotKyAgICAoeyBsb25nIGludCBfX3Jlc3VsdDsJCQkJCQkgICAgICBcCi0rICAgICAgIGRvIF9fcmVzdWx0ID0gKGxvbmcgaW50KSAoZXhwcmVzc2lvbik7CQkJCSAgICAgIFwKLSsgICAgICAgd2hpbGUgKF9fcmVzdWx0ID09IC0xTCAmJiBlcnJubyA9PSBFSU5UUik7CQkJICAgICAgXAotKyAgICAgICBfX3Jlc3VsdDsgfSkpCi0rI2VuZGlmCi0rCi0rI2RlZmluZSBlcnJvcihzdGF0dXMsIGVycm5vLCAuLi4pIGVycihzdGF0dXMsIF9fVkFfQVJHU19fKQotIAotIGV4dGVybiB2b2lkICp4bWFsbG9jIChzaXplX3QpIF9fYXR0cmlidXRlX18gKChfX21hbGxvY19fKSk7Ci0gZXh0ZXJuIHZvaWQgKnhjYWxsb2MgKHNpemVfdCwgc2l6ZV90KSBfX2F0dHJpYnV0ZV9fICgoX19tYWxsb2NfXykpOwotSW5kZXg6IGVsZnV0aWxzLTAuMTY0L2xpYi94bWFsbG9jLmMKLT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tLSBlbGZ1dGlscy0wLjE2NC5vcmlnL2xpYi94bWFsbG9jLmMKLSsrKyBlbGZ1dGlscy0wLjE2NC9saWIveG1hbGxvYy5jCi1AQCAtMzAsNyArMzAsNyBAQAotICMgaW5jbHVkZSA8Y29uZmlnLmg+Ci0gI2VuZGlmCi0gCi0tI2luY2x1ZGUgPGVycm9yLmg+Ci0rI2luY2x1ZGUgPGVyci5oPgotICNpbmNsdWRlIDxsaWJpbnRsLmg+Ci0gI2luY2x1ZGUgPHN0ZGRlZi5oPgotICNpbmNsdWRlIDxzdGRsaWIuaD4KLUluZGV4OiBlbGZ1dGlscy0wLjE2NC9saWJhc20vYXNtX2VuZC5jCi09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLS0gZWxmdXRpbHMtMC4xNjQub3JpZy9saWJhc20vYXNtX2VuZC5jCi0rKysgZWxmdXRpbHMtMC4xNjQvbGliYXNtL2FzbV9lbmQuYwotQEAgLTMyLDcgKzMyLDcgQEAKLSAjZW5kaWYKLSAKLSAjaW5jbHVkZSA8YXNzZXJ0Lmg+Ci0tI2luY2x1ZGUgPGVycm9yLmg+Ci0rI2luY2x1ZGUgPGVyci5oPgotICNpbmNsdWRlIDxsaWJpbnRsLmg+Ci0gI2luY2x1ZGUgPHN0ZGlvLmg+Ci0gI2luY2x1ZGUgPHN0ZGxpYi5oPgotSW5kZXg6IGVsZnV0aWxzLTAuMTY0L2xpYmFzbS9hc21fbmV3c2NuLmMKLT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tLSBlbGZ1dGlscy0wLjE2NC5vcmlnL2xpYmFzbS9hc21fbmV3c2NuLmMKLSsrKyBlbGZ1dGlscy0wLjE2NC9saWJhc20vYXNtX25ld3Njbi5jCi1AQCAtMzIsNyArMzIsNyBAQAotICNlbmRpZgotIAotICNpbmNsdWRlIDxhc3NlcnQuaD4KLS0jaW5jbHVkZSA8ZXJyb3IuaD4KLSsjaW5jbHVkZSA8ZXJyLmg+Ci0gI2luY2x1ZGUgPGxpYmludGwuaD4KLSAjaW5jbHVkZSA8c3RkbGliLmg+Ci0gI2luY2x1ZGUgPHN0cmluZy5oPgotSW5kZXg6IGVsZnV0aWxzLTAuMTY0L2xpYmNwdS9pMzg2X2dlbmRpcy5jCi09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLS0gZWxmdXRpbHMtMC4xNjQub3JpZy9saWJjcHUvaTM4Nl9nZW5kaXMuYwotKysrIGVsZnV0aWxzLTAuMTY0L2xpYmNwdS9pMzg2X2dlbmRpcy5jCi1AQCAtMzEsNyArMzEsNyBAQAotICMgaW5jbHVkZSA8Y29uZmlnLmg+Ci0gI2VuZGlmCi0gCi0tI2luY2x1ZGUgPGVycm9yLmg+Ci0rI2luY2x1ZGUgPGVyci5oPgotICNpbmNsdWRlIDxlcnJuby5oPgotICNpbmNsdWRlIDxzdGRpby5oPgotICNpbmNsdWRlIDxzdGRsaWIuaD4KLUluZGV4OiBlbGZ1dGlscy0wLjE2NC9saWJjcHUvaTM4Nl9sZXguYwotPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0tIGVsZnV0aWxzLTAuMTY0Lm9yaWcvbGliY3B1L2kzODZfbGV4LmMKLSsrKyBlbGZ1dGlscy0wLjE2NC9saWJjcHUvaTM4Nl9sZXguYwotQEAgLTU3MSw3ICs1NzEsNyBAQCBjaGFyICppMzg2X3RleHQ7Ci0gI2VuZGlmCi0gCi0gI2luY2x1ZGUgPGN0eXBlLmg+Ci0tI2luY2x1ZGUgPGVycm9yLmg+Ci0rI2luY2x1ZGUgPGVyci5oPgotICNpbmNsdWRlIDxsaWJpbnRsLmg+Ci0gCi0gI2luY2x1ZGUgPHN5c3RlbS5oPgotSW5kZXg6IGVsZnV0aWxzLTAuMTY0L2xpYmNwdS9pMzg2X3BhcnNlLmMKLT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tLSBlbGZ1dGlscy0wLjE2NC5vcmlnL2xpYmNwdS9pMzg2X3BhcnNlLmMKLSsrKyBlbGZ1dGlscy0wLjE2NC9saWJjcHUvaTM4Nl9wYXJzZS5jCi1AQCAtMTA3LDcgKzEwNyw3IEBACi0gI2luY2x1ZGUgPGFzc2VydC5oPgotICNpbmNsdWRlIDxjdHlwZS5oPgotICNpbmNsdWRlIDxlcnJuby5oPgotLSNpbmNsdWRlIDxlcnJvci5oPgotKyNpbmNsdWRlIDxlcnIuaD4KLSAjaW5jbHVkZSA8aW50dHlwZXMuaD4KLSAjaW5jbHVkZSA8bGliaW50bC5oPgotICNpbmNsdWRlIDxtYXRoLmg+Ci1JbmRleDogZWxmdXRpbHMtMC4xNjQvbGliZHcvTWFrZWZpbGUuYW0KLT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tLSBlbGZ1dGlscy0wLjE2NC5vcmlnL2xpYmR3L01ha2VmaWxlLmFtCi0rKysgZWxmdXRpbHMtMC4xNjQvbGliZHcvTWFrZWZpbGUuYW0KLUBAIC0xMTcsNyArMTE3LDcgQEAgbGliZHcuc28kKEVYRUVYVCk6ICQoc3JjZGlyKS9saWJkdy5tYXAgbAotIAkJLVdsLC0tZW5hYmxlLW5ldy1kdGFncywtcnBhdGgsJChwa2dsaWJkaXIpIFwKLSAJCS1XbCwtLXZlcnNpb24tc2NyaXB0LCQ8LC0tbm8tdW5kZWZpbmVkIFwKLSAJCS1XbCwtLXdob2xlLWFyY2hpdmUgJChmaWx0ZXItb3V0ICQ8LCReKSAtV2wsLS1uby13aG9sZS1hcmNoaXZlXAotLQkJLWxkbCAkKGFyZ3BfTERBREQpICQoemlwX0xJQlMpICQobGliZHdfc29fTERMSUJTKQotKwkJLWxkbCAkKGFyZ3BfTERBREQpICQoemlwX0xJQlMpICQobGliZHdfc29fTERMSUJTKSAtbGZ0cyAtbGFyZ3AKLSAJQCQodGV4dHJlbF9jaGVjaykKLSAJJChBTV9WX2F0KWxuIC1mcyAkQCAkQC4kKFZFUlNJT04pCi0gCi1JbmRleDogZWxmdXRpbHMtMC4xNjQvbGliZHcvbGliZHdfYWxsb2MuYwotPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0tIGVsZnV0aWxzLTAuMTY0Lm9yaWcvbGliZHcvbGliZHdfYWxsb2MuYwotKysrIGVsZnV0aWxzLTAuMTY0L2xpYmR3L2xpYmR3X2FsbG9jLmMKLUBAIC0zMSwxMSArMzEsMTIgQEAKLSAjIGluY2x1ZGUgPGNvbmZpZy5oPgotICNlbmRpZgotIAotLSNpbmNsdWRlIDxlcnJvci5oPgotKyNpbmNsdWRlIDxlcnIuaD4KLSAjaW5jbHVkZSA8ZXJybm8uaD4KLSAjaW5jbHVkZSA8c3RkbGliLmg+Ci0gI2luY2x1ZGUgPHN5cy9wYXJhbS5oPgotICNpbmNsdWRlICJsaWJkd1AuaCIKLSsjaW5jbHVkZSAic3lzdGVtLmgiCi0gCi0gCi0gdm9pZCAqCi1JbmRleDogZWxmdXRpbHMtMC4xNjQvbGliZHdmbC9NYWtlZmlsZS5hbQotPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0tIGVsZnV0aWxzLTAuMTY0Lm9yaWcvbGliZHdmbC9NYWtlZmlsZS5hbQotKysrIGVsZnV0aWxzLTAuMTY0L2xpYmR3ZmwvTWFrZWZpbGUuYW0KLUBAIC04Niw2ICs4Niw4IEBAIGxpYmVsZiA9IC4uL2xpYmVsZi9saWJlbGYuc28KLSBsaWJlYmwgPSAuLi9saWJlYmwvbGliZWJsLmEKLSBsaWJldSA9IC4uL2xpYi9saWJldS5hCi0gCi0rTERBREQgPSAtbGZ0cwotKwotIGxpYmR3ZmxfcGljX2FfU09VUkNFUyA9Ci0gYW1fbGliZHdmbF9waWNfYV9PQkpFQ1RTID0gJChsaWJkd2ZsX2FfU09VUkNFUzouYz0ub3MpCi0gCi1JbmRleDogZWxmdXRpbHMtMC4xNjQvbGliZHdmbC9kd2ZsX2J1aWxkX2lkX2ZpbmRfZWxmLmMKLT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tLSBlbGZ1dGlscy0wLjE2NC5vcmlnL2xpYmR3ZmwvZHdmbF9idWlsZF9pZF9maW5kX2VsZi5jCi0rKysgZWxmdXRpbHMtMC4xNjQvbGliZHdmbC9kd2ZsX2J1aWxkX2lkX2ZpbmRfZWxmLmMKLUBAIC0yNyw2ICsyNyw3IEBACi0gICAgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LiAgKi8KLSAKLSAjaW5jbHVkZSAibGliZHdmbFAuaCIKLSsjaW5jbHVkZSAic3lzdGVtLmgiCi0gI2luY2x1ZGUgPGludHR5cGVzLmg+Ci0gI2luY2x1ZGUgPGZjbnRsLmg+Ci0gI2luY2x1ZGUgPHVuaXN0ZC5oPgotQEAgLTk0LDcgKzk1LDcgQEAgX19saWJkd2ZsX29wZW5fYnlfYnVpbGRfaWQgKER3ZmxfTW9kdWxlCi0gCXsKLSAJICBpZiAoKmZpbGVfbmFtZSAhPSBOVUxMKQotIAkgICAgZnJlZSAoKmZpbGVfbmFtZSk7Ci0tCSAgKmZpbGVfbmFtZSA9IGNhbm9uaWNhbGl6ZV9maWxlX25hbWUgKG5hbWUpOwotKwkgICpmaWxlX25hbWUgPSByZWFscGF0aCAobmFtZSwgTlVMTCk7Ci0gCSAgaWYgKCpmaWxlX25hbWUgPT0gTlVMTCkKLSAJICAgIHsKLSAJICAgICAgKmZpbGVfbmFtZSA9IG5hbWU7Ci1JbmRleDogZWxmdXRpbHMtMC4xNjQvbGliZHdmbC9kd2ZsX2Vycm9yLmMKLT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tLSBlbGZ1dGlscy0wLjE2NC5vcmlnL2xpYmR3ZmwvZHdmbF9lcnJvci5jCi0rKysgZWxmdXRpbHMtMC4xNjQvbGliZHdmbC9kd2ZsX2Vycm9yLmMKLUBAIC0xNDAsNiArMTQwLDcgQEAgX19saWJkd2ZsX3NldGVycm5vIChEd2ZsX0Vycm9yIGVycm9yKQotIGNvbnN0IGNoYXIgKgotIGR3ZmxfZXJybXNnIChpbnQgZXJyb3IpCi0gewotKyAgc3RhdGljIF9fdGhyZWFkIGNoYXIgc1s2NF0gPSAiIjsKLSAgIGlmIChlcnJvciA9PSAwIHx8IGVycm9yID09IC0xKQotICAgICB7Ci0gICAgICAgaW50IGxhc3RfZXJyb3IgPSBnbG9iYWxfZXJyb3I7Ci1AQCAtMTU0LDcgKzE1NSw4IEBAIGR3ZmxfZXJybXNnIChpbnQgZXJyb3IpCi0gICBzd2l0Y2ggKGVycm9yICZ+IDB4ZmZmZikKLSAgICAgewotICAgICBjYXNlIE9USEVSX0VSUk9SIChFUlJOTyk6Ci0tICAgICAgcmV0dXJuIHN0cmVycm9yX3IgKGVycm9yICYgMHhmZmZmLCAiYmFkIiwgMCk7Ci0rICAgICAgc3RyZXJyb3JfciAoZXJyb3IgJiAweGZmZmYsIHMsIHNpemVvZihzKSk7Ci0rICAgICAgcmV0dXJuIHM7Ci0gICAgIGNhc2UgT1RIRVJfRVJST1IgKExJQkVMRik6Ci0gICAgICAgcmV0dXJuIGVsZl9lcnJtc2cgKGVycm9yICYgMHhmZmZmKTsKLSAgICAgY2FzZSBPVEhFUl9FUlJPUiAoTElCRFcpOgotSW5kZXg6IGVsZnV0aWxzLTAuMTY0L2xpYmR3ZmwvZHdmbF9tb2R1bGVfZ2V0ZHdhcmYuYwotPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0tIGVsZnV0aWxzLTAuMTY0Lm9yaWcvbGliZHdmbC9kd2ZsX21vZHVsZV9nZXRkd2FyZi5jCi0rKysgZWxmdXRpbHMtMC4xNjQvbGliZHdmbC9kd2ZsX21vZHVsZV9nZXRkd2FyZi5jCi1AQCAtMzEsNiArMzEsNyBAQAotICNpbmNsdWRlIDxmY250bC5oPgotICNpbmNsdWRlIDxzdHJpbmcuaD4KLSAjaW5jbHVkZSA8dW5pc3RkLmg+Ci0rI2luY2x1ZGUgInN5c3RlbS5oIgotICNpbmNsdWRlICIuLi9saWJkdy9saWJkd1AuaCIJLyogRFdBUkZfRV8qIHZhbHVlcyBhcmUgaGVyZS4gICovCi0gI2luY2x1ZGUgIi4uL2xpYmVsZi9saWJlbGZQLmgiCi0gCi1JbmRleDogZWxmdXRpbHMtMC4xNjQvbGliZHdmbC9maW5kLWRlYnVnaW5mby5jCi09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLS0gZWxmdXRpbHMtMC4xNjQub3JpZy9saWJkd2ZsL2ZpbmQtZGVidWdpbmZvLmMKLSsrKyBlbGZ1dGlscy0wLjE2NC9saWJkd2ZsL2ZpbmQtZGVidWdpbmZvLmMKLUBAIC0zNzIsNyArMzcyLDcgQEAgZHdmbF9zdGFuZGFyZF9maW5kX2RlYnVnaW5mbyAoRHdmbF9Nb2R1bAotICAgICAgIC8qIElmIEZJTEVfTkFNRSBpcyBhIHN5bWxpbmssIHRoZSBkZWJ1ZyBmaWxlIG1pZ2h0IGJlIGFzc29jaWF0ZWQKLSAJIHdpdGggdGhlIHN5bWxpbmsgdGFyZ2V0IG5hbWUgaW5zdGVhZC4gICovCi0gCi0tICAgICAgY2hhciAqY2Fub24gPSBjYW5vbmljYWxpemVfZmlsZV9uYW1lIChmaWxlX25hbWUpOwotKyAgICAgIGNoYXIgKmNhbm9uID0gcmVhbHBhdGggKGZpbGVfbmFtZSwgTlVMTCk7Ci0gICAgICAgaWYgKGNhbm9uICE9IE5VTEwgJiYgc3RyY21wIChmaWxlX25hbWUsIGNhbm9uKSkKLSAJZmQgPSBmaW5kX2RlYnVnaW5mb19pbl9wYXRoIChtb2QsIGNhbm9uLAotIAkJCQkgICAgIGRlYnVnbGlua19maWxlLCBkZWJ1Z2xpbmtfY3JjLAotSW5kZXg6IGVsZnV0aWxzLTAuMTY0L2xpYmR3ZmwvbGliZHdmbF9jcmMzMl9maWxlLmMKLT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tLSBlbGZ1dGlscy0wLjE2NC5vcmlnL2xpYmR3ZmwvbGliZHdmbF9jcmMzMl9maWxlLmMKLSsrKyBlbGZ1dGlscy0wLjE2NC9saWJkd2ZsL2xpYmR3ZmxfY3JjMzJfZmlsZS5jCi1AQCAtMzEsNiArMzEsMTYgQEAKLSAKLSAjZGVmaW5lIGNyYzMyX2ZpbGUgYXR0cmlidXRlX2hpZGRlbiBfX2xpYmR3ZmxfY3JjMzJfZmlsZQotICNkZWZpbmUgY3JjMzIgX19saWJkd2ZsX2NyYzMyCi0rCi0rI2lmbmRlZiBURU1QX0ZBSUxVUkVfUkVUUlkKLSsjZGVmaW5lIFRFTVBfRkFJTFVSRV9SRVRSWShleHByZXNzaW9uKSBcCi0rICAoX19leHRlbnNpb25fXwkJCQkJCQkgICAgICBcCi0rICAgICh7IGxvbmcgaW50IF9fcmVzdWx0OwkJCQkJCSAgICAgIFwKLSsgICAgICAgZG8gX19yZXN1bHQgPSAobG9uZyBpbnQpIChleHByZXNzaW9uKTsJCQkJICAgICAgXAotKyAgICAgICB3aGlsZSAoX19yZXN1bHQgPT0gLTFMICYmIGVycm5vID09IEVJTlRSKTsJCQkgICAgICBcCi0rICAgICAgIF9fcmVzdWx0OyB9KSkKLSsjZW5kaWYKLSsKLSAjZGVmaW5lIExJQl9TWVNURU1fSAkxCi0gI2luY2x1ZGUgPGxpYmR3ZmxQLmg+Ci0gI2luY2x1ZGUgIi4uL2xpYi9jcmMzMl9maWxlLmMiCi1JbmRleDogZWxmdXRpbHMtMC4xNjQvbGliZHdmbC9saW51eC1rZXJuZWwtbW9kdWxlcy5jCi09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLS0gZWxmdXRpbHMtMC4xNjQub3JpZy9saWJkd2ZsL2xpbnV4LWtlcm5lbC1tb2R1bGVzLmMKLSsrKyBlbGZ1dGlscy0wLjE2NC9saWJkd2ZsL2xpbnV4LWtlcm5lbC1tb2R1bGVzLmMKLUBAIC0zNCw2ICszNCw3IEBACi0gI2luY2x1ZGUgPGNvbmZpZy5oPgotIAotICNpbmNsdWRlICJsaWJkd2ZsUC5oIgotKyNpbmNsdWRlICJzeXN0ZW0uaCIKLSAjaW5jbHVkZSA8aW50dHlwZXMuaD4KLSAjaW5jbHVkZSA8ZXJybm8uaD4KLSAjaW5jbHVkZSA8c3RkaW8uaD4KLUluZGV4OiBlbGZ1dGlscy0wLjE2NC9saWJlYmwvZWJsb3BlbmJhY2tlbmQuYwotPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0tIGVsZnV0aWxzLTAuMTY0Lm9yaWcvbGliZWJsL2VibG9wZW5iYWNrZW5kLmMKLSsrKyBlbGZ1dGlscy0wLjE2NC9saWJlYmwvZWJsb3BlbmJhY2tlbmQuYwotQEAgLTMyLDcgKzMyLDcgQEAKLSAKLSAjaW5jbHVkZSA8YXNzZXJ0Lmg+Ci0gI2luY2x1ZGUgPGRsZmNuLmg+Ci0tI2luY2x1ZGUgPGVycm9yLmg+Ci0rI2luY2x1ZGUgPGVyci5oPgotICNpbmNsdWRlIDxsaWJlbGZQLmg+Ci0gI2luY2x1ZGUgPGR3YXJmLmg+Ci0gI2luY2x1ZGUgPHN0ZGxpYi5oPgotSW5kZXg6IGVsZnV0aWxzLTAuMTY0L2xpYmVibC9lYmx3c3RydGFiLmMKLT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tLSBlbGZ1dGlscy0wLjE2NC5vcmlnL2xpYmVibC9lYmx3c3RydGFiLmMKLSsrKyBlbGZ1dGlscy0wLjE2NC9saWJlYmwvZWJsd3N0cnRhYi5jCi1AQCAtMzA1LDcgKzMwNSw3IEBAIGNvcHlzdHJpbmdzIChzdHJ1Y3QgRWJsX1dTdHJlbnQgKm5vZGVwLAotIAotICAgLyogUHJvY2VzcyB0aGUgY3VycmVudCBub2RlLiAgKi8KLSAgIG5vZGVwLT5vZmZzZXQgPSAqb2Zmc2V0cDsKLS0gICpmcmVlcCA9IHdtZW1wY3B5ICgqZnJlZXAsIG5vZGVwLT5zdHJpbmcsIG5vZGVwLT5sZW4pOwotKyAgKmZyZWVwID0gd21lbWNweSAoKmZyZWVwLCBub2RlcC0+c3RyaW5nLCBub2RlcC0+bGVuKSArIG5vZGVwLT5sZW47Ci0gICAqb2Zmc2V0cCArPSBub2RlcC0+bGVuICogc2l6ZW9mICh3Y2hhcl90KTsKLSAKLSAgIGZvciAoc3VicyA9IG5vZGVwLT5uZXh0OyBzdWJzICE9IE5VTEw7IHN1YnMgPSBzdWJzLT5uZXh0KQotSW5kZXg6IGVsZnV0aWxzLTAuMTY0L2xpYmVsZi9lbGYuaAotPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0tIGVsZnV0aWxzLTAuMTY0Lm9yaWcvbGliZWxmL2VsZi5oCi0rKysgZWxmdXRpbHMtMC4xNjQvbGliZWxmL2VsZi5oCi1AQCAtMjEsNyArMjEsOSBAQAotIAotICNpbmNsdWRlIDxmZWF0dXJlcy5oPgotIAotLV9fQkVHSU5fREVDTFMKLSsjaWZkZWYgX19jcGx1c3BsdXMKLStleHRlcm4gIkMiIHsKLSsjZW5kaWYKLSAKLSAvKiBTdGFuZGFyZCBFTEYgdHlwZXMuICAqLwotIAotQEAgLTM1NTIsNyArMzU1NCw4IEBAIGVudW0KLSAKLSAjZGVmaW5lIFJfVElMRUdYX05VTQkJMTMwCi0gCi0tCi0tX19FTkRfREVDTFMKLSsjaWZkZWYgX19jcGx1c3BsdXMKLSt9Ci0rI2VuZGlmCi0gCi0gI2VuZGlmCS8qIGVsZi5oICovCi1JbmRleDogZWxmdXRpbHMtMC4xNjQvbGliZWxmL2xpYmVsZi5oCi09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLS0gZWxmdXRpbHMtMC4xNjQub3JpZy9saWJlbGYvbGliZWxmLmgKLSsrKyBlbGZ1dGlscy0wLjE2NC9saWJlbGYvbGliZWxmLmgKLUBAIC0yOSw2ICsyOSw3IEBACi0gI2lmbmRlZiBfTElCRUxGX0gKLSAjZGVmaW5lIF9MSUJFTEZfSCAxCi0gCi0rI2luY2x1ZGUgPGZjbnRsLmg+Ci0gI2luY2x1ZGUgPHN0ZGludC5oPgotICNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KLSAKLUluZGV4OiBlbGZ1dGlscy0wLjE2NC9saWJlbGYvbGliZWxmUC5oCi09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLS0gZWxmdXRpbHMtMC4xNjQub3JpZy9saWJlbGYvbGliZWxmUC5oCi0rKysgZWxmdXRpbHMtMC4xNjQvbGliZWxmL2xpYmVsZlAuaAotQEAgLTM2LDYgKzM2LDcgQEAKLSAKLSAjaW5jbHVkZSA8YXIuaD4KLSAjaW5jbHVkZSA8Z2VsZi5oPgotKyNpbmNsdWRlIDxsaWJlbGYuaD4KLSAKLSAjaW5jbHVkZSA8ZXJybm8uaD4KLSAjaW5jbHVkZSA8c3RkaW50Lmg+Ci1JbmRleDogZWxmdXRpbHMtMC4xNjQvc3JjL2FkZHIybGluZS5jCi09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLS0gZWxmdXRpbHMtMC4xNjQub3JpZy9zcmMvYWRkcjJsaW5lLmMKLSsrKyBlbGZ1dGlscy0wLjE2NC9zcmMvYWRkcjJsaW5lLmMKLUBAIC0yMyw3ICsyMyw3IEBACi0gI2luY2x1ZGUgPGFyZ3AuaD4KLSAjaW5jbHVkZSA8YXNzZXJ0Lmg+Ci0gI2luY2x1ZGUgPGVycm5vLmg+Ci0tI2luY2x1ZGUgPGVycm9yLmg+Ci0rI2luY2x1ZGUgPGVyci5oPgotICNpbmNsdWRlIDxmY250bC5oPgotICNpbmNsdWRlIDxpbnR0eXBlcy5oPgotICNpbmNsdWRlIDxsaWJkd2ZsLmg+Ci1JbmRleDogZWxmdXRpbHMtMC4xNjQvc3JjL2FyLmMKLT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tLSBlbGZ1dGlscy0wLjE2NC5vcmlnL3NyYy9hci5jCi0rKysgZWxmdXRpbHMtMC4xNjQvc3JjL2FyLmMKLUBAIC0yMiw3ICsyMiw3IEBACi0gCi0gI2luY2x1ZGUgPGFyZ3AuaD4KLSAjaW5jbHVkZSA8YXNzZXJ0Lmg+Ci0tI2luY2x1ZGUgPGVycm9yLmg+Ci0rI2luY2x1ZGUgPGVyci5oPgotICNpbmNsdWRlIDxmY250bC5oPgotICNpbmNsdWRlIDxnZWxmLmg+Ci0gI2luY2x1ZGUgPGxpYmludGwuaD4KLUluZGV4OiBlbGZ1dGlscy0wLjE2NC9zcmMvYXJsaWIuYwotPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0tIGVsZnV0aWxzLTAuMTY0Lm9yaWcvc3JjL2FybGliLmMKLSsrKyBlbGZ1dGlscy0wLjE2NC9zcmMvYXJsaWIuYwotQEAgLTIxLDcgKzIxLDcgQEAKLSAjZW5kaWYKLSAKLSAjaW5jbHVkZSA8YXNzZXJ0Lmg+Ci0tI2luY2x1ZGUgPGVycm9yLmg+Ci0rI2luY2x1ZGUgPGVyci5oPgotICNpbmNsdWRlIDxnZWxmLmg+Ci0gI2luY2x1ZGUgPGxpYmludGwuaD4KLSAjaW5jbHVkZSA8c3RkaW8uaD4KLUluZGV4OiBlbGZ1dGlscy0wLjE2NC9zcmMvYXJsaWIyLmMKLT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tLSBlbGZ1dGlscy0wLjE2NC5vcmlnL3NyYy9hcmxpYjIuYwotKysrIGVsZnV0aWxzLTAuMTY0L3NyYy9hcmxpYjIuYwotQEAgLTIwLDcgKzIwLDcgQEAKLSAjIGluY2x1ZGUgPGNvbmZpZy5oPgotICNlbmRpZgotIAotLSNpbmNsdWRlIDxlcnJvci5oPgotKyNpbmNsdWRlIDxlcnIuaD4KLSAjaW5jbHVkZSA8bGliaW50bC5oPgotICNpbmNsdWRlIDxsaW1pdHMuaD4KLSAjaW5jbHVkZSA8c3RyaW5nLmg+Ci1JbmRleDogZWxmdXRpbHMtMC4xNjQvc3JjL2VsZmNtcC5jCi09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLS0gZWxmdXRpbHMtMC4xNjQub3JpZy9zcmMvZWxmY21wLmMKLSsrKyBlbGZ1dGlscy0wLjE2NC9zcmMvZWxmY21wLmMKLUBAIC0yMyw3ICsyMyw3IEBACi0gI2luY2x1ZGUgPGFyZ3AuaD4KLSAjaW5jbHVkZSA8YXNzZXJ0Lmg+Ci0gI2luY2x1ZGUgPGVycm5vLmg+Ci0tI2luY2x1ZGUgPGVycm9yLmg+Ci0rI2luY2x1ZGUgPGVyci5oPgotICNpbmNsdWRlIDxmY250bC5oPgotICNpbmNsdWRlIDxsb2NhbGUuaD4KLSAjaW5jbHVkZSA8bGliaW50bC5oPgotSW5kZXg6IGVsZnV0aWxzLTAuMTY0L3NyYy9lbGZsaW50LmMKLT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tLSBlbGZ1dGlscy0wLjE2NC5vcmlnL3NyYy9lbGZsaW50LmMKLSsrKyBlbGZ1dGlscy0wLjE2NC9zcmMvZWxmbGludC5jCi1AQCAtMjQsNyArMjQsNyBAQAotICNpbmNsdWRlIDxhc3NlcnQuaD4KLSAjaW5jbHVkZSA8Ynl0ZXN3YXAuaD4KLSAjaW5jbHVkZSA8ZW5kaWFuLmg+Ci0tI2luY2x1ZGUgPGVycm9yLmg+Ci0rI2luY2x1ZGUgPGVyci5oPgotICNpbmNsdWRlIDxmY250bC5oPgotICNpbmNsdWRlIDxnZWxmLmg+Ci0gI2luY2x1ZGUgPGludHR5cGVzLmg+Ci1JbmRleDogZWxmdXRpbHMtMC4xNjQvc3JjL2ZpbmR0ZXh0cmVsLmMKLT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tLSBlbGZ1dGlscy0wLjE2NC5vcmlnL3NyYy9maW5kdGV4dHJlbC5jCi0rKysgZWxmdXRpbHMtMC4xNjQvc3JjL2ZpbmR0ZXh0cmVsLmMKLUBAIC0yMyw3ICsyMyw3IEBACi0gI2luY2x1ZGUgPGFyZ3AuaD4KLSAjaW5jbHVkZSA8YXNzZXJ0Lmg+Ci0gI2luY2x1ZGUgPGVycm5vLmg+Ci0tI2luY2x1ZGUgPGVycm9yLmg+Ci0rI2luY2x1ZGUgPGVyci5oPgotICNpbmNsdWRlIDxmY250bC5oPgotICNpbmNsdWRlIDxnZWxmLmg+Ci0gI2luY2x1ZGUgPGxpYmR3Lmg+Ci1JbmRleDogZWxmdXRpbHMtMC4xNjQvc3JjL2kzODZfbGQuYwotPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0tIGVsZnV0aWxzLTAuMTY0Lm9yaWcvc3JjL2kzODZfbGQuYwotKysrIGVsZnV0aWxzLTAuMTY0L3NyYy9pMzg2X2xkLmMKLUBAIC0yMCw3ICsyMCw3IEBACi0gI2VuZGlmCi0gCi0gI2luY2x1ZGUgPGFzc2VydC5oPgotLSNpbmNsdWRlIDxlcnJvci5oPgotKyNpbmNsdWRlIDxlcnIuaD4KLSAjaW5jbHVkZSA8bGliaW50bC5oPgotICNpbmNsdWRlIDxzdGRsaWIuaD4KLSAjaW5jbHVkZSA8c3RyaW5nLmg+Ci1JbmRleDogZWxmdXRpbHMtMC4xNjQvc3JjL2xkLmMKLT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tLSBlbGZ1dGlscy0wLjE2NC5vcmlnL3NyYy9sZC5jCi0rKysgZWxmdXRpbHMtMC4xNjQvc3JjL2xkLmMKLUBAIC0yMSw3ICsyMSw3IEBACi0gCi0gI2luY2x1ZGUgPGFyZ3AuaD4KLSAjaW5jbHVkZSA8YXNzZXJ0Lmg+Ci0tI2luY2x1ZGUgPGVycm9yLmg+Ci0rI2luY2x1ZGUgPGVyci5oPgotICNpbmNsdWRlIDxmY250bC5oPgotICNpbmNsdWRlIDxsaWJlbGYuaD4KLSAjaW5jbHVkZSA8bGliaW50bC5oPgotSW5kZXg6IGVsZnV0aWxzLTAuMTY0L3NyYy9sZGdlbmVyaWMuYwotPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0tIGVsZnV0aWxzLTAuMTY0Lm9yaWcvc3JjL2xkZ2VuZXJpYy5jCi0rKysgZWxmdXRpbHMtMC4xNjQvc3JjL2xkZ2VuZXJpYy5jCi1AQCAtMjMsNyArMjMsNyBAQAotICNpbmNsdWRlIDxjdHlwZS5oPgotICNpbmNsdWRlIDxkbGZjbi5oPgotICNpbmNsdWRlIDxlcnJuby5oPgotLSNpbmNsdWRlIDxlcnJvci5oPgotKyNpbmNsdWRlIDxlcnIuaD4KLSAjaW5jbHVkZSA8ZmNudGwuaD4KLSAjaW5jbHVkZSA8Zm5tYXRjaC5oPgotICNpbmNsdWRlIDxnZWxmLmg+Ci1JbmRleDogZWxmdXRpbHMtMC4xNjQvc3JjL2xkbGV4LmMKLT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tLSBlbGZ1dGlscy0wLjE2NC5vcmlnL3NyYy9sZGxleC5jCi0rKysgZWxmdXRpbHMtMC4xNjQvc3JjL2xkbGV4LmMKLUBAIC0xMDk5LDcgKzEwOTksNyBAQCBjaGFyICpsZHRleHQ7Ci0gI2luY2x1ZGUgPGFzc2VydC5oPgotICNpbmNsdWRlIDxjdHlwZS5oPgotICNpbmNsdWRlIDxlbGYuaD4KLS0jaW5jbHVkZSA8ZXJyb3IuaD4KLSsjaW5jbHVkZSA8ZXJyLmg+Ci0gI2luY2x1ZGUgPGludHR5cGVzLmg+Ci0gI2luY2x1ZGUgPGxpYmludGwuaD4KLSAjaW5jbHVkZSA8c3RkYm9vbC5oPgotSW5kZXg6IGVsZnV0aWxzLTAuMTY0L3NyYy9sZHNjcmlwdC5jCi09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLS0gZWxmdXRpbHMtMC4xNjQub3JpZy9zcmMvbGRzY3JpcHQuYwotKysrIGVsZnV0aWxzLTAuMTY0L3NyYy9sZHNjcmlwdC5jCi1AQCAtOTUsNyArOTUsNyBAQAotICNlbmRpZgotIAotICNpbmNsdWRlIDxhc3NlcnQuaD4KLS0jaW5jbHVkZSA8ZXJyb3IuaD4KLSsjaW5jbHVkZSA8ZXJyLmg+Ci0gI2luY2x1ZGUgPGxpYmludGwuaD4KLSAjaW5jbHVkZSA8c3RkYm9vbC5oPgotICNpbmNsdWRlIDxzdGRpbnQuaD4KLUluZGV4OiBlbGZ1dGlscy0wLjE2NC9zcmMvbm0uYwotPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0tIGVsZnV0aWxzLTAuMTY0Lm9yaWcvc3JjL25tLmMKLSsrKyBlbGZ1dGlscy0wLjE2NC9zcmMvbm0uYwotQEAgLTI2LDcgKzI2LDcgQEAKLSAjaW5jbHVkZSA8Y3R5cGUuaD4KLSAjaW5jbHVkZSA8ZHdhcmYuaD4KLSAjaW5jbHVkZSA8ZXJybm8uaD4KLS0jaW5jbHVkZSA8ZXJyb3IuaD4KLSsjaW5jbHVkZSA8ZXJyLmg+Ci0gI2luY2x1ZGUgPGZjbnRsLmg+Ci0gI2luY2x1ZGUgPGdlbGYuaD4KLSAjaW5jbHVkZSA8aW50dHlwZXMuaD4KLUluZGV4OiBlbGZ1dGlscy0wLjE2NC9zcmMvb2JqZHVtcC5jCi09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLS0gZWxmdXRpbHMtMC4xNjQub3JpZy9zcmMvb2JqZHVtcC5jCi0rKysgZWxmdXRpbHMtMC4xNjQvc3JjL29iamR1bXAuYwotQEAgLTIxLDcgKzIxLDcgQEAKLSAjZW5kaWYKLSAKLSAjaW5jbHVkZSA8YXJncC5oPgotLSNpbmNsdWRlIDxlcnJvci5oPgotKyNpbmNsdWRlIDxlcnIuaD4KLSAjaW5jbHVkZSA8ZmNudGwuaD4KLSAjaW5jbHVkZSA8aW50dHlwZXMuaD4KLSAjaW5jbHVkZSA8bGliaW50bC5oPgotSW5kZXg6IGVsZnV0aWxzLTAuMTY0L3NyYy9yYW5saWIuYwotPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0tIGVsZnV0aWxzLTAuMTY0Lm9yaWcvc3JjL3JhbmxpYi5jCi0rKysgZWxmdXRpbHMtMC4xNjQvc3JjL3JhbmxpYi5jCi1AQCAtMjQsNyArMjQsNyBAQAotICNpbmNsdWRlIDxhcmdwLmg+Ci0gI2luY2x1ZGUgPGFzc2VydC5oPgotICNpbmNsdWRlIDxlcnJuby5oPgotLSNpbmNsdWRlIDxlcnJvci5oPgotKyNpbmNsdWRlIDxlcnIuaD4KLSAjaW5jbHVkZSA8ZmNudGwuaD4KLSAjaW5jbHVkZSA8Z2VsZi5oPgotICNpbmNsdWRlIDxsaWJpbnRsLmg+Ci1JbmRleDogZWxmdXRpbHMtMC4xNjQvc3JjL3JlYWRlbGYuYwotPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0tIGVsZnV0aWxzLTAuMTY0Lm9yaWcvc3JjL3JlYWRlbGYuYwotKysrIGVsZnV0aWxzLTAuMTY0L3NyYy9yZWFkZWxmLmMKLUBAIC0yNSw3ICsyNSw3IEBACi0gI2luY2x1ZGUgPGN0eXBlLmg+Ci0gI2luY2x1ZGUgPGR3YXJmLmg+Ci0gI2luY2x1ZGUgPGVycm5vLmg+Ci0tI2luY2x1ZGUgPGVycm9yLmg+Ci0rI2luY2x1ZGUgPGVyci5oPgotICNpbmNsdWRlIDxmY250bC5oPgotICNpbmNsdWRlIDxnZWxmLmg+Ci0gI2luY2x1ZGUgPGludHR5cGVzLmg+Ci1JbmRleDogZWxmdXRpbHMtMC4xNjQvc3JjL3NpemUuYwotPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0tIGVsZnV0aWxzLTAuMTY0Lm9yaWcvc3JjL3NpemUuYwotKysrIGVsZnV0aWxzLTAuMTY0L3NyYy9zaXplLmMKLUBAIC0yMSw3ICsyMSw3IEBACi0gI2VuZGlmCi0gCi0gI2luY2x1ZGUgPGFyZ3AuaD4KLS0jaW5jbHVkZSA8ZXJyb3IuaD4KLSsjaW5jbHVkZSA8ZXJyLmg+Ci0gI2luY2x1ZGUgPGZjbnRsLmg+Ci0gI2luY2x1ZGUgPGdlbGYuaD4KLSAjaW5jbHVkZSA8aW50dHlwZXMuaD4KLUluZGV4OiBlbGZ1dGlscy0wLjE2NC9zcmMvc3RhY2suYwotPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0tIGVsZnV0aWxzLTAuMTY0Lm9yaWcvc3JjL3N0YWNrLmMKLSsrKyBlbGZ1dGlscy0wLjE2NC9zcmMvc3RhY2suYwotQEAgLTE4LDcgKzE4LDcgQEAKLSAjaW5jbHVkZSA8Y29uZmlnLmg+Ci0gI2luY2x1ZGUgPGFzc2VydC5oPgotICNpbmNsdWRlIDxhcmdwLmg+Ci0tI2luY2x1ZGUgPGVycm9yLmg+Ci0rI2luY2x1ZGUgPGVyci5oPgotICNpbmNsdWRlIDxzdGRsaWIuaD4KLSAjaW5jbHVkZSA8aW50dHlwZXMuaD4KLSAjaW5jbHVkZSA8c3RkaW8uaD4KLUluZGV4OiBlbGZ1dGlscy0wLjE2NC9zcmMvc3RyaW5ncy5jCi09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLS0gZWxmdXRpbHMtMC4xNjQub3JpZy9zcmMvc3RyaW5ncy5jCi0rKysgZWxmdXRpbHMtMC4xNjQvc3JjL3N0cmluZ3MuYwotQEAgLTI1LDcgKzI1LDcgQEAKLSAjaW5jbHVkZSA8Y3R5cGUuaD4KLSAjaW5jbHVkZSA8ZW5kaWFuLmg+Ci0gI2luY2x1ZGUgPGVycm5vLmg+Ci0tI2luY2x1ZGUgPGVycm9yLmg+Ci0rI2luY2x1ZGUgPGVyci5oPgotICNpbmNsdWRlIDxmY250bC5oPgotICNpbmNsdWRlIDxnZWxmLmg+Ci0gI2luY2x1ZGUgPGludHR5cGVzLmg+Ci1JbmRleDogZWxmdXRpbHMtMC4xNjQvc3JjL3N0cmlwLmMKLT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tLSBlbGZ1dGlscy0wLjE2NC5vcmlnL3NyYy9zdHJpcC5jCi0rKysgZWxmdXRpbHMtMC4xNjQvc3JjL3N0cmlwLmMKLUBAIC0yNCw3ICsyNCw3IEBACi0gI2luY2x1ZGUgPGFzc2VydC5oPgotICNpbmNsdWRlIDxieXRlc3dhcC5oPgotICNpbmNsdWRlIDxlbmRpYW4uaD4KLS0jaW5jbHVkZSA8ZXJyb3IuaD4KLSsjaW5jbHVkZSA8ZXJyLmg+Ci0gI2luY2x1ZGUgPGZjbnRsLmg+Ci0gI2luY2x1ZGUgPGdlbGYuaD4KLSAjaW5jbHVkZSA8bGliZWxmLmg+Ci1JbmRleDogZWxmdXRpbHMtMC4xNjQvc3JjL3Vuc3RyaXAuYwotPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0tIGVsZnV0aWxzLTAuMTY0Lm9yaWcvc3JjL3Vuc3RyaXAuYwotKysrIGVsZnV0aWxzLTAuMTY0L3NyYy91bnN0cmlwLmMKLUBAIC0zMSw3ICszMSw3IEBACi0gI2luY2x1ZGUgPGFyZ3AuaD4KLSAjaW5jbHVkZSA8YXNzZXJ0Lmg+Ci0gI2luY2x1ZGUgPGVycm5vLmg+Ci0tI2luY2x1ZGUgPGVycm9yLmg+Ci0rI2luY2x1ZGUgPGVyci5oPgotICNpbmNsdWRlIDxmY250bC5oPgotICNpbmNsdWRlIDxmbm1hdGNoLmg+Ci0gI2luY2x1ZGUgPGxpYmludGwuaD4KLUluZGV4OiBlbGZ1dGlscy0wLjE2NC90ZXN0cy9hZGRyc2NvcGVzLmMKLT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tLSBlbGZ1dGlscy0wLjE2NC5vcmlnL3Rlc3RzL2FkZHJzY29wZXMuYwotKysrIGVsZnV0aWxzLTAuMTY0L3Rlc3RzL2FkZHJzY29wZXMuYwotQEAgLTI1LDcgKzI1LDcgQEAKLSAjaW5jbHVkZSA8c3RkaW9fZXh0Lmg+Ci0gI2luY2x1ZGUgPGxvY2FsZS5oPgotICNpbmNsdWRlIDxzdGRsaWIuaD4KLS0jaW5jbHVkZSA8ZXJyb3IuaD4KLSsjaW5jbHVkZSA8ZXJyLmg+Ci0gI2luY2x1ZGUgPHN0cmluZy5oPgotIAotIAotSW5kZXg6IGVsZnV0aWxzLTAuMTY0L3Rlc3RzL2FsbHJlZ3MuYwotPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0tIGVsZnV0aWxzLTAuMTY0Lm9yaWcvdGVzdHMvYWxscmVncy5jCi0rKysgZWxmdXRpbHMtMC4xNjQvdGVzdHMvYWxscmVncy5jCi1AQCAtMjEsNyArMjEsNyBAQAotICNpbmNsdWRlIDxzdGRpby5oPgotICNpbmNsdWRlIDxzdGRsaWIuaD4KLSAjaW5jbHVkZSA8c3RyaW5nLmg+Ci0tI2luY2x1ZGUgPGVycm9yLmg+Ci0rI2luY2x1ZGUgPGVyci5oPgotICNpbmNsdWRlIDxsb2NhbGUuaD4KLSAjaW5jbHVkZSA8YXJncC5oPgotICNpbmNsdWRlIDxhc3NlcnQuaD4KLUluZGV4OiBlbGZ1dGlscy0wLjE2NC90ZXN0cy9iYWNrdHJhY2UtZGF0YS5jCi09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLS0gZWxmdXRpbHMtMC4xNjQub3JpZy90ZXN0cy9iYWNrdHJhY2UtZGF0YS5jCi0rKysgZWxmdXRpbHMtMC4xNjQvdGVzdHMvYmFja3RyYWNlLWRhdGEuYwotQEAgLTI3LDcgKzI3LDcgQEAKLSAjaW5jbHVkZSA8ZGlyZW50Lmg+Ci0gI2luY2x1ZGUgPHN0ZGxpYi5oPgotICNpbmNsdWRlIDxlcnJuby5oPgotLSNpbmNsdWRlIDxlcnJvci5oPgotKyNpbmNsdWRlIDxlcnIuaD4KLSAjaW5jbHVkZSA8dW5pc3RkLmg+Ci0gI2luY2x1ZGUgPGR3YXJmLmg+Ci0gI2lmIGRlZmluZWQoX194ODZfNjRfXykgJiYgZGVmaW5lZChfX2xpbnV4X18pCi1JbmRleDogZWxmdXRpbHMtMC4xNjQvdGVzdHMvYmFja3RyYWNlLWR3YXJmLmMKLT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tLSBlbGZ1dGlscy0wLjE2NC5vcmlnL3Rlc3RzL2JhY2t0cmFjZS1kd2FyZi5jCi0rKysgZWxmdXRpbHMtMC4xNjQvdGVzdHMvYmFja3RyYWNlLWR3YXJmLmMKLUBAIC0yMiw3ICsyMiw3IEBACi0gI2luY2x1ZGUgPHN0ZGlvX2V4dC5oPgotICNpbmNsdWRlIDxsb2NhbGUuaD4KLSAjaW5jbHVkZSA8ZXJybm8uaD4KLS0jaW5jbHVkZSA8ZXJyb3IuaD4KLSsjaW5jbHVkZSA8ZXJyLmg+Ci0gI2luY2x1ZGUgPHVuaXN0ZC5oPgotICNpbmNsdWRlIDxzeXMvcHRyYWNlLmg+Ci0gI2luY2x1ZGUgPHN5cy90eXBlcy5oPgotSW5kZXg6IGVsZnV0aWxzLTAuMTY0L3Rlc3RzL2JhY2t0cmFjZS5jCi09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLS0gZWxmdXRpbHMtMC4xNjQub3JpZy90ZXN0cy9iYWNrdHJhY2UuYwotKysrIGVsZnV0aWxzLTAuMTY0L3Rlc3RzL2JhY2t0cmFjZS5jCi1AQCAtMjQsNyArMjQsNyBAQAotICNpbmNsdWRlIDxkaXJlbnQuaD4KLSAjaW5jbHVkZSA8c3RkbGliLmg+Ci0gI2luY2x1ZGUgPGVycm5vLmg+Ci0tI2luY2x1ZGUgPGVycm9yLmg+Ci0rI2luY2x1ZGUgPGVyci5oPgotICNpbmNsdWRlIDx1bmlzdGQuaD4KLSAjaW5jbHVkZSA8ZHdhcmYuaD4KLSAjaWZkZWYgX19saW51eF9fCi1JbmRleDogZWxmdXRpbHMtMC4xNjQvdGVzdHMvYnVpbGRpZC5jCi09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLS0gZWxmdXRpbHMtMC4xNjQub3JpZy90ZXN0cy9idWlsZGlkLmMKLSsrKyBlbGZ1dGlscy0wLjE2NC90ZXN0cy9idWlsZGlkLmMKLUBAIC0yMyw3ICsyMyw3IEBACi0gI2luY2x1ZGUgRUxGVVRJTFNfSEVBREVSKGVsZikKLSAjaW5jbHVkZSBFTEZVVElMU19IRUFERVIoZHdlbGYpCi0gI2luY2x1ZGUgPHN0ZGlvLmg+Ci0tI2luY2x1ZGUgPGVycm9yLmg+Ci0rI2luY2x1ZGUgPGVyci5oPgotICNpbmNsdWRlIDxzdHJpbmcuaD4KLSAjaW5jbHVkZSA8c3RkbGliLmg+Ci0gI2luY2x1ZGUgPHN5cy90eXBlcy5oPgotSW5kZXg6IGVsZnV0aWxzLTAuMTY0L3Rlc3RzL2RlYnVnYWx0bGluay5jCi09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLS0gZWxmdXRpbHMtMC4xNjQub3JpZy90ZXN0cy9kZWJ1Z2FsdGxpbmsuYwotKysrIGVsZnV0aWxzLTAuMTY0L3Rlc3RzL2RlYnVnYWx0bGluay5jCi1AQCAtMjMsNyArMjMsNyBAQAotICNpbmNsdWRlIEVMRlVUSUxTX0hFQURFUihkdykKLSAjaW5jbHVkZSBFTEZVVElMU19IRUFERVIoZHdlbGYpCi0gI2luY2x1ZGUgPHN0ZGlvLmg+Ci0tI2luY2x1ZGUgPGVycm9yLmg+Ci0rI2luY2x1ZGUgPGVyci5oPgotICNpbmNsdWRlIDxzdHJpbmcuaD4KLSAjaW5jbHVkZSA8c3RkbGliLmg+Ci0gI2luY2x1ZGUgPHN5cy90eXBlcy5oPgotSW5kZXg6IGVsZnV0aWxzLTAuMTY0L3Rlc3RzL2RlYnVnbGluay5jCi09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLS0gZWxmdXRpbHMtMC4xNjQub3JpZy90ZXN0cy9kZWJ1Z2xpbmsuYwotKysrIGVsZnV0aWxzLTAuMTY0L3Rlc3RzL2RlYnVnbGluay5jCi1AQCAtMjEsNyArMjEsNyBAQAotICNpbmNsdWRlIDxlcnJuby5oPgotICNpbmNsdWRlIEVMRlVUSUxTX0hFQURFUihkd2VsZikKLSAjaW5jbHVkZSA8c3RkaW8uaD4KLS0jaW5jbHVkZSA8ZXJyb3IuaD4KLSsjaW5jbHVkZSA8ZXJyLmg+Ci0gI2luY2x1ZGUgPHN0cmluZy5oPgotICNpbmNsdWRlIDxzdGRsaWIuaD4KLSAjaW5jbHVkZSA8c3lzL3R5cGVzLmg+Ci1JbmRleDogZWxmdXRpbHMtMC4xNjQvdGVzdHMvZGVsZXRlZC5jCi09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLS0gZWxmdXRpbHMtMC4xNjQub3JpZy90ZXN0cy9kZWxldGVkLmMKLSsrKyBlbGZ1dGlscy0wLjE2NC90ZXN0cy9kZWxldGVkLmMKLUBAIC0yMSw3ICsyMSw3IEBACi0gI2luY2x1ZGUgPHVuaXN0ZC5oPgotICNpbmNsdWRlIDxhc3NlcnQuaD4KLSAjaW5jbHVkZSA8c3RkaW8uaD4KLS0jaW5jbHVkZSA8ZXJyb3IuaD4KLSsjaW5jbHVkZSA8ZXJyLmg+Ci0gI2luY2x1ZGUgPGVycm5vLmg+Ci0gI2lmZGVmIF9fbGludXhfXwotICNpbmNsdWRlIDxzeXMvcHJjdGwuaD4KLUluZGV4OiBlbGZ1dGlscy0wLjE2NC90ZXN0cy9kd2ZsLWFkZHItc2VjdC5jCi09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLS0gZWxmdXRpbHMtMC4xNjQub3JpZy90ZXN0cy9kd2ZsLWFkZHItc2VjdC5jCi0rKysgZWxmdXRpbHMtMC4xNjQvdGVzdHMvZHdmbC1hZGRyLXNlY3QuYwotQEAgLTIzLDcgKzIzLDcgQEAKLSAjaW5jbHVkZSA8c3RkaW9fZXh0Lmg+Ci0gI2luY2x1ZGUgPHN0ZGxpYi5oPgotICNpbmNsdWRlIDxzdHJpbmcuaD4KLS0jaW5jbHVkZSA8ZXJyb3IuaD4KLSsjaW5jbHVkZSA8ZXJyLmg+Ci0gI2luY2x1ZGUgPGxvY2FsZS5oPgotICNpbmNsdWRlIDxhcmdwLmg+Ci0gI2luY2x1ZGUgRUxGVVRJTFNfSEVBREVSKGR3ZmwpCi1JbmRleDogZWxmdXRpbHMtMC4xNjQvdGVzdHMvZHdmbC1idWctYWRkci1vdmVyZmxvdy5jCi09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLS0gZWxmdXRpbHMtMC4xNjQub3JpZy90ZXN0cy9kd2ZsLWJ1Zy1hZGRyLW92ZXJmbG93LmMKLSsrKyBlbGZ1dGlscy0wLjE2NC90ZXN0cy9kd2ZsLWJ1Zy1hZGRyLW92ZXJmbG93LmMKLUBAIC0yMCw3ICsyMCw3IEBACi0gI2luY2x1ZGUgPGludHR5cGVzLmg+Ci0gI2luY2x1ZGUgPHN0ZGlvLmg+Ci0gI2luY2x1ZGUgPHN0ZGlvX2V4dC5oPgotLSNpbmNsdWRlIDxlcnJvci5oPgotKyNpbmNsdWRlIDxlcnIuaD4KLSAjaW5jbHVkZSA8bG9jYWxlLmg+Ci0gI2luY2x1ZGUgRUxGVVRJTFNfSEVBREVSKGR3ZmwpCi0gCi1JbmRleDogZWxmdXRpbHMtMC4xNjQvdGVzdHMvZHdmbC1idWctZmQtbGVhay5jCi09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLS0gZWxmdXRpbHMtMC4xNjQub3JpZy90ZXN0cy9kd2ZsLWJ1Zy1mZC1sZWFrLmMKLSsrKyBlbGZ1dGlscy0wLjE2NC90ZXN0cy9kd2ZsLWJ1Zy1mZC1sZWFrLmMKLUBAIC0yNCw3ICsyNCw3IEBACi0gI2luY2x1ZGUgPGRpcmVudC5oPgotICNpbmNsdWRlIDxzdGRsaWIuaD4KLSAjaW5jbHVkZSA8ZXJybm8uaD4KLS0jaW5jbHVkZSA8ZXJyb3IuaD4KLSsjaW5jbHVkZSA8ZXJyLmg+Ci0gI2luY2x1ZGUgPHVuaXN0ZC5oPgotICNpbmNsdWRlIDxkd2FyZi5oPgotICNpbmNsdWRlIDxzeXMvcmVzb3VyY2UuaD4KLUluZGV4OiBlbGZ1dGlscy0wLjE2NC90ZXN0cy9kd2ZsLWJ1Zy1nZXRtb2R1bGVzLmMKLT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tLSBlbGZ1dGlscy0wLjE2NC5vcmlnL3Rlc3RzL2R3ZmwtYnVnLWdldG1vZHVsZXMuYwotKysrIGVsZnV0aWxzLTAuMTY0L3Rlc3RzL2R3ZmwtYnVnLWdldG1vZHVsZXMuYwotQEAgLTE4LDcgKzE4LDcgQEAKLSAjaW5jbHVkZSA8Y29uZmlnLmg+Ci0gI2luY2x1ZGUgRUxGVVRJTFNfSEVBREVSKGR3ZmwpCi0gCi0tI2luY2x1ZGUgPGVycm9yLmg+Ci0rI2luY2x1ZGUgPGVyci5oPgotIAotIHN0YXRpYyBjb25zdCBEd2ZsX0NhbGxiYWNrcyBjYWxsYmFja3MgPQotICAgewotSW5kZXg6IGVsZnV0aWxzLTAuMTY0L3Rlc3RzL2R3ZmwtcmVwb3J0LWVsZi1hbGlnbi5jCi09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLS0gZWxmdXRpbHMtMC4xNjQub3JpZy90ZXN0cy9kd2ZsLXJlcG9ydC1lbGYtYWxpZ24uYwotKysrIGVsZnV0aWxzLTAuMTY0L3Rlc3RzL2R3ZmwtcmVwb3J0LWVsZi1hbGlnbi5jCi1AQCAtMjAsNyArMjAsNyBAQAotICNpbmNsdWRlIDxpbnR0eXBlcy5oPgotICNpbmNsdWRlIDxzdGRpby5oPgotICNpbmNsdWRlIDxzdGRpb19leHQuaD4KLS0jaW5jbHVkZSA8ZXJyb3IuaD4KLSsjaW5jbHVkZSA8ZXJyLmg+Ci0gI2luY2x1ZGUgPGxvY2FsZS5oPgotICNpbmNsdWRlIDxzdHJpbmcuaD4KLSAjaW5jbHVkZSA8c3RkbGliLmg+Ci1JbmRleDogZWxmdXRpbHMtMC4xNjQvdGVzdHMvZHdmbGxpbmVzLmMKLT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tLSBlbGZ1dGlscy0wLjE2NC5vcmlnL3Rlc3RzL2R3ZmxsaW5lcy5jCi0rKysgZWxmdXRpbHMtMC4xNjQvdGVzdHMvZHdmbGxpbmVzLmMKLUBAIC0yNyw3ICsyNyw3IEBACi0gI2luY2x1ZGUgPHN0ZGlvLmg+Ci0gI2luY2x1ZGUgPHN0ZGxpYi5oPgotICNpbmNsdWRlIDxzdHJpbmcuaD4KLS0jaW5jbHVkZSA8ZXJyb3IuaD4KLSsjaW5jbHVkZSA8ZXJyLmg+Ci0gCi0gaW50Ci0gbWFpbiAoaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKLUluZGV4OiBlbGZ1dGlscy0wLjE2NC90ZXN0cy9kd2ZsbW9kdGVzdC5jCi09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLS0gZWxmdXRpbHMtMC4xNjQub3JpZy90ZXN0cy9kd2ZsbW9kdGVzdC5jCi0rKysgZWxmdXRpbHMtMC4xNjQvdGVzdHMvZHdmbG1vZHRlc3QuYwotQEAgLTIzLDcgKzIzLDcgQEAKLSAjaW5jbHVkZSA8c3RkaW9fZXh0Lmg+Ci0gI2luY2x1ZGUgPHN0ZGxpYi5oPgotICNpbmNsdWRlIDxzdHJpbmcuaD4KLS0jaW5jbHVkZSA8ZXJyb3IuaD4KLSsjaW5jbHVkZSA8ZXJyLmg+Ci0gI2luY2x1ZGUgPGxvY2FsZS5oPgotICNpbmNsdWRlIDxhcmdwLmg+Ci0gI2luY2x1ZGUgRUxGVVRJTFNfSEVBREVSKGR3ZmwpCi1JbmRleDogZWxmdXRpbHMtMC4xNjQvdGVzdHMvZHdmbHN5bXMuYwotPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0tIGVsZnV0aWxzLTAuMTY0Lm9yaWcvdGVzdHMvZHdmbHN5bXMuYwotKysrIGVsZnV0aWxzLTAuMTY0L3Rlc3RzL2R3ZmxzeW1zLmMKLUBAIC0yNSw3ICsyNSw3IEBACi0gI2luY2x1ZGUgPHN0ZGlvLmg+Ci0gI2luY2x1ZGUgPHN0ZGlvX2V4dC5oPgotICNpbmNsdWRlIDxzdGRsaWIuaD4KLS0jaW5jbHVkZSA8ZXJyb3IuaD4KLSsjaW5jbHVkZSA8ZXJyLmg+Ci0gI2luY2x1ZGUgPHN0cmluZy5oPgotIAotIHN0YXRpYyBjb25zdCBjaGFyICoKLUluZGV4OiBlbGZ1dGlscy0wLjE2NC90ZXN0cy9lYXJseS1vZmZzY24uYwotPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0tIGVsZnV0aWxzLTAuMTY0Lm9yaWcvdGVzdHMvZWFybHktb2Zmc2NuLmMKLSsrKyBlbGZ1dGlscy0wLjE2NC90ZXN0cy9lYXJseS1vZmZzY24uYwotQEAgLTE5LDcgKzE5LDcgQEAKLSAjZW5kaWYKLSAKLSAjaW5jbHVkZSA8ZXJybm8uaD4KLS0jaW5jbHVkZSA8ZXJyb3IuaD4KLSsjaW5jbHVkZSA8ZXJyLmg+Ci0gI2luY2x1ZGUgPGZjbnRsLmg+Ci0gI2luY2x1ZGUgPGdlbGYuaD4KLSAjaW5jbHVkZSA8c3RkaW8uaD4KLUluZGV4OiBlbGZ1dGlscy0wLjE2NC90ZXN0cy9lY3AuYwotPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0tIGVsZnV0aWxzLTAuMTY0Lm9yaWcvdGVzdHMvZWNwLmMKLSsrKyBlbGZ1dGlscy0wLjE2NC90ZXN0cy9lY3AuYwotQEAgLTIwLDcgKzIwLDcgQEAKLSAjZW5kaWYKLSAKLSAjaW5jbHVkZSA8ZXJybm8uaD4KLS0jaW5jbHVkZSA8ZXJyb3IuaD4KLSsjaW5jbHVkZSA8ZXJyLmg+Ci0gI2luY2x1ZGUgPGZjbnRsLmg+Ci0gI2luY2x1ZGUgPGdlbGYuaD4KLSAjaW5jbHVkZSA8c3RkbGliLmg+Ci1JbmRleDogZWxmdXRpbHMtMC4xNjQvdGVzdHMvZmluZC1wcm9sb2d1ZXMuYwotPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0tIGVsZnV0aWxzLTAuMTY0Lm9yaWcvdGVzdHMvZmluZC1wcm9sb2d1ZXMuYwotKysrIGVsZnV0aWxzLTAuMTY0L3Rlc3RzL2ZpbmQtcHJvbG9ndWVzLmMKLUBAIC0yNSw3ICsyNSw3IEBACi0gI2luY2x1ZGUgPHN0ZGlvX2V4dC5oPgotICNpbmNsdWRlIDxsb2NhbGUuaD4KLSAjaW5jbHVkZSA8c3RkbGliLmg+Ci0tI2luY2x1ZGUgPGVycm9yLmg+Ci0rI2luY2x1ZGUgPGVyci5oPgotICNpbmNsdWRlIDxzdHJpbmcuaD4KLSAjaW5jbHVkZSA8Zm5tYXRjaC5oPgotIAotSW5kZXg6IGVsZnV0aWxzLTAuMTY0L3Rlc3RzL2Z1bmNyZXR2YWwuYwotPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0tIGVsZnV0aWxzLTAuMTY0Lm9yaWcvdGVzdHMvZnVuY3JldHZhbC5jCi0rKysgZWxmdXRpbHMtMC4xNjQvdGVzdHMvZnVuY3JldHZhbC5jCi1AQCAtMjUsNyArMjUsNyBAQAotICNpbmNsdWRlIDxzdGRpb19leHQuaD4KLSAjaW5jbHVkZSA8bG9jYWxlLmg+Ci0gI2luY2x1ZGUgPHN0ZGxpYi5oPgotLSNpbmNsdWRlIDxlcnJvci5oPgotKyNpbmNsdWRlIDxlcnIuaD4KLSAjaW5jbHVkZSA8c3RyaW5nLmg+Ci0gI2luY2x1ZGUgPGZubWF0Y2guaD4KLSAKLUluZGV4OiBlbGZ1dGlscy0wLjE2NC90ZXN0cy9mdW5jc2NvcGVzLmMKLT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tLSBlbGZ1dGlscy0wLjE2NC5vcmlnL3Rlc3RzL2Z1bmNzY29wZXMuYwotKysrIGVsZnV0aWxzLTAuMTY0L3Rlc3RzL2Z1bmNzY29wZXMuYwotQEAgLTI1LDcgKzI1LDcgQEAKLSAjaW5jbHVkZSA8c3RkaW9fZXh0Lmg+Ci0gI2luY2x1ZGUgPGxvY2FsZS5oPgotICNpbmNsdWRlIDxzdGRsaWIuaD4KLS0jaW5jbHVkZSA8ZXJyb3IuaD4KLSsjaW5jbHVkZSA8ZXJyLmg+Ci0gI2luY2x1ZGUgPHN0cmluZy5oPgotICNpbmNsdWRlIDxmbm1hdGNoLmg+Ci0gCi1JbmRleDogZWxmdXRpbHMtMC4xNjQvdGVzdHMvZ2V0c3JjX2RpZS5jCi09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLS0gZWxmdXRpbHMtMC4xNjQub3JpZy90ZXN0cy9nZXRzcmNfZGllLmMKLSsrKyBlbGZ1dGlscy0wLjE2NC90ZXN0cy9nZXRzcmNfZGllLmMKLUBAIC0xOSw3ICsxOSw3IEBACi0gI2VuZGlmCi0gCi0gI2luY2x1ZGUgPGVycm5vLmg+Ci0tI2luY2x1ZGUgPGVycm9yLmg+Ci0rI2luY2x1ZGUgPGVyci5oPgotICNpbmNsdWRlIDxmY250bC5oPgotICNpbmNsdWRlIDxpbnR0eXBlcy5oPgotICNpbmNsdWRlIDxsaWJlbGYuaD4KLUluZGV4OiBlbGZ1dGlscy0wLjE2NC90ZXN0cy9saW5lMmFkZHIuYwotPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0tIGVsZnV0aWxzLTAuMTY0Lm9yaWcvdGVzdHMvbGluZTJhZGRyLmMKLSsrKyBlbGZ1dGlscy0wLjE2NC90ZXN0cy9saW5lMmFkZHIuYwotQEAgLTI2LDcgKzI2LDcgQEAKLSAjaW5jbHVkZSA8bG9jYWxlLmg+Ci0gI2luY2x1ZGUgPHN0ZGxpYi5oPgotICNpbmNsdWRlIDxzdHJpbmcuaD4KLS0jaW5jbHVkZSA8ZXJyb3IuaD4KLSsjaW5jbHVkZSA8ZXJyLmg+Ci0gCi0gCi0gc3RhdGljIHZvaWQKLUluZGV4OiBlbGZ1dGlscy0wLjE2NC90ZXN0cy9sb3dfaGlnaF9wYy5jCi09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLS0gZWxmdXRpbHMtMC4xNjQub3JpZy90ZXN0cy9sb3dfaGlnaF9wYy5jCi0rKysgZWxmdXRpbHMtMC4xNjQvdGVzdHMvbG93X2hpZ2hfcGMuYwotQEAgLTI1LDcgKzI1LDcgQEAKLSAjaW5jbHVkZSA8c3RkaW9fZXh0Lmg+Ci0gI2luY2x1ZGUgPGxvY2FsZS5oPgotICNpbmNsdWRlIDxzdGRsaWIuaD4KLS0jaW5jbHVkZSA8ZXJyb3IuaD4KLSsjaW5jbHVkZSA8ZXJyLmg+Ci0gI2luY2x1ZGUgPHN0cmluZy5oPgotICNpbmNsdWRlIDxmbm1hdGNoLmg+Ci0gCi1JbmRleDogZWxmdXRpbHMtMC4xNjQvdGVzdHMvbWQ1LXNoYTEtdGVzdC5jCi09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLS0gZWxmdXRpbHMtMC4xNjQub3JpZy90ZXN0cy9tZDUtc2hhMS10ZXN0LmMKLSsrKyBlbGZ1dGlscy0wLjE2NC90ZXN0cy9tZDUtc2hhMS10ZXN0LmMKLUBAIC0xOSw3ICsxOSw3IEBACi0gI2VuZGlmCi0gCi0gI2luY2x1ZGUgPHN0cmluZy5oPgotLSNpbmNsdWRlIDxlcnJvci5oPgotKyNpbmNsdWRlIDxlcnIuaD4KLSAKLSAjaW5jbHVkZSAibWQ1LmgiCi0gI2luY2x1ZGUgInNoYTEuaCIKLUluZGV4OiBlbGZ1dGlscy0wLjE2NC90ZXN0cy9yZHdybW1hcC5jCi09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLS0gZWxmdXRpbHMtMC4xNjQub3JpZy90ZXN0cy9yZHdybW1hcC5jCi0rKysgZWxmdXRpbHMtMC4xNjQvdGVzdHMvcmR3cm1tYXAuYwotQEAgLTE5LDcgKzE5LDcgQEAKLSAjZW5kaWYKLSAKLSAjaW5jbHVkZSA8ZXJybm8uaD4KLS0jaW5jbHVkZSA8ZXJyb3IuaD4KLSsjaW5jbHVkZSA8ZXJyLmg+Ci0gI2luY2x1ZGUgPHN0ZGlvLmg+Ci0gI2luY2x1ZGUgPGZjbnRsLmg+Ci0gI2luY2x1ZGUgPHVuaXN0ZC5oPgotSW5kZXg6IGVsZnV0aWxzLTAuMTY0L3Rlc3RzL3NhcmlkeC5jCi09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLS0gZWxmdXRpbHMtMC4xNjQub3JpZy90ZXN0cy9zYXJpZHguYwotKysrIGVsZnV0aWxzLTAuMTY0L3Rlc3RzL3NhcmlkeC5jCi1AQCAtMTcsNyArMTcsNyBAQAotIAotICNpbmNsdWRlIDxjb25maWcuaD4KLSAKLS0jaW5jbHVkZSA8ZXJyb3IuaD4KLSsjaW5jbHVkZSA8ZXJyLmg+Ci0gI2luY2x1ZGUgPGZjbnRsLmg+Ci0gI2luY2x1ZGUgPGdlbGYuaD4KLSAjaW5jbHVkZSA8c3RkaW8uaD4KLUluZGV4OiBlbGZ1dGlscy0wLjE2NC90ZXN0cy9zZWN0aW9uZHVtcC5jCi09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLS0gZWxmdXRpbHMtMC4xNjQub3JpZy90ZXN0cy9zZWN0aW9uZHVtcC5jCi0rKysgZWxmdXRpbHMtMC4xNjQvdGVzdHMvc2VjdGlvbmR1bXAuYwotQEAgLTE4LDcgKzE4LDcgQEAKLSAjaW5jbHVkZSA8Y29uZmlnLmg+Ci0gCi0gI2luY2x1ZGUgPGVycm5vLmg+Ci0tI2luY2x1ZGUgPGVycm9yLmg+Ci0rI2luY2x1ZGUgPGVyci5oPgotICNpbmNsdWRlIDxmY250bC5oPgotICNpbmNsdWRlIDxnZWxmLmg+Ci0gI2luY2x1ZGUgPGludHR5cGVzLmg+Ci1JbmRleDogZWxmdXRpbHMtMC4xNjQvdGVzdHMvdmFybG9jcy5jCi09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLS0gZWxmdXRpbHMtMC4xNjQub3JpZy90ZXN0cy92YXJsb2NzLmMKLSsrKyBlbGZ1dGlscy0wLjE2NC90ZXN0cy92YXJsb2NzLmMKLUBAIC0yNSw3ICsyNSw3IEBACi0gI2luY2x1ZGUgPGR3YXJmLmg+Ci0gI2luY2x1ZGUgPHN0ZGlvLmg+Ci0gI2luY2x1ZGUgPHN0ZGxpYi5oPgotLSNpbmNsdWRlIDxlcnJvci5oPgotKyNpbmNsdWRlIDxlcnIuaD4KLSAjaW5jbHVkZSA8c3RyaW5nLmg+Ci0gI2luY2x1ZGUgPHN5cy90eXBlcy5oPgotICNpbmNsdWRlIDxzeXMvc3RhdC5oPgotSW5kZXg6IGVsZnV0aWxzLTAuMTY0L3Rlc3RzL3Zkc29zeW1zLmMKLT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tLSBlbGZ1dGlscy0wLjE2NC5vcmlnL3Rlc3RzL3Zkc29zeW1zLmMKLSsrKyBlbGZ1dGlscy0wLjE2NC90ZXN0cy92ZHNvc3ltcy5jCi1AQCAtMTgsNyArMTgsNyBAQAotICNpbmNsdWRlIDxjb25maWcuaD4KLSAjaW5jbHVkZSA8YXNzZXJ0Lmg+Ci0gI2luY2x1ZGUgPGVycm5vLmg+Ci0tI2luY2x1ZGUgPGVycm9yLmg+Ci0rI2luY2x1ZGUgPGVyci5oPgotICNpbmNsdWRlIDxpbnR0eXBlcy5oPgotICNpbmNsdWRlIDxzdGRpby5oPgotICNpbmNsdWRlIDxzdHJpbmcuaD4KLUluZGV4OiBlbGZ1dGlscy0wLjE2NC9saWJlbGYvZWxmX2dldGFyc3ltLmMKLT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tLSBlbGZ1dGlscy0wLjE2NC5vcmlnL2xpYmVsZi9lbGZfZ2V0YXJzeW0uYwotKysrIGVsZnV0aWxzLTAuMTY0L2xpYmVsZi9lbGZfZ2V0YXJzeW0uYwotQEAgLTMwMiw3ICszMDIsNyBAQCBlbGZfZ2V0YXJzeW0gKEVsZiAqZWxmLCBzaXplX3QgKnB0cikKLSAJCWFyc3ltW2NudF0uYXNfb2ZmID0gKCp1MzIpW2NudF07Ci0gCi0gCSAgICAgIGFyc3ltW2NudF0uYXNfaGFzaCA9IF9kbF9lbGZfaGFzaCAoc3RyX2RhdGEpOwotLQkgICAgICBzdHJfZGF0YSA9IHJhd21lbWNociAoc3RyX2RhdGEsICdcMCcpICsgMTsKLSsJICAgICAgc3RyX2RhdGEgPSBtZW1jaHIgKHN0cl9kYXRhLCAnXDAnLCBTSVpFX01BWCkgKyAxOwotIAkgICAgfQotIAotIAkgIC8qIEF0IHRoZSBlbmQgYSBzcGVjaWFsIGVudHJ5LiAgKi8KZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZWxmdXRpbHMvZWxmdXRpbHMtMC4xNjQvdWNsaWJjLXN1cHBvcnQucGF0Y2ggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2VsZnV0aWxzL2VsZnV0aWxzLTAuMTY0L3VjbGliYy1zdXBwb3J0LnBhdGNoCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5NjZiNzBmLi4wMDAwMDAwCi0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZWxmdXRpbHMvZWxmdXRpbHMtMC4xNjQvdWNsaWJjLXN1cHBvcnQucGF0Y2gKKysrIC9kZXYvbnVsbApAQCAtMSwxMjkgKzAsMCBAQAotRnJvbSAzZGFlYzJkZDExYTA0OTU1Zjk1ZThmNjVhNDg4MjAxMDNkODRkYmVjIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQotRnJvbTogSnVubGluZyBaaGVuZyA8emhlbmdqdW5saW5nQGh1YXdlaS5jb20+Ci1EYXRlOiBUaHUsIDkgQXByIDIwMTUgMTI6MTI6NDkgKzAwMDAKLVN1YmplY3Q6IFtQQVRDSF0gdWNsaWJjIHN1cHBvcnQgZm9yIGVsZnV0aWxzIDAuMTYxCi0KLW9uIHVjbGliYyBzeXN0ZW1zIGxpYmludGwgYW5kIGxpYnVhcmdwIGFyZSBzZXBhcmF0ZSBmcm9tIGxpYmMuCi1zbyB0aGV5IG5lZWQgdG8gYmUgc3BlY2lmaWVkIG9uIGNvbW1hbmRsaW5lIHdoZW4gd2UgdXNlIHByb3h5LWxpYmludGwKLXRoZW4gbGliaW50bCBpcyBhIHN0YXRpYyBhcmNoaXZlIHNvIGl0IHNob3VsZCBiZSBsaXN0ZWQgbGFzdCBzaW5jZQotZWxmdXRpbHMgZG9lcyBub3QgcmVzcGVjdCBkaXNhYmxlLW5scyB3ZSBuZWVkIHRvIGxpbmsgaW4gbGliaW50bAotCi1XZSBhZGQgYSBuZXcgb3B0aW9uIC0tZW5hYmxlLXVjbGliYyB3aGljaCB3aWxsIGJlIHVzZWQgdG8gY29udHJvbAotdGhlIHVjbGliYyBzcGVjaWZpYyBjb25maWd1cmF0aW9ucyBkdXJpbmcgYnVpbGQuCi0KLVVwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbdWNsaWJjIHNwZWNpZmljXQotCi1TaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW0+Ci1TaWduZWQtb2ZmLWJ5OiBKdW5saW5nIFpoZW5nIDx6aGVuZ2p1bmxpbmdAaHVhd2VpLmNvbT4KLVtKdW5saW5nIFpoZW5nOgotIC0gYWRqdXN0IGNvbnRleHQKLV0KLS0tLQotIGNvbmZpZ3VyZS5hYyAgICAgICB8IDggKysrKysrKysKLSBsaWJjcHUvTWFrZWZpbGUuYW0gfCA0ICsrKysKLSBsaWJkdy9NYWtlZmlsZS5hbSAgfCA3ICsrKysrKy0KLSBsaWJlbGYvTWFrZWZpbGUuYW0gfCA1ICsrKysrCi0gNCBmaWxlcyBjaGFuZ2VkLCAyMyBpbnNlcnRpb25zKCspLCAxIGRlbGV0aW9uKC0pCi0KLUluZGV4OiBlbGZ1dGlscy0wLjE2NC9jb25maWd1cmUuYWMKLT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tLSBlbGZ1dGlscy0wLjE2NC5vcmlnL2NvbmZpZ3VyZS5hYwotKysrIGVsZnV0aWxzLTAuMTY0L2NvbmZpZ3VyZS5hYwotQEAgLTY2LDYgKzY2LDE0IEBAIEFTX0lGKFt0ZXN0ICIkdXNlX2xvY2tzIiA9IHllc10sCi0gCi0gQUhfVEVNUExBVEUoW1VTRV9MT0NLU10sIFtEZWZpbmVkIGlmIGxpYnJhcmllcyBzaG91bGQgYmUgdGhyZWFkLXNhZmUuXSkKLSAKLStBQ19BUkdfRU5BQkxFKFt1Y2xpYmNdLAotK0FTX0hFTFBfU1RSSU5HKFstLWVuYWJsZS11Y2xpYmNdLCBbVXNlIHVjbGliYyBmb3Igc3lzdGVtIGxpYnJhcmllc10pLAotK3VzZV91Y2xpYmM9eWVzLCB1c2VfdWNsaWJjPW5vKQotK0FNX0NPTkRJVElPTkFMKFVTRV9VQ0xJQkMsIHRlc3QgIiR1c2VfdWNsaWJjIiA9IHllcykKLStBU19JRihbdGVzdCAiJHVzZV91Y2xpYmMiID0geWVzXSwgW0FDX0RFRklORShVU0VfVUNMSUJDKV0pCi0rCi0rQUhfVEVNUExBVEUoW1VTRV9VQ0xJQkNdLCBbRGVmaW5lZCBpZiB1Y2xpYmMgbGlicmFyaWVzIGFyZSB1c2VkLl0pCi0rCi0gQUNfUFJPR19DQwotIEFDX1BST0dfUkFOTElCCi0gQUNfUFJPR19ZQUNDCi1AQCAtMjkxLDE4ICsyOTksMTMgQEAgQUNfTElOS19JRkVMU0UoCi0gKQotIAotIGRubCBJZiBvdXIgbGliYyBkb2Vzbid0IHByb3ZpZGUgYXJncCwgdGhlbiB0ZXN0IGZvciBsaWJhcmdwCi0taWYgdGVzdCAiJGxpYmNfaGFzX2FyZ3AiID0gImZhbHNlIiA7IHRoZW4KLS0JQUNfTVNHX1dBUk4oImxpYmMgZG9lcyBub3QgaGF2ZSBhcmdwIikKLS0JQUNfQ0hFQ0tfTElCKFthcmdwXSwgW2FyZ3BfcGFyc2VdLCBbaGF2ZV9hcmdwPSJ0cnVlIl0sIFtoYXZlX2FyZ3A9ImZhbHNlIl0pCi0tCi0tCWlmIHRlc3QgIiRoYXZlX2FyZ3AiID0gImZhbHNlIjsgdGhlbgotLQkJQUNfTVNHX0VSUk9SKCJubyBsaWJhcmdwIGZvdW5kIikKLS0JZWxzZQotLQkJYXJncF9MREFERD0iLWxhcmdwIgotLQlmaQotLWVsc2UKLS0JYXJncF9MREFERD0iIgotLWZpCi0rQVNfSUYoW3Rlc3QgIngkbGliY19oYXNfYXJncCIgPSAieGZhbHNlIl0sCi0rCVtBQ19NU0dfV0FSTigibGliYyBkb2VzIG5vdCBoYXZlIGFyZ3AiKQotKwlBQ19DSEVDS19MSUIoW2FyZ3BdLCBbYXJncF9wYXJzZV0sIFtoYXZlX2FyZ3A9InRydWUiIGFyZ3BfTERBREQ9Ii1sYXJncCJdLCBbaGF2ZV9hcmdwPSJmYWxzZSJdKV0sIFthcmdwX0xEQUREPSIiXSkKLSsKLStBU19JRihbdGVzdCAieCRsaWJjX2hhc19hcmdwIiA9ICJ4ZmFsc2UiIC1hICJ4JGhhdmVfYXJncCIgPSAieGZhbHNlIl0sCi0rCUFDX0NIRUNLX0xJQihbdWFyZ3BdLCBbYXJncF9wYXJzZV0sIFtoYXZlX3VhcmdwPSJ0cnVlIiBhcmdwX0xEQUREPSItbHVhcmdwIl0sIFtoYXZlX3VhcmdwPSJmYWxzZSJdKV0sIFthcmdwX0xEQUREPSIiXSkKLSsKLSBBQ19TVUJTVChbYXJncF9MREFERF0pCi0gCi0gZG5sIFRoZSBkaXJlY3RvcmllcyB3aXRoIGNvbnRlbnQuCi1JbmRleDogZWxmdXRpbHMtMC4xNjQvbGliY3B1L01ha2VmaWxlLmFtCi09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLS0gZWxmdXRpbHMtMC4xNjQub3JpZy9saWJjcHUvTWFrZWZpbGUuYW0KLSsrKyBlbGZ1dGlscy0wLjE2NC9saWJjcHUvTWFrZWZpbGUuYW0KLUBAIC04MCw2ICs4MCwxMCBAQCBpMzg2X3BhcnNlX0NGTEFHUyA9IC1ETk1ORVM9ImB3YyAtbCA8IGkzCi0gaTM4Nl9sZXgubzogaTM4Nl9wYXJzZS5oCi0gaTM4Nl9nZW5kaXNfTERBREQgPSAkKGxpYmV1KSAtbG0KLSAKLStpZiBVU0VfVUNMSUJDCi0raTM4Nl9nZW5kaXNfTERBREQgKz0gLWxpbnRsCi0rZW5kaWYKLSsKLSBpMzg2X3BhcnNlLmg6IGkzODZfcGFyc2UuYyA7Ci0gCi0gRVhUUkFfRElTVCA9IGRlZnMvaTM4NgotSW5kZXg6IGVsZnV0aWxzLTAuMTY0L2xpYmR3L01ha2VmaWxlLmFtCi09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLS0gZWxmdXRpbHMtMC4xNjQub3JpZy9saWJkdy9NYWtlZmlsZS5hbQotKysrIGVsZnV0aWxzLTAuMTY0L2xpYmR3L01ha2VmaWxlLmFtCi1AQCAtMTAyLDYgKzEwMiwxMSBAQCBlbmRpZgotIGxpYmR3X3BpY19hX1NPVVJDRVMgPQotIGFtX2xpYmR3X3BpY19hX09CSkVDVFMgPSAkKGxpYmR3X2FfU09VUkNFUzouYz0ub3MpCi0gCi0rbGliZHdfc29fTERMSUJTID0KLStpZiBVU0VfVUNMSUJDCi0rbGliZHdfc29fTERMSUJTICs9IC1saW50bAotK2VuZGlmCi0rCi0gbGliZHdfc29fU09VUkNFUyA9Ci0gbGliZHcuc28kKEVYRUVYVCk6ICQoc3JjZGlyKS9saWJkdy5tYXAgbGliZHdfcGljLmEgLi4vbGliZHdlbGYvbGliZHdlbGZfcGljLmEgXAotIAkgIC4uL2xpYmR3ZmwvbGliZHdmbF9waWMuYSAuLi9saWJlYmwvbGliZWJsLmEgXAotQEAgLTExMiw3ICsxMTcsNyBAQCBsaWJkdy5zbyQoRVhFRVhUKTogJChzcmNkaXIpL2xpYmR3Lm1hcCBsCi0gCQktV2wsLS1lbmFibGUtbmV3LWR0YWdzLC1ycGF0aCwkKHBrZ2xpYmRpcikgXAotIAkJLVdsLC0tdmVyc2lvbi1zY3JpcHQsJDwsLS1uby11bmRlZmluZWQgXAotIAkJLVdsLC0td2hvbGUtYXJjaGl2ZSAkKGZpbHRlci1vdXQgJDwsJF4pIC1XbCwtLW5vLXdob2xlLWFyY2hpdmVcCi0tCQktbGRsICQoYXJncF9MREFERCkgJCh6aXBfTElCUykKLSsJCS1sZGwgJChhcmdwX0xEQUREKSAkKHppcF9MSUJTKSAkKGxpYmR3X3NvX0xETElCUykKLSAJQCQodGV4dHJlbF9jaGVjaykKLSAJJChBTV9WX2F0KWxuIC1mcyAkQCAkQC4kKFZFUlNJT04pCi0gCi1JbmRleDogZWxmdXRpbHMtMC4xNjQvbGliZWxmL01ha2VmaWxlLmFtCi09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLS0gZWxmdXRpbHMtMC4xNjQub3JpZy9saWJlbGYvTWFrZWZpbGUuYW0KLSsrKyBlbGZ1dGlscy0wLjE2NC9saWJlbGYvTWFrZWZpbGUuYW0KLUBAIC05Myw3ICs5MywxMiBAQCBsaWJlbGZfYV9TT1VSQ0VTID0gZWxmX3ZlcnNpb24uYyBlbGZfaGFzCi0gbGliZWxmX3BpY19hX1NPVVJDRVMgPQotIGFtX2xpYmVsZl9waWNfYV9PQkpFQ1RTID0gJChsaWJlbGZfYV9TT1VSQ0VTOi5jPS5vcykKLSAKLSsKLSBsaWJlbGZfc29fTERMSUJTID0KLStpZiBVU0VfVUNMSUJDCi0rbGliZWxmX3NvX0xETElCUyArPSAtbGludGwKLStlbmRpZgotKwotIGlmIFVTRV9MT0NLUwotIGxpYmVsZl9zb19MRExJQlMgKz0gLWxwdGhyZWFkCi0gZW5kaWYKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZWxmdXRpbHMvZWxmdXRpbHMtMC4xNjQvMDAwMS1JZ25vcmUtZGlmZmVyZW5jZXMtYmV0d2Vlbi1taXBzLW1hY2hpbmUtaWRlbnRpZmllcnMucGF0Y2ggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2VsZnV0aWxzL2VsZnV0aWxzLTAuMTY2LzAwMDEtSWdub3JlLWRpZmZlcmVuY2VzLWJldHdlZW4tbWlwcy1tYWNoaW5lLWlkZW50aWZpZXJzLnBhdGNoCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2VsZnV0aWxzL2VsZnV0aWxzLTAuMTY0LzAwMDEtSWdub3JlLWRpZmZlcmVuY2VzLWJldHdlZW4tbWlwcy1tYWNoaW5lLWlkZW50aWZpZXJzLnBhdGNoCnJlbmFtZSB0byBpbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2VsZnV0aWxzL2VsZnV0aWxzLTAuMTY2LzAwMDEtSWdub3JlLWRpZmZlcmVuY2VzLWJldHdlZW4tbWlwcy1tYWNoaW5lLWlkZW50aWZpZXJzLnBhdGNoCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2VsZnV0aWxzL2VsZnV0aWxzLTAuMTY2LzAwMDEtYnVpbGQtUHJvdmlkZS1hbHRlcm5hdGl2ZXMtZm9yLWdsaWJjLWFzc3VtcHRpb25zLWhlbC5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZWxmdXRpbHMvZWxmdXRpbHMtMC4xNjYvMDAwMS1idWlsZC1Qcm92aWRlLWFsdGVybmF0aXZlcy1mb3ItZ2xpYmMtYXNzdW1wdGlvbnMtaGVsLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM4YjMxZjYKLS0tIC9kZXYvbnVsbAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2VsZnV0aWxzL2VsZnV0aWxzLTAuMTY2LzAwMDEtYnVpbGQtUHJvdmlkZS1hbHRlcm5hdGl2ZXMtZm9yLWdsaWJjLWFzc3VtcHRpb25zLWhlbC5wYXRjaApAQCAtMCwwICsxLDExNjMgQEAKK0Zyb20gNGIwZmU4MGIzOTUxZjA0NGMxYzFiMTRkMWQ3ZjVmMGI4YWI2NzUwNyBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CitEYXRlOiBUaHUsIDMxIERlYyAyMDE1IDA2OjM1OjM0ICswMDAwCitTdWJqZWN0OiBbUEFUQ0hdIGJ1aWxkOiBQcm92aWRlIGFsdGVybmF0aXZlcyBmb3IgZ2xpYmMgYXNzdW1wdGlvbnMgaGVscHMKKyBjb21waWxpbmcgaXQgb24gbXVzbAorCitTaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorLS0tCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworIE1ha2VmaWxlLmFtICAgICAgICAgICAgICAgICAgICAgIHwgIDIgKy0KKyBsaWIvY29sb3IuYyAgICAgICAgICAgICAgICAgICAgICB8ICAyICstCisgbGliL2NyYzMyX2ZpbGUuYyAgICAgICAgICAgICAgICAgfCAgNCArKystCisgbGliL2ZpeGVkc2l6ZWhhc2guaCAgICAgICAgICAgICAgfCAgNCArKy0tCisgbGliL3N5c3RlbS5oICAgICAgICAgICAgICAgICAgICAgfCAxMSArKysrKysrKysrKworIGxpYi94bWFsbG9jLmMgICAgICAgICAgICAgICAgICAgIHwgIDIgKy0KKyBsaWJhc20vYXNtX2VuZC5jICAgICAgICAgICAgICAgICB8ICAyICstCisgbGliYXNtL2FzbV9uZXdzY24uYyAgICAgICAgICAgICAgfCAgMiArLQorIGxpYmNwdS9pMzg2X2dlbmRpcy5jICAgICAgICAgICAgIHwgIDIgKy0KKyBsaWJjcHUvaTM4Nl9sZXguYyAgICAgICAgICAgICAgICB8ICAyICstCisgbGliY3B1L2kzODZfcGFyc2UuYyAgICAgICAgICAgICAgfCAgMiArLQorIGxpYmR3L01ha2VmaWxlLmFtICAgICAgICAgICAgICAgIHwgIDIgKy0KKyBsaWJkdy9saWJkd19hbGxvYy5jICAgICAgICAgICAgICB8ICAzICsrLQorIGxpYmR3ZmwvTWFrZWZpbGUuYW0gICAgICAgICAgICAgIHwgIDIgKysKKyBsaWJkd2ZsL2R3ZmxfYnVpbGRfaWRfZmluZF9lbGYuYyB8ICAzICsrLQorIGxpYmR3ZmwvZHdmbF9lcnJvci5jICAgICAgICAgICAgIHwgIDQgKysrLQorIGxpYmR3ZmwvZHdmbF9tb2R1bGVfZ2V0ZHdhcmYuYyAgIHwgIDEgKworIGxpYmR3ZmwvZmluZC1kZWJ1Z2luZm8uYyAgICAgICAgIHwgIDIgKy0KKyBsaWJkd2ZsL2xpYmR3ZmxfY3JjMzJfZmlsZS5jICAgICB8IDEwICsrKysrKysrKysKKyBsaWJkd2ZsL2xpbnV4LWtlcm5lbC1tb2R1bGVzLmMgICB8ICAxICsKKyBsaWJlYmwvZWJsb3BlbmJhY2tlbmQuYyAgICAgICAgICB8ICAyICstCisgbGliZWJsL2VibHdzdHJ0YWIuYyAgICAgICAgICAgICAgfCAgMiArLQorIGxpYmVsZi9lbGYuaCAgICAgICAgICAgICAgICAgICAgIHwgIDkgKysrKysrLS0tCisgbGliZWxmL2xpYmVsZi5oICAgICAgICAgICAgICAgICAgfCAgMSArCisgbGliZWxmL2xpYmVsZlAuaCAgICAgICAgICAgICAgICAgfCAgMSArCisgc3JjL2FkZHIybGluZS5jICAgICAgICAgICAgICAgICAgfCAgMiArLQorIHNyYy9hci5jICAgICAgICAgICAgICAgICAgICAgICAgIHwgIDIgKy0KKyBzcmMvYXJsaWIuYyAgICAgICAgICAgICAgICAgICAgICB8ICAyICstCisgc3JjL2FybGliMi5jICAgICAgICAgICAgICAgICAgICAgfCAgMiArLQorIHNyYy9lbGZjbXAuYyAgICAgICAgICAgICAgICAgICAgIHwgIDIgKy0KKyBzcmMvZWxmbGludC5jICAgICAgICAgICAgICAgICAgICB8ICAyICstCisgc3JjL2ZpbmR0ZXh0cmVsLmMgICAgICAgICAgICAgICAgfCAgMiArLQorIHNyYy9pMzg2X2xkLmMgICAgICAgICAgICAgICAgICAgIHwgIDIgKy0KKyBzcmMvbGQuYyAgICAgICAgICAgICAgICAgICAgICAgICB8ICAyICstCisgc3JjL2xkZ2VuZXJpYy5jICAgICAgICAgICAgICAgICAgfCAgMiArLQorIHNyYy9sZGxleC5jICAgICAgICAgICAgICAgICAgICAgIHwgIDIgKy0KKyBzcmMvbGRzY3JpcHQuYyAgICAgICAgICAgICAgICAgICB8ICAyICstCisgc3JjL25tLmMgICAgICAgICAgICAgICAgICAgICAgICAgfCAgMiArLQorIHNyYy9vYmpkdW1wLmMgICAgICAgICAgICAgICAgICAgIHwgIDIgKy0KKyBzcmMvcmFubGliLmMgICAgICAgICAgICAgICAgICAgICB8ICAyICstCisgc3JjL3JlYWRlbGYuYyAgICAgICAgICAgICAgICAgICAgfCAgMiArLQorIHNyYy9zaXplLmMgICAgICAgICAgICAgICAgICAgICAgIHwgIDIgKy0KKyBzcmMvc3RhY2suYyAgICAgICAgICAgICAgICAgICAgICB8ICAyICstCisgc3JjL3N0cmluZ3MuYyAgICAgICAgICAgICAgICAgICAgfCAgMiArLQorIHNyYy9zdHJpcC5jICAgICAgICAgICAgICAgICAgICAgIHwgIDIgKy0KKyBzcmMvdW5zdHJpcC5jICAgICAgICAgICAgICAgICAgICB8ICAyICstCisgdGVzdHMvYWRkcnNjb3Blcy5jICAgICAgICAgICAgICAgfCAgMiArLQorIHRlc3RzL2FsbHJlZ3MuYyAgICAgICAgICAgICAgICAgIHwgIDIgKy0KKyB0ZXN0cy9iYWNrdHJhY2UtZGF0YS5jICAgICAgICAgICB8ICAyICstCisgdGVzdHMvYmFja3RyYWNlLWR3YXJmLmMgICAgICAgICAgfCAgMiArLQorIHRlc3RzL2JhY2t0cmFjZS5jICAgICAgICAgICAgICAgIHwgIDIgKy0KKyB0ZXN0cy9idWlsZGlkLmMgICAgICAgICAgICAgICAgICB8ICAyICstCisgdGVzdHMvZGVidWdhbHRsaW5rLmMgICAgICAgICAgICAgfCAgMiArLQorIHRlc3RzL2RlYnVnbGluay5jICAgICAgICAgICAgICAgIHwgIDIgKy0KKyB0ZXN0cy9kZWxldGVkLmMgICAgICAgICAgICAgICAgICB8ICAyICstCisgdGVzdHMvZHdmbC1hZGRyLXNlY3QuYyAgICAgICAgICAgfCAgMiArLQorIHRlc3RzL2R3ZmwtYnVnLWFkZHItb3ZlcmZsb3cuYyAgIHwgIDIgKy0KKyB0ZXN0cy9kd2ZsLWJ1Zy1mZC1sZWFrLmMgICAgICAgICB8ICAyICstCisgdGVzdHMvZHdmbC1idWctZ2V0bW9kdWxlcy5jICAgICAgfCAgMiArLQorIHRlc3RzL2R3ZmwtcmVwb3J0LWVsZi1hbGlnbi5jICAgIHwgIDIgKy0KKyB0ZXN0cy9kd2ZsbGluZXMuYyAgICAgICAgICAgICAgICB8ICAyICstCisgdGVzdHMvZHdmbG1vZHRlc3QuYyAgICAgICAgICAgICAgfCAgMiArLQorIHRlc3RzL2R3ZmxzeW1zLmMgICAgICAgICAgICAgICAgIHwgIDIgKy0KKyB0ZXN0cy9lYXJseS1vZmZzY24uYyAgICAgICAgICAgICB8ICAyICstCisgdGVzdHMvZWNwLmMgICAgICAgICAgICAgICAgICAgICAgfCAgMiArLQorIHRlc3RzL2ZpbmQtcHJvbG9ndWVzLmMgICAgICAgICAgIHwgIDIgKy0KKyB0ZXN0cy9mdW5jcmV0dmFsLmMgICAgICAgICAgICAgICB8ICAyICstCisgdGVzdHMvZnVuY3Njb3Blcy5jICAgICAgICAgICAgICAgfCAgMiArLQorIHRlc3RzL2dldHNyY19kaWUuYyAgICAgICAgICAgICAgIHwgIDIgKy0KKyB0ZXN0cy9saW5lMmFkZHIuYyAgICAgICAgICAgICAgICB8ICAyICstCisgdGVzdHMvbG93X2hpZ2hfcGMuYyAgICAgICAgICAgICAgfCAgMiArLQorIHRlc3RzL21kNS1zaGExLXRlc3QuYyAgICAgICAgICAgIHwgIDIgKy0KKyB0ZXN0cy9yZHdybW1hcC5jICAgICAgICAgICAgICAgICB8ICAyICstCisgdGVzdHMvc2FyaWR4LmMgICAgICAgICAgICAgICAgICAgfCAgMiArLQorIHRlc3RzL3NlY3Rpb25kdW1wLmMgICAgICAgICAgICAgIHwgIDIgKy0KKyB0ZXN0cy92YXJsb2NzLmMgICAgICAgICAgICAgICAgICB8ICAyICstCisgdGVzdHMvdmRzb3N5bXMuYyAgICAgICAgICAgICAgICAgfCAgMiArLQorIDc3IGZpbGVzIGNoYW5nZWQsIDEwOSBpbnNlcnRpb25zKCspLCA3MyBkZWxldGlvbnMoLSkKKworSW5kZXg6IGVsZnV0aWxzLTAuMTY2L01ha2VmaWxlLmFtCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZWxmdXRpbHMtMC4xNjYub3JpZy9NYWtlZmlsZS5hbQorKysrIGVsZnV0aWxzLTAuMTY2L01ha2VmaWxlLmFtCitAQCAtMjgsNyArMjgsNyBAQCBwa2dpbmNsdWRlX0hFQURFUlMgPSB2ZXJzaW9uLmgKKyAKKyAjIEFkZCBkb2MgYmFjayB3aGVuIHdlIGhhdmUgc29tZSByZWFsIGNvbnRlbnQuCisgU1VCRElSUyA9IGNvbmZpZyBtNCBsaWIgbGliZWxmIGxpYmVibCBsaWJkd2VsZiBsaWJkd2ZsIGxpYmR3IGxpYmNwdSBsaWJhc20gXAorLQkgIGJhY2tlbmRzIHNyYyBwbyB0ZXN0cworKwkgIGJhY2tlbmRzIHBvIHRlc3RzCisgCisgRVhUUkFfRElTVCA9IGVsZnV0aWxzLnNwZWMgR1BHLUtFWSBOT1RFUyBDT05UUklCVVRJTkcgXAorIAkgICAgIENPUFlJTkcgQ09QWUlORy1HUExWMiBDT1BZSU5HLUxHUExWMworSW5kZXg6IGVsZnV0aWxzLTAuMTY2L2xpYi9jb2xvci5jCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZWxmdXRpbHMtMC4xNjYub3JpZy9saWIvY29sb3IuYworKysrIGVsZnV0aWxzLTAuMTY2L2xpYi9jb2xvci5jCitAQCAtMzIsNyArMzIsNyBAQAorICNlbmRpZgorIAorICNpbmNsdWRlIDxhcmdwLmg+CistI2luY2x1ZGUgPGVycm9yLmg+CisrI2luY2x1ZGUgPGVyci5oPgorICNpbmNsdWRlIDxsaWJpbnRsLmg+CisgI2luY2x1ZGUgPHN0ZGxpYi5oPgorICNpbmNsdWRlIDxzdHJpbmcuaD4KK0luZGV4OiBlbGZ1dGlscy0wLjE2Ni9saWIvY3JjMzJfZmlsZS5jCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZWxmdXRpbHMtMC4xNjYub3JpZy9saWIvY3JjMzJfZmlsZS5jCisrKysgZWxmdXRpbHMtMC4xNjYvbGliL2NyYzMyX2ZpbGUuYworQEAgLTMwLDEyICszMCwxNCBAQAorICMgaW5jbHVkZSA8Y29uZmlnLmg+CisgI2VuZGlmCisgCistI2luY2x1ZGUgInN5c3RlbS5oIgorICNpbmNsdWRlIDxlcnJuby5oPgorICNpbmNsdWRlIDx1bmlzdGQuaD4KKysjaW5jbHVkZSA8c3RkaW50Lmg+CisgI2luY2x1ZGUgPHN5cy9zdGF0Lmg+CisgI2luY2x1ZGUgPHN5cy9tbWFuLmg+CisgCisrI2luY2x1ZGUgInN5c3RlbS5oIgorKworIGludAorIGNyYzMyX2ZpbGUgKGludCBmZCwgdWludDMyX3QgKnJlc3ApCisgeworSW5kZXg6IGVsZnV0aWxzLTAuMTY2L2xpYi9maXhlZHNpemVoYXNoLmgKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBlbGZ1dGlscy0wLjE2Ni5vcmlnL2xpYi9maXhlZHNpemVoYXNoLmgKKysrKyBlbGZ1dGlscy0wLjE2Ni9saWIvZml4ZWRzaXplaGFzaC5oCitAQCAtMzAsMTIgKzMwLDEyIEBACisgI2luY2x1ZGUgPGVycm5vLmg+CisgI2luY2x1ZGUgPHN0ZGxpYi5oPgorICNpbmNsdWRlIDxzdHJpbmcuaD4KKy0jaW5jbHVkZSA8c3lzL2NkZWZzLmg+CisgI2luY2x1ZGUgPHN5cy9wYXJhbS5oPgorIAorICNpbmNsdWRlIDxzeXN0ZW0uaD4KKyAKKy0jZGVmaW5lIENPTkNBVCh0MSx0MikgX19DT05DQVQgKHQxLHQyKQorKyNkZWZpbmUgQ09OQ0FUMSh4LHkpIHgjI3kKKysjZGVmaW5lIENPTkNBVCh4LHkpIENPTkNBVDEoeCx5KQorIAorIC8qIEJlZm9yZSBpbmNsdWRpbmcgdGhpcyBmaWxlIHRoZSBmb2xsb3dpbmcgbWFjcm9zIG11c3QgYmUgZGVmaW5lZDoKKyAKK0luZGV4OiBlbGZ1dGlscy0wLjE2Ni9saWIvc3lzdGVtLmgKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBlbGZ1dGlscy0wLjE2Ni5vcmlnL2xpYi9zeXN0ZW0uaAorKysrIGVsZnV0aWxzLTAuMTY2L2xpYi9zeXN0ZW0uaAorQEAgLTQ5LDYgKzQ5LDE2IEBACisgI2Vsc2UKKyAjIGVycm9yICJVbmtub3duIGJ5dGUgb3JkZXIiCisgI2VuZGlmCisrI2lmbmRlZiBURU1QX0ZBSUxVUkVfUkVUUlkKKysjZGVmaW5lIFRFTVBfRkFJTFVSRV9SRVRSWShleHByZXNzaW9uKSBcCisrICAoX19leHRlbnNpb25fXwkJCQkJCQkgICAgICBcCisrICAgICh7IGxvbmcgaW50IF9fcmVzdWx0OwkJCQkJCSAgICAgIFwKKysgICAgICAgZG8gX19yZXN1bHQgPSAobG9uZyBpbnQpIChleHByZXNzaW9uKTsJCQkJICAgICAgXAorKyAgICAgICB3aGlsZSAoX19yZXN1bHQgPT0gLTFMICYmIGVycm5vID09IEVJTlRSKTsJCQkgICAgICBcCisrICAgICAgIF9fcmVzdWx0OyB9KSkKKysjZW5kaWYKKysKKysjZGVmaW5lIGVycm9yKHN0YXR1cywgZXJybm8sIC4uLikgZXJyKHN0YXR1cywgX19WQV9BUkdTX18pCisgCisgZXh0ZXJuIHZvaWQgKnhtYWxsb2MgKHNpemVfdCkgX19hdHRyaWJ1dGVfXyAoKF9fbWFsbG9jX18pKTsKKyBleHRlcm4gdm9pZCAqeGNhbGxvYyAoc2l6ZV90LCBzaXplX3QpIF9fYXR0cmlidXRlX18gKChfX21hbGxvY19fKSk7CitJbmRleDogZWxmdXRpbHMtMC4xNjYvbGliL3htYWxsb2MuYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGVsZnV0aWxzLTAuMTY2Lm9yaWcvbGliL3htYWxsb2MuYworKysrIGVsZnV0aWxzLTAuMTY2L2xpYi94bWFsbG9jLmMKK0BAIC0zMCw3ICszMCw3IEBACisgIyBpbmNsdWRlIDxjb25maWcuaD4KKyAjZW5kaWYKKyAKKy0jaW5jbHVkZSA8ZXJyb3IuaD4KKysjaW5jbHVkZSA8ZXJyLmg+CisgI2luY2x1ZGUgPGxpYmludGwuaD4KKyAjaW5jbHVkZSA8c3RkZGVmLmg+CisgI2luY2x1ZGUgPHN0ZGxpYi5oPgorSW5kZXg6IGVsZnV0aWxzLTAuMTY2L2xpYmFzbS9hc21fZW5kLmMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBlbGZ1dGlscy0wLjE2Ni5vcmlnL2xpYmFzbS9hc21fZW5kLmMKKysrKyBlbGZ1dGlscy0wLjE2Ni9saWJhc20vYXNtX2VuZC5jCitAQCAtMzIsNyArMzIsNyBAQAorICNlbmRpZgorIAorICNpbmNsdWRlIDxhc3NlcnQuaD4KKy0jaW5jbHVkZSA8ZXJyb3IuaD4KKysjaW5jbHVkZSA8ZXJyLmg+CisgI2luY2x1ZGUgPGxpYmludGwuaD4KKyAjaW5jbHVkZSA8c3RkaW8uaD4KKyAjaW5jbHVkZSA8c3RkbGliLmg+CitJbmRleDogZWxmdXRpbHMtMC4xNjYvbGliYXNtL2FzbV9uZXdzY24uYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGVsZnV0aWxzLTAuMTY2Lm9yaWcvbGliYXNtL2FzbV9uZXdzY24uYworKysrIGVsZnV0aWxzLTAuMTY2L2xpYmFzbS9hc21fbmV3c2NuLmMKK0BAIC0zMiw3ICszMiw3IEBACisgI2VuZGlmCisgCisgI2luY2x1ZGUgPGFzc2VydC5oPgorLSNpbmNsdWRlIDxlcnJvci5oPgorKyNpbmNsdWRlIDxlcnIuaD4KKyAjaW5jbHVkZSA8bGliaW50bC5oPgorICNpbmNsdWRlIDxzdGRsaWIuaD4KKyAjaW5jbHVkZSA8c3RyaW5nLmg+CitJbmRleDogZWxmdXRpbHMtMC4xNjYvbGliY3B1L2kzODZfZ2VuZGlzLmMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBlbGZ1dGlscy0wLjE2Ni5vcmlnL2xpYmNwdS9pMzg2X2dlbmRpcy5jCisrKysgZWxmdXRpbHMtMC4xNjYvbGliY3B1L2kzODZfZ2VuZGlzLmMKK0BAIC0zMSw3ICszMSw3IEBACisgIyBpbmNsdWRlIDxjb25maWcuaD4KKyAjZW5kaWYKKyAKKy0jaW5jbHVkZSA8ZXJyb3IuaD4KKysjaW5jbHVkZSA8ZXJyLmg+CisgI2luY2x1ZGUgPGVycm5vLmg+CisgI2luY2x1ZGUgPHN0ZGlvLmg+CisgI2luY2x1ZGUgPHN0ZGxpYi5oPgorSW5kZXg6IGVsZnV0aWxzLTAuMTY2L2xpYmNwdS9pMzg2X2xleC5jCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZWxmdXRpbHMtMC4xNjYub3JpZy9saWJjcHUvaTM4Nl9sZXguYworKysrIGVsZnV0aWxzLTAuMTY2L2xpYmNwdS9pMzg2X2xleC5jCitAQCAtNTc4LDcgKzU3OCw3IEBAIGNoYXIgKmkzODZfdGV4dDsKKyAjZW5kaWYKKyAKKyAjaW5jbHVkZSA8Y3R5cGUuaD4KKy0jaW5jbHVkZSA8ZXJyb3IuaD4KKysjaW5jbHVkZSA8ZXJyLmg+CisgI2luY2x1ZGUgPGxpYmludGwuaD4KKyAKKyAjaW5jbHVkZSA8c3lzdGVtLmg+CitJbmRleDogZWxmdXRpbHMtMC4xNjYvbGliY3B1L2kzODZfcGFyc2UuYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGVsZnV0aWxzLTAuMTY2Lm9yaWcvbGliY3B1L2kzODZfcGFyc2UuYworKysrIGVsZnV0aWxzLTAuMTY2L2xpYmNwdS9pMzg2X3BhcnNlLmMKK0BAIC0xMDcsNyArMTA3LDcgQEAKKyAjaW5jbHVkZSA8YXNzZXJ0Lmg+CisgI2luY2x1ZGUgPGN0eXBlLmg+CisgI2luY2x1ZGUgPGVycm5vLmg+CistI2luY2x1ZGUgPGVycm9yLmg+CisrI2luY2x1ZGUgPGVyci5oPgorICNpbmNsdWRlIDxpbnR0eXBlcy5oPgorICNpbmNsdWRlIDxsaWJpbnRsLmg+CisgI2luY2x1ZGUgPG1hdGguaD4KK0luZGV4OiBlbGZ1dGlscy0wLjE2Ni9saWJkdy9NYWtlZmlsZS5hbQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGVsZnV0aWxzLTAuMTY2Lm9yaWcvbGliZHcvTWFrZWZpbGUuYW0KKysrKyBlbGZ1dGlscy0wLjE2Ni9saWJkdy9NYWtlZmlsZS5hbQorQEAgLTExNyw3ICsxMTcsNyBAQCBsaWJkdy5zbyQoRVhFRVhUKTogJChzcmNkaXIpL2xpYmR3Lm1hcCBsCisgCQktV2wsLS1lbmFibGUtbmV3LWR0YWdzLC1ycGF0aCwkKHBrZ2xpYmRpcikgXAorIAkJLVdsLC0tdmVyc2lvbi1zY3JpcHQsJDwsLS1uby11bmRlZmluZWQgXAorIAkJLVdsLC0td2hvbGUtYXJjaGl2ZSAkKGZpbHRlci1vdXQgJDwsJF4pIC1XbCwtLW5vLXdob2xlLWFyY2hpdmVcCistCQktbGRsIC1seiAkKGFyZ3BfTERBREQpICQoemlwX0xJQlMpICQobGliZHdfc29fTERMSUJTKQorKwkJLWxkbCAtbHogJChhcmdwX0xEQUREKSAkKHppcF9MSUJTKSAkKGxpYmR3X3NvX0xETElCUykgLWxmdHMgLWxhcmdwCisgCUAkKHRleHRyZWxfY2hlY2spCisgCSQoQU1fVl9hdClsbiAtZnMgJEAgJEAuJChWRVJTSU9OKQorIAorSW5kZXg6IGVsZnV0aWxzLTAuMTY2L2xpYmR3L2xpYmR3X2FsbG9jLmMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBlbGZ1dGlscy0wLjE2Ni5vcmlnL2xpYmR3L2xpYmR3X2FsbG9jLmMKKysrKyBlbGZ1dGlscy0wLjE2Ni9saWJkdy9saWJkd19hbGxvYy5jCitAQCAtMzEsMTEgKzMxLDEyIEBACisgIyBpbmNsdWRlIDxjb25maWcuaD4KKyAjZW5kaWYKKyAKKy0jaW5jbHVkZSA8ZXJyb3IuaD4KKysjaW5jbHVkZSA8ZXJyLmg+CisgI2luY2x1ZGUgPGVycm5vLmg+CisgI2luY2x1ZGUgPHN0ZGxpYi5oPgorICNpbmNsdWRlIDxzeXMvcGFyYW0uaD4KKyAjaW5jbHVkZSAibGliZHdQLmgiCisrI2luY2x1ZGUgInN5c3RlbS5oIgorIAorIAorIHZvaWQgKgorSW5kZXg6IGVsZnV0aWxzLTAuMTY2L2xpYmR3ZmwvTWFrZWZpbGUuYW0KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBlbGZ1dGlscy0wLjE2Ni5vcmlnL2xpYmR3ZmwvTWFrZWZpbGUuYW0KKysrKyBlbGZ1dGlscy0wLjE2Ni9saWJkd2ZsL01ha2VmaWxlLmFtCitAQCAtODQsNiArODQsOCBAQCBsaWJlbGYgPSAuLi9saWJlbGYvbGliZWxmLnNvCisgbGliZWJsID0gLi4vbGliZWJsL2xpYmVibC5hCisgbGliZXUgPSAuLi9saWIvbGliZXUuYQorIAorK0xEQUREID0gLWxmdHMKKysKKyBsaWJkd2ZsX3BpY19hX1NPVVJDRVMgPQorIGFtX2xpYmR3ZmxfcGljX2FfT0JKRUNUUyA9ICQobGliZHdmbF9hX1NPVVJDRVM6LmM9Lm9zKQorIAorSW5kZXg6IGVsZnV0aWxzLTAuMTY2L2xpYmR3ZmwvZHdmbF9idWlsZF9pZF9maW5kX2VsZi5jCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZWxmdXRpbHMtMC4xNjYub3JpZy9saWJkd2ZsL2R3ZmxfYnVpbGRfaWRfZmluZF9lbGYuYworKysrIGVsZnV0aWxzLTAuMTY2L2xpYmR3ZmwvZHdmbF9idWlsZF9pZF9maW5kX2VsZi5jCitAQCAtMjcsNiArMjcsNyBAQAorICAgIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4gICovCisgCisgI2luY2x1ZGUgImxpYmR3ZmxQLmgiCisrI2luY2x1ZGUgInN5c3RlbS5oIgorICNpbmNsdWRlIDxpbnR0eXBlcy5oPgorICNpbmNsdWRlIDxmY250bC5oPgorICNpbmNsdWRlIDx1bmlzdGQuaD4KK0BAIC05NCw3ICs5NSw3IEBAIF9fbGliZHdmbF9vcGVuX2J5X2J1aWxkX2lkIChEd2ZsX01vZHVsZQorIAl7CisgCSAgaWYgKCpmaWxlX25hbWUgIT0gTlVMTCkKKyAJICAgIGZyZWUgKCpmaWxlX25hbWUpOworLQkgICpmaWxlX25hbWUgPSBjYW5vbmljYWxpemVfZmlsZV9uYW1lIChuYW1lKTsKKysJICAqZmlsZV9uYW1lID0gcmVhbHBhdGggKG5hbWUsIE5VTEwpOworIAkgIGlmICgqZmlsZV9uYW1lID09IE5VTEwpCisgCSAgICB7CisgCSAgICAgICpmaWxlX25hbWUgPSBuYW1lOworSW5kZXg6IGVsZnV0aWxzLTAuMTY2L2xpYmR3ZmwvZHdmbF9lcnJvci5jCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZWxmdXRpbHMtMC4xNjYub3JpZy9saWJkd2ZsL2R3ZmxfZXJyb3IuYworKysrIGVsZnV0aWxzLTAuMTY2L2xpYmR3ZmwvZHdmbF9lcnJvci5jCitAQCAtMTQwLDYgKzE0MCw3IEBAIF9fbGliZHdmbF9zZXRlcnJubyAoRHdmbF9FcnJvciBlcnJvcikKKyBjb25zdCBjaGFyICoKKyBkd2ZsX2Vycm1zZyAoaW50IGVycm9yKQorIHsKKysgIHN0YXRpYyBfX3RocmVhZCBjaGFyIHNbNjRdID0gIiI7CisgICBpZiAoZXJyb3IgPT0gMCB8fCBlcnJvciA9PSAtMSkKKyAgICAgeworICAgICAgIGludCBsYXN0X2Vycm9yID0gZ2xvYmFsX2Vycm9yOworQEAgLTE1NCw3ICsxNTUsOCBAQCBkd2ZsX2Vycm1zZyAoaW50IGVycm9yKQorICAgc3dpdGNoIChlcnJvciAmfiAweGZmZmYpCisgICAgIHsKKyAgICAgY2FzZSBPVEhFUl9FUlJPUiAoRVJSTk8pOgorLSAgICAgIHJldHVybiBzdHJlcnJvcl9yIChlcnJvciAmIDB4ZmZmZiwgImJhZCIsIDApOworKyAgICAgIHN0cmVycm9yX3IgKGVycm9yICYgMHhmZmZmLCBzLCBzaXplb2YocykpOworKyAgICAgIHJldHVybiBzOworICAgICBjYXNlIE9USEVSX0VSUk9SIChMSUJFTEYpOgorICAgICAgIHJldHVybiBlbGZfZXJybXNnIChlcnJvciAmIDB4ZmZmZik7CisgICAgIGNhc2UgT1RIRVJfRVJST1IgKExJQkRXKToKK0luZGV4OiBlbGZ1dGlscy0wLjE2Ni9saWJkd2ZsL2R3ZmxfbW9kdWxlX2dldGR3YXJmLmMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBlbGZ1dGlscy0wLjE2Ni5vcmlnL2xpYmR3ZmwvZHdmbF9tb2R1bGVfZ2V0ZHdhcmYuYworKysrIGVsZnV0aWxzLTAuMTY2L2xpYmR3ZmwvZHdmbF9tb2R1bGVfZ2V0ZHdhcmYuYworQEAgLTMxLDYgKzMxLDcgQEAKKyAjaW5jbHVkZSA8ZmNudGwuaD4KKyAjaW5jbHVkZSA8c3RyaW5nLmg+CisgI2luY2x1ZGUgPHVuaXN0ZC5oPgorKyNpbmNsdWRlICJzeXN0ZW0uaCIKKyAjaW5jbHVkZSAiLi4vbGliZHcvbGliZHdQLmgiCS8qIERXQVJGX0VfKiB2YWx1ZXMgYXJlIGhlcmUuICAqLworICNpbmNsdWRlICIuLi9saWJlbGYvbGliZWxmUC5oIgorIAorSW5kZXg6IGVsZnV0aWxzLTAuMTY2L2xpYmR3ZmwvZmluZC1kZWJ1Z2luZm8uYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGVsZnV0aWxzLTAuMTY2Lm9yaWcvbGliZHdmbC9maW5kLWRlYnVnaW5mby5jCisrKysgZWxmdXRpbHMtMC4xNjYvbGliZHdmbC9maW5kLWRlYnVnaW5mby5jCitAQCAtMzg1LDcgKzM4NSw3IEBAIGR3Zmxfc3RhbmRhcmRfZmluZF9kZWJ1Z2luZm8gKER3ZmxfTW9kdWwKKyAgICAgICAvKiBJZiBGSUxFX05BTUUgaXMgYSBzeW1saW5rLCB0aGUgZGVidWcgZmlsZSBtaWdodCBiZSBhc3NvY2lhdGVkCisgCSB3aXRoIHRoZSBzeW1saW5rIHRhcmdldCBuYW1lIGluc3RlYWQuICAqLworIAorLSAgICAgIGNoYXIgKmNhbm9uID0gY2Fub25pY2FsaXplX2ZpbGVfbmFtZSAoZmlsZV9uYW1lKTsKKysgICAgICBjaGFyICpjYW5vbiA9IHJlYWxwYXRoIChmaWxlX25hbWUsIE5VTEwpOworICAgICAgIGlmIChjYW5vbiAhPSBOVUxMICYmIHN0cmNtcCAoZmlsZV9uYW1lLCBjYW5vbikpCisgCWZkID0gZmluZF9kZWJ1Z2luZm9faW5fcGF0aCAobW9kLCBjYW5vbiwKKyAJCQkJICAgICBkZWJ1Z2xpbmtfZmlsZSwgZGVidWdsaW5rX2NyYywKK0luZGV4OiBlbGZ1dGlscy0wLjE2Ni9saWJkd2ZsL2xpYmR3ZmxfY3JjMzJfZmlsZS5jCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZWxmdXRpbHMtMC4xNjYub3JpZy9saWJkd2ZsL2xpYmR3ZmxfY3JjMzJfZmlsZS5jCisrKysgZWxmdXRpbHMtMC4xNjYvbGliZHdmbC9saWJkd2ZsX2NyYzMyX2ZpbGUuYworQEAgLTMxLDYgKzMxLDE2IEBACisgCisgI2RlZmluZSBjcmMzMl9maWxlIGF0dHJpYnV0ZV9oaWRkZW4gX19saWJkd2ZsX2NyYzMyX2ZpbGUKKyAjZGVmaW5lIGNyYzMyIF9fbGliZHdmbF9jcmMzMgorKworKyNpZm5kZWYgVEVNUF9GQUlMVVJFX1JFVFJZCisrI2RlZmluZSBURU1QX0ZBSUxVUkVfUkVUUlkoZXhwcmVzc2lvbikgXAorKyAgKF9fZXh0ZW5zaW9uX18JCQkJCQkJICAgICAgXAorKyAgICAoeyBsb25nIGludCBfX3Jlc3VsdDsJCQkJCQkgICAgICBcCisrICAgICAgIGRvIF9fcmVzdWx0ID0gKGxvbmcgaW50KSAoZXhwcmVzc2lvbik7CQkJCSAgICAgIFwKKysgICAgICAgd2hpbGUgKF9fcmVzdWx0ID09IC0xTCAmJiBlcnJubyA9PSBFSU5UUik7CQkJICAgICAgXAorKyAgICAgICBfX3Jlc3VsdDsgfSkpCisrI2VuZGlmCisrCisgI2RlZmluZSBMSUJfU1lTVEVNX0gJMQorICNpbmNsdWRlIDxsaWJkd2ZsUC5oPgorICNpbmNsdWRlICIuLi9saWIvY3JjMzJfZmlsZS5jIgorSW5kZXg6IGVsZnV0aWxzLTAuMTY2L2xpYmR3ZmwvbGludXgta2VybmVsLW1vZHVsZXMuYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGVsZnV0aWxzLTAuMTY2Lm9yaWcvbGliZHdmbC9saW51eC1rZXJuZWwtbW9kdWxlcy5jCisrKysgZWxmdXRpbHMtMC4xNjYvbGliZHdmbC9saW51eC1rZXJuZWwtbW9kdWxlcy5jCitAQCAtMzQsNiArMzQsNyBAQAorICNpbmNsdWRlIDxjb25maWcuaD4KKyAKKyAjaW5jbHVkZSAibGliZHdmbFAuaCIKKysjaW5jbHVkZSAic3lzdGVtLmgiCisgI2luY2x1ZGUgPGludHR5cGVzLmg+CisgI2luY2x1ZGUgPGVycm5vLmg+CisgI2luY2x1ZGUgPHN0ZGlvLmg+CitJbmRleDogZWxmdXRpbHMtMC4xNjYvbGliZWJsL2VibG9wZW5iYWNrZW5kLmMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBlbGZ1dGlscy0wLjE2Ni5vcmlnL2xpYmVibC9lYmxvcGVuYmFja2VuZC5jCisrKysgZWxmdXRpbHMtMC4xNjYvbGliZWJsL2VibG9wZW5iYWNrZW5kLmMKK0BAIC0zMiw3ICszMiw3IEBACisgCisgI2luY2x1ZGUgPGFzc2VydC5oPgorICNpbmNsdWRlIDxkbGZjbi5oPgorLSNpbmNsdWRlIDxlcnJvci5oPgorKyNpbmNsdWRlIDxlcnIuaD4KKyAjaW5jbHVkZSA8bGliZWxmUC5oPgorICNpbmNsdWRlIDxkd2FyZi5oPgorICNpbmNsdWRlIDxzdGRsaWIuaD4KK0luZGV4OiBlbGZ1dGlscy0wLjE2Ni9saWJlYmwvZWJsd3N0cnRhYi5jCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZWxmdXRpbHMtMC4xNjYub3JpZy9saWJlYmwvZWJsd3N0cnRhYi5jCisrKysgZWxmdXRpbHMtMC4xNjYvbGliZWJsL2VibHdzdHJ0YWIuYworQEAgLTMwNSw3ICszMDUsNyBAQCBjb3B5c3RyaW5ncyAoc3RydWN0IEVibF9XU3RyZW50ICpub2RlcCwKKyAKKyAgIC8qIFByb2Nlc3MgdGhlIGN1cnJlbnQgbm9kZS4gICovCisgICBub2RlcC0+b2Zmc2V0ID0gKm9mZnNldHA7CistICAqZnJlZXAgPSB3bWVtcGNweSAoKmZyZWVwLCBub2RlcC0+c3RyaW5nLCBub2RlcC0+bGVuKTsKKysgICpmcmVlcCA9IHdtZW1jcHkgKCpmcmVlcCwgbm9kZXAtPnN0cmluZywgbm9kZXAtPmxlbikgKyBub2RlcC0+bGVuOworICAgKm9mZnNldHAgKz0gbm9kZXAtPmxlbiAqIHNpemVvZiAod2NoYXJfdCk7CisgCisgICBmb3IgKHN1YnMgPSBub2RlcC0+bmV4dDsgc3VicyAhPSBOVUxMOyBzdWJzID0gc3Vicy0+bmV4dCkKK0luZGV4OiBlbGZ1dGlscy0wLjE2Ni9saWJlbGYvZWxmLmgKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBlbGZ1dGlscy0wLjE2Ni5vcmlnL2xpYmVsZi9lbGYuaAorKysrIGVsZnV0aWxzLTAuMTY2L2xpYmVsZi9lbGYuaAorQEAgLTIxLDcgKzIxLDkgQEAKKyAKKyAjaW5jbHVkZSA8ZmVhdHVyZXMuaD4KKyAKKy1fX0JFR0lOX0RFQ0xTCisrI2lmZGVmIF9fY3BsdXNwbHVzCisrZXh0ZXJuICJDIiB7CisrI2VuZGlmCisgCisgLyogU3RhbmRhcmQgRUxGIHR5cGVzLiAgKi8KKyAKK0BAIC0zNTkxLDcgKzM1OTMsOCBAQCBlbnVtCisgCisgI2RlZmluZSBSX1RJTEVHWF9OVU0JCTEzMAorIAorLQorLV9fRU5EX0RFQ0xTCisrI2lmZGVmIF9fY3BsdXNwbHVzCisrfQorKyNlbmRpZgorIAorICNlbmRpZgkvKiBlbGYuaCAqLworSW5kZXg6IGVsZnV0aWxzLTAuMTY2L2xpYmVsZi9saWJlbGYuaAorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGVsZnV0aWxzLTAuMTY2Lm9yaWcvbGliZWxmL2xpYmVsZi5oCisrKysgZWxmdXRpbHMtMC4xNjYvbGliZWxmL2xpYmVsZi5oCitAQCAtMjksNiArMjksNyBAQAorICNpZm5kZWYgX0xJQkVMRl9ICisgI2RlZmluZSBfTElCRUxGX0ggMQorIAorKyNpbmNsdWRlIDxmY250bC5oPgorICNpbmNsdWRlIDxzdGRpbnQuaD4KKyAjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisgCitJbmRleDogZWxmdXRpbHMtMC4xNjYvbGliZWxmL2xpYmVsZlAuaAorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGVsZnV0aWxzLTAuMTY2Lm9yaWcvbGliZWxmL2xpYmVsZlAuaAorKysrIGVsZnV0aWxzLTAuMTY2L2xpYmVsZi9saWJlbGZQLmgKK0BAIC0zNiw2ICszNiw3IEBACisgCisgI2luY2x1ZGUgPGFyLmg+CisgI2luY2x1ZGUgPGdlbGYuaD4KKysjaW5jbHVkZSA8bGliZWxmLmg+CisgCisgI2luY2x1ZGUgPGVycm5vLmg+CisgI2luY2x1ZGUgPHN0ZGJvb2wuaD4KK0luZGV4OiBlbGZ1dGlscy0wLjE2Ni9zcmMvYWRkcjJsaW5lLmMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBlbGZ1dGlscy0wLjE2Ni5vcmlnL3NyYy9hZGRyMmxpbmUuYworKysrIGVsZnV0aWxzLTAuMTY2L3NyYy9hZGRyMmxpbmUuYworQEAgLTIzLDcgKzIzLDcgQEAKKyAjaW5jbHVkZSA8YXJncC5oPgorICNpbmNsdWRlIDxhc3NlcnQuaD4KKyAjaW5jbHVkZSA8ZXJybm8uaD4KKy0jaW5jbHVkZSA8ZXJyb3IuaD4KKysjaW5jbHVkZSA8ZXJyLmg+CisgI2luY2x1ZGUgPGZjbnRsLmg+CisgI2luY2x1ZGUgPGludHR5cGVzLmg+CisgI2luY2x1ZGUgPGxpYmR3ZmwuaD4KK0luZGV4OiBlbGZ1dGlscy0wLjE2Ni9zcmMvYXIuYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGVsZnV0aWxzLTAuMTY2Lm9yaWcvc3JjL2FyLmMKKysrKyBlbGZ1dGlscy0wLjE2Ni9zcmMvYXIuYworQEAgLTIyLDcgKzIyLDcgQEAKKyAKKyAjaW5jbHVkZSA8YXJncC5oPgorICNpbmNsdWRlIDxhc3NlcnQuaD4KKy0jaW5jbHVkZSA8ZXJyb3IuaD4KKysjaW5jbHVkZSA8ZXJyLmg+CisgI2luY2x1ZGUgPGZjbnRsLmg+CisgI2luY2x1ZGUgPGdlbGYuaD4KKyAjaW5jbHVkZSA8bGliaW50bC5oPgorSW5kZXg6IGVsZnV0aWxzLTAuMTY2L3NyYy9hcmxpYi5jCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZWxmdXRpbHMtMC4xNjYub3JpZy9zcmMvYXJsaWIuYworKysrIGVsZnV0aWxzLTAuMTY2L3NyYy9hcmxpYi5jCitAQCAtMjEsNyArMjEsNyBAQAorICNlbmRpZgorIAorICNpbmNsdWRlIDxhc3NlcnQuaD4KKy0jaW5jbHVkZSA8ZXJyb3IuaD4KKysjaW5jbHVkZSA8ZXJyLmg+CisgI2luY2x1ZGUgPGdlbGYuaD4KKyAjaW5jbHVkZSA8bGliaW50bC5oPgorICNpbmNsdWRlIDxzdGRpby5oPgorSW5kZXg6IGVsZnV0aWxzLTAuMTY2L3NyYy9hcmxpYjIuYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGVsZnV0aWxzLTAuMTY2Lm9yaWcvc3JjL2FybGliMi5jCisrKysgZWxmdXRpbHMtMC4xNjYvc3JjL2FybGliMi5jCitAQCAtMjAsNyArMjAsNyBAQAorICMgaW5jbHVkZSA8Y29uZmlnLmg+CisgI2VuZGlmCisgCistI2luY2x1ZGUgPGVycm9yLmg+CisrI2luY2x1ZGUgPGVyci5oPgorICNpbmNsdWRlIDxsaWJpbnRsLmg+CisgI2luY2x1ZGUgPGxpbWl0cy5oPgorICNpbmNsdWRlIDxzdHJpbmcuaD4KK0luZGV4OiBlbGZ1dGlscy0wLjE2Ni9zcmMvZWxmY21wLmMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBlbGZ1dGlscy0wLjE2Ni5vcmlnL3NyYy9lbGZjbXAuYworKysrIGVsZnV0aWxzLTAuMTY2L3NyYy9lbGZjbXAuYworQEAgLTIzLDcgKzIzLDcgQEAKKyAjaW5jbHVkZSA8YXJncC5oPgorICNpbmNsdWRlIDxhc3NlcnQuaD4KKyAjaW5jbHVkZSA8ZXJybm8uaD4KKy0jaW5jbHVkZSA8ZXJyb3IuaD4KKysjaW5jbHVkZSA8ZXJyLmg+CisgI2luY2x1ZGUgPGZjbnRsLmg+CisgI2luY2x1ZGUgPGxvY2FsZS5oPgorICNpbmNsdWRlIDxsaWJpbnRsLmg+CitJbmRleDogZWxmdXRpbHMtMC4xNjYvc3JjL2VsZmxpbnQuYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGVsZnV0aWxzLTAuMTY2Lm9yaWcvc3JjL2VsZmxpbnQuYworKysrIGVsZnV0aWxzLTAuMTY2L3NyYy9lbGZsaW50LmMKK0BAIC0yNCw3ICsyNCw3IEBACisgI2luY2x1ZGUgPGFzc2VydC5oPgorICNpbmNsdWRlIDxieXRlc3dhcC5oPgorICNpbmNsdWRlIDxlbmRpYW4uaD4KKy0jaW5jbHVkZSA8ZXJyb3IuaD4KKysjaW5jbHVkZSA8ZXJyLmg+CisgI2luY2x1ZGUgPGZjbnRsLmg+CisgI2luY2x1ZGUgPGdlbGYuaD4KKyAjaW5jbHVkZSA8aW50dHlwZXMuaD4KK0luZGV4OiBlbGZ1dGlscy0wLjE2Ni9zcmMvZmluZHRleHRyZWwuYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGVsZnV0aWxzLTAuMTY2Lm9yaWcvc3JjL2ZpbmR0ZXh0cmVsLmMKKysrKyBlbGZ1dGlscy0wLjE2Ni9zcmMvZmluZHRleHRyZWwuYworQEAgLTIzLDcgKzIzLDcgQEAKKyAjaW5jbHVkZSA8YXJncC5oPgorICNpbmNsdWRlIDxhc3NlcnQuaD4KKyAjaW5jbHVkZSA8ZXJybm8uaD4KKy0jaW5jbHVkZSA8ZXJyb3IuaD4KKysjaW5jbHVkZSA8ZXJyLmg+CisgI2luY2x1ZGUgPGZjbnRsLmg+CisgI2luY2x1ZGUgPGdlbGYuaD4KKyAjaW5jbHVkZSA8bGliZHcuaD4KK0luZGV4OiBlbGZ1dGlscy0wLjE2Ni9zcmMvaTM4Nl9sZC5jCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZWxmdXRpbHMtMC4xNjYub3JpZy9zcmMvaTM4Nl9sZC5jCisrKysgZWxmdXRpbHMtMC4xNjYvc3JjL2kzODZfbGQuYworQEAgLTIwLDcgKzIwLDcgQEAKKyAjZW5kaWYKKyAKKyAjaW5jbHVkZSA8YXNzZXJ0Lmg+CistI2luY2x1ZGUgPGVycm9yLmg+CisrI2luY2x1ZGUgPGVyci5oPgorICNpbmNsdWRlIDxsaWJpbnRsLmg+CisgI2luY2x1ZGUgPHN0ZGxpYi5oPgorICNpbmNsdWRlIDxzdHJpbmcuaD4KK0luZGV4OiBlbGZ1dGlscy0wLjE2Ni9zcmMvbGQuYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGVsZnV0aWxzLTAuMTY2Lm9yaWcvc3JjL2xkLmMKKysrKyBlbGZ1dGlscy0wLjE2Ni9zcmMvbGQuYworQEAgLTIxLDcgKzIxLDcgQEAKKyAKKyAjaW5jbHVkZSA8YXJncC5oPgorICNpbmNsdWRlIDxhc3NlcnQuaD4KKy0jaW5jbHVkZSA8ZXJyb3IuaD4KKysjaW5jbHVkZSA8ZXJyLmg+CisgI2luY2x1ZGUgPGZjbnRsLmg+CisgI2luY2x1ZGUgPGxpYmVsZi5oPgorICNpbmNsdWRlIDxsaWJpbnRsLmg+CitJbmRleDogZWxmdXRpbHMtMC4xNjYvc3JjL2xkZ2VuZXJpYy5jCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZWxmdXRpbHMtMC4xNjYub3JpZy9zcmMvbGRnZW5lcmljLmMKKysrKyBlbGZ1dGlscy0wLjE2Ni9zcmMvbGRnZW5lcmljLmMKK0BAIC0yMyw3ICsyMyw3IEBACisgI2luY2x1ZGUgPGN0eXBlLmg+CisgI2luY2x1ZGUgPGRsZmNuLmg+CisgI2luY2x1ZGUgPGVycm5vLmg+CistI2luY2x1ZGUgPGVycm9yLmg+CisrI2luY2x1ZGUgPGVyci5oPgorICNpbmNsdWRlIDxmY250bC5oPgorICNpbmNsdWRlIDxmbm1hdGNoLmg+CisgI2luY2x1ZGUgPGdlbGYuaD4KK0luZGV4OiBlbGZ1dGlscy0wLjE2Ni9zcmMvbGRsZXguYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGVsZnV0aWxzLTAuMTY2Lm9yaWcvc3JjL2xkbGV4LmMKKysrKyBlbGZ1dGlscy0wLjE2Ni9zcmMvbGRsZXguYworQEAgLTExMDYsNyArMTEwNiw3IEBAIGNoYXIgKmxkdGV4dDsKKyAjaW5jbHVkZSA8YXNzZXJ0Lmg+CisgI2luY2x1ZGUgPGN0eXBlLmg+CisgI2luY2x1ZGUgPGVsZi5oPgorLSNpbmNsdWRlIDxlcnJvci5oPgorKyNpbmNsdWRlIDxlcnIuaD4KKyAjaW5jbHVkZSA8aW50dHlwZXMuaD4KKyAjaW5jbHVkZSA8bGliaW50bC5oPgorICNpbmNsdWRlIDxzdGRib29sLmg+CitJbmRleDogZWxmdXRpbHMtMC4xNjYvc3JjL2xkc2NyaXB0LmMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBlbGZ1dGlscy0wLjE2Ni5vcmlnL3NyYy9sZHNjcmlwdC5jCisrKysgZWxmdXRpbHMtMC4xNjYvc3JjL2xkc2NyaXB0LmMKK0BAIC05NSw3ICs5NSw3IEBACisgI2VuZGlmCisgCisgI2luY2x1ZGUgPGFzc2VydC5oPgorLSNpbmNsdWRlIDxlcnJvci5oPgorKyNpbmNsdWRlIDxlcnIuaD4KKyAjaW5jbHVkZSA8bGliaW50bC5oPgorICNpbmNsdWRlIDxzdGRib29sLmg+CisgI2luY2x1ZGUgPHN0ZGludC5oPgorSW5kZXg6IGVsZnV0aWxzLTAuMTY2L3NyYy9ubS5jCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZWxmdXRpbHMtMC4xNjYub3JpZy9zcmMvbm0uYworKysrIGVsZnV0aWxzLTAuMTY2L3NyYy9ubS5jCitAQCAtMjYsNyArMjYsNyBAQAorICNpbmNsdWRlIDxjdHlwZS5oPgorICNpbmNsdWRlIDxkd2FyZi5oPgorICNpbmNsdWRlIDxlcnJuby5oPgorLSNpbmNsdWRlIDxlcnJvci5oPgorKyNpbmNsdWRlIDxlcnIuaD4KKyAjaW5jbHVkZSA8ZmNudGwuaD4KKyAjaW5jbHVkZSA8Z2VsZi5oPgorICNpbmNsdWRlIDxpbnR0eXBlcy5oPgorSW5kZXg6IGVsZnV0aWxzLTAuMTY2L3NyYy9vYmpkdW1wLmMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBlbGZ1dGlscy0wLjE2Ni5vcmlnL3NyYy9vYmpkdW1wLmMKKysrKyBlbGZ1dGlscy0wLjE2Ni9zcmMvb2JqZHVtcC5jCitAQCAtMjEsNyArMjEsNyBAQAorICNlbmRpZgorIAorICNpbmNsdWRlIDxhcmdwLmg+CistI2luY2x1ZGUgPGVycm9yLmg+CisrI2luY2x1ZGUgPGVyci5oPgorICNpbmNsdWRlIDxmY250bC5oPgorICNpbmNsdWRlIDxpbnR0eXBlcy5oPgorICNpbmNsdWRlIDxsaWJpbnRsLmg+CitJbmRleDogZWxmdXRpbHMtMC4xNjYvc3JjL3JhbmxpYi5jCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZWxmdXRpbHMtMC4xNjYub3JpZy9zcmMvcmFubGliLmMKKysrKyBlbGZ1dGlscy0wLjE2Ni9zcmMvcmFubGliLmMKK0BAIC0yNCw3ICsyNCw3IEBACisgI2luY2x1ZGUgPGFyZ3AuaD4KKyAjaW5jbHVkZSA8YXNzZXJ0Lmg+CisgI2luY2x1ZGUgPGVycm5vLmg+CistI2luY2x1ZGUgPGVycm9yLmg+CisrI2luY2x1ZGUgPGVyci5oPgorICNpbmNsdWRlIDxmY250bC5oPgorICNpbmNsdWRlIDxnZWxmLmg+CisgI2luY2x1ZGUgPGxpYmludGwuaD4KK0luZGV4OiBlbGZ1dGlscy0wLjE2Ni9zcmMvcmVhZGVsZi5jCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZWxmdXRpbHMtMC4xNjYub3JpZy9zcmMvcmVhZGVsZi5jCisrKysgZWxmdXRpbHMtMC4xNjYvc3JjL3JlYWRlbGYuYworQEAgLTI1LDcgKzI1LDcgQEAKKyAjaW5jbHVkZSA8Y3R5cGUuaD4KKyAjaW5jbHVkZSA8ZHdhcmYuaD4KKyAjaW5jbHVkZSA8ZXJybm8uaD4KKy0jaW5jbHVkZSA8ZXJyb3IuaD4KKysjaW5jbHVkZSA8ZXJyLmg+CisgI2luY2x1ZGUgPGZjbnRsLmg+CisgI2luY2x1ZGUgPGdlbGYuaD4KKyAjaW5jbHVkZSA8aW50dHlwZXMuaD4KK0luZGV4OiBlbGZ1dGlscy0wLjE2Ni9zcmMvc2l6ZS5jCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZWxmdXRpbHMtMC4xNjYub3JpZy9zcmMvc2l6ZS5jCisrKysgZWxmdXRpbHMtMC4xNjYvc3JjL3NpemUuYworQEAgLTIxLDcgKzIxLDcgQEAKKyAjZW5kaWYKKyAKKyAjaW5jbHVkZSA8YXJncC5oPgorLSNpbmNsdWRlIDxlcnJvci5oPgorKyNpbmNsdWRlIDxlcnIuaD4KKyAjaW5jbHVkZSA8ZmNudGwuaD4KKyAjaW5jbHVkZSA8Z2VsZi5oPgorICNpbmNsdWRlIDxpbnR0eXBlcy5oPgorSW5kZXg6IGVsZnV0aWxzLTAuMTY2L3NyYy9zdGFjay5jCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZWxmdXRpbHMtMC4xNjYub3JpZy9zcmMvc3RhY2suYworKysrIGVsZnV0aWxzLTAuMTY2L3NyYy9zdGFjay5jCitAQCAtMTgsNyArMTgsNyBAQAorICNpbmNsdWRlIDxjb25maWcuaD4KKyAjaW5jbHVkZSA8YXNzZXJ0Lmg+CisgI2luY2x1ZGUgPGFyZ3AuaD4KKy0jaW5jbHVkZSA8ZXJyb3IuaD4KKysjaW5jbHVkZSA8ZXJyLmg+CisgI2luY2x1ZGUgPHN0ZGxpYi5oPgorICNpbmNsdWRlIDxpbnR0eXBlcy5oPgorICNpbmNsdWRlIDxzdGRpby5oPgorSW5kZXg6IGVsZnV0aWxzLTAuMTY2L3NyYy9zdHJpbmdzLmMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBlbGZ1dGlscy0wLjE2Ni5vcmlnL3NyYy9zdHJpbmdzLmMKKysrKyBlbGZ1dGlscy0wLjE2Ni9zcmMvc3RyaW5ncy5jCitAQCAtMjUsNyArMjUsNyBAQAorICNpbmNsdWRlIDxjdHlwZS5oPgorICNpbmNsdWRlIDxlbmRpYW4uaD4KKyAjaW5jbHVkZSA8ZXJybm8uaD4KKy0jaW5jbHVkZSA8ZXJyb3IuaD4KKysjaW5jbHVkZSA8ZXJyLmg+CisgI2luY2x1ZGUgPGZjbnRsLmg+CisgI2luY2x1ZGUgPGdlbGYuaD4KKyAjaW5jbHVkZSA8aW50dHlwZXMuaD4KK0luZGV4OiBlbGZ1dGlscy0wLjE2Ni9zcmMvc3RyaXAuYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGVsZnV0aWxzLTAuMTY2Lm9yaWcvc3JjL3N0cmlwLmMKKysrKyBlbGZ1dGlscy0wLjE2Ni9zcmMvc3RyaXAuYworQEAgLTI0LDcgKzI0LDcgQEAKKyAjaW5jbHVkZSA8YXNzZXJ0Lmg+CisgI2luY2x1ZGUgPGJ5dGVzd2FwLmg+CisgI2luY2x1ZGUgPGVuZGlhbi5oPgorLSNpbmNsdWRlIDxlcnJvci5oPgorKyNpbmNsdWRlIDxlcnIuaD4KKyAjaW5jbHVkZSA8ZmNudGwuaD4KKyAjaW5jbHVkZSA8Z2VsZi5oPgorICNpbmNsdWRlIDxsaWJlbGYuaD4KK0luZGV4OiBlbGZ1dGlscy0wLjE2Ni9zcmMvdW5zdHJpcC5jCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZWxmdXRpbHMtMC4xNjYub3JpZy9zcmMvdW5zdHJpcC5jCisrKysgZWxmdXRpbHMtMC4xNjYvc3JjL3Vuc3RyaXAuYworQEAgLTMxLDcgKzMxLDcgQEAKKyAjaW5jbHVkZSA8YXJncC5oPgorICNpbmNsdWRlIDxhc3NlcnQuaD4KKyAjaW5jbHVkZSA8ZXJybm8uaD4KKy0jaW5jbHVkZSA8ZXJyb3IuaD4KKysjaW5jbHVkZSA8ZXJyLmg+CisgI2luY2x1ZGUgPGZjbnRsLmg+CisgI2luY2x1ZGUgPGZubWF0Y2guaD4KKyAjaW5jbHVkZSA8bGliaW50bC5oPgorSW5kZXg6IGVsZnV0aWxzLTAuMTY2L3Rlc3RzL2FkZHJzY29wZXMuYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGVsZnV0aWxzLTAuMTY2Lm9yaWcvdGVzdHMvYWRkcnNjb3Blcy5jCisrKysgZWxmdXRpbHMtMC4xNjYvdGVzdHMvYWRkcnNjb3Blcy5jCitAQCAtMjUsNyArMjUsNyBAQAorICNpbmNsdWRlIDxzdGRpb19leHQuaD4KKyAjaW5jbHVkZSA8bG9jYWxlLmg+CisgI2luY2x1ZGUgPHN0ZGxpYi5oPgorLSNpbmNsdWRlIDxlcnJvci5oPgorKyNpbmNsdWRlIDxlcnIuaD4KKyAjaW5jbHVkZSA8c3RyaW5nLmg+CisgCisgCitJbmRleDogZWxmdXRpbHMtMC4xNjYvdGVzdHMvYWxscmVncy5jCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZWxmdXRpbHMtMC4xNjYub3JpZy90ZXN0cy9hbGxyZWdzLmMKKysrKyBlbGZ1dGlscy0wLjE2Ni90ZXN0cy9hbGxyZWdzLmMKK0BAIC0yMSw3ICsyMSw3IEBACisgI2luY2x1ZGUgPHN0ZGlvLmg+CisgI2luY2x1ZGUgPHN0ZGxpYi5oPgorICNpbmNsdWRlIDxzdHJpbmcuaD4KKy0jaW5jbHVkZSA8ZXJyb3IuaD4KKysjaW5jbHVkZSA8ZXJyLmg+CisgI2luY2x1ZGUgPGxvY2FsZS5oPgorICNpbmNsdWRlIDxhcmdwLmg+CisgI2luY2x1ZGUgPGFzc2VydC5oPgorSW5kZXg6IGVsZnV0aWxzLTAuMTY2L3Rlc3RzL2JhY2t0cmFjZS1kYXRhLmMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBlbGZ1dGlscy0wLjE2Ni5vcmlnL3Rlc3RzL2JhY2t0cmFjZS1kYXRhLmMKKysrKyBlbGZ1dGlscy0wLjE2Ni90ZXN0cy9iYWNrdHJhY2UtZGF0YS5jCitAQCAtMjcsNyArMjcsNyBAQAorICNpbmNsdWRlIDxkaXJlbnQuaD4KKyAjaW5jbHVkZSA8c3RkbGliLmg+CisgI2luY2x1ZGUgPGVycm5vLmg+CistI2luY2x1ZGUgPGVycm9yLmg+CisrI2luY2x1ZGUgPGVyci5oPgorICNpbmNsdWRlIDx1bmlzdGQuaD4KKyAjaW5jbHVkZSA8ZHdhcmYuaD4KKyAjaWYgZGVmaW5lZChfX3g4Nl82NF9fKSAmJiBkZWZpbmVkKF9fbGludXhfXykKK0luZGV4OiBlbGZ1dGlscy0wLjE2Ni90ZXN0cy9iYWNrdHJhY2UtZHdhcmYuYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGVsZnV0aWxzLTAuMTY2Lm9yaWcvdGVzdHMvYmFja3RyYWNlLWR3YXJmLmMKKysrKyBlbGZ1dGlscy0wLjE2Ni90ZXN0cy9iYWNrdHJhY2UtZHdhcmYuYworQEAgLTIyLDcgKzIyLDcgQEAKKyAjaW5jbHVkZSA8c3RkaW9fZXh0Lmg+CisgI2luY2x1ZGUgPGxvY2FsZS5oPgorICNpbmNsdWRlIDxlcnJuby5oPgorLSNpbmNsdWRlIDxlcnJvci5oPgorKyNpbmNsdWRlIDxlcnIuaD4KKyAjaW5jbHVkZSA8dW5pc3RkLmg+CisgI2luY2x1ZGUgPHN5cy9wdHJhY2UuaD4KKyAjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CitJbmRleDogZWxmdXRpbHMtMC4xNjYvdGVzdHMvYmFja3RyYWNlLmMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBlbGZ1dGlscy0wLjE2Ni5vcmlnL3Rlc3RzL2JhY2t0cmFjZS5jCisrKysgZWxmdXRpbHMtMC4xNjYvdGVzdHMvYmFja3RyYWNlLmMKK0BAIC0yNCw3ICsyNCw3IEBACisgI2luY2x1ZGUgPGRpcmVudC5oPgorICNpbmNsdWRlIDxzdGRsaWIuaD4KKyAjaW5jbHVkZSA8ZXJybm8uaD4KKy0jaW5jbHVkZSA8ZXJyb3IuaD4KKysjaW5jbHVkZSA8ZXJyLmg+CisgI2luY2x1ZGUgPHVuaXN0ZC5oPgorICNpbmNsdWRlIDxkd2FyZi5oPgorICNpZmRlZiBfX2xpbnV4X18KK0luZGV4OiBlbGZ1dGlscy0wLjE2Ni90ZXN0cy9idWlsZGlkLmMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBlbGZ1dGlscy0wLjE2Ni5vcmlnL3Rlc3RzL2J1aWxkaWQuYworKysrIGVsZnV0aWxzLTAuMTY2L3Rlc3RzL2J1aWxkaWQuYworQEAgLTIzLDcgKzIzLDcgQEAKKyAjaW5jbHVkZSBFTEZVVElMU19IRUFERVIoZWxmKQorICNpbmNsdWRlIEVMRlVUSUxTX0hFQURFUihkd2VsZikKKyAjaW5jbHVkZSA8c3RkaW8uaD4KKy0jaW5jbHVkZSA8ZXJyb3IuaD4KKysjaW5jbHVkZSA8ZXJyLmg+CisgI2luY2x1ZGUgPHN0cmluZy5oPgorICNpbmNsdWRlIDxzdGRsaWIuaD4KKyAjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CitJbmRleDogZWxmdXRpbHMtMC4xNjYvdGVzdHMvZGVidWdhbHRsaW5rLmMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBlbGZ1dGlscy0wLjE2Ni5vcmlnL3Rlc3RzL2RlYnVnYWx0bGluay5jCisrKysgZWxmdXRpbHMtMC4xNjYvdGVzdHMvZGVidWdhbHRsaW5rLmMKK0BAIC0yMyw3ICsyMyw3IEBACisgI2luY2x1ZGUgRUxGVVRJTFNfSEVBREVSKGR3KQorICNpbmNsdWRlIEVMRlVUSUxTX0hFQURFUihkd2VsZikKKyAjaW5jbHVkZSA8c3RkaW8uaD4KKy0jaW5jbHVkZSA8ZXJyb3IuaD4KKysjaW5jbHVkZSA8ZXJyLmg+CisgI2luY2x1ZGUgPHN0cmluZy5oPgorICNpbmNsdWRlIDxzdGRsaWIuaD4KKyAjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CitJbmRleDogZWxmdXRpbHMtMC4xNjYvdGVzdHMvZGVidWdsaW5rLmMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBlbGZ1dGlscy0wLjE2Ni5vcmlnL3Rlc3RzL2RlYnVnbGluay5jCisrKysgZWxmdXRpbHMtMC4xNjYvdGVzdHMvZGVidWdsaW5rLmMKK0BAIC0yMSw3ICsyMSw3IEBACisgI2luY2x1ZGUgPGVycm5vLmg+CisgI2luY2x1ZGUgRUxGVVRJTFNfSEVBREVSKGR3ZWxmKQorICNpbmNsdWRlIDxzdGRpby5oPgorLSNpbmNsdWRlIDxlcnJvci5oPgorKyNpbmNsdWRlIDxlcnIuaD4KKyAjaW5jbHVkZSA8c3RyaW5nLmg+CisgI2luY2x1ZGUgPHN0ZGxpYi5oPgorICNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KK0luZGV4OiBlbGZ1dGlscy0wLjE2Ni90ZXN0cy9kZWxldGVkLmMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBlbGZ1dGlscy0wLjE2Ni5vcmlnL3Rlc3RzL2RlbGV0ZWQuYworKysrIGVsZnV0aWxzLTAuMTY2L3Rlc3RzL2RlbGV0ZWQuYworQEAgLTIxLDcgKzIxLDcgQEAKKyAjaW5jbHVkZSA8dW5pc3RkLmg+CisgI2luY2x1ZGUgPGFzc2VydC5oPgorICNpbmNsdWRlIDxzdGRpby5oPgorLSNpbmNsdWRlIDxlcnJvci5oPgorKyNpbmNsdWRlIDxlcnIuaD4KKyAjaW5jbHVkZSA8ZXJybm8uaD4KKyAjaWZkZWYgX19saW51eF9fCisgI2luY2x1ZGUgPHN5cy9wcmN0bC5oPgorSW5kZXg6IGVsZnV0aWxzLTAuMTY2L3Rlc3RzL2R3ZmwtYWRkci1zZWN0LmMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBlbGZ1dGlscy0wLjE2Ni5vcmlnL3Rlc3RzL2R3ZmwtYWRkci1zZWN0LmMKKysrKyBlbGZ1dGlscy0wLjE2Ni90ZXN0cy9kd2ZsLWFkZHItc2VjdC5jCitAQCAtMjMsNyArMjMsNyBAQAorICNpbmNsdWRlIDxzdGRpb19leHQuaD4KKyAjaW5jbHVkZSA8c3RkbGliLmg+CisgI2luY2x1ZGUgPHN0cmluZy5oPgorLSNpbmNsdWRlIDxlcnJvci5oPgorKyNpbmNsdWRlIDxlcnIuaD4KKyAjaW5jbHVkZSA8bG9jYWxlLmg+CisgI2luY2x1ZGUgPGFyZ3AuaD4KKyAjaW5jbHVkZSBFTEZVVElMU19IRUFERVIoZHdmbCkKK0luZGV4OiBlbGZ1dGlscy0wLjE2Ni90ZXN0cy9kd2ZsLWJ1Zy1hZGRyLW92ZXJmbG93LmMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBlbGZ1dGlscy0wLjE2Ni5vcmlnL3Rlc3RzL2R3ZmwtYnVnLWFkZHItb3ZlcmZsb3cuYworKysrIGVsZnV0aWxzLTAuMTY2L3Rlc3RzL2R3ZmwtYnVnLWFkZHItb3ZlcmZsb3cuYworQEAgLTIwLDcgKzIwLDcgQEAKKyAjaW5jbHVkZSA8aW50dHlwZXMuaD4KKyAjaW5jbHVkZSA8c3RkaW8uaD4KKyAjaW5jbHVkZSA8c3RkaW9fZXh0Lmg+CistI2luY2x1ZGUgPGVycm9yLmg+CisrI2luY2x1ZGUgPGVyci5oPgorICNpbmNsdWRlIDxsb2NhbGUuaD4KKyAjaW5jbHVkZSBFTEZVVElMU19IRUFERVIoZHdmbCkKKyAKK0luZGV4OiBlbGZ1dGlscy0wLjE2Ni90ZXN0cy9kd2ZsLWJ1Zy1mZC1sZWFrLmMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBlbGZ1dGlscy0wLjE2Ni5vcmlnL3Rlc3RzL2R3ZmwtYnVnLWZkLWxlYWsuYworKysrIGVsZnV0aWxzLTAuMTY2L3Rlc3RzL2R3ZmwtYnVnLWZkLWxlYWsuYworQEAgLTI0LDcgKzI0LDcgQEAKKyAjaW5jbHVkZSA8ZGlyZW50Lmg+CisgI2luY2x1ZGUgPHN0ZGxpYi5oPgorICNpbmNsdWRlIDxlcnJuby5oPgorLSNpbmNsdWRlIDxlcnJvci5oPgorKyNpbmNsdWRlIDxlcnIuaD4KKyAjaW5jbHVkZSA8dW5pc3RkLmg+CisgI2luY2x1ZGUgPGR3YXJmLmg+CisgCitJbmRleDogZWxmdXRpbHMtMC4xNjYvdGVzdHMvZHdmbC1idWctZ2V0bW9kdWxlcy5jCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZWxmdXRpbHMtMC4xNjYub3JpZy90ZXN0cy9kd2ZsLWJ1Zy1nZXRtb2R1bGVzLmMKKysrKyBlbGZ1dGlscy0wLjE2Ni90ZXN0cy9kd2ZsLWJ1Zy1nZXRtb2R1bGVzLmMKK0BAIC0xOCw3ICsxOCw3IEBACisgI2luY2x1ZGUgPGNvbmZpZy5oPgorICNpbmNsdWRlIEVMRlVUSUxTX0hFQURFUihkd2ZsKQorIAorLSNpbmNsdWRlIDxlcnJvci5oPgorKyNpbmNsdWRlIDxlcnIuaD4KKyAKKyBzdGF0aWMgY29uc3QgRHdmbF9DYWxsYmFja3MgY2FsbGJhY2tzID0KKyAgIHsKK0luZGV4OiBlbGZ1dGlscy0wLjE2Ni90ZXN0cy9kd2ZsLXJlcG9ydC1lbGYtYWxpZ24uYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGVsZnV0aWxzLTAuMTY2Lm9yaWcvdGVzdHMvZHdmbC1yZXBvcnQtZWxmLWFsaWduLmMKKysrKyBlbGZ1dGlscy0wLjE2Ni90ZXN0cy9kd2ZsLXJlcG9ydC1lbGYtYWxpZ24uYworQEAgLTIwLDcgKzIwLDcgQEAKKyAjaW5jbHVkZSA8aW50dHlwZXMuaD4KKyAjaW5jbHVkZSA8c3RkaW8uaD4KKyAjaW5jbHVkZSA8c3RkaW9fZXh0Lmg+CistI2luY2x1ZGUgPGVycm9yLmg+CisrI2luY2x1ZGUgPGVyci5oPgorICNpbmNsdWRlIDxsb2NhbGUuaD4KKyAjaW5jbHVkZSA8c3RyaW5nLmg+CisgI2luY2x1ZGUgPHN0ZGxpYi5oPgorSW5kZXg6IGVsZnV0aWxzLTAuMTY2L3Rlc3RzL2R3ZmxsaW5lcy5jCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZWxmdXRpbHMtMC4xNjYub3JpZy90ZXN0cy9kd2ZsbGluZXMuYworKysrIGVsZnV0aWxzLTAuMTY2L3Rlc3RzL2R3ZmxsaW5lcy5jCitAQCAtMjcsNyArMjcsNyBAQAorICNpbmNsdWRlIDxzdGRpby5oPgorICNpbmNsdWRlIDxzdGRsaWIuaD4KKyAjaW5jbHVkZSA8c3RyaW5nLmg+CistI2luY2x1ZGUgPGVycm9yLmg+CisrI2luY2x1ZGUgPGVyci5oPgorIAorIGludAorIG1haW4gKGludCBhcmdjLCBjaGFyICphcmd2W10pCitJbmRleDogZWxmdXRpbHMtMC4xNjYvdGVzdHMvZHdmbG1vZHRlc3QuYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGVsZnV0aWxzLTAuMTY2Lm9yaWcvdGVzdHMvZHdmbG1vZHRlc3QuYworKysrIGVsZnV0aWxzLTAuMTY2L3Rlc3RzL2R3Zmxtb2R0ZXN0LmMKK0BAIC0yMyw3ICsyMyw3IEBACisgI2luY2x1ZGUgPHN0ZGlvX2V4dC5oPgorICNpbmNsdWRlIDxzdGRsaWIuaD4KKyAjaW5jbHVkZSA8c3RyaW5nLmg+CistI2luY2x1ZGUgPGVycm9yLmg+CisrI2luY2x1ZGUgPGVyci5oPgorICNpbmNsdWRlIDxsb2NhbGUuaD4KKyAjaW5jbHVkZSA8YXJncC5oPgorICNpbmNsdWRlIEVMRlVUSUxTX0hFQURFUihkd2ZsKQorSW5kZXg6IGVsZnV0aWxzLTAuMTY2L3Rlc3RzL2R3ZmxzeW1zLmMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBlbGZ1dGlscy0wLjE2Ni5vcmlnL3Rlc3RzL2R3ZmxzeW1zLmMKKysrKyBlbGZ1dGlscy0wLjE2Ni90ZXN0cy9kd2Zsc3ltcy5jCitAQCAtMjUsNyArMjUsNyBAQAorICNpbmNsdWRlIDxzdGRpby5oPgorICNpbmNsdWRlIDxzdGRpb19leHQuaD4KKyAjaW5jbHVkZSA8c3RkbGliLmg+CistI2luY2x1ZGUgPGVycm9yLmg+CisrI2luY2x1ZGUgPGVyci5oPgorICNpbmNsdWRlIDxzdHJpbmcuaD4KKyAKKyBzdGF0aWMgY29uc3QgY2hhciAqCitJbmRleDogZWxmdXRpbHMtMC4xNjYvdGVzdHMvZWFybHktb2Zmc2NuLmMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBlbGZ1dGlscy0wLjE2Ni5vcmlnL3Rlc3RzL2Vhcmx5LW9mZnNjbi5jCisrKysgZWxmdXRpbHMtMC4xNjYvdGVzdHMvZWFybHktb2Zmc2NuLmMKK0BAIC0xOSw3ICsxOSw3IEBACisgI2VuZGlmCisgCisgI2luY2x1ZGUgPGVycm5vLmg+CistI2luY2x1ZGUgPGVycm9yLmg+CisrI2luY2x1ZGUgPGVyci5oPgorICNpbmNsdWRlIDxmY250bC5oPgorICNpbmNsdWRlIDxnZWxmLmg+CisgI2luY2x1ZGUgPHN0ZGlvLmg+CitJbmRleDogZWxmdXRpbHMtMC4xNjYvdGVzdHMvZWNwLmMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBlbGZ1dGlscy0wLjE2Ni5vcmlnL3Rlc3RzL2VjcC5jCisrKysgZWxmdXRpbHMtMC4xNjYvdGVzdHMvZWNwLmMKK0BAIC0yMCw3ICsyMCw3IEBACisgI2VuZGlmCisgCisgI2luY2x1ZGUgPGVycm5vLmg+CistI2luY2x1ZGUgPGVycm9yLmg+CisrI2luY2x1ZGUgPGVyci5oPgorICNpbmNsdWRlIDxmY250bC5oPgorICNpbmNsdWRlIDxnZWxmLmg+CisgI2luY2x1ZGUgPHN0ZGxpYi5oPgorSW5kZXg6IGVsZnV0aWxzLTAuMTY2L3Rlc3RzL2ZpbmQtcHJvbG9ndWVzLmMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBlbGZ1dGlscy0wLjE2Ni5vcmlnL3Rlc3RzL2ZpbmQtcHJvbG9ndWVzLmMKKysrKyBlbGZ1dGlscy0wLjE2Ni90ZXN0cy9maW5kLXByb2xvZ3Vlcy5jCitAQCAtMjUsNyArMjUsNyBAQAorICNpbmNsdWRlIDxzdGRpb19leHQuaD4KKyAjaW5jbHVkZSA8bG9jYWxlLmg+CisgI2luY2x1ZGUgPHN0ZGxpYi5oPgorLSNpbmNsdWRlIDxlcnJvci5oPgorKyNpbmNsdWRlIDxlcnIuaD4KKyAjaW5jbHVkZSA8c3RyaW5nLmg+CisgI2luY2x1ZGUgPGZubWF0Y2guaD4KKyAKK0luZGV4OiBlbGZ1dGlscy0wLjE2Ni90ZXN0cy9mdW5jcmV0dmFsLmMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBlbGZ1dGlscy0wLjE2Ni5vcmlnL3Rlc3RzL2Z1bmNyZXR2YWwuYworKysrIGVsZnV0aWxzLTAuMTY2L3Rlc3RzL2Z1bmNyZXR2YWwuYworQEAgLTI1LDcgKzI1LDcgQEAKKyAjaW5jbHVkZSA8c3RkaW9fZXh0Lmg+CisgI2luY2x1ZGUgPGxvY2FsZS5oPgorICNpbmNsdWRlIDxzdGRsaWIuaD4KKy0jaW5jbHVkZSA8ZXJyb3IuaD4KKysjaW5jbHVkZSA8ZXJyLmg+CisgI2luY2x1ZGUgPHN0cmluZy5oPgorICNpbmNsdWRlIDxmbm1hdGNoLmg+CisgCitJbmRleDogZWxmdXRpbHMtMC4xNjYvdGVzdHMvZnVuY3Njb3Blcy5jCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZWxmdXRpbHMtMC4xNjYub3JpZy90ZXN0cy9mdW5jc2NvcGVzLmMKKysrKyBlbGZ1dGlscy0wLjE2Ni90ZXN0cy9mdW5jc2NvcGVzLmMKK0BAIC0yNSw3ICsyNSw3IEBACisgI2luY2x1ZGUgPHN0ZGlvX2V4dC5oPgorICNpbmNsdWRlIDxsb2NhbGUuaD4KKyAjaW5jbHVkZSA8c3RkbGliLmg+CistI2luY2x1ZGUgPGVycm9yLmg+CisrI2luY2x1ZGUgPGVyci5oPgorICNpbmNsdWRlIDxzdHJpbmcuaD4KKyAjaW5jbHVkZSA8Zm5tYXRjaC5oPgorIAorSW5kZXg6IGVsZnV0aWxzLTAuMTY2L3Rlc3RzL2dldHNyY19kaWUuYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGVsZnV0aWxzLTAuMTY2Lm9yaWcvdGVzdHMvZ2V0c3JjX2RpZS5jCisrKysgZWxmdXRpbHMtMC4xNjYvdGVzdHMvZ2V0c3JjX2RpZS5jCitAQCAtMTksNyArMTksNyBAQAorICNlbmRpZgorIAorICNpbmNsdWRlIDxlcnJuby5oPgorLSNpbmNsdWRlIDxlcnJvci5oPgorKyNpbmNsdWRlIDxlcnIuaD4KKyAjaW5jbHVkZSA8ZmNudGwuaD4KKyAjaW5jbHVkZSA8aW50dHlwZXMuaD4KKyAjaW5jbHVkZSA8bGliZWxmLmg+CitJbmRleDogZWxmdXRpbHMtMC4xNjYvdGVzdHMvbGluZTJhZGRyLmMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBlbGZ1dGlscy0wLjE2Ni5vcmlnL3Rlc3RzL2xpbmUyYWRkci5jCisrKysgZWxmdXRpbHMtMC4xNjYvdGVzdHMvbGluZTJhZGRyLmMKK0BAIC0yNiw3ICsyNiw3IEBACisgI2luY2x1ZGUgPGxvY2FsZS5oPgorICNpbmNsdWRlIDxzdGRsaWIuaD4KKyAjaW5jbHVkZSA8c3RyaW5nLmg+CistI2luY2x1ZGUgPGVycm9yLmg+CisrI2luY2x1ZGUgPGVyci5oPgorIAorIAorIHN0YXRpYyB2b2lkCitJbmRleDogZWxmdXRpbHMtMC4xNjYvdGVzdHMvbG93X2hpZ2hfcGMuYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGVsZnV0aWxzLTAuMTY2Lm9yaWcvdGVzdHMvbG93X2hpZ2hfcGMuYworKysrIGVsZnV0aWxzLTAuMTY2L3Rlc3RzL2xvd19oaWdoX3BjLmMKK0BAIC0yNSw3ICsyNSw3IEBACisgI2luY2x1ZGUgPHN0ZGlvX2V4dC5oPgorICNpbmNsdWRlIDxsb2NhbGUuaD4KKyAjaW5jbHVkZSA8c3RkbGliLmg+CistI2luY2x1ZGUgPGVycm9yLmg+CisrI2luY2x1ZGUgPGVyci5oPgorICNpbmNsdWRlIDxzdHJpbmcuaD4KKyAjaW5jbHVkZSA8Zm5tYXRjaC5oPgorIAorSW5kZXg6IGVsZnV0aWxzLTAuMTY2L3Rlc3RzL21kNS1zaGExLXRlc3QuYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGVsZnV0aWxzLTAuMTY2Lm9yaWcvdGVzdHMvbWQ1LXNoYTEtdGVzdC5jCisrKysgZWxmdXRpbHMtMC4xNjYvdGVzdHMvbWQ1LXNoYTEtdGVzdC5jCitAQCAtMTksNyArMTksNyBAQAorICNlbmRpZgorIAorICNpbmNsdWRlIDxzdHJpbmcuaD4KKy0jaW5jbHVkZSA8ZXJyb3IuaD4KKysjaW5jbHVkZSA8ZXJyLmg+CisgCisgI2luY2x1ZGUgIm1kNS5oIgorICNpbmNsdWRlICJzaGExLmgiCitJbmRleDogZWxmdXRpbHMtMC4xNjYvdGVzdHMvcmR3cm1tYXAuYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGVsZnV0aWxzLTAuMTY2Lm9yaWcvdGVzdHMvcmR3cm1tYXAuYworKysrIGVsZnV0aWxzLTAuMTY2L3Rlc3RzL3Jkd3JtbWFwLmMKK0BAIC0xOSw3ICsxOSw3IEBACisgI2VuZGlmCisgCisgI2luY2x1ZGUgPGVycm5vLmg+CistI2luY2x1ZGUgPGVycm9yLmg+CisrI2luY2x1ZGUgPGVyci5oPgorICNpbmNsdWRlIDxzdGRpby5oPgorICNpbmNsdWRlIDxmY250bC5oPgorICNpbmNsdWRlIDx1bmlzdGQuaD4KK0luZGV4OiBlbGZ1dGlscy0wLjE2Ni90ZXN0cy9zYXJpZHguYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGVsZnV0aWxzLTAuMTY2Lm9yaWcvdGVzdHMvc2FyaWR4LmMKKysrKyBlbGZ1dGlscy0wLjE2Ni90ZXN0cy9zYXJpZHguYworQEAgLTE3LDcgKzE3LDcgQEAKKyAKKyAjaW5jbHVkZSA8Y29uZmlnLmg+CisgCistI2luY2x1ZGUgPGVycm9yLmg+CisrI2luY2x1ZGUgPGVyci5oPgorICNpbmNsdWRlIDxmY250bC5oPgorICNpbmNsdWRlIDxnZWxmLmg+CisgI2luY2x1ZGUgPHN0ZGlvLmg+CitJbmRleDogZWxmdXRpbHMtMC4xNjYvdGVzdHMvc2VjdGlvbmR1bXAuYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGVsZnV0aWxzLTAuMTY2Lm9yaWcvdGVzdHMvc2VjdGlvbmR1bXAuYworKysrIGVsZnV0aWxzLTAuMTY2L3Rlc3RzL3NlY3Rpb25kdW1wLmMKK0BAIC0xOCw3ICsxOCw3IEBACisgI2luY2x1ZGUgPGNvbmZpZy5oPgorIAorICNpbmNsdWRlIDxlcnJuby5oPgorLSNpbmNsdWRlIDxlcnJvci5oPgorKyNpbmNsdWRlIDxlcnIuaD4KKyAjaW5jbHVkZSA8ZmNudGwuaD4KKyAjaW5jbHVkZSA8Z2VsZi5oPgorICNpbmNsdWRlIDxpbnR0eXBlcy5oPgorSW5kZXg6IGVsZnV0aWxzLTAuMTY2L3Rlc3RzL3ZhcmxvY3MuYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGVsZnV0aWxzLTAuMTY2Lm9yaWcvdGVzdHMvdmFybG9jcy5jCisrKysgZWxmdXRpbHMtMC4xNjYvdGVzdHMvdmFybG9jcy5jCitAQCAtMjUsNyArMjUsNyBAQAorICNpbmNsdWRlIDxkd2FyZi5oPgorICNpbmNsdWRlIDxzdGRpby5oPgorICNpbmNsdWRlIDxzdGRsaWIuaD4KKy0jaW5jbHVkZSA8ZXJyb3IuaD4KKysjaW5jbHVkZSA8ZXJyLmg+CisgI2luY2x1ZGUgPHN0cmluZy5oPgorICNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyAjaW5jbHVkZSA8c3lzL3N0YXQuaD4KK0luZGV4OiBlbGZ1dGlscy0wLjE2Ni90ZXN0cy92ZHNvc3ltcy5jCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZWxmdXRpbHMtMC4xNjYub3JpZy90ZXN0cy92ZHNvc3ltcy5jCisrKysgZWxmdXRpbHMtMC4xNjYvdGVzdHMvdmRzb3N5bXMuYworQEAgLTE4LDcgKzE4LDcgQEAKKyAjaW5jbHVkZSA8Y29uZmlnLmg+CisgI2luY2x1ZGUgPGFzc2VydC5oPgorICNpbmNsdWRlIDxlcnJuby5oPgorLSNpbmNsdWRlIDxlcnJvci5oPgorKyNpbmNsdWRlIDxlcnIuaD4KKyAjaW5jbHVkZSA8aW50dHlwZXMuaD4KKyAjaW5jbHVkZSA8c3RkaW8uaD4KKyAjaW5jbHVkZSA8c3RyaW5nLmg+CitJbmRleDogZWxmdXRpbHMtMC4xNjYvbGliZWxmL2VsZl9nZXRhcnN5bS5jCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZWxmdXRpbHMtMC4xNjYub3JpZy9saWJlbGYvZWxmX2dldGFyc3ltLmMKKysrKyBlbGZ1dGlscy0wLjE2Ni9saWJlbGYvZWxmX2dldGFyc3ltLmMKK0BAIC0zMDIsNyArMzAyLDcgQEAgZWxmX2dldGFyc3ltIChFbGYgKmVsZiwgc2l6ZV90ICpwdHIpCisgCQlhcnN5bVtjbnRdLmFzX29mZiA9ICgqdTMyKVtjbnRdOworIAorIAkgICAgICBhcnN5bVtjbnRdLmFzX2hhc2ggPSBfZGxfZWxmX2hhc2ggKHN0cl9kYXRhKTsKKy0JICAgICAgc3RyX2RhdGEgPSByYXdtZW1jaHIgKHN0cl9kYXRhLCAnXDAnKSArIDE7CisrCSAgICAgIHN0cl9kYXRhID0gbWVtY2hyIChzdHJfZGF0YSwgJ1wwJywgU0laRV9NQVgpICsgMTsKKyAJICAgIH0KKyAKKyAJICAvKiBBdCB0aGUgZW5kIGEgc3BlY2lhbCBlbnRyeS4gICovCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2VsZnV0aWxzL2VsZnV0aWxzLTAuMTY0LzAwMDEtZWxmX2dldGFyc3ltLVNpbGVuY2UtV2Vycm9yLW1heWJlLXVuaW5pdGlhbGl6ZWQtZmFscy5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZWxmdXRpbHMvZWxmdXRpbHMtMC4xNjYvMDAwMS1lbGZfZ2V0YXJzeW0tU2lsZW5jZS1XZXJyb3ItbWF5YmUtdW5pbml0aWFsaXplZC1mYWxzLnBhdGNoCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2VsZnV0aWxzL2VsZnV0aWxzLTAuMTY0LzAwMDEtZWxmX2dldGFyc3ltLVNpbGVuY2UtV2Vycm9yLW1heWJlLXVuaW5pdGlhbGl6ZWQtZmFscy5wYXRjaApyZW5hbWUgdG8gaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9lbGZ1dGlscy9lbGZ1dGlscy0wLjE2Ni8wMDAxLWVsZl9nZXRhcnN5bS1TaWxlbmNlLVdlcnJvci1tYXliZS11bmluaXRpYWxpemVkLWZhbHMucGF0Y2gKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZWxmdXRpbHMvZWxmdXRpbHMtMC4xNjQvMDAwMS1maXgtYS1zdGFjay11c2FnZS13YXJuaW5nLnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9lbGZ1dGlscy9lbGZ1dGlscy0wLjE2Ni8wMDAxLWZpeC1hLXN0YWNrLXVzYWdlLXdhcm5pbmcucGF0Y2gKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZWxmdXRpbHMvZWxmdXRpbHMtMC4xNjQvMDAwMS1maXgtYS1zdGFjay11c2FnZS13YXJuaW5nLnBhdGNoCnJlbmFtZSB0byBpbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2VsZnV0aWxzL2VsZnV0aWxzLTAuMTY2LzAwMDEtZml4LWEtc3RhY2stdXNhZ2Utd2FybmluZy5wYXRjaApkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9lbGZ1dGlscy9lbGZ1dGlscy0wLjE2NC8wMDAxLXJlbW92ZS10aGUtdW5uZWVkLWNoZWNraW5nLnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9lbGZ1dGlscy9lbGZ1dGlscy0wLjE2Ni8wMDAxLXJlbW92ZS10aGUtdW5uZWVkLWNoZWNraW5nLnBhdGNoCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2VsZnV0aWxzL2VsZnV0aWxzLTAuMTY0LzAwMDEtcmVtb3ZlLXRoZS11bm5lZWQtY2hlY2tpbmcucGF0Y2gKcmVuYW1lIHRvIGltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZWxmdXRpbHMvZWxmdXRpbHMtMC4xNjYvMDAwMS1yZW1vdmUtdGhlLXVubmVlZC1jaGVja2luZy5wYXRjaApkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9lbGZ1dGlscy9lbGZ1dGlscy0wLjE2NC8wMDAyLUFkZC1zdXBwb3J0LWZvci1taXBzNjQtYWJpcy1pbi1taXBzX3JldHZhbC5jLnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9lbGZ1dGlscy9lbGZ1dGlscy0wLjE2Ni8wMDAyLUFkZC1zdXBwb3J0LWZvci1taXBzNjQtYWJpcy1pbi1taXBzX3JldHZhbC5jLnBhdGNoCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2VsZnV0aWxzL2VsZnV0aWxzLTAuMTY0LzAwMDItQWRkLXN1cHBvcnQtZm9yLW1pcHM2NC1hYmlzLWluLW1pcHNfcmV0dmFsLmMucGF0Y2gKcmVuYW1lIHRvIGltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZWxmdXRpbHMvZWxmdXRpbHMtMC4xNjYvMDAwMi1BZGQtc3VwcG9ydC1mb3ItbWlwczY0LWFiaXMtaW4tbWlwc19yZXR2YWwuYy5wYXRjaApkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9lbGZ1dGlscy9lbGZ1dGlscy0wLjE2NC8wMDAzLUFkZC1taXBzLW42NC1yZWxvY2F0aW9uLWZvcm1hdC1oYWNrLnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9lbGZ1dGlscy9lbGZ1dGlscy0wLjE2Ni8wMDAzLUFkZC1taXBzLW42NC1yZWxvY2F0aW9uLWZvcm1hdC1oYWNrLnBhdGNoCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2VsZnV0aWxzL2VsZnV0aWxzLTAuMTY0LzAwMDMtQWRkLW1pcHMtbjY0LXJlbG9jYXRpb24tZm9ybWF0LWhhY2sucGF0Y2gKcmVuYW1lIHRvIGltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZWxmdXRpbHMvZWxmdXRpbHMtMC4xNjYvMDAwMy1BZGQtbWlwcy1uNjQtcmVsb2NhdGlvbi1mb3JtYXQtaGFjay5wYXRjaApkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9lbGZ1dGlscy9lbGZ1dGlscy0wLjE2NC9hYXJjaDY0X3Vpby5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZWxmdXRpbHMvZWxmdXRpbHMtMC4xNjYvYWFyY2g2NF91aW8ucGF0Y2gKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZWxmdXRpbHMvZWxmdXRpbHMtMC4xNjQvYWFyY2g2NF91aW8ucGF0Y2gKcmVuYW1lIHRvIGltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZWxmdXRpbHMvZWxmdXRpbHMtMC4xNjYvYWFyY2g2NF91aW8ucGF0Y2gKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZWxmdXRpbHMvZWxmdXRpbHMtMC4xNjQvYXJtX2JhY2tlbmQuZGlmZiBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZWxmdXRpbHMvZWxmdXRpbHMtMC4xNjYvYXJtX2JhY2tlbmQuZGlmZgpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9lbGZ1dGlscy9lbGZ1dGlscy0wLjE2NC9hcm1fYmFja2VuZC5kaWZmCnJlbmFtZSB0byBpbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2VsZnV0aWxzL2VsZnV0aWxzLTAuMTY2L2FybV9iYWNrZW5kLmRpZmYKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZWxmdXRpbHMvZWxmdXRpbHMtMC4xNjYvZWxmY21wLWZpeC1zZWxmLWNvbXBhcmlzaW9uLnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9lbGZ1dGlscy9lbGZ1dGlscy0wLjE2Ni9lbGZjbXAtZml4LXNlbGYtY29tcGFyaXNpb24ucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmMxNTBiYgotLS0gL2Rldi9udWxsCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZWxmdXRpbHMvZWxmdXRpbHMtMC4xNjYvZWxmY21wLWZpeC1zZWxmLWNvbXBhcmlzaW9uLnBhdGNoCkBAIC0wLDAgKzEsNDEgQEAKK0Zyb20gODM2YTE2ZmU1YjViYWI0YTNhZmUyYzk5MWMxMDQ2NTI3NzVjZTNhMyBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IERhdmlkIEFiZHVyYWNobWFub3YgPGRhdmlkbHRAY2Vybi5jaD4KK0RhdGU6IE1vbiwgMTEgQXByIDIwMTYgMTY6MDA6NTcgKzAyMDAKK1N1YmplY3Q6IGVsZmNtcDogZml4IHNlbGYtY29tcGFyaXNvbiBlcnJvciB3aXRoIEdDQyA2CitNSU1FLVZlcnNpb246IDEuMAorQ29udGVudC1UeXBlOiB0ZXh0L3BsYWluOyBjaGFyc2V0PVVURi04CitDb250ZW50LVRyYW5zZmVyLUVuY29kaW5nOiA4Yml0CisKK05vdGljZWQgd2l0aCBGZWRvcmEgMjQgQWxwaGEsIGdjYyAoR0NDKSA2LjAuMCAyMDE2MDQwNgorKFJlZCBIYXQgNi4wLjAtMC4yMCkuCisKK2VsZmNtcC5jOiBJbiBmdW5jdGlvbiDigJhtYWlu4oCZOgorZWxmY21wLmM6MzY0OjE5OTogZXJyb3I6IHNlbGYtY29tcGFyaXNvbiBhbHdheXMgZXZhbHVhdGVzCit0byBmYWxzZSBbLVdlcnJvcj10YXV0b2xvZ2ljYWwtY29tcGFyZV0KKyAgICAgICAgaWYgKHVubGlrZWx5IChuYW1lMSA9PSBOVUxMIHx8IG5hbWUyID09IE5VTEwKKworU2lnbmVkLW9mZi1ieTogRGF2aWQgQWJkdXJhY2htYW5vdiA8ZGF2aWRsdEBjZXJuLmNoPgorLS0tCisKK1Vwc3RyZWFtLVN0YXR1czogQmFja3BvcnQKKworIHNyYy9DaGFuZ2VMb2cgfCA0ICsrKysKKyBzcmMvZWxmY21wLmMgIHwgMiArLQorIDIgZmlsZXMgY2hhbmdlZCwgNSBpbnNlcnRpb25zKCspLCAxIGRlbGV0aW9uKC0pCisKK2RpZmYgLS1naXQgYS9zcmMvZWxmY21wLmMgYi9zcmMvZWxmY21wLmMKK2luZGV4IDg1MmI5MmYuLjdiNWQzOWMgMTAwNjQ0CistLS0gYS9zcmMvZWxmY21wLmMKKysrKyBiL3NyYy9lbGZjbXAuYworQEAgLTM2OCw3ICszNjgsNyBAQCBtYWluIChpbnQgYXJnYywgY2hhciAqYXJndltdKQorIAkJCQkmJiBzeW0xLT5zdF9zaG5keCAhPSBTSE5fVU5ERUYpCisgCQkJICAgIHx8IHN5bTEtPnN0X2luZm8gIT0gc3ltMi0+c3RfaW5mbworIAkJCSAgICB8fCBzeW0xLT5zdF9vdGhlciAhPSBzeW0yLT5zdF9vdGhlcgorLQkJCSAgICB8fCBzeW0xLT5zdF9zaG5keCAhPSBzeW0xLT5zdF9zaG5keCkpCisrCQkJICAgIHx8IHN5bTEtPnN0X3NobmR4ICE9IHN5bTItPnN0X3NobmR4KSkKKyAJCXsKKyAJCSAgLy8gWFhYIERvIHdlIHdhbnQgdG8gYWxsb3cgcmVvcmRlcmVkIHN5bWJvbCB0YWJsZXM/CisgCQlzeW10YWJfbWlzbWF0Y2g6CistLSAKK2NnaXQgdjAuMTIKKwpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9lbGZ1dGlscy9lbGZ1dGlscy0wLjE2NC9maXhoZWFkZXJjaGVjay5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZWxmdXRpbHMvZWxmdXRpbHMtMC4xNjYvZml4aGVhZGVyY2hlY2sucGF0Y2gKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZWxmdXRpbHMvZWxmdXRpbHMtMC4xNjQvZml4aGVhZGVyY2hlY2sucGF0Y2gKcmVuYW1lIHRvIGltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZWxmdXRpbHMvZWxmdXRpbHMtMC4xNjYvZml4aGVhZGVyY2hlY2sucGF0Y2gKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZWxmdXRpbHMvZWxmdXRpbHMtMC4xNjQvaHBwYV9iYWNrZW5kLmRpZmYgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2VsZnV0aWxzL2VsZnV0aWxzLTAuMTY2L2hwcGFfYmFja2VuZC5kaWZmCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2VsZnV0aWxzL2VsZnV0aWxzLTAuMTY0L2hwcGFfYmFja2VuZC5kaWZmCnJlbmFtZSB0byBpbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2VsZnV0aWxzL2VsZnV0aWxzLTAuMTY2L2hwcGFfYmFja2VuZC5kaWZmCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2VsZnV0aWxzL2VsZnV0aWxzLTAuMTY0L2tmcmVlYnNkX3BhdGgucGF0Y2ggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2VsZnV0aWxzL2VsZnV0aWxzLTAuMTY2L2tmcmVlYnNkX3BhdGgucGF0Y2gKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZWxmdXRpbHMvZWxmdXRpbHMtMC4xNjQva2ZyZWVic2RfcGF0aC5wYXRjaApyZW5hbWUgdG8gaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9lbGZ1dGlscy9lbGZ1dGlscy0wLjE2Ni9rZnJlZWJzZF9wYXRoLnBhdGNoCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2VsZnV0aWxzL2VsZnV0aWxzLTAuMTY0L202OGtfYmFja2VuZC5kaWZmIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9lbGZ1dGlscy9lbGZ1dGlscy0wLjE2Ni9tNjhrX2JhY2tlbmQuZGlmZgpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9lbGZ1dGlscy9lbGZ1dGlscy0wLjE2NC9tNjhrX2JhY2tlbmQuZGlmZgpyZW5hbWUgdG8gaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9lbGZ1dGlscy9lbGZ1dGlscy0wLjE2Ni9tNjhrX2JhY2tlbmQuZGlmZgpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9lbGZ1dGlscy9lbGZ1dGlscy0wLjE2NC9taXBzX2JhY2tlbmQuZGlmZiBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZWxmdXRpbHMvZWxmdXRpbHMtMC4xNjYvbWlwc19iYWNrZW5kLmRpZmYKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZWxmdXRpbHMvZWxmdXRpbHMtMC4xNjQvbWlwc19iYWNrZW5kLmRpZmYKcmVuYW1lIHRvIGltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZWxmdXRpbHMvZWxmdXRpbHMtMC4xNjYvbWlwc19iYWNrZW5kLmRpZmYKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZWxmdXRpbHMvZWxmdXRpbHMtMC4xNjQvbWlwc19yZWFkZWxmX3cucGF0Y2ggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2VsZnV0aWxzL2VsZnV0aWxzLTAuMTY2L21pcHNfcmVhZGVsZl93LnBhdGNoCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2VsZnV0aWxzL2VsZnV0aWxzLTAuMTY0L21pcHNfcmVhZGVsZl93LnBhdGNoCnJlbmFtZSB0byBpbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2VsZnV0aWxzL2VsZnV0aWxzLTAuMTY2L21pcHNfcmVhZGVsZl93LnBhdGNoCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2VsZnV0aWxzL2VsZnV0aWxzLTAuMTY0L3NoYWRvdy5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZWxmdXRpbHMvZWxmdXRpbHMtMC4xNjYvc2hhZG93LnBhdGNoCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2VsZnV0aWxzL2VsZnV0aWxzLTAuMTY0L3NoYWRvdy5wYXRjaApyZW5hbWUgdG8gaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9lbGZ1dGlscy9lbGZ1dGlscy0wLjE2Ni9zaGFkb3cucGF0Y2gKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZWxmdXRpbHMvZWxmdXRpbHMtMC4xNjQvdGVzdHN1aXRlLWlnbm9yZS1lbGZsaW50LmRpZmYgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2VsZnV0aWxzL2VsZnV0aWxzLTAuMTY2L3Rlc3RzdWl0ZS1pZ25vcmUtZWxmbGludC5kaWZmCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2VsZnV0aWxzL2VsZnV0aWxzLTAuMTY0L3Rlc3RzdWl0ZS1pZ25vcmUtZWxmbGludC5kaWZmCnJlbmFtZSB0byBpbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2VsZnV0aWxzL2VsZnV0aWxzLTAuMTY2L3Rlc3RzdWl0ZS1pZ25vcmUtZWxmbGludC5kaWZmCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2VsZnV0aWxzL2VsZnV0aWxzLTAuMTY2L3VjbGliYy1zdXBwb3J0LnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9lbGZ1dGlscy9lbGZ1dGlscy0wLjE2Ni91Y2xpYmMtc3VwcG9ydC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42Mjk5OTk4Ci0tLSAvZGV2L251bGwKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9lbGZ1dGlscy9lbGZ1dGlscy0wLjE2Ni91Y2xpYmMtc3VwcG9ydC5wYXRjaApAQCAtMCwwICsxLDEyOCBAQAorRnJvbSAzZGFlYzJkZDExYTA0OTU1Zjk1ZThmNjVhNDg4MjAxMDNkODRkYmVjIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogSnVubGluZyBaaGVuZyA8emhlbmdqdW5saW5nQGh1YXdlaS5jb20+CitEYXRlOiBUaHUsIDkgQXByIDIwMTUgMTI6MTI6NDkgKzAwMDAKK1N1YmplY3Q6IFtQQVRDSF0gdWNsaWJjIHN1cHBvcnQgZm9yIGVsZnV0aWxzIDAuMTYxCisKK29uIHVjbGliYyBzeXN0ZW1zIGxpYmludGwgYW5kIGxpYnVhcmdwIGFyZSBzZXBhcmF0ZSBmcm9tIGxpYmMuCitzbyB0aGV5IG5lZWQgdG8gYmUgc3BlY2lmaWVkIG9uIGNvbW1hbmRsaW5lIHdoZW4gd2UgdXNlIHByb3h5LWxpYmludGwKK3RoZW4gbGliaW50bCBpcyBhIHN0YXRpYyBhcmNoaXZlIHNvIGl0IHNob3VsZCBiZSBsaXN0ZWQgbGFzdCBzaW5jZQorZWxmdXRpbHMgZG9lcyBub3QgcmVzcGVjdCBkaXNhYmxlLW5scyB3ZSBuZWVkIHRvIGxpbmsgaW4gbGliaW50bAorCitXZSBhZGQgYSBuZXcgb3B0aW9uIC0tZW5hYmxlLXVjbGliYyB3aGljaCB3aWxsIGJlIHVzZWQgdG8gY29udHJvbAordGhlIHVjbGliYyBzcGVjaWZpYyBjb25maWd1cmF0aW9ucyBkdXJpbmcgYnVpbGQuCisKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbdWNsaWJjIHNwZWNpZmljXQorCitTaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW0+CitTaWduZWQtb2ZmLWJ5OiBKdW5saW5nIFpoZW5nIDx6aGVuZ2p1bmxpbmdAaHVhd2VpLmNvbT4KK1tKdW5saW5nIFpoZW5nOgorIC0gYWRqdXN0IGNvbnRleHQKK10KKy0tLQorIGNvbmZpZ3VyZS5hYyAgICAgICB8IDggKysrKysrKysKKyBsaWJjcHUvTWFrZWZpbGUuYW0gfCA0ICsrKysKKyBsaWJkdy9NYWtlZmlsZS5hbSAgfCA3ICsrKysrKy0KKyBsaWJlbGYvTWFrZWZpbGUuYW0gfCA1ICsrKysrCisgNCBmaWxlcyBjaGFuZ2VkLCAyMyBpbnNlcnRpb25zKCspLCAxIGRlbGV0aW9uKC0pCisKK0luZGV4OiBlbGZ1dGlscy0wLjE2Ni9jb25maWd1cmUuYWMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBlbGZ1dGlscy0wLjE2Ni5vcmlnL2NvbmZpZ3VyZS5hYworKysrIGVsZnV0aWxzLTAuMTY2L2NvbmZpZ3VyZS5hYworQEAgLTc5LDYgKzc5LDE0IEBAIEFTX0lGKFt0ZXN0ICIkdXNlX2xvY2tzIiA9IHllc10sCisgCisgQUhfVEVNUExBVEUoW1VTRV9MT0NLU10sIFtEZWZpbmVkIGlmIGxpYnJhcmllcyBzaG91bGQgYmUgdGhyZWFkLXNhZmUuXSkKKyAKKytBQ19BUkdfRU5BQkxFKFt1Y2xpYmNdLAorK0FTX0hFTFBfU1RSSU5HKFstLWVuYWJsZS11Y2xpYmNdLCBbVXNlIHVjbGliYyBmb3Igc3lzdGVtIGxpYnJhcmllc10pLAorK3VzZV91Y2xpYmM9eWVzLCB1c2VfdWNsaWJjPW5vKQorK0FNX0NPTkRJVElPTkFMKFVTRV9VQ0xJQkMsIHRlc3QgIiR1c2VfdWNsaWJjIiA9IHllcykKKytBU19JRihbdGVzdCAiJHVzZV91Y2xpYmMiID0geWVzXSwgW0FDX0RFRklORShVU0VfVUNMSUJDKV0pCisrCisrQUhfVEVNUExBVEUoW1VTRV9VQ0xJQkNdLCBbRGVmaW5lZCBpZiB1Y2xpYmMgbGlicmFyaWVzIGFyZSB1c2VkLl0pCisrCisgQUNfUFJPR19DQworIEFDX1BST0dfUkFOTElCCisgQUNfUFJPR19ZQUNDCitAQCAtMzQ3LDE4ICszNTUsMTMgQEAgQUNfTElOS19JRkVMU0UoCisgKQorIAorIGRubCBJZiBvdXIgbGliYyBkb2Vzbid0IHByb3ZpZGUgYXJncCwgdGhlbiB0ZXN0IGZvciBsaWJhcmdwCistaWYgdGVzdCAiJGxpYmNfaGFzX2FyZ3AiID0gImZhbHNlIiA7IHRoZW4KKy0JQUNfTVNHX1dBUk4oImxpYmMgZG9lcyBub3QgaGF2ZSBhcmdwIikKKy0JQUNfQ0hFQ0tfTElCKFthcmdwXSwgW2FyZ3BfcGFyc2VdLCBbaGF2ZV9hcmdwPSJ0cnVlIl0sIFtoYXZlX2FyZ3A9ImZhbHNlIl0pCistCistCWlmIHRlc3QgIiRoYXZlX2FyZ3AiID0gImZhbHNlIjsgdGhlbgorLQkJQUNfTVNHX0VSUk9SKCJubyBsaWJhcmdwIGZvdW5kIikKKy0JZWxzZQorLQkJYXJncF9MREFERD0iLWxhcmdwIgorLQlmaQorLWVsc2UKKy0JYXJncF9MREFERD0iIgorLWZpCisrQVNfSUYoW3Rlc3QgIngkbGliY19oYXNfYXJncCIgPSAieGZhbHNlIl0sCisrCVtBQ19NU0dfV0FSTigibGliYyBkb2VzIG5vdCBoYXZlIGFyZ3AiKQorKwlBQ19DSEVDS19MSUIoW2FyZ3BdLCBbYXJncF9wYXJzZV0sIFtoYXZlX2FyZ3A9InRydWUiIGFyZ3BfTERBREQ9Ii1sYXJncCJdLCBbaGF2ZV9hcmdwPSJmYWxzZSJdKV0sIFthcmdwX0xEQUREPSIiXSkKKysKKytBU19JRihbdGVzdCAieCRsaWJjX2hhc19hcmdwIiA9ICJ4ZmFsc2UiIC1hICJ4JGhhdmVfYXJncCIgPSAieGZhbHNlIl0sCisrCUFDX0NIRUNLX0xJQihbdWFyZ3BdLCBbYXJncF9wYXJzZV0sIFtoYXZlX3VhcmdwPSJ0cnVlIiBhcmdwX0xEQUREPSItbHVhcmdwIl0sIFtoYXZlX3VhcmdwPSJmYWxzZSJdKV0sIFthcmdwX0xEQUREPSIiXSkKKysKKyBBQ19TVUJTVChbYXJncF9MREFERF0pCisgCisgZG5sIFRoZSBkaXJlY3RvcmllcyB3aXRoIGNvbnRlbnQuCitJbmRleDogZWxmdXRpbHMtMC4xNjYvbGliY3B1L01ha2VmaWxlLmFtCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZWxmdXRpbHMtMC4xNjYub3JpZy9saWJjcHUvTWFrZWZpbGUuYW0KKysrKyBlbGZ1dGlscy0wLjE2Ni9saWJjcHUvTWFrZWZpbGUuYW0KK0BAIC04MCw2ICs4MCwxMCBAQCBpMzg2X3BhcnNlX0NGTEFHUyA9IC1ETk1ORVM9ImB3YyAtbCA8IGkzCisgaTM4Nl9sZXgubzogaTM4Nl9wYXJzZS5oCisgaTM4Nl9nZW5kaXNfTERBREQgPSAkKGxpYmV1KSAtbG0KKyAKKytpZiBVU0VfVUNMSUJDCisraTM4Nl9nZW5kaXNfTERBREQgKz0gLWxpbnRsCisrZW5kaWYKKysKKyBpMzg2X3BhcnNlLmg6IGkzODZfcGFyc2UuYyA7CisgCisgRVhUUkFfRElTVCA9IGRlZnMvaTM4NgorSW5kZXg6IGVsZnV0aWxzLTAuMTY2L2xpYmR3L01ha2VmaWxlLmFtCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZWxmdXRpbHMtMC4xNjYub3JpZy9saWJkdy9NYWtlZmlsZS5hbQorKysrIGVsZnV0aWxzLTAuMTY2L2xpYmR3L01ha2VmaWxlLmFtCitAQCAtMTAyLDYgKzEwMiwxMSBAQCBlbmRpZgorIGxpYmR3X3BpY19hX1NPVVJDRVMgPQorIGFtX2xpYmR3X3BpY19hX09CSkVDVFMgPSAkKGxpYmR3X2FfU09VUkNFUzouYz0ub3MpCisgCisrbGliZHdfc29fTERMSUJTID0KKytpZiBVU0VfVUNMSUJDCisrbGliZHdfc29fTERMSUJTICs9IC1saW50bAorK2VuZGlmCisrCisgbGliZHdfc29fU09VUkNFUyA9CisgbGliZHcuc28kKEVYRUVYVCk6ICQoc3JjZGlyKS9saWJkdy5tYXAgbGliZHdfcGljLmEgLi4vbGliZHdlbGYvbGliZHdlbGZfcGljLmEgXAorIAkgIC4uL2xpYmR3ZmwvbGliZHdmbF9waWMuYSAuLi9saWJlYmwvbGliZWJsLmEgXAorQEAgLTExMiw3ICsxMTcsNyBAQCBsaWJkdy5zbyQoRVhFRVhUKTogJChzcmNkaXIpL2xpYmR3Lm1hcCBsCisgCQktV2wsLS1lbmFibGUtbmV3LWR0YWdzLC1ycGF0aCwkKHBrZ2xpYmRpcikgXAorIAkJLVdsLC0tdmVyc2lvbi1zY3JpcHQsJDwsLS1uby11bmRlZmluZWQgXAorIAkJLVdsLC0td2hvbGUtYXJjaGl2ZSAkKGZpbHRlci1vdXQgJDwsJF4pIC1XbCwtLW5vLXdob2xlLWFyY2hpdmVcCistCQktbGRsIC1seiAkKGFyZ3BfTERBREQpICQoemlwX0xJQlMpCisrCQktbGRsIC1seiAkKGFyZ3BfTERBREQpICQoemlwX0xJQlMpICQobGliZHdfc29fTERMSUJTKQorIAlAJCh0ZXh0cmVsX2NoZWNrKQorIAkkKEFNX1ZfYXQpbG4gLWZzICRAICRALiQoVkVSU0lPTikKKyAKK0luZGV4OiBlbGZ1dGlscy0wLjE2Ni9saWJlbGYvTWFrZWZpbGUuYW0KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBlbGZ1dGlscy0wLjE2Ni5vcmlnL2xpYmVsZi9NYWtlZmlsZS5hbQorKysrIGVsZnV0aWxzLTAuMTY2L2xpYmVsZi9NYWtlZmlsZS5hbQorQEAgLTk2LDYgKzk2LDExIEBAIGxpYmVsZl9waWNfYV9TT1VSQ0VTID0KKyBhbV9saWJlbGZfcGljX2FfT0JKRUNUUyA9ICQobGliZWxmX2FfU09VUkNFUzouYz0ub3MpCisgCisgbGliZWxmX3NvX0xETElCUyA9IC1segorKworK2lmIFVTRV9VQ0xJQkMKKytsaWJlbGZfc29fTERMSUJTICs9IC1saW50bAorK2VuZGlmCisrCisgaWYgVVNFX0xPQ0tTCisgbGliZWxmX3NvX0xETElCUyArPSAtbHB0aHJlYWQKKyBlbmRpZgpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9lbGZ1dGlscy9lbGZ1dGlsc18wLjE0OC5iYiBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZWxmdXRpbHMvZWxmdXRpbHNfMC4xNDguYmIKaW5kZXggZmY1MzI1Ny4uNjA4MGMxNyAxMDA2NDQKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9lbGZ1dGlscy9lbGZ1dGlsc18wLjE0OC5iYgorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2VsZnV0aWxzL2VsZnV0aWxzXzAuMTQ4LmJiCkBAIC0zNCw2ICszNCw3IEBACiAgICAgICAgIGZpbGU6Ly9GaXhfZWxmX2N2dF9ndW5oYXNoLnBhdGNoIFwKICAgICAgICAgZmlsZTovL2VsZl9iZWdpbi5jLUNWRS0yMDE0LTk0NDctZml4LnBhdGNoIFwKICAgICAgICAgZmlsZTovL2ZpeC1idWlsZC1nY2MtNC44LnBhdGNoIFwKKyAgICAgICAgZmlsZTovL2djYzYucGF0Y2ggXAogIgogIyBPbmx5IGFwcGx5IHdoZW4gYnVpbGRpbmcgdWNsaWJjIGJhc2VkIHRhcmdldCByZWNpcGUKIFNSQ19VUklfYXBwZW5kX2xpYmMtdWNsaWJjID0gIiBmaWxlOi8vdWNsaWJjLXN1cHBvcnQtZm9yLWVsZnV0aWxzLTAuMTQ4LnBhdGNoIgpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9lbGZ1dGlscy9lbGZ1dGlsc18wLjE2NC5iYiBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZWxmdXRpbHMvZWxmdXRpbHNfMC4xNjQuYmIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQ5NjRjMDUuLjAwMDAwMDAKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9lbGZ1dGlscy9lbGZ1dGlsc18wLjE2NC5iYgorKysgL2Rldi9udWxsCkBAIC0xLDg5ICswLDAgQEAKLVNVTU1BUlkgPSAiVXRpbGl0aWVzIGFuZCBsaWJyYXJpZXMgZm9yIGhhbmRsaW5nIGNvbXBpbGVkIG9iamVjdCBmaWxlcyIKLUhPTUVQQUdFID0gImh0dHBzOi8vZmVkb3JhaG9zdGVkLm9yZy9lbGZ1dGlscyIKLVNFQ1RJT04gPSAiYmFzZSIKLUxJQ0VOU0UgPSAiKEdQTHYzICYgRWxmdXRpbHMtRXhjZXB0aW9uKSIKLUxJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PWQzMjIzOWJjYjY3MzQ2M2FiODc0ZTgwZDQ3ZmFlNTA0IgotREVQRU5EUyA9ICJsaWJ0b29sIGJ6aXAyIHpsaWIgdmlydHVhbC9saWJpbnRsIgotREVQRU5EU19hcHBlbmRfbGliYy1tdXNsID0gIiBhcmdwLXN0YW5kYWxvbmUgZnRzICIKLQotU1JDX1VSSSA9ICJodHRwczovL2ZlZG9yYWhvc3RlZC5vcmcvcmVsZWFzZXMvZS9sL2VsZnV0aWxzLyR7UFZ9LyR7QlB9LnRhci5iejIiCi0KLVNSQ19VUklbbWQ1c3VtXSA9ICIyZTQ1MzZjMWM0ODAzNGYxODhhODA3ODlhNTkxMTRkOCIKLVNSQ19VUklbc2hhMjU2c3VtXSA9ICI5NjgzYzAyNTkyOGExMmQwNmI3ZmU4MTI5MjhhYTYyMzUyNDllMjJkMTk3ZDA4NmY3MDg0NjA2YTQ4MTY1OTAwIgotCi1TUkNfVVJJICs9ICJcCi0gICAgICAgIGZpbGU6Ly9kc28tbGluay1jaGFuZ2UucGF0Y2ggXAotICAgICAgICBmaWxlOi8vRml4X2VsZl9jdnRfZ3VuaGFzaC5wYXRjaCBcCi0gICAgICAgIGZpbGU6Ly9maXhoZWFkZXJjaGVjay5wYXRjaCBcCi0gICAgICAgIGZpbGU6Ly8wMDAxLWVsZl9nZXRhcnN5bS1TaWxlbmNlLVdlcnJvci1tYXliZS11bmluaXRpYWxpemVkLWZhbHMucGF0Y2ggXAotICAgICAgICBmaWxlOi8vMDAwMS1yZW1vdmUtdGhlLXVubmVlZC1jaGVja2luZy5wYXRjaCBcCi0gICAgICAgIGZpbGU6Ly8wMDAxLWZpeC1hLXN0YWNrLXVzYWdlLXdhcm5pbmcucGF0Y2ggXAotICAgICAgICBmaWxlOi8vYWFyY2g2NF91aW8ucGF0Y2ggXAotICAgICAgICBmaWxlOi8vc2hhZG93LnBhdGNoIFwKLSIKLQotIyBwaWNrIHRoZSBwYXRjaCBmcm9tIGRlYmlhbgotIyBodHRwOi8vZnRwLmRlLmRlYmlhbi5vcmcvZGViaWFuL3Bvb2wvbWFpbi9lL2VsZnV0aWxzL2VsZnV0aWxzXzAuMTY0LTEuZGViaWFuLnRhci54egotU1JDX1VSSSArPSAiXAotICAgICAgICBmaWxlOi8vaHBwYV9iYWNrZW5kLmRpZmYgXAotICAgICAgICBmaWxlOi8vYXJtX2JhY2tlbmQuZGlmZiBcCi0gICAgICAgIGZpbGU6Ly9taXBzX2JhY2tlbmQuZGlmZiBcCi0gICAgICAgIGZpbGU6Ly9tNjhrX2JhY2tlbmQuZGlmZiBcCi0gICAgICAgIGZpbGU6Ly90ZXN0c3VpdGUtaWdub3JlLWVsZmxpbnQuZGlmZiBcCi0gICAgICAgIGZpbGU6Ly9taXBzX3JlYWRlbGZfdy5wYXRjaCBcCi0gICAgICAgIGZpbGU6Ly9rZnJlZWJzZF9wYXRoLnBhdGNoIFwKLSAgICAgICAgZmlsZTovLzAwMDEtSWdub3JlLWRpZmZlcmVuY2VzLWJldHdlZW4tbWlwcy1tYWNoaW5lLWlkZW50aWZpZXJzLnBhdGNoIFwKLSAgICAgICAgZmlsZTovLzAwMDItQWRkLXN1cHBvcnQtZm9yLW1pcHM2NC1hYmlzLWluLW1pcHNfcmV0dmFsLmMucGF0Y2ggXAotICAgICAgICBmaWxlOi8vMDAwMy1BZGQtbWlwcy1uNjQtcmVsb2NhdGlvbi1mb3JtYXQtaGFjay5wYXRjaCBcCi0gICAgICAgIGZpbGU6Ly91Y2xpYmMtc3VwcG9ydC5wYXRjaCBcCi0iCi1TUkNfVVJJX2FwcGVuZF9saWJjLW11c2wgPSAiIGZpbGU6Ly8wMDAxLWJ1aWxkLVByb3ZpZGUtYWx0ZXJuYXRpdmVzLWZvci1nbGliYy1hc3N1bXB0aW9ucy1oZWwucGF0Y2ggIgotCi0jIFRoZSBidWlsZHN5c3RlbSB3YW50cyB0byBnZW5lcmF0ZSAyIC5oIGZpbGVzIGZyb20gc291cmNlIHVzaW5nIGEgYmluYXJ5IGl0IGp1c3QgYnVpbHQsCi0jIHdoaWNoIGNhbiBub3QgcGFzcyB0aGUgY3Jvc3MgY29tcGlsaW5nLCBzbyBsZXQncyB3b3JrIGFyb3VuZCBpdCBieSBhZGRpbmcgMiAuaCBmaWxlcwotIyBhbG9uZyB3aXRoIHRoZSBkb19jb25maWd1cmVfcHJlcGVuZCgpCi0KLWluaGVyaXQgYXV0b3Rvb2xzIGdldHRleHQKLQotRVhUUkFfT0VDT05GID0gIi0tcHJvZ3JhbS1wcmVmaXg9ZXUtIC0td2l0aG91dC1sem1hIgotRVhUUkFfT0VDT05GX2FwcGVuZF9jbGFzcy1uYXRpdmUgPSAiIC0td2l0aG91dC1iemxpYiIKLUVYVFJBX09FQ09ORl9hcHBlbmRfbGliYy11Y2xpYmMgPSAiIC0tZW5hYmxlLXVjbGliYyIKLQotZG9faW5zdGFsbF9hcHBlbmQoKSB7Ci0JaWYgWyAiJHtUQVJHRVRfQVJDSH0iICE9ICJ4ODZfNjQiIF0gJiYgWyAteiBgZWNobyAiJHtUQVJHRVRfQVJDSH0ifGdyZXAgJ2kuODYnYCBdO3RoZW4KLQkJcm0gLWYgJHtEfSR7YmluZGlyfS9ldS1vYmpkdW1wCi0JZmkKLX0KLQotIyB3ZSBjYW4gbm90IGJ1aWxkIGNvbXBsZXRlIGVsZnV0aWxzIHdoZW4gdXNpbmcgdWNsaWJjCi0jIGJ1dCBzb21lIHJlY2lwZXMgZS5nLiBnY2MgNC41IGRlcGVuZHMgb24gbGliZWxmIHNvIHdlCi0jIGJ1aWxkIG9ubHkgbGliZWxmIGZvciB1Y2xpYmMgY2FzZQotCi1FWFRSQV9PRU1BS0VfbGliYy11Y2xpYmMgPSAiLUMgbGliZWxmIgotRVhUUkFfT0VNQUtFX2NsYXNzLW5hdGl2ZSA9ICIiCi1FWFRSQV9PRU1BS0VfY2xhc3MtbmF0aXZlc2RrID0gIiIKLQotQUxMT1dfRU1QVFlfJHtQTn1fbGliYy1tdXNsID0gIjEiCi0KLUJCQ0xBU1NFWFRFTkQgPSAibmF0aXZlIG5hdGl2ZXNkayIKLQotIyBQYWNrYWdlIHV0aWxpdGllcyBzZXBhcmF0ZWx5Ci1QQUNLQUdFUyA9KyAiJHtQTn0tYmludXRpbHMgbGliZWxmIGxpYmFzbSBsaWJkdyIKLUZJTEVTXyR7UE59LWJpbnV0aWxzID0gIlwKLSAgICAke2JpbmRpcn0vZXUtYWRkcjJsaW5lIFwKLSAgICAke2JpbmRpcn0vZXUtbGQgXAotICAgICR7YmluZGlyfS9ldS1ubSBcCi0gICAgJHtiaW5kaXJ9L2V1LXJlYWRlbGYgXAotICAgICR7YmluZGlyfS9ldS1zaXplIFwKLSAgICAke2JpbmRpcn0vZXUtc3RyaXAiCi0KLUZJTEVTX2xpYmVsZiA9ICIke2xpYmRpcn0vbGliZWxmLSR7UFZ9LnNvICR7bGliZGlyfS9saWJlbGYuc28uKiIKLUZJTEVTX2xpYmFzbSA9ICIke2xpYmRpcn0vbGliYXNtLSR7UFZ9LnNvICR7bGliZGlyfS9saWJhc20uc28uKiIKLUZJTEVTX2xpYmR3ICA9ICIke2xpYmRpcn0vbGliZHctJHtQVn0uc28gJHtsaWJkaXJ9L2xpYmR3LnNvLiogJHtsaWJkaXJ9L2VsZnV0aWxzL2xpYioiCi0jIFNvbWUgcGFja2FnZXMgaGF2ZSB0aGUgdmVyc2lvbiBwcmVjZWVkaW5nIHRoZSAuc28gaW5zdGVhZCBwcm9wZXJseQotIyB2ZXJzaW9uZWQgLnNvLjx2ZXJzaW9uPiwgc28gd2UgbmVlZCB0byByZW9yZGVyIGFuZCByZXBhY2thZ2UuCi0jRklMRVNfJHtQTn0gKz0gIiR7bGliZGlyfS8qLSR7UFZ9LnNvICR7YmFzZV9saWJkaXJ9LyotJHtQVn0uc28iCi0jRklMRVNfU09MSUJTREVWID0gIiR7bGliZGlyfS9saWJhc20uc28gJHtsaWJkaXJ9L2xpYmR3LnNvICR7bGliZGlyfS9saWJlbGYuc28iCi0KLSMgVGhlIHBhY2thZ2UgY29udGFpbnMgc3ltbGlua3MgdGhhdCB0cmlwIHVwIGluc2FuZQotSU5TQU5FX1NLSVBfJHtNTFBSRUZJWH1saWJkdyA9ICJkZXYtc28iCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2VsZnV0aWxzL2VsZnV0aWxzXzAuMTY2LmJiIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9lbGZ1dGlscy9lbGZ1dGlsc18wLjE2Ni5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41YzQzNmQzCi0tLSAvZGV2L251bGwKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9lbGZ1dGlscy9lbGZ1dGlsc18wLjE2Ni5iYgpAQCAtMCwwICsxLDg5IEBACitTVU1NQVJZID0gIlV0aWxpdGllcyBhbmQgbGlicmFyaWVzIGZvciBoYW5kbGluZyBjb21waWxlZCBvYmplY3QgZmlsZXMiCitIT01FUEFHRSA9ICJodHRwczovL2ZlZG9yYWhvc3RlZC5vcmcvZWxmdXRpbHMiCitTRUNUSU9OID0gImJhc2UiCitMSUNFTlNFID0gIihHUEx2MyAmIEVsZnV0aWxzLUV4Y2VwdGlvbikiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT1kMzIyMzliY2I2NzM0NjNhYjg3NGU4MGQ0N2ZhZTUwNCIKK0RFUEVORFMgPSAibGlidG9vbCBiemlwMiB6bGliIHZpcnR1YWwvbGliaW50bCIKK0RFUEVORFNfYXBwZW5kX2xpYmMtbXVzbCA9ICIgYXJncC1zdGFuZGFsb25lIGZ0cyAiCisKK1NSQ19VUkkgPSAiaHR0cHM6Ly9mZWRvcmFob3N0ZWQub3JnL3JlbGVhc2VzL2UvbC9lbGZ1dGlscy8ke1BWfS8ke0JQfS50YXIuYnoyIgorU1JDX1VSSVttZDVzdW1dID0gImQ0ZTQ2MmI3ODkxOTE1ZGM1MzI2YmNjZWZhMjAyNGZmIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjNjMDU2OTE0YzhhNDM4YjIxMGJlMGQ3OTA0NjNiOTYwZmM3OWQyMzRjM2YwNWNlNzA3Y2JmZjgwZTk0Y2JhMzAiCisKK1NSQ19VUkkgKz0gIlwKKyAgICAgICAgZmlsZTovL2Rzby1saW5rLWNoYW5nZS5wYXRjaCBcCisgICAgICAgIGZpbGU6Ly9GaXhfZWxmX2N2dF9ndW5oYXNoLnBhdGNoIFwKKyAgICAgICAgZmlsZTovL2ZpeGhlYWRlcmNoZWNrLnBhdGNoIFwKKyAgICAgICAgZmlsZTovLzAwMDEtZWxmX2dldGFyc3ltLVNpbGVuY2UtV2Vycm9yLW1heWJlLXVuaW5pdGlhbGl6ZWQtZmFscy5wYXRjaCBcCisgICAgICAgIGZpbGU6Ly8wMDAxLXJlbW92ZS10aGUtdW5uZWVkLWNoZWNraW5nLnBhdGNoIFwKKyAgICAgICAgZmlsZTovLzAwMDEtZml4LWEtc3RhY2stdXNhZ2Utd2FybmluZy5wYXRjaCBcCisgICAgICAgIGZpbGU6Ly9hYXJjaDY0X3Vpby5wYXRjaCBcCisgICAgICAgIGZpbGU6Ly9zaGFkb3cucGF0Y2ggXAorIgorCisjIHBpY2sgdGhlIHBhdGNoIGZyb20gZGViaWFuCisjIGh0dHA6Ly9mdHAuZGUuZGViaWFuLm9yZy9kZWJpYW4vcG9vbC9tYWluL2UvZWxmdXRpbHMvZWxmdXRpbHNfMC4xNjQtMS5kZWJpYW4udGFyLnh6CitTUkNfVVJJICs9ICJcCisgICAgICAgIGZpbGU6Ly9ocHBhX2JhY2tlbmQuZGlmZiBcCisgICAgICAgIGZpbGU6Ly9hcm1fYmFja2VuZC5kaWZmIFwKKyAgICAgICAgZmlsZTovL21pcHNfYmFja2VuZC5kaWZmIFwKKyAgICAgICAgZmlsZTovL202OGtfYmFja2VuZC5kaWZmIFwKKyAgICAgICAgZmlsZTovL3Rlc3RzdWl0ZS1pZ25vcmUtZWxmbGludC5kaWZmIFwKKyAgICAgICAgZmlsZTovL21pcHNfcmVhZGVsZl93LnBhdGNoIFwKKyAgICAgICAgZmlsZTovL2tmcmVlYnNkX3BhdGgucGF0Y2ggXAorICAgICAgICBmaWxlOi8vMDAwMS1JZ25vcmUtZGlmZmVyZW5jZXMtYmV0d2Vlbi1taXBzLW1hY2hpbmUtaWRlbnRpZmllcnMucGF0Y2ggXAorICAgICAgICBmaWxlOi8vMDAwMi1BZGQtc3VwcG9ydC1mb3ItbWlwczY0LWFiaXMtaW4tbWlwc19yZXR2YWwuYy5wYXRjaCBcCisgICAgICAgIGZpbGU6Ly8wMDAzLUFkZC1taXBzLW42NC1yZWxvY2F0aW9uLWZvcm1hdC1oYWNrLnBhdGNoIFwKKyAgICAgICAgZmlsZTovL3VjbGliYy1zdXBwb3J0LnBhdGNoIFwKKyAgICAgICAgZmlsZTovL2VsZmNtcC1maXgtc2VsZi1jb21wYXJpc2lvbi5wYXRjaCBcCisiCitTUkNfVVJJX2FwcGVuZF9saWJjLW11c2wgPSAiIGZpbGU6Ly8wMDAxLWJ1aWxkLVByb3ZpZGUtYWx0ZXJuYXRpdmVzLWZvci1nbGliYy1hc3N1bXB0aW9ucy1oZWwucGF0Y2ggIgorCisjIFRoZSBidWlsZHN5c3RlbSB3YW50cyB0byBnZW5lcmF0ZSAyIC5oIGZpbGVzIGZyb20gc291cmNlIHVzaW5nIGEgYmluYXJ5IGl0IGp1c3QgYnVpbHQsCisjIHdoaWNoIGNhbiBub3QgcGFzcyB0aGUgY3Jvc3MgY29tcGlsaW5nLCBzbyBsZXQncyB3b3JrIGFyb3VuZCBpdCBieSBhZGRpbmcgMiAuaCBmaWxlcworIyBhbG9uZyB3aXRoIHRoZSBkb19jb25maWd1cmVfcHJlcGVuZCgpCisKK2luaGVyaXQgYXV0b3Rvb2xzIGdldHRleHQKKworRVhUUkFfT0VDT05GID0gIi0tcHJvZ3JhbS1wcmVmaXg9ZXUtIC0td2l0aG91dC1sem1hIgorRVhUUkFfT0VDT05GX2FwcGVuZF9jbGFzcy1uYXRpdmUgPSAiIC0td2l0aG91dC1iemxpYiIKK0VYVFJBX09FQ09ORl9hcHBlbmRfbGliYy11Y2xpYmMgPSAiIC0tZW5hYmxlLXVjbGliYyIKKworZG9faW5zdGFsbF9hcHBlbmQoKSB7CisJaWYgWyAiJHtUQVJHRVRfQVJDSH0iICE9ICJ4ODZfNjQiIF0gJiYgWyAteiBgZWNobyAiJHtUQVJHRVRfQVJDSH0ifGdyZXAgJ2kuODYnYCBdO3RoZW4KKwkJcm0gLWYgJHtEfSR7YmluZGlyfS9ldS1vYmpkdW1wCisJZmkKK30KKworIyB3ZSBjYW4gbm90IGJ1aWxkIGNvbXBsZXRlIGVsZnV0aWxzIHdoZW4gdXNpbmcgdWNsaWJjCisjIGJ1dCBzb21lIHJlY2lwZXMgZS5nLiBnY2MgNC41IGRlcGVuZHMgb24gbGliZWxmIHNvIHdlCisjIGJ1aWxkIG9ubHkgbGliZWxmIGZvciB1Y2xpYmMgY2FzZQorCitFWFRSQV9PRU1BS0VfbGliYy11Y2xpYmMgPSAiLUMgbGliZWxmIgorRVhUUkFfT0VNQUtFX2NsYXNzLW5hdGl2ZSA9ICIiCitFWFRSQV9PRU1BS0VfY2xhc3MtbmF0aXZlc2RrID0gIiIKKworQUxMT1dfRU1QVFlfJHtQTn1fbGliYy1tdXNsID0gIjEiCisKK0JCQ0xBU1NFWFRFTkQgPSAibmF0aXZlIG5hdGl2ZXNkayIKKworIyBQYWNrYWdlIHV0aWxpdGllcyBzZXBhcmF0ZWx5CitQQUNLQUdFUyA9KyAiJHtQTn0tYmludXRpbHMgbGliZWxmIGxpYmFzbSBsaWJkdyIKK0ZJTEVTXyR7UE59LWJpbnV0aWxzID0gIlwKKyAgICAke2JpbmRpcn0vZXUtYWRkcjJsaW5lIFwKKyAgICAke2JpbmRpcn0vZXUtbGQgXAorICAgICR7YmluZGlyfS9ldS1ubSBcCisgICAgJHtiaW5kaXJ9L2V1LXJlYWRlbGYgXAorICAgICR7YmluZGlyfS9ldS1zaXplIFwKKyAgICAke2JpbmRpcn0vZXUtc3RyaXAiCisKK0ZJTEVTX2xpYmVsZiA9ICIke2xpYmRpcn0vbGliZWxmLSR7UFZ9LnNvICR7bGliZGlyfS9saWJlbGYuc28uKiIKK0ZJTEVTX2xpYmFzbSA9ICIke2xpYmRpcn0vbGliYXNtLSR7UFZ9LnNvICR7bGliZGlyfS9saWJhc20uc28uKiIKK0ZJTEVTX2xpYmR3ICA9ICIke2xpYmRpcn0vbGliZHctJHtQVn0uc28gJHtsaWJkaXJ9L2xpYmR3LnNvLiogJHtsaWJkaXJ9L2VsZnV0aWxzL2xpYioiCisjIFNvbWUgcGFja2FnZXMgaGF2ZSB0aGUgdmVyc2lvbiBwcmVjZWVkaW5nIHRoZSAuc28gaW5zdGVhZCBwcm9wZXJseQorIyB2ZXJzaW9uZWQgLnNvLjx2ZXJzaW9uPiwgc28gd2UgbmVlZCB0byByZW9yZGVyIGFuZCByZXBhY2thZ2UuCisjRklMRVNfJHtQTn0gKz0gIiR7bGliZGlyfS8qLSR7UFZ9LnNvICR7YmFzZV9saWJkaXJ9LyotJHtQVn0uc28iCisjRklMRVNfU09MSUJTREVWID0gIiR7bGliZGlyfS9saWJhc20uc28gJHtsaWJkaXJ9L2xpYmR3LnNvICR7bGliZGlyfS9saWJlbGYuc28iCisKKyMgVGhlIHBhY2thZ2UgY29udGFpbnMgc3ltbGlua3MgdGhhdCB0cmlwIHVwIGluc2FuZQorSU5TQU5FX1NLSVBfJHtNTFBSRUZJWH1saWJkdyA9ICJkZXYtc28iCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2ZpbGUvZmlsZS9ob3N0LWZpbGUucGF0Y2ggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2ZpbGUvZmlsZS9ob3N0LWZpbGUucGF0Y2gKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGE3ZWZiZGMuLjAwMDAwMDAKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9maWxlL2ZpbGUvaG9zdC1maWxlLnBhdGNoCisrKyAvZGV2L251bGwKQEAgLTEsMzIgKzAsMCBAQAotVXBzdHJlYW0tU3RhdHVzOiBTdWJtaXR0ZWQgKGh0dHA6Ly9idWdzLmd3LmNvbS92aWV3LnBocD9pZD00ODUpCi1TaWduZWQtb2ZmLWJ5OiBSb3NzIEJ1cnRvbiA8cm9zcy5idXJ0b25AaW50ZWwuY29tPgotCi1Gcm9tIDNjZGUxOTlkMDNiMzk2MzIzNjFjMjc1Y2QzMGZhMDYxMmEwMzEzOGIgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCi1Gcm9tOiBSb3NzIEJ1cnRvbiA8cm9zcy5idXJ0b25AaW50ZWwuY29tPgotRGF0ZTogTW9uLCAxOSBPY3QgMjAxNSAxMDozMDo1NyArMDEwMAotU3ViamVjdDogW1BBVENIIDIvMl0gV2hlbiB1c2luZyB0aGUgaG9zdCBmaWxlLCByZXNwZWN0IEZJTEVfQ09NUElMRQotCi1JZiB3ZSdyZSBjcm9zcy1jb21waWxpbmcgYW5kIG5vdCB1c2luZyB0aGUgZmlsZSBiaW5hcnkgdGhhdCB3YXMganVzdCBidWlsdCwKLWV4ZWN1dGUgdGhlIGJpbmFyeSB0aGF0IHdlJ3ZlIGJlZW4gdG9sZCB0byB1c2UgKHZpYSBGSUxFX0NPTVBJTEUpIHdoZW4gY2hlY2tpbmcKLXRoZSB2ZXJzaW9uIGluc3RlYWQgb2YgYXNzdW1pbmcgdGhhdCAiZmlsZSIgaXMgY29ycmVjdCBhcyB0aGUgYWN0dWFsIGNvbXBpbGUKLXVzZXMgRklMRV9DT01QSUxFIHNvIGRpZmZlcmVudCBiaW5hcmllcyBtYXkgYmUgdXNlZC4KLS0tLQotIG1hZ2ljL01ha2VmaWxlLmFtIHwgMiArLQotIDEgZmlsZSBjaGFuZ2VkLCAxIGluc2VydGlvbigrKSwgMSBkZWxldGlvbigtKQotCi1kaWZmIC0tZ2l0IGEvbWFnaWMvTWFrZWZpbGUuYW0gYi9tYWdpYy9NYWtlZmlsZS5hbQotaW5kZXggODlhYzg0NC4uNjcwNjdmZSAxMDA2NDQKLS0tLSBhL21hZ2ljL01ha2VmaWxlLmFtCi0rKysgYi9tYWdpYy9NYWtlZmlsZS5hbQotQEAgLTI5Myw3ICsyOTMsNyBAQCAke01BR0lDfTogJChFWFRSQV9ESVNUKSAkKEZJTEVfQ09NUElMRV9ERVApCi0gCUAoaWYgZXhwciAiJHtGSUxFX0NPTVBJTEV9IiA6ICcuKi8uKicgPiAvZGV2L251bGw7IHRoZW4gXAotIAkgICAgZWNobyAiVXNpbmcgJHtGSUxFX0NPTVBJTEV9IHRvIGdlbmVyYXRlICR7TUFHSUN9IiA+IC9kZXYvbnVsbDsgXAotIAkgIGVsc2UgXAotLQkgICAgdj0kJChmaWxlIC0tdmVyc2lvbiB8IHNlZCAtZSBzL2ZpbGUtLy8gLWUgcSk7IFwKLSsJICAgIHY9JCQoJHtGSUxFX0NPTVBJTEV9IC0tdmVyc2lvbiB8IHNlZCAtZSBzL2ZpbGUtLy8gLWUgcSk7IFwKLSAJICAgIGlmIFsgIiQkdiIgIT0gIiR7UEFDS0FHRV9WRVJTSU9OfSIgXTsgdGhlbiBcCi0gCQllY2hvICJDYW5ub3QgdXNlIHRoZSBpbnN0YWxsZWQgdmVyc2lvbiBvZiBmaWxlICgkJHYpIHRvIjsgXAotIAkJZWNobyAiY3Jvc3MtY29tcGlsZSBmaWxlICR7UEFDS0FHRV9WRVJTSU9OfSI7IFwKLS0tIAotMi4xLjQKLQpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9maWxlL2ZpbGVfNS4yNS5iYiBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZmlsZS9maWxlXzUuMjUuYmIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDY4YmFkNjkuLjAwMDAwMDAKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9maWxlL2ZpbGVfNS4yNS5iYgorKysgL2Rldi9udWxsCkBAIC0xLDQ3ICswLDAgQEAKLVNVTU1BUlkgPSAiRmlsZSBjbGFzc2lmaWNhdGlvbiB0b29sIgotREVTQ1JJUFRJT04gPSAiRmlsZSBhdHRlbXB0cyB0byBjbGFzc2lmeSBmaWxlcyBkZXBlbmRpbmcgXAotb24gdGhlaXIgY29udGVudHMgYW5kIHByaW50cyBhIGRlc2NyaXB0aW9uIGlmIGEgbWF0Y2ggaXMgZm91bmQuIgotSE9NRVBBR0UgPSAiaHR0cDovL3d3dy5kYXJ3aW5zeXMuY29tL2ZpbGUvIgotU0VDVElPTiA9ICJjb25zb2xlL3V0aWxzIgotCi0jIHR3byBjbGF1c2UgQlNECi1MSUNFTlNFID0gIkJTRCIKLUxJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7YmVnaW5saW5lPTI7bWQ1PTZhNzM4Mjg3MmVkYjY4ZDMzZTFhOTM5OGI2ZTAzMTg4IgotCi1ERVBFTkRTID0gInpsaWIgZmlsZS1yZXBsYWNlbWVudC1uYXRpdmUiCi1ERVBFTkRTX2NsYXNzLW5hdGl2ZSA9ICJ6bGliLW5hdGl2ZSIKLQotIyBCbGFja2xpc3QgYSBib2d1cyB0YWcgaW4gdXBzdHJlYW0gY2hlY2sKLVVQU1RSRUFNX0NIRUNLX0dJVFRBR1JFR0VYID0gIkZJTEUoP1A8cHZlcj4oPyE2XzIzKS4rKSIKLQotU1JDX1VSSSA9ICJnaXQ6Ly9naXRodWIuY29tL2ZpbGUvZmlsZS5naXQgXAotICAgICAgICBmaWxlOi8vZGViaWFuLTc0MjI2Mi5wYXRjaCBcCi0gICAgICAgIGZpbGU6Ly8wMDAxLUFkZC1QLXByb21wdC1pbnRvLVVzYWdlLWluZm8ucGF0Y2ggXAotICAgICAgICBmaWxlOi8vaG9zdC1maWxlLnBhdGNoIFwKLSAgICAgICAgIgotCi1TUkNSRVYgPSAiZjQ1ZGI4OWRkYzkxNjkyYjY2MmZmZmJhYmJkYWZjN2JjNGMwMGY1ZSIKLVMgPSAiJHtXT1JLRElSfS9naXQiCi0KLWluaGVyaXQgYXV0b3Rvb2xzCi0KLUVYVFJBX09FTUFLRV9hcHBlbmRfY2xhc3MtdGFyZ2V0ID0gIi1lIEZJTEVfQ09NUElMRT0ke1NUQUdJTkdfQklORElSX05BVElWRX0vZmlsZS1uYXRpdmUvZmlsZSIKLUVYVFJBX09FTUFLRV9hcHBlbmRfY2xhc3MtbmF0aXZlc2RrID0gIi1lIEZJTEVfQ09NUElMRT0ke1NUQUdJTkdfQklORElSX05BVElWRX0vZmlsZS1uYXRpdmUvZmlsZSIKLQotRklMRVNfJHtQTn0gKz0gIiR7ZGF0YWRpcn0vbWlzYy8qLm1nYyIKLQotZG9faW5zdGFsbF9hcHBlbmRfY2xhc3MtbmF0aXZlKCkgewotCWNyZWF0ZV9jbWRsaW5lX3dyYXBwZXIgJHtEfS8ke2JpbmRpcn0vZmlsZSBcCi0JCS0tbWFnaWMtZmlsZSAke2RhdGFkaXJ9L21pc2MvbWFnaWMubWdjCi19Ci0KLWRvX2luc3RhbGxfYXBwZW5kX2NsYXNzLW5hdGl2ZXNkaygpIHsKLQljcmVhdGVfY21kbGluZV93cmFwcGVyICR7RH0vJHtiaW5kaXJ9L2ZpbGUgXAotCQktLW1hZ2ljLWZpbGUgJHtkYXRhZGlyfS9taXNjL21hZ2ljLm1nYwotfQotCi1CQkNMQVNTRVhURU5EID0gIm5hdGl2ZSBuYXRpdmVzZGsiCi1QUk9WSURFU19hcHBlbmRfY2xhc3MtbmF0aXZlID0gIiBmaWxlLXJlcGxhY2VtZW50LW5hdGl2ZSIKLSMgRG9uJ3QgdXNlIE5BVElWRV9QQUNLQUdFX1BBVEhfU1VGRklYIGFzIHRoYXQgaGlkZXMgbGlibWFnaWMgZnJvbSBhbnlvbmUgd2hvCi0jIGRlcGVuZHMgb24gZmlsZS1yZXBsYWNlbWVudC1uYXRpdmUuCi1iaW5kaXJfYXBwZW5kX2NsYXNzLW5hdGl2ZSA9ICIvZmlsZS1uYXRpdmUiCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2ZpbGUvZmlsZV81LjI4LmJiIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9maWxlL2ZpbGVfNS4yOC5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNjRhODljCi0tLSAvZGV2L251bGwKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9maWxlL2ZpbGVfNS4yOC5iYgpAQCAtMCwwICsxLDQ4IEBACitTVU1NQVJZID0gIkZpbGUgY2xhc3NpZmljYXRpb24gdG9vbCIKK0RFU0NSSVBUSU9OID0gIkZpbGUgYXR0ZW1wdHMgdG8gY2xhc3NpZnkgZmlsZXMgZGVwZW5kaW5nIFwKK29uIHRoZWlyIGNvbnRlbnRzIGFuZCBwcmludHMgYSBkZXNjcmlwdGlvbiBpZiBhIG1hdGNoIGlzIGZvdW5kLiIKK0hPTUVQQUdFID0gImh0dHA6Ly93d3cuZGFyd2luc3lzLmNvbS9maWxlLyIKK1NFQ1RJT04gPSAiY29uc29sZS91dGlscyIKKworIyB0d28gY2xhdXNlIEJTRAorTElDRU5TRSA9ICJCU0QiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO2JlZ2lubGluZT0yO21kNT02YTczODI4NzJlZGI2OGQzM2UxYTkzOThiNmUwMzE4OCIKKworREVQRU5EUyA9ICJ6bGliIGZpbGUtcmVwbGFjZW1lbnQtbmF0aXZlIgorREVQRU5EU19jbGFzcy1uYXRpdmUgPSAiemxpYi1uYXRpdmUiCisKKyMgQmxhY2tsaXN0IGEgYm9ndXMgdGFnIGluIHVwc3RyZWFtIGNoZWNrCitVUFNUUkVBTV9DSEVDS19HSVRUQUdSRUdFWCA9ICJGSUxFKD9QPHB2ZXI+KD8hNl8yMykuKykiCisKK1NSQ19VUkkgPSAiZ2l0Oi8vZ2l0aHViLmNvbS9maWxlL2ZpbGUuZ2l0IFwKKyAgICAgICAgZmlsZTovL2RlYmlhbi03NDIyNjIucGF0Y2ggXAorICAgICAgICBmaWxlOi8vMDAwMS1BZGQtUC1wcm9tcHQtaW50by1Vc2FnZS1pbmZvLnBhdGNoIFwKKyAgICAgICAgIgorCitTUkNSRVYgPSAiM2M1MjE4MTczMjJhNmJmNTE2MGNmZWIwOWI5MTQ1Y2NkZTU4N2IyYSIKK1MgPSAiJHtXT1JLRElSfS9naXQiCisKK2luaGVyaXQgYXV0b3Rvb2xzCisKK0VYVFJBX09FTUFLRV9hcHBlbmRfY2xhc3MtdGFyZ2V0ID0gIi1lIEZJTEVfQ09NUElMRT0ke1NUQUdJTkdfQklORElSX05BVElWRX0vZmlsZS1uYXRpdmUvZmlsZSIKK0VYVFJBX09FTUFLRV9hcHBlbmRfY2xhc3MtbmF0aXZlc2RrID0gIi1lIEZJTEVfQ09NUElMRT0ke1NUQUdJTkdfQklORElSX05BVElWRX0vZmlsZS1uYXRpdmUvZmlsZSIKKworQ0ZMQUdTX2FwcGVuZCA9ICIgLXN0ZD1jOTkiCisKK0ZJTEVTXyR7UE59ICs9ICIke2RhdGFkaXJ9L21pc2MvKi5tZ2MiCisKK2RvX2luc3RhbGxfYXBwZW5kX2NsYXNzLW5hdGl2ZSgpIHsKKwljcmVhdGVfY21kbGluZV93cmFwcGVyICR7RH0vJHtiaW5kaXJ9L2ZpbGUgXAorCQktLW1hZ2ljLWZpbGUgJHtkYXRhZGlyfS9taXNjL21hZ2ljLm1nYworfQorCitkb19pbnN0YWxsX2FwcGVuZF9jbGFzcy1uYXRpdmVzZGsoKSB7CisJY3JlYXRlX2NtZGxpbmVfd3JhcHBlciAke0R9LyR7YmluZGlyfS9maWxlIFwKKwkJLS1tYWdpYy1maWxlICR7ZGF0YWRpcn0vbWlzYy9tYWdpYy5tZ2MKK30KKworQkJDTEFTU0VYVEVORCA9ICJuYXRpdmUgbmF0aXZlc2RrIgorUFJPVklERVNfYXBwZW5kX2NsYXNzLW5hdGl2ZSA9ICIgZmlsZS1yZXBsYWNlbWVudC1uYXRpdmUiCisjIERvbid0IHVzZSBOQVRJVkVfUEFDS0FHRV9QQVRIX1NVRkZJWCBhcyB0aGF0IGhpZGVzIGxpYm1hZ2ljIGZyb20gYW55b25lIHdobworIyBkZXBlbmRzIG9uIGZpbGUtcmVwbGFjZW1lbnQtbmF0aXZlLgorYmluZGlyX2FwcGVuZF9jbGFzcy1uYXRpdmUgPSAiL2ZpbGUtbmF0aXZlIgpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9mbGV4L2ZsZXgvMDAwMi1hdm9pZC1jLWNvbW1lbnRzLWluLWMtY29kZS1mYWlscy13aXRoLWdjYy02LnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9mbGV4L2ZsZXgvMDAwMi1hdm9pZC1jLWNvbW1lbnRzLWluLWMtY29kZS1mYWlscy13aXRoLWdjYy02LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQzOGNhNWYKLS0tIC9kZXYvbnVsbAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2ZsZXgvZmxleC8wMDAyLWF2b2lkLWMtY29tbWVudHMtaW4tYy1jb2RlLWZhaWxzLXdpdGgtZ2NjLTYucGF0Y2gKQEAgLTAsMCArMSw2NCBAQAorRnJvbSA3MDcyYmVmZTEzOTdhZjRlYjAxYzNmZjdlZGY5OWYwY2Q1MDc2MDg5IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogPT9VVEYtOD9xP0FuZHJlYXM9MjBNPUMzPUJDbGxlcj89IDxzY2huaXR6ZWx0b255QGdvb2dsZW1haWwuY29tPgorRGF0ZTogVHVlLCAzMCBBdWcgMjAxNiAxNDoyNTozMiArMDIwMAorU3ViamVjdDogW1BBVENIXSBhdm9pZCBjKysgY29tbWVudHMgaW4gYy1jb2RlIC0gZmFpbHMgd2l0aCBnY2MtNgorTUlNRS1WZXJzaW9uOiAxLjAKK0NvbnRlbnQtVHlwZTogdGV4dC9wbGFpbjsgY2hhcnNldD1VVEYtOAorQ29udGVudC1UcmFuc2Zlci1FbmNvZGluZzogOGJpdAorCitmaXhlczoKKworfCBlcnJvcjogQysrIHN0eWxlIGNvbW1lbnRzIGFyZSBub3QgYWxsb3dlZCBpbiBJU08gQzkwCit8IG51bV90b19hbGxvYyA9IDE7IC8vIEFmdGVyIGFsbCB0aGF0IHRhbGssIHRoaXMgd2FzIHNldCB0byAxIGFueXdheXMuLi4KKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK1NpZ25lZC1vZmYtYnk6IEFuZHJlYXMgTcO8bGxlciA8c2Nobml0emVsdG9ueUBnb29nbGVtYWlsLmNvbT4KKy0tLQorIHNyYy9mbGV4LnNrbCB8IDIgKy0KKyBzcmMvc2Nhbi5jICAgfCAyICstCisgc3JjL3NrZWwuYyAgIHwgMiArLQorIDMgZmlsZXMgY2hhbmdlZCwgMyBpbnNlcnRpb25zKCspLCAzIGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvc3JjL2ZsZXguc2tsIGIvc3JjL2ZsZXguc2tsCitpbmRleCA3M2EwYjllLi5lZDcxNjI3IDEwMDY0NAorLS0tIGEvc3JjL2ZsZXguc2tsCisrKysgYi9zcmMvZmxleC5za2wKK0BAIC0yMzUwLDcgKzIzNTAsNyBAQCB2b2lkIHl5RmxleExleGVyOjp5eWVuc3VyZV9idWZmZXJfc3RhY2sodm9pZCkKKyAJCSAqIHNjYW5uZXIgd2lsbCBldmVuIG5lZWQgYSBzdGFjay4gV2UgdXNlIDIgaW5zdGVhZCBvZiAxIHRvIGF2b2lkIGFuCisgCQkgKiBpbW1lZGlhdGUgcmVhbGxvYyBvbiB0aGUgbmV4dCBjYWxsLgorICAgICAgICAgICovCistCQludW1fdG9fYWxsb2MgPSAxOyAvLyBBZnRlciBhbGwgdGhhdCB0YWxrLCB0aGlzIHdhcyBzZXQgdG8gMSBhbnl3YXlzLi4uCisrCQludW1fdG9fYWxsb2MgPSAxOyAvKiBBZnRlciBhbGwgdGhhdCB0YWxrLCB0aGlzIHdhcyBzZXQgdG8gMSBhbnl3YXlzLi4uICovCisgCQlZWV9HKHl5X2J1ZmZlcl9zdGFjaykgPSAoc3RydWN0IHl5X2J1ZmZlcl9zdGF0ZSoqKXl5YWxsb2MKKyAJCQkJCQkJCShudW1fdG9fYWxsb2MgKiBzaXplb2Yoc3RydWN0IHl5X2J1ZmZlcl9zdGF0ZSopCisgCQkJCQkJCQlNNF9ZWV9DQUxMX0xBU1RfQVJHKTsKK2RpZmYgLS1naXQgYS9zcmMvc2Nhbi5jIGIvc3JjL3NjYW4uYworaW5kZXggYjU1ZGYyZC4uZjFkY2U3NSAxMDA2NDQKKy0tLSBhL3NyYy9zY2FuLmMKKysrKyBiL3NyYy9zY2FuLmMKK0BAIC00NjcyLDcgKzQ2NzIsNyBAQCBzdGF0aWMgdm9pZCB5eWVuc3VyZV9idWZmZXJfc3RhY2sgKHZvaWQpCisgCQkgKiBzY2FubmVyIHdpbGwgZXZlbiBuZWVkIGEgc3RhY2suIFdlIHVzZSAyIGluc3RlYWQgb2YgMSB0byBhdm9pZCBhbgorIAkJICogaW1tZWRpYXRlIHJlYWxsb2Mgb24gdGhlIG5leHQgY2FsbC4KKyAgICAgICAgICAqLworLQkJbnVtX3RvX2FsbG9jID0gMTsgLy8gQWZ0ZXIgYWxsIHRoYXQgdGFsaywgdGhpcyB3YXMgc2V0IHRvIDEgYW55d2F5cy4uLgorKwkJbnVtX3RvX2FsbG9jID0gMTsgLyogQWZ0ZXIgYWxsIHRoYXQgdGFsaywgdGhpcyB3YXMgc2V0IHRvIDEgYW55d2F5cy4uLiovCisgCQkoeXlfYnVmZmVyX3N0YWNrKSA9IChzdHJ1Y3QgeXlfYnVmZmVyX3N0YXRlKiopeXlhbGxvYworIAkJCQkJCQkJKG51bV90b19hbGxvYyAqIHNpemVvZihzdHJ1Y3QgeXlfYnVmZmVyX3N0YXRlKikKKyAJCQkJCQkJCSk7CitkaWZmIC0tZ2l0IGEvc3JjL3NrZWwuYyBiL3NyYy9za2VsLmMKK2luZGV4IGVmNjU3ZDMuLjI2Y2M4ODkgMTAwNjQ0CistLS0gYS9zcmMvc2tlbC5jCisrKysgYi9zcmMvc2tlbC5jCitAQCAtMjU2MSw3ICsyNTYxLDcgQEAgY29uc3QgY2hhciAqc2tlbFtdID0geworICAgIgkJICogc2Nhbm5lciB3aWxsIGV2ZW4gbmVlZCBhIHN0YWNrLiBXZSB1c2UgMiBpbnN0ZWFkIG9mIDEgdG8gYXZvaWQgYW4iLAorICAgIgkJICogaW1tZWRpYXRlIHJlYWxsb2Mgb24gdGhlIG5leHQgY2FsbC4iLAorICAgIiAgICAgICAgICovIiwKKy0gICIJCW51bV90b19hbGxvYyA9IDE7IC8vIEFmdGVyIGFsbCB0aGF0IHRhbGssIHRoaXMgd2FzIHNldCB0byAxIGFueXdheXMuLi4iLAorKyAgIgkJbnVtX3RvX2FsbG9jID0gMTsgLyogQWZ0ZXIgYWxsIHRoYXQgdGFsaywgdGhpcyB3YXMgc2V0IHRvIDEgYW55d2F5cy4uLiAqLyIsCisgICAiCQlZWV9HKHl5X2J1ZmZlcl9zdGFjaykgPSAoc3RydWN0IHl5X2J1ZmZlcl9zdGF0ZSoqKXl5YWxsb2MiLAorICAgIgkJCQkJCQkJKG51bV90b19hbGxvYyAqIHNpemVvZihzdHJ1Y3QgeXlfYnVmZmVyX3N0YXRlKikiLAorICAgIgkJCQkJCQkJTTRfWVlfQ0FMTF9MQVNUX0FSRyk7IiwKKy0tIAorMi41LjUKKwpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9mbGV4L2ZsZXgvQ1ZFLTIwMTYtNjM1NC5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZmxleC9mbGV4L0NWRS0yMDE2LTYzNTQucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjE2YWM3YQotLS0gL2Rldi9udWxsCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZmxleC9mbGV4L0NWRS0yMDE2LTYzNTQucGF0Y2gKQEAgLTAsMCArMSw1OSBAQAorRnJvbSAzOTM5ZWNjZGZmNTk4ZjQ3ZTViMzdiMDVkNThiZjFiNDRkMzc5NmU3IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogSnVzc2kgS3Vra29uZW4gPGp1c3NpLmt1a2tvbmVuQGludGVsLmNvbT4KK0RhdGU6IEZyaSwgNyBPY3QgMjAxNiAxNDoxNTozOCArMDMwMAorU3ViamVjdDogW1BBVENIXSBQcmV2ZW50IGJ1ZmZlciBvdmVyZmxvdyBpbiB5eV9nZXRfbmV4dF9idWZmZXIKKworVGhpcyBpcyB1cHN0cmVhbSBjb21taXQgYTVjYmU5MjlhYzMyNTVkMzcxZTY5OGY2MmRjMjU2YWZlNzAwNjQ2Ngord2l0aCBzb21lIGFkZGl0aW9uYWwgYmFja3BvcnRpbmcgdG8gbWFrZSBiaW51dGlscyBidWlsZCBhZ2Fpbi4KKworVXBzdHJlYW0tU3RhdHVzOiBCYWNrcG9ydAorQ1ZFOiBDVkUtMjAxNi02MzU0CitTaWduZWQtb2ZmLWJ5OiBKdXNzaSBLdWtrb25lbiA8anVzc2kua3Vra29uZW5AaW50ZWwuY29tPgorLS0tCisgc3JjL2ZsZXguc2tsIHwgMiArLQorIHNyYy9zY2FuLmMgICB8IDIgKy0KKyBzcmMvc2tlbC5jICAgfCAyICstCisgMyBmaWxlcyBjaGFuZ2VkLCAzIGluc2VydGlvbnMoKyksIDMgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9zcmMvZmxleC5za2wgYi9zcmMvZmxleC5za2wKK2luZGV4IGVkNzE2MjcuLjgxNGQ1NjIgMTAwNjQ0CistLS0gYS9zcmMvZmxleC5za2wKKysrKyBiL3NyYy9mbGV4LnNrbAorQEAgLTE3MTgsNyArMTcxOCw3IEBAIGludCB5eUZsZXhMZXhlcjo6eXlfZ2V0X25leHRfYnVmZmVyKCkKKyAKKyAJZWxzZQorIAkJeworLQkJCXl5X3NpemVfdCBudW1fdG9fcmVhZCA9CisrCQkJaW50IG51bV90b19yZWFkID0KKyAJCQlZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5X2J1Zl9zaXplIC0gbnVtYmVyX3RvX21vdmUgLSAxOworIAorIAkJd2hpbGUgKCBudW1fdG9fcmVhZCA8PSAwICkKK2RpZmYgLS1naXQgYS9zcmMvc2Nhbi5jIGIvc3JjL3NjYW4uYworaW5kZXggZjFkY2U3NS4uMTk0OTg3MiAxMDA2NDQKKy0tLSBhL3NyYy9zY2FuLmMKKysrKyBiL3NyYy9zY2FuLmMKK0BAIC00MTgxLDcgKzQxODEsNyBAQCBzdGF0aWMgaW50IHl5X2dldF9uZXh0X2J1ZmZlciAodm9pZCkKKyAKKyAJZWxzZQorIAkJeworLQkJCXl5X3NpemVfdCBudW1fdG9fcmVhZCA9CisrCQkJaW50IG51bV90b19yZWFkID0KKyAJCQlZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5X2J1Zl9zaXplIC0gbnVtYmVyX3RvX21vdmUgLSAxOworIAorIAkJd2hpbGUgKCBudW1fdG9fcmVhZCA8PSAwICkKK2RpZmYgLS1naXQgYS9zcmMvc2tlbC5jIGIvc3JjL3NrZWwuYworaW5kZXggMjZjYzg4OS4uMDM0NGQxOCAxMDA2NDQKKy0tLSBhL3NyYy9za2VsLmMKKysrKyBiL3NyYy9za2VsLmMKK0BAIC0xOTI5LDcgKzE5MjksNyBAQCBjb25zdCBjaGFyICpza2VsW10gPSB7CisgICAiIiwKKyAgICIJZWxzZSIsCisgICAiCQl7IiwKKy0gICIJCQl5eV9zaXplX3QgbnVtX3RvX3JlYWQgPSIsCisrICAiCQkJaW50IG51bV90b19yZWFkID0iLAorICAgIgkJCVlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfYnVmX3NpemUgLSBudW1iZXJfdG9fbW92ZSAtIDE7IiwKKyAgICIiLAorICAgIgkJd2hpbGUgKCBudW1fdG9fcmVhZCA8PSAwICkiLAorLS0gCisyLjEuNAorCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2ZsZXgvZmxleF8yLjYuMC5iYiBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZmxleC9mbGV4XzIuNi4wLmJiCmluZGV4IDgyODU0MjYuLmFiMzViMDkgMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZmxleC9mbGV4XzIuNi4wLmJiCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZmxleC9mbGV4XzIuNi4wLmJiCkBAIC0xNCwxMiArMTQsMTYgQEAKICAgICAgICAgICAgZmlsZTovL3J1bi1wdGVzdCBcCiAgICAgICAgICAgIGZpbGU6Ly9kb19ub3RfY3JlYXRlX3BkZl9kb2MucGF0Y2ggXAogICAgICAgICAgICBmaWxlOi8vMDAwMS10ZXN0cy1hZGQtYS10YXJnZXQtZm9yLWJ1aWxkaW5nLXRlc3RzLXdpdGhvdXQtcnVubmluLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovLzAwMDItYXZvaWQtYy1jb21tZW50cy1pbi1jLWNvZGUtZmFpbHMtd2l0aC1nY2MtNi5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9DVkUtMjAxNi02MzU0LnBhdGNoIFwKICAgICAgICAgICAgJHtAYmIudXRpbHMuY29udGFpbnMoJ1BURVNUX0VOQUJMRUQnLCAnMScsICcnLCAnZmlsZTovL2Rpc2FibGUtdGVzdHMucGF0Y2gnLCBkKX0gXAogICAgICAgICAgICAiCiAKIFNSQ19VUklbbWQ1c3VtXSA9ICIyNjYyNzBmMTNjNDhlZDA0M2Q5NTY0ODA3NTA4NGQ1OSIKIFNSQ19VUklbc2hhMjU2c3VtXSA9ICIyNGU2MTFlZjVhNDcwM2ExOTEwMTJmODBjMTAyN2RjOWQxMjU1NTE4M2NlMGVjZDQ2ZjM2MzZlNTg3ZTliOGU5IgogCisjIEZsZXggaGFzIG1vdmVkIHRvIGdpdGh1YiBmcm9tIDIuNi4xIG9ud2FyZHMKK1VQU1RSRUFNX0NIRUNLX1VSSSA9ICJodHRwczovL2dpdGh1Yi5jb20vd2VzdGVzL2ZsZXgvcmVsZWFzZXMiCiBVUFNUUkVBTV9DSEVDS19SRUdFWCA9ICJmbGV4LSg/UDxwdmVyPlxkKyhcLlxkKykrKVwudGFyIgogCiBpbmhlcml0IGF1dG90b29scyBnZXR0ZXh0IHRleGluZm8gcHRlc3QKQEAgLTUxLDUgKzU1LDggQEAKIAljcCAke1N9L2J1aWxkLWF1eC90ZXN0LWRyaXZlciAke0R9JHtQVEVTVF9QQVRIfS9idWlsZC1hdXgvCiAJY3AgLXIgJHtTfS90ZXN0cy8qICR7RH0ke1BURVNUX1BBVEh9CiAJY3AgLXIgJHtCfS90ZXN0cy8qICR7RH0ke1BURVNUX1BBVEh9Ci0Jc2VkIC1lICdzL15NYWtlZmlsZTovX01ha2VmaWxlOi8nIC1lICdzL15zcmNkaXIgPSBcKC4qXCkvc3JjZGlyID0gLi8nIC1lICdzL150b3Bfc3JjZGlyID0gXCguKlwpL3RvcF9zcmNkaXIgPSAuLycgIC1pICR7RH0ke1BURVNUX1BBVEh9L01ha2VmaWxlCisJc2VkIC1lICdzL15NYWtlZmlsZTovX01ha2VmaWxlOi8nIFwKKwkgICAgLWUgJ3MvXnNyY2RpciA9IFwoLipcKS9zcmNkaXIgPSAuLycgLWUgJ3MvXnRvcF9zcmNkaXIgPSBcKC4qXCkvdG9wX3NyY2RpciA9IC4vJyBcCisJICAgIC1lICdzL15idWlsZGRpciA9IFwoLipcKS9idWlsZGRpciA9IC4vJyAtZSAncy9edG9wX2J1aWxkZGlyID0gXCguKlwpL3RvcF9idWlsZGRpciA9IC4vJyBcCisJICAgIC1pICR7RH0ke1BURVNUX1BBVEh9L01ha2VmaWxlCiB9CmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNC45LmluYyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy00LjkuaW5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3ZTAzZjMxLi4wMDAwMDAwCi0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy00LjkuaW5jCisrKyAvZGV2L251bGwKQEAgLTEsMTM5ICswLDAgQEAKLXJlcXVpcmUgZ2NjLWNvbW1vbi5pbmMKLQotIyBUaGlyZCBkaWdpdCBpbiBQViBzaG91bGQgYmUgaW5jcmVtZW50ZWQgYWZ0ZXIgYSBtaW5vciByZWxlYXNlCi0KLVBWID0gIjQuOS4zIgotCi0jIEJJTlYgc2hvdWxkIGJlIGluY3JlbWVudGVkIHRvIGEgcmV2aXNpb24gYWZ0ZXIgYSBtaW5vciBnY2MgcmVsZWFzZQotCi1CSU5WID0gIjQuOS4zIgotCi1GSUxFU0VYVFJBUEFUSFMgPS4gIiR7RklMRV9ESVJOQU1FfS9nY2MtNC45OiIKLQotREVQRU5EUyA9KyAibXBmciBnbXAgbGlibXBjIHpsaWIiCi1OQVRJVkVERVBTID0gIm1wZnItbmF0aXZlIGdtcC1uYXRpdmUgbGlibXBjLW5hdGl2ZSB6bGliLW5hdGl2ZSIKLQotTElDRU5TRSA9ICJHUEwtMy4wLXdpdGgtR0NDLWV4Y2VwdGlvbiAmIEdQTHYzIgotCi1MSUNfRklMRVNfQ0hLU1VNID0gIlwKLSAgICBmaWxlOi8vQ09QWUlORzttZDU9NTk1MzBiZGYzMzY1OWIyOWU3M2Q0YWRiOWY5ZjY1NTIgXAotICAgIGZpbGU6Ly9DT1BZSU5HMzttZDU9ZDMyMjM5YmNiNjczNDYzYWI4NzRlODBkNDdmYWU1MDQgXAotICAgIGZpbGU6Ly9DT1BZSU5HMy5MSUI7bWQ1PTZhNmE4ZTAyMDgzOGIyMzQwNmM4MWIxOWMxZDQ2ZGY2IFwKLSAgICBmaWxlOi8vQ09QWUlORy5MSUI7bWQ1PTJkNTAyNWQ0YWEzNDk1YmVmZWY4ZjE3MjA2YTViMGExIFwKLSAgICBmaWxlOi8vQ09QWUlORy5SVU5USU1FO21kNT1mZTYwZDg3MDQ4NTY3ZDRmZThjOGEwZWQyNDQ4YmNjOCBcCi0iCi0KLVNSQ19VUkkgPSAiXAotICAgICR7R05VX01JUlJPUn0vZ2NjL2djYy0ke1BWfS9nY2MtJHtQVn0udGFyLmJ6MiBcCi0gICAgZmlsZTovLzAwMDEtZ2NjLTQuMy4xLUFSQ0hfRkxBR1NfRk9SX1RBUkdFVC5wYXRjaCBcCi0gICAgZmlsZTovLzAwMDItdWNsaWJjLWNvbmYucGF0Y2ggXAotICAgIGZpbGU6Ly8wMDAzLWdjYy11Y2xpYmMtbG9jYWxlLWN0eXBlX3RvdXBsb3dfdC5wYXRjaCBcCi0gICAgZmlsZTovLzAwMDQtdWNsaWJjLWxvY2FsZS5wYXRjaCBcCi0gICAgZmlsZTovLzAwMDUtdWNsaWJjLWxvY2FsZS1ub19feC5wYXRjaCBcCi0gICAgZmlsZTovLzAwMDYtdWNsaWJjLWxvY2FsZS13Y2hhcl9maXgucGF0Y2ggXAotICAgIGZpbGU6Ly8wMDA3LXVjbGliYy1sb2NhbGUtdXBkYXRlLnBhdGNoIFwKLSAgICBmaWxlOi8vMDAwOC1taXNzaW5nLWV4ZWNpbmZvX2gucGF0Y2ggXAotICAgIGZpbGU6Ly8wMDA5LWM5OS1zbnByaW50Zi5wYXRjaCBcCi0gICAgZmlsZTovLzAwMTAtYzk5LWNvbXBsZXgtdWdseS1oYWNrLnBhdGNoIFwKLSAgICBmaWxlOi8vMDAxMS1pbmRleF9tYWNyby5wYXRjaCBcCi0gICAgZmlsZTovLzAwMTMtbGlic3RkYy1uYW1lc3BhY2UucGF0Y2ggXAotICAgIGZpbGU6Ly8wMDE0LXNoLXByMjQ4MzYucGF0Y2ggXAotICAgIGZpbGU6Ly8wMDE1LWFybS1Vc2UtVEFSR0VUX0VORElBTl9PUFRJT04tZm9yLWRldGVybWluaW5nLU1VTFRJTEkucGF0Y2ggXAotICAgIGZpbGU6Ly8wMDE2LWdjYy1wb2lzb24tc3lzdGVtLWRpcmVjdG9yaWVzLnBhdGNoIFwKLSAgICBmaWxlOi8vMDAxNy1nY2MtcG9pc29uLWRpci1leHRlbmQucGF0Y2ggXAotICAgIGZpbGU6Ly8wMDE4LWdjYy00LjMuMy1TWVNST09UX0NGTEFHU19GT1JfVEFSR0VULnBhdGNoIFwKLSAgICBmaWxlOi8vMDAxOS02NC1iaXQtbXVsdGlsaWItaGFjay5wYXRjaCBcCi0gICAgZmlsZTovLzAwMjAtb3B0aW9uYWwtbGlic3RkYy5wYXRjaCBcCi0gICAgZmlsZTovLzAwMjEtZ2NjLWRpc2FibGUtTUFTS19SRUxBWF9QSUNfQ0FMTFMtYml0LnBhdGNoIFwKLSAgICBmaWxlOi8vMDAyMi1DT0xMRUNUX0dDQ19PUFRJT05TLnBhdGNoIFwKLSAgICBmaWxlOi8vMDAyMy1Vc2UtdGhlLWRlZmF1bHRzLmgtaW4tQi1pbnN0ZWFkLW9mLVMtYW5kLXQtb2UtaW4tQi5wYXRjaCBcCi0gICAgZmlsZTovLzAwMjUtZm9ydHJhbi1jcm9zcy1jb21waWxlLWhhY2sucGF0Y2ggXAotICAgIGZpbGU6Ly8wMDI2LWxpYmdjYy1zamxqLWNoZWNrLnBhdGNoIFwKLSAgICBmaWxlOi8vMDAyNy1jcHAtaG9ub3Itc3lzcm9vdC5wYXRjaCBcCi0gICAgZmlsZTovLzAwMjgtTUlQUzY0LURlZmF1bHQtdG8tTjY0LUFCSS5wYXRjaCBcCi0gICAgZmlsZTovLzAwMjktRGVmaW5lLUdMSUJDX0RZTkFNSUNfTElOS0VSLWFuZC1VQ0xJQkNfRFlOQU1JQ19MSU5LRS5wYXRjaCBcCi0gICAgZmlsZTovLzAwMzAtZ2NjLUZpeC1hcmd1bWVudC1saXN0LXRvby1sb25nLWVycm9yLnBhdGNoIFwKLSAgICBmaWxlOi8vMDAzMS1EaXNhYmxlLXNkdC5wYXRjaCBcCi0gICAgZmlsZTovLzAwMzItbGlidG9vbC5wYXRjaCBcCi0gICAgZmlsZTovLzAwMzMtZ2NjLWFybXY0LXBhc3MtZml4LXY0YngtdG8tbGlua2VyLXRvLXN1cHBvcnQtRUFCSS5wYXRjaCBcCi0gICAgZmlsZTovLzAwMzQtVXNlLXRoZS1tdWx0aWxpYi1jb25maWctZmlsZXMtZnJvbS1CLWluc3RlYWQtb2YtdXNpbi5wYXRjaCBcCi0gICAgZmlsZTovLzAwNDAtZml4LWcrKy1zeXNyb290LnBhdGNoIFwKLSAgICBmaWxlOi8vMDA0MS1saWJ0b29sLWF2b2lkLWxpYmRpci5wYXRjaCBcCi0gICAgZmlsZTovLzAwNDMtY3BwLnBhdGNoIFwKLSAgICBmaWxlOi8vMDA0NC1nZW5ndHlwZXMucGF0Y2ggXAotICAgIGZpbGU6Ly8wMDQ2LWxpYmF0b21pYy1kZXB0cmFja2luZy5wYXRjaCBcCi0gICAgZmlsZTovLzAwNDctcmVwb21lbWJ1Zy5wYXRjaCBcCi0gICAgZmlsZTovLzAwNDktRW5hYmxlLVNQRS1BbHRpVmVjLWdlbmVyYXRpb24tb24tcG93ZXBjLWxpbnV4LXRhcmdldC5wYXRjaCBcCi0gICAgZmlsZTovLzAwNTAtUmV2ZXJ0LVVzZS1kYnhfcmVnX251bWJlci1mb3Itc3Bhbm5pbmctcmVnaXN0ZXJzLnBhdGNoIFwKLSAgICBmaWxlOi8vMDA1MS1lYWJpc3BlLnBhdGNoIFwKLSAgICBmaWxlOi8vMDA1Mi1BZGQtdGFyZ2V0LWhvb2stdG8tb3ZlcnJpZGUtRFdBUkYyLWZyYW1lLXJlZ2lzdGVyLXNpLnBhdGNoIFwKLSAgICBmaWxlOi8vMDA1My1nY2MtZml4LXNlZ2ZhdWx0LWZyb20tY2FsbGluZy1mcmVlLW9uLW5vbi1tYWxsb2MtZC1hLnBhdGNoIFwKLSAgICBmaWxlOi8vMDA1NC1nY2MtTWFrZWZpbGUuaW4tZml4LXBhcmFsbGVsLWJ1aWxkaW5nLWZhaWx1cmUucGF0Y2ggXAotICAgIGZpbGU6Ly8wMDU1LWR3YXJmLXJlZy1wcm9jZXNzaW5nLWhlbHBlci5wYXRjaCBcCi0gICAgZmlsZTovLzAwNTYtZGVmaW5lLWRlZmF1bHQtY2ZhLXJlZ2lzdGVyLW1hcHBpbmcucGF0Y2ggXAotICAgIGZpbGU6Ly8wMDU3LWFhcmNoNjQtY29uZmlnLnBhdGNoIFwKLSAgICBmaWxlOi8vMDA1OC1nY2MtcjIxMjE3MS5wYXRjaCBcCi0gICAgZmlsZTovLzAwNTktZ2NjLVBSLXJ0bC1vcHRpbWl6YXRpb24tNjMzNDgucGF0Y2ggXAotICAgIGZpbGU6Ly8wMDYwLU9ubHktYWxsb3ctZTUwMC1kb3VibGUtaW4tU1BFX1NJTURfUkVHTk9fUC1yZWdpc3RlcnMucGF0Y2ggXAotICAgIGZpbGU6Ly8wMDYxLXRhcmdldC1nY2MtaW5jbHVkZWRpci5wYXRjaCBcCi0gICAgZmlsZTovLzAwNjItVXNlLVNZU1RFTUxJQlNfRElSLXJlcGxhY2VtZW50LWluc3RlYWQtb2YtaGFyZGNvZGluZy5wYXRjaCBcCi0gICAgZmlsZTovLzAwNjMtbmF0aXZlc2RrLWdjYy1zdXBwb3J0LnBhdGNoIFwKLSAgICBmaWxlOi8vMDA2NC1oYW5kbGUtdGFyZ2V0LXN5c3Jvb3QtbXVsdGlsaWIucGF0Y2ggXAotICAgIGZpbGU6Ly8wMDY1LWdjYy00ODMtdW5pdmVyc2FsLWluaXRpYWxpemVyLW5vLXdhcm5pbmcucGF0Y2ggXAotICAgIGZpbGU6Ly8wMDY2LWN4eGZsYWdzLWZvci1idWlsZC5wYXRjaCBcCi0gICAgZmlsZTovLzAwNjctZml4LWFybS10aHVtYi5wYXRjaCBcCi0gICAgZmlsZTovLzAwNjctZ2NjLW11c2wtc3VwcG9ydC5wYXRjaCBcCi0gICAgZmlsZTovLzAwNjgtbXVzbC1keW5hbWljLWxpbmtlci5wYXRjaCBcCi0gICAgZmlsZTovLzAwNjktbXVzbC1uby1maXhpbmNsdWRlcy5wYXRjaCBcCi0gICAgZmlsZTovLzAwNzAtbGlic3RkYy1tdXNsLnBhdGNoIFwKLSAgICBmaWxlOi8vMDA3MS1JZ25vcmUtZmRlYnVnLXByZWZpeC1tYXAtaW4tcHJvZHVjZXItc3RyaW5nLWJ5LURhbmllLnBhdGNoIFwKLSAgICBmaWxlOi8vMDA3Mi1zdXBwb3J0LWZmaWxlLXByZWZpeC1tYXAucGF0Y2ggXAotICAgIGZpbGU6Ly8wMDczLVJldXNlLWZkZWJ1Zy1wcmVmaXgtbWFwLXRvLXJlcGxhY2UtZmZpbGUtcHJlZml4LW1hcC5wYXRjaCBcCi0gICAgZmlsZTovLzAwNzQtZmRlYnVnLXByZWZpeC1tYXAtc3VwcG9ydC10by1yZW1hcC1yZWxhdGl2ZS1wYXRoLnBhdGNoIFwKLSIKLVNSQ19VUklbbWQ1c3VtXSA9ICI2ZjgzMWI0ZDI1MTg3MjczNmU4ZTljYzA5NzQ2ZjMyNyIKLVNSQ19VUklbc2hhMjU2c3VtXSA9ICIyMzMyYjJhNWEzMjFiNTc1MDhiOTAzMTM1NGE4NTAzYWY2ZmRmYjg2OGI4YzE3NDhkMzMwMjhkMTAwYThiNjdlIgotCi1VUFNUUkVBTV9DSEVDS19SRUdFWCA9ICJnY2MtKD9QPHB2ZXI+NFwuOVwuXGQrKS50YXIiCi0KLVMgPSAiJHtUTVBESVJ9L3dvcmstc2hhcmVkL2djYy0ke1BWfS0ke1BSfS9nY2MtJHtQVn0iCi1CID0gIiR7V09SS0RJUn0vZ2NjLSR7UFZ9L2J1aWxkLiR7SE9TVF9TWVN9LiR7VEFSR0VUX1NZU30iCi0KLSMgTGFuZ3VhZ2UgT3ZlcnJpZGVzCi1GT1JUUkFOID0gIiIKLUpBVkEgPSAiIgotCi1MVE8gPSAiLS1lbmFibGUtbHRvIgotCi1FWFRSQV9PRUNPTkZfQkFTRSA9ICJcCi0gICAgJHtMVE99IFwKLSAgICAtLWVuYWJsZS1saWJzc3AgXAotICAgIC0tZGlzYWJsZS1ib290c3RyYXAgXAotICAgIC0tZGlzYWJsZS1saWJtdWRmbGFwIFwKLSAgICAtLXdpdGgtc3lzdGVtLXpsaWIgXAotICAgIC0td2l0aC1saW5rZXItaGFzaC1zdHlsZT0ke0xJTktFUl9IQVNIX1NUWUxFfSBcCi0gICAgLS1lbmFibGUtbGlua2VyLWJ1aWxkLWlkIFwKLSAgICAtLXdpdGgtcHBsPW5vIFwKLSAgICAtLXdpdGgtY2xvb2c9bm8gXAotICAgIC0tZW5hYmxlLWNoZWNraW5nPXJlbGVhc2UgXAotICAgIC0tZW5hYmxlLWNoZWFkZXJzPWNfZ2xvYmFsIFwKLSIKLQotRVhUUkFfT0VDT05GX0lOSVRJQUwgPSAiXAotICAgIC0tZGlzYWJsZS1saWJtdWRmbGFwIFwKLSAgICAtLWRpc2FibGUtbGliZ29tcCBcCi0gICAgLS1kaXNhYmxlLWxpYnNzcCBcCi0gICAgLS1kaXNhYmxlLWxpYnF1YWRtYXRoIFwKLSAgICAtLXdpdGgtc3lzdGVtLXpsaWIgXAotICAgIC0tZGlzYWJsZS1sdG8gXAotICAgIC0tZGlzYWJsZS1wbHVnaW4gXAotICAgIC0tZW5hYmxlLWRlY2ltYWwtZmxvYXQ9bm8gXAotIgotCi1FWFRSQV9PRUNPTkZfYXBwZW5kX2xpYmMtdWNsaWJjID0gIiAtLWRpc2FibGUtZGVjaW1hbC1mbG9hdCAiCi0KLUVYVFJBX09FQ09ORl9QQVRIUyA9ICJcCi0gICAgLS13aXRoLWd4eC1pbmNsdWRlLWRpcj0vbm90L2V4aXN0e3RhcmdldF9pbmNsdWRlZGlyfS9jKysvJHtCSU5WfSBcCi0gICAgLS13aXRoLXN5c3Jvb3Q9L25vdC9leGlzdCBcCi0gICAgLS13aXRoLWJ1aWxkLXN5c3Jvb3Q9JHtTVEFHSU5HX0RJUl9UQVJHRVR9IFwKLSIKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy00LjkvMDAwMS1nY2MtNC4zLjEtQVJDSF9GTEFHU19GT1JfVEFSR0VULnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTQuOS8wMDAxLWdjYy00LjMuMS1BUkNIX0ZMQUdTX0ZPUl9UQVJHRVQucGF0Y2gKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGU1ODgwMTEuLjAwMDAwMDAKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTQuOS8wMDAxLWdjYy00LjMuMS1BUkNIX0ZMQUdTX0ZPUl9UQVJHRVQucGF0Y2gKKysrIC9kZXYvbnVsbApAQCAtMSw0MiArMCwwIEBACi1Gcm9tIGJmM2Q5NmFlNThmYTE4MGI4YjQ2OGQyNWRjMmUwMjA5ZGFjYTI3NTEgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCi1Gcm9tOiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgotRGF0ZTogRnJpLCAyOSBNYXIgMjAxMyAwODozNzoxMSArMDQwMAotU3ViamVjdDogW1BBVENIIDAxLzM1XSBnY2MtNC4zLjE6IEFSQ0hfRkxBR1NfRk9SX1RBUkdFVAotCi1TaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgotCi1VcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW2VtYmVkZGVkIHNwZWNpZmljXQotLS0tCi0gY29uZmlndXJlICAgIHwgICAgMiArLQotIGNvbmZpZ3VyZS5hYyB8ICAgIDIgKy0KLSAyIGZpbGVzIGNoYW5nZWQsIDIgaW5zZXJ0aW9ucygrKSwgMiBkZWxldGlvbnMoLSkKLQotZGlmZiAtLWdpdCBhL2NvbmZpZ3VyZSBiL2NvbmZpZ3VyZQotaW5kZXggZDgwOTUzNS4uMWI3NmM5MCAxMDA3NTUKLS0tLSBhL2NvbmZpZ3VyZQotKysrIGIvY29uZmlndXJlCi1AQCAtNzQzOSw3ICs3NDM5LDcgQEAgZmkKLSAjIGZvciB0YXJnZXRfYWxpYXMgYW5kIGdjYyBkb2Vzbid0IG1hbmFnZSBpdCBjb25zaXN0ZW50bHkuCi0gdGFyZ2V0X2NvbmZpZ2FyZ3M9Ii0tY2FjaGUtZmlsZT0uL2NvbmZpZy5jYWNoZSAke3RhcmdldF9jb25maWdhcmdzfSIKLSAKLS1GTEFHU19GT1JfVEFSR0VUPQotK0ZMQUdTX0ZPUl9UQVJHRVQ9IiRBUkNIX0ZMQUdTX0ZPUl9UQVJHRVQiCi0gY2FzZSAiICR0YXJnZXRfY29uZmlnZGlycyAiIGluCi0gICoiIG5ld2xpYiAiKikKLSAgIGNhc2UgIiAkdGFyZ2V0X2NvbmZpZ2FyZ3MgIiBpbgotZGlmZiAtLWdpdCBhL2NvbmZpZ3VyZS5hYyBiL2NvbmZpZ3VyZS5hYwotaW5kZXggNDhlYzFhYS4uODlkMWQzZiAxMDA2NDQKLS0tLSBhL2NvbmZpZ3VyZS5hYwotKysrIGIvY29uZmlndXJlLmFjCi1AQCAtMjg3Myw3ICsyODczLDcgQEAgZmkKLSAjIGZvciB0YXJnZXRfYWxpYXMgYW5kIGdjYyBkb2Vzbid0IG1hbmFnZSBpdCBjb25zaXN0ZW50bHkuCi0gdGFyZ2V0X2NvbmZpZ2FyZ3M9Ii0tY2FjaGUtZmlsZT0uL2NvbmZpZy5jYWNoZSAke3RhcmdldF9jb25maWdhcmdzfSIKLSAKLS1GTEFHU19GT1JfVEFSR0VUPQotK0ZMQUdTX0ZPUl9UQVJHRVQ9IiRBUkNIX0ZMQUdTX0ZPUl9UQVJHRVQiCi0gY2FzZSAiICR0YXJnZXRfY29uZmlnZGlycyAiIGluCi0gICoiIG5ld2xpYiAiKikKLSAgIGNhc2UgIiAkdGFyZ2V0X2NvbmZpZ2FyZ3MgIiBpbgotLS0gCi0xLjcuMTAuNAotCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNC45LzAwMDItdWNsaWJjLWNvbmYucGF0Y2ggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNC45LzAwMDItdWNsaWJjLWNvbmYucGF0Y2gKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGRkYTNiMTAuLjAwMDAwMDAKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTQuOS8wMDAyLXVjbGliYy1jb25mLnBhdGNoCisrKyAvZGV2L251bGwKQEAgLTEsNTMgKzAsMCBAQAotRnJvbSBkMDMwOTczYzg3MmMwMGQ5MTY5MjFkODRkZWVlMGFmMmMwZDM4MDgxIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQotRnJvbTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KLURhdGU6IEZyaSwgMjkgTWFyIDIwMTMgMDg6Mzg6MjUgKzA0MDAKLVN1YmplY3Q6IFtQQVRDSCAwMi8zNV0gdWNsaWJjLWNvbmYKLQotU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KLQotVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCi0tLS0KLSBjb250cmliL3JlZ3Jlc3Npb24vb2Jqcy1nY2Muc2ggfCAgICA0ICsrKysKLSBsaWJqYXZhL2NsYXNzcGF0aC9sdGNvbmZpZyAgICAgfCAgICA0ICsrLS0KLSAyIGZpbGVzIGNoYW5nZWQsIDYgaW5zZXJ0aW9ucygrKSwgMiBkZWxldGlvbnMoLSkKLQotZGlmZiAtLWdpdCBhL2NvbnRyaWIvcmVncmVzc2lvbi9vYmpzLWdjYy5zaCBiL2NvbnRyaWIvcmVncmVzc2lvbi9vYmpzLWdjYy5zaAotaW5kZXggNjBiMDQ5Ny4uNmRjN2VhZCAxMDA3NTUKLS0tLSBhL2NvbnRyaWIvcmVncmVzc2lvbi9vYmpzLWdjYy5zaAotKysrIGIvY29udHJpYi9yZWdyZXNzaW9uL29ianMtZ2NjLnNoCi1AQCAtMTA2LDYgKzEwNiwxMCBAQCBpZiBbICRIX1JFQUxfVEFSR0VUID0gJEhfUkVBTF9IT1NUIC1hICRIX1JFQUxfVEFSR0VUID0gaTY4Ni1wYy1saW51eC1nbnUgXQotICB0aGVuCi0gICBtYWtlIGFsbC1nZGIgYWxsLWRlamFnbnUgYWxsLWxkIHx8IGV4aXQgMQotICAgbWFrZSBpbnN0YWxsLWdkYiBpbnN0YWxsLWRlamFnbnUgaW5zdGFsbC1sZCB8fCBleGl0IDEKLStlbGlmIFsgJEhfUkVBTF9UQVJHRVQgPSAkSF9SRUFMX0hPU1QgLWEgJEhfUkVBTF9UQVJHRVQgPSBpNjg2LXBjLWxpbnV4LXVjbGliYyBdCi0rIHRoZW4KLSsgIG1ha2UgYWxsLWdkYiBhbGwtZGVqYWdudSBhbGwtbGQgfHwgZXhpdCAxCi0rICBtYWtlIGluc3RhbGwtZ2RiIGluc3RhbGwtZGVqYWdudSBpbnN0YWxsLWxkIHx8IGV4aXQgMQotIGVsaWYgWyAkSF9SRUFMX1RBUkdFVCA9ICRIX1JFQUxfSE9TVCBdIDsgdGhlbgotICAgbWFrZSBib290c3RyYXAgfHwgZXhpdCAxCi0gICBtYWtlIGluc3RhbGwgfHwgZXhpdCAxCi1kaWZmIC0tZ2l0IGEvbGliamF2YS9jbGFzc3BhdGgvbHRjb25maWcgYi9saWJqYXZhL2NsYXNzcGF0aC9sdGNvbmZpZwotaW5kZXggNzQzZDk1MS4uYWU0ZWE2MCAxMDA3NTUKLS0tLSBhL2xpYmphdmEvY2xhc3NwYXRoL2x0Y29uZmlnCi0rKysgYi9saWJqYXZhL2NsYXNzcGF0aC9sdGNvbmZpZwotQEAgLTYwMyw3ICs2MDMsNyBAQCBob3N0X29zPWBlY2hvICRob3N0IHwgc2VkICdzL15cKFteLV0qXCktXChbXi1dKlwpLVwoLipcKSQvXDMvJ2AKLSAKLSAjIFRyYW5zZm9ybSBsaW51eCogdG8gKi0qLWxpbnV4LWdudSosIHRvIHN1cHBvcnQgb2xkIGNvbmZpZ3VyZSBzY3JpcHRzLgotIGNhc2UgJGhvc3Rfb3MgaW4KLS1saW51eC1nbnUqKSA7OwotK2xpbnV4LWdudSp8bGludXgtdWNsaWJjKikgOzsKLSBsaW51eCopIGhvc3Q9YGVjaG8gJGhvc3QgfCBzZWQgJ3MvXlwoLiotLiotbGludXhcKVwoLipcKSQvXDEtZ251XDIvJ2AKLSBlc2FjCi0gCi1AQCAtMTI0Nyw3ICsxMjQ3LDcgQEAgbGludXgtZ251b2xkbGQqIHwgbGludXgtZ251YW91dCogfCBsaW51eC1nbnVjb2ZmKikKLSAgIDs7Ci0gCi0gIyBUaGlzIG11c3QgYmUgTGludXggRUxGLgotLWxpbnV4LWdudSopCi0rbGludXgqKQotICAgdmVyc2lvbl90eXBlPWxpbnV4Ci0gICBuZWVkX2xpYl9wcmVmaXg9bm8KLSAgIG5lZWRfdmVyc2lvbj1ubwotLS0gCi0xLjcuMTAuNAotCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNC45LzAwMDMtZ2NjLXVjbGliYy1sb2NhbGUtY3R5cGVfdG91cGxvd190LnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTQuOS8wMDAzLWdjYy11Y2xpYmMtbG9jYWxlLWN0eXBlX3RvdXBsb3dfdC5wYXRjaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzA5OGU5OS4uMDAwMDAwMAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNC45LzAwMDMtZ2NjLXVjbGliYy1sb2NhbGUtY3R5cGVfdG91cGxvd190LnBhdGNoCisrKyAvZGV2L251bGwKQEAgLTEsODcgKzAsMCBAQAotRnJvbSBkMmQ5ZGQ3NTZjNDM1NmQxNGRkN2FlMDAzODU2MzQ0Y2I0ZjM3OTg1IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQotRnJvbTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KLURhdGU6IEZyaSwgMjkgTWFyIDIwMTMgMDg6NDA6MTIgKzA0MDAKLVN1YmplY3Q6IFtQQVRDSCAwMy8zNV0gZ2NjLXVjbGliYy1sb2NhbGUtY3R5cGVfdG91cGxvd190Ci0KLVNpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+Ci0KLVVwc3RyZWFtLVN0YXR1czogUGVuZGluZwotLS0tCi0gbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvZ2VuZXJpYy9jX2xvY2FsZS5jYyB8ICAgIDUgKysrKysKLSBsaWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS9nZW5lcmljL2NfbG9jYWxlLmggIHwgICAgOSArKysrKysrKysKLSBsaWJzdGRjKystdjMvY29uZmlnL29zL2dudS1saW51eC9jdHlwZV9iYXNlLmggIHwgICAgOSArKysrKysrKysKLSAzIGZpbGVzIGNoYW5nZWQsIDIzIGluc2VydGlvbnMoKykKLQotZGlmZiAtLWdpdCBhL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL2dlbmVyaWMvY19sb2NhbGUuY2MgYi9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS9nZW5lcmljL2NfbG9jYWxlLmNjCi1pbmRleCAwZDMwOWE1Li5mMmYxZTFmIDEwMDY0NAotLS0tIGEvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvZ2VuZXJpYy9jX2xvY2FsZS5jYwotKysrIGIvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvZ2VuZXJpYy9jX2xvY2FsZS5jYwotQEAgLTI2Myw1ICsyNjMsMTAgQEAgX0dMSUJDWFhfRU5EX05BTUVTUEFDRV9WRVJTSU9OCi0gI2lmZGVmIF9HTElCQ1hYX0xPTkdfRE9VQkxFX0NPTVBBVAotICNkZWZpbmUgX0dMSUJDWFhfTERCTF9DT01QQVQoZGJsLCBsZGJsKSBcCi0gICBleHRlcm4gIkMiIHZvaWQgbGRibCAodm9pZCkgX19hdHRyaWJ1dGVfXyAoKGFsaWFzICgjZGJsKSkpCi0rI2lmZGVmIF9fVUNMSUJDX18KLSsvLyBUaGlzIGlzIGJlY2F1c2UgX19jX2xvY2FsZSBpcyBvZiB0eXBlIF9fY3R5cGVfdG91cGxvd190KiB3aGljaCBpcyBzaG9ydCBvbiB1Y2xpYmMuIGZvciBnbGliYyBpdHMgaW50KgotK19HTElCQ1hYX0xEQkxfQ09NUEFUKF9aU3QxNF9fY29udmVydF90b192SWRFdlBLY1JUX1JTdDEyX0lvc19Jb3N0YXRlUktQcywgX1pTdDE0X19jb252ZXJ0X3RvX3ZJZUV2UEtjUlRfUlN0MTJfSW9zX0lvc3RhdGVSS1BzKTsKLSsjZWxzZQotIF9HTElCQ1hYX0xEQkxfQ09NUEFUKF9aU3QxNF9fY29udmVydF90b192SWRFdlBLY1JUX1JTdDEyX0lvc19Jb3N0YXRlUktQaSwgX1pTdDE0X19jb252ZXJ0X3RvX3ZJZUV2UEtjUlRfUlN0MTJfSW9zX0lvc3RhdGVSS1BpKTsKLSsjZW5kaWYKLSAjZW5kaWYgLy8gX0dMSUJDWFhfTE9OR19ET1VCTEVfQ09NUEFUCi1kaWZmIC0tZ2l0IGEvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvZ2VuZXJpYy9jX2xvY2FsZS5oIGIvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvZ2VuZXJpYy9jX2xvY2FsZS5oCi1pbmRleCBiNWZkOTg5Li4zZGE5YTVkIDEwMDY0NAotLS0tIGEvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvZ2VuZXJpYy9jX2xvY2FsZS5oCi0rKysgYi9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS9nZW5lcmljL2NfbG9jYWxlLmgKLUBAIC00MCwxMyArNDAsMjIgQEAKLSAKLSAjaW5jbHVkZSA8Y2xvY2FsZT4KLSAKLSsjaWZkZWYgX19VQ0xJQkNfXwotKyNpbmNsdWRlIDxmZWF0dXJlcy5oPgotKyNpbmNsdWRlIDxjdHlwZS5oPgotKyNlbmRpZgotKwotICNkZWZpbmUgX0dMSUJDWFhfTlVNX0NBVEVHT1JJRVMgMAotIAotIG5hbWVzcGFjZSBzdGQgX0dMSUJDWFhfVklTSUJJTElUWShkZWZhdWx0KQotIHsKLSBfR0xJQkNYWF9CRUdJTl9OQU1FU1BBQ0VfVkVSU0lPTgotIAotKyNpZmRlZiBfX1VDTElCQ19fCi0rICB0eXBlZGVmIF9fY3R5cGVfdG91cGxvd190KglfX2NfbG9jYWxlOwotKyNlbHNlCi0gICB0eXBlZGVmIGludCoJCQlfX2NfbG9jYWxlOwotKyNlbmRpZgotIAotICAgLy8gQ29udmVydCBudW1lcmljIHZhbHVlIG9mIHR5cGUgZG91YmxlIGFuZCBsb25nIGRvdWJsZSB0byBzdHJpbmcgYW5kCi0gICAvLyByZXR1cm4gbGVuZ3RoIG9mIHN0cmluZy4gIElmIHZzbnByaW50ZiBpcyBhdmFpbGFibGUgdXNlIGl0LCBvdGhlcndpc2UKLWRpZmYgLS1naXQgYS9saWJzdGRjKystdjMvY29uZmlnL29zL2dudS1saW51eC9jdHlwZV9iYXNlLmggYi9saWJzdGRjKystdjMvY29uZmlnL29zL2dudS1saW51eC9jdHlwZV9iYXNlLmgKLWluZGV4IDJkOGU5NzguLjE0ZWIwOGYgMTAwNjQ0Ci0tLS0gYS9saWJzdGRjKystdjMvY29uZmlnL29zL2dudS1saW51eC9jdHlwZV9iYXNlLmgKLSsrKyBiL2xpYnN0ZGMrKy12My9jb25maWcvb3MvZ251LWxpbnV4L2N0eXBlX2Jhc2UuaAotQEAgLTMzLDYgKzMzLDExIEBACi0gCi0gLy8gSW5mb3JtYXRpb24gYXMgZ2xlYW5lZCBmcm9tIC91c3IvaW5jbHVkZS9jdHlwZS5oCi0gCi0rI2lmZGVmIF9fVUNMSUJDX18KLSsjaW5jbHVkZSA8ZmVhdHVyZXMuaD4KLSsjaW5jbHVkZSA8Y3R5cGUuaD4KLSsjZW5kaWYKLSsKLSBuYW1lc3BhY2Ugc3RkIF9HTElCQ1hYX1ZJU0lCSUxJVFkoZGVmYXVsdCkKLSB7Ci0gX0dMSUJDWFhfQkVHSU5fTkFNRVNQQUNFX1ZFUlNJT04KLUBAIC00MSw3ICs0NiwxMSBAQCBfR0xJQkNYWF9CRUdJTl9OQU1FU1BBQ0VfVkVSU0lPTgotICAgc3RydWN0IGN0eXBlX2Jhc2UKLSAgIHsKLSAgICAgLy8gTm9uLXN0YW5kYXJkIHR5cGVkZWZzLgotKyNpZmRlZiBfX1VDTElCQ19fCi0rICAgIHR5cGVkZWYgY29uc3QgX19jdHlwZV90b3VwbG93X3QqCV9fdG9fdHlwZTsKLSsjZWxzZQotICAgICB0eXBlZGVmIGNvbnN0IGludCogCQlfX3RvX3R5cGU7Ci0rI2VuZGlmCi0gCi0gICAgIC8vIE5COiBPZmZzZXRzIGludG8gY3R5cGU8Y2hhcj46Ol9NX3RhYmxlIGZvcmNlIGEgcGFydGljdWxhciBzaXplCi0gICAgIC8vIG9uIHRoZSBtYXNrIHR5cGUuIEJlY2F1c2Ugb2YgdGhpcywgd2UgZG9uJ3QgdXNlIGFuIGVudW0uCi0tLSAKLTEuNy4xMC40Ci0KZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy00LjkvMDAwNC11Y2xpYmMtbG9jYWxlLnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTQuOS8wMDA0LXVjbGliYy1sb2NhbGUucGF0Y2gKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQ5ZjVmMzMuLjAwMDAwMDAKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTQuOS8wMDA0LXVjbGliYy1sb2NhbGUucGF0Y2gKKysrIC9kZXYvbnVsbApAQCAtMSwyODYyICswLDAgQEAKLUZyb20gYTU1Yzc1MWE0NDljMmNiZjBiM2ZjYzA3YWFiMWI4NmJmOTY2MTUxMCBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKLUZyb206IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+Ci1EYXRlOiBGcmksIDI5IE1hciAyMDEzIDA4OjQxOjM5ICswNDAwCi1TdWJqZWN0OiBbUEFUQ0ggMDQvMzVdIHVjbGliYy1sb2NhbGUKLQotU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KLQotVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCi0tLS0KLSBsaWJzdGRjKystdjMvYWNpbmNsdWRlLm00ICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgMzcgKysKLSAuLi4vY29uZmlnL2xvY2FsZS91Y2xpYmMvYysrbG9jYWxlX2ludGVybmFsLmggICAgICB8ICAgNjMgKysKLSBsaWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvY19sb2NhbGUuY2MgICAgICB8ICAxNjAgKysrKysKLSBsaWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvY19sb2NhbGUuaCAgICAgICB8ICAxMTcgKysrKwotIC4uLi9jb25maWcvbG9jYWxlL3VjbGliYy9jb2RlY3Z0X21lbWJlcnMuY2MgICAgICAgIHwgIDMwOCArKysrKysrKysKLSAuLi4vY29uZmlnL2xvY2FsZS91Y2xpYmMvY29sbGF0ZV9tZW1iZXJzLmNjICAgICAgICB8ICAgODAgKysrCi0gbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL2N0eXBlX21lbWJlcnMuY2MgfCAgMzAwICsrKysrKysrKwotIC4uLi9jb25maWcvbG9jYWxlL3VjbGliYy9tZXNzYWdlc19tZW1iZXJzLmNjICAgICAgIHwgIDEwMCArKysKLSAuLi4vY29uZmlnL2xvY2FsZS91Y2xpYmMvbWVzc2FnZXNfbWVtYmVycy5oICAgICAgICB8ICAxMTggKysrKwotIC4uLi9jb25maWcvbG9jYWxlL3VjbGliYy9tb25ldGFyeV9tZW1iZXJzLmNjICAgICAgIHwgIDY5MiArKysrKysrKysrKysrKysrKysrKwotIC4uLi9jb25maWcvbG9jYWxlL3VjbGliYy9udW1lcmljX21lbWJlcnMuY2MgICAgICAgIHwgIDE2MCArKysrKwotIGxpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy90aW1lX21lbWJlcnMuY2MgIHwgIDQwNiArKysrKysrKysrKysKLSBsaWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvdGltZV9tZW1iZXJzLmggICB8ICAgNjggKysKLSBsaWJzdGRjKystdjMvY29uZmlndXJlICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgNzUgKysrCi0gbGlic3RkYysrLXYzL2luY2x1ZGUvY19jb21wYXRpYmlsaXR5L3djaGFyLmggICAgICAgfCAgICAyICsKLSBsaWJzdGRjKystdjMvaW5jbHVkZS9jX3N0ZC9jd2NoYXIgICAgICAgICAgICAgICAgICB8ICAgIDIgKwotIDE2IGZpbGVzIGNoYW5nZWQsIDI2ODggaW5zZXJ0aW9ucygrKQotIGNyZWF0ZSBtb2RlIDEwMDY0NCBsaWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvYysrbG9jYWxlX2ludGVybmFsLmgKLSBjcmVhdGUgbW9kZSAxMDA2NDQgbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL2NfbG9jYWxlLmNjCi0gY3JlYXRlIG1vZGUgMTAwNjQ0IGxpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9jX2xvY2FsZS5oCi0gY3JlYXRlIG1vZGUgMTAwNjQ0IGxpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9jb2RlY3Z0X21lbWJlcnMuY2MKLSBjcmVhdGUgbW9kZSAxMDA2NDQgbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL2NvbGxhdGVfbWVtYmVycy5jYwotIGNyZWF0ZSBtb2RlIDEwMDY0NCBsaWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvY3R5cGVfbWVtYmVycy5jYwotIGNyZWF0ZSBtb2RlIDEwMDY0NCBsaWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvbWVzc2FnZXNfbWVtYmVycy5jYwotIGNyZWF0ZSBtb2RlIDEwMDY0NCBsaWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvbWVzc2FnZXNfbWVtYmVycy5oCi0gY3JlYXRlIG1vZGUgMTAwNjQ0IGxpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9tb25ldGFyeV9tZW1iZXJzLmNjCi0gY3JlYXRlIG1vZGUgMTAwNjQ0IGxpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9udW1lcmljX21lbWJlcnMuY2MKLSBjcmVhdGUgbW9kZSAxMDA2NDQgbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL3RpbWVfbWVtYmVycy5jYwotIGNyZWF0ZSBtb2RlIDEwMDY0NCBsaWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvdGltZV9tZW1iZXJzLmgKLQotZGlmZiAtLWdpdCBhL2xpYnN0ZGMrKy12My9hY2luY2x1ZGUubTQgYi9saWJzdGRjKystdjMvYWNpbmNsdWRlLm00Ci1pbmRleCAwODcxYTZhLi4zMjZkN2VmIDEwMDY0NAotLS0tIGEvbGlic3RkYysrLXYzL2FjaW5jbHVkZS5tNAotKysrIGIvbGlic3RkYysrLXYzL2FjaW5jbHVkZS5tNAotQEAgLTE5MDUsNiArMTkwNSw5IEBAIEFDX0RFRlVOKFtHTElCQ1hYX0VOQUJMRV9DTE9DQUxFXSwgWwotICAgIyBEZWZhdWx0IHRvICJnZW5lcmljIi4KLSAgIGlmIHRlc3QgJGVuYWJsZV9jbG9jYWxlX2ZsYWcgPSBhdXRvOyB0aGVuCi0gICAgIGNhc2UgJHt0YXJnZXRfb3N9IGluCi0rICAgICAgKi11Y2xpYmMqKQotKyAgICAgICAgZW5hYmxlX2Nsb2NhbGVfZmxhZz11Y2xpYmMKLSsgICAgICAgIDs7Ci0gICAgICAgbGludXgqIHwgZ251KiB8IGtmcmVlYnNkKi1nbnUgfCBrbmV0YnNkKi1nbnUpCi0gCWVuYWJsZV9jbG9jYWxlX2ZsYWc9Z251Ci0gCTs7Ci1AQCAtMjA2OSw2ICsyMDcyLDQwIEBAIEFDX0RFRlVOKFtHTElCQ1hYX0VOQUJMRV9DTE9DQUxFXSwgWwotICAgICAgIENUSU1FX0NDPWNvbmZpZy9sb2NhbGUvZ2VuZXJpYy90aW1lX21lbWJlcnMuY2MKLSAgICAgICBDTE9DQUxFX0lOVEVSTkFMX0g9Y29uZmlnL2xvY2FsZS9nZW5lcmljL2MrK2xvY2FsZV9pbnRlcm5hbC5oCi0gICAgICAgOzsKLSsgICAgdWNsaWJjKQotKyAgICAgIEFDX01TR19SRVNVTFQodWNsaWJjKQotKwotKyAgICAgICMgRGVjbGFyZSBpbnRlbnRpb24gdG8gdXNlIGdldHRleHQsIGFuZCBhZGQgc3VwcG9ydCBmb3Igc3BlY2lmaWMKLSsgICAgICAjIGxhbmd1YWdlcy4KLSsgICAgICAjIEZvciBzb21lIHJlYXNvbiwgQUxMX0xJTkdVQVMgaGFzIHRvIGJlIGJlZm9yZSBBTS1HTlUtR0VUVEVYVAotKyAgICAgIEFMTF9MSU5HVUFTPSJkZSBmciIKLSsKLSsgICAgICAjIERvbid0IGNhbGwgQU0tR05VLUdFVFRFWFQgaGVyZS4gSW5zdGVhZCwgYXNzdW1lIGdsaWJjLgotKyAgICAgIEFDX0NIRUNLX1BST0coY2hlY2tfbXNnZm10LCBtc2dmbXQsIHllcywgbm8pCi0rICAgICAgaWYgdGVzdCB4IiRjaGVja19tc2dmbXQiID0geCJ5ZXMiICYmIHRlc3QgeCIkZW5hYmxlX25scyIgPSB4InllcyI7IHRoZW4KLSsgICAgICAgIFVTRV9OTFM9eWVzCi0rICAgICAgZmkKLSsgICAgICAjIEV4cG9ydCB0aGUgYnVpbGQgb2JqZWN0cy4KLSsgICAgICBmb3IgbGluZyBpbiAkQUxMX0xJTkdVQVM7IGRvIFwKLSsgICAgICAgIGdsaWJjeHhfTU9GSUxFUz0iJGdsaWJjeHhfTU9GSUxFUyAkbGluZy5tbyI7IFwKLSsgICAgICAgIGdsaWJjeHhfUE9GSUxFUz0iJGdsaWJjeHhfUE9GSUxFUyAkbGluZy5wbyI7IFwKLSsgICAgICBkb25lCi0rICAgICAgQUNfU1VCU1QoZ2xpYmN4eF9NT0ZJTEVTKQotKyAgICAgIEFDX1NVQlNUKGdsaWJjeHhfUE9GSUxFUykKLSsKLSsgICAgICBDTE9DQUxFX0g9Y29uZmlnL2xvY2FsZS91Y2xpYmMvY19sb2NhbGUuaAotKyAgICAgIENMT0NBTEVfQ0M9Y29uZmlnL2xvY2FsZS91Y2xpYmMvY19sb2NhbGUuY2MKLSsgICAgICBDQ09ERUNWVF9DQz1jb25maWcvbG9jYWxlL3VjbGliYy9jb2RlY3Z0X21lbWJlcnMuY2MKLSsgICAgICBDQ09MTEFURV9DQz1jb25maWcvbG9jYWxlL3VjbGliYy9jb2xsYXRlX21lbWJlcnMuY2MKLSsgICAgICBDQ1RZUEVfQ0M9Y29uZmlnL2xvY2FsZS91Y2xpYmMvY3R5cGVfbWVtYmVycy5jYwotKyAgICAgIENNRVNTQUdFU19IPWNvbmZpZy9sb2NhbGUvdWNsaWJjL21lc3NhZ2VzX21lbWJlcnMuaAotKyAgICAgIENNRVNTQUdFU19DQz1jb25maWcvbG9jYWxlL3VjbGliYy9tZXNzYWdlc19tZW1iZXJzLmNjCi0rICAgICAgQ01PTkVZX0NDPWNvbmZpZy9sb2NhbGUvdWNsaWJjL21vbmV0YXJ5X21lbWJlcnMuY2MKLSsgICAgICBDTlVNRVJJQ19DQz1jb25maWcvbG9jYWxlL3VjbGliYy9udW1lcmljX21lbWJlcnMuY2MKLSsgICAgICBDVElNRV9IPWNvbmZpZy9sb2NhbGUvdWNsaWJjL3RpbWVfbWVtYmVycy5oCi0rICAgICAgQ1RJTUVfQ0M9Y29uZmlnL2xvY2FsZS91Y2xpYmMvdGltZV9tZW1iZXJzLmNjCi0rICAgICAgQ0xPQ0FMRV9JTlRFUk5BTF9IPWNvbmZpZy9sb2NhbGUvdWNsaWJjL2MrK2xvY2FsZV9pbnRlcm5hbC5oCi0rICAgICAgOzsKLSAgIGVzYWMKLSAKLSAgICMgVGhpcyBpcyB3aGVyZSB0aGUgdGVzdHN1aXRlIGxvb2tzIGZvciBsb2NhbGUgY2F0YWxvZ3MsIHVzaW5nIHRoZQotZGlmZiAtLWdpdCBhL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9jKytsb2NhbGVfaW50ZXJuYWwuaCBiL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9jKytsb2NhbGVfaW50ZXJuYWwuaAotbmV3IGZpbGUgbW9kZSAxMDA2NDQKLWluZGV4IDAwMDAwMDAuLjJhZTNlNGEKLS0tLSAvZGV2L251bGwKLSsrKyBiL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9jKytsb2NhbGVfaW50ZXJuYWwuaAotQEAgLTAsMCArMSw2MyBAQAotKy8vIFByb3RvdHlwZXMgZm9yIEdMSUJDIHRocmVhZCBsb2NhbGUgX18tcHJlZml4ZWQgZnVuY3Rpb25zIC0qLSBDKysgLSotCi0rCi0rLy8gQ29weXJpZ2h0IChDKSAyMDAyLCAyMDA0LCAyMDA1IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgotKy8vCi0rLy8gVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBJU08gQysrIExpYnJhcnkuICBUaGlzIGxpYnJhcnkgaXMgZnJlZQotKy8vIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyIHRoZQotKy8vIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCi0rLy8gRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pCi0rLy8gYW55IGxhdGVyIHZlcnNpb24uCi0rCi0rLy8gVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0rLy8gYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSsvLyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCi0rLy8gR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSsKLSsvLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZwotKy8vIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy4gIElmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUKLSsvLyBTb2Z0d2FyZSBGb3VuZGF0aW9uLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywKLSsvLyBVU0EuCi0rCi0rLy8gQXMgYSBzcGVjaWFsIGV4Y2VwdGlvbiwgeW91IG1heSB1c2UgdGhpcyBmaWxlIGFzIHBhcnQgb2YgYSBmcmVlIHNvZnR3YXJlCi0rLy8gbGlicmFyeSB3aXRob3V0IHJlc3RyaWN0aW9uLiAgU3BlY2lmaWNhbGx5LCBpZiBvdGhlciBmaWxlcyBpbnN0YW50aWF0ZQotKy8vIHRlbXBsYXRlcyBvciB1c2UgbWFjcm9zIG9yIGlubGluZSBmdW5jdGlvbnMgZnJvbSB0aGlzIGZpbGUsIG9yIHlvdSBjb21waWxlCi0rLy8gdGhpcyBmaWxlIGFuZCBsaW5rIGl0IHdpdGggb3RoZXIgZmlsZXMgdG8gcHJvZHVjZSBhbiBleGVjdXRhYmxlLCB0aGlzCi0rLy8gZmlsZSBkb2VzIG5vdCBieSBpdHNlbGYgY2F1c2UgdGhlIHJlc3VsdGluZyBleGVjdXRhYmxlIHRvIGJlIGNvdmVyZWQgYnkKLSsvLyB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UuICBUaGlzIGV4Y2VwdGlvbiBkb2VzIG5vdCBob3dldmVyCi0rLy8gaW52YWxpZGF0ZSBhbnkgb3RoZXIgcmVhc29ucyB3aHkgdGhlIGV4ZWN1dGFibGUgZmlsZSBtaWdodCBiZSBjb3ZlcmVkIGJ5Ci0rLy8gdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLgotKwotKy8vIFdyaXR0ZW4gYnkgSmFrdWIgSmVsaW5layA8amFrdWJAcmVkaGF0LmNvbT4KLSsKLSsjaW5jbHVkZSA8Yml0cy9jKytjb25maWcuaD4KLSsjaW5jbHVkZSA8Y2xvY2FsZT4KLSsKLSsjaWZkZWYgX19VQ0xJQkNfTUpOM19PTkxZX18KLSsjd2FybmluZyBjbGVhbiB0aGlzIHVwCi0rI2VuZGlmCi0rCi0rI2lmZGVmIF9fVUNMSUJDX0hBU19YTE9DQUxFX18KLSsKLStleHRlcm4gIkMiIF9fdHlwZW9mKG5sX2xhbmdpbmZvX2wpIF9fbmxfbGFuZ2luZm9fbDsKLStleHRlcm4gIkMiIF9fdHlwZW9mKHN0cmNvbGxfbCkgX19zdHJjb2xsX2w7Ci0rZXh0ZXJuICJDIiBfX3R5cGVvZihzdHJmdGltZV9sKSBfX3N0cmZ0aW1lX2w7Ci0rZXh0ZXJuICJDIiBfX3R5cGVvZihzdHJ0b2RfbCkgX19zdHJ0b2RfbDsKLStleHRlcm4gIkMiIF9fdHlwZW9mKHN0cnRvZl9sKSBfX3N0cnRvZl9sOwotK2V4dGVybiAiQyIgX190eXBlb2Yoc3RydG9sZF9sKSBfX3N0cnRvbGRfbDsKLStleHRlcm4gIkMiIF9fdHlwZW9mKHN0cnhmcm1fbCkgX19zdHJ4ZnJtX2w7Ci0rZXh0ZXJuICJDIiBfX3R5cGVvZihuZXdsb2NhbGUpIF9fbmV3bG9jYWxlOwotK2V4dGVybiAiQyIgX190eXBlb2YoZnJlZWxvY2FsZSkgX19mcmVlbG9jYWxlOwotK2V4dGVybiAiQyIgX190eXBlb2YoZHVwbG9jYWxlKSBfX2R1cGxvY2FsZTsKLStleHRlcm4gIkMiIF9fdHlwZW9mKHVzZWxvY2FsZSkgX191c2Vsb2NhbGU7Ci0rCi0rI2lmZGVmIF9HTElCQ1hYX1VTRV9XQ0hBUl9UCi0rZXh0ZXJuICJDIiBfX3R5cGVvZihpc3djdHlwZV9sKSBfX2lzd2N0eXBlX2w7Ci0rZXh0ZXJuICJDIiBfX3R5cGVvZih0b3dsb3dlcl9sKSBfX3Rvd2xvd2VyX2w7Ci0rZXh0ZXJuICJDIiBfX3R5cGVvZih0b3d1cHBlcl9sKSBfX3Rvd3VwcGVyX2w7Ci0rZXh0ZXJuICJDIiBfX3R5cGVvZih3Y3Njb2xsX2wpIF9fd2NzY29sbF9sOwotK2V4dGVybiAiQyIgX190eXBlb2Yod2NzZnRpbWVfbCkgX193Y3NmdGltZV9sOwotK2V4dGVybiAiQyIgX190eXBlb2Yod2NzeGZybV9sKSBfX3djc3hmcm1fbDsKLStleHRlcm4gIkMiIF9fdHlwZW9mKHdjdHlwZV9sKSBfX3djdHlwZV9sOwotKyNlbmRpZgotKwotKyNlbmRpZiAvLyBHTElCQyAyLjMgYW5kIGxhdGVyCi1kaWZmIC0tZ2l0IGEvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL2NfbG9jYWxlLmNjIGIvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL2NfbG9jYWxlLmNjCi1uZXcgZmlsZSBtb2RlIDEwMDY0NAotaW5kZXggMDAwMDAwMC4uNTA4MWRjMQotLS0tIC9kZXYvbnVsbAotKysrIGIvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL2NfbG9jYWxlLmNjCi1AQCAtMCwwICsxLDE2MCBAQAotKy8vIFdyYXBwZXIgZm9yIHVuZGVybHlpbmcgQy1sYW5ndWFnZSBsb2NhbGl6YXRpb24gLSotIEMrKyAtKi0KLSsKLSsvLyBDb3B5cmlnaHQgKEMpIDIwMDEsIDIwMDIsIDIwMDMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCi0rLy8KLSsvLyBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIElTTyBDKysgTGlicmFyeS4gIFRoaXMgbGlicmFyeSBpcyBmcmVlCi0rLy8gc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIgdGhlCi0rLy8gdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKLSsvLyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikKLSsvLyBhbnkgbGF0ZXIgdmVyc2lvbi4KLSsKLSsvLyBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSsvLyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotKy8vIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKLSsvLyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotKwotKy8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCi0rLy8gd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLiAgSWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZQotKy8vIFNvZnR3YXJlIEZvdW5kYXRpb24sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LAotKy8vIFVTQS4KLSsKLSsvLyBBcyBhIHNwZWNpYWwgZXhjZXB0aW9uLCB5b3UgbWF5IHVzZSB0aGlzIGZpbGUgYXMgcGFydCBvZiBhIGZyZWUgc29mdHdhcmUKLSsvLyBsaWJyYXJ5IHdpdGhvdXQgcmVzdHJpY3Rpb24uICBTcGVjaWZpY2FsbHksIGlmIG90aGVyIGZpbGVzIGluc3RhbnRpYXRlCi0rLy8gdGVtcGxhdGVzIG9yIHVzZSBtYWNyb3Mgb3IgaW5saW5lIGZ1bmN0aW9ucyBmcm9tIHRoaXMgZmlsZSwgb3IgeW91IGNvbXBpbGUKLSsvLyB0aGlzIGZpbGUgYW5kIGxpbmsgaXQgd2l0aCBvdGhlciBmaWxlcyB0byBwcm9kdWNlIGFuIGV4ZWN1dGFibGUsIHRoaXMKLSsvLyBmaWxlIGRvZXMgbm90IGJ5IGl0c2VsZiBjYXVzZSB0aGUgcmVzdWx0aW5nIGV4ZWN1dGFibGUgdG8gYmUgY292ZXJlZCBieQotKy8vIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4gIFRoaXMgZXhjZXB0aW9uIGRvZXMgbm90IGhvd2V2ZXIKLSsvLyBpbnZhbGlkYXRlIGFueSBvdGhlciByZWFzb25zIHdoeSB0aGUgZXhlY3V0YWJsZSBmaWxlIG1pZ2h0IGJlIGNvdmVyZWQgYnkKLSsvLyB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UuCi0rCi0rLy8KLSsvLyBJU08gQysrIDE0ODgyOiAyMi44ICBTdGFuZGFyZCBsb2NhbGUgY2F0ZWdvcmllcy4KLSsvLwotKwotKy8vIFdyaXR0ZW4gYnkgQmVuamFtaW4gS29zbmlrIDxia296QHJlZGhhdC5jb20+Ci0rCi0rI2luY2x1ZGUgPGNlcnJubz4gIC8vIEZvciBlcnJubwotKyNpbmNsdWRlIDxsb2NhbGU+Ci0rI2luY2x1ZGUgPHN0ZGV4Y2VwdD4KLSsjaW5jbHVkZSA8bGFuZ2luZm8uaD4KLSsjaW5jbHVkZSA8Yml0cy9jKytsb2NhbGVfaW50ZXJuYWwuaD4KLSsKLSsjaWZuZGVmIF9fVUNMSUJDX0hBU19YTE9DQUxFX18KLSsjZGVmaW5lIF9fc3RydG9sX2woUywgRSwgQiwgTCkgICAgICBzdHJ0b2woKFMpLCAoRSksIChCKSkKLSsjZGVmaW5lIF9fc3RydG91bF9sKFMsIEUsIEIsIEwpICAgICBzdHJ0b3VsKChTKSwgKEUpLCAoQikpCi0rI2RlZmluZSBfX3N0cnRvbGxfbChTLCBFLCBCLCBMKSAgICAgc3RydG9sbCgoUyksIChFKSwgKEIpKQotKyNkZWZpbmUgX19zdHJ0b3VsbF9sKFMsIEUsIEIsIEwpICAgIHN0cnRvdWxsKChTKSwgKEUpLCAoQikpCi0rI2RlZmluZSBfX3N0cnRvZl9sKFMsIEUsIEwpICAgICAgICAgc3RydG9mKChTKSwgKEUpKQotKyNkZWZpbmUgX19zdHJ0b2RfbChTLCBFLCBMKSAgICAgICAgIHN0cnRvZCgoUyksIChFKSkKLSsjZGVmaW5lIF9fc3RydG9sZF9sKFMsIEUsIEwpICAgICAgICBzdHJ0b2xkKChTKSwgKEUpKQotKyN3YXJuaW5nIHNob3VsZCBkdW1teSBfX25ld2xvY2FsZSBjaGVjayBmb3IgQ3xQT1NJWCA/Ci0rI2RlZmluZSBfX25ld2xvY2FsZShhLCBiLCBjKSAgICAgICAgTlVMTAotKyNkZWZpbmUgX19mcmVlbG9jYWxlKGEpICAgICAgICAgICAgICgodm9pZCkwKQotKyNkZWZpbmUgX19kdXBsb2NhbGUoYSkgICAgICAgICAgICAgIF9fY19sb2NhbGUoKQotKyNlbmRpZgotKwotK25hbWVzcGFjZSBzdGQKLSt7Ci0rICB0ZW1wbGF0ZTw+Ci0rICAgIHZvaWQKLSsgICAgX19jb252ZXJ0X3RvX3YoY29uc3QgY2hhciogX19zLCBmbG9hdCYgX192LCBpb3NfYmFzZTo6aW9zdGF0ZSYgX19lcnIsCi0rCQkgICBjb25zdCBfX2NfbG9jYWxlJiBfX2Nsb2MpCi0rICAgIHsKLSsgICAgICBpZiAoIShfX2VyciAmIGlvc19iYXNlOjpmYWlsYml0KSkKLSsJewotKwkgIGNoYXIqIF9fc2FuaXR5OwotKwkgIGVycm5vID0gMDsKLSsJICBmbG9hdCBfX2YgPSBfX3N0cnRvZl9sKF9fcywgJl9fc2FuaXR5LCBfX2Nsb2MpOwotKyAgICAgICAgICBpZiAoX19zYW5pdHkgIT0gX19zICYmIGVycm5vICE9IEVSQU5HRSkKLSsJICAgIF9fdiA9IF9fZjsKLSsJICBlbHNlCi0rCSAgICBfX2VyciB8PSBpb3NfYmFzZTo6ZmFpbGJpdDsKLSsJfQotKyAgICB9Ci0rCi0rICB0ZW1wbGF0ZTw+Ci0rICAgIHZvaWQKLSsgICAgX19jb252ZXJ0X3RvX3YoY29uc3QgY2hhciogX19zLCBkb3VibGUmIF9fdiwgaW9zX2Jhc2U6Omlvc3RhdGUmIF9fZXJyLAotKwkJICAgY29uc3QgX19jX2xvY2FsZSYgX19jbG9jKQotKyAgICB7Ci0rICAgICAgaWYgKCEoX19lcnIgJiBpb3NfYmFzZTo6ZmFpbGJpdCkpCi0rCXsKLSsJICBjaGFyKiBfX3Nhbml0eTsKLSsJICBlcnJubyA9IDA7Ci0rCSAgZG91YmxlIF9fZCA9IF9fc3RydG9kX2woX19zLCAmX19zYW5pdHksIF9fY2xvYyk7Ci0rICAgICAgICAgIGlmIChfX3Nhbml0eSAhPSBfX3MgJiYgZXJybm8gIT0gRVJBTkdFKQotKwkgICAgX192ID0gX19kOwotKwkgIGVsc2UKLSsJICAgIF9fZXJyIHw9IGlvc19iYXNlOjpmYWlsYml0OwotKwl9Ci0rICAgIH0KLSsKLSsgIHRlbXBsYXRlPD4KLSsgICAgdm9pZAotKyAgICBfX2NvbnZlcnRfdG9fdihjb25zdCBjaGFyKiBfX3MsIGxvbmcgZG91YmxlJiBfX3YsIGlvc19iYXNlOjppb3N0YXRlJiBfX2VyciwKLSsJCSAgIGNvbnN0IF9fY19sb2NhbGUmIF9fY2xvYykKLSsgICAgewotKyAgICAgIGlmICghKF9fZXJyICYgaW9zX2Jhc2U6OmZhaWxiaXQpKQotKwl7Ci0rCSAgY2hhciogX19zYW5pdHk7Ci0rCSAgZXJybm8gPSAwOwotKwkgIGxvbmcgZG91YmxlIF9fbGQgPSBfX3N0cnRvbGRfbChfX3MsICZfX3Nhbml0eSwgX19jbG9jKTsKLSsgICAgICAgICAgaWYgKF9fc2FuaXR5ICE9IF9fcyAmJiBlcnJubyAhPSBFUkFOR0UpCi0rCSAgICBfX3YgPSBfX2xkOwotKwkgIGVsc2UKLSsJICAgIF9fZXJyIHw9IGlvc19iYXNlOjpmYWlsYml0OwotKwl9Ci0rICAgIH0KLSsKLSsgIHZvaWQKLSsgIGxvY2FsZTo6ZmFjZXQ6Ol9TX2NyZWF0ZV9jX2xvY2FsZShfX2NfbG9jYWxlJiBfX2Nsb2MsIGNvbnN0IGNoYXIqIF9fcywKLSsJCQkJICAgIF9fY19sb2NhbGUgX19vbGQpCi0rICB7Ci0rICAgIF9fY2xvYyA9IF9fbmV3bG9jYWxlKDEgPDwgTENfQUxMLCBfX3MsIF9fb2xkKTsKLSsjaWZkZWYgX19VQ0xJQkNfSEFTX1hMT0NBTEVfXwotKyAgICBpZiAoIV9fY2xvYykKLSsgICAgICB7Ci0rCS8vIFRoaXMgbmFtZWQgbG9jYWxlIGlzIG5vdCBzdXBwb3J0ZWQgYnkgdGhlIHVuZGVybHlpbmcgT1MuCi0rCV9fdGhyb3dfcnVudGltZV9lcnJvcihfX04oImxvY2FsZTo6ZmFjZXQ6Ol9TX2NyZWF0ZV9jX2xvY2FsZSAiCi0rCQkJICAgICAgIm5hbWUgbm90IHZhbGlkIikpOwotKyAgICAgIH0KLSsjZW5kaWYKLSsgIH0KLSsKLSsgIHZvaWQKLSsgIGxvY2FsZTo6ZmFjZXQ6Ol9TX2Rlc3Ryb3lfY19sb2NhbGUoX19jX2xvY2FsZSYgX19jbG9jKQotKyAgewotKyAgICBpZiAoX1NfZ2V0X2NfbG9jYWxlKCkgIT0gX19jbG9jKQotKyAgICAgIF9fZnJlZWxvY2FsZShfX2Nsb2MpOwotKyAgfQotKwotKyAgX19jX2xvY2FsZQotKyAgbG9jYWxlOjpmYWNldDo6X1NfY2xvbmVfY19sb2NhbGUoX19jX2xvY2FsZSYgX19jbG9jKQotKyAgeyByZXR1cm4gX19kdXBsb2NhbGUoX19jbG9jKTsgfQotK30gLy8gbmFtZXNwYWNlIHN0ZAotKwotK25hbWVzcGFjZSBfX2dudV9jeHgKLSt7Ci0rICBjb25zdCBjaGFyKiBjb25zdCBjYXRlZ29yeV9uYW1lc1s2ICsgX0dMSUJDWFhfTlVNX0NBVEVHT1JJRVNdID0KLSsgICAgewotKyAgICAgICJMQ19DVFlQRSIsCi0rICAgICAgIkxDX05VTUVSSUMiLAotKyAgICAgICJMQ19USU1FIiwKLSsgICAgICAiTENfQ09MTEFURSIsCi0rICAgICAgIkxDX01PTkVUQVJZIiwKLSsgICAgICAiTENfTUVTU0FHRVMiLAotKyNpZiBfR0xJQkNYWF9OVU1fQ0FURUdPUklFUyAhPSAwCi0rICAgICAgIkxDX1BBUEVSIiwKLSsgICAgICAiTENfTkFNRSIsCi0rICAgICAgIkxDX0FERFJFU1MiLAotKyAgICAgICJMQ19URUxFUEhPTkUiLAotKyAgICAgICJMQ19NRUFTVVJFTUVOVCIsCi0rICAgICAgIkxDX0lERU5USUZJQ0FUSU9OIgotKyNlbmRpZgotKyAgICB9OwotK30KLSsKLStuYW1lc3BhY2Ugc3RkCi0rewotKyAgY29uc3QgY2hhciogY29uc3QqIGNvbnN0IGxvY2FsZTo6X1NfY2F0ZWdvcmllcyA9IF9fZ251X2N4eDo6Y2F0ZWdvcnlfbmFtZXM7Ci0rfSAgLy8gbmFtZXNwYWNlIHN0ZAotZGlmZiAtLWdpdCBhL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9jX2xvY2FsZS5oIGIvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL2NfbG9jYWxlLmgKLW5ldyBmaWxlIG1vZGUgMTAwNjQ0Ci1pbmRleCAwMDAwMDAwLi5kYTA3YzFmCi0tLS0gL2Rldi9udWxsCi0rKysgYi9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvY19sb2NhbGUuaAotQEAgLTAsMCArMSwxMTcgQEAKLSsvLyBXcmFwcGVyIGZvciB1bmRlcmx5aW5nIEMtbGFuZ3VhZ2UgbG9jYWxpemF0aW9uIC0qLSBDKysgLSotCi0rCi0rLy8gQ29weXJpZ2h0IChDKSAyMDAxLCAyMDAyLCAyMDAzLCAyMDA0LCAyMDA1IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgotKy8vCi0rLy8gVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBJU08gQysrIExpYnJhcnkuICBUaGlzIGxpYnJhcnkgaXMgZnJlZQotKy8vIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyIHRoZQotKy8vIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCi0rLy8gRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pCi0rLy8gYW55IGxhdGVyIHZlcnNpb24uCi0rCi0rLy8gVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0rLy8gYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSsvLyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCi0rLy8gR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSsKLSsvLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZwotKy8vIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy4gIElmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUKLSsvLyBTb2Z0d2FyZSBGb3VuZGF0aW9uLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywKLSsvLyBVU0EuCi0rCi0rLy8gQXMgYSBzcGVjaWFsIGV4Y2VwdGlvbiwgeW91IG1heSB1c2UgdGhpcyBmaWxlIGFzIHBhcnQgb2YgYSBmcmVlIHNvZnR3YXJlCi0rLy8gbGlicmFyeSB3aXRob3V0IHJlc3RyaWN0aW9uLiAgU3BlY2lmaWNhbGx5LCBpZiBvdGhlciBmaWxlcyBpbnN0YW50aWF0ZQotKy8vIHRlbXBsYXRlcyBvciB1c2UgbWFjcm9zIG9yIGlubGluZSBmdW5jdGlvbnMgZnJvbSB0aGlzIGZpbGUsIG9yIHlvdSBjb21waWxlCi0rLy8gdGhpcyBmaWxlIGFuZCBsaW5rIGl0IHdpdGggb3RoZXIgZmlsZXMgdG8gcHJvZHVjZSBhbiBleGVjdXRhYmxlLCB0aGlzCi0rLy8gZmlsZSBkb2VzIG5vdCBieSBpdHNlbGYgY2F1c2UgdGhlIHJlc3VsdGluZyBleGVjdXRhYmxlIHRvIGJlIGNvdmVyZWQgYnkKLSsvLyB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UuICBUaGlzIGV4Y2VwdGlvbiBkb2VzIG5vdCBob3dldmVyCi0rLy8gaW52YWxpZGF0ZSBhbnkgb3RoZXIgcmVhc29ucyB3aHkgdGhlIGV4ZWN1dGFibGUgZmlsZSBtaWdodCBiZSBjb3ZlcmVkIGJ5Ci0rLy8gdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLgotKwotKy8vCi0rLy8gSVNPIEMrKyAxNDg4MjogMjIuOCAgU3RhbmRhcmQgbG9jYWxlIGNhdGVnb3JpZXMuCi0rLy8KLSsKLSsvLyBXcml0dGVuIGJ5IEJlbmphbWluIEtvc25payA8YmtvekByZWRoYXQuY29tPgotKwotKyNpZm5kZWYgX0NfTE9DQUxFX0gKLSsjZGVmaW5lIF9DX0xPQ0FMRV9IIDEKLSsKLSsjcHJhZ21hIEdDQyBzeXN0ZW1faGVhZGVyCi0rCi0rI2luY2x1ZGUgPGNzdHJpbmc+ICAgICAgICAgICAgICAvLyBnZXQgc3RkOjpzdHJsZW4KLSsjaW5jbHVkZSA8Y3N0ZGlvPiAgICAgICAgICAgICAgIC8vIGdldCBzdGQ6OnNucHJpbnRmIG9yIHN0ZDo6c3ByaW50ZgotKyNpbmNsdWRlIDxjbG9jYWxlPgotKyNpbmNsdWRlIDxsYW5naW5mby5oPgkJLy8gRm9yIGNvZGVjdnQKLSsjaWZkZWYgX19VQ0xJQkNfTUpOM19PTkxZX18KLSsjd2FybmluZyBmaXggdGhpcwotKyNlbmRpZgotKyNpZmRlZiBfX1VDTElCQ19IQVNfTE9DQUxFX18KLSsjaW5jbHVkZSA8aWNvbnYuaD4JCS8vIEZvciBjb2RlY3Z0IHVzaW5nIGljb252LCBpY29udl90Ci0rI2VuZGlmCi0rI2lmZGVmIF9fVUNMSUJDX0hBU19HRVRURVhUX0FXQVJFTkVTU19fCi0rI2luY2x1ZGUgPGxpYmludGwuaD4gCQkvLyBGb3IgbWVzc2FnZXMKLSsjZW5kaWYKLSsKLSsjaWZkZWYgX19VQ0xJQkNfTUpOM19PTkxZX18KLSsjd2FybmluZyB3aGF0IGlzIF9HTElCQ1hYX0NfTE9DQUxFX0dOVSBmb3IKLSsjZW5kaWYKLSsjZGVmaW5lIF9HTElCQ1hYX0NfTE9DQUxFX0dOVSAxCi0rCi0rI2lmZGVmIF9fVUNMSUJDX01KTjNfT05MWV9fCi0rI3dhcm5pbmcgZml4IGNhdGVnb3JpZXMKLSsjZW5kaWYKLSsvLyAjZGVmaW5lIF9HTElCQ1hYX05VTV9DQVRFR09SSUVTIDYKLSsjZGVmaW5lIF9HTElCQ1hYX05VTV9DQVRFR09SSUVTIDAKLSsKLSsjaWZkZWYgX19VQ0xJQkNfSEFTX1hMT0NBTEVfXwotK25hbWVzcGFjZSBfX2dudV9jeHgKLSt7Ci0rICBleHRlcm4gIkMiIF9fdHlwZW9mKHVzZWxvY2FsZSkgX191c2Vsb2NhbGU7Ci0rfQotKyNlbmRpZgotKwotK25hbWVzcGFjZSBzdGQKLSt7Ci0rI2lmZGVmIF9fVUNMSUJDX0hBU19YTE9DQUxFX18KLSsgIHR5cGVkZWYgX19sb2NhbGVfdAkJX19jX2xvY2FsZTsKLSsjZWxzZQotKyAgdHlwZWRlZiBpbnQqCQkJX19jX2xvY2FsZTsKLSsjZW5kaWYKLSsKLSsgIC8vIENvbnZlcnQgbnVtZXJpYyB2YWx1ZSBvZiB0eXBlIF9UdiB0byBzdHJpbmcgYW5kIHJldHVybiBsZW5ndGggb2YKLSsgIC8vIHN0cmluZy4gIElmIHNucHJpbnRmIGlzIGF2YWlsYWJsZSB1c2UgaXQsIG90aGVyd2lzZSBmYWxsIGJhY2sgdG8KLSsgIC8vIHRoZSB1bnNhZmUgc3ByaW50ZiB3aGljaCwgaW4gZ2VuZXJhbCwgY2FuIGJlIGRhbmdlcm91cyBhbmQgc2hvdWxkCi0rICAvLyBiZSBhdm9pZGVkLgotKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1R2PgotKyAgICBpbnQKLSsgICAgX19jb252ZXJ0X2Zyb21fdihjaGFyKiBfX291dCwKLSsJCSAgICAgY29uc3QgaW50IF9fc2l6ZSBfX2F0dHJpYnV0ZV9fICgoX191bnVzZWRfXykpLAotKwkJICAgICBjb25zdCBjaGFyKiBfX2ZtdCwKLSsjaWZkZWYgX19VQ0xJQkNfSEFTX1hDTE9DQUxFX18KLSsJCSAgICAgX1R2IF9fdiwgY29uc3QgX19jX2xvY2FsZSYgX19jbG9jLCBpbnQgX19wcmVjKQotKyAgICB7Ci0rICAgICAgX19jX2xvY2FsZSBfX29sZCA9IF9fZ251X2N4eDo6X191c2Vsb2NhbGUoX19jbG9jKTsKLSsjZWxzZQotKwkJICAgICBfVHYgX192LCBjb25zdCBfX2NfbG9jYWxlJiwgaW50IF9fcHJlYykKLSsgICAgewotKyMgaWZkZWYgX19VQ0xJQkNfSEFTX0xPQ0FMRV9fCi0rICAgICAgY2hhciogX19vbGQgPSBzdGQ6OnNldGxvY2FsZShMQ19BTEwsIE5VTEwpOwotKyAgICAgIGNoYXIqIF9fc2F2ID0gbmV3IGNoYXJbc3RkOjpzdHJsZW4oX19vbGQpICsgMV07Ci0rICAgICAgc3RkOjpzdHJjcHkoX19zYXYsIF9fb2xkKTsKLSsgICAgICBzdGQ6OnNldGxvY2FsZShMQ19BTEwsICJDIik7Ci0rIyBlbmRpZgotKyNlbmRpZgotKwotKyAgICAgIGNvbnN0IGludCBfX3JldCA9IHN0ZDo6c25wcmludGYoX19vdXQsIF9fc2l6ZSwgX19mbXQsIF9fcHJlYywgX192KTsKLSsKLSsjaWZkZWYgX19VQ0xJQkNfSEFTX1hDTE9DQUxFX18KLSsgICAgICBfX2dudV9jeHg6Ol9fdXNlbG9jYWxlKF9fb2xkKTsKLSsjZWxpZiBkZWZpbmVkIF9fVUNMSUJDX0hBU19MT0NBTEVfXwotKyAgICAgIHN0ZDo6c2V0bG9jYWxlKExDX0FMTCwgX19zYXYpOwotKyAgICAgIGRlbGV0ZSBbXSBfX3NhdjsKLSsjZW5kaWYKLSsgICAgICByZXR1cm4gX19yZXQ7Ci0rICAgIH0KLSt9Ci0rCi0rI2VuZGlmCi1kaWZmIC0tZ2l0IGEvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL2NvZGVjdnRfbWVtYmVycy5jYyBiL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9jb2RlY3Z0X21lbWJlcnMuY2MKLW5ldyBmaWxlIG1vZGUgMTAwNjQ0Ci1pbmRleCAwMDAwMDAwLi42NGFhOTYyCi0tLS0gL2Rldi9udWxsCi0rKysgYi9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvY29kZWN2dF9tZW1iZXJzLmNjCi1AQCAtMCwwICsxLDMwOCBAQAotKy8vIHN0ZDo6Y29kZWN2dCBpbXBsZW1lbnRhdGlvbiBkZXRhaWxzLCBHTlUgdmVyc2lvbiAtKi0gQysrIC0qLQotKwotKy8vIENvcHlyaWdodCAoQykgMjAwMiwgMjAwMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KLSsvLwotKy8vIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgSVNPIEMrKyBMaWJyYXJ5LiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUKLSsvLyBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlciB0aGUKLSsvLyB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQotKy8vIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKQotKy8vIGFueSBsYXRlciB2ZXJzaW9uLgotKwotKy8vIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotKy8vIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0rLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQotKy8vIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0rCi0rLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcKLSsvLyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuICBJZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlCi0rLy8gU29mdHdhcmUgRm91bmRhdGlvbiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsCi0rLy8gVVNBLgotKwotKy8vIEFzIGEgc3BlY2lhbCBleGNlcHRpb24sIHlvdSBtYXkgdXNlIHRoaXMgZmlsZSBhcyBwYXJ0IG9mIGEgZnJlZSBzb2Z0d2FyZQotKy8vIGxpYnJhcnkgd2l0aG91dCByZXN0cmljdGlvbi4gIFNwZWNpZmljYWxseSwgaWYgb3RoZXIgZmlsZXMgaW5zdGFudGlhdGUKLSsvLyB0ZW1wbGF0ZXMgb3IgdXNlIG1hY3JvcyBvciBpbmxpbmUgZnVuY3Rpb25zIGZyb20gdGhpcyBmaWxlLCBvciB5b3UgY29tcGlsZQotKy8vIHRoaXMgZmlsZSBhbmQgbGluayBpdCB3aXRoIG90aGVyIGZpbGVzIHRvIHByb2R1Y2UgYW4gZXhlY3V0YWJsZSwgdGhpcwotKy8vIGZpbGUgZG9lcyBub3QgYnkgaXRzZWxmIGNhdXNlIHRoZSByZXN1bHRpbmcgZXhlY3V0YWJsZSB0byBiZSBjb3ZlcmVkIGJ5Ci0rLy8gdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLiAgVGhpcyBleGNlcHRpb24gZG9lcyBub3QgaG93ZXZlcgotKy8vIGludmFsaWRhdGUgYW55IG90aGVyIHJlYXNvbnMgd2h5IHRoZSBleGVjdXRhYmxlIGZpbGUgbWlnaHQgYmUgY292ZXJlZCBieQotKy8vIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4KLSsKLSsvLwotKy8vIElTTyBDKysgMTQ4ODI6IDIyLjIuMS41IC0gVGVtcGxhdGUgY2xhc3MgY29kZWN2dAotKy8vCi0rCi0rLy8gV3JpdHRlbiBieSBCZW5qYW1pbiBLb3NuaWsgPGJrb3pAcmVkaGF0LmNvbT4KLSsKLSsjaW5jbHVkZSA8bG9jYWxlPgotKyNpbmNsdWRlIDxjc3RkbGliPiAgLy8gRm9yIE1CX0NVUl9NQVgKLSsjaW5jbHVkZSA8Y2xpbWl0cz4gIC8vIEZvciBNQl9MRU5fTUFYCi0rI2luY2x1ZGUgPGJpdHMvYysrbG9jYWxlX2ludGVybmFsLmg+Ci0rCi0rbmFtZXNwYWNlIHN0ZAotK3sKLSsgIC8vIFNwZWNpYWxpemF0aW9ucy4KLSsjaWZkZWYgX0dMSUJDWFhfVVNFX1dDSEFSX1QKLSsgIGNvZGVjdnRfYmFzZTo6cmVzdWx0Ci0rICBjb2RlY3Z0PHdjaGFyX3QsIGNoYXIsIG1ic3RhdGVfdD46OgotKyAgZG9fb3V0KHN0YXRlX3R5cGUmIF9fc3RhdGUsIGNvbnN0IGludGVybl90eXBlKiBfX2Zyb20sCi0rCSBjb25zdCBpbnRlcm5fdHlwZSogX19mcm9tX2VuZCwgY29uc3QgaW50ZXJuX3R5cGUqJiBfX2Zyb21fbmV4dCwKLSsJIGV4dGVybl90eXBlKiBfX3RvLCBleHRlcm5fdHlwZSogX190b19lbmQsCi0rCSBleHRlcm5fdHlwZSomIF9fdG9fbmV4dCkgY29uc3QKLSsgIHsKLSsgICAgcmVzdWx0IF9fcmV0ID0gb2s7Ci0rICAgIHN0YXRlX3R5cGUgX190bXBfc3RhdGUoX19zdGF0ZSk7Ci0rCi0rI2lmZGVmIF9fVUNMSUJDX0hBU19YTE9DQUxFX18KLSsgICAgX19jX2xvY2FsZSBfX29sZCA9IF9fdXNlbG9jYWxlKF9NX2NfbG9jYWxlX2NvZGVjdnQpOwotKyNlbmRpZgotKwotKyAgICAvLyB3Y3NucnRvbWJzIGlzICp2ZXJ5KiBmYXN0IGJ1dCBzdG9wcyBpZiBlbmNvdW50ZXJzIE5VTCBjaGFyYWN0ZXJzOgotKyAgICAvLyBpbiBjYXNlIHdlIGZhbGwgYmFjayB0byB3Y3J0b21iIGFuZCB0aGVuIGNvbnRpbnVlLCBpbiBhIGxvb3AuCi0rICAgIC8vIE5COiB3Y3NucnRvbWJzIGlzIGEgR05VIGV4dGVuc2lvbgotKyAgICBmb3IgKF9fZnJvbV9uZXh0ID0gX19mcm9tLCBfX3RvX25leHQgPSBfX3RvOwotKwkgX19mcm9tX25leHQgPCBfX2Zyb21fZW5kICYmIF9fdG9fbmV4dCA8IF9fdG9fZW5kCi0rCSAmJiBfX3JldCA9PSBvazspCi0rICAgICAgewotKwljb25zdCBpbnRlcm5fdHlwZSogX19mcm9tX2NodW5rX2VuZCA9IHdtZW1jaHIoX19mcm9tX25leHQsIEwnXDAnLAotKwkJCQkJCSAgICAgIF9fZnJvbV9lbmQgLSBfX2Zyb21fbmV4dCk7Ci0rCWlmICghX19mcm9tX2NodW5rX2VuZCkKLSsJICBfX2Zyb21fY2h1bmtfZW5kID0gX19mcm9tX2VuZDsKLSsKLSsJX19mcm9tID0gX19mcm9tX25leHQ7Ci0rCWNvbnN0IHNpemVfdCBfX2NvbnYgPSB3Y3NucnRvbWJzKF9fdG9fbmV4dCwgJl9fZnJvbV9uZXh0LAotKwkJCQkJIF9fZnJvbV9jaHVua19lbmQgLSBfX2Zyb21fbmV4dCwKLSsJCQkJCSBfX3RvX2VuZCAtIF9fdG9fbmV4dCwgJl9fc3RhdGUpOwotKwlpZiAoX19jb252ID09IHN0YXRpY19jYXN0PHNpemVfdD4oLTEpKQotKwkgIHsKLSsJICAgIC8vIEluIGNhc2Ugb2YgZXJyb3IsIGluIG9yZGVyIHRvIHN0b3AgYXQgdGhlIGV4YWN0IHBsYWNlIHdlCi0rCSAgICAvLyBoYXZlIHRvIHN0YXJ0IGFnYWluIGZyb20gdGhlIGJlZ2lubmluZyB3aXRoIGEgc2VyaWVzIG9mCi0rCSAgICAvLyB3Y3J0b21iLgotKwkgICAgZm9yICg7IF9fZnJvbSA8IF9fZnJvbV9uZXh0OyArK19fZnJvbSkKLSsJICAgICAgX190b19uZXh0ICs9IHdjcnRvbWIoX190b19uZXh0LCAqX19mcm9tLCAmX190bXBfc3RhdGUpOwotKwkgICAgX19zdGF0ZSA9IF9fdG1wX3N0YXRlOwotKwkgICAgX19yZXQgPSBlcnJvcjsKLSsJICB9Ci0rCWVsc2UgaWYgKF9fZnJvbV9uZXh0ICYmIF9fZnJvbV9uZXh0IDwgX19mcm9tX2NodW5rX2VuZCkKLSsJICB7Ci0rCSAgICBfX3RvX25leHQgKz0gX19jb252OwotKwkgICAgX19yZXQgPSBwYXJ0aWFsOwotKwkgIH0KLSsJZWxzZQotKwkgIHsKLSsJICAgIF9fZnJvbV9uZXh0ID0gX19mcm9tX2NodW5rX2VuZDsKLSsJICAgIF9fdG9fbmV4dCArPSBfX2NvbnY7Ci0rCSAgfQotKwotKwlpZiAoX19mcm9tX25leHQgPCBfX2Zyb21fZW5kICYmIF9fcmV0ID09IG9rKQotKwkgIHsKLSsJICAgIGV4dGVybl90eXBlIF9fYnVmW01CX0xFTl9NQVhdOwotKwkgICAgX190bXBfc3RhdGUgPSBfX3N0YXRlOwotKwkgICAgY29uc3Qgc2l6ZV90IF9fY29udiA9IHdjcnRvbWIoX19idWYsICpfX2Zyb21fbmV4dCwgJl9fdG1wX3N0YXRlKTsKLSsJICAgIGlmIChfX2NvbnYgPiBzdGF0aWNfY2FzdDxzaXplX3Q+KF9fdG9fZW5kIC0gX190b19uZXh0KSkKLSsJICAgICAgX19yZXQgPSBwYXJ0aWFsOwotKwkgICAgZWxzZQotKwkgICAgICB7Ci0rCQltZW1jcHkoX190b19uZXh0LCBfX2J1ZiwgX19jb252KTsKLSsJCV9fc3RhdGUgPSBfX3RtcF9zdGF0ZTsKLSsJCV9fdG9fbmV4dCArPSBfX2NvbnY7Ci0rCQkrK19fZnJvbV9uZXh0OwotKwkgICAgICB9Ci0rCSAgfQotKyAgICAgIH0KLSsKLSsjaWZkZWYgX19VQ0xJQkNfSEFTX1hMT0NBTEVfXwotKyAgICBfX3VzZWxvY2FsZShfX29sZCk7Ci0rI2VuZGlmCi0rCi0rICAgIHJldHVybiBfX3JldDsKLSsgIH0KLSsKLSsgIGNvZGVjdnRfYmFzZTo6cmVzdWx0Ci0rICBjb2RlY3Z0PHdjaGFyX3QsIGNoYXIsIG1ic3RhdGVfdD46OgotKyAgZG9faW4oc3RhdGVfdHlwZSYgX19zdGF0ZSwgY29uc3QgZXh0ZXJuX3R5cGUqIF9fZnJvbSwKLSsJY29uc3QgZXh0ZXJuX3R5cGUqIF9fZnJvbV9lbmQsIGNvbnN0IGV4dGVybl90eXBlKiYgX19mcm9tX25leHQsCi0rCWludGVybl90eXBlKiBfX3RvLCBpbnRlcm5fdHlwZSogX190b19lbmQsCi0rCWludGVybl90eXBlKiYgX190b19uZXh0KSBjb25zdAotKyAgewotKyAgICByZXN1bHQgX19yZXQgPSBvazsKLSsgICAgc3RhdGVfdHlwZSBfX3RtcF9zdGF0ZShfX3N0YXRlKTsKLSsKLSsjaWZkZWYgX19VQ0xJQkNfSEFTX1hMT0NBTEVfXwotKyAgICBfX2NfbG9jYWxlIF9fb2xkID0gX191c2Vsb2NhbGUoX01fY19sb2NhbGVfY29kZWN2dCk7Ci0rI2VuZGlmCi0rCi0rICAgIC8vIG1ic25ydG93Y3MgaXMgKnZlcnkqIGZhc3QgYnV0IHN0b3BzIGlmIGVuY291bnRlcnMgTlVMIGNoYXJhY3RlcnM6Ci0rICAgIC8vIGluIGNhc2Ugd2Ugc3RvcmUgYSBMJ1wwJyBhbmQgdGhlbiBjb250aW51ZSwgaW4gYSBsb29wLgotKyAgICAvLyBOQjogbWJzbnJ0b3djcyBpcyBhIEdOVSBleHRlbnNpb24KLSsgICAgZm9yIChfX2Zyb21fbmV4dCA9IF9fZnJvbSwgX190b19uZXh0ID0gX190bzsKLSsJIF9fZnJvbV9uZXh0IDwgX19mcm9tX2VuZCAmJiBfX3RvX25leHQgPCBfX3RvX2VuZAotKwkgJiYgX19yZXQgPT0gb2s7KQotKyAgICAgIHsKLSsJY29uc3QgZXh0ZXJuX3R5cGUqIF9fZnJvbV9jaHVua19lbmQ7Ci0rCV9fZnJvbV9jaHVua19lbmQgPSBzdGF0aWNfY2FzdDxjb25zdCBleHRlcm5fdHlwZSo+KG1lbWNocihfX2Zyb21fbmV4dCwgJ1wwJywKLSsJCQkJCQkJCSAgX19mcm9tX2VuZAotKwkJCQkJCQkJICAtIF9fZnJvbV9uZXh0KSk7Ci0rCWlmICghX19mcm9tX2NodW5rX2VuZCkKLSsJICBfX2Zyb21fY2h1bmtfZW5kID0gX19mcm9tX2VuZDsKLSsKLSsJX19mcm9tID0gX19mcm9tX25leHQ7Ci0rCXNpemVfdCBfX2NvbnYgPSBtYnNucnRvd2NzKF9fdG9fbmV4dCwgJl9fZnJvbV9uZXh0LAotKwkJCQkgICBfX2Zyb21fY2h1bmtfZW5kIC0gX19mcm9tX25leHQsCi0rCQkJCSAgIF9fdG9fZW5kIC0gX190b19uZXh0LCAmX19zdGF0ZSk7Ci0rCWlmIChfX2NvbnYgPT0gc3RhdGljX2Nhc3Q8c2l6ZV90PigtMSkpCi0rCSAgewotKwkgICAgLy8gSW4gY2FzZSBvZiBlcnJvciwgaW4gb3JkZXIgdG8gc3RvcCBhdCB0aGUgZXhhY3QgcGxhY2Ugd2UKLSsJICAgIC8vIGhhdmUgdG8gc3RhcnQgYWdhaW4gZnJvbSB0aGUgYmVnaW5uaW5nIHdpdGggYSBzZXJpZXMgb2YKLSsJICAgIC8vIG1icnRvd2MuCi0rCSAgICBmb3IgKDs7ICsrX190b19uZXh0LCBfX2Zyb20gKz0gX19jb252KQotKwkgICAgICB7Ci0rCQlfX2NvbnYgPSBtYnJ0b3djKF9fdG9fbmV4dCwgX19mcm9tLCBfX2Zyb21fZW5kIC0gX19mcm9tLAotKwkJCQkgJl9fdG1wX3N0YXRlKTsKLSsJCWlmIChfX2NvbnYgPT0gc3RhdGljX2Nhc3Q8c2l6ZV90PigtMSkKLSsJCSAgICB8fCBfX2NvbnYgPT0gc3RhdGljX2Nhc3Q8c2l6ZV90PigtMikpCi0rCQkgIGJyZWFrOwotKwkgICAgICB9Ci0rCSAgICBfX2Zyb21fbmV4dCA9IF9fZnJvbTsKLSsJICAgIF9fc3RhdGUgPSBfX3RtcF9zdGF0ZTsKLSsJICAgIF9fcmV0ID0gZXJyb3I7Ci0rCSAgfQotKwllbHNlIGlmIChfX2Zyb21fbmV4dCAmJiBfX2Zyb21fbmV4dCA8IF9fZnJvbV9jaHVua19lbmQpCi0rCSAgewotKwkgICAgLy8gSXQgaXMgdW5jbGVhciB3aGF0IHRvIHJldHVybiBpbiB0aGlzIGNhc2UgKHNlZSBEUiAzODIpLgotKwkgICAgX190b19uZXh0ICs9IF9fY29udjsKLSsJICAgIF9fcmV0ID0gcGFydGlhbDsKLSsJICB9Ci0rCWVsc2UKLSsJICB7Ci0rCSAgICBfX2Zyb21fbmV4dCA9IF9fZnJvbV9jaHVua19lbmQ7Ci0rCSAgICBfX3RvX25leHQgKz0gX19jb252OwotKwkgIH0KLSsKLSsJaWYgKF9fZnJvbV9uZXh0IDwgX19mcm9tX2VuZCAmJiBfX3JldCA9PSBvaykKLSsJICB7Ci0rCSAgICBpZiAoX190b19uZXh0IDwgX190b19lbmQpCi0rCSAgICAgIHsKLSsJCS8vIFhYWCBQcm9iYWJseSB3cm9uZyBmb3Igc3RhdGVmdWwgZW5jb2RpbmdzCi0rCQlfX3RtcF9zdGF0ZSA9IF9fc3RhdGU7Ci0rCQkrK19fZnJvbV9uZXh0OwotKwkJKl9fdG9fbmV4dCsrID0gTCdcMCc7Ci0rCSAgICAgIH0KLSsJICAgIGVsc2UKLSsJICAgICAgX19yZXQgPSBwYXJ0aWFsOwotKwkgIH0KLSsgICAgICB9Ci0rCi0rI2lmZGVmIF9fVUNMSUJDX0hBU19YTE9DQUxFX18KLSsgICAgX191c2Vsb2NhbGUoX19vbGQpOwotKyNlbmRpZgotKwotKyAgICByZXR1cm4gX19yZXQ7Ci0rICB9Ci0rCi0rICBpbnQKLSsgIGNvZGVjdnQ8d2NoYXJfdCwgY2hhciwgbWJzdGF0ZV90Pjo6Ci0rICBkb19lbmNvZGluZygpIGNvbnN0IHRocm93KCkKLSsgIHsKLSsgICAgLy8gWFhYIFRoaXMgaW1wbGVtZW50YXRpb24gYXNzdW1lcyB0aGF0IHRoZSBlbmNvZGluZyBpcwotKyAgICAvLyBzdGF0ZWxlc3MgYW5kIGlzIGVpdGhlciBzaW5nbGUtYnl0ZSBvciB2YXJpYWJsZS13aWR0aC4KLSsgICAgaW50IF9fcmV0ID0gMDsKLSsjaWZkZWYgX19VQ0xJQkNfSEFTX1hMT0NBTEVfXwotKyAgICBfX2NfbG9jYWxlIF9fb2xkID0gX191c2Vsb2NhbGUoX01fY19sb2NhbGVfY29kZWN2dCk7Ci0rI2VuZGlmCi0rICAgIGlmIChNQl9DVVJfTUFYID09IDEpCi0rICAgICAgX19yZXQgPSAxOwotKyNpZmRlZiBfX1VDTElCQ19IQVNfWExPQ0FMRV9fCi0rICAgIF9fdXNlbG9jYWxlKF9fb2xkKTsKLSsjZW5kaWYKLSsgICAgcmV0dXJuIF9fcmV0OwotKyAgfQotKwotKyAgaW50Ci0rICBjb2RlY3Z0PHdjaGFyX3QsIGNoYXIsIG1ic3RhdGVfdD46OgotKyAgZG9fbWF4X2xlbmd0aCgpIGNvbnN0IHRocm93KCkKLSsgIHsKLSsjaWZkZWYgX19VQ0xJQkNfSEFTX1hMT0NBTEVfXwotKyAgICBfX2NfbG9jYWxlIF9fb2xkID0gX191c2Vsb2NhbGUoX01fY19sb2NhbGVfY29kZWN2dCk7Ci0rI2VuZGlmCi0rICAgIC8vIFhYWCBQcm9iYWJseSB3cm9uZyBmb3Igc3RhdGVmdWwgZW5jb2RpbmdzLgotKyAgICBpbnQgX19yZXQgPSBNQl9DVVJfTUFYOwotKyNpZmRlZiBfX1VDTElCQ19IQVNfWExPQ0FMRV9fCi0rICAgIF9fdXNlbG9jYWxlKF9fb2xkKTsKLSsjZW5kaWYKLSsgICAgcmV0dXJuIF9fcmV0OwotKyAgfQotKwotKyAgaW50Ci0rICBjb2RlY3Z0PHdjaGFyX3QsIGNoYXIsIG1ic3RhdGVfdD46OgotKyAgZG9fbGVuZ3RoKHN0YXRlX3R5cGUmIF9fc3RhdGUsIGNvbnN0IGV4dGVybl90eXBlKiBfX2Zyb20sCi0rCSAgICBjb25zdCBleHRlcm5fdHlwZSogX19lbmQsIHNpemVfdCBfX21heCkgY29uc3QKLSsgIHsKLSsgICAgaW50IF9fcmV0ID0gMDsKLSsgICAgc3RhdGVfdHlwZSBfX3RtcF9zdGF0ZShfX3N0YXRlKTsKLSsKLSsjaWZkZWYgX19VQ0xJQkNfSEFTX1hMT0NBTEVfXwotKyAgICBfX2NfbG9jYWxlIF9fb2xkID0gX191c2Vsb2NhbGUoX01fY19sb2NhbGVfY29kZWN2dCk7Ci0rI2VuZGlmCi0rCi0rICAgIC8vIG1ic25ydG93Y3MgaXMgKnZlcnkqIGZhc3QgYnV0IHN0b3BzIGlmIGVuY291bnRlcnMgTlVMIGNoYXJhY3RlcnM6Ci0rICAgIC8vIGluIGNhc2Ugd2UgYWR2YW5jZSBwYXN0IGl0IGFuZCB0aGVuIGNvbnRpbnVlLCBpbiBhIGxvb3AuCi0rICAgIC8vIE5COiBtYnNucnRvd2NzIGlzIGEgR05VIGV4dGVuc2lvbgotKwotKyAgICAvLyBBIGR1bW15IGludGVybmFsIGJ1ZmZlciBpcyBuZWVkZWQgaW4gb3JkZXIgZm9yIG1ic25ydG9jd3MgdG8gY29uc2lkZXIKLSsgICAgLy8gaXRzIGZvdXJ0aCBwYXJhbWV0ZXIgKGl0IHdvdWxkbid0IHdpdGggTlVMTCBhcyBmaXJzdCBwYXJhbWV0ZXIpLgotKyAgICB3Y2hhcl90KiBfX3RvID0gc3RhdGljX2Nhc3Q8d2NoYXJfdCo+KF9fYnVpbHRpbl9hbGxvY2Eoc2l6ZW9mKHdjaGFyX3QpCi0rCQkJCQkJCSAgICogX19tYXgpKTsKLSsgICAgd2hpbGUgKF9fZnJvbSA8IF9fZW5kICYmIF9fbWF4KQotKyAgICAgIHsKLSsJY29uc3QgZXh0ZXJuX3R5cGUqIF9fZnJvbV9jaHVua19lbmQ7Ci0rCV9fZnJvbV9jaHVua19lbmQgPSBzdGF0aWNfY2FzdDxjb25zdCBleHRlcm5fdHlwZSo+KG1lbWNocihfX2Zyb20sICdcMCcsCi0rCQkJCQkJCQkgIF9fZW5kCi0rCQkJCQkJCQkgIC0gX19mcm9tKSk7Ci0rCWlmICghX19mcm9tX2NodW5rX2VuZCkKLSsJICBfX2Zyb21fY2h1bmtfZW5kID0gX19lbmQ7Ci0rCi0rCWNvbnN0IGV4dGVybl90eXBlKiBfX3RtcF9mcm9tID0gX19mcm9tOwotKwlzaXplX3QgX19jb252ID0gbWJzbnJ0b3djcyhfX3RvLCAmX19mcm9tLAotKwkJCQkgICBfX2Zyb21fY2h1bmtfZW5kIC0gX19mcm9tLAotKwkJCQkgICBfX21heCwgJl9fc3RhdGUpOwotKwlpZiAoX19jb252ID09IHN0YXRpY19jYXN0PHNpemVfdD4oLTEpKQotKwkgIHsKLSsJICAgIC8vIEluIGNhc2Ugb2YgZXJyb3IsIGluIG9yZGVyIHRvIHN0b3AgYXQgdGhlIGV4YWN0IHBsYWNlIHdlCi0rCSAgICAvLyBoYXZlIHRvIHN0YXJ0IGFnYWluIGZyb20gdGhlIGJlZ2lubmluZyB3aXRoIGEgc2VyaWVzIG9mCi0rCSAgICAvLyBtYnJ0b3djLgotKwkgICAgZm9yIChfX2Zyb20gPSBfX3RtcF9mcm9tOzsgX19mcm9tICs9IF9fY29udikKLSsJICAgICAgewotKwkJX19jb252ID0gbWJydG93YyhOVUxMLCBfX2Zyb20sIF9fZW5kIC0gX19mcm9tLAotKwkJCQkgJl9fdG1wX3N0YXRlKTsKLSsJCWlmIChfX2NvbnYgPT0gc3RhdGljX2Nhc3Q8c2l6ZV90PigtMSkKLSsJCSAgICB8fCBfX2NvbnYgPT0gc3RhdGljX2Nhc3Q8c2l6ZV90PigtMikpCi0rCQkgIGJyZWFrOwotKwkgICAgICB9Ci0rCSAgICBfX3N0YXRlID0gX190bXBfc3RhdGU7Ci0rCSAgICBfX3JldCArPSBfX2Zyb20gLSBfX3RtcF9mcm9tOwotKwkgICAgYnJlYWs7Ci0rCSAgfQotKwlpZiAoIV9fZnJvbSkKLSsJICBfX2Zyb20gPSBfX2Zyb21fY2h1bmtfZW5kOwotKwotKwlfX3JldCArPSBfX2Zyb20gLSBfX3RtcF9mcm9tOwotKwlfX21heCAtPSBfX2NvbnY7Ci0rCi0rCWlmIChfX2Zyb20gPCBfX2VuZCAmJiBfX21heCkKLSsJICB7Ci0rCSAgICAvLyBYWFggUHJvYmFibHkgd3JvbmcgZm9yIHN0YXRlZnVsIGVuY29kaW5ncwotKwkgICAgX190bXBfc3RhdGUgPSBfX3N0YXRlOwotKwkgICAgKytfX2Zyb207Ci0rCSAgICArK19fcmV0OwotKwkgICAgLS1fX21heDsKLSsJICB9Ci0rICAgICAgfQotKwotKyNpZmRlZiBfX1VDTElCQ19IQVNfWExPQ0FMRV9fCi0rICAgIF9fdXNlbG9jYWxlKF9fb2xkKTsKLSsjZW5kaWYKLSsKLSsgICAgcmV0dXJuIF9fcmV0OwotKyAgfQotKyNlbmRpZgotK30KLWRpZmYgLS1naXQgYS9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvY29sbGF0ZV9tZW1iZXJzLmNjIGIvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL2NvbGxhdGVfbWVtYmVycy5jYwotbmV3IGZpbGUgbW9kZSAxMDA2NDQKLWluZGV4IDAwMDAwMDAuLmMyNjY0YTcKLS0tLSAvZGV2L251bGwKLSsrKyBiL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9jb2xsYXRlX21lbWJlcnMuY2MKLUBAIC0wLDAgKzEsODAgQEAKLSsvLyBzdGQ6OmNvbGxhdGUgaW1wbGVtZW50YXRpb24gZGV0YWlscywgR05VIHZlcnNpb24gLSotIEMrKyAtKi0KLSsKLSsvLyBDb3B5cmlnaHQgKEMpIDIwMDEsIDIwMDIgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCi0rLy8KLSsvLyBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIElTTyBDKysgTGlicmFyeS4gIFRoaXMgbGlicmFyeSBpcyBmcmVlCi0rLy8gc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIgdGhlCi0rLy8gdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKLSsvLyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikKLSsvLyBhbnkgbGF0ZXIgdmVyc2lvbi4KLSsKLSsvLyBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSsvLyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotKy8vIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKLSsvLyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotKwotKy8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCi0rLy8gd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLiAgSWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZQotKy8vIFNvZnR3YXJlIEZvdW5kYXRpb24sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LAotKy8vIFVTQS4KLSsKLSsvLyBBcyBhIHNwZWNpYWwgZXhjZXB0aW9uLCB5b3UgbWF5IHVzZSB0aGlzIGZpbGUgYXMgcGFydCBvZiBhIGZyZWUgc29mdHdhcmUKLSsvLyBsaWJyYXJ5IHdpdGhvdXQgcmVzdHJpY3Rpb24uICBTcGVjaWZpY2FsbHksIGlmIG90aGVyIGZpbGVzIGluc3RhbnRpYXRlCi0rLy8gdGVtcGxhdGVzIG9yIHVzZSBtYWNyb3Mgb3IgaW5saW5lIGZ1bmN0aW9ucyBmcm9tIHRoaXMgZmlsZSwgb3IgeW91IGNvbXBpbGUKLSsvLyB0aGlzIGZpbGUgYW5kIGxpbmsgaXQgd2l0aCBvdGhlciBmaWxlcyB0byBwcm9kdWNlIGFuIGV4ZWN1dGFibGUsIHRoaXMKLSsvLyBmaWxlIGRvZXMgbm90IGJ5IGl0c2VsZiBjYXVzZSB0aGUgcmVzdWx0aW5nIGV4ZWN1dGFibGUgdG8gYmUgY292ZXJlZCBieQotKy8vIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4gIFRoaXMgZXhjZXB0aW9uIGRvZXMgbm90IGhvd2V2ZXIKLSsvLyBpbnZhbGlkYXRlIGFueSBvdGhlciByZWFzb25zIHdoeSB0aGUgZXhlY3V0YWJsZSBmaWxlIG1pZ2h0IGJlIGNvdmVyZWQgYnkKLSsvLyB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UuCi0rCi0rLy8KLSsvLyBJU08gQysrIDE0ODgyOiAyMi4yLjQuMS4yICBjb2xsYXRlIHZpcnR1YWwgZnVuY3Rpb25zCi0rLy8KLSsKLSsvLyBXcml0dGVuIGJ5IEJlbmphbWluIEtvc25payA8YmtvekByZWRoYXQuY29tPgotKwotKyNpbmNsdWRlIDxsb2NhbGU+Ci0rI2luY2x1ZGUgPGJpdHMvYysrbG9jYWxlX2ludGVybmFsLmg+Ci0rCi0rI2lmbmRlZiBfX1VDTElCQ19IQVNfWExPQ0FMRV9fCi0rI2RlZmluZSBfX3N0cmNvbGxfbChTMSwgUzIsIEwpICAgICAgc3RyY29sbCgoUzEpLCAoUzIpKQotKyNkZWZpbmUgX19zdHJ4ZnJtX2woUzEsIFMyLCBOLCBMKSAgIHN0cnhmcm0oKFMxKSwgKFMyKSwgKE4pKQotKyNkZWZpbmUgX193Y3Njb2xsX2woUzEsIFMyLCBMKSAgICAgIHdjc2NvbGwoKFMxKSwgKFMyKSkKLSsjZGVmaW5lIF9fd2NzeGZybV9sKFMxLCBTMiwgTiwgTCkgICB3Y3N4ZnJtKChTMSksIChTMiksIChOKSkKLSsjZW5kaWYKLSsKLStuYW1lc3BhY2Ugc3RkCi0rewotKyAgLy8gVGhlc2UgYXJlIGJhc2ljYWxseSBleHRlbnNpb25zIHRvIGNoYXJfdHJhaXRzLCBhbmQgcGVyaGFwcyBzaG91bGQKLSsgIC8vIGJlIHB1dCB0aGVyZSBpbnN0ZWFkIG9mIGhlcmUuCi0rICB0ZW1wbGF0ZTw+Ci0rICAgIGludAotKyAgICBjb2xsYXRlPGNoYXI+OjpfTV9jb21wYXJlKGNvbnN0IGNoYXIqIF9fb25lLCBjb25zdCBjaGFyKiBfX3R3bykgY29uc3QKLSsgICAgewotKyAgICAgIGludCBfX2NtcCA9IF9fc3RyY29sbF9sKF9fb25lLCBfX3R3bywgX01fY19sb2NhbGVfY29sbGF0ZSk7Ci0rICAgICAgcmV0dXJuIChfX2NtcCA+PiAoOCAqIHNpemVvZiAoaW50KSAtIDIpKSB8IChfX2NtcCAhPSAwKTsKLSsgICAgfQotKwotKyAgdGVtcGxhdGU8PgotKyAgICBzaXplX3QKLSsgICAgY29sbGF0ZTxjaGFyPjo6X01fdHJhbnNmb3JtKGNoYXIqIF9fdG8sIGNvbnN0IGNoYXIqIF9fZnJvbSwKLSsJCQkJc2l6ZV90IF9fbikgY29uc3QKLSsgICAgeyByZXR1cm4gX19zdHJ4ZnJtX2woX190bywgX19mcm9tLCBfX24sIF9NX2NfbG9jYWxlX2NvbGxhdGUpOyB9Ci0rCi0rI2lmZGVmIF9HTElCQ1hYX1VTRV9XQ0hBUl9UCi0rICB0ZW1wbGF0ZTw+Ci0rICAgIGludAotKyAgICBjb2xsYXRlPHdjaGFyX3Q+OjpfTV9jb21wYXJlKGNvbnN0IHdjaGFyX3QqIF9fb25lLAotKwkJCQkgY29uc3Qgd2NoYXJfdCogX190d28pIGNvbnN0Ci0rICAgIHsKLSsgICAgICBpbnQgX19jbXAgPSBfX3djc2NvbGxfbChfX29uZSwgX190d28sIF9NX2NfbG9jYWxlX2NvbGxhdGUpOwotKyAgICAgIHJldHVybiAoX19jbXAgPj4gKDggKiBzaXplb2YgKGludCkgLSAyKSkgfCAoX19jbXAgIT0gMCk7Ci0rICAgIH0KLSsKLSsgIHRlbXBsYXRlPD4KLSsgICAgc2l6ZV90Ci0rICAgIGNvbGxhdGU8d2NoYXJfdD46Ol9NX3RyYW5zZm9ybSh3Y2hhcl90KiBfX3RvLCBjb25zdCB3Y2hhcl90KiBfX2Zyb20sCi0rCQkJCSAgIHNpemVfdCBfX24pIGNvbnN0Ci0rICAgIHsgcmV0dXJuIF9fd2NzeGZybV9sKF9fdG8sIF9fZnJvbSwgX19uLCBfTV9jX2xvY2FsZV9jb2xsYXRlKTsgfQotKyNlbmRpZgotK30KLWRpZmYgLS1naXQgYS9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvY3R5cGVfbWVtYmVycy5jYyBiL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9jdHlwZV9tZW1iZXJzLmNjCi1uZXcgZmlsZSBtb2RlIDEwMDY0NAotaW5kZXggMDAwMDAwMC4uNzI5NGUzYQotLS0tIC9kZXYvbnVsbAotKysrIGIvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL2N0eXBlX21lbWJlcnMuY2MKLUBAIC0wLDAgKzEsMzAwIEBACi0rLy8gc3RkOjpjdHlwZSBpbXBsZW1lbnRhdGlvbiBkZXRhaWxzLCBHTlUgdmVyc2lvbiAtKi0gQysrIC0qLQotKwotKy8vIENvcHlyaWdodCAoQykgMjAwMSwgMjAwMiwgMjAwMywgMjAwNCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KLSsvLwotKy8vIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgSVNPIEMrKyBMaWJyYXJ5LiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUKLSsvLyBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlciB0aGUKLSsvLyB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQotKy8vIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKQotKy8vIGFueSBsYXRlciB2ZXJzaW9uLgotKwotKy8vIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotKy8vIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0rLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQotKy8vIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0rCi0rLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcKLSsvLyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuICBJZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlCi0rLy8gU29mdHdhcmUgRm91bmRhdGlvbiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsCi0rLy8gVVNBLgotKwotKy8vIEFzIGEgc3BlY2lhbCBleGNlcHRpb24sIHlvdSBtYXkgdXNlIHRoaXMgZmlsZSBhcyBwYXJ0IG9mIGEgZnJlZSBzb2Z0d2FyZQotKy8vIGxpYnJhcnkgd2l0aG91dCByZXN0cmljdGlvbi4gIFNwZWNpZmljYWxseSwgaWYgb3RoZXIgZmlsZXMgaW5zdGFudGlhdGUKLSsvLyB0ZW1wbGF0ZXMgb3IgdXNlIG1hY3JvcyBvciBpbmxpbmUgZnVuY3Rpb25zIGZyb20gdGhpcyBmaWxlLCBvciB5b3UgY29tcGlsZQotKy8vIHRoaXMgZmlsZSBhbmQgbGluayBpdCB3aXRoIG90aGVyIGZpbGVzIHRvIHByb2R1Y2UgYW4gZXhlY3V0YWJsZSwgdGhpcwotKy8vIGZpbGUgZG9lcyBub3QgYnkgaXRzZWxmIGNhdXNlIHRoZSByZXN1bHRpbmcgZXhlY3V0YWJsZSB0byBiZSBjb3ZlcmVkIGJ5Ci0rLy8gdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLiAgVGhpcyBleGNlcHRpb24gZG9lcyBub3QgaG93ZXZlcgotKy8vIGludmFsaWRhdGUgYW55IG90aGVyIHJlYXNvbnMgd2h5IHRoZSBleGVjdXRhYmxlIGZpbGUgbWlnaHQgYmUgY292ZXJlZCBieQotKy8vIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4KLSsKLSsvLwotKy8vIElTTyBDKysgMTQ4ODI6IDIyLjIuMS4xLjIgIGN0eXBlIHZpcnR1YWwgZnVuY3Rpb25zLgotKy8vCi0rCi0rLy8gV3JpdHRlbiBieSBCZW5qYW1pbiBLb3NuaWsgPGJrb3pAcmVkaGF0LmNvbT4KLSsKLSsjZGVmaW5lIF9MSUJDCi0rI2luY2x1ZGUgPGxvY2FsZT4KLSsjdW5kZWYgX0xJQkMKLSsjaW5jbHVkZSA8Yml0cy9jKytsb2NhbGVfaW50ZXJuYWwuaD4KLSsKLSsjaWZuZGVmIF9fVUNMSUJDX0hBU19YTE9DQUxFX18KLSsjZGVmaW5lIF9fd2N0eXBlX2woUywgTCkgICAgICAgICAgIHdjdHlwZSgoUykpCi0rI2RlZmluZSBfX3Rvd3VwcGVyX2woQywgTCkgICAgICAgICB0b3d1cHBlcigoQykpCi0rI2RlZmluZSBfX3Rvd2xvd2VyX2woQywgTCkgICAgICAgICB0b3dsb3dlcigoQykpCi0rI2RlZmluZSBfX2lzd2N0eXBlX2woQywgTSwgTCkgICAgICBpc3djdHlwZSgoQyksIChNKSkKLSsjZW5kaWYKLSsKLStuYW1lc3BhY2Ugc3RkCi0rewotKyAgLy8gTkI6IFRoZSBvdGhlciBjdHlwZTxjaGFyPiBzcGVjaWFsaXphdGlvbnMgYXJlIGluIHNyYy9sb2NhbGUuY2MgYW5kCi0rICAvLyB2YXJpb3VzIC9jb25maWcvb3MvKiBmaWxlcy4KLSsgIHRlbXBsYXRlPD4KLSsgICAgY3R5cGVfYnluYW1lPGNoYXI+OjpjdHlwZV9ieW5hbWUoY29uc3QgY2hhciogX19zLCBzaXplX3QgX19yZWZzKQotKyAgICA6IGN0eXBlPGNoYXI+KDAsIGZhbHNlLCBfX3JlZnMpCi0rICAgIHsKLSsgICAgICBpZiAoc3RkOjpzdHJjbXAoX19zLCAiQyIpICE9IDAgJiYgc3RkOjpzdHJjbXAoX19zLCAiUE9TSVgiKSAhPSAwKQotKwl7Ci0rCSAgdGhpcy0+X1NfZGVzdHJveV9jX2xvY2FsZSh0aGlzLT5fTV9jX2xvY2FsZV9jdHlwZSk7Ci0rCSAgdGhpcy0+X1NfY3JlYXRlX2NfbG9jYWxlKHRoaXMtPl9NX2NfbG9jYWxlX2N0eXBlLCBfX3MpOwotKyNpZmRlZiBfX1VDTElCQ19IQVNfWExPQ0FMRV9fCi0rCSAgdGhpcy0+X01fdG91cHBlciA9IHRoaXMtPl9NX2NfbG9jYWxlX2N0eXBlLT5fX2N0eXBlX3RvdXBwZXI7Ci0rCSAgdGhpcy0+X01fdG9sb3dlciA9IHRoaXMtPl9NX2NfbG9jYWxlX2N0eXBlLT5fX2N0eXBlX3RvbG93ZXI7Ci0rCSAgdGhpcy0+X01fdGFibGUgPSB0aGlzLT5fTV9jX2xvY2FsZV9jdHlwZS0+X19jdHlwZV9iOwotKyNlbmRpZgotKwl9Ci0rICAgIH0KLSsKLSsjaWZkZWYgX0dMSUJDWFhfVVNFX1dDSEFSX1QKLSsgIGN0eXBlPHdjaGFyX3Q+OjpfX3dtYXNrX3R5cGUKLSsgIGN0eXBlPHdjaGFyX3Q+OjpfTV9jb252ZXJ0X3RvX3dtYXNrKGNvbnN0IG1hc2sgX19tKSBjb25zdAotKyAgewotKyAgICBfX3dtYXNrX3R5cGUgX19yZXQ7Ci0rICAgIHN3aXRjaCAoX19tKQotKyAgICAgIHsKLSsgICAgICBjYXNlIHNwYWNlOgotKwlfX3JldCA9IF9fd2N0eXBlX2woInNwYWNlIiwgX01fY19sb2NhbGVfY3R5cGUpOwotKwlicmVhazsKLSsgICAgICBjYXNlIHByaW50OgotKwlfX3JldCA9IF9fd2N0eXBlX2woInByaW50IiwgX01fY19sb2NhbGVfY3R5cGUpOwotKwlicmVhazsKLSsgICAgICBjYXNlIGNudHJsOgotKwlfX3JldCA9IF9fd2N0eXBlX2woImNudHJsIiwgX01fY19sb2NhbGVfY3R5cGUpOwotKwlicmVhazsKLSsgICAgICBjYXNlIHVwcGVyOgotKwlfX3JldCA9IF9fd2N0eXBlX2woInVwcGVyIiwgX01fY19sb2NhbGVfY3R5cGUpOwotKwlicmVhazsKLSsgICAgICBjYXNlIGxvd2VyOgotKwlfX3JldCA9IF9fd2N0eXBlX2woImxvd2VyIiwgX01fY19sb2NhbGVfY3R5cGUpOwotKwlicmVhazsKLSsgICAgICBjYXNlIGFscGhhOgotKwlfX3JldCA9IF9fd2N0eXBlX2woImFscGhhIiwgX01fY19sb2NhbGVfY3R5cGUpOwotKwlicmVhazsKLSsgICAgICBjYXNlIGRpZ2l0OgotKwlfX3JldCA9IF9fd2N0eXBlX2woImRpZ2l0IiwgX01fY19sb2NhbGVfY3R5cGUpOwotKwlicmVhazsKLSsgICAgICBjYXNlIHB1bmN0OgotKwlfX3JldCA9IF9fd2N0eXBlX2woInB1bmN0IiwgX01fY19sb2NhbGVfY3R5cGUpOwotKwlicmVhazsKLSsgICAgICBjYXNlIHhkaWdpdDoKLSsJX19yZXQgPSBfX3djdHlwZV9sKCJ4ZGlnaXQiLCBfTV9jX2xvY2FsZV9jdHlwZSk7Ci0rCWJyZWFrOwotKyAgICAgIGNhc2UgYWxudW06Ci0rCV9fcmV0ID0gX193Y3R5cGVfbCgiYWxudW0iLCBfTV9jX2xvY2FsZV9jdHlwZSk7Ci0rCWJyZWFrOwotKyAgICAgIGNhc2UgZ3JhcGg6Ci0rCV9fcmV0ID0gX193Y3R5cGVfbCgiZ3JhcGgiLCBfTV9jX2xvY2FsZV9jdHlwZSk7Ci0rCWJyZWFrOwotKyAgICAgIGRlZmF1bHQ6Ci0rCV9fcmV0ID0gX193bWFza190eXBlKCk7Ci0rICAgICAgfQotKyAgICByZXR1cm4gX19yZXQ7Ci0rICB9Ci0rCi0rICB3Y2hhcl90Ci0rICBjdHlwZTx3Y2hhcl90Pjo6ZG9fdG91cHBlcih3Y2hhcl90IF9fYykgY29uc3QKLSsgIHsgcmV0dXJuIF9fdG93dXBwZXJfbChfX2MsIF9NX2NfbG9jYWxlX2N0eXBlKTsgfQotKwotKyAgY29uc3Qgd2NoYXJfdCoKLSsgIGN0eXBlPHdjaGFyX3Q+Ojpkb190b3VwcGVyKHdjaGFyX3QqIF9fbG8sIGNvbnN0IHdjaGFyX3QqIF9faGkpIGNvbnN0Ci0rICB7Ci0rICAgIHdoaWxlIChfX2xvIDwgX19oaSkKLSsgICAgICB7Ci0rICAgICAgICAqX19sbyA9IF9fdG93dXBwZXJfbCgqX19sbywgX01fY19sb2NhbGVfY3R5cGUpOwotKyAgICAgICAgKytfX2xvOwotKyAgICAgIH0KLSsgICAgcmV0dXJuIF9faGk7Ci0rICB9Ci0rCi0rICB3Y2hhcl90Ci0rICBjdHlwZTx3Y2hhcl90Pjo6ZG9fdG9sb3dlcih3Y2hhcl90IF9fYykgY29uc3QKLSsgIHsgcmV0dXJuIF9fdG93bG93ZXJfbChfX2MsIF9NX2NfbG9jYWxlX2N0eXBlKTsgfQotKwotKyAgY29uc3Qgd2NoYXJfdCoKLSsgIGN0eXBlPHdjaGFyX3Q+Ojpkb190b2xvd2VyKHdjaGFyX3QqIF9fbG8sIGNvbnN0IHdjaGFyX3QqIF9faGkpIGNvbnN0Ci0rICB7Ci0rICAgIHdoaWxlIChfX2xvIDwgX19oaSkKLSsgICAgICB7Ci0rICAgICAgICAqX19sbyA9IF9fdG93bG93ZXJfbCgqX19sbywgX01fY19sb2NhbGVfY3R5cGUpOwotKyAgICAgICAgKytfX2xvOwotKyAgICAgIH0KLSsgICAgcmV0dXJuIF9faGk7Ci0rICB9Ci0rCi0rICBib29sCi0rICBjdHlwZTx3Y2hhcl90Pjo6Ci0rICBkb19pcyhtYXNrIF9fbSwgd2NoYXJfdCBfX2MpIGNvbnN0Ci0rICB7Ci0rICAgIC8vIEhpZ2hlc3QgYml0bWFzayBpbiBjdHlwZV9iYXNlID09IDEwLCBidXQgZXh0cmEgaW4gIkMiCi0rICAgIC8vIGxpYnJhcnkgZm9yIGJsYW5rLgotKyAgICBib29sIF9fcmV0ID0gZmFsc2U7Ci0rICAgIGNvbnN0IHNpemVfdCBfX2JpdG1hc2tzaXplID0gMTE7Ci0rICAgIGZvciAoc2l6ZV90IF9fYml0Y3VyID0gMDsgX19iaXRjdXIgPD0gX19iaXRtYXNrc2l6ZTsgKytfX2JpdGN1cikKLSsgICAgICBpZiAoX19tICYgX01fYml0W19fYml0Y3VyXQotKwkgICYmIF9faXN3Y3R5cGVfbChfX2MsIF9NX3dtYXNrW19fYml0Y3VyXSwgX01fY19sb2NhbGVfY3R5cGUpKQotKwl7Ci0rCSAgX19yZXQgPSB0cnVlOwotKwkgIGJyZWFrOwotKwl9Ci0rICAgIHJldHVybiBfX3JldDsKLSsgIH0KLSsKLSsgIGNvbnN0IHdjaGFyX3QqCi0rICBjdHlwZTx3Y2hhcl90Pjo6Ci0rICBkb19pcyhjb25zdCB3Y2hhcl90KiBfX2xvLCBjb25zdCB3Y2hhcl90KiBfX2hpLCBtYXNrKiBfX3ZlYykgY29uc3QKLSsgIHsKLSsgICAgZm9yICg7IF9fbG8gPCBfX2hpOyArK19fdmVjLCArK19fbG8pCi0rICAgICAgewotKwkvLyBIaWdoZXN0IGJpdG1hc2sgaW4gY3R5cGVfYmFzZSA9PSAxMCwgYnV0IGV4dHJhIGluICJDIgotKwkvLyBsaWJyYXJ5IGZvciBibGFuay4KLSsJY29uc3Qgc2l6ZV90IF9fYml0bWFza3NpemUgPSAxMTsKLSsJbWFzayBfX20gPSAwOwotKwlmb3IgKHNpemVfdCBfX2JpdGN1ciA9IDA7IF9fYml0Y3VyIDw9IF9fYml0bWFza3NpemU7ICsrX19iaXRjdXIpCi0rCSAgaWYgKF9faXN3Y3R5cGVfbCgqX19sbywgX01fd21hc2tbX19iaXRjdXJdLCBfTV9jX2xvY2FsZV9jdHlwZSkpCi0rCSAgICBfX20gfD0gX01fYml0W19fYml0Y3VyXTsKLSsJKl9fdmVjID0gX19tOwotKyAgICAgIH0KLSsgICAgcmV0dXJuIF9faGk7Ci0rICB9Ci0rCi0rICBjb25zdCB3Y2hhcl90KgotKyAgY3R5cGU8d2NoYXJfdD46OgotKyAgZG9fc2Nhbl9pcyhtYXNrIF9fbSwgY29uc3Qgd2NoYXJfdCogX19sbywgY29uc3Qgd2NoYXJfdCogX19oaSkgY29uc3QKLSsgIHsKLSsgICAgd2hpbGUgKF9fbG8gPCBfX2hpICYmICF0aGlzLT5kb19pcyhfX20sICpfX2xvKSkKLSsgICAgICArK19fbG87Ci0rICAgIHJldHVybiBfX2xvOwotKyAgfQotKwotKyAgY29uc3Qgd2NoYXJfdCoKLSsgIGN0eXBlPHdjaGFyX3Q+OjoKLSsgIGRvX3NjYW5fbm90KG1hc2sgX19tLCBjb25zdCBjaGFyX3R5cGUqIF9fbG8sIGNvbnN0IGNoYXJfdHlwZSogX19oaSkgY29uc3QKLSsgIHsKLSsgICAgd2hpbGUgKF9fbG8gPCBfX2hpICYmIHRoaXMtPmRvX2lzKF9fbSwgKl9fbG8pICE9IDApCi0rICAgICAgKytfX2xvOwotKyAgICByZXR1cm4gX19sbzsKLSsgIH0KLSsKLSsgIHdjaGFyX3QKLSsgIGN0eXBlPHdjaGFyX3Q+OjoKLSsgIGRvX3dpZGVuKGNoYXIgX19jKSBjb25zdAotKyAgeyByZXR1cm4gX01fd2lkZW5bc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcj4oX19jKV07IH0KLSsKLSsgIGNvbnN0IGNoYXIqCi0rICBjdHlwZTx3Y2hhcl90Pjo6Ci0rICBkb193aWRlbihjb25zdCBjaGFyKiBfX2xvLCBjb25zdCBjaGFyKiBfX2hpLCB3Y2hhcl90KiBfX2Rlc3QpIGNvbnN0Ci0rICB7Ci0rICAgIHdoaWxlIChfX2xvIDwgX19oaSkKLSsgICAgICB7Ci0rCSpfX2Rlc3QgPSBfTV93aWRlbltzdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyPigqX19sbyldOwotKwkrK19fbG87Ci0rCSsrX19kZXN0OwotKyAgICAgIH0KLSsgICAgcmV0dXJuIF9faGk7Ci0rICB9Ci0rCi0rICBjaGFyCi0rICBjdHlwZTx3Y2hhcl90Pjo6Ci0rICBkb19uYXJyb3cod2NoYXJfdCBfX3djLCBjaGFyIF9fZGZhdWx0KSBjb25zdAotKyAgewotKyAgICBpZiAoX193YyA+PSAwICYmIF9fd2MgPCAxMjggJiYgX01fbmFycm93X29rKQotKyAgICAgIHJldHVybiBfTV9uYXJyb3dbX193Y107Ci0rI2lmZGVmIF9fVUNMSUJDX0hBU19YTE9DQUxFX18KLSsgICAgX19jX2xvY2FsZSBfX29sZCA9IF9fdXNlbG9jYWxlKF9NX2NfbG9jYWxlX2N0eXBlKTsKLSsjZW5kaWYKLSsgICAgY29uc3QgaW50IF9fYyA9IHdjdG9iKF9fd2MpOwotKyNpZmRlZiBfX1VDTElCQ19IQVNfWExPQ0FMRV9fCi0rICAgIF9fdXNlbG9jYWxlKF9fb2xkKTsKLSsjZW5kaWYKLSsgICAgcmV0dXJuIChfX2MgPT0gRU9GID8gX19kZmF1bHQgOiBzdGF0aWNfY2FzdDxjaGFyPihfX2MpKTsKLSsgIH0KLSsKLSsgIGNvbnN0IHdjaGFyX3QqCi0rICBjdHlwZTx3Y2hhcl90Pjo6Ci0rICBkb19uYXJyb3coY29uc3Qgd2NoYXJfdCogX19sbywgY29uc3Qgd2NoYXJfdCogX19oaSwgY2hhciBfX2RmYXVsdCwKLSsJICAgIGNoYXIqIF9fZGVzdCkgY29uc3QKLSsgIHsKLSsjaWZkZWYgX19VQ0xJQkNfSEFTX1hMT0NBTEVfXwotKyAgICBfX2NfbG9jYWxlIF9fb2xkID0gX191c2Vsb2NhbGUoX01fY19sb2NhbGVfY3R5cGUpOwotKyNlbmRpZgotKyAgICBpZiAoX01fbmFycm93X29rKQotKyAgICAgIHdoaWxlIChfX2xvIDwgX19oaSkKLSsJewotKwkgIGlmICgqX19sbyA+PSAwICYmICpfX2xvIDwgMTI4KQotKwkgICAgKl9fZGVzdCA9IF9NX25hcnJvd1sqX19sb107Ci0rCSAgZWxzZQotKwkgICAgewotKwkgICAgICBjb25zdCBpbnQgX19jID0gd2N0b2IoKl9fbG8pOwotKwkgICAgICAqX19kZXN0ID0gKF9fYyA9PSBFT0YgPyBfX2RmYXVsdCA6IHN0YXRpY19jYXN0PGNoYXI+KF9fYykpOwotKwkgICAgfQotKwkgICsrX19sbzsKLSsJICArK19fZGVzdDsKLSsJfQotKyAgICBlbHNlCi0rICAgICAgd2hpbGUgKF9fbG8gPCBfX2hpKQotKwl7Ci0rCSAgY29uc3QgaW50IF9fYyA9IHdjdG9iKCpfX2xvKTsKLSsJICAqX19kZXN0ID0gKF9fYyA9PSBFT0YgPyBfX2RmYXVsdCA6IHN0YXRpY19jYXN0PGNoYXI+KF9fYykpOwotKwkgICsrX19sbzsKLSsJICArK19fZGVzdDsKLSsJfQotKyNpZmRlZiBfX1VDTElCQ19IQVNfWExPQ0FMRV9fCi0rICAgIF9fdXNlbG9jYWxlKF9fb2xkKTsKLSsjZW5kaWYKLSsgICAgcmV0dXJuIF9faGk7Ci0rICB9Ci0rCi0rICB2b2lkCi0rICBjdHlwZTx3Y2hhcl90Pjo6X01faW5pdGlhbGl6ZV9jdHlwZSgpCi0rICB7Ci0rI2lmZGVmIF9fVUNMSUJDX0hBU19YTE9DQUxFX18KLSsgICAgX19jX2xvY2FsZSBfX29sZCA9IF9fdXNlbG9jYWxlKF9NX2NfbG9jYWxlX2N0eXBlKTsKLSsjZW5kaWYKLSsgICAgd2ludF90IF9faTsKLSsgICAgZm9yIChfX2kgPSAwOyBfX2kgPCAxMjg7ICsrX19pKQotKyAgICAgIHsKLSsJY29uc3QgaW50IF9fYyA9IHdjdG9iKF9faSk7Ci0rCWlmIChfX2MgPT0gRU9GKQotKwkgIGJyZWFrOwotKwllbHNlCi0rCSAgX01fbmFycm93W19faV0gPSBzdGF0aWNfY2FzdDxjaGFyPihfX2MpOwotKyAgICAgIH0KLSsgICAgaWYgKF9faSA9PSAxMjgpCi0rICAgICAgX01fbmFycm93X29rID0gdHJ1ZTsKLSsgICAgZWxzZQotKyAgICAgIF9NX25hcnJvd19vayA9IGZhbHNlOwotKyAgICBmb3IgKHNpemVfdCBfX2ogPSAwOwotKwkgX19qIDwgc2l6ZW9mKF9NX3dpZGVuKSAvIHNpemVvZih3aW50X3QpOyArK19faikKLSsgICAgICBfTV93aWRlbltfX2pdID0gYnRvd2MoX19qKTsKLSsKLSsgICAgZm9yIChzaXplX3QgX19rID0gMDsgX19rIDw9IDExOyArK19faykKLSsgICAgICB7Ci0rCV9NX2JpdFtfX2tdID0gc3RhdGljX2Nhc3Q8bWFzaz4oX0lTYml0KF9faykpOwotKwlfTV93bWFza1tfX2tdID0gX01fY29udmVydF90b193bWFzayhfTV9iaXRbX19rXSk7Ci0rICAgICAgfQotKyNpZmRlZiBfX1VDTElCQ19IQVNfWExPQ0FMRV9fCi0rICAgIF9fdXNlbG9jYWxlKF9fb2xkKTsKLSsjZW5kaWYKLSsgIH0KLSsjZW5kaWYgLy8gIF9HTElCQ1hYX1VTRV9XQ0hBUl9UCi0rfQotZGlmZiAtLWdpdCBhL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9tZXNzYWdlc19tZW1iZXJzLmNjIGIvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL21lc3NhZ2VzX21lbWJlcnMuY2MKLW5ldyBmaWxlIG1vZGUgMTAwNjQ0Ci1pbmRleCAwMDAwMDAwLi4xMzU5NGQ5Ci0tLS0gL2Rldi9udWxsCi0rKysgYi9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvbWVzc2FnZXNfbWVtYmVycy5jYwotQEAgLTAsMCArMSwxMDAgQEAKLSsvLyBzdGQ6Om1lc3NhZ2VzIGltcGxlbWVudGF0aW9uIGRldGFpbHMsIEdOVSB2ZXJzaW9uIC0qLSBDKysgLSotCi0rCi0rLy8gQ29weXJpZ2h0IChDKSAyMDAxLCAyMDAyIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgotKy8vCi0rLy8gVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBJU08gQysrIExpYnJhcnkuICBUaGlzIGxpYnJhcnkgaXMgZnJlZQotKy8vIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyIHRoZQotKy8vIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCi0rLy8gRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pCi0rLy8gYW55IGxhdGVyIHZlcnNpb24uCi0rCi0rLy8gVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0rLy8gYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSsvLyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCi0rLy8gR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSsKLSsvLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZwotKy8vIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy4gIElmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUKLSsvLyBTb2Z0d2FyZSBGb3VuZGF0aW9uLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywKLSsvLyBVU0EuCi0rCi0rLy8gQXMgYSBzcGVjaWFsIGV4Y2VwdGlvbiwgeW91IG1heSB1c2UgdGhpcyBmaWxlIGFzIHBhcnQgb2YgYSBmcmVlIHNvZnR3YXJlCi0rLy8gbGlicmFyeSB3aXRob3V0IHJlc3RyaWN0aW9uLiAgU3BlY2lmaWNhbGx5LCBpZiBvdGhlciBmaWxlcyBpbnN0YW50aWF0ZQotKy8vIHRlbXBsYXRlcyBvciB1c2UgbWFjcm9zIG9yIGlubGluZSBmdW5jdGlvbnMgZnJvbSB0aGlzIGZpbGUsIG9yIHlvdSBjb21waWxlCi0rLy8gdGhpcyBmaWxlIGFuZCBsaW5rIGl0IHdpdGggb3RoZXIgZmlsZXMgdG8gcHJvZHVjZSBhbiBleGVjdXRhYmxlLCB0aGlzCi0rLy8gZmlsZSBkb2VzIG5vdCBieSBpdHNlbGYgY2F1c2UgdGhlIHJlc3VsdGluZyBleGVjdXRhYmxlIHRvIGJlIGNvdmVyZWQgYnkKLSsvLyB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UuICBUaGlzIGV4Y2VwdGlvbiBkb2VzIG5vdCBob3dldmVyCi0rLy8gaW52YWxpZGF0ZSBhbnkgb3RoZXIgcmVhc29ucyB3aHkgdGhlIGV4ZWN1dGFibGUgZmlsZSBtaWdodCBiZSBjb3ZlcmVkIGJ5Ci0rLy8gdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLgotKwotKy8vCi0rLy8gSVNPIEMrKyAxNDg4MjogMjIuMi43LjEuMiAgbWVzc2FnZXMgdmlydHVhbCBmdW5jdGlvbnMKLSsvLwotKwotKy8vIFdyaXR0ZW4gYnkgQmVuamFtaW4gS29zbmlrIDxia296QHJlZGhhdC5jb20+Ci0rCi0rI2luY2x1ZGUgPGxvY2FsZT4KLSsjaW5jbHVkZSA8Yml0cy9jKytsb2NhbGVfaW50ZXJuYWwuaD4KLSsKLSsjaWZkZWYgX19VQ0xJQkNfTUpOM19PTkxZX18KLSsjd2FybmluZyBmaXggZ2V0dGV4dCBzdHVmZgotKyNlbmRpZgotKyNpZmRlZiBfX1VDTElCQ19IQVNfR0VUVEVYVF9BV0FSRU5FU1NfXwotK2V4dGVybiAiQyIgY2hhciAqX19kY2dldHRleHQoY29uc3QgY2hhciAqZG9tYWlubmFtZSwKLSsJCQkgICAgIGNvbnN0IGNoYXIgKm1zZ2lkLCBpbnQgY2F0ZWdvcnkpOwotKyN1bmRlZiBnZXR0ZXh0Ci0rI2RlZmluZSBnZXR0ZXh0KG1zZ2lkKSBfX2RjZ2V0dGV4dChOVUxMLCBtc2dpZCwgTENfTUVTU0FHRVMpCi0rI2Vsc2UKLSsjdW5kZWYgZ2V0dGV4dAotKyNkZWZpbmUgZ2V0dGV4dChtc2dpZCkgKG1zZ2lkKQotKyNlbmRpZgotKwotK25hbWVzcGFjZSBzdGQKLSt7Ci0rICAvLyBTcGVjaWFsaXphdGlvbnMuCi0rICB0ZW1wbGF0ZTw+Ci0rICAgIHN0cmluZwotKyAgICBtZXNzYWdlczxjaGFyPjo6ZG9fZ2V0KGNhdGFsb2csIGludCwgaW50LCBjb25zdCBzdHJpbmcmIF9fZGZhdWx0KSBjb25zdAotKyAgICB7Ci0rI2lmZGVmIF9fVUNMSUJDX0hBU19YTE9DQUxFX18KLSsgICAgICBfX2NfbG9jYWxlIF9fb2xkID0gX191c2Vsb2NhbGUoX01fY19sb2NhbGVfbWVzc2FnZXMpOwotKyAgICAgIGNvbnN0IGNoYXIqIF9fbXNnID0gY29uc3RfY2FzdDxjb25zdCBjaGFyKj4oZ2V0dGV4dChfX2RmYXVsdC5jX3N0cigpKSk7Ci0rICAgICAgX191c2Vsb2NhbGUoX19vbGQpOwotKyAgICAgIHJldHVybiBzdHJpbmcoX19tc2cpOwotKyNlbGlmIGRlZmluZWQgX19VQ0xJQkNfSEFTX0xPQ0FMRV9fCi0rICAgICAgY2hhciogX19vbGQgPSBzdHJkdXAoc2V0bG9jYWxlKExDX0FMTCwgTlVMTCkpOwotKyAgICAgIHNldGxvY2FsZShMQ19BTEwsIF9NX25hbWVfbWVzc2FnZXMpOwotKyAgICAgIGNvbnN0IGNoYXIqIF9fbXNnID0gZ2V0dGV4dChfX2RmYXVsdC5jX3N0cigpKTsKLSsgICAgICBzZXRsb2NhbGUoTENfQUxMLCBfX29sZCk7Ci0rICAgICAgZnJlZShfX29sZCk7Ci0rICAgICAgcmV0dXJuIHN0cmluZyhfX21zZyk7Ci0rI2Vsc2UKLSsgICAgICBjb25zdCBjaGFyKiBfX21zZyA9IGdldHRleHQoX19kZmF1bHQuY19zdHIoKSk7Ci0rICAgICAgcmV0dXJuIHN0cmluZyhfX21zZyk7Ci0rI2VuZGlmCi0rICAgIH0KLSsKLSsjaWZkZWYgX0dMSUJDWFhfVVNFX1dDSEFSX1QKLSsgIHRlbXBsYXRlPD4KLSsgICAgd3N0cmluZwotKyAgICBtZXNzYWdlczx3Y2hhcl90Pjo6ZG9fZ2V0KGNhdGFsb2csIGludCwgaW50LCBjb25zdCB3c3RyaW5nJiBfX2RmYXVsdCkgY29uc3QKLSsgICAgewotKyMgaWZkZWYgX19VQ0xJQkNfSEFTX1hMT0NBTEVfXwotKyAgICAgIF9fY19sb2NhbGUgX19vbGQgPSBfX3VzZWxvY2FsZShfTV9jX2xvY2FsZV9tZXNzYWdlcyk7Ci0rICAgICAgY2hhciogX19tc2cgPSBnZXR0ZXh0KF9NX2NvbnZlcnRfdG9fY2hhcihfX2RmYXVsdCkpOwotKyAgICAgIF9fdXNlbG9jYWxlKF9fb2xkKTsKLSsgICAgICByZXR1cm4gX01fY29udmVydF9mcm9tX2NoYXIoX19tc2cpOwotKyMgZWxpZiBkZWZpbmVkIF9fVUNMSUJDX0hBU19MT0NBTEVfXwotKyAgICAgIGNoYXIqIF9fb2xkID0gc3RyZHVwKHNldGxvY2FsZShMQ19BTEwsIE5VTEwpKTsKLSsgICAgICBzZXRsb2NhbGUoTENfQUxMLCBfTV9uYW1lX21lc3NhZ2VzKTsKLSsgICAgICBjaGFyKiBfX21zZyA9IGdldHRleHQoX01fY29udmVydF90b19jaGFyKF9fZGZhdWx0KSk7Ci0rICAgICAgc2V0bG9jYWxlKExDX0FMTCwgX19vbGQpOwotKyAgICAgIGZyZWUoX19vbGQpOwotKyAgICAgIHJldHVybiBfTV9jb252ZXJ0X2Zyb21fY2hhcihfX21zZyk7Ci0rIyBlbHNlCi0rICAgICAgY2hhciogX19tc2cgPSBnZXR0ZXh0KF9NX2NvbnZlcnRfdG9fY2hhcihfX2RmYXVsdCkpOwotKyAgICAgIHJldHVybiBfTV9jb252ZXJ0X2Zyb21fY2hhcihfX21zZyk7Ci0rIyBlbmRpZgotKyAgICB9Ci0rI2VuZGlmCi0rfQotZGlmZiAtLWdpdCBhL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9tZXNzYWdlc19tZW1iZXJzLmggYi9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvbWVzc2FnZXNfbWVtYmVycy5oCi1uZXcgZmlsZSBtb2RlIDEwMDY0NAotaW5kZXggMDAwMDAwMC4uMTQyNDA3OAotLS0tIC9kZXYvbnVsbAotKysrIGIvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL21lc3NhZ2VzX21lbWJlcnMuaAotQEAgLTAsMCArMSwxMTggQEAKLSsvLyBzdGQ6Om1lc3NhZ2VzIGltcGxlbWVudGF0aW9uIGRldGFpbHMsIEdOVSB2ZXJzaW9uIC0qLSBDKysgLSotCi0rCi0rLy8gQ29weXJpZ2h0IChDKSAyMDAxLCAyMDAyLCAyMDAzLCAyMDA0IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgotKy8vCi0rLy8gVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBJU08gQysrIExpYnJhcnkuICBUaGlzIGxpYnJhcnkgaXMgZnJlZQotKy8vIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyIHRoZQotKy8vIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCi0rLy8gRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pCi0rLy8gYW55IGxhdGVyIHZlcnNpb24uCi0rCi0rLy8gVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0rLy8gYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSsvLyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCi0rLy8gR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSsKLSsvLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZwotKy8vIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy4gIElmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUKLSsvLyBTb2Z0d2FyZSBGb3VuZGF0aW9uLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywKLSsvLyBVU0EuCi0rCi0rLy8gQXMgYSBzcGVjaWFsIGV4Y2VwdGlvbiwgeW91IG1heSB1c2UgdGhpcyBmaWxlIGFzIHBhcnQgb2YgYSBmcmVlIHNvZnR3YXJlCi0rLy8gbGlicmFyeSB3aXRob3V0IHJlc3RyaWN0aW9uLiAgU3BlY2lmaWNhbGx5LCBpZiBvdGhlciBmaWxlcyBpbnN0YW50aWF0ZQotKy8vIHRlbXBsYXRlcyBvciB1c2UgbWFjcm9zIG9yIGlubGluZSBmdW5jdGlvbnMgZnJvbSB0aGlzIGZpbGUsIG9yIHlvdSBjb21waWxlCi0rLy8gdGhpcyBmaWxlIGFuZCBsaW5rIGl0IHdpdGggb3RoZXIgZmlsZXMgdG8gcHJvZHVjZSBhbiBleGVjdXRhYmxlLCB0aGlzCi0rLy8gZmlsZSBkb2VzIG5vdCBieSBpdHNlbGYgY2F1c2UgdGhlIHJlc3VsdGluZyBleGVjdXRhYmxlIHRvIGJlIGNvdmVyZWQgYnkKLSsvLyB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UuICBUaGlzIGV4Y2VwdGlvbiBkb2VzIG5vdCBob3dldmVyCi0rLy8gaW52YWxpZGF0ZSBhbnkgb3RoZXIgcmVhc29ucyB3aHkgdGhlIGV4ZWN1dGFibGUgZmlsZSBtaWdodCBiZSBjb3ZlcmVkIGJ5Ci0rLy8gdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLgotKwotKy8vCi0rLy8gSVNPIEMrKyAxNDg4MjogMjIuMi43LjEuMiAgbWVzc2FnZXMgZnVuY3Rpb25zCi0rLy8KLSsKLSsvLyBXcml0dGVuIGJ5IEJlbmphbWluIEtvc25payA8YmtvekByZWRoYXQuY29tPgotKwotKyNpZmRlZiBfX1VDTElCQ19NSk4zX09OTFlfXwotKyN3YXJuaW5nIGZpeCBwcm90b3R5cGVzIGZvciAqdGV4dGRvbWFpbiBmdW5jcwotKyNlbmRpZgotKyNpZmRlZiBfX1VDTElCQ19IQVNfR0VUVEVYVF9BV0FSRU5FU1NfXwotK2V4dGVybiAiQyIgY2hhciAqX190ZXh0ZG9tYWluKGNvbnN0IGNoYXIgKmRvbWFpbm5hbWUpOwotK2V4dGVybiAiQyIgY2hhciAqX19iaW5kdGV4dGRvbWFpbihjb25zdCBjaGFyICpkb21haW5uYW1lLAotKwkJCQkgIGNvbnN0IGNoYXIgKmRpcm5hbWUpOwotKyNlbHNlCi0rI3VuZGVmIF9fdGV4dGRvbWFpbgotKyN1bmRlZiBfX2JpbmR0ZXh0ZG9tYWluCi0rI2RlZmluZSBfX3RleHRkb21haW4oRCkgICAgICAgICAgICgodm9pZCkwKQotKyNkZWZpbmUgX19iaW5kdGV4dGRvbWFpbihELFApICAgICAoKHZvaWQpMCkKLSsjZW5kaWYKLSsKLSsgIC8vIE5vbi12aXJ0dWFsIG1lbWJlciBmdW5jdGlvbnMuCi0rICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+Ci0rICAgICBtZXNzYWdlczxfQ2hhclQ+OjptZXNzYWdlcyhzaXplX3QgX19yZWZzKQotKyAgICAgOiBmYWNldChfX3JlZnMpLCBfTV9jX2xvY2FsZV9tZXNzYWdlcyhfU19nZXRfY19sb2NhbGUoKSksCi0rICAgICBfTV9uYW1lX21lc3NhZ2VzKF9TX2dldF9jX25hbWUoKSkKLSsgICAgIHsgfQotKwotKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPgotKyAgICAgbWVzc2FnZXM8X0NoYXJUPjo6bWVzc2FnZXMoX19jX2xvY2FsZSBfX2Nsb2MsIGNvbnN0IGNoYXIqIF9fcywKLSsJCQkJc2l6ZV90IF9fcmVmcykKLSsgICAgIDogZmFjZXQoX19yZWZzKSwgX01fY19sb2NhbGVfbWVzc2FnZXMoX1NfY2xvbmVfY19sb2NhbGUoX19jbG9jKSksCi0rICAgICBfTV9uYW1lX21lc3NhZ2VzKF9fcykKLSsgICAgIHsKLSsgICAgICAgY2hhciogX190bXAgPSBuZXcgY2hhcltzdGQ6OnN0cmxlbihfX3MpICsgMV07Ci0rICAgICAgIHN0ZDo6c3RyY3B5KF9fdG1wLCBfX3MpOwotKyAgICAgICBfTV9uYW1lX21lc3NhZ2VzID0gX190bXA7Ci0rICAgICB9Ci0rCi0rICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+Ci0rICAgIHR5cGVuYW1lIG1lc3NhZ2VzPF9DaGFyVD46OmNhdGFsb2cKLSsgICAgbWVzc2FnZXM8X0NoYXJUPjo6b3Blbihjb25zdCBiYXNpY19zdHJpbmc8Y2hhcj4mIF9fcywgY29uc3QgbG9jYWxlJiBfX2xvYywKLSsJCQkgICBjb25zdCBjaGFyKiBfX2RpcikgY29uc3QKLSsgICAgewotKyAgICAgIF9fYmluZHRleHRkb21haW4oX19zLmNfc3RyKCksIF9fZGlyKTsKLSsgICAgICByZXR1cm4gdGhpcy0+ZG9fb3BlbihfX3MsIF9fbG9jKTsKLSsgICAgfQotKwotKyAgLy8gVmlydHVhbCBtZW1iZXIgZnVuY3Rpb25zLgotKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPgotKyAgICBtZXNzYWdlczxfQ2hhclQ+Ojp+bWVzc2FnZXMoKQotKyAgICB7Ci0rICAgICAgaWYgKF9NX25hbWVfbWVzc2FnZXMgIT0gX1NfZ2V0X2NfbmFtZSgpKQotKwlkZWxldGUgW10gX01fbmFtZV9tZXNzYWdlczsKLSsgICAgICBfU19kZXN0cm95X2NfbG9jYWxlKF9NX2NfbG9jYWxlX21lc3NhZ2VzKTsKLSsgICAgfQotKwotKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPgotKyAgICB0eXBlbmFtZSBtZXNzYWdlczxfQ2hhclQ+OjpjYXRhbG9nCi0rICAgIG1lc3NhZ2VzPF9DaGFyVD46OmRvX29wZW4oY29uc3QgYmFzaWNfc3RyaW5nPGNoYXI+JiBfX3MsCi0rCQkJICAgICAgY29uc3QgbG9jYWxlJikgY29uc3QKLSsgICAgewotKyAgICAgIC8vIE5vIGVycm9yIGNoZWNraW5nIGlzIGRvbmUsIGFzc3VtZSB0aGUgY2F0YWxvZyBleGlzdHMgYW5kIGNhbgotKyAgICAgIC8vIGJlIHVzZWQuCi0rICAgICAgX190ZXh0ZG9tYWluKF9fcy5jX3N0cigpKTsKLSsgICAgICByZXR1cm4gMDsKLSsgICAgfQotKwotKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPgotKyAgICB2b2lkCi0rICAgIG1lc3NhZ2VzPF9DaGFyVD46OmRvX2Nsb3NlKGNhdGFsb2cpIGNvbnN0Ci0rICAgIHsgfQotKwotKyAgIC8vIG1lc3NhZ2VzX2J5bmFtZQotKyAgIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4KLSsgICAgIG1lc3NhZ2VzX2J5bmFtZTxfQ2hhclQ+OjptZXNzYWdlc19ieW5hbWUoY29uc3QgY2hhciogX19zLCBzaXplX3QgX19yZWZzKQotKyAgICAgOiBtZXNzYWdlczxfQ2hhclQ+KF9fcmVmcykKLSsgICAgIHsKLSsgICAgICAgaWYgKHRoaXMtPl9NX25hbWVfbWVzc2FnZXMgIT0gbG9jYWxlOjpmYWNldDo6X1NfZ2V0X2NfbmFtZSgpKQotKwkgZGVsZXRlIFtdIHRoaXMtPl9NX25hbWVfbWVzc2FnZXM7Ci0rICAgICAgIGNoYXIqIF9fdG1wID0gbmV3IGNoYXJbc3RkOjpzdHJsZW4oX19zKSArIDFdOwotKyAgICAgICBzdGQ6OnN0cmNweShfX3RtcCwgX19zKTsKLSsgICAgICAgdGhpcy0+X01fbmFtZV9tZXNzYWdlcyA9IF9fdG1wOwotKwotKyAgICAgICBpZiAoc3RkOjpzdHJjbXAoX19zLCAiQyIpICE9IDAgJiYgc3RkOjpzdHJjbXAoX19zLCAiUE9TSVgiKSAhPSAwKQotKwkgewotKwkgICB0aGlzLT5fU19kZXN0cm95X2NfbG9jYWxlKHRoaXMtPl9NX2NfbG9jYWxlX21lc3NhZ2VzKTsKLSsJICAgdGhpcy0+X1NfY3JlYXRlX2NfbG9jYWxlKHRoaXMtPl9NX2NfbG9jYWxlX21lc3NhZ2VzLCBfX3MpOwotKwkgfQotKyAgICAgfQotZGlmZiAtLWdpdCBhL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9tb25ldGFyeV9tZW1iZXJzLmNjIGIvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL21vbmV0YXJ5X21lbWJlcnMuY2MKLW5ldyBmaWxlIG1vZGUgMTAwNjQ0Ci1pbmRleCAwMDAwMDAwLi5hYTUyNzMxCi0tLS0gL2Rldi9udWxsCi0rKysgYi9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvbW9uZXRhcnlfbWVtYmVycy5jYwotQEAgLTAsMCArMSw2OTIgQEAKLSsvLyBzdGQ6Om1vbmV5cHVuY3QgaW1wbGVtZW50YXRpb24gZGV0YWlscywgR05VIHZlcnNpb24gLSotIEMrKyAtKi0KLSsKLSsvLyBDb3B5cmlnaHQgKEMpIDIwMDEsIDIwMDIsIDIwMDMsIDIwMDQgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCi0rLy8KLSsvLyBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIElTTyBDKysgTGlicmFyeS4gIFRoaXMgbGlicmFyeSBpcyBmcmVlCi0rLy8gc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIgdGhlCi0rLy8gdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKLSsvLyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikKLSsvLyBhbnkgbGF0ZXIgdmVyc2lvbi4KLSsKLSsvLyBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSsvLyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotKy8vIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKLSsvLyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotKwotKy8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCi0rLy8gd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLiAgSWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZQotKy8vIFNvZnR3YXJlIEZvdW5kYXRpb24sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LAotKy8vIFVTQS4KLSsKLSsvLyBBcyBhIHNwZWNpYWwgZXhjZXB0aW9uLCB5b3UgbWF5IHVzZSB0aGlzIGZpbGUgYXMgcGFydCBvZiBhIGZyZWUgc29mdHdhcmUKLSsvLyBsaWJyYXJ5IHdpdGhvdXQgcmVzdHJpY3Rpb24uICBTcGVjaWZpY2FsbHksIGlmIG90aGVyIGZpbGVzIGluc3RhbnRpYXRlCi0rLy8gdGVtcGxhdGVzIG9yIHVzZSBtYWNyb3Mgb3IgaW5saW5lIGZ1bmN0aW9ucyBmcm9tIHRoaXMgZmlsZSwgb3IgeW91IGNvbXBpbGUKLSsvLyB0aGlzIGZpbGUgYW5kIGxpbmsgaXQgd2l0aCBvdGhlciBmaWxlcyB0byBwcm9kdWNlIGFuIGV4ZWN1dGFibGUsIHRoaXMKLSsvLyBmaWxlIGRvZXMgbm90IGJ5IGl0c2VsZiBjYXVzZSB0aGUgcmVzdWx0aW5nIGV4ZWN1dGFibGUgdG8gYmUgY292ZXJlZCBieQotKy8vIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4gIFRoaXMgZXhjZXB0aW9uIGRvZXMgbm90IGhvd2V2ZXIKLSsvLyBpbnZhbGlkYXRlIGFueSBvdGhlciByZWFzb25zIHdoeSB0aGUgZXhlY3V0YWJsZSBmaWxlIG1pZ2h0IGJlIGNvdmVyZWQgYnkKLSsvLyB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UuCi0rCi0rLy8KLSsvLyBJU08gQysrIDE0ODgyOiAyMi4yLjYuMy4yICBtb25leXB1bmN0IHZpcnR1YWwgZnVuY3Rpb25zCi0rLy8KLSsKLSsvLyBXcml0dGVuIGJ5IEJlbmphbWluIEtvc25payA8YmtvekByZWRoYXQuY29tPgotKwotKyNkZWZpbmUgX0xJQkMKLSsjaW5jbHVkZSA8bG9jYWxlPgotKyN1bmRlZiBfTElCQwotKyNpbmNsdWRlIDxiaXRzL2MrK2xvY2FsZV9pbnRlcm5hbC5oPgotKwotKyNpZmRlZiBfX1VDTElCQ19NSk4zX09OTFlfXwotKyN3YXJuaW5nIG9wdGltaXplIHRoaXMgZm9yIHVjbGliYwotKyN3YXJuaW5nIHRhaWxvciBmb3Igc3R1YiBsb2NhbGUgc3VwcG9ydAotKyNlbmRpZgotKwotKyNpZm5kZWYgX19VQ0xJQkNfSEFTX1hMT0NBTEVfXwotKyNkZWZpbmUgX19ubF9sYW5naW5mb19sKE4sIEwpICAgICAgICAgbmxfbGFuZ2luZm8oKE4pKQotKyNlbmRpZgotKwotK25hbWVzcGFjZSBzdGQKLSt7Ci0rICAvLyBDb25zdHJ1Y3QgYW5kIHJldHVybiB2YWxpZCBwYXR0ZXJuIGNvbnNpc3Rpbmcgb2Ygc29tZSBjb21iaW5hdGlvbiBvZjoKLSsgIC8vIHNwYWNlIG5vbmUgc3ltYm9sIHNpZ24gdmFsdWUKLSsgIG1vbmV5X2Jhc2U6OnBhdHRlcm4KLSsgIG1vbmV5X2Jhc2U6Ol9TX2NvbnN0cnVjdF9wYXR0ZXJuKGNoYXIgX19wcmVjZWRlcywgY2hhciBfX3NwYWNlLCBjaGFyIF9fcG9zbikKLSsgIHsKLSsgICAgcGF0dGVybiBfX3JldDsKLSsKLSsgICAgLy8gVGhpcyBpbnNhbmVseSBjb21wbGljYXRlZCByb3V0aW5lIGF0dGVtcHRzIHRvIGNvbnN0cnVjdCBhIHZhbGlkCi0rICAgIC8vIHBhdHRlcm4gZm9yIHVzZSB3aXRoIG1vbnllcHVuY3QuIEEgY291cGxlIG9mIGludmFyaWFudHM6Ci0rCi0rICAgIC8vIGlmIChfX3ByZWNlZGVzKSBzeW1ib2wgLT4gdmFsdWUKLSsgICAgLy8gZWxzZSB2YWx1ZSAtPiBzeW1ib2wKLSsKLSsgICAgLy8gaWYgKF9fc3BhY2UpIHNwYWNlCi0rICAgIC8vIGVsc2Ugbm9uZQotKwotKyAgICAvLyBub25lID09IG5ldmVyIGZpcnN0Ci0rICAgIC8vIHNwYWNlIG5ldmVyIGZpcnN0IG9yIGxhc3QKLSsKLSsgICAgLy8gQW55IGVsZWdhbnQgaW1wbGVtZW50YXRpb25zIG9mIHRoaXMgYXJlIHdlbGNvbWUuCi0rICAgIHN3aXRjaCAoX19wb3NuKQotKyAgICAgIHsKLSsgICAgICBjYXNlIDA6Ci0rICAgICAgY2FzZSAxOgotKwkvLyAxIFRoZSBzaWduIHByZWNlZGVzIHRoZSB2YWx1ZSBhbmQgc3ltYm9sLgotKwlfX3JldC5maWVsZFswXSA9IHNpZ247Ci0rCWlmIChfX3NwYWNlKQotKwkgIHsKLSsJICAgIC8vIFBhdHRlcm4gc3RhcnRzIHdpdGggc2lnbi4KLSsJICAgIGlmIChfX3ByZWNlZGVzKQotKwkgICAgICB7Ci0rCQlfX3JldC5maWVsZFsxXSA9IHN5bWJvbDsKLSsJCV9fcmV0LmZpZWxkWzNdID0gdmFsdWU7Ci0rCSAgICAgIH0KLSsJICAgIGVsc2UKLSsJICAgICAgewotKwkJX19yZXQuZmllbGRbMV0gPSB2YWx1ZTsKLSsJCV9fcmV0LmZpZWxkWzNdID0gc3ltYm9sOwotKwkgICAgICB9Ci0rCSAgICBfX3JldC5maWVsZFsyXSA9IHNwYWNlOwotKwkgIH0KLSsJZWxzZQotKwkgIHsKLSsJICAgIC8vIFBhdHRlcm4gc3RhcnRzIHdpdGggc2lnbiBhbmQgZW5kcyB3aXRoIG5vbmUuCi0rCSAgICBpZiAoX19wcmVjZWRlcykKLSsJICAgICAgewotKwkJX19yZXQuZmllbGRbMV0gPSBzeW1ib2w7Ci0rCQlfX3JldC5maWVsZFsyXSA9IHZhbHVlOwotKwkgICAgICB9Ci0rCSAgICBlbHNlCi0rCSAgICAgIHsKLSsJCV9fcmV0LmZpZWxkWzFdID0gdmFsdWU7Ci0rCQlfX3JldC5maWVsZFsyXSA9IHN5bWJvbDsKLSsJICAgICAgfQotKwkgICAgX19yZXQuZmllbGRbM10gPSBub25lOwotKwkgIH0KLSsJYnJlYWs7Ci0rICAgICAgY2FzZSAyOgotKwkvLyAyIFRoZSBzaWduIGZvbGxvd3MgdGhlIHZhbHVlIGFuZCBzeW1ib2wuCi0rCWlmIChfX3NwYWNlKQotKwkgIHsKLSsJICAgIC8vIFBhdHRlcm4gZWl0aGVyIGVuZHMgd2l0aCBzaWduLgotKwkgICAgaWYgKF9fcHJlY2VkZXMpCi0rCSAgICAgIHsKLSsJCV9fcmV0LmZpZWxkWzBdID0gc3ltYm9sOwotKwkJX19yZXQuZmllbGRbMl0gPSB2YWx1ZTsKLSsJICAgICAgfQotKwkgICAgZWxzZQotKwkgICAgICB7Ci0rCQlfX3JldC5maWVsZFswXSA9IHZhbHVlOwotKwkJX19yZXQuZmllbGRbMl0gPSBzeW1ib2w7Ci0rCSAgICAgIH0KLSsJICAgIF9fcmV0LmZpZWxkWzFdID0gc3BhY2U7Ci0rCSAgICBfX3JldC5maWVsZFszXSA9IHNpZ247Ci0rCSAgfQotKwllbHNlCi0rCSAgewotKwkgICAgLy8gUGF0dGVybiBlbmRzIHdpdGggc2lnbiB0aGVuIG5vbmUuCi0rCSAgICBpZiAoX19wcmVjZWRlcykKLSsJICAgICAgewotKwkJX19yZXQuZmllbGRbMF0gPSBzeW1ib2w7Ci0rCQlfX3JldC5maWVsZFsxXSA9IHZhbHVlOwotKwkgICAgICB9Ci0rCSAgICBlbHNlCi0rCSAgICAgIHsKLSsJCV9fcmV0LmZpZWxkWzBdID0gdmFsdWU7Ci0rCQlfX3JldC5maWVsZFsxXSA9IHN5bWJvbDsKLSsJICAgICAgfQotKwkgICAgX19yZXQuZmllbGRbMl0gPSBzaWduOwotKwkgICAgX19yZXQuZmllbGRbM10gPSBub25lOwotKwkgIH0KLSsJYnJlYWs7Ci0rICAgICAgY2FzZSAzOgotKwkvLyAzIFRoZSBzaWduIGltbWVkaWF0ZWx5IHByZWNlZGVzIHRoZSBzeW1ib2wuCi0rCWlmIChfX3ByZWNlZGVzKQotKwkgIHsKLSsJICAgIF9fcmV0LmZpZWxkWzBdID0gc2lnbjsKLSsJICAgIF9fcmV0LmZpZWxkWzFdID0gc3ltYm9sOwotKwkgICAgaWYgKF9fc3BhY2UpCi0rCSAgICAgIHsKLSsJCV9fcmV0LmZpZWxkWzJdID0gc3BhY2U7Ci0rCQlfX3JldC5maWVsZFszXSA9IHZhbHVlOwotKwkgICAgICB9Ci0rCSAgICBlbHNlCi0rCSAgICAgIHsKLSsJCV9fcmV0LmZpZWxkWzJdID0gdmFsdWU7Ci0rCQlfX3JldC5maWVsZFszXSA9IG5vbmU7Ci0rCSAgICAgIH0KLSsJICB9Ci0rCWVsc2UKLSsJICB7Ci0rCSAgICBfX3JldC5maWVsZFswXSA9IHZhbHVlOwotKwkgICAgaWYgKF9fc3BhY2UpCi0rCSAgICAgIHsKLSsJCV9fcmV0LmZpZWxkWzFdID0gc3BhY2U7Ci0rCQlfX3JldC5maWVsZFsyXSA9IHNpZ247Ci0rCQlfX3JldC5maWVsZFszXSA9IHN5bWJvbDsKLSsJICAgICAgfQotKwkgICAgZWxzZQotKwkgICAgICB7Ci0rCQlfX3JldC5maWVsZFsxXSA9IHNpZ247Ci0rCQlfX3JldC5maWVsZFsyXSA9IHN5bWJvbDsKLSsJCV9fcmV0LmZpZWxkWzNdID0gbm9uZTsKLSsJICAgICAgfQotKwkgIH0KLSsJYnJlYWs7Ci0rICAgICAgY2FzZSA0OgotKwkvLyA0IFRoZSBzaWduIGltbWVkaWF0ZWx5IGZvbGxvd3MgdGhlIHN5bWJvbC4KLSsJaWYgKF9fcHJlY2VkZXMpCi0rCSAgewotKwkgICAgX19yZXQuZmllbGRbMF0gPSBzeW1ib2w7Ci0rCSAgICBfX3JldC5maWVsZFsxXSA9IHNpZ247Ci0rCSAgICBpZiAoX19zcGFjZSkKLSsJICAgICAgewotKwkJX19yZXQuZmllbGRbMl0gPSBzcGFjZTsKLSsJCV9fcmV0LmZpZWxkWzNdID0gdmFsdWU7Ci0rCSAgICAgIH0KLSsJICAgIGVsc2UKLSsJICAgICAgewotKwkJX19yZXQuZmllbGRbMl0gPSB2YWx1ZTsKLSsJCV9fcmV0LmZpZWxkWzNdID0gbm9uZTsKLSsJICAgICAgfQotKwkgIH0KLSsJZWxzZQotKwkgIHsKLSsJICAgIF9fcmV0LmZpZWxkWzBdID0gdmFsdWU7Ci0rCSAgICBpZiAoX19zcGFjZSkKLSsJICAgICAgewotKwkJX19yZXQuZmllbGRbMV0gPSBzcGFjZTsKLSsJCV9fcmV0LmZpZWxkWzJdID0gc3ltYm9sOwotKwkJX19yZXQuZmllbGRbM10gPSBzaWduOwotKwkgICAgICB9Ci0rCSAgICBlbHNlCi0rCSAgICAgIHsKLSsJCV9fcmV0LmZpZWxkWzFdID0gc3ltYm9sOwotKwkJX19yZXQuZmllbGRbMl0gPSBzaWduOwotKwkJX19yZXQuZmllbGRbM10gPSBub25lOwotKwkgICAgICB9Ci0rCSAgfQotKwlicmVhazsKLSsgICAgICBkZWZhdWx0OgotKwk7Ci0rICAgICAgfQotKyAgICByZXR1cm4gX19yZXQ7Ci0rICB9Ci0rCi0rICB0ZW1wbGF0ZTw+Ci0rICAgIHZvaWQKLSsgICAgbW9uZXlwdW5jdDxjaGFyLCB0cnVlPjo6X01faW5pdGlhbGl6ZV9tb25leXB1bmN0KF9fY19sb2NhbGUgX19jbG9jLAotKwkJCQkJCSAgICAgY29uc3QgY2hhciopCi0rICAgIHsKLSsgICAgICBpZiAoIV9NX2RhdGEpCi0rCV9NX2RhdGEgPSBuZXcgX19tb25leXB1bmN0X2NhY2hlPGNoYXIsIHRydWU+OwotKwotKyAgICAgIGlmICghX19jbG9jKQotKwl7Ci0rCSAgLy8gIkMiIGxvY2FsZQotKwkgIF9NX2RhdGEtPl9NX2RlY2ltYWxfcG9pbnQgPSAnLic7Ci0rCSAgX01fZGF0YS0+X01fdGhvdXNhbmRzX3NlcCA9ICcsJzsKLSsJICBfTV9kYXRhLT5fTV9ncm91cGluZyA9ICIiOwotKwkgIF9NX2RhdGEtPl9NX2dyb3VwaW5nX3NpemUgPSAwOwotKwkgIF9NX2RhdGEtPl9NX2N1cnJfc3ltYm9sID0gIiI7Ci0rCSAgX01fZGF0YS0+X01fY3Vycl9zeW1ib2xfc2l6ZSA9IDA7Ci0rCSAgX01fZGF0YS0+X01fcG9zaXRpdmVfc2lnbiA9ICIiOwotKwkgIF9NX2RhdGEtPl9NX3Bvc2l0aXZlX3NpZ25fc2l6ZSA9IDA7Ci0rCSAgX01fZGF0YS0+X01fbmVnYXRpdmVfc2lnbiA9ICIiOwotKwkgIF9NX2RhdGEtPl9NX25lZ2F0aXZlX3NpZ25fc2l6ZSA9IDA7Ci0rCSAgX01fZGF0YS0+X01fZnJhY19kaWdpdHMgPSAwOwotKwkgIF9NX2RhdGEtPl9NX3Bvc19mb3JtYXQgPSBtb25leV9iYXNlOjpfU19kZWZhdWx0X3BhdHRlcm47Ci0rCSAgX01fZGF0YS0+X01fbmVnX2Zvcm1hdCA9IG1vbmV5X2Jhc2U6Ol9TX2RlZmF1bHRfcGF0dGVybjsKLSsKLSsJICBmb3IgKHNpemVfdCBfX2kgPSAwOyBfX2kgPCBtb25leV9iYXNlOjpfU19lbmQ7ICsrX19pKQotKwkgICAgX01fZGF0YS0+X01fYXRvbXNbX19pXSA9IG1vbmV5X2Jhc2U6Ol9TX2F0b21zW19faV07Ci0rCX0KLSsgICAgICBlbHNlCi0rCXsKLSsJICAvLyBOYW1lZCBsb2NhbGUuCi0rCSAgX01fZGF0YS0+X01fZGVjaW1hbF9wb2ludCA9ICooX19ubF9sYW5naW5mb19sKF9fTU9OX0RFQ0lNQUxfUE9JTlQsCi0rCQkJCQkJCV9fY2xvYykpOwotKwkgIF9NX2RhdGEtPl9NX3Rob3VzYW5kc19zZXAgPSAqKF9fbmxfbGFuZ2luZm9fbChfX01PTl9USE9VU0FORFNfU0VQLAotKwkJCQkJCQlfX2Nsb2MpKTsKLSsJICBfTV9kYXRhLT5fTV9ncm91cGluZyA9IF9fbmxfbGFuZ2luZm9fbChfX01PTl9HUk9VUElORywgX19jbG9jKTsKLSsJICBfTV9kYXRhLT5fTV9ncm91cGluZ19zaXplID0gc3RybGVuKF9NX2RhdGEtPl9NX2dyb3VwaW5nKTsKLSsJICBfTV9kYXRhLT5fTV9wb3NpdGl2ZV9zaWduID0gX19ubF9sYW5naW5mb19sKF9fUE9TSVRJVkVfU0lHTiwgX19jbG9jKTsKLSsJICBfTV9kYXRhLT5fTV9wb3NpdGl2ZV9zaWduX3NpemUgPSBzdHJsZW4oX01fZGF0YS0+X01fcG9zaXRpdmVfc2lnbik7Ci0rCi0rCSAgY2hhciBfX25wb3NuID0gKihfX25sX2xhbmdpbmZvX2woX19JTlRfTl9TSUdOX1BPU04sIF9fY2xvYykpOwotKwkgIGlmICghX19ucG9zbikKLSsJICAgIF9NX2RhdGEtPl9NX25lZ2F0aXZlX3NpZ24gPSAiKCkiOwotKwkgIGVsc2UKLSsJICAgIF9NX2RhdGEtPl9NX25lZ2F0aXZlX3NpZ24gPSBfX25sX2xhbmdpbmZvX2woX19ORUdBVElWRV9TSUdOLAotKwkJCQkJCQlfX2Nsb2MpOwotKwkgIF9NX2RhdGEtPl9NX25lZ2F0aXZlX3NpZ25fc2l6ZSA9IHN0cmxlbihfTV9kYXRhLT5fTV9uZWdhdGl2ZV9zaWduKTsKLSsKLSsJICAvLyBfSW50bCA9PSB0cnVlCi0rCSAgX01fZGF0YS0+X01fY3Vycl9zeW1ib2wgPSBfX25sX2xhbmdpbmZvX2woX19JTlRfQ1VSUl9TWU1CT0wsIF9fY2xvYyk7Ci0rCSAgX01fZGF0YS0+X01fY3Vycl9zeW1ib2xfc2l6ZSA9IHN0cmxlbihfTV9kYXRhLT5fTV9jdXJyX3N5bWJvbCk7Ci0rCSAgX01fZGF0YS0+X01fZnJhY19kaWdpdHMgPSAqKF9fbmxfbGFuZ2luZm9fbChfX0lOVF9GUkFDX0RJR0lUUywKLSsJCQkJCQkgICAgICBfX2Nsb2MpKTsKLSsJICBjaGFyIF9fcHByZWNlZGVzID0gKihfX25sX2xhbmdpbmZvX2woX19JTlRfUF9DU19QUkVDRURFUywgX19jbG9jKSk7Ci0rCSAgY2hhciBfX3BzcGFjZSA9ICooX19ubF9sYW5naW5mb19sKF9fSU5UX1BfU0VQX0JZX1NQQUNFLCBfX2Nsb2MpKTsKLSsJICBjaGFyIF9fcHBvc24gPSAqKF9fbmxfbGFuZ2luZm9fbChfX0lOVF9QX1NJR05fUE9TTiwgX19jbG9jKSk7Ci0rCSAgX01fZGF0YS0+X01fcG9zX2Zvcm1hdCA9IF9TX2NvbnN0cnVjdF9wYXR0ZXJuKF9fcHByZWNlZGVzLCBfX3BzcGFjZSwKLSsJCQkJCQkJX19wcG9zbik7Ci0rCSAgY2hhciBfX25wcmVjZWRlcyA9ICooX19ubF9sYW5naW5mb19sKF9fSU5UX05fQ1NfUFJFQ0VERVMsIF9fY2xvYykpOwotKwkgIGNoYXIgX19uc3BhY2UgPSAqKF9fbmxfbGFuZ2luZm9fbChfX0lOVF9OX1NFUF9CWV9TUEFDRSwgX19jbG9jKSk7Ci0rCSAgX01fZGF0YS0+X01fbmVnX2Zvcm1hdCA9IF9TX2NvbnN0cnVjdF9wYXR0ZXJuKF9fbnByZWNlZGVzLCBfX25zcGFjZSwKLSsJCQkJCQkJX19ucG9zbik7Ci0rCX0KLSsgICAgfQotKwotKyAgdGVtcGxhdGU8PgotKyAgICB2b2lkCi0rICAgIG1vbmV5cHVuY3Q8Y2hhciwgZmFsc2U+OjpfTV9pbml0aWFsaXplX21vbmV5cHVuY3QoX19jX2xvY2FsZSBfX2Nsb2MsCi0rCQkJCQkJICAgICAgY29uc3QgY2hhciopCi0rICAgIHsKLSsgICAgICBpZiAoIV9NX2RhdGEpCi0rCV9NX2RhdGEgPSBuZXcgX19tb25leXB1bmN0X2NhY2hlPGNoYXIsIGZhbHNlPjsKLSsKLSsgICAgICBpZiAoIV9fY2xvYykKLSsJewotKwkgIC8vICJDIiBsb2NhbGUKLSsJICBfTV9kYXRhLT5fTV9kZWNpbWFsX3BvaW50ID0gJy4nOwotKwkgIF9NX2RhdGEtPl9NX3Rob3VzYW5kc19zZXAgPSAnLCc7Ci0rCSAgX01fZGF0YS0+X01fZ3JvdXBpbmcgPSAiIjsKLSsJICBfTV9kYXRhLT5fTV9ncm91cGluZ19zaXplID0gMDsKLSsJICBfTV9kYXRhLT5fTV9jdXJyX3N5bWJvbCA9ICIiOwotKwkgIF9NX2RhdGEtPl9NX2N1cnJfc3ltYm9sX3NpemUgPSAwOwotKwkgIF9NX2RhdGEtPl9NX3Bvc2l0aXZlX3NpZ24gPSAiIjsKLSsJICBfTV9kYXRhLT5fTV9wb3NpdGl2ZV9zaWduX3NpemUgPSAwOwotKwkgIF9NX2RhdGEtPl9NX25lZ2F0aXZlX3NpZ24gPSAiIjsKLSsJICBfTV9kYXRhLT5fTV9uZWdhdGl2ZV9zaWduX3NpemUgPSAwOwotKwkgIF9NX2RhdGEtPl9NX2ZyYWNfZGlnaXRzID0gMDsKLSsJICBfTV9kYXRhLT5fTV9wb3NfZm9ybWF0ID0gbW9uZXlfYmFzZTo6X1NfZGVmYXVsdF9wYXR0ZXJuOwotKwkgIF9NX2RhdGEtPl9NX25lZ19mb3JtYXQgPSBtb25leV9iYXNlOjpfU19kZWZhdWx0X3BhdHRlcm47Ci0rCi0rCSAgZm9yIChzaXplX3QgX19pID0gMDsgX19pIDwgbW9uZXlfYmFzZTo6X1NfZW5kOyArK19faSkKLSsJICAgIF9NX2RhdGEtPl9NX2F0b21zW19faV0gPSBtb25leV9iYXNlOjpfU19hdG9tc1tfX2ldOwotKwl9Ci0rICAgICAgZWxzZQotKwl7Ci0rCSAgLy8gTmFtZWQgbG9jYWxlLgotKwkgIF9NX2RhdGEtPl9NX2RlY2ltYWxfcG9pbnQgPSAqKF9fbmxfbGFuZ2luZm9fbChfX01PTl9ERUNJTUFMX1BPSU5ULAotKwkJCQkJCQlfX2Nsb2MpKTsKLSsJICBfTV9kYXRhLT5fTV90aG91c2FuZHNfc2VwID0gKihfX25sX2xhbmdpbmZvX2woX19NT05fVEhPVVNBTkRTX1NFUCwKLSsJCQkJCQkJX19jbG9jKSk7Ci0rCSAgX01fZGF0YS0+X01fZ3JvdXBpbmcgPSBfX25sX2xhbmdpbmZvX2woX19NT05fR1JPVVBJTkcsIF9fY2xvYyk7Ci0rCSAgX01fZGF0YS0+X01fZ3JvdXBpbmdfc2l6ZSA9IHN0cmxlbihfTV9kYXRhLT5fTV9ncm91cGluZyk7Ci0rCSAgX01fZGF0YS0+X01fcG9zaXRpdmVfc2lnbiA9IF9fbmxfbGFuZ2luZm9fbChfX1BPU0lUSVZFX1NJR04sIF9fY2xvYyk7Ci0rCSAgX01fZGF0YS0+X01fcG9zaXRpdmVfc2lnbl9zaXplID0gc3RybGVuKF9NX2RhdGEtPl9NX3Bvc2l0aXZlX3NpZ24pOwotKwotKwkgIGNoYXIgX19ucG9zbiA9ICooX19ubF9sYW5naW5mb19sKF9fTl9TSUdOX1BPU04sIF9fY2xvYykpOwotKwkgIGlmICghX19ucG9zbikKLSsJICAgIF9NX2RhdGEtPl9NX25lZ2F0aXZlX3NpZ24gPSAiKCkiOwotKwkgIGVsc2UKLSsJICAgIF9NX2RhdGEtPl9NX25lZ2F0aXZlX3NpZ24gPSBfX25sX2xhbmdpbmZvX2woX19ORUdBVElWRV9TSUdOLAotKwkJCQkJCQlfX2Nsb2MpOwotKwkgIF9NX2RhdGEtPl9NX25lZ2F0aXZlX3NpZ25fc2l6ZSA9IHN0cmxlbihfTV9kYXRhLT5fTV9uZWdhdGl2ZV9zaWduKTsKLSsKLSsJICAvLyBfSW50bCA9PSBmYWxzZQotKwkgIF9NX2RhdGEtPl9NX2N1cnJfc3ltYm9sID0gX19ubF9sYW5naW5mb19sKF9fQ1VSUkVOQ1lfU1lNQk9MLCBfX2Nsb2MpOwotKwkgIF9NX2RhdGEtPl9NX2N1cnJfc3ltYm9sX3NpemUgPSBzdHJsZW4oX01fZGF0YS0+X01fY3Vycl9zeW1ib2wpOwotKwkgIF9NX2RhdGEtPl9NX2ZyYWNfZGlnaXRzID0gKihfX25sX2xhbmdpbmZvX2woX19GUkFDX0RJR0lUUywgX19jbG9jKSk7Ci0rCSAgY2hhciBfX3BwcmVjZWRlcyA9ICooX19ubF9sYW5naW5mb19sKF9fUF9DU19QUkVDRURFUywgX19jbG9jKSk7Ci0rCSAgY2hhciBfX3BzcGFjZSA9ICooX19ubF9sYW5naW5mb19sKF9fUF9TRVBfQllfU1BBQ0UsIF9fY2xvYykpOwotKwkgIGNoYXIgX19wcG9zbiA9ICooX19ubF9sYW5naW5mb19sKF9fUF9TSUdOX1BPU04sIF9fY2xvYykpOwotKwkgIF9NX2RhdGEtPl9NX3Bvc19mb3JtYXQgPSBfU19jb25zdHJ1Y3RfcGF0dGVybihfX3BwcmVjZWRlcywgX19wc3BhY2UsCi0rCQkJCQkJCV9fcHBvc24pOwotKwkgIGNoYXIgX19ucHJlY2VkZXMgPSAqKF9fbmxfbGFuZ2luZm9fbChfX05fQ1NfUFJFQ0VERVMsIF9fY2xvYykpOwotKwkgIGNoYXIgX19uc3BhY2UgPSAqKF9fbmxfbGFuZ2luZm9fbChfX05fU0VQX0JZX1NQQUNFLCBfX2Nsb2MpKTsKLSsJICBfTV9kYXRhLT5fTV9uZWdfZm9ybWF0ID0gX1NfY29uc3RydWN0X3BhdHRlcm4oX19ucHJlY2VkZXMsIF9fbnNwYWNlLAotKwkJCQkJCQlfX25wb3NuKTsKLSsJfQotKyAgICB9Ci0rCi0rICB0ZW1wbGF0ZTw+Ci0rICAgIG1vbmV5cHVuY3Q8Y2hhciwgdHJ1ZT46On5tb25leXB1bmN0KCkKLSsgICAgeyBkZWxldGUgX01fZGF0YTsgfQotKwotKyAgdGVtcGxhdGU8PgotKyAgICBtb25leXB1bmN0PGNoYXIsIGZhbHNlPjo6fm1vbmV5cHVuY3QoKQotKyAgICB7IGRlbGV0ZSBfTV9kYXRhOyB9Ci0rCi0rI2lmZGVmIF9HTElCQ1hYX1VTRV9XQ0hBUl9UCi0rICB0ZW1wbGF0ZTw+Ci0rICAgIHZvaWQKLSsgICAgbW9uZXlwdW5jdDx3Y2hhcl90LCB0cnVlPjo6X01faW5pdGlhbGl6ZV9tb25leXB1bmN0KF9fY19sb2NhbGUgX19jbG9jLAotKyNpZmRlZiBfX1VDTElCQ19IQVNfWExPQ0FMRV9fCi0rCQkJCQkJCWNvbnN0IGNoYXIqKQotKyNlbHNlCi0rCQkJCQkJCWNvbnN0IGNoYXIqIF9fbmFtZSkKLSsjZW5kaWYKLSsgICAgewotKyAgICAgIGlmICghX01fZGF0YSkKLSsJX01fZGF0YSA9IG5ldyBfX21vbmV5cHVuY3RfY2FjaGU8d2NoYXJfdCwgdHJ1ZT47Ci0rCi0rICAgICAgaWYgKCFfX2Nsb2MpCi0rCXsKLSsJICAvLyAiQyIgbG9jYWxlCi0rCSAgX01fZGF0YS0+X01fZGVjaW1hbF9wb2ludCA9IEwnLic7Ci0rCSAgX01fZGF0YS0+X01fdGhvdXNhbmRzX3NlcCA9IEwnLCc7Ci0rCSAgX01fZGF0YS0+X01fZ3JvdXBpbmcgPSAiIjsKLSsJICBfTV9kYXRhLT5fTV9ncm91cGluZ19zaXplID0gMDsKLSsJICBfTV9kYXRhLT5fTV9jdXJyX3N5bWJvbCA9IEwiIjsKLSsJICBfTV9kYXRhLT5fTV9jdXJyX3N5bWJvbF9zaXplID0gMDsKLSsJICBfTV9kYXRhLT5fTV9wb3NpdGl2ZV9zaWduID0gTCIiOwotKwkgIF9NX2RhdGEtPl9NX3Bvc2l0aXZlX3NpZ25fc2l6ZSA9IDA7Ci0rCSAgX01fZGF0YS0+X01fbmVnYXRpdmVfc2lnbiA9IEwiIjsKLSsJICBfTV9kYXRhLT5fTV9uZWdhdGl2ZV9zaWduX3NpemUgPSAwOwotKwkgIF9NX2RhdGEtPl9NX2ZyYWNfZGlnaXRzID0gMDsKLSsJICBfTV9kYXRhLT5fTV9wb3NfZm9ybWF0ID0gbW9uZXlfYmFzZTo6X1NfZGVmYXVsdF9wYXR0ZXJuOwotKwkgIF9NX2RhdGEtPl9NX25lZ19mb3JtYXQgPSBtb25leV9iYXNlOjpfU19kZWZhdWx0X3BhdHRlcm47Ci0rCi0rCSAgLy8gVXNlIGN0eXBlOjp3aWRlbiBjb2RlIHdpdGhvdXQgdGhlIGZhY2V0Li4uCi0rCSAgZm9yIChzaXplX3QgX19pID0gMDsgX19pIDwgbW9uZXlfYmFzZTo6X1NfZW5kOyArK19faSkKLSsJICAgIF9NX2RhdGEtPl9NX2F0b21zW19faV0gPQotKwkgICAgICBzdGF0aWNfY2FzdDx3Y2hhcl90Pihtb25leV9iYXNlOjpfU19hdG9tc1tfX2ldKTsKLSsJfQotKyAgICAgIGVsc2UKLSsJewotKwkgIC8vIE5hbWVkIGxvY2FsZS4KLSsjaWZkZWYgX19VQ0xJQkNfSEFTX1hMT0NBTEVfXwotKwkgIF9fY19sb2NhbGUgX19vbGQgPSBfX3VzZWxvY2FsZShfX2Nsb2MpOwotKyNlbHNlCi0rCSAgLy8gU3dpdGNoIHRvIG5hbWVkIGxvY2FsZSBzbyB0aGF0IG1ic3J0b3djcyB3aWxsIHdvcmsuCi0rCSAgY2hhciogX19vbGQgPSBzdHJkdXAoc2V0bG9jYWxlKExDX0FMTCwgTlVMTCkpOwotKwkgIHNldGxvY2FsZShMQ19BTEwsIF9fbmFtZSk7Ci0rI2VuZGlmCi0rCi0rI2lmZGVmIF9fVUNMSUJDX01KTjNfT05MWV9fCi0rI3dhcm5pbmcgZml4IHRoaXMuLi4gc2hvdWxkIGJlIG1vbmV0YXJ5Ci0rI2VuZGlmCi0rI2lmZGVmIF9fVUNMSUJDX18KLSsjIGlmZGVmIF9fVUNMSUJDX0hBU19YTE9DQUxFX18KLSsJICBfTV9kYXRhLT5fTV9kZWNpbWFsX3BvaW50ID0gX19jbG9jLT5kZWNpbWFsX3BvaW50X3djOwotKwkgIF9NX2RhdGEtPl9NX3Rob3VzYW5kc19zZXAgPSBfX2Nsb2MtPnRob3VzYW5kc19zZXBfd2M7Ci0rIyBlbHNlCi0rCSAgX01fZGF0YS0+X01fZGVjaW1hbF9wb2ludCA9IF9fZ2xvYmFsX2xvY2FsZS0+ZGVjaW1hbF9wb2ludF93YzsKLSsJICBfTV9kYXRhLT5fTV90aG91c2FuZHNfc2VwID0gX19nbG9iYWxfbG9jYWxlLT50aG91c2FuZHNfc2VwX3djOwotKyMgZW5kaWYKLSsjZWxzZQotKwkgIHVuaW9uIHsgY2hhciAqX19zOyB3Y2hhcl90IF9fdzsgfSBfX3U7Ci0rCSAgX191Ll9fcyA9IF9fbmxfbGFuZ2luZm9fbChfTkxfTU9ORVRBUllfREVDSU1BTF9QT0lOVF9XQywgX19jbG9jKTsKLSsJICBfTV9kYXRhLT5fTV9kZWNpbWFsX3BvaW50ID0gX191Ll9fdzsKLSsKLSsJICBfX3UuX19zID0gX19ubF9sYW5naW5mb19sKF9OTF9NT05FVEFSWV9USE9VU0FORFNfU0VQX1dDLCBfX2Nsb2MpOwotKwkgIF9NX2RhdGEtPl9NX3Rob3VzYW5kc19zZXAgPSBfX3UuX193OwotKyNlbmRpZgotKwkgIF9NX2RhdGEtPl9NX2dyb3VwaW5nID0gX19ubF9sYW5naW5mb19sKF9fTU9OX0dST1VQSU5HLCBfX2Nsb2MpOwotKwkgIF9NX2RhdGEtPl9NX2dyb3VwaW5nX3NpemUgPSBzdHJsZW4oX01fZGF0YS0+X01fZ3JvdXBpbmcpOwotKwotKwkgIGNvbnN0IGNoYXIqIF9fY3Bvc3NpZ24gPSBfX25sX2xhbmdpbmZvX2woX19QT1NJVElWRV9TSUdOLCBfX2Nsb2MpOwotKwkgIGNvbnN0IGNoYXIqIF9fY25lZ3NpZ24gPSBfX25sX2xhbmdpbmZvX2woX19ORUdBVElWRV9TSUdOLCBfX2Nsb2MpOwotKwkgIGNvbnN0IGNoYXIqIF9fY2N1cnIgPSBfX25sX2xhbmdpbmZvX2woX19JTlRfQ1VSUl9TWU1CT0wsIF9fY2xvYyk7Ci0rCi0rCSAgd2NoYXJfdCogX193Y3NfcHMgPSAwOwotKwkgIHdjaGFyX3QqIF9fd2NzX25zID0gMDsKLSsJICBjb25zdCBjaGFyIF9fbnBvc24gPSAqKF9fbmxfbGFuZ2luZm9fbChfX0lOVF9OX1NJR05fUE9TTiwgX19jbG9jKSk7Ci0rCSAgdHJ5Ci0rCSAgICB7Ci0rCSAgICAgIG1ic3RhdGVfdCBfX3N0YXRlOwotKwkgICAgICBzaXplX3QgX19sZW4gPSBzdHJsZW4oX19jcG9zc2lnbik7Ci0rCSAgICAgIGlmIChfX2xlbikKLSsJCXsKLSsJCSAgKytfX2xlbjsKLSsJCSAgbWVtc2V0KCZfX3N0YXRlLCAwLCBzaXplb2YobWJzdGF0ZV90KSk7Ci0rCQkgIF9fd2NzX3BzID0gbmV3IHdjaGFyX3RbX19sZW5dOwotKwkJICBtYnNydG93Y3MoX193Y3NfcHMsICZfX2Nwb3NzaWduLCBfX2xlbiwgJl9fc3RhdGUpOwotKwkJICBfTV9kYXRhLT5fTV9wb3NpdGl2ZV9zaWduID0gX193Y3NfcHM7Ci0rCQl9Ci0rCSAgICAgIGVsc2UKLSsJCV9NX2RhdGEtPl9NX3Bvc2l0aXZlX3NpZ24gPSBMIiI7Ci0rCSAgICAgIF9NX2RhdGEtPl9NX3Bvc2l0aXZlX3NpZ25fc2l6ZSA9IHdjc2xlbihfTV9kYXRhLT5fTV9wb3NpdGl2ZV9zaWduKTsKLSsKLSsJICAgICAgX19sZW4gPSBzdHJsZW4oX19jbmVnc2lnbik7Ci0rCSAgICAgIGlmICghX19ucG9zbikKLSsJCV9NX2RhdGEtPl9NX25lZ2F0aXZlX3NpZ24gPSBMIigpIjsKLSsJICAgICAgZWxzZSBpZiAoX19sZW4pCi0rCQl7Ci0rCQkgICsrX19sZW47Ci0rCQkgIG1lbXNldCgmX19zdGF0ZSwgMCwgc2l6ZW9mKG1ic3RhdGVfdCkpOwotKwkJICBfX3djc19ucyA9IG5ldyB3Y2hhcl90W19fbGVuXTsKLSsJCSAgbWJzcnRvd2NzKF9fd2NzX25zLCAmX19jbmVnc2lnbiwgX19sZW4sICZfX3N0YXRlKTsKLSsJCSAgX01fZGF0YS0+X01fbmVnYXRpdmVfc2lnbiA9IF9fd2NzX25zOwotKwkJfQotKwkgICAgICBlbHNlCi0rCQlfTV9kYXRhLT5fTV9uZWdhdGl2ZV9zaWduID0gTCIiOwotKwkgICAgICBfTV9kYXRhLT5fTV9uZWdhdGl2ZV9zaWduX3NpemUgPSB3Y3NsZW4oX01fZGF0YS0+X01fbmVnYXRpdmVfc2lnbik7Ci0rCi0rCSAgICAgIC8vIF9JbnRsID09IHRydWUuCi0rCSAgICAgIF9fbGVuID0gc3RybGVuKF9fY2N1cnIpOwotKwkgICAgICBpZiAoX19sZW4pCi0rCQl7Ci0rCQkgICsrX19sZW47Ci0rCQkgIG1lbXNldCgmX19zdGF0ZSwgMCwgc2l6ZW9mKG1ic3RhdGVfdCkpOwotKwkJICB3Y2hhcl90KiBfX3djcyA9IG5ldyB3Y2hhcl90W19fbGVuXTsKLSsJCSAgbWJzcnRvd2NzKF9fd2NzLCAmX19jY3VyciwgX19sZW4sICZfX3N0YXRlKTsKLSsJCSAgX01fZGF0YS0+X01fY3Vycl9zeW1ib2wgPSBfX3djczsKLSsJCX0KLSsJICAgICAgZWxzZQotKwkJX01fZGF0YS0+X01fY3Vycl9zeW1ib2wgPSBMIiI7Ci0rCSAgICAgIF9NX2RhdGEtPl9NX2N1cnJfc3ltYm9sX3NpemUgPSB3Y3NsZW4oX01fZGF0YS0+X01fY3Vycl9zeW1ib2wpOwotKwkgICAgfQotKwkgIGNhdGNoICguLi4pCi0rCSAgICB7Ci0rCSAgICAgIGRlbGV0ZSBfTV9kYXRhOwotKwkgICAgICBfTV9kYXRhID0gMDsKLSsJICAgICAgZGVsZXRlIF9fd2NzX3BzOwotKwkgICAgICBkZWxldGUgX193Y3NfbnM7Ci0rI2lmZGVmIF9fVUNMSUJDX0hBU19YTE9DQUxFX18KLSsJICAgICAgX191c2Vsb2NhbGUoX19vbGQpOwotKyNlbHNlCi0rCSAgICAgIHNldGxvY2FsZShMQ19BTEwsIF9fb2xkKTsKLSsJICAgICAgZnJlZShfX29sZCk7Ci0rI2VuZGlmCi0rCSAgICAgIF9fdGhyb3dfZXhjZXB0aW9uX2FnYWluOwotKwkgICAgfQotKwotKwkgIF9NX2RhdGEtPl9NX2ZyYWNfZGlnaXRzID0gKihfX25sX2xhbmdpbmZvX2woX19JTlRfRlJBQ19ESUdJVFMsCi0rCQkJCQkJICAgICAgX19jbG9jKSk7Ci0rCSAgY2hhciBfX3BwcmVjZWRlcyA9ICooX19ubF9sYW5naW5mb19sKF9fSU5UX1BfQ1NfUFJFQ0VERVMsIF9fY2xvYykpOwotKwkgIGNoYXIgX19wc3BhY2UgPSAqKF9fbmxfbGFuZ2luZm9fbChfX0lOVF9QX1NFUF9CWV9TUEFDRSwgX19jbG9jKSk7Ci0rCSAgY2hhciBfX3Bwb3NuID0gKihfX25sX2xhbmdpbmZvX2woX19JTlRfUF9TSUdOX1BPU04sIF9fY2xvYykpOwotKwkgIF9NX2RhdGEtPl9NX3Bvc19mb3JtYXQgPSBfU19jb25zdHJ1Y3RfcGF0dGVybihfX3BwcmVjZWRlcywgX19wc3BhY2UsCi0rCQkJCQkJCV9fcHBvc24pOwotKwkgIGNoYXIgX19ucHJlY2VkZXMgPSAqKF9fbmxfbGFuZ2luZm9fbChfX0lOVF9OX0NTX1BSRUNFREVTLCBfX2Nsb2MpKTsKLSsJICBjaGFyIF9fbnNwYWNlID0gKihfX25sX2xhbmdpbmZvX2woX19JTlRfTl9TRVBfQllfU1BBQ0UsIF9fY2xvYykpOwotKwkgIF9NX2RhdGEtPl9NX25lZ19mb3JtYXQgPSBfU19jb25zdHJ1Y3RfcGF0dGVybihfX25wcmVjZWRlcywgX19uc3BhY2UsCi0rCQkJCQkJCV9fbnBvc24pOwotKwotKyNpZmRlZiBfX1VDTElCQ19IQVNfWExPQ0FMRV9fCi0rCSAgX191c2Vsb2NhbGUoX19vbGQpOwotKyNlbHNlCi0rCSAgc2V0bG9jYWxlKExDX0FMTCwgX19vbGQpOwotKwkgIGZyZWUoX19vbGQpOwotKyNlbmRpZgotKwl9Ci0rICAgIH0KLSsKLSsgIHRlbXBsYXRlPD4KLSsgIHZvaWQKLSsgIG1vbmV5cHVuY3Q8d2NoYXJfdCwgZmFsc2U+OjpfTV9pbml0aWFsaXplX21vbmV5cHVuY3QoX19jX2xvY2FsZSBfX2Nsb2MsCi0rI2lmZGVmIF9fVUNMSUJDX0hBU19YTE9DQUxFX18KLSsJCQkJCQkgICAgICAgY29uc3QgY2hhciopCi0rI2Vsc2UKLSsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciogX19uYW1lKQotKyNlbmRpZgotKyAgewotKyAgICBpZiAoIV9NX2RhdGEpCi0rICAgICAgX01fZGF0YSA9IG5ldyBfX21vbmV5cHVuY3RfY2FjaGU8d2NoYXJfdCwgZmFsc2U+OwotKwotKyAgICBpZiAoIV9fY2xvYykKLSsJewotKwkgIC8vICJDIiBsb2NhbGUKLSsJICBfTV9kYXRhLT5fTV9kZWNpbWFsX3BvaW50ID0gTCcuJzsKLSsJICBfTV9kYXRhLT5fTV90aG91c2FuZHNfc2VwID0gTCcsJzsKLSsJICBfTV9kYXRhLT5fTV9ncm91cGluZyA9ICIiOwotKyAgICAgICAgICBfTV9kYXRhLT5fTV9ncm91cGluZ19zaXplID0gMDsKLSsJICBfTV9kYXRhLT5fTV9jdXJyX3N5bWJvbCA9IEwiIjsKLSsJICBfTV9kYXRhLT5fTV9jdXJyX3N5bWJvbF9zaXplID0gMDsKLSsJICBfTV9kYXRhLT5fTV9wb3NpdGl2ZV9zaWduID0gTCIiOwotKwkgIF9NX2RhdGEtPl9NX3Bvc2l0aXZlX3NpZ25fc2l6ZSA9IDA7Ci0rCSAgX01fZGF0YS0+X01fbmVnYXRpdmVfc2lnbiA9IEwiIjsKLSsJICBfTV9kYXRhLT5fTV9uZWdhdGl2ZV9zaWduX3NpemUgPSAwOwotKwkgIF9NX2RhdGEtPl9NX2ZyYWNfZGlnaXRzID0gMDsKLSsJICBfTV9kYXRhLT5fTV9wb3NfZm9ybWF0ID0gbW9uZXlfYmFzZTo6X1NfZGVmYXVsdF9wYXR0ZXJuOwotKwkgIF9NX2RhdGEtPl9NX25lZ19mb3JtYXQgPSBtb25leV9iYXNlOjpfU19kZWZhdWx0X3BhdHRlcm47Ci0rCi0rCSAgLy8gVXNlIGN0eXBlOjp3aWRlbiBjb2RlIHdpdGhvdXQgdGhlIGZhY2V0Li4uCi0rCSAgZm9yIChzaXplX3QgX19pID0gMDsgX19pIDwgbW9uZXlfYmFzZTo6X1NfZW5kOyArK19faSkKLSsJICAgIF9NX2RhdGEtPl9NX2F0b21zW19faV0gPQotKwkgICAgICBzdGF0aWNfY2FzdDx3Y2hhcl90Pihtb25leV9iYXNlOjpfU19hdG9tc1tfX2ldKTsKLSsJfQotKyAgICAgIGVsc2UKLSsJewotKwkgIC8vIE5hbWVkIGxvY2FsZS4KLSsjaWZkZWYgX19VQ0xJQkNfSEFTX1hMT0NBTEVfXwotKwkgIF9fY19sb2NhbGUgX19vbGQgPSBfX3VzZWxvY2FsZShfX2Nsb2MpOwotKyNlbHNlCi0rCSAgLy8gU3dpdGNoIHRvIG5hbWVkIGxvY2FsZSBzbyB0aGF0IG1ic3J0b3djcyB3aWxsIHdvcmsuCi0rCSAgY2hhciogX19vbGQgPSBzdHJkdXAoc2V0bG9jYWxlKExDX0FMTCwgTlVMTCkpOwotKwkgIHNldGxvY2FsZShMQ19BTEwsIF9fbmFtZSk7Ci0rI2VuZGlmCi0rCi0rI2lmZGVmIF9fVUNMSUJDX01KTjNfT05MWV9fCi0rI3dhcm5pbmcgZml4IHRoaXMuLi4gc2hvdWxkIGJlIG1vbmV0YXJ5Ci0rI2VuZGlmCi0rI2lmZGVmIF9fVUNMSUJDX18KLSsjIGlmZGVmIF9fVUNMSUJDX0hBU19YTE9DQUxFX18KLSsJICBfTV9kYXRhLT5fTV9kZWNpbWFsX3BvaW50ID0gX19jbG9jLT5kZWNpbWFsX3BvaW50X3djOwotKwkgIF9NX2RhdGEtPl9NX3Rob3VzYW5kc19zZXAgPSBfX2Nsb2MtPnRob3VzYW5kc19zZXBfd2M7Ci0rIyBlbHNlCi0rCSAgX01fZGF0YS0+X01fZGVjaW1hbF9wb2ludCA9IF9fZ2xvYmFsX2xvY2FsZS0+ZGVjaW1hbF9wb2ludF93YzsKLSsJICBfTV9kYXRhLT5fTV90aG91c2FuZHNfc2VwID0gX19nbG9iYWxfbG9jYWxlLT50aG91c2FuZHNfc2VwX3djOwotKyMgZW5kaWYKLSsjZWxzZQotKyAgICAgICAgICB1bmlvbiB7IGNoYXIgKl9fczsgd2NoYXJfdCBfX3c7IH0gX191OwotKwkgIF9fdS5fX3MgPSBfX25sX2xhbmdpbmZvX2woX05MX01PTkVUQVJZX0RFQ0lNQUxfUE9JTlRfV0MsIF9fY2xvYyk7Ci0rCSAgX01fZGF0YS0+X01fZGVjaW1hbF9wb2ludCA9IF9fdS5fX3c7Ci0rCi0rCSAgX191Ll9fcyA9IF9fbmxfbGFuZ2luZm9fbChfTkxfTU9ORVRBUllfVEhPVVNBTkRTX1NFUF9XQywgX19jbG9jKTsKLSsJICBfTV9kYXRhLT5fTV90aG91c2FuZHNfc2VwID0gX191Ll9fdzsKLSsjZW5kaWYKLSsJICBfTV9kYXRhLT5fTV9ncm91cGluZyA9IF9fbmxfbGFuZ2luZm9fbChfX01PTl9HUk9VUElORywgX19jbG9jKTsKLSsgICAgICAgICAgX01fZGF0YS0+X01fZ3JvdXBpbmdfc2l6ZSA9IHN0cmxlbihfTV9kYXRhLT5fTV9ncm91cGluZyk7Ci0rCi0rCSAgY29uc3QgY2hhciogX19jcG9zc2lnbiA9IF9fbmxfbGFuZ2luZm9fbChfX1BPU0lUSVZFX1NJR04sIF9fY2xvYyk7Ci0rCSAgY29uc3QgY2hhciogX19jbmVnc2lnbiA9IF9fbmxfbGFuZ2luZm9fbChfX05FR0FUSVZFX1NJR04sIF9fY2xvYyk7Ci0rCSAgY29uc3QgY2hhciogX19jY3VyciA9IF9fbmxfbGFuZ2luZm9fbChfX0NVUlJFTkNZX1NZTUJPTCwgX19jbG9jKTsKLSsKLSsJICB3Y2hhcl90KiBfX3djc19wcyA9IDA7Ci0rCSAgd2NoYXJfdCogX193Y3NfbnMgPSAwOwotKwkgIGNvbnN0IGNoYXIgX19ucG9zbiA9ICooX19ubF9sYW5naW5mb19sKF9fTl9TSUdOX1BPU04sIF9fY2xvYykpOwotKwkgIHRyeQotKyAgICAgICAgICAgIHsKLSsgICAgICAgICAgICAgIG1ic3RhdGVfdCBfX3N0YXRlOwotKyAgICAgICAgICAgICAgc2l6ZV90IF9fbGVuOwotKyAgICAgICAgICAgICAgX19sZW4gPSBzdHJsZW4oX19jcG9zc2lnbik7Ci0rICAgICAgICAgICAgICBpZiAoX19sZW4pCi0rICAgICAgICAgICAgICAgIHsKLSsJCSAgKytfX2xlbjsKLSsJCSAgbWVtc2V0KCZfX3N0YXRlLCAwLCBzaXplb2YobWJzdGF0ZV90KSk7Ci0rCQkgIF9fd2NzX3BzID0gbmV3IHdjaGFyX3RbX19sZW5dOwotKwkJICBtYnNydG93Y3MoX193Y3NfcHMsICZfX2Nwb3NzaWduLCBfX2xlbiwgJl9fc3RhdGUpOwotKwkJICBfTV9kYXRhLT5fTV9wb3NpdGl2ZV9zaWduID0gX193Y3NfcHM7Ci0rCQl9Ci0rCSAgICAgIGVsc2UKLSsJCV9NX2RhdGEtPl9NX3Bvc2l0aXZlX3NpZ24gPSBMIiI7Ci0rICAgICAgICAgICAgICBfTV9kYXRhLT5fTV9wb3NpdGl2ZV9zaWduX3NpemUgPSB3Y3NsZW4oX01fZGF0YS0+X01fcG9zaXRpdmVfc2lnbik7Ci0rCi0rCSAgICAgIF9fbGVuID0gc3RybGVuKF9fY25lZ3NpZ24pOwotKwkgICAgICBpZiAoIV9fbnBvc24pCi0rCQlfTV9kYXRhLT5fTV9uZWdhdGl2ZV9zaWduID0gTCIoKSI7Ci0rCSAgICAgIGVsc2UgaWYgKF9fbGVuKQotKwkJewotKwkJICArK19fbGVuOwotKwkJICBtZW1zZXQoJl9fc3RhdGUsIDAsIHNpemVvZihtYnN0YXRlX3QpKTsKLSsJCSAgX193Y3NfbnMgPSBuZXcgd2NoYXJfdFtfX2xlbl07Ci0rCQkgIG1ic3J0b3djcyhfX3djc19ucywgJl9fY25lZ3NpZ24sIF9fbGVuLCAmX19zdGF0ZSk7Ci0rCQkgIF9NX2RhdGEtPl9NX25lZ2F0aXZlX3NpZ24gPSBfX3djc19uczsKLSsJCX0KLSsJICAgICAgZWxzZQotKwkJX01fZGF0YS0+X01fbmVnYXRpdmVfc2lnbiA9IEwiIjsKLSsgICAgICAgICAgICAgIF9NX2RhdGEtPl9NX25lZ2F0aXZlX3NpZ25fc2l6ZSA9IHdjc2xlbihfTV9kYXRhLT5fTV9uZWdhdGl2ZV9zaWduKTsKLSsKLSsJICAgICAgLy8gX0ludGwgPT0gdHJ1ZS4KLSsJICAgICAgX19sZW4gPSBzdHJsZW4oX19jY3Vycik7Ci0rCSAgICAgIGlmIChfX2xlbikKLSsJCXsKLSsJCSAgKytfX2xlbjsKLSsJCSAgbWVtc2V0KCZfX3N0YXRlLCAwLCBzaXplb2YobWJzdGF0ZV90KSk7Ci0rCQkgIHdjaGFyX3QqIF9fd2NzID0gbmV3IHdjaGFyX3RbX19sZW5dOwotKwkJICBtYnNydG93Y3MoX193Y3MsICZfX2NjdXJyLCBfX2xlbiwgJl9fc3RhdGUpOwotKwkJICBfTV9kYXRhLT5fTV9jdXJyX3N5bWJvbCA9IF9fd2NzOwotKwkJfQotKwkgICAgICBlbHNlCi0rCQlfTV9kYXRhLT5fTV9jdXJyX3N5bWJvbCA9IEwiIjsKLSsgICAgICAgICAgICAgIF9NX2RhdGEtPl9NX2N1cnJfc3ltYm9sX3NpemUgPSB3Y3NsZW4oX01fZGF0YS0+X01fY3Vycl9zeW1ib2wpOwotKwkgICAgfQotKyAgICAgICAgICBjYXRjaCAoLi4uKQotKwkgICAgewotKwkgICAgICBkZWxldGUgX01fZGF0YTsKLSsgICAgICAgICAgICAgIF9NX2RhdGEgPSAwOwotKwkgICAgICBkZWxldGUgX193Y3NfcHM7Ci0rCSAgICAgIGRlbGV0ZSBfX3djc19uczsKLSsjaWZkZWYgX19VQ0xJQkNfSEFTX1hMT0NBTEVfXwotKwkgICAgICBfX3VzZWxvY2FsZShfX29sZCk7Ci0rI2Vsc2UKLSsJICAgICAgc2V0bG9jYWxlKExDX0FMTCwgX19vbGQpOwotKwkgICAgICBmcmVlKF9fb2xkKTsKLSsjZW5kaWYKLSsgICAgICAgICAgICAgIF9fdGhyb3dfZXhjZXB0aW9uX2FnYWluOwotKwkgICAgfQotKwotKwkgIF9NX2RhdGEtPl9NX2ZyYWNfZGlnaXRzID0gKihfX25sX2xhbmdpbmZvX2woX19GUkFDX0RJR0lUUywgX19jbG9jKSk7Ci0rCSAgY2hhciBfX3BwcmVjZWRlcyA9ICooX19ubF9sYW5naW5mb19sKF9fUF9DU19QUkVDRURFUywgX19jbG9jKSk7Ci0rCSAgY2hhciBfX3BzcGFjZSA9ICooX19ubF9sYW5naW5mb19sKF9fUF9TRVBfQllfU1BBQ0UsIF9fY2xvYykpOwotKwkgIGNoYXIgX19wcG9zbiA9ICooX19ubF9sYW5naW5mb19sKF9fUF9TSUdOX1BPU04sIF9fY2xvYykpOwotKwkgIF9NX2RhdGEtPl9NX3Bvc19mb3JtYXQgPSBfU19jb25zdHJ1Y3RfcGF0dGVybihfX3BwcmVjZWRlcywgX19wc3BhY2UsCi0rCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fcHBvc24pOwotKwkgIGNoYXIgX19ucHJlY2VkZXMgPSAqKF9fbmxfbGFuZ2luZm9fbChfX05fQ1NfUFJFQ0VERVMsIF9fY2xvYykpOwotKwkgIGNoYXIgX19uc3BhY2UgPSAqKF9fbmxfbGFuZ2luZm9fbChfX05fU0VQX0JZX1NQQUNFLCBfX2Nsb2MpKTsKLSsJICBfTV9kYXRhLT5fTV9uZWdfZm9ybWF0ID0gX1NfY29uc3RydWN0X3BhdHRlcm4oX19ucHJlY2VkZXMsIF9fbnNwYWNlLAotKwkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX25wb3NuKTsKLSsKLSsjaWZkZWYgX19VQ0xJQkNfSEFTX1hMT0NBTEVfXwotKwkgIF9fdXNlbG9jYWxlKF9fb2xkKTsKLSsjZWxzZQotKwkgIHNldGxvY2FsZShMQ19BTEwsIF9fb2xkKTsKLSsJICBmcmVlKF9fb2xkKTsKLSsjZW5kaWYKLSsJfQotKyAgICB9Ci0rCi0rICB0ZW1wbGF0ZTw+Ci0rICAgIG1vbmV5cHVuY3Q8d2NoYXJfdCwgdHJ1ZT46On5tb25leXB1bmN0KCkKLSsgICAgewotKyAgICAgIGlmIChfTV9kYXRhLT5fTV9wb3NpdGl2ZV9zaWduX3NpemUpCi0rCWRlbGV0ZSBbXSBfTV9kYXRhLT5fTV9wb3NpdGl2ZV9zaWduOwotKyAgICAgIGlmIChfTV9kYXRhLT5fTV9uZWdhdGl2ZV9zaWduX3NpemUKLSsgICAgICAgICAgJiYgd2NzY21wKF9NX2RhdGEtPl9NX25lZ2F0aXZlX3NpZ24sIEwiKCkiKSAhPSAwKQotKwlkZWxldGUgW10gX01fZGF0YS0+X01fbmVnYXRpdmVfc2lnbjsKLSsgICAgICBpZiAoX01fZGF0YS0+X01fY3Vycl9zeW1ib2xfc2l6ZSkKLSsJZGVsZXRlIFtdIF9NX2RhdGEtPl9NX2N1cnJfc3ltYm9sOwotKyAgICAgIGRlbGV0ZSBfTV9kYXRhOwotKyAgICB9Ci0rCi0rICB0ZW1wbGF0ZTw+Ci0rICAgIG1vbmV5cHVuY3Q8d2NoYXJfdCwgZmFsc2U+Ojp+bW9uZXlwdW5jdCgpCi0rICAgIHsKLSsgICAgICBpZiAoX01fZGF0YS0+X01fcG9zaXRpdmVfc2lnbl9zaXplKQotKwlkZWxldGUgW10gX01fZGF0YS0+X01fcG9zaXRpdmVfc2lnbjsKLSsgICAgICBpZiAoX01fZGF0YS0+X01fbmVnYXRpdmVfc2lnbl9zaXplCi0rICAgICAgICAgICYmIHdjc2NtcChfTV9kYXRhLT5fTV9uZWdhdGl2ZV9zaWduLCBMIigpIikgIT0gMCkKLSsJZGVsZXRlIFtdIF9NX2RhdGEtPl9NX25lZ2F0aXZlX3NpZ247Ci0rICAgICAgaWYgKF9NX2RhdGEtPl9NX2N1cnJfc3ltYm9sX3NpemUpCi0rCWRlbGV0ZSBbXSBfTV9kYXRhLT5fTV9jdXJyX3N5bWJvbDsKLSsgICAgICBkZWxldGUgX01fZGF0YTsKLSsgICAgfQotKyNlbmRpZgotK30KLWRpZmYgLS1naXQgYS9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvbnVtZXJpY19tZW1iZXJzLmNjIGIvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL251bWVyaWNfbWVtYmVycy5jYwotbmV3IGZpbGUgbW9kZSAxMDA2NDQKLWluZGV4IDAwMDAwMDAuLjg4M2VjMWEKLS0tLSAvZGV2L251bGwKLSsrKyBiL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9udW1lcmljX21lbWJlcnMuY2MKLUBAIC0wLDAgKzEsMTYwIEBACi0rLy8gc3RkOjpudW1wdW5jdCBpbXBsZW1lbnRhdGlvbiBkZXRhaWxzLCBHTlUgdmVyc2lvbiAtKi0gQysrIC0qLQotKwotKy8vIENvcHlyaWdodCAoQykgMjAwMSwgMjAwMiwgMjAwMywgMjAwNCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KLSsvLwotKy8vIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgSVNPIEMrKyBMaWJyYXJ5LiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUKLSsvLyBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlciB0aGUKLSsvLyB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQotKy8vIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKQotKy8vIGFueSBsYXRlciB2ZXJzaW9uLgotKwotKy8vIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotKy8vIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0rLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQotKy8vIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0rCi0rLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcKLSsvLyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuICBJZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlCi0rLy8gU29mdHdhcmUgRm91bmRhdGlvbiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsCi0rLy8gVVNBLgotKwotKy8vIEFzIGEgc3BlY2lhbCBleGNlcHRpb24sIHlvdSBtYXkgdXNlIHRoaXMgZmlsZSBhcyBwYXJ0IG9mIGEgZnJlZSBzb2Z0d2FyZQotKy8vIGxpYnJhcnkgd2l0aG91dCByZXN0cmljdGlvbi4gIFNwZWNpZmljYWxseSwgaWYgb3RoZXIgZmlsZXMgaW5zdGFudGlhdGUKLSsvLyB0ZW1wbGF0ZXMgb3IgdXNlIG1hY3JvcyBvciBpbmxpbmUgZnVuY3Rpb25zIGZyb20gdGhpcyBmaWxlLCBvciB5b3UgY29tcGlsZQotKy8vIHRoaXMgZmlsZSBhbmQgbGluayBpdCB3aXRoIG90aGVyIGZpbGVzIHRvIHByb2R1Y2UgYW4gZXhlY3V0YWJsZSwgdGhpcwotKy8vIGZpbGUgZG9lcyBub3QgYnkgaXRzZWxmIGNhdXNlIHRoZSByZXN1bHRpbmcgZXhlY3V0YWJsZSB0byBiZSBjb3ZlcmVkIGJ5Ci0rLy8gdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLiAgVGhpcyBleGNlcHRpb24gZG9lcyBub3QgaG93ZXZlcgotKy8vIGludmFsaWRhdGUgYW55IG90aGVyIHJlYXNvbnMgd2h5IHRoZSBleGVjdXRhYmxlIGZpbGUgbWlnaHQgYmUgY292ZXJlZCBieQotKy8vIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4KLSsKLSsvLwotKy8vIElTTyBDKysgMTQ4ODI6IDIyLjIuMy4xLjIgIG51bXB1bmN0IHZpcnR1YWwgZnVuY3Rpb25zCi0rLy8KLSsKLSsvLyBXcml0dGVuIGJ5IEJlbmphbWluIEtvc25payA8YmtvekByZWRoYXQuY29tPgotKwotKyNkZWZpbmUgX0xJQkMKLSsjaW5jbHVkZSA8bG9jYWxlPgotKyN1bmRlZiBfTElCQwotKyNpbmNsdWRlIDxiaXRzL2MrK2xvY2FsZV9pbnRlcm5hbC5oPgotKwotKyNpZmRlZiBfX1VDTElCQ19NSk4zX09OTFlfXwotKyN3YXJuaW5nIHRhaWxvciBmb3Igc3R1YiBsb2NhbGUgc3VwcG9ydAotKyNlbmRpZgotKyNpZm5kZWYgX19VQ0xJQkNfSEFTX1hMT0NBTEVfXwotKyNkZWZpbmUgX19ubF9sYW5naW5mb19sKE4sIEwpICAgICAgICAgbmxfbGFuZ2luZm8oKE4pKQotKyNlbmRpZgotKwotK25hbWVzcGFjZSBzdGQKLSt7Ci0rICB0ZW1wbGF0ZTw+Ci0rICAgIHZvaWQKLSsgICAgbnVtcHVuY3Q8Y2hhcj46Ol9NX2luaXRpYWxpemVfbnVtcHVuY3QoX19jX2xvY2FsZSBfX2Nsb2MpCi0rICAgIHsKLSsgICAgICBpZiAoIV9NX2RhdGEpCi0rCV9NX2RhdGEgPSBuZXcgX19udW1wdW5jdF9jYWNoZTxjaGFyPjsKLSsKLSsgICAgICBpZiAoIV9fY2xvYykKLSsJewotKwkgIC8vICJDIiBsb2NhbGUKLSsJICBfTV9kYXRhLT5fTV9ncm91cGluZyA9ICIiOwotKwkgIF9NX2RhdGEtPl9NX2dyb3VwaW5nX3NpemUgPSAwOwotKwkgIF9NX2RhdGEtPl9NX3VzZV9ncm91cGluZyA9IGZhbHNlOwotKwotKwkgIF9NX2RhdGEtPl9NX2RlY2ltYWxfcG9pbnQgPSAnLic7Ci0rCSAgX01fZGF0YS0+X01fdGhvdXNhbmRzX3NlcCA9ICcsJzsKLSsKLSsJICBmb3IgKHNpemVfdCBfX2kgPSAwOyBfX2kgPCBfX251bV9iYXNlOjpfU19vZW5kOyArK19faSkKLSsJICAgIF9NX2RhdGEtPl9NX2F0b21zX291dFtfX2ldID0gX19udW1fYmFzZTo6X1NfYXRvbXNfb3V0W19faV07Ci0rCi0rCSAgZm9yIChzaXplX3QgX19qID0gMDsgX19qIDwgX19udW1fYmFzZTo6X1NfaWVuZDsgKytfX2opCi0rCSAgICBfTV9kYXRhLT5fTV9hdG9tc19pbltfX2pdID0gX19udW1fYmFzZTo6X1NfYXRvbXNfaW5bX19qXTsKLSsJfQotKyAgICAgIGVsc2UKLSsJewotKwkgIC8vIE5hbWVkIGxvY2FsZS4KLSsJICBfTV9kYXRhLT5fTV9kZWNpbWFsX3BvaW50ID0gKihfX25sX2xhbmdpbmZvX2woREVDSU1BTF9QT0lOVCwKLSsJCQkJCQkJX19jbG9jKSk7Ci0rCSAgX01fZGF0YS0+X01fdGhvdXNhbmRzX3NlcCA9ICooX19ubF9sYW5naW5mb19sKFRIT1VTQU5EU19TRVAsCi0rCQkJCQkJCV9fY2xvYykpOwotKwotKwkgIC8vIENoZWNrIGZvciBOVUxMLCB3aGljaCBpbXBsaWVzIG5vIGdyb3VwaW5nLgotKwkgIGlmIChfTV9kYXRhLT5fTV90aG91c2FuZHNfc2VwID09ICdcMCcpCi0rCSAgICBfTV9kYXRhLT5fTV9ncm91cGluZyA9ICIiOwotKwkgIGVsc2UKLSsJICAgIF9NX2RhdGEtPl9NX2dyb3VwaW5nID0gX19ubF9sYW5naW5mb19sKEdST1VQSU5HLCBfX2Nsb2MpOwotKwkgIF9NX2RhdGEtPl9NX2dyb3VwaW5nX3NpemUgPSBzdHJsZW4oX01fZGF0YS0+X01fZ3JvdXBpbmcpOwotKwl9Ci0rCi0rICAgICAgLy8gTkI6IFRoZXJlIGlzIG5vIHdheSB0byBleHRhY3QgdGhpcyBpbmZvIGZyb20gcG9zaXggbG9jYWxlcy4KLSsgICAgICAvLyBfTV90cnVlbmFtZSA9IF9fbmxfbGFuZ2luZm9fbChZRVNTVFIsIF9fY2xvYyk7Ci0rICAgICAgX01fZGF0YS0+X01fdHJ1ZW5hbWUgPSAidHJ1ZSI7Ci0rICAgICAgX01fZGF0YS0+X01fdHJ1ZW5hbWVfc2l6ZSA9IDQ7Ci0rICAgICAgLy8gX01fZmFsc2VuYW1lID0gX19ubF9sYW5naW5mb19sKE5PU1RSLCBfX2Nsb2MpOwotKyAgICAgIF9NX2RhdGEtPl9NX2ZhbHNlbmFtZSA9ICJmYWxzZSI7Ci0rICAgICAgX01fZGF0YS0+X01fZmFsc2VuYW1lX3NpemUgPSA1OwotKyAgICB9Ci0rCi0rICB0ZW1wbGF0ZTw+Ci0rICAgIG51bXB1bmN0PGNoYXI+Ojp+bnVtcHVuY3QoKQotKyAgICB7IGRlbGV0ZSBfTV9kYXRhOyB9Ci0rCi0rI2lmZGVmIF9HTElCQ1hYX1VTRV9XQ0hBUl9UCi0rICB0ZW1wbGF0ZTw+Ci0rICAgIHZvaWQKLSsgICAgbnVtcHVuY3Q8d2NoYXJfdD46Ol9NX2luaXRpYWxpemVfbnVtcHVuY3QoX19jX2xvY2FsZSBfX2Nsb2MpCi0rICAgIHsKLSsgICAgICBpZiAoIV9NX2RhdGEpCi0rCV9NX2RhdGEgPSBuZXcgX19udW1wdW5jdF9jYWNoZTx3Y2hhcl90PjsKLSsKLSsgICAgICBpZiAoIV9fY2xvYykKLSsJewotKwkgIC8vICJDIiBsb2NhbGUKLSsJICBfTV9kYXRhLT5fTV9ncm91cGluZyA9ICIiOwotKwkgIF9NX2RhdGEtPl9NX2dyb3VwaW5nX3NpemUgPSAwOwotKwkgIF9NX2RhdGEtPl9NX3VzZV9ncm91cGluZyA9IGZhbHNlOwotKwotKwkgIF9NX2RhdGEtPl9NX2RlY2ltYWxfcG9pbnQgPSBMJy4nOwotKwkgIF9NX2RhdGEtPl9NX3Rob3VzYW5kc19zZXAgPSBMJywnOwotKwotKwkgIC8vIFVzZSBjdHlwZTo6d2lkZW4gY29kZSB3aXRob3V0IHRoZSBmYWNldC4uLgotKwkgIGZvciAoc2l6ZV90IF9faSA9IDA7IF9faSA8IF9fbnVtX2Jhc2U6Ol9TX29lbmQ7ICsrX19pKQotKwkgICAgX01fZGF0YS0+X01fYXRvbXNfb3V0W19faV0gPQotKwkgICAgICBzdGF0aWNfY2FzdDx3Y2hhcl90PihfX251bV9iYXNlOjpfU19hdG9tc19vdXRbX19pXSk7Ci0rCi0rCSAgZm9yIChzaXplX3QgX19qID0gMDsgX19qIDwgX19udW1fYmFzZTo6X1NfaWVuZDsgKytfX2opCi0rCSAgICBfTV9kYXRhLT5fTV9hdG9tc19pbltfX2pdID0KLSsJICAgICAgc3RhdGljX2Nhc3Q8d2NoYXJfdD4oX19udW1fYmFzZTo6X1NfYXRvbXNfaW5bX19qXSk7Ci0rCX0KLSsgICAgICBlbHNlCi0rCXsKLSsJICAvLyBOYW1lZCBsb2NhbGUuCi0rCSAgLy8gTkI6IEluIHRoZSBHTlUgbW9kZWwgd2NoYXJfdCBpcyBhbHdheXMgMzIgYml0IHdpZGUuCi0rCSAgdW5pb24geyBjaGFyICpfX3M7IHdjaGFyX3QgX193OyB9IF9fdTsKLSsJICBfX3UuX19zID0gX19ubF9sYW5naW5mb19sKF9OTF9OVU1FUklDX0RFQ0lNQUxfUE9JTlRfV0MsIF9fY2xvYyk7Ci0rCSAgX01fZGF0YS0+X01fZGVjaW1hbF9wb2ludCA9IF9fdS5fX3c7Ci0rCi0rCSAgX191Ll9fcyA9IF9fbmxfbGFuZ2luZm9fbChfTkxfTlVNRVJJQ19USE9VU0FORFNfU0VQX1dDLCBfX2Nsb2MpOwotKwkgIF9NX2RhdGEtPl9NX3Rob3VzYW5kc19zZXAgPSBfX3UuX193OwotKwotKwkgIGlmIChfTV9kYXRhLT5fTV90aG91c2FuZHNfc2VwID09IEwnXDAnKQotKwkgICAgX01fZGF0YS0+X01fZ3JvdXBpbmcgPSAiIjsKLSsJICBlbHNlCi0rCSAgICBfTV9kYXRhLT5fTV9ncm91cGluZyA9IF9fbmxfbGFuZ2luZm9fbChHUk9VUElORywgX19jbG9jKTsKLSsJICBfTV9kYXRhLT5fTV9ncm91cGluZ19zaXplID0gc3RybGVuKF9NX2RhdGEtPl9NX2dyb3VwaW5nKTsKLSsJfQotKwotKyAgICAgIC8vIE5COiBUaGVyZSBpcyBubyB3YXkgdG8gZXh0YWN0IHRoaXMgaW5mbyBmcm9tIHBvc2l4IGxvY2FsZXMuCi0rICAgICAgLy8gX01fdHJ1ZW5hbWUgPSBfX25sX2xhbmdpbmZvX2woWUVTU1RSLCBfX2Nsb2MpOwotKyAgICAgIF9NX2RhdGEtPl9NX3RydWVuYW1lID0gTCJ0cnVlIjsKLSsgICAgICBfTV9kYXRhLT5fTV90cnVlbmFtZV9zaXplID0gNDsKLSsgICAgICAvLyBfTV9mYWxzZW5hbWUgPSBfX25sX2xhbmdpbmZvX2woTk9TVFIsIF9fY2xvYyk7Ci0rICAgICAgX01fZGF0YS0+X01fZmFsc2VuYW1lID0gTCJmYWxzZSI7Ci0rICAgICAgX01fZGF0YS0+X01fZmFsc2VuYW1lX3NpemUgPSA1OwotKyAgICB9Ci0rCi0rICB0ZW1wbGF0ZTw+Ci0rICAgIG51bXB1bmN0PHdjaGFyX3Q+Ojp+bnVtcHVuY3QoKQotKyAgICB7IGRlbGV0ZSBfTV9kYXRhOyB9Ci0rICNlbmRpZgotK30KLWRpZmYgLS1naXQgYS9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvdGltZV9tZW1iZXJzLmNjIGIvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL3RpbWVfbWVtYmVycy5jYwotbmV3IGZpbGUgbW9kZSAxMDA2NDQKLWluZGV4IDAwMDAwMDAuLmUwNzA3ZDcKLS0tLSAvZGV2L251bGwKLSsrKyBiL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy90aW1lX21lbWJlcnMuY2MKLUBAIC0wLDAgKzEsNDA2IEBACi0rLy8gc3RkOjp0aW1lX2dldCwgc3RkOjp0aW1lX3B1dCBpbXBsZW1lbnRhdGlvbiwgR05VIHZlcnNpb24gLSotIEMrKyAtKi0KLSsKLSsvLyBDb3B5cmlnaHQgKEMpIDIwMDEsIDIwMDIsIDIwMDMsIDIwMDQgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCi0rLy8KLSsvLyBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIElTTyBDKysgTGlicmFyeS4gIFRoaXMgbGlicmFyeSBpcyBmcmVlCi0rLy8gc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIgdGhlCi0rLy8gdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKLSsvLyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikKLSsvLyBhbnkgbGF0ZXIgdmVyc2lvbi4KLSsKLSsvLyBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSsvLyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotKy8vIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKLSsvLyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotKwotKy8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCi0rLy8gd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLiAgSWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZQotKy8vIFNvZnR3YXJlIEZvdW5kYXRpb24sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LAotKy8vIFVTQS4KLSsKLSsvLyBBcyBhIHNwZWNpYWwgZXhjZXB0aW9uLCB5b3UgbWF5IHVzZSB0aGlzIGZpbGUgYXMgcGFydCBvZiBhIGZyZWUgc29mdHdhcmUKLSsvLyBsaWJyYXJ5IHdpdGhvdXQgcmVzdHJpY3Rpb24uICBTcGVjaWZpY2FsbHksIGlmIG90aGVyIGZpbGVzIGluc3RhbnRpYXRlCi0rLy8gdGVtcGxhdGVzIG9yIHVzZSBtYWNyb3Mgb3IgaW5saW5lIGZ1bmN0aW9ucyBmcm9tIHRoaXMgZmlsZSwgb3IgeW91IGNvbXBpbGUKLSsvLyB0aGlzIGZpbGUgYW5kIGxpbmsgaXQgd2l0aCBvdGhlciBmaWxlcyB0byBwcm9kdWNlIGFuIGV4ZWN1dGFibGUsIHRoaXMKLSsvLyBmaWxlIGRvZXMgbm90IGJ5IGl0c2VsZiBjYXVzZSB0aGUgcmVzdWx0aW5nIGV4ZWN1dGFibGUgdG8gYmUgY292ZXJlZCBieQotKy8vIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4gIFRoaXMgZXhjZXB0aW9uIGRvZXMgbm90IGhvd2V2ZXIKLSsvLyBpbnZhbGlkYXRlIGFueSBvdGhlciByZWFzb25zIHdoeSB0aGUgZXhlY3V0YWJsZSBmaWxlIG1pZ2h0IGJlIGNvdmVyZWQgYnkKLSsvLyB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UuCi0rCi0rLy8KLSsvLyBJU08gQysrIDE0ODgyOiAyMi4yLjUuMS4yIC0gdGltZV9nZXQgdmlydHVhbCBmdW5jdGlvbnMKLSsvLyBJU08gQysrIDE0ODgyOiAyMi4yLjUuMy4yIC0gdGltZV9wdXQgdmlydHVhbCBmdW5jdGlvbnMKLSsvLwotKwotKy8vIFdyaXR0ZW4gYnkgQmVuamFtaW4gS29zbmlrIDxia296QHJlZGhhdC5jb20+Ci0rCi0rI2luY2x1ZGUgPGxvY2FsZT4KLSsjaW5jbHVkZSA8Yml0cy9jKytsb2NhbGVfaW50ZXJuYWwuaD4KLSsKLSsjaWZkZWYgX19VQ0xJQkNfTUpOM19PTkxZX18KLSsjd2FybmluZyB0YWlsb3IgZm9yIHN0dWIgbG9jYWxlIHN1cHBvcnQKLSsjZW5kaWYKLSsjaWZuZGVmIF9fVUNMSUJDX0hBU19YTE9DQUxFX18KLSsjZGVmaW5lIF9fbmxfbGFuZ2luZm9fbChOLCBMKSAgICAgICAgIG5sX2xhbmdpbmZvKChOKSkKLSsjZW5kaWYKLSsKLStuYW1lc3BhY2Ugc3RkCi0rewotKyAgdGVtcGxhdGU8PgotKyAgICB2b2lkCi0rICAgIF9fdGltZXB1bmN0PGNoYXI+OjoKLSsgICAgX01fcHV0KGNoYXIqIF9fcywgc2l6ZV90IF9fbWF4bGVuLCBjb25zdCBjaGFyKiBfX2Zvcm1hdCwKLSsJICAgY29uc3QgdG0qIF9fdG0pIGNvbnN0Ci0rICAgIHsKLSsjaWZkZWYgX19VQ0xJQkNfSEFTX1hMT0NBTEVfXwotKyAgICAgIGNvbnN0IHNpemVfdCBfX2xlbiA9IF9fc3RyZnRpbWVfbChfX3MsIF9fbWF4bGVuLCBfX2Zvcm1hdCwgX190bSwKLSsJCQkJCV9NX2NfbG9jYWxlX3RpbWVwdW5jdCk7Ci0rI2Vsc2UKLSsgICAgICBjaGFyKiBfX29sZCA9IHN0cmR1cChzZXRsb2NhbGUoTENfQUxMLCBOVUxMKSk7Ci0rICAgICAgc2V0bG9jYWxlKExDX0FMTCwgX01fbmFtZV90aW1lcHVuY3QpOwotKyAgICAgIGNvbnN0IHNpemVfdCBfX2xlbiA9IHN0cmZ0aW1lKF9fcywgX19tYXhsZW4sIF9fZm9ybWF0LCBfX3RtKTsKLSsgICAgICBzZXRsb2NhbGUoTENfQUxMLCBfX29sZCk7Ci0rICAgICAgZnJlZShfX29sZCk7Ci0rI2VuZGlmCi0rICAgICAgLy8gTWFrZSBzdXJlIF9fcyBpcyBudWxsIHRlcm1pbmF0ZWQuCi0rICAgICAgaWYgKF9fbGVuID09IDApCi0rCV9fc1swXSA9ICdcMCc7Ci0rICAgIH0KLSsKLSsgIHRlbXBsYXRlPD4KLSsgICAgdm9pZAotKyAgICBfX3RpbWVwdW5jdDxjaGFyPjo6X01faW5pdGlhbGl6ZV90aW1lcHVuY3QoX19jX2xvY2FsZSBfX2Nsb2MpCi0rICAgIHsKLSsgICAgICBpZiAoIV9NX2RhdGEpCi0rCV9NX2RhdGEgPSBuZXcgX190aW1lcHVuY3RfY2FjaGU8Y2hhcj47Ci0rCi0rICAgICAgaWYgKCFfX2Nsb2MpCi0rCXsKLSsJICAvLyAiQyIgbG9jYWxlCi0rCSAgX01fY19sb2NhbGVfdGltZXB1bmN0ID0gX1NfZ2V0X2NfbG9jYWxlKCk7Ci0rCi0rCSAgX01fZGF0YS0+X01fZGF0ZV9mb3JtYXQgPSAiJW0vJWQvJXkiOwotKwkgIF9NX2RhdGEtPl9NX2RhdGVfZXJhX2Zvcm1hdCA9ICIlbS8lZC8leSI7Ci0rCSAgX01fZGF0YS0+X01fdGltZV9mb3JtYXQgPSAiJUg6JU06JVMiOwotKwkgIF9NX2RhdGEtPl9NX3RpbWVfZXJhX2Zvcm1hdCA9ICIlSDolTTolUyI7Ci0rCSAgX01fZGF0YS0+X01fZGF0ZV90aW1lX2Zvcm1hdCA9ICIiOwotKwkgIF9NX2RhdGEtPl9NX2RhdGVfdGltZV9lcmFfZm9ybWF0ID0gIiI7Ci0rCSAgX01fZGF0YS0+X01fYW0gPSAiQU0iOwotKwkgIF9NX2RhdGEtPl9NX3BtID0gIlBNIjsKLSsJICBfTV9kYXRhLT5fTV9hbV9wbV9mb3JtYXQgPSAiIjsKLSsKLSsJICAvLyBEYXkgbmFtZXMsIHN0YXJ0aW5nIHdpdGggIkMiJ3MgU3VuZGF5LgotKwkgIF9NX2RhdGEtPl9NX2RheTEgPSAiU3VuZGF5IjsKLSsJICBfTV9kYXRhLT5fTV9kYXkyID0gIk1vbmRheSI7Ci0rCSAgX01fZGF0YS0+X01fZGF5MyA9ICJUdWVzZGF5IjsKLSsJICBfTV9kYXRhLT5fTV9kYXk0ID0gIldlZG5lc2RheSI7Ci0rCSAgX01fZGF0YS0+X01fZGF5NSA9ICJUaHVyc2RheSI7Ci0rCSAgX01fZGF0YS0+X01fZGF5NiA9ICJGcmlkYXkiOwotKwkgIF9NX2RhdGEtPl9NX2RheTcgPSAiU2F0dXJkYXkiOwotKwotKwkgIC8vIEFiYnJldmlhdGVkIGRheSBuYW1lcywgc3RhcnRpbmcgd2l0aCAiQyIncyBTdW4uCi0rCSAgX01fZGF0YS0+X01fYWRheTEgPSAiU3VuIjsKLSsJICBfTV9kYXRhLT5fTV9hZGF5MiA9ICJNb24iOwotKwkgIF9NX2RhdGEtPl9NX2FkYXkzID0gIlR1ZSI7Ci0rCSAgX01fZGF0YS0+X01fYWRheTQgPSAiV2VkIjsKLSsJICBfTV9kYXRhLT5fTV9hZGF5NSA9ICJUaHUiOwotKwkgIF9NX2RhdGEtPl9NX2FkYXk2ID0gIkZyaSI7Ci0rCSAgX01fZGF0YS0+X01fYWRheTcgPSAiU2F0IjsKLSsKLSsJICAvLyBNb250aCBuYW1lcywgc3RhcnRpbmcgd2l0aCAiQyIncyBKYW51YXJ5LgotKwkgIF9NX2RhdGEtPl9NX21vbnRoMDEgPSAiSmFudWFyeSI7Ci0rCSAgX01fZGF0YS0+X01fbW9udGgwMiA9ICJGZWJydWFyeSI7Ci0rCSAgX01fZGF0YS0+X01fbW9udGgwMyA9ICJNYXJjaCI7Ci0rCSAgX01fZGF0YS0+X01fbW9udGgwNCA9ICJBcHJpbCI7Ci0rCSAgX01fZGF0YS0+X01fbW9udGgwNSA9ICJNYXkiOwotKwkgIF9NX2RhdGEtPl9NX21vbnRoMDYgPSAiSnVuZSI7Ci0rCSAgX01fZGF0YS0+X01fbW9udGgwNyA9ICJKdWx5IjsKLSsJICBfTV9kYXRhLT5fTV9tb250aDA4ID0gIkF1Z3VzdCI7Ci0rCSAgX01fZGF0YS0+X01fbW9udGgwOSA9ICJTZXB0ZW1iZXIiOwotKwkgIF9NX2RhdGEtPl9NX21vbnRoMTAgPSAiT2N0b2JlciI7Ci0rCSAgX01fZGF0YS0+X01fbW9udGgxMSA9ICJOb3ZlbWJlciI7Ci0rCSAgX01fZGF0YS0+X01fbW9udGgxMiA9ICJEZWNlbWJlciI7Ci0rCi0rCSAgLy8gQWJicmV2aWF0ZWQgbW9udGggbmFtZXMsIHN0YXJ0aW5nIHdpdGggIkMiJ3MgSmFuLgotKwkgIF9NX2RhdGEtPl9NX2Ftb250aDAxID0gIkphbiI7Ci0rCSAgX01fZGF0YS0+X01fYW1vbnRoMDIgPSAiRmViIjsKLSsJICBfTV9kYXRhLT5fTV9hbW9udGgwMyA9ICJNYXIiOwotKwkgIF9NX2RhdGEtPl9NX2Ftb250aDA0ID0gIkFwciI7Ci0rCSAgX01fZGF0YS0+X01fYW1vbnRoMDUgPSAiTWF5IjsKLSsJICBfTV9kYXRhLT5fTV9hbW9udGgwNiA9ICJKdW4iOwotKwkgIF9NX2RhdGEtPl9NX2Ftb250aDA3ID0gIkp1bCI7Ci0rCSAgX01fZGF0YS0+X01fYW1vbnRoMDggPSAiQXVnIjsKLSsJICBfTV9kYXRhLT5fTV9hbW9udGgwOSA9ICJTZXAiOwotKwkgIF9NX2RhdGEtPl9NX2Ftb250aDEwID0gIk9jdCI7Ci0rCSAgX01fZGF0YS0+X01fYW1vbnRoMTEgPSAiTm92IjsKLSsJICBfTV9kYXRhLT5fTV9hbW9udGgxMiA9ICJEZWMiOwotKwl9Ci0rICAgICAgZWxzZQotKwl7Ci0rCSAgX01fY19sb2NhbGVfdGltZXB1bmN0ID0gX1NfY2xvbmVfY19sb2NhbGUoX19jbG9jKTsKLSsKLSsJICBfTV9kYXRhLT5fTV9kYXRlX2Zvcm1hdCA9IF9fbmxfbGFuZ2luZm9fbChEX0ZNVCwgX19jbG9jKTsKLSsJICBfTV9kYXRhLT5fTV9kYXRlX2VyYV9mb3JtYXQgPSBfX25sX2xhbmdpbmZvX2woRVJBX0RfRk1ULCBfX2Nsb2MpOwotKwkgIF9NX2RhdGEtPl9NX3RpbWVfZm9ybWF0ID0gX19ubF9sYW5naW5mb19sKFRfRk1ULCBfX2Nsb2MpOwotKwkgIF9NX2RhdGEtPl9NX3RpbWVfZXJhX2Zvcm1hdCA9IF9fbmxfbGFuZ2luZm9fbChFUkFfVF9GTVQsIF9fY2xvYyk7Ci0rCSAgX01fZGF0YS0+X01fZGF0ZV90aW1lX2Zvcm1hdCA9IF9fbmxfbGFuZ2luZm9fbChEX1RfRk1ULCBfX2Nsb2MpOwotKwkgIF9NX2RhdGEtPl9NX2RhdGVfdGltZV9lcmFfZm9ybWF0ID0gX19ubF9sYW5naW5mb19sKEVSQV9EX1RfRk1ULAotKwkJCQkJCQkgICAgIF9fY2xvYyk7Ci0rCSAgX01fZGF0YS0+X01fYW0gPSBfX25sX2xhbmdpbmZvX2woQU1fU1RSLCBfX2Nsb2MpOwotKwkgIF9NX2RhdGEtPl9NX3BtID0gX19ubF9sYW5naW5mb19sKFBNX1NUUiwgX19jbG9jKTsKLSsJICBfTV9kYXRhLT5fTV9hbV9wbV9mb3JtYXQgPSBfX25sX2xhbmdpbmZvX2woVF9GTVRfQU1QTSwgX19jbG9jKTsKLSsKLSsJICAvLyBEYXkgbmFtZXMsIHN0YXJ0aW5nIHdpdGggIkMiJ3MgU3VuZGF5LgotKwkgIF9NX2RhdGEtPl9NX2RheTEgPSBfX25sX2xhbmdpbmZvX2woREFZXzEsIF9fY2xvYyk7Ci0rCSAgX01fZGF0YS0+X01fZGF5MiA9IF9fbmxfbGFuZ2luZm9fbChEQVlfMiwgX19jbG9jKTsKLSsJICBfTV9kYXRhLT5fTV9kYXkzID0gX19ubF9sYW5naW5mb19sKERBWV8zLCBfX2Nsb2MpOwotKwkgIF9NX2RhdGEtPl9NX2RheTQgPSBfX25sX2xhbmdpbmZvX2woREFZXzQsIF9fY2xvYyk7Ci0rCSAgX01fZGF0YS0+X01fZGF5NSA9IF9fbmxfbGFuZ2luZm9fbChEQVlfNSwgX19jbG9jKTsKLSsJICBfTV9kYXRhLT5fTV9kYXk2ID0gX19ubF9sYW5naW5mb19sKERBWV82LCBfX2Nsb2MpOwotKwkgIF9NX2RhdGEtPl9NX2RheTcgPSBfX25sX2xhbmdpbmZvX2woREFZXzcsIF9fY2xvYyk7Ci0rCi0rCSAgLy8gQWJicmV2aWF0ZWQgZGF5IG5hbWVzLCBzdGFydGluZyB3aXRoICJDIidzIFN1bi4KLSsJICBfTV9kYXRhLT5fTV9hZGF5MSA9IF9fbmxfbGFuZ2luZm9fbChBQkRBWV8xLCBfX2Nsb2MpOwotKwkgIF9NX2RhdGEtPl9NX2FkYXkyID0gX19ubF9sYW5naW5mb19sKEFCREFZXzIsIF9fY2xvYyk7Ci0rCSAgX01fZGF0YS0+X01fYWRheTMgPSBfX25sX2xhbmdpbmZvX2woQUJEQVlfMywgX19jbG9jKTsKLSsJICBfTV9kYXRhLT5fTV9hZGF5NCA9IF9fbmxfbGFuZ2luZm9fbChBQkRBWV80LCBfX2Nsb2MpOwotKwkgIF9NX2RhdGEtPl9NX2FkYXk1ID0gX19ubF9sYW5naW5mb19sKEFCREFZXzUsIF9fY2xvYyk7Ci0rCSAgX01fZGF0YS0+X01fYWRheTYgPSBfX25sX2xhbmdpbmZvX2woQUJEQVlfNiwgX19jbG9jKTsKLSsJICBfTV9kYXRhLT5fTV9hZGF5NyA9IF9fbmxfbGFuZ2luZm9fbChBQkRBWV83LCBfX2Nsb2MpOwotKwotKwkgIC8vIE1vbnRoIG5hbWVzLCBzdGFydGluZyB3aXRoICJDIidzIEphbnVhcnkuCi0rCSAgX01fZGF0YS0+X01fbW9udGgwMSA9IF9fbmxfbGFuZ2luZm9fbChNT05fMSwgX19jbG9jKTsKLSsJICBfTV9kYXRhLT5fTV9tb250aDAyID0gX19ubF9sYW5naW5mb19sKE1PTl8yLCBfX2Nsb2MpOwotKwkgIF9NX2RhdGEtPl9NX21vbnRoMDMgPSBfX25sX2xhbmdpbmZvX2woTU9OXzMsIF9fY2xvYyk7Ci0rCSAgX01fZGF0YS0+X01fbW9udGgwNCA9IF9fbmxfbGFuZ2luZm9fbChNT05fNCwgX19jbG9jKTsKLSsJICBfTV9kYXRhLT5fTV9tb250aDA1ID0gX19ubF9sYW5naW5mb19sKE1PTl81LCBfX2Nsb2MpOwotKwkgIF9NX2RhdGEtPl9NX21vbnRoMDYgPSBfX25sX2xhbmdpbmZvX2woTU9OXzYsIF9fY2xvYyk7Ci0rCSAgX01fZGF0YS0+X01fbW9udGgwNyA9IF9fbmxfbGFuZ2luZm9fbChNT05fNywgX19jbG9jKTsKLSsJICBfTV9kYXRhLT5fTV9tb250aDA4ID0gX19ubF9sYW5naW5mb19sKE1PTl84LCBfX2Nsb2MpOwotKwkgIF9NX2RhdGEtPl9NX21vbnRoMDkgPSBfX25sX2xhbmdpbmZvX2woTU9OXzksIF9fY2xvYyk7Ci0rCSAgX01fZGF0YS0+X01fbW9udGgxMCA9IF9fbmxfbGFuZ2luZm9fbChNT05fMTAsIF9fY2xvYyk7Ci0rCSAgX01fZGF0YS0+X01fbW9udGgxMSA9IF9fbmxfbGFuZ2luZm9fbChNT05fMTEsIF9fY2xvYyk7Ci0rCSAgX01fZGF0YS0+X01fbW9udGgxMiA9IF9fbmxfbGFuZ2luZm9fbChNT05fMTIsIF9fY2xvYyk7Ci0rCi0rCSAgLy8gQWJicmV2aWF0ZWQgbW9udGggbmFtZXMsIHN0YXJ0aW5nIHdpdGggIkMiJ3MgSmFuLgotKwkgIF9NX2RhdGEtPl9NX2Ftb250aDAxID0gX19ubF9sYW5naW5mb19sKEFCTU9OXzEsIF9fY2xvYyk7Ci0rCSAgX01fZGF0YS0+X01fYW1vbnRoMDIgPSBfX25sX2xhbmdpbmZvX2woQUJNT05fMiwgX19jbG9jKTsKLSsJICBfTV9kYXRhLT5fTV9hbW9udGgwMyA9IF9fbmxfbGFuZ2luZm9fbChBQk1PTl8zLCBfX2Nsb2MpOwotKwkgIF9NX2RhdGEtPl9NX2Ftb250aDA0ID0gX19ubF9sYW5naW5mb19sKEFCTU9OXzQsIF9fY2xvYyk7Ci0rCSAgX01fZGF0YS0+X01fYW1vbnRoMDUgPSBfX25sX2xhbmdpbmZvX2woQUJNT05fNSwgX19jbG9jKTsKLSsJICBfTV9kYXRhLT5fTV9hbW9udGgwNiA9IF9fbmxfbGFuZ2luZm9fbChBQk1PTl82LCBfX2Nsb2MpOwotKwkgIF9NX2RhdGEtPl9NX2Ftb250aDA3ID0gX19ubF9sYW5naW5mb19sKEFCTU9OXzcsIF9fY2xvYyk7Ci0rCSAgX01fZGF0YS0+X01fYW1vbnRoMDggPSBfX25sX2xhbmdpbmZvX2woQUJNT05fOCwgX19jbG9jKTsKLSsJICBfTV9kYXRhLT5fTV9hbW9udGgwOSA9IF9fbmxfbGFuZ2luZm9fbChBQk1PTl85LCBfX2Nsb2MpOwotKwkgIF9NX2RhdGEtPl9NX2Ftb250aDEwID0gX19ubF9sYW5naW5mb19sKEFCTU9OXzEwLCBfX2Nsb2MpOwotKwkgIF9NX2RhdGEtPl9NX2Ftb250aDExID0gX19ubF9sYW5naW5mb19sKEFCTU9OXzExLCBfX2Nsb2MpOwotKwkgIF9NX2RhdGEtPl9NX2Ftb250aDEyID0gX19ubF9sYW5naW5mb19sKEFCTU9OXzEyLCBfX2Nsb2MpOwotKwl9Ci0rICAgIH0KLSsKLSsjaWZkZWYgX0dMSUJDWFhfVVNFX1dDSEFSX1QKLSsgIHRlbXBsYXRlPD4KLSsgICAgdm9pZAotKyAgICBfX3RpbWVwdW5jdDx3Y2hhcl90Pjo6Ci0rICAgIF9NX3B1dCh3Y2hhcl90KiBfX3MsIHNpemVfdCBfX21heGxlbiwgY29uc3Qgd2NoYXJfdCogX19mb3JtYXQsCi0rCSAgIGNvbnN0IHRtKiBfX3RtKSBjb25zdAotKyAgICB7Ci0rI2lmZGVmIF9fVUNMSUJDX0hBU19YTE9DQUxFX18KLSsgICAgICBfX3djc2Z0aW1lX2woX19zLCBfX21heGxlbiwgX19mb3JtYXQsIF9fdG0sIF9NX2NfbG9jYWxlX3RpbWVwdW5jdCk7Ci0rICAgICAgY29uc3Qgc2l6ZV90IF9fbGVuID0gX193Y3NmdGltZV9sKF9fcywgX19tYXhsZW4sIF9fZm9ybWF0LCBfX3RtLAotKwkJCQkJX01fY19sb2NhbGVfdGltZXB1bmN0KTsKLSsjZWxzZQotKyAgICAgIGNoYXIqIF9fb2xkID0gc3RyZHVwKHNldGxvY2FsZShMQ19BTEwsIE5VTEwpKTsKLSsgICAgICBzZXRsb2NhbGUoTENfQUxMLCBfTV9uYW1lX3RpbWVwdW5jdCk7Ci0rICAgICAgY29uc3Qgc2l6ZV90IF9fbGVuID0gd2NzZnRpbWUoX19zLCBfX21heGxlbiwgX19mb3JtYXQsIF9fdG0pOwotKyAgICAgIHNldGxvY2FsZShMQ19BTEwsIF9fb2xkKTsKLSsgICAgICBmcmVlKF9fb2xkKTsKLSsjZW5kaWYKLSsgICAgICAvLyBNYWtlIHN1cmUgX19zIGlzIG51bGwgdGVybWluYXRlZC4KLSsgICAgICBpZiAoX19sZW4gPT0gMCkKLSsJX19zWzBdID0gTCdcMCc7Ci0rICAgIH0KLSsKLSsgIHRlbXBsYXRlPD4KLSsgICAgdm9pZAotKyAgICBfX3RpbWVwdW5jdDx3Y2hhcl90Pjo6X01faW5pdGlhbGl6ZV90aW1lcHVuY3QoX19jX2xvY2FsZSBfX2Nsb2MpCi0rICAgIHsKLSsgICAgICBpZiAoIV9NX2RhdGEpCi0rCV9NX2RhdGEgPSBuZXcgX190aW1lcHVuY3RfY2FjaGU8d2NoYXJfdD47Ci0rCi0rI3dhcm5pbmcgd2lkZSB0aW1lIHN0dWZmCi0rLy8gICAgICAgaWYgKCFfX2Nsb2MpCi0rCXsKLSsJICAvLyAiQyIgbG9jYWxlCi0rCSAgX01fY19sb2NhbGVfdGltZXB1bmN0ID0gX1NfZ2V0X2NfbG9jYWxlKCk7Ci0rCi0rCSAgX01fZGF0YS0+X01fZGF0ZV9mb3JtYXQgPSBMIiVtLyVkLyV5IjsKLSsJICBfTV9kYXRhLT5fTV9kYXRlX2VyYV9mb3JtYXQgPSBMIiVtLyVkLyV5IjsKLSsJICBfTV9kYXRhLT5fTV90aW1lX2Zvcm1hdCA9IEwiJUg6JU06JVMiOwotKwkgIF9NX2RhdGEtPl9NX3RpbWVfZXJhX2Zvcm1hdCA9IEwiJUg6JU06JVMiOwotKwkgIF9NX2RhdGEtPl9NX2RhdGVfdGltZV9mb3JtYXQgPSBMIiI7Ci0rCSAgX01fZGF0YS0+X01fZGF0ZV90aW1lX2VyYV9mb3JtYXQgPSBMIiI7Ci0rCSAgX01fZGF0YS0+X01fYW0gPSBMIkFNIjsKLSsJICBfTV9kYXRhLT5fTV9wbSA9IEwiUE0iOwotKwkgIF9NX2RhdGEtPl9NX2FtX3BtX2Zvcm1hdCA9IEwiIjsKLSsKLSsJICAvLyBEYXkgbmFtZXMsIHN0YXJ0aW5nIHdpdGggIkMiJ3MgU3VuZGF5LgotKwkgIF9NX2RhdGEtPl9NX2RheTEgPSBMIlN1bmRheSI7Ci0rCSAgX01fZGF0YS0+X01fZGF5MiA9IEwiTW9uZGF5IjsKLSsJICBfTV9kYXRhLT5fTV9kYXkzID0gTCJUdWVzZGF5IjsKLSsJICBfTV9kYXRhLT5fTV9kYXk0ID0gTCJXZWRuZXNkYXkiOwotKwkgIF9NX2RhdGEtPl9NX2RheTUgPSBMIlRodXJzZGF5IjsKLSsJICBfTV9kYXRhLT5fTV9kYXk2ID0gTCJGcmlkYXkiOwotKwkgIF9NX2RhdGEtPl9NX2RheTcgPSBMIlNhdHVyZGF5IjsKLSsKLSsJICAvLyBBYmJyZXZpYXRlZCBkYXkgbmFtZXMsIHN0YXJ0aW5nIHdpdGggIkMiJ3MgU3VuLgotKwkgIF9NX2RhdGEtPl9NX2FkYXkxID0gTCJTdW4iOwotKwkgIF9NX2RhdGEtPl9NX2FkYXkyID0gTCJNb24iOwotKwkgIF9NX2RhdGEtPl9NX2FkYXkzID0gTCJUdWUiOwotKwkgIF9NX2RhdGEtPl9NX2FkYXk0ID0gTCJXZWQiOwotKwkgIF9NX2RhdGEtPl9NX2FkYXk1ID0gTCJUaHUiOwotKwkgIF9NX2RhdGEtPl9NX2FkYXk2ID0gTCJGcmkiOwotKwkgIF9NX2RhdGEtPl9NX2FkYXk3ID0gTCJTYXQiOwotKwotKwkgIC8vIE1vbnRoIG5hbWVzLCBzdGFydGluZyB3aXRoICJDIidzIEphbnVhcnkuCi0rCSAgX01fZGF0YS0+X01fbW9udGgwMSA9IEwiSmFudWFyeSI7Ci0rCSAgX01fZGF0YS0+X01fbW9udGgwMiA9IEwiRmVicnVhcnkiOwotKwkgIF9NX2RhdGEtPl9NX21vbnRoMDMgPSBMIk1hcmNoIjsKLSsJICBfTV9kYXRhLT5fTV9tb250aDA0ID0gTCJBcHJpbCI7Ci0rCSAgX01fZGF0YS0+X01fbW9udGgwNSA9IEwiTWF5IjsKLSsJICBfTV9kYXRhLT5fTV9tb250aDA2ID0gTCJKdW5lIjsKLSsJICBfTV9kYXRhLT5fTV9tb250aDA3ID0gTCJKdWx5IjsKLSsJICBfTV9kYXRhLT5fTV9tb250aDA4ID0gTCJBdWd1c3QiOwotKwkgIF9NX2RhdGEtPl9NX21vbnRoMDkgPSBMIlNlcHRlbWJlciI7Ci0rCSAgX01fZGF0YS0+X01fbW9udGgxMCA9IEwiT2N0b2JlciI7Ci0rCSAgX01fZGF0YS0+X01fbW9udGgxMSA9IEwiTm92ZW1iZXIiOwotKwkgIF9NX2RhdGEtPl9NX21vbnRoMTIgPSBMIkRlY2VtYmVyIjsKLSsKLSsJICAvLyBBYmJyZXZpYXRlZCBtb250aCBuYW1lcywgc3RhcnRpbmcgd2l0aCAiQyIncyBKYW4uCi0rCSAgX01fZGF0YS0+X01fYW1vbnRoMDEgPSBMIkphbiI7Ci0rCSAgX01fZGF0YS0+X01fYW1vbnRoMDIgPSBMIkZlYiI7Ci0rCSAgX01fZGF0YS0+X01fYW1vbnRoMDMgPSBMIk1hciI7Ci0rCSAgX01fZGF0YS0+X01fYW1vbnRoMDQgPSBMIkFwciI7Ci0rCSAgX01fZGF0YS0+X01fYW1vbnRoMDUgPSBMIk1heSI7Ci0rCSAgX01fZGF0YS0+X01fYW1vbnRoMDYgPSBMIkp1biI7Ci0rCSAgX01fZGF0YS0+X01fYW1vbnRoMDcgPSBMIkp1bCI7Ci0rCSAgX01fZGF0YS0+X01fYW1vbnRoMDggPSBMIkF1ZyI7Ci0rCSAgX01fZGF0YS0+X01fYW1vbnRoMDkgPSBMIlNlcCI7Ci0rCSAgX01fZGF0YS0+X01fYW1vbnRoMTAgPSBMIk9jdCI7Ci0rCSAgX01fZGF0YS0+X01fYW1vbnRoMTEgPSBMIk5vdiI7Ci0rCSAgX01fZGF0YS0+X01fYW1vbnRoMTIgPSBMIkRlYyI7Ci0rCX0KLSsjaWYgMAotKyAgICAgIGVsc2UKLSsJewotKwkgIF9NX2NfbG9jYWxlX3RpbWVwdW5jdCA9IF9TX2Nsb25lX2NfbG9jYWxlKF9fY2xvYyk7Ci0rCi0rCSAgdW5pb24geyBjaGFyICpfX3M7IHdjaGFyX3QgKl9fdzsgfSBfX3U7Ci0rCi0rCSAgX191Ll9fcyA9IF9fbmxfbGFuZ2luZm9fbChfTkxfV0RfRk1ULCBfX2Nsb2MpOwotKwkgIF9NX2RhdGEtPl9NX2RhdGVfZm9ybWF0ID0gX191Ll9fdzsKLSsJICBfX3UuX19zID0gX19ubF9sYW5naW5mb19sKF9OTF9XRVJBX0RfRk1ULCBfX2Nsb2MpOwotKwkgIF9NX2RhdGEtPl9NX2RhdGVfZXJhX2Zvcm1hdCA9IF9fdS5fX3c7Ci0rCSAgX191Ll9fcyA9IF9fbmxfbGFuZ2luZm9fbChfTkxfV1RfRk1ULCBfX2Nsb2MpOwotKwkgIF9NX2RhdGEtPl9NX3RpbWVfZm9ybWF0ID0gX191Ll9fdzsKLSsJICBfX3UuX19zID0gX19ubF9sYW5naW5mb19sKF9OTF9XRVJBX1RfRk1ULCBfX2Nsb2MpOwotKwkgIF9NX2RhdGEtPl9NX3RpbWVfZXJhX2Zvcm1hdCA9IF9fdS5fX3c7Ci0rCSAgX191Ll9fcyA9IF9fbmxfbGFuZ2luZm9fbChfTkxfV0RfVF9GTVQsIF9fY2xvYyk7Ci0rCSAgX01fZGF0YS0+X01fZGF0ZV90aW1lX2Zvcm1hdCA9IF9fdS5fX3c7Ci0rCSAgX191Ll9fcyA9IF9fbmxfbGFuZ2luZm9fbChfTkxfV0VSQV9EX1RfRk1ULCBfX2Nsb2MpOwotKwkgIF9NX2RhdGEtPl9NX2RhdGVfdGltZV9lcmFfZm9ybWF0ID0gX191Ll9fdzsKLSsJICBfX3UuX19zID0gX19ubF9sYW5naW5mb19sKF9OTF9XQU1fU1RSLCBfX2Nsb2MpOwotKwkgIF9NX2RhdGEtPl9NX2FtID0gX191Ll9fdzsKLSsJICBfX3UuX19zID0gX19ubF9sYW5naW5mb19sKF9OTF9XUE1fU1RSLCBfX2Nsb2MpOwotKwkgIF9NX2RhdGEtPl9NX3BtID0gX191Ll9fdzsKLSsJICBfX3UuX19zID0gX19ubF9sYW5naW5mb19sKF9OTF9XVF9GTVRfQU1QTSwgX19jbG9jKTsKLSsJICBfTV9kYXRhLT5fTV9hbV9wbV9mb3JtYXQgPSBfX3UuX193OwotKwotKwkgIC8vIERheSBuYW1lcywgc3RhcnRpbmcgd2l0aCAiQyIncyBTdW5kYXkuCi0rCSAgX191Ll9fcyA9IF9fbmxfbGFuZ2luZm9fbChfTkxfV0RBWV8xLCBfX2Nsb2MpOwotKwkgIF9NX2RhdGEtPl9NX2RheTEgPSBfX3UuX193OwotKwkgIF9fdS5fX3MgPSBfX25sX2xhbmdpbmZvX2woX05MX1dEQVlfMiwgX19jbG9jKTsKLSsJICBfTV9kYXRhLT5fTV9kYXkyID0gX191Ll9fdzsKLSsJICBfX3UuX19zID0gX19ubF9sYW5naW5mb19sKF9OTF9XREFZXzMsIF9fY2xvYyk7Ci0rCSAgX01fZGF0YS0+X01fZGF5MyA9IF9fdS5fX3c7Ci0rCSAgX191Ll9fcyA9IF9fbmxfbGFuZ2luZm9fbChfTkxfV0RBWV80LCBfX2Nsb2MpOwotKwkgIF9NX2RhdGEtPl9NX2RheTQgPSBfX3UuX193OwotKwkgIF9fdS5fX3MgPSBfX25sX2xhbmdpbmZvX2woX05MX1dEQVlfNSwgX19jbG9jKTsKLSsJICBfTV9kYXRhLT5fTV9kYXk1ID0gX191Ll9fdzsKLSsJICBfX3UuX19zID0gX19ubF9sYW5naW5mb19sKF9OTF9XREFZXzYsIF9fY2xvYyk7Ci0rCSAgX01fZGF0YS0+X01fZGF5NiA9IF9fdS5fX3c7Ci0rCSAgX191Ll9fcyA9IF9fbmxfbGFuZ2luZm9fbChfTkxfV0RBWV83LCBfX2Nsb2MpOwotKwkgIF9NX2RhdGEtPl9NX2RheTcgPSBfX3UuX193OwotKwotKwkgIC8vIEFiYnJldmlhdGVkIGRheSBuYW1lcywgc3RhcnRpbmcgd2l0aCAiQyIncyBTdW4uCi0rCSAgX191Ll9fcyA9IF9fbmxfbGFuZ2luZm9fbChfTkxfV0FCREFZXzEsIF9fY2xvYyk7Ci0rCSAgX01fZGF0YS0+X01fYWRheTEgPSBfX3UuX193OwotKwkgIF9fdS5fX3MgPSBfX25sX2xhbmdpbmZvX2woX05MX1dBQkRBWV8yLCBfX2Nsb2MpOwotKwkgIF9NX2RhdGEtPl9NX2FkYXkyID0gX191Ll9fdzsKLSsJICBfX3UuX19zID0gX19ubF9sYW5naW5mb19sKF9OTF9XQUJEQVlfMywgX19jbG9jKTsKLSsJICBfTV9kYXRhLT5fTV9hZGF5MyA9IF9fdS5fX3c7Ci0rCSAgX191Ll9fcyA9IF9fbmxfbGFuZ2luZm9fbChfTkxfV0FCREFZXzQsIF9fY2xvYyk7Ci0rCSAgX01fZGF0YS0+X01fYWRheTQgPSBfX3UuX193OwotKwkgIF9fdS5fX3MgPSBfX25sX2xhbmdpbmZvX2woX05MX1dBQkRBWV81LCBfX2Nsb2MpOwotKwkgIF9NX2RhdGEtPl9NX2FkYXk1ID0gX191Ll9fdzsKLSsJICBfX3UuX19zID0gX19ubF9sYW5naW5mb19sKF9OTF9XQUJEQVlfNiwgX19jbG9jKTsKLSsJICBfTV9kYXRhLT5fTV9hZGF5NiA9IF9fdS5fX3c7Ci0rCSAgX191Ll9fcyA9IF9fbmxfbGFuZ2luZm9fbChfTkxfV0FCREFZXzcsIF9fY2xvYyk7Ci0rCSAgX01fZGF0YS0+X01fYWRheTcgPSBfX3UuX193OwotKwotKwkgIC8vIE1vbnRoIG5hbWVzLCBzdGFydGluZyB3aXRoICJDIidzIEphbnVhcnkuCi0rCSAgX191Ll9fcyA9IF9fbmxfbGFuZ2luZm9fbChfTkxfV01PTl8xLCBfX2Nsb2MpOwotKwkgIF9NX2RhdGEtPl9NX21vbnRoMDEgPSBfX3UuX193OwotKwkgIF9fdS5fX3MgPSBfX25sX2xhbmdpbmZvX2woX05MX1dNT05fMiwgX19jbG9jKTsKLSsJICBfTV9kYXRhLT5fTV9tb250aDAyID0gX191Ll9fdzsKLSsJICBfX3UuX19zID0gX19ubF9sYW5naW5mb19sKF9OTF9XTU9OXzMsIF9fY2xvYyk7Ci0rCSAgX01fZGF0YS0+X01fbW9udGgwMyA9IF9fdS5fX3c7Ci0rCSAgX191Ll9fcyA9IF9fbmxfbGFuZ2luZm9fbChfTkxfV01PTl80LCBfX2Nsb2MpOwotKwkgIF9NX2RhdGEtPl9NX21vbnRoMDQgPSBfX3UuX193OwotKwkgIF9fdS5fX3MgPSBfX25sX2xhbmdpbmZvX2woX05MX1dNT05fNSwgX19jbG9jKTsKLSsJICBfTV9kYXRhLT5fTV9tb250aDA1ID0gX191Ll9fdzsKLSsJICBfX3UuX19zID0gX19ubF9sYW5naW5mb19sKF9OTF9XTU9OXzYsIF9fY2xvYyk7Ci0rCSAgX01fZGF0YS0+X01fbW9udGgwNiA9IF9fdS5fX3c7Ci0rCSAgX191Ll9fcyA9IF9fbmxfbGFuZ2luZm9fbChfTkxfV01PTl83LCBfX2Nsb2MpOwotKwkgIF9NX2RhdGEtPl9NX21vbnRoMDcgPSBfX3UuX193OwotKwkgIF9fdS5fX3MgPSBfX25sX2xhbmdpbmZvX2woX05MX1dNT05fOCwgX19jbG9jKTsKLSsJICBfTV9kYXRhLT5fTV9tb250aDA4ID0gX191Ll9fdzsKLSsJICBfX3UuX19zID0gX19ubF9sYW5naW5mb19sKF9OTF9XTU9OXzksIF9fY2xvYyk7Ci0rCSAgX01fZGF0YS0+X01fbW9udGgwOSA9IF9fdS5fX3c7Ci0rCSAgX191Ll9fcyA9IF9fbmxfbGFuZ2luZm9fbChfTkxfV01PTl8xMCwgX19jbG9jKTsKLSsJICBfTV9kYXRhLT5fTV9tb250aDEwID0gX191Ll9fdzsKLSsJICBfX3UuX19zID0gX19ubF9sYW5naW5mb19sKF9OTF9XTU9OXzExLCBfX2Nsb2MpOwotKwkgIF9NX2RhdGEtPl9NX21vbnRoMTEgPSBfX3UuX193OwotKwkgIF9fdS5fX3MgPSBfX25sX2xhbmdpbmZvX2woX05MX1dNT05fMTIsIF9fY2xvYyk7Ci0rCSAgX01fZGF0YS0+X01fbW9udGgxMiA9IF9fdS5fX3c7Ci0rCi0rCSAgLy8gQWJicmV2aWF0ZWQgbW9udGggbmFtZXMsIHN0YXJ0aW5nIHdpdGggIkMiJ3MgSmFuLgotKwkgIF9fdS5fX3MgPSBfX25sX2xhbmdpbmZvX2woX05MX1dBQk1PTl8xLCBfX2Nsb2MpOwotKwkgIF9NX2RhdGEtPl9NX2Ftb250aDAxID0gX191Ll9fdzsKLSsJICBfX3UuX19zID0gX19ubF9sYW5naW5mb19sKF9OTF9XQUJNT05fMiwgX19jbG9jKTsKLSsJICBfTV9kYXRhLT5fTV9hbW9udGgwMiA9IF9fdS5fX3c7Ci0rCSAgX191Ll9fcyA9IF9fbmxfbGFuZ2luZm9fbChfTkxfV0FCTU9OXzMsIF9fY2xvYyk7Ci0rCSAgX01fZGF0YS0+X01fYW1vbnRoMDMgPSBfX3UuX193OwotKwkgIF9fdS5fX3MgPSBfX25sX2xhbmdpbmZvX2woX05MX1dBQk1PTl80LCBfX2Nsb2MpOwotKwkgIF9NX2RhdGEtPl9NX2Ftb250aDA0ID0gX191Ll9fdzsKLSsJICBfX3UuX19zID0gX19ubF9sYW5naW5mb19sKF9OTF9XQUJNT05fNSwgX19jbG9jKTsKLSsJICBfTV9kYXRhLT5fTV9hbW9udGgwNSA9IF9fdS5fX3c7Ci0rCSAgX191Ll9fcyA9IF9fbmxfbGFuZ2luZm9fbChfTkxfV0FCTU9OXzYsIF9fY2xvYyk7Ci0rCSAgX01fZGF0YS0+X01fYW1vbnRoMDYgPSBfX3UuX193OwotKwkgIF9fdS5fX3MgPSBfX25sX2xhbmdpbmZvX2woX05MX1dBQk1PTl83LCBfX2Nsb2MpOwotKwkgIF9NX2RhdGEtPl9NX2Ftb250aDA3ID0gX191Ll9fdzsKLSsJICBfX3UuX19zID0gX19ubF9sYW5naW5mb19sKF9OTF9XQUJNT05fOCwgX19jbG9jKTsKLSsJICBfTV9kYXRhLT5fTV9hbW9udGgwOCA9IF9fdS5fX3c7Ci0rCSAgX191Ll9fcyA9IF9fbmxfbGFuZ2luZm9fbChfTkxfV0FCTU9OXzksIF9fY2xvYyk7Ci0rCSAgX01fZGF0YS0+X01fYW1vbnRoMDkgPSBfX3UuX193OwotKwkgIF9fdS5fX3MgPSBfX25sX2xhbmdpbmZvX2woX05MX1dBQk1PTl8xMCwgX19jbG9jKTsKLSsJICBfTV9kYXRhLT5fTV9hbW9udGgxMCA9IF9fdS5fX3c7Ci0rCSAgX191Ll9fcyA9IF9fbmxfbGFuZ2luZm9fbChfTkxfV0FCTU9OXzExLCBfX2Nsb2MpOwotKwkgIF9NX2RhdGEtPl9NX2Ftb250aDExID0gX191Ll9fdzsKLSsJICBfX3UuX19zID0gX19ubF9sYW5naW5mb19sKF9OTF9XQUJNT05fMTIsIF9fY2xvYyk7Ci0rCSAgX01fZGF0YS0+X01fYW1vbnRoMTIgPSBfX3UuX193OwotKwl9Ci0rI2VuZGlmIC8vIDAKLSsgICAgfQotKyNlbmRpZgotK30KLWRpZmYgLS1naXQgYS9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvdGltZV9tZW1iZXJzLmggYi9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvdGltZV9tZW1iZXJzLmgKLW5ldyBmaWxlIG1vZGUgMTAwNjQ0Ci1pbmRleCAwMDAwMDAwLi5iYThlODU4Ci0tLS0gL2Rldi9udWxsCi0rKysgYi9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvdGltZV9tZW1iZXJzLmgKLUBAIC0wLDAgKzEsNjggQEAKLSsvLyBzdGQ6OnRpbWVfZ2V0LCBzdGQ6OnRpbWVfcHV0IGltcGxlbWVudGF0aW9uLCBHTlUgdmVyc2lvbiAtKi0gQysrIC0qLQotKwotKy8vIENvcHlyaWdodCAoQykgMjAwMSwgMjAwMiwgMjAwMywgMjAwNCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KLSsvLwotKy8vIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgSVNPIEMrKyBMaWJyYXJ5LiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUKLSsvLyBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlciB0aGUKLSsvLyB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQotKy8vIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKQotKy8vIGFueSBsYXRlciB2ZXJzaW9uLgotKwotKy8vIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotKy8vIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0rLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQotKy8vIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0rCi0rLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcKLSsvLyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuICBJZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlCi0rLy8gU29mdHdhcmUgRm91bmRhdGlvbiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsCi0rLy8gVVNBLgotKwotKy8vIEFzIGEgc3BlY2lhbCBleGNlcHRpb24sIHlvdSBtYXkgdXNlIHRoaXMgZmlsZSBhcyBwYXJ0IG9mIGEgZnJlZSBzb2Z0d2FyZQotKy8vIGxpYnJhcnkgd2l0aG91dCByZXN0cmljdGlvbi4gIFNwZWNpZmljYWxseSwgaWYgb3RoZXIgZmlsZXMgaW5zdGFudGlhdGUKLSsvLyB0ZW1wbGF0ZXMgb3IgdXNlIG1hY3JvcyBvciBpbmxpbmUgZnVuY3Rpb25zIGZyb20gdGhpcyBmaWxlLCBvciB5b3UgY29tcGlsZQotKy8vIHRoaXMgZmlsZSBhbmQgbGluayBpdCB3aXRoIG90aGVyIGZpbGVzIHRvIHByb2R1Y2UgYW4gZXhlY3V0YWJsZSwgdGhpcwotKy8vIGZpbGUgZG9lcyBub3QgYnkgaXRzZWxmIGNhdXNlIHRoZSByZXN1bHRpbmcgZXhlY3V0YWJsZSB0byBiZSBjb3ZlcmVkIGJ5Ci0rLy8gdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLiAgVGhpcyBleGNlcHRpb24gZG9lcyBub3QgaG93ZXZlcgotKy8vIGludmFsaWRhdGUgYW55IG90aGVyIHJlYXNvbnMgd2h5IHRoZSBleGVjdXRhYmxlIGZpbGUgbWlnaHQgYmUgY292ZXJlZCBieQotKy8vIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4KLSsKLSsvLwotKy8vIElTTyBDKysgMTQ4ODI6IDIyLjIuNS4xLjIgLSB0aW1lX2dldCBmdW5jdGlvbnMKLSsvLyBJU08gQysrIDE0ODgyOiAyMi4yLjUuMy4yIC0gdGltZV9wdXQgZnVuY3Rpb25zCi0rLy8KLSsKLSsvLyBXcml0dGVuIGJ5IEJlbmphbWluIEtvc25payA8YmtvekByZWRoYXQuY29tPgotKwotKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPgotKyAgICBfX3RpbWVwdW5jdDxfQ2hhclQ+OjpfX3RpbWVwdW5jdChzaXplX3QgX19yZWZzKQotKyAgICA6IGZhY2V0KF9fcmVmcyksIF9NX2RhdGEoTlVMTCksIF9NX2NfbG9jYWxlX3RpbWVwdW5jdChOVUxMKSwKLSsgICAgX01fbmFtZV90aW1lcHVuY3QoX1NfZ2V0X2NfbmFtZSgpKQotKyAgICB7IF9NX2luaXRpYWxpemVfdGltZXB1bmN0KCk7IH0KLSsKLSsgIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4KLSsgICAgX190aW1lcHVuY3Q8X0NoYXJUPjo6X190aW1lcHVuY3QoX19jYWNoZV90eXBlKiBfX2NhY2hlLCBzaXplX3QgX19yZWZzKQotKyAgICA6IGZhY2V0KF9fcmVmcyksIF9NX2RhdGEoX19jYWNoZSksIF9NX2NfbG9jYWxlX3RpbWVwdW5jdChOVUxMKSwKLSsgICAgX01fbmFtZV90aW1lcHVuY3QoX1NfZ2V0X2NfbmFtZSgpKQotKyAgICB7IF9NX2luaXRpYWxpemVfdGltZXB1bmN0KCk7IH0KLSsKLSsgIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4KLSsgICAgX190aW1lcHVuY3Q8X0NoYXJUPjo6X190aW1lcHVuY3QoX19jX2xvY2FsZSBfX2Nsb2MsIGNvbnN0IGNoYXIqIF9fcywKLSsJCQkJICAgICBzaXplX3QgX19yZWZzKQotKyAgICA6IGZhY2V0KF9fcmVmcyksIF9NX2RhdGEoTlVMTCksIF9NX2NfbG9jYWxlX3RpbWVwdW5jdChOVUxMKSwKLSsgICAgX01fbmFtZV90aW1lcHVuY3QoX19zKQotKyAgICB7Ci0rICAgICAgY2hhciogX190bXAgPSBuZXcgY2hhcltzdGQ6OnN0cmxlbihfX3MpICsgMV07Ci0rICAgICAgc3RkOjpzdHJjcHkoX190bXAsIF9fcyk7Ci0rICAgICAgX01fbmFtZV90aW1lcHVuY3QgPSBfX3RtcDsKLSsgICAgICBfTV9pbml0aWFsaXplX3RpbWVwdW5jdChfX2Nsb2MpOwotKyAgICB9Ci0rCi0rICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+Ci0rICAgIF9fdGltZXB1bmN0PF9DaGFyVD46On5fX3RpbWVwdW5jdCgpCi0rICAgIHsKLSsgICAgICBpZiAoX01fbmFtZV90aW1lcHVuY3QgIT0gX1NfZ2V0X2NfbmFtZSgpKQotKwlkZWxldGUgW10gX01fbmFtZV90aW1lcHVuY3Q7Ci0rICAgICAgZGVsZXRlIF9NX2RhdGE7Ci0rICAgICAgX1NfZGVzdHJveV9jX2xvY2FsZShfTV9jX2xvY2FsZV90aW1lcHVuY3QpOwotKyAgICB9Ci1kaWZmIC0tZ2l0IGEvbGlic3RkYysrLXYzL2NvbmZpZ3VyZSBiL2xpYnN0ZGMrKy12My9jb25maWd1cmUKLWluZGV4IGY0MGRkY2YuLmM1N2E3NTEgMTAwNzU1Ci0tLS0gYS9saWJzdGRjKystdjMvY29uZmlndXJlCi0rKysgYi9saWJzdGRjKystdjMvY29uZmlndXJlCi1AQCAtMTU4MjIsNiArMTU4MjIsOSBAQCBmaQotICAgIyBEZWZhdWx0IHRvICJnZW5lcmljIi4KLSAgIGlmIHRlc3QgJGVuYWJsZV9jbG9jYWxlX2ZsYWcgPSBhdXRvOyB0aGVuCi0gICAgIGNhc2UgJHt0YXJnZXRfb3N9IGluCi0rICAgICAgKi11Y2xpYmMqKQotKyAgICAgICAgZW5hYmxlX2Nsb2NhbGVfZmxhZz11Y2xpYmMKLSsgICAgICAgIDs7Ci0gICAgICAgbGludXgqIHwgZ251KiB8IGtmcmVlYnNkKi1nbnUgfCBrbmV0YnNkKi1nbnUpCi0gCWVuYWJsZV9jbG9jYWxlX2ZsYWc9Z251Ci0gCTs7Ci1AQCAtMTYwNzksNiArMTYwODIsNzggQEAgJGFzX2VjaG8gIm5ld2xpYiIgPiY2OyB9Ci0gICAgICAgQ1RJTUVfQ0M9Y29uZmlnL2xvY2FsZS9nZW5lcmljL3RpbWVfbWVtYmVycy5jYwotICAgICAgIENMT0NBTEVfSU5URVJOQUxfSD1jb25maWcvbG9jYWxlL2dlbmVyaWMvYysrbG9jYWxlX2ludGVybmFsLmgKLSAgICAgICA7OwotKyAgICB1Y2xpYmMpCi0rICAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IHVjbGliYyIgPiY1Ci0rJGFzX2VjaG8gInVjbGliYyIgPiY2OyB9Ci0rCi0rICAgICAgIyBEZWNsYXJlIGludGVudGlvbiB0byB1c2UgZ2V0dGV4dCwgYW5kIGFkZCBzdXBwb3J0IGZvciBzcGVjaWZpYwotKyAgICAgICMgbGFuZ3VhZ2VzLgotKyAgICAgICMgRm9yIHNvbWUgcmVhc29uLCBBTExfTElOR1VBUyBoYXMgdG8gYmUgYmVmb3JlIEFNLUdOVS1HRVRURVhUCi0rICAgICAgQUxMX0xJTkdVQVM9ImRlIGZyIgotKwotKyAgICAgICMgRG9uJ3QgY2FsbCBBTS1HTlUtR0VUVEVYVCBoZXJlLiBJbnN0ZWFkLCBhc3N1bWUgZ2xpYmMuCi0rICAgICAgIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICJtc2dmbXQiLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgotK3NldCBkdW1teSBtc2dmbXQ7IGFjX3dvcmQ9JDIKLSt7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1Ci0rJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yICRhY193b3JkLi4uICIgPiY2OyB9Ci0raWYgdGVzdCAiJHthY19jdl9wcm9nX2NoZWNrX21zZ2ZtdCtzZXR9IiA9IHNldDsgdGhlbiA6Ci0rICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgotK2Vsc2UKLSsgIGlmIHRlc3QgLW4gIiRjaGVja19tc2dmbXQiOyB0aGVuCi0rICBhY19jdl9wcm9nX2NoZWNrX21zZ2ZtdD0iJGNoZWNrX21zZ2ZtdCIgIyBMZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3QuCi0rZWxzZQotK2FzX3NhdmVfSUZTPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKLStmb3IgYXNfZGlyIGluICRQQVRICi0rZG8KLSsgIElGUz0kYXNfc2F2ZV9JRlMKLSsgIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCi0rICAgIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbwotKyAgaWYgeyB0ZXN0IC1mICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiAmJiAkYXNfdGVzdF94ICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IjsgfTsgdGhlbgotKyAgICBhY19jdl9wcm9nX2NoZWNrX21zZ2ZtdD0ieWVzIgotKyAgICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBmb3VuZCAkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiA+JjUKLSsgICAgYnJlYWsgMgotKyAgZmkKLStkb25lCi0rICBkb25lCi0rSUZTPSRhc19zYXZlX0lGUwotKwotKyAgdGVzdCAteiAiJGFjX2N2X3Byb2dfY2hlY2tfbXNnZm10IiAmJiBhY19jdl9wcm9nX2NoZWNrX21zZ2ZtdD0ibm8iCi0rZmkKLStmaQotK2NoZWNrX21zZ2ZtdD0kYWNfY3ZfcHJvZ19jaGVja19tc2dmbXQKLStpZiB0ZXN0IC1uICIkY2hlY2tfbXNnZm10IjsgdGhlbgotKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRjaGVja19tc2dmbXQiID4mNQotKyRhc19lY2hvICIkY2hlY2tfbXNnZm10IiA+JjY7IH0KLStlbHNlCi0rICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQotKyRhc19lY2hvICJubyIgPiY2OyB9Ci0rZmkKLSsKLSsKLSsgICAgICBpZiB0ZXN0IHgiJGNoZWNrX21zZ2ZtdCIgPSB4InllcyIgJiYgdGVzdCB4IiRlbmFibGVfbmxzIiA9IHgieWVzIjsgdGhlbgotKyAgICAgICAgVVNFX05MUz15ZXMKLSsgICAgICBmaQotKyAgICAgICMgRXhwb3J0IHRoZSBidWlsZCBvYmplY3RzLgotKyAgICAgIGZvciBsaW5nIGluICRBTExfTElOR1VBUzsgZG8gXAotKyAgICAgICAgZ2xpYmN4eF9NT0ZJTEVTPSIkZ2xpYmN4eF9NT0ZJTEVTICRsaW5nLm1vIjsgXAotKyAgICAgICAgZ2xpYmN4eF9QT0ZJTEVTPSIkZ2xpYmN4eF9QT0ZJTEVTICRsaW5nLnBvIjsgXAotKyAgICAgIGRvbmUKLSsKLSsKLSsKLSsgICAgICBDTE9DQUxFX0g9Y29uZmlnL2xvY2FsZS91Y2xpYmMvY19sb2NhbGUuaAotKyAgICAgIENMT0NBTEVfQ0M9Y29uZmlnL2xvY2FsZS91Y2xpYmMvY19sb2NhbGUuY2MKLSsgICAgICBDQ09ERUNWVF9DQz1jb25maWcvbG9jYWxlL3VjbGliYy9jb2RlY3Z0X21lbWJlcnMuY2MKLSsgICAgICBDQ09MTEFURV9DQz1jb25maWcvbG9jYWxlL3VjbGliYy9jb2xsYXRlX21lbWJlcnMuY2MKLSsgICAgICBDQ1RZUEVfQ0M9Y29uZmlnL2xvY2FsZS91Y2xpYmMvY3R5cGVfbWVtYmVycy5jYwotKyAgICAgIENNRVNTQUdFU19IPWNvbmZpZy9sb2NhbGUvdWNsaWJjL21lc3NhZ2VzX21lbWJlcnMuaAotKyAgICAgIENNRVNTQUdFU19DQz1jb25maWcvbG9jYWxlL3VjbGliYy9tZXNzYWdlc19tZW1iZXJzLmNjCi0rICAgICAgQ01PTkVZX0NDPWNvbmZpZy9sb2NhbGUvdWNsaWJjL21vbmV0YXJ5X21lbWJlcnMuY2MKLSsgICAgICBDTlVNRVJJQ19DQz1jb25maWcvbG9jYWxlL3VjbGliYy9udW1lcmljX21lbWJlcnMuY2MKLSsgICAgICBDVElNRV9IPWNvbmZpZy9sb2NhbGUvdWNsaWJjL3RpbWVfbWVtYmVycy5oCi0rICAgICAgQ1RJTUVfQ0M9Y29uZmlnL2xvY2FsZS91Y2xpYmMvdGltZV9tZW1iZXJzLmNjCi0rICAgICAgQ0xPQ0FMRV9JTlRFUk5BTF9IPWNvbmZpZy9sb2NhbGUvdWNsaWJjL2MrK2xvY2FsZV9pbnRlcm5hbC5oCi0rICAgICAgOzsKLSAgIGVzYWMKLSAKLSAgICMgVGhpcyBpcyB3aGVyZSB0aGUgdGVzdHN1aXRlIGxvb2tzIGZvciBsb2NhbGUgY2F0YWxvZ3MsIHVzaW5nIHRoZQotZGlmZiAtLWdpdCBhL2xpYnN0ZGMrKy12My9pbmNsdWRlL2NfY29tcGF0aWJpbGl0eS93Y2hhci5oIGIvbGlic3RkYysrLXYzL2luY2x1ZGUvY19jb21wYXRpYmlsaXR5L3djaGFyLmgKLWluZGV4IDU4MGQ3MjUuLjNmZTYxYjggMTAwNjQ0Ci0tLS0gYS9saWJzdGRjKystdjMvaW5jbHVkZS9jX2NvbXBhdGliaWxpdHkvd2NoYXIuaAotKysrIGIvbGlic3RkYysrLXYzL2luY2x1ZGUvY19jb21wYXRpYmlsaXR5L3djaGFyLmgKLUBAIC0xMDEsNyArMTAxLDkgQEAgdXNpbmcgc3RkOjp3bWVtY21wOwotIHVzaW5nIHN0ZDo6d21lbWNweTsKLSB1c2luZyBzdGQ6OndtZW1tb3ZlOwotIHVzaW5nIHN0ZDo6d21lbXNldDsKLSsjaWYgX0dMSUJDWFhfSEFWRV9XQ1NGVElNRQotIHVzaW5nIHN0ZDo6d2NzZnRpbWU7Ci0rI2VuZGlmCi0gCi0gI2lmIF9HTElCQ1hYX1VTRV9DOTkKLSB1c2luZyBzdGQ6Ondjc3RvbGQ7Ci1kaWZmIC0tZ2l0IGEvbGlic3RkYysrLXYzL2luY2x1ZGUvY19zdGQvY3djaGFyIGIvbGlic3RkYysrLXYzL2luY2x1ZGUvY19zdGQvY3djaGFyCi1pbmRleCAwZTZiMWZjLi40MDVhZWUyIDEwMDY0NAotLS0tIGEvbGlic3RkYysrLXYzL2luY2x1ZGUvY19zdGQvY3djaGFyCi0rKysgYi9saWJzdGRjKystdjMvaW5jbHVkZS9jX3N0ZC9jd2NoYXIKLUBAIC0xNzUsNyArMTc1LDkgQEAgX0dMSUJDWFhfQkVHSU5fTkFNRVNQQUNFX1ZFUlNJT04KLSAgIHVzaW5nIDo6d2NzY29sbDsKLSAgIHVzaW5nIDo6d2NzY3B5OwotICAgdXNpbmcgOjp3Y3Njc3BuOwotKyNpZiBfR0xJQkNYWF9IQVZFX1dDU0ZUSU1FCi0gICB1c2luZyA6Ondjc2Z0aW1lOwotKyNlbmRpZgotICAgdXNpbmcgOjp3Y3NsZW47Ci0gICB1c2luZyA6Ondjc25jYXQ7Ci0gICB1c2luZyA6Ondjc25jbXA7Ci0tLSAKLTEuNy4xMC40Ci0KZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy00LjkvMDAwNS11Y2xpYmMtbG9jYWxlLW5vX194LnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTQuOS8wMDA1LXVjbGliYy1sb2NhbGUtbm9fX3gucGF0Y2gKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGRjYmJmZTQuLjAwMDAwMDAKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTQuOS8wMDA1LXVjbGliYy1sb2NhbGUtbm9fX3gucGF0Y2gKKysrIC9kZXYvbnVsbApAQCAtMSwyNTcgKzAsMCBAQAotRnJvbSA2YTNlODUwNmExMmMxMjcyOGQ4YjI5OTAxZGVmZDczOGJlNDM3NTdmIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQotRnJvbTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KLURhdGU6IEZyaSwgMjkgTWFyIDIwMTMgMDg6NDI6MzYgKzA0MDAKLVN1YmplY3Q6IFtQQVRDSCAwNS8zNV0gdWNsaWJjLWxvY2FsZS1ub19feAotCi1TaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgotCi1VcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKLS0tLQotIC4uLi9jb25maWcvbG9jYWxlL3VjbGliYy9jKytsb2NhbGVfaW50ZXJuYWwuaCAgICAgIHwgICA0NSArKysrKysrKysrKysrKysrKysrKwotIGxpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9jX2xvY2FsZS5jYyAgICAgIHwgICAxNCAtLS0tLS0KLSBsaWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvY19sb2NhbGUuaCAgICAgICB8ICAgIDEgKwotIC4uLi9jb25maWcvbG9jYWxlL3VjbGliYy9jb2xsYXRlX21lbWJlcnMuY2MgICAgICAgIHwgICAgNyAtLS0KLSBsaWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvY3R5cGVfbWVtYmVycy5jYyB8ICAgIDcgLS0tCi0gLi4uL2NvbmZpZy9sb2NhbGUvdWNsaWJjL21lc3NhZ2VzX21lbWJlcnMuY2MgICAgICAgfCAgICA3ICstLQotIC4uLi9jb25maWcvbG9jYWxlL3VjbGliYy9tZXNzYWdlc19tZW1iZXJzLmggICAgICAgIHwgICAxOCArKystLS0tLQotIC4uLi9jb25maWcvbG9jYWxlL3VjbGliYy9tb25ldGFyeV9tZW1iZXJzLmNjICAgICAgIHwgICAgNCAtLQotIC4uLi9jb25maWcvbG9jYWxlL3VjbGliYy9udW1lcmljX21lbWJlcnMuY2MgICAgICAgIHwgICAgMyAtLQotIGxpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy90aW1lX21lbWJlcnMuY2MgIHwgICAgMyAtLQotIDEwIGZpbGVzIGNoYW5nZWQsIDU1IGluc2VydGlvbnMoKyksIDU0IGRlbGV0aW9ucygtKQotCi1kaWZmIC0tZ2l0IGEvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL2MrK2xvY2FsZV9pbnRlcm5hbC5oIGIvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL2MrK2xvY2FsZV9pbnRlcm5hbC5oCi1pbmRleCAyYWUzZTRhLi5lNzRmZGRmIDEwMDY0NAotLS0tIGEvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL2MrK2xvY2FsZV9pbnRlcm5hbC5oCi0rKysgYi9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvYysrbG9jYWxlX2ludGVybmFsLmgKLUBAIC02MCw0ICs2MCw0OSBAQCBleHRlcm4gIkMiIF9fdHlwZW9mKHdjc3hmcm1fbCkgX193Y3N4ZnJtX2w7Ci0gZXh0ZXJuICJDIiBfX3R5cGVvZih3Y3R5cGVfbCkgX193Y3R5cGVfbDsKLSAjZW5kaWYKLSAKLSsjIGRlZmluZSBfX25sX2xhbmdpbmZvX2wgbmxfbGFuZ2luZm9fbAotKyMgZGVmaW5lIF9fc3RyY29sbF9sIHN0cmNvbGxfbAotKyMgZGVmaW5lIF9fc3RyZnRpbWVfbCBzdHJmdGltZV9sCi0rIyBkZWZpbmUgX19zdHJ0b2RfbCBzdHJ0b2RfbAotKyMgZGVmaW5lIF9fc3RydG9mX2wgc3RydG9mX2wKLSsjIGRlZmluZSBfX3N0cnRvbGRfbCBzdHJ0b2xkX2wKLSsjIGRlZmluZSBfX3N0cnhmcm1fbCBzdHJ4ZnJtX2wKLSsjIGRlZmluZSBfX25ld2xvY2FsZSBuZXdsb2NhbGUKLSsjIGRlZmluZSBfX2ZyZWVsb2NhbGUgZnJlZWxvY2FsZQotKyMgZGVmaW5lIF9fZHVwbG9jYWxlIGR1cGxvY2FsZQotKyMgZGVmaW5lIF9fdXNlbG9jYWxlIHVzZWxvY2FsZQotKwotKyMgaWZkZWYgX0dMSUJDWFhfVVNFX1dDSEFSX1QKLSsjICBkZWZpbmUgX19pc3djdHlwZV9sIGlzd2N0eXBlX2wKLSsjICBkZWZpbmUgX190b3dsb3dlcl9sIHRvd2xvd2VyX2wKLSsjICBkZWZpbmUgX190b3d1cHBlcl9sIHRvd3VwcGVyX2wKLSsjICBkZWZpbmUgX193Y3Njb2xsX2wgd2NzY29sbF9sCi0rIyAgZGVmaW5lIF9fd2NzZnRpbWVfbCB3Y3NmdGltZV9sCi0rIyAgZGVmaW5lIF9fd2NzeGZybV9sIHdjc3hmcm1fbAotKyMgIGRlZmluZSBfX3djdHlwZV9sIHdjdHlwZV9sCi0rIyBlbmRpZgotKwotKyNlbHNlCi0rIyBkZWZpbmUgX19ubF9sYW5naW5mb19sKE4sIEwpICAgICAgIG5sX2xhbmdpbmZvKChOKSkKLSsjIGRlZmluZSBfX3N0cmNvbGxfbChTMSwgUzIsIEwpICAgICAgc3RyY29sbCgoUzEpLCAoUzIpKQotKyMgZGVmaW5lIF9fc3RydG9kX2woUywgRSwgTCkgICAgICAgICBzdHJ0b2QoKFMpLCAoRSkpCi0rIyBkZWZpbmUgX19zdHJ0b2ZfbChTLCBFLCBMKSAgICAgICAgIHN0cnRvZigoUyksIChFKSkKLSsjIGRlZmluZSBfX3N0cnRvbGRfbChTLCBFLCBMKSAgICAgICAgc3RydG9sZCgoUyksIChFKSkKLSsjIGRlZmluZSBfX3N0cnhmcm1fbChTMSwgUzIsIE4sIEwpICAgc3RyeGZybSgoUzEpLCAoUzIpLCAoTikpCi0rIyB3YXJuaW5nIHNob3VsZCBkdW1teSBfX25ld2xvY2FsZSBjaGVjayBmb3IgQ3xQT1NJWCA/Ci0rIyBkZWZpbmUgX19uZXdsb2NhbGUoYSwgYiwgYykgICAgICAgIE5VTEwKLSsjIGRlZmluZSBfX2ZyZWVsb2NhbGUoYSkgICAgICAgICAgICAgKCh2b2lkKTApCi0rIyBkZWZpbmUgX19kdXBsb2NhbGUoYSkgICAgICAgICAgICAgIF9fY19sb2NhbGUoKQotKy8vIyBkZWZpbmUgX191c2Vsb2NhbGUgPwotKy8vCi0rIyBpZmRlZiBfR0xJQkNYWF9VU0VfV0NIQVJfVAotKyMgIGRlZmluZSBfX2lzd2N0eXBlX2woQywgTSwgTCkgICAgICAgaXN3Y3R5cGUoKEMpLCAoTSkpCi0rIyAgZGVmaW5lIF9fdG93bG93ZXJfbChDLCBMKSAgICAgICAgICB0b3dsb3dlcigoQykpCi0rIyAgZGVmaW5lIF9fdG93dXBwZXJfbChDLCBMKSAgICAgICAgICB0b3d1cHBlcigoQykpCi0rIyAgZGVmaW5lIF9fd2NzY29sbF9sKFMxLCBTMiwgTCkgICAgICB3Y3Njb2xsKChTMSksIChTMikpCi0rLy8jICBkZWZpbmUgX193Y3NmdGltZV9sKFMsIE0sIEYsIFQsIEwpICB3Y3NmdGltZSgoUyksIChNKSwgKEYpLCAoVCkpCi0rIyAgZGVmaW5lIF9fd2NzeGZybV9sKFMxLCBTMiwgTiwgTCkgICB3Y3N4ZnJtKChTMSksIChTMiksIChOKSkKLSsjICBkZWZpbmUgX193Y3R5cGVfbChTLCBMKSAgICAgICAgICAgIHdjdHlwZSgoUykpCi0rIyBlbmRpZgotKwotICNlbmRpZiAvLyBHTElCQyAyLjMgYW5kIGxhdGVyCi1kaWZmIC0tZ2l0IGEvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL2NfbG9jYWxlLmNjIGIvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL2NfbG9jYWxlLmNjCi1pbmRleCA1MDgxZGMxLi4yMTQzMGQwIDEwMDY0NAotLS0tIGEvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL2NfbG9jYWxlLmNjCi0rKysgYi9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvY19sb2NhbGUuY2MKLUBAIC0zOSwyMCArMzksNiBAQAotICNpbmNsdWRlIDxsYW5naW5mby5oPgotICNpbmNsdWRlIDxiaXRzL2MrK2xvY2FsZV9pbnRlcm5hbC5oPgotIAotLSNpZm5kZWYgX19VQ0xJQkNfSEFTX1hMT0NBTEVfXwotLSNkZWZpbmUgX19zdHJ0b2xfbChTLCBFLCBCLCBMKSAgICAgIHN0cnRvbCgoUyksIChFKSwgKEIpKQotLSNkZWZpbmUgX19zdHJ0b3VsX2woUywgRSwgQiwgTCkgICAgIHN0cnRvdWwoKFMpLCAoRSksIChCKSkKLS0jZGVmaW5lIF9fc3RydG9sbF9sKFMsIEUsIEIsIEwpICAgICBzdHJ0b2xsKChTKSwgKEUpLCAoQikpCi0tI2RlZmluZSBfX3N0cnRvdWxsX2woUywgRSwgQiwgTCkgICAgc3RydG91bGwoKFMpLCAoRSksIChCKSkKLS0jZGVmaW5lIF9fc3RydG9mX2woUywgRSwgTCkgICAgICAgICBzdHJ0b2YoKFMpLCAoRSkpCi0tI2RlZmluZSBfX3N0cnRvZF9sKFMsIEUsIEwpICAgICAgICAgc3RydG9kKChTKSwgKEUpKQotLSNkZWZpbmUgX19zdHJ0b2xkX2woUywgRSwgTCkgICAgICAgIHN0cnRvbGQoKFMpLCAoRSkpCi0tI3dhcm5pbmcgc2hvdWxkIGR1bW15IF9fbmV3bG9jYWxlIGNoZWNrIGZvciBDfFBPU0lYID8KLS0jZGVmaW5lIF9fbmV3bG9jYWxlKGEsIGIsIGMpICAgICAgICBOVUxMCi0tI2RlZmluZSBfX2ZyZWVsb2NhbGUoYSkgICAgICAgICAgICAgKCh2b2lkKTApCi0tI2RlZmluZSBfX2R1cGxvY2FsZShhKSAgICAgICAgICAgICAgX19jX2xvY2FsZSgpCi0tI2VuZGlmCi0tCi0gbmFtZXNwYWNlIHN0ZAotIHsKLSAgIHRlbXBsYXRlPD4KLWRpZmYgLS1naXQgYS9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvY19sb2NhbGUuaCBiL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9jX2xvY2FsZS5oCi1pbmRleCBkYTA3YzFmLi40YmNhNWYxIDEwMDY0NAotLS0tIGEvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL2NfbG9jYWxlLmgKLSsrKyBiL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9jX2xvY2FsZS5oCi1AQCAtNjgsNiArNjgsNyBAQCBuYW1lc3BhY2UgX19nbnVfY3h4Ci0gewotICAgZXh0ZXJuICJDIiBfX3R5cGVvZih1c2Vsb2NhbGUpIF9fdXNlbG9jYWxlOwotIH0KLSsjZGVmaW5lIF9fdXNlbG9jYWxlIHVzZWxvY2FsZQotICNlbmRpZgotIAotIG5hbWVzcGFjZSBzdGQKLWRpZmYgLS1naXQgYS9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvY29sbGF0ZV9tZW1iZXJzLmNjIGIvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL2NvbGxhdGVfbWVtYmVycy5jYwotaW5kZXggYzI2NjRhNy4uZWM1YzMyOSAxMDA2NDQKLS0tLSBhL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9jb2xsYXRlX21lbWJlcnMuY2MKLSsrKyBiL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9jb2xsYXRlX21lbWJlcnMuY2MKLUBAIC0zNiwxMyArMzYsNiBAQAotICNpbmNsdWRlIDxsb2NhbGU+Ci0gI2luY2x1ZGUgPGJpdHMvYysrbG9jYWxlX2ludGVybmFsLmg+Ci0gCi0tI2lmbmRlZiBfX1VDTElCQ19IQVNfWExPQ0FMRV9fCi0tI2RlZmluZSBfX3N0cmNvbGxfbChTMSwgUzIsIEwpICAgICAgc3RyY29sbCgoUzEpLCAoUzIpKQotLSNkZWZpbmUgX19zdHJ4ZnJtX2woUzEsIFMyLCBOLCBMKSAgIHN0cnhmcm0oKFMxKSwgKFMyKSwgKE4pKQotLSNkZWZpbmUgX193Y3Njb2xsX2woUzEsIFMyLCBMKSAgICAgIHdjc2NvbGwoKFMxKSwgKFMyKSkKLS0jZGVmaW5lIF9fd2NzeGZybV9sKFMxLCBTMiwgTiwgTCkgICB3Y3N4ZnJtKChTMSksIChTMiksIChOKSkKLS0jZW5kaWYKLS0KLSBuYW1lc3BhY2Ugc3RkCi0gewotICAgLy8gVGhlc2UgYXJlIGJhc2ljYWxseSBleHRlbnNpb25zIHRvIGNoYXJfdHJhaXRzLCBhbmQgcGVyaGFwcyBzaG91bGQKLWRpZmYgLS1naXQgYS9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvY3R5cGVfbWVtYmVycy5jYyBiL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9jdHlwZV9tZW1iZXJzLmNjCi1pbmRleCA3Mjk0ZTNhLi43YjEyODYxIDEwMDY0NAotLS0tIGEvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL2N0eXBlX21lbWJlcnMuY2MKLSsrKyBiL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9jdHlwZV9tZW1iZXJzLmNjCi1AQCAtMzgsMTMgKzM4LDYgQEAKLSAjdW5kZWYgX0xJQkMKLSAjaW5jbHVkZSA8Yml0cy9jKytsb2NhbGVfaW50ZXJuYWwuaD4KLSAKLS0jaWZuZGVmIF9fVUNMSUJDX0hBU19YTE9DQUxFX18KLS0jZGVmaW5lIF9fd2N0eXBlX2woUywgTCkgICAgICAgICAgIHdjdHlwZSgoUykpCi0tI2RlZmluZSBfX3Rvd3VwcGVyX2woQywgTCkgICAgICAgICB0b3d1cHBlcigoQykpCi0tI2RlZmluZSBfX3Rvd2xvd2VyX2woQywgTCkgICAgICAgICB0b3dsb3dlcigoQykpCi0tI2RlZmluZSBfX2lzd2N0eXBlX2woQywgTSwgTCkgICAgICBpc3djdHlwZSgoQyksIChNKSkKLS0jZW5kaWYKLS0KLSBuYW1lc3BhY2Ugc3RkCi0gewotICAgLy8gTkI6IFRoZSBvdGhlciBjdHlwZTxjaGFyPiBzcGVjaWFsaXphdGlvbnMgYXJlIGluIHNyYy9sb2NhbGUuY2MgYW5kCi1kaWZmIC0tZ2l0IGEvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL21lc3NhZ2VzX21lbWJlcnMuY2MgYi9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvbWVzc2FnZXNfbWVtYmVycy5jYwotaW5kZXggMTM1OTRkOS4uZDc2OTNiNCAxMDA2NDQKLS0tLSBhL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9tZXNzYWdlc19tZW1iZXJzLmNjCi0rKysgYi9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvbWVzc2FnZXNfbWVtYmVycy5jYwotQEAgLTM5LDEzICszOSwxMCBAQAotICNpZmRlZiBfX1VDTElCQ19NSk4zX09OTFlfXwotICN3YXJuaW5nIGZpeCBnZXR0ZXh0IHN0dWZmCi0gI2VuZGlmCi0tI2lmZGVmIF9fVUNMSUJDX0hBU19HRVRURVhUX0FXQVJFTkVTU19fCi0tZXh0ZXJuICJDIiBjaGFyICpfX2RjZ2V0dGV4dChjb25zdCBjaGFyICpkb21haW5uYW1lLAotLQkJCSAgICAgY29uc3QgY2hhciAqbXNnaWQsIGludCBjYXRlZ29yeSk7Ci0gI3VuZGVmIGdldHRleHQKLS0jZGVmaW5lIGdldHRleHQobXNnaWQpIF9fZGNnZXR0ZXh0KE5VTEwsIG1zZ2lkLCBMQ19NRVNTQUdFUykKLSsjaWZkZWYgX19VQ0xJQkNfSEFTX0dFVFRFWFRfQVdBUkVORVNTX18KLSsjZGVmaW5lIGdldHRleHQobXNnaWQpIGRjZ2V0dGV4dChOVUxMLCBtc2dpZCwgTENfTUVTU0FHRVMpCi0gI2Vsc2UKLS0jdW5kZWYgZ2V0dGV4dAotICNkZWZpbmUgZ2V0dGV4dChtc2dpZCkgKG1zZ2lkKQotICNlbmRpZgotIAotZGlmZiAtLWdpdCBhL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9tZXNzYWdlc19tZW1iZXJzLmggYi9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvbWVzc2FnZXNfbWVtYmVycy5oCi1pbmRleCAxNDI0MDc4Li5kODlkYTMzIDEwMDY0NAotLS0tIGEvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL21lc3NhZ2VzX21lbWJlcnMuaAotKysrIGIvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL21lc3NhZ2VzX21lbWJlcnMuaAotQEAgLTM2LDE1ICszNiwxMSBAQAotICNpZmRlZiBfX1VDTElCQ19NSk4zX09OTFlfXwotICN3YXJuaW5nIGZpeCBwcm90b3R5cGVzIGZvciAqdGV4dGRvbWFpbiBmdW5jcwotICNlbmRpZgotLSNpZmRlZiBfX1VDTElCQ19IQVNfR0VUVEVYVF9BV0FSRU5FU1NfXwotLWV4dGVybiAiQyIgY2hhciAqX190ZXh0ZG9tYWluKGNvbnN0IGNoYXIgKmRvbWFpbm5hbWUpOwotLWV4dGVybiAiQyIgY2hhciAqX19iaW5kdGV4dGRvbWFpbihjb25zdCBjaGFyICpkb21haW5uYW1lLAotLQkJCQkgIGNvbnN0IGNoYXIgKmRpcm5hbWUpOwotLSNlbHNlCi0tI3VuZGVmIF9fdGV4dGRvbWFpbgotLSN1bmRlZiBfX2JpbmR0ZXh0ZG9tYWluCi0tI2RlZmluZSBfX3RleHRkb21haW4oRCkgICAgICAgICAgICgodm9pZCkwKQotLSNkZWZpbmUgX19iaW5kdGV4dGRvbWFpbihELFApICAgICAoKHZvaWQpMCkKLSsjaWZuZGVmIF9fVUNMSUJDX0hBU19HRVRURVhUX0FXQVJFTkVTU19fCi0rI3VuZGVmIHRleHRkb21haW4KLSsjdW5kZWYgYmluZHRleHRkb21haW4KLSsjZGVmaW5lIHRleHRkb21haW4oRCkgICAgICAgICAgICgodm9pZCkwKQotKyNkZWZpbmUgYmluZHRleHRkb21haW4oRCxQKSAgICAgKCh2b2lkKTApCi0gI2VuZGlmCi0gCi0gICAvLyBOb24tdmlydHVhbCBtZW1iZXIgZnVuY3Rpb25zLgotQEAgLTcwLDcgKzY2LDcgQEAgZXh0ZXJuICJDIiBjaGFyICpfX2JpbmR0ZXh0ZG9tYWluKGNvbnN0IGNoYXIgKmRvbWFpbm5hbWUsCi0gICAgIG1lc3NhZ2VzPF9DaGFyVD46Om9wZW4oY29uc3QgYmFzaWNfc3RyaW5nPGNoYXI+JiBfX3MsIGNvbnN0IGxvY2FsZSYgX19sb2MsCi0gCQkJICAgY29uc3QgY2hhciogX19kaXIpIGNvbnN0Ci0gICAgIHsKLS0gICAgICBfX2JpbmR0ZXh0ZG9tYWluKF9fcy5jX3N0cigpLCBfX2Rpcik7Ci0rICAgICAgYmluZHRleHRkb21haW4oX19zLmNfc3RyKCksIF9fZGlyKTsKLSAgICAgICByZXR1cm4gdGhpcy0+ZG9fb3BlbihfX3MsIF9fbG9jKTsKLSAgICAgfQotIAotQEAgLTkwLDcgKzg2LDcgQEAgZXh0ZXJuICJDIiBjaGFyICpfX2JpbmR0ZXh0ZG9tYWluKGNvbnN0IGNoYXIgKmRvbWFpbm5hbWUsCi0gICAgIHsKLSAgICAgICAvLyBObyBlcnJvciBjaGVja2luZyBpcyBkb25lLCBhc3N1bWUgdGhlIGNhdGFsb2cgZXhpc3RzIGFuZCBjYW4KLSAgICAgICAvLyBiZSB1c2VkLgotLSAgICAgIF9fdGV4dGRvbWFpbihfX3MuY19zdHIoKSk7Ci0rICAgICAgdGV4dGRvbWFpbihfX3MuY19zdHIoKSk7Ci0gICAgICAgcmV0dXJuIDA7Ci0gICAgIH0KLSAKLWRpZmYgLS1naXQgYS9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvbW9uZXRhcnlfbWVtYmVycy5jYyBiL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9tb25ldGFyeV9tZW1iZXJzLmNjCi1pbmRleCBhYTUyNzMxLi4yZTZmODBhIDEwMDY0NAotLS0tIGEvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL21vbmV0YXJ5X21lbWJlcnMuY2MKLSsrKyBiL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9tb25ldGFyeV9tZW1iZXJzLmNjCi1AQCAtNDMsMTAgKzQzLDYgQEAKLSAjd2FybmluZyB0YWlsb3IgZm9yIHN0dWIgbG9jYWxlIHN1cHBvcnQKLSAjZW5kaWYKLSAKLS0jaWZuZGVmIF9fVUNMSUJDX0hBU19YTE9DQUxFX18KLS0jZGVmaW5lIF9fbmxfbGFuZ2luZm9fbChOLCBMKSAgICAgICAgIG5sX2xhbmdpbmZvKChOKSkKLS0jZW5kaWYKLS0KLSBuYW1lc3BhY2Ugc3RkCi0gewotICAgLy8gQ29uc3RydWN0IGFuZCByZXR1cm4gdmFsaWQgcGF0dGVybiBjb25zaXN0aW5nIG9mIHNvbWUgY29tYmluYXRpb24gb2Y6Ci1kaWZmIC0tZ2l0IGEvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL251bWVyaWNfbWVtYmVycy5jYyBiL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9udW1lcmljX21lbWJlcnMuY2MKLWluZGV4IDg4M2VjMWEuLjJjNzA2NDIgMTAwNjQ0Ci0tLS0gYS9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvbnVtZXJpY19tZW1iZXJzLmNjCi0rKysgYi9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvbnVtZXJpY19tZW1iZXJzLmNjCi1AQCAtNDEsOSArNDEsNiBAQAotICNpZmRlZiBfX1VDTElCQ19NSk4zX09OTFlfXwotICN3YXJuaW5nIHRhaWxvciBmb3Igc3R1YiBsb2NhbGUgc3VwcG9ydAotICNlbmRpZgotLSNpZm5kZWYgX19VQ0xJQkNfSEFTX1hMT0NBTEVfXwotLSNkZWZpbmUgX19ubF9sYW5naW5mb19sKE4sIEwpICAgICAgICAgbmxfbGFuZ2luZm8oKE4pKQotLSNlbmRpZgotIAotIG5hbWVzcGFjZSBzdGQKLSB7Ci1kaWZmIC0tZ2l0IGEvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL3RpbWVfbWVtYmVycy5jYyBiL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy90aW1lX21lbWJlcnMuY2MKLWluZGV4IGUwNzA3ZDcuLmQ4NDhlZDUgMTAwNjQ0Ci0tLS0gYS9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvdGltZV9tZW1iZXJzLmNjCi0rKysgYi9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvdGltZV9tZW1iZXJzLmNjCi1AQCAtNDAsOSArNDAsNiBAQAotICNpZmRlZiBfX1VDTElCQ19NSk4zX09OTFlfXwotICN3YXJuaW5nIHRhaWxvciBmb3Igc3R1YiBsb2NhbGUgc3VwcG9ydAotICNlbmRpZgotLSNpZm5kZWYgX19VQ0xJQkNfSEFTX1hMT0NBTEVfXwotLSNkZWZpbmUgX19ubF9sYW5naW5mb19sKE4sIEwpICAgICAgICAgbmxfbGFuZ2luZm8oKE4pKQotLSNlbmRpZgotIAotIG5hbWVzcGFjZSBzdGQKLSB7Ci0tLSAKLTEuNy4xMC40Ci0KZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy00LjkvMDAwNi11Y2xpYmMtbG9jYWxlLXdjaGFyX2ZpeC5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy00LjkvMDAwNi11Y2xpYmMtbG9jYWxlLXdjaGFyX2ZpeC5wYXRjaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzQwNjg1OS4uMDAwMDAwMAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNC45LzAwMDYtdWNsaWJjLWxvY2FsZS13Y2hhcl9maXgucGF0Y2gKKysrIC9kZXYvbnVsbApAQCAtMSw2OCArMCwwIEBACi1Gcm9tIDIyNTUxMWEzYWViMTkzYTkxNmIzOTk5ZjBiNjQwYTM5MmNhYTY3Y2QgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCi1Gcm9tOiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgotRGF0ZTogRnJpLCAyOSBNYXIgMjAxMyAwODo0NTo1NyArMDQwMAotU3ViamVjdDogW1BBVENIIDA2LzM1XSB1Y2xpYmMtbG9jYWxlLXdjaGFyX2ZpeAotCi1TaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgotCi1VcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKLS0tLQotIGxpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9tb25ldGFyeV9tZW1iZXJzLmNjIHwgICAgNCArKy0tCi0gbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL251bWVyaWNfbWVtYmVycy5jYyAgfCAgIDEzICsrKysrKysrKysrKysKLSAyIGZpbGVzIGNoYW5nZWQsIDE1IGluc2VydGlvbnMoKyksIDIgZGVsZXRpb25zKC0pCi0KLWRpZmYgLS1naXQgYS9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvbW9uZXRhcnlfbWVtYmVycy5jYyBiL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9tb25ldGFyeV9tZW1iZXJzLmNjCi1pbmRleCAyZTZmODBhLi4zMWViYjlmIDEwMDY0NAotLS0tIGEvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL21vbmV0YXJ5X21lbWJlcnMuY2MKLSsrKyBiL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9tb25ldGFyeV9tZW1iZXJzLmNjCi1AQCAtNDAxLDcgKzQwMSw3IEBAIG5hbWVzcGFjZSBzdGQKLSAjIGlmZGVmIF9fVUNMSUJDX0hBU19YTE9DQUxFX18KLSAJICBfTV9kYXRhLT5fTV9kZWNpbWFsX3BvaW50ID0gX19jbG9jLT5kZWNpbWFsX3BvaW50X3djOwotIAkgIF9NX2RhdGEtPl9NX3Rob3VzYW5kc19zZXAgPSBfX2Nsb2MtPnRob3VzYW5kc19zZXBfd2M7Ci0tIyBlbHNlCi0rIyBlbGlmIGRlZmluZWQgX19VQ0xJQkNfSEFTX0xPQ0FMRV9fCi0gCSAgX01fZGF0YS0+X01fZGVjaW1hbF9wb2ludCA9IF9fZ2xvYmFsX2xvY2FsZS0+ZGVjaW1hbF9wb2ludF93YzsKLSAJICBfTV9kYXRhLT5fTV90aG91c2FuZHNfc2VwID0gX19nbG9iYWxfbG9jYWxlLT50aG91c2FuZHNfc2VwX3djOwotICMgZW5kaWYKLUBAIC01NTYsNyArNTU2LDcgQEAgbmFtZXNwYWNlIHN0ZAotICMgaWZkZWYgX19VQ0xJQkNfSEFTX1hMT0NBTEVfXwotIAkgIF9NX2RhdGEtPl9NX2RlY2ltYWxfcG9pbnQgPSBfX2Nsb2MtPmRlY2ltYWxfcG9pbnRfd2M7Ci0gCSAgX01fZGF0YS0+X01fdGhvdXNhbmRzX3NlcCA9IF9fY2xvYy0+dGhvdXNhbmRzX3NlcF93YzsKLS0jIGVsc2UKLSsjIGVsaWYgZGVmaW5lZCBfX1VDTElCQ19IQVNfTE9DQUxFX18KLSAJICBfTV9kYXRhLT5fTV9kZWNpbWFsX3BvaW50ID0gX19nbG9iYWxfbG9jYWxlLT5kZWNpbWFsX3BvaW50X3djOwotIAkgIF9NX2RhdGEtPl9NX3Rob3VzYW5kc19zZXAgPSBfX2dsb2JhbF9sb2NhbGUtPnRob3VzYW5kc19zZXBfd2M7Ci0gIyBlbmRpZgotZGlmZiAtLWdpdCBhL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9udW1lcmljX21lbWJlcnMuY2MgYi9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvbnVtZXJpY19tZW1iZXJzLmNjCi1pbmRleCAyYzcwNjQyLi5kNWM4OTYxIDEwMDY0NAotLS0tIGEvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL251bWVyaWNfbWVtYmVycy5jYwotKysrIGIvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL251bWVyaWNfbWVtYmVycy5jYwotQEAgLTEyNywxMiArMTI3LDI1IEBAIG5hbWVzcGFjZSBzdGQKLSAJewotIAkgIC8vIE5hbWVkIGxvY2FsZS4KLSAJICAvLyBOQjogSW4gdGhlIEdOVSBtb2RlbCB3Y2hhcl90IGlzIGFsd2F5cyAzMiBiaXQgd2lkZS4KLSsjaWZkZWYgX19VQ0xJQkNfTUpOM19PTkxZX18KLSsjd2FybmluZyBmaXggdGhpcy4uLiBzaG91bGQgYmUgbnVtZXJpYwotKyNlbmRpZgotKyNpZmRlZiBfX1VDTElCQ19fCi0rIyBpZmRlZiBfX1VDTElCQ19IQVNfWExPQ0FMRV9fCi0rCSAgX01fZGF0YS0+X01fZGVjaW1hbF9wb2ludCA9IF9fY2xvYy0+ZGVjaW1hbF9wb2ludF93YzsKLSsJICBfTV9kYXRhLT5fTV90aG91c2FuZHNfc2VwID0gX19jbG9jLT50aG91c2FuZHNfc2VwX3djOwotKyMgZWxpZiBkZWZpbmVkIF9fVUNMSUJDX0hBU19MT0NBTEVfXwotKwkgIF9NX2RhdGEtPl9NX2RlY2ltYWxfcG9pbnQgPSBfX2dsb2JhbF9sb2NhbGUtPmRlY2ltYWxfcG9pbnRfd2M7Ci0rCSAgX01fZGF0YS0+X01fdGhvdXNhbmRzX3NlcCA9IF9fZ2xvYmFsX2xvY2FsZS0+dGhvdXNhbmRzX3NlcF93YzsKLSsjIGVuZGlmCi0rI2Vsc2UKLSAJICB1bmlvbiB7IGNoYXIgKl9fczsgd2NoYXJfdCBfX3c7IH0gX191OwotIAkgIF9fdS5fX3MgPSBfX25sX2xhbmdpbmZvX2woX05MX05VTUVSSUNfREVDSU1BTF9QT0lOVF9XQywgX19jbG9jKTsKLSAJICBfTV9kYXRhLT5fTV9kZWNpbWFsX3BvaW50ID0gX191Ll9fdzsKLSAKLSAJICBfX3UuX19zID0gX19ubF9sYW5naW5mb19sKF9OTF9OVU1FUklDX1RIT1VTQU5EU19TRVBfV0MsIF9fY2xvYyk7Ci0gCSAgX01fZGF0YS0+X01fdGhvdXNhbmRzX3NlcCA9IF9fdS5fX3c7Ci0rI2VuZGlmCi0gCi0gCSAgaWYgKF9NX2RhdGEtPl9NX3Rob3VzYW5kc19zZXAgPT0gTCdcMCcpCi0gCSAgICBfTV9kYXRhLT5fTV9ncm91cGluZyA9ICIiOwotLS0gCi0xLjcuMTAuNAotCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNC45LzAwMDctdWNsaWJjLWxvY2FsZS11cGRhdGUucGF0Y2ggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNC45LzAwMDctdWNsaWJjLWxvY2FsZS11cGRhdGUucGF0Y2gKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDU4NTExMjMuLjAwMDAwMDAKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTQuOS8wMDA3LXVjbGliYy1sb2NhbGUtdXBkYXRlLnBhdGNoCisrKyAvZGV2L251bGwKQEAgLTEsNTQyICswLDAgQEAKLUZyb20gNmZmZTdjNDZmNTJkMjc4NjRjM2RmMzY2M2UxNmVjOWRkZWU3MWU4ZiBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKLUZyb206IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+Ci1EYXRlOiBGcmksIDI5IE1hciAyMDEzIDA4OjQ2OjU4ICswNDAwCi1TdWJqZWN0OiBbUEFUQ0ggMDcvMzVdIHVjbGliYy1sb2NhbGUtdXBkYXRlCi0KLVNpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+Ci0KLVVwc3RyZWFtLVN0YXR1czogUGVuZGluZwotLS0tCi0gLi4uL2NvbmZpZy9sb2NhbGUvdWNsaWJjL2MrK2xvY2FsZV9pbnRlcm5hbC5oICAgICAgfCAgICAzICsKLSBsaWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvY19sb2NhbGUuY2MgICAgICB8ICAgNzQgKysrKysrKysrLS0tLS0tLS0tLS0KLSBsaWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvY19sb2NhbGUuaCAgICAgICB8ICAgNDIgKysrKysrLS0tLS0KLSBsaWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvY3R5cGVfbWVtYmVycy5jYyB8ICAgNTEgKysrKysrKysrKy0tLS0KLSAuLi4vY29uZmlnL2xvY2FsZS91Y2xpYmMvbWVzc2FnZXNfbWVtYmVycy5oICAgICAgICB8ICAgMTIgKystLQotIC4uLi9jb25maWcvbG9jYWxlL3VjbGliYy9tb25ldGFyeV9tZW1iZXJzLmNjICAgICAgIHwgICAzNCArKysrKy0tLS0KLSAuLi4vY29uZmlnL2xvY2FsZS91Y2xpYmMvbnVtZXJpY19tZW1iZXJzLmNjICAgICAgICB8ICAgIDUgKysKLSBsaWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvdGltZV9tZW1iZXJzLmNjICB8ICAgMTggKysrLS0KLSBsaWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvdGltZV9tZW1iZXJzLmggICB8ICAgMTcgKysrLS0KLSA5IGZpbGVzIGNoYW5nZWQsIDE1OCBpbnNlcnRpb25zKCspLCA5OCBkZWxldGlvbnMoLSkKLQotZGlmZiAtLWdpdCBhL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9jKytsb2NhbGVfaW50ZXJuYWwuaCBiL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9jKytsb2NhbGVfaW50ZXJuYWwuaAotaW5kZXggZTc0ZmRkZi4uOTcxYTZiNCAxMDA2NDQKLS0tLSBhL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9jKytsb2NhbGVfaW50ZXJuYWwuaAotKysrIGIvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL2MrK2xvY2FsZV9pbnRlcm5hbC5oCi1AQCAtMzEsNiArMzEsOSBAQAotIAotICNpbmNsdWRlIDxiaXRzL2MrK2NvbmZpZy5oPgotICNpbmNsdWRlIDxjbG9jYWxlPgotKyNpbmNsdWRlIDxjc3RkbGliPgotKyNpbmNsdWRlIDxjc3RyaW5nPgotKyNpbmNsdWRlIDxjc3RkZGVmPgotIAotICNpZmRlZiBfX1VDTElCQ19NSk4zX09OTFlfXwotICN3YXJuaW5nIGNsZWFuIHRoaXMgdXAKLWRpZmYgLS1naXQgYS9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvY19sb2NhbGUuY2MgYi9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvY19sb2NhbGUuY2MKLWluZGV4IDIxNDMwZDAuLjFiOWQ4ZTEgMTAwNjQ0Ci0tLS0gYS9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvY19sb2NhbGUuY2MKLSsrKyBiL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9jX2xvY2FsZS5jYwotQEAgLTM5LDIzICszOSwyMCBAQAotICNpbmNsdWRlIDxsYW5naW5mby5oPgotICNpbmNsdWRlIDxiaXRzL2MrK2xvY2FsZV9pbnRlcm5hbC5oPgotIAotLW5hbWVzcGFjZSBzdGQKLS17Ci0rX0dMSUJDWFhfQkVHSU5fTkFNRVNQQUNFKHN0ZCkKLSsKLSAgIHRlbXBsYXRlPD4KLSAgICAgdm9pZAotICAgICBfX2NvbnZlcnRfdG9fdihjb25zdCBjaGFyKiBfX3MsIGZsb2F0JiBfX3YsIGlvc19iYXNlOjppb3N0YXRlJiBfX2VyciwKLSAJCSAgIGNvbnN0IF9fY19sb2NhbGUmIF9fY2xvYykKLSAgICAgewotLSAgICAgIGlmICghKF9fZXJyICYgaW9zX2Jhc2U6OmZhaWxiaXQpKQotLQl7Ci0tCSAgY2hhciogX19zYW5pdHk7Ci0tCSAgZXJybm8gPSAwOwotLQkgIGZsb2F0IF9fZiA9IF9fc3RydG9mX2woX19zLCAmX19zYW5pdHksIF9fY2xvYyk7Ci0tICAgICAgICAgIGlmIChfX3Nhbml0eSAhPSBfX3MgJiYgZXJybm8gIT0gRVJBTkdFKQotLQkgICAgX192ID0gX19mOwotLQkgIGVsc2UKLS0JICAgIF9fZXJyIHw9IGlvc19iYXNlOjpmYWlsYml0OwotLQl9Ci0rICAgICAgY2hhciogX19zYW5pdHk7Ci0rICAgICAgZXJybm8gPSAwOwotKyAgICAgIGZsb2F0IF9fZiA9IF9fc3RydG9mX2woX19zLCAmX19zYW5pdHksIF9fY2xvYyk7Ci0rICAgICAgaWYgKF9fc2FuaXR5ICE9IF9fcyAmJiBlcnJubyAhPSBFUkFOR0UpCi0rCV9fdiA9IF9fZjsKLSsgICAgICBlbHNlCi0rCV9fZXJyIHw9IGlvc19iYXNlOjpmYWlsYml0OwotICAgICB9Ci0gCi0gICB0ZW1wbGF0ZTw+Ci1AQCAtNjMsMTYgKzYwLDEzIEBAIG5hbWVzcGFjZSBzdGQKLSAgICAgX19jb252ZXJ0X3RvX3YoY29uc3QgY2hhciogX19zLCBkb3VibGUmIF9fdiwgaW9zX2Jhc2U6Omlvc3RhdGUmIF9fZXJyLAotIAkJICAgY29uc3QgX19jX2xvY2FsZSYgX19jbG9jKQotICAgICB7Ci0tICAgICAgaWYgKCEoX19lcnIgJiBpb3NfYmFzZTo6ZmFpbGJpdCkpCi0tCXsKLS0JICBjaGFyKiBfX3Nhbml0eTsKLS0JICBlcnJubyA9IDA7Ci0tCSAgZG91YmxlIF9fZCA9IF9fc3RydG9kX2woX19zLCAmX19zYW5pdHksIF9fY2xvYyk7Ci0tICAgICAgICAgIGlmIChfX3Nhbml0eSAhPSBfX3MgJiYgZXJybm8gIT0gRVJBTkdFKQotLQkgICAgX192ID0gX19kOwotLQkgIGVsc2UKLS0JICAgIF9fZXJyIHw9IGlvc19iYXNlOjpmYWlsYml0OwotLQl9Ci0rICAgICAgY2hhciogX19zYW5pdHk7Ci0rICAgICAgZXJybm8gPSAwOwotKyAgICAgIGRvdWJsZSBfX2QgPSBfX3N0cnRvZF9sKF9fcywgJl9fc2FuaXR5LCBfX2Nsb2MpOwotKyAgICAgIGlmIChfX3Nhbml0eSAhPSBfX3MgJiYgZXJybm8gIT0gRVJBTkdFKQotKwlfX3YgPSBfX2Q7Ci0rICAgICAgZWxzZQotKwlfX2VyciB8PSBpb3NfYmFzZTo6ZmFpbGJpdDsKLSAgICAgfQotIAotICAgdGVtcGxhdGU8PgotQEAgLTgwLDE2ICs3NCwxMyBAQCBuYW1lc3BhY2Ugc3RkCi0gICAgIF9fY29udmVydF90b192KGNvbnN0IGNoYXIqIF9fcywgbG9uZyBkb3VibGUmIF9fdiwgaW9zX2Jhc2U6Omlvc3RhdGUmIF9fZXJyLAotIAkJICAgY29uc3QgX19jX2xvY2FsZSYgX19jbG9jKQotICAgICB7Ci0tICAgICAgaWYgKCEoX19lcnIgJiBpb3NfYmFzZTo6ZmFpbGJpdCkpCi0tCXsKLS0JICBjaGFyKiBfX3Nhbml0eTsKLS0JICBlcnJubyA9IDA7Ci0tCSAgbG9uZyBkb3VibGUgX19sZCA9IF9fc3RydG9sZF9sKF9fcywgJl9fc2FuaXR5LCBfX2Nsb2MpOwotLSAgICAgICAgICBpZiAoX19zYW5pdHkgIT0gX19zICYmIGVycm5vICE9IEVSQU5HRSkKLS0JICAgIF9fdiA9IF9fbGQ7Ci0tCSAgZWxzZQotLQkgICAgX19lcnIgfD0gaW9zX2Jhc2U6OmZhaWxiaXQ7Ci0tCX0KLSsgICAgICBjaGFyKiBfX3Nhbml0eTsKLSsgICAgICBlcnJubyA9IDA7Ci0rICAgICAgbG9uZyBkb3VibGUgX19sZCA9IF9fc3RydG9sZF9sKF9fcywgJl9fc2FuaXR5LCBfX2Nsb2MpOwotKyAgICAgIGlmIChfX3Nhbml0eSAhPSBfX3MgJiYgZXJybm8gIT0gRVJBTkdFKQotKwlfX3YgPSBfX2xkOwotKyAgICAgIGVsc2UKLSsJX19lcnIgfD0gaW9zX2Jhc2U6OmZhaWxiaXQ7Ci0gICAgIH0KLSAKLSAgIHZvaWQKLUBAIC0xMTAsMTcgKzEwMSwxOCBAQCBuYW1lc3BhY2Ugc3RkCi0gICB2b2lkCi0gICBsb2NhbGU6OmZhY2V0OjpfU19kZXN0cm95X2NfbG9jYWxlKF9fY19sb2NhbGUmIF9fY2xvYykKLSAgIHsKLS0gICAgaWYgKF9TX2dldF9jX2xvY2FsZSgpICE9IF9fY2xvYykKLSsgICAgaWYgKF9fY2xvYyAmJiBfU19nZXRfY19sb2NhbGUoKSAhPSBfX2Nsb2MpCi0gICAgICAgX19mcmVlbG9jYWxlKF9fY2xvYyk7Ci0gICB9Ci0gCi0gICBfX2NfbG9jYWxlCi0gICBsb2NhbGU6OmZhY2V0OjpfU19jbG9uZV9jX2xvY2FsZShfX2NfbG9jYWxlJiBfX2Nsb2MpCi0gICB7IHJldHVybiBfX2R1cGxvY2FsZShfX2Nsb2MpOyB9Ci0tfSAvLyBuYW1lc3BhY2Ugc3RkCi0gCi0tbmFtZXNwYWNlIF9fZ251X2N4eAotLXsKLStfR0xJQkNYWF9FTkRfTkFNRVNQQUNFCi0rCi0rX0dMSUJDWFhfQkVHSU5fTkFNRVNQQUNFKF9fZ251X2N4eCkKLSsKLSAgIGNvbnN0IGNoYXIqIGNvbnN0IGNhdGVnb3J5X25hbWVzWzYgKyBfR0xJQkNYWF9OVU1fQ0FURUdPUklFU10gPQotICAgICB7Ci0gICAgICAgIkxDX0NUWVBFIiwKLUBAIC0xMzgsOSArMTMwLDExIEBAIG5hbWVzcGFjZSBfX2dudV9jeHgKLSAgICAgICAiTENfSURFTlRJRklDQVRJT04iCi0gI2VuZGlmCi0gICAgIH07Ci0tfQotIAotLW5hbWVzcGFjZSBzdGQKLS17Ci0rX0dMSUJDWFhfRU5EX05BTUVTUEFDRQotKwotK19HTElCQ1hYX0JFR0lOX05BTUVTUEFDRShzdGQpCi0rCi0gICBjb25zdCBjaGFyKiBjb25zdCogY29uc3QgbG9jYWxlOjpfU19jYXRlZ29yaWVzID0gX19nbnVfY3h4OjpjYXRlZ29yeV9uYW1lczsKLS19ICAvLyBuYW1lc3BhY2Ugc3RkCi0rCi0rX0dMSUJDWFhfRU5EX05BTUVTUEFDRQotZGlmZiAtLWdpdCBhL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9jX2xvY2FsZS5oIGIvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL2NfbG9jYWxlLmgKLWluZGV4IDRiY2E1ZjEuLjY0YTZkNDYgMTAwNjQ0Ci0tLS0gYS9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvY19sb2NhbGUuaAotKysrIGIvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL2NfbG9jYWxlLmgKLUBAIC0zOSwyMSArMzksMjMgQEAKLSAjcHJhZ21hIEdDQyBzeXN0ZW1faGVhZGVyCi0gCi0gI2luY2x1ZGUgPGNzdHJpbmc+ICAgICAgICAgICAgICAvLyBnZXQgc3RkOjpzdHJsZW4KLS0jaW5jbHVkZSA8Y3N0ZGlvPiAgICAgICAgICAgICAgIC8vIGdldCBzdGQ6OnNucHJpbnRmIG9yIHN0ZDo6c3ByaW50ZgotKyNpbmNsdWRlIDxjc3RkaW8+ICAgICAgICAgICAgICAgLy8gZ2V0IHN0ZDo6dnNucHJpbnRmIG9yIHN0ZDo6dnNwcmludGYKLSAjaW5jbHVkZSA8Y2xvY2FsZT4KLSAjaW5jbHVkZSA8bGFuZ2luZm8uaD4JCS8vIEZvciBjb2RlY3Z0Ci0gI2lmZGVmIF9fVUNMSUJDX01KTjNfT05MWV9fCi0gI3dhcm5pbmcgZml4IHRoaXMKLSAjZW5kaWYKLS0jaWZkZWYgX19VQ0xJQkNfSEFTX0xPQ0FMRV9fCi0rI2lmZGVmIF9HTElCQ1hYX1VTRV9JQ09OVgotICNpbmNsdWRlIDxpY29udi5oPgkJLy8gRm9yIGNvZGVjdnQgdXNpbmcgaWNvbnYsIGljb252X3QKLSAjZW5kaWYKLS0jaWZkZWYgX19VQ0xJQkNfSEFTX0dFVFRFWFRfQVdBUkVORVNTX18KLS0jaW5jbHVkZSA8bGliaW50bC5oPiAJCS8vIEZvciBtZXNzYWdlcwotKyNpZmRlZiBIQVZFX0xJQklOVExfSAotKyNpbmNsdWRlIDxsaWJpbnRsLmg+CQkvLyBGb3IgbWVzc2FnZXMKLSAjZW5kaWYKLSsjaW5jbHVkZSA8Y3N0ZGFyZz4KLSAKLSAjaWZkZWYgX19VQ0xJQkNfTUpOM19PTkxZX18KLSAjd2FybmluZyB3aGF0IGlzIF9HTElCQ1hYX0NfTE9DQUxFX0dOVSBmb3IKLSsvLyBwc206IHVzZWQgaW4gb3MvZ251LWxpbnV4L2N0eXBlX25vbmlubGluZS5oCi0gI2VuZGlmCi0gI2RlZmluZSBfR0xJQkNYWF9DX0xPQ0FMRV9HTlUgMQotIAotQEAgLTc4LDIzICs4MCwyNSBAQCBuYW1lc3BhY2Ugc3RkCi0gI2Vsc2UKLSAgIHR5cGVkZWYgaW50KgkJCV9fY19sb2NhbGU7Ci0gI2VuZGlmCi0tCi0tICAvLyBDb252ZXJ0IG51bWVyaWMgdmFsdWUgb2YgdHlwZSBfVHYgdG8gc3RyaW5nIGFuZCByZXR1cm4gbGVuZ3RoIG9mCi0tICAvLyBzdHJpbmcuICBJZiBzbnByaW50ZiBpcyBhdmFpbGFibGUgdXNlIGl0LCBvdGhlcndpc2UgZmFsbCBiYWNrIHRvCi0tICAvLyB0aGUgdW5zYWZlIHNwcmludGYgd2hpY2gsIGluIGdlbmVyYWwsIGNhbiBiZSBkYW5nZXJvdXMgYW5kIHNob3VsZAotKyAgLy8gQ29udmVydCBudW1lcmljIHZhbHVlIG9mIHR5cGUgZG91YmxlIHRvIHN0cmluZyBhbmQgcmV0dXJuIGxlbmd0aCBvZgotKyAgLy8gc3RyaW5nLiAgSWYgdnNucHJpbnRmIGlzIGF2YWlsYWJsZSB1c2UgaXQsIG90aGVyd2lzZSBmYWxsIGJhY2sgdG8KLSsgIC8vIHRoZSB1bnNhZmUgdnNwcmludGYgd2hpY2gsIGluIGdlbmVyYWwsIGNhbiBiZSBkYW5nZXJvdXMgYW5kIHNob3VsZAotICAgLy8gYmUgYXZvaWRlZC4KLS0gIHRlbXBsYXRlPHR5cGVuYW1lIF9Udj4KLS0gICAgaW50Ci0tICAgIF9fY29udmVydF9mcm9tX3YoY2hhciogX19vdXQsCi0tCQkgICAgIGNvbnN0IGludCBfX3NpemUgX19hdHRyaWJ1dGVfXyAoKF9fdW51c2VkX18pKSwKLS0JCSAgICAgY29uc3QgY2hhciogX19mbXQsCi0tI2lmZGVmIF9fVUNMSUJDX0hBU19YQ0xPQ0FMRV9fCi0tCQkgICAgIF9UdiBfX3YsIGNvbnN0IF9fY19sb2NhbGUmIF9fY2xvYywgaW50IF9fcHJlYykKLSsgICAgaW5saW5lIGludAotKyAgICBfX2NvbnZlcnRfZnJvbV92KGNvbnN0IF9fY19sb2NhbGUmCi0rI2lmbmRlZiBfX1VDTElCQ19IQVNfWENMT0NBTEVfXwotKwlfX2Nsb2MgX19hdHRyaWJ1dGVfXyAoKF9fdW51c2VkX18pKQotKyNlbmRpZgotKwkJICAgICAsCi0rCQkgICAgIGNoYXIqIF9fb3V0LAotKwkJICAgICBjb25zdCBpbnQgX19zaXplLAotKwkJICAgICBjb25zdCBjaGFyKiBfX2ZtdCwgLi4uKQotICAgICB7Ci0rICAgICAgdmFfbGlzdCBfX2FyZ3M7Ci0rI2lmZGVmIF9fVUNMSUJDX0hBU19YQ0xPQ0FMRV9fCi0rCi0gICAgICAgX19jX2xvY2FsZSBfX29sZCA9IF9fZ251X2N4eDo6X191c2Vsb2NhbGUoX19jbG9jKTsKLSAjZWxzZQotLQkJICAgICBfVHYgX192LCBjb25zdCBfX2NfbG9jYWxlJiwgaW50IF9fcHJlYykKLS0gICAgewotICMgaWZkZWYgX19VQ0xJQkNfSEFTX0xPQ0FMRV9fCi0gICAgICAgY2hhciogX19vbGQgPSBzdGQ6OnNldGxvY2FsZShMQ19BTEwsIE5VTEwpOwotICAgICAgIGNoYXIqIF9fc2F2ID0gbmV3IGNoYXJbc3RkOjpzdHJsZW4oX19vbGQpICsgMV07Ci1AQCAtMTAzLDcgKzEwNyw5IEBAIG5hbWVzcGFjZSBzdGQKLSAjIGVuZGlmCi0gI2VuZGlmCi0gCi0tICAgICAgY29uc3QgaW50IF9fcmV0ID0gc3RkOjpzbnByaW50ZihfX291dCwgX19zaXplLCBfX2ZtdCwgX19wcmVjLCBfX3YpOwotKyAgICAgIHZhX3N0YXJ0KF9fYXJncywgX19mbXQpOwotKyAgICAgIGNvbnN0IGludCBfX3JldCA9IHN0ZDo6dnNucHJpbnRmKF9fb3V0LCBfX3NpemUsIF9fZm10LCBfX2FyZ3MpOwotKyAgICAgIHZhX2VuZChfX2FyZ3MpOwotIAotICNpZmRlZiBfX1VDTElCQ19IQVNfWENMT0NBTEVfXwotICAgICAgIF9fZ251X2N4eDo6X191c2Vsb2NhbGUoX19vbGQpOwotZGlmZiAtLWdpdCBhL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9jdHlwZV9tZW1iZXJzLmNjIGIvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL2N0eXBlX21lbWJlcnMuY2MKLWluZGV4IDdiMTI4NjEuLjEzZTAxMWQgMTAwNjQ0Ci0tLS0gYS9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvY3R5cGVfbWVtYmVycy5jYwotKysrIGIvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL2N0eXBlX21lbWJlcnMuY2MKLUBAIC0zMywxNiArMzMsMjAgQEAKLSAKLSAvLyBXcml0dGVuIGJ5IEJlbmphbWluIEtvc25payA8YmtvekByZWRoYXQuY29tPgotIAotKyNpbmNsdWRlIDxmZWF0dXJlcy5oPgotKyNpZmRlZiBfX1VDTElCQ19IQVNfTE9DQUxFX18KLSAjZGVmaW5lIF9MSUJDCi0gI2luY2x1ZGUgPGxvY2FsZT4KLSAjdW5kZWYgX0xJQkMKLSsjZWxzZQotKyNpbmNsdWRlIDxsb2NhbGU+Ci0rI2VuZGlmCi0gI2luY2x1ZGUgPGJpdHMvYysrbG9jYWxlX2ludGVybmFsLmg+Ci0gCi0tbmFtZXNwYWNlIHN0ZAotLXsKLStfR0xJQkNYWF9CRUdJTl9OQU1FU1BBQ0Uoc3RkKQotKwotICAgLy8gTkI6IFRoZSBvdGhlciBjdHlwZTxjaGFyPiBzcGVjaWFsaXphdGlvbnMgYXJlIGluIHNyYy9sb2NhbGUuY2MgYW5kCi0gICAvLyB2YXJpb3VzIC9jb25maWcvb3MvKiBmaWxlcy4KLS0gIHRlbXBsYXRlPD4KLSAgICAgY3R5cGVfYnluYW1lPGNoYXI+OjpjdHlwZV9ieW5hbWUoY29uc3QgY2hhciogX19zLCBzaXplX3QgX19yZWZzKQotICAgICA6IGN0eXBlPGNoYXI+KDAsIGZhbHNlLCBfX3JlZnMpCi0gICAgIHsKLUBAIC01Nyw2ICs2MSw4IEBAIG5hbWVzcGFjZSBzdGQKLSAjZW5kaWYKLSAJfQotICAgICB9Ci0rICAgIGN0eXBlX2J5bmFtZTxjaGFyPjo6fmN0eXBlX2J5bmFtZSgpCi0rICAgIHsgfQotIAotICNpZmRlZiBfR0xJQkNYWF9VU0VfV0NIQVJfVAotICAgY3R5cGU8d2NoYXJfdD46Ol9fd21hc2tfdHlwZQotQEAgLTEzOCwxNyArMTQ0LDMzIEBAIG5hbWVzcGFjZSBzdGQKLSAgIGN0eXBlPHdjaGFyX3Q+OjoKLSAgIGRvX2lzKG1hc2sgX19tLCB3Y2hhcl90IF9fYykgY29uc3QKLSAgIHsKLS0gICAgLy8gSGlnaGVzdCBiaXRtYXNrIGluIGN0eXBlX2Jhc2UgPT0gMTAsIGJ1dCBleHRyYSBpbiAiQyIKLS0gICAgLy8gbGlicmFyeSBmb3IgYmxhbmsuCi0rICAgIC8vIFRoZSBjYXNlIG9mIF9fbSA9PSBjdHlwZV9iYXNlOjpzcGFjZSBpcyBwYXJ0aWN1bGFybHkgaW1wb3J0YW50LAotKyAgICAvLyBkdWUgdG8gaXRzIHVzZSBpbiBtYW55IGlzdHJlYW0gZnVuY3Rpb25zLiAgVGhlcmVmb3JlIHdlIGRlYWwgd2l0aAotKyAgICAvLyBpdCBmaXJzdCwgZXhwbG9pdGluZyB0aGUga25vd2xlZGdlIHRoYXQgb24gR05VIHN5c3RlbXMgX01fYml0WzVdCi0rICAgIC8vIGlzIHRoZSBtYXNrIGNvcnJlc3BvbmRpbmcgdG8gY3R5cGVfYmFzZTo6c3BhY2UuICBOQjogYW4gZW5jb2RpbmcKLSsgICAgLy8gY2hhbmdlIHdvdWxkIG5vdCBhZmZlY3QgY29ycmVjdG5lc3MhCi0rCi0gICAgIGJvb2wgX19yZXQgPSBmYWxzZTsKLS0gICAgY29uc3Qgc2l6ZV90IF9fYml0bWFza3NpemUgPSAxMTsKLS0gICAgZm9yIChzaXplX3QgX19iaXRjdXIgPSAwOyBfX2JpdGN1ciA8PSBfX2JpdG1hc2tzaXplOyArK19fYml0Y3VyKQotLSAgICAgIGlmIChfX20gJiBfTV9iaXRbX19iaXRjdXJdCi0tCSAgJiYgX19pc3djdHlwZV9sKF9fYywgX01fd21hc2tbX19iaXRjdXJdLCBfTV9jX2xvY2FsZV9jdHlwZSkpCi0tCXsKLS0JICBfX3JldCA9IHRydWU7Ci0tCSAgYnJlYWs7Ci0tCX0KLSsgICAgaWYgKF9fbSA9PSBfTV9iaXRbNV0pCi0rICAgICAgX19yZXQgPSBfX2lzd2N0eXBlX2woX19jLCBfTV93bWFza1s1XSwgX01fY19sb2NhbGVfY3R5cGUpOwotKyAgICBlbHNlCi0rICAgICAgewotKwkvLyBIaWdoZXN0IGJpdG1hc2sgaW4gY3R5cGVfYmFzZSA9PSAxMCwgYnV0IGV4dHJhIGluICJDIgotKwkvLyBsaWJyYXJ5IGZvciBibGFuay4KLSsJY29uc3Qgc2l6ZV90IF9fYml0bWFza3NpemUgPSAxMTsKLSsJZm9yIChzaXplX3QgX19iaXRjdXIgPSAwOyBfX2JpdGN1ciA8PSBfX2JpdG1hc2tzaXplOyArK19fYml0Y3VyKQotKwkgIGlmIChfX20gJiBfTV9iaXRbX19iaXRjdXJdKQotKwkgICAgewotKwkgICAgICBpZiAoX19pc3djdHlwZV9sKF9fYywgX01fd21hc2tbX19iaXRjdXJdLCBfTV9jX2xvY2FsZV9jdHlwZSkpCi0rCQl7Ci0rCQkgIF9fcmV0ID0gdHJ1ZTsKLSsJCSAgYnJlYWs7Ci0rCQl9Ci0rCSAgICAgIGVsc2UgaWYgKF9fbSA9PSBfTV9iaXRbX19iaXRjdXJdKQotKwkJYnJlYWs7Ci0rCSAgICB9Ci0rICAgICAgfQotKwotICAgICByZXR1cm4gX19yZXQ7Ci0gICB9Ci0gCi1AQCAtMjkwLDQgKzMxMiw1IEBAIG5hbWVzcGFjZSBzdGQKLSAjZW5kaWYKLSAgIH0KLSAjZW5kaWYgLy8gIF9HTElCQ1hYX1VTRV9XQ0hBUl9UCi0tfQotKwotK19HTElCQ1hYX0VORF9OQU1FU1BBQ0UKLWRpZmYgLS1naXQgYS9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvbWVzc2FnZXNfbWVtYmVycy5oIGIvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL21lc3NhZ2VzX21lbWJlcnMuaAotaW5kZXggZDg5ZGEzMy4uMDY3NjU3YSAxMDA2NDQKLS0tLSBhL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9tZXNzYWdlc19tZW1iZXJzLmgKLSsrKyBiL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9tZXNzYWdlc19tZW1iZXJzLmgKLUBAIC01MywxMiArNTMsMTYgQEAKLSAgIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4KLSAgICAgIG1lc3NhZ2VzPF9DaGFyVD46Om1lc3NhZ2VzKF9fY19sb2NhbGUgX19jbG9jLCBjb25zdCBjaGFyKiBfX3MsCi0gCQkJCXNpemVfdCBfX3JlZnMpCi0tICAgICA6IGZhY2V0KF9fcmVmcyksIF9NX2NfbG9jYWxlX21lc3NhZ2VzKF9TX2Nsb25lX2NfbG9jYWxlKF9fY2xvYykpLAotLSAgICAgX01fbmFtZV9tZXNzYWdlcyhfX3MpCi0rICAgICA6IGZhY2V0KF9fcmVmcyksIF9NX2NfbG9jYWxlX21lc3NhZ2VzKE5VTEwpLAotKyAgICAgX01fbmFtZV9tZXNzYWdlcyhOVUxMKQotICAgICAgewotLSAgICAgICBjaGFyKiBfX3RtcCA9IG5ldyBjaGFyW3N0ZDo6c3RybGVuKF9fcykgKyAxXTsKLS0gICAgICAgc3RkOjpzdHJjcHkoX190bXAsIF9fcyk7Ci0rICAgICAgIGNvbnN0IHNpemVfdCBfX2xlbiA9IHN0ZDo6c3RybGVuKF9fcykgKyAxOwotKyAgICAgICBjaGFyKiBfX3RtcCA9IG5ldyBjaGFyW19fbGVuXTsKLSsgICAgICAgc3RkOjptZW1jcHkoX190bXAsIF9fcywgX19sZW4pOwotICAgICAgICBfTV9uYW1lX21lc3NhZ2VzID0gX190bXA7Ci0rCi0rICAgICAgIC8vIExhc3QgdG8gYXZvaWQgbGVha2luZyBtZW1vcnkgaWYgbmV3IHRocm93cy4KLSsgICAgICAgX01fY19sb2NhbGVfbWVzc2FnZXMgPSBfU19jbG9uZV9jX2xvY2FsZShfX2Nsb2MpOwotICAgICAgfQotIAotICAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPgotZGlmZiAtLWdpdCBhL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9tb25ldGFyeV9tZW1iZXJzLmNjIGIvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL21vbmV0YXJ5X21lbWJlcnMuY2MKLWluZGV4IDMxZWJiOWYuLjc2NzliOWMgMTAwNjQ0Ci0tLS0gYS9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvbW9uZXRhcnlfbWVtYmVycy5jYwotKysrIGIvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL21vbmV0YXJ5X21lbWJlcnMuY2MKLUBAIC0zMyw5ICszMywxNCBAQAotIAotIC8vIFdyaXR0ZW4gYnkgQmVuamFtaW4gS29zbmlrIDxia296QHJlZGhhdC5jb20+Ci0gCi0rI2luY2x1ZGUgPGZlYXR1cmVzLmg+Ci0rI2lmZGVmIF9fVUNMSUJDX0hBU19MT0NBTEVfXwotICNkZWZpbmUgX0xJQkMKLSAjaW5jbHVkZSA8bG9jYWxlPgotICN1bmRlZiBfTElCQwotKyNlbHNlCi0rI2luY2x1ZGUgPGxvY2FsZT4KLSsjZW5kaWYKLSAjaW5jbHVkZSA8Yml0cy9jKytsb2NhbGVfaW50ZXJuYWwuaD4KLSAKLSAjaWZkZWYgX19VQ0xJQkNfTUpOM19PTkxZX18KLUBAIC0yMDYsNyArMjExLDcgQEAgbmFtZXNwYWNlIHN0ZAotIAkgIH0KLSAJYnJlYWs7Ci0gICAgICAgZGVmYXVsdDoKLS0JOwotKwlfX3JldCA9IHBhdHRlcm4oKTsKLSAgICAgICB9Ci0gICAgIHJldHVybiBfX3JldDsKLSAgIH0KLUBAIC0zOTAsNyArMzk1LDkgQEAgbmFtZXNwYWNlIHN0ZAotIAkgIF9fY19sb2NhbGUgX19vbGQgPSBfX3VzZWxvY2FsZShfX2Nsb2MpOwotICNlbHNlCi0gCSAgLy8gU3dpdGNoIHRvIG5hbWVkIGxvY2FsZSBzbyB0aGF0IG1ic3J0b3djcyB3aWxsIHdvcmsuCi0tCSAgY2hhciogX19vbGQgPSBzdHJkdXAoc2V0bG9jYWxlKExDX0FMTCwgTlVMTCkpOwotKyAgCSAgY2hhciogX19vbGQgPSBzZXRsb2NhbGUoTENfQUxMLCBOVUxMKTsKLSsgICAgICAgICAgY29uc3Qgc2l6ZV90IF9fbGxlbiA9IHN0cmxlbihfX29sZCkgKyAxOwotKyAgICAgICAgICBjaGFyKiBfX3NhdiA9IG5ldyBjaGFyW19fbGxlbl07Ci0gCSAgc2V0bG9jYWxlKExDX0FMTCwgX19uYW1lKTsKLSAjZW5kaWYKLSAKLUBAIC00NzcsOCArNDg0LDggQEAgbmFtZXNwYWNlIHN0ZAotICNpZmRlZiBfX1VDTElCQ19IQVNfWExPQ0FMRV9fCi0gCSAgICAgIF9fdXNlbG9jYWxlKF9fb2xkKTsKLSAjZWxzZQotLQkgICAgICBzZXRsb2NhbGUoTENfQUxMLCBfX29sZCk7Ci0tCSAgICAgIGZyZWUoX19vbGQpOwotKwkgICAgICBzZXRsb2NhbGUoTENfQUxMLCBfX3Nhdik7Ci0rCSAgICAgIGRlbGV0ZSBbXSBfX3NhdjsKLSAjZW5kaWYKLSAJICAgICAgX190aHJvd19leGNlcHRpb25fYWdhaW47Ci0gCSAgICB9Ci1AQCAtNDk4LDggKzUwNSw4IEBAIG5hbWVzcGFjZSBzdGQKLSAjaWZkZWYgX19VQ0xJQkNfSEFTX1hMT0NBTEVfXwotIAkgIF9fdXNlbG9jYWxlKF9fb2xkKTsKLSAjZWxzZQotLQkgIHNldGxvY2FsZShMQ19BTEwsIF9fb2xkKTsKLS0JICBmcmVlKF9fb2xkKTsKLSsJICBzZXRsb2NhbGUoTENfQUxMLCBfX3Nhdik7Ci0rCSAgZGVsZXRlIFtdIF9fc2F2OwotICNlbmRpZgotIAl9Ci0gICAgIH0KLUBAIC01NDUsOCArNTUyLDExIEBAIG5hbWVzcGFjZSBzdGQKLSAJICBfX2NfbG9jYWxlIF9fb2xkID0gX191c2Vsb2NhbGUoX19jbG9jKTsKLSAjZWxzZQotIAkgIC8vIFN3aXRjaCB0byBuYW1lZCBsb2NhbGUgc28gdGhhdCBtYnNydG93Y3Mgd2lsbCB3b3JrLgotLQkgIGNoYXIqIF9fb2xkID0gc3RyZHVwKHNldGxvY2FsZShMQ19BTEwsIE5VTEwpKTsKLS0JICBzZXRsb2NhbGUoTENfQUxMLCBfX25hbWUpOwotKyAgICAgICAgICBjaGFyKiBfX29sZCA9IHNldGxvY2FsZShMQ19BTEwsIE5VTEwpOwotKyAgICAgICAgICBjb25zdCBzaXplX3QgX19sbGVuID0gc3RybGVuKF9fb2xkKSArIDE7Ci0rICAgICAgICAgIGNoYXIqIF9fc2F2ID0gbmV3IGNoYXJbX19sbGVuXTsKLSsgICAgICAgICAgbWVtY3B5KF9fc2F2LCBfX29sZCwgX19sbGVuKTsKLSsgICAgICAgICAgc2V0bG9jYWxlKExDX0FMTCwgX19uYW1lKTsKLSAjZW5kaWYKLSAKLSAjaWZkZWYgX19VQ0xJQkNfTUpOM19PTkxZX18KLUBAIC02MzMsOCArNjQzLDggQEAgbmFtZXNwYWNlIHN0ZAotICNpZmRlZiBfX1VDTElCQ19IQVNfWExPQ0FMRV9fCi0gCSAgICAgIF9fdXNlbG9jYWxlKF9fb2xkKTsKLSAjZWxzZQotLQkgICAgICBzZXRsb2NhbGUoTENfQUxMLCBfX29sZCk7Ci0tCSAgICAgIGZyZWUoX19vbGQpOwotKwkgICAgICBzZXRsb2NhbGUoTENfQUxMLCBfX3Nhdik7Ci0rCSAgICAgIGRlbGV0ZSBbXSBfX3NhdjsKLSAjZW5kaWYKLSAgICAgICAgICAgICAgIF9fdGhyb3dfZXhjZXB0aW9uX2FnYWluOwotIAkgICAgfQotQEAgLTY1Myw4ICs2NjMsOCBAQCBuYW1lc3BhY2Ugc3RkCi0gI2lmZGVmIF9fVUNMSUJDX0hBU19YTE9DQUxFX18KLSAJICBfX3VzZWxvY2FsZShfX29sZCk7Ci0gI2Vsc2UKLS0JICBzZXRsb2NhbGUoTENfQUxMLCBfX29sZCk7Ci0tCSAgZnJlZShfX29sZCk7Ci0rCSAgc2V0bG9jYWxlKExDX0FMTCwgX19zYXYpOwotKwkgIGRlbGV0ZSBbXSBfX3NhdjsKLSAjZW5kaWYKLSAJfQotICAgICB9Ci1kaWZmIC0tZ2l0IGEvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL251bWVyaWNfbWVtYmVycy5jYyBiL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9udW1lcmljX21lbWJlcnMuY2MKLWluZGV4IGQ1Yzg5NjEuLjhhZTg5NjkgMTAwNjQ0Ci0tLS0gYS9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvbnVtZXJpY19tZW1iZXJzLmNjCi0rKysgYi9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvbnVtZXJpY19tZW1iZXJzLmNjCi1AQCAtMzMsOSArMzMsMTQgQEAKLSAKLSAvLyBXcml0dGVuIGJ5IEJlbmphbWluIEtvc25payA8YmtvekByZWRoYXQuY29tPgotIAotKyNpbmNsdWRlIDxmZWF0dXJlcy5oPgotKyNpZmRlZiBfX1VDTElCQ19IQVNfTE9DQUxFX18KLSAjZGVmaW5lIF9MSUJDCi0gI2luY2x1ZGUgPGxvY2FsZT4KLSAjdW5kZWYgX0xJQkMKLSsjZWxzZQotKyNpbmNsdWRlIDxsb2NhbGU+Ci0rI2VuZGlmCi0gI2luY2x1ZGUgPGJpdHMvYysrbG9jYWxlX2ludGVybmFsLmg+Ci0gCi0gI2lmZGVmIF9fVUNMSUJDX01KTjNfT05MWV9fCi1kaWZmIC0tZ2l0IGEvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL3RpbWVfbWVtYmVycy5jYyBiL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy90aW1lX21lbWJlcnMuY2MKLWluZGV4IGQ4NDhlZDUuLmYyNGQ1M2UgMTAwNjQ0Ci0tLS0gYS9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvdGltZV9tZW1iZXJzLmNjCi0rKysgYi9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvdGltZV9tZW1iZXJzLmNjCi1AQCAtNTMsMTEgKzUzLDE0IEBAIG5hbWVzcGFjZSBzdGQKLSAgICAgICBjb25zdCBzaXplX3QgX19sZW4gPSBfX3N0cmZ0aW1lX2woX19zLCBfX21heGxlbiwgX19mb3JtYXQsIF9fdG0sCi0gCQkJCQlfTV9jX2xvY2FsZV90aW1lcHVuY3QpOwotICNlbHNlCi0tICAgICAgY2hhciogX19vbGQgPSBzdHJkdXAoc2V0bG9jYWxlKExDX0FMTCwgTlVMTCkpOwotKyAgICAgIGNoYXIqIF9fb2xkID0gc2V0bG9jYWxlKExDX0FMTCwgTlVMTCk7Ci0rICAgICAgY29uc3Qgc2l6ZV90IF9fbGxlbiA9IHN0cmxlbihfX29sZCkgKyAxOwotKyAgICAgIGNoYXIqIF9fc2F2ID0gbmV3IGNoYXJbX19sbGVuXTsKLSsgICAgICBtZW1jcHkoX19zYXYsIF9fb2xkLCBfX2xsZW4pOwotICAgICAgIHNldGxvY2FsZShMQ19BTEwsIF9NX25hbWVfdGltZXB1bmN0KTsKLSAgICAgICBjb25zdCBzaXplX3QgX19sZW4gPSBzdHJmdGltZShfX3MsIF9fbWF4bGVuLCBfX2Zvcm1hdCwgX190bSk7Ci0tICAgICAgc2V0bG9jYWxlKExDX0FMTCwgX19vbGQpOwotLSAgICAgIGZyZWUoX19vbGQpOwotKyAgICAgIHNldGxvY2FsZShMQ19BTEwsIF9fc2F2KTsKLSsgICAgICBkZWxldGUgW10gX19zYXY7Ci0gI2VuZGlmCi0gICAgICAgLy8gTWFrZSBzdXJlIF9fcyBpcyBudWxsIHRlcm1pbmF0ZWQuCi0gICAgICAgaWYgKF9fbGVuID09IDApCi1AQCAtMjA3LDExICsyMTAsMTQgQEAgbmFtZXNwYWNlIHN0ZAotICAgICAgIGNvbnN0IHNpemVfdCBfX2xlbiA9IF9fd2NzZnRpbWVfbChfX3MsIF9fbWF4bGVuLCBfX2Zvcm1hdCwgX190bSwKLSAJCQkJCV9NX2NfbG9jYWxlX3RpbWVwdW5jdCk7Ci0gI2Vsc2UKLS0gICAgICBjaGFyKiBfX29sZCA9IHN0cmR1cChzZXRsb2NhbGUoTENfQUxMLCBOVUxMKSk7Ci0rICAgICAgY2hhciogX19vbGQgPSBzZXRsb2NhbGUoTENfQUxMLCBOVUxMKTsKLSsgICAgICBjb25zdCBzaXplX3QgX19sbGVuID0gc3RybGVuKF9fb2xkKSArIDE7Ci0rICAgICAgY2hhciogX19zYXYgPSBuZXcgY2hhcltfX2xsZW5dOwotKyAgICAgIG1lbWNweShfX3NhdiwgX19vbGQsIF9fbGxlbik7Ci0gICAgICAgc2V0bG9jYWxlKExDX0FMTCwgX01fbmFtZV90aW1lcHVuY3QpOwotICAgICAgIGNvbnN0IHNpemVfdCBfX2xlbiA9IHdjc2Z0aW1lKF9fcywgX19tYXhsZW4sIF9fZm9ybWF0LCBfX3RtKTsKLS0gICAgICBzZXRsb2NhbGUoTENfQUxMLCBfX29sZCk7Ci0tICAgICAgZnJlZShfX29sZCk7Ci0rICAgICAgc2V0bG9jYWxlKExDX0FMTCwgX19zYXYpOwotKyAgICAgIGRlbGV0ZSBbXSBfX3NhdjsKLSAjZW5kaWYKLSAgICAgICAvLyBNYWtlIHN1cmUgX19zIGlzIG51bGwgdGVybWluYXRlZC4KLSAgICAgICBpZiAoX19sZW4gPT0gMCkKLWRpZmYgLS1naXQgYS9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvdGltZV9tZW1iZXJzLmggYi9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvdGltZV9tZW1iZXJzLmgKLWluZGV4IGJhOGU4NTguLjE2NjVkZGUgMTAwNjQ0Ci0tLS0gYS9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvdGltZV9tZW1iZXJzLmgKLSsrKyBiL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy90aW1lX21lbWJlcnMuaAotQEAgLTUwLDEyICs1MCwyMSBAQAotICAgICBfX3RpbWVwdW5jdDxfQ2hhclQ+OjpfX3RpbWVwdW5jdChfX2NfbG9jYWxlIF9fY2xvYywgY29uc3QgY2hhciogX19zLAotIAkJCQkgICAgIHNpemVfdCBfX3JlZnMpCi0gICAgIDogZmFjZXQoX19yZWZzKSwgX01fZGF0YShOVUxMKSwgX01fY19sb2NhbGVfdGltZXB1bmN0KE5VTEwpLAotLSAgICBfTV9uYW1lX3RpbWVwdW5jdChfX3MpCi0rICAgIF9NX25hbWVfdGltZXB1bmN0KE5VTEwpCi0gICAgIHsKLS0gICAgICBjaGFyKiBfX3RtcCA9IG5ldyBjaGFyW3N0ZDo6c3RybGVuKF9fcykgKyAxXTsKLS0gICAgICBzdGQ6OnN0cmNweShfX3RtcCwgX19zKTsKLSsgICAgICBjb25zdCBzaXplX3QgX19sZW4gPSBzdGQ6OnN0cmxlbihfX3MpICsgMTsKLSsgICAgICBjaGFyKiBfX3RtcCA9IG5ldyBjaGFyW19fbGVuXTsKLSsgICAgICBzdGQ6Om1lbWNweShfX3RtcCwgX19zLCBfX2xlbik7Ci0gICAgICAgX01fbmFtZV90aW1lcHVuY3QgPSBfX3RtcDsKLS0gICAgICBfTV9pbml0aWFsaXplX3RpbWVwdW5jdChfX2Nsb2MpOwotKwotKyAgICAgIHRyeQotKwl7IF9NX2luaXRpYWxpemVfdGltZXB1bmN0KF9fY2xvYyk7IH0KLSsgICAgICBjYXRjaCguLi4pCi0rCXsKLSsJICBkZWxldGUgW10gX01fbmFtZV90aW1lcHVuY3Q7Ci0rCSAgX190aHJvd19leGNlcHRpb25fYWdhaW47Ci0rCX0KLSsKLSAgICAgfQotIAotICAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPgotLS0gCi0xLjcuMTAuNAotCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNC45LzAwMDgtbWlzc2luZy1leGVjaW5mb19oLnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTQuOS8wMDA4LW1pc3NpbmctZXhlY2luZm9faC5wYXRjaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjgyMzgwOS4uMDAwMDAwMAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNC45LzAwMDgtbWlzc2luZy1leGVjaW5mb19oLnBhdGNoCisrKyAvZGV2L251bGwKQEAgLTEsMjggKzAsMCBAQAotRnJvbSA5ZjIxNTg0NTE5ODFjZjBhODBjZmFiZGM3OWFlMzFiYjY5NzZhODAxIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQotRnJvbTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KLURhdGU6IEZyaSwgMjkgTWFyIDIwMTMgMDg6NDg6MTAgKzA0MDAKLVN1YmplY3Q6IFtQQVRDSCAwOC8zNV0gbWlzc2luZy1leGVjaW5mb19oCi0KLVNpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+Ci0KLVVwc3RyZWFtLVN0YXR1czogUGVuZGluZwotLS0tCi0gYm9laG0tZ2MvaW5jbHVkZS9nYy5oIHwgICAgMiArLQotIDEgZmlsZSBjaGFuZ2VkLCAxIGluc2VydGlvbigrKSwgMSBkZWxldGlvbigtKQotCi1kaWZmIC0tZ2l0IGEvYm9laG0tZ2MvaW5jbHVkZS9nYy5oIGIvYm9laG0tZ2MvaW5jbHVkZS9nYy5oCi1pbmRleCBjNTFlMDE3Li5hN2JhOGRjIDEwMDY0NAotLS0tIGEvYm9laG0tZ2MvaW5jbHVkZS9nYy5oCi0rKysgYi9ib2VobS1nYy9pbmNsdWRlL2djLmgKLUBAIC01MDMsNyArNTAzLDcgQEAgR0NfQVBJIEdDX1BUUiBHQ19tYWxsb2NfYXRvbWljX2lnbm9yZV9vZmZfcGFnZSBHQ19QUk9UTygoc2l6ZV90IGxiKSk7Ci0gI2lmIGRlZmluZWQoX19saW51eF9fKSB8fCBkZWZpbmVkKF9fR0xJQkNfXykKLSAjIGluY2x1ZGUgPGZlYXR1cmVzLmg+Ci0gIyBpZiAoX19HTElCQ19fID09IDIgJiYgX19HTElCQ19NSU5PUl9fID49IDEgfHwgX19HTElCQ19fID4gMikgXAotLSAgICAgJiYgIWRlZmluZWQoX19pYTY0X18pCi0rICAgICAmJiAhZGVmaW5lZChfX2lhNjRfXykgJiYgIWRlZmluZWQoX19VQ0xJQkNfXykKLSAjICAgaWZuZGVmIEdDX0hBVkVfQlVJTFRJTl9CQUNLVFJBQ0UKLSAjICAgICBkZWZpbmUgR0NfSEFWRV9CVUlMVElOX0JBQ0tUUkFDRQotICMgICBlbmRpZgotLS0gCi0xLjcuMTAuNAotCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNC45LzAwMDktYzk5LXNucHJpbnRmLnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTQuOS8wMDA5LWM5OS1zbnByaW50Zi5wYXRjaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzE2ODc3OC4uMDAwMDAwMAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNC45LzAwMDktYzk5LXNucHJpbnRmLnBhdGNoCisrKyAvZGV2L251bGwKQEAgLTEsMjggKzAsMCBAQAotRnJvbSBlMzkzZTA3NmYxYWI4MmQyNWUxYWEwNGQ2ZWRlYTI3YjQxZDNlYjA2IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQotRnJvbTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KLURhdGU6IEZyaSwgMjkgTWFyIDIwMTMgMDg6NDk6MDMgKzA0MDAKLVN1YmplY3Q6IFtQQVRDSCAwOS8zNV0gYzk5LXNucHJpbnRmCi0KLVNpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+Ci0KLVVwc3RyZWFtLVN0YXR1czogUGVuZGluZwotLS0tCi0gbGlic3RkYysrLXYzL2luY2x1ZGUvY19zdGQvY3N0ZGlvIHwgICAgMiArLQotIDEgZmlsZSBjaGFuZ2VkLCAxIGluc2VydGlvbigrKSwgMSBkZWxldGlvbigtKQotCi1kaWZmIC0tZ2l0IGEvbGlic3RkYysrLXYzL2luY2x1ZGUvY19zdGQvY3N0ZGlvIGIvbGlic3RkYysrLXYzL2luY2x1ZGUvY19zdGQvY3N0ZGlvCi1pbmRleCBlODViZDgzLi42YWY4MzlhIDEwMDY0NAotLS0tIGEvbGlic3RkYysrLXYzL2luY2x1ZGUvY19zdGQvY3N0ZGlvCi0rKysgYi9saWJzdGRjKystdjMvaW5jbHVkZS9jX3N0ZC9jc3RkaW8KLUBAIC0xMzksNyArMTM5LDcgQEAgbmFtZXNwYWNlIHN0ZAotICAgdXNpbmcgOjp2c3ByaW50ZjsKLSB9IC8vIG5hbWVzcGFjZSBzdGQKLSAKLS0jaWYgX0dMSUJDWFhfVVNFX0M5OQotKyNpZiBfR0xJQkNYWF9VU0VfQzk5IHx8IGRlZmluZWQoX19VQ0xJQkNfXykKLSAKLSAjdW5kZWYgc25wcmludGYKLSAjdW5kZWYgdmZzY2FuZgotLS0gCi0xLjcuMTAuNAotCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNC45LzAwMTAtYzk5LWNvbXBsZXgtdWdseS1oYWNrLnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTQuOS8wMDEwLWM5OS1jb21wbGV4LXVnbHktaGFjay5wYXRjaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjYyODU3MS4uMDAwMDAwMAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNC45LzAwMTAtYzk5LWNvbXBsZXgtdWdseS1oYWNrLnBhdGNoCisrKyAvZGV2L251bGwKQEAgLTEsMjkgKzAsMCBAQAotRnJvbSA3M2Y2OWQ4MDZlMmM5NTYxYTU0OTk1MjIzNDMxYTEwNzZjZmQ2MTY0IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQotRnJvbTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KLURhdGU6IEZyaSwgMjkgTWFyIDIwMTMgMDg6NDk6NTcgKzA0MDAKLVN1YmplY3Q6IFtQQVRDSCAxMC8zNV0gYzk5LWNvbXBsZXgtdWdseS1oYWNrCi0KLVNpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+Ci0KLVVwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbZW1iZWRkZWQgc3BlY2lmaWNdCi0tLS0KLSBsaWJzdGRjKystdjMvY29uZmlndXJlIHwgICAgMyArKysKLSAxIGZpbGUgY2hhbmdlZCwgMyBpbnNlcnRpb25zKCspCi0KLWRpZmYgLS1naXQgYS9saWJzdGRjKystdjMvY29uZmlndXJlIGIvbGlic3RkYysrLXYzL2NvbmZpZ3VyZQotaW5kZXggYzU3YTc1MS4uYTEzMzNlMiAxMDA3NTUKLS0tLSBhL2xpYnN0ZGMrKy12My9jb25maWd1cmUKLSsrKyBiL2xpYnN0ZGMrKy12My9jb25maWd1cmUKLUBAIC0xODczNCw2ICsxODczNCw5IEBAICRhc19lY2hvX24gImNoZWNraW5nIGZvciBJU08gQzk5IHN1cHBvcnQgdG8gVFIxIGluIDxjb21wbGV4Lmg+Li4uICIgPiY2OyB9Ci0gICAgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKLSAvKiBlbmQgY29uZmRlZnMuaC4gICovCi0gI2luY2x1ZGUgPGNvbXBsZXguaD4KLSsjaWZkZWYgX19VQ0xJQkNfXwotKyNlcnJvciB1Z2x5IGhhY2sgdG8gbWFrZSBzdXJlIGNvbmZpZ3VyZSB0ZXN0IGZhaWxzIGhlcmUgZm9yIGNyb3NzIHVudGlsIHVDbGliYyBzdXBwb3J0cyB0aGUgY29tcGxleCBmdW5jcwotKyNlbmRpZgotIGludAotIG1haW4gKCkKLSB7Ci0tLSAKLTEuNy4xMC40Ci0KZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy00LjkvMDAxMS1pbmRleF9tYWNyby5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy00LjkvMDAxMS1pbmRleF9tYWNyby5wYXRjaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOGVlNzliMC4uMDAwMDAwMAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNC45LzAwMTEtaW5kZXhfbWFjcm8ucGF0Y2gKKysrIC9kZXYvbnVsbApAQCAtMSw0NCArMCwwIEBACi1Gcm9tIGIwMzc5NTNlNDAzMTJiNDVhYjg0ZWQwYTNhZDg4MmJiNWU0MTMxMDEgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCi1Gcm9tOiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgotRGF0ZTogRnJpLCAyOSBNYXIgMjAxMyAwODo1MTowMiArMDQwMAotU3ViamVjdDogW1BBVENIIDExLzM1XSBpbmRleF9tYWNybwotCi1TaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgotCi1VcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKLS0tLQotIGxpYnN0ZGMrKy12My9pbmNsdWRlL2V4dC9yb3BlICAgICAgIHwgICAgMyArKysKLSBsaWJzdGRjKystdjMvaW5jbHVkZS9leHQvcm9wZWltcGwuaCB8ICAgIDMgKysrCi0gMiBmaWxlcyBjaGFuZ2VkLCA2IGluc2VydGlvbnMoKykKLQotZGlmZiAtLWdpdCBhL2xpYnN0ZGMrKy12My9pbmNsdWRlL2V4dC9yb3BlIGIvbGlic3RkYysrLXYzL2luY2x1ZGUvZXh0L3JvcGUKLWluZGV4IDM4ZWIxZTguLjE1OGQyMWEgMTAwNjQ0Ci0tLS0gYS9saWJzdGRjKystdjMvaW5jbHVkZS9leHQvcm9wZQotKysrIGIvbGlic3RkYysrLXYzL2luY2x1ZGUvZXh0L3JvcGUKLUBAIC01NSw2ICs1NSw5IEBACi0gI2luY2x1ZGUgPGJpdHMvZ3Roci5oPgotICNpbmNsdWRlIDx0cjEvZnVuY3Rpb25hbD4KLSAKLSsvKiBjb3BlIHcvIGluZGV4IGRlZmluZWQgYXMgbWFjcm8sIFN1U3YzIHByb3Bvc2FsICovCi0rI3VuZGVmIGluZGV4Ci0rCi0gIyBpZmRlZiBfX0dDCi0gIyAgIGRlZmluZSBfX0dDX0NPTlNUIGNvbnN0Ci0gIyBlbHNlCi1kaWZmIC0tZ2l0IGEvbGlic3RkYysrLXYzL2luY2x1ZGUvZXh0L3JvcGVpbXBsLmggYi9saWJzdGRjKystdjMvaW5jbHVkZS9leHQvcm9wZWltcGwuaAotaW5kZXggZDdiNWNiZC4uYjliM2FjYiAxMDA2NDQKLS0tLSBhL2xpYnN0ZGMrKy12My9pbmNsdWRlL2V4dC9yb3BlaW1wbC5oCi0rKysgYi9saWJzdGRjKystdjMvaW5jbHVkZS9leHQvcm9wZWltcGwuaAotQEAgLTQ4LDYgKzQ4LDkgQEAKLSAjaW5jbHVkZSA8ZXh0L21lbW9yeT4gLy8gRm9yIHVuaW5pdGlhbGl6ZWRfY29weV9uCi0gI2luY2x1ZGUgPGV4dC9udW1lcmljPiAvLyBGb3IgcG93ZXIKLSAKLSsvKiBjb3BlIHcvIGluZGV4IGRlZmluZWQgYXMgbWFjcm8sIFN1U3YzIHByb3Bvc2FsICovCi0rI3VuZGVmIGluZGV4Ci0rCi0gbmFtZXNwYWNlIF9fZ251X2N4eCBfR0xJQkNYWF9WSVNJQklMSVRZKGRlZmF1bHQpCi0gewotIF9HTElCQ1hYX0JFR0lOX05BTUVTUEFDRV9WRVJTSU9OCi0tLSAKLTEuNy4xMC40Ci0KZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy00LjkvMDAxMy1saWJzdGRjLW5hbWVzcGFjZS5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy00LjkvMDAxMy1saWJzdGRjLW5hbWVzcGFjZS5wYXRjaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNGEzZWZkZS4uMDAwMDAwMAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNC45LzAwMTMtbGlic3RkYy1uYW1lc3BhY2UucGF0Y2gKKysrIC9kZXYvbnVsbApAQCAtMSw1NCArMCwwIEBACi1Gcm9tIDEwNGU0ZDY2MjA4ZjI3MjZiMTRkMmY1ZWViY2U5MDcwMGNiYzgzYzggTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCi1Gcm9tOiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgotRGF0ZTogRnJpLCAyOSBNYXIgMjAxMyAwODo1NDowMiArMDQwMAotU3ViamVjdDogW1BBVENIIDEzLzM1XSBsaWJzdGRjKystbmFtZXNwYWNlCi0KLVNpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+Ci0KLVVwc3RyZWFtLVN0YXR1czogUGVuZGluZwotLS0tCi0gbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL21lc3NhZ2VzX21lbWJlcnMuaCB8ICAgIDQgKysrLQotIGxpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy90aW1lX21lbWJlcnMuaCAgICAgfCAgICA0ICsrKy0KLSAyIGZpbGVzIGNoYW5nZWQsIDYgaW5zZXJ0aW9ucygrKSwgMiBkZWxldGlvbnMoLSkKLQotZGlmZiAtLWdpdCBhL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9tZXNzYWdlc19tZW1iZXJzLmggYi9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvbWVzc2FnZXNfbWVtYmVycy5oCi1pbmRleCAwNjc2NTdhLi5kZDc2YTZjIDEwMDY0NAotLS0tIGEvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL21lc3NhZ2VzX21lbWJlcnMuaAotKysrIGIvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL21lc3NhZ2VzX21lbWJlcnMuaAotQEAgLTMyLDcgKzMyLDggQEAKLSAvLwotIAotIC8vIFdyaXR0ZW4gYnkgQmVuamFtaW4gS29zbmlrIDxia296QHJlZGhhdC5jb20+Ci0tCi0rbmFtZXNwYWNlIHN0ZAotK3sKLSAjaWZkZWYgX19VQ0xJQkNfTUpOM19PTkxZX18KLSAjd2FybmluZyBmaXggcHJvdG90eXBlcyBmb3IgKnRleHRkb21haW4gZnVuY3MKLSAjZW5kaWYKLUBAIC0xMTYsMyArMTE3LDQgQEAKLSAJICAgdGhpcy0+X1NfY3JlYXRlX2NfbG9jYWxlKHRoaXMtPl9NX2NfbG9jYWxlX21lc3NhZ2VzLCBfX3MpOwotIAkgfQotICAgICAgfQotK30KLWRpZmYgLS1naXQgYS9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvdGltZV9tZW1iZXJzLmggYi9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvdGltZV9tZW1iZXJzLmgKLWluZGV4IDE2NjVkZGUuLjkwNWM0MzMgMTAwNjQ0Ci0tLS0gYS9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvdGltZV9tZW1iZXJzLmgKLSsrKyBiL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy90aW1lX21lbWJlcnMuaAotQEAgLTMzLDcgKzMzLDggQEAKLSAvLwotIAotIC8vIFdyaXR0ZW4gYnkgQmVuamFtaW4gS29zbmlrIDxia296QHJlZGhhdC5jb20+Ci0tCi0rbmFtZXNwYWNlIHN0ZAotK3sKLSAgIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4KLSAgICAgX190aW1lcHVuY3Q8X0NoYXJUPjo6X190aW1lcHVuY3Qoc2l6ZV90IF9fcmVmcykKLSAgICAgOiBmYWNldChfX3JlZnMpLCBfTV9kYXRhKE5VTEwpLCBfTV9jX2xvY2FsZV90aW1lcHVuY3QoTlVMTCksCi1AQCAtNzUsMyArNzYsNCBAQAotICAgICAgIGRlbGV0ZSBfTV9kYXRhOwotICAgICAgIF9TX2Rlc3Ryb3lfY19sb2NhbGUoX01fY19sb2NhbGVfdGltZXB1bmN0KTsKLSAgICAgfQotK30KLS0tIAotMS43LjEwLjQKLQpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTQuOS8wMDE0LXNoLXByMjQ4MzYucGF0Y2ggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNC45LzAwMTQtc2gtcHIyNDgzNi5wYXRjaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggY2I4ZmQ1Mi4uMDAwMDAwMAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNC45LzAwMTQtc2gtcHIyNDgzNi5wYXRjaAorKysgL2Rldi9udWxsCkBAIC0xLDQ1ICswLDAgQEAKLUZyb20gZWRjOWFjYjE4MTgxMGYyMzRiNmI5ZjdkMjgyMGIwZTRmNmExZWVhZiBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKLUZyb206IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+Ci1EYXRlOiBGcmksIDI5IE1hciAyMDEzIDA4OjU0OjQ4ICswNDAwCi1TdWJqZWN0OiBbUEFUQ0ggMTQvMzVdIHNoLXByMjQ4MzYKLQotU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KLQotVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCi0KLWh0dHA6Ly9zb3VyY2Vmb3JnZS5uZXQvbWFpbGFyY2hpdmUvZm9ydW0ucGhwP3RocmVhZF9pZD04OTU5MzA0JmZvcnVtX2lkPTUzNDgKLWh0dHA6Ly9nY2MuZ251Lm9yZy9idWd6aWxsYS9zaG93X2J1Zy5jZ2k/aWQ9MjQ4MzYKLS0tLQotIGdjYy9jb25maWd1cmUgICAgfCAgICAyICstCi0gZ2NjL2NvbmZpZ3VyZS5hYyB8ICAgIDIgKy0KLSAyIGZpbGVzIGNoYW5nZWQsIDIgaW5zZXJ0aW9ucygrKSwgMiBkZWxldGlvbnMoLSkKLQotZGlmZiAtLWdpdCBhL2djYy9jb25maWd1cmUgYi9nY2MvY29uZmlndXJlCi1pbmRleCBlMTJhMTgwLi4xMzViYmY1IDEwMDc1NQotLS0tIGEvZ2NjL2NvbmZpZ3VyZQotKysrIGIvZ2NjL2NvbmZpZ3VyZQotQEAgLTIzMzc4LDcgKzIzMzc4LDcgQEAgZm9vOgkubG9uZwkyNQotIAl0bHNfZmlyc3RfbWlub3I9MTQKLSAJdGxzX2FzX29wdD0iLW02NCAtQWVzYW1lIC0tZmF0YWwtd2FybmluZ3MiCi0gCTs7Ci0tICBzaC0qLSogfCBzaFszNF0tKi0qKQotKyAgc2gtKi0qIHwgc2hbMzRdKi0qLSopCi0gICAgIGNvbmZ0ZXN0X3M9JwotIAkuc2VjdGlvbiAiLnRkYXRhIiwiYXdUIixAcHJvZ2JpdHMKLSBmb286CS5sb25nCTI1Ci1kaWZmIC0tZ2l0IGEvZ2NjL2NvbmZpZ3VyZS5hYyBiL2djYy9jb25maWd1cmUuYWMKLWluZGV4IGViYTM1NzcuLjYzNjNhMjEgMTAwNjQ0Ci0tLS0gYS9nY2MvY29uZmlndXJlLmFjCi0rKysgYi9nY2MvY29uZmlndXJlLmFjCi1AQCAtMzE0MSw3ICszMTQxLDcgQEAgZm9vOgkubG9uZwkyNQotIAl0bHNfZmlyc3RfbWlub3I9MTQKLSAJdGxzX2FzX29wdD0iLW02NCAtQWVzYW1lIC0tZmF0YWwtd2FybmluZ3MiCi0gCTs7Ci0tICBzaC0qLSogfCBzaFszNF0tKi0qKQotKyAgc2gtKi0qIHwgc2hbMzRdKi0qLSopCi0gICAgIGNvbmZ0ZXN0X3M9JwotIAkuc2VjdGlvbiAiLnRkYXRhIiwiYXdUIixAcHJvZ2JpdHMKLSBmb286CS5sb25nCTI1Ci0tLSAKLTEuNy4xMC40Ci0KZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy00LjkvMDAxNS1hcm0tVXNlLVRBUkdFVF9FTkRJQU5fT1BUSU9OLWZvci1kZXRlcm1pbmluZy1NVUxUSUxJLnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTQuOS8wMDE1LWFybS1Vc2UtVEFSR0VUX0VORElBTl9PUFRJT04tZm9yLWRldGVybWluaW5nLU1VTFRJTEkucGF0Y2gKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDM3YzQ2ZmMuLjAwMDAwMDAKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTQuOS8wMDE1LWFybS1Vc2UtVEFSR0VUX0VORElBTl9PUFRJT04tZm9yLWRldGVybWluaW5nLU1VTFRJTEkucGF0Y2gKKysrIC9kZXYvbnVsbApAQCAtMSw0NyArMCwwIEBACi1Gcm9tIDUwZTUzNjYwMDViMGY2YWYyNzM3OGUyYTVjM2NiOWY5OTM2YTdlNjIgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCi1Gcm9tOiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgotRGF0ZTogRnJpLCAyOSBNYXIgMjAxMyAwODo1ODozNiArMDQwMAotU3ViamVjdDogW1BBVENIIDE1LzM1XSBhcm06IFVzZSBUQVJHRVRfRU5ESUFOX09QVElPTiBmb3IgZGV0ZXJtaW5pbmcKLSBNVUxUSUxJQl9ERUZBVUxUUwotCi1TaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgotCi1VcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKLS0tLQotIGdjYy9jb25maWcvYXJtL2xpbnV4LWVsZi5oIHwgICAgMiArLQotIDEgZmlsZSBjaGFuZ2VkLCAxIGluc2VydGlvbigrKSwgMSBkZWxldGlvbigtKQotCi1JbmRleDogZ2NjLTQuOS4yL2djYy9jb25maWcvYXJtL2NvZmYuaAotPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0tIGdjYy00LjkuMi5vcmlnL2djYy9jb25maWcvYXJtL2NvZmYuaAotKysrIGdjYy00LjkuMi9nY2MvY29uZmlnL2FybS9jb2ZmLmgKLUBAIC0zMiw4ICszMiwxMSBAQAotICNkZWZpbmUgVEFSR0VUX0RFRkFVTFQgKE1BU0tfQVBDU19GUkFNRSkKLSAKLSAjaWZuZGVmIE1VTFRJTElCX0RFRkFVTFRTCi0rI2lmbmRlZiBUQVJHRVRfRU5ESUFOX09QVElPTgotKyNkZWZpbmUgVEFSR0VUX0VORElBTl9PUFRJT04gIm1saXR0bGUtZW5kaWFuIgotKyNlbmRpZgotICNkZWZpbmUgTVVMVElMSUJfREVGQVVMVFMgXAotLSAgeyAibWFybSIsICJtbGl0dGxlLWVuZGlhbiIsICJtZmxvYXQtYWJpPXNvZnQiLCAibW5vLXRodW1iLWludGVyd29yayIgfQotKyAgeyAibWFybSIsIFRBUkdFVF9FTkRJQU5fT1BUSU9OLCAibWZsb2F0LWFiaT1zb2Z0IiwgIm1uby10aHVtYi1pbnRlcndvcmsiIH0KLSAjZW5kaWYKLSAMCi0gLyogVGhpcyBpcyBDT0ZGLCBidXQgcHJlZmVyIHN0YWJzLiAgKi8KLUluZGV4OiBnY2MtNC45LjIvZ2NjL2NvbmZpZy9hcm0vZWxmLmgKLT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tLSBnY2MtNC45LjIub3JpZy9nY2MvY29uZmlnL2FybS9lbGYuaAotKysrIGdjYy00LjkuMi9nY2MvY29uZmlnL2FybS9lbGYuaAotQEAgLTExNiw4ICsxMTYsMTEgQEAKLSAjZW5kaWYKLSAKLSAjaWZuZGVmIE1VTFRJTElCX0RFRkFVTFRTCi0rI2lmbmRlZiBUQVJHRVRfRU5ESUFOX09QVElPTgotKyNkZWZpbmUgVEFSR0VUX0VORElBTl9PUFRJT04gIm1saXR0bGUtZW5kaWFuIgotKyNlbmRpZgotICNkZWZpbmUgTVVMVElMSUJfREVGQVVMVFMgXAotLSAgeyAibWFybSIsICJtbGl0dGxlLWVuZGlhbiIsICJtZmxvYXQtYWJpPXNvZnQiLCAibW5vLXRodW1iLWludGVyd29yayIsICJmbm8tbGVhZGluZy11bmRlcnNjb3JlIiB9Ci0rICB7ICJtYXJtIiwgVEFSR0VUX0VORElBTl9PUFRJT04sICJtZmxvYXQtYWJpPXNvZnQiLCAibW5vLXRodW1iLWludGVyd29yayIsICJmbm8tbGVhZGluZy11bmRlcnNjb3JlIiB9Ci0gI2VuZGlmCi0gDAotICNkZWZpbmUgVEFSR0VUX0FTTV9GSUxFX1NUQVJUX0FQUF9PRkYgdHJ1ZQpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTQuOS8wMDE2LWdjYy1wb2lzb24tc3lzdGVtLWRpcmVjdG9yaWVzLnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTQuOS8wMDE2LWdjYy1wb2lzb24tc3lzdGVtLWRpcmVjdG9yaWVzLnBhdGNoCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0NzVlZjk2Li4wMDAwMDAwCi0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy00LjkvMDAxNi1nY2MtcG9pc29uLXN5c3RlbS1kaXJlY3Rvcmllcy5wYXRjaAorKysgL2Rldi9udWxsCkBAIC0xLDE5MCArMCwwIEBACi1Gcm9tIDE2MDM5N2VmM2MzMzMxMDk5YWYwMjhmMWI4ZDNlMDg1YjA3ZDg4YWQgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCi1Gcm9tOiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgotRGF0ZTogRnJpLCAyOSBNYXIgMjAxMyAwODo1OTowMCArMDQwMAotU3ViamVjdDogW1BBVENIIDE2LzM1XSBnY2M6IHBvaXNvbi1zeXN0ZW0tZGlyZWN0b3JpZXMKLQotU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KLQotVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtkaXN0cmlidXRpb246IGNvZGVzb3VyY2VyeV0KLS0tLQotIGdjYy9NYWtlZmlsZS5pbiAgICAgfCAgICAyICstCi0gZ2NjL2NvbW1vbi5vcHQgICAgICB8ICAgIDQgKysrKwotIGdjYy9jb25maWcuaW4gICAgICAgfCAgICA2ICsrKysrKwotIGdjYy9jb25maWd1cmUgICAgICAgfCAgIDIwICsrKysrKysrKysrKysrKysrKy0tCi0gZ2NjL2NvbmZpZ3VyZS5hYyAgICB8ICAgMTAgKysrKysrKysrKwotIGdjYy9kb2MvaW52b2tlLnRleGkgfCAgICA5ICsrKysrKysrKwotIGdjYy9nY2MuYyAgICAgICAgICAgfCAgICAyICsrCi0gZ2NjL2luY3BhdGguYyAgICAgICB8ICAgMTkgKysrKysrKysrKysrKysrKysrKwotIDggZmlsZXMgY2hhbmdlZCwgNjkgaW5zZXJ0aW9ucygrKSwgMyBkZWxldGlvbnMoLSkKLQotSW5kZXg6IGdjYy00LjktMjAxNDAzMTYvZ2NjL2NvbW1vbi5vcHQKLT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tLSBnY2MtNC45LTIwMTQwMzE2Lm9yaWcvZ2NjL2NvbW1vbi5vcHQKLSsrKyBnY2MtNC45LTIwMTQwMzE2L2djYy9jb21tb24ub3B0Ci1AQCAtNjAzLDYgKzYwMywxMCBAQCBXcGVkYW50aWMKLSBDb21tb24gVmFyKHBlZGFudGljKSBXYXJuaW5nCi0gSXNzdWUgd2FybmluZ3MgbmVlZGVkIGZvciBzdHJpY3QgY29tcGxpYW5jZSB0byB0aGUgc3RhbmRhcmQKLSAKLStXcG9pc29uLXN5c3RlbS1kaXJlY3RvcmllcwotK0NvbW1vbiBWYXIoZmxhZ19wb2lzb25fc3lzdGVtX2RpcmVjdG9yaWVzKSBJbml0KDEpIFdhcm5pbmcKLStXYXJuIGZvciAtSSBhbmQgLUwgb3B0aW9ucyB1c2luZyBzeXN0ZW0gZGlyZWN0b3JpZXMgaWYgY3Jvc3MgY29tcGlsaW5nCi0rCi0gV3NoYWRvdwotIENvbW1vbiBWYXIod2Fybl9zaGFkb3cpIFdhcm5pbmcKLSBXYXJuIHdoZW4gb25lIGxvY2FsIHZhcmlhYmxlIHNoYWRvd3MgYW5vdGhlcgotSW5kZXg6IGdjYy00LjktMjAxNDAzMTYvZ2NjL2NvbmZpZy5pbgotPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0tIGdjYy00LjktMjAxNDAzMTYub3JpZy9nY2MvY29uZmlnLmluCi0rKysgZ2NjLTQuOS0yMDE0MDMxNi9nY2MvY29uZmlnLmluCi1AQCAtMTM4LDYgKzEzOCwxMiBAQAotICNlbmRpZgotIAotIAotKy8qIERlZmluZSB0byB3YXJuIGZvciB1c2Ugb2YgbmF0aXZlIHN5c3RlbSBoZWFkZXIgZGlyZWN0b3JpZXMgKi8KLSsjaWZuZGVmIFVTRURfRk9SX1RBUkdFVAotKyN1bmRlZiBFTkFCTEVfUE9JU09OX1NZU1RFTV9ESVJFQ1RPUklFUwotKyNlbmRpZgotKwotKwotIC8qIERlZmluZSBpZiB5b3Ugd2FudCBhbGwgb3BlcmF0aW9ucyBvbiBSVEwgKHRoZSBiYXNpYyBkYXRhIHN0cnVjdHVyZSBvZiB0aGUKLSAgICBvcHRpbWl6ZXIgYW5kIGJhY2sgZW5kKSB0byBiZSBjaGVja2VkIGZvciBkeW5hbWljIHR5cGUgc2FmZXR5IGF0IHJ1bnRpbWUuCi0gICAgVGhpcyBpcyBxdWl0ZSBleHBlbnNpdmUuICovCi1JbmRleDogZ2NjLTQuOS0yMDE0MDMxNi9nY2MvY29uZmlndXJlCi09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLS0gZ2NjLTQuOS0yMDE0MDMxNi5vcmlnL2djYy9jb25maWd1cmUKLSsrKyBnY2MtNC45LTIwMTQwMzE2L2djYy9jb25maWd1cmUKLUBAIC05MjgsNiArOTI4LDcgQEAgd2l0aF9zeXN0ZW1femxpYgotIGVuYWJsZV9tYWludGFpbmVyX21vZGUKLSBlbmFibGVfbGlua19tdXRleAotIGVuYWJsZV92ZXJzaW9uX3NwZWNpZmljX3J1bnRpbWVfbGlicwotK2VuYWJsZV9wb2lzb25fc3lzdGVtX2RpcmVjdG9yaWVzCi0gZW5hYmxlX3BsdWdpbgotIGVuYWJsZV9ob3N0X3NoYXJlZAotIGVuYWJsZV9saWJxdWFkbWF0aF9zdXBwb3J0Ci1AQCAtMTY0OCw2ICsxNjQ5LDggQEAgT3B0aW9uYWwgRmVhdHVyZXM6Ci0gICAtLWVuYWJsZS12ZXJzaW9uLXNwZWNpZmljLXJ1bnRpbWUtbGlicwotICAgICAgICAgICAgICAgICAgICAgICAgICAgc3BlY2lmeSB0aGF0IHJ1bnRpbWUgbGlicmFyaWVzIHNob3VsZCBiZSBpbnN0YWxsZWQKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIGluIGEgY29tcGlsZXItc3BlY2lmaWMgZGlyZWN0b3J5Ci0rICAtLWVuYWJsZS1wb2lzb24tc3lzdGVtLWRpcmVjdG9yaWVzCi0rICAgICAgICAgICAgICAgICAgICAgICAgICB3YXJuIGZvciB1c2Ugb2YgbmF0aXZlIHN5c3RlbSBoZWFkZXIgZGlyZWN0b3JpZXMKLSAgIC0tZW5hYmxlLXBsdWdpbiAgICAgICAgIGVuYWJsZSBwbHVnaW4gc3VwcG9ydAotICAgLS1lbmFibGUtaG9zdC1zaGFyZWQgICAgYnVpbGQgaG9zdCBjb2RlIGFzIHNoYXJlZCBsaWJyYXJpZXMKLSAgIC0tZGlzYWJsZS1saWJxdWFkbWF0aC1zdXBwb3J0Ci1AQCAtMjc3MDIsNiArMjc3MDUsMTkgQEAgaWYgdGVzdCAiJHtlbmFibGVfdmVyc2lvbl9zcGVjaWZpY19ydW50aQotIGZpCi0gCi0gCi0rIyBDaGVjayB3aGV0aGVyIC0tZW5hYmxlLXBvaXNvbi1zeXN0ZW0tZGlyZWN0b3JpZXMgd2FzIGdpdmVuLgotK2lmIHRlc3QgIiR7ZW5hYmxlX3BvaXNvbl9zeXN0ZW1fZGlyZWN0b3JpZXMrc2V0fSIgPSBzZXQ7IHRoZW4gOgotKyAgZW5hYmxldmFsPSRlbmFibGVfcG9pc29uX3N5c3RlbV9kaXJlY3RvcmllczsKLStlbHNlCi0rICBlbmFibGVfcG9pc29uX3N5c3RlbV9kaXJlY3Rvcmllcz1ubwotK2ZpCi0rCi0raWYgdGVzdCAieCR7ZW5hYmxlX3BvaXNvbl9zeXN0ZW1fZGlyZWN0b3JpZXN9IiA9ICJ4eWVzIjsgdGhlbgotKwotKyRhc19lY2hvICIjZGVmaW5lIEVOQUJMRV9QT0lTT05fU1lTVEVNX0RJUkVDVE9SSUVTIDEiID4+Y29uZmRlZnMuaAotKwotK2ZpCi0rCi0gIyBTdWJzdGl0dXRlIGNvbmZpZ3VyYXRpb24gdmFyaWFibGVzCi0gCi0gCi1JbmRleDogZ2NjLTQuOS0yMDE0MDMxNi9nY2MvY29uZmlndXJlLmFjCi09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLS0gZ2NjLTQuOS0yMDE0MDMxNi5vcmlnL2djYy9jb25maWd1cmUuYWMKLSsrKyBnY2MtNC45LTIwMTQwMzE2L2djYy9jb25maWd1cmUuYWMKLUBAIC01MzY2LDYgKzUzNjYsMTYgQEAgQUNfQVJHX0VOQUJMRSh2ZXJzaW9uLXNwZWNpZmljLXJ1bnRpbWUtbAotICAgICAgICAgICAgICAgICBbc3BlY2lmeSB0aGF0IHJ1bnRpbWUgbGlicmFyaWVzIHNob3VsZCBiZQotICAgICAgICAgICAgICAgICAgaW5zdGFsbGVkIGluIGEgY29tcGlsZXItc3BlY2lmaWMgZGlyZWN0b3J5XSldKQotIAotK0FDX0FSR19FTkFCTEUoW3BvaXNvbi1zeXN0ZW0tZGlyZWN0b3JpZXNdLAotKyAgICAgICAgICAgICBBU19IRUxQX1NUUklORyhbLS1lbmFibGUtcG9pc29uLXN5c3RlbS1kaXJlY3Rvcmllc10sCi0rICAgICAgICAgICAgICAgICAgICAgICAgICAgIFt3YXJuIGZvciB1c2Ugb2YgbmF0aXZlIHN5c3RlbSBoZWFkZXIgZGlyZWN0b3JpZXNdKSwsCi0rICAgICAgICAgICAgIFtlbmFibGVfcG9pc29uX3N5c3RlbV9kaXJlY3Rvcmllcz1ub10pCi0raWYgdGVzdCAieCR7ZW5hYmxlX3BvaXNvbl9zeXN0ZW1fZGlyZWN0b3JpZXN9IiA9ICJ4eWVzIjsgdGhlbgotKyAgQUNfREVGSU5FKFtFTkFCTEVfUE9JU09OX1NZU1RFTV9ESVJFQ1RPUklFU10sCi0rICAgICAgICAgICBbMV0sCi0rICAgICAgICAgICBbRGVmaW5lIHRvIHdhcm4gZm9yIHVzZSBvZiBuYXRpdmUgc3lzdGVtIGhlYWRlciBkaXJlY3Rvcmllc10pCi0rZmkKLSsKLSAjIFN1YnN0aXR1dGUgY29uZmlndXJhdGlvbiB2YXJpYWJsZXMKLSBBQ19TVUJTVChzdWJkaXJzKQotIEFDX1NVQlNUKHNyY2RpcikKLUluZGV4OiBnY2MtNC45LTIwMTQwMzE2L2djYy9kb2MvaW52b2tlLnRleGkKLT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tLSBnY2MtNC45LTIwMTQwMzE2Lm9yaWcvZ2NjL2RvYy9pbnZva2UudGV4aQotKysrIGdjYy00LjktMjAxNDAzMTYvZ2NjL2RvYy9pbnZva2UudGV4aQotQEAgLTI2MCw2ICsyNjAsNyBAQCBPYmplY3RpdmUtQyBhbmQgT2JqZWN0aXZlLUMrKyBEaWFsZWN0c30uCi0gLVdvdmVybGVuZ3RoLXN0cmluZ3MgIC1XcGFja2VkICAtV3BhY2tlZC1iaXRmaWVsZC1jb21wYXQgIC1XcGFkZGVkIEBnb2wKLSAtV3BhcmVudGhlc2VzICAtV3BlZGFudGljLW1zLWZvcm1hdCAtV25vLXBlZGFudGljLW1zLWZvcm1hdCBAZ29sCi0gLVdwb2ludGVyLWFyaXRoICAtV25vLXBvaW50ZXItdG8taW50LWNhc3QgQGdvbAotKy1Xbm8tcG9pc29uLXN5c3RlbS1kaXJlY3RvcmllcyBAZ29sCi0gLVdyZWR1bmRhbnQtZGVjbHMgIC1Xbm8tcmV0dXJuLWxvY2FsLWFkZHIgQGdvbAotIC1XcmV0dXJuLXR5cGUgIC1Xc2VxdWVuY2UtcG9pbnQgIC1Xc2hhZG93IEBnb2wKLSAtV3NpZ24tY29tcGFyZSAgLVdzaWduLWNvbnZlcnNpb24gLVdmbG9hdC1jb252ZXJzaW9uIEBnb2wKLUBAIC00MjMwLDYgKzQyMzEsMTQgQEAgaGVhZGVycy0tLWZvciB0aGF0LCBAb3B0aW9uey1XdW5rbm93bi1wcgotICBmb3IgbW9zdCB0YXJnZXRzLCBpdCBpcyBtYWRlIHVwIG9mIGNvZGUgYW5kIHRodXMgcmVxdWlyZXMgdGhlIHN0YWNrCi0gIHRvIGJlIG1hZGUgZXhlY3V0YWJsZSBpbiBvcmRlciBmb3IgdGhlIHByb2dyYW0gdG8gd29yayBwcm9wZXJseS4KLSAKLStAaXRlbSAtV25vLXBvaXNvbi1zeXN0ZW0tZGlyZWN0b3JpZXMKLStAb3BpbmRleCBXbm8tcG9pc29uLXN5c3RlbS1kaXJlY3RvcmllcwotK0RvIG5vdCB3YXJuIGZvciBAb3B0aW9uey1JfSBvciBAb3B0aW9uey1MfSBvcHRpb25zIHVzaW5nIHN5c3RlbQotK2RpcmVjdG9yaWVzIHN1Y2ggYXMgQGZpbGV7L3Vzci9pbmNsdWRlfSB3aGVuIGNyb3NzIGNvbXBpbGluZy4gIFRoaXMKLStvcHRpb24gaXMgaW50ZW5kZWQgZm9yIHVzZSBpbiBjaHJvb3QgZW52aXJvbm1lbnRzIHdoZW4gc3VjaAotK2RpcmVjdG9yaWVzIGNvbnRhaW4gdGhlIGNvcnJlY3QgaGVhZGVycyBhbmQgbGlicmFyaWVzIGZvciB0aGUgdGFyZ2V0Ci0rc3lzdGVtIHJhdGhlciB0aGFuIHRoZSBob3N0LgotKwotIEBpdGVtIC1XZmxvYXQtZXF1YWwKLSBAb3BpbmRleCBXZmxvYXQtZXF1YWwKLSBAb3BpbmRleCBXbm8tZmxvYXQtZXF1YWwKLUluZGV4OiBnY2MtNC45LTIwMTQwMzE2L2djYy9nY2MuYwotPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0tIGdjYy00LjktMjAxNDAzMTYub3JpZy9nY2MvZ2NjLmMKLSsrKyBnY2MtNC45LTIwMTQwMzE2L2djYy9nY2MuYwotQEAgLTc2NCw2ICs3NjQsOCBAQCBwcm9wZXIgcG9zaXRpb24gYW1vbmcgdGhlIG90aGVyIG91dHB1dCBmCi0gICAgIiV7ZnVzZS1sZD0qOi1mdXNlLWxkPSUqfVwKLSAgICAgJVggJXtvKn0gJXtlKn0gJXtOfSAle259ICV7cn1cCi0gICAgICV7c30gJXt0fSAle3UqfSAle3p9ICV7Wn0gJXshbm9zdGRsaWI6JXshbm9zdGFydGZpbGVzOiVTfX0gIiBWVEFCTEVfVkVSSUZJQ0FUSU9OX1NQRUMgIiBcCi0rICAgICV7V25vLXBvaXNvbi1zeXN0ZW0tZGlyZWN0b3JpZXM6LS1uby1wb2lzb24tc3lzdGVtLWRpcmVjdG9yaWVzfVwKLSsgICAgJXtXZXJyb3I9cG9pc29uLXN5c3RlbS1kaXJlY3RvcmllczotLWVycm9yLXBvaXNvbi1zeXN0ZW0tZGlyZWN0b3JpZXN9XAotICAgICAle3N0YXRpYzp9ICV7TCp9ICUobWZ3cmFwKSAlKGxpbmtfbGliZ2NjKSAiIFNBTklUSVpFUl9FQVJMWV9TUEVDICIgJW9cCi0gICAgICV7Zm9wZW5tcHxmdHJlZS1wYXJhbGxlbGl6ZS1sb29wcz0qOiU6aW5jbHVkZShsaWJnb21wLnNwZWMpJShsaW5rX2dvbXApfVwKLSAgICAgJXtmZ251LXRtOiU6aW5jbHVkZShsaWJpdG0uc3BlYyklKGxpbmtfaXRtKX1cCi1JbmRleDogZ2NjLTQuOS0yMDE0MDMxNi9nY2MvaW5jcGF0aC5jCi09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLS0gZ2NjLTQuOS0yMDE0MDMxNi5vcmlnL2djYy9pbmNwYXRoLmMKLSsrKyBnY2MtNC45LTIwMTQwMzE2L2djYy9pbmNwYXRoLmMKLUBAIC0yOCw2ICsyOCw3IEBACi0gI2luY2x1ZGUgImludGwuaCIKLSAjaW5jbHVkZSAiaW5jcGF0aC5oIgotICNpbmNsdWRlICJjcHBkZWZhdWx0LmgiCi0rI2luY2x1ZGUgImRpYWdub3N0aWMtY29yZS5oIgotIAotIC8qIE1pY3Jvc29mdCBXaW5kb3dzIGRvZXMgbm90IG5hdGl2ZWx5IHN1cHBvcnQgaW5vZGVzLgotICAgIFZNUyBoYXMgbm9uLW51bWVyaWMgaW5vZGVzLiAgKi8KLUBAIC0zODIsNiArMzgzLDI0IEBAIG1lcmdlX2luY2x1ZGVfY2hhaW5zIChjb25zdCBjaGFyICpzeXNyb28KLSAJfQotICAgICAgIGZwcmludGYgKHN0ZGVyciwgXygiRW5kIG9mIHNlYXJjaCBsaXN0LlxuIikpOwotICAgICB9Ci0rCi0rI2lmZGVmIEVOQUJMRV9QT0lTT05fU1lTVEVNX0RJUkVDVE9SSUVTCi0rICBpZiAoZmxhZ19wb2lzb25fc3lzdGVtX2RpcmVjdG9yaWVzKQotKyAgICB7Ci0rICAgICAgIHN0cnVjdCBjcHBfZGlyICpwOwotKwotKyAgICAgICBmb3IgKHAgPSBoZWFkc1tRVU9URV07IHA7IHAgPSBwLT5uZXh0KQotKyAgICAgICAgIHsKLSsgICAgICAgICAgaWYgKCghc3RybmNtcCAocC0+bmFtZSwgIi91c3IvaW5jbHVkZSIsIDEyKSkKLSsgICAgICAgICAgICAgIHx8ICghc3RybmNtcCAocC0+bmFtZSwgIi91c3IvbG9jYWwvaW5jbHVkZSIsIDE4KSkKLSsgICAgICAgICAgICAgIHx8ICghc3RybmNtcCAocC0+bmFtZSwgIi91c3IvWDExUjYvaW5jbHVkZSIsIDE4KSkpCi0rICAgICAgICAgICAgd2FybmluZyAoT1BUX1dwb2lzb25fc3lzdGVtX2RpcmVjdG9yaWVzLAotKyAgICAgICAgICAgICAgICAgICAgICJpbmNsdWRlIGxvY2F0aW9uIFwiJXNcIiBpcyB1bnNhZmUgZm9yICIKLSsgICAgICAgICAgICAgICAgICAgICAiY3Jvc3MtY29tcGlsYXRpb24iLAotKyAgICAgICAgICAgICAgICAgICAgIHAtPm5hbWUpOwotKyAgICAgICAgIH0KLSsgICAgfQotKyNlbmRpZgotIH0KLSAKLSAvKiBVc2UgZ2l2ZW4gLUkgcGF0aHMgZm9yICNpbmNsdWRlICIuLi4iIGJ1dCBub3QgI2luY2x1ZGUgPC4uLj4sIGFuZApkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTQuOS8wMDE3LWdjYy1wb2lzb24tZGlyLWV4dGVuZC5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy00LjkvMDAxNy1nY2MtcG9pc29uLWRpci1leHRlbmQucGF0Y2gKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDllODFlZmQuLjAwMDAwMDAKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTQuOS8wMDE3LWdjYy1wb2lzb24tZGlyLWV4dGVuZC5wYXRjaAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLUZyb20gZTk5YzljOTcyNjZkNmQzZThjYWM3OThhYTkxNDA4MjUwYzRkNjBjZiBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKLUZyb206IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+Ci1EYXRlOiBGcmksIDI5IE1hciAyMDEzIDA5OjAwOjM0ICswNDAwCi1TdWJqZWN0OiBbUEFUQ0ggMTcvMzVdIGdjYy1wb2lzb24tZGlyLWV4dGVuZAotCi1BZGQgL3N3L2luY2x1ZGUgYW5kIC9vcHQvaW5jbHVkZSBiYXNlZCBvbiB0aGUgb3JpZ2luYWwKLXplY2tlLW5vLWhvc3QtaW5jbHVkZXMucGF0Y2ggcGF0Y2guICBUaGUgb3JpZ2luYWwgcGF0Y2ggY2hlY2tlZCBmb3IKLS91c3IvaW5jbHVkZSwgL3N3L2luY2x1ZGUgYW5kIC9vcHQvaW5jbHVkZSBhbmQgdGhlbiB0cmlnZ2VyZWQgYSBmYWlsdXJlIGFuZAotYWJvcnRlZC4KLQotSW5zdGVhZCwgd2UgYWRkIHRoZSB0d28gbWlzc2luZyBpdGVtcyB0byB0aGUgY3VycmVudCBzY2FuLiAgSWYgdGhlIHVzZXIKLXdhbnRzIHRoaXMgdG8gYmUgYSBmYWlsdXJlLCB0aGV5IGNhbiBhZGQgIi1XZXJyb3I9cG9pc29uLXN5c3RlbS1kaXJlY3RvcmllcyIuCi0KLVNpZ25lZC1vZmYtYnk6IE1hcmsgSGF0bGUgPG1hcmsuaGF0bGVAd2luZHJpdmVyLmNvbT4KLVNpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+Ci0KLVVwc3RyZWFtLVN0YXR1czogUGVuZGluZwotLS0tCi0gZ2NjL2luY3BhdGguYyB8ICAgIDQgKysrLQotIDEgZmlsZSBjaGFuZ2VkLCAzIGluc2VydGlvbnMoKyksIDEgZGVsZXRpb24oLSkKLQotZGlmZiAtLWdpdCBhL2djYy9pbmNwYXRoLmMgYi9nY2MvaW5jcGF0aC5jCi1pbmRleCBjZDQxYzc4Li5lYWM0YTkyIDEwMDY0NAotLS0tIGEvZ2NjL2luY3BhdGguYwotKysrIGIvZ2NjL2luY3BhdGguYwotQEAgLTM5Myw3ICszOTMsOSBAQCBtZXJnZV9pbmNsdWRlX2NoYWlucyAoY29uc3QgY2hhciAqc3lzcm9vdCwgY3BwX3JlYWRlciAqcGZpbGUsIGludCB2ZXJib3NlKQotICAgICAgICAgIHsKLSAgICAgICAgICAgaWYgKCghc3RybmNtcCAocC0+bmFtZSwgIi91c3IvaW5jbHVkZSIsIDEyKSkKLSAgICAgICAgICAgICAgIHx8ICghc3RybmNtcCAocC0+bmFtZSwgIi91c3IvbG9jYWwvaW5jbHVkZSIsIDE4KSkKLS0gICAgICAgICAgICAgIHx8ICghc3RybmNtcCAocC0+bmFtZSwgIi91c3IvWDExUjYvaW5jbHVkZSIsIDE4KSkpCi0rICAgICAgICAgICAgICB8fCAoIXN0cm5jbXAgKHAtPm5hbWUsICIvdXNyL1gxMVI2L2luY2x1ZGUiLCAxOCkpCi0rICAgICAgICAgICAgICB8fCAoIXN0cm5jbXAgKHAtPm5hbWUsICIvc3cvaW5jbHVkZSIsIDExKSkKLSsgICAgICAgICAgICAgIHx8ICghc3RybmNtcCAocC0+bmFtZSwgIi9vcHQvaW5jbHVkZSIsIDEyKSkpCi0gICAgICAgICAgICAgd2FybmluZyAoT1BUX1dwb2lzb25fc3lzdGVtX2RpcmVjdG9yaWVzLAotICAgICAgICAgICAgICAgICAgICAgICJpbmNsdWRlIGxvY2F0aW9uIFwiJXNcIiBpcyB1bnNhZmUgZm9yICIKLSAgICAgICAgICAgICAgICAgICAgICAiY3Jvc3MtY29tcGlsYXRpb24iLAotLS0gCi0xLjcuMTAuNAotCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNC45LzAwMTgtZ2NjLTQuMy4zLVNZU1JPT1RfQ0ZMQUdTX0ZPUl9UQVJHRVQucGF0Y2ggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNC45LzAwMTgtZ2NjLTQuMy4zLVNZU1JPT1RfQ0ZMQUdTX0ZPUl9UQVJHRVQucGF0Y2gKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGEyOGNhZmQuLjAwMDAwMDAKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTQuOS8wMDE4LWdjYy00LjMuMy1TWVNST09UX0NGTEFHU19GT1JfVEFSR0VULnBhdGNoCisrKyAvZGV2L251bGwKQEAgLTEsNzMgKzAsMCBAQAotRnJvbSA1NjIwN2ZhMjkyM2U4ZWRmNzc0ZTk4ZmZhYzgyNjY2MDkxMDc2YmUzIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQotRnJvbTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KLURhdGU6IEZyaSwgMjkgTWFyIDIwMTMgMDk6MDg6MzEgKzA0MDAKLVN1YmplY3Q6IFtQQVRDSCAxOC8zNV0gZ2NjLTQuMy4zOiBTWVNST09UX0NGTEFHU19GT1JfVEFSR0VUCi0KLUJlZm9yZSBjb21taXR0aW5nLCBJIG5vdGljZWQgdGhhdCBQUi8zMjE2MSB3YXMgbWFya2VkIGFzIGEgZHVwIG9mIFBSLzMyMDA5LCBidXQgbXkgcHJldmlvdXMgcGF0Y2ggZGlkIG5vdCBmaXggaXQuCi0KLVRoaXMgYWx0ZXJuYXRpdmUgcGF0Y2ggaXMgYmV0dGVyIGJlY2F1c2UgaXQgbGV0cyB5b3UganVzdCB1c2UgQ0ZMQUdTX0ZPUl9UQVJHRVQgdG8gc2V0IHRoZSBjb21waWxhdGlvbiBmbGFncyBmb3IgbGliZ2NjLiBTaW5jZSBib290c3RyYXBwZWQgdGFyZ2V0IGxpYnJhcmllcyBhcmUgbmV2ZXIgY29tcGlsZWQgd2l0aCB0aGUgbmF0aXZlIGNvbXBpbGVyLCBpdCBtYWtlcyBsaXR0bGUgc2Vuc2UgdG8gdXNlIGRpZmZlcmVudCBmbGFncyBmb3Igc3RhZ2UxIGFuZCBsYXRlciBzdGFnZXMuIEFuZCBpdCBhbHNvIG1ha2VzIGxpdHRsZSBzZW5zZSB0byB1c2UgYSBkaWZmZXJlbnQgdmFyaWFibGUgdGhhbiBDRkxBR1NfRk9SX1RBUkdFVC4KLQotT3RoZXIgY2hhbmdlcyBJIGhhZCB0byBkbyBpbmNsdWRlOgotCi0tIG1vdmluZyB0aGUgY3JlYXRpb24gb2YgZGVmYXVsdCBDRkxBR1NfRk9SX1RBUkdFVCBmcm9tIE1ha2VmaWxlLmFtIHRvIGNvbmZpZ3VyZS5hYywgYmVjYXVzZSBvdGhlcndpc2UgdGhlIEJPT1RfQ0ZMQUdTIGFyZSBzdWJzdGl0dXRlZCBpbnRvIENGTEFHU19GT1JfVEFSR0VUICh3aGljaCBpcyAiLU8yIC1nICQoQ0ZMQUdTKSIpIHZpYSAkKENGTEFHUykuIEl0IGlzIGFsc28gY2xlYW5lciB0aGlzIHdheSB0aG91Z2guCi0KLS0gcGFzc2luZyB0aGUgcmlnaHQgQ0ZMQUdTIHRvIGNvbmZpZ3VyZSBzY3JpcHRzIGFzIGV4cG9ydGVkIGVudmlyb25tZW50IHZhcmlhYmxlcwotCi1JIGFsc28gc3RvcHBlZCBwYXNzaW5nIExJQkNGTEFHUyB0byBjb25maWd1cmUgc2NyaXB0cyBzaW5jZSB0aGV5IGFyZSB1bnVzZWQgaW4gdGhlIHdob2xlIHNyYyB0cmVlLiBBbmQgSSB1cGRhdGVkIHRoZSBkb2N1bWVudGF0aW9uIGFzIEgtUCByZW1pbmRlZCBtZSB0byBkby4KLQotQm9vdHN0cmFwcGVkL3JlZ3Rlc3RlZCBpNjg2LXBjLWxpbnV4LWdudSwgd2lsbCBjb21taXQgdG8gNC40IHNob3J0bHkuIE9rIGZvciA0LjM/Ci0KLVNpZ25lZC1vZmYtYnk6IFBhb2xvIEJvbnppbmkgIDxib256aW5pQGdudS5vcmc+Ci1TaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgotCi1VcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKLS0tLQotIGNvbmZpZ3VyZSB8ICAgMzIgKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysKLSAxIGZpbGUgY2hhbmdlZCwgMzIgaW5zZXJ0aW9ucygrKQotCi1kaWZmIC0tZ2l0IGEvY29uZmlndXJlIGIvY29uZmlndXJlCi1pbmRleCAxYjc2YzkwLi5lNGRjZTdjIDEwMDc1NQotLS0tIGEvY29uZmlndXJlCi0rKysgYi9jb25maWd1cmUKLUBAIC02NzcyLDYgKzY3NzIsMzggQEAgZmkKLSAKLSAKLSAKLSsjIER1cmluZyBnY2MgYm9vdHN0cmFwLCBpZiB3ZSB1c2Ugc29tZSByYW5kb20gY2MgZm9yIHN0YWdlMSB0aGVuIENGTEFHUwotKyMgbWlnaHQgYmUgZW1wdHkgb3IgIi1nIi4gIFdlIGRvbid0IHJlcXVpcmUgYSBDKysgY29tcGlsZXIsIHNvIENYWEZMQUdTCi0rIyBtaWdodCBhbHNvIGJlIGVtcHR5IChvciAiLWciLCBpZiBhIG5vbi1HQ0MgQysrIGNvbXBpbGVyIGlzIGluIHRoZSBwYXRoKS4KLSsjIFdlIHdhbnQgdG8gZW5zdXJlIHRoYXQgVEFSR0VUIGxpYnJhcmllcyAod2hpY2ggd2Uga25vdyBhcmUgYnVpbHQgd2l0aAotKyMgZ2NjKSBhcmUgYnVpbHQgd2l0aCAiLU8yIC1nIiwgc28gaW5jbHVkZSB0aG9zZSBvcHRpb25zIHdoZW4gc2V0dGluZwotKyMgQ0ZMQUdTX0ZPUl9UQVJHRVQgYW5kIENYWEZMQUdTX0ZPUl9UQVJHRVQuCi0raWYgdGVzdCAieCRDRkxBR1NfRk9SX1RBUkdFVCIgPSB4OyB0aGVuCi0rICBDRkxBR1NfRk9SX1RBUkdFVD0kQ0ZMQUdTCi0rICBjYXNlICIgJENGTEFHUyAiIGluCi0rICAgICoiIC1PMiAiKikgOzsKLSsgICAgKikgQ0ZMQUdTX0ZPUl9UQVJHRVQ9Ii1PMiAkQ0ZMQUdTIiA7OwotKyAgZXNhYwotKyAgY2FzZSAiICRDRkxBR1MgIiBpbgotKyAgICAqIiAtZyAiKiB8ICoiIC1nMyAiKikgOzsKLSsgICAgKikgQ0ZMQUdTX0ZPUl9UQVJHRVQ9Ii1nICRDRkxBR1MiIDs7Ci0rICBlc2FjCi0rZmkKLSsKLSsKLStpZiB0ZXN0ICJ4JENYWEZMQUdTX0ZPUl9UQVJHRVQiID0geDsgdGhlbgotKyAgQ1hYRkxBR1NfRk9SX1RBUkdFVD0kQ1hYRkxBR1MKLSsgIGNhc2UgIiAkQ1hYRkxBR1MgIiBpbgotKyAgICAqIiAtTzIgIiopIDs7Ci0rICAgICopIENYWEZMQUdTX0ZPUl9UQVJHRVQ9Ii1PMiAkQ1hYRkxBR1MiIDs7Ci0rICBlc2FjCi0rICBjYXNlICIgJENYWEZMQUdTICIgaW4KLSsgICAgKiIgLWcgIiogfCAqIiAtZzMgIiopIDs7Ci0rICAgICopIENYWEZMQUdTX0ZPUl9UQVJHRVQ9Ii1nICRDWFhGTEFHUyIgOzsKLSsgIGVzYWMKLStmaQotKwotKwotICMgSGFuZGxlIC0td2l0aC1oZWFkZXJzPVhYWC4gIElmIHRoZSB2YWx1ZSBpcyBub3QgInllcyIsIHRoZSBjb250ZW50cyBvZgotICMgdGhlIG5hbWVkIGRpcmVjdG9yeSBhcmUgY29waWVkIHRvICQodG9vbGRpcikvc3lzLWluY2x1ZGUuCi0gaWYgdGVzdCB4IiR7d2l0aF9oZWFkZXJzfSIgIT0geCAmJiB0ZXN0IHgiJHt3aXRoX2hlYWRlcnN9IiAhPSB4bm8gOyB0aGVuCi0tLSAKLTEuNy4xMC40Ci0KZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy00LjkvMDAxOS02NC1iaXQtbXVsdGlsaWItaGFjay5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy00LjkvMDAxOS02NC1iaXQtbXVsdGlsaWItaGFjay5wYXRjaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDU4YmUwYy4uMDAwMDAwMAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNC45LzAwMTktNjQtYml0LW11bHRpbGliLWhhY2sucGF0Y2gKKysrIC9kZXYvbnVsbApAQCAtMSw4MiArMCwwIEBACi1Gcm9tIDE4ZmRlNTc0MGIwOTMyNGRmYjljZjQxZTk4NDk2NzI1NzNmZjVmYTAgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCi1Gcm9tOiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgotRGF0ZTogRnJpLCAyOSBNYXIgMjAxMyAwOToxMDowNiArMDQwMAotU3ViamVjdDogW1BBVENIIDE5LzM1XSA2NC1iaXQgbXVsdGlsaWIgaGFjay4KLQotR0NDIGhhcyBpbnRlcm5hbCBtdWx0aWxpYiBoYW5kbGluZyBjb2RlIGJ1dCBpdCBhc3N1bWVzIGEgdmVyeSBzcGVjaWZpYyByaWdpZCBkaXJlY3RvcnkKLWxheW91dC4gVGhlIGJ1aWxkIHN5c3RlbSBpbXBsZW1lbnRhdGlvbiBvZiBtdWx0aWxpYiBsYXlvdXQgaXMgdmVyeSBnZW5lcmljIGFuZCBhbGxvd3MKLWNvbXBsZXRlIGN1c3RvbWlzYXRpb24gb2YgdGhlIGxpYnJhcnkgZGlyZWN0b3JpZXMuCi0KLVRoaXMgcGF0Y2ggaXMgYSBwYXJ0aWFsIHNvbHV0aW9uIHRvIGFsbG93IGFueSBjdXN0b20gZGlyZWN0b3JpZXMgdG8gYmUgcGFzc2VkIGludG8gZ2NjCi1hbmQgaGFuZGxlZCBjb3JyZWN0bHkuIEl0IGZvcmNlcyBnY2MgdG8gdXNlIHRoZSBiYXNlX2xpYmRpciAod2hpY2ggaXMgdGhlIGN1cnJlbnQKLWRpcmVjdG9yeSwgIi4iKS4gV2UgbmVlZCB0byBkbyB0aGlzIGZvciBlYWNoIG11bHRpbGliIHRoYXQgaXMgY29uZmlndXJlZCBhcyB3ZSBkb24ndAota25vdyB3aGljaCBjb21waWxlciBvcHRpb25zIG1heSBiZSBiZWluZyBwYXNzZWQgaW50byB0aGUgY29tcGlsZXIuIFNpbmNlIHdlIGhhdmUgYSBjb21waWxlcgotcGVyIG11bGl0bGliIGF0IHRoaXMgcG9pbnQgdGhhdCBpc24ndCBhbiBpc3N1ZS4KLQotVGhlIG9uZSBwcm9ibGVtIGlzIHRoZSB0YXJnZXQgY29tcGlsZXIgaXMgb25seSBnb2luZyB0byB3b3JrIGZvciB0aGUgZGVmYXVsdCBtdWx0bGlsaWIgYXQKLXRoaXMgcG9pbnQuIElkZWFsbHkgd2UnZCBmaWd1cmUgb3V0IHdoaWNoIG11bHRpbGlicyB3ZXJlIGJlaW5nIGVuYWJsZWQgd2l0aCB3aGljaCBwYXRocwotYW5kIGJlIGFibGUgdG8gcGF0Y2ggdGhlc2UgZW50cmllcyB3aXRoIGEgY29tcGxldGUgc2V0IG9mIGNvcnJlY3QgcGF0aHMgYnV0IHRoaXMgd2UKLWRvbid0IGhhdmUgc3VjaCBjb2RlIGF0IHRoaXMgcG9pbnQuIFRoaXMgaXMgc29tZXRoaW5nIHRoZSB0YXJnZXQgZ2NjIHJlY2lwZSBzaG91bGQgZG8KLWFuZCBvdmVycmlkZSB0aGVzZSBwbGF0Zm9ybSBkZWZhdWx0cyBpbiBpdHMgYnVpbGQgY29uZmlnLgotCi1SUCAxNS84LzExCi0KLVNpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+Ci1TaWduZWQtb2ZmLWJ5OiBFbHZpcyBEb3dzb24gPGVsdmlzLmRvd3NvbkBnbWFpbC5jb20+Ci0KLVVwc3RyZWFtLVN0YXR1czogUGVuZGluZwotLS0tCi0gZ2NjL2NvbmZpZy9pMzg2L3QtbGludXg2NCAgIHwgICAgNiArKy0tLS0KLSBnY2MvY29uZmlnL21pcHMvdC1saW51eDY0ICAgfCAgIDEwICsrKy0tLS0tLS0KLSBnY2MvY29uZmlnL3JzNjAwMC90LWxpbnV4NjQgfCAgICA1ICsrLS0tCi0gMyBmaWxlcyBjaGFuZ2VkLCA3IGluc2VydGlvbnMoKyksIDE0IGRlbGV0aW9ucygtKQotCi1JbmRleDogZ2NjLTQuOS0yMDE0MDMxNi9nY2MvY29uZmlnL2kzODYvdC1saW51eDY0Ci09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLS0gZ2NjLTQuOS0yMDE0MDMxNi5vcmlnL2djYy9jb25maWcvaTM4Ni90LWxpbnV4NjQKLSsrKyBnY2MtNC45LTIwMTQwMzE2L2djYy9jb25maWcvaTM4Ni90LWxpbnV4NjQKLUBAIC0zMiw3ICszMiw1IEBACi0gIwotIGNvbW1hPSwKLSBNVUxUSUxJQl9PUFRJT05TICAgID0gJChzdWJzdCAkKGNvbW1hKSwvLCQoVE1fTVVMVElMSUJfQ09ORklHKSkKLS1NVUxUSUxJQl9ESVJOQU1FUyAgID0gJChwYXRzdWJzdCBtJSwgJSwgJChzdWJzdCAvLCAsJChNVUxUSUxJQl9PUFRJT05TKSkpCi0tTVVMVElMSUJfT1NESVJOQU1FUyA9IG02ND0uLi9saWI2NCQoY2FsbCBpZl9tdWx0aWFyY2gsOng4Nl82NC1saW51eC1nbnUpCi0tTVVMVElMSUJfT1NESVJOQU1FUys9IG0zMj0kKGlmICQod2lsZGNhcmQgJChzaGVsbCBlY2hvICQoU1lTVEVNX0hFQURFUl9ESVIpKS8uLi8uLi91c3IvbGliMzIpLC4uL2xpYjMyLC4uL2xpYikkKGNhbGwgaWZfbXVsdGlhcmNoLDppMzg2LWxpbnV4LWdudSkKLS1NVUxUSUxJQl9PU0RJUk5BTUVTKz0gbXgzMj0uLi9saWJ4MzIkKGNhbGwgaWZfbXVsdGlhcmNoLDp4ODZfNjQtbGludXgtZ251eDMyKQotK01VTFRJTElCX0RJUk5BTUVTID0gLiAuCi0rTVVMVElMSUJfT1NESVJOQU1FUyA9IC4uLyQoc2hlbGwgYmFzZW5hbWUgJChiYXNlX2xpYmRpcikpIC4uLyQoc2hlbGwgYmFzZW5hbWUgJChiYXNlX2xpYmRpcikpCi1JbmRleDogZ2NjLTQuOS0yMDE0MDMxNi9nY2MvY29uZmlnL21pcHMvdC1saW51eDY0Ci09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLS0gZ2NjLTQuOS0yMDE0MDMxNi5vcmlnL2djYy9jb25maWcvbWlwcy90LWxpbnV4NjQKLSsrKyBnY2MtNC45LTIwMTQwMzE2L2djYy9jb25maWcvbWlwcy90LWxpbnV4NjQKLUBAIC0xNywxMCArMTcsNiBAQAotICMgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgotIAotIE1VTFRJTElCX09QVElPTlMgPSBtYWJpPW4zMi9tYWJpPTMyL21hYmk9NjQKLS1NVUxUSUxJQl9ESVJOQU1FUyA9IG4zMiAzMiA2NAotLU1JUFNfRUwgPSAkKGlmICQoZmlsdGVyICVlbCwgJChmaXJzdHdvcmQgJChzdWJzdCAtLCAsJCh0YXJnZXQpKSkpLGVsKQotLU1JUFNfU09GVCA9ICQoaWYgJChzdHJpcCAkKGZpbHRlciBNQVNLX1NPRlRfRkxPQVRfQUJJLCAkKHRhcmdldF9jcHVfZGVmYXVsdCkpICQoZmlsdGVyIHNvZnQsICQod2l0aF9mbG9hdCkpKSxzb2Z0KQotLU1VTFRJTElCX09TRElSTkFNRVMgPSBcCi0tCS4uL2xpYjMyJChjYWxsIGlmX211bHRpYXJjaCw6bWlwczY0JChNSVBTX0VMKS1saW51eC1nbnVhYmluMzIkKE1JUFNfU09GVCkpIFwKLS0JLi4vbGliJChjYWxsIGlmX211bHRpYXJjaCw6bWlwcyQoTUlQU19FTCktbGludXgtZ251JChNSVBTX1NPRlQpKSBcCi0tCS4uL2xpYjY0JChjYWxsIGlmX211bHRpYXJjaCw6bWlwczY0JChNSVBTX0VMKS1saW51eC1nbnVhYmk2NCQoTUlQU19TT0ZUKSkKLStNVUxUSUxJQl9ESVJOQU1FUyA9IC4gLiAuCi0rTVVMVElMSUJfT1NESVJOQU1FUyA9IC4uLyQoc2hlbGwgYmFzZW5hbWUgJChiYXNlX2xpYmRpcikpIC4uLyQoc2hlbGwgYmFzZW5hbWUgJChiYXNlX2xpYmRpcikpIC4uLyQoc2hlbGwgYmFzZW5hbWUgJChiYXNlX2xpYmRpcikpCi0rCi1JbmRleDogZ2NjLTQuOS0yMDE0MDMxNi9nY2MvY29uZmlnL3JzNjAwMC90LWxpbnV4NjQKLT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tLSBnY2MtNC45LTIwMTQwMzE2Lm9yaWcvZ2NjL2NvbmZpZy9yczYwMDAvdC1saW51eDY0Ci0rKysgZ2NjLTQuOS0yMDE0MDMxNi9nY2MvY29uZmlnL3JzNjAwMC90LWxpbnV4NjQKLUBAIC0yNiwxMCArMjYsOSBAQAotICMgTVVMVElMSUJfT1NESVJOQU1FUyBhY2NvcmRpbmcgdG8gd2hhdCBpcyBmb3VuZCBvbiB0aGUgdGFyZ2V0LgotIAotIE1VTFRJTElCX09QVElPTlMgICAgOj0gbTY0L20zMgotLU1VTFRJTElCX0RJUk5BTUVTICAgOj0gNjQgMzIKLStNVUxUSUxJQl9ESVJOQU1FUyAgIDo9IC4gLgotIE1VTFRJTElCX0VYVFJBX09QVFMgOj0gCi0tTVVMVElMSUJfT1NESVJOQU1FUyA6PSBtNjQ9Li4vbGliNjQkKGNhbGwgaWZfbXVsdGlhcmNoLDpwb3dlcnBjNjQtbGludXgtZ251KQotLU1VTFRJTElCX09TRElSTkFNRVMgKz0gbTMyPSQoaWYgJCh3aWxkY2FyZCAkKHNoZWxsIGVjaG8gJChTWVNURU1fSEVBREVSX0RJUikpLy4uLy4uL3Vzci9saWIzMiksLi4vbGliMzIsLi4vbGliKSQoY2FsbCBpZl9tdWx0aWFyY2gsOnBvd2VycGMtbGludXgtZ251KQotK01VTFRJTElCX09TRElSTkFNRVMgOj0gLi4vJChzaGVsbCBiYXNlbmFtZSAkKGJhc2VfbGliZGlyKSkgLi4vJChzaGVsbCBiYXNlbmFtZSAkKGJhc2VfbGliZGlyKSkKLSAKLSByczYwMDAtbGludXgubzogJChzcmNkaXIpL2NvbmZpZy9yczYwMDAvcnM2MDAwLWxpbnV4LmMKLSAJJChDT01QSUxFKSAkPApkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTQuOS8wMDIwLW9wdGlvbmFsLWxpYnN0ZGMucGF0Y2ggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNC45LzAwMjAtb3B0aW9uYWwtbGlic3RkYy5wYXRjaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNWI0NjYxNC4uMDAwMDAwMAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNC45LzAwMjAtb3B0aW9uYWwtbGlic3RkYy5wYXRjaAorKysgL2Rldi9udWxsCkBAIC0xLDk4ICswLDAgQEAKLUZyb20gMzA3YzhmZjNlZjY2NmI3YmQ1YWM3MzM4NjNmMmZiYjI3YTlkNTIxZSBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKLUZyb206IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+Ci1EYXRlOiBGcmksIDI5IE1hciAyMDEzIDA5OjEyOjU2ICswNDAwCi1TdWJqZWN0OiBbUEFUQ0ggMjAvMzVdIG9wdGlvbmFsIGxpYnN0ZGMKLQotZ2NjLXJ1bnRpbWUgYnVpbGRzIGxpYnN0ZGMrKyBzZXBhcmF0ZWx5IGZyb20gZ2NjLWNyb3NzLSouIEl0cyBjb25maWd1cmUgdGVzdHMgdXNpbmcgZysrCi13aWxsIG5vdCBydW4gY29ycmVjdGx5IHNpbmNlIGJ5IGRlZmF1bHQgdGhlIGxpbmtlciB3aWxsIHRyeSB0byBsaW5rIGFnYWluc3QgbGlic3RkYysrCi13aGljaCBzaG91bGRuJ3QgZXhpc3QgeWV0LiBXZSBuZWVkIGFuIG9wdGlvbiB0byBkaXNhYmxlIC1sc3RkYysrCi1vcHRpb24gd2hpbHN0IGxlYXZpbmcgLWxjLCAtbGdjYyBhbmQgb3RoZXIgYXV0b21hdGljIGxpYnJhcnkgZGVwZW5kZW5jaWVzIGFkZGVkIGJ5IGdjYwotZHJpdmVyLiBUaGlzIHBhdGNoIGFkZHMgc3VjaCBhbiBvcHRpb24gd2hpY2ggb25seSBkaXNhYmxlcyB0aGUgLWxzdGRjKysuCi0KLUEgInN0YW5kYXJkIiBnY2MgYnVpbGQgdXNlcyB4Z2NjIGFuZCBoZW5jZSBhdm9pZHMgdGhpcy4gV2Ugc2hvdWxkIGFzayB1cHN0cmVhbSBob3cgdG8KLWRvIHRoaXMgb2ZmaWNpYWxseSwgdGhlIGxpa2VseSBhbnN3ZXIgaXMgZG9uJ3QgYnVpbGQgbGlic3RkYysrIHNlcGFyYXRlbHkuCi0KLVJQIDI5LzYvMTAKLQotU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KLQotVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtlbWJlZGRlZCBzcGVjaWZpY10KLS0tLQotIGdjYy9jLWZhbWlseS9jLm9wdCAgfCAgICA0ICsrKysKLSBnY2MvY3AvZysrc3BlYy5jICAgIHwgICAgMSArCi0gZ2NjL2RvYy9pbnZva2UudGV4aSB8ICAgIDkgKysrKysrKy0tCi0gZ2NjL2djYy5jICAgICAgICAgICB8ICAgIDEgKwotIDQgZmlsZXMgY2hhbmdlZCwgMTMgaW5zZXJ0aW9ucygrKSwgMiBkZWxldGlvbnMoLSkKLQotSW5kZXg6IGdjYy00LjktMjAxNDAzMTYvZ2NjL2MtZmFtaWx5L2Mub3B0Ci09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLS0gZ2NjLTQuOS0yMDE0MDMxNi5vcmlnL2djYy9jLWZhbWlseS9jLm9wdAotKysrIGdjYy00LjktMjAxNDAzMTYvZ2NjL2MtZmFtaWx5L2Mub3B0Ci1AQCAtMTMyMyw2ICsxMzIzLDEwIEBAIG5vc3RkaW5jKysKLSBDKysgT2JqQysrCi0gRG8gbm90IHNlYXJjaCBzdGFuZGFyZCBzeXN0ZW0gaW5jbHVkZSBkaXJlY3RvcmllcyBmb3IgQysrCi0gCi0rbm9zdGRsaWIrKwotK0RyaXZlcgotK0RvIG5vdCBsaW5rIHN0YW5kYXJkIEMrKyBydW50aW1lIGxpYnJhcnkKLSsKLSBvCi0gQyBPYmpDIEMrKyBPYmpDKysgSm9pbmVkIFNlcGFyYXRlCi0gOyBEb2N1bWVudGVkIGluIGNvbW1vbi5vcHQKLUluZGV4OiBnY2MtNC45LTIwMTQwMzE2L2djYy9jcC9nKytzcGVjLmMKLT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tLSBnY2MtNC45LTIwMTQwMzE2Lm9yaWcvZ2NjL2NwL2crK3NwZWMuYwotKysrIGdjYy00LjktMjAxNDAzMTYvZ2NjL2NwL2crK3NwZWMuYwotQEAgLTEzOCw2ICsxMzgsNyBAQCBsYW5nX3NwZWNpZmljX2RyaXZlciAoc3RydWN0IGNsX2RlY29kZWRfCi0gICAgICAgc3dpdGNoIChkZWNvZGVkX29wdGlvbnNbaV0ub3B0X2luZGV4KQotIAl7Ci0gCWNhc2UgT1BUX25vc3RkbGliOgotKwljYXNlIE9QVF9ub3N0ZGxpYl9fOgotIAljYXNlIE9QVF9ub2RlZmF1bHRsaWJzOgotIAkgIGxpYnJhcnkgPSAtMTsKLSAJICBicmVhazsKLUluZGV4OiBnY2MtNC45LTIwMTQwMzE2L2djYy9kb2MvaW52b2tlLnRleGkKLT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tLSBnY2MtNC45LTIwMTQwMzE2Lm9yaWcvZ2NjL2RvYy9pbnZva2UudGV4aQotKysrIGdjYy00LjktMjAxNDAzMTYvZ2NjL2RvYy9pbnZva2UudGV4aQotQEAgLTE5Myw2ICsxOTMsNyBAQCBpbiB0aGUgZm9sbG93aW5nIHNlY3Rpb25zLgotIC1mdmlzaWJpbGl0eS1pbmxpbmVzLWhpZGRlbiBAZ29sCi0gLWZ2dGFibGUtdmVyaWZ5PUB2YXJ7c3RkfHByZWluaXR8bm9uZX0gQGdvbAotIC1mdnR2LWNvdW50cyAtZnZ0di1kZWJ1ZyBAZ29sCi0rLW5vc3RkbGliKysgQGdvbAotIC1mdmlzaWJpbGl0eS1tcy1jb21wYXQgQGdvbAotIC1mZXh0LW51bWVyaWMtbGl0ZXJhbHMgQGdvbAotIC1XYWJpICAtV2NvbnZlcnNpb24tbnVsbCAgLVdjdG9yLWR0b3ItcHJpdmFjeSBAZ29sCi1AQCAtNDU3LDcgKzQ1OCw3IEBAIE9iamVjdGl2ZS1DIGFuZCBPYmplY3RpdmUtQysrIERpYWxlY3RzfS4KLSAtbm9zdGFydGZpbGVzICAtbm9kZWZhdWx0bGlicyAgLW5vc3RkbGliIC1waWUgLXJkeW5hbWljIEBnb2wKLSAtcyAgLXN0YXRpYyAtc3RhdGljLWxpYmdjYyAtc3RhdGljLWxpYnN0ZGMrKyBAZ29sCi0gLXN0YXRpYy1saWJhc2FuIC1zdGF0aWMtbGlidHNhbiAtc3RhdGljLWxpYmxzYW4gLXN0YXRpYy1saWJ1YnNhbiBAZ29sCi0tLXNoYXJlZCAtc2hhcmVkLWxpYmdjYyAgLXN5bWJvbGljIEBnb2wKLSstc2hhcmVkIC1zaGFyZWQtbGliZ2NjICAtc3ltYm9saWMgLW5vc3RkbGliKysgQGdvbAotIC1UIEB2YXJ7c2NyaXB0fSAgLVdsLEB2YXJ7b3B0aW9ufSAgLVhsaW5rZXIgQHZhcntvcHRpb259IEBnb2wKLSAtdSBAdmFye3N5bWJvbH19Ci0gCi1AQCAtMTAyODUsNiArMTAyODYsMTEgQEAgVGhlc2UgZW50cmllcyBhcmUgdXN1YWxseSByZXNvbHZlZCBieSBlbgotIGxpYmMuICBUaGVzZSBlbnRyeSBwb2ludHMgc2hvdWxkIGJlIHN1cHBsaWVkIHRocm91Z2ggc29tZSBvdGhlcgotIG1lY2hhbmlzbSB3aGVuIHRoaXMgb3B0aW9uIGlzIHNwZWNpZmllZC4KLSAKLStAaXRlbSAtbm9zdGRsaWIrKwotK0BvcGluZGV4IG5vc3RkbGliKysKLStEbyBub3QgdXNlIHRoZSBzdGFuZGFyZCBzeXN0ZW0gQysrIHJ1bnRpbWUgbGlicmFyaWVzIHdoZW4gbGlua2luZy4KLStPbmx5IHRoZSBsaWJyYXJpZXMgeW91IHNwZWNpZnkgd2lsbCBiZSBwYXNzZWQgdG8gdGhlIGxpbmtlci4KLSsKLSBAY2luZGV4IEBvcHRpb257LWxnY2N9LCB1c2Ugd2l0aCBAb3B0aW9uey1ub3N0ZGxpYn0KLSBAY2luZGV4IEBvcHRpb257LW5vc3RkbGlifSBhbmQgdW5yZXNvbHZlZCByZWZlcmVuY2VzCi0gQGNpbmRleCB1bnJlc29sdmVkIHJlZmVyZW5jZXMgYW5kIEBvcHRpb257LW5vc3RkbGlifQotSW5kZXg6IGdjYy00LjktMjAxNDAzMTYvZ2NjL2djYy5jCi09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLS0gZ2NjLTQuOS0yMDE0MDMxNi5vcmlnL2djYy9nY2MuYwotKysrIGdjYy00LjktMjAxNDAzMTYvZ2NjL2djYy5jCi1AQCAtNzcyLDYgKzc3Miw3IEBAIHByb3BlciBwb3NpdGlvbiBhbW9uZyB0aGUgb3RoZXIgb3V0cHV0IGYKLSAgICAgJShtZmxpYikgIiBTVEFDS19TUExJVF9TUEVDICJcCi0gICAgICV7ZnByb2ZpbGUtYXJjc3xmcHJvZmlsZS1nZW5lcmF0ZSp8Y292ZXJhZ2U6LWxnY292fSAiIFNBTklUSVpFUl9TUEVDICIgXAotICAgICAleyFub3N0ZGxpYjoleyFub2RlZmF1bHRsaWJzOiUobGlua19zc3ApICUobGlua19nY2NfY19zZXF1ZW5jZSl9fVwKLSsgICAgJXshbm9zdGRsaWIrKzp9XAotICAgICAleyFub3N0ZGxpYjoleyFub3N0YXJ0ZmlsZXM6JUV9fSAle1QqfSB9fX19fX0iCi0gI2VuZGlmCi0gCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNC45LzAwMjEtZ2NjLWRpc2FibGUtTUFTS19SRUxBWF9QSUNfQ0FMTFMtYml0LnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTQuOS8wMDIxLWdjYy1kaXNhYmxlLU1BU0tfUkVMQVhfUElDX0NBTExTLWJpdC5wYXRjaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZWIzYzYxZi4uMDAwMDAwMAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNC45LzAwMjEtZ2NjLWRpc2FibGUtTUFTS19SRUxBWF9QSUNfQ0FMTFMtYml0LnBhdGNoCisrKyAvZGV2L251bGwKQEAgLTEsNTkgKzAsMCBAQAotRnJvbSAwMDQ2OTZlMDU0YWU5ZGM3MWQ1MTJjYzc1NWNjYzQwNzRmYzYyYjJkIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQotRnJvbTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KLURhdGU6IEZyaSwgMjkgTWFyIDIwMTMgMDk6MTQ6MjAgKzA0MDAKLVN1YmplY3Q6IFtQQVRDSCAyMS8zNV0gZ2NjOiBkaXNhYmxlIE1BU0tfUkVMQVhfUElDX0NBTExTIGJpdAotCi1UaGUgbmV3IGZlYXR1cmUgYWRkZWQgYWZ0ZXIgNC4zLjMKLSJodHRwOi8vd3d3LnB1YmJzLm5ldC8yMDA5MDkvZ2NjLzk0MDQ4LXBhdGNoLWFkZC1zdXBwb3J0LWZvci1ybWlwc2phbHIuaHRtbCIKLXdpbGwgY2F1c2UgY2MxcGx1cyBlYXQgdXAgYWxsIHRoZSBzeXN0ZW0gbWVtb3J5IHdoZW4gYnVpbGQgd2Via2l0LWd0ay4KLVRoZSBmdW5jdGlvbiBtaXBzX2dldF9waWNfY2FsbF9zeW1ib2wga2VlcHMgb24gcmVjdXJzaXZlbHkgY2FsbGluZyBpdHNlbGYuCi1EaXNhYmxlIHRoaXMgZmVhdHVyZSB0byB3YWxrIGFzaWRlIHRoZSBidWcuCi0KLVNpZ25lZC1vZmYtYnk6IERvbmd4aWFvIFh1IDxkb25neGlhby54dUBpbnRlbC5jb20+Ci1TaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgotCi1VcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW2NvbmZpZ3VyYXRpb25dCi0tLS0KLSBnY2MvY29uZmlndXJlICAgIHwgICAgNyAtLS0tLS0tCi0gZ2NjL2NvbmZpZ3VyZS5hYyB8ICAgIDcgLS0tLS0tLQotIDIgZmlsZXMgY2hhbmdlZCwgMTQgZGVsZXRpb25zKC0pCi0KLWRpZmYgLS1naXQgYS9nY2MvY29uZmlndXJlIGIvZ2NjL2NvbmZpZ3VyZQotaW5kZXggYjY1ZDIxZC4uYmRhYjQ1YSAxMDA3NTUKLS0tLSBhL2djYy9jb25maWd1cmUKLSsrKyBiL2djYy9jb25maWd1cmUKLUBAIC0yNTgyOSwxMyArMjU4MjksNiBAQCAkYXNfZWNob19uICJjaGVja2luZyBhc3NlbWJsZXIgYW5kIGxpbmtlciBmb3IgZXhwbGljaXQgSkFMUiByZWxvY2F0aW9uLi4uICIgPiY2OwotICAgICAgICAgcm0gLWYgY29uZnRlc3QuKgotICAgICAgIGZpCi0gICAgIGZpCi0tICAgIGlmIHRlc3QgJGdjY19jdl9hc19sZF9qYWxyX3JlbG9jID0geWVzOyB0aGVuCi0tICAgICAgaWYgdGVzdCB4JHRhcmdldF9jcHVfZGVmYXVsdCA9IHg7IHRoZW4KLS0gICAgICAgIHRhcmdldF9jcHVfZGVmYXVsdD1NQVNLX1JFTEFYX1BJQ19DQUxMUwotLSAgICAgIGVsc2UKLS0gICAgICAgIHRhcmdldF9jcHVfZGVmYXVsdD0iKCR0YXJnZXRfY3B1X2RlZmF1bHQpfE1BU0tfUkVMQVhfUElDX0NBTExTIgotLSAgICAgIGZpCi0tICAgIGZpCi0gICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkZ2NjX2N2X2FzX2xkX2phbHJfcmVsb2MiID4mNQotICRhc19lY2hvICIkZ2NjX2N2X2FzX2xkX2phbHJfcmVsb2MiID4mNjsgfQotIAotZGlmZiAtLWdpdCBhL2djYy9jb25maWd1cmUuYWMgYi9nY2MvY29uZmlndXJlLmFjCi1pbmRleCBlMjI2Yjg1Li41ZjVjOTA5IDEwMDY0NAotLS0tIGEvZ2NjL2NvbmZpZ3VyZS5hYwotKysrIGIvZ2NjL2NvbmZpZ3VyZS5hYwotQEAgLTQwOTksMTMgKzQwOTksNiBAQCB4OgotICAgICAgICAgcm0gLWYgY29uZnRlc3QuKgotICAgICAgIGZpCi0gICAgIGZpCi0tICAgIGlmIHRlc3QgJGdjY19jdl9hc19sZF9qYWxyX3JlbG9jID0geWVzOyB0aGVuCi0tICAgICAgaWYgdGVzdCB4JHRhcmdldF9jcHVfZGVmYXVsdCA9IHg7IHRoZW4KLS0gICAgICAgIHRhcmdldF9jcHVfZGVmYXVsdD1NQVNLX1JFTEFYX1BJQ19DQUxMUwotLSAgICAgIGVsc2UKLS0gICAgICAgIHRhcmdldF9jcHVfZGVmYXVsdD0iKCR0YXJnZXRfY3B1X2RlZmF1bHQpfE1BU0tfUkVMQVhfUElDX0NBTExTIgotLSAgICAgIGZpCi0tICAgIGZpCi0gICAgIEFDX01TR19SRVNVTFQoJGdjY19jdl9hc19sZF9qYWxyX3JlbG9jKQotIAotICAgICBBQ19DQUNIRV9DSEVDSyhbbGlua2VyIGZvciAuZWhfZnJhbWUgcGVyc29uYWxpdHkgcmVsYXhhdGlvbl0sCi0tLSAKLTEuNy4xMC40Ci0KZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy00LjkvMDAyMi1DT0xMRUNUX0dDQ19PUFRJT05TLnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTQuOS8wMDIyLUNPTExFQ1RfR0NDX09QVElPTlMucGF0Y2gKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQwYzhhYmYuLjAwMDAwMDAKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTQuOS8wMDIyLUNPTExFQ1RfR0NDX09QVElPTlMucGF0Y2gKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi1Gcm9tIDdmNWM5ZGNjNzFjOGI4M2EwYjU1OTYyNjZjYzRiZGYwOTM2ZThlMDAgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCi1Gcm9tOiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgotRGF0ZTogRnJpLCAyOSBNYXIgMjAxMyAwOToxNjoyOCArMDQwMAotU3ViamVjdDogW1BBVENIIDIyLzM1XSBDT0xMRUNUX0dDQ19PUFRJT05TCi0KLVRoaXMgcGF0Y2ggYWRkcyAtLXN5c3Jvb3QgaW50byBDT0xMRUNUX0dDQ19PUFRJT05TIHdoaWNoIGlzIHVzZWQgdG8KLWludm9rZSBjb2xsZWN0Mi4KLQotU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KLQotVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCi0tLS0KLSBnY2MvZ2NjLmMgfCAgICA5ICsrKysrKysrKwotIDEgZmlsZSBjaGFuZ2VkLCA5IGluc2VydGlvbnMoKykKLQotZGlmZiAtLWdpdCBhL2djYy9nY2MuYyBiL2djYy9nY2MuYwotaW5kZXggNDc3NzUyZi4uNTEwNjJhYSAxMDA2NDQKLS0tLSBhL2djYy9nY2MuYwotKysrIGIvZ2NjL2djYy5jCi1AQCAtNDA5OCw2ICs0MDk4LDE1IEBAIHNldF9jb2xsZWN0X2djY19vcHRpb25zICh2b2lkKQotIAkJc2l6ZW9mICgiQ09MTEVDVF9HQ0NfT1BUSU9OUz0iKSAtIDEpOwotIAotICAgZmlyc3RfdGltZSA9IFRSVUU7Ci0rI2lmZGVmIEhBVkVfTERfU1lTUk9PVAotKyAgaWYgKHRhcmdldF9zeXN0ZW1fcm9vdF9jaGFuZ2VkICYmIHRhcmdldF9zeXN0ZW1fcm9vdCkKLSsgICAgewotKyAgICAgIG9ic3RhY2tfZ3JvdyAoJmNvbGxlY3Rfb2JzdGFjaywgIictLXN5c3Jvb3Q9Iiwgc2l6ZW9mKCInLS1zeXNyb290PSIpLTEpOwotKyAgICAgIG9ic3RhY2tfZ3JvdyAoJmNvbGxlY3Rfb2JzdGFjaywgdGFyZ2V0X3N5c3RlbV9yb290LHN0cmxlbih0YXJnZXRfc3lzdGVtX3Jvb3QpKTsKLSsgICAgICBvYnN0YWNrX2dyb3cgKCZjb2xsZWN0X29ic3RhY2ssICInIiwgMSk7Ci0rICAgICAgZmlyc3RfdGltZSA9IEZBTFNFOwotKyAgICB9Ci0rI2VuZGlmCi0gICBmb3IgKGkgPSAwOyAoaW50KSBpIDwgbl9zd2l0Y2hlczsgaSsrKQotICAgICB7Ci0gICAgICAgY29uc3QgY2hhciAqY29uc3QgKmFyZ3M7Ci0tLSAKLTEuNy4xMC40Ci0KZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy00LjkvMDAyMy1Vc2UtdGhlLWRlZmF1bHRzLmgtaW4tQi1pbnN0ZWFkLW9mLVMtYW5kLXQtb2UtaW4tQi5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy00LjkvMDAyMy1Vc2UtdGhlLWRlZmF1bHRzLmgtaW4tQi1pbnN0ZWFkLW9mLVMtYW5kLXQtb2UtaW4tQi5wYXRjaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZmRkZmU5ZS4uMDAwMDAwMAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNC45LzAwMjMtVXNlLXRoZS1kZWZhdWx0cy5oLWluLUItaW5zdGVhZC1vZi1TLWFuZC10LW9lLWluLUIucGF0Y2gKKysrIC9kZXYvbnVsbApAQCAtMSw5NiArMCwwIEBACi1Gcm9tIGY3ZDQ5Y2E0NDVlNjBmYWExYjUyNTZjNmI0Zjk2YzFlZTVjMGUzNTMgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCi1Gcm9tOiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgotRGF0ZTogRnJpLCAyOSBNYXIgMjAxMyAwOToxNzoyNSArMDQwMAotU3ViamVjdDogW1BBVENIIDIzLzM1XSBVc2UgdGhlIGRlZmF1bHRzLmggaW4gJHtCfSBpbnN0ZWFkIG9mICR7U30sIGFuZCB0LW9lCi0gaW4gJHtCfQotCi1Vc2UgdGhlIGRlZmF1bHRzLmggaW4gJHtCfSBpbnN0ZWFkIG9mICR7U30sIGFuZCB0LW9lIGluICR7Qn0sIHNvIHRoYXQKLXRoZSBzb3VyY2UgY2FuIGJlIHNoYXJlZCBiZXR3ZWVuIGdjYy1jcm9zcy1pbml0aWFsLAotZ2NjLWNyb3NzLWludGVybWVkaWF0ZSwgZ2NjLWNyb3NzLCBnY2MtcnVudGltZSwgYW5kIGFsc28gdGhlIHNkayBidWlsZC4KLQotU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KLQotVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCi0KLVdoaWxlIGNvbXBpbGluZyBnY2MtY3Jvc3NzZGstaW5pdGlhbC14ODZfNjQgb24gc29tZSBob3N0LCB0aGVyZSBpcwotb2NjYXNpb25hbGx5IGZhaWx1cmUgdGhhdCB0ZXN0IHRoZSBleGlzdGFuY2Ugb2YgZGVmYXVsdC5oIGRvZXNuJ3QKLXdvcmssIHRoZSByZWFzb24gaXMgdG1faW5jbHVkZV9saXN0PScqKiBkZWZhdWx0cy5oJyByYXRoZXIgdGhhbgotdG1faW5jbHVkZV9saXN0PScqKiAuL2RlZmF1bHRzLmgnCi0KLVNvIHdlIGFkZCB0aGUgdGVzdCBjb25kaXRpb24gZm9yIHRoaXMgc2l0dWF0aW9uLgotU2lnbmVkLW9mZi1ieTogSG9uZ3h1IEppYSA8aG9uZ3h1LmppYUB3aW5kcml2ZXIuY29tPgotLS0tCi0gZ2NjL01ha2VmaWxlLmluICB8ICAgIDIgKy0KLSBnY2MvY29uZmlndXJlICAgIHwgICAgNCArKy0tCi0gZ2NjL2NvbmZpZ3VyZS5hYyB8ICAgIDQgKystLQotIGdjYy9ta2NvbmZpZy5zaCAgfCAgICA0ICsrLS0KLSA0IGZpbGVzIGNoYW5nZWQsIDcgaW5zZXJ0aW9ucygrKSwgNyBkZWxldGlvbnMoLSkKLQotZGlmZiAtLWdpdCBhL2djYy9NYWtlZmlsZS5pbiBiL2djYy9NYWtlZmlsZS5pbgotaW5kZXggZDFhYjIyZi4uMTVmZTRiNiAxMDA2NDQKLS0tLSBhL2djYy9NYWtlZmlsZS5pbgotKysrIGIvZ2NjL01ha2VmaWxlLmluCi1AQCAtNDgzLDcgKzQ4Myw3IEBAIFRBUkdFVF9TWVNURU1fUk9PVCA9IEBUQVJHRVRfU1lTVEVNX1JPT1RACi0gVEFSR0VUX1NZU1RFTV9ST09UX0RFRklORSA9IEBUQVJHRVRfU1lTVEVNX1JPT1RfREVGSU5FQAotIAotIHhtYWtlX2ZpbGU9QHhtYWtlX2ZpbGVACi0tdG1ha2VfZmlsZT1AdG1ha2VfZmlsZUAKLSt0bWFrZV9maWxlPUB0bWFrZV9maWxlQCAuL3Qtb2UKLSBUTV9FTkRJQU5fQ09ORklHPUBUTV9FTkRJQU5fQ09ORklHQAotIFRNX01VTFRJTElCX0NPTkZJRz1AVE1fTVVMVElMSUJfQ09ORklHQAotIFRNX01VTFRJTElCX0VYQ0VQVElPTlNfQ09ORklHPUBUTV9NVUxUSUxJQl9FWENFUFRJT05TX0NPTkZJR0AKLWRpZmYgLS1naXQgYS9nY2MvY29uZmlndXJlIGIvZ2NjL2NvbmZpZ3VyZQotaW5kZXggNTM5OWIyYi4uNjBhMDRiZCAxMDA3NTUKLS0tLSBhL2djYy9jb25maWd1cmUKLSsrKyBiL2djYy9jb25maWd1cmUKLUBAIC0xMTYzMSw4ICsxMTYzMSw4IEBAIGZvciBmIGluICR0bV9maWxlOyBkbwotICAgICAgICB0bV9pbmNsdWRlX2xpc3Q9IiR7dG1faW5jbHVkZV9saXN0fSAkZiIKLSAgICAgICAgOzsKLSAgICAgZGVmYXVsdHMuaCApCi0tICAgICAgIHRtX2ZpbGVfbGlzdD0iJHt0bV9maWxlX2xpc3R9IFwkKHNyY2RpcikvJGYiCi0tICAgICAgIHRtX2luY2x1ZGVfbGlzdD0iJHt0bV9pbmNsdWRlX2xpc3R9ICRmIgotKyAgICAgICB0bV9maWxlX2xpc3Q9IiR7dG1fZmlsZV9saXN0fSAuLyRmIgotKyAgICAgICB0bV9pbmNsdWRlX2xpc3Q9IiR7dG1faW5jbHVkZV9saXN0fSAuLyRmIgotICAgICAgICA7OwotICAgICAqICkKLSAgICAgICAgdG1fZmlsZV9saXN0PSIke3RtX2ZpbGVfbGlzdH0gXCQoc3JjZGlyKS9jb25maWcvJGYiCi1kaWZmIC0tZ2l0IGEvZ2NjL2NvbmZpZ3VyZS5hYyBiL2djYy9jb25maWd1cmUuYWMKLWluZGV4IGY4N2MzYjYuLjQ2MGUwZDkgMTAwNjQ0Ci0tLS0gYS9nY2MvY29uZmlndXJlLmFjCi0rKysgYi9nY2MvY29uZmlndXJlLmFjCi1AQCAtMTc0MCw4ICsxNzQwLDggQEAgZm9yIGYgaW4gJHRtX2ZpbGU7IGRvCi0gICAgICAgIHRtX2luY2x1ZGVfbGlzdD0iJHt0bV9pbmNsdWRlX2xpc3R9ICRmIgotICAgICAgICA7OwotICAgICBkZWZhdWx0cy5oICkKLS0gICAgICAgdG1fZmlsZV9saXN0PSIke3RtX2ZpbGVfbGlzdH0gXCQoc3JjZGlyKS8kZiIKLS0gICAgICAgdG1faW5jbHVkZV9saXN0PSIke3RtX2luY2x1ZGVfbGlzdH0gJGYiCi0rICAgICAgIHRtX2ZpbGVfbGlzdD0iJHt0bV9maWxlX2xpc3R9IC4vJGYiCi0rICAgICAgIHRtX2luY2x1ZGVfbGlzdD0iJHt0bV9pbmNsdWRlX2xpc3R9IC4vJGYiCi0gICAgICAgIDs7Ci0gICAgICogKQotICAgICAgICB0bV9maWxlX2xpc3Q9IiR7dG1fZmlsZV9saXN0fSBcJChzcmNkaXIpL2NvbmZpZy8kZiIKLWRpZmYgLS1naXQgYS9nY2MvbWtjb25maWcuc2ggYi9nY2MvbWtjb25maWcuc2gKLWluZGV4IGM3MTQ2ZWQuLmIxNTNmNDUgMTAwNjQ0Ci0tLS0gYS9nY2MvbWtjb25maWcuc2gKLSsrKyBiL2djYy9ta2NvbmZpZy5zaAotQEAgLTc3LDcgKzc3LDcgQEAgaWYgWyAtbiAiJEhFQURFUlMiIF07IHRoZW4KLSAgICAgaWYgWyAkIyAtZ2UgMSBdOyB0aGVuCi0gCWVjaG8gJyNpZmRlZiBJTl9HQ0MnID4+ICR7b3V0cHV0fVQKLSAJZm9yIGZpbGUgaW4gIiRAIjsgZG8KLS0JICAgIGlmIHRlc3QgeCIkZmlsZSIgPSB4ImRlZmF1bHRzLmgiOyB0aGVuCi0rCSAgICBpZiB0ZXN0IHgiJGZpbGUiID0geCIuL2RlZmF1bHRzLmgiIC1vIHgiJGZpbGUiID0geCJkZWZhdWx0cy5oIjsgdGhlbgotIAkJcG9zdHBvbmVfZGVmYXVsdHNfaD0ieWVzIgotIAkgICAgZWxzZQotIAkJZWNobyAiIyBpbmNsdWRlIFwiJGZpbGVcIiIgPj4gJHtvdXRwdXR9VAotQEAgLTEwNiw3ICsxMDYsNyBAQCBlc2FjCi0gCi0gIyBJZiB3ZSBwb3N0cG9uZWQgaW5jbHVkaW5nIGRlZmF1bHRzLmgsIGFkZCB0aGUgI2luY2x1ZGUgbm93LgotIGlmIHRlc3QgeCIkcG9zdHBvbmVfZGVmYXVsdHNfaCIgPSB4InllcyI7IHRoZW4KLS0gICAgZWNobyAiIyBpbmNsdWRlIFwiZGVmYXVsdHMuaFwiIiA+PiAke291dHB1dH1UCi0rICAgIGVjaG8gIiMgaW5jbHVkZSBcIi4vZGVmYXVsdHMuaFwiIiA+PiAke291dHB1dH1UCi0gZmkKLSAKLSAjIEFkZCBtdWx0aXBsZSBpbmNsdXNpb24gcHJvdGVjdGlvbiBndWFyZCwgcGFydCB0d28uCi0tLSAKLTEuOS4xCi0KZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy00LjkvMDAyNS1mb3J0cmFuLWNyb3NzLWNvbXBpbGUtaGFjay5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy00LjkvMDAyNS1mb3J0cmFuLWNyb3NzLWNvbXBpbGUtaGFjay5wYXRjaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMGU3OTE0ZC4uMDAwMDAwMAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNC45LzAwMjUtZm9ydHJhbi1jcm9zcy1jb21waWxlLWhhY2sucGF0Y2gKKysrIC9kZXYvbnVsbApAQCAtMSw0NiArMCwwIEBACi1Gcm9tIGFmOGE1NmVhNGUxN2IyOTA5ZWZmMmM1NzcwNGFiNDNlZjI0ZjI4ZDMgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCi1Gcm9tOiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgotRGF0ZTogRnJpLCAyOSBNYXIgMjAxMyAwOToyMDowMSArMDQwMAotU3ViamVjdDogW1BBVENIIDI1LzM1XSBmb3J0cmFuIGNyb3NzLWNvbXBpbGUgaGFjay4KLQotKiBGb3J0cmFuIHdvdWxkIGhhdmUgc2VhcmNoZWQgZm9yIGFybS1hbmdzdHJvbS1nbnVlYWJpLWdmb3J0cmFuIGJ1dCB3b3VsZCBoYXZlIHVzZWQKLXVzZWQgZ2ZvcnRhbi4gRm9yIGdjY180LjIuMi5iYiB3ZSB3YW50IHRvIHVzZSB0aGUgZ2ZvcnRyYW4gY29tcGlsZXIgZnJvbSBvdXIgY3Jvc3MKLWRpcmVjdG9yeS4KLQotU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KLQotVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtlbWJlZGRlZCBzcGVjaWZpY10KLS0tLQotIGxpYmdmb3J0cmFuL2NvbmZpZ3VyZSAgICB8ICAgIDIgKy0KLSBsaWJnZm9ydHJhbi9jb25maWd1cmUuYWMgfCAgICAyICstCi0gMiBmaWxlcyBjaGFuZ2VkLCAyIGluc2VydGlvbnMoKyksIDIgZGVsZXRpb25zKC0pCi0KLWRpZmYgLS1naXQgYS9saWJnZm9ydHJhbi9jb25maWd1cmUgYi9saWJnZm9ydHJhbi9jb25maWd1cmUKLWluZGV4IDgzODVlOTYuLmI4ZjdhOTIgMTAwNzU1Ci0tLS0gYS9saWJnZm9ydHJhbi9jb25maWd1cmUKLSsrKyBiL2xpYmdmb3J0cmFuL2NvbmZpZ3VyZQotQEAgLTEyNzA0LDcgKzEyNzA0LDcgQEAgZXNhYwotIAotICMgV2UgbmVlZCBnZm9ydHJhbiB0byBjb21waWxlIHBhcnRzIG9mIHRoZSBsaWJyYXJ5Ci0gI0FDX1BST0dfRkMoZ2ZvcnRyYW4pCi0tRkM9IiRHRk9SVFJBTiIKLSsjRkM9IiRHRk9SVFJBTiIKLSBhY19leHQ9JHthY19mY19zcmNleHQtZn0KLSBhY19jb21waWxlPSckRkMgLWMgJEZDRkxBR1MgJGFjX2ZjZmxhZ3Nfc3JjZXh0IGNvbmZ0ZXN0LiRhY19leHQgPiY1JwotIGFjX2xpbms9JyRGQyAtbyBjb25mdGVzdCRhY19leGVleHQgJEZDRkxBR1MgJExERkxBR1MgJGFjX2ZjZmxhZ3Nfc3JjZXh0IGNvbmZ0ZXN0LiRhY19leHQgJExJQlMgPiY1JwotZGlmZiAtLWdpdCBhL2xpYmdmb3J0cmFuL2NvbmZpZ3VyZS5hYyBiL2xpYmdmb3J0cmFuL2NvbmZpZ3VyZS5hYwotaW5kZXggN2Q5N2ZlZC4uM2Y5ZjQ4NCAxMDA2NDQKLS0tLSBhL2xpYmdmb3J0cmFuL2NvbmZpZ3VyZS5hYwotKysrIGIvbGliZ2ZvcnRyYW4vY29uZmlndXJlLmFjCi1AQCAtMjI3LDcgKzIyNyw3IEBAIEFDX1NVQlNUKGVuYWJsZV9zdGF0aWMpCi0gCi0gIyBXZSBuZWVkIGdmb3J0cmFuIHRvIGNvbXBpbGUgcGFydHMgb2YgdGhlIGxpYnJhcnkKLSAjQUNfUFJPR19GQyhnZm9ydHJhbikKLS1GQz0iJEdGT1JUUkFOIgotKyNGQz0iJEdGT1JUUkFOIgotIEFDX1BST0dfRkMoZ2ZvcnRyYW4pCi0gCi0gIyBleHRyYSBMRCBGbGFncyB3aGljaCBhcmUgcmVxdWlyZWQgZm9yIHRhcmdldHMKLS0tIAotMS43LjEwLjQKLQpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTQuOS8wMDI2LWxpYmdjYy1zamxqLWNoZWNrLnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTQuOS8wMDI2LWxpYmdjYy1zamxqLWNoZWNrLnBhdGNoCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkNGVmYWI5Li4wMDAwMDAwCi0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy00LjkvMDAyNi1saWJnY2Mtc2psai1jaGVjay5wYXRjaAorKysgL2Rldi9udWxsCkBAIC0xLDc0ICswLDAgQEAKLUZyb20gMDhjMjM5ODQ0NWU2Y2FjMjgyNDg4ZjY0YWU2YmYyOWNiY2Q4ZGIyMyBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKLUZyb206IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+Ci1EYXRlOiBGcmksIDI5IE1hciAyMDEzIDA5OjIwOjUwICswNDAwCi1TdWJqZWN0OiBbUEFUQ0ggMjYvMzVdIGxpYmdjYy1zamxqLWNoZWNrCi0KLWFjX2ZuX2NfdHJ5X2NvbXBpbGUgZG9lc250IHNlZW0gdG8ga2VlcCB0aGUgaW50ZXJtZWRpYXRlIGZpbGVzCi13aGljaCBhcmUgbmVlZGVkIGZvciBzamxqIHRlc3QgdG8gcGFzcyBzaW5jZSBpdCBncmVwcyBpbnRvIHRoZQotZ2VuZXJhdGVkIGZpbGUuIFNvIHdlIHJ1biB0aGUgY29tcGlsZXIgY29tbWFuZCB1c2luZyBBQ19UUllfQ09NTUFORAotd2hpY2ggdGhlbiBnZW5lcmF0ZXMgdGhlIG5lZWRlZCAucyBmaWxlCi0KLVNpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+Ci0KLVVwc3RyZWFtLVN0YXR1czogUGVuZGluZwotLS0tCi0gbGliZ2NjL2NvbmZpZ3VyZSAgICB8ICAgMTAgKysrKysrLS0tLQotIGxpYmdjYy9jb25maWd1cmUuYWMgfCAgIDEwICsrKystLS0tLS0KLSAyIGZpbGVzIGNoYW5nZWQsIDEwIGluc2VydGlvbnMoKyksIDEwIGRlbGV0aW9ucygtKQotCi1kaWZmIC0tZ2l0IGEvbGliZ2NjL2NvbmZpZ3VyZSBiL2xpYmdjYy9jb25maWd1cmUKLWluZGV4IDE0MjVkZjYuLmQxOGUzY2IgMTAwNjQ0Ci0tLS0gYS9saWJnY2MvY29uZmlndXJlCi0rKysgYi9saWJnY2MvY29uZmlndXJlCi1AQCAtNDIwOCwxNyArNDIwOCwxOSBAQCB2b2lkIGZvbyAoKQotIH0KLSAKLSBfQUNFT0YKLS1DRkxBR1NfaG9sZD0kQ0ZMQUdTCi0tQ0ZMQUdTPSItLXNhdmUtdGVtcHMgLWZleGNlcHRpb25zIgotIGxpYmdjY19jdl9saWJfc2psal9leGNlcHRpb25zPXVua25vd24KLS1pZiBhY19mbl9jX3RyeV9jb21waWxlOyB0aGVuIDoKLStpZiB7IGFjX3RyeT0nJHtDQy1jY30gLWZleGNlcHRpb25zIC1TIGNvbmZ0ZXN0LmMgLW8gY29uZnRlc3QucyAxPiY1JwotKyAgeyB7IGV2YWwgZWNobyAiXCJcJGFzX21lXCI6JHthc19saW5lbm8tJExJTkVOT306IFwiJGFjX3RyeVwiIjsgfSA+JjUKLSsgIChldmFsICRhY190cnkpIDI+JjUKLSsgIGFjX3N0YXR1cz0kPwotKyAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0rICB0ZXN0ICRhY19zdGF0dXMgPSAwOyB9OyB9OyB0aGVuCi0gICBpZiBncmVwIF9VbndpbmRfU2pMal9SZXN1bWUgY29uZnRlc3QucyA+L2Rldi9udWxsIDI+JjE7IHRoZW4KLSAgICAgbGliZ2NjX2N2X2xpYl9zamxqX2V4Y2VwdGlvbnM9eWVzCi0gICBlbGlmIGdyZXAgX1Vud2luZF9SZXN1bWUgY29uZnRlc3QucyA+L2Rldi9udWxsIDI+JjE7IHRoZW4KLSAgICAgbGliZ2NjX2N2X2xpYl9zamxqX2V4Y2VwdGlvbnM9bm8KLSAgIGZpCi0gZmkKLS1DRkxBR1M9JENGTEFHU19ob2xkCi0gcm0gLWYgY29uZnRlc3QqCi0gCi0gZmkKLWRpZmYgLS1naXQgYS9saWJnY2MvY29uZmlndXJlLmFjIGIvbGliZ2NjL2NvbmZpZ3VyZS5hYwotaW5kZXggOGI3YWJhNS4uYzdjOTY0NCAxMDA2NDQKLS0tLSBhL2xpYmdjYy9jb25maWd1cmUuYWMKLSsrKyBiL2xpYmdjYy9jb25maWd1cmUuYWMKLUBAIC0yMTYsMTYgKzIxNiwxNCBAQCB2b2lkIGZvbyAoKQotICAgYmFyKCk7Ci0gfQotIF0pXSkKLS1DRkxBR1NfaG9sZD0kQ0ZMQUdTCi0tQ0ZMQUdTPSItLXNhdmUtdGVtcHMgLWZleGNlcHRpb25zIgotIGxpYmdjY19jdl9saWJfc2psal9leGNlcHRpb25zPXVua25vd24KLS1BU19JRihbYWNfZm5fY190cnlfY29tcGlsZV0sCi0tICBbaWYgZ3JlcCBfVW53aW5kX1NqTGpfUmVzdW1lIGNvbmZ0ZXN0LnMgPi9kZXYvbnVsbCAyPiYxOyB0aGVuCi0raWYgQUNfVFJZX0NPTU1BTkQoJHtDQy1jY30gLWZleGNlcHRpb25zIC1TIGNvbmZ0ZXN0LmMgLW8gY29uZnRlc3QucyAxPiZBU19NRVNTQUdFX0xPR19GRCk7IHRoZW4KLSsgIGlmIGdyZXAgX1Vud2luZF9TakxqX1Jlc3VtZSBjb25mdGVzdC5zID4vZGV2L251bGwgMj4mMTsgdGhlbgotICAgICBsaWJnY2NfY3ZfbGliX3NqbGpfZXhjZXB0aW9ucz15ZXMKLSAgIGVsaWYgZ3JlcCBfVW53aW5kX1Jlc3VtZSBjb25mdGVzdC5zID4vZGV2L251bGwgMj4mMTsgdGhlbgotICAgICBsaWJnY2NfY3ZfbGliX3NqbGpfZXhjZXB0aW9ucz1ubwotLSAgZmldKQotLUNGTEFHUz0kQ0ZMQUdTX2hvbGQKLSsgIGZpCi0rZmkKLSBybSAtZiBjb25mdGVzdCoKLSBdKQotIAotLS0gCi0xLjcuMTAuNAotCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNC45LzAwMjctY3BwLWhvbm9yLXN5c3Jvb3QucGF0Y2ggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNC45LzAwMjctY3BwLWhvbm9yLXN5c3Jvb3QucGF0Y2gKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDA1ZTk1MjEuLjAwMDAwMDAKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTQuOS8wMDI3LWNwcC1ob25vci1zeXNyb290LnBhdGNoCisrKyAvZGV2L251bGwKQEAgLTEsNTQgKzAsMCBAQAotRnJvbSBhMGY5YmQwOWM4MTZhZDI5ZWNmN2MyOWQ2YzI3ZjdkZjk3NzEwMzY0IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQotRnJvbTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KLURhdGU6IEZyaSwgMjkgTWFyIDIwMTMgMDk6MjI6MDAgKzA0MDAKLVN1YmplY3Q6IFtQQVRDSCAyNy8zNV0gY3BwOiBob25vciBzeXNyb290LgotCi1DdXJyZW50bHksIGlmIHRoZSBnY2MgdG9vbGNoYWluIGlzIHJlbG9jYXRlZCBhbmQgaW5zdGFsbGVkIGZyb20gc3N0YXRlLCB0aGVuIHlvdSB0cnkgYW5kIGNvbXBpbGUKLXByZXByb2Nlc3NlZCBzb3VyY2UgKC5pIG9yIC5paSBmaWxlcyksIHRoZSBjb21waWxlciB3aWxsIHRyeSBhbmQgYWNjZXNzIHRoZSBidWlsdGluIHN5c3Jvb3QgbG9jYXRpb24KLXJhdGhlciB0aGFuIHRoZSAtLXN5c3Jvb3Qgb3B0aW9uIHNwZWNpZmllZCBvbiB0aGUgY29tbWFuZGxpbmUuIElmIGFjY2VzcyB0byB0aGF0IGRpcmVjdG9yeSBpcwotcGVybWlzc2lvbiBkZW5pZWQgKHVucmVhZGFibGUpLCBnY2Mgd2lsbCBlcnJvci4KLQotVGhpcyBoYXBwZW5zIHdoZW4gY2NhY2hlIGlzIGluIHVzZSBkdWUgdG8gdGhlIGZhY3QgaXQgdXNlcyBwcmVwcm9jZXNzZWQgc291cmNlIGZpbGVzLgotCi1UaGUgZml4IGJlbG93IGFkZHMgJUkgdG8gdGhlIGNwcC1vdXRwdXQgc3BlYyBtYWNybyBzbyB0aGUgZGVmYXVsdCBzdWJzdGl0dXRpb25zIGZvciAtaXByZWZpeCwKLS1pc3lzdGVtLCAtaXN5c3Jvb3QgaGFwcGVuIGFuZCB0aGUgY29ycmVjdCBzeXNyb290IGlzIHVzZWQuCi0KLVtZT0NUTyAjMjA3NF0KLQotUlAgMjAxMi8wNC8xMwotCi1TaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgotCi1VcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKLS0tLQotIGdjYy9jcC9sYW5nLXNwZWNzLmggfCAgICAyICstCi0gZ2NjL2djYy5jICAgICAgICAgICB8ICAgIDIgKy0KLSAyIGZpbGVzIGNoYW5nZWQsIDIgaW5zZXJ0aW9ucygrKSwgMiBkZWxldGlvbnMoLSkKLQotZGlmZiAtLWdpdCBhL2djYy9jcC9sYW5nLXNwZWNzLmggYi9nY2MvY3AvbGFuZy1zcGVjcy5oCi1pbmRleCBhMDAxYzNlLi4xYWFlMWU0IDEwMDY0NAotLS0tIGEvZ2NjL2NwL2xhbmctc3BlY3MuaAotKysrIGIvZ2NjL2NwL2xhbmctc3BlY3MuaAotQEAgLTYzLDUgKzYzLDUgQEAgYWxvbmcgd2l0aCBHQ0M7IHNlZSB0aGUgZmlsZSBDT1BZSU5HMy4gIElmIG5vdCBzZWUKLSAgIHsiLmlpIiwgIkBjKystY3BwLW91dHB1dCIsIDAsIDAsIDB9LAotICAgeyJAYysrLWNwcC1vdXRwdXQiLAotICAgICIleyFNOiV7IU1NOiV7IUU6XAotLSAgICBjYzFwbHVzIC1mcHJlcHJvY2Vzc2VkICVpICUoY2MxX29wdGlvbnMpICUyXAotKyAgICBjYzFwbHVzIC1mcHJlcHJvY2Vzc2VkICVpICVJICUoY2MxX29wdGlvbnMpICUyXAotICAgICAleyFmc3ludGF4LW9ubHk6JShpbnZva2VfYXMpfX19fSIsIDAsIDAsIDB9LAotZGlmZiAtLWdpdCBhL2djYy9nY2MuYyBiL2djYy9nY2MuYwotaW5kZXggNTEwNjJhYS4uY2Y2Yjk5ZSAxMDA2NDQKLS0tLSBhL2djYy9nY2MuYwotKysrIGIvZ2NjL2djYy5jCi1AQCAtMTA0Miw3ICsxMDQyLDcgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBjb21waWxlciBkZWZhdWx0X2NvbXBpbGVyc1tdID0KLSAgICAgICAgICAgICAgICAgICAgICVXe28qOi0tb3V0cHV0LXBjaD0lKn19JVZ9fX19fX0iLCAwLCAwLCAwfSwKLSAgIHsiLmkiLCAiQGNwcC1vdXRwdXQiLCAwLCAwLCAwfSwKLSAgIHsiQGNwcC1vdXRwdXQiLAotLSAgICIleyFNOiV7IU1NOiV7IUU6Y2MxIC1mcHJlcHJvY2Vzc2VkICVpICUoY2MxX29wdGlvbnMpICV7IWZzeW50YXgtb25seTolKGludm9rZV9hcyl9fX19IiwgMCwgMCwgMH0sCi0rICAgIiV7IU06JXshTU06JXshRTpjYzEgLWZwcmVwcm9jZXNzZWQgJWkgJUkgJShjYzFfb3B0aW9ucykgJXshZnN5bnRheC1vbmx5OiUoaW52b2tlX2FzKX19fX0iLCAwLCAwLCAwfSwKLSAgIHsiLnMiLCAiQGFzc2VtYmxlciIsIDAsIDAsIDB9LAotICAgeyJAYXNzZW1ibGVyIiwKLSAgICAiJXshTToleyFNTToleyFFOiV7IVM6YXMgJShhc21fZGVidWcpICUoYXNtX29wdGlvbnMpICVpICVBIH19fX0iLCAwLCAwLCAwfSwKLS0tIAotMS43LjEwLjQKLQpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTQuOS8wMDI4LU1JUFM2NC1EZWZhdWx0LXRvLU42NC1BQkkucGF0Y2ggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNC45LzAwMjgtTUlQUzY0LURlZmF1bHQtdG8tTjY0LUFCSS5wYXRjaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjYzODcyMC4uMDAwMDAwMAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNC45LzAwMjgtTUlQUzY0LURlZmF1bHQtdG8tTjY0LUFCSS5wYXRjaAorKysgL2Rldi9udWxsCkBAIC0xLDMxICswLDAgQEAKLUZyb20gMzAxZTE4ZDQ3MTFkYjU5MjVlNzY3ZmFkMDhkZmZhOWNmZTBhMmYxZiBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKLUZyb206IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+Ci1EYXRlOiBGcmksIDI5IE1hciAyMDEzIDA5OjIzOjA4ICswNDAwCi1TdWJqZWN0OiBbUEFUQ0ggMjgvMzVdIE1JUFM2NDogRGVmYXVsdCB0byBONjQgQUJJCi0KLU1JUFM2NCBkZWZhdWx0cyB0byBuMzIgQUJJLCB0aGlzIHBhdGNoIG1ha2VzIGl0Ci1zbyB0aGF0IGl0IGRlZmF1bHRzIHRvIE42NCBBQkkKLQotU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KLQotVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtPRSBjb25maWcgc3BlY2lmaWNdCi0tLS0KLSBnY2MvY29uZmlnLmdjYyB8ICAgIDIgKy0KLSAxIGZpbGUgY2hhbmdlZCwgMSBpbnNlcnRpb24oKyksIDEgZGVsZXRpb24oLSkKLQotZGlmZiAtLWdpdCBhL2djYy9jb25maWcuZ2NjIGIvZ2NjL2NvbmZpZy5nY2MKLWluZGV4IDFhMGJlNTAuLjk4OWMyZmIgMTAwNjQ0Ci0tLS0gYS9nY2MvY29uZmlnLmdjYwotKysrIGIvZ2NjL2NvbmZpZy5nY2MKLUBAIC0xNzk3LDcgKzE3OTcsNyBAQCBtaXBzKi1tdGktbGludXgqKQotIG1pcHM2NCotKi1saW51eCogfCBtaXBzaXNhNjQqLSotbGludXgqKQotIAl0bV9maWxlPSJkYnhlbGYuaCBlbGZvcy5oIGdudS11c2VyLmggbGludXguaCBnbGliYy1zdGRpbnQuaCAke3RtX2ZpbGV9IG1pcHMvZ251LXVzZXIuaCBtaXBzL2dudS11c2VyNjQuaCBtaXBzL2xpbnV4NjQuaCBtaXBzL2xpbnV4LWNvbW1vbi5oIgotIAl0bWFrZV9maWxlPSIke3RtYWtlX2ZpbGV9IG1pcHMvdC1saW51eDY0IgotLQl0bV9kZWZpbmVzPSIke3RtX2RlZmluZXN9IE1JUFNfQUJJX0RFRkFVTFQ9QUJJX04zMiIKLSsJdG1fZGVmaW5lcz0iJHt0bV9kZWZpbmVzfSBNSVBTX0FCSV9ERUZBVUxUPUFCSV82NCIKLSAJY2FzZSAke3RhcmdldH0gaW4KLSAJCW1pcHM2NGVsLXN0LWxpbnV4LWdudSkKLSAJCQl0bV9maWxlPSIke3RtX2ZpbGV9IG1pcHMvc3QuaCIKLS0tIAotMS43LjEwLjQKLQpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTQuOS8wMDI5LURlZmluZS1HTElCQ19EWU5BTUlDX0xJTktFUi1hbmQtVUNMSUJDX0RZTkFNSUNfTElOS0UucGF0Y2ggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNC45LzAwMjktRGVmaW5lLUdMSUJDX0RZTkFNSUNfTElOS0VSLWFuZC1VQ0xJQkNfRFlOQU1JQ19MSU5LRS5wYXRjaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTY5ZDI5MC4uMDAwMDAwMAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNC45LzAwMjktRGVmaW5lLUdMSUJDX0RZTkFNSUNfTElOS0VSLWFuZC1VQ0xJQkNfRFlOQU1JQ19MSU5LRS5wYXRjaAorKysgL2Rldi9udWxsCkBAIC0xLDIyOCArMCwwIEBACi1Gcm9tIDI5ZDEyMzQ0ZmI2ODJhMDUzZGU1M2ViMDhiOTU3MDRjZjNiNjdhZjIgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCi1Gcm9tOiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgotRGF0ZTogRnJpLCAyOSBNYXIgMjAxMyAwOToyNDo1MCArMDQwMAotU3ViamVjdDogW1BBVENIIDI5LzM1XSBEZWZpbmUgR0xJQkNfRFlOQU1JQ19MSU5LRVIgYW5kIFVDTElCQ19EWU5BTUlDX0xJTktFUgotIHJlbGF0aXZlIHRvIFNZU1RFTUxJQlNfRElSCi0KLVRoaXMgcGF0Y2ggZGVmaW5lcyBHTElCQ19EWU5BTUlDX0xJTktFUiBhbmQgVUNMSUJDX0RZTkFNSUNfTElOS0VSCi1yZWxhdGl2ZSB0byBTWVNURU1MSUJTX0RJUiB3aGljaCBjYW4gYmUgc2V0IGluIGdlbmVyYXRlZCBoZWFkZXJzCi1UaGlzIGJyZWFrcyB0aGUgYXNzdW1wdGlvbiBvZiBoYXJkY29kZWQgbXVsdGlsaWIgaW4gZ2NjCi1DaGFuZ2UgaXMgb25seSBmb3IgdGhlIHN1cHBvcnRlZCBhcmNoaXRlY3R1cmVzIGluIE9FIGluY2x1ZGluZwotU0gsIHNwYXJjLCBhbHBoYSBmb3IgcG9zc2libGUgZnV0dXJlIHN1cHBvcnQgKGlmIGFueSkKLQotUmVtb3ZlcyB0aGUgZG9faGVhZGVyZml4IHRhc2sgaW4gbWV0YWRhdGEKLQotU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KLQotVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtPRSBjb25maWd1cmF0aW9uXQotLS0tCi0gZ2NjL2NvbmZpZy9hbHBoYS9saW51eC1lbGYuaCB8ICAgIDQgKystLQotIGdjYy9jb25maWcvYXJtL2xpbnV4LWVhYmkuaCAgfCAgICA0ICsrLS0KLSBnY2MvY29uZmlnL2FybS9saW51eC1lbGYuaCAgIHwgICAgMiArLQotIGdjYy9jb25maWcvaTM4Ni9saW51eC5oICAgICAgfCAgICAyICstCi0gZ2NjL2NvbmZpZy9pMzg2L2xpbnV4NjQuaCAgICB8ICAgIDYgKysrLS0tCi0gZ2NjL2NvbmZpZy9taXBzL2xpbnV4LmggICAgICB8ICAgIDIgKy0KLSBnY2MvY29uZmlnL21pcHMvbGludXg2NC5oICAgIHwgICAgOCArKysrLS0tLQotIGdjYy9jb25maWcvcnM2MDAwL2xpbnV4NjQuaCAgfCAgICA4ICsrKystLS0tCi0gZ2NjL2NvbmZpZy9zaC9saW51eC5oICAgICAgICB8ICAgIDIgKy0KLSBnY2MvY29uZmlnL3NwYXJjL2xpbnV4LmggICAgIHwgICAgMiArLQotIGdjYy9jb25maWcvc3BhcmMvbGludXg2NC5oICAgfCAgICA0ICsrLS0KLSAxMSBmaWxlcyBjaGFuZ2VkLCAyMiBpbnNlcnRpb25zKCspLCAyMiBkZWxldGlvbnMoLSkKLQotSW5kZXg6IGdjYy00LjkuMC9nY2MvY29uZmlnL2FscGhhL2xpbnV4LWVsZi5oCi09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLS0gZ2NjLTQuOS4wLm9yaWcvZ2NjL2NvbmZpZy9hbHBoYS9saW51eC1lbGYuaAkyMDE0LTA1LTA3IDE2OjQzOjUwLjYwOTEwNjUzNSArMDAwMAotKysrIGdjYy00LjkuMC9nY2MvY29uZmlnL2FscGhhL2xpbnV4LWVsZi5oCTIwMTQtMDUtMDcgMTY6NDM6NTAuNjA1MTA2NTM1ICswMDAwCi1AQCAtMjMsOCArMjMsOCBAQAotICNkZWZpbmUgRVhUUkFfU1BFQ1MgXAotIHsgImVsZl9keW5hbWljX2xpbmtlciIsIEVMRl9EWU5BTUlDX0xJTktFUiB9LAotIAotLSNkZWZpbmUgR0xJQkNfRFlOQU1JQ19MSU5LRVIJIi9saWIvbGQtbGludXguc28uMiIKLS0jZGVmaW5lIFVDTElCQ19EWU5BTUlDX0xJTktFUiAiL2xpYi9sZC11Q2xpYmMuc28uMCIKLSsjZGVmaW5lIEdMSUJDX0RZTkFNSUNfTElOS0VSCVNZU1RFTUxJQlNfRElSICJsZC1saW51eC5zby4yIgotKyNkZWZpbmUgVUNMSUJDX0RZTkFNSUNfTElOS0VSICBTWVNURU1MSUJTX0RJUiAibGQtdUNsaWJjLnNvLjAiCi0gI2lmIERFRkFVTFRfTElCQyA9PSBMSUJDX1VDTElCQwotICNkZWZpbmUgQ0hPT1NFX0RZTkFNSUNfTElOS0VSKEcsIFUpICIle21nbGliYzoiIEcgIjs6IiBVICJ9IgotICNlbGlmIERFRkFVTFRfTElCQyA9PSBMSUJDX0dMSUJDCi1JbmRleDogZ2NjLTQuOS4wL2djYy9jb25maWcvYXJtL2xpbnV4LWVhYmkuaAotPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0tIGdjYy00LjkuMC5vcmlnL2djYy9jb25maWcvYXJtL2xpbnV4LWVhYmkuaAkyMDE0LTA1LTA3IDE2OjQzOjUwLjYwOTEwNjUzNSArMDAwMAotKysrIGdjYy00LjkuMC9nY2MvY29uZmlnL2FybS9saW51eC1lYWJpLmgJMjAxNC0wNS0wNyAxNjo0Mzo1MC42MDUxMDY1MzUgKzAwMDAKLUBAIC02OCw4ICs2OCw4IEBACi0gICAgR0xJQkNfRFlOQU1JQ19MSU5LRVJfREVGQVVMVCBhbmQgVEFSR0VUX0RFRkFVTFRfRkxPQVRfQUJJLiAgKi8KLSAKLSAjdW5kZWYgIEdMSUJDX0RZTkFNSUNfTElOS0VSCi0tI2RlZmluZSBHTElCQ19EWU5BTUlDX0xJTktFUl9TT0ZUX0ZMT0FUICIvbGliL2xkLWxpbnV4LnNvLjMiCi0tI2RlZmluZSBHTElCQ19EWU5BTUlDX0xJTktFUl9IQVJEX0ZMT0FUICIvbGliL2xkLWxpbnV4LWFybWhmLnNvLjMiCi0rI2RlZmluZSBHTElCQ19EWU5BTUlDX0xJTktFUl9TT0ZUX0ZMT0FUIFNZU1RFTUxJQlNfRElSICJsZC1saW51eC5zby4zIgotKyNkZWZpbmUgR0xJQkNfRFlOQU1JQ19MSU5LRVJfSEFSRF9GTE9BVCBTWVNURU1MSUJTX0RJUiAibGQtbGludXgtYXJtaGYuc28uMyIKLSAjZGVmaW5lIEdMSUJDX0RZTkFNSUNfTElOS0VSX0RFRkFVTFQgR0xJQkNfRFlOQU1JQ19MSU5LRVJfU09GVF9GTE9BVAotIAotICNkZWZpbmUgR0xJQkNfRFlOQU1JQ19MSU5LRVIgXAotSW5kZXg6IGdjYy00LjkuMC9nY2MvY29uZmlnL2FybS9saW51eC1lbGYuaAotPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0tIGdjYy00LjkuMC5vcmlnL2djYy9jb25maWcvYXJtL2xpbnV4LWVsZi5oCTIwMTQtMDUtMDcgMTY6NDM6NTAuNjA5MTA2NTM1ICswMDAwCi0rKysgZ2NjLTQuOS4wL2djYy9jb25maWcvYXJtL2xpbnV4LWVsZi5oCTIwMTQtMDUtMDcgMTY6NDM6NTAuNjA1MTA2NTM1ICswMDAwCi1AQCAtNTcsNyArNTcsNyBAQAotIAotICNkZWZpbmUgTElCR0NDX1NQRUMgIiV7bWZsb2F0LWFiaT1zb2Z0KjotbGZsb2F0fSAtbGdjYyIKLSAKLS0jZGVmaW5lIEdMSUJDX0RZTkFNSUNfTElOS0VSICIvbGliL2xkLWxpbnV4LnNvLjIiCi0rI2RlZmluZSBHTElCQ19EWU5BTUlDX0xJTktFUiBTWVNURU1MSUJTX0RJUiAibGQtbGludXguc28uMiIKLSAKLSAjZGVmaW5lIExJTlVYX1RBUkdFVF9MSU5LX1NQRUMgICIle2gqfSBcCi0gICAgJXtzdGF0aWM6LUJzdGF0aWN9IFwKLUluZGV4OiBnY2MtNC45LjAvZ2NjL2NvbmZpZy9pMzg2L2xpbnV4LmgKLT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tLSBnY2MtNC45LjAub3JpZy9nY2MvY29uZmlnL2kzODYvbGludXguaAkyMDE0LTA1LTA3IDE2OjQzOjUwLjYwOTEwNjUzNSArMDAwMAotKysrIGdjYy00LjkuMC9nY2MvY29uZmlnL2kzODYvbGludXguaAkyMDE0LTA1LTA3IDE2OjQzOjUwLjYwNTEwNjUzNSArMDAwMAotQEAgLTIwLDQgKzIwLDQgQEAKLSA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uICAqLwotIAotICNkZWZpbmUgR05VX1VTRVJfTElOS19FTVVMQVRJT04gImVsZl9pMzg2IgotLSNkZWZpbmUgR0xJQkNfRFlOQU1JQ19MSU5LRVIgIi9saWIvbGQtbGludXguc28uMiIKLSsjZGVmaW5lIEdMSUJDX0RZTkFNSUNfTElOS0VSIFNZU1RFTUxJQlNfRElSICJsZC1saW51eC5zby4yIgotSW5kZXg6IGdjYy00LjkuMC9nY2MvY29uZmlnL2kzODYvbGludXg2NC5oCi09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLS0gZ2NjLTQuOS4wLm9yaWcvZ2NjL2NvbmZpZy9pMzg2L2xpbnV4NjQuaAkyMDE0LTA1LTA3IDE2OjQzOjUwLjYwOTEwNjUzNSArMDAwMAotKysrIGdjYy00LjkuMC9nY2MvY29uZmlnL2kzODYvbGludXg2NC5oCTIwMTQtMDUtMDcgMTY6NDM6NTAuNjA1MTA2NTM1ICswMDAwCi1AQCAtMjcsNiArMjcsNiBAQAotICNkZWZpbmUgR05VX1VTRVJfTElOS19FTVVMQVRJT042NCAiZWxmX3g4Nl82NCIKLSAjZGVmaW5lIEdOVV9VU0VSX0xJTktfRU1VTEFUSU9OWDMyICJlbGYzMl94ODZfNjQiCi0gCi0tI2RlZmluZSBHTElCQ19EWU5BTUlDX0xJTktFUjMyICIvbGliL2xkLWxpbnV4LnNvLjIiCi0tI2RlZmluZSBHTElCQ19EWU5BTUlDX0xJTktFUjY0ICIvbGliNjQvbGQtbGludXgteDg2LTY0LnNvLjIiCi0tI2RlZmluZSBHTElCQ19EWU5BTUlDX0xJTktFUlgzMiAiL2xpYngzMi9sZC1saW51eC14MzIuc28uMiIKLSsjZGVmaW5lIEdMSUJDX0RZTkFNSUNfTElOS0VSMzIgU1lTVEVNTElCU19ESVIgImxkLWxpbnV4LnNvLjIiCi0rI2RlZmluZSBHTElCQ19EWU5BTUlDX0xJTktFUjY0IFNZU1RFTUxJQlNfRElSICJsZC1saW51eC14ODYtNjQuc28uMiIKLSsjZGVmaW5lIEdMSUJDX0RZTkFNSUNfTElOS0VSWDMyIFNZU1RFTUxJQlNfRElSICJsZC1saW51eC14MzIuc28uMiIKLUluZGV4OiBnY2MtNC45LjAvZ2NjL2NvbmZpZy9taXBzL2xpbnV4LmgKLT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tLSBnY2MtNC45LjAub3JpZy9nY2MvY29uZmlnL21pcHMvbGludXguaAkyMDE0LTA1LTA3IDE2OjQzOjUwLjYwOTEwNjUzNSArMDAwMAotKysrIGdjYy00LjkuMC9nY2MvY29uZmlnL21pcHMvbGludXguaAkyMDE0LTA1LTA3IDE2OjQzOjUwLjYwNTEwNjUzNSArMDAwMAotQEAgLTE4LDggKzE4LDggQEAKLSA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uICAqLwotIAotICNkZWZpbmUgR0xJQkNfRFlOQU1JQ19MSU5LRVIgXAotLSAgIiV7bW5hbj0yMDA4Oi9saWIvbGQtbGludXgtbWlwc244LnNvLjE7Oi9saWIvbGQuc28uMX0iCi0rICAiJXttbmFuPTIwMDg6IiBTWVNURU1MSUJTX0RJUiAibGQtbGludXgtbWlwc244LnNvLjE7OiIgU1lTVEVNTElCU19ESVIgImxkLnNvLjF9IgotIAotICN1bmRlZiBVQ0xJQkNfRFlOQU1JQ19MSU5LRVIKLSAjZGVmaW5lIFVDTElCQ19EWU5BTUlDX0xJTktFUiBcCi0tICAiJXttbmFuPTIwMDg6L2xpYi9sZC11Q2xpYmMtbWlwc244LnNvLjA7Oi9saWIvbGQtdUNsaWJjLnNvLjB9IgotKyAgIiV7bW5hbj0yMDA4OiIgU1lTVEVNTElCU19ESVIgImxkLXVDbGliYy1taXBzbjguc28uMDs6IiBTWVNURU1MSUJTX0RJUiAibGQtdUNsaWJjLnNvLjB9IgotSW5kZXg6IGdjYy00LjkuMC9nY2MvY29uZmlnL21pcHMvbGludXg2NC5oCi09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLS0gZ2NjLTQuOS4wLm9yaWcvZ2NjL2NvbmZpZy9taXBzL2xpbnV4NjQuaAkyMDE0LTA1LTA3IDE2OjQzOjUwLjYwOTEwNjUzNSArMDAwMAotKysrIGdjYy00LjkuMC9nY2MvY29uZmlnL21pcHMvbGludXg2NC5oCTIwMTQtMDUtMDcgMTY6NDM6NTAuNjA1MTA2NTM1ICswMDAwCi1AQCAtMjMsMjAgKzIzLDIwIEBACi0gI2RlZmluZSBHTlVfVVNFUl9MSU5LX0VNVUxBVElPTk4zMiAiZWxmMzIle0VCOmJ9JXtFTDpsfXRzbWlwbjMyIgotIAotICNkZWZpbmUgR0xJQkNfRFlOQU1JQ19MSU5LRVIzMiBcCi0tICAiJXttbmFuPTIwMDg6L2xpYi9sZC1saW51eC1taXBzbjguc28uMTs6L2xpYi9sZC5zby4xfSIKLSsgICIle21uYW49MjAwODoiIFNZU1RFTUxJQlNfRElSICJsZC1saW51eC1taXBzbjguc28uMTs6IiBTWVNURU1MSUJTX0RJUiAibGQuc28uMX0iCi0gI2RlZmluZSBHTElCQ19EWU5BTUlDX0xJTktFUjY0IFwKLS0gICIle21uYW49MjAwODovbGliNjQvbGQtbGludXgtbWlwc244LnNvLjE7Oi9saWI2NC9sZC5zby4xfSIKLSsgICIle21uYW49MjAwODoiIFNZU1RFTUxJQlNfRElSICJsZC1saW51eC1taXBzbjguc28uMTs6IiBTWVNURU1MSUJTX0RJUiAibGQuc28uMX0iCi0gI2RlZmluZSBHTElCQ19EWU5BTUlDX0xJTktFUk4zMiBcCi0tICAiJXttbmFuPTIwMDg6L2xpYjMyL2xkLWxpbnV4LW1pcHNuOC5zby4xOzovbGliMzIvbGQuc28uMX0iCi0rICAiJXttbmFuPTIwMDg6IiBTWVNURU1MSUJTX0RJUiAibGQtbGludXgtbWlwc244LnNvLjE7OiIgU1lTVEVNTElCU19ESVIgImxkLnNvLjF9IgotIAotICN1bmRlZiBVQ0xJQkNfRFlOQU1JQ19MSU5LRVIzMgotICNkZWZpbmUgVUNMSUJDX0RZTkFNSUNfTElOS0VSMzIgXAotLSAgIiV7bW5hbj0yMDA4Oi9saWIvbGQtdUNsaWJjLW1pcHNuOC5zby4wOzovbGliL2xkLXVDbGliYy5zby4wfSIKLSsgICIle21uYW49MjAwODoiIFNZU1RFTUxJQlNfRElSICJsZC11Q2xpYmMtbWlwc244LnNvLjA7OiIgU1lTVEVNTElCU19ESVIgImxkLXVDbGliYy5zby4wfSIKLSAjdW5kZWYgVUNMSUJDX0RZTkFNSUNfTElOS0VSNjQKLSAjZGVmaW5lIFVDTElCQ19EWU5BTUlDX0xJTktFUjY0IFwKLS0gICIle21uYW49MjAwODovbGliL2xkNjQtdUNsaWJjLW1pcHNuOC5zby4wOzovbGliL2xkNjQtdUNsaWJjLnNvLjB9IgotKyAgIiV7bW5hbj0yMDA4OiIgU1lTVEVNTElCU19ESVIgImxkNjQtdUNsaWJjLW1pcHNuOC5zby4wOzoiIFNZU1RFTUxJQlNfRElSICJsZDY0LXVDbGliYy5zby4wfSIKLSAjZGVmaW5lIFVDTElCQ19EWU5BTUlDX0xJTktFUk4zMiBcCi0tICAiJXttbmFuPTIwMDg6L2xpYjMyL2xkLXVDbGliYy1taXBzbjguc28uMDs6L2xpYjMyL2xkLXVDbGliYy5zby4wfSIKLSsgICIle21uYW49MjAwODoiIFNZU1RFTUxJQlNfRElSICJsZC11Q2xpYmMtbWlwc244LnNvLjA7OiIgU1lTVEVNTElCU19ESVIgImxkLXVDbGliYy5zby4wfSIKLSAKLSAjZGVmaW5lIEJJT05JQ19EWU5BTUlDX0xJTktFUk4zMiAiL3N5c3RlbS9iaW4vbGlua2VyMzIiCi0gI2RlZmluZSBHTlVfVVNFUl9EWU5BTUlDX0xJTktFUk4zMiBcCi1JbmRleDogZ2NjLTQuOS4wL2djYy9jb25maWcvcnM2MDAwL2xpbnV4NjQuaAotPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0tIGdjYy00LjkuMC5vcmlnL2djYy9jb25maWcvcnM2MDAwL2xpbnV4NjQuaAkyMDE0LTA1LTA3IDE2OjQzOjUwLjYwOTEwNjUzNSArMDAwMAotKysrIGdjYy00LjkuMC9nY2MvY29uZmlnL3JzNjAwMC9saW51eDY0LmgJMjAxNC0wNS0wNyAxNjo0Mzo1MC42MDUxMDY1MzUgKzAwMDAKLUBAIC0zNjcsMTQgKzM2NywxNCBAQAotICN1bmRlZglMSU5LX09TX0RFRkFVTFRfU1BFQwotICNkZWZpbmUgTElOS19PU19ERUZBVUxUX1NQRUMgIiUobGlua19vc19saW51eCkiCi0gCi0tI2RlZmluZSBHTElCQ19EWU5BTUlDX0xJTktFUjMyICIvbGliL2xkLnNvLjEiCi0rI2RlZmluZSBHTElCQ19EWU5BTUlDX0xJTktFUjMyIFNZU1RFTUxJQlNfRElSICJsZC5zby4xIgotICNpZmRlZiBMSU5VWDY0X0RFRkFVTFRfQUJJX0VMRnYyCi0tI2RlZmluZSBHTElCQ19EWU5BTUlDX0xJTktFUjY0ICIle21hYmk9ZWxmdjE6L2xpYjY0L2xkNjQuc28uMTs6L2xpYjY0L2xkNjQuc28uMn0iCi0rI2RlZmluZSBHTElCQ19EWU5BTUlDX0xJTktFUjY0ICIle21hYmk9ZWxmdjE6IiBTWVNURU1MSUJTX0RJUiAibGQ2NC5zby4xOzoiIFNZU1RFTUxJQlNfRElSICJsZDY0LnNvLjJ9IgotICNlbHNlCi0tI2RlZmluZSBHTElCQ19EWU5BTUlDX0xJTktFUjY0ICIle21hYmk9ZWxmdjI6L2xpYjY0L2xkNjQuc28uMjs6L2xpYjY0L2xkNjQuc28uMX0iCi0rI2RlZmluZSBHTElCQ19EWU5BTUlDX0xJTktFUjY0ICIle21hYmk9ZWxmdjI6IiBTWVNURU1MSUJTX0RJUiAibGQ2NC5zby4yOzoiIFNZU1RFTUxJQlNfRElSICJsZDY0LnNvLjF9IgotICNlbmRpZgotLSNkZWZpbmUgVUNMSUJDX0RZTkFNSUNfTElOS0VSMzIgIi9saWIvbGQtdUNsaWJjLnNvLjAiCi0tI2RlZmluZSBVQ0xJQkNfRFlOQU1JQ19MSU5LRVI2NCAiL2xpYi9sZDY0LXVDbGliYy5zby4wIgotKyNkZWZpbmUgVUNMSUJDX0RZTkFNSUNfTElOS0VSMzIgU1lTVEVNTElCU19ESVIgImxkLXVDbGliYy5zby4wIgotKyNkZWZpbmUgVUNMSUJDX0RZTkFNSUNfTElOS0VSNjQgU1lTVEVNTElCU19ESVIgImxkNjQtdUNsaWJjLnNvLjAiCi0gI2lmIERFRkFVTFRfTElCQyA9PSBMSUJDX1VDTElCQwotICNkZWZpbmUgQ0hPT1NFX0RZTkFNSUNfTElOS0VSKEcsIFUpICIle21nbGliYzoiIEcgIjs6IiBVICJ9IgotICNlbGlmIERFRkFVTFRfTElCQyA9PSBMSUJDX0dMSUJDCi1JbmRleDogZ2NjLTQuOS4wL2djYy9jb25maWcvc2gvbGludXguaAotPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0tIGdjYy00LjkuMC5vcmlnL2djYy9jb25maWcvc2gvbGludXguaAkyMDE0LTA1LTA3IDE2OjQzOjUwLjYwOTEwNjUzNSArMDAwMAotKysrIGdjYy00LjkuMC9nY2MvY29uZmlnL3NoL2xpbnV4LmgJMjAxNC0wNS0wNyAxNjo0Mzo1MC42MDUxMDY1MzUgKzAwMDAKLUBAIC00Myw3ICs0Myw3IEBACi0gCi0gI2RlZmluZSBUQVJHRVRfQVNNX0ZJTEVfRU5EIGZpbGVfZW5kX2luZGljYXRlX2V4ZWNfc3RhY2sKLSAKLS0jZGVmaW5lIEdMSUJDX0RZTkFNSUNfTElOS0VSICIvbGliL2xkLWxpbnV4LnNvLjIiCi0rI2RlZmluZSBHTElCQ19EWU5BTUlDX0xJTktFUiBTWVNURU1MSUJTX0RJUiAibGQtbGludXguc28uMiIKLSAKLSAjdW5kZWYgU1VCVEFSR0VUX0xJTktfRU1VTF9TVUZGSVgKLSAjZGVmaW5lIFNVQlRBUkdFVF9MSU5LX0VNVUxfU1VGRklYICJfbGludXgiCi1JbmRleDogZ2NjLTQuOS4wL2djYy9jb25maWcvc3BhcmMvbGludXguaAotPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0tIGdjYy00LjkuMC5vcmlnL2djYy9jb25maWcvc3BhcmMvbGludXguaAkyMDE0LTA1LTA3IDE2OjQzOjUwLjYwOTEwNjUzNSArMDAwMAotKysrIGdjYy00LjkuMC9nY2MvY29uZmlnL3NwYXJjL2xpbnV4LmgJMjAxNC0wNS0wNyAxNjo0Mzo1MC42MDUxMDY1MzUgKzAwMDAKLUBAIC04Myw3ICs4Myw3IEBACi0gICAgV2hlbiB0aGUgLXNoYXJlZCBsaW5rIG9wdGlvbiBpcyB1c2VkIGEgZmluYWwgbGluayBpcyBub3QgYmVpbmcKLSAgICBkb25lLiAgKi8KLSAKLS0jZGVmaW5lIEdMSUJDX0RZTkFNSUNfTElOS0VSICIvbGliL2xkLWxpbnV4LnNvLjIiCi0rI2RlZmluZSBHTElCQ19EWU5BTUlDX0xJTktFUiBTWVNURU1MSUJTX0RJUiAibGQtbGludXguc28uMiIKLSAKLSAjdW5kZWYgIExJTktfU1BFQwotICNkZWZpbmUgTElOS19TUEVDICItbSBlbGYzMl9zcGFyYyAle3NoYXJlZDotc2hhcmVkfSBcCi1JbmRleDogZ2NjLTQuOS4wL2djYy9jb25maWcvc3BhcmMvbGludXg2NC5oCi09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLS0gZ2NjLTQuOS4wLm9yaWcvZ2NjL2NvbmZpZy9zcGFyYy9saW51eDY0LmgJMjAxNC0wNS0wNyAxNjo0Mzo1MC42MDkxMDY1MzUgKzAwMDAKLSsrKyBnY2MtNC45LjAvZ2NjL2NvbmZpZy9zcGFyYy9saW51eDY0LmgJMjAxNC0wNS0wNyAxNjo0Mzo1MC42MDUxMDY1MzUgKzAwMDAKLUBAIC05Miw4ICs5Miw4IEBACi0gICAgV2hlbiB0aGUgLXNoYXJlZCBsaW5rIG9wdGlvbiBpcyB1c2VkIGEgZmluYWwgbGluayBpcyBub3QgYmVpbmcKLSAgICBkb25lLiAgKi8KLSAKLS0jZGVmaW5lIEdMSUJDX0RZTkFNSUNfTElOS0VSMzIgIi9saWIvbGQtbGludXguc28uMiIKLS0jZGVmaW5lIEdMSUJDX0RZTkFNSUNfTElOS0VSNjQgIi9saWI2NC9sZC1saW51eC5zby4yIgotKyNkZWZpbmUgR0xJQkNfRFlOQU1JQ19MSU5LRVIzMiBTWVNURU1MSUJTX0RJUiAibGQtbGludXguc28uMiIKLSsjZGVmaW5lIEdMSUJDX0RZTkFNSUNfTElOS0VSNjQgU1lTVEVNTElCU19ESVIgImxkLWxpbnV4LnNvLjIiCi0gCi0gI2lmZGVmIFNQQVJDX0JJX0FSQ0gKLSAKLUluZGV4OiBnY2MtNC45LjAvZ2NjL2NvbmZpZy9saW51eC5oCi09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLS0gZ2NjLTQuOS4wLm9yaWcvZ2NjL2NvbmZpZy9saW51eC5oCTIwMTQtMDUtMDcgMTY6NDM6NTAuNjA5MTA2NTM1ICswMDAwCi0rKysgZ2NjLTQuOS4wL2djYy9jb25maWcvbGludXguaAkyMDE0LTA1LTA3IDE2OjQzOjUwLjYwNTEwNjUzNSArMDAwMAotQEAgLTczLDEwICs3MywxMCBAQAotICAgIEdMSUJDX0RZTkFNSUNfTElOS0VSIG11c3QgYmUgZGVmaW5lZCBmb3IgZWFjaCB0YXJnZXQgdXNpbmcgdGhlbSwgb3IKLSAgICBHTElCQ19EWU5BTUlDX0xJTktFUjMyIGFuZCBHTElCQ19EWU5BTUlDX0xJTktFUjY0IGZvciB0YXJnZXRzCi0gICAgc3VwcG9ydGluZyBib3RoIDMyLWJpdCBhbmQgNjQtYml0IGNvbXBpbGF0aW9uLiAgKi8KLS0jZGVmaW5lIFVDTElCQ19EWU5BTUlDX0xJTktFUiAiL2xpYi9sZC11Q2xpYmMuc28uMCIKLS0jZGVmaW5lIFVDTElCQ19EWU5BTUlDX0xJTktFUjMyICIvbGliL2xkLXVDbGliYy5zby4wIgotLSNkZWZpbmUgVUNMSUJDX0RZTkFNSUNfTElOS0VSNjQgIi9saWIvbGQ2NC11Q2xpYmMuc28uMCIKLS0jZGVmaW5lIFVDTElCQ19EWU5BTUlDX0xJTktFUlgzMiAiL2xpYi9sZHgzMi11Q2xpYmMuc28uMCIKLSsjZGVmaW5lIFVDTElCQ19EWU5BTUlDX0xJTktFUiBTWVNURU1MSUJTX0RJUiAibGQtdUNsaWJjLnNvLjAiCi0rI2RlZmluZSBVQ0xJQkNfRFlOQU1JQ19MSU5LRVIzMiBTWVNURU1MSUJTX0RJUiAibGQtdUNsaWJjLnNvLjAiCi0rI2RlZmluZSBVQ0xJQkNfRFlOQU1JQ19MSU5LRVI2NCBTWVNURU1MSUJTX0RJUiAibGQ2NC11Q2xpYmMuc28uMCIKLSsjZGVmaW5lIFVDTElCQ19EWU5BTUlDX0xJTktFUlgzMiBTWVNURU1MSUJTX0RJUiAibGR4MzItdUNsaWJjLnNvLjAiCi0gI2RlZmluZSBCSU9OSUNfRFlOQU1JQ19MSU5LRVIgIi9zeXN0ZW0vYmluL2xpbmtlciIKLSAjZGVmaW5lIEJJT05JQ19EWU5BTUlDX0xJTktFUjMyICIvc3lzdGVtL2Jpbi9saW5rZXIiCi0gI2RlZmluZSBCSU9OSUNfRFlOQU1JQ19MSU5LRVI2NCAiL3N5c3RlbS9iaW4vbGlua2VyNjQiCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNC45LzAwMzAtZ2NjLUZpeC1hcmd1bWVudC1saXN0LXRvby1sb25nLWVycm9yLnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTQuOS8wMDMwLWdjYy1GaXgtYXJndW1lbnQtbGlzdC10b28tbG9uZy1lcnJvci5wYXRjaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMmNlYWZmNi4uMDAwMDAwMAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNC45LzAwMzAtZ2NjLUZpeC1hcmd1bWVudC1saXN0LXRvby1sb25nLWVycm9yLnBhdGNoCisrKyAvZGV2L251bGwKQEAgLTEsNDAgKzAsMCBAQAotRnJvbSBjMTgxNmMxNjAxNTZmOTljMzRlNmEwYTAzMTFiYjAyMTkzMjY4MDRlIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQotRnJvbTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KLURhdGU6IEZyaSwgMjkgTWFyIDIwMTMgMDk6MjY6MzcgKzA0MDAKLVN1YmplY3Q6IFtQQVRDSCAzMC8zNV0gZ2NjOiBGaXggYXJndW1lbnQgbGlzdCB0b28gbG9uZyBlcnJvci4KLQotVGhlcmUgd291bGQgYmUgYW4gIkFyZ3VtZW50IGxpc3QgdG9vIGxvbmciIGVycm9yIHdoZW4gdGhlCi1idWlsZCBkaXJlY3RvcnkgaXMgbG9uZ2VyIHRoYW4gMjAwLCB0aGlzIGlzIGNhdXNlZCBieToKLQotaGVhZGVycz1gZWNobyAkKFBMVUdJTl9IRUFERVJTKSB8IHRyICcgJyAnXDAxMicgfCBzb3J0IC11YAotCi1UaGUgUExVR0lOX0hFQURFUlMgaXMgdG9vIGxvbmcgYmVmb3JlIHNvcnQsIHNvIHRoZSAiZWNobyIgY2FuJ3QgaGFuZGxlCi1pdCwgdXNlIHRoZSAkKHNvcnQgbGlzdCkgb2YgR05VIG1ha2Ugd2hpY2ggY2FuIGhhbmRsZSB0aGUgdG9vIGxvbmcgbGlzdAotd291bGQgZml4IHRoZSBwcm9ibGVtLCB0aGUgaGVhZGVyIHdvdWxkIGJlIHNob3J0IGVub3VnaCBhZnRlciBzb3J0ZWQuCi1UaGUgInRyICcgJyAnXDAxMiciIHdhcyB1c2VkIGZvciB0cmFuc2xhdGluZyB0aGUgc3BhY2UgdG8gIlxuIiwgdGhlCi0kKHNvcnQgbGlzdCkgZG9lc24ndCBuZWVkIHRoaXMuCi0KLVNpZ25lZC1vZmYtYnk6IFJvYmVydCBZYW5nIDxsaWV6aGkueWFuZ0B3aW5kcml2ZXIuY29tPgotU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KLQotVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCi0tLS0KLSBnY2MvTWFrZWZpbGUuaW4gfCAgICAyICstCi0gMSBmaWxlIGNoYW5nZWQsIDEgaW5zZXJ0aW9uKCspLCAxIGRlbGV0aW9uKC0pCi0KLWRpZmYgLS1naXQgYS9nY2MvTWFrZWZpbGUuaW4gYi9nY2MvTWFrZWZpbGUuaW4KLWluZGV4IDIzMjA0OTcuLjg1NjJhNjIgMTAwNjQ0Ci0tLS0gYS9nY2MvTWFrZWZpbGUuaW4KLSsrKyBiL2djYy9NYWtlZmlsZS5pbgotQEAgLTQ2MjcsNyArNDYyNyw3IEBAIGluc3RhbGwtcGx1Z2luOiBpbnN0YWxsZGlycyBsYW5nLmluc3RhbGwtcGx1Z2luIHMtaGVhZGVyLXZhcnMgaW5zdGFsbC1nZW5ndHlwZQotICMgV2Uga2VlcCB0aGUgZGlyZWN0b3J5IHN0cnVjdHVyZSBmb3IgZmlsZXMgaW4gY29uZmlnIG9yIGMtZmFtaWx5IGFuZCAuZGVmCi0gIyBmaWxlcy4gQWxsIG90aGVyIGZpbGVzIGFyZSBmbGF0dGVuZWQgdG8gYSBzaW5nbGUgZGlyZWN0b3J5LgotIAkkKG1raW5zdGFsbGRpcnMpICQoREVTVERJUikkKHBsdWdpbl9pbmNsdWRlZGlyKQotLQloZWFkZXJzPWBlY2hvICQoUExVR0lOX0hFQURFUlMpIHwgdHIgJyAnICdcMDEyJyB8IHNvcnQgLXVgOyBcCi0rCWhlYWRlcnM9IiQoc29ydCAkKFBMVUdJTl9IRUFERVJTKSkiOyBcCi0gCXNyY2RpcnN0cmlwPWBlY2hvICIkKHNyY2RpcikiIHwgc2VkICdzL1tdLlteJCRcXCp8XS9cXFxcJi9nJ2A7IFwKLSAJZm9yIGZpbGUgaW4gJCRoZWFkZXJzOyBkbyBcCi0gCSAgaWYgWyAtZiAkJGZpbGUgXSA7IHRoZW4gXAotLS0gCi0xLjcuMTAuNAotCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNC45LzAwMzEtRGlzYWJsZS1zZHQucGF0Y2ggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNC45LzAwMzEtRGlzYWJsZS1zZHQucGF0Y2gKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDJjMWQ1ZTAuLjAwMDAwMDAKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTQuOS8wMDMxLURpc2FibGUtc2R0LnBhdGNoCisrKyAvZGV2L251bGwKQEAgLTEsMTEzICswLDAgQEAKLUZyb20gYjg1MjY1YmM5NGVjMWJlYWYxZDNiNjk3YzAzZGI2Mjk5MTU1MzQ2NyBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKLUZyb206IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+Ci1EYXRlOiBGcmksIDI5IE1hciAyMDEzIDA5OjI4OjEwICswNDAwCi1TdWJqZWN0OiBbUEFUQ0ggMzEvMzVdIERpc2FibGUgc2R0LgotCi1XZSBkb24ndCBsaXN0IGR0cmFjZSBpbiBERVBFTkRTIHNvIHdlIHNob3VsZG4ndCBiZSBkZXBlbmRpbmcgb24gdGhpcyBoZWFkZXIuCi1JdCBtYXkgb3IgbWF5IG5vdCBleGlzdCBmcm9tIHByZWl2b3VzIGJ1aWxkcyB0aG91Z2guIFRvIGJlIGRldGVybWluc3RpYywgZGlzYWJsZQotc2R0LmggdXNhZ2UgYWx3YXlzLiBUaGlzIGF2b2lkcyBidWlsZCBmYWlsdXJlcyBpZiB0aGUgaGVhZGVyIGlzIHJlbW92ZWQgYWZ0ZXIgY29uZmlndXJlCi1idXQgYmVmb3JlIGxpYmdjYyBpcyBjb21waWxlZCBmb3IgZXhhbXBsZS4KLQotUlAgMjAxMi84LzcKLQotU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KLQotRGlzYWJsZSBzZHQgZm9yIGxpYnN0ZGMrKy12My4KLQotU2lnbmVkLW9mZi1ieTogUm9iZXJ0IFlhbmcgPGxpZXpoaS55YW5nQHdpbmRyaXZlci5jb20+Ci0KLVVwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbaGFja10KLS0tLQotIGdjYy9jb25maWd1cmUgICAgICAgICAgICAgfCAxMiArKysrKystLS0tLS0KLSBnY2MvY29uZmlndXJlLmFjICAgICAgICAgIHwgMTggKysrKysrKysrLS0tLS0tLS0tCi0gbGlic3RkYysrLXYzL2NvbmZpZ3VyZSAgICB8ICA2ICsrKy0tLQotIGxpYnN0ZGMrKy12My9jb25maWd1cmUuYWMgfCAgMiArLQotIDQgZmlsZXMgY2hhbmdlZCwgMTkgaW5zZXJ0aW9ucygrKSwgMTkgZGVsZXRpb25zKC0pCi0KLWRpZmYgLS1naXQgYS9nY2MvY29uZmlndXJlIGIvZ2NjL2NvbmZpZ3VyZQotaW5kZXggM2M1NTBhNi4uMDFjNzYyNiAxMDA3NTUKLS0tLSBhL2djYy9jb25maWd1cmUKLSsrKyBiL2djYy9jb25maWd1cmUKLUBAIC0yNjgxMiwxMiArMjY4MTIsMTIgQEAgZmkKLSB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIHN5cy9zZHQuaCBpbiB0aGUgdGFyZ2V0IEMgbGlicmFyeSIgPiY1Ci0gJGFzX2VjaG9fbiAiY2hlY2tpbmcgc3lzL3NkdC5oIGluIHRoZSB0YXJnZXQgQyBsaWJyYXJ5Li4uICIgPiY2OyB9Ci0gaGF2ZV9zeXNfc2R0X2g9bm8KLS1pZiB0ZXN0IC1mICR0YXJnZXRfaGVhZGVyX2Rpci9zeXMvc2R0Lmg7IHRoZW4KLS0gIGhhdmVfc3lzX3NkdF9oPXllcwotLQotLSRhc19lY2hvICIjZGVmaW5lIEhBVkVfU1lTX1NEVF9IIDEiID4+Y29uZmRlZnMuaAotLQotLWZpCi0rI2lmIHRlc3QgLWYgJHRhcmdldF9oZWFkZXJfZGlyL3N5cy9zZHQuaDsgdGhlbgotKyMgIGhhdmVfc3lzX3NkdF9oPXllcwotKyMKLSsjJGFzX2VjaG8gIiNkZWZpbmUgSEFWRV9TWVNfU0RUX0ggMSIgPj5jb25mZGVmcy5oCi0rIwotKyNmaQotIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkaGF2ZV9zeXNfc2R0X2giID4mNQotICRhc19lY2hvICIkaGF2ZV9zeXNfc2R0X2giID4mNjsgfQotIAotZGlmZiAtLWdpdCBhL2djYy9jb25maWd1cmUuYWMgYi9nY2MvY29uZmlndXJlLmFjCi1pbmRleCAzNjAxYWI2Li4wNmU1MDFmIDEwMDY0NAotLS0tIGEvZ2NjL2NvbmZpZ3VyZS5hYwotKysrIGIvZ2NjL2NvbmZpZ3VyZS5hYwotQEAgLTQ3NzksMTUgKzQ3NzksMTUgQEAgaWYgdGVzdCB4JGdjY19jdl9saWJjX3Byb3ZpZGVzX3NzcCA9IHh5ZXM7IHRoZW4KLSBmaQotIAotICMgVGVzdCBmb3IgPHN5cy9zZHQuaD4gb24gdGhlIHRhcmdldC4KLS1HQ0NfVEFSR0VUX1RFTVBMQVRFKFtIQVZFX1NZU19TRFRfSF0pCi0tQUNfTVNHX0NIRUNLSU5HKHN5cy9zZHQuaCBpbiB0aGUgdGFyZ2V0IEMgbGlicmFyeSkKLS1oYXZlX3N5c19zZHRfaD1ubwotLWlmIHRlc3QgLWYgJHRhcmdldF9oZWFkZXJfZGlyL3N5cy9zZHQuaDsgdGhlbgotLSAgaGF2ZV9zeXNfc2R0X2g9eWVzCi0tICBBQ19ERUZJTkUoSEFWRV9TWVNfU0RUX0gsIDEsCi0tICAgICAgICAgICAgW0RlZmluZSBpZiB5b3VyIHRhcmdldCBDIGxpYnJhcnkgcHJvdmlkZXMgc3lzL3NkdC5oXSkKLS1maQotLUFDX01TR19SRVNVTFQoJGhhdmVfc3lzX3NkdF9oKQotKyNHQ0NfVEFSR0VUX1RFTVBMQVRFKFtIQVZFX1NZU19TRFRfSF0pCi0rI0FDX01TR19DSEVDS0lORyhzeXMvc2R0LmggaW4gdGhlIHRhcmdldCBDIGxpYnJhcnkpCi0rI2hhdmVfc3lzX3NkdF9oPW5vCi0rI2lmIHRlc3QgLWYgJHRhcmdldF9oZWFkZXJfZGlyL3N5cy9zZHQuaDsgdGhlbgotKyMgIGhhdmVfc3lzX3NkdF9oPXllcwotKyMgIEFDX0RFRklORShIQVZFX1NZU19TRFRfSCwgMSwKLSsjICAgICAgICAgICAgW0RlZmluZSBpZiB5b3VyIHRhcmdldCBDIGxpYnJhcnkgcHJvdmlkZXMgc3lzL3NkdC5oXSkKLSsjZmkKLSsjQUNfTVNHX1JFU1VMVCgkaGF2ZV9zeXNfc2R0X2gpCi0gCi0gIyBDaGVjayBpZiBURm1vZGUgbG9uZyBkb3VibGUgc2hvdWxkIGJlIHVzZWQgYnkgZGVmYXVsdCBvciBub3QuCi0gIyBTb21lIGdsaWJjIHRhcmdldHMgdXNlZCBERm1vZGUgbG9uZyBkb3VibGUsIGJ1dCB3aXRoIGdsaWJjIDIuNAotZGlmZiAtLWdpdCBhL2xpYnN0ZGMrKy12My9jb25maWd1cmUgYi9saWJzdGRjKystdjMvY29uZmlndXJlCi1pbmRleCA0OTUzYzlmLi41M2ExMTQ1IDEwMDc1NQotLS0tIGEvbGlic3RkYysrLXYzL2NvbmZpZ3VyZQotKysrIGIvbGlic3RkYysrLXYzL2NvbmZpZ3VyZQotQEAgLTIwNTc4LDExICsyMDU3OCwxMSBAQCBhY19jb21waWxlPSckQ0MgLWMgJENGTEFHUyAkQ1BQRkxBR1MgY29uZnRlc3QuJGFjX2V4dCA+JjUnCi0gYWNfbGluaz0nJENDIC1vIGNvbmZ0ZXN0JGFjX2V4ZWV4dCAkQ0ZMQUdTICRDUFBGTEFHUyAkTERGTEFHUyBjb25mdGVzdC4kYWNfZXh0ICRMSUJTID4mNScKLSBhY19jb21waWxlcl9nbnU9JGFjX2N2X2NfY29tcGlsZXJfZ251Ci0gCi0tICBpZiB0ZXN0ICRnbGliY3h4X2N2X3N5c19zZHRfaCA9IHllczsgdGhlbgotKyMgIGlmIHRlc3QgJGdsaWJjeHhfY3Zfc3lzX3NkdF9oID0geWVzOyB0aGVuCi0gCi0tJGFzX2VjaG8gIiNkZWZpbmUgSEFWRV9TWVNfU0RUX0ggMSIgPj5jb25mZGVmcy5oCi0rIyRhc19lY2hvICIjZGVmaW5lIEhBVkVfU1lTX1NEVF9IIDEiID4+Y29uZmRlZnMuaAotIAotLSAgZmkKLSsjICBmaQotICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRnbGliY3h4X2N2X3N5c19zZHRfaCIgPiY1Ci0gJGFzX2VjaG8gIiRnbGliY3h4X2N2X3N5c19zZHRfaCIgPiY2OyB9Ci0gCi1kaWZmIC0tZ2l0IGEvbGlic3RkYysrLXYzL2NvbmZpZ3VyZS5hYyBiL2xpYnN0ZGMrKy12My9jb25maWd1cmUuYWMKLWluZGV4IDczZDQzMGEuLmYyMTM1ZTIgMTAwNjQ0Ci0tLS0gYS9saWJzdGRjKystdjMvY29uZmlndXJlLmFjCi0rKysgYi9saWJzdGRjKystdjMvY29uZmlndXJlLmFjCi1AQCAtMjExLDcgKzIxMSw3IEBAIEdMSUJDWFhfQ0hFQ0tfU0NfTlBST0NFU1NPUlNfT05MTgotIEdMSUJDWFhfQ0hFQ0tfU0NfTlBST0NfT05MTgotIEdMSUJDWFhfQ0hFQ0tfUFRIUkVBRFNfTlVNX1BST0NFU1NPUlNfTlAKLSBHTElCQ1hYX0NIRUNLX1NZU0NUTF9IV19OQ1BVCi0tR0xJQkNYWF9DSEVDS19TRFRfSAotKyNHTElCQ1hYX0NIRUNLX1NEVF9ICi0gCi0gIyBDaGVjayBmb3IgYXZhaWxhYmxlIGhlYWRlcnMuCi0gQUNfQ0hFQ0tfSEVBREVSUyhbZW5kaWFuLmggZXhlY2luZm8uaCBmbG9hdC5oIGZwLmggaWVlZWZwLmggaW50dHlwZXMuaCBcCi0tLSAKLTEuOC4zLjEKLQpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTQuOS8wMDMyLWxpYnRvb2wucGF0Y2ggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNC45LzAwMzItbGlidG9vbC5wYXRjaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggM2IzZDFiNi4uMDAwMDAwMAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNC45LzAwMzItbGlidG9vbC5wYXRjaAorKysgL2Rldi9udWxsCkBAIC0xLDQyICswLDAgQEAKLUZyb20gNmM3MTVmY2ZhMjYyYWRhZGNhODFjNjhhMWYzZjY5YWEzMTg3YTUwMSBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKLUZyb206IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+Ci1EYXRlOiBGcmksIDI5IE1hciAyMDEzIDA5OjI5OjExICswNDAwCi1TdWJqZWN0OiBbUEFUQ0ggMzIvMzVdIGxpYnRvb2wKLQotbGlic3RkYysrIGZyb20gZ2NjLXJ1bnRpbWUgZ2V0cyBjcmVhdGVkIHdpdGggLXJwYXRoPS91c3IvbGliLy4uL2xpYiBmb3IgcWVtdXg4Ni02NAotd2hlbiBydW5uaW5nIG9uIGFtIHg4Nl82NCBidWlsZCBob3N0LgotCi1UaGlzIHBhdGNoIHN0b3BzIHRoaXMgc3BlYWRpbmcgdG8gbGliZGlyIGluIHRoZSBsaWJzdGRjKysubGEgZmlsZSB3aXRoaW4gbGlidG9vbC4KLUFyZ3VhYmx5LCBpdCBzaG91bGRuJ3QgYmUgcGFzc2luZyB0aGlzIGludG8gbGlidG9vbCBpbiB0aGUgZmlyc3QgcGxhY2UgYnV0Ci1mb3Igbm93IHRoaXMgcmVzb2x2ZXMgdGhlIG5hc3RpZXN0IHByb2JsZW1zIHRoaXMgY2F1c2VzLgotCi1mdW5jX25vcm1hbF9hYnNwYXRoIHdvdWxkIHJlc29sdmUgYW4gZW1wdHkgcGF0aCB0byBgcHdkYCBzbyB3ZSBuZWVkCi10byBmaWx0ZXIgdGhlIHplcm8gY2FzZS4KLQotUlAgMjAxMi84LzI0Ci0KLVNpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+Ci0KLVVwc3RyZWFtLVN0YXR1czogUGVuZGluZwotLS0tCi0gbHRtYWluLnNoIHwgICAgNCArKysrCi0gMSBmaWxlIGNoYW5nZWQsIDQgaW5zZXJ0aW9ucygrKQotCi1kaWZmIC0tZ2l0IGEvbHRtYWluLnNoIGIvbHRtYWluLnNoCi1pbmRleCBhMDM0MzNmLi40NmY0N2MyIDEwMDY0NAotLS0tIGEvbHRtYWluLnNoCi0rKysgYi9sdG1haW4uc2gKLUBAIC02MzU5LDYgKzYzNTksMTAgQEAgZnVuY19tb2RlX2xpbmsgKCkKLSAJZnVuY193YXJuaW5nICJpZ25vcmluZyBtdWx0aXBsZSBcYC1ycGF0aCdzIGZvciBhIGxpYnRvb2wgbGlicmFyeSIKLSAKLSAgICAgICBpbnN0YWxsX2xpYmRpcj0iJDEiCi0rICAgICAgaWYgdGVzdCAtbiAiJGluc3RhbGxfbGliZGlyIjsgdGhlbgotKwlmdW5jX25vcm1hbF9hYnNwYXRoICIkaW5zdGFsbF9saWJkaXIiCi0rCWluc3RhbGxfbGliZGlyPSRmdW5jX25vcm1hbF9hYnNwYXRoX3Jlc3VsdAotKyAgICAgIGZpCi0gCi0gICAgICAgb2xkbGlicz0KLSAgICAgICBpZiB0ZXN0IC16ICIkcnBhdGgiOyB0aGVuCi0tLSAKLTEuNy4xMC40Ci0KZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy00LjkvMDAzMy1nY2MtYXJtdjQtcGFzcy1maXgtdjRieC10by1saW5rZXItdG8tc3VwcG9ydC1FQUJJLnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTQuOS8wMDMzLWdjYy1hcm12NC1wYXNzLWZpeC12NGJ4LXRvLWxpbmtlci10by1zdXBwb3J0LUVBQkkucGF0Y2gKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGIyMzZjMzcuLjAwMDAwMDAKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTQuOS8wMDMzLWdjYy1hcm12NC1wYXNzLWZpeC12NGJ4LXRvLWxpbmtlci10by1zdXBwb3J0LUVBQkkucGF0Y2gKKysrIC9kZXYvbnVsbApAQCAtMSw0MCArMCwwIEBACi1Gcm9tIDk3ZTQ1OTFjMjAzMTA0MjVlN2FjYTBlNjcxMmE4ZDk0ODBlNzc0NGMgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCi1Gcm9tOiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgotRGF0ZTogRnJpLCAyOSBNYXIgMjAxMyAwOTozMDozMiArMDQwMAotU3ViamVjdDogW1BBVENIIDMzLzM1XSBnY2M6IGFybXY0OiBwYXNzIGZpeC12NGJ4IHRvIGxpbmtlciB0byBzdXBwb3J0IEVBQkkuCi0KLVRoZSBMSU5LX1NQRUMgZm9yIGxpbnV4IGdldHMgb3ZlcndyaXR0ZW4gYnkgbGludXgtZWFiaS5oIHdoaWNoCi1tZWFucyB0aGUgdmFsdWUgb2YgVEFSR0VUX0ZJWF9WNEJYX1NQRUMgZ2V0cyBsb3N0IGFuZCBhcyBhIHJlc3VsdAotdGhlIG9wdGlvbiBpcyBub3QgcGFzc2VkIHRvIGxpbmtlciB3aGVuIGNob3NpbmcgbWFyY2g9YXJtdjQKLVRoaXMgcGF0Y2ggcmVkZWZpbmVzIHRoaXMgaW4gbGludXgtZWFiaS5oIGFuZCByZWluc2VydHMgaXQKLWZvciBlYWJpIGRlZmF1bHRpbmcgdG9vbGNoYWlucy4KLQotV2UgbWlnaHQgd2FudCB0byBzZW5kIGl0IHVwc3RyZWFtLgotCi1TaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgotCi1VcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKLS0tLQotIGdjYy9jb25maWcvYXJtL2xpbnV4LWVhYmkuaCB8ICAgIDYgKysrKystCi0gMSBmaWxlIGNoYW5nZWQsIDUgaW5zZXJ0aW9ucygrKSwgMSBkZWxldGlvbigtKQotCi1JbmRleDogZ2NjLTQuOS0yMDE0MDMxNi9nY2MvY29uZmlnL2FybS9saW51eC1lYWJpLmgKLT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tLSBnY2MtNC45LTIwMTQwMzE2Lm9yaWcvZ2NjL2NvbmZpZy9hcm0vbGludXgtZWFiaS5oCi0rKysgZ2NjLTQuOS0yMDE0MDMxNi9nY2MvY29uZmlnL2FybS9saW51eC1lYWJpLmgKLUBAIC03NywxMCArNzcsMTQgQEAKLSAgICAgJXttZmxvYXQtYWJpPXNvZnQqOiIgR0xJQkNfRFlOQU1JQ19MSU5LRVJfU09GVF9GTE9BVCAifSBcCi0gICAgICV7IW1mbG9hdC1hYmk9KjoiIEdMSUJDX0RZTkFNSUNfTElOS0VSX0RFRkFVTFQgIn0iCi0gCi0rLyogRm9yIGFybXY0IHdlIHBhc3MgLS1maXgtdjRieCB0byBsaW5rZXIgdG8gc3VwcG9ydCBFQUJJICovCi0rI3VuZGVmIFRBUkdFVF9GSVhfVjRCWF9TUEVDCi0rI2RlZmluZSBUQVJHRVRfRklYX1Y0QlhfU1BFQyAiJXttY3B1PWFybTh8bWNwdT1hcm04MTB8bWNwdT1zdHJvbmdhcm0qfG1hcmNoPWFybXY0OiAtLWZpeC12NGJ4fSIKLSsKLSAvKiBBdCB0aGlzIHBvaW50LCBicGFiaS5oIHdpbGwgaGF2ZSBjbG9iYmVyZWQgTElOS19TUEVDLiAgV2Ugd2FudCB0bwotICAgIHVzZSB0aGUgR05VL0xpbnV4IHZlcnNpb24sIG5vdCB0aGUgZ2VuZXJpYyBCUEFCSSB2ZXJzaW9uLiAgKi8KLSAjdW5kZWYgIExJTktfU1BFQwotLSNkZWZpbmUgTElOS19TUEVDIEVBQklfTElOS19TUEVDCQkJCQlcCi0rI2RlZmluZSBMSU5LX1NQRUMgVEFSR0VUX0ZJWF9WNEJYX1NQRUMgRUFCSV9MSU5LX1NQRUMJCQlcCi0gICBMSU5VWF9PUl9BTkRST0lEX0xEIChMSU5VWF9UQVJHRVRfTElOS19TUEVDLAkJCQlcCi0gCQkgICAgICAgTElOVVhfVEFSR0VUX0xJTktfU1BFQyAiICIgQU5EUk9JRF9MSU5LX1NQRUMpCi0gCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNC45LzAwMzQtVXNlLXRoZS1tdWx0aWxpYi1jb25maWctZmlsZXMtZnJvbS1CLWluc3RlYWQtb2YtdXNpbi5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy00LjkvMDAzNC1Vc2UtdGhlLW11bHRpbGliLWNvbmZpZy1maWxlcy1mcm9tLUItaW5zdGVhZC1vZi11c2luLnBhdGNoCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2NmI5Zjg5Li4wMDAwMDAwCi0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy00LjkvMDAzNC1Vc2UtdGhlLW11bHRpbGliLWNvbmZpZy1maWxlcy1mcm9tLUItaW5zdGVhZC1vZi11c2luLnBhdGNoCisrKyAvZGV2L251bGwKQEAgLTEsMTAyICswLDAgQEAKLUZyb20gZmM1ZTRiZWFlYTg1NmEyYjQ4NmM3NzBhZDNhZGRjMGY1YmIzMTAwZSBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKLUZyb206IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+Ci1EYXRlOiBGcmksIDI5IE1hciAyMDEzIDA5OjMzOjA0ICswNDAwCi1TdWJqZWN0OiBbUEFUQ0ggMzQvMzVdIFVzZSB0aGUgbXVsdGlsaWIgY29uZmlnIGZpbGVzIGZyb20gJHtCfSBpbnN0ZWFkIG9mCi0gdXNpbmcgdGhlIG9uZXMgZnJvbSAke1N9Ci0KLVVzZSB0aGUgbXVsdGlsaWIgY29uZmlnIGZpbGVzIGZyb20gJHtCfSBpbnN0ZWFkIG9mIHVzaW5nIHRoZSBvbmVzIGZyb20gJHtTfQotc28gdGhhdCB0aGUgc291cmNlIGNhbiBiZSBzaGFyZWQgYmV0d2VlbiBnY2MtY3Jvc3MtaW5pdGlhbCwKLWdjYy1jcm9zcy1pbnRlcm1lZGlhdGUsIGdjYy1jcm9zcywgZ2NjLXJ1bnRpbWUsIGFuZCBhbHNvIHRoZSBzZGsgYnVpbGQuCi0KLVNpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+Ci1TaWduZWQtb2ZmLWJ5OiBDb25zdGFudGluIE11c2NhIDxjb25zdGFudGlueC5tdXNjYUBpbnRlbC5jb20+Ci0KLVVwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbY29uZmlndXJhdGlvbl0KLS0tLQotIGdjYy9jb25maWd1cmUgICAgfCAgIDIyICsrKysrKysrKysrKysrKysrKy0tLS0KLSBnY2MvY29uZmlndXJlLmFjIHwgICAyMiArKysrKysrKysrKysrKysrKystLS0tCi0gMiBmaWxlcyBjaGFuZ2VkLCAzNiBpbnNlcnRpb25zKCspLCA4IGRlbGV0aW9ucygtKQotCi1kaWZmIC0tZ2l0IGEvZ2NjL2NvbmZpZ3VyZSBiL2djYy9jb25maWd1cmUKLWluZGV4IDhiYzBjOTguLjNjZDA4MTcgMTAwNzU1Ci0tLS0gYS9nY2MvY29uZmlndXJlCi0rKysgYi9nY2MvY29uZmlndXJlCi1AQCAtMTE1MTksMTAgKzExNTE5LDIwIEBAIGRvbmUKLSB0bWFrZV9maWxlXz0KLSBmb3IgZiBpbiAke3RtYWtlX2ZpbGV9Ci0gZG8KLS0JaWYgdGVzdCAtZiAke3NyY2Rpcn0vY29uZmlnLyRmCi0tCXRoZW4KLS0JCXRtYWtlX2ZpbGVfPSIke3RtYWtlX2ZpbGVffSBcJChzcmNkaXIpL2NvbmZpZy8kZiIKLS0JZmkKLSsgIGNhc2UgJGYgaW4KLSsgICAgKi90LWxpbnV4NjQgKQotKyAgICAgICBpZiB0ZXN0IC1mIC4vY29uZmlnLyRmCi0rICAgICAgIHRoZW4KLSsgICAgICAgICB0bWFrZV9maWxlXz0iJHt0bWFrZV9maWxlX30gLi9jb25maWcvJGYiCi0rICAgICAgIGZpCi0rICAgICAgIDs7Ci0rICAgICogKQotKyAgICAgICBpZiB0ZXN0IC1mICR7c3JjZGlyfS9jb25maWcvJGYKLSsgICAgICAgdGhlbgotKyAgICAgICAgIHRtYWtlX2ZpbGVfPSIke3RtYWtlX2ZpbGVffSBcJChzcmNkaXIpL2NvbmZpZy8kZiIKLSsgICAgICAgZmkKLSsgICAgICAgOzsKLSsgIGVzYWMKLSBkb25lCi0gdG1ha2VfZmlsZT0iJHt0bWFrZV9maWxlX30iCi0gCi1AQCAtMTE1MzMsNiArMTE1NDMsMTAgQEAgdG1fZmlsZV9saXN0PSJvcHRpb25zLmgiCi0gdG1faW5jbHVkZV9saXN0PSJvcHRpb25zLmggaW5zbi1jb25zdGFudHMuaCIKLSBmb3IgZiBpbiAkdG1fZmlsZTsgZG8KLSAgIGNhc2UgJGYgaW4KLSsgICAgKi9saW51eDY0LmggKQotKyAgICAgICB0bV9maWxlX2xpc3Q9IiR7dG1fZmlsZV9saXN0fSAuL2NvbmZpZy8kZiIKLSsgICAgICAgdG1faW5jbHVkZV9saXN0PSIke3RtX2luY2x1ZGVfbGlzdH0gLi9jb25maWcvJGYiCi0rICAgICAgIDs7Ci0gICAgIC4vKiApCi0gICAgICAgIGY9YGVjaG8gJGYgfCBzZWQgJ3MvXi4uLy8nYAotICAgICAgICB0bV9maWxlX2xpc3Q9IiR7dG1fZmlsZV9saXN0fSAkZiIKLWRpZmYgLS1naXQgYS9nY2MvY29uZmlndXJlLmFjIGIvZ2NjL2NvbmZpZ3VyZS5hYwotaW5kZXggNWU1ZTg0Zi4uNDE1YTZkZiAxMDA2NDQKLS0tLSBhL2djYy9jb25maWd1cmUuYWMKLSsrKyBiL2djYy9jb25maWd1cmUuYWMKLUBAIC0xNzAwLDEwICsxNzAwLDIwIEBAIGRvbmUKLSB0bWFrZV9maWxlXz0KLSBmb3IgZiBpbiAke3RtYWtlX2ZpbGV9Ci0gZG8KLS0JaWYgdGVzdCAtZiAke3NyY2Rpcn0vY29uZmlnLyRmCi0tCXRoZW4KLS0JCXRtYWtlX2ZpbGVfPSIke3RtYWtlX2ZpbGVffSBcJChzcmNkaXIpL2NvbmZpZy8kZiIKLS0JZmkKLSsgIGNhc2UgJGYgaW4KLSsgICAgKi90LWxpbnV4NjQgKQotKyAgICAgICBpZiB0ZXN0IC1mIC4vY29uZmlnLyRmCi0rICAgICAgIHRoZW4KLSsgICAgICAgICB0bWFrZV9maWxlXz0iJHt0bWFrZV9maWxlX30gLi9jb25maWcvJGYiCi0rICAgICAgIGZpCi0rICAgICAgIDs7Ci0rICAgICogKQotKyAgICAgICBpZiB0ZXN0IC1mICR7c3JjZGlyfS9jb25maWcvJGYKLSsgICAgICAgdGhlbgotKyAgICAgICAgIHRtYWtlX2ZpbGVfPSIke3RtYWtlX2ZpbGVffSBcJChzcmNkaXIpL2NvbmZpZy8kZiIKLSsgICAgICAgZmkKLSsgICAgICAgOzsKLSsgIGVzYWMKLSBkb25lCi0gdG1ha2VfZmlsZT0iJHt0bWFrZV9maWxlX30iCi0gCi1AQCAtMTcxNCw2ICsxNzI0LDEwIEBAIHRtX2ZpbGVfbGlzdD0ib3B0aW9ucy5oIgotIHRtX2luY2x1ZGVfbGlzdD0ib3B0aW9ucy5oIGluc24tY29uc3RhbnRzLmgiCi0gZm9yIGYgaW4gJHRtX2ZpbGU7IGRvCi0gICBjYXNlICRmIGluCi0rICAgICovbGludXg2NC5oICkKLSsgICAgICAgdG1fZmlsZV9saXN0PSIke3RtX2ZpbGVfbGlzdH0gLi9jb25maWcvJGYiCi0rICAgICAgIHRtX2luY2x1ZGVfbGlzdD0iJHt0bV9pbmNsdWRlX2xpc3R9IC4vY29uZmlnLyRmIgotKyAgICAgICA7OwotICAgICAuLyogKQotICAgICAgICBmPWBlY2hvICRmIHwgc2VkICdzL14uLi8vJ2AKLSAgICAgICAgdG1fZmlsZV9saXN0PSIke3RtX2ZpbGVfbGlzdH0gJGYiCi0tLSAKLTEuNy4xMC40Ci0KZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy00LjkvMDA0MC1maXgtZysrLXN5c3Jvb3QucGF0Y2ggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNC45LzAwNDAtZml4LWcrKy1zeXNyb290LnBhdGNoCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkNTBhYTVjLi4wMDAwMDAwCi0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy00LjkvMDA0MC1maXgtZysrLXN5c3Jvb3QucGF0Y2gKKysrIC9kZXYvbnVsbApAQCAtMSw0MCArMCwwIEBACi1Qb3J0aW9ucyBvZgotCi1odHRwOi8vd3d3Lm1haWwtYXJjaGl2ZS5jb20vZ2NjLXBhdGNoZXNAZ2NjLmdudS5vcmcvbXNnMjYwMTMuaHRtbAotCi1hcmUgbm90IHVwc3RyZWFtZWQgeWV0LiBTbyBsZXRzIGtlZXAgbWlzc2luZyBwaWVjZXMuCi0KLVVwc3RyZWFtLVN0YXR1czogUGVuZGluZwotCi1TaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgotCi1JbmRleDogZ2NjLTQuOC4xL2djYy9jb25maWd1cmUuYWMKLT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tLSBnY2MtNC44LjEub3JpZy9nY2MvY29uZmlndXJlLmFjCTIwMTMtMDctMTUgMTU6NTU6NDkuNDg4Mzk5MTMyIC0wNzAwCi0rKysgZ2NjLTQuOC4xL2djYy9jb25maWd1cmUuYWMJMjAxMy0wNy0xNSAxNjowMjozMS43NzI0MDY2NzkgLTA3MDAKLUBAIC0xNDgsNyArMTQ4LDkgQEAKLSBpZiB0ZXN0ICIke3dpdGhfc3lzcm9vdCtzZXR9IiA9IHNldDsgdGhlbgotICAgZ2NjX2d4eF93aXRob3V0X3N5c3Jvb3Q9YGV4cHIgIiR7Z2NjX2d4eF9pbmNsdWRlX2Rpcn0iIDogIiR7d2l0aF9zeXNyb290fSInXCguKlwpJ2AKLSAgIGlmIHRlc3QgIiR7Z2NjX2d4eF93aXRob3V0X3N5c3Jvb3R9IjsgdGhlbgotLSAgICBnY2NfZ3h4X2luY2x1ZGVfZGlyPSIke2djY19neHhfd2l0aG91dF9zeXNyb290fSIKLSsgICAgaWYgdGVzdCB4JHt3aXRoX3N5c3Jvb3R9ICE9IHgvOyB0aGVuCi0rICAgICAgZ2NjX2d4eF9pbmNsdWRlX2Rpcj0iJHtnY2NfZ3h4X3dpdGhvdXRfc3lzcm9vdH0iCi0rICAgIGZpCi0gICAgIGdjY19neHhfaW5jbHVkZV9kaXJfYWRkX3N5c3Jvb3Q9MQotICAgZmkKLSBmaQotSW5kZXg6IGdjYy00LjguMS9nY2MvY29uZmlndXJlCi09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLS0gZ2NjLTQuOC4xLm9yaWcvZ2NjL2NvbmZpZ3VyZQkyMDEzLTA3LTE1IDE1OjU1OjQ5LjQ3MjM5OTEzMiAtMDcwMAotKysrIGdjYy00LjguMS9nY2MvY29uZmlndXJlCTIwMTMtMDctMTUgMTY6MDI6MzEuNzgwNDA2NjgwIC0wNzAwCi1AQCAtMzMyNSw3ICszMzI1LDkgQEAKLSBpZiB0ZXN0ICIke3dpdGhfc3lzcm9vdCtzZXR9IiA9IHNldDsgdGhlbgotICAgZ2NjX2d4eF93aXRob3V0X3N5c3Jvb3Q9YGV4cHIgIiR7Z2NjX2d4eF9pbmNsdWRlX2Rpcn0iIDogIiR7d2l0aF9zeXNyb290fSInXCguKlwpJ2AKLSAgIGlmIHRlc3QgIiR7Z2NjX2d4eF93aXRob3V0X3N5c3Jvb3R9IjsgdGhlbgotLSAgICBnY2NfZ3h4X2luY2x1ZGVfZGlyPSIke2djY19neHhfd2l0aG91dF9zeXNyb290fSIKLSsgICAgaWYgdGVzdCB4JHt3aXRoX3N5c3Jvb3R9ICE9IHgvOyB0aGVuCi0rICAgICAgZ2NjX2d4eF9pbmNsdWRlX2Rpcj0iJHtnY2NfZ3h4X3dpdGhvdXRfc3lzcm9vdH0iCi0rICAgIGZpCi0gICAgIGdjY19neHhfaW5jbHVkZV9kaXJfYWRkX3N5c3Jvb3Q9MQotICAgZmkKLSBmaQpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTQuOS8wMDQxLWxpYnRvb2wtYXZvaWQtbGliZGlyLnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTQuOS8wMDQxLWxpYnRvb2wtYXZvaWQtbGliZGlyLnBhdGNoCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyZGQ5NjEwLi4wMDAwMDAwCi0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy00LjkvMDA0MS1saWJ0b29sLWF2b2lkLWxpYmRpci5wYXRjaAorKysgL2Rldi9udWxsCkBAIC0xLDE5ICswLDAgQEAKLUF2b2lkIHVzaW5nIGxpYmRpciBmcm9tIC5sYSB3aGljaCB1c3VhbGx5IHBvaW50cyB0byBhIGhvc3QgcGF0aAotCi1VcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW2VtYmVkZGVkIHNwZWNpZmljXQotU2lnbmVkLW9mZi1ieTogSm9uYXRoYW4gTGl1IDxuZXQxNDdAZ21haWwuY29tPgotCi1kaWZmIC0tZ2l0IGEvbHRtYWluLnNoIGIvbHRtYWluLnNoCi1pbmRleCBhMDM0MzNmLi4xOTAyYTkwIDEwMDY0NAotLS0tIGEvbHRtYWluLnNoCi0rKysgYi9sdG1haW4uc2gKLUBAIC01NjI4LDYgKzU2MjgsOSBAQCBmdW5jX21vZGVfbGluayAoKQotIAkgICAgYWJzZGlyPSIkYWJzX2xhZGlyIgotIAkgICAgbGliZGlyPSIkYWJzX2xhZGlyIgotIAkgIGVsc2UKLSsJICAgICMgSW5zdGVhZCBvZiB1c2luZyBsaWJkaXIgZnJvbSAubGEgd2hpY2ggdXN1YWxseSBwb2ludHMgdG8gYSBob3N0IHBhdGgsCi0rCSAgICAjIHVzZSB0aGUgcGF0aCB0aGUgLmxhIGlzIGNvbnRhaW5lZCBpbi4KLSsJICAgIGxpYmRpcj0iJGFic19sYWRpciIKLSAJICAgIGRpcj0iJGxpYmRpciIKLSAJICAgIGFic2Rpcj0iJGxpYmRpciIKLSAJICBmaQpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTQuOS8wMDQzLWNwcC5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy00LjkvMDA0My1jcHAucGF0Y2gKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGVhZjg2NDYuLjAwMDAwMDAKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTQuOS8wMDQzLWNwcC5wYXRjaAorKysgL2Rldi9udWxsCkBAIC0xLDQwICswLDAgQEAKLVRoZSBPRSBlbnZpcm9ubWVudCBzZXRzIGFuZCBleHBvcnRzIENQUCBhcyBiZWluZyB0aGUgdGFyZ2V0IGdjYy4gV2hlbiBidWlsZGluZyAKLWdjYy1jcm9zcy1jYW5hZGlhbiBmb3IgYSBtaW5ndyB0YXJnZXR0ZWQgc2RrLCB0aGUgZm9sbG93aW5nIGNhbiBiZSBmb3VuZCBpbgotYnVpbGQueDg2XzY0LXBva3lzZGstbWluZ3czMi5pNTg2LXBva3ktbGludXgvYnVpbGQteDg2XzY0LWxpbnV4L2xpYmliZXJ0eS9jb25maWcubG9nOgotCi1jb25maWd1cmU6MzY0MTogY2hlY2tpbmcgZm9yIF9GSUxFX09GRlNFVF9CSVRTIHZhbHVlIG5lZWRlZCBmb3IgbGFyZ2UgZmlsZXMKLWNvbmZpZ3VyZTozNjY2OiBnY2MgIC1jIC1pc3lzdGVtL21lZGlhL2J1aWxkMS9wb2t5L2J1aWxkL3RtcC9zeXNyb290cy94ODZfNjQtbGludXgvdXNyL2luY2x1ZGUgLU8yIC1waXBlICBjb25mdGVzdC5jID4mNQotY29uZmlndXJlOjM2NjY6ICQ/ID0gMAotY29uZmlndXJlOjM2OTg6IHJlc3VsdDogbm8KLWNvbmZpZ3VyZTozNzg2OiBjaGVja2luZyBob3cgdG8gcnVuIHRoZSBDIHByZXByb2Nlc3NvcgotY29uZmlndXJlOjM4NTY6IHJlc3VsdDogeDg2XzY0LXBva3lzZGstbWluZ3czMi1nY2MgLUUgLS1zeXNyb290PS9tZWRpYS9idWlsZDEvcG9reS9idWlsZC90bXAvc3lzcm9vdHMveDg2XzY0LW5hdGl2ZXNkay1taW5ndzMyLXBva3lzZGstbWluZ3czMgotY29uZmlndXJlOjM4NzY6IHg4Nl82NC1wb2t5c2RrLW1pbmd3MzItZ2NjIC1FIC0tc3lzcm9vdD0vbWVkaWEvYnVpbGQxL3Bva3kvYnVpbGQvdG1wL3N5c3Jvb3RzL3g4Nl82NC1uYXRpdmVzZGstbWluZ3czMi1wb2t5c2RrLW1pbmd3MzIgIGNvbmZ0ZXN0LmMKLWNvbmZpZ3VyZTozODc2OiAkPyA9IDAKLQotTm90ZSB0aGlzIGlzIGEgKmJ1aWxkKiB0YXJnZXQgKGluIGJ1aWxkLXg4Nl82NC1saW51eCkgc28gaXQgc2hvdWxkIGJlIHVzaW5nIAotdGhlIGhvc3QgImdjYyIsIG5vdCB4ODZfNjQtcG9reXNkay1taW5ndzMyLWdjYy4gU2luY2UgdGhlIG1pbmd3MzIgaGVhZGVycyBhcmUgCi12ZXJ5IGRpZmZlcmVudCwgdXNpbmcgdGhlIHdyb25nIGNwcCBpcyBhIHJlYWwgcHJvYmxlbS4gSXQgaXMgbGVha2luZyBpbnRvIAotY29uZmlndXJlIHRocm91Z2ggdGhlIENQUCB2YXJpYWJsZS4gVWx0aW1hdGVseSB0aGlzIGxlYWRzIHRvIGJ1aWxkIGZhaWx1cmVzIAotcmVsYXRlZCB0byBub3QgYmVpbmcgYWJsZSB0byBpbmNsdWRlIGEgcHJvY2Vzcy5oIGZpbGUgZm9yIHBlbS11bml4LmMuCi0KLVRoZSBmaXggaXMgdG8gZW5zdXJlIHdlIGV4cG9ydCBhIHNhbmUgQ1BQIHZhbHVlIGludG8gdGhlIGJ1aWxkIGVudmlyb25tZW50IHdoZW4KLXVzaW5nIGJ1aWxkIHRhcmdldHMuIFdlIGNvdWxkIGRlZmluZSBhIENQUF9GT1JfQlVJTEQgdmFsdWUgd2hpY2ggbWF5IGJlIHRoZSB2ZXJzaW9uCi13aGljaCBuZWVkcyB0byBiZSB1cHN0cmVhbWVkIGJ1dCBmb3Igbm93LCB0aGlzIGZpeCBpcyBnb29kIGVub3VnaCB0byBhdm9pZCB0aGUgCi1wcm9ibGVtLgotCi1SUCAyMi8wOC8yMDEzCi0KLVVwc3RyZWFtLVN0YXR1czogUGVuZGluZwotCi1JbmRleDogZ2NjLTQuOC4xL01ha2VmaWxlLmluCi09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLS0gZ2NjLTQuOC4xLm9yaWcvTWFrZWZpbGUuaW4JMjAxMy0wMy0zMCAxMToyNTowMy4wMDAwMDAwMDAgKzAwMDAKLSsrKyBnY2MtNC44LjEvTWFrZWZpbGUuaW4JMjAxMy0wOC0xMyAxMjowMzoxNy4xNTE5ODg4ODIgKzAwMDAKLUBAIC0xNDksNiArMTQ5LDcgQEAKLSAJQVI9IiQoQVJfRk9SX0JVSUxEKSI7IGV4cG9ydCBBUjsgXAotIAlBUz0iJChBU19GT1JfQlVJTEQpIjsgZXhwb3J0IEFTOyBcCi0gCUNDPSIkKENDX0ZPUl9CVUlMRCkiOyBleHBvcnQgQ0M7IFwKLSsJQ1BQPSIkKENDX0ZPUl9CVUlMRCkgLUUiOyBleHBvcnQgQ1BQOyBcCi0gCUNGTEFHUz0iJChDRkxBR1NfRk9SX0JVSUxEKSI7IGV4cG9ydCBDRkxBR1M7IFwKLSAJQ09ORklHX1NIRUxMPSIkKFNIRUxMKSI7IGV4cG9ydCBDT05GSUdfU0hFTEw7IFwKLSAJQ1hYPSIkKENYWF9GT1JfQlVJTEQpIjsgZXhwb3J0IENYWDsgXApkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTQuOS8wMDQ0LWdlbmd0eXBlcy5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy00LjkvMDA0NC1nZW5ndHlwZXMucGF0Y2gKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGUzODc2MWQuLjAwMDAwMDAKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTQuOS8wMDQ0LWdlbmd0eXBlcy5wYXRjaAorKysgL2Rldi9udWxsCkBAIC0xLDk3ICswLDAgQEAKLWdlbmd0eXBlIGlzIGdlbmVyYXRlZCBmb3IgYm90aCB0aGUgYnVpbGQgc3lzdGVtIGFuZCB0aGUgdGFyZ2V0LiAtREdFTkVSQVRPUl9GSUxFCi13YXMgYWRkZWQgaW4gdGhlIHBhdGNoIGh0dHA6Ly9nY2MuZ251Lm9yZy9tbC9nY2MtcGF0Y2hlcy8yMDEyLTA3L21zZzAwMjczLmh0bWwKLWFuZCB3YXMgYXBwbGllZCB0byBib3RoIHZlcnNpb25zIG9mIGdlbmd0eXBlLgotCi1VbmZvcnR1bmF0ZWx5IHRoZSBwcmVzZW5jZSBvZiB0aGlzIGZsYWcgdHJpZ2dlcnMgdGhlIGJ1aWxkIGNvbmZpZ3VyYXRpb24gKGJjb25maWcuaCkgCi10byBiZSBpbmNsdWRlZCBmb3IgdGhlIHRhcmdldCBidWlsZCBvZiBnZW5ndHlwZS4gQ29tcGlsaW5nIGdlbmd0eXBlIHdpdGggdGhlIHRhcmdldCAKLWNvbXBpbGVyIGFuZCBiY29uZmlnLmggY2FuIHJlc3VsdCBpbiBlcnJvcnMgaWYgdGhlIGJ1aWxkIGFuZCB0YXJnZXQgc3lzdGVtcyBhcmUgCi1kaXNzaW1pbGFyLiBBbiBleGFtcGxlIGNhc2UgdGhpcyBmYWlscyBpcyBjcm9zcyBjb21waWxpbmcgZ2NjIG9uIGxpbnV4IGZvciBhIGRhcndpbiAKLXRhcmdldCBzeXN0ZW06Ci0KLUluIGZpbGUgaW5jbHVkZWQgZnJvbSAvbWVkaWEvYnVpbGQxL3Bva3kvYnVpbGQvdG1wL3dvcmstc2hhcmVkL2djYy00LjguMS1yMC9nY2MtNC44LjEvZ2NjL2dlbmd0eXBlLXBhcnNlLmM6MjU6MDoKLXwgL21lZGlhL2J1aWxkMS9wb2t5L2J1aWxkL3RtcC93b3JrLXNoYXJlZC9nY2MtNC44LjEtcjAvZ2NjLTQuOC4xL2djYy9nZW5ndHlwZS1wYXJzZS5jOiBJbiBmdW5jdGlvbiAndm9pZCBwYXJzZV9lcnJvcihjb25zdCBjaGFyKiwgLi4uKSc6Ci18IC9tZWRpYS9idWlsZDEvcG9reS9idWlsZC90bXAvd29yay1zaGFyZWQvZ2NjLTQuOC4xLXIwL2djYy00LjguMS9nY2Mvc3lzdGVtLmg6OTM6NTM6IGVycm9yOiAnZnB1dGNfdW5sb2NrZWQnIHdhcyBub3QgZGVjbGFyZWQgaW4gdGhpcyBzY29wZQotfCAgIyAgZGVmaW5lIGZwdXRjKEMsIFN0cmVhbSkgZnB1dGNfdW5sb2NrZWQgKEMsIFN0cmVhbSkKLQotd2hpY2ggb2NjdXJzIHNpbmNlIGF1dG8tYnVpbGQuaCBhbmQgYXV0by1ob3N0LmggaGF2ZSBkaWZmZXJuZXQgdmFsdWVzIG9mCi1IQVZFX0ZQVVRDX1VOTE9DS0VEOgotCi0jZGVmaW5lIEhBVkVfRlBVVENfVU5MT0NLRUQgMQotLyogI3VuZGVmIEhBVkVfRlBVVFNfVU5MT0NLRUQgKi8KLQotVGhlIG9idmlvdXMgZml4IGlzIHRvIG9ubHkgaW5jbHVkZSB0aGUgZmxhZyBvbiBidWlsZC8gdGFyZ2V0cyB3aGljaCB0aGlzIHBhdGNoIGRvZXMsIGhvd2V2ZXIgCi10aGlzIGFsc28gbGVhZHMgdG8gY29tcGlsZSBlcnJvcnMgZHVlIHRvIGNvbnN0X3RyZWUgYmVpbmcgdW5kZWZpbmVkIGJ1dCB1c2VkIGluIGRvdWJsZV9pbnQuaAotCi1JIGFkZGVkIGEgR0VORVJBVE9SX0ZJTEUyIGZsYWcgdG8gd29ya2Fyb3VuZCB0aG9zZSBpbiB0aGUgCi10YXJnZXQgY2FzZSBhbmQgYWxsb3cgdGhlIGJ1aWxkIHRvIHN1Y2NlZWQuCi0KLU9ubHkgdGhlIGJ1aWxkL2dlbmd0eXBlcyBzaG91bGQgaGF2ZSB0aGUgLURHRU5FUkFUT1JfRklMRSAKLQotUlAgMjIvOC8yMDEzCi0KLVVwc3RyZWFtLVN0YXR1czogUGVuZGluZwotCi1JbmRleDogZ2NjLTQuOC4xL2djYy9NYWtlZmlsZS5pbgotPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0tIGdjYy00LjguMS5vcmlnL2djYy9NYWtlZmlsZS5pbgkyMDEzLTA4LTE5IDExOjQwOjM2Ljg0NDAxNDQyNCArMDAwMAotKysrIGdjYy00LjguMS9nY2MvTWFrZWZpbGUuaW4JMjAxMy0wOC0xOSAxMTo0MDozNy43ODQwMTQ0MDIgKzAwMDAKLUBAIC0zOTAzLDI3ICszOTAzLDI5IEBACi0gCi0gZ2VuZ3R5cGUtbGV4Lm8gYnVpbGQvZ2VuZ3R5cGUtbGV4Lm8gOiBnZW5ndHlwZS1sZXguYyBnZW5ndHlwZS5oICQoU1lTVEVNX0gpCi0gZ2VuZ3R5cGUtbGV4Lm86ICQoQ09ORklHX0gpICQoQkNPTkZJR19IKQotLUNGTEFHUy1nZW5ndHlwZS1sZXgubyArPSAtREdFTkVSQVRPUl9GSUxFCi0rQ0ZMQUdTLWJ1aWxkL2dlbmd0eXBlLWxleC5vICs9IC1ER0VORVJBVE9SX0ZJTEUKLSBidWlsZC9nZW5ndHlwZS1sZXgubzogJChCQ09ORklHX0gpCi0gCi0gZ2VuZ3R5cGUtcGFyc2UubyBidWlsZC9nZW5ndHlwZS1wYXJzZS5vIDogZ2VuZ3R5cGUtcGFyc2UuYyBnZW5ndHlwZS5oIFwKLSAgICQoU1lTVEVNX0gpCi0gZ2VuZ3R5cGUtcGFyc2UubzogJChDT05GSUdfSCkKLS1DRkxBR1MtZ2VuZ3R5cGUtcGFyc2UubyArPSAtREdFTkVSQVRPUl9GSUxFCi0rQ0ZMQUdTLWJ1aWxkL2dlbmd0eXBlLXBhcnNlLm8gKz0gLURHRU5FUkFUT1JfRklMRQotIGJ1aWxkL2dlbmd0eXBlLXBhcnNlLm86ICQoQkNPTkZJR19IKQotIAotIGdlbmd0eXBlLXN0YXRlLm8gYnVpbGQvZ2VuZ3R5cGUtc3RhdGUubzogZ2VuZ3R5cGUtc3RhdGUuYyAkKFNZU1RFTV9IKSBcCi0gICBnZW5ndHlwZS5oIGVycm9ycy5oIGRvdWJsZS1pbnQuaCB2ZXJzaW9uLmggJChIQVNIVEFCX0gpICQoT0JTVEFDS19IKSBcCi0gICAkKFhSRUdFWF9IKQotIGdlbmd0eXBlLXN0YXRlLm86ICQoQ09ORklHX0gpCi0tQ0ZMQUdTLWdlbmd0eXBlLXN0YXRlLm8gKz0gLURHRU5FUkFUT1JfRklMRQotK0NGTEFHUy1nZW5ndHlwZS1zdGF0ZS5vICs9IC1ER0VORVJBVE9SX0ZJTEUyCi0rQ0ZMQUdTLWJ1aWxkL2dlbmd0eXBlLXN0YXRlLm8gKz0gLURHRU5FUkFUT1JfRklMRQotIGJ1aWxkL2dlbmd0eXBlLXN0YXRlLm86ICQoQkNPTkZJR19IKQotIAotIGdlbmd0eXBlLm8gYnVpbGQvZ2VuZ3R5cGUubyA6IGdlbmd0eXBlLmMgJChTWVNURU1fSCkgZ2VuZ3R5cGUuaCAJXAotICAgcnRsLmRlZiBpbnNuLW5vdGVzLmRlZiBlcnJvcnMuaCBkb3VibGUtaW50LmggdmVyc2lvbi5oICQoSEFTSFRBQl9IKSBcCi0gICAkKE9CU1RBQ0tfSCkgJChYUkVHRVhfSCkKLSBnZW5ndHlwZS5vOiAkKENPTkZJR19IKQotLUNGTEFHUy1nZW5ndHlwZS5vICs9IC1ER0VORVJBVE9SX0ZJTEUKLStDRkxBR1MtZ2VuZ3R5cGUubyArPSAtREdFTkVSQVRPUl9GSUxFMgotK0NGTEFHUy1idWlsZC9nZW5ndHlwZS5vICs9IC1ER0VORVJBVE9SX0ZJTEUKLSBidWlsZC9nZW5ndHlwZS5vOiAkKEJDT05GSUdfSCkKLSAKLSBidWlsZC9nZW5tZGRlcHMubzogZ2VubWRkZXBzLmMgJChCQ09ORklHX0gpICQoU1lTVEVNX0gpIGNvcmV0eXBlcy5oCVwKLUBAIC0zOTg4LDcgKzM5OTAsNyBAQAotICMgYW55IHN5c3RlbSBoZWFkZXIgaXMgaW5jbHVkZWQuCi0gZ2VuZ3R5cGUtbGV4LmMgOiBnZW5ndHlwZS1sZXgubAotIAktJChGTEVYKSAkKEZMRVhGTEFHUykgLW8kQCAkPCAmJiB7IFwKLS0JICBlY2hvICcjaW5jbHVkZSAiYmNvbmZpZy5oIicgPiAkQC50bXA7IFwKLSsJICBlY2hvICcnID4gJEAudG1wOyBcCi0gCSAgY2F0ICRAID4+ICRALnRtcDsgXAotIAkgIG12ICRALnRtcCAkQDsgXAotIAl9Ci1JbmRleDogZ2NjLTQuOC4xL2djYy9kb3VibGUtaW50LmgKLT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tLSBnY2MtNC44LjEub3JpZy9nY2MvZG91YmxlLWludC5oCTIwMTMtMDEtMzAgMTE6MDQ6MzAuMDAwMDAwMDAwICswMDAwCi0rKysgZ2NjLTQuOC4xL2djYy9kb3VibGUtaW50LmgJMjAxMy0wOC0xOSAxMTo0MTo1MS41NjQwMTI3MTkgKzAwMDAKLUBAIC00NDgsMTAgKzQ0OCwxMiBAQAotIAotIAotICNpZm5kZWYgR0VORVJBVE9SX0ZJTEUKLSsjaWZuZGVmIEdFTkVSQVRPUl9GSUxFMgotIC8qIENvbnZlcnNpb24gdG8gYW5kIGZyb20gR01QIGludGVnZXIgcmVwcmVzZW50YXRpb25zLiAgKi8KLSAKLSB2b2lkIG1wel9zZXRfZG91YmxlX2ludCAobXB6X3QsIGRvdWJsZV9pbnQsIGJvb2wpOwotIGRvdWJsZV9pbnQgbXB6X2dldF9kb3VibGVfaW50IChjb25zdF90cmVlLCBtcHpfdCwgYm9vbCk7Ci0gI2VuZGlmCi0rI2VuZGlmCi0gCi0gI2VuZGlmIC8qIERPVUJMRV9JTlRfSCAqLwpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTQuOS8wMDQ2LWxpYmF0b21pYy1kZXB0cmFja2luZy5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy00LjkvMDA0Ni1saWJhdG9taWMtZGVwdHJhY2tpbmcucGF0Y2gKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDZlYTRmNDIuLjAwMDAwMDAKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTQuOS8wMDQ2LWxpYmF0b21pYy1kZXB0cmFja2luZy5wYXRjaAorKysgL2Rldi9udWxsCkBAIC0xLDQxICswLDAgQEAKLWdjYyA0Ljggd29uJ3QgYnVpbGQgd2l0aCAtLWRpc2FibGUtZGVwZW5kZW5jeS10cmFja2luZyBzaW5jZSB0aGUgKi5QcG8gZmlsZXMKLWRvbid0IGdldCBjcmVhdGVkIHVubGVzcyAtLWVuYWJsZS1kZXBlbmRlbmN5LXRyYWNraW5nIGlzIHRydWUuCi0KLVRoaXMgcGF0Y2ggZW5zdXJlcyB3ZSBvbmx5IHVzZSB0aG9zZSBjb21waWxlciBvcHRpb25zIHdoZW4gaXRzIGVuYWJsZWQuCi0KLVVwc3RyZWFtLVN0YXR1czogU3VibWl0dGVkCi0KLShQcm9ibGVtIHdhcyBhbHJlYWR5IHJlcG9ydGVkIHVwc3RyZWFtLCBhdHRhY2hlZCB0aGlzIHBhdGNoIHRoZXJlCi1odHRwOi8vZ2NjLmdudS5vcmcvYnVnemlsbGEvc2hvd19idWcuY2dpP2lkPTU1OTMwKQotCi1SUCAKLTIwMTIvMDkvMjIKLQotSW5kZXg6IGdjYy00LjguMS9saWJhdG9taWMvTWFrZWZpbGUuYW0KLT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tLSBnY2MtNC44LjEub3JpZy9saWJhdG9taWMvTWFrZWZpbGUuYW0JMjAxMy0wMS0xNCAxODoxNjoyMy4wMDAwMDAwMDAgKzAwMDAKLSsrKyBnY2MtNC44LjEvbGliYXRvbWljL01ha2VmaWxlLmFtCTIwMTMtMDktMjIgMTA6Mzg6MTguOTA0MDY0NzUwICswMDAwCi1AQCAtMTAwLDcgKzEwMCw4IEBACi0gSUZVTkNfREVGCT0gLURJRlVOQ19BTFQ9JChQQVRfUykKLSBJRlVOQ19PUFQJPSAkKHdvcmQgJChQQVRfUyksJChJRlVOQ19PUFRJT05TKSkKLSAKLS1NX0RFUFMJCT0gLU1UICRAIC1NRCAtTVAgLU1GICQoREVQRElSKS8kKEBGKS5QcG8KLStAQU1ERVBfVFJVRUBNX0RFUFMJCT0gLU1UICRAIC1NRCAtTVAgLU1GICQoREVQRElSKS8kKEBGKS5QcG8KLStAQU1ERVBfRkFMU0VATV9ERVBTCQk9IAotIE1fU0laRQkJPSAtRE49JChQQVRfTikKLSBNX0lGVU5DCQk9ICQoaWYgJChQQVRfUyksJChJRlVOQ19ERUYpICQoSUZVTkNfT1BUKSkKLSBNX0ZJTEUJCT0gJChQQVRfQkFTRSlfbi5jCi1JbmRleDogZ2NjLTQuOC4xL2xpYmF0b21pYy9NYWtlZmlsZS5pbgotPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0tIGdjYy00LjguMS5vcmlnL2xpYmF0b21pYy9NYWtlZmlsZS5pbgkyMDEzLTA1LTMxIDA5OjA5OjI2LjAwMDAwMDAwMCArMDAwMAotKysrIGdjYy00LjguMS9saWJhdG9taWMvTWFrZWZpbGUuaW4JMjAxMy0wOS0yMiAxMDo0MDo0Mi41MjAwNTk5MTcgKzAwMDAKLUBAIC0yOTgsNyArMjk4LDggQEAKLSBQQVRfUyA9ICQod29yZCAzLCQoUEFUX1NQTElUKSkKLSBJRlVOQ19ERUYgPSAtRElGVU5DX0FMVD0kKFBBVF9TKQotIElGVU5DX09QVCA9ICQod29yZCAkKFBBVF9TKSwkKElGVU5DX09QVElPTlMpKQotLU1fREVQUyA9IC1NVCAkQCAtTUQgLU1QIC1NRiAkKERFUERJUikvJChARikuUHBvCi0rQEFNREVQX1RSVUVATV9ERVBTID0gLU1UICRAIC1NRCAtTVAgLU1GICQoREVQRElSKS8kKEBGKS5QcG8KLStAQU1ERVBfRkFMU0VATV9ERVBTID0gCi0gTV9TSVpFID0gLUROPSQoUEFUX04pCi0gTV9JRlVOQyA9ICQoaWYgJChQQVRfUyksJChJRlVOQ19ERUYpICQoSUZVTkNfT1BUKSkKLSBNX0ZJTEUgPSAkKFBBVF9CQVNFKV9uLmMKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy00LjkvMDA0Ny1yZXBvbWVtYnVnLnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTQuOS8wMDQ3LXJlcG9tZW1idWcucGF0Y2gKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDlhZmQ1NWMuLjAwMDAwMDAKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTQuOS8wMDQ3LXJlcG9tZW1idWcucGF0Y2gKKysrIC9kZXYvbnVsbApAQCAtMSw1MyArMCwwIEBACi1XaGVuIGNvbXBpbGluZyBhIHByb2plY3QgdXNpbmcgLWZyZXBvLCAucnBvIGZpbGVzIGFyZSB3cml0dGVuIGFsb25nc2lkZQotdGhlIC5vIGZpbGUsIHRoZSBzeW1ib2xzIGVpdGhlciBoYXZlIE8gb3IgQyBhZ2FpbnN0IHRoZW0uIER1cmluZyBmaW5hbCBsaW5raW5nLAotdGhlIG9iamVjdHMgY2FuIGJlIHJlY29tcGlsZWQgd2l0aCBzb21lIG9mIHRoZSBlbnRyaWVzIHR3ZWFrZWQvY2hvc2VuIGJ5IHRoZSAKLXRsaW5rLmMgY29kZSAodmlzaWJsZSB3aXRoIFRMSU5LX1ZFUkJPU0U9MyksIGl0IGRvZXMgdGhpcyBieSBjaGFuZ2luZyBPIC0+IEMKLWluIHRoZSAucnBvIGZpbGVzLgotCi1NeSB0ZXN0cyBzaG93ZWQgdGhhdCBpbml0X3JlcG8gKGNwL3JlcG8uYykgd2FzIGNvcnJlY3RseSBjYWxsaW5nIAotSURFTlRJRklFUl9SRVBPX0NIT1NFTiBhZ2FpbnN0IHRoZSByaWdodCBpZGVudGlmZXJzIGFuZCBzZXR0aW5nIHRoZQotY2hvc2VuIGJpdC4KLQotQnkgdGhlIHRpbWUgZmluaXNoX3JlcG8oKSBvciBlbWl0X3JlcG9fcCgpIHdlcmUgY2FsbGVkLCB0aGUgcG9pbnRlciByZXR1cm5lZAotYnkgZ2V0X2lkZW50aWZpZXIoKSBmb3IgdGhlIHN5bWJvbCBtYXJrZWQgZHVyaW5nIGluaXRfcmVwbyBoYWQgY2hhbmdlZCBhbmQKLXRoZSBjaG9zZW4gYml0IHdhcyBubyBsb25nZXIgc2V0LiBUaGlzIGxlYWQgdG8gbGlua2luZyBidWdzIGxpa2U6Ci0KLWNvbGxlY3Q6IHJlbGlua2luZwotY29sbGVjdDI6IGVycm9yOiAnX1pOSzZzdWRva3U1Q2xlYXJJTlNfOFNlcXVlbmNlRUVjbEVSUzFfJyB3YXMgYXNzaWduZWQgdG8gJ2JvYXJkLnJwbycsIGJ1dCB3YXMgbm90IGRlZmluZWQgZHVyaW5nIHJlY29tcGlsYXRpb24sIG9yIHZpY2UgdmVyc2EKLQotVGhlIHByb2JsZW0gaXMgdGhhdCB0aGUgZ2FyYmFnZSBjb2xsZWN0aW9uIGlzIGdldHRpbmcgY2FsbGVkIGJlZm9yZQotZmluaXNoX3JlcG8oKSBpcyBjYWxsZWQgYW5kIGdnY19wcm90ZWN0X2lkZW50aWZpZXJzIGlzIHNldCB0byBmYWxzZSAKLXNvIHRoZSBpZGVudGlmaWVycyBhcmUgbm90IHByZXNlcnZlZC4gVGhleSBhcmUgcmVjcmVhdGVkIGJ1dCB0aGUgCi1jaG9zZW4gYml0cyBnZXQgd2lwZWQgb3V0IHdoaWNoIGlzIHdoeSB0aGUgcG9pbnRlciBjaGFuZ2VzIGFuZCB0aGUgCi1jaG9zZW4gYml0IGlzIG5vdCBzZXQuCi0KLVRoZSBmaXggaXMgdG8gY2hhbmdlIGdnY19wcm90ZWN0X2lkZW50aWZpZXJzICphZnRlciogdGhlIGZpbmlzaF9yZXBvIAotY2FsbHMgYXJlIG1hZGUuCi0KLVJlcHJvZHVjdGlvbiBpcyB0cmlja3kgc2luY2UgeW91IG5lZWQgdG8gdHJpZ2dlciB0aGUgZ2FyYmFnZSBjb2xsZWN0b3IgYXQKLWp1c3QgdGhlIHJpZ2h0IG1vbWVudC4KLQotUlAgMjAxMy8xMC85Ci0KLVtZT0NUTyAjNTEzM10KLQotVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCi0KLUluZGV4OiBnY2MtNC44LjEvZ2NjL3RvcGxldi5jCi09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLS0gZ2NjLTQuOC4xLm9yaWcvZ2NjL3RvcGxldi5jCTIwMTMtMDMtMjggMDg6Mjk6NTEuMDAwMDAwMDAwICswMDAwCi0rKysgZ2NjLTQuOC4xL2djYy90b3BsZXYuYwkyMDEzLTEwLTA5IDIwOjI3OjE3LjA4OTIyODAyMyArMDAwMAotQEAgLTU1MSwxMSArNTUxLDExIEBACi0gICBpZiAoZmxhZ19zeW50YXhfb25seSB8fCBmbGFnX3dwYSkKLSAgICAgcmV0dXJuOwotIAotLSAgZ2djX3Byb3RlY3RfaWRlbnRpZmllcnMgPSBmYWxzZTsKLS0KLSAgIC8qIFRoaXMgbXVzdCBhbHNvIGNhbGwgZmluYWxpemVfY29tcGlsYXRpb25fdW5pdC4gICovCi0gICBsYW5nX2hvb2tzLmRlY2xzLmZpbmFsX3dyaXRlX2dsb2JhbHMgKCk7Ci0gCi0rICBnZ2NfcHJvdGVjdF9pZGVudGlmaWVycyA9IGZhbHNlOwotKwotICAgaWYgKHNlZW5fZXJyb3IgKCkpCi0gICAgIHJldHVybjsKLSAKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy00LjkvMDA0OS1FbmFibGUtU1BFLUFsdGlWZWMtZ2VuZXJhdGlvbi1vbi1wb3dlcGMtbGludXgtdGFyZ2V0LnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTQuOS8wMDQ5LUVuYWJsZS1TUEUtQWx0aVZlYy1nZW5lcmF0aW9uLW9uLXBvd2VwYy1saW51eC10YXJnZXQucGF0Y2gKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGI5OGY4ZmYuLjAwMDAwMDAKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTQuOS8wMDQ5LUVuYWJsZS1TUEUtQWx0aVZlYy1nZW5lcmF0aW9uLW9uLXBvd2VwYy1saW51eC10YXJnZXQucGF0Y2gKKysrIC9kZXYvbnVsbApAQCAtMSw0MiArMCwwIEBACi1Gcm9tIDllMGUxOWVhYzI1NjJmNzM4NTg2MDJmZTI2ZTIwNDRlYjhiMjBjNDcgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCi1Gcm9tOiBBbGV4YW5kcnUtQ2V6YXIgU2FyZGFuIDxhbGV4YW5kcnUuc2FyZGFuQGZyZWVzY2FsZS5jb20+Ci1EYXRlOiBXZWQsIDUgRmViIDIwMTQgMTY6NTI6MzEgKzAyMDAKLVN1YmplY3Q6IFtQQVRDSF0gRW5hYmxlIFNQRSAmIEFsdGlWZWMgZ2VuZXJhdGlvbiBvbiBwb3dlcGMqbGludXggdGFyZ2V0Ci0KLVdoZW4gaXMgY29uZmlndXJlZCB3aXRoIC0tdGFyZ2V0PXBvd2VycGMtbGludXgsIHRoZSByZXN1bHRpbmcgR0NDIHdpbGwgCi1ub3QgYmUgYWJsZSB0byBnZW5lcmF0ZSBjb2RlIGZvciBTUEUgdGFyZ2V0cyAoZTUwMHYxL3YyKS4KLUdDQyBjb25maWd1cmVkIHdpdGggLS10YXJnZXQ9cG93ZXJwYy1saW51eHNwZSB3aWxsIG5vdCBiZSBhYmxlIHRvCi1nZW5lcmF0ZSBBbHRpVmVjIGluc3RydWN0aW9ucyAoZm9yIGU2NTAwKS4KLVRoaXMgcGF0Y2ggbW9kaWZpZXMgdGhlIGNvbmZpZ3VyZWQgZmlsZSBzdWNoIHRoYXQgU1BFIG9yIEFsdGlWZWMgY29kZQotY2FuIGJlIGdlbmVyYXRlZCB3aGVuIGdjYyBpcyBjb25maWd1cmVkIHdpdGggLS10YXJnZXQ9cG93ZXJwYy1saW51eC4KLVRoZSBBQkkgYW5kIHNwZWNpZmZpYyBpbnN0cnVjdGlvbnMgY2FuIGJlIHNlbGVjdGVkIHRocm91Z2ggdGhlCi0iLW1hYmk9c3BlIG9yIC1tYWJpPWFsdGl2ZWMiIGFuZCB0aGUgIi1tc3BlIG9yIC1tYWx0aXZlYyIgcGFyYW1ldGVycy4KLQotVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtjb25maWd1cmF0aW9uXQotCi1TaWduZWQtb2ZmLWJ5OiBBbGV4YW5kcnUtQ2V6YXIgU2FyZGFuIDxhbGV4YW5kcnUuc2FyZGFuQGZyZWVzY2FsZS5jb20+Ci0tLS0KLSBnY2MvY29uZmlnLmdjYyB8ICAgIDcgKysrKysrLQotIDEgZmlsZSBjaGFuZ2VkLCA2IGluc2VydGlvbnMoKyksIDEgZGVsZXRpb24oLSkKLQotZGlmZiAtLWdpdCBhL2djYy9jb25maWcuZ2NjIGIvZ2NjL2NvbmZpZy5nY2MKLWluZGV4IGNiN2E5NGUuLmQzOTJjMmIgMTAwNjQ0Ci0tLS0gYS9nY2MvY29uZmlnLmdjYwotKysrIGIvZ2NjL2NvbmZpZy5nY2MKLUBAIC0yMDY4LDcgKzIwNjgsMTIgQEAgcG93ZXJwYy0qLXJ0ZW1zKikKLSAJdG1ha2VfZmlsZT0icnM2MDAwL3QtZnBydWxlcyByczYwMDAvdC1ydGVtcyB0LXJ0ZW1zIHJzNjAwMC90LXBwY2NvbW0iCi0gCTs7Ci0gcG93ZXJwYyotKi1saW51eCopCi0tCXRtX2ZpbGU9IiR7dG1fZmlsZX0gZGJ4ZWxmLmggZWxmb3MuaCBmcmVlYnNkLXNwZWMuaCByczYwMDAvc3lzdjQuaCIKLSsJY2FzZSAke3RhcmdldH0gaW4KLSsJICAgIHBvd2VycGMqLSotbGludXgqc3BlKiB8IHBvd2VycGMqLSotbGludXgqYWx0aXZlYyopCi0rCQl0bV9maWxlPSIke3RtX2ZpbGV9IGRieGVsZi5oIGVsZm9zLmggZnJlZWJzZC1zcGVjLmggcnM2MDAwL3N5c3Y0LmgiIDs7Ci0rCSAgICAqKQotKwkJdG1fZmlsZT0iJHt0bV9maWxlfSBkYnhlbGYuaCBlbGZvcy5oIGZyZWVic2Qtc3BlYy5oIHJzNjAwMC9zeXN2NC5oIHJzNjAwMC9saW51eGFsdGl2ZWMuaCByczYwMDAvbGludXhzcGUuaCByczYwMDAvZTUwMC5oIiA7OwotKwllc2FjCi0gCWV4dHJhX29wdGlvbnM9IiR7ZXh0cmFfb3B0aW9uc30gcnM2MDAwL3N5c3Y0Lm9wdCIKLSAJdG1ha2VfZmlsZT0icnM2MDAwL3QtZnBydWxlcyByczYwMDAvdC1wcGNvcyAke3RtYWtlX2ZpbGV9IHJzNjAwMC90LXBwY2NvbW0iCi0gCWNhc2UgJHt0YXJnZXR9IGluCi0tLSAKLTEuNy45LjUKLQpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTQuOS8wMDUwLVJldmVydC1Vc2UtZGJ4X3JlZ19udW1iZXItZm9yLXNwYW5uaW5nLXJlZ2lzdGVycy5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy00LjkvMDA1MC1SZXZlcnQtVXNlLWRieF9yZWdfbnVtYmVyLWZvci1zcGFubmluZy1yZWdpc3RlcnMucGF0Y2gKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGFlYWQ2ZjYuLjAwMDAwMDAKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTQuOS8wMDUwLVJldmVydC1Vc2UtZGJ4X3JlZ19udW1iZXItZm9yLXNwYW5uaW5nLXJlZ2lzdGVycy5wYXRjaAorKysgL2Rldi9udWxsCkBAIC0xLDgwICswLDAgQEAKLVVwc3RyZWFtLVN0YXR1czogUGVuZGluZwotCi1Gcm9tIGNiOWIxYzA0MWI2MzRhNGMxMjg4OTZlM2QzZWVkNDA4MjYwOGM3OTcgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCi1Gcm9tOiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgotRGF0ZTogU2F0LCAzIE1heSAyMDE0IDE5OjI1OjE3IC0wNzAwCi1TdWJqZWN0OiBbUEFUQ0hdIFJldmVydCAiMjAxMy0wNS0yMSAgQ2hyaXN0aWFuIEJydWVsIAotIDxjaHJpc3RpYW4uYnJ1ZWxAc3QuY29tPiIKLQotVGhpcyByZXZlcnRzIGNvbW1pdCAzOTgzMDM2YThiNmIyNzEwYzU3Nzc3MTk0ZjIxNTA3ODE5YTczNTUzLgotCi1TaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgotCi1Db25mbGljdHM6Ci0JZ2NjL0NoYW5nZUxvZwotLS0tCi0gZ2NjL0NoYW5nZUxvZyAgIHwgMjE5ICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKystCi0gZ2NjL2R3YXJmMm91dC5jIHwgIDMzICsrKysrLS0tLQotIDIgZmlsZXMgY2hhbmdlZCwgMjM0IGluc2VydGlvbnMoKyksIDE4IGRlbGV0aW9ucygtKQotCi1kaWZmIC0tZ2l0IGEvZ2NjL2R3YXJmMm91dC5jIGIvZ2NjL2R3YXJmMm91dC5jCi1pbmRleCAxMjcyMzI2Li42YWMyYjI4IDEwMDY0NAotLS0tIGEvZ2NjL2R3YXJmMm91dC5jCi0rKysgYi9nY2MvZHdhcmYyb3V0LmMKLUBAIC0xMDg3MCwyNyArMTA4NzAsMjUgQEAgc3RhdGljIGR3X2xvY19kZXNjcl9yZWYKLSBtdWx0aXBsZV9yZWdfbG9jX2Rlc2NyaXB0b3IgKHJ0eCBydGwsIHJ0eCByZWdzLAotIAkJCSAgICAgZW51bSB2YXJfaW5pdF9zdGF0dXMgaW5pdGlhbGl6ZWQpCi0gewotLSAgaW50IHNpemUsIGk7Ci0rICBpbnQgbnJlZ3MsIHNpemUsIGk7Ci0rICB1bnNpZ25lZCByZWc7Ci0gICBkd19sb2NfZGVzY3JfcmVmIGxvY19yZXN1bHQgPSBOVUxMOwotIAotLSAgLyogU2ltcGxlLCBjb250aWd1b3VzIHJlZ2lzdGVycy4gICovCi0tICBpZiAocmVncyA9PSBOVUxMX1JUWCkKLS0gICAgewotLSAgICAgIHVuc2lnbmVkIHJlZyA9IFJFR05PIChydGwpOwotLSAgICAgIGludCBucmVnczsKLS0KLSsgIHJlZyA9IFJFR05PIChydGwpOwotICNpZmRlZiBMRUFGX1JFR19SRU1BUAotLSAgICAgIGlmIChjcnRsLT51c2VzX29ubHlfbGVhZl9yZWdzKQotLQl7Ci0tCSAgaW50IGxlYWZfcmVnID0gTEVBRl9SRUdfUkVNQVAgKHJlZyk7Ci0tCSAgaWYgKGxlYWZfcmVnICE9IC0xKQotLQkgICAgcmVnID0gKHVuc2lnbmVkKSBsZWFmX3JlZzsKLS0JfQotKyAgaWYgKGNydGwtPnVzZXNfb25seV9sZWFmX3JlZ3MpCi0rICAgIHsKLSsgICAgICBpbnQgbGVhZl9yZWcgPSBMRUFGX1JFR19SRU1BUCAocmVnKTsKLSsgICAgICBpZiAobGVhZl9yZWcgIT0gLTEpCi0rCXJlZyA9ICh1bnNpZ25lZCkgbGVhZl9yZWc7Ci0rICAgIH0KLSAjZW5kaWYKLSsgIGdjY19hc3NlcnQgKCh1bnNpZ25lZCkgREJYX1JFR0lTVEVSX05VTUJFUiAocmVnKSA9PSBkYnhfcmVnX251bWJlciAocnRsKSk7Ci0rICBucmVncyA9IGhhcmRfcmVnbm9fbnJlZ3NbUkVHTk8gKHJ0bCldW0dFVF9NT0RFIChydGwpXTsKLSAKLS0gICAgICBnY2NfYXNzZXJ0ICgodW5zaWduZWQpIERCWF9SRUdJU1RFUl9OVU1CRVIgKHJlZykgPT0gZGJ4X3JlZ19udW1iZXIgKHJ0bCkpOwotLSAgICAgIG5yZWdzID0gaGFyZF9yZWdub19ucmVnc1tSRUdOTyAocnRsKV1bR0VUX01PREUgKHJ0bCldOwotLQotKyAgLyogU2ltcGxlLCBjb250aWd1b3VzIHJlZ2lzdGVycy4gICovCi0rICBpZiAocmVncyA9PSBOVUxMX1JUWCkKLSsgICAgewotICAgICAgIHNpemUgPSBHRVRfTU9ERV9TSVpFIChHRVRfTU9ERSAocnRsKSkgLyBucmVnczsKLSAKLSAgICAgICBsb2NfcmVzdWx0ID0gTlVMTDsKLUBAIC0xMDkxOCw5ICsxMDkxNiwxMCBAQCBtdWx0aXBsZV9yZWdfbG9jX2Rlc2NyaXB0b3IgKHJ0eCBydGwsIHJ0eCByZWdzLAotICAgICB7Ci0gICAgICAgZHdfbG9jX2Rlc2NyX3JlZiB0OwotIAotLSAgICAgIHQgPSBvbmVfcmVnX2xvY19kZXNjcmlwdG9yIChkYnhfcmVnX251bWJlciAoWFZFQ0VYUCAocmVncywgMCwgaSkpLAotKyAgICAgIHQgPSBvbmVfcmVnX2xvY19kZXNjcmlwdG9yIChSRUdOTyAoWFZFQ0VYUCAocmVncywgMCwgaSkpLAotIAkJCQkgIFZBUl9JTklUX1NUQVRVU19JTklUSUFMSVpFRCk7Ci0gICAgICAgYWRkX2xvY19kZXNjciAoJmxvY19yZXN1bHQsIHQpOwotKyAgICAgIHNpemUgPSBHRVRfTU9ERV9TSVpFIChHRVRfTU9ERSAoWFZFQ0VYUCAocmVncywgMCwgMCkpKTsKLSAgICAgICBhZGRfbG9jX2Rlc2NyX29wX3BpZWNlICgmbG9jX3Jlc3VsdCwgc2l6ZSk7Ci0gICAgIH0KLSAKLS0tIAotMS45LjIKLQpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTQuOS8wMDUxLWVhYmlzcGUucGF0Y2ggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNC45LzAwNTEtZWFiaXNwZS5wYXRjaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTVlMzg5MC4uMDAwMDAwMAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNC45LzAwNTEtZWFiaXNwZS5wYXRjaAorKysgL2Rldi9udWxsCkBAIC0xLDIzICswLDAgQEAKLVVwc3RyZWFtLVN0YXR1czogUGVuZGluZwotCi1UYWtlbiBmcm9tIGh0dHA6Ly9nY2MuZ251Lm9yZy9tbC9nY2MtcGF0Y2hlcy8yMDE0LTA0L21zZzAyMDY0Lmh0bWwKLQotMjAxNC0wNC0zMCAgQ2VzYXIgUGhpbGlwcGlkaXMgIDxjZXNhckBjb2Rlc291cmNlcnkuY29tPgotCi0JZ2NjLwotCSogZHdhcmYyY2ZpLmMgKGR3Zl9yZWdubyk6IERvbid0IGFzc2VydCByZWcgaXMgYSBwc2V1ZG8KLQlyZWdpc3Rlci4KLQkKLQotZGlmZiAtLWdpdCBhL2djYy9kd2FyZjJjZmkuYyBiL2djYy9kd2FyZjJjZmkuYwotaW5kZXggNDE4MDg5MC4uNDBlZjBlMiAxMDA2NDQKLS0tLSBhL2djYy9kd2FyZjJjZmkuYwotKysrIGIvZ2NjL2R3YXJmMmNmaS5jCi1AQCAtOTA2LDcgKzkwNiw2IEBAIG5vdGljZV9laF90aHJvdyAocnR4IGluc24pCi0gc3RhdGljIGlubGluZSB1bnNpZ25lZAotIGR3Zl9yZWdubyAoY29uc3RfcnR4IHJlZykKLSB7Ci0tICBnY2NfYXNzZXJ0IChSRUdOTyAocmVnKSA8IEZJUlNUX1BTRVVET19SRUdJU1RFUik7Ci0gICByZXR1cm4gRFdBUkZfRlJBTUVfUkVHTlVNIChSRUdOTyAocmVnKSk7Ci0gfQotIApkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTQuOS8wMDUyLUFkZC10YXJnZXQtaG9vay10by1vdmVycmlkZS1EV0FSRjItZnJhbWUtcmVnaXN0ZXItc2kucGF0Y2ggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNC45LzAwNTItQWRkLXRhcmdldC1ob29rLXRvLW92ZXJyaWRlLURXQVJGMi1mcmFtZS1yZWdpc3Rlci1zaS5wYXRjaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjY5NThiMy4uMDAwMDAwMAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNC45LzAwNTItQWRkLXRhcmdldC1ob29rLXRvLW92ZXJyaWRlLURXQVJGMi1mcmFtZS1yZWdpc3Rlci1zaS5wYXRjaAorKysgL2Rldi9udWxsCkBAIC0xLDEzOCArMCwwIEBACi1Gcm9tIGQ2MjYyOTdlODdlMTkyNTFhMjg0ZWExZTkzNjBlODMxYjQ4OTk5Y2EgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCi1Gcm9tOiBtcGYgPG1wZkAxMzhiYzc1ZC0wZDA0LTA0MTAtOTYxZi04MmVlNzJiMDU0YTQ+Ci1EYXRlOiBUaHUsIDQgU2VwIDIwMTQgMDg6MzI6MDUgKzAwMDAKLVN1YmplY3Q6IFtQQVRDSF0gQWRkIHRhcmdldCBob29rIHRvIG92ZXJyaWRlIERXQVJGMiBmcmFtZSByZWdpc3RlciBzaXplCi0KLWdjYy8KLQotCSogdGFyZ2V0LmRlZiAoVEFSR0VUX0RXQVJGX0ZSQU1FX1JFR19NT0RFKTogTmV3IHRhcmdldCBob29rLgotCSogdGFyZ2hvb2tzLmMgKGRlZmF1bHRfZHdhcmZfZnJhbWVfcmVnX21vZGUpOiBOZXcgZnVuY3Rpb24uCi0JKiB0YXJnaG9va3MuaCAoZGVmYXVsdF9kd2FyZl9mcmFtZV9yZWdfbW9kZSk6IE5ldyBwcm90b3R5cGUuCi0JKiBkb2MvdG0udGV4aS5pbiAoVEFSR0VUX0RXQVJGX0ZSQU1FX1JFR19NT0RFKTogRG9jdW1lbnQuCi0JKiBkb2MvdG0udGV4aTogUmVnZW5lcmF0ZS4KLQkqIGR3YXJmMmNmaS5jIChleHBhbmRfYnVpbHRpbl9pbml0X2R3YXJmX3JlZ19zaXplcyk6IEFic3RyYWN0IG1vZGUKLQlzZWxlY3Rpb24gbG9naWMgdG8gZGVmYXVsdF9kd2FyZl9mcmFtZV9yZWdfbW9kZS4KLQotCi0KLWdpdC1zdm4taWQ6IHN2bitzc2g6Ly9nY2MuZ251Lm9yZy9zdm4vZ2NjL3RydW5rQDIxNDg5OCAxMzhiYzc1ZC0wZDA0LTA0MTAtOTYxZi04MmVlNzJiMDU0YTQKLQotU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KLVVwc3RyZWFtLVN0YXR1czogQmFja3BvcnQgW2djYyA1LjBdCi0KLS0tLQotIGdjYy9DaGFuZ2VMb2cgICAgICB8IDEwICsrKysrKysrKysKLSBnY2MvZG9jL3RtLnRleGkgICAgfCAgNyArKysrKysrCi0gZ2NjL2RvYy90bS50ZXhpLmluIHwgIDIgKysKLSBnY2MvZHdhcmYyY2ZpLmMgICAgfCAgNCArLS0tCi0gZ2NjL3RhcmdldC5kZWYgICAgIHwgMTEgKysrKysrKysrKysKLSBnY2MvdGFyZ2hvb2tzLmMgICAgfCAxMyArKysrKysrKysrKysrCi0gZ2NjL3Rhcmdob29rcy5oICAgIHwgIDEgKwotIDcgZmlsZXMgY2hhbmdlZCwgNDUgaW5zZXJ0aW9ucygrKSwgMyBkZWxldGlvbnMoLSkKLQotSW5kZXg6IGdjYy00LjkuMi9nY2MvZG9jL3RtLnRleGkKLT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tLSBnY2MtNC45LjIub3JpZy9nY2MvZG9jL3RtLnRleGkKLSsrKyBnY2MtNC45LjIvZ2NjL2RvYy90bS50ZXhpCi1AQCAtOTAxNyw2ICs5MDE3LDEzIEBAIHJlZ2lzdGVyIGluIER3YXJmLiAgT3RoZXJ3aXNlLCB0aGlzIGhvb2sKLSBJZiBub3QgZGVmaW5lZCwgdGhlIGRlZmF1bHQgaXMgdG8gcmV0dXJuIEBjb2Rle05VTExfUlRYfS4KLSBAZW5kIGRlZnR5cGVmbgotIAotK0BkZWZ0eXBlZm4ge1RhcmdldCBIb29rfSB7ZW51bSBtYWNoaW5lX21vZGV9IFRBUkdFVF9EV0FSRl9GUkFNRV9SRUdfTU9ERSAoaW50IEB2YXJ7cmVnbm99KQotK0dpdmVuIGEgcmVnaXN0ZXIsIHRoaXMgaG9vayBzaG91bGQgcmV0dXJuIHRoZSBtb2RlIHdoaWNoIHRoZQotK2NvcnJlc3BvbmRpbmcgRHdhcmYgZnJhbWUgcmVnaXN0ZXIgc2hvdWxkIGhhdmUuICBUaGlzIGlzIG5vcm1hbGx5Ci0rdXNlZCB0byByZXR1cm4gYSBzbWFsbGVyIG1vZGUgdGhhbiB0aGUgcmF3IG1vZGUgdG8gcHJldmVudCBjYWxsCi0rY2xvYmJlcmVkIHBhcnRzIG9mIGEgcmVnaXN0ZXIgYWx0ZXJpbmcgdGhlIGZyYW1lIHJlZ2lzdGVyIHNpemUKLStAZW5kIGRlZnR5cGVmbgotKwotIEBkZWZ0eXBlZm4ge1RhcmdldCBIb29rfSB2b2lkIFRBUkdFVF9JTklUX0RXQVJGX1JFR19TSVpFU19FWFRSQSAodHJlZSBAdmFye2FkZHJlc3N9KQotIElmIHNvbWUgcmVnaXN0ZXJzIGFyZSByZXByZXNlbnRlZCBpbiBEd2FyZi0yIHVud2luZCBpbmZvcm1hdGlvbiBpbgotIG11bHRpcGxlIHBpZWNlcywgZGVmaW5lIHRoaXMgaG9vayB0byBmaWxsIGluIGluZm9ybWF0aW9uIGFib3V0IHRoZQotSW5kZXg6IGdjYy00LjkuMi9nY2MvZG9jL3RtLnRleGkuaW4KLT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tLSBnY2MtNC45LjIub3JpZy9nY2MvZG9jL3RtLnRleGkuaW4KLSsrKyBnY2MtNC45LjIvZ2NjL2RvYy90bS50ZXhpLmluCi1AQCAtNjc0NSw2ICs2NzQ1LDggQEAgdGhlIHRhcmdldCBzdXBwb3J0cyBEV0FSRiAyIGZyYW1lIHVud2luZAotIAotIEBob29rIFRBUkdFVF9EV0FSRl9SRUdJU1RFUl9TUEFOCi0gCi0rQGhvb2sgVEFSR0VUX0RXQVJGX0ZSQU1FX1JFR19NT0RFCi0rCi0gQGhvb2sgVEFSR0VUX0lOSVRfRFdBUkZfUkVHX1NJWkVTX0VYVFJBCi0gCi0gQGhvb2sgVEFSR0VUX0FTTV9UVFlQRQotSW5kZXg6IGdjYy00LjkuMi9nY2MvZHdhcmYyY2ZpLmMKLT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tLSBnY2MtNC45LjIub3JpZy9nY2MvZHdhcmYyY2ZpLmMKLSsrKyBnY2MtNC45LjIvZ2NjL2R3YXJmMmNmaS5jCi1AQCAtMjcxLDExICsyNzEsOSBAQCBleHBhbmRfYnVpbHRpbl9pbml0X2R3YXJmX3JlZ19zaXplcyAodHJlCi0gICAgICAgaWYgKHJudW0gPCBEV0FSRl9GUkFNRV9SRUdJU1RFUlMpCi0gCXsKLSAJICBIT1NUX1dJREVfSU5UIG9mZnNldCA9IHJudW0gKiBHRVRfTU9ERV9TSVpFIChtb2RlKTsKLS0JICBlbnVtIG1hY2hpbmVfbW9kZSBzYXZlX21vZGUgPSByZWdfcmF3X21vZGVbaV07Ci0gCSAgSE9TVF9XSURFX0lOVCBzaXplOwotKwkgIGVudW0gbWFjaGluZV9tb2RlIHNhdmVfbW9kZSA9IHRhcmdldG0uZHdhcmZfZnJhbWVfcmVnX21vZGUgKGkpOwotIAotLQkgIGlmIChIQVJEX1JFR05PX0NBTExfUEFSVF9DTE9CQkVSRUQgKGksIHNhdmVfbW9kZSkpCi0tCSAgICBzYXZlX21vZGUgPSBjaG9vc2VfaGFyZF9yZWdfbW9kZSAoaSwgMSwgdHJ1ZSk7Ci0gCSAgaWYgKGRudW0gPT0gRFdBUkZfRlJBTUVfUkVUVVJOX0NPTFVNTikKLSAJICAgIHsKLSAJICAgICAgaWYgKHNhdmVfbW9kZSA9PSBWT0lEbW9kZSkKLUluZGV4OiBnY2MtNC45LjIvZ2NjL3RhcmdldC5kZWYKLT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tLSBnY2MtNC45LjIub3JpZy9nY2MvdGFyZ2V0LmRlZgotKysrIGdjYy00LjkuMi9nY2MvdGFyZ2V0LmRlZgotQEAgLTMyMTgsNiArMzIxOCwxNyBAQCBJZiBub3QgZGVmaW5lZCwgdGhlIGRlZmF1bHQgaXMgdG8gcmV0dXJuCi0gIHJ0eCwgKHJ0eCByZWcpLAotICBob29rX3J0eF9ydHhfbnVsbCkKLSAKLSsvKiBHaXZlbiBhIHJlZ2lzdGVyIHJldHVybiB0aGUgbW9kZSBvZiB0aGUgY29ycmVzcG9uZGluZyBEV0FSRiBmcmFtZQotKyAgIHJlZ2lzdGVyLiAgKi8KLStERUZIT09LCi0rKGR3YXJmX2ZyYW1lX3JlZ19tb2RlLAotKyAiR2l2ZW4gYSByZWdpc3RlciwgdGhpcyBob29rIHNob3VsZCByZXR1cm4gdGhlIG1vZGUgd2hpY2ggdGhlXG5cCi0rY29ycmVzcG9uZGluZyBEd2FyZiBmcmFtZSByZWdpc3RlciBzaG91bGQgaGF2ZS4gIFRoaXMgaXMgbm9ybWFsbHlcblwKLSt1c2VkIHRvIHJldHVybiBhIHNtYWxsZXIgbW9kZSB0aGFuIHRoZSByYXcgbW9kZSB0byBwcmV2ZW50IGNhbGxcblwKLStjbG9iYmVyZWQgcGFydHMgb2YgYSByZWdpc3RlciBhbHRlcmluZyB0aGUgZnJhbWUgcmVnaXN0ZXIgc2l6ZSIsCi0rIGVudW0gbWFjaGluZV9tb2RlLCAoaW50IHJlZ25vKSwKLSsgZGVmYXVsdF9kd2FyZl9mcmFtZV9yZWdfbW9kZSkKLSsKLSAvKiBJZiBleHBhbmRfYnVpbHRpbl9pbml0X2R3YXJmX3JlZ19zaXplcyBuZWVkcyB0byBmaWxsIGluIHRhYmxlCi0gICAgZW50cmllcyBub3QgY29ycmVzcG9uZGluZyBkaXJlY3RseSB0byByZWdpc3RlcnMgYmVsb3cKLSAgICBGSVJTVF9QU0VVRE9fUkVHSVNURVIsIHRoaXMgaG9vayBzaG91bGQgZ2VuZXJhdGUgdGhlIG5lY2Vzc2FyeQotSW5kZXg6IGdjYy00LjkuMi9nY2MvdGFyZ2hvb2tzLmMKLT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tLSBnY2MtNC45LjIub3JpZy9nY2MvdGFyZ2hvb2tzLmMKLSsrKyBnY2MtNC45LjIvZ2NjL3Rhcmdob29rcy5jCi1AQCAtMTQzOCw2ICsxNDM4LDE5IEBAIGRlZmF1bHRfZGVidWdfdW53aW5kX2luZm8gKHZvaWQpCi0gICByZXR1cm4gVUlfTk9ORTsKLSB9Ci0gCi0rLyogRGV0ZXJtaW5lIHRoZSBjb3JyZWN0IG1vZGUgZm9yIGEgRHdhcmYgZnJhbWUgcmVnaXN0ZXIgdGhhdCByZXByZXNlbnRzCi0rICAgcmVnaXN0ZXIgUkVHTk8uICAqLwotKwotK2VudW0gbWFjaGluZV9tb2RlCi0rZGVmYXVsdF9kd2FyZl9mcmFtZV9yZWdfbW9kZSAoaW50IHJlZ25vKQotK3sKLSsgIGVudW0gbWFjaGluZV9tb2RlIHNhdmVfbW9kZSA9IHJlZ19yYXdfbW9kZVtyZWdub107Ci0rCi0rICBpZiAoSEFSRF9SRUdOT19DQUxMX1BBUlRfQ0xPQkJFUkVEIChyZWdubywgc2F2ZV9tb2RlKSkKLSsgICAgc2F2ZV9tb2RlID0gY2hvb3NlX2hhcmRfcmVnX21vZGUgKHJlZ25vLCAxLCB0cnVlKTsKLSsgIHJldHVybiBzYXZlX21vZGU7Ci0rfQotKwotIC8qIFRvIGJlIHVzZWQgYnkgdGFyZ2V0cyB3aGVyZSByZWdfcmF3X21vZGUgZG9lc24ndCByZXR1cm4gdGhlIHJpZ2h0Ci0gICAgbW9kZSBmb3IgcmVnaXN0ZXJzIHVzZWQgaW4gYXBwbHlfYnVpbHRpbl9yZXR1cm4gYW5kIGFwcGx5X2J1aWx0aW5fYXJnLiAgKi8KLSAKLUluZGV4OiBnY2MtNC45LjIvZ2NjL3Rhcmdob29rcy5oCi09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLS0gZ2NjLTQuOS4yLm9yaWcvZ2NjL3Rhcmdob29rcy5oCi0rKysgZ2NjLTQuOS4yL2djYy90YXJnaG9va3MuaAotQEAgLTE5NCw2ICsxOTQsNyBAQCBleHRlcm4gaW50IGRlZmF1bHRfbGFiZWxfYWxpZ25fbWF4X3NraXAKLSBleHRlcm4gaW50IGRlZmF1bHRfanVtcF9hbGlnbl9tYXhfc2tpcCAocnR4KTsKLSBleHRlcm4gc2VjdGlvbiAqIGRlZmF1bHRfZnVuY3Rpb25fc2VjdGlvbih0cmVlIGRlY2wsIGVudW0gbm9kZV9mcmVxdWVuY3kgZnJlcSwKLSAJCQkJCSAgYm9vbCBzdGFydHVwLCBib29sIGV4aXQpOwotK2V4dGVybiBlbnVtIG1hY2hpbmVfbW9kZSBkZWZhdWx0X2R3YXJmX2ZyYW1lX3JlZ19tb2RlIChpbnQpOwotIGV4dGVybiBlbnVtIG1hY2hpbmVfbW9kZSBkZWZhdWx0X2dldF9yZWdfcmF3X21vZGUgKGludCk7Ci0gCi0gZXh0ZXJuIHZvaWQgKmRlZmF1bHRfZ2V0X3BjaF92YWxpZGl0eSAoc2l6ZV90ICopOwpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTQuOS8wMDUzLWdjYy1maXgtc2VnZmF1bHQtZnJvbS1jYWxsaW5nLWZyZWUtb24tbm9uLW1hbGxvYy1kLWEucGF0Y2ggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNC45LzAwNTMtZ2NjLWZpeC1zZWdmYXVsdC1mcm9tLWNhbGxpbmctZnJlZS1vbi1ub24tbWFsbG9jLWQtYS5wYXRjaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjNiNDQ1Yy4uMDAwMDAwMAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNC45LzAwNTMtZ2NjLWZpeC1zZWdmYXVsdC1mcm9tLWNhbGxpbmctZnJlZS1vbi1ub24tbWFsbG9jLWQtYS5wYXRjaAorKysgL2Rldi9udWxsCkBAIC0xLDY2ICswLDAgQEAKLUZyb20gYTIyYTIyMmM4ZjkyOTlmNmMwN2EwMjc0Mzg4YWRlN2Q0YWI4YzI4ZCBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKLUZyb206IFBhdWwgR29ydG1ha2VyIDxwYXVsLmdvcnRtYWtlckB3aW5kcml2ZXIuY29tPgotRGF0ZTogRnJpLCAyMCBKdW4gMjAxNCAxNjo0MTowOCAtMDQwMAotU3ViamVjdDogW1BBVENIXSBnY2M6IGZpeCBzZWdmYXVsdCBmcm9tIGNhbGxpbmcgZnJlZSBvbiBub24tbWFsbG9jJ2QgYXJlYQotCi1XZSBzZWUgdGhlIGZvbGxvd2luZyBvbiBhIDMyYml0IGdjYyBpbnN0YWxsZWQgb24gNjQgYml0IGhvc3Q6Ci0KLSAgUmVhZGluZyBzeW1ib2xzIGZyb20gLi9pNTg2LXBva3ltbGxpYjMyLWxpbnV4LWdjYy4uLmRvbmUuCi0gIChnZGIpIHJ1bgotICBTdGFydGluZyBwcm9ncmFtOiB4ODYtcG9reW1sbGliMzItbGludXgvbGliMzItZ2NjLzQuOS4wLXIwL2ltYWdlL3Vzci9iaW4vaTU4Ni1wb2t5bWxsaWIzMi1saW51eC1nY2MKLQotICBQcm9ncmFtIHJlY2VpdmVkIHNpZ25hbCBTSUdTRUdWLCBTZWdtZW50YXRpb24gZmF1bHQuCi0gIDB4ZjdlOTU3ZTAgaW4gZnJlZSAoKSBmcm9tIC9saWIvaTM4Ni1saW51eC1nbnUvbGliYy5zby42Ci0gIChnZGIpIGJ0Ci0gICMwICAweGY3ZTk1N2UwIGluIGZyZWUgKCkgZnJvbSAvbGliL2kzODYtbGludXgtZ251L2xpYmMuc28uNgotICAjMSAgMHgwODA0YjczYyBpbiBzZXRfbXVsdGlsaWJfZGlyICgpIGF0IGdjYy00LjkuMC9nY2MvZ2NjLmM6NzgyNwotICAjMiAgbWFpbiAoYXJnYz0xLCBhcmd2PTB4ZmZmZmQ1MDQpIGF0IGdjYy00LjkuMC9nY2MvZ2NjLmM6NjY4OAotICAoZ2RiKQotCi1UaGUgcHJvYmxlbSBhcmlzZXMgYmVjYXVzZSB3ZSBjb25kaXRpb25hbGx5IGFzc2lnbiB0aGUgcG9pbnRlciB3ZQotZXZlbnR1YWxseSBmcmVlLCBhbmQgdGhlIGNvbmRpdGlvbmFsIG1heSBhc3NpZ24gdGhlIHBvaW50ZXIgdG8gdGhlCi1ub24tbWFsbG9jJ2QgaW50ZXJuYWwgc3RyaW5nICIuIiB3aGljaCBmYWlscyB3aGVuIHdlIGZyZWUgaXQgaGVyZToKLQotICAgaWYgKG11bHRpbGliX2RpciA9PSBOVUxMICYmIG11bHRpbGliX29zX2RpciAhPSBOVUxMCi0gICAgICAgJiYgc3RyY21wIChtdWx0aWxpYl9vc19kaXIsICIuIikgPT0gMCkKLSAgICAgewotICAgICAgIGZyZWUgKENPTlNUX0NBU1QgKGNoYXIgKiwgbXVsdGlsaWJfb3NfZGlyKSk7Ci0gICAgICAgLi4uCi0KLUFzIHN1Z2dlc3RlZCBieSBKYWt1YiwgZW5zdXJlIHRoZSAiLiIgY2FzZSBpcyBhbHNvIG1hbGxvYydkIHZpYQoteHN0cmR1cCgpIGFuZCBoZW5jZSB0aGUgcG9pbnRlciBmb3IgdGhlICIuIiBjYXNlIGNhbiBiZSBmcmVlZC4KLQotQ2M6IEpha3ViIEplbGluZWsgPGpha3ViQHJlZGhhdC5jb20+Ci1DYzogSmVmZiBMYXcgPGxhd0ByZWRoYXQuY29tPgotQ2M6IE1hdHRoaWFzIEtsb3NlIDxkb2tvQHVidW50dS5jb20+Ci1DQzogVG9iaWFzIEJ1cm51cyA8YnVybnVzQG5ldC1iLmRlPgotVXBzdHJlYW0tU3RhdHVzOiBBY2NlcHRlZCBbIGh0dHBzOi8vZ2NjLmdudS5vcmcvbWwvZ2NjLXBhdGNoZXMvMjAxNC0wNi9tc2cwMjA2OS5odG1sIF0KLVNpZ25lZC1vZmYtYnk6IFBhdWwgR29ydG1ha2VyIDxwYXVsLmdvcnRtYWtlckB3aW5kcml2ZXIuY29tPgotCi1kaWZmIC0tZ2l0IGEvZ2NjL2djYy5jIGIvZ2NjL2djYy5jCi1pbmRleCA5YWMxOGU2MGQ4MDEuLjE2OGFjZjdlYjBjOSAxMDA2NDQKLS0tLSBhL2djYy9nY2MuYwotKysrIGIvZ2NjL2djYy5jCi1AQCAtNzc5MCwxMCArNzc5MCwxNSBAQCBzZXRfbXVsdGlsaWJfZGlyICh2b2lkKQotIAkJcTIrKzsKLSAJICAgICAgaWYgKCpxMiA9PSAnOicpCi0gCQltbF9lbmQgPSBxMjsKLS0JICAgICAgbmV3X211bHRpbGliX29zX2RpciA9IFhORVdWRUMgKGNoYXIsIG1sX2VuZCAtIHEpOwotLQkgICAgICBtZW1jcHkgKG5ld19tdWx0aWxpYl9vc19kaXIsIHEgKyAxLCBtbF9lbmQgLSBxIC0gMSk7Ci0tCSAgICAgIG5ld19tdWx0aWxpYl9vc19kaXJbbWxfZW5kIC0gcSAtIDFdID0gJ1wwJzsKLS0JICAgICAgbXVsdGlsaWJfb3NfZGlyID0gKm5ld19tdWx0aWxpYl9vc19kaXIgPyBuZXdfbXVsdGlsaWJfb3NfZGlyIDogIi4iOwotKwkgICAgICBpZiAobWxfZW5kIC0gcSA9PSAxKQotKwkJbXVsdGlsaWJfb3NfZGlyID0geHN0cmR1cCAoIi4iKTsKLSsJICAgICAgZWxzZQotKwkJewotKwkJICBuZXdfbXVsdGlsaWJfb3NfZGlyID0gWE5FV1ZFQyAoY2hhciwgbWxfZW5kIC0gcSk7Ci0rCQkgIG1lbWNweSAobmV3X211bHRpbGliX29zX2RpciwgcSArIDEsIG1sX2VuZCAtIHEgLSAxKTsKLSsJCSAgbmV3X211bHRpbGliX29zX2RpclttbF9lbmQgLSBxIC0gMV0gPSAnXDAnOwotKwkJICBtdWx0aWxpYl9vc19kaXIgPSBuZXdfbXVsdGlsaWJfb3NfZGlyOwotKwkJfQotIAotIAkgICAgICBpZiAocTIgPCBlbmQgJiYgKnEyID09ICc6JykKLSAJCXsKLS0tIAotMS45LjIKLQpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTQuOS8wMDU0LWdjYy1NYWtlZmlsZS5pbi1maXgtcGFyYWxsZWwtYnVpbGRpbmctZmFpbHVyZS5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy00LjkvMDA1NC1nY2MtTWFrZWZpbGUuaW4tZml4LXBhcmFsbGVsLWJ1aWxkaW5nLWZhaWx1cmUucGF0Y2gKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDdlOGVmYTEuLjAwMDAwMDAKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTQuOS8wMDU0LWdjYy1NYWtlZmlsZS5pbi1maXgtcGFyYWxsZWwtYnVpbGRpbmctZmFpbHVyZS5wYXRjaAorKysgL2Rldi9udWxsCkBAIC0xLDYxICswLDAgQEAKLWdjYy9NYWtlZmlsZS5pbjogZml4IHBhcmFsbGVsIGJ1aWxkaW5nIGZhaWx1cmUKLQotVGhlIGdjYy1hci5vLCBnY2Mtbm0ubywgZ2NjLXJhbmxpYi5vIGFuZCBlcnJvcnMubyBpbmNsdWRlZAotY29uZmlnLmggd2hpY2ggd2FzIGEgZ2VuZXJhdGVkIGZpbGUuIEJ1dCBubyBleHBsaWNpdHkgcnVsZQotdG8gY2xhcmlmeSB0aGUgZGVwZW5kZW5jeS4gVGhlcmUgd2FzIHBvdGVudGlhbCBidWlsZGluZwotZmFpbHVyZSB3aGlsZSBwYXJhbGxlbCBtYWtlLgotCi1Gb3IgZ2NjLWFyLm8sIGdjYy1ubS5vIGFuZCBnY2MtcmFubGliLm8sIHRoZXkgd2VyZSBjb21waWxlZCBmcm9tIG9uZSBDCi1zb3VyY2UgZmlsZSBnY2MtYXIuYywgd2UgYWRkIHRoZW0gdG8gQUxMX0hPU1RfQkFDS0VORF9PQkpTLCBzbyB0aGUKLSckKEFMTF9IT1NUX09CSlMpIDogfCAkKGdlbmVyYXRlZF9maWxlcyknIHJ1bGUgY291bGQgd29yayBmb3IgdGhlc2UKLW9iamVjdHMuCi0KLUZvciBlcnJvcnMubywgaXQgaXMgcGFydCBvZiBnZW5ndHlwZSwgYW5kIHRoZSBnZW5ndHlwZSBnZW5lcmF0b3IgcHJvZ3JhbQotaXMgc3BlY2lhbDogVHdvIHZlcnNpb25zIGFyZSBidWlsdC4gT25lIGlzIGZvciB0aGUgYnVpbGQgbWFjaGluZSwgYW5kIG9uZQotaXMgZm9yIHRoZSBob3N0LiBXZSByZWZlcmVkIHdoYXQgZ2VuZ3R5cGUtcGFyc2UubyBkaWQgKHdoaWNoIGFsc28gaXMgcGFydAotb2YgZ2VuZ3R5cGUpLgotCi1bR0NDICM2MTg5OV0KLWh0dHBzOi8vZ2NjLmdudS5vcmcvYnVnemlsbGEvc2hvd19idWcuY2dpP2lkPTYxODk5Ci0KLVVwc3RyZWFtLVN0YXR1czogU3VibWl0dGVkIFtnY2MtcGF0Y2hlc0BnY2MuZ251Lm9yZ10KLQotU2lnbmVkLW9mZi1ieTogSG9uZ3h1IEppYSA8aG9uZ3h1LmppYUB3aW5kcml2ZXIuY29tPgotLS0tCi0gZ2NjL01ha2VmaWxlLmluIHwgNyArKysrKystCi0gMSBmaWxlIGNoYW5nZWQsIDYgaW5zZXJ0aW9ucygrKSwgMSBkZWxldGlvbigtKQotCi1kaWZmIC0tZ2l0IGEvZ2NjL01ha2VmaWxlLmluIGIvZ2NjL01ha2VmaWxlLmluCi1pbmRleCA2NDc1Y2JhLi41NmU1MGJiIDEwMDY0NAotLS0tIGEvZ2NjL01ha2VmaWxlLmluCi0rKysgYi9nY2MvTWFrZWZpbGUuaW4KLUBAIC0xNDgxLDEzICsxNDgxLDE2IEBAIE9CSlMtbGliY29tbW9uLXRhcmdldCA9ICQoY29tbW9uX291dF9vYmplY3RfZmlsZSkgcHJlZml4Lm8gcGFyYW1zLm8gXAotIAlvcHRzLm8gb3B0cy1jb21tb24ubyBvcHRpb25zLm8gdmVjLm8gaG9va3MubyBjb21tb24vY29tbW9uLXRhcmdob29rcy5vIFwKLSAJaGFzaC10YWJsZS5vIGZpbGUtZmluZC5vCi0gCi0rIyBPYmplY3RzIGNvbXBpbGVkIGZyb20gb25lIEMgc291cmNlIGZpbGUgZ2NjLWFyLmMKLStPQkpTLWdjYy1hciA9IGdjYy1hci5vIGdjYy1ubS5vIGdjYy1yYW5saWIubwotKwotICMgVGhpcyBsaXN0cyBhbGwgaG9zdCBvYmplY3RzIGZvciB0aGUgZnJvbnQgZW5kcy4KLSBBTExfSE9TVF9GUk9OVEVORF9PQkpTID0gJChmb3JlYWNoIHYsJChDT05GSUdfTEFOR1VBR0VTKSwkKCQodilfT0JKUykpCi0gCi0gQUxMX0hPU1RfQkFDS0VORF9PQkpTID0gJChHQ0NfT0JKUykgJChPQkpTKSAkKE9CSlMtbGliY29tbW9uKSBcCi0gICAkKE9CSlMtbGliY29tbW9uLXRhcmdldCkgQFRSRUVCUk9XU0VSQCBtYWluLm8gYy1mYW1pbHkvY3Bwc3BlYy5vIFwKLSAgICQoQ09MTEVDVDJfT0JKUykgJChFWFRSQV9HQ0NfT0JKUykgJChHQ09WX09CSlMpICQoR0NPVl9EVU1QX09CSlMpIFwKLS0gIGx0by13cmFwcGVyLm8KLSsgIGx0by13cmFwcGVyLm8gJChPQkpTLWdjYy1hcikKLSAKLSAjIFRoaXMgbGlzdHMgYWxsIGhvc3Qgb2JqZWN0IGZpbGVzLCB3aGV0aGVyIHRoZXkgYXJlIGluY2x1ZGVkIGluIHRoaXMKLSAjIGNvbXBpbGF0aW9uIG9yIG5vdC4KLUBAIC0yNDM3LDYgKzI0NDAsOCBAQCBnZW5ndHlwZS1wYXJzZS5vOiAkKENPTkZJR19IKQotIENGTEFHUy1idWlsZC9nZW5ndHlwZS1wYXJzZS5vICs9IC1ER0VORVJBVE9SX0ZJTEUKLSBidWlsZC9nZW5ndHlwZS1wYXJzZS5vOiAkKEJDT05GSUdfSCkKLSAKLStlcnJvcnMubyA6ICQoQ09ORklHX0gpCi0rCi0gZ2VuZ3R5cGUtc3RhdGUubyBidWlsZC9nZW5ndHlwZS1zdGF0ZS5vOiBnZW5ndHlwZS1zdGF0ZS5jICQoU1lTVEVNX0gpIFwKLSAgIGdlbmd0eXBlLmggZXJyb3JzLmggZG91YmxlLWludC5oIHZlcnNpb24uaCAkKEhBU0hUQUJfSCkgJChPQlNUQUNLX0gpIFwKLSAgICQoWFJFR0VYX0gpCi0tLSAKLTEuOC4xLjIKLQpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTQuOS8wMDU1LWR3YXJmLXJlZy1wcm9jZXNzaW5nLWhlbHBlci5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy00LjkvMDA1NS1kd2FyZi1yZWctcHJvY2Vzc2luZy1oZWxwZXIucGF0Y2gKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDU1N2RhYjAuLjAwMDAwMDAKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTQuOS8wMDU1LWR3YXJmLXJlZy1wcm9jZXNzaW5nLWhlbHBlci5wYXRjaAorKysgL2Rldi9udWxsCkBAIC0xLDE0OCArMCwwIEBACi1Gcm9tIDRmZDM5ZjEzMjkzNzllMDBmOTU4Mzk0YWRkZTZiZTk2ZjBjYWYyMWYgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCi1Gcm9tOiBoYWlucXVlIDxoYWlucXVlQDEzOGJjNzVkLTBkMDQtMDQxMC05NjFmLTgyZWU3MmIwNTRhND4KLURhdGU6IEZyaSwgNSBEZWMgMjAxNCAxNjo1MzoyMiArMDAwMAotU3ViamVjdDogW1BBVENIXSAyMDE0LTEyLTA1ICBPbGl2aWVyIEhhaW5xdWUgIDxoYWlucXVlQGFkYWNvcmUuY29tPgotCi0gICAgICAgICogZHdhcmYyY2ZpLmMgKGluaXRfb25lX2R3YXJmX3JlZ19zaXplKTogTmV3IGhlbHBlciwgcHJvY2Vzc2luZwotICAgICAgICBvbmUgcGFydGljdWxhciByZWcgZm9yIGV4cGFuZF9idWlsdGluX2luaXRfZHdhcmZfcmVnX3NpemVzLgotICAgICAgICAoZXhwYW5kX2J1aWx0aW5faW5pdF9kd2FyZl9yZWdfc2l6ZXMpOiBSZXdvcmsgdG8gdXNlIGhlbHBlciBhbmQKLSAgICAgICAgYWNjb3VudCBmb3IgZHdhcmYgcmVnaXN0ZXIgc3BhbnMuCi0KLQotCi1naXQtc3ZuLWlkOiBzdm4rc3NoOi8vZ2NjLmdudS5vcmcvc3ZuL2djYy90cnVua0AyMTg0MjggMTM4YmM3NWQtMGQwNC0wNDEwLTk2MWYtODJlZTcyYjA1NGE0Ci0KLVNpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+Ci1VcHN0cmVhbS1TdGF0dXM6IEJhY2twb3J0IFtnY2MgNS4wXQotCi0tLS0KLSBnY2MvQ2hhbmdlTG9nICAgfCAgNyArKysrKwotIGdjYy9kd2FyZjJjZmkuYyB8IDk4ICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKy0tLS0tLS0tLS0tLQotIDIgZmlsZXMgY2hhbmdlZCwgODUgaW5zZXJ0aW9ucygrKSwgMjAgZGVsZXRpb25zKC0pCi0KLUluZGV4OiBnY2MtNC45LjIvZ2NjL2R3YXJmMmNmaS5jCi09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLS0gZ2NjLTQuOS4yLm9yaWcvZ2NjL2R3YXJmMmNmaS5jCi0rKysgZ2NjLTQuOS4yL2djYy9kd2FyZjJjZmkuYwotQEAgLTI1Miw3ICsyNTIsNTkgQEAgaW5pdF9yZXR1cm5fY29sdW1uX3NpemUgKGVudW0gbWFjaGluZV9tbwotIAkJICBnZW5faW50X21vZGUgKHNpemUsIG1vZGUpKTsKLSB9Ci0gCi0tLyogR2VuZXJhdGUgY29kZSB0byBpbml0aWFsaXplIHRoZSByZWdpc3RlciBzaXplIHRhYmxlLiAgKi8KLSsvKiBEYXRhc3RydWN0dXJlIHVzZWQgYnkgZXhwYW5kX2J1aWx0aW5faW5pdF9kd2FyZl9yZWdfc2l6ZXMgYW5kCi0rICAgaW5pdF9vbmVfZHdhcmZfcmVnX3NpemUgdG8gY29tbXVuaWNhdGUgb24gd2hhdCBoYXMgYmVlbiBkb25lIGJ5IHRoZQotKyAgIGxhdHRlci4gICovCi0rCi0rdHlwZWRlZiBzdHJ1Y3QKLSt7Ci0rICAvKiBXaGV0aGVyIHRoZSBkd2FyZiByZXR1cm4gY29sdW1uIHdhcyBpbml0aWFsaXplZC4gICovCi0rICBib29sIHdyb3RlX3JldHVybl9jb2x1bW47Ci0rCi0rICAvKiBGb3IgZWFjaCBoYXJkIHJlZ2lzdGVyIFJFR05PLCB3aGV0aGVyIGluaXRfb25lX2R3YXJmX3JlZ19zaXplCi0rICAgICB3YXMgZ2l2ZW4gUkVHTk8gdG8gcHJvY2VzcyBhbHJlYWR5LiAgKi8KLSsgIGJvb2wgcHJvY2Vzc2VkX3JlZ25vIFtGSVJTVF9QU0VVRE9fUkVHSVNURVJdOwotKwotK30gaW5pdF9vbmVfZHdhcmZfcmVnX3N0YXRlOwotKwotKy8qIEhlbHBlciBmb3IgZXhwYW5kX2J1aWx0aW5faW5pdF9kd2FyZl9yZWdfc2l6ZXMuICBHZW5lcmF0ZSBjb2RlIHRvCi0rICAgaW5pdGlhbGl6ZSB0aGUgZHdhcmYgcmVnaXN0ZXIgc2l6ZSB0YWJsZSBlbnRyeSBjb3JyZXNwb25kaW5nIHRvIHJlZ2lzdGVyCi0rICAgUkVHTk8gaW4gUkVHTU9ERS4gIFRBQkxFIGlzIHRoZSB0YWJsZSBiYXNlIGFkZHJlc3MsIFNMT1RNT0RFIGlzIHRoZSBtb2RlIHRvCi0rICAgdXNlIGZvciB0aGUgc2l6ZSBlbnRyeSB0byBpbml0aWFsaXplLCBhbmQgSU5JVF9TVEFURSBpcyB0aGUgY29tbXVuaWNhdGlvbgotKyAgIGRhdGFzdHJ1Y3R1cmUgY29udmV5aW5nIHdoYXQgd2UncmUgZG9pbmcgdG8gb3VyIGNhbGxlci4gICovCi0rCi0rc3RhdGljCi0rdm9pZCBpbml0X29uZV9kd2FyZl9yZWdfc2l6ZSAoaW50IHJlZ25vLCBtYWNoaW5lX21vZGUgcmVnbW9kZSwKLSsJCQkgICAgICBydHggdGFibGUsIG1hY2hpbmVfbW9kZSBzbG90bW9kZSwKLSsJCQkgICAgICBpbml0X29uZV9kd2FyZl9yZWdfc3RhdGUgKmluaXRfc3RhdGUpCi0rewotKyAgY29uc3QgdW5zaWduZWQgaW50IGRudW0gPSBEV0FSRl9GUkFNRV9SRUdOVU0gKHJlZ25vKTsKLSsgIGNvbnN0IHVuc2lnbmVkIGludCBybnVtID0gRFdBUkYyX0ZSQU1FX1JFR19PVVQgKGRudW0sIDEpOwotKwotKyAgY29uc3QgSE9TVF9XSURFX0lOVCBzbG90b2Zmc2V0ID0gcm51bSAqIEdFVF9NT0RFX1NJWkUgKHNsb3Rtb2RlKTsKLSsgIGNvbnN0IEhPU1RfV0lERV9JTlQgcmVnc2l6ZSA9IEdFVF9NT0RFX1NJWkUgKHJlZ21vZGUpOwotKwotKyAgaW5pdF9zdGF0ZS0+cHJvY2Vzc2VkX3JlZ25vW3JlZ25vXSA9IHRydWU7Ci0rCi0rICBpZiAocm51bSA+PSBEV0FSRl9GUkFNRV9SRUdJU1RFUlMpCi0rICAgIHJldHVybjsKLSsKLSsgIGlmIChkbnVtID09IERXQVJGX0ZSQU1FX1JFVFVSTl9DT0xVTU4pCi0rICAgIHsKLSsgICAgICBpZiAocmVnbW9kZSA9PSBWT0lEbW9kZSkKLSsJcmV0dXJuOwotKyAgICAgIGluaXRfc3RhdGUtPndyb3RlX3JldHVybl9jb2x1bW4gPSB0cnVlOwotKyAgICB9Ci0rCi0rICBpZiAoc2xvdG9mZnNldCA8IDApCi0rICAgIHJldHVybjsKLSsKLSsgIGVtaXRfbW92ZV9pbnNuIChhZGp1c3RfYWRkcmVzcyAodGFibGUsIHNsb3Rtb2RlLCBzbG90b2Zmc2V0KSwKLSsJCSAgZ2VuX2ludF9tb2RlIChyZWdzaXplLCBzbG90bW9kZSkpOwotK30KLSsKLSsvKiBHZW5lcmF0ZSBjb2RlIHRvIGluaXRpYWxpemUgdGhlIGR3YXJmIHJlZ2lzdGVyIHNpemUgdGFibGUgbG9jYXRlZAotKyAgIGF0IHRoZSBwcm92aWRlZCBBRERSRVNTLiAgKi8KLSAKLSB2b2lkCi0gZXhwYW5kX2J1aWx0aW5faW5pdF9kd2FyZl9yZWdfc2l6ZXMgKHRyZWUgYWRkcmVzcykKLUBAIC0yNjEsMzUgKzMxMyw0MCBAQCBleHBhbmRfYnVpbHRpbl9pbml0X2R3YXJmX3JlZ19zaXplcyAodHJlCi0gICBlbnVtIG1hY2hpbmVfbW9kZSBtb2RlID0gVFlQRV9NT0RFIChjaGFyX3R5cGVfbm9kZSk7Ci0gICBydHggYWRkciA9IGV4cGFuZF9ub3JtYWwgKGFkZHJlc3MpOwotICAgcnR4IG1lbSA9IGdlbl9ydHhfTUVNIChCTEttb2RlLCBhZGRyKTsKLS0gIGJvb2wgd3JvdGVfcmV0dXJuX2NvbHVtbiA9IGZhbHNlOwotKwotKyAgaW5pdF9vbmVfZHdhcmZfcmVnX3N0YXRlIGluaXRfc3RhdGU7Ci0rCi0rICBtZW1zZXQgKChjaGFyICopJmluaXRfc3RhdGUsIDAsIHNpemVvZiAoaW5pdF9zdGF0ZSkpOwotIAotICAgZm9yIChpID0gMDsgaSA8IEZJUlNUX1BTRVVET19SRUdJU1RFUjsgaSsrKQotICAgICB7Ci0tICAgICAgdW5zaWduZWQgaW50IGRudW0gPSBEV0FSRl9GUkFNRV9SRUdOVU0gKGkpOwotLSAgICAgIHVuc2lnbmVkIGludCBybnVtID0gRFdBUkYyX0ZSQU1FX1JFR19PVVQgKGRudW0sIDEpOwotLQotLSAgICAgIGlmIChybnVtIDwgRFdBUkZfRlJBTUVfUkVHSVNURVJTKQotLQl7Ci0tCSAgSE9TVF9XSURFX0lOVCBvZmZzZXQgPSBybnVtICogR0VUX01PREVfU0laRSAobW9kZSk7Ci0tCSAgSE9TVF9XSURFX0lOVCBzaXplOwotLQkgIGVudW0gbWFjaGluZV9tb2RlIHNhdmVfbW9kZSA9IHRhcmdldG0uZHdhcmZfZnJhbWVfcmVnX21vZGUgKGkpOwotKyAgICAgIG1hY2hpbmVfbW9kZSBzYXZlX21vZGU7Ci0rICAgICAgcnR4IHNwYW47Ci0gCi0tCSAgaWYgKGRudW0gPT0gRFdBUkZfRlJBTUVfUkVUVVJOX0NPTFVNTikKLSsgICAgICAvKiBObyBwb2ludCBpbiBwcm9jZXNzaW5nIGEgcmVnaXN0ZXIgbXVsdGlwbGUgdGltZXMuICBUaGlzIGNvdWxkIGhhcHBlbgotKyAgICAgICAgd2l0aCByZWdpc3RlciBzcGFucywgZS5nLiB3aGVuIGEgcmVnIGlzIGZpcnN0IHByb2Nlc3NlZCBhcyBhIHBpZWNlIG9mCi0rICAgICAgICBhIHNwYW4sIHRoZW4gYXMgYSByZWdpc3RlciBvbiBpdHMgb3duIGxhdGVyIG9uLiAgKi8KLSsKLSsgICAgICBpZiAoaW5pdF9zdGF0ZS5wcm9jZXNzZWRfcmVnbm9baV0pCi0rICAgICAgIGNvbnRpbnVlOwotKwotKyAgICAgIHNhdmVfbW9kZSA9IHRhcmdldG0uZHdhcmZfZnJhbWVfcmVnX21vZGUgKGkpOwotKyAgICAgIHNwYW4gPSB0YXJnZXRtLmR3YXJmX3JlZ2lzdGVyX3NwYW4gKGdlbl9ydHhfUkVHIChzYXZlX21vZGUsIGkpKTsKLSsgICAgICBpZiAoIXNwYW4pCi0rICAgICAgIGluaXRfb25lX2R3YXJmX3JlZ19zaXplIChpLCBzYXZlX21vZGUsIG1lbSwgbW9kZSwgJmluaXRfc3RhdGUpOwotKyAgICAgIGVsc2UKLSsgICAgICAgewotKyAgICAgICAgIGZvciAoaW50IHNpID0gMDsgc2kgPCBYVkVDTEVOIChzcGFuLCAwKTsgc2krKykKLSAJICAgIHsKLS0JICAgICAgaWYgKHNhdmVfbW9kZSA9PSBWT0lEbW9kZSkKLS0JCWNvbnRpbnVlOwotLQkgICAgICB3cm90ZV9yZXR1cm5fY29sdW1uID0gdHJ1ZTsKLS0JICAgIH0KLS0JICBzaXplID0gR0VUX01PREVfU0laRSAoc2F2ZV9tb2RlKTsKLS0JICBpZiAob2Zmc2V0IDwgMCkKLS0JICAgIGNvbnRpbnVlOwotKyAgICAgICAgICAgICBydHggcmVnID0gWFZFQ0VYUCAoc3BhbiwgMCwgc2kpOwotKyAgICAgICAgICAgICBpbml0X29uZV9kd2FyZl9yZWdfc2l6ZQotKyAgICAgICAgICAgICAgIChSRUdOTyAocmVnKSwgR0VUX01PREUgKHJlZyksIG1lbSwgbW9kZSwgJmluaXRfc3RhdGUpOwotKyAgICAgICAgICAgfQotIAotLQkgIGVtaXRfbW92ZV9pbnNuIChhZGp1c3RfYWRkcmVzcyAobWVtLCBtb2RlLCBvZmZzZXQpLAotLQkJCSAgZ2VuX2ludF9tb2RlIChzaXplLCBtb2RlKSk7Ci0gCX0KLSAgICAgfQotIAotLSAgaWYgKCF3cm90ZV9yZXR1cm5fY29sdW1uKQotKyAgaWYgKCFpbml0X3N0YXRlLndyb3RlX3JldHVybl9jb2x1bW4pCi0gICAgIGluaXRfcmV0dXJuX2NvbHVtbl9zaXplIChtb2RlLCBtZW0sIERXQVJGX0ZSQU1FX1JFVFVSTl9DT0xVTU4pOwotIAotICNpZmRlZiBEV0FSRl9BTFRfRlJBTUVfUkVUVVJOX0NPTFVNTgpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTQuOS8wMDU2LWRlZmluZS1kZWZhdWx0LWNmYS1yZWdpc3Rlci1tYXBwaW5nLnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTQuOS8wMDU2LWRlZmluZS1kZWZhdWx0LWNmYS1yZWdpc3Rlci1tYXBwaW5nLnBhdGNoCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzYjZjOTRjLi4wMDAwMDAwCi0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy00LjkvMDA1Ni1kZWZpbmUtZGVmYXVsdC1jZmEtcmVnaXN0ZXItbWFwcGluZy5wYXRjaAorKysgL2Rldi9udWxsCkBAIC0xLDc1ICswLDAgQEAKLUZyb20gYzAyMzVhMzNkZThjNGY3OGNjZTM1YjJhOGMyMDM1YzgzZmUxYmQxNCBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKLUZyb206IGhhaW5xdWUgPGhhaW5xdWVAMTM4YmM3NWQtMGQwNC0wNDEwLTk2MWYtODJlZTcyYjA1NGE0PgotRGF0ZTogRnJpLCA1IERlYyAyMDE0IDE3OjAxOjQyICswMDAwCi1TdWJqZWN0OiBbUEFUQ0hdIDIwMTQtMTItMDUgIE9saXZpZXIgSGFpbnF1ZSAgPGhhaW5xdWVAYWRhY29yZS5jb20+Ci0KLSAgICAgICAgZ2NjLwotICAgICAgICAqIGRlZmF1bHRzLmg6IChEV0FSRl9SRUdfVE9fVU5XSU5EX0NPTFVNTik6IERlZmluZSBkZWZhdWx0LgotICAgICAgICAqIGR3YXJmMmNmaS5jIChpbml0X29uZV9kd2FyZl9yZWdfc2l6ZSk6IEhvbm9yCi0gICAgICAgIERXQVJGX1JFR19UT19VTldJTkRfQ09MVU1OLgotCi0gICAgICAgIGxpYmdjYy8KLSAgICAgICAgKiB1bndpbmQtZHcyLmMgKERXQVJGX1JFR19UT19VTldJTkRfQ09MVU1OKTogUmVtb3ZlIGRlZmF1bHQgZGVmLAotICAgICAgICBub3cgcHJvdmlkZWQgYnkgZGVmYXVsdHMuaC4KLQotCi0KLWdpdC1zdm4taWQ6IHN2bitzc2g6Ly9nY2MuZ251Lm9yZy9zdm4vZ2NjL3RydW5rQDIxODQyOSAxMzhiYzc1ZC0wZDA0LTA0MTAtOTYxZi04MmVlNzJiMDU0YTQKLQotU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KLVVwc3RyZWFtLVN0YXR1czogQmFja3BvcnQgW2djYyA1LjBdCi0KLS0tLQotIGdjYy9DaGFuZ2VMb2cgICAgICAgfCA2ICsrKysrKwotIGdjYy9kZWZhdWx0cy5oICAgICAgfCA1ICsrKysrCi0gZ2NjL2R3YXJmMmNmaS5jICAgICB8IDMgKystCi0gbGliZ2NjL0NoYW5nZUxvZyAgICB8IDUgKysrKysKLSBsaWJnY2MvdW53aW5kLWR3Mi5jIHwgNCAtLS0tCi0gNSBmaWxlcyBjaGFuZ2VkLCAxOCBpbnNlcnRpb25zKCspLCA1IGRlbGV0aW9ucygtKQotCi1JbmRleDogZ2NjLTQuOS4yL2djYy9kZWZhdWx0cy5oCi09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLS0gZ2NjLTQuOS4yLm9yaWcvZ2NjL2RlZmF1bHRzLmgKLSsrKyBnY2MtNC45LjIvZ2NjL2RlZmF1bHRzLmgKLUBAIC00MzgsNiArNDM4LDExIEBAIHNlZSB0aGUgZmlsZXMgQ09QWUlORzMgYW5kIENPUFlJTkcuUlVOVEkKLSAjZGVmaW5lIERXQVJGX0ZSQU1FX1JFR05VTShSRUcpIERCWF9SRUdJU1RFUl9OVU1CRVIgKFJFRykKLSAjZW5kaWYKLSAKLSsvKiBUaGUgbWFwcGluZyBmcm9tIGR3YXJmIENGQSByZWcgbnVtYmVyIHRvIGludGVybmFsIGR3YXJmIHJlZyBudW1iZXJzLiAgKi8KLSsjaWZuZGVmIERXQVJGX1JFR19UT19VTldJTkRfQ09MVU1OCi0rI2RlZmluZSBEV0FSRl9SRUdfVE9fVU5XSU5EX0NPTFVNTihSRUdOTykgKFJFR05PKQotKyNlbmRpZgotKwotIC8qIE1hcCByZWdpc3RlciBudW1iZXJzIGhlbGQgaW4gdGhlIGNhbGwgZnJhbWUgaW5mbyB0aGF0IGdjYyBoYXMKLSAgICBjb2xsZWN0ZWQgdXNpbmcgRFdBUkZfRlJBTUVfUkVHTlVNIHRvIHRob3NlIHRoYXQgc2hvdWxkIGJlIG91dHB1dCBpbgotICAgIC5kZWJ1Z19mcmFtZSBhbmQgLmVoX2ZyYW1lLiAgKi8KLUluZGV4OiBnY2MtNC45LjIvZ2NjL2R3YXJmMmNmaS5jCi09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLS0gZ2NjLTQuOS4yLm9yaWcvZ2NjL2R3YXJmMmNmaS5jCi0rKysgZ2NjLTQuOS4yL2djYy9kd2FyZjJjZmkuYwotQEAgLTI4MCw4ICsyODAsOSBAQCB2b2lkIGluaXRfb25lX2R3YXJmX3JlZ19zaXplIChpbnQgcmVnbm8sCi0gewotICAgY29uc3QgdW5zaWduZWQgaW50IGRudW0gPSBEV0FSRl9GUkFNRV9SRUdOVU0gKHJlZ25vKTsKLSAgIGNvbnN0IHVuc2lnbmVkIGludCBybnVtID0gRFdBUkYyX0ZSQU1FX1JFR19PVVQgKGRudW0sIDEpOwotKyAgY29uc3QgdW5zaWduZWQgaW50IGRjb2wgPSBEV0FSRl9SRUdfVE9fVU5XSU5EX0NPTFVNTiAocm51bSk7Ci0gCi0tICBjb25zdCBIT1NUX1dJREVfSU5UIHNsb3RvZmZzZXQgPSBybnVtICogR0VUX01PREVfU0laRSAoc2xvdG1vZGUpOwotKyAgY29uc3QgSE9TVF9XSURFX0lOVCBzbG90b2Zmc2V0ID0gZGNvbCAqIEdFVF9NT0RFX1NJWkUgKHNsb3Rtb2RlKTsKLSAgIGNvbnN0IEhPU1RfV0lERV9JTlQgcmVnc2l6ZSA9IEdFVF9NT0RFX1NJWkUgKHJlZ21vZGUpOwotIAotICAgaW5pdF9zdGF0ZS0+cHJvY2Vzc2VkX3JlZ25vW3JlZ25vXSA9IHRydWU7Ci1JbmRleDogZ2NjLTQuOS4yL2xpYmdjYy91bndpbmQtZHcyLmMKLT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tLSBnY2MtNC45LjIub3JpZy9saWJnY2MvdW53aW5kLWR3Mi5jCi0rKysgZ2NjLTQuOS4yL2xpYmdjYy91bndpbmQtZHcyLmMKLUBAIC01NSwxMCArNTUsNiBAQAotICNkZWZpbmUgUFJFX0dDQzNfRFdBUkZfRlJBTUVfUkVHSVNURVJTIERXQVJGX0ZSQU1FX1JFR0lTVEVSUwotICNlbmRpZgotIAotLSNpZm5kZWYgRFdBUkZfUkVHX1RPX1VOV0lORF9DT0xVTU4KLS0jZGVmaW5lIERXQVJGX1JFR19UT19VTldJTkRfQ09MVU1OKFJFR05PKSAoUkVHTk8pCi0tI2VuZGlmCi0tCi0gLyogPz8/IEZvciB0aGUgcHVibGljIGZ1bmN0aW9uIGludGVyZmFjZXMsIHdlIHRlbmQgdG8gZ2NjX2Fzc2VydCB0aGF0IHRoZQotICAgIGNvbHVtbiBudW1iZXJzIGFyZSBpbiByYW5nZS4gIEZvciB0aGUgZHdhcmYyIHVud2luZCBpbmZvIHRoaXMgZG9lcyBoYXBwZW4sCi0gICAgYWx0aG91Z2ggc28gZmFyIGluIGEgY2FzZSB0aGF0IGRvZXNuJ3QgYWN0dWFsbHkgbWF0dGVyLgpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTQuOS8wMDU3LWFhcmNoNjQtY29uZmlnLnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTQuOS8wMDU3LWFhcmNoNjQtY29uZmlnLnBhdGNoCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmMjk1NTk2Li4wMDAwMDAwCi0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy00LjkvMDA1Ny1hYXJjaDY0LWNvbmZpZy5wYXRjaAorKysgL2Rldi9udWxsCkBAIC0xLDMyICswLDAgQEAKLURpc2FibGUgdGhlIE1VTFRJTElCX09TRElSTkFNRVMgYW5kIG90aGVyIG11bHRpbGliIG9wdGlvbnMuCi0KLUhhcmQgY29kaW5nIHRoZSBNVUxUSUxJQl9PU0RJUk5BTUVTIHdpdGggLi4vbGliNjQgaXMgY2F1c2luZyBwcm9ibGVtcyBvbgotc3lzdGVtcyB3aGVyZSB0aGUgbGliZGlyIGlzIE5PVCBzZXQgdG8gL2xpYjY0LiAgVGhpcyBpcyBhbGxvd2VkIGJ5IHRoZSBBQkksIGFzCi1sb25nIGFzIHRoZSBkeW5hbWljIGxvYWRlciBpcyBwcmVzZW50IGluIC9saWIuCi0KLVdlIHNpbXBseSB3YW50IHRvIHVzZSB0aGUgZGVmYXVsdCBydWxlcyBpbiBnY2MgdG8gZmluZCBhbmQgY29uZmlndXJlIHRoZSAKLW5vcm1hbCBsaWJkaXIuCi0KLVNpZ25lZC1vZmYtYnk6IE1hcmsgSGF0bGUgPG1hcmsuaGF0bGVAd2luZHJpdmVyLmNvbT4KLQotSW5kZXg6IGdjYy00LjkuMS9nY2MvY29uZmlnL2FhcmNoNjQvdC1hYXJjaDY0LWxpbnV4Ci09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLS0gZ2NjLTQuOS4xLm9yaWcvZ2NjL2NvbmZpZy9hYXJjaDY0L3QtYWFyY2g2NC1saW51eAotKysrIGdjYy00LjkuMS9nY2MvY29uZmlnL2FhcmNoNjQvdC1hYXJjaDY0LWxpbnV4Ci1AQCAtMjEsMTEgKzIxLDExIEBACi0gTElCMUFTTVNSQyAgID0gYWFyY2g2NC9saWIxZnVuY3MuYXNtCi0gTElCMUFTTUZVTkNTID0gX2FhcmNoNjRfc3luY19jYWNoZV9yYW5nZQotIAotLUFBUkNIX0JFID0gJChpZiAkKGZpbmRzdHJpbmcgVEFSR0VUX0JJR19FTkRJQU5fREVGQVVMVD0xLCAkKHRtX2RlZmluZXMpKSxfYmUpCi0tTVVMVElMSUJfT1NESVJOQU1FUyA9IC49Li4vbGliNjQkKGNhbGwgaWZfbXVsdGlhcmNoLDphYXJjaDY0JChBQVJDSF9CRSktbGludXgtZ251KQotLU1VTFRJQVJDSF9ESVJOQU1FID0gJChjYWxsIGlmX211bHRpYXJjaCxhYXJjaDY0JChBQVJDSF9CRSktbGludXgtZ251KQotKyNBQVJDSF9CRSA9ICQoaWYgJChmaW5kc3RyaW5nIFRBUkdFVF9CSUdfRU5ESUFOX0RFRkFVTFQ9MSwgJCh0bV9kZWZpbmVzKSksX2JlKQotKyNNVUxUSUxJQl9PU0RJUk5BTUVTID0gLj0uLi9saWI2NCQoY2FsbCBpZl9tdWx0aWFyY2gsOmFhcmNoNjQkKEFBUkNIX0JFKS1saW51eC1nbnUpCi0rI01VTFRJQVJDSF9ESVJOQU1FID0gJChjYWxsIGlmX211bHRpYXJjaCxhYXJjaDY0JChBQVJDSF9CRSktbGludXgtZ251KQotIAotICMgRGlzYWJsZSB0aGUgbXVsdGlsaWIgZm9yIGxpbnV4LWdudSB0YXJnZXRzIGZvciB0aGUgdGltZSBiZWluZzsgZm9jdXMKLSAjIG9uIHRoZSBiYXJlbWV0YWwgdGFyZ2V0cy4KLS1NVUxUSUxJQl9PUFRJT05TICAgID0KLS1NVUxUSUxJQl9ESVJOQU1FUyAgID0KLSsjTVVMVElMSUJfT1BUSU9OUyAgICA9Ci0rI01VTFRJTElCX0RJUk5BTUVTICAgPQpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTQuOS8wMDU4LWdjYy1yMjEyMTcxLnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTQuOS8wMDU4LWdjYy1yMjEyMTcxLnBhdGNoCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkNDQyYmE4Li4wMDAwMDAwCi0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy00LjkvMDA1OC1nY2MtcjIxMjE3MS5wYXRjaAorKysgL2Rldi9udWxsCkBAIC0xLDExMyArMCwwIEBACi1Gcm9tIGNhMDNjZjFiMTMzZDY2ZWI5NzhjNjhmNmRiYzM0NWU5YWFiY2JhODggTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCi1Gcm9tOiB1cm9zIDx1cm9zQDEzOGJjNzVkLTBkMDQtMDQxMC05NjFmLTgyZWU3MmIwNTRhND4KLURhdGU6IE1vbiwgMzAgSnVuIDIwMTQgMTk6MzA6NTIgKzAwMDAKLVN1YmplY3Q6IFtQQVRDSF0gcjIxMjE3MQotCi0qIGV4Y2VwdC5jIChlbWl0X25vdGVfZWhfcmVnaW9uX2VuZCk6IE5ldyBoZWxwZXIKLSBmdW5jdGlvbi4gCShjb252ZXJ0X3RvX2VoX3JlZ2lvbl9yYW5nZXMpOiBVc2UKLSBlbWl0X25vdGVfZWhfcmVnaW9uX2VuZCB0byAJZW1pdCBFSF9SRUdJT05fRU5EIG5vdGUuIAotICoganVtcC5jIChjbGVhbnVwX2JhcnJpZXJzKTogRG8gbm90IHNwbGl0IGEgY2FsbCBhbmQgaXRzIAotIGNvcnJlc3BvbmRpbmcgQ0FMTF9BUkdfTE9DQVRJT04gbm90ZS4KLQotZ2l0LXN2bi1pZDogc3ZuK3NzaDovL2djYy5nbnUub3JnL3N2bi9nY2MvdHJ1bmtAMjEyMTcxIDEzOGJjNzVkLTBkMDQtMDQxMC05NjFmLTgyZWU3MmIwNTRhNAotCi1VcHN0cmVhbS1TdGF0dXM6IEJhY2twb3J0IFtodHRwczovL2djYy5nbnUub3JnL3ZpZXdjdnMvZ2NjP3ZpZXc9cmV2aXNpb24mcmV2aXNpb249MjEyMTcxXQotU2lnbmVkLW9mZi1ieTogQmFvc2hhbiBQYW5nIDxiYW9zaGFuLnBhbmdAd2luZHJpdmVyLmNvbT4KLS0tLQotIGdjYy9leGNlcHQuYyB8ICAgMjMgKysrKysrKysrKysrKysrKysrLS0tLS0KLSBnY2MvanVtcC5jICAgfCAgIDE5ICsrKysrKysrKysrKysrKy0tLS0KLSAyIGZpbGVzIGNoYW5nZWQsIDMzIGluc2VydGlvbnMoKyksIDkgZGVsZXRpb25zKC0pCi0KLWRpZmYgLS1naXQgYS9nY2MvZXhjZXB0LmMgYi9nY2MvZXhjZXB0LmMKLWluZGV4IGRjNWMxZDIuLjdhYzExNGYgMTAwNjQ0Ci0tLS0gYS9nY2MvZXhjZXB0LmMKLSsrKyBiL2djYy9leGNlcHQuYwotQEAgLTI0NjYsNiArMjQ2NiwyMCBAQCBhZGRfY2FsbF9zaXRlIChydHggbGFuZGluZ19wYWQsIGludCBhY3Rpb24sIGludCBzZWN0aW9uKQotICAgcmV0dXJuIGNhbGxfc2l0ZV9iYXNlICsgY3J0bC0+ZWguY2FsbF9zaXRlX3JlY29yZF92W3NlY3Rpb25dLT5sZW5ndGggKCkgLSAxOwotIH0KLSAKLStzdGF0aWMgcnR4Ci0rZW1pdF9ub3RlX2VoX3JlZ2lvbl9lbmQgKHJ0eCBpbnNuKQotK3sKLSsgIHJ0eCBuZXh0ID0gTkVYVF9JTlNOIChpbnNuKTsKLSsKLSsgIC8qIE1ha2Ugc3VyZSB3ZSBkbyBub3Qgc3BsaXQgYSBjYWxsIGFuZCBpdHMgY29ycmVzcG9uZGluZwotKyAgICAgQ0FMTF9BUkdfTE9DQVRJT04gbm90ZS4gICovCi0rICBpZiAobmV4dCAmJiBOT1RFX1AgKG5leHQpCi0rICAgICAgJiYgTk9URV9LSU5EIChuZXh0KSA9PSBOT1RFX0lOU05fQ0FMTF9BUkdfTE9DQVRJT04pCi0rICAgIGluc24gPSBuZXh0OwotKwotKyAgcmV0dXJuIGVtaXRfbm90ZV9hZnRlciAoTk9URV9JTlNOX0VIX1JFR0lPTl9FTkQsIGluc24pOwotK30KLSsKLSAvKiBUdXJuIFJFR19FSF9SRUdJT04gbm90ZXMgYmFjayBpbnRvIE5PVEVfSU5TTl9FSF9SRUdJT04gbm90ZXMuCi0gICAgVGhlIG5ldyBub3RlIG51bWJlcnMgd2lsbCBub3QgcmVmZXIgdG8gcmVnaW9uIG51bWJlcnMsIGJ1dAotICAgIGluc3RlYWQgdG8gY2FsbCBzaXRlIGVudHJpZXMuICAqLwotQEAgLTI1NDQsOCArMjU1OCw4IEBAIGNvbnZlcnRfdG9fZWhfcmVnaW9uX3JhbmdlcyAodm9pZCkKLSAJCW5vdGUgPSBlbWl0X25vdGVfYmVmb3JlIChOT1RFX0lOU05fRUhfUkVHSU9OX0JFRywKLSAJCQkJCSBmaXJzdF9ub19hY3Rpb25faW5zbl9iZWZvcmVfc3dpdGNoKTsKLSAJCU5PVEVfRUhfSEFORExFUiAobm90ZSkgPSBjYWxsX3NpdGU7Ci0tCQlub3RlID0gZW1pdF9ub3RlX2FmdGVyIChOT1RFX0lOU05fRUhfUkVHSU9OX0VORCwKLS0JCQkJCWxhc3Rfbm9fYWN0aW9uX2luc25fYmVmb3JlX3N3aXRjaCk7Ci0rCQlub3RlCi0rCQkgID0gZW1pdF9ub3RlX2VoX3JlZ2lvbl9lbmQgKGxhc3Rfbm9fYWN0aW9uX2luc25fYmVmb3JlX3N3aXRjaCk7Ci0gCQlOT1RFX0VIX0hBTkRMRVIgKG5vdGUpID0gY2FsbF9zaXRlOwotIAkJZ2NjX2Fzc2VydCAobGFzdF9hY3Rpb24gIT0gLTMKLSAJCQkgICAgfHwgKGxhc3RfYWN0aW9uX2luc24KLUBAIC0yNTY5LDggKzI1ODMsNyBAQCBjb252ZXJ0X3RvX2VoX3JlZ2lvbl9yYW5nZXMgKHZvaWQpCi0gCQkgICAgZmlyc3Rfbm9fYWN0aW9uX2luc24gPSBOVUxMX1JUWDsKLSAJCSAgfQotIAotLQkJbm90ZSA9IGVtaXRfbm90ZV9hZnRlciAoTk9URV9JTlNOX0VIX1JFR0lPTl9FTkQsCi0tCQkJCQlsYXN0X2FjdGlvbl9pbnNuKTsKLSsJCW5vdGUgPSBlbWl0X25vdGVfZWhfcmVnaW9uX2VuZCAobGFzdF9hY3Rpb25faW5zbik7Ci0gCQlOT1RFX0VIX0hBTkRMRVIgKG5vdGUpID0gY2FsbF9zaXRlOwotIAkgICAgICB9Ci0gCi1AQCAtMjYxNyw3ICsyNjMwLDcgQEAgY29udmVydF90b19laF9yZWdpb25fcmFuZ2VzICh2b2lkKQotIAotICAgaWYgKGxhc3RfYWN0aW9uID49IC0xICYmICEgZmlyc3Rfbm9fYWN0aW9uX2luc24pCi0gICAgIHsKLS0gICAgICBub3RlID0gZW1pdF9ub3RlX2FmdGVyIChOT1RFX0lOU05fRUhfUkVHSU9OX0VORCwgbGFzdF9hY3Rpb25faW5zbik7Ci0rICAgICAgbm90ZSA9IGVtaXRfbm90ZV9laF9yZWdpb25fZW5kIChsYXN0X2FjdGlvbl9pbnNuKTsKLSAgICAgICBOT1RFX0VIX0hBTkRMRVIgKG5vdGUpID0gY2FsbF9zaXRlOwotICAgICB9Ci0gCi1kaWZmIC0tZ2l0IGEvZ2NjL2p1bXAuYyBiL2djYy9qdW1wLmMKLWluZGV4IDk0MThmNjUuLmE1ZTVmNTIgMTAwNjQ0Ci0tLS0gYS9nY2MvanVtcC5jCi0rKysgYi9nY2MvanVtcC5jCi1AQCAtMTIxLDE1ICsxMjEsMjYgQEAgcmVidWlsZF9qdW1wX2xhYmVsc19jaGFpbiAocnR4IGNoYWluKQotIHN0YXRpYyB1bnNpZ25lZCBpbnQKLSBjbGVhbnVwX2JhcnJpZXJzICh2b2lkKQotIHsKLS0gIHJ0eCBpbnNuLCBuZXh0LCBwcmV2OwotLSAgZm9yIChpbnNuID0gZ2V0X2luc25zICgpOyBpbnNuOyBpbnNuID0gbmV4dCkKLSsgIHJ0eCBpbnNuOwotKyAgZm9yIChpbnNuID0gZ2V0X2luc25zICgpOyBpbnNuOyBpbnNuID0gTkVYVF9JTlNOIChpbnNuKSkKLSAgICAgewotLSAgICAgIG5leHQgPSBORVhUX0lOU04gKGluc24pOwotICAgICAgIGlmIChCQVJSSUVSX1AgKGluc24pKQotIAl7Ci0tCSAgcHJldiA9IHByZXZfbm9ubm90ZV9pbnNuIChpbnNuKTsKLSsJICBydHggcHJldiA9IHByZXZfbm9ubm90ZV9pbnNuIChpbnNuKTsKLSAJICBpZiAoIXByZXYpCi0gCSAgICBjb250aW51ZTsKLSsKLSsJICBpZiAoQ0FMTF9QIChwcmV2KSkKLSsJICAgIHsKLSsJICAgICAgLyogTWFrZSBzdXJlIHdlIGRvIG5vdCBzcGxpdCBhIGNhbGwgYW5kIGl0cyBjb3JyZXNwb25kaW5nCi0rCQkgQ0FMTF9BUkdfTE9DQVRJT04gbm90ZS4gICovCi0rCSAgICAgIHJ0eCBuZXh0ID0gTkVYVF9JTlNOIChwcmV2KTsKLSsKLSsJICAgICAgaWYgKE5PVEVfUCAobmV4dCkKLSsJCSAgJiYgTk9URV9LSU5EIChuZXh0KSA9PSBOT1RFX0lOU05fQ0FMTF9BUkdfTE9DQVRJT04pCi0rCQlwcmV2ID0gbmV4dDsKLSsJICAgIH0KLSsKLSAJICBpZiAoQkFSUklFUl9QIChwcmV2KSkKLSAJICAgIGRlbGV0ZV9pbnNuIChpbnNuKTsKLSAJICBlbHNlIGlmIChwcmV2ICE9IFBSRVZfSU5TTiAoaW5zbikpCi0tLSAKLTEuNy45LjUKLQpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTQuOS8wMDU5LWdjYy1QUi1ydGwtb3B0aW1pemF0aW9uLTYzMzQ4LnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTQuOS8wMDU5LWdjYy1QUi1ydGwtb3B0aW1pemF0aW9uLTYzMzQ4LnBhdGNoCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkZTgyN2NiLi4wMDAwMDAwCi0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy00LjkvMDA1OS1nY2MtUFItcnRsLW9wdGltaXphdGlvbi02MzM0OC5wYXRjaAorKysgL2Rldi9udWxsCkBAIC0xLDU5ICswLDAgQEAKLUZyb20gNmVhZTNlNjM3ZmNjMjJkMjFiNTFkNDRkNjFlM2E5Y2I0ODI1ZTc3NiBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKLUZyb206IEphY2tpZSBIdWFuZyA8amFja2llLmh1YW5nQHdpbmRyaXZlci5jb20+Ci1EYXRlOiBUaHUsIDMwIE9jdCAyMDE0IDIwOjM3OjE0IC0wNzAwCi1TdWJqZWN0OiBbUEFUQ0hdUFIgcnRsLW9wdGltaXphdGlvbi82MzM0OAotIAotUFIgcnRsLW9wdGltaXphdGlvbi82MzM0OAotKiBlbWl0LXJ0bC5jICh0cnlfc3BsaXQpOiBEbyBub3QgZW1pdCBleHRyYSBiYXJyaWVyLgotCi1Ob3RlOiB0aGlzIHBhdGNoIGlzIHRvIGZpeCB0aGUgc2lkZSBlZmZlY3QgaW50cm9kdWNlZCBieSByMjEyMTcxIHdoaWNoIHdhcyByZXBvcnRlZCBhdDoKLWh0dHBzOi8vZ2NjLmdudS5vcmcvYnVnemlsbGEvc2hvd19idWcuY2dpP2lkPTYzMzQ4Ci0KLWdpdC1zdm4taWQ6IHN2bitzc2g6Ly9nY2MuZ251Lm9yZy9zdm4vZ2NjL3RydW5rQDIxNTYxMyAxMzhiYzc1ZC0wZDA0LTA0MTAtOTYxZi04MmVlNzJiMDU0YTQKLQotVXBzdHJlYW0tU3RhdHVzOiBCYWNrcG9ydCBbaHR0cHM6Ly9nY2MuZ251Lm9yZy92aWV3Y3ZzL2djYz92aWV3PXJldmlzaW9uJnJldmlzaW9uPTIxNTYxM10KLVNpZ25lZC1vZmYtYnk6IEJhb3NoYW4gUGFuZyA8YmFvc2hhbi5wYW5nQHdpbmRyaXZlci5jb20+Ci1TaWduZWQtb2ZmLWJ5OiBKYWNraWUgSHVhbmcgPGphY2tpZS5odWFuZ0B3aW5kcml2ZXIuY29tPgotLS0tCi0gZ2NjL2VtaXQtcnRsLmMgfCAgIDExIC0tLS0tLS0tLS0tCi0gMSBmaWxlcyBjaGFuZ2VkLCAwIGluc2VydGlvbnMoKyksIDExIGRlbGV0aW9ucygtKQotCi1kaWZmIC0tZ2l0IGEvZ2NjL2VtaXQtcnRsLmMgYi9nY2MvZW1pdC1ydGwuYwotaW5kZXggNDczNmY4ZC4uYWU2OWRiZCAxMDA2NDQKLS0tLSBhL2djYy9lbWl0LXJ0bC5jCi0rKysgYi9nY2MvZW1pdC1ydGwuYwotQEAgLTM0MjIsNyArMzQyMiw2IEBAIHRyeV9zcGxpdCAocnR4IHBhdCwgcnR4IHRyaWFsLCBpbnQgbGFzdCkKLSB7Ci0gICBydHggYmVmb3JlID0gUFJFVl9JTlNOICh0cmlhbCk7Ci0gICBydHggYWZ0ZXIgPSBORVhUX0lOU04gKHRyaWFsKTsKLS0gIGludCBoYXNfYmFycmllciA9IDA7Ci0gICBydHggbm90ZSwgc2VxLCB0ZW07Ci0gICBpbnQgcHJvYmFiaWxpdHk7Ci0gICBydHggaW5zbl9sYXN0LCBpbnNuOwotQEAgLTM0NDEsMTQgKzM0NDAsNiBAQCB0cnlfc3BsaXQgKHJ0eCBwYXQsIHJ0eCB0cmlhbCwgaW50IGxhc3QpCi0gCi0gICBzcGxpdF9icmFuY2hfcHJvYmFiaWxpdHkgPSAtMTsKLSAKLS0gIC8qIElmIHdlIGFyZSBzcGxpdHRpbmcgYSBKVU1QX0lOU04sIGl0IG1pZ2h0IGJlIGZvbGxvd2VkIGJ5IGEgQkFSUklFUi4KLS0gICAgIFdlIG1heSBuZWVkIHRvIGhhbmRsZSB0aGlzIHNwZWNpYWxseS4gICovCi0tICBpZiAoYWZ0ZXIgJiYgQkFSUklFUl9QIChhZnRlcikpCi0tICAgIHsKLS0gICAgICBoYXNfYmFycmllciA9IDE7Ci0tICAgICAgYWZ0ZXIgPSBORVhUX0lOU04gKGFmdGVyKTsKLS0gICAgfQotLQotICAgaWYgKCFzZXEpCi0gICAgIHJldHVybiB0cmlhbDsKLSAKLUBAIC0zNTk0LDggKzM1ODUsNiBAQCB0cnlfc3BsaXQgKHJ0eCBwYXQsIHJ0eCB0cmlhbCwgaW50IGxhc3QpCi0gICB0ZW0gPSBlbWl0X2luc25fYWZ0ZXJfc2V0bG9jIChzZXEsIHRyaWFsLCBJTlNOX0xPQ0FUSU9OICh0cmlhbCkpOwotIAotICAgZGVsZXRlX2luc24gKHRyaWFsKTsKLS0gIGlmIChoYXNfYmFycmllcikKLS0gICAgZW1pdF9iYXJyaWVyX2FmdGVyICh0ZW0pOwotIAotICAgLyogUmVjdXJzaXZlbHkgY2FsbCB0cnlfc3BsaXQgZm9yIGVhY2ggbmV3IGluc24gY3JlYXRlZDsgYnkgdGhlCi0gICAgICB0aW1lIGNvbnRyb2wgcmV0dXJucyBoZXJlIHRoYXQgaW5zbiB3aWxsIGJlIGZ1bGx5IHNwbGl0LCBzbwotLS0gCi0xLjcuMQotCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNC45LzAwNjAtT25seS1hbGxvdy1lNTAwLWRvdWJsZS1pbi1TUEVfU0lNRF9SRUdOT19QLXJlZ2lzdGVycy5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy00LjkvMDA2MC1Pbmx5LWFsbG93LWU1MDAtZG91YmxlLWluLVNQRV9TSU1EX1JFR05PX1AtcmVnaXN0ZXJzLnBhdGNoCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3NWE5ZmRkLi4wMDAwMDAwCi0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy00LjkvMDA2MC1Pbmx5LWFsbG93LWU1MDAtZG91YmxlLWluLVNQRV9TSU1EX1JFR05PX1AtcmVnaXN0ZXJzLnBhdGNoCisrKyAvZGV2L251bGwKQEAgLTEsNTUgKzAsMCBAQAotRnJvbSA1YzAwOTIwNzAyNTMxMTNjZjBkOWM0NWVhY2M4ODRiM2VjYzM0ZDgxIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQotRnJvbToganNtMjggPGpzbTI4QDEzOGJjNzVkLTBkMDQtMDQxMC05NjFmLTgyZWU3MmIwNTRhND4KLURhdGU6IFNhdCwgMjUgT2N0IDIwMTQgMDA6MjM6MTcgKzAwMDAKLVN1YmplY3Q6IFtQQVRDSF0gT25seSBhbGxvdyBlNTAwIGRvdWJsZSBpbiBTUEVfU0lNRF9SRUdOT19QIHJlZ2lzdGVycy4KLQotcnM2MDAwX2hhcmRfcmVnbm9fbnJlZ3NfaW50ZXJuYWwgYWxsb3dzIFNQRSB2ZWN0b3JzIGluIHNpbmdsZQotcmVnaXN0ZXJzIHNhdGlzZnlpbmcgU1BFX1NJTURfUkVHTk9fUCAoaS5lLiByZWdpc3RlciBudW1iZXJzIDAgdG8KLTMxKS4gIEhvd2V2ZXIsIHRoZSBjb3JyZXNwb25kaW5nIHRlc3QgZm9yIGU1MDAgZG91YmxlIHRyZWF0cyBhbGwKLXJlZ2lzdGVycyBhcyBiZWluZyBhYmxlIHRvIHN0b3JlIGEgNjQtYml0IHZhbHVlLCByYXRoZXIgdGhhbiBqdXN0Ci10aG9zZSBHUFJzLgotCi1Mb2dpY2FsbHkgdGhpcyBpbmNvbnNpc3RlbmN5IGlzIHdyb25nOyBpbiBhZGRpdGlvbiwgaXQgY2F1c2VzIHByb2JsZW1zCi11bndpbmRpbmcgZnJvbSBzaWduYWwgaGFuZGxlcnMuICBsaW51eC11bndpbmQuaCB1c2VzCi1BUkdfUE9JTlRFUl9SRUdOVU0gYXMgYSBwbGFjZSB0byBzdG9yZSB0aGUgcmV0dXJuIGFkZHJlc3MgZnJvbSBhCi1zaWduYWwgaGFuZGxlciwgYnV0IHRoaXMgbG9naWMgaW4gcnM2MDAwX2hhcmRfcmVnbm9fbnJlZ3NfaW50ZXJuYWwKLXJlc3VsdHMgaW4gdGhhdCBiZWluZyBjb25zaWRlcmVkIGFuIDgtYnl0ZSByZWdpc3RlciwgcmVzdWx0aW5nIGluCi1hc3NlcnRpb24gZmFpbHVyZXMuCi0oPGh0dHBzOi8vZ2NjLmdudS5vcmcvbWwvZ2NjLXBhdGNoZXMvMjAxNC0wOS9tc2cwMjYyNS5odG1sPiBmaXJzdAotbmVlZHMgdG8gYmUgYXBwbGllZCBmb3IgdW53aW5kaW5nIHRvIHdvcmsgaW4gZ2VuZXJhbCBvbiBlNTAwLikgIFRoaXMKLXBhdGNoIG1ha2VzIHJzNjAwMF9oYXJkX3JlZ25vX25yZWdzX2ludGVybmFsIGhhbmRsZSB0aGUgZTUwMCBkb3VibGUKLWNhc2UgY29uc2lzdGVudGx5IHdpdGggU1BFIHZlY3RvcnMuCi0KLVRlc3RlZCB3aXRoIG5vIHJlZ3Jlc3Npb25zIHdpdGggY3Jvc3MgdG8gcG93ZXJwYy1saW51eC1nbnVzcGUgKGdpdmVuCi10aGUgYWZvcmVtZW50aW9uZWQgcGF0Y2ggYXBwbGllZCkuICBGYWlsdXJlcyBvZiBzaWduYWwgaGFuZGxpbmcKLXVud2luZGluZyB0ZXN0cyBzdWNoIGFzIGdjYy5kZy9jbGVhbnVwLXs4LDksMTAsMTF9LmMgYXJlIGZpeGVkIGJ5IHRoaXMKLXBhdGNoLgotCi0JKiBjb25maWcvcnM2MDAwL3JzNjAwMC5jIChyczYwMDBfaGFyZF9yZWdub19ucmVnc19pbnRlcm5hbCk6IERvCi0Jbm90IGFsbG93IGU1MDAgZG91YmxlIGluIHJlZ2lzdGVycyBub3Qgc2F0aXN5ZmluZwotCVNQRV9TSU1EX1JFR05PX1AuCi0KLQotZ2l0LXN2bi1pZDogc3ZuK3NzaDovL2djYy5nbnUub3JnL3N2bi9nY2MvdHJ1bmtAMjE2Njg4IDEzOGJjNzVkLTBkMDQtMDQxMC05NjFmLTgyZWU3MmIwNTRhNAotCi1TaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgotVXBzdHJlYW0tU3RhdHVzOiBCYWNrcG9ydCBbZ2NjIDUuMF0KLQotLS0tCi0gZ2NjL0NoYW5nZUxvZyAgICAgICAgICAgICAgfCA2ICsrKysrKwotIGdjYy9jb25maWcvcnM2MDAwL3JzNjAwMC5jIHwgMiArLQotIDIgZmlsZXMgY2hhbmdlZCwgNyBpbnNlcnRpb25zKCspLCAxIGRlbGV0aW9uKC0pCi0KLUluZGV4OiBnY2MtNC45LjIvZ2NjL2NvbmZpZy9yczYwMDAvcnM2MDAwLmMKLT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tLSBnY2MtNC45LjIub3JpZy9nY2MvY29uZmlnL3JzNjAwMC9yczYwMDAuYwotKysrIGdjYy00LjkuMi9nY2MvY29uZmlnL3JzNjAwMC9yczYwMDAuYwotQEAgLTE3MDMsNyArMTcwMyw3IEBAIHJzNjAwMF9oYXJkX3JlZ25vX25yZWdzX2ludGVybmFsIChpbnQgcmUKLSAgICAgIFNDbW9kZSBzbyBhcyB0byBwYXNzIHRoZSB2YWx1ZSBjb3JyZWN0bHkgaW4gYSBwYWlyIG9mCi0gICAgICByZWdpc3RlcnMuICAqLwotICAgZWxzZSBpZiAoVEFSR0VUX0U1MDBfRE9VQkxFICYmIEZMT0FUX01PREVfUCAobW9kZSkgJiYgbW9kZSAhPSBTQ21vZGUKLS0JICAgJiYgIURFQ0lNQUxfRkxPQVRfTU9ERV9QIChtb2RlKSkKLSsJICAgJiYgIURFQ0lNQUxfRkxPQVRfTU9ERV9QIChtb2RlKSAmJiBTUEVfU0lNRF9SRUdOT19QIChyZWdubykpCi0gICAgIHJlZ19zaXplID0gVU5JVFNfUEVSX0ZQX1dPUkQ7Ci0gCi0gICBlbHNlCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNC45LzAwNjEtdGFyZ2V0LWdjYy1pbmNsdWRlZGlyLnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTQuOS8wMDYxLXRhcmdldC1nY2MtaW5jbHVkZWRpci5wYXRjaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjQ4YzY2ZC4uMDAwMDAwMAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNC45LzAwNjEtdGFyZ2V0LWdjYy1pbmNsdWRlZGlyLnBhdGNoCisrKyAvZGV2L251bGwKQEAgLTEsODEgKzAsMCBAQAotRW5zdXJlIHRhcmdldCBnY2MgaGVhZGVycyBjYW4gYmUgaW5jbHVkZWQKLQotVGhlcmUgYXJlIGEgZmV3IGhlYWRlcnMgaW5zdGFsbGVkIGFzIHBhcnQgb2YgdGhlIE9wZW5FbWJlZGRlZAotZ2NjLXJ1bnRpbWUgdGFyZ2V0IChvbXAuaCwgc3NwLyouaCkuIEJlaW5nIGluc3RhbGxlZCBmcm9tIGEgcmVjaXBlCi1idWlsdCBmb3IgdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUsIHRoZXNlIGFyZSB3aXRoaW4gdGhlIHRhcmdldAotc3lzcm9vdCBhbmQgbm90IGNyb3NzL25hdGl2ZXNkazsgdGh1cyB0aGV5IHdlcmVuJ3QgYWJsZSB0byBiZQotZm91bmQgYnkgZ2NjIHdpdGggdGhlIGV4aXN0aW5nIHNlYXJjaCBwYXRocy4gQWRkIHN1cHBvcnQgZm9yCi1waWNraW5nIHVwIHRoZXNlIGhlYWRlcnMgdW5kZXIgdGhlIHN5c3Jvb3Qgc3VwcGxpZWQgb24gdGhlIGdjYwotY29tbWFuZCBsaW5lIGluIG9yZGVyIHRvIHJlc29sdmUgdGhpcy4KLQotU2lnbmVkLW9mZi1ieTogUGF1bCBFZ2dsZXRvbiA8cGF1bC5lZ2dsZXRvbkBsaW51eC5pbnRlbC5jb20+Ci0KLVVwc3RyZWFtLVN0YXR1czogUGVuZGluZwotCi0tLS0gYS9nY2MvTWFrZWZpbGUuaW4JMjAxNC0xMi0yMyAxMTo1NzozMy4zMjc4NzMzMzEgKzAwMDAKLSsrKyBiL2djYy9NYWtlZmlsZS5pbgkyMDE1LTAxLTIxIDExOjMyOjM1LjQ0NzMwNTM5NCArMDAwMAotQEAgLTU4Nyw2ICs1ODcsNyBAQAotIAotICMgRGlyZWN0b3J5IGluIHdoaWNoIHRoZSBjb21waWxlciBmaW5kcyBsaWJyYXJpZXMgZXRjLgotIGxpYnN1YmRpciA9ICQobGliZGlyKS9nY2MvJCh0YXJnZXRfbm9uY2Fub25pY2FsKS8kKHZlcnNpb24pCi0rbGlic3ViZGlyX3RhcmdldCA9IGdjYy8kKHRhcmdldF9ub25jYW5vbmljYWwpLyQodmVyc2lvbikKLSAjIERpcmVjdG9yeSBpbiB3aGljaCB0aGUgY29tcGlsZXIgZmluZHMgZXhlY3V0YWJsZXMKLSBsaWJleGVjc3ViZGlyID0gJChsaWJleGVjZGlyKS9nY2MvJCh0YXJnZXRfbm9uY2Fub25pY2FsKS8kKHZlcnNpb24pCi0gIyBEaXJlY3RvcnkgaW4gd2hpY2ggYWxsIHBsdWdpbiByZXNvdXJjZXMgYXJlIGluc3RhbGxlZAotQEAgLTI1MzQsNiArMjUzNSw3IEBACi0gCi0gUFJFUFJPQ0VTU09SX0RFRklORVMgPSBcCi0gICAtREdDQ19JTkNMVURFX0RJUj1cIiQobGlic3ViZGlyKS9pbmNsdWRlXCIgXAotKyAgLURHQ0NfSU5DTFVERV9TVUJESVJfVEFSR0VUPVwiJChsaWJzdWJkaXJfdGFyZ2V0KS9pbmNsdWRlXCIgXAotICAgLURGSVhFRF9JTkNMVURFX0RJUj1cIiQobGlic3ViZGlyKS9pbmNsdWRlLWZpeGVkXCIgXAotICAgLURHUExVU1BMVVNfSU5DTFVERV9ESVI9XCIkKGdjY19neHhfaW5jbHVkZV9kaXIpXCIgXAotICAgLURHUExVU1BMVVNfSU5DTFVERV9ESVJfQUREX1NZU1JPT1Q9JChnY2NfZ3h4X2luY2x1ZGVfZGlyX2FkZF9zeXNyb290KSBcCi0tLS0gYS9nY2MvY3BwZGVmYXVsdC5jCTIwMTUtMDEtMTMgMTc6NDA6MjYuMTMxMDEyNzI1ICswMDAwCi0rKysgYi9nY2MvY3BwZGVmYXVsdC5jCTIwMTUtMDEtMjEgMTE6MzA6MDguOTI4NDI2NDkyICswMDAwCi1AQCAtNTksNiArNTksMTAgQEAKLSAgICAgLyogVGhpcyBpcyB0aGUgZGlyIGZvciBnY2MncyBwcml2YXRlIGhlYWRlcnMuICAqLwotICAgICB7IEdDQ19JTkNMVURFX0RJUiwgIkdDQyIsIDAsIDAsIDAsIDAgfSwKLSAjZW5kaWYKLSsjaWZkZWYgR0NDX0lOQ0xVREVfU1VCRElSX1RBUkdFVAotKyAgICAvKiBUaGlzIGlzIHRoZSBkaXIgZm9yIGdjYydzIHByaXZhdGUgaGVhZGVycyB1bmRlciB0aGUgc3BlY2lmaWVkIHN5c3Jvb3QuICAqLwotKyAgICB7IFNUQU5EQVJEX1NUQVJURklMRV9QUkVGSVhfMiBHQ0NfSU5DTFVERV9TVUJESVJfVEFSR0VULCAiR0NDIiwgMCwgMCwgMSwgMCB9LAotKyNlbmRpZgotICNpZmRlZiBMT0NBTF9JTkNMVURFX0RJUgotICAgICAvKiAvdXNyL2xvY2FsL2luY2x1ZGUgY29tZXMgYmVmb3JlIHRoZSBmaXhpbmNsdWRlZCBoZWFkZXIgZmlsZXMuICAqLwotICAgICB7IExPQ0FMX0lOQ0xVREVfRElSLCAwLCAwLCAxLCAxLCAyIH0sCi1kaWZmIC0tZ2l0IGEvZ2NjL2RlZmF1bHRzLmggYi9nY2MvZGVmYXVsdHMuaAotaW5kZXggZjk0YWUxNy4uZDk4YjQwYiAxMDA2NDQKLS0tLSBhL2djYy9kZWZhdWx0cy5oCi0rKysgYi9nY2MvZGVmYXVsdHMuaAotQEAgLTEzOTAsNCArMTM5MCwxMyBAQCBzZWUgdGhlIGZpbGVzIENPUFlJTkczIGFuZCBDT1BZSU5HLlJVTlRJTUUgcmVzcGVjdGl2ZWx5LiAgSWYgbm90LCBzZWUKLSAKLSAjZW5kaWYgLyogR0NDX0lOU05fRkxBR1NfSCAgKi8KLSAKLSsvKiBEZWZhdWx0IHByZWZpeGVzIHRvIGF0dGFjaCB0byBjb21tYW5kIG5hbWVzLiAgKi8KLSsKLSsjaWZuZGVmIFNUQU5EQVJEX1NUQVJURklMRV9QUkVGSVhfMQotKyNkZWZpbmUgU1RBTkRBUkRfU1RBUlRGSUxFX1BSRUZJWF8xICIvbGliLyIKLSsjZW5kaWYKLSsjaWZuZGVmIFNUQU5EQVJEX1NUQVJURklMRV9QUkVGSVhfMgotKyNkZWZpbmUgU1RBTkRBUkRfU1RBUlRGSUxFX1BSRUZJWF8yICIvdXNyL2xpYi8iCi0rI2VuZGlmCi0rCi0gI2VuZGlmICAvKiAhIEdDQ19ERUZBVUxUU19IICovCi1kaWZmIC0tZ2l0IGEvZ2NjL2djYy5jIGIvZ2NjL2djYy5jCi1pbmRleCA5ZjBiNzgxLi4xNzRmY2E4IDEwMDY0NAotLS0tIGEvZ2NjL2djYy5jCi0rKysgYi9nY2MvZ2NjLmMKLUBAIC0xMTg5LDEzICsxMTg5LDYgQEAgc3RhdGljIGNvbnN0IGNoYXIgKmdjY19saWJleGVjX3ByZWZpeDsKLSAKLSAvKiBEZWZhdWx0IHByZWZpeGVzIHRvIGF0dGFjaCB0byBjb21tYW5kIG5hbWVzLiAgKi8KLSAKLS0jaWZuZGVmIFNUQU5EQVJEX1NUQVJURklMRV9QUkVGSVhfMQotLSNkZWZpbmUgU1RBTkRBUkRfU1RBUlRGSUxFX1BSRUZJWF8xICIvbGliLyIKLS0jZW5kaWYKLS0jaWZuZGVmIFNUQU5EQVJEX1NUQVJURklMRV9QUkVGSVhfMgotLSNkZWZpbmUgU1RBTkRBUkRfU1RBUlRGSUxFX1BSRUZJWF8yICIvdXNyL2xpYi8iCi0tI2VuZGlmCi0tCi0gI2lmZGVmIENST1NTX0RJUkVDVE9SWV9TVFJVQ1RVUkUgIC8qIERvbid0IHVzZSB0aGVzZSBwcmVmaXhlcyBmb3IgYSBjcm9zcyBjb21waWxlci4gICovCi0gI3VuZGVmIE1EX0VYRUNfUFJFRklYCi0gI3VuZGVmIE1EX1NUQVJURklMRV9QUkVGSVgKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy00LjkvMDA2Mi1Vc2UtU1lTVEVNTElCU19ESVItcmVwbGFjZW1lbnQtaW5zdGVhZC1vZi1oYXJkY29kaW5nLnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTQuOS8wMDYyLVVzZS1TWVNURU1MSUJTX0RJUi1yZXBsYWNlbWVudC1pbnN0ZWFkLW9mLWhhcmRjb2RpbmcucGF0Y2gKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGM0OGJkNDguLjAwMDAwMDAKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTQuOS8wMDYyLVVzZS1TWVNURU1MSUJTX0RJUi1yZXBsYWNlbWVudC1pbnN0ZWFkLW9mLWhhcmRjb2RpbmcucGF0Y2gKKysrIC9kZXYvbnVsbApAQCAtMSwyNCArMCwwIEBACi1Gcm9tIDg2MWJjZmQ0YWU4MTRmMzUxZTBjNjY4ZWUyNmQwMWQxMzMxZTA0MjIgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCi1Gcm9tOiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgotRGF0ZTogVHVlLCAyOCBBcHIgMjAxNSAyMzoxNToyNyAtMDcwMAotU3ViamVjdDogW1BBVENIIDM2LzM3XSBVc2UgU1lTVEVNTElCU19ESVIgcmVwbGFjZW1lbnQgaW5zdGVhZCBvZiBoYXJkY29kaW5nCi0gYmFzZV9saWJkaXIKLQotU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KLS0tLQotIGdjYy9jb25maWcvYWFyY2g2NC9hYXJjaDY0LWxpbnV4LmggfCAyICstCi0gMSBmaWxlIGNoYW5nZWQsIDEgaW5zZXJ0aW9uKCspLCAxIGRlbGV0aW9uKC0pCi0KLUluZGV4OiBnY2MtNC45LjIvZ2NjL2NvbmZpZy9hYXJjaDY0L2FhcmNoNjQtbGludXguaAotPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0tIGdjYy00LjkuMi5vcmlnL2djYy9jb25maWcvYWFyY2g2NC9hYXJjaDY0LWxpbnV4LmgKLSsrKyBnY2MtNC45LjIvZ2NjL2NvbmZpZy9hYXJjaDY0L2FhcmNoNjQtbGludXguaAotQEAgLTIxLDcgKzIxLDcgQEAKLSAjaWZuZGVmIEdDQ19BQVJDSDY0X0xJTlVYX0gKLSAjZGVmaW5lIEdDQ19BQVJDSDY0X0xJTlVYX0gKLSAKLS0jZGVmaW5lIEdMSUJDX0RZTkFNSUNfTElOS0VSICIvbGliL2xkLWxpbnV4LWFhcmNoNjQle21iaWctZW5kaWFuOl9iZX0uc28uMSIKLSsjZGVmaW5lIEdMSUJDX0RZTkFNSUNfTElOS0VSIFNZU1RFTUxJQlNfRElSICJsZC1saW51eC1hYXJjaDY0JXttYmlnLWVuZGlhbjpfYmV9LnNvLjEiCi0gCi0gI2RlZmluZSBDUFBfU1BFQyAiJXtwdGhyZWFkOi1EX1JFRU5UUkFOVH0iCi0gCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNC45LzAwNjMtbmF0aXZlc2RrLWdjYy1zdXBwb3J0LnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTQuOS8wMDYzLW5hdGl2ZXNkay1nY2Mtc3VwcG9ydC5wYXRjaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjllZmE0NS4uMDAwMDAwMAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNC45LzAwNjMtbmF0aXZlc2RrLWdjYy1zdXBwb3J0LnBhdGNoCisrKyAvZGV2L251bGwKQEAgLTEsMTk4ICswLDAgQEAKLUJlaW5nIGFibGUgdG8gYnVpbGQgYSBuYXRpdmVzZGsgZ2NjIGlzIHVzZWZ1bCwgcGFydGljdWxhcmx5IGluIGNhc2VzCi13aGVyZSB0aGUgaG9zdCBjb21waWxlciBtYXkgYmUgb2YgYW4gaW5jb21wYXRpYmxlIHZlcnNpb24gKG9yIGEgMzIKLWJpdCBjb21waWxlciBpcyBuZWVkZWQpLgotCi1TYWRseSwgYnVpbGRpbmcgbmF0aXZlc2RrLWdjYyBpcyBub3Qgc3RyYWlnaHQgZm9yd2FyZC4gV2UgaW5zdGFsbAotbmF0aXZlc2RrLWdjYyBpbnRvIGEgcmVsb2NhdGFibGUgbG9jYXRpb24gYW5kIHRoaXMgbWVhbnMgdGhhdCBpdHMKLWxpYnJhcnkgbG9jYXRpb25zIGNhbiBjaGFuZ2UuICJOb3JtYWwiIHN5c3Jvb3Qgc3VwcG9ydCBkb2Vzbid0IGhlbHAKLWluIHRoaXMgY2FzZSBzaW5jZSB0aGUgdmFsdWVzIG9mIHBhdGhzIGxpa2UgImxpYmRpciIgY2hhbmdlLCBub3QganVzdAotYmFzZSByb290IGRpcmVjdG9yeSBvZiB0aGUgc3lzdGVtLgotCi1JbiBvcmRlciB0byBoYW5kbGUgdGhpcyB3ZSBkbyB0d28gdGhpbmdzOgotCi1hKSBBZGQgJXIgaW50byBzcGVjIGZpbGUgbWFya3VwIHdoaWNoIGNhbiBiZSB1c2VkIGZvciBpbmplY3RlZCBwYXRocwotICAgc3VjaCBhcyBTWVNURU1MSUJTX0RJUiAoc2VlIGdjY19tdWx0aWxpYl9zZXR1cCgpKS4KLWIpIEFkZCBvdGhlciBwYXRocyB3aGljaCBuZWVkIHJlbG9jYXRpb24gaW50byBhIC5nY2NyZWxvY3ByZWZpeCBzZWN0aW9uCi0gICB3aGljaCB0aGUgcmVsb2NhdGlvbiBjb2RlIHdpbGwgbm90aWNlIGFuZCBhZGp1c3QgYXV0b21hdGljYWxseS4KLQotVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlCi1SUCAyMDE1LzcvMjgKLWRpZmYgLS1naXQgYS9nY2MvZ2NjLmMgYi9nY2MvZ2NjLmMKLWluZGV4IDVmZDNkMGEuLjJkZTI5YWEgMTAwNjQ0Ci0tLS0gYS9nY2MvZ2NjLmMKLSsrKyBiL2djYy9nY2MuYwotQEAgLTEyMCw2ICsxMjAsOCBAQCBzdGF0aWMgY29uc3QgY2hhciAqdGFyZ2V0X3N5c3RlbV9yb290ID0gVEFSR0VUX1NZU1RFTV9ST09UOwotICNlbHNlCi0gc3RhdGljIGNvbnN0IGNoYXIgKnRhcmdldF9zeXN0ZW1fcm9vdCA9IDA7Ci0gI2VuZGlmCi0rIAotK3N0YXRpYyBjaGFyIHRhcmdldF9yZWxvY2F0YWJsZV9wcmVmaXhbNDA5Nl0gX19hdHRyaWJ1dGVfXyAoKHNlY3Rpb24gKCIuZ2NjcmVsb2NwcmVmaXgiKSkpID0gU1lTVEVNTElCU19ESVI7Ci0gCi0gLyogTm9uemVybyBtZWFucyBwYXNzIHRoZSB1cGRhdGVkIHRhcmdldF9zeXN0ZW1fcm9vdCB0byB0aGUgY29tcGlsZXIuICAqLwotIAotQEAgLTM4NCw2ICszODYsNyBAQCBvciB3aXRoIGNvbnN0YW50IHRleHQgaW4gYSBzaW5nbGUgYXJndW1lbnQuCi0gICVHICAgICBwcm9jZXNzIExJQkdDQ19TUEVDIGFzIGEgc3BlYy4KLSAgJVIgICAgIE91dHB1dCB0aGUgY29uY2F0ZW5hdGlvbiBvZiB0YXJnZXRfc3lzdGVtX3Jvb3QgYW5kCi0gICAgICAgICB0YXJnZXRfc3lzcm9vdF9zdWZmaXguCi0rICVyICAgICBPdXRwdXQgdGhlIGJhc2UgcGF0aCB0YXJnZXRfcmVsb2NhdGFibGVfcHJlZml4Ci0gICVTICAgICBwcm9jZXNzIFNUQVJURklMRV9TUEVDIGFzIGEgc3BlYy4gIEEgY2FwaXRhbCBTIGlzIGFjdHVhbGx5IHVzZWQgaGVyZS4KLSAgJUUgICAgIHByb2Nlc3MgRU5ERklMRV9TUEVDIGFzIGEgc3BlYy4gIEEgY2FwaXRhbCBFIGlzIGFjdHVhbGx5IHVzZWQgaGVyZS4KLSAgJUMgICAgIHByb2Nlc3MgQ1BQX1NQRUMgYXMgYSBzcGVjLgotQEAgLTEyMTgsMTAgKzEyMjEsMTAgQEAgc3RhdGljIGNvbnN0IGNoYXIgKmdjY19saWJleGVjX3ByZWZpeDsKLSAgICBnY2NfZXhlY19wcmVmaXggaXMgc2V0IGJlY2F1c2UsIGluIHRoYXQgY2FzZSwgd2Uga25vdyB3aGVyZSB0aGUKLSAgICBjb21waWxlciBoYXMgYmVlbiBpbnN0YWxsZWQsIGFuZCB1c2UgcGF0aHMgcmVsYXRpdmUgdG8gdGhhdAotICAgIGxvY2F0aW9uIGluc3RlYWQuICAqLwotLXN0YXRpYyBjb25zdCBjaGFyICpjb25zdCBzdGFuZGFyZF9leGVjX3ByZWZpeCA9IFNUQU5EQVJEX0VYRUNfUFJFRklYOwotLXN0YXRpYyBjb25zdCBjaGFyICpjb25zdCBzdGFuZGFyZF9saWJleGVjX3ByZWZpeCA9IFNUQU5EQVJEX0xJQkVYRUNfUFJFRklYOwotLXN0YXRpYyBjb25zdCBjaGFyICpjb25zdCBzdGFuZGFyZF9iaW5kaXJfcHJlZml4ID0gU1RBTkRBUkRfQklORElSX1BSRUZJWDsKLS1zdGF0aWMgY29uc3QgY2hhciAqY29uc3Qgc3RhbmRhcmRfc3RhcnRmaWxlX3ByZWZpeCA9IFNUQU5EQVJEX1NUQVJURklMRV9QUkVGSVg7Ci0rc3RhdGljIGNoYXIgc3RhbmRhcmRfZXhlY19wcmVmaXhbNDA5Nl0gX19hdHRyaWJ1dGVfXyAoKHNlY3Rpb24gKCIuZ2NjcmVsb2NwcmVmaXgiKSkpID0gU1RBTkRBUkRfRVhFQ19QUkVGSVg7Ci0rc3RhdGljIGNoYXIgc3RhbmRhcmRfbGliZXhlY19wcmVmaXhbNDA5Nl0gX19hdHRyaWJ1dGVfXyAoKHNlY3Rpb24gKCIuZ2NjcmVsb2NwcmVmaXgiKSkpID0gU1RBTkRBUkRfTElCRVhFQ19QUkVGSVg7Ci0rc3RhdGljIGNoYXIgc3RhbmRhcmRfYmluZGlyX3ByZWZpeFs0MDk2XSBfX2F0dHJpYnV0ZV9fICgoc2VjdGlvbiAoIi5nY2NyZWxvY3ByZWZpeCIpKSkgPSBTVEFOREFSRF9CSU5ESVJfUFJFRklYOwotK3N0YXRpYyBjaGFyICpjb25zdCBzdGFuZGFyZF9zdGFydGZpbGVfcHJlZml4ID0gU1RBTkRBUkRfU1RBUlRGSUxFX1BSRUZJWDsKLSAKLSAvKiBGb3IgbmF0aXZlIGNvbXBpbGVycywgdGhlc2UgYXJlIHdlbGwta25vd24gcGF0aHMgY29udGFpbmluZwotICAgIGNvbXBvbmVudHMgdGhhdCBtYXkgYmUgcHJvdmlkZWQgYnkgdGhlIHN5c3RlbS4gIEZvciBjcm9zcwotQEAgLTEyMjksOSArMTIzMiw5IEBAIHN0YXRpYyBjb25zdCBjaGFyICpjb25zdCBzdGFuZGFyZF9zdGFydGZpbGVfcHJlZml4ID0gU1RBTkRBUkRfU1RBUlRGSUxFX1BSRUZJWDsKLSBzdGF0aWMgY29uc3QgY2hhciAqbWRfZXhlY19wcmVmaXggPSBNRF9FWEVDX1BSRUZJWDsKLSBzdGF0aWMgY29uc3QgY2hhciAqbWRfc3RhcnRmaWxlX3ByZWZpeCA9IE1EX1NUQVJURklMRV9QUkVGSVg7Ci0gc3RhdGljIGNvbnN0IGNoYXIgKm1kX3N0YXJ0ZmlsZV9wcmVmaXhfMSA9IE1EX1NUQVJURklMRV9QUkVGSVhfMTsKLS1zdGF0aWMgY29uc3QgY2hhciAqY29uc3Qgc3RhbmRhcmRfc3RhcnRmaWxlX3ByZWZpeF8xCi0rc3RhdGljIGNoYXIgc3RhbmRhcmRfc3RhcnRmaWxlX3ByZWZpeF8xWzQwOTZdIF9fYXR0cmlidXRlX18gKChzZWN0aW9uICgiLmdjY3JlbG9jcHJlZml4IikpKQotICAgPSBTVEFOREFSRF9TVEFSVEZJTEVfUFJFRklYXzE7Ci0tc3RhdGljIGNvbnN0IGNoYXIgKmNvbnN0IHN0YW5kYXJkX3N0YXJ0ZmlsZV9wcmVmaXhfMgotK3N0YXRpYyBjaGFyIHN0YW5kYXJkX3N0YXJ0ZmlsZV9wcmVmaXhfMls0MDk2XSBfX2F0dHJpYnV0ZV9fICgoc2VjdGlvbiAoIi5nY2NyZWxvY3ByZWZpeCIpKSkKLSAgID0gU1RBTkRBUkRfU1RBUlRGSUxFX1BSRUZJWF8yOwotIAotIC8qIEEgcmVsYXRpdmUgcGF0aCB0byBiZSB1c2VkIGluIGZpbmRpbmcgdGhlIGxvY2F0aW9uIG9mIHRvb2xzCi1AQCAtNTMwNSw2ICs1MzA4LDExIEBAIGRvX3NwZWNfMSAoY29uc3QgY2hhciAqc3BlYywgaW50IGluc3dpdGNoLCBjb25zdCBjaGFyICpzb2Z0X21hdGNoZWRfcGFydCkKLSAJICAgICAgfQotIAkgICAgYnJlYWs7Ci0gCi0rICAgICAgICAgIGNhc2UgJ3InOgotKyAgICAgICAgICAgICAgb2JzdGFja19ncm93ICgmb2JzdGFjaywgdGFyZ2V0X3JlbG9jYXRhYmxlX3ByZWZpeCwKLSsJCSAgICAgIHN0cmxlbiAodGFyZ2V0X3JlbG9jYXRhYmxlX3ByZWZpeCkpOwotKyAgICAgICAgICAgIGJyZWFrOwotKwotIAkgIGNhc2UgJ1MnOgotIAkgICAgdmFsdWUgPSBkb19zcGVjXzEgKHN0YXJ0ZmlsZV9zcGVjLCAwLCBOVUxMKTsKLSAJICAgIGlmICh2YWx1ZSAhPSAwKQotCi1kaWZmIC0tZ2l0IGEvZ2NjL2NwcGRlZmF1bHQuYyBiL2djYy9jcHBkZWZhdWx0LmMKLWluZGV4IGRhZDY5ZTYuLmNmNDNmMjggMTAwNjQ0Ci0tLS0gYS9nY2MvY3BwZGVmYXVsdC5jCi0rKysgYi9nY2MvY3BwZGVmYXVsdC5jCi1AQCAtMzUsNiArMzUsMzAgQEAKLSAjIHVuZGVmIENST1NTX0lOQ0xVREVfRElSCi0gI2VuZGlmCi0gCi0rc3RhdGljIGNoYXIgR1BMVVNQTFVTX0lOQ0xVREVfRElSVkFSWzQwOTZdIF9fYXR0cmlidXRlX18gKChzZWN0aW9uICgiLmdjY3JlbG9jcHJlZml4IikpKSA9IEdQTFVTUExVU19JTkNMVURFX0RJUjsKLStzdGF0aWMgY2hhciBHQ0NfSU5DTFVERV9ESVJWQVJbNDA5Nl0gX19hdHRyaWJ1dGVfXyAoKHNlY3Rpb24gKCIuZ2NjcmVsb2NwcmVmaXgiKSkpID0gR0NDX0lOQ0xVREVfRElSOwotK3N0YXRpYyBjaGFyIEdQTFVTUExVU19UT09MX0lOQ0xVREVfRElSVkFSWzQwOTZdIF9fYXR0cmlidXRlX18gKChzZWN0aW9uICgiLmdjY3JlbG9jcHJlZml4IikpKSA9IEdQTFVTUExVU19UT09MX0lOQ0xVREVfRElSOwotK3N0YXRpYyBjaGFyIEdQTFVTUExVU19CQUNLV0FSRF9JTkNMVURFX0RJUlZBUls0MDk2XSBfX2F0dHJpYnV0ZV9fICgoc2VjdGlvbiAoIi5nY2NyZWxvY3ByZWZpeCIpKSkgPSBHUExVU1BMVVNfQkFDS1dBUkRfSU5DTFVERV9ESVI7Ci0rc3RhdGljIGNoYXIgU1RBTkRBUkRfU1RBUlRGSUxFX1BSRUZJWF8yVkFSWzQwOTZdIF9fYXR0cmlidXRlX18gKChzZWN0aW9uICgiLmdjY3JlbG9jcHJlZml4IikpKSA9IFNUQU5EQVJEX1NUQVJURklMRV9QUkVGSVhfMiBHQ0NfSU5DTFVERV9TVUJESVJfVEFSR0VUOwotKyNpZmRlZiBMT0NBTF9JTkNMVURFX0RJUgotK3N0YXRpYyBjaGFyIExPQ0FMX0lOQ0xVREVfRElSVkFSWzQwOTZdIF9fYXR0cmlidXRlX18gKChzZWN0aW9uICgiLmdjY3JlbG9jcHJlZml4IikpKSA9IExPQ0FMX0lOQ0xVREVfRElSOwotKyNlbmRpZgotKyNpZmRlZiBQUkVGSVhfSU5DTFVERV9ESVIKLStzdGF0aWMgY2hhciBQUkVGSVhfSU5DTFVERV9ESVJWQVJbNDA5Nl0gX19hdHRyaWJ1dGVfXyAoKHNlY3Rpb24gKCIuZ2NjcmVsb2NwcmVmaXgiKSkpID0gUFJFRklYX0lOQ0xVREVfRElSOwotKyNlbmRpZgotKyNpZmRlZiBGSVhFRF9JTkNMVURFX0RJUgotK3N0YXRpYyBjaGFyIEZJWEVEX0lOQ0xVREVfRElSVkFSWzQwOTZdIF9fYXR0cmlidXRlX18gKChzZWN0aW9uICgiLmdjY3JlbG9jcHJlZml4IikpKSA9IEZJWEVEX0lOQ0xVREVfRElSOwotKyNlbmRpZgotKyNpZmRlZiBDUk9TU19JTkNMVURFX0RJUgotK3N0YXRpYyBjaGFyIENST1NTX0lOQ0xVREVfRElSVkFSWzQwOTZdIF9fYXR0cmlidXRlX18gKChzZWN0aW9uICgiLmdjY3JlbG9jcHJlZml4IikpKSA9IENST1NTX0lOQ0xVREVfRElSOwotKyNlbmRpZgotKyNpZmRlZiBUT09MX0lOQ0xVREVfRElSCi0rc3RhdGljIGNoYXIgVE9PTF9JTkNMVURFX0RJUlZBUls0MDk2XSBfX2F0dHJpYnV0ZV9fICgoc2VjdGlvbiAoIi5nY2NyZWxvY3ByZWZpeCIpKSkgPSBUT09MX0lOQ0xVREVfRElSOwotKyNlbmRpZgotKyNpZmRlZiBOQVRJVkVfU1lTVEVNX0hFQURFUl9ESVIKLStzdGF0aWMgY2hhciBOQVRJVkVfU1lTVEVNX0hFQURFUl9ESVJWQVJbNDA5Nl0gX19hdHRyaWJ1dGVfXyAoKHNlY3Rpb24gKCIuZ2NjcmVsb2NwcmVmaXgiKSkpID0gTkFUSVZFX1NZU1RFTV9IRUFERVJfRElSOwotKyNlbmRpZgotKwotIGNvbnN0IHN0cnVjdCBkZWZhdWx0X2luY2x1ZGUgY3BwX2luY2x1ZGVfZGVmYXVsdHNbXQotICNpZmRlZiBJTkNMVURFX0RFRkFVTFRTCi0gPSBJTkNMVURFX0RFRkFVTFRTOwotQEAgLTQyLDM4ICs2NiwzOCBAQCBjb25zdCBzdHJ1Y3QgZGVmYXVsdF9pbmNsdWRlIGNwcF9pbmNsdWRlX2RlZmF1bHRzW10KLSA9IHsKLSAjaWZkZWYgR1BMVVNQTFVTX0lOQ0xVREVfRElSCi0gICAgIC8qIFBpY2sgdXAgR05VIEMrKyBnZW5lcmljIGluY2x1ZGUgZmlsZXMuICAqLwotLSAgICB7IEdQTFVTUExVU19JTkNMVURFX0RJUiwgIkcrKyIsIDEsIDEsCi0rICAgIHsgR1BMVVNQTFVTX0lOQ0xVREVfRElSVkFSLCAiRysrIiwgMSwgMSwKLSAgICAgICBHUExVU1BMVVNfSU5DTFVERV9ESVJfQUREX1NZU1JPT1QsIDAgfSwKLSAjZW5kaWYKLSAjaWZkZWYgR1BMVVNQTFVTX1RPT0xfSU5DTFVERV9ESVIKLSAgICAgLyogUGljayB1cCBHTlUgQysrIHRhcmdldC1kZXBlbmRlbnQgaW5jbHVkZSBmaWxlcy4gICovCi0tICAgIHsgR1BMVVNQTFVTX1RPT0xfSU5DTFVERV9ESVIsICJHKysiLCAxLCAxLAotKyAgICB7IEdQTFVTUExVU19UT09MX0lOQ0xVREVfRElSVkFSLCAiRysrIiwgMSwgMSwKLSAgICAgICBHUExVU1BMVVNfSU5DTFVERV9ESVJfQUREX1NZU1JPT1QsIDEgfSwKLSAjZW5kaWYKLSAjaWZkZWYgR1BMVVNQTFVTX0JBQ0tXQVJEX0lOQ0xVREVfRElSCi0gICAgIC8qIFBpY2sgdXAgR05VIEMrKyBiYWNrd2FyZCBhbmQgZGVwcmVjYXRlZCBpbmNsdWRlIGZpbGVzLiAgKi8KLS0gICAgeyBHUExVU1BMVVNfQkFDS1dBUkRfSU5DTFVERV9ESVIsICJHKysiLCAxLCAxLAotKyAgICB7IEdQTFVTUExVU19CQUNLV0FSRF9JTkNMVURFX0RJUlZBUiwgIkcrKyIsIDEsIDEsCi0gICAgICAgR1BMVVNQTFVTX0lOQ0xVREVfRElSX0FERF9TWVNST09ULCAwIH0sCi0gI2VuZGlmCi0gI2lmZGVmIEdDQ19JTkNMVURFX0RJUgotICAgICAvKiBUaGlzIGlzIHRoZSBkaXIgZm9yIGdjYydzIHByaXZhdGUgaGVhZGVycy4gICovCi0tICAgIHsgR0NDX0lOQ0xVREVfRElSLCAiR0NDIiwgMCwgMCwgMCwgMCB9LAotKyAgICB7IEdDQ19JTkNMVURFX0RJUlZBUiwgIkdDQyIsIDAsIDAsIDAsIDAgfSwKLSAjZW5kaWYKLSAjaWZkZWYgR0NDX0lOQ0xVREVfU1VCRElSX1RBUkdFVAotICAgICAvKiBUaGlzIGlzIHRoZSBkaXIgZm9yIGdjYydzIHByaXZhdGUgaGVhZGVycyB1bmRlciB0aGUgc3BlY2lmaWVkIHN5c3Jvb3QuICAqLwotLSAgICB7IFNUQU5EQVJEX1NUQVJURklMRV9QUkVGSVhfMiBHQ0NfSU5DTFVERV9TVUJESVJfVEFSR0VULCAiR0NDIiwgMCwgMCwgMSwgMCB9LAotKyAgICB7IFNUQU5EQVJEX1NUQVJURklMRV9QUkVGSVhfMlZBUiwgIkdDQyIsIDAsIDAsIDEsIDAgfSwKLSAjZW5kaWYKLSAjaWZkZWYgTE9DQUxfSU5DTFVERV9ESVIKLSAgICAgLyogL3Vzci9sb2NhbC9pbmNsdWRlIGNvbWVzIGJlZm9yZSB0aGUgZml4aW5jbHVkZWQgaGVhZGVyIGZpbGVzLiAgKi8KLS0gICAgeyBMT0NBTF9JTkNMVURFX0RJUiwgMCwgMCwgMSwgMSwgMiB9LAotLSAgICB7IExPQ0FMX0lOQ0xVREVfRElSLCAwLCAwLCAxLCAxLCAwIH0sCi0rICAgIHsgTE9DQUxfSU5DTFVERV9ESVJWQVIsIDAsIDAsIDEsIDEsIDIgfSwKLSsgICAgeyBMT0NBTF9JTkNMVURFX0RJUlZBUiwgMCwgMCwgMSwgMSwgMCB9LAotICNlbmRpZgotICNpZmRlZiBQUkVGSVhfSU5DTFVERV9ESVIKLS0gICAgeyBQUkVGSVhfSU5DTFVERV9ESVIsIDAsIDAsIDEsIDAsIDAgfSwKLSsgICAgeyBQUkVGSVhfSU5DTFVERV9ESVJWQVIsIDAsIDAsIDEsIDAsIDAgfSwKLSAjZW5kaWYKLSAjaWZkZWYgRklYRURfSU5DTFVERV9ESVIKLSAgICAgLyogVGhpcyBpcyB0aGUgZGlyIGZvciBmaXhpbmNsdWRlcy4gICovCi0tICAgIHsgRklYRURfSU5DTFVERV9ESVIsICJHQ0MiLCAwLCAwLCAwLAotKyAgICB7IEZJWEVEX0lOQ0xVREVfRElSVkFSLCAiR0NDIiwgMCwgMCwgMCwKLSAgICAgICAvKiBBIG11bHRpbGliIHN1ZmZpeCBuZWVkcyBhZGRpbmcgaWYgZGlmZmVyZW50IG11bHRpbGlicyB1c2UKLSAJIGRpZmZlcmVudCBoZWFkZXJzLiAgKi8KLSAjaWZkZWYgU1lTUk9PVF9IRUFERVJTX1NVRkZJWF9TUEVDCi1AQCAtODUsMTYgKzEwOSwxNiBAQCBjb25zdCBzdHJ1Y3QgZGVmYXVsdF9pbmNsdWRlIGNwcF9pbmNsdWRlX2RlZmF1bHRzW10KLSAjZW5kaWYKLSAjaWZkZWYgQ1JPU1NfSU5DTFVERV9ESVIKLSAgICAgLyogT25lIHBsYWNlIHRoZSB0YXJnZXQgc3lzdGVtJ3MgaGVhZGVycyBtaWdodCBiZS4gICovCi0tICAgIHsgQ1JPU1NfSU5DTFVERV9ESVIsICJHQ0MiLCAwLCAwLCAwLCAwIH0sCi0rICAgIHsgQ1JPU1NfSU5DTFVERV9ESVJWQVIsICJHQ0MiLCAwLCAwLCAwLCAwIH0sCi0gI2VuZGlmCi0gI2lmZGVmIFRPT0xfSU5DTFVERV9ESVIKLSAgICAgLyogQW5vdGhlciBwbGFjZSB0aGUgdGFyZ2V0IHN5c3RlbSdzIGhlYWRlcnMgbWlnaHQgYmUuICAqLwotLSAgICB7IFRPT0xfSU5DTFVERV9ESVIsICJCSU5VVElMUyIsIDAsIDEsIDAsIDAgfSwKLSsgICAgeyBUT09MX0lOQ0xVREVfRElSVkFSLCAiQklOVVRJTFMiLCAwLCAxLCAwLCAwIH0sCi0gI2VuZGlmCi0gI2lmZGVmIE5BVElWRV9TWVNURU1fSEVBREVSX0RJUgotICAgICAvKiAvdXNyL2luY2x1ZGUgY29tZXMgZGVhZCBsYXN0LiAgKi8KLS0gICAgeyBOQVRJVkVfU1lTVEVNX0hFQURFUl9ESVIsIE5BVElWRV9TWVNURU1fSEVBREVSX0NPTVBPTkVOVCwgMCwgMCwgMSwgMiB9LAotLSAgICB7IE5BVElWRV9TWVNURU1fSEVBREVSX0RJUiwgTkFUSVZFX1NZU1RFTV9IRUFERVJfQ09NUE9ORU5ULCAwLCAwLCAxLCAwIH0sCi0rICAgIHsgTkFUSVZFX1NZU1RFTV9IRUFERVJfRElSVkFSLCBOQVRJVkVfU1lTVEVNX0hFQURFUl9DT01QT05FTlQsIDAsIDAsIDEsIDIgfSwKLSsgICAgeyBOQVRJVkVfU1lTVEVNX0hFQURFUl9ESVJWQVIsIE5BVElWRV9TWVNURU1fSEVBREVSX0NPTVBPTkVOVCwgMCwgMCwgMSwgMCB9LAotICNlbmRpZgotICAgICB7IDAsIDAsIDAsIDAsIDAsIDAgfQotICAgfTsKLWRpZmYgLS1naXQgYS9nY2MvY3BwZGVmYXVsdC5oIGIvZ2NjL2NwcGRlZmF1bHQuaAotaW5kZXggMzBiNmZlZC4uMmVmOTZiNyAxMDA2NDQKLS0tLSBhL2djYy9jcHBkZWZhdWx0LmgKLSsrKyBiL2djYy9jcHBkZWZhdWx0LmgKLUBAIC0zMyw3ICszMyw4IEBACi0gCi0gc3RydWN0IGRlZmF1bHRfaW5jbHVkZQotIHsKLS0gIGNvbnN0IGNoYXIgKmNvbnN0IGZuYW1lOwkvKiBUaGUgbmFtZSBvZiB0aGUgZGlyZWN0b3J5LiAgKi8KLSsgIGNvbnN0IGNoYXIgKmZuYW1lOyAgICAgLyogVGhlIG5hbWUgb2YgdGhlIGRpcmVjdG9yeS4gICovCi0rCi0gICBjb25zdCBjaGFyICpjb25zdCBjb21wb25lbnQ7CS8qIFRoZSBjb21wb25lbnQgY29udGFpbmluZyB0aGUgZGlyZWN0b3J5Ci0gCQkJCSAgIChzZWUgdXBkYXRlX3BhdGggaW4gcHJlZml4LmMpICovCi0gICBjb25zdCBjaGFyIGNwbHVzcGx1czsJCS8qIE9ubHkgbG9vayBoZXJlIGlmIHdlJ3JlIGNvbXBpbGluZyBDKysuICAqLwpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTQuOS8wMDY0LWhhbmRsZS10YXJnZXQtc3lzcm9vdC1tdWx0aWxpYi5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy00LjkvMDA2NC1oYW5kbGUtdGFyZ2V0LXN5c3Jvb3QtbXVsdGlsaWIucGF0Y2gKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDUzNTY5ODQuLjAwMDAwMDAKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTQuOS8wMDY0LWhhbmRsZS10YXJnZXQtc3lzcm9vdC1tdWx0aWxpYi5wYXRjaAorKysgL2Rldi9udWxsCkBAIC0xLDg4ICswLDAgQEAKLVNlYXJjaCB0YXJnZXQgc3lzcm9vdCBnY2MgdmVyc2lvbiBzcGVjaWZpYyBkaXJzIHdpdGggbXVsdGlsaWIuCi0KLVdlIGluc3RhbGwgdGhlIGdjYyBsaWJyYXJpZXMgKHN1Y2ggYXMgY3J0YmVnaW4ucCkgaW50bwotPHN5c3Jvb3Q+PGxpYmRpcj4vPHRhcmdldC1zeXM+LzUuMi4wLwotd2hpY2ggaXMgYSBkZWZhdWx0IHNlYXJjaCBwYXRoIGZvciBHQ0MgKGFrYSBtdWx0aV9zdWZmaXggaW4gdGhlIAotY29kZSBiZWxvdykuIDx0YXJnZXQtc3lzPiBpcyAnbWFjaGluZScgaW4gZ2NjJ3MgdGVybWlub2xvZ3kuIFdlIHVzZQotdGhlc2UgZGlyZWN0b3JpZXMgc28gdGhhdCBtdWx0aXBsZSBnY2MgdmVyc2lvbnMgY291bGQgaW4gdGhlb3J5IAotY28tZXhpc3Qgb24gdGFyZ2V0LgotCi1XZSBvbmx5IHdhbnQgdG8gYnVpbGQgb25lIGdjYy1jcm9zcy1jYW5hZGlhbiBwZXIgYXJjaCBhbmQgaGF2ZSB0aGlzIHdvcmsgCi1mb3IgYWxsIG11bHRpbGlicy4gPHRhcmdldC1zeXM+IGNhbiBiZSBoYW5kbGVkIGJ5IG1hcHBpbmcgdGhlIG11bHRpbGliCi08dGFyZ2V0LXN5cz4gdG8gdGhlIG9uZSB1c2VkIGJ5IGdjYy1jcm9zcy1jYW5hZGlhbiwgZS5nLiBtaXBzNjQtcG9sa21sbGliMzItbGludXggCi1pcyBzeW1saW5rZWQgdG8gYnkgbWlwczY0LXBva3ktbGludXguCi0KLVRoZSBkZWZhdWx0IGdjYyBzZWFyY2ggcGF0aCBpbiB0aGUgdGFyZ2V0IHN5c3Jvb3QgZm9yIGEgImxpYjY0IiBtdXRsaWxpYiBpczoKLQotPHN5c3Jvb3Q+L2xpYjMyL21pcHM2NC1wb2t5LWxpbnV4LzUuMi4wLwotPHN5c3Jvb3Q+L2xpYjMyLy4uL2xpYjY0LwotPHN5c3Jvb3Q+L3Vzci9saWIzMi9taXBzNjQtcG9reS1saW51eC81LjIuMC8KLTxzeXNyb290Pi91c3IvbGliMzIvLi4vbGliNjQvCi08c3lzcm9vdD4vbGliMzIvCi08c3lzcm9vdD4vdXNyL2xpYjMyLwotCi13aGljaCBtZWFucyB0aGF0IHRoZSBsaWIzMiBjcnRiZWdpbi5vIHdpbGwgYmUgZm91bmQgYW5kIHRoZSBsaWI2NCBvbmVzCi13aWxsIG5vdCB3aGljaCBsZWFkcyB0byBjb21waWxlciBmYWlsdXJlcy4KLQotVGhpcyBwYXRjaCBpbmplY3RzIGEgbXVsdGlsaWIgdmVyc2lvbiBvZiB0aGF0IHBhdGggZmlyc3Qgc28gdGhlIGxpYjY0Ci1iaW5hcmllcyBjYW4gYmUgZm91bmQgZmlyc3QuIFdpdGggdGhpcyBjaGFuZ2UgdGhlIHNlYXJjaCBwYXRoIGJlY29tZXM6Ci0KLTxzeXNyb290Pi9saWIzMi8uLi9saWI2NC9taXBzNjQtcG9reS1saW51eC81LjIuMC8KLTxzeXNyb290Pi9saWIzMi9taXBzNjQtcG9reS1saW51eC81LjIuMC8KLTxzeXNyb290Pi9saWIzMi8uLi9saWI2NC8KLTxzeXNyb290Pi91c3IvbGliMzIvLi4vbGliNjQvbWlwczY0LXBva3ktbGludXgvNS4yLjAvCi08c3lzcm9vdD4vdXNyL2xpYjMyL21pcHM2NC1wb2t5LWxpbnV4LzUuMi4wLwotPHN5c3Jvb3Q+L3Vzci9saWIzMi8uLi9saWI2NC8KLTxzeXNyb290Pi9saWIzMi8KLTxzeXNyb290Pi91c3IvbGliMzIvCi0KLVVwc3RyZWFtLVN0YXR1czogUGVuZGluZwotUlAgMjAxNS83LzMxCi0KLUluZGV4OiBnY2MtNS4yLjAvZ2NjL2djYy5jCi09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLS0gZ2NjLTUuMi4wLm9yaWcvZ2NjL2djYy5jCi0rKysgZ2NjLTUuMi4wL2djYy9nY2MuYwotQEAgLTIzMDUsNyArMjMwNSw3IEBAIGZvcl9lYWNoX3BhdGggKGNvbnN0IHN0cnVjdCBwYXRoX3ByZWZpeAotICAgICAgIGlmIChwYXRoID09IE5VTEwpCi0gCXsKLSAJICBsZW4gPSBwYXRocy0+bWF4X2xlbiArIGV4dHJhX3NwYWNlICsgMTsKLS0JICBsZW4gKz0gTUFYIChNQVggKHN1ZmZpeF9sZW4sIG11bHRpX29zX2Rpcl9sZW4pLCBtdWx0aWFyY2hfbGVuKTsKLSsJICBsZW4gKz0gTUFYICgoc3VmZml4X2xlbiArIG11bHRpX29zX2Rpcl9sZW4pLCBtdWx0aWFyY2hfbGVuKTsKLSAJICBwYXRoID0gWE5FV1ZFQyAoY2hhciwgbGVuKTsKLSAJfQotIAotQEAgLTIzMTcsNiArMjMxNywzMyBAQCBmb3JfZWFjaF9wYXRoIChjb25zdCBzdHJ1Y3QgcGF0aF9wcmVmaXgKLSAJICAvKiBMb29rIGZpcnN0IGluIE1BQ0hJTkUvVkVSU0lPTiBzdWJkaXJlY3RvcnkuICAqLwotIAkgIGlmICghc2tpcF9tdWx0aV9kaXIpCi0gCSAgICB7Ci0rCSAgICAgIGlmICghKHBsLT5vc19tdWx0aWxpYiA/IHNraXBfbXVsdGlfb3NfZGlyIDogc2tpcF9tdWx0aV9kaXIpKQotKwkgICAgICAgIHsKLSsJICAgICAgICAgIGNvbnN0IGNoYXIgKnRoaXNfbXVsdGk7Ci0rCSAgICAgICAgICBzaXplX3QgdGhpc19tdWx0aV9sZW47Ci0rCi0rCSAgICAgICAgICBpZiAocGwtPm9zX211bHRpbGliKQotKwkJICAgIHsKLSsJCSAgICAgIHRoaXNfbXVsdGkgPSBtdWx0aV9vc19kaXI7Ci0rCQkgICAgICB0aGlzX211bHRpX2xlbiA9IG11bHRpX29zX2Rpcl9sZW47Ci0rCQkgICAgfQotKwkgICAgICAgICAgZWxzZQotKwkJICAgIHsKLSsJCSAgICAgIHRoaXNfbXVsdGkgPSBtdWx0aV9kaXI7Ci0rCQkgICAgICB0aGlzX211bHRpX2xlbiA9IG11bHRpX2Rpcl9sZW47Ci0rCQkgICAgfQotKwotKwkgICAgICAgICAgLyogTG9vayBpbiBtdWx0aWxpYiBNQUNISU5FL1ZFUlNJT04gc3ViZGlyZWN0b3J5IGZpcnN0ICovCi0rCSAgICAgICAgICBpZiAodGhpc19tdWx0aV9sZW4pCi0rCSAgICAgICAgICAgIHsKLSsJCSAgICAgIG1lbWNweSAocGF0aCArIGxlbiwgdGhpc19tdWx0aSwgdGhpc19tdWx0aV9sZW4gKyAxKTsKLSsJICAgICAgICAgICAgICBtZW1jcHkgKHBhdGggKyBsZW4gKyB0aGlzX211bHRpX2xlbiwgbXVsdGlfc3VmZml4LCBzdWZmaXhfbGVuICsgMSk7Ci0rCSAgICAgICAgICAgICAgcmV0ID0gY2FsbGJhY2sgKHBhdGgsIGNhbGxiYWNrX2luZm8pOwotKwkgICAgICAgICAgICAgICAgaWYgKHJldCkKLSsJCSAgICAgICAgICBicmVhazsKLSsJICAgICAgICAgICAgfQotKwkgICAgICAgIH0KLSsKLSAJICAgICAgbWVtY3B5IChwYXRoICsgbGVuLCBtdWx0aV9zdWZmaXgsIHN1ZmZpeF9sZW4gKyAxKTsKLSAJICAgICAgcmV0ID0gY2FsbGJhY2sgKHBhdGgsIGNhbGxiYWNrX2luZm8pOwotIAkgICAgICBpZiAocmV0KQpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTQuOS8wMDY1LWdjYy00ODMtdW5pdmVyc2FsLWluaXRpYWxpemVyLW5vLXdhcm5pbmcucGF0Y2ggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNC45LzAwNjUtZ2NjLTQ4My11bml2ZXJzYWwtaW5pdGlhbGl6ZXItbm8td2FybmluZy5wYXRjaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZmRlMjI3Yi4uMDAwMDAwMAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNC45LzAwNjUtZ2NjLTQ4My11bml2ZXJzYWwtaW5pdGlhbGl6ZXItbm8td2FybmluZy5wYXRjaAorKysgL2Rldi9udWxsCkBAIC0xLDEwNyArMCwwIEBACi1VcHN0cmVhbS1TdGF0dXM6IEJhY2twb3J0Ci0KLVNpZ25lZC1vZmYtYnk6IEthaSBLYW5nIDxrYWkua2FuZ0B3aW5kcml2ZXIuY29tPgotLS0tCi1GaXggZm9yIGh0dHBzOi8vZ2NjLmdudS5vcmcvYnVnemlsbGEvc2hvd19idWcuY2dpP2lkPTUzMTE5Ci13cm9uZyB3YXJuaW5nIHdoZW4gdXNpbmcgdGhlIHVuaXZlcnNhbCB6ZXJvIGluaXRpYWxpemVyIHswfQotCi1CYWNrcG9ydGVkIHRvIEdDQyA0LjguMwotCi1TdWJqZWN0OiAyMDE0LTA2LTA1ICBTLiBHaWxsZXMgIDxzZ2lsbGVzQHRlcnBtYWlsLnVtZC5lZHU+Ci1YLUdpdC1Vcmw6IGh0dHA6Ly9yZXBvLm9yLmN6L3cvb2ZmaWNpYWwtZ2NjLmdpdC9jb21taXRkaWZmX3BsYWluLzk1Y2RmM2ZkZjJkNDQwZWI3Nzc1ZGVmOGUzNWFiOTcwNjUxYzMzZDk/aHA9MTRhMzA5M2U5OTQzOTM3Y2JjNjNkZmJmNGQ1MWNhNjBmODMyNWIyOQotZ2l0LXN2bi1pZDogc3ZuK3NzaDovL2djYy5nbnUub3JnL3N2bi9nY2MvdHJ1bmtAMjExMjg5IDEzOGJjNzVkLTBkMDQtMDQxMC05NjFmLTgyZWU3MmIwNTRhNAotCi0tLS0gZ2NjLTQuOC4zLm9yZy9nY2MvYy9jLXR5cGVjay5jCTIwMTQtMDgtMDMgMjA6NTI6MDkuMjU3MDQyMTM3ICswMjAwCi0rKysgZ2NjLTQuOC4zL2djYy9jL2MtdHlwZWNrLmMJMjAxNC0wOC0wMyAyMDo1NzoxMC42NDUwNDI2MTQgKzAyMDAKLUBAIC02Miw5ICs2Miw5IEBACi0gICAgaWYgZXhwci5vcmlnaW5hbF9jb2RlID09IFNJWkVPRl9FWFBSLiAgKi8KLSB0cmVlIGNfbGFzdF9zaXplb2ZfYXJnOwotIAotLS8qIE5vbnplcm8gaWYgd2UndmUgYWxyZWFkeSBwcmludGVkIGEgIm1pc3NpbmcgYnJhY2VzIGFyb3VuZCBpbml0aWFsaXplciIKLS0gICBtZXNzYWdlIHdpdGhpbiB0aGlzIGluaXRpYWxpemVyLiAgKi8KLS1zdGF0aWMgaW50IG1pc3NpbmdfYnJhY2VzX21lbnRpb25lZDsKLSsvKiBOb256ZXJvIGlmIHdlIG1pZ2h0IG5lZWQgdG8gcHJpbnQgYSAibWlzc2luZyBicmFjZXMgYXJvdW5kCi0rICAgaW5pdGlhbGl6ZXIiIG1lc3NhZ2Ugd2l0aGluIHRoaXMgaW5pdGlhbGl6ZXIuICAqLwotK3N0YXRpYyBpbnQgZm91bmRfbWlzc2luZ19icmFjZXM7Ci0gCi0gc3RhdGljIGludCByZXF1aXJlX2NvbnN0YW50X3ZhbHVlOwotIHN0YXRpYyBpbnQgcmVxdWlyZV9jb25zdGFudF9lbGVtZW50czsKLUBAIC02Mzc5LDYgKzYzNzksOSBAQAotIC8qIDEgaWYgdGhpcyBjb25zdHJ1Y3RvciBpcyBlcnJvbmVvdXMgc28gZmFyLiAgKi8KLSBzdGF0aWMgaW50IGNvbnN0cnVjdG9yX2Vycm9uZW91czsKLSAKLSsvKiAxIGlmIHRoaXMgY29uc3RydWN0b3IgaXMgdGhlIHVuaXZlcnNhbCB6ZXJvIGluaXRpYWxpemVyIHsgMCB9LiAgKi8KLStzdGF0aWMgaW50IGNvbnN0cnVjdG9yX3plcm9pbml0OwotKwotIC8qIFN0cnVjdHVyZSBmb3IgbWFuYWdpbmcgcGVuZGluZyBpbml0aWFsaXplciBlbGVtZW50cywgb3JnYW5pemVkIGFzIGFuCi0gICAgQVZMIHRyZWUuICAqLwotIAotQEAgLTY1NDAsNyArNjU0Myw3IEBACi0gICBjb25zdHJ1Y3Rvcl9zdGFjayA9IDA7Ci0gICBjb25zdHJ1Y3Rvcl9yYW5nZV9zdGFjayA9IDA7Ci0gCi0tICBtaXNzaW5nX2JyYWNlc19tZW50aW9uZWQgPSAwOwotKyAgZm91bmRfbWlzc2luZ19icmFjZXMgPSAwOwotIAotICAgc3BlbGxpbmdfYmFzZSA9IDA7Ci0gICBzcGVsbGluZ19zaXplID0gMDsKLUBAIC02NjM1LDYgKzY2MzgsNyBAQAotICAgY29uc3RydWN0b3JfdHlwZSA9IHR5cGU7Ci0gICBjb25zdHJ1Y3Rvcl9pbmNyZW1lbnRhbCA9IDE7Ci0gICBjb25zdHJ1Y3Rvcl9kZXNpZ25hdGVkID0gMDsKLSsgIGNvbnN0cnVjdG9yX3plcm9pbml0ID0gMTsKLSAgIGRlc2lnbmF0b3JfZGVwdGggPSAwOwotICAgZGVzaWduYXRvcl9lcnJvbmVvdXMgPSAwOwotIAotQEAgLTY4MzIsMTEgKzY4MzYsOCBAQAotIAlzZXRfbm9uaW5jcmVtZW50YWxfaW5pdCAoYnJhY2VkX2luaXRfb2JzdGFjayk7Ci0gICAgIH0KLSAKLS0gIGlmIChpbXBsaWNpdCA9PSAxICYmIHdhcm5fbWlzc2luZ19icmFjZXMgJiYgIW1pc3NpbmdfYnJhY2VzX21lbnRpb25lZCkKLS0gICAgewotLSAgICAgIG1pc3NpbmdfYnJhY2VzX21lbnRpb25lZCA9IDE7Ci0tICAgICAgd2FybmluZ19pbml0IChPUFRfV21pc3NpbmdfYnJhY2VzLCAibWlzc2luZyBicmFjZXMgYXJvdW5kIGluaXRpYWxpemVyIik7Ci0tICAgIH0KLSsgIGlmIChpbXBsaWNpdCA9PSAxKQotKyAgICBmb3VuZF9taXNzaW5nX2JyYWNlcyA9IDE7Ci0gCi0gICBpZiAoVFJFRV9DT0RFIChjb25zdHJ1Y3Rvcl90eXBlKSA9PSBSRUNPUkRfVFlQRQotIAkgICB8fCBUUkVFX0NPREUgKGNvbnN0cnVjdG9yX3R5cGUpID09IFVOSU9OX1RZUEUpCi1AQCAtNjk2OSwxNiArNjk3MCwyMyBAQAotIAl9Ci0gICAgIH0KLSAKLSsgIGlmICh2ZWNfc2FmZV9sZW5ndGggKGNvbnN0cnVjdG9yX2VsZW1lbnRzKSAhPSAxKQotKyAgICBjb25zdHJ1Y3Rvcl96ZXJvaW5pdCA9IDA7Ci0rCi0rICAvKiBXYXJuIHdoZW4gc29tZSBzdHJ1Y3RzIGFyZSBpbml0aWFsaXplZCB3aXRoIGRpcmVjdCBhZ2dyZWdhdGlvbi4gICovCi0rICBpZiAoIWltcGxpY2l0ICYmIGZvdW5kX21pc3NpbmdfYnJhY2VzICYmIHdhcm5fbWlzc2luZ19icmFjZXMKLSsgICAgICAmJiAhY29uc3RydWN0b3JfemVyb2luaXQpCi0rICAgIHsKLSsgICAgICB3YXJuaW5nX2luaXQgKE9QVF9XbWlzc2luZ19icmFjZXMsCi0rCQkgICAgIm1pc3NpbmcgYnJhY2VzIGFyb3VuZCBpbml0aWFsaXplciIpOwotKyAgICB9Ci0rCi0gICAvKiBXYXJuIHdoZW4gc29tZSBzdHJ1Y3QgZWxlbWVudHMgYXJlIGltcGxpY2l0bHkgaW5pdGlhbGl6ZWQgdG8gemVyby4gICovCi0gICBpZiAod2Fybl9taXNzaW5nX2ZpZWxkX2luaXRpYWxpemVycwotICAgICAgICYmIGNvbnN0cnVjdG9yX3R5cGUKLSAgICAgICAmJiBUUkVFX0NPREUgKGNvbnN0cnVjdG9yX3R5cGUpID09IFJFQ09SRF9UWVBFCi0gICAgICAgJiYgY29uc3RydWN0b3JfdW5maWxsZWRfZmllbGRzKQotICAgICB7Ci0tCWJvb2wgY29uc3RydWN0b3JfemVyb2luaXQgPQotLQkgKHZlY19zYWZlX2xlbmd0aCAoY29uc3RydWN0b3JfZWxlbWVudHMpID09IDEKLS0JICAmJiBpbnRlZ2VyX3plcm9wICgoKmNvbnN0cnVjdG9yX2VsZW1lbnRzKVswXS52YWx1ZSkpOwotLQotIAkvKiBEbyBub3Qgd2FybiBmb3IgZmxleGlibGUgYXJyYXkgbWVtYmVycyBvciB6ZXJvLWxlbmd0aCBhcnJheXMuICAqLwotIAl3aGlsZSAoY29uc3RydWN0b3JfdW5maWxsZWRfZmllbGRzCi0gCSAgICAgICAmJiAoIURFQ0xfU0laRSAoY29uc3RydWN0b3JfdW5maWxsZWRfZmllbGRzKQotQEAgLTgwOTMsNiArODEwMSw5IEBACi0gICBkZXNpZ25hdG9yX2RlcHRoID0gMDsKLSAgIGRlc2lnbmF0b3JfZXJyb25lb3VzID0gMDsKLSAKLSsgIGlmICghaW1wbGljaXQgJiYgdmFsdWUudmFsdWUgJiYgIWludGVnZXJfemVyb3AgKHZhbHVlLnZhbHVlKSkKLSsgICAgY29uc3RydWN0b3JfemVyb2luaXQgPSAwOwotKwotICAgLyogSGFuZGxlIHN1cGVyZmx1b3VzIGJyYWNlcyBhcm91bmQgc3RyaW5nIGNzdCBhcyBpbgotICAgICAgY2hhciB4W10gPSB7ImZvbyJ9OyAqLwotICAgaWYgKHN0cmluZ19mbGFnCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNC45LzAwNjYtY3h4ZmxhZ3MtZm9yLWJ1aWxkLnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTQuOS8wMDY2LWN4eGZsYWdzLWZvci1idWlsZC5wYXRjaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTEwNWUyOS4uMDAwMDAwMAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNC45LzAwNjYtY3h4ZmxhZ3MtZm9yLWJ1aWxkLnBhdGNoCisrKyAvZGV2L251bGwKQEAgLTEsMTIzICswLDAgQEAKLUZpeCB2YXJpb3VzIF9GT1JfQlVJTEQgYW5kIHJlbGF0ZWQgdmFyaWFibGVzCi0KLVdoZW4gZG9pbmcgYSBGT1JfQlVJTEQgdGhpbmcsIHlvdSBoYXZlIHRvIG92ZXJyaWRlIENGTEFHUyB3aXRoCi1DRkxBR1NfRk9SX0JVSUxELiBBbmQgaWYgeW91IHVzZSBDKyssIHlvdSBhbHNvIGhhdmUgdG8gb3ZlcnJpZGUKLUNYWEZMQUdTIHdpdGggQ1hYRkxBR1NfRk9SX0JVSUxELgotV2l0aG91dCB0aGlzLCB3aGVuIGJ1aWxkaW5nIGZvciBtaW5ndywgeW91IGVuZCB1cCB0cnlpbmcgdG8gdXNlCi10aGUgbWluZ3cgaGVhZGVycyBmb3IgYSBob3N0IGJ1aWxkLgotCi1UaGUgc2FtZSBnb2VzIGZvciBvdGhlciB2YXJpYWJsZXMgYXMgd2VsbCwgc3VjaCBhcyBDUFBGTEFHUywKLUNQUCwgYW5kIEdNUElOQy4KLQotVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCi0KLVNpZ25lZC1vZmYtYnk6IFBldGVyIFNlZWJhY2ggPHBldGVyLnNlZWJhY2hAd2luZHJpdmVyLmNvbT4KLVNpZ25lZC1vZmYtYnk6IE1hcmsgSGF0bGUgPG1hcmsuaGF0bGVAd2luZHJpdmVyLmNvbT4KLQotZGlmZiAtLWdpdCBhL01ha2VmaWxlLmluIGIvTWFrZWZpbGUuaW4KLWluZGV4IDkzNzAxNzQuLjAxMWMyOWEgMTAwNjQ0Ci0tLS0gYS9NYWtlZmlsZS5pbgotKysrIGIvTWFrZWZpbGUuaW4KLUBAIC0xNTIsNiArMTUyLDcgQEAgQlVJTERfRVhQT1JUUyA9IFwKLSAJQ1BQPSIkKENDX0ZPUl9CVUlMRCkgLUUiOyBleHBvcnQgQ1BQOyBcCi0gCUNGTEFHUz0iJChDRkxBR1NfRk9SX0JVSUxEKSI7IGV4cG9ydCBDRkxBR1M7IFwKLSAJQ09ORklHX1NIRUxMPSIkKFNIRUxMKSI7IGV4cG9ydCBDT05GSUdfU0hFTEw7IFwKLSsJQ1BQRkxBR1M9IiQoQ1BQRkxBR1NfRk9SX0JVSUxEKSI7IGV4cG9ydCBDUFBGTEFHUzsgXAotIAlDWFg9IiQoQ1hYX0ZPUl9CVUlMRCkiOyBleHBvcnQgQ1hYOyBcCi0gCUNYWEZMQUdTPSIkKENYWEZMQUdTX0ZPUl9CVUlMRCkiOyBleHBvcnQgQ1hYRkxBR1M7IFwKLSAJR0NKPSIkKEdDSl9GT1JfQlVJTEQpIjsgZXhwb3J0IEdDSjsgXAotQEAgLTE3MCw2ICsxNzEsOSBAQCBCVUlMRF9FWFBPUlRTID0gXAotICMgYnVpbHQgZm9yIHRoZSBidWlsZCBzeXN0ZW0gdG8gb3ZlcnJpZGUgdGhvc2UgaW4gQkFTRV9GTEFHU19UT19QQVNTLgotIEVYVFJBX0JVSUxEX0ZMQUdTID0gXAotIAlDRkxBR1M9IiQoQ0ZMQUdTX0ZPUl9CVUlMRCkiIFwKLSsJQ1hYRkxBR1M9IiQoQ1hYRkxBR1NfRk9SX0JVSUxEKSIgXAotKwlDUFA9IiQoQ0NfRk9SX0JVSUxEKSAtRSIgXAotKwlDUFBGTEFHUz0iJChDUFBGTEFHU19GT1JfQlVJTEQpIiBcCi0gCUxERkxBR1M9IiQoTERGTEFHU19GT1JfQlVJTEQpIgotIAotICMgVGhpcyBpcyB0aGUgbGlzdCBvZiBkaXJlY3RvcmllcyB0byBidWlsdCBmb3IgdGhlIGhvc3Qgc3lzdGVtLgotQEAgLTE4Nyw2ICsxOTEsNyBAQCBIT1NUX1NVQkRJUiA9IEBob3N0X3N1YmRpckAKLSBIT1NUX0VYUE9SVFMgPSBcCi0gCSQoQkFTRV9FWFBPUlRTKSBcCi0gCUNDPSIkKENDKSI7IGV4cG9ydCBDQzsgXAotKwlDUFA9IiQoQ0MpIC1FIjsgZXhwb3J0IENQUDsgXAotIAlBREFfQ0ZMQUdTPSIkKEFEQV9DRkxBR1MpIjsgZXhwb3J0IEFEQV9DRkxBR1M7IFwKLSAJQ0ZMQUdTPSIkKENGTEFHUykiOyBleHBvcnQgQ0ZMQUdTOyBcCi0gCUNPTkZJR19TSEVMTD0iJChTSEVMTCkiOyBleHBvcnQgQ09ORklHX1NIRUxMOyBcCi1AQCAtNzExLDYgKzcxNSw3IEBAIEJBU0VfRkxBR1NfVE9fUEFTUyA9IFwKLSAJIkNDX0ZPUl9CVUlMRD0kKENDX0ZPUl9CVUlMRCkiIFwKLSAJIkNGTEFHU19GT1JfQlVJTEQ9JChDRkxBR1NfRk9SX0JVSUxEKSIgXAotIAkiQ1hYX0ZPUl9CVUlMRD0kKENYWF9GT1JfQlVJTEQpIiBcCi0rCSJDWFhGTEFHU19GT1JfQlVJTEQ9JChDWFhGTEFHU19GT1JfQlVJTEQpIiBcCi0gCSJFWFBFQ1Q9JChFWFBFQ1QpIiBcCi0gCSJGTEVYPSQoRkxFWCkiIFwKLSAJIklOU1RBTEw9JChJTlNUQUxMKSIgXAotZGlmZiAtLWdpdCBhL01ha2VmaWxlLnRwbCBiL01ha2VmaWxlLnRwbAotaW5kZXggMWVhMTk1NC4uNzhhNTljMyAxMDA2NDQKLS0tLSBhL01ha2VmaWxlLnRwbAotKysrIGIvTWFrZWZpbGUudHBsCi1AQCAtMTU0LDYgKzE1NCw3IEBAIEJVSUxEX0VYUE9SVFMgPSBcCi0gCUNDPSIkKENDX0ZPUl9CVUlMRCkiOyBleHBvcnQgQ0M7IFwKLSAJQ0ZMQUdTPSIkKENGTEFHU19GT1JfQlVJTEQpIjsgZXhwb3J0IENGTEFHUzsgXAotIAlDT05GSUdfU0hFTEw9IiQoU0hFTEwpIjsgZXhwb3J0IENPTkZJR19TSEVMTDsgXAotKwlDUFBGTEFHUz0iJChDUFBGTEFHU19GT1JfQlVJTEQpIjsgZXhwb3J0IENQUEZMQUdTOyBcCi0gCUNYWD0iJChDWFhfRk9SX0JVSUxEKSI7IGV4cG9ydCBDWFg7IFwKLSAJQ1hYRkxBR1M9IiQoQ1hYRkxBR1NfRk9SX0JVSUxEKSI7IGV4cG9ydCBDWFhGTEFHUzsgXAotIAlHQ0o9IiQoR0NKX0ZPUl9CVUlMRCkiOyBleHBvcnQgR0NKOyBcCi1AQCAtMTcyLDYgKzE3Myw5IEBAIEJVSUxEX0VYUE9SVFMgPSBcCi0gIyBidWlsdCBmb3IgdGhlIGJ1aWxkIHN5c3RlbSB0byBvdmVycmlkZSB0aG9zZSBpbiBCQVNFX0ZMQUdTX1RPX1BBU1MuCi0gRVhUUkFfQlVJTERfRkxBR1MgPSBcCi0gCUNGTEFHUz0iJChDRkxBR1NfRk9SX0JVSUxEKSIgXAotKwlDWFhGTEFHUz0iJChDWFhGTEFHU19GT1JfQlVJTEQpIiBcCi0rCUNQUD0iJChDQ19GT1JfQlVJTEQpIC1FIiBcCi0rCUNQUEZMQUdTPSIkKENQUEZMQUdTX0ZPUl9CVUlMRCkiIFwKLSAJTERGTEFHUz0iJChMREZMQUdTX0ZPUl9CVUlMRCkiCi0gCi0gIyBUaGlzIGlzIHRoZSBsaXN0IG9mIGRpcmVjdG9yaWVzIHRvIGJ1aWx0IGZvciB0aGUgaG9zdCBzeXN0ZW0uCi1AQCAtMTg5LDYgKzE5Myw3IEBAIEhPU1RfU1VCRElSID0gQGhvc3Rfc3ViZGlyQAotIEhPU1RfRVhQT1JUUyA9IFwKLSAJJChCQVNFX0VYUE9SVFMpIFwKLSAJQ0M9IiQoQ0MpIjsgZXhwb3J0IENDOyBcCi0rCUNQUD0iJChDQykgLUUiOyBleHBvcnQgQ1BQOyBcCi0gCUFEQV9DRkxBR1M9IiQoQURBX0NGTEFHUykiOyBleHBvcnQgQURBX0NGTEFHUzsgXAotIAlDRkxBR1M9IiQoQ0ZMQUdTKSI7IGV4cG9ydCBDRkxBR1M7IFwKLSAJQ09ORklHX1NIRUxMPSIkKFNIRUxMKSI7IGV4cG9ydCBDT05GSUdfU0hFTEw7IFwKLWRpZmYgLS1naXQgYS9nY2MvTWFrZWZpbGUuaW4gYi9nY2MvTWFrZWZpbGUuaW4KLWluZGV4IGNkNWJjNGEuLjk4YWU0ZjQgMTAwNjQ0Ci0tLS0gYS9nY2MvTWFrZWZpbGUuaW4KLSsrKyBiL2djYy9NYWtlZmlsZS5pbgotQEAgLTc2Miw3ICs3NjIsNyBAQCBCVUlMRF9MSU5LRVJGTEFHUyA9ICQoQlVJTERfQ1hYRkxBR1MpCi0gIyBOYXRpdmUgbGlua2VyIGFuZCBwcmVwcm9jZXNzb3IgZmxhZ3MuICBGb3IgeC1mcmFnbWVudCBvdmVycmlkZXMuCi0gQlVJTERfTERGTEFHUz1AQlVJTERfTERGTEFHU0AKLSBCVUlMRF9DUFBGTEFHUz0gLUkuIC1JJChARCkgLUkkKHNyY2RpcikgLUkkKHNyY2RpcikvJChARCkgXAotLQkJLUkkKHNyY2RpcikvLi4vaW5jbHVkZSBASU5DSU5UTEAgJChDUFBJTkMpICQoQ1BQRkxBR1MpCi0rCQktSSQoc3JjZGlyKS8uLi9pbmNsdWRlIEBJTkNJTlRMQCAkKENQUElOQykgJChDUFBGTEFHU19GT1JfQlVJTEQpCi0gCi0gIyBBY3R1YWwgbmFtZSB0byB1c2Ugd2hlbiBpbnN0YWxsaW5nIGEgbmF0aXZlIGNvbXBpbGVyLgotIEdDQ19JTlNUQUxMX05BTUUgOj0gJChzaGVsbCBlY2hvIGdjY3xzZWQgJyQocHJvZ3JhbV90cmFuc2Zvcm1fbmFtZSknKQotZGlmZiAtLWdpdCBhL2djYy9jb25maWd1cmUgYi9nY2MvY29uZmlndXJlCi1pbmRleCBjN2FjMTRiLi41YWM2M2U0IDEwMDc1NQotLS0tIGEvZ2NjL2NvbmZpZ3VyZQotKysrIGIvZ2NjL2NvbmZpZ3VyZQotQEAgLTExNTIxLDcgKzExNTIxLDcgQEAgZWxzZQotIAlDQz0iJHtDQ19GT1JfQlVJTER9IiBDRkxBR1M9IiR7Q0ZMQUdTX0ZPUl9CVUlMRH0iIFwKLSAJQ1hYPSIke0NYWF9GT1JfQlVJTER9IiBDWFhGTEFHUz0iJHtDWFhGTEFHU19GT1JfQlVJTER9IiBcCi0gCUxEPSIke0xEX0ZPUl9CVUlMRH0iIExERkxBR1M9IiR7TERGTEFHU19GT1JfQlVJTER9IiBcCi0tCUdNUElOQz0iIiBDUFBGTEFHUz0iJHtDUFBGTEFHU30gLURHRU5FUkFUT1JfRklMRSIgXAotKwlHTVBJTkM9IiIgQ1BQRkxBR1M9IiR7Q1BQRkxBR1NfRk9SX0JVSUxEfSAtREdFTkVSQVRPUl9GSUxFIiBcCi0gCSR7cmVhbHNyY2Rpcn0vY29uZmlndXJlIFwKLSAJCS0tZW5hYmxlLWxhbmd1YWdlcz0ke2VuYWJsZV9sYW5ndWFnZXMtYWxsfSBcCi0gCQktLXRhcmdldD0kdGFyZ2V0X2FsaWFzIC0taG9zdD0kYnVpbGRfYWxpYXMgLS1idWlsZD0kYnVpbGRfYWxpYXMKLWRpZmYgLS1naXQgYS9nY2MvY29uZmlndXJlLmFjIGIvZ2NjL2NvbmZpZ3VyZS5hYwotaW5kZXggNTA4NTZlNi4uMTdhNGRmZCAxMDA2NDQKLS0tLSBhL2djYy9jb25maWd1cmUuYWMKLSsrKyBiL2djYy9jb25maWd1cmUuYWMKLUBAIC0xNjMzLDcgKzE2MzMsNyBAQCBlbHNlCi0gCUNDPSIke0NDX0ZPUl9CVUlMRH0iIENGTEFHUz0iJHtDRkxBR1NfRk9SX0JVSUxEfSIgXAotIAlDWFg9IiR7Q1hYX0ZPUl9CVUlMRH0iIENYWEZMQUdTPSIke0NYWEZMQUdTX0ZPUl9CVUlMRH0iIFwKLSAJTEQ9IiR7TERfRk9SX0JVSUxEfSIgTERGTEFHUz0iJHtMREZMQUdTX0ZPUl9CVUlMRH0iIFwKLS0JR01QSU5DPSIiIENQUEZMQUdTPSIke0NQUEZMQUdTfSAtREdFTkVSQVRPUl9GSUxFIiBcCi0rCUdNUElOQz0iIiBDUFBGTEFHUz0iJHtDUFBGTEFHU19GT1JfQlVJTER9IC1ER0VORVJBVE9SX0ZJTEUiIFwKLSAJJHtyZWFsc3JjZGlyfS9jb25maWd1cmUgXAotIAkJLS1lbmFibGUtbGFuZ3VhZ2VzPSR7ZW5hYmxlX2xhbmd1YWdlcy1hbGx9IFwKLSAJCS0tdGFyZ2V0PSR0YXJnZXRfYWxpYXMgLS1ob3N0PSRidWlsZF9hbGlhcyAtLWJ1aWxkPSRidWlsZF9hbGlhcwpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTQuOS8wMDY3LWZpeC1hcm0tdGh1bWIucGF0Y2ggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNC45LzAwNjctZml4LWFybS10aHVtYi5wYXRjaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMmYyNjJlMy4uMDAwMDAwMAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNC45LzAwNjctZml4LWFybS10aHVtYi5wYXRjaAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLVVwc3RyZWFtLVN0YXR1czogQWNjZXB0ZWQKLQotU2lnbmVkLW9mZi1ieTogRG1pdHJ5IEVyZW1pbi1Tb2xlbmlrb3YgPGRiYXJ5c2hrb3ZAZ21haWwuY29tPgotLS0tCi0KLTIwMTUtMTEtMjUgIFZsYWRpbWlyIE1ha2Fyb3YgIDx2bWFrYXJvdkByZWRoYXQuY29tPgotCi0JUFIgcnRsLW9wdGltaXphdGlvbi82Nzk1NAotCSogbHJhLWNvbnN0cmFpbnRzLmMgKGN1cnJfaW5zbl90cmFuc2Zvcm0pOiBBZGQgY2hlY2sgb24gc2NyYXRjaAotCXBzZXVkbyB3aGVuIGNoYW5nZSBjbGFzcyB0byBOT19SRUdTLiAgQWRkIGFuIGFzc2VydC4KLQotCi0KLWdpdC1zdm4taWQ6IHN2bitzc2g6Ly9nY2MuZ251Lm9yZy9zdm4vZ2NjL3RydW5rQDIzMDg5NCAxMzhiYzc1ZC0wZDA0LTA0MTAtOTYxZi04MmVlNzJiMDU0YTQKLS0tLQotCi1kaWZmIC0tZ2l0IGEvZ2NjL2xyYS1jb25zdHJhaW50cy5jIGIvZ2NjL2xyYS1jb25zdHJhaW50cy5jCi1pbmRleCA0NjcwZTgxLi5jNjJiZjZhIDEwMDY0NAotLS0tIGEvZ2NjL2xyYS1jb25zdHJhaW50cy5jCi0rKysgYi9nY2MvbHJhLWNvbnN0cmFpbnRzLmMKLUBAIC0zNzI1LDcgKzM3MjUsOCBAQCBjdXJyX2luc25fdHJhbnNmb3JtIChib29sIGNoZWNrX29ubHlfcCkKLSAJCSBhc3NpZ21lbnQgcGFzcyBhbmQgdGhlIHNjcmF0Y2ggcHNldWRvIHdpbGwgYmUKLSAJCSBzcGlsbGVkLiAgU3BpbGxlZCBzY3JhdGNoIHBzZXVkb3MgYXJlIHRyYW5zZm9ybWVkCi0gCQkgYmFjayB0byBzY3JhdGNoZXMgYXQgdGhlIExSQSBlbmQuICAqLwotLQkgICAgICAmJiBscmFfZm9ybWVyX3NjcmF0Y2hfb3BlcmFuZF9wIChjdXJyX2luc24sIGkpKQotKwkgICAgICAmJiBscmFfZm9ybWVyX3NjcmF0Y2hfb3BlcmFuZF9wIChjdXJyX2luc24sIGkpCi0rCSAgICAgICYmIGxyYV9mb3JtZXJfc2NyYXRjaF9wIChSRUdOTyAob3ApKSkKLSAJICAgIHsKLSAJICAgICAgaW50IHJlZ25vID0gUkVHTk8gKG9wKTsKLSAJICAgICAgbHJhX2NoYW5nZV9jbGFzcyAocmVnbm8sIE5PX1JFR1MsICIgICAgICBDaGFuZ2UgdG8iLCB0cnVlKTsKLUBAIC0zNzM0LDYgKzM3MzUsOCBAQCBjdXJyX2luc25fdHJhbnNmb3JtIChib29sIGNoZWNrX29ubHlfcCkKLSAJCSAgIHNwaWxsZWQgcHNldWRvIGFzIHRoZXJlIGlzIG9ubHkgb25lIHN1Y2ggaW5zbiwgdGhlCi0gCQkgICBjdXJyZW50IG9uZS4gICovCi0gCQlyZWdfcmVudW1iZXJbcmVnbm9dID0gLTE7Ci0rCSAgICAgIGxyYV9hc3NlcnQgKGJpdG1hcF9zaW5nbGVfYml0X3NldF9wCi0rCQkJICAoJmxyYV9yZWdfaW5mb1tSRUdOTyAob3ApXS5pbnNuX2JpdG1hcCkpOwotIAkgICAgfQotIAkgIC8qIFdlIGNhbiBkbyBhbiBvcHRpb25hbCByZWxvYWQuICBJZiB0aGUgcHNldWRvIGdvdCBhIGhhcmQKLSAJICAgICByZWcsIHdlIG1pZ2h0IGltcHJvdmUgdGhlIGNvZGUgdGhyb3VnaCBpbmhlcml0YW5jZS4gIElmCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNC45LzAwNjctZ2NjLW11c2wtc3VwcG9ydC5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy00LjkvMDA2Ny1nY2MtbXVzbC1zdXBwb3J0LnBhdGNoCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5YTBiNWFkLi4wMDAwMDAwCi0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy00LjkvMDA2Ny1nY2MtbXVzbC1zdXBwb3J0LnBhdGNoCisrKyAvZGV2L251bGwKQEAgLTEsMjY3ICswLDAgQEAKLSMgSEcgY2hhbmdlc2V0IHBhdGNoCi0jIFBhcmVudCBlNWI0NTY0ZjI0OWY4NjM0MTk0YmRhYmVmNGIzMDU3ZDBlNTRlZTk3Ci1BZGRpbmcgLW1tdXNsIGFzIGEgbXVzbCBsaWJjIHNwZWNpZmllciwgYW5kIHRoZSBuZWNlc3NhcnkgaGFja3MgZm9yIGl0IHRvIGtub3cgaG93IHRvIGZpbmQgbXVzbCdzIGR5bmFtaWMgbGlua2VyLgotVXBzdHJlYW0tU3RhdHVzOiBiYWNrcG9ydCBbcGFydGlhbF0KLVNpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+Ci0KLQotSW5kZXg6IGdjYy00LjkuMC9nY2MvY29uZmlnLmdjYwotPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0tIGdjYy00LjkuMC5vcmlnL2djYy9jb25maWcuZ2NjCTIwMTQtMDQtMjIgMjI6NDQ6MTcuMTUzNTY3MTUwIC0wNzAwCi0rKysgZ2NjLTQuOS4wL2djYy9jb25maWcuZ2NjCTIwMTQtMDQtMjMgMjM6NTQ6MzEuNDI3MzU3MDUxIC0wNzAwCi1AQCAtNTk0LDcgKzU5NCw3IEBACi0gZXNhYwotIAotICMgQ29tbW9uIEMgbGlicmFyaWVzLgotLXRtX2RlZmluZXM9IiR0bV9kZWZpbmVzIExJQkNfR0xJQkM9MSBMSUJDX1VDTElCQz0yIExJQkNfQklPTklDPTMiCi0rdG1fZGVmaW5lcz0iJHRtX2RlZmluZXMgTElCQ19HTElCQz0xIExJQkNfVUNMSUJDPTIgTElCQ19CSU9OSUM9MyBMSUJDX01VU0w9NCIKLSAKLSAjIDMyLWJpdCB4ODYgcHJvY2Vzc29ycyBzdXBwb3J0ZWQgYnkgLS13aXRoLWFyY2g9LiAgRWFjaCBwcm9jZXNzb3IKLSAjIE1VU1QgYmUgc2VwYXJhdGVkIGJ5IGV4YWN0bHkgb25lIHNwYWNlLgotQEAgLTcxOSw2ICs3MTksOSBAQAotICAgICAqLSotKnVjbGliYyopCi0gICAgICAgdG1fZGVmaW5lcz0iJHRtX2RlZmluZXMgREVGQVVMVF9MSUJDPUxJQkNfVUNMSUJDIgotICAgICAgIDs7Ci0rICAgICotKi0qbXVzbCopCi0rICAgICAgdG1fZGVmaW5lcz0iJHRtX2RlZmluZXMgREVGQVVMVF9MSUJDPUxJQkNfTVVTTCIKLSsgICAgICA7OwotICAgICAqKQotICAgICAgIHRtX2RlZmluZXM9IiR0bV9kZWZpbmVzIERFRkFVTFRfTElCQz1MSUJDX0dMSUJDIgotICAgICAgIDs7Ci1AQCAtMjMyOCw2ICsyMzMxLDExIEBACi0gCSAgICBwb3dlcnBjKi0qLWxpbnV4KnBhaXJlZCopCi0gCQl0bV9maWxlPSIke3RtX2ZpbGV9IHJzNjAwMC83NTBjbC5oIiA7OwotIAllc2FjCi0rICAgICAgICBjYXNlICR7dGFyZ2V0fSBpbgotKwkgICAgKi1saW51eCotbXVzbCopCi0rCQllbmFibGVfc2VjdXJlcGx0PXllcyA7OwotKwllc2FjCi0rCi0gCWlmIHRlc3QgeCR7ZW5hYmxlX3NlY3VyZXBsdH0gPSB4eWVzOyB0aGVuCi0gCQl0bV9maWxlPSJyczYwMDAvc2VjdXJlcGx0LmggJHt0bV9maWxlfSIKLSAJZmkKLUluZGV4OiBnY2MtNC45LjAvZ2NjL2NvbmZpZy9saW51eC5oCi09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLS0gZ2NjLTQuOS4wLm9yaWcvZ2NjL2NvbmZpZy9saW51eC5oCTIwMTQtMDEtMDIgMTQ6MjM6MjYuMDAwMDAwMDAwIC0wODAwCi0rKysgZ2NjLTQuOS4wL2djYy9jb25maWcvbGludXguaAkyMDE0LTA0LTI0IDAwOjExOjI5LjAzNDAyODg5NSAtMDcwMAotQEAgLTMyLDEwICszMiwxMiBAQAotICNkZWZpbmUgT1BUSU9OX0dMSUJDICAoREVGQVVMVF9MSUJDID09IExJQkNfR0xJQkMpCi0gI2RlZmluZSBPUFRJT05fVUNMSUJDIChERUZBVUxUX0xJQkMgPT0gTElCQ19VQ0xJQkMpCi0gI2RlZmluZSBPUFRJT05fQklPTklDIChERUZBVUxUX0xJQkMgPT0gTElCQ19CSU9OSUMpCi0rI2RlZmluZSBPUFRJT05fTVVTTCAgIChERUZBVUxUX0xJQkMgPT0gTElCQ19NVVNMKQotICNlbHNlCi0gI2RlZmluZSBPUFRJT05fR0xJQkMgIChsaW51eF9saWJjID09IExJQkNfR0xJQkMpCi0gI2RlZmluZSBPUFRJT05fVUNMSUJDIChsaW51eF9saWJjID09IExJQkNfVUNMSUJDKQotICNkZWZpbmUgT1BUSU9OX0JJT05JQyAobGludXhfbGliYyA9PSBMSUJDX0JJT05JQykKLSsjZGVmaW5lIE9QVElPTl9NVVNMICAgKGxpbnV4X2xpYmMgPT0gTElCQ19NVVNMKQotICNlbmRpZgotIAotICNkZWZpbmUgR05VX1VTRVJfVEFSR0VUX09TX0NQUF9CVUlMVElOUygpCQkJXAotQEAgLTUzLDE4ICs1NSwyMSBAQAotICAgIHVDbGliYyBvciBCaW9uaWMgaXMgdGhlIGRlZmF1bHQgQyBsaWJyYXJ5IGFuZCB3aGV0aGVyCi0gICAgLW11Y2xpYmMgb3IgLW1nbGliYyBvciAtbWJpb25pYyBoYXMgYmVlbiBwYXNzZWQgdG8gY2hhbmdlIHRoZSBkZWZhdWx0LiAgKi8KLSAKLS0jZGVmaW5lIENIT09TRV9EWU5BTUlDX0xJTktFUjEoTElCQzEsIExJQkMyLCBMSUJDMywgTEQxLCBMRDIsIExEMykJXAotLSAgIiV7IiBMSUJDMiAiOiIgTEQyICI7OiV7IiBMSUJDMyAiOiIgTEQzICI7OiIgTEQxICJ9fSIKLSsjZGVmaW5lIENIT09TRV9EWU5BTUlDX0xJTktFUjEoTElCQzEsIExJQkMyLCBMSUJDMywgTElCQzQsIExEMSwgTEQyLCBMRDMsIExENCkJXAotKyAgIiV7IiBMSUJDMiAiOiIgTEQyICI7OiV7IiBMSUJDMyAiOiIgTEQzICI7OiV7IiBMSUJDNCAiOiIgTEQ0ICI7OiIgTEQxICJ9fX0iCi0gCi0gI2lmIERFRkFVTFRfTElCQyA9PSBMSUJDX0dMSUJDCi0tI2RlZmluZSBDSE9PU0VfRFlOQU1JQ19MSU5LRVIoRywgVSwgQikgXAotLSAgQ0hPT1NFX0RZTkFNSUNfTElOS0VSMSAoIm1nbGliYyIsICJtdWNsaWJjIiwgIm1iaW9uaWMiLCBHLCBVLCBCKQotKyNkZWZpbmUgQ0hPT1NFX0RZTkFNSUNfTElOS0VSKEcsIFUsIEIsIE0pIFwKLSsgIENIT09TRV9EWU5BTUlDX0xJTktFUjEgKCJtZ2xpYmMiLCAibXVjbGliYyIsICJtYmlvbmljIiwgIm1tdXNsIiwgRywgVSwgQiwgTSkKLSAjZWxpZiBERUZBVUxUX0xJQkMgPT0gTElCQ19VQ0xJQkMKLS0jZGVmaW5lIENIT09TRV9EWU5BTUlDX0xJTktFUihHLCBVLCBCKSBcCi0tICBDSE9PU0VfRFlOQU1JQ19MSU5LRVIxICgibXVjbGliYyIsICJtZ2xpYmMiLCAibWJpb25pYyIsIFUsIEcsIEIpCi0rI2RlZmluZSBDSE9PU0VfRFlOQU1JQ19MSU5LRVIoRywgVSwgQiwgTSkgXAotKyAgQ0hPT1NFX0RZTkFNSUNfTElOS0VSMSAoIm11Y2xpYmMiLCAibWdsaWJjIiwgIm1iaW9uaWMiLCAibW11c2wiLCBVLCBHLCBCLCBNKQotICNlbGlmIERFRkFVTFRfTElCQyA9PSBMSUJDX0JJT05JQwotLSNkZWZpbmUgQ0hPT1NFX0RZTkFNSUNfTElOS0VSKEcsIFUsIEIpIFwKLS0gIENIT09TRV9EWU5BTUlDX0xJTktFUjEgKCJtYmlvbmljIiwgIm1nbGliYyIsICJtdWNsaWJjIiwgQiwgRywgVSkKLSsjZGVmaW5lIENIT09TRV9EWU5BTUlDX0xJTktFUihHLCBVLCBCLCBNKSBcCi0rICBDSE9PU0VfRFlOQU1JQ19MSU5LRVIxICgibWJpb25pYyIsICJtZ2xpYmMiLCAibXVjbGliYyIsICJtbXVzbCIsIEIsIEcsIFUsIE0pCi0rI2VsaWYgREVGQVVMVF9MSUJDID09IExJQkNfTVVTTAotKyNkZWZpbmUgQ0hPT1NFX0RZTkFNSUNfTElOS0VSKEcsIFUsIEIsIE0pIFwKLSsgIENIT09TRV9EWU5BTUlDX0xJTktFUjEgKCJtbXVzbCIsICJtZ2xpYmMiLCAibXVjbGliYyIsICJtYmlvbmljIiwgTSwgRywgVSwgQikKLSAjZWxzZQotICNlcnJvciAiVW5zdXBwb3J0ZWQgREVGQVVMVF9MSUJDIgotICNlbmRpZiAvKiBERUZBVUxUX0xJQkMgKi8KLUBAIC04NCwxNiArODksMTYgQEAKLSAKLSAjZGVmaW5lIEdOVV9VU0VSX0RZTkFNSUNfTElOS0VSCQkJCQkJXAotICAgQ0hPT1NFX0RZTkFNSUNfTElOS0VSIChHTElCQ19EWU5BTUlDX0xJTktFUiwgVUNMSUJDX0RZTkFNSUNfTElOS0VSLAlcCi0tCQkJIEJJT05JQ19EWU5BTUlDX0xJTktFUikKLSsJCQkgQklPTklDX0RZTkFNSUNfTElOS0VSLCBNVVNMX0RZTkFNSUNfTElOS0VSKQotICNkZWZpbmUgR05VX1VTRVJfRFlOQU1JQ19MSU5LRVIzMgkJCQkJXAotICAgQ0hPT1NFX0RZTkFNSUNfTElOS0VSIChHTElCQ19EWU5BTUlDX0xJTktFUjMyLCBVQ0xJQkNfRFlOQU1JQ19MSU5LRVIzMiwgXAotLQkJCSBCSU9OSUNfRFlOQU1JQ19MSU5LRVIzMikKLSsJCQkgQklPTklDX0RZTkFNSUNfTElOS0VSMzIsIE1VU0xfRFlOQU1JQ19MSU5LRVIzMikKLSAjZGVmaW5lIEdOVV9VU0VSX0RZTkFNSUNfTElOS0VSNjQJCQkJCVwKLSAgIENIT09TRV9EWU5BTUlDX0xJTktFUiAoR0xJQkNfRFlOQU1JQ19MSU5LRVI2NCwgVUNMSUJDX0RZTkFNSUNfTElOS0VSNjQsIFwKLS0JCQkgQklPTklDX0RZTkFNSUNfTElOS0VSNjQpCi0rCQkJIEJJT05JQ19EWU5BTUlDX0xJTktFUjY0LCBNVVNMX0RZTkFNSUNfTElOS0VSNjQpCi0gI2RlZmluZSBHTlVfVVNFUl9EWU5BTUlDX0xJTktFUlgzMgkJCQkJXAotICAgQ0hPT1NFX0RZTkFNSUNfTElOS0VSIChHTElCQ19EWU5BTUlDX0xJTktFUlgzMiwgVUNMSUJDX0RZTkFNSUNfTElOS0VSWDMyLCBcCi0tCQkJIEJJT05JQ19EWU5BTUlDX0xJTktFUlgzMikKLSsJCQkgQklPTklDX0RZTkFNSUNfTElOS0VSWDMyLCBNVVNMX0RZTkFNSUNfTElOS0VSWDMyKQotIAotIC8qIFdoZXRoZXIgd2UgaGF2ZSBCaW9uaWMgbGliYyBydW50aW1lICovCi0gI3VuZGVmIFRBUkdFVF9IQVNfQklPTklDCi1AQCAtMTI3LDMgKzEzMiw3NCBAQAotICMgZGVmaW5lIFRBUkdFVF9MSUJDX0hBU19GVU5DVElPTiBsaW51eF9saWJjX2hhc19mdW5jdGlvbgotIAotICNlbmRpZgotKwotKy8qIG11c2wgYXZvaWRzIHByb2JsZW1hdGljIGluY2x1ZGVzIGJ5IHJlYXJyYW5naW5nIHRoZSBpbmNsdWRlIGRpcmVjdG9yaWVzLgotKyAqIFVuZm9ydHVuYXRlbHksIHRoaXMgaXMgbW9zdGx5IGR1cGxpY2F0ZWQgZnJvbSBjcHBkZWZhdWx0LmMgKi8KLSsjaWYgREVGQVVMVF9MSUJDID09IExJQkNfTVVTTAotKyNkZWZpbmUgSU5DTFVERV9ERUZBVUxUU19NVVNMX0dQUAkJCVwKLSsgICAgeyBHUExVU1BMVVNfSU5DTFVERV9ESVIsICJHKysiLCAxLCAxLAkJXAotKyAgICAgIEdQTFVTUExVU19JTkNMVURFX0RJUl9BRERfU1lTUk9PVCwgMCB9LAkJXAotKyAgICB7IEdQTFVTUExVU19UT09MX0lOQ0xVREVfRElSLCAiRysrIiwgMSwgMSwJCVwKLSsgICAgICBHUExVU1BMVVNfSU5DTFVERV9ESVJfQUREX1NZU1JPT1QsIDEgfSwJCVwKLSsgICAgeyBHUExVU1BMVVNfQkFDS1dBUkRfSU5DTFVERV9ESVIsICJHKysiLCAxLCAxLAlcCi0rICAgICAgR1BMVVNQTFVTX0lOQ0xVREVfRElSX0FERF9TWVNST09ULCAwIH0sCi0rCi0rI2lmZGVmIExPQ0FMX0lOQ0xVREVfRElSCi0rI2RlZmluZSBJTkNMVURFX0RFRkFVTFRTX01VU0xfTE9DQUwJCQlcCi0rICAgIHsgTE9DQUxfSU5DTFVERV9ESVIsIDAsIDAsIDEsIDEsIDIgfSwJCVwKLSsgICAgeyBMT0NBTF9JTkNMVURFX0RJUiwgMCwgMCwgMSwgMSwgMCB9LAotKyNlbHNlCi0rI2RlZmluZSBJTkNMVURFX0RFRkFVTFRTX01VU0xfTE9DQUwKLSsjZW5kaWYKLSsKLSsjaWZkZWYgUFJFRklYX0lOQ0xVREVfRElSCi0rI2RlZmluZSBJTkNMVURFX0RFRkFVTFRTX01VU0xfUFJFRklYCQkJXAotKyAgICB7IFBSRUZJWF9JTkNMVURFX0RJUiwgMCwgMCwgMSwgMCwgMH0sCi0rI2Vsc2UKLSsjZGVmaW5lIElOQ0xVREVfREVGQVVMVFNfTVVTTF9QUkVGSVgKLSsjZW5kaWYKLSsKLSsjaWZkZWYgQ1JPU1NfSU5DTFVERV9ESVIKLSsjZGVmaW5lIElOQ0xVREVfREVGQVVMVFNfTVVTTF9DUk9TUwkJCVwKLSsgICAgeyBDUk9TU19JTkNMVURFX0RJUiwgIkdDQyIsIDAsIDAsIDAsIDB9LAotKyNlbHNlCi0rI2RlZmluZSBJTkNMVURFX0RFRkFVTFRTX01VU0xfQ1JPU1MKLSsjZW5kaWYKLSsKLSsjaWZkZWYgVE9PTF9JTkNMVURFX0RJUgotKyNkZWZpbmUgSU5DTFVERV9ERUZBVUxUU19NVVNMX1RPT0wJCQlcCi0rICAgIHsgVE9PTF9JTkNMVURFX0RJUiwgIkJJTlVUSUxTIiwgMCwgMSwgMCwgMH0sCi0rI2Vsc2UKLSsjZGVmaW5lIElOQ0xVREVfREVGQVVMVFNfTVVTTF9UT09MCi0rI2VuZGlmCi0rCi0rI2lmZGVmIE5BVElWRV9TWVNURU1fSEVBREVSX0RJUgotKyNkZWZpbmUgSU5DTFVERV9ERUZBVUxUU19NVVNMX05BVElWRQkJCVwKLSsgICAgeyBOQVRJVkVfU1lTVEVNX0hFQURFUl9ESVIsIDAsIDAsIDAsIDEsIDIgfSwJXAotKyAgICB7IE5BVElWRV9TWVNURU1fSEVBREVSX0RJUiwgMCwgMCwgMCwgMSwgMCB9LAotKyNlbHNlCi0rI2RlZmluZSBJTkNMVURFX0RFRkFVTFRTX01VU0xfTkFUSVZFCi0rI2VuZGlmCi0rCi0rI2lmIGRlZmluZWQgKENST1NTX0RJUkVDVE9SWV9TVFJVQ1RVUkUpICYmICFkZWZpbmVkIChUQVJHRVRfU1lTVEVNX1JPT1QpCi0rIyB1bmRlZiBJTkNMVURFX0RFRkFVTFRTX01VU0xfTE9DQUwKLSsjIGRlZmluZSBJTkNMVURFX0RFRkFVTFRTX01VU0xfTE9DQUwKLSsjIHVuZGVmIElOQ0xVREVfREVGQVVMVFNfTVVTTF9OQVRJVkUKLSsjIGRlZmluZSBJTkNMVURFX0RFRkFVTFRTX01VU0xfTkFUSVZFCi0rI2Vsc2UKLSsjIHVuZGVmIElOQ0xVREVfREVGQVVMVFNfTVVTTF9DUk9TUwotKyMgZGVmaW5lIElOQ0xVREVfREVGQVVMVFNfTVVTTF9DUk9TUwotKyNlbmRpZgotKwotKyN1bmRlZiBJTkNMVURFX0RFRkFVTFRTCi0rI2RlZmluZSBJTkNMVURFX0RFRkFVTFRTCQkJCVwKLSsgIHsJCQkJCQkJXAotKyAgICBJTkNMVURFX0RFRkFVTFRTX01VU0xfR1BQCQkJCVwKLSsgICAgSU5DTFVERV9ERUZBVUxUU19NVVNMX1BSRUZJWAkJCVwKLSsgICAgSU5DTFVERV9ERUZBVUxUU19NVVNMX0NST1NTCQkJCVwKLSsgICAgSU5DTFVERV9ERUZBVUxUU19NVVNMX1RPT0wJCQkJXAotKyAgICBJTkNMVURFX0RFRkFVTFRTX01VU0xfTkFUSVZFCQkJXAotKyAgICB7IEdDQ19JTkNMVURFX0RJUiwgIkdDQyIsIDAsIDEsIDAsIDAgfSwJCVwKLSsgICAgeyAwLCAwLCAwLCAwLCAwLCAwIH0JCQkJXAotKyAgfQotKyNlbmRpZgotSW5kZXg6IGdjYy00LjkuMC9nY2MvY29uZmlnL2xpbnV4Lm9wdAotPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0tIGdjYy00LjkuMC5vcmlnL2djYy9jb25maWcvbGludXgub3B0CTIwMTQtMDEtMDIgMTQ6MjM6MjYuMDAwMDAwMDAwIC0wODAwCi0rKysgZ2NjLTQuOS4wL2djYy9jb25maWcvbGludXgub3B0CTIwMTQtMDQtMjIgMjI6NDQ6MTcuMjgwMjMzODE3IC0wNzAwCi1AQCAtMzAsMyArMzAsNyBAQAotIG11Y2xpYmMKLSBUYXJnZXQgUmVwb3J0IFJlamVjdE5lZ2F0aXZlIFZhcihsaW51eF9saWJjLExJQkNfVUNMSUJDKSBOZWdhdGl2ZShtYmlvbmljKQotIFVzZSB1Q2xpYmMgQyBsaWJyYXJ5Ci0rCi0rbW11c2wKLStUYXJnZXQgUmVwb3J0IFJlamVjdE5lZ2F0aXZlIFZhcihsaW51eF9saWJjLExJQkNfTVVTTCkgTmVnYXRpdmUobWdsaWJjKQotK1VzZSBtdXNsIEMgbGlicmFyeQotSW5kZXg6IGdjYy00LjkuMC9nY2MvZ2luY2x1ZGUvc3RkZGVmLmgKLT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tLSBnY2MtNC45LjAub3JpZy9nY2MvZ2luY2x1ZGUvc3RkZGVmLmgJMjAxNC0wMS0wMiAxNDoyMzoyNi4wMDAwMDAwMDAgLTA4MDAKLSsrKyBnY2MtNC45LjAvZ2NjL2dpbmNsdWRlL3N0ZGRlZi5oCTIwMTQtMDQtMjIgMjI6NDQ6MTcuMjgwMjMzODE3IC0wNzAwCi1AQCAtMTgxLDYgKzE4MSw3IEBACi0gI2lmbmRlZiBfR0NDX1NJWkVfVAotICNpZm5kZWYgX1NJWkVUXwotICNpZm5kZWYgX19zaXplX3QKLSsjaWZuZGVmIF9fREVGSU5FRF9zaXplX3QgLyogbXVzbCAqLwotICNkZWZpbmUgX19zaXplX3RfXwkvKiBCZU9TICovCi0gI2RlZmluZSBfX1NJWkVfVF9fCS8qIENyYXkgVW5pY29zL01rICovCi0gI2RlZmluZSBfU0laRV9UCi1AQCAtMTk3LDYgKzE5OCw3IEBACi0gI2RlZmluZSBfX19pbnRfc2l6ZV90X2gKLSAjZGVmaW5lIF9HQ0NfU0laRV9UCi0gI2RlZmluZSBfU0laRVRfCi0rI2RlZmluZSBfX0RFRklORURfc2l6ZV90IC8qIG11c2wgKi8KLSAjaWYgKGRlZmluZWQgKF9fRnJlZUJTRF9fKSAmJiAoX19GcmVlQlNEX18gPj0gNSkpIFwKLSAgIHx8IGRlZmluZWQoX19GcmVlQlNEX2tlcm5lbF9fKQotIC8qIF9fc2l6ZV90IGlzIGEgdHlwZWRlZiBvbiBGcmVlQlNEIDUsIG11c3Qgbm90IHRyYXNoIGl0LiAqLwotQEAgLTIxNCw2ICsyMTYsNyBAQAotIHR5cGVkZWYgbG9uZyBzc2l6ZV90OwotICNlbmRpZiAvKiBfX0JFT1NfXyAqLwotICNlbmRpZiAvKiAhKGRlZmluZWQgKF9fR05VR19fKSAmJiBkZWZpbmVkIChzaXplX3QpKSAqLwotKyNlbmRpZiAvKiBfX0RFRklORURfc2l6ZV90ICovCi0gI2VuZGlmIC8qIF9fc2l6ZV90ICovCi0gI2VuZGlmIC8qIF9TSVpFVF8gKi8KLSAjZW5kaWYgLyogX0dDQ19TSVpFX1QgKi8KLUluZGV4OiBnY2MtNC45LjAvZ2NjL2NvbmZpZy9yczYwMDAvc2VjdXJlcGx0LmgKLT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tLSBnY2MtNC45LjAub3JpZy9nY2MvY29uZmlnL3JzNjAwMC9zZWN1cmVwbHQuaAkyMDE0LTAxLTAyIDE0OjIzOjI2LjAwMDAwMDAwMCAtMDgwMAotKysrIGdjYy00LjkuMC9nY2MvY29uZmlnL3JzNjAwMC9zZWN1cmVwbHQuaAkyMDE0LTA0LTIzIDIzOjU1OjE1LjExNDAyNDE3NSAtMDcwMAotQEAgLTE4LDMgKzE4LDQgQEAKLSA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uICAqLwotIAotICNkZWZpbmUgQ0MxX1NFQ1VSRV9QTFRfREVGQVVMVF9TUEVDICItbXNlY3VyZS1wbHQiCi0rI2RlZmluZSBMSU5LX1NFQ1VSRV9QTFRfREVGQVVMVF9TUEVDICItLXNlY3VyZS1wbHQiCi1JbmRleDogZ2NjLTQuOS4wL2djYy9jb25maWcvcnM2MDAwL3N5c3Y0LmgKLT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tLSBnY2MtNC45LjAub3JpZy9nY2MvY29uZmlnL3JzNjAwMC9zeXN2NC5oCTIwMTQtMDQtMjMgMjM6NTI6MTMuODU0MDIzMDE1IC0wNzAwCi0rKysgZ2NjLTQuOS4wL2djYy9jb25maWcvcnM2MDAwL3N5c3Y0LmgJMjAxNC0wNC0yNCAwMDoxMDo1NS41NTA2OTUzMzQgLTA3MDAKLUBAIC01MzgsNiArNTM4LDEwIEBACi0gI2RlZmluZSBDQzFfU0VDVVJFX1BMVF9ERUZBVUxUX1NQRUMgIiIKLSAjZW5kaWYKLSAKLSsjaWZuZGVmIExJTktfU0VDVVJFX1BMVF9ERUZBVUxUX1NQRUMKLSsjZGVmaW5lIExJTktfU0VDVVJFX1BMVF9ERUZBVUxUX1NQRUMgIiIKLSsjZW5kaWYKLSsKLSAvKiBQYXNzIC1HIHh4eCB0byB0aGUgY29tcGlsZXIuICAqLwotICNkZWZpbmUJQ0MxX1NQRUMgIiV7Ryp9ICUoY2MxX2NwdSkiIFwKLSAiJXttZWFiaTogJXshbWNhbGwtKjogLW1jYWxsLXN5c3YgfX0gXAotQEAgLTU4NSw3ICs1ODksOCBAQAotIAotIC8qIE92ZXJyaWRlIHRoZSBkZWZhdWx0IHRhcmdldCBvZiB0aGUgbGlua2VyLiAgKi8KLSAjZGVmaW5lCUxJTktfVEFSR0VUX1NQRUMgXAotLSAgRU5ESUFOX1NFTEVDVCgiIiwgIiAtLW9mb3JtYXQgZWxmMzItcG93ZXJwY2xlIiwgIiIpCi0rICBFTkRJQU5fU0VMRUNUKCIiLCAiIC0tb2Zvcm1hdCBlbGYzMi1wb3dlcnBjbGUiLCAiIikgXAotKyAgIiV7IW1ic3MtcGx0OiAleyFtc2VjdXJlLXBsdDogJShsaW5rX3NlY3VyZV9wbHRfZGVmYXVsdCl9fSIKLSAKLSAvKiBBbnkgc3BlY2lmaWMgT1MgZmxhZ3MuICAqLwotICNkZWZpbmUgTElOS19PU19TUEVDICJcCi1AQCAtODk0LDYgKzg5OSw3IEBACi0gICB7ICJsaW5rX29zX29wZW5ic2QiLAkJTElOS19PU19PUEVOQlNEX1NQRUMgfSwJCQlcCi0gICB7ICJsaW5rX29zX2RlZmF1bHQiLAkJTElOS19PU19ERUZBVUxUX1NQRUMgfSwJCQlcCi0gICB7ICJjYzFfc2VjdXJlX3BsdF9kZWZhdWx0IiwJQ0MxX1NFQ1VSRV9QTFRfREVGQVVMVF9TUEVDIH0sCQlcCi0rICB7ICJsaW5rX3NlY3VyZV9wbHRfZGVmYXVsdCIsCUxJTktfU0VDVVJFX1BMVF9ERUZBVUxUX1NQRUMgfSwJCVwKLSAgIHsgImNwcF9vc19hZHMiLAkJQ1BQX09TX0FEU19TUEVDIH0sCQkJXAotICAgeyAiY3BwX29zX3llbGxvd2tuaWZlIiwJQ1BQX09TX1lFTExPV0tOSUZFX1NQRUMgfSwJCVwKLSAgIHsgImNwcF9vc19tdm1lIiwJCUNQUF9PU19NVk1FX1NQRUMgfSwJCQlcCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNC45LzAwNjgtbXVzbC1keW5hbWljLWxpbmtlci5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy00LjkvMDA2OC1tdXNsLWR5bmFtaWMtbGlua2VyLnBhdGNoCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2MDVhYzY2Li4wMDAwMDAwCi0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy00LjkvMDA2OC1tdXNsLWR5bmFtaWMtbGlua2VyLnBhdGNoCisrKyAvZGV2L251bGwKQEAgLTEsMjA1ICswLDAgQEAKLSMgSEcgY2hhbmdlc2V0IHBhdGNoCi0jIFBhcmVudCA2NzM4ZmQ2ZjZmY2MyYTcyZjJiYTUyN2JkYTMzMjU2NDJhZjI2ODg1Ci1TdXBwb3J0IGZvciBhcm0tbGludXgtbXVzbC4KLVVwc3RyZWFtLVN0YXR1czogQmFja3BvcnQgW3BhcnRpYWxdCi1TaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgotCi0KLUluZGV4OiBnY2MtNC45LjIvZ2NjL2NvbmZpZy9hcm0vbGludXgtZWFiaS5oCi09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLS0gZ2NjLTQuOS4yLm9yaWcvZ2NjL2NvbmZpZy9hcm0vbGludXgtZWFiaS5oCi0rKysgZ2NjLTQuOS4yL2djYy9jb25maWcvYXJtL2xpbnV4LWVhYmkuaAotQEAgLTgxLDYgKzgxLDIzIEBACi0gI3VuZGVmIFRBUkdFVF9GSVhfVjRCWF9TUEVDCi0gI2RlZmluZSBUQVJHRVRfRklYX1Y0QlhfU1BFQyAiJXttY3B1PWFybTh8bWNwdT1hcm04MTB8bWNwdT1zdHJvbmdhcm0qfG1hcmNoPWFybXY0OiAtLWZpeC12NGJ4fSIKLSAKLSsvKiBGb3IgQVJNIG11c2wgY3VycmVudGx5IHN1cHBvcnRzIGZvdXIgZHluYW1pYyBsaW5rZXJzOgotKyAgIC0gbGQtbXVzbC1hcm0uc28uMSAtIGZvciB0aGUgRUFCSS1kZXJpdmVkIHNvZnQtZmxvYXQgQUJJCi0rICAgLSBsZC1tdXNsLWFybWhmLnNvLjEgLSBmb3IgdGhlIEVBQkktZGVyaXZlZCBoYXJkLWZsb2F0IEFCSQotKyAgIC0gbGQtbXVzbC1hcm1lYi5zby4xIC0gZm9yIHRoZSBFQUJJLWRlcml2ZWQgc29mdC1mbG9hdCBBQkksIEVCCi0rICAgLSBsZC1tdXNsLWFybWViaGYuc28uMSAtIGZvciB0aGUgRUFCSS1kZXJpdmVkIGhhcmQtZmxvYXQgQUJJLCBFQgotKyAgIG11c2wgZG9lcyBub3Qgc3VwcG9ydCB0aGUgbGVnYWN5IE9BQkkgbW9kZS4KLSsgICBBbGwgdGhlIGR5bmFtaWMgbGlua2VycyBsaXZlIGluIC9saWIuCi0rICAgV2UgZGVmYXVsdCB0byBzb2Z0LWZsb2F0LCBFTC4gKi8KLSsjdW5kZWYgIE1VU0xfRFlOQU1JQ19MSU5LRVIKLSsjaWYgVEFSR0VUX0JJR19FTkRJQU5fREVGQVVMVAotKyNkZWZpbmUgTVVTTF9EWU5BTUlDX0xJTktFUl9FICIle21saXR0bGUtZW5kaWFuOjs6ZWJ9IgotKyNlbHNlCi0rI2RlZmluZSBNVVNMX0RZTkFNSUNfTElOS0VSX0UgIiV7bWJpZy1lbmRpYW46ZWJ9IgotKyNlbmRpZgotKyNkZWZpbmUgTVVTTF9EWU5BTUlDX0xJTktFUiBcCi0rICBTWVNURU1MSUJTX0RJUiAibGQtbXVzbC1hcm0iIE1VU0xfRFlOQU1JQ19MSU5LRVJfRSAiJXttZmxvYXQtYWJpPWhhcmQ6aGZ9LnNvLjEiCi0rCi0gLyogQXQgdGhpcyBwb2ludCwgYnBhYmkuaCB3aWxsIGhhdmUgY2xvYmJlcmVkIExJTktfU1BFQy4gIFdlIHdhbnQgdG8KLSAgICB1c2UgdGhlIEdOVS9MaW51eCB2ZXJzaW9uLCBub3QgdGhlIGdlbmVyaWMgQlBBQkkgdmVyc2lvbi4gICovCi0gI3VuZGVmICBMSU5LX1NQRUMKLUluZGV4OiBnY2MtNC45LjIvbGliaXRtL2NvbmZpZy9hcm0vaHdjYXAuY2MKLT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tLSBnY2MtNC45LjIub3JpZy9saWJpdG0vY29uZmlnL2FybS9od2NhcC5jYwotKysrIGdjYy00LjkuMi9saWJpdG0vY29uZmlnL2FybS9od2NhcC5jYwotQEAgLTQwLDcgKzQwLDExIEBAIGludCBHVE1faHdjYXAgSElEREVOID0gMAotIAotICNpZmRlZiBfX2xpbnV4X18KLSAjaW5jbHVkZSA8dW5pc3RkLmg+Ci0rI2lmZGVmIF9fR0xJQkNfXwotICNpbmNsdWRlIDxzeXMvZmNudGwuaD4KLSsjZWxzZQotKyNpbmNsdWRlIDxmY250bC5oPgotKyNlbmRpZgotICNpbmNsdWRlIDxlbGYuaD4KLSAKLSBzdGF0aWMgdm9pZCBfX2F0dHJpYnV0ZV9fKChjb25zdHJ1Y3RvcikpCi1JbmRleDogZ2NjLTQuOS4yL2djYy9jb25maWcvaTM4Ni9saW51eC5oCi09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLS0gZ2NjLTQuOS4yLm9yaWcvZ2NjL2NvbmZpZy9pMzg2L2xpbnV4LmgKLSsrKyBnY2MtNC45LjIvZ2NjL2NvbmZpZy9pMzg2L2xpbnV4LmgKLUBAIC0yMSwzICsyMSw0IEBAIGFsb25nIHdpdGggR0NDOyBzZWUgdGhlIGZpbGUgQ09QWUlORzMuCi0gCi0gI2RlZmluZSBHTlVfVVNFUl9MSU5LX0VNVUxBVElPTiAiZWxmX2kzODYiCi0gI2RlZmluZSBHTElCQ19EWU5BTUlDX0xJTktFUiBTWVNURU1MSUJTX0RJUiAibGQtbGludXguc28uMiIKLSsjZGVmaW5lIE1VU0xfRFlOQU1JQ19MSU5LRVIgU1lTVEVNTElCU19ESVIgImxkLW11c2wtaTM4Ni5zby4xIgotSW5kZXg6IGdjYy00LjkuMi9nY2MvY29uZmlnL2kzODYvbGludXg2NC5oCi09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLS0gZ2NjLTQuOS4yLm9yaWcvZ2NjL2NvbmZpZy9pMzg2L2xpbnV4NjQuaAotKysrIGdjYy00LjkuMi9nY2MvY29uZmlnL2kzODYvbGludXg2NC5oCi1AQCAtMzAsMyArMzAsOCBAQCBzZWUgdGhlIGZpbGVzIENPUFlJTkczIGFuZCBDT1BZSU5HLlJVTlRJCi0gI2RlZmluZSBHTElCQ19EWU5BTUlDX0xJTktFUjMyIFNZU1RFTUxJQlNfRElSICJsZC1saW51eC5zby4yIgotICNkZWZpbmUgR0xJQkNfRFlOQU1JQ19MSU5LRVI2NCBTWVNURU1MSUJTX0RJUiAibGQtbGludXgteDg2LTY0LnNvLjIiCi0gI2RlZmluZSBHTElCQ19EWU5BTUlDX0xJTktFUlgzMiBTWVNURU1MSUJTX0RJUiAibGQtbGludXgteDMyLnNvLjIiCi0rCi0rI2RlZmluZSBNVVNMX0RZTkFNSUNfTElOS0VSMzIgU1lTVEVNTElCU19ESVIgImxkLW11c2wtaTM4Ni5zby4xIgotKyNkZWZpbmUgTVVTTF9EWU5BTUlDX0xJTktFUjY0IFNZU1RFTUxJQlNfRElSICJsZC1tdXNsLXg4Nl82NC5zby4xIgotKyNkZWZpbmUgTVVTTF9EWU5BTUlDX0xJTktFUlgzMiBTWVNURU1MSUJTX0RJUiAibGQtbXVzbC14MzIuc28uMSIKLSsKLUluZGV4OiBnY2MtNC45LjIvZ2NjL2NvbmZpZy9taXBzL2xpbnV4LmgKLT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tLSBnY2MtNC45LjIub3JpZy9nY2MvY29uZmlnL21pcHMvbGludXguaAotKysrIGdjYy00LjkuMi9nY2MvY29uZmlnL21pcHMvbGludXguaAotQEAgLTIzLDMgKzIzLDYgQEAgYWxvbmcgd2l0aCBHQ0M7IHNlZSB0aGUgZmlsZSBDT1BZSU5HMy4KLSAjdW5kZWYgVUNMSUJDX0RZTkFNSUNfTElOS0VSCi0gI2RlZmluZSBVQ0xJQkNfRFlOQU1JQ19MSU5LRVIgXAotICAgIiV7bW5hbj0yMDA4OiIgU1lTVEVNTElCU19ESVIgImxkLXVDbGliYy1taXBzbjguc28uMDs6IiBTWVNURU1MSUJTX0RJUiAibGQtdUNsaWJjLnNvLjB9IgotKwotKyNkZWZpbmUgTVVTTF9EWU5BTUlDX0xJTktFUiBTWVNURU1MSUJTX0RJUiAibGQtbXVzbC1taXBzLnNvLjEiCi0rCi1JbmRleDogZ2NjLTQuOS4yL2djYy9jb25maWcvbWlwcy9saW51eDY0LmgKLT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tLSBnY2MtNC45LjIub3JpZy9nY2MvY29uZmlnL21pcHMvbGludXg2NC5oCi0rKysgZ2NjLTQuOS4yL2djYy9jb25maWcvbWlwcy9saW51eDY0LmgKLUBAIC0zOSw2ICszOSwxMSBAQCBhbG9uZyB3aXRoIEdDQzsgc2VlIHRoZSBmaWxlIENPUFlJTkczLgotICAgIiV7bW5hbj0yMDA4OiIgU1lTVEVNTElCU19ESVIgImxkLXVDbGliYy1taXBzbjguc28uMDs6IiBTWVNURU1MSUJTX0RJUiAibGQtdUNsaWJjLnNvLjB9IgotIAotICNkZWZpbmUgQklPTklDX0RZTkFNSUNfTElOS0VSTjMyICIvc3lzdGVtL2Jpbi9saW5rZXIzMiIKLSsKLSsjZGVmaW5lIE1VU0xfRFlOQU1JQ19MSU5LRVJOMzIgU1lTVEVNTElCU19ESVIgImxkLW11c2wtbWlwcy5zby4xIgotKyNkZWZpbmUgTVVTTF9EWU5BTUlDX0xJTktFUjMyIFNZU1RFTUxJQlNfRElSICJsZC1tdXNsLW1pcHMuc28uMSIKLSsjZGVmaW5lIE1VU0xfRFlOQU1JQ19MSU5LRVI2NCBTWVNURU1MSUJTX0RJUiAibGQtbXVzbC1taXBzLnNvLjEiCi0rCi0gI2RlZmluZSBHTlVfVVNFUl9EWU5BTUlDX0xJTktFUk4zMiBcCi0gICBDSE9PU0VfRFlOQU1JQ19MSU5LRVIgKEdMSUJDX0RZTkFNSUNfTElOS0VSTjMyLCBVQ0xJQkNfRFlOQU1JQ19MSU5LRVJOMzIsIFwKLS0JCQkgQklPTklDX0RZTkFNSUNfTElOS0VSTjMyKQotKwkJCSBCSU9OSUNfRFlOQU1JQ19MSU5LRVJOMzIsIE1VU0xfRFlOQU1JQ19MSU5LRVJOMzIpCi1JbmRleDogZ2NjLTQuOS4yL2djYy9jb25maWcvcnM2MDAwL2xpbnV4NjQuaAotPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0tIGdjYy00LjkuMi5vcmlnL2djYy9jb25maWcvcnM2MDAwL2xpbnV4NjQuaAotKysrIGdjYy00LjkuMi9nY2MvY29uZmlnL3JzNjAwMC9saW51eDY0LmgKLUBAIC0zNzUsMTcgKzM3NSwyMiBAQCBleHRlcm4gaW50IGRvdF9zeW1ib2xzOwotICNlbmRpZgotICNkZWZpbmUgVUNMSUJDX0RZTkFNSUNfTElOS0VSMzIgU1lTVEVNTElCU19ESVIgImxkLXVDbGliYy5zby4wIgotICNkZWZpbmUgVUNMSUJDX0RZTkFNSUNfTElOS0VSNjQgU1lTVEVNTElCU19ESVIgImxkNjQtdUNsaWJjLnNvLjAiCi0rI2RlZmluZSBNVVNMX0RZTkFNSUNfTElOS0VSMzIgU1lTVEVNTElCU19ESVIgImxkLW11c2wtcG93ZXJwYy5zby4xIgotKyNkZWZpbmUgTVVTTF9EWU5BTUlDX0xJTktFUjY0IFNZU1RFTUxJQlNfRElSICJsZC1tdXNsLXBvd2VycGM2NC5zby4xIgotKwotICNpZiBERUZBVUxUX0xJQkMgPT0gTElCQ19VQ0xJQkMKLS0jZGVmaW5lIENIT09TRV9EWU5BTUlDX0xJTktFUihHLCBVKSAiJXttZ2xpYmM6IiBHICI7OiIgVSAifSIKLSsjZGVmaW5lIENIT09TRV9EWU5BTUlDX0xJTktFUihHLCBVLCBNKSAiJXttZ2xpYmM6IiBHICI7OiV7bW11c2w6IiBNICI7OiIgVSAifX0iCi0gI2VsaWYgREVGQVVMVF9MSUJDID09IExJQkNfR0xJQkMKLS0jZGVmaW5lIENIT09TRV9EWU5BTUlDX0xJTktFUihHLCBVKSAiJXttdWNsaWJjOiIgVSAiOzoiIEcgIn0iCi0rI2RlZmluZSBDSE9PU0VfRFlOQU1JQ19MSU5LRVIoRywgVSwgTSkgIiV7bXVjbGliYzoiIFUgIjs6JXttbXVzbDoiIE0gIjs6IiBHICJ9fSIKLSsjZWxpZiBERUZBVUxUX0xJQkMgPT0gTElCQ19NVVNMCi0rI2RlZmluZSBDSE9PU0VfRFlOQU1JQ19MSU5LRVIoRywgVSwgTSkgIiV7bWdsaWJjOiIgRyAiOzole211Y2xpYmM6IiBVICI7OiIgTSAifX0iCi0gI2Vsc2UKLSAjZXJyb3IgIlVuc3VwcG9ydGVkIERFRkFVTFRfTElCQyIKLSAjZW5kaWYKLSAjZGVmaW5lIEdOVV9VU0VSX0RZTkFNSUNfTElOS0VSMzIgXAotLSAgQ0hPT1NFX0RZTkFNSUNfTElOS0VSIChHTElCQ19EWU5BTUlDX0xJTktFUjMyLCBVQ0xJQkNfRFlOQU1JQ19MSU5LRVIzMikKLSsgIENIT09TRV9EWU5BTUlDX0xJTktFUiAoR0xJQkNfRFlOQU1JQ19MSU5LRVIzMiwgVUNMSUJDX0RZTkFNSUNfTElOS0VSMzIsIE1VU0xfRFlOQU1JQ19MSU5LRVIzMikKLSAjZGVmaW5lIEdOVV9VU0VSX0RZTkFNSUNfTElOS0VSNjQgXAotLSAgQ0hPT1NFX0RZTkFNSUNfTElOS0VSIChHTElCQ19EWU5BTUlDX0xJTktFUjY0LCBVQ0xJQkNfRFlOQU1JQ19MSU5LRVI2NCkKLSsgIENIT09TRV9EWU5BTUlDX0xJTktFUiAoR0xJQkNfRFlOQU1JQ19MSU5LRVI2NCwgVUNMSUJDX0RZTkFNSUNfTElOS0VSNjQsIE1VU0xfRFlOQU1JQ19MSU5LRVI2NCkKLSAKLSAjdW5kZWYgIERFRkFVTFRfQVNNX0VORElBTgotICNpZiAoVEFSR0VUX0RFRkFVTFQgJiBNQVNLX0xJVFRMRV9FTkRJQU4pCi1JbmRleDogZ2NjLTQuOS4yL2djYy9jb25maWcvcnM2MDAwL3N5c3Y0LmgKLT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tLSBnY2MtNC45LjIub3JpZy9nY2MvY29uZmlnL3JzNjAwMC9zeXN2NC5oCi0rKysgZ2NjLTQuOS4yL2djYy9jb25maWcvcnM2MDAwL3N5c3Y0LmgKLUBAIC03NjgsMTUgKzc2OCwxOSBAQCBFTkRJQU5fU0VMRUNUKCIgLW1iaWciLCAiIC1tbGl0dGxlIiwgREVGCi0gCi0gI2RlZmluZSBHTElCQ19EWU5BTUlDX0xJTktFUiAiL2xpYi9sZC5zby4xIgotICNkZWZpbmUgVUNMSUJDX0RZTkFNSUNfTElOS0VSICIvbGliL2xkLXVDbGliYy5zby4wIgotKyNkZWZpbmUgTVVTTF9EWU5BTUlDX0xJTktFUiAiL2xpYi9sZC1tdXNsLXBvd2VycGMuc28uMSIKLSsKLSAjaWYgREVGQVVMVF9MSUJDID09IExJQkNfVUNMSUJDCi0tI2RlZmluZSBDSE9PU0VfRFlOQU1JQ19MSU5LRVIoRywgVSkgIiV7bWdsaWJjOiIgRyAiOzoiIFUgIn0iCi0rI2RlZmluZSBDSE9PU0VfRFlOQU1JQ19MSU5LRVIoRywgVSwgTSkgIiV7bWdsaWJjOiIgRyAiOzole21tdXNsOiIgTSAiOzoiIFUgIn19IgotKyNlbGlmIERFRkFVTFRfTElCQyA9PSBMSUJDX01VU0wKLSsjZGVmaW5lIENIT09TRV9EWU5BTUlDX0xJTktFUihHLCBVLCBNKSAiJXttZ2xpYmM6IiBHICI7OiV7bXVjbGliYzoiIFUgIjs6IiBNICJ9fSIKLSAjZWxpZiAhZGVmaW5lZCAoREVGQVVMVF9MSUJDKSB8fCBERUZBVUxUX0xJQkMgPT0gTElCQ19HTElCQwotLSNkZWZpbmUgQ0hPT1NFX0RZTkFNSUNfTElOS0VSKEcsIFUpICIle211Y2xpYmM6IiBVICI7OiIgRyAifSIKLSsjZGVmaW5lIENIT09TRV9EWU5BTUlDX0xJTktFUihHLCBVLCBNKSAiJXttdWNsaWJjOiIgVSAiOzole21tdXNsOiIgTSAiOzoiIEcgIn19IgotICNlbHNlCi0gI2Vycm9yICJVbnN1cHBvcnRlZCBERUZBVUxUX0xJQkMiCi0gI2VuZGlmCi0gI2RlZmluZSBHTlVfVVNFUl9EWU5BTUlDX0xJTktFUiBcCi0tICBDSE9PU0VfRFlOQU1JQ19MSU5LRVIgKEdMSUJDX0RZTkFNSUNfTElOS0VSLCBVQ0xJQkNfRFlOQU1JQ19MSU5LRVIpCi0rICBDSE9PU0VfRFlOQU1JQ19MSU5LRVIgKEdMSUJDX0RZTkFNSUNfTElOS0VSLCBVQ0xJQkNfRFlOQU1JQ19MSU5LRVIsIE1VU0xfRFlOQU1JQ19MSU5LRVIpCi0gCi0gI2RlZmluZSBMSU5LX09TX0xJTlVYX1NQRUMgIi1tIGVsZjMycHBjbGludXggJXshc2hhcmVkOiAleyFzdGF0aWM6IFwKLSAgICV7cmR5bmFtaWM6LWV4cG9ydC1keW5hbWljfSBcCi1JbmRleDogZ2NjLTQuOS4yL2xpYml0bS9jb25maWcvbGludXgveDg2L3Rscy5oCi09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLS0gZ2NjLTQuOS4yLm9yaWcvbGliaXRtL2NvbmZpZy9saW51eC94ODYvdGxzLmgKLSsrKyBnY2MtNC45LjIvbGliaXRtL2NvbmZpZy9saW51eC94ODYvdGxzLmgKLUBAIC0yNSwxNiArMjUsMTkgQEAKLSAjaWZuZGVmIExJQklUTV9YODZfVExTX0gKLSAjZGVmaW5lIExJQklUTV9YODZfVExTX0ggMQotIAotLSNpZiBkZWZpbmVkKF9fR0xJQkNfUFJFUkVRKSAmJiBfX0dMSUJDX1BSRVJFUSgyLCAxMCkKLSsjaWYgZGVmaW5lZChfX0dMSUJDX1BSRVJFUSkKLSsjaWYgX19HTElCQ19QUkVSRVEoMiwgMTApCi0gLyogVXNlIHNsb3RzIGluIHRoZSBUQ0IgaGVhZCByYXRoZXIgdGhhbiBfX3RocmVhZCBsb29rdXBzLgotICAgIEdMSUJDIGhhcyByZXNlcnZlZCB3b3JkcyAxMCB0aHJvdWdoIDEzIGZvciBUTS4gICovCi0gI2RlZmluZSBIQVZFX0FSQ0hfR1RNX1RIUkVBRCAxCi0gI2RlZmluZSBIQVZFX0FSQ0hfR1RNX1RIUkVBRF9ESVNQIDEKLSAjZW5kaWYKLSsjZW5kaWYKLSAKLSAjaW5jbHVkZSAiY29uZmlnL2dlbmVyaWMvdGxzLmgiCi0gCi0tI2lmIGRlZmluZWQoX19HTElCQ19QUkVSRVEpICYmIF9fR0xJQkNfUFJFUkVRKDIsIDEwKQotKyNpZiBkZWZpbmVkKF9fR0xJQkNfUFJFUkVRKQotKyNpZiBfX0dMSUJDX1BSRVJFUSgyLCAxMCkKLSBuYW1lc3BhY2UgR1RNIEhJRERFTiB7Ci0gCi0gI2lmZGVmIF9feDg2XzY0X18KLUBAIC0xMDEsNSArMTA0LDYgQEAgc3RhdGljIGlubGluZSB2b2lkIHNldF9hYmlfZGlzcChzdHJ1Y3QgYQotIAotIH0gLy8gbmFtZXNwYWNlIEdUTQotICNlbmRpZiAvKiA+PSBHTElCQyAyLjEwICovCi0rI2VuZGlmCi0gCi0gI2VuZGlmIC8vIExJQklUTV9YODZfVExTX0gKLUluZGV4OiBnY2MtNC45LjIvZ2NjL2NvbmZpZy9hYXJjaDY0L2FhcmNoNjQtbGludXguaAotPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0tIGdjYy00LjkuMi5vcmlnL2djYy9jb25maWcvYWFyY2g2NC9hYXJjaDY0LWxpbnV4LmgKLSsrKyBnY2MtNC45LjIvZ2NjL2NvbmZpZy9hYXJjaDY0L2FhcmNoNjQtbGludXguaAotQEAgLTI1LDYgKzI1LDggQEAKLSAKLSAjZGVmaW5lIENQUF9TUEVDICIle3B0aHJlYWQ6LURfUkVFTlRSQU5UfSIKLSAKLSsjZGVmaW5lIE1VU0xfRFlOQU1JQ19MSU5LRVIgU1lTVEVNTElCU19ESVIgImxkLW11c2wtYWFyY2g2NC5zby4xIgotKwotICNkZWZpbmUgTElOVVhfVEFSR0VUX0xJTktfU1BFQyAgIiV7aCp9CQlcCi0gICAgJXtzdGF0aWM6LUJzdGF0aWN9CQkJCVwKLSAgICAle3NoYXJlZDotc2hhcmVkfQkJCQlcCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNC45LzAwNjktbXVzbC1uby1maXhpbmNsdWRlcy5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy00LjkvMDA2OS1tdXNsLW5vLWZpeGluY2x1ZGVzLnBhdGNoCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlMmIxOGE0Li4wMDAwMDAwCi0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy00LjkvMDA2OS1tdXNsLW5vLWZpeGluY2x1ZGVzLnBhdGNoCisrKyAvZGV2L251bGwKQEAgLTEsMjEgKzAsMCBAQAotIyBIRyBjaGFuZ2VzZXQgcGF0Y2gKLSMgUGFyZW50IDYwMGE4YTQyMmNjYWY1NjI3YWQxZjVhMTM4ZTczOThkZjJiOWU5ZDgKLUdldCByaWQgb2YgZXZlci1icm9rZW4gZml4aW5jbHVkZXMgb24gbXVzbC4KLVVwc3RyZWFtLVN0YXR1czogUGVuZGluZwotU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KLQotCi1JbmRleDogZ2NjLTQuOS0yMDE0MDMxNi9maXhpbmNsdWRlcy9ta2ZpeGluYy5zaAotPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0tIGdjYy00LjktMjAxNDAzMTYub3JpZy9maXhpbmNsdWRlcy9ta2ZpeGluYy5zaAotKysrIGdjYy00LjktMjAxNDAzMTYvZml4aW5jbHVkZXMvbWtmaXhpbmMuc2gKLUBAIC0xOSw3ICsxOSw4IEBAIGNhc2UgJG1hY2hpbmUgaW4KLSAgICAgcG93ZXJwYy0qLWVhYmkqICAgIHwgXAotICAgICBwb3dlcnBjLSotcnRlbXMqICAgfCBcCi0gICAgIHBvd2VycGNsZS0qLWVhYmlzaW0qIHwgXAotLSAgICBwb3dlcnBjbGUtKi1lYWJpKiApCi0rICAgIHBvd2VycGNsZS0qLWVhYmkqIHwgXAotKyAgICAqLW11c2wqICkKLSAJIyAgSUYgdGhlcmUgaXMgbm8gaW5jbHVkZSBmaXhpbmcsCi0gCSMgIFRIRU4gY3JlYXRlIGEgbm8tb3AgZml4ZXIgYW5kIGV4aXQKLSAJKGVjaG8gIiMhIC9iaW4vc2giIDsgZWNobyAiZXhpdCAwIiApID4gJHt0YXJnZXR9CmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNC45LzAwNzAtbGlic3RkYy1tdXNsLnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTQuOS8wMDcwLWxpYnN0ZGMtbXVzbC5wYXRjaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDQ4ZTQ4MS4uMDAwMDAwMAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNC45LzAwNzAtbGlic3RkYy1tdXNsLnBhdGNoCisrKyAvZGV2L251bGwKQEAgLTEsMzIgKzAsMCBAQAotVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCi1TaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgotCi1JbmRleDogZ2NjLTQuOS0yMDE0MDMxNi9saWJzdGRjKystdjMvY29uZmlndXJlLmhvc3QKLT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tLSBnY2MtNC45LTIwMTQwMzE2Lm9yaWcvbGlic3RkYysrLXYzL2NvbmZpZ3VyZS5ob3N0CTIwMTQtMDMtMjYgMDE6MTI6MTkuNDY2MDA4MTkzIC0wNzAwCi0rKysgZ2NjLTQuOS0yMDE0MDMxNi9saWJzdGRjKystdjMvY29uZmlndXJlLmhvc3QJMjAxNC0wMy0yNiAwMTo0Mzo0OC4yMjI2ODQzNTcgLTA3MDAKLUBAIC0yNjQsMTQgKzI2NCwyNCBAQAotICAgICBvc19pbmNsdWRlX2Rpcj0ib3MvYnNkL2ZyZWVic2QiCi0gICAgIDs7Ci0gICBnbnUqIHwgbGludXgqIHwga2ZyZWVic2QqLWdudSB8IGtuZXRic2QqLWdudSkKLSsgICAgIyBjaGVjayBmb3IgbXVzbCBieSB0YXJnZXQKLSsgICAgY2FzZSAiJHtob3N0X29zfSIgaW4KLSsgICAgICAqLW11c2wqKQotKyAgICAgICAgb3NfaW5jbHVkZV9kaXI9Im9zL2dlbmVyaWMiCi0rICAgICAgICA7OwotKyAgICAgICopCi0gICAgIGlmIFsgIiR1Y2xpYmMiID0gInllcyIgXTsgdGhlbgotICAgICAgIG9zX2luY2x1ZGVfZGlyPSJvcy91Y2xpYmMiCi0gICAgIGVsaWYgWyAiJGJpb25pYyIgPSAieWVzIiBdOyB0aGVuCi0gICAgICAgb3NfaW5jbHVkZV9kaXI9Im9zL2Jpb25pYyIKLSsgICAgZWxpZiBbICIkbXVzbCIgPSAieWVzIiBdOyB0aGVuCi0rICAgICAgb3NfaW5jbHVkZV9kaXI9Im9zL2dlbmVyaWMiCi0gICAgIGVsc2UKLSAgICAgICBvc19pbmNsdWRlX2Rpcj0ib3MvZ251LWxpbnV4IgotICAgICBmaQotICAgICA7OwotKyAgICBlc2FjCi0rICAgIDs7Ci0gICBocHV4KikKLSAgICAgb3NfaW5jbHVkZV9kaXI9Im9zL2hwdXgiCi0gICAgIDs7CmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNC45LzAwNzEtSWdub3JlLWZkZWJ1Zy1wcmVmaXgtbWFwLWluLXByb2R1Y2VyLXN0cmluZy1ieS1EYW5pZS5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy00LjkvMDA3MS1JZ25vcmUtZmRlYnVnLXByZWZpeC1tYXAtaW4tcHJvZHVjZXItc3RyaW5nLWJ5LURhbmllLnBhdGNoCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlOGY3OWI1Li4wMDAwMDAwCi0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy00LjkvMDA3MS1JZ25vcmUtZmRlYnVnLXByZWZpeC1tYXAtaW4tcHJvZHVjZXItc3RyaW5nLWJ5LURhbmllLnBhdGNoCisrKyAvZGV2L251bGwKQEAgLTEsMzEgKzAsMCBAQAotRnJvbSAzMjU5M2IzODA4MmVhNjVmNGM4MjE1OTI1NGFkZjFlMGRjMjQyM2JlIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQotRnJvbTogYmVybmRzIDxiZXJuZHNAMTM4YmM3NWQtMGQwNC0wNDEwLTk2MWYtODJlZTcyYjA1NGE0PgotRGF0ZTogVHVlLCAxNiBGZWIgMjAxNiAwMzoxNToxNSAtMDUwMAotU3ViamVjdDogW1BBVENIXSBJZ25vcmUgLWZkZWJ1Zy1wcmVmaXgtbWFwIGluIHByb2R1Y2VyIHN0cmluZyAoYnkgRGFuaWVsIEthaG4KLSBHaWxsbW9yKQotCi0qIGR3YXJmMm91dC5jIChnZW5fcHJvZHVjZXJfc3RyaW5nKTogSWdub3JlIC1mZGVidWctcHJlZml4LW1hcC4KLQotZ2l0LXN2bi1pZDogc3ZuK3NzaDovL2djYy5nbnUub3JnL3N2bi9nY2MvdHJ1bmtAMjMxODM1IDEzOGJjNzVkLTBkMDQtMDQxMC05NjFmLTgyZWU3MmIwNTRhNAotCi1VcHN0cmVhbS1TdGF0dXM6IEJhY2twb3J0Ci1TaWduZWQtb2ZmLWJ5OiBIb25neHUgSmlhIDxob25neHUuamlhQHdpbmRyaXZlci5jb20+Ci0tLS0KLSBnY2MvZHdhcmYyb3V0LmMgfCAxICsKLSAxIGZpbGUgY2hhbmdlZCwgMSBpbnNlcnRpb24oKykKLQotZGlmZiAtLWdpdCBhL2djYy9kd2FyZjJvdXQuYyBiL2djYy9kd2FyZjJvdXQuYwotaW5kZXggMzYxNGMxMC4uNTI2ZjExNCAxMDA2NDQKLS0tLSBhL2djYy9kd2FyZjJvdXQuYwotKysrIGIvZ2NjL2R3YXJmMm91dC5jCi1AQCAtMTk2NzAsNiArMTk2NzAsNyBAQCBnZW5fcHJvZHVjZXJfc3RyaW5nICh2b2lkKQotICAgICAgIGNhc2UgT1BUX2ZwcmVwcm9jZXNzZWQ6Ci0gICAgICAgY2FzZSBPUFRfZmx0cmFuc19vdXRwdXRfbGlzdF86Ci0gICAgICAgY2FzZSBPUFRfZnJlc29sdXRpb25fOgotKyAgICAgIGNhc2UgT1BUX2ZkZWJ1Z19wcmVmaXhfbWFwXzoKLSAJLyogSWdub3JlIHRoZXNlLiAgKi8KLSAJY29udGludWU7Ci0gICAgICAgZGVmYXVsdDoKLS0tIAotMS45LjEKLQpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTQuOS8wMDcyLXN1cHBvcnQtZmZpbGUtcHJlZml4LW1hcC5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy00LjkvMDA3Mi1zdXBwb3J0LWZmaWxlLXByZWZpeC1tYXAucGF0Y2gKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDk4MDlhNmEuLjAwMDAwMDAKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTQuOS8wMDcyLXN1cHBvcnQtZmZpbGUtcHJlZml4LW1hcC5wYXRjaAorKysgL2Rldi9udWxsCkBAIC0xLDI4NCArMCwwIEBACi1Gcm9tIGU4NjNiZTc5OGVkMTMzMTJhMGZhZjBiOTYxMjc1ZjIxMWE4MTIzYWIgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCi1Gcm9tOiBIb25neHUgSmlhIDxob25neHUuamlhQHdpbmRyaXZlci5jb20+Ci1EYXRlOiBUaHUsIDE3IE1hciAyMDE2IDAwOjMyOjE3IC0wNDAwCi1TdWJqZWN0OiBbUEFUQ0hdIGdjYy9saWJjcHA6IHN1cHBvcnQgLWZmaWxlLXByZWZpeC1tYXA9PG9sZD49PG5ldz4KLQotU2ltaWxhciAtZmRlYnVnLXByZWZpeC1tYXAsIGFkZCBvcHRpb24gLWZmaWxlLXByZWZpeC1tYXAgdG8gbWFwIG9uZQotZGlyZWN0b3J5IG5hbWUgKG9sZCkgdG8gYW5vdGhlciAobmV3KSBpbiBfX0ZJTEVfXywgX19CQVNFX0ZJTEVfXyBhbmQKLV9fYnVpbHRpbl9GSUxFICgpLgotCi1odHRwczovL2djYy5nbnUub3JnL2J1Z3ppbGxhL3Nob3dfYnVnLmNnaT9pZD03MDI2OAotCi1VcHN0cmVhbS1TdGF0dXM6IFN1Ym1pdHRlZCBbZ2NjLXBhdGNoZXNAZ2NjLmdudS5vcmddCi1TaWduZWQtb2ZmLWJ5OiBIb25neHUgSmlhIDxob25neHUuamlhQHdpbmRyaXZlci5jb20+Ci0tLS0KLSBnY2MvYy1mYW1pbHkvYy1vcHRzLmMgICAgIHwgIDYgKysrKwotIGdjYy9jLWZhbWlseS9jLm9wdCAgICAgICAgfCAgNCArKysKLSBnY2MvZHdhcmYyb3V0LmMgICAgICAgICAgIHwgIDEgKwotIGdjYy9naW1wbGlmeS5jICAgICAgICAgICAgfCAgMiArKwotIGxpYmNwcC9NYWtlZmlsZS5pbiAgICAgICAgfCAxMCArKystLS0KLSBsaWJjcHAvZmlsZS1tYXAuYyAgICAgICAgIHwgOTIgKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysKLSBsaWJjcHAvaW5jbHVkZS9maWxlLW1hcC5oIHwgMzAgKysrKysrKysrKysrKysrKwotIGxpYmNwcC9tYWNyby5jICAgICAgICAgICAgfCAgMiArKwotIDggZmlsZXMgY2hhbmdlZCwgMTQyIGluc2VydGlvbnMoKyksIDUgZGVsZXRpb25zKC0pCi0gY3JlYXRlIG1vZGUgMTAwNjQ0IGxpYmNwcC9maWxlLW1hcC5jCi0gY3JlYXRlIG1vZGUgMTAwNjQ0IGxpYmNwcC9pbmNsdWRlL2ZpbGUtbWFwLmgKLQotZGlmZiAtLWdpdCBhL2djYy9jLWZhbWlseS9jLW9wdHMuYyBiL2djYy9jLWZhbWlseS9jLW9wdHMuYwotaW5kZXggZGQ1ZmQyMy4uOWMwMDRhMSAxMDA2NDQKLS0tLSBhL2djYy9jLWZhbWlseS9jLW9wdHMuYwotKysrIGIvZ2NjL2MtZmFtaWx5L2Mtb3B0cy5jCi1AQCAtMzYsNiArMzYsNyBAQCBhbG9uZyB3aXRoIEdDQzsgc2VlIHRoZSBmaWxlIENPUFlJTkczLiAgSWYgbm90IHNlZQotICNpbmNsdWRlICJvcHRpb25zLmgiCi0gI2luY2x1ZGUgInBsdWdpbi5oIgkJLyogRm9yIFBMVUdJTl9JTkNMVURFX0ZJTEUgZXZlbnQuICAqLwotICNpbmNsdWRlICJta2RlcHMuaCIKLSsjaW5jbHVkZSAiZmlsZS1tYXAuaCIKLSAjaW5jbHVkZSAiYy10YXJnZXQuaCIKLSAjaW5jbHVkZSAidG0uaCIJCQkvKiBGb3IgQllURVNfQklHX0VORElBTiwKLSAJCQkJICAgRE9MTEFSU19JTl9JREVOVElGSUVSUywKLUBAIC01NTMsNiArNTU0LDExIEBAIGNfY29tbW9uX2hhbmRsZV9vcHRpb24gKHNpemVfdCBzY29kZSwgY29uc3QgY2hhciAqYXJnLCBpbnQgdmFsdWUsCi0gICAgICAgY3BwX29wdHMtPm5hcnJvd19jaGFyc2V0ID0gYXJnOwotICAgICAgIGJyZWFrOwotIAotKyAgICBjYXNlIE9QVF9mZmlsZV9wcmVmaXhfbWFwXzoKLSsgICAgICBpZiAoYWRkX2ZpbGVfcHJlZml4X21hcCAoYXJnKSA8IDApCi0rICAgICAgICBlcnJvciAoImludmFsaWQgYXJndW1lbnQgJXFzIHRvIC1mZmlsZS1wcmVmaXgtbWFwIiwgYXJnKTsKLSsgICAgICBicmVhazsKLSsKLSAgICAgY2FzZSBPUFRfZndpZGVfZXhlY19jaGFyc2V0XzoKLSAgICAgICBjcHBfb3B0cy0+d2lkZV9jaGFyc2V0ID0gYXJnOwotICAgICAgIGJyZWFrOwotZGlmZiAtLWdpdCBhL2djYy9jLWZhbWlseS9jLm9wdCBiL2djYy9jLWZhbWlseS9jLm9wdAotaW5kZXggZjI5NTgwNS4uM2E5OTY2MiAxMDA2NDQKLS0tLSBhL2djYy9jLWZhbWlseS9jLm9wdAotKysrIGIvZ2NjL2MtZmFtaWx5L2Mub3B0Ci1AQCAtOTI4LDYgKzkyOCwxMCBAQCBmZXhlYy1jaGFyc2V0PQotIEMgT2JqQyBDKysgT2JqQysrIEpvaW5lZCBSZWplY3ROZWdhdGl2ZQotIC1mZXhlYy1jaGFyc2V0PTxjc2V0PglDb252ZXJ0IGFsbCBzdHJpbmdzIGFuZCBjaGFyYWN0ZXIgY29uc3RhbnRzIHRvIGNoYXJhY3RlciBzZXQgPGNzZXQ+Ci0gCi0rZmZpbGUtcHJlZml4LW1hcD0KLStDIE9iakMgQysrIE9iakMrKyBKb2luZWQgUmVqZWN0TmVnYXRpdmUKLSstZmZpbGUtcHJlZml4LW1hcD08b2xkPW5ldz4JTWFwIG9uZSBkaXJlY3RvcnkgbmFtZSB0byBhbm90aGVyIGluIF9fRklMRV9fLCBfX0JBU0VfRklMRV9fIGFuZCBfX2J1aWx0aW5fRklMRSAoKQotKwotIGZleHRlbmRlZC1pZGVudGlmaWVycwotIEMgT2JqQyBDKysgT2JqQysrCi0gUGVybWl0IHVuaXZlcnNhbCBjaGFyYWN0ZXIgbmFtZXMgKFxcdSBhbmQgXFxVKSBpbiBpZGVudGlmaWVycwotZGlmZiAtLWdpdCBhL2djYy9kd2FyZjJvdXQuYyBiL2djYy9kd2FyZjJvdXQuYwotaW5kZXggOTliZjZlMi4uM2U1OGNmZCAxMDA2NDQKLS0tLSBhL2djYy9kd2FyZjJvdXQuYwotKysrIGIvZ2NjL2R3YXJmMm91dC5jCi1AQCAtMTkxOTksNiArMTkxOTksNyBAQCBnZW5fcHJvZHVjZXJfc3RyaW5nICh2b2lkKQotICAgICAgIGNhc2UgT1BUX2ZsdHJhbnNfb3V0cHV0X2xpc3RfOgotICAgICAgIGNhc2UgT1BUX2ZyZXNvbHV0aW9uXzoKLSAgICAgICBjYXNlIE9QVF9mZGVidWdfcHJlZml4X21hcF86Ci0rICAgICAgY2FzZSBPUFRfZmZpbGVfcHJlZml4X21hcF86Ci0gCS8qIElnbm9yZSB0aGVzZS4gICovCi0gCWNvbnRpbnVlOwotICAgICAgIGRlZmF1bHQ6Ci1kaWZmIC0tZ2l0IGEvZ2NjL2dpbXBsaWZ5LmMgYi9nY2MvZ2ltcGxpZnkuYwotaW5kZXggODllNzMzNC4uYTdhOTdjMCAxMDA2NDQKLS0tLSBhL2djYy9naW1wbGlmeS5jCi0rKysgYi9nY2MvZ2ltcGxpZnkuYwotQEAgLTU5LDYgKzU5LDcgQEAgYWxvbmcgd2l0aCBHQ0M7IHNlZSB0aGUgZmlsZSBDT1BZSU5HMy4gIElmIG5vdCBzZWUKLSAjaW5jbHVkZSAib21wLWxvdy5oIgotICNpbmNsdWRlICJnaW1wbGUtbG93LmgiCi0gI2luY2x1ZGUgImNpbGsuaCIKLSsjaW5jbHVkZSAiZmlsZS1tYXAuaCIKLSAKLSAjaW5jbHVkZSAibGFuZ2hvb2tzLWRlZi5oIgkvKiBGSVhNRTogZm9yIGxoZF9zZXRfZGVjbF9hc3NlbWJsZXJfbmFtZSAqLwotICNpbmNsdWRlICJ0cmVlLXBhc3MuaCIJCS8qIEZJWE1FOiBvbmx5IGZvciBQUk9QX2dpbXBsZV9hbnkgKi8KLUBAIC0yMjg4LDYgKzIyODksNyBAQCBnaW1wbGlmeV9jYWxsX2V4cHIgKHRyZWUgKmV4cHJfcCwgZ2ltcGxlX3NlcSAqcHJlX3AsIGJvb2wgd2FudF92YWx1ZSkKLSAgICAgICBjYXNlIEJVSUxUX0lOX0ZJTEU6Ci0gCXsKLSAJICBleHBhbmRlZF9sb2NhdGlvbiBsb2MgPSBleHBhbmRfbG9jYXRpb24gKEVYUFJfTE9DQVRJT04gKCpleHByX3ApKTsKLSsJICBsb2MuZmlsZSA9IHJlbWFwX2ZpbGVfZmlsZW5hbWUgKGxvYy5maWxlKTsKLSAJICAqZXhwcl9wID0gYnVpbGRfc3RyaW5nX2xpdGVyYWwgKHN0cmxlbiAobG9jLmZpbGUpICsgMSwgbG9jLmZpbGUpOwotIAkgIHJldHVybiBHU19PSzsKLSAJfQotZGlmZiAtLWdpdCBhL2xpYmNwcC9NYWtlZmlsZS5pbiBiL2xpYmNwcC9NYWtlZmlsZS5pbgotaW5kZXggNTU2MWM5Ny4uNTAxNzI1NiAxMDA2NDQKLS0tLSBhL2xpYmNwcC9NYWtlZmlsZS5pbgotKysrIGIvbGliY3BwL01ha2VmaWxlLmluCi1AQCAtODQsMTIgKzg0LDEyIEBAIERFUE1PREUgPSAkKENYWERFUE1PREUpCi0gCi0gCi0gbGliY3BwX2FfT0JKUyA9IGNoYXJzZXQubyBkaXJlY3RpdmVzLm8gZGlyZWN0aXZlcy1vbmx5Lm8gZXJyb3JzLm8gXAotLQlleHByLm8gZmlsZXMubyBpZGVudGlmaWVycy5vIGluaXQubyBsZXgubyBsaW5lLW1hcC5vIG1hY3JvLm8gXAotLQlta2RlcHMubyBwY2gubyBzeW10YWIubyB0cmFkaXRpb25hbC5vCi0rCWV4cHIubyBmaWxlLW1hcC5vIGZpbGVzLm8gaWRlbnRpZmllcnMubyBpbml0Lm8gbGV4Lm8gbGluZS1tYXAubyBcCi0rCW1hY3JvLm8gbWtkZXBzLm8gcGNoLm8gc3ltdGFiLm8gdHJhZGl0aW9uYWwubwotIAotIGxpYmNwcF9hX1NPVVJDRVMgPSBjaGFyc2V0LmMgZGlyZWN0aXZlcy5jIGRpcmVjdGl2ZXMtb25seS5jIGVycm9ycy5jIFwKLS0JZXhwci5jIGZpbGVzLmMgaWRlbnRpZmllcnMuYyBpbml0LmMgbGV4LmMgbGluZS1tYXAuYyBtYWNyby5jIFwKLS0JbWtkZXBzLmMgcGNoLmMgc3ltdGFiLmMgdHJhZGl0aW9uYWwuYwotKwlleHByLmMgZmlsZS1tYXAuYyBmaWxlcy5jIGlkZW50aWZpZXJzLmMgaW5pdC5jIGxleC5jIGxpbmUtbWFwLmMgXAotKwltYWNyby5jIG1rZGVwcy5jIHBjaC5jIHN5bXRhYi5jIHRyYWRpdGlvbmFsLmMKLSAKLSBhbGw6IGxpYmNwcC5hICQoVVNFRF9DQVRBTE9HUykKLSAKLUBAIC0yNjMsNyArMjYzLDcgQEAgcG8vJChQQUNLQUdFKS5wb3Q6ICQobGliY3BwX2FfU09VUkNFUykKLSAKLSBUQUdTX1NPVVJDRVMgPSAkKGxpYmNwcF9hX1NPVVJDRVMpIGludGVybmFsLmggdWNuaWQuaCBcCi0gICAgIGluY2x1ZGUvbGluZS1tYXAuaCBpbmNsdWRlL3N5bXRhYi5oIGluY2x1ZGUvY3BwLWlkLWRhdGEuaCBcCi0tICAgIGluY2x1ZGUvY3BwbGliLmggaW5jbHVkZS9ta2RlcHMuaCBzeXN0ZW0uaAotKyAgICBpbmNsdWRlL2NwcGxpYi5oIGluY2x1ZGUvbWtkZXBzLmggc3lzdGVtLmggaW5jbHVkZS9maWxlLW1hcC5oCi0gCi0gVEFHUzogJChUQUdTX1NPVVJDRVMpCi0gCWNkICQoc3JjZGlyKSAmJiBldGFncyAkKFRBR1NfU09VUkNFUykKLWRpZmYgLS1naXQgYS9saWJjcHAvZmlsZS1tYXAuYyBiL2xpYmNwcC9maWxlLW1hcC5jCi1uZXcgZmlsZSBtb2RlIDEwMDY0NAotaW5kZXggMDAwMDAwMC4uMDRlODUxYgotLS0tIC9kZXYvbnVsbAotKysrIGIvbGliY3BwL2ZpbGUtbWFwLmMKLUBAIC0wLDAgKzEsOTIgQEAKLSsvKiBNYXAgb25lIGRpcmVjdG9yeSBuYW1lIHRvIGFub3RoZXIgaW4gX19GSUxFX18sIF9fQkFTRV9GSUxFX18KLSsgICBhbmQgX19idWlsdGluX0ZJTEUgKCkuCi0rICAgQ29weXJpZ2h0IChDKSAyMDAxLTIwMTYgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCi0rCi0rVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKLSt1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKLStGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55Ci0rbGF0ZXIgdmVyc2lvbi4KLSsKLStUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLStidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotK01FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKLStHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotKwotK1lvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0rYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IHNlZSB0aGUgZmlsZSBDT1BZSU5HMy4gIElmIG5vdCBzZWUKLSs8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCi0rCi0rIEluIG90aGVyIHdvcmRzLCB5b3UgYXJlIHdlbGNvbWUgdG8gdXNlLCBzaGFyZSBhbmQgaW1wcm92ZSB0aGlzIHByb2dyYW0uCi0rIFlvdSBhcmUgZm9yYmlkZGVuIHRvIGZvcmJpZCBhbnlvbmUgZWxzZSB0byB1c2UsIHNoYXJlIGFuZCBpbXByb3ZlCi0rIHdoYXQgeW91IGdpdmUgdGhlbS4gICBIZWxwIHN0YW1wIG91dCBzb2Z0d2FyZS1ob2FyZGluZyEgICovCi0rCi0rI2luY2x1ZGUgImNvbmZpZy5oIgotKyNpbmNsdWRlICJzeXN0ZW0uaCIKLSsjaW5jbHVkZSAiZmlsZS1tYXAuaCIKLSsKLSsvKiBTdHJ1Y3R1cmUgcmVjb3JkaW5nIHRoZSBtYXBwaW5nIGZyb20gc291cmNlIGZpbGUgYW5kIGRpcmVjdG9yeQotKyAgIG5hbWVzIGF0IGNvbXBpbGUgdGltZSB0byBfX0ZJTEVfXyAqLwotK3R5cGVkZWYgc3RydWN0IGZpbGVfcHJlZml4X21hcAotK3sKLSsgIGNvbnN0IGNoYXIgKm9sZF9wcmVmaXg7Ci0rICBjb25zdCBjaGFyICpuZXdfcHJlZml4OwotKyAgc2l6ZV90IG9sZF9sZW47Ci0rICBzaXplX3QgbmV3X2xlbjsKLSsgIHN0cnVjdCBmaWxlX3ByZWZpeF9tYXAgKm5leHQ7Ci0rfSBmaWxlX3ByZWZpeF9tYXA7Ci0rCi0rLyogTGlua2VkIGxpc3Qgb2Ygc3VjaCBzdHJ1Y3R1cmVzLiAgKi8KLStzdGF0aWMgZmlsZV9wcmVmaXhfbWFwICpmaWxlX3ByZWZpeF9tYXBzOwotKwotKy8qIFJlY29yZCBwcmVmaXggbWFwcGluZyBvZiBfX0ZJTEVfXy4gIEFSRyBpcyB0aGUgYXJndW1lbnQgdG8KLSsgICAtZmZpbGUtcHJlZml4LW1hcCBhbmQgbXVzdCBiZSBvZiB0aGUgZm9ybSBPTEQ9TkVXLiAgKi8KLStpbnQKLSthZGRfZmlsZV9wcmVmaXhfbWFwIChjb25zdCBjaGFyICphcmcpCi0rewotKyAgZmlsZV9wcmVmaXhfbWFwICptYXA7Ci0rICBjb25zdCBjaGFyICpwOwotKwotKyAgcCA9IHN0cmNociAoYXJnLCAnPScpOwotKyAgaWYgKCFwKQotKyAgewotKyAgICAgIGZwcmludGYoc3RkZXJyLCAiaW52YWxpZCBhcmd1bWVudCAlcXMgdG8gLWZmaWxlLXByZWZpeC1tYXAiLCBhcmcpOwotKyAgICAgIHJldHVybiAtMTsKLSsgIH0KLSsgIG1hcCA9IFhORVcgKGZpbGVfcHJlZml4X21hcCk7Ci0rICBtYXAtPm9sZF9wcmVmaXggPSB4c3RybmR1cCAoYXJnLCBwIC0gYXJnKTsKLSsgIG1hcC0+b2xkX2xlbiA9IHAgLSBhcmc7Ci0rICBwKys7Ci0rICBtYXAtPm5ld19wcmVmaXggPSB4c3RyZHVwIChwKTsKLSsgIG1hcC0+bmV3X2xlbiA9IHN0cmxlbiAocCk7Ci0rICBtYXAtPm5leHQgPSBmaWxlX3ByZWZpeF9tYXBzOwotKyAgZmlsZV9wcmVmaXhfbWFwcyA9IG1hcDsKLSsKLSsgIHJldHVybiAwOwotK30KLSsKLSsvKiBQZXJmb3JtIHVzZXItc3BlY2lmaWVkIG1hcHBpbmcgb2YgX19GSUxFX18gcHJlZml4ZXMuICBSZXR1cm4KLSsgICB0aGUgbmV3IG5hbWUgY29ycmVzcG9uZGluZyB0byBmaWxlbmFtZS4gICovCi0rCi0rY29uc3QgY2hhciAqCi0rcmVtYXBfZmlsZV9maWxlbmFtZSAoY29uc3QgY2hhciAqZmlsZW5hbWUpCi0rewotKyAgZmlsZV9wcmVmaXhfbWFwICptYXA7Ci0rICBjaGFyICpzOwotKyAgY29uc3QgY2hhciAqbmFtZTsKLSsgIHNpemVfdCBuYW1lX2xlbjsKLSsKLSsgIGZvciAobWFwID0gZmlsZV9wcmVmaXhfbWFwczsgbWFwOyBtYXAgPSBtYXAtPm5leHQpCi0rICAgIGlmIChmaWxlbmFtZV9uY21wIChmaWxlbmFtZSwgbWFwLT5vbGRfcHJlZml4LCBtYXAtPm9sZF9sZW4pID09IDApCi0rICAgICAgYnJlYWs7Ci0rICBpZiAoIW1hcCkKLSsgICAgcmV0dXJuIGZpbGVuYW1lOwotKyAgbmFtZSA9IGZpbGVuYW1lICsgbWFwLT5vbGRfbGVuOwotKyAgbmFtZV9sZW4gPSBzdHJsZW4gKG5hbWUpICsgMTsKLSsgIHMgPSAoY2hhciAqKSBhbGxvY2EgKG5hbWVfbGVuICsgbWFwLT5uZXdfbGVuKTsKLSsgIG1lbWNweSAocywgbWFwLT5uZXdfcHJlZml4LCBtYXAtPm5ld19sZW4pOwotKyAgbWVtY3B5IChzICsgbWFwLT5uZXdfbGVuLCBuYW1lLCBuYW1lX2xlbik7Ci0rCi0rICByZXR1cm4geHN0cmR1cCAocyk7Ci0rfQotKwotKwotZGlmZiAtLWdpdCBhL2xpYmNwcC9pbmNsdWRlL2ZpbGUtbWFwLmggYi9saWJjcHAvaW5jbHVkZS9maWxlLW1hcC5oCi1uZXcgZmlsZSBtb2RlIDEwMDY0NAotaW5kZXggMDAwMDAwMC4uZTZmOGNiZgotLS0tIC9kZXYvbnVsbAotKysrIGIvbGliY3BwL2luY2x1ZGUvZmlsZS1tYXAuaAotQEAgLTAsMCArMSwzMCBAQAotKy8qIE1hcCBvbmUgZGlyZWN0b3J5IG5hbWUgdG8gYW5vdGhlciBpbiBfX0ZJTEVfXywgX19CQVNFX0ZJTEVfXwotKyAgIGFuZCBfX2J1aWx0aW5fRklMRSAoKS4KLSsgICBDb3B5cmlnaHQgKEMpIDIwMDEtMjAxNiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KLSsKLStUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAotK3VuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQotK0ZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMywgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKLStsYXRlciB2ZXJzaW9uLgotKwotK1RoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotK2J1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0rTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQotK0dOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0rCi0rWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSthbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgc2VlIHRoZSBmaWxlIENPUFlJTkczLiAgSWYgbm90IHNlZQotKzxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KLSsKLSsgSW4gb3RoZXIgd29yZHMsIHlvdSBhcmUgd2VsY29tZSB0byB1c2UsIHNoYXJlIGFuZCBpbXByb3ZlIHRoaXMgcHJvZ3JhbS4KLSsgWW91IGFyZSBmb3JiaWRkZW4gdG8gZm9yYmlkIGFueW9uZSBlbHNlIHRvIHVzZSwgc2hhcmUgYW5kIGltcHJvdmUKLSsgd2hhdCB5b3UgZ2l2ZSB0aGVtLiAgIEhlbHAgc3RhbXAgb3V0IHNvZnR3YXJlLWhvYXJkaW5nISAgKi8KLSsKLSsjaWZuZGVmIExJQkNQUF9GSUxFX01BUF9ICi0rI2RlZmluZSBMSUJDUFBfRklMRV9NQVBfSAotKwotK2NvbnN0IGNoYXIgKiByZW1hcF9maWxlX2ZpbGVuYW1lIChjb25zdCBjaGFyICpmaWxlbmFtZSk7Ci0rCi0raW50IGFkZF9maWxlX3ByZWZpeF9tYXAgKGNvbnN0IGNoYXIgKmFyZyk7Ci0rCi0rI2VuZGlmIC8qICFMSUJDUFBfRklMRV9NQVBfSCAgKi8KLWRpZmYgLS1naXQgYS9saWJjcHAvbWFjcm8uYyBiL2xpYmNwcC9tYWNyby5jCi1pbmRleCAxMWU1MGY0Li41YzZmOTBlIDEwMDY0NAotLS0tIGEvbGliY3BwL21hY3JvLmMKLSsrKyBiL2xpYmNwcC9tYWNyby5jCi1AQCAtMjYsNiArMjYsNyBAQCBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgc2VlIHRoZSBmaWxlIENPUFlJTkczLiAgSWYgbm90IHNlZQotICNpbmNsdWRlICJzeXN0ZW0uaCIKLSAjaW5jbHVkZSAiY3BwbGliLmgiCi0gI2luY2x1ZGUgImludGVybmFsLmgiCi0rI2luY2x1ZGUgImZpbGUtbWFwLmgiCi0gCi0gdHlwZWRlZiBzdHJ1Y3QgbWFjcm9fYXJnIG1hY3JvX2FyZzsKLSAvKiBUaGlzIHN0cnVjdHVyZSByZXByZXNlbnRzIHRoZSB0b2tlbnMgb2YgYSBtYWNybyBhcmd1bWVudC4gIFRoZXNlCi1AQCAtMjg4LDYgKzI4OSw3IEBAIF9jcHBfYnVpbHRpbl9tYWNyb190ZXh0IChjcHBfcmVhZGVyICpwZmlsZSwgY3BwX2hhc2hub2RlICpub2RlKQotIAkgICAgaWYgKCFuYW1lKQotIAkgICAgICBhYm9ydCAoKTsKLSAJICB9Ci0rCW5hbWUgPSByZW1hcF9maWxlX2ZpbGVuYW1lIChuYW1lKTsKLSAJbGVuID0gc3RybGVuIChuYW1lKTsKLSAJYnVmID0gX2NwcF91bmFsaWduZWRfYWxsb2MgKHBmaWxlLCBsZW4gKiAyICsgMyk7Ci0gCXJlc3VsdCA9IGJ1ZjsKLS0tIAotMS45LjEKLQpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTQuOS8wMDczLVJldXNlLWZkZWJ1Zy1wcmVmaXgtbWFwLXRvLXJlcGxhY2UtZmZpbGUtcHJlZml4LW1hcC5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy00LjkvMDA3My1SZXVzZS1mZGVidWctcHJlZml4LW1hcC10by1yZXBsYWNlLWZmaWxlLXByZWZpeC1tYXAucGF0Y2gKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDk0ZTQ1ZWQuLjAwMDAwMDAKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTQuOS8wMDczLVJldXNlLWZkZWJ1Zy1wcmVmaXgtbWFwLXRvLXJlcGxhY2UtZmZpbGUtcHJlZml4LW1hcC5wYXRjaAorKysgL2Rldi9udWxsCkBAIC0xLDQzICswLDAgQEAKLUZyb20gNWUxMGJhZmY4NDAzOGQyNmRjM2Q1OWIyNDEyYmExZGI5MmNiODI3NCBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKLUZyb206IEhvbmd4dSBKaWEgPGhvbmd4dS5qaWFAd2luZHJpdmVyLmNvbT4KLURhdGU6IFRodSwgMTcgTWFyIDIwMTYgMDA6MzQ6MDEgLTA0MDAKLVN1YmplY3Q6IFtQQVRDSCAyLzJdIFJldXNlIC1mZGVidWctcHJlZml4LW1hcCB0byByZXBsYWNlIC1mZmlsZS1wcmVmaXgtbWFwCi0KLVRoZSBvZS1jb3JlIG1heSB1c2UgZXh0ZXJuYWwgdG9vbGNoYWluIHRvIGNvbXBpbGUsCi13aGljaCBtYXkgbm90IHN1cHBvcnQgLWZmaWxlLXByZWZpeC1tYXAuCi0KLVNpbmNlIHdlIHVzZSAtZmRlYnVnLXByZWZpeC1tYXAgdG8gZG8gdGhlIHNhbWUgdGhpbmcsCi1zbyB3ZSBjb3VsZCByZXVzZSBpdCB0byByZXBsYWNlIC1mZmlsZS1wcmVmaXgtbWFwLgotCi1VcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGVbb2UtY29yZSBzcGVjaWZpY10KLQotU2lnbmVkLW9mZi1ieTogSG9uZ3h1IEppYSA8aG9uZ3h1LmppYUB3aW5kcml2ZXIuY29tPgotLS0tCi0gZ2NjL29wdHMtZ2xvYmFsLmMgfCA0ICsrKysKLSAxIGZpbGUgY2hhbmdlZCwgNCBpbnNlcnRpb25zKCspCi0KLWRpZmYgLS1naXQgYS9nY2Mvb3B0cy1nbG9iYWwuYyBiL2djYy9vcHRzLWdsb2JhbC5jCi1pbmRleCAxMTE4ODRiLi4wMzdmNmM4IDEwMDY0NAotLS0tIGEvZ2NjL29wdHMtZ2xvYmFsLmMKLSsrKyBiL2djYy9vcHRzLWdsb2JhbC5jCi1AQCAtNDIsNiArNDIsNyBAQCBhbG9uZyB3aXRoIEdDQzsgc2VlIHRoZSBmaWxlIENPUFlJTkczLiAgSWYgbm90IHNlZQotICNpbmNsdWRlICJ0b3BsZXYuaCIKLSAjaW5jbHVkZSAidHJlZS1wYXNzLmgiCi0gI2luY2x1ZGUgImNvbnRleHQuaCIKLSsjaW5jbHVkZSAiZmlsZS1tYXAuaCIKLSAKLSB0eXBlZGVmIGNvbnN0IGNoYXIgKmNvbnN0X2NoYXJfcDsgLyogRm9yIERFRl9WRUNfUC4gICovCi0gCi1AQCAtMzU0LDYgKzM1NSw5IEBAIGhhbmRsZV9jb21tb25fZGVmZXJyZWRfb3B0aW9ucyAodm9pZCkKLSAKLSAJY2FzZSBPUFRfZmRlYnVnX3ByZWZpeF9tYXBfOgotIAkgIGFkZF9kZWJ1Z19wcmVmaXhfbWFwIChvcHQtPmFyZyk7Ci0rCi0rCSAgLyogUmV1c2UgLWZkZWJ1Zy1wcmVmaXgtbWFwIHRvIHJlcGxhY2UgLWZmaWxlLXByZWZpeC1tYXAgKi8KLSsJICBhZGRfZmlsZV9wcmVmaXhfbWFwIChvcHQtPmFyZyk7Ci0gCSAgYnJlYWs7Ci0gCi0gCWNhc2UgT1BUX2ZkdW1wXzoKLS0tIAotMS45LjEKLQpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTQuOS8wMDc0LWZkZWJ1Zy1wcmVmaXgtbWFwLXN1cHBvcnQtdG8tcmVtYXAtcmVsYXRpdmUtcGF0aC5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy00LjkvMDA3NC1mZGVidWctcHJlZml4LW1hcC1zdXBwb3J0LXRvLXJlbWFwLXJlbGF0aXZlLXBhdGgucGF0Y2gKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDBiOTFmZGIuLjAwMDAwMDAKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTQuOS8wMDc0LWZkZWJ1Zy1wcmVmaXgtbWFwLXN1cHBvcnQtdG8tcmVtYXAtcmVsYXRpdmUtcGF0aC5wYXRjaAorKysgL2Rldi9udWxsCkBAIC0xLDUxICswLDAgQEAKLUZyb20gMjg5YWQyOTY5YTU5NjZjNjAzYmY2OTI4Y2U0NDJkYjc0YzRjYmIyNSBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKLUZyb206IEhvbmd4dSBKaWEgPGhvbmd4dS5qaWFAd2luZHJpdmVyLmNvbT4KLURhdGU6IFRodSwgMjQgTWFyIDIwMTYgMTE6MjM6MTQgLTA0MDAKLVN1YmplY3Q6IFtQQVRDSF0gZ2NjL2ZpbmFsLmM6IC1mZGVidWctcHJlZml4LW1hcCBzdXBwb3J0IHRvIHJlbWFwIHNvdXJjZXMgd2l0aAotIHJlbGF0aXZlIHBhdGgKLQotUFIgb3RoZXIvNzA0MjgKLSogZmluYWwuYyAocmVtYXBfZGVidWdfZmlsZW5hbWUpOiBVc2UgbHJlYWxwYXRoIHRvIHRyYW5zbGF0ZQotcmVsYXRpdmUgcGF0aCBiZWZvcmUgcmVtYXBwaW5nCi0KLWh0dHBzOi8vZ2NjLmdudS5vcmcvYnVnemlsbGEvc2hvd19idWcuY2dpP2lkPTcwNDI4Ci1VcHN0cmVhbS1TdGF0dXM6IFN1Ym1pdHRlZCBbZ2NjLXBhdGNoZXNAZ2NjLmdudS5vcmddCi0KLVNpZ25lZC1vZmYtYnk6IEhvbmd4dSBKaWEgPGhvbmd4dS5qaWFAd2luZHJpdmVyLmNvbT4KLS0tLQotZGlmZiAtLWdpdCBhL2djYy9maW5hbC5jIGIvZ2NjL2ZpbmFsLmMKLWluZGV4IDU1Y2Y1MDkuLmMzNTk0YzIgMTAwNjQ0Ci0tLS0gYS9nY2MvZmluYWwuYwotKysrIGIvZ2NjL2ZpbmFsLmMKLUBAIC0xNTU0LDE2ICsxNTU0LDI1IEBAIHJlbWFwX2RlYnVnX2ZpbGVuYW1lIChjb25zdCBjaGFyICpmaWxlbmFtZSkKLSAgIGNvbnN0IGNoYXIgKm5hbWU7Ci0gICBzaXplX3QgbmFtZV9sZW47Ci0gCi0rICAvKiBTdXBwb3J0IHRvIHJlbWFwIGZpbGVuYW1lIHdpdGggcmVsYXRpdmUgcGF0aCAgKi8KLSsgIGNoYXIgKnJlYWxwYXRoID0gbHJlYWxwYXRoIChmaWxlbmFtZSk7Ci0rICBpZiAocmVhbHBhdGggPT0gTlVMTCkKLSsgICAgcmV0dXJuIGZpbGVuYW1lOwotKwotICAgZm9yIChtYXAgPSBkZWJ1Z19wcmVmaXhfbWFwczsgbWFwOyBtYXAgPSBtYXAtPm5leHQpCi0tICAgIGlmIChmaWxlbmFtZV9uY21wIChmaWxlbmFtZSwgbWFwLT5vbGRfcHJlZml4LCBtYXAtPm9sZF9sZW4pID09IDApCi0rICAgIGlmIChmaWxlbmFtZV9uY21wIChyZWFscGF0aCwgbWFwLT5vbGRfcHJlZml4LCBtYXAtPm9sZF9sZW4pID09IDApCi0gICAgICAgYnJlYWs7Ci0gICBpZiAoIW1hcCkKLS0gICAgcmV0dXJuIGZpbGVuYW1lOwotLSAgbmFtZSA9IGZpbGVuYW1lICsgbWFwLT5vbGRfbGVuOwotKyAgICB7Ci0rICAgICAgZnJlZSAocmVhbHBhdGgpOwotKyAgICAgIHJldHVybiBmaWxlbmFtZTsKLSsgICAgfQotKyAgbmFtZSA9IHJlYWxwYXRoICsgbWFwLT5vbGRfbGVuOwotICAgbmFtZV9sZW4gPSBzdHJsZW4gKG5hbWUpICsgMTsKLSAgIHMgPSAoY2hhciAqKSBhbGxvY2EgKG5hbWVfbGVuICsgbWFwLT5uZXdfbGVuKTsKLSAgIG1lbWNweSAocywgbWFwLT5uZXdfcHJlZml4LCBtYXAtPm5ld19sZW4pOwotICAgbWVtY3B5IChzICsgbWFwLT5uZXdfbGVuLCBuYW1lLCBuYW1lX2xlbik7Ci0rICBmcmVlIChyZWFscGF0aCk7Ci0gICByZXR1cm4gZ2djX3N0cmR1cCAocyk7Ci0gfQotIAwKLS0tIAotMi43LjQKLQpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTUuMy5pbmMgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNS4zLmluYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTgwOGJlMS4uMDAwMDAwMAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNS4zLmluYworKysgL2Rldi9udWxsCkBAIC0xLDE0MyArMCwwIEBACi1yZXF1aXJlIGdjYy1jb21tb24uaW5jCi0KLSMgVGhpcmQgZGlnaXQgaW4gUFYgc2hvdWxkIGJlIGluY3JlbWVudGVkIGFmdGVyIGEgbWlub3IgcmVsZWFzZQotCi1QViA9ICI1LjMuMCIKLQotI1NOQVAgPSAiNS0yMDE1MDQwNSIKLQotIyBCSU5WIHNob3VsZCBiZSBpbmNyZW1lbnRlZCB0byBhIHJldmlzaW9uIGFmdGVyIGEgbWlub3IgZ2NjIHJlbGVhc2UKLQotQklOViA9ICI1LjMuMCIKLQotRklMRVNFWFRSQVBBVEhTID0uICIke0ZJTEVfRElSTkFNRX0vZ2NjLTUuMzoke0ZJTEVfRElSTkFNRX0vZ2NjLTUuMy9iYWNrcG9ydDoiCi0KLURFUEVORFMgPSsgIm1wZnIgZ21wIGxpYm1wYyB6bGliIgotTkFUSVZFREVQUyA9ICJtcGZyLW5hdGl2ZSBnbXAtbmF0aXZlIGxpYm1wYy1uYXRpdmUgemxpYi1uYXRpdmUiCi0KLUxJQ0VOU0UgPSAiR1BMLTMuMC13aXRoLUdDQy1leGNlcHRpb24gJiBHUEx2MyIKLQotTElDX0ZJTEVTX0NIS1NVTSA9ICJcCi0gICAgZmlsZTovL0NPUFlJTkc7bWQ1PTU5NTMwYmRmMzM2NTliMjllNzNkNGFkYjlmOWY2NTUyIFwKLSAgICBmaWxlOi8vQ09QWUlORzM7bWQ1PWQzMjIzOWJjYjY3MzQ2M2FiODc0ZTgwZDQ3ZmFlNTA0IFwKLSAgICBmaWxlOi8vQ09QWUlORzMuTElCO21kNT02YTZhOGUwMjA4MzhiMjM0MDZjODFiMTljMWQ0NmRmNiBcCi0gICAgZmlsZTovL0NPUFlJTkcuTElCO21kNT0yZDUwMjVkNGFhMzQ5NWJlZmVmOGYxNzIwNmE1YjBhMSBcCi0gICAgZmlsZTovL0NPUFlJTkcuUlVOVElNRTttZDU9ZmU2MGQ4NzA0ODU2N2Q0ZmU4YzhhMGVkMjQ0OGJjYzggXAotIgotI0JBU0VVUkkgPSAiaHR0cDovL3d3dy5uZXRndWxsLmNvbS9nY2Mvc25hcHNob3RzLyR7U05BUH0vZ2NjLSR7U05BUH0udGFyLmJ6MiIKLUJBU0VVUkkgPSAiJHtHTlVfTUlSUk9SfS9nY2MvZ2NjLSR7UFZ9L2djYy0ke1BWfS50YXIuYnoyIgotCi1TUkNfVVJJID0gIlwKLSAgICAgICAgICAgJHtCQVNFVVJJfSBcCi0gICAgICAgICAgICR7QkFDS1BPUlRTfSBcCi0gICAgICAgICAgIGZpbGU6Ly8wMDAxLWdjYy00LjMuMS1BUkNIX0ZMQUdTX0ZPUl9UQVJHRVQucGF0Y2ggXAotICAgICAgICAgICBmaWxlOi8vMDAwMi11Y2xpYmMtY29uZi5wYXRjaCBcCi0gICAgICAgICAgIGZpbGU6Ly8wMDAzLWdjYy11Y2xpYmMtbG9jYWxlLWN0eXBlX3RvdXBsb3dfdC5wYXRjaCBcCi0gICAgICAgICAgIGZpbGU6Ly8wMDA0LXVjbGliYy1sb2NhbGUucGF0Y2ggXAotICAgICAgICAgICBmaWxlOi8vMDAwNS11Y2xpYmMtbG9jYWxlLW5vX194LnBhdGNoIFwKLSAgICAgICAgICAgZmlsZTovLzAwMDYtdWNsaWJjLWxvY2FsZS13Y2hhcl9maXgucGF0Y2ggXAotICAgICAgICAgICBmaWxlOi8vMDAwNy11Y2xpYmMtbG9jYWxlLXVwZGF0ZS5wYXRjaCBcCi0gICAgICAgICAgIGZpbGU6Ly8wMDA4LW1pc3NpbmctZXhlY2luZm9faC5wYXRjaCBcCi0gICAgICAgICAgIGZpbGU6Ly8wMDA5LWM5OS1zbnByaW50Zi5wYXRjaCBcCi0gICAgICAgICAgIGZpbGU6Ly8wMDEwLWdjYy1wb2lzb24tc3lzdGVtLWRpcmVjdG9yaWVzLnBhdGNoIFwKLSAgICAgICAgICAgZmlsZTovLzAwMTEtZ2NjLXBvaXNvbi1kaXItZXh0ZW5kLnBhdGNoIFwKLSAgICAgICAgICAgZmlsZTovLzAwMTItZ2NjLTQuMy4zLVNZU1JPT1RfQ0ZMQUdTX0ZPUl9UQVJHRVQucGF0Y2ggXAotICAgICAgICAgICBmaWxlOi8vMDAxMy02NC1iaXQtbXVsdGlsaWItaGFjay5wYXRjaCBcCi0gICAgICAgICAgIGZpbGU6Ly8wMDE0LW9wdGlvbmFsLWxpYnN0ZGMucGF0Y2ggXAotICAgICAgICAgICBmaWxlOi8vMDAxNS1nY2MtZGlzYWJsZS1NQVNLX1JFTEFYX1BJQ19DQUxMUy1iaXQucGF0Y2ggXAotICAgICAgICAgICBmaWxlOi8vMDAxNi1DT0xMRUNUX0dDQ19PUFRJT05TLnBhdGNoIFwKLSAgICAgICAgICAgZmlsZTovLzAwMTctVXNlLXRoZS1kZWZhdWx0cy5oLWluLUItaW5zdGVhZC1vZi1TLWFuZC10LW9lLWluLUIucGF0Y2ggXAotICAgICAgICAgICBmaWxlOi8vMDAxOC1mb3J0cmFuLWNyb3NzLWNvbXBpbGUtaGFjay5wYXRjaCBcCi0gICAgICAgICAgIGZpbGU6Ly8wMDE5LWxpYmdjYy1zamxqLWNoZWNrLnBhdGNoIFwKLSAgICAgICAgICAgZmlsZTovLzAwMjAtY3BwLWhvbm9yLXN5c3Jvb3QucGF0Y2ggXAotICAgICAgICAgICBmaWxlOi8vMDAyMS1NSVBTNjQtRGVmYXVsdC10by1ONjQtQUJJLnBhdGNoIFwKLSAgICAgICAgICAgZmlsZTovLzAwMjItRGVmaW5lLUdMSUJDX0RZTkFNSUNfTElOS0VSLWFuZC1VQ0xJQkNfRFlOQU1JQ19MSU5LRS5wYXRjaCBcCi0gICAgICAgICAgIGZpbGU6Ly8wMDIzLWdjYy1GaXgtYXJndW1lbnQtbGlzdC10b28tbG9uZy1lcnJvci5wYXRjaCBcCi0gICAgICAgICAgIGZpbGU6Ly8wMDI0LURpc2FibGUtc2R0LnBhdGNoIFwKLSAgICAgICAgICAgZmlsZTovLzAwMjUtbGlidG9vbC5wYXRjaCBcCi0gICAgICAgICAgIGZpbGU6Ly8wMDI2LWdjYy1hcm12NC1wYXNzLWZpeC12NGJ4LXRvLWxpbmtlci10by1zdXBwb3J0LUVBQkkucGF0Y2ggXAotICAgICAgICAgICBmaWxlOi8vMDAyNy1Vc2UtdGhlLW11bHRpbGliLWNvbmZpZy1maWxlcy1mcm9tLUItaW5zdGVhZC1vZi11c2luLnBhdGNoIFwKLSAgICAgICAgICAgZmlsZTovLzAwMjgtQXZvaWQtdXNpbmctbGliZGlyLWZyb20tLmxhLXdoaWNoLXVzdWFsbHktcG9pbnRzLXRvLS5wYXRjaCBcCi0gICAgICAgICAgIGZpbGU6Ly8wMDI5LWV4cG9ydC1DUFAucGF0Y2ggXAotICAgICAgICAgICBmaWxlOi8vMDAzMC1FbmFibGUtU1BFLUFsdGlWZWMtZ2VuZXJhdGlvbi1vbi1wb3dlcGMtbGludXgtdGFyZ2V0LnBhdGNoIFwKLSAgICAgICAgICAgZmlsZTovLzAwMzEtRGlzYWJsZS10aGUtTVVMVElMSUJfT1NESVJOQU1FUy1hbmQtb3RoZXItbXVsdGlsaWItby5wYXRjaCBcCi0gICAgICAgICAgIGZpbGU6Ly8wMDMyLUVuc3VyZS10YXJnZXQtZ2NjLWhlYWRlcnMtY2FuLWJlLWluY2x1ZGVkLnBhdGNoIFwKLSAgICAgICAgICAgZmlsZTovLzAwMzMtZ2NjLTQuOC13b24tdC1idWlsZC13aXRoLWRpc2FibGUtZGVwZW5kZW5jeS10cmFja2luZy5wYXRjaCBcCi0gICAgICAgICAgIGZpbGU6Ly8wMDM0LURvbi10LXNlYXJjaC1ob3N0LWRpcmVjdG9yeS1kdXJpbmctcmVsaW5rLWlmLWluc3RfcHIucGF0Y2ggXAotICAgICAgICAgICBmaWxlOi8vMDAzNS1Eb250LWxpbmstdGhlLXBsdWdpbnMtd2l0aC1saWJnb21wLWV4cGxpY2l0bHkucGF0Y2ggXAotICAgICAgICAgICBmaWxlOi8vMDAzNi1Vc2UtU1lTVEVNTElCU19ESVItcmVwbGFjZW1lbnQtaW5zdGVhZC1vZi1oYXJkY29kaW5nLnBhdGNoIFwKLSAgICAgICAgICAgZmlsZTovLzAwMzctYWFyY2g2NC1BZGQtc3VwcG9ydC1mb3ItbXVzbC1sZHNvLnBhdGNoIFwKLSAgICAgICAgICAgZmlsZTovLzAwMzgtZml4LWctc3lzcm9vdC5wYXRjaCBcCi0gICAgICAgICAgIGZpbGU6Ly8wMDM5LWxpYmNjMS1maXgtbGliY2MxLXMtaW5zdGFsbC1wYXRoLWFuZC1ycGF0aC5wYXRjaCBcCi0gICAgICAgICAgIGZpbGU6Ly8wMDQwLWhhbmRsZS1zeXNyb290LXN1cHBvcnQtZm9yLW5hdGl2ZXNkay1nY2MucGF0Y2ggXAotICAgICAgICAgICBmaWxlOi8vMDA0MS1TZWFyY2gtdGFyZ2V0LXN5c3Jvb3QtZ2NjLXZlcnNpb24tc3BlY2lmaWMtZGlycy13aXRoLnBhdGNoIFwKLSAgICAgICAgICAgZmlsZTovLzAwNDItRml4LXZhcmlvdXMtX0ZPUl9CVUlMRC1hbmQtcmVsYXRlZC12YXJpYWJsZXMucGF0Y2ggXAotICAgICAgICAgICBmaWxlOi8vMDA0My1saWJzdGRjLVN1cHBvcnQtbXVzbC5wYXRjaCBcCi0gICAgICAgICAgIGZpbGU6Ly8wMDQ0LUFkZGluZy1tbXVzbC1hcy1hLW11c2wtbGliYy1zcGVjaWZpZXItYW5kLXRoZS1uZWNlc3MucGF0Y2ggXAotICAgICAgICAgICBmaWxlOi8vMDA0NS1TdXBwb3J0LWZvci1hcm0tbGludXgtbXVzbC5wYXRjaCBcCi0gICAgICAgICAgIGZpbGU6Ly8wMDQ2LUdldC1yaWQtb2YtZXZlci1icm9rZW4tZml4aW5jbHVkZXMtb24tbXVzbC5wYXRjaCBcCi0gICAgICAgICAgIGZpbGU6Ly8wMDQ3LW5pb3MyLURlZmluZS1NVVNMX0RZTkFNSUNfTElOS0VSLnBhdGNoIFwKLSAgICAgICAgICAgZmlsZTovLzAwNDgtc3NwX25vbnNoYXJlZC5wYXRjaCBcCi0gICAgICAgICAgIGZpbGU6Ly8wMDQ5LURpc2FibGUtdGhlLXdlYWstcmVmZXJlbmNlLWxvZ2ljLWluLWd0aHIuaC1mb3Itb3MtZ2UucGF0Y2ggXAotICAgICAgICAgICBmaWxlOi8vMDA1MC1wb3dlcnBjLXBhc3Mtc2VjdXJlLXBsdC10by10aGUtbGlua2VyLnBhdGNoIFwKLSAgICAgICAgICAgZmlsZTovLzAwNTEtSWdub3JlLWZkZWJ1Zy1wcmVmaXgtbWFwLWluLXByb2R1Y2VyLXN0cmluZy1ieS1EYW5pZS5wYXRjaCBcCi0gICAgICAgICAgIGZpbGU6Ly8wMDUyLW5pb3MyLXVzZS1yZXQtd2l0aC1yMzEucGF0Y2ggXAotICAgICAgICAgICBmaWxlOi8vMDA1My1leHByLmMtUFItdGFyZ2V0LTY1MzU4LUF2b2lkLWNsb2JiZXJpbmctcGFydGlhbC1hcmd1LnBhdGNoIFwKLSAgICAgICAgICAgZmlsZTovLzAwNTQtc3VwcG9ydC1mZmlsZS1wcmVmaXgtbWFwLnBhdGNoIFwKLSAgICAgICAgICAgZmlsZTovLzAwNTUtUmV1c2UtZmRlYnVnLXByZWZpeC1tYXAtdG8tcmVwbGFjZS1mZmlsZS1wcmVmaXgtbWFwLnBhdGNoIFwKLSAgICAgICAgICAgZmlsZTovLzAwNTYtRW5hYmxlLWxpYmMtcHJvdmlkZS1zc3AtYW5kLWdjY19jdl90YXJnZXRfZGxfaXRlcmF0ZS5wYXRjaCBcCi0gICAgICAgICAgIGZpbGU6Ly8wMDU3LXVud2luZC1maXgtZm9yLW11c2wucGF0Y2ggXAotICAgICAgICAgICBmaWxlOi8vMDA1OC1mZGVidWctcHJlZml4LW1hcC1zdXBwb3J0LXRvLXJlbWFwLXJlbGF0aXZlLXBhdGgucGF0Y2ggXAotIgotCi1CQUNLUE9SVFMgPSAiIgotCi1TUkNfVVJJW21kNXN1bV0gPSAiYzk2MTZmZDQ0OGY5ODAyNTljMzFkZTYxM2U1NzU3MTkiCi1TUkNfVVJJW3NoYTI1NnN1bV0gPSAiYjg0ZjU1OTJlOTIxOGI3M2RiYWU2MTJiNTI1MzAzNWE3YjM0YTlhMWY3Njg4ZDJlMWJmYWFmNzI2N2Q1YzRkYiIKLQotI1MgPSAiJHtUTVBESVJ9L3dvcmstc2hhcmVkL2djYy0ke1BWfS0ke1BSfS9nY2MtJHtTTkFQfSIKLVMgPSAiJHtUTVBESVJ9L3dvcmstc2hhcmVkL2djYy0ke1BWfS0ke1BSfS9nY2MtJHtQVn0iCi1CID0gIiR7V09SS0RJUn0vZ2NjLSR7UFZ9L2J1aWxkLiR7SE9TVF9TWVN9LiR7VEFSR0VUX1NZU30iCi0KLSMgTGFuZ3VhZ2UgT3ZlcnJpZGVzCi1GT1JUUkFOID0gIiIKLUpBVkEgPSAiIgotCi1MVE8gPSAiLS1lbmFibGUtbHRvIgotCi1FWFRSQV9PRUNPTkZfQkFTRSA9ICJcCi0gICAgJHtMVE99IFwKLSAgICAtLWVuYWJsZS1saWJzc3AgXAotICAgIC0tZW5hYmxlLWxpYml0bSBcCi0gICAgLS1kaXNhYmxlLWJvb3RzdHJhcCBcCi0gICAgLS1kaXNhYmxlLWxpYm11ZGZsYXAgXAotICAgIC0td2l0aC1zeXN0ZW0temxpYiBcCi0gICAgLS13aXRoLWxpbmtlci1oYXNoLXN0eWxlPSR7TElOS0VSX0hBU0hfU1RZTEV9IFwKLSAgICAtLWVuYWJsZS1saW5rZXItYnVpbGQtaWQgXAotICAgIC0td2l0aC1wcGw9bm8gXAotICAgIC0td2l0aC1jbG9vZz1ubyBcCi0gICAgLS1lbmFibGUtY2hlY2tpbmc9cmVsZWFzZSBcCi0gICAgLS1lbmFibGUtY2hlYWRlcnM9Y19nbG9iYWwgXAotICAgIC0td2l0aG91dC1pc2wgXAotIgotCi1FWFRSQV9PRUNPTkZfSU5JVElBTCA9ICJcCi0gICAgLS1kaXNhYmxlLWxpYm11ZGZsYXAgXAotICAgIC0tZGlzYWJsZS1saWJnb21wIFwKLSAgICAtLWRpc2FibGUtbGliaXRtIFwKLSAgICAtLWRpc2FibGUtbGlicXVhZG1hdGggXAotICAgIC0td2l0aC1zeXN0ZW0temxpYiBcCi0gICAgLS1kaXNhYmxlLWx0byBcCi0gICAgLS1kaXNhYmxlLXBsdWdpbiBcCi0gICAgLS1lbmFibGUtZGVjaW1hbC1mbG9hdD1ubyBcCi0gICAgLS13aXRob3V0LWlzbCBcCi0gICAgZ2NjX2N2X2xpYmNfcHJvdmlkZXNfc3NwPXllcyBcCi0iCi0KLUVYVFJBX09FQ09ORl9hcHBlbmRfbGliYy11Y2xpYmMgPSAiIC0tZGlzYWJsZS1kZWNpbWFsLWZsb2F0ICIKLQotRVhUUkFfT0VDT05GX1BBVEhTID0gIlwKLSAgICAtLXdpdGgtZ3h4LWluY2x1ZGUtZGlyPS9ub3QvZXhpc3R7dGFyZ2V0X2luY2x1ZGVkaXJ9L2MrKy8ke0JJTlZ9IFwKLSAgICAtLXdpdGgtc3lzcm9vdD0vbm90L2V4aXN0IFwKLSAgICAtLXdpdGgtYnVpbGQtc3lzcm9vdD0ke1NUQUdJTkdfRElSX1RBUkdFVH0gXAotIgpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTUuMy8wMDQ0LUFkZGluZy1tbXVzbC1hcy1hLW11c2wtbGliYy1zcGVjaWZpZXItYW5kLXRoZS1uZWNlc3MucGF0Y2ggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNS4zLzAwNDQtQWRkaW5nLW1tdXNsLWFzLWEtbXVzbC1saWJjLXNwZWNpZmllci1hbmQtdGhlLW5lY2Vzcy5wYXRjaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjkxYzAyZC4uMDAwMDAwMAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNS4zLzAwNDQtQWRkaW5nLW1tdXNsLWFzLWEtbXVzbC1saWJjLXNwZWNpZmllci1hbmQtdGhlLW5lY2Vzcy5wYXRjaAorKysgL2Rldi9udWxsCkBAIC0xLDI3MCArMCwwIEBACi1Gcm9tIDBiNTQ3OTlkODBmYjg1OWM3YjE0MjQ2N2U0ZDQyYzk5ZGI1OWRmNTAgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCi1Gcm9tOiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgotRGF0ZTogVHVlLCA4IERlYyAyMDE1IDA4OjMwOjM1ICswMDAwCi1TdWJqZWN0OiBbUEFUQ0ggNDQvNDZdIEFkZGluZyAtbW11c2wgYXMgYSBtdXNsIGxpYmMgc3BlY2lmaWVyLCBhbmQgdGhlCi0gbmVjZXNzYXJ5IGhhY2tzIGZvciBpdCB0byBrbm93IGhvdyB0byBmaW5kIG11c2wncyBkeW5hbWljIGxpbmtlci4KLQotVXBzdHJlYW0tU3RhdHVzOiBCYWNrcG9ydCBbcGFydGlhbF0KLVNpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+Ci0tLS0KLSBnY2MvY29uZmlnLmdjYyAgICAgICAgICAgICAgICB8ICAxMCArKysrLQotIGdjYy9jb25maWcvbGludXguaCAgICAgICAgICAgIHwgMTAwICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKystLS0tLQotIGdjYy9jb25maWcvbGludXgub3B0ICAgICAgICAgIHwgICA0ICsrCi0gZ2NjL2NvbmZpZy9yczYwMDAvc2VjdXJlcGx0LmggfCAgIDEgKwotIGdjYy9jb25maWcvcnM2MDAwL3N5c3Y0LmggICAgIHwgICA1ICsrKwotIGdjYy9naW5jbHVkZS9zdGRkZWYuaCAgICAgICAgIHwgICAzICsrCi0gNiBmaWxlcyBjaGFuZ2VkLCAxMTAgaW5zZXJ0aW9ucygrKSwgMTMgZGVsZXRpb25zKC0pCi0KLWRpZmYgLS1naXQgYS9nY2MvY29uZmlnLmdjYyBiL2djYy9jb25maWcuZ2NjCi1pbmRleCAzODI1YmQ1Li4zOWNlMDQ3IDEwMDY0NAotLS0tIGEvZ2NjL2NvbmZpZy5nY2MKLSsrKyBiL2djYy9jb25maWcuZ2NjCi1AQCAtNTc1LDcgKzU3NSw3IEBAIGNhc2UgJHt0YXJnZXR9IGluCi0gZXNhYwotIAotICMgQ29tbW9uIEMgbGlicmFyaWVzLgotLXRtX2RlZmluZXM9IiR0bV9kZWZpbmVzIExJQkNfR0xJQkM9MSBMSUJDX1VDTElCQz0yIExJQkNfQklPTklDPTMiCi0rdG1fZGVmaW5lcz0iJHRtX2RlZmluZXMgTElCQ19HTElCQz0xIExJQkNfVUNMSUJDPTIgTElCQ19CSU9OSUM9MyBMSUJDX01VU0w9NCIKLSAKLSAjIDMyLWJpdCB4ODYgcHJvY2Vzc29ycyBzdXBwb3J0ZWQgYnkgLS13aXRoLWFyY2g9LiAgRWFjaCBwcm9jZXNzb3IKLSAjIE1VU1QgYmUgc2VwYXJhdGVkIGJ5IGV4YWN0bHkgb25lIHNwYWNlLgotQEAgLTcyMCw2ICs3MjAsOSBAQCBjYXNlICR7dGFyZ2V0fSBpbgotICAgICAqLSotKnVjbGliYyopCi0gICAgICAgdG1fZGVmaW5lcz0iJHRtX2RlZmluZXMgREVGQVVMVF9MSUJDPUxJQkNfVUNMSUJDIgotICAgICAgIDs7Ci0rICAgICotKi0qbXVzbCopCi0rICAgICAgdG1fZGVmaW5lcz0iJHRtX2RlZmluZXMgREVGQVVMVF9MSUJDPUxJQkNfTVVTTCIKLSsgICAgICA7OwotICAgICAqKQotICAgICAgIHRtX2RlZmluZXM9IiR0bV9kZWZpbmVzIERFRkFVTFRfTElCQz1MSUJDX0dMSUJDIgotICAgICAgIDs7Ci1AQCAtMjQyMCw2ICsyNDIzLDExIEBAIHBvd2VycGMqLSotbGludXgqKQotIAkgICAgcG93ZXJwYyotKi1saW51eCpwYWlyZWQqKQotIAkJdG1fZmlsZT0iJHt0bV9maWxlfSByczYwMDAvNzUwY2wuaCIgOzsKLSAJZXNhYwotKyAgICAgICAgY2FzZSAke3RhcmdldH0gaW4KLSsJICAgICotbGludXgqLW11c2wqKQotKwkJZW5hYmxlX3NlY3VyZXBsdD15ZXMgOzsKLSsJZXNhYwotKwotIAlpZiB0ZXN0IHgke2VuYWJsZV9zZWN1cmVwbHR9ID0geHllczsgdGhlbgotIAkJdG1fZmlsZT0icnM2MDAwL3NlY3VyZXBsdC5oICR7dG1fZmlsZX0iCi0gCWZpCi1kaWZmIC0tZ2l0IGEvZ2NjL2NvbmZpZy9saW51eC5oIGIvZ2NjL2NvbmZpZy9saW51eC5oCi1pbmRleCAyMmI5YmU1Li5jYTlhMTdmIDEwMDY0NAotLS0tIGEvZ2NjL2NvbmZpZy9saW51eC5oCi0rKysgYi9nY2MvY29uZmlnL2xpbnV4LmgKLUBAIC0zMiwxMCArMzIsMTIgQEAgc2VlIHRoZSBmaWxlcyBDT1BZSU5HMyBhbmQgQ09QWUlORy5SVU5USU1FIHJlc3BlY3RpdmVseS4gIElmIG5vdCwgc2VlCi0gI2RlZmluZSBPUFRJT05fR0xJQkMgIChERUZBVUxUX0xJQkMgPT0gTElCQ19HTElCQykKLSAjZGVmaW5lIE9QVElPTl9VQ0xJQkMgKERFRkFVTFRfTElCQyA9PSBMSUJDX1VDTElCQykKLSAjZGVmaW5lIE9QVElPTl9CSU9OSUMgKERFRkFVTFRfTElCQyA9PSBMSUJDX0JJT05JQykKLSsjZGVmaW5lIE9QVElPTl9NVVNMICAgKERFRkFVTFRfTElCQyA9PSBMSUJDX01VU0wpCi0gI2Vsc2UKLSAjZGVmaW5lIE9QVElPTl9HTElCQyAgKGxpbnV4X2xpYmMgPT0gTElCQ19HTElCQykKLSAjZGVmaW5lIE9QVElPTl9VQ0xJQkMgKGxpbnV4X2xpYmMgPT0gTElCQ19VQ0xJQkMpCi0gI2RlZmluZSBPUFRJT05fQklPTklDIChsaW51eF9saWJjID09IExJQkNfQklPTklDKQotKyNkZWZpbmUgT1BUSU9OX01VU0wgICAobGludXhfbGliYyA9PSBMSUJDX01VU0wpCi0gI2VuZGlmCi0gCi0gI2RlZmluZSBHTlVfVVNFUl9UQVJHRVRfT1NfQ1BQX0JVSUxUSU5TKCkJCQlcCi1AQCAtNTMsMTggKzU1LDIxIEBAIHNlZSB0aGUgZmlsZXMgQ09QWUlORzMgYW5kIENPUFlJTkcuUlVOVElNRSByZXNwZWN0aXZlbHkuICBJZiBub3QsIHNlZQotICAgIHVDbGliYyBvciBCaW9uaWMgaXMgdGhlIGRlZmF1bHQgQyBsaWJyYXJ5IGFuZCB3aGV0aGVyCi0gICAgLW11Y2xpYmMgb3IgLW1nbGliYyBvciAtbWJpb25pYyBoYXMgYmVlbiBwYXNzZWQgdG8gY2hhbmdlIHRoZSBkZWZhdWx0LiAgKi8KLSAKLS0jZGVmaW5lIENIT09TRV9EWU5BTUlDX0xJTktFUjEoTElCQzEsIExJQkMyLCBMSUJDMywgTEQxLCBMRDIsIExEMykJXAotLSAgIiV7IiBMSUJDMiAiOiIgTEQyICI7OiV7IiBMSUJDMyAiOiIgTEQzICI7OiIgTEQxICJ9fSIKLSsjZGVmaW5lIENIT09TRV9EWU5BTUlDX0xJTktFUjEoTElCQzEsIExJQkMyLCBMSUJDMywgTElCQzQsIExEMSwgTEQyLCBMRDMsIExENCkJXAotKyAgIiV7IiBMSUJDMiAiOiIgTEQyICI7OiV7IiBMSUJDMyAiOiIgTEQzICI7OiV7IiBMSUJDNCAiOiIgTEQ0ICI7OiIgTEQxICJ9fX0iCi0gCi0gI2lmIERFRkFVTFRfTElCQyA9PSBMSUJDX0dMSUJDCi0tI2RlZmluZSBDSE9PU0VfRFlOQU1JQ19MSU5LRVIoRywgVSwgQikgXAotLSAgQ0hPT1NFX0RZTkFNSUNfTElOS0VSMSAoIm1nbGliYyIsICJtdWNsaWJjIiwgIm1iaW9uaWMiLCBHLCBVLCBCKQotKyNkZWZpbmUgQ0hPT1NFX0RZTkFNSUNfTElOS0VSKEcsIFUsIEIsIE0pIFwKLSsgIENIT09TRV9EWU5BTUlDX0xJTktFUjEgKCJtZ2xpYmMiLCAibXVjbGliYyIsICJtYmlvbmljIiwgIm1tdXNsIiwgRywgVSwgQiwgTSkKLSAjZWxpZiBERUZBVUxUX0xJQkMgPT0gTElCQ19VQ0xJQkMKLS0jZGVmaW5lIENIT09TRV9EWU5BTUlDX0xJTktFUihHLCBVLCBCKSBcCi0tICBDSE9PU0VfRFlOQU1JQ19MSU5LRVIxICgibXVjbGliYyIsICJtZ2xpYmMiLCAibWJpb25pYyIsIFUsIEcsIEIpCi0rI2RlZmluZSBDSE9PU0VfRFlOQU1JQ19MSU5LRVIoRywgVSwgQiwgTSkgXAotKyAgQ0hPT1NFX0RZTkFNSUNfTElOS0VSMSAoIm11Y2xpYmMiLCAibWdsaWJjIiwgIm1iaW9uaWMiLCAibW11c2wiLCBVLCBHLCBCLCBNKQotICNlbGlmIERFRkFVTFRfTElCQyA9PSBMSUJDX0JJT05JQwotLSNkZWZpbmUgQ0hPT1NFX0RZTkFNSUNfTElOS0VSKEcsIFUsIEIpIFwKLS0gIENIT09TRV9EWU5BTUlDX0xJTktFUjEgKCJtYmlvbmljIiwgIm1nbGliYyIsICJtdWNsaWJjIiwgQiwgRywgVSkKLSsjZGVmaW5lIENIT09TRV9EWU5BTUlDX0xJTktFUihHLCBVLCBCLCBNKSBcCi0rICBDSE9PU0VfRFlOQU1JQ19MSU5LRVIxICgibWJpb25pYyIsICJtZ2xpYmMiLCAibXVjbGliYyIsICJtbXVzbCIsIEIsIEcsIFUsIE0pCi0rI2VsaWYgREVGQVVMVF9MSUJDID09IExJQkNfTVVTTAotKyNkZWZpbmUgQ0hPT1NFX0RZTkFNSUNfTElOS0VSKEcsIFUsIEIsIE0pIFwKLSsgIENIT09TRV9EWU5BTUlDX0xJTktFUjEgKCJtbXVzbCIsICJtZ2xpYmMiLCAibXVjbGliYyIsICJtYmlvbmljIiwgTSwgRywgVSwgQikKLSAjZWxzZQotICNlcnJvciAiVW5zdXBwb3J0ZWQgREVGQVVMVF9MSUJDIgotICNlbmRpZiAvKiBERUZBVUxUX0xJQkMgKi8KLUBAIC04NCwxNiArODksMTYgQEAgc2VlIHRoZSBmaWxlcyBDT1BZSU5HMyBhbmQgQ09QWUlORy5SVU5USU1FIHJlc3BlY3RpdmVseS4gIElmIG5vdCwgc2VlCi0gCi0gI2RlZmluZSBHTlVfVVNFUl9EWU5BTUlDX0xJTktFUgkJCQkJCVwKLSAgIENIT09TRV9EWU5BTUlDX0xJTktFUiAoR0xJQkNfRFlOQU1JQ19MSU5LRVIsIFVDTElCQ19EWU5BTUlDX0xJTktFUiwJXAotLQkJCSBCSU9OSUNfRFlOQU1JQ19MSU5LRVIpCi0rCQkJIEJJT05JQ19EWU5BTUlDX0xJTktFUiwgTVVTTF9EWU5BTUlDX0xJTktFUikKLSAjZGVmaW5lIEdOVV9VU0VSX0RZTkFNSUNfTElOS0VSMzIJCQkJCVwKLSAgIENIT09TRV9EWU5BTUlDX0xJTktFUiAoR0xJQkNfRFlOQU1JQ19MSU5LRVIzMiwgVUNMSUJDX0RZTkFNSUNfTElOS0VSMzIsIFwKLS0JCQkgQklPTklDX0RZTkFNSUNfTElOS0VSMzIpCi0rCQkJIEJJT05JQ19EWU5BTUlDX0xJTktFUjMyLCBNVVNMX0RZTkFNSUNfTElOS0VSMzIpCi0gI2RlZmluZSBHTlVfVVNFUl9EWU5BTUlDX0xJTktFUjY0CQkJCQlcCi0gICBDSE9PU0VfRFlOQU1JQ19MSU5LRVIgKEdMSUJDX0RZTkFNSUNfTElOS0VSNjQsIFVDTElCQ19EWU5BTUlDX0xJTktFUjY0LCBcCi0tCQkJIEJJT05JQ19EWU5BTUlDX0xJTktFUjY0KQotKwkJCSBCSU9OSUNfRFlOQU1JQ19MSU5LRVI2NCwgTVVTTF9EWU5BTUlDX0xJTktFUjY0KQotICNkZWZpbmUgR05VX1VTRVJfRFlOQU1JQ19MSU5LRVJYMzIJCQkJCVwKLSAgIENIT09TRV9EWU5BTUlDX0xJTktFUiAoR0xJQkNfRFlOQU1JQ19MSU5LRVJYMzIsIFVDTElCQ19EWU5BTUlDX0xJTktFUlgzMiwgXAotLQkJCSBCSU9OSUNfRFlOQU1JQ19MSU5LRVJYMzIpCi0rCQkJIEJJT05JQ19EWU5BTUlDX0xJTktFUlgzMiwgTVVTTF9EWU5BTUlDX0xJTktFUlgzMikKLSAKLSAvKiBXaGV0aGVyIHdlIGhhdmUgQmlvbmljIGxpYmMgcnVudGltZSAqLwotICN1bmRlZiBUQVJHRVRfSEFTX0JJT05JQwotQEAgLTEyMywzICsxMjgsNzQgQEAgc2VlIHRoZSBmaWxlcyBDT1BZSU5HMyBhbmQgQ09QWUlORy5SVU5USU1FIHJlc3BlY3RpdmVseS4gIElmIG5vdCwgc2VlCi0gIyBkZWZpbmUgVEFSR0VUX0xJQkNfSEFTX0ZVTkNUSU9OIGxpbnV4X2xpYmNfaGFzX2Z1bmN0aW9uCi0gCi0gI2VuZGlmCi0rCi0rLyogbXVzbCBhdm9pZHMgcHJvYmxlbWF0aWMgaW5jbHVkZXMgYnkgcmVhcnJhbmdpbmcgdGhlIGluY2x1ZGUgZGlyZWN0b3JpZXMuCi0rICogVW5mb3J0dW5hdGVseSwgdGhpcyBpcyBtb3N0bHkgZHVwbGljYXRlZCBmcm9tIGNwcGRlZmF1bHQuYyAqLwotKyNpZiBERUZBVUxUX0xJQkMgPT0gTElCQ19NVVNMCi0rI2RlZmluZSBJTkNMVURFX0RFRkFVTFRTX01VU0xfR1BQCQkJXAotKyAgICB7IEdQTFVTUExVU19JTkNMVURFX0RJUiwgIkcrKyIsIDEsIDEsCQlcCi0rICAgICAgR1BMVVNQTFVTX0lOQ0xVREVfRElSX0FERF9TWVNST09ULCAwIH0sCQlcCi0rICAgIHsgR1BMVVNQTFVTX1RPT0xfSU5DTFVERV9ESVIsICJHKysiLCAxLCAxLAkJXAotKyAgICAgIEdQTFVTUExVU19JTkNMVURFX0RJUl9BRERfU1lTUk9PVCwgMSB9LAkJXAotKyAgICB7IEdQTFVTUExVU19CQUNLV0FSRF9JTkNMVURFX0RJUiwgIkcrKyIsIDEsIDEsCVwKLSsgICAgICBHUExVU1BMVVNfSU5DTFVERV9ESVJfQUREX1NZU1JPT1QsIDAgfSwKLSsKLSsjaWZkZWYgTE9DQUxfSU5DTFVERV9ESVIKLSsjZGVmaW5lIElOQ0xVREVfREVGQVVMVFNfTVVTTF9MT0NBTAkJCVwKLSsgICAgeyBMT0NBTF9JTkNMVURFX0RJUiwgMCwgMCwgMSwgMSwgMiB9LAkJXAotKyAgICB7IExPQ0FMX0lOQ0xVREVfRElSLCAwLCAwLCAxLCAxLCAwIH0sCi0rI2Vsc2UKLSsjZGVmaW5lIElOQ0xVREVfREVGQVVMVFNfTVVTTF9MT0NBTAotKyNlbmRpZgotKwotKyNpZmRlZiBQUkVGSVhfSU5DTFVERV9ESVIKLSsjZGVmaW5lIElOQ0xVREVfREVGQVVMVFNfTVVTTF9QUkVGSVgJCQlcCi0rICAgIHsgUFJFRklYX0lOQ0xVREVfRElSLCAwLCAwLCAxLCAwLCAwfSwKLSsjZWxzZQotKyNkZWZpbmUgSU5DTFVERV9ERUZBVUxUU19NVVNMX1BSRUZJWAotKyNlbmRpZgotKwotKyNpZmRlZiBDUk9TU19JTkNMVURFX0RJUgotKyNkZWZpbmUgSU5DTFVERV9ERUZBVUxUU19NVVNMX0NST1NTCQkJXAotKyAgICB7IENST1NTX0lOQ0xVREVfRElSLCAiR0NDIiwgMCwgMCwgMCwgMH0sCi0rI2Vsc2UKLSsjZGVmaW5lIElOQ0xVREVfREVGQVVMVFNfTVVTTF9DUk9TUwotKyNlbmRpZgotKwotKyNpZmRlZiBUT09MX0lOQ0xVREVfRElSCi0rI2RlZmluZSBJTkNMVURFX0RFRkFVTFRTX01VU0xfVE9PTAkJCVwKLSsgICAgeyBUT09MX0lOQ0xVREVfRElSLCAiQklOVVRJTFMiLCAwLCAxLCAwLCAwfSwKLSsjZWxzZQotKyNkZWZpbmUgSU5DTFVERV9ERUZBVUxUU19NVVNMX1RPT0wKLSsjZW5kaWYKLSsKLSsjaWZkZWYgTkFUSVZFX1NZU1RFTV9IRUFERVJfRElSCi0rI2RlZmluZSBJTkNMVURFX0RFRkFVTFRTX01VU0xfTkFUSVZFCQkJXAotKyAgICB7IE5BVElWRV9TWVNURU1fSEVBREVSX0RJUiwgMCwgMCwgMCwgMSwgMiB9LAlcCi0rICAgIHsgTkFUSVZFX1NZU1RFTV9IRUFERVJfRElSLCAwLCAwLCAwLCAxLCAwIH0sCi0rI2Vsc2UKLSsjZGVmaW5lIElOQ0xVREVfREVGQVVMVFNfTVVTTF9OQVRJVkUKLSsjZW5kaWYKLSsKLSsjaWYgZGVmaW5lZCAoQ1JPU1NfRElSRUNUT1JZX1NUUlVDVFVSRSkgJiYgIWRlZmluZWQgKFRBUkdFVF9TWVNURU1fUk9PVCkKLSsjIHVuZGVmIElOQ0xVREVfREVGQVVMVFNfTVVTTF9MT0NBTAotKyMgZGVmaW5lIElOQ0xVREVfREVGQVVMVFNfTVVTTF9MT0NBTAotKyMgdW5kZWYgSU5DTFVERV9ERUZBVUxUU19NVVNMX05BVElWRQotKyMgZGVmaW5lIElOQ0xVREVfREVGQVVMVFNfTVVTTF9OQVRJVkUKLSsjZWxzZQotKyMgdW5kZWYgSU5DTFVERV9ERUZBVUxUU19NVVNMX0NST1NTCi0rIyBkZWZpbmUgSU5DTFVERV9ERUZBVUxUU19NVVNMX0NST1NTCi0rI2VuZGlmCi0rCi0rI3VuZGVmIElOQ0xVREVfREVGQVVMVFMKLSsjZGVmaW5lIElOQ0xVREVfREVGQVVMVFMJCQkJXAotKyAgewkJCQkJCQlcCi0rICAgIElOQ0xVREVfREVGQVVMVFNfTVVTTF9HUFAJCQkJXAotKyAgICBJTkNMVURFX0RFRkFVTFRTX01VU0xfUFJFRklYCQkJXAotKyAgICBJTkNMVURFX0RFRkFVTFRTX01VU0xfQ1JPU1MJCQkJXAotKyAgICBJTkNMVURFX0RFRkFVTFRTX01VU0xfVE9PTAkJCQlcCi0rICAgIElOQ0xVREVfREVGQVVMVFNfTVVTTF9OQVRJVkUJCQlcCi0rICAgIHsgR0NDX0lOQ0xVREVfRElSLCAiR0NDIiwgMCwgMSwgMCwgMCB9LAkJXAotKyAgICB7IDAsIDAsIDAsIDAsIDAsIDAgfQkJCQlcCi0rICB9Ci0rI2VuZGlmCi1kaWZmIC0tZ2l0IGEvZ2NjL2NvbmZpZy9saW51eC5vcHQgYi9nY2MvY29uZmlnL2xpbnV4Lm9wdAotaW5kZXggYzA1NDMzOC4uOTMzNGY3NCAxMDA2NDQKLS0tLSBhL2djYy9jb25maWcvbGludXgub3B0Ci0rKysgYi9nY2MvY29uZmlnL2xpbnV4Lm9wdAotQEAgLTMwLDMgKzMwLDcgQEAgVXNlIEdOVSBDIGxpYnJhcnkKLSBtdWNsaWJjCi0gVGFyZ2V0IFJlcG9ydCBSZWplY3ROZWdhdGl2ZSBWYXIobGludXhfbGliYyxMSUJDX1VDTElCQykgTmVnYXRpdmUobWJpb25pYykKLSBVc2UgdUNsaWJjIEMgbGlicmFyeQotKwotK21tdXNsCi0rVGFyZ2V0IFJlcG9ydCBSZWplY3ROZWdhdGl2ZSBWYXIobGludXhfbGliYyxMSUJDX01VU0wpIE5lZ2F0aXZlKG1nbGliYykKLStVc2UgbXVzbCBDIGxpYnJhcnkKLWRpZmYgLS1naXQgYS9nY2MvY29uZmlnL3JzNjAwMC9zZWN1cmVwbHQuaCBiL2djYy9jb25maWcvcnM2MDAwL3NlY3VyZXBsdC5oCi1pbmRleCBiNDYzNDYzLi43N2VkZjJhIDEwMDY0NAotLS0tIGEvZ2NjL2NvbmZpZy9yczYwMDAvc2VjdXJlcGx0LmgKLSsrKyBiL2djYy9jb25maWcvcnM2MDAwL3NlY3VyZXBsdC5oCi1AQCAtMTgsMyArMTgsNCBAQCBhbG9uZyB3aXRoIEdDQzsgc2VlIHRoZSBmaWxlIENPUFlJTkczLiAgSWYgbm90IHNlZQotIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4gICovCi0gCi0gI2RlZmluZSBDQzFfU0VDVVJFX1BMVF9ERUZBVUxUX1NQRUMgIi1tc2VjdXJlLXBsdCIKLSsjZGVmaW5lIExJTktfU0VDVVJFX1BMVF9ERUZBVUxUX1NQRUMgIi0tc2VjdXJlLXBsdCIKLWRpZmYgLS1naXQgYS9nY2MvY29uZmlnL3JzNjAwMC9zeXN2NC5oIGIvZ2NjL2NvbmZpZy9yczYwMDAvc3lzdjQuaAotaW5kZXggYzZjMzFkYy4uN2NkMDdlMCAxMDA2NDQKLS0tLSBhL2djYy9jb25maWcvcnM2MDAwL3N5c3Y0LmgKLSsrKyBiL2djYy9jb25maWcvcnM2MDAwL3N5c3Y0LmgKLUBAIC01MzgsNiArNTM4LDEwIEBAIEVORElBTl9TRUxFQ1QoIiAtbWJpZyIsICIgLW1saXR0bGUiLCBERUZBVUxUX0FTTV9FTkRJQU4pCi0gI2RlZmluZSBDQzFfU0VDVVJFX1BMVF9ERUZBVUxUX1NQRUMgIiIKLSAjZW5kaWYKLSAKLSsjaWZuZGVmIExJTktfU0VDVVJFX1BMVF9ERUZBVUxUX1NQRUMKLSsjZGVmaW5lIExJTktfU0VDVVJFX1BMVF9ERUZBVUxUX1NQRUMgIiIKLSsjZW5kaWYKLSsKLSAvKiBQYXNzIC1HIHh4eCB0byB0aGUgY29tcGlsZXIuICAqLwotICN1bmRlZiBDQzFfU1BFQwotICNkZWZpbmUJQ0MxX1NQRUMgIiV7Ryp9ICUoY2MxX2NwdSkiIFwKLUBAIC04ODksNiArODkzLDcgQEAgbmNydG4ubyVzIgotICAgeyAibGlua19vc19vcGVuYnNkIiwJCUxJTktfT1NfT1BFTkJTRF9TUEVDIH0sCQkJXAotICAgeyAibGlua19vc19kZWZhdWx0IiwJCUxJTktfT1NfREVGQVVMVF9TUEVDIH0sCQkJXAotICAgeyAiY2MxX3NlY3VyZV9wbHRfZGVmYXVsdCIsCUNDMV9TRUNVUkVfUExUX0RFRkFVTFRfU1BFQyB9LAkJXAotKyAgeyAibGlua19zZWN1cmVfcGx0X2RlZmF1bHQiLAlMSU5LX1NFQ1VSRV9QTFRfREVGQVVMVF9TUEVDIH0sCQlcCi0gICB7ICJjcHBfb3NfYWRzIiwJCUNQUF9PU19BRFNfU1BFQyB9LAkJCVwKLSAgIHsgImNwcF9vc195ZWxsb3drbmlmZSIsCUNQUF9PU19ZRUxMT1dLTklGRV9TUEVDIH0sCQlcCi0gICB7ICJjcHBfb3NfbXZtZSIsCQlDUFBfT1NfTVZNRV9TUEVDIH0sCQkJXAotZGlmZiAtLWdpdCBhL2djYy9naW5jbHVkZS9zdGRkZWYuaCBiL2djYy9naW5jbHVkZS9zdGRkZWYuaAotaW5kZXggZjIwYTQxYi4uZWI4NzllZiAxMDA2NDQKLS0tLSBhL2djYy9naW5jbHVkZS9zdGRkZWYuaAotKysrIGIvZ2NjL2dpbmNsdWRlL3N0ZGRlZi5oCi1AQCAtMTg0LDYgKzE4NCw3IEBAIHR5cGVkZWYgX19QVFJESUZGX1RZUEVfXyBwdHJkaWZmX3Q7Ci0gI2lmbmRlZiBfR0NDX1NJWkVfVAotICNpZm5kZWYgX1NJWkVUXwotICNpZm5kZWYgX19zaXplX3QKLSsjaWZuZGVmIF9fREVGSU5FRF9zaXplX3QgLyogbXVzbCAqLwotICNkZWZpbmUgX19zaXplX3RfXwkvKiBCZU9TICovCi0gI2RlZmluZSBfX1NJWkVfVF9fCS8qIENyYXkgVW5pY29zL01rICovCi0gI2RlZmluZSBfU0laRV9UCi1AQCAtMjAwLDYgKzIwMSw3IEBAIHR5cGVkZWYgX19QVFJESUZGX1RZUEVfXyBwdHJkaWZmX3Q7Ci0gI2RlZmluZSBfX19pbnRfc2l6ZV90X2gKLSAjZGVmaW5lIF9HQ0NfU0laRV9UCi0gI2RlZmluZSBfU0laRVRfCi0rI2RlZmluZSBfX0RFRklORURfc2l6ZV90IC8qIG11c2wgKi8KLSAjaWYgKGRlZmluZWQgKF9fRnJlZUJTRF9fKSAmJiAoX19GcmVlQlNEX18gPj0gNSkpIFwKLSAgIHx8IGRlZmluZWQoX19EcmFnb25GbHlfXykgXAotICAgfHwgZGVmaW5lZChfX0ZyZWVCU0Rfa2VybmVsX18pCi1AQCAtMjE4LDYgKzIyMCw3IEBAIHR5cGVkZWYgX19TSVpFX1RZUEVfXyBzaXplX3Q7Ci0gdHlwZWRlZiBsb25nIHNzaXplX3Q7Ci0gI2VuZGlmIC8qIF9fQkVPU19fICovCi0gI2VuZGlmIC8qICEoZGVmaW5lZCAoX19HTlVHX18pICYmIGRlZmluZWQgKHNpemVfdCkpICovCi0rI2VuZGlmIC8qIF9fREVGSU5FRF9zaXplX3QgKi8KLSAjZW5kaWYgLyogX19zaXplX3QgKi8KLSAjZW5kaWYgLyogX1NJWkVUXyAqLwotICNlbmRpZiAvKiBfR0NDX1NJWkVfVCAqLwotLS0gCi0yLjYuMwotCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNS40LmluYyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy01LjQuaW5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMzODUzMGYKLS0tIC9kZXYvbnVsbAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNS40LmluYwpAQCAtMCwwICsxLDE0NiBAQAorcmVxdWlyZSBnY2MtY29tbW9uLmluYworCisjIFRoaXJkIGRpZ2l0IGluIFBWIHNob3VsZCBiZSBpbmNyZW1lbnRlZCBhZnRlciBhIG1pbm9yIHJlbGVhc2UKKworUFYgPSAiNS40LjAiCisKKyNTTkFQID0gIjUtMjAxNTA0MDUiCisKKyMgQklOViBzaG91bGQgYmUgaW5jcmVtZW50ZWQgdG8gYSByZXZpc2lvbiBhZnRlciBhIG1pbm9yIGdjYyByZWxlYXNlCisKK0JJTlYgPSAiNS40LjAiCisKK0ZJTEVTRVhUUkFQQVRIUyA9LiAiJHtGSUxFX0RJUk5BTUV9L2djYy01LjQ6JHtGSUxFX0RJUk5BTUV9L2djYy01LjQvYmFja3BvcnQ6IgorCitERVBFTkRTID0rICJtcGZyIGdtcCBsaWJtcGMgemxpYiIKK05BVElWRURFUFMgPSAibXBmci1uYXRpdmUgZ21wLW5hdGl2ZSBsaWJtcGMtbmF0aXZlIHpsaWItbmF0aXZlIgorCitMSUNFTlNFID0gIkdQTC0zLjAtd2l0aC1HQ0MtZXhjZXB0aW9uICYgR1BMdjMiCisKK0xJQ19GSUxFU19DSEtTVU0gPSAiXAorICAgIGZpbGU6Ly9DT1BZSU5HO21kNT01OTUzMGJkZjMzNjU5YjI5ZTczZDRhZGI5ZjlmNjU1MiBcCisgICAgZmlsZTovL0NPUFlJTkczO21kNT1kMzIyMzliY2I2NzM0NjNhYjg3NGU4MGQ0N2ZhZTUwNCBcCisgICAgZmlsZTovL0NPUFlJTkczLkxJQjttZDU9NmE2YThlMDIwODM4YjIzNDA2YzgxYjE5YzFkNDZkZjYgXAorICAgIGZpbGU6Ly9DT1BZSU5HLkxJQjttZDU9MmQ1MDI1ZDRhYTM0OTViZWZlZjhmMTcyMDZhNWIwYTEgXAorICAgIGZpbGU6Ly9DT1BZSU5HLlJVTlRJTUU7bWQ1PWZlNjBkODcwNDg1NjdkNGZlOGM4YTBlZDI0NDhiY2M4IFwKKyIKKyNCQVNFVVJJID0gImh0dHA6Ly93d3cubmV0Z3VsbC5jb20vZ2NjL3NuYXBzaG90cy8ke1NOQVB9L2djYy0ke1NOQVB9LnRhci5iejIiCitCQVNFVVJJID0gIiR7R05VX01JUlJPUn0vZ2NjL2djYy0ke1BWfS9nY2MtJHtQVn0udGFyLmJ6MiIKKworU1JDX1VSSSA9ICJcCisgICAgICAgICAgICR7QkFTRVVSSX0gXAorICAgICAgICAgICAke0JBQ0tQT1JUU30gXAorICAgICAgICAgICBmaWxlOi8vMDAwMS1nY2MtNC4zLjEtQVJDSF9GTEFHU19GT1JfVEFSR0VULnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovLzAwMDItdWNsaWJjLWNvbmYucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vMDAwMy1nY2MtdWNsaWJjLWxvY2FsZS1jdHlwZV90b3VwbG93X3QucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vMDAwNC11Y2xpYmMtbG9jYWxlLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovLzAwMDUtdWNsaWJjLWxvY2FsZS1ub19feC5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly8wMDA2LXVjbGliYy1sb2NhbGUtd2NoYXJfZml4LnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovLzAwMDctdWNsaWJjLWxvY2FsZS11cGRhdGUucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vMDAwOC1taXNzaW5nLWV4ZWNpbmZvX2gucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vMDAwOS1jOTktc25wcmludGYucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vMDAxMC1nY2MtcG9pc29uLXN5c3RlbS1kaXJlY3Rvcmllcy5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly8wMDExLWdjYy1wb2lzb24tZGlyLWV4dGVuZC5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly8wMDEyLWdjYy00LjMuMy1TWVNST09UX0NGTEFHU19GT1JfVEFSR0VULnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovLzAwMTMtNjQtYml0LW11bHRpbGliLWhhY2sucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vMDAxNC1vcHRpb25hbC1saWJzdGRjLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovLzAwMTUtZ2NjLWRpc2FibGUtTUFTS19SRUxBWF9QSUNfQ0FMTFMtYml0LnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovLzAwMTYtQ09MTEVDVF9HQ0NfT1BUSU9OUy5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly8wMDE3LVVzZS10aGUtZGVmYXVsdHMuaC1pbi1CLWluc3RlYWQtb2YtUy1hbmQtdC1vZS1pbi1CLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovLzAwMTgtZm9ydHJhbi1jcm9zcy1jb21waWxlLWhhY2sucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vMDAxOS1saWJnY2Mtc2psai1jaGVjay5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly8wMDIwLWNwcC1ob25vci1zeXNyb290LnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovLzAwMjEtTUlQUzY0LURlZmF1bHQtdG8tTjY0LUFCSS5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly8wMDIyLURlZmluZS1HTElCQ19EWU5BTUlDX0xJTktFUi1hbmQtVUNMSUJDX0RZTkFNSUNfTElOS0UucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vMDAyMy1nY2MtRml4LWFyZ3VtZW50LWxpc3QtdG9vLWxvbmctZXJyb3IucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vMDAyNC1EaXNhYmxlLXNkdC5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly8wMDI1LWxpYnRvb2wucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vMDAyNi1nY2MtYXJtdjQtcGFzcy1maXgtdjRieC10by1saW5rZXItdG8tc3VwcG9ydC1FQUJJLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovLzAwMjctVXNlLXRoZS1tdWx0aWxpYi1jb25maWctZmlsZXMtZnJvbS1CLWluc3RlYWQtb2YtdXNpbi5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly8wMDI4LUF2b2lkLXVzaW5nLWxpYmRpci1mcm9tLS5sYS13aGljaC11c3VhbGx5LXBvaW50cy10by0ucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vMDAyOS1leHBvcnQtQ1BQLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovLzAwMzAtRW5hYmxlLVNQRS1BbHRpVmVjLWdlbmVyYXRpb24tb24tcG93ZXBjLWxpbnV4LXRhcmdldC5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly8wMDMxLURpc2FibGUtdGhlLU1VTFRJTElCX09TRElSTkFNRVMtYW5kLW90aGVyLW11bHRpbGliLW8ucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vMDAzMi1FbnN1cmUtdGFyZ2V0LWdjYy1oZWFkZXJzLWNhbi1iZS1pbmNsdWRlZC5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly8wMDMzLWdjYy00Ljgtd29uLXQtYnVpbGQtd2l0aC1kaXNhYmxlLWRlcGVuZGVuY3ktdHJhY2tpbmcucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vMDAzNC1Eb24tdC1zZWFyY2gtaG9zdC1kaXJlY3RvcnktZHVyaW5nLXJlbGluay1pZi1pbnN0X3ByLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovLzAwMzUtRG9udC1saW5rLXRoZS1wbHVnaW5zLXdpdGgtbGliZ29tcC1leHBsaWNpdGx5LnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovLzAwMzYtVXNlLVNZU1RFTUxJQlNfRElSLXJlcGxhY2VtZW50LWluc3RlYWQtb2YtaGFyZGNvZGluZy5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly8wMDM3LWFhcmNoNjQtQWRkLXN1cHBvcnQtZm9yLW11c2wtbGRzby5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly8wMDM4LWZpeC1nLXN5c3Jvb3QucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vMDAzOS1saWJjYzEtZml4LWxpYmNjMS1zLWluc3RhbGwtcGF0aC1hbmQtcnBhdGgucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vMDA0MC1oYW5kbGUtc3lzcm9vdC1zdXBwb3J0LWZvci1uYXRpdmVzZGstZ2NjLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovLzAwNDEtU2VhcmNoLXRhcmdldC1zeXNyb290LWdjYy12ZXJzaW9uLXNwZWNpZmljLWRpcnMtd2l0aC5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly8wMDQyLUZpeC12YXJpb3VzLV9GT1JfQlVJTEQtYW5kLXJlbGF0ZWQtdmFyaWFibGVzLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovLzAwNDMtbGlic3RkYy1TdXBwb3J0LW11c2wucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vMDA0NC1BZGRpbmctbW11c2wtYXMtYS1tdXNsLWxpYmMtc3BlY2lmaWVyLWFuZC10aGUtbmVjZXNzLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovLzAwNDUtU3VwcG9ydC1mb3ItYXJtLWxpbnV4LW11c2wucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vMDA0Ni1HZXQtcmlkLW9mLWV2ZXItYnJva2VuLWZpeGluY2x1ZGVzLW9uLW11c2wucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vMDA0Ny1uaW9zMi1EZWZpbmUtTVVTTF9EWU5BTUlDX0xJTktFUi5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly8wMDQ4LXNzcF9ub25zaGFyZWQucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vMDA0OS1EaXNhYmxlLXRoZS13ZWFrLXJlZmVyZW5jZS1sb2dpYy1pbi1ndGhyLmgtZm9yLW9zLWdlLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovLzAwNTAtcG93ZXJwYy1wYXNzLXNlY3VyZS1wbHQtdG8tdGhlLWxpbmtlci5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly8wMDUxLUlnbm9yZS1mZGVidWctcHJlZml4LW1hcC1pbi1wcm9kdWNlci1zdHJpbmctYnktRGFuaWUucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vMDA1Mi1uaW9zMi11c2UtcmV0LXdpdGgtcjMxLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovLzAwNTMtZXhwci5jLVBSLXRhcmdldC02NTM1OC1Bdm9pZC1jbG9iYmVyaW5nLXBhcnRpYWwtYXJndS5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly8wMDU0LXN1cHBvcnQtZmZpbGUtcHJlZml4LW1hcC5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly8wMDU1LVJldXNlLWZkZWJ1Zy1wcmVmaXgtbWFwLXRvLXJlcGxhY2UtZmZpbGUtcHJlZml4LW1hcC5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly8wMDU2LUVuYWJsZS1saWJjLXByb3ZpZGUtc3NwLWFuZC1nY2NfY3ZfdGFyZ2V0X2RsX2l0ZXJhdGUucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vMDA1Ny11bndpbmQtZml4LWZvci1tdXNsLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovLzAwNTgtZmRlYnVnLXByZWZpeC1tYXAtc3VwcG9ydC10by1yZW1hcC1yZWxhdGl2ZS1wYXRoLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovLzAwNTktbGliZ2NjLXVzZS1sZGZsYWdzLnBhdGNoIFwKKyIKKworQkFDS1BPUlRTID0gIiIKKworU1JDX1VSSVttZDVzdW1dID0gIjRjNjI2YWMyYTgzZWYzMGRmYjkyNjBlNmY1OWMyYjMwIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjYwOGRmNzZkZWMyZDM0ZGU2NTU4MjQ5ZDhhZjRjYmVlMjFlY2VkZGJjYjU4MGQ2NjZmN2E1YTU4M2NhMzMwM2EiCisKK1VQU1RSRUFNX0NIRUNLX1JFR0VYID0gImdjYy0oP1A8cHZlcj41XC5cZCtcLlxkKykudGFyIgorCisjUyA9ICIke1RNUERJUn0vd29yay1zaGFyZWQvZ2NjLSR7UFZ9LSR7UFJ9L2djYy0ke1NOQVB9IgorUyA9ICIke1RNUERJUn0vd29yay1zaGFyZWQvZ2NjLSR7UFZ9LSR7UFJ9L2djYy0ke1BWfSIKK0IgPSAiJHtXT1JLRElSfS9nY2MtJHtQVn0vYnVpbGQuJHtIT1NUX1NZU30uJHtUQVJHRVRfU1lTfSIKKworIyBMYW5ndWFnZSBPdmVycmlkZXMKK0ZPUlRSQU4gPSAiIgorSkFWQSA9ICIiCisKK0xUTyA9ICItLWVuYWJsZS1sdG8iCisKK0VYVFJBX09FQ09ORl9CQVNFID0gIlwKKyAgICAke0xUT30gXAorICAgIC0tZW5hYmxlLWxpYnNzcCBcCisgICAgLS1lbmFibGUtbGliaXRtIFwKKyAgICAtLWRpc2FibGUtYm9vdHN0cmFwIFwKKyAgICAtLWRpc2FibGUtbGlibXVkZmxhcCBcCisgICAgLS13aXRoLXN5c3RlbS16bGliIFwKKyAgICAtLXdpdGgtbGlua2VyLWhhc2gtc3R5bGU9JHtMSU5LRVJfSEFTSF9TVFlMRX0gXAorICAgIC0tZW5hYmxlLWxpbmtlci1idWlsZC1pZCBcCisgICAgLS13aXRoLXBwbD1ubyBcCisgICAgLS13aXRoLWNsb29nPW5vIFwKKyAgICAtLWVuYWJsZS1jaGVja2luZz1yZWxlYXNlIFwKKyAgICAtLWVuYWJsZS1jaGVhZGVycz1jX2dsb2JhbCBcCisgICAgLS13aXRob3V0LWlzbCBcCisiCisKK0VYVFJBX09FQ09ORl9JTklUSUFMID0gIlwKKyAgICAtLWRpc2FibGUtbGlibXVkZmxhcCBcCisgICAgLS1kaXNhYmxlLWxpYmdvbXAgXAorICAgIC0tZGlzYWJsZS1saWJpdG0gXAorICAgIC0tZGlzYWJsZS1saWJxdWFkbWF0aCBcCisgICAgLS13aXRoLXN5c3RlbS16bGliIFwKKyAgICAtLWRpc2FibGUtbHRvIFwKKyAgICAtLWRpc2FibGUtcGx1Z2luIFwKKyAgICAtLWVuYWJsZS1kZWNpbWFsLWZsb2F0PW5vIFwKKyAgICAtLXdpdGhvdXQtaXNsIFwKKyAgICBnY2NfY3ZfbGliY19wcm92aWRlc19zc3A9eWVzIFwKKyIKKworRVhUUkFfT0VDT05GX2FwcGVuZF9saWJjLXVjbGliYyA9ICIgLS1kaXNhYmxlLWRlY2ltYWwtZmxvYXQgIgorCitFWFRSQV9PRUNPTkZfUEFUSFMgPSAiXAorICAgIC0td2l0aC1neHgtaW5jbHVkZS1kaXI9L25vdC9leGlzdHt0YXJnZXRfaW5jbHVkZWRpcn0vYysrLyR7QklOVn0gXAorICAgIC0td2l0aC1zeXNyb290PS9ub3QvZXhpc3QgXAorICAgIC0td2l0aC1idWlsZC1zeXNyb290PSR7U1RBR0lOR19ESVJfVEFSR0VUfSBcCisiCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNS4zLzAwMDEtZ2NjLTQuMy4xLUFSQ0hfRkxBR1NfRk9SX1RBUkdFVC5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy01LjQvMDAwMS1nY2MtNC4zLjEtQVJDSF9GTEFHU19GT1JfVEFSR0VULnBhdGNoCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNS4zLzAwMDEtZ2NjLTQuMy4xLUFSQ0hfRkxBR1NfRk9SX1RBUkdFVC5wYXRjaApyZW5hbWUgdG8gaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTUuNC8wMDAxLWdjYy00LjMuMS1BUkNIX0ZMQUdTX0ZPUl9UQVJHRVQucGF0Y2gKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy01LjMvMDAwMi11Y2xpYmMtY29uZi5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy01LjQvMDAwMi11Y2xpYmMtY29uZi5wYXRjaApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTUuMy8wMDAyLXVjbGliYy1jb25mLnBhdGNoCnJlbmFtZSB0byBpbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNS40LzAwMDItdWNsaWJjLWNvbmYucGF0Y2gKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy01LjMvMDAwMy1nY2MtdWNsaWJjLWxvY2FsZS1jdHlwZV90b3VwbG93X3QucGF0Y2ggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNS40LzAwMDMtZ2NjLXVjbGliYy1sb2NhbGUtY3R5cGVfdG91cGxvd190LnBhdGNoCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNS4zLzAwMDMtZ2NjLXVjbGliYy1sb2NhbGUtY3R5cGVfdG91cGxvd190LnBhdGNoCnJlbmFtZSB0byBpbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNS40LzAwMDMtZ2NjLXVjbGliYy1sb2NhbGUtY3R5cGVfdG91cGxvd190LnBhdGNoCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNS4zLzAwMDQtdWNsaWJjLWxvY2FsZS5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy01LjQvMDAwNC11Y2xpYmMtbG9jYWxlLnBhdGNoCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNS4zLzAwMDQtdWNsaWJjLWxvY2FsZS5wYXRjaApyZW5hbWUgdG8gaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTUuNC8wMDA0LXVjbGliYy1sb2NhbGUucGF0Y2gKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy01LjMvMDAwNS11Y2xpYmMtbG9jYWxlLW5vX194LnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTUuNC8wMDA1LXVjbGliYy1sb2NhbGUtbm9fX3gucGF0Y2gKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy01LjMvMDAwNS11Y2xpYmMtbG9jYWxlLW5vX194LnBhdGNoCnJlbmFtZSB0byBpbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNS40LzAwMDUtdWNsaWJjLWxvY2FsZS1ub19feC5wYXRjaApkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTUuMy8wMDA2LXVjbGliYy1sb2NhbGUtd2NoYXJfZml4LnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTUuNC8wMDA2LXVjbGliYy1sb2NhbGUtd2NoYXJfZml4LnBhdGNoCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNS4zLzAwMDYtdWNsaWJjLWxvY2FsZS13Y2hhcl9maXgucGF0Y2gKcmVuYW1lIHRvIGltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy01LjQvMDAwNi11Y2xpYmMtbG9jYWxlLXdjaGFyX2ZpeC5wYXRjaApkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTUuMy8wMDA3LXVjbGliYy1sb2NhbGUtdXBkYXRlLnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTUuNC8wMDA3LXVjbGliYy1sb2NhbGUtdXBkYXRlLnBhdGNoCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNS4zLzAwMDctdWNsaWJjLWxvY2FsZS11cGRhdGUucGF0Y2gKcmVuYW1lIHRvIGltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy01LjQvMDAwNy11Y2xpYmMtbG9jYWxlLXVwZGF0ZS5wYXRjaApkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTUuMy8wMDA4LW1pc3NpbmctZXhlY2luZm9faC5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy01LjQvMDAwOC1taXNzaW5nLWV4ZWNpbmZvX2gucGF0Y2gKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy01LjMvMDAwOC1taXNzaW5nLWV4ZWNpbmZvX2gucGF0Y2gKcmVuYW1lIHRvIGltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy01LjQvMDAwOC1taXNzaW5nLWV4ZWNpbmZvX2gucGF0Y2gKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy01LjMvMDAwOS1jOTktc25wcmludGYucGF0Y2ggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNS40LzAwMDktYzk5LXNucHJpbnRmLnBhdGNoCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNS4zLzAwMDktYzk5LXNucHJpbnRmLnBhdGNoCnJlbmFtZSB0byBpbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNS40LzAwMDktYzk5LXNucHJpbnRmLnBhdGNoCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNS4zLzAwMTAtZ2NjLXBvaXNvbi1zeXN0ZW0tZGlyZWN0b3JpZXMucGF0Y2ggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNS40LzAwMTAtZ2NjLXBvaXNvbi1zeXN0ZW0tZGlyZWN0b3JpZXMucGF0Y2gKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy01LjMvMDAxMC1nY2MtcG9pc29uLXN5c3RlbS1kaXJlY3Rvcmllcy5wYXRjaApyZW5hbWUgdG8gaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTUuNC8wMDEwLWdjYy1wb2lzb24tc3lzdGVtLWRpcmVjdG9yaWVzLnBhdGNoCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNS4zLzAwMTEtZ2NjLXBvaXNvbi1kaXItZXh0ZW5kLnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTUuNC8wMDExLWdjYy1wb2lzb24tZGlyLWV4dGVuZC5wYXRjaApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTUuMy8wMDExLWdjYy1wb2lzb24tZGlyLWV4dGVuZC5wYXRjaApyZW5hbWUgdG8gaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTUuNC8wMDExLWdjYy1wb2lzb24tZGlyLWV4dGVuZC5wYXRjaApkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTUuMy8wMDEyLWdjYy00LjMuMy1TWVNST09UX0NGTEFHU19GT1JfVEFSR0VULnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTUuNC8wMDEyLWdjYy00LjMuMy1TWVNST09UX0NGTEFHU19GT1JfVEFSR0VULnBhdGNoCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNS4zLzAwMTItZ2NjLTQuMy4zLVNZU1JPT1RfQ0ZMQUdTX0ZPUl9UQVJHRVQucGF0Y2gKcmVuYW1lIHRvIGltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy01LjQvMDAxMi1nY2MtNC4zLjMtU1lTUk9PVF9DRkxBR1NfRk9SX1RBUkdFVC5wYXRjaApkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTUuMy8wMDEzLTY0LWJpdC1tdWx0aWxpYi1oYWNrLnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTUuNC8wMDEzLTY0LWJpdC1tdWx0aWxpYi1oYWNrLnBhdGNoCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNS4zLzAwMTMtNjQtYml0LW11bHRpbGliLWhhY2sucGF0Y2gKcmVuYW1lIHRvIGltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy01LjQvMDAxMy02NC1iaXQtbXVsdGlsaWItaGFjay5wYXRjaApkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTUuMy8wMDE0LW9wdGlvbmFsLWxpYnN0ZGMucGF0Y2ggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNS40LzAwMTQtb3B0aW9uYWwtbGlic3RkYy5wYXRjaApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTUuMy8wMDE0LW9wdGlvbmFsLWxpYnN0ZGMucGF0Y2gKcmVuYW1lIHRvIGltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy01LjQvMDAxNC1vcHRpb25hbC1saWJzdGRjLnBhdGNoCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNS4zLzAwMTUtZ2NjLWRpc2FibGUtTUFTS19SRUxBWF9QSUNfQ0FMTFMtYml0LnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTUuNC8wMDE1LWdjYy1kaXNhYmxlLU1BU0tfUkVMQVhfUElDX0NBTExTLWJpdC5wYXRjaApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTUuMy8wMDE1LWdjYy1kaXNhYmxlLU1BU0tfUkVMQVhfUElDX0NBTExTLWJpdC5wYXRjaApyZW5hbWUgdG8gaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTUuNC8wMDE1LWdjYy1kaXNhYmxlLU1BU0tfUkVMQVhfUElDX0NBTExTLWJpdC5wYXRjaApkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTUuMy8wMDE2LUNPTExFQ1RfR0NDX09QVElPTlMucGF0Y2ggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNS40LzAwMTYtQ09MTEVDVF9HQ0NfT1BUSU9OUy5wYXRjaApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTUuMy8wMDE2LUNPTExFQ1RfR0NDX09QVElPTlMucGF0Y2gKcmVuYW1lIHRvIGltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy01LjQvMDAxNi1DT0xMRUNUX0dDQ19PUFRJT05TLnBhdGNoCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNS4zLzAwMTctVXNlLXRoZS1kZWZhdWx0cy5oLWluLUItaW5zdGVhZC1vZi1TLWFuZC10LW9lLWluLUIucGF0Y2ggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNS40LzAwMTctVXNlLXRoZS1kZWZhdWx0cy5oLWluLUItaW5zdGVhZC1vZi1TLWFuZC10LW9lLWluLUIucGF0Y2gKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy01LjMvMDAxNy1Vc2UtdGhlLWRlZmF1bHRzLmgtaW4tQi1pbnN0ZWFkLW9mLVMtYW5kLXQtb2UtaW4tQi5wYXRjaApyZW5hbWUgdG8gaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTUuNC8wMDE3LVVzZS10aGUtZGVmYXVsdHMuaC1pbi1CLWluc3RlYWQtb2YtUy1hbmQtdC1vZS1pbi1CLnBhdGNoCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNS4zLzAwMTgtZm9ydHJhbi1jcm9zcy1jb21waWxlLWhhY2sucGF0Y2ggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNS40LzAwMTgtZm9ydHJhbi1jcm9zcy1jb21waWxlLWhhY2sucGF0Y2gKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy01LjMvMDAxOC1mb3J0cmFuLWNyb3NzLWNvbXBpbGUtaGFjay5wYXRjaApyZW5hbWUgdG8gaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTUuNC8wMDE4LWZvcnRyYW4tY3Jvc3MtY29tcGlsZS1oYWNrLnBhdGNoCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNS4zLzAwMTktbGliZ2NjLXNqbGotY2hlY2sucGF0Y2ggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNS40LzAwMTktbGliZ2NjLXNqbGotY2hlY2sucGF0Y2gKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy01LjMvMDAxOS1saWJnY2Mtc2psai1jaGVjay5wYXRjaApyZW5hbWUgdG8gaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTUuNC8wMDE5LWxpYmdjYy1zamxqLWNoZWNrLnBhdGNoCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNS4zLzAwMjAtY3BwLWhvbm9yLXN5c3Jvb3QucGF0Y2ggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNS40LzAwMjAtY3BwLWhvbm9yLXN5c3Jvb3QucGF0Y2gKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy01LjMvMDAyMC1jcHAtaG9ub3Itc3lzcm9vdC5wYXRjaApyZW5hbWUgdG8gaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTUuNC8wMDIwLWNwcC1ob25vci1zeXNyb290LnBhdGNoCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNS4zLzAwMjEtTUlQUzY0LURlZmF1bHQtdG8tTjY0LUFCSS5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy01LjQvMDAyMS1NSVBTNjQtRGVmYXVsdC10by1ONjQtQUJJLnBhdGNoCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNS4zLzAwMjEtTUlQUzY0LURlZmF1bHQtdG8tTjY0LUFCSS5wYXRjaApyZW5hbWUgdG8gaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTUuNC8wMDIxLU1JUFM2NC1EZWZhdWx0LXRvLU42NC1BQkkucGF0Y2gKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy01LjMvMDAyMi1EZWZpbmUtR0xJQkNfRFlOQU1JQ19MSU5LRVItYW5kLVVDTElCQ19EWU5BTUlDX0xJTktFLnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTUuNC8wMDIyLURlZmluZS1HTElCQ19EWU5BTUlDX0xJTktFUi1hbmQtVUNMSUJDX0RZTkFNSUNfTElOS0UucGF0Y2gKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy01LjMvMDAyMi1EZWZpbmUtR0xJQkNfRFlOQU1JQ19MSU5LRVItYW5kLVVDTElCQ19EWU5BTUlDX0xJTktFLnBhdGNoCnJlbmFtZSB0byBpbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNS40LzAwMjItRGVmaW5lLUdMSUJDX0RZTkFNSUNfTElOS0VSLWFuZC1VQ0xJQkNfRFlOQU1JQ19MSU5LRS5wYXRjaApkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTUuMy8wMDIzLWdjYy1GaXgtYXJndW1lbnQtbGlzdC10b28tbG9uZy1lcnJvci5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy01LjQvMDAyMy1nY2MtRml4LWFyZ3VtZW50LWxpc3QtdG9vLWxvbmctZXJyb3IucGF0Y2gKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy01LjMvMDAyMy1nY2MtRml4LWFyZ3VtZW50LWxpc3QtdG9vLWxvbmctZXJyb3IucGF0Y2gKcmVuYW1lIHRvIGltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy01LjQvMDAyMy1nY2MtRml4LWFyZ3VtZW50LWxpc3QtdG9vLWxvbmctZXJyb3IucGF0Y2gKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy01LjMvMDAyNC1EaXNhYmxlLXNkdC5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy01LjQvMDAyNC1EaXNhYmxlLXNkdC5wYXRjaApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTUuMy8wMDI0LURpc2FibGUtc2R0LnBhdGNoCnJlbmFtZSB0byBpbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNS40LzAwMjQtRGlzYWJsZS1zZHQucGF0Y2gKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy01LjMvMDAyNS1saWJ0b29sLnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTUuNC8wMDI1LWxpYnRvb2wucGF0Y2gKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy01LjMvMDAyNS1saWJ0b29sLnBhdGNoCnJlbmFtZSB0byBpbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNS40LzAwMjUtbGlidG9vbC5wYXRjaApkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTUuMy8wMDI2LWdjYy1hcm12NC1wYXNzLWZpeC12NGJ4LXRvLWxpbmtlci10by1zdXBwb3J0LUVBQkkucGF0Y2ggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNS40LzAwMjYtZ2NjLWFybXY0LXBhc3MtZml4LXY0YngtdG8tbGlua2VyLXRvLXN1cHBvcnQtRUFCSS5wYXRjaApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTUuMy8wMDI2LWdjYy1hcm12NC1wYXNzLWZpeC12NGJ4LXRvLWxpbmtlci10by1zdXBwb3J0LUVBQkkucGF0Y2gKcmVuYW1lIHRvIGltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy01LjQvMDAyNi1nY2MtYXJtdjQtcGFzcy1maXgtdjRieC10by1saW5rZXItdG8tc3VwcG9ydC1FQUJJLnBhdGNoCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNS4zLzAwMjctVXNlLXRoZS1tdWx0aWxpYi1jb25maWctZmlsZXMtZnJvbS1CLWluc3RlYWQtb2YtdXNpbi5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy01LjQvMDAyNy1Vc2UtdGhlLW11bHRpbGliLWNvbmZpZy1maWxlcy1mcm9tLUItaW5zdGVhZC1vZi11c2luLnBhdGNoCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNS4zLzAwMjctVXNlLXRoZS1tdWx0aWxpYi1jb25maWctZmlsZXMtZnJvbS1CLWluc3RlYWQtb2YtdXNpbi5wYXRjaApyZW5hbWUgdG8gaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTUuNC8wMDI3LVVzZS10aGUtbXVsdGlsaWItY29uZmlnLWZpbGVzLWZyb20tQi1pbnN0ZWFkLW9mLXVzaW4ucGF0Y2gKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy01LjMvMDAyOC1Bdm9pZC11c2luZy1saWJkaXItZnJvbS0ubGEtd2hpY2gtdXN1YWxseS1wb2ludHMtdG8tLnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTUuNC8wMDI4LUF2b2lkLXVzaW5nLWxpYmRpci1mcm9tLS5sYS13aGljaC11c3VhbGx5LXBvaW50cy10by0ucGF0Y2gKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy01LjMvMDAyOC1Bdm9pZC11c2luZy1saWJkaXItZnJvbS0ubGEtd2hpY2gtdXN1YWxseS1wb2ludHMtdG8tLnBhdGNoCnJlbmFtZSB0byBpbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNS40LzAwMjgtQXZvaWQtdXNpbmctbGliZGlyLWZyb20tLmxhLXdoaWNoLXVzdWFsbHktcG9pbnRzLXRvLS5wYXRjaApkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTUuMy8wMDI5LWV4cG9ydC1DUFAucGF0Y2ggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNS40LzAwMjktZXhwb3J0LUNQUC5wYXRjaApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTUuMy8wMDI5LWV4cG9ydC1DUFAucGF0Y2gKcmVuYW1lIHRvIGltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy01LjQvMDAyOS1leHBvcnQtQ1BQLnBhdGNoCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNS4zLzAwMzAtRW5hYmxlLVNQRS1BbHRpVmVjLWdlbmVyYXRpb24tb24tcG93ZXBjLWxpbnV4LXRhcmdldC5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy01LjQvMDAzMC1FbmFibGUtU1BFLUFsdGlWZWMtZ2VuZXJhdGlvbi1vbi1wb3dlcGMtbGludXgtdGFyZ2V0LnBhdGNoCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNS4zLzAwMzAtRW5hYmxlLVNQRS1BbHRpVmVjLWdlbmVyYXRpb24tb24tcG93ZXBjLWxpbnV4LXRhcmdldC5wYXRjaApyZW5hbWUgdG8gaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTUuNC8wMDMwLUVuYWJsZS1TUEUtQWx0aVZlYy1nZW5lcmF0aW9uLW9uLXBvd2VwYy1saW51eC10YXJnZXQucGF0Y2gKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy01LjMvMDAzMS1EaXNhYmxlLXRoZS1NVUxUSUxJQl9PU0RJUk5BTUVTLWFuZC1vdGhlci1tdWx0aWxpYi1vLnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTUuNC8wMDMxLURpc2FibGUtdGhlLU1VTFRJTElCX09TRElSTkFNRVMtYW5kLW90aGVyLW11bHRpbGliLW8ucGF0Y2gKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy01LjMvMDAzMS1EaXNhYmxlLXRoZS1NVUxUSUxJQl9PU0RJUk5BTUVTLWFuZC1vdGhlci1tdWx0aWxpYi1vLnBhdGNoCnJlbmFtZSB0byBpbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNS40LzAwMzEtRGlzYWJsZS10aGUtTVVMVElMSUJfT1NESVJOQU1FUy1hbmQtb3RoZXItbXVsdGlsaWItby5wYXRjaApkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTUuMy8wMDMyLUVuc3VyZS10YXJnZXQtZ2NjLWhlYWRlcnMtY2FuLWJlLWluY2x1ZGVkLnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTUuNC8wMDMyLUVuc3VyZS10YXJnZXQtZ2NjLWhlYWRlcnMtY2FuLWJlLWluY2x1ZGVkLnBhdGNoCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNS4zLzAwMzItRW5zdXJlLXRhcmdldC1nY2MtaGVhZGVycy1jYW4tYmUtaW5jbHVkZWQucGF0Y2gKcmVuYW1lIHRvIGltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy01LjQvMDAzMi1FbnN1cmUtdGFyZ2V0LWdjYy1oZWFkZXJzLWNhbi1iZS1pbmNsdWRlZC5wYXRjaApkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTUuMy8wMDMzLWdjYy00Ljgtd29uLXQtYnVpbGQtd2l0aC1kaXNhYmxlLWRlcGVuZGVuY3ktdHJhY2tpbmcucGF0Y2ggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNS40LzAwMzMtZ2NjLTQuOC13b24tdC1idWlsZC13aXRoLWRpc2FibGUtZGVwZW5kZW5jeS10cmFja2luZy5wYXRjaApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTUuMy8wMDMzLWdjYy00Ljgtd29uLXQtYnVpbGQtd2l0aC1kaXNhYmxlLWRlcGVuZGVuY3ktdHJhY2tpbmcucGF0Y2gKcmVuYW1lIHRvIGltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy01LjQvMDAzMy1nY2MtNC44LXdvbi10LWJ1aWxkLXdpdGgtZGlzYWJsZS1kZXBlbmRlbmN5LXRyYWNraW5nLnBhdGNoCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNS4zLzAwMzQtRG9uLXQtc2VhcmNoLWhvc3QtZGlyZWN0b3J5LWR1cmluZy1yZWxpbmstaWYtaW5zdF9wci5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy01LjQvMDAzNC1Eb24tdC1zZWFyY2gtaG9zdC1kaXJlY3RvcnktZHVyaW5nLXJlbGluay1pZi1pbnN0X3ByLnBhdGNoCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNS4zLzAwMzQtRG9uLXQtc2VhcmNoLWhvc3QtZGlyZWN0b3J5LWR1cmluZy1yZWxpbmstaWYtaW5zdF9wci5wYXRjaApyZW5hbWUgdG8gaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTUuNC8wMDM0LURvbi10LXNlYXJjaC1ob3N0LWRpcmVjdG9yeS1kdXJpbmctcmVsaW5rLWlmLWluc3RfcHIucGF0Y2gKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy01LjMvMDAzNS1Eb250LWxpbmstdGhlLXBsdWdpbnMtd2l0aC1saWJnb21wLWV4cGxpY2l0bHkucGF0Y2ggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNS40LzAwMzUtRG9udC1saW5rLXRoZS1wbHVnaW5zLXdpdGgtbGliZ29tcC1leHBsaWNpdGx5LnBhdGNoCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNS4zLzAwMzUtRG9udC1saW5rLXRoZS1wbHVnaW5zLXdpdGgtbGliZ29tcC1leHBsaWNpdGx5LnBhdGNoCnJlbmFtZSB0byBpbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNS40LzAwMzUtRG9udC1saW5rLXRoZS1wbHVnaW5zLXdpdGgtbGliZ29tcC1leHBsaWNpdGx5LnBhdGNoCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNS4zLzAwMzYtVXNlLVNZU1RFTUxJQlNfRElSLXJlcGxhY2VtZW50LWluc3RlYWQtb2YtaGFyZGNvZGluZy5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy01LjQvMDAzNi1Vc2UtU1lTVEVNTElCU19ESVItcmVwbGFjZW1lbnQtaW5zdGVhZC1vZi1oYXJkY29kaW5nLnBhdGNoCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNS4zLzAwMzYtVXNlLVNZU1RFTUxJQlNfRElSLXJlcGxhY2VtZW50LWluc3RlYWQtb2YtaGFyZGNvZGluZy5wYXRjaApyZW5hbWUgdG8gaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTUuNC8wMDM2LVVzZS1TWVNURU1MSUJTX0RJUi1yZXBsYWNlbWVudC1pbnN0ZWFkLW9mLWhhcmRjb2RpbmcucGF0Y2gKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy01LjMvMDAzNy1hYXJjaDY0LUFkZC1zdXBwb3J0LWZvci1tdXNsLWxkc28ucGF0Y2ggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNS40LzAwMzctYWFyY2g2NC1BZGQtc3VwcG9ydC1mb3ItbXVzbC1sZHNvLnBhdGNoCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNS4zLzAwMzctYWFyY2g2NC1BZGQtc3VwcG9ydC1mb3ItbXVzbC1sZHNvLnBhdGNoCnJlbmFtZSB0byBpbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNS40LzAwMzctYWFyY2g2NC1BZGQtc3VwcG9ydC1mb3ItbXVzbC1sZHNvLnBhdGNoCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNS4zLzAwMzgtZml4LWctc3lzcm9vdC5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy01LjQvMDAzOC1maXgtZy1zeXNyb290LnBhdGNoCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNS4zLzAwMzgtZml4LWctc3lzcm9vdC5wYXRjaApyZW5hbWUgdG8gaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTUuNC8wMDM4LWZpeC1nLXN5c3Jvb3QucGF0Y2gKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy01LjMvMDAzOS1saWJjYzEtZml4LWxpYmNjMS1zLWluc3RhbGwtcGF0aC1hbmQtcnBhdGgucGF0Y2ggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNS40LzAwMzktbGliY2MxLWZpeC1saWJjYzEtcy1pbnN0YWxsLXBhdGgtYW5kLXJwYXRoLnBhdGNoCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNS4zLzAwMzktbGliY2MxLWZpeC1saWJjYzEtcy1pbnN0YWxsLXBhdGgtYW5kLXJwYXRoLnBhdGNoCnJlbmFtZSB0byBpbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNS40LzAwMzktbGliY2MxLWZpeC1saWJjYzEtcy1pbnN0YWxsLXBhdGgtYW5kLXJwYXRoLnBhdGNoCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNS4zLzAwNDAtaGFuZGxlLXN5c3Jvb3Qtc3VwcG9ydC1mb3ItbmF0aXZlc2RrLWdjYy5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy01LjQvMDA0MC1oYW5kbGUtc3lzcm9vdC1zdXBwb3J0LWZvci1uYXRpdmVzZGstZ2NjLnBhdGNoCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNS4zLzAwNDAtaGFuZGxlLXN5c3Jvb3Qtc3VwcG9ydC1mb3ItbmF0aXZlc2RrLWdjYy5wYXRjaApyZW5hbWUgdG8gaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTUuNC8wMDQwLWhhbmRsZS1zeXNyb290LXN1cHBvcnQtZm9yLW5hdGl2ZXNkay1nY2MucGF0Y2gKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy01LjMvMDA0MS1TZWFyY2gtdGFyZ2V0LXN5c3Jvb3QtZ2NjLXZlcnNpb24tc3BlY2lmaWMtZGlycy13aXRoLnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTUuNC8wMDQxLVNlYXJjaC10YXJnZXQtc3lzcm9vdC1nY2MtdmVyc2lvbi1zcGVjaWZpYy1kaXJzLXdpdGgucGF0Y2gKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy01LjMvMDA0MS1TZWFyY2gtdGFyZ2V0LXN5c3Jvb3QtZ2NjLXZlcnNpb24tc3BlY2lmaWMtZGlycy13aXRoLnBhdGNoCnJlbmFtZSB0byBpbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNS40LzAwNDEtU2VhcmNoLXRhcmdldC1zeXNyb290LWdjYy12ZXJzaW9uLXNwZWNpZmljLWRpcnMtd2l0aC5wYXRjaApkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTUuMy8wMDQyLUZpeC12YXJpb3VzLV9GT1JfQlVJTEQtYW5kLXJlbGF0ZWQtdmFyaWFibGVzLnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTUuNC8wMDQyLUZpeC12YXJpb3VzLV9GT1JfQlVJTEQtYW5kLXJlbGF0ZWQtdmFyaWFibGVzLnBhdGNoCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNS4zLzAwNDItRml4LXZhcmlvdXMtX0ZPUl9CVUlMRC1hbmQtcmVsYXRlZC12YXJpYWJsZXMucGF0Y2gKcmVuYW1lIHRvIGltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy01LjQvMDA0Mi1GaXgtdmFyaW91cy1fRk9SX0JVSUxELWFuZC1yZWxhdGVkLXZhcmlhYmxlcy5wYXRjaApkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTUuMy8wMDQzLWxpYnN0ZGMtU3VwcG9ydC1tdXNsLnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTUuNC8wMDQzLWxpYnN0ZGMtU3VwcG9ydC1tdXNsLnBhdGNoCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNS4zLzAwNDMtbGlic3RkYy1TdXBwb3J0LW11c2wucGF0Y2gKcmVuYW1lIHRvIGltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy01LjQvMDA0My1saWJzdGRjLVN1cHBvcnQtbXVzbC5wYXRjaApkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTUuNC8wMDQ0LUFkZGluZy1tbXVzbC1hcy1hLW11c2wtbGliYy1zcGVjaWZpZXItYW5kLXRoZS1uZWNlc3MucGF0Y2ggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNS40LzAwNDQtQWRkaW5nLW1tdXNsLWFzLWEtbXVzbC1saWJjLXNwZWNpZmllci1hbmQtdGhlLW5lY2Vzcy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yNmFhOTZjCi0tLSAvZGV2L251bGwKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTUuNC8wMDQ0LUFkZGluZy1tbXVzbC1hcy1hLW11c2wtbGliYy1zcGVjaWZpZXItYW5kLXRoZS1uZWNlc3MucGF0Y2gKQEAgLTAsMCArMSwyNzAgQEAKK0Zyb20gMGI1NDc5OWQ4MGZiODU5YzdiMTQyNDY3ZTRkNDJjOTlkYjU5ZGY1MCBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CitEYXRlOiBUdWUsIDggRGVjIDIwMTUgMDg6MzA6MzUgKzAwMDAKK1N1YmplY3Q6IFtQQVRDSCA0NC80Nl0gQWRkaW5nIC1tbXVzbCBhcyBhIG11c2wgbGliYyBzcGVjaWZpZXIsIGFuZCB0aGUKKyBuZWNlc3NhcnkgaGFja3MgZm9yIGl0IHRvIGtub3cgaG93IHRvIGZpbmQgbXVzbCdzIGR5bmFtaWMgbGlua2VyLgorCitVcHN0cmVhbS1TdGF0dXM6IEJhY2twb3J0IFtwYXJ0aWFsXQorU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KKy0tLQorIGdjYy9jb25maWcuZ2NjICAgICAgICAgICAgICAgIHwgIDEwICsrKystCisgZ2NjL2NvbmZpZy9saW51eC5oICAgICAgICAgICAgfCAxMDAgKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKy0tLS0tCisgZ2NjL2NvbmZpZy9saW51eC5vcHQgICAgICAgICAgfCAgIDQgKysKKyBnY2MvY29uZmlnL3JzNjAwMC9zZWN1cmVwbHQuaCB8ICAgMSArCisgZ2NjL2NvbmZpZy9yczYwMDAvc3lzdjQuaCAgICAgfCAgIDUgKysrCisgZ2NjL2dpbmNsdWRlL3N0ZGRlZi5oICAgICAgICAgfCAgIDMgKysKKyA2IGZpbGVzIGNoYW5nZWQsIDExMCBpbnNlcnRpb25zKCspLCAxMyBkZWxldGlvbnMoLSkKKworSW5kZXg6IGdjYy01LjQuMC9nY2MvY29uZmlnLmdjYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGdjYy01LjQuMC5vcmlnL2djYy9jb25maWcuZ2NjCisrKysgZ2NjLTUuNC4wL2djYy9jb25maWcuZ2NjCitAQCAtNTc1LDcgKzU3NSw3IEBAIGNhc2UgJHt0YXJnZXR9IGluCisgZXNhYworIAorICMgQ29tbW9uIEMgbGlicmFyaWVzLgorLXRtX2RlZmluZXM9IiR0bV9kZWZpbmVzIExJQkNfR0xJQkM9MSBMSUJDX1VDTElCQz0yIExJQkNfQklPTklDPTMiCisrdG1fZGVmaW5lcz0iJHRtX2RlZmluZXMgTElCQ19HTElCQz0xIExJQkNfVUNMSUJDPTIgTElCQ19CSU9OSUM9MyBMSUJDX01VU0w9NCIKKyAKKyAjIDMyLWJpdCB4ODYgcHJvY2Vzc29ycyBzdXBwb3J0ZWQgYnkgLS13aXRoLWFyY2g9LiAgRWFjaCBwcm9jZXNzb3IKKyAjIE1VU1QgYmUgc2VwYXJhdGVkIGJ5IGV4YWN0bHkgb25lIHNwYWNlLgorQEAgLTcyMCw2ICs3MjAsOSBAQCBjYXNlICR7dGFyZ2V0fSBpbgorICAgICAqLSotKnVjbGliYyopCisgICAgICAgdG1fZGVmaW5lcz0iJHRtX2RlZmluZXMgREVGQVVMVF9MSUJDPUxJQkNfVUNMSUJDIgorICAgICAgIDs7CisrICAgICotKi0qbXVzbCopCisrICAgICAgdG1fZGVmaW5lcz0iJHRtX2RlZmluZXMgREVGQVVMVF9MSUJDPUxJQkNfTVVTTCIKKysgICAgICA7OworICAgICAqKQorICAgICAgIHRtX2RlZmluZXM9IiR0bV9kZWZpbmVzIERFRkFVTFRfTElCQz1MSUJDX0dMSUJDIgorICAgICAgIDs7CitAQCAtMjQyMCw2ICsyNDIzLDExIEBAIHBvd2VycGMqLSotbGludXgqKQorIAkgICAgcG93ZXJwYyotKi1saW51eCpwYWlyZWQqKQorIAkJdG1fZmlsZT0iJHt0bV9maWxlfSByczYwMDAvNzUwY2wuaCIgOzsKKyAJZXNhYworKyAgICAgICAgY2FzZSAke3RhcmdldH0gaW4KKysJICAgICotbGludXgqLW11c2wqKQorKwkJZW5hYmxlX3NlY3VyZXBsdD15ZXMgOzsKKysJZXNhYworKworIAlpZiB0ZXN0IHgke2VuYWJsZV9zZWN1cmVwbHR9ID0geHllczsgdGhlbgorIAkJdG1fZmlsZT0icnM2MDAwL3NlY3VyZXBsdC5oICR7dG1fZmlsZX0iCisgCWZpCitJbmRleDogZ2NjLTUuNC4wL2djYy9jb25maWcvbGludXguaAorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGdjYy01LjQuMC5vcmlnL2djYy9jb25maWcvbGludXguaAorKysrIGdjYy01LjQuMC9nY2MvY29uZmlnL2xpbnV4LmgKK0BAIC0zMiwxMCArMzIsMTIgQEAgc2VlIHRoZSBmaWxlcyBDT1BZSU5HMyBhbmQgQ09QWUlORy5SVU5USQorICNkZWZpbmUgT1BUSU9OX0dMSUJDICAoREVGQVVMVF9MSUJDID09IExJQkNfR0xJQkMpCisgI2RlZmluZSBPUFRJT05fVUNMSUJDIChERUZBVUxUX0xJQkMgPT0gTElCQ19VQ0xJQkMpCisgI2RlZmluZSBPUFRJT05fQklPTklDIChERUZBVUxUX0xJQkMgPT0gTElCQ19CSU9OSUMpCisrI2RlZmluZSBPUFRJT05fTVVTTCAgIChERUZBVUxUX0xJQkMgPT0gTElCQ19NVVNMKQorICNlbHNlCisgI2RlZmluZSBPUFRJT05fR0xJQkMgIChsaW51eF9saWJjID09IExJQkNfR0xJQkMpCisgI2RlZmluZSBPUFRJT05fVUNMSUJDIChsaW51eF9saWJjID09IExJQkNfVUNMSUJDKQorICNkZWZpbmUgT1BUSU9OX0JJT05JQyAobGludXhfbGliYyA9PSBMSUJDX0JJT05JQykKKysjZGVmaW5lIE9QVElPTl9NVVNMICAgKGxpbnV4X2xpYmMgPT0gTElCQ19NVVNMKQorICNlbmRpZgorIAorICNkZWZpbmUgR05VX1VTRVJfVEFSR0VUX09TX0NQUF9CVUlMVElOUygpCQkJXAorQEAgLTUzLDE4ICs1NSwyMSBAQCBzZWUgdGhlIGZpbGVzIENPUFlJTkczIGFuZCBDT1BZSU5HLlJVTlRJCisgICAgdUNsaWJjIG9yIEJpb25pYyBpcyB0aGUgZGVmYXVsdCBDIGxpYnJhcnkgYW5kIHdoZXRoZXIKKyAgICAtbXVjbGliYyBvciAtbWdsaWJjIG9yIC1tYmlvbmljIGhhcyBiZWVuIHBhc3NlZCB0byBjaGFuZ2UgdGhlIGRlZmF1bHQuICAqLworIAorLSNkZWZpbmUgQ0hPT1NFX0RZTkFNSUNfTElOS0VSMShMSUJDMSwgTElCQzIsIExJQkMzLCBMRDEsIExEMiwgTEQzKQlcCistICAiJXsiIExJQkMyICI6IiBMRDIgIjs6JXsiIExJQkMzICI6IiBMRDMgIjs6IiBMRDEgIn19IgorKyNkZWZpbmUgQ0hPT1NFX0RZTkFNSUNfTElOS0VSMShMSUJDMSwgTElCQzIsIExJQkMzLCBMSUJDNCwgTEQxLCBMRDIsIExEMywgTEQ0KQlcCisrICAiJXsiIExJQkMyICI6IiBMRDIgIjs6JXsiIExJQkMzICI6IiBMRDMgIjs6JXsiIExJQkM0ICI6IiBMRDQgIjs6IiBMRDEgIn19fSIKKyAKKyAjaWYgREVGQVVMVF9MSUJDID09IExJQkNfR0xJQkMKKy0jZGVmaW5lIENIT09TRV9EWU5BTUlDX0xJTktFUihHLCBVLCBCKSBcCistICBDSE9PU0VfRFlOQU1JQ19MSU5LRVIxICgibWdsaWJjIiwgIm11Y2xpYmMiLCAibWJpb25pYyIsIEcsIFUsIEIpCisrI2RlZmluZSBDSE9PU0VfRFlOQU1JQ19MSU5LRVIoRywgVSwgQiwgTSkgXAorKyAgQ0hPT1NFX0RZTkFNSUNfTElOS0VSMSAoIm1nbGliYyIsICJtdWNsaWJjIiwgIm1iaW9uaWMiLCAibW11c2wiLCBHLCBVLCBCLCBNKQorICNlbGlmIERFRkFVTFRfTElCQyA9PSBMSUJDX1VDTElCQworLSNkZWZpbmUgQ0hPT1NFX0RZTkFNSUNfTElOS0VSKEcsIFUsIEIpIFwKKy0gIENIT09TRV9EWU5BTUlDX0xJTktFUjEgKCJtdWNsaWJjIiwgIm1nbGliYyIsICJtYmlvbmljIiwgVSwgRywgQikKKysjZGVmaW5lIENIT09TRV9EWU5BTUlDX0xJTktFUihHLCBVLCBCLCBNKSBcCisrICBDSE9PU0VfRFlOQU1JQ19MSU5LRVIxICgibXVjbGliYyIsICJtZ2xpYmMiLCAibWJpb25pYyIsICJtbXVzbCIsIFUsIEcsIEIsIE0pCisgI2VsaWYgREVGQVVMVF9MSUJDID09IExJQkNfQklPTklDCistI2RlZmluZSBDSE9PU0VfRFlOQU1JQ19MSU5LRVIoRywgVSwgQikgXAorLSAgQ0hPT1NFX0RZTkFNSUNfTElOS0VSMSAoIm1iaW9uaWMiLCAibWdsaWJjIiwgIm11Y2xpYmMiLCBCLCBHLCBVKQorKyNkZWZpbmUgQ0hPT1NFX0RZTkFNSUNfTElOS0VSKEcsIFUsIEIsIE0pIFwKKysgIENIT09TRV9EWU5BTUlDX0xJTktFUjEgKCJtYmlvbmljIiwgIm1nbGliYyIsICJtdWNsaWJjIiwgIm1tdXNsIiwgQiwgRywgVSwgTSkKKysjZWxpZiBERUZBVUxUX0xJQkMgPT0gTElCQ19NVVNMCisrI2RlZmluZSBDSE9PU0VfRFlOQU1JQ19MSU5LRVIoRywgVSwgQiwgTSkgXAorKyAgQ0hPT1NFX0RZTkFNSUNfTElOS0VSMSAoIm1tdXNsIiwgIm1nbGliYyIsICJtdWNsaWJjIiwgIm1iaW9uaWMiLCBNLCBHLCBVLCBCKQorICNlbHNlCisgI2Vycm9yICJVbnN1cHBvcnRlZCBERUZBVUxUX0xJQkMiCisgI2VuZGlmIC8qIERFRkFVTFRfTElCQyAqLworQEAgLTg0LDE2ICs4OSwxNiBAQCBzZWUgdGhlIGZpbGVzIENPUFlJTkczIGFuZCBDT1BZSU5HLlJVTlRJCisgCisgI2RlZmluZSBHTlVfVVNFUl9EWU5BTUlDX0xJTktFUgkJCQkJCVwKKyAgIENIT09TRV9EWU5BTUlDX0xJTktFUiAoR0xJQkNfRFlOQU1JQ19MSU5LRVIsIFVDTElCQ19EWU5BTUlDX0xJTktFUiwJXAorLQkJCSBCSU9OSUNfRFlOQU1JQ19MSU5LRVIpCisrCQkJIEJJT05JQ19EWU5BTUlDX0xJTktFUiwgTVVTTF9EWU5BTUlDX0xJTktFUikKKyAjZGVmaW5lIEdOVV9VU0VSX0RZTkFNSUNfTElOS0VSMzIJCQkJCVwKKyAgIENIT09TRV9EWU5BTUlDX0xJTktFUiAoR0xJQkNfRFlOQU1JQ19MSU5LRVIzMiwgVUNMSUJDX0RZTkFNSUNfTElOS0VSMzIsIFwKKy0JCQkgQklPTklDX0RZTkFNSUNfTElOS0VSMzIpCisrCQkJIEJJT05JQ19EWU5BTUlDX0xJTktFUjMyLCBNVVNMX0RZTkFNSUNfTElOS0VSMzIpCisgI2RlZmluZSBHTlVfVVNFUl9EWU5BTUlDX0xJTktFUjY0CQkJCQlcCisgICBDSE9PU0VfRFlOQU1JQ19MSU5LRVIgKEdMSUJDX0RZTkFNSUNfTElOS0VSNjQsIFVDTElCQ19EWU5BTUlDX0xJTktFUjY0LCBcCistCQkJIEJJT05JQ19EWU5BTUlDX0xJTktFUjY0KQorKwkJCSBCSU9OSUNfRFlOQU1JQ19MSU5LRVI2NCwgTVVTTF9EWU5BTUlDX0xJTktFUjY0KQorICNkZWZpbmUgR05VX1VTRVJfRFlOQU1JQ19MSU5LRVJYMzIJCQkJCVwKKyAgIENIT09TRV9EWU5BTUlDX0xJTktFUiAoR0xJQkNfRFlOQU1JQ19MSU5LRVJYMzIsIFVDTElCQ19EWU5BTUlDX0xJTktFUlgzMiwgXAorLQkJCSBCSU9OSUNfRFlOQU1JQ19MSU5LRVJYMzIpCisrCQkJIEJJT05JQ19EWU5BTUlDX0xJTktFUlgzMiwgTVVTTF9EWU5BTUlDX0xJTktFUlgzMikKKyAKKyAvKiBXaGV0aGVyIHdlIGhhdmUgQmlvbmljIGxpYmMgcnVudGltZSAqLworICN1bmRlZiBUQVJHRVRfSEFTX0JJT05JQworQEAgLTEyMywzICsxMjgsNzQgQEAgc2VlIHRoZSBmaWxlcyBDT1BZSU5HMyBhbmQgQ09QWUlORy5SVU5USQorICMgZGVmaW5lIFRBUkdFVF9MSUJDX0hBU19GVU5DVElPTiBsaW51eF9saWJjX2hhc19mdW5jdGlvbgorIAorICNlbmRpZgorKworKy8qIG11c2wgYXZvaWRzIHByb2JsZW1hdGljIGluY2x1ZGVzIGJ5IHJlYXJyYW5naW5nIHRoZSBpbmNsdWRlIGRpcmVjdG9yaWVzLgorKyAqIFVuZm9ydHVuYXRlbHksIHRoaXMgaXMgbW9zdGx5IGR1cGxpY2F0ZWQgZnJvbSBjcHBkZWZhdWx0LmMgKi8KKysjaWYgREVGQVVMVF9MSUJDID09IExJQkNfTVVTTAorKyNkZWZpbmUgSU5DTFVERV9ERUZBVUxUU19NVVNMX0dQUAkJCVwKKysgICAgeyBHUExVU1BMVVNfSU5DTFVERV9ESVIsICJHKysiLCAxLCAxLAkJXAorKyAgICAgIEdQTFVTUExVU19JTkNMVURFX0RJUl9BRERfU1lTUk9PVCwgMCB9LAkJXAorKyAgICB7IEdQTFVTUExVU19UT09MX0lOQ0xVREVfRElSLCAiRysrIiwgMSwgMSwJCVwKKysgICAgICBHUExVU1BMVVNfSU5DTFVERV9ESVJfQUREX1NZU1JPT1QsIDEgfSwJCVwKKysgICAgeyBHUExVU1BMVVNfQkFDS1dBUkRfSU5DTFVERV9ESVIsICJHKysiLCAxLCAxLAlcCisrICAgICAgR1BMVVNQTFVTX0lOQ0xVREVfRElSX0FERF9TWVNST09ULCAwIH0sCisrCisrI2lmZGVmIExPQ0FMX0lOQ0xVREVfRElSCisrI2RlZmluZSBJTkNMVURFX0RFRkFVTFRTX01VU0xfTE9DQUwJCQlcCisrICAgIHsgTE9DQUxfSU5DTFVERV9ESVIsIDAsIDAsIDEsIDEsIDIgfSwJCVwKKysgICAgeyBMT0NBTF9JTkNMVURFX0RJUiwgMCwgMCwgMSwgMSwgMCB9LAorKyNlbHNlCisrI2RlZmluZSBJTkNMVURFX0RFRkFVTFRTX01VU0xfTE9DQUwKKysjZW5kaWYKKysKKysjaWZkZWYgUFJFRklYX0lOQ0xVREVfRElSCisrI2RlZmluZSBJTkNMVURFX0RFRkFVTFRTX01VU0xfUFJFRklYCQkJXAorKyAgICB7IFBSRUZJWF9JTkNMVURFX0RJUiwgMCwgMCwgMSwgMCwgMH0sCisrI2Vsc2UKKysjZGVmaW5lIElOQ0xVREVfREVGQVVMVFNfTVVTTF9QUkVGSVgKKysjZW5kaWYKKysKKysjaWZkZWYgQ1JPU1NfSU5DTFVERV9ESVIKKysjZGVmaW5lIElOQ0xVREVfREVGQVVMVFNfTVVTTF9DUk9TUwkJCVwKKysgICAgeyBDUk9TU19JTkNMVURFX0RJUiwgIkdDQyIsIDAsIDAsIDAsIDB9LAorKyNlbHNlCisrI2RlZmluZSBJTkNMVURFX0RFRkFVTFRTX01VU0xfQ1JPU1MKKysjZW5kaWYKKysKKysjaWZkZWYgVE9PTF9JTkNMVURFX0RJUgorKyNkZWZpbmUgSU5DTFVERV9ERUZBVUxUU19NVVNMX1RPT0wJCQlcCisrICAgIHsgVE9PTF9JTkNMVURFX0RJUiwgIkJJTlVUSUxTIiwgMCwgMSwgMCwgMH0sCisrI2Vsc2UKKysjZGVmaW5lIElOQ0xVREVfREVGQVVMVFNfTVVTTF9UT09MCisrI2VuZGlmCisrCisrI2lmZGVmIE5BVElWRV9TWVNURU1fSEVBREVSX0RJUgorKyNkZWZpbmUgSU5DTFVERV9ERUZBVUxUU19NVVNMX05BVElWRQkJCVwKKysgICAgeyBOQVRJVkVfU1lTVEVNX0hFQURFUl9ESVIsIDAsIDAsIDAsIDEsIDIgfSwJXAorKyAgICB7IE5BVElWRV9TWVNURU1fSEVBREVSX0RJUiwgMCwgMCwgMCwgMSwgMCB9LAorKyNlbHNlCisrI2RlZmluZSBJTkNMVURFX0RFRkFVTFRTX01VU0xfTkFUSVZFCisrI2VuZGlmCisrCisrI2lmIGRlZmluZWQgKENST1NTX0RJUkVDVE9SWV9TVFJVQ1RVUkUpICYmICFkZWZpbmVkIChUQVJHRVRfU1lTVEVNX1JPT1QpCisrIyB1bmRlZiBJTkNMVURFX0RFRkFVTFRTX01VU0xfTE9DQUwKKysjIGRlZmluZSBJTkNMVURFX0RFRkFVTFRTX01VU0xfTE9DQUwKKysjIHVuZGVmIElOQ0xVREVfREVGQVVMVFNfTVVTTF9OQVRJVkUKKysjIGRlZmluZSBJTkNMVURFX0RFRkFVTFRTX01VU0xfTkFUSVZFCisrI2Vsc2UKKysjIHVuZGVmIElOQ0xVREVfREVGQVVMVFNfTVVTTF9DUk9TUworKyMgZGVmaW5lIElOQ0xVREVfREVGQVVMVFNfTVVTTF9DUk9TUworKyNlbmRpZgorKworKyN1bmRlZiBJTkNMVURFX0RFRkFVTFRTCisrI2RlZmluZSBJTkNMVURFX0RFRkFVTFRTCQkJCVwKKysgIHsJCQkJCQkJXAorKyAgICBJTkNMVURFX0RFRkFVTFRTX01VU0xfR1BQCQkJCVwKKysgICAgSU5DTFVERV9ERUZBVUxUU19NVVNMX1BSRUZJWAkJCVwKKysgICAgSU5DTFVERV9ERUZBVUxUU19NVVNMX0NST1NTCQkJCVwKKysgICAgSU5DTFVERV9ERUZBVUxUU19NVVNMX1RPT0wJCQkJXAorKyAgICBJTkNMVURFX0RFRkFVTFRTX01VU0xfTkFUSVZFCQkJXAorKyAgICB7IEdDQ19JTkNMVURFX0RJUiwgIkdDQyIsIDAsIDEsIDAsIDAgfSwJCVwKKysgICAgeyAwLCAwLCAwLCAwLCAwLCAwIH0JCQkJXAorKyAgfQorKyNlbmRpZgorSW5kZXg6IGdjYy01LjQuMC9nY2MvY29uZmlnL2xpbnV4Lm9wdAorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGdjYy01LjQuMC5vcmlnL2djYy9jb25maWcvbGludXgub3B0CisrKysgZ2NjLTUuNC4wL2djYy9jb25maWcvbGludXgub3B0CitAQCAtMjgsNSArMjgsOSBAQCBUYXJnZXQgUmVwb3J0IFJlamVjdE5lZ2F0aXZlIFZhcihsaW51eF9sCisgVXNlIEdOVSBDIGxpYnJhcnkKKyAKKyBtdWNsaWJjCistVGFyZ2V0IFJlcG9ydCBSZWplY3ROZWdhdGl2ZSBWYXIobGludXhfbGliYyxMSUJDX1VDTElCQykgTmVnYXRpdmUobWJpb25pYykKKytUYXJnZXQgUmVwb3J0IFJlamVjdE5lZ2F0aXZlIFZhcihsaW51eF9saWJjLExJQkNfVUNMSUJDKSBOZWdhdGl2ZShtbXVzbCkKKyBVc2UgdUNsaWJjIEMgbGlicmFyeQorKworK21tdXNsCisrVGFyZ2V0IFJlcG9ydCBSZWplY3ROZWdhdGl2ZSBWYXIobGludXhfbGliYyxMSUJDX01VU0wpIE5lZ2F0aXZlKG1iaW9uaWMpCisrVXNlIG11c2wgQyBsaWJyYXJ5CitJbmRleDogZ2NjLTUuNC4wL2djYy9jb25maWcvcnM2MDAwL3NlY3VyZXBsdC5oCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZ2NjLTUuNC4wLm9yaWcvZ2NjL2NvbmZpZy9yczYwMDAvc2VjdXJlcGx0LmgKKysrKyBnY2MtNS40LjAvZ2NjL2NvbmZpZy9yczYwMDAvc2VjdXJlcGx0LmgKK0BAIC0xOCwzICsxOCw0IEBAIGFsb25nIHdpdGggR0NDOyBzZWUgdGhlIGZpbGUgQ09QWUlORzMuCisgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LiAgKi8KKyAKKyAjZGVmaW5lIENDMV9TRUNVUkVfUExUX0RFRkFVTFRfU1BFQyAiLW1zZWN1cmUtcGx0IgorKyNkZWZpbmUgTElOS19TRUNVUkVfUExUX0RFRkFVTFRfU1BFQyAiLS1zZWN1cmUtcGx0IgorSW5kZXg6IGdjYy01LjQuMC9nY2MvY29uZmlnL3JzNjAwMC9zeXN2NC5oCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZ2NjLTUuNC4wLm9yaWcvZ2NjL2NvbmZpZy9yczYwMDAvc3lzdjQuaAorKysrIGdjYy01LjQuMC9nY2MvY29uZmlnL3JzNjAwMC9zeXN2NC5oCitAQCAtNTM4LDYgKzUzOCwxMCBAQCBFTkRJQU5fU0VMRUNUKCIgLW1iaWciLCAiIC1tbGl0dGxlIiwgREVGCisgI2RlZmluZSBDQzFfU0VDVVJFX1BMVF9ERUZBVUxUX1NQRUMgIiIKKyAjZW5kaWYKKyAKKysjaWZuZGVmIExJTktfU0VDVVJFX1BMVF9ERUZBVUxUX1NQRUMKKysjZGVmaW5lIExJTktfU0VDVVJFX1BMVF9ERUZBVUxUX1NQRUMgIiIKKysjZW5kaWYKKysKKyAvKiBQYXNzIC1HIHh4eCB0byB0aGUgY29tcGlsZXIuICAqLworICN1bmRlZiBDQzFfU1BFQworICNkZWZpbmUJQ0MxX1NQRUMgIiV7Ryp9ICUoY2MxX2NwdSkiIFwKK0BAIC04ODksNiArODkzLDcgQEAgbmNydG4ubyVzIgorICAgeyAibGlua19vc19vcGVuYnNkIiwJCUxJTktfT1NfT1BFTkJTRF9TUEVDIH0sCQkJXAorICAgeyAibGlua19vc19kZWZhdWx0IiwJCUxJTktfT1NfREVGQVVMVF9TUEVDIH0sCQkJXAorICAgeyAiY2MxX3NlY3VyZV9wbHRfZGVmYXVsdCIsCUNDMV9TRUNVUkVfUExUX0RFRkFVTFRfU1BFQyB9LAkJXAorKyAgeyAibGlua19zZWN1cmVfcGx0X2RlZmF1bHQiLAlMSU5LX1NFQ1VSRV9QTFRfREVGQVVMVF9TUEVDIH0sCQlcCisgICB7ICJjcHBfb3NfYWRzIiwJCUNQUF9PU19BRFNfU1BFQyB9LAkJCVwKKyAgIHsgImNwcF9vc195ZWxsb3drbmlmZSIsCUNQUF9PU19ZRUxMT1dLTklGRV9TUEVDIH0sCQlcCisgICB7ICJjcHBfb3NfbXZtZSIsCQlDUFBfT1NfTVZNRV9TUEVDIH0sCQkJXAorSW5kZXg6IGdjYy01LjQuMC9nY2MvZ2luY2x1ZGUvc3RkZGVmLmgKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBnY2MtNS40LjAub3JpZy9nY2MvZ2luY2x1ZGUvc3RkZGVmLmgKKysrKyBnY2MtNS40LjAvZ2NjL2dpbmNsdWRlL3N0ZGRlZi5oCitAQCAtMTg0LDYgKzE4NCw3IEBAIHR5cGVkZWYgX19QVFJESUZGX1RZUEVfXyBwdHJkaWZmX3Q7CisgI2lmbmRlZiBfR0NDX1NJWkVfVAorICNpZm5kZWYgX1NJWkVUXworICNpZm5kZWYgX19zaXplX3QKKysjaWZuZGVmIF9fREVGSU5FRF9zaXplX3QgLyogbXVzbCAqLworICNkZWZpbmUgX19zaXplX3RfXwkvKiBCZU9TICovCisgI2RlZmluZSBfX1NJWkVfVF9fCS8qIENyYXkgVW5pY29zL01rICovCisgI2RlZmluZSBfU0laRV9UCitAQCAtMjAwLDYgKzIwMSw3IEBAIHR5cGVkZWYgX19QVFJESUZGX1RZUEVfXyBwdHJkaWZmX3Q7CisgI2RlZmluZSBfX19pbnRfc2l6ZV90X2gKKyAjZGVmaW5lIF9HQ0NfU0laRV9UCisgI2RlZmluZSBfU0laRVRfCisrI2RlZmluZSBfX0RFRklORURfc2l6ZV90IC8qIG11c2wgKi8KKyAjaWYgKGRlZmluZWQgKF9fRnJlZUJTRF9fKSAmJiAoX19GcmVlQlNEX18gPj0gNSkpIFwKKyAgIHx8IGRlZmluZWQoX19EcmFnb25GbHlfXykgXAorICAgfHwgZGVmaW5lZChfX0ZyZWVCU0Rfa2VybmVsX18pCitAQCAtMjE4LDYgKzIyMCw3IEBAIHR5cGVkZWYgX19TSVpFX1RZUEVfXyBzaXplX3Q7CisgdHlwZWRlZiBsb25nIHNzaXplX3Q7CisgI2VuZGlmIC8qIF9fQkVPU19fICovCisgI2VuZGlmIC8qICEoZGVmaW5lZCAoX19HTlVHX18pICYmIGRlZmluZWQgKHNpemVfdCkpICovCisrI2VuZGlmIC8qIF9fREVGSU5FRF9zaXplX3QgKi8KKyAjZW5kaWYgLyogX19zaXplX3QgKi8KKyAjZW5kaWYgLyogX1NJWkVUXyAqLworICNlbmRpZiAvKiBfR0NDX1NJWkVfVCAqLwpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTUuMy8wMDQ1LVN1cHBvcnQtZm9yLWFybS1saW51eC1tdXNsLnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTUuNC8wMDQ1LVN1cHBvcnQtZm9yLWFybS1saW51eC1tdXNsLnBhdGNoCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNS4zLzAwNDUtU3VwcG9ydC1mb3ItYXJtLWxpbnV4LW11c2wucGF0Y2gKcmVuYW1lIHRvIGltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy01LjQvMDA0NS1TdXBwb3J0LWZvci1hcm0tbGludXgtbXVzbC5wYXRjaApkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTUuMy8wMDQ2LUdldC1yaWQtb2YtZXZlci1icm9rZW4tZml4aW5jbHVkZXMtb24tbXVzbC5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy01LjQvMDA0Ni1HZXQtcmlkLW9mLWV2ZXItYnJva2VuLWZpeGluY2x1ZGVzLW9uLW11c2wucGF0Y2gKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy01LjMvMDA0Ni1HZXQtcmlkLW9mLWV2ZXItYnJva2VuLWZpeGluY2x1ZGVzLW9uLW11c2wucGF0Y2gKcmVuYW1lIHRvIGltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy01LjQvMDA0Ni1HZXQtcmlkLW9mLWV2ZXItYnJva2VuLWZpeGluY2x1ZGVzLW9uLW11c2wucGF0Y2gKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy01LjMvMDA0Ny1uaW9zMi1EZWZpbmUtTVVTTF9EWU5BTUlDX0xJTktFUi5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy01LjQvMDA0Ny1uaW9zMi1EZWZpbmUtTVVTTF9EWU5BTUlDX0xJTktFUi5wYXRjaApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTUuMy8wMDQ3LW5pb3MyLURlZmluZS1NVVNMX0RZTkFNSUNfTElOS0VSLnBhdGNoCnJlbmFtZSB0byBpbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNS40LzAwNDctbmlvczItRGVmaW5lLU1VU0xfRFlOQU1JQ19MSU5LRVIucGF0Y2gKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy01LjMvMDA0OC1zc3Bfbm9uc2hhcmVkLnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTUuNC8wMDQ4LXNzcF9ub25zaGFyZWQucGF0Y2gKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy01LjMvMDA0OC1zc3Bfbm9uc2hhcmVkLnBhdGNoCnJlbmFtZSB0byBpbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNS40LzAwNDgtc3NwX25vbnNoYXJlZC5wYXRjaApkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTUuMy8wMDQ5LURpc2FibGUtdGhlLXdlYWstcmVmZXJlbmNlLWxvZ2ljLWluLWd0aHIuaC1mb3Itb3MtZ2UucGF0Y2ggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNS40LzAwNDktRGlzYWJsZS10aGUtd2Vhay1yZWZlcmVuY2UtbG9naWMtaW4tZ3Roci5oLWZvci1vcy1nZS5wYXRjaApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTUuMy8wMDQ5LURpc2FibGUtdGhlLXdlYWstcmVmZXJlbmNlLWxvZ2ljLWluLWd0aHIuaC1mb3Itb3MtZ2UucGF0Y2gKcmVuYW1lIHRvIGltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy01LjQvMDA0OS1EaXNhYmxlLXRoZS13ZWFrLXJlZmVyZW5jZS1sb2dpYy1pbi1ndGhyLmgtZm9yLW9zLWdlLnBhdGNoCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNS4zLzAwNTAtcG93ZXJwYy1wYXNzLXNlY3VyZS1wbHQtdG8tdGhlLWxpbmtlci5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy01LjQvMDA1MC1wb3dlcnBjLXBhc3Mtc2VjdXJlLXBsdC10by10aGUtbGlua2VyLnBhdGNoCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNS4zLzAwNTAtcG93ZXJwYy1wYXNzLXNlY3VyZS1wbHQtdG8tdGhlLWxpbmtlci5wYXRjaApyZW5hbWUgdG8gaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTUuNC8wMDUwLXBvd2VycGMtcGFzcy1zZWN1cmUtcGx0LXRvLXRoZS1saW5rZXIucGF0Y2gKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy01LjMvMDA1MS1JZ25vcmUtZmRlYnVnLXByZWZpeC1tYXAtaW4tcHJvZHVjZXItc3RyaW5nLWJ5LURhbmllLnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTUuNC8wMDUxLUlnbm9yZS1mZGVidWctcHJlZml4LW1hcC1pbi1wcm9kdWNlci1zdHJpbmctYnktRGFuaWUucGF0Y2gKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy01LjMvMDA1MS1JZ25vcmUtZmRlYnVnLXByZWZpeC1tYXAtaW4tcHJvZHVjZXItc3RyaW5nLWJ5LURhbmllLnBhdGNoCnJlbmFtZSB0byBpbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNS40LzAwNTEtSWdub3JlLWZkZWJ1Zy1wcmVmaXgtbWFwLWluLXByb2R1Y2VyLXN0cmluZy1ieS1EYW5pZS5wYXRjaApkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTUuMy8wMDUyLW5pb3MyLXVzZS1yZXQtd2l0aC1yMzEucGF0Y2ggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNS40LzAwNTItbmlvczItdXNlLXJldC13aXRoLXIzMS5wYXRjaApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTUuMy8wMDUyLW5pb3MyLXVzZS1yZXQtd2l0aC1yMzEucGF0Y2gKcmVuYW1lIHRvIGltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy01LjQvMDA1Mi1uaW9zMi11c2UtcmV0LXdpdGgtcjMxLnBhdGNoCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNS4zLzAwNTMtZXhwci5jLVBSLXRhcmdldC02NTM1OC1Bdm9pZC1jbG9iYmVyaW5nLXBhcnRpYWwtYXJndS5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy01LjQvMDA1My1leHByLmMtUFItdGFyZ2V0LTY1MzU4LUF2b2lkLWNsb2JiZXJpbmctcGFydGlhbC1hcmd1LnBhdGNoCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNS4zLzAwNTMtZXhwci5jLVBSLXRhcmdldC02NTM1OC1Bdm9pZC1jbG9iYmVyaW5nLXBhcnRpYWwtYXJndS5wYXRjaApyZW5hbWUgdG8gaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTUuNC8wMDUzLWV4cHIuYy1QUi10YXJnZXQtNjUzNTgtQXZvaWQtY2xvYmJlcmluZy1wYXJ0aWFsLWFyZ3UucGF0Y2gKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy01LjMvMDA1NC1zdXBwb3J0LWZmaWxlLXByZWZpeC1tYXAucGF0Y2ggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNS40LzAwNTQtc3VwcG9ydC1mZmlsZS1wcmVmaXgtbWFwLnBhdGNoCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNS4zLzAwNTQtc3VwcG9ydC1mZmlsZS1wcmVmaXgtbWFwLnBhdGNoCnJlbmFtZSB0byBpbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNS40LzAwNTQtc3VwcG9ydC1mZmlsZS1wcmVmaXgtbWFwLnBhdGNoCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNS4zLzAwNTUtUmV1c2UtZmRlYnVnLXByZWZpeC1tYXAtdG8tcmVwbGFjZS1mZmlsZS1wcmVmaXgtbWFwLnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTUuNC8wMDU1LVJldXNlLWZkZWJ1Zy1wcmVmaXgtbWFwLXRvLXJlcGxhY2UtZmZpbGUtcHJlZml4LW1hcC5wYXRjaApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTUuMy8wMDU1LVJldXNlLWZkZWJ1Zy1wcmVmaXgtbWFwLXRvLXJlcGxhY2UtZmZpbGUtcHJlZml4LW1hcC5wYXRjaApyZW5hbWUgdG8gaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTUuNC8wMDU1LVJldXNlLWZkZWJ1Zy1wcmVmaXgtbWFwLXRvLXJlcGxhY2UtZmZpbGUtcHJlZml4LW1hcC5wYXRjaApkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTUuMy8wMDU2LUVuYWJsZS1saWJjLXByb3ZpZGUtc3NwLWFuZC1nY2NfY3ZfdGFyZ2V0X2RsX2l0ZXJhdGUucGF0Y2ggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNS40LzAwNTYtRW5hYmxlLWxpYmMtcHJvdmlkZS1zc3AtYW5kLWdjY19jdl90YXJnZXRfZGxfaXRlcmF0ZS5wYXRjaApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTUuMy8wMDU2LUVuYWJsZS1saWJjLXByb3ZpZGUtc3NwLWFuZC1nY2NfY3ZfdGFyZ2V0X2RsX2l0ZXJhdGUucGF0Y2gKcmVuYW1lIHRvIGltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy01LjQvMDA1Ni1FbmFibGUtbGliYy1wcm92aWRlLXNzcC1hbmQtZ2NjX2N2X3RhcmdldF9kbF9pdGVyYXRlLnBhdGNoCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNS4zLzAwNTctdW53aW5kLWZpeC1mb3ItbXVzbC5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy01LjQvMDA1Ny11bndpbmQtZml4LWZvci1tdXNsLnBhdGNoCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNS4zLzAwNTctdW53aW5kLWZpeC1mb3ItbXVzbC5wYXRjaApyZW5hbWUgdG8gaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTUuNC8wMDU3LXVud2luZC1maXgtZm9yLW11c2wucGF0Y2gKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy01LjMvMDA1OC1mZGVidWctcHJlZml4LW1hcC1zdXBwb3J0LXRvLXJlbWFwLXJlbGF0aXZlLXBhdGgucGF0Y2ggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNS40LzAwNTgtZmRlYnVnLXByZWZpeC1tYXAtc3VwcG9ydC10by1yZW1hcC1yZWxhdGl2ZS1wYXRoLnBhdGNoCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNS4zLzAwNTgtZmRlYnVnLXByZWZpeC1tYXAtc3VwcG9ydC10by1yZW1hcC1yZWxhdGl2ZS1wYXRoLnBhdGNoCnJlbmFtZSB0byBpbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNS40LzAwNTgtZmRlYnVnLXByZWZpeC1tYXAtc3VwcG9ydC10by1yZW1hcC1yZWxhdGl2ZS1wYXRoLnBhdGNoCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNS40LzAwNTktbGliZ2NjLXVzZS1sZGZsYWdzLnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTUuNC8wMDU5LWxpYmdjYy11c2UtbGRmbGFncy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMjViNzJhCi0tLSAvZGV2L251bGwKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTUuNC8wMDU5LWxpYmdjYy11c2UtbGRmbGFncy5wYXRjaApAQCAtMCwwICsxLDE2IEBACitMaW5rIGxpYmdjYyB1c2luZyBMREZMQUdTLCBub3QganVzdCBTSExJQl9MREZMQUdTCisKK1NpZ25lZC1vZmYtYnk6IENocmlzdG9waGVyIExhcnNvbiA8Y2hyaXNfbGFyc29uQG1lbnRvci5jb20+CitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworLS0tIGdjYy01LjMuMC5vcmlnL2xpYmdjYy9jb25maWcvdC1zbGliZ2NjCisrKysgZ2NjLTUuMy4wL2xpYmdjYy9jb25maWcvdC1zbGliZ2NjCitAQCAtMzIsNyArMzIsNyBAQCBTSExJQl9JTlNUQUxMX1NPTElOSyA9ICQoTE5fUykgJChTSExJQl9TCisgCSQoREVTVERJUikkKHNsaWJkaXIpJChTSExJQl9TTElCRElSX1FVQUwpLyQoU0hMSUJfU09MSU5LKQorIAorIFNITElCX0xJTksgPSAkKENDKSAkKExJQkdDQzJfQ0ZMQUdTKSAtc2hhcmVkIC1ub2RlZmF1bHRsaWJzIFwKKy0JJChTSExJQl9MREZMQUdTKSBcCisrCSQoTERGTEFHUykgJChTSExJQl9MREZMQUdTKSBcCisgCS1vICQoU0hMSUJfRElSKS8kKFNITElCX1NPTkFNRSkudG1wIEBtdWx0aWxpYl9mbGFnc0AgXAorIAkkKFNITElCX09CSlMpICQoU0hMSUJfTEMpICYmIFwKKyAJcm0gLWYgJChTSExJQl9ESVIpLyQoU0hMSUJfU09MSU5LKSAmJiBcCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNi4yLmluYyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy02LjIuaW5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIxMTg5OTUKLS0tIC9kZXYvbnVsbAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNi4yLmluYwpAQCAtMCwwICsxLDEzMyBAQAorcmVxdWlyZSBnY2MtY29tbW9uLmluYworCisjIFRoaXJkIGRpZ2l0IGluIFBWIHNob3VsZCBiZSBpbmNyZW1lbnRlZCBhZnRlciBhIG1pbm9yIHJlbGVhc2UKKworUFYgPSAiNi4yLjAiCisKKyMgQklOViBzaG91bGQgYmUgaW5jcmVtZW50ZWQgdG8gYSByZXZpc2lvbiBhZnRlciBhIG1pbm9yIGdjYyByZWxlYXNlCisKK0JJTlYgPSAiNi4yLjAiCisKK0ZJTEVTRVhUUkFQQVRIUyA9LiAiJHtGSUxFX0RJUk5BTUV9L2djYy02LjI6JHtGSUxFX0RJUk5BTUV9L2djYy02LjIvYmFja3BvcnQ6IgorCitERVBFTkRTID0rICJtcGZyIGdtcCBsaWJtcGMgemxpYiIKK05BVElWRURFUFMgPSAibXBmci1uYXRpdmUgZ21wLW5hdGl2ZSBsaWJtcGMtbmF0aXZlIHpsaWItbmF0aXZlIgorCitMSUNFTlNFID0gIkdQTC0zLjAtd2l0aC1HQ0MtZXhjZXB0aW9uICYgR1BMdjMiCisKK0xJQ19GSUxFU19DSEtTVU0gPSAiXAorICAgIGZpbGU6Ly9DT1BZSU5HO21kNT01OTUzMGJkZjMzNjU5YjI5ZTczZDRhZGI5ZjlmNjU1MiBcCisgICAgZmlsZTovL0NPUFlJTkczO21kNT1kMzIyMzliY2I2NzM0NjNhYjg3NGU4MGQ0N2ZhZTUwNCBcCisgICAgZmlsZTovL0NPUFlJTkczLkxJQjttZDU9NmE2YThlMDIwODM4YjIzNDA2YzgxYjE5YzFkNDZkZjYgXAorICAgIGZpbGU6Ly9DT1BZSU5HLkxJQjttZDU9MmQ1MDI1ZDRhYTM0OTViZWZlZjhmMTcyMDZhNWIwYTEgXAorICAgIGZpbGU6Ly9DT1BZSU5HLlJVTlRJTUU7bWQ1PWZlNjBkODcwNDg1NjdkNGZlOGM4YTBlZDI0NDhiY2M4IFwKKyIKKworCitCQVNFVVJJID89ICIke0dOVV9NSVJST1J9L2djYy9nY2MtJHtQVn0vZ2NjLSR7UFZ9LnRhci5iejIiCisjU1JDUkVWID0gImJkOWE4MjZkNTQ0OGRiMTFkMjlkMmVjNTg4NGU3ZTY3OTA2NmYxNDAiCisjQkFTRVVSSSA/PSAiZ2l0Oi8vZ2l0aHViLmNvbS9nY2MtbWlycm9yL2djYzticmFuY2g9Z2NjLTYtYnJhbmNoO3Byb3RvY29sPWdpdCIKKyNCQVNFVVJJID89ICJmdHA6Ly9zb3VyY2V3YXJlLm9yZy9wdWIvZ2NjL3NuYXBzaG90cy82LjIuMC1SQy0yMDE2MDgxNS9nY2MtNi4yLjAtUkMtMjAxNjA4MTUudGFyLmJ6MiIKKworU1JDX1VSSSA9ICJcCisgICAgICAgICAgICR7QkFTRVVSSX0gXAorICAgICAgICAgICBmaWxlOi8vMDAwMS1nY2MtNC4zLjEtQVJDSF9GTEFHU19GT1JfVEFSR0VULnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovLzAwMDItdWNsaWJjLWNvbmYucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vMDAwMy1nY2MtdWNsaWJjLWxvY2FsZS1jdHlwZV90b3VwbG93X3QucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vMDAwNC11Y2xpYmMtbG9jYWxlLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovLzAwMDUtdWNsaWJjLWxvY2FsZS1ub19feC5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly8wMDA2LXVjbGliYy1sb2NhbGUtd2NoYXJfZml4LnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovLzAwMDctdWNsaWJjLWxvY2FsZS11cGRhdGUucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vMDAwOC1taXNzaW5nLWV4ZWNpbmZvX2gucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vMDAwOS1jOTktc25wcmludGYucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vMDAxMC1nY2MtcG9pc29uLXN5c3RlbS1kaXJlY3Rvcmllcy5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly8wMDExLWdjYy1wb2lzb24tZGlyLWV4dGVuZC5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly8wMDEyLWdjYy00LjMuMy1TWVNST09UX0NGTEFHU19GT1JfVEFSR0VULnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovLzAwMTMtNjQtYml0LW11bHRpbGliLWhhY2sucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vMDAxNC1vcHRpb25hbC1saWJzdGRjLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovLzAwMTUtZ2NjLWRpc2FibGUtTUFTS19SRUxBWF9QSUNfQ0FMTFMtYml0LnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovLzAwMTYtQ09MTEVDVF9HQ0NfT1BUSU9OUy5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly8wMDE3LVVzZS10aGUtZGVmYXVsdHMuaC1pbi1CLWluc3RlYWQtb2YtUy1hbmQtdC1vZS1pbi1CLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovLzAwMTgtZm9ydHJhbi1jcm9zcy1jb21waWxlLWhhY2sucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vMDAxOS1jcHAtaG9ub3Itc3lzcm9vdC5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly8wMDIwLU1JUFM2NC1EZWZhdWx0LXRvLU42NC1BQkkucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vMDAyMS1EZWZpbmUtR0xJQkNfRFlOQU1JQ19MSU5LRVItYW5kLVVDTElCQ19EWU5BTUlDX0xJTktFLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovLzAwMjItZ2NjLUZpeC1hcmd1bWVudC1saXN0LXRvby1sb25nLWVycm9yLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovLzAwMjMtRGlzYWJsZS1zZHQucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vMDAyNC1saWJ0b29sLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovLzAwMjUtZ2NjLWFybXY0LXBhc3MtZml4LXY0YngtdG8tbGlua2VyLXRvLXN1cHBvcnQtRUFCSS5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly8wMDI2LVVzZS10aGUtbXVsdGlsaWItY29uZmlnLWZpbGVzLWZyb20tQi1pbnN0ZWFkLW9mLXVzaW4ucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vMDAyNy1Bdm9pZC11c2luZy1saWJkaXItZnJvbS0ubGEtd2hpY2gtdXN1YWxseS1wb2ludHMtdG8tLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovLzAwMjgtZXhwb3J0LUNQUC5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly8wMDI5LUVuYWJsZS1TUEUtQWx0aVZlYy1nZW5lcmF0aW9uLW9uLXBvd2VwYy1saW51eC10YXJnZXQucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vMDAzMC1EaXNhYmxlLXRoZS1NVUxUSUxJQl9PU0RJUk5BTUVTLWFuZC1vdGhlci1tdWx0aWxpYi1vLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovLzAwMzEtRW5zdXJlLXRhcmdldC1nY2MtaGVhZGVycy1jYW4tYmUtaW5jbHVkZWQucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vMDAzMi1nY2MtNC44LXdvbi10LWJ1aWxkLXdpdGgtZGlzYWJsZS1kZXBlbmRlbmN5LXRyYWNraW5nLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovLzAwMzMtRG9uLXQtc2VhcmNoLWhvc3QtZGlyZWN0b3J5LWR1cmluZy1yZWxpbmstaWYtaW5zdF9wci5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly8wMDM0LVVzZS1TWVNURU1MSUJTX0RJUi1yZXBsYWNlbWVudC1pbnN0ZWFkLW9mLWhhcmRjb2RpbmcucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vMDAzNS1hYXJjaDY0LUFkZC1zdXBwb3J0LWZvci1tdXNsLWxkc28ucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vMDAzNi1saWJjYzEtZml4LWxpYmNjMS1zLWluc3RhbGwtcGF0aC1hbmQtcnBhdGgucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vMDAzNy1oYW5kbGUtc3lzcm9vdC1zdXBwb3J0LWZvci1uYXRpdmVzZGstZ2NjLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovLzAwMzgtU2VhcmNoLXRhcmdldC1zeXNyb290LWdjYy12ZXJzaW9uLXNwZWNpZmljLWRpcnMtd2l0aC5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly8wMDM5LUZpeC12YXJpb3VzLV9GT1JfQlVJTEQtYW5kLXJlbGF0ZWQtdmFyaWFibGVzLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovLzAwNDAtbmlvczItRGVmaW5lLU1VU0xfRFlOQU1JQ19MSU5LRVIucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vMDA0MS1zc3Bfbm9uc2hhcmVkLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovLzAwNDItZ2NjLWxpYmNwcC1zdXBwb3J0LWZmaWxlLXByZWZpeC1tYXAtb2xkLW5ldy5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly8wMDQzLVJldXNlLWZkZWJ1Zy1wcmVmaXgtbWFwLXRvLXJlcGxhY2UtZmZpbGUtcHJlZml4LW1hcC5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly8wMDQ0LWdjYy1maW5hbC5jLWZkZWJ1Zy1wcmVmaXgtbWFwLXN1cHBvcnQtdG8tcmVtYXAtc291cmMucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vMDA0NS1saWJnY2MtQWRkLWtub2ItdG8tdXNlLWxkYmwtMTI4LW9uLXBwYy5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly8wMDQ2LUxpbmstbGliZ2NjLXVzaW5nLUxERkxBR1Mtbm90LWp1c3QtU0hMSUJfTERGTEFHUy5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly8wMDQ3LWxpYmdjY19zLVVzZS1hbGlhcy1mb3ItX19jcHVfaW5kaWNhdG9yX2luaXQtaW5zdGVhZC0ucGF0Y2ggXAorICAgICAgICAgICAke0JBQ0tQT1JUU30gXAorIgorQkFDS1BPUlRTID0gIiIKKworU1JDX1VSSVttZDVzdW1dID0gIjk3Njg2MjUxNTk2NjNiMzAwYWU0ZGUyZjQ3NDVmY2M0IgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjk5NDQ1ODlmYzcyMmQzZTY2MzA4YzBjZTUyNTc3ODhlYmQ3ODcyOTgyYTcxOGFhMjUxNjEyMzk0MDY3MWI3YzUiCisKK1MgPSAiJHtUTVBESVJ9L3dvcmstc2hhcmVkL2djYy0ke1BWfS0ke1BSfS9nY2MtJHtQVn0iCisjUyA9ICIke1RNUERJUn0vd29yay1zaGFyZWQvZ2NjLSR7UFZ9LSR7UFJ9L2dpdCIKK0IgPSAiJHtXT1JLRElSfS9nY2MtJHtQVn0vYnVpbGQuJHtIT1NUX1NZU30uJHtUQVJHRVRfU1lTfSIKKworIyBMYW5ndWFnZSBPdmVycmlkZXMKK0ZPUlRSQU4gPSAiIgorSkFWQSA9ICIiCisKK0xUTyA9ICItLWVuYWJsZS1sdG8iCisKK0VYVFJBX09FQ09ORl9CQVNFID0gIlwKKyAgICAke0xUT30gXAorICAgIC0tZW5hYmxlLWxpYnNzcCBcCisgICAgLS1lbmFibGUtbGliaXRtIFwKKyAgICAtLWRpc2FibGUtYm9vdHN0cmFwIFwKKyAgICAtLWRpc2FibGUtbGlibXVkZmxhcCBcCisgICAgLS13aXRoLXN5c3RlbS16bGliIFwKKyAgICAtLXdpdGgtbGlua2VyLWhhc2gtc3R5bGU9JHtMSU5LRVJfSEFTSF9TVFlMRX0gXAorICAgIC0tZW5hYmxlLWxpbmtlci1idWlsZC1pZCBcCisgICAgLS13aXRoLXBwbD1ubyBcCisgICAgLS13aXRoLWNsb29nPW5vIFwKKyAgICAtLWVuYWJsZS1jaGVja2luZz1yZWxlYXNlIFwKKyAgICAtLWVuYWJsZS1jaGVhZGVycz1jX2dsb2JhbCBcCisgICAgLS13aXRob3V0LWlzbCBcCisiCisKK0VYVFJBX09FQ09ORl9JTklUSUFMID0gIlwKKyAgICAtLWRpc2FibGUtbGlibXVkZmxhcCBcCisgICAgLS1kaXNhYmxlLWxpYmdvbXAgXAorICAgIC0tZGlzYWJsZS1saWJpdG0gXAorICAgIC0tZGlzYWJsZS1saWJxdWFkbWF0aCBcCisgICAgLS13aXRoLXN5c3RlbS16bGliIFwKKyAgICAtLWRpc2FibGUtbHRvIFwKKyAgICAtLWRpc2FibGUtcGx1Z2luIFwKKyAgICAtLWVuYWJsZS1kZWNpbWFsLWZsb2F0PW5vIFwKKyAgICAtLXdpdGhvdXQtaXNsIFwKKyAgICBnY2NfY3ZfbGliY19wcm92aWRlc19zc3A9eWVzIFwKKyIKKworRVhUUkFfT0VDT05GX2FwcGVuZF9saWJjLXVjbGliYyA9ICIgLS1kaXNhYmxlLWRlY2ltYWwtZmxvYXQgIgorCitFWFRSQV9PRUNPTkZfUEFUSFMgPSAiXAorICAgIC0td2l0aC1neHgtaW5jbHVkZS1kaXI9L25vdC9leGlzdHt0YXJnZXRfaW5jbHVkZWRpcn0vYysrLyR7QklOVn0gXAorICAgIC0td2l0aC1zeXNyb290PS9ub3QvZXhpc3QgXAorICAgIC0td2l0aC1idWlsZC1zeXNyb290PSR7U1RBR0lOR19ESVJfVEFSR0VUfSBcCisiCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNi4yLzAwMDEtZ2NjLTQuMy4xLUFSQ0hfRkxBR1NfRk9SX1RBUkdFVC5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy02LjIvMDAwMS1nY2MtNC4zLjEtQVJDSF9GTEFHU19GT1JfVEFSR0VULnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQxNWYwOTEKLS0tIC9kZXYvbnVsbAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNi4yLzAwMDEtZ2NjLTQuMy4xLUFSQ0hfRkxBR1NfRk9SX1RBUkdFVC5wYXRjaApAQCAtMCwwICsxLDQyIEBACitGcm9tIDkyZWQzMGRhMTZiNzQ4N2IzMzRmNzM5YmUxNzdlYjM5ODg1YWI3NzIgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorRGF0ZTogRnJpLCAyOSBNYXIgMjAxMyAwODozNzoxMSArMDQwMAorU3ViamVjdDogW1BBVENIIDAxLzQ2XSBnY2MtNC4zLjE6IEFSQ0hfRkxBR1NfRk9SX1RBUkdFVAorCitTaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorCitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW2VtYmVkZGVkIHNwZWNpZmljXQorLS0tCisgY29uZmlndXJlICAgIHwgMiArLQorIGNvbmZpZ3VyZS5hYyB8IDIgKy0KKyAyIGZpbGVzIGNoYW5nZWQsIDIgaW5zZXJ0aW9ucygrKSwgMiBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL2NvbmZpZ3VyZSBiL2NvbmZpZ3VyZQoraW5kZXggMzVmMjMxZS4uYmZhZGMzMyAxMDA3NTUKKy0tLSBhL2NvbmZpZ3VyZQorKysrIGIvY29uZmlndXJlCitAQCAtNzU1MCw3ICs3NTUwLDcgQEAgZmkKKyAjIGZvciB0YXJnZXRfYWxpYXMgYW5kIGdjYyBkb2Vzbid0IG1hbmFnZSBpdCBjb25zaXN0ZW50bHkuCisgdGFyZ2V0X2NvbmZpZ2FyZ3M9Ii0tY2FjaGUtZmlsZT0uL2NvbmZpZy5jYWNoZSAke3RhcmdldF9jb25maWdhcmdzfSIKKyAKKy1GTEFHU19GT1JfVEFSR0VUPQorK0ZMQUdTX0ZPUl9UQVJHRVQ9IiRBUkNIX0ZMQUdTX0ZPUl9UQVJHRVQiCisgY2FzZSAiICR0YXJnZXRfY29uZmlnZGlycyAiIGluCisgICoiIG5ld2xpYiAiKikKKyAgIGNhc2UgIiAkdGFyZ2V0X2NvbmZpZ2FyZ3MgIiBpbgorZGlmZiAtLWdpdCBhL2NvbmZpZ3VyZS5hYyBiL2NvbmZpZ3VyZS5hYworaW5kZXggNzRiZjU4YS4uMTk3ZDYxYiAxMDA2NDQKKy0tLSBhL2NvbmZpZ3VyZS5hYworKysrIGIvY29uZmlndXJlLmFjCitAQCAtMzE0OSw3ICszMTQ5LDcgQEAgZmkKKyAjIGZvciB0YXJnZXRfYWxpYXMgYW5kIGdjYyBkb2Vzbid0IG1hbmFnZSBpdCBjb25zaXN0ZW50bHkuCisgdGFyZ2V0X2NvbmZpZ2FyZ3M9Ii0tY2FjaGUtZmlsZT0uL2NvbmZpZy5jYWNoZSAke3RhcmdldF9jb25maWdhcmdzfSIKKyAKKy1GTEFHU19GT1JfVEFSR0VUPQorK0ZMQUdTX0ZPUl9UQVJHRVQ9IiRBUkNIX0ZMQUdTX0ZPUl9UQVJHRVQiCisgY2FzZSAiICR0YXJnZXRfY29uZmlnZGlycyAiIGluCisgICoiIG5ld2xpYiAiKikKKyAgIGNhc2UgIiAkdGFyZ2V0X2NvbmZpZ2FyZ3MgIiBpbgorLS0gCisyLjguMgorCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNi4yLzAwMDItdWNsaWJjLWNvbmYucGF0Y2ggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNi4yLzAwMDItdWNsaWJjLWNvbmYucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGQyODRlZgotLS0gL2Rldi9udWxsCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy02LjIvMDAwMi11Y2xpYmMtY29uZi5wYXRjaApAQCAtMCwwICsxLDUzIEBACitGcm9tIDRlZmM1YTI1OGM4MTI4NzU3NDM2NDdkNzU2Zjc1YzkzYzRkNTE0YTUgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorRGF0ZTogRnJpLCAyOSBNYXIgMjAxMyAwODozODoyNSArMDQwMAorU3ViamVjdDogW1BBVENIIDAyLzQ2XSB1Y2xpYmMtY29uZgorCitTaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKy0tLQorIGNvbnRyaWIvcmVncmVzc2lvbi9vYmpzLWdjYy5zaCB8IDQgKysrKworIGxpYmphdmEvY2xhc3NwYXRoL2x0Y29uZmlnICAgICB8IDQgKystLQorIDIgZmlsZXMgY2hhbmdlZCwgNiBpbnNlcnRpb25zKCspLCAyIGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvY29udHJpYi9yZWdyZXNzaW9uL29ianMtZ2NjLnNoIGIvY29udHJpYi9yZWdyZXNzaW9uL29ianMtZ2NjLnNoCitpbmRleCA2MGIwNDk3Li42ZGM3ZWFkIDEwMDc1NQorLS0tIGEvY29udHJpYi9yZWdyZXNzaW9uL29ianMtZ2NjLnNoCisrKysgYi9jb250cmliL3JlZ3Jlc3Npb24vb2Jqcy1nY2Muc2gKK0BAIC0xMDYsNiArMTA2LDEwIEBAIGlmIFsgJEhfUkVBTF9UQVJHRVQgPSAkSF9SRUFMX0hPU1QgLWEgJEhfUkVBTF9UQVJHRVQgPSBpNjg2LXBjLWxpbnV4LWdudSBdCisgIHRoZW4KKyAgIG1ha2UgYWxsLWdkYiBhbGwtZGVqYWdudSBhbGwtbGQgfHwgZXhpdCAxCisgICBtYWtlIGluc3RhbGwtZ2RiIGluc3RhbGwtZGVqYWdudSBpbnN0YWxsLWxkIHx8IGV4aXQgMQorK2VsaWYgWyAkSF9SRUFMX1RBUkdFVCA9ICRIX1JFQUxfSE9TVCAtYSAkSF9SRUFMX1RBUkdFVCA9IGk2ODYtcGMtbGludXgtdWNsaWJjIF0KKysgdGhlbgorKyAgbWFrZSBhbGwtZ2RiIGFsbC1kZWphZ251IGFsbC1sZCB8fCBleGl0IDEKKysgIG1ha2UgaW5zdGFsbC1nZGIgaW5zdGFsbC1kZWphZ251IGluc3RhbGwtbGQgfHwgZXhpdCAxCisgZWxpZiBbICRIX1JFQUxfVEFSR0VUID0gJEhfUkVBTF9IT1NUIF0gOyB0aGVuCisgICBtYWtlIGJvb3RzdHJhcCB8fCBleGl0IDEKKyAgIG1ha2UgaW5zdGFsbCB8fCBleGl0IDEKK2RpZmYgLS1naXQgYS9saWJqYXZhL2NsYXNzcGF0aC9sdGNvbmZpZyBiL2xpYmphdmEvY2xhc3NwYXRoL2x0Y29uZmlnCitpbmRleCBkMzE4OTU3Li5kZjU1OTUwIDEwMDc1NQorLS0tIGEvbGliamF2YS9jbGFzc3BhdGgvbHRjb25maWcKKysrKyBiL2xpYmphdmEvY2xhc3NwYXRoL2x0Y29uZmlnCitAQCAtNjAzLDcgKzYwMyw3IEBAIGhvc3Rfb3M9YGVjaG8gJGhvc3QgfCBzZWQgJ3MvXlwoW14tXSpcKS1cKFteLV0qXCktXCguKlwpJC9cMy8nYAorIAorICMgVHJhbnNmb3JtIGxpbnV4KiB0byAqLSotbGludXgtZ251KiwgdG8gc3VwcG9ydCBvbGQgY29uZmlndXJlIHNjcmlwdHMuCisgY2FzZSAkaG9zdF9vcyBpbgorLWxpbnV4LWdudSopIDs7CisrbGludXgtZ251KnxsaW51eC11Y2xpYmMqKSA7OworIGxpbnV4KikgaG9zdD1gZWNobyAkaG9zdCB8IHNlZCAncy9eXCguKi0uKi1saW51eFwpXCguKlwpJC9cMS1nbnVcMi8nYAorIGVzYWMKKyAKK0BAIC0xMjQ3LDcgKzEyNDcsNyBAQCBsaW51eC1nbnVvbGRsZCogfCBsaW51eC1nbnVhb3V0KiB8IGxpbnV4LWdudWNvZmYqKQorICAgOzsKKyAKKyAjIFRoaXMgbXVzdCBiZSBMaW51eCBFTEYuCistbGludXgtZ251KikKKytsaW51eCopCisgICB2ZXJzaW9uX3R5cGU9bGludXgKKyAgIG5lZWRfbGliX3ByZWZpeD1ubworICAgbmVlZF92ZXJzaW9uPW5vCistLSAKKzIuOC4yCisKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy02LjIvMDAwMy1nY2MtdWNsaWJjLWxvY2FsZS1jdHlwZV90b3VwbG93X3QucGF0Y2ggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNi4yLzAwMDMtZ2NjLXVjbGliYy1sb2NhbGUtY3R5cGVfdG91cGxvd190LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRmMDdmZWIKLS0tIC9kZXYvbnVsbAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNi4yLzAwMDMtZ2NjLXVjbGliYy1sb2NhbGUtY3R5cGVfdG91cGxvd190LnBhdGNoCkBAIC0wLDAgKzEsODcgQEAKK0Zyb20gYWQ1ZmQyODNmYzdlZjA0ZjY2YzdmYjAwMzgwNTM2NGVhM2JkMzRlOSBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CitEYXRlOiBGcmksIDI5IE1hciAyMDEzIDA4OjQwOjEyICswNDAwCitTdWJqZWN0OiBbUEFUQ0ggMDMvNDZdIGdjYy11Y2xpYmMtbG9jYWxlLWN0eXBlX3RvdXBsb3dfdAorCitTaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKy0tLQorIGxpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL2dlbmVyaWMvY19sb2NhbGUuY2MgfCA1ICsrKysrCisgbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvZ2VuZXJpYy9jX2xvY2FsZS5oICB8IDkgKysrKysrKysrCisgbGlic3RkYysrLXYzL2NvbmZpZy9vcy9nbnUtbGludXgvY3R5cGVfYmFzZS5oICB8IDkgKysrKysrKysrCisgMyBmaWxlcyBjaGFuZ2VkLCAyMyBpbnNlcnRpb25zKCspCisKK2RpZmYgLS1naXQgYS9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS9nZW5lcmljL2NfbG9jYWxlLmNjIGIvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvZ2VuZXJpYy9jX2xvY2FsZS5jYworaW5kZXggZWY2Y2U4Zi4uNDc0MDYzNiAxMDA2NDQKKy0tLSBhL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL2dlbmVyaWMvY19sb2NhbGUuY2MKKysrKyBiL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL2dlbmVyaWMvY19sb2NhbGUuY2MKK0BAIC0yNzMsNSArMjczLDEwIEBAIF9HTElCQ1hYX0VORF9OQU1FU1BBQ0VfVkVSU0lPTgorICNpZmRlZiBfR0xJQkNYWF9MT05HX0RPVUJMRV9DT01QQVQKKyAjZGVmaW5lIF9HTElCQ1hYX0xEQkxfQ09NUEFUKGRibCwgbGRibCkgXAorICAgZXh0ZXJuICJDIiB2b2lkIGxkYmwgKHZvaWQpIF9fYXR0cmlidXRlX18gKChhbGlhcyAoI2RibCkpKQorKyNpZmRlZiBfX1VDTElCQ19fCisrLy8gVGhpcyBpcyBiZWNhdXNlIF9fY19sb2NhbGUgaXMgb2YgdHlwZSBfX2N0eXBlX3RvdXBsb3dfdCogd2hpY2ggaXMgc2hvcnQgb24gdWNsaWJjLiBmb3IgZ2xpYmMgaXRzIGludCoKKytfR0xJQkNYWF9MREJMX0NPTVBBVChfWlN0MTRfX2NvbnZlcnRfdG9fdklkRXZQS2NSVF9SU3QxMl9Jb3NfSW9zdGF0ZVJLUHMsIF9aU3QxNF9fY29udmVydF90b192SWVFdlBLY1JUX1JTdDEyX0lvc19Jb3N0YXRlUktQcyk7CisrI2Vsc2UKKyBfR0xJQkNYWF9MREJMX0NPTVBBVChfWlN0MTRfX2NvbnZlcnRfdG9fdklkRXZQS2NSVF9SU3QxMl9Jb3NfSW9zdGF0ZVJLUGksIF9aU3QxNF9fY29udmVydF90b192SWVFdlBLY1JUX1JTdDEyX0lvc19Jb3N0YXRlUktQaSk7CisrI2VuZGlmCisgI2VuZGlmIC8vIF9HTElCQ1hYX0xPTkdfRE9VQkxFX0NPTVBBVAorZGlmZiAtLWdpdCBhL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL2dlbmVyaWMvY19sb2NhbGUuaCBiL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL2dlbmVyaWMvY19sb2NhbGUuaAoraW5kZXggNzk0NDcxZS4uZDY1Zjk1NSAxMDA2NDQKKy0tLSBhL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL2dlbmVyaWMvY19sb2NhbGUuaAorKysrIGIvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvZ2VuZXJpYy9jX2xvY2FsZS5oCitAQCAtNDAsMTMgKzQwLDIyIEBACisgCisgI2luY2x1ZGUgPGNsb2NhbGU+CisgCisrI2lmZGVmIF9fVUNMSUJDX18KKysjaW5jbHVkZSA8ZmVhdHVyZXMuaD4KKysjaW5jbHVkZSA8Y3R5cGUuaD4KKysjZW5kaWYKKysKKyAjZGVmaW5lIF9HTElCQ1hYX05VTV9DQVRFR09SSUVTIDAKKyAKKyBuYW1lc3BhY2Ugc3RkIF9HTElCQ1hYX1ZJU0lCSUxJVFkoZGVmYXVsdCkKKyB7CisgX0dMSUJDWFhfQkVHSU5fTkFNRVNQQUNFX1ZFUlNJT04KKyAKKysjaWZkZWYgX19VQ0xJQkNfXworKyAgdHlwZWRlZiBfX2N0eXBlX3RvdXBsb3dfdCoJX19jX2xvY2FsZTsKKysjZWxzZQorICAgdHlwZWRlZiBpbnQqCQkJX19jX2xvY2FsZTsKKysjZW5kaWYKKyAKKyAgIC8vIENvbnZlcnQgbnVtZXJpYyB2YWx1ZSBvZiB0eXBlIGRvdWJsZSBhbmQgbG9uZyBkb3VibGUgdG8gc3RyaW5nIGFuZAorICAgLy8gcmV0dXJuIGxlbmd0aCBvZiBzdHJpbmcuICBJZiB2c25wcmludGYgaXMgYXZhaWxhYmxlIHVzZSBpdCwgb3RoZXJ3aXNlCitkaWZmIC0tZ2l0IGEvbGlic3RkYysrLXYzL2NvbmZpZy9vcy9nbnUtbGludXgvY3R5cGVfYmFzZS5oIGIvbGlic3RkYysrLXYzL2NvbmZpZy9vcy9nbnUtbGludXgvY3R5cGVfYmFzZS5oCitpbmRleCA1OTFjNzkzLi41NWViMGU5IDEwMDY0NAorLS0tIGEvbGlic3RkYysrLXYzL2NvbmZpZy9vcy9nbnUtbGludXgvY3R5cGVfYmFzZS5oCisrKysgYi9saWJzdGRjKystdjMvY29uZmlnL29zL2dudS1saW51eC9jdHlwZV9iYXNlLmgKK0BAIC0zMyw2ICszMywxMSBAQAorIAorIC8vIEluZm9ybWF0aW9uIGFzIGdsZWFuZWQgZnJvbSAvdXNyL2luY2x1ZGUvY3R5cGUuaAorIAorKyNpZmRlZiBfX1VDTElCQ19fCisrI2luY2x1ZGUgPGZlYXR1cmVzLmg+CisrI2luY2x1ZGUgPGN0eXBlLmg+CisrI2VuZGlmCisrCisgbmFtZXNwYWNlIHN0ZCBfR0xJQkNYWF9WSVNJQklMSVRZKGRlZmF1bHQpCisgeworIF9HTElCQ1hYX0JFR0lOX05BTUVTUEFDRV9WRVJTSU9OCitAQCAtNDEsNyArNDYsMTEgQEAgX0dMSUJDWFhfQkVHSU5fTkFNRVNQQUNFX1ZFUlNJT04KKyAgIHN0cnVjdCBjdHlwZV9iYXNlCisgICB7CisgICAgIC8vIE5vbi1zdGFuZGFyZCB0eXBlZGVmcy4KKysjaWZkZWYgX19VQ0xJQkNfXworKyAgICB0eXBlZGVmIGNvbnN0IF9fY3R5cGVfdG91cGxvd190KglfX3RvX3R5cGU7CisrI2Vsc2UKKyAgICAgdHlwZWRlZiBjb25zdCBpbnQqIAkJX190b190eXBlOworKyNlbmRpZgorIAorICAgICAvLyBOQjogT2Zmc2V0cyBpbnRvIGN0eXBlPGNoYXI+OjpfTV90YWJsZSBmb3JjZSBhIHBhcnRpY3VsYXIgc2l6ZQorICAgICAvLyBvbiB0aGUgbWFzayB0eXBlLiBCZWNhdXNlIG9mIHRoaXMsIHdlIGRvbid0IHVzZSBhbiBlbnVtLgorLS0gCisyLjguMgorCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNi4yLzAwMDQtdWNsaWJjLWxvY2FsZS5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy02LjIvMDAwNC11Y2xpYmMtbG9jYWxlLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFlMjYyN2MKLS0tIC9kZXYvbnVsbAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNi4yLzAwMDQtdWNsaWJjLWxvY2FsZS5wYXRjaApAQCAtMCwwICsxLDI4NjIgQEAKK0Zyb20gNjhiZDA4MzM1N2U3ODY3OGE5YmFhYzc2MGJlYjJhMzFmMDA5NTRhNSBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CitEYXRlOiBGcmksIDI5IE1hciAyMDEzIDA4OjQxOjM5ICswNDAwCitTdWJqZWN0OiBbUEFUQ0ggMDQvNDZdIHVjbGliYy1sb2NhbGUKKworU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCistLS0KKyBsaWJzdGRjKystdjMvYWNpbmNsdWRlLm00ICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAzNyArKworIC4uLi9jb25maWcvbG9jYWxlL3VjbGliYy9jKytsb2NhbGVfaW50ZXJuYWwuaCAgICAgIHwgIDYzICsrCisgbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL2NfbG9jYWxlLmNjICAgICAgfCAxNjAgKysrKysKKyBsaWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvY19sb2NhbGUuaCAgICAgICB8IDExNyArKysrCisgLi4uL2NvbmZpZy9sb2NhbGUvdWNsaWJjL2NvZGVjdnRfbWVtYmVycy5jYyAgICAgICAgfCAzMDggKysrKysrKysrCisgLi4uL2NvbmZpZy9sb2NhbGUvdWNsaWJjL2NvbGxhdGVfbWVtYmVycy5jYyAgICAgICAgfCAgODAgKysrCisgbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL2N0eXBlX21lbWJlcnMuY2MgfCAzMDAgKysrKysrKysrCisgLi4uL2NvbmZpZy9sb2NhbGUvdWNsaWJjL21lc3NhZ2VzX21lbWJlcnMuY2MgICAgICAgfCAxMDAgKysrCisgLi4uL2NvbmZpZy9sb2NhbGUvdWNsaWJjL21lc3NhZ2VzX21lbWJlcnMuaCAgICAgICAgfCAxMTggKysrKworIC4uLi9jb25maWcvbG9jYWxlL3VjbGliYy9tb25ldGFyeV9tZW1iZXJzLmNjICAgICAgIHwgNjkyICsrKysrKysrKysrKysrKysrKysrKworIC4uLi9jb25maWcvbG9jYWxlL3VjbGliYy9udW1lcmljX21lbWJlcnMuY2MgICAgICAgIHwgMTYwICsrKysrCisgbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL3RpbWVfbWVtYmVycy5jYyAgfCA0MDYgKysrKysrKysrKysrCisgbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL3RpbWVfbWVtYmVycy5oICAgfCAgNjggKysKKyBsaWJzdGRjKystdjMvY29uZmlndXJlICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICA3NSArKysKKyBsaWJzdGRjKystdjMvaW5jbHVkZS9jX2NvbXBhdGliaWxpdHkvd2NoYXIuaCAgICAgICB8ICAgMiArCisgbGlic3RkYysrLXYzL2luY2x1ZGUvY19zdGQvY3djaGFyICAgICAgICAgICAgICAgICAgfCAgIDIgKworIDE2IGZpbGVzIGNoYW5nZWQsIDI2ODggaW5zZXJ0aW9ucygrKQorIGNyZWF0ZSBtb2RlIDEwMDY0NCBsaWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvYysrbG9jYWxlX2ludGVybmFsLmgKKyBjcmVhdGUgbW9kZSAxMDA2NDQgbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL2NfbG9jYWxlLmNjCisgY3JlYXRlIG1vZGUgMTAwNjQ0IGxpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9jX2xvY2FsZS5oCisgY3JlYXRlIG1vZGUgMTAwNjQ0IGxpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9jb2RlY3Z0X21lbWJlcnMuY2MKKyBjcmVhdGUgbW9kZSAxMDA2NDQgbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL2NvbGxhdGVfbWVtYmVycy5jYworIGNyZWF0ZSBtb2RlIDEwMDY0NCBsaWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvY3R5cGVfbWVtYmVycy5jYworIGNyZWF0ZSBtb2RlIDEwMDY0NCBsaWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvbWVzc2FnZXNfbWVtYmVycy5jYworIGNyZWF0ZSBtb2RlIDEwMDY0NCBsaWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvbWVzc2FnZXNfbWVtYmVycy5oCisgY3JlYXRlIG1vZGUgMTAwNjQ0IGxpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9tb25ldGFyeV9tZW1iZXJzLmNjCisgY3JlYXRlIG1vZGUgMTAwNjQ0IGxpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9udW1lcmljX21lbWJlcnMuY2MKKyBjcmVhdGUgbW9kZSAxMDA2NDQgbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL3RpbWVfbWVtYmVycy5jYworIGNyZWF0ZSBtb2RlIDEwMDY0NCBsaWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvdGltZV9tZW1iZXJzLmgKKworZGlmZiAtLWdpdCBhL2xpYnN0ZGMrKy12My9hY2luY2x1ZGUubTQgYi9saWJzdGRjKystdjMvYWNpbmNsdWRlLm00CitpbmRleCBiMGY4OGNiLi5hMGVlMzZiIDEwMDY0NAorLS0tIGEvbGlic3RkYysrLXYzL2FjaW5jbHVkZS5tNAorKysrIGIvbGlic3RkYysrLXYzL2FjaW5jbHVkZS5tNAorQEAgLTIzNTgsNiArMjM1OCw5IEBAIEFDX0RFRlVOKFtHTElCQ1hYX0VOQUJMRV9DTE9DQUxFXSwgWworICAgIyBEZWZhdWx0IHRvICJnZW5lcmljIi4KKyAgIGlmIHRlc3QgJGVuYWJsZV9jbG9jYWxlX2ZsYWcgPSBhdXRvOyB0aGVuCisgICAgIGNhc2UgJHt0YXJnZXRfb3N9IGluCisrICAgICAgKi11Y2xpYmMqKQorKyAgICAgICAgZW5hYmxlX2Nsb2NhbGVfZmxhZz11Y2xpYmMKKysgICAgICAgIDs7CisgICAgICAgbGludXgqIHwgZ251KiB8IGtmcmVlYnNkKi1nbnUgfCBrbmV0YnNkKi1nbnUpCisgCWVuYWJsZV9jbG9jYWxlX2ZsYWc9Z251CisgCTs7CitAQCAtMjU0Miw2ICsyNTQ1LDQwIEBAIEFDX0RFRlVOKFtHTElCQ1hYX0VOQUJMRV9DTE9DQUxFXSwgWworICAgICAgIENUSU1FX0NDPWNvbmZpZy9sb2NhbGUvZ2VuZXJpYy90aW1lX21lbWJlcnMuY2MKKyAgICAgICBDTE9DQUxFX0lOVEVSTkFMX0g9Y29uZmlnL2xvY2FsZS9nZW5lcmljL2MrK2xvY2FsZV9pbnRlcm5hbC5oCisgICAgICAgOzsKKysgICAgdWNsaWJjKQorKyAgICAgIEFDX01TR19SRVNVTFQodWNsaWJjKQorKworKyAgICAgICMgRGVjbGFyZSBpbnRlbnRpb24gdG8gdXNlIGdldHRleHQsIGFuZCBhZGQgc3VwcG9ydCBmb3Igc3BlY2lmaWMKKysgICAgICAjIGxhbmd1YWdlcy4KKysgICAgICAjIEZvciBzb21lIHJlYXNvbiwgQUxMX0xJTkdVQVMgaGFzIHRvIGJlIGJlZm9yZSBBTS1HTlUtR0VUVEVYVAorKyAgICAgIEFMTF9MSU5HVUFTPSJkZSBmciIKKysKKysgICAgICAjIERvbid0IGNhbGwgQU0tR05VLUdFVFRFWFQgaGVyZS4gSW5zdGVhZCwgYXNzdW1lIGdsaWJjLgorKyAgICAgIEFDX0NIRUNLX1BST0coY2hlY2tfbXNnZm10LCBtc2dmbXQsIHllcywgbm8pCisrICAgICAgaWYgdGVzdCB4IiRjaGVja19tc2dmbXQiID0geCJ5ZXMiICYmIHRlc3QgeCIkZW5hYmxlX25scyIgPSB4InllcyI7IHRoZW4KKysgICAgICAgIFVTRV9OTFM9eWVzCisrICAgICAgZmkKKysgICAgICAjIEV4cG9ydCB0aGUgYnVpbGQgb2JqZWN0cy4KKysgICAgICBmb3IgbGluZyBpbiAkQUxMX0xJTkdVQVM7IGRvIFwKKysgICAgICAgIGdsaWJjeHhfTU9GSUxFUz0iJGdsaWJjeHhfTU9GSUxFUyAkbGluZy5tbyI7IFwKKysgICAgICAgIGdsaWJjeHhfUE9GSUxFUz0iJGdsaWJjeHhfUE9GSUxFUyAkbGluZy5wbyI7IFwKKysgICAgICBkb25lCisrICAgICAgQUNfU1VCU1QoZ2xpYmN4eF9NT0ZJTEVTKQorKyAgICAgIEFDX1NVQlNUKGdsaWJjeHhfUE9GSUxFUykKKysKKysgICAgICBDTE9DQUxFX0g9Y29uZmlnL2xvY2FsZS91Y2xpYmMvY19sb2NhbGUuaAorKyAgICAgIENMT0NBTEVfQ0M9Y29uZmlnL2xvY2FsZS91Y2xpYmMvY19sb2NhbGUuY2MKKysgICAgICBDQ09ERUNWVF9DQz1jb25maWcvbG9jYWxlL3VjbGliYy9jb2RlY3Z0X21lbWJlcnMuY2MKKysgICAgICBDQ09MTEFURV9DQz1jb25maWcvbG9jYWxlL3VjbGliYy9jb2xsYXRlX21lbWJlcnMuY2MKKysgICAgICBDQ1RZUEVfQ0M9Y29uZmlnL2xvY2FsZS91Y2xpYmMvY3R5cGVfbWVtYmVycy5jYworKyAgICAgIENNRVNTQUdFU19IPWNvbmZpZy9sb2NhbGUvdWNsaWJjL21lc3NhZ2VzX21lbWJlcnMuaAorKyAgICAgIENNRVNTQUdFU19DQz1jb25maWcvbG9jYWxlL3VjbGliYy9tZXNzYWdlc19tZW1iZXJzLmNjCisrICAgICAgQ01PTkVZX0NDPWNvbmZpZy9sb2NhbGUvdWNsaWJjL21vbmV0YXJ5X21lbWJlcnMuY2MKKysgICAgICBDTlVNRVJJQ19DQz1jb25maWcvbG9jYWxlL3VjbGliYy9udW1lcmljX21lbWJlcnMuY2MKKysgICAgICBDVElNRV9IPWNvbmZpZy9sb2NhbGUvdWNsaWJjL3RpbWVfbWVtYmVycy5oCisrICAgICAgQ1RJTUVfQ0M9Y29uZmlnL2xvY2FsZS91Y2xpYmMvdGltZV9tZW1iZXJzLmNjCisrICAgICAgQ0xPQ0FMRV9JTlRFUk5BTF9IPWNvbmZpZy9sb2NhbGUvdWNsaWJjL2MrK2xvY2FsZV9pbnRlcm5hbC5oCisrICAgICAgOzsKKyAgIGVzYWMKKyAKKyAgICMgVGhpcyBpcyB3aGVyZSB0aGUgdGVzdHN1aXRlIGxvb2tzIGZvciBsb2NhbGUgY2F0YWxvZ3MsIHVzaW5nIHRoZQorZGlmZiAtLWdpdCBhL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9jKytsb2NhbGVfaW50ZXJuYWwuaCBiL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9jKytsb2NhbGVfaW50ZXJuYWwuaAorbmV3IGZpbGUgbW9kZSAxMDA2NDQKK2luZGV4IDAwMDAwMDAuLjJhZTNlNGEKKy0tLSAvZGV2L251bGwKKysrKyBiL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9jKytsb2NhbGVfaW50ZXJuYWwuaAorQEAgLTAsMCArMSw2MyBAQAorKy8vIFByb3RvdHlwZXMgZm9yIEdMSUJDIHRocmVhZCBsb2NhbGUgX18tcHJlZml4ZWQgZnVuY3Rpb25zIC0qLSBDKysgLSotCisrCisrLy8gQ29weXJpZ2h0IChDKSAyMDAyLCAyMDA0LCAyMDA1IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorKy8vCisrLy8gVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBJU08gQysrIExpYnJhcnkuICBUaGlzIGxpYnJhcnkgaXMgZnJlZQorKy8vIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyIHRoZQorKy8vIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCisrLy8gRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pCisrLy8gYW55IGxhdGVyIHZlcnNpb24uCisrCisrLy8gVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisrLy8gYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKysvLyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisrLy8gR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKysKKysvLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZworKy8vIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy4gIElmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUKKysvLyBTb2Z0d2FyZSBGb3VuZGF0aW9uLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywKKysvLyBVU0EuCisrCisrLy8gQXMgYSBzcGVjaWFsIGV4Y2VwdGlvbiwgeW91IG1heSB1c2UgdGhpcyBmaWxlIGFzIHBhcnQgb2YgYSBmcmVlIHNvZnR3YXJlCisrLy8gbGlicmFyeSB3aXRob3V0IHJlc3RyaWN0aW9uLiAgU3BlY2lmaWNhbGx5LCBpZiBvdGhlciBmaWxlcyBpbnN0YW50aWF0ZQorKy8vIHRlbXBsYXRlcyBvciB1c2UgbWFjcm9zIG9yIGlubGluZSBmdW5jdGlvbnMgZnJvbSB0aGlzIGZpbGUsIG9yIHlvdSBjb21waWxlCisrLy8gdGhpcyBmaWxlIGFuZCBsaW5rIGl0IHdpdGggb3RoZXIgZmlsZXMgdG8gcHJvZHVjZSBhbiBleGVjdXRhYmxlLCB0aGlzCisrLy8gZmlsZSBkb2VzIG5vdCBieSBpdHNlbGYgY2F1c2UgdGhlIHJlc3VsdGluZyBleGVjdXRhYmxlIHRvIGJlIGNvdmVyZWQgYnkKKysvLyB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UuICBUaGlzIGV4Y2VwdGlvbiBkb2VzIG5vdCBob3dldmVyCisrLy8gaW52YWxpZGF0ZSBhbnkgb3RoZXIgcmVhc29ucyB3aHkgdGhlIGV4ZWN1dGFibGUgZmlsZSBtaWdodCBiZSBjb3ZlcmVkIGJ5CisrLy8gdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLgorKworKy8vIFdyaXR0ZW4gYnkgSmFrdWIgSmVsaW5layA8amFrdWJAcmVkaGF0LmNvbT4KKysKKysjaW5jbHVkZSA8Yml0cy9jKytjb25maWcuaD4KKysjaW5jbHVkZSA8Y2xvY2FsZT4KKysKKysjaWZkZWYgX19VQ0xJQkNfTUpOM19PTkxZX18KKysjd2FybmluZyBjbGVhbiB0aGlzIHVwCisrI2VuZGlmCisrCisrI2lmZGVmIF9fVUNMSUJDX0hBU19YTE9DQUxFX18KKysKKytleHRlcm4gIkMiIF9fdHlwZW9mKG5sX2xhbmdpbmZvX2wpIF9fbmxfbGFuZ2luZm9fbDsKKytleHRlcm4gIkMiIF9fdHlwZW9mKHN0cmNvbGxfbCkgX19zdHJjb2xsX2w7CisrZXh0ZXJuICJDIiBfX3R5cGVvZihzdHJmdGltZV9sKSBfX3N0cmZ0aW1lX2w7CisrZXh0ZXJuICJDIiBfX3R5cGVvZihzdHJ0b2RfbCkgX19zdHJ0b2RfbDsKKytleHRlcm4gIkMiIF9fdHlwZW9mKHN0cnRvZl9sKSBfX3N0cnRvZl9sOworK2V4dGVybiAiQyIgX190eXBlb2Yoc3RydG9sZF9sKSBfX3N0cnRvbGRfbDsKKytleHRlcm4gIkMiIF9fdHlwZW9mKHN0cnhmcm1fbCkgX19zdHJ4ZnJtX2w7CisrZXh0ZXJuICJDIiBfX3R5cGVvZihuZXdsb2NhbGUpIF9fbmV3bG9jYWxlOworK2V4dGVybiAiQyIgX190eXBlb2YoZnJlZWxvY2FsZSkgX19mcmVlbG9jYWxlOworK2V4dGVybiAiQyIgX190eXBlb2YoZHVwbG9jYWxlKSBfX2R1cGxvY2FsZTsKKytleHRlcm4gIkMiIF9fdHlwZW9mKHVzZWxvY2FsZSkgX191c2Vsb2NhbGU7CisrCisrI2lmZGVmIF9HTElCQ1hYX1VTRV9XQ0hBUl9UCisrZXh0ZXJuICJDIiBfX3R5cGVvZihpc3djdHlwZV9sKSBfX2lzd2N0eXBlX2w7CisrZXh0ZXJuICJDIiBfX3R5cGVvZih0b3dsb3dlcl9sKSBfX3Rvd2xvd2VyX2w7CisrZXh0ZXJuICJDIiBfX3R5cGVvZih0b3d1cHBlcl9sKSBfX3Rvd3VwcGVyX2w7CisrZXh0ZXJuICJDIiBfX3R5cGVvZih3Y3Njb2xsX2wpIF9fd2NzY29sbF9sOworK2V4dGVybiAiQyIgX190eXBlb2Yod2NzZnRpbWVfbCkgX193Y3NmdGltZV9sOworK2V4dGVybiAiQyIgX190eXBlb2Yod2NzeGZybV9sKSBfX3djc3hmcm1fbDsKKytleHRlcm4gIkMiIF9fdHlwZW9mKHdjdHlwZV9sKSBfX3djdHlwZV9sOworKyNlbmRpZgorKworKyNlbmRpZiAvLyBHTElCQyAyLjMgYW5kIGxhdGVyCitkaWZmIC0tZ2l0IGEvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL2NfbG9jYWxlLmNjIGIvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL2NfbG9jYWxlLmNjCituZXcgZmlsZSBtb2RlIDEwMDY0NAoraW5kZXggMDAwMDAwMC4uNTA4MWRjMQorLS0tIC9kZXYvbnVsbAorKysrIGIvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL2NfbG9jYWxlLmNjCitAQCAtMCwwICsxLDE2MCBAQAorKy8vIFdyYXBwZXIgZm9yIHVuZGVybHlpbmcgQy1sYW5ndWFnZSBsb2NhbGl6YXRpb24gLSotIEMrKyAtKi0KKysKKysvLyBDb3B5cmlnaHQgKEMpIDIwMDEsIDIwMDIsIDIwMDMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisrLy8KKysvLyBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIElTTyBDKysgTGlicmFyeS4gIFRoaXMgbGlicmFyeSBpcyBmcmVlCisrLy8gc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIgdGhlCisrLy8gdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKKysvLyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikKKysvLyBhbnkgbGF0ZXIgdmVyc2lvbi4KKysKKysvLyBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKysvLyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorKy8vIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKysvLyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorKworKy8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCisrLy8gd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLiAgSWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZQorKy8vIFNvZnR3YXJlIEZvdW5kYXRpb24sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LAorKy8vIFVTQS4KKysKKysvLyBBcyBhIHNwZWNpYWwgZXhjZXB0aW9uLCB5b3UgbWF5IHVzZSB0aGlzIGZpbGUgYXMgcGFydCBvZiBhIGZyZWUgc29mdHdhcmUKKysvLyBsaWJyYXJ5IHdpdGhvdXQgcmVzdHJpY3Rpb24uICBTcGVjaWZpY2FsbHksIGlmIG90aGVyIGZpbGVzIGluc3RhbnRpYXRlCisrLy8gdGVtcGxhdGVzIG9yIHVzZSBtYWNyb3Mgb3IgaW5saW5lIGZ1bmN0aW9ucyBmcm9tIHRoaXMgZmlsZSwgb3IgeW91IGNvbXBpbGUKKysvLyB0aGlzIGZpbGUgYW5kIGxpbmsgaXQgd2l0aCBvdGhlciBmaWxlcyB0byBwcm9kdWNlIGFuIGV4ZWN1dGFibGUsIHRoaXMKKysvLyBmaWxlIGRvZXMgbm90IGJ5IGl0c2VsZiBjYXVzZSB0aGUgcmVzdWx0aW5nIGV4ZWN1dGFibGUgdG8gYmUgY292ZXJlZCBieQorKy8vIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4gIFRoaXMgZXhjZXB0aW9uIGRvZXMgbm90IGhvd2V2ZXIKKysvLyBpbnZhbGlkYXRlIGFueSBvdGhlciByZWFzb25zIHdoeSB0aGUgZXhlY3V0YWJsZSBmaWxlIG1pZ2h0IGJlIGNvdmVyZWQgYnkKKysvLyB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UuCisrCisrLy8KKysvLyBJU08gQysrIDE0ODgyOiAyMi44ICBTdGFuZGFyZCBsb2NhbGUgY2F0ZWdvcmllcy4KKysvLworKworKy8vIFdyaXR0ZW4gYnkgQmVuamFtaW4gS29zbmlrIDxia296QHJlZGhhdC5jb20+CisrCisrI2luY2x1ZGUgPGNlcnJubz4gIC8vIEZvciBlcnJubworKyNpbmNsdWRlIDxsb2NhbGU+CisrI2luY2x1ZGUgPHN0ZGV4Y2VwdD4KKysjaW5jbHVkZSA8bGFuZ2luZm8uaD4KKysjaW5jbHVkZSA8Yml0cy9jKytsb2NhbGVfaW50ZXJuYWwuaD4KKysKKysjaWZuZGVmIF9fVUNMSUJDX0hBU19YTE9DQUxFX18KKysjZGVmaW5lIF9fc3RydG9sX2woUywgRSwgQiwgTCkgICAgICBzdHJ0b2woKFMpLCAoRSksIChCKSkKKysjZGVmaW5lIF9fc3RydG91bF9sKFMsIEUsIEIsIEwpICAgICBzdHJ0b3VsKChTKSwgKEUpLCAoQikpCisrI2RlZmluZSBfX3N0cnRvbGxfbChTLCBFLCBCLCBMKSAgICAgc3RydG9sbCgoUyksIChFKSwgKEIpKQorKyNkZWZpbmUgX19zdHJ0b3VsbF9sKFMsIEUsIEIsIEwpICAgIHN0cnRvdWxsKChTKSwgKEUpLCAoQikpCisrI2RlZmluZSBfX3N0cnRvZl9sKFMsIEUsIEwpICAgICAgICAgc3RydG9mKChTKSwgKEUpKQorKyNkZWZpbmUgX19zdHJ0b2RfbChTLCBFLCBMKSAgICAgICAgIHN0cnRvZCgoUyksIChFKSkKKysjZGVmaW5lIF9fc3RydG9sZF9sKFMsIEUsIEwpICAgICAgICBzdHJ0b2xkKChTKSwgKEUpKQorKyN3YXJuaW5nIHNob3VsZCBkdW1teSBfX25ld2xvY2FsZSBjaGVjayBmb3IgQ3xQT1NJWCA/CisrI2RlZmluZSBfX25ld2xvY2FsZShhLCBiLCBjKSAgICAgICAgTlVMTAorKyNkZWZpbmUgX19mcmVlbG9jYWxlKGEpICAgICAgICAgICAgICgodm9pZCkwKQorKyNkZWZpbmUgX19kdXBsb2NhbGUoYSkgICAgICAgICAgICAgIF9fY19sb2NhbGUoKQorKyNlbmRpZgorKworK25hbWVzcGFjZSBzdGQKKyt7CisrICB0ZW1wbGF0ZTw+CisrICAgIHZvaWQKKysgICAgX19jb252ZXJ0X3RvX3YoY29uc3QgY2hhciogX19zLCBmbG9hdCYgX192LCBpb3NfYmFzZTo6aW9zdGF0ZSYgX19lcnIsCisrCQkgICBjb25zdCBfX2NfbG9jYWxlJiBfX2Nsb2MpCisrICAgIHsKKysgICAgICBpZiAoIShfX2VyciAmIGlvc19iYXNlOjpmYWlsYml0KSkKKysJeworKwkgIGNoYXIqIF9fc2FuaXR5OworKwkgIGVycm5vID0gMDsKKysJICBmbG9hdCBfX2YgPSBfX3N0cnRvZl9sKF9fcywgJl9fc2FuaXR5LCBfX2Nsb2MpOworKyAgICAgICAgICBpZiAoX19zYW5pdHkgIT0gX19zICYmIGVycm5vICE9IEVSQU5HRSkKKysJICAgIF9fdiA9IF9fZjsKKysJICBlbHNlCisrCSAgICBfX2VyciB8PSBpb3NfYmFzZTo6ZmFpbGJpdDsKKysJfQorKyAgICB9CisrCisrICB0ZW1wbGF0ZTw+CisrICAgIHZvaWQKKysgICAgX19jb252ZXJ0X3RvX3YoY29uc3QgY2hhciogX19zLCBkb3VibGUmIF9fdiwgaW9zX2Jhc2U6Omlvc3RhdGUmIF9fZXJyLAorKwkJICAgY29uc3QgX19jX2xvY2FsZSYgX19jbG9jKQorKyAgICB7CisrICAgICAgaWYgKCEoX19lcnIgJiBpb3NfYmFzZTo6ZmFpbGJpdCkpCisrCXsKKysJICBjaGFyKiBfX3Nhbml0eTsKKysJICBlcnJubyA9IDA7CisrCSAgZG91YmxlIF9fZCA9IF9fc3RydG9kX2woX19zLCAmX19zYW5pdHksIF9fY2xvYyk7CisrICAgICAgICAgIGlmIChfX3Nhbml0eSAhPSBfX3MgJiYgZXJybm8gIT0gRVJBTkdFKQorKwkgICAgX192ID0gX19kOworKwkgIGVsc2UKKysJICAgIF9fZXJyIHw9IGlvc19iYXNlOjpmYWlsYml0OworKwl9CisrICAgIH0KKysKKysgIHRlbXBsYXRlPD4KKysgICAgdm9pZAorKyAgICBfX2NvbnZlcnRfdG9fdihjb25zdCBjaGFyKiBfX3MsIGxvbmcgZG91YmxlJiBfX3YsIGlvc19iYXNlOjppb3N0YXRlJiBfX2VyciwKKysJCSAgIGNvbnN0IF9fY19sb2NhbGUmIF9fY2xvYykKKysgICAgeworKyAgICAgIGlmICghKF9fZXJyICYgaW9zX2Jhc2U6OmZhaWxiaXQpKQorKwl7CisrCSAgY2hhciogX19zYW5pdHk7CisrCSAgZXJybm8gPSAwOworKwkgIGxvbmcgZG91YmxlIF9fbGQgPSBfX3N0cnRvbGRfbChfX3MsICZfX3Nhbml0eSwgX19jbG9jKTsKKysgICAgICAgICAgaWYgKF9fc2FuaXR5ICE9IF9fcyAmJiBlcnJubyAhPSBFUkFOR0UpCisrCSAgICBfX3YgPSBfX2xkOworKwkgIGVsc2UKKysJICAgIF9fZXJyIHw9IGlvc19iYXNlOjpmYWlsYml0OworKwl9CisrICAgIH0KKysKKysgIHZvaWQKKysgIGxvY2FsZTo6ZmFjZXQ6Ol9TX2NyZWF0ZV9jX2xvY2FsZShfX2NfbG9jYWxlJiBfX2Nsb2MsIGNvbnN0IGNoYXIqIF9fcywKKysJCQkJICAgIF9fY19sb2NhbGUgX19vbGQpCisrICB7CisrICAgIF9fY2xvYyA9IF9fbmV3bG9jYWxlKDEgPDwgTENfQUxMLCBfX3MsIF9fb2xkKTsKKysjaWZkZWYgX19VQ0xJQkNfSEFTX1hMT0NBTEVfXworKyAgICBpZiAoIV9fY2xvYykKKysgICAgICB7CisrCS8vIFRoaXMgbmFtZWQgbG9jYWxlIGlzIG5vdCBzdXBwb3J0ZWQgYnkgdGhlIHVuZGVybHlpbmcgT1MuCisrCV9fdGhyb3dfcnVudGltZV9lcnJvcihfX04oImxvY2FsZTo6ZmFjZXQ6Ol9TX2NyZWF0ZV9jX2xvY2FsZSAiCisrCQkJICAgICAgIm5hbWUgbm90IHZhbGlkIikpOworKyAgICAgIH0KKysjZW5kaWYKKysgIH0KKysKKysgIHZvaWQKKysgIGxvY2FsZTo6ZmFjZXQ6Ol9TX2Rlc3Ryb3lfY19sb2NhbGUoX19jX2xvY2FsZSYgX19jbG9jKQorKyAgeworKyAgICBpZiAoX1NfZ2V0X2NfbG9jYWxlKCkgIT0gX19jbG9jKQorKyAgICAgIF9fZnJlZWxvY2FsZShfX2Nsb2MpOworKyAgfQorKworKyAgX19jX2xvY2FsZQorKyAgbG9jYWxlOjpmYWNldDo6X1NfY2xvbmVfY19sb2NhbGUoX19jX2xvY2FsZSYgX19jbG9jKQorKyAgeyByZXR1cm4gX19kdXBsb2NhbGUoX19jbG9jKTsgfQorK30gLy8gbmFtZXNwYWNlIHN0ZAorKworK25hbWVzcGFjZSBfX2dudV9jeHgKKyt7CisrICBjb25zdCBjaGFyKiBjb25zdCBjYXRlZ29yeV9uYW1lc1s2ICsgX0dMSUJDWFhfTlVNX0NBVEVHT1JJRVNdID0KKysgICAgeworKyAgICAgICJMQ19DVFlQRSIsCisrICAgICAgIkxDX05VTUVSSUMiLAorKyAgICAgICJMQ19USU1FIiwKKysgICAgICAiTENfQ09MTEFURSIsCisrICAgICAgIkxDX01PTkVUQVJZIiwKKysgICAgICAiTENfTUVTU0FHRVMiLAorKyNpZiBfR0xJQkNYWF9OVU1fQ0FURUdPUklFUyAhPSAwCisrICAgICAgIkxDX1BBUEVSIiwKKysgICAgICAiTENfTkFNRSIsCisrICAgICAgIkxDX0FERFJFU1MiLAorKyAgICAgICJMQ19URUxFUEhPTkUiLAorKyAgICAgICJMQ19NRUFTVVJFTUVOVCIsCisrICAgICAgIkxDX0lERU5USUZJQ0FUSU9OIgorKyNlbmRpZgorKyAgICB9OworK30KKysKKytuYW1lc3BhY2Ugc3RkCisreworKyAgY29uc3QgY2hhciogY29uc3QqIGNvbnN0IGxvY2FsZTo6X1NfY2F0ZWdvcmllcyA9IF9fZ251X2N4eDo6Y2F0ZWdvcnlfbmFtZXM7CisrfSAgLy8gbmFtZXNwYWNlIHN0ZAorZGlmZiAtLWdpdCBhL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9jX2xvY2FsZS5oIGIvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL2NfbG9jYWxlLmgKK25ldyBmaWxlIG1vZGUgMTAwNjQ0CitpbmRleCAwMDAwMDAwLi5kYTA3YzFmCistLS0gL2Rldi9udWxsCisrKysgYi9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvY19sb2NhbGUuaAorQEAgLTAsMCArMSwxMTcgQEAKKysvLyBXcmFwcGVyIGZvciB1bmRlcmx5aW5nIEMtbGFuZ3VhZ2UgbG9jYWxpemF0aW9uIC0qLSBDKysgLSotCisrCisrLy8gQ29weXJpZ2h0IChDKSAyMDAxLCAyMDAyLCAyMDAzLCAyMDA0LCAyMDA1IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorKy8vCisrLy8gVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBJU08gQysrIExpYnJhcnkuICBUaGlzIGxpYnJhcnkgaXMgZnJlZQorKy8vIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyIHRoZQorKy8vIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCisrLy8gRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pCisrLy8gYW55IGxhdGVyIHZlcnNpb24uCisrCisrLy8gVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisrLy8gYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKysvLyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisrLy8gR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKysKKysvLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZworKy8vIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy4gIElmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUKKysvLyBTb2Z0d2FyZSBGb3VuZGF0aW9uLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywKKysvLyBVU0EuCisrCisrLy8gQXMgYSBzcGVjaWFsIGV4Y2VwdGlvbiwgeW91IG1heSB1c2UgdGhpcyBmaWxlIGFzIHBhcnQgb2YgYSBmcmVlIHNvZnR3YXJlCisrLy8gbGlicmFyeSB3aXRob3V0IHJlc3RyaWN0aW9uLiAgU3BlY2lmaWNhbGx5LCBpZiBvdGhlciBmaWxlcyBpbnN0YW50aWF0ZQorKy8vIHRlbXBsYXRlcyBvciB1c2UgbWFjcm9zIG9yIGlubGluZSBmdW5jdGlvbnMgZnJvbSB0aGlzIGZpbGUsIG9yIHlvdSBjb21waWxlCisrLy8gdGhpcyBmaWxlIGFuZCBsaW5rIGl0IHdpdGggb3RoZXIgZmlsZXMgdG8gcHJvZHVjZSBhbiBleGVjdXRhYmxlLCB0aGlzCisrLy8gZmlsZSBkb2VzIG5vdCBieSBpdHNlbGYgY2F1c2UgdGhlIHJlc3VsdGluZyBleGVjdXRhYmxlIHRvIGJlIGNvdmVyZWQgYnkKKysvLyB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UuICBUaGlzIGV4Y2VwdGlvbiBkb2VzIG5vdCBob3dldmVyCisrLy8gaW52YWxpZGF0ZSBhbnkgb3RoZXIgcmVhc29ucyB3aHkgdGhlIGV4ZWN1dGFibGUgZmlsZSBtaWdodCBiZSBjb3ZlcmVkIGJ5CisrLy8gdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLgorKworKy8vCisrLy8gSVNPIEMrKyAxNDg4MjogMjIuOCAgU3RhbmRhcmQgbG9jYWxlIGNhdGVnb3JpZXMuCisrLy8KKysKKysvLyBXcml0dGVuIGJ5IEJlbmphbWluIEtvc25payA8YmtvekByZWRoYXQuY29tPgorKworKyNpZm5kZWYgX0NfTE9DQUxFX0gKKysjZGVmaW5lIF9DX0xPQ0FMRV9IIDEKKysKKysjcHJhZ21hIEdDQyBzeXN0ZW1faGVhZGVyCisrCisrI2luY2x1ZGUgPGNzdHJpbmc+ICAgICAgICAgICAgICAvLyBnZXQgc3RkOjpzdHJsZW4KKysjaW5jbHVkZSA8Y3N0ZGlvPiAgICAgICAgICAgICAgIC8vIGdldCBzdGQ6OnNucHJpbnRmIG9yIHN0ZDo6c3ByaW50ZgorKyNpbmNsdWRlIDxjbG9jYWxlPgorKyNpbmNsdWRlIDxsYW5naW5mby5oPgkJLy8gRm9yIGNvZGVjdnQKKysjaWZkZWYgX19VQ0xJQkNfTUpOM19PTkxZX18KKysjd2FybmluZyBmaXggdGhpcworKyNlbmRpZgorKyNpZmRlZiBfX1VDTElCQ19IQVNfTE9DQUxFX18KKysjaW5jbHVkZSA8aWNvbnYuaD4JCS8vIEZvciBjb2RlY3Z0IHVzaW5nIGljb252LCBpY29udl90CisrI2VuZGlmCisrI2lmZGVmIF9fVUNMSUJDX0hBU19HRVRURVhUX0FXQVJFTkVTU19fCisrI2luY2x1ZGUgPGxpYmludGwuaD4gCQkvLyBGb3IgbWVzc2FnZXMKKysjZW5kaWYKKysKKysjaWZkZWYgX19VQ0xJQkNfTUpOM19PTkxZX18KKysjd2FybmluZyB3aGF0IGlzIF9HTElCQ1hYX0NfTE9DQUxFX0dOVSBmb3IKKysjZW5kaWYKKysjZGVmaW5lIF9HTElCQ1hYX0NfTE9DQUxFX0dOVSAxCisrCisrI2lmZGVmIF9fVUNMSUJDX01KTjNfT05MWV9fCisrI3dhcm5pbmcgZml4IGNhdGVnb3JpZXMKKysjZW5kaWYKKysvLyAjZGVmaW5lIF9HTElCQ1hYX05VTV9DQVRFR09SSUVTIDYKKysjZGVmaW5lIF9HTElCQ1hYX05VTV9DQVRFR09SSUVTIDAKKysKKysjaWZkZWYgX19VQ0xJQkNfSEFTX1hMT0NBTEVfXworK25hbWVzcGFjZSBfX2dudV9jeHgKKyt7CisrICBleHRlcm4gIkMiIF9fdHlwZW9mKHVzZWxvY2FsZSkgX191c2Vsb2NhbGU7CisrfQorKyNlbmRpZgorKworK25hbWVzcGFjZSBzdGQKKyt7CisrI2lmZGVmIF9fVUNMSUJDX0hBU19YTE9DQUxFX18KKysgIHR5cGVkZWYgX19sb2NhbGVfdAkJX19jX2xvY2FsZTsKKysjZWxzZQorKyAgdHlwZWRlZiBpbnQqCQkJX19jX2xvY2FsZTsKKysjZW5kaWYKKysKKysgIC8vIENvbnZlcnQgbnVtZXJpYyB2YWx1ZSBvZiB0eXBlIF9UdiB0byBzdHJpbmcgYW5kIHJldHVybiBsZW5ndGggb2YKKysgIC8vIHN0cmluZy4gIElmIHNucHJpbnRmIGlzIGF2YWlsYWJsZSB1c2UgaXQsIG90aGVyd2lzZSBmYWxsIGJhY2sgdG8KKysgIC8vIHRoZSB1bnNhZmUgc3ByaW50ZiB3aGljaCwgaW4gZ2VuZXJhbCwgY2FuIGJlIGRhbmdlcm91cyBhbmQgc2hvdWxkCisrICAvLyBiZSBhdm9pZGVkLgorKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1R2PgorKyAgICBpbnQKKysgICAgX19jb252ZXJ0X2Zyb21fdihjaGFyKiBfX291dCwKKysJCSAgICAgY29uc3QgaW50IF9fc2l6ZSBfX2F0dHJpYnV0ZV9fICgoX191bnVzZWRfXykpLAorKwkJICAgICBjb25zdCBjaGFyKiBfX2ZtdCwKKysjaWZkZWYgX19VQ0xJQkNfSEFTX1hDTE9DQUxFX18KKysJCSAgICAgX1R2IF9fdiwgY29uc3QgX19jX2xvY2FsZSYgX19jbG9jLCBpbnQgX19wcmVjKQorKyAgICB7CisrICAgICAgX19jX2xvY2FsZSBfX29sZCA9IF9fZ251X2N4eDo6X191c2Vsb2NhbGUoX19jbG9jKTsKKysjZWxzZQorKwkJICAgICBfVHYgX192LCBjb25zdCBfX2NfbG9jYWxlJiwgaW50IF9fcHJlYykKKysgICAgeworKyMgaWZkZWYgX19VQ0xJQkNfSEFTX0xPQ0FMRV9fCisrICAgICAgY2hhciogX19vbGQgPSBzdGQ6OnNldGxvY2FsZShMQ19BTEwsIE5VTEwpOworKyAgICAgIGNoYXIqIF9fc2F2ID0gbmV3IGNoYXJbc3RkOjpzdHJsZW4oX19vbGQpICsgMV07CisrICAgICAgc3RkOjpzdHJjcHkoX19zYXYsIF9fb2xkKTsKKysgICAgICBzdGQ6OnNldGxvY2FsZShMQ19BTEwsICJDIik7CisrIyBlbmRpZgorKyNlbmRpZgorKworKyAgICAgIGNvbnN0IGludCBfX3JldCA9IHN0ZDo6c25wcmludGYoX19vdXQsIF9fc2l6ZSwgX19mbXQsIF9fcHJlYywgX192KTsKKysKKysjaWZkZWYgX19VQ0xJQkNfSEFTX1hDTE9DQUxFX18KKysgICAgICBfX2dudV9jeHg6Ol9fdXNlbG9jYWxlKF9fb2xkKTsKKysjZWxpZiBkZWZpbmVkIF9fVUNMSUJDX0hBU19MT0NBTEVfXworKyAgICAgIHN0ZDo6c2V0bG9jYWxlKExDX0FMTCwgX19zYXYpOworKyAgICAgIGRlbGV0ZSBbXSBfX3NhdjsKKysjZW5kaWYKKysgICAgICByZXR1cm4gX19yZXQ7CisrICAgIH0KKyt9CisrCisrI2VuZGlmCitkaWZmIC0tZ2l0IGEvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL2NvZGVjdnRfbWVtYmVycy5jYyBiL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9jb2RlY3Z0X21lbWJlcnMuY2MKK25ldyBmaWxlIG1vZGUgMTAwNjQ0CitpbmRleCAwMDAwMDAwLi42NGFhOTYyCistLS0gL2Rldi9udWxsCisrKysgYi9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvY29kZWN2dF9tZW1iZXJzLmNjCitAQCAtMCwwICsxLDMwOCBAQAorKy8vIHN0ZDo6Y29kZWN2dCBpbXBsZW1lbnRhdGlvbiBkZXRhaWxzLCBHTlUgdmVyc2lvbiAtKi0gQysrIC0qLQorKworKy8vIENvcHlyaWdodCAoQykgMjAwMiwgMjAwMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKysvLworKy8vIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgSVNPIEMrKyBMaWJyYXJ5LiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUKKysvLyBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlciB0aGUKKysvLyB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorKy8vIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKQorKy8vIGFueSBsYXRlciB2ZXJzaW9uLgorKworKy8vIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorKy8vIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisrLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorKy8vIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisrCisrLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcKKysvLyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuICBJZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlCisrLy8gU29mdHdhcmUgRm91bmRhdGlvbiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsCisrLy8gVVNBLgorKworKy8vIEFzIGEgc3BlY2lhbCBleGNlcHRpb24sIHlvdSBtYXkgdXNlIHRoaXMgZmlsZSBhcyBwYXJ0IG9mIGEgZnJlZSBzb2Z0d2FyZQorKy8vIGxpYnJhcnkgd2l0aG91dCByZXN0cmljdGlvbi4gIFNwZWNpZmljYWxseSwgaWYgb3RoZXIgZmlsZXMgaW5zdGFudGlhdGUKKysvLyB0ZW1wbGF0ZXMgb3IgdXNlIG1hY3JvcyBvciBpbmxpbmUgZnVuY3Rpb25zIGZyb20gdGhpcyBmaWxlLCBvciB5b3UgY29tcGlsZQorKy8vIHRoaXMgZmlsZSBhbmQgbGluayBpdCB3aXRoIG90aGVyIGZpbGVzIHRvIHByb2R1Y2UgYW4gZXhlY3V0YWJsZSwgdGhpcworKy8vIGZpbGUgZG9lcyBub3QgYnkgaXRzZWxmIGNhdXNlIHRoZSByZXN1bHRpbmcgZXhlY3V0YWJsZSB0byBiZSBjb3ZlcmVkIGJ5CisrLy8gdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLiAgVGhpcyBleGNlcHRpb24gZG9lcyBub3QgaG93ZXZlcgorKy8vIGludmFsaWRhdGUgYW55IG90aGVyIHJlYXNvbnMgd2h5IHRoZSBleGVjdXRhYmxlIGZpbGUgbWlnaHQgYmUgY292ZXJlZCBieQorKy8vIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4KKysKKysvLworKy8vIElTTyBDKysgMTQ4ODI6IDIyLjIuMS41IC0gVGVtcGxhdGUgY2xhc3MgY29kZWN2dAorKy8vCisrCisrLy8gV3JpdHRlbiBieSBCZW5qYW1pbiBLb3NuaWsgPGJrb3pAcmVkaGF0LmNvbT4KKysKKysjaW5jbHVkZSA8bG9jYWxlPgorKyNpbmNsdWRlIDxjc3RkbGliPiAgLy8gRm9yIE1CX0NVUl9NQVgKKysjaW5jbHVkZSA8Y2xpbWl0cz4gIC8vIEZvciBNQl9MRU5fTUFYCisrI2luY2x1ZGUgPGJpdHMvYysrbG9jYWxlX2ludGVybmFsLmg+CisrCisrbmFtZXNwYWNlIHN0ZAorK3sKKysgIC8vIFNwZWNpYWxpemF0aW9ucy4KKysjaWZkZWYgX0dMSUJDWFhfVVNFX1dDSEFSX1QKKysgIGNvZGVjdnRfYmFzZTo6cmVzdWx0CisrICBjb2RlY3Z0PHdjaGFyX3QsIGNoYXIsIG1ic3RhdGVfdD46OgorKyAgZG9fb3V0KHN0YXRlX3R5cGUmIF9fc3RhdGUsIGNvbnN0IGludGVybl90eXBlKiBfX2Zyb20sCisrCSBjb25zdCBpbnRlcm5fdHlwZSogX19mcm9tX2VuZCwgY29uc3QgaW50ZXJuX3R5cGUqJiBfX2Zyb21fbmV4dCwKKysJIGV4dGVybl90eXBlKiBfX3RvLCBleHRlcm5fdHlwZSogX190b19lbmQsCisrCSBleHRlcm5fdHlwZSomIF9fdG9fbmV4dCkgY29uc3QKKysgIHsKKysgICAgcmVzdWx0IF9fcmV0ID0gb2s7CisrICAgIHN0YXRlX3R5cGUgX190bXBfc3RhdGUoX19zdGF0ZSk7CisrCisrI2lmZGVmIF9fVUNMSUJDX0hBU19YTE9DQUxFX18KKysgICAgX19jX2xvY2FsZSBfX29sZCA9IF9fdXNlbG9jYWxlKF9NX2NfbG9jYWxlX2NvZGVjdnQpOworKyNlbmRpZgorKworKyAgICAvLyB3Y3NucnRvbWJzIGlzICp2ZXJ5KiBmYXN0IGJ1dCBzdG9wcyBpZiBlbmNvdW50ZXJzIE5VTCBjaGFyYWN0ZXJzOgorKyAgICAvLyBpbiBjYXNlIHdlIGZhbGwgYmFjayB0byB3Y3J0b21iIGFuZCB0aGVuIGNvbnRpbnVlLCBpbiBhIGxvb3AuCisrICAgIC8vIE5COiB3Y3NucnRvbWJzIGlzIGEgR05VIGV4dGVuc2lvbgorKyAgICBmb3IgKF9fZnJvbV9uZXh0ID0gX19mcm9tLCBfX3RvX25leHQgPSBfX3RvOworKwkgX19mcm9tX25leHQgPCBfX2Zyb21fZW5kICYmIF9fdG9fbmV4dCA8IF9fdG9fZW5kCisrCSAmJiBfX3JldCA9PSBvazspCisrICAgICAgeworKwljb25zdCBpbnRlcm5fdHlwZSogX19mcm9tX2NodW5rX2VuZCA9IHdtZW1jaHIoX19mcm9tX25leHQsIEwnXDAnLAorKwkJCQkJCSAgICAgIF9fZnJvbV9lbmQgLSBfX2Zyb21fbmV4dCk7CisrCWlmICghX19mcm9tX2NodW5rX2VuZCkKKysJICBfX2Zyb21fY2h1bmtfZW5kID0gX19mcm9tX2VuZDsKKysKKysJX19mcm9tID0gX19mcm9tX25leHQ7CisrCWNvbnN0IHNpemVfdCBfX2NvbnYgPSB3Y3NucnRvbWJzKF9fdG9fbmV4dCwgJl9fZnJvbV9uZXh0LAorKwkJCQkJIF9fZnJvbV9jaHVua19lbmQgLSBfX2Zyb21fbmV4dCwKKysJCQkJCSBfX3RvX2VuZCAtIF9fdG9fbmV4dCwgJl9fc3RhdGUpOworKwlpZiAoX19jb252ID09IHN0YXRpY19jYXN0PHNpemVfdD4oLTEpKQorKwkgIHsKKysJICAgIC8vIEluIGNhc2Ugb2YgZXJyb3IsIGluIG9yZGVyIHRvIHN0b3AgYXQgdGhlIGV4YWN0IHBsYWNlIHdlCisrCSAgICAvLyBoYXZlIHRvIHN0YXJ0IGFnYWluIGZyb20gdGhlIGJlZ2lubmluZyB3aXRoIGEgc2VyaWVzIG9mCisrCSAgICAvLyB3Y3J0b21iLgorKwkgICAgZm9yICg7IF9fZnJvbSA8IF9fZnJvbV9uZXh0OyArK19fZnJvbSkKKysJICAgICAgX190b19uZXh0ICs9IHdjcnRvbWIoX190b19uZXh0LCAqX19mcm9tLCAmX190bXBfc3RhdGUpOworKwkgICAgX19zdGF0ZSA9IF9fdG1wX3N0YXRlOworKwkgICAgX19yZXQgPSBlcnJvcjsKKysJICB9CisrCWVsc2UgaWYgKF9fZnJvbV9uZXh0ICYmIF9fZnJvbV9uZXh0IDwgX19mcm9tX2NodW5rX2VuZCkKKysJICB7CisrCSAgICBfX3RvX25leHQgKz0gX19jb252OworKwkgICAgX19yZXQgPSBwYXJ0aWFsOworKwkgIH0KKysJZWxzZQorKwkgIHsKKysJICAgIF9fZnJvbV9uZXh0ID0gX19mcm9tX2NodW5rX2VuZDsKKysJICAgIF9fdG9fbmV4dCArPSBfX2NvbnY7CisrCSAgfQorKworKwlpZiAoX19mcm9tX25leHQgPCBfX2Zyb21fZW5kICYmIF9fcmV0ID09IG9rKQorKwkgIHsKKysJICAgIGV4dGVybl90eXBlIF9fYnVmW01CX0xFTl9NQVhdOworKwkgICAgX190bXBfc3RhdGUgPSBfX3N0YXRlOworKwkgICAgY29uc3Qgc2l6ZV90IF9fY29udiA9IHdjcnRvbWIoX19idWYsICpfX2Zyb21fbmV4dCwgJl9fdG1wX3N0YXRlKTsKKysJICAgIGlmIChfX2NvbnYgPiBzdGF0aWNfY2FzdDxzaXplX3Q+KF9fdG9fZW5kIC0gX190b19uZXh0KSkKKysJICAgICAgX19yZXQgPSBwYXJ0aWFsOworKwkgICAgZWxzZQorKwkgICAgICB7CisrCQltZW1jcHkoX190b19uZXh0LCBfX2J1ZiwgX19jb252KTsKKysJCV9fc3RhdGUgPSBfX3RtcF9zdGF0ZTsKKysJCV9fdG9fbmV4dCArPSBfX2NvbnY7CisrCQkrK19fZnJvbV9uZXh0OworKwkgICAgICB9CisrCSAgfQorKyAgICAgIH0KKysKKysjaWZkZWYgX19VQ0xJQkNfSEFTX1hMT0NBTEVfXworKyAgICBfX3VzZWxvY2FsZShfX29sZCk7CisrI2VuZGlmCisrCisrICAgIHJldHVybiBfX3JldDsKKysgIH0KKysKKysgIGNvZGVjdnRfYmFzZTo6cmVzdWx0CisrICBjb2RlY3Z0PHdjaGFyX3QsIGNoYXIsIG1ic3RhdGVfdD46OgorKyAgZG9faW4oc3RhdGVfdHlwZSYgX19zdGF0ZSwgY29uc3QgZXh0ZXJuX3R5cGUqIF9fZnJvbSwKKysJY29uc3QgZXh0ZXJuX3R5cGUqIF9fZnJvbV9lbmQsIGNvbnN0IGV4dGVybl90eXBlKiYgX19mcm9tX25leHQsCisrCWludGVybl90eXBlKiBfX3RvLCBpbnRlcm5fdHlwZSogX190b19lbmQsCisrCWludGVybl90eXBlKiYgX190b19uZXh0KSBjb25zdAorKyAgeworKyAgICByZXN1bHQgX19yZXQgPSBvazsKKysgICAgc3RhdGVfdHlwZSBfX3RtcF9zdGF0ZShfX3N0YXRlKTsKKysKKysjaWZkZWYgX19VQ0xJQkNfSEFTX1hMT0NBTEVfXworKyAgICBfX2NfbG9jYWxlIF9fb2xkID0gX191c2Vsb2NhbGUoX01fY19sb2NhbGVfY29kZWN2dCk7CisrI2VuZGlmCisrCisrICAgIC8vIG1ic25ydG93Y3MgaXMgKnZlcnkqIGZhc3QgYnV0IHN0b3BzIGlmIGVuY291bnRlcnMgTlVMIGNoYXJhY3RlcnM6CisrICAgIC8vIGluIGNhc2Ugd2Ugc3RvcmUgYSBMJ1wwJyBhbmQgdGhlbiBjb250aW51ZSwgaW4gYSBsb29wLgorKyAgICAvLyBOQjogbWJzbnJ0b3djcyBpcyBhIEdOVSBleHRlbnNpb24KKysgICAgZm9yIChfX2Zyb21fbmV4dCA9IF9fZnJvbSwgX190b19uZXh0ID0gX190bzsKKysJIF9fZnJvbV9uZXh0IDwgX19mcm9tX2VuZCAmJiBfX3RvX25leHQgPCBfX3RvX2VuZAorKwkgJiYgX19yZXQgPT0gb2s7KQorKyAgICAgIHsKKysJY29uc3QgZXh0ZXJuX3R5cGUqIF9fZnJvbV9jaHVua19lbmQ7CisrCV9fZnJvbV9jaHVua19lbmQgPSBzdGF0aWNfY2FzdDxjb25zdCBleHRlcm5fdHlwZSo+KG1lbWNocihfX2Zyb21fbmV4dCwgJ1wwJywKKysJCQkJCQkJCSAgX19mcm9tX2VuZAorKwkJCQkJCQkJICAtIF9fZnJvbV9uZXh0KSk7CisrCWlmICghX19mcm9tX2NodW5rX2VuZCkKKysJICBfX2Zyb21fY2h1bmtfZW5kID0gX19mcm9tX2VuZDsKKysKKysJX19mcm9tID0gX19mcm9tX25leHQ7CisrCXNpemVfdCBfX2NvbnYgPSBtYnNucnRvd2NzKF9fdG9fbmV4dCwgJl9fZnJvbV9uZXh0LAorKwkJCQkgICBfX2Zyb21fY2h1bmtfZW5kIC0gX19mcm9tX25leHQsCisrCQkJCSAgIF9fdG9fZW5kIC0gX190b19uZXh0LCAmX19zdGF0ZSk7CisrCWlmIChfX2NvbnYgPT0gc3RhdGljX2Nhc3Q8c2l6ZV90PigtMSkpCisrCSAgeworKwkgICAgLy8gSW4gY2FzZSBvZiBlcnJvciwgaW4gb3JkZXIgdG8gc3RvcCBhdCB0aGUgZXhhY3QgcGxhY2Ugd2UKKysJICAgIC8vIGhhdmUgdG8gc3RhcnQgYWdhaW4gZnJvbSB0aGUgYmVnaW5uaW5nIHdpdGggYSBzZXJpZXMgb2YKKysJICAgIC8vIG1icnRvd2MuCisrCSAgICBmb3IgKDs7ICsrX190b19uZXh0LCBfX2Zyb20gKz0gX19jb252KQorKwkgICAgICB7CisrCQlfX2NvbnYgPSBtYnJ0b3djKF9fdG9fbmV4dCwgX19mcm9tLCBfX2Zyb21fZW5kIC0gX19mcm9tLAorKwkJCQkgJl9fdG1wX3N0YXRlKTsKKysJCWlmIChfX2NvbnYgPT0gc3RhdGljX2Nhc3Q8c2l6ZV90PigtMSkKKysJCSAgICB8fCBfX2NvbnYgPT0gc3RhdGljX2Nhc3Q8c2l6ZV90PigtMikpCisrCQkgIGJyZWFrOworKwkgICAgICB9CisrCSAgICBfX2Zyb21fbmV4dCA9IF9fZnJvbTsKKysJICAgIF9fc3RhdGUgPSBfX3RtcF9zdGF0ZTsKKysJICAgIF9fcmV0ID0gZXJyb3I7CisrCSAgfQorKwllbHNlIGlmIChfX2Zyb21fbmV4dCAmJiBfX2Zyb21fbmV4dCA8IF9fZnJvbV9jaHVua19lbmQpCisrCSAgeworKwkgICAgLy8gSXQgaXMgdW5jbGVhciB3aGF0IHRvIHJldHVybiBpbiB0aGlzIGNhc2UgKHNlZSBEUiAzODIpLgorKwkgICAgX190b19uZXh0ICs9IF9fY29udjsKKysJICAgIF9fcmV0ID0gcGFydGlhbDsKKysJICB9CisrCWVsc2UKKysJICB7CisrCSAgICBfX2Zyb21fbmV4dCA9IF9fZnJvbV9jaHVua19lbmQ7CisrCSAgICBfX3RvX25leHQgKz0gX19jb252OworKwkgIH0KKysKKysJaWYgKF9fZnJvbV9uZXh0IDwgX19mcm9tX2VuZCAmJiBfX3JldCA9PSBvaykKKysJICB7CisrCSAgICBpZiAoX190b19uZXh0IDwgX190b19lbmQpCisrCSAgICAgIHsKKysJCS8vIFhYWCBQcm9iYWJseSB3cm9uZyBmb3Igc3RhdGVmdWwgZW5jb2RpbmdzCisrCQlfX3RtcF9zdGF0ZSA9IF9fc3RhdGU7CisrCQkrK19fZnJvbV9uZXh0OworKwkJKl9fdG9fbmV4dCsrID0gTCdcMCc7CisrCSAgICAgIH0KKysJICAgIGVsc2UKKysJICAgICAgX19yZXQgPSBwYXJ0aWFsOworKwkgIH0KKysgICAgICB9CisrCisrI2lmZGVmIF9fVUNMSUJDX0hBU19YTE9DQUxFX18KKysgICAgX191c2Vsb2NhbGUoX19vbGQpOworKyNlbmRpZgorKworKyAgICByZXR1cm4gX19yZXQ7CisrICB9CisrCisrICBpbnQKKysgIGNvZGVjdnQ8d2NoYXJfdCwgY2hhciwgbWJzdGF0ZV90Pjo6CisrICBkb19lbmNvZGluZygpIGNvbnN0IHRocm93KCkKKysgIHsKKysgICAgLy8gWFhYIFRoaXMgaW1wbGVtZW50YXRpb24gYXNzdW1lcyB0aGF0IHRoZSBlbmNvZGluZyBpcworKyAgICAvLyBzdGF0ZWxlc3MgYW5kIGlzIGVpdGhlciBzaW5nbGUtYnl0ZSBvciB2YXJpYWJsZS13aWR0aC4KKysgICAgaW50IF9fcmV0ID0gMDsKKysjaWZkZWYgX19VQ0xJQkNfSEFTX1hMT0NBTEVfXworKyAgICBfX2NfbG9jYWxlIF9fb2xkID0gX191c2Vsb2NhbGUoX01fY19sb2NhbGVfY29kZWN2dCk7CisrI2VuZGlmCisrICAgIGlmIChNQl9DVVJfTUFYID09IDEpCisrICAgICAgX19yZXQgPSAxOworKyNpZmRlZiBfX1VDTElCQ19IQVNfWExPQ0FMRV9fCisrICAgIF9fdXNlbG9jYWxlKF9fb2xkKTsKKysjZW5kaWYKKysgICAgcmV0dXJuIF9fcmV0OworKyAgfQorKworKyAgaW50CisrICBjb2RlY3Z0PHdjaGFyX3QsIGNoYXIsIG1ic3RhdGVfdD46OgorKyAgZG9fbWF4X2xlbmd0aCgpIGNvbnN0IHRocm93KCkKKysgIHsKKysjaWZkZWYgX19VQ0xJQkNfSEFTX1hMT0NBTEVfXworKyAgICBfX2NfbG9jYWxlIF9fb2xkID0gX191c2Vsb2NhbGUoX01fY19sb2NhbGVfY29kZWN2dCk7CisrI2VuZGlmCisrICAgIC8vIFhYWCBQcm9iYWJseSB3cm9uZyBmb3Igc3RhdGVmdWwgZW5jb2RpbmdzLgorKyAgICBpbnQgX19yZXQgPSBNQl9DVVJfTUFYOworKyNpZmRlZiBfX1VDTElCQ19IQVNfWExPQ0FMRV9fCisrICAgIF9fdXNlbG9jYWxlKF9fb2xkKTsKKysjZW5kaWYKKysgICAgcmV0dXJuIF9fcmV0OworKyAgfQorKworKyAgaW50CisrICBjb2RlY3Z0PHdjaGFyX3QsIGNoYXIsIG1ic3RhdGVfdD46OgorKyAgZG9fbGVuZ3RoKHN0YXRlX3R5cGUmIF9fc3RhdGUsIGNvbnN0IGV4dGVybl90eXBlKiBfX2Zyb20sCisrCSAgICBjb25zdCBleHRlcm5fdHlwZSogX19lbmQsIHNpemVfdCBfX21heCkgY29uc3QKKysgIHsKKysgICAgaW50IF9fcmV0ID0gMDsKKysgICAgc3RhdGVfdHlwZSBfX3RtcF9zdGF0ZShfX3N0YXRlKTsKKysKKysjaWZkZWYgX19VQ0xJQkNfSEFTX1hMT0NBTEVfXworKyAgICBfX2NfbG9jYWxlIF9fb2xkID0gX191c2Vsb2NhbGUoX01fY19sb2NhbGVfY29kZWN2dCk7CisrI2VuZGlmCisrCisrICAgIC8vIG1ic25ydG93Y3MgaXMgKnZlcnkqIGZhc3QgYnV0IHN0b3BzIGlmIGVuY291bnRlcnMgTlVMIGNoYXJhY3RlcnM6CisrICAgIC8vIGluIGNhc2Ugd2UgYWR2YW5jZSBwYXN0IGl0IGFuZCB0aGVuIGNvbnRpbnVlLCBpbiBhIGxvb3AuCisrICAgIC8vIE5COiBtYnNucnRvd2NzIGlzIGEgR05VIGV4dGVuc2lvbgorKworKyAgICAvLyBBIGR1bW15IGludGVybmFsIGJ1ZmZlciBpcyBuZWVkZWQgaW4gb3JkZXIgZm9yIG1ic25ydG9jd3MgdG8gY29uc2lkZXIKKysgICAgLy8gaXRzIGZvdXJ0aCBwYXJhbWV0ZXIgKGl0IHdvdWxkbid0IHdpdGggTlVMTCBhcyBmaXJzdCBwYXJhbWV0ZXIpLgorKyAgICB3Y2hhcl90KiBfX3RvID0gc3RhdGljX2Nhc3Q8d2NoYXJfdCo+KF9fYnVpbHRpbl9hbGxvY2Eoc2l6ZW9mKHdjaGFyX3QpCisrCQkJCQkJCSAgICogX19tYXgpKTsKKysgICAgd2hpbGUgKF9fZnJvbSA8IF9fZW5kICYmIF9fbWF4KQorKyAgICAgIHsKKysJY29uc3QgZXh0ZXJuX3R5cGUqIF9fZnJvbV9jaHVua19lbmQ7CisrCV9fZnJvbV9jaHVua19lbmQgPSBzdGF0aWNfY2FzdDxjb25zdCBleHRlcm5fdHlwZSo+KG1lbWNocihfX2Zyb20sICdcMCcsCisrCQkJCQkJCQkgIF9fZW5kCisrCQkJCQkJCQkgIC0gX19mcm9tKSk7CisrCWlmICghX19mcm9tX2NodW5rX2VuZCkKKysJICBfX2Zyb21fY2h1bmtfZW5kID0gX19lbmQ7CisrCisrCWNvbnN0IGV4dGVybl90eXBlKiBfX3RtcF9mcm9tID0gX19mcm9tOworKwlzaXplX3QgX19jb252ID0gbWJzbnJ0b3djcyhfX3RvLCAmX19mcm9tLAorKwkJCQkgICBfX2Zyb21fY2h1bmtfZW5kIC0gX19mcm9tLAorKwkJCQkgICBfX21heCwgJl9fc3RhdGUpOworKwlpZiAoX19jb252ID09IHN0YXRpY19jYXN0PHNpemVfdD4oLTEpKQorKwkgIHsKKysJICAgIC8vIEluIGNhc2Ugb2YgZXJyb3IsIGluIG9yZGVyIHRvIHN0b3AgYXQgdGhlIGV4YWN0IHBsYWNlIHdlCisrCSAgICAvLyBoYXZlIHRvIHN0YXJ0IGFnYWluIGZyb20gdGhlIGJlZ2lubmluZyB3aXRoIGEgc2VyaWVzIG9mCisrCSAgICAvLyBtYnJ0b3djLgorKwkgICAgZm9yIChfX2Zyb20gPSBfX3RtcF9mcm9tOzsgX19mcm9tICs9IF9fY29udikKKysJICAgICAgeworKwkJX19jb252ID0gbWJydG93YyhOVUxMLCBfX2Zyb20sIF9fZW5kIC0gX19mcm9tLAorKwkJCQkgJl9fdG1wX3N0YXRlKTsKKysJCWlmIChfX2NvbnYgPT0gc3RhdGljX2Nhc3Q8c2l6ZV90PigtMSkKKysJCSAgICB8fCBfX2NvbnYgPT0gc3RhdGljX2Nhc3Q8c2l6ZV90PigtMikpCisrCQkgIGJyZWFrOworKwkgICAgICB9CisrCSAgICBfX3N0YXRlID0gX190bXBfc3RhdGU7CisrCSAgICBfX3JldCArPSBfX2Zyb20gLSBfX3RtcF9mcm9tOworKwkgICAgYnJlYWs7CisrCSAgfQorKwlpZiAoIV9fZnJvbSkKKysJICBfX2Zyb20gPSBfX2Zyb21fY2h1bmtfZW5kOworKworKwlfX3JldCArPSBfX2Zyb20gLSBfX3RtcF9mcm9tOworKwlfX21heCAtPSBfX2NvbnY7CisrCisrCWlmIChfX2Zyb20gPCBfX2VuZCAmJiBfX21heCkKKysJICB7CisrCSAgICAvLyBYWFggUHJvYmFibHkgd3JvbmcgZm9yIHN0YXRlZnVsIGVuY29kaW5ncworKwkgICAgX190bXBfc3RhdGUgPSBfX3N0YXRlOworKwkgICAgKytfX2Zyb207CisrCSAgICArK19fcmV0OworKwkgICAgLS1fX21heDsKKysJICB9CisrICAgICAgfQorKworKyNpZmRlZiBfX1VDTElCQ19IQVNfWExPQ0FMRV9fCisrICAgIF9fdXNlbG9jYWxlKF9fb2xkKTsKKysjZW5kaWYKKysKKysgICAgcmV0dXJuIF9fcmV0OworKyAgfQorKyNlbmRpZgorK30KK2RpZmYgLS1naXQgYS9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvY29sbGF0ZV9tZW1iZXJzLmNjIGIvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL2NvbGxhdGVfbWVtYmVycy5jYworbmV3IGZpbGUgbW9kZSAxMDA2NDQKK2luZGV4IDAwMDAwMDAuLmMyNjY0YTcKKy0tLSAvZGV2L251bGwKKysrKyBiL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9jb2xsYXRlX21lbWJlcnMuY2MKK0BAIC0wLDAgKzEsODAgQEAKKysvLyBzdGQ6OmNvbGxhdGUgaW1wbGVtZW50YXRpb24gZGV0YWlscywgR05VIHZlcnNpb24gLSotIEMrKyAtKi0KKysKKysvLyBDb3B5cmlnaHQgKEMpIDIwMDEsIDIwMDIgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisrLy8KKysvLyBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIElTTyBDKysgTGlicmFyeS4gIFRoaXMgbGlicmFyeSBpcyBmcmVlCisrLy8gc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIgdGhlCisrLy8gdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKKysvLyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikKKysvLyBhbnkgbGF0ZXIgdmVyc2lvbi4KKysKKysvLyBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKysvLyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorKy8vIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKysvLyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorKworKy8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCisrLy8gd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLiAgSWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZQorKy8vIFNvZnR3YXJlIEZvdW5kYXRpb24sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LAorKy8vIFVTQS4KKysKKysvLyBBcyBhIHNwZWNpYWwgZXhjZXB0aW9uLCB5b3UgbWF5IHVzZSB0aGlzIGZpbGUgYXMgcGFydCBvZiBhIGZyZWUgc29mdHdhcmUKKysvLyBsaWJyYXJ5IHdpdGhvdXQgcmVzdHJpY3Rpb24uICBTcGVjaWZpY2FsbHksIGlmIG90aGVyIGZpbGVzIGluc3RhbnRpYXRlCisrLy8gdGVtcGxhdGVzIG9yIHVzZSBtYWNyb3Mgb3IgaW5saW5lIGZ1bmN0aW9ucyBmcm9tIHRoaXMgZmlsZSwgb3IgeW91IGNvbXBpbGUKKysvLyB0aGlzIGZpbGUgYW5kIGxpbmsgaXQgd2l0aCBvdGhlciBmaWxlcyB0byBwcm9kdWNlIGFuIGV4ZWN1dGFibGUsIHRoaXMKKysvLyBmaWxlIGRvZXMgbm90IGJ5IGl0c2VsZiBjYXVzZSB0aGUgcmVzdWx0aW5nIGV4ZWN1dGFibGUgdG8gYmUgY292ZXJlZCBieQorKy8vIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4gIFRoaXMgZXhjZXB0aW9uIGRvZXMgbm90IGhvd2V2ZXIKKysvLyBpbnZhbGlkYXRlIGFueSBvdGhlciByZWFzb25zIHdoeSB0aGUgZXhlY3V0YWJsZSBmaWxlIG1pZ2h0IGJlIGNvdmVyZWQgYnkKKysvLyB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UuCisrCisrLy8KKysvLyBJU08gQysrIDE0ODgyOiAyMi4yLjQuMS4yICBjb2xsYXRlIHZpcnR1YWwgZnVuY3Rpb25zCisrLy8KKysKKysvLyBXcml0dGVuIGJ5IEJlbmphbWluIEtvc25payA8YmtvekByZWRoYXQuY29tPgorKworKyNpbmNsdWRlIDxsb2NhbGU+CisrI2luY2x1ZGUgPGJpdHMvYysrbG9jYWxlX2ludGVybmFsLmg+CisrCisrI2lmbmRlZiBfX1VDTElCQ19IQVNfWExPQ0FMRV9fCisrI2RlZmluZSBfX3N0cmNvbGxfbChTMSwgUzIsIEwpICAgICAgc3RyY29sbCgoUzEpLCAoUzIpKQorKyNkZWZpbmUgX19zdHJ4ZnJtX2woUzEsIFMyLCBOLCBMKSAgIHN0cnhmcm0oKFMxKSwgKFMyKSwgKE4pKQorKyNkZWZpbmUgX193Y3Njb2xsX2woUzEsIFMyLCBMKSAgICAgIHdjc2NvbGwoKFMxKSwgKFMyKSkKKysjZGVmaW5lIF9fd2NzeGZybV9sKFMxLCBTMiwgTiwgTCkgICB3Y3N4ZnJtKChTMSksIChTMiksIChOKSkKKysjZW5kaWYKKysKKytuYW1lc3BhY2Ugc3RkCisreworKyAgLy8gVGhlc2UgYXJlIGJhc2ljYWxseSBleHRlbnNpb25zIHRvIGNoYXJfdHJhaXRzLCBhbmQgcGVyaGFwcyBzaG91bGQKKysgIC8vIGJlIHB1dCB0aGVyZSBpbnN0ZWFkIG9mIGhlcmUuCisrICB0ZW1wbGF0ZTw+CisrICAgIGludAorKyAgICBjb2xsYXRlPGNoYXI+OjpfTV9jb21wYXJlKGNvbnN0IGNoYXIqIF9fb25lLCBjb25zdCBjaGFyKiBfX3R3bykgY29uc3QKKysgICAgeworKyAgICAgIGludCBfX2NtcCA9IF9fc3RyY29sbF9sKF9fb25lLCBfX3R3bywgX01fY19sb2NhbGVfY29sbGF0ZSk7CisrICAgICAgcmV0dXJuIChfX2NtcCA+PiAoOCAqIHNpemVvZiAoaW50KSAtIDIpKSB8IChfX2NtcCAhPSAwKTsKKysgICAgfQorKworKyAgdGVtcGxhdGU8PgorKyAgICBzaXplX3QKKysgICAgY29sbGF0ZTxjaGFyPjo6X01fdHJhbnNmb3JtKGNoYXIqIF9fdG8sIGNvbnN0IGNoYXIqIF9fZnJvbSwKKysJCQkJc2l6ZV90IF9fbikgY29uc3QKKysgICAgeyByZXR1cm4gX19zdHJ4ZnJtX2woX190bywgX19mcm9tLCBfX24sIF9NX2NfbG9jYWxlX2NvbGxhdGUpOyB9CisrCisrI2lmZGVmIF9HTElCQ1hYX1VTRV9XQ0hBUl9UCisrICB0ZW1wbGF0ZTw+CisrICAgIGludAorKyAgICBjb2xsYXRlPHdjaGFyX3Q+OjpfTV9jb21wYXJlKGNvbnN0IHdjaGFyX3QqIF9fb25lLAorKwkJCQkgY29uc3Qgd2NoYXJfdCogX190d28pIGNvbnN0CisrICAgIHsKKysgICAgICBpbnQgX19jbXAgPSBfX3djc2NvbGxfbChfX29uZSwgX190d28sIF9NX2NfbG9jYWxlX2NvbGxhdGUpOworKyAgICAgIHJldHVybiAoX19jbXAgPj4gKDggKiBzaXplb2YgKGludCkgLSAyKSkgfCAoX19jbXAgIT0gMCk7CisrICAgIH0KKysKKysgIHRlbXBsYXRlPD4KKysgICAgc2l6ZV90CisrICAgIGNvbGxhdGU8d2NoYXJfdD46Ol9NX3RyYW5zZm9ybSh3Y2hhcl90KiBfX3RvLCBjb25zdCB3Y2hhcl90KiBfX2Zyb20sCisrCQkJCSAgIHNpemVfdCBfX24pIGNvbnN0CisrICAgIHsgcmV0dXJuIF9fd2NzeGZybV9sKF9fdG8sIF9fZnJvbSwgX19uLCBfTV9jX2xvY2FsZV9jb2xsYXRlKTsgfQorKyNlbmRpZgorK30KK2RpZmYgLS1naXQgYS9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvY3R5cGVfbWVtYmVycy5jYyBiL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9jdHlwZV9tZW1iZXJzLmNjCituZXcgZmlsZSBtb2RlIDEwMDY0NAoraW5kZXggMDAwMDAwMC4uNzI5NGUzYQorLS0tIC9kZXYvbnVsbAorKysrIGIvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL2N0eXBlX21lbWJlcnMuY2MKK0BAIC0wLDAgKzEsMzAwIEBACisrLy8gc3RkOjpjdHlwZSBpbXBsZW1lbnRhdGlvbiBkZXRhaWxzLCBHTlUgdmVyc2lvbiAtKi0gQysrIC0qLQorKworKy8vIENvcHlyaWdodCAoQykgMjAwMSwgMjAwMiwgMjAwMywgMjAwNCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKysvLworKy8vIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgSVNPIEMrKyBMaWJyYXJ5LiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUKKysvLyBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlciB0aGUKKysvLyB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorKy8vIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKQorKy8vIGFueSBsYXRlciB2ZXJzaW9uLgorKworKy8vIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorKy8vIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisrLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorKy8vIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisrCisrLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcKKysvLyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuICBJZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlCisrLy8gU29mdHdhcmUgRm91bmRhdGlvbiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsCisrLy8gVVNBLgorKworKy8vIEFzIGEgc3BlY2lhbCBleGNlcHRpb24sIHlvdSBtYXkgdXNlIHRoaXMgZmlsZSBhcyBwYXJ0IG9mIGEgZnJlZSBzb2Z0d2FyZQorKy8vIGxpYnJhcnkgd2l0aG91dCByZXN0cmljdGlvbi4gIFNwZWNpZmljYWxseSwgaWYgb3RoZXIgZmlsZXMgaW5zdGFudGlhdGUKKysvLyB0ZW1wbGF0ZXMgb3IgdXNlIG1hY3JvcyBvciBpbmxpbmUgZnVuY3Rpb25zIGZyb20gdGhpcyBmaWxlLCBvciB5b3UgY29tcGlsZQorKy8vIHRoaXMgZmlsZSBhbmQgbGluayBpdCB3aXRoIG90aGVyIGZpbGVzIHRvIHByb2R1Y2UgYW4gZXhlY3V0YWJsZSwgdGhpcworKy8vIGZpbGUgZG9lcyBub3QgYnkgaXRzZWxmIGNhdXNlIHRoZSByZXN1bHRpbmcgZXhlY3V0YWJsZSB0byBiZSBjb3ZlcmVkIGJ5CisrLy8gdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLiAgVGhpcyBleGNlcHRpb24gZG9lcyBub3QgaG93ZXZlcgorKy8vIGludmFsaWRhdGUgYW55IG90aGVyIHJlYXNvbnMgd2h5IHRoZSBleGVjdXRhYmxlIGZpbGUgbWlnaHQgYmUgY292ZXJlZCBieQorKy8vIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4KKysKKysvLworKy8vIElTTyBDKysgMTQ4ODI6IDIyLjIuMS4xLjIgIGN0eXBlIHZpcnR1YWwgZnVuY3Rpb25zLgorKy8vCisrCisrLy8gV3JpdHRlbiBieSBCZW5qYW1pbiBLb3NuaWsgPGJrb3pAcmVkaGF0LmNvbT4KKysKKysjZGVmaW5lIF9MSUJDCisrI2luY2x1ZGUgPGxvY2FsZT4KKysjdW5kZWYgX0xJQkMKKysjaW5jbHVkZSA8Yml0cy9jKytsb2NhbGVfaW50ZXJuYWwuaD4KKysKKysjaWZuZGVmIF9fVUNMSUJDX0hBU19YTE9DQUxFX18KKysjZGVmaW5lIF9fd2N0eXBlX2woUywgTCkgICAgICAgICAgIHdjdHlwZSgoUykpCisrI2RlZmluZSBfX3Rvd3VwcGVyX2woQywgTCkgICAgICAgICB0b3d1cHBlcigoQykpCisrI2RlZmluZSBfX3Rvd2xvd2VyX2woQywgTCkgICAgICAgICB0b3dsb3dlcigoQykpCisrI2RlZmluZSBfX2lzd2N0eXBlX2woQywgTSwgTCkgICAgICBpc3djdHlwZSgoQyksIChNKSkKKysjZW5kaWYKKysKKytuYW1lc3BhY2Ugc3RkCisreworKyAgLy8gTkI6IFRoZSBvdGhlciBjdHlwZTxjaGFyPiBzcGVjaWFsaXphdGlvbnMgYXJlIGluIHNyYy9sb2NhbGUuY2MgYW5kCisrICAvLyB2YXJpb3VzIC9jb25maWcvb3MvKiBmaWxlcy4KKysgIHRlbXBsYXRlPD4KKysgICAgY3R5cGVfYnluYW1lPGNoYXI+OjpjdHlwZV9ieW5hbWUoY29uc3QgY2hhciogX19zLCBzaXplX3QgX19yZWZzKQorKyAgICA6IGN0eXBlPGNoYXI+KDAsIGZhbHNlLCBfX3JlZnMpCisrICAgIHsKKysgICAgICBpZiAoc3RkOjpzdHJjbXAoX19zLCAiQyIpICE9IDAgJiYgc3RkOjpzdHJjbXAoX19zLCAiUE9TSVgiKSAhPSAwKQorKwl7CisrCSAgdGhpcy0+X1NfZGVzdHJveV9jX2xvY2FsZSh0aGlzLT5fTV9jX2xvY2FsZV9jdHlwZSk7CisrCSAgdGhpcy0+X1NfY3JlYXRlX2NfbG9jYWxlKHRoaXMtPl9NX2NfbG9jYWxlX2N0eXBlLCBfX3MpOworKyNpZmRlZiBfX1VDTElCQ19IQVNfWExPQ0FMRV9fCisrCSAgdGhpcy0+X01fdG91cHBlciA9IHRoaXMtPl9NX2NfbG9jYWxlX2N0eXBlLT5fX2N0eXBlX3RvdXBwZXI7CisrCSAgdGhpcy0+X01fdG9sb3dlciA9IHRoaXMtPl9NX2NfbG9jYWxlX2N0eXBlLT5fX2N0eXBlX3RvbG93ZXI7CisrCSAgdGhpcy0+X01fdGFibGUgPSB0aGlzLT5fTV9jX2xvY2FsZV9jdHlwZS0+X19jdHlwZV9iOworKyNlbmRpZgorKwl9CisrICAgIH0KKysKKysjaWZkZWYgX0dMSUJDWFhfVVNFX1dDSEFSX1QKKysgIGN0eXBlPHdjaGFyX3Q+OjpfX3dtYXNrX3R5cGUKKysgIGN0eXBlPHdjaGFyX3Q+OjpfTV9jb252ZXJ0X3RvX3dtYXNrKGNvbnN0IG1hc2sgX19tKSBjb25zdAorKyAgeworKyAgICBfX3dtYXNrX3R5cGUgX19yZXQ7CisrICAgIHN3aXRjaCAoX19tKQorKyAgICAgIHsKKysgICAgICBjYXNlIHNwYWNlOgorKwlfX3JldCA9IF9fd2N0eXBlX2woInNwYWNlIiwgX01fY19sb2NhbGVfY3R5cGUpOworKwlicmVhazsKKysgICAgICBjYXNlIHByaW50OgorKwlfX3JldCA9IF9fd2N0eXBlX2woInByaW50IiwgX01fY19sb2NhbGVfY3R5cGUpOworKwlicmVhazsKKysgICAgICBjYXNlIGNudHJsOgorKwlfX3JldCA9IF9fd2N0eXBlX2woImNudHJsIiwgX01fY19sb2NhbGVfY3R5cGUpOworKwlicmVhazsKKysgICAgICBjYXNlIHVwcGVyOgorKwlfX3JldCA9IF9fd2N0eXBlX2woInVwcGVyIiwgX01fY19sb2NhbGVfY3R5cGUpOworKwlicmVhazsKKysgICAgICBjYXNlIGxvd2VyOgorKwlfX3JldCA9IF9fd2N0eXBlX2woImxvd2VyIiwgX01fY19sb2NhbGVfY3R5cGUpOworKwlicmVhazsKKysgICAgICBjYXNlIGFscGhhOgorKwlfX3JldCA9IF9fd2N0eXBlX2woImFscGhhIiwgX01fY19sb2NhbGVfY3R5cGUpOworKwlicmVhazsKKysgICAgICBjYXNlIGRpZ2l0OgorKwlfX3JldCA9IF9fd2N0eXBlX2woImRpZ2l0IiwgX01fY19sb2NhbGVfY3R5cGUpOworKwlicmVhazsKKysgICAgICBjYXNlIHB1bmN0OgorKwlfX3JldCA9IF9fd2N0eXBlX2woInB1bmN0IiwgX01fY19sb2NhbGVfY3R5cGUpOworKwlicmVhazsKKysgICAgICBjYXNlIHhkaWdpdDoKKysJX19yZXQgPSBfX3djdHlwZV9sKCJ4ZGlnaXQiLCBfTV9jX2xvY2FsZV9jdHlwZSk7CisrCWJyZWFrOworKyAgICAgIGNhc2UgYWxudW06CisrCV9fcmV0ID0gX193Y3R5cGVfbCgiYWxudW0iLCBfTV9jX2xvY2FsZV9jdHlwZSk7CisrCWJyZWFrOworKyAgICAgIGNhc2UgZ3JhcGg6CisrCV9fcmV0ID0gX193Y3R5cGVfbCgiZ3JhcGgiLCBfTV9jX2xvY2FsZV9jdHlwZSk7CisrCWJyZWFrOworKyAgICAgIGRlZmF1bHQ6CisrCV9fcmV0ID0gX193bWFza190eXBlKCk7CisrICAgICAgfQorKyAgICByZXR1cm4gX19yZXQ7CisrICB9CisrCisrICB3Y2hhcl90CisrICBjdHlwZTx3Y2hhcl90Pjo6ZG9fdG91cHBlcih3Y2hhcl90IF9fYykgY29uc3QKKysgIHsgcmV0dXJuIF9fdG93dXBwZXJfbChfX2MsIF9NX2NfbG9jYWxlX2N0eXBlKTsgfQorKworKyAgY29uc3Qgd2NoYXJfdCoKKysgIGN0eXBlPHdjaGFyX3Q+Ojpkb190b3VwcGVyKHdjaGFyX3QqIF9fbG8sIGNvbnN0IHdjaGFyX3QqIF9faGkpIGNvbnN0CisrICB7CisrICAgIHdoaWxlIChfX2xvIDwgX19oaSkKKysgICAgICB7CisrICAgICAgICAqX19sbyA9IF9fdG93dXBwZXJfbCgqX19sbywgX01fY19sb2NhbGVfY3R5cGUpOworKyAgICAgICAgKytfX2xvOworKyAgICAgIH0KKysgICAgcmV0dXJuIF9faGk7CisrICB9CisrCisrICB3Y2hhcl90CisrICBjdHlwZTx3Y2hhcl90Pjo6ZG9fdG9sb3dlcih3Y2hhcl90IF9fYykgY29uc3QKKysgIHsgcmV0dXJuIF9fdG93bG93ZXJfbChfX2MsIF9NX2NfbG9jYWxlX2N0eXBlKTsgfQorKworKyAgY29uc3Qgd2NoYXJfdCoKKysgIGN0eXBlPHdjaGFyX3Q+Ojpkb190b2xvd2VyKHdjaGFyX3QqIF9fbG8sIGNvbnN0IHdjaGFyX3QqIF9faGkpIGNvbnN0CisrICB7CisrICAgIHdoaWxlIChfX2xvIDwgX19oaSkKKysgICAgICB7CisrICAgICAgICAqX19sbyA9IF9fdG93bG93ZXJfbCgqX19sbywgX01fY19sb2NhbGVfY3R5cGUpOworKyAgICAgICAgKytfX2xvOworKyAgICAgIH0KKysgICAgcmV0dXJuIF9faGk7CisrICB9CisrCisrICBib29sCisrICBjdHlwZTx3Y2hhcl90Pjo6CisrICBkb19pcyhtYXNrIF9fbSwgd2NoYXJfdCBfX2MpIGNvbnN0CisrICB7CisrICAgIC8vIEhpZ2hlc3QgYml0bWFzayBpbiBjdHlwZV9iYXNlID09IDEwLCBidXQgZXh0cmEgaW4gIkMiCisrICAgIC8vIGxpYnJhcnkgZm9yIGJsYW5rLgorKyAgICBib29sIF9fcmV0ID0gZmFsc2U7CisrICAgIGNvbnN0IHNpemVfdCBfX2JpdG1hc2tzaXplID0gMTE7CisrICAgIGZvciAoc2l6ZV90IF9fYml0Y3VyID0gMDsgX19iaXRjdXIgPD0gX19iaXRtYXNrc2l6ZTsgKytfX2JpdGN1cikKKysgICAgICBpZiAoX19tICYgX01fYml0W19fYml0Y3VyXQorKwkgICYmIF9faXN3Y3R5cGVfbChfX2MsIF9NX3dtYXNrW19fYml0Y3VyXSwgX01fY19sb2NhbGVfY3R5cGUpKQorKwl7CisrCSAgX19yZXQgPSB0cnVlOworKwkgIGJyZWFrOworKwl9CisrICAgIHJldHVybiBfX3JldDsKKysgIH0KKysKKysgIGNvbnN0IHdjaGFyX3QqCisrICBjdHlwZTx3Y2hhcl90Pjo6CisrICBkb19pcyhjb25zdCB3Y2hhcl90KiBfX2xvLCBjb25zdCB3Y2hhcl90KiBfX2hpLCBtYXNrKiBfX3ZlYykgY29uc3QKKysgIHsKKysgICAgZm9yICg7IF9fbG8gPCBfX2hpOyArK19fdmVjLCArK19fbG8pCisrICAgICAgeworKwkvLyBIaWdoZXN0IGJpdG1hc2sgaW4gY3R5cGVfYmFzZSA9PSAxMCwgYnV0IGV4dHJhIGluICJDIgorKwkvLyBsaWJyYXJ5IGZvciBibGFuay4KKysJY29uc3Qgc2l6ZV90IF9fYml0bWFza3NpemUgPSAxMTsKKysJbWFzayBfX20gPSAwOworKwlmb3IgKHNpemVfdCBfX2JpdGN1ciA9IDA7IF9fYml0Y3VyIDw9IF9fYml0bWFza3NpemU7ICsrX19iaXRjdXIpCisrCSAgaWYgKF9faXN3Y3R5cGVfbCgqX19sbywgX01fd21hc2tbX19iaXRjdXJdLCBfTV9jX2xvY2FsZV9jdHlwZSkpCisrCSAgICBfX20gfD0gX01fYml0W19fYml0Y3VyXTsKKysJKl9fdmVjID0gX19tOworKyAgICAgIH0KKysgICAgcmV0dXJuIF9faGk7CisrICB9CisrCisrICBjb25zdCB3Y2hhcl90KgorKyAgY3R5cGU8d2NoYXJfdD46OgorKyAgZG9fc2Nhbl9pcyhtYXNrIF9fbSwgY29uc3Qgd2NoYXJfdCogX19sbywgY29uc3Qgd2NoYXJfdCogX19oaSkgY29uc3QKKysgIHsKKysgICAgd2hpbGUgKF9fbG8gPCBfX2hpICYmICF0aGlzLT5kb19pcyhfX20sICpfX2xvKSkKKysgICAgICArK19fbG87CisrICAgIHJldHVybiBfX2xvOworKyAgfQorKworKyAgY29uc3Qgd2NoYXJfdCoKKysgIGN0eXBlPHdjaGFyX3Q+OjoKKysgIGRvX3NjYW5fbm90KG1hc2sgX19tLCBjb25zdCBjaGFyX3R5cGUqIF9fbG8sIGNvbnN0IGNoYXJfdHlwZSogX19oaSkgY29uc3QKKysgIHsKKysgICAgd2hpbGUgKF9fbG8gPCBfX2hpICYmIHRoaXMtPmRvX2lzKF9fbSwgKl9fbG8pICE9IDApCisrICAgICAgKytfX2xvOworKyAgICByZXR1cm4gX19sbzsKKysgIH0KKysKKysgIHdjaGFyX3QKKysgIGN0eXBlPHdjaGFyX3Q+OjoKKysgIGRvX3dpZGVuKGNoYXIgX19jKSBjb25zdAorKyAgeyByZXR1cm4gX01fd2lkZW5bc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcj4oX19jKV07IH0KKysKKysgIGNvbnN0IGNoYXIqCisrICBjdHlwZTx3Y2hhcl90Pjo6CisrICBkb193aWRlbihjb25zdCBjaGFyKiBfX2xvLCBjb25zdCBjaGFyKiBfX2hpLCB3Y2hhcl90KiBfX2Rlc3QpIGNvbnN0CisrICB7CisrICAgIHdoaWxlIChfX2xvIDwgX19oaSkKKysgICAgICB7CisrCSpfX2Rlc3QgPSBfTV93aWRlbltzdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyPigqX19sbyldOworKwkrK19fbG87CisrCSsrX19kZXN0OworKyAgICAgIH0KKysgICAgcmV0dXJuIF9faGk7CisrICB9CisrCisrICBjaGFyCisrICBjdHlwZTx3Y2hhcl90Pjo6CisrICBkb19uYXJyb3cod2NoYXJfdCBfX3djLCBjaGFyIF9fZGZhdWx0KSBjb25zdAorKyAgeworKyAgICBpZiAoX193YyA+PSAwICYmIF9fd2MgPCAxMjggJiYgX01fbmFycm93X29rKQorKyAgICAgIHJldHVybiBfTV9uYXJyb3dbX193Y107CisrI2lmZGVmIF9fVUNMSUJDX0hBU19YTE9DQUxFX18KKysgICAgX19jX2xvY2FsZSBfX29sZCA9IF9fdXNlbG9jYWxlKF9NX2NfbG9jYWxlX2N0eXBlKTsKKysjZW5kaWYKKysgICAgY29uc3QgaW50IF9fYyA9IHdjdG9iKF9fd2MpOworKyNpZmRlZiBfX1VDTElCQ19IQVNfWExPQ0FMRV9fCisrICAgIF9fdXNlbG9jYWxlKF9fb2xkKTsKKysjZW5kaWYKKysgICAgcmV0dXJuIChfX2MgPT0gRU9GID8gX19kZmF1bHQgOiBzdGF0aWNfY2FzdDxjaGFyPihfX2MpKTsKKysgIH0KKysKKysgIGNvbnN0IHdjaGFyX3QqCisrICBjdHlwZTx3Y2hhcl90Pjo6CisrICBkb19uYXJyb3coY29uc3Qgd2NoYXJfdCogX19sbywgY29uc3Qgd2NoYXJfdCogX19oaSwgY2hhciBfX2RmYXVsdCwKKysJICAgIGNoYXIqIF9fZGVzdCkgY29uc3QKKysgIHsKKysjaWZkZWYgX19VQ0xJQkNfSEFTX1hMT0NBTEVfXworKyAgICBfX2NfbG9jYWxlIF9fb2xkID0gX191c2Vsb2NhbGUoX01fY19sb2NhbGVfY3R5cGUpOworKyNlbmRpZgorKyAgICBpZiAoX01fbmFycm93X29rKQorKyAgICAgIHdoaWxlIChfX2xvIDwgX19oaSkKKysJeworKwkgIGlmICgqX19sbyA+PSAwICYmICpfX2xvIDwgMTI4KQorKwkgICAgKl9fZGVzdCA9IF9NX25hcnJvd1sqX19sb107CisrCSAgZWxzZQorKwkgICAgeworKwkgICAgICBjb25zdCBpbnQgX19jID0gd2N0b2IoKl9fbG8pOworKwkgICAgICAqX19kZXN0ID0gKF9fYyA9PSBFT0YgPyBfX2RmYXVsdCA6IHN0YXRpY19jYXN0PGNoYXI+KF9fYykpOworKwkgICAgfQorKwkgICsrX19sbzsKKysJICArK19fZGVzdDsKKysJfQorKyAgICBlbHNlCisrICAgICAgd2hpbGUgKF9fbG8gPCBfX2hpKQorKwl7CisrCSAgY29uc3QgaW50IF9fYyA9IHdjdG9iKCpfX2xvKTsKKysJICAqX19kZXN0ID0gKF9fYyA9PSBFT0YgPyBfX2RmYXVsdCA6IHN0YXRpY19jYXN0PGNoYXI+KF9fYykpOworKwkgICsrX19sbzsKKysJICArK19fZGVzdDsKKysJfQorKyNpZmRlZiBfX1VDTElCQ19IQVNfWExPQ0FMRV9fCisrICAgIF9fdXNlbG9jYWxlKF9fb2xkKTsKKysjZW5kaWYKKysgICAgcmV0dXJuIF9faGk7CisrICB9CisrCisrICB2b2lkCisrICBjdHlwZTx3Y2hhcl90Pjo6X01faW5pdGlhbGl6ZV9jdHlwZSgpCisrICB7CisrI2lmZGVmIF9fVUNMSUJDX0hBU19YTE9DQUxFX18KKysgICAgX19jX2xvY2FsZSBfX29sZCA9IF9fdXNlbG9jYWxlKF9NX2NfbG9jYWxlX2N0eXBlKTsKKysjZW5kaWYKKysgICAgd2ludF90IF9faTsKKysgICAgZm9yIChfX2kgPSAwOyBfX2kgPCAxMjg7ICsrX19pKQorKyAgICAgIHsKKysJY29uc3QgaW50IF9fYyA9IHdjdG9iKF9faSk7CisrCWlmIChfX2MgPT0gRU9GKQorKwkgIGJyZWFrOworKwllbHNlCisrCSAgX01fbmFycm93W19faV0gPSBzdGF0aWNfY2FzdDxjaGFyPihfX2MpOworKyAgICAgIH0KKysgICAgaWYgKF9faSA9PSAxMjgpCisrICAgICAgX01fbmFycm93X29rID0gdHJ1ZTsKKysgICAgZWxzZQorKyAgICAgIF9NX25hcnJvd19vayA9IGZhbHNlOworKyAgICBmb3IgKHNpemVfdCBfX2ogPSAwOworKwkgX19qIDwgc2l6ZW9mKF9NX3dpZGVuKSAvIHNpemVvZih3aW50X3QpOyArK19faikKKysgICAgICBfTV93aWRlbltfX2pdID0gYnRvd2MoX19qKTsKKysKKysgICAgZm9yIChzaXplX3QgX19rID0gMDsgX19rIDw9IDExOyArK19faykKKysgICAgICB7CisrCV9NX2JpdFtfX2tdID0gc3RhdGljX2Nhc3Q8bWFzaz4oX0lTYml0KF9faykpOworKwlfTV93bWFza1tfX2tdID0gX01fY29udmVydF90b193bWFzayhfTV9iaXRbX19rXSk7CisrICAgICAgfQorKyNpZmRlZiBfX1VDTElCQ19IQVNfWExPQ0FMRV9fCisrICAgIF9fdXNlbG9jYWxlKF9fb2xkKTsKKysjZW5kaWYKKysgIH0KKysjZW5kaWYgLy8gIF9HTElCQ1hYX1VTRV9XQ0hBUl9UCisrfQorZGlmZiAtLWdpdCBhL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9tZXNzYWdlc19tZW1iZXJzLmNjIGIvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL21lc3NhZ2VzX21lbWJlcnMuY2MKK25ldyBmaWxlIG1vZGUgMTAwNjQ0CitpbmRleCAwMDAwMDAwLi4xMzU5NGQ5CistLS0gL2Rldi9udWxsCisrKysgYi9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvbWVzc2FnZXNfbWVtYmVycy5jYworQEAgLTAsMCArMSwxMDAgQEAKKysvLyBzdGQ6Om1lc3NhZ2VzIGltcGxlbWVudGF0aW9uIGRldGFpbHMsIEdOVSB2ZXJzaW9uIC0qLSBDKysgLSotCisrCisrLy8gQ29weXJpZ2h0IChDKSAyMDAxLCAyMDAyIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorKy8vCisrLy8gVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBJU08gQysrIExpYnJhcnkuICBUaGlzIGxpYnJhcnkgaXMgZnJlZQorKy8vIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyIHRoZQorKy8vIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCisrLy8gRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pCisrLy8gYW55IGxhdGVyIHZlcnNpb24uCisrCisrLy8gVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisrLy8gYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKysvLyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisrLy8gR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKysKKysvLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZworKy8vIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy4gIElmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUKKysvLyBTb2Z0d2FyZSBGb3VuZGF0aW9uLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywKKysvLyBVU0EuCisrCisrLy8gQXMgYSBzcGVjaWFsIGV4Y2VwdGlvbiwgeW91IG1heSB1c2UgdGhpcyBmaWxlIGFzIHBhcnQgb2YgYSBmcmVlIHNvZnR3YXJlCisrLy8gbGlicmFyeSB3aXRob3V0IHJlc3RyaWN0aW9uLiAgU3BlY2lmaWNhbGx5LCBpZiBvdGhlciBmaWxlcyBpbnN0YW50aWF0ZQorKy8vIHRlbXBsYXRlcyBvciB1c2UgbWFjcm9zIG9yIGlubGluZSBmdW5jdGlvbnMgZnJvbSB0aGlzIGZpbGUsIG9yIHlvdSBjb21waWxlCisrLy8gdGhpcyBmaWxlIGFuZCBsaW5rIGl0IHdpdGggb3RoZXIgZmlsZXMgdG8gcHJvZHVjZSBhbiBleGVjdXRhYmxlLCB0aGlzCisrLy8gZmlsZSBkb2VzIG5vdCBieSBpdHNlbGYgY2F1c2UgdGhlIHJlc3VsdGluZyBleGVjdXRhYmxlIHRvIGJlIGNvdmVyZWQgYnkKKysvLyB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UuICBUaGlzIGV4Y2VwdGlvbiBkb2VzIG5vdCBob3dldmVyCisrLy8gaW52YWxpZGF0ZSBhbnkgb3RoZXIgcmVhc29ucyB3aHkgdGhlIGV4ZWN1dGFibGUgZmlsZSBtaWdodCBiZSBjb3ZlcmVkIGJ5CisrLy8gdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLgorKworKy8vCisrLy8gSVNPIEMrKyAxNDg4MjogMjIuMi43LjEuMiAgbWVzc2FnZXMgdmlydHVhbCBmdW5jdGlvbnMKKysvLworKworKy8vIFdyaXR0ZW4gYnkgQmVuamFtaW4gS29zbmlrIDxia296QHJlZGhhdC5jb20+CisrCisrI2luY2x1ZGUgPGxvY2FsZT4KKysjaW5jbHVkZSA8Yml0cy9jKytsb2NhbGVfaW50ZXJuYWwuaD4KKysKKysjaWZkZWYgX19VQ0xJQkNfTUpOM19PTkxZX18KKysjd2FybmluZyBmaXggZ2V0dGV4dCBzdHVmZgorKyNlbmRpZgorKyNpZmRlZiBfX1VDTElCQ19IQVNfR0VUVEVYVF9BV0FSRU5FU1NfXworK2V4dGVybiAiQyIgY2hhciAqX19kY2dldHRleHQoY29uc3QgY2hhciAqZG9tYWlubmFtZSwKKysJCQkgICAgIGNvbnN0IGNoYXIgKm1zZ2lkLCBpbnQgY2F0ZWdvcnkpOworKyN1bmRlZiBnZXR0ZXh0CisrI2RlZmluZSBnZXR0ZXh0KG1zZ2lkKSBfX2RjZ2V0dGV4dChOVUxMLCBtc2dpZCwgTENfTUVTU0FHRVMpCisrI2Vsc2UKKysjdW5kZWYgZ2V0dGV4dAorKyNkZWZpbmUgZ2V0dGV4dChtc2dpZCkgKG1zZ2lkKQorKyNlbmRpZgorKworK25hbWVzcGFjZSBzdGQKKyt7CisrICAvLyBTcGVjaWFsaXphdGlvbnMuCisrICB0ZW1wbGF0ZTw+CisrICAgIHN0cmluZworKyAgICBtZXNzYWdlczxjaGFyPjo6ZG9fZ2V0KGNhdGFsb2csIGludCwgaW50LCBjb25zdCBzdHJpbmcmIF9fZGZhdWx0KSBjb25zdAorKyAgICB7CisrI2lmZGVmIF9fVUNMSUJDX0hBU19YTE9DQUxFX18KKysgICAgICBfX2NfbG9jYWxlIF9fb2xkID0gX191c2Vsb2NhbGUoX01fY19sb2NhbGVfbWVzc2FnZXMpOworKyAgICAgIGNvbnN0IGNoYXIqIF9fbXNnID0gY29uc3RfY2FzdDxjb25zdCBjaGFyKj4oZ2V0dGV4dChfX2RmYXVsdC5jX3N0cigpKSk7CisrICAgICAgX191c2Vsb2NhbGUoX19vbGQpOworKyAgICAgIHJldHVybiBzdHJpbmcoX19tc2cpOworKyNlbGlmIGRlZmluZWQgX19VQ0xJQkNfSEFTX0xPQ0FMRV9fCisrICAgICAgY2hhciogX19vbGQgPSBzdHJkdXAoc2V0bG9jYWxlKExDX0FMTCwgTlVMTCkpOworKyAgICAgIHNldGxvY2FsZShMQ19BTEwsIF9NX25hbWVfbWVzc2FnZXMpOworKyAgICAgIGNvbnN0IGNoYXIqIF9fbXNnID0gZ2V0dGV4dChfX2RmYXVsdC5jX3N0cigpKTsKKysgICAgICBzZXRsb2NhbGUoTENfQUxMLCBfX29sZCk7CisrICAgICAgZnJlZShfX29sZCk7CisrICAgICAgcmV0dXJuIHN0cmluZyhfX21zZyk7CisrI2Vsc2UKKysgICAgICBjb25zdCBjaGFyKiBfX21zZyA9IGdldHRleHQoX19kZmF1bHQuY19zdHIoKSk7CisrICAgICAgcmV0dXJuIHN0cmluZyhfX21zZyk7CisrI2VuZGlmCisrICAgIH0KKysKKysjaWZkZWYgX0dMSUJDWFhfVVNFX1dDSEFSX1QKKysgIHRlbXBsYXRlPD4KKysgICAgd3N0cmluZworKyAgICBtZXNzYWdlczx3Y2hhcl90Pjo6ZG9fZ2V0KGNhdGFsb2csIGludCwgaW50LCBjb25zdCB3c3RyaW5nJiBfX2RmYXVsdCkgY29uc3QKKysgICAgeworKyMgaWZkZWYgX19VQ0xJQkNfSEFTX1hMT0NBTEVfXworKyAgICAgIF9fY19sb2NhbGUgX19vbGQgPSBfX3VzZWxvY2FsZShfTV9jX2xvY2FsZV9tZXNzYWdlcyk7CisrICAgICAgY2hhciogX19tc2cgPSBnZXR0ZXh0KF9NX2NvbnZlcnRfdG9fY2hhcihfX2RmYXVsdCkpOworKyAgICAgIF9fdXNlbG9jYWxlKF9fb2xkKTsKKysgICAgICByZXR1cm4gX01fY29udmVydF9mcm9tX2NoYXIoX19tc2cpOworKyMgZWxpZiBkZWZpbmVkIF9fVUNMSUJDX0hBU19MT0NBTEVfXworKyAgICAgIGNoYXIqIF9fb2xkID0gc3RyZHVwKHNldGxvY2FsZShMQ19BTEwsIE5VTEwpKTsKKysgICAgICBzZXRsb2NhbGUoTENfQUxMLCBfTV9uYW1lX21lc3NhZ2VzKTsKKysgICAgICBjaGFyKiBfX21zZyA9IGdldHRleHQoX01fY29udmVydF90b19jaGFyKF9fZGZhdWx0KSk7CisrICAgICAgc2V0bG9jYWxlKExDX0FMTCwgX19vbGQpOworKyAgICAgIGZyZWUoX19vbGQpOworKyAgICAgIHJldHVybiBfTV9jb252ZXJ0X2Zyb21fY2hhcihfX21zZyk7CisrIyBlbHNlCisrICAgICAgY2hhciogX19tc2cgPSBnZXR0ZXh0KF9NX2NvbnZlcnRfdG9fY2hhcihfX2RmYXVsdCkpOworKyAgICAgIHJldHVybiBfTV9jb252ZXJ0X2Zyb21fY2hhcihfX21zZyk7CisrIyBlbmRpZgorKyAgICB9CisrI2VuZGlmCisrfQorZGlmZiAtLWdpdCBhL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9tZXNzYWdlc19tZW1iZXJzLmggYi9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvbWVzc2FnZXNfbWVtYmVycy5oCituZXcgZmlsZSBtb2RlIDEwMDY0NAoraW5kZXggMDAwMDAwMC4uMTQyNDA3OAorLS0tIC9kZXYvbnVsbAorKysrIGIvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL21lc3NhZ2VzX21lbWJlcnMuaAorQEAgLTAsMCArMSwxMTggQEAKKysvLyBzdGQ6Om1lc3NhZ2VzIGltcGxlbWVudGF0aW9uIGRldGFpbHMsIEdOVSB2ZXJzaW9uIC0qLSBDKysgLSotCisrCisrLy8gQ29weXJpZ2h0IChDKSAyMDAxLCAyMDAyLCAyMDAzLCAyMDA0IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorKy8vCisrLy8gVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBJU08gQysrIExpYnJhcnkuICBUaGlzIGxpYnJhcnkgaXMgZnJlZQorKy8vIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyIHRoZQorKy8vIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCisrLy8gRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pCisrLy8gYW55IGxhdGVyIHZlcnNpb24uCisrCisrLy8gVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisrLy8gYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKysvLyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisrLy8gR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKysKKysvLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZworKy8vIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy4gIElmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUKKysvLyBTb2Z0d2FyZSBGb3VuZGF0aW9uLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywKKysvLyBVU0EuCisrCisrLy8gQXMgYSBzcGVjaWFsIGV4Y2VwdGlvbiwgeW91IG1heSB1c2UgdGhpcyBmaWxlIGFzIHBhcnQgb2YgYSBmcmVlIHNvZnR3YXJlCisrLy8gbGlicmFyeSB3aXRob3V0IHJlc3RyaWN0aW9uLiAgU3BlY2lmaWNhbGx5LCBpZiBvdGhlciBmaWxlcyBpbnN0YW50aWF0ZQorKy8vIHRlbXBsYXRlcyBvciB1c2UgbWFjcm9zIG9yIGlubGluZSBmdW5jdGlvbnMgZnJvbSB0aGlzIGZpbGUsIG9yIHlvdSBjb21waWxlCisrLy8gdGhpcyBmaWxlIGFuZCBsaW5rIGl0IHdpdGggb3RoZXIgZmlsZXMgdG8gcHJvZHVjZSBhbiBleGVjdXRhYmxlLCB0aGlzCisrLy8gZmlsZSBkb2VzIG5vdCBieSBpdHNlbGYgY2F1c2UgdGhlIHJlc3VsdGluZyBleGVjdXRhYmxlIHRvIGJlIGNvdmVyZWQgYnkKKysvLyB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UuICBUaGlzIGV4Y2VwdGlvbiBkb2VzIG5vdCBob3dldmVyCisrLy8gaW52YWxpZGF0ZSBhbnkgb3RoZXIgcmVhc29ucyB3aHkgdGhlIGV4ZWN1dGFibGUgZmlsZSBtaWdodCBiZSBjb3ZlcmVkIGJ5CisrLy8gdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLgorKworKy8vCisrLy8gSVNPIEMrKyAxNDg4MjogMjIuMi43LjEuMiAgbWVzc2FnZXMgZnVuY3Rpb25zCisrLy8KKysKKysvLyBXcml0dGVuIGJ5IEJlbmphbWluIEtvc25payA8YmtvekByZWRoYXQuY29tPgorKworKyNpZmRlZiBfX1VDTElCQ19NSk4zX09OTFlfXworKyN3YXJuaW5nIGZpeCBwcm90b3R5cGVzIGZvciAqdGV4dGRvbWFpbiBmdW5jcworKyNlbmRpZgorKyNpZmRlZiBfX1VDTElCQ19IQVNfR0VUVEVYVF9BV0FSRU5FU1NfXworK2V4dGVybiAiQyIgY2hhciAqX190ZXh0ZG9tYWluKGNvbnN0IGNoYXIgKmRvbWFpbm5hbWUpOworK2V4dGVybiAiQyIgY2hhciAqX19iaW5kdGV4dGRvbWFpbihjb25zdCBjaGFyICpkb21haW5uYW1lLAorKwkJCQkgIGNvbnN0IGNoYXIgKmRpcm5hbWUpOworKyNlbHNlCisrI3VuZGVmIF9fdGV4dGRvbWFpbgorKyN1bmRlZiBfX2JpbmR0ZXh0ZG9tYWluCisrI2RlZmluZSBfX3RleHRkb21haW4oRCkgICAgICAgICAgICgodm9pZCkwKQorKyNkZWZpbmUgX19iaW5kdGV4dGRvbWFpbihELFApICAgICAoKHZvaWQpMCkKKysjZW5kaWYKKysKKysgIC8vIE5vbi12aXJ0dWFsIG1lbWJlciBmdW5jdGlvbnMuCisrICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+CisrICAgICBtZXNzYWdlczxfQ2hhclQ+OjptZXNzYWdlcyhzaXplX3QgX19yZWZzKQorKyAgICAgOiBmYWNldChfX3JlZnMpLCBfTV9jX2xvY2FsZV9tZXNzYWdlcyhfU19nZXRfY19sb2NhbGUoKSksCisrICAgICBfTV9uYW1lX21lc3NhZ2VzKF9TX2dldF9jX25hbWUoKSkKKysgICAgIHsgfQorKworKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPgorKyAgICAgbWVzc2FnZXM8X0NoYXJUPjo6bWVzc2FnZXMoX19jX2xvY2FsZSBfX2Nsb2MsIGNvbnN0IGNoYXIqIF9fcywKKysJCQkJc2l6ZV90IF9fcmVmcykKKysgICAgIDogZmFjZXQoX19yZWZzKSwgX01fY19sb2NhbGVfbWVzc2FnZXMoX1NfY2xvbmVfY19sb2NhbGUoX19jbG9jKSksCisrICAgICBfTV9uYW1lX21lc3NhZ2VzKF9fcykKKysgICAgIHsKKysgICAgICAgY2hhciogX190bXAgPSBuZXcgY2hhcltzdGQ6OnN0cmxlbihfX3MpICsgMV07CisrICAgICAgIHN0ZDo6c3RyY3B5KF9fdG1wLCBfX3MpOworKyAgICAgICBfTV9uYW1lX21lc3NhZ2VzID0gX190bXA7CisrICAgICB9CisrCisrICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+CisrICAgIHR5cGVuYW1lIG1lc3NhZ2VzPF9DaGFyVD46OmNhdGFsb2cKKysgICAgbWVzc2FnZXM8X0NoYXJUPjo6b3Blbihjb25zdCBiYXNpY19zdHJpbmc8Y2hhcj4mIF9fcywgY29uc3QgbG9jYWxlJiBfX2xvYywKKysJCQkgICBjb25zdCBjaGFyKiBfX2RpcikgY29uc3QKKysgICAgeworKyAgICAgIF9fYmluZHRleHRkb21haW4oX19zLmNfc3RyKCksIF9fZGlyKTsKKysgICAgICByZXR1cm4gdGhpcy0+ZG9fb3BlbihfX3MsIF9fbG9jKTsKKysgICAgfQorKworKyAgLy8gVmlydHVhbCBtZW1iZXIgZnVuY3Rpb25zLgorKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPgorKyAgICBtZXNzYWdlczxfQ2hhclQ+Ojp+bWVzc2FnZXMoKQorKyAgICB7CisrICAgICAgaWYgKF9NX25hbWVfbWVzc2FnZXMgIT0gX1NfZ2V0X2NfbmFtZSgpKQorKwlkZWxldGUgW10gX01fbmFtZV9tZXNzYWdlczsKKysgICAgICBfU19kZXN0cm95X2NfbG9jYWxlKF9NX2NfbG9jYWxlX21lc3NhZ2VzKTsKKysgICAgfQorKworKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPgorKyAgICB0eXBlbmFtZSBtZXNzYWdlczxfQ2hhclQ+OjpjYXRhbG9nCisrICAgIG1lc3NhZ2VzPF9DaGFyVD46OmRvX29wZW4oY29uc3QgYmFzaWNfc3RyaW5nPGNoYXI+JiBfX3MsCisrCQkJICAgICAgY29uc3QgbG9jYWxlJikgY29uc3QKKysgICAgeworKyAgICAgIC8vIE5vIGVycm9yIGNoZWNraW5nIGlzIGRvbmUsIGFzc3VtZSB0aGUgY2F0YWxvZyBleGlzdHMgYW5kIGNhbgorKyAgICAgIC8vIGJlIHVzZWQuCisrICAgICAgX190ZXh0ZG9tYWluKF9fcy5jX3N0cigpKTsKKysgICAgICByZXR1cm4gMDsKKysgICAgfQorKworKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPgorKyAgICB2b2lkCisrICAgIG1lc3NhZ2VzPF9DaGFyVD46OmRvX2Nsb3NlKGNhdGFsb2cpIGNvbnN0CisrICAgIHsgfQorKworKyAgIC8vIG1lc3NhZ2VzX2J5bmFtZQorKyAgIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4KKysgICAgIG1lc3NhZ2VzX2J5bmFtZTxfQ2hhclQ+OjptZXNzYWdlc19ieW5hbWUoY29uc3QgY2hhciogX19zLCBzaXplX3QgX19yZWZzKQorKyAgICAgOiBtZXNzYWdlczxfQ2hhclQ+KF9fcmVmcykKKysgICAgIHsKKysgICAgICAgaWYgKHRoaXMtPl9NX25hbWVfbWVzc2FnZXMgIT0gbG9jYWxlOjpmYWNldDo6X1NfZ2V0X2NfbmFtZSgpKQorKwkgZGVsZXRlIFtdIHRoaXMtPl9NX25hbWVfbWVzc2FnZXM7CisrICAgICAgIGNoYXIqIF9fdG1wID0gbmV3IGNoYXJbc3RkOjpzdHJsZW4oX19zKSArIDFdOworKyAgICAgICBzdGQ6OnN0cmNweShfX3RtcCwgX19zKTsKKysgICAgICAgdGhpcy0+X01fbmFtZV9tZXNzYWdlcyA9IF9fdG1wOworKworKyAgICAgICBpZiAoc3RkOjpzdHJjbXAoX19zLCAiQyIpICE9IDAgJiYgc3RkOjpzdHJjbXAoX19zLCAiUE9TSVgiKSAhPSAwKQorKwkgeworKwkgICB0aGlzLT5fU19kZXN0cm95X2NfbG9jYWxlKHRoaXMtPl9NX2NfbG9jYWxlX21lc3NhZ2VzKTsKKysJICAgdGhpcy0+X1NfY3JlYXRlX2NfbG9jYWxlKHRoaXMtPl9NX2NfbG9jYWxlX21lc3NhZ2VzLCBfX3MpOworKwkgfQorKyAgICAgfQorZGlmZiAtLWdpdCBhL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9tb25ldGFyeV9tZW1iZXJzLmNjIGIvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL21vbmV0YXJ5X21lbWJlcnMuY2MKK25ldyBmaWxlIG1vZGUgMTAwNjQ0CitpbmRleCAwMDAwMDAwLi5hYTUyNzMxCistLS0gL2Rldi9udWxsCisrKysgYi9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvbW9uZXRhcnlfbWVtYmVycy5jYworQEAgLTAsMCArMSw2OTIgQEAKKysvLyBzdGQ6Om1vbmV5cHVuY3QgaW1wbGVtZW50YXRpb24gZGV0YWlscywgR05VIHZlcnNpb24gLSotIEMrKyAtKi0KKysKKysvLyBDb3B5cmlnaHQgKEMpIDIwMDEsIDIwMDIsIDIwMDMsIDIwMDQgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisrLy8KKysvLyBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIElTTyBDKysgTGlicmFyeS4gIFRoaXMgbGlicmFyeSBpcyBmcmVlCisrLy8gc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIgdGhlCisrLy8gdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKKysvLyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikKKysvLyBhbnkgbGF0ZXIgdmVyc2lvbi4KKysKKysvLyBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKysvLyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorKy8vIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKysvLyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorKworKy8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCisrLy8gd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLiAgSWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZQorKy8vIFNvZnR3YXJlIEZvdW5kYXRpb24sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LAorKy8vIFVTQS4KKysKKysvLyBBcyBhIHNwZWNpYWwgZXhjZXB0aW9uLCB5b3UgbWF5IHVzZSB0aGlzIGZpbGUgYXMgcGFydCBvZiBhIGZyZWUgc29mdHdhcmUKKysvLyBsaWJyYXJ5IHdpdGhvdXQgcmVzdHJpY3Rpb24uICBTcGVjaWZpY2FsbHksIGlmIG90aGVyIGZpbGVzIGluc3RhbnRpYXRlCisrLy8gdGVtcGxhdGVzIG9yIHVzZSBtYWNyb3Mgb3IgaW5saW5lIGZ1bmN0aW9ucyBmcm9tIHRoaXMgZmlsZSwgb3IgeW91IGNvbXBpbGUKKysvLyB0aGlzIGZpbGUgYW5kIGxpbmsgaXQgd2l0aCBvdGhlciBmaWxlcyB0byBwcm9kdWNlIGFuIGV4ZWN1dGFibGUsIHRoaXMKKysvLyBmaWxlIGRvZXMgbm90IGJ5IGl0c2VsZiBjYXVzZSB0aGUgcmVzdWx0aW5nIGV4ZWN1dGFibGUgdG8gYmUgY292ZXJlZCBieQorKy8vIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4gIFRoaXMgZXhjZXB0aW9uIGRvZXMgbm90IGhvd2V2ZXIKKysvLyBpbnZhbGlkYXRlIGFueSBvdGhlciByZWFzb25zIHdoeSB0aGUgZXhlY3V0YWJsZSBmaWxlIG1pZ2h0IGJlIGNvdmVyZWQgYnkKKysvLyB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UuCisrCisrLy8KKysvLyBJU08gQysrIDE0ODgyOiAyMi4yLjYuMy4yICBtb25leXB1bmN0IHZpcnR1YWwgZnVuY3Rpb25zCisrLy8KKysKKysvLyBXcml0dGVuIGJ5IEJlbmphbWluIEtvc25payA8YmtvekByZWRoYXQuY29tPgorKworKyNkZWZpbmUgX0xJQkMKKysjaW5jbHVkZSA8bG9jYWxlPgorKyN1bmRlZiBfTElCQworKyNpbmNsdWRlIDxiaXRzL2MrK2xvY2FsZV9pbnRlcm5hbC5oPgorKworKyNpZmRlZiBfX1VDTElCQ19NSk4zX09OTFlfXworKyN3YXJuaW5nIG9wdGltaXplIHRoaXMgZm9yIHVjbGliYworKyN3YXJuaW5nIHRhaWxvciBmb3Igc3R1YiBsb2NhbGUgc3VwcG9ydAorKyNlbmRpZgorKworKyNpZm5kZWYgX19VQ0xJQkNfSEFTX1hMT0NBTEVfXworKyNkZWZpbmUgX19ubF9sYW5naW5mb19sKE4sIEwpICAgICAgICAgbmxfbGFuZ2luZm8oKE4pKQorKyNlbmRpZgorKworK25hbWVzcGFjZSBzdGQKKyt7CisrICAvLyBDb25zdHJ1Y3QgYW5kIHJldHVybiB2YWxpZCBwYXR0ZXJuIGNvbnNpc3Rpbmcgb2Ygc29tZSBjb21iaW5hdGlvbiBvZjoKKysgIC8vIHNwYWNlIG5vbmUgc3ltYm9sIHNpZ24gdmFsdWUKKysgIG1vbmV5X2Jhc2U6OnBhdHRlcm4KKysgIG1vbmV5X2Jhc2U6Ol9TX2NvbnN0cnVjdF9wYXR0ZXJuKGNoYXIgX19wcmVjZWRlcywgY2hhciBfX3NwYWNlLCBjaGFyIF9fcG9zbikKKysgIHsKKysgICAgcGF0dGVybiBfX3JldDsKKysKKysgICAgLy8gVGhpcyBpbnNhbmVseSBjb21wbGljYXRlZCByb3V0aW5lIGF0dGVtcHRzIHRvIGNvbnN0cnVjdCBhIHZhbGlkCisrICAgIC8vIHBhdHRlcm4gZm9yIHVzZSB3aXRoIG1vbnllcHVuY3QuIEEgY291cGxlIG9mIGludmFyaWFudHM6CisrCisrICAgIC8vIGlmIChfX3ByZWNlZGVzKSBzeW1ib2wgLT4gdmFsdWUKKysgICAgLy8gZWxzZSB2YWx1ZSAtPiBzeW1ib2wKKysKKysgICAgLy8gaWYgKF9fc3BhY2UpIHNwYWNlCisrICAgIC8vIGVsc2Ugbm9uZQorKworKyAgICAvLyBub25lID09IG5ldmVyIGZpcnN0CisrICAgIC8vIHNwYWNlIG5ldmVyIGZpcnN0IG9yIGxhc3QKKysKKysgICAgLy8gQW55IGVsZWdhbnQgaW1wbGVtZW50YXRpb25zIG9mIHRoaXMgYXJlIHdlbGNvbWUuCisrICAgIHN3aXRjaCAoX19wb3NuKQorKyAgICAgIHsKKysgICAgICBjYXNlIDA6CisrICAgICAgY2FzZSAxOgorKwkvLyAxIFRoZSBzaWduIHByZWNlZGVzIHRoZSB2YWx1ZSBhbmQgc3ltYm9sLgorKwlfX3JldC5maWVsZFswXSA9IHNpZ247CisrCWlmIChfX3NwYWNlKQorKwkgIHsKKysJICAgIC8vIFBhdHRlcm4gc3RhcnRzIHdpdGggc2lnbi4KKysJICAgIGlmIChfX3ByZWNlZGVzKQorKwkgICAgICB7CisrCQlfX3JldC5maWVsZFsxXSA9IHN5bWJvbDsKKysJCV9fcmV0LmZpZWxkWzNdID0gdmFsdWU7CisrCSAgICAgIH0KKysJICAgIGVsc2UKKysJICAgICAgeworKwkJX19yZXQuZmllbGRbMV0gPSB2YWx1ZTsKKysJCV9fcmV0LmZpZWxkWzNdID0gc3ltYm9sOworKwkgICAgICB9CisrCSAgICBfX3JldC5maWVsZFsyXSA9IHNwYWNlOworKwkgIH0KKysJZWxzZQorKwkgIHsKKysJICAgIC8vIFBhdHRlcm4gc3RhcnRzIHdpdGggc2lnbiBhbmQgZW5kcyB3aXRoIG5vbmUuCisrCSAgICBpZiAoX19wcmVjZWRlcykKKysJICAgICAgeworKwkJX19yZXQuZmllbGRbMV0gPSBzeW1ib2w7CisrCQlfX3JldC5maWVsZFsyXSA9IHZhbHVlOworKwkgICAgICB9CisrCSAgICBlbHNlCisrCSAgICAgIHsKKysJCV9fcmV0LmZpZWxkWzFdID0gdmFsdWU7CisrCQlfX3JldC5maWVsZFsyXSA9IHN5bWJvbDsKKysJICAgICAgfQorKwkgICAgX19yZXQuZmllbGRbM10gPSBub25lOworKwkgIH0KKysJYnJlYWs7CisrICAgICAgY2FzZSAyOgorKwkvLyAyIFRoZSBzaWduIGZvbGxvd3MgdGhlIHZhbHVlIGFuZCBzeW1ib2wuCisrCWlmIChfX3NwYWNlKQorKwkgIHsKKysJICAgIC8vIFBhdHRlcm4gZWl0aGVyIGVuZHMgd2l0aCBzaWduLgorKwkgICAgaWYgKF9fcHJlY2VkZXMpCisrCSAgICAgIHsKKysJCV9fcmV0LmZpZWxkWzBdID0gc3ltYm9sOworKwkJX19yZXQuZmllbGRbMl0gPSB2YWx1ZTsKKysJICAgICAgfQorKwkgICAgZWxzZQorKwkgICAgICB7CisrCQlfX3JldC5maWVsZFswXSA9IHZhbHVlOworKwkJX19yZXQuZmllbGRbMl0gPSBzeW1ib2w7CisrCSAgICAgIH0KKysJICAgIF9fcmV0LmZpZWxkWzFdID0gc3BhY2U7CisrCSAgICBfX3JldC5maWVsZFszXSA9IHNpZ247CisrCSAgfQorKwllbHNlCisrCSAgeworKwkgICAgLy8gUGF0dGVybiBlbmRzIHdpdGggc2lnbiB0aGVuIG5vbmUuCisrCSAgICBpZiAoX19wcmVjZWRlcykKKysJICAgICAgeworKwkJX19yZXQuZmllbGRbMF0gPSBzeW1ib2w7CisrCQlfX3JldC5maWVsZFsxXSA9IHZhbHVlOworKwkgICAgICB9CisrCSAgICBlbHNlCisrCSAgICAgIHsKKysJCV9fcmV0LmZpZWxkWzBdID0gdmFsdWU7CisrCQlfX3JldC5maWVsZFsxXSA9IHN5bWJvbDsKKysJICAgICAgfQorKwkgICAgX19yZXQuZmllbGRbMl0gPSBzaWduOworKwkgICAgX19yZXQuZmllbGRbM10gPSBub25lOworKwkgIH0KKysJYnJlYWs7CisrICAgICAgY2FzZSAzOgorKwkvLyAzIFRoZSBzaWduIGltbWVkaWF0ZWx5IHByZWNlZGVzIHRoZSBzeW1ib2wuCisrCWlmIChfX3ByZWNlZGVzKQorKwkgIHsKKysJICAgIF9fcmV0LmZpZWxkWzBdID0gc2lnbjsKKysJICAgIF9fcmV0LmZpZWxkWzFdID0gc3ltYm9sOworKwkgICAgaWYgKF9fc3BhY2UpCisrCSAgICAgIHsKKysJCV9fcmV0LmZpZWxkWzJdID0gc3BhY2U7CisrCQlfX3JldC5maWVsZFszXSA9IHZhbHVlOworKwkgICAgICB9CisrCSAgICBlbHNlCisrCSAgICAgIHsKKysJCV9fcmV0LmZpZWxkWzJdID0gdmFsdWU7CisrCQlfX3JldC5maWVsZFszXSA9IG5vbmU7CisrCSAgICAgIH0KKysJICB9CisrCWVsc2UKKysJICB7CisrCSAgICBfX3JldC5maWVsZFswXSA9IHZhbHVlOworKwkgICAgaWYgKF9fc3BhY2UpCisrCSAgICAgIHsKKysJCV9fcmV0LmZpZWxkWzFdID0gc3BhY2U7CisrCQlfX3JldC5maWVsZFsyXSA9IHNpZ247CisrCQlfX3JldC5maWVsZFszXSA9IHN5bWJvbDsKKysJICAgICAgfQorKwkgICAgZWxzZQorKwkgICAgICB7CisrCQlfX3JldC5maWVsZFsxXSA9IHNpZ247CisrCQlfX3JldC5maWVsZFsyXSA9IHN5bWJvbDsKKysJCV9fcmV0LmZpZWxkWzNdID0gbm9uZTsKKysJICAgICAgfQorKwkgIH0KKysJYnJlYWs7CisrICAgICAgY2FzZSA0OgorKwkvLyA0IFRoZSBzaWduIGltbWVkaWF0ZWx5IGZvbGxvd3MgdGhlIHN5bWJvbC4KKysJaWYgKF9fcHJlY2VkZXMpCisrCSAgeworKwkgICAgX19yZXQuZmllbGRbMF0gPSBzeW1ib2w7CisrCSAgICBfX3JldC5maWVsZFsxXSA9IHNpZ247CisrCSAgICBpZiAoX19zcGFjZSkKKysJICAgICAgeworKwkJX19yZXQuZmllbGRbMl0gPSBzcGFjZTsKKysJCV9fcmV0LmZpZWxkWzNdID0gdmFsdWU7CisrCSAgICAgIH0KKysJICAgIGVsc2UKKysJICAgICAgeworKwkJX19yZXQuZmllbGRbMl0gPSB2YWx1ZTsKKysJCV9fcmV0LmZpZWxkWzNdID0gbm9uZTsKKysJICAgICAgfQorKwkgIH0KKysJZWxzZQorKwkgIHsKKysJICAgIF9fcmV0LmZpZWxkWzBdID0gdmFsdWU7CisrCSAgICBpZiAoX19zcGFjZSkKKysJICAgICAgeworKwkJX19yZXQuZmllbGRbMV0gPSBzcGFjZTsKKysJCV9fcmV0LmZpZWxkWzJdID0gc3ltYm9sOworKwkJX19yZXQuZmllbGRbM10gPSBzaWduOworKwkgICAgICB9CisrCSAgICBlbHNlCisrCSAgICAgIHsKKysJCV9fcmV0LmZpZWxkWzFdID0gc3ltYm9sOworKwkJX19yZXQuZmllbGRbMl0gPSBzaWduOworKwkJX19yZXQuZmllbGRbM10gPSBub25lOworKwkgICAgICB9CisrCSAgfQorKwlicmVhazsKKysgICAgICBkZWZhdWx0OgorKwk7CisrICAgICAgfQorKyAgICByZXR1cm4gX19yZXQ7CisrICB9CisrCisrICB0ZW1wbGF0ZTw+CisrICAgIHZvaWQKKysgICAgbW9uZXlwdW5jdDxjaGFyLCB0cnVlPjo6X01faW5pdGlhbGl6ZV9tb25leXB1bmN0KF9fY19sb2NhbGUgX19jbG9jLAorKwkJCQkJCSAgICAgY29uc3QgY2hhciopCisrICAgIHsKKysgICAgICBpZiAoIV9NX2RhdGEpCisrCV9NX2RhdGEgPSBuZXcgX19tb25leXB1bmN0X2NhY2hlPGNoYXIsIHRydWU+OworKworKyAgICAgIGlmICghX19jbG9jKQorKwl7CisrCSAgLy8gIkMiIGxvY2FsZQorKwkgIF9NX2RhdGEtPl9NX2RlY2ltYWxfcG9pbnQgPSAnLic7CisrCSAgX01fZGF0YS0+X01fdGhvdXNhbmRzX3NlcCA9ICcsJzsKKysJICBfTV9kYXRhLT5fTV9ncm91cGluZyA9ICIiOworKwkgIF9NX2RhdGEtPl9NX2dyb3VwaW5nX3NpemUgPSAwOworKwkgIF9NX2RhdGEtPl9NX2N1cnJfc3ltYm9sID0gIiI7CisrCSAgX01fZGF0YS0+X01fY3Vycl9zeW1ib2xfc2l6ZSA9IDA7CisrCSAgX01fZGF0YS0+X01fcG9zaXRpdmVfc2lnbiA9ICIiOworKwkgIF9NX2RhdGEtPl9NX3Bvc2l0aXZlX3NpZ25fc2l6ZSA9IDA7CisrCSAgX01fZGF0YS0+X01fbmVnYXRpdmVfc2lnbiA9ICIiOworKwkgIF9NX2RhdGEtPl9NX25lZ2F0aXZlX3NpZ25fc2l6ZSA9IDA7CisrCSAgX01fZGF0YS0+X01fZnJhY19kaWdpdHMgPSAwOworKwkgIF9NX2RhdGEtPl9NX3Bvc19mb3JtYXQgPSBtb25leV9iYXNlOjpfU19kZWZhdWx0X3BhdHRlcm47CisrCSAgX01fZGF0YS0+X01fbmVnX2Zvcm1hdCA9IG1vbmV5X2Jhc2U6Ol9TX2RlZmF1bHRfcGF0dGVybjsKKysKKysJICBmb3IgKHNpemVfdCBfX2kgPSAwOyBfX2kgPCBtb25leV9iYXNlOjpfU19lbmQ7ICsrX19pKQorKwkgICAgX01fZGF0YS0+X01fYXRvbXNbX19pXSA9IG1vbmV5X2Jhc2U6Ol9TX2F0b21zW19faV07CisrCX0KKysgICAgICBlbHNlCisrCXsKKysJICAvLyBOYW1lZCBsb2NhbGUuCisrCSAgX01fZGF0YS0+X01fZGVjaW1hbF9wb2ludCA9ICooX19ubF9sYW5naW5mb19sKF9fTU9OX0RFQ0lNQUxfUE9JTlQsCisrCQkJCQkJCV9fY2xvYykpOworKwkgIF9NX2RhdGEtPl9NX3Rob3VzYW5kc19zZXAgPSAqKF9fbmxfbGFuZ2luZm9fbChfX01PTl9USE9VU0FORFNfU0VQLAorKwkJCQkJCQlfX2Nsb2MpKTsKKysJICBfTV9kYXRhLT5fTV9ncm91cGluZyA9IF9fbmxfbGFuZ2luZm9fbChfX01PTl9HUk9VUElORywgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9ncm91cGluZ19zaXplID0gc3RybGVuKF9NX2RhdGEtPl9NX2dyb3VwaW5nKTsKKysJICBfTV9kYXRhLT5fTV9wb3NpdGl2ZV9zaWduID0gX19ubF9sYW5naW5mb19sKF9fUE9TSVRJVkVfU0lHTiwgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9wb3NpdGl2ZV9zaWduX3NpemUgPSBzdHJsZW4oX01fZGF0YS0+X01fcG9zaXRpdmVfc2lnbik7CisrCisrCSAgY2hhciBfX25wb3NuID0gKihfX25sX2xhbmdpbmZvX2woX19JTlRfTl9TSUdOX1BPU04sIF9fY2xvYykpOworKwkgIGlmICghX19ucG9zbikKKysJICAgIF9NX2RhdGEtPl9NX25lZ2F0aXZlX3NpZ24gPSAiKCkiOworKwkgIGVsc2UKKysJICAgIF9NX2RhdGEtPl9NX25lZ2F0aXZlX3NpZ24gPSBfX25sX2xhbmdpbmZvX2woX19ORUdBVElWRV9TSUdOLAorKwkJCQkJCQlfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX25lZ2F0aXZlX3NpZ25fc2l6ZSA9IHN0cmxlbihfTV9kYXRhLT5fTV9uZWdhdGl2ZV9zaWduKTsKKysKKysJICAvLyBfSW50bCA9PSB0cnVlCisrCSAgX01fZGF0YS0+X01fY3Vycl9zeW1ib2wgPSBfX25sX2xhbmdpbmZvX2woX19JTlRfQ1VSUl9TWU1CT0wsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fY3Vycl9zeW1ib2xfc2l6ZSA9IHN0cmxlbihfTV9kYXRhLT5fTV9jdXJyX3N5bWJvbCk7CisrCSAgX01fZGF0YS0+X01fZnJhY19kaWdpdHMgPSAqKF9fbmxfbGFuZ2luZm9fbChfX0lOVF9GUkFDX0RJR0lUUywKKysJCQkJCQkgICAgICBfX2Nsb2MpKTsKKysJICBjaGFyIF9fcHByZWNlZGVzID0gKihfX25sX2xhbmdpbmZvX2woX19JTlRfUF9DU19QUkVDRURFUywgX19jbG9jKSk7CisrCSAgY2hhciBfX3BzcGFjZSA9ICooX19ubF9sYW5naW5mb19sKF9fSU5UX1BfU0VQX0JZX1NQQUNFLCBfX2Nsb2MpKTsKKysJICBjaGFyIF9fcHBvc24gPSAqKF9fbmxfbGFuZ2luZm9fbChfX0lOVF9QX1NJR05fUE9TTiwgX19jbG9jKSk7CisrCSAgX01fZGF0YS0+X01fcG9zX2Zvcm1hdCA9IF9TX2NvbnN0cnVjdF9wYXR0ZXJuKF9fcHByZWNlZGVzLCBfX3BzcGFjZSwKKysJCQkJCQkJX19wcG9zbik7CisrCSAgY2hhciBfX25wcmVjZWRlcyA9ICooX19ubF9sYW5naW5mb19sKF9fSU5UX05fQ1NfUFJFQ0VERVMsIF9fY2xvYykpOworKwkgIGNoYXIgX19uc3BhY2UgPSAqKF9fbmxfbGFuZ2luZm9fbChfX0lOVF9OX1NFUF9CWV9TUEFDRSwgX19jbG9jKSk7CisrCSAgX01fZGF0YS0+X01fbmVnX2Zvcm1hdCA9IF9TX2NvbnN0cnVjdF9wYXR0ZXJuKF9fbnByZWNlZGVzLCBfX25zcGFjZSwKKysJCQkJCQkJX19ucG9zbik7CisrCX0KKysgICAgfQorKworKyAgdGVtcGxhdGU8PgorKyAgICB2b2lkCisrICAgIG1vbmV5cHVuY3Q8Y2hhciwgZmFsc2U+OjpfTV9pbml0aWFsaXplX21vbmV5cHVuY3QoX19jX2xvY2FsZSBfX2Nsb2MsCisrCQkJCQkJICAgICAgY29uc3QgY2hhciopCisrICAgIHsKKysgICAgICBpZiAoIV9NX2RhdGEpCisrCV9NX2RhdGEgPSBuZXcgX19tb25leXB1bmN0X2NhY2hlPGNoYXIsIGZhbHNlPjsKKysKKysgICAgICBpZiAoIV9fY2xvYykKKysJeworKwkgIC8vICJDIiBsb2NhbGUKKysJICBfTV9kYXRhLT5fTV9kZWNpbWFsX3BvaW50ID0gJy4nOworKwkgIF9NX2RhdGEtPl9NX3Rob3VzYW5kc19zZXAgPSAnLCc7CisrCSAgX01fZGF0YS0+X01fZ3JvdXBpbmcgPSAiIjsKKysJICBfTV9kYXRhLT5fTV9ncm91cGluZ19zaXplID0gMDsKKysJICBfTV9kYXRhLT5fTV9jdXJyX3N5bWJvbCA9ICIiOworKwkgIF9NX2RhdGEtPl9NX2N1cnJfc3ltYm9sX3NpemUgPSAwOworKwkgIF9NX2RhdGEtPl9NX3Bvc2l0aXZlX3NpZ24gPSAiIjsKKysJICBfTV9kYXRhLT5fTV9wb3NpdGl2ZV9zaWduX3NpemUgPSAwOworKwkgIF9NX2RhdGEtPl9NX25lZ2F0aXZlX3NpZ24gPSAiIjsKKysJICBfTV9kYXRhLT5fTV9uZWdhdGl2ZV9zaWduX3NpemUgPSAwOworKwkgIF9NX2RhdGEtPl9NX2ZyYWNfZGlnaXRzID0gMDsKKysJICBfTV9kYXRhLT5fTV9wb3NfZm9ybWF0ID0gbW9uZXlfYmFzZTo6X1NfZGVmYXVsdF9wYXR0ZXJuOworKwkgIF9NX2RhdGEtPl9NX25lZ19mb3JtYXQgPSBtb25leV9iYXNlOjpfU19kZWZhdWx0X3BhdHRlcm47CisrCisrCSAgZm9yIChzaXplX3QgX19pID0gMDsgX19pIDwgbW9uZXlfYmFzZTo6X1NfZW5kOyArK19faSkKKysJICAgIF9NX2RhdGEtPl9NX2F0b21zW19faV0gPSBtb25leV9iYXNlOjpfU19hdG9tc1tfX2ldOworKwl9CisrICAgICAgZWxzZQorKwl7CisrCSAgLy8gTmFtZWQgbG9jYWxlLgorKwkgIF9NX2RhdGEtPl9NX2RlY2ltYWxfcG9pbnQgPSAqKF9fbmxfbGFuZ2luZm9fbChfX01PTl9ERUNJTUFMX1BPSU5ULAorKwkJCQkJCQlfX2Nsb2MpKTsKKysJICBfTV9kYXRhLT5fTV90aG91c2FuZHNfc2VwID0gKihfX25sX2xhbmdpbmZvX2woX19NT05fVEhPVVNBTkRTX1NFUCwKKysJCQkJCQkJX19jbG9jKSk7CisrCSAgX01fZGF0YS0+X01fZ3JvdXBpbmcgPSBfX25sX2xhbmdpbmZvX2woX19NT05fR1JPVVBJTkcsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fZ3JvdXBpbmdfc2l6ZSA9IHN0cmxlbihfTV9kYXRhLT5fTV9ncm91cGluZyk7CisrCSAgX01fZGF0YS0+X01fcG9zaXRpdmVfc2lnbiA9IF9fbmxfbGFuZ2luZm9fbChfX1BPU0lUSVZFX1NJR04sIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fcG9zaXRpdmVfc2lnbl9zaXplID0gc3RybGVuKF9NX2RhdGEtPl9NX3Bvc2l0aXZlX3NpZ24pOworKworKwkgIGNoYXIgX19ucG9zbiA9ICooX19ubF9sYW5naW5mb19sKF9fTl9TSUdOX1BPU04sIF9fY2xvYykpOworKwkgIGlmICghX19ucG9zbikKKysJICAgIF9NX2RhdGEtPl9NX25lZ2F0aXZlX3NpZ24gPSAiKCkiOworKwkgIGVsc2UKKysJICAgIF9NX2RhdGEtPl9NX25lZ2F0aXZlX3NpZ24gPSBfX25sX2xhbmdpbmZvX2woX19ORUdBVElWRV9TSUdOLAorKwkJCQkJCQlfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX25lZ2F0aXZlX3NpZ25fc2l6ZSA9IHN0cmxlbihfTV9kYXRhLT5fTV9uZWdhdGl2ZV9zaWduKTsKKysKKysJICAvLyBfSW50bCA9PSBmYWxzZQorKwkgIF9NX2RhdGEtPl9NX2N1cnJfc3ltYm9sID0gX19ubF9sYW5naW5mb19sKF9fQ1VSUkVOQ1lfU1lNQk9MLCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX2N1cnJfc3ltYm9sX3NpemUgPSBzdHJsZW4oX01fZGF0YS0+X01fY3Vycl9zeW1ib2wpOworKwkgIF9NX2RhdGEtPl9NX2ZyYWNfZGlnaXRzID0gKihfX25sX2xhbmdpbmZvX2woX19GUkFDX0RJR0lUUywgX19jbG9jKSk7CisrCSAgY2hhciBfX3BwcmVjZWRlcyA9ICooX19ubF9sYW5naW5mb19sKF9fUF9DU19QUkVDRURFUywgX19jbG9jKSk7CisrCSAgY2hhciBfX3BzcGFjZSA9ICooX19ubF9sYW5naW5mb19sKF9fUF9TRVBfQllfU1BBQ0UsIF9fY2xvYykpOworKwkgIGNoYXIgX19wcG9zbiA9ICooX19ubF9sYW5naW5mb19sKF9fUF9TSUdOX1BPU04sIF9fY2xvYykpOworKwkgIF9NX2RhdGEtPl9NX3Bvc19mb3JtYXQgPSBfU19jb25zdHJ1Y3RfcGF0dGVybihfX3BwcmVjZWRlcywgX19wc3BhY2UsCisrCQkJCQkJCV9fcHBvc24pOworKwkgIGNoYXIgX19ucHJlY2VkZXMgPSAqKF9fbmxfbGFuZ2luZm9fbChfX05fQ1NfUFJFQ0VERVMsIF9fY2xvYykpOworKwkgIGNoYXIgX19uc3BhY2UgPSAqKF9fbmxfbGFuZ2luZm9fbChfX05fU0VQX0JZX1NQQUNFLCBfX2Nsb2MpKTsKKysJICBfTV9kYXRhLT5fTV9uZWdfZm9ybWF0ID0gX1NfY29uc3RydWN0X3BhdHRlcm4oX19ucHJlY2VkZXMsIF9fbnNwYWNlLAorKwkJCQkJCQlfX25wb3NuKTsKKysJfQorKyAgICB9CisrCisrICB0ZW1wbGF0ZTw+CisrICAgIG1vbmV5cHVuY3Q8Y2hhciwgdHJ1ZT46On5tb25leXB1bmN0KCkKKysgICAgeyBkZWxldGUgX01fZGF0YTsgfQorKworKyAgdGVtcGxhdGU8PgorKyAgICBtb25leXB1bmN0PGNoYXIsIGZhbHNlPjo6fm1vbmV5cHVuY3QoKQorKyAgICB7IGRlbGV0ZSBfTV9kYXRhOyB9CisrCisrI2lmZGVmIF9HTElCQ1hYX1VTRV9XQ0hBUl9UCisrICB0ZW1wbGF0ZTw+CisrICAgIHZvaWQKKysgICAgbW9uZXlwdW5jdDx3Y2hhcl90LCB0cnVlPjo6X01faW5pdGlhbGl6ZV9tb25leXB1bmN0KF9fY19sb2NhbGUgX19jbG9jLAorKyNpZmRlZiBfX1VDTElCQ19IQVNfWExPQ0FMRV9fCisrCQkJCQkJCWNvbnN0IGNoYXIqKQorKyNlbHNlCisrCQkJCQkJCWNvbnN0IGNoYXIqIF9fbmFtZSkKKysjZW5kaWYKKysgICAgeworKyAgICAgIGlmICghX01fZGF0YSkKKysJX01fZGF0YSA9IG5ldyBfX21vbmV5cHVuY3RfY2FjaGU8d2NoYXJfdCwgdHJ1ZT47CisrCisrICAgICAgaWYgKCFfX2Nsb2MpCisrCXsKKysJICAvLyAiQyIgbG9jYWxlCisrCSAgX01fZGF0YS0+X01fZGVjaW1hbF9wb2ludCA9IEwnLic7CisrCSAgX01fZGF0YS0+X01fdGhvdXNhbmRzX3NlcCA9IEwnLCc7CisrCSAgX01fZGF0YS0+X01fZ3JvdXBpbmcgPSAiIjsKKysJICBfTV9kYXRhLT5fTV9ncm91cGluZ19zaXplID0gMDsKKysJICBfTV9kYXRhLT5fTV9jdXJyX3N5bWJvbCA9IEwiIjsKKysJICBfTV9kYXRhLT5fTV9jdXJyX3N5bWJvbF9zaXplID0gMDsKKysJICBfTV9kYXRhLT5fTV9wb3NpdGl2ZV9zaWduID0gTCIiOworKwkgIF9NX2RhdGEtPl9NX3Bvc2l0aXZlX3NpZ25fc2l6ZSA9IDA7CisrCSAgX01fZGF0YS0+X01fbmVnYXRpdmVfc2lnbiA9IEwiIjsKKysJICBfTV9kYXRhLT5fTV9uZWdhdGl2ZV9zaWduX3NpemUgPSAwOworKwkgIF9NX2RhdGEtPl9NX2ZyYWNfZGlnaXRzID0gMDsKKysJICBfTV9kYXRhLT5fTV9wb3NfZm9ybWF0ID0gbW9uZXlfYmFzZTo6X1NfZGVmYXVsdF9wYXR0ZXJuOworKwkgIF9NX2RhdGEtPl9NX25lZ19mb3JtYXQgPSBtb25leV9iYXNlOjpfU19kZWZhdWx0X3BhdHRlcm47CisrCisrCSAgLy8gVXNlIGN0eXBlOjp3aWRlbiBjb2RlIHdpdGhvdXQgdGhlIGZhY2V0Li4uCisrCSAgZm9yIChzaXplX3QgX19pID0gMDsgX19pIDwgbW9uZXlfYmFzZTo6X1NfZW5kOyArK19faSkKKysJICAgIF9NX2RhdGEtPl9NX2F0b21zW19faV0gPQorKwkgICAgICBzdGF0aWNfY2FzdDx3Y2hhcl90Pihtb25leV9iYXNlOjpfU19hdG9tc1tfX2ldKTsKKysJfQorKyAgICAgIGVsc2UKKysJeworKwkgIC8vIE5hbWVkIGxvY2FsZS4KKysjaWZkZWYgX19VQ0xJQkNfSEFTX1hMT0NBTEVfXworKwkgIF9fY19sb2NhbGUgX19vbGQgPSBfX3VzZWxvY2FsZShfX2Nsb2MpOworKyNlbHNlCisrCSAgLy8gU3dpdGNoIHRvIG5hbWVkIGxvY2FsZSBzbyB0aGF0IG1ic3J0b3djcyB3aWxsIHdvcmsuCisrCSAgY2hhciogX19vbGQgPSBzdHJkdXAoc2V0bG9jYWxlKExDX0FMTCwgTlVMTCkpOworKwkgIHNldGxvY2FsZShMQ19BTEwsIF9fbmFtZSk7CisrI2VuZGlmCisrCisrI2lmZGVmIF9fVUNMSUJDX01KTjNfT05MWV9fCisrI3dhcm5pbmcgZml4IHRoaXMuLi4gc2hvdWxkIGJlIG1vbmV0YXJ5CisrI2VuZGlmCisrI2lmZGVmIF9fVUNMSUJDX18KKysjIGlmZGVmIF9fVUNMSUJDX0hBU19YTE9DQUxFX18KKysJICBfTV9kYXRhLT5fTV9kZWNpbWFsX3BvaW50ID0gX19jbG9jLT5kZWNpbWFsX3BvaW50X3djOworKwkgIF9NX2RhdGEtPl9NX3Rob3VzYW5kc19zZXAgPSBfX2Nsb2MtPnRob3VzYW5kc19zZXBfd2M7CisrIyBlbHNlCisrCSAgX01fZGF0YS0+X01fZGVjaW1hbF9wb2ludCA9IF9fZ2xvYmFsX2xvY2FsZS0+ZGVjaW1hbF9wb2ludF93YzsKKysJICBfTV9kYXRhLT5fTV90aG91c2FuZHNfc2VwID0gX19nbG9iYWxfbG9jYWxlLT50aG91c2FuZHNfc2VwX3djOworKyMgZW5kaWYKKysjZWxzZQorKwkgIHVuaW9uIHsgY2hhciAqX19zOyB3Y2hhcl90IF9fdzsgfSBfX3U7CisrCSAgX191Ll9fcyA9IF9fbmxfbGFuZ2luZm9fbChfTkxfTU9ORVRBUllfREVDSU1BTF9QT0lOVF9XQywgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9kZWNpbWFsX3BvaW50ID0gX191Ll9fdzsKKysKKysJICBfX3UuX19zID0gX19ubF9sYW5naW5mb19sKF9OTF9NT05FVEFSWV9USE9VU0FORFNfU0VQX1dDLCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX3Rob3VzYW5kc19zZXAgPSBfX3UuX193OworKyNlbmRpZgorKwkgIF9NX2RhdGEtPl9NX2dyb3VwaW5nID0gX19ubF9sYW5naW5mb19sKF9fTU9OX0dST1VQSU5HLCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX2dyb3VwaW5nX3NpemUgPSBzdHJsZW4oX01fZGF0YS0+X01fZ3JvdXBpbmcpOworKworKwkgIGNvbnN0IGNoYXIqIF9fY3Bvc3NpZ24gPSBfX25sX2xhbmdpbmZvX2woX19QT1NJVElWRV9TSUdOLCBfX2Nsb2MpOworKwkgIGNvbnN0IGNoYXIqIF9fY25lZ3NpZ24gPSBfX25sX2xhbmdpbmZvX2woX19ORUdBVElWRV9TSUdOLCBfX2Nsb2MpOworKwkgIGNvbnN0IGNoYXIqIF9fY2N1cnIgPSBfX25sX2xhbmdpbmZvX2woX19JTlRfQ1VSUl9TWU1CT0wsIF9fY2xvYyk7CisrCisrCSAgd2NoYXJfdCogX193Y3NfcHMgPSAwOworKwkgIHdjaGFyX3QqIF9fd2NzX25zID0gMDsKKysJICBjb25zdCBjaGFyIF9fbnBvc24gPSAqKF9fbmxfbGFuZ2luZm9fbChfX0lOVF9OX1NJR05fUE9TTiwgX19jbG9jKSk7CisrCSAgdHJ5CisrCSAgICB7CisrCSAgICAgIG1ic3RhdGVfdCBfX3N0YXRlOworKwkgICAgICBzaXplX3QgX19sZW4gPSBzdHJsZW4oX19jcG9zc2lnbik7CisrCSAgICAgIGlmIChfX2xlbikKKysJCXsKKysJCSAgKytfX2xlbjsKKysJCSAgbWVtc2V0KCZfX3N0YXRlLCAwLCBzaXplb2YobWJzdGF0ZV90KSk7CisrCQkgIF9fd2NzX3BzID0gbmV3IHdjaGFyX3RbX19sZW5dOworKwkJICBtYnNydG93Y3MoX193Y3NfcHMsICZfX2Nwb3NzaWduLCBfX2xlbiwgJl9fc3RhdGUpOworKwkJICBfTV9kYXRhLT5fTV9wb3NpdGl2ZV9zaWduID0gX193Y3NfcHM7CisrCQl9CisrCSAgICAgIGVsc2UKKysJCV9NX2RhdGEtPl9NX3Bvc2l0aXZlX3NpZ24gPSBMIiI7CisrCSAgICAgIF9NX2RhdGEtPl9NX3Bvc2l0aXZlX3NpZ25fc2l6ZSA9IHdjc2xlbihfTV9kYXRhLT5fTV9wb3NpdGl2ZV9zaWduKTsKKysKKysJICAgICAgX19sZW4gPSBzdHJsZW4oX19jbmVnc2lnbik7CisrCSAgICAgIGlmICghX19ucG9zbikKKysJCV9NX2RhdGEtPl9NX25lZ2F0aXZlX3NpZ24gPSBMIigpIjsKKysJICAgICAgZWxzZSBpZiAoX19sZW4pCisrCQl7CisrCQkgICsrX19sZW47CisrCQkgIG1lbXNldCgmX19zdGF0ZSwgMCwgc2l6ZW9mKG1ic3RhdGVfdCkpOworKwkJICBfX3djc19ucyA9IG5ldyB3Y2hhcl90W19fbGVuXTsKKysJCSAgbWJzcnRvd2NzKF9fd2NzX25zLCAmX19jbmVnc2lnbiwgX19sZW4sICZfX3N0YXRlKTsKKysJCSAgX01fZGF0YS0+X01fbmVnYXRpdmVfc2lnbiA9IF9fd2NzX25zOworKwkJfQorKwkgICAgICBlbHNlCisrCQlfTV9kYXRhLT5fTV9uZWdhdGl2ZV9zaWduID0gTCIiOworKwkgICAgICBfTV9kYXRhLT5fTV9uZWdhdGl2ZV9zaWduX3NpemUgPSB3Y3NsZW4oX01fZGF0YS0+X01fbmVnYXRpdmVfc2lnbik7CisrCisrCSAgICAgIC8vIF9JbnRsID09IHRydWUuCisrCSAgICAgIF9fbGVuID0gc3RybGVuKF9fY2N1cnIpOworKwkgICAgICBpZiAoX19sZW4pCisrCQl7CisrCQkgICsrX19sZW47CisrCQkgIG1lbXNldCgmX19zdGF0ZSwgMCwgc2l6ZW9mKG1ic3RhdGVfdCkpOworKwkJICB3Y2hhcl90KiBfX3djcyA9IG5ldyB3Y2hhcl90W19fbGVuXTsKKysJCSAgbWJzcnRvd2NzKF9fd2NzLCAmX19jY3VyciwgX19sZW4sICZfX3N0YXRlKTsKKysJCSAgX01fZGF0YS0+X01fY3Vycl9zeW1ib2wgPSBfX3djczsKKysJCX0KKysJICAgICAgZWxzZQorKwkJX01fZGF0YS0+X01fY3Vycl9zeW1ib2wgPSBMIiI7CisrCSAgICAgIF9NX2RhdGEtPl9NX2N1cnJfc3ltYm9sX3NpemUgPSB3Y3NsZW4oX01fZGF0YS0+X01fY3Vycl9zeW1ib2wpOworKwkgICAgfQorKwkgIGNhdGNoICguLi4pCisrCSAgICB7CisrCSAgICAgIGRlbGV0ZSBfTV9kYXRhOworKwkgICAgICBfTV9kYXRhID0gMDsKKysJICAgICAgZGVsZXRlIF9fd2NzX3BzOworKwkgICAgICBkZWxldGUgX193Y3NfbnM7CisrI2lmZGVmIF9fVUNMSUJDX0hBU19YTE9DQUxFX18KKysJICAgICAgX191c2Vsb2NhbGUoX19vbGQpOworKyNlbHNlCisrCSAgICAgIHNldGxvY2FsZShMQ19BTEwsIF9fb2xkKTsKKysJICAgICAgZnJlZShfX29sZCk7CisrI2VuZGlmCisrCSAgICAgIF9fdGhyb3dfZXhjZXB0aW9uX2FnYWluOworKwkgICAgfQorKworKwkgIF9NX2RhdGEtPl9NX2ZyYWNfZGlnaXRzID0gKihfX25sX2xhbmdpbmZvX2woX19JTlRfRlJBQ19ESUdJVFMsCisrCQkJCQkJICAgICAgX19jbG9jKSk7CisrCSAgY2hhciBfX3BwcmVjZWRlcyA9ICooX19ubF9sYW5naW5mb19sKF9fSU5UX1BfQ1NfUFJFQ0VERVMsIF9fY2xvYykpOworKwkgIGNoYXIgX19wc3BhY2UgPSAqKF9fbmxfbGFuZ2luZm9fbChfX0lOVF9QX1NFUF9CWV9TUEFDRSwgX19jbG9jKSk7CisrCSAgY2hhciBfX3Bwb3NuID0gKihfX25sX2xhbmdpbmZvX2woX19JTlRfUF9TSUdOX1BPU04sIF9fY2xvYykpOworKwkgIF9NX2RhdGEtPl9NX3Bvc19mb3JtYXQgPSBfU19jb25zdHJ1Y3RfcGF0dGVybihfX3BwcmVjZWRlcywgX19wc3BhY2UsCisrCQkJCQkJCV9fcHBvc24pOworKwkgIGNoYXIgX19ucHJlY2VkZXMgPSAqKF9fbmxfbGFuZ2luZm9fbChfX0lOVF9OX0NTX1BSRUNFREVTLCBfX2Nsb2MpKTsKKysJICBjaGFyIF9fbnNwYWNlID0gKihfX25sX2xhbmdpbmZvX2woX19JTlRfTl9TRVBfQllfU1BBQ0UsIF9fY2xvYykpOworKwkgIF9NX2RhdGEtPl9NX25lZ19mb3JtYXQgPSBfU19jb25zdHJ1Y3RfcGF0dGVybihfX25wcmVjZWRlcywgX19uc3BhY2UsCisrCQkJCQkJCV9fbnBvc24pOworKworKyNpZmRlZiBfX1VDTElCQ19IQVNfWExPQ0FMRV9fCisrCSAgX191c2Vsb2NhbGUoX19vbGQpOworKyNlbHNlCisrCSAgc2V0bG9jYWxlKExDX0FMTCwgX19vbGQpOworKwkgIGZyZWUoX19vbGQpOworKyNlbmRpZgorKwl9CisrICAgIH0KKysKKysgIHRlbXBsYXRlPD4KKysgIHZvaWQKKysgIG1vbmV5cHVuY3Q8d2NoYXJfdCwgZmFsc2U+OjpfTV9pbml0aWFsaXplX21vbmV5cHVuY3QoX19jX2xvY2FsZSBfX2Nsb2MsCisrI2lmZGVmIF9fVUNMSUJDX0hBU19YTE9DQUxFX18KKysJCQkJCQkgICAgICAgY29uc3QgY2hhciopCisrI2Vsc2UKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciogX19uYW1lKQorKyNlbmRpZgorKyAgeworKyAgICBpZiAoIV9NX2RhdGEpCisrICAgICAgX01fZGF0YSA9IG5ldyBfX21vbmV5cHVuY3RfY2FjaGU8d2NoYXJfdCwgZmFsc2U+OworKworKyAgICBpZiAoIV9fY2xvYykKKysJeworKwkgIC8vICJDIiBsb2NhbGUKKysJICBfTV9kYXRhLT5fTV9kZWNpbWFsX3BvaW50ID0gTCcuJzsKKysJICBfTV9kYXRhLT5fTV90aG91c2FuZHNfc2VwID0gTCcsJzsKKysJICBfTV9kYXRhLT5fTV9ncm91cGluZyA9ICIiOworKyAgICAgICAgICBfTV9kYXRhLT5fTV9ncm91cGluZ19zaXplID0gMDsKKysJICBfTV9kYXRhLT5fTV9jdXJyX3N5bWJvbCA9IEwiIjsKKysJICBfTV9kYXRhLT5fTV9jdXJyX3N5bWJvbF9zaXplID0gMDsKKysJICBfTV9kYXRhLT5fTV9wb3NpdGl2ZV9zaWduID0gTCIiOworKwkgIF9NX2RhdGEtPl9NX3Bvc2l0aXZlX3NpZ25fc2l6ZSA9IDA7CisrCSAgX01fZGF0YS0+X01fbmVnYXRpdmVfc2lnbiA9IEwiIjsKKysJICBfTV9kYXRhLT5fTV9uZWdhdGl2ZV9zaWduX3NpemUgPSAwOworKwkgIF9NX2RhdGEtPl9NX2ZyYWNfZGlnaXRzID0gMDsKKysJICBfTV9kYXRhLT5fTV9wb3NfZm9ybWF0ID0gbW9uZXlfYmFzZTo6X1NfZGVmYXVsdF9wYXR0ZXJuOworKwkgIF9NX2RhdGEtPl9NX25lZ19mb3JtYXQgPSBtb25leV9iYXNlOjpfU19kZWZhdWx0X3BhdHRlcm47CisrCisrCSAgLy8gVXNlIGN0eXBlOjp3aWRlbiBjb2RlIHdpdGhvdXQgdGhlIGZhY2V0Li4uCisrCSAgZm9yIChzaXplX3QgX19pID0gMDsgX19pIDwgbW9uZXlfYmFzZTo6X1NfZW5kOyArK19faSkKKysJICAgIF9NX2RhdGEtPl9NX2F0b21zW19faV0gPQorKwkgICAgICBzdGF0aWNfY2FzdDx3Y2hhcl90Pihtb25leV9iYXNlOjpfU19hdG9tc1tfX2ldKTsKKysJfQorKyAgICAgIGVsc2UKKysJeworKwkgIC8vIE5hbWVkIGxvY2FsZS4KKysjaWZkZWYgX19VQ0xJQkNfSEFTX1hMT0NBTEVfXworKwkgIF9fY19sb2NhbGUgX19vbGQgPSBfX3VzZWxvY2FsZShfX2Nsb2MpOworKyNlbHNlCisrCSAgLy8gU3dpdGNoIHRvIG5hbWVkIGxvY2FsZSBzbyB0aGF0IG1ic3J0b3djcyB3aWxsIHdvcmsuCisrCSAgY2hhciogX19vbGQgPSBzdHJkdXAoc2V0bG9jYWxlKExDX0FMTCwgTlVMTCkpOworKwkgIHNldGxvY2FsZShMQ19BTEwsIF9fbmFtZSk7CisrI2VuZGlmCisrCisrI2lmZGVmIF9fVUNMSUJDX01KTjNfT05MWV9fCisrI3dhcm5pbmcgZml4IHRoaXMuLi4gc2hvdWxkIGJlIG1vbmV0YXJ5CisrI2VuZGlmCisrI2lmZGVmIF9fVUNMSUJDX18KKysjIGlmZGVmIF9fVUNMSUJDX0hBU19YTE9DQUxFX18KKysJICBfTV9kYXRhLT5fTV9kZWNpbWFsX3BvaW50ID0gX19jbG9jLT5kZWNpbWFsX3BvaW50X3djOworKwkgIF9NX2RhdGEtPl9NX3Rob3VzYW5kc19zZXAgPSBfX2Nsb2MtPnRob3VzYW5kc19zZXBfd2M7CisrIyBlbHNlCisrCSAgX01fZGF0YS0+X01fZGVjaW1hbF9wb2ludCA9IF9fZ2xvYmFsX2xvY2FsZS0+ZGVjaW1hbF9wb2ludF93YzsKKysJICBfTV9kYXRhLT5fTV90aG91c2FuZHNfc2VwID0gX19nbG9iYWxfbG9jYWxlLT50aG91c2FuZHNfc2VwX3djOworKyMgZW5kaWYKKysjZWxzZQorKyAgICAgICAgICB1bmlvbiB7IGNoYXIgKl9fczsgd2NoYXJfdCBfX3c7IH0gX191OworKwkgIF9fdS5fX3MgPSBfX25sX2xhbmdpbmZvX2woX05MX01PTkVUQVJZX0RFQ0lNQUxfUE9JTlRfV0MsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fZGVjaW1hbF9wb2ludCA9IF9fdS5fX3c7CisrCisrCSAgX191Ll9fcyA9IF9fbmxfbGFuZ2luZm9fbChfTkxfTU9ORVRBUllfVEhPVVNBTkRTX1NFUF9XQywgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV90aG91c2FuZHNfc2VwID0gX191Ll9fdzsKKysjZW5kaWYKKysJICBfTV9kYXRhLT5fTV9ncm91cGluZyA9IF9fbmxfbGFuZ2luZm9fbChfX01PTl9HUk9VUElORywgX19jbG9jKTsKKysgICAgICAgICAgX01fZGF0YS0+X01fZ3JvdXBpbmdfc2l6ZSA9IHN0cmxlbihfTV9kYXRhLT5fTV9ncm91cGluZyk7CisrCisrCSAgY29uc3QgY2hhciogX19jcG9zc2lnbiA9IF9fbmxfbGFuZ2luZm9fbChfX1BPU0lUSVZFX1NJR04sIF9fY2xvYyk7CisrCSAgY29uc3QgY2hhciogX19jbmVnc2lnbiA9IF9fbmxfbGFuZ2luZm9fbChfX05FR0FUSVZFX1NJR04sIF9fY2xvYyk7CisrCSAgY29uc3QgY2hhciogX19jY3VyciA9IF9fbmxfbGFuZ2luZm9fbChfX0NVUlJFTkNZX1NZTUJPTCwgX19jbG9jKTsKKysKKysJICB3Y2hhcl90KiBfX3djc19wcyA9IDA7CisrCSAgd2NoYXJfdCogX193Y3NfbnMgPSAwOworKwkgIGNvbnN0IGNoYXIgX19ucG9zbiA9ICooX19ubF9sYW5naW5mb19sKF9fTl9TSUdOX1BPU04sIF9fY2xvYykpOworKwkgIHRyeQorKyAgICAgICAgICAgIHsKKysgICAgICAgICAgICAgIG1ic3RhdGVfdCBfX3N0YXRlOworKyAgICAgICAgICAgICAgc2l6ZV90IF9fbGVuOworKyAgICAgICAgICAgICAgX19sZW4gPSBzdHJsZW4oX19jcG9zc2lnbik7CisrICAgICAgICAgICAgICBpZiAoX19sZW4pCisrICAgICAgICAgICAgICAgIHsKKysJCSAgKytfX2xlbjsKKysJCSAgbWVtc2V0KCZfX3N0YXRlLCAwLCBzaXplb2YobWJzdGF0ZV90KSk7CisrCQkgIF9fd2NzX3BzID0gbmV3IHdjaGFyX3RbX19sZW5dOworKwkJICBtYnNydG93Y3MoX193Y3NfcHMsICZfX2Nwb3NzaWduLCBfX2xlbiwgJl9fc3RhdGUpOworKwkJICBfTV9kYXRhLT5fTV9wb3NpdGl2ZV9zaWduID0gX193Y3NfcHM7CisrCQl9CisrCSAgICAgIGVsc2UKKysJCV9NX2RhdGEtPl9NX3Bvc2l0aXZlX3NpZ24gPSBMIiI7CisrICAgICAgICAgICAgICBfTV9kYXRhLT5fTV9wb3NpdGl2ZV9zaWduX3NpemUgPSB3Y3NsZW4oX01fZGF0YS0+X01fcG9zaXRpdmVfc2lnbik7CisrCisrCSAgICAgIF9fbGVuID0gc3RybGVuKF9fY25lZ3NpZ24pOworKwkgICAgICBpZiAoIV9fbnBvc24pCisrCQlfTV9kYXRhLT5fTV9uZWdhdGl2ZV9zaWduID0gTCIoKSI7CisrCSAgICAgIGVsc2UgaWYgKF9fbGVuKQorKwkJeworKwkJICArK19fbGVuOworKwkJICBtZW1zZXQoJl9fc3RhdGUsIDAsIHNpemVvZihtYnN0YXRlX3QpKTsKKysJCSAgX193Y3NfbnMgPSBuZXcgd2NoYXJfdFtfX2xlbl07CisrCQkgIG1ic3J0b3djcyhfX3djc19ucywgJl9fY25lZ3NpZ24sIF9fbGVuLCAmX19zdGF0ZSk7CisrCQkgIF9NX2RhdGEtPl9NX25lZ2F0aXZlX3NpZ24gPSBfX3djc19uczsKKysJCX0KKysJICAgICAgZWxzZQorKwkJX01fZGF0YS0+X01fbmVnYXRpdmVfc2lnbiA9IEwiIjsKKysgICAgICAgICAgICAgIF9NX2RhdGEtPl9NX25lZ2F0aXZlX3NpZ25fc2l6ZSA9IHdjc2xlbihfTV9kYXRhLT5fTV9uZWdhdGl2ZV9zaWduKTsKKysKKysJICAgICAgLy8gX0ludGwgPT0gdHJ1ZS4KKysJICAgICAgX19sZW4gPSBzdHJsZW4oX19jY3Vycik7CisrCSAgICAgIGlmIChfX2xlbikKKysJCXsKKysJCSAgKytfX2xlbjsKKysJCSAgbWVtc2V0KCZfX3N0YXRlLCAwLCBzaXplb2YobWJzdGF0ZV90KSk7CisrCQkgIHdjaGFyX3QqIF9fd2NzID0gbmV3IHdjaGFyX3RbX19sZW5dOworKwkJICBtYnNydG93Y3MoX193Y3MsICZfX2NjdXJyLCBfX2xlbiwgJl9fc3RhdGUpOworKwkJICBfTV9kYXRhLT5fTV9jdXJyX3N5bWJvbCA9IF9fd2NzOworKwkJfQorKwkgICAgICBlbHNlCisrCQlfTV9kYXRhLT5fTV9jdXJyX3N5bWJvbCA9IEwiIjsKKysgICAgICAgICAgICAgIF9NX2RhdGEtPl9NX2N1cnJfc3ltYm9sX3NpemUgPSB3Y3NsZW4oX01fZGF0YS0+X01fY3Vycl9zeW1ib2wpOworKwkgICAgfQorKyAgICAgICAgICBjYXRjaCAoLi4uKQorKwkgICAgeworKwkgICAgICBkZWxldGUgX01fZGF0YTsKKysgICAgICAgICAgICAgIF9NX2RhdGEgPSAwOworKwkgICAgICBkZWxldGUgX193Y3NfcHM7CisrCSAgICAgIGRlbGV0ZSBfX3djc19uczsKKysjaWZkZWYgX19VQ0xJQkNfSEFTX1hMT0NBTEVfXworKwkgICAgICBfX3VzZWxvY2FsZShfX29sZCk7CisrI2Vsc2UKKysJICAgICAgc2V0bG9jYWxlKExDX0FMTCwgX19vbGQpOworKwkgICAgICBmcmVlKF9fb2xkKTsKKysjZW5kaWYKKysgICAgICAgICAgICAgIF9fdGhyb3dfZXhjZXB0aW9uX2FnYWluOworKwkgICAgfQorKworKwkgIF9NX2RhdGEtPl9NX2ZyYWNfZGlnaXRzID0gKihfX25sX2xhbmdpbmZvX2woX19GUkFDX0RJR0lUUywgX19jbG9jKSk7CisrCSAgY2hhciBfX3BwcmVjZWRlcyA9ICooX19ubF9sYW5naW5mb19sKF9fUF9DU19QUkVDRURFUywgX19jbG9jKSk7CisrCSAgY2hhciBfX3BzcGFjZSA9ICooX19ubF9sYW5naW5mb19sKF9fUF9TRVBfQllfU1BBQ0UsIF9fY2xvYykpOworKwkgIGNoYXIgX19wcG9zbiA9ICooX19ubF9sYW5naW5mb19sKF9fUF9TSUdOX1BPU04sIF9fY2xvYykpOworKwkgIF9NX2RhdGEtPl9NX3Bvc19mb3JtYXQgPSBfU19jb25zdHJ1Y3RfcGF0dGVybihfX3BwcmVjZWRlcywgX19wc3BhY2UsCisrCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fcHBvc24pOworKwkgIGNoYXIgX19ucHJlY2VkZXMgPSAqKF9fbmxfbGFuZ2luZm9fbChfX05fQ1NfUFJFQ0VERVMsIF9fY2xvYykpOworKwkgIGNoYXIgX19uc3BhY2UgPSAqKF9fbmxfbGFuZ2luZm9fbChfX05fU0VQX0JZX1NQQUNFLCBfX2Nsb2MpKTsKKysJICBfTV9kYXRhLT5fTV9uZWdfZm9ybWF0ID0gX1NfY29uc3RydWN0X3BhdHRlcm4oX19ucHJlY2VkZXMsIF9fbnNwYWNlLAorKwkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX25wb3NuKTsKKysKKysjaWZkZWYgX19VQ0xJQkNfSEFTX1hMT0NBTEVfXworKwkgIF9fdXNlbG9jYWxlKF9fb2xkKTsKKysjZWxzZQorKwkgIHNldGxvY2FsZShMQ19BTEwsIF9fb2xkKTsKKysJICBmcmVlKF9fb2xkKTsKKysjZW5kaWYKKysJfQorKyAgICB9CisrCisrICB0ZW1wbGF0ZTw+CisrICAgIG1vbmV5cHVuY3Q8d2NoYXJfdCwgdHJ1ZT46On5tb25leXB1bmN0KCkKKysgICAgeworKyAgICAgIGlmIChfTV9kYXRhLT5fTV9wb3NpdGl2ZV9zaWduX3NpemUpCisrCWRlbGV0ZSBbXSBfTV9kYXRhLT5fTV9wb3NpdGl2ZV9zaWduOworKyAgICAgIGlmIChfTV9kYXRhLT5fTV9uZWdhdGl2ZV9zaWduX3NpemUKKysgICAgICAgICAgJiYgd2NzY21wKF9NX2RhdGEtPl9NX25lZ2F0aXZlX3NpZ24sIEwiKCkiKSAhPSAwKQorKwlkZWxldGUgW10gX01fZGF0YS0+X01fbmVnYXRpdmVfc2lnbjsKKysgICAgICBpZiAoX01fZGF0YS0+X01fY3Vycl9zeW1ib2xfc2l6ZSkKKysJZGVsZXRlIFtdIF9NX2RhdGEtPl9NX2N1cnJfc3ltYm9sOworKyAgICAgIGRlbGV0ZSBfTV9kYXRhOworKyAgICB9CisrCisrICB0ZW1wbGF0ZTw+CisrICAgIG1vbmV5cHVuY3Q8d2NoYXJfdCwgZmFsc2U+Ojp+bW9uZXlwdW5jdCgpCisrICAgIHsKKysgICAgICBpZiAoX01fZGF0YS0+X01fcG9zaXRpdmVfc2lnbl9zaXplKQorKwlkZWxldGUgW10gX01fZGF0YS0+X01fcG9zaXRpdmVfc2lnbjsKKysgICAgICBpZiAoX01fZGF0YS0+X01fbmVnYXRpdmVfc2lnbl9zaXplCisrICAgICAgICAgICYmIHdjc2NtcChfTV9kYXRhLT5fTV9uZWdhdGl2ZV9zaWduLCBMIigpIikgIT0gMCkKKysJZGVsZXRlIFtdIF9NX2RhdGEtPl9NX25lZ2F0aXZlX3NpZ247CisrICAgICAgaWYgKF9NX2RhdGEtPl9NX2N1cnJfc3ltYm9sX3NpemUpCisrCWRlbGV0ZSBbXSBfTV9kYXRhLT5fTV9jdXJyX3N5bWJvbDsKKysgICAgICBkZWxldGUgX01fZGF0YTsKKysgICAgfQorKyNlbmRpZgorK30KK2RpZmYgLS1naXQgYS9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvbnVtZXJpY19tZW1iZXJzLmNjIGIvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL251bWVyaWNfbWVtYmVycy5jYworbmV3IGZpbGUgbW9kZSAxMDA2NDQKK2luZGV4IDAwMDAwMDAuLjg4M2VjMWEKKy0tLSAvZGV2L251bGwKKysrKyBiL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9udW1lcmljX21lbWJlcnMuY2MKK0BAIC0wLDAgKzEsMTYwIEBACisrLy8gc3RkOjpudW1wdW5jdCBpbXBsZW1lbnRhdGlvbiBkZXRhaWxzLCBHTlUgdmVyc2lvbiAtKi0gQysrIC0qLQorKworKy8vIENvcHlyaWdodCAoQykgMjAwMSwgMjAwMiwgMjAwMywgMjAwNCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKysvLworKy8vIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgSVNPIEMrKyBMaWJyYXJ5LiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUKKysvLyBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlciB0aGUKKysvLyB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorKy8vIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKQorKy8vIGFueSBsYXRlciB2ZXJzaW9uLgorKworKy8vIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorKy8vIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisrLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorKy8vIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisrCisrLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcKKysvLyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuICBJZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlCisrLy8gU29mdHdhcmUgRm91bmRhdGlvbiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsCisrLy8gVVNBLgorKworKy8vIEFzIGEgc3BlY2lhbCBleGNlcHRpb24sIHlvdSBtYXkgdXNlIHRoaXMgZmlsZSBhcyBwYXJ0IG9mIGEgZnJlZSBzb2Z0d2FyZQorKy8vIGxpYnJhcnkgd2l0aG91dCByZXN0cmljdGlvbi4gIFNwZWNpZmljYWxseSwgaWYgb3RoZXIgZmlsZXMgaW5zdGFudGlhdGUKKysvLyB0ZW1wbGF0ZXMgb3IgdXNlIG1hY3JvcyBvciBpbmxpbmUgZnVuY3Rpb25zIGZyb20gdGhpcyBmaWxlLCBvciB5b3UgY29tcGlsZQorKy8vIHRoaXMgZmlsZSBhbmQgbGluayBpdCB3aXRoIG90aGVyIGZpbGVzIHRvIHByb2R1Y2UgYW4gZXhlY3V0YWJsZSwgdGhpcworKy8vIGZpbGUgZG9lcyBub3QgYnkgaXRzZWxmIGNhdXNlIHRoZSByZXN1bHRpbmcgZXhlY3V0YWJsZSB0byBiZSBjb3ZlcmVkIGJ5CisrLy8gdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLiAgVGhpcyBleGNlcHRpb24gZG9lcyBub3QgaG93ZXZlcgorKy8vIGludmFsaWRhdGUgYW55IG90aGVyIHJlYXNvbnMgd2h5IHRoZSBleGVjdXRhYmxlIGZpbGUgbWlnaHQgYmUgY292ZXJlZCBieQorKy8vIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4KKysKKysvLworKy8vIElTTyBDKysgMTQ4ODI6IDIyLjIuMy4xLjIgIG51bXB1bmN0IHZpcnR1YWwgZnVuY3Rpb25zCisrLy8KKysKKysvLyBXcml0dGVuIGJ5IEJlbmphbWluIEtvc25payA8YmtvekByZWRoYXQuY29tPgorKworKyNkZWZpbmUgX0xJQkMKKysjaW5jbHVkZSA8bG9jYWxlPgorKyN1bmRlZiBfTElCQworKyNpbmNsdWRlIDxiaXRzL2MrK2xvY2FsZV9pbnRlcm5hbC5oPgorKworKyNpZmRlZiBfX1VDTElCQ19NSk4zX09OTFlfXworKyN3YXJuaW5nIHRhaWxvciBmb3Igc3R1YiBsb2NhbGUgc3VwcG9ydAorKyNlbmRpZgorKyNpZm5kZWYgX19VQ0xJQkNfSEFTX1hMT0NBTEVfXworKyNkZWZpbmUgX19ubF9sYW5naW5mb19sKE4sIEwpICAgICAgICAgbmxfbGFuZ2luZm8oKE4pKQorKyNlbmRpZgorKworK25hbWVzcGFjZSBzdGQKKyt7CisrICB0ZW1wbGF0ZTw+CisrICAgIHZvaWQKKysgICAgbnVtcHVuY3Q8Y2hhcj46Ol9NX2luaXRpYWxpemVfbnVtcHVuY3QoX19jX2xvY2FsZSBfX2Nsb2MpCisrICAgIHsKKysgICAgICBpZiAoIV9NX2RhdGEpCisrCV9NX2RhdGEgPSBuZXcgX19udW1wdW5jdF9jYWNoZTxjaGFyPjsKKysKKysgICAgICBpZiAoIV9fY2xvYykKKysJeworKwkgIC8vICJDIiBsb2NhbGUKKysJICBfTV9kYXRhLT5fTV9ncm91cGluZyA9ICIiOworKwkgIF9NX2RhdGEtPl9NX2dyb3VwaW5nX3NpemUgPSAwOworKwkgIF9NX2RhdGEtPl9NX3VzZV9ncm91cGluZyA9IGZhbHNlOworKworKwkgIF9NX2RhdGEtPl9NX2RlY2ltYWxfcG9pbnQgPSAnLic7CisrCSAgX01fZGF0YS0+X01fdGhvdXNhbmRzX3NlcCA9ICcsJzsKKysKKysJICBmb3IgKHNpemVfdCBfX2kgPSAwOyBfX2kgPCBfX251bV9iYXNlOjpfU19vZW5kOyArK19faSkKKysJICAgIF9NX2RhdGEtPl9NX2F0b21zX291dFtfX2ldID0gX19udW1fYmFzZTo6X1NfYXRvbXNfb3V0W19faV07CisrCisrCSAgZm9yIChzaXplX3QgX19qID0gMDsgX19qIDwgX19udW1fYmFzZTo6X1NfaWVuZDsgKytfX2opCisrCSAgICBfTV9kYXRhLT5fTV9hdG9tc19pbltfX2pdID0gX19udW1fYmFzZTo6X1NfYXRvbXNfaW5bX19qXTsKKysJfQorKyAgICAgIGVsc2UKKysJeworKwkgIC8vIE5hbWVkIGxvY2FsZS4KKysJICBfTV9kYXRhLT5fTV9kZWNpbWFsX3BvaW50ID0gKihfX25sX2xhbmdpbmZvX2woREVDSU1BTF9QT0lOVCwKKysJCQkJCQkJX19jbG9jKSk7CisrCSAgX01fZGF0YS0+X01fdGhvdXNhbmRzX3NlcCA9ICooX19ubF9sYW5naW5mb19sKFRIT1VTQU5EU19TRVAsCisrCQkJCQkJCV9fY2xvYykpOworKworKwkgIC8vIENoZWNrIGZvciBOVUxMLCB3aGljaCBpbXBsaWVzIG5vIGdyb3VwaW5nLgorKwkgIGlmIChfTV9kYXRhLT5fTV90aG91c2FuZHNfc2VwID09ICdcMCcpCisrCSAgICBfTV9kYXRhLT5fTV9ncm91cGluZyA9ICIiOworKwkgIGVsc2UKKysJICAgIF9NX2RhdGEtPl9NX2dyb3VwaW5nID0gX19ubF9sYW5naW5mb19sKEdST1VQSU5HLCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX2dyb3VwaW5nX3NpemUgPSBzdHJsZW4oX01fZGF0YS0+X01fZ3JvdXBpbmcpOworKwl9CisrCisrICAgICAgLy8gTkI6IFRoZXJlIGlzIG5vIHdheSB0byBleHRhY3QgdGhpcyBpbmZvIGZyb20gcG9zaXggbG9jYWxlcy4KKysgICAgICAvLyBfTV90cnVlbmFtZSA9IF9fbmxfbGFuZ2luZm9fbChZRVNTVFIsIF9fY2xvYyk7CisrICAgICAgX01fZGF0YS0+X01fdHJ1ZW5hbWUgPSAidHJ1ZSI7CisrICAgICAgX01fZGF0YS0+X01fdHJ1ZW5hbWVfc2l6ZSA9IDQ7CisrICAgICAgLy8gX01fZmFsc2VuYW1lID0gX19ubF9sYW5naW5mb19sKE5PU1RSLCBfX2Nsb2MpOworKyAgICAgIF9NX2RhdGEtPl9NX2ZhbHNlbmFtZSA9ICJmYWxzZSI7CisrICAgICAgX01fZGF0YS0+X01fZmFsc2VuYW1lX3NpemUgPSA1OworKyAgICB9CisrCisrICB0ZW1wbGF0ZTw+CisrICAgIG51bXB1bmN0PGNoYXI+Ojp+bnVtcHVuY3QoKQorKyAgICB7IGRlbGV0ZSBfTV9kYXRhOyB9CisrCisrI2lmZGVmIF9HTElCQ1hYX1VTRV9XQ0hBUl9UCisrICB0ZW1wbGF0ZTw+CisrICAgIHZvaWQKKysgICAgbnVtcHVuY3Q8d2NoYXJfdD46Ol9NX2luaXRpYWxpemVfbnVtcHVuY3QoX19jX2xvY2FsZSBfX2Nsb2MpCisrICAgIHsKKysgICAgICBpZiAoIV9NX2RhdGEpCisrCV9NX2RhdGEgPSBuZXcgX19udW1wdW5jdF9jYWNoZTx3Y2hhcl90PjsKKysKKysgICAgICBpZiAoIV9fY2xvYykKKysJeworKwkgIC8vICJDIiBsb2NhbGUKKysJICBfTV9kYXRhLT5fTV9ncm91cGluZyA9ICIiOworKwkgIF9NX2RhdGEtPl9NX2dyb3VwaW5nX3NpemUgPSAwOworKwkgIF9NX2RhdGEtPl9NX3VzZV9ncm91cGluZyA9IGZhbHNlOworKworKwkgIF9NX2RhdGEtPl9NX2RlY2ltYWxfcG9pbnQgPSBMJy4nOworKwkgIF9NX2RhdGEtPl9NX3Rob3VzYW5kc19zZXAgPSBMJywnOworKworKwkgIC8vIFVzZSBjdHlwZTo6d2lkZW4gY29kZSB3aXRob3V0IHRoZSBmYWNldC4uLgorKwkgIGZvciAoc2l6ZV90IF9faSA9IDA7IF9faSA8IF9fbnVtX2Jhc2U6Ol9TX29lbmQ7ICsrX19pKQorKwkgICAgX01fZGF0YS0+X01fYXRvbXNfb3V0W19faV0gPQorKwkgICAgICBzdGF0aWNfY2FzdDx3Y2hhcl90PihfX251bV9iYXNlOjpfU19hdG9tc19vdXRbX19pXSk7CisrCisrCSAgZm9yIChzaXplX3QgX19qID0gMDsgX19qIDwgX19udW1fYmFzZTo6X1NfaWVuZDsgKytfX2opCisrCSAgICBfTV9kYXRhLT5fTV9hdG9tc19pbltfX2pdID0KKysJICAgICAgc3RhdGljX2Nhc3Q8d2NoYXJfdD4oX19udW1fYmFzZTo6X1NfYXRvbXNfaW5bX19qXSk7CisrCX0KKysgICAgICBlbHNlCisrCXsKKysJICAvLyBOYW1lZCBsb2NhbGUuCisrCSAgLy8gTkI6IEluIHRoZSBHTlUgbW9kZWwgd2NoYXJfdCBpcyBhbHdheXMgMzIgYml0IHdpZGUuCisrCSAgdW5pb24geyBjaGFyICpfX3M7IHdjaGFyX3QgX193OyB9IF9fdTsKKysJICBfX3UuX19zID0gX19ubF9sYW5naW5mb19sKF9OTF9OVU1FUklDX0RFQ0lNQUxfUE9JTlRfV0MsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fZGVjaW1hbF9wb2ludCA9IF9fdS5fX3c7CisrCisrCSAgX191Ll9fcyA9IF9fbmxfbGFuZ2luZm9fbChfTkxfTlVNRVJJQ19USE9VU0FORFNfU0VQX1dDLCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX3Rob3VzYW5kc19zZXAgPSBfX3UuX193OworKworKwkgIGlmIChfTV9kYXRhLT5fTV90aG91c2FuZHNfc2VwID09IEwnXDAnKQorKwkgICAgX01fZGF0YS0+X01fZ3JvdXBpbmcgPSAiIjsKKysJICBlbHNlCisrCSAgICBfTV9kYXRhLT5fTV9ncm91cGluZyA9IF9fbmxfbGFuZ2luZm9fbChHUk9VUElORywgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9ncm91cGluZ19zaXplID0gc3RybGVuKF9NX2RhdGEtPl9NX2dyb3VwaW5nKTsKKysJfQorKworKyAgICAgIC8vIE5COiBUaGVyZSBpcyBubyB3YXkgdG8gZXh0YWN0IHRoaXMgaW5mbyBmcm9tIHBvc2l4IGxvY2FsZXMuCisrICAgICAgLy8gX01fdHJ1ZW5hbWUgPSBfX25sX2xhbmdpbmZvX2woWUVTU1RSLCBfX2Nsb2MpOworKyAgICAgIF9NX2RhdGEtPl9NX3RydWVuYW1lID0gTCJ0cnVlIjsKKysgICAgICBfTV9kYXRhLT5fTV90cnVlbmFtZV9zaXplID0gNDsKKysgICAgICAvLyBfTV9mYWxzZW5hbWUgPSBfX25sX2xhbmdpbmZvX2woTk9TVFIsIF9fY2xvYyk7CisrICAgICAgX01fZGF0YS0+X01fZmFsc2VuYW1lID0gTCJmYWxzZSI7CisrICAgICAgX01fZGF0YS0+X01fZmFsc2VuYW1lX3NpemUgPSA1OworKyAgICB9CisrCisrICB0ZW1wbGF0ZTw+CisrICAgIG51bXB1bmN0PHdjaGFyX3Q+Ojp+bnVtcHVuY3QoKQorKyAgICB7IGRlbGV0ZSBfTV9kYXRhOyB9CisrICNlbmRpZgorK30KK2RpZmYgLS1naXQgYS9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvdGltZV9tZW1iZXJzLmNjIGIvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL3RpbWVfbWVtYmVycy5jYworbmV3IGZpbGUgbW9kZSAxMDA2NDQKK2luZGV4IDAwMDAwMDAuLmUwNzA3ZDcKKy0tLSAvZGV2L251bGwKKysrKyBiL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy90aW1lX21lbWJlcnMuY2MKK0BAIC0wLDAgKzEsNDA2IEBACisrLy8gc3RkOjp0aW1lX2dldCwgc3RkOjp0aW1lX3B1dCBpbXBsZW1lbnRhdGlvbiwgR05VIHZlcnNpb24gLSotIEMrKyAtKi0KKysKKysvLyBDb3B5cmlnaHQgKEMpIDIwMDEsIDIwMDIsIDIwMDMsIDIwMDQgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisrLy8KKysvLyBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIElTTyBDKysgTGlicmFyeS4gIFRoaXMgbGlicmFyeSBpcyBmcmVlCisrLy8gc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIgdGhlCisrLy8gdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKKysvLyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikKKysvLyBhbnkgbGF0ZXIgdmVyc2lvbi4KKysKKysvLyBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKysvLyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorKy8vIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKysvLyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorKworKy8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCisrLy8gd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLiAgSWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZQorKy8vIFNvZnR3YXJlIEZvdW5kYXRpb24sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LAorKy8vIFVTQS4KKysKKysvLyBBcyBhIHNwZWNpYWwgZXhjZXB0aW9uLCB5b3UgbWF5IHVzZSB0aGlzIGZpbGUgYXMgcGFydCBvZiBhIGZyZWUgc29mdHdhcmUKKysvLyBsaWJyYXJ5IHdpdGhvdXQgcmVzdHJpY3Rpb24uICBTcGVjaWZpY2FsbHksIGlmIG90aGVyIGZpbGVzIGluc3RhbnRpYXRlCisrLy8gdGVtcGxhdGVzIG9yIHVzZSBtYWNyb3Mgb3IgaW5saW5lIGZ1bmN0aW9ucyBmcm9tIHRoaXMgZmlsZSwgb3IgeW91IGNvbXBpbGUKKysvLyB0aGlzIGZpbGUgYW5kIGxpbmsgaXQgd2l0aCBvdGhlciBmaWxlcyB0byBwcm9kdWNlIGFuIGV4ZWN1dGFibGUsIHRoaXMKKysvLyBmaWxlIGRvZXMgbm90IGJ5IGl0c2VsZiBjYXVzZSB0aGUgcmVzdWx0aW5nIGV4ZWN1dGFibGUgdG8gYmUgY292ZXJlZCBieQorKy8vIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4gIFRoaXMgZXhjZXB0aW9uIGRvZXMgbm90IGhvd2V2ZXIKKysvLyBpbnZhbGlkYXRlIGFueSBvdGhlciByZWFzb25zIHdoeSB0aGUgZXhlY3V0YWJsZSBmaWxlIG1pZ2h0IGJlIGNvdmVyZWQgYnkKKysvLyB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UuCisrCisrLy8KKysvLyBJU08gQysrIDE0ODgyOiAyMi4yLjUuMS4yIC0gdGltZV9nZXQgdmlydHVhbCBmdW5jdGlvbnMKKysvLyBJU08gQysrIDE0ODgyOiAyMi4yLjUuMy4yIC0gdGltZV9wdXQgdmlydHVhbCBmdW5jdGlvbnMKKysvLworKworKy8vIFdyaXR0ZW4gYnkgQmVuamFtaW4gS29zbmlrIDxia296QHJlZGhhdC5jb20+CisrCisrI2luY2x1ZGUgPGxvY2FsZT4KKysjaW5jbHVkZSA8Yml0cy9jKytsb2NhbGVfaW50ZXJuYWwuaD4KKysKKysjaWZkZWYgX19VQ0xJQkNfTUpOM19PTkxZX18KKysjd2FybmluZyB0YWlsb3IgZm9yIHN0dWIgbG9jYWxlIHN1cHBvcnQKKysjZW5kaWYKKysjaWZuZGVmIF9fVUNMSUJDX0hBU19YTE9DQUxFX18KKysjZGVmaW5lIF9fbmxfbGFuZ2luZm9fbChOLCBMKSAgICAgICAgIG5sX2xhbmdpbmZvKChOKSkKKysjZW5kaWYKKysKKytuYW1lc3BhY2Ugc3RkCisreworKyAgdGVtcGxhdGU8PgorKyAgICB2b2lkCisrICAgIF9fdGltZXB1bmN0PGNoYXI+OjoKKysgICAgX01fcHV0KGNoYXIqIF9fcywgc2l6ZV90IF9fbWF4bGVuLCBjb25zdCBjaGFyKiBfX2Zvcm1hdCwKKysJICAgY29uc3QgdG0qIF9fdG0pIGNvbnN0CisrICAgIHsKKysjaWZkZWYgX19VQ0xJQkNfSEFTX1hMT0NBTEVfXworKyAgICAgIGNvbnN0IHNpemVfdCBfX2xlbiA9IF9fc3RyZnRpbWVfbChfX3MsIF9fbWF4bGVuLCBfX2Zvcm1hdCwgX190bSwKKysJCQkJCV9NX2NfbG9jYWxlX3RpbWVwdW5jdCk7CisrI2Vsc2UKKysgICAgICBjaGFyKiBfX29sZCA9IHN0cmR1cChzZXRsb2NhbGUoTENfQUxMLCBOVUxMKSk7CisrICAgICAgc2V0bG9jYWxlKExDX0FMTCwgX01fbmFtZV90aW1lcHVuY3QpOworKyAgICAgIGNvbnN0IHNpemVfdCBfX2xlbiA9IHN0cmZ0aW1lKF9fcywgX19tYXhsZW4sIF9fZm9ybWF0LCBfX3RtKTsKKysgICAgICBzZXRsb2NhbGUoTENfQUxMLCBfX29sZCk7CisrICAgICAgZnJlZShfX29sZCk7CisrI2VuZGlmCisrICAgICAgLy8gTWFrZSBzdXJlIF9fcyBpcyBudWxsIHRlcm1pbmF0ZWQuCisrICAgICAgaWYgKF9fbGVuID09IDApCisrCV9fc1swXSA9ICdcMCc7CisrICAgIH0KKysKKysgIHRlbXBsYXRlPD4KKysgICAgdm9pZAorKyAgICBfX3RpbWVwdW5jdDxjaGFyPjo6X01faW5pdGlhbGl6ZV90aW1lcHVuY3QoX19jX2xvY2FsZSBfX2Nsb2MpCisrICAgIHsKKysgICAgICBpZiAoIV9NX2RhdGEpCisrCV9NX2RhdGEgPSBuZXcgX190aW1lcHVuY3RfY2FjaGU8Y2hhcj47CisrCisrICAgICAgaWYgKCFfX2Nsb2MpCisrCXsKKysJICAvLyAiQyIgbG9jYWxlCisrCSAgX01fY19sb2NhbGVfdGltZXB1bmN0ID0gX1NfZ2V0X2NfbG9jYWxlKCk7CisrCisrCSAgX01fZGF0YS0+X01fZGF0ZV9mb3JtYXQgPSAiJW0vJWQvJXkiOworKwkgIF9NX2RhdGEtPl9NX2RhdGVfZXJhX2Zvcm1hdCA9ICIlbS8lZC8leSI7CisrCSAgX01fZGF0YS0+X01fdGltZV9mb3JtYXQgPSAiJUg6JU06JVMiOworKwkgIF9NX2RhdGEtPl9NX3RpbWVfZXJhX2Zvcm1hdCA9ICIlSDolTTolUyI7CisrCSAgX01fZGF0YS0+X01fZGF0ZV90aW1lX2Zvcm1hdCA9ICIiOworKwkgIF9NX2RhdGEtPl9NX2RhdGVfdGltZV9lcmFfZm9ybWF0ID0gIiI7CisrCSAgX01fZGF0YS0+X01fYW0gPSAiQU0iOworKwkgIF9NX2RhdGEtPl9NX3BtID0gIlBNIjsKKysJICBfTV9kYXRhLT5fTV9hbV9wbV9mb3JtYXQgPSAiIjsKKysKKysJICAvLyBEYXkgbmFtZXMsIHN0YXJ0aW5nIHdpdGggIkMiJ3MgU3VuZGF5LgorKwkgIF9NX2RhdGEtPl9NX2RheTEgPSAiU3VuZGF5IjsKKysJICBfTV9kYXRhLT5fTV9kYXkyID0gIk1vbmRheSI7CisrCSAgX01fZGF0YS0+X01fZGF5MyA9ICJUdWVzZGF5IjsKKysJICBfTV9kYXRhLT5fTV9kYXk0ID0gIldlZG5lc2RheSI7CisrCSAgX01fZGF0YS0+X01fZGF5NSA9ICJUaHVyc2RheSI7CisrCSAgX01fZGF0YS0+X01fZGF5NiA9ICJGcmlkYXkiOworKwkgIF9NX2RhdGEtPl9NX2RheTcgPSAiU2F0dXJkYXkiOworKworKwkgIC8vIEFiYnJldmlhdGVkIGRheSBuYW1lcywgc3RhcnRpbmcgd2l0aCAiQyIncyBTdW4uCisrCSAgX01fZGF0YS0+X01fYWRheTEgPSAiU3VuIjsKKysJICBfTV9kYXRhLT5fTV9hZGF5MiA9ICJNb24iOworKwkgIF9NX2RhdGEtPl9NX2FkYXkzID0gIlR1ZSI7CisrCSAgX01fZGF0YS0+X01fYWRheTQgPSAiV2VkIjsKKysJICBfTV9kYXRhLT5fTV9hZGF5NSA9ICJUaHUiOworKwkgIF9NX2RhdGEtPl9NX2FkYXk2ID0gIkZyaSI7CisrCSAgX01fZGF0YS0+X01fYWRheTcgPSAiU2F0IjsKKysKKysJICAvLyBNb250aCBuYW1lcywgc3RhcnRpbmcgd2l0aCAiQyIncyBKYW51YXJ5LgorKwkgIF9NX2RhdGEtPl9NX21vbnRoMDEgPSAiSmFudWFyeSI7CisrCSAgX01fZGF0YS0+X01fbW9udGgwMiA9ICJGZWJydWFyeSI7CisrCSAgX01fZGF0YS0+X01fbW9udGgwMyA9ICJNYXJjaCI7CisrCSAgX01fZGF0YS0+X01fbW9udGgwNCA9ICJBcHJpbCI7CisrCSAgX01fZGF0YS0+X01fbW9udGgwNSA9ICJNYXkiOworKwkgIF9NX2RhdGEtPl9NX21vbnRoMDYgPSAiSnVuZSI7CisrCSAgX01fZGF0YS0+X01fbW9udGgwNyA9ICJKdWx5IjsKKysJICBfTV9kYXRhLT5fTV9tb250aDA4ID0gIkF1Z3VzdCI7CisrCSAgX01fZGF0YS0+X01fbW9udGgwOSA9ICJTZXB0ZW1iZXIiOworKwkgIF9NX2RhdGEtPl9NX21vbnRoMTAgPSAiT2N0b2JlciI7CisrCSAgX01fZGF0YS0+X01fbW9udGgxMSA9ICJOb3ZlbWJlciI7CisrCSAgX01fZGF0YS0+X01fbW9udGgxMiA9ICJEZWNlbWJlciI7CisrCisrCSAgLy8gQWJicmV2aWF0ZWQgbW9udGggbmFtZXMsIHN0YXJ0aW5nIHdpdGggIkMiJ3MgSmFuLgorKwkgIF9NX2RhdGEtPl9NX2Ftb250aDAxID0gIkphbiI7CisrCSAgX01fZGF0YS0+X01fYW1vbnRoMDIgPSAiRmViIjsKKysJICBfTV9kYXRhLT5fTV9hbW9udGgwMyA9ICJNYXIiOworKwkgIF9NX2RhdGEtPl9NX2Ftb250aDA0ID0gIkFwciI7CisrCSAgX01fZGF0YS0+X01fYW1vbnRoMDUgPSAiTWF5IjsKKysJICBfTV9kYXRhLT5fTV9hbW9udGgwNiA9ICJKdW4iOworKwkgIF9NX2RhdGEtPl9NX2Ftb250aDA3ID0gIkp1bCI7CisrCSAgX01fZGF0YS0+X01fYW1vbnRoMDggPSAiQXVnIjsKKysJICBfTV9kYXRhLT5fTV9hbW9udGgwOSA9ICJTZXAiOworKwkgIF9NX2RhdGEtPl9NX2Ftb250aDEwID0gIk9jdCI7CisrCSAgX01fZGF0YS0+X01fYW1vbnRoMTEgPSAiTm92IjsKKysJICBfTV9kYXRhLT5fTV9hbW9udGgxMiA9ICJEZWMiOworKwl9CisrICAgICAgZWxzZQorKwl7CisrCSAgX01fY19sb2NhbGVfdGltZXB1bmN0ID0gX1NfY2xvbmVfY19sb2NhbGUoX19jbG9jKTsKKysKKysJICBfTV9kYXRhLT5fTV9kYXRlX2Zvcm1hdCA9IF9fbmxfbGFuZ2luZm9fbChEX0ZNVCwgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9kYXRlX2VyYV9mb3JtYXQgPSBfX25sX2xhbmdpbmZvX2woRVJBX0RfRk1ULCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX3RpbWVfZm9ybWF0ID0gX19ubF9sYW5naW5mb19sKFRfRk1ULCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX3RpbWVfZXJhX2Zvcm1hdCA9IF9fbmxfbGFuZ2luZm9fbChFUkFfVF9GTVQsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fZGF0ZV90aW1lX2Zvcm1hdCA9IF9fbmxfbGFuZ2luZm9fbChEX1RfRk1ULCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX2RhdGVfdGltZV9lcmFfZm9ybWF0ID0gX19ubF9sYW5naW5mb19sKEVSQV9EX1RfRk1ULAorKwkJCQkJCQkgICAgIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fYW0gPSBfX25sX2xhbmdpbmZvX2woQU1fU1RSLCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX3BtID0gX19ubF9sYW5naW5mb19sKFBNX1NUUiwgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9hbV9wbV9mb3JtYXQgPSBfX25sX2xhbmdpbmZvX2woVF9GTVRfQU1QTSwgX19jbG9jKTsKKysKKysJICAvLyBEYXkgbmFtZXMsIHN0YXJ0aW5nIHdpdGggIkMiJ3MgU3VuZGF5LgorKwkgIF9NX2RhdGEtPl9NX2RheTEgPSBfX25sX2xhbmdpbmZvX2woREFZXzEsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fZGF5MiA9IF9fbmxfbGFuZ2luZm9fbChEQVlfMiwgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9kYXkzID0gX19ubF9sYW5naW5mb19sKERBWV8zLCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX2RheTQgPSBfX25sX2xhbmdpbmZvX2woREFZXzQsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fZGF5NSA9IF9fbmxfbGFuZ2luZm9fbChEQVlfNSwgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9kYXk2ID0gX19ubF9sYW5naW5mb19sKERBWV82LCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX2RheTcgPSBfX25sX2xhbmdpbmZvX2woREFZXzcsIF9fY2xvYyk7CisrCisrCSAgLy8gQWJicmV2aWF0ZWQgZGF5IG5hbWVzLCBzdGFydGluZyB3aXRoICJDIidzIFN1bi4KKysJICBfTV9kYXRhLT5fTV9hZGF5MSA9IF9fbmxfbGFuZ2luZm9fbChBQkRBWV8xLCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX2FkYXkyID0gX19ubF9sYW5naW5mb19sKEFCREFZXzIsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fYWRheTMgPSBfX25sX2xhbmdpbmZvX2woQUJEQVlfMywgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9hZGF5NCA9IF9fbmxfbGFuZ2luZm9fbChBQkRBWV80LCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX2FkYXk1ID0gX19ubF9sYW5naW5mb19sKEFCREFZXzUsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fYWRheTYgPSBfX25sX2xhbmdpbmZvX2woQUJEQVlfNiwgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9hZGF5NyA9IF9fbmxfbGFuZ2luZm9fbChBQkRBWV83LCBfX2Nsb2MpOworKworKwkgIC8vIE1vbnRoIG5hbWVzLCBzdGFydGluZyB3aXRoICJDIidzIEphbnVhcnkuCisrCSAgX01fZGF0YS0+X01fbW9udGgwMSA9IF9fbmxfbGFuZ2luZm9fbChNT05fMSwgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9tb250aDAyID0gX19ubF9sYW5naW5mb19sKE1PTl8yLCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX21vbnRoMDMgPSBfX25sX2xhbmdpbmZvX2woTU9OXzMsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fbW9udGgwNCA9IF9fbmxfbGFuZ2luZm9fbChNT05fNCwgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9tb250aDA1ID0gX19ubF9sYW5naW5mb19sKE1PTl81LCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX21vbnRoMDYgPSBfX25sX2xhbmdpbmZvX2woTU9OXzYsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fbW9udGgwNyA9IF9fbmxfbGFuZ2luZm9fbChNT05fNywgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9tb250aDA4ID0gX19ubF9sYW5naW5mb19sKE1PTl84LCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX21vbnRoMDkgPSBfX25sX2xhbmdpbmZvX2woTU9OXzksIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fbW9udGgxMCA9IF9fbmxfbGFuZ2luZm9fbChNT05fMTAsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fbW9udGgxMSA9IF9fbmxfbGFuZ2luZm9fbChNT05fMTEsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fbW9udGgxMiA9IF9fbmxfbGFuZ2luZm9fbChNT05fMTIsIF9fY2xvYyk7CisrCisrCSAgLy8gQWJicmV2aWF0ZWQgbW9udGggbmFtZXMsIHN0YXJ0aW5nIHdpdGggIkMiJ3MgSmFuLgorKwkgIF9NX2RhdGEtPl9NX2Ftb250aDAxID0gX19ubF9sYW5naW5mb19sKEFCTU9OXzEsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fYW1vbnRoMDIgPSBfX25sX2xhbmdpbmZvX2woQUJNT05fMiwgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9hbW9udGgwMyA9IF9fbmxfbGFuZ2luZm9fbChBQk1PTl8zLCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX2Ftb250aDA0ID0gX19ubF9sYW5naW5mb19sKEFCTU9OXzQsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fYW1vbnRoMDUgPSBfX25sX2xhbmdpbmZvX2woQUJNT05fNSwgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9hbW9udGgwNiA9IF9fbmxfbGFuZ2luZm9fbChBQk1PTl82LCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX2Ftb250aDA3ID0gX19ubF9sYW5naW5mb19sKEFCTU9OXzcsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fYW1vbnRoMDggPSBfX25sX2xhbmdpbmZvX2woQUJNT05fOCwgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9hbW9udGgwOSA9IF9fbmxfbGFuZ2luZm9fbChBQk1PTl85LCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX2Ftb250aDEwID0gX19ubF9sYW5naW5mb19sKEFCTU9OXzEwLCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX2Ftb250aDExID0gX19ubF9sYW5naW5mb19sKEFCTU9OXzExLCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX2Ftb250aDEyID0gX19ubF9sYW5naW5mb19sKEFCTU9OXzEyLCBfX2Nsb2MpOworKwl9CisrICAgIH0KKysKKysjaWZkZWYgX0dMSUJDWFhfVVNFX1dDSEFSX1QKKysgIHRlbXBsYXRlPD4KKysgICAgdm9pZAorKyAgICBfX3RpbWVwdW5jdDx3Y2hhcl90Pjo6CisrICAgIF9NX3B1dCh3Y2hhcl90KiBfX3MsIHNpemVfdCBfX21heGxlbiwgY29uc3Qgd2NoYXJfdCogX19mb3JtYXQsCisrCSAgIGNvbnN0IHRtKiBfX3RtKSBjb25zdAorKyAgICB7CisrI2lmZGVmIF9fVUNMSUJDX0hBU19YTE9DQUxFX18KKysgICAgICBfX3djc2Z0aW1lX2woX19zLCBfX21heGxlbiwgX19mb3JtYXQsIF9fdG0sIF9NX2NfbG9jYWxlX3RpbWVwdW5jdCk7CisrICAgICAgY29uc3Qgc2l6ZV90IF9fbGVuID0gX193Y3NmdGltZV9sKF9fcywgX19tYXhsZW4sIF9fZm9ybWF0LCBfX3RtLAorKwkJCQkJX01fY19sb2NhbGVfdGltZXB1bmN0KTsKKysjZWxzZQorKyAgICAgIGNoYXIqIF9fb2xkID0gc3RyZHVwKHNldGxvY2FsZShMQ19BTEwsIE5VTEwpKTsKKysgICAgICBzZXRsb2NhbGUoTENfQUxMLCBfTV9uYW1lX3RpbWVwdW5jdCk7CisrICAgICAgY29uc3Qgc2l6ZV90IF9fbGVuID0gd2NzZnRpbWUoX19zLCBfX21heGxlbiwgX19mb3JtYXQsIF9fdG0pOworKyAgICAgIHNldGxvY2FsZShMQ19BTEwsIF9fb2xkKTsKKysgICAgICBmcmVlKF9fb2xkKTsKKysjZW5kaWYKKysgICAgICAvLyBNYWtlIHN1cmUgX19zIGlzIG51bGwgdGVybWluYXRlZC4KKysgICAgICBpZiAoX19sZW4gPT0gMCkKKysJX19zWzBdID0gTCdcMCc7CisrICAgIH0KKysKKysgIHRlbXBsYXRlPD4KKysgICAgdm9pZAorKyAgICBfX3RpbWVwdW5jdDx3Y2hhcl90Pjo6X01faW5pdGlhbGl6ZV90aW1lcHVuY3QoX19jX2xvY2FsZSBfX2Nsb2MpCisrICAgIHsKKysgICAgICBpZiAoIV9NX2RhdGEpCisrCV9NX2RhdGEgPSBuZXcgX190aW1lcHVuY3RfY2FjaGU8d2NoYXJfdD47CisrCisrI3dhcm5pbmcgd2lkZSB0aW1lIHN0dWZmCisrLy8gICAgICAgaWYgKCFfX2Nsb2MpCisrCXsKKysJICAvLyAiQyIgbG9jYWxlCisrCSAgX01fY19sb2NhbGVfdGltZXB1bmN0ID0gX1NfZ2V0X2NfbG9jYWxlKCk7CisrCisrCSAgX01fZGF0YS0+X01fZGF0ZV9mb3JtYXQgPSBMIiVtLyVkLyV5IjsKKysJICBfTV9kYXRhLT5fTV9kYXRlX2VyYV9mb3JtYXQgPSBMIiVtLyVkLyV5IjsKKysJICBfTV9kYXRhLT5fTV90aW1lX2Zvcm1hdCA9IEwiJUg6JU06JVMiOworKwkgIF9NX2RhdGEtPl9NX3RpbWVfZXJhX2Zvcm1hdCA9IEwiJUg6JU06JVMiOworKwkgIF9NX2RhdGEtPl9NX2RhdGVfdGltZV9mb3JtYXQgPSBMIiI7CisrCSAgX01fZGF0YS0+X01fZGF0ZV90aW1lX2VyYV9mb3JtYXQgPSBMIiI7CisrCSAgX01fZGF0YS0+X01fYW0gPSBMIkFNIjsKKysJICBfTV9kYXRhLT5fTV9wbSA9IEwiUE0iOworKwkgIF9NX2RhdGEtPl9NX2FtX3BtX2Zvcm1hdCA9IEwiIjsKKysKKysJICAvLyBEYXkgbmFtZXMsIHN0YXJ0aW5nIHdpdGggIkMiJ3MgU3VuZGF5LgorKwkgIF9NX2RhdGEtPl9NX2RheTEgPSBMIlN1bmRheSI7CisrCSAgX01fZGF0YS0+X01fZGF5MiA9IEwiTW9uZGF5IjsKKysJICBfTV9kYXRhLT5fTV9kYXkzID0gTCJUdWVzZGF5IjsKKysJICBfTV9kYXRhLT5fTV9kYXk0ID0gTCJXZWRuZXNkYXkiOworKwkgIF9NX2RhdGEtPl9NX2RheTUgPSBMIlRodXJzZGF5IjsKKysJICBfTV9kYXRhLT5fTV9kYXk2ID0gTCJGcmlkYXkiOworKwkgIF9NX2RhdGEtPl9NX2RheTcgPSBMIlNhdHVyZGF5IjsKKysKKysJICAvLyBBYmJyZXZpYXRlZCBkYXkgbmFtZXMsIHN0YXJ0aW5nIHdpdGggIkMiJ3MgU3VuLgorKwkgIF9NX2RhdGEtPl9NX2FkYXkxID0gTCJTdW4iOworKwkgIF9NX2RhdGEtPl9NX2FkYXkyID0gTCJNb24iOworKwkgIF9NX2RhdGEtPl9NX2FkYXkzID0gTCJUdWUiOworKwkgIF9NX2RhdGEtPl9NX2FkYXk0ID0gTCJXZWQiOworKwkgIF9NX2RhdGEtPl9NX2FkYXk1ID0gTCJUaHUiOworKwkgIF9NX2RhdGEtPl9NX2FkYXk2ID0gTCJGcmkiOworKwkgIF9NX2RhdGEtPl9NX2FkYXk3ID0gTCJTYXQiOworKworKwkgIC8vIE1vbnRoIG5hbWVzLCBzdGFydGluZyB3aXRoICJDIidzIEphbnVhcnkuCisrCSAgX01fZGF0YS0+X01fbW9udGgwMSA9IEwiSmFudWFyeSI7CisrCSAgX01fZGF0YS0+X01fbW9udGgwMiA9IEwiRmVicnVhcnkiOworKwkgIF9NX2RhdGEtPl9NX21vbnRoMDMgPSBMIk1hcmNoIjsKKysJICBfTV9kYXRhLT5fTV9tb250aDA0ID0gTCJBcHJpbCI7CisrCSAgX01fZGF0YS0+X01fbW9udGgwNSA9IEwiTWF5IjsKKysJICBfTV9kYXRhLT5fTV9tb250aDA2ID0gTCJKdW5lIjsKKysJICBfTV9kYXRhLT5fTV9tb250aDA3ID0gTCJKdWx5IjsKKysJICBfTV9kYXRhLT5fTV9tb250aDA4ID0gTCJBdWd1c3QiOworKwkgIF9NX2RhdGEtPl9NX21vbnRoMDkgPSBMIlNlcHRlbWJlciI7CisrCSAgX01fZGF0YS0+X01fbW9udGgxMCA9IEwiT2N0b2JlciI7CisrCSAgX01fZGF0YS0+X01fbW9udGgxMSA9IEwiTm92ZW1iZXIiOworKwkgIF9NX2RhdGEtPl9NX21vbnRoMTIgPSBMIkRlY2VtYmVyIjsKKysKKysJICAvLyBBYmJyZXZpYXRlZCBtb250aCBuYW1lcywgc3RhcnRpbmcgd2l0aCAiQyIncyBKYW4uCisrCSAgX01fZGF0YS0+X01fYW1vbnRoMDEgPSBMIkphbiI7CisrCSAgX01fZGF0YS0+X01fYW1vbnRoMDIgPSBMIkZlYiI7CisrCSAgX01fZGF0YS0+X01fYW1vbnRoMDMgPSBMIk1hciI7CisrCSAgX01fZGF0YS0+X01fYW1vbnRoMDQgPSBMIkFwciI7CisrCSAgX01fZGF0YS0+X01fYW1vbnRoMDUgPSBMIk1heSI7CisrCSAgX01fZGF0YS0+X01fYW1vbnRoMDYgPSBMIkp1biI7CisrCSAgX01fZGF0YS0+X01fYW1vbnRoMDcgPSBMIkp1bCI7CisrCSAgX01fZGF0YS0+X01fYW1vbnRoMDggPSBMIkF1ZyI7CisrCSAgX01fZGF0YS0+X01fYW1vbnRoMDkgPSBMIlNlcCI7CisrCSAgX01fZGF0YS0+X01fYW1vbnRoMTAgPSBMIk9jdCI7CisrCSAgX01fZGF0YS0+X01fYW1vbnRoMTEgPSBMIk5vdiI7CisrCSAgX01fZGF0YS0+X01fYW1vbnRoMTIgPSBMIkRlYyI7CisrCX0KKysjaWYgMAorKyAgICAgIGVsc2UKKysJeworKwkgIF9NX2NfbG9jYWxlX3RpbWVwdW5jdCA9IF9TX2Nsb25lX2NfbG9jYWxlKF9fY2xvYyk7CisrCisrCSAgdW5pb24geyBjaGFyICpfX3M7IHdjaGFyX3QgKl9fdzsgfSBfX3U7CisrCisrCSAgX191Ll9fcyA9IF9fbmxfbGFuZ2luZm9fbChfTkxfV0RfRk1ULCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX2RhdGVfZm9ybWF0ID0gX191Ll9fdzsKKysJICBfX3UuX19zID0gX19ubF9sYW5naW5mb19sKF9OTF9XRVJBX0RfRk1ULCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX2RhdGVfZXJhX2Zvcm1hdCA9IF9fdS5fX3c7CisrCSAgX191Ll9fcyA9IF9fbmxfbGFuZ2luZm9fbChfTkxfV1RfRk1ULCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX3RpbWVfZm9ybWF0ID0gX191Ll9fdzsKKysJICBfX3UuX19zID0gX19ubF9sYW5naW5mb19sKF9OTF9XRVJBX1RfRk1ULCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX3RpbWVfZXJhX2Zvcm1hdCA9IF9fdS5fX3c7CisrCSAgX191Ll9fcyA9IF9fbmxfbGFuZ2luZm9fbChfTkxfV0RfVF9GTVQsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fZGF0ZV90aW1lX2Zvcm1hdCA9IF9fdS5fX3c7CisrCSAgX191Ll9fcyA9IF9fbmxfbGFuZ2luZm9fbChfTkxfV0VSQV9EX1RfRk1ULCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX2RhdGVfdGltZV9lcmFfZm9ybWF0ID0gX191Ll9fdzsKKysJICBfX3UuX19zID0gX19ubF9sYW5naW5mb19sKF9OTF9XQU1fU1RSLCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX2FtID0gX191Ll9fdzsKKysJICBfX3UuX19zID0gX19ubF9sYW5naW5mb19sKF9OTF9XUE1fU1RSLCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX3BtID0gX191Ll9fdzsKKysJICBfX3UuX19zID0gX19ubF9sYW5naW5mb19sKF9OTF9XVF9GTVRfQU1QTSwgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9hbV9wbV9mb3JtYXQgPSBfX3UuX193OworKworKwkgIC8vIERheSBuYW1lcywgc3RhcnRpbmcgd2l0aCAiQyIncyBTdW5kYXkuCisrCSAgX191Ll9fcyA9IF9fbmxfbGFuZ2luZm9fbChfTkxfV0RBWV8xLCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX2RheTEgPSBfX3UuX193OworKwkgIF9fdS5fX3MgPSBfX25sX2xhbmdpbmZvX2woX05MX1dEQVlfMiwgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9kYXkyID0gX191Ll9fdzsKKysJICBfX3UuX19zID0gX19ubF9sYW5naW5mb19sKF9OTF9XREFZXzMsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fZGF5MyA9IF9fdS5fX3c7CisrCSAgX191Ll9fcyA9IF9fbmxfbGFuZ2luZm9fbChfTkxfV0RBWV80LCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX2RheTQgPSBfX3UuX193OworKwkgIF9fdS5fX3MgPSBfX25sX2xhbmdpbmZvX2woX05MX1dEQVlfNSwgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9kYXk1ID0gX191Ll9fdzsKKysJICBfX3UuX19zID0gX19ubF9sYW5naW5mb19sKF9OTF9XREFZXzYsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fZGF5NiA9IF9fdS5fX3c7CisrCSAgX191Ll9fcyA9IF9fbmxfbGFuZ2luZm9fbChfTkxfV0RBWV83LCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX2RheTcgPSBfX3UuX193OworKworKwkgIC8vIEFiYnJldmlhdGVkIGRheSBuYW1lcywgc3RhcnRpbmcgd2l0aCAiQyIncyBTdW4uCisrCSAgX191Ll9fcyA9IF9fbmxfbGFuZ2luZm9fbChfTkxfV0FCREFZXzEsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fYWRheTEgPSBfX3UuX193OworKwkgIF9fdS5fX3MgPSBfX25sX2xhbmdpbmZvX2woX05MX1dBQkRBWV8yLCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX2FkYXkyID0gX191Ll9fdzsKKysJICBfX3UuX19zID0gX19ubF9sYW5naW5mb19sKF9OTF9XQUJEQVlfMywgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9hZGF5MyA9IF9fdS5fX3c7CisrCSAgX191Ll9fcyA9IF9fbmxfbGFuZ2luZm9fbChfTkxfV0FCREFZXzQsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fYWRheTQgPSBfX3UuX193OworKwkgIF9fdS5fX3MgPSBfX25sX2xhbmdpbmZvX2woX05MX1dBQkRBWV81LCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX2FkYXk1ID0gX191Ll9fdzsKKysJICBfX3UuX19zID0gX19ubF9sYW5naW5mb19sKF9OTF9XQUJEQVlfNiwgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9hZGF5NiA9IF9fdS5fX3c7CisrCSAgX191Ll9fcyA9IF9fbmxfbGFuZ2luZm9fbChfTkxfV0FCREFZXzcsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fYWRheTcgPSBfX3UuX193OworKworKwkgIC8vIE1vbnRoIG5hbWVzLCBzdGFydGluZyB3aXRoICJDIidzIEphbnVhcnkuCisrCSAgX191Ll9fcyA9IF9fbmxfbGFuZ2luZm9fbChfTkxfV01PTl8xLCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX21vbnRoMDEgPSBfX3UuX193OworKwkgIF9fdS5fX3MgPSBfX25sX2xhbmdpbmZvX2woX05MX1dNT05fMiwgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9tb250aDAyID0gX191Ll9fdzsKKysJICBfX3UuX19zID0gX19ubF9sYW5naW5mb19sKF9OTF9XTU9OXzMsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fbW9udGgwMyA9IF9fdS5fX3c7CisrCSAgX191Ll9fcyA9IF9fbmxfbGFuZ2luZm9fbChfTkxfV01PTl80LCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX21vbnRoMDQgPSBfX3UuX193OworKwkgIF9fdS5fX3MgPSBfX25sX2xhbmdpbmZvX2woX05MX1dNT05fNSwgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9tb250aDA1ID0gX191Ll9fdzsKKysJICBfX3UuX19zID0gX19ubF9sYW5naW5mb19sKF9OTF9XTU9OXzYsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fbW9udGgwNiA9IF9fdS5fX3c7CisrCSAgX191Ll9fcyA9IF9fbmxfbGFuZ2luZm9fbChfTkxfV01PTl83LCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX21vbnRoMDcgPSBfX3UuX193OworKwkgIF9fdS5fX3MgPSBfX25sX2xhbmdpbmZvX2woX05MX1dNT05fOCwgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9tb250aDA4ID0gX191Ll9fdzsKKysJICBfX3UuX19zID0gX19ubF9sYW5naW5mb19sKF9OTF9XTU9OXzksIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fbW9udGgwOSA9IF9fdS5fX3c7CisrCSAgX191Ll9fcyA9IF9fbmxfbGFuZ2luZm9fbChfTkxfV01PTl8xMCwgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9tb250aDEwID0gX191Ll9fdzsKKysJICBfX3UuX19zID0gX19ubF9sYW5naW5mb19sKF9OTF9XTU9OXzExLCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX21vbnRoMTEgPSBfX3UuX193OworKwkgIF9fdS5fX3MgPSBfX25sX2xhbmdpbmZvX2woX05MX1dNT05fMTIsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fbW9udGgxMiA9IF9fdS5fX3c7CisrCisrCSAgLy8gQWJicmV2aWF0ZWQgbW9udGggbmFtZXMsIHN0YXJ0aW5nIHdpdGggIkMiJ3MgSmFuLgorKwkgIF9fdS5fX3MgPSBfX25sX2xhbmdpbmZvX2woX05MX1dBQk1PTl8xLCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX2Ftb250aDAxID0gX191Ll9fdzsKKysJICBfX3UuX19zID0gX19ubF9sYW5naW5mb19sKF9OTF9XQUJNT05fMiwgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9hbW9udGgwMiA9IF9fdS5fX3c7CisrCSAgX191Ll9fcyA9IF9fbmxfbGFuZ2luZm9fbChfTkxfV0FCTU9OXzMsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fYW1vbnRoMDMgPSBfX3UuX193OworKwkgIF9fdS5fX3MgPSBfX25sX2xhbmdpbmZvX2woX05MX1dBQk1PTl80LCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX2Ftb250aDA0ID0gX191Ll9fdzsKKysJICBfX3UuX19zID0gX19ubF9sYW5naW5mb19sKF9OTF9XQUJNT05fNSwgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9hbW9udGgwNSA9IF9fdS5fX3c7CisrCSAgX191Ll9fcyA9IF9fbmxfbGFuZ2luZm9fbChfTkxfV0FCTU9OXzYsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fYW1vbnRoMDYgPSBfX3UuX193OworKwkgIF9fdS5fX3MgPSBfX25sX2xhbmdpbmZvX2woX05MX1dBQk1PTl83LCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX2Ftb250aDA3ID0gX191Ll9fdzsKKysJICBfX3UuX19zID0gX19ubF9sYW5naW5mb19sKF9OTF9XQUJNT05fOCwgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9hbW9udGgwOCA9IF9fdS5fX3c7CisrCSAgX191Ll9fcyA9IF9fbmxfbGFuZ2luZm9fbChfTkxfV0FCTU9OXzksIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fYW1vbnRoMDkgPSBfX3UuX193OworKwkgIF9fdS5fX3MgPSBfX25sX2xhbmdpbmZvX2woX05MX1dBQk1PTl8xMCwgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9hbW9udGgxMCA9IF9fdS5fX3c7CisrCSAgX191Ll9fcyA9IF9fbmxfbGFuZ2luZm9fbChfTkxfV0FCTU9OXzExLCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX2Ftb250aDExID0gX191Ll9fdzsKKysJICBfX3UuX19zID0gX19ubF9sYW5naW5mb19sKF9OTF9XQUJNT05fMTIsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fYW1vbnRoMTIgPSBfX3UuX193OworKwl9CisrI2VuZGlmIC8vIDAKKysgICAgfQorKyNlbmRpZgorK30KK2RpZmYgLS1naXQgYS9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvdGltZV9tZW1iZXJzLmggYi9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvdGltZV9tZW1iZXJzLmgKK25ldyBmaWxlIG1vZGUgMTAwNjQ0CitpbmRleCAwMDAwMDAwLi5iYThlODU4CistLS0gL2Rldi9udWxsCisrKysgYi9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvdGltZV9tZW1iZXJzLmgKK0BAIC0wLDAgKzEsNjggQEAKKysvLyBzdGQ6OnRpbWVfZ2V0LCBzdGQ6OnRpbWVfcHV0IGltcGxlbWVudGF0aW9uLCBHTlUgdmVyc2lvbiAtKi0gQysrIC0qLQorKworKy8vIENvcHlyaWdodCAoQykgMjAwMSwgMjAwMiwgMjAwMywgMjAwNCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKysvLworKy8vIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgSVNPIEMrKyBMaWJyYXJ5LiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUKKysvLyBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlciB0aGUKKysvLyB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorKy8vIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKQorKy8vIGFueSBsYXRlciB2ZXJzaW9uLgorKworKy8vIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorKy8vIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisrLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorKy8vIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisrCisrLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcKKysvLyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuICBJZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlCisrLy8gU29mdHdhcmUgRm91bmRhdGlvbiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsCisrLy8gVVNBLgorKworKy8vIEFzIGEgc3BlY2lhbCBleGNlcHRpb24sIHlvdSBtYXkgdXNlIHRoaXMgZmlsZSBhcyBwYXJ0IG9mIGEgZnJlZSBzb2Z0d2FyZQorKy8vIGxpYnJhcnkgd2l0aG91dCByZXN0cmljdGlvbi4gIFNwZWNpZmljYWxseSwgaWYgb3RoZXIgZmlsZXMgaW5zdGFudGlhdGUKKysvLyB0ZW1wbGF0ZXMgb3IgdXNlIG1hY3JvcyBvciBpbmxpbmUgZnVuY3Rpb25zIGZyb20gdGhpcyBmaWxlLCBvciB5b3UgY29tcGlsZQorKy8vIHRoaXMgZmlsZSBhbmQgbGluayBpdCB3aXRoIG90aGVyIGZpbGVzIHRvIHByb2R1Y2UgYW4gZXhlY3V0YWJsZSwgdGhpcworKy8vIGZpbGUgZG9lcyBub3QgYnkgaXRzZWxmIGNhdXNlIHRoZSByZXN1bHRpbmcgZXhlY3V0YWJsZSB0byBiZSBjb3ZlcmVkIGJ5CisrLy8gdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLiAgVGhpcyBleGNlcHRpb24gZG9lcyBub3QgaG93ZXZlcgorKy8vIGludmFsaWRhdGUgYW55IG90aGVyIHJlYXNvbnMgd2h5IHRoZSBleGVjdXRhYmxlIGZpbGUgbWlnaHQgYmUgY292ZXJlZCBieQorKy8vIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4KKysKKysvLworKy8vIElTTyBDKysgMTQ4ODI6IDIyLjIuNS4xLjIgLSB0aW1lX2dldCBmdW5jdGlvbnMKKysvLyBJU08gQysrIDE0ODgyOiAyMi4yLjUuMy4yIC0gdGltZV9wdXQgZnVuY3Rpb25zCisrLy8KKysKKysvLyBXcml0dGVuIGJ5IEJlbmphbWluIEtvc25payA8YmtvekByZWRoYXQuY29tPgorKworKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPgorKyAgICBfX3RpbWVwdW5jdDxfQ2hhclQ+OjpfX3RpbWVwdW5jdChzaXplX3QgX19yZWZzKQorKyAgICA6IGZhY2V0KF9fcmVmcyksIF9NX2RhdGEoTlVMTCksIF9NX2NfbG9jYWxlX3RpbWVwdW5jdChOVUxMKSwKKysgICAgX01fbmFtZV90aW1lcHVuY3QoX1NfZ2V0X2NfbmFtZSgpKQorKyAgICB7IF9NX2luaXRpYWxpemVfdGltZXB1bmN0KCk7IH0KKysKKysgIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4KKysgICAgX190aW1lcHVuY3Q8X0NoYXJUPjo6X190aW1lcHVuY3QoX19jYWNoZV90eXBlKiBfX2NhY2hlLCBzaXplX3QgX19yZWZzKQorKyAgICA6IGZhY2V0KF9fcmVmcyksIF9NX2RhdGEoX19jYWNoZSksIF9NX2NfbG9jYWxlX3RpbWVwdW5jdChOVUxMKSwKKysgICAgX01fbmFtZV90aW1lcHVuY3QoX1NfZ2V0X2NfbmFtZSgpKQorKyAgICB7IF9NX2luaXRpYWxpemVfdGltZXB1bmN0KCk7IH0KKysKKysgIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4KKysgICAgX190aW1lcHVuY3Q8X0NoYXJUPjo6X190aW1lcHVuY3QoX19jX2xvY2FsZSBfX2Nsb2MsIGNvbnN0IGNoYXIqIF9fcywKKysJCQkJICAgICBzaXplX3QgX19yZWZzKQorKyAgICA6IGZhY2V0KF9fcmVmcyksIF9NX2RhdGEoTlVMTCksIF9NX2NfbG9jYWxlX3RpbWVwdW5jdChOVUxMKSwKKysgICAgX01fbmFtZV90aW1lcHVuY3QoX19zKQorKyAgICB7CisrICAgICAgY2hhciogX190bXAgPSBuZXcgY2hhcltzdGQ6OnN0cmxlbihfX3MpICsgMV07CisrICAgICAgc3RkOjpzdHJjcHkoX190bXAsIF9fcyk7CisrICAgICAgX01fbmFtZV90aW1lcHVuY3QgPSBfX3RtcDsKKysgICAgICBfTV9pbml0aWFsaXplX3RpbWVwdW5jdChfX2Nsb2MpOworKyAgICB9CisrCisrICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+CisrICAgIF9fdGltZXB1bmN0PF9DaGFyVD46On5fX3RpbWVwdW5jdCgpCisrICAgIHsKKysgICAgICBpZiAoX01fbmFtZV90aW1lcHVuY3QgIT0gX1NfZ2V0X2NfbmFtZSgpKQorKwlkZWxldGUgW10gX01fbmFtZV90aW1lcHVuY3Q7CisrICAgICAgZGVsZXRlIF9NX2RhdGE7CisrICAgICAgX1NfZGVzdHJveV9jX2xvY2FsZShfTV9jX2xvY2FsZV90aW1lcHVuY3QpOworKyAgICB9CitkaWZmIC0tZ2l0IGEvbGlic3RkYysrLXYzL2NvbmZpZ3VyZSBiL2xpYnN0ZGMrKy12My9jb25maWd1cmUKK2luZGV4IDQxNzk3YTkuLjhhNTQ4MWMgMTAwNzU1CistLS0gYS9saWJzdGRjKystdjMvY29uZmlndXJlCisrKysgYi9saWJzdGRjKystdjMvY29uZmlndXJlCitAQCAtMTU4MzAsNiArMTU4MzAsOSBAQCBmaQorICAgIyBEZWZhdWx0IHRvICJnZW5lcmljIi4KKyAgIGlmIHRlc3QgJGVuYWJsZV9jbG9jYWxlX2ZsYWcgPSBhdXRvOyB0aGVuCisgICAgIGNhc2UgJHt0YXJnZXRfb3N9IGluCisrICAgICAgKi11Y2xpYmMqKQorKyAgICAgICAgZW5hYmxlX2Nsb2NhbGVfZmxhZz11Y2xpYmMKKysgICAgICAgIDs7CisgICAgICAgbGludXgqIHwgZ251KiB8IGtmcmVlYnNkKi1nbnUgfCBrbmV0YnNkKi1nbnUpCisgCWVuYWJsZV9jbG9jYWxlX2ZsYWc9Z251CisgCTs7CitAQCAtMTYxMDgsNiArMTYxMTEsNzggQEAgJGFzX2VjaG8gIm5ld2xpYiIgPiY2OyB9CisgICAgICAgQ1RJTUVfQ0M9Y29uZmlnL2xvY2FsZS9nZW5lcmljL3RpbWVfbWVtYmVycy5jYworICAgICAgIENMT0NBTEVfSU5URVJOQUxfSD1jb25maWcvbG9jYWxlL2dlbmVyaWMvYysrbG9jYWxlX2ludGVybmFsLmgKKyAgICAgICA7OworKyAgICB1Y2xpYmMpCisrICAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IHVjbGliYyIgPiY1CisrJGFzX2VjaG8gInVjbGliYyIgPiY2OyB9CisrCisrICAgICAgIyBEZWNsYXJlIGludGVudGlvbiB0byB1c2UgZ2V0dGV4dCwgYW5kIGFkZCBzdXBwb3J0IGZvciBzcGVjaWZpYworKyAgICAgICMgbGFuZ3VhZ2VzLgorKyAgICAgICMgRm9yIHNvbWUgcmVhc29uLCBBTExfTElOR1VBUyBoYXMgdG8gYmUgYmVmb3JlIEFNLUdOVS1HRVRURVhUCisrICAgICAgQUxMX0xJTkdVQVM9ImRlIGZyIgorKworKyAgICAgICMgRG9uJ3QgY2FsbCBBTS1HTlUtR0VUVEVYVCBoZXJlLiBJbnN0ZWFkLCBhc3N1bWUgZ2xpYmMuCisrICAgICAgIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICJtc2dmbXQiLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgorK3NldCBkdW1teSBtc2dmbXQ7IGFjX3dvcmQ9JDIKKyt7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1CisrJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yICRhY193b3JkLi4uICIgPiY2OyB9CisraWYgdGVzdCAiJHthY19jdl9wcm9nX2NoZWNrX21zZ2ZtdCtzZXR9IiA9IHNldDsgdGhlbiA6CisrICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorK2Vsc2UKKysgIGlmIHRlc3QgLW4gIiRjaGVja19tc2dmbXQiOyB0aGVuCisrICBhY19jdl9wcm9nX2NoZWNrX21zZ2ZtdD0iJGNoZWNrX21zZ2ZtdCIgIyBMZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3QuCisrZWxzZQorK2FzX3NhdmVfSUZTPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKKytmb3IgYXNfZGlyIGluICRQQVRICisrZG8KKysgIElGUz0kYXNfc2F2ZV9JRlMKKysgIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCisrICAgIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbworKyAgaWYgeyB0ZXN0IC1mICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiAmJiAkYXNfdGVzdF94ICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IjsgfTsgdGhlbgorKyAgICBhY19jdl9wcm9nX2NoZWNrX21zZ2ZtdD0ieWVzIgorKyAgICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBmb3VuZCAkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiA+JjUKKysgICAgYnJlYWsgMgorKyAgZmkKKytkb25lCisrICBkb25lCisrSUZTPSRhc19zYXZlX0lGUworKworKyAgdGVzdCAteiAiJGFjX2N2X3Byb2dfY2hlY2tfbXNnZm10IiAmJiBhY19jdl9wcm9nX2NoZWNrX21zZ2ZtdD0ibm8iCisrZmkKKytmaQorK2NoZWNrX21zZ2ZtdD0kYWNfY3ZfcHJvZ19jaGVja19tc2dmbXQKKytpZiB0ZXN0IC1uICIkY2hlY2tfbXNnZm10IjsgdGhlbgorKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRjaGVja19tc2dmbXQiID4mNQorKyRhc19lY2hvICIkY2hlY2tfbXNnZm10IiA+JjY7IH0KKytlbHNlCisrICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQorKyRhc19lY2hvICJubyIgPiY2OyB9CisrZmkKKysKKysKKysgICAgICBpZiB0ZXN0IHgiJGNoZWNrX21zZ2ZtdCIgPSB4InllcyIgJiYgdGVzdCB4IiRlbmFibGVfbmxzIiA9IHgieWVzIjsgdGhlbgorKyAgICAgICAgVVNFX05MUz15ZXMKKysgICAgICBmaQorKyAgICAgICMgRXhwb3J0IHRoZSBidWlsZCBvYmplY3RzLgorKyAgICAgIGZvciBsaW5nIGluICRBTExfTElOR1VBUzsgZG8gXAorKyAgICAgICAgZ2xpYmN4eF9NT0ZJTEVTPSIkZ2xpYmN4eF9NT0ZJTEVTICRsaW5nLm1vIjsgXAorKyAgICAgICAgZ2xpYmN4eF9QT0ZJTEVTPSIkZ2xpYmN4eF9QT0ZJTEVTICRsaW5nLnBvIjsgXAorKyAgICAgIGRvbmUKKysKKysKKysKKysgICAgICBDTE9DQUxFX0g9Y29uZmlnL2xvY2FsZS91Y2xpYmMvY19sb2NhbGUuaAorKyAgICAgIENMT0NBTEVfQ0M9Y29uZmlnL2xvY2FsZS91Y2xpYmMvY19sb2NhbGUuY2MKKysgICAgICBDQ09ERUNWVF9DQz1jb25maWcvbG9jYWxlL3VjbGliYy9jb2RlY3Z0X21lbWJlcnMuY2MKKysgICAgICBDQ09MTEFURV9DQz1jb25maWcvbG9jYWxlL3VjbGliYy9jb2xsYXRlX21lbWJlcnMuY2MKKysgICAgICBDQ1RZUEVfQ0M9Y29uZmlnL2xvY2FsZS91Y2xpYmMvY3R5cGVfbWVtYmVycy5jYworKyAgICAgIENNRVNTQUdFU19IPWNvbmZpZy9sb2NhbGUvdWNsaWJjL21lc3NhZ2VzX21lbWJlcnMuaAorKyAgICAgIENNRVNTQUdFU19DQz1jb25maWcvbG9jYWxlL3VjbGliYy9tZXNzYWdlc19tZW1iZXJzLmNjCisrICAgICAgQ01PTkVZX0NDPWNvbmZpZy9sb2NhbGUvdWNsaWJjL21vbmV0YXJ5X21lbWJlcnMuY2MKKysgICAgICBDTlVNRVJJQ19DQz1jb25maWcvbG9jYWxlL3VjbGliYy9udW1lcmljX21lbWJlcnMuY2MKKysgICAgICBDVElNRV9IPWNvbmZpZy9sb2NhbGUvdWNsaWJjL3RpbWVfbWVtYmVycy5oCisrICAgICAgQ1RJTUVfQ0M9Y29uZmlnL2xvY2FsZS91Y2xpYmMvdGltZV9tZW1iZXJzLmNjCisrICAgICAgQ0xPQ0FMRV9JTlRFUk5BTF9IPWNvbmZpZy9sb2NhbGUvdWNsaWJjL2MrK2xvY2FsZV9pbnRlcm5hbC5oCisrICAgICAgOzsKKyAgIGVzYWMKKyAKKyAgICMgVGhpcyBpcyB3aGVyZSB0aGUgdGVzdHN1aXRlIGxvb2tzIGZvciBsb2NhbGUgY2F0YWxvZ3MsIHVzaW5nIHRoZQorZGlmZiAtLWdpdCBhL2xpYnN0ZGMrKy12My9pbmNsdWRlL2NfY29tcGF0aWJpbGl0eS93Y2hhci5oIGIvbGlic3RkYysrLXYzL2luY2x1ZGUvY19jb21wYXRpYmlsaXR5L3djaGFyLmgKK2luZGV4IDU1YTBiNTIuLjdkOGJiMTUgMTAwNjQ0CistLS0gYS9saWJzdGRjKystdjMvaW5jbHVkZS9jX2NvbXBhdGliaWxpdHkvd2NoYXIuaAorKysrIGIvbGlic3RkYysrLXYzL2luY2x1ZGUvY19jb21wYXRpYmlsaXR5L3djaGFyLmgKK0BAIC0xMDEsNyArMTAxLDkgQEAgdXNpbmcgc3RkOjp3bWVtY21wOworIHVzaW5nIHN0ZDo6d21lbWNweTsKKyB1c2luZyBzdGQ6OndtZW1tb3ZlOworIHVzaW5nIHN0ZDo6d21lbXNldDsKKysjaWYgX0dMSUJDWFhfSEFWRV9XQ1NGVElNRQorIHVzaW5nIHN0ZDo6d2NzZnRpbWU7CisrI2VuZGlmCisgCisgI2lmIF9HTElCQ1hYX1VTRV9DOTlfV0NIQVIKKyB1c2luZyBzdGQ6Ondjc3RvbGQ7CitkaWZmIC0tZ2l0IGEvbGlic3RkYysrLXYzL2luY2x1ZGUvY19zdGQvY3djaGFyIGIvbGlic3RkYysrLXYzL2luY2x1ZGUvY19zdGQvY3djaGFyCitpbmRleCBkYzRjZWYwMi4uMjU2ZDEyNiAxMDA2NDQKKy0tLSBhL2xpYnN0ZGMrKy12My9pbmNsdWRlL2Nfc3RkL2N3Y2hhcgorKysrIGIvbGlic3RkYysrLXYzL2luY2x1ZGUvY19zdGQvY3djaGFyCitAQCAtMTc1LDcgKzE3NSw5IEBAIF9HTElCQ1hYX0JFR0lOX05BTUVTUEFDRV9WRVJTSU9OCisgICB1c2luZyA6Ondjc2NvbGw7CisgICB1c2luZyA6Ondjc2NweTsKKyAgIHVzaW5nIDo6d2NzY3NwbjsKKysjaWYgX0dMSUJDWFhfSEFWRV9XQ1NGVElNRQorICAgdXNpbmcgOjp3Y3NmdGltZTsKKysjZW5kaWYKKyAgIHVzaW5nIDo6d2NzbGVuOworICAgdXNpbmcgOjp3Y3NuY2F0OworICAgdXNpbmcgOjp3Y3NuY21wOworLS0gCisyLjguMgorCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNi4yLzAwMDUtdWNsaWJjLWxvY2FsZS1ub19feC5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy02LjIvMDAwNS11Y2xpYmMtbG9jYWxlLW5vX194LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMyNzUwMTYKLS0tIC9kZXYvbnVsbAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNi4yLzAwMDUtdWNsaWJjLWxvY2FsZS1ub19feC5wYXRjaApAQCAtMCwwICsxLDI1NyBAQAorRnJvbSBjMDFjMTRlOGU5YmUzODJlY2Q0MTIxZWU3MGY1MDAzYjRjYjBmOTA0IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KK0RhdGU6IEZyaSwgMjkgTWFyIDIwMTMgMDg6NDI6MzYgKzA0MDAKK1N1YmplY3Q6IFtQQVRDSCAwNS80Nl0gdWNsaWJjLWxvY2FsZS1ub19feAorCitTaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKy0tLQorIC4uLi9jb25maWcvbG9jYWxlL3VjbGliYy9jKytsb2NhbGVfaW50ZXJuYWwuaCAgICAgIHwgNDUgKysrKysrKysrKysrKysrKysrKysrKworIGxpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9jX2xvY2FsZS5jYyAgICAgIHwgMTQgLS0tLS0tLQorIGxpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9jX2xvY2FsZS5oICAgICAgIHwgIDEgKworIC4uLi9jb25maWcvbG9jYWxlL3VjbGliYy9jb2xsYXRlX21lbWJlcnMuY2MgICAgICAgIHwgIDcgLS0tLQorIGxpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9jdHlwZV9tZW1iZXJzLmNjIHwgIDcgLS0tLQorIC4uLi9jb25maWcvbG9jYWxlL3VjbGliYy9tZXNzYWdlc19tZW1iZXJzLmNjICAgICAgIHwgIDcgKy0tLQorIC4uLi9jb25maWcvbG9jYWxlL3VjbGliYy9tZXNzYWdlc19tZW1iZXJzLmggICAgICAgIHwgMTggKysrKy0tLS0tCisgLi4uL2NvbmZpZy9sb2NhbGUvdWNsaWJjL21vbmV0YXJ5X21lbWJlcnMuY2MgICAgICAgfCAgNCAtLQorIC4uLi9jb25maWcvbG9jYWxlL3VjbGliYy9udW1lcmljX21lbWJlcnMuY2MgICAgICAgIHwgIDMgLS0KKyBsaWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvdGltZV9tZW1iZXJzLmNjICB8ICAzIC0tCisgMTAgZmlsZXMgY2hhbmdlZCwgNTUgaW5zZXJ0aW9ucygrKSwgNTQgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvYysrbG9jYWxlX2ludGVybmFsLmggYi9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvYysrbG9jYWxlX2ludGVybmFsLmgKK2luZGV4IDJhZTNlNGEuLmU3NGZkZGYgMTAwNjQ0CistLS0gYS9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvYysrbG9jYWxlX2ludGVybmFsLmgKKysrKyBiL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9jKytsb2NhbGVfaW50ZXJuYWwuaAorQEAgLTYwLDQgKzYwLDQ5IEBAIGV4dGVybiAiQyIgX190eXBlb2Yod2NzeGZybV9sKSBfX3djc3hmcm1fbDsKKyBleHRlcm4gIkMiIF9fdHlwZW9mKHdjdHlwZV9sKSBfX3djdHlwZV9sOworICNlbmRpZgorIAorKyMgZGVmaW5lIF9fbmxfbGFuZ2luZm9fbCBubF9sYW5naW5mb19sCisrIyBkZWZpbmUgX19zdHJjb2xsX2wgc3RyY29sbF9sCisrIyBkZWZpbmUgX19zdHJmdGltZV9sIHN0cmZ0aW1lX2wKKysjIGRlZmluZSBfX3N0cnRvZF9sIHN0cnRvZF9sCisrIyBkZWZpbmUgX19zdHJ0b2ZfbCBzdHJ0b2ZfbAorKyMgZGVmaW5lIF9fc3RydG9sZF9sIHN0cnRvbGRfbAorKyMgZGVmaW5lIF9fc3RyeGZybV9sIHN0cnhmcm1fbAorKyMgZGVmaW5lIF9fbmV3bG9jYWxlIG5ld2xvY2FsZQorKyMgZGVmaW5lIF9fZnJlZWxvY2FsZSBmcmVlbG9jYWxlCisrIyBkZWZpbmUgX19kdXBsb2NhbGUgZHVwbG9jYWxlCisrIyBkZWZpbmUgX191c2Vsb2NhbGUgdXNlbG9jYWxlCisrCisrIyBpZmRlZiBfR0xJQkNYWF9VU0VfV0NIQVJfVAorKyMgIGRlZmluZSBfX2lzd2N0eXBlX2wgaXN3Y3R5cGVfbAorKyMgIGRlZmluZSBfX3Rvd2xvd2VyX2wgdG93bG93ZXJfbAorKyMgIGRlZmluZSBfX3Rvd3VwcGVyX2wgdG93dXBwZXJfbAorKyMgIGRlZmluZSBfX3djc2NvbGxfbCB3Y3Njb2xsX2wKKysjICBkZWZpbmUgX193Y3NmdGltZV9sIHdjc2Z0aW1lX2wKKysjICBkZWZpbmUgX193Y3N4ZnJtX2wgd2NzeGZybV9sCisrIyAgZGVmaW5lIF9fd2N0eXBlX2wgd2N0eXBlX2wKKysjIGVuZGlmCisrCisrI2Vsc2UKKysjIGRlZmluZSBfX25sX2xhbmdpbmZvX2woTiwgTCkgICAgICAgbmxfbGFuZ2luZm8oKE4pKQorKyMgZGVmaW5lIF9fc3RyY29sbF9sKFMxLCBTMiwgTCkgICAgICBzdHJjb2xsKChTMSksIChTMikpCisrIyBkZWZpbmUgX19zdHJ0b2RfbChTLCBFLCBMKSAgICAgICAgIHN0cnRvZCgoUyksIChFKSkKKysjIGRlZmluZSBfX3N0cnRvZl9sKFMsIEUsIEwpICAgICAgICAgc3RydG9mKChTKSwgKEUpKQorKyMgZGVmaW5lIF9fc3RydG9sZF9sKFMsIEUsIEwpICAgICAgICBzdHJ0b2xkKChTKSwgKEUpKQorKyMgZGVmaW5lIF9fc3RyeGZybV9sKFMxLCBTMiwgTiwgTCkgICBzdHJ4ZnJtKChTMSksIChTMiksIChOKSkKKysjIHdhcm5pbmcgc2hvdWxkIGR1bW15IF9fbmV3bG9jYWxlIGNoZWNrIGZvciBDfFBPU0lYID8KKysjIGRlZmluZSBfX25ld2xvY2FsZShhLCBiLCBjKSAgICAgICAgTlVMTAorKyMgZGVmaW5lIF9fZnJlZWxvY2FsZShhKSAgICAgICAgICAgICAoKHZvaWQpMCkKKysjIGRlZmluZSBfX2R1cGxvY2FsZShhKSAgICAgICAgICAgICAgX19jX2xvY2FsZSgpCisrLy8jIGRlZmluZSBfX3VzZWxvY2FsZSA/CisrLy8KKysjIGlmZGVmIF9HTElCQ1hYX1VTRV9XQ0hBUl9UCisrIyAgZGVmaW5lIF9faXN3Y3R5cGVfbChDLCBNLCBMKSAgICAgICBpc3djdHlwZSgoQyksIChNKSkKKysjICBkZWZpbmUgX190b3dsb3dlcl9sKEMsIEwpICAgICAgICAgIHRvd2xvd2VyKChDKSkKKysjICBkZWZpbmUgX190b3d1cHBlcl9sKEMsIEwpICAgICAgICAgIHRvd3VwcGVyKChDKSkKKysjICBkZWZpbmUgX193Y3Njb2xsX2woUzEsIFMyLCBMKSAgICAgIHdjc2NvbGwoKFMxKSwgKFMyKSkKKysvLyMgIGRlZmluZSBfX3djc2Z0aW1lX2woUywgTSwgRiwgVCwgTCkgIHdjc2Z0aW1lKChTKSwgKE0pLCAoRiksIChUKSkKKysjICBkZWZpbmUgX193Y3N4ZnJtX2woUzEsIFMyLCBOLCBMKSAgIHdjc3hmcm0oKFMxKSwgKFMyKSwgKE4pKQorKyMgIGRlZmluZSBfX3djdHlwZV9sKFMsIEwpICAgICAgICAgICAgd2N0eXBlKChTKSkKKysjIGVuZGlmCisrCisgI2VuZGlmIC8vIEdMSUJDIDIuMyBhbmQgbGF0ZXIKK2RpZmYgLS1naXQgYS9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvY19sb2NhbGUuY2MgYi9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvY19sb2NhbGUuY2MKK2luZGV4IDUwODFkYzEuLjIxNDMwZDAgMTAwNjQ0CistLS0gYS9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvY19sb2NhbGUuY2MKKysrKyBiL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9jX2xvY2FsZS5jYworQEAgLTM5LDIwICszOSw2IEBACisgI2luY2x1ZGUgPGxhbmdpbmZvLmg+CisgI2luY2x1ZGUgPGJpdHMvYysrbG9jYWxlX2ludGVybmFsLmg+CisgCistI2lmbmRlZiBfX1VDTElCQ19IQVNfWExPQ0FMRV9fCistI2RlZmluZSBfX3N0cnRvbF9sKFMsIEUsIEIsIEwpICAgICAgc3RydG9sKChTKSwgKEUpLCAoQikpCistI2RlZmluZSBfX3N0cnRvdWxfbChTLCBFLCBCLCBMKSAgICAgc3RydG91bCgoUyksIChFKSwgKEIpKQorLSNkZWZpbmUgX19zdHJ0b2xsX2woUywgRSwgQiwgTCkgICAgIHN0cnRvbGwoKFMpLCAoRSksIChCKSkKKy0jZGVmaW5lIF9fc3RydG91bGxfbChTLCBFLCBCLCBMKSAgICBzdHJ0b3VsbCgoUyksIChFKSwgKEIpKQorLSNkZWZpbmUgX19zdHJ0b2ZfbChTLCBFLCBMKSAgICAgICAgIHN0cnRvZigoUyksIChFKSkKKy0jZGVmaW5lIF9fc3RydG9kX2woUywgRSwgTCkgICAgICAgICBzdHJ0b2QoKFMpLCAoRSkpCistI2RlZmluZSBfX3N0cnRvbGRfbChTLCBFLCBMKSAgICAgICAgc3RydG9sZCgoUyksIChFKSkKKy0jd2FybmluZyBzaG91bGQgZHVtbXkgX19uZXdsb2NhbGUgY2hlY2sgZm9yIEN8UE9TSVggPworLSNkZWZpbmUgX19uZXdsb2NhbGUoYSwgYiwgYykgICAgICAgIE5VTEwKKy0jZGVmaW5lIF9fZnJlZWxvY2FsZShhKSAgICAgICAgICAgICAoKHZvaWQpMCkKKy0jZGVmaW5lIF9fZHVwbG9jYWxlKGEpICAgICAgICAgICAgICBfX2NfbG9jYWxlKCkKKy0jZW5kaWYKKy0KKyBuYW1lc3BhY2Ugc3RkCisgeworICAgdGVtcGxhdGU8PgorZGlmZiAtLWdpdCBhL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9jX2xvY2FsZS5oIGIvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL2NfbG9jYWxlLmgKK2luZGV4IGRhMDdjMWYuLjRiY2E1ZjEgMTAwNjQ0CistLS0gYS9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvY19sb2NhbGUuaAorKysrIGIvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL2NfbG9jYWxlLmgKK0BAIC02OCw2ICs2OCw3IEBAIG5hbWVzcGFjZSBfX2dudV9jeHgKKyB7CisgICBleHRlcm4gIkMiIF9fdHlwZW9mKHVzZWxvY2FsZSkgX191c2Vsb2NhbGU7CisgfQorKyNkZWZpbmUgX191c2Vsb2NhbGUgdXNlbG9jYWxlCisgI2VuZGlmCisgCisgbmFtZXNwYWNlIHN0ZAorZGlmZiAtLWdpdCBhL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9jb2xsYXRlX21lbWJlcnMuY2MgYi9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvY29sbGF0ZV9tZW1iZXJzLmNjCitpbmRleCBjMjY2NGE3Li5lYzVjMzI5IDEwMDY0NAorLS0tIGEvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL2NvbGxhdGVfbWVtYmVycy5jYworKysrIGIvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL2NvbGxhdGVfbWVtYmVycy5jYworQEAgLTM2LDEzICszNiw2IEBACisgI2luY2x1ZGUgPGxvY2FsZT4KKyAjaW5jbHVkZSA8Yml0cy9jKytsb2NhbGVfaW50ZXJuYWwuaD4KKyAKKy0jaWZuZGVmIF9fVUNMSUJDX0hBU19YTE9DQUxFX18KKy0jZGVmaW5lIF9fc3RyY29sbF9sKFMxLCBTMiwgTCkgICAgICBzdHJjb2xsKChTMSksIChTMikpCistI2RlZmluZSBfX3N0cnhmcm1fbChTMSwgUzIsIE4sIEwpICAgc3RyeGZybSgoUzEpLCAoUzIpLCAoTikpCistI2RlZmluZSBfX3djc2NvbGxfbChTMSwgUzIsIEwpICAgICAgd2NzY29sbCgoUzEpLCAoUzIpKQorLSNkZWZpbmUgX193Y3N4ZnJtX2woUzEsIFMyLCBOLCBMKSAgIHdjc3hmcm0oKFMxKSwgKFMyKSwgKE4pKQorLSNlbmRpZgorLQorIG5hbWVzcGFjZSBzdGQKKyB7CisgICAvLyBUaGVzZSBhcmUgYmFzaWNhbGx5IGV4dGVuc2lvbnMgdG8gY2hhcl90cmFpdHMsIGFuZCBwZXJoYXBzIHNob3VsZAorZGlmZiAtLWdpdCBhL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9jdHlwZV9tZW1iZXJzLmNjIGIvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL2N0eXBlX21lbWJlcnMuY2MKK2luZGV4IDcyOTRlM2EuLjdiMTI4NjEgMTAwNjQ0CistLS0gYS9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvY3R5cGVfbWVtYmVycy5jYworKysrIGIvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL2N0eXBlX21lbWJlcnMuY2MKK0BAIC0zOCwxMyArMzgsNiBAQAorICN1bmRlZiBfTElCQworICNpbmNsdWRlIDxiaXRzL2MrK2xvY2FsZV9pbnRlcm5hbC5oPgorIAorLSNpZm5kZWYgX19VQ0xJQkNfSEFTX1hMT0NBTEVfXworLSNkZWZpbmUgX193Y3R5cGVfbChTLCBMKSAgICAgICAgICAgd2N0eXBlKChTKSkKKy0jZGVmaW5lIF9fdG93dXBwZXJfbChDLCBMKSAgICAgICAgIHRvd3VwcGVyKChDKSkKKy0jZGVmaW5lIF9fdG93bG93ZXJfbChDLCBMKSAgICAgICAgIHRvd2xvd2VyKChDKSkKKy0jZGVmaW5lIF9faXN3Y3R5cGVfbChDLCBNLCBMKSAgICAgIGlzd2N0eXBlKChDKSwgKE0pKQorLSNlbmRpZgorLQorIG5hbWVzcGFjZSBzdGQKKyB7CisgICAvLyBOQjogVGhlIG90aGVyIGN0eXBlPGNoYXI+IHNwZWNpYWxpemF0aW9ucyBhcmUgaW4gc3JjL2xvY2FsZS5jYyBhbmQKK2RpZmYgLS1naXQgYS9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvbWVzc2FnZXNfbWVtYmVycy5jYyBiL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9tZXNzYWdlc19tZW1iZXJzLmNjCitpbmRleCAxMzU5NGQ5Li5kNzY5M2I0IDEwMDY0NAorLS0tIGEvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL21lc3NhZ2VzX21lbWJlcnMuY2MKKysrKyBiL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9tZXNzYWdlc19tZW1iZXJzLmNjCitAQCAtMzksMTMgKzM5LDEwIEBACisgI2lmZGVmIF9fVUNMSUJDX01KTjNfT05MWV9fCisgI3dhcm5pbmcgZml4IGdldHRleHQgc3R1ZmYKKyAjZW5kaWYKKy0jaWZkZWYgX19VQ0xJQkNfSEFTX0dFVFRFWFRfQVdBUkVORVNTX18KKy1leHRlcm4gIkMiIGNoYXIgKl9fZGNnZXR0ZXh0KGNvbnN0IGNoYXIgKmRvbWFpbm5hbWUsCistCQkJICAgICBjb25zdCBjaGFyICptc2dpZCwgaW50IGNhdGVnb3J5KTsKKyAjdW5kZWYgZ2V0dGV4dAorLSNkZWZpbmUgZ2V0dGV4dChtc2dpZCkgX19kY2dldHRleHQoTlVMTCwgbXNnaWQsIExDX01FU1NBR0VTKQorKyNpZmRlZiBfX1VDTElCQ19IQVNfR0VUVEVYVF9BV0FSRU5FU1NfXworKyNkZWZpbmUgZ2V0dGV4dChtc2dpZCkgZGNnZXR0ZXh0KE5VTEwsIG1zZ2lkLCBMQ19NRVNTQUdFUykKKyAjZWxzZQorLSN1bmRlZiBnZXR0ZXh0CisgI2RlZmluZSBnZXR0ZXh0KG1zZ2lkKSAobXNnaWQpCisgI2VuZGlmCisgCitkaWZmIC0tZ2l0IGEvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL21lc3NhZ2VzX21lbWJlcnMuaCBiL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9tZXNzYWdlc19tZW1iZXJzLmgKK2luZGV4IDE0MjQwNzguLmQ4OWRhMzMgMTAwNjQ0CistLS0gYS9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvbWVzc2FnZXNfbWVtYmVycy5oCisrKysgYi9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvbWVzc2FnZXNfbWVtYmVycy5oCitAQCAtMzYsMTUgKzM2LDExIEBACisgI2lmZGVmIF9fVUNMSUJDX01KTjNfT05MWV9fCisgI3dhcm5pbmcgZml4IHByb3RvdHlwZXMgZm9yICp0ZXh0ZG9tYWluIGZ1bmNzCisgI2VuZGlmCistI2lmZGVmIF9fVUNMSUJDX0hBU19HRVRURVhUX0FXQVJFTkVTU19fCistZXh0ZXJuICJDIiBjaGFyICpfX3RleHRkb21haW4oY29uc3QgY2hhciAqZG9tYWlubmFtZSk7CistZXh0ZXJuICJDIiBjaGFyICpfX2JpbmR0ZXh0ZG9tYWluKGNvbnN0IGNoYXIgKmRvbWFpbm5hbWUsCistCQkJCSAgY29uc3QgY2hhciAqZGlybmFtZSk7CistI2Vsc2UKKy0jdW5kZWYgX190ZXh0ZG9tYWluCistI3VuZGVmIF9fYmluZHRleHRkb21haW4KKy0jZGVmaW5lIF9fdGV4dGRvbWFpbihEKSAgICAgICAgICAgKCh2b2lkKTApCistI2RlZmluZSBfX2JpbmR0ZXh0ZG9tYWluKEQsUCkgICAgICgodm9pZCkwKQorKyNpZm5kZWYgX19VQ0xJQkNfSEFTX0dFVFRFWFRfQVdBUkVORVNTX18KKysjdW5kZWYgdGV4dGRvbWFpbgorKyN1bmRlZiBiaW5kdGV4dGRvbWFpbgorKyNkZWZpbmUgdGV4dGRvbWFpbihEKSAgICAgICAgICAgKCh2b2lkKTApCisrI2RlZmluZSBiaW5kdGV4dGRvbWFpbihELFApICAgICAoKHZvaWQpMCkKKyAjZW5kaWYKKyAKKyAgIC8vIE5vbi12aXJ0dWFsIG1lbWJlciBmdW5jdGlvbnMuCitAQCAtNzAsNyArNjYsNyBAQCBleHRlcm4gIkMiIGNoYXIgKl9fYmluZHRleHRkb21haW4oY29uc3QgY2hhciAqZG9tYWlubmFtZSwKKyAgICAgbWVzc2FnZXM8X0NoYXJUPjo6b3Blbihjb25zdCBiYXNpY19zdHJpbmc8Y2hhcj4mIF9fcywgY29uc3QgbG9jYWxlJiBfX2xvYywKKyAJCQkgICBjb25zdCBjaGFyKiBfX2RpcikgY29uc3QKKyAgICAgeworLSAgICAgIF9fYmluZHRleHRkb21haW4oX19zLmNfc3RyKCksIF9fZGlyKTsKKysgICAgICBiaW5kdGV4dGRvbWFpbihfX3MuY19zdHIoKSwgX19kaXIpOworICAgICAgIHJldHVybiB0aGlzLT5kb19vcGVuKF9fcywgX19sb2MpOworICAgICB9CisgCitAQCAtOTAsNyArODYsNyBAQCBleHRlcm4gIkMiIGNoYXIgKl9fYmluZHRleHRkb21haW4oY29uc3QgY2hhciAqZG9tYWlubmFtZSwKKyAgICAgeworICAgICAgIC8vIE5vIGVycm9yIGNoZWNraW5nIGlzIGRvbmUsIGFzc3VtZSB0aGUgY2F0YWxvZyBleGlzdHMgYW5kIGNhbgorICAgICAgIC8vIGJlIHVzZWQuCistICAgICAgX190ZXh0ZG9tYWluKF9fcy5jX3N0cigpKTsKKysgICAgICB0ZXh0ZG9tYWluKF9fcy5jX3N0cigpKTsKKyAgICAgICByZXR1cm4gMDsKKyAgICAgfQorIAorZGlmZiAtLWdpdCBhL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9tb25ldGFyeV9tZW1iZXJzLmNjIGIvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL21vbmV0YXJ5X21lbWJlcnMuY2MKK2luZGV4IGFhNTI3MzEuLjJlNmY4MGEgMTAwNjQ0CistLS0gYS9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvbW9uZXRhcnlfbWVtYmVycy5jYworKysrIGIvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL21vbmV0YXJ5X21lbWJlcnMuY2MKK0BAIC00MywxMCArNDMsNiBAQAorICN3YXJuaW5nIHRhaWxvciBmb3Igc3R1YiBsb2NhbGUgc3VwcG9ydAorICNlbmRpZgorIAorLSNpZm5kZWYgX19VQ0xJQkNfSEFTX1hMT0NBTEVfXworLSNkZWZpbmUgX19ubF9sYW5naW5mb19sKE4sIEwpICAgICAgICAgbmxfbGFuZ2luZm8oKE4pKQorLSNlbmRpZgorLQorIG5hbWVzcGFjZSBzdGQKKyB7CisgICAvLyBDb25zdHJ1Y3QgYW5kIHJldHVybiB2YWxpZCBwYXR0ZXJuIGNvbnNpc3Rpbmcgb2Ygc29tZSBjb21iaW5hdGlvbiBvZjoKK2RpZmYgLS1naXQgYS9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvbnVtZXJpY19tZW1iZXJzLmNjIGIvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL251bWVyaWNfbWVtYmVycy5jYworaW5kZXggODgzZWMxYS4uMmM3MDY0MiAxMDA2NDQKKy0tLSBhL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9udW1lcmljX21lbWJlcnMuY2MKKysrKyBiL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9udW1lcmljX21lbWJlcnMuY2MKK0BAIC00MSw5ICs0MSw2IEBACisgI2lmZGVmIF9fVUNMSUJDX01KTjNfT05MWV9fCisgI3dhcm5pbmcgdGFpbG9yIGZvciBzdHViIGxvY2FsZSBzdXBwb3J0CisgI2VuZGlmCistI2lmbmRlZiBfX1VDTElCQ19IQVNfWExPQ0FMRV9fCistI2RlZmluZSBfX25sX2xhbmdpbmZvX2woTiwgTCkgICAgICAgICBubF9sYW5naW5mbygoTikpCistI2VuZGlmCisgCisgbmFtZXNwYWNlIHN0ZAorIHsKK2RpZmYgLS1naXQgYS9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvdGltZV9tZW1iZXJzLmNjIGIvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL3RpbWVfbWVtYmVycy5jYworaW5kZXggZTA3MDdkNy4uZDg0OGVkNSAxMDA2NDQKKy0tLSBhL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy90aW1lX21lbWJlcnMuY2MKKysrKyBiL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy90aW1lX21lbWJlcnMuY2MKK0BAIC00MCw5ICs0MCw2IEBACisgI2lmZGVmIF9fVUNMSUJDX01KTjNfT05MWV9fCisgI3dhcm5pbmcgdGFpbG9yIGZvciBzdHViIGxvY2FsZSBzdXBwb3J0CisgI2VuZGlmCistI2lmbmRlZiBfX1VDTElCQ19IQVNfWExPQ0FMRV9fCistI2RlZmluZSBfX25sX2xhbmdpbmZvX2woTiwgTCkgICAgICAgICBubF9sYW5naW5mbygoTikpCistI2VuZGlmCisgCisgbmFtZXNwYWNlIHN0ZAorIHsKKy0tIAorMi44LjIKKwpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTYuMi8wMDA2LXVjbGliYy1sb2NhbGUtd2NoYXJfZml4LnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTYuMi8wMDA2LXVjbGliYy1sb2NhbGUtd2NoYXJfZml4LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU0NWE0ODIKLS0tIC9kZXYvbnVsbAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNi4yLzAwMDYtdWNsaWJjLWxvY2FsZS13Y2hhcl9maXgucGF0Y2gKQEAgLTAsMCArMSw2OCBAQAorRnJvbSBlN2E0NzYwZmI0MDAwOGNhZTMzZTZmYzdkYzRjZmVmNmMyZmQ1ZjkzIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KK0RhdGU6IEZyaSwgMjkgTWFyIDIwMTMgMDg6NDU6NTcgKzA0MDAKK1N1YmplY3Q6IFtQQVRDSCAwNi80Nl0gdWNsaWJjLWxvY2FsZS13Y2hhcl9maXgKKworU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCistLS0KKyBsaWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvbW9uZXRhcnlfbWVtYmVycy5jYyB8ICA0ICsrLS0KKyBsaWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvbnVtZXJpY19tZW1iZXJzLmNjICB8IDEzICsrKysrKysrKysrKysKKyAyIGZpbGVzIGNoYW5nZWQsIDE1IGluc2VydGlvbnMoKyksIDIgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvbW9uZXRhcnlfbWVtYmVycy5jYyBiL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9tb25ldGFyeV9tZW1iZXJzLmNjCitpbmRleCAyZTZmODBhLi4zMWViYjlmIDEwMDY0NAorLS0tIGEvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL21vbmV0YXJ5X21lbWJlcnMuY2MKKysrKyBiL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9tb25ldGFyeV9tZW1iZXJzLmNjCitAQCAtNDAxLDcgKzQwMSw3IEBAIG5hbWVzcGFjZSBzdGQKKyAjIGlmZGVmIF9fVUNMSUJDX0hBU19YTE9DQUxFX18KKyAJICBfTV9kYXRhLT5fTV9kZWNpbWFsX3BvaW50ID0gX19jbG9jLT5kZWNpbWFsX3BvaW50X3djOworIAkgIF9NX2RhdGEtPl9NX3Rob3VzYW5kc19zZXAgPSBfX2Nsb2MtPnRob3VzYW5kc19zZXBfd2M7CistIyBlbHNlCisrIyBlbGlmIGRlZmluZWQgX19VQ0xJQkNfSEFTX0xPQ0FMRV9fCisgCSAgX01fZGF0YS0+X01fZGVjaW1hbF9wb2ludCA9IF9fZ2xvYmFsX2xvY2FsZS0+ZGVjaW1hbF9wb2ludF93YzsKKyAJICBfTV9kYXRhLT5fTV90aG91c2FuZHNfc2VwID0gX19nbG9iYWxfbG9jYWxlLT50aG91c2FuZHNfc2VwX3djOworICMgZW5kaWYKK0BAIC01NTYsNyArNTU2LDcgQEAgbmFtZXNwYWNlIHN0ZAorICMgaWZkZWYgX19VQ0xJQkNfSEFTX1hMT0NBTEVfXworIAkgIF9NX2RhdGEtPl9NX2RlY2ltYWxfcG9pbnQgPSBfX2Nsb2MtPmRlY2ltYWxfcG9pbnRfd2M7CisgCSAgX01fZGF0YS0+X01fdGhvdXNhbmRzX3NlcCA9IF9fY2xvYy0+dGhvdXNhbmRzX3NlcF93YzsKKy0jIGVsc2UKKysjIGVsaWYgZGVmaW5lZCBfX1VDTElCQ19IQVNfTE9DQUxFX18KKyAJICBfTV9kYXRhLT5fTV9kZWNpbWFsX3BvaW50ID0gX19nbG9iYWxfbG9jYWxlLT5kZWNpbWFsX3BvaW50X3djOworIAkgIF9NX2RhdGEtPl9NX3Rob3VzYW5kc19zZXAgPSBfX2dsb2JhbF9sb2NhbGUtPnRob3VzYW5kc19zZXBfd2M7CisgIyBlbmRpZgorZGlmZiAtLWdpdCBhL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9udW1lcmljX21lbWJlcnMuY2MgYi9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvbnVtZXJpY19tZW1iZXJzLmNjCitpbmRleCAyYzcwNjQyLi5kNWM4OTYxIDEwMDY0NAorLS0tIGEvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL251bWVyaWNfbWVtYmVycy5jYworKysrIGIvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL251bWVyaWNfbWVtYmVycy5jYworQEAgLTEyNywxMiArMTI3LDI1IEBAIG5hbWVzcGFjZSBzdGQKKyAJeworIAkgIC8vIE5hbWVkIGxvY2FsZS4KKyAJICAvLyBOQjogSW4gdGhlIEdOVSBtb2RlbCB3Y2hhcl90IGlzIGFsd2F5cyAzMiBiaXQgd2lkZS4KKysjaWZkZWYgX19VQ0xJQkNfTUpOM19PTkxZX18KKysjd2FybmluZyBmaXggdGhpcy4uLiBzaG91bGQgYmUgbnVtZXJpYworKyNlbmRpZgorKyNpZmRlZiBfX1VDTElCQ19fCisrIyBpZmRlZiBfX1VDTElCQ19IQVNfWExPQ0FMRV9fCisrCSAgX01fZGF0YS0+X01fZGVjaW1hbF9wb2ludCA9IF9fY2xvYy0+ZGVjaW1hbF9wb2ludF93YzsKKysJICBfTV9kYXRhLT5fTV90aG91c2FuZHNfc2VwID0gX19jbG9jLT50aG91c2FuZHNfc2VwX3djOworKyMgZWxpZiBkZWZpbmVkIF9fVUNMSUJDX0hBU19MT0NBTEVfXworKwkgIF9NX2RhdGEtPl9NX2RlY2ltYWxfcG9pbnQgPSBfX2dsb2JhbF9sb2NhbGUtPmRlY2ltYWxfcG9pbnRfd2M7CisrCSAgX01fZGF0YS0+X01fdGhvdXNhbmRzX3NlcCA9IF9fZ2xvYmFsX2xvY2FsZS0+dGhvdXNhbmRzX3NlcF93YzsKKysjIGVuZGlmCisrI2Vsc2UKKyAJICB1bmlvbiB7IGNoYXIgKl9fczsgd2NoYXJfdCBfX3c7IH0gX191OworIAkgIF9fdS5fX3MgPSBfX25sX2xhbmdpbmZvX2woX05MX05VTUVSSUNfREVDSU1BTF9QT0lOVF9XQywgX19jbG9jKTsKKyAJICBfTV9kYXRhLT5fTV9kZWNpbWFsX3BvaW50ID0gX191Ll9fdzsKKyAKKyAJICBfX3UuX19zID0gX19ubF9sYW5naW5mb19sKF9OTF9OVU1FUklDX1RIT1VTQU5EU19TRVBfV0MsIF9fY2xvYyk7CisgCSAgX01fZGF0YS0+X01fdGhvdXNhbmRzX3NlcCA9IF9fdS5fX3c7CisrI2VuZGlmCisgCisgCSAgaWYgKF9NX2RhdGEtPl9NX3Rob3VzYW5kc19zZXAgPT0gTCdcMCcpCisgCSAgICBfTV9kYXRhLT5fTV9ncm91cGluZyA9ICIiOworLS0gCisyLjguMgorCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNi4yLzAwMDctdWNsaWJjLWxvY2FsZS11cGRhdGUucGF0Y2ggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNi4yLzAwMDctdWNsaWJjLWxvY2FsZS11cGRhdGUucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjczZTU5MQotLS0gL2Rldi9udWxsCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy02LjIvMDAwNy11Y2xpYmMtbG9jYWxlLXVwZGF0ZS5wYXRjaApAQCAtMCwwICsxLDU0MiBAQAorRnJvbSA4ZDUzYTM4YTMwMzgxMDRlNjgzMGVjZWE1ZTRiZWFkY2U1NDQ1N2MxIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KK0RhdGU6IEZyaSwgMjkgTWFyIDIwMTMgMDg6NDY6NTggKzA0MDAKK1N1YmplY3Q6IFtQQVRDSCAwNy80Nl0gdWNsaWJjLWxvY2FsZS11cGRhdGUKKworU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCistLS0KKyAuLi4vY29uZmlnL2xvY2FsZS91Y2xpYmMvYysrbG9jYWxlX2ludGVybmFsLmggICAgICB8ICAzICsKKyBsaWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvY19sb2NhbGUuY2MgICAgICB8IDc0ICsrKysrKysrKystLS0tLS0tLS0tLS0KKyBsaWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvY19sb2NhbGUuaCAgICAgICB8IDQyICsrKysrKy0tLS0tLQorIGxpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9jdHlwZV9tZW1iZXJzLmNjIHwgNTEgKysrKysrKysrKystLS0tCisgLi4uL2NvbmZpZy9sb2NhbGUvdWNsaWJjL21lc3NhZ2VzX21lbWJlcnMuaCAgICAgICAgfCAxMiArKy0tCisgLi4uL2NvbmZpZy9sb2NhbGUvdWNsaWJjL21vbmV0YXJ5X21lbWJlcnMuY2MgICAgICAgfCAzNCArKysrKystLS0tCisgLi4uL2NvbmZpZy9sb2NhbGUvdWNsaWJjL251bWVyaWNfbWVtYmVycy5jYyAgICAgICAgfCAgNSArKworIGxpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy90aW1lX21lbWJlcnMuY2MgIHwgMTggKysrKy0tCisgbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL3RpbWVfbWVtYmVycy5oICAgfCAxNyArKystLQorIDkgZmlsZXMgY2hhbmdlZCwgMTU4IGluc2VydGlvbnMoKyksIDk4IGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL2MrK2xvY2FsZV9pbnRlcm5hbC5oIGIvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL2MrK2xvY2FsZV9pbnRlcm5hbC5oCitpbmRleCBlNzRmZGRmLi45NzFhNmI0IDEwMDY0NAorLS0tIGEvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL2MrK2xvY2FsZV9pbnRlcm5hbC5oCisrKysgYi9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvYysrbG9jYWxlX2ludGVybmFsLmgKK0BAIC0zMSw2ICszMSw5IEBACisgCisgI2luY2x1ZGUgPGJpdHMvYysrY29uZmlnLmg+CisgI2luY2x1ZGUgPGNsb2NhbGU+CisrI2luY2x1ZGUgPGNzdGRsaWI+CisrI2luY2x1ZGUgPGNzdHJpbmc+CisrI2luY2x1ZGUgPGNzdGRkZWY+CisgCisgI2lmZGVmIF9fVUNMSUJDX01KTjNfT05MWV9fCisgI3dhcm5pbmcgY2xlYW4gdGhpcyB1cAorZGlmZiAtLWdpdCBhL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9jX2xvY2FsZS5jYyBiL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9jX2xvY2FsZS5jYworaW5kZXggMjE0MzBkMC4uMWI5ZDhlMSAxMDA2NDQKKy0tLSBhL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9jX2xvY2FsZS5jYworKysrIGIvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL2NfbG9jYWxlLmNjCitAQCAtMzksMjMgKzM5LDIwIEBACisgI2luY2x1ZGUgPGxhbmdpbmZvLmg+CisgI2luY2x1ZGUgPGJpdHMvYysrbG9jYWxlX2ludGVybmFsLmg+CisgCistbmFtZXNwYWNlIHN0ZAorLXsKKytfR0xJQkNYWF9CRUdJTl9OQU1FU1BBQ0Uoc3RkKQorKworICAgdGVtcGxhdGU8PgorICAgICB2b2lkCisgICAgIF9fY29udmVydF90b192KGNvbnN0IGNoYXIqIF9fcywgZmxvYXQmIF9fdiwgaW9zX2Jhc2U6Omlvc3RhdGUmIF9fZXJyLAorIAkJICAgY29uc3QgX19jX2xvY2FsZSYgX19jbG9jKQorICAgICB7CistICAgICAgaWYgKCEoX19lcnIgJiBpb3NfYmFzZTo6ZmFpbGJpdCkpCistCXsKKy0JICBjaGFyKiBfX3Nhbml0eTsKKy0JICBlcnJubyA9IDA7CistCSAgZmxvYXQgX19mID0gX19zdHJ0b2ZfbChfX3MsICZfX3Nhbml0eSwgX19jbG9jKTsKKy0gICAgICAgICAgaWYgKF9fc2FuaXR5ICE9IF9fcyAmJiBlcnJubyAhPSBFUkFOR0UpCistCSAgICBfX3YgPSBfX2Y7CistCSAgZWxzZQorLQkgICAgX19lcnIgfD0gaW9zX2Jhc2U6OmZhaWxiaXQ7CistCX0KKysgICAgICBjaGFyKiBfX3Nhbml0eTsKKysgICAgICBlcnJubyA9IDA7CisrICAgICAgZmxvYXQgX19mID0gX19zdHJ0b2ZfbChfX3MsICZfX3Nhbml0eSwgX19jbG9jKTsKKysgICAgICBpZiAoX19zYW5pdHkgIT0gX19zICYmIGVycm5vICE9IEVSQU5HRSkKKysJX192ID0gX19mOworKyAgICAgIGVsc2UKKysJX19lcnIgfD0gaW9zX2Jhc2U6OmZhaWxiaXQ7CisgICAgIH0KKyAKKyAgIHRlbXBsYXRlPD4KK0BAIC02MywxNiArNjAsMTMgQEAgbmFtZXNwYWNlIHN0ZAorICAgICBfX2NvbnZlcnRfdG9fdihjb25zdCBjaGFyKiBfX3MsIGRvdWJsZSYgX192LCBpb3NfYmFzZTo6aW9zdGF0ZSYgX19lcnIsCisgCQkgICBjb25zdCBfX2NfbG9jYWxlJiBfX2Nsb2MpCisgICAgIHsKKy0gICAgICBpZiAoIShfX2VyciAmIGlvc19iYXNlOjpmYWlsYml0KSkKKy0JeworLQkgIGNoYXIqIF9fc2FuaXR5OworLQkgIGVycm5vID0gMDsKKy0JICBkb3VibGUgX19kID0gX19zdHJ0b2RfbChfX3MsICZfX3Nhbml0eSwgX19jbG9jKTsKKy0gICAgICAgICAgaWYgKF9fc2FuaXR5ICE9IF9fcyAmJiBlcnJubyAhPSBFUkFOR0UpCistCSAgICBfX3YgPSBfX2Q7CistCSAgZWxzZQorLQkgICAgX19lcnIgfD0gaW9zX2Jhc2U6OmZhaWxiaXQ7CistCX0KKysgICAgICBjaGFyKiBfX3Nhbml0eTsKKysgICAgICBlcnJubyA9IDA7CisrICAgICAgZG91YmxlIF9fZCA9IF9fc3RydG9kX2woX19zLCAmX19zYW5pdHksIF9fY2xvYyk7CisrICAgICAgaWYgKF9fc2FuaXR5ICE9IF9fcyAmJiBlcnJubyAhPSBFUkFOR0UpCisrCV9fdiA9IF9fZDsKKysgICAgICBlbHNlCisrCV9fZXJyIHw9IGlvc19iYXNlOjpmYWlsYml0OworICAgICB9CisgCisgICB0ZW1wbGF0ZTw+CitAQCAtODAsMTYgKzc0LDEzIEBAIG5hbWVzcGFjZSBzdGQKKyAgICAgX19jb252ZXJ0X3RvX3YoY29uc3QgY2hhciogX19zLCBsb25nIGRvdWJsZSYgX192LCBpb3NfYmFzZTo6aW9zdGF0ZSYgX19lcnIsCisgCQkgICBjb25zdCBfX2NfbG9jYWxlJiBfX2Nsb2MpCisgICAgIHsKKy0gICAgICBpZiAoIShfX2VyciAmIGlvc19iYXNlOjpmYWlsYml0KSkKKy0JeworLQkgIGNoYXIqIF9fc2FuaXR5OworLQkgIGVycm5vID0gMDsKKy0JICBsb25nIGRvdWJsZSBfX2xkID0gX19zdHJ0b2xkX2woX19zLCAmX19zYW5pdHksIF9fY2xvYyk7CistICAgICAgICAgIGlmIChfX3Nhbml0eSAhPSBfX3MgJiYgZXJybm8gIT0gRVJBTkdFKQorLQkgICAgX192ID0gX19sZDsKKy0JICBlbHNlCistCSAgICBfX2VyciB8PSBpb3NfYmFzZTo6ZmFpbGJpdDsKKy0JfQorKyAgICAgIGNoYXIqIF9fc2FuaXR5OworKyAgICAgIGVycm5vID0gMDsKKysgICAgICBsb25nIGRvdWJsZSBfX2xkID0gX19zdHJ0b2xkX2woX19zLCAmX19zYW5pdHksIF9fY2xvYyk7CisrICAgICAgaWYgKF9fc2FuaXR5ICE9IF9fcyAmJiBlcnJubyAhPSBFUkFOR0UpCisrCV9fdiA9IF9fbGQ7CisrICAgICAgZWxzZQorKwlfX2VyciB8PSBpb3NfYmFzZTo6ZmFpbGJpdDsKKyAgICAgfQorIAorICAgdm9pZAorQEAgLTExMCwxNyArMTAxLDE4IEBAIG5hbWVzcGFjZSBzdGQKKyAgIHZvaWQKKyAgIGxvY2FsZTo6ZmFjZXQ6Ol9TX2Rlc3Ryb3lfY19sb2NhbGUoX19jX2xvY2FsZSYgX19jbG9jKQorICAgeworLSAgICBpZiAoX1NfZ2V0X2NfbG9jYWxlKCkgIT0gX19jbG9jKQorKyAgICBpZiAoX19jbG9jICYmIF9TX2dldF9jX2xvY2FsZSgpICE9IF9fY2xvYykKKyAgICAgICBfX2ZyZWVsb2NhbGUoX19jbG9jKTsKKyAgIH0KKyAKKyAgIF9fY19sb2NhbGUKKyAgIGxvY2FsZTo6ZmFjZXQ6Ol9TX2Nsb25lX2NfbG9jYWxlKF9fY19sb2NhbGUmIF9fY2xvYykKKyAgIHsgcmV0dXJuIF9fZHVwbG9jYWxlKF9fY2xvYyk7IH0KKy19IC8vIG5hbWVzcGFjZSBzdGQKKyAKKy1uYW1lc3BhY2UgX19nbnVfY3h4CisteworK19HTElCQ1hYX0VORF9OQU1FU1BBQ0UKKysKKytfR0xJQkNYWF9CRUdJTl9OQU1FU1BBQ0UoX19nbnVfY3h4KQorKworICAgY29uc3QgY2hhciogY29uc3QgY2F0ZWdvcnlfbmFtZXNbNiArIF9HTElCQ1hYX05VTV9DQVRFR09SSUVTXSA9CisgICAgIHsKKyAgICAgICAiTENfQ1RZUEUiLAorQEAgLTEzOCw5ICsxMzAsMTEgQEAgbmFtZXNwYWNlIF9fZ251X2N4eAorICAgICAgICJMQ19JREVOVElGSUNBVElPTiIKKyAjZW5kaWYKKyAgICAgfTsKKy19CisgCistbmFtZXNwYWNlIHN0ZAorLXsKKytfR0xJQkNYWF9FTkRfTkFNRVNQQUNFCisrCisrX0dMSUJDWFhfQkVHSU5fTkFNRVNQQUNFKHN0ZCkKKysKKyAgIGNvbnN0IGNoYXIqIGNvbnN0KiBjb25zdCBsb2NhbGU6Ol9TX2NhdGVnb3JpZXMgPSBfX2dudV9jeHg6OmNhdGVnb3J5X25hbWVzOworLX0gIC8vIG5hbWVzcGFjZSBzdGQKKysKKytfR0xJQkNYWF9FTkRfTkFNRVNQQUNFCitkaWZmIC0tZ2l0IGEvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL2NfbG9jYWxlLmggYi9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvY19sb2NhbGUuaAoraW5kZXggNGJjYTVmMS4uNjRhNmQ0NiAxMDA2NDQKKy0tLSBhL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9jX2xvY2FsZS5oCisrKysgYi9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvY19sb2NhbGUuaAorQEAgLTM5LDIxICszOSwyMyBAQAorICNwcmFnbWEgR0NDIHN5c3RlbV9oZWFkZXIKKyAKKyAjaW5jbHVkZSA8Y3N0cmluZz4gICAgICAgICAgICAgIC8vIGdldCBzdGQ6OnN0cmxlbgorLSNpbmNsdWRlIDxjc3RkaW8+ICAgICAgICAgICAgICAgLy8gZ2V0IHN0ZDo6c25wcmludGYgb3Igc3RkOjpzcHJpbnRmCisrI2luY2x1ZGUgPGNzdGRpbz4gICAgICAgICAgICAgICAvLyBnZXQgc3RkOjp2c25wcmludGYgb3Igc3RkOjp2c3ByaW50ZgorICNpbmNsdWRlIDxjbG9jYWxlPgorICNpbmNsdWRlIDxsYW5naW5mby5oPgkJLy8gRm9yIGNvZGVjdnQKKyAjaWZkZWYgX19VQ0xJQkNfTUpOM19PTkxZX18KKyAjd2FybmluZyBmaXggdGhpcworICNlbmRpZgorLSNpZmRlZiBfX1VDTElCQ19IQVNfTE9DQUxFX18KKysjaWZkZWYgX0dMSUJDWFhfVVNFX0lDT05WCisgI2luY2x1ZGUgPGljb252Lmg+CQkvLyBGb3IgY29kZWN2dCB1c2luZyBpY29udiwgaWNvbnZfdAorICNlbmRpZgorLSNpZmRlZiBfX1VDTElCQ19IQVNfR0VUVEVYVF9BV0FSRU5FU1NfXworLSNpbmNsdWRlIDxsaWJpbnRsLmg+IAkJLy8gRm9yIG1lc3NhZ2VzCisrI2lmZGVmIEhBVkVfTElCSU5UTF9ICisrI2luY2x1ZGUgPGxpYmludGwuaD4JCS8vIEZvciBtZXNzYWdlcworICNlbmRpZgorKyNpbmNsdWRlIDxjc3RkYXJnPgorIAorICNpZmRlZiBfX1VDTElCQ19NSk4zX09OTFlfXworICN3YXJuaW5nIHdoYXQgaXMgX0dMSUJDWFhfQ19MT0NBTEVfR05VIGZvcgorKy8vIHBzbTogdXNlZCBpbiBvcy9nbnUtbGludXgvY3R5cGVfbm9uaW5saW5lLmgKKyAjZW5kaWYKKyAjZGVmaW5lIF9HTElCQ1hYX0NfTE9DQUxFX0dOVSAxCisgCitAQCAtNzgsMjMgKzgwLDI1IEBAIG5hbWVzcGFjZSBzdGQKKyAjZWxzZQorICAgdHlwZWRlZiBpbnQqCQkJX19jX2xvY2FsZTsKKyAjZW5kaWYKKy0KKy0gIC8vIENvbnZlcnQgbnVtZXJpYyB2YWx1ZSBvZiB0eXBlIF9UdiB0byBzdHJpbmcgYW5kIHJldHVybiBsZW5ndGggb2YKKy0gIC8vIHN0cmluZy4gIElmIHNucHJpbnRmIGlzIGF2YWlsYWJsZSB1c2UgaXQsIG90aGVyd2lzZSBmYWxsIGJhY2sgdG8KKy0gIC8vIHRoZSB1bnNhZmUgc3ByaW50ZiB3aGljaCwgaW4gZ2VuZXJhbCwgY2FuIGJlIGRhbmdlcm91cyBhbmQgc2hvdWxkCisrICAvLyBDb252ZXJ0IG51bWVyaWMgdmFsdWUgb2YgdHlwZSBkb3VibGUgdG8gc3RyaW5nIGFuZCByZXR1cm4gbGVuZ3RoIG9mCisrICAvLyBzdHJpbmcuICBJZiB2c25wcmludGYgaXMgYXZhaWxhYmxlIHVzZSBpdCwgb3RoZXJ3aXNlIGZhbGwgYmFjayB0bworKyAgLy8gdGhlIHVuc2FmZSB2c3ByaW50ZiB3aGljaCwgaW4gZ2VuZXJhbCwgY2FuIGJlIGRhbmdlcm91cyBhbmQgc2hvdWxkCisgICAvLyBiZSBhdm9pZGVkLgorLSAgdGVtcGxhdGU8dHlwZW5hbWUgX1R2PgorLSAgICBpbnQKKy0gICAgX19jb252ZXJ0X2Zyb21fdihjaGFyKiBfX291dCwKKy0JCSAgICAgY29uc3QgaW50IF9fc2l6ZSBfX2F0dHJpYnV0ZV9fICgoX191bnVzZWRfXykpLAorLQkJICAgICBjb25zdCBjaGFyKiBfX2ZtdCwKKy0jaWZkZWYgX19VQ0xJQkNfSEFTX1hDTE9DQUxFX18KKy0JCSAgICAgX1R2IF9fdiwgY29uc3QgX19jX2xvY2FsZSYgX19jbG9jLCBpbnQgX19wcmVjKQorKyAgICBpbmxpbmUgaW50CisrICAgIF9fY29udmVydF9mcm9tX3YoY29uc3QgX19jX2xvY2FsZSYKKysjaWZuZGVmIF9fVUNMSUJDX0hBU19YQ0xPQ0FMRV9fCisrCV9fY2xvYyBfX2F0dHJpYnV0ZV9fICgoX191bnVzZWRfXykpCisrI2VuZGlmCisrCQkgICAgICwKKysJCSAgICAgY2hhciogX19vdXQsCisrCQkgICAgIGNvbnN0IGludCBfX3NpemUsCisrCQkgICAgIGNvbnN0IGNoYXIqIF9fZm10LCAuLi4pCisgICAgIHsKKysgICAgICB2YV9saXN0IF9fYXJnczsKKysjaWZkZWYgX19VQ0xJQkNfSEFTX1hDTE9DQUxFX18KKysKKyAgICAgICBfX2NfbG9jYWxlIF9fb2xkID0gX19nbnVfY3h4OjpfX3VzZWxvY2FsZShfX2Nsb2MpOworICNlbHNlCistCQkgICAgIF9UdiBfX3YsIGNvbnN0IF9fY19sb2NhbGUmLCBpbnQgX19wcmVjKQorLSAgICB7CisgIyBpZmRlZiBfX1VDTElCQ19IQVNfTE9DQUxFX18KKyAgICAgICBjaGFyKiBfX29sZCA9IHN0ZDo6c2V0bG9jYWxlKExDX0FMTCwgTlVMTCk7CisgICAgICAgY2hhciogX19zYXYgPSBuZXcgY2hhcltzdGQ6OnN0cmxlbihfX29sZCkgKyAxXTsKK0BAIC0xMDMsNyArMTA3LDkgQEAgbmFtZXNwYWNlIHN0ZAorICMgZW5kaWYKKyAjZW5kaWYKKyAKKy0gICAgICBjb25zdCBpbnQgX19yZXQgPSBzdGQ6OnNucHJpbnRmKF9fb3V0LCBfX3NpemUsIF9fZm10LCBfX3ByZWMsIF9fdik7CisrICAgICAgdmFfc3RhcnQoX19hcmdzLCBfX2ZtdCk7CisrICAgICAgY29uc3QgaW50IF9fcmV0ID0gc3RkOjp2c25wcmludGYoX19vdXQsIF9fc2l6ZSwgX19mbXQsIF9fYXJncyk7CisrICAgICAgdmFfZW5kKF9fYXJncyk7CisgCisgI2lmZGVmIF9fVUNMSUJDX0hBU19YQ0xPQ0FMRV9fCisgICAgICAgX19nbnVfY3h4OjpfX3VzZWxvY2FsZShfX29sZCk7CitkaWZmIC0tZ2l0IGEvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL2N0eXBlX21lbWJlcnMuY2MgYi9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvY3R5cGVfbWVtYmVycy5jYworaW5kZXggN2IxMjg2MS4uMTNlMDExZCAxMDA2NDQKKy0tLSBhL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9jdHlwZV9tZW1iZXJzLmNjCisrKysgYi9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvY3R5cGVfbWVtYmVycy5jYworQEAgLTMzLDE2ICszMywyMCBAQAorIAorIC8vIFdyaXR0ZW4gYnkgQmVuamFtaW4gS29zbmlrIDxia296QHJlZGhhdC5jb20+CisgCisrI2luY2x1ZGUgPGZlYXR1cmVzLmg+CisrI2lmZGVmIF9fVUNMSUJDX0hBU19MT0NBTEVfXworICNkZWZpbmUgX0xJQkMKKyAjaW5jbHVkZSA8bG9jYWxlPgorICN1bmRlZiBfTElCQworKyNlbHNlCisrI2luY2x1ZGUgPGxvY2FsZT4KKysjZW5kaWYKKyAjaW5jbHVkZSA8Yml0cy9jKytsb2NhbGVfaW50ZXJuYWwuaD4KKyAKKy1uYW1lc3BhY2Ugc3RkCisteworK19HTElCQ1hYX0JFR0lOX05BTUVTUEFDRShzdGQpCisrCisgICAvLyBOQjogVGhlIG90aGVyIGN0eXBlPGNoYXI+IHNwZWNpYWxpemF0aW9ucyBhcmUgaW4gc3JjL2xvY2FsZS5jYyBhbmQKKyAgIC8vIHZhcmlvdXMgL2NvbmZpZy9vcy8qIGZpbGVzLgorLSAgdGVtcGxhdGU8PgorICAgICBjdHlwZV9ieW5hbWU8Y2hhcj46OmN0eXBlX2J5bmFtZShjb25zdCBjaGFyKiBfX3MsIHNpemVfdCBfX3JlZnMpCisgICAgIDogY3R5cGU8Y2hhcj4oMCwgZmFsc2UsIF9fcmVmcykKKyAgICAgeworQEAgLTU3LDYgKzYxLDggQEAgbmFtZXNwYWNlIHN0ZAorICNlbmRpZgorIAl9CisgICAgIH0KKysgICAgY3R5cGVfYnluYW1lPGNoYXI+Ojp+Y3R5cGVfYnluYW1lKCkKKysgICAgeyB9CisgCisgI2lmZGVmIF9HTElCQ1hYX1VTRV9XQ0hBUl9UCisgICBjdHlwZTx3Y2hhcl90Pjo6X193bWFza190eXBlCitAQCAtMTM4LDE3ICsxNDQsMzMgQEAgbmFtZXNwYWNlIHN0ZAorICAgY3R5cGU8d2NoYXJfdD46OgorICAgZG9faXMobWFzayBfX20sIHdjaGFyX3QgX19jKSBjb25zdAorICAgeworLSAgICAvLyBIaWdoZXN0IGJpdG1hc2sgaW4gY3R5cGVfYmFzZSA9PSAxMCwgYnV0IGV4dHJhIGluICJDIgorLSAgICAvLyBsaWJyYXJ5IGZvciBibGFuay4KKysgICAgLy8gVGhlIGNhc2Ugb2YgX19tID09IGN0eXBlX2Jhc2U6OnNwYWNlIGlzIHBhcnRpY3VsYXJseSBpbXBvcnRhbnQsCisrICAgIC8vIGR1ZSB0byBpdHMgdXNlIGluIG1hbnkgaXN0cmVhbSBmdW5jdGlvbnMuICBUaGVyZWZvcmUgd2UgZGVhbCB3aXRoCisrICAgIC8vIGl0IGZpcnN0LCBleHBsb2l0aW5nIHRoZSBrbm93bGVkZ2UgdGhhdCBvbiBHTlUgc3lzdGVtcyBfTV9iaXRbNV0KKysgICAgLy8gaXMgdGhlIG1hc2sgY29ycmVzcG9uZGluZyB0byBjdHlwZV9iYXNlOjpzcGFjZS4gIE5COiBhbiBlbmNvZGluZworKyAgICAvLyBjaGFuZ2Ugd291bGQgbm90IGFmZmVjdCBjb3JyZWN0bmVzcyEKKysKKyAgICAgYm9vbCBfX3JldCA9IGZhbHNlOworLSAgICBjb25zdCBzaXplX3QgX19iaXRtYXNrc2l6ZSA9IDExOworLSAgICBmb3IgKHNpemVfdCBfX2JpdGN1ciA9IDA7IF9fYml0Y3VyIDw9IF9fYml0bWFza3NpemU7ICsrX19iaXRjdXIpCistICAgICAgaWYgKF9fbSAmIF9NX2JpdFtfX2JpdGN1cl0KKy0JICAmJiBfX2lzd2N0eXBlX2woX19jLCBfTV93bWFza1tfX2JpdGN1cl0sIF9NX2NfbG9jYWxlX2N0eXBlKSkKKy0JeworLQkgIF9fcmV0ID0gdHJ1ZTsKKy0JICBicmVhazsKKy0JfQorKyAgICBpZiAoX19tID09IF9NX2JpdFs1XSkKKysgICAgICBfX3JldCA9IF9faXN3Y3R5cGVfbChfX2MsIF9NX3dtYXNrWzVdLCBfTV9jX2xvY2FsZV9jdHlwZSk7CisrICAgIGVsc2UKKysgICAgICB7CisrCS8vIEhpZ2hlc3QgYml0bWFzayBpbiBjdHlwZV9iYXNlID09IDEwLCBidXQgZXh0cmEgaW4gIkMiCisrCS8vIGxpYnJhcnkgZm9yIGJsYW5rLgorKwljb25zdCBzaXplX3QgX19iaXRtYXNrc2l6ZSA9IDExOworKwlmb3IgKHNpemVfdCBfX2JpdGN1ciA9IDA7IF9fYml0Y3VyIDw9IF9fYml0bWFza3NpemU7ICsrX19iaXRjdXIpCisrCSAgaWYgKF9fbSAmIF9NX2JpdFtfX2JpdGN1cl0pCisrCSAgICB7CisrCSAgICAgIGlmIChfX2lzd2N0eXBlX2woX19jLCBfTV93bWFza1tfX2JpdGN1cl0sIF9NX2NfbG9jYWxlX2N0eXBlKSkKKysJCXsKKysJCSAgX19yZXQgPSB0cnVlOworKwkJICBicmVhazsKKysJCX0KKysJICAgICAgZWxzZSBpZiAoX19tID09IF9NX2JpdFtfX2JpdGN1cl0pCisrCQlicmVhazsKKysJICAgIH0KKysgICAgICB9CisrCisgICAgIHJldHVybiBfX3JldDsKKyAgIH0KKyAKK0BAIC0yOTAsNCArMzEyLDUgQEAgbmFtZXNwYWNlIHN0ZAorICNlbmRpZgorICAgfQorICNlbmRpZiAvLyAgX0dMSUJDWFhfVVNFX1dDSEFSX1QKKy19CisrCisrX0dMSUJDWFhfRU5EX05BTUVTUEFDRQorZGlmZiAtLWdpdCBhL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9tZXNzYWdlc19tZW1iZXJzLmggYi9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvbWVzc2FnZXNfbWVtYmVycy5oCitpbmRleCBkODlkYTMzLi4wNjc2NTdhIDEwMDY0NAorLS0tIGEvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL21lc3NhZ2VzX21lbWJlcnMuaAorKysrIGIvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL21lc3NhZ2VzX21lbWJlcnMuaAorQEAgLTUzLDEyICs1MywxNiBAQAorICAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPgorICAgICAgbWVzc2FnZXM8X0NoYXJUPjo6bWVzc2FnZXMoX19jX2xvY2FsZSBfX2Nsb2MsIGNvbnN0IGNoYXIqIF9fcywKKyAJCQkJc2l6ZV90IF9fcmVmcykKKy0gICAgIDogZmFjZXQoX19yZWZzKSwgX01fY19sb2NhbGVfbWVzc2FnZXMoX1NfY2xvbmVfY19sb2NhbGUoX19jbG9jKSksCistICAgICBfTV9uYW1lX21lc3NhZ2VzKF9fcykKKysgICAgIDogZmFjZXQoX19yZWZzKSwgX01fY19sb2NhbGVfbWVzc2FnZXMoTlVMTCksCisrICAgICBfTV9uYW1lX21lc3NhZ2VzKE5VTEwpCisgICAgICB7CistICAgICAgIGNoYXIqIF9fdG1wID0gbmV3IGNoYXJbc3RkOjpzdHJsZW4oX19zKSArIDFdOworLSAgICAgICBzdGQ6OnN0cmNweShfX3RtcCwgX19zKTsKKysgICAgICAgY29uc3Qgc2l6ZV90IF9fbGVuID0gc3RkOjpzdHJsZW4oX19zKSArIDE7CisrICAgICAgIGNoYXIqIF9fdG1wID0gbmV3IGNoYXJbX19sZW5dOworKyAgICAgICBzdGQ6Om1lbWNweShfX3RtcCwgX19zLCBfX2xlbik7CisgICAgICAgIF9NX25hbWVfbWVzc2FnZXMgPSBfX3RtcDsKKysKKysgICAgICAgLy8gTGFzdCB0byBhdm9pZCBsZWFraW5nIG1lbW9yeSBpZiBuZXcgdGhyb3dzLgorKyAgICAgICBfTV9jX2xvY2FsZV9tZXNzYWdlcyA9IF9TX2Nsb25lX2NfbG9jYWxlKF9fY2xvYyk7CisgICAgICB9CisgCisgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+CitkaWZmIC0tZ2l0IGEvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL21vbmV0YXJ5X21lbWJlcnMuY2MgYi9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvbW9uZXRhcnlfbWVtYmVycy5jYworaW5kZXggMzFlYmI5Zi4uNzY3OWI5YyAxMDA2NDQKKy0tLSBhL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9tb25ldGFyeV9tZW1iZXJzLmNjCisrKysgYi9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvbW9uZXRhcnlfbWVtYmVycy5jYworQEAgLTMzLDkgKzMzLDE0IEBACisgCisgLy8gV3JpdHRlbiBieSBCZW5qYW1pbiBLb3NuaWsgPGJrb3pAcmVkaGF0LmNvbT4KKyAKKysjaW5jbHVkZSA8ZmVhdHVyZXMuaD4KKysjaWZkZWYgX19VQ0xJQkNfSEFTX0xPQ0FMRV9fCisgI2RlZmluZSBfTElCQworICNpbmNsdWRlIDxsb2NhbGU+CisgI3VuZGVmIF9MSUJDCisrI2Vsc2UKKysjaW5jbHVkZSA8bG9jYWxlPgorKyNlbmRpZgorICNpbmNsdWRlIDxiaXRzL2MrK2xvY2FsZV9pbnRlcm5hbC5oPgorIAorICNpZmRlZiBfX1VDTElCQ19NSk4zX09OTFlfXworQEAgLTIwNiw3ICsyMTEsNyBAQCBuYW1lc3BhY2Ugc3RkCisgCSAgfQorIAlicmVhazsKKyAgICAgICBkZWZhdWx0OgorLQk7CisrCV9fcmV0ID0gcGF0dGVybigpOworICAgICAgIH0KKyAgICAgcmV0dXJuIF9fcmV0OworICAgfQorQEAgLTM5MCw3ICszOTUsOSBAQCBuYW1lc3BhY2Ugc3RkCisgCSAgX19jX2xvY2FsZSBfX29sZCA9IF9fdXNlbG9jYWxlKF9fY2xvYyk7CisgI2Vsc2UKKyAJICAvLyBTd2l0Y2ggdG8gbmFtZWQgbG9jYWxlIHNvIHRoYXQgbWJzcnRvd2NzIHdpbGwgd29yay4KKy0JICBjaGFyKiBfX29sZCA9IHN0cmR1cChzZXRsb2NhbGUoTENfQUxMLCBOVUxMKSk7CisrICAJICBjaGFyKiBfX29sZCA9IHNldGxvY2FsZShMQ19BTEwsIE5VTEwpOworKyAgICAgICAgICBjb25zdCBzaXplX3QgX19sbGVuID0gc3RybGVuKF9fb2xkKSArIDE7CisrICAgICAgICAgIGNoYXIqIF9fc2F2ID0gbmV3IGNoYXJbX19sbGVuXTsKKyAJICBzZXRsb2NhbGUoTENfQUxMLCBfX25hbWUpOworICNlbmRpZgorIAorQEAgLTQ3Nyw4ICs0ODQsOCBAQCBuYW1lc3BhY2Ugc3RkCisgI2lmZGVmIF9fVUNMSUJDX0hBU19YTE9DQUxFX18KKyAJICAgICAgX191c2Vsb2NhbGUoX19vbGQpOworICNlbHNlCistCSAgICAgIHNldGxvY2FsZShMQ19BTEwsIF9fb2xkKTsKKy0JICAgICAgZnJlZShfX29sZCk7CisrCSAgICAgIHNldGxvY2FsZShMQ19BTEwsIF9fc2F2KTsKKysJICAgICAgZGVsZXRlIFtdIF9fc2F2OworICNlbmRpZgorIAkgICAgICBfX3Rocm93X2V4Y2VwdGlvbl9hZ2FpbjsKKyAJICAgIH0KK0BAIC00OTgsOCArNTA1LDggQEAgbmFtZXNwYWNlIHN0ZAorICNpZmRlZiBfX1VDTElCQ19IQVNfWExPQ0FMRV9fCisgCSAgX191c2Vsb2NhbGUoX19vbGQpOworICNlbHNlCistCSAgc2V0bG9jYWxlKExDX0FMTCwgX19vbGQpOworLQkgIGZyZWUoX19vbGQpOworKwkgIHNldGxvY2FsZShMQ19BTEwsIF9fc2F2KTsKKysJICBkZWxldGUgW10gX19zYXY7CisgI2VuZGlmCisgCX0KKyAgICAgfQorQEAgLTU0NSw4ICs1NTIsMTEgQEAgbmFtZXNwYWNlIHN0ZAorIAkgIF9fY19sb2NhbGUgX19vbGQgPSBfX3VzZWxvY2FsZShfX2Nsb2MpOworICNlbHNlCisgCSAgLy8gU3dpdGNoIHRvIG5hbWVkIGxvY2FsZSBzbyB0aGF0IG1ic3J0b3djcyB3aWxsIHdvcmsuCistCSAgY2hhciogX19vbGQgPSBzdHJkdXAoc2V0bG9jYWxlKExDX0FMTCwgTlVMTCkpOworLQkgIHNldGxvY2FsZShMQ19BTEwsIF9fbmFtZSk7CisrICAgICAgICAgIGNoYXIqIF9fb2xkID0gc2V0bG9jYWxlKExDX0FMTCwgTlVMTCk7CisrICAgICAgICAgIGNvbnN0IHNpemVfdCBfX2xsZW4gPSBzdHJsZW4oX19vbGQpICsgMTsKKysgICAgICAgICAgY2hhciogX19zYXYgPSBuZXcgY2hhcltfX2xsZW5dOworKyAgICAgICAgICBtZW1jcHkoX19zYXYsIF9fb2xkLCBfX2xsZW4pOworKyAgICAgICAgICBzZXRsb2NhbGUoTENfQUxMLCBfX25hbWUpOworICNlbmRpZgorIAorICNpZmRlZiBfX1VDTElCQ19NSk4zX09OTFlfXworQEAgLTYzMyw4ICs2NDMsOCBAQCBuYW1lc3BhY2Ugc3RkCisgI2lmZGVmIF9fVUNMSUJDX0hBU19YTE9DQUxFX18KKyAJICAgICAgX191c2Vsb2NhbGUoX19vbGQpOworICNlbHNlCistCSAgICAgIHNldGxvY2FsZShMQ19BTEwsIF9fb2xkKTsKKy0JICAgICAgZnJlZShfX29sZCk7CisrCSAgICAgIHNldGxvY2FsZShMQ19BTEwsIF9fc2F2KTsKKysJICAgICAgZGVsZXRlIFtdIF9fc2F2OworICNlbmRpZgorICAgICAgICAgICAgICAgX190aHJvd19leGNlcHRpb25fYWdhaW47CisgCSAgICB9CitAQCAtNjUzLDggKzY2Myw4IEBAIG5hbWVzcGFjZSBzdGQKKyAjaWZkZWYgX19VQ0xJQkNfSEFTX1hMT0NBTEVfXworIAkgIF9fdXNlbG9jYWxlKF9fb2xkKTsKKyAjZWxzZQorLQkgIHNldGxvY2FsZShMQ19BTEwsIF9fb2xkKTsKKy0JICBmcmVlKF9fb2xkKTsKKysJICBzZXRsb2NhbGUoTENfQUxMLCBfX3Nhdik7CisrCSAgZGVsZXRlIFtdIF9fc2F2OworICNlbmRpZgorIAl9CisgICAgIH0KK2RpZmYgLS1naXQgYS9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvbnVtZXJpY19tZW1iZXJzLmNjIGIvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL251bWVyaWNfbWVtYmVycy5jYworaW5kZXggZDVjODk2MS4uOGFlODk2OSAxMDA2NDQKKy0tLSBhL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9udW1lcmljX21lbWJlcnMuY2MKKysrKyBiL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9udW1lcmljX21lbWJlcnMuY2MKK0BAIC0zMyw5ICszMywxNCBAQAorIAorIC8vIFdyaXR0ZW4gYnkgQmVuamFtaW4gS29zbmlrIDxia296QHJlZGhhdC5jb20+CisgCisrI2luY2x1ZGUgPGZlYXR1cmVzLmg+CisrI2lmZGVmIF9fVUNMSUJDX0hBU19MT0NBTEVfXworICNkZWZpbmUgX0xJQkMKKyAjaW5jbHVkZSA8bG9jYWxlPgorICN1bmRlZiBfTElCQworKyNlbHNlCisrI2luY2x1ZGUgPGxvY2FsZT4KKysjZW5kaWYKKyAjaW5jbHVkZSA8Yml0cy9jKytsb2NhbGVfaW50ZXJuYWwuaD4KKyAKKyAjaWZkZWYgX19VQ0xJQkNfTUpOM19PTkxZX18KK2RpZmYgLS1naXQgYS9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvdGltZV9tZW1iZXJzLmNjIGIvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL3RpbWVfbWVtYmVycy5jYworaW5kZXggZDg0OGVkNS4uZjI0ZDUzZSAxMDA2NDQKKy0tLSBhL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy90aW1lX21lbWJlcnMuY2MKKysrKyBiL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy90aW1lX21lbWJlcnMuY2MKK0BAIC01MywxMSArNTMsMTQgQEAgbmFtZXNwYWNlIHN0ZAorICAgICAgIGNvbnN0IHNpemVfdCBfX2xlbiA9IF9fc3RyZnRpbWVfbChfX3MsIF9fbWF4bGVuLCBfX2Zvcm1hdCwgX190bSwKKyAJCQkJCV9NX2NfbG9jYWxlX3RpbWVwdW5jdCk7CisgI2Vsc2UKKy0gICAgICBjaGFyKiBfX29sZCA9IHN0cmR1cChzZXRsb2NhbGUoTENfQUxMLCBOVUxMKSk7CisrICAgICAgY2hhciogX19vbGQgPSBzZXRsb2NhbGUoTENfQUxMLCBOVUxMKTsKKysgICAgICBjb25zdCBzaXplX3QgX19sbGVuID0gc3RybGVuKF9fb2xkKSArIDE7CisrICAgICAgY2hhciogX19zYXYgPSBuZXcgY2hhcltfX2xsZW5dOworKyAgICAgIG1lbWNweShfX3NhdiwgX19vbGQsIF9fbGxlbik7CisgICAgICAgc2V0bG9jYWxlKExDX0FMTCwgX01fbmFtZV90aW1lcHVuY3QpOworICAgICAgIGNvbnN0IHNpemVfdCBfX2xlbiA9IHN0cmZ0aW1lKF9fcywgX19tYXhsZW4sIF9fZm9ybWF0LCBfX3RtKTsKKy0gICAgICBzZXRsb2NhbGUoTENfQUxMLCBfX29sZCk7CistICAgICAgZnJlZShfX29sZCk7CisrICAgICAgc2V0bG9jYWxlKExDX0FMTCwgX19zYXYpOworKyAgICAgIGRlbGV0ZSBbXSBfX3NhdjsKKyAjZW5kaWYKKyAgICAgICAvLyBNYWtlIHN1cmUgX19zIGlzIG51bGwgdGVybWluYXRlZC4KKyAgICAgICBpZiAoX19sZW4gPT0gMCkKK0BAIC0yMDcsMTEgKzIxMCwxNCBAQCBuYW1lc3BhY2Ugc3RkCisgICAgICAgY29uc3Qgc2l6ZV90IF9fbGVuID0gX193Y3NmdGltZV9sKF9fcywgX19tYXhsZW4sIF9fZm9ybWF0LCBfX3RtLAorIAkJCQkJX01fY19sb2NhbGVfdGltZXB1bmN0KTsKKyAjZWxzZQorLSAgICAgIGNoYXIqIF9fb2xkID0gc3RyZHVwKHNldGxvY2FsZShMQ19BTEwsIE5VTEwpKTsKKysgICAgICBjaGFyKiBfX29sZCA9IHNldGxvY2FsZShMQ19BTEwsIE5VTEwpOworKyAgICAgIGNvbnN0IHNpemVfdCBfX2xsZW4gPSBzdHJsZW4oX19vbGQpICsgMTsKKysgICAgICBjaGFyKiBfX3NhdiA9IG5ldyBjaGFyW19fbGxlbl07CisrICAgICAgbWVtY3B5KF9fc2F2LCBfX29sZCwgX19sbGVuKTsKKyAgICAgICBzZXRsb2NhbGUoTENfQUxMLCBfTV9uYW1lX3RpbWVwdW5jdCk7CisgICAgICAgY29uc3Qgc2l6ZV90IF9fbGVuID0gd2NzZnRpbWUoX19zLCBfX21heGxlbiwgX19mb3JtYXQsIF9fdG0pOworLSAgICAgIHNldGxvY2FsZShMQ19BTEwsIF9fb2xkKTsKKy0gICAgICBmcmVlKF9fb2xkKTsKKysgICAgICBzZXRsb2NhbGUoTENfQUxMLCBfX3Nhdik7CisrICAgICAgZGVsZXRlIFtdIF9fc2F2OworICNlbmRpZgorICAgICAgIC8vIE1ha2Ugc3VyZSBfX3MgaXMgbnVsbCB0ZXJtaW5hdGVkLgorICAgICAgIGlmIChfX2xlbiA9PSAwKQorZGlmZiAtLWdpdCBhL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy90aW1lX21lbWJlcnMuaCBiL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy90aW1lX21lbWJlcnMuaAoraW5kZXggYmE4ZTg1OC4uMTY2NWRkZSAxMDA2NDQKKy0tLSBhL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy90aW1lX21lbWJlcnMuaAorKysrIGIvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL3RpbWVfbWVtYmVycy5oCitAQCAtNTAsMTIgKzUwLDIxIEBACisgICAgIF9fdGltZXB1bmN0PF9DaGFyVD46Ol9fdGltZXB1bmN0KF9fY19sb2NhbGUgX19jbG9jLCBjb25zdCBjaGFyKiBfX3MsCisgCQkJCSAgICAgc2l6ZV90IF9fcmVmcykKKyAgICAgOiBmYWNldChfX3JlZnMpLCBfTV9kYXRhKE5VTEwpLCBfTV9jX2xvY2FsZV90aW1lcHVuY3QoTlVMTCksCistICAgIF9NX25hbWVfdGltZXB1bmN0KF9fcykKKysgICAgX01fbmFtZV90aW1lcHVuY3QoTlVMTCkKKyAgICAgeworLSAgICAgIGNoYXIqIF9fdG1wID0gbmV3IGNoYXJbc3RkOjpzdHJsZW4oX19zKSArIDFdOworLSAgICAgIHN0ZDo6c3RyY3B5KF9fdG1wLCBfX3MpOworKyAgICAgIGNvbnN0IHNpemVfdCBfX2xlbiA9IHN0ZDo6c3RybGVuKF9fcykgKyAxOworKyAgICAgIGNoYXIqIF9fdG1wID0gbmV3IGNoYXJbX19sZW5dOworKyAgICAgIHN0ZDo6bWVtY3B5KF9fdG1wLCBfX3MsIF9fbGVuKTsKKyAgICAgICBfTV9uYW1lX3RpbWVwdW5jdCA9IF9fdG1wOworLSAgICAgIF9NX2luaXRpYWxpemVfdGltZXB1bmN0KF9fY2xvYyk7CisrCisrICAgICAgdHJ5CisrCXsgX01faW5pdGlhbGl6ZV90aW1lcHVuY3QoX19jbG9jKTsgfQorKyAgICAgIGNhdGNoKC4uLikKKysJeworKwkgIGRlbGV0ZSBbXSBfTV9uYW1lX3RpbWVwdW5jdDsKKysJICBfX3Rocm93X2V4Y2VwdGlvbl9hZ2FpbjsKKysJfQorKworICAgICB9CisgCisgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+CistLSAKKzIuOC4yCisKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy02LjIvMDAwOC1taXNzaW5nLWV4ZWNpbmZvX2gucGF0Y2ggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNi4yLzAwMDgtbWlzc2luZy1leGVjaW5mb19oLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAxZTdjOTUKLS0tIC9kZXYvbnVsbAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNi4yLzAwMDgtbWlzc2luZy1leGVjaW5mb19oLnBhdGNoCkBAIC0wLDAgKzEsMjggQEAKK0Zyb20gNmRkZTNkYTI0ZWY0YjliMzU3YmNhNjcwZDg1NTFjYWIzZmRkYTg0MyBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CitEYXRlOiBGcmksIDI5IE1hciAyMDEzIDA4OjQ4OjEwICswNDAwCitTdWJqZWN0OiBbUEFUQ0ggMDgvNDZdIG1pc3NpbmctZXhlY2luZm9faAorCitTaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKy0tLQorIGJvZWhtLWdjL2luY2x1ZGUvZ2MuaCB8IDIgKy0KKyAxIGZpbGUgY2hhbmdlZCwgMSBpbnNlcnRpb24oKyksIDEgZGVsZXRpb24oLSkKKworZGlmZiAtLWdpdCBhL2JvZWhtLWdjL2luY2x1ZGUvZ2MuaCBiL2JvZWhtLWdjL2luY2x1ZGUvZ2MuaAoraW5kZXggNmIzOGYyZC4uZmNhOThmZiAxMDA2NDQKKy0tLSBhL2JvZWhtLWdjL2luY2x1ZGUvZ2MuaAorKysrIGIvYm9laG0tZ2MvaW5jbHVkZS9nYy5oCitAQCAtNTAzLDcgKzUwMyw3IEBAIEdDX0FQSSBHQ19QVFIgR0NfbWFsbG9jX2F0b21pY19pZ25vcmVfb2ZmX3BhZ2UgR0NfUFJPVE8oKHNpemVfdCBsYikpOworICNpZiBkZWZpbmVkKF9fbGludXhfXykgfHwgZGVmaW5lZChfX0dMSUJDX18pCisgIyBpbmNsdWRlIDxmZWF0dXJlcy5oPgorICMgaWYgKF9fR0xJQkNfXyA9PSAyICYmIF9fR0xJQkNfTUlOT1JfXyA+PSAxIHx8IF9fR0xJQkNfXyA+IDIpIFwKKy0gICAgICYmICFkZWZpbmVkKF9faWE2NF9fKQorKyAgICAgJiYgIWRlZmluZWQoX19pYTY0X18pICYmICFkZWZpbmVkKF9fVUNMSUJDX18pCisgIyAgIGlmbmRlZiBHQ19IQVZFX0JVSUxUSU5fQkFDS1RSQUNFCisgIyAgICAgZGVmaW5lIEdDX0hBVkVfQlVJTFRJTl9CQUNLVFJBQ0UKKyAjICAgZW5kaWYKKy0tIAorMi44LjIKKwpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTYuMi8wMDA5LWM5OS1zbnByaW50Zi5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy02LjIvMDAwOS1jOTktc25wcmludGYucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDYyMzQxYQotLS0gL2Rldi9udWxsCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy02LjIvMDAwOS1jOTktc25wcmludGYucGF0Y2gKQEAgLTAsMCArMSwyOCBAQAorRnJvbSBiNzk0ZjFmMWMxYzdjMDZmM2YwZDc4Y2Y3NmM0ZmI5MGMyYWI4ZGZiIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KK0RhdGU6IEZyaSwgMjkgTWFyIDIwMTMgMDg6NDk6MDMgKzA0MDAKK1N1YmplY3Q6IFtQQVRDSCAwOS80Nl0gYzk5LXNucHJpbnRmCisKK1NpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworLS0tCisgbGlic3RkYysrLXYzL2luY2x1ZGUvY19zdGQvY3N0ZGlvIHwgMiArLQorIDEgZmlsZSBjaGFuZ2VkLCAxIGluc2VydGlvbigrKSwgMSBkZWxldGlvbigtKQorCitkaWZmIC0tZ2l0IGEvbGlic3RkYysrLXYzL2luY2x1ZGUvY19zdGQvY3N0ZGlvIGIvbGlic3RkYysrLXYzL2luY2x1ZGUvY19zdGQvY3N0ZGlvCitpbmRleCBhNDExOWJhLi44Mzk2ZjQzIDEwMDY0NAorLS0tIGEvbGlic3RkYysrLXYzL2luY2x1ZGUvY19zdGQvY3N0ZGlvCisrKysgYi9saWJzdGRjKystdjMvaW5jbHVkZS9jX3N0ZC9jc3RkaW8KK0BAIC0xNDQsNyArMTQ0LDcgQEAgbmFtZXNwYWNlIHN0ZAorICAgdXNpbmcgOjp2c3ByaW50ZjsKKyB9IC8vIG5hbWVzcGFjZSBzdGQKKyAKKy0jaWYgX0dMSUJDWFhfVVNFX0M5OV9TVERJTworKyNpZiBfR0xJQkNYWF9VU0VfQzk5X1NURElPIHx8IGRlZmluZWQoX19VQ0xJQkNfXykKKyAKKyAjdW5kZWYgc25wcmludGYKKyAjdW5kZWYgdmZzY2FuZgorLS0gCisyLjguMgorCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNi4yLzAwMTAtZ2NjLXBvaXNvbi1zeXN0ZW0tZGlyZWN0b3JpZXMucGF0Y2ggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNi4yLzAwMTAtZ2NjLXBvaXNvbi1zeXN0ZW0tZGlyZWN0b3JpZXMucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWM0Y2Y0NAotLS0gL2Rldi9udWxsCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy02LjIvMDAxMC1nY2MtcG9pc29uLXN5c3RlbS1kaXJlY3Rvcmllcy5wYXRjaApAQCAtMCwwICsxLDE5MiBAQAorRnJvbSBkNzYyNTAzMjNkYWQ2OTIxMmM5NThlNDg1N2E5OGQ5OWFiNTFhMzllIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KK0RhdGU6IEZyaSwgMjkgTWFyIDIwMTMgMDg6NTk6MDAgKzA0MDAKK1N1YmplY3Q6IFtQQVRDSCAxMC80Nl0gZ2NjOiBwb2lzb24tc3lzdGVtLWRpcmVjdG9yaWVzCisKK1NpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CisKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbZGlzdHJpYnV0aW9uOiBjb2Rlc291cmNlcnldCistLS0KKyBnY2MvY29tbW9uLm9wdCAgICAgIHwgIDQgKysrKworIGdjYy9jb25maWcuaW4gICAgICAgfCAgNiArKysrKysKKyBnY2MvY29uZmlndXJlICAgICAgIHwgMTYgKysrKysrKysrKysrKysrKworIGdjYy9jb25maWd1cmUuYWMgICAgfCAxMCArKysrKysrKysrCisgZ2NjL2RvYy9pbnZva2UudGV4aSB8ICA5ICsrKysrKysrKworIGdjYy9nY2MuYyAgICAgICAgICAgfCAgMiArKworIGdjYy9pbmNwYXRoLmMgICAgICAgfCAxOSArKysrKysrKysrKysrKysrKysrCisgNyBmaWxlcyBjaGFuZ2VkLCA2NiBpbnNlcnRpb25zKCspCisKK2RpZmYgLS1naXQgYS9nY2MvY29tbW9uLm9wdCBiL2djYy9jb21tb24ub3B0CitpbmRleCA2NzA0OGRiLi43MzMxODVjIDEwMDY0NAorLS0tIGEvZ2NjL2NvbW1vbi5vcHQKKysrKyBiL2djYy9jb21tb24ub3B0CitAQCAtNjU5LDYgKzY1OSwxMCBAQCBXcmV0dXJuLWxvY2FsLWFkZHIKKyBDb21tb24gVmFyKHdhcm5fcmV0dXJuX2xvY2FsX2FkZHIpIEluaXQoMSkgV2FybmluZworIFdhcm4gYWJvdXQgcmV0dXJuaW5nIGEgcG9pbnRlci9yZWZlcmVuY2UgdG8gYSBsb2NhbCBvciB0ZW1wb3JhcnkgdmFyaWFibGUuCisgCisrV3BvaXNvbi1zeXN0ZW0tZGlyZWN0b3JpZXMKKytDb21tb24gVmFyKGZsYWdfcG9pc29uX3N5c3RlbV9kaXJlY3RvcmllcykgSW5pdCgxKSBXYXJuaW5nCisrV2FybiBmb3IgLUkgYW5kIC1MIG9wdGlvbnMgdXNpbmcgc3lzdGVtIGRpcmVjdG9yaWVzIGlmIGNyb3NzIGNvbXBpbGluZworKworIFdzaGFkb3cKKyBDb21tb24gVmFyKHdhcm5fc2hhZG93KSBXYXJuaW5nCisgV2FybiB3aGVuIG9uZSBsb2NhbCB2YXJpYWJsZSBzaGFkb3dzIGFub3RoZXIuCitkaWZmIC0tZ2l0IGEvZ2NjL2NvbmZpZy5pbiBiL2djYy9jb25maWcuaW4KK2luZGV4IDExNWNiNjEuLjEwNWIzMGYgMTAwNjQ0CistLS0gYS9nY2MvY29uZmlnLmluCisrKysgYi9nY2MvY29uZmlnLmluCitAQCAtMTg3LDYgKzE4NywxMiBAQAorICNlbmRpZgorIAorIAorKy8qIERlZmluZSB0byB3YXJuIGZvciB1c2Ugb2YgbmF0aXZlIHN5c3RlbSBoZWFkZXIgZGlyZWN0b3JpZXMgKi8KKysjaWZuZGVmIFVTRURfRk9SX1RBUkdFVAorKyN1bmRlZiBFTkFCTEVfUE9JU09OX1NZU1RFTV9ESVJFQ1RPUklFUworKyNlbmRpZgorKworKworIC8qIERlZmluZSBpZiB5b3Ugd2FudCBhbGwgb3BlcmF0aW9ucyBvbiBSVEwgKHRoZSBiYXNpYyBkYXRhIHN0cnVjdHVyZSBvZiB0aGUKKyAgICBvcHRpbWl6ZXIgYW5kIGJhY2sgZW5kKSB0byBiZSBjaGVja2VkIGZvciBkeW5hbWljIHR5cGUgc2FmZXR5IGF0IHJ1bnRpbWUuCisgICAgVGhpcyBpcyBxdWl0ZSBleHBlbnNpdmUuICovCitkaWZmIC0tZ2l0IGEvZ2NjL2NvbmZpZ3VyZSBiL2djYy9jb25maWd1cmUKK2luZGV4IDFjNmUzNDAuLjhmODMxNTIgMTAwNzU1CistLS0gYS9nY2MvY29uZmlndXJlCisrKysgYi9nY2MvY29uZmlndXJlCitAQCAtOTQyLDYgKzk0Miw3IEBAIHdpdGhfc3lzdGVtX3psaWIKKyBlbmFibGVfbWFpbnRhaW5lcl9tb2RlCisgZW5hYmxlX2xpbmtfbXV0ZXgKKyBlbmFibGVfdmVyc2lvbl9zcGVjaWZpY19ydW50aW1lX2xpYnMKKytlbmFibGVfcG9pc29uX3N5c3RlbV9kaXJlY3RvcmllcworIGVuYWJsZV9wbHVnaW4KKyBlbmFibGVfaG9zdF9zaGFyZWQKKyBlbmFibGVfbGlicXVhZG1hdGhfc3VwcG9ydAorQEAgLTE2ODEsNiArMTY4Miw4IEBAIE9wdGlvbmFsIEZlYXR1cmVzOgorICAgLS1lbmFibGUtdmVyc2lvbi1zcGVjaWZpYy1ydW50aW1lLWxpYnMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHNwZWNpZnkgdGhhdCBydW50aW1lIGxpYnJhcmllcyBzaG91bGQgYmUgaW5zdGFsbGVkCisgICAgICAgICAgICAgICAgICAgICAgICAgICBpbiBhIGNvbXBpbGVyLXNwZWNpZmljIGRpcmVjdG9yeQorKyAgLS1lbmFibGUtcG9pc29uLXN5c3RlbS1kaXJlY3RvcmllcworKyAgICAgICAgICAgICAgICAgICAgICAgICAgd2FybiBmb3IgdXNlIG9mIG5hdGl2ZSBzeXN0ZW0gaGVhZGVyIGRpcmVjdG9yaWVzCisgICAtLWVuYWJsZS1wbHVnaW4gICAgICAgICBlbmFibGUgcGx1Z2luIHN1cHBvcnQKKyAgIC0tZW5hYmxlLWhvc3Qtc2hhcmVkICAgIGJ1aWxkIGhvc3QgY29kZSBhcyBzaGFyZWQgbGlicmFyaWVzCisgICAtLWRpc2FibGUtbGlicXVhZG1hdGgtc3VwcG9ydAorQEAgLTI4OTA4LDYgKzI4OTExLDE5IEBAIGlmIHRlc3QgIiR7ZW5hYmxlX3ZlcnNpb25fc3BlY2lmaWNfcnVudGltZV9saWJzK3NldH0iID0gc2V0OyB0aGVuIDoKKyBmaQorIAorIAorKyMgQ2hlY2sgd2hldGhlciAtLWVuYWJsZS1wb2lzb24tc3lzdGVtLWRpcmVjdG9yaWVzIHdhcyBnaXZlbi4KKytpZiB0ZXN0ICIke2VuYWJsZV9wb2lzb25fc3lzdGVtX2RpcmVjdG9yaWVzK3NldH0iID0gc2V0OyB0aGVuIDoKKysgIGVuYWJsZXZhbD0kZW5hYmxlX3BvaXNvbl9zeXN0ZW1fZGlyZWN0b3JpZXM7CisrZWxzZQorKyAgZW5hYmxlX3BvaXNvbl9zeXN0ZW1fZGlyZWN0b3JpZXM9bm8KKytmaQorKworK2lmIHRlc3QgIngke2VuYWJsZV9wb2lzb25fc3lzdGVtX2RpcmVjdG9yaWVzfSIgPSAieHllcyI7IHRoZW4KKysKKyskYXNfZWNobyAiI2RlZmluZSBFTkFCTEVfUE9JU09OX1NZU1RFTV9ESVJFQ1RPUklFUyAxIiA+PmNvbmZkZWZzLmgKKysKKytmaQorKworICMgU3Vic3RpdHV0ZSBjb25maWd1cmF0aW9uIHZhcmlhYmxlcworIAorIAorZGlmZiAtLWdpdCBhL2djYy9jb25maWd1cmUuYWMgYi9nY2MvY29uZmlndXJlLmFjCitpbmRleCA2YzFkY2Q5Li4wZmNjYWVmIDEwMDY0NAorLS0tIGEvZ2NjL2NvbmZpZ3VyZS5hYworKysrIGIvZ2NjL2NvbmZpZ3VyZS5hYworQEAgLTU4NjEsNiArNTg2MSwxNiBAQCBBQ19BUkdfRU5BQkxFKHZlcnNpb24tc3BlY2lmaWMtcnVudGltZS1saWJzLAorICAgICAgICAgICAgICAgICBbc3BlY2lmeSB0aGF0IHJ1bnRpbWUgbGlicmFyaWVzIHNob3VsZCBiZQorICAgICAgICAgICAgICAgICAgaW5zdGFsbGVkIGluIGEgY29tcGlsZXItc3BlY2lmaWMgZGlyZWN0b3J5XSldKQorIAorK0FDX0FSR19FTkFCTEUoW3BvaXNvbi1zeXN0ZW0tZGlyZWN0b3JpZXNdLAorKyAgICAgICAgICAgICBBU19IRUxQX1NUUklORyhbLS1lbmFibGUtcG9pc29uLXN5c3RlbS1kaXJlY3Rvcmllc10sCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgIFt3YXJuIGZvciB1c2Ugb2YgbmF0aXZlIHN5c3RlbSBoZWFkZXIgZGlyZWN0b3JpZXNdKSwsCisrICAgICAgICAgICAgIFtlbmFibGVfcG9pc29uX3N5c3RlbV9kaXJlY3Rvcmllcz1ub10pCisraWYgdGVzdCAieCR7ZW5hYmxlX3BvaXNvbl9zeXN0ZW1fZGlyZWN0b3JpZXN9IiA9ICJ4eWVzIjsgdGhlbgorKyAgQUNfREVGSU5FKFtFTkFCTEVfUE9JU09OX1NZU1RFTV9ESVJFQ1RPUklFU10sCisrICAgICAgICAgICBbMV0sCisrICAgICAgICAgICBbRGVmaW5lIHRvIHdhcm4gZm9yIHVzZSBvZiBuYXRpdmUgc3lzdGVtIGhlYWRlciBkaXJlY3Rvcmllc10pCisrZmkKKysKKyAjIFN1YnN0aXR1dGUgY29uZmlndXJhdGlvbiB2YXJpYWJsZXMKKyBBQ19TVUJTVChzdWJkaXJzKQorIEFDX1NVQlNUKHNyY2RpcikKK2RpZmYgLS1naXQgYS9nY2MvZG9jL2ludm9rZS50ZXhpIGIvZ2NjL2RvYy9pbnZva2UudGV4aQoraW5kZXggODIxZjhmZC4uOGJiNDllNyAxMDA2NDQKKy0tLSBhL2djYy9kb2MvaW52b2tlLnRleGkKKysrKyBiL2djYy9kb2MvaW52b2tlLnRleGkKK0BAIC0yODQsNiArMjg0LDcgQEAgT2JqZWN0aXZlLUMgYW5kIE9iamVjdGl2ZS1DKysgRGlhbGVjdHN9LgorIC1XcGFyZW50aGVzZXMgLVduby1wZWRhbnRpYy1tcy1mb3JtYXQgQGdvbAorIC1XcGxhY2VtZW50LW5ldyAtV3BsYWNlbWVudC1uZXc9QHZhcntufSBAZ29sCisgLVdwb2ludGVyLWFyaXRoICAtV25vLXBvaW50ZXItdG8taW50LWNhc3QgQGdvbAorKy1Xbm8tcG9pc29uLXN5c3RlbS1kaXJlY3RvcmllcyBAZ29sCisgLVduby1wcmFnbWFzIC1XcmVkdW5kYW50LWRlY2xzICAtV25vLXJldHVybi1sb2NhbC1hZGRyIEBnb2wKKyAtV3JldHVybi10eXBlICAtV3NlcXVlbmNlLXBvaW50ICAtV3NoYWRvdyAgLVduby1zaGFkb3ctaXZhciBAZ29sCisgLVdzaGlmdC1vdmVyZmxvdyAtV3NoaWZ0LW92ZXJmbG93PUB2YXJ7bn0gQGdvbAorQEAgLTQ3MjMsNiArNDcyNCwxNCBAQCBtYWRlIHVwIG9mIGRhdGEgb25seSBhbmQgdGh1cyByZXF1aXJlcyBubyBzcGVjaWFsIHRyZWF0bWVudC4gIEJ1dCwgZm9yCisgbW9zdCB0YXJnZXRzLCBpdCBpcyBtYWRlIHVwIG9mIGNvZGUgYW5kIHRodXMgcmVxdWlyZXMgdGhlIHN0YWNrIHRvIGJlCisgbWFkZSBleGVjdXRhYmxlIGluIG9yZGVyIGZvciB0aGUgcHJvZ3JhbSB0byB3b3JrIHByb3Blcmx5LgorIAorK0BpdGVtIC1Xbm8tcG9pc29uLXN5c3RlbS1kaXJlY3RvcmllcworK0BvcGluZGV4IFduby1wb2lzb24tc3lzdGVtLWRpcmVjdG9yaWVzCisrRG8gbm90IHdhcm4gZm9yIEBvcHRpb257LUl9IG9yIEBvcHRpb257LUx9IG9wdGlvbnMgdXNpbmcgc3lzdGVtCisrZGlyZWN0b3JpZXMgc3VjaCBhcyBAZmlsZXsvdXNyL2luY2x1ZGV9IHdoZW4gY3Jvc3MgY29tcGlsaW5nLiAgVGhpcworK29wdGlvbiBpcyBpbnRlbmRlZCBmb3IgdXNlIGluIGNocm9vdCBlbnZpcm9ubWVudHMgd2hlbiBzdWNoCisrZGlyZWN0b3JpZXMgY29udGFpbiB0aGUgY29ycmVjdCBoZWFkZXJzIGFuZCBsaWJyYXJpZXMgZm9yIHRoZSB0YXJnZXQKKytzeXN0ZW0gcmF0aGVyIHRoYW4gdGhlIGhvc3QuCisrCisgQGl0ZW0gLVdmbG9hdC1lcXVhbAorIEBvcGluZGV4IFdmbG9hdC1lcXVhbAorIEBvcGluZGV4IFduby1mbG9hdC1lcXVhbAorZGlmZiAtLWdpdCBhL2djYy9nY2MuYyBiL2djYy9nY2MuYworaW5kZXggMWFmNTkyMC4uNGNmZWY3ZiAxMDA2NDQKKy0tLSBhL2djYy9nY2MuYworKysrIGIvZ2NjL2djYy5jCitAQCAtMTAxNyw2ICsxMDE3LDggQEAgcHJvcGVyIHBvc2l0aW9uIGFtb25nIHRoZSBvdGhlciBvdXRwdXQgZmlsZXMuICAqLworICAgICIle2Z1c2UtbGQ9KjotZnVzZS1sZD0lKn0gIiBMSU5LX0NPTVBSRVNTX0RFQlVHX1NQRUMgXAorICAgICIlWCAle28qfSAle2UqfSAle059ICV7bn0gJXtyfVwKKyAgICAgJXtzfSAle3R9ICV7dSp9ICV7en0gJXtafSAleyFub3N0ZGxpYjoleyFub3N0YXJ0ZmlsZXM6JVN9fSBcCisrICAgICV7V25vLXBvaXNvbi1zeXN0ZW0tZGlyZWN0b3JpZXM6LS1uby1wb2lzb24tc3lzdGVtLWRpcmVjdG9yaWVzfSBcCisrICAgICV7V2Vycm9yPXBvaXNvbi1zeXN0ZW0tZGlyZWN0b3JpZXM6LS1lcnJvci1wb2lzb24tc3lzdGVtLWRpcmVjdG9yaWVzfSBcCisgICAgICV7c3RhdGljOn0gJXtMKn0gJShtZndyYXApICUobGlua19saWJnY2MpICIgXAorICAgICBWVEFCTEVfVkVSSUZJQ0FUSU9OX1NQRUMgIiAiIFNBTklUSVpFUl9FQVJMWV9TUEVDICIgJW8gIiBDSEtQX1NQRUMgIiBcCisgICAgICV7Zm9wZW5hY2N8Zm9wZW5tcHwlOmd0KCV7ZnRyZWUtcGFyYWxsZWxpemUtbG9vcHM9KjolKn0gMSk6XAorZGlmZiAtLWdpdCBhL2djYy9pbmNwYXRoLmMgYi9nY2MvaW5jcGF0aC5jCitpbmRleCBlYTQwZjRhLi44NTZkYTQxIDEwMDY0NAorLS0tIGEvZ2NjL2luY3BhdGguYworKysrIGIvZ2NjL2luY3BhdGguYworQEAgLTI2LDYgKzI2LDcgQEAKKyAjaW5jbHVkZSAiaW50bC5oIgorICNpbmNsdWRlICJpbmNwYXRoLmgiCisgI2luY2x1ZGUgImNwcGRlZmF1bHQuaCIKKysjaW5jbHVkZSAiZGlhZ25vc3RpYy1jb3JlLmgiCisgCisgLyogTWljcm9zb2Z0IFdpbmRvd3MgZG9lcyBub3QgbmF0aXZlbHkgc3VwcG9ydCBpbm9kZXMuCisgICAgVk1TIGhhcyBub24tbnVtZXJpYyBpbm9kZXMuICAqLworQEAgLTM4MSw2ICszODIsMjQgQEAgbWVyZ2VfaW5jbHVkZV9jaGFpbnMgKGNvbnN0IGNoYXIgKnN5c3Jvb3QsIGNwcF9yZWFkZXIgKnBmaWxlLCBpbnQgdmVyYm9zZSkKKyAJfQorICAgICAgIGZwcmludGYgKHN0ZGVyciwgXygiRW5kIG9mIHNlYXJjaCBsaXN0LlxuIikpOworICAgICB9CisrCisrI2lmZGVmIEVOQUJMRV9QT0lTT05fU1lTVEVNX0RJUkVDVE9SSUVTCisrICBpZiAoZmxhZ19wb2lzb25fc3lzdGVtX2RpcmVjdG9yaWVzKQorKyAgICB7CisrICAgICAgIHN0cnVjdCBjcHBfZGlyICpwOworKworKyAgICAgICBmb3IgKHAgPSBoZWFkc1tRVU9URV07IHA7IHAgPSBwLT5uZXh0KQorKyAgICAgICAgIHsKKysgICAgICAgICAgaWYgKCghc3RybmNtcCAocC0+bmFtZSwgIi91c3IvaW5jbHVkZSIsIDEyKSkKKysgICAgICAgICAgICAgIHx8ICghc3RybmNtcCAocC0+bmFtZSwgIi91c3IvbG9jYWwvaW5jbHVkZSIsIDE4KSkKKysgICAgICAgICAgICAgIHx8ICghc3RybmNtcCAocC0+bmFtZSwgIi91c3IvWDExUjYvaW5jbHVkZSIsIDE4KSkpCisrICAgICAgICAgICAgd2FybmluZyAoT1BUX1dwb2lzb25fc3lzdGVtX2RpcmVjdG9yaWVzLAorKyAgICAgICAgICAgICAgICAgICAgICJpbmNsdWRlIGxvY2F0aW9uIFwiJXNcIiBpcyB1bnNhZmUgZm9yICIKKysgICAgICAgICAgICAgICAgICAgICAiY3Jvc3MtY29tcGlsYXRpb24iLAorKyAgICAgICAgICAgICAgICAgICAgIHAtPm5hbWUpOworKyAgICAgICAgIH0KKysgICAgfQorKyNlbmRpZgorIH0KKyAKKyAvKiBVc2UgZ2l2ZW4gLUkgcGF0aHMgZm9yICNpbmNsdWRlICIuLi4iIGJ1dCBub3QgI2luY2x1ZGUgPC4uLj4sIGFuZAorLS0gCisyLjguMgorCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNi4yLzAwMTEtZ2NjLXBvaXNvbi1kaXItZXh0ZW5kLnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTYuMi8wMDExLWdjYy1wb2lzb24tZGlyLWV4dGVuZC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMTczNmFlCi0tLSAvZGV2L251bGwKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTYuMi8wMDExLWdjYy1wb2lzb24tZGlyLWV4dGVuZC5wYXRjaApAQCAtMCwwICsxLDM5IEBACitGcm9tIGExYzI0YjU5ZGVmMzkzZTQzY2Q1MGI2NzY4NjA0YTIxMmM3ODhlZDMgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorRGF0ZTogRnJpLCAyOSBNYXIgMjAxMyAwOTowMDozNCArMDQwMAorU3ViamVjdDogW1BBVENIIDExLzQ2XSBnY2MtcG9pc29uLWRpci1leHRlbmQKKworQWRkIC9zdy9pbmNsdWRlIGFuZCAvb3B0L2luY2x1ZGUgYmFzZWQgb24gdGhlIG9yaWdpbmFsCit6ZWNrZS1uby1ob3N0LWluY2x1ZGVzLnBhdGNoIHBhdGNoLiAgVGhlIG9yaWdpbmFsIHBhdGNoIGNoZWNrZWQgZm9yCisvdXNyL2luY2x1ZGUsIC9zdy9pbmNsdWRlIGFuZCAvb3B0L2luY2x1ZGUgYW5kIHRoZW4gdHJpZ2dlcmVkIGEgZmFpbHVyZSBhbmQKK2Fib3J0ZWQuCisKK0luc3RlYWQsIHdlIGFkZCB0aGUgdHdvIG1pc3NpbmcgaXRlbXMgdG8gdGhlIGN1cnJlbnQgc2Nhbi4gIElmIHRoZSB1c2VyCit3YW50cyB0aGlzIHRvIGJlIGEgZmFpbHVyZSwgdGhleSBjYW4gYWRkICItV2Vycm9yPXBvaXNvbi1zeXN0ZW0tZGlyZWN0b3JpZXMiLgorCitTaWduZWQtb2ZmLWJ5OiBNYXJrIEhhdGxlIDxtYXJrLmhhdGxlQHdpbmRyaXZlci5jb20+CitTaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKy0tLQorIGdjYy9pbmNwYXRoLmMgfCA0ICsrKy0KKyAxIGZpbGUgY2hhbmdlZCwgMyBpbnNlcnRpb25zKCspLCAxIGRlbGV0aW9uKC0pCisKK2RpZmYgLS1naXQgYS9nY2MvaW5jcGF0aC5jIGIvZ2NjL2luY3BhdGguYworaW5kZXggODU2ZGE0MS4uZDJmYzgyYyAxMDA2NDQKKy0tLSBhL2djYy9pbmNwYXRoLmMKKysrKyBiL2djYy9pbmNwYXRoLmMKK0BAIC0zOTIsNyArMzkyLDkgQEAgbWVyZ2VfaW5jbHVkZV9jaGFpbnMgKGNvbnN0IGNoYXIgKnN5c3Jvb3QsIGNwcF9yZWFkZXIgKnBmaWxlLCBpbnQgdmVyYm9zZSkKKyAgICAgICAgICB7CisgICAgICAgICAgIGlmICgoIXN0cm5jbXAgKHAtPm5hbWUsICIvdXNyL2luY2x1ZGUiLCAxMikpCisgICAgICAgICAgICAgICB8fCAoIXN0cm5jbXAgKHAtPm5hbWUsICIvdXNyL2xvY2FsL2luY2x1ZGUiLCAxOCkpCistICAgICAgICAgICAgICB8fCAoIXN0cm5jbXAgKHAtPm5hbWUsICIvdXNyL1gxMVI2L2luY2x1ZGUiLCAxOCkpKQorKyAgICAgICAgICAgICAgfHwgKCFzdHJuY21wIChwLT5uYW1lLCAiL3Vzci9YMTFSNi9pbmNsdWRlIiwgMTgpKQorKyAgICAgICAgICAgICAgfHwgKCFzdHJuY21wIChwLT5uYW1lLCAiL3N3L2luY2x1ZGUiLCAxMSkpCisrICAgICAgICAgICAgICB8fCAoIXN0cm5jbXAgKHAtPm5hbWUsICIvb3B0L2luY2x1ZGUiLCAxMikpKQorICAgICAgICAgICAgIHdhcm5pbmcgKE9QVF9XcG9pc29uX3N5c3RlbV9kaXJlY3RvcmllcywKKyAgICAgICAgICAgICAgICAgICAgICAiaW5jbHVkZSBsb2NhdGlvbiBcIiVzXCIgaXMgdW5zYWZlIGZvciAiCisgICAgICAgICAgICAgICAgICAgICAgImNyb3NzLWNvbXBpbGF0aW9uIiwKKy0tIAorMi44LjIKKwpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTYuMi8wMDEyLWdjYy00LjMuMy1TWVNST09UX0NGTEFHU19GT1JfVEFSR0VULnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTYuMi8wMDEyLWdjYy00LjMuMy1TWVNST09UX0NGTEFHU19GT1JfVEFSR0VULnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkzOWIwNzAKLS0tIC9kZXYvbnVsbAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNi4yLzAwMTItZ2NjLTQuMy4zLVNZU1JPT1RfQ0ZMQUdTX0ZPUl9UQVJHRVQucGF0Y2gKQEAgLTAsMCArMSw3MyBAQAorRnJvbSAwMGVmNWYwZjJhOGQzYjMzYWViMWU1NWMwZDIzNDM5ZjRkZDQ5NWFmIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KK0RhdGU6IEZyaSwgMjkgTWFyIDIwMTMgMDk6MDg6MzEgKzA0MDAKK1N1YmplY3Q6IFtQQVRDSCAxMi80Nl0gZ2NjLTQuMy4zOiBTWVNST09UX0NGTEFHU19GT1JfVEFSR0VUCisKK0JlZm9yZSBjb21taXR0aW5nLCBJIG5vdGljZWQgdGhhdCBQUi8zMjE2MSB3YXMgbWFya2VkIGFzIGEgZHVwIG9mIFBSLzMyMDA5LCBidXQgbXkgcHJldmlvdXMgcGF0Y2ggZGlkIG5vdCBmaXggaXQuCisKK1RoaXMgYWx0ZXJuYXRpdmUgcGF0Y2ggaXMgYmV0dGVyIGJlY2F1c2UgaXQgbGV0cyB5b3UganVzdCB1c2UgQ0ZMQUdTX0ZPUl9UQVJHRVQgdG8gc2V0IHRoZSBjb21waWxhdGlvbiBmbGFncyBmb3IgbGliZ2NjLiBTaW5jZSBib290c3RyYXBwZWQgdGFyZ2V0IGxpYnJhcmllcyBhcmUgbmV2ZXIgY29tcGlsZWQgd2l0aCB0aGUgbmF0aXZlIGNvbXBpbGVyLCBpdCBtYWtlcyBsaXR0bGUgc2Vuc2UgdG8gdXNlIGRpZmZlcmVudCBmbGFncyBmb3Igc3RhZ2UxIGFuZCBsYXRlciBzdGFnZXMuIEFuZCBpdCBhbHNvIG1ha2VzIGxpdHRsZSBzZW5zZSB0byB1c2UgYSBkaWZmZXJlbnQgdmFyaWFibGUgdGhhbiBDRkxBR1NfRk9SX1RBUkdFVC4KKworT3RoZXIgY2hhbmdlcyBJIGhhZCB0byBkbyBpbmNsdWRlOgorCistIG1vdmluZyB0aGUgY3JlYXRpb24gb2YgZGVmYXVsdCBDRkxBR1NfRk9SX1RBUkdFVCBmcm9tIE1ha2VmaWxlLmFtIHRvIGNvbmZpZ3VyZS5hYywgYmVjYXVzZSBvdGhlcndpc2UgdGhlIEJPT1RfQ0ZMQUdTIGFyZSBzdWJzdGl0dXRlZCBpbnRvIENGTEFHU19GT1JfVEFSR0VUICh3aGljaCBpcyAiLU8yIC1nICQoQ0ZMQUdTKSIpIHZpYSAkKENGTEFHUykuIEl0IGlzIGFsc28gY2xlYW5lciB0aGlzIHdheSB0aG91Z2guCisKKy0gcGFzc2luZyB0aGUgcmlnaHQgQ0ZMQUdTIHRvIGNvbmZpZ3VyZSBzY3JpcHRzIGFzIGV4cG9ydGVkIGVudmlyb25tZW50IHZhcmlhYmxlcworCitJIGFsc28gc3RvcHBlZCBwYXNzaW5nIExJQkNGTEFHUyB0byBjb25maWd1cmUgc2NyaXB0cyBzaW5jZSB0aGV5IGFyZSB1bnVzZWQgaW4gdGhlIHdob2xlIHNyYyB0cmVlLiBBbmQgSSB1cGRhdGVkIHRoZSBkb2N1bWVudGF0aW9uIGFzIEgtUCByZW1pbmRlZCBtZSB0byBkby4KKworQm9vdHN0cmFwcGVkL3JlZ3Rlc3RlZCBpNjg2LXBjLWxpbnV4LWdudSwgd2lsbCBjb21taXQgdG8gNC40IHNob3J0bHkuIE9rIGZvciA0LjM/CisKK1NpZ25lZC1vZmYtYnk6IFBhb2xvIEJvbnppbmkgIDxib256aW5pQGdudS5vcmc+CitTaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKy0tLQorIGNvbmZpZ3VyZSB8IDMyICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrCisgMSBmaWxlIGNoYW5nZWQsIDMyIGluc2VydGlvbnMoKykKKworZGlmZiAtLWdpdCBhL2NvbmZpZ3VyZSBiL2NvbmZpZ3VyZQoraW5kZXggYmZhZGMzMy4uNzU1ZDM4MiAxMDA3NTUKKy0tLSBhL2NvbmZpZ3VyZQorKysrIGIvY29uZmlndXJlCitAQCAtNjgxOSw2ICs2ODE5LDM4IEBAIGZpCisgCisgCisgCisrIyBEdXJpbmcgZ2NjIGJvb3RzdHJhcCwgaWYgd2UgdXNlIHNvbWUgcmFuZG9tIGNjIGZvciBzdGFnZTEgdGhlbiBDRkxBR1MKKysjIG1pZ2h0IGJlIGVtcHR5IG9yICItZyIuICBXZSBkb24ndCByZXF1aXJlIGEgQysrIGNvbXBpbGVyLCBzbyBDWFhGTEFHUworKyMgbWlnaHQgYWxzbyBiZSBlbXB0eSAob3IgIi1nIiwgaWYgYSBub24tR0NDIEMrKyBjb21waWxlciBpcyBpbiB0aGUgcGF0aCkuCisrIyBXZSB3YW50IHRvIGVuc3VyZSB0aGF0IFRBUkdFVCBsaWJyYXJpZXMgKHdoaWNoIHdlIGtub3cgYXJlIGJ1aWx0IHdpdGgKKysjIGdjYykgYXJlIGJ1aWx0IHdpdGggIi1PMiAtZyIsIHNvIGluY2x1ZGUgdGhvc2Ugb3B0aW9ucyB3aGVuIHNldHRpbmcKKysjIENGTEFHU19GT1JfVEFSR0VUIGFuZCBDWFhGTEFHU19GT1JfVEFSR0VULgorK2lmIHRlc3QgIngkQ0ZMQUdTX0ZPUl9UQVJHRVQiID0geDsgdGhlbgorKyAgQ0ZMQUdTX0ZPUl9UQVJHRVQ9JENGTEFHUworKyAgY2FzZSAiICRDRkxBR1MgIiBpbgorKyAgICAqIiAtTzIgIiopIDs7CisrICAgICopIENGTEFHU19GT1JfVEFSR0VUPSItTzIgJENGTEFHUyIgOzsKKysgIGVzYWMKKysgIGNhc2UgIiAkQ0ZMQUdTICIgaW4KKysgICAgKiIgLWcgIiogfCAqIiAtZzMgIiopIDs7CisrICAgICopIENGTEFHU19GT1JfVEFSR0VUPSItZyAkQ0ZMQUdTIiA7OworKyAgZXNhYworK2ZpCisrCisrCisraWYgdGVzdCAieCRDWFhGTEFHU19GT1JfVEFSR0VUIiA9IHg7IHRoZW4KKysgIENYWEZMQUdTX0ZPUl9UQVJHRVQ9JENYWEZMQUdTCisrICBjYXNlICIgJENYWEZMQUdTICIgaW4KKysgICAgKiIgLU8yICIqKSA7OworKyAgICAqKSBDWFhGTEFHU19GT1JfVEFSR0VUPSItTzIgJENYWEZMQUdTIiA7OworKyAgZXNhYworKyAgY2FzZSAiICRDWFhGTEFHUyAiIGluCisrICAgICoiIC1nICIqIHwgKiIgLWczICIqKSA7OworKyAgICAqKSBDWFhGTEFHU19GT1JfVEFSR0VUPSItZyAkQ1hYRkxBR1MiIDs7CisrICBlc2FjCisrZmkKKysKKysKKyAjIEhhbmRsZSAtLXdpdGgtaGVhZGVycz1YWFguICBJZiB0aGUgdmFsdWUgaXMgbm90ICJ5ZXMiLCB0aGUgY29udGVudHMgb2YKKyAjIHRoZSBuYW1lZCBkaXJlY3RvcnkgYXJlIGNvcGllZCB0byAkKHRvb2xkaXIpL3N5cy1pbmNsdWRlLgorIGlmIHRlc3QgeCIke3dpdGhfaGVhZGVyc30iICE9IHggJiYgdGVzdCB4IiR7d2l0aF9oZWFkZXJzfSIgIT0geG5vIDsgdGhlbgorLS0gCisyLjguMgorCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNi4yLzAwMTMtNjQtYml0LW11bHRpbGliLWhhY2sucGF0Y2ggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNi4yLzAwMTMtNjQtYml0LW11bHRpbGliLWhhY2sucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTMxY2RlNAotLS0gL2Rldi9udWxsCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy02LjIvMDAxMy02NC1iaXQtbXVsdGlsaWItaGFjay5wYXRjaApAQCAtMCwwICsxLDg1IEBACitGcm9tIDdmYzdhMDcwYWM1M2E1NTk1MGExZWFjNzZmMDI4NzdkNDEwNmI0YjMgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorRGF0ZTogRnJpLCAyOSBNYXIgMjAxMyAwOToxMDowNiArMDQwMAorU3ViamVjdDogW1BBVENIIDEzLzQ2XSA2NC1iaXQgbXVsdGlsaWIgaGFjay4KKworR0NDIGhhcyBpbnRlcm5hbCBtdWx0aWxpYiBoYW5kbGluZyBjb2RlIGJ1dCBpdCBhc3N1bWVzIGEgdmVyeSBzcGVjaWZpYyByaWdpZCBkaXJlY3RvcnkKK2xheW91dC4gVGhlIGJ1aWxkIHN5c3RlbSBpbXBsZW1lbnRhdGlvbiBvZiBtdWx0aWxpYiBsYXlvdXQgaXMgdmVyeSBnZW5lcmljIGFuZCBhbGxvd3MKK2NvbXBsZXRlIGN1c3RvbWlzYXRpb24gb2YgdGhlIGxpYnJhcnkgZGlyZWN0b3JpZXMuCisKK1RoaXMgcGF0Y2ggaXMgYSBwYXJ0aWFsIHNvbHV0aW9uIHRvIGFsbG93IGFueSBjdXN0b20gZGlyZWN0b3JpZXMgdG8gYmUgcGFzc2VkIGludG8gZ2NjCithbmQgaGFuZGxlZCBjb3JyZWN0bHkuIEl0IGZvcmNlcyBnY2MgdG8gdXNlIHRoZSBiYXNlX2xpYmRpciAod2hpY2ggaXMgdGhlIGN1cnJlbnQKK2RpcmVjdG9yeSwgIi4iKS4gV2UgbmVlZCB0byBkbyB0aGlzIGZvciBlYWNoIG11bHRpbGliIHRoYXQgaXMgY29uZmlndXJlZCBhcyB3ZSBkb24ndAora25vdyB3aGljaCBjb21waWxlciBvcHRpb25zIG1heSBiZSBiZWluZyBwYXNzZWQgaW50byB0aGUgY29tcGlsZXIuIFNpbmNlIHdlIGhhdmUgYSBjb21waWxlcgorcGVyIG11bGl0bGliIGF0IHRoaXMgcG9pbnQgdGhhdCBpc24ndCBhbiBpc3N1ZS4KKworVGhlIG9uZSBwcm9ibGVtIGlzIHRoZSB0YXJnZXQgY29tcGlsZXIgaXMgb25seSBnb2luZyB0byB3b3JrIGZvciB0aGUgZGVmYXVsdCBtdWx0bGlsaWIgYXQKK3RoaXMgcG9pbnQuIElkZWFsbHkgd2UnZCBmaWd1cmUgb3V0IHdoaWNoIG11bHRpbGlicyB3ZXJlIGJlaW5nIGVuYWJsZWQgd2l0aCB3aGljaCBwYXRocworYW5kIGJlIGFibGUgdG8gcGF0Y2ggdGhlc2UgZW50cmllcyB3aXRoIGEgY29tcGxldGUgc2V0IG9mIGNvcnJlY3QgcGF0aHMgYnV0IHRoaXMgd2UKK2Rvbid0IGhhdmUgc3VjaCBjb2RlIGF0IHRoaXMgcG9pbnQuIFRoaXMgaXMgc29tZXRoaW5nIHRoZSB0YXJnZXQgZ2NjIHJlY2lwZSBzaG91bGQgZG8KK2FuZCBvdmVycmlkZSB0aGVzZSBwbGF0Zm9ybSBkZWZhdWx0cyBpbiBpdHMgYnVpbGQgY29uZmlnLgorCitSUCAxNS84LzExCisKK1NpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CitTaWduZWQtb2ZmLWJ5OiBFbHZpcyBEb3dzb24gPGVsdmlzLmRvd3NvbkBnbWFpbC5jb20+CisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworLS0tCisgZ2NjL2NvbmZpZy9pMzg2L3QtbGludXg2NCAgIHwgIDYgKystLS0tCisgZ2NjL2NvbmZpZy9taXBzL3QtbGludXg2NCAgIHwgMTAgKysrLS0tLS0tLQorIGdjYy9jb25maWcvcnM2MDAwL3QtbGludXg2NCB8ICA1ICsrLS0tCisgMyBmaWxlcyBjaGFuZ2VkLCA3IGluc2VydGlvbnMoKyksIDE0IGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvZ2NjL2NvbmZpZy9pMzg2L3QtbGludXg2NCBiL2djYy9jb25maWcvaTM4Ni90LWxpbnV4NjQKK2luZGV4IGMwY2M4YTMuLjM2NWE1ZDYgMTAwNjQ0CistLS0gYS9nY2MvY29uZmlnL2kzODYvdC1saW51eDY0CisrKysgYi9nY2MvY29uZmlnL2kzODYvdC1saW51eDY0CitAQCAtMzIsNyArMzIsNSBAQAorICMKKyBjb21tYT0sCisgTVVMVElMSUJfT1BUSU9OUyAgICA9ICQoc3Vic3QgJChjb21tYSksLywkKFRNX01VTFRJTElCX0NPTkZJRykpCistTVVMVElMSUJfRElSTkFNRVMgICA9ICQocGF0c3Vic3QgbSUsICUsICQoc3Vic3QgLywgLCQoTVVMVElMSUJfT1BUSU9OUykpKQorLU1VTFRJTElCX09TRElSTkFNRVMgPSBtNjQ9Li4vbGliNjQkKGNhbGwgaWZfbXVsdGlhcmNoLDp4ODZfNjQtbGludXgtZ251KQorLU1VTFRJTElCX09TRElSTkFNRVMrPSBtMzI9JChpZiAkKHdpbGRjYXJkICQoc2hlbGwgZWNobyAkKFNZU1RFTV9IRUFERVJfRElSKSkvLi4vLi4vdXNyL2xpYjMyKSwuLi9saWIzMiwuLi9saWIpJChjYWxsIGlmX211bHRpYXJjaCw6aTM4Ni1saW51eC1nbnUpCistTVVMVElMSUJfT1NESVJOQU1FUys9IG14MzI9Li4vbGlieDMyJChjYWxsIGlmX211bHRpYXJjaCw6eDg2XzY0LWxpbnV4LWdudXgzMikKKytNVUxUSUxJQl9ESVJOQU1FUyA9IC4gLgorK01VTFRJTElCX09TRElSTkFNRVMgPSAuLi8kKHNoZWxsIGJhc2VuYW1lICQoYmFzZV9saWJkaXIpKSAuLi8kKHNoZWxsIGJhc2VuYW1lICQoYmFzZV9saWJkaXIpKQorZGlmZiAtLWdpdCBhL2djYy9jb25maWcvbWlwcy90LWxpbnV4NjQgYi9nY2MvY29uZmlnL21pcHMvdC1saW51eDY0CitpbmRleCAxNmM4YWRmLi5iOTMyYWNlIDEwMDY0NAorLS0tIGEvZ2NjL2NvbmZpZy9taXBzL3QtbGludXg2NAorKysrIGIvZ2NjL2NvbmZpZy9taXBzL3QtbGludXg2NAorQEAgLTE3LDEwICsxNyw2IEBACisgIyA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisgCisgTVVMVElMSUJfT1BUSU9OUyA9IG1hYmk9bjMyL21hYmk9MzIvbWFiaT02NAorLU1VTFRJTElCX0RJUk5BTUVTID0gbjMyIDMyIDY0CistTUlQU19FTCA9ICQoaWYgJChmaWx0ZXIgJWVsLCAkKGZpcnN0d29yZCAkKHN1YnN0IC0sICwkKHRhcmdldCkpKSksZWwpCistTUlQU19TT0ZUID0gJChpZiAkKHN0cmlwICQoZmlsdGVyIE1BU0tfU09GVF9GTE9BVF9BQkksICQodGFyZ2V0X2NwdV9kZWZhdWx0KSkgJChmaWx0ZXIgc29mdCwgJCh3aXRoX2Zsb2F0KSkpLHNvZnQpCistTVVMVElMSUJfT1NESVJOQU1FUyA9IFwKKy0JLi4vbGliMzIkKGNhbGwgaWZfbXVsdGlhcmNoLDptaXBzNjQkKE1JUFNfRUwpLWxpbnV4LWdudWFiaW4zMiQoTUlQU19TT0ZUKSkgXAorLQkuLi9saWIkKGNhbGwgaWZfbXVsdGlhcmNoLDptaXBzJChNSVBTX0VMKS1saW51eC1nbnUkKE1JUFNfU09GVCkpIFwKKy0JLi4vbGliNjQkKGNhbGwgaWZfbXVsdGlhcmNoLDptaXBzNjQkKE1JUFNfRUwpLWxpbnV4LWdudWFiaTY0JChNSVBTX1NPRlQpKQorK01VTFRJTElCX0RJUk5BTUVTID0gLiAuIC4KKytNVUxUSUxJQl9PU0RJUk5BTUVTID0gLi4vJChzaGVsbCBiYXNlbmFtZSAkKGJhc2VfbGliZGlyKSkgLi4vJChzaGVsbCBiYXNlbmFtZSAkKGJhc2VfbGliZGlyKSkgLi4vJChzaGVsbCBiYXNlbmFtZSAkKGJhc2VfbGliZGlyKSkKKysKK2RpZmYgLS1naXQgYS9nY2MvY29uZmlnL3JzNjAwMC90LWxpbnV4NjQgYi9nY2MvY29uZmlnL3JzNjAwMC90LWxpbnV4NjQKK2luZGV4IGZhNzU1MGIuLjliNWQ5ZWYgMTAwNjQ0CistLS0gYS9nY2MvY29uZmlnL3JzNjAwMC90LWxpbnV4NjQKKysrKyBiL2djYy9jb25maWcvcnM2MDAwL3QtbGludXg2NAorQEAgLTI2LDEwICsyNiw5IEBACisgIyBNVUxUSUxJQl9PU0RJUk5BTUVTIGFjY29yZGluZyB0byB3aGF0IGlzIGZvdW5kIG9uIHRoZSB0YXJnZXQuCisgCisgTVVMVElMSUJfT1BUSU9OUyAgICA6PSBtNjQvbTMyCistTVVMVElMSUJfRElSTkFNRVMgICA6PSA2NCAzMgorK01VTFRJTElCX0RJUk5BTUVTICAgOj0gLiAuCisgTVVMVElMSUJfRVhUUkFfT1BUUyA6PSAKKy1NVUxUSUxJQl9PU0RJUk5BTUVTIDo9IG02ND0uLi9saWI2NCQoY2FsbCBpZl9tdWx0aWFyY2gsOnBvd2VycGM2NC1saW51eC1nbnUpCistTVVMVElMSUJfT1NESVJOQU1FUyArPSBtMzI9JChpZiAkKHdpbGRjYXJkICQoc2hlbGwgZWNobyAkKFNZU1RFTV9IRUFERVJfRElSKSkvLi4vLi4vdXNyL2xpYjMyKSwuLi9saWIzMiwuLi9saWIpJChjYWxsIGlmX211bHRpYXJjaCw6cG93ZXJwYy1saW51eC1nbnUpCisrTVVMVElMSUJfT1NESVJOQU1FUyA6PSAuLi8kKHNoZWxsIGJhc2VuYW1lICQoYmFzZV9saWJkaXIpKSAuLi8kKHNoZWxsIGJhc2VuYW1lICQoYmFzZV9saWJkaXIpKQorIAorIHJzNjAwMC1saW51eC5vOiAkKHNyY2RpcikvY29uZmlnL3JzNjAwMC9yczYwMDAtbGludXguYworIAkkKENPTVBJTEUpICQ8CistLSAKKzIuOC4yCisKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy02LjIvMDAxNC1vcHRpb25hbC1saWJzdGRjLnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTYuMi8wMDE0LW9wdGlvbmFsLWxpYnN0ZGMucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDRiMGNjNwotLS0gL2Rldi9udWxsCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy02LjIvMDAxNC1vcHRpb25hbC1saWJzdGRjLnBhdGNoCkBAIC0wLDAgKzEsMTI1IEBACitGcm9tIDM2Mjc1Zjc5ODFiZGFmOTE5YmJjOWI1MWE3YzdmYWUxZTE5MmFkYjMgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorRGF0ZTogRnJpLCAyOSBNYXIgMjAxMyAwOToxMjo1NiArMDQwMAorU3ViamVjdDogW1BBVENIIDE0LzQ2XSBvcHRpb25hbCBsaWJzdGRjCisKK2djYy1ydW50aW1lIGJ1aWxkcyBsaWJzdGRjKysgc2VwYXJhdGVseSBmcm9tIGdjYy1jcm9zcy0qLiBJdHMgY29uZmlndXJlIHRlc3RzIHVzaW5nIGcrKword2lsbCBub3QgcnVuIGNvcnJlY3RseSBzaW5jZSBieSBkZWZhdWx0IHRoZSBsaW5rZXIgd2lsbCB0cnkgdG8gbGluayBhZ2FpbnN0IGxpYnN0ZGMrKword2hpY2ggc2hvdWxkbid0IGV4aXN0IHlldC4gV2UgbmVlZCBhbiBvcHRpb24gdG8gZGlzYWJsZSAtbHN0ZGMrKworb3B0aW9uIHdoaWxzdCBsZWF2aW5nIC1sYywgLWxnY2MgYW5kIG90aGVyIGF1dG9tYXRpYyBsaWJyYXJ5IGRlcGVuZGVuY2llcyBhZGRlZCBieSBnY2MKK2RyaXZlci4gVGhpcyBwYXRjaCBhZGRzIHN1Y2ggYW4gb3B0aW9uIHdoaWNoIG9ubHkgZGlzYWJsZXMgdGhlIC1sc3RkYysrLgorCitBICJzdGFuZGFyZCIgZ2NjIGJ1aWxkIHVzZXMgeGdjYyBhbmQgaGVuY2UgYXZvaWRzIHRoaXMuIFdlIHNob3VsZCBhc2sgdXBzdHJlYW0gaG93IHRvCitkbyB0aGlzIG9mZmljaWFsbHksIHRoZSBsaWtlbHkgYW5zd2VyIGlzIGRvbid0IGJ1aWxkIGxpYnN0ZGMrKyBzZXBhcmF0ZWx5LgorCitSUCAyOS82LzEwCisKK1NpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CisKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbZW1iZWRkZWQgc3BlY2lmaWNdCistLS0KKyBnY2MvYy1mYW1pbHkvYy5vcHQgIHwgIDQgKysrKworIGdjYy9jcC9nKytzcGVjLmMgICAgfCAgMSArCisgZ2NjL2RvYy9pbnZva2UudGV4aSB8IDMyICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKystCisgZ2NjL2djYy5jICAgICAgICAgICB8ICAxICsKKyA0IGZpbGVzIGNoYW5nZWQsIDM3IGluc2VydGlvbnMoKyksIDEgZGVsZXRpb24oLSkKKworZGlmZiAtLWdpdCBhL2djYy9jLWZhbWlseS9jLm9wdCBiL2djYy9jLWZhbWlseS9jLm9wdAoraW5kZXggNGY4Njg3Ni4uNjYwZGE2YyAxMDA2NDQKKy0tLSBhL2djYy9jLWZhbWlseS9jLm9wdAorKysrIGIvZ2NjL2MtZmFtaWx5L2Mub3B0CitAQCAtMTY0Nyw2ICsxNjQ3LDEwIEBAIG5vc3RkaW5jKysKKyBDKysgT2JqQysrCisgRG8gbm90IHNlYXJjaCBzdGFuZGFyZCBzeXN0ZW0gaW5jbHVkZSBkaXJlY3RvcmllcyBmb3IgQysrLgorIAorK25vc3RkbGliKysKKytEcml2ZXIKKytEbyBub3QgbGluayBzdGFuZGFyZCBDKysgcnVudGltZSBsaWJyYXJ5CisrCisgbworIEMgT2JqQyBDKysgT2JqQysrIEpvaW5lZCBTZXBhcmF0ZQorIDsgRG9jdW1lbnRlZCBpbiBjb21tb24ub3B0CitkaWZmIC0tZ2l0IGEvZ2NjL2NwL2crK3NwZWMuYyBiL2djYy9jcC9nKytzcGVjLmMKK2luZGV4IDAzY2JkZTAuLjM2NDI1NDAgMTAwNjQ0CistLS0gYS9nY2MvY3AvZysrc3BlYy5jCisrKysgYi9nY2MvY3AvZysrc3BlYy5jCitAQCAtMTM3LDYgKzEzNyw3IEBAIGxhbmdfc3BlY2lmaWNfZHJpdmVyIChzdHJ1Y3QgY2xfZGVjb2RlZF9vcHRpb24gKippbl9kZWNvZGVkX29wdGlvbnMsCisgICAgICAgc3dpdGNoIChkZWNvZGVkX29wdGlvbnNbaV0ub3B0X2luZGV4KQorIAl7CisgCWNhc2UgT1BUX25vc3RkbGliOgorKwljYXNlIE9QVF9ub3N0ZGxpYl9fOgorIAljYXNlIE9QVF9ub2RlZmF1bHRsaWJzOgorIAkgIGxpYnJhcnkgPSAtMTsKKyAJICBicmVhazsKK2RpZmYgLS1naXQgYS9nY2MvZG9jL2ludm9rZS50ZXhpIGIvZ2NjL2RvYy9pbnZva2UudGV4aQoraW5kZXggOGJiNDllNy4uODRkNjhhYSAxMDA2NDQKKy0tLSBhL2djYy9kb2MvaW52b2tlLnRleGkKKysrKyBiL2djYy9kb2MvaW52b2tlLnRleGkKK0BAIC0yMDcsNiArMjA3LDkgQEAgaW4gdGhlIGZvbGxvd2luZyBzZWN0aW9ucy4KKyAtZm5vLXdlYWsgIC1ub3N0ZGluYysrIEBnb2wKKyAtZnZpc2liaWxpdHktaW5saW5lcy1oaWRkZW4gQGdvbAorIC1mdmlzaWJpbGl0eS1tcy1jb21wYXQgQGdvbAorKy1mdnRhYmxlLXZlcmlmeT1AcntbfXN0ZEBye3x9cHJlaW5pdEBye3x9bm9uZUBye119IEBnb2wKKystZnZ0di1jb3VudHMgLWZ2dHYtZGVidWcgQGdvbAorKy1ub3N0ZGxpYisrIEBnb2wKKyAtZmV4dC1udW1lcmljLWxpdGVyYWxzIEBnb2wKKyAtV2FiaT1AdmFye259ICAtV2FiaS10YWcgIC1XY29udmVyc2lvbi1udWxsICAtV2N0b3ItZHRvci1wcml2YWN5IEBnb2wKKyAtV2RlbGV0ZS1ub24tdmlydHVhbC1kdG9yIC1XbGl0ZXJhbC1zdWZmaXggLVdtdWx0aXBsZS1pbmhlcml0YW5jZSBAZ29sCitAQCAtNDcwLDcgKzQ3Myw3IEBAIE9iamVjdGl2ZS1DIGFuZCBPYmplY3RpdmUtQysrIERpYWxlY3RzfS4KKyAtcyAgLXN0YXRpYyAtc3RhdGljLWxpYmdjYyAtc3RhdGljLWxpYnN0ZGMrKyBAZ29sCisgLXN0YXRpYy1saWJhc2FuIC1zdGF0aWMtbGlidHNhbiAtc3RhdGljLWxpYmxzYW4gLXN0YXRpYy1saWJ1YnNhbiBAZ29sCisgLXN0YXRpYy1saWJtcHggLXN0YXRpYy1saWJtcHh3cmFwcGVycyBAZ29sCistLXNoYXJlZCAtc2hhcmVkLWxpYmdjYyAgLXN5bWJvbGljIEBnb2wKKystc2hhcmVkIC1zaGFyZWQtbGliZ2NjICAtc3ltYm9saWMgLW5vc3RkbGliKysgQGdvbAorIC1UIEB2YXJ7c2NyaXB0fSAgLVdsLEB2YXJ7b3B0aW9ufSAgLVhsaW5rZXIgQHZhcntvcHRpb259IEBnb2wKKyAtdSBAdmFye3N5bWJvbH0gLXogQHZhcntrZXl3b3JkfX0KKyAKK0BAIC0xMDYwMSw2ICsxMDYwNCwzMyBAQCBsaWJyYXJ5IHN1YnJvdXRpbmVzLgorIGNvbnN0cnVjdG9ycyBhcmUgY2FsbGVkOyBAcHhyZWZ7Q29sbGVjdDIsLEBjb2Rle2NvbGxlY3QyfSwgZ2NjaW50LAorIEdOVSBDb21waWxlciBDb2xsZWN0aW9uIChHQ0MpIEludGVybmFsc30uKQorIAorK0BpdGVtIC1ub3N0ZGxpYisrCisrQG9waW5kZXggbm9zdGRsaWIrKworK0RvIG5vdCB1c2UgdGhlIHN0YW5kYXJkIHN5c3RlbSBDKysgcnVudGltZSBsaWJyYXJpZXMgd2hlbiBsaW5raW5nLgorK09ubHkgdGhlIGxpYnJhcmllcyB5b3Ugc3BlY2lmeSB3aWxsIGJlIHBhc3NlZCB0byB0aGUgbGlua2VyLgorKworK0BjaW5kZXggQG9wdGlvbnstbGdjY30sIHVzZSB3aXRoIEBvcHRpb257LW5vc3RkbGlifQorK0BjaW5kZXggQG9wdGlvbnstbm9zdGRsaWJ9IGFuZCB1bnJlc29sdmVkIHJlZmVyZW5jZXMKKytAY2luZGV4IHVucmVzb2x2ZWQgcmVmZXJlbmNlcyBhbmQgQG9wdGlvbnstbm9zdGRsaWJ9CisrQGNpbmRleCBAb3B0aW9uey1sZ2NjfSwgdXNlIHdpdGggQG9wdGlvbnstbm9kZWZhdWx0bGlic30KKytAY2luZGV4IEBvcHRpb257LW5vZGVmYXVsdGxpYnN9IGFuZCB1bnJlc29sdmVkIHJlZmVyZW5jZXMKKytAY2luZGV4IHVucmVzb2x2ZWQgcmVmZXJlbmNlcyBhbmQgQG9wdGlvbnstbm9kZWZhdWx0bGlic30KKytPbmUgb2YgdGhlIHN0YW5kYXJkIGxpYnJhcmllcyBieXBhc3NlZCBieSBAb3B0aW9uey1ub3N0ZGxpYn0gYW5kCisrQG9wdGlvbnstbm9kZWZhdWx0bGlic30gaXMgQGZpbGV7bGliZ2NjLmF9LCBhIGxpYnJhcnkgb2YgaW50ZXJuYWwgc3Vicm91dGluZXMKKyt3aGljaCBHQ0MgdXNlcyB0byBvdmVyY29tZSBzaG9ydGNvbWluZ3Mgb2YgcGFydGljdWxhciBtYWNoaW5lcywgb3Igc3BlY2lhbAorK25lZWRzIGZvciBzb21lIGxhbmd1YWdlcy4KKysoQHhyZWZ7SW50ZXJmYWNlLCxJbnRlcmZhY2luZyB0byBHQ0MgT3V0cHV0LGdjY2ludCxHTlUgQ29tcGlsZXIKKytDb2xsZWN0aW9uIChHQ0MpIEludGVybmFsc30sCisrZm9yIG1vcmUgZGlzY3Vzc2lvbiBvZiBAZmlsZXtsaWJnY2MuYX0uKQorK0luIG1vc3QgY2FzZXMsIHlvdSBuZWVkIEBmaWxle2xpYmdjYy5hfSBldmVuIHdoZW4geW91IHdhbnQgdG8gYXZvaWQKKytvdGhlciBzdGFuZGFyZCBsaWJyYXJpZXMuICBJbiBvdGhlciB3b3Jkcywgd2hlbiB5b3Ugc3BlY2lmeSBAb3B0aW9uey1ub3N0ZGxpYn0KKytvciBAb3B0aW9uey1ub2RlZmF1bHRsaWJzfSB5b3Ugc2hvdWxkIHVzdWFsbHkgc3BlY2lmeSBAb3B0aW9uey1sZ2NjfSBhcyB3ZWxsLgorK1RoaXMgZW5zdXJlcyB0aGF0IHlvdSBoYXZlIG5vIHVucmVzb2x2ZWQgcmVmZXJlbmNlcyB0byBpbnRlcm5hbCBHQ0MKKytsaWJyYXJ5IHN1YnJvdXRpbmVzLgorKyhBbiBleGFtcGxlIG9mIHN1Y2ggYW4gaW50ZXJuYWwgc3Vicm91dGluZSBpcyBAY29kZXtfX21haW59LCB1c2VkIHRvIGVuc3VyZSBDKysKKytjb25zdHJ1Y3RvcnMgYXJlIGNhbGxlZDsgQHB4cmVme0NvbGxlY3QyLCxAY29kZXtjb2xsZWN0Mn0sIGdjY2ludCwKKytHTlUgQ29tcGlsZXIgQ29sbGVjdGlvbiAoR0NDKSBJbnRlcm5hbHN9LikKKysKKyBAaXRlbSAtcGllCisgQG9waW5kZXggcGllCisgUHJvZHVjZSBhIHBvc2l0aW9uIGluZGVwZW5kZW50IGV4ZWN1dGFibGUgb24gdGFyZ2V0cyB0aGF0IHN1cHBvcnQgaXQuCitkaWZmIC0tZ2l0IGEvZ2NjL2djYy5jIGIvZ2NjL2djYy5jCitpbmRleCA0Y2ZlZjdmLi5kYTBiNDgyIDEwMDY0NAorLS0tIGEvZ2NjL2djYy5jCisrKysgYi9nY2MvZ2NjLmMKK0BAIC0xMDI4LDYgKzEwMjgsNyBAQCBwcm9wZXIgcG9zaXRpb24gYW1vbmcgdGhlIG90aGVyIG91dHB1dCBmaWxlcy4gICovCisgICAgICUobWZsaWIpICIgU1RBQ0tfU1BMSVRfU1BFQyAiXAorICAgICAle2Zwcm9maWxlLWFyY3N8ZnByb2ZpbGUtZ2VuZXJhdGUqfGNvdmVyYWdlOi1sZ2Nvdn0gIiBTQU5JVElaRVJfU1BFQyAiIFwKKyAgICAgJXshbm9zdGRsaWI6JXshbm9kZWZhdWx0bGliczolKGxpbmtfc3NwKSAlKGxpbmtfZ2NjX2Nfc2VxdWVuY2UpfX1cCisrICAgICV7IW5vc3RkbGliKys6fVwKKyAgICAgJXshbm9zdGRsaWI6JXshbm9zdGFydGZpbGVzOiVFfX0gJXtUKn0gIFxuJShwb3N0X2xpbmspIH19fX19fSIKKyAjZW5kaWYKKyAKKy0tIAorMi44LjIKKwpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTYuMi8wMDE1LWdjYy1kaXNhYmxlLU1BU0tfUkVMQVhfUElDX0NBTExTLWJpdC5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy02LjIvMDAxNS1nY2MtZGlzYWJsZS1NQVNLX1JFTEFYX1BJQ19DQUxMUy1iaXQucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmZjNzM0NgotLS0gL2Rldi9udWxsCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy02LjIvMDAxNS1nY2MtZGlzYWJsZS1NQVNLX1JFTEFYX1BJQ19DQUxMUy1iaXQucGF0Y2gKQEAgLTAsMCArMSw1OSBAQAorRnJvbSA5MzQ2ZjYwNDJkOGY3Zjg1YTc1Y2EyYWYxNWYzYjhkMjM0OTg1MTY1IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KK0RhdGU6IEZyaSwgMjkgTWFyIDIwMTMgMDk6MTQ6MjAgKzA0MDAKK1N1YmplY3Q6IFtQQVRDSCAxNS80Nl0gZ2NjOiBkaXNhYmxlIE1BU0tfUkVMQVhfUElDX0NBTExTIGJpdAorCitUaGUgbmV3IGZlYXR1cmUgYWRkZWQgYWZ0ZXIgNC4zLjMKKyJodHRwOi8vd3d3LnB1YmJzLm5ldC8yMDA5MDkvZ2NjLzk0MDQ4LXBhdGNoLWFkZC1zdXBwb3J0LWZvci1ybWlwc2phbHIuaHRtbCIKK3dpbGwgY2F1c2UgY2MxcGx1cyBlYXQgdXAgYWxsIHRoZSBzeXN0ZW0gbWVtb3J5IHdoZW4gYnVpbGQgd2Via2l0LWd0ay4KK1RoZSBmdW5jdGlvbiBtaXBzX2dldF9waWNfY2FsbF9zeW1ib2wga2VlcHMgb24gcmVjdXJzaXZlbHkgY2FsbGluZyBpdHNlbGYuCitEaXNhYmxlIHRoaXMgZmVhdHVyZSB0byB3YWxrIGFzaWRlIHRoZSBidWcuCisKK1NpZ25lZC1vZmYtYnk6IERvbmd4aWFvIFh1IDxkb25neGlhby54dUBpbnRlbC5jb20+CitTaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorCitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW2NvbmZpZ3VyYXRpb25dCistLS0KKyBnY2MvY29uZmlndXJlICAgIHwgNyAtLS0tLS0tCisgZ2NjL2NvbmZpZ3VyZS5hYyB8IDcgLS0tLS0tLQorIDIgZmlsZXMgY2hhbmdlZCwgMTQgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9nY2MvY29uZmlndXJlIGIvZ2NjL2NvbmZpZ3VyZQoraW5kZXggOGY4MzE1Mi4uNWU3MmYxNyAxMDA3NTUKKy0tLSBhL2djYy9jb25maWd1cmUKKysrKyBiL2djYy9jb25maWd1cmUKK0BAIC0yNzAxOCwxMyArMjcwMTgsNiBAQCAkYXNfZWNob19uICJjaGVja2luZyBhc3NlbWJsZXIgYW5kIGxpbmtlciBmb3IgZXhwbGljaXQgSkFMUiByZWxvY2F0aW9uLi4uICIgPiY2OworICAgICAgICAgcm0gLWYgY29uZnRlc3QuKgorICAgICAgIGZpCisgICAgIGZpCistICAgIGlmIHRlc3QgJGdjY19jdl9hc19sZF9qYWxyX3JlbG9jID0geWVzOyB0aGVuCistICAgICAgaWYgdGVzdCB4JHRhcmdldF9jcHVfZGVmYXVsdCA9IHg7IHRoZW4KKy0gICAgICAgIHRhcmdldF9jcHVfZGVmYXVsdD1NQVNLX1JFTEFYX1BJQ19DQUxMUworLSAgICAgIGVsc2UKKy0gICAgICAgIHRhcmdldF9jcHVfZGVmYXVsdD0iKCR0YXJnZXRfY3B1X2RlZmF1bHQpfE1BU0tfUkVMQVhfUElDX0NBTExTIgorLSAgICAgIGZpCistICAgIGZpCisgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkZ2NjX2N2X2FzX2xkX2phbHJfcmVsb2MiID4mNQorICRhc19lY2hvICIkZ2NjX2N2X2FzX2xkX2phbHJfcmVsb2MiID4mNjsgfQorIAorZGlmZiAtLWdpdCBhL2djYy9jb25maWd1cmUuYWMgYi9nY2MvY29uZmlndXJlLmFjCitpbmRleCAwZmNjYWVmLi5kZDhmNmZhIDEwMDY0NAorLS0tIGEvZ2NjL2NvbmZpZ3VyZS5hYworKysrIGIvZ2NjL2NvbmZpZ3VyZS5hYworQEAgLTQ1MjIsMTMgKzQ1MjIsNiBAQCB4OgorICAgICAgICAgcm0gLWYgY29uZnRlc3QuKgorICAgICAgIGZpCisgICAgIGZpCistICAgIGlmIHRlc3QgJGdjY19jdl9hc19sZF9qYWxyX3JlbG9jID0geWVzOyB0aGVuCistICAgICAgaWYgdGVzdCB4JHRhcmdldF9jcHVfZGVmYXVsdCA9IHg7IHRoZW4KKy0gICAgICAgIHRhcmdldF9jcHVfZGVmYXVsdD1NQVNLX1JFTEFYX1BJQ19DQUxMUworLSAgICAgIGVsc2UKKy0gICAgICAgIHRhcmdldF9jcHVfZGVmYXVsdD0iKCR0YXJnZXRfY3B1X2RlZmF1bHQpfE1BU0tfUkVMQVhfUElDX0NBTExTIgorLSAgICAgIGZpCistICAgIGZpCisgICAgIEFDX01TR19SRVNVTFQoJGdjY19jdl9hc19sZF9qYWxyX3JlbG9jKQorIAorICAgICBBQ19DQUNIRV9DSEVDSyhbbGlua2VyIGZvciAuZWhfZnJhbWUgcGVyc29uYWxpdHkgcmVsYXhhdGlvbl0sCistLSAKKzIuOC4yCisKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy02LjIvMDAxNi1DT0xMRUNUX0dDQ19PUFRJT05TLnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTYuMi8wMDE2LUNPTExFQ1RfR0NDX09QVElPTlMucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzE1NDg2NAotLS0gL2Rldi9udWxsCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy02LjIvMDAxNi1DT0xMRUNUX0dDQ19PUFRJT05TLnBhdGNoCkBAIC0wLDAgKzEsMzggQEAKK0Zyb20gMTAzM2JjMmQ0ZWZjNWMzMDFiYjgyMmI2MDdhNjczZjViMTBjYzY5ZiBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CitEYXRlOiBGcmksIDI5IE1hciAyMDEzIDA5OjE2OjI4ICswNDAwCitTdWJqZWN0OiBbUEFUQ0ggMTYvNDZdIENPTExFQ1RfR0NDX09QVElPTlMKKworVGhpcyBwYXRjaCBhZGRzIC0tc3lzcm9vdCBpbnRvIENPTExFQ1RfR0NDX09QVElPTlMgd2hpY2ggaXMgdXNlZCB0bworaW52b2tlIGNvbGxlY3QyLgorCitTaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKy0tLQorIGdjYy9nY2MuYyB8IDkgKysrKysrKysrCisgMSBmaWxlIGNoYW5nZWQsIDkgaW5zZXJ0aW9ucygrKQorCitkaWZmIC0tZ2l0IGEvZ2NjL2djYy5jIGIvZ2NjL2djYy5jCitpbmRleCBkYTBiNDgyLi43Y2ExMjlmIDEwMDY0NAorLS0tIGEvZ2NjL2djYy5jCisrKysgYi9nY2MvZ2NjLmMKK0BAIC00NTkxLDYgKzQ1OTEsMTUgQEAgc2V0X2NvbGxlY3RfZ2NjX29wdGlvbnMgKHZvaWQpCisgCQlzaXplb2YgKCJDT0xMRUNUX0dDQ19PUFRJT05TPSIpIC0gMSk7CisgCisgICBmaXJzdF90aW1lID0gVFJVRTsKKysjaWZkZWYgSEFWRV9MRF9TWVNST09UCisrICBpZiAodGFyZ2V0X3N5c3RlbV9yb290X2NoYW5nZWQgJiYgdGFyZ2V0X3N5c3RlbV9yb290KQorKyAgICB7CisrICAgICAgb2JzdGFja19ncm93ICgmY29sbGVjdF9vYnN0YWNrLCAiJy0tc3lzcm9vdD0iLCBzaXplb2YoIictLXN5c3Jvb3Q9IiktMSk7CisrICAgICAgb2JzdGFja19ncm93ICgmY29sbGVjdF9vYnN0YWNrLCB0YXJnZXRfc3lzdGVtX3Jvb3Qsc3RybGVuKHRhcmdldF9zeXN0ZW1fcm9vdCkpOworKyAgICAgIG9ic3RhY2tfZ3JvdyAoJmNvbGxlY3Rfb2JzdGFjaywgIiciLCAxKTsKKysgICAgICBmaXJzdF90aW1lID0gRkFMU0U7CisrICAgIH0KKysjZW5kaWYKKyAgIGZvciAoaSA9IDA7IChpbnQpIGkgPCBuX3N3aXRjaGVzOyBpKyspCisgICAgIHsKKyAgICAgICBjb25zdCBjaGFyICpjb25zdCAqYXJnczsKKy0tIAorMi44LjIKKwpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTYuMi8wMDE3LVVzZS10aGUtZGVmYXVsdHMuaC1pbi1CLWluc3RlYWQtb2YtUy1hbmQtdC1vZS1pbi1CLnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTYuMi8wMDE3LVVzZS10aGUtZGVmYXVsdHMuaC1pbi1CLWluc3RlYWQtb2YtUy1hbmQtdC1vZS1pbi1CLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBkYmFiZDkKLS0tIC9kZXYvbnVsbAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNi4yLzAwMTctVXNlLXRoZS1kZWZhdWx0cy5oLWluLUItaW5zdGVhZC1vZi1TLWFuZC10LW9lLWluLUIucGF0Y2gKQEAgLTAsMCArMSw5NiBAQAorRnJvbSA2NzEyM2EzMDY4ODBhZjk5N2E5OWFlNTE0Njc3YzJkYTQ5NzNiZDFhIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KK0RhdGU6IEZyaSwgMjkgTWFyIDIwMTMgMDk6MTc6MjUgKzA0MDAKK1N1YmplY3Q6IFtQQVRDSCAxNy80Nl0gVXNlIHRoZSBkZWZhdWx0cy5oIGluICR7Qn0gaW5zdGVhZCBvZiAke1N9LCBhbmQgdC1vZSBpbgorICR7Qn0KKworVXNlIHRoZSBkZWZhdWx0cy5oIGluICR7Qn0gaW5zdGVhZCBvZiAke1N9LCBhbmQgdC1vZSBpbiAke0J9LCBzbyB0aGF0Cit0aGUgc291cmNlIGNhbiBiZSBzaGFyZWQgYmV0d2VlbiBnY2MtY3Jvc3MtaW5pdGlhbCwKK2djYy1jcm9zcy1pbnRlcm1lZGlhdGUsIGdjYy1jcm9zcywgZ2NjLXJ1bnRpbWUsIGFuZCBhbHNvIHRoZSBzZGsgYnVpbGQuCisKK1NpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitXaGlsZSBjb21waWxpbmcgZ2NjLWNyb3Nzc2RrLWluaXRpYWwteDg2XzY0IG9uIHNvbWUgaG9zdCwgdGhlcmUgaXMKK29jY2FzaW9uYWxseSBmYWlsdXJlIHRoYXQgdGVzdCB0aGUgZXhpc3RhbmNlIG9mIGRlZmF1bHQuaCBkb2Vzbid0Cit3b3JrLCB0aGUgcmVhc29uIGlzIHRtX2luY2x1ZGVfbGlzdD0nKiogZGVmYXVsdHMuaCcgcmF0aGVyIHRoYW4KK3RtX2luY2x1ZGVfbGlzdD0nKiogLi9kZWZhdWx0cy5oJworCitTbyB3ZSBhZGQgdGhlIHRlc3QgY29uZGl0aW9uIGZvciB0aGlzIHNpdHVhdGlvbi4KK1NpZ25lZC1vZmYtYnk6IEhvbmd4dSBKaWEgPGhvbmd4dS5qaWFAd2luZHJpdmVyLmNvbT4KKy0tLQorIGdjYy9NYWtlZmlsZS5pbiAgfCAyICstCisgZ2NjL2NvbmZpZ3VyZSAgICB8IDQgKystLQorIGdjYy9jb25maWd1cmUuYWMgfCA0ICsrLS0KKyBnY2MvbWtjb25maWcuc2ggIHwgNCArKy0tCisgNCBmaWxlcyBjaGFuZ2VkLCA3IGluc2VydGlvbnMoKyksIDcgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9nY2MvTWFrZWZpbGUuaW4gYi9nY2MvTWFrZWZpbGUuaW4KK2luZGV4IDZjNWFkYzAuLjlhMWQ0NjYgMTAwNjQ0CistLS0gYS9nY2MvTWFrZWZpbGUuaW4KKysrKyBiL2djYy9NYWtlZmlsZS5pbgorQEAgLTUxNyw3ICs1MTcsNyBAQCBUQVJHRVRfU1lTVEVNX1JPT1QgPSBAVEFSR0VUX1NZU1RFTV9ST09UQAorIFRBUkdFVF9TWVNURU1fUk9PVF9ERUZJTkUgPSBAVEFSR0VUX1NZU1RFTV9ST09UX0RFRklORUAKKyAKKyB4bWFrZV9maWxlPUB4bWFrZV9maWxlQAorLXRtYWtlX2ZpbGU9QHRtYWtlX2ZpbGVACisrdG1ha2VfZmlsZT1AdG1ha2VfZmlsZUAgLi90LW9lCisgVE1fRU5ESUFOX0NPTkZJRz1AVE1fRU5ESUFOX0NPTkZJR0AKKyBUTV9NVUxUSUxJQl9DT05GSUc9QFRNX01VTFRJTElCX0NPTkZJR0AKKyBUTV9NVUxUSUxJQl9FWENFUFRJT05TX0NPTkZJRz1AVE1fTVVMVElMSUJfRVhDRVBUSU9OU19DT05GSUdACitkaWZmIC0tZ2l0IGEvZ2NjL2NvbmZpZ3VyZSBiL2djYy9jb25maWd1cmUKK2luZGV4IDVlNzJmMTcuLjM4OWI2ZDUgMTAwNzU1CistLS0gYS9nY2MvY29uZmlndXJlCisrKysgYi9nY2MvY29uZmlndXJlCitAQCAtMTIxMzAsOCArMTIxMzAsOCBAQCBmb3IgZiBpbiAkdG1fZmlsZTsgZG8KKyAgICAgICAgdG1faW5jbHVkZV9saXN0PSIke3RtX2luY2x1ZGVfbGlzdH0gJGYiCisgICAgICAgIDs7CisgICAgIGRlZmF1bHRzLmggKQorLSAgICAgICB0bV9maWxlX2xpc3Q9IiR7dG1fZmlsZV9saXN0fSBcJChzcmNkaXIpLyRmIgorLSAgICAgICB0bV9pbmNsdWRlX2xpc3Q9IiR7dG1faW5jbHVkZV9saXN0fSAkZiIKKysgICAgICAgdG1fZmlsZV9saXN0PSIke3RtX2ZpbGVfbGlzdH0gLi8kZiIKKysgICAgICAgdG1faW5jbHVkZV9saXN0PSIke3RtX2luY2x1ZGVfbGlzdH0gLi8kZiIKKyAgICAgICAgOzsKKyAgICAgKiApCisgICAgICAgIHRtX2ZpbGVfbGlzdD0iJHt0bV9maWxlX2xpc3R9IFwkKHNyY2RpcikvY29uZmlnLyRmIgorZGlmZiAtLWdpdCBhL2djYy9jb25maWd1cmUuYWMgYi9nY2MvY29uZmlndXJlLmFjCitpbmRleCBkZDhmNmZhLi45MWFjODAwIDEwMDY0NAorLS0tIGEvZ2NjL2NvbmZpZ3VyZS5hYworKysrIGIvZ2NjL2NvbmZpZ3VyZS5hYworQEAgLTE4ODMsOCArMTg4Myw4IEBAIGZvciBmIGluICR0bV9maWxlOyBkbworICAgICAgICB0bV9pbmNsdWRlX2xpc3Q9IiR7dG1faW5jbHVkZV9saXN0fSAkZiIKKyAgICAgICAgOzsKKyAgICAgZGVmYXVsdHMuaCApCistICAgICAgIHRtX2ZpbGVfbGlzdD0iJHt0bV9maWxlX2xpc3R9IFwkKHNyY2RpcikvJGYiCistICAgICAgIHRtX2luY2x1ZGVfbGlzdD0iJHt0bV9pbmNsdWRlX2xpc3R9ICRmIgorKyAgICAgICB0bV9maWxlX2xpc3Q9IiR7dG1fZmlsZV9saXN0fSAuLyRmIgorKyAgICAgICB0bV9pbmNsdWRlX2xpc3Q9IiR7dG1faW5jbHVkZV9saXN0fSAuLyRmIgorICAgICAgICA7OworICAgICAqICkKKyAgICAgICAgdG1fZmlsZV9saXN0PSIke3RtX2ZpbGVfbGlzdH0gXCQoc3JjZGlyKS9jb25maWcvJGYiCitkaWZmIC0tZ2l0IGEvZ2NjL21rY29uZmlnLnNoIGIvZ2NjL21rY29uZmlnLnNoCitpbmRleCA2N2RmYWM2Li5iNzNlMDhkIDEwMDY0NAorLS0tIGEvZ2NjL21rY29uZmlnLnNoCisrKysgYi9nY2MvbWtjb25maWcuc2gKK0BAIC03Nyw3ICs3Nyw3IEBAIGlmIFsgLW4gIiRIRUFERVJTIiBdOyB0aGVuCisgICAgIGlmIFsgJCMgLWdlIDEgXTsgdGhlbgorIAllY2hvICcjaWZkZWYgSU5fR0NDJyA+PiAke291dHB1dH1UCisgCWZvciBmaWxlIGluICIkQCI7IGRvCistCSAgICBpZiB0ZXN0IHgiJGZpbGUiID0geCJkZWZhdWx0cy5oIjsgdGhlbgorKwkgICAgaWYgdGVzdCB4IiRmaWxlIiA9IHgiLi9kZWZhdWx0cy5oIiAtbyB4IiRmaWxlIiA9IHgiZGVmYXVsdHMuaCI7IHRoZW4KKyAJCXBvc3Rwb25lX2RlZmF1bHRzX2g9InllcyIKKyAJICAgIGVsc2UKKyAJCWVjaG8gIiMgaW5jbHVkZSBcIiRmaWxlXCIiID4+ICR7b3V0cHV0fVQKK0BAIC0xMDksNyArMTA5LDcgQEAgZXNhYworIAorICMgSWYgd2UgcG9zdHBvbmVkIGluY2x1ZGluZyBkZWZhdWx0cy5oLCBhZGQgdGhlICNpbmNsdWRlIG5vdy4KKyBpZiB0ZXN0IHgiJHBvc3Rwb25lX2RlZmF1bHRzX2giID0geCJ5ZXMiOyB0aGVuCistICAgIGVjaG8gIiMgaW5jbHVkZSBcImRlZmF1bHRzLmhcIiIgPj4gJHtvdXRwdXR9VAorKyAgICBlY2hvICIjIGluY2x1ZGUgXCIuL2RlZmF1bHRzLmhcIiIgPj4gJHtvdXRwdXR9VAorIGZpCisgCisgIyBBZGQgbXVsdGlwbGUgaW5jbHVzaW9uIHByb3RlY3Rpb24gZ3VhcmQsIHBhcnQgdHdvLgorLS0gCisyLjguMgorCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNi4yLzAwMTgtZm9ydHJhbi1jcm9zcy1jb21waWxlLWhhY2sucGF0Y2ggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNi4yLzAwMTgtZm9ydHJhbi1jcm9zcy1jb21waWxlLWhhY2sucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjQzZDg5ZQotLS0gL2Rldi9udWxsCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy02LjIvMDAxOC1mb3J0cmFuLWNyb3NzLWNvbXBpbGUtaGFjay5wYXRjaApAQCAtMCwwICsxLDQ2IEBACitGcm9tIGUzNjBkYzNlMGYxZTBiOWIwMDFlZjcyMmZjZjY2ZjgxMjBhMDNkYmMgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorRGF0ZTogRnJpLCAyOSBNYXIgMjAxMyAwOToyMDowMSArMDQwMAorU3ViamVjdDogW1BBVENIIDE4LzQ2XSBmb3J0cmFuIGNyb3NzLWNvbXBpbGUgaGFjay4KKworKiBGb3J0cmFuIHdvdWxkIGhhdmUgc2VhcmNoZWQgZm9yIGFybS1hbmdzdHJvbS1nbnVlYWJpLWdmb3J0cmFuIGJ1dCB3b3VsZCBoYXZlIHVzZWQKK3VzZWQgZ2ZvcnRhbi4gRm9yIGdjY180LjIuMi5iYiB3ZSB3YW50IHRvIHVzZSB0aGUgZ2ZvcnRyYW4gY29tcGlsZXIgZnJvbSBvdXIgY3Jvc3MKK2RpcmVjdG9yeS4KKworU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KKworVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtlbWJlZGRlZCBzcGVjaWZpY10KKy0tLQorIGxpYmdmb3J0cmFuL2NvbmZpZ3VyZSAgICB8IDIgKy0KKyBsaWJnZm9ydHJhbi9jb25maWd1cmUuYWMgfCAyICstCisgMiBmaWxlcyBjaGFuZ2VkLCAyIGluc2VydGlvbnMoKyksIDIgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9saWJnZm9ydHJhbi9jb25maWd1cmUgYi9saWJnZm9ydHJhbi9jb25maWd1cmUKK2luZGV4IGY3NDZmNmYuLmI0ZjMyNzggMTAwNzU1CistLS0gYS9saWJnZm9ydHJhbi9jb25maWd1cmUKKysrKyBiL2xpYmdmb3J0cmFuL2NvbmZpZ3VyZQorQEAgLTEyNzM0LDcgKzEyNzM0LDcgQEAgZXNhYworIAorICMgV2UgbmVlZCBnZm9ydHJhbiB0byBjb21waWxlIHBhcnRzIG9mIHRoZSBsaWJyYXJ5CisgI0FDX1BST0dfRkMoZ2ZvcnRyYW4pCistRkM9IiRHRk9SVFJBTiIKKysjRkM9IiRHRk9SVFJBTiIKKyBhY19leHQ9JHthY19mY19zcmNleHQtZn0KKyBhY19jb21waWxlPSckRkMgLWMgJEZDRkxBR1MgJGFjX2ZjZmxhZ3Nfc3JjZXh0IGNvbmZ0ZXN0LiRhY19leHQgPiY1JworIGFjX2xpbms9JyRGQyAtbyBjb25mdGVzdCRhY19leGVleHQgJEZDRkxBR1MgJExERkxBR1MgJGFjX2ZjZmxhZ3Nfc3JjZXh0IGNvbmZ0ZXN0LiRhY19leHQgJExJQlMgPiY1JworZGlmZiAtLWdpdCBhL2xpYmdmb3J0cmFuL2NvbmZpZ3VyZS5hYyBiL2xpYmdmb3J0cmFuL2NvbmZpZ3VyZS5hYworaW5kZXggOGYzNzdiYi4uNjc3MTBiNSAxMDA2NDQKKy0tLSBhL2xpYmdmb3J0cmFuL2NvbmZpZ3VyZS5hYworKysrIGIvbGliZ2ZvcnRyYW4vY29uZmlndXJlLmFjCitAQCAtMjQwLDcgKzI0MCw3IEBAIEFDX1NVQlNUKGVuYWJsZV9zdGF0aWMpCisgCisgIyBXZSBuZWVkIGdmb3J0cmFuIHRvIGNvbXBpbGUgcGFydHMgb2YgdGhlIGxpYnJhcnkKKyAjQUNfUFJPR19GQyhnZm9ydHJhbikKKy1GQz0iJEdGT1JUUkFOIgorKyNGQz0iJEdGT1JUUkFOIgorIEFDX1BST0dfRkMoZ2ZvcnRyYW4pCisgCisgIyBleHRyYSBMRCBGbGFncyB3aGljaCBhcmUgcmVxdWlyZWQgZm9yIHRhcmdldHMKKy0tIAorMi44LjIKKwpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTYuMi8wMDE5LWNwcC1ob25vci1zeXNyb290LnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTYuMi8wMDE5LWNwcC1ob25vci1zeXNyb290LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQxN2E1ZWQKLS0tIC9kZXYvbnVsbAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNi4yLzAwMTktY3BwLWhvbm9yLXN5c3Jvb3QucGF0Y2gKQEAgLTAsMCArMSw1NCBAQAorRnJvbSA5OGQ5YzBjMWI1NTUyMjk0YjIxMzBmNzMwNGJmYjUyMmRhMzIzNDQyIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KK0RhdGU6IEZyaSwgMjkgTWFyIDIwMTMgMDk6MjI6MDAgKzA0MDAKK1N1YmplY3Q6IFtQQVRDSCAxOS80Nl0gY3BwOiBob25vciBzeXNyb290LgorCitDdXJyZW50bHksIGlmIHRoZSBnY2MgdG9vbGNoYWluIGlzIHJlbG9jYXRlZCBhbmQgaW5zdGFsbGVkIGZyb20gc3N0YXRlLCB0aGVuIHlvdSB0cnkgYW5kIGNvbXBpbGUKK3ByZXByb2Nlc3NlZCBzb3VyY2UgKC5pIG9yIC5paSBmaWxlcyksIHRoZSBjb21waWxlciB3aWxsIHRyeSBhbmQgYWNjZXNzIHRoZSBidWlsdGluIHN5c3Jvb3QgbG9jYXRpb24KK3JhdGhlciB0aGFuIHRoZSAtLXN5c3Jvb3Qgb3B0aW9uIHNwZWNpZmllZCBvbiB0aGUgY29tbWFuZGxpbmUuIElmIGFjY2VzcyB0byB0aGF0IGRpcmVjdG9yeSBpcworcGVybWlzc2lvbiBkZW5pZWQgKHVucmVhZGFibGUpLCBnY2Mgd2lsbCBlcnJvci4KKworVGhpcyBoYXBwZW5zIHdoZW4gY2NhY2hlIGlzIGluIHVzZSBkdWUgdG8gdGhlIGZhY3QgaXQgdXNlcyBwcmVwcm9jZXNzZWQgc291cmNlIGZpbGVzLgorCitUaGUgZml4IGJlbG93IGFkZHMgJUkgdG8gdGhlIGNwcC1vdXRwdXQgc3BlYyBtYWNybyBzbyB0aGUgZGVmYXVsdCBzdWJzdGl0dXRpb25zIGZvciAtaXByZWZpeCwKKy1pc3lzdGVtLCAtaXN5c3Jvb3QgaGFwcGVuIGFuZCB0aGUgY29ycmVjdCBzeXNyb290IGlzIHVzZWQuCisKK1tZT0NUTyAjMjA3NF0KKworUlAgMjAxMi8wNC8xMworCitTaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKy0tLQorIGdjYy9jcC9sYW5nLXNwZWNzLmggfCAyICstCisgZ2NjL2djYy5jICAgICAgICAgICB8IDIgKy0KKyAyIGZpbGVzIGNoYW5nZWQsIDIgaW5zZXJ0aW9ucygrKSwgMiBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL2djYy9jcC9sYW5nLXNwZWNzLmggYi9nY2MvY3AvbGFuZy1zcGVjcy5oCitpbmRleCA5NzA3ZmFjLi5mZTQ4N2EyIDEwMDY0NAorLS0tIGEvZ2NjL2NwL2xhbmctc3BlY3MuaAorKysrIGIvZ2NjL2NwL2xhbmctc3BlY3MuaAorQEAgLTY0LDUgKzY0LDUgQEAgYWxvbmcgd2l0aCBHQ0M7IHNlZSB0aGUgZmlsZSBDT1BZSU5HMy4gIElmIG5vdCBzZWUKKyAgIHsiLmlpIiwgIkBjKystY3BwLW91dHB1dCIsIDAsIDAsIDB9LAorICAgeyJAYysrLWNwcC1vdXRwdXQiLAorICAgICIleyFNOiV7IU1NOiV7IUU6XAorLSAgICBjYzFwbHVzIC1mcHJlcHJvY2Vzc2VkICVpICUoY2MxX29wdGlvbnMpICUyXAorKyAgICBjYzFwbHVzIC1mcHJlcHJvY2Vzc2VkICVpICVJICUoY2MxX29wdGlvbnMpICUyXAorICAgICAleyFmc3ludGF4LW9ubHk6JShpbnZva2VfYXMpfX19fSIsIDAsIDAsIDB9LAorZGlmZiAtLWdpdCBhL2djYy9nY2MuYyBiL2djYy9nY2MuYworaW5kZXggN2NhMTI5Zi4uMDRmYTgxZCAxMDA2NDQKKy0tLSBhL2djYy9nY2MuYworKysrIGIvZ2NjL2djYy5jCitAQCAtMTMyOSw3ICsxMzI5LDcgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBjb21waWxlciBkZWZhdWx0X2NvbXBpbGVyc1tdID0KKyAJCQkJCSAgICVXe28qOi0tb3V0cHV0LXBjaD0lKn19JVZ9fX19fX19IiwgMCwgMCwgMH0sCisgICB7Ii5pIiwgIkBjcHAtb3V0cHV0IiwgMCwgMCwgMH0sCisgICB7IkBjcHAtb3V0cHV0IiwKKy0gICAiJXshTToleyFNTToleyFFOmNjMSAtZnByZXByb2Nlc3NlZCAlaSAlKGNjMV9vcHRpb25zKSAleyFmc3ludGF4LW9ubHk6JShpbnZva2VfYXMpfX19fSIsIDAsIDAsIDB9LAorKyAgICIleyFNOiV7IU1NOiV7IUU6Y2MxIC1mcHJlcHJvY2Vzc2VkICVpICVJICUoY2MxX29wdGlvbnMpICV7IWZzeW50YXgtb25seTolKGludm9rZV9hcyl9fX19IiwgMCwgMCwgMH0sCisgICB7Ii5zIiwgIkBhc3NlbWJsZXIiLCAwLCAwLCAwfSwKKyAgIHsiQGFzc2VtYmxlciIsCisgICAgIiV7IU06JXshTU06JXshRToleyFTOmFzICUoYXNtX2RlYnVnKSAlKGFzbV9vcHRpb25zKSAlaSAlQSB9fX19IiwgMCwgMCwgMH0sCistLSAKKzIuOC4yCisKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy02LjIvMDAyMC1NSVBTNjQtRGVmYXVsdC10by1ONjQtQUJJLnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTYuMi8wMDIwLU1JUFM2NC1EZWZhdWx0LXRvLU42NC1BQkkucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmE2MTJmNQotLS0gL2Rldi9udWxsCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy02LjIvMDAyMC1NSVBTNjQtRGVmYXVsdC10by1ONjQtQUJJLnBhdGNoCkBAIC0wLDAgKzEsNTcgQEAKK0Zyb20gMWYxNTQ0N2ZiY2Y2NTE0MjYyN2FmOGE5Njk0NzYxNTM0ZGE4ZDBkMSBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CitEYXRlOiBGcmksIDI5IE1hciAyMDEzIDA5OjIzOjA4ICswNDAwCitTdWJqZWN0OiBbUEFUQ0ggMjAvNDZdIE1JUFM2NDogRGVmYXVsdCB0byBONjQgQUJJCisKK01JUFM2NCBkZWZhdWx0cyB0byBuMzIgQUJJLCB0aGlzIHBhdGNoIG1ha2VzIGl0CitzbyB0aGF0IGl0IGRlZmF1bHRzIHRvIE42NCBBQkkKKworU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KKworVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtPRSBjb25maWcgc3BlY2lmaWNdCistLS0KKyBnY2MvY29uZmlnLmdjYyB8IDEwICsrKysrLS0tLS0KKyAxIGZpbGUgY2hhbmdlZCwgNSBpbnNlcnRpb25zKCspLCA1IGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvZ2NjL2NvbmZpZy5nY2MgYi9nY2MvY29uZmlnLmdjYworaW5kZXggZjY2ZTQ4Yy4uOWM2ZDE1NiAxMDA2NDQKKy0tLSBhL2djYy9jb25maWcuZ2NjCisrKysgYi9nY2MvY29uZmlnLmdjYworQEAgLTIwNjUsMjkgKzIwNjUsMjkgQEAgbWlwcyotKi1saW51eCopCQkJCSMgTGludXggTUlQUywgZWl0aGVyIGVuZGlhbi4KKyAJCQlkZWZhdWx0X21pcHNfYXJjaD1taXBzMzIKKyAJCQk7OworIAkJbWlwczY0ZWwtc3QtbGludXgtZ251KQorLQkJCWRlZmF1bHRfbWlwc19hYmk9bjMyCisrCQkJZGVmYXVsdF9taXBzX2FiaT02NAorIAkJCXRtX2ZpbGU9IiR7dG1fZmlsZX0gbWlwcy9zdC5oIgorIAkJCXRtYWtlX2ZpbGU9IiR7dG1ha2VfZmlsZX0gbWlwcy90LXN0IgorIAkJCWVuYWJsZV9taXBzX211bHRpbGlicz0ieWVzIgorIAkJCTs7CisgCQltaXBzNjRvY3Rlb24qLSotbGludXgqKQorLQkJCWRlZmF1bHRfbWlwc19hYmk9bjMyCisrCQkJZGVmYXVsdF9taXBzX2FiaT02NAorIAkJCXRtX2RlZmluZXM9IiR7dG1fZGVmaW5lc30gTUlQU19DUFVfU1RSSU5HX0RFRkFVTFQ9XFxcIm9jdGVvblxcXCIiCisgCQkJdGFyZ2V0X2NwdV9kZWZhdWx0PU1BU0tfU09GVF9GTE9BVF9BQkkKKyAJCQllbmFibGVfbWlwc19tdWx0aWxpYnM9InllcyIKKyAJCQk7OworIAkJbWlwc2lzYTY0cjYqLSotbGludXgqKQorLQkJCWRlZmF1bHRfbWlwc19hYmk9bjMyCisrCQkJZGVmYXVsdF9taXBzX2FiaT02NAorIAkJCWRlZmF1bHRfbWlwc19hcmNoPW1pcHM2NHI2CisgCQkJZW5hYmxlX21pcHNfbXVsdGlsaWJzPSJ5ZXMiCisgCQkJOzsKKyAJCW1pcHNpc2E2NHIyKi0qLWxpbnV4KikKKy0JCQlkZWZhdWx0X21pcHNfYWJpPW4zMgorKwkJCWRlZmF1bHRfbWlwc19hYmk9NjQKKyAJCQlkZWZhdWx0X21pcHNfYXJjaD1taXBzNjRyMgorIAkJCWVuYWJsZV9taXBzX211bHRpbGlicz0ieWVzIgorIAkJCTs7CisgCQltaXBzNjQqLSotbGludXgqIHwgbWlwc2lzYTY0Ki0qLWxpbnV4KikKKy0JCQlkZWZhdWx0X21pcHNfYWJpPW4zMgorKwkJCWRlZmF1bHRfbWlwc19hYmk9NjQKKyAJCQllbmFibGVfbWlwc19tdWx0aWxpYnM9InllcyIKKyAJCQk7OworIAllc2FjCistLSAKKzIuOC4yCisKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy02LjIvMDAyMS1EZWZpbmUtR0xJQkNfRFlOQU1JQ19MSU5LRVItYW5kLVVDTElCQ19EWU5BTUlDX0xJTktFLnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTYuMi8wMDIxLURlZmluZS1HTElCQ19EWU5BTUlDX0xJTktFUi1hbmQtVUNMSUJDX0RZTkFNSUNfTElOS0UucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjY3NWNlMwotLS0gL2Rldi9udWxsCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy02LjIvMDAyMS1EZWZpbmUtR0xJQkNfRFlOQU1JQ19MSU5LRVItYW5kLVVDTElCQ19EWU5BTUlDX0xJTktFLnBhdGNoCkBAIC0wLDAgKzEsMjM0IEBACitGcm9tIDlmNzNjODkxOGI2M2U2YTFjOWI3OTM4NGZhYzQxMWQxMDU2ZWVjMWMgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorRGF0ZTogRnJpLCAyOSBNYXIgMjAxMyAwOToyNDo1MCArMDQwMAorU3ViamVjdDogW1BBVENIIDIxLzQ2XSBEZWZpbmUgR0xJQkNfRFlOQU1JQ19MSU5LRVIgYW5kIFVDTElCQ19EWU5BTUlDX0xJTktFUgorIHJlbGF0aXZlIHRvIFNZU1RFTUxJQlNfRElSCisKK1RoaXMgcGF0Y2ggZGVmaW5lcyBHTElCQ19EWU5BTUlDX0xJTktFUiBhbmQgVUNMSUJDX0RZTkFNSUNfTElOS0VSCityZWxhdGl2ZSB0byBTWVNURU1MSUJTX0RJUiB3aGljaCBjYW4gYmUgc2V0IGluIGdlbmVyYXRlZCBoZWFkZXJzCitUaGlzIGJyZWFrcyB0aGUgYXNzdW1wdGlvbiBvZiBoYXJkY29kZWQgbXVsdGlsaWIgaW4gZ2NjCitDaGFuZ2UgaXMgb25seSBmb3IgdGhlIHN1cHBvcnRlZCBhcmNoaXRlY3R1cmVzIGluIE9FIGluY2x1ZGluZworU0gsIHNwYXJjLCBhbHBoYSBmb3IgcG9zc2libGUgZnV0dXJlIHN1cHBvcnQgKGlmIGFueSkKKworUmVtb3ZlcyB0aGUgZG9faGVhZGVyZml4IHRhc2sgaW4gbWV0YWRhdGEKKworU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KKworVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtPRSBjb25maWd1cmF0aW9uXQorLS0tCisgZ2NjL2NvbmZpZy9hbHBoYS9saW51eC1lbGYuaCB8ICA0ICsrLS0KKyBnY2MvY29uZmlnL2FybS9saW51eC1lYWJpLmggIHwgIDQgKystLQorIGdjYy9jb25maWcvYXJtL2xpbnV4LWVsZi5oICAgfCAgMiArLQorIGdjYy9jb25maWcvaTM4Ni9saW51eC5oICAgICAgfCAgMiArLQorIGdjYy9jb25maWcvaTM4Ni9saW51eDY0LmggICAgfCAgNiArKystLS0KKyBnY2MvY29uZmlnL2xpbnV4LmggICAgICAgICAgIHwgIDggKysrKy0tLS0KKyBnY2MvY29uZmlnL21pcHMvbGludXguaCAgICAgIHwgMTIgKysrKysrLS0tLS0tCisgZ2NjL2NvbmZpZy9yczYwMDAvbGludXg2NC5oICB8IDE2ICsrKysrKy0tLS0tLS0tLS0KKyBnY2MvY29uZmlnL3NoL2xpbnV4LmggICAgICAgIHwgIDIgKy0KKyBnY2MvY29uZmlnL3NwYXJjL2xpbnV4LmggICAgIHwgIDIgKy0KKyBnY2MvY29uZmlnL3NwYXJjL2xpbnV4NjQuaCAgIHwgIDQgKystLQorIDExIGZpbGVzIGNoYW5nZWQsIDI5IGluc2VydGlvbnMoKyksIDMzIGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvZ2NjL2NvbmZpZy9hbHBoYS9saW51eC1lbGYuaCBiL2djYy9jb25maWcvYWxwaGEvbGludXgtZWxmLmgKK2luZGV4IGEwNzY0ZDMuLjAyZjdhN2MgMTAwNjQ0CistLS0gYS9nY2MvY29uZmlnL2FscGhhL2xpbnV4LWVsZi5oCisrKysgYi9nY2MvY29uZmlnL2FscGhhL2xpbnV4LWVsZi5oCitAQCAtMjMsOCArMjMsOCBAQCBhbG9uZyB3aXRoIEdDQzsgc2VlIHRoZSBmaWxlIENPUFlJTkczLiAgSWYgbm90IHNlZQorICNkZWZpbmUgRVhUUkFfU1BFQ1MgXAorIHsgImVsZl9keW5hbWljX2xpbmtlciIsIEVMRl9EWU5BTUlDX0xJTktFUiB9LAorIAorLSNkZWZpbmUgR0xJQkNfRFlOQU1JQ19MSU5LRVIJIi9saWIvbGQtbGludXguc28uMiIKKy0jZGVmaW5lIFVDTElCQ19EWU5BTUlDX0xJTktFUiAiL2xpYi9sZC11Q2xpYmMuc28uMCIKKysjZGVmaW5lIEdMSUJDX0RZTkFNSUNfTElOS0VSCVNZU1RFTUxJQlNfRElSICJsZC1saW51eC5zby4yIgorKyNkZWZpbmUgVUNMSUJDX0RZTkFNSUNfTElOS0VSICBTWVNURU1MSUJTX0RJUiAibGQtdUNsaWJjLnNvLjAiCisgI2lmIERFRkFVTFRfTElCQyA9PSBMSUJDX1VDTElCQworICNkZWZpbmUgQ0hPT1NFX0RZTkFNSUNfTElOS0VSKEcsIFUpICIle21nbGliYzoiIEcgIjs6IiBVICJ9IgorICNlbGlmIERFRkFVTFRfTElCQyA9PSBMSUJDX0dMSUJDCitkaWZmIC0tZ2l0IGEvZ2NjL2NvbmZpZy9hcm0vbGludXgtZWFiaS5oIGIvZ2NjL2NvbmZpZy9hcm0vbGludXgtZWFiaS5oCitpbmRleCBhY2U4NDgxLi40MDEwNDM1IDEwMDY0NAorLS0tIGEvZ2NjL2NvbmZpZy9hcm0vbGludXgtZWFiaS5oCisrKysgYi9nY2MvY29uZmlnL2FybS9saW51eC1lYWJpLmgKK0BAIC02OCw4ICs2OCw4IEBACisgICAgR0xJQkNfRFlOQU1JQ19MSU5LRVJfREVGQVVMVCBhbmQgVEFSR0VUX0RFRkFVTFRfRkxPQVRfQUJJLiAgKi8KKyAKKyAjdW5kZWYgIEdMSUJDX0RZTkFNSUNfTElOS0VSCistI2RlZmluZSBHTElCQ19EWU5BTUlDX0xJTktFUl9TT0ZUX0ZMT0FUICIvbGliL2xkLWxpbnV4LnNvLjMiCistI2RlZmluZSBHTElCQ19EWU5BTUlDX0xJTktFUl9IQVJEX0ZMT0FUICIvbGliL2xkLWxpbnV4LWFybWhmLnNvLjMiCisrI2RlZmluZSBHTElCQ19EWU5BTUlDX0xJTktFUl9TT0ZUX0ZMT0FUIFNZU1RFTUxJQlNfRElSICJsZC1saW51eC5zby4zIgorKyNkZWZpbmUgR0xJQkNfRFlOQU1JQ19MSU5LRVJfSEFSRF9GTE9BVCBTWVNURU1MSUJTX0RJUiAibGQtbGludXgtYXJtaGYuc28uMyIKKyAjZGVmaW5lIEdMSUJDX0RZTkFNSUNfTElOS0VSX0RFRkFVTFQgR0xJQkNfRFlOQU1JQ19MSU5LRVJfU09GVF9GTE9BVAorIAorICNkZWZpbmUgR0xJQkNfRFlOQU1JQ19MSU5LRVIgXAorZGlmZiAtLWdpdCBhL2djYy9jb25maWcvYXJtL2xpbnV4LWVsZi5oIGIvZ2NjL2NvbmZpZy9hcm0vbGludXgtZWxmLmgKK2luZGV4IGE5NGJkMmQuLjAyMjA2MjggMTAwNjQ0CistLS0gYS9nY2MvY29uZmlnL2FybS9saW51eC1lbGYuaAorKysrIGIvZ2NjL2NvbmZpZy9hcm0vbGludXgtZWxmLmgKK0BAIC02Miw3ICs2Miw3IEBACisgCisgI2RlZmluZSBMSUJHQ0NfU1BFQyAiJXttZmxvYXQtYWJpPXNvZnQqOi1sZmxvYXR9IC1sZ2NjIgorIAorLSNkZWZpbmUgR0xJQkNfRFlOQU1JQ19MSU5LRVIgIi9saWIvbGQtbGludXguc28uMiIKKysjZGVmaW5lIEdMSUJDX0RZTkFNSUNfTElOS0VSIFNZU1RFTUxJQlNfRElSICJsZC1saW51eC5zby4yIgorIAorICNkZWZpbmUgTElOVVhfVEFSR0VUX0xJTktfU1BFQyAgIiV7aCp9IFwKKyAgICAle3N0YXRpYzotQnN0YXRpY30gXAorZGlmZiAtLWdpdCBhL2djYy9jb25maWcvaTM4Ni9saW51eC5oIGIvZ2NjL2NvbmZpZy9pMzg2L2xpbnV4LmgKK2luZGV4IGQzN2E4NzUuLmVkZGU1ODYgMTAwNjQ0CistLS0gYS9nY2MvY29uZmlnL2kzODYvbGludXguaAorKysrIGIvZ2NjL2NvbmZpZy9pMzg2L2xpbnV4LmgKK0BAIC0yMCw3ICsyMCw3IEBAIGFsb25nIHdpdGggR0NDOyBzZWUgdGhlIGZpbGUgQ09QWUlORzMuICBJZiBub3Qgc2VlCisgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LiAgKi8KKyAKKyAjZGVmaW5lIEdOVV9VU0VSX0xJTktfRU1VTEFUSU9OICJlbGZfaTM4NiIKKy0jZGVmaW5lIEdMSUJDX0RZTkFNSUNfTElOS0VSICIvbGliL2xkLWxpbnV4LnNvLjIiCisrI2RlZmluZSBHTElCQ19EWU5BTUlDX0xJTktFUiBTWVNURU1MSUJTX0RJUiAibGQtbGludXguc28uMiIKKyAKKyAjdW5kZWYgTVVTTF9EWU5BTUlDX0xJTktFUgorICNkZWZpbmUgTVVTTF9EWU5BTUlDX0xJTktFUiAiL2xpYi9sZC1tdXNsLWkzODYuc28uMSIKK2RpZmYgLS1naXQgYS9nY2MvY29uZmlnL2kzODYvbGludXg2NC5oIGIvZ2NjL2NvbmZpZy9pMzg2L2xpbnV4NjQuaAoraW5kZXggNzNkMjJlMy4uZjRiNTYxNSAxMDA2NDQKKy0tLSBhL2djYy9jb25maWcvaTM4Ni9saW51eDY0LmgKKysrKyBiL2djYy9jb25maWcvaTM4Ni9saW51eDY0LmgKK0BAIC0yNyw5ICsyNyw5IEBAIHNlZSB0aGUgZmlsZXMgQ09QWUlORzMgYW5kIENPUFlJTkcuUlVOVElNRSByZXNwZWN0aXZlbHkuICBJZiBub3QsIHNlZQorICNkZWZpbmUgR05VX1VTRVJfTElOS19FTVVMQVRJT042NCAiZWxmX3g4Nl82NCIKKyAjZGVmaW5lIEdOVV9VU0VSX0xJTktfRU1VTEFUSU9OWDMyICJlbGYzMl94ODZfNjQiCisgCistI2RlZmluZSBHTElCQ19EWU5BTUlDX0xJTktFUjMyICIvbGliL2xkLWxpbnV4LnNvLjIiCistI2RlZmluZSBHTElCQ19EWU5BTUlDX0xJTktFUjY0ICIvbGliNjQvbGQtbGludXgteDg2LTY0LnNvLjIiCistI2RlZmluZSBHTElCQ19EWU5BTUlDX0xJTktFUlgzMiAiL2xpYngzMi9sZC1saW51eC14MzIuc28uMiIKKysjZGVmaW5lIEdMSUJDX0RZTkFNSUNfTElOS0VSMzIgU1lTVEVNTElCU19ESVIgImxkLWxpbnV4LnNvLjIiCisrI2RlZmluZSBHTElCQ19EWU5BTUlDX0xJTktFUjY0IFNZU1RFTUxJQlNfRElSICJsZC1saW51eC14ODYtNjQuc28uMiIKKysjZGVmaW5lIEdMSUJDX0RZTkFNSUNfTElOS0VSWDMyIFNZU1RFTUxJQlNfRElSICJsZC1saW51eC14MzIuc28uMiIKKyAKKyAjdW5kZWYgTVVTTF9EWU5BTUlDX0xJTktFUjMyCisgI2RlZmluZSBNVVNMX0RZTkFNSUNfTElOS0VSMzIgIi9saWIvbGQtbXVzbC1pMzg2LnNvLjEiCitkaWZmIC0tZ2l0IGEvZ2NjL2NvbmZpZy9saW51eC5oIGIvZ2NjL2NvbmZpZy9saW51eC5oCitpbmRleCA5YWVlYjk0Li5iMDU1NjUyIDEwMDY0NAorLS0tIGEvZ2NjL2NvbmZpZy9saW51eC5oCisrKysgYi9nY2MvY29uZmlnL2xpbnV4LmgKK0BAIC04MSwxMCArODEsMTAgQEAgc2VlIHRoZSBmaWxlcyBDT1BZSU5HMyBhbmQgQ09QWUlORy5SVU5USU1FIHJlc3BlY3RpdmVseS4gIElmIG5vdCwgc2VlCisgICAgR0xJQkNfRFlOQU1JQ19MSU5LRVIgbXVzdCBiZSBkZWZpbmVkIGZvciBlYWNoIHRhcmdldCB1c2luZyB0aGVtLCBvcgorICAgIEdMSUJDX0RZTkFNSUNfTElOS0VSMzIgYW5kIEdMSUJDX0RZTkFNSUNfTElOS0VSNjQgZm9yIHRhcmdldHMKKyAgICBzdXBwb3J0aW5nIGJvdGggMzItYml0IGFuZCA2NC1iaXQgY29tcGlsYXRpb24uICAqLworLSNkZWZpbmUgVUNMSUJDX0RZTkFNSUNfTElOS0VSICIvbGliL2xkLXVDbGliYy5zby4wIgorLSNkZWZpbmUgVUNMSUJDX0RZTkFNSUNfTElOS0VSMzIgIi9saWIvbGQtdUNsaWJjLnNvLjAiCistI2RlZmluZSBVQ0xJQkNfRFlOQU1JQ19MSU5LRVI2NCAiL2xpYi9sZDY0LXVDbGliYy5zby4wIgorLSNkZWZpbmUgVUNMSUJDX0RZTkFNSUNfTElOS0VSWDMyICIvbGliL2xkeDMyLXVDbGliYy5zby4wIgorKyNkZWZpbmUgVUNMSUJDX0RZTkFNSUNfTElOS0VSIFNZU1RFTUxJQlNfRElSICJsZC11Q2xpYmMuc28uMCIKKysjZGVmaW5lIFVDTElCQ19EWU5BTUlDX0xJTktFUjMyIFNZU1RFTUxJQlNfRElSICJsZC11Q2xpYmMuc28uMCIKKysjZGVmaW5lIFVDTElCQ19EWU5BTUlDX0xJTktFUjY0IFNZU1RFTUxJQlNfRElSICJsZDY0LXVDbGliYy5zby4wIgorKyNkZWZpbmUgVUNMSUJDX0RZTkFNSUNfTElOS0VSWDMyIFNZU1RFTUxJQlNfRElSICJsZHgzMi11Q2xpYmMuc28uMCIKKyAjZGVmaW5lIEJJT05JQ19EWU5BTUlDX0xJTktFUiAiL3N5c3RlbS9iaW4vbGlua2VyIgorICNkZWZpbmUgQklPTklDX0RZTkFNSUNfTElOS0VSMzIgIi9zeXN0ZW0vYmluL2xpbmtlciIKKyAjZGVmaW5lIEJJT05JQ19EWU5BTUlDX0xJTktFUjY0ICIvc3lzdGVtL2Jpbi9saW5rZXI2NCIKK2RpZmYgLS1naXQgYS9nY2MvY29uZmlnL21pcHMvbGludXguaCBiL2djYy9jb25maWcvbWlwcy9saW51eC5oCitpbmRleCBmYTI1M2I2Li5kYTAyYzhkIDEwMDY0NAorLS0tIGEvZ2NjL2NvbmZpZy9taXBzL2xpbnV4LmgKKysrKyBiL2djYy9jb25maWcvbWlwcy9saW51eC5oCitAQCAtMjIsMjAgKzIyLDIwIEBAIGFsb25nIHdpdGggR0NDOyBzZWUgdGhlIGZpbGUgQ09QWUlORzMuICBJZiBub3Qgc2VlCisgI2RlZmluZSBHTlVfVVNFUl9MSU5LX0VNVUxBVElPTk4zMiAiZWxmMzIle0VCOmJ9JXtFTDpsfXRzbWlwbjMyIgorIAorICNkZWZpbmUgR0xJQkNfRFlOQU1JQ19MSU5LRVIzMiBcCistICAiJXttbmFuPTIwMDg6L2xpYi9sZC1saW51eC1taXBzbjguc28uMTs6L2xpYi9sZC5zby4xfSIKKysgICIle21uYW49MjAwODoiIFNZU1RFTUxJQlNfRElSICJsZC1saW51eC1taXBzbjguc28uMTs6IiBTWVNURU1MSUJTX0RJUiAibGQuc28uMX0iCisgI2RlZmluZSBHTElCQ19EWU5BTUlDX0xJTktFUjY0IFwKKy0gICIle21uYW49MjAwODovbGliNjQvbGQtbGludXgtbWlwc244LnNvLjE7Oi9saWI2NC9sZC5zby4xfSIKKysgICIle21uYW49MjAwODoiIFNZU1RFTUxJQlNfRElSICJsZC1saW51eC1taXBzbjguc28uMTs6IiBTWVNURU1MSUJTX0RJUiAibGQuc28uMX0iCisgI2RlZmluZSBHTElCQ19EWU5BTUlDX0xJTktFUk4zMiBcCistICAiJXttbmFuPTIwMDg6L2xpYjMyL2xkLWxpbnV4LW1pcHNuOC5zby4xOzovbGliMzIvbGQuc28uMX0iCisrICAiJXttbmFuPTIwMDg6IiBTWVNURU1MSUJTX0RJUiAibGQtbGludXgtbWlwc244LnNvLjE7OiIgU1lTVEVNTElCU19ESVIgImxkLnNvLjF9IgorIAorICN1bmRlZiBVQ0xJQkNfRFlOQU1JQ19MSU5LRVIzMgorICNkZWZpbmUgVUNMSUJDX0RZTkFNSUNfTElOS0VSMzIgXAorLSAgIiV7bW5hbj0yMDA4Oi9saWIvbGQtdUNsaWJjLW1pcHNuOC5zby4wOzovbGliL2xkLXVDbGliYy5zby4wfSIKKysgICIle21uYW49MjAwODoiIFNZU1RFTUxJQlNfRElSICJsZC11Q2xpYmMtbWlwc244LnNvLjA7OiIgU1lTVEVNTElCU19ESVIgImxkLXVDbGliYy5zby4wfSIKKyAjdW5kZWYgVUNMSUJDX0RZTkFNSUNfTElOS0VSNjQKKyAjZGVmaW5lIFVDTElCQ19EWU5BTUlDX0xJTktFUjY0IFwKKy0gICIle21uYW49MjAwODovbGliL2xkNjQtdUNsaWJjLW1pcHNuOC5zby4wOzovbGliL2xkNjQtdUNsaWJjLnNvLjB9IgorKyAgIiV7bW5hbj0yMDA4OiIgU1lTVEVNTElCU19ESVIgImxkNjQtdUNsaWJjLW1pcHNuOC5zby4wOzoiIFNZU1RFTUxJQlNfRElSICJsZDY0LXVDbGliYy5zby4wfSIKKyAjZGVmaW5lIFVDTElCQ19EWU5BTUlDX0xJTktFUk4zMiBcCistICAiJXttbmFuPTIwMDg6L2xpYjMyL2xkLXVDbGliYy1taXBzbjguc28uMDs6L2xpYjMyL2xkLXVDbGliYy5zby4wfSIKKysgICIle21uYW49MjAwODoiIFNZU1RFTUxJQlNfRElSICJsZC11Q2xpYmMtbWlwc244LnNvLjA7OiIgU1lTVEVNTElCU19ESVIgImxkLXVDbGliYy5zby4wfSIKKyAKKyAjdW5kZWYgTVVTTF9EWU5BTUlDX0xJTktFUjMyCisgI2RlZmluZSBNVVNMX0RZTkFNSUNfTElOS0VSMzIgIi9saWIvbGQtbXVzbC1taXBzJXtFTDplbH0le21zb2Z0LWZsb2F0Oi1zZn0uc28uMSIKK2RpZmYgLS1naXQgYS9nY2MvY29uZmlnL3JzNjAwMC9saW51eDY0LmggYi9nY2MvY29uZmlnL3JzNjAwMC9saW51eDY0LmgKK2luZGV4IGZlZmEwYzQuLjcxNzM5MzggMTAwNjQ0CistLS0gYS9nY2MvY29uZmlnL3JzNjAwMC9saW51eDY0LmgKKysrKyBiL2djYy9jb25maWcvcnM2MDAwL2xpbnV4NjQuaAorQEAgLTQxMiwxNiArNDEyLDExIEBAIGV4dGVybiBpbnQgZG90X3N5bWJvbHM7CisgI3VuZGVmCUxJTktfT1NfREVGQVVMVF9TUEVDCisgI2RlZmluZSBMSU5LX09TX0RFRkFVTFRfU1BFQyAiJShsaW5rX29zX2xpbnV4KSIKKyAKKy0jZGVmaW5lIEdMSUJDX0RZTkFNSUNfTElOS0VSMzIgIiUoZHluYW1pY19saW5rZXJfcHJlZml4KS9saWIvbGQuc28uMSIKKy0KKysjZGVmaW5lIEdMSUJDX0RZTkFNSUNfTElOS0VSMzIgU1lTVEVNTElCU19ESVIgImxkLnNvLjEiCisgI2lmZGVmIExJTlVYNjRfREVGQVVMVF9BQklfRUxGdjIKKy0jZGVmaW5lIEdMSUJDX0RZTkFNSUNfTElOS0VSNjQgXAorLSIle21hYmk9ZWxmdjE6JShkeW5hbWljX2xpbmtlcl9wcmVmaXgpL2xpYjY0L2xkNjQuc28uMTsiIFwKKy0iOiUoZHluYW1pY19saW5rZXJfcHJlZml4KS9saWI2NC9sZDY0LnNvLjJ9IgorKyNkZWZpbmUgR0xJQkNfRFlOQU1JQ19MSU5LRVI2NCAiJXttYWJpPWVsZnYxOiIgU1lTVEVNTElCU19ESVIgImxkNjQuc28uMTs6IiBTWVNURU1MSUJTX0RJUiAibGQ2NC5zby4yfSIKKyAjZWxzZQorLSNkZWZpbmUgR0xJQkNfRFlOQU1JQ19MSU5LRVI2NCBcCistIiV7bWFiaT1lbGZ2MjolKGR5bmFtaWNfbGlua2VyX3ByZWZpeCkvbGliNjQvbGQ2NC5zby4yOyIgXAorLSI6JShkeW5hbWljX2xpbmtlcl9wcmVmaXgpL2xpYjY0L2xkNjQuc28uMX0iCisrI2RlZmluZSBHTElCQ19EWU5BTUlDX0xJTktFUjY0ICIle21hYmk9ZWxmdjI6IiBTWVNURU1MSUJTX0RJUiAibGQ2NC5zby4yOzoiIFNZU1RFTUxJQlNfRElSICJsZDY0LnNvLjF9IgorICNlbmRpZgorIAorICNkZWZpbmUgTVVTTF9EWU5BTUlDX0xJTktFUjMyIFwKK0BAIC00MjksOCArNDI0LDkgQEAgZXh0ZXJuIGludCBkb3Rfc3ltYm9sczsKKyAjZGVmaW5lIE1VU0xfRFlOQU1JQ19MSU5LRVI2NCBcCisgICAiL2xpYi9sZC1tdXNsLXBvd2VycGM2NCIgTVVTTF9EWU5BTUlDX0xJTktFUl9FICIle21zb2Z0LWZsb2F0Oi1zZn0uc28uMSIKKyAKKy0jZGVmaW5lIFVDTElCQ19EWU5BTUlDX0xJTktFUjMyICIvbGliL2xkLXVDbGliYy5zby4wIgorLSNkZWZpbmUgVUNMSUJDX0RZTkFNSUNfTElOS0VSNjQgIi9saWIvbGQ2NC11Q2xpYmMuc28uMCIKKysjZGVmaW5lIFVDTElCQ19EWU5BTUlDX0xJTktFUjMyIFNZU1RFTUxJQlNfRElSICJsZC11Q2xpYmMuc28uMCIKKysjZGVmaW5lIFVDTElCQ19EWU5BTUlDX0xJTktFUjY0IFNZU1RFTUxJQlNfRElSICJsZDY0LXVDbGliYy5zby4wIgorKworICNpZiBERUZBVUxUX0xJQkMgPT0gTElCQ19VQ0xJQkMKKyAjZGVmaW5lIENIT09TRV9EWU5BTUlDX0xJTktFUihHLCBVLCBNKSBcCisgICAiJXttZ2xpYmM6IiBHICI7OiV7bW11c2w6IiBNICI7OiIgVSAifX0iCitkaWZmIC0tZ2l0IGEvZ2NjL2NvbmZpZy9zaC9saW51eC5oIGIvZ2NjL2NvbmZpZy9zaC9saW51eC5oCitpbmRleCAyYTAzNmFjLi41MGZiNzM1IDEwMDY0NAorLS0tIGEvZ2NjL2NvbmZpZy9zaC9saW51eC5oCisrKysgYi9nY2MvY29uZmlnL3NoL2xpbnV4LmgKK0BAIC02NCw3ICs2NCw3IEBAIGFsb25nIHdpdGggR0NDOyBzZWUgdGhlIGZpbGUgQ09QWUlORzMuICBJZiBub3Qgc2VlCisgICAiL2xpYi9sZC1tdXNsLXNoIiBNVVNMX0RZTkFNSUNfTElOS0VSX0UgTVVTTF9EWU5BTUlDX0xJTktFUl9GUCBcCisgICAiJXttZmRwaWM6LWZkcGljfS5zby4xIgorIAorLSNkZWZpbmUgR0xJQkNfRFlOQU1JQ19MSU5LRVIgIi9saWIvbGQtbGludXguc28uMiIKKysjZGVmaW5lIEdMSUJDX0RZTkFNSUNfTElOS0VSIFNZU1RFTUxJQlNfRElSICJsZC1saW51eC5zby4yIgorIAorICN1bmRlZiBTVUJUQVJHRVRfTElOS19FTVVMX1NVRkZJWAorICNkZWZpbmUgU1VCVEFSR0VUX0xJTktfRU1VTF9TVUZGSVggIiV7bWZkcGljOl9mZDs6X2xpbnV4fSIKK2RpZmYgLS1naXQgYS9nY2MvY29uZmlnL3NwYXJjL2xpbnV4LmggYi9nY2MvY29uZmlnL3NwYXJjL2xpbnV4LmgKK2luZGV4IDliMzI1NzcuLjdiZDY2ZGUgMTAwNjQ0CistLS0gYS9nY2MvY29uZmlnL3NwYXJjL2xpbnV4LmgKKysrKyBiL2djYy9jb25maWcvc3BhcmMvbGludXguaAorQEAgLTgzLDcgKzgzLDcgQEAgZXh0ZXJuIGNvbnN0IGNoYXIgKmhvc3RfZGV0ZWN0X2xvY2FsX2NwdSAoaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2KTsKKyAgICBXaGVuIHRoZSAtc2hhcmVkIGxpbmsgb3B0aW9uIGlzIHVzZWQgYSBmaW5hbCBsaW5rIGlzIG5vdCBiZWluZworICAgIGRvbmUuICAqLworIAorLSNkZWZpbmUgR0xJQkNfRFlOQU1JQ19MSU5LRVIgIi9saWIvbGQtbGludXguc28uMiIKKysjZGVmaW5lIEdMSUJDX0RZTkFNSUNfTElOS0VSIFNZU1RFTUxJQlNfRElSICJsZC1saW51eC5zby4yIgorIAorICN1bmRlZiAgTElOS19TUEVDCisgI2RlZmluZSBMSU5LX1NQRUMgIi1tIGVsZjMyX3NwYXJjICV7c2hhcmVkOi1zaGFyZWR9IFwKK2RpZmYgLS1naXQgYS9nY2MvY29uZmlnL3NwYXJjL2xpbnV4NjQuaCBiL2djYy9jb25maWcvc3BhcmMvbGludXg2NC5oCitpbmRleCBhMWVmMzI1Li4zYmFlM2Q1IDEwMDY0NAorLS0tIGEvZ2NjL2NvbmZpZy9zcGFyYy9saW51eDY0LmgKKysrKyBiL2djYy9jb25maWcvc3BhcmMvbGludXg2NC5oCitAQCAtODQsOCArODQsOCBAQCBhbG9uZyB3aXRoIEdDQzsgc2VlIHRoZSBmaWxlIENPUFlJTkczLiAgSWYgbm90IHNlZQorICAgIFdoZW4gdGhlIC1zaGFyZWQgbGluayBvcHRpb24gaXMgdXNlZCBhIGZpbmFsIGxpbmsgaXMgbm90IGJlaW5nCisgICAgZG9uZS4gICovCisgCistI2RlZmluZSBHTElCQ19EWU5BTUlDX0xJTktFUjMyICIvbGliL2xkLWxpbnV4LnNvLjIiCistI2RlZmluZSBHTElCQ19EWU5BTUlDX0xJTktFUjY0ICIvbGliNjQvbGQtbGludXguc28uMiIKKysjZGVmaW5lIEdMSUJDX0RZTkFNSUNfTElOS0VSMzIgU1lTVEVNTElCU19ESVIgImxkLWxpbnV4LnNvLjIiCisrI2RlZmluZSBHTElCQ19EWU5BTUlDX0xJTktFUjY0IFNZU1RFTUxJQlNfRElSICJsZC1saW51eC5zby4yIgorIAorICNpZmRlZiBTUEFSQ19CSV9BUkNICisgCistLSAKKzIuOC4yCisKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy02LjIvMDAyMi1nY2MtRml4LWFyZ3VtZW50LWxpc3QtdG9vLWxvbmctZXJyb3IucGF0Y2ggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNi4yLzAwMjItZ2NjLUZpeC1hcmd1bWVudC1saXN0LXRvby1sb25nLWVycm9yLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZhYjZlNGEKLS0tIC9kZXYvbnVsbAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNi4yLzAwMjItZ2NjLUZpeC1hcmd1bWVudC1saXN0LXRvby1sb25nLWVycm9yLnBhdGNoCkBAIC0wLDAgKzEsNDAgQEAKK0Zyb20gYWNjZTUxNTdmNmIzYTFkYzlhMzY3NmI3MTE4YWM4ODdkYzU2OTNiZSBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CitEYXRlOiBGcmksIDI5IE1hciAyMDEzIDA5OjI2OjM3ICswNDAwCitTdWJqZWN0OiBbUEFUQ0ggMjIvNDZdIGdjYzogRml4IGFyZ3VtZW50IGxpc3QgdG9vIGxvbmcgZXJyb3IuCisKK1RoZXJlIHdvdWxkIGJlIGFuICJBcmd1bWVudCBsaXN0IHRvbyBsb25nIiBlcnJvciB3aGVuIHRoZQorYnVpbGQgZGlyZWN0b3J5IGlzIGxvbmdlciB0aGFuIDIwMCwgdGhpcyBpcyBjYXVzZWQgYnk6CisKK2hlYWRlcnM9YGVjaG8gJChQTFVHSU5fSEVBREVSUykgfCB0ciAnICcgJ1wwMTInIHwgc29ydCAtdWAKKworVGhlIFBMVUdJTl9IRUFERVJTIGlzIHRvbyBsb25nIGJlZm9yZSBzb3J0LCBzbyB0aGUgImVjaG8iIGNhbid0IGhhbmRsZQoraXQsIHVzZSB0aGUgJChzb3J0IGxpc3QpIG9mIEdOVSBtYWtlIHdoaWNoIGNhbiBoYW5kbGUgdGhlIHRvbyBsb25nIGxpc3QKK3dvdWxkIGZpeCB0aGUgcHJvYmxlbSwgdGhlIGhlYWRlciB3b3VsZCBiZSBzaG9ydCBlbm91Z2ggYWZ0ZXIgc29ydGVkLgorVGhlICJ0ciAnICcgJ1wwMTInIiB3YXMgdXNlZCBmb3IgdHJhbnNsYXRpbmcgdGhlIHNwYWNlIHRvICJcbiIsIHRoZQorJChzb3J0IGxpc3QpIGRvZXNuJ3QgbmVlZCB0aGlzLgorCitTaWduZWQtb2ZmLWJ5OiBSb2JlcnQgWWFuZyA8bGllemhpLnlhbmdAd2luZHJpdmVyLmNvbT4KK1NpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworLS0tCisgZ2NjL01ha2VmaWxlLmluIHwgMiArLQorIDEgZmlsZSBjaGFuZ2VkLCAxIGluc2VydGlvbigrKSwgMSBkZWxldGlvbigtKQorCitkaWZmIC0tZ2l0IGEvZ2NjL01ha2VmaWxlLmluIGIvZ2NjL01ha2VmaWxlLmluCitpbmRleCA5YTFkNDY2Li40NTBjYjc5IDEwMDY0NAorLS0tIGEvZ2NjL01ha2VmaWxlLmluCisrKysgYi9nY2MvTWFrZWZpbGUuaW4KK0BAIC0zMzQ5LDcgKzMzNDksNyBAQCBpbnN0YWxsLXBsdWdpbjogaW5zdGFsbGRpcnMgbGFuZy5pbnN0YWxsLXBsdWdpbiBzLWhlYWRlci12YXJzIGluc3RhbGwtZ2VuZ3R5cGUKKyAjIFdlIGtlZXAgdGhlIGRpcmVjdG9yeSBzdHJ1Y3R1cmUgZm9yIGZpbGVzIGluIGNvbmZpZyBvciBjLWZhbWlseSBhbmQgLmRlZgorICMgZmlsZXMuIEFsbCBvdGhlciBmaWxlcyBhcmUgZmxhdHRlbmVkIHRvIGEgc2luZ2xlIGRpcmVjdG9yeS4KKyAJJChta2luc3RhbGxkaXJzKSAkKERFU1RESVIpJChwbHVnaW5faW5jbHVkZWRpcikKKy0JaGVhZGVycz1gZWNobyAkKFBMVUdJTl9IRUFERVJTKSAkJChjZCAkKHNyY2Rpcik7IGVjaG8gKi5oICouZGVmKSB8IHRyICcgJyAnXDAxMicgfCBzb3J0IC11YDsgXAorKwloZWFkZXJzPSIkKHNvcnQgJChQTFVHSU5fSEVBREVSUykgJCQoY2QgJChzcmNkaXIpOyBlY2hvICouaCAqLmRlZikpIjsgXAorIAlzcmNkaXJzdHJpcD1gZWNobyAiJChzcmNkaXIpIiB8IHNlZCAncy9bXS5bXiQkXFwqfF0vXFxcXCYvZydgOyBcCisgCWZvciBmaWxlIGluICQkaGVhZGVyczsgZG8gXAorIAkgIGlmIFsgLWYgJCRmaWxlIF0gOyB0aGVuIFwKKy0tIAorMi44LjIKKwpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTYuMi8wMDIzLURpc2FibGUtc2R0LnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTYuMi8wMDIzLURpc2FibGUtc2R0LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBlZmQ4OTAKLS0tIC9kZXYvbnVsbAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNi4yLzAwMjMtRGlzYWJsZS1zZHQucGF0Y2gKQEAgLTAsMCArMSwxMTMgQEAKK0Zyb20gNjU3M2FlYzAwYWRhMzVjNDhjMTgzOGM4NDkxY2U4Zjc3OThhZTk5MyBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CitEYXRlOiBGcmksIDI5IE1hciAyMDEzIDA5OjI4OjEwICswNDAwCitTdWJqZWN0OiBbUEFUQ0ggMjMvNDZdIERpc2FibGUgc2R0LgorCitXZSBkb24ndCBsaXN0IGR0cmFjZSBpbiBERVBFTkRTIHNvIHdlIHNob3VsZG4ndCBiZSBkZXBlbmRpbmcgb24gdGhpcyBoZWFkZXIuCitJdCBtYXkgb3IgbWF5IG5vdCBleGlzdCBmcm9tIHByZWl2b3VzIGJ1aWxkcyB0aG91Z2guIFRvIGJlIGRldGVybWluc3RpYywgZGlzYWJsZQorc2R0LmggdXNhZ2UgYWx3YXlzLiBUaGlzIGF2b2lkcyBidWlsZCBmYWlsdXJlcyBpZiB0aGUgaGVhZGVyIGlzIHJlbW92ZWQgYWZ0ZXIgY29uZmlndXJlCitidXQgYmVmb3JlIGxpYmdjYyBpcyBjb21waWxlZCBmb3IgZXhhbXBsZS4KKworUlAgMjAxMi84LzcKKworU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KKworRGlzYWJsZSBzZHQgZm9yIGxpYnN0ZGMrKy12My4KKworU2lnbmVkLW9mZi1ieTogUm9iZXJ0IFlhbmcgPGxpZXpoaS55YW5nQHdpbmRyaXZlci5jb20+CisKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbaGFja10KKy0tLQorIGdjYy9jb25maWd1cmUgICAgICAgICAgICAgfCAxMiArKysrKystLS0tLS0KKyBnY2MvY29uZmlndXJlLmFjICAgICAgICAgIHwgMTggKysrKysrKysrLS0tLS0tLS0tCisgbGlic3RkYysrLXYzL2NvbmZpZ3VyZSAgICB8ICA2ICsrKy0tLQorIGxpYnN0ZGMrKy12My9jb25maWd1cmUuYWMgfCAgMiArLQorIDQgZmlsZXMgY2hhbmdlZCwgMTkgaW5zZXJ0aW9ucygrKSwgMTkgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9nY2MvY29uZmlndXJlIGIvZ2NjL2NvbmZpZ3VyZQoraW5kZXggMzg5YjZkNS4uNzNjMjY0ZCAxMDA3NTUKKy0tLSBhL2djYy9jb25maWd1cmUKKysrKyBiL2djYy9jb25maWd1cmUKK0BAIC0yODUyOCwxMiArMjg1MjgsMTIgQEAgZmkKKyB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIHN5cy9zZHQuaCBpbiB0aGUgdGFyZ2V0IEMgbGlicmFyeSIgPiY1CisgJGFzX2VjaG9fbiAiY2hlY2tpbmcgc3lzL3NkdC5oIGluIHRoZSB0YXJnZXQgQyBsaWJyYXJ5Li4uICIgPiY2OyB9CisgaGF2ZV9zeXNfc2R0X2g9bm8KKy1pZiB0ZXN0IC1mICR0YXJnZXRfaGVhZGVyX2Rpci9zeXMvc2R0Lmg7IHRoZW4KKy0gIGhhdmVfc3lzX3NkdF9oPXllcworLQorLSRhc19lY2hvICIjZGVmaW5lIEhBVkVfU1lTX1NEVF9IIDEiID4+Y29uZmRlZnMuaAorLQorLWZpCisrI2lmIHRlc3QgLWYgJHRhcmdldF9oZWFkZXJfZGlyL3N5cy9zZHQuaDsgdGhlbgorKyMgIGhhdmVfc3lzX3NkdF9oPXllcworKyMKKysjJGFzX2VjaG8gIiNkZWZpbmUgSEFWRV9TWVNfU0RUX0ggMSIgPj5jb25mZGVmcy5oCisrIworKyNmaQorIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkaGF2ZV9zeXNfc2R0X2giID4mNQorICRhc19lY2hvICIkaGF2ZV9zeXNfc2R0X2giID4mNjsgfQorIAorZGlmZiAtLWdpdCBhL2djYy9jb25maWd1cmUuYWMgYi9nY2MvY29uZmlndXJlLmFjCitpbmRleCA5MWFjODAwLi5jZWNmMTIxIDEwMDY0NAorLS0tIGEvZ2NjL2NvbmZpZ3VyZS5hYworKysrIGIvZ2NjL2NvbmZpZ3VyZS5hYworQEAgLTU1MTQsMTUgKzU1MTQsMTUgQEAgZmkKKyBBQ19TVUJTVChbZW5hYmxlX2RlZmF1bHRfc3NwXSkKKyAKKyAjIFRlc3QgZm9yIDxzeXMvc2R0Lmg+IG9uIHRoZSB0YXJnZXQuCistR0NDX1RBUkdFVF9URU1QTEFURShbSEFWRV9TWVNfU0RUX0hdKQorLUFDX01TR19DSEVDS0lORyhzeXMvc2R0LmggaW4gdGhlIHRhcmdldCBDIGxpYnJhcnkpCistaGF2ZV9zeXNfc2R0X2g9bm8KKy1pZiB0ZXN0IC1mICR0YXJnZXRfaGVhZGVyX2Rpci9zeXMvc2R0Lmg7IHRoZW4KKy0gIGhhdmVfc3lzX3NkdF9oPXllcworLSAgQUNfREVGSU5FKEhBVkVfU1lTX1NEVF9ILCAxLAorLSAgICAgICAgICAgIFtEZWZpbmUgaWYgeW91ciB0YXJnZXQgQyBsaWJyYXJ5IHByb3ZpZGVzIHN5cy9zZHQuaF0pCistZmkKKy1BQ19NU0dfUkVTVUxUKCRoYXZlX3N5c19zZHRfaCkKKysjR0NDX1RBUkdFVF9URU1QTEFURShbSEFWRV9TWVNfU0RUX0hdKQorKyNBQ19NU0dfQ0hFQ0tJTkcoc3lzL3NkdC5oIGluIHRoZSB0YXJnZXQgQyBsaWJyYXJ5KQorKyNoYXZlX3N5c19zZHRfaD1ubworKyNpZiB0ZXN0IC1mICR0YXJnZXRfaGVhZGVyX2Rpci9zeXMvc2R0Lmg7IHRoZW4KKysjICBoYXZlX3N5c19zZHRfaD15ZXMKKysjICBBQ19ERUZJTkUoSEFWRV9TWVNfU0RUX0gsIDEsCisrIyAgICAgICAgICAgIFtEZWZpbmUgaWYgeW91ciB0YXJnZXQgQyBsaWJyYXJ5IHByb3ZpZGVzIHN5cy9zZHQuaF0pCisrI2ZpCisrI0FDX01TR19SRVNVTFQoJGhhdmVfc3lzX3NkdF9oKQorIAorICMgQ2hlY2sgaWYgVEZtb2RlIGxvbmcgZG91YmxlIHNob3VsZCBiZSB1c2VkIGJ5IGRlZmF1bHQgb3Igbm90LgorICMgU29tZSBnbGliYyB0YXJnZXRzIHVzZWQgREZtb2RlIGxvbmcgZG91YmxlLCBidXQgd2l0aCBnbGliYyAyLjQKK2RpZmYgLS1naXQgYS9saWJzdGRjKystdjMvY29uZmlndXJlIGIvbGlic3RkYysrLXYzL2NvbmZpZ3VyZQoraW5kZXggOGE1NDgxYy4uNmE0MGU5MiAxMDA3NTUKKy0tLSBhL2xpYnN0ZGMrKy12My9jb25maWd1cmUKKysrKyBiL2xpYnN0ZGMrKy12My9jb25maWd1cmUKK0BAIC0yMTczNSwxMSArMjE3MzUsMTEgQEAgYWNfY29tcGlsZT0nJENDIC1jICRDRkxBR1MgJENQUEZMQUdTIGNvbmZ0ZXN0LiRhY19leHQgPiY1JworIGFjX2xpbms9JyRDQyAtbyBjb25mdGVzdCRhY19leGVleHQgJENGTEFHUyAkQ1BQRkxBR1MgJExERkxBR1MgY29uZnRlc3QuJGFjX2V4dCAkTElCUyA+JjUnCisgYWNfY29tcGlsZXJfZ251PSRhY19jdl9jX2NvbXBpbGVyX2dudQorIAorLSAgaWYgdGVzdCAkZ2xpYmN4eF9jdl9zeXNfc2R0X2ggPSB5ZXM7IHRoZW4KKysjICBpZiB0ZXN0ICRnbGliY3h4X2N2X3N5c19zZHRfaCA9IHllczsgdGhlbgorIAorLSRhc19lY2hvICIjZGVmaW5lIEhBVkVfU1lTX1NEVF9IIDEiID4+Y29uZmRlZnMuaAorKyMkYXNfZWNobyAiI2RlZmluZSBIQVZFX1NZU19TRFRfSCAxIiA+PmNvbmZkZWZzLmgKKyAKKy0gIGZpCisrIyAgZmkKKyAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkZ2xpYmN4eF9jdl9zeXNfc2R0X2giID4mNQorICRhc19lY2hvICIkZ2xpYmN4eF9jdl9zeXNfc2R0X2giID4mNjsgfQorIAorZGlmZiAtLWdpdCBhL2xpYnN0ZGMrKy12My9jb25maWd1cmUuYWMgYi9saWJzdGRjKystdjMvY29uZmlndXJlLmFjCitpbmRleCA5ZTE5ZTk5Li4wMDc3ZmZkIDEwMDY0NAorLS0tIGEvbGlic3RkYysrLXYzL2NvbmZpZ3VyZS5hYworKysrIGIvbGlic3RkYysrLXYzL2NvbmZpZ3VyZS5hYworQEAgLTIzMCw3ICsyMzAsNyBAQCBHTElCQ1hYX0NIRUNLX1NDX05QUk9DRVNTT1JTX09OTE4KKyBHTElCQ1hYX0NIRUNLX1NDX05QUk9DX09OTE4KKyBHTElCQ1hYX0NIRUNLX1BUSFJFQURTX05VTV9QUk9DRVNTT1JTX05QCisgR0xJQkNYWF9DSEVDS19TWVNDVExfSFdfTkNQVQorLUdMSUJDWFhfQ0hFQ0tfU0RUX0gKKysjR0xJQkNYWF9DSEVDS19TRFRfSAorIAorICMgQ2hlY2sgZm9yIGF2YWlsYWJsZSBoZWFkZXJzLgorIEFDX0NIRUNLX0hFQURFUlMoW2VuZGlhbi5oIGV4ZWNpbmZvLmggZmxvYXQuaCBmcC5oIGllZWVmcC5oIGludHR5cGVzLmggXAorLS0gCisyLjguMgorCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNi4yLzAwMjQtbGlidG9vbC5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy02LjIvMDAyNC1saWJ0b29sLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFmNzNiNWQKLS0tIC9kZXYvbnVsbAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNi4yLzAwMjQtbGlidG9vbC5wYXRjaApAQCAtMCwwICsxLDQyIEBACitGcm9tIDZjMGFhNWMyNTM4ODI5MjQ4NTQ3MTk3NzE4MDM3ZmYwYjk3ODg2NzYgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorRGF0ZTogRnJpLCAyOSBNYXIgMjAxMyAwOToyOToxMSArMDQwMAorU3ViamVjdDogW1BBVENIIDI0LzQ2XSBsaWJ0b29sCisKK2xpYnN0ZGMrKyBmcm9tIGdjYy1ydW50aW1lIGdldHMgY3JlYXRlZCB3aXRoIC1ycGF0aD0vdXNyL2xpYi8uLi9saWIgZm9yIHFlbXV4ODYtNjQKK3doZW4gcnVubmluZyBvbiBhbSB4ODZfNjQgYnVpbGQgaG9zdC4KKworVGhpcyBwYXRjaCBzdG9wcyB0aGlzIHNwZWFkaW5nIHRvIGxpYmRpciBpbiB0aGUgbGlic3RkYysrLmxhIGZpbGUgd2l0aGluIGxpYnRvb2wuCitBcmd1YWJseSwgaXQgc2hvdWxkbid0IGJlIHBhc3NpbmcgdGhpcyBpbnRvIGxpYnRvb2wgaW4gdGhlIGZpcnN0IHBsYWNlIGJ1dAorZm9yIG5vdyB0aGlzIHJlc29sdmVzIHRoZSBuYXN0aWVzdCBwcm9ibGVtcyB0aGlzIGNhdXNlcy4KKworZnVuY19ub3JtYWxfYWJzcGF0aCB3b3VsZCByZXNvbHZlIGFuIGVtcHR5IHBhdGggdG8gYHB3ZGAgc28gd2UgbmVlZAordG8gZmlsdGVyIHRoZSB6ZXJvIGNhc2UuCisKK1JQIDIwMTIvOC8yNAorCitTaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKy0tLQorIGx0bWFpbi5zaCB8IDQgKysrKworIDEgZmlsZSBjaGFuZ2VkLCA0IGluc2VydGlvbnMoKykKKworZGlmZiAtLWdpdCBhL2x0bWFpbi5zaCBiL2x0bWFpbi5zaAoraW5kZXggOTUwM2VjOC4uMDEyMWZiYSAxMDA2NDQKKy0tLSBhL2x0bWFpbi5zaAorKysrIGIvbHRtYWluLnNoCitAQCAtNjM1OSw2ICs2MzU5LDEwIEBAIGZ1bmNfbW9kZV9saW5rICgpCisgCWZ1bmNfd2FybmluZyAiaWdub3JpbmcgbXVsdGlwbGUgXGAtcnBhdGgncyBmb3IgYSBsaWJ0b29sIGxpYnJhcnkiCisgCisgICAgICAgaW5zdGFsbF9saWJkaXI9IiQxIgorKyAgICAgIGlmIHRlc3QgLW4gIiRpbnN0YWxsX2xpYmRpciI7IHRoZW4KKysJZnVuY19ub3JtYWxfYWJzcGF0aCAiJGluc3RhbGxfbGliZGlyIgorKwlpbnN0YWxsX2xpYmRpcj0kZnVuY19ub3JtYWxfYWJzcGF0aF9yZXN1bHQKKysgICAgICBmaQorIAorICAgICAgIG9sZGxpYnM9CisgICAgICAgaWYgdGVzdCAteiAiJHJwYXRoIjsgdGhlbgorLS0gCisyLjguMgorCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNi4yLzAwMjUtZ2NjLWFybXY0LXBhc3MtZml4LXY0YngtdG8tbGlua2VyLXRvLXN1cHBvcnQtRUFCSS5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy02LjIvMDAyNS1nY2MtYXJtdjQtcGFzcy1maXgtdjRieC10by1saW5rZXItdG8tc3VwcG9ydC1FQUJJLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNiN2VlNDkKLS0tIC9kZXYvbnVsbAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNi4yLzAwMjUtZ2NjLWFybXY0LXBhc3MtZml4LXY0YngtdG8tbGlua2VyLXRvLXN1cHBvcnQtRUFCSS5wYXRjaApAQCAtMCwwICsxLDQzIEBACitGcm9tIGIxMjYzYTQ4NTUzY2U3NWY4YzNiZWQ0ZmUxMjEyMmFmNTc4NDU1NjcgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorRGF0ZTogRnJpLCAyOSBNYXIgMjAxMyAwOTozMDozMiArMDQwMAorU3ViamVjdDogW1BBVENIIDI1LzQ2XSBnY2M6IGFybXY0OiBwYXNzIGZpeC12NGJ4IHRvIGxpbmtlciB0byBzdXBwb3J0IEVBQkkuCisKK1RoZSBMSU5LX1NQRUMgZm9yIGxpbnV4IGdldHMgb3ZlcndyaXR0ZW4gYnkgbGludXgtZWFiaS5oIHdoaWNoCittZWFucyB0aGUgdmFsdWUgb2YgVEFSR0VUX0ZJWF9WNEJYX1NQRUMgZ2V0cyBsb3N0IGFuZCBhcyBhIHJlc3VsdAordGhlIG9wdGlvbiBpcyBub3QgcGFzc2VkIHRvIGxpbmtlciB3aGVuIGNob3NpbmcgbWFyY2g9YXJtdjQKK1RoaXMgcGF0Y2ggcmVkZWZpbmVzIHRoaXMgaW4gbGludXgtZWFiaS5oIGFuZCByZWluc2VydHMgaXQKK2ZvciBlYWJpIGRlZmF1bHRpbmcgdG9vbGNoYWlucy4KKworV2UgbWlnaHQgd2FudCB0byBzZW5kIGl0IHVwc3RyZWFtLgorCitTaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKy0tLQorIGdjYy9jb25maWcvYXJtL2xpbnV4LWVhYmkuaCB8IDYgKysrKystCisgMSBmaWxlIGNoYW5nZWQsIDUgaW5zZXJ0aW9ucygrKSwgMSBkZWxldGlvbigtKQorCitkaWZmIC0tZ2l0IGEvZ2NjL2NvbmZpZy9hcm0vbGludXgtZWFiaS5oIGIvZ2NjL2NvbmZpZy9hcm0vbGludXgtZWFiaS5oCitpbmRleCA0MDEwNDM1Li5hYWVhMWM5IDEwMDY0NAorLS0tIGEvZ2NjL2NvbmZpZy9hcm0vbGludXgtZWFiaS5oCisrKysgYi9nY2MvY29uZmlnL2FybS9saW51eC1lYWJpLmgKK0BAIC05NCwxMCArOTQsMTQgQEAKKyAjZGVmaW5lIE1VU0xfRFlOQU1JQ19MSU5LRVIgXAorICAgIi9saWIvbGQtbXVzbC1hcm0iIE1VU0xfRFlOQU1JQ19MSU5LRVJfRSAiJXttZmxvYXQtYWJpPWhhcmQ6aGZ9LnNvLjEiCisgCisrLyogRm9yIGFybXY0IHdlIHBhc3MgLS1maXgtdjRieCB0byBsaW5rZXIgdG8gc3VwcG9ydCBFQUJJICovCisrI3VuZGVmIFRBUkdFVF9GSVhfVjRCWF9TUEVDCisrI2RlZmluZSBUQVJHRVRfRklYX1Y0QlhfU1BFQyAiJXttY3B1PWFybTh8bWNwdT1hcm04MTB8bWNwdT1zdHJvbmdhcm0qfG1hcmNoPWFybXY0OiAtLWZpeC12NGJ4fSIKKysKKyAvKiBBdCB0aGlzIHBvaW50LCBicGFiaS5oIHdpbGwgaGF2ZSBjbG9iYmVyZWQgTElOS19TUEVDLiAgV2Ugd2FudCB0bworICAgIHVzZSB0aGUgR05VL0xpbnV4IHZlcnNpb24sIG5vdCB0aGUgZ2VuZXJpYyBCUEFCSSB2ZXJzaW9uLiAgKi8KKyAjdW5kZWYgIExJTktfU1BFQworLSNkZWZpbmUgTElOS19TUEVDIEVBQklfTElOS19TUEVDCQkJCQlcCisrI2RlZmluZSBMSU5LX1NQRUMgVEFSR0VUX0ZJWF9WNEJYX1NQRUMgRUFCSV9MSU5LX1NQRUMJCQlcCisgICBMSU5VWF9PUl9BTkRST0lEX0xEIChMSU5VWF9UQVJHRVRfTElOS19TUEVDLAkJCQlcCisgCQkgICAgICAgTElOVVhfVEFSR0VUX0xJTktfU1BFQyAiICIgQU5EUk9JRF9MSU5LX1NQRUMpCisgCistLSAKKzIuOC4yCisKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy02LjIvMDAyNi1Vc2UtdGhlLW11bHRpbGliLWNvbmZpZy1maWxlcy1mcm9tLUItaW5zdGVhZC1vZi11c2luLnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTYuMi8wMDI2LVVzZS10aGUtbXVsdGlsaWItY29uZmlnLWZpbGVzLWZyb20tQi1pbnN0ZWFkLW9mLXVzaW4ucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmUyNWJlNgotLS0gL2Rldi9udWxsCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy02LjIvMDAyNi1Vc2UtdGhlLW11bHRpbGliLWNvbmZpZy1maWxlcy1mcm9tLUItaW5zdGVhZC1vZi11c2luLnBhdGNoCkBAIC0wLDAgKzEsMTAyIEBACitGcm9tIGI1YzMwNWZjMjUxMjk5ZjJlMzI4NDEwYjE4Y2ZiNTVjNzViNWYwMzggTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorRGF0ZTogRnJpLCAyOSBNYXIgMjAxMyAwOTozMzowNCArMDQwMAorU3ViamVjdDogW1BBVENIIDI2LzQ2XSBVc2UgdGhlIG11bHRpbGliIGNvbmZpZyBmaWxlcyBmcm9tICR7Qn0gaW5zdGVhZCBvZgorIHVzaW5nIHRoZSBvbmVzIGZyb20gJHtTfQorCitVc2UgdGhlIG11bHRpbGliIGNvbmZpZyBmaWxlcyBmcm9tICR7Qn0gaW5zdGVhZCBvZiB1c2luZyB0aGUgb25lcyBmcm9tICR7U30KK3NvIHRoYXQgdGhlIHNvdXJjZSBjYW4gYmUgc2hhcmVkIGJldHdlZW4gZ2NjLWNyb3NzLWluaXRpYWwsCitnY2MtY3Jvc3MtaW50ZXJtZWRpYXRlLCBnY2MtY3Jvc3MsIGdjYy1ydW50aW1lLCBhbmQgYWxzbyB0aGUgc2RrIGJ1aWxkLgorCitTaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorU2lnbmVkLW9mZi1ieTogQ29uc3RhbnRpbiBNdXNjYSA8Y29uc3RhbnRpbngubXVzY2FAaW50ZWwuY29tPgorCitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW2NvbmZpZ3VyYXRpb25dCistLS0KKyBnY2MvY29uZmlndXJlICAgIHwgMjIgKysrKysrKysrKysrKysrKysrLS0tLQorIGdjYy9jb25maWd1cmUuYWMgfCAyMiArKysrKysrKysrKysrKysrKystLS0tCisgMiBmaWxlcyBjaGFuZ2VkLCAzNiBpbnNlcnRpb25zKCspLCA4IGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvZ2NjL2NvbmZpZ3VyZSBiL2djYy9jb25maWd1cmUKK2luZGV4IDczYzI2NGQuLjM3NzI1M2UgMTAwNzU1CistLS0gYS9nY2MvY29uZmlndXJlCisrKysgYi9nY2MvY29uZmlndXJlCitAQCAtMTIxMTAsMTAgKzEyMTEwLDIwIEBAIGRvbmUKKyB0bWFrZV9maWxlXz0KKyBmb3IgZiBpbiAke3RtYWtlX2ZpbGV9CisgZG8KKy0JaWYgdGVzdCAtZiAke3NyY2Rpcn0vY29uZmlnLyRmCistCXRoZW4KKy0JCXRtYWtlX2ZpbGVfPSIke3RtYWtlX2ZpbGVffSBcJChzcmNkaXIpL2NvbmZpZy8kZiIKKy0JZmkKKysgIGNhc2UgJGYgaW4KKysgICAgKi90LWxpbnV4NjQgKQorKyAgICAgICBpZiB0ZXN0IC1mIC4vY29uZmlnLyRmCisrICAgICAgIHRoZW4KKysgICAgICAgICB0bWFrZV9maWxlXz0iJHt0bWFrZV9maWxlX30gLi9jb25maWcvJGYiCisrICAgICAgIGZpCisrICAgICAgIDs7CisrICAgICogKQorKyAgICAgICBpZiB0ZXN0IC1mICR7c3JjZGlyfS9jb25maWcvJGYKKysgICAgICAgdGhlbgorKyAgICAgICAgIHRtYWtlX2ZpbGVfPSIke3RtYWtlX2ZpbGVffSBcJChzcmNkaXIpL2NvbmZpZy8kZiIKKysgICAgICAgZmkKKysgICAgICAgOzsKKysgIGVzYWMKKyBkb25lCisgdG1ha2VfZmlsZT0iJHt0bWFrZV9maWxlX30iCisgCitAQCAtMTIxMjQsNiArMTIxMzQsMTAgQEAgdG1fZmlsZV9saXN0PSJvcHRpb25zLmgiCisgdG1faW5jbHVkZV9saXN0PSJvcHRpb25zLmggaW5zbi1jb25zdGFudHMuaCIKKyBmb3IgZiBpbiAkdG1fZmlsZTsgZG8KKyAgIGNhc2UgJGYgaW4KKysgICAgKi9saW51eDY0LmggKQorKyAgICAgICB0bV9maWxlX2xpc3Q9IiR7dG1fZmlsZV9saXN0fSAuL2NvbmZpZy8kZiIKKysgICAgICAgdG1faW5jbHVkZV9saXN0PSIke3RtX2luY2x1ZGVfbGlzdH0gLi9jb25maWcvJGYiCisrICAgICAgIDs7CisgICAgIC4vKiApCisgICAgICAgIGY9YGVjaG8gJGYgfCBzZWQgJ3MvXi4uLy8nYAorICAgICAgICB0bV9maWxlX2xpc3Q9IiR7dG1fZmlsZV9saXN0fSAkZiIKK2RpZmYgLS1naXQgYS9nY2MvY29uZmlndXJlLmFjIGIvZ2NjL2NvbmZpZ3VyZS5hYworaW5kZXggY2VjZjEyMS4uNTRlNzYxOSAxMDA2NDQKKy0tLSBhL2djYy9jb25maWd1cmUuYWMKKysrKyBiL2djYy9jb25maWd1cmUuYWMKK0BAIC0xODYzLDEwICsxODYzLDIwIEBAIGRvbmUKKyB0bWFrZV9maWxlXz0KKyBmb3IgZiBpbiAke3RtYWtlX2ZpbGV9CisgZG8KKy0JaWYgdGVzdCAtZiAke3NyY2Rpcn0vY29uZmlnLyRmCistCXRoZW4KKy0JCXRtYWtlX2ZpbGVfPSIke3RtYWtlX2ZpbGVffSBcJChzcmNkaXIpL2NvbmZpZy8kZiIKKy0JZmkKKysgIGNhc2UgJGYgaW4KKysgICAgKi90LWxpbnV4NjQgKQorKyAgICAgICBpZiB0ZXN0IC1mIC4vY29uZmlnLyRmCisrICAgICAgIHRoZW4KKysgICAgICAgICB0bWFrZV9maWxlXz0iJHt0bWFrZV9maWxlX30gLi9jb25maWcvJGYiCisrICAgICAgIGZpCisrICAgICAgIDs7CisrICAgICogKQorKyAgICAgICBpZiB0ZXN0IC1mICR7c3JjZGlyfS9jb25maWcvJGYKKysgICAgICAgdGhlbgorKyAgICAgICAgIHRtYWtlX2ZpbGVfPSIke3RtYWtlX2ZpbGVffSBcJChzcmNkaXIpL2NvbmZpZy8kZiIKKysgICAgICAgZmkKKysgICAgICAgOzsKKysgIGVzYWMKKyBkb25lCisgdG1ha2VfZmlsZT0iJHt0bWFrZV9maWxlX30iCisgCitAQCAtMTg3Nyw2ICsxODg3LDEwIEBAIHRtX2ZpbGVfbGlzdD0ib3B0aW9ucy5oIgorIHRtX2luY2x1ZGVfbGlzdD0ib3B0aW9ucy5oIGluc24tY29uc3RhbnRzLmgiCisgZm9yIGYgaW4gJHRtX2ZpbGU7IGRvCisgICBjYXNlICRmIGluCisrICAgICovbGludXg2NC5oICkKKysgICAgICAgdG1fZmlsZV9saXN0PSIke3RtX2ZpbGVfbGlzdH0gLi9jb25maWcvJGYiCisrICAgICAgIHRtX2luY2x1ZGVfbGlzdD0iJHt0bV9pbmNsdWRlX2xpc3R9IC4vY29uZmlnLyRmIgorKyAgICAgICA7OworICAgICAuLyogKQorICAgICAgICBmPWBlY2hvICRmIHwgc2VkICdzL14uLi8vJ2AKKyAgICAgICAgdG1fZmlsZV9saXN0PSIke3RtX2ZpbGVfbGlzdH0gJGYiCistLSAKKzIuOC4yCisKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy02LjIvMDAyNy1Bdm9pZC11c2luZy1saWJkaXItZnJvbS0ubGEtd2hpY2gtdXN1YWxseS1wb2ludHMtdG8tLnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTYuMi8wMDI3LUF2b2lkLXVzaW5nLWxpYmRpci1mcm9tLS5sYS13aGljaC11c3VhbGx5LXBvaW50cy10by0ucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDFiYmViYwotLS0gL2Rldi9udWxsCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy02LjIvMDAyNy1Bdm9pZC11c2luZy1saWJkaXItZnJvbS0ubGEtd2hpY2gtdXN1YWxseS1wb2ludHMtdG8tLnBhdGNoCkBAIC0wLDAgKzEsMzEgQEAKK0Zyb20gZWI2MTc4YjdmYjQ2NmFlNDI5YzU2MzgwYzZkYmM1NjRhMTZkOTAwYSBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CitEYXRlOiBGcmksIDIwIEZlYiAyMDE1IDA5OjM5OjM4ICswMDAwCitTdWJqZWN0OiBbUEFUQ0ggMjcvNDZdIEF2b2lkIHVzaW5nIGxpYmRpciBmcm9tIC5sYSB3aGljaCB1c3VhbGx5IHBvaW50cyB0byBhCisgaG9zdCBwYXRoCisKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbZW1iZWRkZWQgc3BlY2lmaWNdCisKK1NpZ25lZC1vZmYtYnk6IEpvbmF0aGFuIExpdSA8bmV0MTQ3QGdtYWlsLmNvbT4KK1NpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CistLS0KKyBsdG1haW4uc2ggfCAzICsrKworIDEgZmlsZSBjaGFuZ2VkLCAzIGluc2VydGlvbnMoKykKKworZGlmZiAtLWdpdCBhL2x0bWFpbi5zaCBiL2x0bWFpbi5zaAoraW5kZXggMDEyMWZiYS4uNTJiZGJkYiAxMDA2NDQKKy0tLSBhL2x0bWFpbi5zaAorKysrIGIvbHRtYWluLnNoCitAQCAtNTYyOCw2ICs1NjI4LDkgQEAgZnVuY19tb2RlX2xpbmsgKCkKKyAJICAgIGFic2Rpcj0iJGFic19sYWRpciIKKyAJICAgIGxpYmRpcj0iJGFic19sYWRpciIKKyAJICBlbHNlCisrCSAgICAjIEluc3RlYWQgb2YgdXNpbmcgbGliZGlyIGZyb20gLmxhIHdoaWNoIHVzdWFsbHkgcG9pbnRzIHRvIGEgaG9zdCBwYXRoLAorKwkgICAgIyB1c2UgdGhlIHBhdGggdGhlIC5sYSBpcyBjb250YWluZWQgaW4uCisrCSAgICBsaWJkaXI9IiRhYnNfbGFkaXIiCisgCSAgICBkaXI9IiRsaWJkaXIiCisgCSAgICBhYnNkaXI9IiRsaWJkaXIiCisgCSAgZmkKKy0tIAorMi44LjIKKwpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTYuMi8wMDI4LWV4cG9ydC1DUFAucGF0Y2ggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNi4yLzAwMjgtZXhwb3J0LUNQUC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMjEyNTM5Ci0tLSAvZGV2L251bGwKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTYuMi8wMDI4LWV4cG9ydC1DUFAucGF0Y2gKQEAgLTAsMCArMSw1MyBAQAorRnJvbSA2MTcxODRmMzVlOTc5MzRkOWU2MjY4ZTcxMzc4NTc0ZTJiNzc2YzJiIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KK0RhdGU6IEZyaSwgMjAgRmViIDIwMTUgMDk6NDA6NTkgKzAwMDAKK1N1YmplY3Q6IFtQQVRDSCAyOC80Nl0gZXhwb3J0IENQUAorCitUaGUgT0UgZW52aXJvbm1lbnQgc2V0cyBhbmQgZXhwb3J0cyBDUFAgYXMgYmVpbmcgdGhlIHRhcmdldCBnY2MuIFdoZW4KK2J1aWxkaW5nIGdjYy1jcm9zcy1jYW5hZGlhbiBmb3IgYSBtaW5ndyB0YXJnZXR0ZWQgc2RrLCB0aGUgZm9sbG93aW5nIGNhbiBiZSBmb3VuZAoraW4gYnVpbGQueDg2XzY0LXBva3lzZGstbWluZ3czMi5pNTg2LXBva3ktbGludXgvYnVpbGQteDg2XzY0LWxpbnV4L2xpYmliZXJ0eS9jb25maWcubG9nOgorCitjb25maWd1cmU6MzY0MTogY2hlY2tpbmcgZm9yIF9GSUxFX09GRlNFVF9CSVRTIHZhbHVlIG5lZWRlZCBmb3IgbGFyZ2UgZmlsZXMKK2NvbmZpZ3VyZTozNjY2OiBnY2MgIC1jIC1pc3lzdGVtL21lZGlhL2J1aWxkMS9wb2t5L2J1aWxkL3RtcC9zeXNyb290cy94ODZfNjQtbGludXgvdXNyL2luY2x1ZGUgLU8yIC1waXBlICBjb25mdGVzdC5jID4mNQorY29uZmlndXJlOjM2NjY6ICQ/ID0gMAorY29uZmlndXJlOjM2OTg6IHJlc3VsdDogbm8KK2NvbmZpZ3VyZTozNzg2OiBjaGVja2luZyBob3cgdG8gcnVuIHRoZSBDIHByZXByb2Nlc3NvcgorY29uZmlndXJlOjM4NTY6IHJlc3VsdDogeDg2XzY0LXBva3lzZGstbWluZ3czMi1nY2MgLUUgLS1zeXNyb290PS9tZWRpYS9idWlsZDEvcG9reS9idWlsZC90bXAvc3lzcm9vdHMveDg2XzY0LW5hdGl2ZXNkay1taW5ndzMyLXBva3lzZGstbWluZ3czMgorY29uZmlndXJlOjM4NzY6IHg4Nl82NC1wb2t5c2RrLW1pbmd3MzItZ2NjIC1FIC0tc3lzcm9vdD0vbWVkaWEvYnVpbGQxL3Bva3kvYnVpbGQvdG1wL3N5c3Jvb3RzL3g4Nl82NC1uYXRpdmVzZGstbWluZ3czMi1wb2t5c2RrLW1pbmd3MzIgY29uZnRlc3QuYworY29uZmlndXJlOjM4NzY6ICQ/ID0gMAorCitOb3RlIHRoaXMgaXMgYSAqYnVpbGQqIHRhcmdldCAoaW4gYnVpbGQteDg2XzY0LWxpbnV4KSBzbyBpdCBzaG91bGQgYmUKK3VzaW5nIHRoZSBob3N0ICJnY2MiLCBub3QgeDg2XzY0LXBva3lzZGstbWluZ3czMi1nY2MuIFNpbmNlIHRoZSBtaW5ndzMyCitoZWFkZXJzIGFyZSB2ZXJ5IGRpZmZlcmVudCwgdXNpbmcgdGhlIHdyb25nIGNwcCBpcyBhIHJlYWwgcHJvYmxlbS4gSXQgaXMgbGVha2luZworaW50byBjb25maWd1cmUgdGhyb3VnaCB0aGUgQ1BQIHZhcmlhYmxlLiBVbHRpbWF0ZWx5IHRoaXMgbGVhZHMgdG8gYnVpbGQKK2ZhaWx1cmVzIHJlbGF0ZWQgdG8gbm90IGJlaW5nIGFibGUgdG8gaW5jbHVkZSBhIHByb2Nlc3MuaCBmaWxlIGZvciBwZW0tdW5peC5jLgorCitUaGUgZml4IGlzIHRvIGVuc3VyZSB3ZSBleHBvcnQgYSBzYW5lIENQUCB2YWx1ZSBpbnRvIHRoZSBidWlsZAorZW52aXJvbm1lbnQgd2hlbiB1c2luZyBidWlsZCB0YXJnZXRzLiBXZSBjb3VsZCBkZWZpbmUgYSBDUFBfRk9SX0JVSUxEIHZhbHVlIHdoaWNoIG1heSBiZQordGhlIHZlcnNpb24gd2hpY2ggbmVlZHMgdG8gYmUgdXBzdHJlYW1lZCBidXQgZm9yIG5vdywgdGhpcyBmaXggaXMgZ29vZCBlbm91Z2ggdG8KK2F2b2lkIHRoZSBwcm9ibGVtLgorCitSUCAyMi8wOC8yMDEzCisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitTaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorLS0tCisgTWFrZWZpbGUuaW4gfCAxICsKKyAxIGZpbGUgY2hhbmdlZCwgMSBpbnNlcnRpb24oKykKKworZGlmZiAtLWdpdCBhL01ha2VmaWxlLmluIGIvTWFrZWZpbGUuaW4KK2luZGV4IDE1MjJlMzkuLmJlYjliOWEgMTAwNjQ0CistLS0gYS9NYWtlZmlsZS5pbgorKysrIGIvTWFrZWZpbGUuaW4KK0BAIC0xNDksNiArMTQ5LDcgQEAgQlVJTERfRVhQT1JUUyA9IFwKKyAJQVI9IiQoQVJfRk9SX0JVSUxEKSI7IGV4cG9ydCBBUjsgXAorIAlBUz0iJChBU19GT1JfQlVJTEQpIjsgZXhwb3J0IEFTOyBcCisgCUNDPSIkKENDX0ZPUl9CVUlMRCkiOyBleHBvcnQgQ0M7IFwKKysJQ1BQPSIkKENDX0ZPUl9CVUlMRCkgLUUiOyBleHBvcnQgQ1BQOyBcCisgCUNGTEFHUz0iJChDRkxBR1NfRk9SX0JVSUxEKSI7IGV4cG9ydCBDRkxBR1M7IFwKKyAJQ09ORklHX1NIRUxMPSIkKFNIRUxMKSI7IGV4cG9ydCBDT05GSUdfU0hFTEw7IFwKKyAJQ1hYPSIkKENYWF9GT1JfQlVJTEQpIjsgZXhwb3J0IENYWDsgXAorLS0gCisyLjguMgorCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNi4yLzAwMjktRW5hYmxlLVNQRS1BbHRpVmVjLWdlbmVyYXRpb24tb24tcG93ZXBjLWxpbnV4LXRhcmdldC5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy02LjIvMDAyOS1FbmFibGUtU1BFLUFsdGlWZWMtZ2VuZXJhdGlvbi1vbi1wb3dlcGMtbGludXgtdGFyZ2V0LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ3YjljMGQKLS0tIC9kZXYvbnVsbAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNi4yLzAwMjktRW5hYmxlLVNQRS1BbHRpVmVjLWdlbmVyYXRpb24tb24tcG93ZXBjLWxpbnV4LXRhcmdldC5wYXRjaApAQCAtMCwwICsxLDU2IEBACitGcm9tIGUxNDA3MDA5NzZlM2I3ZWI0MjUwYjFmZmRlOWJjMTY0OTQ0NTY5MDMgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBBbGV4YW5kcnUtQ2V6YXIgU2FyZGFuIDxhbGV4YW5kcnUuc2FyZGFuQGZyZWVzY2FsZS5jb20+CitEYXRlOiBXZWQsIDUgRmViIDIwMTQgMTY6NTI6MzEgKzAyMDAKK1N1YmplY3Q6IFtQQVRDSCAyOS80Nl0gRW5hYmxlIFNQRSAmIEFsdGlWZWMgZ2VuZXJhdGlvbiBvbiBwb3dlcGMqbGludXggdGFyZ2V0CisKK1doZW4gaXMgY29uZmlndXJlZCB3aXRoIC0tdGFyZ2V0PXBvd2VycGMtbGludXgsIHRoZSByZXN1bHRpbmcgR0NDIHdpbGwKK25vdCBiZSBhYmxlIHRvIGdlbmVyYXRlIGNvZGUgZm9yIFNQRSB0YXJnZXRzIChlNTAwdjEvdjIpLgorR0NDIGNvbmZpZ3VyZWQgd2l0aCAtLXRhcmdldD1wb3dlcnBjLWxpbnV4c3BlIHdpbGwgbm90IGJlIGFibGUgdG8KK2dlbmVyYXRlIEFsdGlWZWMgaW5zdHJ1Y3Rpb25zIChmb3IgZTY1MDApLgorVGhpcyBwYXRjaCBtb2RpZmllcyB0aGUgY29uZmlndXJlZCBmaWxlIHN1Y2ggdGhhdCBTUEUgb3IgQWx0aVZlYyBjb2RlCitjYW4gYmUgZ2VuZXJhdGVkIHdoZW4gZ2NjIGlzIGNvbmZpZ3VyZWQgd2l0aCAtLXRhcmdldD1wb3dlcnBjLWxpbnV4LgorVGhlIEFCSSBhbmQgc3BlY2lmZmljIGluc3RydWN0aW9ucyBjYW4gYmUgc2VsZWN0ZWQgdGhyb3VnaCB0aGUKKyItbWFiaT1zcGUgb3IgLW1hYmk9YWx0aXZlYyIgYW5kIHRoZSAiLW1zcGUgb3IgLW1hbHRpdmVjIiBwYXJhbWV0ZXJzLgorCitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW2NvbmZpZ3VyYXRpb25dCisKK1NpZ25lZC1vZmYtYnk6IEFsZXhhbmRydS1DZXphciBTYXJkYW4gPGFsZXhhbmRydS5zYXJkYW5AZnJlZXNjYWxlLmNvbT4KKy0tLQorIGdjYy9jb25maWcuZ2NjICAgICAgICAgICAgICAgfCA5ICsrKysrKysrLQorIGdjYy9jb25maWcvcnM2MDAwL2xpbnV4c3BlLmggfCAzIC0tLQorIDIgZmlsZXMgY2hhbmdlZCwgOCBpbnNlcnRpb25zKCspLCA0IGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvZ2NjL2NvbmZpZy5nY2MgYi9nY2MvY29uZmlnLmdjYworaW5kZXggOWM2ZDE1Ni4uMThjZmY1YSAxMDA2NDQKKy0tLSBhL2djYy9jb25maWcuZ2NjCisrKysgYi9nY2MvY29uZmlnLmdjYworQEAgLTIzOTIsNyArMjM5MiwxNCBAQCBwb3dlcnBjLSotcnRlbXMqKQorIAl0bWFrZV9maWxlPSIke3RtYWtlX2ZpbGV9IHJzNjAwMC90LWZwcnVsZXMgcnM2MDAwL3QtcnRlbXMgcnM2MDAwL3QtcHBjY29tbSIKKyAJOzsKKyBwb3dlcnBjKi0qLWxpbnV4KikKKy0JdG1fZmlsZT0iJHt0bV9maWxlfSBkYnhlbGYuaCBlbGZvcy5oIGdudS11c2VyLmggZnJlZWJzZC1zcGVjLmggcnM2MDAwL3N5c3Y0LmgiCisrCWNhc2UgJHt0YXJnZXR9IGluCisrCSAgICBwb3dlcnBjKi0qLWxpbnV4KnNwZSogfCBwb3dlcnBjKi0qLWxpbnV4KmFsdGl2ZWMqKQorKwkJdG1fZmlsZT0iJHt0bV9maWxlfSBkYnhlbGYuaCBlbGZvcy5oIGdudS11c2VyLmggZnJlZWJzZC1zcGVjLmggcnM2MDAwL3N5c3Y0LmgiCisrCQk7OworKwkgICAgKikKKysJCXRtX2ZpbGU9IiR7dG1fZmlsZX0gZGJ4ZWxmLmggZWxmb3MuaCBnbnUtdXNlci5oIGZyZWVic2Qtc3BlYy5oIHJzNjAwMC9zeXN2NC5oIHJzNjAwMC9saW51eGFsdGl2ZWMuaCByczYwMDAvbGludXhzcGUuaCByczYwMDAvZTUwMC5oIgorKwkJOzsKKysJZXNhYworIAlleHRyYV9vcHRpb25zPSIke2V4dHJhX29wdGlvbnN9IHJzNjAwMC9zeXN2NC5vcHQiCisgCXRtYWtlX2ZpbGU9IiR7dG1ha2VfZmlsZX0gcnM2MDAwL3QtZnBydWxlcyByczYwMDAvdC1wcGNjb21tIgorIAlleHRyYV9vYmpzPSIkZXh0cmFfb2JqcyByczYwMDAtbGludXgubyIKK2RpZmYgLS1naXQgYS9nY2MvY29uZmlnL3JzNjAwMC9saW51eHNwZS5oIGIvZ2NjL2NvbmZpZy9yczYwMDAvbGludXhzcGUuaAoraW5kZXggMzU2MjNjZC4uZjc0ZTAwZCAxMDA2NDQKKy0tLSBhL2djYy9jb25maWcvcnM2MDAwL2xpbnV4c3BlLmgKKysrKyBiL2djYy9jb25maWcvcnM2MDAwL2xpbnV4c3BlLmgKK0BAIC0yNyw2ICsyNywzIEBACisgI3VuZGVmCVRBUkdFVF9ERUZBVUxUCisgI2RlZmluZSBUQVJHRVRfREVGQVVMVCBNQVNLX1NUUklDVF9BTElHTgorICNlbmRpZgorLQorLSN1bmRlZiAgQVNNX0RFRkFVTFRfU1BFQworLSNkZWZpbmUJQVNNX0RFRkFVTFRfU1BFQyAiLW1wcGMgLW1zcGUgLW1lNTAwIgorLS0gCisyLjguMgorCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNi4yLzAwMzAtRGlzYWJsZS10aGUtTVVMVElMSUJfT1NESVJOQU1FUy1hbmQtb3RoZXItbXVsdGlsaWItby5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy02LjIvMDAzMC1EaXNhYmxlLXRoZS1NVUxUSUxJQl9PU0RJUk5BTUVTLWFuZC1vdGhlci1tdWx0aWxpYi1vLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMwOWQwMTkKLS0tIC9kZXYvbnVsbAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNi4yLzAwMzAtRGlzYWJsZS10aGUtTVVMVElMSUJfT1NESVJOQU1FUy1hbmQtb3RoZXItbXVsdGlsaWItby5wYXRjaApAQCAtMCwwICsxLDQyIEBACitGcm9tIDBkZGNiOTVhODY4MzA3NjZmZDAyMTIyZjE5Mzg0ZmM5MjliMzc3YzUgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorRGF0ZTogRnJpLCAyMCBGZWIgMjAxNSAxMDoyMTo1NSArMDAwMAorU3ViamVjdDogW1BBVENIIDMwLzQ2XSBEaXNhYmxlIHRoZSBNVUxUSUxJQl9PU0RJUk5BTUVTIGFuZCBvdGhlciBtdWx0aWxpYgorIG9wdGlvbnMuCisKK0hhcmQgY29kaW5nIHRoZSBNVUxUSUxJQl9PU0RJUk5BTUVTIHdpdGggLi4vbGliNjQgaXMgY2F1c2luZyBwcm9ibGVtcyBvbgorc3lzdGVtcyB3aGVyZSB0aGUgbGliZGlyIGlzIE5PVCBzZXQgdG8gL2xpYjY0LiAgVGhpcyBpcyBhbGxvd2VkIGJ5IHRoZQorQUJJLCBhcworbG9uZyBhcyB0aGUgZHluYW1pYyBsb2FkZXIgaXMgcHJlc2VudCBpbiAvbGliLgorCitXZSBzaW1wbHkgd2FudCB0byB1c2UgdGhlIGRlZmF1bHQgcnVsZXMgaW4gZ2NjIHRvIGZpbmQgYW5kIGNvbmZpZ3VyZSB0aGUKK25vcm1hbCBsaWJkaXIuCisKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZVtPRS1TcGVjaWZpY10KKworU2lnbmVkLW9mZi1ieTogTWFyayBIYXRsZSA8bWFyay5oYXRsZUB3aW5kcml2ZXIuY29tPgorU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KKy0tLQorIGdjYy9jb25maWcvYWFyY2g2NC90LWFhcmNoNjQtbGludXggfCA4ICsrKystLS0tCisgMSBmaWxlIGNoYW5nZWQsIDQgaW5zZXJ0aW9ucygrKSwgNCBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL2djYy9jb25maWcvYWFyY2g2NC90LWFhcmNoNjQtbGludXggYi9nY2MvY29uZmlnL2FhcmNoNjQvdC1hYXJjaDY0LWxpbnV4CitpbmRleCAxY2ZlOWYzLi5kNjg4YWM5IDEwMDY0NAorLS0tIGEvZ2NjL2NvbmZpZy9hYXJjaDY0L3QtYWFyY2g2NC1saW51eAorKysrIGIvZ2NjL2NvbmZpZy9hYXJjaDY0L3QtYWFyY2g2NC1saW51eAorQEAgLTIxLDggKzIxLDggQEAKKyBMSUIxQVNNU1JDICAgPSBhYXJjaDY0L2xpYjFmdW5jcy5hc20KKyBMSUIxQVNNRlVOQ1MgPSBfYWFyY2g2NF9zeW5jX2NhY2hlX3JhbmdlCisgCistQUFSQ0hfQkUgPSAkKGlmICQoZmluZHN0cmluZyBUQVJHRVRfQklHX0VORElBTl9ERUZBVUxUPTEsICQodG1fZGVmaW5lcykpLF9iZSkKKy1NVUxUSUxJQl9PU0RJUk5BTUVTID0gbWFiaS5scDY0PS4uL2xpYjY0JChjYWxsIGlmX211bHRpYXJjaCw6YWFyY2g2NCQoQUFSQ0hfQkUpLWxpbnV4LWdudSkKKy1NVUxUSUFSQ0hfRElSTkFNRSA9ICQoY2FsbCBpZl9tdWx0aWFyY2gsYWFyY2g2NCQoQUFSQ0hfQkUpLWxpbnV4LWdudSkKKysjQUFSQ0hfQkUgPSAkKGlmICQoZmluZHN0cmluZyBUQVJHRVRfQklHX0VORElBTl9ERUZBVUxUPTEsICQodG1fZGVmaW5lcykpLF9iZSkKKysjTVVMVElMSUJfT1NESVJOQU1FUyA9IG1hYmkubHA2ND0uLi9saWI2NCQoY2FsbCBpZl9tdWx0aWFyY2gsOmFhcmNoNjQkKEFBUkNIX0JFKS1saW51eC1nbnUpCisrI01VTFRJQVJDSF9ESVJOQU1FID0gJChjYWxsIGlmX211bHRpYXJjaCxhYXJjaDY0JChBQVJDSF9CRSktbGludXgtZ251KQorIAorLU1VTFRJTElCX09TRElSTkFNRVMgKz0gbWFiaS5pbHAzMj0uLi9saWJpbHAzMgorKyNNVUxUSUxJQl9PU0RJUk5BTUVTICs9IG1hYmkuaWxwMzI9Li4vbGliaWxwMzIKKy0tIAorMi44LjIKKwpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTYuMi8wMDMxLUVuc3VyZS10YXJnZXQtZ2NjLWhlYWRlcnMtY2FuLWJlLWluY2x1ZGVkLnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTYuMi8wMDMxLUVuc3VyZS10YXJnZXQtZ2NjLWhlYWRlcnMtY2FuLWJlLWluY2x1ZGVkLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZiMWNkMGYKLS0tIC9kZXYvbnVsbAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNi4yLzAwMzEtRW5zdXJlLXRhcmdldC1nY2MtaGVhZGVycy1jYW4tYmUtaW5jbHVkZWQucGF0Y2gKQEAgLTAsMCArMSw5OCBAQAorRnJvbSBmYzY2MjE0MzVhNjRhOWQ2OWFhMjUxYjcwMzYxZGE5NGNmMmRiNmJlIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KK0RhdGU6IEZyaSwgMjAgRmViIDIwMTUgMTA6MjU6MTEgKzAwMDAKK1N1YmplY3Q6IFtQQVRDSCAzMS80Nl0gRW5zdXJlIHRhcmdldCBnY2MgaGVhZGVycyBjYW4gYmUgaW5jbHVkZWQKKworVGhlcmUgYXJlIGEgZmV3IGhlYWRlcnMgaW5zdGFsbGVkIGFzIHBhcnQgb2YgdGhlIE9wZW5FbWJlZGRlZAorZ2NjLXJ1bnRpbWUgdGFyZ2V0IChvbXAuaCwgc3NwLyouaCkuIEJlaW5nIGluc3RhbGxlZCBmcm9tIGEgcmVjaXBlCitidWlsdCBmb3IgdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUsIHRoZXNlIGFyZSB3aXRoaW4gdGhlIHRhcmdldAorc3lzcm9vdCBhbmQgbm90IGNyb3NzL25hdGl2ZXNkazsgdGh1cyB0aGV5IHdlcmVuJ3QgYWJsZSB0byBiZQorZm91bmQgYnkgZ2NjIHdpdGggdGhlIGV4aXN0aW5nIHNlYXJjaCBwYXRocy4gQWRkIHN1cHBvcnQgZm9yCitwaWNraW5nIHVwIHRoZXNlIGhlYWRlcnMgdW5kZXIgdGhlIHN5c3Jvb3Qgc3VwcGxpZWQgb24gdGhlIGdjYworY29tbWFuZCBsaW5lIGluIG9yZGVyIHRvIHJlc29sdmUgdGhpcy4KKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK1NpZ25lZC1vZmYtYnk6IFBhdWwgRWdnbGV0b24gPHBhdWwuZWdnbGV0b25AbGludXguaW50ZWwuY29tPgorU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KKy0tLQorIGdjYy9NYWtlZmlsZS5pbiAgfCAyICsrCisgZ2NjL2NwcGRlZmF1bHQuYyB8IDQgKysrKworIGdjYy9kZWZhdWx0cy5oICAgfCA5ICsrKysrKysrKworIGdjYy9nY2MuYyAgICAgICAgfCA3IC0tLS0tLS0KKyA0IGZpbGVzIGNoYW5nZWQsIDE1IGluc2VydGlvbnMoKyksIDcgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9nY2MvTWFrZWZpbGUuaW4gYi9nY2MvTWFrZWZpbGUuaW4KK2luZGV4IDQ1MGNiNzkuLmNjNzU1MzYgMTAwNjQ0CistLS0gYS9nY2MvTWFrZWZpbGUuaW4KKysrKyBiL2djYy9NYWtlZmlsZS5pbgorQEAgLTU5Myw2ICs1OTMsNyBAQCBsaWJleGVjZGlyID0gQGxpYmV4ZWNkaXJACisgCisgIyBEaXJlY3RvcnkgaW4gd2hpY2ggdGhlIGNvbXBpbGVyIGZpbmRzIGxpYnJhcmllcyBldGMuCisgbGlic3ViZGlyID0gJChsaWJkaXIpL2djYy8kKHJlYWxfdGFyZ2V0X25vbmNhbm9uaWNhbCkvJCh2ZXJzaW9uKSQoYWNjZWxfZGlyX3N1ZmZpeCkKKytsaWJzdWJkaXJfdGFyZ2V0ID0gZ2NjLyQodGFyZ2V0X25vbmNhbm9uaWNhbCkvJCh2ZXJzaW9uKQorICMgRGlyZWN0b3J5IGluIHdoaWNoIHRoZSBjb21waWxlciBmaW5kcyBleGVjdXRhYmxlcworIGxpYmV4ZWNzdWJkaXIgPSAkKGxpYmV4ZWNkaXIpL2djYy8kKHJlYWxfdGFyZ2V0X25vbmNhbm9uaWNhbCkvJCh2ZXJzaW9uKSQoYWNjZWxfZGlyX3N1ZmZpeCkKKyAjIERpcmVjdG9yeSBpbiB3aGljaCBhbGwgcGx1Z2luIHJlc291cmNlcyBhcmUgaW5zdGFsbGVkCitAQCAtMjY4OCw2ICsyNjg5LDcgQEAgQ0ZMQUdTLWludGwubyArPSAtRExPQ0FMRURJUj1cIiQobG9jYWxlZGlyKVwiCisgCisgUFJFUFJPQ0VTU09SX0RFRklORVMgPSBcCisgICAtREdDQ19JTkNMVURFX0RJUj1cIiQobGlic3ViZGlyKS9pbmNsdWRlXCIgXAorKyAgLURHQ0NfSU5DTFVERV9TVUJESVJfVEFSR0VUPVwiJChsaWJzdWJkaXJfdGFyZ2V0KS9pbmNsdWRlXCIgXAorICAgLURGSVhFRF9JTkNMVURFX0RJUj1cIiQobGlic3ViZGlyKS9pbmNsdWRlLWZpeGVkXCIgXAorICAgLURHUExVU1BMVVNfSU5DTFVERV9ESVI9XCIkKGdjY19neHhfaW5jbHVkZV9kaXIpXCIgXAorICAgLURHUExVU1BMVVNfSU5DTFVERV9ESVJfQUREX1NZU1JPT1Q9JChnY2NfZ3h4X2luY2x1ZGVfZGlyX2FkZF9zeXNyb290KSBcCitkaWZmIC0tZ2l0IGEvZ2NjL2NwcGRlZmF1bHQuYyBiL2djYy9jcHBkZWZhdWx0LmMKK2luZGV4IDU0YWFmMDYuLjdiNGRkNTEgMTAwNjQ0CistLS0gYS9nY2MvY3BwZGVmYXVsdC5jCisrKysgYi9nY2MvY3BwZGVmYXVsdC5jCitAQCAtNTksNiArNTksMTAgQEAgY29uc3Qgc3RydWN0IGRlZmF1bHRfaW5jbHVkZSBjcHBfaW5jbHVkZV9kZWZhdWx0c1tdCisgICAgIC8qIFRoaXMgaXMgdGhlIGRpciBmb3IgZ2NjJ3MgcHJpdmF0ZSBoZWFkZXJzLiAgKi8KKyAgICAgeyBHQ0NfSU5DTFVERV9ESVIsICJHQ0MiLCAwLCAwLCAwLCAwIH0sCisgI2VuZGlmCisrI2lmZGVmIEdDQ19JTkNMVURFX1NVQkRJUl9UQVJHRVQKKysgICAgLyogVGhpcyBpcyB0aGUgZGlyIGZvciBnY2MncyBwcml2YXRlIGhlYWRlcnMgdW5kZXIgdGhlIHNwZWNpZmllZCBzeXNyb290LiAgKi8KKysgICAgeyBTVEFOREFSRF9TVEFSVEZJTEVfUFJFRklYXzIgR0NDX0lOQ0xVREVfU1VCRElSX1RBUkdFVCwgIkdDQyIsIDAsIDAsIDEsIDAgfSwKKysjZW5kaWYKKyAjaWZkZWYgTE9DQUxfSU5DTFVERV9ESVIKKyAgICAgLyogL3Vzci9sb2NhbC9pbmNsdWRlIGNvbWVzIGJlZm9yZSB0aGUgZml4aW5jbHVkZWQgaGVhZGVyIGZpbGVzLiAgKi8KKyAgICAgeyBMT0NBTF9JTkNMVURFX0RJUiwgMCwgMCwgMSwgMSwgMiB9LAorZGlmZiAtLWdpdCBhL2djYy9kZWZhdWx0cy5oIGIvZ2NjL2RlZmF1bHRzLmgKK2luZGV4IDNlMTgzMzguLjBmMzE3ZjIgMTAwNjQ0CistLS0gYS9nY2MvZGVmYXVsdHMuaAorKysrIGIvZ2NjL2RlZmF1bHRzLmgKK0BAIC0xNDkyLDQgKzE0OTIsMTMgQEAgc2VlIHRoZSBmaWxlcyBDT1BZSU5HMyBhbmQgQ09QWUlORy5SVU5USU1FIHJlc3BlY3RpdmVseS4gIElmIG5vdCwgc2VlCisgI2RlZmluZSBEV0FSRl9HTkFUX0VOQ09ESU5HU19ERUZBVUxUIERXQVJGX0dOQVRfRU5DT0RJTkdTX0dEQgorICNlbmRpZgorIAorKy8qIERlZmF1bHQgcHJlZml4ZXMgdG8gYXR0YWNoIHRvIGNvbW1hbmQgbmFtZXMuICAqLworKworKyNpZm5kZWYgU1RBTkRBUkRfU1RBUlRGSUxFX1BSRUZJWF8xCisrI2RlZmluZSBTVEFOREFSRF9TVEFSVEZJTEVfUFJFRklYXzEgIi9saWIvIgorKyNlbmRpZgorKyNpZm5kZWYgU1RBTkRBUkRfU1RBUlRGSUxFX1BSRUZJWF8yCisrI2RlZmluZSBTVEFOREFSRF9TVEFSVEZJTEVfUFJFRklYXzIgIi91c3IvbGliLyIKKysjZW5kaWYKKysKKyAjZW5kaWYgIC8qICEgR0NDX0RFRkFVTFRTX0ggKi8KK2RpZmYgLS1naXQgYS9nY2MvZ2NjLmMgYi9nY2MvZ2NjLmMKK2luZGV4IDA0ZmE4MWQuLjk3NTBjYzIgMTAwNjQ0CistLS0gYS9nY2MvZ2NjLmMKKysrKyBiL2djYy9nY2MuYworQEAgLTE0NTAsMTMgKzE0NTAsNiBAQCBzdGF0aWMgY29uc3QgY2hhciAqZ2NjX2xpYmV4ZWNfcHJlZml4OworIAorIC8qIERlZmF1bHQgcHJlZml4ZXMgdG8gYXR0YWNoIHRvIGNvbW1hbmQgbmFtZXMuICAqLworIAorLSNpZm5kZWYgU1RBTkRBUkRfU1RBUlRGSUxFX1BSRUZJWF8xCistI2RlZmluZSBTVEFOREFSRF9TVEFSVEZJTEVfUFJFRklYXzEgIi9saWIvIgorLSNlbmRpZgorLSNpZm5kZWYgU1RBTkRBUkRfU1RBUlRGSUxFX1BSRUZJWF8yCistI2RlZmluZSBTVEFOREFSRF9TVEFSVEZJTEVfUFJFRklYXzIgIi91c3IvbGliLyIKKy0jZW5kaWYKKy0KKyAjaWZkZWYgQ1JPU1NfRElSRUNUT1JZX1NUUlVDVFVSRSAgLyogRG9uJ3QgdXNlIHRoZXNlIHByZWZpeGVzIGZvciBhIGNyb3NzIGNvbXBpbGVyLiAgKi8KKyAjdW5kZWYgTURfRVhFQ19QUkVGSVgKKyAjdW5kZWYgTURfU1RBUlRGSUxFX1BSRUZJWAorLS0gCisyLjguMgorCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNi4yLzAwMzItZ2NjLTQuOC13b24tdC1idWlsZC13aXRoLWRpc2FibGUtZGVwZW5kZW5jeS10cmFja2luZy5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy02LjIvMDAzMi1nY2MtNC44LXdvbi10LWJ1aWxkLXdpdGgtZGlzYWJsZS1kZXBlbmRlbmN5LXRyYWNraW5nLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMwYjAwMWQKLS0tIC9kZXYvbnVsbAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNi4yLzAwMzItZ2NjLTQuOC13b24tdC1idWlsZC13aXRoLWRpc2FibGUtZGVwZW5kZW5jeS10cmFja2luZy5wYXRjaApAQCAtMCwwICsxLDU0IEBACitGcm9tIGZmOTM5YzUwNjNkOGY4ZDQ0NGJkYjI1NjUxYTBhNDhlNjA4ZWZhYTQgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorRGF0ZTogRnJpLCAyMCBGZWIgMjAxNSAxMToxNzoxOSArMDAwMAorU3ViamVjdDogW1BBVENIIDMyLzQ2XSBnY2MgNC44KyB3b24ndCBidWlsZCB3aXRoIC0tZGlzYWJsZS1kZXBlbmRlbmN5LXRyYWNraW5nCisKK3NpbmNlIHRoZSAqLlBwbyBmaWxlcyBkb24ndCBnZXQgY3JlYXRlZCB1bmxlc3MgLS1lbmFibGUtZGVwZW5kZW5jeS10cmFja2luZyBpcyB0cnVlLgorCitUaGlzIHBhdGNoIGVuc3VyZXMgd2Ugb25seSB1c2UgdGhvc2UgY29tcGlsZXIgb3B0aW9ucyB3aGVuIGl0cyBlbmFibGVkLgorCitVcHN0cmVhbS1TdGF0dXM6IFN1Ym1pdHRlZAorCisoUHJvYmxlbSB3YXMgYWxyZWFkeSByZXBvcnRlZCB1cHN0cmVhbSwgYXR0YWNoZWQgdGhpcyBwYXRjaCB0aGVyZQoraHR0cDovL2djYy5nbnUub3JnL2J1Z3ppbGxhL3Nob3dfYnVnLmNnaT9pZD01NTkzMCkKKworUlAKKzIwMTIvMDkvMjIKKworU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KKy0tLQorIGxpYmF0b21pYy9NYWtlZmlsZS5hbSB8IDMgKystCisgbGliYXRvbWljL01ha2VmaWxlLmluIHwgMyArKy0KKyAyIGZpbGVzIGNoYW5nZWQsIDQgaW5zZXJ0aW9ucygrKSwgMiBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL2xpYmF0b21pYy9NYWtlZmlsZS5hbSBiL2xpYmF0b21pYy9NYWtlZmlsZS5hbQoraW5kZXggYjM1MTI0NC4uMzk5Y2UxOCAxMDA2NDQKKy0tLSBhL2xpYmF0b21pYy9NYWtlZmlsZS5hbQorKysrIGIvbGliYXRvbWljL01ha2VmaWxlLmFtCitAQCAtMTAxLDcgKzEwMSw4IEBAIFBBVF9TCQk9ICQod29yZCAzLCQoUEFUX1NQTElUKSkKKyBJRlVOQ19ERUYJPSAtRElGVU5DX0FMVD0kKFBBVF9TKQorIElGVU5DX09QVAk9ICQod29yZCAkKFBBVF9TKSwkKElGVU5DX09QVElPTlMpKQorIAorLU1fREVQUwkJPSAtTVQgJEAgLU1EIC1NUCAtTUYgJChERVBESVIpLyQoQEYpLlBwbworK0BBTURFUF9UUlVFQE1fREVQUwkJPSAtTVQgJEAgLU1EIC1NUCAtTUYgJChERVBESVIpLyQoQEYpLlBwbworK0BBTURFUF9GQUxTRUBNX0RFUFMJCT0KKyBNX1NJWkUJCT0gLUROPSQoUEFUX04pCisgTV9JRlVOQwkJPSAkKGlmICQoUEFUX1MpLCQoSUZVTkNfREVGKSAkKElGVU5DX09QVCkpCisgTV9GSUxFCQk9ICQoUEFUX0JBU0UpX24uYworZGlmZiAtLWdpdCBhL2xpYmF0b21pYy9NYWtlZmlsZS5pbiBiL2xpYmF0b21pYy9NYWtlZmlsZS5pbgoraW5kZXggYTA4M2Q4Ny4uYTkyY2ZjZSAxMDA2NDQKKy0tLSBhL2xpYmF0b21pYy9NYWtlZmlsZS5pbgorKysrIGIvbGliYXRvbWljL01ha2VmaWxlLmluCitAQCAtMzMwLDcgKzMzMCw4IEBAIFBBVF9OID0gJCh3b3JkIDIsJChQQVRfU1BMSVQpKQorIFBBVF9TID0gJCh3b3JkIDMsJChQQVRfU1BMSVQpKQorIElGVU5DX0RFRiA9IC1ESUZVTkNfQUxUPSQoUEFUX1MpCisgSUZVTkNfT1BUID0gJCh3b3JkICQoUEFUX1MpLCQoSUZVTkNfT1BUSU9OUykpCistTV9ERVBTID0gLU1UICRAIC1NRCAtTVAgLU1GICQoREVQRElSKS8kKEBGKS5QcG8KKytAQU1ERVBfVFJVRUBNX0RFUFMgPSAtTVQgJEAgLU1EIC1NUCAtTUYgJChERVBESVIpLyQoQEYpLlBwbworK0BBTURFUF9GQUxTRUBNX0RFUFMgPQorIE1fU0laRSA9IC1ETj0kKFBBVF9OKQorIE1fSUZVTkMgPSAkKGlmICQoUEFUX1MpLCQoSUZVTkNfREVGKSAkKElGVU5DX09QVCkpCisgTV9GSUxFID0gJChQQVRfQkFTRSlfbi5jCistLSAKKzIuOC4yCisKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy02LjIvMDAzMy1Eb24tdC1zZWFyY2gtaG9zdC1kaXJlY3RvcnktZHVyaW5nLXJlbGluay1pZi1pbnN0X3ByLnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTYuMi8wMDMzLURvbi10LXNlYXJjaC1ob3N0LWRpcmVjdG9yeS1kdXJpbmctcmVsaW5rLWlmLWluc3RfcHIucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTQyNWQ3MQotLS0gL2Rldi9udWxsCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy02LjIvMDAzMy1Eb24tdC1zZWFyY2gtaG9zdC1kaXJlY3RvcnktZHVyaW5nLXJlbGluay1pZi1pbnN0X3ByLnBhdGNoCkBAIC0wLDAgKzEsMzggQEAKK0Zyb20gNTA5MmY1Mzg5ZDAyZTc4Y2Q1OTY5MGNmM2ZjYTI0YjU2YTk3YWZmMiBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CitEYXRlOiBUdWUsIDMgTWFyIDIwMTUgMDg6MjE6MTkgKzAwMDAKK1N1YmplY3Q6IFtQQVRDSCAzMy80Nl0gRG9uJ3Qgc2VhcmNoIGhvc3QgZGlyZWN0b3J5IGR1cmluZyAicmVsaW5rIiBpZgorICRpbnN0X3ByZWZpeCBpcyBwcm92aWRlZAorCitodHRwOi8vbGlzdHMuZ251Lm9yZy9hcmNoaXZlL2h0bWwvbGlidG9vbC1wYXRjaGVzLzIwMTEtMDEvbXNnMDAwMjYuaHRtbAorCitVcHN0cmVhbS1TdGF0dXM6IFN1Ym1pdHRlZAorCitTaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorLS0tCisgbHRtYWluLnNoIHwgNSArKystLQorIDEgZmlsZSBjaGFuZ2VkLCAzIGluc2VydGlvbnMoKyksIDIgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9sdG1haW4uc2ggYi9sdG1haW4uc2gKK2luZGV4IDUyYmRiZGIuLjgyYmNlYzMgMTAwNjQ0CistLS0gYS9sdG1haW4uc2gKKysrKyBiL2x0bWFpbi5zaAorQEAgLTYwMDQsMTIgKzYwMDQsMTMgQEAgZnVuY19tb2RlX2xpbmsgKCkKKyAJICAgICAgZmkKKyAJICAgIGVsc2UKKyAJICAgICAgIyBXZSBjYW5ub3Qgc2VlbSB0byBoYXJkY29kZSBpdCwgZ3Vlc3Mgd2UnbGwgZmFrZSBpdC4KKysJICAgICAgIyBEZWZhdWx0IGlmICRsaWJkaXIgaXMgbm90IHJlbGF0aXZlIHRvIHRoZSBwcmVmaXg6CisgCSAgICAgIGFkZF9kaXI9Ii1MJGxpYmRpciIKKy0JICAgICAgIyBUcnkgbG9va2luZyBmaXJzdCBpbiB0aGUgbG9jYXRpb24gd2UncmUgYmVpbmcgaW5zdGFsbGVkIHRvLgorKworIAkgICAgICBpZiB0ZXN0IC1uICIkaW5zdF9wcmVmaXhfZGlyIjsgdGhlbgorIAkJY2FzZSAkbGliZGlyIGluCisgCQkgIFtcXC9dKikKKy0JCSAgICBhZGRfZGlyPSIkYWRkX2RpciAtTCRpbnN0X3ByZWZpeF9kaXIkbGliZGlyIgorKwkJICAgIGFkZF9kaXI9Ii1MJGluc3RfcHJlZml4X2RpciRsaWJkaXIiCisgCQkgICAgOzsKKyAJCWVzYWMKKyAJICAgICAgZmkKKy0tIAorMi44LjIKKwpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTYuMi8wMDM0LVVzZS1TWVNURU1MSUJTX0RJUi1yZXBsYWNlbWVudC1pbnN0ZWFkLW9mLWhhcmRjb2RpbmcucGF0Y2ggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNi4yLzAwMzQtVXNlLVNZU1RFTUxJQlNfRElSLXJlcGxhY2VtZW50LWluc3RlYWQtb2YtaGFyZGNvZGluZy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45MjJhODU1Ci0tLSAvZGV2L251bGwKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTYuMi8wMDM0LVVzZS1TWVNURU1MSUJTX0RJUi1yZXBsYWNlbWVudC1pbnN0ZWFkLW9mLWhhcmRjb2RpbmcucGF0Y2gKQEAgLTAsMCArMSwyOSBAQAorRnJvbSAxZmFhNmY2OWY5M2JiOTVhZjJiMmIyYmQyNGUxODFiNTBmYjViMzdjIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KK0RhdGU6IFR1ZSwgMjggQXByIDIwMTUgMjM6MTU6MjcgLTA3MDAKK1N1YmplY3Q6IFtQQVRDSCAzNC80Nl0gVXNlIFNZU1RFTUxJQlNfRElSIHJlcGxhY2VtZW50IGluc3RlYWQgb2YgaGFyZGNvZGluZworIGJhc2VfbGliZGlyCisKK1NpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CistLS0KK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbT0UgQ29uZmlndXJhdGlvbl0KKworIGdjYy9jb25maWcvYWFyY2g2NC9hYXJjaDY0LWxpbnV4LmggfCAyICstCisgMSBmaWxlIGNoYW5nZWQsIDEgaW5zZXJ0aW9uKCspLCAxIGRlbGV0aW9uKC0pCisKK2RpZmYgLS1naXQgYS9nY2MvY29uZmlnL2FhcmNoNjQvYWFyY2g2NC1saW51eC5oIGIvZ2NjL2NvbmZpZy9hYXJjaDY0L2FhcmNoNjQtbGludXguaAoraW5kZXggNWZjYWE1OS4uODU4OGFjMCAxMDA2NDQKKy0tLSBhL2djYy9jb25maWcvYWFyY2g2NC9hYXJjaDY0LWxpbnV4LmgKKysrKyBiL2djYy9jb25maWcvYWFyY2g2NC9hYXJjaDY0LWxpbnV4LmgKK0BAIC0yMSw3ICsyMSw3IEBACisgI2lmbmRlZiBHQ0NfQUFSQ0g2NF9MSU5VWF9ICisgI2RlZmluZSBHQ0NfQUFSQ0g2NF9MSU5VWF9ICisgCistI2RlZmluZSBHTElCQ19EWU5BTUlDX0xJTktFUiAiL2xpYi9sZC1saW51eC1hYXJjaDY0JXttYmlnLWVuZGlhbjpfYmV9JXttYWJpPWlscDMyOl9pbHAzMn0uc28uMSIKKysjZGVmaW5lIEdMSUJDX0RZTkFNSUNfTElOS0VSICBTWVNURU1MSUJTX0RJUiAibGQtbGludXgtYWFyY2g2NCV7bWJpZy1lbmRpYW46X2JlfSV7bWFiaT1pbHAzMjpfaWxwMzJ9LnNvLjEiCisgCisgI3VuZGVmIE1VU0xfRFlOQU1JQ19MSU5LRVIKKyAjZGVmaW5lIE1VU0xfRFlOQU1JQ19MSU5LRVIgIi9saWIvbGQtbXVzbC1hYXJjaDY0JXttYmlnLWVuZGlhbjpfYmV9JXttYWJpPWlscDMyOl9pbHAzMn0uc28uMSIKKy0tIAorMi44LjIKKwpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTYuMi8wMDM1LWFhcmNoNjQtQWRkLXN1cHBvcnQtZm9yLW11c2wtbGRzby5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy02LjIvMDAzNS1hYXJjaDY0LUFkZC1zdXBwb3J0LWZvci1tdXNsLWxkc28ucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWRmYzQ3MgotLS0gL2Rldi9udWxsCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy02LjIvMDAzNS1hYXJjaDY0LUFkZC1zdXBwb3J0LWZvci1tdXNsLWxkc28ucGF0Y2gKQEAgLTAsMCArMSwyOCBAQAorRnJvbSAzNzY4NDY4YzFhNmNjMTcwZmZmODhjMDNiODA4Yzk3NWFjNjUzODExIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KK0RhdGU6IFR1ZSwgMjggQXByIDIwMTUgMjM6MTg6MzkgLTA3MDAKK1N1YmplY3Q6IFtQQVRDSCAzNS80Nl0gYWFyY2g2NDogQWRkIHN1cHBvcnQgZm9yIG11c2wgbGRzbworCitTaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorLS0tCitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW09FIENvbmZpZ3VyYXRpb25dCisKKyBnY2MvY29uZmlnL2FhcmNoNjQvYWFyY2g2NC1saW51eC5oIHwgMiArLQorIDEgZmlsZSBjaGFuZ2VkLCAxIGluc2VydGlvbigrKSwgMSBkZWxldGlvbigtKQorCitkaWZmIC0tZ2l0IGEvZ2NjL2NvbmZpZy9hYXJjaDY0L2FhcmNoNjQtbGludXguaCBiL2djYy9jb25maWcvYWFyY2g2NC9hYXJjaDY0LWxpbnV4LmgKK2luZGV4IDg1ODhhYzAuLjk0NmIzY2EgMTAwNjQ0CistLS0gYS9nY2MvY29uZmlnL2FhcmNoNjQvYWFyY2g2NC1saW51eC5oCisrKysgYi9nY2MvY29uZmlnL2FhcmNoNjQvYWFyY2g2NC1saW51eC5oCitAQCAtMjQsNyArMjQsNyBAQAorICNkZWZpbmUgR0xJQkNfRFlOQU1JQ19MSU5LRVIgIFNZU1RFTUxJQlNfRElSICJsZC1saW51eC1hYXJjaDY0JXttYmlnLWVuZGlhbjpfYmV9JXttYWJpPWlscDMyOl9pbHAzMn0uc28uMSIKKyAKKyAjdW5kZWYgTVVTTF9EWU5BTUlDX0xJTktFUgorLSNkZWZpbmUgTVVTTF9EWU5BTUlDX0xJTktFUiAiL2xpYi9sZC1tdXNsLWFhcmNoNjQle21iaWctZW5kaWFuOl9iZX0le21hYmk9aWxwMzI6X2lscDMyfS5zby4xIgorKyNkZWZpbmUgTVVTTF9EWU5BTUlDX0xJTktFUiAgU1lTVEVNTElCU19ESVIgImxkLW11c2wtYWFyY2g2NCV7bWJpZy1lbmRpYW46X2JlfSV7bWFiaT1pbHAzMjpfaWxwMzJ9LnNvLjEiCisgCisgI3VuZGVmICBBU0FOX0NDMV9TUEVDCisgI2RlZmluZSBBU0FOX0NDMV9TUEVDICIleyU6c2FuaXRpemUoYWRkcmVzcyk6LWZ1bndpbmQtdGFibGVzfSIKKy0tIAorMi44LjIKKwpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTYuMi8wMDM2LWxpYmNjMS1maXgtbGliY2MxLXMtaW5zdGFsbC1wYXRoLWFuZC1ycGF0aC5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy02LjIvMDAzNi1saWJjYzEtZml4LWxpYmNjMS1zLWluc3RhbGwtcGF0aC1hbmQtcnBhdGgucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjg5YTg4NgotLS0gL2Rldi9udWxsCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy02LjIvMDAzNi1saWJjYzEtZml4LWxpYmNjMS1zLWluc3RhbGwtcGF0aC1hbmQtcnBhdGgucGF0Y2gKQEAgLTAsMCArMSw1NCBAQAorRnJvbSBmNGQzYzhlOTcwZDQyYTQzY2QzZDJmNzUxZTEzMzI0ZWZhOTM2ZmY4IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogUm9iZXJ0IFlhbmcgPGxpZXpoaS55YW5nQHdpbmRyaXZlci5jb20+CitEYXRlOiBTdW4sIDUgSnVsIDIwMTUgMjA6MjU6MTggLTA3MDAKK1N1YmplY3Q6IFtQQVRDSCAzNi80Nl0gbGliY2MxOiBmaXggbGliY2MxJ3MgaW5zdGFsbCBwYXRoIGFuZCBycGF0aAorCisqIEluc3RhbGwgbGliY2MxLnNvIGFuZCBsaWJjYzFwbHVnaW4uc28gaW50bworICAkKGxpYmV4ZWNkaXIpL2djYy8kKHRhcmdldF9ub25jYW5vbmljYWwpLyQoZ2NjX3ZlcnNpb24pLCBhcyB3aGF0IHdlCisgIGhhZCBkb25lIHRvIGx0by1wbHVnaW4uCisqIEZpeCBiYWQgUlBBVEggaXVzc3VlOgorICBnY2MtNS4yLjA6IHBhY2thZ2UgZ2NjLXBsdWdpbnMgY29udGFpbnMgYmFkIFJQQVRIIC9wYXRodC90by90bXAvc3lzcm9vdHMvcWVtdXg4Ni02NC91c3IvbGliNjQvLi4vbGliNjQgaW4gZmlsZQorIC9wYXRoL3RvL2djYy81LjIuMC1yMC9wYWNrYWdlcy1zcGxpdC9nY2MtcGx1Z2lucy91c3IvbGliNjQvZ2NjL3g4Nl82NC1wb2t5LWxpbnV4LzUuMi4wL3BsdWdpbi9saWJjYzFwbHVnaW4uc28uMC4wLjAKKyBbcnBhdGhzXQorCitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW09FIGNvbmZpZ3VyYXRpb25dCisKK1NpZ25lZC1vZmYtYnk6IFJvYmVydCBZYW5nIDxsaWV6aGkueWFuZ0B3aW5kcml2ZXIuY29tPgorLS0tCisgbGliY2MxL01ha2VmaWxlLmFtIHwgNCArKy0tCisgbGliY2MxL01ha2VmaWxlLmluIHwgNCArKy0tCisgMiBmaWxlcyBjaGFuZ2VkLCA0IGluc2VydGlvbnMoKyksIDQgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9saWJjYzEvTWFrZWZpbGUuYW0gYi9saWJjYzEvTWFrZWZpbGUuYW0KK2luZGV4IGI0MDgyMGIuLjMyOTMwYzUgMTAwNjQ0CistLS0gYS9saWJjYzEvTWFrZWZpbGUuYW0KKysrKyBiL2xpYmNjMS9NYWtlZmlsZS5hbQorQEAgLTM1LDggKzM1LDggQEAgbGliaWJlcnR5ID0gJChpZiAkKHdpbGRjYXJkICQobGliaWJlcnR5X25vYXNhbikpLCQoV2MpJChsaWJpYmVydHlfbm9hc2FuKSwgXAorIAkgICAgJChXYykkKGxpYmliZXJ0eV9ub3JtYWwpKSkKKyBsaWJpYmVydHlfZGVwID0gJChwYXRzdWJzdCAkKFdjKSUsJSwkKGxpYmliZXJ0eSkpCisgCistcGx1Z2luZGlyID0gJChsaWJkaXIpL2djYy8kKHRhcmdldF9ub25jYW5vbmljYWwpLyQoZ2NjX3ZlcnNpb24pL3BsdWdpbgorLWNjMWxpYmRpciA9ICQobGliZGlyKS8kKGxpYnN1ZmZpeCkKKytjYzFsaWJkaXIgPSAkKGxpYmV4ZWNkaXIpL2djYy8kKHRhcmdldF9ub25jYW5vbmljYWwpLyQoZ2NjX3ZlcnNpb24pCisrcGx1Z2luZGlyID0gJChjYzFsaWJkaXIpCisgCisgaWYgRU5BQkxFX1BMVUdJTgorIHBsdWdpbl9MVExJQlJBUklFUyA9IGxpYmNjMXBsdWdpbi5sYQorZGlmZiAtLWdpdCBhL2xpYmNjMS9NYWtlZmlsZS5pbiBiL2xpYmNjMS9NYWtlZmlsZS5pbgoraW5kZXggNzlkMzlkMy4uMjI3ZWMyMiAxMDA2NDQKKy0tLSBhL2xpYmNjMS9NYWtlZmlsZS5pbgorKysrIGIvbGliY2MxL01ha2VmaWxlLmluCitAQCAtMjkxLDggKzI5MSw4IEBAIGxpYmliZXJ0eSA9ICQoaWYgJCh3aWxkY2FyZCAkKGxpYmliZXJ0eV9ub2FzYW4pKSwkKFdjKSQobGliaWJlcnR5X25vYXNhbiksIFwKKyAJICAgICQoV2MpJChsaWJpYmVydHlfbm9ybWFsKSkpCisgCisgbGliaWJlcnR5X2RlcCA9ICQocGF0c3Vic3QgJChXYyklLCUsJChsaWJpYmVydHkpKQorLXBsdWdpbmRpciA9ICQobGliZGlyKS9nY2MvJCh0YXJnZXRfbm9uY2Fub25pY2FsKS8kKGdjY192ZXJzaW9uKS9wbHVnaW4KKy1jYzFsaWJkaXIgPSAkKGxpYmRpcikvJChsaWJzdWZmaXgpCisrY2MxbGliZGlyID0gJChsaWJleGVjZGlyKS9nY2MvJCh0YXJnZXRfbm9uY2Fub25pY2FsKS8kKGdjY192ZXJzaW9uKQorK3BsdWdpbmRpciA9ICQoY2MxbGliZGlyKQorIEBFTkFCTEVfUExVR0lOX1RSVUVAcGx1Z2luX0xUTElCUkFSSUVTID0gbGliY2MxcGx1Z2luLmxhCisgQEVOQUJMRV9QTFVHSU5fVFJVRUBjYzFsaWJfTFRMSUJSQVJJRVMgPSBsaWJjYzEubGEKKyBCVUlMVF9TT1VSQ0VTID0gY29tcGlsZXItbmFtZS5oCistLSAKKzIuOC4yCisKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy02LjIvMDAzNy1oYW5kbGUtc3lzcm9vdC1zdXBwb3J0LWZvci1uYXRpdmVzZGstZ2NjLnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTYuMi8wMDM3LWhhbmRsZS1zeXNyb290LXN1cHBvcnQtZm9yLW5hdGl2ZXNkay1nY2MucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTVlZmNiMQotLS0gL2Rldi9udWxsCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy02LjIvMDAzNy1oYW5kbGUtc3lzcm9vdC1zdXBwb3J0LWZvci1uYXRpdmVzZGstZ2NjLnBhdGNoCkBAIC0wLDAgKzEsMjEzIEBACitGcm9tIDE0NzViOTQxZDdhOWM5ODc0YjBmYjA1NThkMDE4MDU5NDU0NjczMzEgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorRGF0ZTogTW9uLCA3IERlYyAyMDE1IDIzOjM5OjU0ICswMDAwCitTdWJqZWN0OiBbUEFUQ0ggMzcvNDZdIGhhbmRsZSBzeXNyb290IHN1cHBvcnQgZm9yIG5hdGl2ZXNkay1nY2MKKworQmVpbmcgYWJsZSB0byBidWlsZCBhIG5hdGl2ZXNkayBnY2MgaXMgdXNlZnVsLCBwYXJ0aWN1bGFybHkgaW4gY2FzZXMKK3doZXJlIHRoZSBob3N0IGNvbXBpbGVyIG1heSBiZSBvZiBhbiBpbmNvbXBhdGlibGUgdmVyc2lvbiAob3IgYSAzMgorYml0IGNvbXBpbGVyIGlzIG5lZWRlZCkuCisKK1NhZGx5LCBidWlsZGluZyBuYXRpdmVzZGstZ2NjIGlzIG5vdCBzdHJhaWdodCBmb3J3YXJkLiBXZSBpbnN0YWxsCituYXRpdmVzZGstZ2NjIGludG8gYSByZWxvY2F0YWJsZSBsb2NhdGlvbiBhbmQgdGhpcyBtZWFucyB0aGF0IGl0cworbGlicmFyeSBsb2NhdGlvbnMgY2FuIGNoYW5nZS4gIk5vcm1hbCIgc3lzcm9vdCBzdXBwb3J0IGRvZXNuJ3QgaGVscAoraW4gdGhpcyBjYXNlIHNpbmNlIHRoZSB2YWx1ZXMgb2YgcGF0aHMgbGlrZSAibGliZGlyIiBjaGFuZ2UsIG5vdCBqdXN0CitiYXNlIHJvb3QgZGlyZWN0b3J5IG9mIHRoZSBzeXN0ZW0uCisKK0luIG9yZGVyIHRvIGhhbmRsZSB0aGlzIHdlIGRvIHR3byB0aGluZ3M6CisKK2EpIEFkZCAlciBpbnRvIHNwZWMgZmlsZSBtYXJrdXAgd2hpY2ggY2FuIGJlIHVzZWQgZm9yIGluamVjdGVkIHBhdGhzCisgICBzdWNoIGFzIFNZU1RFTUxJQlNfRElSIChzZWUgZ2NjX211bHRpbGliX3NldHVwKCkpLgorYikgQWRkIG90aGVyIHBhdGhzIHdoaWNoIG5lZWQgcmVsb2NhdGlvbiBpbnRvIGEgLmdjY3JlbG9jcHJlZml4IHNlY3Rpb24KKyAgIHdoaWNoIHRoZSByZWxvY2F0aW9uIGNvZGUgd2lsbCBub3RpY2UgYW5kIGFkanVzdCBhdXRvbWF0aWNhbGx5LgorCitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUKK1JQIDIwMTUvNy8yOAorCitTaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorLS0tCisgZ2NjL2NwcGRlZmF1bHQuYyB8IDUwICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKystLS0tLS0tLS0tLS0tCisgZ2NjL2NwcGRlZmF1bHQuaCB8ICAzICsrLQorIGdjYy9nY2MuYyAgICAgICAgfCAyMCArKysrKysrKysrKysrKy0tLS0tLQorIDMgZmlsZXMgY2hhbmdlZCwgNTMgaW5zZXJ0aW9ucygrKSwgMjAgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9nY2MvY3BwZGVmYXVsdC5jIGIvZ2NjL2NwcGRlZmF1bHQuYworaW5kZXggN2I0ZGQ1MS4uOWQxMTY2YyAxMDA2NDQKKy0tLSBhL2djYy9jcHBkZWZhdWx0LmMKKysrKyBiL2djYy9jcHBkZWZhdWx0LmMKK0BAIC0zNSw2ICszNSwzMCBAQAorICMgdW5kZWYgQ1JPU1NfSU5DTFVERV9ESVIKKyAjZW5kaWYKKyAKKytzdGF0aWMgY2hhciBHUExVU1BMVVNfSU5DTFVERV9ESVJWQVJbNDA5Nl0gX19hdHRyaWJ1dGVfXyAoKHNlY3Rpb24gKCIuZ2NjcmVsb2NwcmVmaXgiKSkpID0gR1BMVVNQTFVTX0lOQ0xVREVfRElSOworK3N0YXRpYyBjaGFyIEdDQ19JTkNMVURFX0RJUlZBUls0MDk2XSBfX2F0dHJpYnV0ZV9fICgoc2VjdGlvbiAoIi5nY2NyZWxvY3ByZWZpeCIpKSkgPSBHQ0NfSU5DTFVERV9ESVI7Cisrc3RhdGljIGNoYXIgR1BMVVNQTFVTX1RPT0xfSU5DTFVERV9ESVJWQVJbNDA5Nl0gX19hdHRyaWJ1dGVfXyAoKHNlY3Rpb24gKCIuZ2NjcmVsb2NwcmVmaXgiKSkpID0gR1BMVVNQTFVTX1RPT0xfSU5DTFVERV9ESVI7Cisrc3RhdGljIGNoYXIgR1BMVVNQTFVTX0JBQ0tXQVJEX0lOQ0xVREVfRElSVkFSWzQwOTZdIF9fYXR0cmlidXRlX18gKChzZWN0aW9uICgiLmdjY3JlbG9jcHJlZml4IikpKSA9IEdQTFVTUExVU19CQUNLV0FSRF9JTkNMVURFX0RJUjsKKytzdGF0aWMgY2hhciBTVEFOREFSRF9TVEFSVEZJTEVfUFJFRklYXzJWQVJbNDA5Nl0gX19hdHRyaWJ1dGVfXyAoKHNlY3Rpb24gKCIuZ2NjcmVsb2NwcmVmaXgiKSkpID0gU1RBTkRBUkRfU1RBUlRGSUxFX1BSRUZJWF8yIEdDQ19JTkNMVURFX1NVQkRJUl9UQVJHRVQ7CisrI2lmZGVmIExPQ0FMX0lOQ0xVREVfRElSCisrc3RhdGljIGNoYXIgTE9DQUxfSU5DTFVERV9ESVJWQVJbNDA5Nl0gX19hdHRyaWJ1dGVfXyAoKHNlY3Rpb24gKCIuZ2NjcmVsb2NwcmVmaXgiKSkpID0gTE9DQUxfSU5DTFVERV9ESVI7CisrI2VuZGlmCisrI2lmZGVmIFBSRUZJWF9JTkNMVURFX0RJUgorK3N0YXRpYyBjaGFyIFBSRUZJWF9JTkNMVURFX0RJUlZBUls0MDk2XSBfX2F0dHJpYnV0ZV9fICgoc2VjdGlvbiAoIi5nY2NyZWxvY3ByZWZpeCIpKSkgPSBQUkVGSVhfSU5DTFVERV9ESVI7CisrI2VuZGlmCisrI2lmZGVmIEZJWEVEX0lOQ0xVREVfRElSCisrc3RhdGljIGNoYXIgRklYRURfSU5DTFVERV9ESVJWQVJbNDA5Nl0gX19hdHRyaWJ1dGVfXyAoKHNlY3Rpb24gKCIuZ2NjcmVsb2NwcmVmaXgiKSkpID0gRklYRURfSU5DTFVERV9ESVI7CisrI2VuZGlmCisrI2lmZGVmIENST1NTX0lOQ0xVREVfRElSCisrc3RhdGljIGNoYXIgQ1JPU1NfSU5DTFVERV9ESVJWQVJbNDA5Nl0gX19hdHRyaWJ1dGVfXyAoKHNlY3Rpb24gKCIuZ2NjcmVsb2NwcmVmaXgiKSkpID0gQ1JPU1NfSU5DTFVERV9ESVI7CisrI2VuZGlmCisrI2lmZGVmIFRPT0xfSU5DTFVERV9ESVIKKytzdGF0aWMgY2hhciBUT09MX0lOQ0xVREVfRElSVkFSWzQwOTZdIF9fYXR0cmlidXRlX18gKChzZWN0aW9uICgiLmdjY3JlbG9jcHJlZml4IikpKSA9IFRPT0xfSU5DTFVERV9ESVI7CisrI2VuZGlmCisrI2lmZGVmIE5BVElWRV9TWVNURU1fSEVBREVSX0RJUgorK3N0YXRpYyBjaGFyIE5BVElWRV9TWVNURU1fSEVBREVSX0RJUlZBUls0MDk2XSBfX2F0dHJpYnV0ZV9fICgoc2VjdGlvbiAoIi5nY2NyZWxvY3ByZWZpeCIpKSkgPSBOQVRJVkVfU1lTVEVNX0hFQURFUl9ESVI7CisrI2VuZGlmCisrCisgY29uc3Qgc3RydWN0IGRlZmF1bHRfaW5jbHVkZSBjcHBfaW5jbHVkZV9kZWZhdWx0c1tdCisgI2lmZGVmIElOQ0xVREVfREVGQVVMVFMKKyA9IElOQ0xVREVfREVGQVVMVFM7CitAQCAtNDIsMzggKzY2LDM4IEBAIGNvbnN0IHN0cnVjdCBkZWZhdWx0X2luY2x1ZGUgY3BwX2luY2x1ZGVfZGVmYXVsdHNbXQorID0geworICNpZmRlZiBHUExVU1BMVVNfSU5DTFVERV9ESVIKKyAgICAgLyogUGljayB1cCBHTlUgQysrIGdlbmVyaWMgaW5jbHVkZSBmaWxlcy4gICovCistICAgIHsgR1BMVVNQTFVTX0lOQ0xVREVfRElSLCAiRysrIiwgMSwgMSwKKysgICAgeyBHUExVU1BMVVNfSU5DTFVERV9ESVJWQVIsICJHKysiLCAxLCAxLAorICAgICAgIEdQTFVTUExVU19JTkNMVURFX0RJUl9BRERfU1lTUk9PVCwgMCB9LAorICNlbmRpZgorICNpZmRlZiBHUExVU1BMVVNfVE9PTF9JTkNMVURFX0RJUgorICAgICAvKiBQaWNrIHVwIEdOVSBDKysgdGFyZ2V0LWRlcGVuZGVudCBpbmNsdWRlIGZpbGVzLiAgKi8KKy0gICAgeyBHUExVU1BMVVNfVE9PTF9JTkNMVURFX0RJUiwgIkcrKyIsIDEsIDEsCisrICAgIHsgR1BMVVNQTFVTX1RPT0xfSU5DTFVERV9ESVJWQVIsICJHKysiLCAxLCAxLAorICAgICAgIEdQTFVTUExVU19JTkNMVURFX0RJUl9BRERfU1lTUk9PVCwgMSB9LAorICNlbmRpZgorICNpZmRlZiBHUExVU1BMVVNfQkFDS1dBUkRfSU5DTFVERV9ESVIKKyAgICAgLyogUGljayB1cCBHTlUgQysrIGJhY2t3YXJkIGFuZCBkZXByZWNhdGVkIGluY2x1ZGUgZmlsZXMuICAqLworLSAgICB7IEdQTFVTUExVU19CQUNLV0FSRF9JTkNMVURFX0RJUiwgIkcrKyIsIDEsIDEsCisrICAgIHsgR1BMVVNQTFVTX0JBQ0tXQVJEX0lOQ0xVREVfRElSVkFSLCAiRysrIiwgMSwgMSwKKyAgICAgICBHUExVU1BMVVNfSU5DTFVERV9ESVJfQUREX1NZU1JPT1QsIDAgfSwKKyAjZW5kaWYKKyAjaWZkZWYgR0NDX0lOQ0xVREVfRElSCisgICAgIC8qIFRoaXMgaXMgdGhlIGRpciBmb3IgZ2NjJ3MgcHJpdmF0ZSBoZWFkZXJzLiAgKi8KKy0gICAgeyBHQ0NfSU5DTFVERV9ESVIsICJHQ0MiLCAwLCAwLCAwLCAwIH0sCisrICAgIHsgR0NDX0lOQ0xVREVfRElSVkFSLCAiR0NDIiwgMCwgMCwgMCwgMCB9LAorICNlbmRpZgorICNpZmRlZiBHQ0NfSU5DTFVERV9TVUJESVJfVEFSR0VUCisgICAgIC8qIFRoaXMgaXMgdGhlIGRpciBmb3IgZ2NjJ3MgcHJpdmF0ZSBoZWFkZXJzIHVuZGVyIHRoZSBzcGVjaWZpZWQgc3lzcm9vdC4gICovCistICAgIHsgU1RBTkRBUkRfU1RBUlRGSUxFX1BSRUZJWF8yIEdDQ19JTkNMVURFX1NVQkRJUl9UQVJHRVQsICJHQ0MiLCAwLCAwLCAxLCAwIH0sCisrICAgIHsgU1RBTkRBUkRfU1RBUlRGSUxFX1BSRUZJWF8yVkFSLCAiR0NDIiwgMCwgMCwgMSwgMCB9LAorICNlbmRpZgorICNpZmRlZiBMT0NBTF9JTkNMVURFX0RJUgorICAgICAvKiAvdXNyL2xvY2FsL2luY2x1ZGUgY29tZXMgYmVmb3JlIHRoZSBmaXhpbmNsdWRlZCBoZWFkZXIgZmlsZXMuICAqLworLSAgICB7IExPQ0FMX0lOQ0xVREVfRElSLCAwLCAwLCAxLCAxLCAyIH0sCistICAgIHsgTE9DQUxfSU5DTFVERV9ESVIsIDAsIDAsIDEsIDEsIDAgfSwKKysgICAgeyBMT0NBTF9JTkNMVURFX0RJUlZBUiwgMCwgMCwgMSwgMSwgMiB9LAorKyAgICB7IExPQ0FMX0lOQ0xVREVfRElSVkFSLCAwLCAwLCAxLCAxLCAwIH0sCisgI2VuZGlmCisgI2lmZGVmIFBSRUZJWF9JTkNMVURFX0RJUgorLSAgICB7IFBSRUZJWF9JTkNMVURFX0RJUiwgMCwgMCwgMSwgMCwgMCB9LAorKyAgICB7IFBSRUZJWF9JTkNMVURFX0RJUlZBUiwgMCwgMCwgMSwgMCwgMCB9LAorICNlbmRpZgorICNpZmRlZiBGSVhFRF9JTkNMVURFX0RJUgorICAgICAvKiBUaGlzIGlzIHRoZSBkaXIgZm9yIGZpeGluY2x1ZGVzLiAgKi8KKy0gICAgeyBGSVhFRF9JTkNMVURFX0RJUiwgIkdDQyIsIDAsIDAsIDAsCisrICAgIHsgRklYRURfSU5DTFVERV9ESVJWQVIsICJHQ0MiLCAwLCAwLCAwLAorICAgICAgIC8qIEEgbXVsdGlsaWIgc3VmZml4IG5lZWRzIGFkZGluZyBpZiBkaWZmZXJlbnQgbXVsdGlsaWJzIHVzZQorIAkgZGlmZmVyZW50IGhlYWRlcnMuICAqLworICNpZmRlZiBTWVNST09UX0hFQURFUlNfU1VGRklYX1NQRUMKK0BAIC04NSwxNiArMTA5LDE2IEBAIGNvbnN0IHN0cnVjdCBkZWZhdWx0X2luY2x1ZGUgY3BwX2luY2x1ZGVfZGVmYXVsdHNbXQorICNlbmRpZgorICNpZmRlZiBDUk9TU19JTkNMVURFX0RJUgorICAgICAvKiBPbmUgcGxhY2UgdGhlIHRhcmdldCBzeXN0ZW0ncyBoZWFkZXJzIG1pZ2h0IGJlLiAgKi8KKy0gICAgeyBDUk9TU19JTkNMVURFX0RJUiwgIkdDQyIsIDAsIDAsIDAsIDAgfSwKKysgICAgeyBDUk9TU19JTkNMVURFX0RJUlZBUiwgIkdDQyIsIDAsIDAsIDAsIDAgfSwKKyAjZW5kaWYKKyAjaWZkZWYgVE9PTF9JTkNMVURFX0RJUgorICAgICAvKiBBbm90aGVyIHBsYWNlIHRoZSB0YXJnZXQgc3lzdGVtJ3MgaGVhZGVycyBtaWdodCBiZS4gICovCistICAgIHsgVE9PTF9JTkNMVURFX0RJUiwgIkJJTlVUSUxTIiwgMCwgMSwgMCwgMCB9LAorKyAgICB7IFRPT0xfSU5DTFVERV9ESVJWQVIsICJCSU5VVElMUyIsIDAsIDEsIDAsIDAgfSwKKyAjZW5kaWYKKyAjaWZkZWYgTkFUSVZFX1NZU1RFTV9IRUFERVJfRElSCisgICAgIC8qIC91c3IvaW5jbHVkZSBjb21lcyBkZWFkIGxhc3QuICAqLworLSAgICB7IE5BVElWRV9TWVNURU1fSEVBREVSX0RJUiwgTkFUSVZFX1NZU1RFTV9IRUFERVJfQ09NUE9ORU5ULCAwLCAwLCAxLCAyIH0sCistICAgIHsgTkFUSVZFX1NZU1RFTV9IRUFERVJfRElSLCBOQVRJVkVfU1lTVEVNX0hFQURFUl9DT01QT05FTlQsIDAsIDAsIDEsIDAgfSwKKysgICAgeyBOQVRJVkVfU1lTVEVNX0hFQURFUl9ESVJWQVIsIE5BVElWRV9TWVNURU1fSEVBREVSX0NPTVBPTkVOVCwgMCwgMCwgMSwgMiB9LAorKyAgICB7IE5BVElWRV9TWVNURU1fSEVBREVSX0RJUlZBUiwgTkFUSVZFX1NZU1RFTV9IRUFERVJfQ09NUE9ORU5ULCAwLCAwLCAxLCAwIH0sCisgI2VuZGlmCisgICAgIHsgMCwgMCwgMCwgMCwgMCwgMCB9CisgICB9OworZGlmZiAtLWdpdCBhL2djYy9jcHBkZWZhdWx0LmggYi9nY2MvY3BwZGVmYXVsdC5oCitpbmRleCA4YTgxYjQ1Li45NzU5ZWZkIDEwMDY0NAorLS0tIGEvZ2NjL2NwcGRlZmF1bHQuaAorKysrIGIvZ2NjL2NwcGRlZmF1bHQuaAorQEAgLTMzLDcgKzMzLDggQEAKKyAKKyBzdHJ1Y3QgZGVmYXVsdF9pbmNsdWRlCisgeworLSAgY29uc3QgY2hhciAqY29uc3QgZm5hbWU7CS8qIFRoZSBuYW1lIG9mIHRoZSBkaXJlY3RvcnkuICAqLworKyAgY29uc3QgY2hhciAqZm5hbWU7ICAgICAvKiBUaGUgbmFtZSBvZiB0aGUgZGlyZWN0b3J5LiAgKi8KKysKKyAgIGNvbnN0IGNoYXIgKmNvbnN0IGNvbXBvbmVudDsJLyogVGhlIGNvbXBvbmVudCBjb250YWluaW5nIHRoZSBkaXJlY3RvcnkKKyAJCQkJICAgKHNlZSB1cGRhdGVfcGF0aCBpbiBwcmVmaXguYykgKi8KKyAgIGNvbnN0IGNoYXIgY3BsdXNwbHVzOwkJLyogT25seSBsb29rIGhlcmUgaWYgd2UncmUgY29tcGlsaW5nIEMrKy4gICovCitkaWZmIC0tZ2l0IGEvZ2NjL2djYy5jIGIvZ2NjL2djYy5jCitpbmRleCA5NzUwY2MyLi45NGMyNDBlIDEwMDY0NAorLS0tIGEvZ2NjL2djYy5jCisrKysgYi9nY2MvZ2NjLmMKK0BAIC0yNDcsNiArMjQ3LDggQEAgRklMRSAqcmVwb3J0X3RpbWVzX3RvX2ZpbGUgPSBOVUxMOworICNlbmRpZgorIHN0YXRpYyBjb25zdCBjaGFyICp0YXJnZXRfc3lzdGVtX3Jvb3QgPSBERUZBVUxUX1RBUkdFVF9TWVNURU1fUk9PVDsKKyAKKytzdGF0aWMgY2hhciB0YXJnZXRfcmVsb2NhdGFibGVfcHJlZml4WzQwOTZdIF9fYXR0cmlidXRlX18gKChzZWN0aW9uICgiLmdjY3JlbG9jcHJlZml4IikpKSA9IFNZU1RFTUxJQlNfRElSOworKworIC8qIE5vbnplcm8gbWVhbnMgcGFzcyB0aGUgdXBkYXRlZCB0YXJnZXRfc3lzdGVtX3Jvb3QgdG8gdGhlIGNvbXBpbGVyLiAgKi8KKyAKKyBzdGF0aWMgaW50IHRhcmdldF9zeXN0ZW1fcm9vdF9jaGFuZ2VkOworQEAgLTUxNyw2ICs1MTksNyBAQCBvciB3aXRoIGNvbnN0YW50IHRleHQgaW4gYSBzaW5nbGUgYXJndW1lbnQuCisgICVHICAgICBwcm9jZXNzIExJQkdDQ19TUEVDIGFzIGEgc3BlYy4KKyAgJVIgICAgIE91dHB1dCB0aGUgY29uY2F0ZW5hdGlvbiBvZiB0YXJnZXRfc3lzdGVtX3Jvb3QgYW5kCisgICAgICAgICB0YXJnZXRfc3lzcm9vdF9zdWZmaXguCisrICVyICAgICBPdXRwdXQgdGhlIGJhc2UgcGF0aCB0YXJnZXRfcmVsb2NhdGFibGVfcHJlZml4CisgICVTICAgICBwcm9jZXNzIFNUQVJURklMRV9TUEVDIGFzIGEgc3BlYy4gIEEgY2FwaXRhbCBTIGlzIGFjdHVhbGx5IHVzZWQgaGVyZS4KKyAgJUUgICAgIHByb2Nlc3MgRU5ERklMRV9TUEVDIGFzIGEgc3BlYy4gIEEgY2FwaXRhbCBFIGlzIGFjdHVhbGx5IHVzZWQgaGVyZS4KKyAgJUMgICAgIHByb2Nlc3MgQ1BQX1NQRUMgYXMgYSBzcGVjLgorQEAgLTE0NzMsMTAgKzE0NzYsMTAgQEAgc3RhdGljIGNvbnN0IGNoYXIgKmdjY19saWJleGVjX3ByZWZpeDsKKyAgICBnY2NfZXhlY19wcmVmaXggaXMgc2V0IGJlY2F1c2UsIGluIHRoYXQgY2FzZSwgd2Uga25vdyB3aGVyZSB0aGUKKyAgICBjb21waWxlciBoYXMgYmVlbiBpbnN0YWxsZWQsIGFuZCB1c2UgcGF0aHMgcmVsYXRpdmUgdG8gdGhhdAorICAgIGxvY2F0aW9uIGluc3RlYWQuICAqLworLXN0YXRpYyBjb25zdCBjaGFyICpjb25zdCBzdGFuZGFyZF9leGVjX3ByZWZpeCA9IFNUQU5EQVJEX0VYRUNfUFJFRklYOworLXN0YXRpYyBjb25zdCBjaGFyICpjb25zdCBzdGFuZGFyZF9saWJleGVjX3ByZWZpeCA9IFNUQU5EQVJEX0xJQkVYRUNfUFJFRklYOworLXN0YXRpYyBjb25zdCBjaGFyICpjb25zdCBzdGFuZGFyZF9iaW5kaXJfcHJlZml4ID0gU1RBTkRBUkRfQklORElSX1BSRUZJWDsKKy1zdGF0aWMgY29uc3QgY2hhciAqY29uc3Qgc3RhbmRhcmRfc3RhcnRmaWxlX3ByZWZpeCA9IFNUQU5EQVJEX1NUQVJURklMRV9QUkVGSVg7Cisrc3RhdGljIGNoYXIgc3RhbmRhcmRfZXhlY19wcmVmaXhbNDA5Nl0gX19hdHRyaWJ1dGVfXyAoKHNlY3Rpb24gKCIuZ2NjcmVsb2NwcmVmaXgiKSkpID0gU1RBTkRBUkRfRVhFQ19QUkVGSVg7Cisrc3RhdGljIGNoYXIgc3RhbmRhcmRfbGliZXhlY19wcmVmaXhbNDA5Nl0gX19hdHRyaWJ1dGVfXyAoKHNlY3Rpb24gKCIuZ2NjcmVsb2NwcmVmaXgiKSkpID0gU1RBTkRBUkRfTElCRVhFQ19QUkVGSVg7Cisrc3RhdGljIGNoYXIgc3RhbmRhcmRfYmluZGlyX3ByZWZpeFs0MDk2XSBfX2F0dHJpYnV0ZV9fICgoc2VjdGlvbiAoIi5nY2NyZWxvY3ByZWZpeCIpKSkgPSBTVEFOREFSRF9CSU5ESVJfUFJFRklYOworK3N0YXRpYyBjaGFyICpjb25zdCBzdGFuZGFyZF9zdGFydGZpbGVfcHJlZml4ID0gU1RBTkRBUkRfU1RBUlRGSUxFX1BSRUZJWDsKKyAKKyAvKiBGb3IgbmF0aXZlIGNvbXBpbGVycywgdGhlc2UgYXJlIHdlbGwta25vd24gcGF0aHMgY29udGFpbmluZworICAgIGNvbXBvbmVudHMgdGhhdCBtYXkgYmUgcHJvdmlkZWQgYnkgdGhlIHN5c3RlbS4gIEZvciBjcm9zcworQEAgLTE0ODQsOSArMTQ4Nyw5IEBAIHN0YXRpYyBjb25zdCBjaGFyICpjb25zdCBzdGFuZGFyZF9zdGFydGZpbGVfcHJlZml4ID0gU1RBTkRBUkRfU1RBUlRGSUxFX1BSRUZJWDsKKyBzdGF0aWMgY29uc3QgY2hhciAqbWRfZXhlY19wcmVmaXggPSBNRF9FWEVDX1BSRUZJWDsKKyBzdGF0aWMgY29uc3QgY2hhciAqbWRfc3RhcnRmaWxlX3ByZWZpeCA9IE1EX1NUQVJURklMRV9QUkVGSVg7Cisgc3RhdGljIGNvbnN0IGNoYXIgKm1kX3N0YXJ0ZmlsZV9wcmVmaXhfMSA9IE1EX1NUQVJURklMRV9QUkVGSVhfMTsKKy1zdGF0aWMgY29uc3QgY2hhciAqY29uc3Qgc3RhbmRhcmRfc3RhcnRmaWxlX3ByZWZpeF8xCisrc3RhdGljIGNoYXIgc3RhbmRhcmRfc3RhcnRmaWxlX3ByZWZpeF8xWzQwOTZdIF9fYXR0cmlidXRlX18gKChzZWN0aW9uICgiLmdjY3JlbG9jcHJlZml4IikpKQorICAgPSBTVEFOREFSRF9TVEFSVEZJTEVfUFJFRklYXzE7Cistc3RhdGljIGNvbnN0IGNoYXIgKmNvbnN0IHN0YW5kYXJkX3N0YXJ0ZmlsZV9wcmVmaXhfMgorK3N0YXRpYyBjaGFyIHN0YW5kYXJkX3N0YXJ0ZmlsZV9wcmVmaXhfMls0MDk2XSBfX2F0dHJpYnV0ZV9fICgoc2VjdGlvbiAoIi5nY2NyZWxvY3ByZWZpeCIpKSkKKyAgID0gU1RBTkRBUkRfU1RBUlRGSUxFX1BSRUZJWF8yOworIAorIC8qIEEgcmVsYXRpdmUgcGF0aCB0byBiZSB1c2VkIGluIGZpbmRpbmcgdGhlIGxvY2F0aW9uIG9mIHRvb2xzCitAQCAtNTc2Miw2ICs1NzY1LDExIEBAIGRvX3NwZWNfMSAoY29uc3QgY2hhciAqc3BlYywgaW50IGluc3dpdGNoLCBjb25zdCBjaGFyICpzb2Z0X21hdGNoZWRfcGFydCkKKyAJICAgICAgfQorIAkgICAgYnJlYWs7CisgCisrICAgICAgICAgIGNhc2UgJ3InOgorKyAgICAgICAgICAgICAgb2JzdGFja19ncm93ICgmb2JzdGFjaywgdGFyZ2V0X3JlbG9jYXRhYmxlX3ByZWZpeCwKKysJCSAgICAgIHN0cmxlbiAodGFyZ2V0X3JlbG9jYXRhYmxlX3ByZWZpeCkpOworKyAgICAgICAgICAgIGJyZWFrOworKworIAkgIGNhc2UgJ1MnOgorIAkgICAgdmFsdWUgPSBkb19zcGVjXzEgKHN0YXJ0ZmlsZV9zcGVjLCAwLCBOVUxMKTsKKyAJICAgIGlmICh2YWx1ZSAhPSAwKQorLS0gCisyLjguMgorCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNi4yLzAwMzgtU2VhcmNoLXRhcmdldC1zeXNyb290LWdjYy12ZXJzaW9uLXNwZWNpZmljLWRpcnMtd2l0aC5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy02LjIvMDAzOC1TZWFyY2gtdGFyZ2V0LXN5c3Jvb3QtZ2NjLXZlcnNpb24tc3BlY2lmaWMtZGlycy13aXRoLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg5ZWU3OWQKLS0tIC9kZXYvbnVsbAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNi4yLzAwMzgtU2VhcmNoLXRhcmdldC1zeXNyb290LWdjYy12ZXJzaW9uLXNwZWNpZmljLWRpcnMtd2l0aC5wYXRjaApAQCAtMCwwICsxLDEwMiBAQAorRnJvbSA0MmU0Y2RjYWFkNTkwNTM2MjQ2ODY2YjA4NDZlYzI3OWUxMjRmYTE2IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KK0RhdGU6IE1vbiwgNyBEZWMgMjAxNSAyMzo0MTo0NSArMDAwMAorU3ViamVjdDogW1BBVENIIDM4LzQ2XSBTZWFyY2ggdGFyZ2V0IHN5c3Jvb3QgZ2NjIHZlcnNpb24gc3BlY2lmaWMgZGlycyB3aXRoCisgbXVsdGlsaWIuCisKK1dlIGluc3RhbGwgdGhlIGdjYyBsaWJyYXJpZXMgKHN1Y2ggYXMgY3J0YmVnaW4ucCkgaW50bworPHN5c3Jvb3Q+PGxpYmRpcj4vPHRhcmdldC1zeXM+LzUuMi4wLword2hpY2ggaXMgYSBkZWZhdWx0IHNlYXJjaCBwYXRoIGZvciBHQ0MgKGFrYSBtdWx0aV9zdWZmaXggaW4gdGhlCitjb2RlIGJlbG93KS4gPHRhcmdldC1zeXM+IGlzICdtYWNoaW5lJyBpbiBnY2MncyB0ZXJtaW5vbG9neS4gV2UgdXNlCit0aGVzZSBkaXJlY3RvcmllcyBzbyB0aGF0IG11bHRpcGxlIGdjYyB2ZXJzaW9ucyBjb3VsZCBpbiB0aGVvcnkKK2NvLWV4aXN0IG9uIHRhcmdldC4KKworV2Ugb25seSB3YW50IHRvIGJ1aWxkIG9uZSBnY2MtY3Jvc3MtY2FuYWRpYW4gcGVyIGFyY2ggYW5kIGhhdmUgdGhpcyB3b3JrCitmb3IgYWxsIG11bHRpbGlicy4gPHRhcmdldC1zeXM+IGNhbiBiZSBoYW5kbGVkIGJ5IG1hcHBpbmcgdGhlIG11bHRpbGliCis8dGFyZ2V0LXN5cz4gdG8gdGhlIG9uZSB1c2VkIGJ5IGdjYy1jcm9zcy1jYW5hZGlhbiwgZS5nLgorbWlwczY0LXBvbGttbGxpYjMyLWxpbnV4CitpcyBzeW1saW5rZWQgdG8gYnkgbWlwczY0LXBva3ktbGludXguCisKK1RoZSBkZWZhdWx0IGdjYyBzZWFyY2ggcGF0aCBpbiB0aGUgdGFyZ2V0IHN5c3Jvb3QgZm9yIGEgImxpYjY0IiBtdXRsaWxpYgoraXM6CisKKzxzeXNyb290Pi9saWIzMi9taXBzNjQtcG9reS1saW51eC81LjIuMC8KKzxzeXNyb290Pi9saWIzMi8uLi9saWI2NC8KKzxzeXNyb290Pi91c3IvbGliMzIvbWlwczY0LXBva3ktbGludXgvNS4yLjAvCis8c3lzcm9vdD4vdXNyL2xpYjMyLy4uL2xpYjY0LworPHN5c3Jvb3Q+L2xpYjMyLworPHN5c3Jvb3Q+L3Vzci9saWIzMi8KKword2hpY2ggbWVhbnMgdGhhdCB0aGUgbGliMzIgY3J0YmVnaW4ubyB3aWxsIGJlIGZvdW5kIGFuZCB0aGUgbGliNjQgb25lcword2lsbCBub3Qgd2hpY2ggbGVhZHMgdG8gY29tcGlsZXIgZmFpbHVyZXMuCisKK1RoaXMgcGF0Y2ggaW5qZWN0cyBhIG11bHRpbGliIHZlcnNpb24gb2YgdGhhdCBwYXRoIGZpcnN0IHNvIHRoZSBsaWI2NAorYmluYXJpZXMgY2FuIGJlIGZvdW5kIGZpcnN0LiBXaXRoIHRoaXMgY2hhbmdlIHRoZSBzZWFyY2ggcGF0aCBiZWNvbWVzOgorCis8c3lzcm9vdD4vbGliMzIvLi4vbGliNjQvbWlwczY0LXBva3ktbGludXgvNS4yLjAvCis8c3lzcm9vdD4vbGliMzIvbWlwczY0LXBva3ktbGludXgvNS4yLjAvCis8c3lzcm9vdD4vbGliMzIvLi4vbGliNjQvCis8c3lzcm9vdD4vdXNyL2xpYjMyLy4uL2xpYjY0L21pcHM2NC1wb2t5LWxpbnV4LzUuMi4wLworPHN5c3Jvb3Q+L3Vzci9saWIzMi9taXBzNjQtcG9reS1saW51eC81LjIuMC8KKzxzeXNyb290Pi91c3IvbGliMzIvLi4vbGliNjQvCis8c3lzcm9vdD4vbGliMzIvCis8c3lzcm9vdD4vdXNyL2xpYjMyLworCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKK1JQIDIwMTUvNy8zMQorCitTaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorLS0tCisgZ2NjL2djYy5jIHwgMjkgKysrKysrKysrKysrKysrKysrKysrKysrKysrKy0KKyAxIGZpbGUgY2hhbmdlZCwgMjggaW5zZXJ0aW9ucygrKSwgMSBkZWxldGlvbigtKQorCitkaWZmIC0tZ2l0IGEvZ2NjL2djYy5jIGIvZ2NjL2djYy5jCitpbmRleCA5NGMyNDBlLi4yODEyODE5IDEwMDY0NAorLS0tIGEvZ2NjL2djYy5jCisrKysgYi9nY2MvZ2NjLmMKK0BAIC0yNTA3LDcgKzI1MDcsNyBAQCBmb3JfZWFjaF9wYXRoIChjb25zdCBzdHJ1Y3QgcGF0aF9wcmVmaXggKnBhdGhzLAorICAgICAgIGlmIChwYXRoID09IE5VTEwpCisgCXsKKyAJICBsZW4gPSBwYXRocy0+bWF4X2xlbiArIGV4dHJhX3NwYWNlICsgMTsKKy0JICBsZW4gKz0gTUFYIChNQVggKHN1ZmZpeF9sZW4sIG11bHRpX29zX2Rpcl9sZW4pLCBtdWx0aWFyY2hfbGVuKTsKKysJICBsZW4gKz0gTUFYICgoc3VmZml4X2xlbiArIG11bHRpX29zX2Rpcl9sZW4pLCBtdWx0aWFyY2hfbGVuKTsKKyAJICBwYXRoID0gWE5FV1ZFQyAoY2hhciwgbGVuKTsKKyAJfQorIAorQEAgLTI1MTksNiArMjUxOSwzMyBAQCBmb3JfZWFjaF9wYXRoIChjb25zdCBzdHJ1Y3QgcGF0aF9wcmVmaXggKnBhdGhzLAorIAkgIC8qIExvb2sgZmlyc3QgaW4gTUFDSElORS9WRVJTSU9OIHN1YmRpcmVjdG9yeS4gICovCisgCSAgaWYgKCFza2lwX211bHRpX2RpcikKKyAJICAgIHsKKysJICAgICAgaWYgKCEocGwtPm9zX211bHRpbGliID8gc2tpcF9tdWx0aV9vc19kaXIgOiBza2lwX211bHRpX2RpcikpCisrCSAgICAgICAgeworKwkgICAgICAgICAgY29uc3QgY2hhciAqdGhpc19tdWx0aTsKKysJICAgICAgICAgIHNpemVfdCB0aGlzX211bHRpX2xlbjsKKysKKysJICAgICAgICAgIGlmIChwbC0+b3NfbXVsdGlsaWIpCisrCQkgICAgeworKwkJICAgICAgdGhpc19tdWx0aSA9IG11bHRpX29zX2RpcjsKKysJCSAgICAgIHRoaXNfbXVsdGlfbGVuID0gbXVsdGlfb3NfZGlyX2xlbjsKKysJCSAgICB9CisrCSAgICAgICAgICBlbHNlCisrCQkgICAgeworKwkJICAgICAgdGhpc19tdWx0aSA9IG11bHRpX2RpcjsKKysJCSAgICAgIHRoaXNfbXVsdGlfbGVuID0gbXVsdGlfZGlyX2xlbjsKKysJCSAgICB9CisrCisrCSAgICAgICAgICAvKiBMb29rIGluIG11bHRpbGliIE1BQ0hJTkUvVkVSU0lPTiBzdWJkaXJlY3RvcnkgZmlyc3QgKi8KKysJICAgICAgICAgIGlmICh0aGlzX211bHRpX2xlbikKKysJICAgICAgICAgICAgeworKwkJICAgICAgbWVtY3B5IChwYXRoICsgbGVuLCB0aGlzX211bHRpLCB0aGlzX211bHRpX2xlbiArIDEpOworKwkgICAgICAgICAgICAgIG1lbWNweSAocGF0aCArIGxlbiArIHRoaXNfbXVsdGlfbGVuLCBtdWx0aV9zdWZmaXgsIHN1ZmZpeF9sZW4gKyAxKTsKKysJICAgICAgICAgICAgICByZXQgPSBjYWxsYmFjayAocGF0aCwgY2FsbGJhY2tfaW5mbyk7CisrCSAgICAgICAgICAgICAgICBpZiAocmV0KQorKwkJICAgICAgICAgIGJyZWFrOworKwkgICAgICAgICAgICB9CisrCSAgICAgICAgfQorKworIAkgICAgICBtZW1jcHkgKHBhdGggKyBsZW4sIG11bHRpX3N1ZmZpeCwgc3VmZml4X2xlbiArIDEpOworIAkgICAgICByZXQgPSBjYWxsYmFjayAocGF0aCwgY2FsbGJhY2tfaW5mbyk7CisgCSAgICAgIGlmIChyZXQpCistLSAKKzIuOC4yCisKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy02LjIvMDAzOS1GaXgtdmFyaW91cy1fRk9SX0JVSUxELWFuZC1yZWxhdGVkLXZhcmlhYmxlcy5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy02LjIvMDAzOS1GaXgtdmFyaW91cy1fRk9SX0JVSUxELWFuZC1yZWxhdGVkLXZhcmlhYmxlcy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wY2U3YWVjCi0tLSAvZGV2L251bGwKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTYuMi8wMDM5LUZpeC12YXJpb3VzLV9GT1JfQlVJTEQtYW5kLXJlbGF0ZWQtdmFyaWFibGVzLnBhdGNoCkBAIC0wLDAgKzEsMTM3IEBACitGcm9tIDljZWQ0OWU0NTljY2YxODg3ZmViNThhZGYxZTg4MzZkY2I0YjFiZGYgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorRGF0ZTogTW9uLCA3IERlYyAyMDE1IDIzOjQyOjQ1ICswMDAwCitTdWJqZWN0OiBbUEFUQ0ggMzkvNDZdIEZpeCB2YXJpb3VzIF9GT1JfQlVJTEQgYW5kIHJlbGF0ZWQgdmFyaWFibGVzCisKK1doZW4gZG9pbmcgYSBGT1JfQlVJTEQgdGhpbmcsIHlvdSBoYXZlIHRvIG92ZXJyaWRlIENGTEFHUyB3aXRoCitDRkxBR1NfRk9SX0JVSUxELiBBbmQgaWYgeW91IHVzZSBDKyssIHlvdSBhbHNvIGhhdmUgdG8gb3ZlcnJpZGUKK0NYWEZMQUdTIHdpdGggQ1hYRkxBR1NfRk9SX0JVSUxELgorV2l0aG91dCB0aGlzLCB3aGVuIGJ1aWxkaW5nIGZvciBtaW5ndywgeW91IGVuZCB1cCB0cnlpbmcgdG8gdXNlCit0aGUgbWluZ3cgaGVhZGVycyBmb3IgYSBob3N0IGJ1aWxkLgorCitUaGUgc2FtZSBnb2VzIGZvciBvdGhlciB2YXJpYWJsZXMgYXMgd2VsbCwgc3VjaCBhcyBDUFBGTEFHUywKK0NQUCwgYW5kIEdNUElOQy4KKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK1NpZ25lZC1vZmYtYnk6IFBldGVyIFNlZWJhY2ggPHBldGVyLnNlZWJhY2hAd2luZHJpdmVyLmNvbT4KK1NpZ25lZC1vZmYtYnk6IE1hcmsgSGF0bGUgPG1hcmsuaGF0bGVAd2luZHJpdmVyLmNvbT4KK1NpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CistLS0KKyBNYWtlZmlsZS5pbiAgICAgIHwgNiArKysrKysKKyBNYWtlZmlsZS50cGwgICAgIHwgNSArKysrKworIGdjYy9NYWtlZmlsZS5pbiAgfCAyICstCisgZ2NjL2NvbmZpZ3VyZSAgICB8IDIgKy0KKyBnY2MvY29uZmlndXJlLmFjIHwgMiArLQorIDUgZmlsZXMgY2hhbmdlZCwgMTQgaW5zZXJ0aW9ucygrKSwgMyBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL01ha2VmaWxlLmluIGIvTWFrZWZpbGUuaW4KK2luZGV4IGJlYjliOWEuLjNlMWM2YmMgMTAwNjQ0CistLS0gYS9NYWtlZmlsZS5pbgorKysrIGIvTWFrZWZpbGUuaW4KK0BAIC0xNTIsNiArMTUyLDcgQEAgQlVJTERfRVhQT1JUUyA9IFwKKyAJQ1BQPSIkKENDX0ZPUl9CVUlMRCkgLUUiOyBleHBvcnQgQ1BQOyBcCisgCUNGTEFHUz0iJChDRkxBR1NfRk9SX0JVSUxEKSI7IGV4cG9ydCBDRkxBR1M7IFwKKyAJQ09ORklHX1NIRUxMPSIkKFNIRUxMKSI7IGV4cG9ydCBDT05GSUdfU0hFTEw7IFwKKysJQ1BQRkxBR1M9IiQoQ1BQRkxBR1NfRk9SX0JVSUxEKSI7IGV4cG9ydCBDUFBGTEFHUzsgXAorIAlDWFg9IiQoQ1hYX0ZPUl9CVUlMRCkiOyBleHBvcnQgQ1hYOyBcCisgCUNYWEZMQUdTPSIkKENYWEZMQUdTX0ZPUl9CVUlMRCkiOyBleHBvcnQgQ1hYRkxBR1M7IFwKKyAJR0NKPSIkKEdDSl9GT1JfQlVJTEQpIjsgZXhwb3J0IEdDSjsgXAorQEAgLTE3MCw2ICsxNzEsOSBAQCBCVUlMRF9FWFBPUlRTID0gXAorICMgYnVpbHQgZm9yIHRoZSBidWlsZCBzeXN0ZW0gdG8gb3ZlcnJpZGUgdGhvc2UgaW4gQkFTRV9GTEFHU19UT19QQVNTLgorIEVYVFJBX0JVSUxEX0ZMQUdTID0gXAorIAlDRkxBR1M9IiQoQ0ZMQUdTX0ZPUl9CVUlMRCkiIFwKKysJQ1hYRkxBR1M9IiQoQ1hYRkxBR1NfRk9SX0JVSUxEKSIgXAorKwlDUFA9IiQoQ0NfRk9SX0JVSUxEKSAtRSIgXAorKwlDUFBGTEFHUz0iJChDUFBGTEFHU19GT1JfQlVJTEQpIiBcCisgCUxERkxBR1M9IiQoTERGTEFHU19GT1JfQlVJTEQpIgorIAorICMgVGhpcyBpcyB0aGUgbGlzdCBvZiBkaXJlY3RvcmllcyB0byBidWlsdCBmb3IgdGhlIGhvc3Qgc3lzdGVtLgorQEAgLTE4Nyw2ICsxOTEsNyBAQCBIT1NUX1NVQkRJUiA9IEBob3N0X3N1YmRpckAKKyBIT1NUX0VYUE9SVFMgPSBcCisgCSQoQkFTRV9FWFBPUlRTKSBcCisgCUNDPSIkKENDKSI7IGV4cG9ydCBDQzsgXAorKwlDUFA9IiQoQ0MpIC1FIjsgZXhwb3J0IENQUDsgXAorIAlBREFfQ0ZMQUdTPSIkKEFEQV9DRkxBR1MpIjsgZXhwb3J0IEFEQV9DRkxBR1M7IFwKKyAJQ0ZMQUdTPSIkKENGTEFHUykiOyBleHBvcnQgQ0ZMQUdTOyBcCisgCUNPTkZJR19TSEVMTD0iJChTSEVMTCkiOyBleHBvcnQgQ09ORklHX1NIRUxMOyBcCitAQCAtNzEzLDYgKzcxOCw3IEBAIEJBU0VfRkxBR1NfVE9fUEFTUyA9IFwKKyAJIkNDX0ZPUl9CVUlMRD0kKENDX0ZPUl9CVUlMRCkiIFwKKyAJIkNGTEFHU19GT1JfQlVJTEQ9JChDRkxBR1NfRk9SX0JVSUxEKSIgXAorIAkiQ1hYX0ZPUl9CVUlMRD0kKENYWF9GT1JfQlVJTEQpIiBcCisrCSJDWFhGTEFHU19GT1JfQlVJTEQ9JChDWFhGTEFHU19GT1JfQlVJTEQpIiBcCisgCSJFWFBFQ1Q9JChFWFBFQ1QpIiBcCisgCSJGTEVYPSQoRkxFWCkiIFwKKyAJIklOU1RBTEw9JChJTlNUQUxMKSIgXAorZGlmZiAtLWdpdCBhL01ha2VmaWxlLnRwbCBiL01ha2VmaWxlLnRwbAoraW5kZXggNmIyZWI2YS4uMTE0ZTQ2MiAxMDA2NDQKKy0tLSBhL01ha2VmaWxlLnRwbAorKysrIGIvTWFrZWZpbGUudHBsCitAQCAtMTU0LDYgKzE1NCw3IEBAIEJVSUxEX0VYUE9SVFMgPSBcCisgCUNDPSIkKENDX0ZPUl9CVUlMRCkiOyBleHBvcnQgQ0M7IFwKKyAJQ0ZMQUdTPSIkKENGTEFHU19GT1JfQlVJTEQpIjsgZXhwb3J0IENGTEFHUzsgXAorIAlDT05GSUdfU0hFTEw9IiQoU0hFTEwpIjsgZXhwb3J0IENPTkZJR19TSEVMTDsgXAorKwlDUFBGTEFHUz0iJChDUFBGTEFHU19GT1JfQlVJTEQpIjsgZXhwb3J0IENQUEZMQUdTOyBcCisgCUNYWD0iJChDWFhfRk9SX0JVSUxEKSI7IGV4cG9ydCBDWFg7IFwKKyAJQ1hYRkxBR1M9IiQoQ1hYRkxBR1NfRk9SX0JVSUxEKSI7IGV4cG9ydCBDWFhGTEFHUzsgXAorIAlHQ0o9IiQoR0NKX0ZPUl9CVUlMRCkiOyBleHBvcnQgR0NKOyBcCitAQCAtMTcyLDYgKzE3Myw5IEBAIEJVSUxEX0VYUE9SVFMgPSBcCisgIyBidWlsdCBmb3IgdGhlIGJ1aWxkIHN5c3RlbSB0byBvdmVycmlkZSB0aG9zZSBpbiBCQVNFX0ZMQUdTX1RPX1BBU1MuCisgRVhUUkFfQlVJTERfRkxBR1MgPSBcCisgCUNGTEFHUz0iJChDRkxBR1NfRk9SX0JVSUxEKSIgXAorKwlDWFhGTEFHUz0iJChDWFhGTEFHU19GT1JfQlVJTEQpIiBcCisrCUNQUD0iJChDQ19GT1JfQlVJTEQpIC1FIiBcCisrCUNQUEZMQUdTPSIkKENQUEZMQUdTX0ZPUl9CVUlMRCkiIFwKKyAJTERGTEFHUz0iJChMREZMQUdTX0ZPUl9CVUlMRCkiCisgCisgIyBUaGlzIGlzIHRoZSBsaXN0IG9mIGRpcmVjdG9yaWVzIHRvIGJ1aWx0IGZvciB0aGUgaG9zdCBzeXN0ZW0uCitAQCAtMTg5LDYgKzE5Myw3IEBAIEhPU1RfU1VCRElSID0gQGhvc3Rfc3ViZGlyQAorIEhPU1RfRVhQT1JUUyA9IFwKKyAJJChCQVNFX0VYUE9SVFMpIFwKKyAJQ0M9IiQoQ0MpIjsgZXhwb3J0IENDOyBcCisrCUNQUD0iJChDQykgLUUiOyBleHBvcnQgQ1BQOyBcCisgCUFEQV9DRkxBR1M9IiQoQURBX0NGTEFHUykiOyBleHBvcnQgQURBX0NGTEFHUzsgXAorIAlDRkxBR1M9IiQoQ0ZMQUdTKSI7IGV4cG9ydCBDRkxBR1M7IFwKKyAJQ09ORklHX1NIRUxMPSIkKFNIRUxMKSI7IGV4cG9ydCBDT05GSUdfU0hFTEw7IFwKK2RpZmYgLS1naXQgYS9nY2MvTWFrZWZpbGUuaW4gYi9nY2MvTWFrZWZpbGUuaW4KK2luZGV4IGNjNzU1MzYuLjBhZDJkYzggMTAwNjQ0CistLS0gYS9nY2MvTWFrZWZpbGUuaW4KKysrKyBiL2djYy9NYWtlZmlsZS5pbgorQEAgLTc4MCw3ICs3ODAsNyBAQCBCVUlMRF9MREZMQUdTPUBCVUlMRF9MREZMQUdTQAorIEJVSUxEX05PX1BJRV9GTEFHID0gQEJVSUxEX05PX1BJRV9GTEFHQAorIEJVSUxEX0xERkxBR1MgKz0gJChCVUlMRF9OT19QSUVfRkxBRykKKyBCVUlMRF9DUFBGTEFHUz0gLUkuIC1JJChARCkgLUkkKHNyY2RpcikgLUkkKHNyY2RpcikvJChARCkgXAorLQkJLUkkKHNyY2RpcikvLi4vaW5jbHVkZSBASU5DSU5UTEAgJChDUFBJTkMpICQoQ1BQRkxBR1MpCisrCQktSSQoc3JjZGlyKS8uLi9pbmNsdWRlIEBJTkNJTlRMQCAkKENQUElOQykgJChDUFBGTEFHU19GT1JfQlVJTEQpCisgCisgIyBBY3R1YWwgbmFtZSB0byB1c2Ugd2hlbiBpbnN0YWxsaW5nIGEgbmF0aXZlIGNvbXBpbGVyLgorIEdDQ19JTlNUQUxMX05BTUUgOj0gJChzaGVsbCBlY2hvIGdjY3xzZWQgJyQocHJvZ3JhbV90cmFuc2Zvcm1fbmFtZSknKQorZGlmZiAtLWdpdCBhL2djYy9jb25maWd1cmUgYi9nY2MvY29uZmlndXJlCitpbmRleCAzNzcyNTNlLi43OGZjNjRhIDEwMDc1NQorLS0tIGEvZ2NjL2NvbmZpZ3VyZQorKysrIGIvZ2NjL2NvbmZpZ3VyZQorQEAgLTExNzk5LDcgKzExNzk5LDcgQEAgZWxzZQorIAlDQz0iJHtDQ19GT1JfQlVJTER9IiBDRkxBR1M9IiR7Q0ZMQUdTX0ZPUl9CVUlMRH0iIFwKKyAJQ1hYPSIke0NYWF9GT1JfQlVJTER9IiBDWFhGTEFHUz0iJHtDWFhGTEFHU19GT1JfQlVJTER9IiBcCisgCUxEPSIke0xEX0ZPUl9CVUlMRH0iIExERkxBR1M9IiR7TERGTEFHU19GT1JfQlVJTER9IiBcCistCUdNUElOQz0iIiBDUFBGTEFHUz0iJHtDUFBGTEFHU30gLURHRU5FUkFUT1JfRklMRSIgXAorKwlHTVBJTkM9IiIgQ1BQRkxBR1M9IiR7Q1BQRkxBR1NfRk9SX0JVSUxEfSAtREdFTkVSQVRPUl9GSUxFIiBcCisgCSR7cmVhbHNyY2Rpcn0vY29uZmlndXJlIFwKKyAJCS0tZW5hYmxlLWxhbmd1YWdlcz0ke2VuYWJsZV9sYW5ndWFnZXMtYWxsfSBcCisgCQktLXRhcmdldD0kdGFyZ2V0X2FsaWFzIC0taG9zdD0kYnVpbGRfYWxpYXMgLS1idWlsZD0kYnVpbGRfYWxpYXMKK2RpZmYgLS1naXQgYS9nY2MvY29uZmlndXJlLmFjIGIvZ2NjL2NvbmZpZ3VyZS5hYworaW5kZXggNTRlNzYxOS4uYTk0NjY2ZSAxMDA2NDQKKy0tLSBhL2djYy9jb25maWd1cmUuYWMKKysrKyBiL2djYy9jb25maWd1cmUuYWMKK0BAIC0xNjgyLDcgKzE2ODIsNyBAQCBlbHNlCisgCUNDPSIke0NDX0ZPUl9CVUlMRH0iIENGTEFHUz0iJHtDRkxBR1NfRk9SX0JVSUxEfSIgXAorIAlDWFg9IiR7Q1hYX0ZPUl9CVUlMRH0iIENYWEZMQUdTPSIke0NYWEZMQUdTX0ZPUl9CVUlMRH0iIFwKKyAJTEQ9IiR7TERfRk9SX0JVSUxEfSIgTERGTEFHUz0iJHtMREZMQUdTX0ZPUl9CVUlMRH0iIFwKKy0JR01QSU5DPSIiIENQUEZMQUdTPSIke0NQUEZMQUdTfSAtREdFTkVSQVRPUl9GSUxFIiBcCisrCUdNUElOQz0iIiBDUFBGTEFHUz0iJHtDUFBGTEFHU19GT1JfQlVJTER9IC1ER0VORVJBVE9SX0ZJTEUiIFwKKyAJJHtyZWFsc3JjZGlyfS9jb25maWd1cmUgXAorIAkJLS1lbmFibGUtbGFuZ3VhZ2VzPSR7ZW5hYmxlX2xhbmd1YWdlcy1hbGx9IFwKKyAJCS0tdGFyZ2V0PSR0YXJnZXRfYWxpYXMgLS1ob3N0PSRidWlsZF9hbGlhcyAtLWJ1aWxkPSRidWlsZF9hbGlhcworLS0gCisyLjguMgorCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNi4yLzAwNDAtbmlvczItRGVmaW5lLU1VU0xfRFlOQU1JQ19MSU5LRVIucGF0Y2ggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNi4yLzAwNDAtbmlvczItRGVmaW5lLU1VU0xfRFlOQU1JQ19MSU5LRVIucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzlhNmZkMAotLS0gL2Rldi9udWxsCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy02LjIvMDA0MC1uaW9zMi1EZWZpbmUtTVVTTF9EWU5BTUlDX0xJTktFUi5wYXRjaApAQCAtMCwwICsxLDI4IEBACitGcm9tIGIwNDEyYzAxYzI3NWFhZWI2YjQ1ODQ2MWNkMjQyNTEyMGM4YmNlYzggTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorRGF0ZTogVHVlLCAyIEZlYiAyMDE2IDEwOjI2OjEwIC0wODAwCitTdWJqZWN0OiBbUEFUQ0ggNDAvNDZdIG5pb3MyOiBEZWZpbmUgTVVTTF9EWU5BTUlDX0xJTktFUgorCitTaWduZWQtb2ZmLWJ5OiBNYXJlayBWYXN1dCA8bWFyZXhAZGVueC5kZT4KK1NpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CistLS0KK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCisgZ2NjL2NvbmZpZy9uaW9zMi9saW51eC5oIHwgMSArCisgMSBmaWxlIGNoYW5nZWQsIDEgaW5zZXJ0aW9uKCspCisKK2RpZmYgLS1naXQgYS9nY2MvY29uZmlnL25pb3MyL2xpbnV4LmggYi9nY2MvY29uZmlnL25pb3MyL2xpbnV4LmgKK2luZGV4IDRlZjU1YjUuLjYyYmMxZTcgMTAwNjQ0CistLS0gYS9nY2MvY29uZmlnL25pb3MyL2xpbnV4LmgKKysrKyBiL2djYy9jb25maWcvbmlvczIvbGludXguaAorQEAgLTMwLDYgKzMwLDcgQEAKKyAjZGVmaW5lIENQUF9TUEVDICIle3Bvc2l4Oi1EX1BPU0lYX1NPVVJDRX0gJXtwdGhyZWFkOi1EX1JFRU5UUkFOVH0iCisgCisgI2RlZmluZSBHTElCQ19EWU5BTUlDX0xJTktFUiAiL2xpYi9sZC1saW51eC1uaW9zMi5zby4xIgorKyNkZWZpbmUgTVVTTF9EWU5BTUlDX0xJTktFUiAgIi9saWIvbGQtbXVzbC1uaW9zMi5zby4xIgorIAorICN1bmRlZiBMSU5LX1NQRUMKKyAjZGVmaW5lIExJTktfU1BFQyBMSU5LX1NQRUNfRU5ESUFOIFwKKy0tIAorMi44LjIKKwpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTYuMi8wMDQxLXNzcF9ub25zaGFyZWQucGF0Y2ggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNi4yLzAwNDEtc3NwX25vbnNoYXJlZC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNzQ0NTI5Ci0tLSAvZGV2L251bGwKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTYuMi8wMDQxLXNzcF9ub25zaGFyZWQucGF0Y2gKQEAgLTAsMCArMSwyOCBAQAorRnJvbSA1NTFhNWRiN2FjYjU2ZTA4NWExMDFmMWMyMjJkNTFiMmMxYjAzOWE0IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogU3phYm9sY3MgTmFneSA8bnN6QHBvcnQ3MC5uZXQ+CitEYXRlOiBTYXQsIDcgTm92IDIwMTUgMTQ6NTg6NDAgKzAwMDAKK1N1YmplY3Q6IFtQQVRDSCA0MS80Nl0gc3NwX25vbnNoYXJlZAorCistLS0KK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbT0UgQ29uZmlndXJhdGlvbl0KKworIGdjYy9nY2MuYyB8IDMgKystCisgMSBmaWxlIGNoYW5nZWQsIDIgaW5zZXJ0aW9ucygrKSwgMSBkZWxldGlvbigtKQorCitkaWZmIC0tZ2l0IGEvZ2NjL2djYy5jIGIvZ2NjL2djYy5jCitpbmRleCAyODEyODE5Li45ZGU5NmVlIDEwMDY0NAorLS0tIGEvZ2NjL2djYy5jCisrKysgYi9nY2MvZ2NjLmMKK0BAIC04NjMsNyArODYzLDggQEAgcHJvcGVyIHBvc2l0aW9uIGFtb25nIHRoZSBvdGhlciBvdXRwdXQgZmlsZXMuICAqLworICNpZm5kZWYgTElOS19TU1BfU1BFQworICNpZmRlZiBUQVJHRVRfTElCQ19QUk9WSURFU19TU1AKKyAjZGVmaW5lIExJTktfU1NQX1NQRUMgIiV7ZnN0YWNrLXByb3RlY3Rvcnxmc3RhY2stcHJvdGVjdG9yLWFsbCIgXAorLQkJICAgICAgICJ8ZnN0YWNrLXByb3RlY3Rvci1zdHJvbmd8ZnN0YWNrLXByb3RlY3Rvci1leHBsaWNpdDp9IgorKwkJICAgICAgICJ8ZnN0YWNrLXByb3RlY3Rvci1zdHJvbmd8ZnN0YWNrLXByb3RlY3Rvci1leHBsaWNpdCIgXAorKwkJICAgICAgICI6LWxzc3Bfbm9uc2hhcmVkfSIKKyAjZWxzZQorICNkZWZpbmUgTElOS19TU1BfU1BFQyAiJXtmc3RhY2stcHJvdGVjdG9yfGZzdGFjay1wcm90ZWN0b3ItYWxsIiBcCisgCQkgICAgICAgInxmc3RhY2stcHJvdGVjdG9yLXN0cm9uZ3xmc3RhY2stcHJvdGVjdG9yLWV4cGxpY2l0IiBcCistLSAKKzIuOC4yCisKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy02LjIvMDA0Mi1nY2MtbGliY3BwLXN1cHBvcnQtZmZpbGUtcHJlZml4LW1hcC1vbGQtbmV3LnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTYuMi8wMDQyLWdjYy1saWJjcHAtc3VwcG9ydC1mZmlsZS1wcmVmaXgtbWFwLW9sZC1uZXcucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODYxZjBmZAotLS0gL2Rldi9udWxsCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy02LjIvMDA0Mi1nY2MtbGliY3BwLXN1cHBvcnQtZmZpbGUtcHJlZml4LW1hcC1vbGQtbmV3LnBhdGNoCkBAIC0wLDAgKzEsMjkyIEBACitGcm9tIGJhNzM4Y2M0MTFjOWE1NGUzODllMzM2YmNhYTBhMjQyOGRkNGE5ZDIgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBIb25neHUgSmlhIDxob25neHUuamlhQHdpbmRyaXZlci5jb20+CitEYXRlOiBXZWQsIDE2IE1hciAyMDE2IDAyOjI3OjQzIC0wNDAwCitTdWJqZWN0OiBbUEFUQ0ggNDIvNDZdIGdjYy9saWJjcHA6IHN1cHBvcnQgLWZmaWxlLXByZWZpeC1tYXA9PG9sZD49PG5ldz4KKworU2ltaWxhciAtZmRlYnVnLXByZWZpeC1tYXAsIGFkZCBvcHRpb24gLWZmaWxlLXByZWZpeC1tYXAgdG8gbWFwIG9uZQorZGlyZWN0b3J5IG5hbWUgKG9sZCkgdG8gYW5vdGhlciAobmV3KSBpbiBfX0ZJTEVfXywgX19CQVNFX0ZJTEVfXyBhbmQKK19fYnVpbHRpbl9GSUxFICgpLgorCitodHRwczovL2djYy5nbnUub3JnL2J1Z3ppbGxhL3Nob3dfYnVnLmNnaT9pZD03MDI2OAorCitVcHN0cmVhbS1TdGF0dXM6IFN1Ym1pdHRlZCBbZ2NjLXBhdGNoZXNAZ2NjLmdudS5vcmddCitTaWduZWQtb2ZmLWJ5OiBIb25neHUgSmlhIDxob25neHUuamlhQHdpbmRyaXZlci5jb20+CistLS0KKyBnY2MvYy1mYW1pbHkvYy1vcHRzLmMgICAgIHwgMTMgKysrKysrKworIGdjYy9jLWZhbWlseS9jLm9wdCAgICAgICAgfCAgNCArKysKKyBnY2MvZHdhcmYyb3V0LmMgICAgICAgICAgIHwgIDEgKworIGdjYy9naW1wbGlmeS5jICAgICAgICAgICAgfCAgMyArKworIGxpYmNwcC9NYWtlZmlsZS5pbiAgICAgICAgfCAxMCArKystLS0KKyBsaWJjcHAvZmlsZS1tYXAuYyAgICAgICAgIHwgOTIgKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysKKyBsaWJjcHAvaW5jbHVkZS9maWxlLW1hcC5oIHwgMzAgKysrKysrKysrKysrKysrKworIGxpYmNwcC9tYWNyby5jICAgICAgICAgICAgfCAgMiArKworIDggZmlsZXMgY2hhbmdlZCwgMTUwIGluc2VydGlvbnMoKyksIDUgZGVsZXRpb25zKC0pCisgY3JlYXRlIG1vZGUgMTAwNjQ0IGxpYmNwcC9maWxlLW1hcC5jCisgY3JlYXRlIG1vZGUgMTAwNjQ0IGxpYmNwcC9pbmNsdWRlL2ZpbGUtbWFwLmgKKworZGlmZiAtLWdpdCBhL2djYy9jLWZhbWlseS9jLW9wdHMuYyBiL2djYy9jLWZhbWlseS9jLW9wdHMuYworaW5kZXggZmVjNThiYy4uN2EwYWY0MyAxMDA2NDQKKy0tLSBhL2djYy9jLWZhbWlseS9jLW9wdHMuYworKysrIGIvZ2NjL2MtZmFtaWx5L2Mtb3B0cy5jCitAQCAtMzgsNiArMzgsMTQgQEAgYWxvbmcgd2l0aCBHQ0M7IHNlZSB0aGUgZmlsZSBDT1BZSU5HMy4gIElmIG5vdCBzZWUKKyAjaW5jbHVkZSAib3B0cy5oIgorICNpbmNsdWRlICJwbHVnaW4uaCIJCS8qIEZvciBQTFVHSU5fSU5DTFVERV9GSUxFIGV2ZW50LiAgKi8KKyAjaW5jbHVkZSAibWtkZXBzLmgiCisrI2luY2x1ZGUgImZpbGUtbWFwLmgiCisrI2luY2x1ZGUgImMtdGFyZ2V0LmgiCisrI2luY2x1ZGUgInRtLmgiCQkJLyogRm9yIEJZVEVTX0JJR19FTkRJQU4sCisrCQkJCSAgIERPTExBUlNfSU5fSURFTlRJRklFUlMsCisrCQkJCSAgIFNURENfMF9JTl9TWVNURU1fSEVBREVSUywKKysJCQkJICAgVEFSR0VUX0ZMVF9FVkFMX01FVEhPRF9OT05fREVGQVVMVCBhbmQKKysJCQkJICAgVEFSR0VUX09QVEYuICAqLworKyNpbmNsdWRlICJ0bV9wLmgiCQkvKiBGb3IgQ19DT01NT05fT1ZFUlJJREVfT1BUSU9OUy4gICovCisgI2luY2x1ZGUgImR1bXBmaWxlLmgiCisgCisgI2lmbmRlZiBET0xMQVJTX0lOX0lERU5USUZJRVJTCitAQCAtNTAzLDYgKzUxMSwxMSBAQCBjX2NvbW1vbl9oYW5kbGVfb3B0aW9uIChzaXplX3Qgc2NvZGUsIGNvbnN0IGNoYXIgKmFyZywgaW50IHZhbHVlLAorICAgICAgIGNwcF9vcHRzLT5uYXJyb3dfY2hhcnNldCA9IGFyZzsKKyAgICAgICBicmVhazsKKyAKKysgICAgY2FzZSBPUFRfZmZpbGVfcHJlZml4X21hcF86CisrICAgICAgaWYgKGFkZF9maWxlX3ByZWZpeF9tYXAgKGFyZykgPCAwKQorKyAgICAgICAgZXJyb3IgKCJpbnZhbGlkIGFyZ3VtZW50ICVxcyB0byAtZmZpbGUtcHJlZml4LW1hcCIsIGFyZyk7CisrICAgICAgYnJlYWs7CisrCisgICAgIGNhc2UgT1BUX2Z3aWRlX2V4ZWNfY2hhcnNldF86CisgICAgICAgY3BwX29wdHMtPndpZGVfY2hhcnNldCA9IGFyZzsKKyAgICAgICBicmVhazsKK2RpZmYgLS1naXQgYS9nY2MvYy1mYW1pbHkvYy5vcHQgYi9nY2MvYy1mYW1pbHkvYy5vcHQKK2luZGV4IDY2MGRhNmMuLjMxZjdiMzQgMTAwNjQ0CistLS0gYS9nY2MvYy1mYW1pbHkvYy5vcHQKKysrKyBiL2djYy9jLWZhbWlseS9jLm9wdAorQEAgLTEyMDgsNiArMTIwOCwxMCBAQCBmZXhlYy1jaGFyc2V0PQorIEMgT2JqQyBDKysgT2JqQysrIEpvaW5lZCBSZWplY3ROZWdhdGl2ZQorIC1mZXhlYy1jaGFyc2V0PTxjc2V0PglDb252ZXJ0IGFsbCBzdHJpbmdzIGFuZCBjaGFyYWN0ZXIgY29uc3RhbnRzIHRvIGNoYXJhY3RlciBzZXQgPGNzZXQ+LgorIAorK2ZmaWxlLXByZWZpeC1tYXA9CisrQyBPYmpDIEMrKyBPYmpDKysgSm9pbmVkIFJlamVjdE5lZ2F0aXZlCisrLWZmaWxlLXByZWZpeC1tYXA9PG9sZD1uZXc+CU1hcCBvbmUgZGlyZWN0b3J5IG5hbWUgdG8gYW5vdGhlciBpbiBfX0ZJTEVfXywgX19CQVNFX0ZJTEVfXyBhbmQgX19idWlsdGluX0ZJTEUgKCkKKysKKyBmZXh0ZW5kZWQtaWRlbnRpZmllcnMKKyBDIE9iakMgQysrIE9iakMrKworIFBlcm1pdCB1bml2ZXJzYWwgY2hhcmFjdGVyIG5hbWVzIChcXHUgYW5kIFxcVSkgaW4gaWRlbnRpZmllcnMuCitkaWZmIC0tZ2l0IGEvZ2NjL2R3YXJmMm91dC5jIGIvZ2NjL2R3YXJmMm91dC5jCitpbmRleCA4MGYyZGY1Li5hMmJmY2MwIDEwMDY0NAorLS0tIGEvZ2NjL2R3YXJmMm91dC5jCisrKysgYi9nY2MvZHdhcmYyb3V0LmMKK0BAIC0yMTY3Miw2ICsyMTY3Miw3IEBAIGdlbl9wcm9kdWNlcl9zdHJpbmcgKHZvaWQpCisgICAgICAgY2FzZSBPUFRfZmx0cmFuc19vdXRwdXRfbGlzdF86CisgICAgICAgY2FzZSBPUFRfZnJlc29sdXRpb25fOgorICAgICAgIGNhc2UgT1BUX2ZkZWJ1Z19wcmVmaXhfbWFwXzoKKysgICAgICBjYXNlIE9QVF9mZmlsZV9wcmVmaXhfbWFwXzoKKyAJLyogSWdub3JlIHRoZXNlLiAgKi8KKyAJY29udGludWU7CisgICAgICAgZGVmYXVsdDoKK2RpZmYgLS1naXQgYS9nY2MvZ2ltcGxpZnkuYyBiL2djYy9naW1wbGlmeS5jCitpbmRleCBlMjIzZTU5Li4xNDMzYzI1IDEwMDY0NAorLS0tIGEvZ2NjL2dpbXBsaWZ5LmMKKysrKyBiL2djYy9naW1wbGlmeS5jCitAQCAtNTcsNiArNTcsOCBAQCBhbG9uZyB3aXRoIEdDQzsgc2VlIHRoZSBmaWxlIENPUFlJTkczLiAgSWYgbm90IHNlZQorICNpbmNsdWRlICJnb21wLWNvbnN0YW50cy5oIgorICNpbmNsdWRlICJ0cmVlLWR1bXAuaCIKKyAjaW5jbHVkZSAiZ2ltcGxlLXdhbGsuaCIKKysjaW5jbHVkZSAiZmlsZS1tYXAuaCIKKysKKyAjaW5jbHVkZSAibGFuZ2hvb2tzLWRlZi5oIgkvKiBGSVhNRTogZm9yIGxoZF9zZXRfZGVjbF9hc3NlbWJsZXJfbmFtZSAqLworICNpbmNsdWRlICJidWlsdGlucy5oIgorIAorQEAgLTI0MzIsNiArMjQzNCw3IEBAIGdpbXBsaWZ5X2NhbGxfZXhwciAodHJlZSAqZXhwcl9wLCBnaW1wbGVfc2VxICpwcmVfcCwgYm9vbCB3YW50X3ZhbHVlKQorICAgICAgIGNhc2UgQlVJTFRfSU5fRklMRToKKyAJeworIAkgIGNvbnN0IGNoYXIgKmxvY2ZpbGUgPSBMT0NBVElPTl9GSUxFIChFWFBSX0xPQ0FUSU9OICgqZXhwcl9wKSk7CisrCSAgbG9jZmlsZSA9IHJlbWFwX2ZpbGVfZmlsZW5hbWUgKGxvY2ZpbGUpOworIAkgICpleHByX3AgPSBidWlsZF9zdHJpbmdfbGl0ZXJhbCAoc3RybGVuIChsb2NmaWxlKSArIDEsIGxvY2ZpbGUpOworIAkgIHJldHVybiBHU19PSzsKKyAJfQorZGlmZiAtLWdpdCBhL2xpYmNwcC9NYWtlZmlsZS5pbiBiL2xpYmNwcC9NYWtlZmlsZS5pbgoraW5kZXggYTdkNzgyOC4uM2QyOTU3MiAxMDA2NDQKKy0tLSBhL2xpYmNwcC9NYWtlZmlsZS5pbgorKysrIGIvbGliY3BwL01ha2VmaWxlLmluCitAQCAtODQsMTIgKzg0LDEyIEBAIERFUE1PREUgPSAkKENYWERFUE1PREUpCisgCisgCisgbGliY3BwX2FfT0JKUyA9IGNoYXJzZXQubyBkaXJlY3RpdmVzLm8gZGlyZWN0aXZlcy1vbmx5Lm8gZXJyb3JzLm8gXAorLQlleHByLm8gZmlsZXMubyBpZGVudGlmaWVycy5vIGluaXQubyBsZXgubyBsaW5lLW1hcC5vIG1hY3JvLm8gXAorLQlta2RlcHMubyBwY2gubyBzeW10YWIubyB0cmFkaXRpb25hbC5vCisrCWV4cHIubyBmaWxlLW1hcC5vIGZpbGVzLm8gaWRlbnRpZmllcnMubyBpbml0Lm8gbGV4Lm8gbGluZS1tYXAubyBcCisrCW1hY3JvLm8gbWtkZXBzLm8gcGNoLm8gc3ltdGFiLm8gdHJhZGl0aW9uYWwubworIAorIGxpYmNwcF9hX1NPVVJDRVMgPSBjaGFyc2V0LmMgZGlyZWN0aXZlcy5jIGRpcmVjdGl2ZXMtb25seS5jIGVycm9ycy5jIFwKKy0JZXhwci5jIGZpbGVzLmMgaWRlbnRpZmllcnMuYyBpbml0LmMgbGV4LmMgbGluZS1tYXAuYyBtYWNyby5jIFwKKy0JbWtkZXBzLmMgcGNoLmMgc3ltdGFiLmMgdHJhZGl0aW9uYWwuYworKwlleHByLmMgZmlsZS1tYXAuYyBmaWxlcy5jIGlkZW50aWZpZXJzLmMgaW5pdC5jIGxleC5jIGxpbmUtbWFwLmMgXAorKwltYWNyby5jIG1rZGVwcy5jIHBjaC5jIHN5bXRhYi5jIHRyYWRpdGlvbmFsLmMKKyAKKyBhbGw6IGxpYmNwcC5hICQoVVNFRF9DQVRBTE9HUykKKyAKK0BAIC0yNjMsNyArMjYzLDcgQEAgcG8vJChQQUNLQUdFKS5wb3Q6ICQobGliY3BwX2FfU09VUkNFUykKKyAKKyBUQUdTX1NPVVJDRVMgPSAkKGxpYmNwcF9hX1NPVVJDRVMpIGludGVybmFsLmggdWNuaWQuaCBcCisgICAgIGluY2x1ZGUvbGluZS1tYXAuaCBpbmNsdWRlL3N5bXRhYi5oIGluY2x1ZGUvY3BwLWlkLWRhdGEuaCBcCistICAgIGluY2x1ZGUvY3BwbGliLmggaW5jbHVkZS9ta2RlcHMuaCBzeXN0ZW0uaAorKyAgICBpbmNsdWRlL2NwcGxpYi5oIGluY2x1ZGUvbWtkZXBzLmggc3lzdGVtLmggaW5jbHVkZS9maWxlLW1hcC5oCisgCisgVEFHUzogJChUQUdTX1NPVVJDRVMpCisgCWNkICQoc3JjZGlyKSAmJiBldGFncyAkKFRBR1NfU09VUkNFUykKK2RpZmYgLS1naXQgYS9saWJjcHAvZmlsZS1tYXAuYyBiL2xpYmNwcC9maWxlLW1hcC5jCituZXcgZmlsZSBtb2RlIDEwMDY0NAoraW5kZXggMDAwMDAwMC4uMTgwMzVlZgorLS0tIC9kZXYvbnVsbAorKysrIGIvbGliY3BwL2ZpbGUtbWFwLmMKK0BAIC0wLDAgKzEsOTIgQEAKKysvKiBNYXAgb25lIGRpcmVjdG9yeSBuYW1lIHRvIGFub3RoZXIgaW4gX19GSUxFX18sIF9fQkFTRV9GSUxFX18KKysgICBhbmQgX19idWlsdGluX0ZJTEUgKCkuCisrICAgQ29weXJpZ2h0IChDKSAyMDAxLTIwMTYgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisrCisrVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyt1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKKytGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CisrbGF0ZXIgdmVyc2lvbi4KKysKKytUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKytidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorK01FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKytHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorKworK1lvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisrYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IHNlZSB0aGUgZmlsZSBDT1BZSU5HMy4gIElmIG5vdCBzZWUKKys8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisrCisrIEluIG90aGVyIHdvcmRzLCB5b3UgYXJlIHdlbGNvbWUgdG8gdXNlLCBzaGFyZSBhbmQgaW1wcm92ZSB0aGlzIHByb2dyYW0uCisrIFlvdSBhcmUgZm9yYmlkZGVuIHRvIGZvcmJpZCBhbnlvbmUgZWxzZSB0byB1c2UsIHNoYXJlIGFuZCBpbXByb3ZlCisrIHdoYXQgeW91IGdpdmUgdGhlbS4gICBIZWxwIHN0YW1wIG91dCBzb2Z0d2FyZS1ob2FyZGluZyEgICovCisrCisrI2luY2x1ZGUgImNvbmZpZy5oIgorKyNpbmNsdWRlICJzeXN0ZW0uaCIKKysjaW5jbHVkZSAiZmlsZS1tYXAuaCIKKysKKysvKiBTdHJ1Y3R1cmUgcmVjb3JkaW5nIHRoZSBtYXBwaW5nIGZyb20gc291cmNlIGZpbGUgYW5kIGRpcmVjdG9yeQorKyAgIG5hbWVzIGF0IGNvbXBpbGUgdGltZSB0byBfX0ZJTEVfXyAqLworK3R5cGVkZWYgc3RydWN0IGZpbGVfcHJlZml4X21hcAorK3sKKysgIGNvbnN0IGNoYXIgKm9sZF9wcmVmaXg7CisrICBjb25zdCBjaGFyICpuZXdfcHJlZml4OworKyAgc2l6ZV90IG9sZF9sZW47CisrICBzaXplX3QgbmV3X2xlbjsKKysgIHN0cnVjdCBmaWxlX3ByZWZpeF9tYXAgKm5leHQ7CisrfSBmaWxlX3ByZWZpeF9tYXA7CisrCisrLyogTGlua2VkIGxpc3Qgb2Ygc3VjaCBzdHJ1Y3R1cmVzLiAgKi8KKytzdGF0aWMgZmlsZV9wcmVmaXhfbWFwICpmaWxlX3ByZWZpeF9tYXBzOworKworKy8qIFJlY29yZCBwcmVmaXggbWFwcGluZyBvZiBfX0ZJTEVfXy4gIEFSRyBpcyB0aGUgYXJndW1lbnQgdG8KKysgICAtZmZpbGUtcHJlZml4LW1hcCBhbmQgbXVzdCBiZSBvZiB0aGUgZm9ybSBPTEQ9TkVXLiAgKi8KKytpbnQKKythZGRfZmlsZV9wcmVmaXhfbWFwIChjb25zdCBjaGFyICphcmcpCisreworKyAgZmlsZV9wcmVmaXhfbWFwICptYXA7CisrICBjb25zdCBjaGFyICpwOworKworKyAgcCA9IHN0cmNociAoYXJnLCAnPScpOworKyAgaWYgKCFwKQorKyAgeworKyAgICAgIGZwcmludGYoc3RkZXJyLCAiaW52YWxpZCBhcmd1bWVudCAlcXMgdG8gLWZmaWxlLXByZWZpeC1tYXAiLCBhcmcpOworKyAgICAgIHJldHVybiAtMTsKKysgIH0KKysgIG1hcCA9IFhORVcgKGZpbGVfcHJlZml4X21hcCk7CisrICBtYXAtPm9sZF9wcmVmaXggPSB4c3RybmR1cCAoYXJnLCBwIC0gYXJnKTsKKysgIG1hcC0+b2xkX2xlbiA9IHAgLSBhcmc7CisrICBwKys7CisrICBtYXAtPm5ld19wcmVmaXggPSB4c3RyZHVwIChwKTsKKysgIG1hcC0+bmV3X2xlbiA9IHN0cmxlbiAocCk7CisrICBtYXAtPm5leHQgPSBmaWxlX3ByZWZpeF9tYXBzOworKyAgZmlsZV9wcmVmaXhfbWFwcyA9IG1hcDsKKysKKysgIHJldHVybiAwOworK30KKysKKysvKiBQZXJmb3JtIHVzZXItc3BlY2lmaWVkIG1hcHBpbmcgb2YgX19GSUxFX18gcHJlZml4ZXMuICBSZXR1cm4KKysgICB0aGUgbmV3IG5hbWUgY29ycmVzcG9uZGluZyB0byBmaWxlbmFtZS4gICovCisrCisrY29uc3QgY2hhciAqCisrcmVtYXBfZmlsZV9maWxlbmFtZSAoY29uc3QgY2hhciAqZmlsZW5hbWUpCisreworKyAgZmlsZV9wcmVmaXhfbWFwICptYXA7CisrICBjaGFyICpzOworKyAgY29uc3QgY2hhciAqbmFtZTsKKysgIHNpemVfdCBuYW1lX2xlbjsKKysKKysgIGZvciAobWFwID0gZmlsZV9wcmVmaXhfbWFwczsgbWFwOyBtYXAgPSBtYXAtPm5leHQpCisrICAgIGlmIChmaWxlbmFtZV9uY21wIChmaWxlbmFtZSwgbWFwLT5vbGRfcHJlZml4LCBtYXAtPm9sZF9sZW4pID09IDApCisrICAgICAgYnJlYWs7CisrICBpZiAoIW1hcCkKKysgICAgcmV0dXJuIGZpbGVuYW1lOworKyAgbmFtZSA9IGZpbGVuYW1lICsgbWFwLT5vbGRfbGVuOworKyAgbmFtZV9sZW4gPSBzdHJsZW4gKG5hbWUpICsgMTsKKysgIHMgPSAoY2hhciAqKSBhbGxvY2EgKG5hbWVfbGVuICsgbWFwLT5uZXdfbGVuKTsKKysgIG1lbWNweSAocywgbWFwLT5uZXdfcHJlZml4LCBtYXAtPm5ld19sZW4pOworKyAgbWVtY3B5IChzICsgbWFwLT5uZXdfbGVuLCBuYW1lLCBuYW1lX2xlbik7CisrCisrICByZXR1cm4geHN0cmR1cCAocyk7CisrfQorKworKworZGlmZiAtLWdpdCBhL2xpYmNwcC9pbmNsdWRlL2ZpbGUtbWFwLmggYi9saWJjcHAvaW5jbHVkZS9maWxlLW1hcC5oCituZXcgZmlsZSBtb2RlIDEwMDY0NAoraW5kZXggMDAwMDAwMC4uODc1MDMxNQorLS0tIC9kZXYvbnVsbAorKysrIGIvbGliY3BwL2luY2x1ZGUvZmlsZS1tYXAuaAorQEAgLTAsMCArMSwzMCBAQAorKy8qIE1hcCBvbmUgZGlyZWN0b3J5IG5hbWUgdG8gYW5vdGhlciBpbiBfX0ZJTEVfXywgX19CQVNFX0ZJTEVfXworKyAgIGFuZCBfX2J1aWx0aW5fRklMRSAoKS4KKysgICBDb3B5cmlnaHQgKEMpIDIwMDEtMjAxNiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKysKKytUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorK3VuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorK0ZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMywgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKKytsYXRlciB2ZXJzaW9uLgorKworK1RoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorK2J1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisrTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorK0dOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisrCisrWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKythbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgc2VlIHRoZSBmaWxlIENPUFlJTkczLiAgSWYgbm90IHNlZQorKzxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKysKKysgSW4gb3RoZXIgd29yZHMsIHlvdSBhcmUgd2VsY29tZSB0byB1c2UsIHNoYXJlIGFuZCBpbXByb3ZlIHRoaXMgcHJvZ3JhbS4KKysgWW91IGFyZSBmb3JiaWRkZW4gdG8gZm9yYmlkIGFueW9uZSBlbHNlIHRvIHVzZSwgc2hhcmUgYW5kIGltcHJvdmUKKysgd2hhdCB5b3UgZ2l2ZSB0aGVtLiAgIEhlbHAgc3RhbXAgb3V0IHNvZnR3YXJlLWhvYXJkaW5nISAgKi8KKysKKysjaWZuZGVmIExJQkNQUF9GSUxFX01BUF9ICisrI2RlZmluZSBMSUJDUFBfRklMRV9NQVBfSAorKworK2NvbnN0IGNoYXIgKiByZW1hcF9maWxlX2ZpbGVuYW1lIChjb25zdCBjaGFyICpmaWxlbmFtZSk7CisrCisraW50IGFkZF9maWxlX3ByZWZpeF9tYXAgKGNvbnN0IGNoYXIgKmFyZyk7CisrCisrI2VuZGlmIC8qICFMSUJDUFBfRklMRV9NQVBfSCAgKi8KK2RpZmYgLS1naXQgYS9saWJjcHAvbWFjcm8uYyBiL2xpYmNwcC9tYWNyby5jCitpbmRleCBjMjUxNTUzLi4zY2VlYzNkIDEwMDY0NAorLS0tIGEvbGliY3BwL21hY3JvLmMKKysrKyBiL2xpYmNwcC9tYWNyby5jCitAQCAtMjYsNiArMjYsNyBAQCBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgc2VlIHRoZSBmaWxlIENPUFlJTkczLiAgSWYgbm90IHNlZQorICNpbmNsdWRlICJzeXN0ZW0uaCIKKyAjaW5jbHVkZSAiY3BwbGliLmgiCisgI2luY2x1ZGUgImludGVybmFsLmgiCisrI2luY2x1ZGUgImZpbGUtbWFwLmgiCisgCisgdHlwZWRlZiBzdHJ1Y3QgbWFjcm9fYXJnIG1hY3JvX2FyZzsKKyAvKiBUaGlzIHN0cnVjdHVyZSByZXByZXNlbnRzIHRoZSB0b2tlbnMgb2YgYSBtYWNybyBhcmd1bWVudC4gIFRoZXNlCitAQCAtMzAxLDYgKzMwMiw3IEBAIF9jcHBfYnVpbHRpbl9tYWNyb190ZXh0IChjcHBfcmVhZGVyICpwZmlsZSwgY3BwX2hhc2hub2RlICpub2RlLAorIAkgICAgaWYgKCFuYW1lKQorIAkgICAgICBhYm9ydCAoKTsKKyAJICB9CisrCW5hbWUgPSByZW1hcF9maWxlX2ZpbGVuYW1lIChuYW1lKTsKKyAJbGVuID0gc3RybGVuIChuYW1lKTsKKyAJYnVmID0gX2NwcF91bmFsaWduZWRfYWxsb2MgKHBmaWxlLCBsZW4gKiAyICsgMyk7CisgCXJlc3VsdCA9IGJ1ZjsKKy0tIAorMi44LjIKKwpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTYuMi8wMDQzLVJldXNlLWZkZWJ1Zy1wcmVmaXgtbWFwLXRvLXJlcGxhY2UtZmZpbGUtcHJlZml4LW1hcC5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy02LjIvMDA0My1SZXVzZS1mZGVidWctcHJlZml4LW1hcC10by1yZXBsYWNlLWZmaWxlLXByZWZpeC1tYXAucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDA3N2Y4MAotLS0gL2Rldi9udWxsCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy02LjIvMDA0My1SZXVzZS1mZGVidWctcHJlZml4LW1hcC10by1yZXBsYWNlLWZmaWxlLXByZWZpeC1tYXAucGF0Y2gKQEAgLTAsMCArMSw0MyBAQAorRnJvbSAyNWM4N2M2Y2M0MGVjNWNjNjk2NWY4YmZiMjE1YmVjMDFhYmQ2ZDgyIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogSG9uZ3h1IEppYSA8aG9uZ3h1LmppYUB3aW5kcml2ZXIuY29tPgorRGF0ZTogV2VkLCAxNiBNYXIgMjAxNiAwNTozOTo1OSAtMDQwMAorU3ViamVjdDogW1BBVENIIDQzLzQ2XSBSZXVzZSAtZmRlYnVnLXByZWZpeC1tYXAgdG8gcmVwbGFjZSAtZmZpbGUtcHJlZml4LW1hcAorCitUaGUgb2UtY29yZSBtYXkgdXNlIGV4dGVybmFsIHRvb2xjaGFpbiB0byBjb21waWxlLAord2hpY2ggbWF5IG5vdCBzdXBwb3J0IC1mZmlsZS1wcmVmaXgtbWFwLgorCitTaW5jZSB3ZSB1c2UgLWZkZWJ1Zy1wcmVmaXgtbWFwIHRvIGRvIHRoZSBzYW1lIHRoaW5nLAorc28gd2UgY291bGQgcmV1c2UgaXQgdG8gcmVwbGFjZSAtZmZpbGUtcHJlZml4LW1hcC4KKworVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlW29lLWNvcmUgc3BlY2lmaWNdCisKK1NpZ25lZC1vZmYtYnk6IEhvbmd4dSBKaWEgPGhvbmd4dS5qaWFAd2luZHJpdmVyLmNvbT4KKy0tLQorIGdjYy9vcHRzLWdsb2JhbC5jIHwgNCArKysrCisgMSBmaWxlIGNoYW5nZWQsIDQgaW5zZXJ0aW9ucygrKQorCitkaWZmIC0tZ2l0IGEvZ2NjL29wdHMtZ2xvYmFsLmMgYi9nY2Mvb3B0cy1nbG9iYWwuYworaW5kZXggYjdlNTIzMi4uMTIxZDdiOSAxMDA2NDQKKy0tLSBhL2djYy9vcHRzLWdsb2JhbC5jCisrKysgYi9nY2Mvb3B0cy1nbG9iYWwuYworQEAgLTMxLDYgKzMxLDcgQEAgYWxvbmcgd2l0aCBHQ0M7IHNlZSB0aGUgZmlsZSBDT1BZSU5HMy4gIElmIG5vdCBzZWUKKyAjaW5jbHVkZSAibGFuZ2hvb2tzLmgiCisgI2luY2x1ZGUgImRiZ2NudC5oIgorICNpbmNsdWRlICJkZWJ1Zy5oIgorKyNpbmNsdWRlICJmaWxlLW1hcC5oIgorICNpbmNsdWRlICJvdXRwdXQuaCIKKyAjaW5jbHVkZSAicGx1Z2luLmgiCisgI2luY2x1ZGUgInRvcGxldi5oIgorQEAgLTM1Nyw2ICszNTgsOSBAQCBoYW5kbGVfY29tbW9uX2RlZmVycmVkX29wdGlvbnMgKHZvaWQpCisgCisgCWNhc2UgT1BUX2ZkZWJ1Z19wcmVmaXhfbWFwXzoKKyAJICBhZGRfZGVidWdfcHJlZml4X21hcCAob3B0LT5hcmcpOworKworKwkgIC8qIFJldXNlIC1mZGVidWctcHJlZml4LW1hcCB0byByZXBsYWNlIC1mZmlsZS1wcmVmaXgtbWFwICovCisrCSAgYWRkX2ZpbGVfcHJlZml4X21hcCAob3B0LT5hcmcpOworIAkgIGJyZWFrOworIAorIAljYXNlIE9QVF9mZHVtcF86CistLSAKKzIuOC4yCisKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy02LjIvMDA0NC1nY2MtZmluYWwuYy1mZGVidWctcHJlZml4LW1hcC1zdXBwb3J0LXRvLXJlbWFwLXNvdXJjLnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTYuMi8wMDQ0LWdjYy1maW5hbC5jLWZkZWJ1Zy1wcmVmaXgtbWFwLXN1cHBvcnQtdG8tcmVtYXAtc291cmMucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWQ0MWFmNAotLS0gL2Rldi9udWxsCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy02LjIvMDA0NC1nY2MtZmluYWwuYy1mZGVidWctcHJlZml4LW1hcC1zdXBwb3J0LXRvLXJlbWFwLXNvdXJjLnBhdGNoCkBAIC0wLDAgKzEsNTQgQEAKK0Zyb20gNmFiMjNlODhhZWYyMmJiYWJlZTdiOTYwMGM0NTlmZjM5NTQ3YmI2NiBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEhvbmd4dSBKaWEgPGhvbmd4dS5qaWFAd2luZHJpdmVyLmNvbT4KK0RhdGU6IFRodSwgMjQgTWFyIDIwMTYgMTE6MjM6MTQgLTA0MDAKK1N1YmplY3Q6IFtQQVRDSCA0NC80Nl0gZ2NjL2ZpbmFsLmM6IC1mZGVidWctcHJlZml4LW1hcCBzdXBwb3J0IHRvIHJlbWFwCisgc291cmNlcyB3aXRoIHJlbGF0aXZlIHBhdGgKKworUFIgb3RoZXIvNzA0MjgKKyogZmluYWwuYyAocmVtYXBfZGVidWdfZmlsZW5hbWUpOiBVc2UgbHJlYWxwYXRoIHRvIHRyYW5zbGF0ZQorcmVsYXRpdmUgcGF0aCBiZWZvcmUgcmVtYXBwaW5nCisKK2h0dHBzOi8vZ2NjLmdudS5vcmcvYnVnemlsbGEvc2hvd19idWcuY2dpP2lkPTcwNDI4CitVcHN0cmVhbS1TdGF0dXM6IFN1Ym1pdHRlZCBbZ2NjLXBhdGNoZXNAZ2NjLmdudS5vcmddCisKK1NpZ25lZC1vZmYtYnk6IEhvbmd4dSBKaWEgPGhvbmd4dS5qaWFAd2luZHJpdmVyLmNvbT4KKy0tLQorIGdjYy9maW5hbC5jIHwgMTUgKysrKysrKysrKysrLS0tCisgMSBmaWxlIGNoYW5nZWQsIDEyIGluc2VydGlvbnMoKyksIDMgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9nY2MvZmluYWwuYyBiL2djYy9maW5hbC5jCitpbmRleCA1NWNmNTA5Li4yMzI5M2U1IDEwMDY0NAorLS0tIGEvZ2NjL2ZpbmFsLmMKKysrKyBiL2djYy9maW5hbC5jCitAQCAtMTU1NCwxNiArMTU1NCwyNSBAQCByZW1hcF9kZWJ1Z19maWxlbmFtZSAoY29uc3QgY2hhciAqZmlsZW5hbWUpCisgICBjb25zdCBjaGFyICpuYW1lOworICAgc2l6ZV90IG5hbWVfbGVuOworIAorKyAgLyogU3VwcG9ydCB0byByZW1hcCBmaWxlbmFtZSB3aXRoIHJlbGF0aXZlIHBhdGggICovCisrICBjaGFyICpyZWFscGF0aCA9IGxyZWFscGF0aCAoZmlsZW5hbWUpOworKyAgaWYgKHJlYWxwYXRoID09IE5VTEwpCisrICAgIHJldHVybiBmaWxlbmFtZTsKKysKKyAgIGZvciAobWFwID0gZGVidWdfcHJlZml4X21hcHM7IG1hcDsgbWFwID0gbWFwLT5uZXh0KQorLSAgICBpZiAoZmlsZW5hbWVfbmNtcCAoZmlsZW5hbWUsIG1hcC0+b2xkX3ByZWZpeCwgbWFwLT5vbGRfbGVuKSA9PSAwKQorKyAgICBpZiAoZmlsZW5hbWVfbmNtcCAocmVhbHBhdGgsIG1hcC0+b2xkX3ByZWZpeCwgbWFwLT5vbGRfbGVuKSA9PSAwKQorICAgICAgIGJyZWFrOworICAgaWYgKCFtYXApCistICAgIHJldHVybiBmaWxlbmFtZTsKKy0gIG5hbWUgPSBmaWxlbmFtZSArIG1hcC0+b2xkX2xlbjsKKysgICAgeworKyAgICAgIGZyZWUgKHJlYWxwYXRoKTsKKysgICAgICByZXR1cm4gZmlsZW5hbWU7CisrICAgIH0KKysgIG5hbWUgPSByZWFscGF0aCArIG1hcC0+b2xkX2xlbjsKKyAgIG5hbWVfbGVuID0gc3RybGVuIChuYW1lKSArIDE7CisgICBzID0gKGNoYXIgKikgYWxsb2NhIChuYW1lX2xlbiArIG1hcC0+bmV3X2xlbik7CisgICBtZW1jcHkgKHMsIG1hcC0+bmV3X3ByZWZpeCwgbWFwLT5uZXdfbGVuKTsKKyAgIG1lbWNweSAocyArIG1hcC0+bmV3X2xlbiwgbmFtZSwgbmFtZV9sZW4pOworKyAgZnJlZSAocmVhbHBhdGgpOworICAgcmV0dXJuIGdnY19zdHJkdXAgKHMpOworIH0KKyAMCistLSAKKzIuOC4yCisKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy02LjIvMDA0NS1saWJnY2MtQWRkLWtub2ItdG8tdXNlLWxkYmwtMTI4LW9uLXBwYy5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy02LjIvMDA0NS1saWJnY2MtQWRkLWtub2ItdG8tdXNlLWxkYmwtMTI4LW9uLXBwYy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNjJiNzI3Ci0tLSAvZGV2L251bGwKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTYuMi8wMDQ1LWxpYmdjYy1BZGQta25vYi10by11c2UtbGRibC0xMjgtb24tcHBjLnBhdGNoCkBAIC0wLDAgKzEsMTI1IEBACitGcm9tIDVhNDdkNDA0ZWEyOWUyNTQ3MjY5ZTNkZGYzODc1NDQ2MmQ5M2Y5MDMgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorRGF0ZTogRnJpLCAyOSBBcHIgMjAxNiAyMDowMzoyOCArMDAwMAorU3ViamVjdDogW1BBVENIIDQ1LzQ2XSBsaWJnY2M6IEFkZCBrbm9iIHRvIHVzZSBsZGJsLTEyOCBvbiBwcGMKKworbXVzbCBkb2VzIG5vdCBzdXBwb3J0IGxkYmwgMTI4IHNvIHdlIGNhbiBub3QgYXNzdW1lCit0aGF0IGxpbnV4IGFzIGEgd2hvbGUgc3VwcG9ydHMgbGRibC0xMjggYml0cywgaW5zdGVhZAorYWN0IHVwb24gY29uZmlndXJlIG9wdGlvbiBwYXNzZWQgdG8gZ2NjIGFuZCBhc3N1bWUgbm8KK29uIG11c2wgYW5kIHllcyBvdGhlcndpc2UgaWYgbm8gb3B0aW9uIGlzIHBhc3NlZCBzaW5jZQorZGVmYXVsdCBiZWhhdmlvdXIgaXMgdG8gYXNzdW1lIGxkYmwxMjggaXQgZG9lcyBub3QKK2NoYW5nZSB0aGUgZGVmYXVsdHMKKworU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KKy0tLQorVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKKyBsaWJnY2MvTWFrZWZpbGUuaW4gICAgICAgICAgIHwgIDEgKworIGxpYmdjYy9jb25maWcvcnM2MDAwL3QtbGludXggfCAgNSArKysrLQorIGxpYmdjYy9jb25maWd1cmUgICAgICAgICAgICAgfCAxOCArKysrKysrKysrKysrKysrKysKKyBsaWJnY2MvY29uZmlndXJlLmFjICAgICAgICAgIHwgMTIgKysrKysrKysrKysrCisgNCBmaWxlcyBjaGFuZ2VkLCAzNSBpbnNlcnRpb25zKCspLCAxIGRlbGV0aW9uKC0pCisgbW9kZSBjaGFuZ2UgMTAwNjQ0ID0+IDEwMDc1NSBsaWJnY2MvY29uZmlndXJlCisKK2RpZmYgLS1naXQgYS9saWJnY2MvTWFrZWZpbGUuaW4gYi9saWJnY2MvTWFrZWZpbGUuaW4KK2luZGV4IGYwOWIzOWIuLjI5NmNmMGYgMTAwNjQ0CistLS0gYS9saWJnY2MvTWFrZWZpbGUuaW4KKysrKyBiL2xpYmdjYy9NYWtlZmlsZS5pbgorQEAgLTQzLDYgKzQzLDcgQEAgZW5hYmxlX3Z0YWJsZV92ZXJpZnkgPSBAZW5hYmxlX3Z0YWJsZV92ZXJpZnlACisgZW5hYmxlX2RlY2ltYWxfZmxvYXQgPSBAZW5hYmxlX2RlY2ltYWxfZmxvYXRACisgZml4ZWRfcG9pbnQgPSBAZml4ZWRfcG9pbnRACisgd2l0aF9haXhfc29uYW1lID0gQHdpdGhfYWl4X3NvbmFtZUAKKyt3aXRoX2xkYmwxMjggPSBAd2l0aF9sZGJsMTI4QAorIAorIGhvc3Rfbm9uY2Fub25pY2FsID0gQGhvc3Rfbm9uY2Fub25pY2FsQAorIHJlYWxfaG9zdF9ub25jYW5vbmljYWwgPSBAcmVhbF9ob3N0X25vbmNhbm9uaWNhbEAKK2RpZmYgLS1naXQgYS9saWJnY2MvY29uZmlnL3JzNjAwMC90LWxpbnV4IGIvbGliZ2NjL2NvbmZpZy9yczYwMDAvdC1saW51eAoraW5kZXggNGY2ZDRjNC4uYzUwZGQ5NCAxMDA2NDQKKy0tLSBhL2xpYmdjYy9jb25maWcvcnM2MDAwL3QtbGludXgKKysrKyBiL2xpYmdjYy9jb25maWcvcnM2MDAwL3QtbGludXgKK0BAIC0xLDMgKzEsNiBAQAorIFNITElCX01BUEZJTEVTICs9ICQoc3JjZGlyKS9jb25maWcvcnM2MDAwL2xpYmdjYy1nbGliYy52ZXIKKyAKKy1IT1NUX0xJQkdDQzJfQ0ZMQUdTICs9IC1tbG9uZy1kb3VibGUtMTI4IC1tbm8tbWluaW1hbC10b2MKKytpZmVxICgkKHdpdGhfbGRibDEyOCkseWVzKQorK0hPU1RfTElCR0NDMl9DRkxBR1MgKz0gLW1sb25nLWRvdWJsZS0xMjgKKytlbmRpZgorK0hPU1RfTElCR0NDMl9DRkxBR1MgKz0gLW1uby1taW5pbWFsLXRvYworZGlmZiAtLWdpdCBhL2xpYmdjYy9jb25maWd1cmUgYi9saWJnY2MvY29uZmlndXJlCitvbGQgbW9kZSAxMDA2NDQKK25ldyBtb2RlIDEwMDc1NQoraW5kZXggZTdkNmM3NS4uZTlhOTAxOQorLS0tIGEvbGliZ2NjL2NvbmZpZ3VyZQorKysrIGIvbGliZ2NjL2NvbmZpZ3VyZQorQEAgLTYxNCw2ICs2MTQsNyBAQCBidWlsZF92ZW5kb3IKKyBidWlsZF9jcHUKKyBidWlsZAorIHdpdGhfYWl4X3NvbmFtZQorK3dpdGhfbGRibDEyOAorIGVuYWJsZV92dGFibGVfdmVyaWZ5CisgZW5hYmxlX3NoYXJlZAorIGxpYmdjY190b3BkaXIKK0BAIC02NjMsNiArNjY0LDcgQEAgd2l0aF9jcm9zc19ob3N0Cisgd2l0aF9sZAorIGVuYWJsZV9zaGFyZWQKKyBlbmFibGVfdnRhYmxlX3ZlcmlmeQorK3dpdGhfbG9uZ19kb3VibGVfMTI4Cisgd2l0aF9haXhfc29uYW1lCisgZW5hYmxlX3ZlcnNpb25fc3BlY2lmaWNfcnVudGltZV9saWJzCisgd2l0aF9zbGliZGlyCitAQCAtMTMxOSw2ICsxMzIxLDcgQEAgT3B0aW9uYWwgUGFja2FnZXM6CisgICAtLXdpdGgtdGFyZ2V0LXN1YmRpcj1TVUJESVIgICAgICBDb25maWd1cmluZyBpbiBhIHN1YmRpcmVjdG9yeSBmb3IgdGFyZ2V0CisgICAtLXdpdGgtY3Jvc3MtaG9zdD1IT1NUICAgICAgICAgICBDb25maWd1cmluZyB3aXRoIGEgY3Jvc3MgY29tcGlsZXIKKyAgIC0td2l0aC1sZCAgICAgICAgICAgICAgIGFycmFuZ2UgdG8gdXNlIHRoZSBzcGVjaWZpZWQgbGQgKGZ1bGwgcGF0aG5hbWUpCisrICAtLXdpdGgtbG9uZy1kb3VibGUtMTI4ICB1c2UgMTI4LWJpdCBsb25nIGRvdWJsZSBieSBkZWZhdWx0CisgICAtLXdpdGgtYWl4LXNvbmFtZT1haXh8c3ZyNHxib3RoCisgICAgICAgICAgICAgICAgICAgICAgICAgICBzaGFyZWQgbGlicmFyeSB2ZXJzaW9uaW5nIChha2EgIlNPTkFNRSIpIHZhcmlhbnQgdG8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb3ZpZGUgb24gQUlYCitAQCAtMjIwMSw2ICsyMjA0LDIxIEBAIGZpCisgCisgCisgCisrIyBDaGVjayB3aGV0aGVyIC0td2l0aC1sb25nLWRvdWJsZS0xMjggd2FzIGdpdmVuLgorK2lmIHRlc3QgIiR7d2l0aF9sb25nX2RvdWJsZV8xMjgrc2V0fSIgPSBzZXQ7IHRoZW4gOgorKyAgd2l0aHZhbD0kd2l0aF9sb25nX2RvdWJsZV8xMjg7IHdpdGhfbGRibDEyOD0iJHdpdGhfbG9uZ19kb3VibGVfMTI4IgorK2Vsc2UKKysgIGNhc2UgIiR7aG9zdH0iIGluCisrIHBvd2VyKi0qLW11c2wqKQorKyAgIHdpdGhfbGRibDEyOD0ibm8iOzsKKysgKikgd2l0aF9sZGJsMTI4PSJ5ZXMiOzsKKysgZXNhYworKworK2ZpCisrCisrCisrCisrCisgIyBDaGVjayB3aGV0aGVyIC0td2l0aC1haXgtc29uYW1lIHdhcyBnaXZlbi4KKyBpZiB0ZXN0ICIke3dpdGhfYWl4X3NvbmFtZStzZXR9IiA9IHNldDsgdGhlbiA6CisgICB3aXRodmFsPSR3aXRoX2FpeF9zb25hbWU7IGNhc2UgIiR7aG9zdH06JHtlbmFibGVfc2hhcmVkfSIgaW4KK2RpZmYgLS1naXQgYS9saWJnY2MvY29uZmlndXJlLmFjIGIvbGliZ2NjL2NvbmZpZ3VyZS5hYworaW5kZXggMjY5OTk3Zi4uODFkYzNiYSAxMDA2NDQKKy0tLSBhL2xpYmdjYy9jb25maWd1cmUuYWMKKysrKyBiL2xpYmdjYy9jb25maWd1cmUuYWMKK0BAIC03Nyw2ICs3NywxOCBAQCBBQ19BUkdfRU5BQkxFKHZ0YWJsZS12ZXJpZnksCisgW2VuYWJsZV92dGFibGVfdmVyaWZ5PW5vXSkKKyBBQ19TVUJTVChlbmFibGVfdnRhYmxlX3ZlcmlmeSkKKyAKKytBQ19BUkdfV0lUSChsb25nLWRvdWJsZS0xMjgsCisrW0FTX0hFTFBfU1RSSU5HKFstLXdpdGgtbG9uZy1kb3VibGUtMTI4XSwKKysgICAgW3VzZSAxMjgtYml0IGxvbmcgZG91YmxlIGJ5IGRlZmF1bHRdKV0sCisrICAgICAgd2l0aF9sZGJsMTI4PSIkd2l0aF9sb25nX2RvdWJsZV8xMjgiLAorK1tjYXNlICIke2hvc3R9IiBpbgorKyBwb3dlciotKi1tdXNsKikKKysgICB3aXRoX2xkYmwxMjg9Im5vIjs7CisrICopIHdpdGhfbGRibDEyOD0ieWVzIjs7CisrIGVzYWMKKytdKQorK0FDX1NVQlNUKHdpdGhfbGRibDEyOCkKKysKKyBBQ19BUkdfV0lUSChhaXgtc29uYW1lLAorIFtBU19IRUxQX1NUUklORyhbLS13aXRoLWFpeC1zb25hbWU9YWl4fHN2cjR8Ym90aF0sCisgICAgIFtzaGFyZWQgbGlicmFyeSB2ZXJzaW9uaW5nIChha2EgIlNPTkFNRSIpIHZhcmlhbnQgdG8gcHJvdmlkZSBvbiBBSVhdKV0sCistLSAKKzIuOC4yCisKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy02LjIvMDA0Ni1MaW5rLWxpYmdjYy11c2luZy1MREZMQUdTLW5vdC1qdXN0LVNITElCX0xERkxBR1MucGF0Y2ggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNi4yLzAwNDYtTGluay1saWJnY2MtdXNpbmctTERGTEFHUy1ub3QtanVzdC1TSExJQl9MREZMQUdTLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM5MDAzN2YKLS0tIC9kZXYvbnVsbAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNi4yLzAwNDYtTGluay1saWJnY2MtdXNpbmctTERGTEFHUy1ub3QtanVzdC1TSExJQl9MREZMQUdTLnBhdGNoCkBAIC0wLDAgKzEsMjkgQEAKK0Zyb20gNTEzYmYzYzMzZTJmNTUxZjA4YmQ1NzYwNTA5MWQ1ZGRlYmEzNTM2YiBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CitEYXRlOiBXZWQsIDQgTWF5IDIwMTYgMjE6MTE6MzQgLTA3MDAKK1N1YmplY3Q6IFtQQVRDSCA0Ni80Nl0gTGluayBsaWJnY2MgdXNpbmcgTERGTEFHUywgbm90IGp1c3QgU0hMSUJfTERGTEFHUworCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworU2lnbmVkLW9mZi1ieTogQ2hyaXN0b3BoZXIgTGFyc29uIDxjaHJpc19sYXJzb25AbWVudG9yLmNvbT4KK1NpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CistLS0KKyBsaWJnY2MvY29uZmlnL3Qtc2xpYmdjYyB8IDIgKy0KKyAxIGZpbGUgY2hhbmdlZCwgMSBpbnNlcnRpb24oKyksIDEgZGVsZXRpb24oLSkKKworZGlmZiAtLWdpdCBhL2xpYmdjYy9jb25maWcvdC1zbGliZ2NjIGIvbGliZ2NjL2NvbmZpZy90LXNsaWJnY2MKK2luZGV4IDhjNWY4OTAuLjI5YmU5MDkgMTAwNjQ0CistLS0gYS9saWJnY2MvY29uZmlnL3Qtc2xpYmdjYworKysrIGIvbGliZ2NjL2NvbmZpZy90LXNsaWJnY2MKK0BAIC0zMiw3ICszMiw3IEBAIFNITElCX0lOU1RBTExfU09MSU5LID0gJChMTl9TKSAkKFNITElCX1NPTkFNRSkgXAorIAkkKERFU1RESVIpJChzbGliZGlyKSQoU0hMSUJfU0xJQkRJUl9RVUFMKS8kKFNITElCX1NPTElOSykKKyAKKyBTSExJQl9MSU5LID0gJChDQykgJChMSUJHQ0MyX0NGTEFHUykgLXNoYXJlZCAtbm9kZWZhdWx0bGlicyBcCistCSQoU0hMSUJfTERGTEFHUykgXAorKwkkKExERkxBR1MpICQoU0hMSUJfTERGTEFHUykgXAorIAktbyAkKFNITElCX0RJUikvJChTSExJQl9TT05BTUUpLnRtcCBAbXVsdGlsaWJfZmxhZ3NAIFwKKyAJJChTSExJQl9PQkpTKSAkKFNITElCX0xDKSAmJiBcCisgCXJtIC1mICQoU0hMSUJfRElSKS8kKFNITElCX1NPTElOSykgJiYgXAorLS0gCisyLjguMgorCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNi4yLzAwNDctbGliZ2NjX3MtVXNlLWFsaWFzLWZvci1fX2NwdV9pbmRpY2F0b3JfaW5pdC1pbnN0ZWFkLS5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy02LjIvMDA0Ny1saWJnY2Nfcy1Vc2UtYWxpYXMtZm9yLV9fY3B1X2luZGljYXRvcl9pbml0LWluc3RlYWQtLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVkNmNkNjkKLS0tIC9kZXYvbnVsbAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNi4yLzAwNDctbGliZ2NjX3MtVXNlLWFsaWFzLWZvci1fX2NwdV9pbmRpY2F0b3JfaW5pdC1pbnN0ZWFkLS5wYXRjaApAQCAtMCwwICsxLDg1IEBACitGcm9tIDBhOWVkMDQ3OTIwM2NiN2U2OWMzNzQ1YjBjMjU5MDA3NDEwZjM5YmEgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBTemFib2xjcyBOYWd5IDxuc3pAcG9ydDcwLm5ldD4KK0RhdGU6IFNhdCwgMjQgT2N0IDIwMTUgMjA6MDk6NTMgKzAwMDAKK1N1YmplY3Q6IFtQQVRDSCA0Ny80N10gbGliZ2NjX3M6IFVzZSBhbGlhcyBmb3IgX19jcHVfaW5kaWNhdG9yX2luaXQgaW5zdGVhZCBvZgorIHN5bXZlcgorCitBZGFwdGVyIGZyb20KKworaHR0cHM6Ly9nY2MuZ251Lm9yZy9tbC9nY2MtcGF0Y2hlcy8yMDE1LTA1L21zZzAwODk5Lmh0bWwKKworVGhpcyBmaXggd2FzIGRlYmF0ZWQgYnV0IGhhc250IGJlZW4gYXBwbGllZCBnY2MgdXBzdHJlYW0gc2luY2UKK3RoZXkgZXhwZWN0IG11c2wgdG8gc3VwcG9ydCAnQCcgaW4gc3ltYm9sIHZlcnNpb25pbmcgd2hpY2ggaXMKK2Egc3VuL2dudSB2ZXJzaW9uaW5nIGV4dGVudGlvbi4gVGhpcyBwYXRjaCBob3dldmVyIGF2b2lkcyB0aGUKK25lZWQgZm9yIHRoZSAnQCcgc3ltYm9scyBhdCBhbGwKKworbGliZ2NjL0NoYW5nZWxvZzoKKworMjAxNS0wNS0xMSAgU3phYm9sY3MgTmFneSAgPHN6YWJvbGNzLm5hZ3lAYXJtLmNvbT4KKworCSogY29uZmlnL2kzODYvY3B1aW5mby5jIChfX2NwdV9pbmRpY2F0b3JfaW5pdF9sb2NhbCk6IEFkZC4KKwkoX19jcHVfaW5kaWNhdG9yX2luaXRAR0NDXzQuOC4wLCBfX2NwdV9tb2RlbEBHQ0NfNC44LjApOiBSZW1vdmUuCisKKwkqIGNvbmZpZy9pMzg2L3QtbGludXggKEhPU1RfTElCR0NDMl9DRkxBR1MpOiBSZW1vdmUgLURVU0VfRUxGX1NZTVZFUi4KKworZ2NjL0NoYW5nZWxvZzoKKworMjAxNS0wNS0xMSAgU3phYm9sY3MgTmFneSAgPHN6YWJvbGNzLm5hZ3lAYXJtLmNvbT4KKworCSogY29uZmlnL2kzODYvaTM4Ni5jIChpeDg2X2V4cGFuZF9idWlsdGluKTogTWFrZSBfX2J1aWx0aW5fY3B1X2luaXQKKwljYWxsIF9fY3B1X2luZGljYXRvcl9pbml0X2xvY2FsIGluc3RlYWQgb2YgX19jcHVfaW5kaWNhdG9yX2luaXQuCisKK1NpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CistLS0KK1Vwc3RyZWFtLVN0YXR1czogUmVqZWN0ZWQKKworIGdjYy9jb25maWcvaTM4Ni9pMzg2LmMgICAgICAgfCA0ICsrLS0KKyBsaWJnY2MvY29uZmlnL2kzODYvY3B1aW5mby5jIHwgNiArKystLS0KKyBsaWJnY2MvY29uZmlnL2kzODYvdC1saW51eCAgIHwgMiArLQorIDMgZmlsZXMgY2hhbmdlZCwgNiBpbnNlcnRpb25zKCspLCA2IGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvZ2NjL2NvbmZpZy9pMzg2L2kzODYuYyBiL2djYy9jb25maWcvaTM4Ni9pMzg2LmMKK2luZGV4IDg2MWEwMjkuLjFjOTdkNzIgMTAwNjQ0CistLS0gYS9nY2MvY29uZmlnL2kzODYvaTM4Ni5jCisrKysgYi9nY2MvY29uZmlnL2kzODYvaTM4Ni5jCitAQCAtNDAzMjMsMTAgKzQwMzIzLDEwIEBAIGl4ODZfZXhwYW5kX2J1aWx0aW4gKHRyZWUgZXhwLCBydHggdGFyZ2V0LCBydHggc3VidGFyZ2V0LAorICAgICB7CisgICAgIGNhc2UgSVg4Nl9CVUlMVElOX0NQVV9JTklUOgorICAgICAgIHsKKy0JLyogTWFrZSBpdCBjYWxsIF9fY3B1X2luZGljYXRvcl9pbml0IGluIGxpYmdjYy4gKi8KKysJLyogTWFrZSBpdCBjYWxsIF9fY3B1X2luZGljYXRvcl9pbml0X2xvY2FsIGluIGxpYmdjYy5hLiAqLworIAl0cmVlIGNhbGxfZXhwciwgZm5kZWNsLCB0eXBlOworICAgICAgICAgdHlwZSA9IGJ1aWxkX2Z1bmN0aW9uX3R5cGVfbGlzdCAoaW50ZWdlcl90eXBlX25vZGUsIE5VTExfVFJFRSk7IAorLQlmbmRlY2wgPSBidWlsZF9mbl9kZWNsICgiX19jcHVfaW5kaWNhdG9yX2luaXQiLCB0eXBlKTsKKysJZm5kZWNsID0gYnVpbGRfZm5fZGVjbCAoIl9fY3B1X2luZGljYXRvcl9pbml0X2xvY2FsIiwgdHlwZSk7CisgCWNhbGxfZXhwciA9IGJ1aWxkX2NhbGxfZXhwciAoZm5kZWNsLCAwKTsgCisgCXJldHVybiBleHBhbmRfZXhwciAoY2FsbF9leHByLCB0YXJnZXQsIG1vZGUsIEVYUEFORF9OT1JNQUwpOworICAgICAgIH0KK2RpZmYgLS1naXQgYS9saWJnY2MvY29uZmlnL2kzODYvY3B1aW5mby5jIGIvbGliZ2NjL2NvbmZpZy9pMzg2L2NwdWluZm8uYworaW5kZXggOGMyMjQ4ZC4uNmM4MmYxNSAxMDA2NDQKKy0tLSBhL2xpYmdjYy9jb25maWcvaTM4Ni9jcHVpbmZvLmMKKysrKyBiL2xpYmdjYy9jb25maWcvaTM4Ni9jcHVpbmZvLmMKK0BAIC00ODUsNyArNDg1LDcgQEAgX19jcHVfaW5kaWNhdG9yX2luaXQgKHZvaWQpCisgICByZXR1cm4gMDsKKyB9CisgCistI2lmIGRlZmluZWQgU0hBUkVEICYmIGRlZmluZWQgVVNFX0VMRl9TWU1WRVIKKy1fX2FzbV9fICgiLnN5bXZlciBfX2NwdV9pbmRpY2F0b3JfaW5pdCwgX19jcHVfaW5kaWNhdG9yX2luaXRAR0NDXzQuOC4wIik7CistX19hc21fXyAoIi5zeW12ZXIgX19jcHVfbW9kZWwsIF9fY3B1X21vZGVsQEdDQ180LjguMCIpOworKyNpZm5kZWYgU0hBUkVECisraW50IF9fY3B1X2luZGljYXRvcl9pbml0X2xvY2FsICh2b2lkKQorKyAgX19hdHRyaWJ1dGVfXyAoKHdlYWssIGFsaWFzICgiX19jcHVfaW5kaWNhdG9yX2luaXQiKSkpOworICNlbmRpZgorZGlmZiAtLWdpdCBhL2xpYmdjYy9jb25maWcvaTM4Ni90LWxpbnV4IGIvbGliZ2NjL2NvbmZpZy9pMzg2L3QtbGludXgKK2luZGV4IDExYmI0NmUuLjRmNDdmN2IgMTAwNjQ0CistLS0gYS9saWJnY2MvY29uZmlnL2kzODYvdC1saW51eAorKysrIGIvbGliZ2NjL2NvbmZpZy9pMzg2L3QtbGludXgKK0BAIC0zLDQgKzMsNCBAQAorICMgdC1zbGliZ2NjLWVsZi12ZXIgYW5kIHQtbGludXgKKyBTSExJQl9NQVBGSUxFUyA9IGxpYmdjYy1zdGQudmVyICQoc3JjZGlyKS9jb25maWcvaTM4Ni9saWJnY2MtZ2xpYmMudmVyCisgCistSE9TVF9MSUJHQ0MyX0NGTEFHUyArPSAtbWxvbmctZG91YmxlLTgwIC1EVVNFX0VMRl9TWU1WRVIKKytIT1NUX0xJQkdDQzJfQ0ZMQUdTICs9IC1tbG9uZy1kb3VibGUtODAKKy0tIAorMi45LjAKKwpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTYuMi8wMDQ4LUFSTS1QUi10YXJnZXQtNzEwNTYtRG9uLXQtdXNlLXZlY3Rvcml6ZWQtYnVpbHRpbnMtd2gucGF0Y2ggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNi4yLzAwNDgtQVJNLVBSLXRhcmdldC03MTA1Ni1Eb24tdC11c2UtdmVjdG9yaXplZC1idWlsdGlucy13aC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45YzM5YzdmCi0tLSAvZGV2L251bGwKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTYuMi8wMDQ4LUFSTS1QUi10YXJnZXQtNzEwNTYtRG9uLXQtdXNlLXZlY3Rvcml6ZWQtYnVpbHRpbnMtd2gucGF0Y2gKQEAgLTAsMCArMSw5MiBAQAorRnJvbSA4NGQyYTU1MDk4OTJiNjVlZDYwZDM5ZTZlMmY5NzE5ZTM3NjJlNDBlIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbToga3RrYWNob3YgPGt0a2FjaG92QDEzOGJjNzVkLTBkMDQtMDQxMC05NjFmLTgyZWU3MmIwNTRhND4KK0RhdGU6IFR1ZSwgMzEgTWF5IDIwMTYgMDg6Mjk6MzkgKzAwMDAKK1N1YmplY3Q6IFtQQVRDSF0gW0FSTV0gUFIgdGFyZ2V0LzcxMDU2OiBEb24ndCB1c2UgdmVjdG9yaXplZCBidWlsdGlucyB3aGVuCisgTkVPTiBpcyBub3QgYXZhaWxhYmxlCisKKwlQUiB0YXJnZXQvNzEwNTYKKwkqIGNvbmZpZy9hcm0vYXJtLWJ1aWx0aW5zLmMgKGFybV9idWlsdGluX3ZlY3Rvcml6ZWRfZnVuY3Rpb24pOiBSZXR1cm4KKwlOVUxMX1RSRUUgZWFybHkgaWYgTkVPTiBpcyBub3QgYXZhaWxhYmxlLiAgUmVtb3ZlIG5vdyByZWR1bmRhbnQgY2hlY2sKKwlpbiBBUk1fQ0hFQ0tfQlVJTFRJTl9NT0RFLgorCisJKiBnY2MudGFyZ2V0L2FybS9wcjcxMDU2LmM6IE5ldyB0ZXN0LgorCisKKworZ2l0LXN2bi1pZDogc3ZuK3NzaDovL2djYy5nbnUub3JnL3N2bi9nY2MvYnJhbmNoZXMvZ2NjLTYtYnJhbmNoQDIzNjkxMCAxMzhiYzc1ZC0wZDA0LTA0MTAtOTYxZi04MmVlNzJiMDU0YTQKKy0tLQorVXBzdHJlYW0tU3RhdHVzOiBCYWNrcG9ydAorU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KKworIGdjYy9DaGFuZ2VMb2cgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIDcgKysrKysrKworIGdjYy9jb25maWcvYXJtL2FybS1idWlsdGlucy5jICAgICAgICAgIHwgIDYgKysrKystCisgZ2NjL3Rlc3RzdWl0ZS9DaGFuZ2VMb2cgICAgICAgICAgICAgICAgfCAgNSArKysrKworIGdjYy90ZXN0c3VpdGUvZ2NjLnRhcmdldC9hcm0vcHI3MTA1Ni5jIHwgMzIgKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysKKyA0IGZpbGVzIGNoYW5nZWQsIDQ5IGluc2VydGlvbnMoKyksIDEgZGVsZXRpb24oLSkKKyBjcmVhdGUgbW9kZSAxMDA2NDQgZ2NjL3Rlc3RzdWl0ZS9nY2MudGFyZ2V0L2FybS9wcjcxMDU2LmMKKworZGlmZiAtLWdpdCBhL2djYy9jb25maWcvYXJtL2FybS1idWlsdGlucy5jIGIvZ2NjL2NvbmZpZy9hcm0vYXJtLWJ1aWx0aW5zLmMKK2luZGV4IDkwZmI0MGYuLjY4YjI4MzkgMTAwNjQ0CistLS0gYS9nY2MvY29uZmlnL2FybS9hcm0tYnVpbHRpbnMuYworKysrIGIvZ2NjL2NvbmZpZy9hcm0vYXJtLWJ1aWx0aW5zLmMKK0BAIC0yODYxLDYgKzI4NjEsMTAgQEAgYXJtX2J1aWx0aW5fdmVjdG9yaXplZF9mdW5jdGlvbiAodW5zaWduZWQgaW50IGZuLCB0cmVlIHR5cGVfb3V0LCB0cmVlIHR5cGVfaW4pCisgICBpbnQgaW5fbiwgb3V0X247CisgICBib29sIG91dF91bnNpZ25lZF9wID0gVFlQRV9VTlNJR05FRCAodHlwZV9vdXQpOworIAorKyAgLyogQ2FuJ3QgcHJvdmlkZSBhbnkgdmVjdG9yaXplZCBidWlsdGlucyB3aGVuIHdlIGNhbid0IHVzZSBORU9OLiAgKi8KKysgIGlmICghVEFSR0VUX05FT04pCisrICAgIHJldHVybiBOVUxMX1RSRUU7CisrCisgICBpZiAoVFJFRV9DT0RFICh0eXBlX291dCkgIT0gVkVDVE9SX1RZUEUKKyAgICAgICB8fCBUUkVFX0NPREUgKHR5cGVfaW4pICE9IFZFQ1RPUl9UWVBFKQorICAgICByZXR1cm4gTlVMTF9UUkVFOworQEAgLTI4NzUsNyArMjg3OSw3IEBAIGFybV9idWlsdGluX3ZlY3Rvcml6ZWRfZnVuY3Rpb24gKHVuc2lnbmVkIGludCBmbiwgdHJlZSB0eXBlX291dCwgdHJlZSB0eXBlX2luKQorICAgIE5VTExfVFJFRSBpcyByZXR1cm5lZCBpZiBubyBzdWNoIGJ1aWx0aW4gaXMgYXZhaWxhYmxlLiAgKi8KKyAjdW5kZWYgQVJNX0NIRUNLX0JVSUxUSU5fTU9ERQorICNkZWZpbmUgQVJNX0NIRUNLX0JVSUxUSU5fTU9ERShDKSAgICBcCistICAoVEFSR0VUX05FT04gJiYgVEFSR0VUX0ZQVV9BUk1WOCAgIFwKKysgIChUQVJHRVRfRlBVX0FSTVY4ICAgXAorICAgICYmIGZsYWdfdW5zYWZlX21hdGhfb3B0aW1pemF0aW9ucyBcCisgICAgJiYgQVJNX0NIRUNLX0JVSUxUSU5fTU9ERV8xIChDKSkKKyAKK2RpZmYgLS1naXQgYS9nY2MvdGVzdHN1aXRlL2djYy50YXJnZXQvYXJtL3ByNzEwNTYuYyBiL2djYy90ZXN0c3VpdGUvZ2NjLnRhcmdldC9hcm0vcHI3MTA1Ni5jCituZXcgZmlsZSBtb2RlIDEwMDY0NAoraW5kZXggMDAwMDAwMC4uMTM2NzU0ZQorLS0tIC9kZXYvbnVsbAorKysrIGIvZ2NjL3Rlc3RzdWl0ZS9nY2MudGFyZ2V0L2FybS9wcjcxMDU2LmMKK0BAIC0wLDAgKzEsMzIgQEAKKysvKiBQUiB0YXJnZXQvNzEwNTYuICAqLworKy8qIHsgZGctZG8gY29tcGlsZSB9ICovCisrLyogeyBkZy1yZXF1aXJlLWVmZmVjdGl2ZS10YXJnZXQgYXJtX3ZmcDNfb2sgfSAqLworKy8qIHsgZGctb3B0aW9ucyAiLU8zIC1tZnB1PXZmcHYzIiB9ICovCisrCisrLyogQ2hlY2sgdGhhdCBjb21waWxpbmcgZm9yIGEgbm9uLU5FT04gdGFyZ2V0IGRvZXNuJ3QgdHJ5IHRvIGludHJvZHVjZQorKyAgIGEgTkVPTiB2ZWN0b3JpemVkIGJ1aWx0aW4uICAqLworKworK2V4dGVybiBjaGFyICpidWZmOworK2ludCBmMiAoKTsKKytzdHJ1Y3QgVDEKKyt7CisrICBpbnQgcmVzZXJ2ZWRbMl07CisrICB1bnNpZ25lZCBpbnQgaXA7CisrICB1bnNpZ25lZCBzaG9ydCBjczsKKysgIHVuc2lnbmVkIHNob3J0IHJzcnYyOworK307Cisrdm9pZAorK2YzIChjb25zdCBjaGFyICpwKQorK3sKKysgIHN0cnVjdCBUMSB4OworKyAgX19idWlsdGluX21lbWNweSAoJngsIHAsIHNpemVvZiAoc3RydWN0IFQxKSk7CisrICB4LnJlc2VydmVkWzBdID0gX19idWlsdGluX2Jzd2FwMzIgKHgucmVzZXJ2ZWRbMF0pOworKyAgeC5yZXNlcnZlZFsxXSA9IF9fYnVpbHRpbl9ic3dhcDMyICh4LnJlc2VydmVkWzFdKTsKKysgIHguaXAgPSBfX2J1aWx0aW5fYnN3YXAzMiAoeC5pcCk7CisrICB4LmNzID0geC5jcyA8PCA4IHwgeC5jcyA+PiA4OworKyAgeC5yc3J2MiA9IHgucnNydjIgPDwgOCB8IHgucnNydjIgPj4gODsKKysgIGlmIChmMiAoKSkKKysgICAgeworKyAgICAgIF9fYnVpbHRpbl9tZW1jcHkgKGJ1ZmYsICJcbiIsIDEpOworKyAgICB9CisrfQorLS0gCisyLjkuMAorCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNi4yL0NWRS0yMDE2LTQ0OTAucGF0Y2ggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNi4yL0NWRS0yMDE2LTQ0OTAucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjMyZTkxZAotLS0gL2Rldi9udWxsCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy02LjIvQ1ZFLTIwMTYtNDQ5MC5wYXRjaApAQCAtMCwwICsxLDI5MCBAQAorRnJvbSA3ZDIzNWIxYjVlYTM1MzUyYzU0OTU3ZWY1NTMwZDlhMDJjNDY5NjJmIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogYmVybmRzIDxiZXJuZHNAMTM4YmM3NWQtMGQwNC0wNDEwLTk2MWYtODJlZTcyYjA1NGE0PgorRGF0ZTogTW9uLCAyIE1heSAyMDE2IDE3OjA2OjQwICswMDAwCitTdWJqZWN0OiBbUEFUQ0hdID0/VVRGLTg/cT9EZW1hbmdsZXI9MjBpbnRlZ2VyPTIwb3ZlcmZsb3c9MjBmaXhlcz0yMGZyb20/PQorID0/VVRGLTg/cT89MjBNYXJjZWw9MjBCPUMzPUI2aG1lLj89CitNSU1FLVZlcnNpb246IDEuMAorQ29udGVudC1UeXBlOiB0ZXh0L3BsYWluOyBjaGFyc2V0PVVURi04CitDb250ZW50LVRyYW5zZmVyLUVuY29kaW5nOiA4Yml0CisKKwlQUiBjKysvNzA0OTgKKwkqIGNwLWRlbWFuZ2xlLmM6IFBhcnNlIG51bWJlcnMgYXMgaW50ZWdlciBpbnN0ZWFkIG9mIGxvbmcgdG8gYXZvaWQKKwlvdmVyZmxvdyBhZnRlciBzYW5pdHkgY2hlY2tzLiBJbmNsdWRlIDxsaW1pdHMuaD4gaWYgYXZhaWxhYmxlLgorCShJTlRfTUFYKTogRGVmaW5lIGlmIG5lY2Vzc2FyeS4KKwkoZF9tYWtlX3RlbXBsYXRlX3BhcmFtKTogVGFrZXMgaW50ZWdlciBhcmd1bWVudCBpbnN0ZWFkIG9mIGxvbmcuCisJKGRfbWFrZV9mdW5jdGlvbl9wYXJhbSk6IExpa2V3aXNlLgorCShkX2FwcGVuZF9udW0pOiBMaWtld2lzZS4KKwkoZF9pZGVudGlmaWVyKTogTGlrZXdpc2UuCisJKGRfbnVtYmVyKTogUGFyc2UgYXMgYW5kIHJldHVybiBpbnRlZ2VyLgorCShkX2NvbXBhY3RfbnVtYmVyKTogSGFuZGxlIG92ZXJmbG93LgorCShkX3NvdXJjZV9uYW1lKTogQ2hhbmdlIHZhcmlhYmxlIHR5cGUgdG8gaW50ZWdlciBmb3IgcGFyc2VkIG51bWJlci4KKwkoZF9qYXZhX3Jlc291cmNlKTogTGlrZXdpc2UuCisJKGRfc3BlY2lhbF9uYW1lKTogTGlrZXdpc2UuCisJKGRfZGlzY3JpbWluYXRvcik6IExpa2V3aXNlLgorCShkX3VubmFtZWRfdHlwZSk6IExpa2V3aXNlLgorCSogdGVzdHN1aXRlL2RlbWFuZ2xlLWV4cGVjdGVkOiBBZGQgcmVncmVzc2lvbiB0ZXN0IGNhc2VzLgorCisKKworZ2l0LXN2bi1pZDogc3ZuK3NzaDovL2djYy5nbnUub3JnL3N2bi9nY2MvdHJ1bmtAMjM1NzY3IDEzOGJjNzVkLTBkMDQtMDQxMC05NjFmLTgyZWU3MmIwNTRhNAorCitVcHN0cmVhbS1TdGF0dXM6IEJhY2twb3J0CitDVkU6ICBDVkUtMjAxNi00NDkwCitbWW9jdG8gIzk2MzJdCisKK1NpZ25lZC1vZmYtYnk6IEFybWluIEt1c3RlciA8YWt1c3RlckBtdmlzdGEuY29tPgorCistLS0KKyBsaWJpYmVydHkvQ2hhbmdlTG9nICAgICAgICAgICAgICAgICAgIHwgMTkgKysrKysrKysrKysrKworIGxpYmliZXJ0eS9jcC1kZW1hbmdsZS5jICAgICAgICAgICAgICAgfCA1MiArKysrKysrKysrKysrKysrKysrKy0tLS0tLS0tLS0tLS0tLQorIGxpYmliZXJ0eS90ZXN0c3VpdGUvZGVtYW5nbGUtZXhwZWN0ZWQgfCAxNCArKysrKysrKy0tCisgMyBmaWxlcyBjaGFuZ2VkLCA2MSBpbnNlcnRpb25zKCspLCAyNCBkZWxldGlvbnMoLSkKKworSW5kZXg6IGdpdC9saWJpYmVydHkvQ2hhbmdlTG9nCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZ2l0Lm9yaWcvbGliaWJlcnR5L0NoYW5nZUxvZworKysrIGdpdC9saWJpYmVydHkvQ2hhbmdlTG9nCitAQCAtMSwzICsxLDIyIEBACisrMjAxNi0wNS0wMiAgTWFyY2VsIELDtmhtZSAgPGJvZWhtZS5tYXJjZWxAZ21haWwuY29tPgorKworKyAgIFBSIGMrKy83MDQ5OAorKyAgICogY3AtZGVtYW5nbGUuYzogUGFyc2UgbnVtYmVycyBhcyBpbnRlZ2VyIGluc3RlYWQgb2YgbG9uZyB0byBhdm9pZAorKyAgIG92ZXJmbG93IGFmdGVyIHNhbml0eSBjaGVja3MuIEluY2x1ZGUgPGxpbWl0cy5oPiBpZiBhdmFpbGFibGUuCisrICAgKElOVF9NQVgpOiBEZWZpbmUgaWYgbmVjZXNzYXJ5LgorKyAgIChkX21ha2VfdGVtcGxhdGVfcGFyYW0pOiBUYWtlcyBpbnRlZ2VyIGFyZ3VtZW50IGluc3RlYWQgb2YgbG9uZy4KKysgICAoZF9tYWtlX2Z1bmN0aW9uX3BhcmFtKTogTGlrZXdpc2UuCisrICAgKGRfYXBwZW5kX251bSk6IExpa2V3aXNlLgorKyAgIChkX2lkZW50aWZpZXIpOiBMaWtld2lzZS4KKysgICAoZF9udW1iZXIpOiBQYXJzZSBhcyBhbmQgcmV0dXJuIGludGVnZXIuCisrICAgKGRfY29tcGFjdF9udW1iZXIpOiBIYW5kbGUgb3ZlcmZsb3cuCisrICAgKGRfc291cmNlX25hbWUpOiBDaGFuZ2UgdmFyaWFibGUgdHlwZSB0byBpbnRlZ2VyIGZvciBwYXJzZWQgbnVtYmVyLgorKyAgIChkX2phdmFfcmVzb3VyY2UpOiBMaWtld2lzZS4KKysgICAoZF9zcGVjaWFsX25hbWUpOiBMaWtld2lzZS4KKysgICAoZF9kaXNjcmltaW5hdG9yKTogTGlrZXdpc2UuCisrICAgKGRfdW5uYW1lZF90eXBlKTogTGlrZXdpc2UuCisrICAgKiB0ZXN0c3VpdGUvZGVtYW5nbGUtZXhwZWN0ZWQ6IEFkZCByZWdyZXNzaW9uIHRlc3QgY2FzZXMuCisrCisgMjAxNi0wNC0yNyAgUmVsZWFzZSBNYW5hZ2VyCisgCisgCSogR0NDIDYuMS4wIHJlbGVhc2VkLgorSW5kZXg6IGdpdC9saWJpYmVydHkvY3AtZGVtYW5nbGUuYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGdpdC5vcmlnL2xpYmliZXJ0eS9jcC1kZW1hbmdsZS5jCisrKysgZ2l0L2xpYmliZXJ0eS9jcC1kZW1hbmdsZS5jCitAQCAtMTI4LDYgKzEyOCwxMyBAQCBleHRlcm4gY2hhciAqYWxsb2NhICgpOworICMgZW5kaWYgLyogYWxsb2NhICovCisgI2VuZGlmIC8qIEhBVkVfQUxMT0NBX0ggKi8KKyAKKysjaWZkZWYgSEFWRV9MSU1JVFNfSAorKyNpbmNsdWRlIDxsaW1pdHMuaD4KKysjZW5kaWYKKysjaWZuZGVmIElOVF9NQVgKKysjIGRlZmluZSBJTlRfTUFYICAgICAgIChpbnQpKCgodW5zaWduZWQgaW50KSB+MCkgPj4gMSkgICAgICAgICAgLyogMHg3RkZGRkZGRiAqLworKyNlbmRpZgorKworICNpbmNsdWRlICJhbnNpZGVjbC5oIgorICNpbmNsdWRlICJsaWJpYmVydHkuaCIKKyAjaW5jbHVkZSAiZGVtYW5nbGUuaCIKK0BAIC0zOTgsNyArNDA1LDcgQEAgZF9tYWtlX2R0b3IgKHN0cnVjdCBkX2luZm8gKiwgZW51bSBnbnVfdgorICAgICAgICAgICAgICBzdHJ1Y3QgZGVtYW5nbGVfY29tcG9uZW50ICopOworIAorIHN0YXRpYyBzdHJ1Y3QgZGVtYW5nbGVfY29tcG9uZW50ICoKKy1kX21ha2VfdGVtcGxhdGVfcGFyYW0gKHN0cnVjdCBkX2luZm8gKiwgbG9uZyk7CisrZF9tYWtlX3RlbXBsYXRlX3BhcmFtIChzdHJ1Y3QgZF9pbmZvICosIGludCk7CisgCisgc3RhdGljIHN0cnVjdCBkZW1hbmdsZV9jb21wb25lbnQgKgorIGRfbWFrZV9zdWIgKHN0cnVjdCBkX2luZm8gKiwgY29uc3QgY2hhciAqLCBpbnQpOworQEAgLTQyMSw5ICs0MjgsOSBAQCBzdGF0aWMgc3RydWN0IGRlbWFuZ2xlX2NvbXBvbmVudCAqZF91bnF1CisgCisgc3RhdGljIHN0cnVjdCBkZW1hbmdsZV9jb21wb25lbnQgKmRfc291cmNlX25hbWUgKHN0cnVjdCBkX2luZm8gKik7CisgCistc3RhdGljIGxvbmcgZF9udW1iZXIgKHN0cnVjdCBkX2luZm8gKik7Cisrc3RhdGljIGludCBkX251bWJlciAoc3RydWN0IGRfaW5mbyAqKTsKKyAKKy1zdGF0aWMgc3RydWN0IGRlbWFuZ2xlX2NvbXBvbmVudCAqZF9pZGVudGlmaWVyIChzdHJ1Y3QgZF9pbmZvICosIGxvbmcpOworK3N0YXRpYyBzdHJ1Y3QgZGVtYW5nbGVfY29tcG9uZW50ICpkX2lkZW50aWZpZXIgKHN0cnVjdCBkX2luZm8gKiwgaW50KTsKKyAKKyBzdGF0aWMgc3RydWN0IGRlbWFuZ2xlX2NvbXBvbmVudCAqZF9vcGVyYXRvcl9uYW1lIChzdHJ1Y3QgZF9pbmZvICopOworIAorQEAgLTExMTksNyArMTEyNiw3IEBAIGRfbWFrZV9kdG9yIChzdHJ1Y3QgZF9pbmZvICpkaSwgZW51bSBnbnUKKyAvKiBBZGQgYSBuZXcgdGVtcGxhdGUgcGFyYW1ldGVyLiAgKi8KKyAKKyBzdGF0aWMgc3RydWN0IGRlbWFuZ2xlX2NvbXBvbmVudCAqCistZF9tYWtlX3RlbXBsYXRlX3BhcmFtIChzdHJ1Y3QgZF9pbmZvICpkaSwgbG9uZyBpKQorK2RfbWFrZV90ZW1wbGF0ZV9wYXJhbSAoc3RydWN0IGRfaW5mbyAqZGksIGludCBpKQorIHsKKyAgIHN0cnVjdCBkZW1hbmdsZV9jb21wb25lbnQgKnA7CisgCitAQCAtMTEzNSw3ICsxMTQyLDcgQEAgZF9tYWtlX3RlbXBsYXRlX3BhcmFtIChzdHJ1Y3QgZF9pbmZvICpkaQorIC8qIEFkZCBhIG5ldyBmdW5jdGlvbiBwYXJhbWV0ZXIuICAqLworIAorIHN0YXRpYyBzdHJ1Y3QgZGVtYW5nbGVfY29tcG9uZW50ICoKKy1kX21ha2VfZnVuY3Rpb25fcGFyYW0gKHN0cnVjdCBkX2luZm8gKmRpLCBsb25nIGkpCisrZF9tYWtlX2Z1bmN0aW9uX3BhcmFtIChzdHJ1Y3QgZF9pbmZvICpkaSwgaW50IGkpCisgeworICAgc3RydWN0IGRlbWFuZ2xlX2NvbXBvbmVudCAqcDsKKyAKK0BAIC0xNjIwLDcgKzE2MjcsNyBAQCBkX3VucXVhbGlmaWVkX25hbWUgKHN0cnVjdCBkX2luZm8gKmRpKQorIHN0YXRpYyBzdHJ1Y3QgZGVtYW5nbGVfY29tcG9uZW50ICoKKyBkX3NvdXJjZV9uYW1lIChzdHJ1Y3QgZF9pbmZvICpkaSkKKyB7CistICBsb25nIGxlbjsKKysgIGludCBsZW47CisgICBzdHJ1Y3QgZGVtYW5nbGVfY29tcG9uZW50ICpyZXQ7CisgCisgICBsZW4gPSBkX251bWJlciAoZGkpOworQEAgLTE2MzMsMTIgKzE2NDAsMTIgQEAgZF9zb3VyY2VfbmFtZSAoc3RydWN0IGRfaW5mbyAqZGkpCisgCisgLyogbnVtYmVyIDo6PSBbbl0gPChub24tbmVnYXRpdmUgZGVjaW1hbCBpbnRlZ2VyKT4gICovCisgCistc3RhdGljIGxvbmcKKytzdGF0aWMgaW50CisgZF9udW1iZXIgKHN0cnVjdCBkX2luZm8gKmRpKQorIHsKKyAgIGludCBuZWdhdGl2ZTsKKyAgIGNoYXIgcGVlazsKKy0gIGxvbmcgcmV0OworKyAgaW50IHJldDsKKyAKKyAgIG5lZ2F0aXZlID0gMDsKKyAgIHBlZWsgPSBkX3BlZWtfY2hhciAoZGkpOworQEAgLTE2ODEsNyArMTY4OCw3IEBAIGRfbnVtYmVyX2NvbXBvbmVudCAoc3RydWN0IGRfaW5mbyAqZGkpCisgLyogaWRlbnRpZmllciA6Oj0gPCh1bnF1YWxpZmllZCBzb3VyY2UgY29kZSBpZGVudGlmaWVyKT4gICovCisgCisgc3RhdGljIHN0cnVjdCBkZW1hbmdsZV9jb21wb25lbnQgKgorLWRfaWRlbnRpZmllciAoc3RydWN0IGRfaW5mbyAqZGksIGxvbmcgbGVuKQorK2RfaWRlbnRpZmllciAoc3RydWN0IGRfaW5mbyAqZGksIGludCBsZW4pCisgeworICAgY29uc3QgY2hhciAqbmFtZTsKKyAKK0BAIC0xNzAyLDcgKzE3MDksNyBAQCBkX2lkZW50aWZpZXIgKHN0cnVjdCBkX2luZm8gKmRpLCBsb25nIGxlCisgICAvKiBMb29rIGZvciBzb21ldGhpbmcgd2hpY2ggbG9va3MgbGlrZSBhIGdjYyBlbmNvZGluZyBvZiBhbgorICAgICAgYW5vbnltb3VzIG5hbWVzcGFjZSwgYW5kIHJlcGxhY2UgaXQgd2l0aCBhIG1vcmUgdXNlciBmcmllbmRseQorICAgICAgbmFtZS4gICovCistICBpZiAobGVuID49IChsb25nKSBBTk9OWU1PVVNfTkFNRVNQQUNFX1BSRUZJWF9MRU4gKyAyCisrICBpZiAobGVuID49IChpbnQpIEFOT05ZTU9VU19OQU1FU1BBQ0VfUFJFRklYX0xFTiArIDIKKyAgICAgICAmJiBtZW1jbXAgKG5hbWUsIEFOT05ZTU9VU19OQU1FU1BBQ0VfUFJFRklYLAorIAkJIEFOT05ZTU9VU19OQU1FU1BBQ0VfUFJFRklYX0xFTikgPT0gMCkKKyAgICAgeworQEAgLTE4NzAsNyArMTg3Nyw3IEBAIGRfamF2YV9yZXNvdXJjZSAoc3RydWN0IGRfaW5mbyAqZGkpCisgeworICAgc3RydWN0IGRlbWFuZ2xlX2NvbXBvbmVudCAqcCA9IE5VTEw7CisgICBzdHJ1Y3QgZGVtYW5nbGVfY29tcG9uZW50ICpuZXh0ID0gTlVMTDsKKy0gIGxvbmcgbGVuLCBpOworKyAgaW50IGxlbiwgaTsKKyAgIGNoYXIgYzsKKyAgIGNvbnN0IGNoYXIgKnN0cjsKKyAKK0BAIC0yMDEyLDcgKzIwMTksNyBAQCBkX3NwZWNpYWxfbmFtZSAoc3RydWN0IGRfaW5mbyAqZGkpCisgCWNhc2UgJ0MnOgorIAkgIHsKKyAJICAgIHN0cnVjdCBkZW1hbmdsZV9jb21wb25lbnQgKmRlcml2ZWRfdHlwZTsKKy0JICAgIGxvbmcgb2Zmc2V0OworKwkgICAgaW50IG9mZnNldDsKKyAJICAgIHN0cnVjdCBkZW1hbmdsZV9jb21wb25lbnQgKmJhc2VfdHlwZTsKKyAKKyAJICAgIGRlcml2ZWRfdHlwZSA9IGNwbHVzX2RlbWFuZ2xlX3R5cGUgKGRpKTsKK0BAIC0yOTQ2LDEwICsyOTUzLDEwIEBAIGRfcG9pbnRlcl90b19tZW1iZXJfdHlwZSAoc3RydWN0IGRfaW5mbworIAorIC8qIDxub24tbmVnYXRpdmUgbnVtYmVyPiBfICovCisgCistc3RhdGljIGxvbmcKKytzdGF0aWMgaW50CisgZF9jb21wYWN0X251bWJlciAoc3RydWN0IGRfaW5mbyAqZGkpCisgeworLSAgbG9uZyBudW07CisrICBpbnQgbnVtOworICAgaWYgKGRfcGVla19jaGFyIChkaSkgPT0gJ18nKQorICAgICBudW0gPSAwOworICAgZWxzZSBpZiAoZF9wZWVrX2NoYXIgKGRpKSA9PSAnbicpCitAQCAtMjk1Nyw3ICsyOTY0LDcgQEAgZF9jb21wYWN0X251bWJlciAoc3RydWN0IGRfaW5mbyAqZGkpCisgICBlbHNlCisgICAgIG51bSA9IGRfbnVtYmVyIChkaSkgKyAxOworIAorLSAgaWYgKCEgZF9jaGVja19jaGFyIChkaSwgJ18nKSkKKysgIGlmIChudW0gPCAwIHx8ICEgZF9jaGVja19jaGFyIChkaSwgJ18nKSkKKyAgICAgcmV0dXJuIC0xOworICAgcmV0dXJuIG51bTsKKyB9CitAQCAtMjk2OSw3ICsyOTc2LDcgQEAgZF9jb21wYWN0X251bWJlciAoc3RydWN0IGRfaW5mbyAqZGkpCisgc3RhdGljIHN0cnVjdCBkZW1hbmdsZV9jb21wb25lbnQgKgorIGRfdGVtcGxhdGVfcGFyYW0gKHN0cnVjdCBkX2luZm8gKmRpKQorIHsKKy0gIGxvbmcgcGFyYW07CisrICBpbnQgcGFyYW07CisgCisgICBpZiAoISBkX2NoZWNrX2NoYXIgKGRpLCAnVCcpKQorICAgICByZXR1cm4gTlVMTDsKK0BAIC0zMTcxLDkgKzMxNzgsMTAgQEAgZF9leHByZXNzaW9uXzEgKHN0cnVjdCBkX2luZm8gKmRpKQorIAl9CisgICAgICAgZWxzZQorIAl7CistCSAgaW5kZXggPSBkX2NvbXBhY3RfbnVtYmVyIChkaSkgKyAxOworLQkgIGlmIChpbmRleCA9PSAwKQorKwkgIGluZGV4ID0gZF9jb21wYWN0X251bWJlciAoZGkpOworKwkgIGlmIChpbmRleCA9PSBJTlRfTUFYIHx8IGluZGV4ID09IC0xKQorIAkgICAgcmV0dXJuIE5VTEw7CisrCSAgaW5kZXggKys7CisgCX0KKyAgICAgICByZXR1cm4gZF9tYWtlX2Z1bmN0aW9uX3BhcmFtIChkaSwgaW5kZXgpOworICAgICB9CitAQCAtMzUwMiw3ICszNTEwLDcgQEAgZF9sb2NhbF9uYW1lIChzdHJ1Y3QgZF9pbmZvICpkaSkKKyBzdGF0aWMgaW50CisgZF9kaXNjcmltaW5hdG9yIChzdHJ1Y3QgZF9pbmZvICpkaSkKKyB7CistICBsb25nIGRpc2NyaW07CisrICBpbnQgZGlzY3JpbTsKKyAKKyAgIGlmIChkX3BlZWtfY2hhciAoZGkpICE9ICdfJykKKyAgICAgcmV0dXJuIDE7CitAQCAtMzU1OCw3ICszNTY2LDcgQEAgc3RhdGljIHN0cnVjdCBkZW1hbmdsZV9jb21wb25lbnQgKgorIGRfdW5uYW1lZF90eXBlIChzdHJ1Y3QgZF9pbmZvICpkaSkKKyB7CisgICBzdHJ1Y3QgZGVtYW5nbGVfY29tcG9uZW50ICpyZXQ7CistICBsb25nIG51bTsKKysgIGludCBudW07CisgCisgICBpZiAoISBkX2NoZWNrX2NoYXIgKGRpLCAnVScpKQorICAgICByZXR1cm4gTlVMTDsKK0BAIC00MDg2LDEwICs0MDk0LDEwIEBAIGRfYXBwZW5kX3N0cmluZyAoc3RydWN0IGRfcHJpbnRfaW5mbyAqZHAKKyB9CisgCisgc3RhdGljIGlubGluZSB2b2lkCistZF9hcHBlbmRfbnVtIChzdHJ1Y3QgZF9wcmludF9pbmZvICpkcGksIGxvbmcgbCkKKytkX2FwcGVuZF9udW0gKHN0cnVjdCBkX3ByaW50X2luZm8gKmRwaSwgaW50IGwpCisgeworICAgY2hhciBidWZbMjVdOworLSAgc3ByaW50ZiAoYnVmLCIlbGQiLCBsKTsKKysgIHNwcmludGYgKGJ1ZiwiJWQiLCBsKTsKKyAgIGRfYXBwZW5kX3N0cmluZyAoZHBpLCBidWYpOworIH0KKyAKK0luZGV4OiBnaXQvbGliaWJlcnR5L3Rlc3RzdWl0ZS9kZW1hbmdsZS1leHBlY3RlZAorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGdpdC5vcmlnL2xpYmliZXJ0eS90ZXN0c3VpdGUvZGVtYW5nbGUtZXhwZWN0ZWQKKysrKyBnaXQvbGliaWJlcnR5L3Rlc3RzdWl0ZS9kZW1hbmdsZS1leHBlY3RlZAorQEAgLTQ0MjIsMTIgKzQ0MjIsMjIgQEAgdm9pZCBiYXo8aW50PihBPHNpemVvZiAoZm9vKChpbnQpKCksIChmbAorIF9aM2Zvb0kxRkVOMVhJWHN6ZHRjbDFQY2xjdlRfX0VFRTVhcnJheUVFNFR5cGVFdgorIFg8c2l6ZW9mICgoUCgoKEYpKCkpKCkpKS5hcnJheSk+OjpUeXBlIGZvbzxGPigpCisgIworLSMgVGVzdHMgYSB1c2UtYWZ0ZXItZnJlZSBwcm9ibGVtCisrIyBUZXN0cyBhIHVzZS1hZnRlci1mcmVlIHByb2JsZW0gUFI3MDQ4MQorIAorIF9RLl9fMAorIDo6US4odm9pZCkKKyAjCistIyBUZXN0cyBhIHVzZS1hZnRlci1mcmVlIHByb2JsZW0KKysjIFRlc3RzIGEgdXNlLWFmdGVyLWZyZWUgcHJvYmxlbSBQUjcwNDgxCisgCisgX1ExMC1fXzljYWZlYmFiZS4KKyBjYWZlYmFiZS46Oi0odm9pZCkKKysjCisrIyBUZXN0cyBpbnRlZ2VyIG92ZXJmbG93IHByb2JsZW0gUFI3MDQ5MgorKworK19fdnRfOTAwMDAwMDAwMDBjYWZlYmFiZQorK19fdnRfOTAwMDAwMDAwMDBjYWZlYmFiZQorKyMKKysjIFRlc3RzIHdyaXRlIGFjY2VzcyB2aW9sYXRpb24gUFI3MDQ5OAorKworK19aODA4MDAwMDAwMDAwMDAwMDAwMDAwMDAKKytfWjgwODAwMDAwMDAwMDAwMDAwMDAwMDAwCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtY29tbW9uLmluYyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy1jb21tb24uaW5jCmluZGV4IGU0ZmQ0ZDYuLmY1NDBiNGQgMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy1jb21tb24uaW5jCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy1jb21tb24uaW5jCkBAIC0zMyw2ICszMyw4IEBACiBkZWYgZ2V0X2xvbmdfZG91YmxlX3NldHRpbmcoYmIsIGQpOgogICAgIGlmIGQuZ2V0VmFyKCdUUkFOU0xBVEVEX1RBUkdFVF9BUkNIJywgVHJ1ZSkgaW4gWyAncG93ZXJwYycsICdwb3dlcnBjNjQnIF0gYW5kIGQuZ2V0VmFyKCdUQ0xJQkMnLCBUcnVlKSBpbiBbICd1Y2xpYmMnLCAnZ2xpYmMnIF06CiAgICAgICAgIHJldHVybiAiLS13aXRoLWxvbmctZG91YmxlLTEyOCIKKyAgICBlbHNlOgorICAgICAgICByZXR1cm4gIi0td2l0aG91dC1sb25nLWRvdWJsZS0xMjgiCiAgICAgcmV0dXJuICIiCiAKIGRlZiBnZXRfZ2NjX211bHRpYXJjaF9zZXR0aW5nKGJiLCBkKToKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy1jb25maWd1cmUtY29tbW9uLmluYyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy1jb25maWd1cmUtY29tbW9uLmluYwppbmRleCBmNGY3NmJkLi5kZGViYmI4IDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtY29uZmlndXJlLWNvbW1vbi5pbmMKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLWNvbmZpZ3VyZS1jb21tb24uaW5jCkBAIC00NCw2ICs0NCwxMCBAQAogICAgICR7QGdldF9nY2NfbXVsdGlhcmNoX3NldHRpbmcoYmIsIGQpfSBcCiAiCiAKKyMgU2V0IHRoaXMgaGVyZSBzaW5jZSBHQ0MgY29uZmlndXJlIHdvbid0IGF1dG8tZGV0ZWN0IGFuZCBlbmFibGUKKyMgaW5pdGZpbmktYXJyeSB3aGVuIGNyb3NzIGNvbXBpbGluZy4KK0VYVFJBX09FQ09ORl9hcHBlbmQgPSAiIC0tZW5hYmxlLWluaXRmaW5pLWFycmF5IgorCiBleHBvcnQgZ2NjX2N2X2NvbGxlY3QyX2xpYnMgPSAnbm9uZSByZXF1aXJlZCcKICMgV2UgbmVlZCB0byBzZXQgZ2NjX2N2X2NvbGxlY3QyX2xpYnMgZWxzZSB0aGVyZSBpcyBjcm9zcy1jb21waWxhdGlvbiBiYWRuZXNzCiAjIGluIHRoZSBjb25maWcubG9nIGZpbGVzICh3aGljaCBtaWdodCBub3QgZ2V0IGdlbmVyYXRlZCB1bnRpbCBkb19jb21waWxlCkBAIC01Nyw2ICs2MSwxMCBAQAogRVhUUkFfT0VDT05GX2FwcGVuZF9taXBzNjRlbCA9ICIgLS13aXRoLWFiaT02NCAtLXdpdGgtYXJjaC02ND1taXBzNjQgLS13aXRoLXR1bmUtNjQ9bWlwczY0IgogRVhUUkFfT0VDT05GX2FwcGVuZF9taXBzNjRuMzIgPSAiIC0td2l0aC1hYmk9NjQgLS13aXRoLWFyY2gtNjQ9bWlwczY0IC0td2l0aC10dW5lLTY0PW1pcHM2NCIKIEVYVFJBX09FQ09ORl9hcHBlbmRfbWlwczY0ZWxuMzIgPSAiIC0td2l0aC1hYmk9NjQgLS13aXRoLWFyY2gtNjQ9bWlwczY0IC0td2l0aC10dW5lLTY0PW1pcHM2NCIKK0VYVFJBX09FQ09ORl9hcHBlbmRfbWlwc2lzYTMycjZlbCA9ICIgLS13aXRoLWFiaT0zMiAtLXdpdGgtYXJjaD1taXBzMzJyNiIKK0VYVFJBX09FQ09ORl9hcHBlbmRfbWlwc2lzYTMycjYgPSAiIC0td2l0aC1hYmk9MzIgLS13aXRoLWFyY2g9bWlwczMycjYiCitFWFRSQV9PRUNPTkZfYXBwZW5kX21pcHNpc2E2NHI2ZWwgPSAiIC0td2l0aC1hYmk9NjQgLS13aXRoLWFyY2gtNjQ9bWlwczY0cjYiCitFWFRSQV9PRUNPTkZfYXBwZW5kX21pcHNpc2E2NHI2ID0gIiAtLXdpdGgtYWJpPTY0IC0td2l0aC1hcmNoLTY0PW1pcHM2NHI2IgogCiAjIEFSTXY2KyBhZGRzIGF0b21pYyBpbnN0cnVjdGlvbnMgdGhhdCBhZmZlY3QgdGhlIEFCSSBpbiBsaWJyYXJpZXMgYnVpbHQKICMgd2l0aCBUVU5FX0NDQVJHUyBpbiBnY2MtcnVudGltZS4gIE1ha2UgdGhlIGNvbXBpbGVyIGRlZmF1bHQgdG8gYQpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLWNyb3NzLWNhbmFkaWFuXzUuMy5iYiBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy1jcm9zcy1jYW5hZGlhbl81LjMuYmIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGJmNTNjNWMuLjAwMDAwMDAKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLWNyb3NzLWNhbmFkaWFuXzUuMy5iYgorKysgL2Rldi9udWxsCkBAIC0xLDUgKzAsMCBAQAotcmVxdWlyZSByZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtJHtQVn0uaW5jCi1yZXF1aXJlIGdjYy1jcm9zcy1jYW5hZGlhbi5pbmMKLQotCi0KZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy1jcm9zcy1jYW5hZGlhbl80LjkuYmIgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtY3Jvc3MtY2FuYWRpYW5fNS40LmJiCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtY3Jvc3MtY2FuYWRpYW5fNC45LmJiCnJlbmFtZSB0byBpbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtY3Jvc3MtY2FuYWRpYW5fNS40LmJiCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtY3Jvc3MtY2FuYWRpYW5fNC45LmJiIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLWNyb3NzLWNhbmFkaWFuXzYuMi5iYgpzaW1pbGFyaXR5IGluZGV4IDEwMCUKY29weSBmcm9tIGltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy1jcm9zcy1jYW5hZGlhbl80LjkuYmIKY29weSB0byBpbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtY3Jvc3MtY2FuYWRpYW5fNi4yLmJiCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtY3Jvc3MtaW5pdGlhbC5pbmMgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtY3Jvc3MtaW5pdGlhbC5pbmMKaW5kZXggMDQ4YjUzMC4uZGNmMjI3MSAxMDA2NDQKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLWNyb3NzLWluaXRpYWwuaW5jCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy1jcm9zcy1pbml0aWFsLmluYwpAQCAtNzcsNyArNzcsNyBAQAogCiAJIyBnY2MtcnVudGltZSBpbnN0YWxscyBsaWJnY2MgaW50byBhIHNwZWNpYWwgbG9jYXRpb24gaW4gc3RhZ2luZyBzaW5jZSBpdCBicmVha3MgZG9pbmcgYSBzdGFuZGFsb25lIGJ1aWxkCiAJY2FzZSAke1BOfSBpbgotCQkqZ2NjLWNyb3NzLWluaXRpYWwtJHtUQVJHRVRfQVJDSH18KmdjYy1jcm9zc3Nkay1pbml0aWFsLSR7VEFSR0VUX0FSQ0h9KQorCQkqZ2NjLWNyb3NzLWluaXRpYWwtJHtUQVJHRVRfQVJDSH18KmdjYy1jcm9zc3Nkay1pbml0aWFsLSR7U0RLX1NZU30pCiAJCQlkZXN0PSR7RH0vJHtpbmNsdWRlZGlyfS9nY2MtYnVpbGQtaW50ZXJuYWwtaW5pdGlhbC0ke1RBUkdFVF9TWVN9CiAJCQloYXJkbGlua2RpciAuICRkZXN0CiAJCTs7CmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtY3Jvc3MtaW5pdGlhbF81LjMuYmIgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtY3Jvc3MtaW5pdGlhbF81LjMuYmIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDRjNzNlNWMuLjAwMDAwMDAKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLWNyb3NzLWluaXRpYWxfNS4zLmJiCisrKyAvZGV2L251bGwKQEAgLTEsMiArMCwwIEBACi1yZXF1aXJlIHJlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy1jcm9zc18ke1BWfS5iYgotcmVxdWlyZSBnY2MtY3Jvc3MtaW5pdGlhbC5pbmMKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy1jcm9zcy1pbml0aWFsXzQuOS5iYiBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy1jcm9zcy1pbml0aWFsXzUuNC5iYgpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLWNyb3NzLWluaXRpYWxfNC45LmJiCnJlbmFtZSB0byBpbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtY3Jvc3MtaW5pdGlhbF81LjQuYmIKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy1jcm9zcy1pbml0aWFsXzQuOS5iYiBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy1jcm9zcy1pbml0aWFsXzYuMi5iYgpzaW1pbGFyaXR5IGluZGV4IDEwMCUKY29weSBmcm9tIGltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy1jcm9zcy1pbml0aWFsXzQuOS5iYgpjb3B5IHRvIGltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy1jcm9zcy1pbml0aWFsXzYuMi5iYgpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLWNyb3NzLmluYyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy1jcm9zcy5pbmMKaW5kZXggZjQ3OTM2MC4uY2M0NjVhMiAxMDA2NDQKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLWNyb3NzLmluYworKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtY3Jvc3MuaW5jCkBAIC0xMyw2ICsxMywxMSBAQAogCiByZXF1aXJlIGdjYy1jb25maWd1cmUtY29tbW9uLmluYwogCisjIFdoaWxlIHdlIHdhbnQgdGhlICdnbnUnIGhhc2ggc3R5bGUsIHdlIGV4cGxpY2l0bHkgc2V0IGl0IHRvIHN5c3YgaGVyZSB0bworIyBlbnN1cmUgdGhhdCBhbnkgcmVjaXBlIHdoaWNoIGRvZXNuJ3Qgb2JleSBvdXIgTERGTEFHUyAod2hpY2ggYWxzbyBzZXQgaXQgdG8KKyMgZ251KSB3aWxsIGhpdCBhIFFBIGZhaWx1cmUuCitMSU5LRVJfSEFTSF9TVFlMRSA/PSAic3lzdiIKKwogRVhUUkFfT0VDT05GICs9ICItLWVuYWJsZS1wb2lzb24tc3lzdGVtLWRpcmVjdG9yaWVzIgogRVhUUkFfT0VDT05GX2FwcGVuZF9zaDQgPSAiIFwKICAgICAtLXdpdGgtbXVsdGlsaWItbGlzdD0gXApAQCAtMTgzLDEyICsxODgsMTUgQEAKIAogCSMgZ2NjLXJ1bnRpbWUgaW5zdGFsbHMgbGliZ2NjIGludG8gYSBzcGVjaWFsIGxvY2F0aW9uIGluIHN0YWdpbmcgc2luY2UgaXQgYnJlYWtzIGRvaW5nIGEgc3RhbmRhbG9uZSBidWlsZAogCWNhc2UgJHtQTn0gaW4KLQkJKmdjYy1jcm9zcy0ke1RBUkdFVF9BUkNIfXwqZ2NjLWNyb3Nzc2RrLSR7VEFSR0VUX0FSQ0h9KQorCQkqZ2NjLWNyb3NzLSR7VEFSR0VUX0FSQ0h9fCpnY2MtY3Jvc3NzZGstJHtTREtfU1lTfSkKIAkJCWRlc3Q9JHtEfS8ke2luY2x1ZGVkaXJ9L2djYy1idWlsZC1pbnRlcm5hbC0ke1RBUkdFVF9TWVN9CiAJCQloYXJkbGlua2RpciAuICRkZXN0CiAJCTs7CiAJZXNhYwogfQorIyBUaGlzIGlzIHJlZmxlY3RlZCBpbiB0aGUgcmVjaXBlIG5hbWUgYW5kIHRhcmdldCBnY2Mgc2hvdWxkbid0IGRlcGVuZCAKKyMgb24gU0RLIHNldHRpbmdzIGVpdGhlcgorZG9faW5zdGFsbFt2YXJkZXBzZXhjbHVkZV0gKz0gIlNES19TWVMiCiAKIGRvX3BhY2thZ2Vbbm9leGVjXSA9ICIxIgogZG9fcGFja2FnZWRhdGFbbm9leGVjXSA9ICIxIgpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLWNyb3NzXzUuMy5iYiBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy1jcm9zc181LjMuYmIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGI0M2NjYTAuLjAwMDAwMDAKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLWNyb3NzXzUuMy5iYgorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotcmVxdWlyZSByZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtJHtQVn0uaW5jCi1yZXF1aXJlIGdjYy1jcm9zcy5pbmMKLQpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLWNyb3NzXzQuOS5iYiBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy1jcm9zc181LjQuYmIKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy1jcm9zc180LjkuYmIKcmVuYW1lIHRvIGltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy1jcm9zc181LjQuYmIKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy1jcm9zc180LjkuYmIgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtY3Jvc3NfNi4yLmJiCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpjb3B5IGZyb20gaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLWNyb3NzXzQuOS5iYgpjb3B5IHRvIGltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy1jcm9zc182LjIuYmIKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy1jcm9zc3Nkay1pbml0aWFsLmluYyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy1jcm9zc3Nkay1pbml0aWFsLmluYwppbmRleCA3ZDI1OTljLi4wOGVkYTVkIDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtY3Jvc3NzZGstaW5pdGlhbC5pbmMKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLWNyb3Nzc2RrLWluaXRpYWwuaW5jCkBAIC0xLDYgKzEsNiBAQAogaW5oZXJpdCBjcm9zc3NkawogCi1QTiA9ICJnY2MtY3Jvc3NzZGstaW5pdGlhbC0ke1RBUkdFVF9BUkNIfSIKK1BOID0gImdjYy1jcm9zc3Nkay1pbml0aWFsLSR7U0RLX1NZU30iCiAKIFNZU1RFTUhFQURFUlMgPSAiJHtTREtQQVRITkFUSVZFfSR7cHJlZml4X25hdGl2ZXNka30vaW5jbHVkZSIKIFNZU1RFTUxJQlMgPSAiJHtTREtQQVRITkFUSVZFfSR7YmFzZV9saWJkaXJfbmF0aXZlc2RrfS8iCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtY3Jvc3NzZGstaW5pdGlhbF81LjMuYmIgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtY3Jvc3NzZGstaW5pdGlhbF81LjMuYmIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGZkOTBlMTEuLjAwMDAwMDAKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLWNyb3Nzc2RrLWluaXRpYWxfNS4zLmJiCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi1yZXF1aXJlIHJlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy1jcm9zcy1pbml0aWFsXyR7UFZ9LmJiCi1yZXF1aXJlIGdjYy1jcm9zc3Nkay1pbml0aWFsLmluYwotCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtY3Jvc3NzZGstaW5pdGlhbF80LjkuYmIgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtY3Jvc3NzZGstaW5pdGlhbF81LjQuYmIKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy1jcm9zc3Nkay1pbml0aWFsXzQuOS5iYgpyZW5hbWUgdG8gaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLWNyb3Nzc2RrLWluaXRpYWxfNS40LmJiCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtY3Jvc3NzZGstaW5pdGlhbF80LjkuYmIgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtY3Jvc3NzZGstaW5pdGlhbF82LjIuYmIKc2ltaWxhcml0eSBpbmRleCAxMDAlCmNvcHkgZnJvbSBpbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtY3Jvc3NzZGstaW5pdGlhbF80LjkuYmIKY29weSB0byBpbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtY3Jvc3NzZGstaW5pdGlhbF82LjIuYmIKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy1jcm9zc3Nkay5pbmMgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtY3Jvc3NzZGsuaW5jCmluZGV4IDUzZjg4MGYuLmNkYTI5MjcgMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy1jcm9zc3Nkay5pbmMKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLWNyb3Nzc2RrLmluYwpAQCAtMSw2ICsxLDYgQEAKIGluaGVyaXQgY3Jvc3NzZGsKIAotUE4gPSAiZ2NjLWNyb3Nzc2RrLSR7VEFSR0VUX0FSQ0h9IgorUE4gPSAiZ2NjLWNyb3Nzc2RrLSR7U0RLX1NZU30iCiAKIFNZU1RFTUhFQURFUlMgPSAiJHtTREtQQVRITkFUSVZFfSR7cHJlZml4X25hdGl2ZXNka30vaW5jbHVkZSIKIFNZU1RFTUxJQlMgPSAiJHtTREtQQVRITkFUSVZFfSR7YmFzZV9saWJkaXJfbmF0aXZlc2RrfS8iCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtY3Jvc3NzZGtfNS4zLmJiIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLWNyb3Nzc2RrXzUuMy5iYgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDBhNmM0Zi4uMDAwMDAwMAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtY3Jvc3NzZGtfNS4zLmJiCisrKyAvZGV2L251bGwKQEAgLTEsMiArMCwwIEBACi1yZXF1aXJlIHJlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy1jcm9zc18ke1BWfS5iYgotcmVxdWlyZSBnY2MtY3Jvc3NzZGsuaW5jCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtY3Jvc3NzZGtfNC45LmJiIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLWNyb3Nzc2RrXzUuNC5iYgpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLWNyb3Nzc2RrXzQuOS5iYgpyZW5hbWUgdG8gaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLWNyb3Nzc2RrXzUuNC5iYgpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLWNyb3Nzc2RrXzQuOS5iYiBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy1jcm9zc3Nka182LjIuYmIKc2ltaWxhcml0eSBpbmRleCAxMDAlCmNvcHkgZnJvbSBpbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtY3Jvc3NzZGtfNC45LmJiCmNvcHkgdG8gaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLWNyb3Nzc2RrXzYuMi5iYgpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLXJ1bnRpbWUuaW5jIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLXJ1bnRpbWUuaW5jCmluZGV4IDg2MzljMWMuLjE1MjUyZjEgMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy1ydW50aW1lLmluYworKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtcnVudGltZS5pbmMKQEAgLTEsNSArMSw3IEBACiByZXF1aXJlIGdjYy1jb25maWd1cmUtY29tbW9uLmluYwogCitTVU1NQVJZID0gIlJ1bnRpbWUgbGlicmFyaWVzIGZyb20gR0NDIgorCiAjIE92ZXItcmlkZSB0aGUgTElDRU5TRSBzZXQgYnkgZ2NjLSR7UFZ9LmluYyB0byByZW1vdmUgIiYgR1BMdjMiCiAjIEFsbCBnY2MtcnVudGltZSBwYWNrYWdlcyBhcmUgbm93IGNvdmVyZWQgYnkgdGhlIHJ1bnRpbWUgZXhjZXB0aW9uLgogTElDRU5TRSA9ICJHUEwtMy4wLXdpdGgtR0NDLWV4Y2VwdGlvbiIKQEAgLTE5LDYgKzIxLDEwIEBACiBSVU5USU1FTElCSVRNX21pcHNlbCA9ICIiCiBSVU5USU1FTElCSVRNX21pcHM2NCA9ICIiCiBSVU5USU1FTElCSVRNX21pcHM2NGVsID0gIiIKK1JVTlRJTUVMSUJJVE1fbWlwc2lzYTMycjYgPSAiIgorUlVOVElNRUxJQklUTV9taXBzaXNhMzJyNmVsID0gIiIKK1JVTlRJTUVMSUJJVE1fbWlwc2lzYTY0cjYgPSAiIgorUlVOVElNRUxJQklUTV9taXBzaXNhNjRyNmVsID0gIiIKIFJVTlRJTUVMSUJJVE1fbmlvczIgPSAiIgogUlVOVElNRUxJQklUTV9taWNyb2JsYXplID0gIiIKIApAQCAtNzMsOSArNzksMzkgQEAKIAlpZiBbICIke1RBUkdFVF9WRU5ET1JfTVVMVElMSUJfT1JJR0lOQUx9IiAhPSAiIiAtYSAiJHtUQVJHRVRfVkVORE9SfSIgIT0gIiR7VEFSR0VUX1ZFTkRPUl9NVUxUSUxJQl9PUklHSU5BTH0iIF07IHRoZW4KIAkJbG4gLXMgJHtUQVJHRVRfU1lTfSAke0R9JHtpbmNsdWRlZGlyfS9jKysvJHtCSU5WfS8ke1RBUkdFVF9BUkNIfSR7VEFSR0VUX1ZFTkRPUl9NVUxUSUxJQl9PUklHSU5BTH0tJHtUQVJHRVRfT1N9CiAJZmkKKworfQorCitkb19pbnN0YWxsX2FwcGVuZF9jbGFzcy10YXJnZXQgKCkgewogCWlmIFsgIiR7VEFSR0VUX09TfSIgPSAibGludXgtZ251c3BlIiBdOyB0aGVuCiAJCWxuIC1zICR7VEFSR0VUX1NZU30gJHtEfSR7aW5jbHVkZWRpcn0vYysrLyR7QklOVn0vJHtUQVJHRVRfQVJDSH0ke1RBUkdFVF9WRU5ET1J9LWxpbnV4CiAJZmkKKworCWlmIFsgIiR7VEFSR0VUX09TfSIgPSAibGludXgtZ251bjMyIiBdOyB0aGVuCisJCWlmIFsgIiR7TVVMVElMSUJTfSIgIT0gIiIgXTsgdGhlbgorCQkJbWtkaXIgJHtEfSR7aW5jbHVkZWRpcn0vYysrLyR7QklOVn0vJHtUQVJHRVRfQVJDSH0tcG9reW1sbGliNjQtbGludXgKKwkJCWxuIC1zIC4uLyR7VEFSR0VUX1NZU30gJHtEfSR7aW5jbHVkZWRpcn0vYysrLyR7QklOVn0vJHtUQVJHRVRfQVJDSH0tcG9reW1sbGliNjQtbGludXgvMzIKKwkJZWxzZQorCQkJbG4gLXMgJHtUQVJHRVRfU1lTfSAke0R9JHtpbmNsdWRlZGlyfS9jKysvJHtCSU5WfS8ke1RBUkdFVF9BUkNIfSR7VEFSR0VUX1ZFTkRPUn0tbGludXgKKwkJZmkKKwlmaQorCWlmIFsgIiR7VEFSR0VUX09TfSIgPSAibGludXgtZ251eDMyIiBdOyB0aGVuCisJCWlmIFsgIiR7TVVMVElMSUJTfSIgIT0gIiIgXTsgdGhlbgorCQkJbWtkaXIgJHtEfSR7aW5jbHVkZWRpcn0vYysrLyR7QklOVn0vJHtUQVJHRVRfQVJDSH0tcG9reS1saW51eAorCQkJbG4gLXMgLi4vJHtUQVJHRVRfU1lTfSAke0R9JHtpbmNsdWRlZGlyfS9jKysvJHtCSU5WfS8ke1RBUkdFVF9BUkNIfS1wb2t5LWxpbnV4L3gzMgorCQllbHNlCisJCQlsbiAtcyAke1RBUkdFVF9TWVN9ICR7RH0ke2luY2x1ZGVkaXJ9L2MrKy8ke0JJTlZ9LyR7VEFSR0VUX0FSQ0h9JHtUQVJHRVRfVkVORE9SfS1saW51eAorCQlmaQorCWZpCisKKwlpZiBbICIke1RDTElCQ30iICE9ICJnbGliYyIgXTsgdGhlbgorCQljYXNlICIke1RBUkdFVF9PU30iIGluCisJCQkibGludXgtbXVzbCIgfCAibGludXgtdWNsaWJjIiB8ICJsaW51eC0qc3BlIikgZXh0cmFfdGFyZ2V0X29zPSJsaW51eCI7OworCQkJImxpbnV4LW11c2xlYWJpIiB8ICJsaW51eC11Y2xpYmNlYWJpIikgZXh0cmFfdGFyZ2V0X29zPSJsaW51eC1nbnVlYWJpIjs7CisJCQkqKSBleHRyYV90YXJnZXRfb3M9ImxpbnV4Ijs7CisJCWVzYWMKKwkJbG4gLXMgJHtUQVJHRVRfU1lTfSAke0R9JHtpbmNsdWRlZGlyfS9jKysvJHtCSU5WfS8ke1RBUkdFVF9BUkNIfSR7VEFSR0VUX1ZFTkRPUn0tJGV4dHJhX3RhcmdldF9vcworCWZpCiAJY2hvd24gLVIgcm9vdDpyb290ICR7RH0KIH0KIApAQCAtMTIzLDczICsxNTksOTggQEAKICIKIAogRklMRVNfbGliZzJjID0gIiR7dGFyZ2V0X2xpYmRpcn0vbGliZzJjLnNvLioiCitTVU1NQVJZX2xpYmcyYyA9ICJDb21wYW5pb24gcnVudGltZSBsaWJyYXJ5IGZvciBnNzciCiBGSUxFU19saWJnMmMtZGV2ID0gIlwKICAgICAke2xpYmRpcn0vbGliZzJjLnNvIFwKICAgICAke2xpYmRpcn0vbGliZzJjLmEgXAogICAgICR7bGliZGlyfS9saWJmcnRiZWdpbi5hIFwKICIKK1NVTU1BUllfbGliZzJjLWRldiA9ICJDb21wYW5pb24gcnVudGltZSBsaWJyYXJ5IGZvciBnNzcgLSBkZXZlbG9wbWVudCBmaWxlcyIKIAogRklMRVNfbGlic3RkYysrID0gIiR7bGliZGlyfS9saWJzdGRjKysuc28uKiIKK1NVTU1BUllfbGlic3RkYysrID0gIkdOVSBzdGFuZGFyZCBDKysgbGlicmFyeSIKIEZJTEVTX2xpYnN0ZGMrKy1kZXYgPSAiXAogICAgICR7aW5jbHVkZWRpcn0vYysrLyBcCiAgICAgJHtsaWJkaXJ9L2xpYnN0ZGMrKy5zbyBcCiAgICAgJHtsaWJkaXJ9L2xpYnN0ZGMrKyoubGEgXAogICAgICR7bGliZGlyfS9saWJzdXBjKysubGEgXAogIgorU1VNTUFSWV9saWJzdGRjKystZGV2ID0gIkdOVSBzdGFuZGFyZCBDKysgbGlicmFyeSAtIGRldmVsb3BtZW50IGZpbGVzIgogRklMRVNfbGlic3RkYysrLXN0YXRpY2RldiA9ICJcCiAgICAgJHtsaWJkaXJ9L2xpYnN0ZGMrKyouYSBcCiAgICAgJHtsaWJkaXJ9L2xpYnN1cGMrKy5hIFwKICIKK1NVTU1BUllfbGlic3RkYysrLXN0YXRpY2RldiA9ICJHTlUgc3RhbmRhcmQgQysrIGxpYnJhcnkgLSBzdGF0aWMgZGV2ZWxvcG1lbnQgZmlsZXMiCiAKIEZJTEVTX2xpYnN0ZGMrKy1wcmVjb21waWxlLWRldiA9ICIke2luY2x1ZGVkaXJ9L2MrKy8ke1RBUkdFVF9TWVN9L2JpdHMvKi5nY2giCitTVU1NQVJZX2xpYnN0ZGMrKy1wcmVjb21waWxlLWRldiA9ICJHTlUgc3RhbmRhcmQgQysrIGxpYnJhcnkgLSBwcmVjb21waWxlZCBoZWFkZXIgZmlsZXMiCiAKIEZJTEVTX2xpYnNzcCA9ICIke2xpYmRpcn0vbGlic3NwLnNvLioiCitTVU1NQVJZX2xpYnNzcCA9ICJHTlUgc3RhY2sgc21hc2hpbmcgcHJvdGVjdGlvbiBsaWJyYXJ5IgogRklMRVNfbGlic3NwLWRldiA9ICJcCiAgICAgJHtsaWJkaXJ9L2xpYnNzcCouc28gXAogICAgICR7bGliZGlyfS9saWJzc3AqX25vbnNoYXJlZC5hIFwKICAgICAke2xpYmRpcn0vbGlic3NwKi5sYSBcCiAgICAgJHtsaWJkaXJ9L2djYy8ke1RBUkdFVF9TWVN9LyR7QklOVn0vaW5jbHVkZS9zc3AgXAogIgorU1VNTUFSWV9saWJzc3AtZGV2ID0gIkdOVSBzdGFjayBzbWFzaGluZyBwcm90ZWN0aW9uIGxpYnJhcnkgLSBkZXZlbG9wbWVudCBmaWxlcyIKIEZJTEVTX2xpYnNzcC1zdGF0aWNkZXYgPSAiJHtsaWJkaXJ9L2xpYnNzcCouYSIKK1NVTU1BUllfbGlic3NwLXN0YXRpY2RldiA9ICJHTlUgc3RhY2sgc21hc2hpbmcgcHJvdGVjdGlvbiBsaWJyYXJ5IC0gc3RhdGljIGRldmVsb3BtZW50IGZpbGVzIgogCiBGSUxFU19saWJxdWFkbWF0aCA9ICIke2xpYmRpcn0vbGlicXVhZG1hdGgqLnNvLioiCitTVU1NQVJZX2xpYnF1YWRtYXRoID0gIkdOVSBxdWFkLXByZWNpc2lvbiBtYXRoIGxpYnJhcnkiCiBGSUxFU19saWJxdWFkbWF0aC1kZXYgPSAiXAogICAgICR7bGliZGlyfS9nY2MvJHtUQVJHRVRfU1lTfS8ke0JJTlZ9L2luY2x1ZGUvcXVhZG1hdGgqIFwKICAgICAke2xpYmRpcn0vbGlicXVhZG1hdGgqLnNvIFwKICAgICAke2xpYmRpcn0vbGlicXVhZG1hdGgubGEgXAogIgorU1VNTUFSWV9saWJxdWFkbWF0aC1kZXYgPSAiR05VIHF1YWQtcHJlY2lzaW9uIG1hdGggbGlicmFyeSAtIGRldmVsb3BtZW50IGZpbGVzIgogRklMRVNfbGlicXVhZG1hdGgtc3RhdGljZGV2ID0gIiR7bGliZGlyfS9saWJxdWFkbWF0aC5hIgorU1VNTUFSWV9saWJxdWFkbWF0aC1zdGF0aWNkZXYgPSAiR05VIHF1YWQtcHJlY2lzaW9uIG1hdGggbGlicmFyeSAtIHN0YXRpYyBkZXZlbG9wbWVudCBmaWxlcyIKIAorIyBOT1RFOiBtdWRmbGFwIGhhcyBiZWVuIHJlbW92ZWQgYXMgb2YgZ2NjIDQuOSBhbmQgaGFzIGJlZW4gc3VwZXJzZWRlZCBieSB0aGUgYWRkcmVzcyBzYW5pdGlzZXIKIEZJTEVTX2xpYm11ZGZsYXAgPSAiJHtsaWJkaXJ9L2xpYm11ZGZsYXAqLnNvLioiCitTVU1NQVJZX2xpYm11ZGZsYXAgPSAiUG9pbnRlciBkZWJ1Z2dpbmcgbGlicmFyeSBmb3IgZ2NjIgogRklMRVNfbGlibXVkZmxhcC1kZXYgPSAiXAogICAgICR7bGliZGlyfS9saWJtdWRmbGFwKi5zbyBcCiAgICAgJHtsaWJkaXJ9L2xpYm11ZGZsYXAubGEgXAogIgorU1VNTUFSWV9saWJtdWRmbGFwLWRldiA9ICJQb2ludGVyIGRlYnVnZ2luZyBsaWJyYXJ5IGZvciBnY2MgLSBkZXZlbG9wbWVudCBmaWxlcyIKIEZJTEVTX2xpYm11ZGZsYXAtc3RhdGljZGV2ID0gIiR7bGliZGlyfS9saWJtdWRmbGFwLmEiCitTVU1NQVJZX2xpYm11ZGZsYXAtc3RhdGljZGV2ID0gIlBvaW50ZXIgZGVidWdnaW5nIGxpYnJhcnkgZm9yIGdjYyAtIHN0YXRpYyBkZXZlbG9wbWVudCBmaWxlcyIKIAogRklMRVNfbGliZ29tcCA9ICIke2xpYmRpcn0vbGliZ29tcCoke1NPTElCU30iCitTVU1NQVJZX2xpYmdvbXAgPSAiR05VIE9wZW5NUCBwYXJhbGxlbCBwcm9ncmFtbWluZyBsaWJyYXJ5IgogRklMRVNfbGliZ29tcC1kZXYgPSAiXAogICAgICR7bGliZGlyfS9saWJnb21wKiR7U09MSUJTREVWfSBcCiAgICAgJHtsaWJkaXJ9L2xpYmdvbXAqLmxhIFwKICAgICAke2xpYmRpcn0vbGliZ29tcC5zcGVjIFwKICAgICAke2xpYmRpcn0vZ2NjLyR7VEFSR0VUX1NZU30vJHtCSU5WfS9pbmNsdWRlL29tcC5oIFwKICIKK1NVTU1BUllfbGliZ29tcC1kZXYgPSAiR05VIE9wZW5NUCBwYXJhbGxlbCBwcm9ncmFtbWluZyBsaWJyYXJ5IC0gZGV2ZWxvcG1lbnQgZmlsZXMiCiBGSUxFU19saWJnb21wLXN0YXRpY2RldiA9ICIke2xpYmRpcn0vbGliZ29tcCouYSIKK1NVTU1BUllfbGliZ29tcC1zdGF0aWNkZXYgPSAiR05VIE9wZW5NUCBwYXJhbGxlbCBwcm9ncmFtbWluZyBsaWJyYXJ5IC0gc3RhdGljIGRldmVsb3BtZW50IGZpbGVzIgogCiBGSUxFU19saWJhdG9taWMgPSAiJHtsaWJkaXJ9L2xpYmF0b21pYy5zby4qIgorU1VNTUFSWV9saWJhdG9taWMgPSAiR05VIEMrKzExIGF0b21pY3Mgc3VwcG9ydCBsaWJyYXJ5IgogRklMRVNfbGliYXRvbWljLWRldiA9ICJcCiAgICAgJHtsaWJkaXJ9L2xpYmF0b21pYy5zbyBcCiAgICAgJHtsaWJkaXJ9L2xpYmF0b21pYy5sYSBcCiAiCitTVU1NQVJZX2xpYmF0b21pYy1kZXYgPSAiR05VIEMrKzExIGF0b21pY3Mgc3VwcG9ydCBsaWJyYXJ5IC0gZGV2ZWxvcG1lbnQgZmlsZXMiCiBGSUxFU19saWJhdG9taWMtc3RhdGljZGV2ID0gIiR7bGliZGlyfS9saWJhdG9taWMuYSIKK1NVTU1BUllfbGliYXRvbWljLXN0YXRpY2RldiA9ICJHTlUgQysrMTEgYXRvbWljcyBzdXBwb3J0IGxpYnJhcnkgLSBzdGF0aWMgZGV2ZWxvcG1lbnQgZmlsZXMiCiAKIEZJTEVTX2xpYml0bSA9ICIke2xpYmRpcn0vbGliaXRtLnNvLioiCitTVU1NQVJZX2xpYml0bSA9ICJHTlUgdHJhbnNhY3Rpb25hbCBtZW1vcnkgc3VwcG9ydCBsaWJyYXJ5IgogRklMRVNfbGliaXRtLWRldiA9ICJcCiAgICAgJHtsaWJkaXJ9L2xpYml0bS5zbyBcCiAgICAgJHtsaWJkaXJ9L2xpYml0bS5sYSBcCiAgICAgJHtsaWJkaXJ9L2xpYml0bS5zcGVjIFwKICIKK1NVTU1BUllfbGliaXRtLWRldiA9ICJHTlUgdHJhbnNhY3Rpb25hbCBtZW1vcnkgc3VwcG9ydCBsaWJyYXJ5IC0gZGV2ZWxvcG1lbnQgZmlsZXMiCiBGSUxFU19saWJpdG0tc3RhdGljZGV2ID0gIiR7bGliZGlyfS9saWJpdG0uYSIKK1NVTU1BUllfbGliaXRtLXN0YXRpY2RldiA9ICJHTlUgdHJhbnNhY3Rpb25hbCBtZW1vcnkgc3VwcG9ydCBsaWJyYXJ5IC0gc3RhdGljIGRldmVsb3BtZW50IGZpbGVzIgogCiBkb19wYWNrYWdlX3dyaXRlX2lwa1tkZXBlbmRzXSArPSAidmlydHVhbC8ke01MUFJFRklYfWxpYmM6ZG9fcGFja2FnZWRhdGEiCiBkb19wYWNrYWdlX3dyaXRlX2RlYltkZXBlbmRzXSArPSAidmlydHVhbC8ke01MUFJFRklYfWxpYmM6ZG9fcGFja2FnZWRhdGEiCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtcnVudGltZV80LjkuYmIgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtcnVudGltZV80LjkuYmIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQ5N2Q2OTEuLjAwMDAwMDAKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLXJ1bnRpbWVfNC45LmJiCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi1yZXF1aXJlIHJlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy0ke1BWfS5pbmMKLXJlcXVpcmUgZ2NjLXJ1bnRpbWUuaW5jCi0KZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy1ydW50aW1lXzUuMy5iYiBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy1ydW50aW1lXzUuNC5iYgpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLXJ1bnRpbWVfNS4zLmJiCnJlbmFtZSB0byBpbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtcnVudGltZV81LjQuYmIKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy1ydW50aW1lXzUuMy5iYiBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy1ydW50aW1lXzYuMi5iYgpzaW1pbGFyaXR5IGluZGV4IDEwMCUKY29weSBmcm9tIGltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy1ydW50aW1lXzUuMy5iYgpjb3B5IHRvIGltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy1ydW50aW1lXzYuMi5iYgpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLXNhbml0aXplcnMuaW5jIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLXNhbml0aXplcnMuaW5jCmluZGV4IDYwOTFhMGIuLmRmNGUyOTcgMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy1zYW5pdGl6ZXJzLmluYworKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2Mtc2FuaXRpemVycy5pbmMKQEAgLTUwLDcgKzUwLDcgQEAKIAogSU5ISUJJVF9ERUZBVUxUX0RFUFMgPSAiMSIKIEFMTE9XX0VNUFRZXyR7UE59ID0gIjEiCi1ERVBFTkRTID0gImdjYy1ydW50aW1lIgorREVQRU5EUyA9ICJnY2MtcnVudGltZSB2aXJ0dWFsLyR7VEFSR0VUX1BSRUZJWH1nY2MiCiAKIEJCQ0xBU1NFWFRFTkQgPSAibmF0aXZlc2RrIgogCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2Mtc2FuaXRpemVyc181LjMuYmIgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2Mtc2FuaXRpemVyc181LjMuYmIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDYwMWY2NjYuLjAwMDAwMDAKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLXNhbml0aXplcnNfNS4zLmJiCisrKyAvZGV2L251bGwKQEAgLTEsMiArMCwwIEBACi1yZXF1aXJlIHJlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy0ke1BWfS5pbmMKLXJlcXVpcmUgZ2NjLXNhbml0aXplcnMuaW5jCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2Mtc2FuaXRpemVyc180LjkuYmIgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2Mtc2FuaXRpemVyc181LjQuYmIKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy1zYW5pdGl6ZXJzXzQuOS5iYgpyZW5hbWUgdG8gaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLXNhbml0aXplcnNfNS40LmJiCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2Mtc2FuaXRpemVyc180LjkuYmIgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2Mtc2FuaXRpemVyc182LjIuYmIKc2ltaWxhcml0eSBpbmRleCAxMDAlCmNvcHkgZnJvbSBpbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2Mtc2FuaXRpemVyc180LjkuYmIKY29weSB0byBpbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2Mtc2FuaXRpemVyc182LjIuYmIKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy1zb3VyY2VfNS4zLmJiIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLXNvdXJjZV81LjMuYmIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGI4OTBmYTMuLjAwMDAwMDAKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLXNvdXJjZV81LjMuYmIKKysrIC9kZXYvbnVsbApAQCAtMSw0ICswLDAgQEAKLXJlcXVpcmUgcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLSR7UFZ9LmluYwotcmVxdWlyZSByZWNpcGVzLWRldnRvb2xzL2djYy9nY2Mtc291cmNlLmluYwotCi1FWENMVURFX0ZST01fV09STEQgPSAiMSIKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy1zb3VyY2VfNC45LmJiIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLXNvdXJjZV81LjQuYmIKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy1zb3VyY2VfNC45LmJiCnJlbmFtZSB0byBpbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2Mtc291cmNlXzUuNC5iYgpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLXNvdXJjZV80LjkuYmIgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2Mtc291cmNlXzYuMi5iYgpzaW1pbGFyaXR5IGluZGV4IDEwMCUKY29weSBmcm9tIGltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy1zb3VyY2VfNC45LmJiCmNvcHkgdG8gaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLXNvdXJjZV82LjIuYmIKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy10YXJnZXQuaW5jIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLXRhcmdldC5pbmMKaW5kZXggYjhkYWJlNS4uZjQzNmZhMiAxMDA2NDQKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLXRhcmdldC5pbmMKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLXRhcmdldC5pbmMKQEAgLTQsNyArNCw2IEBACiBFWFRSQV9PRUNPTkZfUEFUSFMgPSAiXAogICAgIC0td2l0aC1zeXNyb290PS8gXAogICAgIC0td2l0aC1idWlsZC1zeXNyb290PSR7U1RBR0lOR19ESVJfVEFSR0VUfSBcCi0gICAgLS13aXRoLW5hdGl2ZS1zeXN0ZW0taGVhZGVyLWRpcj0ke1NUQUdJTkdfRElSX1RBUkdFVH0ke3RhcmdldF9pbmNsdWRlZGlyfSBcCiAgICAgLS13aXRoLWd4eC1pbmNsdWRlLWRpcj0ke2luY2x1ZGVkaXJ9L2MrKy8ke0JJTlZ9IFwKICIKIApAQCAtNDMsNiArNDIsMTAgQEAKICAgICAke2djY2xpYmRpcn0vJHtUQVJHRVRfU1lTfS8ke0JJTlZ9L2luY2x1ZGUtZml4ZWQgXAogIgogSU5TQU5FX1NLSVBfJHtQTn0gKz0gImRldi1zbyIKK1JSRUNPTU1FTkRTXyR7UE59ICs9ICJcCisgICAgbGlic3NwIFwKKyAgICBsaWJzc3AtZGV2IFwKKyIKIAogRklMRVNfJHtQTn0tZGV2ID0gIlwKICAgICAke2djY2xpYmRpcn0vJHtUQVJHRVRfU1lTfS8ke0JJTlZ9L2xpYioke1NPTElCU0RFVn0gXApAQCAtNzAsMTAgKzczLDE5IEBACiAgICAgJHtiaW5kaXJ9L2c3NyBcCiAgICAgJHtiaW5kaXJ9L2Y3NyBcCiAiCitSUkVDT01NRU5EU19nNzcgPSAiXAorICAgIGxpYmcyYyBcCisgICAgbGliZzJjLWRldiBcCisiCisKIEZJTEVTX2dmb3J0cmFuID0gIlwKICAgICAke2JpbmRpcn0vJHtUQVJHRVRfUFJFRklYfWdmb3J0cmFuIFwKICAgICAke2xpYmV4ZWNkaXJ9L2djYy8ke1RBUkdFVF9TWVN9LyR7QklOVn0vZjk1MSBcCiAiCitSUkVDT01NRU5EU19nZm9ydHJhbiA9ICJcCisgICAgbGlicXVhZG1hdGggXAorICAgIGxpYnF1YWRtYXRoLWRldiBcCisiCiBGSUxFU19nZm9ydHJhbi1zeW1saW5rcyA9ICJcCiAgICAgJHtiaW5kaXJ9L2dmb3J0cmFuIFwKICAgICAke2JpbmRpcn0vZjk1IgpAQCAtOTksNiArMTExLDEyIEBACiAgICAgJHtiaW5kaXJ9L2MrKyBcCiAgICAgJHtiaW5kaXJ9L2crKyBcCiAiCitSUkVDT01NRU5EU19nKysgPSAiXAorICAgIGxpYnN0ZGMrKyBcCisgICAgbGlic3RkYysrLWRldiBcCisgICAgbGliYXRvbWljIFwKKyAgICBsaWJhdG9taWMtZGV2IFwKKyIKIAogRklMRVNfJHtQTn0tZG9jID0gIlwKICAgICAke2luZm9kaXJ9IFwKQEAgLTIwNSw2ICsyMjMsNCBAQAogIyBhbmQgYnVpbGRzIHRyYWNrIGZpbGUgZGVwZW5kZW5jaWVzIChlLmcuIHBlcmwgYW5kIGl0cyBtYWtlZGVwZW5kcyBjb2RlKS4KICMgRm9yIGRldGVybWluaXNtIHdlIGRvbid0IGluc3RhbGwgdGhpcyBldmVyIGFuZCByZWx5IG9uIHRoZSBjb3B5IGZyb20gZ2NjLWNyb3NzLgogIyBbWU9DVE8gIzcyODddCi1zeXNyb290X3N0YWdlX2RpcnNfYXBwZW5kICgpIHsKLQlybSAtcmYgJHRvJHtsaWJkaXJ9L2djYwotfQorU1lTUk9PVF9ESVJTX0JMQUNLTElTVCArPSAiJHtsaWJkaXJ9L2djYyIKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djY180LjkuYmIgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2NfNC45LmJiCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhOWRjNjEyLi4wMDAwMDAwCi0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djY180LjkuYmIKKysrIC9kZXYvbnVsbApAQCAtMSwxMyArMCwwIEBACi1yZXF1aXJlIHJlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy0ke1BWfS5pbmMKLXJlcXVpcmUgZ2NjLXRhcmdldC5pbmMKLQotIyBodHRwOi8vZXJyb3JzLnlvY3RvcHJvamVjdC5vcmcvRXJyb3JzL0RldGFpbHMvMjA0OTcvCi1BUk1fSU5TVFJVQ1RJT05fU0VUX2FybXY0ID0gImFybSIKLUFSTV9JTlNUUlVDVElPTl9TRVRfYXJtdjUgPSAiYXJtIgotCi1CQkNMQVNTRVhURU5EID0gIm5hdGl2ZXNkayIKLQotI1NZU1RFTUhFQURFUlNfY2xhc3MtbmF0aXZlc2RrID0gIiR7QCcke3RhcmdldF9pbmNsdWRlZGlyfScucmVwbGFjZShkLmdldFZhcignU0RLUEFUSCcsIFRydWUpLCclcicpfSIKLSNTWVNURU1MSUJTX2NsYXNzLW5hdGl2ZXNkayA9ICIke0AnJHt0YXJnZXRfYmFzZV9saWJkaXJ9Jy5yZXBsYWNlKGQuZ2V0VmFyKCdTREtQQVRIJywgVHJ1ZSksJyVyJyl9LyIKLSNTWVNURU1MSUJTMV9jbGFzcy1uYXRpdmVzZGsgPSAiJHtAJyR7dGFyZ2V0X2xpYmRpcn0nLnJlcGxhY2UoZC5nZXRWYXIoJ1NES1BBVEgnLCBUcnVlKSwnJXInKX0vIgotCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2NfNS4zLmJiIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjXzUuNC5iYgpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjXzUuMy5iYgpyZW5hbWUgdG8gaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjXzUuNC5iYgpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjXzUuMy5iYiBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djY182LjIuYmIKc2ltaWxhcml0eSBpbmRleCAxMDAlCmNvcHkgZnJvbSBpbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2NfNS4zLmJiCmNvcHkgdG8gaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjXzYuMi5iYgpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvbGliZ2NjLWNvbW1vbi5pbmMgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9saWJnY2MtY29tbW9uLmluYwppbmRleCBkYWUwN2U5Li44YTEzZjU0IDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9saWJnY2MtY29tbW9uLmluYworKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9saWJnY2MtY29tbW9uLmluYwpAQCAtMSw2ICsxLDYgQEAKIEJQTiA9ICJsaWJnY2MiCiAKLXJlcXVpcmUgZ2NjLXNoYXJlZC1zb3VyY2UuaW5jCityZXF1aXJlIGdjYy1jb25maWd1cmUtY29tbW9uLmluYwogCiBJTkhJQklUX0RFRkFVTFRfREVQUyA9ICIxIgogCkBAIC0xMTEsOSArMTExLDE1IEBACiAgICAgICAgIGlmIG5vdCB0dW5lX2JpdG5lc3M6CiAgICAgICAgICAgICB0dW5lX2JpdG5lc3MgPSAnMzInICMgL2xpYiA9PiAzMmJpdCBsaWIKIAorICAgICAgICB0dW5lX2FiaWV4dGVuc2lvbiA9IHR1bmVfcGFyYW1ldGVyc1snYWJpZXh0ZW5zaW9uJ10KKyAgICAgICAgaWYgdHVuZV9hYmlleHRlbnNpb246CisgICAgICAgICAgICBsaWJjZXh0ZW5zaW9uID0gJy1nbnUnICsgdHVuZV9hYmlleHRlbnNpb24KKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGxpYmNleHRlbnNpb24gPSAnJworCiAgICAgICAgIHNyYyA9ICcuLi8uLi8uLi8nICsgdHVuZV9iYXNlbGliICsgJy8nICsgXAogICAgICAgICAgICAgdHVuZV9hcmNoICsgZC5nZXRWYXIoJ1RBUkdFVF9WRU5ET1InLCBUcnVlKSArICdtbCcgKyBtbCArIFwKLSAgICAgICAgICAgICctJyArIGQuZ2V0VmFyKCdUQVJHRVRfT1MnLCBUcnVlKSArICcvJyArIGJpbnYgKyAnLycKKyAgICAgICAgICAgICctJyArIGQuZ2V0VmFyKCdUQVJHRVRfT1MnLCBUcnVlKSArIGxpYmNleHRlbnNpb24gKyAgJy8nICsgYmludiArICcvJwogCiAgICAgICAgIGRlc3QgPSBkLmdldFZhcignRCcsIFRydWUpICsgZC5nZXRWYXIoJ2xpYmRpcicsIFRydWUpICsgJy8nICsgXAogICAgICAgICAgICAgZC5nZXRWYXIoJ1RBUkdFVF9TWVMnLCBUcnVlKSArICcvJyArIGJpbnYgKyAnLycgKyB0dW5lX2JpdG5lc3MKQEAgLTEyMywxNSArMTI5LDE4IEBACiAgICAgICAgIG9zLnN5bWxpbmsoc3JjLCBkZXN0KQogfQogCi1kZWYgZ2V0X29yaWdpbmFsX3ZlbmRvcm9zKGQpOgotICAgIHZlbmRvcm9zID0gZC5leHBhbmQoJyR7VEFSR0VUX1ZFTkRPUn0tJHtUQVJHRVRfT1N9JykKK2RlZiBnZXRfb3JpZ2luYWxfb3MoZCk6CisgICAgdmVuZG9yb3MgPSBkLmV4cGFuZCgnJHtUQVJHRVRfQVJDSH0ke09SSUdfVEFSR0VUX1ZFTkRPUn0tJHtUQVJHRVRfT1N9JykKICAgICBmb3Igc3VmZml4IGluIFtkLmdldFZhcignQUJJRVhURU5TSU9OJywgVHJ1ZSksIGQuZ2V0VmFyKCdMSUJDRVhURU5TSU9OJywgVHJ1ZSldOgogICAgICAgICBpZiBzdWZmaXggYW5kIHZlbmRvcm9zLmVuZHN3aXRoKHN1ZmZpeCk6CiAgICAgICAgICAgICB2ZW5kb3JvcyA9IHZlbmRvcm9zWzotbGVuKHN1ZmZpeCldCisgICAgIyBBcm0gbXVzdCB1c2UgbGludXgtZ251ZWFiaSBub3QgbGludXggYXMgb25seSB0aGUgZm9ybWVyIGlzIGFjY2VwdGVkIGJ5IGdjYworICAgIGlmIHZlbmRvcm9zLnN0YXJ0c3dpdGgoImFybS0iKSBhbmQgbm90IHZlbmRvcm9zLmVuZHN3aXRoKCItZ251ZWFiaSIpOgorICAgICAgICB2ZW5kb3JvcyA9IHZlbmRvcm9zICsgIi1nbnVlYWJpIgogICAgIHJldHVybiB2ZW5kb3JvcwogCi1PUklHX1RBUkdFVF9WRU5ET1JPUyA6PSAiJHtAZ2V0X29yaWdpbmFsX3ZlbmRvcm9zKGQpfSIKLUJBU0VUQVJHRVRfU1lTID0gIiR7VEFSR0VUX0FSQ0h9JHtPUklHX1RBUkdFVF9WRU5ET1JPU30iCitPUklHX1RBUkdFVF9WRU5ET1IgOj0gIiR7VEFSR0VUX1ZFTkRPUn0iCitCQVNFVEFSR0VUX1NZUyA9ICIke0BnZXRfb3JpZ2luYWxfb3MoZCl9IgogCiBhZGR0YXNrIGV4dHJhX3N5bWxpbmtzIGFmdGVyIGRvX211bHRpbGliX2luc3RhbGwgYmVmb3JlIGRvX3BhY2thZ2UgZG9fcG9wdWxhdGVfc3lzcm9vdAogZmFrZXJvb3QgcHl0aG9uIGRvX2V4dHJhX3N5bWxpbmtzKCkgewpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvbGliZ2NjLWluaXRpYWwuaW5jIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvbGliZ2NjLWluaXRpYWwuaW5jCmluZGV4IDU5ZThhNjIuLjY4N2E4YTAgMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2xpYmdjYy1pbml0aWFsLmluYworKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9saWJnY2MtaW5pdGlhbC5pbmMKQEAgLTUsNyArNSw3IEBACiBMSUNFTlNFID0gIkdQTC0zLjAtd2l0aC1HQ0MtZXhjZXB0aW9uIgogCiBTVEFHSU5HQ0MgPSAiZ2NjLWNyb3NzLWluaXRpYWwtJHtUQVJHRVRfQVJDSH0iCi1TVEFHSU5HQ0NfY2xhc3MtbmF0aXZlc2RrID0gImdjYy1jcm9zc3Nkay1pbml0aWFsLSR7VEFSR0VUX0FSQ0h9IgorU1RBR0lOR0NDX2NsYXNzLW5hdGl2ZXNkayA9ICJnY2MtY3Jvc3NzZGstaW5pdGlhbC0ke1NES19TWVN9IgogUEFUSF9wcmVwZW5kID0gIiR7U1RBR0lOR19CSU5ESVJfVE9PTENIQUlOfS4ke1NUQUdJTkdDQ306IgogCiBQQUNLQUdFUyA9ICIiCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9saWJnY2MtaW5pdGlhbF81LjMuYmIgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9saWJnY2MtaW5pdGlhbF81LjMuYmIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDE5ZjI1M2YuLjAwMDAwMDAKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvbGliZ2NjLWluaXRpYWxfNS4zLmJiCisrKyAvZGV2L251bGwKQEAgLTEsMiArMCwwIEBACi1yZXF1aXJlIHJlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy0ke1BWfS5pbmMKLXJlcXVpcmUgbGliZ2NjLWluaXRpYWwuaW5jCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9saWJnY2MtaW5pdGlhbF80LjkuYmIgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9saWJnY2MtaW5pdGlhbF81LjQuYmIKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2xpYmdjYy1pbml0aWFsXzQuOS5iYgpyZW5hbWUgdG8gaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvbGliZ2NjLWluaXRpYWxfNS40LmJiCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9saWJnY2MtaW5pdGlhbF80LjkuYmIgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9saWJnY2MtaW5pdGlhbF82LjIuYmIKc2ltaWxhcml0eSBpbmRleCAxMDAlCmNvcHkgZnJvbSBpbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9saWJnY2MtaW5pdGlhbF80LjkuYmIKY29weSB0byBpbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9saWJnY2MtaW5pdGlhbF82LjIuYmIKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2xpYmdjYy5pbmMgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9saWJnY2MuaW5jCmluZGV4IDY4Mzc3ODYuLjQ3NzAzOTQgMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2xpYmdjYy5pbmMKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvbGliZ2NjLmluYwpAQCAtMiw2ICsyLDE3IEBACiAKIERFUEVORFMgPSAidmlydHVhbC8ke1RBUkdFVF9QUkVGSVh9Z2NjIHZpcnR1YWwvJHtUQVJHRVRfUFJFRklYfWcrKyIKIAorZG9faW5zdGFsbF9hcHBlbmRfY2xhc3MtdGFyZ2V0ICgpIHsKKwlpZiBbICIke1RDTElCQ30iICE9ICJnbGliYyIgXTsgdGhlbgorCQljYXNlICIke1RBUkdFVF9PU30iIGluCisJCQkibGludXgtbXVzbCIgfCAibGludXgtdWNsaWJjIiB8ICJsaW51eC0qc3BlIikgZXh0cmFfdGFyZ2V0X29zPSJsaW51eCI7OworCQkJImxpbnV4LW11c2xlYWJpIiB8ICJsaW51eC11Y2xpYmNlYWJpIikgZXh0cmFfdGFyZ2V0X29zPSJsaW51eC1nbnVlYWJpIjs7CisJCQkqKSBleHRyYV90YXJnZXRfb3M9ImxpbnV4Ijs7CisJCWVzYWMKKwkJbG4gLXMgJHtUQVJHRVRfU1lTfSAke0R9JHtsaWJkaXJ9LyR7VEFSR0VUX0FSQ0h9JHtUQVJHRVRfVkVORE9SfS0kZXh0cmFfdGFyZ2V0X29zCisJZmkKK30KKwogUEFDS0FHRVMgPSAiXAogICAgICR7UE59IFwKICAgICAke1BOfS1kZXYgXApAQCAtMTksNiArMzAsNyBAQAogICAgICR7YmFzZV9saWJkaXJ9L2xpYmdjYyouc28gXAogICAgICR7QGJhc2VfY29uZGl0aW9uYWwoJ0JBU0VUQVJHRVRfU1lTJywgJyR7VEFSR0VUX1NZU30nLCAnJywgJyR7bGliZGlyfS8ke0JBU0VUQVJHRVRfU1lTfScsIGQpfSBcCiAgICAgJHtsaWJkaXJ9LyR7VEFSR0VUX1NZU30vJHtCSU5WfSogXAorICAgICR7bGliZGlyfS8ke1RBUkdFVF9BUkNIfSR7VEFSR0VUX1ZFTkRPUn0qIFwKICIKIAogTElCR0NDQlVJTERUUkVFTkFNRSA9ICJnY2MtYnVpbGQtaW50ZXJuYWwtIgpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvbGliZ2NjXzUuMy5iYiBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2xpYmdjY181LjMuYmIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGE1MTUyZjIuLjAwMDAwMDAKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvbGliZ2NjXzUuMy5iYgorKysgL2Rldi9udWxsCkBAIC0xLDIgKzAsMCBAQAotcmVxdWlyZSByZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtJHtQVn0uaW5jCi1yZXF1aXJlIGxpYmdjYy5pbmMKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2xpYmdjY180LjkuYmIgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9saWJnY2NfNS40LmJiCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9saWJnY2NfNC45LmJiCnJlbmFtZSB0byBpbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9saWJnY2NfNS40LmJiCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9saWJnY2NfNC45LmJiIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvbGliZ2NjXzYuMi5iYgpzaW1pbGFyaXR5IGluZGV4IDEwMCUKY29weSBmcm9tIGltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2xpYmdjY180LjkuYmIKY29weSB0byBpbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9saWJnY2NfNi4yLmJiCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9saWJnZm9ydHJhbl81LjMuYmIgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9saWJnZm9ydHJhbl81LjMuYmIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDcxZGQ4YjQuLjAwMDAwMDAKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvbGliZ2ZvcnRyYW5fNS4zLmJiCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi1yZXF1aXJlIHJlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy0ke1BWfS5pbmMKLXJlcXVpcmUgbGliZ2ZvcnRyYW4uaW5jCi0KZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2xpYmdmb3J0cmFuXzQuOS5iYiBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2xpYmdmb3J0cmFuXzUuNC5iYgpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvbGliZ2ZvcnRyYW5fNC45LmJiCnJlbmFtZSB0byBpbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9saWJnZm9ydHJhbl81LjQuYmIKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2xpYmdmb3J0cmFuXzQuOS5iYiBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2xpYmdmb3J0cmFuXzYuMi5iYgpzaW1pbGFyaXR5IGluZGV4IDEwMCUKY29weSBmcm9tIGltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2xpYmdmb3J0cmFuXzQuOS5iYgpjb3B5IHRvIGltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2xpYmdmb3J0cmFuXzYuMi5iYgpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nZGIvZ2RiLTcuMTAuMS5pbmMgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2dkYi9nZGItNy4xMS5pbmMKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2RiL2dkYi03LjEwLjEuaW5jCnJlbmFtZSB0byBpbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2dkYi9nZGItNy4xMS5pbmMKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2RiL2dkYi1jb21tb24uaW5jIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nZGIvZ2RiLWNvbW1vbi5pbmMKaW5kZXggMGQyOGVlNC4uMDkyMzE0MyAxMDA2NDQKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nZGIvZ2RiLWNvbW1vbi5pbmMKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nZGIvZ2RiLWNvbW1vbi5pbmMKQEAgLTIsNyArMiw3IEBACiBIT01FUEFHRSA9ICJodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvZ2RiLyIKIExJQ0VOU0UgPSAiR1BMdjMrIgogU0VDVElPTiA9ICJkZXZlbCIKLURFUEVORFMgPSAiZXhwYXQgemxpYiBuY3Vyc2VzICR7TFRUTkdVU1R9IgorREVQRU5EUyA9ICJleHBhdCB6bGliIG5jdXJzZXMgdmlydHVhbC9saWJpY29udiAke0xUVE5HVVNUfSIKIAogTFRUTkdVU1QgPSAibHR0bmctdXN0IgogTFRUTkdVU1RfYWFyY2g2NCA9ICIiCkBAIC0xNiw4ICsxNiw2IEBACiBMVFROR1VTVF9zaDQgPSAiIgogTFRUTkdVU1RfbGliYy1tdXNsID0gIiIKIAotSU5DX1BSID0gInIwIgotCiBMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT01OTUzMGJkZjMzNjU5YjI5ZTczZDRhZGI5ZjlmNjU1MiBcCiAJCWZpbGU6Ly9DT1BZSU5HLkxJQjttZDU9OWY2MDRkOGE0ZjhlNzRmNGY1MTQwODQ1YTIxYjY2NzQgXAogCQlmaWxlOi8vQ09QWUlORzM7bWQ1PWQzMjIzOWJjYjY3MzQ2M2FiODc0ZTgwZDQ3ZmFlNTA0IFwKQEAgLTI1LDggKzIzLDI1IEBACiAKIGluaGVyaXQgYXV0b3Rvb2xzIHRleGluZm8KIAotU1JDX1VSSSA9ICIke0dOVV9NSVJST1J9L2dkYi9nZGItJHtQVn0udGFyLmd6IFwKLSAgICAgICAgICAiCitTUkNSRVYgPSAiMWE5ODJiNjg5Y2U0ZTIwNTIzYmRmNjllNDdmZGQ1NzRjNGY2MzkzNCIKKworU1JDX1VSSSA9ICJnaXQ6Ly9zb3VyY2V3YXJlLm9yZy9naXQvYmludXRpbHMtZ2RiLmdpdDticmFuY2g9Z2RiLTcuMTEtYnJhbmNoIFwKKyAgICAgICAgICAgZmlsZTovLzAwMDEtaW5jbHVkZS1zeXMtdHlwZXMuaC1mb3ItbW9kZV90LnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovLzAwMDItbWFrZS1tYW4taW5zdGFsbC1yZWxhdGl2ZS10by1ERVNURElSLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovLzAwMDMtbWlwcy1saW51eC1uYXQtRGVmaW5lLV9BQklPMzItaWYtbm90LWRlZmluZWQucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vMDAwNC1wcGMtcHRyYWNlLURlZmluZS1wdF9yZWdzLXVhcGlfcHRfcmVncy1vbi1HTElCQy1zeXN0LnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovLzAwMDUtQWRkLXN1cHBvcnQtZm9yLVJlbmVzYXMtU0gtc2g0LWFyY2hpdGVjdHVyZS5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly8wMDA2LURvbnQtZGlzYWJsZS1saWJyZWFkbGluZS5hLXdoZW4tdXNpbmctZGlzYWJsZS1zdGF0aWMucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vMDAwNy11c2UtYXNtLXNnaWRlZnMuaC5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly8wMDA4LVVzZS1leG9ydGVkLWRlZmluaXRpb25zLW9mLVNJR1JUTUlOLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovLzAwMDktQ2hhbmdlLW9yZGVyLW9mLUNGTEFHUy5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly8wMDEwLXJlc29sdmUtcmVzdHJpY3Qta2V5d29yZC1jb25mbGljdC5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly8wMDExLWF2eF9tcHgucGF0Y2ggXAorIgorCitVUFNUUkVBTV9DSEVDS19HSVRUQUdSRUdFWCA9ICJnZGJcLSg/UDxwdmVyPi4rKVwtcmVsZWFzZSIKKworUyA9ICIke1dPUktESVJ9L2dpdCIKIAogQiA9ICIke1dPUktESVJ9L2J1aWxkLSR7VEFSR0VUX1NZU30iCiAKQEAgLTQwLDEyICs1NSwxNSBAQAogICAgICAgICAgICAgICAgICR7R0RCUFJPUFJFRklYfSAke0VYUEFUfSBcCiAgICAgICAgICAgICAgICAgJHtAYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsICdtdWx0aWFyY2gnLCAnLS1lbmFibGUtNjQtYml0LWJmZCcsICcnLCBkKX0gXAogICAgICAgICAgICAgICAgIC0tZGlzYWJsZS1ycGF0aCBcCi0gICAgICAgICAgICAgICAiCisgICAgICAgICAgICAgICAgLS1kaXNhYmxlLWdhcyAtLWRpc2FibGUtYmludXRpbHMgXAorICAgICAgICAgICAgICAgIC0tZGlzYWJsZS1sZCAtLWRpc2FibGUtZ29sZCBcCisgICAgICAgICAgICAgICAgLS1kaXNhYmxlLWdwcm9mIFwKKyIKIAogUEFDS0FHRUNPTkZJRyA/Pz0gInJlYWRsaW5lIgogIyBVc2UgLS13aXRob3V0LXN5c3RlbS1yZWFkbGluZSB0byBjb21waWxlIHdpdGggcmVhZGxpbmUgNS4KIFBBQ0tBR0VDT05GSUdbcmVhZGxpbmVdID0gIi0td2l0aC1zeXN0ZW0tcmVhZGxpbmUsLS13aXRob3V0LXN5c3RlbS1yZWFkbGluZSxyZWFkbGluZSIKLVBBQ0tBR0VDT05GSUdbcHl0aG9uXSA9ICItLXdpdGgtcHl0aG9uPSR7V09SS0RJUn0vcHl0aG9uLC0td2l0aG91dC1weXRob24scHl0aG9uLHB5dGhvbiBweXRob24tY29kZWNzIgorUEFDS0FHRUNPTkZJR1tweXRob25dID0gIi0td2l0aC1weXRob249JHtXT1JLRElSfS9weXRob24sLS13aXRob3V0LXB5dGhvbixweXRob24zLHB5dGhvbjMgcHl0aG9uMy1jb2RlY3MiCiBQQUNLQUdFQ09ORklHW2JhYmVsdHJhY2VdID0gIi0td2l0aC1iYWJlbHRyYWNlLC0td2l0aG91dC1iYWJlbHRyYWNlLGJhYmVsdHJhY2UiCiAKIEdEQlBST1BSRUZJWCA9ICItLXByb2dyYW0tcHJlZml4PScnIgpAQCAtNjksNCArODcsMyBAQAogUlJFQ09NTUVORFNfZ2RiX2FwcGVuZF9saW51eC1nbnVlYWJpID0gIiBnbGliYy10aHJlYWQtZGIgIgogUlJFQ09NTUVORFNfZ2Ric2VydmVyX2FwcGVuZF9saW51eCA9ICIgZ2xpYmMtdGhyZWFkLWRiICIKIFJSRUNPTU1FTkRTX2dkYnNlcnZlcl9hcHBlbmRfbGludXgtZ251ZWFiaSA9ICIgZ2xpYmMtdGhyZWFkLWRiICIKLQpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nZGIvZ2RiLWNyb3NzLWNhbmFkaWFuLmluYyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2RiL2dkYi1jcm9zcy1jYW5hZGlhbi5pbmMKaW5kZXggNmU0MmFmMS4uZTUzMDgxZCAxMDA2NDQKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nZGIvZ2RiLWNyb3NzLWNhbmFkaWFuLmluYworKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2dkYi9nZGItY3Jvc3MtY2FuYWRpYW4uaW5jCkBAIC0xLDUgKzEsNSBAQAogaW5oZXJpdCBjcm9zcy1jYW5hZGlhbgotaW5oZXJpdCBweXRob24tZGlyCitpbmhlcml0IHB5dGhvbjMtZGlyCiAKIFNVTU1BUlkgPSAiR05VIGRlYnVnZ2VyIChjcm9zcy1jYW5hZGlhbiBnZGIgZm9yICR7VEFSR0VUX0FSQ0h9IHRhcmdldCkiCiBQTiA9ICJnZGItY3Jvc3MtY2FuYWRpYW4tJHtUUkFOU0xBVEVEX1RBUkdFVF9BUkNIfSIKQEAgLTEyLDkgKzEyLDkgQEAKIAogIyBPdmVycmlkZXMgUEFDS0FHRUNPTkZJRyB2YXJpYWJsZXMgaW4gZ2RiLWNvbW1vbi5pbmMKIFBBQ0tBR0VDT05GSUcgPz89ICJweXRob24gcmVhZGxpbmUiCi1QQUNLQUdFQ09ORklHW3B5dGhvbl0gPSAiLS13aXRoLXB5dGhvbj0ke1dPUktESVJ9L3B5dGhvbiwtLXdpdGhvdXQtcHl0aG9uLG5hdGl2ZXNkay1weXRob24sIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICBuYXRpdmVzZGstcHl0aG9uLWNvcmUgbmF0aXZlc2RrLXB5dGhvbi1sYW5nIG5hdGl2ZXNkay1weXRob24tcmUgXAotICAgICAgICAgICAgICAgICAgICAgICAgIG5hdGl2ZXNkay1weXRob24tY29kZWNzIG5hdGl2ZXNkay1weXRob24tbmV0Y2xpZW50IgorUEFDS0FHRUNPTkZJR1tweXRob25dID0gIi0td2l0aC1weXRob249JHtXT1JLRElSfS9weXRob24sLS13aXRob3V0LXB5dGhvbixuYXRpdmVzZGstcHl0aG9uMywgXAorICAgICAgICAgICAgICAgICAgICAgICAgIG5hdGl2ZXNkay1weXRob24zLWNvcmUgbmF0aXZlc2RrLXB5dGhvbjMtbGFuZyBuYXRpdmVzZGstcHl0aG9uMy1yZSBcCisgICAgICAgICAgICAgICAgICAgICAgICAgbmF0aXZlc2RrLXB5dGhvbjMtY29kZWNzIG5hdGl2ZXNkay1weXRob24zLW5ldGNsaWVudCIKIFBBQ0tBR0VDT05GSUdbcmVhZGxpbmVdID0gIi0td2l0aC1zeXN0ZW0tcmVhZGxpbmUsLS13aXRob3V0LXN5c3RlbS1yZWFkbGluZSxuYXRpdmVzZGstcmVhZGxpbmUiCiAKIFNTVEFURV9EVVBXSElURUxJU1QgKz0gIiR7U1RBR0lOR19EQVRBRElSfS9nZGIiCkBAIC0yMyw4ICsyMyw4IEBACiBjYXQgPiAke1dPUktESVJ9L3B5dGhvbiA8PCBFT0YKICMhIC9iaW4vc2gKIGNhc2UgIlwkMiIgaW4KLSAgICAgICAgLS1pbmNsdWRlcykgZWNobyAiLUkke1NUQUdJTkdfSU5DRElSfS8ke1BZVEhPTl9ESVJ9LyIgOzsKLSAgICAgICAgLS1sZGZsYWdzKSBlY2hvICItV2wsLXJwYXRoLWxpbmssJHtTVEFHSU5HX0xJQkRJUn0vLi4gLVdsLC1ycGF0aCwke2xpYmRpcn0vLi4gLWxwdGhyZWFkIC1sZGwgLWx1dGlsIC1sbSAtbHB5dGhvbiR7UFlUSE9OX0JBU0VWRVJTSU9OfSIgOzsKKyAgICAgICAgLS1pbmNsdWRlcykgZWNobyAiLUkke1NUQUdJTkdfSU5DRElSfS8ke1BZVEhPTl9ESVJ9JHtQWVRIT05fQUJJfS8iIDs7CisgICAgICAgIC0tbGRmbGFncykgZWNobyAiLVdsLC1ycGF0aC1saW5rLCR7U1RBR0lOR19MSUJESVJ9Ly4uIC1XbCwtcnBhdGgsJHtsaWJkaXJ9Ly4uIC1scHRocmVhZCAtbGRsIC1sdXRpbCAtbG0gLWxweXRob24ke1BZVEhPTl9CQVNFVkVSU0lPTn0ke1BZVEhPTl9BQkl9IiA7OwogICAgICAgICAtLWV4ZWMtcHJlZml4KSBlY2hvICIke2V4ZWNfcHJlZml4fSIgOzsKICAgICAgICAgKikgZXhpdCAxIDs7CiBlc2FjCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2dkYi9nZGItY3Jvc3MtY2FuYWRpYW5fNy4xMC4xLmJiIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nZGIvZ2RiLWNyb3NzLWNhbmFkaWFuXzcuMTEuYmIKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2RiL2dkYi1jcm9zcy1jYW5hZGlhbl83LjEwLjEuYmIKcmVuYW1lIHRvIGltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2RiL2dkYi1jcm9zcy1jYW5hZGlhbl83LjExLmJiCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2dkYi9nZGItY3Jvc3MuaW5jIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nZGIvZ2RiLWNyb3NzLmluYwppbmRleCAyNDY4ZDIzLi41ZmE3YzMzIDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2dkYi9nZGItY3Jvc3MuaW5jCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2RiL2dkYi1jcm9zcy5pbmMKQEAgLTIsMTYgKzIsMTQgQEAKIAogREVQRU5EUyA9ICJleHBhdC1uYXRpdmUgbmN1cnNlcy1uYXRpdmUiCiAKLWluaGVyaXQgcHl0aG9ubmF0aXZlCitpbmhlcml0IHB5dGhvbjNuYXRpdmUKIAogIyBPdmVycmlkZXMgUEFDS0FHRUNPTkZJRyB2YXJpYWJsZXMgaW4gZ2RiLWNvbW1vbi5pbmMKIFBBQ0tBR0VDT05GSUcgPz89ICJweXRob24gcmVhZGxpbmUiCi1QQUNLQUdFQ09ORklHW3B5dGhvbl0gPSAiLS13aXRoLXB5dGhvbj0ke1NUQUdJTkdfQklORElSX05BVElWRX0vcHl0aG9uLW5hdGl2ZS9weXRob24sLS13aXRob3V0LXB5dGhvbixweXRob24tbmF0aXZlIgorUEFDS0FHRUNPTkZJR1tweXRob25dID0gIi0td2l0aC1weXRob249JHtQWVRIT059LC0td2l0aG91dC1weXRob24scHl0aG9uMy1uYXRpdmUiCiBQQUNLQUdFQ09ORklHW3JlYWRsaW5lXSA9ICItLXdpdGgtc3lzdGVtLXJlYWRsaW5lLC0td2l0aG91dC1zeXN0ZW0tcmVhZGxpbmUscmVhZGxpbmUtbmF0aXZlIgogCiBkb19jb21waWxlX3ByZXBlbmQoKSB7Ci0gICAgZXhwb3J0IEJVSUxEX1NZUz0iJHtCVUlMRF9TWVN9IgotICAgIGV4cG9ydCBIT1NUX1NZUz0iJHtIT1NUX1NZU30iCiAgICAgZXhwb3J0IFNUQUdJTkdfTElCRElSPSIke1NUQUdJTkdfTElCRElSX05BVElWRX0iCiAgICAgZXhwb3J0IFNUQUdJTkdfSU5DRElSPSIke1NUQUdJTkdfSU5DRElSX05BVElWRX0iCiB9CmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2dkYi9nZGItY3Jvc3NfNy4xMC4xLmJiIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nZGIvZ2RiLWNyb3NzXzcuMTAuMS5iYgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggM2E5NWNmYi4uMDAwMDAwMAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2dkYi9nZGItY3Jvc3NfNy4xMC4xLmJiCisrKyAvZGV2L251bGwKQEAgLTEsNCArMCwwIEBACi1yZXF1aXJlIGdkYi1jcm9zcy5pbmMKLXJlcXVpcmUgZ2RiLSR7UFZ9LmluYwotCi1TUkNfVVJJICs9ICJmaWxlOi8vMDAwMS1tYWtlLW1hbi1pbnN0YWxsLXJlbGF0aXZlLXRvLURFU1RESVIucGF0Y2giCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2dkYi9nZGItY3Jvc3NfNy4xMS5iYiBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2RiL2dkYi1jcm9zc183LjExLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUwY2YxNTkKLS0tIC9kZXYvbnVsbAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2dkYi9nZGItY3Jvc3NfNy4xMS5iYgpAQCAtMCwwICsxLDIgQEAKK3JlcXVpcmUgZ2RiLWNyb3NzLmluYworcmVxdWlyZSBnZGItJHtQVn0uaW5jCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2dkYi9nZGIuaW5jIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nZGIvZ2RiLmluYwppbmRleCBkOWM4NjRkLi41MjExOWEwIDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2dkYi9nZGIuaW5jCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2RiL2dkYi5pbmMKQEAgLTIsMTQgKzIsNiBAQAogCiBpbmhlcml0IGdldHRleHQKIAotU1JDX1VSSSArPSAiZmlsZTovLzAwMDItQ2hhbmdlLW9yZGVyLW9mLUNGTEFHUy5wYXRjaCBcCi0gICAgICAgICAgICBmaWxlOi8vMDAwMy1BZGQtc3VwcG9ydC1mb3ItUmVuZXNhcy1TSC1zaDQtYXJjaGl0ZWN0dXJlLnBhdGNoIFwKLSAgICAgICAgICAgIGZpbGU6Ly8wMDAxLVVzZS1leHBvcnRlZC1kZWZpbml0aW9ucy1vZi1TSUdSVE1JTi5wYXRjaCBcCi0gICAgICAgICAgICBmaWxlOi8vMDAwMS1pbmNsdWRlLXN5cy10eXBlcy5oLWZvci1tb2RlX3QucGF0Y2ggXAotICAgICAgICAgICAgZmlsZTovLzAwMDEtdXNlLWFzbS1zZ2lkZWZzLmgucGF0Y2ggXAotICAgICAgICAgICAgZmlsZTovL2ZvcmNlLXJlYWRsaW5lLXN0YXRpYy5wYXRjaCBcCi0gICAgICAgICAgICBmaWxlOi8vMDAwMS1taXBzLWxpbnV4LW5hdC1EZWZpbmUtX0FCSU8zMi1pZi1ub3QtZGVmaW5lZC5wYXRjaCBcCi0gICAgICAgICAgICIKICNMREZMQUdTX2FwcGVuZCA9ICIgLXMiCiAjZXhwb3J0IENGTEFHU19hcHBlbmQ9IiAtTCR7U1RBR0lOR19MSUJESVJ9IgogCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2dkYi9nZGIvMDAwMS1Vc2UtZXhwb3J0ZWQtZGVmaW5pdGlvbnMtb2YtU0lHUlRNSU4ucGF0Y2ggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2dkYi9nZGIvMDAwMS1Vc2UtZXhwb3J0ZWQtZGVmaW5pdGlvbnMtb2YtU0lHUlRNSU4ucGF0Y2gKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDVmMGMwOTYuLjAwMDAwMDAKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nZGIvZ2RiLzAwMDEtVXNlLWV4cG9ydGVkLWRlZmluaXRpb25zLW9mLVNJR1JUTUlOLnBhdGNoCisrKyAvZGV2L251bGwKQEAgLTEsNTQgKzAsMCBAQAotRnJvbSAyZjk3ZTg5ZTllNGU1Nzk3ZDBkOTczZTFkMDVjMWY0NGM0NmI0OTEyIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQotRnJvbTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KLURhdGU6IEZyaSwgNSBKdW4gMjAxNSAyMDoyMTozOCAtMDcwMAotU3ViamVjdDogW1BBVENIXSBVc2UgZXhvcnRlZCBkZWZpbml0aW9ucyBvZiBTSUdSVE1JTgotCi1EZWZpbmUgV19TVE9QQ09ERSBpZiBub3QgZGVmaW5lZCBhbHJlYWR5Ci0KLV9fU0lHUlRNSU4gaXMgaW50ZXJuYWwgdG8gZ2xpYmMgYW5kIG90aGVyIGxpYmNzIGUuZy4gbXVzbAotbWF5IG5vdCBwcm92aWRlIHRoZW0KLQotRml4ZXMKLWh0dHBzOi8vc291cmNld2FyZS5vcmcvYnVnemlsbGEvc2hvd19idWcuY2dpP2lkPTEzMDEyCi0KLVNpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+Ci0tLS0KLVVwc3RyZWFtLVN0YXR1czogU3VibWl0dGVkCi0KLSBnZGIvbGludXgtbmF0LmMgICAgIHwgNCArKy0tCi0gZ2RiL25hdC9saW51eC1uYXQuaCB8IDQgKysrKwotIDIgZmlsZXMgY2hhbmdlZCwgNiBpbnNlcnRpb25zKCspLCAyIGRlbGV0aW9ucygtKQotCi1kaWZmIC0tZ2l0IGEvZ2RiL2xpbnV4LW5hdC5jIGIvZ2RiL2xpbnV4LW5hdC5jCi1pbmRleCAzOTZjMzBjLi41MDMyMGVlIDEwMDY0NAotLS0tIGEvZ2RiL2xpbnV4LW5hdC5jCi0rKysgYi9nZGIvbGludXgtbmF0LmMKLUBAIC00ODU2LDEwICs0ODU2LDEwIEBAIGxpbl90aHJlYWRfZ2V0X3RocmVhZF9zaWduYWxzIChzaWdzZXRfdCAqc2V0KQotICAgICAgZm9ydHVuYXRlbHkgdGhleSBkb24ndCBjaGFuZ2UhICAqLwotIAotICAgaWYgKHJlc3RhcnQgPT0gMCkKLS0gICAgcmVzdGFydCA9IF9fU0lHUlRNSU47Ci0rICAgIHJlc3RhcnQgPSBTSUdSVE1JTjsKLSAKLSAgIGlmIChjYW5jZWwgPT0gMCkKLS0gICAgY2FuY2VsID0gX19TSUdSVE1JTiArIDE7Ci0rICAgIGNhbmNlbCA9IFNJR1JUTUlOICsgMTsKLSAKLSAgIHNpZ2FkZHNldCAoc2V0LCByZXN0YXJ0KTsKLSAgIHNpZ2FkZHNldCAoc2V0LCBjYW5jZWwpOwotZGlmZiAtLWdpdCBhL2dkYi9uYXQvbGludXgtbmF0LmggYi9nZGIvbmF0L2xpbnV4LW5hdC5oCi1pbmRleCA4M2E2ZDkxLi5lZmJlMGZkIDEwMDY0NAotLS0tIGEvZ2RiL25hdC9saW51eC1uYXQuaAotKysrIGIvZ2RiL25hdC9saW51eC1uYXQuaAotQEAgLTI1LDQgKzI1LDggQEAKLSAgICBpbnN0ZWFkIFNJR1RSQVAgd2l0aCBiaXQgNyBzZXQuICAqLwotICNkZWZpbmUgU1lTQ0FMTF9TSUdUUkFQIChTSUdUUkFQIHwgMHg4MCkKLSAKLSsjaWZuZGVmIFdfU1RPUENPREUKLSsjZGVmaW5lIFdfU1RPUENPREUoc2lnKSAoKHNpZykgPDwgOCB8IDB4N2YpCi0rI2VuZGlmCi0rCi0gI2VuZGlmIC8qIExJTlVYX05BVF9IICovCi0tLSAKLTIuMS40Ci0KZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2RiL2dkYi8wMDAxLWluY2x1ZGUtc3lzLXR5cGVzLmgtZm9yLW1vZGVfdC5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2RiL2dkYi8wMDAxLWluY2x1ZGUtc3lzLXR5cGVzLmgtZm9yLW1vZGVfdC5wYXRjaAppbmRleCBhMDI5MmU0Li4wMDQyYzAwIDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2dkYi9nZGIvMDAwMS1pbmNsdWRlLXN5cy10eXBlcy5oLWZvci1tb2RlX3QucGF0Y2gKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nZGIvZ2RiLzAwMDEtaW5jbHVkZS1zeXMtdHlwZXMuaC1mb3ItbW9kZV90LnBhdGNoCkBAIC0xLDcgKzEsNyBAQAotRnJvbSBhY2JlZTRlZGFjYjgwYjVlZWFmZjI0ODA3MTJmZTk4ZTU2NDQzOTk3IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbSBmZGRkNzE3ODkxNTk2OGFjZjY4MDgxNDQxMWI4YjNjYjEzN2QwNTg3IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQogRnJvbTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KIERhdGU6IFR1ZSwgMTkgSmFuIDIwMTYgMTg6MTg6NTIgLTA4MDAKLVN1YmplY3Q6IFtQQVRDSF0gaW5jbHVkZSBzeXMvdHlwZXMuaCBmb3IgbW9kZV90CitTdWJqZWN0OiBbUEFUQ0ggMDEvMTBdIGluY2x1ZGUgc3lzL3R5cGVzLmggZm9yIG1vZGVfdAogCiBtb2RlX3QgaXMgdXNlZCBpbiB0YXJnZXQuaCwgc28gd2UgbmVlZCB0byBpbmNsdWRlIHN5cy90eXBlcy5oIHRvIGdldCB0aGUKIGRlZmludGlvbgpAQCAtMTQsMTAgKzE0LDEwIEBACiAgMSBmaWxlIGNoYW5nZWQsIDEgaW5zZXJ0aW9uKCspCiAKIGRpZmYgLS1naXQgYS9nZGIvZ2Ric2VydmVyL3RhcmdldC5oIGIvZ2RiL2dkYnNlcnZlci90YXJnZXQuaAotaW5kZXggOWE0MDg2Ny4uYWFlY2FiOSAxMDA2NDQKK2luZGV4IDVhZjIwNTEuLmY0MmM1MTAgMTAwNjQ0CiAtLS0gYS9nZGIvZ2Ric2VydmVyL3RhcmdldC5oCiArKysgYi9nZGIvZ2Ric2VydmVyL3RhcmdldC5oCi1AQCAtMjcsNiArMjcsNyBAQAorQEAgLTI4LDYgKzI4LDcgQEAKICAjaW5jbHVkZSAidGFyZ2V0L3dhaXRzdGF0dXMuaCIKICAjaW5jbHVkZSAibWVtLWJyZWFrLmgiCiAgI2luY2x1ZGUgImJ0cmFjZS1jb21tb24uaCIKQEAgLTI2LDUgKzI2LDUgQEAKICBzdHJ1Y3QgZW1pdF9vcHM7CiAgc3RydWN0IGJ1ZmZlcjsKIC0tIAotMi43LjAKKzIuOC4yCiAKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2RiL2dkYi8wMDAxLW1ha2UtbWFuLWluc3RhbGwtcmVsYXRpdmUtdG8tREVTVERJUi5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2RiL2dkYi8wMDAxLW1ha2UtbWFuLWluc3RhbGwtcmVsYXRpdmUtdG8tREVTVERJUi5wYXRjaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjk5NmMxOC4uMDAwMDAwMAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2dkYi9nZGIvMDAwMS1tYWtlLW1hbi1pbnN0YWxsLXJlbGF0aXZlLXRvLURFU1RESVIucGF0Y2gKKysrIC9kZXYvbnVsbApAQCAtMSwyOCArMCwwIEBACi1Gcm9tIDEyYjA1MDY5NTE0NjBjM2NjMzdkNzc1NDc4ZDAyNGRiM2Y5NWU5ZDggTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCi1Gcm9tOiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgotRGF0ZTogTW9uLCAyIE1hciAyMDE1IDAyOjI3OjU1ICswMDAwCi1TdWJqZWN0OiBbUEFUQ0ggMS8zXSBtYWtlIG1hbiBpbnN0YWxsIHJlbGF0aXZlIHRvIERFU1RESVIKLQotVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCi0KLVNpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+Ci0tLS0KLSBzaW0vY29tbW9uL01ha2VmaWxlLmluIHwgMiArLQotIDEgZmlsZSBjaGFuZ2VkLCAxIGluc2VydGlvbigrKSwgMSBkZWxldGlvbigtKQotCi1kaWZmIC0tZ2l0IGEvc2ltL2NvbW1vbi9NYWtlZmlsZS5pbiBiL3NpbS9jb21tb24vTWFrZWZpbGUuaW4KLWluZGV4IGQ0OWE5M2IuLjIxMjFjNDYgMTAwNjQ0Ci0tLS0gYS9zaW0vY29tbW9uL01ha2VmaWxlLmluCi0rKysgYi9zaW0vY29tbW9uL01ha2VmaWxlLmluCi1AQCAtMzUsNyArMzUsNyBAQCB0b29sZGlyID0gJChsaWJkaXIpLyQodGFyZ2V0X2FsaWFzKQotIGRhdGFyb290ZGlyID0gQGRhdGFyb290ZGlyQAotIGRhdGFkaXIgPSBAZGF0YWRpckAKLSBtYW5kaXIgPSBAbWFuZGlyQAotLW1hbjFkaXIgPSAkKG1hbmRpcikvbWFuMQotK21hbjFkaXIgPSAkKERFU1RESVIpJChtYW5kaXIpL21hbjEKLSBpbmZvZGlyID0gQGluZm9kaXJACi0gaW5jbHVkZWRpciA9IEBpbmNsdWRlZGlyQAotIAotLS0gCi0yLjEuNAotCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2dkYi9nZGIvMDAwMS1taXBzLWxpbnV4LW5hdC1EZWZpbmUtX0FCSU8zMi1pZi1ub3QtZGVmaW5lZC5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2RiL2dkYi8wMDAxLW1pcHMtbGludXgtbmF0LURlZmluZS1fQUJJTzMyLWlmLW5vdC1kZWZpbmVkLnBhdGNoCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzMTczOTUyLi4wMDAwMDAwCi0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2RiL2dkYi8wMDAxLW1pcHMtbGludXgtbmF0LURlZmluZS1fQUJJTzMyLWlmLW5vdC1kZWZpbmVkLnBhdGNoCisrKyAvZGV2L251bGwKQEAgLTEsMzcgKzAsMCBAQAotRnJvbSBlOTJmODkzMmVmNDg4ZGUyYTU2ZGI0Mjk5MTMxY2U2YTRlYjE3MGJkIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQotRnJvbTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KLURhdGU6IFdlZCwgMjMgTWFyIDIwMTYgMDY6MzA6MDkgKzAwMDAKLVN1YmplY3Q6IFtQQVRDSF0gbWlwcy1saW51eC1uYXQ6IERlZmluZSBfQUJJTzMyIGlmIG5vdCBkZWZpbmVkCi0KLVRoaXMgaGVscHMgYnVpbGRpbmcgZ2RiIG9uIG1pcHM2NCBvbiBtdXNsLCBzaW5jZQotbXVzbCBkb2VzIG5vdCBwcm92aWRlIHNnaWRlZnMuaCB0aGlzIGRlZmluZSBpcwotb25seSBkZWZpbmVkIHdoZW4gR0NDIGlzIHVzaW5nIG8zMiBBQkksIGluIHRoYXQKLWNhc2UgZ2NjIGVtaXRzIGl0IGFzIGJ1aWx0LWluIGRlZmluZSBhbmQgaGVuY2UKLWl0IHdvcmtzIG9rIGZvciBtaXBzMzIKLQotU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KLS0tLQotVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCi0KLSBnZGIvbWlwcy1saW51eC1uYXQuYyB8IDUgKysrKysKLSAxIGZpbGUgY2hhbmdlZCwgNSBpbnNlcnRpb25zKCspCi0KLWRpZmYgLS1naXQgYS9nZGIvbWlwcy1saW51eC1uYXQuYyBiL2dkYi9taXBzLWxpbnV4LW5hdC5jCi1pbmRleCBmZDVjNzA1Li43NTNmMjlkIDEwMDY0NAotLS0tIGEvZ2RiL21pcHMtbGludXgtbmF0LmMKLSsrKyBiL2dkYi9taXBzLWxpbnV4LW5hdC5jCi1AQCAtNDYsNiArNDYsMTEgQEAKLSAjZGVmaW5lIFBUUkFDRV9HRVRfVEhSRUFEX0FSRUEgMjUKLSAjZW5kaWYKLSAKLSsvKiBtdXNsIGRvZXMgbm90IGRlZmluZSBhbmQgcmVsaWVzIG9uIGNvbXBpbGVyIGJ1aWx0LWluIG1hY3JvcyBmb3IgaXQgICAqLwotKyNpZm5kZWYgX0FCSU8zMgotKyNkZWZpbmUgX0FCSU8zMiAxCi0rI2VuZGlmCi0rCi0gLyogQXNzdW1lIHRoYXQgd2UgaGF2ZSBQVFJBQ0VfR0VUUkVHUyBldCBhbC4gc3VwcG9ydC4gIElmIHdlIGRvIG5vdCwKLSAgICB3ZSdsbCBjbGVhciB0aGlzIGFuZCB1c2UgUFRSQUNFX1BFRUtVU0VSIGluc3RlYWQuICAqLwotIHN0YXRpYyBpbnQgaGF2ZV9wdHJhY2VfcmVnc2V0cyA9IDE7Ci0tLSAKLTEuOC4zLjEKLQpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nZGIvZ2RiLzAwMDEtdXNlLWFzbS1zZ2lkZWZzLmgucGF0Y2ggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2dkYi9nZGIvMDAwMS11c2UtYXNtLXNnaWRlZnMuaC5wYXRjaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZWFlYzM5MC4uMDAwMDAwMAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2dkYi9nZGIvMDAwMS11c2UtYXNtLXNnaWRlZnMuaC5wYXRjaAorKysgL2Rldi9udWxsCkBAIC0xLDM1ICswLDAgQEAKLUZyb20gNjc3YjViNTYxMzUxNDFjMGQyNTllMzcwYWFjZDBlMTFjODEwYWExNSBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKLUZyb206IEFuZHJlIE1jQ3VyZHkgPGFybWNjdXJkeUBnbWFpbC5jb20+Ci1EYXRlOiBGcmksIDUgRmViIDIwMTYgMTQ6MDA6MDAgLTA4MDAKLVN1YmplY3Q6IFtQQVRDSF0gdXNlIDxhc20vc2dpZGVmcy5oPgotCi1CdWlsZCBmaXggZm9yIE1JUFMgd2l0aCBtdXNsIGxpYmMKLQotVGhlIE1JUFMgc3BlY2lmaWMgaGVhZGVyIDxzZ2lkZWZzLmg+IGlzIHByb3ZpZGVkIGJ5IGdsaWJjIGFuZCB1Y2xpYmMKLWJ1dCBub3QgYnkgbXVzbC4gUmVnYXJkbGVzcyBvZiB0aGUgbGliYywgdGhlIGtlcm5lbCBoZWFkZXJzIHByb3ZpZGUKLTxhc20vc2dpZGVmcy5oPiB3aGljaCBwcm92aWRlcyB0aGUgc2FtZSBkZWZpbml0aW9ucywgc28gdXNlIHRoYXQKLWluc3RlYWQuCi0KLVVwc3RyZWFtLVN0YXR1czogUGVuZGluZwotCi1TaWduZWQtb2ZmLWJ5OiBBbmRyZSBNY0N1cmR5IDxhcm1jY3VyZHlAZ21haWwuY29tPgotLS0tCi0gZ2RiL21pcHMtbGludXgtbmF0LmMgfCAyICstCi0gMSBmaWxlIGNoYW5nZWQsIDEgaW5zZXJ0aW9uKCspLCAxIGRlbGV0aW9uKC0pCi0KLWRpZmYgLS1naXQgYS9nZGIvbWlwcy1saW51eC1uYXQuYyBiL2dkYi9taXBzLWxpbnV4LW5hdC5jCi1pbmRleCBhMzZiYjYzLi5mZDVjNzA1IDEwMDY0NAotLS0tIGEvZ2RiL21pcHMtbGludXgtbmF0LmMKLSsrKyBiL2dkYi9taXBzLWxpbnV4LW5hdC5jCi1AQCAtMzEsNyArMzEsNyBAQAotICNpbmNsdWRlICJnZGJfcHJvY19zZXJ2aWNlLmgiCi0gI2luY2x1ZGUgImdyZWdzZXQuaCIKLSAKLS0jaW5jbHVkZSA8c2dpZGVmcy5oPgotKyNpbmNsdWRlIDxhc20vc2dpZGVmcy5oPgotICNpbmNsdWRlIDxzeXMvcHRyYWNlLmg+Ci0gI2luY2x1ZGUgPGFzbS9wdHJhY2UuaD4KLSAKLS0tIAotMS45LjEKLQpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nZGIvZ2RiLzAwMDItQ2hhbmdlLW9yZGVyLW9mLUNGTEFHUy5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2RiL2dkYi8wMDAyLUNoYW5nZS1vcmRlci1vZi1DRkxBR1MucGF0Y2gKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGJjY2I0NWYuLjAwMDAwMDAKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nZGIvZ2RiLzAwMDItQ2hhbmdlLW9yZGVyLW9mLUNGTEFHUy5wYXRjaAorKysgL2Rldi9udWxsCkBAIC0xLDM0ICswLDAgQEAKLUZyb20gMjYyY2NjNGZkYjJhM2RmMGYxNmM2MWE4MDcwNDY5NjRhZTc3MjljOSBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKLUZyb206IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+Ci1EYXRlOiBNb24sIDIgTWFyIDIwMTUgMDI6Mjk6MjMgKzAwMDAKLVN1YmplY3Q6IFtQQVRDSCAyLzNdIENoYW5nZSBvcmRlciBvZiBDRkxBR1MKLQotTGV0cyB1cyBvdmVycmlkZSBXZXJyb3IgaWYgbmVlZCBiZQotCi1VcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUKLQotU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KLS0tLQotIGdkYi9nZGJzZXJ2ZXIvTWFrZWZpbGUuaW4gfCA0ICsrLS0KLSAxIGZpbGUgY2hhbmdlZCwgMiBpbnNlcnRpb25zKCspLCAyIGRlbGV0aW9ucygtKQotCi1kaWZmIC0tZ2l0IGEvZ2RiL2dkYnNlcnZlci9NYWtlZmlsZS5pbiBiL2dkYi9nZGJzZXJ2ZXIvTWFrZWZpbGUuaW4KLWluZGV4IDFlZDJlYzguLjBjZWY5NWIgMTAwNjQ0Ci0tLS0gYS9nZGIvZ2Ric2VydmVyL01ha2VmaWxlLmluCi0rKysgYi9nZGIvZ2Ric2VydmVyL01ha2VmaWxlLmluCi1AQCAtMTMxLDEwICsxMzEsMTAgQEAgQ0ZMQUdTID0gQENGTEFHU0AKLSBDUFBGTEFHUyA9IEBDUFBGTEFHU0AKLSAKLSAjIElOVEVSTkFMX0NGTEFHUyBpcyB0aGUgYWdncmVnYXRlIG9mIGFsbCBvdGhlciAqQ0ZMQUdTIG1hY3Jvcy4KLS1JTlRFUk5BTF9DRkxBR1NfQkFTRSA9ICAke0NGTEFHU30gJHtHTE9CQUxfQ0ZMQUdTfSBcCi0rSU5URVJOQUxfQ0ZMQUdTX0JBU0UgPSAke0dMT0JBTF9DRkxBR1N9IFwKLSAJJHtQUk9GSUxFX0NGTEFHU30gJHtJTkNMVURFX0NGTEFHU30gJHtDUFBGTEFHU30KLSBJTlRFUk5BTF9XQVJOX0NGTEFHUyA9ICAke0lOVEVSTkFMX0NGTEFHU19CQVNFfSAkKFdBUk5fQ0ZMQUdTKQotLUlOVEVSTkFMX0NGTEFHUyA9ICAke0lOVEVSTkFMX1dBUk5fQ0ZMQUdTfSAkKFdFUlJPUl9DRkxBR1MpIC1ER0RCU0VSVkVSCi0rSU5URVJOQUxfQ0ZMQUdTID0gICR7SU5URVJOQUxfV0FSTl9DRkxBR1N9ICQoV0VSUk9SX0NGTEFHUykgJHtDRkxBR1N9IC1ER0RCU0VSVkVSCi0gCi0gIyBMREZMQUdTIGlzIHNwZWNpZmljYWxseSByZXNlcnZlZCBmb3Igc2V0dGluZyBmcm9tIHRoZSBjb21tYW5kIGxpbmUKLSAjIHdoZW4gcnVubmluZyBtYWtlLgotLS0gCi0yLjEuNAotCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2dkYi9nZGIvMDAwMi1tYWtlLW1hbi1pbnN0YWxsLXJlbGF0aXZlLXRvLURFU1RESVIucGF0Y2ggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2dkYi9nZGIvMDAwMi1tYWtlLW1hbi1pbnN0YWxsLXJlbGF0aXZlLXRvLURFU1RESVIucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGVmZWQ2MgotLS0gL2Rldi9udWxsCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2RiL2dkYi8wMDAyLW1ha2UtbWFuLWluc3RhbGwtcmVsYXRpdmUtdG8tREVTVERJUi5wYXRjaApAQCAtMCwwICsxLDI4IEBACitGcm9tIDMyMjljYjA5MDMzZWViNTAwM2EwOGQ5MWZhOWQ0M2JlOGJhNGM4NmIgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorRGF0ZTogTW9uLCAyIE1hciAyMDE1IDAyOjI3OjU1ICswMDAwCitTdWJqZWN0OiBbUEFUQ0ggMDIvMTBdIG1ha2UgbWFuIGluc3RhbGwgcmVsYXRpdmUgdG8gREVTVERJUgorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KKy0tLQorIHNpbS9jb21tb24vTWFrZWZpbGUuaW4gfCAyICstCisgMSBmaWxlIGNoYW5nZWQsIDEgaW5zZXJ0aW9uKCspLCAxIGRlbGV0aW9uKC0pCisKK2RpZmYgLS1naXQgYS9zaW0vY29tbW9uL01ha2VmaWxlLmluIGIvc2ltL2NvbW1vbi9NYWtlZmlsZS5pbgoraW5kZXggYTA1ZjUwNy4uOGQwZmE2NCAxMDA2NDQKKy0tLSBhL3NpbS9jb21tb24vTWFrZWZpbGUuaW4KKysrKyBiL3NpbS9jb21tb24vTWFrZWZpbGUuaW4KK0BAIC0zNSw3ICszNSw3IEBAIHRvb2xkaXIgPSAkKGxpYmRpcikvJCh0YXJnZXRfYWxpYXMpCisgZGF0YXJvb3RkaXIgPSBAZGF0YXJvb3RkaXJACisgZGF0YWRpciA9IEBkYXRhZGlyQAorIG1hbmRpciA9IEBtYW5kaXJACistbWFuMWRpciA9ICQobWFuZGlyKS9tYW4xCisrbWFuMWRpciA9ICQoREVTVERJUikkKG1hbmRpcikvbWFuMQorIGluZm9kaXIgPSBAaW5mb2RpckAKKyBpbmNsdWRlZGlyID0gQGluY2x1ZGVkaXJACisgCistLSAKKzIuOC4yCisKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2RiL2dkYi8wMDAzLUFkZC1zdXBwb3J0LWZvci1SZW5lc2FzLVNILXNoNC1hcmNoaXRlY3R1cmUucGF0Y2ggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2dkYi9nZGIvMDAwMy1BZGQtc3VwcG9ydC1mb3ItUmVuZXNhcy1TSC1zaDQtYXJjaGl0ZWN0dXJlLnBhdGNoCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0YTNlMjJjLi4wMDAwMDAwCi0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2RiL2dkYi8wMDAzLUFkZC1zdXBwb3J0LWZvci1SZW5lc2FzLVNILXNoNC1hcmNoaXRlY3R1cmUucGF0Y2gKKysrIC9kZXYvbnVsbApAQCAtMSw5MjEgKzAsMCBAQAotRnJvbSA0MDdjYjEzY2ZiNzA2OTdmNDVkZmI3NjEzMDRlMDA1ZTFlY2JkMGU5IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQotRnJvbTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KLURhdGU6IE1vbiwgMiBNYXIgMjAxNSAwMjozMToxMiArMDAwMAotU3ViamVjdDogW1BBVENIIDMvM10gQWRkIHN1cHBvcnQgZm9yIFJlbmVzYXMgU0ggKHNoNCkgYXJjaGl0ZWN0dXJlLgotCi1nZGIgKDcuNC0xfmN2czIwMTExMTE3LjIpIGV4cGVyaW1lbnRhbDsgdXJnZW5jeT1sb3cKLSAuCi0gICAqIEFkZCBSZW5lc2FzIFNIIChzaDQpIHN1cHBvcnQgKENsb3NlczogIzU3NjI0MikKLSAgICAgLSBUaGFua3MgTm9idWhpcm8gSXdhbWF0c3UsIFRha2FzaGkgWW9zaGlpLgotQXV0aG9yOiBIZWN0b3IgT3JvbiA8enVtYmlAZGViaWFuLm9yZz4KLUJ1Zy1EZWJpYW46IGh0dHA6Ly9idWdzLmRlYmlhbi5vcmcvNTc2MjQyCi0KLVVwc3RyZWFtLVN0YXR1czogUGVuZGluZwotU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KLS0tLQotIGdkYi9NYWtlZmlsZS5pbiAgICAgICAgICAgICAgICAgICAgICB8ICAgMSArCi0gZ2RiL2NvbmZpZ3VyZS5ob3N0ICAgICAgICAgICAgICAgICAgIHwgICAxICsKLSBnZGIvc2gtbGludXgtdGRlcC5jICAgICAgICAgICAgICAgICAgfCA1MTkgKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysKLSBnZGIvc2gtdGRlcC5jICAgICAgICAgICAgICAgICAgICAgICAgfCAgNTQgKystLQotIGdkYi9zaC10ZGVwLmggICAgICAgICAgICAgICAgICAgICAgICB8ICA0OSArKysrCi0gZ2RiL3Rlc3RzdWl0ZS9nZGIuYXNtL2FzbS1zb3VyY2UuZXhwIHwgICA1ICsKLSBnZGIvdGVzdHN1aXRlL2dkYi5hc20vc2guaW5jICAgICAgICAgfCAgIDMgKy0KLSBnZGIvdGVzdHN1aXRlL2dkYi5iYXNlL2Fubm90YTEuYyAgICAgfCAgIDMgKwotIGdkYi90ZXN0c3VpdGUvZ2RiLmJhc2UvYW5ub3RhMy5jICAgICB8ICAgNCArCi0gZ2RiL3Rlc3RzdWl0ZS9nZGIuYmFzZS9zaWdhbGwuYyAgICAgIHwgICAzICsKLSBnZGIvdGVzdHN1aXRlL2dkYi5iYXNlL3NpZ25hbHMuYyAgICAgfCAgIDQgKwotIDExIGZpbGVzIGNoYW5nZWQsIDYxNyBpbnNlcnRpb25zKCspLCAyOSBkZWxldGlvbnMoLSkKLQotZGlmZiAtLWdpdCBhL2dkYi9NYWtlZmlsZS5pbiBiL2dkYi9NYWtlZmlsZS5pbgotaW5kZXggNzkzNzgwMS4uNjNiYWY4MSAxMDA2NDQKLS0tLSBhL2dkYi9NYWtlZmlsZS5pbgotKysrIGIvZ2RiL01ha2VmaWxlLmluCi1AQCAtMTcwNyw2ICsxNzA3LDcgQEAgQUxMREVQRklMRVMgPSBcCi0gCXNjb3JlLXRkZXAuYyBcCi0gCXNlci1nbzMyLmMgc2VyLXBpcGUuYyBzZXItdGNwLmMgc2VyLW1pbmd3LmMgXAotIAlzaC10ZGVwLmMgc2g2NC10ZGVwLmMgc2huYnNkLXRkZXAuYyBzaG5ic2QtbmF0LmMgXAotKwlzaC1saW51eC10ZGVwLmMgc2gtbGludXgtbmF0LmMgXAotIAlzb2wyLXRkZXAuYyBcCi0gCXNvbGliLXN2cjQuYyBcCi0gCXNwYXJjLWxpbnV4LW5hdC5jIHNwYXJjLWxpbnV4LXRkZXAuYyBcCi1kaWZmIC0tZ2l0IGEvZ2RiL2NvbmZpZ3VyZS5ob3N0IGIvZ2RiL2NvbmZpZ3VyZS5ob3N0Ci1pbmRleCBkMDdiZTRiLi5iNjM5MWM1IDEwMDY0NAotLS0tIGEvZ2RiL2NvbmZpZ3VyZS5ob3N0Ci0rKysgYi9nZGIvY29uZmlndXJlLmhvc3QKLUBAIC0xNTAsNiArMTUwLDcgQEAgcG93ZXJwYyotKi1saW51eCopCWdkYl9ob3N0PWxpbnV4IDs7Ci0gCi0gczM5MCotKi1saW51eCopCQlnZGJfaG9zdD1saW51eCA7OwotIAotK3NoKi0qLWxpbnV4KikJCWdkYl9ob3N0PWxpbnV4IDs7Ci0gc2gqLSotbmV0YnNkZWxmKiB8IHNoKi0qLWtuZXRic2QqLWdudSkKLSAJCQlnZGJfaG9zdD1uYnNkIDs7Ci0gc2gqLSotb3BlbmJzZCopCQlnZGJfaG9zdD1uYnNkIDs7Ci1kaWZmIC0tZ2l0IGEvZ2RiL3NoLWxpbnV4LXRkZXAuYyBiL2dkYi9zaC1saW51eC10ZGVwLmMKLWluZGV4IDJmZjJlZTguLjFhMTEyNjIgMTAwNjQ0Ci0tLS0gYS9nZGIvc2gtbGludXgtdGRlcC5jCi0rKysgYi9nZGIvc2gtbGludXgtdGRlcC5jCi1AQCAtMTgsMTQgKzE4LDM3IEBACi0gICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW0uICBJZiBub3QsIHNlZSA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uICAqLwotIAotICNpbmNsdWRlICJkZWZzLmgiCi0rI2luY2x1ZGUgImdkYmNvcmUuaCIKLSsjaW5jbHVkZSAiZnJhbWUuaCIKLSsjaW5jbHVkZSAiZnJhbWUtYmFzZS5oIgotKyNpbmNsdWRlICJmcmFtZS11bndpbmQuaCIKLSsjaW5jbHVkZSAiZHdhcmYyLWZyYW1lLmgiCi0rI2luY2x1ZGUgInZhbHVlLmgiCi0rI2luY2x1ZGUgInJlZ2NhY2hlLmgiCi0rI2luY2x1ZGUgImluZmVyaW9yLmgiCi0gI2luY2x1ZGUgIm9zYWJpLmgiCi0gCi0rI2luY2x1ZGUgInJlZ2dyb3Vwcy5oIgotKyNpbmNsdWRlICJhcmNoLXV0aWxzLmgiCi0rI2luY2x1ZGUgImZsb2F0Zm9ybWF0LmgiCi0gI2luY2x1ZGUgInNvbGliLXN2cjQuaCIKLSAjaW5jbHVkZSAic3ltdGFiLmgiCi0rI2luY2x1ZGUgImdkYl9zdHJpbmcuaCIKLSsjaW5jbHVkZSAiY29tbWFuZC5oIgotKyNpbmNsdWRlICJnZGJfYXNzZXJ0LmgiCi0gCi0gI2luY2x1ZGUgInRyYWQtZnJhbWUuaCIKLSAjaW5jbHVkZSAidHJhbXAtZnJhbWUuaCIKLSAKLSsjaW5jbHVkZSA8c3lzL3B0cmFjZS5oPgotKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KLSsjaW5jbHVkZSA8c3lzL3BhcmFtLmg+Ci0rI2luY2x1ZGUgPHN5cy91c2VyLmg+Ci0rI2luY2x1ZGUgPHN5cy9zeXNjYWxsLmg+Ci0rCi0rI2luY2x1ZGUgPGFzbS9wdHJhY2UuaD4KLSsKLSsjaW5jbHVkZSAicmVnc2V0LmgiCi0gI2luY2x1ZGUgImdsaWJjLXRkZXAuaCIKLSAjaW5jbHVkZSAic2gtdGRlcC5oIgotICNpbmNsdWRlICJsaW51eC10ZGVwLmgiCi1AQCAtMTgwLDkgKzIwMyw1MDUgQEAgc3RhdGljIHN0cnVjdCB0cmFtcF9mcmFtZSBzaF9saW51eF9ydF9zaWdyZXR1cm5fdHJhbXBfZnJhbWUgPSB7Ci0gICBzaF9saW51eF9ydF9zaWdyZXR1cm5faW5pdAotIH07Ci0gCi0rLyogUmVjb2duaXppbmcgc2lnbmFsIGhhbmRsZXIgZnJhbWVzLiAgKi8KLSsKLSsvKiBHTlUvTGludXggaGFzIHR3byBmbGF2b3JzIG9mIHNpZ25hbHMuICBOb3JtYWwgc2lnbmFsIGhhbmRsZXJzLCBhbmQKLSsgICAicmVhbHRpbWUiIChSVCkgc2lnbmFscy4gIFRoZSBSVCBzaWduYWxzIGNhbiBwcm92aWRlIGFkZGl0aW9uYWwKLSsgICBpbmZvcm1hdGlvbiB0byB0aGUgc2lnbmFsIGhhbmRsZXIgaWYgdGhlIFNBX1NJR0lORk8gZmxhZyBpcyBzZXQKLSsgICB3aGVuIGVzdGFibGlzaGluZyBhIHNpZ25hbCBoYW5kbGVyIHVzaW5nIGBzaWdhY3Rpb24nLiAgSXQgaXMgbm90Ci0rICAgdW5saWtlbHkgdGhhdCBmdXR1cmUgdmVyc2lvbnMgb2YgR05VL0xpbnV4IHdpbGwgc3VwcG9ydCBTQV9TSUdJTkZPCi0rICAgZm9yIG5vcm1hbCBzaWduYWxzIHRvby4gICovCi0rCi0rLyogV2hlbiB0aGUgU0ggTGludXgga2VybmVsIGNhbGxzIGEgc2lnbmFsIGhhbmRsZXIgYW5kIHRoZQotKyAgIFNBX1JFU1RPUkVSIGZsYWcgaXNuJ3Qgc2V0LCB0aGUgcmV0dXJuIGFkZHJlc3MgcG9pbnRzIHRvIGEgYml0IG9mCi0rICAgY29kZSBvbiB0aGUgc3RhY2suICBUaGlzIGZ1bmN0aW9uIHJldHVybnMgd2hldGhlciB0aGUgUEMgYXBwZWFycyB0bwotKyAgIGJlIHdpdGhpbiB0aGlzIGJpdCBvZiBjb2RlLgotKwotKyAgIFRoZSBpbnN0cnVjdGlvbiBzZXF1ZW5jZSBmb3Igbm9ybWFsIHNpZ25hbHMgaXMKLSsgICAgICAgbW92LncgIDFmLHIzCi0rICAgICAgIHRyYXBhICAjMTYKLSsgICAgICAgb3IgICAgIHIwLCByMAotKyAgICAgICBvciAgICAgcjAsIHIwCi0rICAgICAgIG9yICAgICByMCwgcjAKLSsgICAgICAgb3IgICAgIHIwLCByMAotKyAgICAgICBvciAgICAgcjAsIHIwCi0rICAgIDE6IC53b3JkICBfX05SX3NpZ3JldHVybgotKyAgIG9yIDB4OTMwNSAweGMzMTAgMHgyMDBiIDB4MjAwYiAweDIwMGIgMHgyMDBiIDB4MjAwYiAweDAwNzcuCi0rCi0rICAgQ2hlY2tpbmcgZm9yIHRoZSBjb2RlIHNlcXVlbmNlIHNob3VsZCBiZSBzb21ld2hhdCByZWxpYWJsZSwgYmVjYXVzZQotKyAgIHRoZSBlZmZlY3QgaXMgdG8gY2FsbCB0aGUgc3lzdGVtIGNhbGwgc2lncmV0dXJuLiAgVGhpcyBpcyB1bmxpa2VseQotKyAgIHRvIG9jY3VyIGFueXdoZXJlIG90aGVyIHRoYW4gYSBzaWduYWwgdHJhbXBvbGluZS4KLSsKLSsgICBJdCBraW5kIG9mIHN1Y2tzIHRoYXQgd2UgaGF2ZSB0byByZWFkIG1lbW9yeSBmcm9tIHRoZSBwcm9jZXNzIGluCi0rICAgb3JkZXIgdG8gaWRlbnRpZnkgYSBzaWduYWwgdHJhbXBvbGluZSwgYnV0IHRoZXJlIGRvZXNuJ3Qgc2VlbSB0byBiZQotKyAgIGFueSBvdGhlciB3YXkuICBUaGUgUENfSU5fU0lHVFJBTVAgbWFjcm8gaW4gdG0tbGludXguaCBhcnJhbmdlcyB0bwotKyAgIG9ubHkgY2FsbCB1cyBpZiBubyBmdW5jdGlvbiBuYW1lIGNvdWxkIGJlIGlkZW50aWZpZWQsIHdoaWNoIHNob3VsZAotKyAgIGJlIHRoZSBjYXNlIHNpbmNlIHRoZSBjb2RlIGlzIG9uIHRoZSBzdGFjay4KLSsKLSsgICBEZXRlY3Rpb24gb2Ygc2lnbmFsIHRyYW1wb2xpbmVzIGZvciBoYW5kbGVycyB0aGF0IHNldCB0aGUKLSsgICBTQV9SRVNUT1JFUiBmbGFnIGlzIGluIGdlbmVyYWwgbm90IHBvc3NpYmxlLiAgVW5mb3J0dW5hdGVseSB0aGlzIGlzCi0rICAgd2hhdCB0aGUgR05VIEMgTGlicmFyeSBoYXMgYmVlbiBkb2luZyBmb3IgcXVpdGUgc29tZSB0aW1lIG5vdy4KLSsgICBIb3dldmVyLCBhcyBvZiB2ZXJzaW9uIDIuMS4yLCB0aGUgR05VIEMgTGlicmFyeSB1c2VzIHNpZ25hbAotKyAgIHRyYW1wb2xpbmVzIChuYW1lZCBfX3Jlc3RvcmUgYW5kIF9fcmVzdG9yZV9ydCkgdGhhdCBhcmUgaWRlbnRpY2FsCi0rICAgdG8gdGhlIG9uZXMgdXNlZCBieSB0aGUga2VybmVsLiAgVGhlcmVmb3JlLCB0aGVzZSB0cmFtcG9saW5lcyBhcmUKLSsgICBzdXBwb3J0ZWQgdG9vLiAgKi8KLSsKLSsjZGVmaW5lIE1PVlcobikJICgweDkzMDB8KChuKS0yKSkJLyogTW92ZSBtZW0gd29yZCBhdCBQQytuIHRvIFIzICovCi0rI2RlZmluZSBUUkFQMTYJIDB4YzMxMAkJCS8qIFN5c2NhbGwgdy9ubyBhcmdzIChOUiBpbiBSMykgKi8KLSsjZGVmaW5lIE9SX1IwX1IwIDB4MjAwYgkJCS8qIG9yIHIwLHIwIChpbnNlcnQgdG8gYXZvaWQgaGFyZHdhcmUgYnVnKSAqLwotKwotKyNkZWZpbmUgTElOVVhfU0lHVFJBTVBfSU5TTjAJTU9WVyg3KQkJLyogTW92ZSBtZW0gd29yZCBhdCBQQys3IHRvIFIzICovCi0rI2RlZmluZSBMSU5VWF9TSUdUUkFNUF9JTlNOMQlUUkFQMTYJCS8qIFN5c2NhbGwgdy9ubyBhcmdzIChOUiBpbiBSMykgKi8KLSsjZGVmaW5lIExJTlVYX1NJR1RSQU1QX0lOU04yCU9SX1IwX1IwCS8qIG9yIHIwLHIwIChpbnNlcnQgdG8gYXZvaWQgaGFyZHdhcmUgYnVnKSAqLwotKwotK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBzaG9ydCBsaW51eF9zaWd0cmFtcF9jb2RlW10gPQotK3sKLSsgIExJTlVYX1NJR1RSQU1QX0lOU04wLAotKyAgTElOVVhfU0lHVFJBTVBfSU5TTjEsCi0rICBMSU5VWF9TSUdUUkFNUF9JTlNOMiwKLSsgIExJTlVYX1NJR1RSQU1QX0lOU04yLAotKyAgTElOVVhfU0lHVFJBTVBfSU5TTjIsCi0rICBMSU5VWF9TSUdUUkFNUF9JTlNOMiwKLSsgIExJTlVYX1NJR1RSQU1QX0lOU04yLAotKyAgX19OUl9zaWdyZXR1cm4KLSt9OwotKwotKyNkZWZpbmUgTElOVVhfU0lHVFJBTVBfTEVOIChzaXplb2YgbGludXhfc2lndHJhbXBfY29kZSkKLSsKLSsvKiBJZiBQQyBpcyBpbiBhIHNpZ3RyYW1wIHJvdXRpbmUsIHJldHVybiB0aGUgYWRkcmVzcyBvZiB0aGUgc3RhcnQgb2YKLSsgICB0aGUgcm91dGluZS4gIE90aGVyd2lzZSwgcmV0dXJuIDAuICAqLwotKwotK3N0YXRpYyBDT1JFX0FERFIKLStzaF9saW51eF9zaWd0cmFtcF9zdGFydCAoc3RydWN0IGZyYW1lX2luZm8gKm5leHRfZnJhbWUpCi0rewotKyAgQ09SRV9BRERSIHBjID0gZ2V0X2ZyYW1lX3BjIChuZXh0X2ZyYW1lKTsKLSsgIGdkYl9ieXRlIGJ1ZltMSU5VWF9TSUdUUkFNUF9MRU5dOwotKwotKyAgLyogV2Ugb25seSByZWNvZ25pemUgYSBzaWduYWwgdHJhbXBvbGluZSBpZiBQQyBpcyBhdCB0aGUgc3RhcnQgb2YKLSsgICAgIG9uZSBvZiB0aGUgdGhyZWUgaW5zdHJ1Y3Rpb25zLiAgV2Ugb3B0aW1pemUgZm9yIGZpbmRpbmcgdGhlIFBDIGF0Ci0rICAgICB0aGUgc3RhcnQsIGFzIHdpbGwgYmUgdGhlIGNhc2Ugd2hlbiB0aGUgdHJhbXBvbGluZSBpcyBub3QgdGhlCi0rICAgICBmaXJzdCBmcmFtZSBvbiB0aGUgc3RhY2suICBXZSBhc3N1bWUgdGhhdCBpbiB0aGUgY2FzZSB3aGVyZSB0aGUKLSsgICAgIFBDIGlzIG5vdCBhdCB0aGUgc3RhcnQgb2YgdGhlIGluc3RydWN0aW9uIHNlcXVlbmNlLCB0aGVyZSB3aWxsIGJlCi0rICAgICBhIGZldyB0cmFpbGluZyByZWFkYWJsZSBieXRlcyBvbiB0aGUgc3RhY2suICAqLwotKwotKyAgaWYgKCFzYWZlX2ZyYW1lX3Vud2luZF9tZW1vcnkgKG5leHRfZnJhbWUsIHBjLCBidWYsIExJTlVYX1NJR1RSQU1QX0xFTikpCi0rICAgIHJldHVybiAwOwotKwotKyAgaWYgKGJ1ZlswXSAhPSBMSU5VWF9TSUdUUkFNUF9JTlNOMCkKLSsgICAgewotKyAgICAgIGlmIChidWZbMF0gIT0gTElOVVhfU0lHVFJBTVBfSU5TTjEpCi0rICAgICAgICByZXR1cm4gMDsKLSsKLSsgICAgICBwYyAtPSAyOwotKwotKyAgICAgIGlmICghc2FmZV9mcmFtZV91bndpbmRfbWVtb3J5IChuZXh0X2ZyYW1lLCBwYywgYnVmLCBMSU5VWF9TSUdUUkFNUF9MRU4pKQotKwlyZXR1cm4gMDsKLSsgICAgfQotKwotKyAgaWYgKG1lbWNtcCAoYnVmLCBsaW51eF9zaWd0cmFtcF9jb2RlLCBMSU5VWF9TSUdUUkFNUF9MRU4pICE9IDApCi0rICAgIHJldHVybiAwOwotKwotKyAgcmV0dXJuIHBjOwotK30KLSsKLSsvKiBUaGlzIGZ1bmN0aW9uIGRvZXMgdGhlIHNhbWUgZm9yIFJUIHNpZ25hbHMuICBIZXJlIHRoZSBpbnN0cnVjdGlvbgotKyAgIHNlcXVlbmNlIGlzCi0rICAgICAgIG1vdi53ICAxZixyMwotKyAgICAgICB0cmFwYSAgIzE2Ci0rICAgICAgIG9yICAgICByMCwgcjAKLSsgICAgICAgb3IgICAgIHIwLCByMAotKyAgICAgICBvciAgICAgcjAsIHIwCi0rICAgICAgIG9yICAgICByMCwgcjAKLSsgICAgICAgb3IgICAgIHIwLCByMAotKyAgICAxOiAud29yZCAgX19OUl9ydF9zaWdyZXR1cm4KLSsgICBvciAweDkzMDUgMHhjMzEwIDB4MjAwYiAweDIwMGIgMHgyMDBiIDB4MjAwYiAweDIwMGIgMHgwMGFkLgotKwotKyAgIFRoZSBlZmZlY3QgaXMgdG8gY2FsbCB0aGUgc3lzdGVtIGNhbGwgcnRfc2lncmV0dXJuLiAgKi8KLSsKLSsjZGVmaW5lIExJTlVYX1JUX1NJR1RSQU1QX0lOU04wCQlNT1ZXKDcpCQkvKiBNb3ZlIG1lbSB3b3JkIGF0IFBDKzcgdG8gUjMgKi8KLSsjZGVmaW5lIExJTlVYX1JUX1NJR1RSQU1QX0lOU04xCQlUUkFQMTYJCS8qIFN5c2NhbGwgdy9ubyBhcmdzIChOUiBpbiBSMykgKi8KLSsjZGVmaW5lIExJTlVYX1JUX1NJR1RSQU1QX0lOU04yCQlPUl9SMF9SMAkvKiBvciByMCxyMCAoaW5zZXJ0IHRvIGF2b2lkIGhhcmR3YXJlIGJ1ZykgKi8KLSsKLStzdGF0aWMgY29uc3QgdW5zaWduZWQgc2hvcnQgbGludXhfcnRfc2lndHJhbXBfY29kZVtdID0KLSt7Ci0rICBMSU5VWF9SVF9TSUdUUkFNUF9JTlNOMCwKLSsgIExJTlVYX1JUX1NJR1RSQU1QX0lOU04xLAotKyAgTElOVVhfUlRfU0lHVFJBTVBfSU5TTjIsCi0rICBMSU5VWF9SVF9TSUdUUkFNUF9JTlNOMiwKLSsgIExJTlVYX1JUX1NJR1RSQU1QX0lOU04yLAotKyAgTElOVVhfUlRfU0lHVFJBTVBfSU5TTjIsCi0rICBMSU5VWF9SVF9TSUdUUkFNUF9JTlNOMiwKLSsgIF9fTlJfcnRfc2lncmV0dXJuCi0rfTsKLSsKLSsjZGVmaW5lIExJTlVYX1JUX1NJR1RSQU1QX0xFTiAoc2l6ZW9mIGxpbnV4X3J0X3NpZ3RyYW1wX2NvZGUpCi0rCi0rLyogSWYgUEMgaXMgaW4gYSBSVCBzaWd0cmFtcCByb3V0aW5lLCByZXR1cm4gdGhlIGFkZHJlc3Mgb2YgdGhlIHN0YXJ0Ci0rICAgb2YgdGhlIHJvdXRpbmUuICBPdGhlcndpc2UsIHJldHVybiAwLiAgKi8KLSsKLStzdGF0aWMgQ09SRV9BRERSCi0rc2hfbGludXhfcnRfc2lndHJhbXBfc3RhcnQgKHN0cnVjdCBmcmFtZV9pbmZvICpuZXh0X2ZyYW1lKQotK3sKLSsgIENPUkVfQUREUiBwYyA9IGdldF9mcmFtZV9wYyAobmV4dF9mcmFtZSk7Ci0rICBnZGJfYnl0ZSBidWZbTElOVVhfUlRfU0lHVFJBTVBfTEVOXTsKLSsKLSsgIC8qIFdlIG9ubHkgcmVjb2duaXplIGEgc2lnbmFsIHRyYW1wb2xpbmUgaWYgUEMgaXMgYXQgdGhlIHN0YXJ0IG9mCi0rICAgICBvbmUgb2YgdGhlIHR3byBpbnN0cnVjdGlvbnMuICBXZSBvcHRpbWl6ZSBmb3IgZmluZGluZyB0aGUgUEMgYXQKLSsgICAgIHRoZSBzdGFydCwgYXMgd2lsbCBiZSB0aGUgY2FzZSB3aGVuIHRoZSB0cmFtcG9saW5lIGlzIG5vdCB0aGUKLSsgICAgIGZpcnN0IGZyYW1lIG9uIHRoZSBzdGFjay4gIFdlIGFzc3VtZSB0aGF0IGluIHRoZSBjYXNlIHdoZXJlIHRoZQotKyAgICAgUEMgaXMgbm90IGF0IHRoZSBzdGFydCBvZiB0aGUgaW5zdHJ1Y3Rpb24gc2VxdWVuY2UsIHRoZXJlIHdpbGwgYmUKLSsgICAgIGEgZmV3IHRyYWlsaW5nIHJlYWRhYmxlIGJ5dGVzIG9uIHRoZSBzdGFjay4gICovCi0rCi0rICBpZiAoIXNhZmVfZnJhbWVfdW53aW5kX21lbW9yeSAobmV4dF9mcmFtZSwgcGMsIGJ1ZiwgTElOVVhfUlRfU0lHVFJBTVBfTEVOKSkKLSsgICAgcmV0dXJuIDA7Ci0rCi0rICBpZiAoYnVmWzBdICE9IExJTlVYX1JUX1NJR1RSQU1QX0lOU04wKQotKyAgICB7Ci0rICAgICAgaWYgKGJ1ZlswXSAhPSBMSU5VWF9SVF9TSUdUUkFNUF9JTlNOMSkKLSsJcmV0dXJuIDA7Ci0rCi0rICAgICAgcGMgLT0gMjsKLSsKLSsgICAgICBpZiAoIXNhZmVfZnJhbWVfdW53aW5kX21lbW9yeSAobmV4dF9mcmFtZSwgcGMsIGJ1ZiwKLSsJCQkJICAgICBMSU5VWF9SVF9TSUdUUkFNUF9MRU4pKQotKwlyZXR1cm4gMDsKLSsgICAgfQotKwotKyAgaWYgKG1lbWNtcCAoYnVmLCBsaW51eF9ydF9zaWd0cmFtcF9jb2RlLCBMSU5VWF9SVF9TSUdUUkFNUF9MRU4pICE9IDApCi0rICAgIHJldHVybiAwOwotKwotKyAgcmV0dXJuIHBjOwotK30KLSsKLSsvKiBSZXR1cm4gd2hldGhlciBQQyBpcyBpbiBhIEdOVS9MaW51eCBzaWd0cmFtcCByb3V0aW5lLiAgKi8KLSsKLStzdGF0aWMgaW50Ci0rc2hfbGludXhfc2lndHJhbXBfcCAoc3RydWN0IGZyYW1lX2luZm8gKnRoaXNfZnJhbWUpCi0rewotKyAgQ09SRV9BRERSIHBjID0gZ2V0X2ZyYW1lX3BjICh0aGlzX2ZyYW1lKTsKLSsgIGNoYXIgKm5hbWU7Ci0rCi0rICBmaW5kX3BjX3BhcnRpYWxfZnVuY3Rpb24gKHBjLCAmbmFtZSwgTlVMTCwgTlVMTCk7Ci0rCi0rICAvKiBJZiB3ZSBoYXZlIE5BTUUsIHdlIGNhbiBvcHRpbWl6ZSB0aGUgc2VhcmNoLiAgVGhlIHRyYW1wb2xpbmVzIGFyZQotKyAgICAgbmFtZWQgX19yZXN0b3JlIGFuZCBfX3Jlc3RvcmVfcnQuICBIb3dldmVyLCB0aGV5IGFyZW4ndCBkeW5hbWljYWxseQotKyAgICAgZXhwb3J0ZWQgZnJvbSB0aGUgc2hhcmVkIEMgbGlicmFyeSwgc28gdGhlIHRyYW1wb2xpbmUgbWF5IGFwcGVhciB0bwotKyAgICAgYmUgcGFydCBvZiB0aGUgcHJlY2VkaW5nIGZ1bmN0aW9uLiAgVGhpcyBzaG91bGQgYWx3YXlzIGJlIHNpZ2FjdGlvbiwKLSsgICAgIF9fc2lnYWN0aW9uLCBvciBfX2xpYmNfc2lnYWN0aW9uIChhbGwgYWxpYXNlcyB0byB0aGUgc2FtZSBmdW5jdGlvbikuICAqLwotKyAgaWYgKG5hbWUgPT0gTlVMTCB8fCBzdHJzdHIgKG5hbWUsICJzaWdhY3Rpb24iKSAhPSBOVUxMKQotKyAgICByZXR1cm4gKHNoX2xpbnV4X3NpZ3RyYW1wX3N0YXJ0ICh0aGlzX2ZyYW1lKSAhPSAwCi0rCSAgICB8fCBzaF9saW51eF9ydF9zaWd0cmFtcF9zdGFydCAodGhpc19mcmFtZSkgIT0gMCk7Ci0rCi0rICByZXR1cm4gKHN0cmNtcCAoIl9fcmVzdG9yZSIsIG5hbWUpID09IDAKLSsJICB8fCBzdHJjbXAgKCJfX3Jlc3RvcmVfcnQiLCBuYW1lKSA9PSAwKTsKLSt9Ci0rCi0rLyogT2Zmc2V0IHRvIHN0cnVjdCBzaWdjb250ZXh0IGluIHVjb250ZXh0LCBmcm9tIDxhc20vdWNvbnRleHQuaD4uICAqLwotKyNkZWZpbmUgU0hfTElOVVhfVUNPTlRFWFRfU0lHQ09OVEVYVF9PRkZTRVQgMTIKLSsKLSsKLSsvKiBBc3N1bWluZyBORVhUX0ZSQU1FIGlzIGEgZnJhbWUgZm9sbG93aW5nIGEgR05VL0xpbnV4IHNpZ3RyYW1wCi0rICAgcm91dGluZSwgcmV0dXJuIHRoZSBhZGRyZXNzIG9mIHRoZSBhc3NvY2lhdGVkIHNpZ2NvbnRleHQgc3RydWN0dXJlLiAgKi8KLSsKLStzdGF0aWMgQ09SRV9BRERSCi0rc2hfbGludXhfc2lnY29udGV4dF9hZGRyIChzdHJ1Y3QgZnJhbWVfaW5mbyAqdGhpc19mcmFtZSkKLSt7Ci0rICBDT1JFX0FERFIgcGM7Ci0rICBDT1JFX0FERFIgc3A7Ci0rCi0rICBzcCA9IGdldF9mcmFtZV9yZWdpc3Rlcl91bnNpZ25lZCAodGhpc19mcmFtZSwgU1BfUkVHTlVNKTsKLSsKLSsgIHBjID0gc2hfbGludXhfc2lndHJhbXBfc3RhcnQgKHRoaXNfZnJhbWUpOwotKyAgaWYgKHBjKQotKyAgICB7Ci0rICAgICAgcmV0dXJuIHNwOwotKyAgICB9Ci0rCi0rICBwYyA9IHNoX2xpbnV4X3J0X3NpZ3RyYW1wX3N0YXJ0ICh0aGlzX2ZyYW1lKTsKLSsgIGlmIChwYykKLSsgICAgewotKyAgICAgIENPUkVfQUREUiB1Y29udGV4dF9hZGRyOwotKwotKyAgICAgIC8qIFRoZSBzaWdjb250ZXh0IHN0cnVjdHVyZSBpcyBwYXJ0IG9mIHRoZSB1c2VyIGNvbnRleHQuICBBCi0rCSBwb2ludGVyIHRvIHRoZSB1c2VyIGNvbnRleHQgaXMgcGFzc2VkIGFzIHRoZSB0aGlyZCBhcmd1bWVudAotKwkgdG8gdGhlIHNpZ25hbCBoYW5kbGVyLiAgKi8KLSsgICAgICB1Y29udGV4dF9hZGRyID0gZ2V0X2ZyYW1lX3JlZ2lzdGVyX3Vuc2lnbmVkICh0aGlzX2ZyYW1lLCBBUkcwX1JFR05VTSsyKTsKLSsgICAgICByZXR1cm4gdWNvbnRleHRfYWRkciArIFNIX0xJTlVYX1VDT05URVhUX1NJR0NPTlRFWFRfT0ZGU0VUOwotKyAgICB9Ci0rCi0rICBlcnJvciAoIkNvdWxkbid0IHJlY29nbml6ZSBzaWduYWwgdHJhbXBvbGluZS4iKTsKLSsgIHJldHVybiAwOwotK30KLSsKLSsvKiBTaWduYWwgdHJhbXBvbGluZXMuICAqLwotK2V4dGVybiBzdHJ1Y3Qgc2hfZnJhbWVfY2FjaGUgKnNoX2FsbG9jX2ZyYW1lX2NhY2hlICh2b2lkKTsKLSsKLStzdGF0aWMgc3RydWN0IHNoX2ZyYW1lX2NhY2hlICoKLStzaF9saW51eF9zaWd0cmFtcF9mcmFtZV9jYWNoZSAoc3RydWN0IGZyYW1lX2luZm8gKnRoaXNfZnJhbWUsIHZvaWQgKip0aGlzX2NhY2hlKQotK3sKLSsgIHN0cnVjdCBzaF9mcmFtZV9jYWNoZSAqY2FjaGU7Ci0rICBzdHJ1Y3QgZ2RiYXJjaF90ZGVwICp0ZGVwID0gZ2RiYXJjaF90ZGVwIChnZXRfY3VycmVudF9hcmNoICgpKTsKLSsgIENPUkVfQUREUiBzaWdjb250ZXh0X2FkZHI7Ci0rCi0rICBpZiAoKnRoaXNfY2FjaGUpCi0rICAgIHJldHVybiAqdGhpc19jYWNoZTsKLSsKLSsgIGNhY2hlID0gc2hfYWxsb2NfZnJhbWVfY2FjaGUgKCk7Ci0rCi0rICBjYWNoZS0+YmFzZSA9IGdldF9mcmFtZV9yZWdpc3Rlcl91bnNpZ25lZCAodGhpc19mcmFtZSwgU1BfUkVHTlVNKTsKLSsgIHNpZ2NvbnRleHRfYWRkciA9IHRkZXAtPnNpZ2NvbnRleHRfYWRkciAodGhpc19mcmFtZSk7Ci0rICBpZiAodGRlcC0+c2NfcmVnX29mZnNldCkKLSsgICAgewotKyAgICAgIGludCBpOwotKwotKyAgICAgIGdkYl9hc3NlcnQgKHRkZXAtPnNjX251bV9yZWdzIDw9IFNIX05VTV9SRUdTKTsKLSsKLSsgICAgICBmb3IgKGkgPSAwOyBpIDwgdGRlcC0+c2NfbnVtX3JlZ3M7IGkrKykKLSsJaWYgKHRkZXAtPnNjX3JlZ19vZmZzZXRbaV0gIT0gLTEpCi0rCSAgY2FjaGUtPnNhdmVkX3JlZ3NbaV0gPSBzaWdjb250ZXh0X2FkZHIgKyB0ZGVwLT5zY19yZWdfb2Zmc2V0W2ldOwotKyAgICB9Ci0rCi0rICAqdGhpc19jYWNoZSA9IGNhY2hlOwotKyAgcmV0dXJuIGNhY2hlOwotK30KLSsKLStzdGF0aWMgdm9pZAotK3NoX2xpbnV4X3NpZ3RyYW1wX2ZyYW1lX3RoaXNfaWQgKHN0cnVjdCBmcmFtZV9pbmZvICp0aGlzX2ZyYW1lLCB2b2lkICoqdGhpc19jYWNoZSwKLSsJCQkgICAgIHN0cnVjdCBmcmFtZV9pZCAqdGhpc19pZCkKLSt7Ci0rICBzdHJ1Y3Qgc2hfZnJhbWVfY2FjaGUgKmNhY2hlID0KLSsgICAgc2hfbGludXhfc2lndHJhbXBfZnJhbWVfY2FjaGUgKHRoaXNfZnJhbWUsIHRoaXNfY2FjaGUpOwotKwotKyAgKCp0aGlzX2lkKSA9IGZyYW1lX2lkX2J1aWxkIChjYWNoZS0+YmFzZSArIDY0LCBjYWNoZS0+cGMpOwotK30KLSsKLStleHRlcm4gc3RydWN0IHZhbHVlICogc2hfZnJhbWVfcHJldl9yZWdpc3RlciAoKTsKLStzdGF0aWMgc3RydWN0IHZhbHVlICoKLStzaF9saW51eF9zaWd0cmFtcF9mcmFtZV9wcmV2X3JlZ2lzdGVyIChzdHJ1Y3QgZnJhbWVfaW5mbyAqdGhpc19mcmFtZSwKLSsgICAgICAgICAgICAgICAgICAgdm9pZCAqKnRoaXNfY2FjaGUsIGludCByZWdudW0pCi0rewotKyAgc2hfbGludXhfc2lndHJhbXBfZnJhbWVfY2FjaGUgKHRoaXNfZnJhbWUsIHRoaXNfY2FjaGUpOwotKwotKyAgcmV0dXJuIHNoX2ZyYW1lX3ByZXZfcmVnaXN0ZXIgKHRoaXNfZnJhbWUsIHRoaXNfY2FjaGUsIHJlZ251bSk7Ci0rfQotKwotK3N0YXRpYyBpbnQKLStzaF9saW51eF9zaWd0cmFtcF9mcmFtZV9zbmlmZmVyIChjb25zdCBzdHJ1Y3QgZnJhbWVfdW53aW5kICpzZWxmLAotKyAgICAgICAgICAgICAgICAgc3RydWN0IGZyYW1lX2luZm8gKnRoaXNfZnJhbWUsCi0rICAgICAgICAgICAgICAgICB2b2lkICoqdGhpc19wcm9sb2d1ZV9jYWNoZSkKLSt7Ci0rICBzdHJ1Y3QgZ2RiYXJjaF90ZGVwICp0ZGVwID0gZ2RiYXJjaF90ZGVwIChnZXRfZnJhbWVfYXJjaCAodGhpc19mcmFtZSkpOwotKwotKyAgLyogV2Ugc2hvdWxkbid0IGV2ZW4gYm90aGVyIGlmIHdlIGRvbid0IGhhdmUgYSBzaWdjb250ZXh0X2FkZHIKLSsgICAgIGhhbmRsZXIuICAqLwotKyAgaWYgKHRkZXAtPnNpZ2NvbnRleHRfYWRkciA9PSBOVUxMKQotKyAgICByZXR1cm4gMDsKLSsKLSsgIGlmICh0ZGVwLT5zaWd0cmFtcF9wICE9IE5VTEwpCi0rICAgIHsKLSsgICAgICBpZiAodGRlcC0+c2lndHJhbXBfcCAodGhpc19mcmFtZSkpCi0rICAgIHJldHVybiAxOwotKyAgICB9Ci0rCi0rICByZXR1cm4gMDsKLSt9Ci0rCi0rc3RhdGljIGNvbnN0IHN0cnVjdCBmcmFtZV91bndpbmQgc2hfbGludXhfc2lndHJhbXBfZnJhbWVfdW53aW5kID0KLSt7Ci0rICBTSUdUUkFNUF9GUkFNRSwKLSsgIHNoX2xpbnV4X3NpZ3RyYW1wX2ZyYW1lX3RoaXNfaWQsCi0rICBzaF9saW51eF9zaWd0cmFtcF9mcmFtZV9wcmV2X3JlZ2lzdGVyLAotKyAgTlVMTCwKLSsgIHNoX2xpbnV4X3NpZ3RyYW1wX2ZyYW1lX3NuaWZmZXIKLSt9OwotKwotKy8qIFN1cHBseSByZWdpc3RlciBSRUdOVU0gZnJvbSB0aGUgYnVmZmVyIHNwZWNpZmllZCBieSBHUkVHUyBhbmQgTEVOCi0rICAgaW4gdGhlIGdlbmVyYWwtcHVycG9zZSByZWdpc3RlciBzZXQgUkVHU0VUIHRvIHJlZ2lzdGVyIGNhY2hlCi0rICAgUkVHQ0FDSEUuICBJZiBSRUdOVU0gaXMgLTEsIGRvIHRoaXMgZm9yIGFsbCByZWdpc3RlcnMgaW4gUkVHU0VULiAgKi8KLSsKLSt2b2lkCi0rc2hfc3VwcGx5X2dyZWdzZXQgKGNvbnN0IHN0cnVjdCByZWdzZXQgKnJlZ3NldCwgc3RydWN0IHJlZ2NhY2hlICpyZWdjYWNoZSwKLSsgICAgICAgICAgICAgaW50IHJlZ251bSwgY29uc3Qgdm9pZCAqZ3JlZ3MsIHNpemVfdCBsZW4pCi0rewotKyAgY29uc3Qgc3RydWN0IGdkYmFyY2hfdGRlcCAqdGRlcCA9IGdkYmFyY2hfdGRlcCAocmVnc2V0LT5hcmNoKTsKLSsgIGNvbnN0IGNoYXIgKnJlZ3MgPSBncmVnczsKLSsgIGludCBpOwotKwotKyAgZ2RiX2Fzc2VydCAobGVuID09IHRkZXAtPnNpemVvZl9ncmVnc2V0KTsKLSsKLSsgIGZvciAoaSA9IDA7IGkgPCB0ZGVwLT5ncmVnc2V0X251bV9yZWdzOyBpKyspCi0rICAgIHsKLSsgICAgICBpZiAoKHJlZ251bSA9PSBpIHx8IHJlZ251bSA9PSAtMSkKLSsgICAgICAmJiB0ZGVwLT5ncmVnc2V0X3JlZ19vZmZzZXRbaV0gIT0gLTEpCi0rICAgIHJlZ2NhY2hlX3Jhd19zdXBwbHkgKHJlZ2NhY2hlLCBpLCByZWdzICsgdGRlcC0+Z3JlZ3NldF9yZWdfb2Zmc2V0W2ldKTsKLSsgICAgfQotK30KLSsKLSsvKiBDb2xsZWN0IHJlZ2lzdGVyIFJFR05VTSBmcm9tIHRoZSByZWdpc3RlciBjYWNoZSBSRUdDQUNIRSBhbmQgc3RvcmUKLSsgICBpdCBpbiB0aGUgYnVmZmVyIHNwZWNpZmllZCBieSBHUkVHUyBhbmQgTEVOIGFzIGRlc2NyaWJlZCBieSB0aGUKLSsgICBnZW5lcmFsLXB1cnBvc2UgcmVnaXN0ZXIgc2V0IFJFR1NFVC4gIElmIFJFR05VTSBpcyAtMSwgZG8gdGhpcyBmb3IKLSsgICBhbGwgcmVnaXN0ZXJzIGluIFJFR1NFVC4gICovCi0rCi0rdm9pZAotK3NoX2NvbGxlY3RfZ3JlZ3NldCAoY29uc3Qgc3RydWN0IHJlZ3NldCAqcmVnc2V0LAotKyAgICAgICAgICAgICAgY29uc3Qgc3RydWN0IHJlZ2NhY2hlICpyZWdjYWNoZSwKLSsgICAgICAgICAgICAgIGludCByZWdudW0sIHZvaWQgKmdyZWdzLCBzaXplX3QgbGVuKQotK3sKLSsgIGNvbnN0IHN0cnVjdCBnZGJhcmNoX3RkZXAgKnRkZXAgPSBnZGJhcmNoX3RkZXAgKHJlZ3NldC0+YXJjaCk7Ci0rICBjaGFyICpyZWdzID0gZ3JlZ3M7Ci0rICBpbnQgaTsKLSsKLSsgIGdkYl9hc3NlcnQgKGxlbiA9PSB0ZGVwLT5zaXplb2ZfZ3JlZ3NldCk7Ci0rCi0rICBmb3IgKGkgPSAwOyBpIDwgdGRlcC0+Z3JlZ3NldF9udW1fcmVnczsgaSsrKQotKyAgICB7Ci0rICAgICAgaWYgKChyZWdudW0gPT0gaSB8fCByZWdudW0gPT0gLTEpCi0rICAgICAgJiYgdGRlcC0+Z3JlZ3NldF9yZWdfb2Zmc2V0W2ldICE9IC0xKQotKyAgICByZWdjYWNoZV9yYXdfY29sbGVjdCAocmVnY2FjaGUsIGksIHJlZ3MgKyB0ZGVwLT5ncmVnc2V0X3JlZ19vZmZzZXRbaV0pOwotKyAgICB9Ci0rfQotKwotKy8qIFN1cHBseSByZWdpc3RlciBSRUdOVU0gZnJvbSB0aGUgYnVmZmVyIHNwZWNpZmllZCBieSBGUFJFR1MgYW5kIExFTgotKyAgIGluIHRoZSBmbG9hdGluZy1wb2ludCByZWdpc3RlciBzZXQgUkVHU0VUIHRvIHJlZ2lzdGVyIGNhY2hlCi0rICAgUkVHQ0FDSEUuICBJZiBSRUdOVU0gaXMgLTEsIGRvIHRoaXMgZm9yIGFsbCByZWdpc3RlcnMgaW4gUkVHU0VULiAgKi8KLSsKLStzdGF0aWMgdm9pZAotK3NoX3N1cHBseV9mcHJlZ3NldCAoY29uc3Qgc3RydWN0IHJlZ3NldCAqcmVnc2V0LCBzdHJ1Y3QgcmVnY2FjaGUgKnJlZ2NhY2hlLAotKyAgICAgICAgICAgICAgaW50IHJlZ251bSwgY29uc3Qgdm9pZCAqZnByZWdzLCBzaXplX3QgbGVuKQotK3sKLSsgIGNvbnN0IHN0cnVjdCBnZGJhcmNoX3RkZXAgKnRkZXAgPSBnZGJhcmNoX3RkZXAgKHJlZ3NldC0+YXJjaCk7Ci0rICBjb25zdCBjaGFyICpyZWdzID0gZnByZWdzOwotKyAgaW50IGk7Ci0rCi0rICBnZGJfYXNzZXJ0IChsZW4gPT0gdGRlcC0+c2l6ZW9mX2ZwcmVnc2V0KTsKLSsgIGZvciAoaSA9IDA7IGkgPCAxNjsgaSsrKQotKyAgICB7Ci0rICAgICAgaWYgKHJlZ251bSA9PSBpKzI1IHx8IHJlZ251bSA9PSAtMSkKLSsgICAgcmVnY2FjaGVfcmF3X3N1cHBseSAocmVnY2FjaGUsIGkrMjUsIHJlZ3MgKyBpKjQpOwotKyAgICB9Ci0rICBpZiAocmVnbnVtID09IEZQU0NSX1JFR05VTSB8fCByZWdudW0gPT0gLTEpCi0rICAgIHJlZ2NhY2hlX3Jhd19zdXBwbHkgKHJlZ2NhY2hlLCBGUFNDUl9SRUdOVU0sIHJlZ3MgKyAzMio0KTsKLSsgIGlmIChyZWdudW0gPT0gRlBVTF9SRUdOVU0gfHwgcmVnbnVtID09IC0xKQotKyAgICByZWdjYWNoZV9yYXdfc3VwcGx5IChyZWdjYWNoZSwgRlBVTF9SRUdOVU0sIHJlZ3MgKyAzMyo0KTsKLSt9Ci0rCi0rLyogQ29sbGVjdCByZWdpc3RlciBSRUdOVU0gZnJvbSB0aGUgcmVnaXN0ZXIgY2FjaGUgUkVHQ0FDSEUgYW5kIHN0b3JlCi0rICAgaXQgaW4gdGhlIGJ1ZmZlciBzcGVjaWZpZWQgYnkgRlBSRUdTIGFuZCBMRU4gYXMgZGVzY3JpYmVkIGJ5IHRoZQotKyAgIGZsb2F0aW5nLXBvaW50IHJlZ2lzdGVyIHNldCBSRUdTRVQuICBJZiBSRUdOVU0gaXMgLTEsIGRvIHRoaXMgZm9yCi0rICAgYWxsIHJlZ2lzdGVycyBpbiBSRUdTRVQuICAqLwotKwotK3N0YXRpYyB2b2lkCi0rc2hfY29sbGVjdF9mcHJlZ3NldCAoY29uc3Qgc3RydWN0IHJlZ3NldCAqcmVnc2V0LAotKyAgICAgICAgICAgICAgIGNvbnN0IHN0cnVjdCByZWdjYWNoZSAqcmVnY2FjaGUsCi0rICAgICAgICAgICAgICAgaW50IHJlZ251bSwgdm9pZCAqZnByZWdzLCBzaXplX3QgbGVuKQotK3sKLSsgIGNvbnN0IHN0cnVjdCBnZGJhcmNoX3RkZXAgKnRkZXAgPSBnZGJhcmNoX3RkZXAgKHJlZ3NldC0+YXJjaCk7Ci0rICBjaGFyICpyZWdzID0gZnByZWdzOwotKyAgaW50IGk7Ci0rCi0rICBnZGJfYXNzZXJ0IChsZW4gPT0gdGRlcC0+c2l6ZW9mX2ZwcmVnc2V0KTsKLSsgIGZvciAoaSA9IDA7IGkgPCAxNjsgaSsrKQotKyAgICB7Ci0rICAgICAgaWYgKHJlZ251bSA9PSBpKzI1IHx8IHJlZ251bSA9PSAtMSkKLSsgICAgcmVnY2FjaGVfcmF3X2NvbGxlY3QgKHJlZ2NhY2hlLCBpKzI1LCByZWdzICsgaSo0KTsKLSsgICAgfQotKyAgaWYgKHJlZ251bSA9PSBGUFNDUl9SRUdOVU0gfHwgcmVnbnVtID09IC0xKQotKyAgICByZWdjYWNoZV9yYXdfY29sbGVjdCAocmVnY2FjaGUsIEZQU0NSX1JFR05VTSwgcmVncyArIDMyKjQpOwotKyAgaWYgKHJlZ251bSA9PSBGUFVMX1JFR05VTSB8fCByZWdudW0gPT0gLTEpCi0rICAgIHJlZ2NhY2hlX3Jhd19jb2xsZWN0IChyZWdjYWNoZSwgRlBVTF9SRUdOVU0sIHJlZ3MgKyAzMyo0KTsKLSt9Ci0rCi0rLyogUmV0dXJuIHRoZSBhcHByb3ByaWF0ZSByZWdpc3RlciBzZXQgZm9yIHRoZSBjb3JlIHNlY3Rpb24gaWRlbnRpZmllZAotKyAgIGJ5IFNFQ1RfTkFNRSBhbmQgU0VDVF9TSVpFLiAgKi8KLSsKLStjb25zdCBzdHJ1Y3QgcmVnc2V0ICoKLStzaF9saW51eF9yZWdzZXRfZnJvbV9jb3JlX3NlY3Rpb24gKHN0cnVjdCBnZGJhcmNoICpnZGJhcmNoLAotKyAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpzZWN0X25hbWUsIHNpemVfdCBzZWN0X3NpemUpCi0rewotKyAgc3RydWN0IGdkYmFyY2hfdGRlcCAqdGRlcCA9IGdkYmFyY2hfdGRlcCAoZ2RiYXJjaCk7Ci0rCi0rICBpZiAoc3RyY21wIChzZWN0X25hbWUsICIucmVnIikgPT0gMCAmJiBzZWN0X3NpemUgPT0gdGRlcC0+c2l6ZW9mX2dyZWdzZXQpCi0rICAgIHsKLSsgICAgICBpZiAodGRlcC0+Z3JlZ3NldCA9PSBOVUxMKQotKyAgICB0ZGVwLT5ncmVnc2V0ID0gcmVnc2V0X2FsbG9jIChnZGJhcmNoLCBzaF9zdXBwbHlfZ3JlZ3NldCwKLSsgICAgICAgICAgICAgICAgICAgICAgc2hfY29sbGVjdF9ncmVnc2V0KTsKLSsgICAgICByZXR1cm4gdGRlcC0+Z3JlZ3NldDsKLSsgICAgfQotKwotKyAgaWYgKChzdHJjbXAgKHNlY3RfbmFtZSwgIi5yZWcyIikgPT0gMCAmJiBzZWN0X3NpemUgPT0gdGRlcC0+c2l6ZW9mX2ZwcmVnc2V0KSkKLSsgICAgewotKyAgICAgIGlmICh0ZGVwLT5mcHJlZ3NldCA9PSBOVUxMKQotKyAgICB0ZGVwLT5mcHJlZ3NldCA9IHJlZ3NldF9hbGxvYyAoZ2RiYXJjaCwgc2hfc3VwcGx5X2ZwcmVnc2V0LAotKyAgICAgICAgICAgICAgICAgICAgICAgc2hfY29sbGVjdF9mcHJlZ3NldCk7Ci0rICAgICAgcmV0dXJuIHRkZXAtPmZwcmVnc2V0OwotKyAgICB9Ci0rCi0rICByZXR1cm4gTlVMTDsKLSt9Ci0rCi0rLyogVGhlIHJlZ2lzdGVyIHNldHMgdXNlZCBpbiBHTlUvTGludXggRUxGIGNvcmUtZHVtcHMgYXJlIGlkZW50aWNhbCB0bwotKyAgIHRoZSByZWdpc3RlciBzZXRzIGluIGBzdHJ1Y3QgdXNlcicgdGhhdCBhcmUgdXNlZCBmb3IgYS5vdXQKLSsgICBjb3JlLWR1bXBzLiAgVGhlc2UgYXJlIGFsc28gdXNlZCBieSBwdHJhY2UoMikuICBUaGUgY29ycmVzcG9uZGluZwotKyAgIHR5cGVzIGFyZSBgZWxmX2dyZWdzZXRfdCcgZm9yIHRoZSBnZW5lcmFsLXB1cnBvc2UgcmVnaXN0ZXJzICh3aXRoCi0rICAgYGVsZl9ncmVnX3QnIHRoZSB0eXBlIG9mIGEgc2luZ2xlIEdQIHJlZ2lzdGVyKSBhbmQgYGVsZl9mcHJlZ3NldF90JwotKyAgIGZvciB0aGUgZmxvYXRpbmctcG9pbnQgcmVnaXN0ZXJzLgotKwotKyAgIFRob3NlIHR5cGVzIHVzZWQgdG8gYmUgYXZhaWxhYmxlIHVuZGVyIHRoZSBuYW1lcyBgZ3JlZ3NldF90JyBhbmQKLSsgICBgZnByZWdzZXRfdCcgdG9vLCBhbmQgR0RCIHVzZWQgdGhvc2UgbmFtZXMgaW4gdGhlIHBhc3QuICBCdXQgdGhvc2UKLSsgICBuYW1lcyBhcmUgbm93IHVzZWQgZm9yIHRoZSByZWdpc3RlciBzZXRzIHVzZWQgaW4gdGhlIGBtY29udGV4dF90JwotKyAgIHR5cGUsIHdoaWNoIGhhdmUgYSBkaWZmZXJlbnQgc2l6ZSBhbmQgbGF5b3V0LiAgKi8KLSsKLSsvKiBNYXBwaW5nIGJldHdlZW4gdGhlIGdlbmVyYWwtcHVycG9zZSByZWdpc3RlcnMgaW4gYHN0cnVjdCB1c2VyJwotKyAgIGZvcm1hdCBhbmQgR0RCJ3MgcmVnaXN0ZXIgY2FjaGUgbGF5b3V0LiAgKi8KLSsKLSsvKiBGcm9tIDxzeXMvcmVnLmg+LiAgKi8KLStzdGF0aWMgaW50IHNoX2xpbnV4X2dyZWdzZXRfcmVnX29mZnNldFtdID0KLSt7Ci0rIDAsCTQsCTgsCTEyLAkxNiwJMjAsCTI0LAkyOCwKLSsgMzIsCTM2LAk0MCwJNDQsCTQ4LAk1MiwJNTYsCTYwLAotKwotKyBSRUdfUEMqNCwgICBSRUdfUFIqNCwgICBSRUdfR0JSKjQsICAtMSwKLSsgUkVHX01BQ0gqNCwgUkVHX01BQ0wqNCwgUkVHX1NSKjQsCi0rfTsKLSsKLSsvKiBNYXBwaW5nIGJldHdlZW4gdGhlIGdlbmVyYWwtcHVycG9zZSByZWdpc3RlcnMgaW4gYHN0cnVjdAotKyAgIHNpZ2NvbnRleHQnIGZvcm1hdCBhbmQgR0RCJ3MgcmVnaXN0ZXIgY2FjaGUgbGF5b3V0LiAgKi8KLSsKLSsvKiBGcm9tIDxhc20vc2lnY29udGV4dC5oPi4gICovCi0rc3RhdGljIGludCBzaF9saW51eF9zY19yZWdfb2Zmc2V0W10gPQotK3sKLSsgNCwJOCwJMTIsCTE2LAkyMCwJMjQsCTI4LAkzMiwKLSsgMzYsCTQwLAk0NCwJNDgsCTUyLAk1NiwJNjAsCTY0LAotKyA2OCwJNzIsCTgwLAktMSwKLSsgODQsCTg4LAk3NgotK307Ci0rCi0gc3RhdGljIHZvaWQKLSBzaF9saW51eF9pbml0X2FiaSAoc3RydWN0IGdkYmFyY2hfaW5mbyBpbmZvLCBzdHJ1Y3QgZ2RiYXJjaCAqZ2RiYXJjaCkKLSB7Ci0rICBzdHJ1Y3QgZ2RiYXJjaF90ZGVwICp0ZGVwID0gZ2RiYXJjaF90ZGVwIChnZGJhcmNoKTsKLSsgIGJmZCBhYmZkOwotKwotKyAgdGRlcC0+Z3JlZ3NldF9yZWdfb2Zmc2V0ID0gc2hfbGludXhfZ3JlZ3NldF9yZWdfb2Zmc2V0OwotKyAgdGRlcC0+Z3JlZ3NldF9udW1fcmVncyA9IEFSUkFZX1NJWkUgKHNoX2xpbnV4X2dyZWdzZXRfcmVnX29mZnNldCk7Ci0rICB0ZGVwLT5zaXplb2ZfZ3JlZ3NldCA9IDIzICogNDsKLSsKLSsgIHRkZXAtPmpiX3BjX29mZnNldCA9IDMyOyAgICAgLyogRnJvbSA8Yml0cy9zZXRqbXAuaD4uICAqLwotKwotKyAgdGRlcC0+c2lndHJhbXBfcCA9IHNoX2xpbnV4X3NpZ3RyYW1wX3A7Ci0rICB0ZGVwLT5zaWdjb250ZXh0X2FkZHIgPSBzaF9saW51eF9zaWdjb250ZXh0X2FkZHI7Ci0rICB0ZGVwLT5zY19yZWdfb2Zmc2V0ID0gc2hfbGludXhfc2NfcmVnX29mZnNldDsKLSsgIHRkZXAtPnNjX251bV9yZWdzID0gQVJSQVlfU0laRSAoc2hfbGludXhfc2NfcmVnX29mZnNldCk7Ci0rCi0rICBmcmFtZV91bndpbmRfYXBwZW5kX3Vud2luZGVyKGdkYmFyY2gsICZzaF9saW51eF9zaWd0cmFtcF9mcmFtZV91bndpbmQpOwotKwotKyAgLyogSWYgd2UgaGF2ZSBhIHJlZ2lzdGVyIG1hcHBpbmcsIGVuYWJsZSB0aGUgZ2VuZXJpYyBjb3JlIGZpbGUKLSsgICAgIHN1cHBvcnQsIHVubGVzcyBpdCBoYXMgYWxyZWFkeSBiZWVuIGVuYWJsZWQuICAqLwotKyAgaWYgKHRkZXAtPmdyZWdzZXRfcmVnX29mZnNldAotKyAgICAgICYmICFnZGJhcmNoX3JlZ3NldF9mcm9tX2NvcmVfc2VjdGlvbl9wIChnZGJhcmNoKSkKLSsgICAgc2V0X2dkYmFyY2hfcmVnc2V0X2Zyb21fY29yZV9zZWN0aW9uIChnZGJhcmNoLAotKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2hfbGludXhfcmVnc2V0X2Zyb21fY29yZV9zZWN0aW9uKTsKLSsKLSAgIGxpbnV4X2luaXRfYWJpIChpbmZvLCBnZGJhcmNoKTsKLSAKLSAgIC8qIEdOVS9MaW51eCB1c2VzIFNWUjQtc3R5bGUgc2hhcmVkIGxpYnJhcmllcy4gICovCi1kaWZmIC0tZ2l0IGEvZ2RiL3NoLXRkZXAuYyBiL2dkYi9zaC10ZGVwLmMKLWluZGV4IDgyY2YyZjQuLmI0NDNlNDYgMTAwNjQ0Ci0tLS0gYS9nZGIvc2gtdGRlcC5jCi0rKysgYi9nZGIvc2gtdGRlcC5jCi1AQCAtMjEsNiArMjEsOSBAQAotICAgIHNhY0BjeWdudXMuY29tLiAgKi8KLSAKLSAjaW5jbHVkZSAiZGVmcy5oIgotKyNpbmNsdWRlICJhcmNoLXV0aWxzLmgiCi0rI2luY2x1ZGUgImNvbW1hbmQuaCIKLSsjaW5jbHVkZSAiZHVtbXktZnJhbWUuaCIKLSAjaW5jbHVkZSAiZnJhbWUuaCIKLSAjaW5jbHVkZSAiZnJhbWUtYmFzZS5oIgotICNpbmNsdWRlICJmcmFtZS11bndpbmQuaCIKLUBAIC0zNSw2ICszOCw3IEBACi0gI2luY2x1ZGUgImFyY2gtdXRpbHMuaCIKLSAjaW5jbHVkZSAiZmxvYXRmb3JtYXQuaCIKLSAjaW5jbHVkZSAicmVnY2FjaGUuaCIKLSsjaW5jbHVkZSAicmVnc2V0LmgiCi0gI2luY2x1ZGUgImRvdWJsZXN0LmgiCi0gI2luY2x1ZGUgIm9zYWJpLmgiCi0gI2luY2x1ZGUgInJlZ2dyb3Vwcy5oIgotQEAgLTY3LDIzICs3MSw2IEBAIHN0YXRpYyBjb25zdCBjaGFyICpjb25zdCBzaF9jY19lbnVtW10gPSB7Ci0gCi0gc3RhdGljIGNvbnN0IGNoYXIgKnNoX2FjdGl2ZV9jYWxsaW5nX2NvbnZlbnRpb24gPSBzaF9jY19nY2M7Ci0gCi0tI2RlZmluZSBTSF9OVU1fUkVHUyA2NwotLQotLXN0cnVjdCBzaF9mcmFtZV9jYWNoZQotLXsKLS0gIC8qIEJhc2UgYWRkcmVzcy4gICovCi0tICBDT1JFX0FERFIgYmFzZTsKLS0gIExPTkdFU1Qgc3Bfb2Zmc2V0OwotLSAgQ09SRV9BRERSIHBjOwotLQotLSAgLyogRmxhZyBzaG93aW5nIHRoYXQgYSBmcmFtZSBoYXMgYmVlbiBjcmVhdGVkIGluIHRoZSBwcm9sb2d1ZSBjb2RlLiAgKi8KLS0gIGludCB1c2VzX2ZwOwotLQotLSAgLyogU2F2ZWQgcmVnaXN0ZXJzLiAgKi8KLS0gIENPUkVfQUREUiBzYXZlZF9yZWdzW1NIX05VTV9SRUdTXTsKLS0gIENPUkVfQUREUiBzYXZlZF9zcDsKLS19OwotLQotIHN0YXRpYyBpbnQKLSBzaF9pc19yZW5lc2FzX2NhbGxpbmdfY29udmVudGlvbiAoc3RydWN0IHR5cGUgKmZ1bmNfdHlwZSkKLSB7Ci1AQCAtMTA0Myw3ICsxMDMwLDcgQEAgc2hfdHJlYXRfYXNfZmx0X3AgKHN0cnVjdCB0eXBlICp0eXBlKQotICAgICByZXR1cm4gMDsKLSAgIC8qIE90aGVyd2lzZSBpZiB0aGUgdHlwZSBvZiB0aGF0IG1lbWJlciBpcyBmbG9hdCwgdGhlIHdob2xlIHR5cGUgaXMKLSAgICAgIHRyZWF0ZWQgYXMgZmxvYXQuICAqLwotLSAgaWYgKFRZUEVfQ09ERSAoVFlQRV9GSUVMRF9UWVBFICh0eXBlLCAwKSkgPT0gVFlQRV9DT0RFX0ZMVCkKLSsgIGlmIChUWVBFX0NPREUgKGNoZWNrX3R5cGVkZWYgKFRZUEVfRklFTERfVFlQRSAodHlwZSwgMCkpKSA9PSBUWVBFX0NPREVfRkxUKQotICAgICByZXR1cm4gMTsKLSAgIC8qIE90aGVyd2lzZSBpdCdzIG5vdCB0cmVhdGVkIGFzIGZsb2F0LiAgKi8KLSAgIHJldHVybiAwOwotQEAgLTEwOTMsNyArMTA4MCw3IEBAIHNoX3B1c2hfZHVtbXlfY2FsbF9mcHUgKHN0cnVjdCBnZGJhcmNoICpnZGJhcmNoLAotICAgICAgaW4gZm91ciByZWdpc3RlcnMgYXZhaWxhYmxlLiAgTG9vcCB0aHJ1IGFyZ3MgZnJvbSBmaXJzdCB0byBsYXN0LiAgKi8KLSAgIGZvciAoYXJnbnVtID0gMDsgYXJnbnVtIDwgbmFyZ3M7IGFyZ251bSsrKQotICAgICB7Ci0tICAgICAgdHlwZSA9IHZhbHVlX3R5cGUgKGFyZ3NbYXJnbnVtXSk7Ci0rICAgICAgdHlwZSA9IGNoZWNrX3R5cGVkZWYgKHZhbHVlX3R5cGUgKGFyZ3NbYXJnbnVtXSkpOwotICAgICAgIGxlbiA9IFRZUEVfTEVOR1RIICh0eXBlKTsKLSAgICAgICB2YWwgPSBzaF9qdXN0aWZ5X3ZhbHVlX2luX3JlZyAoZ2RiYXJjaCwgYXJnc1thcmdudW1dLCBsZW4pOwotIAotQEAgLTE4MjEsNyArMTgwOCw3IEBAIHNoX2R3YXJmMl9mcmFtZV9pbml0X3JlZyAoc3RydWN0IGdkYmFyY2ggKmdkYmFyY2gsIGludCByZWdudW0sCi0gICAgIHJlZy0+aG93ID0gRFdBUkYyX0ZSQU1FX1JFR19VTkRFRklORUQ7Ci0gfQotIAotLXN0YXRpYyBzdHJ1Y3Qgc2hfZnJhbWVfY2FjaGUgKgotK3N0cnVjdCBzaF9mcmFtZV9jYWNoZSAqCi0gc2hfYWxsb2NfZnJhbWVfY2FjaGUgKHZvaWQpCi0gewotICAgc3RydWN0IHNoX2ZyYW1lX2NhY2hlICpjYWNoZTsKLUBAIC0xODQ4LDcgKzE4MzUsNyBAQCBzaF9hbGxvY19mcmFtZV9jYWNoZSAodm9pZCkKLSAgIHJldHVybiBjYWNoZTsKLSB9Ci0gCi0tc3RhdGljIHN0cnVjdCBzaF9mcmFtZV9jYWNoZSAqCi0rc3RydWN0IHNoX2ZyYW1lX2NhY2hlICoKLSBzaF9mcmFtZV9jYWNoZSAoc3RydWN0IGZyYW1lX2luZm8gKnRoaXNfZnJhbWUsIHZvaWQgKip0aGlzX2NhY2hlKQotIHsKLSAgIHN0cnVjdCBnZGJhcmNoICpnZGJhcmNoID0gZ2V0X2ZyYW1lX2FyY2ggKHRoaXNfZnJhbWUpOwotQEAgLTE5MTUsOSArMTkwMiw5IEBAIHNoX2ZyYW1lX2NhY2hlIChzdHJ1Y3QgZnJhbWVfaW5mbyAqdGhpc19mcmFtZSwgdm9pZCAqKnRoaXNfY2FjaGUpCi0gICByZXR1cm4gY2FjaGU7Ci0gfQotIAotLXN0YXRpYyBzdHJ1Y3QgdmFsdWUgKgotLXNoX2ZyYW1lX3ByZXZfcmVnaXN0ZXIgKHN0cnVjdCBmcmFtZV9pbmZvICp0aGlzX2ZyYW1lLAotLQkJCXZvaWQgKip0aGlzX2NhY2hlLCBpbnQgcmVnbnVtKQotK3N0cnVjdCB2YWx1ZSAqCi0rc2hfZnJhbWVfcHJldl9yZWdpc3RlciAoc3RydWN0IGZyYW1lX2luZm8gKnRoaXNfZnJhbWUsIHZvaWQgKip0aGlzX2NhY2hlLAotKwkJCWludCByZWdudW0pCi0gewotICAgc3RydWN0IGdkYmFyY2ggKmdkYmFyY2ggPSBnZXRfZnJhbWVfYXJjaCAodGhpc19mcmFtZSk7Ci0gICBzdHJ1Y3Qgc2hfZnJhbWVfY2FjaGUgKmNhY2hlID0gc2hfZnJhbWVfY2FjaGUgKHRoaXNfZnJhbWUsIHRoaXNfY2FjaGUpOwotQEAgLTE5MzEsNyArMTkxOCw3IEBAIHNoX2ZyYW1lX3ByZXZfcmVnaXN0ZXIgKHN0cnVjdCBmcmFtZV9pbmZvICp0aGlzX2ZyYW1lLAotICAgICAgdGhlIGN1cnJlbnQgZnJhbWUuICBGcm9iIHJlZ251bSBzbyB0aGF0IHdlIHB1bGwgdGhlIHZhbHVlIGZyb20KLSAgICAgIHRoZSBjb3JyZWN0IHBsYWNlLiAgKi8KLSAgIGlmIChyZWdudW0gPT0gZ2RiYXJjaF9wY19yZWdudW0gKGdkYmFyY2gpKQotLSAgICByZWdudW0gPSBQUl9SRUdOVU07Ci0rICAgIHJlZ251bSA9IFBSX1JFR05VTTsgLyogWFhYOiByZWFsbHk/ICovCi0gCi0gICBpZiAocmVnbnVtIDwgU0hfTlVNX1JFR1MgJiYgY2FjaGUtPnNhdmVkX3JlZ3NbcmVnbnVtXSAhPSAtMSkKLSAgICAgcmV0dXJuIGZyYW1lX3Vud2luZF9nb3RfbWVtb3J5ICh0aGlzX2ZyYW1lLCByZWdudW0sCi1AQCAtMjIzNyw4ICsyMjI0LDggQEAgc2hfcmV0dXJuX2luX2ZpcnN0X2hpZGRlbl9wYXJhbV9wIChzdHJ1Y3QgZ2RiYXJjaCAqZ2RiYXJjaCwKLSBzdGF0aWMgc3RydWN0IGdkYmFyY2ggKgotIHNoX2dkYmFyY2hfaW5pdCAoc3RydWN0IGdkYmFyY2hfaW5mbyBpbmZvLCBzdHJ1Y3QgZ2RiYXJjaF9saXN0ICphcmNoZXMpCi0gewotLSAgc3RydWN0IGdkYmFyY2ggKmdkYmFyY2g7Ci0gICBzdHJ1Y3QgZ2RiYXJjaF90ZGVwICp0ZGVwOwotKyAgc3RydWN0IGdkYmFyY2ggKmdkYmFyY2g7Ci0gCi0gICAvKiBTSDUgaXMgaGFuZGxlZCBlbnRpcmVseSBpbiBzaDY0LXRkZXAuYy4gICovCi0gICBpZiAoaW5mby5iZmRfYXJjaF9pbmZvLT5tYWNoID09IGJmZF9tYWNoX3NoNSkKLUBAIC0yMjU0LDYgKzIyNDEsMTggQEAgc2hfZ2RiYXJjaF9pbml0IChzdHJ1Y3QgZ2RiYXJjaF9pbmZvIGluZm8sIHN0cnVjdCBnZGJhcmNoX2xpc3QgKmFyY2hlcykKLSAgIHRkZXAgPSBYQ05FVyAoc3RydWN0IGdkYmFyY2hfdGRlcCk7Ci0gICBnZGJhcmNoID0gZ2RiYXJjaF9hbGxvYyAoJmluZm8sIHRkZXApOwotIAotKyAgLyogR2VuZXJhbC1wdXJwb3NlIHJlZ2lzdGVycy4gICovCi0rICB0ZGVwLT5ncmVnc2V0ID0gTlVMTDsKLSsgIHRkZXAtPmdyZWdzZXRfcmVnX29mZnNldCA9IE5VTEw7Ci0rICB0ZGVwLT5ncmVnc2V0X251bV9yZWdzID0gMjM7Ci0rICB0ZGVwLT5zaXplb2ZfZ3JlZ3NldCA9IDA7Ci0rCi0rICAvKiBGbG9hdGluZy1wb2ludCByZWdpc3RlcnMuICAqLwotKyAgdGRlcC0+ZnByZWdzZXQgPSBOVUxMOwotKyAgdGRlcC0+c2l6ZW9mX2ZwcmVnc2V0ID0gMzQqNDsKLSsKLSsgIHRkZXAtPmpiX3BjX29mZnNldCA9IC0xOwotKwotICAgc2V0X2dkYmFyY2hfc2hvcnRfYml0IChnZGJhcmNoLCAyICogVEFSR0VUX0NIQVJfQklUKTsKLSAgIHNldF9nZGJhcmNoX2ludF9iaXQgKGdkYmFyY2gsIDQgKiBUQVJHRVRfQ0hBUl9CSVQpOwotICAgc2V0X2dkYmFyY2hfbG9uZ19iaXQgKGdkYmFyY2gsIDQgKiBUQVJHRVRfQ0hBUl9CSVQpOwotQEAgLTI0MDQsMTAgKzI0MDMsMTEgQEAgc2hfZ2RiYXJjaF9pbml0IChzdHJ1Y3QgZ2RiYXJjaF9pbmZvIGluZm8sIHN0cnVjdCBnZGJhcmNoX2xpc3QgKmFyY2hlcykKLSAgICAgICBicmVhazsKLSAgICAgfQotIAotKyAgZHdhcmYyX2FwcGVuZF91bndpbmRlcnMgKGdkYmFyY2gpOwotKwotICAgLyogSG9vayBpbiBBQkktc3BlY2lmaWMgb3ZlcnJpZGVzLCBpZiB0aGV5IGhhdmUgYmVlbiByZWdpc3RlcmVkLiAgKi8KLSAgIGdkYmFyY2hfaW5pdF9vc2FiaSAoaW5mbywgZ2RiYXJjaCk7Ci0gCi0tICBkd2FyZjJfYXBwZW5kX3Vud2luZGVycyAoZ2RiYXJjaCk7Ci0gICBmcmFtZV91bndpbmRfYXBwZW5kX3Vud2luZGVyIChnZGJhcmNoLCAmc2hfc3R1Yl91bndpbmQpOwotICAgZnJhbWVfdW53aW5kX2FwcGVuZF91bndpbmRlciAoZ2RiYXJjaCwgJnNoX2ZyYW1lX3Vud2luZCk7Ci0gCi1kaWZmIC0tZ2l0IGEvZ2RiL3NoLXRkZXAuaCBiL2dkYi9zaC10ZGVwLmgKLWluZGV4IGZjNjcxYTUuLjY5OWY1OWYgMTAwNjQ0Ci0tLS0gYS9nZGIvc2gtdGRlcC5oCi0rKysgYi9nZGIvc2gtdGRlcC5oCi1AQCAtMjEsNiArMjEsMTIgQEAKLSAKLSAvKiBDb250cmlidXRlZCBieSBTdGV2ZSBDaGFtYmVybGFpbiBzYWNAY3lnbnVzLmNvbS4gICovCi0gCi0rc3RydWN0IGZyYW1lX2luZm87Ci0rc3RydWN0IGdkYmFyY2g7Ci0rc3RydWN0IHJlZ2dyb3VwOwotK3N0cnVjdCByZWdzZXQ7Ci0rc3RydWN0IHJlZ2NhY2hlOwotKwotIC8qIFJlZ2lzdGVycyBmb3IgYWxsIFNIIHZhcmlhbnRzLiAgVXNlZCBhbHNvIGJ5IHNoMy1yb20uYy4gICovCi0gZW51bQotICAgewotQEAgLTI5LDYgKzM1LDcgQEAgZW51bQotICAgICBBUkcwX1JFR05VTSA9IDQsCi0gICAgIEFSR0xBU1RfUkVHTlVNID0gNywKLSAgICAgRlBfUkVHTlVNID0gMTQsCi0rICAgIFNQX1JFR05VTSA9IDE1LAotICAgICBQQ19SRUdOVU0gPSAxNiwKLSAgICAgUFJfUkVHTlVNID0gMTcsCi0gICAgIEdCUl9SRUdOVU0gPSAxOCwKLUBAIC04MSw2ICs4OCwyNCBAQCBlbnVtCi0gICAgIEZWMF9SRUdOVU0gPSA3NiwKLSAgICAgRlZfTEFTVF9SRUdOVU0gPSA3OQotICAgfTsKLSsjZGVmaW5lIFNIX05VTV9SRUdTIDY3Ci0rCi0rc3RydWN0IHNoX2ZyYW1lX2NhY2hlCi0rewotKyAgLyogQmFzZSBhZGRyZXNzLiAgKi8KLSsgIENPUkVfQUREUiBiYXNlOwotKyAgTE9OR0VTVCBzcF9vZmZzZXQ7Ci0rICBDT1JFX0FERFIgcGM7Ci0rCi0rICAvKiBGbGFnIHNob3dpbmcgdGhhdCBhIGZyYW1lIGhhcyBiZWVuIGNyZWF0ZWQgaW4gdGhlIHByb2xvZ3VlIGNvZGUuICovCi0rICBpbnQgdXNlc19mcDsKLSsKLSsgIC8qIFNhdmVkIHJlZ2lzdGVycy4gICovCi0rICBDT1JFX0FERFIgc2F2ZWRfcmVnc1tTSF9OVU1fUkVHU107Ci0rICBDT1JFX0FERFIgc2F2ZWRfc3A7Ci0rfTsKLSsKLStleHRlcm4gc3RydWN0IHNoX2ZyYW1lX2NhY2hlICpzaF9mcmFtZV9jYWNoZSAoc3RydWN0IGZyYW1lX2luZm8gKm5leHRfZnJhbWUsIHZvaWQgKip0aGlzX2NhY2hlKTsKLSAKLSAvKiBUaGlzIHN0cnVjdHVyZSBkZXNjcmliZXMgYSByZWdpc3RlciBpbiBhIGNvcmUtZmlsZS4gICovCi0gc3RydWN0IHNoX2NvcmVmaWxlX3JlZ21hcAotQEAgLTg5LDggKzExNCwzMiBAQCBzdHJ1Y3Qgc2hfY29yZWZpbGVfcmVnbWFwCi0gICB1bnNpZ25lZCBpbnQgb2Zmc2V0OwotIH07Ci0gCi0rLyogc2ggYXJjaGl0ZWN0dXJlIHNwZWNpZmljIGluZm9ybWF0aW9uLiAgKi8KLSBzdHJ1Y3QgZ2RiYXJjaF90ZGVwCi0gewotKyAgLyogR2VuZXJhbC1wdXJwb3NlIHJlZ2lzdGVycy4gICovCi0rICBzdHJ1Y3QgcmVnc2V0ICpncmVnc2V0OwotKyAgaW50ICpncmVnc2V0X3JlZ19vZmZzZXQ7Ci0rICBpbnQgZ3JlZ3NldF9udW1fcmVnczsKLSsgIHNpemVfdCBzaXplb2ZfZ3JlZ3NldDsKLSsKLSsgIC8qIEZsb2F0aW5nLXBvaW50IHJlZ2lzdGVycy4gICovCi0rICBzdHJ1Y3QgcmVnc2V0ICpmcHJlZ3NldDsKLSsgIHNpemVfdCBzaXplb2ZfZnByZWdzZXQ7Ci0rCi0rICAvKiBPZmZzZXQgb2Ygc2F2ZWQgUEMgaW4gam1wX2J1Zi4gICovCi0rICBpbnQgamJfcGNfb2Zmc2V0OwotKwotKyAgLyogRGV0ZWN0IHNpZ3RyYW1wLiAgKi8KLSsgIGludCAoKnNpZ3RyYW1wX3ApIChzdHJ1Y3QgZnJhbWVfaW5mbyAqKTsKLSsKLSsgIC8qIEdldCBhZGRyZXNzIG9mIHNpZ2NvbnRleHQgZm9yIHNpZ3RyYW1wLiAgKi8KLSsgIENPUkVfQUREUiAoKnNpZ2NvbnRleHRfYWRkcikgKHN0cnVjdCBmcmFtZV9pbmZvICopOwotKwotKyAgLyogT2Zmc2V0IG9mIHJlZ2lzdGVycyBpbiBgc3RydWN0IHNpZ2NvbnRleHQnLiAgKi8KLSsgIGludCAqc2NfcmVnX29mZnNldDsKLSsgIGludCBzY19udW1fcmVnczsKLSsKLSAgIC8qIE5vbi1OVUxMIHdoZW4gZGVidWdnaW5nIGZyb20gYSBjb3JlIGZpbGUuICBQcm92aWRlcyB0aGUgb2Zmc2V0Ci0gICAgICB3aGVyZSBlYWNoIGdlbmVyYWwtcHVycG9zZSByZWdpc3RlciBpcyBzdG9yZWQgaW5zaWRlIHRoZSBhc3NvY2lhdGVkCi0gICAgICBjb3JlIGZpbGUgc2VjdGlvbi4gICovCi1kaWZmIC0tZ2l0IGEvZ2RiL3Rlc3RzdWl0ZS9nZGIuYXNtL2FzbS1zb3VyY2UuZXhwIGIvZ2RiL3Rlc3RzdWl0ZS9nZGIuYXNtL2FzbS1zb3VyY2UuZXhwCi1pbmRleCA4ODU0YWYwLi5lZjQ0NjgyIDEwMDY0NAotLS0tIGEvZ2RiL3Rlc3RzdWl0ZS9nZGIuYXNtL2FzbS1zb3VyY2UuZXhwCi0rKysgYi9nZGIvdGVzdHN1aXRlL2dkYi5hc20vYXNtLXNvdXJjZS5leHAKLUBAIC0xMTMsNiArMTEzLDExIEBAIHN3aXRjaCAtZ2xvYiAtLSBbaXN0YXJnZXRdIHsKLSAgICAgICAgICAgICBhcHBlbmQgbGluay1mbGFncyAiIC1tIGVsZjMycHBjIgotICAgICAgICAgfQotICAgICB9Ci0rICAgICJzaCotbGludXgqIiB7Ci0rICAgICAgICBzZXQgYXNtLWFyY2ggc2gtbGludXgKLSsgICAgICAgIHNldCBhc20tZmxhZ3MgIi1JJHtzcmNkaXJ9LyR7c3ViZGlyfSAtSSR7b2JqZGlyfS8ke3N1YmRpcn0iCi0rCXNldCBkZWJ1Zy1mbGFncyAiLWdkd2FyZi0yIgotKyAgICB9Ci0gICAgICJzaCotKi0qIiB7Ci0gICAgICAgICBzZXQgYXNtLWFyY2ggc2gKLSAJc2V0IGRlYnVnLWZsYWdzICItZ2R3YXJmLTIiCi1kaWZmIC0tZ2l0IGEvZ2RiL3Rlc3RzdWl0ZS9nZGIuYXNtL3NoLmluYyBiL2dkYi90ZXN0c3VpdGUvZ2RiLmFzbS9zaC5pbmMKLWluZGV4IGE0YTVmYzUuLjg5ZWZlZDcgMTAwNjQ0Ci0tLS0gYS9nZGIvdGVzdHN1aXRlL2dkYi5hc20vc2guaW5jCi0rKysgYi9nZGIvdGVzdHN1aXRlL2dkYi5hc20vc2guaW5jCi1AQCAtNDAsOSArNDAsOCBAQAotIAltb3YubCAgIC5MY29uc3RcQCxyMQotIAlicmEJLkxhZnRlcmNvbnN0XEAKLSAJbm9wCi0tCW5vcAotLS5MY29uc3RcQDoKLSAJLmFsaWduCTIKLSsuTGNvbnN0XEA6Ci0gCS5sb25nCVxzdWJyCi0gCS5hbGlnbgkxCi0gLkxhZnRlcmNvbnN0XEA6Ci1kaWZmIC0tZ2l0IGEvZ2RiL3Rlc3RzdWl0ZS9nZGIuYmFzZS9hbm5vdGExLmMgYi9nZGIvdGVzdHN1aXRlL2dkYi5iYXNlL2Fubm90YTEuYwotaW5kZXggNDI0ZTFiOC4uMGRlMmU3YiAxMDA2NDQKLS0tLSBhL2dkYi90ZXN0c3VpdGUvZ2RiLmJhc2UvYW5ub3RhMS5jCi0rKysgYi9nZGIvdGVzdHN1aXRlL2dkYi5iYXNlL2Fubm90YTEuYwotQEAgLTEsNiArMSw5IEBACi0gI2luY2x1ZGUgPHN0ZGlvLmg+Ci0gI2luY2x1ZGUgPHNpZ25hbC5oPgotIAotKyNpZmRlZiBfX3NoX18KLSsjZGVmaW5lIHNpZ25hbChhLGIpICAgIC8qIFNpZ25hbHMgbm90IHN1cHBvcnRlZCBvbiB0aGlzIHRhcmdldCAtIG1ha2UgdGhlbSBnbyBhd2F5ICovCi0rI2VuZGlmCi0gCi0gdm9pZAotIGhhbmRsZV9VU1IxIChpbnQgc2lnKQotZGlmZiAtLWdpdCBhL2dkYi90ZXN0c3VpdGUvZ2RiLmJhc2UvYW5ub3RhMy5jIGIvZ2RiL3Rlc3RzdWl0ZS9nZGIuYmFzZS9hbm5vdGEzLmMKLWluZGV4IDQyNGUxYjguLjk1MmFhZjIgMTAwNjQ0Ci0tLS0gYS9nZGIvdGVzdHN1aXRlL2dkYi5iYXNlL2Fubm90YTMuYwotKysrIGIvZ2RiL3Rlc3RzdWl0ZS9nZGIuYmFzZS9hbm5vdGEzLmMKLUBAIC0xLDYgKzEsMTAgQEAKLSAjaW5jbHVkZSA8c3RkaW8uaD4KLSAjaW5jbHVkZSA8c2lnbmFsLmg+Ci0gCi0rI2lmZGVmIF9fc2hfXwotKyNkZWZpbmUgc2lnbmFsKGEsYikgICAgLyogU2lnbmFscyBub3Qgc3VwcG9ydGVkIG9uIHRoaXMgdGFyZ2V0IC0gbWFrZSB0aGVtIGdvIGF3YXkgKi8KLSsjZW5kaWYKLSsKLSAKLSB2b2lkCi0gaGFuZGxlX1VTUjEgKGludCBzaWcpCi1kaWZmIC0tZ2l0IGEvZ2RiL3Rlc3RzdWl0ZS9nZGIuYmFzZS9zaWdhbGwuYyBiL2dkYi90ZXN0c3VpdGUvZ2RiLmJhc2Uvc2lnYWxsLmMKLWluZGV4IDgxZjNiMDguLjE1NzRiMmQgMTAwNjQ0Ci0tLS0gYS9nZGIvdGVzdHN1aXRlL2dkYi5iYXNlL3NpZ2FsbC5jCi0rKysgYi9nZGIvdGVzdHN1aXRlL2dkYi5iYXNlL3NpZ2FsbC5jCi1AQCAtMSw2ICsxLDkgQEAKLSAjaW5jbHVkZSA8c2lnbmFsLmg+Ci0gI2luY2x1ZGUgPHVuaXN0ZC5oPgotIAotKyNpZmRlZiBfX3NoX18KLSsjZGVmaW5lIHNpZ25hbChhLGIpICAgIC8qIFNpZ25hbHMgbm90IHN1cHBvcnRlZCBvbiB0aGlzIHRhcmdldCAtIG1ha2UgdGhlbSBnbyBhd2F5ICovCi0rI2VuZGlmCi0gCi0gLyogU2lnbmFsIGhhbmRsZXJzLCB3ZSBzZXQgYnJlYWtwb2ludHMgaW4gdGhlbSB0byBtYWtlIHN1cmUgdGhhdCB0aGUKLSAgICBzaWduYWxzIHJlYWxseSBnZXQgZGVsaXZlcmVkLiAgKi8KLWRpZmYgLS1naXQgYS9nZGIvdGVzdHN1aXRlL2dkYi5iYXNlL3NpZ25hbHMuYyBiL2dkYi90ZXN0c3VpdGUvZ2RiLmJhc2Uvc2lnbmFscy5jCi1pbmRleCA3NTY2MDY4Li4xMjA1YTliIDEwMDY0NAotLS0tIGEvZ2RiL3Rlc3RzdWl0ZS9nZGIuYmFzZS9zaWduYWxzLmMKLSsrKyBiL2dkYi90ZXN0c3VpdGUvZ2RiLmJhc2Uvc2lnbmFscy5jCi1AQCAtMyw2ICszLDEwIEBACi0gI2luY2x1ZGUgPHNpZ25hbC5oPgotICNpbmNsdWRlIDx1bmlzdGQuaD4KLSAKLSsjaWZkZWYgX19zaF9fCi0rI2RlZmluZSBzaWduYWwoYSxiKSAgICAvKiBTaWduYWxzIG5vdCBzdXBwb3J0ZWQgb24gdGhpcyB0YXJnZXQgLSBtYWtlIHRoZW0gZ28gYXdheSAqLwotKyNkZWZpbmUgYWxhcm0oYSkgICAgICAgLyogRGl0dG8gZm9yIGFsYXJtKCkgKi8KLSsjZW5kaWYKLSAKLSBzdGF0aWMgaW50IGNvdW50ID0gMDsKLSAKLS0tIAotMi4xLjQKLQpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nZGIvZ2RiLzAwMDMtbWlwcy1saW51eC1uYXQtRGVmaW5lLV9BQklPMzItaWYtbm90LWRlZmluZWQucGF0Y2ggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2dkYi9nZGIvMDAwMy1taXBzLWxpbnV4LW5hdC1EZWZpbmUtX0FCSU8zMi1pZi1ub3QtZGVmaW5lZC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iYWM3OTM5Ci0tLSAvZGV2L251bGwKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nZGIvZ2RiLzAwMDMtbWlwcy1saW51eC1uYXQtRGVmaW5lLV9BQklPMzItaWYtbm90LWRlZmluZWQucGF0Y2gKQEAgLTAsMCArMSwzNyBAQAorRnJvbSA4OGU2N2NhZWQ2NjJkODM0NGM4ZGI1NjE3NmM5ZjEyMjFlNmNkMmEyIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KK0RhdGU6IFdlZCwgMjMgTWFyIDIwMTYgMDY6MzA6MDkgKzAwMDAKK1N1YmplY3Q6IFtQQVRDSCAwMy8xMF0gbWlwcy1saW51eC1uYXQ6IERlZmluZSBfQUJJTzMyIGlmIG5vdCBkZWZpbmVkCisKK1RoaXMgaGVscHMgYnVpbGRpbmcgZ2RiIG9uIG1pcHM2NCBvbiBtdXNsLCBzaW5jZQorbXVzbCBkb2VzIG5vdCBwcm92aWRlIHNnaWRlZnMuaCB0aGlzIGRlZmluZSBpcworb25seSBkZWZpbmVkIHdoZW4gR0NDIGlzIHVzaW5nIG8zMiBBQkksIGluIHRoYXQKK2Nhc2UgZ2NjIGVtaXRzIGl0IGFzIGJ1aWx0LWluIGRlZmluZSBhbmQgaGVuY2UKK2l0IHdvcmtzIG9rIGZvciBtaXBzMzIKKworU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KKy0tLQorVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKKyBnZGIvbWlwcy1saW51eC1uYXQuYyB8IDUgKysrKysKKyAxIGZpbGUgY2hhbmdlZCwgNSBpbnNlcnRpb25zKCspCisKK2RpZmYgLS1naXQgYS9nZGIvbWlwcy1saW51eC1uYXQuYyBiL2dkYi9taXBzLWxpbnV4LW5hdC5jCitpbmRleCBiZmU5ZmNiLi40NDliNDNhIDEwMDY0NAorLS0tIGEvZ2RiL21pcHMtbGludXgtbmF0LmMKKysrKyBiL2dkYi9taXBzLWxpbnV4LW5hdC5jCitAQCAtNDYsNiArNDYsMTEgQEAKKyAjZGVmaW5lIFBUUkFDRV9HRVRfVEhSRUFEX0FSRUEgMjUKKyAjZW5kaWYKKyAKKysvKiBtdXNsIGRvZXMgbm90IGRlZmluZSBhbmQgcmVsaWVzIG9uIGNvbXBpbGVyIGJ1aWx0LWluIG1hY3JvcyBmb3IgaXQgICAqLworKyNpZm5kZWYgX0FCSU8zMgorKyNkZWZpbmUgX0FCSU8zMiAxCisrI2VuZGlmCisrCisgLyogQXNzdW1lIHRoYXQgd2UgaGF2ZSBQVFJBQ0VfR0VUUkVHUyBldCBhbC4gc3VwcG9ydC4gIElmIHdlIGRvIG5vdCwKKyAgICB3ZSdsbCBjbGVhciB0aGlzIGFuZCB1c2UgUFRSQUNFX1BFRUtVU0VSIGluc3RlYWQuICAqLworIHN0YXRpYyBpbnQgaGF2ZV9wdHJhY2VfcmVnc2V0cyA9IDE7CistLSAKKzIuOC4yCisKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2RiL2dkYi8wMDA0LXBwYy1wdHJhY2UtRGVmaW5lLXB0X3JlZ3MtdWFwaV9wdF9yZWdzLW9uLUdMSUJDLXN5c3QucGF0Y2ggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2dkYi9nZGIvMDAwNC1wcGMtcHRyYWNlLURlZmluZS1wdF9yZWdzLXVhcGlfcHRfcmVncy1vbi1HTElCQy1zeXN0LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE1ZmUyYTIKLS0tIC9kZXYvbnVsbAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2dkYi9nZGIvMDAwNC1wcGMtcHRyYWNlLURlZmluZS1wdF9yZWdzLXVhcGlfcHRfcmVncy1vbi1HTElCQy1zeXN0LnBhdGNoCkBAIC0wLDAgKzEsNTMgQEAKK0Zyb20gYmVjNTY0ZWI0NTRiYzdmYzZlY2ZjYjU3M2FhNTMwNDBiZjM5YzFkNSBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CitEYXRlOiBTYXQsIDMwIEFwciAyMDE2IDE2OjQ2OjAzICswMDAwCitTdWJqZWN0OiBbUEFUQ0ggMDQvMTBdIHBwYy9wdHJhY2U6IERlZmluZSBwdF9yZWdzIHVhcGlfcHRfcmVncyBvbiAhR0xJQkMKKyBzeXN0ZW1zCisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitTaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorLS0tCisgZ2RiL2dkYnNlcnZlci9saW51eC1wcGMtbG93LmMgfCA2ICsrKysrKworIGdkYi9uYXQvcHBjLWxpbnV4LmggICAgICAgICAgIHwgNiArKysrKysKKyAyIGZpbGVzIGNoYW5nZWQsIDEyIGluc2VydGlvbnMoKykKKworZGlmZiAtLWdpdCBhL2dkYi9nZGJzZXJ2ZXIvbGludXgtcHBjLWxvdy5jIGIvZ2RiL2dkYnNlcnZlci9saW51eC1wcGMtbG93LmMKK2luZGV4IDIxNDVjNTAuLjc3NzkwNWQgMTAwNjQ0CistLS0gYS9nZGIvZ2Ric2VydmVyL2xpbnV4LXBwYy1sb3cuYworKysrIGIvZ2RiL2dkYnNlcnZlci9saW51eC1wcGMtbG93LmMKK0BAIC0yMSw3ICsyMSwxMyBAQAorICNpbmNsdWRlICJsaW51eC1sb3cuaCIKKyAKKyAjaW5jbHVkZSA8ZWxmLmg+CisrI2lmICFkZWZpbmVkKF9fR0xJQkNfXykKKysjIGRlZmluZSBwdF9yZWdzIHVhcGlfcHRfcmVncworKyNlbmRpZgorICNpbmNsdWRlIDxhc20vcHRyYWNlLmg+CisrI2lmICFkZWZpbmVkKF9fR0xJQkNfXykKKysjIHVuZGVmIHB0X3JlZ3MKKysjZW5kaWYKKyAKKyAjaW5jbHVkZSAibmF0L3BwYy1saW51eC5oIgorIAorZGlmZiAtLWdpdCBhL2dkYi9uYXQvcHBjLWxpbnV4LmggYi9nZGIvbmF0L3BwYy1saW51eC5oCitpbmRleCA4NWZiY2Q4Li5jYmVjOWM1IDEwMDY0NAorLS0tIGEvZ2RiL25hdC9wcGMtbGludXguaAorKysrIGIvZ2RiL25hdC9wcGMtbGludXguaAorQEAgLTE4LDcgKzE4LDEzIEBACisgI2lmbmRlZiBQUENfTElOVVhfSAorICNkZWZpbmUgUFBDX0xJTlVYX0ggMQorIAorKyNpZiAhZGVmaW5lZChfX0dMSUJDX18pCisrIyBkZWZpbmUgcHRfcmVncyB1YXBpX3B0X3JlZ3MKKysjZW5kaWYKKyAjaW5jbHVkZSA8YXNtL3B0cmFjZS5oPgorKyNpZiAhZGVmaW5lZChfX0dMSUJDX18pCisrIyB1bmRlZiBwdF9yZWdzCisrI2VuZGlmCisgI2luY2x1ZGUgPGFzbS9jcHV0YWJsZS5oPgorIAorIC8qIFRoaXMgc29tZXRpbWVzIGlzbid0IGRlZmluZWQuICAqLworLS0gCisyLjguMgorCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2dkYi9nZGIvMDAwNS1BZGQtc3VwcG9ydC1mb3ItUmVuZXNhcy1TSC1zaDQtYXJjaGl0ZWN0dXJlLnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nZGIvZ2RiLzAwMDUtQWRkLXN1cHBvcnQtZm9yLVJlbmVzYXMtU0gtc2g0LWFyY2hpdGVjdHVyZS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ODA5ZTZmCi0tLSAvZGV2L251bGwKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nZGIvZ2RiLzAwMDUtQWRkLXN1cHBvcnQtZm9yLVJlbmVzYXMtU0gtc2g0LWFyY2hpdGVjdHVyZS5wYXRjaApAQCAtMCwwICsxLDkyMSBAQAorRnJvbSA4YzVmZTU4YzVhMDA0NGRkYjUxN2E0MWIyNzdlZDI3ZmIzZDNiZWRjIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KK0RhdGU6IE1vbiwgMiBNYXIgMjAxNSAwMjozMToxMiArMDAwMAorU3ViamVjdDogW1BBVENIIDA1LzEwXSBBZGQgc3VwcG9ydCBmb3IgUmVuZXNhcyBTSCAoc2g0KSBhcmNoaXRlY3R1cmUuCisKK2dkYiAoNy40LTF+Y3ZzMjAxMTExMTcuMikgZXhwZXJpbWVudGFsOyB1cmdlbmN5PWxvdworIC4KKyAgICogQWRkIFJlbmVzYXMgU0ggKHNoNCkgc3VwcG9ydCAoQ2xvc2VzOiAjNTc2MjQyKQorICAgICAtIFRoYW5rcyBOb2J1aGlybyBJd2FtYXRzdSwgVGFrYXNoaSBZb3NoaWkuCitBdXRob3I6IEhlY3RvciBPcm9uIDx6dW1iaUBkZWJpYW4ub3JnPgorQnVnLURlYmlhbjogaHR0cDovL2J1Z3MuZGViaWFuLm9yZy81NzYyNDIKKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCitTaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorLS0tCisgZ2RiL01ha2VmaWxlLmluICAgICAgICAgICAgICAgICAgICAgIHwgICAxICsKKyBnZGIvY29uZmlndXJlLmhvc3QgICAgICAgICAgICAgICAgICAgfCAgIDEgKworIGdkYi9zaC1saW51eC10ZGVwLmMgICAgICAgICAgICAgICAgICB8IDUxOSArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKworIGdkYi9zaC10ZGVwLmMgICAgICAgICAgICAgICAgICAgICAgICB8ICA1NCArKy0tCisgZ2RiL3NoLXRkZXAuaCAgICAgICAgICAgICAgICAgICAgICAgIHwgIDQ5ICsrKysKKyBnZGIvdGVzdHN1aXRlL2dkYi5hc20vYXNtLXNvdXJjZS5leHAgfCAgIDUgKworIGdkYi90ZXN0c3VpdGUvZ2RiLmFzbS9zaC5pbmMgICAgICAgICB8ICAgMyArLQorIGdkYi90ZXN0c3VpdGUvZ2RiLmJhc2UvYW5ub3RhMS5jICAgICB8ICAgMyArCisgZ2RiL3Rlc3RzdWl0ZS9nZGIuYmFzZS9hbm5vdGEzLmMgICAgIHwgICA0ICsKKyBnZGIvdGVzdHN1aXRlL2dkYi5iYXNlL3NpZ2FsbC5jICAgICAgfCAgIDMgKworIGdkYi90ZXN0c3VpdGUvZ2RiLmJhc2Uvc2lnbmFscy5jICAgICB8ICAgNCArCisgMTEgZmlsZXMgY2hhbmdlZCwgNjE3IGluc2VydGlvbnMoKyksIDI5IGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvZ2RiL01ha2VmaWxlLmluIGIvZ2RiL01ha2VmaWxlLmluCitpbmRleCBlYzJhZjUyLi5kZjhlODRkIDEwMDY0NAorLS0tIGEvZ2RiL01ha2VmaWxlLmluCisrKysgYi9nZGIvTWFrZWZpbGUuaW4KK0BAIC0xNzM2LDYgKzE3MzYsNyBAQCBBTExERVBGSUxFUyA9IFwKKyAJc2NvcmUtdGRlcC5jIFwKKyAJc2VyLWdvMzIuYyBzZXItcGlwZS5jIHNlci10Y3AuYyBzZXItbWluZ3cuYyBcCisgCXNoLXRkZXAuYyBzaDY0LXRkZXAuYyBzaG5ic2QtdGRlcC5jIHNobmJzZC1uYXQuYyBcCisrCXNoLWxpbnV4LXRkZXAuYyBzaC1saW51eC1uYXQuYyBcCisgCXNvbDItdGRlcC5jIFwKKyAJc29saWItc3ZyNC5jIFwKKyAJc3BhcmMtbGludXgtbmF0LmMgc3BhcmMtbGludXgtdGRlcC5jIFwKK2RpZmYgLS1naXQgYS9nZGIvY29uZmlndXJlLmhvc3QgYi9nZGIvY29uZmlndXJlLmhvc3QKK2luZGV4IGVmMjY1ZWIuLjMyMmExZTIgMTAwNjQ0CistLS0gYS9nZGIvY29uZmlndXJlLmhvc3QKKysrKyBiL2dkYi9jb25maWd1cmUuaG9zdAorQEAgLTE0OSw2ICsxNDksNyBAQCBwb3dlcnBjKi0qLWxpbnV4KikJZ2RiX2hvc3Q9bGludXggOzsKKyAKKyBzMzkwKi0qLWxpbnV4KikJCWdkYl9ob3N0PWxpbnV4IDs7CisgCisrc2gqLSotbGludXgqKQkJZ2RiX2hvc3Q9bGludXggOzsKKyBzaCotKi1uZXRic2RlbGYqIHwgc2gqLSota25ldGJzZCotZ251KQorIAkJCWdkYl9ob3N0PW5ic2QgOzsKKyBzaCotKi1vcGVuYnNkKikJCWdkYl9ob3N0PW5ic2QgOzsKK2RpZmYgLS1naXQgYS9nZGIvc2gtbGludXgtdGRlcC5jIGIvZ2RiL3NoLWxpbnV4LXRkZXAuYworaW5kZXggMjQxOGQyNS4uYWM4ZWE5ZSAxMDA2NDQKKy0tLSBhL2dkYi9zaC1saW51eC10ZGVwLmMKKysrKyBiL2dkYi9zaC1saW51eC10ZGVwLmMKK0BAIC0xOCwxNCArMTgsMzcgQEAKKyAgICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbS4gIElmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4gICovCisgCisgI2luY2x1ZGUgImRlZnMuaCIKKysjaW5jbHVkZSAiZ2RiY29yZS5oIgorKyNpbmNsdWRlICJmcmFtZS5oIgorKyNpbmNsdWRlICJmcmFtZS1iYXNlLmgiCisrI2luY2x1ZGUgImZyYW1lLXVud2luZC5oIgorKyNpbmNsdWRlICJkd2FyZjItZnJhbWUuaCIKKysjaW5jbHVkZSAidmFsdWUuaCIKKysjaW5jbHVkZSAicmVnY2FjaGUuaCIKKysjaW5jbHVkZSAiaW5mZXJpb3IuaCIKKyAjaW5jbHVkZSAib3NhYmkuaCIKKyAKKysjaW5jbHVkZSAicmVnZ3JvdXBzLmgiCisrI2luY2x1ZGUgImFyY2gtdXRpbHMuaCIKKysjaW5jbHVkZSAiZmxvYXRmb3JtYXQuaCIKKyAjaW5jbHVkZSAic29saWItc3ZyNC5oIgorICNpbmNsdWRlICJzeW10YWIuaCIKKysjaW5jbHVkZSAiZ2RiX3N0cmluZy5oIgorKyNpbmNsdWRlICJjb21tYW5kLmgiCisrI2luY2x1ZGUgImdkYl9hc3NlcnQuaCIKKyAKKyAjaW5jbHVkZSAidHJhZC1mcmFtZS5oIgorICNpbmNsdWRlICJ0cmFtcC1mcmFtZS5oIgorIAorKyNpbmNsdWRlIDxzeXMvcHRyYWNlLmg+CisrI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorKyNpbmNsdWRlIDxzeXMvcGFyYW0uaD4KKysjaW5jbHVkZSA8c3lzL3VzZXIuaD4KKysjaW5jbHVkZSA8c3lzL3N5c2NhbGwuaD4KKysKKysjaW5jbHVkZSA8YXNtL3B0cmFjZS5oPgorKworKyNpbmNsdWRlICJyZWdzZXQuaCIKKyAjaW5jbHVkZSAiZ2xpYmMtdGRlcC5oIgorICNpbmNsdWRlICJzaC10ZGVwLmgiCisgI2luY2x1ZGUgImxpbnV4LXRkZXAuaCIKK0BAIC0xODAsOSArMjAzLDUwNSBAQCBzdGF0aWMgc3RydWN0IHRyYW1wX2ZyYW1lIHNoX2xpbnV4X3J0X3NpZ3JldHVybl90cmFtcF9mcmFtZSA9IHsKKyAgIHNoX2xpbnV4X3J0X3NpZ3JldHVybl9pbml0CisgfTsKKyAKKysvKiBSZWNvZ25pemluZyBzaWduYWwgaGFuZGxlciBmcmFtZXMuICAqLworKworKy8qIEdOVS9MaW51eCBoYXMgdHdvIGZsYXZvcnMgb2Ygc2lnbmFscy4gIE5vcm1hbCBzaWduYWwgaGFuZGxlcnMsIGFuZAorKyAgICJyZWFsdGltZSIgKFJUKSBzaWduYWxzLiAgVGhlIFJUIHNpZ25hbHMgY2FuIHByb3ZpZGUgYWRkaXRpb25hbAorKyAgIGluZm9ybWF0aW9uIHRvIHRoZSBzaWduYWwgaGFuZGxlciBpZiB0aGUgU0FfU0lHSU5GTyBmbGFnIGlzIHNldAorKyAgIHdoZW4gZXN0YWJsaXNoaW5nIGEgc2lnbmFsIGhhbmRsZXIgdXNpbmcgYHNpZ2FjdGlvbicuICBJdCBpcyBub3QKKysgICB1bmxpa2VseSB0aGF0IGZ1dHVyZSB2ZXJzaW9ucyBvZiBHTlUvTGludXggd2lsbCBzdXBwb3J0IFNBX1NJR0lORk8KKysgICBmb3Igbm9ybWFsIHNpZ25hbHMgdG9vLiAgKi8KKysKKysvKiBXaGVuIHRoZSBTSCBMaW51eCBrZXJuZWwgY2FsbHMgYSBzaWduYWwgaGFuZGxlciBhbmQgdGhlCisrICAgU0FfUkVTVE9SRVIgZmxhZyBpc24ndCBzZXQsIHRoZSByZXR1cm4gYWRkcmVzcyBwb2ludHMgdG8gYSBiaXQgb2YKKysgICBjb2RlIG9uIHRoZSBzdGFjay4gIFRoaXMgZnVuY3Rpb24gcmV0dXJucyB3aGV0aGVyIHRoZSBQQyBhcHBlYXJzIHRvCisrICAgYmUgd2l0aGluIHRoaXMgYml0IG9mIGNvZGUuCisrCisrICAgVGhlIGluc3RydWN0aW9uIHNlcXVlbmNlIGZvciBub3JtYWwgc2lnbmFscyBpcworKyAgICAgICBtb3YudyAgMWYscjMKKysgICAgICAgdHJhcGEgICMxNgorKyAgICAgICBvciAgICAgcjAsIHIwCisrICAgICAgIG9yICAgICByMCwgcjAKKysgICAgICAgb3IgICAgIHIwLCByMAorKyAgICAgICBvciAgICAgcjAsIHIwCisrICAgICAgIG9yICAgICByMCwgcjAKKysgICAgMTogLndvcmQgIF9fTlJfc2lncmV0dXJuCisrICAgb3IgMHg5MzA1IDB4YzMxMCAweDIwMGIgMHgyMDBiIDB4MjAwYiAweDIwMGIgMHgyMDBiIDB4MDA3Ny4KKysKKysgICBDaGVja2luZyBmb3IgdGhlIGNvZGUgc2VxdWVuY2Ugc2hvdWxkIGJlIHNvbWV3aGF0IHJlbGlhYmxlLCBiZWNhdXNlCisrICAgdGhlIGVmZmVjdCBpcyB0byBjYWxsIHRoZSBzeXN0ZW0gY2FsbCBzaWdyZXR1cm4uICBUaGlzIGlzIHVubGlrZWx5CisrICAgdG8gb2NjdXIgYW55d2hlcmUgb3RoZXIgdGhhbiBhIHNpZ25hbCB0cmFtcG9saW5lLgorKworKyAgIEl0IGtpbmQgb2Ygc3Vja3MgdGhhdCB3ZSBoYXZlIHRvIHJlYWQgbWVtb3J5IGZyb20gdGhlIHByb2Nlc3MgaW4KKysgICBvcmRlciB0byBpZGVudGlmeSBhIHNpZ25hbCB0cmFtcG9saW5lLCBidXQgdGhlcmUgZG9lc24ndCBzZWVtIHRvIGJlCisrICAgYW55IG90aGVyIHdheS4gIFRoZSBQQ19JTl9TSUdUUkFNUCBtYWNybyBpbiB0bS1saW51eC5oIGFycmFuZ2VzIHRvCisrICAgb25seSBjYWxsIHVzIGlmIG5vIGZ1bmN0aW9uIG5hbWUgY291bGQgYmUgaWRlbnRpZmllZCwgd2hpY2ggc2hvdWxkCisrICAgYmUgdGhlIGNhc2Ugc2luY2UgdGhlIGNvZGUgaXMgb24gdGhlIHN0YWNrLgorKworKyAgIERldGVjdGlvbiBvZiBzaWduYWwgdHJhbXBvbGluZXMgZm9yIGhhbmRsZXJzIHRoYXQgc2V0IHRoZQorKyAgIFNBX1JFU1RPUkVSIGZsYWcgaXMgaW4gZ2VuZXJhbCBub3QgcG9zc2libGUuICBVbmZvcnR1bmF0ZWx5IHRoaXMgaXMKKysgICB3aGF0IHRoZSBHTlUgQyBMaWJyYXJ5IGhhcyBiZWVuIGRvaW5nIGZvciBxdWl0ZSBzb21lIHRpbWUgbm93LgorKyAgIEhvd2V2ZXIsIGFzIG9mIHZlcnNpb24gMi4xLjIsIHRoZSBHTlUgQyBMaWJyYXJ5IHVzZXMgc2lnbmFsCisrICAgdHJhbXBvbGluZXMgKG5hbWVkIF9fcmVzdG9yZSBhbmQgX19yZXN0b3JlX3J0KSB0aGF0IGFyZSBpZGVudGljYWwKKysgICB0byB0aGUgb25lcyB1c2VkIGJ5IHRoZSBrZXJuZWwuICBUaGVyZWZvcmUsIHRoZXNlIHRyYW1wb2xpbmVzIGFyZQorKyAgIHN1cHBvcnRlZCB0b28uICAqLworKworKyNkZWZpbmUgTU9WVyhuKQkgKDB4OTMwMHwoKG4pLTIpKQkvKiBNb3ZlIG1lbSB3b3JkIGF0IFBDK24gdG8gUjMgKi8KKysjZGVmaW5lIFRSQVAxNgkgMHhjMzEwCQkJLyogU3lzY2FsbCB3L25vIGFyZ3MgKE5SIGluIFIzKSAqLworKyNkZWZpbmUgT1JfUjBfUjAgMHgyMDBiCQkJLyogb3IgcjAscjAgKGluc2VydCB0byBhdm9pZCBoYXJkd2FyZSBidWcpICovCisrCisrI2RlZmluZSBMSU5VWF9TSUdUUkFNUF9JTlNOMAlNT1ZXKDcpCQkvKiBNb3ZlIG1lbSB3b3JkIGF0IFBDKzcgdG8gUjMgKi8KKysjZGVmaW5lIExJTlVYX1NJR1RSQU1QX0lOU04xCVRSQVAxNgkJLyogU3lzY2FsbCB3L25vIGFyZ3MgKE5SIGluIFIzKSAqLworKyNkZWZpbmUgTElOVVhfU0lHVFJBTVBfSU5TTjIJT1JfUjBfUjAJLyogb3IgcjAscjAgKGluc2VydCB0byBhdm9pZCBoYXJkd2FyZSBidWcpICovCisrCisrc3RhdGljIGNvbnN0IHVuc2lnbmVkIHNob3J0IGxpbnV4X3NpZ3RyYW1wX2NvZGVbXSA9CisreworKyAgTElOVVhfU0lHVFJBTVBfSU5TTjAsCisrICBMSU5VWF9TSUdUUkFNUF9JTlNOMSwKKysgIExJTlVYX1NJR1RSQU1QX0lOU04yLAorKyAgTElOVVhfU0lHVFJBTVBfSU5TTjIsCisrICBMSU5VWF9TSUdUUkFNUF9JTlNOMiwKKysgIExJTlVYX1NJR1RSQU1QX0lOU04yLAorKyAgTElOVVhfU0lHVFJBTVBfSU5TTjIsCisrICBfX05SX3NpZ3JldHVybgorK307CisrCisrI2RlZmluZSBMSU5VWF9TSUdUUkFNUF9MRU4gKHNpemVvZiBsaW51eF9zaWd0cmFtcF9jb2RlKQorKworKy8qIElmIFBDIGlzIGluIGEgc2lndHJhbXAgcm91dGluZSwgcmV0dXJuIHRoZSBhZGRyZXNzIG9mIHRoZSBzdGFydCBvZgorKyAgIHRoZSByb3V0aW5lLiAgT3RoZXJ3aXNlLCByZXR1cm4gMC4gICovCisrCisrc3RhdGljIENPUkVfQUREUgorK3NoX2xpbnV4X3NpZ3RyYW1wX3N0YXJ0IChzdHJ1Y3QgZnJhbWVfaW5mbyAqbmV4dF9mcmFtZSkKKyt7CisrICBDT1JFX0FERFIgcGMgPSBnZXRfZnJhbWVfcGMgKG5leHRfZnJhbWUpOworKyAgZ2RiX2J5dGUgYnVmW0xJTlVYX1NJR1RSQU1QX0xFTl07CisrCisrICAvKiBXZSBvbmx5IHJlY29nbml6ZSBhIHNpZ25hbCB0cmFtcG9saW5lIGlmIFBDIGlzIGF0IHRoZSBzdGFydCBvZgorKyAgICAgb25lIG9mIHRoZSB0aHJlZSBpbnN0cnVjdGlvbnMuICBXZSBvcHRpbWl6ZSBmb3IgZmluZGluZyB0aGUgUEMgYXQKKysgICAgIHRoZSBzdGFydCwgYXMgd2lsbCBiZSB0aGUgY2FzZSB3aGVuIHRoZSB0cmFtcG9saW5lIGlzIG5vdCB0aGUKKysgICAgIGZpcnN0IGZyYW1lIG9uIHRoZSBzdGFjay4gIFdlIGFzc3VtZSB0aGF0IGluIHRoZSBjYXNlIHdoZXJlIHRoZQorKyAgICAgUEMgaXMgbm90IGF0IHRoZSBzdGFydCBvZiB0aGUgaW5zdHJ1Y3Rpb24gc2VxdWVuY2UsIHRoZXJlIHdpbGwgYmUKKysgICAgIGEgZmV3IHRyYWlsaW5nIHJlYWRhYmxlIGJ5dGVzIG9uIHRoZSBzdGFjay4gICovCisrCisrICBpZiAoIXNhZmVfZnJhbWVfdW53aW5kX21lbW9yeSAobmV4dF9mcmFtZSwgcGMsIGJ1ZiwgTElOVVhfU0lHVFJBTVBfTEVOKSkKKysgICAgcmV0dXJuIDA7CisrCisrICBpZiAoYnVmWzBdICE9IExJTlVYX1NJR1RSQU1QX0lOU04wKQorKyAgICB7CisrICAgICAgaWYgKGJ1ZlswXSAhPSBMSU5VWF9TSUdUUkFNUF9JTlNOMSkKKysgICAgICAgIHJldHVybiAwOworKworKyAgICAgIHBjIC09IDI7CisrCisrICAgICAgaWYgKCFzYWZlX2ZyYW1lX3Vud2luZF9tZW1vcnkgKG5leHRfZnJhbWUsIHBjLCBidWYsIExJTlVYX1NJR1RSQU1QX0xFTikpCisrCXJldHVybiAwOworKyAgICB9CisrCisrICBpZiAobWVtY21wIChidWYsIGxpbnV4X3NpZ3RyYW1wX2NvZGUsIExJTlVYX1NJR1RSQU1QX0xFTikgIT0gMCkKKysgICAgcmV0dXJuIDA7CisrCisrICByZXR1cm4gcGM7CisrfQorKworKy8qIFRoaXMgZnVuY3Rpb24gZG9lcyB0aGUgc2FtZSBmb3IgUlQgc2lnbmFscy4gIEhlcmUgdGhlIGluc3RydWN0aW9uCisrICAgc2VxdWVuY2UgaXMKKysgICAgICAgbW92LncgIDFmLHIzCisrICAgICAgIHRyYXBhICAjMTYKKysgICAgICAgb3IgICAgIHIwLCByMAorKyAgICAgICBvciAgICAgcjAsIHIwCisrICAgICAgIG9yICAgICByMCwgcjAKKysgICAgICAgb3IgICAgIHIwLCByMAorKyAgICAgICBvciAgICAgcjAsIHIwCisrICAgIDE6IC53b3JkICBfX05SX3J0X3NpZ3JldHVybgorKyAgIG9yIDB4OTMwNSAweGMzMTAgMHgyMDBiIDB4MjAwYiAweDIwMGIgMHgyMDBiIDB4MjAwYiAweDAwYWQuCisrCisrICAgVGhlIGVmZmVjdCBpcyB0byBjYWxsIHRoZSBzeXN0ZW0gY2FsbCBydF9zaWdyZXR1cm4uICAqLworKworKyNkZWZpbmUgTElOVVhfUlRfU0lHVFJBTVBfSU5TTjAJCU1PVlcoNykJCS8qIE1vdmUgbWVtIHdvcmQgYXQgUEMrNyB0byBSMyAqLworKyNkZWZpbmUgTElOVVhfUlRfU0lHVFJBTVBfSU5TTjEJCVRSQVAxNgkJLyogU3lzY2FsbCB3L25vIGFyZ3MgKE5SIGluIFIzKSAqLworKyNkZWZpbmUgTElOVVhfUlRfU0lHVFJBTVBfSU5TTjIJCU9SX1IwX1IwCS8qIG9yIHIwLHIwIChpbnNlcnQgdG8gYXZvaWQgaGFyZHdhcmUgYnVnKSAqLworKworK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBzaG9ydCBsaW51eF9ydF9zaWd0cmFtcF9jb2RlW10gPQorK3sKKysgIExJTlVYX1JUX1NJR1RSQU1QX0lOU04wLAorKyAgTElOVVhfUlRfU0lHVFJBTVBfSU5TTjEsCisrICBMSU5VWF9SVF9TSUdUUkFNUF9JTlNOMiwKKysgIExJTlVYX1JUX1NJR1RSQU1QX0lOU04yLAorKyAgTElOVVhfUlRfU0lHVFJBTVBfSU5TTjIsCisrICBMSU5VWF9SVF9TSUdUUkFNUF9JTlNOMiwKKysgIExJTlVYX1JUX1NJR1RSQU1QX0lOU04yLAorKyAgX19OUl9ydF9zaWdyZXR1cm4KKyt9OworKworKyNkZWZpbmUgTElOVVhfUlRfU0lHVFJBTVBfTEVOIChzaXplb2YgbGludXhfcnRfc2lndHJhbXBfY29kZSkKKysKKysvKiBJZiBQQyBpcyBpbiBhIFJUIHNpZ3RyYW1wIHJvdXRpbmUsIHJldHVybiB0aGUgYWRkcmVzcyBvZiB0aGUgc3RhcnQKKysgICBvZiB0aGUgcm91dGluZS4gIE90aGVyd2lzZSwgcmV0dXJuIDAuICAqLworKworK3N0YXRpYyBDT1JFX0FERFIKKytzaF9saW51eF9ydF9zaWd0cmFtcF9zdGFydCAoc3RydWN0IGZyYW1lX2luZm8gKm5leHRfZnJhbWUpCisreworKyAgQ09SRV9BRERSIHBjID0gZ2V0X2ZyYW1lX3BjIChuZXh0X2ZyYW1lKTsKKysgIGdkYl9ieXRlIGJ1ZltMSU5VWF9SVF9TSUdUUkFNUF9MRU5dOworKworKyAgLyogV2Ugb25seSByZWNvZ25pemUgYSBzaWduYWwgdHJhbXBvbGluZSBpZiBQQyBpcyBhdCB0aGUgc3RhcnQgb2YKKysgICAgIG9uZSBvZiB0aGUgdHdvIGluc3RydWN0aW9ucy4gIFdlIG9wdGltaXplIGZvciBmaW5kaW5nIHRoZSBQQyBhdAorKyAgICAgdGhlIHN0YXJ0LCBhcyB3aWxsIGJlIHRoZSBjYXNlIHdoZW4gdGhlIHRyYW1wb2xpbmUgaXMgbm90IHRoZQorKyAgICAgZmlyc3QgZnJhbWUgb24gdGhlIHN0YWNrLiAgV2UgYXNzdW1lIHRoYXQgaW4gdGhlIGNhc2Ugd2hlcmUgdGhlCisrICAgICBQQyBpcyBub3QgYXQgdGhlIHN0YXJ0IG9mIHRoZSBpbnN0cnVjdGlvbiBzZXF1ZW5jZSwgdGhlcmUgd2lsbCBiZQorKyAgICAgYSBmZXcgdHJhaWxpbmcgcmVhZGFibGUgYnl0ZXMgb24gdGhlIHN0YWNrLiAgKi8KKysKKysgIGlmICghc2FmZV9mcmFtZV91bndpbmRfbWVtb3J5IChuZXh0X2ZyYW1lLCBwYywgYnVmLCBMSU5VWF9SVF9TSUdUUkFNUF9MRU4pKQorKyAgICByZXR1cm4gMDsKKysKKysgIGlmIChidWZbMF0gIT0gTElOVVhfUlRfU0lHVFJBTVBfSU5TTjApCisrICAgIHsKKysgICAgICBpZiAoYnVmWzBdICE9IExJTlVYX1JUX1NJR1RSQU1QX0lOU04xKQorKwlyZXR1cm4gMDsKKysKKysgICAgICBwYyAtPSAyOworKworKyAgICAgIGlmICghc2FmZV9mcmFtZV91bndpbmRfbWVtb3J5IChuZXh0X2ZyYW1lLCBwYywgYnVmLAorKwkJCQkgICAgIExJTlVYX1JUX1NJR1RSQU1QX0xFTikpCisrCXJldHVybiAwOworKyAgICB9CisrCisrICBpZiAobWVtY21wIChidWYsIGxpbnV4X3J0X3NpZ3RyYW1wX2NvZGUsIExJTlVYX1JUX1NJR1RSQU1QX0xFTikgIT0gMCkKKysgICAgcmV0dXJuIDA7CisrCisrICByZXR1cm4gcGM7CisrfQorKworKy8qIFJldHVybiB3aGV0aGVyIFBDIGlzIGluIGEgR05VL0xpbnV4IHNpZ3RyYW1wIHJvdXRpbmUuICAqLworKworK3N0YXRpYyBpbnQKKytzaF9saW51eF9zaWd0cmFtcF9wIChzdHJ1Y3QgZnJhbWVfaW5mbyAqdGhpc19mcmFtZSkKKyt7CisrICBDT1JFX0FERFIgcGMgPSBnZXRfZnJhbWVfcGMgKHRoaXNfZnJhbWUpOworKyAgY2hhciAqbmFtZTsKKysKKysgIGZpbmRfcGNfcGFydGlhbF9mdW5jdGlvbiAocGMsICZuYW1lLCBOVUxMLCBOVUxMKTsKKysKKysgIC8qIElmIHdlIGhhdmUgTkFNRSwgd2UgY2FuIG9wdGltaXplIHRoZSBzZWFyY2guICBUaGUgdHJhbXBvbGluZXMgYXJlCisrICAgICBuYW1lZCBfX3Jlc3RvcmUgYW5kIF9fcmVzdG9yZV9ydC4gIEhvd2V2ZXIsIHRoZXkgYXJlbid0IGR5bmFtaWNhbGx5CisrICAgICBleHBvcnRlZCBmcm9tIHRoZSBzaGFyZWQgQyBsaWJyYXJ5LCBzbyB0aGUgdHJhbXBvbGluZSBtYXkgYXBwZWFyIHRvCisrICAgICBiZSBwYXJ0IG9mIHRoZSBwcmVjZWRpbmcgZnVuY3Rpb24uICBUaGlzIHNob3VsZCBhbHdheXMgYmUgc2lnYWN0aW9uLAorKyAgICAgX19zaWdhY3Rpb24sIG9yIF9fbGliY19zaWdhY3Rpb24gKGFsbCBhbGlhc2VzIHRvIHRoZSBzYW1lIGZ1bmN0aW9uKS4gICovCisrICBpZiAobmFtZSA9PSBOVUxMIHx8IHN0cnN0ciAobmFtZSwgInNpZ2FjdGlvbiIpICE9IE5VTEwpCisrICAgIHJldHVybiAoc2hfbGludXhfc2lndHJhbXBfc3RhcnQgKHRoaXNfZnJhbWUpICE9IDAKKysJICAgIHx8IHNoX2xpbnV4X3J0X3NpZ3RyYW1wX3N0YXJ0ICh0aGlzX2ZyYW1lKSAhPSAwKTsKKysKKysgIHJldHVybiAoc3RyY21wICgiX19yZXN0b3JlIiwgbmFtZSkgPT0gMAorKwkgIHx8IHN0cmNtcCAoIl9fcmVzdG9yZV9ydCIsIG5hbWUpID09IDApOworK30KKysKKysvKiBPZmZzZXQgdG8gc3RydWN0IHNpZ2NvbnRleHQgaW4gdWNvbnRleHQsIGZyb20gPGFzbS91Y29udGV4dC5oPi4gICovCisrI2RlZmluZSBTSF9MSU5VWF9VQ09OVEVYVF9TSUdDT05URVhUX09GRlNFVCAxMgorKworKworKy8qIEFzc3VtaW5nIE5FWFRfRlJBTUUgaXMgYSBmcmFtZSBmb2xsb3dpbmcgYSBHTlUvTGludXggc2lndHJhbXAKKysgICByb3V0aW5lLCByZXR1cm4gdGhlIGFkZHJlc3Mgb2YgdGhlIGFzc29jaWF0ZWQgc2lnY29udGV4dCBzdHJ1Y3R1cmUuICAqLworKworK3N0YXRpYyBDT1JFX0FERFIKKytzaF9saW51eF9zaWdjb250ZXh0X2FkZHIgKHN0cnVjdCBmcmFtZV9pbmZvICp0aGlzX2ZyYW1lKQorK3sKKysgIENPUkVfQUREUiBwYzsKKysgIENPUkVfQUREUiBzcDsKKysKKysgIHNwID0gZ2V0X2ZyYW1lX3JlZ2lzdGVyX3Vuc2lnbmVkICh0aGlzX2ZyYW1lLCBTUF9SRUdOVU0pOworKworKyAgcGMgPSBzaF9saW51eF9zaWd0cmFtcF9zdGFydCAodGhpc19mcmFtZSk7CisrICBpZiAocGMpCisrICAgIHsKKysgICAgICByZXR1cm4gc3A7CisrICAgIH0KKysKKysgIHBjID0gc2hfbGludXhfcnRfc2lndHJhbXBfc3RhcnQgKHRoaXNfZnJhbWUpOworKyAgaWYgKHBjKQorKyAgICB7CisrICAgICAgQ09SRV9BRERSIHVjb250ZXh0X2FkZHI7CisrCisrICAgICAgLyogVGhlIHNpZ2NvbnRleHQgc3RydWN0dXJlIGlzIHBhcnQgb2YgdGhlIHVzZXIgY29udGV4dC4gIEEKKysJIHBvaW50ZXIgdG8gdGhlIHVzZXIgY29udGV4dCBpcyBwYXNzZWQgYXMgdGhlIHRoaXJkIGFyZ3VtZW50CisrCSB0byB0aGUgc2lnbmFsIGhhbmRsZXIuICAqLworKyAgICAgIHVjb250ZXh0X2FkZHIgPSBnZXRfZnJhbWVfcmVnaXN0ZXJfdW5zaWduZWQgKHRoaXNfZnJhbWUsIEFSRzBfUkVHTlVNKzIpOworKyAgICAgIHJldHVybiB1Y29udGV4dF9hZGRyICsgU0hfTElOVVhfVUNPTlRFWFRfU0lHQ09OVEVYVF9PRkZTRVQ7CisrICAgIH0KKysKKysgIGVycm9yICgiQ291bGRuJ3QgcmVjb2duaXplIHNpZ25hbCB0cmFtcG9saW5lLiIpOworKyAgcmV0dXJuIDA7CisrfQorKworKy8qIFNpZ25hbCB0cmFtcG9saW5lcy4gICovCisrZXh0ZXJuIHN0cnVjdCBzaF9mcmFtZV9jYWNoZSAqc2hfYWxsb2NfZnJhbWVfY2FjaGUgKHZvaWQpOworKworK3N0YXRpYyBzdHJ1Y3Qgc2hfZnJhbWVfY2FjaGUgKgorK3NoX2xpbnV4X3NpZ3RyYW1wX2ZyYW1lX2NhY2hlIChzdHJ1Y3QgZnJhbWVfaW5mbyAqdGhpc19mcmFtZSwgdm9pZCAqKnRoaXNfY2FjaGUpCisreworKyAgc3RydWN0IHNoX2ZyYW1lX2NhY2hlICpjYWNoZTsKKysgIHN0cnVjdCBnZGJhcmNoX3RkZXAgKnRkZXAgPSBnZGJhcmNoX3RkZXAgKGdldF9jdXJyZW50X2FyY2ggKCkpOworKyAgQ09SRV9BRERSIHNpZ2NvbnRleHRfYWRkcjsKKysKKysgIGlmICgqdGhpc19jYWNoZSkKKysgICAgcmV0dXJuICp0aGlzX2NhY2hlOworKworKyAgY2FjaGUgPSBzaF9hbGxvY19mcmFtZV9jYWNoZSAoKTsKKysKKysgIGNhY2hlLT5iYXNlID0gZ2V0X2ZyYW1lX3JlZ2lzdGVyX3Vuc2lnbmVkICh0aGlzX2ZyYW1lLCBTUF9SRUdOVU0pOworKyAgc2lnY29udGV4dF9hZGRyID0gdGRlcC0+c2lnY29udGV4dF9hZGRyICh0aGlzX2ZyYW1lKTsKKysgIGlmICh0ZGVwLT5zY19yZWdfb2Zmc2V0KQorKyAgICB7CisrICAgICAgaW50IGk7CisrCisrICAgICAgZ2RiX2Fzc2VydCAodGRlcC0+c2NfbnVtX3JlZ3MgPD0gU0hfTlVNX1JFR1MpOworKworKyAgICAgIGZvciAoaSA9IDA7IGkgPCB0ZGVwLT5zY19udW1fcmVnczsgaSsrKQorKwlpZiAodGRlcC0+c2NfcmVnX29mZnNldFtpXSAhPSAtMSkKKysJICBjYWNoZS0+c2F2ZWRfcmVnc1tpXSA9IHNpZ2NvbnRleHRfYWRkciArIHRkZXAtPnNjX3JlZ19vZmZzZXRbaV07CisrICAgIH0KKysKKysgICp0aGlzX2NhY2hlID0gY2FjaGU7CisrICByZXR1cm4gY2FjaGU7CisrfQorKworK3N0YXRpYyB2b2lkCisrc2hfbGludXhfc2lndHJhbXBfZnJhbWVfdGhpc19pZCAoc3RydWN0IGZyYW1lX2luZm8gKnRoaXNfZnJhbWUsIHZvaWQgKip0aGlzX2NhY2hlLAorKwkJCSAgICAgc3RydWN0IGZyYW1lX2lkICp0aGlzX2lkKQorK3sKKysgIHN0cnVjdCBzaF9mcmFtZV9jYWNoZSAqY2FjaGUgPQorKyAgICBzaF9saW51eF9zaWd0cmFtcF9mcmFtZV9jYWNoZSAodGhpc19mcmFtZSwgdGhpc19jYWNoZSk7CisrCisrICAoKnRoaXNfaWQpID0gZnJhbWVfaWRfYnVpbGQgKGNhY2hlLT5iYXNlICsgNjQsIGNhY2hlLT5wYyk7CisrfQorKworK2V4dGVybiBzdHJ1Y3QgdmFsdWUgKiBzaF9mcmFtZV9wcmV2X3JlZ2lzdGVyICgpOworK3N0YXRpYyBzdHJ1Y3QgdmFsdWUgKgorK3NoX2xpbnV4X3NpZ3RyYW1wX2ZyYW1lX3ByZXZfcmVnaXN0ZXIgKHN0cnVjdCBmcmFtZV9pbmZvICp0aGlzX2ZyYW1lLAorKyAgICAgICAgICAgICAgICAgICB2b2lkICoqdGhpc19jYWNoZSwgaW50IHJlZ251bSkKKyt7CisrICBzaF9saW51eF9zaWd0cmFtcF9mcmFtZV9jYWNoZSAodGhpc19mcmFtZSwgdGhpc19jYWNoZSk7CisrCisrICByZXR1cm4gc2hfZnJhbWVfcHJldl9yZWdpc3RlciAodGhpc19mcmFtZSwgdGhpc19jYWNoZSwgcmVnbnVtKTsKKyt9CisrCisrc3RhdGljIGludAorK3NoX2xpbnV4X3NpZ3RyYW1wX2ZyYW1lX3NuaWZmZXIgKGNvbnN0IHN0cnVjdCBmcmFtZV91bndpbmQgKnNlbGYsCisrICAgICAgICAgICAgICAgICBzdHJ1Y3QgZnJhbWVfaW5mbyAqdGhpc19mcmFtZSwKKysgICAgICAgICAgICAgICAgIHZvaWQgKip0aGlzX3Byb2xvZ3VlX2NhY2hlKQorK3sKKysgIHN0cnVjdCBnZGJhcmNoX3RkZXAgKnRkZXAgPSBnZGJhcmNoX3RkZXAgKGdldF9mcmFtZV9hcmNoICh0aGlzX2ZyYW1lKSk7CisrCisrICAvKiBXZSBzaG91bGRuJ3QgZXZlbiBib3RoZXIgaWYgd2UgZG9uJ3QgaGF2ZSBhIHNpZ2NvbnRleHRfYWRkcgorKyAgICAgaGFuZGxlci4gICovCisrICBpZiAodGRlcC0+c2lnY29udGV4dF9hZGRyID09IE5VTEwpCisrICAgIHJldHVybiAwOworKworKyAgaWYgKHRkZXAtPnNpZ3RyYW1wX3AgIT0gTlVMTCkKKysgICAgeworKyAgICAgIGlmICh0ZGVwLT5zaWd0cmFtcF9wICh0aGlzX2ZyYW1lKSkKKysgICAgcmV0dXJuIDE7CisrICAgIH0KKysKKysgIHJldHVybiAwOworK30KKysKKytzdGF0aWMgY29uc3Qgc3RydWN0IGZyYW1lX3Vud2luZCBzaF9saW51eF9zaWd0cmFtcF9mcmFtZV91bndpbmQgPQorK3sKKysgIFNJR1RSQU1QX0ZSQU1FLAorKyAgc2hfbGludXhfc2lndHJhbXBfZnJhbWVfdGhpc19pZCwKKysgIHNoX2xpbnV4X3NpZ3RyYW1wX2ZyYW1lX3ByZXZfcmVnaXN0ZXIsCisrICBOVUxMLAorKyAgc2hfbGludXhfc2lndHJhbXBfZnJhbWVfc25pZmZlcgorK307CisrCisrLyogU3VwcGx5IHJlZ2lzdGVyIFJFR05VTSBmcm9tIHRoZSBidWZmZXIgc3BlY2lmaWVkIGJ5IEdSRUdTIGFuZCBMRU4KKysgICBpbiB0aGUgZ2VuZXJhbC1wdXJwb3NlIHJlZ2lzdGVyIHNldCBSRUdTRVQgdG8gcmVnaXN0ZXIgY2FjaGUKKysgICBSRUdDQUNIRS4gIElmIFJFR05VTSBpcyAtMSwgZG8gdGhpcyBmb3IgYWxsIHJlZ2lzdGVycyBpbiBSRUdTRVQuICAqLworKworK3ZvaWQKKytzaF9zdXBwbHlfZ3JlZ3NldCAoY29uc3Qgc3RydWN0IHJlZ3NldCAqcmVnc2V0LCBzdHJ1Y3QgcmVnY2FjaGUgKnJlZ2NhY2hlLAorKyAgICAgICAgICAgICBpbnQgcmVnbnVtLCBjb25zdCB2b2lkICpncmVncywgc2l6ZV90IGxlbikKKyt7CisrICBjb25zdCBzdHJ1Y3QgZ2RiYXJjaF90ZGVwICp0ZGVwID0gZ2RiYXJjaF90ZGVwIChyZWdzZXQtPmFyY2gpOworKyAgY29uc3QgY2hhciAqcmVncyA9IGdyZWdzOworKyAgaW50IGk7CisrCisrICBnZGJfYXNzZXJ0IChsZW4gPT0gdGRlcC0+c2l6ZW9mX2dyZWdzZXQpOworKworKyAgZm9yIChpID0gMDsgaSA8IHRkZXAtPmdyZWdzZXRfbnVtX3JlZ3M7IGkrKykKKysgICAgeworKyAgICAgIGlmICgocmVnbnVtID09IGkgfHwgcmVnbnVtID09IC0xKQorKyAgICAgICYmIHRkZXAtPmdyZWdzZXRfcmVnX29mZnNldFtpXSAhPSAtMSkKKysgICAgcmVnY2FjaGVfcmF3X3N1cHBseSAocmVnY2FjaGUsIGksIHJlZ3MgKyB0ZGVwLT5ncmVnc2V0X3JlZ19vZmZzZXRbaV0pOworKyAgICB9CisrfQorKworKy8qIENvbGxlY3QgcmVnaXN0ZXIgUkVHTlVNIGZyb20gdGhlIHJlZ2lzdGVyIGNhY2hlIFJFR0NBQ0hFIGFuZCBzdG9yZQorKyAgIGl0IGluIHRoZSBidWZmZXIgc3BlY2lmaWVkIGJ5IEdSRUdTIGFuZCBMRU4gYXMgZGVzY3JpYmVkIGJ5IHRoZQorKyAgIGdlbmVyYWwtcHVycG9zZSByZWdpc3RlciBzZXQgUkVHU0VULiAgSWYgUkVHTlVNIGlzIC0xLCBkbyB0aGlzIGZvcgorKyAgIGFsbCByZWdpc3RlcnMgaW4gUkVHU0VULiAgKi8KKysKKyt2b2lkCisrc2hfY29sbGVjdF9ncmVnc2V0IChjb25zdCBzdHJ1Y3QgcmVnc2V0ICpyZWdzZXQsCisrICAgICAgICAgICAgICBjb25zdCBzdHJ1Y3QgcmVnY2FjaGUgKnJlZ2NhY2hlLAorKyAgICAgICAgICAgICAgaW50IHJlZ251bSwgdm9pZCAqZ3JlZ3MsIHNpemVfdCBsZW4pCisreworKyAgY29uc3Qgc3RydWN0IGdkYmFyY2hfdGRlcCAqdGRlcCA9IGdkYmFyY2hfdGRlcCAocmVnc2V0LT5hcmNoKTsKKysgIGNoYXIgKnJlZ3MgPSBncmVnczsKKysgIGludCBpOworKworKyAgZ2RiX2Fzc2VydCAobGVuID09IHRkZXAtPnNpemVvZl9ncmVnc2V0KTsKKysKKysgIGZvciAoaSA9IDA7IGkgPCB0ZGVwLT5ncmVnc2V0X251bV9yZWdzOyBpKyspCisrICAgIHsKKysgICAgICBpZiAoKHJlZ251bSA9PSBpIHx8IHJlZ251bSA9PSAtMSkKKysgICAgICAmJiB0ZGVwLT5ncmVnc2V0X3JlZ19vZmZzZXRbaV0gIT0gLTEpCisrICAgIHJlZ2NhY2hlX3Jhd19jb2xsZWN0IChyZWdjYWNoZSwgaSwgcmVncyArIHRkZXAtPmdyZWdzZXRfcmVnX29mZnNldFtpXSk7CisrICAgIH0KKyt9CisrCisrLyogU3VwcGx5IHJlZ2lzdGVyIFJFR05VTSBmcm9tIHRoZSBidWZmZXIgc3BlY2lmaWVkIGJ5IEZQUkVHUyBhbmQgTEVOCisrICAgaW4gdGhlIGZsb2F0aW5nLXBvaW50IHJlZ2lzdGVyIHNldCBSRUdTRVQgdG8gcmVnaXN0ZXIgY2FjaGUKKysgICBSRUdDQUNIRS4gIElmIFJFR05VTSBpcyAtMSwgZG8gdGhpcyBmb3IgYWxsIHJlZ2lzdGVycyBpbiBSRUdTRVQuICAqLworKworK3N0YXRpYyB2b2lkCisrc2hfc3VwcGx5X2ZwcmVnc2V0IChjb25zdCBzdHJ1Y3QgcmVnc2V0ICpyZWdzZXQsIHN0cnVjdCByZWdjYWNoZSAqcmVnY2FjaGUsCisrICAgICAgICAgICAgICBpbnQgcmVnbnVtLCBjb25zdCB2b2lkICpmcHJlZ3MsIHNpemVfdCBsZW4pCisreworKyAgY29uc3Qgc3RydWN0IGdkYmFyY2hfdGRlcCAqdGRlcCA9IGdkYmFyY2hfdGRlcCAocmVnc2V0LT5hcmNoKTsKKysgIGNvbnN0IGNoYXIgKnJlZ3MgPSBmcHJlZ3M7CisrICBpbnQgaTsKKysKKysgIGdkYl9hc3NlcnQgKGxlbiA9PSB0ZGVwLT5zaXplb2ZfZnByZWdzZXQpOworKyAgZm9yIChpID0gMDsgaSA8IDE2OyBpKyspCisrICAgIHsKKysgICAgICBpZiAocmVnbnVtID09IGkrMjUgfHwgcmVnbnVtID09IC0xKQorKyAgICByZWdjYWNoZV9yYXdfc3VwcGx5IChyZWdjYWNoZSwgaSsyNSwgcmVncyArIGkqNCk7CisrICAgIH0KKysgIGlmIChyZWdudW0gPT0gRlBTQ1JfUkVHTlVNIHx8IHJlZ251bSA9PSAtMSkKKysgICAgcmVnY2FjaGVfcmF3X3N1cHBseSAocmVnY2FjaGUsIEZQU0NSX1JFR05VTSwgcmVncyArIDMyKjQpOworKyAgaWYgKHJlZ251bSA9PSBGUFVMX1JFR05VTSB8fCByZWdudW0gPT0gLTEpCisrICAgIHJlZ2NhY2hlX3Jhd19zdXBwbHkgKHJlZ2NhY2hlLCBGUFVMX1JFR05VTSwgcmVncyArIDMzKjQpOworK30KKysKKysvKiBDb2xsZWN0IHJlZ2lzdGVyIFJFR05VTSBmcm9tIHRoZSByZWdpc3RlciBjYWNoZSBSRUdDQUNIRSBhbmQgc3RvcmUKKysgICBpdCBpbiB0aGUgYnVmZmVyIHNwZWNpZmllZCBieSBGUFJFR1MgYW5kIExFTiBhcyBkZXNjcmliZWQgYnkgdGhlCisrICAgZmxvYXRpbmctcG9pbnQgcmVnaXN0ZXIgc2V0IFJFR1NFVC4gIElmIFJFR05VTSBpcyAtMSwgZG8gdGhpcyBmb3IKKysgICBhbGwgcmVnaXN0ZXJzIGluIFJFR1NFVC4gICovCisrCisrc3RhdGljIHZvaWQKKytzaF9jb2xsZWN0X2ZwcmVnc2V0IChjb25zdCBzdHJ1Y3QgcmVnc2V0ICpyZWdzZXQsCisrICAgICAgICAgICAgICAgY29uc3Qgc3RydWN0IHJlZ2NhY2hlICpyZWdjYWNoZSwKKysgICAgICAgICAgICAgICBpbnQgcmVnbnVtLCB2b2lkICpmcHJlZ3MsIHNpemVfdCBsZW4pCisreworKyAgY29uc3Qgc3RydWN0IGdkYmFyY2hfdGRlcCAqdGRlcCA9IGdkYmFyY2hfdGRlcCAocmVnc2V0LT5hcmNoKTsKKysgIGNoYXIgKnJlZ3MgPSBmcHJlZ3M7CisrICBpbnQgaTsKKysKKysgIGdkYl9hc3NlcnQgKGxlbiA9PSB0ZGVwLT5zaXplb2ZfZnByZWdzZXQpOworKyAgZm9yIChpID0gMDsgaSA8IDE2OyBpKyspCisrICAgIHsKKysgICAgICBpZiAocmVnbnVtID09IGkrMjUgfHwgcmVnbnVtID09IC0xKQorKyAgICByZWdjYWNoZV9yYXdfY29sbGVjdCAocmVnY2FjaGUsIGkrMjUsIHJlZ3MgKyBpKjQpOworKyAgICB9CisrICBpZiAocmVnbnVtID09IEZQU0NSX1JFR05VTSB8fCByZWdudW0gPT0gLTEpCisrICAgIHJlZ2NhY2hlX3Jhd19jb2xsZWN0IChyZWdjYWNoZSwgRlBTQ1JfUkVHTlVNLCByZWdzICsgMzIqNCk7CisrICBpZiAocmVnbnVtID09IEZQVUxfUkVHTlVNIHx8IHJlZ251bSA9PSAtMSkKKysgICAgcmVnY2FjaGVfcmF3X2NvbGxlY3QgKHJlZ2NhY2hlLCBGUFVMX1JFR05VTSwgcmVncyArIDMzKjQpOworK30KKysKKysvKiBSZXR1cm4gdGhlIGFwcHJvcHJpYXRlIHJlZ2lzdGVyIHNldCBmb3IgdGhlIGNvcmUgc2VjdGlvbiBpZGVudGlmaWVkCisrICAgYnkgU0VDVF9OQU1FIGFuZCBTRUNUX1NJWkUuICAqLworKworK2NvbnN0IHN0cnVjdCByZWdzZXQgKgorK3NoX2xpbnV4X3JlZ3NldF9mcm9tX2NvcmVfc2VjdGlvbiAoc3RydWN0IGdkYmFyY2ggKmdkYmFyY2gsCisrICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKnNlY3RfbmFtZSwgc2l6ZV90IHNlY3Rfc2l6ZSkKKyt7CisrICBzdHJ1Y3QgZ2RiYXJjaF90ZGVwICp0ZGVwID0gZ2RiYXJjaF90ZGVwIChnZGJhcmNoKTsKKysKKysgIGlmIChzdHJjbXAgKHNlY3RfbmFtZSwgIi5yZWciKSA9PSAwICYmIHNlY3Rfc2l6ZSA9PSB0ZGVwLT5zaXplb2ZfZ3JlZ3NldCkKKysgICAgeworKyAgICAgIGlmICh0ZGVwLT5ncmVnc2V0ID09IE5VTEwpCisrICAgIHRkZXAtPmdyZWdzZXQgPSByZWdzZXRfYWxsb2MgKGdkYmFyY2gsIHNoX3N1cHBseV9ncmVnc2V0LAorKyAgICAgICAgICAgICAgICAgICAgICBzaF9jb2xsZWN0X2dyZWdzZXQpOworKyAgICAgIHJldHVybiB0ZGVwLT5ncmVnc2V0OworKyAgICB9CisrCisrICBpZiAoKHN0cmNtcCAoc2VjdF9uYW1lLCAiLnJlZzIiKSA9PSAwICYmIHNlY3Rfc2l6ZSA9PSB0ZGVwLT5zaXplb2ZfZnByZWdzZXQpKQorKyAgICB7CisrICAgICAgaWYgKHRkZXAtPmZwcmVnc2V0ID09IE5VTEwpCisrICAgIHRkZXAtPmZwcmVnc2V0ID0gcmVnc2V0X2FsbG9jIChnZGJhcmNoLCBzaF9zdXBwbHlfZnByZWdzZXQsCisrICAgICAgICAgICAgICAgICAgICAgICBzaF9jb2xsZWN0X2ZwcmVnc2V0KTsKKysgICAgICByZXR1cm4gdGRlcC0+ZnByZWdzZXQ7CisrICAgIH0KKysKKysgIHJldHVybiBOVUxMOworK30KKysKKysvKiBUaGUgcmVnaXN0ZXIgc2V0cyB1c2VkIGluIEdOVS9MaW51eCBFTEYgY29yZS1kdW1wcyBhcmUgaWRlbnRpY2FsIHRvCisrICAgdGhlIHJlZ2lzdGVyIHNldHMgaW4gYHN0cnVjdCB1c2VyJyB0aGF0IGFyZSB1c2VkIGZvciBhLm91dAorKyAgIGNvcmUtZHVtcHMuICBUaGVzZSBhcmUgYWxzbyB1c2VkIGJ5IHB0cmFjZSgyKS4gIFRoZSBjb3JyZXNwb25kaW5nCisrICAgdHlwZXMgYXJlIGBlbGZfZ3JlZ3NldF90JyBmb3IgdGhlIGdlbmVyYWwtcHVycG9zZSByZWdpc3RlcnMgKHdpdGgKKysgICBgZWxmX2dyZWdfdCcgdGhlIHR5cGUgb2YgYSBzaW5nbGUgR1AgcmVnaXN0ZXIpIGFuZCBgZWxmX2ZwcmVnc2V0X3QnCisrICAgZm9yIHRoZSBmbG9hdGluZy1wb2ludCByZWdpc3RlcnMuCisrCisrICAgVGhvc2UgdHlwZXMgdXNlZCB0byBiZSBhdmFpbGFibGUgdW5kZXIgdGhlIG5hbWVzIGBncmVnc2V0X3QnIGFuZAorKyAgIGBmcHJlZ3NldF90JyB0b28sIGFuZCBHREIgdXNlZCB0aG9zZSBuYW1lcyBpbiB0aGUgcGFzdC4gIEJ1dCB0aG9zZQorKyAgIG5hbWVzIGFyZSBub3cgdXNlZCBmb3IgdGhlIHJlZ2lzdGVyIHNldHMgdXNlZCBpbiB0aGUgYG1jb250ZXh0X3QnCisrICAgdHlwZSwgd2hpY2ggaGF2ZSBhIGRpZmZlcmVudCBzaXplIGFuZCBsYXlvdXQuICAqLworKworKy8qIE1hcHBpbmcgYmV0d2VlbiB0aGUgZ2VuZXJhbC1wdXJwb3NlIHJlZ2lzdGVycyBpbiBgc3RydWN0IHVzZXInCisrICAgZm9ybWF0IGFuZCBHREIncyByZWdpc3RlciBjYWNoZSBsYXlvdXQuICAqLworKworKy8qIEZyb20gPHN5cy9yZWcuaD4uICAqLworK3N0YXRpYyBpbnQgc2hfbGludXhfZ3JlZ3NldF9yZWdfb2Zmc2V0W10gPQorK3sKKysgMCwJNCwJOCwJMTIsCTE2LAkyMCwJMjQsCTI4LAorKyAzMiwJMzYsCTQwLAk0NCwJNDgsCTUyLAk1NiwJNjAsCisrCisrIFJFR19QQyo0LCAgIFJFR19QUio0LCAgIFJFR19HQlIqNCwgIC0xLAorKyBSRUdfTUFDSCo0LCBSRUdfTUFDTCo0LCBSRUdfU1IqNCwKKyt9OworKworKy8qIE1hcHBpbmcgYmV0d2VlbiB0aGUgZ2VuZXJhbC1wdXJwb3NlIHJlZ2lzdGVycyBpbiBgc3RydWN0CisrICAgc2lnY29udGV4dCcgZm9ybWF0IGFuZCBHREIncyByZWdpc3RlciBjYWNoZSBsYXlvdXQuICAqLworKworKy8qIEZyb20gPGFzbS9zaWdjb250ZXh0Lmg+LiAgKi8KKytzdGF0aWMgaW50IHNoX2xpbnV4X3NjX3JlZ19vZmZzZXRbXSA9CisreworKyA0LAk4LAkxMiwJMTYsCTIwLAkyNCwJMjgsCTMyLAorKyAzNiwJNDAsCTQ0LAk0OCwJNTIsCTU2LAk2MCwJNjQsCisrIDY4LAk3MiwJODAsCS0xLAorKyA4NCwJODgsCTc2CisrfTsKKysKKyBzdGF0aWMgdm9pZAorIHNoX2xpbnV4X2luaXRfYWJpIChzdHJ1Y3QgZ2RiYXJjaF9pbmZvIGluZm8sIHN0cnVjdCBnZGJhcmNoICpnZGJhcmNoKQorIHsKKysgIHN0cnVjdCBnZGJhcmNoX3RkZXAgKnRkZXAgPSBnZGJhcmNoX3RkZXAgKGdkYmFyY2gpOworKyAgYmZkIGFiZmQ7CisrCisrICB0ZGVwLT5ncmVnc2V0X3JlZ19vZmZzZXQgPSBzaF9saW51eF9ncmVnc2V0X3JlZ19vZmZzZXQ7CisrICB0ZGVwLT5ncmVnc2V0X251bV9yZWdzID0gQVJSQVlfU0laRSAoc2hfbGludXhfZ3JlZ3NldF9yZWdfb2Zmc2V0KTsKKysgIHRkZXAtPnNpemVvZl9ncmVnc2V0ID0gMjMgKiA0OworKworKyAgdGRlcC0+amJfcGNfb2Zmc2V0ID0gMzI7ICAgICAvKiBGcm9tIDxiaXRzL3NldGptcC5oPi4gICovCisrCisrICB0ZGVwLT5zaWd0cmFtcF9wID0gc2hfbGludXhfc2lndHJhbXBfcDsKKysgIHRkZXAtPnNpZ2NvbnRleHRfYWRkciA9IHNoX2xpbnV4X3NpZ2NvbnRleHRfYWRkcjsKKysgIHRkZXAtPnNjX3JlZ19vZmZzZXQgPSBzaF9saW51eF9zY19yZWdfb2Zmc2V0OworKyAgdGRlcC0+c2NfbnVtX3JlZ3MgPSBBUlJBWV9TSVpFIChzaF9saW51eF9zY19yZWdfb2Zmc2V0KTsKKysKKysgIGZyYW1lX3Vud2luZF9hcHBlbmRfdW53aW5kZXIoZ2RiYXJjaCwgJnNoX2xpbnV4X3NpZ3RyYW1wX2ZyYW1lX3Vud2luZCk7CisrCisrICAvKiBJZiB3ZSBoYXZlIGEgcmVnaXN0ZXIgbWFwcGluZywgZW5hYmxlIHRoZSBnZW5lcmljIGNvcmUgZmlsZQorKyAgICAgc3VwcG9ydCwgdW5sZXNzIGl0IGhhcyBhbHJlYWR5IGJlZW4gZW5hYmxlZC4gICovCisrICBpZiAodGRlcC0+Z3JlZ3NldF9yZWdfb2Zmc2V0CisrICAgICAgJiYgIWdkYmFyY2hfcmVnc2V0X2Zyb21fY29yZV9zZWN0aW9uX3AgKGdkYmFyY2gpKQorKyAgICBzZXRfZ2RiYXJjaF9yZWdzZXRfZnJvbV9jb3JlX3NlY3Rpb24gKGdkYmFyY2gsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaF9saW51eF9yZWdzZXRfZnJvbV9jb3JlX3NlY3Rpb24pOworKworICAgbGludXhfaW5pdF9hYmkgKGluZm8sIGdkYmFyY2gpOworIAorICAgLyogR05VL0xpbnV4IHVzZXMgU1ZSNC1zdHlsZSBzaGFyZWQgbGlicmFyaWVzLiAgKi8KK2RpZmYgLS1naXQgYS9nZGIvc2gtdGRlcC5jIGIvZ2RiL3NoLXRkZXAuYworaW5kZXggMzM2YjQ4ZS4uODQ3YjI3MSAxMDA2NDQKKy0tLSBhL2dkYi9zaC10ZGVwLmMKKysrKyBiL2dkYi9zaC10ZGVwLmMKK0BAIC0yMSw2ICsyMSw5IEBACisgICAgc2FjQGN5Z251cy5jb20uICAqLworIAorICNpbmNsdWRlICJkZWZzLmgiCisrI2luY2x1ZGUgImFyY2gtdXRpbHMuaCIKKysjaW5jbHVkZSAiY29tbWFuZC5oIgorKyNpbmNsdWRlICJkdW1teS1mcmFtZS5oIgorICNpbmNsdWRlICJmcmFtZS5oIgorICNpbmNsdWRlICJmcmFtZS1iYXNlLmgiCisgI2luY2x1ZGUgImZyYW1lLXVud2luZC5oIgorQEAgLTM1LDYgKzM4LDcgQEAKKyAjaW5jbHVkZSAiYXJjaC11dGlscy5oIgorICNpbmNsdWRlICJmbG9hdGZvcm1hdC5oIgorICNpbmNsdWRlICJyZWdjYWNoZS5oIgorKyNpbmNsdWRlICJyZWdzZXQuaCIKKyAjaW5jbHVkZSAiZG91Ymxlc3QuaCIKKyAjaW5jbHVkZSAib3NhYmkuaCIKKyAjaW5jbHVkZSAicmVnZ3JvdXBzLmgiCitAQCAtNjcsMjMgKzcxLDYgQEAgc3RhdGljIGNvbnN0IGNoYXIgKmNvbnN0IHNoX2NjX2VudW1bXSA9IHsKKyAKKyBzdGF0aWMgY29uc3QgY2hhciAqc2hfYWN0aXZlX2NhbGxpbmdfY29udmVudGlvbiA9IHNoX2NjX2djYzsKKyAKKy0jZGVmaW5lIFNIX05VTV9SRUdTIDY3CistCistc3RydWN0IHNoX2ZyYW1lX2NhY2hlCisteworLSAgLyogQmFzZSBhZGRyZXNzLiAgKi8KKy0gIENPUkVfQUREUiBiYXNlOworLSAgTE9OR0VTVCBzcF9vZmZzZXQ7CistICBDT1JFX0FERFIgcGM7CistCistICAvKiBGbGFnIHNob3dpbmcgdGhhdCBhIGZyYW1lIGhhcyBiZWVuIGNyZWF0ZWQgaW4gdGhlIHByb2xvZ3VlIGNvZGUuICAqLworLSAgaW50IHVzZXNfZnA7CistCistICAvKiBTYXZlZCByZWdpc3RlcnMuICAqLworLSAgQ09SRV9BRERSIHNhdmVkX3JlZ3NbU0hfTlVNX1JFR1NdOworLSAgQ09SRV9BRERSIHNhdmVkX3NwOworLX07CistCisgc3RhdGljIGludAorIHNoX2lzX3JlbmVzYXNfY2FsbGluZ19jb252ZW50aW9uIChzdHJ1Y3QgdHlwZSAqZnVuY190eXBlKQorIHsKK0BAIC0xMDQzLDcgKzEwMzAsNyBAQCBzaF90cmVhdF9hc19mbHRfcCAoc3RydWN0IHR5cGUgKnR5cGUpCisgICAgIHJldHVybiAwOworICAgLyogT3RoZXJ3aXNlIGlmIHRoZSB0eXBlIG9mIHRoYXQgbWVtYmVyIGlzIGZsb2F0LCB0aGUgd2hvbGUgdHlwZSBpcworICAgICAgdHJlYXRlZCBhcyBmbG9hdC4gICovCistICBpZiAoVFlQRV9DT0RFIChUWVBFX0ZJRUxEX1RZUEUgKHR5cGUsIDApKSA9PSBUWVBFX0NPREVfRkxUKQorKyAgaWYgKFRZUEVfQ09ERSAoY2hlY2tfdHlwZWRlZiAoVFlQRV9GSUVMRF9UWVBFICh0eXBlLCAwKSkpID09IFRZUEVfQ09ERV9GTFQpCisgICAgIHJldHVybiAxOworICAgLyogT3RoZXJ3aXNlIGl0J3Mgbm90IHRyZWF0ZWQgYXMgZmxvYXQuICAqLworICAgcmV0dXJuIDA7CitAQCAtMTA5Myw3ICsxMDgwLDcgQEAgc2hfcHVzaF9kdW1teV9jYWxsX2ZwdSAoc3RydWN0IGdkYmFyY2ggKmdkYmFyY2gsCisgICAgICBpbiBmb3VyIHJlZ2lzdGVycyBhdmFpbGFibGUuICBMb29wIHRocnUgYXJncyBmcm9tIGZpcnN0IHRvIGxhc3QuICAqLworICAgZm9yIChhcmdudW0gPSAwOyBhcmdudW0gPCBuYXJnczsgYXJnbnVtKyspCisgICAgIHsKKy0gICAgICB0eXBlID0gdmFsdWVfdHlwZSAoYXJnc1thcmdudW1dKTsKKysgICAgICB0eXBlID0gY2hlY2tfdHlwZWRlZiAodmFsdWVfdHlwZSAoYXJnc1thcmdudW1dKSk7CisgICAgICAgbGVuID0gVFlQRV9MRU5HVEggKHR5cGUpOworICAgICAgIHZhbCA9IHNoX2p1c3RpZnlfdmFsdWVfaW5fcmVnIChnZGJhcmNoLCBhcmdzW2FyZ251bV0sIGxlbik7CisgCitAQCAtMTgyMSw3ICsxODA4LDcgQEAgc2hfZHdhcmYyX2ZyYW1lX2luaXRfcmVnIChzdHJ1Y3QgZ2RiYXJjaCAqZ2RiYXJjaCwgaW50IHJlZ251bSwKKyAgICAgcmVnLT5ob3cgPSBEV0FSRjJfRlJBTUVfUkVHX1VOREVGSU5FRDsKKyB9CisgCistc3RhdGljIHN0cnVjdCBzaF9mcmFtZV9jYWNoZSAqCisrc3RydWN0IHNoX2ZyYW1lX2NhY2hlICoKKyBzaF9hbGxvY19mcmFtZV9jYWNoZSAodm9pZCkKKyB7CisgICBzdHJ1Y3Qgc2hfZnJhbWVfY2FjaGUgKmNhY2hlOworQEAgLTE4NDgsNyArMTgzNSw3IEBAIHNoX2FsbG9jX2ZyYW1lX2NhY2hlICh2b2lkKQorICAgcmV0dXJuIGNhY2hlOworIH0KKyAKKy1zdGF0aWMgc3RydWN0IHNoX2ZyYW1lX2NhY2hlICoKKytzdHJ1Y3Qgc2hfZnJhbWVfY2FjaGUgKgorIHNoX2ZyYW1lX2NhY2hlIChzdHJ1Y3QgZnJhbWVfaW5mbyAqdGhpc19mcmFtZSwgdm9pZCAqKnRoaXNfY2FjaGUpCisgeworICAgc3RydWN0IGdkYmFyY2ggKmdkYmFyY2ggPSBnZXRfZnJhbWVfYXJjaCAodGhpc19mcmFtZSk7CitAQCAtMTkxNSw5ICsxOTAyLDkgQEAgc2hfZnJhbWVfY2FjaGUgKHN0cnVjdCBmcmFtZV9pbmZvICp0aGlzX2ZyYW1lLCB2b2lkICoqdGhpc19jYWNoZSkKKyAgIHJldHVybiBjYWNoZTsKKyB9CisgCistc3RhdGljIHN0cnVjdCB2YWx1ZSAqCistc2hfZnJhbWVfcHJldl9yZWdpc3RlciAoc3RydWN0IGZyYW1lX2luZm8gKnRoaXNfZnJhbWUsCistCQkJdm9pZCAqKnRoaXNfY2FjaGUsIGludCByZWdudW0pCisrc3RydWN0IHZhbHVlICoKKytzaF9mcmFtZV9wcmV2X3JlZ2lzdGVyIChzdHJ1Y3QgZnJhbWVfaW5mbyAqdGhpc19mcmFtZSwgdm9pZCAqKnRoaXNfY2FjaGUsCisrCQkJaW50IHJlZ251bSkKKyB7CisgICBzdHJ1Y3QgZ2RiYXJjaCAqZ2RiYXJjaCA9IGdldF9mcmFtZV9hcmNoICh0aGlzX2ZyYW1lKTsKKyAgIHN0cnVjdCBzaF9mcmFtZV9jYWNoZSAqY2FjaGUgPSBzaF9mcmFtZV9jYWNoZSAodGhpc19mcmFtZSwgdGhpc19jYWNoZSk7CitAQCAtMTkzMSw3ICsxOTE4LDcgQEAgc2hfZnJhbWVfcHJldl9yZWdpc3RlciAoc3RydWN0IGZyYW1lX2luZm8gKnRoaXNfZnJhbWUsCisgICAgICB0aGUgY3VycmVudCBmcmFtZS4gIEZyb2IgcmVnbnVtIHNvIHRoYXQgd2UgcHVsbCB0aGUgdmFsdWUgZnJvbQorICAgICAgdGhlIGNvcnJlY3QgcGxhY2UuICAqLworICAgaWYgKHJlZ251bSA9PSBnZGJhcmNoX3BjX3JlZ251bSAoZ2RiYXJjaCkpCistICAgIHJlZ251bSA9IFBSX1JFR05VTTsKKysgICAgcmVnbnVtID0gUFJfUkVHTlVNOyAvKiBYWFg6IHJlYWxseT8gKi8KKyAKKyAgIGlmIChyZWdudW0gPCBTSF9OVU1fUkVHUyAmJiBjYWNoZS0+c2F2ZWRfcmVnc1tyZWdudW1dICE9IC0xKQorICAgICByZXR1cm4gZnJhbWVfdW53aW5kX2dvdF9tZW1vcnkgKHRoaXNfZnJhbWUsIHJlZ251bSwKK0BAIC0yMjQwLDggKzIyMjcsOCBAQCBzaF9yZXR1cm5faW5fZmlyc3RfaGlkZGVuX3BhcmFtX3AgKHN0cnVjdCBnZGJhcmNoICpnZGJhcmNoLAorIHN0YXRpYyBzdHJ1Y3QgZ2RiYXJjaCAqCisgc2hfZ2RiYXJjaF9pbml0IChzdHJ1Y3QgZ2RiYXJjaF9pbmZvIGluZm8sIHN0cnVjdCBnZGJhcmNoX2xpc3QgKmFyY2hlcykKKyB7CistICBzdHJ1Y3QgZ2RiYXJjaCAqZ2RiYXJjaDsKKyAgIHN0cnVjdCBnZGJhcmNoX3RkZXAgKnRkZXA7CisrICBzdHJ1Y3QgZ2RiYXJjaCAqZ2RiYXJjaDsKKyAKKyAgIC8qIFNINSBpcyBoYW5kbGVkIGVudGlyZWx5IGluIHNoNjQtdGRlcC5jLiAgKi8KKyAgIGlmIChpbmZvLmJmZF9hcmNoX2luZm8tPm1hY2ggPT0gYmZkX21hY2hfc2g1KQorQEAgLTIyNTcsNiArMjI0NCwxOCBAQCBzaF9nZGJhcmNoX2luaXQgKHN0cnVjdCBnZGJhcmNoX2luZm8gaW5mbywgc3RydWN0IGdkYmFyY2hfbGlzdCAqYXJjaGVzKQorICAgdGRlcCA9IFhDTkVXIChzdHJ1Y3QgZ2RiYXJjaF90ZGVwKTsKKyAgIGdkYmFyY2ggPSBnZGJhcmNoX2FsbG9jICgmaW5mbywgdGRlcCk7CisgCisrICAvKiBHZW5lcmFsLXB1cnBvc2UgcmVnaXN0ZXJzLiAgKi8KKysgIHRkZXAtPmdyZWdzZXQgPSBOVUxMOworKyAgdGRlcC0+Z3JlZ3NldF9yZWdfb2Zmc2V0ID0gTlVMTDsKKysgIHRkZXAtPmdyZWdzZXRfbnVtX3JlZ3MgPSAyMzsKKysgIHRkZXAtPnNpemVvZl9ncmVnc2V0ID0gMDsKKysKKysgIC8qIEZsb2F0aW5nLXBvaW50IHJlZ2lzdGVycy4gICovCisrICB0ZGVwLT5mcHJlZ3NldCA9IE5VTEw7CisrICB0ZGVwLT5zaXplb2ZfZnByZWdzZXQgPSAzNCo0OworKworKyAgdGRlcC0+amJfcGNfb2Zmc2V0ID0gLTE7CisrCisgICBzZXRfZ2RiYXJjaF9zaG9ydF9iaXQgKGdkYmFyY2gsIDIgKiBUQVJHRVRfQ0hBUl9CSVQpOworICAgc2V0X2dkYmFyY2hfaW50X2JpdCAoZ2RiYXJjaCwgNCAqIFRBUkdFVF9DSEFSX0JJVCk7CisgICBzZXRfZ2RiYXJjaF9sb25nX2JpdCAoZ2RiYXJjaCwgNCAqIFRBUkdFVF9DSEFSX0JJVCk7CitAQCAtMjQwNywxMCArMjQwNiwxMSBAQCBzaF9nZGJhcmNoX2luaXQgKHN0cnVjdCBnZGJhcmNoX2luZm8gaW5mbywgc3RydWN0IGdkYmFyY2hfbGlzdCAqYXJjaGVzKQorICAgICAgIGJyZWFrOworICAgICB9CisgCisrICBkd2FyZjJfYXBwZW5kX3Vud2luZGVycyAoZ2RiYXJjaCk7CisrCisgICAvKiBIb29rIGluIEFCSS1zcGVjaWZpYyBvdmVycmlkZXMsIGlmIHRoZXkgaGF2ZSBiZWVuIHJlZ2lzdGVyZWQuICAqLworICAgZ2RiYXJjaF9pbml0X29zYWJpIChpbmZvLCBnZGJhcmNoKTsKKyAKKy0gIGR3YXJmMl9hcHBlbmRfdW53aW5kZXJzIChnZGJhcmNoKTsKKyAgIGZyYW1lX3Vud2luZF9hcHBlbmRfdW53aW5kZXIgKGdkYmFyY2gsICZzaF9zdHViX3Vud2luZCk7CisgICBmcmFtZV91bndpbmRfYXBwZW5kX3Vud2luZGVyIChnZGJhcmNoLCAmc2hfZnJhbWVfdW53aW5kKTsKKyAKK2RpZmYgLS1naXQgYS9nZGIvc2gtdGRlcC5oIGIvZ2RiL3NoLXRkZXAuaAoraW5kZXggNjY2OTY4Zi4uNjJjNjViNSAxMDA2NDQKKy0tLSBhL2dkYi9zaC10ZGVwLmgKKysrKyBiL2dkYi9zaC10ZGVwLmgKK0BAIC0yMSw2ICsyMSwxMiBAQAorIAorIC8qIENvbnRyaWJ1dGVkIGJ5IFN0ZXZlIENoYW1iZXJsYWluIHNhY0BjeWdudXMuY29tLiAgKi8KKyAKKytzdHJ1Y3QgZnJhbWVfaW5mbzsKKytzdHJ1Y3QgZ2RiYXJjaDsKKytzdHJ1Y3QgcmVnZ3JvdXA7Cisrc3RydWN0IHJlZ3NldDsKKytzdHJ1Y3QgcmVnY2FjaGU7CisrCisgLyogUmVnaXN0ZXJzIGZvciBhbGwgU0ggdmFyaWFudHMuICBVc2VkIGFsc28gYnkgc2gzLXJvbS5jLiAgKi8KKyBlbnVtCisgICB7CitAQCAtMjksNiArMzUsNyBAQCBlbnVtCisgICAgIEFSRzBfUkVHTlVNID0gNCwKKyAgICAgQVJHTEFTVF9SRUdOVU0gPSA3LAorICAgICBGUF9SRUdOVU0gPSAxNCwKKysgICAgU1BfUkVHTlVNID0gMTUsCisgICAgIFBDX1JFR05VTSA9IDE2LAorICAgICBQUl9SRUdOVU0gPSAxNywKKyAgICAgR0JSX1JFR05VTSA9IDE4LAorQEAgLTgxLDYgKzg4LDI0IEBAIGVudW0KKyAgICAgRlYwX1JFR05VTSA9IDc2LAorICAgICBGVl9MQVNUX1JFR05VTSA9IDc5CisgICB9OworKyNkZWZpbmUgU0hfTlVNX1JFR1MgNjcKKysKKytzdHJ1Y3Qgc2hfZnJhbWVfY2FjaGUKKyt7CisrICAvKiBCYXNlIGFkZHJlc3MuICAqLworKyAgQ09SRV9BRERSIGJhc2U7CisrICBMT05HRVNUIHNwX29mZnNldDsKKysgIENPUkVfQUREUiBwYzsKKysKKysgIC8qIEZsYWcgc2hvd2luZyB0aGF0IGEgZnJhbWUgaGFzIGJlZW4gY3JlYXRlZCBpbiB0aGUgcHJvbG9ndWUgY29kZS4gKi8KKysgIGludCB1c2VzX2ZwOworKworKyAgLyogU2F2ZWQgcmVnaXN0ZXJzLiAgKi8KKysgIENPUkVfQUREUiBzYXZlZF9yZWdzW1NIX05VTV9SRUdTXTsKKysgIENPUkVfQUREUiBzYXZlZF9zcDsKKyt9OworKworK2V4dGVybiBzdHJ1Y3Qgc2hfZnJhbWVfY2FjaGUgKnNoX2ZyYW1lX2NhY2hlIChzdHJ1Y3QgZnJhbWVfaW5mbyAqbmV4dF9mcmFtZSwgdm9pZCAqKnRoaXNfY2FjaGUpOworIAorIC8qIFRoaXMgc3RydWN0dXJlIGRlc2NyaWJlcyBhIHJlZ2lzdGVyIGluIGEgY29yZS1maWxlLiAgKi8KKyBzdHJ1Y3Qgc2hfY29yZWZpbGVfcmVnbWFwCitAQCAtODksOCArMTE0LDMyIEBAIHN0cnVjdCBzaF9jb3JlZmlsZV9yZWdtYXAKKyAgIHVuc2lnbmVkIGludCBvZmZzZXQ7CisgfTsKKyAKKysvKiBzaCBhcmNoaXRlY3R1cmUgc3BlY2lmaWMgaW5mb3JtYXRpb24uICAqLworIHN0cnVjdCBnZGJhcmNoX3RkZXAKKyB7CisrICAvKiBHZW5lcmFsLXB1cnBvc2UgcmVnaXN0ZXJzLiAgKi8KKysgIHN0cnVjdCByZWdzZXQgKmdyZWdzZXQ7CisrICBpbnQgKmdyZWdzZXRfcmVnX29mZnNldDsKKysgIGludCBncmVnc2V0X251bV9yZWdzOworKyAgc2l6ZV90IHNpemVvZl9ncmVnc2V0OworKworKyAgLyogRmxvYXRpbmctcG9pbnQgcmVnaXN0ZXJzLiAgKi8KKysgIHN0cnVjdCByZWdzZXQgKmZwcmVnc2V0OworKyAgc2l6ZV90IHNpemVvZl9mcHJlZ3NldDsKKysKKysgIC8qIE9mZnNldCBvZiBzYXZlZCBQQyBpbiBqbXBfYnVmLiAgKi8KKysgIGludCBqYl9wY19vZmZzZXQ7CisrCisrICAvKiBEZXRlY3Qgc2lndHJhbXAuICAqLworKyAgaW50ICgqc2lndHJhbXBfcCkgKHN0cnVjdCBmcmFtZV9pbmZvICopOworKworKyAgLyogR2V0IGFkZHJlc3Mgb2Ygc2lnY29udGV4dCBmb3Igc2lndHJhbXAuICAqLworKyAgQ09SRV9BRERSICgqc2lnY29udGV4dF9hZGRyKSAoc3RydWN0IGZyYW1lX2luZm8gKik7CisrCisrICAvKiBPZmZzZXQgb2YgcmVnaXN0ZXJzIGluIGBzdHJ1Y3Qgc2lnY29udGV4dCcuICAqLworKyAgaW50ICpzY19yZWdfb2Zmc2V0OworKyAgaW50IHNjX251bV9yZWdzOworKworICAgLyogTm9uLU5VTEwgd2hlbiBkZWJ1Z2dpbmcgZnJvbSBhIGNvcmUgZmlsZS4gIFByb3ZpZGVzIHRoZSBvZmZzZXQKKyAgICAgIHdoZXJlIGVhY2ggZ2VuZXJhbC1wdXJwb3NlIHJlZ2lzdGVyIGlzIHN0b3JlZCBpbnNpZGUgdGhlIGFzc29jaWF0ZWQKKyAgICAgIGNvcmUgZmlsZSBzZWN0aW9uLiAgKi8KK2RpZmYgLS1naXQgYS9nZGIvdGVzdHN1aXRlL2dkYi5hc20vYXNtLXNvdXJjZS5leHAgYi9nZGIvdGVzdHN1aXRlL2dkYi5hc20vYXNtLXNvdXJjZS5leHAKK2luZGV4IDZkOWFlZjguLjViNjZiNDIgMTAwNjQ0CistLS0gYS9nZGIvdGVzdHN1aXRlL2dkYi5hc20vYXNtLXNvdXJjZS5leHAKKysrKyBiL2dkYi90ZXN0c3VpdGUvZ2RiLmFzbS9hc20tc291cmNlLmV4cAorQEAgLTExNiw2ICsxMTYsMTEgQEAgc3dpdGNoIC1nbG9iIC0tIFtpc3RhcmdldF0geworICAgICAgICAgICAgIGFwcGVuZCBsaW5rLWZsYWdzICIgLW0gZWxmMzJwcGMiCisgICAgICAgICB9CisgICAgIH0KKysgICAgInNoKi1saW51eCoiIHsKKysgICAgICAgIHNldCBhc20tYXJjaCBzaC1saW51eAorKyAgICAgICAgc2V0IGFzbS1mbGFncyAiLUkke3NyY2Rpcn0vJHtzdWJkaXJ9IC1JJHtvYmpkaXJ9LyR7c3ViZGlyfSIKKysJc2V0IGRlYnVnLWZsYWdzICItZ2R3YXJmLTIiCisrICAgIH0KKyAgICAgInNoKi0qLSoiIHsKKyAgICAgICAgIHNldCBhc20tYXJjaCBzaAorIAlzZXQgZGVidWctZmxhZ3MgIi1nZHdhcmYtMiIKK2RpZmYgLS1naXQgYS9nZGIvdGVzdHN1aXRlL2dkYi5hc20vc2guaW5jIGIvZ2RiL3Rlc3RzdWl0ZS9nZGIuYXNtL3NoLmluYworaW5kZXggYTRhNWZjNS4uODllZmVkNyAxMDA2NDQKKy0tLSBhL2dkYi90ZXN0c3VpdGUvZ2RiLmFzbS9zaC5pbmMKKysrKyBiL2dkYi90ZXN0c3VpdGUvZ2RiLmFzbS9zaC5pbmMKK0BAIC00MCw5ICs0MCw4IEBACisgCW1vdi5sICAgLkxjb25zdFxALHIxCisgCWJyYQkuTGFmdGVyY29uc3RcQAorIAlub3AKKy0Jbm9wCistLkxjb25zdFxAOgorIAkuYWxpZ24JMgorKy5MY29uc3RcQDoKKyAJLmxvbmcJXHN1YnIKKyAJLmFsaWduCTEKKyAuTGFmdGVyY29uc3RcQDoKK2RpZmYgLS1naXQgYS9nZGIvdGVzdHN1aXRlL2dkYi5iYXNlL2Fubm90YTEuYyBiL2dkYi90ZXN0c3VpdGUvZ2RiLmJhc2UvYW5ub3RhMS5jCitpbmRleCA0MjRlMWI4Li4wZGUyZTdiIDEwMDY0NAorLS0tIGEvZ2RiL3Rlc3RzdWl0ZS9nZGIuYmFzZS9hbm5vdGExLmMKKysrKyBiL2dkYi90ZXN0c3VpdGUvZ2RiLmJhc2UvYW5ub3RhMS5jCitAQCAtMSw2ICsxLDkgQEAKKyAjaW5jbHVkZSA8c3RkaW8uaD4KKyAjaW5jbHVkZSA8c2lnbmFsLmg+CisgCisrI2lmZGVmIF9fc2hfXworKyNkZWZpbmUgc2lnbmFsKGEsYikgICAgLyogU2lnbmFscyBub3Qgc3VwcG9ydGVkIG9uIHRoaXMgdGFyZ2V0IC0gbWFrZSB0aGVtIGdvIGF3YXkgKi8KKysjZW5kaWYKKyAKKyB2b2lkCisgaGFuZGxlX1VTUjEgKGludCBzaWcpCitkaWZmIC0tZ2l0IGEvZ2RiL3Rlc3RzdWl0ZS9nZGIuYmFzZS9hbm5vdGEzLmMgYi9nZGIvdGVzdHN1aXRlL2dkYi5iYXNlL2Fubm90YTMuYworaW5kZXggNDI0ZTFiOC4uOTUyYWFmMjEgMTAwNjQ0CistLS0gYS9nZGIvdGVzdHN1aXRlL2dkYi5iYXNlL2Fubm90YTMuYworKysrIGIvZ2RiL3Rlc3RzdWl0ZS9nZGIuYmFzZS9hbm5vdGEzLmMKK0BAIC0xLDYgKzEsMTAgQEAKKyAjaW5jbHVkZSA8c3RkaW8uaD4KKyAjaW5jbHVkZSA8c2lnbmFsLmg+CisgCisrI2lmZGVmIF9fc2hfXworKyNkZWZpbmUgc2lnbmFsKGEsYikgICAgLyogU2lnbmFscyBub3Qgc3VwcG9ydGVkIG9uIHRoaXMgdGFyZ2V0IC0gbWFrZSB0aGVtIGdvIGF3YXkgKi8KKysjZW5kaWYKKysKKyAKKyB2b2lkCisgaGFuZGxlX1VTUjEgKGludCBzaWcpCitkaWZmIC0tZ2l0IGEvZ2RiL3Rlc3RzdWl0ZS9nZGIuYmFzZS9zaWdhbGwuYyBiL2dkYi90ZXN0c3VpdGUvZ2RiLmJhc2Uvc2lnYWxsLmMKK2luZGV4IDgxZjNiMDguLjE1NzRiMmQgMTAwNjQ0CistLS0gYS9nZGIvdGVzdHN1aXRlL2dkYi5iYXNlL3NpZ2FsbC5jCisrKysgYi9nZGIvdGVzdHN1aXRlL2dkYi5iYXNlL3NpZ2FsbC5jCitAQCAtMSw2ICsxLDkgQEAKKyAjaW5jbHVkZSA8c2lnbmFsLmg+CisgI2luY2x1ZGUgPHVuaXN0ZC5oPgorIAorKyNpZmRlZiBfX3NoX18KKysjZGVmaW5lIHNpZ25hbChhLGIpICAgIC8qIFNpZ25hbHMgbm90IHN1cHBvcnRlZCBvbiB0aGlzIHRhcmdldCAtIG1ha2UgdGhlbSBnbyBhd2F5ICovCisrI2VuZGlmCisgCisgLyogU2lnbmFsIGhhbmRsZXJzLCB3ZSBzZXQgYnJlYWtwb2ludHMgaW4gdGhlbSB0byBtYWtlIHN1cmUgdGhhdCB0aGUKKyAgICBzaWduYWxzIHJlYWxseSBnZXQgZGVsaXZlcmVkLiAgKi8KK2RpZmYgLS1naXQgYS9nZGIvdGVzdHN1aXRlL2dkYi5iYXNlL3NpZ25hbHMuYyBiL2dkYi90ZXN0c3VpdGUvZ2RiLmJhc2Uvc2lnbmFscy5jCitpbmRleCA3NTY2MDY4Li4xMjA1YTliIDEwMDY0NAorLS0tIGEvZ2RiL3Rlc3RzdWl0ZS9nZGIuYmFzZS9zaWduYWxzLmMKKysrKyBiL2dkYi90ZXN0c3VpdGUvZ2RiLmJhc2Uvc2lnbmFscy5jCitAQCAtMyw2ICszLDEwIEBACisgI2luY2x1ZGUgPHNpZ25hbC5oPgorICNpbmNsdWRlIDx1bmlzdGQuaD4KKyAKKysjaWZkZWYgX19zaF9fCisrI2RlZmluZSBzaWduYWwoYSxiKSAgICAvKiBTaWduYWxzIG5vdCBzdXBwb3J0ZWQgb24gdGhpcyB0YXJnZXQgLSBtYWtlIHRoZW0gZ28gYXdheSAqLworKyNkZWZpbmUgYWxhcm0oYSkgICAgICAgLyogRGl0dG8gZm9yIGFsYXJtKCkgKi8KKysjZW5kaWYKKyAKKyBzdGF0aWMgaW50IGNvdW50ID0gMDsKKyAKKy0tIAorMi44LjIKKwpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nZGIvZ2RiLzAwMDYtRG9udC1kaXNhYmxlLWxpYnJlYWRsaW5lLmEtd2hlbi11c2luZy1kaXNhYmxlLXN0YXRpYy5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2RiL2dkYi8wMDA2LURvbnQtZGlzYWJsZS1saWJyZWFkbGluZS5hLXdoZW4tdXNpbmctZGlzYWJsZS1zdGF0aWMucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzk0ZDI2ZAotLS0gL2Rldi9udWxsCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2RiL2dkYi8wMDA2LURvbnQtZGlzYWJsZS1saWJyZWFkbGluZS5hLXdoZW4tdXNpbmctZGlzYWJsZS1zdGF0aWMucGF0Y2gKQEAgLTAsMCArMSw1MCBAQAorRnJvbSBmMzkzMmNiMjk2MGZkNTQ2NTVhNDQ4YjEzZDVhNWI4MGYzNTZmOGRlIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KK0RhdGU6IFNhdCwgMzAgQXByIDIwMTYgMTU6MjU6MDMgLTA3MDAKK1N1YmplY3Q6IFtQQVRDSCAwNi8xMF0gRG9udCBkaXNhYmxlIGxpYnJlYWRsaW5lLmEgd2hlbiB1c2luZyAtLWRpc2FibGUtc3RhdGljCisKK0lmIGdkYiBpcyBjb25maWd1cmVkIHdpdGggLS1kaXNhYmxlLXN0YXRpYyB0aGVuIHRoaXMgaXMgZHV0aWZ1bGx5IHBhc3NlZCB0bworcmVhZGxpbmUgd2hpY2ggdGhlbiBkaXNhYmxlcyBsaWJyZWFkbGluZS5hLCB3aGljaCBjYXVzZXMgYSBwcm9ibGVtIHdoZW4gZ2RiCit0cmllcyB0byBsaW5rIGFnYWluc3QgdGhhdC4KKworVG8gZW5zdXJlIHRoYXQgcmVhZGxpbmUgYWx3YXlzIGJ1aWxkcyBzdGF0aWMgbGlicmFyaWVzLCBwYXNzIC0tZW5hYmxlLXN0YXRpYyB0bwordGhlIHN1Yi1jb25maWd1cmUuCisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworU2lnbmVkLW9mZi1ieTogUm9zcyBCdXJ0b24gPHJvc3MuYnVydG9uQGludGVsLmNvbT4KK1NpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CistLS0KKyBNYWtlZmlsZS5kZWYgfCAzICsrLQorIE1ha2VmaWxlLmluICB8IDIgKy0KKyAyIGZpbGVzIGNoYW5nZWQsIDMgaW5zZXJ0aW9ucygrKSwgMiBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL01ha2VmaWxlLmRlZiBiL01ha2VmaWxlLmRlZgoraW5kZXggZWE4NDUzZS4uMGZjNjZjNiAxMDA2NDQKKy0tLSBhL01ha2VmaWxlLmRlZgorKysrIGIvTWFrZWZpbGUuZGVmCitAQCAtMTA0LDcgKzEwNCw4IEBAIGhvc3RfbW9kdWxlcz0geyBtb2R1bGU9IGxpYmljb252OworIAkJbWlzc2luZz0gaW5zdGFsbC1odG1sOworIAkJbWlzc2luZz0gaW5zdGFsbC1pbmZvOyB9OworIGhvc3RfbW9kdWxlcz0geyBtb2R1bGU9IG00OyB9OworLWhvc3RfbW9kdWxlcz0geyBtb2R1bGU9IHJlYWRsaW5lOyB9OworK2hvc3RfbW9kdWxlcz0geyBtb2R1bGU9IHJlYWRsaW5lOworKyAgICAgICAgICAgICAgICBleHRyYV9jb25maWd1cmVfZmxhZ3M9Jy0tZW5hYmxlLXN0YXRpYyc7fTsKKyBob3N0X21vZHVsZXM9IHsgbW9kdWxlPSBzaWQ7IH07CisgaG9zdF9tb2R1bGVzPSB7IG1vZHVsZT0gc2ltOyB9OworIGhvc3RfbW9kdWxlcz0geyBtb2R1bGU9IHRleGluZm87IG5vX2luc3RhbGw9IHRydWU7IH07CitkaWZmIC0tZ2l0IGEvTWFrZWZpbGUuaW4gYi9NYWtlZmlsZS5pbgoraW5kZXggMjczM2M0ZC4uM2UwNGU4MCAxMDA2NDQKKy0tLSBhL01ha2VmaWxlLmluCisrKysgYi9NYWtlZmlsZS5pbgorQEAgLTI1MzgwLDcgKzI1MzgwLDcgQEAgY29uZmlndXJlLXJlYWRsaW5lOgorIAkgICQkcy8kJG1vZHVsZV9zcmNkaXIvY29uZmlndXJlIFwKKyAJICAtLXNyY2Rpcj0kJHt0b3BkaXJ9LyQkbW9kdWxlX3NyY2RpciBcCisgCSAgJChIT1NUX0NPTkZJR0FSR1MpIC0tYnVpbGQ9JHtidWlsZF9hbGlhc30gLS1ob3N0PSR7aG9zdF9hbGlhc30gXAorLQkgIC0tdGFyZ2V0PSR7dGFyZ2V0X2FsaWFzfSAgXAorKwkgIC0tdGFyZ2V0PSR7dGFyZ2V0X2FsaWFzfSAtLWVuYWJsZS1zdGF0aWMgXAorIAkgIHx8IGV4aXQgMQorIEBlbmRpZiByZWFkbGluZQorIAorLS0gCisyLjguMgorCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2dkYi9nZGIvMDAwNy11c2UtYXNtLXNnaWRlZnMuaC5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2RiL2dkYi8wMDA3LXVzZS1hc20tc2dpZGVmcy5oLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYzMmY4ZWUKLS0tIC9kZXYvbnVsbAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2dkYi9nZGIvMDAwNy11c2UtYXNtLXNnaWRlZnMuaC5wYXRjaApAQCAtMCwwICsxLDM2IEBACitGcm9tIDA0ODY3NWE5MTVhNzI5ODlmMjYxMzM4Njk3NTczMGRhMDE2ZTdjNWQgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBBbmRyZSBNY0N1cmR5IDxhbWNjdXJkeUBnbWFpbC5jb20+CitEYXRlOiBTYXQsIDMwIEFwciAyMDE2IDE1OjI5OjA2IC0wNzAwCitTdWJqZWN0OiBbUEFUQ0ggMDcvMTBdIHVzZSA8YXNtL3NnaWRlZnMuaD4KKworQnVpbGQgZml4IGZvciBNSVBTIHdpdGggbXVzbCBsaWJjCisKK1RoZSBNSVBTIHNwZWNpZmljIGhlYWRlciA8c2dpZGVmcy5oPiBpcyBwcm92aWRlZCBieSBnbGliYyBhbmQgdWNsaWJjCitidXQgbm90IGJ5IG11c2wuIFJlZ2FyZGxlc3Mgb2YgdGhlIGxpYmMsIHRoZSBrZXJuZWwgaGVhZGVycyBwcm92aWRlCis8YXNtL3NnaWRlZnMuaD4gd2hpY2ggcHJvdmlkZXMgdGhlIHNhbWUgZGVmaW5pdGlvbnMsIHNvIHVzZSB0aGF0CitpbnN0ZWFkLgorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworU2lnbmVkLW9mZi1ieTogQW5kcmUgTWNDdXJkeSA8YXJtY2N1cmR5QGdtYWlsLmNvbT4KK1NpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CistLS0KKyBnZGIvbWlwcy1saW51eC1uYXQuYyB8IDIgKy0KKyAxIGZpbGUgY2hhbmdlZCwgMSBpbnNlcnRpb24oKyksIDEgZGVsZXRpb24oLSkKKworZGlmZiAtLWdpdCBhL2dkYi9taXBzLWxpbnV4LW5hdC5jIGIvZ2RiL21pcHMtbGludXgtbmF0LmMKK2luZGV4IDQ0OWI0M2EuLjA5NjAzZGEgMTAwNjQ0CistLS0gYS9nZGIvbWlwcy1saW51eC1uYXQuYworKysrIGIvZ2RiL21pcHMtbGludXgtbmF0LmMKK0BAIC0zMSw3ICszMSw3IEBACisgI2luY2x1ZGUgImdkYl9wcm9jX3NlcnZpY2UuaCIKKyAjaW5jbHVkZSAiZ3JlZ3NldC5oIgorIAorLSNpbmNsdWRlIDxzZ2lkZWZzLmg+CisrI2luY2x1ZGUgPGFzbS9zZ2lkZWZzLmg+CisgI2luY2x1ZGUgIm5hdC9nZGJfcHRyYWNlLmgiCisgI2luY2x1ZGUgPGFzbS9wdHJhY2UuaD4KKyAKKy0tIAorMi44LjIKKwpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nZGIvZ2RiLzAwMDgtVXNlLWV4b3J0ZWQtZGVmaW5pdGlvbnMtb2YtU0lHUlRNSU4ucGF0Y2ggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2dkYi9nZGIvMDAwOC1Vc2UtZXhvcnRlZC1kZWZpbml0aW9ucy1vZi1TSUdSVE1JTi5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43ZTU4YjYxCi0tLSAvZGV2L251bGwKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nZGIvZ2RiLzAwMDgtVXNlLWV4b3J0ZWQtZGVmaW5pdGlvbnMtb2YtU0lHUlRNSU4ucGF0Y2gKQEAgLTAsMCArMSw1MCBAQAorRnJvbSBlNTRlYWQ5ZDgxZjRkMzg0MTI3NTFiODE1ZjkwOWRiM2NiMTQ0YmIxIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KK0RhdGU6IFNhdCwgMzAgQXByIDIwMTYgMTU6MzE6NDAgLTA3MDAKK1N1YmplY3Q6IFtQQVRDSCAwOC8xMF0gVXNlIGV4b3J0ZWQgZGVmaW5pdGlvbnMgb2YgU0lHUlRNSU4KKworRGVmaW5lIFdfU1RPUENPREUgaWYgbm90IGRlZmluZWQgYWxyZWFkeQorCitfX1NJR1JUTUlOIGlzIGludGVybmFsIHRvIGdsaWJjIGFuZCBvdGhlciBsaWJjcyBlLmcuIG11c2wKK21heSBub3QgcHJvdmlkZSB0aGVtCisKK0ZpeGVzCitodHRwczovL3NvdXJjZXdhcmUub3JnL2J1Z3ppbGxhL3Nob3dfYnVnLmNnaT9pZD0xMzAxMgorCitVcHN0cmVhbS1TdGF0dXM6IFN1Ym1pdHRlZAorCitTaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorLS0tCisgZ2RiL2xpbnV4LW5hdC5jICAgICB8IDQgKystLQorIGdkYi9uYXQvbGludXgtbmF0LmggfCA0ICsrKysKKyAyIGZpbGVzIGNoYW5nZWQsIDYgaW5zZXJ0aW9ucygrKSwgMiBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL2dkYi9saW51eC1uYXQuYyBiL2dkYi9saW51eC1uYXQuYworaW5kZXggMDgyOWJjYi4uM2I4YTg5NiAxMDA2NDQKKy0tLSBhL2dkYi9saW51eC1uYXQuYworKysrIGIvZ2RiL2xpbnV4LW5hdC5jCitAQCAtNDg0NSw2ICs0ODQ1LDYgQEAgbGluX3RocmVhZF9nZXRfdGhyZWFkX3NpZ25hbHMgKHNpZ3NldF90ICpzZXQpCisgICAvKiBOUFRMIHJlc2VydmVzIHRoZSBmaXJzdCB0d28gUlQgc2lnbmFscywgYnV0IGRvZXMgbm90IHByb3ZpZGUgYW55CisgICAgICB3YXkgZm9yIHRoZSBkZWJ1Z2dlciB0byBxdWVyeSB0aGUgc2lnbmFsIG51bWJlcnMgLSBmb3J0dW5hdGVseQorICAgICAgdGhleSBkb24ndCBjaGFuZ2UuICAqLworLSAgc2lnYWRkc2V0IChzZXQsIF9fU0lHUlRNSU4pOworLSAgc2lnYWRkc2V0IChzZXQsIF9fU0lHUlRNSU4gKyAxKTsKKysgIHNpZ2FkZHNldCAoc2V0LCBTSUdSVE1JTik7CisrICBzaWdhZGRzZXQgKHNldCwgU0lHUlRNSU4gKyAxKTsKKyB9CitkaWZmIC0tZ2l0IGEvZ2RiL25hdC9saW51eC1uYXQuaCBiL2dkYi9uYXQvbGludXgtbmF0LmgKK2luZGV4IDJiNDg1ZGIuLmQwNThhZmMgMTAwNjQ0CistLS0gYS9nZGIvbmF0L2xpbnV4LW5hdC5oCisrKysgYi9nZGIvbmF0L2xpbnV4LW5hdC5oCitAQCAtODUsNCArODUsOCBAQCBleHRlcm4gZW51bSB0YXJnZXRfc3RvcF9yZWFzb24gbHdwX3N0b3BfcmVhc29uIChzdHJ1Y3QgbHdwX2luZm8gKmx3cCk7CisgCisgZXh0ZXJuIHZvaWQgbGludXhfc3RvcF9sd3AgKHN0cnVjdCBsd3BfaW5mbyAqbHdwKTsKKyAKKysjaWZuZGVmIFdfU1RPUENPREUKKysjZGVmaW5lIFdfU1RPUENPREUoc2lnKSAoKHNpZykgPDwgOCB8IDB4N2YpCisrI2VuZGlmCisrCisgI2VuZGlmIC8qIExJTlVYX05BVF9IICovCistLSAKKzIuOC4yCisKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2RiL2dkYi8wMDA5LUNoYW5nZS1vcmRlci1vZi1DRkxBR1MucGF0Y2ggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2dkYi9nZGIvMDAwOS1DaGFuZ2Utb3JkZXItb2YtQ0ZMQUdTLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmEyMzAwNDcKLS0tIC9kZXYvbnVsbAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2dkYi9nZGIvMDAwOS1DaGFuZ2Utb3JkZXItb2YtQ0ZMQUdTLnBhdGNoCkBAIC0wLDAgKzEsMzQgQEAKK0Zyb20gYmEwYmJmODg3ZDQ5MTFjY2VlOWRmNTdjYjEzZWFmYjFkZTM0YmIzMSBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CitEYXRlOiBTYXQsIDMwIEFwciAyMDE2IDE1OjM1OjM5IC0wNzAwCitTdWJqZWN0OiBbUEFUQ0ggMDkvMTBdIENoYW5nZSBvcmRlciBvZiBDRkxBR1MKKworTGV0cyB1cyBvdmVycmlkZSBXZXJyb3IgaWYgbmVlZCBiZQorCitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUKKworU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KKy0tLQorIGdkYi9nZGJzZXJ2ZXIvTWFrZWZpbGUuaW4gfCA0ICsrLS0KKyAxIGZpbGUgY2hhbmdlZCwgMiBpbnNlcnRpb25zKCspLCAyIGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvZ2RiL2dkYnNlcnZlci9NYWtlZmlsZS5pbiBiL2dkYi9nZGJzZXJ2ZXIvTWFrZWZpbGUuaW4KK2luZGV4IDFlODc0ZTMuLjkxZTg1NTAgMTAwNjQ0CistLS0gYS9nZGIvZ2Ric2VydmVyL01ha2VmaWxlLmluCisrKysgYi9nZGIvZ2Ric2VydmVyL01ha2VmaWxlLmluCitAQCAtMTM4LDEwICsxMzgsMTAgQEAgQ1hYRkxBR1MgPSBAQ1hYRkxBR1NACisgQ1BQRkxBR1MgPSBAQ1BQRkxBR1NACisgCisgIyBJTlRFUk5BTF9DRkxBR1MgaXMgdGhlIGFnZ3JlZ2F0ZSBvZiBhbGwgb3RoZXIgKkNGTEFHUyBtYWNyb3MuCistSU5URVJOQUxfQ0ZMQUdTX0JBU0UgPSAgJHtDT01QSUxFUl9DRkxBR1N9ICR7R0xPQkFMX0NGTEFHU30gXAorK0lOVEVSTkFMX0NGTEFHU19CQVNFID0gICR7R0xPQkFMX0NGTEFHU30gXAorIAkke1BST0ZJTEVfQ0ZMQUdTfSAke0lOQ0xVREVfQ0ZMQUdTfSAke0NQUEZMQUdTfQorIElOVEVSTkFMX1dBUk5fQ0ZMQUdTID0gICR7SU5URVJOQUxfQ0ZMQUdTX0JBU0V9ICQoV0FSTl9DRkxBR1MpCistSU5URVJOQUxfQ0ZMQUdTID0gICR7SU5URVJOQUxfV0FSTl9DRkxBR1N9ICQoV0VSUk9SX0NGTEFHUykgLURHREJTRVJWRVIKKytJTlRFUk5BTF9DRkxBR1MgPSAgJHtJTlRFUk5BTF9XQVJOX0NGTEFHU30gJChXRVJST1JfQ0ZMQUdTKSAke0NPTVBJTEVSX0NGTEFHU30gLURHREJTRVJWRVIKKyAKKyAjIExERkxBR1MgaXMgc3BlY2lmaWNhbGx5IHJlc2VydmVkIGZvciBzZXR0aW5nIGZyb20gdGhlIGNvbW1hbmQgbGluZQorICMgd2hlbiBydW5uaW5nIG1ha2UuCistLSAKKzIuOC4yCisKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2RiL2dkYi8wMDEwLXJlc29sdmUtcmVzdHJpY3Qta2V5d29yZC1jb25mbGljdC5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2RiL2dkYi8wMDEwLXJlc29sdmUtcmVzdHJpY3Qta2V5d29yZC1jb25mbGljdC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNmMzNGM3Ci0tLSAvZGV2L251bGwKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nZGIvZ2RiLzAwMTAtcmVzb2x2ZS1yZXN0cmljdC1rZXl3b3JkLWNvbmZsaWN0LnBhdGNoCkBAIC0wLDAgKzEsNDggQEAKK0Zyb20gNWE5Y2NiOGMwNzI4YjY1OGZjNGY3ZjBmN2IzNjg3M2M2NDI3NGYxMCBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CitEYXRlOiBUdWUsIDEwIE1heSAyMDE2IDA4OjQ3OjA1IC0wNzAwCitTdWJqZWN0OiBbUEFUQ0ggMTAvMTBdIHJlc29sdmUgcmVzdHJpY3Qga2V5d29yZCBjb25mbGljdAorCitHQ0MgZGV0ZWN0cyB0aGF0IHdlIGNhbGwgJ3Jlc3RyaWN0JyBhcyBwYXJhbSBuYW1lIGluIGZ1bmN0aW9uCitzaWduYXR1cmVzIGFuZCBjb21wbGFpbnMgc2luY2UgYm90aCBwYXJhbXMgYXJlIGNhbGxlZCAncmVzdHJpY3QnCit0aGVyZWZvcmUgd2UgdXNlIF9fcmVzdHJpY3QgdG8gZGVub3RlIHRoZSBDOTkga2V5d29yaworCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KKy0tLQorIGdkYi9nbnVsaWIvaW1wb3J0L3N5c190aW1lLmluLmggfCA4ICsrKystLS0tCisgMSBmaWxlIGNoYW5nZWQsIDQgaW5zZXJ0aW9ucygrKSwgNCBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL2dkYi9nbnVsaWIvaW1wb3J0L3N5c190aW1lLmluLmggYi9nZGIvZ251bGliL2ltcG9ydC9zeXNfdGltZS5pbi5oCitpbmRleCBjNTU2YzVkLi4yYTYxMDdmIDEwMDY0NAorLS0tIGEvZ2RiL2dudWxpYi9pbXBvcnQvc3lzX3RpbWUuaW4uaAorKysrIGIvZ2RiL2dudWxpYi9pbXBvcnQvc3lzX3RpbWUuaW4uaAorQEAgLTkzLDIwICs5MywyMCBAQCBzdHJ1Y3QgdGltZXZhbAorICMgICBkZWZpbmUgZ2V0dGltZW9mZGF5IHJwbF9nZXR0aW1lb2ZkYXkKKyAjICBlbmRpZgorIF9HTF9GVU5DREVDTF9SUEwgKGdldHRpbWVvZmRheSwgaW50LAorLSAgICAgICAgICAgICAgICAgIChzdHJ1Y3QgdGltZXZhbCAqcmVzdHJpY3QsIHZvaWQgKnJlc3RyaWN0KQorKyAgICAgICAgICAgICAgICAgIChzdHJ1Y3QgdGltZXZhbCAqX19yZXN0cmljdCwgdm9pZCAqX19yZXN0cmljdCkKKyAgICAgICAgICAgICAgICAgICBfR0xfQVJHX05PTk5VTEwgKCgxKSkpOworIF9HTF9DWFhBTElBU19SUEwgKGdldHRpbWVvZmRheSwgaW50LAorLSAgICAgICAgICAgICAgICAgIChzdHJ1Y3QgdGltZXZhbCAqcmVzdHJpY3QsIHZvaWQgKnJlc3RyaWN0KSk7CisrICAgICAgICAgICAgICAgICAgKHN0cnVjdCB0aW1ldmFsICpfX3Jlc3RyaWN0LCB2b2lkICpfX3Jlc3RyaWN0KSk7CisgIyBlbHNlCisgIyAgaWYgIUBIQVZFX0dFVFRJTUVPRkRBWUAKKyBfR0xfRlVOQ0RFQ0xfU1lTIChnZXR0aW1lb2ZkYXksIGludCwKKy0gICAgICAgICAgICAgICAgICAoc3RydWN0IHRpbWV2YWwgKnJlc3RyaWN0LCB2b2lkICpyZXN0cmljdCkKKysgICAgICAgICAgICAgICAgICAoc3RydWN0IHRpbWV2YWwgKl9fcmVzdHJpY3QsIHZvaWQgKl9fcmVzdHJpY3QpCisgICAgICAgICAgICAgICAgICAgX0dMX0FSR19OT05OVUxMICgoMSkpKTsKKyAjICBlbmRpZgorIC8qIE5lZWQgdG8gY2FzdCwgYmVjYXVzZSBvbiBnbGliYyBzeXN0ZW1zLCBieSBkZWZhdWx0LCB0aGUgc2Vjb25kIGFyZ3VtZW50IGlzCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgdGltZXpvbmUgKi4gICovCisgX0dMX0NYWEFMSUFTX1NZU19DQVNUIChnZXR0aW1lb2ZkYXksIGludCwKKy0gICAgICAgICAgICAgICAgICAgICAgIChzdHJ1Y3QgdGltZXZhbCAqcmVzdHJpY3QsIHZvaWQgKnJlc3RyaWN0KSk7CisrICAgICAgICAgICAgICAgICAgICAgICAoc3RydWN0IHRpbWV2YWwgKl9fcmVzdHJpY3QsIHZvaWQgKl9fcmVzdHJpY3QpKTsKKyAjIGVuZGlmCisgX0dMX0NYWEFMSUFTV0FSTiAoZ2V0dGltZW9mZGF5KTsKKyAjZWxpZiBkZWZpbmVkIEdOVUxJQl9QT1NJWENIRUNLCistLSAKKzIuOC4yCisKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2RiL2dkYi8wMDExLWF2eF9tcHgucGF0Y2ggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2dkYi9nZGIvMDAxMS1hdnhfbXB4LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIwOWM0ZmMKLS0tIC9kZXYvbnVsbAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2dkYi9nZGIvMDAxMS1hdnhfbXB4LnBhdGNoCkBAIC0wLDAgKzEsMjYwMSBAQAorZ2RiOiBCYWNrcG9ydCBwYXRjaCB0byBzdXBwb3J0IGNoYW5nZXMgd2l0aCBBVlggYW5kIE1QWAorCitUaGUgY3VycmVudCBNUFggdGFyZ2V0IGRlc2NyaXB0aW9ucyBhc3N1bWUgdGhhdCBNUFggaXMgYWx3YXlzIGNvbWJpbmVkCit3aXRoIEFWWCwgaG93ZXZlciB0aGF0J3Mgbm90IGNvcnJlY3QuICBXZSBjYW4gaGF2ZSBtYWNoaW5lcyB3aXRoIE1QWAorYW5kIHdpdGhvdXQgQVZYOyBvciBtYWNoaW5lcyB3aXRoIEFWWCBhbmQgd2l0aG91dCBNUFguCisKK1RoaXMgcGF0Y2ggYWRkcyBuZXcgdGFyZ2V0IGRlc2NyaXB0aW9ucyBmb3IgbWFjaGluZXMgdGhhdCBzdXBwb3J0Citib3RoIE1QWCBhbmQgQVZYLCBhcyBkdXBsaWNhdGVzIG9mIHRoZSBleGlzdGluZyBNUFggZGVzY3JpcHRpb25zLgorCitUaGUgZm9sbG93aW5nIGNvbW1pdCB3aWxsIHJlbW92ZSBBVlggZnJvbSB0aGUgTVBYLW9ubHkgZGVzY3JpcHRpb25zLgorCitVcHN0cmVhbS1TdGF0dXM6IEJhY2twb3J0CisKK1NpZ25lZC1vZmYtYnk6IGJhdmVyeSA8YnJpYW4uYXZlcnlAaW50ZWwuY29tPgorCisKK09yaWduYWwgcGF0Y2ggY2hhbmdlbG9nIGFuZCBhdXRob3IgYXR0cmlidXRpb246CisKKzIwMTYtMDQtMTYgIFdhbGZyZWQgVGVkZXNjaGkgIDx3YWxmcmVkLnRlZGVzY2hpQGludGVsLmNvbT4KKworZ2RiL0NoYW5nZUxvZzoKKworCSogYW1kNjQtbGludXgtdGRlcC5jIChmZWF0dXJlcy9pMzg2L2FtZDY0LWF2eC1tcHgtbGludXguYyk6CisJTmV3IGluY2x1ZGUuCisJKGFtZDY0X2xpbnV4X2NvcmVfcmVhZF9kZXNjcmlwdGlvbik6IEFkZCBjYXNlIGZvcgorCSBYODZfWFNUQVRFX0FWWF9NUFhfTUFTSy4KKwkoX2luaXRpYWxpemVfYW1kNjRfbGludXhfdGRlcCk6IENhbGwgaW5pdGlhbGl6ZV90ZGVzY19hbWQ2NF9hdnhfbXB4X2xpbnV4LgorCSogYW1kNjQtbGludXgtdGRlcC5oICh0ZGVzY19hbWQ2NF9hdnhfbXB4X2xpbnV4KTogTmV3IGRlZmluaXRpb24uCisJKiBhbWQ2NC10ZGVwLmMgKGZlYXR1cmVzL2kzODYvYW1kNjQtYXZ4LW1weC5jKTogTmV3IGluY2x1ZGUuCisJKGFtZDY0X3RhcmdldF9kZXNjcmlwdGlvbik6IEFkZCBjYXNlIGZvciAgWDg2X1hTVEFURV9BVlhfTVBYX01BU0suCisJKF9pbml0aWFsaXplX2FtZDY0X3RkZXApOiBDYWxsIGluaXRpYWxpemVfdGRlc2NfYW1kNjRfYXZ4X21weC4KKwkqIGNvbW1vbi94ODYteHN0YXRlLmggKFg4Nl9YU1RBVEVfTVBYX01BU0spOiBSZW1vdmUgQVZYIGJpdHMuCisJKFg4Nl9YU1RBVEVfQVZYX01QWF9NQVNLKTogTmV3IGNhc2UuCisJKiBmZWF0dXJlcy9NYWtlZmlsZSAoaTM4Ni9pMzg2LWF2eC1tcHgsIGkzODYvaTM4Ni1hdngtbXB4LWxpbnV4KQorCShpMzg2L2FtZDY0LWF2eC1tcHgsIGkzODYvYW1kNjQtYXZ4LW1weC1saW51eCk6IE5ldyBydWxlcy4KKwkoaTM4Ni9pMzg2LWF2eC1tcHgtZXhwZWRpdGUsIGkzODYvaTM4Ni1hdngtbXB4LWxpbnV4LWV4cGVkaXRlKQorCShpMzg2L2FtZDY0LWF2eC1tcHgtZXhwZWRpdGUsIGkzODYvYW1kNjQtYXZ4LW1weC1saW51eC1leHBlZGl0ZSk6CisJTmV3IGV4cGVkaXRlcy4KKwkqIGkzODYtbGludXgtdGRlcC5jIChmZWF0dXJlcy9pMzg2L2kzODYtYXZ4LW1weC1saW51eC5jKTogTmV3CisJaW5jbHVkZS4KKwkoaTM4Nl9saW51eF9jb3JlX3JlYWRfZGVzY3JpcHRpb24pOiBBZGQgY2FzZQorCVg4Nl9YU1RBVEVfQVZYX01QWF9NQVNLLgorCShfaW5pdGlhbGl6ZV9pMzg2X2xpbnV4X3RkZXApOiBDYWxsCisJaW5pdGlhbGl6ZV90ZGVzY19pMzg2X2F2eF9tcHhfbGludXguCisJKiBpMzg2LWxpbnV4LXRkZXAuaCAodGRlc2NfaTM4Nl9hdnhfbXB4X2xpbnV4KTogTmV3IGluY2x1ZGUuCisJKiBpMzg2LXRkZXAuYyAoZmVhdHVyZXMvaTM4Ni9pMzg2LWF2eC1tcHguYyk6IE5ldyBpbmNsdWRlLgorCShpMzg2X3RhcmdldF9kZXNjcmlwdGlvbik6IEFkZCBjYXNlIGZvciBYODZfWFNUQVRFX0FWWF9NUFhfTUFTSy4KKwkqIHg4Ni1saW51eC1uYXQuYyAoeDg2X2xpbnV4X3JlYWRfZGVzY3JpcHRpb24pOiBBZGQgY2FzZSBmb3IKKwlYODZfWFNUQVRFX0FWWF9NUFhfTUFTSy4KKwkqIGZlYXR1cmVzL2kzODYvYW1kNjQtYXZ4LW1weC1saW51eC54bWw6IE5ldyBmaWxlLgorCSogZmVhdHVyZXMvaTM4Ni9pMzg2LWF2eC1tcHgtbGludXgueG1sOiBOZXcgZmlsZS4KKwkqIGZlYXR1cmVzL2kzODYvaTM4Ni1hdngtbXB4LnhtbDogTmV3IGZpbGUuCisJKiBmZWF0dXJlcy9pMzg2L2FtZDY0LWF2eC1tcHgueG1sOiBOZXcgZmlsZS4KKwkqIGZlYXR1cmVzL2kzODYvYW1kNjQtYXZ4LW1weC1saW51eC5jOiBHZW5lcmF0ZWQuCisJKiBmZWF0dXJlcy9pMzg2L2FtZDY0LWF2eC1tcHguYzogR2VuZXJhdGVkLgorCSogZmVhdHVyZXMvaTM4Ni9pMzg2LWF2eC1tcHgtbGludXguYzogR2VuZXJhdGVkLgorCSogZmVhdHVyZXMvaTM4Ni9pMzg2LWF2eC1tcHguYzogR2VuZXJhdGVkLgorCSogcmVnZm9ybWF0cy9pMzg2L2FtZDY0LWF2eC1tcHgtbGludXguZGF0OiBHZW5lcmF0ZWQuCisJKiByZWdmb3JtYXRzL2kzODYvYW1kNjQtYXZ4LW1weC5kYXQ6IEdlbmVyYXRlZC4KKwkqIHJlZ2Zvcm1hdHMvaTM4Ni9pMzg2LWF2eC1tcHgtbGludXguZGF0OiBHZW5lcmF0ZWQuCisJKiByZWdmb3JtYXRzL2kzODYvaTM4Ni1hdngtbXB4LmRhdDogR2VuZXJhdGVkLgorCitnZGIvZ2Ric2VydmVyL0NoYW5nZUxvZzoKKworCSogTWFrZWZpbGUuaW4gKGNsZWFuKTogQWRkIHJlbW92YWwgZm9yIGkzODYtYXZ4LW1weC5jLAorCWkzODYtYXZ4LW1weC1saW51eC5jLCBhbWQ2NC1hdngtbXB4LmMgYW5kIGFtZDY0LWF2eC1tcHgtbGludXguYy4KKwkoaTM4Ni1hdngtbXB4LmMsIGkzODYtYXZ4LW1weC1saW51eC5jLCBhbWQ2NC1hdngtbXB4LmMpCisJKGFtZDY0LWF2eC1tcHgtbGludXguYyk6IE5ldyBydWxlcy4KKwkoYW1kNjQtYXZ4LW1weC1saW51eC1pcGEubywgaTM4Ni1hdngtbXB4LWxpbnV4LWlwYS5vKTogTmV3IHJ1bGUuCisJKiBjb25maWd1cmUuc3J2IChzcnZfaTM4Nl9yZWdvYmopOiBBZGQgaTM4Ni1hdngtbXB4Lm8uCisJKHNydl9pMzg2X2xpbnV4X3JlZ29iaik6IEFkZCBpMzg2LWF2eC1tcHgtbGludXguby4KKwkoc3J2X2FtZDY0X3JlZ29iaik6IEFkZCBhbWQ2NC1hdngtbXB4Lm8uCisJKHNydl9hbWQ2NF9saW51eF9yZWdvYmopOiBBZGQgYW1kNjQtYXZ4LW1weC1saW51eC5vLgorCShzcnZfaTM4Nl94bWxmaWxlcyk6IEFkZCBpMzg2L2kzODYtYXZ4LW1weC54bWwuCisJKHNydl9hbWQ2NF94bWxmaWxlcyk6IEFkZCBpMzg2L2FtZDY0LWF2eC1tcHgueG1sLgorCShzcnZfaTM4Nl9saW51eF94bWxmaWxlcyk6IEFkZCBpMzg2L2kzODYtYXZ4LW1weC1saW51eC54bWwuCisJKHNydl9hbWQ2NF9saW51eF94bWxmaWxlcyk6IEFkZCBpMzg2L2FtZDY0LWF2eC1tcHgtbGludXgueG1sLgorCShpcGFfaTM4Nl9saW51eF9yZWdvYmopOiBBZGQgaTM4Ni1hdngtbXB4LWxpbnV4LWlwYS5vLgorCShpcGFfYW1kNjRfbGludXhfcmVnb2JqKTogQWRkIGFtZDY0LWF2eC1tcHgtbGludXgtaXBhLm8uCisJKiBsaW51eC14ODYtbG93LmMgKHg4Nl9saW51eF9yZWFkX2Rlc2NyaXB0aW9uKTogQWRkIGNhc2UgZm9yCisJWDg2X1hTVEFURV9BVlhfTVBYX01BU0suCisJKHg4Nl9nZXRfaXBhX3RkZXNjX2lkeCk6IEFkZCBjYXNlcyBmb3IgYXZ4X21weC4KKwkoaW5pdGlhbGl6ZV9sb3dfYXJjaCk6IENhbGwgaW5pdF9yZWdpc3RlcnNfYW1kNjRfYXZ4X21weF9saW51eCBhbmQKKwlpbml0X3JlZ2lzdGVyc19pMzg2X2F2eF9tcHhfbGludXguCisJKiBsaW51eC1pMzg2LWlwYS5jIChnZXRfaXBhX3RkZXNjKTogQWRkIGNhc2UgZm9yIGF2eF9tcHguCisJKGluaXRpYWxpemVfbG93X3RyYWNlcG9pbnQpOiBDYWxsCisJaW5pdF9yZWdpc3RlcnNfaTM4Nl9hdnhfbXB4X2xpbnV4LgorCSogbGludXgtYW1kNjQtaXBhLmMgKGdldF9pcGFfdGRlc2MpOiAgQWRkIGNhc2UgZm9yIGF2eF9tcHguCisJKGluaXRpYWxpemVfbG93X3RyYWNlcG9pbnQpOiBDYWxsCisJaW5pdF9yZWdpc3RlcnNfYW1kNjRfYXZ4X21weF9saW51eC4KKwkqIGxpbnV4LXg4Ni10ZGVzYy5oIChYODZfVERFU0NfQVZYX01QWCk6IE5ldyBlbnVtIHZhbHVlLgorCShpbml0X3JlZ2lzdGVyc19hbWQ2NF9hdnhfbXB4X2xpbnV4LCB0ZGVzY19hbWQ2NF9hdnhfbXB4X2xpbnV4KQorCShpbml0X3JlZ2lzdGVyc19pMzg2X2F2eF9tcHhfbGludXgsIHRkZXNjX2kzODZfYXZ4X21weF9saW51eCk6IE5ldworCWRlY2xhcmF0aW9ucy4KKworCisKKworZGlmZiAtLWdpdCBhL2dkYi9hbWQ2NC1saW51eC10ZGVwLmMgYi9nZGIvYW1kNjQtbGludXgtdGRlcC5jCitpbmRleCAyMWJjZDk5Li41MzI3ZjdjIDEwMDY0NAorLS0tIGEvZ2RiL2FtZDY0LWxpbnV4LXRkZXAuYworKysrIGIvZ2RiL2FtZDY0LWxpbnV4LXRkZXAuYworQEAgLTQzLDYgKzQzLDcgQEAKKyAjaW5jbHVkZSAiZmVhdHVyZXMvaTM4Ni9hbWQ2NC1saW51eC5jIgorICNpbmNsdWRlICJmZWF0dXJlcy9pMzg2L2FtZDY0LWF2eC1saW51eC5jIgorICNpbmNsdWRlICJmZWF0dXJlcy9pMzg2L2FtZDY0LW1weC1saW51eC5jIgorKyNpbmNsdWRlICJmZWF0dXJlcy9pMzg2L2FtZDY0LWF2eC1tcHgtbGludXguYyIKKyAjaW5jbHVkZSAiZmVhdHVyZXMvaTM4Ni9hbWQ2NC1hdng1MTItbGludXguYyIKKworICNpbmNsdWRlICJmZWF0dXJlcy9pMzg2L3gzMi1saW51eC5jIgorQEAgLTE1OTAsNiArMTU5MSwxMSBAQCBhbWQ2NF9saW51eF9jb3JlX3JlYWRfZGVzY3JpcHRpb24gKHN0cnVjdCBnZGJhcmNoICpnZGJhcmNoLAorIAlyZXR1cm4gdGRlc2NfeDMyX2F2eF9saW51eDsgIC8qIE5vIHgzMiBNUFggZmFsbGluZyBiYWNrIHRvIEFWWC4gICovCisgICAgICAgZWxzZQorIAlyZXR1cm4gdGRlc2NfYW1kNjRfbXB4X2xpbnV4OworKyAgICBjYXNlIFg4Nl9YU1RBVEVfQVZYX01QWF9NQVNLOgorKyAgICAgIGlmIChnZGJhcmNoX3B0cl9iaXQgKGdkYmFyY2gpID09IDMyKQorKwlyZXR1cm4gdGRlc2NfeDMyX2F2eF9saW51eDsgIC8qIE5vIHgzMiBNUFggZmFsbGluZyBiYWNrIHRvIEFWWC4gICovCisrICAgICAgZWxzZQorKwlyZXR1cm4gdGRlc2NfYW1kNjRfYXZ4X21weF9saW51eDsKKyAgICAgY2FzZSBYODZfWFNUQVRFX0FWWF9NQVNLOgorICAgICAgIGlmIChnZGJhcmNoX3B0cl9iaXQgKGdkYmFyY2gpID09IDMyKQorIAlyZXR1cm4gdGRlc2NfeDMyX2F2eF9saW51eDsKK0BAIC0yMjg1LDYgKzIyOTEsNyBAQCBfaW5pdGlhbGl6ZV9hbWQ2NF9saW51eF90ZGVwICh2b2lkKQorICAgaW5pdGlhbGl6ZV90ZGVzY19hbWQ2NF9saW51eCAoKTsKKyAgIGluaXRpYWxpemVfdGRlc2NfYW1kNjRfYXZ4X2xpbnV4ICgpOworICAgaW5pdGlhbGl6ZV90ZGVzY19hbWQ2NF9tcHhfbGludXggKCk7CisrICBpbml0aWFsaXplX3RkZXNjX2FtZDY0X2F2eF9tcHhfbGludXggKCk7CisgICBpbml0aWFsaXplX3RkZXNjX2FtZDY0X2F2eDUxMl9saW51eCAoKTsKKworICAgaW5pdGlhbGl6ZV90ZGVzY194MzJfbGludXggKCk7CitkaWZmIC0tZ2l0IGEvZ2RiL2FtZDY0LWxpbnV4LXRkZXAuaCBiL2dkYi9hbWQ2NC1saW51eC10ZGVwLmgKK2luZGV4IDg2NzM0NDIuLmQ2NGQ1ZDYgMTAwNjQ0CistLS0gYS9nZGIvYW1kNjQtbGludXgtdGRlcC5oCisrKysgYi9nZGIvYW1kNjQtbGludXgtdGRlcC5oCitAQCAtMzUsNiArMzUsNyBAQAorIGV4dGVybiBzdHJ1Y3QgdGFyZ2V0X2Rlc2MgKnRkZXNjX2FtZDY0X2xpbnV4OworIGV4dGVybiBzdHJ1Y3QgdGFyZ2V0X2Rlc2MgKnRkZXNjX2FtZDY0X2F2eF9saW51eDsKKyBleHRlcm4gc3RydWN0IHRhcmdldF9kZXNjICp0ZGVzY19hbWQ2NF9tcHhfbGludXg7CisrZXh0ZXJuIHN0cnVjdCB0YXJnZXRfZGVzYyAqdGRlc2NfYW1kNjRfYXZ4X21weF9saW51eDsKKyBleHRlcm4gc3RydWN0IHRhcmdldF9kZXNjICp0ZGVzY19hbWQ2NF9hdng1MTJfbGludXg7CisKKyBleHRlcm4gc3RydWN0IHRhcmdldF9kZXNjICp0ZGVzY194MzJfbGludXg7CitkaWZmIC0tZ2l0IGEvZ2RiL2FtZDY0LXRkZXAuYyBiL2dkYi9hbWQ2NC10ZGVwLmMKK2luZGV4IGZhZTkyYjIuLjg4ZTNiZjggMTAwNjQ0CistLS0gYS9nZGIvYW1kNjQtdGRlcC5jCisrKysgYi9nZGIvYW1kNjQtdGRlcC5jCitAQCAtNDQsNiArNDQsNyBAQAorICNpbmNsdWRlICJmZWF0dXJlcy9pMzg2L2FtZDY0LmMiCisgI2luY2x1ZGUgImZlYXR1cmVzL2kzODYvYW1kNjQtYXZ4LmMiCisgI2luY2x1ZGUgImZlYXR1cmVzL2kzODYvYW1kNjQtbXB4LmMiCisrI2luY2x1ZGUgImZlYXR1cmVzL2kzODYvYW1kNjQtYXZ4LW1weC5jIgorICNpbmNsdWRlICJmZWF0dXJlcy9pMzg2L2FtZDY0LWF2eDUxMi5jIgorCisgI2luY2x1ZGUgImZlYXR1cmVzL2kzODYveDMyLmMiCitAQCAtMzEzMiw2ICszMTMzLDggQEAgYW1kNjRfdGFyZ2V0X2Rlc2NyaXB0aW9uICh1aW50NjRfdCB4Y3IwKQorICAgICAgIHJldHVybiB0ZGVzY19hbWQ2NF9hdng1MTI7CisgICAgIGNhc2UgWDg2X1hTVEFURV9NUFhfTUFTSzoKKyAgICAgICByZXR1cm4gdGRlc2NfYW1kNjRfbXB4OworKyAgICBjYXNlIFg4Nl9YU1RBVEVfQVZYX01QWF9NQVNLOgorKyAgICAgIHJldHVybiB0ZGVzY19hbWQ2NF9hdnhfbXB4OworICAgICBjYXNlIFg4Nl9YU1RBVEVfQVZYX01BU0s6CisgICAgICAgcmV0dXJuIHRkZXNjX2FtZDY0X2F2eDsKKyAgICAgZGVmYXVsdDoKK0BAIC0zMTQ4LDYgKzMxNTEsNyBAQCBfaW5pdGlhbGl6ZV9hbWQ2NF90ZGVwICh2b2lkKQorICAgaW5pdGlhbGl6ZV90ZGVzY19hbWQ2NCAoKTsKKyAgIGluaXRpYWxpemVfdGRlc2NfYW1kNjRfYXZ4ICgpOworICAgaW5pdGlhbGl6ZV90ZGVzY19hbWQ2NF9tcHggKCk7CisrICBpbml0aWFsaXplX3RkZXNjX2FtZDY0X2F2eF9tcHggKCk7CisgICBpbml0aWFsaXplX3RkZXNjX2FtZDY0X2F2eDUxMiAoKTsKKworICAgaW5pdGlhbGl6ZV90ZGVzY194MzIgKCk7CitkaWZmIC0tZ2l0IGEvZ2RiL2NvbW1vbi94ODYteHN0YXRlLmggYi9nZGIvY29tbW9uL3g4Ni14c3RhdGUuaAoraW5kZXggODM4NjQyMC4uMGFhOTE2NCAxMDA2NDQKKy0tLSBhL2dkYi9jb21tb24veDg2LXhzdGF0ZS5oCisrKysgYi9nZGIvY29tbW9uL3g4Ni14c3RhdGUuaAorQEAgLTM5LDkgKzM5LDEwIEBACisgI2RlZmluZSBYODZfWFNUQVRFX1g4N19NQVNLCVg4Nl9YU1RBVEVfWDg3CisgI2RlZmluZSBYODZfWFNUQVRFX1NTRV9NQVNLCShYODZfWFNUQVRFX1g4NyB8IFg4Nl9YU1RBVEVfU1NFKQorICNkZWZpbmUgWDg2X1hTVEFURV9BVlhfTUFTSwkoWDg2X1hTVEFURV9TU0VfTUFTSyB8IFg4Nl9YU1RBVEVfQVZYKQorLSNkZWZpbmUgWDg2X1hTVEFURV9NUFhfTUFTSwkoWDg2X1hTVEFURV9BVlhfTUFTSyB8IFg4Nl9YU1RBVEVfTVBYKQorKyNkZWZpbmUgWDg2X1hTVEFURV9NUFhfTUFTSwkoWDg2X1hTVEFURV9TU0VfTUFTSyB8IFg4Nl9YU1RBVEVfTVBYKQorKyNkZWZpbmUgWDg2X1hTVEFURV9BVlhfTVBYX01BU0sJKFg4Nl9YU1RBVEVfQVZYX01BU0sgfCBYODZfWFNUQVRFX01QWCkKKyAjZGVmaW5lIFg4Nl9YU1RBVEVfQVZYNTEyX01BU0sJKFg4Nl9YU1RBVEVfQVZYX01BU0sgfCBYODZfWFNUQVRFX0FWWDUxMikKKy0jZGVmaW5lIFg4Nl9YU1RBVEVfTVBYX0FWWDUxMl9NQVNLIChYODZfWFNUQVRFX01QWF9NQVNLIHwgWDg2X1hTVEFURV9BVlg1MTIpCisrI2RlZmluZSBYODZfWFNUQVRFX01QWF9BVlg1MTJfTUFTSyAoWDg2X1hTVEFURV9BVlhfTVBYX01BU0sgfCBYODZfWFNUQVRFX0FWWDUxMikKKworICNkZWZpbmUgWDg2X1hTVEFURV9BTExfTUFTSwkoWDg2X1hTVEFURV9NUFhfQVZYNTEyX01BU0spCisKK2RpZmYgLS1naXQgYS9nZGIvZmVhdHVyZXMvTWFrZWZpbGUgYi9nZGIvZmVhdHVyZXMvTWFrZWZpbGUKK2luZGV4IDEwMTczY2YuLmU1YzUxNTQgMTAwNjQ0CistLS0gYS9nZGIvZmVhdHVyZXMvTWFrZWZpbGUKKysrKyBiL2dkYi9mZWF0dXJlcy9NYWtlZmlsZQorQEAgLTUwLDkgKzUwLDExIEBAIFdISUNIID0gYWFyY2g2NCBcCisgCWkzODYvYW1kNjQgaTM4Ni9hbWQ2NC1saW51eCBcCisgCWkzODYvaTM4Ni1hdnggaTM4Ni9pMzg2LWF2eC1saW51eCBcCisgCWkzODYvaTM4Ni1tcHggaTM4Ni9pMzg2LW1weC1saW51eCBcCisrCWkzODYvaTM4Ni1hdngtbXB4IGkzODYvaTM4Ni1hdngtbXB4LWxpbnV4IFwKKyAJaTM4Ni9pMzg2LWF2eDUxMiBpMzg2L2kzODYtYXZ4NTEyLWxpbnV4IFwKKyAJaTM4Ni9hbWQ2NC1hdnggaTM4Ni9hbWQ2NC1hdngtbGludXggXAorIAlpMzg2L2FtZDY0LW1weCBpMzg2L2FtZDY0LW1weC1saW51eCBcCisrCWkzODYvYW1kNjQtYXZ4LW1weCBpMzg2L2FtZDY0LWF2eC1tcHgtbGludXggXAorIAlpMzg2L2FtZDY0LWF2eDUxMiBpMzg2L2FtZDY0LWF2eDUxMi1saW51eCBcCisgCWkzODYveDMyIGkzODYveDMyLWxpbnV4IFwKKyAJaTM4Ni94MzItYXZ4IGkzODYveDMyLWF2eC1saW51eCBcCitAQCAtODMsNyArODUsOSBAQCBpMzg2L2FtZDY0LWxpbnV4LWV4cGVkaXRlID0gcmJwLHJzcCxyaXAKKyBpMzg2L2kzODYtYXZ4LWV4cGVkaXRlID0gZWJwLGVzcCxlaXAKKyBpMzg2L2kzODYtYXZ4LWxpbnV4LWV4cGVkaXRlID0gZWJwLGVzcCxlaXAKKyBpMzg2L2kzODYtbXB4LWV4cGVkaXRlID0gZWJwLGVzcCxlaXAKKytpMzg2L2kzODYtYXZ4LW1weC1leHBlZGl0ZSA9IGVicCxlc3AsZWlwCisgaTM4Ni9pMzg2LW1weC1saW51eC1leHBlZGl0ZSA9IGVicCxlc3AsZWlwCisraTM4Ni9pMzg2LWF2eC1tcHgtbGludXgtZXhwZWRpdGUgPSBlYnAsZXNwLGVpcAorIGkzODYvaTM4Ni1hdng1MTItZXhwZWRpdGUgPSBlYnAsZXNwLGVpcAorIGkzODYvaTM4Ni1hdng1MTItbGludXgtZXhwZWRpdGUgPSBlYnAsZXNwLGVpcAorIGkzODYvaTM4Ni1tbXgtZXhwZWRpdGUgPSBlYnAsZXNwLGVpcAorQEAgLTkxLDcgKzk1LDkgQEAgaTM4Ni9pMzg2LW1teC1saW51eC1leHBlZGl0ZSA9IGVicCxlc3AsZWlwCisgaTM4Ni9hbWQ2NC1hdngtZXhwZWRpdGUgPSByYnAscnNwLHJpcAorIGkzODYvYW1kNjQtYXZ4LWxpbnV4LWV4cGVkaXRlID0gcmJwLHJzcCxyaXAKKyBpMzg2L2FtZDY0LW1weC1leHBlZGl0ZSA9IHJicCxyc3AscmlwCisraTM4Ni9hbWQ2NC1hdngtbXB4LWV4cGVkaXRlID0gcmJwLHJzcCxyaXAKKyBpMzg2L2FtZDY0LW1weC1saW51eC1leHBlZGl0ZSA9IHJicCxyc3AscmlwCisraTM4Ni9hbWQ2NC1hdngtbXB4LWxpbnV4LWV4cGVkaXRlID0gcmJwLHJzcCxyaXAKKyBpMzg2L2FtZDY0LWF2eDUxMi1leHBlZGl0ZSA9IHJicCxyc3AscmlwCisgaTM4Ni9hbWQ2NC1hdng1MTItbGludXgtZXhwZWRpdGUgPSByYnAscnNwLHJpcAorIGkzODYveDMyLWV4cGVkaXRlID0gcmJwLHJzcCxyaXAKK0BAIC0xNTYsNiArMTYyLDggQEAgWE1MVE9DID0gXAorIAlpMzg2L2FtZDY0LWxpbnV4LnhtbCBcCisgCWkzODYvYW1kNjQtbXB4LWxpbnV4LnhtbCBcCisgCWkzODYvYW1kNjQtbXB4LnhtbCBcCisrCWkzODYvYW1kNjQtYXZ4LW1weC1saW51eC54bWwgXAorKwlpMzg2L2FtZDY0LWF2eC1tcHgueG1sIFwKKyAJaTM4Ni9hbWQ2NC54bWwgXAorIAlpMzg2L2kzODYtYXZ4LWxpbnV4LnhtbCBcCisgCWkzODYvaTM4Ni1hdngueG1sIFwKK0BAIC0xNjYsNiArMTc0LDggQEAgWE1MVE9DID0gXAorIAlpMzg2L2kzODYtbW14LnhtbCBcCisgCWkzODYvaTM4Ni1tcHgtbGludXgueG1sIFwKKyAJaTM4Ni9pMzg2LW1weC54bWwgXAorKwlpMzg2L2kzODYtYXZ4LW1weC1saW51eC54bWwgXAorKwlpMzg2L2kzODYtYXZ4LW1weC54bWwgXAorIAlpMzg2L2kzODYueG1sIFwKKyAJaTM4Ni94MzItYXZ4LWxpbnV4LnhtbCBcCisgCWkzODYveDMyLWF2eC54bWwgXAorQEAgLTI3MSw2ICsyODEsMTAgQEAgJChvdXRkaXIpL2kzODYvaTM4Ni1tcHguZGF0OiBpMzg2LzMyYml0LWNvcmUueG1sIGkzODYvMzJiaXQtYXZ4LnhtbCBcCisgCQkJICAgICAgIGkzODYvMzJiaXQtbXB4LnhtbAorICQob3V0ZGlyKS9pMzg2L2kzODYtbXB4LWxpbnV4LmRhdDogaTM4Ni8zMmJpdC1jb3JlLnhtbCAJaTM4Ni8zMmJpdC1hdngueG1sIFwKKyAJCQkgICAgICAgaTM4Ni8zMmJpdC1saW51eC54bWwgaTM4Ni8zMmJpdC1tcHgueG1sCisrJChvdXRkaXIpL2kzODYvaTM4Ni1tcHgtbGludXguZGF0OiBpMzg2LzMyYml0LWNvcmUueG1sIFwKKysJCQkgICAgICAgaTM4Ni8zMmJpdC1saW51eC54bWwgaTM4Ni8zMmJpdC1tcHgueG1sCisrJChvdXRkaXIpL2kzODYvaTM4Ni1hdngtbXB4LWxpbnV4LmRhdDogaTM4Ni8zMmJpdC1jb3JlLnhtbCBcCisrCQkJICAgICAgIGkzODYvMzJiaXQtbGludXgueG1sIGkzODYvMzJiaXQtbXB4LnhtbAorICQob3V0ZGlyKS9pMzg2L2kzODYtYXZ4NTEyLmRhdDogaTM4Ni8zMmJpdC1jb3JlLnhtbCBpMzg2LzMyYml0LWF2eC54bWwgXAorIAkJCSAgICAgICBpMzg2LzMyYml0LW1weC54bWwgaTM4Ni8zMmJpdC1hdng1MTIueG1sCisgJChvdXRkaXIpL2kzODYvaTM4Ni1hdng1MTItbGludXguZGF0OiBpMzg2LzMyYml0LWNvcmUueG1sIGkzODYvMzJiaXQtYXZ4LnhtbCBcCitAQCAtMjgyLDggKzI5NiwxMiBAQCAkKG91dGRpcikvaTM4Ni9hbWQ2NC1hdngtbGludXguZGF0OiBpMzg2LzY0Yml0LWNvcmUueG1sIGkzODYvNjRiaXQtYXZ4LnhtbCBcCisgCQkJCSAgICBpMzg2LzY0Yml0LWxpbnV4LnhtbAorICQob3V0ZGlyKS9pMzg2L2FtZDY0LW1weC1saW51eC5kYXQ6IGkzODYvNjRiaXQtY29yZS54bWwgaTM4Ni82NGJpdC1hdngueG1sIFwKKyAJCQkgICAgICAgaTM4Ni82NGJpdC1saW51eC54bWwgaTM4Ni82NGJpdC1tcHgueG1sCisrJChvdXRkaXIpL2kzODYvYW1kNjQtYXZ4LW1weC1saW51eC5kYXQ6IGkzODYvNjRiaXQtY29yZS54bWwgXAorKwkJCSAgICAgICBpMzg2LzY0Yml0LWxpbnV4LnhtbCBpMzg2LzY0Yml0LW1weC54bWwKKyAkKG91dGRpcikvaTM4Ni9hbWQ2NC1tcHguZGF0OiBpMzg2LzY0Yml0LWNvcmUueG1sIGkzODYvNjRiaXQtYXZ4LnhtbCBcCisgCQkJICAgICAgIGkzODYvNjRiaXQtbXB4LnhtbAorKyQob3V0ZGlyKS9pMzg2L2FtZDY0LWF2eC1tcHguZGF0OiBpMzg2LzY0Yml0LWNvcmUueG1sIFwKKysJCQkgICAgICAgaTM4Ni82NGJpdC1tcHgueG1sCisgJChvdXRkaXIpL2kzODYvYW1kNjQtYXZ4NTEyLmRhdDogaTM4Ni82NGJpdC1jb3JlLnhtbCBpMzg2LzY0Yml0LWF2eC54bWwgXAorIAkJCSAgICAgICBpMzg2LzY0Yml0LW1weC54bWwgaTM4Ni82NGJpdC1hdng1MTIueG1sCisgJChvdXRkaXIpL2kzODYvYW1kNjQtYXZ4NTEyLWxpbnV4LmRhdDogaTM4Ni82NGJpdC1jb3JlLnhtbCBpMzg2LzY0Yml0LWF2eC54bWwgXAorZGlmZiAtLWdpdCBhL2dkYi9mZWF0dXJlcy9pMzg2L2FtZDY0LWF2eC1tcHgtbGludXguYyBiL2dkYi9mZWF0dXJlcy9pMzg2L2FtZDY0LWF2eC1tcHgtbGludXguYworbmV3IGZpbGUgbW9kZSAxMDA2NDQKK2luZGV4IDAwMDAwMDAuLjM3YjRjODEKKy0tLSAvZGV2L251bGwKKysrKyBiL2dkYi9mZWF0dXJlcy9pMzg2L2FtZDY0LWF2eC1tcHgtbGludXguYworQEAgLTAsMCArMSwyMTEgQEAKKysvKiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiAgLSotIGJ1ZmZlci1yZWFkLW9ubHk6IHQgLSotIHZpOnNldCBybzoKKysgIE9yaWdpbmFsOiBhbWQ2NC1hdngtbXB4LWxpbnV4LnhtbCAqLworKworKyNpbmNsdWRlICJkZWZzLmgiCisrI2luY2x1ZGUgIm9zYWJpLmgiCisrI2luY2x1ZGUgInRhcmdldC1kZXNjcmlwdGlvbnMuaCIKKysKKytzdHJ1Y3QgdGFyZ2V0X2Rlc2MgKnRkZXNjX2FtZDY0X2F2eF9tcHhfbGludXg7Cisrc3RhdGljIHZvaWQKKytpbml0aWFsaXplX3RkZXNjX2FtZDY0X2F2eF9tcHhfbGludXggKHZvaWQpCisreworKyAgc3RydWN0IHRhcmdldF9kZXNjICpyZXN1bHQgPSBhbGxvY2F0ZV90YXJnZXRfZGVzY3JpcHRpb24gKCk7CisrICBzdHJ1Y3QgdGRlc2NfZmVhdHVyZSAqZmVhdHVyZTsKKysgIHN0cnVjdCB0ZGVzY190eXBlICpmaWVsZF90eXBlOworKyAgc3RydWN0IHRkZXNjX3R5cGUgKnR5cGU7CisrCisrICBzZXRfdGRlc2NfYXJjaGl0ZWN0dXJlIChyZXN1bHQsIGJmZF9zY2FuX2FyY2ggKCJpMzg2Ong4Ni02NCIpKTsKKysKKysgIHNldF90ZGVzY19vc2FiaSAocmVzdWx0LCBvc2FiaV9mcm9tX3RkZXNjX3N0cmluZyAoIkdOVS9MaW51eCIpKTsKKysKKysgIGZlYXR1cmUgPSB0ZGVzY19jcmVhdGVfZmVhdHVyZSAocmVzdWx0LCAib3JnLmdudS5nZGIuaTM4Ni5jb3JlIik7CisrICBmaWVsZF90eXBlID0gdGRlc2NfY3JlYXRlX2ZsYWdzIChmZWF0dXJlLCAiaTM4Nl9lZmxhZ3MiLCA0KTsKKysgIHRkZXNjX2FkZF9mbGFnIChmaWVsZF90eXBlLCAwLCAiQ0YiKTsKKysgIHRkZXNjX2FkZF9mbGFnIChmaWVsZF90eXBlLCAxLCAiIik7CisrICB0ZGVzY19hZGRfZmxhZyAoZmllbGRfdHlwZSwgMiwgIlBGIik7CisrICB0ZGVzY19hZGRfZmxhZyAoZmllbGRfdHlwZSwgNCwgIkFGIik7CisrICB0ZGVzY19hZGRfZmxhZyAoZmllbGRfdHlwZSwgNiwgIlpGIik7CisrICB0ZGVzY19hZGRfZmxhZyAoZmllbGRfdHlwZSwgNywgIlNGIik7CisrICB0ZGVzY19hZGRfZmxhZyAoZmllbGRfdHlwZSwgOCwgIlRGIik7CisrICB0ZGVzY19hZGRfZmxhZyAoZmllbGRfdHlwZSwgOSwgIklGIik7CisrICB0ZGVzY19hZGRfZmxhZyAoZmllbGRfdHlwZSwgMTAsICJERiIpOworKyAgdGRlc2NfYWRkX2ZsYWcgKGZpZWxkX3R5cGUsIDExLCAiT0YiKTsKKysgIHRkZXNjX2FkZF9mbGFnIChmaWVsZF90eXBlLCAxNCwgIk5UIik7CisrICB0ZGVzY19hZGRfZmxhZyAoZmllbGRfdHlwZSwgMTYsICJSRiIpOworKyAgdGRlc2NfYWRkX2ZsYWcgKGZpZWxkX3R5cGUsIDE3LCAiVk0iKTsKKysgIHRkZXNjX2FkZF9mbGFnIChmaWVsZF90eXBlLCAxOCwgIkFDIik7CisrICB0ZGVzY19hZGRfZmxhZyAoZmllbGRfdHlwZSwgMTksICJWSUYiKTsKKysgIHRkZXNjX2FkZF9mbGFnIChmaWVsZF90eXBlLCAyMCwgIlZJUCIpOworKyAgdGRlc2NfYWRkX2ZsYWcgKGZpZWxkX3R5cGUsIDIxLCAiSUQiKTsKKysKKysgIHRkZXNjX2NyZWF0ZV9yZWcgKGZlYXR1cmUsICJyYXgiLCAwLCAxLCBOVUxMLCA2NCwgImludDY0Iik7CisrICB0ZGVzY19jcmVhdGVfcmVnIChmZWF0dXJlLCAicmJ4IiwgMSwgMSwgTlVMTCwgNjQsICJpbnQ2NCIpOworKyAgdGRlc2NfY3JlYXRlX3JlZyAoZmVhdHVyZSwgInJjeCIsIDIsIDEsIE5VTEwsIDY0LCAiaW50NjQiKTsKKysgIHRkZXNjX2NyZWF0ZV9yZWcgKGZlYXR1cmUsICJyZHgiLCAzLCAxLCBOVUxMLCA2NCwgImludDY0Iik7CisrICB0ZGVzY19jcmVhdGVfcmVnIChmZWF0dXJlLCAicnNpIiwgNCwgMSwgTlVMTCwgNjQsICJpbnQ2NCIpOworKyAgdGRlc2NfY3JlYXRlX3JlZyAoZmVhdHVyZSwgInJkaSIsIDUsIDEsIE5VTEwsIDY0LCAiaW50NjQiKTsKKysgIHRkZXNjX2NyZWF0ZV9yZWcgKGZlYXR1cmUsICJyYnAiLCA2LCAxLCBOVUxMLCA2NCwgImRhdGFfcHRyIik7CisrICB0ZGVzY19jcmVhdGVfcmVnIChmZWF0dXJlLCAicnNwIiwgNywgMSwgTlVMTCwgNjQsICJkYXRhX3B0ciIpOworKyAgdGRlc2NfY3JlYXRlX3JlZyAoZmVhdHVyZSwgInI4IiwgOCwgMSwgTlVMTCwgNjQsICJpbnQ2NCIpOworKyAgdGRlc2NfY3JlYXRlX3JlZyAoZmVhdHVyZSwgInI5IiwgOSwgMSwgTlVMTCwgNjQsICJpbnQ2NCIpOworKyAgdGRlc2NfY3JlYXRlX3JlZyAoZmVhdHVyZSwgInIxMCIsIDEwLCAxLCBOVUxMLCA2NCwgImludDY0Iik7CisrICB0ZGVzY19jcmVhdGVfcmVnIChmZWF0dXJlLCAicjExIiwgMTEsIDEsIE5VTEwsIDY0LCAiaW50NjQiKTsKKysgIHRkZXNjX2NyZWF0ZV9yZWcgKGZlYXR1cmUsICJyMTIiLCAxMiwgMSwgTlVMTCwgNjQsICJpbnQ2NCIpOworKyAgdGRlc2NfY3JlYXRlX3JlZyAoZmVhdHVyZSwgInIxMyIsIDEzLCAxLCBOVUxMLCA2NCwgImludDY0Iik7CisrICB0ZGVzY19jcmVhdGVfcmVnIChmZWF0dXJlLCAicjE0IiwgMTQsIDEsIE5VTEwsIDY0LCAiaW50NjQiKTsKKysgIHRkZXNjX2NyZWF0ZV9yZWcgKGZlYXR1cmUsICJyMTUiLCAxNSwgMSwgTlVMTCwgNjQsICJpbnQ2NCIpOworKyAgdGRlc2NfY3JlYXRlX3JlZyAoZmVhdHVyZSwgInJpcCIsIDE2LCAxLCBOVUxMLCA2NCwgImNvZGVfcHRyIik7CisrICB0ZGVzY19jcmVhdGVfcmVnIChmZWF0dXJlLCAiZWZsYWdzIiwgMTcsIDEsIE5VTEwsIDMyLCAiaTM4Nl9lZmxhZ3MiKTsKKysgIHRkZXNjX2NyZWF0ZV9yZWcgKGZlYXR1cmUsICJjcyIsIDE4LCAxLCBOVUxMLCAzMiwgImludDMyIik7CisrICB0ZGVzY19jcmVhdGVfcmVnIChmZWF0dXJlLCAic3MiLCAxOSwgMSwgTlVMTCwgMzIsICJpbnQzMiIpOworKyAgdGRlc2NfY3JlYXRlX3JlZyAoZmVhdHVyZSwgImRzIiwgMjAsIDEsIE5VTEwsIDMyLCAiaW50MzIiKTsKKysgIHRkZXNjX2NyZWF0ZV9yZWcgKGZlYXR1cmUsICJlcyIsIDIxLCAxLCBOVUxMLCAzMiwgImludDMyIik7CisrICB0ZGVzY19jcmVhdGVfcmVnIChmZWF0dXJlLCAiZnMiLCAyMiwgMSwgTlVMTCwgMzIsICJpbnQzMiIpOworKyAgdGRlc2NfY3JlYXRlX3JlZyAoZmVhdHVyZSwgImdzIiwgMjMsIDEsIE5VTEwsIDMyLCAiaW50MzIiKTsKKysgIHRkZXNjX2NyZWF0ZV9yZWcgKGZlYXR1cmUsICJzdDAiLCAyNCwgMSwgTlVMTCwgODAsICJpMzg3X2V4dCIpOworKyAgdGRlc2NfY3JlYXRlX3JlZyAoZmVhdHVyZSwgInN0MSIsIDI1LCAxLCBOVUxMLCA4MCwgImkzODdfZXh0Iik7CisrICB0ZGVzY19jcmVhdGVfcmVnIChmZWF0dXJlLCAic3QyIiwgMjYsIDEsIE5VTEwsIDgwLCAiaTM4N19leHQiKTsKKysgIHRkZXNjX2NyZWF0ZV9yZWcgKGZlYXR1cmUsICJzdDMiLCAyNywgMSwgTlVMTCwgODAsICJpMzg3X2V4dCIpOworKyAgdGRlc2NfY3JlYXRlX3JlZyAoZmVhdHVyZSwgInN0NCIsIDI4LCAxLCBOVUxMLCA4MCwgImkzODdfZXh0Iik7CisrICB0ZGVzY19jcmVhdGVfcmVnIChmZWF0dXJlLCAic3Q1IiwgMjksIDEsIE5VTEwsIDgwLCAiaTM4N19leHQiKTsKKysgIHRkZXNjX2NyZWF0ZV9yZWcgKGZlYXR1cmUsICJzdDYiLCAzMCwgMSwgTlVMTCwgODAsICJpMzg3X2V4dCIpOworKyAgdGRlc2NfY3JlYXRlX3JlZyAoZmVhdHVyZSwgInN0NyIsIDMxLCAxLCBOVUxMLCA4MCwgImkzODdfZXh0Iik7CisrICB0ZGVzY19jcmVhdGVfcmVnIChmZWF0dXJlLCAiZmN0cmwiLCAzMiwgMSwgImZsb2F0IiwgMzIsICJpbnQiKTsKKysgIHRkZXNjX2NyZWF0ZV9yZWcgKGZlYXR1cmUsICJmc3RhdCIsIDMzLCAxLCAiZmxvYXQiLCAzMiwgImludCIpOworKyAgdGRlc2NfY3JlYXRlX3JlZyAoZmVhdHVyZSwgImZ0YWciLCAzNCwgMSwgImZsb2F0IiwgMzIsICJpbnQiKTsKKysgIHRkZXNjX2NyZWF0ZV9yZWcgKGZlYXR1cmUsICJmaXNlZyIsIDM1LCAxLCAiZmxvYXQiLCAzMiwgImludCIpOworKyAgdGRlc2NfY3JlYXRlX3JlZyAoZmVhdHVyZSwgImZpb2ZmIiwgMzYsIDEsICJmbG9hdCIsIDMyLCAiaW50Iik7CisrICB0ZGVzY19jcmVhdGVfcmVnIChmZWF0dXJlLCAiZm9zZWciLCAzNywgMSwgImZsb2F0IiwgMzIsICJpbnQiKTsKKysgIHRkZXNjX2NyZWF0ZV9yZWcgKGZlYXR1cmUsICJmb29mZiIsIDM4LCAxLCAiZmxvYXQiLCAzMiwgImludCIpOworKyAgdGRlc2NfY3JlYXRlX3JlZyAoZmVhdHVyZSwgImZvcCIsIDM5LCAxLCAiZmxvYXQiLCAzMiwgImludCIpOworKworKyAgZmVhdHVyZSA9IHRkZXNjX2NyZWF0ZV9mZWF0dXJlIChyZXN1bHQsICJvcmcuZ251LmdkYi5pMzg2LnNzZSIpOworKyAgZmllbGRfdHlwZSA9IHRkZXNjX25hbWVkX3R5cGUgKGZlYXR1cmUsICJpZWVlX3NpbmdsZSIpOworKyAgdGRlc2NfY3JlYXRlX3ZlY3RvciAoZmVhdHVyZSwgInY0ZiIsIGZpZWxkX3R5cGUsIDQpOworKworKyAgZmllbGRfdHlwZSA9IHRkZXNjX25hbWVkX3R5cGUgKGZlYXR1cmUsICJpZWVlX2RvdWJsZSIpOworKyAgdGRlc2NfY3JlYXRlX3ZlY3RvciAoZmVhdHVyZSwgInYyZCIsIGZpZWxkX3R5cGUsIDIpOworKworKyAgZmllbGRfdHlwZSA9IHRkZXNjX25hbWVkX3R5cGUgKGZlYXR1cmUsICJpbnQ4Iik7CisrICB0ZGVzY19jcmVhdGVfdmVjdG9yIChmZWF0dXJlLCAidjE2aTgiLCBmaWVsZF90eXBlLCAxNik7CisrCisrICBmaWVsZF90eXBlID0gdGRlc2NfbmFtZWRfdHlwZSAoZmVhdHVyZSwgImludDE2Iik7CisrICB0ZGVzY19jcmVhdGVfdmVjdG9yIChmZWF0dXJlLCAidjhpMTYiLCBmaWVsZF90eXBlLCA4KTsKKysKKysgIGZpZWxkX3R5cGUgPSB0ZGVzY19uYW1lZF90eXBlIChmZWF0dXJlLCAiaW50MzIiKTsKKysgIHRkZXNjX2NyZWF0ZV92ZWN0b3IgKGZlYXR1cmUsICJ2NGkzMiIsIGZpZWxkX3R5cGUsIDQpOworKworKyAgZmllbGRfdHlwZSA9IHRkZXNjX25hbWVkX3R5cGUgKGZlYXR1cmUsICJpbnQ2NCIpOworKyAgdGRlc2NfY3JlYXRlX3ZlY3RvciAoZmVhdHVyZSwgInYyaTY0IiwgZmllbGRfdHlwZSwgMik7CisrCisrICB0eXBlID0gdGRlc2NfY3JlYXRlX3VuaW9uIChmZWF0dXJlLCAidmVjMTI4Iik7CisrICBmaWVsZF90eXBlID0gdGRlc2NfbmFtZWRfdHlwZSAoZmVhdHVyZSwgInY0ZiIpOworKyAgdGRlc2NfYWRkX2ZpZWxkICh0eXBlLCAidjRfZmxvYXQiLCBmaWVsZF90eXBlKTsKKysgIGZpZWxkX3R5cGUgPSB0ZGVzY19uYW1lZF90eXBlIChmZWF0dXJlLCAidjJkIik7CisrICB0ZGVzY19hZGRfZmllbGQgKHR5cGUsICJ2Ml9kb3VibGUiLCBmaWVsZF90eXBlKTsKKysgIGZpZWxkX3R5cGUgPSB0ZGVzY19uYW1lZF90eXBlIChmZWF0dXJlLCAidjE2aTgiKTsKKysgIHRkZXNjX2FkZF9maWVsZCAodHlwZSwgInYxNl9pbnQ4IiwgZmllbGRfdHlwZSk7CisrICBmaWVsZF90eXBlID0gdGRlc2NfbmFtZWRfdHlwZSAoZmVhdHVyZSwgInY4aTE2Iik7CisrICB0ZGVzY19hZGRfZmllbGQgKHR5cGUsICJ2OF9pbnQxNiIsIGZpZWxkX3R5cGUpOworKyAgZmllbGRfdHlwZSA9IHRkZXNjX25hbWVkX3R5cGUgKGZlYXR1cmUsICJ2NGkzMiIpOworKyAgdGRlc2NfYWRkX2ZpZWxkICh0eXBlLCAidjRfaW50MzIiLCBmaWVsZF90eXBlKTsKKysgIGZpZWxkX3R5cGUgPSB0ZGVzY19uYW1lZF90eXBlIChmZWF0dXJlLCAidjJpNjQiKTsKKysgIHRkZXNjX2FkZF9maWVsZCAodHlwZSwgInYyX2ludDY0IiwgZmllbGRfdHlwZSk7CisrICBmaWVsZF90eXBlID0gdGRlc2NfbmFtZWRfdHlwZSAoZmVhdHVyZSwgInVpbnQxMjgiKTsKKysgIHRkZXNjX2FkZF9maWVsZCAodHlwZSwgInVpbnQxMjgiLCBmaWVsZF90eXBlKTsKKysKKysgIGZpZWxkX3R5cGUgPSB0ZGVzY19jcmVhdGVfZmxhZ3MgKGZlYXR1cmUsICJpMzg2X214Y3NyIiwgNCk7CisrICB0ZGVzY19hZGRfZmxhZyAoZmllbGRfdHlwZSwgMCwgIklFIik7CisrICB0ZGVzY19hZGRfZmxhZyAoZmllbGRfdHlwZSwgMSwgIkRFIik7CisrICB0ZGVzY19hZGRfZmxhZyAoZmllbGRfdHlwZSwgMiwgIlpFIik7CisrICB0ZGVzY19hZGRfZmxhZyAoZmllbGRfdHlwZSwgMywgIk9FIik7CisrICB0ZGVzY19hZGRfZmxhZyAoZmllbGRfdHlwZSwgNCwgIlVFIik7CisrICB0ZGVzY19hZGRfZmxhZyAoZmllbGRfdHlwZSwgNSwgIlBFIik7CisrICB0ZGVzY19hZGRfZmxhZyAoZmllbGRfdHlwZSwgNiwgIkRBWiIpOworKyAgdGRlc2NfYWRkX2ZsYWcgKGZpZWxkX3R5cGUsIDcsICJJTSIpOworKyAgdGRlc2NfYWRkX2ZsYWcgKGZpZWxkX3R5cGUsIDgsICJETSIpOworKyAgdGRlc2NfYWRkX2ZsYWcgKGZpZWxkX3R5cGUsIDksICJaTSIpOworKyAgdGRlc2NfYWRkX2ZsYWcgKGZpZWxkX3R5cGUsIDEwLCAiT00iKTsKKysgIHRkZXNjX2FkZF9mbGFnIChmaWVsZF90eXBlLCAxMSwgIlVNIik7CisrICB0ZGVzY19hZGRfZmxhZyAoZmllbGRfdHlwZSwgMTIsICJQTSIpOworKyAgdGRlc2NfYWRkX2ZsYWcgKGZpZWxkX3R5cGUsIDE1LCAiRloiKTsKKysKKysgIHRkZXNjX2NyZWF0ZV9yZWcgKGZlYXR1cmUsICJ4bW0wIiwgNDAsIDEsIE5VTEwsIDEyOCwgInZlYzEyOCIpOworKyAgdGRlc2NfY3JlYXRlX3JlZyAoZmVhdHVyZSwgInhtbTEiLCA0MSwgMSwgTlVMTCwgMTI4LCAidmVjMTI4Iik7CisrICB0ZGVzY19jcmVhdGVfcmVnIChmZWF0dXJlLCAieG1tMiIsIDQyLCAxLCBOVUxMLCAxMjgsICJ2ZWMxMjgiKTsKKysgIHRkZXNjX2NyZWF0ZV9yZWcgKGZlYXR1cmUsICJ4bW0zIiwgNDMsIDEsIE5VTEwsIDEyOCwgInZlYzEyOCIpOworKyAgdGRlc2NfY3JlYXRlX3JlZyAoZmVhdHVyZSwgInhtbTQiLCA0NCwgMSwgTlVMTCwgMTI4LCAidmVjMTI4Iik7CisrICB0ZGVzY19jcmVhdGVfcmVnIChmZWF0dXJlLCAieG1tNSIsIDQ1LCAxLCBOVUxMLCAxMjgsICJ2ZWMxMjgiKTsKKysgIHRkZXNjX2NyZWF0ZV9yZWcgKGZlYXR1cmUsICJ4bW02IiwgNDYsIDEsIE5VTEwsIDEyOCwgInZlYzEyOCIpOworKyAgdGRlc2NfY3JlYXRlX3JlZyAoZmVhdHVyZSwgInhtbTciLCA0NywgMSwgTlVMTCwgMTI4LCAidmVjMTI4Iik7CisrICB0ZGVzY19jcmVhdGVfcmVnIChmZWF0dXJlLCAieG1tOCIsIDQ4LCAxLCBOVUxMLCAxMjgsICJ2ZWMxMjgiKTsKKysgIHRkZXNjX2NyZWF0ZV9yZWcgKGZlYXR1cmUsICJ4bW05IiwgNDksIDEsIE5VTEwsIDEyOCwgInZlYzEyOCIpOworKyAgdGRlc2NfY3JlYXRlX3JlZyAoZmVhdHVyZSwgInhtbTEwIiwgNTAsIDEsIE5VTEwsIDEyOCwgInZlYzEyOCIpOworKyAgdGRlc2NfY3JlYXRlX3JlZyAoZmVhdHVyZSwgInhtbTExIiwgNTEsIDEsIE5VTEwsIDEyOCwgInZlYzEyOCIpOworKyAgdGRlc2NfY3JlYXRlX3JlZyAoZmVhdHVyZSwgInhtbTEyIiwgNTIsIDEsIE5VTEwsIDEyOCwgInZlYzEyOCIpOworKyAgdGRlc2NfY3JlYXRlX3JlZyAoZmVhdHVyZSwgInhtbTEzIiwgNTMsIDEsIE5VTEwsIDEyOCwgInZlYzEyOCIpOworKyAgdGRlc2NfY3JlYXRlX3JlZyAoZmVhdHVyZSwgInhtbTE0IiwgNTQsIDEsIE5VTEwsIDEyOCwgInZlYzEyOCIpOworKyAgdGRlc2NfY3JlYXRlX3JlZyAoZmVhdHVyZSwgInhtbTE1IiwgNTUsIDEsIE5VTEwsIDEyOCwgInZlYzEyOCIpOworKyAgdGRlc2NfY3JlYXRlX3JlZyAoZmVhdHVyZSwgIm14Y3NyIiwgNTYsIDEsICJ2ZWN0b3IiLCAzMiwgImkzODZfbXhjc3IiKTsKKysKKysgIGZlYXR1cmUgPSB0ZGVzY19jcmVhdGVfZmVhdHVyZSAocmVzdWx0LCAib3JnLmdudS5nZGIuaTM4Ni5saW51eCIpOworKyAgdGRlc2NfY3JlYXRlX3JlZyAoZmVhdHVyZSwgIm9yaWdfcmF4IiwgNTcsIDEsIE5VTEwsIDY0LCAiaW50Iik7CisrCisrICBmZWF0dXJlID0gdGRlc2NfY3JlYXRlX2ZlYXR1cmUgKHJlc3VsdCwgIm9yZy5nbnUuZ2RiLmkzODYuYXZ4Iik7CisrICB0ZGVzY19jcmVhdGVfcmVnIChmZWF0dXJlLCAieW1tMGgiLCA1OCwgMSwgTlVMTCwgMTI4LCAidWludDEyOCIpOworKyAgdGRlc2NfY3JlYXRlX3JlZyAoZmVhdHVyZSwgInltbTFoIiwgNTksIDEsIE5VTEwsIDEyOCwgInVpbnQxMjgiKTsKKysgIHRkZXNjX2NyZWF0ZV9yZWcgKGZlYXR1cmUsICJ5bW0yaCIsIDYwLCAxLCBOVUxMLCAxMjgsICJ1aW50MTI4Iik7CisrICB0ZGVzY19jcmVhdGVfcmVnIChmZWF0dXJlLCAieW1tM2giLCA2MSwgMSwgTlVMTCwgMTI4LCAidWludDEyOCIpOworKyAgdGRlc2NfY3JlYXRlX3JlZyAoZmVhdHVyZSwgInltbTRoIiwgNjIsIDEsIE5VTEwsIDEyOCwgInVpbnQxMjgiKTsKKysgIHRkZXNjX2NyZWF0ZV9yZWcgKGZlYXR1cmUsICJ5bW01aCIsIDYzLCAxLCBOVUxMLCAxMjgsICJ1aW50MTI4Iik7CisrICB0ZGVzY19jcmVhdGVfcmVnIChmZWF0dXJlLCAieW1tNmgiLCA2NCwgMSwgTlVMTCwgMTI4LCAidWludDEyOCIpOworKyAgdGRlc2NfY3JlYXRlX3JlZyAoZmVhdHVyZSwgInltbTdoIiwgNjUsIDEsIE5VTEwsIDEyOCwgInVpbnQxMjgiKTsKKysgIHRkZXNjX2NyZWF0ZV9yZWcgKGZlYXR1cmUsICJ5bW04aCIsIDY2LCAxLCBOVUxMLCAxMjgsICJ1aW50MTI4Iik7CisrICB0ZGVzY19jcmVhdGVfcmVnIChmZWF0dXJlLCAieW1tOWgiLCA2NywgMSwgTlVMTCwgMTI4LCAidWludDEyOCIpOworKyAgdGRlc2NfY3JlYXRlX3JlZyAoZmVhdHVyZSwgInltbTEwaCIsIDY4LCAxLCBOVUxMLCAxMjgsICJ1aW50MTI4Iik7CisrICB0ZGVzY19jcmVhdGVfcmVnIChmZWF0dXJlLCAieW1tMTFoIiwgNjksIDEsIE5VTEwsIDEyOCwgInVpbnQxMjgiKTsKKysgIHRkZXNjX2NyZWF0ZV9yZWcgKGZlYXR1cmUsICJ5bW0xMmgiLCA3MCwgMSwgTlVMTCwgMTI4LCAidWludDEyOCIpOworKyAgdGRlc2NfY3JlYXRlX3JlZyAoZmVhdHVyZSwgInltbTEzaCIsIDcxLCAxLCBOVUxMLCAxMjgsICJ1aW50MTI4Iik7CisrICB0ZGVzY19jcmVhdGVfcmVnIChmZWF0dXJlLCAieW1tMTRoIiwgNzIsIDEsIE5VTEwsIDEyOCwgInVpbnQxMjgiKTsKKysgIHRkZXNjX2NyZWF0ZV9yZWcgKGZlYXR1cmUsICJ5bW0xNWgiLCA3MywgMSwgTlVMTCwgMTI4LCAidWludDEyOCIpOworKworKyAgZmVhdHVyZSA9IHRkZXNjX2NyZWF0ZV9mZWF0dXJlIChyZXN1bHQsICJvcmcuZ251LmdkYi5pMzg2Lm1weCIpOworKyAgdHlwZSA9IHRkZXNjX2NyZWF0ZV9zdHJ1Y3QgKGZlYXR1cmUsICJicjEyOCIpOworKyAgZmllbGRfdHlwZSA9IHRkZXNjX25hbWVkX3R5cGUgKGZlYXR1cmUsICJ1aW50NjQiKTsKKysgIHRkZXNjX2FkZF9maWVsZCAodHlwZSwgImxib3VuZCIsIGZpZWxkX3R5cGUpOworKyAgZmllbGRfdHlwZSA9IHRkZXNjX25hbWVkX3R5cGUgKGZlYXR1cmUsICJ1aW50NjQiKTsKKysgIHRkZXNjX2FkZF9maWVsZCAodHlwZSwgInVib3VuZF9yYXciLCBmaWVsZF90eXBlKTsKKysKKysgIHR5cGUgPSB0ZGVzY19jcmVhdGVfc3RydWN0IChmZWF0dXJlLCAiX2JuZHN0YXR1cyIpOworKyAgdGRlc2Nfc2V0X3N0cnVjdF9zaXplICh0eXBlLCA4KTsKKysgIHRkZXNjX2FkZF9iaXRmaWVsZCAodHlwZSwgImJkZSIsIDIsIDYzKTsKKysgIHRkZXNjX2FkZF9iaXRmaWVsZCAodHlwZSwgImVycm9yIiwgMCwgMSk7CisrCisrICB0eXBlID0gdGRlc2NfY3JlYXRlX3VuaW9uIChmZWF0dXJlLCAic3RhdHVzIik7CisrICBmaWVsZF90eXBlID0gdGRlc2NfbmFtZWRfdHlwZSAoZmVhdHVyZSwgImRhdGFfcHRyIik7CisrICB0ZGVzY19hZGRfZmllbGQgKHR5cGUsICJyYXciLCBmaWVsZF90eXBlKTsKKysgIGZpZWxkX3R5cGUgPSB0ZGVzY19uYW1lZF90eXBlIChmZWF0dXJlLCAiX2JuZHN0YXR1cyIpOworKyAgdGRlc2NfYWRkX2ZpZWxkICh0eXBlLCAic3RhdHVzIiwgZmllbGRfdHlwZSk7CisrCisrICB0eXBlID0gdGRlc2NfY3JlYXRlX3N0cnVjdCAoZmVhdHVyZSwgIl9ibmRjZmd1Iik7CisrICB0ZGVzY19zZXRfc3RydWN0X3NpemUgKHR5cGUsIDgpOworKyAgdGRlc2NfYWRkX2JpdGZpZWxkICh0eXBlLCAiYmFzZSIsIDEyLCA2Myk7CisrICB0ZGVzY19hZGRfYml0ZmllbGQgKHR5cGUsICJyZXNlcnZlZCIsIDIsIDExKTsKKysgIHRkZXNjX2FkZF9iaXRmaWVsZCAodHlwZSwgInByZXNlcnZlZCIsIDEsIDEpOworKyAgdGRlc2NfYWRkX2JpdGZpZWxkICh0eXBlLCAiZW5hYmxlZCIsIDAsIDApOworKworKyAgdHlwZSA9IHRkZXNjX2NyZWF0ZV91bmlvbiAoZmVhdHVyZSwgImNmZ3UiKTsKKysgIGZpZWxkX3R5cGUgPSB0ZGVzY19uYW1lZF90eXBlIChmZWF0dXJlLCAiZGF0YV9wdHIiKTsKKysgIHRkZXNjX2FkZF9maWVsZCAodHlwZSwgInJhdyIsIGZpZWxkX3R5cGUpOworKyAgZmllbGRfdHlwZSA9IHRkZXNjX25hbWVkX3R5cGUgKGZlYXR1cmUsICJfYm5kY2ZndSIpOworKyAgdGRlc2NfYWRkX2ZpZWxkICh0eXBlLCAiY29uZmlnIiwgZmllbGRfdHlwZSk7CisrCisrICB0ZGVzY19jcmVhdGVfcmVnIChmZWF0dXJlLCAiYm5kMHJhdyIsIDc0LCAxLCBOVUxMLCAxMjgsICJicjEyOCIpOworKyAgdGRlc2NfY3JlYXRlX3JlZyAoZmVhdHVyZSwgImJuZDFyYXciLCA3NSwgMSwgTlVMTCwgMTI4LCAiYnIxMjgiKTsKKysgIHRkZXNjX2NyZWF0ZV9yZWcgKGZlYXR1cmUsICJibmQycmF3IiwgNzYsIDEsIE5VTEwsIDEyOCwgImJyMTI4Iik7CisrICB0ZGVzY19jcmVhdGVfcmVnIChmZWF0dXJlLCAiYm5kM3JhdyIsIDc3LCAxLCBOVUxMLCAxMjgsICJicjEyOCIpOworKyAgdGRlc2NfY3JlYXRlX3JlZyAoZmVhdHVyZSwgImJuZGNmZ3UiLCA3OCwgMSwgTlVMTCwgNjQsICJjZmd1Iik7CisrICB0ZGVzY19jcmVhdGVfcmVnIChmZWF0dXJlLCAiYm5kc3RhdHVzIiwgNzksIDEsIE5VTEwsIDY0LCAic3RhdHVzIik7CisrCisrICB0ZGVzY19hbWQ2NF9hdnhfbXB4X2xpbnV4ID0gcmVzdWx0OworK30KK2RpZmYgLS1naXQgYS9nZGIvZmVhdHVyZXMvaTM4Ni9hbWQ2NC1hdngtbXB4LWxpbnV4LnhtbCBiL2dkYi9mZWF0dXJlcy9pMzg2L2FtZDY0LWF2eC1tcHgtbGludXgueG1sCituZXcgZmlsZSBtb2RlIDEwMDY0NAoraW5kZXggMDAwMDAwMC4uNTI2YzcwMAorLS0tIC9kZXYvbnVsbAorKysrIGIvZ2RiL2ZlYXR1cmVzL2kzODYvYW1kNjQtYXZ4LW1weC1saW51eC54bWwKK0BAIC0wLDAgKzEsMTkgQEAKKys8P3htbCB2ZXJzaW9uPSIxLjAiPz4KKys8IS0tIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorKworKyAgICAgQ29weWluZyBhbmQgZGlzdHJpYnV0aW9uIG9mIHRoaXMgZmlsZSwgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbiwKKysgICAgIGFyZSBwZXJtaXR0ZWQgaW4gYW55IG1lZGl1bSB3aXRob3V0IHJveWFsdHkgcHJvdmlkZWQgdGhlIGNvcHlyaWdodAorKyAgICAgbm90aWNlIGFuZCB0aGlzIG5vdGljZSBhcmUgcHJlc2VydmVkLiAgLS0+CisrCisrPCEtLSBBTUQ2NCB3aXRoIEFWWCBhbmQgTVBYIC0gSW5jbHVkZXMgTGludXgtb25seSBzcGVjaWFsICJyZWdpc3RlciIuICAtLT4KKysKKys8IURPQ1RZUEUgdGFyZ2V0IFNZU1RFTSAiZ2RiLXRhcmdldC5kdGQiPgorKzx0YXJnZXQ+CisrICA8YXJjaGl0ZWN0dXJlPmkzODY6eDg2LTY0PC9hcmNoaXRlY3R1cmU+CisrICA8b3NhYmk+R05VL0xpbnV4PC9vc2FiaT4KKysgIDx4aTppbmNsdWRlIGhyZWY9IjY0Yml0LWNvcmUueG1sIi8+CisrICA8eGk6aW5jbHVkZSBocmVmPSI2NGJpdC1zc2UueG1sIi8+CisrICA8eGk6aW5jbHVkZSBocmVmPSI2NGJpdC1saW51eC54bWwiLz4KKysgIDx4aTppbmNsdWRlIGhyZWY9IjY0Yml0LWF2eC54bWwiLz4KKysgIDx4aTppbmNsdWRlIGhyZWY9IjY0Yml0LW1weC54bWwiLz4KKys8L3RhcmdldD4KK2RpZmYgLS1naXQgYS9nZGIvZmVhdHVyZXMvaTM4Ni9hbWQ2NC1hdngtbXB4LmMgYi9nZGIvZmVhdHVyZXMvaTM4Ni9hbWQ2NC1hdngtbXB4LmMKK25ldyBmaWxlIG1vZGUgMTAwNjQ0CitpbmRleCAwMDAwMDAwLi4xMjc5ZjczCistLS0gL2Rldi9udWxsCisrKysgYi9nZGIvZmVhdHVyZXMvaTM4Ni9hbWQ2NC1hdngtbXB4LmMKK0BAIC0wLDAgKzEsMjA2IEBACisrLyogVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gIC0qLSBidWZmZXItcmVhZC1vbmx5OiB0IC0qLSB2aTpzZXQgcm86CisrICBPcmlnaW5hbDogYW1kNjQtYXZ4LW1weC54bWwgKi8KKysKKysjaW5jbHVkZSAiZGVmcy5oIgorKyNpbmNsdWRlICJvc2FiaS5oIgorKyNpbmNsdWRlICJ0YXJnZXQtZGVzY3JpcHRpb25zLmgiCisrCisrc3RydWN0IHRhcmdldF9kZXNjICp0ZGVzY19hbWQ2NF9hdnhfbXB4OworK3N0YXRpYyB2b2lkCisraW5pdGlhbGl6ZV90ZGVzY19hbWQ2NF9hdnhfbXB4ICh2b2lkKQorK3sKKysgIHN0cnVjdCB0YXJnZXRfZGVzYyAqcmVzdWx0ID0gYWxsb2NhdGVfdGFyZ2V0X2Rlc2NyaXB0aW9uICgpOworKyAgc3RydWN0IHRkZXNjX2ZlYXR1cmUgKmZlYXR1cmU7CisrICBzdHJ1Y3QgdGRlc2NfdHlwZSAqZmllbGRfdHlwZTsKKysgIHN0cnVjdCB0ZGVzY190eXBlICp0eXBlOworKworKyAgc2V0X3RkZXNjX2FyY2hpdGVjdHVyZSAocmVzdWx0LCBiZmRfc2Nhbl9hcmNoICgiaTM4Njp4ODYtNjQiKSk7CisrCisrICBmZWF0dXJlID0gdGRlc2NfY3JlYXRlX2ZlYXR1cmUgKHJlc3VsdCwgIm9yZy5nbnUuZ2RiLmkzODYuY29yZSIpOworKyAgZmllbGRfdHlwZSA9IHRkZXNjX2NyZWF0ZV9mbGFncyAoZmVhdHVyZSwgImkzODZfZWZsYWdzIiwgNCk7CisrICB0ZGVzY19hZGRfZmxhZyAoZmllbGRfdHlwZSwgMCwgIkNGIik7CisrICB0ZGVzY19hZGRfZmxhZyAoZmllbGRfdHlwZSwgMSwgIiIpOworKyAgdGRlc2NfYWRkX2ZsYWcgKGZpZWxkX3R5cGUsIDIsICJQRiIpOworKyAgdGRlc2NfYWRkX2ZsYWcgKGZpZWxkX3R5cGUsIDQsICJBRiIpOworKyAgdGRlc2NfYWRkX2ZsYWcgKGZpZWxkX3R5cGUsIDYsICJaRiIpOworKyAgdGRlc2NfYWRkX2ZsYWcgKGZpZWxkX3R5cGUsIDcsICJTRiIpOworKyAgdGRlc2NfYWRkX2ZsYWcgKGZpZWxkX3R5cGUsIDgsICJURiIpOworKyAgdGRlc2NfYWRkX2ZsYWcgKGZpZWxkX3R5cGUsIDksICJJRiIpOworKyAgdGRlc2NfYWRkX2ZsYWcgKGZpZWxkX3R5cGUsIDEwLCAiREYiKTsKKysgIHRkZXNjX2FkZF9mbGFnIChmaWVsZF90eXBlLCAxMSwgIk9GIik7CisrICB0ZGVzY19hZGRfZmxhZyAoZmllbGRfdHlwZSwgMTQsICJOVCIpOworKyAgdGRlc2NfYWRkX2ZsYWcgKGZpZWxkX3R5cGUsIDE2LCAiUkYiKTsKKysgIHRkZXNjX2FkZF9mbGFnIChmaWVsZF90eXBlLCAxNywgIlZNIik7CisrICB0ZGVzY19hZGRfZmxhZyAoZmllbGRfdHlwZSwgMTgsICJBQyIpOworKyAgdGRlc2NfYWRkX2ZsYWcgKGZpZWxkX3R5cGUsIDE5LCAiVklGIik7CisrICB0ZGVzY19hZGRfZmxhZyAoZmllbGRfdHlwZSwgMjAsICJWSVAiKTsKKysgIHRkZXNjX2FkZF9mbGFnIChmaWVsZF90eXBlLCAyMSwgIklEIik7CisrCisrICB0ZGVzY19jcmVhdGVfcmVnIChmZWF0dXJlLCAicmF4IiwgMCwgMSwgTlVMTCwgNjQsICJpbnQ2NCIpOworKyAgdGRlc2NfY3JlYXRlX3JlZyAoZmVhdHVyZSwgInJieCIsIDEsIDEsIE5VTEwsIDY0LCAiaW50NjQiKTsKKysgIHRkZXNjX2NyZWF0ZV9yZWcgKGZlYXR1cmUsICJyY3giLCAyLCAxLCBOVUxMLCA2NCwgImludDY0Iik7CisrICB0ZGVzY19jcmVhdGVfcmVnIChmZWF0dXJlLCAicmR4IiwgMywgMSwgTlVMTCwgNjQsICJpbnQ2NCIpOworKyAgdGRlc2NfY3JlYXRlX3JlZyAoZmVhdHVyZSwgInJzaSIsIDQsIDEsIE5VTEwsIDY0LCAiaW50NjQiKTsKKysgIHRkZXNjX2NyZWF0ZV9yZWcgKGZlYXR1cmUsICJyZGkiLCA1LCAxLCBOVUxMLCA2NCwgImludDY0Iik7CisrICB0ZGVzY19jcmVhdGVfcmVnIChmZWF0dXJlLCAicmJwIiwgNiwgMSwgTlVMTCwgNjQsICJkYXRhX3B0ciIpOworKyAgdGRlc2NfY3JlYXRlX3JlZyAoZmVhdHVyZSwgInJzcCIsIDcsIDEsIE5VTEwsIDY0LCAiZGF0YV9wdHIiKTsKKysgIHRkZXNjX2NyZWF0ZV9yZWcgKGZlYXR1cmUsICJyOCIsIDgsIDEsIE5VTEwsIDY0LCAiaW50NjQiKTsKKysgIHRkZXNjX2NyZWF0ZV9yZWcgKGZlYXR1cmUsICJyOSIsIDksIDEsIE5VTEwsIDY0LCAiaW50NjQiKTsKKysgIHRkZXNjX2NyZWF0ZV9yZWcgKGZlYXR1cmUsICJyMTAiLCAxMCwgMSwgTlVMTCwgNjQsICJpbnQ2NCIpOworKyAgdGRlc2NfY3JlYXRlX3JlZyAoZmVhdHVyZSwgInIxMSIsIDExLCAxLCBOVUxMLCA2NCwgImludDY0Iik7CisrICB0ZGVzY19jcmVhdGVfcmVnIChmZWF0dXJlLCAicjEyIiwgMTIsIDEsIE5VTEwsIDY0LCAiaW50NjQiKTsKKysgIHRkZXNjX2NyZWF0ZV9yZWcgKGZlYXR1cmUsICJyMTMiLCAxMywgMSwgTlVMTCwgNjQsICJpbnQ2NCIpOworKyAgdGRlc2NfY3JlYXRlX3JlZyAoZmVhdHVyZSwgInIxNCIsIDE0LCAxLCBOVUxMLCA2NCwgImludDY0Iik7CisrICB0ZGVzY19jcmVhdGVfcmVnIChmZWF0dXJlLCAicjE1IiwgMTUsIDEsIE5VTEwsIDY0LCAiaW50NjQiKTsKKysgIHRkZXNjX2NyZWF0ZV9yZWcgKGZlYXR1cmUsICJyaXAiLCAxNiwgMSwgTlVMTCwgNjQsICJjb2RlX3B0ciIpOworKyAgdGRlc2NfY3JlYXRlX3JlZyAoZmVhdHVyZSwgImVmbGFncyIsIDE3LCAxLCBOVUxMLCAzMiwgImkzODZfZWZsYWdzIik7CisrICB0ZGVzY19jcmVhdGVfcmVnIChmZWF0dXJlLCAiY3MiLCAxOCwgMSwgTlVMTCwgMzIsICJpbnQzMiIpOworKyAgdGRlc2NfY3JlYXRlX3JlZyAoZmVhdHVyZSwgInNzIiwgMTksIDEsIE5VTEwsIDMyLCAiaW50MzIiKTsKKysgIHRkZXNjX2NyZWF0ZV9yZWcgKGZlYXR1cmUsICJkcyIsIDIwLCAxLCBOVUxMLCAzMiwgImludDMyIik7CisrICB0ZGVzY19jcmVhdGVfcmVnIChmZWF0dXJlLCAiZXMiLCAyMSwgMSwgTlVMTCwgMzIsICJpbnQzMiIpOworKyAgdGRlc2NfY3JlYXRlX3JlZyAoZmVhdHVyZSwgImZzIiwgMjIsIDEsIE5VTEwsIDMyLCAiaW50MzIiKTsKKysgIHRkZXNjX2NyZWF0ZV9yZWcgKGZlYXR1cmUsICJncyIsIDIzLCAxLCBOVUxMLCAzMiwgImludDMyIik7CisrICB0ZGVzY19jcmVhdGVfcmVnIChmZWF0dXJlLCAic3QwIiwgMjQsIDEsIE5VTEwsIDgwLCAiaTM4N19leHQiKTsKKysgIHRkZXNjX2NyZWF0ZV9yZWcgKGZlYXR1cmUsICJzdDEiLCAyNSwgMSwgTlVMTCwgODAsICJpMzg3X2V4dCIpOworKyAgdGRlc2NfY3JlYXRlX3JlZyAoZmVhdHVyZSwgInN0MiIsIDI2LCAxLCBOVUxMLCA4MCwgImkzODdfZXh0Iik7CisrICB0ZGVzY19jcmVhdGVfcmVnIChmZWF0dXJlLCAic3QzIiwgMjcsIDEsIE5VTEwsIDgwLCAiaTM4N19leHQiKTsKKysgIHRkZXNjX2NyZWF0ZV9yZWcgKGZlYXR1cmUsICJzdDQiLCAyOCwgMSwgTlVMTCwgODAsICJpMzg3X2V4dCIpOworKyAgdGRlc2NfY3JlYXRlX3JlZyAoZmVhdHVyZSwgInN0NSIsIDI5LCAxLCBOVUxMLCA4MCwgImkzODdfZXh0Iik7CisrICB0ZGVzY19jcmVhdGVfcmVnIChmZWF0dXJlLCAic3Q2IiwgMzAsIDEsIE5VTEwsIDgwLCAiaTM4N19leHQiKTsKKysgIHRkZXNjX2NyZWF0ZV9yZWcgKGZlYXR1cmUsICJzdDciLCAzMSwgMSwgTlVMTCwgODAsICJpMzg3X2V4dCIpOworKyAgdGRlc2NfY3JlYXRlX3JlZyAoZmVhdHVyZSwgImZjdHJsIiwgMzIsIDEsICJmbG9hdCIsIDMyLCAiaW50Iik7CisrICB0ZGVzY19jcmVhdGVfcmVnIChmZWF0dXJlLCAiZnN0YXQiLCAzMywgMSwgImZsb2F0IiwgMzIsICJpbnQiKTsKKysgIHRkZXNjX2NyZWF0ZV9yZWcgKGZlYXR1cmUsICJmdGFnIiwgMzQsIDEsICJmbG9hdCIsIDMyLCAiaW50Iik7CisrICB0ZGVzY19jcmVhdGVfcmVnIChmZWF0dXJlLCAiZmlzZWciLCAzNSwgMSwgImZsb2F0IiwgMzIsICJpbnQiKTsKKysgIHRkZXNjX2NyZWF0ZV9yZWcgKGZlYXR1cmUsICJmaW9mZiIsIDM2LCAxLCAiZmxvYXQiLCAzMiwgImludCIpOworKyAgdGRlc2NfY3JlYXRlX3JlZyAoZmVhdHVyZSwgImZvc2VnIiwgMzcsIDEsICJmbG9hdCIsIDMyLCAiaW50Iik7CisrICB0ZGVzY19jcmVhdGVfcmVnIChmZWF0dXJlLCAiZm9vZmYiLCAzOCwgMSwgImZsb2F0IiwgMzIsICJpbnQiKTsKKysgIHRkZXNjX2NyZWF0ZV9yZWcgKGZlYXR1cmUsICJmb3AiLCAzOSwgMSwgImZsb2F0IiwgMzIsICJpbnQiKTsKKysKKysgIGZlYXR1cmUgPSB0ZGVzY19jcmVhdGVfZmVhdHVyZSAocmVzdWx0LCAib3JnLmdudS5nZGIuaTM4Ni5zc2UiKTsKKysgIGZpZWxkX3R5cGUgPSB0ZGVzY19uYW1lZF90eXBlIChmZWF0dXJlLCAiaWVlZV9zaW5nbGUiKTsKKysgIHRkZXNjX2NyZWF0ZV92ZWN0b3IgKGZlYXR1cmUsICJ2NGYiLCBmaWVsZF90eXBlLCA0KTsKKysKKysgIGZpZWxkX3R5cGUgPSB0ZGVzY19uYW1lZF90eXBlIChmZWF0dXJlLCAiaWVlZV9kb3VibGUiKTsKKysgIHRkZXNjX2NyZWF0ZV92ZWN0b3IgKGZlYXR1cmUsICJ2MmQiLCBmaWVsZF90eXBlLCAyKTsKKysKKysgIGZpZWxkX3R5cGUgPSB0ZGVzY19uYW1lZF90eXBlIChmZWF0dXJlLCAiaW50OCIpOworKyAgdGRlc2NfY3JlYXRlX3ZlY3RvciAoZmVhdHVyZSwgInYxNmk4IiwgZmllbGRfdHlwZSwgMTYpOworKworKyAgZmllbGRfdHlwZSA9IHRkZXNjX25hbWVkX3R5cGUgKGZlYXR1cmUsICJpbnQxNiIpOworKyAgdGRlc2NfY3JlYXRlX3ZlY3RvciAoZmVhdHVyZSwgInY4aTE2IiwgZmllbGRfdHlwZSwgOCk7CisrCisrICBmaWVsZF90eXBlID0gdGRlc2NfbmFtZWRfdHlwZSAoZmVhdHVyZSwgImludDMyIik7CisrICB0ZGVzY19jcmVhdGVfdmVjdG9yIChmZWF0dXJlLCAidjRpMzIiLCBmaWVsZF90eXBlLCA0KTsKKysKKysgIGZpZWxkX3R5cGUgPSB0ZGVzY19uYW1lZF90eXBlIChmZWF0dXJlLCAiaW50NjQiKTsKKysgIHRkZXNjX2NyZWF0ZV92ZWN0b3IgKGZlYXR1cmUsICJ2Mmk2NCIsIGZpZWxkX3R5cGUsIDIpOworKworKyAgdHlwZSA9IHRkZXNjX2NyZWF0ZV91bmlvbiAoZmVhdHVyZSwgInZlYzEyOCIpOworKyAgZmllbGRfdHlwZSA9IHRkZXNjX25hbWVkX3R5cGUgKGZlYXR1cmUsICJ2NGYiKTsKKysgIHRkZXNjX2FkZF9maWVsZCAodHlwZSwgInY0X2Zsb2F0IiwgZmllbGRfdHlwZSk7CisrICBmaWVsZF90eXBlID0gdGRlc2NfbmFtZWRfdHlwZSAoZmVhdHVyZSwgInYyZCIpOworKyAgdGRlc2NfYWRkX2ZpZWxkICh0eXBlLCAidjJfZG91YmxlIiwgZmllbGRfdHlwZSk7CisrICBmaWVsZF90eXBlID0gdGRlc2NfbmFtZWRfdHlwZSAoZmVhdHVyZSwgInYxNmk4Iik7CisrICB0ZGVzY19hZGRfZmllbGQgKHR5cGUsICJ2MTZfaW50OCIsIGZpZWxkX3R5cGUpOworKyAgZmllbGRfdHlwZSA9IHRkZXNjX25hbWVkX3R5cGUgKGZlYXR1cmUsICJ2OGkxNiIpOworKyAgdGRlc2NfYWRkX2ZpZWxkICh0eXBlLCAidjhfaW50MTYiLCBmaWVsZF90eXBlKTsKKysgIGZpZWxkX3R5cGUgPSB0ZGVzY19uYW1lZF90eXBlIChmZWF0dXJlLCAidjRpMzIiKTsKKysgIHRkZXNjX2FkZF9maWVsZCAodHlwZSwgInY0X2ludDMyIiwgZmllbGRfdHlwZSk7CisrICBmaWVsZF90eXBlID0gdGRlc2NfbmFtZWRfdHlwZSAoZmVhdHVyZSwgInYyaTY0Iik7CisrICB0ZGVzY19hZGRfZmllbGQgKHR5cGUsICJ2Ml9pbnQ2NCIsIGZpZWxkX3R5cGUpOworKyAgZmllbGRfdHlwZSA9IHRkZXNjX25hbWVkX3R5cGUgKGZlYXR1cmUsICJ1aW50MTI4Iik7CisrICB0ZGVzY19hZGRfZmllbGQgKHR5cGUsICJ1aW50MTI4IiwgZmllbGRfdHlwZSk7CisrCisrICBmaWVsZF90eXBlID0gdGRlc2NfY3JlYXRlX2ZsYWdzIChmZWF0dXJlLCAiaTM4Nl9teGNzciIsIDQpOworKyAgdGRlc2NfYWRkX2ZsYWcgKGZpZWxkX3R5cGUsIDAsICJJRSIpOworKyAgdGRlc2NfYWRkX2ZsYWcgKGZpZWxkX3R5cGUsIDEsICJERSIpOworKyAgdGRlc2NfYWRkX2ZsYWcgKGZpZWxkX3R5cGUsIDIsICJaRSIpOworKyAgdGRlc2NfYWRkX2ZsYWcgKGZpZWxkX3R5cGUsIDMsICJPRSIpOworKyAgdGRlc2NfYWRkX2ZsYWcgKGZpZWxkX3R5cGUsIDQsICJVRSIpOworKyAgdGRlc2NfYWRkX2ZsYWcgKGZpZWxkX3R5cGUsIDUsICJQRSIpOworKyAgdGRlc2NfYWRkX2ZsYWcgKGZpZWxkX3R5cGUsIDYsICJEQVoiKTsKKysgIHRkZXNjX2FkZF9mbGFnIChmaWVsZF90eXBlLCA3LCAiSU0iKTsKKysgIHRkZXNjX2FkZF9mbGFnIChmaWVsZF90eXBlLCA4LCAiRE0iKTsKKysgIHRkZXNjX2FkZF9mbGFnIChmaWVsZF90eXBlLCA5LCAiWk0iKTsKKysgIHRkZXNjX2FkZF9mbGFnIChmaWVsZF90eXBlLCAxMCwgIk9NIik7CisrICB0ZGVzY19hZGRfZmxhZyAoZmllbGRfdHlwZSwgMTEsICJVTSIpOworKyAgdGRlc2NfYWRkX2ZsYWcgKGZpZWxkX3R5cGUsIDEyLCAiUE0iKTsKKysgIHRkZXNjX2FkZF9mbGFnIChmaWVsZF90eXBlLCAxNSwgIkZaIik7CisrCisrICB0ZGVzY19jcmVhdGVfcmVnIChmZWF0dXJlLCAieG1tMCIsIDQwLCAxLCBOVUxMLCAxMjgsICJ2ZWMxMjgiKTsKKysgIHRkZXNjX2NyZWF0ZV9yZWcgKGZlYXR1cmUsICJ4bW0xIiwgNDEsIDEsIE5VTEwsIDEyOCwgInZlYzEyOCIpOworKyAgdGRlc2NfY3JlYXRlX3JlZyAoZmVhdHVyZSwgInhtbTIiLCA0MiwgMSwgTlVMTCwgMTI4LCAidmVjMTI4Iik7CisrICB0ZGVzY19jcmVhdGVfcmVnIChmZWF0dXJlLCAieG1tMyIsIDQzLCAxLCBOVUxMLCAxMjgsICJ2ZWMxMjgiKTsKKysgIHRkZXNjX2NyZWF0ZV9yZWcgKGZlYXR1cmUsICJ4bW00IiwgNDQsIDEsIE5VTEwsIDEyOCwgInZlYzEyOCIpOworKyAgdGRlc2NfY3JlYXRlX3JlZyAoZmVhdHVyZSwgInhtbTUiLCA0NSwgMSwgTlVMTCwgMTI4LCAidmVjMTI4Iik7CisrICB0ZGVzY19jcmVhdGVfcmVnIChmZWF0dXJlLCAieG1tNiIsIDQ2LCAxLCBOVUxMLCAxMjgsICJ2ZWMxMjgiKTsKKysgIHRkZXNjX2NyZWF0ZV9yZWcgKGZlYXR1cmUsICJ4bW03IiwgNDcsIDEsIE5VTEwsIDEyOCwgInZlYzEyOCIpOworKyAgdGRlc2NfY3JlYXRlX3JlZyAoZmVhdHVyZSwgInhtbTgiLCA0OCwgMSwgTlVMTCwgMTI4LCAidmVjMTI4Iik7CisrICB0ZGVzY19jcmVhdGVfcmVnIChmZWF0dXJlLCAieG1tOSIsIDQ5LCAxLCBOVUxMLCAxMjgsICJ2ZWMxMjgiKTsKKysgIHRkZXNjX2NyZWF0ZV9yZWcgKGZlYXR1cmUsICJ4bW0xMCIsIDUwLCAxLCBOVUxMLCAxMjgsICJ2ZWMxMjgiKTsKKysgIHRkZXNjX2NyZWF0ZV9yZWcgKGZlYXR1cmUsICJ4bW0xMSIsIDUxLCAxLCBOVUxMLCAxMjgsICJ2ZWMxMjgiKTsKKysgIHRkZXNjX2NyZWF0ZV9yZWcgKGZlYXR1cmUsICJ4bW0xMiIsIDUyLCAxLCBOVUxMLCAxMjgsICJ2ZWMxMjgiKTsKKysgIHRkZXNjX2NyZWF0ZV9yZWcgKGZlYXR1cmUsICJ4bW0xMyIsIDUzLCAxLCBOVUxMLCAxMjgsICJ2ZWMxMjgiKTsKKysgIHRkZXNjX2NyZWF0ZV9yZWcgKGZlYXR1cmUsICJ4bW0xNCIsIDU0LCAxLCBOVUxMLCAxMjgsICJ2ZWMxMjgiKTsKKysgIHRkZXNjX2NyZWF0ZV9yZWcgKGZlYXR1cmUsICJ4bW0xNSIsIDU1LCAxLCBOVUxMLCAxMjgsICJ2ZWMxMjgiKTsKKysgIHRkZXNjX2NyZWF0ZV9yZWcgKGZlYXR1cmUsICJteGNzciIsIDU2LCAxLCAidmVjdG9yIiwgMzIsICJpMzg2X214Y3NyIik7CisrCisrICBmZWF0dXJlID0gdGRlc2NfY3JlYXRlX2ZlYXR1cmUgKHJlc3VsdCwgIm9yZy5nbnUuZ2RiLmkzODYuYXZ4Iik7CisrICB0ZGVzY19jcmVhdGVfcmVnIChmZWF0dXJlLCAieW1tMGgiLCA1NywgMSwgTlVMTCwgMTI4LCAidWludDEyOCIpOworKyAgdGRlc2NfY3JlYXRlX3JlZyAoZmVhdHVyZSwgInltbTFoIiwgNTgsIDEsIE5VTEwsIDEyOCwgInVpbnQxMjgiKTsKKysgIHRkZXNjX2NyZWF0ZV9yZWcgKGZlYXR1cmUsICJ5bW0yaCIsIDU5LCAxLCBOVUxMLCAxMjgsICJ1aW50MTI4Iik7CisrICB0ZGVzY19jcmVhdGVfcmVnIChmZWF0dXJlLCAieW1tM2giLCA2MCwgMSwgTlVMTCwgMTI4LCAidWludDEyOCIpOworKyAgdGRlc2NfY3JlYXRlX3JlZyAoZmVhdHVyZSwgInltbTRoIiwgNjEsIDEsIE5VTEwsIDEyOCwgInVpbnQxMjgiKTsKKysgIHRkZXNjX2NyZWF0ZV9yZWcgKGZlYXR1cmUsICJ5bW01aCIsIDYyLCAxLCBOVUxMLCAxMjgsICJ1aW50MTI4Iik7CisrICB0ZGVzY19jcmVhdGVfcmVnIChmZWF0dXJlLCAieW1tNmgiLCA2MywgMSwgTlVMTCwgMTI4LCAidWludDEyOCIpOworKyAgdGRlc2NfY3JlYXRlX3JlZyAoZmVhdHVyZSwgInltbTdoIiwgNjQsIDEsIE5VTEwsIDEyOCwgInVpbnQxMjgiKTsKKysgIHRkZXNjX2NyZWF0ZV9yZWcgKGZlYXR1cmUsICJ5bW04aCIsIDY1LCAxLCBOVUxMLCAxMjgsICJ1aW50MTI4Iik7CisrICB0ZGVzY19jcmVhdGVfcmVnIChmZWF0dXJlLCAieW1tOWgiLCA2NiwgMSwgTlVMTCwgMTI4LCAidWludDEyOCIpOworKyAgdGRlc2NfY3JlYXRlX3JlZyAoZmVhdHVyZSwgInltbTEwaCIsIDY3LCAxLCBOVUxMLCAxMjgsICJ1aW50MTI4Iik7CisrICB0ZGVzY19jcmVhdGVfcmVnIChmZWF0dXJlLCAieW1tMTFoIiwgNjgsIDEsIE5VTEwsIDEyOCwgInVpbnQxMjgiKTsKKysgIHRkZXNjX2NyZWF0ZV9yZWcgKGZlYXR1cmUsICJ5bW0xMmgiLCA2OSwgMSwgTlVMTCwgMTI4LCAidWludDEyOCIpOworKyAgdGRlc2NfY3JlYXRlX3JlZyAoZmVhdHVyZSwgInltbTEzaCIsIDcwLCAxLCBOVUxMLCAxMjgsICJ1aW50MTI4Iik7CisrICB0ZGVzY19jcmVhdGVfcmVnIChmZWF0dXJlLCAieW1tMTRoIiwgNzEsIDEsIE5VTEwsIDEyOCwgInVpbnQxMjgiKTsKKysgIHRkZXNjX2NyZWF0ZV9yZWcgKGZlYXR1cmUsICJ5bW0xNWgiLCA3MiwgMSwgTlVMTCwgMTI4LCAidWludDEyOCIpOworKworKyAgZmVhdHVyZSA9IHRkZXNjX2NyZWF0ZV9mZWF0dXJlIChyZXN1bHQsICJvcmcuZ251LmdkYi5pMzg2Lm1weCIpOworKyAgdHlwZSA9IHRkZXNjX2NyZWF0ZV9zdHJ1Y3QgKGZlYXR1cmUsICJicjEyOCIpOworKyAgZmllbGRfdHlwZSA9IHRkZXNjX25hbWVkX3R5cGUgKGZlYXR1cmUsICJ1aW50NjQiKTsKKysgIHRkZXNjX2FkZF9maWVsZCAodHlwZSwgImxib3VuZCIsIGZpZWxkX3R5cGUpOworKyAgZmllbGRfdHlwZSA9IHRkZXNjX25hbWVkX3R5cGUgKGZlYXR1cmUsICJ1aW50NjQiKTsKKysgIHRkZXNjX2FkZF9maWVsZCAodHlwZSwgInVib3VuZF9yYXciLCBmaWVsZF90eXBlKTsKKysKKysgIHR5cGUgPSB0ZGVzY19jcmVhdGVfc3RydWN0IChmZWF0dXJlLCAiX2JuZHN0YXR1cyIpOworKyAgdGRlc2Nfc2V0X3N0cnVjdF9zaXplICh0eXBlLCA4KTsKKysgIHRkZXNjX2FkZF9iaXRmaWVsZCAodHlwZSwgImJkZSIsIDIsIDYzKTsKKysgIHRkZXNjX2FkZF9iaXRmaWVsZCAodHlwZSwgImVycm9yIiwgMCwgMSk7CisrCisrICB0eXBlID0gdGRlc2NfY3JlYXRlX3VuaW9uIChmZWF0dXJlLCAic3RhdHVzIik7CisrICBmaWVsZF90eXBlID0gdGRlc2NfbmFtZWRfdHlwZSAoZmVhdHVyZSwgImRhdGFfcHRyIik7CisrICB0ZGVzY19hZGRfZmllbGQgKHR5cGUsICJyYXciLCBmaWVsZF90eXBlKTsKKysgIGZpZWxkX3R5cGUgPSB0ZGVzY19uYW1lZF90eXBlIChmZWF0dXJlLCAiX2JuZHN0YXR1cyIpOworKyAgdGRlc2NfYWRkX2ZpZWxkICh0eXBlLCAic3RhdHVzIiwgZmllbGRfdHlwZSk7CisrCisrICB0eXBlID0gdGRlc2NfY3JlYXRlX3N0cnVjdCAoZmVhdHVyZSwgIl9ibmRjZmd1Iik7CisrICB0ZGVzY19zZXRfc3RydWN0X3NpemUgKHR5cGUsIDgpOworKyAgdGRlc2NfYWRkX2JpdGZpZWxkICh0eXBlLCAiYmFzZSIsIDEyLCA2Myk7CisrICB0ZGVzY19hZGRfYml0ZmllbGQgKHR5cGUsICJyZXNlcnZlZCIsIDIsIDExKTsKKysgIHRkZXNjX2FkZF9iaXRmaWVsZCAodHlwZSwgInByZXNlcnZlZCIsIDEsIDEpOworKyAgdGRlc2NfYWRkX2JpdGZpZWxkICh0eXBlLCAiZW5hYmxlZCIsIDAsIDApOworKworKyAgdHlwZSA9IHRkZXNjX2NyZWF0ZV91bmlvbiAoZmVhdHVyZSwgImNmZ3UiKTsKKysgIGZpZWxkX3R5cGUgPSB0ZGVzY19uYW1lZF90eXBlIChmZWF0dXJlLCAiZGF0YV9wdHIiKTsKKysgIHRkZXNjX2FkZF9maWVsZCAodHlwZSwgInJhdyIsIGZpZWxkX3R5cGUpOworKyAgZmllbGRfdHlwZSA9IHRkZXNjX25hbWVkX3R5cGUgKGZlYXR1cmUsICJfYm5kY2ZndSIpOworKyAgdGRlc2NfYWRkX2ZpZWxkICh0eXBlLCAiY29uZmlnIiwgZmllbGRfdHlwZSk7CisrCisrICB0ZGVzY19jcmVhdGVfcmVnIChmZWF0dXJlLCAiYm5kMHJhdyIsIDczLCAxLCBOVUxMLCAxMjgsICJicjEyOCIpOworKyAgdGRlc2NfY3JlYXRlX3JlZyAoZmVhdHVyZSwgImJuZDFyYXciLCA3NCwgMSwgTlVMTCwgMTI4LCAiYnIxMjgiKTsKKysgIHRkZXNjX2NyZWF0ZV9yZWcgKGZlYXR1cmUsICJibmQycmF3IiwgNzUsIDEsIE5VTEwsIDEyOCwgImJyMTI4Iik7CisrICB0ZGVzY19jcmVhdGVfcmVnIChmZWF0dXJlLCAiYm5kM3JhdyIsIDc2LCAxLCBOVUxMLCAxMjgsICJicjEyOCIpOworKyAgdGRlc2NfY3JlYXRlX3JlZyAoZmVhdHVyZSwgImJuZGNmZ3UiLCA3NywgMSwgTlVMTCwgNjQsICJjZmd1Iik7CisrICB0ZGVzY19jcmVhdGVfcmVnIChmZWF0dXJlLCAiYm5kc3RhdHVzIiwgNzgsIDEsIE5VTEwsIDY0LCAic3RhdHVzIik7CisrCisrICB0ZGVzY19hbWQ2NF9hdnhfbXB4ID0gcmVzdWx0OworK30KK2RpZmYgLS1naXQgYS9nZGIvZmVhdHVyZXMvaTM4Ni9hbWQ2NC1hdngtbXB4LnhtbCBiL2dkYi9mZWF0dXJlcy9pMzg2L2FtZDY0LWF2eC1tcHgueG1sCituZXcgZmlsZSBtb2RlIDEwMDY0NAoraW5kZXggMDAwMDAwMC4uM2VlYTZkZAorLS0tIC9kZXYvbnVsbAorKysrIGIvZ2RiL2ZlYXR1cmVzL2kzODYvYW1kNjQtYXZ4LW1weC54bWwKK0BAIC0wLDAgKzEsMTcgQEAKKys8P3htbCB2ZXJzaW9uPSIxLjAiPz4KKys8IS0tIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorKworKyAgICAgQ29weWluZyBhbmQgZGlzdHJpYnV0aW9uIG9mIHRoaXMgZmlsZSwgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbiwKKysgICAgIGFyZSBwZXJtaXR0ZWQgaW4gYW55IG1lZGl1bSB3aXRob3V0IHJveWFsdHkgcHJvdmlkZWQgdGhlIGNvcHlyaWdodAorKyAgICAgbm90aWNlIGFuZCB0aGlzIG5vdGljZSBhcmUgcHJlc2VydmVkLiAgLS0+CisrCisrPCEtLSBBTUQ2NCB3aXRoIEFWWCBhbmQgTVBYIC0tPgorKworKzwhRE9DVFlQRSB0YXJnZXQgU1lTVEVNICJnZGItdGFyZ2V0LmR0ZCI+CisrPHRhcmdldD4KKysgIDxhcmNoaXRlY3R1cmU+aTM4Njp4ODYtNjQ8L2FyY2hpdGVjdHVyZT4KKysgIDx4aTppbmNsdWRlIGhyZWY9IjY0Yml0LWNvcmUueG1sIi8+CisrICA8eGk6aW5jbHVkZSBocmVmPSI2NGJpdC1zc2UueG1sIi8+CisrICA8eGk6aW5jbHVkZSBocmVmPSI2NGJpdC1hdngueG1sIi8+CisrICA8eGk6aW5jbHVkZSBocmVmPSI2NGJpdC1tcHgueG1sIi8+CisrPC90YXJnZXQ+CitkaWZmIC0tZ2l0IGEvZ2RiL2ZlYXR1cmVzL2kzODYvYW1kNjQtbXB4LWxpbnV4LmMgYi9nZGIvZmVhdHVyZXMvaTM4Ni9hbWQ2NC1tcHgtbGludXguYworaW5kZXggODZhMTc3NC4uNWMxNTg0YiAxMDA2NDQKKy0tLSBhL2dkYi9mZWF0dXJlcy9pMzg2L2FtZDY0LW1weC1saW51eC5jCisrKysgYi9nZGIvZmVhdHVyZXMvaTM4Ni9hbWQ2NC1tcHgtbGludXguYworQEAgLTE1MSwyNCArMTUxLDYgQEAgaW5pdGlhbGl6ZV90ZGVzY19hbWQ2NF9tcHhfbGludXggKHZvaWQpCisgICBmZWF0dXJlID0gdGRlc2NfY3JlYXRlX2ZlYXR1cmUgKHJlc3VsdCwgIm9yZy5nbnUuZ2RiLmkzODYubGludXgiKTsKKyAgIHRkZXNjX2NyZWF0ZV9yZWcgKGZlYXR1cmUsICJvcmlnX3JheCIsIDU3LCAxLCBOVUxMLCA2NCwgImludCIpOworCistICBmZWF0dXJlID0gdGRlc2NfY3JlYXRlX2ZlYXR1cmUgKHJlc3VsdCwgIm9yZy5nbnUuZ2RiLmkzODYuYXZ4Iik7CistICB0ZGVzY19jcmVhdGVfcmVnIChmZWF0dXJlLCAieW1tMGgiLCA1OCwgMSwgTlVMTCwgMTI4LCAidWludDEyOCIpOworLSAgdGRlc2NfY3JlYXRlX3JlZyAoZmVhdHVyZSwgInltbTFoIiwgNTksIDEsIE5VTEwsIDEyOCwgInVpbnQxMjgiKTsKKy0gIHRkZXNjX2NyZWF0ZV9yZWcgKGZlYXR1cmUsICJ5bW0yaCIsIDYwLCAxLCBOVUxMLCAxMjgsICJ1aW50MTI4Iik7CistICB0ZGVzY19jcmVhdGVfcmVnIChmZWF0dXJlLCAieW1tM2giLCA2MSwgMSwgTlVMTCwgMTI4LCAidWludDEyOCIpOworLSAgdGRlc2NfY3JlYXRlX3JlZyAoZmVhdHVyZSwgInltbTRoIiwgNjIsIDEsIE5VTEwsIDEyOCwgInVpbnQxMjgiKTsKKy0gIHRkZXNjX2NyZWF0ZV9yZWcgKGZlYXR1cmUsICJ5bW01aCIsIDYzLCAxLCBOVUxMLCAxMjgsICJ1aW50MTI4Iik7CistICB0ZGVzY19jcmVhdGVfcmVnIChmZWF0dXJlLCAieW1tNmgiLCA2NCwgMSwgTlVMTCwgMTI4LCAidWludDEyOCIpOworLSAgdGRlc2NfY3JlYXRlX3JlZyAoZmVhdHVyZSwgInltbTdoIiwgNjUsIDEsIE5VTEwsIDEyOCwgInVpbnQxMjgiKTsKKy0gIHRkZXNjX2NyZWF0ZV9yZWcgKGZlYXR1cmUsICJ5bW04aCIsIDY2LCAxLCBOVUxMLCAxMjgsICJ1aW50MTI4Iik7CistICB0ZGVzY19jcmVhdGVfcmVnIChmZWF0dXJlLCAieW1tOWgiLCA2NywgMSwgTlVMTCwgMTI4LCAidWludDEyOCIpOworLSAgdGRlc2NfY3JlYXRlX3JlZyAoZmVhdHVyZSwgInltbTEwaCIsIDY4LCAxLCBOVUxMLCAxMjgsICJ1aW50MTI4Iik7CistICB0ZGVzY19jcmVhdGVfcmVnIChmZWF0dXJlLCAieW1tMTFoIiwgNjksIDEsIE5VTEwsIDEyOCwgInVpbnQxMjgiKTsKKy0gIHRkZXNjX2NyZWF0ZV9yZWcgKGZlYXR1cmUsICJ5bW0xMmgiLCA3MCwgMSwgTlVMTCwgMTI4LCAidWludDEyOCIpOworLSAgdGRlc2NfY3JlYXRlX3JlZyAoZmVhdHVyZSwgInltbTEzaCIsIDcxLCAxLCBOVUxMLCAxMjgsICJ1aW50MTI4Iik7CistICB0ZGVzY19jcmVhdGVfcmVnIChmZWF0dXJlLCAieW1tMTRoIiwgNzIsIDEsIE5VTEwsIDEyOCwgInVpbnQxMjgiKTsKKy0gIHRkZXNjX2NyZWF0ZV9yZWcgKGZlYXR1cmUsICJ5bW0xNWgiLCA3MywgMSwgTlVMTCwgMTI4LCAidWludDEyOCIpOworLQorICAgZmVhdHVyZSA9IHRkZXNjX2NyZWF0ZV9mZWF0dXJlIChyZXN1bHQsICJvcmcuZ251LmdkYi5pMzg2Lm1weCIpOworICAgdHlwZSA9IHRkZXNjX2NyZWF0ZV9zdHJ1Y3QgKGZlYXR1cmUsICJicjEyOCIpOworICAgZmllbGRfdHlwZSA9IHRkZXNjX25hbWVkX3R5cGUgKGZlYXR1cmUsICJ1aW50NjQiKTsKK0BAIC0yMDAsMTIgKzE4MiwxMiBAQCBpbml0aWFsaXplX3RkZXNjX2FtZDY0X21weF9saW51eCAodm9pZCkKKyAgIGZpZWxkX3R5cGUgPSB0ZGVzY19uYW1lZF90eXBlIChmZWF0dXJlLCAiX2JuZGNmZ3UiKTsKKyAgIHRkZXNjX2FkZF9maWVsZCAodHlwZSwgImNvbmZpZyIsIGZpZWxkX3R5cGUpOworCistICB0ZGVzY19jcmVhdGVfcmVnIChmZWF0dXJlLCAiYm5kMHJhdyIsIDc0LCAxLCBOVUxMLCAxMjgsICJicjEyOCIpOworLSAgdGRlc2NfY3JlYXRlX3JlZyAoZmVhdHVyZSwgImJuZDFyYXciLCA3NSwgMSwgTlVMTCwgMTI4LCAiYnIxMjgiKTsKKy0gIHRkZXNjX2NyZWF0ZV9yZWcgKGZlYXR1cmUsICJibmQycmF3IiwgNzYsIDEsIE5VTEwsIDEyOCwgImJyMTI4Iik7CistICB0ZGVzY19jcmVhdGVfcmVnIChmZWF0dXJlLCAiYm5kM3JhdyIsIDc3LCAxLCBOVUxMLCAxMjgsICJicjEyOCIpOworLSAgdGRlc2NfY3JlYXRlX3JlZyAoZmVhdHVyZSwgImJuZGNmZ3UiLCA3OCwgMSwgTlVMTCwgNjQsICJjZmd1Iik7CistICB0ZGVzY19jcmVhdGVfcmVnIChmZWF0dXJlLCAiYm5kc3RhdHVzIiwgNzksIDEsIE5VTEwsIDY0LCAic3RhdHVzIik7CisrICB0ZGVzY19jcmVhdGVfcmVnIChmZWF0dXJlLCAiYm5kMHJhdyIsIDU4LCAxLCBOVUxMLCAxMjgsICJicjEyOCIpOworKyAgdGRlc2NfY3JlYXRlX3JlZyAoZmVhdHVyZSwgImJuZDFyYXciLCA1OSwgMSwgTlVMTCwgMTI4LCAiYnIxMjgiKTsKKysgIHRkZXNjX2NyZWF0ZV9yZWcgKGZlYXR1cmUsICJibmQycmF3IiwgNjAsIDEsIE5VTEwsIDEyOCwgImJyMTI4Iik7CisrICB0ZGVzY19jcmVhdGVfcmVnIChmZWF0dXJlLCAiYm5kM3JhdyIsIDYxLCAxLCBOVUxMLCAxMjgsICJicjEyOCIpOworKyAgdGRlc2NfY3JlYXRlX3JlZyAoZmVhdHVyZSwgImJuZGNmZ3UiLCA2MiwgMSwgTlVMTCwgNjQsICJjZmd1Iik7CisrICB0ZGVzY19jcmVhdGVfcmVnIChmZWF0dXJlLCAiYm5kc3RhdHVzIiwgNjMsIDEsIE5VTEwsIDY0LCAic3RhdHVzIik7CisKKyAgIHRkZXNjX2FtZDY0X21weF9saW51eCA9IHJlc3VsdDsKKyB9CitkaWZmIC0tZ2l0IGEvZ2RiL2ZlYXR1cmVzL2kzODYvYW1kNjQtbXB4LWxpbnV4LnhtbCBiL2dkYi9mZWF0dXJlcy9pMzg2L2FtZDY0LW1weC1saW51eC54bWwKK2luZGV4IDE1ZTg3YjQuLjgzNTEyNmIgMTAwNjQ0CistLS0gYS9nZGIvZmVhdHVyZXMvaTM4Ni9hbWQ2NC1tcHgtbGludXgueG1sCisrKysgYi9nZGIvZmVhdHVyZXMvaTM4Ni9hbWQ2NC1tcHgtbGludXgueG1sCitAQCAtMTQsNiArMTQsNSBAQAorICAgPHhpOmluY2x1ZGUgaHJlZj0iNjRiaXQtY29yZS54bWwiLz4KKyAgIDx4aTppbmNsdWRlIGhyZWY9IjY0Yml0LXNzZS54bWwiLz4KKyAgIDx4aTppbmNsdWRlIGhyZWY9IjY0Yml0LWxpbnV4LnhtbCIvPgorLSAgPHhpOmluY2x1ZGUgaHJlZj0iNjRiaXQtYXZ4LnhtbCIvPgorICAgPHhpOmluY2x1ZGUgaHJlZj0iNjRiaXQtbXB4LnhtbCIvPgorIDwvdGFyZ2V0PgorZGlmZiAtLWdpdCBhL2dkYi9mZWF0dXJlcy9pMzg2L2FtZDY0LW1weC5jIGIvZ2RiL2ZlYXR1cmVzL2kzODYvYW1kNjQtbXB4LmMKK2luZGV4IDE1YWU1ZjcuLjRjODUyZWYgMTAwNjQ0CistLS0gYS9nZGIvZmVhdHVyZXMvaTM4Ni9hbWQ2NC1tcHguYworKysrIGIvZ2RiL2ZlYXR1cmVzL2kzODYvYW1kNjQtbXB4LmMKK0BAIC0xNDYsMjQgKzE0Niw2IEBAIGluaXRpYWxpemVfdGRlc2NfYW1kNjRfbXB4ICh2b2lkKQorICAgdGRlc2NfY3JlYXRlX3JlZyAoZmVhdHVyZSwgInhtbTE1IiwgNTUsIDEsIE5VTEwsIDEyOCwgInZlYzEyOCIpOworICAgdGRlc2NfY3JlYXRlX3JlZyAoZmVhdHVyZSwgIm14Y3NyIiwgNTYsIDEsICJ2ZWN0b3IiLCAzMiwgImkzODZfbXhjc3IiKTsKKworLSAgZmVhdHVyZSA9IHRkZXNjX2NyZWF0ZV9mZWF0dXJlIChyZXN1bHQsICJvcmcuZ251LmdkYi5pMzg2LmF2eCIpOworLSAgdGRlc2NfY3JlYXRlX3JlZyAoZmVhdHVyZSwgInltbTBoIiwgNTcsIDEsIE5VTEwsIDEyOCwgInVpbnQxMjgiKTsKKy0gIHRkZXNjX2NyZWF0ZV9yZWcgKGZlYXR1cmUsICJ5bW0xaCIsIDU4LCAxLCBOVUxMLCAxMjgsICJ1aW50MTI4Iik7CistICB0ZGVzY19jcmVhdGVfcmVnIChmZWF0dXJlLCAieW1tMmgiLCA1OSwgMSwgTlVMTCwgMTI4LCAidWludDEyOCIpOworLSAgdGRlc2NfY3JlYXRlX3JlZyAoZmVhdHVyZSwgInltbTNoIiwgNjAsIDEsIE5VTEwsIDEyOCwgInVpbnQxMjgiKTsKKy0gIHRkZXNjX2NyZWF0ZV9yZWcgKGZlYXR1cmUsICJ5bW00aCIsIDYxLCAxLCBOVUxMLCAxMjgsICJ1aW50MTI4Iik7CistICB0ZGVzY19jcmVhdGVfcmVnIChmZWF0dXJlLCAieW1tNWgiLCA2MiwgMSwgTlVMTCwgMTI4LCAidWludDEyOCIpOworLSAgdGRlc2NfY3JlYXRlX3JlZyAoZmVhdHVyZSwgInltbTZoIiwgNjMsIDEsIE5VTEwsIDEyOCwgInVpbnQxMjgiKTsKKy0gIHRkZXNjX2NyZWF0ZV9yZWcgKGZlYXR1cmUsICJ5bW03aCIsIDY0LCAxLCBOVUxMLCAxMjgsICJ1aW50MTI4Iik7CistICB0ZGVzY19jcmVhdGVfcmVnIChmZWF0dXJlLCAieW1tOGgiLCA2NSwgMSwgTlVMTCwgMTI4LCAidWludDEyOCIpOworLSAgdGRlc2NfY3JlYXRlX3JlZyAoZmVhdHVyZSwgInltbTloIiwgNjYsIDEsIE5VTEwsIDEyOCwgInVpbnQxMjgiKTsKKy0gIHRkZXNjX2NyZWF0ZV9yZWcgKGZlYXR1cmUsICJ5bW0xMGgiLCA2NywgMSwgTlVMTCwgMTI4LCAidWludDEyOCIpOworLSAgdGRlc2NfY3JlYXRlX3JlZyAoZmVhdHVyZSwgInltbTExaCIsIDY4LCAxLCBOVUxMLCAxMjgsICJ1aW50MTI4Iik7CistICB0ZGVzY19jcmVhdGVfcmVnIChmZWF0dXJlLCAieW1tMTJoIiwgNjksIDEsIE5VTEwsIDEyOCwgInVpbnQxMjgiKTsKKy0gIHRkZXNjX2NyZWF0ZV9yZWcgKGZlYXR1cmUsICJ5bW0xM2giLCA3MCwgMSwgTlVMTCwgMTI4LCAidWludDEyOCIpOworLSAgdGRlc2NfY3JlYXRlX3JlZyAoZmVhdHVyZSwgInltbTE0aCIsIDcxLCAxLCBOVUxMLCAxMjgsICJ1aW50MTI4Iik7CistICB0ZGVzY19jcmVhdGVfcmVnIChmZWF0dXJlLCAieW1tMTVoIiwgNzIsIDEsIE5VTEwsIDEyOCwgInVpbnQxMjgiKTsKKy0KKyAgIGZlYXR1cmUgPSB0ZGVzY19jcmVhdGVfZmVhdHVyZSAocmVzdWx0LCAib3JnLmdudS5nZGIuaTM4Ni5tcHgiKTsKKyAgIHR5cGUgPSB0ZGVzY19jcmVhdGVfc3RydWN0IChmZWF0dXJlLCAiYnIxMjgiKTsKKyAgIGZpZWxkX3R5cGUgPSB0ZGVzY19uYW1lZF90eXBlIChmZWF0dXJlLCAidWludDY0Iik7CitAQCAtMTk1LDEyICsxNzcsMTIgQEAgaW5pdGlhbGl6ZV90ZGVzY19hbWQ2NF9tcHggKHZvaWQpCisgICBmaWVsZF90eXBlID0gdGRlc2NfbmFtZWRfdHlwZSAoZmVhdHVyZSwgIl9ibmRjZmd1Iik7CisgICB0ZGVzY19hZGRfZmllbGQgKHR5cGUsICJjb25maWciLCBmaWVsZF90eXBlKTsKKworLSAgdGRlc2NfY3JlYXRlX3JlZyAoZmVhdHVyZSwgImJuZDByYXciLCA3MywgMSwgTlVMTCwgMTI4LCAiYnIxMjgiKTsKKy0gIHRkZXNjX2NyZWF0ZV9yZWcgKGZlYXR1cmUsICJibmQxcmF3IiwgNzQsIDEsIE5VTEwsIDEyOCwgImJyMTI4Iik7CistICB0ZGVzY19jcmVhdGVfcmVnIChmZWF0dXJlLCAiYm5kMnJhdyIsIDc1LCAxLCBOVUxMLCAxMjgsICJicjEyOCIpOworLSAgdGRlc2NfY3JlYXRlX3JlZyAoZmVhdHVyZSwgImJuZDNyYXciLCA3NiwgMSwgTlVMTCwgMTI4LCAiYnIxMjgiKTsKKy0gIHRkZXNjX2NyZWF0ZV9yZWcgKGZlYXR1cmUsICJibmRjZmd1IiwgNzcsIDEsIE5VTEwsIDY0LCAiY2ZndSIpOworLSAgdGRlc2NfY3JlYXRlX3JlZyAoZmVhdHVyZSwgImJuZHN0YXR1cyIsIDc4LCAxLCBOVUxMLCA2NCwgInN0YXR1cyIpOworKyAgdGRlc2NfY3JlYXRlX3JlZyAoZmVhdHVyZSwgImJuZDByYXciLCA1NywgMSwgTlVMTCwgMTI4LCAiYnIxMjgiKTsKKysgIHRkZXNjX2NyZWF0ZV9yZWcgKGZlYXR1cmUsICJibmQxcmF3IiwgNTgsIDEsIE5VTEwsIDEyOCwgImJyMTI4Iik7CisrICB0ZGVzY19jcmVhdGVfcmVnIChmZWF0dXJlLCAiYm5kMnJhdyIsIDU5LCAxLCBOVUxMLCAxMjgsICJicjEyOCIpOworKyAgdGRlc2NfY3JlYXRlX3JlZyAoZmVhdHVyZSwgImJuZDNyYXciLCA2MCwgMSwgTlVMTCwgMTI4LCAiYnIxMjgiKTsKKysgIHRkZXNjX2NyZWF0ZV9yZWcgKGZlYXR1cmUsICJibmRjZmd1IiwgNjEsIDEsIE5VTEwsIDY0LCAiY2ZndSIpOworKyAgdGRlc2NfY3JlYXRlX3JlZyAoZmVhdHVyZSwgImJuZHN0YXR1cyIsIDYyLCAxLCBOVUxMLCA2NCwgInN0YXR1cyIpOworCisgICB0ZGVzY19hbWQ2NF9tcHggPSByZXN1bHQ7CisgfQorZGlmZiAtLWdpdCBhL2dkYi9mZWF0dXJlcy9pMzg2L2FtZDY0LW1weC54bWwgYi9nZGIvZmVhdHVyZXMvaTM4Ni9hbWQ2NC1tcHgueG1sCitpbmRleCAyMWI2ZGYzLi5lNDU4NzM2IDEwMDY0NAorLS0tIGEvZ2RiL2ZlYXR1cmVzL2kzODYvYW1kNjQtbXB4LnhtbAorKysrIGIvZ2RiL2ZlYXR1cmVzL2kzODYvYW1kNjQtbXB4LnhtbAorQEAgLTEyLDYgKzEyLDUgQEAKKyAgIDxhcmNoaXRlY3R1cmU+aTM4Njp4ODYtNjQ8L2FyY2hpdGVjdHVyZT4KKyAgIDx4aTppbmNsdWRlIGhyZWY9IjY0Yml0LWNvcmUueG1sIi8+CisgICA8eGk6aW5jbHVkZSBocmVmPSI2NGJpdC1zc2UueG1sIi8+CistICA8eGk6aW5jbHVkZSBocmVmPSI2NGJpdC1hdngueG1sIi8+CisgICA8eGk6aW5jbHVkZSBocmVmPSI2NGJpdC1tcHgueG1sIi8+CisgPC90YXJnZXQ+CitkaWZmIC0tZ2l0IGEvZ2RiL2ZlYXR1cmVzL2kzODYvaTM4Ni1hdngtbXB4LWxpbnV4LmMgYi9nZGIvZmVhdHVyZXMvaTM4Ni9pMzg2LWF2eC1tcHgtbGludXguYworbmV3IGZpbGUgbW9kZSAxMDA2NDQKK2luZGV4IDAwMDAwMDAuLmRkNzU0MDMKKy0tLSAvZGV2L251bGwKKysrKyBiL2dkYi9mZWF0dXJlcy9pMzg2L2kzODYtYXZ4LW1weC1saW51eC5jCitAQCAtMCwwICsxLDE4NyBAQAorKy8qIFRISVMgRklMRSBJUyBHRU5FUkFURUQuICAtKi0gYnVmZmVyLXJlYWQtb25seTogdCAtKi0gdmk6c2V0IHJvOgorKyAgT3JpZ2luYWw6IGkzODYtYXZ4LW1weC1saW51eC54bWwgKi8KKysKKysjaW5jbHVkZSAiZGVmcy5oIgorKyNpbmNsdWRlICJvc2FiaS5oIgorKyNpbmNsdWRlICJ0YXJnZXQtZGVzY3JpcHRpb25zLmgiCisrCisrc3RydWN0IHRhcmdldF9kZXNjICp0ZGVzY19pMzg2X2F2eF9tcHhfbGludXg7Cisrc3RhdGljIHZvaWQKKytpbml0aWFsaXplX3RkZXNjX2kzODZfYXZ4X21weF9saW51eCAodm9pZCkKKyt7CisrICBzdHJ1Y3QgdGFyZ2V0X2Rlc2MgKnJlc3VsdCA9IGFsbG9jYXRlX3RhcmdldF9kZXNjcmlwdGlvbiAoKTsKKysgIHN0cnVjdCB0ZGVzY19mZWF0dXJlICpmZWF0dXJlOworKyAgc3RydWN0IHRkZXNjX3R5cGUgKmZpZWxkX3R5cGU7CisrICBzdHJ1Y3QgdGRlc2NfdHlwZSAqdHlwZTsKKysKKysgIHNldF90ZGVzY19hcmNoaXRlY3R1cmUgKHJlc3VsdCwgYmZkX3NjYW5fYXJjaCAoImkzODYiKSk7CisrCisrICBzZXRfdGRlc2Nfb3NhYmkgKHJlc3VsdCwgb3NhYmlfZnJvbV90ZGVzY19zdHJpbmcgKCJHTlUvTGludXgiKSk7CisrCisrICBmZWF0dXJlID0gdGRlc2NfY3JlYXRlX2ZlYXR1cmUgKHJlc3VsdCwgIm9yZy5nbnUuZ2RiLmkzODYuY29yZSIpOworKyAgZmllbGRfdHlwZSA9IHRkZXNjX2NyZWF0ZV9mbGFncyAoZmVhdHVyZSwgImkzODZfZWZsYWdzIiwgNCk7CisrICB0ZGVzY19hZGRfZmxhZyAoZmllbGRfdHlwZSwgMCwgIkNGIik7CisrICB0ZGVzY19hZGRfZmxhZyAoZmllbGRfdHlwZSwgMSwgIiIpOworKyAgdGRlc2NfYWRkX2ZsYWcgKGZpZWxkX3R5cGUsIDIsICJQRiIpOworKyAgdGRlc2NfYWRkX2ZsYWcgKGZpZWxkX3R5cGUsIDQsICJBRiIpOworKyAgdGRlc2NfYWRkX2ZsYWcgKGZpZWxkX3R5cGUsIDYsICJaRiIpOworKyAgdGRlc2NfYWRkX2ZsYWcgKGZpZWxkX3R5cGUsIDcsICJTRiIpOworKyAgdGRlc2NfYWRkX2ZsYWcgKGZpZWxkX3R5cGUsIDgsICJURiIpOworKyAgdGRlc2NfYWRkX2ZsYWcgKGZpZWxkX3R5cGUsIDksICJJRiIpOworKyAgdGRlc2NfYWRkX2ZsYWcgKGZpZWxkX3R5cGUsIDEwLCAiREYiKTsKKysgIHRkZXNjX2FkZF9mbGFnIChmaWVsZF90eXBlLCAxMSwgIk9GIik7CisrICB0ZGVzY19hZGRfZmxhZyAoZmllbGRfdHlwZSwgMTQsICJOVCIpOworKyAgdGRlc2NfYWRkX2ZsYWcgKGZpZWxkX3R5cGUsIDE2LCAiUkYiKTsKKysgIHRkZXNjX2FkZF9mbGFnIChmaWVsZF90eXBlLCAxNywgIlZNIik7CisrICB0ZGVzY19hZGRfZmxhZyAoZmllbGRfdHlwZSwgMTgsICJBQyIpOworKyAgdGRlc2NfYWRkX2ZsYWcgKGZpZWxkX3R5cGUsIDE5LCAiVklGIik7CisrICB0ZGVzY19hZGRfZmxhZyAoZmllbGRfdHlwZSwgMjAsICJWSVAiKTsKKysgIHRkZXNjX2FkZF9mbGFnIChmaWVsZF90eXBlLCAyMSwgIklEIik7CisrCisrICB0ZGVzY19jcmVhdGVfcmVnIChmZWF0dXJlLCAiZWF4IiwgMCwgMSwgTlVMTCwgMzIsICJpbnQzMiIpOworKyAgdGRlc2NfY3JlYXRlX3JlZyAoZmVhdHVyZSwgImVjeCIsIDEsIDEsIE5VTEwsIDMyLCAiaW50MzIiKTsKKysgIHRkZXNjX2NyZWF0ZV9yZWcgKGZlYXR1cmUsICJlZHgiLCAyLCAxLCBOVUxMLCAzMiwgImludDMyIik7CisrICB0ZGVzY19jcmVhdGVfcmVnIChmZWF0dXJlLCAiZWJ4IiwgMywgMSwgTlVMTCwgMzIsICJpbnQzMiIpOworKyAgdGRlc2NfY3JlYXRlX3JlZyAoZmVhdHVyZSwgImVzcCIsIDQsIDEsIE5VTEwsIDMyLCAiZGF0YV9wdHIiKTsKKysgIHRkZXNjX2NyZWF0ZV9yZWcgKGZlYXR1cmUsICJlYnAiLCA1LCAxLCBOVUxMLCAzMiwgImRhdGFfcHRyIik7CisrICB0ZGVzY19jcmVhdGVfcmVnIChmZWF0dXJlLCAiZXNpIiwgNiwgMSwgTlVMTCwgMzIsICJpbnQzMiIpOworKyAgdGRlc2NfY3JlYXRlX3JlZyAoZmVhdHVyZSwgImVkaSIsIDcsIDEsIE5VTEwsIDMyLCAiaW50MzIiKTsKKysgIHRkZXNjX2NyZWF0ZV9yZWcgKGZlYXR1cmUsICJlaXAiLCA4LCAxLCBOVUxMLCAzMiwgImNvZGVfcHRyIik7CisrICB0ZGVzY19jcmVhdGVfcmVnIChmZWF0dXJlLCAiZWZsYWdzIiwgOSwgMSwgTlVMTCwgMzIsICJpMzg2X2VmbGFncyIpOworKyAgdGRlc2NfY3JlYXRlX3JlZyAoZmVhdHVyZSwgImNzIiwgMTAsIDEsIE5VTEwsIDMyLCAiaW50MzIiKTsKKysgIHRkZXNjX2NyZWF0ZV9yZWcgKGZlYXR1cmUsICJzcyIsIDExLCAxLCBOVUxMLCAzMiwgImludDMyIik7CisrICB0ZGVzY19jcmVhdGVfcmVnIChmZWF0dXJlLCAiZHMiLCAxMiwgMSwgTlVMTCwgMzIsICJpbnQzMiIpOworKyAgdGRlc2NfY3JlYXRlX3JlZyAoZmVhdHVyZSwgImVzIiwgMTMsIDEsIE5VTEwsIDMyLCAiaW50MzIiKTsKKysgIHRkZXNjX2NyZWF0ZV9yZWcgKGZlYXR1cmUsICJmcyIsIDE0LCAxLCBOVUxMLCAzMiwgImludDMyIik7CisrICB0ZGVzY19jcmVhdGVfcmVnIChmZWF0dXJlLCAiZ3MiLCAxNSwgMSwgTlVMTCwgMzIsICJpbnQzMiIpOworKyAgdGRlc2NfY3JlYXRlX3JlZyAoZmVhdHVyZSwgInN0MCIsIDE2LCAxLCBOVUxMLCA4MCwgImkzODdfZXh0Iik7CisrICB0ZGVzY19jcmVhdGVfcmVnIChmZWF0dXJlLCAic3QxIiwgMTcsIDEsIE5VTEwsIDgwLCAiaTM4N19leHQiKTsKKysgIHRkZXNjX2NyZWF0ZV9yZWcgKGZlYXR1cmUsICJzdDIiLCAxOCwgMSwgTlVMTCwgODAsICJpMzg3X2V4dCIpOworKyAgdGRlc2NfY3JlYXRlX3JlZyAoZmVhdHVyZSwgInN0MyIsIDE5LCAxLCBOVUxMLCA4MCwgImkzODdfZXh0Iik7CisrICB0ZGVzY19jcmVhdGVfcmVnIChmZWF0dXJlLCAic3Q0IiwgMjAsIDEsIE5VTEwsIDgwLCAiaTM4N19leHQiKTsKKysgIHRkZXNjX2NyZWF0ZV9yZWcgKGZlYXR1cmUsICJzdDUiLCAyMSwgMSwgTlVMTCwgODAsICJpMzg3X2V4dCIpOworKyAgdGRlc2NfY3JlYXRlX3JlZyAoZmVhdHVyZSwgInN0NiIsIDIyLCAxLCBOVUxMLCA4MCwgImkzODdfZXh0Iik7CisrICB0ZGVzY19jcmVhdGVfcmVnIChmZWF0dXJlLCAic3Q3IiwgMjMsIDEsIE5VTEwsIDgwLCAiaTM4N19leHQiKTsKKysgIHRkZXNjX2NyZWF0ZV9yZWcgKGZlYXR1cmUsICJmY3RybCIsIDI0LCAxLCAiZmxvYXQiLCAzMiwgImludCIpOworKyAgdGRlc2NfY3JlYXRlX3JlZyAoZmVhdHVyZSwgImZzdGF0IiwgMjUsIDEsICJmbG9hdCIsIDMyLCAiaW50Iik7CisrICB0ZGVzY19jcmVhdGVfcmVnIChmZWF0dXJlLCAiZnRhZyIsIDI2LCAxLCAiZmxvYXQiLCAzMiwgImludCIpOworKyAgdGRlc2NfY3JlYXRlX3JlZyAoZmVhdHVyZSwgImZpc2VnIiwgMjcsIDEsICJmbG9hdCIsIDMyLCAiaW50Iik7CisrICB0ZGVzY19jcmVhdGVfcmVnIChmZWF0dXJlLCAiZmlvZmYiLCAyOCwgMSwgImZsb2F0IiwgMzIsICJpbnQiKTsKKysgIHRkZXNjX2NyZWF0ZV9yZWcgKGZlYXR1cmUsICJmb3NlZyIsIDI5LCAxLCAiZmxvYXQiLCAzMiwgImludCIpOworKyAgdGRlc2NfY3JlYXRlX3JlZyAoZmVhdHVyZSwgImZvb2ZmIiwgMzAsIDEsICJmbG9hdCIsIDMyLCAiaW50Iik7CisrICB0ZGVzY19jcmVhdGVfcmVnIChmZWF0dXJlLCAiZm9wIiwgMzEsIDEsICJmbG9hdCIsIDMyLCAiaW50Iik7CisrCisrICBmZWF0dXJlID0gdGRlc2NfY3JlYXRlX2ZlYXR1cmUgKHJlc3VsdCwgIm9yZy5nbnUuZ2RiLmkzODYuc3NlIik7CisrICBmaWVsZF90eXBlID0gdGRlc2NfbmFtZWRfdHlwZSAoZmVhdHVyZSwgImllZWVfc2luZ2xlIik7CisrICB0ZGVzY19jcmVhdGVfdmVjdG9yIChmZWF0dXJlLCAidjRmIiwgZmllbGRfdHlwZSwgNCk7CisrCisrICBmaWVsZF90eXBlID0gdGRlc2NfbmFtZWRfdHlwZSAoZmVhdHVyZSwgImllZWVfZG91YmxlIik7CisrICB0ZGVzY19jcmVhdGVfdmVjdG9yIChmZWF0dXJlLCAidjJkIiwgZmllbGRfdHlwZSwgMik7CisrCisrICBmaWVsZF90eXBlID0gdGRlc2NfbmFtZWRfdHlwZSAoZmVhdHVyZSwgImludDgiKTsKKysgIHRkZXNjX2NyZWF0ZV92ZWN0b3IgKGZlYXR1cmUsICJ2MTZpOCIsIGZpZWxkX3R5cGUsIDE2KTsKKysKKysgIGZpZWxkX3R5cGUgPSB0ZGVzY19uYW1lZF90eXBlIChmZWF0dXJlLCAiaW50MTYiKTsKKysgIHRkZXNjX2NyZWF0ZV92ZWN0b3IgKGZlYXR1cmUsICJ2OGkxNiIsIGZpZWxkX3R5cGUsIDgpOworKworKyAgZmllbGRfdHlwZSA9IHRkZXNjX25hbWVkX3R5cGUgKGZlYXR1cmUsICJpbnQzMiIpOworKyAgdGRlc2NfY3JlYXRlX3ZlY3RvciAoZmVhdHVyZSwgInY0aTMyIiwgZmllbGRfdHlwZSwgNCk7CisrCisrICBmaWVsZF90eXBlID0gdGRlc2NfbmFtZWRfdHlwZSAoZmVhdHVyZSwgImludDY0Iik7CisrICB0ZGVzY19jcmVhdGVfdmVjdG9yIChmZWF0dXJlLCAidjJpNjQiLCBmaWVsZF90eXBlLCAyKTsKKysKKysgIHR5cGUgPSB0ZGVzY19jcmVhdGVfdW5pb24gKGZlYXR1cmUsICJ2ZWMxMjgiKTsKKysgIGZpZWxkX3R5cGUgPSB0ZGVzY19uYW1lZF90eXBlIChmZWF0dXJlLCAidjRmIik7CisrICB0ZGVzY19hZGRfZmllbGQgKHR5cGUsICJ2NF9mbG9hdCIsIGZpZWxkX3R5cGUpOworKyAgZmllbGRfdHlwZSA9IHRkZXNjX25hbWVkX3R5cGUgKGZlYXR1cmUsICJ2MmQiKTsKKysgIHRkZXNjX2FkZF9maWVsZCAodHlwZSwgInYyX2RvdWJsZSIsIGZpZWxkX3R5cGUpOworKyAgZmllbGRfdHlwZSA9IHRkZXNjX25hbWVkX3R5cGUgKGZlYXR1cmUsICJ2MTZpOCIpOworKyAgdGRlc2NfYWRkX2ZpZWxkICh0eXBlLCAidjE2X2ludDgiLCBmaWVsZF90eXBlKTsKKysgIGZpZWxkX3R5cGUgPSB0ZGVzY19uYW1lZF90eXBlIChmZWF0dXJlLCAidjhpMTYiKTsKKysgIHRkZXNjX2FkZF9maWVsZCAodHlwZSwgInY4X2ludDE2IiwgZmllbGRfdHlwZSk7CisrICBmaWVsZF90eXBlID0gdGRlc2NfbmFtZWRfdHlwZSAoZmVhdHVyZSwgInY0aTMyIik7CisrICB0ZGVzY19hZGRfZmllbGQgKHR5cGUsICJ2NF9pbnQzMiIsIGZpZWxkX3R5cGUpOworKyAgZmllbGRfdHlwZSA9IHRkZXNjX25hbWVkX3R5cGUgKGZlYXR1cmUsICJ2Mmk2NCIpOworKyAgdGRlc2NfYWRkX2ZpZWxkICh0eXBlLCAidjJfaW50NjQiLCBmaWVsZF90eXBlKTsKKysgIGZpZWxkX3R5cGUgPSB0ZGVzY19uYW1lZF90eXBlIChmZWF0dXJlLCAidWludDEyOCIpOworKyAgdGRlc2NfYWRkX2ZpZWxkICh0eXBlLCAidWludDEyOCIsIGZpZWxkX3R5cGUpOworKworKyAgZmllbGRfdHlwZSA9IHRkZXNjX2NyZWF0ZV9mbGFncyAoZmVhdHVyZSwgImkzODZfbXhjc3IiLCA0KTsKKysgIHRkZXNjX2FkZF9mbGFnIChmaWVsZF90eXBlLCAwLCAiSUUiKTsKKysgIHRkZXNjX2FkZF9mbGFnIChmaWVsZF90eXBlLCAxLCAiREUiKTsKKysgIHRkZXNjX2FkZF9mbGFnIChmaWVsZF90eXBlLCAyLCAiWkUiKTsKKysgIHRkZXNjX2FkZF9mbGFnIChmaWVsZF90eXBlLCAzLCAiT0UiKTsKKysgIHRkZXNjX2FkZF9mbGFnIChmaWVsZF90eXBlLCA0LCAiVUUiKTsKKysgIHRkZXNjX2FkZF9mbGFnIChmaWVsZF90eXBlLCA1LCAiUEUiKTsKKysgIHRkZXNjX2FkZF9mbGFnIChmaWVsZF90eXBlLCA2LCAiREFaIik7CisrICB0ZGVzY19hZGRfZmxhZyAoZmllbGRfdHlwZSwgNywgIklNIik7CisrICB0ZGVzY19hZGRfZmxhZyAoZmllbGRfdHlwZSwgOCwgIkRNIik7CisrICB0ZGVzY19hZGRfZmxhZyAoZmllbGRfdHlwZSwgOSwgIlpNIik7CisrICB0ZGVzY19hZGRfZmxhZyAoZmllbGRfdHlwZSwgMTAsICJPTSIpOworKyAgdGRlc2NfYWRkX2ZsYWcgKGZpZWxkX3R5cGUsIDExLCAiVU0iKTsKKysgIHRkZXNjX2FkZF9mbGFnIChmaWVsZF90eXBlLCAxMiwgIlBNIik7CisrICB0ZGVzY19hZGRfZmxhZyAoZmllbGRfdHlwZSwgMTUsICJGWiIpOworKworKyAgdGRlc2NfY3JlYXRlX3JlZyAoZmVhdHVyZSwgInhtbTAiLCAzMiwgMSwgTlVMTCwgMTI4LCAidmVjMTI4Iik7CisrICB0ZGVzY19jcmVhdGVfcmVnIChmZWF0dXJlLCAieG1tMSIsIDMzLCAxLCBOVUxMLCAxMjgsICJ2ZWMxMjgiKTsKKysgIHRkZXNjX2NyZWF0ZV9yZWcgKGZlYXR1cmUsICJ4bW0yIiwgMzQsIDEsIE5VTEwsIDEyOCwgInZlYzEyOCIpOworKyAgdGRlc2NfY3JlYXRlX3JlZyAoZmVhdHVyZSwgInhtbTMiLCAzNSwgMSwgTlVMTCwgMTI4LCAidmVjMTI4Iik7CisrICB0ZGVzY19jcmVhdGVfcmVnIChmZWF0dXJlLCAieG1tNCIsIDM2LCAxLCBOVUxMLCAxMjgsICJ2ZWMxMjgiKTsKKysgIHRkZXNjX2NyZWF0ZV9yZWcgKGZlYXR1cmUsICJ4bW01IiwgMzcsIDEsIE5VTEwsIDEyOCwgInZlYzEyOCIpOworKyAgdGRlc2NfY3JlYXRlX3JlZyAoZmVhdHVyZSwgInhtbTYiLCAzOCwgMSwgTlVMTCwgMTI4LCAidmVjMTI4Iik7CisrICB0ZGVzY19jcmVhdGVfcmVnIChmZWF0dXJlLCAieG1tNyIsIDM5LCAxLCBOVUxMLCAxMjgsICJ2ZWMxMjgiKTsKKysgIHRkZXNjX2NyZWF0ZV9yZWcgKGZlYXR1cmUsICJteGNzciIsIDQwLCAxLCAidmVjdG9yIiwgMzIsICJpMzg2X214Y3NyIik7CisrCisrICBmZWF0dXJlID0gdGRlc2NfY3JlYXRlX2ZlYXR1cmUgKHJlc3VsdCwgIm9yZy5nbnUuZ2RiLmkzODYubGludXgiKTsKKysgIHRkZXNjX2NyZWF0ZV9yZWcgKGZlYXR1cmUsICJvcmlnX2VheCIsIDQxLCAxLCBOVUxMLCAzMiwgImludCIpOworKworKyAgZmVhdHVyZSA9IHRkZXNjX2NyZWF0ZV9mZWF0dXJlIChyZXN1bHQsICJvcmcuZ251LmdkYi5pMzg2LmF2eCIpOworKyAgdGRlc2NfY3JlYXRlX3JlZyAoZmVhdHVyZSwgInltbTBoIiwgNDIsIDEsIE5VTEwsIDEyOCwgInVpbnQxMjgiKTsKKysgIHRkZXNjX2NyZWF0ZV9yZWcgKGZlYXR1cmUsICJ5bW0xaCIsIDQzLCAxLCBOVUxMLCAxMjgsICJ1aW50MTI4Iik7CisrICB0ZGVzY19jcmVhdGVfcmVnIChmZWF0dXJlLCAieW1tMmgiLCA0NCwgMSwgTlVMTCwgMTI4LCAidWludDEyOCIpOworKyAgdGRlc2NfY3JlYXRlX3JlZyAoZmVhdHVyZSwgInltbTNoIiwgNDUsIDEsIE5VTEwsIDEyOCwgInVpbnQxMjgiKTsKKysgIHRkZXNjX2NyZWF0ZV9yZWcgKGZlYXR1cmUsICJ5bW00aCIsIDQ2LCAxLCBOVUxMLCAxMjgsICJ1aW50MTI4Iik7CisrICB0ZGVzY19jcmVhdGVfcmVnIChmZWF0dXJlLCAieW1tNWgiLCA0NywgMSwgTlVMTCwgMTI4LCAidWludDEyOCIpOworKyAgdGRlc2NfY3JlYXRlX3JlZyAoZmVhdHVyZSwgInltbTZoIiwgNDgsIDEsIE5VTEwsIDEyOCwgInVpbnQxMjgiKTsKKysgIHRkZXNjX2NyZWF0ZV9yZWcgKGZlYXR1cmUsICJ5bW03aCIsIDQ5LCAxLCBOVUxMLCAxMjgsICJ1aW50MTI4Iik7CisrCisrICBmZWF0dXJlID0gdGRlc2NfY3JlYXRlX2ZlYXR1cmUgKHJlc3VsdCwgIm9yZy5nbnUuZ2RiLmkzODYubXB4Iik7CisrICB0eXBlID0gdGRlc2NfY3JlYXRlX3N0cnVjdCAoZmVhdHVyZSwgImJyMTI4Iik7CisrICBmaWVsZF90eXBlID0gdGRlc2NfbmFtZWRfdHlwZSAoZmVhdHVyZSwgInVpbnQ2NCIpOworKyAgdGRlc2NfYWRkX2ZpZWxkICh0eXBlLCAibGJvdW5kIiwgZmllbGRfdHlwZSk7CisrICBmaWVsZF90eXBlID0gdGRlc2NfbmFtZWRfdHlwZSAoZmVhdHVyZSwgInVpbnQ2NCIpOworKyAgdGRlc2NfYWRkX2ZpZWxkICh0eXBlLCAidWJvdW5kX3JhdyIsIGZpZWxkX3R5cGUpOworKworKyAgdHlwZSA9IHRkZXNjX2NyZWF0ZV9zdHJ1Y3QgKGZlYXR1cmUsICJfYm5kc3RhdHVzIik7CisrICB0ZGVzY19zZXRfc3RydWN0X3NpemUgKHR5cGUsIDgpOworKyAgdGRlc2NfYWRkX2JpdGZpZWxkICh0eXBlLCAiYmRlIiwgMiwgMzEpOworKyAgdGRlc2NfYWRkX2JpdGZpZWxkICh0eXBlLCAiZXJyb3IiLCAwLCAxKTsKKysKKysgIHR5cGUgPSB0ZGVzY19jcmVhdGVfdW5pb24gKGZlYXR1cmUsICJzdGF0dXMiKTsKKysgIGZpZWxkX3R5cGUgPSB0ZGVzY19uYW1lZF90eXBlIChmZWF0dXJlLCAiZGF0YV9wdHIiKTsKKysgIHRkZXNjX2FkZF9maWVsZCAodHlwZSwgInJhdyIsIGZpZWxkX3R5cGUpOworKyAgZmllbGRfdHlwZSA9IHRkZXNjX25hbWVkX3R5cGUgKGZlYXR1cmUsICJfYm5kc3RhdHVzIik7CisrICB0ZGVzY19hZGRfZmllbGQgKHR5cGUsICJzdGF0dXMiLCBmaWVsZF90eXBlKTsKKysKKysgIHR5cGUgPSB0ZGVzY19jcmVhdGVfc3RydWN0IChmZWF0dXJlLCAiX2JuZGNmZ3UiKTsKKysgIHRkZXNjX3NldF9zdHJ1Y3Rfc2l6ZSAodHlwZSwgOCk7CisrICB0ZGVzY19hZGRfYml0ZmllbGQgKHR5cGUsICJiYXNlIiwgMTIsIDMxKTsKKysgIHRkZXNjX2FkZF9iaXRmaWVsZCAodHlwZSwgInJlc2VydmVkIiwgMiwgMTEpOworKyAgdGRlc2NfYWRkX2JpdGZpZWxkICh0eXBlLCAicHJlc2VydmVkIiwgMSwgMSk7CisrICB0ZGVzY19hZGRfYml0ZmllbGQgKHR5cGUsICJlbmFibGVkIiwgMCwgMSk7CisrCisrICB0eXBlID0gdGRlc2NfY3JlYXRlX3VuaW9uIChmZWF0dXJlLCAiY2ZndSIpOworKyAgZmllbGRfdHlwZSA9IHRkZXNjX25hbWVkX3R5cGUgKGZlYXR1cmUsICJkYXRhX3B0ciIpOworKyAgdGRlc2NfYWRkX2ZpZWxkICh0eXBlLCAicmF3IiwgZmllbGRfdHlwZSk7CisrICBmaWVsZF90eXBlID0gdGRlc2NfbmFtZWRfdHlwZSAoZmVhdHVyZSwgIl9ibmRjZmd1Iik7CisrICB0ZGVzY19hZGRfZmllbGQgKHR5cGUsICJjb25maWciLCBmaWVsZF90eXBlKTsKKysKKysgIHRkZXNjX2NyZWF0ZV9yZWcgKGZlYXR1cmUsICJibmQwcmF3IiwgNTAsIDEsIE5VTEwsIDEyOCwgImJyMTI4Iik7CisrICB0ZGVzY19jcmVhdGVfcmVnIChmZWF0dXJlLCAiYm5kMXJhdyIsIDUxLCAxLCBOVUxMLCAxMjgsICJicjEyOCIpOworKyAgdGRlc2NfY3JlYXRlX3JlZyAoZmVhdHVyZSwgImJuZDJyYXciLCA1MiwgMSwgTlVMTCwgMTI4LCAiYnIxMjgiKTsKKysgIHRkZXNjX2NyZWF0ZV9yZWcgKGZlYXR1cmUsICJibmQzcmF3IiwgNTMsIDEsIE5VTEwsIDEyOCwgImJyMTI4Iik7CisrICB0ZGVzY19jcmVhdGVfcmVnIChmZWF0dXJlLCAiYm5kY2ZndSIsIDU0LCAxLCBOVUxMLCA2NCwgImNmZ3UiKTsKKysgIHRkZXNjX2NyZWF0ZV9yZWcgKGZlYXR1cmUsICJibmRzdGF0dXMiLCA1NSwgMSwgTlVMTCwgNjQsICJzdGF0dXMiKTsKKysKKysgIHRkZXNjX2kzODZfYXZ4X21weF9saW51eCA9IHJlc3VsdDsKKyt9CitkaWZmIC0tZ2l0IGEvZ2RiL2ZlYXR1cmVzL2kzODYvaTM4Ni1hdngtbXB4LWxpbnV4LnhtbCBiL2dkYi9mZWF0dXJlcy9pMzg2L2kzODYtYXZ4LW1weC1saW51eC54bWwKK25ldyBmaWxlIG1vZGUgMTAwNjQ0CitpbmRleCAwMDAwMDAwLi5jOWExYTYxCistLS0gL2Rldi9udWxsCisrKysgYi9nZGIvZmVhdHVyZXMvaTM4Ni9pMzg2LWF2eC1tcHgtbGludXgueG1sCitAQCAtMCwwICsxLDE5IEBACisrPD94bWwgdmVyc2lvbj0iMS4wIj8+CisrPCEtLSBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKysKKysgICAgIENvcHlpbmcgYW5kIGRpc3RyaWJ1dGlvbiBvZiB0aGlzIGZpbGUsIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb24sCisrICAgICBhcmUgcGVybWl0dGVkIGluIGFueSBtZWRpdW0gd2l0aG91dCByb3lhbHR5IHByb3ZpZGVkIHRoZSBjb3B5cmlnaHQKKysgICAgIG5vdGljZSBhbmQgdGhpcyBub3RpY2UgYXJlIHByZXNlcnZlZC4gIC0tPgorKworKzwhLS0gSTM4NiB3aXRoIEFWWCBhbmQgTVBYLSBJbmNsdWRlcyBMaW51eC1vbmx5IHNwZWNpYWwgInJlZ2lzdGVyIi4gIC0tPgorKworKzwhRE9DVFlQRSB0YXJnZXQgU1lTVEVNICJnZGItdGFyZ2V0LmR0ZCI+CisrPHRhcmdldD4KKysgIDxhcmNoaXRlY3R1cmU+aTM4NjwvYXJjaGl0ZWN0dXJlPgorKyAgPG9zYWJpPkdOVS9MaW51eDwvb3NhYmk+CisrICA8eGk6aW5jbHVkZSBocmVmPSIzMmJpdC1jb3JlLnhtbCIvPgorKyAgPHhpOmluY2x1ZGUgaHJlZj0iMzJiaXQtc3NlLnhtbCIvPgorKyAgPHhpOmluY2x1ZGUgaHJlZj0iMzJiaXQtbGludXgueG1sIi8+CisrICA8eGk6aW5jbHVkZSBocmVmPSIzMmJpdC1hdngueG1sIi8+CisrICA8eGk6aW5jbHVkZSBocmVmPSIzMmJpdC1tcHgueG1sIi8+CisrPC90YXJnZXQ+CitkaWZmIC0tZ2l0IGEvZ2RiL2ZlYXR1cmVzL2kzODYvaTM4Ni1hdngtbXB4LmMgYi9nZGIvZmVhdHVyZXMvaTM4Ni9pMzg2LWF2eC1tcHguYworbmV3IGZpbGUgbW9kZSAxMDA2NDQKK2luZGV4IDAwMDAwMDAuLmYxMDRlNGIKKy0tLSAvZGV2L251bGwKKysrKyBiL2dkYi9mZWF0dXJlcy9pMzg2L2kzODYtYXZ4LW1weC5jCitAQCAtMCwwICsxLDE4MiBAQAorKy8qIFRISVMgRklMRSBJUyBHRU5FUkFURUQuICAtKi0gYnVmZmVyLXJlYWQtb25seTogdCAtKi0gdmk6c2V0IHJvOgorKyAgT3JpZ2luYWw6IGkzODYtYXZ4LW1weC54bWwgKi8KKysKKysjaW5jbHVkZSAiZGVmcy5oIgorKyNpbmNsdWRlICJvc2FiaS5oIgorKyNpbmNsdWRlICJ0YXJnZXQtZGVzY3JpcHRpb25zLmgiCisrCisrc3RydWN0IHRhcmdldF9kZXNjICp0ZGVzY19pMzg2X2F2eF9tcHg7Cisrc3RhdGljIHZvaWQKKytpbml0aWFsaXplX3RkZXNjX2kzODZfYXZ4X21weCAodm9pZCkKKyt7CisrICBzdHJ1Y3QgdGFyZ2V0X2Rlc2MgKnJlc3VsdCA9IGFsbG9jYXRlX3RhcmdldF9kZXNjcmlwdGlvbiAoKTsKKysgIHN0cnVjdCB0ZGVzY19mZWF0dXJlICpmZWF0dXJlOworKyAgc3RydWN0IHRkZXNjX3R5cGUgKmZpZWxkX3R5cGU7CisrICBzdHJ1Y3QgdGRlc2NfdHlwZSAqdHlwZTsKKysKKysgIHNldF90ZGVzY19hcmNoaXRlY3R1cmUgKHJlc3VsdCwgYmZkX3NjYW5fYXJjaCAoImkzODYiKSk7CisrCisrICBmZWF0dXJlID0gdGRlc2NfY3JlYXRlX2ZlYXR1cmUgKHJlc3VsdCwgIm9yZy5nbnUuZ2RiLmkzODYuY29yZSIpOworKyAgZmllbGRfdHlwZSA9IHRkZXNjX2NyZWF0ZV9mbGFncyAoZmVhdHVyZSwgImkzODZfZWZsYWdzIiwgNCk7CisrICB0ZGVzY19hZGRfZmxhZyAoZmllbGRfdHlwZSwgMCwgIkNGIik7CisrICB0ZGVzY19hZGRfZmxhZyAoZmllbGRfdHlwZSwgMSwgIiIpOworKyAgdGRlc2NfYWRkX2ZsYWcgKGZpZWxkX3R5cGUsIDIsICJQRiIpOworKyAgdGRlc2NfYWRkX2ZsYWcgKGZpZWxkX3R5cGUsIDQsICJBRiIpOworKyAgdGRlc2NfYWRkX2ZsYWcgKGZpZWxkX3R5cGUsIDYsICJaRiIpOworKyAgdGRlc2NfYWRkX2ZsYWcgKGZpZWxkX3R5cGUsIDcsICJTRiIpOworKyAgdGRlc2NfYWRkX2ZsYWcgKGZpZWxkX3R5cGUsIDgsICJURiIpOworKyAgdGRlc2NfYWRkX2ZsYWcgKGZpZWxkX3R5cGUsIDksICJJRiIpOworKyAgdGRlc2NfYWRkX2ZsYWcgKGZpZWxkX3R5cGUsIDEwLCAiREYiKTsKKysgIHRkZXNjX2FkZF9mbGFnIChmaWVsZF90eXBlLCAxMSwgIk9GIik7CisrICB0ZGVzY19hZGRfZmxhZyAoZmllbGRfdHlwZSwgMTQsICJOVCIpOworKyAgdGRlc2NfYWRkX2ZsYWcgKGZpZWxkX3R5cGUsIDE2LCAiUkYiKTsKKysgIHRkZXNjX2FkZF9mbGFnIChmaWVsZF90eXBlLCAxNywgIlZNIik7CisrICB0ZGVzY19hZGRfZmxhZyAoZmllbGRfdHlwZSwgMTgsICJBQyIpOworKyAgdGRlc2NfYWRkX2ZsYWcgKGZpZWxkX3R5cGUsIDE5LCAiVklGIik7CisrICB0ZGVzY19hZGRfZmxhZyAoZmllbGRfdHlwZSwgMjAsICJWSVAiKTsKKysgIHRkZXNjX2FkZF9mbGFnIChmaWVsZF90eXBlLCAyMSwgIklEIik7CisrCisrICB0ZGVzY19jcmVhdGVfcmVnIChmZWF0dXJlLCAiZWF4IiwgMCwgMSwgTlVMTCwgMzIsICJpbnQzMiIpOworKyAgdGRlc2NfY3JlYXRlX3JlZyAoZmVhdHVyZSwgImVjeCIsIDEsIDEsIE5VTEwsIDMyLCAiaW50MzIiKTsKKysgIHRkZXNjX2NyZWF0ZV9yZWcgKGZlYXR1cmUsICJlZHgiLCAyLCAxLCBOVUxMLCAzMiwgImludDMyIik7CisrICB0ZGVzY19jcmVhdGVfcmVnIChmZWF0dXJlLCAiZWJ4IiwgMywgMSwgTlVMTCwgMzIsICJpbnQzMiIpOworKyAgdGRlc2NfY3JlYXRlX3JlZyAoZmVhdHVyZSwgImVzcCIsIDQsIDEsIE5VTEwsIDMyLCAiZGF0YV9wdHIiKTsKKysgIHRkZXNjX2NyZWF0ZV9yZWcgKGZlYXR1cmUsICJlYnAiLCA1LCAxLCBOVUxMLCAzMiwgImRhdGFfcHRyIik7CisrICB0ZGVzY19jcmVhdGVfcmVnIChmZWF0dXJlLCAiZXNpIiwgNiwgMSwgTlVMTCwgMzIsICJpbnQzMiIpOworKyAgdGRlc2NfY3JlYXRlX3JlZyAoZmVhdHVyZSwgImVkaSIsIDcsIDEsIE5VTEwsIDMyLCAiaW50MzIiKTsKKysgIHRkZXNjX2NyZWF0ZV9yZWcgKGZlYXR1cmUsICJlaXAiLCA4LCAxLCBOVUxMLCAzMiwgImNvZGVfcHRyIik7CisrICB0ZGVzY19jcmVhdGVfcmVnIChmZWF0dXJlLCAiZWZsYWdzIiwgOSwgMSwgTlVMTCwgMzIsICJpMzg2X2VmbGFncyIpOworKyAgdGRlc2NfY3JlYXRlX3JlZyAoZmVhdHVyZSwgImNzIiwgMTAsIDEsIE5VTEwsIDMyLCAiaW50MzIiKTsKKysgIHRkZXNjX2NyZWF0ZV9yZWcgKGZlYXR1cmUsICJzcyIsIDExLCAxLCBOVUxMLCAzMiwgImludDMyIik7CisrICB0ZGVzY19jcmVhdGVfcmVnIChmZWF0dXJlLCAiZHMiLCAxMiwgMSwgTlVMTCwgMzIsICJpbnQzMiIpOworKyAgdGRlc2NfY3JlYXRlX3JlZyAoZmVhdHVyZSwgImVzIiwgMTMsIDEsIE5VTEwsIDMyLCAiaW50MzIiKTsKKysgIHRkZXNjX2NyZWF0ZV9yZWcgKGZlYXR1cmUsICJmcyIsIDE0LCAxLCBOVUxMLCAzMiwgImludDMyIik7CisrICB0ZGVzY19jcmVhdGVfcmVnIChmZWF0dXJlLCAiZ3MiLCAxNSwgMSwgTlVMTCwgMzIsICJpbnQzMiIpOworKyAgdGRlc2NfY3JlYXRlX3JlZyAoZmVhdHVyZSwgInN0MCIsIDE2LCAxLCBOVUxMLCA4MCwgImkzODdfZXh0Iik7CisrICB0ZGVzY19jcmVhdGVfcmVnIChmZWF0dXJlLCAic3QxIiwgMTcsIDEsIE5VTEwsIDgwLCAiaTM4N19leHQiKTsKKysgIHRkZXNjX2NyZWF0ZV9yZWcgKGZlYXR1cmUsICJzdDIiLCAxOCwgMSwgTlVMTCwgODAsICJpMzg3X2V4dCIpOworKyAgdGRlc2NfY3JlYXRlX3JlZyAoZmVhdHVyZSwgInN0MyIsIDE5LCAxLCBOVUxMLCA4MCwgImkzODdfZXh0Iik7CisrICB0ZGVzY19jcmVhdGVfcmVnIChmZWF0dXJlLCAic3Q0IiwgMjAsIDEsIE5VTEwsIDgwLCAiaTM4N19leHQiKTsKKysgIHRkZXNjX2NyZWF0ZV9yZWcgKGZlYXR1cmUsICJzdDUiLCAyMSwgMSwgTlVMTCwgODAsICJpMzg3X2V4dCIpOworKyAgdGRlc2NfY3JlYXRlX3JlZyAoZmVhdHVyZSwgInN0NiIsIDIyLCAxLCBOVUxMLCA4MCwgImkzODdfZXh0Iik7CisrICB0ZGVzY19jcmVhdGVfcmVnIChmZWF0dXJlLCAic3Q3IiwgMjMsIDEsIE5VTEwsIDgwLCAiaTM4N19leHQiKTsKKysgIHRkZXNjX2NyZWF0ZV9yZWcgKGZlYXR1cmUsICJmY3RybCIsIDI0LCAxLCAiZmxvYXQiLCAzMiwgImludCIpOworKyAgdGRlc2NfY3JlYXRlX3JlZyAoZmVhdHVyZSwgImZzdGF0IiwgMjUsIDEsICJmbG9hdCIsIDMyLCAiaW50Iik7CisrICB0ZGVzY19jcmVhdGVfcmVnIChmZWF0dXJlLCAiZnRhZyIsIDI2LCAxLCAiZmxvYXQiLCAzMiwgImludCIpOworKyAgdGRlc2NfY3JlYXRlX3JlZyAoZmVhdHVyZSwgImZpc2VnIiwgMjcsIDEsICJmbG9hdCIsIDMyLCAiaW50Iik7CisrICB0ZGVzY19jcmVhdGVfcmVnIChmZWF0dXJlLCAiZmlvZmYiLCAyOCwgMSwgImZsb2F0IiwgMzIsICJpbnQiKTsKKysgIHRkZXNjX2NyZWF0ZV9yZWcgKGZlYXR1cmUsICJmb3NlZyIsIDI5LCAxLCAiZmxvYXQiLCAzMiwgImludCIpOworKyAgdGRlc2NfY3JlYXRlX3JlZyAoZmVhdHVyZSwgImZvb2ZmIiwgMzAsIDEsICJmbG9hdCIsIDMyLCAiaW50Iik7CisrICB0ZGVzY19jcmVhdGVfcmVnIChmZWF0dXJlLCAiZm9wIiwgMzEsIDEsICJmbG9hdCIsIDMyLCAiaW50Iik7CisrCisrICBmZWF0dXJlID0gdGRlc2NfY3JlYXRlX2ZlYXR1cmUgKHJlc3VsdCwgIm9yZy5nbnUuZ2RiLmkzODYuc3NlIik7CisrICBmaWVsZF90eXBlID0gdGRlc2NfbmFtZWRfdHlwZSAoZmVhdHVyZSwgImllZWVfc2luZ2xlIik7CisrICB0ZGVzY19jcmVhdGVfdmVjdG9yIChmZWF0dXJlLCAidjRmIiwgZmllbGRfdHlwZSwgNCk7CisrCisrICBmaWVsZF90eXBlID0gdGRlc2NfbmFtZWRfdHlwZSAoZmVhdHVyZSwgImllZWVfZG91YmxlIik7CisrICB0ZGVzY19jcmVhdGVfdmVjdG9yIChmZWF0dXJlLCAidjJkIiwgZmllbGRfdHlwZSwgMik7CisrCisrICBmaWVsZF90eXBlID0gdGRlc2NfbmFtZWRfdHlwZSAoZmVhdHVyZSwgImludDgiKTsKKysgIHRkZXNjX2NyZWF0ZV92ZWN0b3IgKGZlYXR1cmUsICJ2MTZpOCIsIGZpZWxkX3R5cGUsIDE2KTsKKysKKysgIGZpZWxkX3R5cGUgPSB0ZGVzY19uYW1lZF90eXBlIChmZWF0dXJlLCAiaW50MTYiKTsKKysgIHRkZXNjX2NyZWF0ZV92ZWN0b3IgKGZlYXR1cmUsICJ2OGkxNiIsIGZpZWxkX3R5cGUsIDgpOworKworKyAgZmllbGRfdHlwZSA9IHRkZXNjX25hbWVkX3R5cGUgKGZlYXR1cmUsICJpbnQzMiIpOworKyAgdGRlc2NfY3JlYXRlX3ZlY3RvciAoZmVhdHVyZSwgInY0aTMyIiwgZmllbGRfdHlwZSwgNCk7CisrCisrICBmaWVsZF90eXBlID0gdGRlc2NfbmFtZWRfdHlwZSAoZmVhdHVyZSwgImludDY0Iik7CisrICB0ZGVzY19jcmVhdGVfdmVjdG9yIChmZWF0dXJlLCAidjJpNjQiLCBmaWVsZF90eXBlLCAyKTsKKysKKysgIHR5cGUgPSB0ZGVzY19jcmVhdGVfdW5pb24gKGZlYXR1cmUsICJ2ZWMxMjgiKTsKKysgIGZpZWxkX3R5cGUgPSB0ZGVzY19uYW1lZF90eXBlIChmZWF0dXJlLCAidjRmIik7CisrICB0ZGVzY19hZGRfZmllbGQgKHR5cGUsICJ2NF9mbG9hdCIsIGZpZWxkX3R5cGUpOworKyAgZmllbGRfdHlwZSA9IHRkZXNjX25hbWVkX3R5cGUgKGZlYXR1cmUsICJ2MmQiKTsKKysgIHRkZXNjX2FkZF9maWVsZCAodHlwZSwgInYyX2RvdWJsZSIsIGZpZWxkX3R5cGUpOworKyAgZmllbGRfdHlwZSA9IHRkZXNjX25hbWVkX3R5cGUgKGZlYXR1cmUsICJ2MTZpOCIpOworKyAgdGRlc2NfYWRkX2ZpZWxkICh0eXBlLCAidjE2X2ludDgiLCBmaWVsZF90eXBlKTsKKysgIGZpZWxkX3R5cGUgPSB0ZGVzY19uYW1lZF90eXBlIChmZWF0dXJlLCAidjhpMTYiKTsKKysgIHRkZXNjX2FkZF9maWVsZCAodHlwZSwgInY4X2ludDE2IiwgZmllbGRfdHlwZSk7CisrICBmaWVsZF90eXBlID0gdGRlc2NfbmFtZWRfdHlwZSAoZmVhdHVyZSwgInY0aTMyIik7CisrICB0ZGVzY19hZGRfZmllbGQgKHR5cGUsICJ2NF9pbnQzMiIsIGZpZWxkX3R5cGUpOworKyAgZmllbGRfdHlwZSA9IHRkZXNjX25hbWVkX3R5cGUgKGZlYXR1cmUsICJ2Mmk2NCIpOworKyAgdGRlc2NfYWRkX2ZpZWxkICh0eXBlLCAidjJfaW50NjQiLCBmaWVsZF90eXBlKTsKKysgIGZpZWxkX3R5cGUgPSB0ZGVzY19uYW1lZF90eXBlIChmZWF0dXJlLCAidWludDEyOCIpOworKyAgdGRlc2NfYWRkX2ZpZWxkICh0eXBlLCAidWludDEyOCIsIGZpZWxkX3R5cGUpOworKworKyAgZmllbGRfdHlwZSA9IHRkZXNjX2NyZWF0ZV9mbGFncyAoZmVhdHVyZSwgImkzODZfbXhjc3IiLCA0KTsKKysgIHRkZXNjX2FkZF9mbGFnIChmaWVsZF90eXBlLCAwLCAiSUUiKTsKKysgIHRkZXNjX2FkZF9mbGFnIChmaWVsZF90eXBlLCAxLCAiREUiKTsKKysgIHRkZXNjX2FkZF9mbGFnIChmaWVsZF90eXBlLCAyLCAiWkUiKTsKKysgIHRkZXNjX2FkZF9mbGFnIChmaWVsZF90eXBlLCAzLCAiT0UiKTsKKysgIHRkZXNjX2FkZF9mbGFnIChmaWVsZF90eXBlLCA0LCAiVUUiKTsKKysgIHRkZXNjX2FkZF9mbGFnIChmaWVsZF90eXBlLCA1LCAiUEUiKTsKKysgIHRkZXNjX2FkZF9mbGFnIChmaWVsZF90eXBlLCA2LCAiREFaIik7CisrICB0ZGVzY19hZGRfZmxhZyAoZmllbGRfdHlwZSwgNywgIklNIik7CisrICB0ZGVzY19hZGRfZmxhZyAoZmllbGRfdHlwZSwgOCwgIkRNIik7CisrICB0ZGVzY19hZGRfZmxhZyAoZmllbGRfdHlwZSwgOSwgIlpNIik7CisrICB0ZGVzY19hZGRfZmxhZyAoZmllbGRfdHlwZSwgMTAsICJPTSIpOworKyAgdGRlc2NfYWRkX2ZsYWcgKGZpZWxkX3R5cGUsIDExLCAiVU0iKTsKKysgIHRkZXNjX2FkZF9mbGFnIChmaWVsZF90eXBlLCAxMiwgIlBNIik7CisrICB0ZGVzY19hZGRfZmxhZyAoZmllbGRfdHlwZSwgMTUsICJGWiIpOworKworKyAgdGRlc2NfY3JlYXRlX3JlZyAoZmVhdHVyZSwgInhtbTAiLCAzMiwgMSwgTlVMTCwgMTI4LCAidmVjMTI4Iik7CisrICB0ZGVzY19jcmVhdGVfcmVnIChmZWF0dXJlLCAieG1tMSIsIDMzLCAxLCBOVUxMLCAxMjgsICJ2ZWMxMjgiKTsKKysgIHRkZXNjX2NyZWF0ZV9yZWcgKGZlYXR1cmUsICJ4bW0yIiwgMzQsIDEsIE5VTEwsIDEyOCwgInZlYzEyOCIpOworKyAgdGRlc2NfY3JlYXRlX3JlZyAoZmVhdHVyZSwgInhtbTMiLCAzNSwgMSwgTlVMTCwgMTI4LCAidmVjMTI4Iik7CisrICB0ZGVzY19jcmVhdGVfcmVnIChmZWF0dXJlLCAieG1tNCIsIDM2LCAxLCBOVUxMLCAxMjgsICJ2ZWMxMjgiKTsKKysgIHRkZXNjX2NyZWF0ZV9yZWcgKGZlYXR1cmUsICJ4bW01IiwgMzcsIDEsIE5VTEwsIDEyOCwgInZlYzEyOCIpOworKyAgdGRlc2NfY3JlYXRlX3JlZyAoZmVhdHVyZSwgInhtbTYiLCAzOCwgMSwgTlVMTCwgMTI4LCAidmVjMTI4Iik7CisrICB0ZGVzY19jcmVhdGVfcmVnIChmZWF0dXJlLCAieG1tNyIsIDM5LCAxLCBOVUxMLCAxMjgsICJ2ZWMxMjgiKTsKKysgIHRkZXNjX2NyZWF0ZV9yZWcgKGZlYXR1cmUsICJteGNzciIsIDQwLCAxLCAidmVjdG9yIiwgMzIsICJpMzg2X214Y3NyIik7CisrCisrICBmZWF0dXJlID0gdGRlc2NfY3JlYXRlX2ZlYXR1cmUgKHJlc3VsdCwgIm9yZy5nbnUuZ2RiLmkzODYuYXZ4Iik7CisrICB0ZGVzY19jcmVhdGVfcmVnIChmZWF0dXJlLCAieW1tMGgiLCA0MSwgMSwgTlVMTCwgMTI4LCAidWludDEyOCIpOworKyAgdGRlc2NfY3JlYXRlX3JlZyAoZmVhdHVyZSwgInltbTFoIiwgNDIsIDEsIE5VTEwsIDEyOCwgInVpbnQxMjgiKTsKKysgIHRkZXNjX2NyZWF0ZV9yZWcgKGZlYXR1cmUsICJ5bW0yaCIsIDQzLCAxLCBOVUxMLCAxMjgsICJ1aW50MTI4Iik7CisrICB0ZGVzY19jcmVhdGVfcmVnIChmZWF0dXJlLCAieW1tM2giLCA0NCwgMSwgTlVMTCwgMTI4LCAidWludDEyOCIpOworKyAgdGRlc2NfY3JlYXRlX3JlZyAoZmVhdHVyZSwgInltbTRoIiwgNDUsIDEsIE5VTEwsIDEyOCwgInVpbnQxMjgiKTsKKysgIHRkZXNjX2NyZWF0ZV9yZWcgKGZlYXR1cmUsICJ5bW01aCIsIDQ2LCAxLCBOVUxMLCAxMjgsICJ1aW50MTI4Iik7CisrICB0ZGVzY19jcmVhdGVfcmVnIChmZWF0dXJlLCAieW1tNmgiLCA0NywgMSwgTlVMTCwgMTI4LCAidWludDEyOCIpOworKyAgdGRlc2NfY3JlYXRlX3JlZyAoZmVhdHVyZSwgInltbTdoIiwgNDgsIDEsIE5VTEwsIDEyOCwgInVpbnQxMjgiKTsKKysKKysgIGZlYXR1cmUgPSB0ZGVzY19jcmVhdGVfZmVhdHVyZSAocmVzdWx0LCAib3JnLmdudS5nZGIuaTM4Ni5tcHgiKTsKKysgIHR5cGUgPSB0ZGVzY19jcmVhdGVfc3RydWN0IChmZWF0dXJlLCAiYnIxMjgiKTsKKysgIGZpZWxkX3R5cGUgPSB0ZGVzY19uYW1lZF90eXBlIChmZWF0dXJlLCAidWludDY0Iik7CisrICB0ZGVzY19hZGRfZmllbGQgKHR5cGUsICJsYm91bmQiLCBmaWVsZF90eXBlKTsKKysgIGZpZWxkX3R5cGUgPSB0ZGVzY19uYW1lZF90eXBlIChmZWF0dXJlLCAidWludDY0Iik7CisrICB0ZGVzY19hZGRfZmllbGQgKHR5cGUsICJ1Ym91bmRfcmF3IiwgZmllbGRfdHlwZSk7CisrCisrICB0eXBlID0gdGRlc2NfY3JlYXRlX3N0cnVjdCAoZmVhdHVyZSwgIl9ibmRzdGF0dXMiKTsKKysgIHRkZXNjX3NldF9zdHJ1Y3Rfc2l6ZSAodHlwZSwgOCk7CisrICB0ZGVzY19hZGRfYml0ZmllbGQgKHR5cGUsICJiZGUiLCAyLCAzMSk7CisrICB0ZGVzY19hZGRfYml0ZmllbGQgKHR5cGUsICJlcnJvciIsIDAsIDEpOworKworKyAgdHlwZSA9IHRkZXNjX2NyZWF0ZV91bmlvbiAoZmVhdHVyZSwgInN0YXR1cyIpOworKyAgZmllbGRfdHlwZSA9IHRkZXNjX25hbWVkX3R5cGUgKGZlYXR1cmUsICJkYXRhX3B0ciIpOworKyAgdGRlc2NfYWRkX2ZpZWxkICh0eXBlLCAicmF3IiwgZmllbGRfdHlwZSk7CisrICBmaWVsZF90eXBlID0gdGRlc2NfbmFtZWRfdHlwZSAoZmVhdHVyZSwgIl9ibmRzdGF0dXMiKTsKKysgIHRkZXNjX2FkZF9maWVsZCAodHlwZSwgInN0YXR1cyIsIGZpZWxkX3R5cGUpOworKworKyAgdHlwZSA9IHRkZXNjX2NyZWF0ZV9zdHJ1Y3QgKGZlYXR1cmUsICJfYm5kY2ZndSIpOworKyAgdGRlc2Nfc2V0X3N0cnVjdF9zaXplICh0eXBlLCA4KTsKKysgIHRkZXNjX2FkZF9iaXRmaWVsZCAodHlwZSwgImJhc2UiLCAxMiwgMzEpOworKyAgdGRlc2NfYWRkX2JpdGZpZWxkICh0eXBlLCAicmVzZXJ2ZWQiLCAyLCAxMSk7CisrICB0ZGVzY19hZGRfYml0ZmllbGQgKHR5cGUsICJwcmVzZXJ2ZWQiLCAxLCAxKTsKKysgIHRkZXNjX2FkZF9iaXRmaWVsZCAodHlwZSwgImVuYWJsZWQiLCAwLCAxKTsKKysKKysgIHR5cGUgPSB0ZGVzY19jcmVhdGVfdW5pb24gKGZlYXR1cmUsICJjZmd1Iik7CisrICBmaWVsZF90eXBlID0gdGRlc2NfbmFtZWRfdHlwZSAoZmVhdHVyZSwgImRhdGFfcHRyIik7CisrICB0ZGVzY19hZGRfZmllbGQgKHR5cGUsICJyYXciLCBmaWVsZF90eXBlKTsKKysgIGZpZWxkX3R5cGUgPSB0ZGVzY19uYW1lZF90eXBlIChmZWF0dXJlLCAiX2JuZGNmZ3UiKTsKKysgIHRkZXNjX2FkZF9maWVsZCAodHlwZSwgImNvbmZpZyIsIGZpZWxkX3R5cGUpOworKworKyAgdGRlc2NfY3JlYXRlX3JlZyAoZmVhdHVyZSwgImJuZDByYXciLCA0OSwgMSwgTlVMTCwgMTI4LCAiYnIxMjgiKTsKKysgIHRkZXNjX2NyZWF0ZV9yZWcgKGZlYXR1cmUsICJibmQxcmF3IiwgNTAsIDEsIE5VTEwsIDEyOCwgImJyMTI4Iik7CisrICB0ZGVzY19jcmVhdGVfcmVnIChmZWF0dXJlLCAiYm5kMnJhdyIsIDUxLCAxLCBOVUxMLCAxMjgsICJicjEyOCIpOworKyAgdGRlc2NfY3JlYXRlX3JlZyAoZmVhdHVyZSwgImJuZDNyYXciLCA1MiwgMSwgTlVMTCwgMTI4LCAiYnIxMjgiKTsKKysgIHRkZXNjX2NyZWF0ZV9yZWcgKGZlYXR1cmUsICJibmRjZmd1IiwgNTMsIDEsIE5VTEwsIDY0LCAiY2ZndSIpOworKyAgdGRlc2NfY3JlYXRlX3JlZyAoZmVhdHVyZSwgImJuZHN0YXR1cyIsIDU0LCAxLCBOVUxMLCA2NCwgInN0YXR1cyIpOworKworKyAgdGRlc2NfaTM4Nl9hdnhfbXB4ID0gcmVzdWx0OworK30KK2RpZmYgLS1naXQgYS9nZGIvZmVhdHVyZXMvaTM4Ni9pMzg2LWF2eC1tcHgueG1sIGIvZ2RiL2ZlYXR1cmVzL2kzODYvaTM4Ni1hdngtbXB4LnhtbAorbmV3IGZpbGUgbW9kZSAxMDA2NDQKK2luZGV4IDAwMDAwMDAuLmFiOTczNjcKKy0tLSAvZGV2L251bGwKKysrKyBiL2dkYi9mZWF0dXJlcy9pMzg2L2kzODYtYXZ4LW1weC54bWwKK0BAIC0wLDAgKzEsMTcgQEAKKys8P3htbCB2ZXJzaW9uPSIxLjAiPz4KKys8IS0tIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorKworKyAgICAgQ29weWluZyBhbmQgZGlzdHJpYnV0aW9uIG9mIHRoaXMgZmlsZSwgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbiwKKysgICAgIGFyZSBwZXJtaXR0ZWQgaW4gYW55IG1lZGl1bSB3aXRob3V0IHJveWFsdHkgcHJvdmlkZWQgdGhlIGNvcHlyaWdodAorKyAgICAgbm90aWNlIGFuZCB0aGlzIG5vdGljZSBhcmUgcHJlc2VydmVkLiAgLS0+CisrCisrPCEtLSBJMzg2IHdpdGggQVZYIGFuZCBNUFggLS0+CisrCisrPCFET0NUWVBFIHRhcmdldCBTWVNURU0gImdkYi10YXJnZXQuZHRkIj4KKys8dGFyZ2V0PgorKyAgPGFyY2hpdGVjdHVyZT5pMzg2PC9hcmNoaXRlY3R1cmU+CisrICA8eGk6aW5jbHVkZSBocmVmPSIzMmJpdC1jb3JlLnhtbCIvPgorKyAgPHhpOmluY2x1ZGUgaHJlZj0iMzJiaXQtc3NlLnhtbCIvPgorKyAgPHhpOmluY2x1ZGUgaHJlZj0iMzJiaXQtYXZ4LnhtbCIvPgorKyAgPHhpOmluY2x1ZGUgaHJlZj0iMzJiaXQtbXB4LnhtbCIvPgorKzwvdGFyZ2V0PgorZGlmZiAtLWdpdCBhL2dkYi9mZWF0dXJlcy9pMzg2L2kzODYtbXB4LWxpbnV4LmMgYi9nZGIvZmVhdHVyZXMvaTM4Ni9pMzg2LW1weC1saW51eC5jCitpbmRleCBkYmY4Nzg5Li5jNmJhZmVhIDEwMDY0NAorLS0tIGEvZ2RiL2ZlYXR1cmVzL2kzODYvaTM4Ni1tcHgtbGludXguYworKysrIGIvZ2RiL2ZlYXR1cmVzL2kzODYvaTM4Ni1tcHgtbGludXguYworQEAgLTEzNSwxNiArMTM1LDYgQEAgaW5pdGlhbGl6ZV90ZGVzY19pMzg2X21weF9saW51eCAodm9pZCkKKyAgIGZlYXR1cmUgPSB0ZGVzY19jcmVhdGVfZmVhdHVyZSAocmVzdWx0LCAib3JnLmdudS5nZGIuaTM4Ni5saW51eCIpOworICAgdGRlc2NfY3JlYXRlX3JlZyAoZmVhdHVyZSwgIm9yaWdfZWF4IiwgNDEsIDEsIE5VTEwsIDMyLCAiaW50Iik7CisKKy0gIGZlYXR1cmUgPSB0ZGVzY19jcmVhdGVfZmVhdHVyZSAocmVzdWx0LCAib3JnLmdudS5nZGIuaTM4Ni5hdngiKTsKKy0gIHRkZXNjX2NyZWF0ZV9yZWcgKGZlYXR1cmUsICJ5bW0waCIsIDQyLCAxLCBOVUxMLCAxMjgsICJ1aW50MTI4Iik7CistICB0ZGVzY19jcmVhdGVfcmVnIChmZWF0dXJlLCAieW1tMWgiLCA0MywgMSwgTlVMTCwgMTI4LCAidWludDEyOCIpOworLSAgdGRlc2NfY3JlYXRlX3JlZyAoZmVhdHVyZSwgInltbTJoIiwgNDQsIDEsIE5VTEwsIDEyOCwgInVpbnQxMjgiKTsKKy0gIHRkZXNjX2NyZWF0ZV9yZWcgKGZlYXR1cmUsICJ5bW0zaCIsIDQ1LCAxLCBOVUxMLCAxMjgsICJ1aW50MTI4Iik7CistICB0ZGVzY19jcmVhdGVfcmVnIChmZWF0dXJlLCAieW1tNGgiLCA0NiwgMSwgTlVMTCwgMTI4LCAidWludDEyOCIpOworLSAgdGRlc2NfY3JlYXRlX3JlZyAoZmVhdHVyZSwgInltbTVoIiwgNDcsIDEsIE5VTEwsIDEyOCwgInVpbnQxMjgiKTsKKy0gIHRkZXNjX2NyZWF0ZV9yZWcgKGZlYXR1cmUsICJ5bW02aCIsIDQ4LCAxLCBOVUxMLCAxMjgsICJ1aW50MTI4Iik7CistICB0ZGVzY19jcmVhdGVfcmVnIChmZWF0dXJlLCAieW1tN2giLCA0OSwgMSwgTlVMTCwgMTI4LCAidWludDEyOCIpOworLQorICAgZmVhdHVyZSA9IHRkZXNjX2NyZWF0ZV9mZWF0dXJlIChyZXN1bHQsICJvcmcuZ251LmdkYi5pMzg2Lm1weCIpOworICAgdHlwZSA9IHRkZXNjX2NyZWF0ZV9zdHJ1Y3QgKGZlYXR1cmUsICJicjEyOCIpOworICAgZmllbGRfdHlwZSA9IHRkZXNjX25hbWVkX3R5cGUgKGZlYXR1cmUsICJ1aW50NjQiKTsKK0BAIC0xNzYsMTIgKzE2NiwxMiBAQCBpbml0aWFsaXplX3RkZXNjX2kzODZfbXB4X2xpbnV4ICh2b2lkKQorICAgZmllbGRfdHlwZSA9IHRkZXNjX25hbWVkX3R5cGUgKGZlYXR1cmUsICJfYm5kY2ZndSIpOworICAgdGRlc2NfYWRkX2ZpZWxkICh0eXBlLCAiY29uZmlnIiwgZmllbGRfdHlwZSk7CisKKy0gIHRkZXNjX2NyZWF0ZV9yZWcgKGZlYXR1cmUsICJibmQwcmF3IiwgNTAsIDEsIE5VTEwsIDEyOCwgImJyMTI4Iik7CistICB0ZGVzY19jcmVhdGVfcmVnIChmZWF0dXJlLCAiYm5kMXJhdyIsIDUxLCAxLCBOVUxMLCAxMjgsICJicjEyOCIpOworLSAgdGRlc2NfY3JlYXRlX3JlZyAoZmVhdHVyZSwgImJuZDJyYXciLCA1MiwgMSwgTlVMTCwgMTI4LCAiYnIxMjgiKTsKKy0gIHRkZXNjX2NyZWF0ZV9yZWcgKGZlYXR1cmUsICJibmQzcmF3IiwgNTMsIDEsIE5VTEwsIDEyOCwgImJyMTI4Iik7CistICB0ZGVzY19jcmVhdGVfcmVnIChmZWF0dXJlLCAiYm5kY2ZndSIsIDU0LCAxLCBOVUxMLCA2NCwgImNmZ3UiKTsKKy0gIHRkZXNjX2NyZWF0ZV9yZWcgKGZlYXR1cmUsICJibmRzdGF0dXMiLCA1NSwgMSwgTlVMTCwgNjQsICJzdGF0dXMiKTsKKysgIHRkZXNjX2NyZWF0ZV9yZWcgKGZlYXR1cmUsICJibmQwcmF3IiwgNDIsIDEsIE5VTEwsIDEyOCwgImJyMTI4Iik7CisrICB0ZGVzY19jcmVhdGVfcmVnIChmZWF0dXJlLCAiYm5kMXJhdyIsIDQzLCAxLCBOVUxMLCAxMjgsICJicjEyOCIpOworKyAgdGRlc2NfY3JlYXRlX3JlZyAoZmVhdHVyZSwgImJuZDJyYXciLCA0NCwgMSwgTlVMTCwgMTI4LCAiYnIxMjgiKTsKKysgIHRkZXNjX2NyZWF0ZV9yZWcgKGZlYXR1cmUsICJibmQzcmF3IiwgNDUsIDEsIE5VTEwsIDEyOCwgImJyMTI4Iik7CisrICB0ZGVzY19jcmVhdGVfcmVnIChmZWF0dXJlLCAiYm5kY2ZndSIsIDQ2LCAxLCBOVUxMLCA2NCwgImNmZ3UiKTsKKysgIHRkZXNjX2NyZWF0ZV9yZWcgKGZlYXR1cmUsICJibmRzdGF0dXMiLCA0NywgMSwgTlVMTCwgNjQsICJzdGF0dXMiKTsKKworICAgdGRlc2NfaTM4Nl9tcHhfbGludXggPSByZXN1bHQ7CisgfQorZGlmZiAtLWdpdCBhL2dkYi9mZWF0dXJlcy9pMzg2L2kzODYtbXB4LWxpbnV4LnhtbCBiL2dkYi9mZWF0dXJlcy9pMzg2L2kzODYtbXB4LWxpbnV4LnhtbAoraW5kZXggYzQwMDRkNi4uNDIyOGNmNSAxMDA2NDQKKy0tLSBhL2dkYi9mZWF0dXJlcy9pMzg2L2kzODYtbXB4LWxpbnV4LnhtbAorKysrIGIvZ2RiL2ZlYXR1cmVzL2kzODYvaTM4Ni1tcHgtbGludXgueG1sCitAQCAtMTQsNiArMTQsNSBAQAorICAgPHhpOmluY2x1ZGUgaHJlZj0iMzJiaXQtY29yZS54bWwiLz4KKyAgIDx4aTppbmNsdWRlIGhyZWY9IjMyYml0LXNzZS54bWwiLz4KKyAgIDx4aTppbmNsdWRlIGhyZWY9IjMyYml0LWxpbnV4LnhtbCIvPgorLSAgPHhpOmluY2x1ZGUgaHJlZj0iMzJiaXQtYXZ4LnhtbCIvPgorICAgPHhpOmluY2x1ZGUgaHJlZj0iMzJiaXQtbXB4LnhtbCIvPgorIDwvdGFyZ2V0PgorZGlmZiAtLWdpdCBhL2dkYi9mZWF0dXJlcy9pMzg2L2kzODYtbXB4LmMgYi9nZGIvZmVhdHVyZXMvaTM4Ni9pMzg2LW1weC5jCitpbmRleCAxZTA0YWZkLi40MzBkYjNmIDEwMDY0NAorLS0tIGEvZ2RiL2ZlYXR1cmVzL2kzODYvaTM4Ni1tcHguYworKysrIGIvZ2RiL2ZlYXR1cmVzL2kzODYvaTM4Ni1tcHguYworQEAgLTEzMCwxNiArMTMwLDYgQEAgaW5pdGlhbGl6ZV90ZGVzY19pMzg2X21weCAodm9pZCkKKyAgIHRkZXNjX2NyZWF0ZV9yZWcgKGZlYXR1cmUsICJ4bW03IiwgMzksIDEsIE5VTEwsIDEyOCwgInZlYzEyOCIpOworICAgdGRlc2NfY3JlYXRlX3JlZyAoZmVhdHVyZSwgIm14Y3NyIiwgNDAsIDEsICJ2ZWN0b3IiLCAzMiwgImkzODZfbXhjc3IiKTsKKworLSAgZmVhdHVyZSA9IHRkZXNjX2NyZWF0ZV9mZWF0dXJlIChyZXN1bHQsICJvcmcuZ251LmdkYi5pMzg2LmF2eCIpOworLSAgdGRlc2NfY3JlYXRlX3JlZyAoZmVhdHVyZSwgInltbTBoIiwgNDEsIDEsIE5VTEwsIDEyOCwgInVpbnQxMjgiKTsKKy0gIHRkZXNjX2NyZWF0ZV9yZWcgKGZlYXR1cmUsICJ5bW0xaCIsIDQyLCAxLCBOVUxMLCAxMjgsICJ1aW50MTI4Iik7CistICB0ZGVzY19jcmVhdGVfcmVnIChmZWF0dXJlLCAieW1tMmgiLCA0MywgMSwgTlVMTCwgMTI4LCAidWludDEyOCIpOworLSAgdGRlc2NfY3JlYXRlX3JlZyAoZmVhdHVyZSwgInltbTNoIiwgNDQsIDEsIE5VTEwsIDEyOCwgInVpbnQxMjgiKTsKKy0gIHRkZXNjX2NyZWF0ZV9yZWcgKGZlYXR1cmUsICJ5bW00aCIsIDQ1LCAxLCBOVUxMLCAxMjgsICJ1aW50MTI4Iik7CistICB0ZGVzY19jcmVhdGVfcmVnIChmZWF0dXJlLCAieW1tNWgiLCA0NiwgMSwgTlVMTCwgMTI4LCAidWludDEyOCIpOworLSAgdGRlc2NfY3JlYXRlX3JlZyAoZmVhdHVyZSwgInltbTZoIiwgNDcsIDEsIE5VTEwsIDEyOCwgInVpbnQxMjgiKTsKKy0gIHRkZXNjX2NyZWF0ZV9yZWcgKGZlYXR1cmUsICJ5bW03aCIsIDQ4LCAxLCBOVUxMLCAxMjgsICJ1aW50MTI4Iik7CistCisgICBmZWF0dXJlID0gdGRlc2NfY3JlYXRlX2ZlYXR1cmUgKHJlc3VsdCwgIm9yZy5nbnUuZ2RiLmkzODYubXB4Iik7CisgICB0eXBlID0gdGRlc2NfY3JlYXRlX3N0cnVjdCAoZmVhdHVyZSwgImJyMTI4Iik7CisgICBmaWVsZF90eXBlID0gdGRlc2NfbmFtZWRfdHlwZSAoZmVhdHVyZSwgInVpbnQ2NCIpOworQEAgLTE3MSwxMiArMTYxLDEyIEBAIGluaXRpYWxpemVfdGRlc2NfaTM4Nl9tcHggKHZvaWQpCisgICBmaWVsZF90eXBlID0gdGRlc2NfbmFtZWRfdHlwZSAoZmVhdHVyZSwgIl9ibmRjZmd1Iik7CisgICB0ZGVzY19hZGRfZmllbGQgKHR5cGUsICJjb25maWciLCBmaWVsZF90eXBlKTsKKworLSAgdGRlc2NfY3JlYXRlX3JlZyAoZmVhdHVyZSwgImJuZDByYXciLCA0OSwgMSwgTlVMTCwgMTI4LCAiYnIxMjgiKTsKKy0gIHRkZXNjX2NyZWF0ZV9yZWcgKGZlYXR1cmUsICJibmQxcmF3IiwgNTAsIDEsIE5VTEwsIDEyOCwgImJyMTI4Iik7CistICB0ZGVzY19jcmVhdGVfcmVnIChmZWF0dXJlLCAiYm5kMnJhdyIsIDUxLCAxLCBOVUxMLCAxMjgsICJicjEyOCIpOworLSAgdGRlc2NfY3JlYXRlX3JlZyAoZmVhdHVyZSwgImJuZDNyYXciLCA1MiwgMSwgTlVMTCwgMTI4LCAiYnIxMjgiKTsKKy0gIHRkZXNjX2NyZWF0ZV9yZWcgKGZlYXR1cmUsICJibmRjZmd1IiwgNTMsIDEsIE5VTEwsIDY0LCAiY2ZndSIpOworLSAgdGRlc2NfY3JlYXRlX3JlZyAoZmVhdHVyZSwgImJuZHN0YXR1cyIsIDU0LCAxLCBOVUxMLCA2NCwgInN0YXR1cyIpOworKyAgdGRlc2NfY3JlYXRlX3JlZyAoZmVhdHVyZSwgImJuZDByYXciLCA0MSwgMSwgTlVMTCwgMTI4LCAiYnIxMjgiKTsKKysgIHRkZXNjX2NyZWF0ZV9yZWcgKGZlYXR1cmUsICJibmQxcmF3IiwgNDIsIDEsIE5VTEwsIDEyOCwgImJyMTI4Iik7CisrICB0ZGVzY19jcmVhdGVfcmVnIChmZWF0dXJlLCAiYm5kMnJhdyIsIDQzLCAxLCBOVUxMLCAxMjgsICJicjEyOCIpOworKyAgdGRlc2NfY3JlYXRlX3JlZyAoZmVhdHVyZSwgImJuZDNyYXciLCA0NCwgMSwgTlVMTCwgMTI4LCAiYnIxMjgiKTsKKysgIHRkZXNjX2NyZWF0ZV9yZWcgKGZlYXR1cmUsICJibmRjZmd1IiwgNDUsIDEsIE5VTEwsIDY0LCAiY2ZndSIpOworKyAgdGRlc2NfY3JlYXRlX3JlZyAoZmVhdHVyZSwgImJuZHN0YXR1cyIsIDQ2LCAxLCBOVUxMLCA2NCwgInN0YXR1cyIpOworCisgICB0ZGVzY19pMzg2X21weCA9IHJlc3VsdDsKKyB9CitkaWZmIC0tZ2l0IGEvZ2RiL2ZlYXR1cmVzL2kzODYvaTM4Ni1tcHgueG1sIGIvZ2RiL2ZlYXR1cmVzL2kzODYvaTM4Ni1tcHgueG1sCitpbmRleCA1MmE2OGRiLi5jMTgwNmNiIDEwMDY0NAorLS0tIGEvZ2RiL2ZlYXR1cmVzL2kzODYvaTM4Ni1tcHgueG1sCisrKysgYi9nZGIvZmVhdHVyZXMvaTM4Ni9pMzg2LW1weC54bWwKK0BAIC0xMiw2ICsxMiw1IEBACisgICA8YXJjaGl0ZWN0dXJlPmkzODY8L2FyY2hpdGVjdHVyZT4KKyAgIDx4aTppbmNsdWRlIGhyZWY9IjMyYml0LWNvcmUueG1sIi8+CisgICA8eGk6aW5jbHVkZSBocmVmPSIzMmJpdC1zc2UueG1sIi8+CistICA8eGk6aW5jbHVkZSBocmVmPSIzMmJpdC1hdngueG1sIi8+CisgICA8eGk6aW5jbHVkZSBocmVmPSIzMmJpdC1tcHgueG1sIi8+CisgPC90YXJnZXQ+CitkaWZmIC0tZ2l0IGEvZ2RiL2dkYnNlcnZlci9NYWtlZmlsZS5pbiBiL2dkYi9nZGJzZXJ2ZXIvTWFrZWZpbGUuaW4KK2luZGV4IDFlODc0ZTMuLmRlZTJlYTEgMTAwNjQ0CistLS0gYS9nZGIvZ2Ric2VydmVyL01ha2VmaWxlLmluCisrKysgYi9nZGIvZ2Ric2VydmVyL01ha2VmaWxlLmluCitAQCAtMzc2LDkgKzM3NiwxMSBAQCBjbGVhbjoKKyAJcm0gLWYgeG1sLWJ1aWx0aW4uYyBzdGFtcC14bWwKKyAJcm0gLWYgaTM4Ni1hdnguYyBpMzg2LWF2eC1saW51eC5jCisgCXJtIC1mIGkzODYtbXB4LmMgaTM4Ni1tcHgtbGludXguYworKwlybSAtZiBpMzg2LWF2eC1tcHguYyBpMzg2LWF2eC1tcHgtbGludXguYworIAlybSAtZiBpMzg2LWF2eDUxMi5jIGkzODYtYXZ4NTEyLWxpbnV4LmMKKyAJcm0gLWYgYW1kNjQtYXZ4LmMgYW1kNjQtYXZ4LWxpbnV4LmMKKyAJcm0gLWYgYW1kNjQtbXB4LmMgYW1kNjQtbXB4LWxpbnV4LmMKKysJcm0gLWYgYW1kNjQtYXZ4LW1weC5jIGFtZDY0LWF2eC1tcHgtbGludXguYworIAlybSAtZiBhbWQ2NC1hdng1MTIuYyBhbWQ2NC1hdng1MTItbGludXguYworIAlybSAtZiBpMzg2LW1teC5jIGkzODYtbW14LWxpbnV4LmMKKyAJcm0gLWYgeDMyLmMgeDMyLWxpbnV4LmMKK0BAIC00OTUsNiArNDk3LDIxIEBAIHJlZ2NhY2hlLWlwYS5vOiByZWdjYWNoZS5jCisgaTM4Ni1saW51eC1pcGEubzogaTM4Ni1saW51eC5jCisgCSQoSVBBR0VOVF9DT01QSUxFKSAkPAorIAkkKFBPU1RDT01QSUxFKQorK2kzODYtbW14LWxpbnV4LWlwYS5vOiBpMzg2LW1teC1saW51eC5jCisrCSQoSVBBR0VOVF9DT01QSUxFKSAkPAorKwkkKFBPU1RDT01QSUxFKQorK2kzODYtYXZ4LWxpbnV4LWlwYS5vOiBpMzg2LWF2eC1saW51eC5jCisrCSQoSVBBR0VOVF9DT01QSUxFKSAkPAorKwkkKFBPU1RDT01QSUxFKQorK2kzODYtbXB4LWxpbnV4LWlwYS5vOiBpMzg2LW1weC1saW51eC5jCisrCSQoSVBBR0VOVF9DT01QSUxFKSAkPAorKwkkKFBPU1RDT01QSUxFKQorK2kzODYtYXZ4LW1weC1saW51eC1pcGEubzogaTM4Ni1hdngtbXB4LWxpbnV4LmMKKysJJChJUEFHRU5UX0NPTVBJTEUpICQ8CisrCSQoUE9TVENPTVBJTEUpCisraTM4Ni1hdng1MTItbGludXgtaXBhLm86IGkzODYtYXZ4NTEyLWxpbnV4LmMKKysJJChJUEFHRU5UX0NPTVBJTEUpICQ8CisrCSQoUE9TVENPTVBJTEUpCisgbGludXgtaTM4Ni1pcGEubzogbGludXgtaTM4Ni1pcGEuYworIAkkKElQQUdFTlRfQ09NUElMRSkgJDwKKyAJJChQT1NUQ09NUElMRSkKK0BAIC01MDQsNiArNTIxLDE4IEBAIGxpbnV4LWFtZDY0LWlwYS5vOiBsaW51eC1hbWQ2NC1pcGEuYworIGFtZDY0LWxpbnV4LWlwYS5vOiBhbWQ2NC1saW51eC5jCisgCSQoSVBBR0VOVF9DT01QSUxFKSAkPAorIAkkKFBPU1RDT01QSUxFKQorK2FtZDY0LWF2eC1saW51eC1pcGEubzogYW1kNjQtYXZ4LWxpbnV4LmMKKysJJChJUEFHRU5UX0NPTVBJTEUpICQ8CisrCSQoUE9TVENPTVBJTEUpCisrYW1kNjQtbXB4LWxpbnV4LWlwYS5vOiBhbWQ2NC1tcHgtbGludXguYworKwkkKElQQUdFTlRfQ09NUElMRSkgJDwKKysJJChQT1NUQ09NUElMRSkKKythbWQ2NC1hdngtbXB4LWxpbnV4LWlwYS5vOiBhbWQ2NC1hdngtbXB4LWxpbnV4LmMKKysJJChJUEFHRU5UX0NPTVBJTEUpICQ8CisrCSQoUE9TVENPTVBJTEUpCisrYW1kNjQtYXZ4NTEyLWxpbnV4LWlwYS5vOiBhbWQ2NC1hdng1MTItbGludXguYworKwkkKElQQUdFTlRfQ09NUElMRSkgJDwKKysJJChQT1NUQ09NUElMRSkKKyBsaW51eC1hYXJjaDY0LWlwYS5vOiBsaW51eC1hYXJjaDY0LWlwYS5jCisgCSQoSVBBR0VOVF9DT01QSUxFKSAkPAorIAkkKFBPU1RDT01QSUxFKQorQEAgLTY5NCw2ICs3MjMsMTAgQEAgaTM4Ni1tcHguYyA6ICQoc3JjZGlyKS8uLi9yZWdmb3JtYXRzL2kzODYvaTM4Ni1tcHguZGF0ICQocmVnZGF0X3NoKQorIAkkKFNIRUxMKSAkKHJlZ2RhdF9zaCkgJChzcmNkaXIpLy4uL3JlZ2Zvcm1hdHMvaTM4Ni9pMzg2LW1weC5kYXQgaTM4Ni1tcHguYworIGkzODYtbXB4LWxpbnV4LmMgOiAkKHNyY2RpcikvLi4vcmVnZm9ybWF0cy9pMzg2L2kzODYtbXB4LWxpbnV4LmRhdCAkKHJlZ2RhdF9zaCkKKyAJJChTSEVMTCkgJChyZWdkYXRfc2gpICQoc3JjZGlyKS8uLi9yZWdmb3JtYXRzL2kzODYvaTM4Ni1tcHgtbGludXguZGF0IGkzODYtbXB4LWxpbnV4LmMKKytpMzg2LWF2eC1tcHguYyA6ICQoc3JjZGlyKS8uLi9yZWdmb3JtYXRzL2kzODYvaTM4Ni1hdngtbXB4LmRhdCAkKHJlZ2RhdF9zaCkKKysJJChTSEVMTCkgJChyZWdkYXRfc2gpICQoc3JjZGlyKS8uLi9yZWdmb3JtYXRzL2kzODYvaTM4Ni1hdngtbXB4LmRhdCBpMzg2LWF2eC1tcHguYworK2kzODYtYXZ4LW1weC1saW51eC5jIDogJChzcmNkaXIpLy4uL3JlZ2Zvcm1hdHMvaTM4Ni9pMzg2LWF2eC1tcHgtbGludXguZGF0ICQocmVnZGF0X3NoKQorKwkkKFNIRUxMKSAkKHJlZ2RhdF9zaCkgJChzcmNkaXIpLy4uL3JlZ2Zvcm1hdHMvaTM4Ni9pMzg2LWF2eC1tcHgtbGludXguZGF0IGkzODYtYXZ4LW1weC1saW51eC5jCisgaTM4Ni1tbXguYyA6ICQoc3JjZGlyKS8uLi9yZWdmb3JtYXRzL2kzODYvaTM4Ni1tbXguZGF0ICQocmVnZGF0X3NoKQorIAkkKFNIRUxMKSAkKHJlZ2RhdF9zaCkgJChzcmNkaXIpLy4uL3JlZ2Zvcm1hdHMvaTM4Ni9pMzg2LW1teC5kYXQgaTM4Ni1tbXguYworIGkzODYtbW14LWxpbnV4LmMgOiAkKHNyY2RpcikvLi4vcmVnZm9ybWF0cy9pMzg2L2kzODYtbW14LWxpbnV4LmRhdCAkKHJlZ2RhdF9zaCkKK0BAIC04MDgsNiArODQxLDEwIEBAIGFtZDY0LW1weC5jIDogJChzcmNkaXIpLy4uL3JlZ2Zvcm1hdHMvaTM4Ni9hbWQ2NC1tcHguZGF0ICQocmVnZGF0X3NoKQorIAkkKFNIRUxMKSAkKHJlZ2RhdF9zaCkgJChzcmNkaXIpLy4uL3JlZ2Zvcm1hdHMvaTM4Ni9hbWQ2NC1tcHguZGF0IGFtZDY0LW1weC5jCisgYW1kNjQtbXB4LWxpbnV4LmMgOiAkKHNyY2RpcikvLi4vcmVnZm9ybWF0cy9pMzg2L2FtZDY0LW1weC1saW51eC5kYXQgJChyZWdkYXRfc2gpCisgCSQoU0hFTEwpICQocmVnZGF0X3NoKSAkKHNyY2RpcikvLi4vcmVnZm9ybWF0cy9pMzg2L2FtZDY0LW1weC1saW51eC5kYXQgYW1kNjQtbXB4LWxpbnV4LmMKKythbWQ2NC1hdngtbXB4LmMgOiAkKHNyY2RpcikvLi4vcmVnZm9ybWF0cy9pMzg2L2FtZDY0LWF2eC1tcHguZGF0ICQocmVnZGF0X3NoKQorKwkkKFNIRUxMKSAkKHJlZ2RhdF9zaCkgJChzcmNkaXIpLy4uL3JlZ2Zvcm1hdHMvaTM4Ni9hbWQ2NC1hdngtbXB4LmRhdCBhbWQ2NC1hdngtbXB4LmMKKythbWQ2NC1hdngtbXB4LWxpbnV4LmMgOiAkKHNyY2RpcikvLi4vcmVnZm9ybWF0cy9pMzg2L2FtZDY0LWF2eC1tcHgtbGludXguZGF0ICQocmVnZGF0X3NoKQorKwkkKFNIRUxMKSAkKHJlZ2RhdF9zaCkgJChzcmNkaXIpLy4uL3JlZ2Zvcm1hdHMvaTM4Ni9hbWQ2NC1hdngtbXB4LWxpbnV4LmRhdCBhbWQ2NC1hdngtbXB4LWxpbnV4LmMKKyB4MzIuYyA6ICQoc3JjZGlyKS8uLi9yZWdmb3JtYXRzL2kzODYveDMyLmRhdCAkKHJlZ2RhdF9zaCkKKyAJJChTSEVMTCkgJChyZWdkYXRfc2gpICQoc3JjZGlyKS8uLi9yZWdmb3JtYXRzL2kzODYveDMyLmRhdCB4MzIuYworIHgzMi1saW51eC5jIDogJChzcmNkaXIpLy4uL3JlZ2Zvcm1hdHMvaTM4Ni94MzItbGludXguZGF0ICQocmVnZGF0X3NoKQorZGlmZiAtLWdpdCBhL2dkYi9nZGJzZXJ2ZXIvY29uZmlndXJlLnNydiBiL2dkYi9nZGJzZXJ2ZXIvY29uZmlndXJlLnNydgoraW5kZXggYTU0YjllNy4uNDkzNWEzNiAxMDA2NDQKKy0tLSBhL2dkYi9nZGJzZXJ2ZXIvY29uZmlndXJlLnNydgorKysrIGIvZ2RiL2dkYnNlcnZlci9jb25maWd1cmUuc3J2CitAQCAtMjQsMjAgKzI0LDIzIEBACisgIyBEZWZhdWx0IGhvc3Rpb19sYXN0X2Vycm9yIGltcGxlbWVudGF0aW9uCisgc3J2X2hvc3Rpb19lcnJfb2Jqcz0iaG9zdGlvLWVycm5vLm8iCisKKy1zcnZfaTM4Nl9yZWdvYmo9ImkzODYubyBpMzg2LWF2eC5vIGkzODYtYXZ4NTEyLm8gaTM4Ni1tcHgubyBpMzg2LW1teC5vIgorLXNydl9pMzg2X2xpbnV4X3JlZ29iaj0iaTM4Ni1saW51eC5vIGkzODYtYXZ4LWxpbnV4Lm8gaTM4Ni1hdng1MTItbGludXgubyBpMzg2LW1weC1saW51eC5vIGkzODYtbW14LWxpbnV4Lm8iCistc3J2X2FtZDY0X3JlZ29iaj0iYW1kNjQubyBhbWQ2NC1hdngubyBhbWQ2NC1hdng1MTIubyBhbWQ2NC1tcHgubyB4MzIubyB4MzItYXZ4Lm8geDMyLWF2eDUxMi5vIgorLXNydl9hbWQ2NF9saW51eF9yZWdvYmo9ImFtZDY0LWxpbnV4Lm8gYW1kNjQtYXZ4LWxpbnV4Lm8gYW1kNjQtYXZ4NTEyLWxpbnV4Lm8gYW1kNjQtbXB4LWxpbnV4Lm8geDMyLWxpbnV4Lm8geDMyLWF2eC1saW51eC5vIHgzMi1hdng1MTItbGludXgubyIKKytzcnZfaTM4Nl9yZWdvYmo9ImkzODYubyBpMzg2LWF2eC5vIGkzODYtYXZ4NTEyLm8gaTM4Ni1tcHgubyBpMzg2LWF2eC1tcHgubyBpMzg2LW1teC5vIgorK3Nydl9pMzg2X2xpbnV4X3JlZ29iaj0iaTM4Ni1saW51eC5vIGkzODYtYXZ4LWxpbnV4Lm8gaTM4Ni1hdng1MTItbGludXgubyBpMzg2LW1weC1saW51eC5vIGkzODYtYXZ4LW1weC1saW51eC5vIGkzODYtbW14LWxpbnV4Lm8iCisrc3J2X2FtZDY0X3JlZ29iaj0iYW1kNjQubyBhbWQ2NC1hdngubyBhbWQ2NC1hdng1MTIubyBhbWQ2NC1tcHgubyBhbWQ2NC1hdngtbXB4Lm8geDMyLm8geDMyLWF2eC5vIHgzMi1hdng1MTIubyIKKytzcnZfYW1kNjRfbGludXhfcmVnb2JqPSJhbWQ2NC1saW51eC5vIGFtZDY0LWF2eC1saW51eC5vIGFtZDY0LWF2eDUxMi1saW51eC5vIGFtZDY0LW1weC1saW51eC5vIGFtZDY0LWF2eC1tcHgtbGludXgubyB4MzItbGludXgubyB4MzItYXZ4LWxpbnV4Lm8geDMyLWF2eDUxMi1saW51eC5vIgorKworKworK2lwYV9pMzg2X2xpbnV4X3JlZ29iaj0iaTM4Ni1saW51eC1pcGEubyBpMzg2LWF2eC1saW51eC1pcGEubyAgaTM4Ni1hdngtbXB4LWxpbnV4LWlwYS5vIGkzODYtYXZ4NTEyLWxpbnV4LWlwYS5vIGkzODYtbXB4LWxpbnV4LWlwYS5vIGkzODYtbW14LWxpbnV4LWlwYS5vIgorK2lwYV9hbWQ2NF9saW51eF9yZWdvYmo9ImFtZDY0LWxpbnV4LWlwYS5vIGFtZDY0LWF2eC1saW51eC1pcGEubyBhbWQ2NC1hdngtbXB4LWxpbnV4LWlwYS5vIGFtZDY0LWF2eDUxMi1saW51eC1pcGEubyBhbWQ2NC1tcHgtbGludXgtaXBhLm8iCisKKy1pcGFfaTM4Nl9saW51eF9yZWdvYmo9aTM4Ni1saW51eC1pcGEubworLWlwYV9hbWQ2NF9saW51eF9yZWdvYmo9YW1kNjQtbGludXgtaXBhLm8KKworIHNydl9pMzg2XzMyYml0X3htbGZpbGVzPSJpMzg2LzMyYml0LWNvcmUueG1sIGkzODYvMzJiaXQtc3NlLnhtbCBpMzg2LzMyYml0LWF2eC54bWwgaTM4Ni8zMmJpdC1hdng1MTIueG1sIGkzODYvMzJiaXQtbXB4LnhtbCIKKyBzcnZfaTM4Nl82NGJpdF94bWxmaWxlcz0iaTM4Ni82NGJpdC1jb3JlLnhtbCBpMzg2LzY0Yml0LXNzZS54bWwgaTM4Ni82NGJpdC1hdngueG1sIGkzODYvNjRiaXQtYXZ4NTEyLnhtbCBpMzg2L3gzMi1jb3JlLnhtbCBpMzg2LzY0Yml0LW1weC54bWwiCistc3J2X2kzODZfeG1sZmlsZXM9ImkzODYvaTM4Ni54bWwgaTM4Ni9pMzg2LWF2eC54bWwgaTM4Ni9pMzg2LWF2eDUxMi54bWwgaTM4Ni9pMzg2LW1weC54bWwgaTM4Ni9pMzg2LW1teC54bWwgJHNydl9pMzg2XzMyYml0X3htbGZpbGVzIgorLXNydl9hbWQ2NF94bWxmaWxlcz0iaTM4Ni9hbWQ2NC54bWwgaTM4Ni9hbWQ2NC1hdngueG1sIGkzODYvYW1kNjQtYXZ4NTEyLnhtbCBpMzg2L3gzMi54bWwgaTM4Ni94MzItYXZ4LnhtbCBpMzg2L3gzMi1hdng1MTIueG1sIGkzODYvYW1kNjQtbXB4LnhtbCAkc3J2X2kzODZfNjRiaXRfeG1sZmlsZXMiCistc3J2X2kzODZfbGludXhfeG1sZmlsZXM9ImkzODYvaTM4Ni1saW51eC54bWwgaTM4Ni9pMzg2LWF2eC1saW51eC54bWwgaTM4Ni9pMzg2LWF2eDUxMi1saW51eC54bWwgaTM4Ni9pMzg2LW1teC1saW51eC54bWwgaTM4Ni8zMmJpdC1saW51eC54bWwgaTM4Ni9pMzg2LW1weC1saW51eC54bWwgJHNydl9pMzg2XzMyYml0X3htbGZpbGVzIgorLXNydl9hbWQ2NF9saW51eF94bWxmaWxlcz0iaTM4Ni9hbWQ2NC1saW51eC54bWwgaTM4Ni9hbWQ2NC1hdngtbGludXgueG1sIGkzODYvYW1kNjQtYXZ4NTEyLWxpbnV4LnhtbCBpMzg2LzY0Yml0LWxpbnV4LnhtbCBpMzg2L2FtZDY0LW1weC1saW51eC54bWwgaTM4Ni94MzItbGludXgueG1sIGkzODYveDMyLWF2eC1saW51eC54bWwgaTM4Ni94MzItYXZ4NTEyLWxpbnV4LnhtbCAkc3J2X2kzODZfNjRiaXRfeG1sZmlsZXMiCisrc3J2X2kzODZfeG1sZmlsZXM9ImkzODYvaTM4Ni54bWwgaTM4Ni9pMzg2LWF2eC54bWwgaTM4Ni9pMzg2LWF2eDUxMi54bWwgaTM4Ni9pMzg2LW1weC54bWwgaTM4Ni9pMzg2LWF2eC1tcHgueG1sIGkzODYvaTM4Ni1tbXgueG1sICRzcnZfaTM4Nl8zMmJpdF94bWxmaWxlcyIKKytzcnZfYW1kNjRfeG1sZmlsZXM9ImkzODYvYW1kNjQueG1sIGkzODYvYW1kNjQtYXZ4LnhtbCBpMzg2L2FtZDY0LWF2eDUxMi54bWwgaTM4Ni94MzIueG1sIGkzODYveDMyLWF2eC54bWwgaTM4Ni94MzItYXZ4NTEyLnhtbCBpMzg2L2FtZDY0LW1weC54bWwgaTM4Ni9hbWQ2NC1hdngtbXB4LnhtbCAgJHNydl9pMzg2XzY0Yml0X3htbGZpbGVzIgorK3Nydl9pMzg2X2xpbnV4X3htbGZpbGVzPSJpMzg2L2kzODYtbGludXgueG1sIGkzODYvaTM4Ni1hdngtbGludXgueG1sIGkzODYvaTM4Ni1hdng1MTItbGludXgueG1sIGkzODYvaTM4Ni1tbXgtbGludXgueG1sIGkzODYvMzJiaXQtbGludXgueG1sIGkzODYvaTM4Ni1tcHgtbGludXgueG1sIGkzODYvaTM4Ni1hdngtbXB4LWxpbnV4LnhtbCAkc3J2X2kzODZfMzJiaXRfeG1sZmlsZXMiCisrc3J2X2FtZDY0X2xpbnV4X3htbGZpbGVzPSJpMzg2L2FtZDY0LWxpbnV4LnhtbCBpMzg2L2FtZDY0LWF2eC1saW51eC54bWwgaTM4Ni9hbWQ2NC1hdng1MTItbGludXgueG1sIGkzODYvNjRiaXQtbGludXgueG1sIGkzODYvYW1kNjQtbXB4LWxpbnV4LnhtbCBpMzg2L2FtZDY0LWF2eC1tcHgtbGludXgueG1sIGkzODYveDMyLWxpbnV4LnhtbCBpMzg2L3gzMi1hdngtbGludXgueG1sIGkzODYveDMyLWF2eDUxMi1saW51eC54bWwgJHNydl9pMzg2XzY0Yml0X3htbGZpbGVzIgorKworCisKKyAjIExpbnV4IG9iamVjdCBmaWxlcy4gIFRoaXMgaXMgc28gd2UgZG9uJ3QgaGF2ZSB0byByZXBlYXQKK2RpZmYgLS1naXQgYS9nZGIvZ2Ric2VydmVyL2xpbnV4LWFhcmNoNjQtaXBhLmMgYi9nZGIvZ2Ric2VydmVyL2xpbnV4LWFhcmNoNjQtaXBhLmMKK2luZGV4IDc1ODcwOGQuLmYxZWFhNzAgMTAwNjQ0CistLS0gYS9nZGIvZ2Ric2VydmVyL2xpbnV4LWFhcmNoNjQtaXBhLmMKKysrKyBiL2dkYi9nZGJzZXJ2ZXIvbGludXgtYWFyY2g2NC1pcGEuYworQEAgLTE0Myw5ICsxNDMsMTggQEAgZ2RiX2FnZW50X2dldF9yYXdfcmVnIChjb25zdCB1bnNpZ25lZCBjaGFyICpyYXdfcmVncywgaW50IHJlZ251bSkKKyAJCQkrIGFhcmNoNjRfZnRfY29sbGVjdF9yZWdtYXBbcmVnbnVtXSAqIEZUX0NSX1NJWkUpOworIH0KKworKy8qIFJldHVybiB0YXJnZXRfZGVzYyB0byB1c2UgZm9yIElQQSwgZ2l2ZW4gdGhlIHRkZXNjIGluZGV4IHBhc3NlZCBieQorKyAgIGdkYnNlcnZlci4gIEluZGV4IGlzIGlnbm9yZWQsIHNpbmNlIHdlIGhhdmUgb25seSBvbmUgdGRlc2MKKysgICBhdCB0aGUgbW9tZW50LiAgKi8KKysKKytjb25zdCBzdHJ1Y3QgdGFyZ2V0X2Rlc2MgKgorK2dldF9pcGFfdGRlc2MgKGludCBpZHgpCisreworKyAgcmV0dXJuIHRkZXNjX2FhcmNoNjQ7CisrfQorKworIHZvaWQKKyBpbml0aWFsaXplX2xvd190cmFjZXBvaW50ICh2b2lkKQorIHsKKyAgIGluaXRfcmVnaXN0ZXJzX2FhcmNoNjQgKCk7CistICBpcGFfdGRlc2MgPSB0ZGVzY19hYXJjaDY0OworIH0KK2RpZmYgLS1naXQgYS9nZGIvZ2Ric2VydmVyL2xpbnV4LWFtZDY0LWlwYS5jIGIvZ2RiL2dkYnNlcnZlci9saW51eC1hbWQ2NC1pcGEuYworaW5kZXggMmVlZWRjZC4uZjljNzJhMCAxMDA2NDQKKy0tLSBhL2dkYi9nZGJzZXJ2ZXIvbGludXgtYW1kNjQtaXBhLmMKKysrKyBiL2dkYi9nZGJzZXJ2ZXIvbGludXgtYW1kNjQtaXBhLmMKK0BAIC0yMCw2ICsyMCw3IEBACisKKyAjaW5jbHVkZSAic2VydmVyLmgiCisgI2luY2x1ZGUgInRyYWNlcG9pbnQuaCIKKysjaW5jbHVkZSAibGludXgteDg2LXRkZXNjLmgiCisKKyAvKiBEZWZpbmVkIGluIGF1dG8tZ2VuZXJhdGVkIGZpbGUgYW1kNjQtbGludXguYy4gICovCisgdm9pZCBpbml0X3JlZ2lzdGVyc19hbWQ2NF9saW51eCAodm9pZCk7CitAQCAtMTY2LDkgKzE2NywzNyBAQCBzdXBwbHlfc3RhdGljX3RyYWNlcG9pbnRfcmVnaXN0ZXJzIChzdHJ1Y3QgcmVnY2FjaGUgKnJlZ2NhY2hlLAorCisgI2VuZGlmIC8qIEhBVkVfVVNUICovCisKKysvKiBSZXR1cm4gdGFyZ2V0X2Rlc2MgdG8gdXNlIGZvciBJUEEsIGdpdmVuIHRoZSB0ZGVzYyBpbmRleCBwYXNzZWQgYnkKKysgICBnZGJzZXJ2ZXIuICAqLworKworK2NvbnN0IHN0cnVjdCB0YXJnZXRfZGVzYyAqCisrZ2V0X2lwYV90ZGVzYyAoaW50IGlkeCkKKyt7CisrICBzd2l0Y2ggKGlkeCkKKysgICAgeworKyAgICBjYXNlIFg4Nl9UREVTQ19TU0U6CisrICAgICAgcmV0dXJuIHRkZXNjX2FtZDY0X2xpbnV4OworKyAgICBjYXNlIFg4Nl9UREVTQ19BVlg6CisrICAgICAgcmV0dXJuIHRkZXNjX2FtZDY0X2F2eF9saW51eDsKKysgICAgY2FzZSBYODZfVERFU0NfTVBYOgorKyAgICAgIHJldHVybiB0ZGVzY19hbWQ2NF9tcHhfbGludXg7CisrICAgIGNhc2UgWDg2X1RERVNDX0FWWF9NUFg6CisrICAgICAgcmV0dXJuIHRkZXNjX2FtZDY0X2F2eF9tcHhfbGludXg7CisrICAgIGNhc2UgWDg2X1RERVNDX0FWWDUxMjoKKysgICAgICByZXR1cm4gdGRlc2NfYW1kNjRfYXZ4NTEyX2xpbnV4OworKyAgICBkZWZhdWx0OgorKyAgICAgIGludGVybmFsX2Vycm9yIChfX0ZJTEVfXywgX19MSU5FX18sCisrCQkgICAgICAidW5rbm93biBpcGEgdGRlc2MgaW5kZXg6ICVkIiwgaWR4KTsKKysgICAgICByZXR1cm4gdGRlc2NfYW1kNjRfbGludXg7CisrICAgIH0KKyt9CisrCisgdm9pZAorIGluaXRpYWxpemVfbG93X3RyYWNlcG9pbnQgKHZvaWQpCisgeworICAgaW5pdF9yZWdpc3RlcnNfYW1kNjRfbGludXggKCk7CistICBpcGFfdGRlc2MgPSB0ZGVzY19hbWQ2NF9saW51eDsKKysgIGluaXRfcmVnaXN0ZXJzX2FtZDY0X2F2eF9saW51eCAoKTsKKysgIGluaXRfcmVnaXN0ZXJzX2FtZDY0X2F2eF9tcHhfbGludXggKCk7CisrICBpbml0X3JlZ2lzdGVyc19hbWQ2NF9tcHhfbGludXggKCk7CisrICBpbml0X3JlZ2lzdGVyc19hbWQ2NF9hdng1MTJfbGludXggKCk7CisgfQorZGlmZiAtLWdpdCBhL2dkYi9nZGJzZXJ2ZXIvbGludXgtaTM4Ni1pcGEuYyBiL2dkYi9nZGJzZXJ2ZXIvbGludXgtaTM4Ni1pcGEuYworaW5kZXggMTFkYzAzOC4uZDdhOGU3ZCAxMDA2NDQKKy0tLSBhL2dkYi9nZGJzZXJ2ZXIvbGludXgtaTM4Ni1pcGEuYworKysrIGIvZ2RiL2dkYnNlcnZlci9saW51eC1pMzg2LWlwYS5jCitAQCAtMjEsNiArMjEsNyBAQAorICNpbmNsdWRlICJzZXJ2ZXIuaCIKKyAjaW5jbHVkZSA8c3lzL21tYW4uaD4KKyAjaW5jbHVkZSAidHJhY2Vwb2ludC5oIgorKyNpbmNsdWRlICJsaW51eC14ODYtdGRlc2MuaCIKKworIC8qIEdEQiByZWdpc3RlciBudW1iZXJzLiAgKi8KKworQEAgLTQ3LDEwICs0OCw2IEBAIGVudW0gaTM4Nl9nZGJfcmVnbnVtCisKKyAjZGVmaW5lIGkzODZfbnVtX3JlZ3MgMTYKKworLS8qIERlZmluZWQgaW4gYXV0by1nZW5lcmF0ZWQgZmlsZSBpMzg2LWxpbnV4LmMuICAqLworLXZvaWQgaW5pdF9yZWdpc3RlcnNfaTM4Nl9saW51eCAodm9pZCk7CistZXh0ZXJuIGNvbnN0IHN0cnVjdCB0YXJnZXRfZGVzYyAqdGRlc2NfaTM4Nl9saW51eDsKKy0KKyAjZGVmaW5lIEZUX0NSX0VBWCAxNQorICNkZWZpbmUgRlRfQ1JfRUNYIDE0CisgI2RlZmluZSBGVF9DUl9FRFggMTMKK0BAIC0yNDcsMTAgKzI0NCw0MCBAQCBpbml0aWFsaXplX2Zhc3RfdHJhY2Vwb2ludF90cmFtcG9saW5lX2J1ZmZlciAodm9pZCkKKyAgICAgfQorIH0KKworKy8qIFJldHVybiB0YXJnZXRfZGVzYyB0byB1c2UgZm9yIElQQSwgZ2l2ZW4gdGhlIHRkZXNjIGluZGV4IHBhc3NlZCBieQorKyAgIGdkYnNlcnZlci4gICovCisrCisrY29uc3Qgc3RydWN0IHRhcmdldF9kZXNjICoKKytnZXRfaXBhX3RkZXNjIChpbnQgaWR4KQorK3sKKysgIHN3aXRjaCAoaWR4KQorKyAgICB7CisrICAgIGNhc2UgWDg2X1RERVNDX01NWDoKKysgICAgICByZXR1cm4gdGRlc2NfaTM4Nl9tbXhfbGludXg7CisrICAgIGNhc2UgWDg2X1RERVNDX1NTRToKKysgICAgICByZXR1cm4gdGRlc2NfaTM4Nl9saW51eDsKKysgICAgY2FzZSBYODZfVERFU0NfQVZYOgorKyAgICAgIHJldHVybiB0ZGVzY19pMzg2X2F2eF9saW51eDsKKysgICAgY2FzZSBYODZfVERFU0NfTVBYOgorKyAgICAgIHJldHVybiB0ZGVzY19pMzg2X21weF9saW51eDsKKysgICAgY2FzZSBYODZfVERFU0NfQVZYX01QWDoKKysgICAgICByZXR1cm4gdGRlc2NfaTM4Nl9hdnhfbXB4X2xpbnV4OworKyAgICBjYXNlIFg4Nl9UREVTQ19BVlg1MTI6CisrICAgICAgcmV0dXJuIHRkZXNjX2kzODZfYXZ4NTEyX2xpbnV4OworKyAgICBkZWZhdWx0OgorKyAgICAgIGludGVybmFsX2Vycm9yIChfX0ZJTEVfXywgX19MSU5FX18sCisrCQkgICAgICAidW5rbm93biBpcGEgdGRlc2MgaW5kZXg6ICVkIiwgaWR4KTsKKysgICAgICByZXR1cm4gdGRlc2NfaTM4Nl9saW51eDsKKysgICAgfQorK30KKysKKyB2b2lkCisgaW5pdGlhbGl6ZV9sb3dfdHJhY2Vwb2ludCAodm9pZCkKKyB7CisrICBpbml0X3JlZ2lzdGVyc19pMzg2X21teF9saW51eCAoKTsKKyAgIGluaXRfcmVnaXN0ZXJzX2kzODZfbGludXggKCk7CistICBpcGFfdGRlc2MgPSB0ZGVzY19pMzg2X2xpbnV4OworKyAgaW5pdF9yZWdpc3RlcnNfaTM4Nl9hdnhfbGludXggKCk7CisrICBpbml0X3JlZ2lzdGVyc19pMzg2X21weF9saW51eCAoKTsKKysgIGluaXRfcmVnaXN0ZXJzX2kzODZfYXZ4NTEyX2xpbnV4ICgpOworICAgaW5pdGlhbGl6ZV9mYXN0X3RyYWNlcG9pbnRfdHJhbXBvbGluZV9idWZmZXIgKCk7CisgfQorZGlmZiAtLWdpdCBhL2dkYi9nZGJzZXJ2ZXIvbGludXgtbG93LmMgYi9nZGIvZ2Ric2VydmVyL2xpbnV4LWxvdy5jCitpbmRleCA4YjAyNWJkLi5hMTQyYzJjIDEwMDY0NAorLS0tIGEvZ2RiL2dkYnNlcnZlci9saW51eC1sb3cuYworKysrIGIvZ2RiL2dkYnNlcnZlci9saW51eC1sb3cuYworQEAgLTY0MzIsNiArNjQzMiwxNSBAQCBsaW51eF9zdXBwb3J0c19jYXRjaF9zeXNjYWxsICh2b2lkKQorIH0KKworIHN0YXRpYyBpbnQKKytsaW51eF9nZXRfaXBhX3RkZXNjX2lkeCAodm9pZCkKKyt7CisrICBpZiAodGhlX2xvd190YXJnZXQuZ2V0X2lwYV90ZGVzY19pZHggPT0gTlVMTCkKKysgICAgcmV0dXJuIDA7CisrCisrICByZXR1cm4gKCp0aGVfbG93X3RhcmdldC5nZXRfaXBhX3RkZXNjX2lkeCkgKCk7CisrfQorKworK3N0YXRpYyBpbnQKKyBsaW51eF9zdXBwb3J0c190cmFjZXBvaW50cyAodm9pZCkKKyB7CisgICBpZiAoKnRoZV9sb3dfdGFyZ2V0LnN1cHBvcnRzX3RyYWNlcG9pbnRzID09IE5VTEwpCitAQCAtNzQwOCw2ICs3NDE3LDcgQEAgc3RhdGljIHN0cnVjdCB0YXJnZXRfb3BzIGxpbnV4X3RhcmdldF9vcHMgPSB7CisgICBsaW51eF9icmVha3BvaW50X2tpbmRfZnJvbV9jdXJyZW50X3N0YXRlLAorICAgbGludXhfc3VwcG9ydHNfc29mdHdhcmVfc2luZ2xlX3N0ZXAsCisgICBsaW51eF9zdXBwb3J0c19jYXRjaF9zeXNjYWxsLAorKyAgbGludXhfZ2V0X2lwYV90ZGVzY19pZHgsCisgfTsKKworICNpZmRlZiBIQVZFX0xJTlVYX1JFR1NFVFMKK2RpZmYgLS1naXQgYS9nZGIvZ2Ric2VydmVyL2xpbnV4LWxvdy5oIGIvZ2RiL2dkYnNlcnZlci9saW51eC1sb3cuaAoraW5kZXggNGVjODU1MC4uZDQ5NDZjMSAxMDA2NDQKKy0tLSBhL2dkYi9nZGJzZXJ2ZXIvbGludXgtbG93LmgKKysrKyBiL2dkYi9nZGJzZXJ2ZXIvbGludXgtbG93LmgKK0BAIC0yNDYsNiArMjQ2LDkgQEAgc3RydWN0IGxpbnV4X3RhcmdldF9vcHMKKyAgICAgIGR1ZSB0byBTWVNDQUxMX1NJR1RSQVAuICAqLworICAgdm9pZCAoKmdldF9zeXNjYWxsX3RyYXBpbmZvKSAoc3RydWN0IHJlZ2NhY2hlICpyZWdjYWNoZSwKKyAJCQkJaW50ICpzeXNubywgaW50ICpzeXNyZXQpOworKworKyAgLyogU2VlIHRhcmdldC5oLiAgKi8KKysgIGludCAoKmdldF9pcGFfdGRlc2NfaWR4KSAodm9pZCk7CisgfTsKKworIGV4dGVybiBzdHJ1Y3QgbGludXhfdGFyZ2V0X29wcyB0aGVfbG93X3RhcmdldDsKK2RpZmYgLS1naXQgYS9nZGIvZ2Ric2VydmVyL2xpbnV4LXg4Ni1sb3cuYyBiL2dkYi9nZGJzZXJ2ZXIvbGludXgteDg2LWxvdy5jCitpbmRleCAwYzQ5NTRhLi4yNTM1OTU5IDEwMDY0NAorLS0tIGEvZ2RiL2dkYnNlcnZlci9saW51eC14ODYtbG93LmMKKysrKyBiL2dkYi9nZGJzZXJ2ZXIvbGludXgteDg2LWxvdy5jCitAQCAtNDUsNTcgKzQ1LDcgQEAKKyAjaW5jbHVkZSAibmF0L2xpbnV4LW5hdC5oIgorICNpbmNsdWRlICJuYXQveDg2LWxpbnV4LmgiCisgI2luY2x1ZGUgIm5hdC94ODYtbGludXgtZHJlZ3MuaCIKKy0KKy0jaWZkZWYgX194ODZfNjRfXworLS8qIERlZmluZWQgaW4gYXV0by1nZW5lcmF0ZWQgZmlsZSBhbWQ2NC1saW51eC5jLiAgKi8KKy12b2lkIGluaXRfcmVnaXN0ZXJzX2FtZDY0X2xpbnV4ICh2b2lkKTsKKy1leHRlcm4gY29uc3Qgc3RydWN0IHRhcmdldF9kZXNjICp0ZGVzY19hbWQ2NF9saW51eDsKKy0KKy0vKiBEZWZpbmVkIGluIGF1dG8tZ2VuZXJhdGVkIGZpbGUgYW1kNjQtYXZ4LWxpbnV4LmMuICAqLworLXZvaWQgaW5pdF9yZWdpc3RlcnNfYW1kNjRfYXZ4X2xpbnV4ICh2b2lkKTsKKy1leHRlcm4gY29uc3Qgc3RydWN0IHRhcmdldF9kZXNjICp0ZGVzY19hbWQ2NF9hdnhfbGludXg7CistCistLyogRGVmaW5lZCBpbiBhdXRvLWdlbmVyYXRlZCBmaWxlIGFtZDY0LWF2eDUxMi1saW51eC5jLiAgKi8KKy12b2lkIGluaXRfcmVnaXN0ZXJzX2FtZDY0X2F2eDUxMl9saW51eCAodm9pZCk7CistZXh0ZXJuIGNvbnN0IHN0cnVjdCB0YXJnZXRfZGVzYyAqdGRlc2NfYW1kNjRfYXZ4NTEyX2xpbnV4OworLQorLS8qIERlZmluZWQgaW4gYXV0by1nZW5lcmF0ZWQgZmlsZSBhbWQ2NC1tcHgtbGludXguYy4gICovCistdm9pZCBpbml0X3JlZ2lzdGVyc19hbWQ2NF9tcHhfbGludXggKHZvaWQpOworLWV4dGVybiBjb25zdCBzdHJ1Y3QgdGFyZ2V0X2Rlc2MgKnRkZXNjX2FtZDY0X21weF9saW51eDsKKy0KKy0vKiBEZWZpbmVkIGluIGF1dG8tZ2VuZXJhdGVkIGZpbGUgeDMyLWxpbnV4LmMuICAqLworLXZvaWQgaW5pdF9yZWdpc3RlcnNfeDMyX2xpbnV4ICh2b2lkKTsKKy1leHRlcm4gY29uc3Qgc3RydWN0IHRhcmdldF9kZXNjICp0ZGVzY194MzJfbGludXg7CistCistLyogRGVmaW5lZCBpbiBhdXRvLWdlbmVyYXRlZCBmaWxlIHgzMi1hdngtbGludXguYy4gICovCistdm9pZCBpbml0X3JlZ2lzdGVyc194MzJfYXZ4X2xpbnV4ICh2b2lkKTsKKy1leHRlcm4gY29uc3Qgc3RydWN0IHRhcmdldF9kZXNjICp0ZGVzY194MzJfYXZ4X2xpbnV4OworLQorLS8qIERlZmluZWQgaW4gYXV0by1nZW5lcmF0ZWQgZmlsZSB4MzItYXZ4NTEyLWxpbnV4LmMuICAqLworLXZvaWQgaW5pdF9yZWdpc3RlcnNfeDMyX2F2eDUxMl9saW51eCAodm9pZCk7CistZXh0ZXJuIGNvbnN0IHN0cnVjdCB0YXJnZXRfZGVzYyAqdGRlc2NfeDMyX2F2eDUxMl9saW51eDsKKy0KKy0jZW5kaWYKKy0KKy0vKiBEZWZpbmVkIGluIGF1dG8tZ2VuZXJhdGVkIGZpbGUgaTM4Ni1saW51eC5jLiAgKi8KKy12b2lkIGluaXRfcmVnaXN0ZXJzX2kzODZfbGludXggKHZvaWQpOworLWV4dGVybiBjb25zdCBzdHJ1Y3QgdGFyZ2V0X2Rlc2MgKnRkZXNjX2kzODZfbGludXg7CistCistLyogRGVmaW5lZCBpbiBhdXRvLWdlbmVyYXRlZCBmaWxlIGkzODYtbW14LWxpbnV4LmMuICAqLworLXZvaWQgaW5pdF9yZWdpc3RlcnNfaTM4Nl9tbXhfbGludXggKHZvaWQpOworLWV4dGVybiBjb25zdCBzdHJ1Y3QgdGFyZ2V0X2Rlc2MgKnRkZXNjX2kzODZfbW14X2xpbnV4OworLQorLS8qIERlZmluZWQgaW4gYXV0by1nZW5lcmF0ZWQgZmlsZSBpMzg2LWF2eC1saW51eC5jLiAgKi8KKy12b2lkIGluaXRfcmVnaXN0ZXJzX2kzODZfYXZ4X2xpbnV4ICh2b2lkKTsKKy1leHRlcm4gY29uc3Qgc3RydWN0IHRhcmdldF9kZXNjICp0ZGVzY19pMzg2X2F2eF9saW51eDsKKy0KKy0vKiBEZWZpbmVkIGluIGF1dG8tZ2VuZXJhdGVkIGZpbGUgaTM4Ni1hdng1MTItbGludXguYy4gICovCistdm9pZCBpbml0X3JlZ2lzdGVyc19pMzg2X2F2eDUxMl9saW51eCAodm9pZCk7CistZXh0ZXJuIGNvbnN0IHN0cnVjdCB0YXJnZXRfZGVzYyAqdGRlc2NfaTM4Nl9hdng1MTJfbGludXg7CistCistLyogRGVmaW5lZCBpbiBhdXRvLWdlbmVyYXRlZCBmaWxlIGkzODYtbXB4LWxpbnV4LmMuICAqLworLXZvaWQgaW5pdF9yZWdpc3RlcnNfaTM4Nl9tcHhfbGludXggKHZvaWQpOworLWV4dGVybiBjb25zdCBzdHJ1Y3QgdGFyZ2V0X2Rlc2MgKnRkZXNjX2kzODZfbXB4X2xpbnV4OworKyNpbmNsdWRlICJsaW51eC14ODYtdGRlc2MuaCIKKworICNpZmRlZiBfX3g4Nl82NF9fCisgc3RhdGljIHN0cnVjdCB0YXJnZXRfZGVzYyAqdGRlc2NfYW1kNjRfbGludXhfbm9feG1sOworQEAgLTgzOSw2ICs3ODksOSBAQCB4ODZfbGludXhfcmVhZF9kZXNjcmlwdGlvbiAodm9pZCkKKyAJCWNhc2UgWDg2X1hTVEFURV9BVlg1MTJfTUFTSzoKKyAJCSAgcmV0dXJuIHRkZXNjX2FtZDY0X2F2eDUxMl9saW51eDsKKworKwkJY2FzZSBYODZfWFNUQVRFX0FWWF9NUFhfTUFTSzoKKysJCSAgcmV0dXJuIHRkZXNjX2FtZDY0X2F2eF9tcHhfbGludXg7CisrCisgCQljYXNlIFg4Nl9YU1RBVEVfTVBYX01BU0s6CisgCQkgIHJldHVybiB0ZGVzY19hbWQ2NF9tcHhfbGludXg7CisKK0BAIC04ODYsNiArODM5LDkgQEAgeDg2X2xpbnV4X3JlYWRfZGVzY3JpcHRpb24gKHZvaWQpCisgCSAgICBjYXNlIChYODZfWFNUQVRFX01QWF9NQVNLKToKKyAJICAgICAgcmV0dXJuIHRkZXNjX2kzODZfbXB4X2xpbnV4OworCisrCSAgICBjYXNlIChYODZfWFNUQVRFX0FWWF9NUFhfTUFTSyk6CisrCSAgICAgIHJldHVybiB0ZGVzY19pMzg2X2F2eF9tcHhfbGludXg7CisrCisgCSAgICBjYXNlIChYODZfWFNUQVRFX0FWWF9NQVNLKToKKyAJICAgICAgcmV0dXJuIHRkZXNjX2kzODZfYXZ4X2xpbnV4OworCitAQCAtMjg5MSw2ICsyODQ3LDQyIEBAIHg4Nl9zdXBwb3J0c19oYXJkd2FyZV9zaW5nbGVfc3RlcCAodm9pZCkKKyAgIHJldHVybiAxOworIH0KKworK3N0YXRpYyBpbnQKKyt4ODZfZ2V0X2lwYV90ZGVzY19pZHggKHZvaWQpCisreworKyAgc3RydWN0IHJlZ2NhY2hlICpyZWdjYWNoZSA9IGdldF90aHJlYWRfcmVnY2FjaGUgKGN1cnJlbnRfdGhyZWFkLCAwKTsKKysgIGNvbnN0IHN0cnVjdCB0YXJnZXRfZGVzYyAqdGRlc2MgPSByZWdjYWNoZS0+dGRlc2M7CisrCisrI2lmZGVmIF9feDg2XzY0X18KKysgIGlmICh0ZGVzYyA9PSB0ZGVzY19hbWQ2NF9saW51eCB8fCB0ZGVzYyA9PSB0ZGVzY19hbWQ2NF9saW51eF9ub194bWwKKysgICAgICB8fCB0ZGVzYyA9PSB0ZGVzY194MzJfbGludXgpCisrICAgIHJldHVybiBYODZfVERFU0NfU1NFOworKyAgaWYgKHRkZXNjID09IHRkZXNjX2FtZDY0X2F2eF9saW51eCB8fCB0ZGVzYyA9PSB0ZGVzY194MzJfYXZ4X2xpbnV4KQorKyAgICByZXR1cm4gWDg2X1RERVNDX0FWWDsKKysgIGlmICh0ZGVzYyA9PSB0ZGVzY19hbWQ2NF9tcHhfbGludXgpCisrICAgIHJldHVybiBYODZfVERFU0NfTVBYOworKyAgaWYgKHRkZXNjID09IHRkZXNjX2FtZDY0X2F2eF9tcHhfbGludXgpCisrICAgIHJldHVybiBYODZfVERFU0NfQVZYX01QWDsKKysgIGlmICh0ZGVzYyA9PSB0ZGVzY19hbWQ2NF9hdng1MTJfbGludXggfHwgdGRlc2MgPT0gdGRlc2NfeDMyX2F2eDUxMl9saW51eCkKKysgICAgcmV0dXJuIFg4Nl9UREVTQ19BVlg1MTI7CisrI2VuZGlmCisrCisrICBpZiAodGRlc2MgPT0gdGRlc2NfaTM4Nl9tbXhfbGludXgpCisrICAgIHJldHVybiBYODZfVERFU0NfTU1YOworKyAgaWYgKHRkZXNjID09IHRkZXNjX2kzODZfbGludXggfHwgdGRlc2MgPT0gdGRlc2NfaTM4Nl9saW51eF9ub194bWwpCisrICAgIHJldHVybiBYODZfVERFU0NfU1NFOworKyAgaWYgKHRkZXNjID09IHRkZXNjX2kzODZfYXZ4X2xpbnV4KQorKyAgICByZXR1cm4gWDg2X1RERVNDX0FWWDsKKysgIGlmICh0ZGVzYyA9PSB0ZGVzY19pMzg2X21weF9saW51eCkKKysgICAgcmV0dXJuIFg4Nl9UREVTQ19NUFg7CisrICBpZiAodGRlc2MgPT0gdGRlc2NfaTM4Nl9hdnhfbXB4X2xpbnV4KQorKyAgICByZXR1cm4gWDg2X1RERVNDX0FWWF9NUFg7CisrICBpZiAodGRlc2MgPT0gdGRlc2NfaTM4Nl9hdng1MTJfbGludXgpCisrICAgIHJldHVybiBYODZfVERFU0NfQVZYNTEyOworKworKyAgcmV0dXJuIDA7CisrfQorKworIC8qIFRoaXMgaXMgaW5pdGlhbGl6ZWQgYXNzdW1pbmcgYW4gYW1kNjQgdGFyZ2V0LgorICAgIHg4Nl9hcmNoX3NldHVwIHdpbGwgY29ycmVjdCBpdCBmb3IgaTM4NiBvciBhbWQ2NCB0YXJnZXRzLiAgKi8KKworQEAgLTI5MzQsNiArMjkyNiw3IEBAIHN0cnVjdCBsaW51eF90YXJnZXRfb3BzIHRoZV9sb3dfdGFyZ2V0ID0KKyAgIE5VTEwsIC8qIGJyZWFrcG9pbnRfa2luZF9mcm9tX2N1cnJlbnRfc3RhdGUgKi8KKyAgIHg4Nl9zdXBwb3J0c19oYXJkd2FyZV9zaW5nbGVfc3RlcCwKKyAgIHg4Nl9nZXRfc3lzY2FsbF90cmFwaW5mbywKKysgIHg4Nl9nZXRfaXBhX3RkZXNjX2lkeCwKKyB9OworCisgdm9pZAorQEAgLTI5NDUsNiArMjkzOCw3IEBAIGluaXRpYWxpemVfbG93X2FyY2ggKHZvaWQpCisgICBpbml0X3JlZ2lzdGVyc19hbWQ2NF9hdnhfbGludXggKCk7CisgICBpbml0X3JlZ2lzdGVyc19hbWQ2NF9hdng1MTJfbGludXggKCk7CisgICBpbml0X3JlZ2lzdGVyc19hbWQ2NF9tcHhfbGludXggKCk7CisrICBpbml0X3JlZ2lzdGVyc19hbWQ2NF9hdnhfbXB4X2xpbnV4ICgpOworCisgICBpbml0X3JlZ2lzdGVyc194MzJfbGludXggKCk7CisgICBpbml0X3JlZ2lzdGVyc194MzJfYXZ4X2xpbnV4ICgpOworQEAgLTI5NTksNiArMjk1Myw3IEBAIGluaXRpYWxpemVfbG93X2FyY2ggKHZvaWQpCisgICBpbml0X3JlZ2lzdGVyc19pMzg2X2F2eF9saW51eCAoKTsKKyAgIGluaXRfcmVnaXN0ZXJzX2kzODZfYXZ4NTEyX2xpbnV4ICgpOworICAgaW5pdF9yZWdpc3RlcnNfaTM4Nl9tcHhfbGludXggKCk7CisrICBpbml0X3JlZ2lzdGVyc19pMzg2X2F2eF9tcHhfbGludXggKCk7CisKKyAgIHRkZXNjX2kzODZfbGludXhfbm9feG1sID0gWE5FVyAoc3RydWN0IHRhcmdldF9kZXNjKTsKKyAgIGNvcHlfdGFyZ2V0X2Rlc2NyaXB0aW9uICh0ZGVzY19pMzg2X2xpbnV4X25vX3htbCwgdGRlc2NfaTM4Nl9saW51eCk7CitkaWZmIC0tZ2l0IGEvZ2RiL2dkYnNlcnZlci9saW51eC14ODYtdGRlc2MuaCBiL2dkYi9nZGJzZXJ2ZXIvbGludXgteDg2LXRkZXNjLmgKK25ldyBmaWxlIG1vZGUgMTAwNjQ0CitpbmRleCAwMDAwMDAwLi43MjBmNTBjCistLS0gL2Rldi9udWxsCisrKysgYi9nZGIvZ2Ric2VydmVyL2xpbnV4LXg4Ni10ZGVzYy5oCitAQCAtMCwwICsxLDk4IEBACisrLyogTG93IGxldmVsIHN1cHBvcnQgZm9yIHg4NiAoaTM4NiBhbmQgeDg2LTY0KSwgc2hhcmVkIGJldHdlZW4gZ2Ric2VydmVyCisrICAgYW5kIElQQS4KKysKKysgICBDb3B5cmlnaHQgKEMpIDIwMTYgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisrCisrICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgR0RCLgorKworKyAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisrICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKysgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvcgorKyAgIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisrCisrICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisrICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKysgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisrICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKysKKysgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorKyAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiAgSWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LiAgKi8KKysKKysvKiBOb3RlOiBzaW5jZSBJUEEgb2J2aW91c2x5IGtub3dzIHdoYXQgQUJJIGl0J3MgcnVubmluZyBvbiAoaTM4NiB2cyB4ODZfNjQKKysgICB2cyB4MzIpLCBpdCdzIHN1ZmZpY2llbnQgdG8gcGFzcyBvbmx5IHRoZSByZWdpc3RlciBzZXQgaGVyZS4gIFRoaXMsCisrICAgdG9nZXRoZXIgd2l0aCB0aGUgQUJJIGtub3duIGF0IElQQSBjb21waWxlIHRpbWUsIG1hcHMgdG8gYSB0ZGVzYy4gICovCisrCisrZW51bSB4ODZfbGludXhfdGRlc2MgeworKyAgWDg2X1RERVNDX01NWCA9IDAsCisrICBYODZfVERFU0NfU1NFID0gMSwKKysgIFg4Nl9UREVTQ19BVlggPSAyLAorKyAgWDg2X1RERVNDX01QWCA9IDMsCisrICBYODZfVERFU0NfQVZYX01QWCA9IDQsCisrICBYODZfVERFU0NfQVZYNTEyID0gNSwKKyt9OworKworKyNpZmRlZiBfX3g4Nl82NF9fCisrCisrI2lmIGRlZmluZWQgX19MUDY0X18gIHx8ICFkZWZpbmVkIElOX1BST0NFU1NfQUdFTlQKKysvKiBEZWZpbmVkIGluIGF1dG8tZ2VuZXJhdGVkIGZpbGUgYW1kNjQtbGludXguYy4gICovCisrdm9pZCBpbml0X3JlZ2lzdGVyc19hbWQ2NF9saW51eCAodm9pZCk7CisrZXh0ZXJuIGNvbnN0IHN0cnVjdCB0YXJnZXRfZGVzYyAqdGRlc2NfYW1kNjRfbGludXg7CisrCisrLyogRGVmaW5lZCBpbiBhdXRvLWdlbmVyYXRlZCBmaWxlIGFtZDY0LWF2eC1saW51eC5jLiAgKi8KKyt2b2lkIGluaXRfcmVnaXN0ZXJzX2FtZDY0X2F2eF9saW51eCAodm9pZCk7CisrZXh0ZXJuIGNvbnN0IHN0cnVjdCB0YXJnZXRfZGVzYyAqdGRlc2NfYW1kNjRfYXZ4X2xpbnV4OworKworKy8qIERlZmluZWQgaW4gYXV0by1nZW5lcmF0ZWQgZmlsZSBhbWQ2NC1hdng1MTItbGludXguYy4gICovCisrdm9pZCBpbml0X3JlZ2lzdGVyc19hbWQ2NF9hdng1MTJfbGludXggKHZvaWQpOworK2V4dGVybiBjb25zdCBzdHJ1Y3QgdGFyZ2V0X2Rlc2MgKnRkZXNjX2FtZDY0X2F2eDUxMl9saW51eDsKKysKKysvKiBEZWZpbmVkIGluIGF1dG8tZ2VuZXJhdGVkIGZpbGUgYW1kNjQtYXZ4LW1weC1saW51eC5jLiAgKi8KKyt2b2lkIGluaXRfcmVnaXN0ZXJzX2FtZDY0X2F2eF9tcHhfbGludXggKHZvaWQpOworK2V4dGVybiBjb25zdCBzdHJ1Y3QgdGFyZ2V0X2Rlc2MgKnRkZXNjX2FtZDY0X2F2eF9tcHhfbGludXg7CisrCisrLyogRGVmaW5lZCBpbiBhdXRvLWdlbmVyYXRlZCBmaWxlIGFtZDY0LW1weC1saW51eC5jLiAgKi8KKyt2b2lkIGluaXRfcmVnaXN0ZXJzX2FtZDY0X21weF9saW51eCAodm9pZCk7CisrZXh0ZXJuIGNvbnN0IHN0cnVjdCB0YXJnZXRfZGVzYyAqdGRlc2NfYW1kNjRfbXB4X2xpbnV4OworKyNlbmRpZgorKworKyNpZiBkZWZpbmVkIF9fSUxQMzJfXyB8fCAhZGVmaW5lZCBJTl9QUk9DRVNTX0FHRU5UCisrLyogRGVmaW5lZCBpbiBhdXRvLWdlbmVyYXRlZCBmaWxlIHgzMi1saW51eC5jLiAgKi8KKyt2b2lkIGluaXRfcmVnaXN0ZXJzX3gzMl9saW51eCAodm9pZCk7CisrZXh0ZXJuIGNvbnN0IHN0cnVjdCB0YXJnZXRfZGVzYyAqdGRlc2NfeDMyX2xpbnV4OworKworKy8qIERlZmluZWQgaW4gYXV0by1nZW5lcmF0ZWQgZmlsZSB4MzItYXZ4LWxpbnV4LmMuICAqLworK3ZvaWQgaW5pdF9yZWdpc3RlcnNfeDMyX2F2eF9saW51eCAodm9pZCk7CisrZXh0ZXJuIGNvbnN0IHN0cnVjdCB0YXJnZXRfZGVzYyAqdGRlc2NfeDMyX2F2eF9saW51eDsKKysKKysvKiBEZWZpbmVkIGluIGF1dG8tZ2VuZXJhdGVkIGZpbGUgeDMyLWF2eDUxMi1saW51eC5jLiAgKi8KKyt2b2lkIGluaXRfcmVnaXN0ZXJzX3gzMl9hdng1MTJfbGludXggKHZvaWQpOworK2V4dGVybiBjb25zdCBzdHJ1Y3QgdGFyZ2V0X2Rlc2MgKnRkZXNjX3gzMl9hdng1MTJfbGludXg7CisrI2VuZGlmCisrCisrI2VuZGlmCisrCisrI2lmIGRlZmluZWQgX19pMzg2X18gfHwgIWRlZmluZWQgSU5fUFJPQ0VTU19BR0VOVAorKy8qIERlZmluZWQgaW4gYXV0by1nZW5lcmF0ZWQgZmlsZSBpMzg2LWxpbnV4LmMuICAqLworK3ZvaWQgaW5pdF9yZWdpc3RlcnNfaTM4Nl9saW51eCAodm9pZCk7CisrZXh0ZXJuIGNvbnN0IHN0cnVjdCB0YXJnZXRfZGVzYyAqdGRlc2NfaTM4Nl9saW51eDsKKysKKysvKiBEZWZpbmVkIGluIGF1dG8tZ2VuZXJhdGVkIGZpbGUgaTM4Ni1tbXgtbGludXguYy4gICovCisrdm9pZCBpbml0X3JlZ2lzdGVyc19pMzg2X21teF9saW51eCAodm9pZCk7CisrZXh0ZXJuIGNvbnN0IHN0cnVjdCB0YXJnZXRfZGVzYyAqdGRlc2NfaTM4Nl9tbXhfbGludXg7CisrCisrLyogRGVmaW5lZCBpbiBhdXRvLWdlbmVyYXRlZCBmaWxlIGkzODYtYXZ4LWxpbnV4LmMuICAqLworK3ZvaWQgaW5pdF9yZWdpc3RlcnNfaTM4Nl9hdnhfbGludXggKHZvaWQpOworK2V4dGVybiBjb25zdCBzdHJ1Y3QgdGFyZ2V0X2Rlc2MgKnRkZXNjX2kzODZfYXZ4X2xpbnV4OworKworKy8qIERlZmluZWQgaW4gYXV0by1nZW5lcmF0ZWQgZmlsZSBpMzg2LWF2eC1tcHgtbGludXguYy4gICovCisrdm9pZCBpbml0X3JlZ2lzdGVyc19pMzg2X2F2eF9tcHhfbGludXggKHZvaWQpOworK2V4dGVybiBjb25zdCBzdHJ1Y3QgdGFyZ2V0X2Rlc2MgKnRkZXNjX2kzODZfYXZ4X21weF9saW51eDsKKysKKysvKiBEZWZpbmVkIGluIGF1dG8tZ2VuZXJhdGVkIGZpbGUgaTM4Ni1hdng1MTItbGludXguYy4gICovCisrdm9pZCBpbml0X3JlZ2lzdGVyc19pMzg2X2F2eDUxMl9saW51eCAodm9pZCk7CisrZXh0ZXJuIGNvbnN0IHN0cnVjdCB0YXJnZXRfZGVzYyAqdGRlc2NfaTM4Nl9hdng1MTJfbGludXg7CisrCisrLyogRGVmaW5lZCBpbiBhdXRvLWdlbmVyYXRlZCBmaWxlIGkzODYtbXB4LWxpbnV4LmMuICAqLworK3ZvaWQgaW5pdF9yZWdpc3RlcnNfaTM4Nl9tcHhfbGludXggKHZvaWQpOworK2V4dGVybiBjb25zdCBzdHJ1Y3QgdGFyZ2V0X2Rlc2MgKnRkZXNjX2kzODZfbXB4X2xpbnV4OworKyNlbmRpZgorZGlmZiAtLWdpdCBhL2dkYi9nZGJzZXJ2ZXIvdGFyZ2V0LmggYi9nZGIvZ2Ric2VydmVyL3RhcmdldC5oCitpbmRleCA1YWYyMDUxLi40YzE0YzIwIDEwMDY0NAorLS0tIGEvZ2RiL2dkYnNlcnZlci90YXJnZXQuaAorKysrIGIvZ2RiL2dkYnNlcnZlci90YXJnZXQuaAorQEAgLTQ3MSw2ICs0NzEsOSBAQCBzdHJ1Y3QgdGFyZ2V0X29wcworICAgLyogUmV0dXJuIDEgaWYgdGhlIHRhcmdldCBzdXBwb3J0cyBjYXRjaCBzeXNjYWxsLCAwIChvciBsZWF2ZSB0aGUKKyAgICAgIGNhbGxiYWNrIE5VTEwpIG90aGVyd2lzZS4gICovCisgICBpbnQgKCpzdXBwb3J0c19jYXRjaF9zeXNjYWxsKSAodm9pZCk7CisrCisrICAvKiBSZXR1cm4gdGRlc2MgaW5kZXggZm9yIElQQS4gICovCisrICBpbnQgKCpnZXRfaXBhX3RkZXNjX2lkeCkgKHZvaWQpOworIH07CisKKyBleHRlcm4gc3RydWN0IHRhcmdldF9vcHMgKnRoZV90YXJnZXQ7CitAQCAtNTUwLDYgKzU1MywxMCBAQCBpbnQga2lsbF9pbmZlcmlvciAoaW50KTsKKyAgICh0aGVfdGFyZ2V0LT5zdXBwb3J0c19jYXRjaF9zeXNjYWxsID8JCQlcCisgICAgKCp0aGVfdGFyZ2V0LT5zdXBwb3J0c19jYXRjaF9zeXNjYWxsKSAoKSA6IDApCisKKysjZGVmaW5lIHRhcmdldF9nZXRfaXBhX3RkZXNjX2lkeCgpCQkJXAorKyAgKHRoZV90YXJnZXQtPmdldF9pcGFfdGRlc2NfaWR4CQkJXAorKyAgID8gKCp0aGVfdGFyZ2V0LT5nZXRfaXBhX3RkZXNjX2lkeCkgKCkgOiAwKQorKworICNkZWZpbmUgdGFyZ2V0X3N1cHBvcnRzX3RyYWNlcG9pbnRzKCkJCQlcCisgICAodGhlX3RhcmdldC0+c3VwcG9ydHNfdHJhY2Vwb2ludHMJCQlcCisgICAgPyAoKnRoZV90YXJnZXQtPnN1cHBvcnRzX3RyYWNlcG9pbnRzKSAoKSA6IDApCitkaWZmIC0tZ2l0IGEvZ2RiL2dkYnNlcnZlci90cmFjZXBvaW50LmMgYi9nZGIvZ2Ric2VydmVyL3RyYWNlcG9pbnQuYworaW5kZXggMDY3MTk5OS4uY2M4NjY3NyAxMDA2NDQKKy0tLSBhL2dkYi9nZGJzZXJ2ZXIvdHJhY2Vwb2ludC5jCisrKysgYi9nZGIvZ2Ric2VydmVyL3RyYWNlcG9pbnQuYworQEAgLTEzNCw2ICsxMzQsNyBAQCB0cmFjZV92ZGVidWcgKGNvbnN0IGNoYXIgKmZtdCwgLi4uKQorICMgZGVmaW5lIHVzdF9sb2FkZWQgSVBBX1NZTV9FWFBPUlRFRF9OQU1FICh1c3RfbG9hZGVkKQorICMgZGVmaW5lIGhlbHBlcl90aHJlYWRfaWQgSVBBX1NZTV9FWFBPUlRFRF9OQU1FIChoZWxwZXJfdGhyZWFkX2lkKQorICMgZGVmaW5lIGNtZF9idWYgSVBBX1NZTV9FWFBPUlRFRF9OQU1FIChjbWRfYnVmKQorKyMgZGVmaW5lIGlwYV90ZGVzY19pZHggSVBBX1NZTV9FWFBPUlRFRF9OQU1FIChpcGFfdGRlc2NfaWR4KQorICNlbmRpZgorCisgI2lmbmRlZiBJTl9QUk9DRVNTX0FHRU5UCitAQCAtMTcxLDYgKzE3Miw3IEBAIHN0cnVjdCBpcGFfc3ltX2FkZHJlc3NlcworICAgQ09SRV9BRERSIGFkZHJfZ2V0X3RyYWNlX3N0YXRlX3ZhcmlhYmxlX3ZhbHVlOworICAgQ09SRV9BRERSIGFkZHJfc2V0X3RyYWNlX3N0YXRlX3ZhcmlhYmxlX3ZhbHVlOworICAgQ09SRV9BRERSIGFkZHJfdXN0X2xvYWRlZDsKKysgIENPUkVfQUREUiBhZGRyX2lwYV90ZGVzY19pZHg7CisgfTsKKworIHN0YXRpYyBzdHJ1Y3QKK0BAIC0yMDcsNiArMjA5LDcgQEAgc3RhdGljIHN0cnVjdAorICAgSVBBX1NZTShnZXRfdHJhY2Vfc3RhdGVfdmFyaWFibGVfdmFsdWUpLAorICAgSVBBX1NZTShzZXRfdHJhY2Vfc3RhdGVfdmFyaWFibGVfdmFsdWUpLAorICAgSVBBX1NZTSh1c3RfbG9hZGVkKSwKKysgIElQQV9TWU0oaXBhX3RkZXNjX2lkeCksCisgfTsKKworIHN0YXRpYyBzdHJ1Y3QgaXBhX3N5bV9hZGRyZXNzZXMgaXBhX3N5bV9hZGRyczsKK0BAIC0zMjMxLDYgKzMyMzQsMTEgQEAgY21kX3F0c3RhcnQgKGNoYXIgKnBhY2tldCkKKworICAgKnBhY2tldCA9ICdcMCc7CisKKysgIC8qIFRlbGwgSVBBIGFib3V0IHRoZSBjb3JyZWN0IHRkZXNjLiAgKi8KKysgIGlmICh3cml0ZV9pbmZlcmlvcl9pbnRlZ2VyIChpcGFfc3ltX2FkZHJzLmFkZHJfaXBhX3RkZXNjX2lkeCwKKysJCQkgICAgICB0YXJnZXRfZ2V0X2lwYV90ZGVzY19pZHggKCkpKQorKyAgICBlcnJvciAoIkVycm9yIHNldHRpbmcgaXBhX3RkZXNjX2lkeCB2YXJpYWJsZSBpbiBsaWIiKTsKKysKKyAgIC8qIFN0YXJ0IG91dCBlbXB0eS4gICovCisgICBpZiAoYWdlbnRfbG9hZGVkX3AgKCkpCisgICAgIHdyaXRlX2luZmVyaW9yX2RhdGFfcHRyIChpcGFfc3ltX2FkZHJzLmFkZHJfdHJhY2Vwb2ludHMsIDApOworQEAgLTQ3MTQsMTkgKzQ3MjIsMjAgQEAgY29sbGVjdF9kYXRhX2F0X3N0ZXAgKHN0cnVjdCB0cmFjZXBvaW50X2hpdF9jdHggKmN0eCwKKyAjZW5kaWYKKworICNpZmRlZiBJTl9QUk9DRVNTX0FHRU5UCistLyogVGhlIHRhcmdldCBkZXNjcmlwdGlvbiB1c2VkIGJ5IHRoZSBJUEEuICBHaXZlbiB0aGF0IHRoZSBJUEEgbGlicmFyeQorLSAgIGlzIGJ1aWx0IGZvciBhIHNwZWNpZmljIGFyY2hpdGVjdHVyZSB0aGF0IGlzIGxvYWRlZCBpbnRvIHRoZQorLSAgIGluZmVyaW9yLCB0aGVyZSBvbmx5IG5lZWRzIHRvIGJlIG9uZSBzdWNoIGRlc2NyaXB0aW9uIHBlcgorLSAgIGJ1aWxkLiAgKi8KKy1jb25zdCBzdHJ1Y3QgdGFyZ2V0X2Rlc2MgKmlwYV90ZGVzYzsKKysvKiBUaGUgdGFyZ2V0IGRlc2NyaXB0aW9uIGluZGV4IGZvciBJUEEuICBQYXNzZWQgZnJvbSBnZGJzZXJ2ZXIsIHVzZWQKKysgICB0byBzZWxlY3QgaXBhX3RkZXNjLiAgKi8KKytFWFRFUk5fQ19QVVNICisrSVBfQUdFTlRfRVhQT1JUX1ZBUiBpbnQgaXBhX3RkZXNjX2lkeDsKKytFWFRFUk5fQ19QT1AKKyAjZW5kaWYKKworIHN0YXRpYyBzdHJ1Y3QgcmVnY2FjaGUgKgorIGdldF9jb250ZXh0X3JlZ2NhY2hlIChzdHJ1Y3QgdHJhY2Vwb2ludF9oaXRfY3R4ICpjdHgpCisgeworICAgc3RydWN0IHJlZ2NhY2hlICpyZWdjYWNoZSA9IE5VTEw7CistCisgI2lmZGVmIElOX1BST0NFU1NfQUdFTlQKKysgIGNvbnN0IHN0cnVjdCB0YXJnZXRfZGVzYyAqaXBhX3RkZXNjID0gZ2V0X2lwYV90ZGVzYyAoaXBhX3RkZXNjX2lkeCk7CisrCisgICBpZiAoY3R4LT50eXBlID09IGZhc3RfdHJhY2Vwb2ludCkKKyAgICAgeworICAgICAgIHN0cnVjdCBmYXN0X3RyYWNlcG9pbnRfY3R4ICpmY3R4ID0gKHN0cnVjdCBmYXN0X3RyYWNlcG9pbnRfY3R4ICopIGN0eDsKK0BAIC01Nzk5LDExICs1ODA4LDEzIEBAIElQX0FHRU5UX0VYUE9SVF9GVU5DIHZvaWQKKyBnZGJfY29sbGVjdCAoc3RydWN0IHRyYWNlcG9pbnQgKnRwb2ludCwgdW5zaWduZWQgY2hhciAqcmVncykKKyB7CisgICBzdHJ1Y3QgZmFzdF90cmFjZXBvaW50X2N0eCBjdHg7CisrICBjb25zdCBzdHJ1Y3QgdGFyZ2V0X2Rlc2MgKmlwYV90ZGVzYzsKKworICAgLyogRG9uJ3QgZG8gYW55dGhpbmcgdW50aWwgdGhlIHRyYWNlIHJ1biBpcyBjb21wbGV0ZWx5IHNldCB1cC4gICovCisgICBpZiAoIXRyYWNpbmcpCisgICAgIHJldHVybjsKKworKyAgaXBhX3RkZXNjID0gZ2V0X2lwYV90ZGVzYyAoaXBhX3RkZXNjX2lkeCk7CisgICBjdHguYmFzZS50eXBlID0gZmFzdF90cmFjZXBvaW50OworICAgY3R4LnJlZ3MgPSByZWdzOworICAgY3R4LnJlZ2NhY2hlX2luaXR0ZWQgPSAwOworQEAgLTY2NjAsNiArNjY3MSw3IEBAIGdkYl9wcm9iZSAoY29uc3Qgc3RydWN0IG1hcmtlciAqbWRhdGEsIHZvaWQgKnByb2JlX3ByaXZhdGUsCisgeworICAgc3RydWN0IHRyYWNlcG9pbnQgKnRwb2ludDsKKyAgIHN0cnVjdCBzdGF0aWNfdHJhY2Vwb2ludF9jdHggY3R4OworKyAgY29uc3Qgc3RydWN0IHRhcmdldF9kZXNjICppcGFfdGRlc2M7CisKKyAgIC8qIERvbid0IGRvIGFueXRoaW5nIHVudGlsIHRoZSB0cmFjZSBydW4gaXMgY29tcGxldGVseSBzZXQgdXAuICAqLworICAgaWYgKCF0cmFjaW5nKQorQEAgLTY2NjgsNiArNjY4MCw3IEBAIGdkYl9wcm9iZSAoY29uc3Qgc3RydWN0IG1hcmtlciAqbWRhdGEsIHZvaWQgKnByb2JlX3ByaXZhdGUsCisgICAgICAgcmV0dXJuOworICAgICB9CisKKysgIGlwYV90ZGVzYyA9IGdldF9pcGFfdGRlc2MgKGlwYV90ZGVzY19pZHgpOworICAgY3R4LmJhc2UudHlwZSA9IHN0YXRpY190cmFjZXBvaW50OworICAgY3R4LnJlZ2NhY2hlX2luaXR0ZWQgPSAwOworICAgY3R4LnJlZ3MgPSByZWdzOworZGlmZiAtLWdpdCBhL2dkYi9nZGJzZXJ2ZXIvdHJhY2Vwb2ludC5oIGIvZ2RiL2dkYnNlcnZlci90cmFjZXBvaW50LmgKK2luZGV4IGNhYjg5Y2YuLmUzMGY0ZjcgMTAwNjQ0CistLS0gYS9nZGIvZ2Ric2VydmVyL3RyYWNlcG9pbnQuaAorKysrIGIvZ2RiL2dkYnNlcnZlci90cmFjZXBvaW50LmgKK0BAIC0xMjQsNiArMTI0LDcgQEAgaW50IGhhbmRsZV90cmFjZXBvaW50X2JrcHRzIChzdHJ1Y3QgdGhyZWFkX2luZm8gKnRpbmZvLCBDT1JFX0FERFIgc3RvcF9wYyk7CisKKyAjaWZkZWYgSU5fUFJPQ0VTU19BR0VOVAorIHZvaWQgaW5pdGlhbGl6ZV9sb3dfdHJhY2Vwb2ludCAodm9pZCk7CisrY29uc3Qgc3RydWN0IHRhcmdldF9kZXNjICpnZXRfaXBhX3RkZXNjIChpbnQgaWR4KTsKKyB2b2lkIHN1cHBseV9mYXN0X3RyYWNlcG9pbnRfcmVnaXN0ZXJzIChzdHJ1Y3QgcmVnY2FjaGUgKnJlZ2NhY2hlLAorIAkJCQkgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqcmVncyk7Cisgdm9pZCBzdXBwbHlfc3RhdGljX3RyYWNlcG9pbnRfcmVnaXN0ZXJzIChzdHJ1Y3QgcmVnY2FjaGUgKnJlZ2NhY2hlLAorQEAgLTEzMSw5ICsxMzIsNiBAQCB2b2lkIHN1cHBseV9zdGF0aWNfdHJhY2Vwb2ludF9yZWdpc3RlcnMgKHN0cnVjdCByZWdjYWNoZSAqcmVnY2FjaGUsCisgCQkJCQkgQ09SRV9BRERSIHBjKTsKKyB2b2lkIHNldF90cmFtcG9saW5lX2J1ZmZlcl9zcGFjZSAoQ09SRV9BRERSIGJlZ2luLCBDT1JFX0FERFIgZW5kLAorIAkJCQkgIGNoYXIgKmVycm1zZyk7CistCistZXh0ZXJuIGNvbnN0IHN0cnVjdCB0YXJnZXRfZGVzYyAqaXBhX3RkZXNjOworLQorICNlbHNlCisgdm9pZCBzdG9wX3RyYWNpbmcgKHZvaWQpOworCitkaWZmIC0tZ2l0IGEvZ2RiL2kzODYtbGludXgtdGRlcC5jIGIvZ2RiL2kzODYtbGludXgtdGRlcC5jCitpbmRleCBhZjM5ZTc4Li5kZjQ3ZWZkIDEwMDY0NAorLS0tIGEvZ2RiL2kzODYtbGludXgtdGRlcC5jCisrKysgYi9nZGIvaTM4Ni1saW51eC10ZGVwLmMKK0BAIC00Nyw2ICs0Nyw3IEBACisgI2luY2x1ZGUgImZlYXR1cmVzL2kzODYvaTM4Ni1saW51eC5jIgorICNpbmNsdWRlICJmZWF0dXJlcy9pMzg2L2kzODYtbW14LWxpbnV4LmMiCisgI2luY2x1ZGUgImZlYXR1cmVzL2kzODYvaTM4Ni1tcHgtbGludXguYyIKKysjaW5jbHVkZSAiZmVhdHVyZXMvaTM4Ni9pMzg2LWF2eC1tcHgtbGludXguYyIKKyAjaW5jbHVkZSAiZmVhdHVyZXMvaTM4Ni9pMzg2LWF2eC1saW51eC5jIgorICNpbmNsdWRlICJmZWF0dXJlcy9pMzg2L2kzODYtYXZ4NTEyLWxpbnV4LmMiCisKK0BAIC02MzAsNiArNjMxLDggQEAgaTM4Nl9saW51eF9jb3JlX3JlYWRfZGVzY3JpcHRpb24gKHN0cnVjdCBnZGJhcmNoICpnZGJhcmNoLAorICAgICAgIHJldHVybiB0ZGVzY19pMzg2X2F2eDUxMl9saW51eDsKKyAgICAgY2FzZSBYODZfWFNUQVRFX01QWF9NQVNLOgorICAgICAgIHJldHVybiB0ZGVzY19pMzg2X21weF9saW51eDsKKysgICAgY2FzZSBYODZfWFNUQVRFX0FWWF9NUFhfTUFTSzoKKysgICAgICByZXR1cm4gdGRlc2NfaTM4Nl9hdnhfbXB4X2xpbnV4OworICAgICBjYXNlIFg4Nl9YU1RBVEVfQVZYX01BU0s6CisgICAgICAgcmV0dXJuIHRkZXNjX2kzODZfYXZ4X2xpbnV4OworICAgICBjYXNlIFg4Nl9YU1RBVEVfU1NFX01BU0s6CitAQCAtMTAxOCw1ICsxMDIxLDYgQEAgX2luaXRpYWxpemVfaTM4Nl9saW51eF90ZGVwICh2b2lkKQorICAgaW5pdGlhbGl6ZV90ZGVzY19pMzg2X21teF9saW51eCAoKTsKKyAgIGluaXRpYWxpemVfdGRlc2NfaTM4Nl9hdnhfbGludXggKCk7CisgICBpbml0aWFsaXplX3RkZXNjX2kzODZfbXB4X2xpbnV4ICgpOworKyAgaW5pdGlhbGl6ZV90ZGVzY19pMzg2X2F2eF9tcHhfbGludXggKCk7CisgICBpbml0aWFsaXplX3RkZXNjX2kzODZfYXZ4NTEyX2xpbnV4ICgpOworIH0KK2RpZmYgLS1naXQgYS9nZGIvaTM4Ni1saW51eC10ZGVwLmggYi9nZGIvaTM4Ni1saW51eC10ZGVwLmgKK2luZGV4IGVjYzllMzEuLjBjYjBjNGQgMTAwNjQ0CistLS0gYS9nZGIvaTM4Ni1saW51eC10ZGVwLmgKKysrKyBiL2dkYi9pMzg2LWxpbnV4LXRkZXAuaAorQEAgLTQyLDYgKzQyLDcgQEAgZXh0ZXJuIHN0cnVjdCB0YXJnZXRfZGVzYyAqdGRlc2NfaTM4Nl9saW51eDsKKyBleHRlcm4gc3RydWN0IHRhcmdldF9kZXNjICp0ZGVzY19pMzg2X21teF9saW51eDsKKyBleHRlcm4gc3RydWN0IHRhcmdldF9kZXNjICp0ZGVzY19pMzg2X2F2eF9saW51eDsKKyBleHRlcm4gc3RydWN0IHRhcmdldF9kZXNjICp0ZGVzY19pMzg2X21weF9saW51eDsKKytleHRlcm4gc3RydWN0IHRhcmdldF9kZXNjICp0ZGVzY19pMzg2X2F2eF9tcHhfbGludXg7CisgZXh0ZXJuIHN0cnVjdCB0YXJnZXRfZGVzYyAqdGRlc2NfaTM4Nl9hdng1MTJfbGludXg7CisKKyAvKiBGb3JtYXQgb2YgWFNBVkUgZXh0ZW5kZWQgc3RhdGUgaXM6CitkaWZmIC0tZ2l0IGEvZ2RiL2kzODYtdGRlcC5jIGIvZ2RiL2kzODYtdGRlcC5jCitpbmRleCBiNzA2NDYzLi4xZWMwYTA4IDEwMDY0NAorLS0tIGEvZ2RiL2kzODYtdGRlcC5jCisrKysgYi9nZGIvaTM4Ni10ZGVwLmMKK0BAIC01Myw2ICs1Myw3IEBACisgI2luY2x1ZGUgImZlYXR1cmVzL2kzODYvaTM4Ni5jIgorICNpbmNsdWRlICJmZWF0dXJlcy9pMzg2L2kzODYtYXZ4LmMiCisgI2luY2x1ZGUgImZlYXR1cmVzL2kzODYvaTM4Ni1tcHguYyIKKysjaW5jbHVkZSAiZmVhdHVyZXMvaTM4Ni9pMzg2LWF2eC1tcHguYyIKKyAjaW5jbHVkZSAiZmVhdHVyZXMvaTM4Ni9pMzg2LWF2eDUxMi5jIgorICNpbmNsdWRlICJmZWF0dXJlcy9pMzg2L2kzODYtbW14LmMiCisKK0BAIC04NjE4LDYgKzg2MTksOCBAQCBpMzg2X3RhcmdldF9kZXNjcmlwdGlvbiAodWludDY0X3QgeGNyMCkKKyAgICAgY2FzZSBYODZfWFNUQVRFX01QWF9BVlg1MTJfTUFTSzoKKyAgICAgY2FzZSBYODZfWFNUQVRFX0FWWDUxMl9NQVNLOgorICAgICAgIHJldHVybiB0ZGVzY19pMzg2X2F2eDUxMjsKKysgICAgY2FzZSBYODZfWFNUQVRFX0FWWF9NUFhfTUFTSzoKKysgICAgICByZXR1cm4gdGRlc2NfaTM4Nl9hdnhfbXB4OworICAgICBjYXNlIFg4Nl9YU1RBVEVfTVBYX01BU0s6CisgICAgICAgcmV0dXJuIHRkZXNjX2kzODZfbXB4OworICAgICBjYXNlIFg4Nl9YU1RBVEVfQVZYX01BU0s6CitAQCAtODk1Nyw2ICs4OTYwLDcgQEAgU2hvdyBJbnRlbCBNZW1vcnkgUHJvdGVjdGlvbiBFeHRlbnNpb25zIHNwZWNpZmljIHZhcmlhYmxlcy4iKSwKKyAgIGluaXRpYWxpemVfdGRlc2NfaTM4Nl9tbXggKCk7CisgICBpbml0aWFsaXplX3RkZXNjX2kzODZfYXZ4ICgpOworICAgaW5pdGlhbGl6ZV90ZGVzY19pMzg2X21weCAoKTsKKysgIGluaXRpYWxpemVfdGRlc2NfaTM4Nl9hdnhfbXB4ICgpOworICAgaW5pdGlhbGl6ZV90ZGVzY19pMzg2X2F2eDUxMiAoKTsKKworICAgLyogVGVsbCByZW1vdGUgc3R1YiB0aGF0IHdlIHN1cHBvcnQgWE1MIHRhcmdldCBkZXNjcmlwdGlvbi4gICovCitkaWZmIC0tZ2l0IGEvZ2RiL3JlZ2Zvcm1hdHMvaTM4Ni9hbWQ2NC1hdngtbXB4LWxpbnV4LmRhdCBiL2dkYi9yZWdmb3JtYXRzL2kzODYvYW1kNjQtYXZ4LW1weC1saW51eC5kYXQKK25ldyBmaWxlIG1vZGUgMTAwNjQ0CitpbmRleCAwMDAwMDAwLi42ZDQ1MzI0CistLS0gL2Rldi9udWxsCisrKysgYi9nZGIvcmVnZm9ybWF0cy9pMzg2L2FtZDY0LWF2eC1tcHgtbGludXguZGF0CitAQCAtMCwwICsxLDg1IEBACisrIyBUSElTIEZJTEUgSVMgR0VORVJBVEVELiAgLSotIGJ1ZmZlci1yZWFkLW9ubHk6IHQgLSotIHZpIDpzZXQgcm86CisrIyBHZW5lcmF0ZWQgZnJvbTogaTM4Ni9hbWQ2NC1hdngtbXB4LWxpbnV4LnhtbAorK25hbWU6YW1kNjRfYXZ4X21weF9saW51eAorK3htbHRhcmdldDphbWQ2NC1hdngtbXB4LWxpbnV4LnhtbAorK2V4cGVkaXRlOnJicCxyc3AscmlwCisrNjQ6cmF4CisrNjQ6cmJ4CisrNjQ6cmN4CisrNjQ6cmR4CisrNjQ6cnNpCisrNjQ6cmRpCisrNjQ6cmJwCisrNjQ6cnNwCisrNjQ6cjgKKys2NDpyOQorKzY0OnIxMAorKzY0OnIxMQorKzY0OnIxMgorKzY0OnIxMworKzY0OnIxNAorKzY0OnIxNQorKzY0OnJpcAorKzMyOmVmbGFncworKzMyOmNzCisrMzI6c3MKKyszMjpkcworKzMyOmVzCisrMzI6ZnMKKyszMjpncworKzgwOnN0MAorKzgwOnN0MQorKzgwOnN0MgorKzgwOnN0MworKzgwOnN0NAorKzgwOnN0NQorKzgwOnN0NgorKzgwOnN0NworKzMyOmZjdHJsCisrMzI6ZnN0YXQKKyszMjpmdGFnCisrMzI6ZmlzZWcKKyszMjpmaW9mZgorKzMyOmZvc2VnCisrMzI6Zm9vZmYKKyszMjpmb3AKKysxMjg6eG1tMAorKzEyODp4bW0xCisrMTI4OnhtbTIKKysxMjg6eG1tMworKzEyODp4bW00CisrMTI4OnhtbTUKKysxMjg6eG1tNgorKzEyODp4bW03CisrMTI4OnhtbTgKKysxMjg6eG1tOQorKzEyODp4bW0xMAorKzEyODp4bW0xMQorKzEyODp4bW0xMgorKzEyODp4bW0xMworKzEyODp4bW0xNAorKzEyODp4bW0xNQorKzMyOm14Y3NyCisrNjQ6b3JpZ19yYXgKKysxMjg6eW1tMGgKKysxMjg6eW1tMWgKKysxMjg6eW1tMmgKKysxMjg6eW1tM2gKKysxMjg6eW1tNGgKKysxMjg6eW1tNWgKKysxMjg6eW1tNmgKKysxMjg6eW1tN2gKKysxMjg6eW1tOGgKKysxMjg6eW1tOWgKKysxMjg6eW1tMTBoCisrMTI4OnltbTExaAorKzEyODp5bW0xMmgKKysxMjg6eW1tMTNoCisrMTI4OnltbTE0aAorKzEyODp5bW0xNWgKKysxMjg6Ym5kMHJhdworKzEyODpibmQxcmF3CisrMTI4OmJuZDJyYXcKKysxMjg6Ym5kM3JhdworKzY0OmJuZGNmZ3UKKys2NDpibmRzdGF0dXMKK2RpZmYgLS1naXQgYS9nZGIvcmVnZm9ybWF0cy9pMzg2L2FtZDY0LWF2eC1tcHguZGF0IGIvZ2RiL3JlZ2Zvcm1hdHMvaTM4Ni9hbWQ2NC1hdngtbXB4LmRhdAorbmV3IGZpbGUgbW9kZSAxMDA2NDQKK2luZGV4IDAwMDAwMDAuLmQ5ODU2NDEKKy0tLSAvZGV2L251bGwKKysrKyBiL2dkYi9yZWdmb3JtYXRzL2kzODYvYW1kNjQtYXZ4LW1weC5kYXQKK0BAIC0wLDAgKzEsODQgQEAKKysjIFRISVMgRklMRSBJUyBHRU5FUkFURUQuICAtKi0gYnVmZmVyLXJlYWQtb25seTogdCAtKi0gdmkgOnNldCBybzoKKysjIEdlbmVyYXRlZCBmcm9tOiBpMzg2L2FtZDY0LWF2eC1tcHgueG1sCisrbmFtZTphbWQ2NF9hdnhfbXB4CisreG1sdGFyZ2V0OmFtZDY0LWF2eC1tcHgueG1sCisrZXhwZWRpdGU6cmJwLHJzcCxyaXAKKys2NDpyYXgKKys2NDpyYngKKys2NDpyY3gKKys2NDpyZHgKKys2NDpyc2kKKys2NDpyZGkKKys2NDpyYnAKKys2NDpyc3AKKys2NDpyOAorKzY0OnI5CisrNjQ6cjEwCisrNjQ6cjExCisrNjQ6cjEyCisrNjQ6cjEzCisrNjQ6cjE0CisrNjQ6cjE1CisrNjQ6cmlwCisrMzI6ZWZsYWdzCisrMzI6Y3MKKyszMjpzcworKzMyOmRzCisrMzI6ZXMKKyszMjpmcworKzMyOmdzCisrODA6c3QwCisrODA6c3QxCisrODA6c3QyCisrODA6c3QzCisrODA6c3Q0CisrODA6c3Q1CisrODA6c3Q2CisrODA6c3Q3CisrMzI6ZmN0cmwKKyszMjpmc3RhdAorKzMyOmZ0YWcKKyszMjpmaXNlZworKzMyOmZpb2ZmCisrMzI6Zm9zZWcKKyszMjpmb29mZgorKzMyOmZvcAorKzEyODp4bW0wCisrMTI4OnhtbTEKKysxMjg6eG1tMgorKzEyODp4bW0zCisrMTI4OnhtbTQKKysxMjg6eG1tNQorKzEyODp4bW02CisrMTI4OnhtbTcKKysxMjg6eG1tOAorKzEyODp4bW05CisrMTI4OnhtbTEwCisrMTI4OnhtbTExCisrMTI4OnhtbTEyCisrMTI4OnhtbTEzCisrMTI4OnhtbTE0CisrMTI4OnhtbTE1CisrMzI6bXhjc3IKKysxMjg6eW1tMGgKKysxMjg6eW1tMWgKKysxMjg6eW1tMmgKKysxMjg6eW1tM2gKKysxMjg6eW1tNGgKKysxMjg6eW1tNWgKKysxMjg6eW1tNmgKKysxMjg6eW1tN2gKKysxMjg6eW1tOGgKKysxMjg6eW1tOWgKKysxMjg6eW1tMTBoCisrMTI4OnltbTExaAorKzEyODp5bW0xMmgKKysxMjg6eW1tMTNoCisrMTI4OnltbTE0aAorKzEyODp5bW0xNWgKKysxMjg6Ym5kMHJhdworKzEyODpibmQxcmF3CisrMTI4OmJuZDJyYXcKKysxMjg6Ym5kM3JhdworKzY0OmJuZGNmZ3UKKys2NDpibmRzdGF0dXMKK2RpZmYgLS1naXQgYS9nZGIvcmVnZm9ybWF0cy9pMzg2L2FtZDY0LW1weC1saW51eC5kYXQgYi9nZGIvcmVnZm9ybWF0cy9pMzg2L2FtZDY0LW1weC1saW51eC5kYXQKK2luZGV4IDdhMDVjZmUuLjUyM2FlMDEgMTAwNjQ0CistLS0gYS9nZGIvcmVnZm9ybWF0cy9pMzg2L2FtZDY0LW1weC1saW51eC5kYXQKKysrKyBiL2dkYi9yZWdmb3JtYXRzL2kzODYvYW1kNjQtbXB4LWxpbnV4LmRhdAorQEAgLTYxLDIyICs2MSw2IEBAIGV4cGVkaXRlOnJicCxyc3AscmlwCisgMTI4OnhtbTE1CisgMzI6bXhjc3IKKyA2NDpvcmlnX3JheAorLTEyODp5bW0waAorLTEyODp5bW0xaAorLTEyODp5bW0yaAorLTEyODp5bW0zaAorLTEyODp5bW00aAorLTEyODp5bW01aAorLTEyODp5bW02aAorLTEyODp5bW03aAorLTEyODp5bW04aAorLTEyODp5bW05aAorLTEyODp5bW0xMGgKKy0xMjg6eW1tMTFoCistMTI4OnltbTEyaAorLTEyODp5bW0xM2gKKy0xMjg6eW1tMTRoCistMTI4OnltbTE1aAorIDEyODpibmQwcmF3CisgMTI4OmJuZDFyYXcKKyAxMjg6Ym5kMnJhdworZGlmZiAtLWdpdCBhL2dkYi9yZWdmb3JtYXRzL2kzODYvYW1kNjQtbXB4LmRhdCBiL2dkYi9yZWdmb3JtYXRzL2kzODYvYW1kNjQtbXB4LmRhdAoraW5kZXggMWI3NWY0ZC4uNDNiODc3NiAxMDA2NDQKKy0tLSBhL2dkYi9yZWdmb3JtYXRzL2kzODYvYW1kNjQtbXB4LmRhdAorKysrIGIvZ2RiL3JlZ2Zvcm1hdHMvaTM4Ni9hbWQ2NC1tcHguZGF0CitAQCAtNjAsMjIgKzYwLDYgQEAgZXhwZWRpdGU6cmJwLHJzcCxyaXAKKyAxMjg6eG1tMTQKKyAxMjg6eG1tMTUKKyAzMjpteGNzcgorLTEyODp5bW0waAorLTEyODp5bW0xaAorLTEyODp5bW0yaAorLTEyODp5bW0zaAorLTEyODp5bW00aAorLTEyODp5bW01aAorLTEyODp5bW02aAorLTEyODp5bW03aAorLTEyODp5bW04aAorLTEyODp5bW05aAorLTEyODp5bW0xMGgKKy0xMjg6eW1tMTFoCistMTI4OnltbTEyaAorLTEyODp5bW0xM2gKKy0xMjg6eW1tMTRoCistMTI4OnltbTE1aAorIDEyODpibmQwcmF3CisgMTI4OmJuZDFyYXcKKyAxMjg6Ym5kMnJhdworZGlmZiAtLWdpdCBhL2dkYi9yZWdmb3JtYXRzL2kzODYvaTM4Ni1hdngtbXB4LWxpbnV4LmRhdCBiL2dkYi9yZWdmb3JtYXRzL2kzODYvaTM4Ni1hdngtbXB4LWxpbnV4LmRhdAorbmV3IGZpbGUgbW9kZSAxMDA2NDQKK2luZGV4IDAwMDAwMDAuLjgzMWM0NzYKKy0tLSAvZGV2L251bGwKKysrKyBiL2dkYi9yZWdmb3JtYXRzL2kzODYvaTM4Ni1hdngtbXB4LWxpbnV4LmRhdAorQEAgLTAsMCArMSw2MSBAQAorKyMgVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gIC0qLSBidWZmZXItcmVhZC1vbmx5OiB0IC0qLSB2aSA6c2V0IHJvOgorKyMgR2VuZXJhdGVkIGZyb206IGkzODYvaTM4Ni1hdngtbXB4LWxpbnV4LnhtbAorK25hbWU6aTM4Nl9hdnhfbXB4X2xpbnV4CisreG1sdGFyZ2V0OmkzODYtYXZ4LW1weC1saW51eC54bWwKKytleHBlZGl0ZTplYnAsZXNwLGVpcAorKzMyOmVheAorKzMyOmVjeAorKzMyOmVkeAorKzMyOmVieAorKzMyOmVzcAorKzMyOmVicAorKzMyOmVzaQorKzMyOmVkaQorKzMyOmVpcAorKzMyOmVmbGFncworKzMyOmNzCisrMzI6c3MKKyszMjpkcworKzMyOmVzCisrMzI6ZnMKKyszMjpncworKzgwOnN0MAorKzgwOnN0MQorKzgwOnN0MgorKzgwOnN0MworKzgwOnN0NAorKzgwOnN0NQorKzgwOnN0NgorKzgwOnN0NworKzMyOmZjdHJsCisrMzI6ZnN0YXQKKyszMjpmdGFnCisrMzI6ZmlzZWcKKyszMjpmaW9mZgorKzMyOmZvc2VnCisrMzI6Zm9vZmYKKyszMjpmb3AKKysxMjg6eG1tMAorKzEyODp4bW0xCisrMTI4OnhtbTIKKysxMjg6eG1tMworKzEyODp4bW00CisrMTI4OnhtbTUKKysxMjg6eG1tNgorKzEyODp4bW03CisrMzI6bXhjc3IKKyszMjpvcmlnX2VheAorKzEyODp5bW0waAorKzEyODp5bW0xaAorKzEyODp5bW0yaAorKzEyODp5bW0zaAorKzEyODp5bW00aAorKzEyODp5bW01aAorKzEyODp5bW02aAorKzEyODp5bW03aAorKzEyODpibmQwcmF3CisrMTI4OmJuZDFyYXcKKysxMjg6Ym5kMnJhdworKzEyODpibmQzcmF3CisrNjQ6Ym5kY2ZndQorKzY0OmJuZHN0YXR1cworZGlmZiAtLWdpdCBhL2dkYi9yZWdmb3JtYXRzL2kzODYvaTM4Ni1hdngtbXB4LmRhdCBiL2dkYi9yZWdmb3JtYXRzL2kzODYvaTM4Ni1hdngtbXB4LmRhdAorbmV3IGZpbGUgbW9kZSAxMDA2NDQKK2luZGV4IDAwMDAwMDAuLjhjYWVmNzUKKy0tLSAvZGV2L251bGwKKysrKyBiL2dkYi9yZWdmb3JtYXRzL2kzODYvaTM4Ni1hdngtbXB4LmRhdAorQEAgLTAsMCArMSw2MCBAQAorKyMgVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gIC0qLSBidWZmZXItcmVhZC1vbmx5OiB0IC0qLSB2aSA6c2V0IHJvOgorKyMgR2VuZXJhdGVkIGZyb206IGkzODYvaTM4Ni1hdngtbXB4LnhtbAorK25hbWU6aTM4Nl9hdnhfbXB4CisreG1sdGFyZ2V0OmkzODYtYXZ4LW1weC54bWwKKytleHBlZGl0ZTplYnAsZXNwLGVpcAorKzMyOmVheAorKzMyOmVjeAorKzMyOmVkeAorKzMyOmVieAorKzMyOmVzcAorKzMyOmVicAorKzMyOmVzaQorKzMyOmVkaQorKzMyOmVpcAorKzMyOmVmbGFncworKzMyOmNzCisrMzI6c3MKKyszMjpkcworKzMyOmVzCisrMzI6ZnMKKyszMjpncworKzgwOnN0MAorKzgwOnN0MQorKzgwOnN0MgorKzgwOnN0MworKzgwOnN0NAorKzgwOnN0NQorKzgwOnN0NgorKzgwOnN0NworKzMyOmZjdHJsCisrMzI6ZnN0YXQKKyszMjpmdGFnCisrMzI6ZmlzZWcKKyszMjpmaW9mZgorKzMyOmZvc2VnCisrMzI6Zm9vZmYKKyszMjpmb3AKKysxMjg6eG1tMAorKzEyODp4bW0xCisrMTI4OnhtbTIKKysxMjg6eG1tMworKzEyODp4bW00CisrMTI4OnhtbTUKKysxMjg6eG1tNgorKzEyODp4bW03CisrMzI6bXhjc3IKKysxMjg6eW1tMGgKKysxMjg6eW1tMWgKKysxMjg6eW1tMmgKKysxMjg6eW1tM2gKKysxMjg6eW1tNGgKKysxMjg6eW1tNWgKKysxMjg6eW1tNmgKKysxMjg6eW1tN2gKKysxMjg6Ym5kMHJhdworKzEyODpibmQxcmF3CisrMTI4OmJuZDJyYXcKKysxMjg6Ym5kM3JhdworKzY0OmJuZGNmZ3UKKys2NDpibmRzdGF0dXMKK2RpZmYgLS1naXQgYS9nZGIvcmVnZm9ybWF0cy9pMzg2L2kzODYtbXB4LWxpbnV4LmRhdCBiL2dkYi9yZWdmb3JtYXRzL2kzODYvaTM4Ni1tcHgtbGludXguZGF0CitpbmRleCBiNTJiNjhkLi4xZGNkY2U5IDEwMDY0NAorLS0tIGEvZ2RiL3JlZ2Zvcm1hdHMvaTM4Ni9pMzg2LW1weC1saW51eC5kYXQKKysrKyBiL2dkYi9yZWdmb3JtYXRzL2kzODYvaTM4Ni1tcHgtbGludXguZGF0CitAQCAtNDUsMTQgKzQ1LDYgQEAgZXhwZWRpdGU6ZWJwLGVzcCxlaXAKKyAxMjg6eG1tNworIDMyOm14Y3NyCisgMzI6b3JpZ19lYXgKKy0xMjg6eW1tMGgKKy0xMjg6eW1tMWgKKy0xMjg6eW1tMmgKKy0xMjg6eW1tM2gKKy0xMjg6eW1tNGgKKy0xMjg6eW1tNWgKKy0xMjg6eW1tNmgKKy0xMjg6eW1tN2gKKyAxMjg6Ym5kMHJhdworIDEyODpibmQxcmF3CisgMTI4OmJuZDJyYXcKK2RpZmYgLS1naXQgYS9nZGIvcmVnZm9ybWF0cy9pMzg2L2kzODYtbXB4LmRhdCBiL2dkYi9yZWdmb3JtYXRzL2kzODYvaTM4Ni1tcHguZGF0CitpbmRleCAwZWE0MjBiLi5kZGE1MTY0IDEwMDY0NAorLS0tIGEvZ2RiL3JlZ2Zvcm1hdHMvaTM4Ni9pMzg2LW1weC5kYXQKKysrKyBiL2dkYi9yZWdmb3JtYXRzL2kzODYvaTM4Ni1tcHguZGF0CitAQCAtNDQsMTQgKzQ0LDYgQEAgZXhwZWRpdGU6ZWJwLGVzcCxlaXAKKyAxMjg6eG1tNgorIDEyODp4bW03CisgMzI6bXhjc3IKKy0xMjg6eW1tMGgKKy0xMjg6eW1tMWgKKy0xMjg6eW1tMmgKKy0xMjg6eW1tM2gKKy0xMjg6eW1tNGgKKy0xMjg6eW1tNWgKKy0xMjg6eW1tNmgKKy0xMjg6eW1tN2gKKyAxMjg6Ym5kMHJhdworIDEyODpibmQxcmF3CisgMTI4OmJuZDJyYXcKK2RpZmYgLS1naXQgYS9nZGIvdGVzdHN1aXRlL2dkYi50cmFjZS9mdHJhY2UuZXhwIGIvZ2RiL3Rlc3RzdWl0ZS9nZGIudHJhY2UvZnRyYWNlLmV4cAoraW5kZXggMTVhZDdlNy4uM2E5NDQ3MSAxMDA2NDQKKy0tLSBhL2dkYi90ZXN0c3VpdGUvZ2RiLnRyYWNlL2Z0cmFjZS5leHAKKysrKyBiL2dkYi90ZXN0c3VpdGUvZ2RiLnRyYWNlL2Z0cmFjZS5leHAKK0BAIC0xMzIsNyArMTMyLDYgQEAgcHJvYyB0ZXN0X2Zhc3RfdHJhY2Vwb2ludHMge30geworIAlnZGJfdGVzdCAidGZpbmQgcGMgKnNldF9wb2ludCIgIkZvdW5kIHRyYWNlIGZyYW1lIC4qIiBcCisgCSAgICAidGZpbmQgc2V0X3BvaW50IGZyYW1lLCBmaXJzdCB0aW1lIgorCistCXNldHVwX2tmYWlsICJnZGIvMTM4MDgiICJ4ODZfNjQtKi1saW51eCoiCisgCWdkYl90ZXN0ICJwcmludCBnbG9idmFyIiAiID0gMSIKKworIAlnZGJfdGVzdCAidGZpbmQgcGMgKnNldF9wb2ludCIgIkZvdW5kIHRyYWNlIGZyYW1lIC4qIiBcCitkaWZmIC0tZ2l0IGEvZ2RiL3g4Ni1saW51eC1uYXQuYyBiL2dkYi94ODYtbGludXgtbmF0LmMKK2luZGV4IDNjYzE4YzEuLjEwNzU3NmYgMTAwNjQ0CistLS0gYS9nZGIveDg2LWxpbnV4LW5hdC5jCisrKysgYi9nZGIveDg2LWxpbnV4LW5hdC5jCitAQCAtMjE1LDYgKzIxNSwxMSBAQCB4ODZfbGludXhfcmVhZF9kZXNjcmlwdGlvbiAoc3RydWN0IHRhcmdldF9vcHMgKm9wcykKKyAJICAgIHJldHVybiB0ZGVzY194MzJfYXZ4X2xpbnV4OyAvKiBObyBNUFggb24geDMyIHVzaW5nIEFWWC4gICovCisgCSAgZWxzZQorIAkgICAgcmV0dXJuIHRkZXNjX2FtZDY0X21weF9saW51eDsKKysJY2FzZSBYODZfWFNUQVRFX0FWWF9NUFhfTUFTSzoKKysJICBpZiAoaXNfeDMyKQorKwkgICAgcmV0dXJuIHRkZXNjX3gzMl9hdnhfbGludXg7IC8qIE5vIE1QWCBvbiB4MzIgdXNpbmcgQVZYLiAgKi8KKysJICBlbHNlCisrCSAgICByZXR1cm4gdGRlc2NfYW1kNjRfYXZ4X21weF9saW51eDsKKyAJY2FzZSBYODZfWFNUQVRFX0FWWF9NQVNLOgorIAkgIGlmIChpc194MzIpCisgCSAgICByZXR1cm4gdGRlc2NfeDMyX2F2eF9saW51eDsKK0BAIC0yMzcsNiArMjQyLDggQEAgeDg2X2xpbnV4X3JlYWRfZGVzY3JpcHRpb24gKHN0cnVjdCB0YXJnZXRfb3BzICpvcHMpCisgCSAgcmV0dXJuIHRkZXNjX2kzODZfYXZ4NTEyX2xpbnV4OworIAljYXNlIFg4Nl9YU1RBVEVfTVBYX01BU0s6CisgCSAgcmV0dXJuIHRkZXNjX2kzODZfbXB4X2xpbnV4OworKwljYXNlIFg4Nl9YU1RBVEVfQVZYX01QWF9NQVNLOgorKwkgIHJldHVybiB0ZGVzY19pMzg2X2F2eF9tcHhfbGludXg7CisgCWNhc2UgWDg2X1hTVEFURV9BVlhfTUFTSzoKKyAJICByZXR1cm4gdGRlc2NfaTM4Nl9hdnhfbGludXg7CisgCWRlZmF1bHQ6CmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2dkYi9nZGIvZm9yY2UtcmVhZGxpbmUtc3RhdGljLnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nZGIvZ2RiL2ZvcmNlLXJlYWRsaW5lLXN0YXRpYy5wYXRjaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDM0ZWU4Yy4uMDAwMDAwMAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2dkYi9nZGIvZm9yY2UtcmVhZGxpbmUtc3RhdGljLnBhdGNoCisrKyAvZGV2L251bGwKQEAgLTEsMzcgKzAsMCBAQAotSWYgZ2RiIGlzIGNvbmZpZ3VyZWQgd2l0aCAtLWRpc2FibGUtc3RhdGljIHRoZW4gdGhpcyBpcyBkdXRpZnVsbHkgcGFzc2VkIHRvCi1yZWFkbGluZSB3aGljaCB0aGVuIGRpc2FibGVzIGxpYnJlYWRsaW5lLmEsIHdoaWNoIGNhdXNlcyBhIHByb2JsZW0gd2hlbiBnZGIKLXRyaWVzIHRvIGxpbmsgYWdhaW5zdCB0aGF0LgotCi1UbyBlbnN1cmUgdGhhdCByZWFkbGluZSBhbHdheXMgYnVpbGRzIHN0YXRpYyBsaWJyYXJpZXMsIHBhc3MgLS1lbmFibGUtc3RhdGljIHRvCi10aGUgc3ViLWNvbmZpZ3VyZS4KLQotVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCi1TaWduZWQtb2ZmLWJ5OiBSb3NzIEJ1cnRvbiA8cm9zcy5idXJ0b25AaW50ZWwuY29tPgotCi1kaWZmIC0tZ2l0IGEvTWFrZWZpbGUuZGVmIGIvTWFrZWZpbGUuZGVmCi1pbmRleCA0Mzk0MTg4Li4wNWM2NjFhIDEwMDY0NAotLS0tIGEvTWFrZWZpbGUuZGVmCi0rKysgYi9NYWtlZmlsZS5kZWYKLUBAIC0xMDAsNyArMTAwLDggQEAgaG9zdF9tb2R1bGVzPSB7IG1vZHVsZT0gbGliaWNvbnY7Ci0gCQltaXNzaW5nPSBpbnN0YWxsLWh0bWw7Ci0gCQltaXNzaW5nPSBpbnN0YWxsLWluZm87IH07Ci0gaG9zdF9tb2R1bGVzPSB7IG1vZHVsZT0gbTQ7IH07Ci0taG9zdF9tb2R1bGVzPSB7IG1vZHVsZT0gcmVhZGxpbmU7IH07Ci0raG9zdF9tb2R1bGVzPSB7IG1vZHVsZT0gcmVhZGxpbmU7Ci0rICAgICAgICAgICAgICAgIGV4dHJhX2NvbmZpZ3VyZV9mbGFncz0nLS1lbmFibGUtc3RhdGljJzt9OwotIGhvc3RfbW9kdWxlcz0geyBtb2R1bGU9IHNpZDsgfTsKLSBob3N0X21vZHVsZXM9IHsgbW9kdWxlPSBzaW07IH07Ci0gaG9zdF9tb2R1bGVzPSB7IG1vZHVsZT0gdGV4aW5mbzsgbm9faW5zdGFsbD0gdHJ1ZTsgfTsKLWRpZmYgLS1naXQgYS9NYWtlZmlsZS5pbiBiL01ha2VmaWxlLmluCi1pbmRleCA2MWUwYWI2Li44MzdmMzZlIDEwMDY0NAotLS0tIGEvTWFrZWZpbGUuaW4KLSsrKyBiL01ha2VmaWxlLmluCi1AQCAtMjQ5NzEsNyArMjQ5NzEsNyBAQCBjb25maWd1cmUtcmVhZGxpbmU6Ci0gCSAgJCRzLyQkbW9kdWxlX3NyY2Rpci9jb25maWd1cmUgXAotIAkgIC0tc3JjZGlyPSQke3RvcGRpcn0vJCRtb2R1bGVfc3JjZGlyIFwKLSAJICAkKEhPU1RfQ09ORklHQVJHUykgLS1idWlsZD0ke2J1aWxkX2FsaWFzfSAtLWhvc3Q9JHtob3N0X2FsaWFzfSBcCi0tCSAgLS10YXJnZXQ9JHt0YXJnZXRfYWxpYXN9ICBcCi0rCSAgLS10YXJnZXQ9JHt0YXJnZXRfYWxpYXN9IC0tZW5hYmxlLXN0YXRpYyBcCi0gCSAgfHwgZXhpdCAxCi0gQGVuZGlmIHJlYWRsaW5lCi0gCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2dkYi9nZGJfNy4xMC4xLmJiIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nZGIvZ2RiXzcuMTAuMS5iYgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjg5N2UxMi4uMDAwMDAwMAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2dkYi9nZGJfNy4xMC4xLmJiCisrKyAvZGV2L251bGwKQEAgLTEsMjAgKzAsMCBAQAotcmVxdWlyZSBnZGIuaW5jCi1yZXF1aXJlIGdkYi0ke1BWfS5pbmMKLQotaW5oZXJpdCBweXRob24tZGlyCi0KLWRvX2NvbmZpZ3VyZV9wcmVwZW5kKCkgewotCWlmIFsgLW4gIiR7QGJiLnV0aWxzLmNvbnRhaW5zKCdQQUNLQUdFQ09ORklHJywgJ3B5dGhvbicsICdweXRob24nLCAnJywgZCl9IiBdOyB0aGVuCi0JCWNhdCA+ICR7V09SS0RJUn0vcHl0aG9uIDw8IEVPRgotIyEvYmluL3NoCi1jYXNlICJcJDIiIGluCi0JLS1pbmNsdWRlcykgZWNobyAiLUkke1NUQUdJTkdfSU5DRElSfS8ke1BZVEhPTl9ESVJ9LyIgOzsKLQktLWxkZmxhZ3MpIGVjaG8gIi1XbCwtcnBhdGgtbGluaywke1NUQUdJTkdfTElCRElSfS8uLiAtV2wsLXJwYXRoLCR7bGliZGlyfS8uLiAtbHB0aHJlYWQgLWxkbCAtbHV0aWwgLWxtIC1scHl0aG9uJHtQWVRIT05fQkFTRVZFUlNJT059IiA7OwotCS0tZXhlYy1wcmVmaXgpIGVjaG8gIiR7ZXhlY19wcmVmaXh9IiA7OwotCSopIGV4aXQgMSA7OwotZXNhYwotZXhpdCAwCi1FT0YKLQkJY2htb2QgK3ggJHtXT1JLRElSfS9weXRob24KLQlmaQotfQpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nZGIvZ2RiXzcuMTEuYmIgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2dkYi9nZGJfNy4xMS5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41N2NmZmM5Ci0tLSAvZGV2L251bGwKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nZGIvZ2RiXzcuMTEuYmIKQEAgLTAsMCArMSwyNiBAQAorcmVxdWlyZSBnZGIuaW5jCityZXF1aXJlIGdkYi0ke1BWfS5pbmMKKworaW5oZXJpdCBweXRob24zLWRpcgorCitFWFRSQV9PRU1BS0VfYXBwZW5kX2xpYmMtbXVzbCA9ICJcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBndF9jdl9mdW5jX2dudWdldHRleHQxX2xpYmM9eWVzIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGd0X2N2X2Z1bmNfZ251Z2V0dGV4dDJfbGliYz15ZXMgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiCisKK2RvX2NvbmZpZ3VyZV9wcmVwZW5kKCkgeworCWlmIFsgLW4gIiR7QGJiLnV0aWxzLmNvbnRhaW5zKCdQQUNLQUdFQ09ORklHJywgJ3B5dGhvbicsICdweXRob24nLCAnJywgZCl9IiBdOyB0aGVuCisJCWNhdCA+ICR7V09SS0RJUn0vcHl0aG9uIDw8IEVPRgorIyEvYmluL3NoCitjYXNlICJcJDIiIGluCisJLS1pbmNsdWRlcykgZWNobyAiLUkke1NUQUdJTkdfSU5DRElSfS8ke1BZVEhPTl9ESVJ9JHtQWVRIT05fQUJJfS8iIDs7CisJLS1sZGZsYWdzKSBlY2hvICItV2wsLXJwYXRoLWxpbmssJHtTVEFHSU5HX0xJQkRJUn0vLi4gLVdsLC1ycGF0aCwke2xpYmRpcn0vLi4gLWxwdGhyZWFkIC1sZGwgLWx1dGlsIC1sbSAtbHB5dGhvbiR7UFlUSE9OX0JBU0VWRVJTSU9OfSR7UFlUSE9OX0FCSX0iIDs7CisJLS1leGVjLXByZWZpeCkgZWNobyAiJHtleGVjX3ByZWZpeH0iIDs7CisJKikgZXhpdCAxIDs7Citlc2FjCitleGl0IDAKK0VPRgorCQljaG1vZCAreCAke1dPUktESVJ9L3B5dGhvbgorCWZpCit9CitDRkxBR1NfYXBwZW5kX2xpYmMtbXVzbCA9ICIgLURycGxfZ2V0dGltZW9mZGF5PWdldHRpbWVvZmRheSIKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2l0L2dpdC5pbmMgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2dpdC9naXQuaW5jCmluZGV4IGExZDAzMDAuLjc1M2IwNDcgMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2l0L2dpdC5pbmMKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9naXQvZ2l0LmluYwpAQCAtMTcsNiArMTcsNyBAQAogCQktLXdpdGhvdXQtdGNsdGsgXAogIgogCisjIE5lZWRzIGJyb2tlbnNlcCBhcyB0aGlzIGRvZXNuJ3QgdXNlIGF1dG9tYWtlCiBpbmhlcml0IGF1dG90b29scy1icm9rZW5zZXAgcGVybG5hdGl2ZSBiYXNoLWNvbXBsZXRpb24KIAogRVhUUkFfT0VNQUtFID0gIk5PX1BZVEhPTj0xIENGTEFHUz0nJHtDRkxBR1N9JyBMREZMQUdTPScke0xERkxBR1N9JyIKQEAgLTMxLDggKzMyLDcgQEAKIAogZG9faW5zdGFsbCAoKSB7CiAJb2VfcnVubWFrZSBpbnN0YWxsIERFU1RESVI9IiR7RH0iIGJpbmRpcj0ke2JpbmRpcn0gXAotCQl0ZW1wbGF0ZV9kaXI9JHtkYXRhZGlyfS9naXQtY29yZS90ZW1wbGF0ZXMgXAotCQlHSVRfUFlUSE9OX0RJUj0ke0R9JHtkYXRhZGlyfS9naXQtY29yZS9weXRob24KKwkJdGVtcGxhdGVfZGlyPSR7ZGF0YWRpcn0vZ2l0LWNvcmUvdGVtcGxhdGVzCiAJaW5zdGFsbCAtZCAke0R9LyR7bWFuZGlyfS9tYW4xCiAJaW5zdGFsbCAtZCAke0R9LyR7bWFuZGlyfS9tYW41CiAJaW5zdGFsbCAtZCAke0R9LyR7bWFuZGlyfS9tYW43CkBAIC0xMDcsMTAgKzEwNyw2IEBACiAiCiBSREVQRU5EU18ke1BOfS1wZXJsdG9vbHMgPSAiJHtQTn0gcGVybCBwZXJsLW1vZHVsZS1maWxlLXBhdGggZmluZHV0aWxzIgogCi1QQUNLQUdFUyA9KyAiJHtQTn0tcHl0aG9uIgotRklMRVNfJHtQTn0tcHl0aG9uID0gIiR7bGliZGlyfS9weXRob24qIgotCi0KICMgZ2l0LXRrIHBhY2thZ2Ugd2l0aCBnaXRrIGFuZCBnaXQtZ3VpCiBQQUNLQUdFUyA9KyAiJHtQTn0tdGsiCiAjUkRFUEVORFNfJHtQTn0tdGsgPSAiJHtQTn0gdGsgdGNsIgpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9naXQvZ2l0XzIuNy40LmJiIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9naXQvZ2l0XzIuNy40LmJiCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiYzcyNzkzLi4wMDAwMDAwCi0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2l0L2dpdF8yLjcuNC5iYgorKysgL2Rldi9udWxsCkBAIC0xLDExICswLDAgQEAKLXJlcXVpcmUgZ2l0LmluYwotCi1FWFRSQV9PRUNPTkYgKz0gImFjX2N2X3NucHJpbnRmX3JldHVybnNfYm9ndXM9bm8gXAotICAgICAgICAgICAgICAgICBhY19jdl9mcmVhZF9yZWFkc19kaXJlY3Rvcmllcz0ke2FjX2N2X2ZyZWFkX3JlYWRzX2RpcmVjdG9yaWVzPXllc30gXAotICAgICAgICAgICAgICAgICAiCi1FWFRSQV9PRU1BS0UgKz0gIk5PX0dFVFRFWFQ9MSIKLQotU1JDX1VSSVt0YXJiYWxsLm1kNXN1bV0gPSAiYzY0MDEyZDQ5MWUyNGM3ZDY1Y2QzODlmNzUzODNkOTEiCi1TUkNfVVJJW3RhcmJhbGwuc2hhMjU2c3VtXSA9ICI3MTA0YzRmNWQ5NDhhNzViNDk5YTk1NDUyNGNiMjgxZmUzMGM2NjQ5ZDhhYmUyMDk4MjkzNmY3NWVjMWYyNzViIgotU1JDX1VSSVttYW5wYWdlcy5tZDVzdW1dID0gIjU4MDIwZGMxM2E1ODAxYzQ5Zjc5ODZmZWY3MDI3NTM1IgotU1JDX1VSSVttYW5wYWdlcy5zaGEyNTZzdW1dID0gIjBkZmUxOTMxYWQzMDI4NzM0NzBlMDI4MDI0OGUzYWE1MDUwMmI1ZWRkMDBkY2MzZTljOTE3MzY2N2I2ZmVhNmEiCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2dpdC9naXRfMi45LjMuYmIgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2dpdC9naXRfMi45LjMuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDU5ZjNkMgotLS0gL2Rldi9udWxsCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2l0L2dpdF8yLjkuMy5iYgpAQCAtMCwwICsxLDExIEBACityZXF1aXJlIGdpdC5pbmMKKworRVhUUkFfT0VDT05GICs9ICJhY19jdl9zbnByaW50Zl9yZXR1cm5zX2JvZ3VzPW5vIFwKKyAgICAgICAgICAgICAgICAgYWNfY3ZfZnJlYWRfcmVhZHNfZGlyZWN0b3JpZXM9JHthY19jdl9mcmVhZF9yZWFkc19kaXJlY3Rvcmllcz15ZXN9IFwKKyAgICAgICAgICAgICAgICAgIgorRVhUUkFfT0VNQUtFICs9ICJOT19HRVRURVhUPTEiCisKK1NSQ19VUklbdGFyYmFsbC5tZDVzdW1dID0gImM3ODMzNjFiZTg5NGI4YmZhNTM3MzgxMWIxYjY1NjAyIgorU1JDX1VSSVt0YXJiYWxsLnNoYTI1NnN1bV0gPSAiYTI1MmI2NjM2YjEyZDViYTU3NzMyYzg0Njk3MDE1NDRjMjZjMmIxNjg5OTMzYmQxYjQyNWU2MDNjYmIyNDdjMCIKK1NSQ19VUklbbWFucGFnZXMubWQ1c3VtXSA9ICI2NmZhZmQ2MWQ2NWY5ZDJkOTk1ODExMzMxNzBlYjE4NiIKK1NSQ19VUklbbWFucGFnZXMuc2hhMjU2c3VtXSA9ICI4ZWExYTU1YjA0OGZhZmJmMGMwYzZmY2JjYTRiNWIwZjVlOTkxNzg5MzIyMWZjNzM0NWMwOTA1MWQ2NTgzMmNlIgpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9ndWlsZS9maWxlcy8wMDAxLWxpYmd1aWxlLUNoZWNrLWZvci1zdHJ0b2xfbC1kdXJpbmctY29uZmlndXJlLnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9ndWlsZS9maWxlcy8wMDAxLWxpYmd1aWxlLUNoZWNrLWZvci1zdHJ0b2xfbC1kdXJpbmctY29uZmlndXJlLnBhdGNoCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyNGYwNzNmLi4wMDAwMDAwCi0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ3VpbGUvZmlsZXMvMDAwMS1saWJndWlsZS1DaGVjay1mb3Itc3RydG9sX2wtZHVyaW5nLWNvbmZpZ3VyZS5wYXRjaAorKysgL2Rldi9udWxsCkBAIC0xLDU2ICswLDAgQEAKLUZyb20gODE0ZDZmYjZjMWY0YTU0NGM4ZmQzN2Y1YTM5MGJhMDIwYzJkOGM4NSBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKLUZyb206IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+Ci1EYXRlOiBTdW4sIDEwIEphbiAyMDE2IDIyOjI4OjE3ICswMDAwCi1TdWJqZWN0OiBbUEFUQ0hdIGxpYmd1aWxlOiBDaGVjayBmb3Igc3RydG9sX2wgZHVyaW5nIGNvbmZpZ3VyZQotCi1zdHJ0b2xfbCBpcyBhIGdudSBleHRlbnRpb24gd2hpY2ggbWF5IG5vdCBiZSBhdmFpbGFibGUgb24gb3RoZXIgbGludXgKLWxpYmMgaW1wbGVtZW50YXRpb25zIGUuZy4gbXVzbC4gVGhlcmVmb3JlIGNoZWNrIGZvciB0aGlzIGZ1bmNpdG9uIGFuZAotY29uZGl0aW9uYWxpemUgdGhlIHVzZSBvZiBpdC4KLQotU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KLS0tLQotVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCi0KLSBjb25maWd1cmUuYWMgICAgfCA1ICsrKy0tCi0gbGliZ3VpbGUvaTE4bi5jIHwgMiArLQotIDIgZmlsZXMgY2hhbmdlZCwgNCBpbnNlcnRpb25zKCspLCAzIGRlbGV0aW9ucygtKQotCi1kaWZmIC0tZ2l0IGEvY29uZmlndXJlLmFjIGIvY29uZmlndXJlLmFjCi1pbmRleCAzOTY5OTI5Li5mOGE2YTFhIDEwMDY0NAotLS0tIGEvY29uZmlndXJlLmFjCi0rKysgYi9jb25maWd1cmUuYWMKLUBAIC03NTIsNyArNzUyLDggQEAgQUNfQ0hFQ0tfSEVBREVSUyhbYXNzZXJ0LmggY3J0X2V4dGVybnMuaF0pCi0gIyAgIHRydW5jYXRlIC0gbm90IGluIG1pbmd3Ci0gIyAgIGlzYmxhbmsgLSBhdmFpbGFibGUgYXMgYSBHTlUgZXh0ZW5zaW9uIG9yIGluIEM5OQotICMgICBfTlNHZXRFbnZpcm9uIC0gRGFyd2luIHNwZWNpZmljCi0tIyAgIHN0cmNvbGxfbCwgbmV3bG9jYWxlIC0gR05VIGV4dGVuc2lvbnMgKGdsaWJjKSwgYWxzbyBhdmFpbGFibGUgb24gRGFyd2luCi0rIyAgIHN0cmNvbGxfbCwgbmV3bG9jYWxlLCBzdHJ0b2xfbCAtIEdOVSBleHRlbnNpb25zIChnbGliYyksCi0rIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFsc28gYXZhaWxhYmxlIG9uIERhcndpbgotICMgICBmb3JrIC0gdW5hdmFpbGFibGUgb24gV2luZG93cwotICMgICB1dGltZW5zYXQgLSBwb3NpeC4xLTIwMDgKLSAjICAgc2NoZWRfZ2V0YWZmaW5pdHksIHNjaGVkX3NldGFmZmluaXR5IC0gR05VIGV4dGVuc2lvbnMgKGdsaWJjKQotQEAgLTc2OCw3ICs3NjksNyBAQCBBQ19DSEVDS19GVU5DUyhbRElORklOSVRZIERRTkFOIGNleHAgY2hzaXplIGNsb2cgY2xvZzEwIGN0ZXJtaWQJCVwKLSAgIGdldGdyZW50IGtpbGwgZ2V0cHBpZCBnZXRwZ3JwIGZvcmsgc2V0aXRpbWVyIGdldGl0aW1lciBzdHJjaHIgc3RyY21wCVwKLSAgIGluZGV4IGJjb3B5IG1lbWNweSByaW5kZXggdHJ1bmNhdGUgdW5zZXRlbnYgaXNibGFuayBfTlNHZXRFbnZpcm9uCVwKLSAgIHN0cmNvbGwgc3RyY29sbF9sIG5ld2xvY2FsZSB1dGltZW5zYXQgc2NoZWRfZ2V0YWZmaW5pdHkJCVwKLS0gIHNjaGVkX3NldGFmZmluaXR5IHNlbmRmaWxlXSkKLSsgIHNjaGVkX3NldGFmZmluaXR5IHNlbmRmaWxlIHN0cnRvbF9sXSkKLSAKLSBBTV9DT05ESVRJT05BTChbQlVJTERfSUNFXzlfUE9QRU5dLAotICAgW3Rlc3QgIngkZW5hYmxlX3Bvc2l4IiA9ICJ4eWVzIiAmJiB0ZXN0ICJ4JGFjX2N2X2Z1bmNfZm9yayIgPSAieHllcyJdKQotZGlmZiAtLWdpdCBhL2xpYmd1aWxlL2kxOG4uYyBiL2xpYmd1aWxlL2kxOG4uYwotaW5kZXggOTdkNDRiMC4uOWZiNjk3NiAxMDA2NDQKLS0tLSBhL2xpYmd1aWxlL2kxOG4uYwotKysrIGIvbGliZ3VpbGUvaTE4bi5jCi1AQCAtMTM1Miw3ICsxMzUyLDcgQEAgU0NNX0RFRklORSAoc2NtX2xvY2FsZV9zdHJpbmdfdG9faW50ZWdlciwgImxvY2FsZS1zdHJpbmctPmludGVnZXIiLAotIAotICAgaWYgKGNfbG9jYWxlICE9IE5VTEwpCi0gICAgIHsKLS0jaWZkZWYgVVNFX0dOVV9MT0NBTEVfQVBJCi0rI2lmIGRlZmluZWQoVVNFX0dOVV9MT0NBTEVfQVBJKSAmJiBkZWZpbmVkKEhBVkVfU1RSVE9MX0wpCi0gICAgICAgY19yZXN1bHQgPSBzdHJ0b2xfbCAoY19zdHIsICZjX2VuZHB0ciwgY19iYXNlLCBjX2xvY2FsZSk7Ci0gI2Vsc2UKLSAgICAgICBSVU5fSU5fTE9DQUxFX1NFQ1RJT04gKGNfbG9jYWxlLAotLS0gCi0yLjcuMAotCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2d1aWxlL2ZpbGVzLzAwMDItUmVjb2duaXplLW5pb3MyLWFzLWNvbXBpbGF0aW9uLXRhcmdldC5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ3VpbGUvZmlsZXMvMDAwMi1SZWNvZ25pemUtbmlvczItYXMtY29tcGlsYXRpb24tdGFyZ2V0LnBhdGNoCmluZGV4IDUxOTU4NWIuLjhlODQ3NDcgMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ3VpbGUvZmlsZXMvMDAwMi1SZWNvZ25pemUtbmlvczItYXMtY29tcGlsYXRpb24tdGFyZ2V0LnBhdGNoCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ3VpbGUvZmlsZXMvMDAwMi1SZWNvZ25pemUtbmlvczItYXMtY29tcGlsYXRpb24tdGFyZ2V0LnBhdGNoCkBAIC0xMCwyNyArMTAsMjMgQEAKICAxIGZpbGUgY2hhbmdlZCwgMiBpbnNlcnRpb25zKCspLCAyIGRlbGV0aW9ucygtKQogCiBkaWZmIC0tZ2l0IGEvbW9kdWxlL3N5c3RlbS9iYXNlL3RhcmdldC5zY20gYi9tb2R1bGUvc3lzdGVtL2Jhc2UvdGFyZ2V0LnNjbQotaW5kZXggZDYwYThlMC4uZDFmNmNmZiAxMDA2NDQKIC0tLSBhL21vZHVsZS9zeXN0ZW0vYmFzZS90YXJnZXQuc2NtCiArKysgYi9tb2R1bGUvc3lzdGVtL2Jhc2UvdGFyZ2V0LnNjbQogQEAgLTY1LDcgKzY1LDcgQEAKICAgICAgICAoY29uZCAoKHN0cmluZy1tYXRjaCAiXmlbMC05XTg2JCIgY3B1KQogICAgICAgICAgICAgICAoZW5kaWFubmVzcyBsaXR0bGUpKQogICAgICAgICAgICAgICgobWVtYmVyIGNwdSAnKCJ4ODZfNjQiICJpYTY0IgotLSAgICAgICAgICAgICAgICAgICAgICAgICAgICJwb3dlcnBjbGUiICJwb3dlcnBjNjRsZSIgIm1pcHNlbCIgIm1pcHM2NGVsIikpCi0rICAgICAgICAgICAgICAgICAgICAgICAgICAgInBvd2VycGNsZSIgInBvd2VycGM2NGxlIiAibWlwc2VsIiAibWlwczY0ZWwiICJuaW9zMiIpKQorLSAgICAgICAgICAgICAgICAgICAgICAgICAgICJwb3dlcnBjbGUiICJwb3dlcnBjNjRsZSIgIm1pcHNlbCIgIm1pcHM2NGVsIiAic2g0IikpCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgInBvd2VycGNsZSIgInBvd2VycGM2NGxlIiAibWlwc2VsIiAibWlwczY0ZWwiICJzaDQiICJuaW9zMiIpKQogICAgICAgICAgICAgICAoZW5kaWFubmVzcyBsaXR0bGUpKQogICAgICAgICAgICAgICgobWVtYmVyIGNwdSAnKCJzcGFyYyIgInNwYXJjNjQiICJwb3dlcnBjIiAicG93ZXJwYzY0IiAic3B1IgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICJtaXBzIiAibWlwczY0IikpCi1AQCAtMTAwLDcgKzEwMCw3IEBACisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm1pcHMiICJtaXBzNjQiICJtNjhrIiAiczM5MHgiKSkKK0BAIC0xMDgsNyArMTA4LDcgQEAKICAKICAgICAgICAgICAgKChzdHJpbmctbWF0Y2ggIjY0JCIgY3B1KSA4KQotICAgICAgICAgICAoKHN0cmluZy1tYXRjaCAiNjRbbGJlXVtsYmVdJCIgY3B1KSA4KQotLSAgICAgICAgICAoKG1lbWJlciBjcHUgJygic3BhcmMiICJwb3dlcnBjIiAibWlwcyIgIm1pcHNlbCIpKSA0KQotKyAgICAgICAgICAoKG1lbWJlciBjcHUgJygic3BhcmMiICJwb3dlcnBjIiAibWlwcyIgIm1pcHNlbCIgIm5pb3MyIikpIDQpCisgICAgICAgICAgICgoc3RyaW5nLW1hdGNoICI2NF8/W2xiZV1bbGJlXSQiIGNwdSkgOCkKKy0gICAgICAgICAgKChtZW1iZXIgY3B1ICcoInNwYXJjIiAicG93ZXJwYyIgIm1pcHMiICJtaXBzZWwiICJtNjhrIiAic2g0IikpIDQpCisrICAgICAgICAgICgobWVtYmVyIGNwdSAnKCJzcGFyYyIgInBvd2VycGMiICJtaXBzIiAibWlwc2VsIiAibTY4ayIgInNoNCIgIm5pb3MyIikpIDQpCisgICAgICAgICAgICgobWVtYmVyIGNwdSAnKCJzMzkweCIpKSA4KQogICAgICAgICAgICAoKHN0cmluZy1tYXRjaCAiXmFybS4qIiBjcHUpIDQpCiAgICAgICAgICAgIChlbHNlIChlcnJvciAidW5rbm93biBDUFUgd29yZCBzaXplIiBjcHUpKSkpKQotIAotLS0gCi0yLjcuMC5yYzMKLQpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9ndWlsZS9maWxlcy9kZWJpYW4vMDAwMi1NYXJrLVVudXNlZC1tb2R1bGVzLWFyZS1yZW1vdmVkLWdjLXRlc3QtYXMtdW5yZXNvbHZlLnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9ndWlsZS9maWxlcy9kZWJpYW4vMDAwMi1NYXJrLVVudXNlZC1tb2R1bGVzLWFyZS1yZW1vdmVkLWdjLXRlc3QtYXMtdW5yZXNvbHZlLnBhdGNoCmluZGV4IDQzMjM4YTcuLmM3YmY2MzUgMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ3VpbGUvZmlsZXMvZGViaWFuLzAwMDItTWFyay1VbnVzZWQtbW9kdWxlcy1hcmUtcmVtb3ZlZC1nYy10ZXN0LWFzLXVucmVzb2x2ZS5wYXRjaAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2d1aWxlL2ZpbGVzL2RlYmlhbi8wMDAyLU1hcmstVW51c2VkLW1vZHVsZXMtYXJlLXJlbW92ZWQtZ2MtdGVzdC1hcy11bnJlc29sdmUucGF0Y2gKQEAgLTEsNiArMSw2IEBACiBVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW2RlYmlhbiBwYXRjaF0KIAotU2lnbmVkLU9mZi1ieTogTml0aW4gQSBLYW1ibGUgPG5pdGluLmEua2FtYmxlQGludGVsLmNvbT4KK1NpZ25lZC1vZmYtYnk6IE5pdGluIEEgS2FtYmxlIDxuaXRpbi5hLmthbWJsZUBpbnRlbC5jb20+CiAKIEZyb20gZTUyYmZjZGJhY2E1ZGNlNDk4Njc4ZDhmNTEyMzgxZTNlMzlhNDA2NiBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKIEZyb206IFJvYiBCcm93bmluZyA8cmxiQGRlZmF1bHR2YWx1ZS5vcmc+CmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2d1aWxlL2ZpbGVzL2RlYmlhbi8wMDAzLU1hcmstbXV0ZXgtd2l0aC1vd25lci1ub3QtcmV0YWluZWQtdGhyZWFkcy10ZXN0LWFzLXUucGF0Y2ggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2d1aWxlL2ZpbGVzL2RlYmlhbi8wMDAzLU1hcmstbXV0ZXgtd2l0aC1vd25lci1ub3QtcmV0YWluZWQtdGhyZWFkcy10ZXN0LWFzLXUucGF0Y2gKaW5kZXggMzRiZTNiOS4uZDNmYWYzZSAxMDA2NDQKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9ndWlsZS9maWxlcy9kZWJpYW4vMDAwMy1NYXJrLW11dGV4LXdpdGgtb3duZXItbm90LXJldGFpbmVkLXRocmVhZHMtdGVzdC1hcy11LnBhdGNoCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ3VpbGUvZmlsZXMvZGViaWFuLzAwMDMtTWFyay1tdXRleC13aXRoLW93bmVyLW5vdC1yZXRhaW5lZC10aHJlYWRzLXRlc3QtYXMtdS5wYXRjaApAQCAtMSw2ICsxLDYgQEAKIFVwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbZGViaWFuIHBhdGNoXQogCi1TaWduZWQtT2ZmLWJ5OiBOaXRpbiBBIEthbWJsZSA8bml0aW4uYS5rYW1ibGVAaW50ZWwuY29tPgorU2lnbmVkLW9mZi1ieTogTml0aW4gQSBLYW1ibGUgPG5pdGluLmEua2FtYmxlQGludGVsLmNvbT4KIAogRnJvbSA4NDg1NDMwOTFkNTVkZGRiNTRhODU2MTIxNTU5NjQ1MDZkNzEyODUyIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQogRnJvbTogUm9iIEJyb3duaW5nIDxybGJAZGVmYXVsdHZhbHVlLm9yZz4KZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ3VpbGUvZmlsZXMvZ3VpbGVfMi4wLjZfZml4X3NlZF9lcnJvci5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ3VpbGUvZmlsZXMvZ3VpbGVfMi4wLjZfZml4X3NlZF9lcnJvci5wYXRjaAppbmRleCBlNWRjMjI2Li41NTk3YmIyIDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2d1aWxlL2ZpbGVzL2d1aWxlXzIuMC42X2ZpeF9zZWRfZXJyb3IucGF0Y2gKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9ndWlsZS9maWxlcy9ndWlsZV8yLjAuNl9maXhfc2VkX2Vycm9yLnBhdGNoCkBAIC02LDcgKzYsNyBAQAogfCBzZWQ6IC1lIGV4cHJlc3Npb24gIzEsIGNoYXIgOTogdW5rbm93biBvcHRpb24gdG8gYHMnCiB8IGNvbmZpZ3VyZS5hYzozOTogZXJyb3I6IEFDX0lOSVQgc2hvdWxkIGJlIGNhbGxlZCB3aXRoIHBhY2thZ2UgYW5kIHZlcnNpb24gYXJndW1lbnRzCiAKLVNpZ25lZC1PZmYtYnk6IE5pdGluIEEgS2FtYmxlIDxuaXRpbi5hLmthbWJsZUBpbnRlbC5jb20+CitTaWduZWQtb2ZmLWJ5OiBOaXRpbiBBIEthbWJsZSA8bml0aW4uYS5rYW1ibGVAaW50ZWwuY29tPgogMjAxMi8wNS8wMQogCiBJbmRleDogZ3VpbGUtMi4wLjUvYnVpbGQtYXV4L2dpdC12ZXJzaW9uLWdlbgpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9ndWlsZS9maWxlcy9saWJndWlsZS1WTS1BU01fTVVMLWZvci1BUk0tQWRkLWVhcmx5Y2xvYmJlci5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ3VpbGUvZmlsZXMvbGliZ3VpbGUtVk0tQVNNX01VTC1mb3ItQVJNLUFkZC1lYXJseWNsb2JiZXIucGF0Y2gKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGU1MDA1OWEuLjAwMDAwMDAKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9ndWlsZS9maWxlcy9saWJndWlsZS1WTS1BU01fTVVMLWZvci1BUk0tQWRkLWVhcmx5Y2xvYmJlci5wYXRjaAorKysgL2Rldi9udWxsCkBAIC0xLDQzICswLDAgQEAKLUZyb20gYTg1Yzc4ZWExMzkzOTg1ZmRiNmU2Njc4ZGVhMTkxMzVjNTUzZDM0MSBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKLUZyb206IE1hcmsgSCBXZWF2ZXIgPG1od0BuZXRyaXMub3JnPgotRGF0ZTogRnJpLCAxOSBTZXAgMjAxNCAyMToxODowOSAtMDQwMAotU3ViamVjdDogW1BBVENIXSBWTTogQVNNX01VTCBmb3IgQVJNOiBBZGQgZWFybHljbG9iYmVyIGNvbnN0cmFpbnQgdG8gdGhlIFNNVUxMCi0gb3V0cHV0cy4KLQotUmVwb3J0ZWQgYnkgUm9iIEJyb3duaW5nIDxybGJAZGVmYXVsdHZhbHVlLm9yZz4uCi0KLSogbGliZ3VpbGUvdm0taS1zY2hlbWUuYyAoQVNNX01VTClbQVJNXTogQWRkIGVhcmx5Y2xvYmJlciAoJikgY29uc3RyYWludAotICB0byB0aGUgU01VTEwgb3V0cHV0IHJlZ2lzdGVycy4KLQotQXV0aG9yOiBNYXJrIEggV2VhdmVyIDxtaHdAbmV0cmlzLm9yZz4KLQotVXBzdHJlYW0tU3RhdHVzOiBCYWNrcG9ydAotCi1TaWduZWQtb2ZmLWJ5OiBKYWNraWUgSHVhbmcgPGphY2tpZS5odWFuZ0B3aW5kcml2ZXIuY29tPgotLS0tCi0gbGliZ3VpbGUvdm0taS1zY2hlbWUuYyB8IDUgKystLS0KLSAxIGZpbGUgY2hhbmdlZCwgMiBpbnNlcnRpb25zKCspLCAzIGRlbGV0aW9ucygtKQotCi1kaWZmIC0tZ2l0IGEvbGliZ3VpbGUvdm0taS1zY2hlbWUuYyBiL2xpYmd1aWxlL3ZtLWktc2NoZW1lLmMKLWluZGV4IDU4N2FhOTUuLjE2MmVmYWIgMTAwNjQ0Ci0tLS0gYS9saWJndWlsZS92bS1pLXNjaGVtZS5jCi0rKysgYi9saWJndWlsZS92bS1pLXNjaGVtZS5jCi1AQCAtMSw1ICsxLDQgQEAKLS0vKiBDb3B5cmlnaHQgKEMpIDIwMDEsIDIwMDksIDIwMTAsIDIwMTEsIDIwMTIsIDIwMTMsCi0tICogICAyMDE0IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgotKy8qIENvcHlyaWdodCAoQykgMjAwMSwgMjAwOS0yMDE0IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgotICAqIAotICAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLUBAIC0zNjMsNyArMzYyLDcgQEAgVk1fREVGSU5FX0ZVTkNUSU9OICgxNDksIGdlLCAiZ2U/IiwgMikKLSAgICAgICB7CQkJCQkJCQkJXAotIAlzY21fdF9zaWduZWRfYml0cyBybG8sIHJoaTsJCQkJCVwKLSAJYXNtICgic211bGwgJTAsICUxLCAlMiwgJTNcbiIJCQkJCVwKLS0JICAgICA6ICI9ciIgKHJsbyksICI9ciIgKHJoaSkJCQkJCVwKLSsJICAgICA6ICI9JnIiIChybG8pLCAiPSZyIiAocmhpKQkJCQkJXAotIAkgICAgIDogInIiIChTQ01fVU5QQUNLICh4KSAtIHNjbV90YzJfaW50KSwJCQlcCi0gCSAgICAgICAiciIgKFNDTV9JX0lOVU0gKHkpKSk7CQkJCQlcCi0gCWlmIChTQ01fTElLRUxZIChTQ01fU1JTIChybG8sIDMxKSA9PSByaGkpKQkJCVwKLS0tIAotMi4zLjUKLQpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9ndWlsZS9maWxlcy9vcGVuc3VzZS9ndWlsZS02NGJpdC5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ3VpbGUvZmlsZXMvb3BlbnN1c2UvZ3VpbGUtNjRiaXQucGF0Y2gKaW5kZXggZDNlMzEyZi4uZGE2OWI1ZiAxMDA2NDQKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9ndWlsZS9maWxlcy9vcGVuc3VzZS9ndWlsZS02NGJpdC5wYXRjaAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2d1aWxlL2ZpbGVzL29wZW5zdXNlL2d1aWxlLTY0Yml0LnBhdGNoCkBAIC0xLDYgKzEsNiBAQAogVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtvcGVuc3VzZSBwYXRjaF0KIAotU2lnbmVkLU9mZi1ieTogTml0aW4gQSBLYW1ibGUgPG5pdGluLmEua2FtYmxlQGludGVsLmNvbT4KK1NpZ25lZC1vZmYtYnk6IE5pdGluIEEgS2FtYmxlIDxuaXRpbi5hLmthbWJsZUBpbnRlbC5jb20+CiAKIEluZGV4OiBndWlsZS0yLjAuMy9saWJndWlsZS9oYXNoLmMKID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ3VpbGUvZmlsZXMvb3BlbnN1c2UvZ3VpbGUtdHVybi1vZmYtZ2MtdGVzdC5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ3VpbGUvZmlsZXMvb3BlbnN1c2UvZ3VpbGUtdHVybi1vZmYtZ2MtdGVzdC5wYXRjaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTIwMTQ4Ni4uMDAwMDAwMAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2d1aWxlL2ZpbGVzL29wZW5zdXNlL2d1aWxlLXR1cm4tb2ZmLWdjLXRlc3QucGF0Y2gKKysrIC9kZXYvbnVsbApAQCAtMSw0OSArMCwwIEBACi1VcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW29wZW5zdXNlIHBhdGNoXQotCi1TaWduZWQtT2ZmLWJ5OiBOaXRpbiBBIEthbWJsZSA8bml0aW4uYS5rYW1ibGVAaW50ZWwuY29tPgotCi1TZWUgaHR0cDovL2RlYmJ1Z3MuZ251Lm9yZy9jZ2kvYnVncmVwb3J0LmNnaT9idWc9MTAwOTYKLXdoeSB0aGlzIHRlc3QgaXMgdHVybmVkIG9mZi4KLUluZGV4OiBndWlsZS0yLjAuMy90ZXN0LXN1aXRlL3Rlc3RzL2djLnRlc3QKLT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tLSBndWlsZS0yLjAuMy5vcmlnL3Rlc3Qtc3VpdGUvdGVzdHMvZ2MudGVzdAkyMDExLTEwLTE1IDA5OjM0OjQwLjAwMDAwMDAwMCAtMDcwMAotKysrIGd1aWxlLTIuMC4zL3Rlc3Qtc3VpdGUvdGVzdHMvZ2MudGVzdAkyMDEyLTAxLTEzIDIxOjUyOjEwLjI4MjU0MDM1NSAtMDgwMAotQEAgLTY1LDIzICs2NSwyMyBAQAotICAgICAgIGZvbykpKQotIAotIAotLSh3aXRoLXRlc3QtcHJlZml4ICJnYyIKLS0gIChwYXNzLWlmICJVbnVzZWQgbW9kdWxlcyBhcmUgcmVtb3ZlZCIKLS0gICAgKGxldCogKChndWFyZCAobWFrZS1ndWFyZGlhbikpCi0tICAgICAgICAgICAodG90YWwgMTAwMCkpCi0tCi0tICAgICAgKGZvci1lYWNoIChsYW1iZGEgKHgpIChndWFyZCAobWFrZS1tb2R1bGUpKSkgKGlvdGEgdG90YWwpKQotKzs7KHdpdGgtdGVzdC1wcmVmaXggImdjIgotKzs7ICAocGFzcy1pZiAiVW51c2VkIG1vZHVsZXMgYXJlIHJlbW92ZWQiCi0rOzsgICAgKGxldCogKChndWFyZCAobWFrZS1ndWFyZGlhbikpCi0rOzsgICAgICAgICAgICh0b3RhbCAxMDAwKSkKLSs7OwotKzs7ICAgICAgKGZvci1lYWNoIChsYW1iZGEgKHgpIChndWFyZCAobWFrZS1tb2R1bGUpKSkgKGlvdGEgdG90YWwpKQotIAotICAgICAgIDs7IEF2b2lkIGZhbHNlIHJlZmVyZW5jZXMgdG8gdGhlIG1vZHVsZXMgb24gdGhlIHN0YWNrLgotLSAgICAgIChzdGFjay1jbGVhbnVwIDIwKQotKzs7ICAgICAgKHN0YWNrLWNsZWFudXAgMjApCi0gCi0tICAgICAgKGdjKQotLSAgICAgIChnYykgOzsgdHdpY2U6IGhhdmUgdG8ga2lsbCB0aGUgd2VhayB2ZWN0b3JzLgotLSAgICAgIChnYykgOzsgdGhyaWNlOiBiZWNhdXNlIHRoZSB0ZXN0IGRvZXNuJ3Qgc3VjY2VlZCB3aXRoIG9ubHkKLSs7OyAgICAgIChnYykKLSs7OyAgICAgIChnYykgOzsgdHdpY2U6IGhhdmUgdG8ga2lsbCB0aGUgd2VhayB2ZWN0b3JzLgotKzs7ICAgICAgKGdjKSA7OyB0aHJpY2U6IGJlY2F1c2UgdGhlIHRlc3QgZG9lc24ndCBzdWNjZWVkIHdpdGggb25seQotICAgICAgICAgICAgOzsgb25lIGdjIHJvdW5kLiBub3Qgc3VyZSB3aHkuCi0gCi0tICAgICAgKD0gKGxldCBscCAoKGkgMCkpCi0tICAgICAgICAgICAoaWYgKGd1YXJkKQotLSAgICAgICAgICAgICAgIChscCAoMSsgaSkpCi0tICAgICAgICAgICAgICAgaSkpCi0tICAgICAgICAgdG90YWwpKSkpCi0rOzsgICAgICAoPSAobGV0IGxwICgoaSAwKSkKLSs7OyAgICAgICAgICAgKGlmIChndWFyZCkKLSs7OyAgICAgICAgICAgICAgIChscCAoMSsgaSkpCi0rOzsgICAgICAgICAgICAgICBpKSkKLSs7OyAgICAgICAgIHRvdGFsKSkpKQpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9ndWlsZS9maWxlcy9yZW1vdmVfc3RyY2FzZV9sX2Z1bmNzLnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9ndWlsZS9maWxlcy9yZW1vdmVfc3RyY2FzZV9sX2Z1bmNzLnBhdGNoCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlN2EwNmZlLi4wMDAwMDAwCi0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ3VpbGUvZmlsZXMvcmVtb3ZlX3N0cmNhc2VfbF9mdW5jcy5wYXRjaAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLVRoZXNlIHVudXNlZCBmdW5jdGlvbnMgY2F1c2UgYnVpbGQgZmFpbHVyZXMgd2l0aCB1Y2xpYmMgc2luY2UgdGhleSByZWZlcmVuY2UgX191Y2xpYmNfbG9jYWxlX3N0cnVjdAotYW5kIHRoaXMgaXMgZXhwb3NlZCBieSB1Y2xpYmMgQVBJIGhlYWRlcnMgb25seSBpZiBDIGxvY2FsZXMgYXJlIGJ1aWx0LCBidXQgZm9yIE9FIHdlIGJ1aWxkIGZ1bGwgbG9jYWxlCi1zdXBwb3J0Ci0KLVNpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+Ci1VcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKLUluZGV4OiBndWlsZS0yLjAuMTEvbGliZ3VpbGUvaTE4bi5jCi09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLS0gZ3VpbGUtMi4wLjExLm9yaWcvbGliZ3VpbGUvaTE4bi5jCi0rKysgZ3VpbGUtMi4wLjExL2xpYmd1aWxlL2kxOG4uYwotQEAgLTg1MSwyNyArODUxLDYgQEAgc3RyX2Rvd25jYXNlIChyZWdpc3RlciBjaGFyICpkc3QsIHJlZ2lzdAotICAgKmRzdCA9ICdcMCc7Ci0gfQotIAotLSNpZmRlZiBVU0VfR05VX0xPQ0FMRV9BUEkKLS1zdGF0aWMgaW5saW5lIHZvaWQKLS1zdHJfdXBjYXNlX2wgKHJlZ2lzdGVyIGNoYXIgKmRzdCwgcmVnaXN0ZXIgY29uc3QgY2hhciAqc3JjLAotLQkgICAgICBzY21fdF9sb2NhbGUgbG9jYWxlKQotLXsKLS0gIGZvciAoOyAqc3JjICE9ICdcMCc7IHNyYysrLCBkc3QrKykKLS0gICAgKmRzdCA9IHRvdXBwZXJfbCAoKnNyYywgbG9jYWxlKTsKLS0gICpkc3QgPSAnXDAnOwotLX0KLS0KLS1zdGF0aWMgaW5saW5lIHZvaWQKLS1zdHJfZG93bmNhc2VfbCAocmVnaXN0ZXIgY2hhciAqZHN0LCByZWdpc3RlciBjb25zdCBjaGFyICpzcmMsCi0tCQlzY21fdF9sb2NhbGUgbG9jYWxlKQotLXsKLS0gIGZvciAoOyAqc3JjICE9ICdcMCc7IHNyYysrLCBkc3QrKykKLS0gICAgKmRzdCA9IHRvbG93ZXJfbCAoKnNyYywgbG9jYWxlKTsKLS0gICpkc3QgPSAnXDAnOwotLX0KLS0jZW5kaWYKLS0KLS0KLSBTQ01fREVGSU5FIChzY21fc3RyaW5nX2xvY2FsZV9sdCwgInN0cmluZy1sb2NhbGU8PyIsIDIsIDEsIDAsCi0gCSAgICAoU0NNIHMxLCBTQ00gczIsIFNDTSBsb2NhbGUpLAotIAkgICAgIkNvbXBhcmUgc3RyaW5ncyBAdmFye3MxfSBhbmQgQHZhcntzMn0gaW4gYSBsb2NhbGUtZGVwZW5kZW50IHdheS4iCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2d1aWxlL2d1aWxlXzIuMC4xMS5iYiBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ3VpbGUvZ3VpbGVfMi4wLjExLmJiCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2Y2VmZTY2Li4wMDAwMDAwCi0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ3VpbGUvZ3VpbGVfMi4wLjExLmJiCisrKyAvZGV2L251bGwKQEAgLTEsMTI4ICswLDAgQEAKLVNVTU1BUlkgPSAiR3VpbGUgaXMgdGhlIEdOVSBVYmlxdWl0b3VzIEludGVsbGlnZW50IExhbmd1YWdlIGZvciBFeHRlbnNpb25zIgotREVTQ1JJUFRJT04gPSAiR3VpbGUgaXMgdGhlIEdOVSBVYmlxdWl0b3VzIEludGVsbGlnZW50IExhbmd1YWdlIGZvciBFeHRlbnNpb25zLFwKLSB0aGUgb2ZmaWNpYWwgZXh0ZW5zaW9uIGxhbmd1YWdlIGZvciB0aGUgR05VIG9wZXJhdGluZyBzeXN0ZW0uXAotIEd1aWxlIGlzIGEgbGlicmFyeSBkZXNpZ25lZCB0byBoZWxwIHByb2dyYW1tZXJzIGNyZWF0ZSBmbGV4aWJsZSBhcHBsaWNhdGlvbnMuXAotIFVzaW5nIEd1aWxlIGluIGFuIGFwcGxpY2F0aW9uIGFsbG93cyB0aGUgYXBwbGljYXRpb24ncyBmdW5jdGlvbmFsaXR5IHRvIGJlXAotIGV4dGVuZGVkIGJ5IHVzZXJzIG9yIG90aGVyIHByb2dyYW1tZXJzIHdpdGggcGx1Zy1pbnMsIG1vZHVsZXMsIG9yIHNjcmlwdHMuXAotIEd1aWxlIHByb3ZpZGVzIHdoYXQgbWlnaHQgYmUgZGVzY3JpYmVkIGFzICdwcmFjdGljYWwgc29mdHdhcmUgZnJlZWRvbSwnXAotIG1ha2luZyBpdCBwb3NzaWJsZSBmb3IgdXNlcnMgdG8gY3VzdG9taXplIGFuIGFwcGxpY2F0aW9uIHRvIG1lZXQgdGhlaXJcCi0gbmVlZHMgd2l0aG91dCBkaWdnaW5nIGludG8gdGhlIGFwcGxpY2F0aW9uJ3MgaW50ZXJuYWxzLiIKLQotSE9NRVBBR0UgPSAiaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL2d1aWxlLyIKLVNFQ1RJT04gPSAiZGV2ZWwiCi1MSUNFTlNFID0gIkdQTHYzIgotTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9ZDMyMjM5YmNiNjczNDYzYWI4NzRlODBkNDdmYWU1MDQiCi0KLVNSQ19VUkkgPSAiJHtHTlVfTUlSUk9SfS9ndWlsZS9ndWlsZS0ke1BWfS50YXIueHogXAotICAgICAgICAgICBmaWxlOi8vZGViaWFuLzAwMDItTWFyay1VbnVzZWQtbW9kdWxlcy1hcmUtcmVtb3ZlZC1nYy10ZXN0LWFzLXVucmVzb2x2ZS5wYXRjaCBcCi0gICAgICAgICAgIGZpbGU6Ly9kZWJpYW4vMDAwMy1NYXJrLW11dGV4LXdpdGgtb3duZXItbm90LXJldGFpbmVkLXRocmVhZHMtdGVzdC1hcy11LnBhdGNoIFwKLSAgICAgICAgICAgZmlsZTovL29wZW5zdXNlL2d1aWxlLTY0Yml0LnBhdGNoIFwKLSAgICAgICAgICAgZmlsZTovL2d1aWxlXzIuMC42X2ZpeF9zZWRfZXJyb3IucGF0Y2ggXAotICAgICAgICAgICBmaWxlOi8vYXJtX2VuZGlhbm5lc3MucGF0Y2ggXAotICAgICAgICAgICBmaWxlOi8vYXJtX2FhcmNoNjQucGF0Y2ggXAotICAgICAgICAgICBmaWxlOi8vd29ya2Fyb3VuZC1pY2Utc3NhLWNvcnJ1cHRpb24ucGF0Y2ggXAotICAgICAgICAgICBmaWxlOi8vbGliZ3VpbGUtTWFrZWZpbGUuYW0taG9vay5wYXRjaCBcCi0gICAgICAgICAgIGZpbGU6Ly9saWJndWlsZS1WTS1BU01fTVVMLWZvci1BUk0tQWRkLWVhcmx5Y2xvYmJlci5wYXRjaCBcCi0gICAgICAgICAgIGZpbGU6Ly9yZW1vdmVfc3RyY2FzZV9sX2Z1bmNzLnBhdGNoIFwKLSAgICAgICAgICAgZmlsZTovLzAwMDEtbGliZ3VpbGUtQ2hlY2stZm9yLXN0cnRvbF9sLWR1cmluZy1jb25maWd1cmUucGF0Y2ggXAotICAgICAgICAgICBmaWxlOi8vMDAwMi1SZWNvZ25pemUtbmlvczItYXMtY29tcGlsYXRpb24tdGFyZ2V0LnBhdGNoIFwKLSAgICAgICAgICAgIgotCi0jICAgICAgICAgICBmaWxlOi8vZGViaWFuLzAwMDEtQ2hhbmdlLWd1aWxlLXRvLWd1aWxlLVguWS1mb3ItaW5mby1wYWdlcy5wYXRjaAotIyAgICAgICAgICAgZmlsZTovL29wZW5zdXNlL2d1aWxlLXR1cm4tb2ZmLWdjLXRlc3QucGF0Y2gKLQotU1JDX1VSSVttZDVzdW1dID0gIjAzZjFiY2UxYTQ5ODMwNzZkOTU1MDAzNDcyMzA2YTEzIgotU1JDX1VSSVtzaGEyNTZzdW1dID0gImFlZDBhNGE2ZGI0ZTMxMGNiZGZlYjM2MTNmYTZmODZmZGRjOTFlZjYyNGMxZTNmODkzN2E2MzA0YzY5MTAzZTIiCi0KLQotaW5oZXJpdCBhdXRvdG9vbHMgZ2V0dGV4dCBwa2djb25maWcgdGV4aW5mbwotQkJDTEFTU0VYVEVORCA9ICJuYXRpdmUiCi0KLURFUEVORFMgPSAibGlidW5pc3RyaW5nIGJkd2djIGdtcCBsaWJ0b29sIGxpYmZmaSBuY3Vyc2VzIHJlYWRsaW5lIgotIyBhZGQgZ3VpbGUtbmF0aXZlIG9ubHkgdG8gdGhlIHRhcmdldCByZWNpcGUncyBERVBFTkRTCi1ERVBFTkRTX2FwcGVuZF9jbGFzcy10YXJnZXQgPSAiIGd1aWxlLW5hdGl2ZSBsaWJhdG9taWMtb3BzIgotCi0jIFRoZSBjb21tZW50IG9mIHRoZSBzY3JpcHQgZ3VpbGUtY29uZmlnIHNhaWQgaXQgaGFzIGJlZW4gZGVwcmVjYXRlZCBidXQgd2Ugc2hvdWxkCi0jIGF0IGxlYXN0IGFkZCB0aGUgcmVxdWlyZWQgZGVwZW5kZW5jeSB0byBtYWtlIGl0IHdvcmsgc2luY2Ugd2Ugc3RpbGwgcHJvdmlkZSB0aGUgc2NyaXB0LgotUkRFUEVORFNfJHtQTn0gPSAicGtnY29uZmlnIgotCi1SREVQRU5EU18ke1BOfV9hcHBlbmRfbGliYy1nbGliY19jbGFzcy10YXJnZXQgPSAiIGdsaWJjLWdjb252LWlzbzg4NTktMSIKLQotRVhUUkFfT0VDT05GICs9ICIke0BbJy0td2l0aG91dC1saWJsdGRsLXByZWZpeCAtLXdpdGhvdXQtbGliZ21wLXByZWZpeCAtLXdpdGhvdXQtbGlicmVhZGxpbmUtcHJlZml4JywgJyddW2JiLmRhdGEuaW5oZXJpdHNfY2xhc3MoJ25hdGl2ZScsZCldfSIKLQotRVhUUkFfT0VDT05GX2FwcGVuZF9jbGFzcy10YXJnZXQgPSAiIC0td2l0aC1saWJ1bmlzdHJpbmctcHJlZml4PSR7U1RBR0lOR19MSUJESVJ9IFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLXdpdGgtbGliZ21wLXByZWZpeD0ke1NUQUdJTkdfTElCRElSfSBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS13aXRoLWxpYmx0ZGwtcHJlZml4PSR7U1RBR0lOR19MSUJESVJ9IgotRVhUUkFfT0VDT05GX2FwcGVuZF9saWJjLXVjbGliYyA9ICIgZ3VpbGVfY3ZfdXNlX2NzcXJ0PW5vICIKLQotQ0ZMQUdTX2FwcGVuZF9saWJjLW11c2wgPSAiIC1ESEFWRV9HQ19TRVRfRklOQUxJWkVSX05PVElGSUVSIFwKLQkgICAgICAgICAgICAgICAgICAgIC1ESEFWRV9HQ19HRVRfSEVBUF9VU0FHRV9TQUZFIFwKLQkgICAgICAgICAgICAgICAgICAgIC1ESEFWRV9HQ19HRVRfRlJFRV9TUEFDRV9ESVZJU09SIFwKLQkgICAgICAgICAgICAgICAgICAgIC1ESEFWRV9HQ19TRVRfRklOQUxJWkVfT05fREVNQU5EIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICIKLQotZG9fY29uZmlndXJlX3ByZXBlbmQoKSB7Ci0JbWtkaXIgLXAgcG8KLX0KLQotZXhwb3J0IEdVSUxFX0ZPUl9CVUlMRD0iJHtCVUlMRF9TWVN9LWd1aWxlIgotCi1kb19pbnN0YWxsX2FwcGVuZF9jbGFzcy1uYXRpdmUoKSB7Ci0JaW5zdGFsbCAtbSAwNzU1ICAke0R9JHtiaW5kaXJ9L2d1aWxlICR7RH0ke2JpbmRpcn0vJHtIT1NUX1NZU30tZ3VpbGUKLQotCWNyZWF0ZV93cmFwcGVyICR7RH0vJHtiaW5kaXJ9L2d1aWxlIFwKLQkJR1VJTEVfTE9BRF9QQVRIPSR7U1RBR0lOR19EQVRBRElSX05BVElWRX0vZ3VpbGUvMi4wIFwKLQkJR1VJTEVfTE9BRF9DT01QSUxFRF9QQVRIPSR7U1RBR0lOR19MSUJESVJfTkFUSVZFfS9ndWlsZS8yLjAvY2NhY2hlCi0JY3JlYXRlX3dyYXBwZXIgJHtEfSR7YmluZGlyfS8ke0hPU1RfU1lTfS1ndWlsZSBcCi0JCUdVSUxFX0xPQURfUEFUSD0ke1NUQUdJTkdfREFUQURJUl9OQVRJVkV9L2d1aWxlLzIuMCBcCi0JCUdVSUxFX0xPQURfQ09NUElMRURfUEFUSD0ke1NUQUdJTkdfTElCRElSX05BVElWRX0vZ3VpbGUvMi4wL2NjYWNoZQotfQotCi1kb19pbnN0YWxsX2FwcGVuZF9jbGFzcy10YXJnZXQoKSB7Ci0JIyBjbGVhbnVwIGJ1aWxkcGF0aHMgaW4gc2NyaXB0cwotCXNlZCAtaSAtZSAnczoke1NUQUdJTkdfRElSX05BVElWRX06OicgJHtEfSR7YmluZGlyfS9ndWlsZS1jb25maWcKLQlzZWQgLWkgLWUgJ3M6JHtTVEFHSU5HX0RJUl9IT1NUfTo6JyAke0R9JHtiaW5kaXJ9L2d1aWxlLXNuYXJmCi0KLQlzZWQgLWkgLWUgJ3M6JHtTVEFHSU5HX0RJUl9UQVJHRVR9OjpnJyAke0R9JHtsaWJkaXJ9L3BrZ2NvbmZpZy9ndWlsZS0yLjAucGMKLX0KLQotZG9faW5zdGFsbF9hcHBlbmRfbGliYy1tdXNsKCkgewotCXJtIC1mICR7RH0ke2xpYmRpcn0vY2hhcnNldC5hbGlhcwotfQotCi1TWVNST09UX1BSRVBST0NFU1NfRlVOQ1MgPSAiZ3VpbGVfY3Jvc3NfY29uZmlnIgotCi1ndWlsZV9jcm9zc19jb25maWcoKSB7Ci0JIyB0aGlzIGlzIG9ubHkgZm9yIHRhcmdldCByZWNpcGUKLQlpZiBbICIke1BOfSIgPSAiZ3VpbGUiIF0KLQl0aGVuCi0JICAgICAgICAjIENyZWF0ZSBndWlsZS1jb25maWcgcmV0dXJuaW5nIHRhcmdldCB2YWx1ZXMgaW5zdGVhZCBvZiBuYXRpdmUgdmFsdWVzCi0JICAgICAgICBpbnN0YWxsIC1kICR7U1lTUk9PVF9ERVNURElSfSR7U1RBR0lOR19CSU5ESVJfQ1JPU1N9Ci0gICAgICAgIAllY2hvICcjISdgd2hpY2ggJHtCVUlMRF9TWVN9LWd1aWxlYCQnIFxcXG4tLW5vLWF1dG8tY29tcGlsZSAtZSBtYWluIC1zXG4hI1xuKGRlZmluZSAlZ3VpbGUtYnVpbGQtaW5mbyAnXCdcKCBcCi0JCQk+ICR7Qn0vZ3VpbGUtY29uZmlnLmNyb3NzCi0JICAgICAgICBzZWQgLW4gLWUgJ3M6XlsgXHRdKntbIFx0XSoiOiAgKDonIFwKLQkJCS1lICdzOiIsWyBcdF0qIjogLiAiOicgXAotCQkJLWUgJ3M6IiAqfSwgKlxcOiIpOicgXAotCQkJLWUgJ3M6Xi4qY2FjaGVkaXIuKiQ6OicgXAotCQkJLWUgJy9eICAoL3AnIFwKLQkJCTwgJHtCfS9saWJndWlsZS9saWJwYXRoLmggPj4gJHtCfS9ndWlsZS1jb25maWcuY3Jvc3MKLQkgICAgICAgIGVjaG8gJykpJyA+PiAke0J9L2d1aWxlLWNvbmZpZy5jcm9zcwotCSAgICAgICAgY2F0ICR7Qn0vbWV0YS9ndWlsZS1jb25maWcgPj4gJHtCfS9ndWlsZS1jb25maWcuY3Jvc3MKLQkgICAgICAgIGluc3RhbGwgJHtCfS9ndWlsZS1jb25maWcuY3Jvc3MgJHtTVEFHSU5HX0JJTkRJUl9DUk9TU30vZ3VpbGUtY29uZmlnCi0JZmkKLX0KLQotIyBHdWlsZSBuZWVkcyB0aGUgY29tcGlsZWQgZmlsZXMgdG8gYmUgbmV3ZXIgdGhhbiB0aGUgc291cmNlLCBhbmQgaXQgd29uJ3QKLSMgYXV0by1jb21waWxlIGludG8gdGhlIHByZWZpeCBldmVuIGlmIGl0IGNhbiB3cml0ZSB0aGVyZSwgc28gdG91Y2ggdGhlbSBoZXJlIGFzCi0jIHN5c3Jvb3QgaXMgbWFuYWdlZC4KLVNTVEFURVBPU1RJTlNURlVOQ1MgKz0gImd1aWxlX3NzdGF0ZV9wb3N0aW5zdCIKLWd1aWxlX3NzdGF0ZV9wb3N0aW5zdCgpIHsKLQlpZiBbICIke0JCX0NVUlJFTlRUQVNLfSIgPSAicG9wdWxhdGVfc3lzcm9vdCIgLW8gIiR7QkJfQ1VSUkVOVFRBU0t9IiA9ICJwb3B1bGF0ZV9zeXNyb290X3NldHNjZW5lIiBdCi0JdGhlbgotICAgICAgICAgICAgICAgIGZpbmQgJHtTVEFHSU5HX0RJUl9UQVJHRVR9LyR7bGliZGlyfS9ndWlsZS8yLjAvY2NhY2hlIC10eXBlIGYgfCB4YXJncyB0b3VjaAotCWZpCi19Ci0KLSMgaHR0cDovL2Vycm9ycy55b2N0b3Byb2plY3Qub3JnL0Vycm9ycy9EZXRhaWxzLzIwNDkxLwotQVJNX0lOU1RSVUNUSU9OX1NFVF9hcm12NCA9ICJhcm0iCi1BUk1fSU5TVFJVQ1RJT05fU0VUX2FybXY1ID0gImFybSIKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ3VpbGUvZ3VpbGVfMi4wLjEyLmJiIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9ndWlsZS9ndWlsZV8yLjAuMTIuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDJmZTUxMQotLS0gL2Rldi9udWxsCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ3VpbGUvZ3VpbGVfMi4wLjEyLmJiCkBAIC0wLDAgKzEsMTIxIEBACitTVU1NQVJZID0gIkd1aWxlIGlzIHRoZSBHTlUgVWJpcXVpdG91cyBJbnRlbGxpZ2VudCBMYW5ndWFnZSBmb3IgRXh0ZW5zaW9ucyIKK0RFU0NSSVBUSU9OID0gIkd1aWxlIGlzIHRoZSBHTlUgVWJpcXVpdG91cyBJbnRlbGxpZ2VudCBMYW5ndWFnZSBmb3IgRXh0ZW5zaW9ucyxcCisgdGhlIG9mZmljaWFsIGV4dGVuc2lvbiBsYW5ndWFnZSBmb3IgdGhlIEdOVSBvcGVyYXRpbmcgc3lzdGVtLlwKKyBHdWlsZSBpcyBhIGxpYnJhcnkgZGVzaWduZWQgdG8gaGVscCBwcm9ncmFtbWVycyBjcmVhdGUgZmxleGlibGUgYXBwbGljYXRpb25zLlwKKyBVc2luZyBHdWlsZSBpbiBhbiBhcHBsaWNhdGlvbiBhbGxvd3MgdGhlIGFwcGxpY2F0aW9uJ3MgZnVuY3Rpb25hbGl0eSB0byBiZVwKKyBleHRlbmRlZCBieSB1c2VycyBvciBvdGhlciBwcm9ncmFtbWVycyB3aXRoIHBsdWctaW5zLCBtb2R1bGVzLCBvciBzY3JpcHRzLlwKKyBHdWlsZSBwcm92aWRlcyB3aGF0IG1pZ2h0IGJlIGRlc2NyaWJlZCBhcyAncHJhY3RpY2FsIHNvZnR3YXJlIGZyZWVkb20sJ1wKKyBtYWtpbmcgaXQgcG9zc2libGUgZm9yIHVzZXJzIHRvIGN1c3RvbWl6ZSBhbiBhcHBsaWNhdGlvbiB0byBtZWV0IHRoZWlyXAorIG5lZWRzIHdpdGhvdXQgZGlnZ2luZyBpbnRvIHRoZSBhcHBsaWNhdGlvbidzIGludGVybmFscy4iCisKK0hPTUVQQUdFID0gImh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS9ndWlsZS8iCitTRUNUSU9OID0gImRldmVsIgorTElDRU5TRSA9ICJHUEx2MyIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PWQzMjIzOWJjYjY3MzQ2M2FiODc0ZTgwZDQ3ZmFlNTA0IgorCitTUkNfVVJJID0gIiR7R05VX01JUlJPUn0vZ3VpbGUvZ3VpbGUtJHtQVn0udGFyLnh6IFwKKyAgICAgICAgICAgZmlsZTovL2RlYmlhbi8wMDAyLU1hcmstVW51c2VkLW1vZHVsZXMtYXJlLXJlbW92ZWQtZ2MtdGVzdC1hcy11bnJlc29sdmUucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vZGViaWFuLzAwMDMtTWFyay1tdXRleC13aXRoLW93bmVyLW5vdC1yZXRhaW5lZC10aHJlYWRzLXRlc3QtYXMtdS5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9vcGVuc3VzZS9ndWlsZS02NGJpdC5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9ndWlsZV8yLjAuNl9maXhfc2VkX2Vycm9yLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL2FybV9lbmRpYW5uZXNzLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL2FybV9hYXJjaDY0LnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL3dvcmthcm91bmQtaWNlLXNzYS1jb3JydXB0aW9uLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL2xpYmd1aWxlLU1ha2VmaWxlLmFtLWhvb2sucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vMDAwMi1SZWNvZ25pemUtbmlvczItYXMtY29tcGlsYXRpb24tdGFyZ2V0LnBhdGNoIFwKKyAgICAgICAgICAgIgorCitTUkNfVVJJW21kNXN1bV0gPSAiMDgxZmRmODBjZDNhNzZmMjYwYTJhMGQ4N2Y3NzNkNmIiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiZGU4MTg3NzM2ZjliMjYwZjJmYTc3NmVkMzliNTJjYjc0ZGQzODljY2Y3MDM5YzA0MmYwNjA2MjcwMTk2YjdlOSIKKworaW5oZXJpdCBhdXRvdG9vbHMgZ2V0dGV4dCBwa2djb25maWcgdGV4aW5mbworQkJDTEFTU0VYVEVORCA9ICJuYXRpdmUiCisKK0RFUEVORFMgPSAibGlidW5pc3RyaW5nIGJkd2djIGdtcCBsaWJ0b29sIGxpYmZmaSBuY3Vyc2VzIHJlYWRsaW5lIgorIyBhZGQgZ3VpbGUtbmF0aXZlIG9ubHkgdG8gdGhlIHRhcmdldCByZWNpcGUncyBERVBFTkRTCitERVBFTkRTX2FwcGVuZF9jbGFzcy10YXJnZXQgPSAiIGd1aWxlLW5hdGl2ZSBsaWJhdG9taWMtb3BzIgorCisjIFRoZSBjb21tZW50IG9mIHRoZSBzY3JpcHQgZ3VpbGUtY29uZmlnIHNhaWQgaXQgaGFzIGJlZW4gZGVwcmVjYXRlZCBidXQgd2Ugc2hvdWxkCisjIGF0IGxlYXN0IGFkZCB0aGUgcmVxdWlyZWQgZGVwZW5kZW5jeSB0byBtYWtlIGl0IHdvcmsgc2luY2Ugd2Ugc3RpbGwgcHJvdmlkZSB0aGUgc2NyaXB0LgorUkRFUEVORFNfJHtQTn0gPSAicGtnY29uZmlnIgorCitSREVQRU5EU18ke1BOfV9hcHBlbmRfbGliYy1nbGliY19jbGFzcy10YXJnZXQgPSAiIGdsaWJjLWdjb252LWlzbzg4NTktMSIKKworRVhUUkFfT0VDT05GICs9ICIke0BbJy0td2l0aG91dC1saWJsdGRsLXByZWZpeCAtLXdpdGhvdXQtbGliZ21wLXByZWZpeCAtLXdpdGhvdXQtbGlicmVhZGxpbmUtcHJlZml4JywgJyddW2JiLmRhdGEuaW5oZXJpdHNfY2xhc3MoJ25hdGl2ZScsZCldfSIKKworRVhUUkFfT0VDT05GX2FwcGVuZF9jbGFzcy10YXJnZXQgPSAiIC0td2l0aC1saWJ1bmlzdHJpbmctcHJlZml4PSR7U1RBR0lOR19MSUJESVJ9IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLXdpdGgtbGliZ21wLXByZWZpeD0ke1NUQUdJTkdfTElCRElSfSBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS13aXRoLWxpYmx0ZGwtcHJlZml4PSR7U1RBR0lOR19MSUJESVJ9IgorRVhUUkFfT0VDT05GX2FwcGVuZF9saWJjLXVjbGliYyA9ICIgZ3VpbGVfY3ZfdXNlX2NzcXJ0PW5vICIKKworQ0ZMQUdTX2FwcGVuZF9saWJjLW11c2wgPSAiIC1ESEFWRV9HQ19TRVRfRklOQUxJWkVSX05PVElGSUVSIFwKKwkgICAgICAgICAgICAgICAgICAgIC1ESEFWRV9HQ19HRVRfSEVBUF9VU0FHRV9TQUZFIFwKKwkgICAgICAgICAgICAgICAgICAgIC1ESEFWRV9HQ19HRVRfRlJFRV9TUEFDRV9ESVZJU09SIFwKKwkgICAgICAgICAgICAgICAgICAgIC1ESEFWRV9HQ19TRVRfRklOQUxJWkVfT05fREVNQU5EIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICIKKworZG9fY29uZmlndXJlX3ByZXBlbmQoKSB7CisJbWtkaXIgLXAgcG8KK30KKworZXhwb3J0IEdVSUxFX0ZPUl9CVUlMRD0iJHtCVUlMRF9TWVN9LWd1aWxlIgorCitkb19pbnN0YWxsX2FwcGVuZF9jbGFzcy1uYXRpdmUoKSB7CisJaW5zdGFsbCAtbSAwNzU1ICAke0R9JHtiaW5kaXJ9L2d1aWxlICR7RH0ke2JpbmRpcn0vJHtIT1NUX1NZU30tZ3VpbGUKKworCWNyZWF0ZV93cmFwcGVyICR7RH0vJHtiaW5kaXJ9L2d1aWxlIFwKKwkJR1VJTEVfTE9BRF9QQVRIPSR7U1RBR0lOR19EQVRBRElSX05BVElWRX0vZ3VpbGUvMi4wIFwKKwkJR1VJTEVfTE9BRF9DT01QSUxFRF9QQVRIPSR7U1RBR0lOR19MSUJESVJfTkFUSVZFfS9ndWlsZS8yLjAvY2NhY2hlCisJY3JlYXRlX3dyYXBwZXIgJHtEfSR7YmluZGlyfS8ke0hPU1RfU1lTfS1ndWlsZSBcCisJCUdVSUxFX0xPQURfUEFUSD0ke1NUQUdJTkdfREFUQURJUl9OQVRJVkV9L2d1aWxlLzIuMCBcCisJCUdVSUxFX0xPQURfQ09NUElMRURfUEFUSD0ke1NUQUdJTkdfTElCRElSX05BVElWRX0vZ3VpbGUvMi4wL2NjYWNoZQorfQorCitkb19pbnN0YWxsX2FwcGVuZF9jbGFzcy10YXJnZXQoKSB7CisJIyBjbGVhbnVwIGJ1aWxkcGF0aHMgaW4gc2NyaXB0cworCXNlZCAtaSAtZSAnczoke1NUQUdJTkdfRElSX05BVElWRX06OicgJHtEfSR7YmluZGlyfS9ndWlsZS1jb25maWcKKwlzZWQgLWkgLWUgJ3M6JHtTVEFHSU5HX0RJUl9IT1NUfTo6JyAke0R9JHtiaW5kaXJ9L2d1aWxlLXNuYXJmCisKKwlzZWQgLWkgLWUgJ3M6JHtTVEFHSU5HX0RJUl9UQVJHRVR9OjpnJyAke0R9JHtsaWJkaXJ9L3BrZ2NvbmZpZy9ndWlsZS0yLjAucGMKK30KKworZG9faW5zdGFsbF9hcHBlbmRfbGliYy1tdXNsKCkgeworCXJtIC1mICR7RH0ke2xpYmRpcn0vY2hhcnNldC5hbGlhcworfQorCitTWVNST09UX1BSRVBST0NFU1NfRlVOQ1MgPSAiZ3VpbGVfY3Jvc3NfY29uZmlnIgorCitndWlsZV9jcm9zc19jb25maWcoKSB7CisJIyB0aGlzIGlzIG9ubHkgZm9yIHRhcmdldCByZWNpcGUKKwlpZiBbICIke1BOfSIgPSAiZ3VpbGUiIF0KKwl0aGVuCisJICAgICAgICAjIENyZWF0ZSBndWlsZS1jb25maWcgcmV0dXJuaW5nIHRhcmdldCB2YWx1ZXMgaW5zdGVhZCBvZiBuYXRpdmUgdmFsdWVzCisJICAgICAgICBpbnN0YWxsIC1kICR7U1lTUk9PVF9ERVNURElSfSR7U1RBR0lOR19CSU5ESVJfQ1JPU1N9CisgICAgICAgIAllY2hvICcjISdgd2hpY2ggJHtCVUlMRF9TWVN9LWd1aWxlYCQnIFxcXG4tLW5vLWF1dG8tY29tcGlsZSAtZSBtYWluIC1zXG4hI1xuKGRlZmluZSAlZ3VpbGUtYnVpbGQtaW5mbyAnXCdcKCBcCisJCQk+ICR7Qn0vZ3VpbGUtY29uZmlnLmNyb3NzCisJICAgICAgICBzZWQgLW4gLWUgJ3M6XlsgXHRdKntbIFx0XSoiOiAgKDonIFwKKwkJCS1lICdzOiIsWyBcdF0qIjogLiAiOicgXAorCQkJLWUgJ3M6IiAqfSwgKlxcOiIpOicgXAorCQkJLWUgJ3M6Xi4qY2FjaGVkaXIuKiQ6OicgXAorCQkJLWUgJy9eICAoL3AnIFwKKwkJCTwgJHtCfS9saWJndWlsZS9saWJwYXRoLmggPj4gJHtCfS9ndWlsZS1jb25maWcuY3Jvc3MKKwkgICAgICAgIGVjaG8gJykpJyA+PiAke0J9L2d1aWxlLWNvbmZpZy5jcm9zcworCSAgICAgICAgY2F0ICR7Qn0vbWV0YS9ndWlsZS1jb25maWcgPj4gJHtCfS9ndWlsZS1jb25maWcuY3Jvc3MKKwkgICAgICAgIGluc3RhbGwgJHtCfS9ndWlsZS1jb25maWcuY3Jvc3MgJHtTVEFHSU5HX0JJTkRJUl9DUk9TU30vZ3VpbGUtY29uZmlnCisJZmkKK30KKworIyBHdWlsZSBuZWVkcyB0aGUgY29tcGlsZWQgZmlsZXMgdG8gYmUgbmV3ZXIgdGhhbiB0aGUgc291cmNlLCBhbmQgaXQgd29uJ3QKKyMgYXV0by1jb21waWxlIGludG8gdGhlIHByZWZpeCBldmVuIGlmIGl0IGNhbiB3cml0ZSB0aGVyZSwgc28gdG91Y2ggdGhlbSBoZXJlIGFzCisjIHN5c3Jvb3QgaXMgbWFuYWdlZC4KK1NTVEFURVBPU1RJTlNURlVOQ1MgKz0gImd1aWxlX3NzdGF0ZV9wb3N0aW5zdCIKK2d1aWxlX3NzdGF0ZV9wb3N0aW5zdCgpIHsKKwlpZiBbICIke0JCX0NVUlJFTlRUQVNLfSIgPSAicG9wdWxhdGVfc3lzcm9vdCIgLW8gIiR7QkJfQ1VSUkVOVFRBU0t9IiA9ICJwb3B1bGF0ZV9zeXNyb290X3NldHNjZW5lIiBdCisJdGhlbgorICAgICAgICAgICAgICAgIGZpbmQgJHtTVEFHSU5HX0RJUl9UQVJHRVR9LyR7bGliZGlyfS9ndWlsZS8yLjAvY2NhY2hlIC10eXBlIGYgfCB4YXJncyB0b3VjaAorCWZpCit9CisKKyMgaHR0cDovL2Vycm9ycy55b2N0b3Byb2plY3Qub3JnL0Vycm9ycy9EZXRhaWxzLzIwNDkxLworQVJNX0lOU1RSVUNUSU9OX1NFVF9hcm12NCA9ICJhcm0iCitBUk1fSU5TVFJVQ1RJT05fU0VUX2FybXY1ID0gImFybSIKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvaGVscDJtYW4vaGVscDJtYW4tbmF0aXZlXzEuNDcuMy5iYiBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvaGVscDJtYW4vaGVscDJtYW4tbmF0aXZlXzEuNDcuMy5iYgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjMyYjBjMy4uMDAwMDAwMAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2hlbHAybWFuL2hlbHAybWFuLW5hdGl2ZV8xLjQ3LjMuYmIKKysrIC9kZXYvbnVsbApAQCAtMSwyNSArMCwwIEBACi1TVU1NQVJZID0gIlByb2dyYW0gZm9yIGNyZWF0aW5nIHNpbXBsZSBtYW4gcGFnZXMiCi1TRUNUSU9OID0gImRldmVsIgotTElDRU5TRSA9ICJHUEx2MyIKLUxJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PWQzMjIzOWJjYjY3MzQ2M2FiODc0ZTgwZDQ3ZmFlNTA0IgotREVQRU5EUyA9ICJhdXRvY29uZi1uYXRpdmUgYXV0b21ha2UtbmF0aXZlIgotCi1TUkNfVVJJID0gIiR7R05VX01JUlJPUn0vJHtCUE59LyR7QlBOfS0ke1BWfS50YXIueHoiCi0KLVNSQ19VUklbbWQ1c3VtXSA9ICJkMWQ0NGE3YTdiMmJkNjE3NTVhMjA0NWQ5NmVjYWVhMCIKLVNSQ19VUklbc2hhMjU2c3VtXSA9ICJjMjMyYWY2NDc1ZWY2NWJlZTAyNzcwODYyYTM2MmY0YzRjMmU2Yzk5NjdkMzllOTg3ZWI5NGNhZGNmYzEzODU2IgotCi1pbmhlcml0IGF1dG90b29scyBuYXRpdmUKLQotRVhUUkFfT0VDT05GID0gIi0tZGlzYWJsZS1ubHMiCi0KLSMgV2UgZG9uJ3Qgd2FudCB0byByZWNvbmZpZ3VyZSB0aGluZ3MgYXMgaXQgd291bGQgcmVxdWlyZSAncGVybG5hdGl2ZScgdG8gYmUKLSMgdXNlZC4KLWRvX2NvbmZpZ3VyZSgpIHsKLQlvZV9ydW5jb25mCi19Ci0KLWRvX2luc3RhbGxfYXBwZW5kICgpIHsKLQkjIE1ha2Ugc3VyZSB3ZSB1c2UgL3Vzci9iaW4vZW52IHBlcmwKLQlzZWQgLWkgLWUgIjFzOiMhLio6IyEgL3Vzci9iaW4vZW52IHBlcmw6IiAke0R9JHtiaW5kaXJ9L2hlbHAybWFuCi19CmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2hlbHAybWFuL2hlbHAybWFuLW5hdGl2ZV8xLjQ3LjQuYmIgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2hlbHAybWFuL2hlbHAybWFuLW5hdGl2ZV8xLjQ3LjQuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjRkYzMyYwotLS0gL2Rldi9udWxsCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvaGVscDJtYW4vaGVscDJtYW4tbmF0aXZlXzEuNDcuNC5iYgpAQCAtMCwwICsxLDI1IEBACitTVU1NQVJZID0gIlByb2dyYW0gZm9yIGNyZWF0aW5nIHNpbXBsZSBtYW4gcGFnZXMiCitTRUNUSU9OID0gImRldmVsIgorTElDRU5TRSA9ICJHUEx2MyIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PWQzMjIzOWJjYjY3MzQ2M2FiODc0ZTgwZDQ3ZmFlNTA0IgorREVQRU5EUyA9ICJhdXRvY29uZi1uYXRpdmUgYXV0b21ha2UtbmF0aXZlIgorCitTUkNfVVJJID0gIiR7R05VX01JUlJPUn0vJHtCUE59LyR7QlBOfS0ke1BWfS50YXIueHoiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICI1NDRhY2E0OTZhN2Q4OWRlM2U1ZDk5ZTU2YTJmMDNkMyIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICJkNGVjZjY5N2QxM2YxNGRkMWE3OGM1OTk1ZjA2NDU5YmZmNzA2ZmQxY2U1OTNkMWMwMmQ4MTY2N2MwMjA3NzUzIgorCitpbmhlcml0IGF1dG90b29scyBuYXRpdmUKKworRVhUUkFfT0VDT05GID0gIi0tZGlzYWJsZS1ubHMiCisKKyMgV2UgZG9uJ3Qgd2FudCB0byByZWNvbmZpZ3VyZSB0aGluZ3MgYXMgaXQgd291bGQgcmVxdWlyZSAncGVybG5hdGl2ZScgdG8gYmUKKyMgdXNlZC4KK2RvX2NvbmZpZ3VyZSgpIHsKKwlvZV9ydW5jb25mCit9CisKK2RvX2luc3RhbGxfYXBwZW5kICgpIHsKKwkjIE1ha2Ugc3VyZSB3ZSB1c2UgL3Vzci9iaW4vZW52IHBlcmwKKwlzZWQgLWkgLWUgIjFzOiMhLio6IyEgL3Vzci9iaW4vZW52IHBlcmw6IiAke0R9JHtiaW5kaXJ9L2hlbHAybWFuCit9CmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2ludGx0b29sL2ludGx0b29sLmluYyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvaW50bHRvb2wvaW50bHRvb2wuaW5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlYjdhZTAwLi4wMDAwMDAwCi0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvaW50bHRvb2wvaW50bHRvb2wuaW5jCisrKyAvZGV2L251bGwKQEAgLTEsMzAgKzAsMCBAQAotU1VNTUFSWSA9ICJVdGlsaXR5IHNjcmlwdHMgZm9yIGludGVybmF0aW9uYWxpemluZyBYTUwiCi1TRUNUSU9OID0gImRldmVsIgotTElDRU5TRSA9ICJHUEx2MiIKLQotVVJMVj0iJHtAJy4nLmpvaW4oZC5nZXRWYXIoJ1BWJywxKS5zcGxpdCgnLicpWzA6Ml0pfSIKLVNSQ19VUkkgPSAiaHR0cDovL2xhdW5jaHBhZC5uZXQvJHtCUE59L3RydW5rLyR7UFZ9Lytkb3dubG9hZC8ke0JQfS50YXIuZ3oiCi0KLVVQU1RSRUFNX0NIRUNLX1VSSSA9ICJodHRwczovL2xhdW5jaHBhZC5uZXQvaW50bHRvb2wvdHJ1bmsvIgotCi1TID0gIiR7V09SS0RJUn0vaW50bHRvb2wtJHtQVn0iCi0KLURFUEVORFMgPSAibGlieG1sLXBhcnNlci1wZXJsLW5hdGl2ZSIKLVJERVBFTkRTXyR7UE59ID0gImdldHRleHQtZGV2IGxpYnhtbC1wYXJzZXItcGVybCIKLURFUEVORFNfY2xhc3MtbmF0aXZlID0gImxpYnhtbC1wYXJzZXItcGVybC1uYXRpdmUiCi0jIGdldHRleHQgaXMgYXNzdW1lZCB0byBleGlzdCBvbiB0aGUgaG9zdAotUkRFUEVORFNfJHtQTn1fY2xhc3MtbmF0aXZlID0gImxpYnhtbC1wYXJzZXItcGVybC1uYXRpdmUiCi1SUkVDT01NRU5EU18ke1BOfSA9ICJwZXJsLW1vZHVsZXMiCi1SUkVDT01NRU5EU18ke1BOfV9jbGFzcy1uYXRpdmUgPSAiIgotCi1GSUxFU18ke1BOfS1kZXYgPSAiIgotRklMRVNfJHtQTn0gKz0gIiR7ZGF0YWRpcn0vYWNsb2NhbCIKLQotSU5TQU5FX1NLSVBfJHtQTn0gKz0gImRldi1kZXBzIgotCi1pbmhlcml0IGF1dG90b29scyBwa2djb25maWcgcGVybG5hdGl2ZQotCi1leHBvcnQgUEVSTCA9ICIke2JpbmRpcn0vZW52IHBlcmwiCi1QRVJMX2NsYXNzLW5hdGl2ZSA9ICIvdXNyL2Jpbi9lbnYgbmF0aXZlcGVybCIKLQotQkJDTEFTU0VYVEVORCA9ICJuYXRpdmUiCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2ludGx0b29sL2ludGx0b29sL3JlbW92ZS1wZXJsLWNoZWNrLnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9pbnRsdG9vbC9pbnRsdG9vbC9yZW1vdmUtcGVybC1jaGVjay5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ZjU3ZWEzCi0tLSAvZGV2L251bGwKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9pbnRsdG9vbC9pbnRsdG9vbC9yZW1vdmUtcGVybC1jaGVjay5wYXRjaApAQCAtMCwwICsxLDQ1IEBACitSZW1vdmUgdGhlIHBlcmwgY2hlY2tzIGluIGludGx0b29sLm00LiAgVGhpcyBjYW4gZmluZCBhIGRpZmZlcmVudCBwZXJsIGJpbmFyeSB0bwordGhlIG9uZSB0aGF0IHRoZSBpbnRsdG9vbCBzY3JpcHRzIHdpbGwgYWN0dWFsbHkgYmUgdXNpbmcgKGFzIHRoZXkgaGFyZC1jb2RlIGEKK3NwZWNpZmljIGJpbmFyeSksIGZvciBleGFtcGxlIGluIHRoZSBpbnRsdG9vbC1uYXRpdmUgY2FzZSB0aGV5J2xsIGJlIHVzaW5nCituYXRpdmVwZXJsIHlldCB0aGlzIGZyYWdtZW50IGNhbiBmaW5kIGFuZCB0ZXN0IHRoZSBob3N0IHBlcmwuCisKK1RoaXMgY2FuIHJlc3VsdCBpbiByZWNpcGVzIGZhaWxpbmcgaW4gZG9fY29uZmlndXJlIGFzIGludGx0b29sLm00IGZpbmRzIGEgaG9zdAorcGVybCB3aGljaCBkb2Vzbid0IGhhdmUgWE1MOjpQYXJzZXIgaW5zdGFsbGVkLCBkZXNwaXRlIHRoZSBmYWN0IHRoYXQgaW50bHRvb2wKK3dpbGwgd29yayBmaW5lIGFzIG5hdGl2ZXBlcmwgaGFzIFhNTDo6UGFyc2VyLgorCitVcHN0cmVhbS1TdGF0dXM6IFN1Ym1pdHRlZCAoaHR0cHM6Ly9idWdzLmxhdW5jaHBhZC5uZXQvaW50bHRvb2wvK2J1Zy8xMTk3ODc1KQorU2lnbmVkLW9mZi1ieTogUm9zcyBCdXJ0b24gPHJvc3MuYnVydG9uQGludGVsLmNvbT4KKworLS0tIGEvaW50bHRvb2wubTQub3JpZwkyMDEzLTA3LTAyIDExOjIyOjIzLjAwMDAwMDAwMCAtMDcwMAorKysrIGIvaW50bHRvb2wubTQJMjAxMy0wNy0wMiAxMToyMjozMi4wMDAwMDAwMDAgLTA3MDAKK0BAIC0yNiwxICsyNiwxIEBAIGRubCBJVF9QUk9HX0lOVExUT09MKFtNSU5JTVVNLVZFUlNJT05dLCBbbm8teG1sXSkKKy0jIHNlcmlhbCA0MiBJVF9QUk9HX0lOVExUT09MCisrIyBzZXJpYWwgNDIuMSBJVF9QUk9HX0lOVExUT09MCitAQCAtMTMxLDI3ICsxMzEsNiBAQCBpZiB0ZXN0IC16ICIkeGd2ZXJzaW9uIiAtbyAteiAiJG1tdmVyc2lvCisgICAgIEFDX01TR19FUlJPUihbR05VIGdldHRleHQgdG9vbHMgbm90IGZvdW5kOyByZXF1aXJlZCBmb3IgaW50bHRvb2xdKQorIGZpCisgCistQUNfUEFUSF9QUk9HKElOVExUT09MX1BFUkwsIHBlcmwpCistaWYgdGVzdCAteiAiJElOVExUT09MX1BFUkwiOyB0aGVuCistICAgQUNfTVNHX0VSUk9SKFtwZXJsIG5vdCBmb3VuZF0pCistZmkKKy1BQ19NU0dfQ0hFQ0tJTkcoW2ZvciBwZXJsID49IDUuOC4xXSkKKy0kSU5UTFRPT0xfUEVSTCAtZSAidXNlIDUuOC4xOyIgPiAvZGV2L251bGwgMj4mMQorLWlmIHRlc3QgJD8gLW5lIDA7IHRoZW4KKy0gICBBQ19NU0dfRVJST1IoW3BlcmwgNS44LjEgaXMgcmVxdWlyZWQgZm9yIGludGx0b29sXSkKKy1lbHNlCistICAgSVRfUEVSTF9WRVJTSU9OPWAkSU5UTFRPT0xfUEVSTCAtZSAicHJpbnRmICcldmQnLCAkXlYiYAorLSAgIEFDX01TR19SRVNVTFQoWyRJVF9QRVJMX1ZFUlNJT05dKQorLWZpCistaWYgdGVzdCAieCQyIiAhPSAieG5vLXhtbCI7IHRoZW4KKy0gICBBQ19NU0dfQ0hFQ0tJTkcoW2ZvciBYTUw6OlBhcnNlcl0pCistICAgaWYgYCRJTlRMVE9PTF9QRVJMIC1lICJyZXF1aXJlIFhNTDo6UGFyc2VyIiAyPi9kZXYvbnVsbGA7IHRoZW4KKy0gICAgICAgQUNfTVNHX1JFU1VMVChbb2tdKQorLSAgIGVsc2UKKy0gICAgICAgQUNfTVNHX0VSUk9SKFtYTUw6OlBhcnNlciBwZXJsIG1vZHVsZSBpcyByZXF1aXJlZCBmb3IgaW50bHRvb2xdKQorLSAgIGZpCistZmkKKy0KKyAjIFN1YnN0aXR1dGUgQUxMX0xJTkdVQVMgc28gd2UgY2FuIHVzZSBpdCBpbiBwby9NYWtlZmlsZQorIEFDX1NVQlNUKEFMTF9MSU5HVUFTKQorIApkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9pbnRsdG9vbC9pbnRsdG9vbC9yZW1vdmUteG1sLWNoZWNrLnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9pbnRsdG9vbC9pbnRsdG9vbC9yZW1vdmUteG1sLWNoZWNrLnBhdGNoCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmYzY5ZTM3Li4wMDAwMDAwCi0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvaW50bHRvb2wvaW50bHRvb2wvcmVtb3ZlLXhtbC1jaGVjay5wYXRjaAorKysgL2Rldi9udWxsCkBAIC0xLDMzICswLDAgQEAKLVNpZ25lZC1vZmYtYnk6IEZsb3JpbiBTYXJidSA8ZmxvcmluLnNhcmJ1QHdpbmRyaXZlci5jb20+Ci0KLVVwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbT0Ugc3BlY2lmaWNdCi0KLUluZGV4OiBpbnRsdG9vbC0wLjQwLjYvaW50bHRvb2wubTQKLT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tLSBpbnRsdG9vbC0wLjQwLjYub3JpZy9pbnRsdG9vbC5tNAkyMDA5LTAyLTE0IDE0OjEyOjI4LjAwMDAwMDAwMCAtMDgwMAotKysrIGludGx0b29sLTAuNDAuNi9pbnRsdG9vbC5tNAkyMDExLTExLTIzIDE1OjM5OjM0LjY4OTU2MTg3MiAtMDgwMAotQEAgLTEyMiwxNCArMTIyLDE2IEBACi0gICAgSVRfUEVSTF9WRVJTSU9OPSJgJElOVExUT09MX1BFUkwgLWUgXCJwcmludGYgJyV2ZCcsICReVlwiYCIKLSAgICBBQ19NU0dfUkVTVUxUKFskSVRfUEVSTF9WRVJTSU9OXSkKLSBmaQotLWlmIHRlc3QgIngkMiIgIT0gInhuby14bWwiOyB0aGVuCi0tICAgQUNfTVNHX0NIRUNLSU5HKFtmb3IgWE1MOjpQYXJzZXJdKQotLSAgIGlmIGAkSU5UTFRPT0xfUEVSTCAtZSAicmVxdWlyZSBYTUw6OlBhcnNlciIgMj4vZGV2L251bGxgOyB0aGVuCi0tICAgICAgIEFDX01TR19SRVNVTFQoW29rXSkKLS0gICBlbHNlCi0tICAgICAgIEFDX01TR19FUlJPUihbWE1MOjpQYXJzZXIgcGVybCBtb2R1bGUgaXMgcmVxdWlyZWQgZm9yIGludGx0b29sXSkKLS0gICBmaQotLWZpCi0rCi0rIyBEaXNhYmxlIHRoaXMgY2hlY2sgc2luY2Ugd2Uga25vdyBYTUw6OlBhcnNlciBpcyBpbnN0YWxsZWQKLSsjaWYgdGVzdCAieCQyIiAhPSAieG5vLXhtbCI7IHRoZW4KLSsjICAgQUNfTVNHX0NIRUNLSU5HKFtmb3IgWE1MOjpQYXJzZXJdKQotKyMgICBpZiBgJElOVExUT09MX1BFUkwgLWUgInJlcXVpcmUgWE1MOjpQYXJzZXIiIDI+L2Rldi9udWxsYDsgdGhlbgotKyMgICAgICAgQUNfTVNHX1JFU1VMVChbb2tdKQotKyMgICBlbHNlCi0rIyAgICAgICBBQ19NU0dfRVJST1IoW1hNTDo6UGFyc2VyIHBlcmwgbW9kdWxlIGlzIHJlcXVpcmVkIGZvciBpbnRsdG9vbF0pCi0rIyAgIGZpCi0rI2ZpCi0gCi0gIyBTdWJzdGl0dXRlIEFMTF9MSU5HVUFTIHNvIHdlIGNhbiB1c2UgaXQgaW4gcG8vTWFrZWZpbGUKLSBBQ19TVUJTVChBTExfTElOR1VBUykKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvaW50bHRvb2wvaW50bHRvb2wvdXNlLW5hdGl2ZXBlcmwucGF0Y2ggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2ludGx0b29sL2ludGx0b29sL3VzZS1uYXRpdmVwZXJsLnBhdGNoCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1ZjVmZWQzLi4wMDAwMDAwCi0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvaW50bHRvb2wvaW50bHRvb2wvdXNlLW5hdGl2ZXBlcmwucGF0Y2gKKysrIC9kZXYvbnVsbApAQCAtMSwyMCArMCwwIEBACi1PRSBoYXMgcGVybCBiaW5hcnkgYXMgJ25hdGl2ZXBlcmwnIGluIG5hdGl2ZSBzeXNyb290IHNvIHdlIGxvb2sgZm9yIGl0Ci1pbiBvcmRlciB0byBhdm9pZCBpbnRsdG9vbCBzZWFyY2hpbmcgYW5kIGZpbmRpbmcgcGVybCBmcm9tIC91c3IvYmluCi1vbiBidWlsZCBzeXN0ZW0gd2hpY2ggbWF5IG5vdCBoYXZlIGFsbCB0aGUgbW9kdWxlcyB0aGF0IGl0IG5lZWRzLgotCi1TaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgotCi1VcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW09FIHNwZWNpZmljXQotSW5kZXg6IGludGx0b29sLTAuNDAuNi9pbnRsdG9vbC5tNAotPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0tIGludGx0b29sLTAuNDAuNi5vcmlnL2ludGx0b29sLm00CTIwMDktMDItMTQgMTQ6MTI6MjguMDAwMDAwMDAwIC0wODAwCi0rKysgaW50bHRvb2wtMC40MC42L2ludGx0b29sLm00CTIwMTEtMDgtMDkgMDg6MDc6MTYuNDI3MzQ3ODQ2IC0wNzAwCi1AQCAtMTEwLDcgKzExMCw3IEBACi0gICAgIEFDX01TR19FUlJPUihbR05VIGdldHRleHQgdG9vbHMgbm90IGZvdW5kOyByZXF1aXJlZCBmb3IgaW50bHRvb2xdKQotIGZpCi0gCi0tQUNfUEFUSF9QUk9HKElOVExUT09MX1BFUkwsIHBlcmwpCi0rQUNfUEFUSF9QUk9HKElOVExUT09MX1BFUkwsIG5hdGl2ZXBlcmwpCi0gaWYgdGVzdCAteiAiJElOVExUT09MX1BFUkwiOyB0aGVuCi0gICAgQUNfTVNHX0VSUk9SKFtwZXJsIG5vdCBmb3VuZF0pCi0gZmkKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvaW50bHRvb2wvaW50bHRvb2xfMC41MS4wLmJiIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9pbnRsdG9vbC9pbnRsdG9vbF8wLjUxLjAuYmIKaW5kZXggZDUyMGQ0My4uYTdlYTNiNyAxMDA2NDQKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9pbnRsdG9vbC9pbnRsdG9vbF8wLjUxLjAuYmIKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9pbnRsdG9vbC9pbnRsdG9vbF8wLjUxLjAuYmIKQEAgLTEsMTkgKzEsMzYgQEAKLXJlcXVpcmUgaW50bHRvb2wuaW5jCitTVU1NQVJZID0gIlV0aWxpdHkgc2NyaXB0cyBmb3IgaW50ZXJuYXRpb25hbGl6aW5nIFhNTCIKK1NFQ1RJT04gPSAiZGV2ZWwiCiBMSUNFTlNFID0gIkdQTHYyIgogTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9OTRkNTVkNTEyYTliYTM2Y2FhOWI3ZGYwNzliYWUxOWYiCiAKLVNSQ19VUkkgKz0gImZpbGU6Ly9pbnRsdG9vbC1ub3dhcm4ucGF0Y2ggXAotICAgICAgICAgICAgZmlsZTovL3BlcmwtNTIyLWRlcHJlY2F0aW9ucy5wYXRjaCBcCi0gICAgICAgICAgICR7TkFUSVZFUEFUQ0hFU30gXAorU1JDX1VSSSA9ICJodHRwOi8vbGF1bmNocGFkLm5ldC8ke0JQTn0vdHJ1bmsvJHtQVn0vK2Rvd25sb2FkLyR7QlB9LnRhci5neiBcCisgICAgICAgICAgIGZpbGU6Ly9pbnRsdG9vbC1ub3dhcm4ucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vcGVybC01MjItZGVwcmVjYXRpb25zLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL3JlbW92ZS1wZXJsLWNoZWNrLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL25vcGVybGNoZWNrLnBhdGNoIFwKICAgICAgICAgICAgIgotCi0jCi0jIEFsbCBvZiB0aGUgaW50bHRvb2wgc2NyaXB0cyBoYXZlIHRoZSBjb3JyZWN0IHBhdGhzIHRvIHBlcmwgYWxyZWFkeQotIyBlbWJlZGRlZCBpbnRvIHRoZW0gYW5kIGNhbiBmaW5kIHBlcmwgZmluZSwgc28gd2UgYWRkIHRoZSByZW1vdmUgeG1sLWNoZWNrCi0jIGluIHRoZSBpbnRsdG9vbC5tNCB2aWEgdGhlIHJlbW92ZS14bWwtY2hlY2sucGF0Y2gKLU5BVElWRVBBVENIRVMgPSAiZmlsZTovL25vcGVybGNoZWNrLnBhdGNoIFwKLSAgICAgICAgICAgICAgICAgZmlsZTovL3JlbW92ZS14bWwtY2hlY2sucGF0Y2giCi1OQVRJVkVQQVRDSEVTX2NsYXNzLW5hdGl2ZSA9ICJmaWxlOi8vdXNlLW5hdGl2ZXBlcmwucGF0Y2giIAotCiBTUkNfVVJJW21kNXN1bV0gPSAiMTJlNTE3Y2FjMmI1N2EwMTIxY2RhMzUxNTcwZjFlNjMiCiBTUkNfVVJJW3NoYTI1NnN1bV0gPSAiNjdjNzRkOTQxOTZiMTUzYjc3NGFiOWY4OWIyZmE2YzZiYTc5MzUyNDA3MDM3YzhjMTRkNWFlYjMzNGU5NTljZCIKKworVVBTVFJFQU1fQ0hFQ0tfVVJJID0gImh0dHBzOi8vbGF1bmNocGFkLm5ldC9pbnRsdG9vbC90cnVuay8iCisKK0RFUEVORFMgPSAibGlieG1sLXBhcnNlci1wZXJsLW5hdGl2ZSIKK1JERVBFTkRTXyR7UE59ID0gImdldHRleHQtZGV2IGxpYnhtbC1wYXJzZXItcGVybCIKK0RFUEVORFNfY2xhc3MtbmF0aXZlID0gImxpYnhtbC1wYXJzZXItcGVybC1uYXRpdmUiCisKK2luaGVyaXQgYXV0b3Rvb2xzIHBrZ2NvbmZpZyBwZXJsbmF0aXZlCisKK2V4cG9ydCBQRVJMID0gIiR7YmluZGlyfS9lbnYgcGVybCIKK1BFUkxfY2xhc3MtbmF0aXZlID0gIi91c3IvYmluL2VudiBuYXRpdmVwZXJsIgorCisjIGdldHRleHQgaXMgYXNzdW1lZCB0byBleGlzdCBvbiB0aGUgaG9zdAorUkRFUEVORFNfJHtQTn1fY2xhc3MtbmF0aXZlID0gImxpYnhtbC1wYXJzZXItcGVybC1uYXRpdmUiCitSUkVDT01NRU5EU18ke1BOfSA9ICJwZXJsLW1vZHVsZXMiCitSUkVDT01NRU5EU18ke1BOfV9jbGFzcy1uYXRpdmUgPSAiIgorCitGSUxFU18ke1BOfS1kZXYgPSAiIgorRklMRVNfJHtQTn0gKz0gIiR7ZGF0YWRpcn0vYWNsb2NhbCIKKworSU5TQU5FX1NLSVBfJHtQTn0gKz0gImRldi1kZXBzIgorCitCQkNMQVNTRVhURU5EID0gIm5hdGl2ZSIKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvanNvbi1jL2pzb24tYy8wMDAxLUxpbmstYWdhaW5zdC1saWJtLXdoZW4tbmVlZGVkLnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9qc29uLWMvanNvbi1jLzAwMDEtTGluay1hZ2FpbnN0LWxpYm0td2hlbi1uZWVkZWQucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmZlOWQ3MgotLS0gL2Rldi9udWxsCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvanNvbi1jL2pzb24tYy8wMDAxLUxpbmstYWdhaW5zdC1saWJtLXdoZW4tbmVlZGVkLnBhdGNoCkBAIC0wLDAgKzEsNTMgQEAKK0Zyb20gOTM1ODJhZDg1ZWY0OGMxOGFjMTJmMDBhOWE5ZTEyNDk4OWIxZmNhYiBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IFRob21hcyBQZXRhenpvbmkgPHRob21hcy5wZXRhenpvbmlAZnJlZS1lbGVjdHJvbnMuY29tPgorRGF0ZTogRnJpLCAxIE1heSAyMDE1IDEyOjUyOjE4ICswMjAwCitTdWJqZWN0OiBbUEFUQ0hdIExpbmsgYWdhaW5zdCBsaWJtIHdoZW4gbmVlZGVkCisKK0luIGNlcnRhaW4gQyBsaWJyYXJpZXMgKGUuZyB1Q2xpYmMpLCBpc25hbigpIGFuZCByZWxhdGVkIGZ1bmN0aW9ucyBhcmUKK2ltcGxlbWVudGVkIGluIGxpYm0sIHNvIGpzb24tYyBuZWVkcyB0byBsaW5rIGFnYWluc3QgaXQuIFRoaXMgY29tbWl0Cit0aGVyZWZvcmUgYWRkcyBhbiBBQ19UUllfTElOSygpIHRlc3QgdG8gY2hlY2sgd2hldGhlciBhIHByb2dyYW0KK2NhbGxpbmcgaXNuYW4oKSBjYW4gYmUgcHJvcGVybHkgbGlua2VkIHdpdGggbm8gc3BlY2lhbCBmbGFncy4gSWYgbm90LAord2UgYXNzdW1lIGxpbmtpbmcgYWdhaW5zdCBsaWJtIGlzIG5lZWRlZC4KKworVGhlIGpzb24tYy5wYy5pbiBmaWxlIGlzIGFsc28gYWRqdXN0ZWQgc28gdGhhdCBpbiB0aGUgY2FzZSBvZiBzdGF0aWMKK2xpbmtpbmcgYWdhaW5zdCBqc29uLWMsIC1sbSBpcyBhbHNvIHVzZWQuCisKK1NpZ25lZC1vZmYtYnk6IFRob21hcyBQZXRhenpvbmkgPHRob21hcy5wZXRhenpvbmlAZnJlZS1lbGVjdHJvbnMuY29tPgorLS0tCitVcHN0cmVhbS1TdGF0dXM6IEJhY2twb3J0CisKKyBjb25maWd1cmUuYWMgfCA0ICsrKysKKyBqc29uLWMucGMuaW4gfCAzICsrLQorIDIgZmlsZXMgY2hhbmdlZCwgNiBpbnNlcnRpb25zKCspLCAxIGRlbGV0aW9uKC0pCisKK2RpZmYgLS1naXQgYS9jb25maWd1cmUuYWMgYi9jb25maWd1cmUuYWMKK2luZGV4IGM1MGY4MWIuLjMwZTcxNzQgMTAwNjQ0CistLS0gYS9jb25maWd1cmUuYWMKKysrKyBiL2NvbmZpZ3VyZS5hYworQEAgLTUwLDYgKzUwLDEwIEBAIEFDX0NIRUNLX0RFQ0xTKFtpc2luZl0sIFtdLCBbXSwgW1sjaW5jbHVkZSA8bWF0aC5oPl1dKQorIEFDX0NIRUNLX0RFQ0xTKFtfaXNuYW5dLCBbXSwgW10sIFtbI2luY2x1ZGUgPGZsb2F0Lmg+XV0pCisgQUNfQ0hFQ0tfREVDTFMoW19maW5pdGVdLCBbXSwgW10sIFtbI2luY2x1ZGUgPGZsb2F0Lmg+XV0pCisgCisraWYgdGVzdCAiJGFjX2N2X2hhdmVfZGVjbF9pc25hbiIgPSAieWVzIiA7IHRoZW4KKysgICBBQ19UUllfTElOSyhbI2luY2x1ZGUgPG1hdGguaD5dLCBbZmxvYXQgZiA9IDAuMDsgcmV0dXJuIGlzbmFuKGYpXSwgW10sIFtMSUJTPSIkTElCUyAtbG0iXSkKKytmaQorKworICNjaGVjayBpZiAuc2VjdGlvbi5nbnUud2FybmluZyBhY2NlcHRzIGxvbmcgc3RyaW5ncyAoZm9yIF9fd2Fybl9yZWZlcmVuY2VzKQorIEFDX0xBTkdfUFVTSChbQ10pCisgCitkaWZmIC0tZ2l0IGEvanNvbi1jLnBjLmluIGIvanNvbi1jLnBjLmluCitpbmRleCAwMzc3MzlkLi4wNWJmYmM4IDEwMDY0NAorLS0tIGEvanNvbi1jLnBjLmluCisrKysgYi9qc29uLWMucGMuaW4KK0BAIC02LDYgKzYsNyBAQCBpbmNsdWRlZGlyPUBpbmNsdWRlZGlyQAorIE5hbWU6IGpzb24tYworIERlc2NyaXB0aW9uOiBKU09OIGltcGxlbWVudGF0aW9uIGluIEMKKyBWZXJzaW9uOiBAVkVSU0lPTkAKKy1SZXF1aXJlczogCisrUmVxdWlyZXM6CisrTGlicy5wcml2YXRlOiBATElCU0AKKyBMaWJzOiAgLUwke2xpYmRpcn0gLWxqc29uLWMKKyBDZmxhZ3M6IC1JJHtpbmNsdWRlZGlyfS9qc29uLWMKKy0tIAorMi44LjEKKwpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9qc29uLWMvanNvbi1jXzAuMTIuYmIgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2pzb24tYy9qc29uLWNfMC4xMi5iYgppbmRleCAxYTVjMzk0Li5hMTU0NTVjIDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2pzb24tYy9qc29uLWNfMC4xMi5iYgorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2pzb24tYy9qc29uLWNfMC4xMi5iYgpAQCAtNiw2ICs2LDcgQEAKIAogU1JDX1VSSSA9ICJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vanNvbi1jX3JlbGVhc2VzL3JlbGVhc2VzLyR7QlB9LnRhci5neiBcCiAgICAgICAgICAgIGZpbGU6Ly8wMDAxLWpzb25fdG9rZW5lci1yZXF1aXJlcy1JTkYtYW5kLU5BTi5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly8wMDAxLUxpbmstYWdhaW5zdC1saWJtLXdoZW4tbmVlZGVkLnBhdGNoIFwKICAgICAgICAgICAiCiAKIFNSQ19VUklbbWQ1c3VtXSA9ICIzY2E0YmJiODgxZGZjNDAxN2U4MDIxYjVlMGE4YzQ5MSIKQEAgLTI3LDMgKzI4LDUgQEAKICAgICAjIENsZWFuIHVwIGF1dG9jb25mIGNydWZ0IHRoYXQgc2hvdWxkIG5vdCBiZSBpbiB0aGUgdGFyYmFsbAogICAgIHJtIC1mICR7U30vY29uZmlnLnN0YXR1cwogfQorCitCQkNMQVNTRVhURU5EID0gIm5hdGl2ZSBuYXRpdmVzZGsiCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2tjb25maWctZnJvbnRlbmRzL2tjb25maWctZnJvbnRlbmRzXzMuMTIuMC4wLmJiIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9rY29uZmlnLWZyb250ZW5kcy9rY29uZmlnLWZyb250ZW5kc18zLjEyLjAuMC5iYgppbmRleCA0OGEyZjkzLi45YjY1YTk5IDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2tjb25maWctZnJvbnRlbmRzL2tjb25maWctZnJvbnRlbmRzXzMuMTIuMC4wLmJiCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMva2NvbmZpZy1mcm9udGVuZHMva2NvbmZpZy1mcm9udGVuZHNfMy4xMi4wLjAuYmIKQEAgLTExLDE0ICsxMSwxNCBAQAogTElDRU5TRSA9ICJHUEwtMi4wIgogTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9OWI4Y2Y2MGZmMzk3NjdmZjA0YjY3MWZjYTgzMDI0MDgiCiBTRUNUSU9OID0gImRldmVsIgotREVQRU5EUyArPSAibmN1cnNlcyBmbGV4IGJpc29uIGdwZXJmLW5hdGl2ZSBwa2djb25maWctbmF0aXZlIgorREVQRU5EUyArPSAibmN1cnNlcyBmbGV4IGJpc29uIGdwZXJmLW5hdGl2ZSIKIFJERVBFTkRTXyR7UE59ICs9ICJweXRob24gYmFzaCIKIFNSQ19VUkkgPSAiaHR0cDovL3ltb3Jpbi5pcy1hLWdlZWsub3JnL2Rvd25sb2FkLyR7QlBOfS8ke0JQfS50YXIueHoiCiAKIFNSQ19VUklbbWQ1c3VtXSA9ICJiOTM5MjgwZGNjODNmOGZlYWJkODdhMWQ1ZjliMDBjMiIKIFNSQ19VUklbc2hhMjU2c3VtXSA9ICJlYTI2MTVhNjJjNzRiZWE2Y2UzYjM4NDAyZjAwYzc1MTM4NThmMzA3ZjZiYTdhYTlmZGJmMGJiYzEyYmNmNDA3IgogCi1pbmhlcml0IGF1dG90b29scworaW5oZXJpdCBhdXRvdG9vbHMgcGtnY29uZmlnCiBkb19jb25maWd1cmVfcHJlcGVuZCAoKSB7CiAJbWtkaXIgLXAgc2NyaXB0cy8uYXV0b3N0dWZmL200CiB9CkBAIC0zMiw3ICszMiw3IEBACiAKICMgU29tZSBwYWNrYWdlcyBoYXZlIHRoZSB2ZXJzaW9uIHByZWNlZWRpbmcgdGhlIC5zbyBpbnN0ZWFkIHByb3Blcmx5CiAjIHZlcnNpb25lZCAuc28uPHZlcnNpb24+LCBzbyB3ZSBuZWVkIHRvIHJlb3JkZXIgYW5kIHJlcGFja2FnZS4KLVNPTElCUyA9ICItJHtAZC5nZXRWYXIoJ1BWJywxKVs6LTJdfS5zbyIKK1NPTElCUyA9ICItJHtAZC5nZXRWYXIoJ1BWJywgVHJ1ZSlbOi0yXX0uc28iCiBGSUxFU19TT0xJQlNERVYgPSAiJHtsaWJkaXJ9L2xpYmtjb25maWctcGFyc2VyLnNvIgogCiBCQkNMQVNTRVhURU5EID0gIm5hdGl2ZSIKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvbGlidG9vbC9saWJ0b29sLWNyb3NzXzIuNC42LmJiIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9saWJ0b29sL2xpYnRvb2wtY3Jvc3NfMi40LjYuYmIKaW5kZXggMDIwNGQzNC4uYjI2ODMxMCAxMDA2NDQKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9saWJ0b29sL2xpYnRvb2wtY3Jvc3NfMi40LjYuYmIKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9saWJ0b29sL2xpYnRvb2wtY3Jvc3NfMi40LjYuYmIKQEAgLTM1LDExICszNSw2IEBACiAJaW5zdGFsbCAtYyAtbSAwNjQ0ICR7U30vbTQvKi5tNCAke0R9JHt0YXJnZXRfZGF0YWRpcn0vYWNsb2NhbC8KIH0KIAotU1lTUk9PVF9QUkVQUk9DRVNTX0ZVTkNTICs9ICJsaWJ0b29sY3Jvc3Nfc3lzcm9vdF9wcmVwcm9jZXNzIgotCi1saWJ0b29sY3Jvc3Nfc3lzcm9vdF9wcmVwcm9jZXNzICgpIHsKLQlzeXNyb290X3N0YWdlX2RpciAke0R9JHtiaW5kaXJfY3Jvc3NzY3JpcHRzfSAke1NZU1JPT1RfREVTVERJUn0ke2JpbmRpcl9jcm9zc3NjcmlwdHN9Ci0Jc3lzcm9vdF9zdGFnZV9kaXIgJHtEfSR7dGFyZ2V0X2RhdGFkaXJ9ICR7U1lTUk9PVF9ERVNURElSfSR7dGFyZ2V0X2RhdGFkaXJ9Ci19CitTWVNST09UX0RJUlMgKz0gIiR7YmluZGlyX2Nyb3Nzc2NyaXB0c30gJHt0YXJnZXRfZGF0YWRpcn0iCiAKIFNTVEFURV9TQ0FOX0ZJTEVTICs9ICJsaWJ0b29saXplICotbGlidG9vbCIKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvbGlidG9vbC9saWJ0b29sXzIuNC42LmJiIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9saWJ0b29sL2xpYnRvb2xfMi40LjYuYmIKaW5kZXggMzg1MWVjNy4uODg1OGY2ZSAxMDA2NDQKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9saWJ0b29sL2xpYnRvb2xfMi40LjYuYmIKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9saWJ0b29sL2xpYnRvb2xfMi40LjYuYmIKQEAgLTUsNyArNSwxMSBAQAogIwogIyBXZSB3YW50IHRoZSByZXN1bHRzIG9mIGxpYnRvb2wtY3Jvc3MgcHJlc2VydmVkIC0gZG9uJ3Qgc3RhZ2UgYW55dGhpbmcgb3Vyc2VsdmVzLgogIwotU1lTUk9PVF9QUkVQUk9DRVNTX0ZVTkNTICs9ICJsaWJ0b29sX3N5c3Jvb3RfcHJlcHJvY2VzcyIKK1NZU1JPT1RfRElSU19CTEFDS0xJU1QgKz0gIiBcCisgICAgJHtiaW5kaXJ9IFwKKyAgICAke2RhdGFkaXJ9L2FjbG9jYWwgXAorICAgICR7ZGF0YWRpcn0vbGlidG9vbC9idWlsZC1hdXggXAorIgogCiBkb19pbnN0YWxsX2FwcGVuZCAoKSB7CiAgICAgICAgIHNlZCAtZSAnc0AtLXN5c3Jvb3Q9JHtTVEFHSU5HX0RJUl9IT1NUfUBAZycgXApAQCAtMTgsMTAgKzIyLDMgQEAKICAgICAgICAgICAgIC1lICdzQF5cKHBvc3RkZXBfb2JqZWN0cz0iXCkuKkBcMSJAJyBcCiAgICAgICAgICAgICAtaSAke0R9JHtiaW5kaXJ9L2xpYnRvb2wKIH0KLQotbGlidG9vbF9zeXNyb290X3ByZXByb2Nlc3MgKCkgewotCXJtIC1yZiAke1NZU1JPT1RfREVTVERJUn0ke2JpbmRpcn0vKgotCXJtIC1yZiAke1NZU1JPT1RfREVTVERJUn0ke2RhdGFkaXJ9L2FjbG9jYWwvKgotCXJtIC1yZiAke1NZU1JPT1RfREVTVERJUn0ke2RhdGFkaXJ9L2xpYnRvb2wvYnVpbGQtYXV4LyoKLX0KLQpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9saW51eGRvYy10b29scy9saW51eGRvYy10b29scy1uYXRpdmVfMC45LjY5LmJiIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9saW51eGRvYy10b29scy9saW51eGRvYy10b29scy1uYXRpdmVfMC45LjY5LmJiCmluZGV4IGE4YTkwZmMuLmE1ZGViMmUgMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvbGludXhkb2MtdG9vbHMvbGludXhkb2MtdG9vbHMtbmF0aXZlXzAuOS42OS5iYgorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2xpbnV4ZG9jLXRvb2xzL2xpbnV4ZG9jLXRvb2xzLW5hdGl2ZV8wLjkuNjkuYmIKQEAgLTUsNyArNSw3IEBACiAKIERFUEVORFMgPSAiZ3JvZmYtbmF0aXZlIG9wZW5qYWRlLW5hdGl2ZSIKIAotU1JDX1VSSSA9ICIke0RFQklBTl9NSVJST1J9L21haW4vbC9saW51eGRvYy10b29scy9saW51eGRvYy10b29sc18ke1BWfS5vcmlnLnRhci5neiBcCitTUkNfVVJJID0gImh0dHA6Ly9zbmFwc2hvdC5kZWJpYW4ub3JnL2FyY2hpdmUvZGViaWFuLzIwMTYwNzI4VDA0MzQ0M1ovcG9vbC9tYWluL2wvJHtCUE59LyR7QlBOfV8ke1BWfS5vcmlnLnRhci5neiBcCiAgICAgICAgICAgIGZpbGU6Ly9kaXNhYmxlX3NnbWwycnRmLnBhdGNoIFwKICAgICAgICAgICAgZmlsZTovL2Rpc2FibGVfdHh0X2RvYy5wYXRjaCBcCiAgICAgICAgICAgIGZpbGU6Ly9kaXNhYmxlX3RleF9kb2MucGF0Y2ggXApAQCAtMTQsNiArMTQsNyBAQAogU1JDX1VSSVttZDVzdW1dID0gIjFkMTNkNTAwOTE4YTdhMTQ1YjBlZGMyZjE2ZjYxZGQxIgogU1JDX1VSSVtzaGEyNTZzdW1dID0gIjcxMDNmYWNlZTE4YTJlYTk3MTg2Y2E0NTlkNzQzZDIyZjdmODlhZDRiNWNkMWRmZDFjMzRmODNkNmJmZDQxMDEiCiAKK1VQU1RSRUFNX0NIRUNLX1VSSSA9ICIke0RFQklBTl9NSVJST1J9L21haW4vbC9saW51eGRvYy10b29scy8iCiBpbmhlcml0IGF1dG90b29scy1icm9rZW5zZXAgbmF0aXZlCiAKIGRvX2NvbmZpZ3VyZSAoKSB7CmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL21ha2UvbWFrZS0zLjgxL21ha2VfZml4X2Zvcl9hdXRvbWFrZS0xLjEyLnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9tYWtlL21ha2UtMy44MS9tYWtlX2ZpeF9mb3JfYXV0b21ha2UtMS4xMi5wYXRjaAppbmRleCA5YjJlOTY0Li4xMDJmZTc5IDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL21ha2UvbWFrZS0zLjgxL21ha2VfZml4X2Zvcl9hdXRvbWFrZS0xLjEyLnBhdGNoCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvbWFrZS9tYWtlLTMuODEvbWFrZV9maXhfZm9yX2F1dG9tYWtlLTEuMTIucGF0Y2gKQEAgLTExLDcgKzExLDcgQEAKIHwgRVJST1I6IGF1dG9yZWNvbmYgZXhlY3V0aW9uIGZhaWxlZC4KIAogCi1TaWduZWQtT2ZmLUJ5OiBOaXRpbiBBIEthbWJsZSA8bml0aW4uYS5rYW1ibGVAaW50ZWwuY29tPgorU2lnbmVkLW9mZi1ieTogTml0aW4gQSBLYW1ibGUgPG5pdGluLmEua2FtYmxlQGludGVsLmNvbT4KIDIwMTIvMDUvMDQKIAogSW5kZXg6IG1ha2UtMy44MS9jb25maWd1cmUuaW4KZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvbWFrZS9tYWtlLTQuMS8wMDAxLW1haW4uYy1tYWluLVNWLTQzNDM0LUhhbmRsZS1OVUxMLXJldHVybnMtZnJvbS10dHluYW0ucGF0Y2ggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL21ha2UvbWFrZS00LjEvMDAwMS1tYWluLmMtbWFpbi1TVi00MzQzNC1IYW5kbGUtTlVMTC1yZXR1cm5zLWZyb20tdHR5bmFtLnBhdGNoCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3YTVmNGJhLi4wMDAwMDAwCi0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvbWFrZS9tYWtlLTQuMS8wMDAxLW1haW4uYy1tYWluLVNWLTQzNDM0LUhhbmRsZS1OVUxMLXJldHVybnMtZnJvbS10dHluYW0ucGF0Y2gKKysrIC9kZXYvbnVsbApAQCAtMSw2MyArMCwwIEBACi1Gcm9tIDI5MmRhNmY2ODY3Yjc1YTVhZjdkZGJiNjM5YTFmZWFlMDIyZjQzOGYgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCi1Gcm9tOiBQYXVsIFNtaXRoIDxwc21pdGhAZ251Lm9yZz4KLURhdGU6IE1vbiwgMjAgT2N0IDIwMTQgMDE6NTQ6NTYgLTA0MDAKLVN1YmplY3Q6IFtQQVRDSF0gKiBtYWluLmMgKG1haW4pOiBbU1YgNDM0MzRdIEhhbmRsZSBOVUxMIHJldHVybnMgZnJvbQotIHR0eW5hbWUoKS4KLQotVXBzdHJlYW0tU3RhdHVzOiBCYWNrcG9ydAotCi1Gcm9tOiBodHRwOi8vZ2l0LnNhdmFubmFoLmdudS5vcmcvY2dpdC9tYWtlLmdpdC9jb21taXQvP2lkPTI5MmRhNmY2ODY3Yjc1YTVhZjdkZGJiNjM5YTFmZWFlMDIyZjQzOGYKLQotLS0tCi0gbWFpbi5jICAgIHwgMTUgKysrKysrKysrKy0tLS0tCi0gbWFrZWludC5oIHwgIDMgKystCi0gMiBmaWxlcyBjaGFuZ2VkLCAxMiBpbnNlcnRpb25zKCspLCA2IGRlbGV0aW9ucygtKQotCi1kaWZmIC0tZ2l0IGEvbWFpbi5jIGIvbWFpbi5jCi1pbmRleCBiMmQxNjljLi4wY2RiOGE4IDEwMDY0NAotLS0tIGEvbWFpbi5jCi0rKysgYi9tYWluLmMKLUBAIC0xNDI5LDEzICsxNDI5LDE4IEBAIG1haW4gKGludCBhcmdjLCBjaGFyICoqYXJndiwgY2hhciAqKmVudnApCi0gI2lmZGVmIEhBVkVfSVNBVFRZCi0gICAgIGlmIChpc2F0dHkgKGZpbGVubyAoc3Rkb3V0KSkpCi0gICAgICAgaWYgKCEgbG9va3VwX3ZhcmlhYmxlIChTVFJJTkdfU0laRV9UVVBMRSAoIk1BS0VfVEVSTU9VVCIpKSkKLS0gICAgICAgIGRlZmluZV92YXJpYWJsZV9jbmFtZSAoIk1BS0VfVEVSTU9VVCIsIFRUWU5BTUUgKGZpbGVubyAoc3Rkb3V0KSksCi0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9fZGVmYXVsdCwgMCktPmV4cG9ydCA9IHZfZXhwb3J0OwotLQotKyAgICAgICAgewotKyAgICAgICAgICBjb25zdCBjaGFyICp0dHkgPSBUVFlOQU1FIChmaWxlbm8gKHN0ZG91dCkpOwotKyAgICAgICAgICBkZWZpbmVfdmFyaWFibGVfY25hbWUgKCJNQUtFX1RFUk1PVVQiLCB0dHkgPyB0dHkgOiBERUZBVUxUX1RUWU5BTUUsCi0rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb19kZWZhdWx0LCAwKS0+ZXhwb3J0ID0gdl9leHBvcnQ7Ci0rICAgICAgICB9Ci0gICAgIGlmIChpc2F0dHkgKGZpbGVubyAoc3RkZXJyKSkpCi0gICAgICAgaWYgKCEgbG9va3VwX3ZhcmlhYmxlIChTVFJJTkdfU0laRV9UVVBMRSAoIk1BS0VfVEVSTUVSUiIpKSkKLS0gICAgICAgIGRlZmluZV92YXJpYWJsZV9jbmFtZSAoIk1BS0VfVEVSTUVSUiIsIFRUWU5BTUUgKGZpbGVubyAoc3RkZXJyKSksCi0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9fZGVmYXVsdCwgMCktPmV4cG9ydCA9IHZfZXhwb3J0OwotKyAgICAgICAgewotKyAgICAgICAgICBjb25zdCBjaGFyICp0dHkgPSBUVFlOQU1FIChmaWxlbm8gKHN0ZGVycikpOwotKyAgICAgICAgICBkZWZpbmVfdmFyaWFibGVfY25hbWUgKCJNQUtFX1RFUk1FUlIiLCB0dHkgPyB0dHkgOiBERUZBVUxUX1RUWU5BTUUsCi0rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb19kZWZhdWx0LCAwKS0+ZXhwb3J0ID0gdl9leHBvcnQ7Ci0rICAgICAgICB9Ci0gI2VuZGlmCi0gCi0gICAvKiBSZXNldCBpbiBjYXNlIHRoZSBzd2l0Y2hlcyBjaGFuZ2VkIG91ciBtaW5kcy4gICovCi1kaWZmIC0tZ2l0IGEvbWFrZWludC5oIGIvbWFrZWludC5oCi1pbmRleCA2MjIzOTM2Li4yMDA5ZjQxIDEwMDY0NAotLS0tIGEvbWFrZWludC5oCi0rKysgYi9tYWtlaW50LmgKLUBAIC00MzYsMTAgKzQzNiwxMSBAQCBleHRlcm4gc3RydWN0IHJsaW1pdCBzdGFja19saW1pdDsKLSAvKiBUaGUgbnVtYmVyIG9mIGJ5dGVzIG5lZWRlZCB0byByZXByZXNlbnQgdGhlIGxhcmdlc3QgaW50ZWdlciBhcyBhIHN0cmluZy4gICovCi0gI2RlZmluZSBJTlRTVFJfTEVOR1RIICAgICAgICAgQ1NUUkxFTiAoIjE4NDQ2NzQ0MDczNzA5NTUxNjE2IikKLSAKLSsjZGVmaW5lIERFRkFVTFRfVFRZTkFNRSAidHJ1ZSIKLSAjaWZkZWYgSEFWRV9UVFlOQU1FCi0gIyBkZWZpbmUgVFRZTkFNRShfZikgdHR5bmFtZSAoX2YpCi0gI2Vsc2UKLS0jIGRlZmluZSBUVFlOQU1FKF9mKSAidHJ1ZSIKLSsjIGRlZmluZSBUVFlOQU1FKF9mKSBERUZBVUxUX1RUWU5BTUUKLSAjZW5kaWYKLSAKLSAMCi0tLSAKLTEuOS4xCi0KZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvbWFrZS9tYWtlXzQuMS5iYiBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvbWFrZS9tYWtlXzQuMS5iYgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzhmZTBiNS4uMDAwMDAwMAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL21ha2UvbWFrZV80LjEuYmIKKysrIC9kZXYvbnVsbApAQCAtMSwxNCArMCwwIEBACi1MSUNFTlNFID0gIkdQTHYzICYgTEdQTHYyIgotTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9ZDMyMjM5YmNiNjczNDYzYWI4NzRlODBkNDdmYWU1MDQgXAotICAgICAgICAgICAgICAgICAgICBmaWxlOi8vdGVzdHMvQ09QWUlORzttZDU9ZDMyMjM5YmNiNjczNDYzYWI4NzRlODBkNDdmYWU1MDQgXAotICAgICAgICAgICAgICAgICAgICBmaWxlOi8vZ2xvYi9DT1BZSU5HLkxJQjttZDU9NGE3NzBiNjdlNmJlMGY2MGRhMjQ0YmViMmRlMGZjZTQiCi1yZXF1aXJlIG1ha2UuaW5jCi0KLVNSQ19VUkkgKz0gImZpbGU6Ly8wMDAxLW1haW4uYy1tYWluLVNWLTQzNDM0LUhhbmRsZS1OVUxMLXJldHVybnMtZnJvbS10dHluYW0ucGF0Y2giCi0KLUVYVFJBX09FQ09ORiArPSAiLS13aXRob3V0LWd1aWxlIgotCi1TUkNfVVJJW21kNXN1bV0gPSAiNTdhN2EyMjRhODIyZjk0Nzg5YTU4N2NjYmNlZGZmNjkiCi1TUkNfVVJJW3NoYTI1NnN1bV0gPSAiMGJjNzYxMzM4OTY1MGVlNmEyNDU1NGI1MjU3MmEyNzJmNzM1NjE2NGZkMmM0MTMyYjBiY2YxMzEyM2U0ZmNhNSIKLQotQkJDTEFTU0VYVEVORCA9ICJuYXRpdmUgbmF0aXZlc2RrIgpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9tYWtlL21ha2VfNC4yLjEuYmIgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL21ha2UvbWFrZV80LjIuMS5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNmU2YTBjCi0tLSAvZGV2L251bGwKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9tYWtlL21ha2VfNC4yLjEuYmIKQEAgLTAsMCArMSwxMiBAQAorTElDRU5TRSA9ICJHUEx2MyAmIExHUEx2MiIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PWQzMjIzOWJjYjY3MzQ2M2FiODc0ZTgwZDQ3ZmFlNTA0IFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL3Rlc3RzL0NPUFlJTkc7bWQ1PWQzMjIzOWJjYjY3MzQ2M2FiODc0ZTgwZDQ3ZmFlNTA0IFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL2dsb2IvQ09QWUlORy5MSUI7bWQ1PTRhNzcwYjY3ZTZiZTBmNjBkYTI0NGJlYjJkZTBmY2U0IgorcmVxdWlyZSBtYWtlLmluYworCitFWFRSQV9PRUNPTkYgKz0gIi0td2l0aG91dC1ndWlsZSIKKworU1JDX1VSSVttZDVzdW1dID0gIjE1YjAxMjYxN2U3YzQ0YzBlZDQ4MjcyMTYyOTU3N2FjIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gImQ2ZTI2MmJmMzYwMWI0MmQyYjFlNGVmODMxMDAyOWUxZGNmMjAwODNjNTQ0NmI0YjdhYTY3MDgxZmRmZmM1ODkiCisKK0JCQ0xBU1NFWFRFTkQgPSAibmF0aXZlIG5hdGl2ZXNkayIKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvbWFrZWRldnMvbWFrZWRldnMvbWFrZWRldnMuYyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvbWFrZWRldnMvbWFrZWRldnMvbWFrZWRldnMuYwppbmRleCA3NzFmMzNlLi5jYmE3NjgxIDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL21ha2VkZXZzL21ha2VkZXZzL21ha2VkZXZzLmMKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9tYWtlZGV2cy9tYWtlZGV2cy9tYWtlZGV2cy5jCkBAIC0zNjAsNyArMzYwLDcgQEAKIAl1bnNpZ25lZCBsb25nIG1vZGUgPSAwNzU1LCB1aWQgPSAwLCBnaWQgPSAwLCBtYWpvciA9IDAsIG1pbm9yID0gMDsKIAl1bnNpZ25lZCBsb25nIHN0YXJ0ID0gMCwgaW5jcmVtZW50ID0gMSwgY291bnQgPSAwOwogCi0JaWYgKDAgPiBzc2NhbmYobGluZSwgIiU0MHMgJWMgJWxvICU0MHMgJTQwcyAlbHUgJWx1ICVsdSAlbHUgJWx1IiwgcGF0aCwKKwlpZiAoMCA+IHNzY2FuZihsaW5lLCAiJTQwOTVzICVjICVsbyAlNDBzICU0MHMgJWx1ICVsdSAlbHUgJWx1ICVsdSIsIHBhdGgsCiAJCSAgICAmdHlwZSwgJm1vZGUsIHVzcl9idWYsIGdycF9idWYsICZtYWpvciwgJm1pbm9yLCAmc3RhcnQsCiAJCSAgICAmaW5jcmVtZW50LCAmY291bnQpKQogCXsKQEAgLTUxMCw3ICs1MTAsNyBAQAogCXVtYXNrICgwKTsKIAogCWlmIChhcmdjPT0xKSB7Ci0JCWZwcmludGYoc3RkZXJyLCBoZWxwdGV4dCk7CisJCWZwdXRzKCBoZWxwdGV4dCAsIHN0ZGVyciApOwogCQlleGl0KDEpOwogCX0KIApAQCAtNTI1LDcgKzUyNSw3IEBACiAJCQkJZXJyb3JfbXNnX2FuZF9kaWUoIiVzOiBub3QgYSBwcm9wZXIgZGV2aWNlIHRhYmxlIGZpbGUiLCBvcHRhcmcpOwogCQkJYnJlYWs7CiAJCWNhc2UgJ2gnOgotCQkJcHJpbnRmKGhlbHB0ZXh0KTsKKwkJCXB1dHMoaGVscHRleHQpOwogCQkJZXhpdCgwKTsKIAkJY2FzZSAncic6CiAJCWNhc2UgJ2QnOgkJCQkvKiBmb3IgY29tcGF0aWJpbGl0eSB3aXRoIG1rZnMuamZmcywgZ2VuZXh0MmZzLCBldGMuLi4gKi8KQEAgLTU1MywxMyArNTUzLDEzIEBACiAJCQlwcmludGYoIiVzOiAlc1xuIiwgYXBwX25hbWUsIFZFUlNJT04pOwogCQkJZXhpdCgwKTsKIAkJZGVmYXVsdDoKLQkJCWZwcmludGYoc3RkZXJyLCBoZWxwdGV4dCk7CisJCQlmcHV0cyhoZWxwdGV4dCxzdGRlcnIpOwogCQkJZXhpdCgxKTsKIAkJfQogCX0KIAogCWlmIChhcmd2W29wdGluZF0gIT0gTlVMTCkgewotCQlmcHJpbnRmKHN0ZGVyciwgaGVscHRleHQpOworCQlmcHV0cyhoZWxwdGV4dCxzdGRlcnIpOwogCQlleGl0KDEpOwogCX0KIApkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9ta2VsZmltYWdlL21rZWxmaW1hZ2UvY3Jvc3MtY29tcGlsZS5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvbWtlbGZpbWFnZS9ta2VsZmltYWdlL2Nyb3NzLWNvbXBpbGUucGF0Y2gKaW5kZXggNzY5MjcwOS4uYTE2MmViNyAxMDA2NDQKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9ta2VsZmltYWdlL21rZWxmaW1hZ2UvY3Jvc3MtY29tcGlsZS5wYXRjaAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL21rZWxmaW1hZ2UvbWtlbGZpbWFnZS9jcm9zcy1jb21waWxlLnBhdGNoCkBAIC0xLDEzICsxLDQzIEBACi1tYWtlIHRoZSB0b29sIHRvIGJlIGNyb3NzIGNvbXBpbGFibGUuCitGcm9tIGRjMjcxMjExOWQ2ODMyZTI0YTliN2JlZDllZDRjZTVhZTAzY2UwYTMgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorRGF0ZTogU2F0LCAxNCBKdWwgMjAxMiAxNDoxNDowNyAtMDcwMAorU3ViamVjdDogW1BBVENIXSBta2VsZmltYWdlOiBGaXggY3Jvc3MgYnVpbGQKKworTWFrZSB0aGUgdG9vbCB0byBiZSBjcm9zcyBjb21waWxhYmxlLCBieSBzZXBhcmF0aW5nIHRoZSB2YXJpYWJsZXMgZm9yIGJ1aWxkCit0b29scyBmcm9tIHRob3NlIGZvciB0aGUgdGFyZ2V0LiBBbHNvIG1vZGlmaWVkIHRvIG9iZXkgTERGTEFHUy4KIAogU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KK1NpZ25lZC1vZmYtYnk6IENocmlzdG9waGVyIExhcnNvbiA8Y2hyaXNfbGFyc29uQG1lbnRvci5jb20+CisKIFVwc3RyZWFtLVN0YXR1czogUGVuZGluZwogCi1JbmRleDogbWtlbGZJbWFnZS9jb25maWd1cmUuYWMKLT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tLSBta2VsZkltYWdlLm9yaWcvY29uZmlndXJlLmFjCTIwMTItMDctMTQgMTQ6MDQ6NDguOTY0ODk4NjY3IC0wNzAwCi0rKysgbWtlbGZJbWFnZS9jb25maWd1cmUuYWMJMjAxMi0wNy0xNCAxNDoxMDo0Ny44MDA5MTYwODMgLTA3MDAKLUBAIC03MCw2ICs3MCw5IEBACistLS0KKyBNYWtlZmlsZS5jb25mLmluICAgIHwgMyArKysKKyBjb25maWd1cmUuYWMgICAgICAgIHwgNyArKysrKy0tCisgbGludXgtaTM4Ni9NYWtlZmlsZSB8IDIgKy0KKyBsaW51eC1pYTY0L01ha2VmaWxlIHwgMiArLQorIG1haW4vTWFrZWZpbGUgICAgICAgfCA0ICsrLS0KKyA1IGZpbGVzIGNoYW5nZWQsIDEyIGluc2VydGlvbnMoKyksIDYgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9NYWtlZmlsZS5jb25mLmluIGIvTWFrZWZpbGUuY29uZi5pbgoraW5kZXggNDY0NWU0NC4uZGNiNmNmMiAxMDA2NDQKKy0tLSBhL01ha2VmaWxlLmNvbmYuaW4KKysrKyBiL01ha2VmaWxlLmNvbmYuaW4KK0BAIC0xNyw2ICsxNyw5IEBAIERFRlM9QERFRlNACisgTElCUz1ATElCU0AKKyBIT1NUX0NDPUBIT1NUX0NDQAorIEhPU1RfQ0ZMQUdTPUBIT1NUX0NGTEFHU0AgICQoREVGUykKKytDQz1AQ0NACisrQ0ZMQUdTPUBDRkxBR1NAICQoREVGUykKKytMREZMQUdTPUBMREZMQUdTQAorCisgSTM4Nl9DQyAgICAgPUBJMzg2X0NDQAorIEkzODZfTEQgICAgID1ASTM4Nl9MREAKK2RpZmYgLS1naXQgYS9jb25maWd1cmUuYWMgYi9jb25maWd1cmUuYWMKK2luZGV4IDY1MmI5NTIuLjBmMmFjNzIgMTAwNjQ0CistLS0gYS9jb25maWd1cmUuYWMKKysrKyBiL2NvbmZpZ3VyZS5hYworQEAgLTcwLDYgKzcwLDkgQEAgaWYgdGVzdCAid2l0aF9kZWZhdWx0IiAhPSBubyA7IHRoZW4KICAJCUFDX01TR19FUlJPUihbY2Mgbm90IGZvdW5kXSkKICAJZmkKICAJZXZhbCAiJHt3aXRoX2RlZmF1bHR9X0NDPSckQ0MnIgpAQCAtMTcsNTUgKzQ3LDYwIEBACiAgCUFDX1BST0dfQ1BQCiAgCWlmIHRlc3QgIiRDUFAiID0gbm87IHRoZW4KICAJCUFDX01TR19FUlJPUihbY3BwIG5vdCBmb3VuZF0pCi1AQCAtMTcyLDcgKzE3NSw2IEBACitAQCAtMTcyLDggKzE3NSw4IEBAIGZpCiAgCiAgZG5sIC0tLU91dHB1dCB2YXJpYWJsZXMuLi4KICAKIC1IT1NUX0NDPSRDQwotIEhPU1RfQ0ZMQUdTPSIkSE9TVF9DRkxBR1MgLU8yIC1XYWxsIFwkKEhPU1RfQ1BQRkxBR1MpIgorLUhPU1RfQ0ZMQUdTPSIkSE9TVF9DRkxBR1MgLU8yIC1XYWxsIFwkKEhPU1RfQ1BQRkxBR1MpIgorK0NGTEFHUz0iJHtDRkxBR1M6LS1PMn0gLVdhbGwgXCQoQ1BQRkxBR1MpIgorK0hPU1RfQ0ZMQUdTPSIke0hPU1RfQ0ZMQUdTOi0tTzJ9IC1XYWxsIFwkKEhPU1RfQ1BQRkxBR1MpIgogIAogIGRubCBUT0RPOiBmaWd1cmUgb3V0IGhvdyB0byBzZXQgdGhlc2UgYXBwcm9wcmlhdGVseSBmb3IgY29tcGlsZXJzIG90aGVyIHRoYW4gZ2NjCi1JbmRleDogbWtlbGZJbWFnZS9saW51eC1pMzg2L01ha2VmaWxlCi09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLS0gbWtlbGZJbWFnZS5vcmlnL2xpbnV4LWkzODYvTWFrZWZpbGUJMjAxMi0wNy0xNCAxNDowNDo0OC45NjQ4OTg2NjcgLTA3MDAKLSsrKyBta2VsZkltYWdlL2xpbnV4LWkzODYvTWFrZWZpbGUJMjAxMi0wNy0xNCAxNDowNDo0OS4wMzI4OTg2NzEgLTA3MDAKLUBAIC00LDcgKzQsNyBAQAorIEkzODZfQ0ZMQUdTPSIkSTM4Nl9DRkxBR1MgLU9zIC1mZnJlZXN0YW5kaW5nIC1XYWxsIC1XIC1Xbm8tZm9ybWF0IFwkKEkzODZfQ1BQRkxBR1MpIgorZGlmZiAtLWdpdCBhL2xpbnV4LWkzODYvTWFrZWZpbGUgYi9saW51eC1pMzg2L01ha2VmaWxlCitpbmRleCA1MTUzMWQ2Li43ZThhYTNjIDEwMDY0NAorLS0tIGEvbGludXgtaTM4Ni9NYWtlZmlsZQorKysrIGIvbGludXgtaTM4Ni9NYWtlZmlsZQorQEAgLTQsNyArNCw3IEBAIExJMzg2X0RFUD1NYWtlZmlsZSBNYWtlZmlsZS5jb25mICQoTEkzODZfRElSKS9NYWtlZmlsZQogIAogICQoTEkzODZfT0JKKS9ta2VsZi1saW51eC1pMzg2Lm86ICQoTEkzODZfRElSKS9ta2VsZi1saW51eC1pMzg2LmMgJChMSTM4Nl9ESVIpL2NvbnZlcnQuYmluLmMgJChMSTM4Nl9ERVApCiAgCSQoTUtESVIpIC1wICQoQEQpCiAtCSQoSE9TVF9DQykgJChIT1NUX0NGTEFHUykgLWMgLWcgJDwgLW8gJEAKLSsJJChDQykgJChIT1NUX0NGTEFHUykgLWMgLWcgJDwgLW8gJEAKKysJJChDQykgJChDRkxBR1MpIC1jIC1nICQ8IC1vICRACiAgCiAgCiAgaWZkZWYgSTM4Nl9DQwotSW5kZXg6IG1rZWxmSW1hZ2UvbGludXgtaWE2NC9NYWtlZmlsZQotPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0tIG1rZWxmSW1hZ2Uub3JpZy9saW51eC1pYTY0L01ha2VmaWxlCTIwMTItMDctMTQgMTQ6MDQ6NDguOTY0ODk4NjY3IC0wNzAwCi0rKysgbWtlbGZJbWFnZS9saW51eC1pYTY0L01ha2VmaWxlCTIwMTItMDctMTQgMTQ6MDQ6NDkuMDMyODk4NjcxIC0wNzAwCi1AQCAtNCw3ICs0LDcgQEAKK2RpZmYgLS1naXQgYS9saW51eC1pYTY0L01ha2VmaWxlIGIvbGludXgtaWE2NC9NYWtlZmlsZQoraW5kZXggMzhmNWQ4Yy4uNWRmODg3MCAxMDA2NDQKKy0tLSBhL2xpbnV4LWlhNjQvTWFrZWZpbGUKKysrKyBiL2xpbnV4LWlhNjQvTWFrZWZpbGUKK0BAIC00LDcgKzQsNyBAQCBMSUE2NF9ERVA9TWFrZWZpbGUgTWFrZWZpbGUuY29uZiAkKExJQTY0X0RJUikvTWFrZWZpbGUKICAKICAkKExJQTY0X09CSikvbWtlbGYtbGludXgtaWE2NC5vOiAkKExJQTY0X0RJUikvbWtlbGYtbGludXgtaWE2NC5jICQoTElBNjRfRElSKS9jb252ZXJ0LmJpbi5jICQoTElBNjRfREVQKQogIAkkKE1LRElSKSAtcCAkKEBEKQogLQkkKEhPU1RfQ0MpICQoSE9TVF9DRkxBR1MpIC1jIC1nICQ8IC1vICRACi0rCSQoQ0MpICQoSE9TVF9DRkxBR1MpIC1jIC1nICQ8IC1vICRACisrCSQoQ0MpICQoQ0ZMQUdTKSAtYyAtZyAkPCAtbyAkQAogIAogIGlmZGVmIElBNjRfQ0MKICAKLUluZGV4OiBta2VsZkltYWdlL21haW4vTWFrZWZpbGUKLT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tLSBta2VsZkltYWdlLm9yaWcvbWFpbi9NYWtlZmlsZQkyMDEyLTA3LTE0IDE0OjA0OjQ4Ljk2NDg5ODY2NyAtMDcwMAotKysrIG1rZWxmSW1hZ2UvbWFpbi9NYWtlZmlsZQkyMDEyLTA3LTE0IDE0OjA0OjQ5LjAzMjg5ODY3MSAtMDcwMAotQEAgLTQsMTEgKzQsMTEgQEAKK2RpZmYgLS1naXQgYS9tYWluL01ha2VmaWxlIGIvbWFpbi9NYWtlZmlsZQoraW5kZXggNDAzYjBhNC4uY2Q1MzYxMyAxMDA2NDQKKy0tLSBhL21haW4vTWFrZWZpbGUKKysrKyBiL21haW4vTWFrZWZpbGUKK0BAIC00LDExICs0LDExIEBAIE1LRUxGX09CSlM9JChPQkpESVIpL21haW4vbWtlbGZJbWFnZS5vIFwKICAKICAkKE9CSkRJUikvc2Jpbi9ta2VsZkltYWdlOiAkKE1LRUxGX09CSlMpICQoREVQUykKICAJJChNS0RJUikgLXAgJChARCkKIC0JJChIT1NUX0NDKSAkKEhPU1RfQ0ZMQUdTKSAkKE1LRUxGX09CSlMpIC1vICRAICQoTElCUykKLSsJJChDQykgJChIT1NUX0NGTEFHUykgJChNS0VMRl9PQkpTKSAtbyAkQCAkKExJQlMpCisrCSQoQ0MpICQoQ0ZMQUdTKSAkKExERkxBR1MpICQoTUtFTEZfT0JKUykgLW8gJEAgJChMSUJTKQogIAogICQoT0JKRElSKS9tYWluL21rZWxmSW1hZ2UubzogbWFpbi9ta2VsZkltYWdlLmMgaW5jbHVkZS9ta2VsZkltYWdlLmggJChERVBTKQogIAkkKE1LRElSKSAtcCAkKEBEKQogLQkkKEhPU1RfQ0MpICQoSE9TVF9DRkxBR1MpIC1jICQ8IC1vICRACi0rCSQoQ0MpICQoSE9TVF9DRkxBR1MpIC1jICQ8IC1vICRACisrCSQoQ0MpICQoQ0ZMQUdTKSAtYyAkPCAtbyAkQAogIAogICQoT0JKRElSKS9tYW4vbWFuOC9ta2VsZkltYWdlLjg6IG1haW4vbWtlbGZJbWFnZS5tYW4KICAJJChNS0RJUikgLXAgJChARCkKKy0tCisyLjguMApkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9ta2VsZmltYWdlL21rZWxmaW1hZ2VfZ2l0LmJiIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9ta2VsZmltYWdlL21rZWxmaW1hZ2VfZ2l0LmJiCmluZGV4IDkyNDM1Y2QuLjJiY2M4ZDcgMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvbWtlbGZpbWFnZS9ta2VsZmltYWdlX2dpdC5iYgorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL21rZWxmaW1hZ2UvbWtlbGZpbWFnZV9naXQuYmIKQEAgLTEzLDggKzEzLDggQEAKIERFUEVORFMgKz0gInpsaWIiCiAKIFNSQ19VUkkgPSAiZ2l0Oi8vcmV2aWV3LmNvcmVib290Lm9yZy9wL2NvcmVib290O3Byb3RvY29sPWh0dHAgXAotICAgICAgICAgICBmaWxlOi8vY3Jvc3MtY29tcGlsZS5wYXRjaCAgIFwKLSAgICAgICAgICAiCisgICAgICAgICAgIGZpbGU6Ly9jcm9zcy1jb21waWxlLnBhdGNoIFwKKyAgICAgICAgICAgIgogU1JDX1VSSV9hcHBlbmRfY2xhc3MtbmF0aXZlID0gIiBcCiAgICAgICAgICAgIGZpbGU6Ly9maXgtbWFrZWZpbGUtdG8tZmluZC1saWJ6LnBhdGNoICAgXAogIgpAQCAtMjQsOCArMjQsMTEgQEAKIFMgPSAiJHtXT1JLRElSfS9naXQvdXRpbC9ta2VsZkltYWdlIgogCiBDRkxBR1MgKz0gIi1mbm8tc3RhY2stcHJvdGVjdG9yIgotQ0FDSEVEX0NPTkZJR1VSRVZBUlMgKz0gIkhPU1RfQ0M9JyR7QlVJTERfQ0N9JyIKLUVYVFJBX09FTUFLRSArPSAiSE9TVF9DUFBGTEFHUz0nJHtCVUlMRF9DUFBGTEFHU30nIgorQ0FDSEVEX0NPTkZJR1VSRVZBUlMgKz0gIlwKKyAgICBIT1NUX0NDPScke0JVSUxEX0NDfScgXAorICAgIEhPU1RfQ0ZMQUdTPScke0JVSUxEX0NGTEFHU30nIFwKKyAgICBIT1NUX0NQUEZMQUdTPScke0JVSUxEX0NQUEZMQUdTfScgXAorIgogCiBpbmhlcml0IGF1dG90b29scy1icm9rZW5zZXAKIApkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9ta2xpYnMvbWtsaWJzLW5hdGl2ZV8wLjEuNDAuYmIgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL21rbGlicy9ta2xpYnMtbmF0aXZlXzAuMS40MC5iYgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTlmZWMyOS4uMDAwMDAwMAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL21rbGlicy9ta2xpYnMtbmF0aXZlXzAuMS40MC5iYgorKysgL2Rldi9udWxsCkBAIC0xLDIxICswLDAgQEAKLVNVTU1BUlkgPSAiU2hhcmVkIGxpYnJhcnkgb3B0aW1pc2F0aW9uIHRvb2wiCi1ERVNDUklQVElPTiA9ICJta2xpYnMgcHJvZHVjZXMgY3V0LWRvd24gc2hhcmVkIGxpYnJhcmllcyB0aGF0IGNvbnRhaW4gb25seSB0aGUgcm91dGluZXMgcmVxdWlyZWQgYnkgYSBwYXJ0aWN1bGFyIHNldCBvZiBleGVjdXRhYmxlcy4iCi1IT01FUEFHRSA9ICJodHRwczovL2xhdW5jaHBhZC5uZXQvbWtsaWJzIgotU0VDVElPTiA9ICJkZXZlbCIKLUxJQ0VOU0UgPSAiR1BMdjIrIgotTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vZGViaWFuL2NvcHlyaWdodDttZDU9OThkMzEwMzdiMTNkODk2ZTMzODkwNzM4ZWYwMWFmNjQiCi1ERVBFTkRTID0gInB5dGhvbi1uYXRpdmUiCi0KLVNSQ19VUkkgPSAiaHR0cDovL2Z0cC5kZS5kZWJpYW4ub3JnL2RlYmlhbi9wb29sL21haW4vbS9ta2xpYnMvJHtCUE59XyR7UFZ9LnRhci54eiBcCi0JZmlsZTovL2FjX2luaXRfZml4LnBhdGNoXAotCWZpbGU6Ly9maXhfU1RUX0dOVV9JRlVOQy5wYXRjaFwKLQlmaWxlOi8vc3lzcm9vdGVkLWxkc28ucGF0Y2ggXAotCWZpbGU6Ly9hdm9pZC1mYWlsdXJlLW9uLXN5bWJvbC1wcm92aWRlZC1ieS1hcHBsaWNhdGlvbi5wYXRjaCBcCi0JZmlsZTovL3Nob3ctR05VLXVuaXF1ZS1zeW1ib2xzLWFzLXByb3ZpZGVkLXN5bWJvbHMucGF0Y2ggXAotCWZpbGU6Ly9maXhfY3Jvc3NfY29tcGlsZS5wYXRjaCBcCi0iCi0KLVNSQ19VUklbbWQ1c3VtXSA9ICJlMWRhZmU1Zjk2MmNhYTlkYzVmMjY1MWMwNzIzODEyYSIKLVNSQ19VUklbc2hhMjU2c3VtXSA9ICIxZGIyNGFlNzc5ZDIxY2NmZWQ0OWYyMmU0OWEyYjdlZTQzZWMwZTkxOTdiYzIwNmQ4MWNkMDJmOTZlOTFlMTI1IgotCi1pbmhlcml0IGF1dG90b29scyBnZXR0ZXh0IG5hdGl2ZSBweXRob25uYXRpdmUKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvbWtsaWJzL21rbGlicy1uYXRpdmVfMC4xLjQxLmJiIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9ta2xpYnMvbWtsaWJzLW5hdGl2ZV8wLjEuNDEuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjNjMWI1YgotLS0gL2Rldi9udWxsCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvbWtsaWJzL21rbGlicy1uYXRpdmVfMC4xLjQxLmJiCkBAIC0wLDAgKzEsMjEgQEAKK1NVTU1BUlkgPSAiU2hhcmVkIGxpYnJhcnkgb3B0aW1pc2F0aW9uIHRvb2wiCitERVNDUklQVElPTiA9ICJta2xpYnMgcHJvZHVjZXMgY3V0LWRvd24gc2hhcmVkIGxpYnJhcmllcyB0aGF0IGNvbnRhaW4gb25seSB0aGUgcm91dGluZXMgcmVxdWlyZWQgYnkgYSBwYXJ0aWN1bGFyIHNldCBvZiBleGVjdXRhYmxlcy4iCitIT01FUEFHRSA9ICJodHRwczovL2xhdW5jaHBhZC5uZXQvbWtsaWJzIgorU0VDVElPTiA9ICJkZXZlbCIKK0xJQ0VOU0UgPSAiR1BMdjIrIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vZGViaWFuL2NvcHlyaWdodDttZDU9OThkMzEwMzdiMTNkODk2ZTMzODkwNzM4ZWYwMWFmNjQiCitERVBFTkRTID0gInB5dGhvbi1uYXRpdmUiCisKK1NSQ19VUkkgPSAiaHR0cDovL3NuYXBzaG90LmRlYmlhbi5vcmcvYXJjaGl2ZS9kZWJpYW4vMjAxNjAyMDdUMjIxNjI1Wi9wb29sL21haW4vbS8ke0JQTn0vJHtCUE59XyR7UFZ9LnRhci54eiBcCisJZmlsZTovL2FjX2luaXRfZml4LnBhdGNoXAorCWZpbGU6Ly9maXhfU1RUX0dOVV9JRlVOQy5wYXRjaFwKKwlmaWxlOi8vc3lzcm9vdGVkLWxkc28ucGF0Y2ggXAorCWZpbGU6Ly9hdm9pZC1mYWlsdXJlLW9uLXN5bWJvbC1wcm92aWRlZC1ieS1hcHBsaWNhdGlvbi5wYXRjaCBcCisJZmlsZTovL3Nob3ctR05VLXVuaXF1ZS1zeW1ib2xzLWFzLXByb3ZpZGVkLXN5bWJvbHMucGF0Y2ggXAorCWZpbGU6Ly9maXhfY3Jvc3NfY29tcGlsZS5wYXRjaCBcCisiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICI2YjI5Nzk4NzZhNjExNzE3ZGYzZDQ5ZTdmOWNmMjkxZCIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICIwNThjNzM0OWY4ZWM4YTAzYjUyOWM1NDZhOTVjZDY0MjY3NDFiZDgxOWYxZTEyMTFmNDk5MjczZWI0YmY1ZDg5IgorCitpbmhlcml0IGF1dG90b29scyBnZXR0ZXh0IG5hdGl2ZSBweXRob25uYXRpdmUKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvbW1jL21tYy11dGlsc19naXQuYmIgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL21tYy9tbWMtdXRpbHNfZ2l0LmJiCmluZGV4IDY0Yjg5MTAuLjBhOGRhMTkgMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvbW1jL21tYy11dGlsc19naXQuYmIKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9tbWMvbW1jLXV0aWxzX2dpdC5iYgpAQCAtMSwxMCArMSwxMCBAQAogU1VNTUFSWSA9ICJVc2Vyc3BhY2UgdG9vbHMgZm9yIE1NQy9TRCBkZXZpY2VzIgogSE9NRVBBR0UgPSAiaHR0cDovL2dpdC5rZXJuZWwub3JnL2NnaXQvbGludXgva2VybmVsL2dpdC9jamIvbW1jLXV0aWxzLmdpdC8iCiBMSUNFTlNFID0gIkdQTHYyIgotTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vbW1jLmM7YmVnaW5saW5lPTE7ZW5kbGluZT0xNzttZDU9ZDc3NDdmYzg3ZjFlYjIyYjk0NmVmODE5OTY5NTAzZjAiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9tbWMuYztiZWdpbmxpbmU9MTtlbmRsaW5lPTIwO21kNT1mYWUzMjc5MmUyMGY0ZDI3YWRlMWM1YTc2MmQxNmI3ZCIKIAogU1JDQlJBTkNIID89ICJtYXN0ZXIiCi1TUkNSRVYgPSAiNDRmOTRiOTI1ODk0NTc3ZjlmZmNmMmM0MThkZDAxM2E1ZTU4MjY0OCIKK1NSQ1JFViA9ICJiYjc3OWFjZmMzODVkMTM1YjMyYTY5OThjMWQxZmNlZWYwNDkxNDAwIgogCiBQViA9ICIwLjEiCiAKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvbXRkL210ZC11dGlsc19naXQuYmIgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL210ZC9tdGQtdXRpbHNfZ2l0LmJiCmluZGV4IGNkOWFlMDYuLjhhM2FmYWYgMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvbXRkL210ZC11dGlsc19naXQuYmIKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9tdGQvbXRkLXV0aWxzX2dpdC5iYgpAQCAtMzksNyArMzksNyBAQAogRklMRVNfbXRkLXV0aWxzLXViaWZzID0gIiR7c2JpbmRpcn0vbWtmcy51YmlmcyAke3NiaW5kaXJ9L3ViaSoiCiBGSUxFU19tdGQtdXRpbHMtbWlzYyA9ICIke3NiaW5kaXJ9L25mdGwqICR7c2JpbmRpcn0vZnRsKiAke3NiaW5kaXJ9L3JmZCogJHtzYmluZGlyfS9kb2MqICR7c2JpbmRpcn0vc2VydmVfaW1hZ2UgJHtzYmluZGlyfS9yZWN2X2ltYWdlIgogCi1CQkNMQVNTRVhURU5EID0gIm5hdGl2ZSIKK0JCQ0xBU1NFWFRFTkQgPSAibmF0aXZlIG5hdGl2ZXNkayIKIAogIyBnaXQvLmNvbXByLmMuZGVwOjQ2OiB3YXJuaW5nOiBOVUwgY2hhcmFjdGVyIHNlZW47IHJlc3Qgb2YgbGluZSBpZ25vcmVkCiAjIGdpdC8uY29tcHIuYy5kZXA6NDc6ICoqKiBtaXNzaW5nIHNlcGFyYXRvci4gIFN0b3AuCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL210b29scy9tdG9vbHMvMDAwMS1Db250aW51ZS1ldmVuLWlmLWZzLXNpemUtaXMtbm90LWRpdmlzaWJsZS1ieS1zZWN0b3JzLnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9tdG9vbHMvbXRvb2xzLzAwMDEtQ29udGludWUtZXZlbi1pZi1mcy1zaXplLWlzLW5vdC1kaXZpc2libGUtYnktc2VjdG9ycy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xZjhmODM1Ci0tLSAvZGV2L251bGwKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9tdG9vbHMvbXRvb2xzLzAwMDEtQ29udGludWUtZXZlbi1pZi1mcy1zaXplLWlzLW5vdC1kaXZpc2libGUtYnktc2VjdG9ycy5wYXRjaApAQCAtMCwwICsxLDM0IEBACitGcm9tIDVjYzhkMWY5NmFiNmQzNDU5ZTEzNjMxZDgzNTZmODczODE1NjIzNTIgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBKdXNzaSBLdWtrb25lbiA8anVzc2kua3Vra29uZW5AaW50ZWwuY29tPgorRGF0ZTogVGh1LCAyIEp1biAyMDE2IDA5OjQ5OjQ0ICswMzAwCitTdWJqZWN0OiBbUEFUQ0hdIENvbnRpbnVlIGV2ZW4gaWYgZnMgc2l6ZSBpcyBub3QgZGl2aXNpYmxlIGJ5Cisgc2VjdG9ycy1wZXItdHJhY2sKKworRmlsZXN5c3RlbSB3aXRoIGEgc2l6ZSB0aGF0IGlzIG5vdCBkaXZpc2libGUgYnkgc2VjdG9ycy1wZXItdHJhY2sgaXMKK25vdCBicm9rZW4gb3IgaW52YWxpZDogaXQgbWlnaHQgYmUgdW5vcHRpbWl6ZWQgb24gbWVkaWEgd2hlcmUKK2hlYWRzIGFuZCBjeWxpbmRlcnMgYWN0dWFsbHkgbWF0dGVyIGJ1dCB0aGF0IHNob3VsZCBiZSBpdC4KKworUHJlc2VydmUgdGhlIHdhcm5pbmcgYnV0IG1ha2UgbXRvb2xzIGNvbnRpbnVlIGV2ZW4gaWYgZnMgc2l6ZSBpcyBub3QKK2RpdmlzaWJsZSBieSBzZWN0b3JzLXBlci10cmFjay4KKworVXBzdHJlYW0tU3RhdHVzOiBTdWJtaXR0ZWQgW2luZm8tbXRvb2xzQGdudS5vcmddCitTaWduZWQtb2ZmLWJ5OiBKdXNzaSBLdWtrb25lbiA8anVzc2kua3Vra29uZW5AaW50ZWwuY29tPgorLS0tCisgaW5pdC5jIHwgMSAtCisgMSBmaWxlIGNoYW5nZWQsIDEgZGVsZXRpb24oLSkKKworZGlmZiAtLWdpdCBhL2luaXQuYyBiL2luaXQuYworaW5kZXggYzkxNTJlMC4uNGUxNmEwMSAxMDA2NDQKKy0tLSBhL2luaXQuYworKysrIGIvaW5pdC5jCitAQCAtMzM4LDcgKzMzOCw2IEBAIFN0cmVhbV90ICpmc19pbml0KGNoYXIgZHJpdmUsIGludCBtb2RlLCBpbnQgKmlzUm9wKQorIAkJZnByaW50ZihzdGRlcnIsCisgCQkJIkFkZCBtdG9vbHNfc2tpcF9jaGVjaz0xIHRvIHlvdXIgLm10b29sc3JjIGZpbGUgIgorIAkJCSJ0byBza2lwIHRoaXMgdGVzdFxuIik7CistCQlleGl0KDEpOworIAl9CisgCisgCS8qIGZ1bGwgY3lsaW5kZXIgYnVmZmVyaW5nICovCistLSAKKzIuMS40CisKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvbXRvb2xzL210b29sc18zLjkuOS5iYiBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvbXRvb2xzL210b29sc18zLjkuOS5iYgppbmRleCAzNDIzOTE3Li4yOTA0ZmY0IDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL210b29scy9tdG9vbHNfMy45LjkuYmIKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9tdG9vbHMvbXRvb2xzXzMuOS45LmJiCkBAIC0zMyw3ICszMyw5IEBACiAgICAgICAgICAgIGZpbGU6Ly9tdG9vbHMtbWFrZWluZm8ucGF0Y2ggXAogICAgICAgICAgICBmaWxlOi8vbXRvb2xzLnBhdGNoIFwKICAgICAgICAgICAgZmlsZTovL25vLXgxMS5wYXRjaCBcCi0gICAgICAgICAgIGZpbGU6Ly9maXgtYnJva2VuLWx6LnBhdGNoIgorICAgICAgICAgICBmaWxlOi8vZml4LWJyb2tlbi1sei5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly8wMDAxLUNvbnRpbnVlLWV2ZW4taWYtZnMtc2l6ZS1pcy1ub3QtZGl2aXNpYmxlLWJ5LXNlY3RvcnMucGF0Y2ggXAorICAgICAgICAgICAiCiAKIGluaGVyaXQgYXV0b3Rvb2xzIHRleGluZm8KIApkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9tdG9vbHMvbXRvb2xzXzQuMC4xOC5iYiBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvbXRvb2xzL210b29sc180LjAuMTguYmIKaW5kZXggZWZkZTU0Ny4uYjBlZmM5ZSAxMDA2NDQKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9tdG9vbHMvbXRvb2xzXzQuMC4xOC5iYgorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL210b29scy9tdG9vbHNfNC4wLjE4LmJiCkBAIC0yOSw3ICsyOSw5IEBACiAKIFNSQ19VUkkgPSAiJHtHTlVfTUlSUk9SfS9tdG9vbHMvbXRvb2xzLSR7UFZ9LnRhci5iejIgXAogICAgICAgICAgICBmaWxlOi8vbXRvb2xzLW1ha2VpbmZvLnBhdGNoIFwKLSAgICAgICAgICAgZmlsZTovL25vLXgxMS5ncGx2My5wYXRjaCIKKyAgICAgICAgICAgZmlsZTovL25vLXgxMS5ncGx2My5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly8wMDAxLUNvbnRpbnVlLWV2ZW4taWYtZnMtc2l6ZS1pcy1ub3QtZGl2aXNpYmxlLWJ5LXNlY3RvcnMucGF0Y2ggXAorICAgICAgICAgICAiCiAKIAogaW5oZXJpdCBhdXRvdG9vbHMgdGV4aW5mbwpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9uYXNtL25hc21fMi4xMS4wOC5iYiBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvbmFzbS9uYXNtXzIuMTEuMDguYmIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGUwNzI0ZTYuLjAwMDAwMDAKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9uYXNtL25hc21fMi4xMS4wOC5iYgorKysgL2Rldi9udWxsCkBAIC0xLDMwICswLDAgQEAKLVNVTU1BUlkgPSAiR2VuZXJhbC1wdXJwb3NlIHg4NiBhc3NlbWJsZXIiCi1TRUNUSU9OID0gImRldmVsIgotTElDRU5TRSA9ICJCU0QtMi1DbGF1c2UiCi1MSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9MSUNFTlNFO21kNT05MDkwNDQ4NmY4ZmJmMTg2MWNmNDI3NTJlMWEzOWVmZSIKLUNPTVBBVElCTEVfSE9TVCA9ICcoeDg2XzY0fGkuODYpLiotKGxpbnV4fGZyZWVic2QuKiknCi0KLQotU1JDX1VSSSA9ICJodHRwOi8vd3d3Lm5hc20udXMvcHViL25hc20vcmVsZWFzZWJ1aWxkcy8ke1BWfS9uYXNtLSR7UFZ9LnRhci5iejIgIgotCi1TUkNfVVJJW21kNXN1bV0gPSAiN2FhZTVjYjhlMDNmYWM0ODAyOWM4MmE3NDcwYWIwNjYiCi1TUkNfVVJJW3NoYTI1NnN1bV0gPSAiOWRhM2EwMjkxYTBiZGMwNjMwNWI3YmExOTRmMWUyYzJiNTVhZTZmMTEyMTBiNGFmNDM3Mjk4NjgxNDlkNTQ0NSIKLQotaW5oZXJpdCBhdXRvdG9vbHMtYnJva2Vuc2VwCi0KLWRvX2NvbmZpZ3VyZV9wcmVwZW5kICgpIHsKLQlpZiBbIC1mICR7U30vYWNsb2NhbC5tNCBdICYmIFsgISAtZiAke1N9L2FjaW5jbHVkZS5tNCBdOyB0aGVuCi0JCW12ICR7U30vYWNsb2NhbC5tNCAke1N9L2FjaW5jbHVkZS5tNAotCWZpCi19Ci0KLWRvX2luc3RhbGwoKSB7Ci0JaW5zdGFsbCAtZCAke0R9JHtiaW5kaXJ9Ci0JaW5zdGFsbCAtZCAke0R9JHttYW5kaXJ9L21hbjEKLQotCW9lX3J1bm1ha2UgJ0lOU1RBTExST09UPSR7RH0nIGluc3RhbGwKLX0KLQotQkJDTEFTU0VYVEVORCA9ICJuYXRpdmUiCi0KLURFUEVORFMgPSAiZ3JvZmYtbmF0aXZlIgpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9uYXNtL25hc21fMi4xMi4wMi5iYiBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvbmFzbS9uYXNtXzIuMTIuMDIuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWM0YjYwZgotLS0gL2Rldi9udWxsCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvbmFzbS9uYXNtXzIuMTIuMDIuYmIKQEAgLTAsMCArMSwyOSBAQAorU1VNTUFSWSA9ICJHZW5lcmFsLXB1cnBvc2UgeDg2IGFzc2VtYmxlciIKK1NFQ1RJT04gPSAiZGV2ZWwiCitMSUNFTlNFID0gIkJTRC0yLUNsYXVzZSIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0xJQ0VOU0U7bWQ1PTkwOTA0NDg2ZjhmYmYxODYxY2Y0Mjc1MmUxYTM5ZWZlIgorQ09NUEFUSUJMRV9IT1NUID0gJyh4ODZfNjR8aS44NikuKi0obGludXh8ZnJlZWJzZC4qKScKKworU1JDX1VSSSA9ICJodHRwOi8vd3d3Lm5hc20udXMvcHViL25hc20vcmVsZWFzZWJ1aWxkcy8ke1BWfS9uYXNtLSR7UFZ9LnRhci5iejIgIgorCitTUkNfVVJJW21kNXN1bV0gPSAiZDE1ODQzYzNmYjdkYjM5YWY4MDU3MWVlMjdlYzZmYWQiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiMDBiMDg5MWM2NzhjMDY1NDQ2Y2E1OWJjZWU2NDcxOWQwMDk2ZDU0ZDY4ODZlNmU0NzJhZWVlMmUxNzBhZTMyNCIKKworaW5oZXJpdCBhdXRvdG9vbHMtYnJva2Vuc2VwCisKK2RvX2NvbmZpZ3VyZV9wcmVwZW5kICgpIHsKKwlpZiBbIC1mICR7U30vYWNsb2NhbC5tNCBdICYmIFsgISAtZiAke1N9L2FjaW5jbHVkZS5tNCBdOyB0aGVuCisJCW12ICR7U30vYWNsb2NhbC5tNCAke1N9L2FjaW5jbHVkZS5tNAorCWZpCit9CisKK2RvX2luc3RhbGwoKSB7CisJaW5zdGFsbCAtZCAke0R9JHtiaW5kaXJ9CisJaW5zdGFsbCAtZCAke0R9JHttYW5kaXJ9L21hbjEKKworCW9lX3J1bm1ha2UgJ0lOU1RBTExST09UPSR7RH0nIGluc3RhbGwKK30KKworQkJDTEFTU0VYVEVORCA9ICJuYXRpdmUiCisKK0RFUEVORFMgPSAiZ3JvZmYtbmF0aXZlIgpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9vcGVuamFkZS9vcGVuamFkZS1uYXRpdmVfMS4zLjIuYmIgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL29wZW5qYWRlL29wZW5qYWRlLW5hdGl2ZV8xLjMuMi5iYgppbmRleCBiYzI1MDA4Li44YjE1YjBjIDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL29wZW5qYWRlL29wZW5qYWRlLW5hdGl2ZV8xLjMuMi5iYgorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL29wZW5qYWRlL29wZW5qYWRlLW5hdGl2ZV8xLjMuMi5iYgpAQCAtNDQsMTAgKzQ0LDEwIEBACiBvZV9ydW5jb25mW3ZhcmRlcHNleGNsdWRlXSArPSAiQ09ORklHVVJFT1BUUyIKIAogQ0ZMQUdTID0rICItSSR7U30vaW5jbHVkZSIKK0NYWEZMQUdTICs9ICItZm5vLXRyZWUtZHNlIgogCiBTU1RBVEVQT1NUSU5TVEZVTkNTICs9ICJvcGVuamFkZV9zc3RhdGVfcG9zdGluc3QiCiBTWVNST09UX1BSRVBST0NFU1NfRlVOQ1MgKz0gIm9wZW5qYWRlX3N5c3Jvb3RfcHJlcHJvY2VzcyIKLUNMRUFORlVOQ1MgKz0gIm9wZW5qYWRlX3NzdGF0ZV9jbGVhbiIKIAogIyBjb25maWd1cmUuaW4gbmVlZHMgdG8gYmUgcmVsb2FjdGVkIHRvIHRyaWdnZXIgcmVhdXRvY29uZgogZG9fZXh0cmF1bnBhY2sgKCkgewpAQCAtMTAzLDYgKzEwMywxNSBAQAogCQkke1NZU1JPT1RfREVTVERJUn0ke2JpbmRpcl9jcm9zc3NjcmlwdHN9L2luc3RhbGwtY2F0YWxvZy1vcGVuamFkZSBcCiAJCQktLWFkZCAke3N5c2NvbmZkaXJ9L3NnbWwvc2dtbC1kb2Nib29rLmNhdCBcCiAJCQkke3N5c2NvbmZkaXJ9L3NnbWwvb3BlbmphZGUtJHtQVn0uY2F0CisJCWNhdCA8PCBFT0YgPiAke1NTVEFURV9JTlNUX1BPU1RSTX0KKyMhL2Jpbi9zaAorIyBFbnN1cmUgdGhhdCB0aGUgY2F0YWxvZyBmaWxlIHNnbWwtZG9jYm9vay5jYXQgaXMgcHJvcGVybHkKKyMgdXBkYXRlZCB3aGVuIHRoZSBwYWNrYWdlIGlzIHJlbW92ZWQgZnJvbSBzc3RhdGUgY2FjaGUuCitmaWxlcz0iJHtzeXNjb25mZGlyfS9zZ21sL3NnbWwtZG9jYm9vay5iYWsgJHtzeXNjb25mZGlyfS9zZ21sL3NnbWwtZG9jYm9vay5jYXQiCitmb3IgZiBpbiBcJGZpbGVzOyBkbworCVsgISAtZiBcJGYgXSB8fCBzZWQgLWkgJy9cL3NnbWxcL29wZW5qYWRlLSR7UFZ9LmNhdC9kJyBcJGYKK2RvbmUKK0VPRgogCWZpCiB9CiAKQEAgLTExMCwxMiArMTE5LDMgQEAKICAgICBpbnN0YWxsIC1kICR7U1lTUk9PVF9ERVNURElSfSR7YmluZGlyX2Nyb3Nzc2NyaXB0c30vCiAgICAgaW5zdGFsbCAtbSA3NTUgJHtTVEFHSU5HX0JJTkRJUl9OQVRJVkV9L2luc3RhbGwtY2F0YWxvZyAke1NZU1JPT1RfREVTVERJUn0ke2JpbmRpcl9jcm9zc3NjcmlwdHN9L2luc3RhbGwtY2F0YWxvZy1vcGVuamFkZQogfQotCi1vcGVuamFkZV9zc3RhdGVfY2xlYW4gKCkgewotCSMgRW5zdXJlIHRoYXQgdGhlIGNhdGFsb2cgZmlsZSBzZ21sLWRvY2Jvb2suY2F0IGlzIHByb3Blcmx5Ci0JIyB1cGRhdGVkIHdoZW4gdGhlIHBhY2thZ2UgaXMgcmVtb3ZlZCBmcm9tIHNzdGF0ZSBjYWNoZS4KLQlmaWxlcz0iJHtzeXNjb25mZGlyfS9zZ21sL3NnbWwtZG9jYm9vay5iYWsgJHtzeXNjb25mZGlyfS9zZ21sL3NnbWwtZG9jYm9vay5jYXQiCi0JZm9yIGYgaW4gJGZpbGVzOyBkbwotCQlbICEgLWYgJGYgXSB8fCBzZWQgLWkgJy9cL3NnbWxcL29wZW5qYWRlLSR7UFZ9LmNhdC9kJyAkZgotCWRvbmUKLX0KZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvb3BrZy11dGlscy9vcGtnLXV0aWxzLzAwMDEtb3BrZy1idWlsZC1yZS1kby1maW5kLWxzLWNvZGUtdG8tbm90LWZhaWwtb24tZmlsZW5hbS5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvb3BrZy11dGlscy9vcGtnLXV0aWxzLzAwMDEtb3BrZy1idWlsZC1yZS1kby1maW5kLWxzLWNvZGUtdG8tbm90LWZhaWwtb24tZmlsZW5hbS5wYXRjaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNWNiYjU1YS4uMDAwMDAwMAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL29wa2ctdXRpbHMvb3BrZy11dGlscy8wMDAxLW9wa2ctYnVpbGQtcmUtZG8tZmluZC1scy1jb2RlLXRvLW5vdC1mYWlsLW9uLWZpbGVuYW0ucGF0Y2gKKysrIC9kZXYvbnVsbApAQCAtMSw1NiArMCwwIEBACi1Gcm9tIDhlNDI0Mjk2Y2UyYWY0YTVhNzM5MmMzOGEzMWY4NzIzZjliOWZiZGEgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCi1Gcm9tOiBEZW55cyBEbXl0cml5ZW5rbyA8ZGVueXNAdGkuY29tPgotRGF0ZTogVGh1LCA3IEFwciAyMDE2IDIwOjQzOjEzIC0wNDAwCi1TdWJqZWN0OiBbUEFUQ0hdIG9wa2ctYnVpbGQ6IHJlLWRvIGZpbmQvbHMgY29kZSB0byBub3QgZmFpbCBvbiBmaWxlbmFtZXMgd2l0aAotIHNwYWNlcwotCi1TaWduZWQtb2ZmLWJ5OiBEZW55cyBEbXl0cml5ZW5rbyA8ZGVueXNAdGkuY29tPgotLS0tCi0gb3BrZy1idWlsZCB8IDkgKysrKy0tLS0tCi0gMSBmaWxlIGNoYW5nZWQsIDQgaW5zZXJ0aW9ucygrKSwgNSBkZWxldGlvbnMoLSkKLQotZGlmZiAtLWdpdCBhL29wa2ctYnVpbGQgYi9vcGtnLWJ1aWxkCi1pbmRleCBhOWNjYWQyLi4wNzMwNWIyIDEwMDc1NQotLS0tIGEvb3BrZy1idWlsZAotKysrIGIvb3BrZy1idWlsZAotQEAgLTYsNyArNiw2IEBACi0gIyAyMDAzLTA0LTI1IHJlYUBzci51bmguZWR1Ci0gIyAgIFVwZGF0ZWQgdG8gd29yayBvbiBGYW1pbGlhciBQcmUwLjdyYzEsIHdpdGggYnVzeWJveCB0YXIuCi0gIyAgIE5vdGUgaXQgUmVxdWlyZXM6IGJpbnV0aWxzLWFyIChzaW5jZSB0aGUgYnVzeWJveCBhciBjYW4ndCBjcmVhdGUpCi0tIyAgIEZvciBVSUQgZGVidWdnaW5nIGl0IG5lZWRzIGEgYmV0dGVyICJmaW5kIi4KLSBzZXQgLWUKLSAKLSB2ZXJzaW9uPTEuMAotQEAgLTQ3LDEyICs0NiwxMiBAQCBwa2dfYXBwZWFyc19zYW5lKCkgewotIAotIAlQS0dfRVJST1I9MAotIAotLQl0aWxkZV9maWxlcz1gZmluZCAuIC1uYW1lICcqfidgCi0rCXRpbGRlX2ZpbGVzPWBmaW5kIC4gLW5hbWUgJyp+JyAtbHMgLXByaW50ZiAnXFxcbidgCi0gCWlmIFsgLW4gIiR0aWxkZV9maWxlcyIgXTsgdGhlbgotIAkgICAgaWYgWyAiJG5vY2xlYW4iID0gIjEiIF07IHRoZW4KLSAJCWVjaG8gIioqKiBXYXJuaW5nOiBUaGUgZm9sbG93aW5nIGZpbGVzIGhhdmUgbmFtZXMgZW5kaW5nIGluICd+Jy4KLSBZb3UgcHJvYmFibHkgd2FudCB0byByZW1vdmUgdGhlbTogIiA+JjIKLS0JCWxzIC1sZCAkdGlsZGVfZmlsZXMKLSsJCWVjaG8gLWUgJHRpbGRlX2ZpbGVzCi0gCQlpZiBbICQ/IC1uZSAwIF07IHRoZW4KLSAJCQllY2hvICIqKiogRXJyb3I6IEZhaWwgdG8gbGlzdCBmaWxlcyBoYXZlIG5hbWVzIGVuZGluZyBpbiAnficuIgotIAkJCWV4aXQgMQotQEAgLTY0LDEyICs2MywxMiBAQCBZb3UgcHJvYmFibHkgd2FudCB0byByZW1vdmUgdGhlbTogIiA+JjIKLSAJICAgIGZpCi0gCWZpCi0gCi0tCWxhcmdlX3VpZF9maWxlcz1gZmluZCAuIC11aWQgKzk5IHx8IHRydWVgCi0rCWxhcmdlX3VpZF9maWxlcz1gZmluZCAuIC11aWQgKzk5IC1scyAtcHJpbnRmICdcXFxuJyB8fCB0cnVlYAotIAotIAlpZiBbICIkb2dhcmdzIiA9ICIiIF0gICYmIFsgLW4gIiRsYXJnZV91aWRfZmlsZXMiIF07IHRoZW4KLSAJCWVjaG8gIioqKiBXYXJuaW5nOiBUaGUgZm9sbG93aW5nIGZpbGVzIGhhdmUgYSBVSUQgZ3JlYXRlciB0aGFuIDk5LgotIFlvdSBwcm9iYWJseSB3YW50IHRvIGNob3duIHRoZXNlIHRvIGEgc3lzdGVtIHVzZXI6ICIgPiYyCi0tCQlscyAtbGQgJGxhcmdlX3VpZF9maWxlcwotKwkJZWNobyAtZSAkbGFyZ2VfdWlkX2ZpbGVzCi0gCQlpZiBbICQ/IC1uZSAwIF07IHRoZW4KLSAJCQllY2hvICIqKiogRXJyb3I6IEZhaWwgdG8gbGlzdCBmaWxlcyBoYXZlIGEgVUlEIGdyZWF0ZXIgdGhhbiA5OS4iCi0gCQkJZXhpdCAxCi0tLSAKLTIuMi4wCi0KZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvb3BrZy11dGlscy9vcGtnLXV0aWxzL29wa2ctYnVpbGQtRXhpdC13aGVuLWZhaWwtdG8tbGlzdC1maWxlcy5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvb3BrZy11dGlscy9vcGtnLXV0aWxzL29wa2ctYnVpbGQtRXhpdC13aGVuLWZhaWwtdG8tbGlzdC1maWxlcy5wYXRjaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNmM2NjkwMi4uMDAwMDAwMAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL29wa2ctdXRpbHMvb3BrZy11dGlscy9vcGtnLWJ1aWxkLUV4aXQtd2hlbi1mYWlsLXRvLWxpc3QtZmlsZXMucGF0Y2gKKysrIC9kZXYvbnVsbApAQCAtMSw0NSArMCwwIEBACi1XZSBoYXZlIGFuIGlzc3VlIHdoZW4gbHMgc2VnZmF1bHRzIGluIHNvbWUgY2FzZXMgWzFdIHNvIGl0J3MKLWJldHRlciB0byBkZXRlY3QgdGhlIGZhaWx1cmUgYXQgdGhpcyBsZXZlbCBpbnN0ZWFkIG9mIGNvbnRpbnVlCi10aGUgYnVpbGQgcHJvY2Vzcy4KLQotW1lPQ1RPICM4OTI2XQotCi1VcHN0cmVhbS1TdGF0dXM6IFN1Ym1pdHRlZCBbMl0KLQotWzFdIGh0dHBzOi8vYnVnemlsbGEueW9jdG9wcm9qZWN0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9ODkyNiNjMAotWzJdIGh0dHBzOi8vZ3JvdXBzLmdvb2dsZS5jb20vZm9ydW0vIyF0b3BpYy9vcGtnLWRldmVsL2NtWDAyYmdIWm1zCi0KLVNpZ25lZC1vZmYtYnk6IEFuw61iYWwgTGltw7NuIDxhbmliYWwubGltb25AbGludXguaW50ZWwuY29tPgotLS0tCi0gb3BrZy1idWlsZCB8IDggKysrKysrKysKLSAxIGZpbGUgY2hhbmdlZCwgOCBpbnNlcnRpb25zKCspCi0KLWRpZmYgLS1naXQgYS9vcGtnLWJ1aWxkIGIvb3BrZy1idWlsZAotaW5kZXggOTgwMDhiNi4uYTljY2FkMiAxMDA3NTUKLS0tLSBhL29wa2ctYnVpbGQKLSsrKyBiL29wa2ctYnVpbGQKLUBAIC01Myw2ICs1MywxMCBAQCBwa2dfYXBwZWFyc19zYW5lKCkgewotIAkJZWNobyAiKioqIFdhcm5pbmc6IFRoZSBmb2xsb3dpbmcgZmlsZXMgaGF2ZSBuYW1lcyBlbmRpbmcgaW4gJ34nLgotIFlvdSBwcm9iYWJseSB3YW50IHRvIHJlbW92ZSB0aGVtOiAiID4mMgotIAkJbHMgLWxkICR0aWxkZV9maWxlcwotKwkJaWYgWyAkPyAtbmUgMCBdOyB0aGVuCi0rCQkJZWNobyAiKioqIEVycm9yOiBGYWlsIHRvIGxpc3QgZmlsZXMgaGF2ZSBuYW1lcyBlbmRpbmcgaW4gJ34nLiIKLSsJCQlleGl0IDEKLSsJCWZpCi0gCQllY2hvID4mMgotIAkgICAgZWxzZQotIAkJZWNobyAiKioqIFJlbW92aW5nIHRoZSBmb2xsb3dpbmcgZmlsZXM6ICR0aWxkZV9maWxlcyIKLUBAIC02Niw2ICs3MCwxMCBAQCBZb3UgcHJvYmFibHkgd2FudCB0byByZW1vdmUgdGhlbTogIiA+JjIKLSAJCWVjaG8gIioqKiBXYXJuaW5nOiBUaGUgZm9sbG93aW5nIGZpbGVzIGhhdmUgYSBVSUQgZ3JlYXRlciB0aGFuIDk5LgotIFlvdSBwcm9iYWJseSB3YW50IHRvIGNob3duIHRoZXNlIHRvIGEgc3lzdGVtIHVzZXI6ICIgPiYyCi0gCQlscyAtbGQgJGxhcmdlX3VpZF9maWxlcwotKwkJaWYgWyAkPyAtbmUgMCBdOyB0aGVuCi0rCQkJZWNobyAiKioqIEVycm9yOiBGYWlsIHRvIGxpc3QgZmlsZXMgaGF2ZSBhIFVJRCBncmVhdGVyIHRoYW4gOTkuIgotKwkJCWV4aXQgMQotKwkJZmkKLSAJCWVjaG8gPiYyCi0gCWZpCi0gCSAgICAKLS0tIAotMi4xLjQKLQpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9vcGtnLXV0aWxzL29wa2ctdXRpbHNfZ2l0LmJiIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9vcGtnLXV0aWxzL29wa2ctdXRpbHNfZ2l0LmJiCmluZGV4IDg4NzNiMjguLmE3YWVjNDUgMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvb3BrZy11dGlscy9vcGtnLXV0aWxzX2dpdC5iYgorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL29wa2ctdXRpbHMvb3BrZy11dGlsc19naXQuYmIKQEAgLTEsMTggKzEsMTYgQEAKIFNVTU1BUlkgPSAiQWRkaXRpb25hbCB1dGlsaXRpZXMgZm9yIHRoZSBvcGtnIHBhY2thZ2UgbWFuYWdlciIKIFNVTU1BUllfdXBkYXRlLWFsdGVybmF0aXZlcy1vcGtnID0gIlV0aWxpdHkgZm9yIG1hbmFnaW5nIHRoZSBhbHRlcm5hdGl2ZXMgc3lzdGVtIgogU0VDVElPTiA9ICJiYXNlIgotSE9NRVBBR0UgPSAiaHR0cDovL2NvZGUuZ29vZ2xlLmNvbS9wL29wa2cvIgorSE9NRVBBR0UgPSAiaHR0cDovL2dpdC55b2N0b3Byb2plY3Qub3JnL2NnaXQvY2dpdC5jZ2kvb3BrZy11dGlscyIKIExJQ0VOU0UgPSAiR1BMdjIrIgogTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9OTRkNTVkNTEyYTliYTM2Y2FhOWI3ZGYwNzliYWUxOWYgXAogICAgICAgICAgICAgICAgICAgICBmaWxlOi8vb3BrZy5weTtiZWdpbmxpbmU9MTtlbmRsaW5lPTE4O21kNT0xNTkxNzQ5MWFkNmJmN2FjYzY2NmNhNWY3Y2MxZTA4MyIKIFBST1ZJREVTICs9ICIke0BiYi51dGlscy5jb250YWlucygnUEFDS0FHRUNPTkZJRycsICd1cGRhdGUtYWx0ZXJuYXRpdmVzJywgJ3ZpcnR1YWwvdXBkYXRlLWFsdGVybmF0aXZlcycsICcnLCBkKX0iCiAKLVNSQ1JFViA9ICI1MzI3NGYwODc1NjVmZDQ1ZDg0NTJjNTM2Nzk5N2JhNmE2ODJhMzdhIgotUFYgPSAiMC4xLjgrZ2l0JHtTUkNQVn0iCitTUkNSRVYgPSAiM2ZmZWNlOWJmMTlhODQ0ZWRhY2M1NjNhYTA5MmZkMWZiZmNmZmVlZSIKK1BWID0gIjAuMy4yK2dpdCR7U1JDUFZ9IgogCi1TUkNfVVJJID0gImdpdDovL2dpdC55b2N0b3Byb2plY3Qub3JnL29wa2ctdXRpbHMgXAotICAgICAgICAgICBmaWxlOi8vb3BrZy1idWlsZC1FeGl0LXdoZW4tZmFpbC10by1saXN0LWZpbGVzLnBhdGNoIFwKLSAgICAgICAgICAgZmlsZTovLzAwMDEtb3BrZy1idWlsZC1yZS1kby1maW5kLWxzLWNvZGUtdG8tbm90LWZhaWwtb24tZmlsZW5hbS5wYXRjaCIKK1NSQ19VUkkgPSAiZ2l0Oi8vZ2l0LnlvY3RvcHJvamVjdC5vcmcvb3BrZy11dGlscyIKIFNSQ19VUklfYXBwZW5kX2NsYXNzLW5hdGl2ZSA9ICIgZmlsZTovL3Rhcl9pZ25vcmVfZXJyb3IucGF0Y2giCiAKIFMgPSAiJHtXT1JLRElSfS9naXQiCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL29wa2cvb3BrZy8wMDAxLWNvbmZpZ3VyZS5hYy11c2UtcGtnLWNvbmZpZy1mb3ItbGlic29sdi5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvb3BrZy9vcGtnLzAwMDEtY29uZmlndXJlLmFjLXVzZS1wa2ctY29uZmlnLWZvci1saWJzb2x2LnBhdGNoCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlNjdlYzc0Li4wMDAwMDAwCi0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvb3BrZy9vcGtnLzAwMDEtY29uZmlndXJlLmFjLXVzZS1wa2ctY29uZmlnLWZvci1saWJzb2x2LnBhdGNoCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotRnJvbSAyYTQzMDI3ZjdlY2YyYmIzY2U3M2Y5NWJjZjU3NWM1NmJjNDk1ZDA3IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQotRnJvbTogQWxlamFuZHJvIGRlbCBDYXN0aWxsbyA8YWxlamFuZHJvLmRlbGNhc3RpbGxvQG5pLmNvbT4KLURhdGU6IFdlZCwgOSBEZWMgMjAxNSAxNzozODowNSAtMDYwMAotU3ViamVjdDogW1BBVENIXSBjb25maWd1cmUuYWM6IHVzZSBwa2ctY29uZmlnIGZvciBsaWJzb2x2Ci0KLVNpZ25lZC1vZmYtYnk6IEFsZWphbmRybyBkZWwgQ2FzdGlsbG8gPGFsZWphbmRyby5kZWxjYXN0aWxsb0BuaS5jb20+Ci0tLS0KLSBjb25maWd1cmUuYWMgfCAxMiArLS0tLS0tLS0tLS0KLSAxIGZpbGUgY2hhbmdlZCwgMSBpbnNlcnRpb24oKyksIDExIGRlbGV0aW9ucygtKQotCi1kaWZmIC0tZ2l0IGEvY29uZmlndXJlLmFjIGIvY29uZmlndXJlLmFjCi1pbmRleCA1MmUxMDI1Li5kMTdkYzVjIDEwMDY0NAotLS0tIGEvY29uZmlndXJlLmFjCi0rKysgYi9jb25maWd1cmUuYWMKLUBAIC0xNTksMTcgKzE1OSw3IEBAIGlmIHRlc3QgIngkd2FudF9zb2x2ZXIiICE9ICJ4bm8iOyB0aGVuCi0gICAgICAgICAgICAgICAgICBBQ19NU0dfRVJST1IoU3BlY2lmeSB3aGljaCBzb2x2ZXIgd2l0aCAtLWVuYWJsZS1zb2x2ZXI9PFNPTFZFUj4pXSwKLSAgICAgICAgICAgICBbbGlic29sdl0sCi0gICAgICAgICAgICAgICAgIFtBQ19NU0dfUkVTVUxUKGxpYnNvbHYpCi0tCi0tICAgICAgICAgICAgICAgIFNPTFZFUl9DRkxBR1M9Ii1JL3Vzci9sb2NhbC9pbmNsdWRlLyIKLS0gICAgICAgICAgICAgICAgU09MVkVSX0xJQlM9Ii1sc29sdiAtbHNvbHZleHQiCi0tICAgICAgICAgICAgICAgIEFDX0NIRUNLX0xJQihbc29sdl0sCi0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbc29sdmVyX3NvbHZlXSwKLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtdLAotLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW0FDX01TR19FUlJPUihsaWJzb2x2IG5vdCBmb3VuZCldKQotLSAgICAgICAgICAgICAgICBkbmwgVE9ETzogcmVtb3ZlIHByZXZpb3VzIDYgbGluZXMgYW5kIHVuY29tbWVudCBsaW5lIGJlbG93IHRvIHVzZQotLSAgICAgICAgICAgICAgICBkbmwgcGtnLWNvbmZpZyBvbmNlIHRoZXJlIGlzIGEgcmVsZWFzZSBvZiBsaWJzb2x2IHdpdGggcGtnLWNvbmZpZzoKLS0gICAgICAgICAgICAgICAgZG5sIFBLR19DSEVDS19NT0RVTEVTKFNPTFZFUiwgbGlic29sdikKLS0KLSsgICAgICAgICAgICAgICAgUEtHX0NIRUNLX01PRFVMRVMoU09MVkVSLCBsaWJzb2x2KQotICAgICAgICAgICAgICAgICBBQ19ERUZJTkUoSEFWRV9TT0xWRVJfTElCU09MViwxLFtEZWZpbmUgaWYgeW91IHdhbnQgdG8gdXNlIGxpYnNvbHZdKV0sCi0gICAgICAgICAgICAgIyBkZWZhdWx0Ci0gICAgICAgICAgICAgW0FDX01TR19SRVNVTFQobm8pCi0tLSAKLTEuOS4xCi0KZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvb3BrZy9vcGtnLzAwMDEtbGlic29sdl9zb2x2ZXJfc2V0X2FyY2hfcG9saWN5LXVzZS1jb3JyZWN0LWxvZ2ljLWR1ci5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvb3BrZy9vcGtnLzAwMDEtbGlic29sdl9zb2x2ZXJfc2V0X2FyY2hfcG9saWN5LXVzZS1jb3JyZWN0LWxvZ2ljLWR1ci5wYXRjaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMWFiMTc5MC4uMDAwMDAwMAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL29wa2cvb3BrZy8wMDAxLWxpYnNvbHZfc29sdmVyX3NldF9hcmNoX3BvbGljeS11c2UtY29ycmVjdC1sb2dpYy1kdXIucGF0Y2gKKysrIC9kZXYvbnVsbApAQCAtMSwzNSArMCwwIEBACi1Gcm9tIDNlNTYyYmVkN2RjZWQyNWViM2U5MTc0Y2E5Mzk1MzI0YjZjODczYzEgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCi1Gcm9tOiBBbGVqYW5kcm8gZGVsIENhc3RpbGxvIDxhbGVqYW5kcm8uZGVsY2FzdGlsbG9AbmkuY29tPgotRGF0ZTogV2VkLCA5IERlYyAyMDE1IDEzOjM2OjE0IC0wNjAwCi1TdWJqZWN0OiBbUEFUQ0hdIGxpYnNvbHZfc29sdmVyX3NldF9hcmNoX3BvbGljeTogdXNlIGNvcnJlY3QgbG9naWMgZHVyaW5nCi0gYXJjaHMgcmVzaXppbmcKLQotSWYgdGhlcmUgYXJlIG1vcmUgdGhhbiBJTklUSUFMX0FSQ0hfTElTVF9TSVpFIGFyY2hzIGRlZmluZWQgaW4gdGhlCi1jb25maWd1cmF0aW9uLCBsaWJzb2x2X3NvbHZlcl9zZXRfYXJjaF9wb2xpY3kgY3Jhc2hlcyBkdWUgdG8gZmxhd2VkCi1sb2dpYyB3aGVuIHJlc2l6aW5nIHRoZSBhcmNocyBhcnJheS4KLQotU2lnbmVkLW9mZi1ieTogQWxlamFuZHJvIGRlbCBDYXN0aWxsbyA8YWxlamFuZHJvLmRlbGNhc3RpbGxvQG5pLmNvbT4KLS0tLQotIGxpYm9wa2cvb3BrZ19zb2x2ZXJfbGlic29sdi5jIHwgNiArKysrLS0KLSAxIGZpbGUgY2hhbmdlZCwgNCBpbnNlcnRpb25zKCspLCAyIGRlbGV0aW9ucygtKQotCi1kaWZmIC0tZ2l0IGEvbGlib3BrZy9vcGtnX3NvbHZlcl9saWJzb2x2LmMgYi9saWJvcGtnL29wa2dfc29sdmVyX2xpYnNvbHYuYwotaW5kZXggMWNkY2YxZi4uYjVhZjBmYSAxMDA2NDQKLS0tLSBhL2xpYm9wa2cvb3BrZ19zb2x2ZXJfbGlic29sdi5jCi0rKysgYi9saWJvcGtnL29wa2dfc29sdmVyX2xpYnNvbHYuYwotQEAgLTY2LDggKzY2LDEwIEBAIHN0YXRpYyB2b2lkIGxpYnNvbHZfc29sdmVyX3NldF9hcmNoX3BvbGljeShsaWJzb2x2X3NvbHZlcl90ICpsaWJzb2x2X3NvbHZlcikKLSAgICAgbnZfcGFpcl9saXN0X2VsdF90ICphcmNoX2luZm87Ci0gCi0gICAgIGxpc3RfZm9yX2VhY2hfZW50cnkoYXJjaF9pbmZvLCAmb3BrZ19jb25maWctPmFyY2hfbGlzdC5oZWFkLCBub2RlKSB7Ci0tICAgICAgICBpZiAoYXJjaF9jb3VudCA+IGFyY2hfbGlzdF9zaXplKQotLSAgICAgICAgICAgIGFyY2hzID0geHJlYWxsb2MoYXJjaHMsIGFyY2hfbGlzdF9zaXplICo9IDIpOwotKyAgICAgICAgaWYgKGFyY2hfY291bnQgPj0gYXJjaF9saXN0X3NpemUpIHsKLSsgICAgICAgICAgICBhcmNoX2xpc3Rfc2l6ZSAqPSAyOwotKyAgICAgICAgICAgIGFyY2hzID0geHJlYWxsb2MoYXJjaHMsIGFyY2hfbGlzdF9zaXplICogc2l6ZW9mKGFyY2hfZGF0YV90KSk7Ci0rICAgICAgICB9Ci0gCi0gICAgICAgICBhcmNoc1thcmNoX2NvdW50XS5hcmNoID0gKChudl9wYWlyX3QgKikoYXJjaF9pbmZvLT5kYXRhKSktPm5hbWU7Ci0gICAgICAgICBhcmNoc1thcmNoX2NvdW50XS5wcmlvcml0eSA9IGF0b2koKChudl9wYWlyX3QgKikKLS0tIAotMS45LjEKLQpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9vcGtnL29wa2dfMC4zLjEuYmIgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL29wa2cvb3BrZ18wLjMuMS5iYgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTc3ZjQ5NS4uMDAwMDAwMAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL29wa2cvb3BrZ18wLjMuMS5iYgorKysgL2Rldi9udWxsCkBAIC0xLDc1ICswLDAgQEAKLVNVTU1BUlkgPSAiT3BlbiBQYWNrYWdlIE1hbmFnZXIiCi1TVU1NQVJZX2xpYm9wa2cgPSAiT3BlbiBQYWNrYWdlIE1hbmFnZXIgbGlicmFyeSIKLVNFQ1RJT04gPSAiYmFzZSIKLUhPTUVQQUdFID0gImh0dHA6Ly9jb2RlLmdvb2dsZS5jb20vcC9vcGtnLyIKLUJVR1RSQUNLRVIgPSAiaHR0cDovL2NvZGUuZ29vZ2xlLmNvbS9wL29wa2cvaXNzdWVzL2xpc3QiCi1MSUNFTlNFID0gIkdQTHYyKyIKLUxJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PTk0ZDU1ZDUxMmE5YmEzNmNhYTliN2RmMDc5YmFlMTlmIFwKLSAgICAgICAgICAgICAgICAgICAgZmlsZTovL3NyYy9vcGtnLmM7YmVnaW5saW5lPTI7ZW5kbGluZT0yMTttZDU9OTA0MzVhNTE5YzZlYTY5ZWYyMmU0YTg4YmNjNTJmYTAiCi0KLURFUEVORFMgPSAibGliYXJjaGl2ZSIKLQotUEUgPSAiMSIKLQotU1JDX1VSSSA9ICJodHRwOi8vZG93bmxvYWRzLnlvY3RvcHJvamVjdC5vcmcvcmVsZWFzZXMvJHtCUE59LyR7QlBOfS0ke1BWfS50YXIuZ3ogXAotICAgICAgICAgICBmaWxlOi8vb3BrZy1jb25maWd1cmUuc2VydmljZSBcCi0gICAgICAgICAgIGZpbGU6Ly9vcGtnLmNvbmYgXAotICAgICAgICAgICBmaWxlOi8vMDAwMS1vcGtnX2NvbmYtY3JlYXRlLW9wa2cubG9jay1pbi1ydW4taW5zdGVhZC1vZi12YXItcnVuLnBhdGNoIFwKLSAgICAgICAgICAgZmlsZTovLzAwMDEtbGlic29sdl9zb2x2ZXJfc2V0X2FyY2hfcG9saWN5LXVzZS1jb3JyZWN0LWxvZ2ljLWR1ci5wYXRjaCBcCi0gICAgICAgICAgIGZpbGU6Ly8wMDAxLWNvbmZpZ3VyZS5hYy11c2UtcGtnLWNvbmZpZy1mb3ItbGlic29sdi5wYXRjaCBcCi0iCi0KLVNSQ19VUklbbWQ1c3VtXSA9ICI0MzczNWU1ZGMxZWJmNDZiZDZjZTU2YTdjZGZkYzcyMCIKLVNSQ19VUklbc2hhMjU2c3VtXSA9ICJkMmM2YzAyYTgzODRlYzIxMTY4YTFmMGExODZjYjVlOWY1NzdkMTQ1MmY0OTFkMDJlZDNlNTZiMmVhOGI4N2RmIgotCi1pbmhlcml0IGF1dG90b29scyBwa2djb25maWcgc3lzdGVtZAotCi1TWVNURU1EX1NFUlZJQ0VfJHtQTn0gPSAib3BrZy1jb25maWd1cmUuc2VydmljZSIKLQotdGFyZ2V0X2xvY2Fsc3RhdGVkaXIgOj0gIiR7bG9jYWxzdGF0ZWRpcn0iCi1PUEtHTElCRElSID0gIiR7dGFyZ2V0X2xvY2Fsc3RhdGVkaXJ9L2xpYiIKLQotUEFDS0FHRUNPTkZJRyA/Pz0gIiIKLQotUEFDS0FHRUNPTkZJR1tncGddID0gIi0tZW5hYmxlLWdwZywtLWRpc2FibGUtZ3BnLGdwZ21lIGxpYmdwZy1lcnJvcixnbnVwZyIKLVBBQ0tBR0VDT05GSUdbY3VybF0gPSAiLS1lbmFibGUtY3VybCwtLWRpc2FibGUtY3VybCxjdXJsIgotUEFDS0FHRUNPTkZJR1tzc2wtY3VybF0gPSAiLS1lbmFibGUtc3NsLWN1cmwsLS1kaXNhYmxlLXNzbC1jdXJsLGN1cmwgb3BlbnNzbCIKLVBBQ0tBR0VDT05GSUdbb3BlbnNzbF0gPSAiLS1lbmFibGUtb3BlbnNzbCwtLWRpc2FibGUtb3BlbnNzbCxvcGVuc3NsIgotUEFDS0FHRUNPTkZJR1tzaGEyNTZdID0gIi0tZW5hYmxlLXNoYTI1NiwtLWRpc2FibGUtc2hhMjU2IgotUEFDS0FHRUNPTkZJR1twYXRoZmluZGVyXSA9ICItLWVuYWJsZS1wYXRoZmluZGVyLC0tZGlzYWJsZS1wYXRoZmluZGVyLHBhdGhmaW5kZXIiCi1QQUNLQUdFQ09ORklHW2xpYnNvbHZdID0gIi0tZW5hYmxlLXNvbHZlcj1saWJzb2x2LC0tZGlzYWJsZS1zb2x2ZXIsbGlic29sdiIKLQotZG9faW5zdGFsbF9hcHBlbmQgKCkgewotCWluc3RhbGwgLWQgJHtEfSR7c3lzY29uZmRpcn0vb3BrZwotCWluc3RhbGwgLW0gMDY0NCAke1dPUktESVJ9L29wa2cuY29uZiAke0R9JHtzeXNjb25mZGlyfS9vcGtnL29wa2cuY29uZgotCWVjaG8gIm9wdGlvbiBsaXN0c19kaXIgJHtPUEtHTElCRElSfS9vcGtnL2xpc3RzIiA+PiR7RH0ke3N5c2NvbmZkaXJ9L29wa2cvb3BrZy5jb25mCi0KLQkjIFdlIG5lZWQgdG8gY3JlYXRlIHRoZSBsb2NrIGRpcmVjdG9yeQotCWluc3RhbGwgLWQgJHtEfSR7T1BLR0xJQkRJUn0vb3BrZwotCi0JaWYgJHtAYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsJ3N5c3RlbWQnLCd0cnVlJywnZmFsc2UnLGQpfTt0aGVuCi0JCWluc3RhbGwgLWQgJHtEfSR7c3lzdGVtZF91bml0ZGlyfS9zeXN0ZW0KLQkJaW5zdGFsbCAtbSAwNjQ0ICR7V09SS0RJUn0vb3BrZy1jb25maWd1cmUuc2VydmljZSAke0R9JHtzeXN0ZW1kX3VuaXRkaXJ9L3N5c3RlbS8KLQkJc2VkIC1pIC1lICdzLEBCQVNFX0JJTkRJUkAsJHtiYXNlX2JpbmRpcn0sZycgXAotCQkJLWUgJ3MsQFNZU0NPTkZESVJALCR7c3lzY29uZmRpcn0sZycgXAotCQkJLWUgJ3MsQEJJTkRJUkAsJHtiaW5kaXJ9LGcnIFwKLQkJCS1lICdzLEBTWVNURU1EX1VOSVRESVJALCR7c3lzdGVtZF91bml0ZGlyfSxnJyBcCi0JCQkke0R9JHtzeXN0ZW1kX3VuaXRkaXJ9L3N5c3RlbS9vcGtnLWNvbmZpZ3VyZS5zZXJ2aWNlCi0JZmkKLX0KLQotUkRFUEVORFNfJHtQTn0gPSAiJHtWSVJUVUFMLVJVTlRJTUVfdXBkYXRlLWFsdGVybmF0aXZlc30gb3BrZy1hcmNoLWNvbmZpZyBydW4tcG9zdGluc3RzIGxpYmFyY2hpdmUiCi1SREVQRU5EU18ke1BOfV9jbGFzcy1uYXRpdmUgPSAiIgotUkRFUEVORFNfJHtQTn1fY2xhc3MtbmF0aXZlc2RrID0gIiIKLVJSRVBMQUNFU18ke1BOfSA9ICJvcGtnLW5vZ3BnIG9wa2ctY29sbGF0ZXJhbCIKLVJDT05GTElDVFNfJHtQTn0gPSAib3BrZy1jb2xsYXRlcmFsIgotUlBST1ZJREVTXyR7UE59ID0gIm9wa2ctY29sbGF0ZXJhbCIKLQotUEFDS0FHRVMgPSsgImxpYm9wa2ciCi0KLUZJTEVTX2xpYm9wa2cgPSAiJHtsaWJkaXJ9Lyouc28uKiAke09QS0dMSUJESVJ9L29wa2cvIgotRklMRVNfJHtQTn0gKz0gIiR7c3lzdGVtZF91bml0ZGlyfS9zeXN0ZW0vIgotCi1CQkNMQVNTRVhURU5EID0gIm5hdGl2ZSBuYXRpdmVzZGsiCi0KLUNPTkZGSUxFU18ke1BOfSA9ICIke3N5c2NvbmZkaXJ9L29wa2cvb3BrZy5jb25mIgpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9vcGtnL29wa2dfMC4zLjMuYmIgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL29wa2cvb3BrZ18wLjMuMy5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iY2U3MmZjCi0tLSAvZGV2L251bGwKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9vcGtnL29wa2dfMC4zLjMuYmIKQEAgLTAsMCArMSw3MyBAQAorU1VNTUFSWSA9ICJPcGVuIFBhY2thZ2UgTWFuYWdlciIKK1NVTU1BUllfbGlib3BrZyA9ICJPcGVuIFBhY2thZ2UgTWFuYWdlciBsaWJyYXJ5IgorU0VDVElPTiA9ICJiYXNlIgorSE9NRVBBR0UgPSAiaHR0cDovL2NvZGUuZ29vZ2xlLmNvbS9wL29wa2cvIgorQlVHVFJBQ0tFUiA9ICJodHRwOi8vY29kZS5nb29nbGUuY29tL3Avb3BrZy9pc3N1ZXMvbGlzdCIKK0xJQ0VOU0UgPSAiR1BMdjIrIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9OTRkNTVkNTEyYTliYTM2Y2FhOWI3ZGYwNzliYWUxOWYgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vc3JjL29wa2cuYztiZWdpbmxpbmU9MjtlbmRsaW5lPTIxO21kNT05MDQzNWE1MTljNmVhNjllZjIyZTRhODhiY2M1MmZhMCIKKworREVQRU5EUyA9ICJsaWJhcmNoaXZlIgorCitQRSA9ICIxIgorCitTUkNfVVJJID0gImh0dHA6Ly9kb3dubG9hZHMueW9jdG9wcm9qZWN0Lm9yZy9yZWxlYXNlcy8ke0JQTn0vJHtCUE59LSR7UFZ9LnRhci5neiBcCisgICAgICAgICAgIGZpbGU6Ly9vcGtnLWNvbmZpZ3VyZS5zZXJ2aWNlIFwKKyAgICAgICAgICAgZmlsZTovL29wa2cuY29uZiBcCisgICAgICAgICAgIGZpbGU6Ly8wMDAxLW9wa2dfY29uZi1jcmVhdGUtb3BrZy5sb2NrLWluLXJ1bi1pbnN0ZWFkLW9mLXZhci1ydW4ucGF0Y2ggXAorIgorCitTUkNfVVJJW21kNXN1bV0gPSAiYTQ2MTMwMzhjOGFmYzdkOGQ0ODJmNWM1M2YxMzdiZGYiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiMTlkYjllNzMxMjFhNWU0YzkxZmEyMjhiMGE2YTRjNTVjYzM1OTEwNTYxMzBjZmIzYzY2YzMwYWEzMmY4ZDAwZSIKKworaW5oZXJpdCBhdXRvdG9vbHMgcGtnY29uZmlnIHN5c3RlbWQKKworU1lTVEVNRF9TRVJWSUNFXyR7UE59ID0gIm9wa2ctY29uZmlndXJlLnNlcnZpY2UiCisKK3RhcmdldF9sb2NhbHN0YXRlZGlyIDo9ICIke2xvY2Fsc3RhdGVkaXJ9IgorT1BLR0xJQkRJUiA9ICIke3RhcmdldF9sb2NhbHN0YXRlZGlyfS9saWIiCisKK1BBQ0tBR0VDT05GSUcgPz89ICIiCisKK1BBQ0tBR0VDT05GSUdbZ3BnXSA9ICItLWVuYWJsZS1ncGcsLS1kaXNhYmxlLWdwZyxncGdtZSBsaWJncGctZXJyb3IsZ251cGciCitQQUNLQUdFQ09ORklHW2N1cmxdID0gIi0tZW5hYmxlLWN1cmwsLS1kaXNhYmxlLWN1cmwsY3VybCIKK1BBQ0tBR0VDT05GSUdbc3NsLWN1cmxdID0gIi0tZW5hYmxlLXNzbC1jdXJsLC0tZGlzYWJsZS1zc2wtY3VybCxjdXJsIG9wZW5zc2wiCitQQUNLQUdFQ09ORklHW29wZW5zc2xdID0gIi0tZW5hYmxlLW9wZW5zc2wsLS1kaXNhYmxlLW9wZW5zc2wsb3BlbnNzbCIKK1BBQ0tBR0VDT05GSUdbc2hhMjU2XSA9ICItLWVuYWJsZS1zaGEyNTYsLS1kaXNhYmxlLXNoYTI1NiIKK1BBQ0tBR0VDT05GSUdbcGF0aGZpbmRlcl0gPSAiLS1lbmFibGUtcGF0aGZpbmRlciwtLWRpc2FibGUtcGF0aGZpbmRlcixwYXRoZmluZGVyIgorUEFDS0FHRUNPTkZJR1tsaWJzb2x2XSA9ICItLXdpdGgtbGlic29sdiwtLXdpdGhvdXQtbGlic29sdixsaWJzb2x2IgorCitkb19pbnN0YWxsX2FwcGVuZCAoKSB7CisJaW5zdGFsbCAtZCAke0R9JHtzeXNjb25mZGlyfS9vcGtnCisJaW5zdGFsbCAtbSAwNjQ0ICR7V09SS0RJUn0vb3BrZy5jb25mICR7RH0ke3N5c2NvbmZkaXJ9L29wa2cvb3BrZy5jb25mCisJZWNobyAib3B0aW9uIGxpc3RzX2RpciAke09QS0dMSUJESVJ9L29wa2cvbGlzdHMiID4+JHtEfSR7c3lzY29uZmRpcn0vb3BrZy9vcGtnLmNvbmYKKworCSMgV2UgbmVlZCB0byBjcmVhdGUgdGhlIGxvY2sgZGlyZWN0b3J5CisJaW5zdGFsbCAtZCAke0R9JHtPUEtHTElCRElSfS9vcGtnCisKKwlpZiAke0BiYi51dGlscy5jb250YWlucygnRElTVFJPX0ZFQVRVUkVTJywnc3lzdGVtZCcsJ3RydWUnLCdmYWxzZScsZCl9O3RoZW4KKwkJaW5zdGFsbCAtZCAke0R9JHtzeXN0ZW1kX3VuaXRkaXJ9L3N5c3RlbQorCQlpbnN0YWxsIC1tIDA2NDQgJHtXT1JLRElSfS9vcGtnLWNvbmZpZ3VyZS5zZXJ2aWNlICR7RH0ke3N5c3RlbWRfdW5pdGRpcn0vc3lzdGVtLworCQlzZWQgLWkgLWUgJ3MsQEJBU0VfQklORElSQCwke2Jhc2VfYmluZGlyfSxnJyBcCisJCQktZSAncyxAU1lTQ09ORkRJUkAsJHtzeXNjb25mZGlyfSxnJyBcCisJCQktZSAncyxAQklORElSQCwke2JpbmRpcn0sZycgXAorCQkJLWUgJ3MsQFNZU1RFTURfVU5JVERJUkAsJHtzeXN0ZW1kX3VuaXRkaXJ9LGcnIFwKKwkJCSR7RH0ke3N5c3RlbWRfdW5pdGRpcn0vc3lzdGVtL29wa2ctY29uZmlndXJlLnNlcnZpY2UKKwlmaQorfQorCitSREVQRU5EU18ke1BOfSA9ICIke1ZJUlRVQUwtUlVOVElNRV91cGRhdGUtYWx0ZXJuYXRpdmVzfSBvcGtnLWFyY2gtY29uZmlnIHJ1bi1wb3N0aW5zdHMgbGliYXJjaGl2ZSIKK1JERVBFTkRTXyR7UE59X2NsYXNzLW5hdGl2ZSA9ICIiCitSREVQRU5EU18ke1BOfV9jbGFzcy1uYXRpdmVzZGsgPSAiIgorUlJFUExBQ0VTXyR7UE59ID0gIm9wa2ctbm9ncGcgb3BrZy1jb2xsYXRlcmFsIgorUkNPTkZMSUNUU18ke1BOfSA9ICJvcGtnLWNvbGxhdGVyYWwiCitSUFJPVklERVNfJHtQTn0gPSAib3BrZy1jb2xsYXRlcmFsIgorCitQQUNLQUdFUyA9KyAibGlib3BrZyIKKworRklMRVNfbGlib3BrZyA9ICIke2xpYmRpcn0vKi5zby4qICR7T1BLR0xJQkRJUn0vb3BrZy8iCitGSUxFU18ke1BOfSArPSAiJHtzeXN0ZW1kX3VuaXRkaXJ9L3N5c3RlbS8iCisKK0JCQ0xBU1NFWFRFTkQgPSAibmF0aXZlIG5hdGl2ZXNkayIKKworQ09ORkZJTEVTXyR7UE59ID0gIiR7c3lzY29uZmRpcn0vb3BrZy9vcGtnLmNvbmYiCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL29yYy9vcmNfMC40LjI0LmJiIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9vcmMvb3JjXzAuNC4yNC5iYgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTIwZjg4ZC4uMDAwMDAwMAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL29yYy9vcmNfMC40LjI0LmJiCisrKyAvZGV2L251bGwKQEAgLTEsMjcgKzAsMCBAQAotU1VNTUFSWSA9ICJPcHRpbWlzZWQgSW5uZXIgTG9vcCBSdW50aW1lIENvbXBpbGVyIgotSE9NRVBBR0UgPSAiaHR0cDovL2dzdHJlYW1lci5mcmVlZGVza3RvcC5vcmcvbW9kdWxlcy9vcmMuaHRtbCIKLUxJQ0VOU0UgPSAiQlNELTItQ2xhdXNlICYgQlNELTMtQ2xhdXNlIgotTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9MTQwMGJkOWQwOWU4YWY1NmI5ZWM5ODJiM2Q4NTc5N2UiCi0KLVNSQ19VUkkgPSAiaHR0cDovL2dzdHJlYW1lci5mcmVlZGVza3RvcC5vcmcvc3JjL29yYy9vcmMtJHtQVn0udGFyLnh6IgotCi1TUkNfVVJJW21kNXN1bV0gPSAiOWU3OTNlYzM0YzBlMjAzMzk2NTlkZDRiYmJmNjIxMzUiCi1TUkNfVVJJW3NoYTI1NnN1bV0gPSAiMzM4Y2Q0OTNiNTI0NzMwMDE0OTgyMWM2MzEyYmRmNzQyMmEzNTkzYWU5ODY5MWZjNzVkN2U0ZmU3MjdiZDM5YiIKLQotaW5oZXJpdCBhdXRvdG9vbHMgcGtnY29uZmlnCi0KLUJCQ0xBU1NFWFRFTkQgPSAibmF0aXZlIG5hdGl2ZXNkayIKLQotUEFDS0FHRVMgPSsgIm9yYy1leGFtcGxlcyIKLVBBQ0tBR0VTX0RZTkFNSUMgKz0gIl5saWJvcmMtLioiCi1GSUxFU19vcmMtZXhhbXBsZXMgPSAiJHtsaWJkaXJ9L29yYy8qIgotRklMRVNfJHtQTn0gPSAiJHtiaW5kaXJ9LyoiCi0KLXB5dGhvbiBwb3B1bGF0ZV9wYWNrYWdlc19wcmVwZW5kICgpIHsKLSAgICBsaWJkaXIgPSBkLmV4cGFuZCgnJHtsaWJkaXJ9JykKLSAgICBkb19zcGxpdF9wYWNrYWdlcyhkLCBsaWJkaXIsICdebGliKC4qKVwuc29cLionLCAnbGliJXMnLCAnT1JDICVzIGxpYnJhcnknLCBleHRyYV9kZXBlbmRzPScnLCBhbGxvd19saW5rcz1UcnVlKQotfQotCi1kb19jb21waWxlX3ByZXBlbmRfY2xhc3MtbmF0aXZlICgpIHsKLSAgICBzZWQgLWkgLWUgJ3MjL3RtcCMuI2cnICR7U30vb3JjL29yY2NvZGVtZW0uYwotfQpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9vcmMvb3JjXzAuNC4yNS5iYiBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvb3JjL29yY18wLjQuMjUuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODk3NDkzYQotLS0gL2Rldi9udWxsCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvb3JjL29yY18wLjQuMjUuYmIKQEAgLTAsMCArMSwyNyBAQAorU1VNTUFSWSA9ICJPcHRpbWlzZWQgSW5uZXIgTG9vcCBSdW50aW1lIENvbXBpbGVyIgorSE9NRVBBR0UgPSAiaHR0cDovL2dzdHJlYW1lci5mcmVlZGVza3RvcC5vcmcvbW9kdWxlcy9vcmMuaHRtbCIKK0xJQ0VOU0UgPSAiQlNELTItQ2xhdXNlICYgQlNELTMtQ2xhdXNlIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9MTQwMGJkOWQwOWU4YWY1NmI5ZWM5ODJiM2Q4NTc5N2UiCisKK1NSQ19VUkkgPSAiaHR0cDovL2dzdHJlYW1lci5mcmVlZGVza3RvcC5vcmcvc3JjL29yYy9vcmMtJHtQVn0udGFyLnh6IgorCitTUkNfVVJJW21kNXN1bV0gPSAiODU4MmEyOGIxNWY1MzExMGM4OGQ4MDQzZDlmNTViY2YiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiYzFiMWQ1NGE1OGYyNmQ0ODNmMGIzODgxNTM4OTg0Nzg5ZmU1ZDU0NjBhYjhmYWI3NGExY2FjYmQzZDFjNTNkMSIKKworaW5oZXJpdCBhdXRvdG9vbHMgcGtnY29uZmlnIGd0ay1kb2MKKworQkJDTEFTU0VYVEVORCA9ICJuYXRpdmUgbmF0aXZlc2RrIgorCitQQUNLQUdFUyA9KyAib3JjLWV4YW1wbGVzIgorUEFDS0FHRVNfRFlOQU1JQyArPSAiXmxpYm9yYy0uKiIKK0ZJTEVTX29yYy1leGFtcGxlcyA9ICIke2xpYmRpcn0vb3JjLyoiCitGSUxFU18ke1BOfSA9ICIke2JpbmRpcn0vKiIKKworcHl0aG9uIHBvcHVsYXRlX3BhY2thZ2VzX3ByZXBlbmQgKCkgeworICAgIGxpYmRpciA9IGQuZXhwYW5kKCcke2xpYmRpcn0nKQorICAgIGRvX3NwbGl0X3BhY2thZ2VzKGQsIGxpYmRpciwgJ15saWIoLiopXC5zb1wuKicsICdsaWIlcycsICdPUkMgJXMgbGlicmFyeScsIGV4dHJhX2RlcGVuZHM9JycsIGFsbG93X2xpbmtzPVRydWUpCit9CisKK2RvX2NvbXBpbGVfcHJlcGVuZF9jbGFzcy1uYXRpdmUgKCkgeworICAgIHNlZCAtaSAtZSAncyMvdG1wIy4jZycgJHtTfS9vcmMvb3JjY29kZW1lbS5jCit9CmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL29zc3AtdXVpZC9vc3NwLXV1aWQvaW5zdGFsbC1wYy5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvb3NzcC11dWlkL29zc3AtdXVpZC9pbnN0YWxsLXBjLnBhdGNoCmluZGV4IDA0MjIyY2IuLjYzYjgwZjYgMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvb3NzcC11dWlkL29zc3AtdXVpZC9pbnN0YWxsLXBjLnBhdGNoCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvb3NzcC11dWlkL29zc3AtdXVpZC9pbnN0YWxsLXBjLnBhdGNoCkBAIC0yLDcgKzIsNyBAQAogZGlyZWN0b3J5LCBhbmQgbm90ICRTLgogCiBVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcgW3Nob3VsZCBiZSBzdWJtaXR0ZWRdCi1TaWduZWQtT2ZmLUJ5OiBSb3NzIEJ1cnRvbiA8cm9zcy5idXJ0b25AaW50ZWwuY29tPgorU2lnbmVkLW9mZi1ieTogUm9zcyBCdXJ0b24gPHJvc3MuYnVydG9uQGludGVsLmNvbT4KIAogSW5kZXg6IHV1aWQtMS42LjIvTWFrZWZpbGUuaW4KID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvb3NzcC11dWlkL29zc3AtdXVpZF8xLjYuMi5iYiBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvb3NzcC11dWlkL29zc3AtdXVpZF8xLjYuMi5iYgppbmRleCAwODkyNmJhLi44NWExYmNmIDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL29zc3AtdXVpZC9vc3NwLXV1aWRfMS42LjIuYmIKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9vc3NwLXV1aWQvb3NzcC11dWlkXzEuNi4yLmJiCkBAIC0xNiw4ICsxNiw5IEBACiAJICAgZmlsZTovL3V1aWRfbWQ1LmM7YmVnaW5saW5lPTE7ZW5kbGluZT0yODttZDU9OWMxZjRiMjIxODU0NmRlYWUyNGM5MWJlMWRjZjAwZGQiCiAKIFBSID0gInIyIgorVVBTVFJFQU1fQ0hFQ0tfVVJJID0gIiR7REVCSUFOX01JUlJPUn0vbWFpbi9vL29zc3AtdXVpZC8iCiAKLVNSQ19VUkkgPSAiJHtERUJJQU5fTUlSUk9SfS9tYWluL28vJHtCUE59LyR7QlBOfV8ke1BWfS5vcmlnLnRhci5neiBcCitTUkNfVVJJID0gImh0dHA6Ly9zbmFwc2hvdC5kZWJpYW4ub3JnL2FyY2hpdmUvZGViaWFuLzIwMTYwNzI4VDA0MzQ0M1ovcG9vbC9tYWluL28vJHtCUE59LyR7QlBOfV8ke1BWfS5vcmlnLnRhci5neiBcCiAJICAgZmlsZTovLzAwMDEtQ2hhbmdlLWxpYnJhcnktbmFtZS5wYXRjaCBcCiAJICAgZmlsZTovLzAwMDItdXVpZC1wcmVzZXJ2ZS1tLW9wdGlvbi1zdGF0dXMtaW4tdi1vcHRpb24taGFuZGxpbmcucGF0Y2ggXAogCSAgIGZpbGU6Ly8wMDAzLUZpeC13aGF0aXMtZW50cmllcy5wYXRjaCBcCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3BhY2thZ2Vncm91cHMvcGFja2FnZWdyb3VwLWNvcmUtZGV2aWNlLWRldmVsLmJiIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9wYWNrYWdlZ3JvdXBzL3BhY2thZ2Vncm91cC1jb3JlLWRldmljZS1kZXZlbC5iYgppbmRleCBlODMxODYwLi5lZGVlNDc0IDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3BhY2thZ2Vncm91cHMvcGFja2FnZWdyb3VwLWNvcmUtZGV2aWNlLWRldmVsLmJiCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcGFja2FnZWdyb3Vwcy9wYWNrYWdlZ3JvdXAtY29yZS1kZXZpY2UtZGV2ZWwuYmIKQEAgLTEsNSArMSw0IEBACiBTVU1NQVJZID0gIlByb3ZpZGVzIGEgc21hbGwgc2V0IG9mIHRvb2xzIGZvciBkZXZlbG9wbWVudCBvbiB0aGUgZGV2aWNlIgotTElDRU5TRSA9ICJNSVQiCiAKIFBSID0gInIxIgogCkBAIC0xMSw4ICsxMCw3IEBACiAKIFJERVBFTkRTXyR7UE59ID0gIlwKICAgICBkaXN0Y2MtY29uZmlnIFwKLSAgICBvcHJvZmlsZXVpLXNlcnZlciBcCiAgICAgbmZzLWV4cG9ydC1yb290IFwKICAgICBiYXNoIFwKKyAgICBiaW51dGlscy1zeW1saW5rcyBcCiAgICAgIgotCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3BhdGNoZWxmL3BhdGNoZWxmL0luY3JlYXNlLW1heFNpemUtdG8tNjRNQi5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcGF0Y2hlbGYvcGF0Y2hlbGYvSW5jcmVhc2UtbWF4U2l6ZS10by02NE1CLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ5MDUwYTEKLS0tIC9kZXYvbnVsbAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3BhdGNoZWxmL3BhdGNoZWxmL0luY3JlYXNlLW1heFNpemUtdG8tNjRNQi5wYXRjaApAQCAtMCwwICsxLDQ2IEBACitGcm9tIGUzNjU4NzQwZWMxMDBlNGM4Y2Y4MzI5NTQ2MGIwMzI5NzllMWE5OWEgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBGYWJpbyBCZXJ0b24gPGZhYmlvLmJlcnRvbkBvc3N5c3RlbXMuY29tLmJyPgorRGF0ZTogRnJpLCA5IFNlcCAyMDE2IDE4OjIxOjMyIC0wMzAwCitTdWJqZWN0OiBbUEFUQ0hdIEluY3JlYXNlIG1heFNpemUgdG8gNjRNQgorT3JnYW5pemF0aW9uOiBPLlMuIFN5c3RlbXMgU29mdHdhcmUgTFREQS4KKworRml4IGVycm9yOgorCisvCit8RVJST1I6IHFlbXUtbmF0aXZlLTIuNS4wLXIxIGRvX3BvcHVsYXRlX3N5c3Jvb3Rfc2V0c2NlbmU6ICcoJ3BhdGNoZWxmLXVuaW5hdGl2ZScsCit8Jy0tc2V0LWludGVycHJldGVyJywgJy4uL2J1aWxkL3RtcC9zeXNyb290cy11bmluYXRpdmUveDg2XzY0LWxpbnV4L2xpYi8KK3xsZC1saW51eC14ODYtNjQuc28uMicsICcuLi9idWlsZC90bXAvd29yay94ODZfNjQtbGludXgvcWVtdS1uYXRpdmUvMi41LjAtcjEvCit8c3N0YXRlLWluc3RhbGwtcG9wdWxhdGVfc3lzcm9vdC94ODZfNjQtbGludXgvdXNyL2Jpbi9xZW11LW1pcHM2NCcpJworfGZhaWxlZCB3aXRoIGV4aXQgY29kZSAxIGFuZCB0aGUgZm9sbG93aW5nIG91dHB1dDoKK3x3YXJuaW5nOiB3b3JraW5nIGFyb3VuZCBhIExpbnV4IGtlcm5lbCBidWcgYnkgY3JlYXRpbmcgYSBob2xlIG9mIDM2MDMyNTEyCit8Ynl0ZXMgaW4g4oCYLi4vYnVpbGQvdG1wL3dvcmsveDg2XzY0LWxpbnV4L3FlbXUtbmF0aXZlLzIuNS4wLXIxLworfHNzdGF0ZS1pbnN0YWxsLXBvcHVsYXRlX3N5c3Jvb3QveDg2XzY0LWxpbnV4L3Vzci9iaW4vcWVtdS1taXBzNjTigJkKK3xtYXhpbXVtIGZpbGUgc2l6ZSBleGNlZWRlZAorXAorCitTaW1pbGFyIGlzc3VlIGlzIGRpc2N1c3NlZCBoZXJlOgoraHR0cHM6Ly9naXRodWIuY29tL05peE9TL3BhdGNoZWxmL2lzc3Vlcy80NworCitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW2VtYmVkZGVkIHNwZWNpZmljXQorCitTaWduZWQtb2ZmLWJ5OiBGYWJpbyBCZXJ0b24gPGZhYmlvLmJlcnRvbkBvc3N5c3RlbXMuY29tLmJyPgorLS0tCisgc3JjL3BhdGNoZWxmLmNjIHwgMiArLQorIDEgZmlsZSBjaGFuZ2VkLCAxIGluc2VydGlvbigrKSwgMSBkZWxldGlvbigtKQorCitkaWZmIC0tZ2l0IGEvc3JjL3BhdGNoZWxmLmNjIGIvc3JjL3BhdGNoZWxmLmNjCitpbmRleCBhNTljMTJkLi4wZmQ3MzU1IDEwMDY0NAorLS0tIGEvc3JjL3BhdGNoZWxmLmNjCisrKysgYi9zcmMvcGF0Y2hlbGYuY2MKK0BAIC0yNzksNyArMjc5LDcgQEAgc3RhdGljIHZvaWQgcmVhZEZpbGUoc3RyaW5nIGZpbGVOYW1lKQorICAgICBzdHJ1Y3Qgc3RhdCBzdDsKKyAgICAgaWYgKHN0YXQoZmlsZU5hbWUuY19zdHIoKSwgJnN0KSAhPSAwKSBlcnJvcigic3RhdCIpOworICAgICBmaWxlU2l6ZSA9IHN0LnN0X3NpemU7CistICAgIG1heFNpemUgPSBmaWxlU2l6ZSArIDMyICogMTAyNCAqIDEwMjQ7CisrICAgIG1heFNpemUgPSBmaWxlU2l6ZSArIDY0ICogMTAyNCAqIDEwMjQ7CisgCisgICAgIGNvbnRlbnRzID0gKHVuc2lnbmVkIGNoYXIgKikgbWFsbG9jKGZpbGVTaXplICsgbWF4U2l6ZSk7CisgICAgIGlmICghY29udGVudHMpIGFib3J0KCk7CistLSAKKzIuMS40CisKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcGF0Y2hlbGYvcGF0Y2hlbGYvU2tpcC1lbXB0eS1zZWN0aW9uLWZpeGVzLTY2LnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9wYXRjaGVsZi9wYXRjaGVsZi9Ta2lwLWVtcHR5LXNlY3Rpb24tZml4ZXMtNjYucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWVlOGE1NQotLS0gL2Rldi9udWxsCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcGF0Y2hlbGYvcGF0Y2hlbGYvU2tpcC1lbXB0eS1zZWN0aW9uLWZpeGVzLTY2LnBhdGNoCkBAIC0wLDAgKzEsMzAgQEAKK0Zyb20gNzM1MjZjYjU0NmFlNmIwMGVhNjE2OWU0MGIwMWZiN2I1ZjBkYmI1MCBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEZhYmlvIEJlcnRvbiA8ZmFiaW8uYmVydG9uQG9zc3lzdGVtcy5jb20uYnI+CitEYXRlOiBUaHUsIDI4IEp1bCAyMDE2IDExOjA1OjA2IC0wMzAwCitTdWJqZWN0OiBbUEFUQ0hdIFNraXAgZW1wdHkgc2VjdGlvbiAoZml4ZXMgIzY2KQorT3JnYW5pemF0aW9uOiBPLlMuIFN5c3RlbXMgU29mdHdhcmUgTFREQS4KKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK1NpZ25lZC1vZmYtYnk6IEZhYmlvIEJlcnRvbiA8ZmFiaW8uYmVydG9uQG9zc3lzdGVtcy5jb20uYnI+CistLS0KKyBzcmMvcGF0Y2hlbGYuY2MgfCAzICsrKworIDEgZmlsZSBjaGFuZ2VkLCAzIGluc2VydGlvbnMoKykKKworZGlmZiAtLWdpdCBhL3NyYy9wYXRjaGVsZi5jYyBiL3NyYy9wYXRjaGVsZi5jYworaW5kZXggMTM2MDk4Zi4uMjY3N2EyNiAxMDA2NDQKKy0tLSBhL3NyYy9wYXRjaGVsZi5jYworKysrIGIvc3JjL3BhdGNoZWxmLmNjCitAQCAtNjg0LDYgKzY4NCw5IEBAIHZvaWQgRWxmRmlsZTxFbGZGaWxlUGFyYW1OYW1lcz46OnJld3JpdGVTZWN0aW9uc0V4ZWN1dGFibGUoKQorICAgICBmb3IgKHVuc2lnbmVkIGludCBpID0gMTsgaSA8PSBsYXN0UmVwbGFjZWQ7ICsraSkgeworICAgICAgICAgRWxmX1NoZHIgJiBzaGRyKHNoZHJzW2ldKTsKKyAgICAgICAgIHN0cmluZyBzZWN0aW9uTmFtZSA9IGdldFNlY3Rpb25OYW1lKHNoZHIpOworKyAgICAgICAgaWYgKHNlY3Rpb25OYW1lID09ICIiKSB7CisrICAgICAgICAgICAgY29udGludWU7CisrICAgICAgICB9CisgICAgICAgICBkZWJ1ZygibG9va2luZyBhdCBzZWN0aW9uIGAlcydcbiIsIHNlY3Rpb25OYW1lLmNfc3RyKCkpOworICAgICAgICAgLyogISEhIFdoeSBkbyB3ZSBzdG9wIGFmdGVyIGEgLmR5bnN0ciBzZWN0aW9uPyBJIGNhbid0CisgICAgICAgICAgICByZW1lbWJlciEgKi8KKy0tIAorMi4xLjQKKwpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9wYXRjaGVsZi9wYXRjaGVsZi9oYW5kbGUtcmVhZC1vbmx5LWZpbGVzLnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9wYXRjaGVsZi9wYXRjaGVsZi9oYW5kbGUtcmVhZC1vbmx5LWZpbGVzLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjlmYWZlYzQKLS0tIC9kZXYvbnVsbAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3BhdGNoZWxmL3BhdGNoZWxmL2hhbmRsZS1yZWFkLW9ubHktZmlsZXMucGF0Y2gKQEAgLTAsMCArMSw1MyBAQAorRnJvbSAyYTYwM2FjYjY1OTkzNjk4YzIxZjFjNmViNzY2NGY5M2FkODMwZDUyIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogRmFiaW8gQmVydG9uIDxmYWJpby5iZXJ0b25Ab3NzeXN0ZW1zLmNvbS5icj4KK0RhdGU6IEZyaSwgOSBTZXAgMjAxNiAxNjowMDo0MiAtMDMwMAorU3ViamVjdDogW1BBVENIXSBoYW5kbGUgcmVhZC1vbmx5IGZpbGVzCitPcmdhbml6YXRpb246IE8uUy4gU3lzdGVtcyBTb2Z0d2FyZSBMVERBLgorCitQYXRjaCBmcm9tOgoraHR0cHM6Ly9naXRodWIuY29tL2RhcmVhbHNoaW5qaS9wYXRjaGVsZi9jb21taXQvNDBlNjYzOTJiYzRiOTZlOWI0ZWRhNDk2ODI3ZDI2MzQ4YTUwMzUwOQorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworU2lnbmVkLW9mZi1ieTogRmFiaW8gQmVydG9uIDxmYWJpby5iZXJ0b25Ab3NzeXN0ZW1zLmNvbS5icj4KKy0tLQorIHNyYy9wYXRjaGVsZi5jYyB8IDE2ICsrKysrKysrKysrKysrKy0KKyAxIGZpbGUgY2hhbmdlZCwgMTUgaW5zZXJ0aW9ucygrKSwgMSBkZWxldGlvbigtKQorCitkaWZmIC0tZ2l0IGEvc3JjL3BhdGNoZWxmLmNjIGIvc3JjL3BhdGNoZWxmLmNjCitpbmRleCAxMzYwOThmLi5hZWEzNjBlIDEwMDY0NAorLS0tIGEvc3JjL3BhdGNoZWxmLmNjCisrKysgYi9zcmMvcGF0Y2hlbGYuY2MKK0BAIC0zODgsNyArMzg4LDE3IEBAIHZvaWQgRWxmRmlsZTxFbGZGaWxlUGFyYW1OYW1lcz46OnNvcnRTaGRycygpCisgCisgc3RhdGljIHZvaWQgd3JpdGVGaWxlKHN0cmluZyBmaWxlTmFtZSkKKyB7CistICAgIGludCBmZCA9IG9wZW4oZmlsZU5hbWUuY19zdHIoKSwgT19UUlVOQyB8IE9fV1JPTkxZKTsKKysgICAgc3RydWN0IHN0YXQgc3Q7CisrICAgIGludCBmZDsKKysKKysgICAgaWYgKHN0YXQoZmlsZU5hbWUuY19zdHIoKSwgJnN0KSAhPSAwKQorKyAgICAgICAgZXJyb3IoInN0YXQiKTsKKysKKysgICAgaWYgKGNobW9kKGZpbGVOYW1lLmNfc3RyKCksIDA2MDApICE9IDApCisrICAgICAgICBlcnJvcigiY2htb2QiKTsKKysKKysgICAgZmQgPSBvcGVuKGZpbGVOYW1lLmNfc3RyKCksIE9fVFJVTkMgfCBPX1dST05MWSk7CisrCisgICAgIGlmIChmZCA9PSAtMSkKKyAgICAgICAgIGVycm9yKCJvcGVuIik7CisgCitAQCAtMzk3LDYgKzQwNywxMCBAQCBzdGF0aWMgdm9pZCB3cml0ZUZpbGUoc3RyaW5nIGZpbGVOYW1lKQorIAorICAgICBpZiAoY2xvc2UoZmQpICE9IDApCisgICAgICAgICBlcnJvcigiY2xvc2UiKTsKKysKKysgICAgaWYgKGNobW9kKGZpbGVOYW1lLmNfc3RyKCksIHN0LnN0X21vZGUpICE9IDApCisrICAgICAgICBlcnJvcigiY2htb2QiKTsKKysKKyB9CisgCisgCistLSAKKzIuMS40CisKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcGF0Y2hlbGYvcGF0Y2hlbGYvbWF4c2l6ZS5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcGF0Y2hlbGYvcGF0Y2hlbGYvbWF4c2l6ZS5wYXRjaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggY2MwNGE4OS4uMDAwMDAwMAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3BhdGNoZWxmL3BhdGNoZWxmL21heHNpemUucGF0Y2gKKysrIC9kZXYvbnVsbApAQCAtMSwzMCArMCwwIEBACi1Gcm9tIGY2ODg2YzJjMzNhMWNmODc3MTE2MzkxOWYzZDIwZjYzNDBjMGNlMzggTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCi1Gcm9tOiBFZWxjbyBEb2xzdHJhIDxlZWxjby5kb2xzdHJhQGxvZ2ljYmxveC5jb20+Ci1EYXRlOiBGcmksIDEwIEp1bCAyMDE1IDE4OjEyOjM3ICswMjAwCi1TdWJqZWN0OiBbUEFUQ0hdIFF1aWNrIGZpeCBmb3IgIzQ3Ci0KLWh0dHBzOi8vZ2l0aHViLmNvbS9OaXhPUy9wYXRjaGVsZi9pc3N1ZXMvNDcKLQotQXZvaWQgaXNzdWVzIHdpdGggaG9sZXMgaW4gYmluYXJpZXMgc3VjaCBhcyBxZW11LXBjYyBmcm9tIHFlbXUtbmF0aXZlLgotCi1VcHN0cmVhbS1TdGF0dXM6IFN1Ym1pdHRlZAotUlAKLTIwMTYvMi8zCi0KLS0tLQotIHNyYy9wYXRjaGVsZi5jYyB8IDIgKy0KLSAxIGZpbGUgY2hhbmdlZCwgMSBpbnNlcnRpb24oKyksIDEgZGVsZXRpb24oLSkKLQotZGlmZiAtLWdpdCBhL3NyYy9wYXRjaGVsZi5jYyBiL3NyYy9wYXRjaGVsZi5jYwotaW5kZXggODU2NmVkOS4uZGY3NTU5MyAxMDA2NDQKLS0tLSBhL3NyYy9wYXRjaGVsZi5jYwotKysrIGIvc3JjL3BhdGNoZWxmLmNjCi1AQCAtMjQ4LDcgKzI0OCw3IEBAIHN0YXRpYyB2b2lkIHJlYWRGaWxlKHN0cmluZyBmaWxlTmFtZSwgbW9kZV90ICogZmlsZU1vZGUpCi0gICAgIGlmIChzdGF0KGZpbGVOYW1lLmNfc3RyKCksICZzdCkgIT0gMCkgZXJyb3IoInN0YXQiKTsKLSAgICAgZmlsZVNpemUgPSBzdC5zdF9zaXplOwotICAgICAqZmlsZU1vZGUgPSBzdC5zdF9tb2RlOwotLSAgICBtYXhTaXplID0gZmlsZVNpemUgKyA4ICogMTAyNCAqIDEwMjQ7Ci0rICAgIG1heFNpemUgPSBmaWxlU2l6ZSArIDY0ICogMTAyNCAqIDEwMjQ7Ci0gCi0gICAgIGNvbnRlbnRzID0gKHVuc2lnbmVkIGNoYXIgKikgbWFsbG9jKGZpbGVTaXplICsgbWF4U2l6ZSk7Ci0gICAgIGlmICghY29udGVudHMpIGFib3J0KCk7ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9wYXRjaGVsZi9wYXRjaGVsZl8wLjguYmIgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3BhdGNoZWxmL3BhdGNoZWxmXzAuOC5iYgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODQ4NGE3ZS4uMDAwMDAwMAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3BhdGNoZWxmL3BhdGNoZWxmXzAuOC5iYgorKysgL2Rldi9udWxsCkBAIC0xLDEzICswLDAgQEAKLVNSQ19VUkkgPSAiaHR0cDovL25peG9zLm9yZy9yZWxlYXNlcy8ke0JQTn0vJHtCUE59LSR7UFZ9LyR7QlBOfS0ke1BWfS50YXIuYnoyIFwKLSAgICAgICAgICAgZmlsZTovL21heHNpemUucGF0Y2giCi1MSUNFTlNFID0gIkdQTHYzIgotU1VNTUFSWSA9ICJUb29sIHRvIGFsbG93IGVkaXRpbmcgb2YgUlBBVEggYW5kIGludGVycHJldGVyIGZpZWxkcyBpbiBFTEYgYmluYXJpZXMiCi0KLVNSQ19VUklbbWQ1c3VtXSA9ICI1YjE1MWUzYzgzYjMxZjU5MzFiNGE5ZmMwMTYzNWJmZCIKLVNSQ19VUklbc2hhMjU2c3VtXSA9ICJjOTlmODRkMTI0MzQ3MzQwYzM2NzA3MDg5ZWM4ZjcwNTMwYWJkNTZlNzgyN2M1NGQ1MDZlYjRjYzA5N2ExN2U3IgotCi1MSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT1kMzIyMzliY2I2NzM0NjNhYjg3NGU4MGQ0N2ZhZTUwNCIKLQotaW5oZXJpdCBhdXRvdG9vbHMKLQotQkJDTEFTU0VYVEVORCA9ICJuYXRpdmUgbmF0aXZlc2RrIgpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9wYXRjaGVsZi9wYXRjaGVsZl8wLjkuYmIgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3BhdGNoZWxmL3BhdGNoZWxmXzAuOS5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NGU2NTRiCi0tLSAvZGV2L251bGwKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9wYXRjaGVsZi9wYXRjaGVsZl8wLjkuYmIKQEAgLTAsMCArMSwxNyBAQAorU1JDX1VSSSA9ICJodHRwOi8vbml4b3Mub3JnL3JlbGVhc2VzLyR7QlBOfS8ke0JQTn0tJHtQVn0vJHtCUE59LSR7UFZ9LnRhci5iejIgXAorICAgICAgICAgICBmaWxlOi8vU2tpcC1lbXB0eS1zZWN0aW9uLWZpeGVzLTY2LnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL2hhbmRsZS1yZWFkLW9ubHktZmlsZXMucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vSW5jcmVhc2UtbWF4U2l6ZS10by02NE1CLnBhdGNoIFwKKyIKKworTElDRU5TRSA9ICJHUEx2MyIKK1NVTU1BUlkgPSAiVG9vbCB0byBhbGxvdyBlZGl0aW5nIG9mIFJQQVRIIGFuZCBpbnRlcnByZXRlciBmaWVsZHMgaW4gRUxGIGJpbmFyaWVzIgorCitTUkNfVVJJW21kNXN1bV0gPSAiZDAyNjg3NjI5YzdlMTY5OGE0ODZhOTNhMGQ2MDc5NDciCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiYTBmNjVjMWJhMTQ4ODkwZTlmMmY3ODIzZjRiZWRmN2VjYWQ1NDE3NzcyZjY0Zjk5NDAwNGY1OWEzOTAxNGY4MyIKKworTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9ZDMyMjM5YmNiNjczNDYzYWI4NzRlODBkNDdmYWU1MDQiCisKK2luaGVyaXQgYXV0b3Rvb2xzCisKK0JCQ0xBU1NFWFRFTkQgPSAibmF0aXZlIG5hdGl2ZXNkayIKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcGF4LXV0aWxzL3BheC11dGlsc18xLjEuNS5iYiBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcGF4LXV0aWxzL3BheC11dGlsc18xLjEuNS5iYgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTg4N2MwMy4uMDAwMDAwMAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3BheC11dGlscy9wYXgtdXRpbHNfMS4xLjUuYmIKKysrIC9kZXYvbnVsbApAQCAtMSwzNSArMCwwIEBACi1TVU1NQVJZID0gIlNlY3VyaXR5LWZvY3VzZWQgRUxGIGZpbGVzIGNoZWNraW5nIHRvb2wiCi1ERVNDUklQVElPTiA9ICJUaGlzIGlzIGEgc21hbGwgc2V0IG9mIHZhcmlvdXMgUGFYIGF3YXJlIGFuZCByZWxhdGVkIFwKLXV0aWxpdGllcyBmb3IgRUxGIGJpbmFyaWVzLiBJdCBjYW4gY2hlY2sgRUxGIGJpbmFyeSBmaWxlcyBhbmQgcnVubmluZyBcCi1wcm9jZXNzZXMgZm9yIGlzc3VlcyB0aGF0IG1pZ2h0IGJlIHJlbGV2YW50IHdoZW4gdXNpbmcgRUxGIGJpbmFyaWVzIFwKLWFsb25nIHdpdGggUGFYLCBzdWNoIGFzIG5vbi1QSUMgY29kZSBvciBleGVjdXRhYmxlIHN0YWNrIGFuZCBoZWFwLiIKLUhPTUVQQUdFID0gImh0dHA6Ly93d3cuZ2VudG9vLm9yZy9wcm9qL2VuL2hhcmRlbmVkL3BheC11dGlscy54bWwiCi1MSUNFTlNFID0gIkdQTHYyKyIKLUxJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PWViNzIzYjYxNTM5ZmVlZjAxM2RlNDc2ZTY4YjVjNTBhIgotCi1TUkNfVVJJID0gImh0dHA6Ly9nZW50b28ub3N1b3NsLm9yZy9kaXN0ZmlsZXMvcGF4LXV0aWxzLSR7UFZ9LnRhci54eiBcCi0iCi0KLVNSQ19VUklbbWQ1c3VtXSA9ICJiYzM2MTQzMjJlYWY4OGYxNjdhNjA4YWU4NWQ2YjIwNyIKLVNSQ19VUklbc2hhMjU2c3VtXSA9ICIyOTQ1YjNlNGRmMmUwZGM5NTgwMGJmYmQzZDg4YWIyMjQzYjJlZTRmZjA2NGJiZmM3NTczNGY2ZDlkOTg2YTg5IgotCi1SREVQRU5EU18ke1BOfSArPSAiYmFzaCIKLQotZG9fY29uZmlndXJlX3ByZXBlbmQoKSB7Ci0gICAgdG91Y2ggJHtTfS9ORVdTICR7U30vQVVUSE9SUyAke1N9L0NoYW5nZUxvZyAke1N9L1JFQURNRQotfQotCi1kb19pbnN0YWxsKCkgewotICAgIG9lX3J1bm1ha2UgUFJFRklYPSR7RH0ke3ByZWZpeH0gREVTVERJUj0ke0R9IGluc3RhbGwKLX0KLQotQkJDTEFTU0VYVEVORCA9ICJuYXRpdmUiCi0KLWluaGVyaXQgYXV0b3Rvb2xzIHBrZ2NvbmZpZwotCi1QQUNLQUdFQ09ORklHID8/PSAiJHtAYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsICdsYXJnZWZpbGUnLCAnbGFyZ2VmaWxlJywgJycsIGQpfSBcCi0iCi1QQUNLQUdFQ09ORklHW2xpYmNhcF0gPSAiLS13aXRoLWNhcHMsIC0td2l0aG91dC1jYXBzLCBsaWJjYXAiCi1QQUNLQUdFQ09ORklHW2xpYnNlY2NvbXBdID0gIi0td2l0aC1zZWNjb21wLCAtLXdpdGhvdXQtc2VjY29tcCwgbGlic2VjY29tcCIKLVBBQ0tBR0VDT05GSUdbbGFyZ2VmaWxlXSA9ICItLWVuYWJsZS1sYXJnZWZpbGUsLS1kaXNhYmxlLWxhcmdlZmlsZSwsIgotUEFDS0FHRUNPTkZJR1tweWVsZnRvb2xzXSA9ICItLXdpdGgtcHl0aG9uLCAtLXdpdGhvdXQtcHl0aG9uLCwgcHllbGZ0b29scyIKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcGF4LXV0aWxzL3BheC11dGlsc18xLjEuNi5iYiBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcGF4LXV0aWxzL3BheC11dGlsc18xLjEuNi5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41Y2M1NDYzCi0tLSAvZGV2L251bGwKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9wYXgtdXRpbHMvcGF4LXV0aWxzXzEuMS42LmJiCkBAIC0wLDAgKzEsMzUgQEAKK1NVTU1BUlkgPSAiU2VjdXJpdHktZm9jdXNlZCBFTEYgZmlsZXMgY2hlY2tpbmcgdG9vbCIKK0RFU0NSSVBUSU9OID0gIlRoaXMgaXMgYSBzbWFsbCBzZXQgb2YgdmFyaW91cyBQYVggYXdhcmUgYW5kIHJlbGF0ZWQgXAordXRpbGl0aWVzIGZvciBFTEYgYmluYXJpZXMuIEl0IGNhbiBjaGVjayBFTEYgYmluYXJ5IGZpbGVzIGFuZCBydW5uaW5nIFwKK3Byb2Nlc3NlcyBmb3IgaXNzdWVzIHRoYXQgbWlnaHQgYmUgcmVsZXZhbnQgd2hlbiB1c2luZyBFTEYgYmluYXJpZXMgXAorYWxvbmcgd2l0aCBQYVgsIHN1Y2ggYXMgbm9uLVBJQyBjb2RlIG9yIGV4ZWN1dGFibGUgc3RhY2sgYW5kIGhlYXAuIgorSE9NRVBBR0UgPSAiaHR0cDovL3d3dy5nZW50b28ub3JnL3Byb2ovZW4vaGFyZGVuZWQvcGF4LXV0aWxzLnhtbCIKK0xJQ0VOU0UgPSAiR1BMdjIrIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9ZWI3MjNiNjE1MzlmZWVmMDEzZGU0NzZlNjhiNWM1MGEiCisKK1NSQ19VUkkgPSAiaHR0cDovL2dlbnRvby5vc3Vvc2wub3JnL2Rpc3RmaWxlcy9wYXgtdXRpbHMtJHtQVn0udGFyLnh6IFwKKyIKKworU1JDX1VSSVttZDVzdW1dID0gIjk2ZjU2YTVhMTBlZDUwZjI0NDhjNWNjZWJkMjc3NjRmIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gImY1NDM2YzUxN2JlYTQwZjcwMzVlYzI5YTZmMzQwMzRjNzM5Yjk0M2YyZTNhMDgwZDc2ZGY1ZGZkN2ZkNDFiMTIiCisKK1JERVBFTkRTXyR7UE59ICs9ICJiYXNoIgorCitkb19jb25maWd1cmVfcHJlcGVuZCgpIHsKKyAgICB0b3VjaCAke1N9L05FV1MgJHtTfS9BVVRIT1JTICR7U30vQ2hhbmdlTG9nICR7U30vUkVBRE1FCit9CisKK2RvX2luc3RhbGwoKSB7CisgICAgb2VfcnVubWFrZSBQUkVGSVg9JHtEfSR7cHJlZml4fSBERVNURElSPSR7RH0gaW5zdGFsbAorfQorCitCQkNMQVNTRVhURU5EID0gIm5hdGl2ZSIKKworaW5oZXJpdCBhdXRvdG9vbHMgcGtnY29uZmlnCisKK1BBQ0tBR0VDT05GSUcgPz89ICIke0BiYi51dGlscy5jb250YWlucygnRElTVFJPX0ZFQVRVUkVTJywgJ2xhcmdlZmlsZScsICdsYXJnZWZpbGUnLCAnJywgZCl9IFwKKyIKK1BBQ0tBR0VDT05GSUdbbGliY2FwXSA9ICItLXdpdGgtY2FwcywgLS13aXRob3V0LWNhcHMsIGxpYmNhcCIKK1BBQ0tBR0VDT05GSUdbbGlic2VjY29tcF0gPSAiLS13aXRoLXNlY2NvbXAsIC0td2l0aG91dC1zZWNjb21wLCBsaWJzZWNjb21wIgorUEFDS0FHRUNPTkZJR1tsYXJnZWZpbGVdID0gIi0tZW5hYmxlLWxhcmdlZmlsZSwtLWRpc2FibGUtbGFyZ2VmaWxlLCwiCitQQUNLQUdFQ09ORklHW3B5ZWxmdG9vbHNdID0gIi0td2l0aC1weXRob24sIC0td2l0aG91dC1weXRob24sLCBweWVsZnRvb2xzIgpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9wZXJsL2xpYnhtbC1wYXJzZXItcGVybF8yLjQ0LmJiIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9wZXJsL2xpYnhtbC1wYXJzZXItcGVybF8yLjQ0LmJiCmluZGV4IDk1NjFhNTkuLjNhY2Q4MjYgMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcGVybC9saWJ4bWwtcGFyc2VyLXBlcmxfMi40NC5iYgorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3BlcmwvbGlieG1sLXBhcnNlci1wZXJsXzIuNDQuYmIKQEAgLTMsNyArMyw3IEBACiBMSUNFTlNFID0gIkFydGlzdGljLTEuMCB8IEdQTC0xLjArIgogTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vUkVBRE1FO2JlZ2lubGluZT0yO2VuZGxpbmU9NjttZDU9Yzg3NjdkNzUxNjIyOWYwN2IyNmU0MmQxY2Y4YjUxZjEiCiAKLURFUEVORFMgKz0gImV4cGF0IGV4cGF0LW5hdGl2ZSIKK0RFUEVORFMgKz0gImV4cGF0IgogCiBTUkNfVVJJID0gImh0dHA6Ly93d3cuY3Bhbi5vcmcvbW9kdWxlcy9ieS1tb2R1bGUvWE1ML1hNTC1QYXJzZXItJHtQVn0udGFyLmd6IgogU1JDX1VSSVttZDVzdW1dID0gImFmNDgxM2ZlMzk1MjM2MjQ1MTIwMWNlZDZmYmNlMzc5IgpAQCAtMzIsNCArMzIsMyBAQAogfQogCiBCQkNMQVNTRVhURU5EPSJuYXRpdmUiCi0KZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcGVybC9wZXJsLW5hdGl2ZV81LjIyLjEuYmIgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3BlcmwvcGVybC1uYXRpdmVfNS4yMi4xLmJiCmluZGV4IGVkODIyMmYuLjFjMjE1MjIgMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcGVybC9wZXJsLW5hdGl2ZV81LjIyLjEuYmIKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9wZXJsL3BlcmwtbmF0aXZlXzUuMjIuMS5iYgpAQCAtMTEsNiArMTEsNyBAQAogICAgICAgICAgICBmaWxlOi8vZGViaWFuL2Vycm5vX3Zlci5kaWZmIFwKICAgICAgICAgICAgZmlsZTovL2R5bmFsb2FkZXJoYWNrLnBhdGNoIFwKICAgICAgICAgICAgZmlsZTovL3BlcmwtUGF0aFRvb2xzLWRvbi10LWZpbHRlci1vdXQtYmxpYi1mcm9tLUlOQy5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9wZXJsLXJlbW92ZS1ubS1mcm9tLWxpYnN3YW50ZWQucGF0Y2ggXAogICAgICAgICAgICIKIAogU1JDX1VSSVttZDVzdW1dID0gIjY2NzFlNDgyOWNiYWY5Y2VjYWZhOWE4NGYxNDFiMGEzIgpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9wZXJsL3BlcmwtcHRlc3QuaW5jIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9wZXJsL3BlcmwtcHRlc3QuaW5jCmluZGV4IDk0OGVhN2MuLmQxMzZjNWMgMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcGVybC9wZXJsLXB0ZXN0LmluYworKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3BlcmwvcGVybC1wdGVzdC5pbmMKQEAgLTUsMTAgKzUsMTEgQEAKIAogZG9faW5zdGFsbF9wdGVzdCAoKSB7CiAJbWtkaXIgLXAgJHtEfSR7UFRFU1RfUEFUSH0KKwlzZWQgLWUgInM6XC91c3JcL2xvY2FsOiR7YmluZGlyfTpnIiAtaSBjcGFuL3ZlcnNpb24vdC8qCiAJc2VkIC1lICJzOlwvb3B0OlwvdXNyOiIgLWkgUG9ydGluZy9hZGQtcGFja2FnZS5wbAogCXNlZCAtZSAiczpcL2xvY2FsXC9nbnVcLzpcLzoiIC1pIGhpbnRzL2N4dXguc2gKLQl0YXIgLWNmIC0gKiAtLWV4Y2x1ZGUgXCoubyAtLWV4Y2x1ZGUgbGlicGVybC5zbyAtLWV4Y2x1ZGUgTWFrZWZpbGUgLS1leGNsdWRlIG1ha2VmaWxlIC0tZXhjbHVkZSBob3N0cGVybCBcCi0JCS0tZXhjbHVkZSBtaW5pcGVybCAtLWV4Y2x1ZGUgZ2VuZXJhdGVfdXVkbWFwIC0tZXhjbHVkZSBwYXRjaGVzIHwgKCBjZCAke0R9JHtQVEVTVF9QQVRIfSAmJiB0YXIgLXhmIC0gKQorCXRhciAtYyAtLWV4Y2x1ZGU9XCoubyAtLWV4Y2x1ZGU9bGlicGVybC5zbyAtLWV4Y2x1ZGU9TWFrZWZpbGUgLS1leGNsdWRlPW1ha2VmaWxlIC0tZXhjbHVkZT1ob3N0cGVybCBcCisJCS0tZXhjbHVkZT1taW5pcGVybCAtLWV4Y2x1ZGU9Z2VuZXJhdGVfdXVkbWFwIC0tZXhjbHVkZT1wYXRjaGVzICogfCAoIGNkICR7RH0ke1BURVNUX1BBVEh9ICYmIHRhciAteCApCiAKIAlzZWQgLWkgLWUgInMsJHtEfSwsZyIgXAogCSAgICAgICAtZSAicywtLXN5c3Jvb3Q9JHtTVEFHSU5HX0RJUl9IT1NUfSwsZyIgXApAQCAtMzQsNCArMzUsNCBAQAogICAgICAgICAgICAgJyR7UE59LXB0ZXN0JXMnLCAnJXMnLCByZWN1cnNpdmU9VHJ1ZSwgbWF0Y2hfcGF0aD1UcnVlKQogfQogCi1SREVQRU5EU18ke1BOfS1wdGVzdCArPSAiJHtQTn0tbW9kdWxlcyAke1BOfS1kb2MgJHtQTn0tbWlzYyBzZWQiCitSREVQRU5EU18ke1BOfS1wdGVzdCArPSAiJHtQTn0tbW9kdWxlcyAke1BOfS1kb2MgJHtQTn0tbWlzYyBzZWQgbGlic3NwIgpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9wZXJsL3BlcmwtcmRlcGVuZHNfNS4yMi4xLmluYyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcGVybC9wZXJsLXJkZXBlbmRzXzUuMjIuMS5pbmMKaW5kZXggODMwZWNjZS4uMmM0OTdmZSAxMDA2NDQKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9wZXJsL3BlcmwtcmRlcGVuZHNfNS4yMi4xLmluYworKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3BlcmwvcGVybC1yZGVwZW5kc181LjIyLjEuaW5jCkBAIC0xOCw4ICsxOCw5IEBACiAKICMgU29tZSBhZGRpdGlvbmFsIGRlcGVuZGVuY2llcyB0aGF0IHRoZSBhYm92ZSBkb2Vzbid0IG1hbmFnZSB0byBmaWd1cmUgb3V0CiBSREVQRU5EU18ke1BOfS1tb2R1bGUtZmlsZS1zcGVjICs9ICIke1BOfS1tb2R1bGUtZmlsZS1zcGVjLXVuaXgiCi1ERVBFTkRTXyR7UE59LW1vZHVsZS1tYXRoLWJpZ2ludCArPSAiJHtQTn0tbW9kdWxlLW1hdGgtYmlnaW50LWNhbGMiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtbWF0aC1iaWdpbnQgKz0gIiR7UE59LW1vZHVsZS1tYXRoLWJpZ2ludC1jYWxjIgogUkRFUEVORFNfJHtQTn0tbW9kdWxlLXRocmVhZC1xdWV1ZSArPSAiJHtQTn0tbW9kdWxlLWF0dHJpYnV0ZXMiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtb3ZlcmxvYWQgKz0gIiR7UE59LW1vZHVsZS1vdmVybG9hZGluZyIKIAogCiAjIERlcGVuZHMgbGlzdApkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9wZXJsL3BlcmwvY29uZmlnLnNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9wZXJsL3BlcmwvY29uZmlnLnNoCmluZGV4IDU5ZTAxNmUuLmIyYTdmMmMgMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcGVybC9wZXJsL2NvbmZpZy5zaAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3BlcmwvcGVybC9jb25maWcuc2gKQEAgLTgsNyArOCw3IEBACiAKICMgUGFja2FnZSBuYW1lICAgICAgOiBwZXJsNQogIyBTb3VyY2UgZGlyZWN0b3J5ICA6IC4KLSMgQ29uZmlndXJhdGlvbiB0aW1lOiBUaHUgSnVuIDE4IDA1OjM3OjI3IFVUQyAyMDE1CisjIENvbmZpZ3VyYXRpb24gdGltZTogRnJpIE1heSAgNiAyMDoxMzo0NiBQRFQgMjAxNgogIyBDb25maWd1cmVkIGJ5ICAgICA6IE9wZW4gRW1iZWRkZWQKICMgVGFyZ2V0IHN5c3RlbSAgICAgOiBsaW51eCBxZW11eDg2LTY0IDMuMTkuNS15b2N0by1zdGFuZGFyZCAjMSBzbXAgcHJlZW1wdCB0dWUganVuIDE2IDAwOjI4OjE3IHBkdCAyMDE1IHg4Nl82NCBnbnVsaW51eAogCkBAIC02Niw3ICs2Niw3IEBACiBhcGlfcmV2aXNpb249JzUnCiBhcGlfc3VidmVyc2lvbj0nMCcKIGFwaV92ZXJzaW9uPScyMicKLWFwaV92ZXJzaW9uc3RyaW5nPSc1LjIyLjEnCithcGlfdmVyc2lvbnN0cmluZz0nNS4yMi4wJwogYXI9J2FyJwogYXJjaGxpYj0nQExJQkRJUkAvcGVybC81LjIyLjEvQEFSQ0hALXRocmVhZC1tdWx0aScKIGFyY2hsaWJleHA9J0BTVEFHSU5HRElSQEBMSUJESVJAL3BlcmwvNS4yMi4xL0BBUkNIQC10aHJlYWQtbXVsdGknCkBAIC05Niw3ICs5Niw3IEBACiBjY3ZlcnNpb249JycKIGNmX2J5PSdPcGVuIEVtYmVkZGVkJwogY2ZfZW1haWw9J09wZW4gRW1iZWRkZWRAbG9jYWxob3N0LmxvY2FsZG9tYWluJwotY2ZfdGltZT0nVGh1IEp1biAxOCAwNTozNzoyNyBVVEMgMjAxNScKK2NmX3RpbWU9J0ZyaSBNYXkgIDYgMjA6MTM6NDYgUERUIDIwMTYnCiBjaGFyYml0cz0nOCcKIGNoYXJzaXplPScxJwogY2hncnA9JycKQEAgLTExOTQsNyArMTE5NCw3IEBACiB2ZW5kb3JzY3JpcHQ9J0BVU1JCSU5AJwogdmVuZG9yc2NyaXB0ZXhwPSdAVVNSQklOQCcKIHZlcnNpb249JzUuMjIuMScKLXZlcnNpb25fcGF0Y2hsZXZlbF9zdHJpbmc9J3ZlcnNpb24gMjIgc3VidmVyc2lvbiAwJwordmVyc2lvbl9wYXRjaGxldmVsX3N0cmluZz0ndmVyc2lvbiAyMiBzdWJ2ZXJzaW9uIDEnCiB2ZXJzaW9ub25seT0ndW5kZWYnCiB2aT0nJwogeGxpYnB0aD0nQExJQkRJUkAvMzg2IEBCQVNFTElCRElSQDM4NicKQEAgLTEyMDQsNyArMTIwNCw3IEBACiB6aXA9J3ppcCcKIFBFUkxfUkVWSVNJT049NQogUEVSTF9WRVJTSU9OPTIyCi1QRVJMX1NVQlZFUlNJT049MAorUEVSTF9TVUJWRVJTSU9OPTEKIFBFUkxfQVBJX1JFVklTSU9OPTUKIFBFUkxfQVBJX1ZFUlNJT049MjIKIFBFUkxfQVBJX1NVQlZFUlNJT049MApkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9wZXJsL3BlcmwvZml4X2JhZF9ycGF0aC5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcGVybC9wZXJsL2ZpeF9iYWRfcnBhdGgucGF0Y2gKaW5kZXggNjlhYzQzNC4uNzY1MDEyOCAxMDA2NDQKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9wZXJsL3BlcmwvZml4X2JhZF9ycGF0aC5wYXRjaAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3BlcmwvcGVybC9maXhfYmFkX3JwYXRoLnBhdGNoCkBAIC0xLDUgKzEsNSBAQAogVXBzdHJlYW0tU3RhdHVzOkluYXBwcm9wcmlhdGUgW2VtYmVkZGVkIHNwZWNpZmljXQotU2lnbmVkLU9mZi1CeTogTml0aW4gQSBLYW1ibGUgPG5pdGluLmEua2FtYmxlQGludGVsLmNvbT4KK1NpZ25lZC1vZmYtYnk6IE5pdGluIEEgS2FtYmxlIDxuaXRpbi5hLmthbWJsZUBpbnRlbC5jb20+CiAyMDExLzA3LzAxCiAKIEZpeCB0aGVzZSBQYWNrYWdlIFFBIHdhcm5pbmdzIGJlZm9yZSB0aGV5IGFyZSBjb252ZXJ0ZWQgaW50byBmZXRhbCBlcnJvcnM6CmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3BlcmwvcGVybC9wZXJsLWNvbmZpZ3VyZS5zaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcGVybC9wZXJsL3BlcmwtY29uZmlndXJlLnNoCmluZGV4IGU3MmNlNDkuLjI1ZTdmOGIgMTAwNzU1Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcGVybC9wZXJsL3BlcmwtY29uZmlndXJlLnNoCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcGVybC9wZXJsL3BlcmwtY29uZmlndXJlLnNoCkBAIC0xNSw3ICsxNSw3IEBACiAgICAgICAgIC1EcHJlZml4PS91c3IgXAogICAgICAgICAtRHZlbmRvcnByZWZpeD0vdXNyIFwKICAgICAgICAgLURzaXRlcHJlZml4PS91c3IgXAotICAgICAgICAtRG90aGVybGliZGlycz0vdXNyL2xpYi9wZXJsNS81LjEyLjMgXAorICAgICAgICAtRG90aGVybGliZGlycz0vdXNyL2xpYi9wZXJsNS81LjIyLjEgXAogICAgICAgICAtRHVzZXNocnBsaWIgXAogICAgICAgICAtRHVzZXRocmVhZHMgXAogICAgICAgICAtRHVzZWl0aHJlYWRzIFwKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcGVybC9wZXJsL3BlcmwtZml4LUNWRS0yMDE1LTg2MDcucGF0Y2ggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3BlcmwvcGVybC9wZXJsLWZpeC1DVkUtMjAxNS04NjA3LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdiNGEwMDEKLS0tIC9kZXYvbnVsbAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3BlcmwvcGVybC9wZXJsLWZpeC1DVkUtMjAxNS04NjA3LnBhdGNoCkBAIC0wLDAgKzEsNzQgQEAKK0Zyb20gNjUyYzhkNDg1MmE2OWYxYmI0ZDM4Nzk0NmY5Yjc2MzUwYTFmMGQwZSBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IFRvbnkgQ29vayA8dG9ueUBkZXZlbG9wLWhlbHAuY29tPgorRGF0ZTogVHVlLCAxNSBEZWMgMjAxNSAxMDo1Njo1NCArMTEwMAorU3ViamVjdDogW1BBVENIXSBwZXJsOiBmaXggQ1ZFLTIwMTUtODYwNworCitlbnN1cmUgRmlsZTo6U3BlYzo6Y2Fub25wYXRoKCkgcHJlc2VydmVzIHRhaW50CisKK1ByZXZpb3VzbHkgdGhlIHVuaXggc3BlY2lmaWMgWFMgaW1wbGVtZW50YXRpb24gb2YgY2Fub25wYXRoKCkgd291bGQKK3JldHVybiBhbiB1bnRhaW50ZWQgcGF0aCB3aGVuIHN1cHBsaWVkIGEgdGFpbnRlZCBwYXRoLgorCitGb3IgdGhlIGVtcHR5IHN0cmluZyBjYXNlLCBuZXdTVnB2cygpIGFscmVhZHkgc2V0cyB0YWludCBhcyBuZWVkZWQgb24KK2l0cyByZXN1bHQuCisKK1RoaXMgaXNzdWUgd2FzIGFzc2lnbmVkIENWRS0yMDE1LTg2MDcuICBbcGVybCAjMTI2ODYyXQorCitCYWNrcG9ydCBwYXRjaCBmcm9tIGh0dHA6Ly9wZXJsNS5naXQucGVybC5vcmcvcGVybC5naXQvY29tbWl0ZGlmZi8wYjZmOTMwMzZkZTE3MWMxMmJhOTVkNDE1ZTI2NGQ5Y2Y3ZjRlMWZkCisKK1Vwc3RyZWFtLVN0YXR1czogQmFja3BvcnQKK0NWRTogQ1ZFLTIwMTUtODYwNworU2lnbmVkLW9mZi1ieTogTWluZ2xpIFl1IDxNaW5nbGkuWXVAd2luZHJpdmVyLmNvbT4KKy0tLQorIGRpc3QvUGF0aFRvb2xzL0N3ZC54cyAgICB8ICAxICsKKyBkaXN0L1BhdGhUb29scy90L3RhaW50LnQgfCAxOSArKysrKysrKysrKysrKysrKystCisgMiBmaWxlcyBjaGFuZ2VkLCAxOSBpbnNlcnRpb25zKCspLCAxIGRlbGV0aW9uKC0pCisKK2RpZmYgLS1naXQgYS9kaXN0L1BhdGhUb29scy9Dd2QueHMgYi9kaXN0L1BhdGhUb29scy9Dd2QueHMKK2luZGV4IDlkNGRjZjAuLjNkMDE4ZGMgMTAwNjQ0CistLS0gYS9kaXN0L1BhdGhUb29scy9Dd2QueHMKKysrKyBiL2Rpc3QvUGF0aFRvb2xzL0N3ZC54cworQEAgLTUzNSw2ICs1MzUsNyBAQCBUSFhfdW5peF9jYW5vbnBhdGgocFRIWF8gU1YgKnBhdGgpCisgICAgICpvID0gMDsKKyAgICAgU3ZQT0tfb24ocmV0dmFsKTsKKyAgICAgU3ZDVVJfc2V0KHJldHZhbCwgbyAtIFN2UFZYKHJldHZhbCkpOworKyAgICBTdlRBSU5UKHJldHZhbCk7CisgICAgIHJldHVybiByZXR2YWw7CisgfQorIAorZGlmZiAtLWdpdCBhL2Rpc3QvUGF0aFRvb2xzL3QvdGFpbnQudCBiL2Rpc3QvUGF0aFRvb2xzL3QvdGFpbnQudAoraW5kZXggMzA5YjNlNS4uNDhmOGM1YiAxMDA2NDQKKy0tLSBhL2Rpc3QvUGF0aFRvb2xzL3QvdGFpbnQudAorKysrIGIvZGlzdC9QYXRoVG9vbHMvdC90YWludC50CitAQCAtMTIsNyArMTIsNyBAQCB1c2UgVGVzdDo6TW9yZTsKKyBCRUdJTiB7CisgICAgIHBsYW4oCisgICAgICAgICAke15UQUlOVH0KKy0gICAgICAgID8gKHRlc3RzID0+IDE3KQorKyAgICAgICAgPyAodGVzdHMgPT4gMjEpCisgICAgICAgICA6IChza2lwX2FsbCA9PiAiQSBwZXJsIHdpdGhvdXQgdGFpbnQgc3VwcG9ydCIpCisgICAgICk7CisgfQorQEAgLTM0LDMgKzM0LDIwIEBAIGZvcmVhY2ggbXkgJGZ1bmMgKEBGdW5jdGlvbnMpIHsKKyAKKyAjIFByZXZpb3VzIHZlcnNpb25zIG9mIEN3ZCB0YWludGVkICReTworIGlzICF0YWludGVkKCReTyksIDEsICJcJF5PIHNob3VsZCBub3QgYmUgdGFpbnRlZCI7CisrCisreworKyAgICAjIFtwZXJsICMxMjY4NjJdIGNhbm9ucGF0aCgpIGxvc2VzIHRhaW50CisrICAgIG15ICR0YWludGVkID0gc3Vic3RyKCRFTlZ7UEFUSH0sIDAsIDApOworKyAgICAjIHllcywgZ2V0Y3dkKCkncyByZXN1bHQgc2hvdWxkIGJlIHRhaW50ZWQsIGFuZCBpcyB0ZXN0ZWQgYWJvdmUKKysgICAgIyBidXQgYmUgc3VyZQorKyAgICBvayB0YWludGVkKEZpbGU6OlNwZWMtPmNhbm9ucGF0aCgkdGFpbnRlZCAuIEN3ZDo6Z2V0Y3dkKSksCisrICAgICAgICAiY2Fub25wYXRoKCkga2VlcHMgdGFpbnQgb24gbm9uLWVtcHR5IHN0cmluZyI7CisrICAgIG9rIHRhaW50ZWQoRmlsZTo6U3BlYy0+Y2Fub25wYXRoKCR0YWludGVkKSksCisrICAgICAgICAiY2Fub25wYXRoKCkga2VlcHMgdGFpbnQgb24gZW1wdHkgc3RyaW5nIjsKKysKKysgICAgKEN3ZDo6Z2V0Y3dkKCkgPX4gL14oLiopLyk7CisrICAgIG15ICR1bnRhaW50ZWQgPSAkMTsKKysgICAgb2sgIXRhaW50ZWQoJHVudGFpbnRlZCksICJtYWtlIHN1cmUgb3VyIHVudGFpbnRlZCB2YWx1ZSBpcyB1bnRhaW50ZWQiOworKyAgICBvayAhdGFpbnRlZChGaWxlOjpTcGVjLT5jYW5vbnBhdGgoJHVudGFpbnRlZCkpLAorKyAgICAgICAgImNhbm9ucGF0aCgpIGRvZXNuJ3QgYWRkIHRhaW50IHRvIHVudGFpbnRlZCBzdHJpbmciOworK30KKy0tIAorMi44LjEKKwpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9wZXJsL3BlcmwvcGVybC1maXgtQ1ZFLTIwMTYtMTIzOC5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcGVybC9wZXJsL3BlcmwtZml4LUNWRS0yMDE2LTEyMzgucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzMwZWYxNwotLS0gL2Rldi9udWxsCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcGVybC9wZXJsL3BlcmwtZml4LUNWRS0yMDE2LTEyMzgucGF0Y2gKQEAgLTAsMCArMSwzNTIgQEAKK0Zyb20gOTk4N2JlM2QyNDI4NmQ5NmQ5ZGNjZWMwNDMzMjUzZWU4YWQ4OTRiNCBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IFRvbnkgQ29vayA8dG9ueUBkZXZlbG9wLWhlbHAuY29tPgorRGF0ZTogVHVlLCAyMSBKdW4gMjAxNiAxMDowMjowMiArMTAwMAorU3ViamVjdDogW1BBVENIXSBwZXJsOiBmaXggQ1ZFLTIwMTYtMTIzOAorCisocGVybCAjMTI3ODM0KSByZW1vdmUgLiBmcm9tIHRoZSBlbmQgb2YgQElOQyBpZiBjb21wbGV4IG1vZHVsZXMgYXJlIGxvYWRlZAorCitXaGlsZSBjdXJyZW50bHkgRW5jb2RlIGFuZCBTdG9yYWJsZSBhcmUga25vdyB0byBhdHRlbXB0IHRvIGxvYWQgbW9kdWxlcworbm90IGluY2x1ZGVkIGluIHRoZSBjb3JlLCB1cGRhdGVzIHRvIG90aGVyIG1vZHVsZXMgbWF5IGxlYWQgdG8gdGhvc2UKK2Fsc28gYXR0ZW1wdGluZyB0byBsb2FkIG5ldyBtb2R1bGVzLCBzbyBiZSBzYWZlIGFuZCByZW1vdmUgLiBmb3IgdGhvc2UKK2FzIHdlbGwuCisKK0JhY2twb3J0IHBhdGNoIGZyb20gaHR0cDovL3Blcmw1LmdpdC5wZXJsLm9yZy9wZXJsLmdpdC9jb21taXRkaWZmL2NlZTk2ZDUyYzM5YjFlN2IzNmUxYzYyZDM4YmNkOGQ4NmU5YTQxYWIKKworVXBzdHJlYW0tU3RhdHVzOiBCYWNrcG9ydAorQ1ZFOiBDVkUtMjAxNi0xMjM4CitTaWduZWQtb2ZmLWJ5OiBNaW5nbGkgWXUgPE1pbmdsaS5ZdUB3aW5kcml2ZXIuY29tPgorLS0tCisgY3Bhbi9BcmNoaXZlLVRhci9iaW4vcHRhciAgICAgICAgICAgICAgICAgfCAxICsKKyBjcGFuL0FyY2hpdmUtVGFyL2Jpbi9wdGFyZGlmZiAgICAgICAgICAgICB8IDEgKworIGNwYW4vQXJjaGl2ZS1UYXIvYmluL3B0YXJncmVwICAgICAgICAgICAgIHwgMSArCisgY3Bhbi9DUEFOL3NjcmlwdHMvY3BhbiAgICAgICAgICAgICAgICAgICAgfCAxICsKKyBjcGFuL0RpZ2VzdC1TSEEvc2hhc3VtICAgICAgICAgICAgICAgICAgICB8IDEgKworIGNwYW4vRW5jb2RlL2Jpbi9lbmMyeHMgICAgICAgICAgICAgICAgICAgIHwgMSArCisgY3Bhbi9FbmNvZGUvYmluL2VuY2d1ZXNzICAgICAgICAgICAgICAgICAgfCAxICsKKyBjcGFuL0VuY29kZS9iaW4vcGljb252ICAgICAgICAgICAgICAgICAgICB8IDEgKworIGNwYW4vRW5jb2RlL2Jpbi91Y21saW50ICAgICAgICAgICAgICAgICAgIHwgMSArCisgY3Bhbi9FbmNvZGUvYmluL3VuaWR1bXAgICAgICAgICAgICAgICAgICAgfCAxICsKKyBjcGFuL0V4dFV0aWxzLU1ha2VNYWtlci9iaW4vaW5zdG1vZHNoICAgICB8IDEgKworIGNwYW4vSU8tQ29tcHJlc3MvYmluL3ppcGRldGFpbHMgICAgICAgICAgIHwgMSArCisgY3Bhbi9KU09OLVBQL2Jpbi9qc29uX3BwICAgICAgICAgICAgICAgICAgfCAxICsKKyBjcGFuL1Rlc3QtSGFybmVzcy9iaW4vcHJvdmUgICAgICAgICAgICAgICB8IDEgKworIGRpc3QvRXh0VXRpbHMtUGFyc2VYUy9saWIvRXh0VXRpbHMveHN1YnBwIHwgMSArCisgZGlzdC9Nb2R1bGUtQ29yZUxpc3QvY29yZWxpc3QgICAgICAgICAgICAgfCAxICsKKyBleHQvUG9kLUh0bWwvYmluL3BvZDJodG1sICAgICAgICAgICAgICAgICB8IDEgKworIHV0aWxzL2MycGguUEwgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgMSArCisgdXRpbHMvaDJwaC5QTCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAyICsrCisgdXRpbHMvaDJ4cy5QTCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAyICsrCisgdXRpbHMvbGlibmV0Y2ZnLlBMICAgICAgICAgICAgICAgICAgICAgICAgfCAxICsKKyB1dGlscy9wZXJsYnVnLlBMICAgICAgICAgICAgICAgICAgICAgICAgICB8IDEgKworIHV0aWxzL3Blcmxkb2MuUEwgICAgICAgICAgICAgICAgICAgICAgICAgIHwgNSArKysrLQorIHV0aWxzL3BlcmxpdnAuUEwgICAgICAgICAgICAgICAgICAgICAgICAgIHwgMiArKworIHV0aWxzL3NwbGFpbi5QTCAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgNiArKysrKysKKyAyNSBmaWxlcyBjaGFuZ2VkLCAzNiBpbnNlcnRpb25zKCspLCAxIGRlbGV0aW9uKC0pCisKK2RpZmYgLS1naXQgYS9jcGFuL0FyY2hpdmUtVGFyL2Jpbi9wdGFyIGIvY3Bhbi9BcmNoaXZlLVRhci9iaW4vcHRhcgoraW5kZXggMGVhZmZhNy4uOWRjNjQwMiAxMDA2NDQKKy0tLSBhL2NwYW4vQXJjaGl2ZS1UYXIvYmluL3B0YXIKKysrKyBiL2NwYW4vQXJjaGl2ZS1UYXIvYmluL3B0YXIKK0BAIC0xLDYgKzEsNyBAQAorICMhL3Vzci9iaW4vcGVybAorIHVzZSBzdHJpY3Q7CisgCisrQkVHSU4geyBwb3AgQElOQyBpZiAkSU5DWy0xXSBlcSAnLicgfQorIHVzZSBGaWxlOjpGaW5kOworIHVzZSBHZXRvcHQ6OlN0ZDsKKyB1c2UgQXJjaGl2ZTo6VGFyOworZGlmZiAtLWdpdCBhL2NwYW4vQXJjaGl2ZS1UYXIvYmluL3B0YXJkaWZmIGIvY3Bhbi9BcmNoaXZlLVRhci9iaW4vcHRhcmRpZmYKK2luZGV4IDY2YmQ4NTkuLjQ2NjhmYTYgMTAwNjQ0CistLS0gYS9jcGFuL0FyY2hpdmUtVGFyL2Jpbi9wdGFyZGlmZgorKysrIGIvY3Bhbi9BcmNoaXZlLVRhci9iaW4vcHRhcmRpZmYKK0BAIC0xLDUgKzEsNiBAQAorICMhL3Vzci9iaW4vcGVybAorIAorK0JFR0lOIHsgcG9wIEBJTkMgaWYgJElOQ1stMV0gZXEgJy4nIH0KKyB1c2Ugc3RyaWN0OworIHVzZSBBcmNoaXZlOjpUYXI7CisgdXNlIEdldG9wdDo6U3RkOworZGlmZiAtLWdpdCBhL2NwYW4vQXJjaGl2ZS1UYXIvYmluL3B0YXJncmVwIGIvY3Bhbi9BcmNoaXZlLVRhci9iaW4vcHRhcmdyZXAKK2luZGV4IDFhMzIwZjEuLjhkYzZiNGYgMTAwNjQ0CistLS0gYS9jcGFuL0FyY2hpdmUtVGFyL2Jpbi9wdGFyZ3JlcAorKysrIGIvY3Bhbi9BcmNoaXZlLVRhci9iaW4vcHRhcmdyZXAKK0BAIC00LDYgKzQsNyBAQAorICMgYXJjaGl2ZS4gIFNlZSAncHRhcmdyZXAgLS1oZWxwJyBmb3IgbW9yZSBkb2N1bWVudGF0aW9uLgorICMKKyAKKytCRUdJTiB7IHBvcCBASU5DIGlmICRJTkNbLTFdIGVxICcuJyB9CisgdXNlIHN0cmljdDsKKyB1c2Ugd2FybmluZ3M7CisgCitkaWZmIC0tZ2l0IGEvY3Bhbi9DUEFOL3NjcmlwdHMvY3BhbiBiL2NwYW4vQ1BBTi9zY3JpcHRzL2NwYW4KK2luZGV4IDVmNDMyMGUuLmNjYmE0N2UgMTAwNjQ0CistLS0gYS9jcGFuL0NQQU4vc2NyaXB0cy9jcGFuCisrKysgYi9jcGFuL0NQQU4vc2NyaXB0cy9jcGFuCitAQCAtMSw1ICsxLDYgQEAKKyAjIS91c3IvbG9jYWwvYmluL3BlcmwKKyAKKytCRUdJTiB7IHBvcCBASU5DIGlmICRJTkNbLTFdIGVxICcuJyB9CisgdXNlIHN0cmljdDsKKyB1c2UgdmFycyBxdygkVkVSU0lPTik7CisgCitkaWZmIC0tZ2l0IGEvY3Bhbi9EaWdlc3QtU0hBL3NoYXN1bSBiL2NwYW4vRGlnZXN0LVNIQS9zaGFzdW0KK2luZGV4IDE0ZGRkNjAuLjYyYTJiMGUgMTAwNjQ0CistLS0gYS9jcGFuL0RpZ2VzdC1TSEEvc2hhc3VtCisrKysgYi9jcGFuL0RpZ2VzdC1TSEEvc2hhc3VtCitAQCAtMTMsNiArMTMsNyBAQAorIAkjIyAiLTAiIG9wdGlvbiBmb3IgcmVhZGluZyBiaXQgc3RyaW5ncywgYW5kCisgCSMjICItcCIgb3B0aW9uIGZvciBwb3J0YWJsZSBkaWdlc3RzICh0byBiZSBkZXByZWNhdGVkKS4KKyAKKytCRUdJTiB7IHBvcCBASU5DIGlmICRJTkNbLTFdIGVxICcuJyB9CisgdXNlIHN0cmljdDsKKyB1c2Ugd2FybmluZ3M7CisgdXNlIEZjbnRsOworZGlmZiAtLWdpdCBhL2NwYW4vRW5jb2RlL2Jpbi9lbmMyeHMgYi9jcGFuL0VuY29kZS9iaW4vZW5jMnhzCitpbmRleCA0ZDY0ZTM4Li40NzNhMTVjIDEwMDY0NAorLS0tIGEvY3Bhbi9FbmNvZGUvYmluL2VuYzJ4cworKysrIGIvY3Bhbi9FbmNvZGUvYmluL2VuYzJ4cworQEAgLTQsNiArNCw3IEBAIEJFR0lOIHsKKyAgICAgIyB3aXRoICRFTlZ7UEVSTF9DT1JFfSBzZXQKKyAgICAgIyBJbiBjYXNlIHdlIG5lZWQgaXQgaW4gZnV0dXJlLi4uCisgICAgIHJlcXVpcmUgQ29uZmlnOyBpbXBvcnQgQ29uZmlnOworKyAgICBwb3AgQElOQyBpZiAkSU5DWy0xXSBlcSAnLic7CisgfQorIHVzZSBzdHJpY3Q7CisgdXNlIHdhcm5pbmdzOworZGlmZiAtLWdpdCBhL2NwYW4vRW5jb2RlL2Jpbi9lbmNndWVzcyBiL2NwYW4vRW5jb2RlL2Jpbi9lbmNndWVzcworaW5kZXggNWQ3YWM4MC4uMGJlNWM3YyAxMDA2NDQKKy0tLSBhL2NwYW4vRW5jb2RlL2Jpbi9lbmNndWVzcworKysrIGIvY3Bhbi9FbmNvZGUvYmluL2VuY2d1ZXNzCitAQCAtMSw1ICsxLDYgQEAKKyAjIS4vcGVybAorIHVzZSA1LjAwODAwMTsKKytCRUdJTiB7IHBvcCBASU5DIGlmICRJTkNbLTFdIGVxICcuJyB9CisgdXNlIHN0cmljdDsKKyB1c2Ugd2FybmluZ3M7CisgdXNlIEVuY29kZTsKK2RpZmYgLS1naXQgYS9jcGFuL0VuY29kZS9iaW4vcGljb252IGIvY3Bhbi9FbmNvZGUvYmluL3BpY29udgoraW5kZXggYzFkYWQ5ZS4uNjBiMmE1OSAxMDA2NDQKKy0tLSBhL2NwYW4vRW5jb2RlL2Jpbi9waWNvbnYKKysrKyBiL2NwYW4vRW5jb2RlL2Jpbi9waWNvbnYKK0BAIC0xLDYgKzEsNyBAQAorICMhLi9wZXJsCisgIyAkSWQ6IHBpY29udix2IDIuNyAyMDE0LzA1LzMxIDA5OjQ4OjQ4IGRhbmtvZ2FpIEV4cCAkCisgIworK0JFR0lOIHsgcG9wIEBJTkMgaWYgJElOQ1stMV0gZXEgJy4nIH0KKyB1c2UgNS44LjA7CisgdXNlIHN0cmljdDsKKyB1c2UgRW5jb2RlIDsKK2RpZmYgLS1naXQgYS9jcGFuL0VuY29kZS9iaW4vdWNtbGludCBiL2NwYW4vRW5jb2RlL2Jpbi91Y21saW50CitpbmRleCA2MjIzNzZkLi4yNWUwZDY3IDEwMDY0NAorLS0tIGEvY3Bhbi9FbmNvZGUvYmluL3VjbWxpbnQKKysrKyBiL2NwYW4vRW5jb2RlL2Jpbi91Y21saW50CitAQCAtMyw2ICszLDcgQEAKKyAjICRJZDogdWNtbGludCx2IDIuMiAyMDA4LzAzLzEyIDA5OjUxOjExIGRhbmtvZ2FpIEV4cCAkCisgIworIAorK0JFR0lOIHsgcG9wIEBJTkMgaWYgJElOQ1stMV0gZXEgJy4nIH0KKyB1c2Ugc3RyaWN0OworIG91ciAgJFZFUlNJT04gPSBkbyB7IG15IEByID0gKHEkUmV2aXNpb246IDIuMiAkID1+IC9cZCsvZyk7IHNwcmludGYgIiVkLiIuIiUwMmQiIHggJCNyLCBAciB9OworIAorZGlmZiAtLWdpdCBhL2NwYW4vRW5jb2RlL2Jpbi91bmlkdW1wIGIvY3Bhbi9FbmNvZGUvYmluL3VuaWR1bXAKK2luZGV4IGFlMGRhMzAuLmYxOTA4MjcgMTAwNjQ0CistLS0gYS9jcGFuL0VuY29kZS9iaW4vdW5pZHVtcAorKysrIGIvY3Bhbi9FbmNvZGUvYmluL3VuaWR1bXAKK0BAIC0xLDUgKzEsNiBAQAorICMhLi9wZXJsCisgCisrQkVHSU4geyBwb3AgQElOQyBpZiAkSU5DWy0xXSBlcSAnLicgfQorIHVzZSBzdHJpY3Q7CisgdXNlIEVuY29kZTsKKyB1c2UgR2V0b3B0OjpTdGQ7CitkaWZmIC0tZ2l0IGEvY3Bhbi9FeHRVdGlscy1NYWtlTWFrZXIvYmluL2luc3Rtb2RzaCBiL2NwYW4vRXh0VXRpbHMtTWFrZU1ha2VyL2Jpbi9pbnN0bW9kc2gKK2luZGV4IGU1NTE0MzQuLmIzYjEwOWYgMTAwNjQ0CistLS0gYS9jcGFuL0V4dFV0aWxzLU1ha2VNYWtlci9iaW4vaW5zdG1vZHNoCisrKysgYi9jcGFuL0V4dFV0aWxzLU1ha2VNYWtlci9iaW4vaW5zdG1vZHNoCitAQCAtMSw1ICsxLDYgQEAKKyAjIS91c3IvYmluL3BlcmwgLXcKKyAKKytCRUdJTiB7IHBvcCBASU5DIGlmICRJTkNbLTFdIGVxICcuJyB9CisgdXNlIHN0cmljdDsKKyB1c2UgSU86OkZpbGU7CisgdXNlIEV4dFV0aWxzOjpQYWNrbGlzdDsKK2RpZmYgLS1naXQgYS9jcGFuL0lPLUNvbXByZXNzL2Jpbi96aXBkZXRhaWxzIGIvY3Bhbi9JTy1Db21wcmVzcy9iaW4vemlwZGV0YWlscworaW5kZXggMDI0OTg1MC4uMWI5YzcwYSAxMDA2NDQKKy0tLSBhL2NwYW4vSU8tQ29tcHJlc3MvYmluL3ppcGRldGFpbHMKKysrKyBiL2NwYW4vSU8tQ29tcHJlc3MvYmluL3ppcGRldGFpbHMKK0BAIC01LDYgKzUsNyBAQAorICMgRGlzcGxheSBpbmZvIG9uIHRoZSBjb250ZW50cyBvZiBhIFppcCBmaWxlCisgIworIAorK0JFR0lOIHsgcG9wIEBJTkMgaWYgJElOQ1stMV0gZXEgJy4nIH0KKyB1c2Ugc3RyaWN0OworIHVzZSB3YXJuaW5ncyA7CisgCitkaWZmIC0tZ2l0IGEvY3Bhbi9KU09OLVBQL2Jpbi9qc29uX3BwIGIvY3Bhbi9KU09OLVBQL2Jpbi9qc29uX3BwCitpbmRleCBkZjlkMjQzLi44OTZjZDJmIDEwMDY0NAorLS0tIGEvY3Bhbi9KU09OLVBQL2Jpbi9qc29uX3BwCisrKysgYi9jcGFuL0pTT04tUFAvYmluL2pzb25fcHAKK0BAIC0xLDUgKzEsNiBAQAorICMhL3Vzci9iaW4vcGVybAorIAorK0JFR0lOIHsgcG9wIEBJTkMgaWYgJElOQ1stMV0gZXEgJy4nIH0KKyB1c2Ugc3RyaWN0OworIHVzZSBHZXRvcHQ6Okxvbmc7CisgCitkaWZmIC0tZ2l0IGEvY3Bhbi9UZXN0LUhhcm5lc3MvYmluL3Byb3ZlIGIvY3Bhbi9UZXN0LUhhcm5lc3MvYmluL3Byb3ZlCitpbmRleCA2NjM3Y2M0Li5kNzFiMjM4IDEwMDY0NAorLS0tIGEvY3Bhbi9UZXN0LUhhcm5lc3MvYmluL3Byb3ZlCisrKysgYi9jcGFuL1Rlc3QtSGFybmVzcy9iaW4vcHJvdmUKK0BAIC0xLDUgKzEsNiBAQAorICMhL3Vzci9iaW4vcGVybCAtdworIAorK0JFR0lOIHsgcG9wIEBJTkMgaWYgJElOQ1stMV0gZXEgJy4nIH0KKyB1c2Ugc3RyaWN0OworIHVzZSB3YXJuaW5nczsKKyB1c2UgQXBwOjpQcm92ZTsKK2RpZmYgLS1naXQgYS9kaXN0L0V4dFV0aWxzLVBhcnNlWFMvbGliL0V4dFV0aWxzL3hzdWJwcCBiL2Rpc3QvRXh0VXRpbHMtUGFyc2VYUy9saWIvRXh0VXRpbHMveHN1YnBwCitpbmRleCBlMmFjNzFhLi5kNTk2Y2RmIDEwMDY0NAorLS0tIGEvZGlzdC9FeHRVdGlscy1QYXJzZVhTL2xpYi9FeHRVdGlscy94c3VicHAKKysrKyBiL2Rpc3QvRXh0VXRpbHMtUGFyc2VYUy9saWIvRXh0VXRpbHMveHN1YnBwCitAQCAtMSw1ICsxLDYgQEAKKyAjIXBlcmwKKyB1c2UgNS4wMDY7CisrQkVHSU4geyBwb3AgQElOQyBpZiAkSU5DWy0xXSBlcSAnLicgfQorIHVzZSBzdHJpY3Q7CisgZXZhbCB7CisgICByZXF1aXJlIEV4dFV0aWxzOjpQYXJzZVhTOworZGlmZiAtLWdpdCBhL2Rpc3QvTW9kdWxlLUNvcmVMaXN0L2NvcmVsaXN0IGIvZGlzdC9Nb2R1bGUtQ29yZUxpc3QvY29yZWxpc3QKK2luZGV4IGFhNGE5NDUuLmJiZTYxY2MgMTAwNjQ0CistLS0gYS9kaXN0L01vZHVsZS1Db3JlTGlzdC9jb3JlbGlzdAorKysrIGIvZGlzdC9Nb2R1bGUtQ29yZUxpc3QvY29yZWxpc3QKK0BAIC0xMzAsNiArMTMwLDcgQEAgcmVxdWVzdGVkIHBlcmwgdmVyc2lvbnMuCisgCisgPWN1dAorIAorK0JFR0lOIHsgcG9wIEBJTkMgaWYgJElOQ1stMV0gZXEgJy4nIH0KKyB1c2UgTW9kdWxlOjpDb3JlTGlzdDsKKyB1c2UgR2V0b3B0OjpMb25nIHF3KDpjb25maWcgbm9faWdub3JlX2Nhc2UpOworIHVzZSBQb2Q6OlVzYWdlOworZGlmZiAtLWdpdCBhL2V4dC9Qb2QtSHRtbC9iaW4vcG9kMmh0bWwgYi9leHQvUG9kLUh0bWwvYmluL3BvZDJodG1sCitpbmRleCBiMDIyODU5Li43ZDFkMjMyIDEwMDY0NAorLS0tIGEvZXh0L1BvZC1IdG1sL2Jpbi9wb2QyaHRtbAorKysrIGIvZXh0L1BvZC1IdG1sL2Jpbi9wb2QyaHRtbAorQEAgLTIxNiw2ICsyMTYsNyBAQCBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIEFydGlzdGljIExpY2Vuc2UuCisgCisgPWN1dAorIAorK0JFR0lOIHsgcG9wIEBJTkMgaWYgJElOQ1stMV0gZXEgJy4nIH0KKyB1c2UgUG9kOjpIdG1sOworIAorIHBvZDJodG1sIEBBUkdWOworZGlmZiAtLWdpdCBhL3V0aWxzL2MycGguUEwgYi91dGlscy9jMnBoLlBMCitpbmRleCAxMzM4OWVjLi5jZWYwYjVjIDEwMDY0NAorLS0tIGEvdXRpbHMvYzJwaC5QTAorKysrIGIvdXRpbHMvYzJwaC5QTAorQEAgLTI4MCw2ICsyODAsNyBAQCBBbnl3YXksIGhlcmUgaXQgaXMuICBTaG91bGQgcnVuIG9uIHBlcmwgdjQgb3IgZ3JlYXRlci4gIE1heWJlIGxlc3MuCisgCisgJFJDU0lEID0gJyRJZDogYzJwaCx2IDEuNyA5NS8xMC8yOCAxMDo0MTo0NyB0Y2hyaXN0IEV4cCBMb2NrZXI6IHRjaHJpc3QgJCc7CisgCisrQkVHSU4geyBwb3AgQElOQyBpZiAkSU5DWy0xXSBlcSAnLicgfQorIHVzZSBGaWxlOjpUZW1wOworIAorICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKK2RpZmYgLS1naXQgYS91dGlscy9oMnBoLlBMIGIvdXRpbHMvaDJwaC5QTAoraW5kZXggNTVjMWY3Mi4uMzAwYjc1NiAxMDA2NDQKKy0tLSBhL3V0aWxzL2gycGguUEwKKysrKyBiL3V0aWxzL2gycGguUEwKK0BAIC0zNiw2ICszNiw4IEBAICRDb25maWd7c3RhcnRwZXJsfQorIAorIHByaW50IE9VVCA8PCchTk8hU1VCUyEnOworIAorK0JFR0lOIHsgcG9wIEBJTkMgaWYgJElOQ1stMV0gZXEgJy4nIH0KKysKKyB1c2Ugc3RyaWN0OworIAorIHVzZSBDb25maWc7CitkaWZmIC0tZ2l0IGEvdXRpbHMvaDJ4cy5QTCBiL3V0aWxzL2gyeHMuUEwKK2luZGV4IDI2OGY2ODAuLmY5NWVlMGMgMTAwNjQ0CistLS0gYS91dGlscy9oMnhzLlBMCisrKysgYi91dGlscy9oMnhzLlBMCitAQCAtMzUsNiArMzUsOCBAQCAkQ29uZmlne3N0YXJ0cGVybH0KKyAKKyBwcmludCBPVVQgPDwnIU5PIVNVQlMhJzsKKyAKKytCRUdJTiB7IHBvcCBASU5DIGlmICRJTkNbLTFdIGVxICcuJyB9CisrCisgdXNlIHdhcm5pbmdzOworIAorID1oZWFkMSBOQU1FCitkaWZmIC0tZ2l0IGEvdXRpbHMvbGlibmV0Y2ZnLlBMIGIvdXRpbHMvbGlibmV0Y2ZnLlBMCitpbmRleCA1OWEyZGU4Li4yNmQyZjk5IDEwMDY0NAorLS0tIGEvdXRpbHMvbGlibmV0Y2ZnLlBMCisrKysgYi91dGlscy9saWJuZXRjZmcuUEwKK0BAIC05Nyw2ICs5Nyw3IEBAIEphcmtrbyBIaWV0YW5pZW1pLCBjb252ZXJzaW9uIGludG8gbGlibmV0Y2ZnIGZvciBpbmNsdXNpb24gaW50byBQZXJsIDUuOC4KKyAKKyAjICRJZDogQ29uZmlndXJlLHYgMS44IDE5OTcvMDMvMDQgMDk6MjI6MzIgZ2JhcnIgRXhwICQKKyAKKytCRUdJTiB7IHBvcCBASU5DIGlmICRJTkNbLTFdIGVxICcuJyB9CisgdXNlIHN0cmljdDsKKyB1c2UgSU86OkZpbGU7CisgdXNlIEdldG9wdDo6U3RkOworZGlmZiAtLWdpdCBhL3V0aWxzL3BlcmxidWcuUEwgYi91dGlscy9wZXJsYnVnLlBMCitpbmRleCA4ODU3ODVhLi5hZThjMzQzIDEwMDY0NAorLS0tIGEvdXRpbHMvcGVybGJ1Zy5QTAorKysrIGIvdXRpbHMvcGVybGJ1Zy5QTAorQEAgLTU3LDYgKzU3LDcgQEAgcHJpbnQgT1VUIDw8JyFOTyFTVUJTISc7CisgbXkgQHBhdGNoZXMgPSBDb25maWc6OmxvY2FsX3BhdGNoZXMoKTsKKyBteSAkcGF0Y2hfdGFncyA9IGpvaW4gIiIsIG1hcCAvKFxTKykvID8gIiskMSAiIDogKCksIEBwYXRjaGVzOworIAorK0JFR0lOIHsgcG9wIEBJTkMgaWYgJElOQ1stMV0gZXEgJy4nIH0KKyB1c2Ugd2FybmluZ3M7CisgdXNlIHN0cmljdDsKKyB1c2UgQ29uZmlnOworZGlmZiAtLWdpdCBhL3V0aWxzL3Blcmxkb2MuUEwgYi91dGlscy9wZXJsZG9jLlBMCitpbmRleCBlMjAxZGU5Li5jZDYwYmQ0IDEwMDY0NAorLS0tIGEvdXRpbHMvcGVybGRvYy5QTAorKysrIGIvdXRpbHMvcGVybGRvYy5QTAorQEAgLTQ0LDcgKzQ0LDEwIEBAICRDb25maWd7c3RhcnRwZXJsfQorICMgVGhpcyAiJGZpbGUiIGZpbGUgd2FzIGdlbmVyYXRlZCBieSAiJDAiCisgCisgcmVxdWlyZSA1OworLUJFR0lOIHsgXCReVyA9IDEgaWYgXCRFTlZ7J1BFUkxET0NERUJVRyd9IH0KKytCRUdJTiB7CisrICAgIFwkXlcgPSAxIGlmIFwkRU5WeydQRVJMRE9DREVCVUcnfTsKKysgICAgcG9wIFxASU5DIGlmIFwkSU5DWy0xXSBlcSAnLic7CisrfQorIHVzZSBQb2Q6OlBlcmxkb2M7CisgZXhpdCggUG9kOjpQZXJsZG9jLT5ydW4oKSApOworIAorZGlmZiAtLWdpdCBhL3V0aWxzL3BlcmxpdnAuUEwgYi91dGlscy9wZXJsaXZwLlBMCitpbmRleCBjYzQ5Zjk2Li42OTZhNDRlIDEwMDY0NAorLS0tIGEvdXRpbHMvcGVybGl2cC5QTAorKysrIGIvdXRpbHMvcGVybGl2cC5QTAorQEAgLTM5LDYgKzM5LDggQEAgcHJpbnQgT1VUICJcbiMgcGVybGl2cCAkXlZcbiI7CisgCisgcHJpbnQgT1VUIDw8JyFOTyFTVUJTISc7CisgCisrQkVHSU4geyBwb3AgQElOQyBpZiAkSU5DWy0xXSBlcSAnLicgfQorKworIHN1YiB1c2FnZSB7CisgICAgIHdhcm4gIkBfXG4iIGlmIEBfOworICAgICBwcmludCA8PCAiICAgIEVPVVNBR0UiOworZGlmZiAtLWdpdCBhL3V0aWxzL3NwbGFpbi5QTCBiL3V0aWxzL3NwbGFpbi5QTAoraW5kZXggOWM3MGI2MS4uY2FlODRhMCAxMDA2NDQKKy0tLSBhL3V0aWxzL3NwbGFpbi5QTAorKysrIGIvdXRpbHMvc3BsYWluLlBMCitAQCAtMzgsNiArMzgsMTIgQEAgJENvbmZpZ3tzdGFydHBlcmx9CisgCWlmIFwkcnVubmluZ191bmRlcl9zb21lX3NoZWxsOworICFHUk9LIVRISVMhCisgCisrcHJpbnQgPDwnIU5PIVNVQlMhJzsKKysKKytCRUdJTiB7IHBvcCBASU5DIGlmICRJTkNbLTFdIGVxICcuJyB9CisrCisrIU5PIVNVQlMhCisrCisgd2hpbGUgKDxJTj4pIHsKKyAgICAgcHJpbnQgT1VUIHVubGVzcyAvXnBhY2thZ2UgZGlhZ25vc3RpY3MvOworIH0KKy0tIAorMi44LjEKKwpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9wZXJsL3BlcmwvcGVybC1maXgtQ1ZFLTIwMTYtMjM4MS5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcGVybC9wZXJsL3BlcmwtZml4LUNWRS0yMDE2LTIzODEucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTlmYThkOQotLS0gL2Rldi9udWxsCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcGVybC9wZXJsL3BlcmwtZml4LUNWRS0yMDE2LTIzODEucGF0Y2gKQEAgLTAsMCArMSwxMTQgQEAKK0NWRTogQ1ZFLTIwMTYtMjM4MQorVXBzdHJlYW0tU3RhdHVzOiBCYWNrcG9ydAorCitCYWNrcG9ydCBwYXRjaCB0byBmaXggQ1ZFLTIwMTYtMjM4MSBmcm9tCisKK2h0dHA6Ly9wZXJsNS5naXQucGVybC5vcmcvcGVybC5naXQvY29tbWl0ZGlmZi9hZTM3Yjc5MWE3M2E5ZTc4ZGVkYjg5ZmIyNDI5ZDI2MjhjZjU4MDc2CisKK1NpZ25lZC1vZmYtYnk6IEthaSBLYW5nIDxrYWkua2FuZ0B3aW5kcml2ZXIuY29tPgorLS0tCitGcm9tOiBUb255IENvb2sgPHRvbnlAZGV2ZWxvcC1oZWxwLmNvbT4KK0RhdGU6IFdlZCwgMjcgSmFuIDIwMTYgMDA6NTI6MTUgKzAwMDAgKCsxMTAwKQorU3ViamVjdDogcmVtb3ZlIGR1cGxpY2F0ZSBlbnZpcm9ubWVudCB2YXJpYWJsZXMgZnJvbSBlbnZpcm9uCitYLUdpdC1UYWc6IHY1LjIzLjl+MTcwCitYLUdpdC1Vcmw6IGh0dHA6Ly9wZXJsNS5naXQucGVybC5vcmcvcGVybC5naXQvY29tbWl0ZGlmZl9wbGFpbi9hZTM3Yjc5MWE3M2E5ZTc4ZGVkYjg5ZmIyNDI5ZDI2MjhjZjU4MDc2CisKK3JlbW92ZSBkdXBsaWNhdGUgZW52aXJvbm1lbnQgdmFyaWFibGVzIGZyb20gZW52aXJvbgorCitJZiB3ZSBzZWUgZHVwbGljYXRlIGVudmlyb25tZW50IHZhcmlhYmxlcyB3aGlsZSBpdGVyYXRpbmcgb3ZlcgorZW52aXJvbltdOgorCithKSBtYWtlIHN1cmUgd2UgdXNlIHRoZSBzYW1lIHZhbHVlIGluICVFTlYgdGhhdCBnZXRlbnYoKSByZXR1cm5zLgorCitQcmV2aW91c2x5IG9uIGEgZHVwbGljYXRlLCAlRU5WIHdvdWxkIGhhdmUgdGhlIGxhc3QgZW50cnkgZm9yIHRoZSBuYW1lCitmcm9tIGVudmlyb25bXSwgYnV0IGEgdHlwaWNhbCBnZXRlbnYoKSB3b3VsZCByZXR1cm4gdGhlIGZpcnN0IGVudHJ5LgorCitSYXRoZXIgdGhhbiBhc3N1bWluZyBhbGwgZ2V0ZW52KCkgaW1wbGVtZW50YXRpb25zIHJldHVybiB0aGUgZmlyc3QgZW50cnkKK2V4cGxpY2l0bHkgY2FsbCBnZXRlbnYoKSB0byBlbnN1cmUgdGhleSBhZ3JlZS4KKworYikgcmVtb3ZlIGR1cGxpY2F0ZSBlbnRyaWVzIGZyb20gZW52aXJvbgorCitQcmV2aW91c2x5IGlmIHRoZXJlIHdhcyBhIGR1cGxpY2F0ZSBkZWZpbml0aW9uIGZvciBhIG5hbWUgaW4gZW52aXJvbltdCitzZXR0aW5nIHRoYXQgbmFtZSBpbiAlRU5WIGNvdWxkIHJlc3VsdCBpbiBhbiB1bnNhZmUgdmFsdWUgYmVpbmcgcGFzc2VkCit0byBhIGNoaWxkIHByb2Nlc3MsIHNvIGVuc3VyZSBlbnZpcm9uW10gaGFzIG5vIGR1cGxpY2F0ZXMuCisKK0NWRS0yMDE2LTIzODEKKy0tLQorCitkaWZmIC0tZ2l0IGEvcGVybC5jIGIvcGVybC5jCitpbmRleCA0YTMyNGM2Li41YzcxZmQwIDEwMDY0NAorLS0tIGEvcGVybC5jCisrKysgYi9wZXJsLmMKK0BAIC00MzI5LDIzICs0MzI5LDcwIEBAIFNfaW5pdF9wb3N0ZHVtcF9zeW1ib2xzKHBUSFhfIGludCBhcmdjLCBjaGFyICoqYXJndiwgY2hhciAqKmVudikKKyAJfQorIAlpZiAoZW52KSB7CisgCSAgY2hhciAqcywgKm9sZF92YXI7CisrICAgICAgICAgIFNUUkxFTiBubGVuOworIAkgIFNWICpzdjsKKysgICAgICAgICAgSFYgKmR1cHMgPSBuZXdIVigpOworKworIAkgIGZvciAoOyAqZW52OyBlbnYrKykgeworIAkgICAgb2xkX3ZhciA9ICplbnY7CisgCisgCSAgICBpZiAoIShzID0gc3RyY2hyKG9sZF92YXIsJz0nKSkgfHwgcyA9PSBvbGRfdmFyKQorIAkJY29udGludWU7CisrICAgICAgICAgICAgbmxlbiA9IHMgLSBvbGRfdmFyOworIAorICNpZiBkZWZpbmVkKE1TRE9TKSAmJiAhZGVmaW5lZChESkdQUCkKKyAJICAgICpzID0gJ1wwJzsKKyAJICAgICh2b2lkKXN0cnVwcihvbGRfdmFyKTsKKyAJICAgICpzID0gJz0nOworICNlbmRpZgorLQkgICAgc3YgPSBuZXdTVnB2KHMrMSwgMCk7CistCSAgICAodm9pZClodl9zdG9yZShodiwgb2xkX3ZhciwgcyAtIG9sZF92YXIsIHN2LCAwKTsKKysgICAgICAgICAgICBpZiAoaHZfZXhpc3RzKGh2LCBvbGRfdmFyLCBubGVuKSkgeworKyAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpuYW1lID0gc2F2ZXB2bihvbGRfdmFyLCBubGVuKTsKKysKKysgICAgICAgICAgICAgICAgLyogbWFrZSBzdXJlIHdlIHVzZSB0aGUgc2FtZSB2YWx1ZSBhcyBnZXRlbnYoKSwgb3RoZXJ3aXNlIGNvZGUgdGhhdAorKyAgICAgICAgICAgICAgICAgICB1c2VzIGdldGVudigpIChsaWtlIHNldGxvY2FsZSgpKSBtaWdodCBzZWUgYSBkaWZmZXJlbnQgdmFsdWUgdG8gJUVOVgorKyAgICAgICAgICAgICAgICAgKi8KKysgICAgICAgICAgICAgICAgc3YgPSBuZXdTVnB2KFBlcmxFbnZfZ2V0ZW52KG5hbWUpLCAwKTsKKysKKysgICAgICAgICAgICAgICAgLyoga2VlcCBhIGNvdW50IG9mIHRoZSBkdXBzIG9mIHRoaXMgbmFtZSBzbyB3ZSBjYW4gZGUtZHVwIGVudmlyb24gbGF0ZXIgKi8KKysgICAgICAgICAgICAgICAgaWYgKGh2X2V4aXN0cyhkdXBzLCBuYW1lLCBubGVuKSkKKysgICAgICAgICAgICAgICAgICAgICsrU3ZJVlgoKmh2X2ZldGNoKGR1cHMsIG5hbWUsIG5sZW4sIDApKTsKKysgICAgICAgICAgICAgICAgZWxzZQorKyAgICAgICAgICAgICAgICAgICAgKHZvaWQpaHZfc3RvcmUoZHVwcywgbmFtZSwgbmxlbiwgbmV3U1ZpdigxKSwgMCk7CisrCisrICAgICAgICAgICAgICAgIFNhZmVmcmVlKG5hbWUpOworKyAgICAgICAgICAgIH0KKysgICAgICAgICAgICBlbHNlIHsKKysgICAgICAgICAgICAgICAgc3YgPSBuZXdTVnB2KHMrMSwgMCk7CisrICAgICAgICAgICAgfQorKwkgICAgKHZvaWQpaHZfc3RvcmUoaHYsIG9sZF92YXIsIG5sZW4sIHN2LCAwKTsKKyAJICAgIGlmIChlbnZfaXNfbm90X2Vudmlyb24pCisgCSAgICAgICAgbWdfc2V0KHN2KTsKKyAJICB9CisrICAgICAgICAgIGlmIChIdktFWVMoZHVwcykpIHsKKysgICAgICAgICAgICAgIC8qIGVudmlyb24gaGFzIHNvbWUgZHVwbGljYXRlIGRlZmluaXRpb25zLCByZW1vdmUgdGhlbSAqLworKyAgICAgICAgICAgICAgSEUgKmVudHJ5OworKyAgICAgICAgICAgICAgaHZfaXRlcmluaXQoZHVwcyk7CisrICAgICAgICAgICAgICB3aGlsZSAoKGVudHJ5ID0gaHZfaXRlcm5leHRfZmxhZ3MoZHVwcywgMCkpKSB7CisrICAgICAgICAgICAgICAgICAgU1RSTEVOIG5sZW47CisrICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqbmFtZSA9IEhlUFYoZW50cnksIG5sZW4pOworKyAgICAgICAgICAgICAgICAgIElWIGNvdW50ID0gU3ZJVihIZVZBTChlbnRyeSkpOworKyAgICAgICAgICAgICAgICAgIElWIGk7CisrICAgICAgICAgICAgICAgICAgU1YgKip2YWxwID0gaHZfZmV0Y2goaHYsIG5hbWUsIG5sZW4sIDApOworKworKyAgICAgICAgICAgICAgICAgIGFzc2VydCh2YWxwKTsKKysKKysgICAgICAgICAgICAgICAgICAvKiB0cnkgdG8gcmVtb3ZlIGFueSBkdXBsaWNhdGUgbmFtZXMsIGRlcGVuZGluZyBvbiB0aGUKKysgICAgICAgICAgICAgICAgICAgKiBpbXBsZW1lbnRhdGlvbiB1c2VkIGluIG15X3NldGVudigpIHRoZSBpdGVyYXRpb24gbWlnaHQKKysgICAgICAgICAgICAgICAgICAgKiBub3QgYmUgbmVjZXNzYXJ5LCBidXQgbGV0J3MgYmUgc2FmZS4KKysgICAgICAgICAgICAgICAgICAgKi8KKysgICAgICAgICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgY291bnQ7ICsraSkKKysgICAgICAgICAgICAgICAgICAgICAgbXlfc2V0ZW52KG5hbWUsIDApOworKworKyAgICAgICAgICAgICAgICAgIC8qIGFuZCBzZXQgaXQgYmFjayB0byB0aGUgdmFsdWUgd2Ugc2V0ICRFTlZ7bmFtZX0gdG8gKi8KKysgICAgICAgICAgICAgICAgICBteV9zZXRlbnYobmFtZSwgU3ZQVl9ub2xlbigqdmFscCkpOworKyAgICAgICAgICAgICAgfQorKyAgICAgICAgICB9CisrICAgICAgICAgIFN2UkVGQ05UX2RlY19OTihkdXBzKTsKKyAgICAgICB9CisgI2VuZGlmIC8qIFVTRV9FTlZJUk9OX0FSUkFZICovCisgI2VuZGlmIC8qICFQRVJMX01JQ1JPICovCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3BlcmwvcGVybC9wZXJsLWZpeC1DVkUtMjAxNi02MTg1LnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9wZXJsL3BlcmwvcGVybC1maXgtQ1ZFLTIwMTYtNjE4NS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yNzIyYWYzCi0tLSAvZGV2L251bGwKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9wZXJsL3BlcmwvcGVybC1maXgtQ1ZFLTIwMTYtNjE4NS5wYXRjaApAQCAtMCwwICsxLDEyOCBAQAorRnJvbSA3Y2VkYWE4YmMyY2E5ZTYzMzY5ZDBlMmQ0YzRjMjNhZjlmZWJiOTNhIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogRmF0aGVyIENocnlzb3N0b21vcyA8c3Byb3V0QGNwYW4ub3JnPgorRGF0ZTogU2F0LCAyIEp1bCAyMDE2IDIyOjU2OjUxIC0wNzAwCitTdWJqZWN0OiBbUEFUQ0hdIHBlcmw6IGZpeCBDVkUtMjAxNi02MTg1CitNSU1FLVZlcnNpb246IDEuMAorCitEb24ndCBsZXQgWFNMb2FkZXIgbG9hZCByZWxhdGl2ZSBwYXRocworCitbcnQuY3Bhbi5vcmcgIzExNTgwOF0KKworVGhlIGxvZ2ljIGluIFhTTG9hZGVyIGZvciBkZXRlcm1pbmluZyB0aGUgbGlicmFyeSBnb2VzIGxpa2UgdGhpczoKKworICAgIG15ICRjID0gKCkgPSBzcGxpdCgvOjovLCRjYWxsZXIsLTEpOworICAgICRtb2RsaWJuYW1lID1+IHMsW1xcL11bXlxcL10rJCwsIHdoaWxlICRjLS07ICAgICMgUSZEIGJhc2VuYW1lCisgICAgbXkgJGZpbGUgPSAiJG1vZGxpYm5hbWUvYXV0by8kbW9kcG5hbWUvJG1vZGZuYW1lLmJ1bmRsZSI7CisKKyhUaGF0IGxhc3QgbGluZSB2YXJpZXMgYnkgcGxhdGZvcm0uKQorCiskY2FsbGVyIGlzIHRoZSBjYWxsaW5nIHBhY2thZ2UuICAkbW9kbGlibmFtZSBpcyB0aGUgY2FsbGluZyBmaWxlLiAgSXQKK3JlbW92ZXMgYXMgbWFueSBwYXRoIHNlZ21lbnRzIGZyb20gJG1vZGxpYm5hbWUgYXMgdGhlcmUgYXJlIHNlZ21lbnRzCitpbiAkY2FsbGVyLiAgU28gaWYgeW91IGhhdmUgRm9vL0Jhci9YUy5wbSBjYWxsaW5nIFhTTG9hZGVyIGZyb20gdGhlCitGb286OkJhciBwYWNrYWdlLCB0aGUgJG1vZGxpYm5hbWUgd2lsbCBlbmQgdXAgY29udGFpbmluZyB0aGUgcGF0aCBpbgorQElOQyB3aGVyZSBYUy5wbSB3YXMgZm91bmQsIGZvbGxvd2VkIGJ5ICIvRm9vIi4gIFVzdWFsbHkgdGhlIGZhbGxiYWNrCit0byBEeW5hbG9hZGVyOjpib290c3RyYXBfaW5oZXJpdCwgd2hpY2ggZG9lcyBhbiBASU5DIHNlYXJjaCwgbWFrZXMKK3RoaW5ncyBKdXN0IFdvcmsuCisKK0J1dCBpZiBvdXIgaHlwb3RoZXRpY2FsIEZvby9CYXIvWFMucG0gYWN0dWFsbHkgY2FsbHMKK1hTTG9hZGVyOjpsb2FkIGZyb20gaW5zaWRlIGEgc3RyaW5nIGV2YWwsIHRoZW4gcGF0aCBlbmRzIHVwIGJlaW5nCisiKGV2YWwgMSkvYXV0by9Gb28vQmFyL0Jhci5idW5kbGUiLgorCitTbyBpZiBzb21lb25lIGNyZWF0ZXMgYSBkaXJlY3RvcnkgbmFtZWQgJyhldmFsIDEpJyB3aXRoIGEgbmF1Z2h0eQorYmluYXJ5IGZpbGUgaW4gaXQsIGl0IHdpbGwgYmUgbG9hZGVkIGlmIGEgc2NyaXB0IHVzaW5nIEZvbzo6QmFyIGlzIHJ1bgoraW4gdGhlIHBhcmVudCBkaXJlY3RvcnkuCisKK1RoaXMgY29tbWl0IG1ha2VzIFhTTG9hZGVyIGZhbGwgYmFjayB0byBEeW5hbG9hZGVyJ3MgQElOQyBzZWFyY2ggaWYKK3RoZSBjYWxsaW5nIGZpbGUgaGFzIGEgcmVsYXRpdmUgcGF0aCB0aGF0IGlzIG5vdCBmb3VuZCBpbiBASU5DLgorCitCYWNrcG9ydCBwYXRjaCBmcm9tIGh0dHA6Ly9wZXJsNS5naXQucGVybC5vcmcvcGVybC5naXQvY29tbWl0ZGlmZi8wOGUzNDUxZDcKKworVXBzdHJlYW0tU3RhdHVzOiBCYWNrcG9ydAorQ1ZFOiBDVkUtMjAxNi02MTg1CitTaWduZWQtb2ZmLWJ5OiBNaW5nbGkgWXUgPE1pbmdsaS5ZdUB3aW5kcml2ZXIuY29tPgorLS0tCisgZGlzdC9YU0xvYWRlci9YU0xvYWRlcl9wbS5QTCB8IDI1ICsrKysrKysrKysrKysrKysrKysrKysrKysKKyBkaXN0L1hTTG9hZGVyL3QvWFNMb2FkZXIudCAgIHwgMjcgKysrKysrKysrKysrKysrKysrKysrKysrKystCisgMiBmaWxlcyBjaGFuZ2VkLCA1MSBpbnNlcnRpb25zKCspLCAxIGRlbGV0aW9uKC0pCisKK2RpZmYgLS1naXQgYS9kaXN0L1hTTG9hZGVyL1hTTG9hZGVyX3BtLlBMIGIvZGlzdC9YU0xvYWRlci9YU0xvYWRlcl9wbS5QTAoraW5kZXggNjY4NDExZC4uNzc4ZTQ2YiAxMDA2NDQKKy0tLSBhL2Rpc3QvWFNMb2FkZXIvWFNMb2FkZXJfcG0uUEwKKysrKyBiL2Rpc3QvWFNMb2FkZXIvWFNMb2FkZXJfcG0uUEwKK0BAIC0xMDQsNiArMTA0LDMxIEBAIHByaW50IE9VVCA8PCdFT1QnOworICAgICBteSAkbW9kcG5hbWUgPSBqb2luKCcvJyxAbW9kcGFydHMpOworICAgICBteSAkYyA9ICgpID0gc3BsaXQoLzo6LywkY2FsbGVyLC0xKTsKKyAgICAgJG1vZGxpYm5hbWUgPX4gcyxbXFwvXVteXFwvXSskLCwgd2hpbGUgJGMtLTsgICAgIyBRJkQgYmFzZW5hbWUKKysgICAgIyBEb2VzIHRoaXMgbG9vayBsaWtlIGEgcmVsYXRpdmUgcGF0aD8KKysgICAgaWYgKCRtb2RsaWJuYW1lICF+IG18XltcXC9dfCkgeworKyAgICAgICAgIyBTb21lb25lIG1heSBoYXZlIGEgI2xpbmUgZGlyZWN0aXZlIHRoYXQgY2hhbmdlcyB0aGUgZmlsZSBuYW1lLCBvcgorKyAgICAgICAgIyBtYXkgYmUgY2FsbGluZyBYU0xvYWRlcjo6bG9hZCBmcm9tIGluc2lkZSBhIHN0cmluZyBldmFsLiAgV2UgY2VyLQorKyAgICAgICAgIyB0YWlubHkgZG8gbm90IHdhbnQgdG8gZ28gbG9hZGluZyBzb21lIGNvZGUgdGhhdCBpcyBub3QgaW4gQElOQywKKysgICAgICAgICMgYXMgaXQgY291bGQgYmUgdW50cnVzdGVkLgorKyAgICAgICAgIworKyAgICAgICAgIyBXZSBjb3VsZCBqdXN0IGZhbGwgYmFjayB0byBEeW5hTG9hZGVyIGhlcmUsIGJ1dCB0aGVuIHRoZSByZXN0IG9mCisrICAgICAgICAjIHRoaXMgZnVuY3Rpb24gd291bGQgZ28gdW50ZXN0ZWQgaW4gdGhlIHBlcmwgY29yZSwgc2luY2UgYWxsIEBJTkMKKysgICAgICAgICMgcGF0aHMgYXJlIHJlbGF0aXZlIGR1cmluZyB0ZXN0aW5nLiAgVGhhdCB3b3VsZCBiZSBhIHRpbWUgYm9tYgorKyAgICAgICAgIyB3YWl0aW5nIHRvIGhhcHBlbiwgc2luY2UgYnVncyBjb3VsZCBiZSBpbnRyb2R1Y2VkIGludG8gdGhlIGNvZGUuCisrICAgICAgICAjCisrICAgICAgICAjIFNvIGxvb2sgdGhyb3VnaCBASU5DIHRvIHNlZSBpZiAkbW9kbGlibmFtZSBpcyBpbiBpdC4gIEEgcmVsYS0KKysgICAgICAgICMgdGl2ZSAkbW9kbGlibmFtZSBpcyBub3QgYSBjb21tb24gb2NjdXJyZW5jZSwgc28gdGhpcyBibG9jayBpcworKyAgICAgICAgIyBub3QgaG90IGNvZGUuCisrICAgICAgICBGT1VORDogeworKyAgICAgICAgICAgIGZvciAoQElOQykgeworKyAgICAgICAgICAgICAgICBpZiAoJF8gZXEgJG1vZGxpYm5hbWUpIHsKKysgICAgICAgICAgICAgICAgICAgIGxhc3QgRk9VTkQ7CisrICAgICAgICAgICAgICAgIH0KKysgICAgICAgICAgICB9CisrICAgICAgICAgICAgIyBOb3QgZm91bmQuICBGYWxsIGJhY2sgdG8gRHluYUxvYWRlci4KKysgICAgICAgICAgICBnb3RvIFwmWFNMb2FkZXI6OmJvb3RzdHJhcF9pbmhlcml0OworKyAgICAgICAgfQorKyAgICB9CisgRU9UCisgCisgbXkgJGRsX2RsZXh0ID0gcXVvdGVtZXRhKCRDb25maWc6OkNvbmZpZ3snZGxleHQnfSk7CitkaWZmIC0tZ2l0IGEvZGlzdC9YU0xvYWRlci90L1hTTG9hZGVyLnQgYi9kaXN0L1hTTG9hZGVyL3QvWFNMb2FkZXIudAoraW5kZXggMmZmMTFmZS4uMWU4NmZhYSAxMDA2NDQKKy0tLSBhL2Rpc3QvWFNMb2FkZXIvdC9YU0xvYWRlci50CisrKysgYi9kaXN0L1hTTG9hZGVyL3QvWFNMb2FkZXIudAorQEAgLTMzLDcgKzMzLDcgQEAgbXkgJW1vZHVsZXMgPSAoCisgICAgICdUaW1lOjpIaVJlcyc9PiBxfCA6OmNhbl9vayggJ1RpbWU6OkhpUmVzJyA9PiAndXNsZWVwJyAgKSB8LCAgIyA1LjcuMworICk7CisgCistcGxhbiB0ZXN0cyA9PiBrZXlzKCVtb2R1bGVzKSAqIDMgKyA5OworK3BsYW4gdGVzdHMgPT4ga2V5cyglbW9kdWxlcykgKiAzICsgMTA7CisgCisgIyBUcnkgdG8gbG9hZCB0aGUgbW9kdWxlCisgdXNlX29rKCAnWFNMb2FkZXInICk7CitAQCAtMTI1LDMgKzEyNSwyOCBAQCBYU0xvYWRlcjo6bG9hZCgiRGV2ZWw6OlBlZWsiKTsKKyBFT1MKKyAgICAgb3IgOjpkaWFnICRAOworIH0KKysKKytTS0lQOiB7CisrICBza2lwICJGaWxlOjpQYXRoIG5vdCBhdmFpbGFibGUiLCAxCisrICAgIHVubGVzcyBldmFsIHsgcmVxdWlyZSBGaWxlOjpQYXRoIH07CisrICBteSAkbmFtZSA9ICJwaG9vbyQkIjsKKysgIEZpbGU6OlBhdGg6Om1ha2VfcGF0aCgiJG5hbWUvYXV0by9Gb28vQmFyIik7CisrICBvcGVuIG15ICRmaCwKKysgICAgIj4kbmFtZS9hdXRvL0Zvby9CYXIvQmFyLiRDb25maWc6OkNvbmZpZ3snZGxleHQnfSI7CisrICBjbG9zZSAkZmg7CisrICBteSAkZmVsbF9iYWNrOworKyAgbG9jYWwgKlhTTG9hZGVyOjpib290c3RyYXBfaW5oZXJpdCA9IHN1YiB7CisrICAgICRmZWxsX2JhY2srKzsKKysgICAgIyBCcmVhayBvdXQgb2YgdGhlIGNhbGxpbmcgc3VicworKyAgICBnb3RvIHRoZV90ZXN0OworKyAgfTsKKysgIGV2YWwgPDxFTkQ7CisrI2xpbmUgMSAkbmFtZQorK3BhY2thZ2UgRm9vOjpCYXI7CisrWFNMb2FkZXI6OmxvYWQoIkZvbzo6QmFyIik7CisrRU5ECisrIHRoZV90ZXN0OgorKyAgb2sgJGZlbGxfYmFjaywKKysgICAgJ1hTTG9hZGVyIHdpbGwgbm90IGxvYWQgcmVsYXRpdmUgcGF0aHMgYmFzZWQgb24gKGNhbGxlcilbMV0nOworKyAgRmlsZTo6UGF0aDo6cmVtb3ZlX3RyZWUoJG5hbWUpOworK30KKy0tIAorMi44LjEKKwpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9wZXJsL3BlcmwvcGVybC1maXgtY29uZmxpY3QtYmV0d2Vlbi1za2lwX2FsbC1hbmQtRU5ELnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9wZXJsL3BlcmwvcGVybC1maXgtY29uZmxpY3QtYmV0d2Vlbi1za2lwX2FsbC1hbmQtRU5ELnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRlOTQ2ZGIKLS0tIC9kZXYvbnVsbAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3BlcmwvcGVybC9wZXJsLWZpeC1jb25mbGljdC1iZXR3ZWVuLXNraXBfYWxsLWFuZC1FTkQucGF0Y2gKQEAgLTAsMCArMSwxODEgQEAKK1NvbWUgUGVybCB0ZXN0cyBmYWlsIHdoZW4gcnVuIG9uIGEgY3Jvc3MtY29tcGlsZWQgdGFyZ2V0IG1hY2hpbmUuIEFwcGx5CithIHNsaWdodGx5IHR3ZWFrZWQgdXBzdHJlYW0gcGF0Y2ggdG8gZml4IHRoZSBwcm9ibGVtcy4gTm90ZXM6CisgICAgMS4gYXMgb2YgMiBKdW4gMjAxNiwgdGhlIG9yaWdpbmFsIHBhdGNoIGhhcyBiZWVuIGFwcGxpZWQgdG8gdGhlIGN1cnJlbnQKKyAgICAgICBFVU1NIHJlbGVhc2VzLCBidXQgaGFzIG5vdCBtYWRlIGl0IGludG8gcGVybCBjb3JlIHlldC4KKyAgICAyLiB3aGVuIHRoZSBiYXNlIHBlcmwgcGFja2FnZSBpcyB1cGdyYWRlZCBpbiBZb2N0bywgdGhpcyBwYXRjaCBtYXkgbmVlZAorICAgICAgIHRvIGJlIHJlcGxhY2VkIGJ5IHRoZSBvcmlnaW5hbCB1cHN0cmVhbSB2ZXJzaW9uIHRvIGNvcnJlY3RseSBhcHBseQorICAgICAgIHRvIHRoZSBjdXJyZW50IHZlcnNpb24gb2YgRXh0VXRpbHMtTWFrZU1ha2VyIGF0IHRoYXQgdGltZS4KKworW1lPQ1RPICM4NjU2XQorCitVcHN0cmVhbS1TdGF0dXM6IEJhY2twb3J0CisKK1NpZ25lZC1vZmYtYnk6IEJpbGwgUmFuZGxlIDx3aWxsaWFtLmMucmFuZGxlQGludGVsLmNvbT4KKworRnJvbSA0YTA3YTNiZDE4MzYzOTg2MTEyY2YyYjM5ZGVjM2MyOTg1MzUzZmZiIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogRnJhbmNvaXMgUGVycmFkIDxmcmFuY29pcy5wZXJyYWRAZ2Fkei5vcmc+CitEYXRlOiBNb24sIDIyIERlYyAyMDE0IDE5OjA0OjM0ICswMTAwCitTdWJqZWN0OiBbUEFUQ0hdIGZpeCBjb25mbGljdCBiZXR3ZWVuIHNraXBfYWxsIGFuZCBFTkQgc2VjdGlvbgorCitzaW5jZSB0aGUgY29tbWl0IDQzMGRlNzgxODA5YTZiZTNiY2QyNWEzNDlkYzQwY2U1NDQwNWFiNTMKK3RoZSB0ZXN0IHN1aXRlIGZhaWxzIGluIGNyb3NzLWNvbXBpbCBlbnZpcm9ubWVudCAocGVybC01LjIxLjYgJiBwZXJsLTUuMjEuNykKK2xpa2UgdGhpcyA6CisKKyAgICAkIC4vcGVybCBoYXJuZXNzIC12IC4uL2NwYW4vRXh0VXRpbHMtTWFrZU1ha2VyL3QvSU5TVEFMTF9CQVNFLnQKKyAgICAuLi9jcGFuL0V4dFV0aWxzLU1ha2VNYWtlci90L0lOU1RBTExfQkFTRS50IC4uCisgICAgMS4uMCAjIFNLSVAgY3Jvc3MtY29tcGlsaW5nIGFuZCBtYWtlIG5vdCBhdmFpbGFibGUKKyAgICBvayAxIC0gY2hkaXIgdXBkaXIKKyAgICBvayAyIC0gdGVhcmRvd24KKyAgICAjIExvb2tzIGxpa2UgeW91IHBsYW5uZWQgMCB0ZXN0cyBidXQgcmFuIDIuCisgICAgc2tpcHBlZDogY3Jvc3MtY29tcGlsaW5nIGFuZCBtYWtlIG5vdCBhdmFpbGFibGUKKwordGhpcyBjb21taXQgcmVzdG9yZXMgdGhlIGltcGxpY2l0IGNhbGwgb2YgcGxhbigpIGF0IGltcG9ydCB0aW1lIG9mIFRlc3Q6Ok1vcmUKKworU2lnbmVkLW9mZi1ieTogRnJhbmNvaXMgUGVycmFkIDxmcmFuY29pcy5wZXJyYWRAZ2Fkei5vcmc+CistLS0KKyBjcGFuL0V4dFV0aWxzLU1ha2VNYWtlci90L0lOU1RBTExfQkFTRS50ICAgICB8IDcgKysrKy0tLQorIGNwYW4vRXh0VXRpbHMtTWFrZU1ha2VyL3QvUExfRklMRVMudCAgICAgICAgIHwgNCArKy0tCisgY3Bhbi9FeHRVdGlscy1NYWtlTWFrZXIvdC9iYXNpYy50ICAgICAgICAgICAgfCA0ICsrLS0KKyBjcGFuL0V4dFV0aWxzLU1ha2VNYWtlci90L2VjaG8udCAgICAgICAgICAgICB8IDYgKysrLS0tCisgY3Bhbi9FeHRVdGlscy1NYWtlTWFrZXIvdC9taW5fcGVybF92ZXJzaW9uLnQgfCA0ICsrLS0KKyBjcGFuL0V4dFV0aWxzLU1ha2VNYWtlci90L3BtX3RvX2JsaWIudCAgICAgICB8IDQgKystLQorIGNwYW4vRXh0VXRpbHMtTWFrZU1ha2VyL3QvcmVjdXJzLnQgICAgICAgICAgIHwgNCArKy0tCisgY3Bhbi9FeHRVdGlscy1NYWtlTWFrZXIvdC9zZXZlcmFsX2F1dGhvcnMudCAgfCA0ICsrLS0KKyA4IGZpbGVzIGNoYW5nZWQsIDE5IGluc2VydGlvbnMoKyksIDE4IGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvY3Bhbi9FeHRVdGlscy1NYWtlTWFrZXIvdC9JTlNUQUxMX0JBU0UudCBiL2NwYW4vRXh0VXRpbHMtTWFrZU1ha2VyL3QvSU5TVEFMTF9CQVNFLnQKK2luZGV4IGYyN2I2MmMuLjNiYmIzYTYgMTAwNjQ0CistLS0gYS9jcGFuL0V4dFV0aWxzLU1ha2VNYWtlci90L0lOU1RBTExfQkFTRS50CisrKysgYi9jcGFuL0V4dFV0aWxzLU1ha2VNYWtlci90L0lOU1RBTExfQkFTRS50CitAQCAtMTUsMTIgKzE1LDEzIEBAICRDTEVBTlVQICYmPSAxOyAjIHNvIGFsd2F5cyAxIG9yIG51bWVyaWNhbGx5IDAKKyAKKyB1c2UgTWFrZU1ha2VyOjpUZXN0OjpVdGlsczsKKyB1c2UgTWFrZU1ha2VyOjpUZXN0OjpTZXR1cDo6QkZEOworLXVzZSBUZXN0OjpNb3JlOworIHVzZSBDb25maWc7CisgdXNlIEV4dFV0aWxzOjpNTTsKKy1wbGFuICFNTS0+Y2FuX3J1bihtYWtlKCkpICYmICRFTlZ7UEVSTF9DT1JFfSAmJiAkQ29uZmlneyd1c2Vjcm9zc2NvbXBpbGUnfQorK3VzZSBUZXN0OjpNb3JlCisrICAgICFNTS0+Y2FuX3J1bihtYWtlKCkpICYmICRFTlZ7UEVSTF9DT1JFfSAmJiAkQ29uZmlneyd1c2Vjcm9zc2NvbXBpbGUnfQorICAgICA/IChza2lwX2FsbCA9PiAiY3Jvc3MtY29tcGlsaW5nIGFuZCBtYWtlIG5vdCBhdmFpbGFibGUiKQorLSAgICA6ICh0ZXN0cyA9PiAzICsgJENMRUFOVVAgKyBASU5TVERJUlMgKiAoMTUgKyAkQ0xFQU5VUCkpOworKyAgICA6ICgpOworK3BsYW4gdGVzdHMgPT4gMyArICRDTEVBTlVQICsgQElOU1RESVJTICogKDE1ICsgJENMRUFOVVApOworIAorIG15ICRJc19WTVMgPSAkXk8gZXEgJ1ZNUyc7CisgCitkaWZmIC0tZ2l0IGEvY3Bhbi9FeHRVdGlscy1NYWtlTWFrZXIvdC9QTF9GSUxFUy50IGIvY3Bhbi9FeHRVdGlscy1NYWtlTWFrZXIvdC9QTF9GSUxFUy50CitpbmRleCAwNzc5ZGJiLi44NWQ1M2E1IDEwMDY0NAorLS0tIGEvY3Bhbi9FeHRVdGlscy1NYWtlTWFrZXIvdC9QTF9GSUxFUy50CisrKysgYi9jcGFuL0V4dFV0aWxzLU1ha2VNYWtlci90L1BMX0ZJTEVTLnQKK0BAIC0xMSw5ICsxMSw5IEBAIHVzZSBGaWxlOjpUZW1wIHF3W3RlbXBkaXJdOworIHVzZSBNYWtlTWFrZXI6OlRlc3Q6OlNldHVwOjpQTF9GSUxFUzsKKyB1c2UgTWFrZU1ha2VyOjpUZXN0OjpVdGlsczsKKyB1c2UgQ29uZmlnOworLXVzZSBUZXN0OjpNb3JlOworIHVzZSBFeHRVdGlsczo6TU07CistcGxhbiAhTU0tPmNhbl9ydW4obWFrZSgpKSAmJiAkRU5We1BFUkxfQ09SRX0gJiYgJENvbmZpZ3sndXNlY3Jvc3Njb21waWxlJ30KKyt1c2UgVGVzdDo6TW9yZQorKyAgICAhTU0tPmNhbl9ydW4obWFrZSgpKSAmJiAkRU5We1BFUkxfQ09SRX0gJiYgJENvbmZpZ3sndXNlY3Jvc3Njb21waWxlJ30KKyAgICAgPyAoc2tpcF9hbGwgPT4gImNyb3NzLWNvbXBpbGluZyBhbmQgbWFrZSBub3QgYXZhaWxhYmxlIikKKyAgICAgOiAodGVzdHMgPT4gOSk7CisgCitkaWZmIC0tZ2l0IGEvY3Bhbi9FeHRVdGlscy1NYWtlTWFrZXIvdC9iYXNpYy50IGIvY3Bhbi9FeHRVdGlscy1NYWtlTWFrZXIvdC9iYXNpYy50CitpbmRleCAzZGQ2NmFkLi5lZGRmMmU5IDEwMDY0NAorLS0tIGEvY3Bhbi9FeHRVdGlscy1NYWtlTWFrZXIvdC9iYXNpYy50CisrKysgYi9jcGFuL0V4dFV0aWxzLU1ha2VNYWtlci90L2Jhc2ljLnQKK0BAIC0yMCw5ICsyMCw5IEBAIHVzZSB1dGY4OworIHVzZSBNYWtlTWFrZXI6OlRlc3Q6OlV0aWxzOworIHVzZSBNYWtlTWFrZXI6OlRlc3Q6OlNldHVwOjpCRkQ7CisgdXNlIENvbmZpZzsKKy11c2UgVGVzdDo6TW9yZTsKKyB1c2UgRXh0VXRpbHM6Ok1NOworLXBsYW4gIU1NLT5jYW5fcnVuKG1ha2UoKSkgJiYgJEVOVntQRVJMX0NPUkV9ICYmICRDb25maWd7J3VzZWNyb3NzY29tcGlsZSd9CisrdXNlIFRlc3Q6Ok1vcmUKKysgICAgIU1NLT5jYW5fcnVuKG1ha2UoKSkgJiYgJEVOVntQRVJMX0NPUkV9ICYmICRDb25maWd7J3VzZWNyb3NzY29tcGlsZSd9CisgICAgID8gKHNraXBfYWxsID0+ICJjcm9zcy1jb21waWxpbmcgYW5kIG1ha2Ugbm90IGF2YWlsYWJsZSIpCisgICAgIDogKHRlc3RzID0+IDE3MSk7CisgdXNlIEZpbGU6OkZpbmQ7CitkaWZmIC0tZ2l0IGEvY3Bhbi9FeHRVdGlscy1NYWtlTWFrZXIvdC9lY2hvLnQgYi9jcGFuL0V4dFV0aWxzLU1ha2VNYWtlci90L2VjaG8udAoraW5kZXggNzg5Yjg1Zi4uYzQzYmM0NyAxMDA2NDQKKy0tLSBhL2NwYW4vRXh0VXRpbHMtTWFrZU1ha2VyL3QvZWNoby50CisrKysgYi9jcGFuL0V4dFV0aWxzLU1ha2VNYWtlci90L2VjaG8udAorQEAgLTE0LDExICsxNCwxMSBAQCB1c2UgTWFrZU1ha2VyOjpUZXN0OjpVdGlsczsKKyB1c2UgRmlsZTo6VGVtcDsKKyB1c2UgQ3dkICdhYnNfcGF0aCc7CisgCistdXNlIFRlc3Q6Ok1vcmU7CisgdXNlIEV4dFV0aWxzOjpNTTsKKy1wbGFuICFNTS0+Y2FuX3J1bihtYWtlKCkpICYmICRFTlZ7UEVSTF9DT1JFfSAmJiAkQ29uZmlneyd1c2Vjcm9zc2NvbXBpbGUnfQorK3VzZSBUZXN0OjpNb3JlCisrICAgICFNTS0+Y2FuX3J1bihtYWtlKCkpICYmICRFTlZ7UEVSTF9DT1JFfSAmJiAkQ29uZmlneyd1c2Vjcm9zc2NvbXBpbGUnfQorICAgICA/IChza2lwX2FsbCA9PiAiY3Jvc3MtY29tcGlsaW5nIGFuZCBtYWtlIG5vdCBhdmFpbGFibGUiKQorLSAgICA6ICgpOworKyAgICA6ICh0ZXN0cyA9PiAxOCk7CisgCisgIy0tLS0tLS0tLS0tLS0tLS0tLS0tLSBTZXR1cAorIAorZGlmZiAtLWdpdCBhL2NwYW4vRXh0VXRpbHMtTWFrZU1ha2VyL3QvbWluX3BlcmxfdmVyc2lvbi50IGIvY3Bhbi9FeHRVdGlscy1NYWtlTWFrZXIvdC9taW5fcGVybF92ZXJzaW9uLnQKK2luZGV4IGM1ZDc4ZDYuLjJlZjExOGQgMTAwNjQ0CistLS0gYS9jcGFuL0V4dFV0aWxzLU1ha2VNYWtlci90L21pbl9wZXJsX3ZlcnNpb24udAorKysrIGIvY3Bhbi9FeHRVdGlscy1NYWtlTWFrZXIvdC9taW5fcGVybF92ZXJzaW9uLnQKK0BAIC0xMyw5ICsxMyw5IEBAIHVzZSBUaWVPdXQ7CisgdXNlIE1ha2VNYWtlcjo6VGVzdDo6VXRpbHM7CisgdXNlIE1ha2VNYWtlcjo6VGVzdDo6U2V0dXA6Ok1QVjsKKyB1c2UgQ29uZmlnOworLXVzZSBUZXN0OjpNb3JlOworIHVzZSBFeHRVdGlsczo6TU07CistcGxhbiAhTU0tPmNhbl9ydW4obWFrZSgpKSAmJiAkRU5We1BFUkxfQ09SRX0gJiYgJENvbmZpZ3sndXNlY3Jvc3Njb21waWxlJ30KKyt1c2UgVGVzdDo6TW9yZQorKyAgICAhTU0tPmNhbl9ydW4obWFrZSgpKSAmJiAkRU5We1BFUkxfQ09SRX0gJiYgJENvbmZpZ3sndXNlY3Jvc3Njb21waWxlJ30KKyAgICAgPyAoc2tpcF9hbGwgPT4gImNyb3NzLWNvbXBpbGluZyBhbmQgbWFrZSBub3QgYXZhaWxhYmxlIikKKyAgICAgOiAodGVzdHMgPT4gMzYpOworIHVzZSBGaWxlOjpQYXRoOworZGlmZiAtLWdpdCBhL2NwYW4vRXh0VXRpbHMtTWFrZU1ha2VyL3QvcG1fdG9fYmxpYi50IGIvY3Bhbi9FeHRVdGlscy1NYWtlTWFrZXIvdC9wbV90b19ibGliLnQKK2luZGV4IGYxZTM0OGUuLmViZmEyNmMgMTAwNjQ0CistLS0gYS9jcGFuL0V4dFV0aWxzLU1ha2VNYWtlci90L3BtX3RvX2JsaWIudAorKysrIGIvY3Bhbi9FeHRVdGlscy1NYWtlTWFrZXIvdC9wbV90b19ibGliLnQKK0BAIC0xMiw5ICsxMiw5IEBAIHVzZSBFeHRVdGlsczo6TWFrZU1ha2VyOworIHVzZSBNYWtlTWFrZXI6OlRlc3Q6OlV0aWxzOworIHVzZSBNYWtlTWFrZXI6OlRlc3Q6OlNldHVwOjpCRkQ7CisgdXNlIENvbmZpZzsKKy11c2UgVGVzdDo6TW9yZTsKKyB1c2UgRXh0VXRpbHM6Ok1NOworLXBsYW4gIU1NLT5jYW5fcnVuKG1ha2UoKSkgJiYgJEVOVntQRVJMX0NPUkV9ICYmICRDb25maWd7J3VzZWNyb3NzY29tcGlsZSd9CisrdXNlIFRlc3Q6Ok1vcmUKKysgICAgIU1NLT5jYW5fcnVuKG1ha2UoKSkgJiYgJEVOVntQRVJMX0NPUkV9ICYmICRDb25maWd7J3VzZWNyb3NzY29tcGlsZSd9CisgICAgID8gKHNraXBfYWxsID0+ICJjcm9zcy1jb21waWxpbmcgYW5kIG1ha2Ugbm90IGF2YWlsYWJsZSIpCisgICAgIDogJ25vX3BsYW4nOworIAorZGlmZiAtLWdpdCBhL2NwYW4vRXh0VXRpbHMtTWFrZU1ha2VyL3QvcmVjdXJzLnQgYi9jcGFuL0V4dFV0aWxzLU1ha2VNYWtlci90L3JlY3Vycy50CitpbmRleCA4NGMwOWEyLi42NjFlMGRiIDEwMDY0NAorLS0tIGEvY3Bhbi9FeHRVdGlscy1NYWtlTWFrZXIvdC9yZWN1cnMudAorKysrIGIvY3Bhbi9FeHRVdGlscy1NYWtlTWFrZXIvdC9yZWN1cnMudAorQEAgLTE0LDkgKzE0LDkgQEAgdXNlIEZpbGU6OlRlbXAgcXdbdGVtcGRpcl07CisgdXNlIE1ha2VNYWtlcjo6VGVzdDo6VXRpbHM7CisgdXNlIE1ha2VNYWtlcjo6VGVzdDo6U2V0dXA6OlJlY3VyczsKKyB1c2UgQ29uZmlnOworLXVzZSBUZXN0OjpNb3JlOworIHVzZSBFeHRVdGlsczo6TU07CistcGxhbiAhTU0tPmNhbl9ydW4obWFrZSgpKSAmJiAkRU5We1BFUkxfQ09SRX0gJiYgJENvbmZpZ3sndXNlY3Jvc3Njb21waWxlJ30KKyt1c2UgVGVzdDo6TW9yZQorKyAgICAhTU0tPmNhbl9ydW4obWFrZSgpKSAmJiAkRU5We1BFUkxfQ09SRX0gJiYgJENvbmZpZ3sndXNlY3Jvc3Njb21waWxlJ30KKyAgICAgPyAoc2tpcF9hbGwgPT4gImNyb3NzLWNvbXBpbGluZyBhbmQgbWFrZSBub3QgYXZhaWxhYmxlIikKKyAgICAgOiAodGVzdHMgPT4gMjYpOworIAorZGlmZiAtLWdpdCBhL2NwYW4vRXh0VXRpbHMtTWFrZU1ha2VyL3Qvc2V2ZXJhbF9hdXRob3JzLnQgYi9jcGFuL0V4dFV0aWxzLU1ha2VNYWtlci90L3NldmVyYWxfYXV0aG9ycy50CitpbmRleCAxYTc1YTNlLi44NjllOWYwIDEwMDY0NAorLS0tIGEvY3Bhbi9FeHRVdGlscy1NYWtlTWFrZXIvdC9zZXZlcmFsX2F1dGhvcnMudAorKysrIGIvY3Bhbi9FeHRVdGlscy1NYWtlTWFrZXIvdC9zZXZlcmFsX2F1dGhvcnMudAorQEAgLTEzLDkgKzEzLDkgQEAgdXNlIFRpZU91dDsKKyB1c2UgTWFrZU1ha2VyOjpUZXN0OjpVdGlsczsKKyB1c2UgTWFrZU1ha2VyOjpUZXN0OjpTZXR1cDo6U0FTOworIHVzZSBDb25maWc7CistdXNlIFRlc3Q6Ok1vcmU7CisgdXNlIEV4dFV0aWxzOjpNTTsKKy1wbGFuICFNTS0+Y2FuX3J1bihtYWtlKCkpICYmICRFTlZ7UEVSTF9DT1JFfSAmJiAkQ29uZmlneyd1c2Vjcm9zc2NvbXBpbGUnfQorK3VzZSBUZXN0OjpNb3JlCisrICAgICFNTS0+Y2FuX3J1bihtYWtlKCkpICYmICRFTlZ7UEVSTF9DT1JFfSAmJiAkQ29uZmlneyd1c2Vjcm9zc2NvbXBpbGUnfQorICAgICA/IChza2lwX2FsbCA9PiAiY3Jvc3MtY29tcGlsaW5nIGFuZCBtYWtlIG5vdCBhdmFpbGFibGUiKQorICAgICA6ICh0ZXN0cyA9PiAyMCk7CisgdXNlIEZpbGU6OlBhdGg7CmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3BlcmwvcGVybC9wZXJsLXJlbW92ZS1ubS1mcm9tLWxpYnN3YW50ZWQucGF0Y2ggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3BlcmwvcGVybC9wZXJsLXJlbW92ZS1ubS1mcm9tLWxpYnN3YW50ZWQucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzQ4OWYwNQotLS0gL2Rldi9udWxsCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcGVybC9wZXJsL3BlcmwtcmVtb3ZlLW5tLWZyb20tbGlic3dhbnRlZC5wYXRjaApAQCAtMCwwICsxLDMwIEBACitGcm9tIDQ3MzI3MTFlMjU0OGI2ZDczNGNhODMxZDY1ZGJjZjUwMWE4OTc3NGUgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBBbmRyZWFzIEtvZW5pZyA8YW5ka0BjcGFuLm9yZz4KK0RhdGU6IFN1biwgMyBKYW4gMjAxNiAwODo0MDozMyArMDEwMAorU3ViamVjdDogW1BBVENIXSBSZW1vdmUgbm0gZnJvbSBsaWJzd2FudGVkCisKK05tIHN0b29kIGZvciAiTmV3IE1hdGgiIGxpYnJhcnkgaW4gdGhlIGNvbnRleHQgb2YgMTk5NC4gMjAxNCBhIGNvbmZsaWN0aW5nCitsaWJyYXJ5IGxpYm5tIGFwcGVhcmVkIHRoYXQgaGFzIGEgbmV0d29yayBtYW5hZ2VyIGNvbnRleHQuCisKK1Vwc3RyZWFtLVN0YXR1czogQmFja3BvcnQgW2NvbW1pdCA0NzMyNzExZSBvbiBicmFuY2ggYmxlYWQsIHRhZyB2NS4yNS4wXQorCistLS0KKyBDb25maWd1cmUgfCAyICstCisgMSBmaWxlIGNoYW5nZWQsIDEgaW5zZXJ0aW9uKCspLCAxIGRlbGV0aW9uKC0pCisKK2RpZmYgLS1naXQgYS9Db25maWd1cmUgYi9Db25maWd1cmUKK2luZGV4IDBlNzFiNGIuLmNmYmRhYTEgMTAwNzU1CistLS0gYS9Db25maWd1cmUKKysrKyBiL0NvbmZpZ3VyZQorQEAgLTE0NjQsNyArMTQ2NCw3IEBAIGxpYnN3YW50ZWRfdXNlbGFyZ2VmaWxlcz0nJworIDogc2V0IHVzZXNvY2tzIG9uIHRoZSBDb25maWd1cmUgY29tbWFuZCBsaW5lIHRvIGVuYWJsZSBzb2Nrcy4KKyA6IExpc3Qgb2YgbGlicmFyaWVzIHdlIHdhbnQuCisgOiBJZiBhbnlvbmUgbmVlZHMgZXh0cmEgLWx4eHgsIHB1dCB0aG9zZSBpbiBhIGhpbnQgZmlsZS4KKy1saWJzd2FudGVkPSJjbCBwdGhyZWFkIHNvY2tldCBiaW5kIGluZXQgbnNsIG5tIG5kYm0gZ2RibSBkYm0gZGIgbWFsbG9jIGRsIGxkIgorK2xpYnN3YW50ZWQ9ImNsIHB0aHJlYWQgc29ja2V0IGJpbmQgaW5ldCBuc2wgbmRibSBnZGJtIGRibSBkYiBtYWxsb2MgZGwgbGQiCisgbGlic3dhbnRlZD0iJGxpYnN3YW50ZWQgc3VuIG0gY3J5cHQgc2VjIHV0aWwgYyBjcG9zaXggcG9zaXggdWNiIGJzZCBCU0QiCisgOiBXZSBwcm9iYWJseSB3YW50IHRvIHNlYXJjaCAvdXNyL3NobGliIGJlZm9yZSBtb3N0IG90aGVyIGxpYnJhcmllcy4KKyA6IFRoaXMgaXMgb25seSB1c2VkIGJ5IHRoZSBsaWIvRXh0VXRpbHMvTWFrZU1ha2VyLnBtIHJvdXRpbmUgZXh0bGlibGlzdC4KKy0tIAorMi45LjIKKwpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9wZXJsL3BlcmwvcGVybC10ZXN0LWN1c3RvbWl6ZWQucGF0Y2ggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3BlcmwvcGVybC9wZXJsLXRlc3QtY3VzdG9taXplZC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44NGIwYjg4Ci0tLSAvZGV2L251bGwKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9wZXJsL3BlcmwvcGVybC10ZXN0LWN1c3RvbWl6ZWQucGF0Y2gKQEAgLTAsMCArMSw2MSBAQAorVGhlIE9FIGNvcmUgcmVjaXBpZXMgY3VzdG9taXplIHNvbWUgRXh0VXRpbHMtTWFrZU1ha2VyIG1vZHVsZXMsCit3aGljaCBjYXVzZXMgdGhlaXIgTUQ1IHN1bSB0byBtaXNtYXRjaCB0aGUgcHJvdmlkZWQgdGFibGUgYW5kIHRoZQorY29ycmVzcG9uZGluZyB0ZXN0cyB0byBmYWlsLiBBbHNvLCB3ZSBwYXRjaCBzZXZlcmFsIHRlc3QgZmlsZXMgd2l0aAorYSBiYWNrcG9ydGVkIHBhdGNoLiBVcGRhdGUgbGlzdCBvZiBoYXNoZXMgdG8gcmVmbGVjdCB0aGUgcGF0Y2hlZCBmaWxlcy4KKworVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtlbWJlZGRlZCBzcGVjaWZpY10KKworU2lnbmVkLW9mZi1ieTogQmlsbCBSYW5kbGUgPHdpbGxpYW0uYy5yYW5kbGVAaW50ZWwuY29tPgorCitJbmRleDogcGVybC01LjIyLjEvdC9wb3J0aW5nL2N1c3RvbWl6ZWQuZGF0Cis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gcGVybC01LjIyLjEub3JpZy90L3BvcnRpbmcvY3VzdG9taXplZC5kYXQJMjAxNS0xMC0zMSAxMzozNjoxNi4wMDAwMDAwMDAgKzAwMDAKKysrKyBwZXJsLTUuMjIuMS90L3BvcnRpbmcvY3VzdG9taXplZC5kYXQJMjAxNi0wNi0wMiAxMjo1MDoxMC4zODEwMzAyMDQgLTA3MDAKK0BAIC0xLDggKzEsOCBAQAorIENQQU4gY3Bhbi9DUEFOL2xpYi9DUEFOLnBtIGNlNjJjNDNkNzJmMTAxYzAxMTE4NGRiYmM1OWUyMWMyNzkwODI2ZjAKKyBFeHRVdGlsczo6TWFrZU1ha2VyIGNwYW4vRXh0VXRpbHMtTWFrZU1ha2VyL2xpYi9FeHRVdGlscy9Db21tYW5kL01NLnBtIDdmNGRmZDBmZTg4NGJkNDI0MTJiY2YwNGNhODBlZjk3YjM5YzFkNTQKKyBFeHRVdGlsczo6TWFrZU1ha2VyIGNwYW4vRXh0VXRpbHMtTWFrZU1ha2VyL2xpYi9FeHRVdGlscy9MaWJsaXN0LnBtIGJlZjA5OTk4OGIxNWZiMGIyYTFmNWFjNDhjMDFhZjFmN2YzNmQzMjkKKy1FeHRVdGlsczo6TWFrZU1ha2VyIGNwYW4vRXh0VXRpbHMtTWFrZU1ha2VyL2xpYi9FeHRVdGlscy9MaWJsaXN0L0tpZC5wbSA4MTY4ZTE4ZjBlM2NlM2VjZTRiYjdlN2M3MmQ1N2VjMDdjNjdjNDAyCistRXh0VXRpbHM6Ok1ha2VNYWtlciBjcGFuL0V4dFV0aWxzLU1ha2VNYWtlci9saWIvRXh0VXRpbHMvTWFrZU1ha2VyLnBtIDcxMTVlOTdhNTM1NTljYjNlYzA2MWRkNmY3ZjM0NGU1MjI3MjRjNGEKKytFeHRVdGlsczo6TWFrZU1ha2VyIGNwYW4vRXh0VXRpbHMtTWFrZU1ha2VyL2xpYi9FeHRVdGlscy9MaWJsaXN0L0tpZC5wbSBhMDhlY2Y4MGM4ZjBhMjM0MjQzODE3NzEzYjJhNWFiMGRjYWUzYzBhCisrRXh0VXRpbHM6Ok1ha2VNYWtlciBjcGFuL0V4dFV0aWxzLU1ha2VNYWtlci9saWIvRXh0VXRpbHMvTWFrZU1ha2VyLnBtIDNkN2FiZDY3NGIxNWVkMzIzZjc0MzU5NGVmMGJkMDlkYjc2YjFhZWUKKyBFeHRVdGlsczo6TWFrZU1ha2VyIGNwYW4vRXh0VXRpbHMtTWFrZU1ha2VyL2xpYi9FeHRVdGlscy9NYWtlTWFrZXIvQ29uZmlnLnBtIGY4ZGI4ZDQyNDViZjA2ODRiODIxMGM4MTFmNTBkN2NmYjFhMjdkNzgKKyBFeHRVdGlsczo6TWFrZU1ha2VyIGNwYW4vRXh0VXRpbHMtTWFrZU1ha2VyL2xpYi9FeHRVdGlscy9NYWtlTWFrZXIvRkFRLnBvZCA3NTdiZmZiNDc4NTc1MjEzMTFmOGYzYmRlNDNlYmUxNjVmOGQ1MTkxCisgRXh0VXRpbHM6Ok1ha2VNYWtlciBjcGFuL0V4dFV0aWxzLU1ha2VNYWtlci9saWIvRXh0VXRpbHMvTWFrZU1ha2VyL0xvY2FsZS5wbSA4MmJlMDY4NTFkZWI4NGM2NDE5YWQwMDNjZTliNmQxOTU3ZjM5NWYzCitAQCAtMTQsNyArMTQsNyBAQAorIEV4dFV0aWxzOjpNYWtlTWFrZXIgY3Bhbi9FeHRVdGlscy1NYWtlTWFrZXIvbGliL0V4dFV0aWxzL01rc3ltbGlzdHMucG0gYWI4MDAyOWFiMTZkMzhkNGYyZTQxZGM4OGQyY2ViOWYzNzkwZTQ3NworIEV4dFV0aWxzOjpNYWtlTWFrZXIgY3Bhbi9FeHRVdGlscy1NYWtlTWFrZXIvbGliL0V4dFV0aWxzL01NLnBtIDQ1M2UwYWJiYzRiYjM4ZGI0YzA4MjBhZDVjNDg0NmYzMTNiNjYyOTEKKyBFeHRVdGlsczo6TWFrZU1ha2VyIGNwYW4vRXh0VXRpbHMtTWFrZU1ha2VyL2xpYi9FeHRVdGlscy9NTV9BSVgucG0gYzFiMWJhYmRhOGY0M2FlN2EyY2FiYTFjYjRmNzBmOTJhZjVhMGUzNAorLUV4dFV0aWxzOjpNYWtlTWFrZXIgY3Bhbi9FeHRVdGlscy1NYWtlTWFrZXIvbGliL0V4dFV0aWxzL01NX0FueS5wbSA2ZjkwZDk0YWQzZTdhYTAwNDVhM2IxYTEwYTFiYjE4MzkxZjg5ZjU3CisrRXh0VXRpbHM6Ok1ha2VNYWtlciBjcGFuL0V4dFV0aWxzLU1ha2VNYWtlci9saWIvRXh0VXRpbHMvTU1fQW55LnBtIDIxYmRlNTMyOTBiZjFhNGRhNDQ1NzI5MGI2NWJkMWIwY2E2ZjFkMTYKKyBFeHRVdGlsczo6TWFrZU1ha2VyIGNwYW4vRXh0VXRpbHMtTWFrZU1ha2VyL2xpYi9FeHRVdGlscy9NTV9CZU9TLnBtIGNhYjJiM2NlMDhiNzFhNGNlODlhYTYzMGYyMzZlYjA4Yjg1MjQzOWQKKyBFeHRVdGlsczo6TWFrZU1ha2VyIGNwYW4vRXh0VXRpbHMtTWFrZU1ha2VyL2xpYi9FeHRVdGlscy9NTV9DeWd3aW4ucG0gNjFmY2VkMGZhZjUxOGJmODdjMjY1ZmNiNTFlZDMzMGJhMzU0NjIzZgorIEV4dFV0aWxzOjpNYWtlTWFrZXIgY3Bhbi9FeHRVdGlscy1NYWtlTWFrZXIvbGliL0V4dFV0aWxzL01NX0Rhcndpbi5wbSBhZTBlZjUxYTdiNmRkMGIwNWFhNjFjNzc5ZGY3MTY3ZGRhNWY1MTE5CitAQCAtMjMsNyArMjMsNyBAQAorIEV4dFV0aWxzOjpNYWtlTWFrZXIgY3Bhbi9FeHRVdGlscy1NYWtlTWFrZXIvbGliL0V4dFV0aWxzL01NX05XNS5wbSA0MzMxMzVlZWNiODViNGIxZDkwZDMwMjc0MzJmMzI5NDM2Yzc4NDQ3CisgRXh0VXRpbHM6Ok1ha2VNYWtlciBjcGFuL0V4dFV0aWxzLU1ha2VNYWtlci9saWIvRXh0VXRpbHMvTU1fT1MyLnBtIDFmYmI1NjA1YmZiNDdmZWVlNDA4M2ZlYmE4YWE4NWU2NTk2MjhmNzAKKyBFeHRVdGlsczo6TWFrZU1ha2VyIGNwYW4vRXh0VXRpbHMtTWFrZU1ha2VyL2xpYi9FeHRVdGlscy9NTV9RTlgucG0gNWI2NmQxZjQ4NWE2MDM0ZDk2ZmMyNGJhMTY2NWIxYmFkOWU0NDdmMQorLUV4dFV0aWxzOjpNYWtlTWFrZXIgY3Bhbi9FeHRVdGlscy1NYWtlTWFrZXIvbGliL0V4dFV0aWxzL01NX1VuaXgucG0gOGNlZjk5YTliZDM3MGVjZmQwN2RkYjBlZmJkY2JiNDEwMTI1NWU0NQorK0V4dFV0aWxzOjpNYWtlTWFrZXIgY3Bhbi9FeHRVdGlscy1NYWtlTWFrZXIvbGliL0V4dFV0aWxzL01NX1VuaXgucG0gODYwZDUyMDIzNGQ3YzkwMzZkOTFmMGIxNDNhMWRkZGYyYTVlOGNiNworIEV4dFV0aWxzOjpNYWtlTWFrZXIgY3Bhbi9FeHRVdGlscy1NYWtlTWFrZXIvbGliL0V4dFV0aWxzL01NX1VXSU4ucG0gOTM5NTcyZmRlM2Q1OWJhNzdjMmU2NzdmZTJkZjJiZWQ0YmVkNTg5OAorIEV4dFV0aWxzOjpNYWtlTWFrZXIgY3Bhbi9FeHRVdGlscy1NYWtlTWFrZXIvbGliL0V4dFV0aWxzL01NX1ZNUy5wbSAwOWMyMDQ5YmZkMjViNzM1ZTJhNWJjZjU2YTZjZmY3YjQ4MjdmOWM4CisgRXh0VXRpbHM6Ok1ha2VNYWtlciBjcGFuL0V4dFV0aWxzLU1ha2VNYWtlci9saWIvRXh0VXRpbHMvTU1fVk9TLnBtIGQ2NWQ2M2Y4MjE3YTU1YzM2ZjYyZTI0OTgxNDk4ODk3NGY1OTNjNzkKK0BAIC0zMSw4ICszMSwxNiBAQAorIEV4dFV0aWxzOjpNYWtlTWFrZXIgY3Bhbi9FeHRVdGlscy1NYWtlTWFrZXIvbGliL0V4dFV0aWxzL01NX1dpbjk1LnBtIDEyZGYzOGVhY2NlZWVkNzNjYWI5NGM0MjMyMzZiZmFlZDBmYmJmZWMKKyBFeHRVdGlsczo6TWFrZU1ha2VyIGNwYW4vRXh0VXRpbHMtTWFrZU1ha2VyL2xpYi9FeHRVdGlscy9NWS5wbSAyMmZlOTU5NmEwMjM3MjUyZjQ1Mzk5YTM2YWJjODNiNzgxM2JjMzI4CisgRXh0VXRpbHM6Ok1ha2VNYWtlciBjcGFuL0V4dFV0aWxzLU1ha2VNYWtlci9saWIvRXh0VXRpbHMvdGVzdGxpYi5wbSA3ZmJjNDJjYTJlYmM2YzY3N2I3OWFlNWZkNTY0NzI0M2NmMDY5NDYzCistRXh0VXRpbHM6Ok1ha2VNYWtlciBjcGFuL0V4dFV0aWxzLU1ha2VNYWtlci90L2Jhc2ljLnQgNmNkYzc3MDFiNTBlNTg2YmM5YzRjZmIxNjE2ZGU4ZWIwYjFiYWYzNAorLUV4dFV0aWxzOjpNYWtlTWFrZXIgY3Bhbi9FeHRVdGlscy1NYWtlTWFrZXIvdC9wbV90b19ibGliLnQgNzFlYmNlZTM1NTY5MWNlMzc0ZmNhZDI1MWIxMmQ4YjI0MTI0NjJiMworK0V4dFV0aWxzOjpNYWtlTWFrZXIgY3Bhbi9FeHRVdGlscy1NYWtlTWFrZXIvdC9iYXNpYy50IGQ3OGZkZWM3YTQ1MTJkYzhkMmE3YWJkNjJiODEwNDUzMGFmOGVjZjkKKytFeHRVdGlsczo6TWFrZU1ha2VyIGNwYW4vRXh0VXRpbHMtTWFrZU1ha2VyL3QvZWNoby50IDk0MjdmNGFkZWJiYjEzYjU3YjRhNzZmZWYyOTcyYWRmNjNjOWJkOTYKKytFeHRVdGlsczo6TWFrZU1ha2VyIGNwYW4vRXh0VXRpbHMtTWFrZU1ha2VyL3QvSU5TVEFMTF9CQVNFLnQgZWYzNTZjMTk2YmI1YzNjNDI4YWUzMDlkN2Y5ODliZGQ2ZDc5Yjg2ZAorK0V4dFV0aWxzOjpNYWtlTWFrZXIgY3Bhbi9FeHRVdGlscy1NYWtlTWFrZXIvdC9JTlNUX1BSRUZJWC50IDNlNmQ0ZDZlYjJlYWI0MmU5ODNhYzcwZWI1NzM3YTc1OWFmMDkxNmYKKytFeHRVdGlsczo6TWFrZU1ha2VyIGNwYW4vRXh0VXRpbHMtTWFrZU1ha2VyL3QvSU5TVC50IGU1NTNmYTBkNTNjODk0YzhkMzZhYWZiNjllZGQ1NWIzOGE5MzU1ZjgKKytFeHRVdGlsczo6TWFrZU1ha2VyIGNwYW4vRXh0VXRpbHMtTWFrZU1ha2VyL3QvbWluX3BlcmxfdmVyc2lvbi50IGU5MzBlYzkyMTdkZTVhMTc4NWQwMjQ3YzMwYjE1OWU2ZjdmNTY3M2YKKytFeHRVdGlsczo6TWFrZU1ha2VyIGNwYW4vRXh0VXRpbHMtTWFrZU1ha2VyL3QvUExfRklMRVMudCA3ZTQ5YWI2YzRkNDY3ODI2ZDIyMDIzZmEwM2Q3N2I4NWY5MzViNThlCisrRXh0VXRpbHM6Ok1ha2VNYWtlciBjcGFuL0V4dFV0aWxzLU1ha2VNYWtlci90L3BtX3RvX2JsaWIudCBhMDRjOTZlZWNmYWIxN2U0MDk0NjA0ZTBmYjk5OGRkOTNjZjkzYjkzCisrRXh0VXRpbHM6Ok1ha2VNYWtlciBjcGFuL0V4dFV0aWxzLU1ha2VNYWtlci90L3JlY3Vycy50IDk0Y2NlM2JmZjg3NWE4NzhlZDI3ODE2YjNmNWRmMmNhNDIyNWM3MTQKKytFeHRVdGlsczo6TWFrZU1ha2VyIGNwYW4vRXh0VXRpbHMtTWFrZU1ha2VyL3Qvc2V2ZXJhbF9hdXRob3JzLnQgZjgxMWQ5OTNjMDgzNWM2NmRjNTAxZWQ1NTA4M2FjYjI5YmYzM2JmNworIFRleHQ6OlBhcnNlV29yZHMgY3Bhbi9UZXh0LVBhcnNlV29yZHMvdC9QYXJzZVdvcmRzLnQgOWJhZTUxYzliOTQ0Y2Q1YzBiYmFiZTlkMzk3ZTU3Mzk3NmEyYmU4ZQorIFdpbjMyQVBJOjpGaWxlIGNwYW4vV2luMzJBUEktRmlsZS9idWZmZXJzLmggMDJkMjMwYWM5YWM3MDkxMzY1MTI4MTYxYTBlZDY3MTg5OGJhZWZhZQorIFdpbjMyQVBJOjpGaWxlIGNwYW4vV2luMzJBUEktRmlsZS9jRmlsZS5oIGZjYTdlMzgzZTc2OTc5YzNhYzNhZGYxMmQxMWQxYmNkMjYxOGU0ODkKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcGVybC9wZXJsXzUuMjIuMS5iYiBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcGVybC9wZXJsXzUuMjIuMS5iYgppbmRleCBiZjhiM2I2Li43OTJhNjViIDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3BlcmwvcGVybF81LjIyLjEuYmIKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9wZXJsL3BlcmxfNS4yMi4xLmJiCkBAIC02Myw2ICs2MywxMiBAQAogICAgICAgICBmaWxlOi8vZXh0LU9EQk1fRmlsZS10LW9kYm0udC1maXgtdGhlLXBhdGgtb2YtZGJtdF9jb21tb24ucC5wYXRjaCBcCiAgICAgICAgIGZpbGU6Ly9wZXJsLVBhdGhUb29scy1kb24tdC1maWx0ZXItb3V0LWJsaWItZnJvbS1JTkMucGF0Y2ggXAogICAgICAgICBmaWxlOi8vcGVybC1lcnJuby1nZW5lcmF0aW9uLWdjYzUucGF0Y2ggXAorICAgICAgICBmaWxlOi8vcGVybC1maXgtY29uZmxpY3QtYmV0d2Vlbi1za2lwX2FsbC1hbmQtRU5ELnBhdGNoIFwKKyAgICAgICAgZmlsZTovL3BlcmwtdGVzdC1jdXN0b21pemVkLnBhdGNoIFwKKyAgICAgICAgZmlsZTovL3BlcmwtZml4LUNWRS0yMDE2LTIzODEucGF0Y2ggXAorICAgICAgICBmaWxlOi8vcGVybC1maXgtQ1ZFLTIwMTYtNjE4NS5wYXRjaCBcCisgICAgICAgIGZpbGU6Ly9wZXJsLWZpeC1DVkUtMjAxNS04NjA3LnBhdGNoIFwKKyAgICAgICAgZmlsZTovL3BlcmwtZml4LUNWRS0yMDE2LTEyMzgucGF0Y2ggXAogIgogCiAjIEZpeCB0ZXN0IGNhc2UgaXNzdWVzCkBAIC0zNDAsNyArMzQ2LDkgQEAKIEFMTE9XX0VNUFRZX3BlcmwtbW9kdWxlcyA9ICIxIgogUEFDS0FHRVNfYXBwZW5kID0gIiBwZXJsLW1vZHVsZXMgIgogCi1weXRob24gcG9wdWxhdGVfcGFja2FnZXNfcHJlcGVuZCAoKSB7CitQQUNLQUdFU1BMSVRGVU5DU19wcmVwZW5kID0gInNwbGl0X3BlcmxfcGFja2FnZXMgIgorCitweXRob24gc3BsaXRfcGVybF9wYWNrYWdlcyAoKSB7CiAgICAgbGliZGlyID0gZC5leHBhbmQoJyR7bGliZGlyfS9wZXJsLyR7UFZ9JykKICAgICBkb19zcGxpdF9wYWNrYWdlcyhkLCBsaWJkaXIsICdhdXRvLyhbXi5dKikvW14vXSpcLihzb3xsZHxpeHxhbCknLCAncGVybC1tb2R1bGUtJXMnLCAncGVybCBtb2R1bGUgJXMnLCByZWN1cnNpdmU9VHJ1ZSwgbWF0Y2hfcGF0aD1UcnVlLCBwcmVwZW5kPUZhbHNlKQogICAgIGRvX3NwbGl0X3BhY2thZ2VzKGQsIGxpYmRpciwgJ01vZHVsZS8oW15cL10qKVwucG0nLCAncGVybC1tb2R1bGUtJXMnLCAncGVybCBtb2R1bGUgJXMnLCByZWN1cnNpdmU9VHJ1ZSwgYWxsb3dfZGlycz1GYWxzZSwgbWF0Y2hfcGF0aD1UcnVlLCBwcmVwZW5kPUZhbHNlKQpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9wa2djb25maWcvcGtnY29uZmlnLzAwMDEtZ2RhdGUtTW92ZS13YXJuaW5nLXByYWdtYS1vdXRzaWRlLW9mLWZ1bmN0aW9uLnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9wa2djb25maWcvcGtnY29uZmlnLzAwMDEtZ2RhdGUtTW92ZS13YXJuaW5nLXByYWdtYS1vdXRzaWRlLW9mLWZ1bmN0aW9uLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE0YzgyOTMKLS0tIC9kZXYvbnVsbAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3BrZ2NvbmZpZy9wa2djb25maWcvMDAwMS1nZGF0ZS1Nb3ZlLXdhcm5pbmctcHJhZ21hLW91dHNpZGUtb2YtZnVuY3Rpb24ucGF0Y2gKQEAgLTAsMCArMSwzOSBAQAorRnJvbSA5NDZkMzYyNjZkOGEzMGYwNGZlMzRkMzE4M2JmNDkyOTE0MTkzNGQyIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogY295cHUgPGNveXB1QHNkZi5vcmc+CitEYXRlOiBXZWQsIDIgTWFyIDIwMTYgMTk6Mzg6NDggKzAyMDAKK1N1YmplY3Q6IFtQQVRDSF0gZ2RhdGU6IE1vdmUgd2FybmluZyBwcmFnbWEgb3V0c2lkZSBvZiBmdW5jdGlvbgorCitDb21taXQgMDgxN2FmNDBlOGM3NGM3MjFjMzBmNmVmNDgyYjFmNTNkMTIwNDRjNyBicmVha3MgdGhlIGJ1aWxkIG9uCitvbGRlciB2ZXJzaW9ucyBvZiBHQ0MsIHdoaWNoIGRvbid0IGFsbG93IHByYWdtYSBpbnNpZGUgZnVuY3Rpb25zLgorCitodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy83NjE1NTAKKy0tLQorVXBzdHJlYW0tU3RhdHVzOiBCYWNrcG9ydAorU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KKworIGdsaWIvZ2xpYi9nZGF0ZS5jIHwgNSArKysrKworIDEgZmlsZSBjaGFuZ2VkLCA1IGluc2VydGlvbnMoKykKKworZGlmZiAtLWdpdCBhL2dsaWIvZ2xpYi9nZGF0ZS5jIGIvZ2xpYi9nbGliL2dkYXRlLmMKK2luZGV4IDE5NzhjZjcuLjIwZTZjNGEgMTAwNjQ0CistLS0gYS9nbGliL2dsaWIvZ2RhdGUuYworKysrIGIvZ2xpYi9nbGliL2dkYXRlLmMKK0BAIC0yNDM5LDYgKzI0MzksOSBAQCB3aW4zMl9zdHJmdGltZV9oZWxwZXIgKGNvbnN0IEdEYXRlICAgICAqZCwKKyAgKgorICAqIFJldHVybnM6IG51bWJlciBvZiBjaGFyYWN0ZXJzIHdyaXR0ZW4gdG8gdGhlIGJ1ZmZlciwgb3IgMCB0aGUgYnVmZmVyIHdhcyB0b28gc21hbGwKKyAgKi8KKysjcHJhZ21hIEdDQyBkaWFnbm9zdGljIHB1c2gKKysjcHJhZ21hIEdDQyBkaWFnbm9zdGljIGlnbm9yZWQgIi1XZm9ybWF0LW5vbmxpdGVyYWwiCisrCisgZ3NpemUgICAgIAorIGdfZGF0ZV9zdHJmdGltZSAoZ2NoYXIgICAgICAgKnMsIAorICAgICAgICAgICAgICAgICAgZ3NpemUgICAgICAgIHNsZW4sIAorQEAgLTI1NDksMyArMjU1Miw1IEBAIGdfZGF0ZV9zdHJmdGltZSAoZ2NoYXIgICAgICAgKnMsCisgICByZXR1cm4gcmV0dmFsOworICNlbmRpZgorIH0KKysKKysjcHJhZ21hIEdDQyBkaWFnbm9zdGljIHBvcAorLS0gCisxLjkuMQorCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3BrZ2NvbmZpZy9wa2djb25maWcvMDAwMS1nbGliLWdldHRleHQubTQtVXBkYXRlLUFNX0dMSUJfR05VX0dFVFRFWFQtdG8tbWF0Y2gtLnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9wa2djb25maWcvcGtnY29uZmlnLzAwMDEtZ2xpYi1nZXR0ZXh0Lm00LVVwZGF0ZS1BTV9HTElCX0dOVV9HRVRURVhULXRvLW1hdGNoLS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MDMxMGNkCi0tLSAvZGV2L251bGwKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9wa2djb25maWcvcGtnY29uZmlnLzAwMDEtZ2xpYi1nZXR0ZXh0Lm00LVVwZGF0ZS1BTV9HTElCX0dOVV9HRVRURVhULXRvLW1hdGNoLS5wYXRjaApAQCAtMCwwICsxLDQxIEBACitGcm9tIGU0MDRlMjdkZTc3ZDhiOTkzYzRjYzg3MDEzZDcwNzIwMGIzYTU1NDcgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBKdXNzaSBLdWtrb25lbiA8anVzc2kua3Vra29uZW5AaW50ZWwuY29tPgorRGF0ZTogVHVlLCAxNyBNYXkgMjAxNiAxMzoyNjoyNyArMDMwMAorU3ViamVjdDogW1BBVENIXSBnbGliLWdldHRleHQubTQ6IFVwZGF0ZSBBTV9HTElCX0dOVV9HRVRURVhUIHRvIG1hdGNoIGdsaWIKKworVGhpcyBhdm9pZHMKKyAgZXJyb3I6IG00X2NvcHk6IHdvbid0IG92ZXJ3cml0ZSBkZWZpbmVkIG1hY3JvOiBnbGliX0RFRlVOCisKK1NpZ25lZC1vZmYtYnk6IEp1c3NpIEt1a2tvbmVuIDxqdXNzaS5rdWtrb25lbkBpbnRlbC5jb20+CitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworLS0tCisgZ2xpYi9tNG1hY3Jvcy9nbGliLWdldHRleHQubTQgfCA1ICsrKy0tCisgMSBmaWxlIGNoYW5nZWQsIDMgaW5zZXJ0aW9ucygrKSwgMiBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL2dsaWIvbTRtYWNyb3MvZ2xpYi1nZXR0ZXh0Lm00IGIvZ2xpYi9tNG1hY3Jvcy9nbGliLWdldHRleHQubTQKK2luZGV4IDUyMTdmZDguLjE1NWIxZDggMTAwNjQ0CistLS0gYS9nbGliL200bWFjcm9zL2dsaWItZ2V0dGV4dC5tNAorKysrIGIvZ2xpYi9tNG1hY3Jvcy9nbGliLWdldHRleHQubTQKK0BAIC0zMTMsNyArMzEzLDcgQEAgbXNnc3RyICIiCisgIyBvbiB2YXJpb3VzIHZhcmlhYmxlcyBuZWVkZWQgYnkgdGhlIE1ha2VmaWxlLmluLmluIGluc3RhbGxlZCBieSAKKyAjIGdsaWItZ2V0dGV4dGl6ZS4KKyBkbmwKKy1nbGliX0RFRlVOKFtHTElCX0dOVV9HRVRURVhUXSwKKytBVV9ERUZVTihbR0xJQl9HTlVfR0VUVEVYVF0sCisgICBbQUNfUkVRVUlSRShbQUNfUFJPR19DQ10pZG5sCisgICAgCisgICAgR0xJQl9MQ19NRVNTQUdFUworQEAgLTM4Myw3ICszODMsOCBAQCBnbGliX0RFRlVOKFtHTElCX0dOVV9HRVRURVhUXSwKKyAgICBybSAtZiBwby9QT1RGSUxFUworICAgIHNlZCAtZSAiL14jL2QiIC1lICIvXlwkL2QiIC1lICJzLC4qLAkkcG9zcmNwcmVmaXgmIFxcXFwsIiAtZSAiXCRzL1woLipcKSBcXFxcL1wxLyIgXAorIAk8ICRzcmNkaXIvcG8vUE9URklMRVMuaW4gPiBwby9QT1RGSUxFUworLSAgXSkKKysgIF0sCisrICBbWyQwOiBUaGlzIG1hY3JvIGlzIGRlcHJlY2F0ZWQuIFlvdSBzaG91bGQgdXNlIHVwc3RyZWFtIGdldHRleHQgaW5zdGVhZC5dXSkKKyAKKyAjIEFNX0dMSUJfREVGSU5FX0xPQ0FMRURJUihWQVJJQUJMRSkKKyAjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0tIAorMi4xLjQKKwpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9wa2djb25maWcvcGtnY29uZmlnX2dpdC5iYiBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcGtnY29uZmlnL3BrZ2NvbmZpZ19naXQuYmIKaW5kZXggZDM0ZjYwOC4uZmY4MjU0YyAxMDA2NDQKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9wa2djb25maWcvcGtnY29uZmlnX2dpdC5iYgorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3BrZ2NvbmZpZy9wa2djb25maWdfZ2l0LmJiCkBAIC0xMiwxMiArMTIsMTQgQEAKIERFUEVORFNfY2xhc3MtbmF0aXZlID0gIiIKIERFUEVORFNfY2xhc3MtbmF0aXZlc2RrID0gIiIKIAotU1JDUkVWID0gIjU5MTRlZGZlOTYwNGFiZmVkZDIyMDEwM2NiYWMzODJmYzRkMjY4YmIiCi1QViA9ICIwLjI5K2dpdCR7U1JDUFZ9IgorU1JDUkVWID0gIjg3MTUyYzA1YmU4OGNhOGJlNzFhM2E1NjNmMjc1YjM2ODZkMzJjMjgiCitQViA9ICIwLjI5LjErZ2l0JHtTUkNQVn0iCiAKIFNSQ19VUkkgPSAiZ2l0Oi8vYW5vbmdpdC5mcmVlZGVza3RvcC5vcmcvcGtnLWNvbmZpZyBcCiAgICAgICAgICAgIGZpbGU6Ly9wa2ctY29uZmlnLW5hdGl2ZS5pbiBcCiAgICAgICAgICAgIGZpbGU6Ly9maXgtZ2xpYi1jb25maWd1cmUtbGlidG9vbC11c2FnZS5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly8wMDAxLWdkYXRlLU1vdmUtd2FybmluZy1wcmFnbWEtb3V0c2lkZS1vZi1mdW5jdGlvbi5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly8wMDAxLWdsaWItZ2V0dGV4dC5tNC1VcGRhdGUtQU1fR0xJQl9HTlVfR0VUVEVYVC10by1tYXRjaC0ucGF0Y2ggXAogICAgICAgICAgICAiCiAKIFMgPSAiJHtXT1JLRElSfS9naXQiCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3ByZWxpbmsvcHJlbGlua19naXQuYmIgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3ByZWxpbmsvcHJlbGlua19naXQuYmIKaW5kZXggZTIyM2VmNi4uMDg1NmIxYyAxMDA2NDQKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9wcmVsaW5rL3ByZWxpbmtfZ2l0LmJiCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHJlbGluay9wcmVsaW5rX2dpdC5iYgpAQCAtOCw3ICs4LDcgQEAKIHJ1bnRpbWUgYW5kIHRodXMgcHJvZ3JhbXMgY29tZSB1cCBmYXN0ZXIuIgogTElDRU5TRSA9ICJHUEx2MiIKIExJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PWM5M2MwNTUwYmQzMTczZjQ1MDRiMmNiZDg5OTFlNTBiIgotU1JDUkVWID0gIjkyNzk3OWJiZDExNWVlYjhhNzVkYjMyMzE5MDZlZjZhY2E0YzRlYjYiCitTUkNSRVYgPSAiZWYyMDYyOGRkNzhiOTJlMWEzMTIzYWZjNjdiNjRjZjAxMGJkZDllNCIKIFBWID0gIjEuMCtnaXQke1NSQ1BWfSIKIAogIwpAQCAtNDQsNiArNDQsOTkgQEAKIEVYVFJBX09FQ09ORiA9ICItLWRpc2FibGUtc2VsaW51eCAtLXdpdGgtcGtndmVyc2lvbj0ke1BWfS0ke1BSfSBcCiAJLS13aXRoLWJ1Z3VybD1odHRwOi8vYnVnemlsbGEueW9jdG9wcm9qZWN0Lm9yZy8iCiAKKworIworIyBGb3IgdGFyZ2V0IHByZWxpbmsgd2UgbmVlZCB0byBlbnN1cmUgcGF0aHMgbWF0Y2ggdGhlIGxpYiBwYXRoIGxheW91dAorIyBpbmNsdWRpbmcgZm9yIGFueSBjb25maWd1cmVkIG11bHRpbGlicworIworcHl0aG9uIGRvX2xpbmtlcnBhdGhzICgpIHsKKyAgICB2YWx1ZXMgPSBhbGxfbXVsdGlsaWJfdHVuZV9saXN0KFsiVFVORV9BUkNIIiwgImJhc2VsaWIiLCAiQUJJRVhURU5TSU9OIl0sIGQpCisKKyAgICBhcmNoZXMgPSB2YWx1ZXNbIlRVTkVfQVJDSCJdCisgICAgYmFzZWxpYnMgPSB2YWx1ZXNbImJhc2VsaWIiXQorICAgIGFiaXMgPSB2YWx1ZXNbIkFCSUVYVEVOU0lPTiJdCisKKyAgICBkZWYgcmVwbGFjZV9saW5lcyhmLCBzZWFyY2gsIHJlcGxhY2VtZW50LCBkLCBmaXJzdG9ubHkgPSBGYWxzZSwgc2Vjb25kb25seSA9IEZhbHNlKToKKyAgICAgICAgZiA9IGQuZXhwYW5kKGYpCisgICAgICAgIGlmIHNlYXJjaCA9PSByZXBsYWNlbWVudDoKKyAgICAgICAgICAgIHJldHVybgorICAgICAgICBiYi5kZWJ1ZygyLCAiUmVwbGFjaW5nICVzIHdpdGggJXMgaW4gJXMiICUgKHNlYXJjaCwgcmVwbGFjZW1lbnQsIGYpKQorICAgICAgICB3aXRoIG9wZW4oZiwgInIiKSBhcyBkYXRhOgorICAgICAgICAgICAgbGluZXMgPSBkYXRhLnJlYWRsaW5lcygpCisgICAgICAgIHdpdGggb3BlbihmLCAidyIpIGFzIGRhdGE6CisgICAgICAgICAgICBmb3IgbGluZSBpbiBsaW5lczoKKyAgICAgICAgICAgICAgICBpZiBub3Qgc2Vjb25kb25seSBhbmQgbm90IGZpcnN0b25seToKKyAgICAgICAgICAgICAgICAgICAgbGluZSA9IGxpbmUucmVwbGFjZShzZWFyY2gsIHJlcGxhY2VtZW50KQorICAgICAgICAgICAgICAgIGVsaWYgc2Vjb25kb25seSBhbmQgc2VhcmNoIGluIGxpbmU6CisgICAgICAgICAgICAgICAgICAgIHNlY29uZG9ubHkgPSBGYWxzZQorICAgICAgICAgICAgICAgIGVsaWYgZmlyc3Rvbmx5IGFuZCBzZWFyY2ggYW5kIHNlYXJjaCBpbiBsaW5lOgorICAgICAgICAgICAgICAgICAgICBsaW5lID0gbGluZS5yZXBsYWNlKHNlYXJjaCwgcmVwbGFjZW1lbnQpCisgICAgICAgICAgICAgICAgICAgIHNlYXJjaCA9IE5vbmUKKyAgICAgICAgICAgICAgICBkYXRhLndyaXRlKGxpbmUpCisKKyAgICBkZWYgcmVwbGFjZV9saW5lc19ydGxkKGYsIHNlYXJjaCwgcmVwbGFjZW1lbnQsIHNlY3Rpb24sIGQpOgorICAgICAgICBmID0gZC5leHBhbmQoZikKKyAgICAgICAgYmIuZGVidWcoMiwgIlJlcGxhY2luZyAlcyB3aXRoICVzIGluICVzIiAlIChzZWFyY2gsIHJlcGxhY2VtZW50LCBmKSkKKyAgICAgICAgd2l0aCBvcGVuKGYsICJyIikgYXMgZGF0YToKKyAgICAgICAgICAgIGxpbmVzID0gZGF0YS5yZWFkbGluZXMoKQorICAgICAgICBmb3VuZCA9IEZhbHNlCisgICAgICAgIGZvdW5kMiA9IEZhbHNlCisgICAgICAgIHdpdGggb3BlbihmLCAidyIpIGFzIGRhdGE6CisgICAgICAgICAgICBmb3IgbGluZSBpbiBsaW5lczoKKyAgICAgICAgICAgICAgICBpZiBzZWN0aW9uIGluIGxpbmU6CisgICAgICAgICAgICAgICAgICAgIGlmIHNlY3Rpb24gPT0gImVsc2UiIGFuZCAiaWYiIGluIGxpbmU6CisgICAgICAgICAgICAgICAgICAgICAgICBmb3VuZCA9IEZhbHNlCisgICAgICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgICAgICBmb3VuZCA9IFRydWUKKyAgICAgICAgICAgICAgICBpZiBmb3VuZCBhbmQgImRzdF9MSUIgPSIgaW4gbGluZToKKyAgICAgICAgICAgICAgICAgICAgZm91bmQyID0gVHJ1ZQorICAgICAgICAgICAgICAgIGVsaWYgIn0iIGluIGxpbmU6CisgICAgICAgICAgICAgICAgICAgIGZvdW5kID0gRmFsc2UKKyAgICAgICAgICAgICAgICAgICAgZm91bmQyID0gRmFsc2UKKyAgICAgICAgICAgICAgICBpZiBmb3VuZDI6CisgICAgICAgICAgICAgICAgICAgIGxpbmUgPSBsaW5lLnJlcGxhY2Uoc2VhcmNoLCByZXBsYWNlbWVudCkKKyAgICAgICAgICAgICAgICBkYXRhLndyaXRlKGxpbmUpCisKKyAgICBmb3IgaSwgYXJjaCBpbiBlbnVtZXJhdGUoYXJjaGVzKToKKyAgICAgICAgdHVuZV9iYXNlbGliID0gYmFzZWxpYnNbaV0KKyAgICAgICAgYWJpID0gYWJpc1tpXQorCisgICAgICAgIGJpdHMgPSAzMgorICAgICAgICBpZiBhcmNoID09ICJwb3dlcnBjIjoKKyAgICAgICAgICAgIHJlcGxhY2VfbGluZXMoIiR7U30vc3JjL2FyY2gtcHBjLmMiLCAiL2xpYi9sZC5zby4xIiwgIi8iICsgdHVuZV9iYXNlbGliICsgIi9sZC5zby4xIiwgZCkKKyAgICAgICAgZWxpZiBhcmNoID09ICJwb3dlcnBjNjQiOgorICAgICAgICAgICAgcmVwbGFjZV9saW5lcygiJHtTfS9zcmMvYXJjaC1wcGM2NC5jIiwgIi9saWI2NC9sZDY0LnNvLjEiLCAiLyIgKyB0dW5lX2Jhc2VsaWIgKyAiL2xkNjQuc28uMSIsIGQpCisgICAgICAgICAgICBiaXRzID0gNjQKKyAgICAgICAgZWxpZiBhcmNoID09ICJ4ODZfNjQiOgorICAgICAgICAgICAgaWYgYWJpID09ICJ4MzIiOgorICAgICAgICAgICAgICAgIHJlcGxhY2VfbGluZXMoIiR7U30vc3JjL2FyY2gteDg2XzY0LmMiLCAiL2xpYngzMi9sZC1saW51eC14MzIuc28uMiIsICIvIiArIHR1bmVfYmFzZWxpYiArICIvbGQtbGludXgteDMyLnNvLjIiLCBkKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICByZXBsYWNlX2xpbmVzKCIke1N9L3NyYy9hcmNoLXg4Nl82NC5jIiwgIi9saWI2NC9sZC1saW51eC14ODYtNjQuc28uMiIsICIvIiArIHR1bmVfYmFzZWxpYiArICIvbGQtbGludXgteDg2LTY0LnNvLjIiLCBkKQorICAgICAgICAgICAgYml0cyA9IDY0CisgICAgICAgIGVsaWYgYXJjaCA9PSAiYXJtIjoKKyAgICAgICAgICAgIHJlcGxhY2VfbGluZXMoIiR7U30vc3JjL2FyY2gtYXJtLmMiLCAiL2xpYi9sZC1saW51eC5zby4zIiwgIi8iICsgdHVuZV9iYXNlbGliICsgIi9sZC1saW51eC5zby4zIiwgZCkKKyAgICAgICAgICAgIHJlcGxhY2VfbGluZXMoIiR7U30vc3JjL2FyY2gtYXJtLmMiLCAiL2xpYi9sZC1saW51eC1hcm1oZi5zby4zIiwgIi8iICsgdHVuZV9iYXNlbGliICsgIi9sZC1saW51eC1hcm1oZi5zby4zIiwgZCkKKyAgICAgICAgZWxpZiBhcmNoID09ICJtaXBzIiBvciBhcmNoID09ICJtaXBzZWwiOgorICAgICAgICAgICAgcmVwbGFjZV9saW5lcygiJHtTfS9zcmMvYXJjaC1taXBzLmMiLCAiL2xpYi9sZC5zby4xIiwgIi8iICsgdHVuZV9iYXNlbGliICsgIi9sZC5zby4xIiwgZCwgZmlyc3Rvbmx5PVRydWUpCisgICAgICAgICAgICByZXBsYWNlX2xpbmVzKCIke1N9L3NyYy9hcmNoLW1pcHMuYyIsICIvbGliMzIvbGQuc28uMSIsICIvIiArIHR1bmVfYmFzZWxpYiArICIvbGQuc28uMSIsIGQpCisgICAgICAgIGVsaWYgYXJjaCA9PSAibWlwczY0IiBvciBhcmNoID09ICJtaXBzNjRlbCI6CisgICAgICAgICAgICByZXBsYWNlX2xpbmVzKCIke1N9L3NyYy9hcmNoLW1pcHMuYyIsICIvbGliL2xkLnNvLjEiLCAiLyIgKyB0dW5lX2Jhc2VsaWIgKyAiL2xkLnNvLjEiLCBkLCBzZWNvbmRvbmx5PVRydWUpCisgICAgICAgICAgICByZXBsYWNlX2xpbmVzKCIke1N9L3NyYy9hcmNoLW1pcHMuYyIsICIvbGliNjQvbGQuc28uMSIsICIvIiArIHR1bmVfYmFzZWxpYiArICIvbGQuc28uMSIsIGQpCisgICAgICAgICAgICBiaXRzID0gNjQKKyAgICAgICAgZWxpZiBhcmNoLmVuZHN3aXRoKCI4NiIpOgorICAgICAgICAgICAgcmVwbGFjZV9saW5lcygiJHtTfS9zcmMvYXJjaC1pMzg2LmMiLCAiL2xpYi9sZC1saW51eC5zby4yIiwgIi8iICsgdHVuZV9iYXNlbGliICsgIi9sZC1saW51eC5zby4yIiwgZCkKKyAgICAgICAgaWYgYml0cyA9PSAzMiBhbmQgdHVuZV9iYXNlbGliICE9ICJsaWIiOgorICAgICAgICAgICAgcmVwbGFjZV9saW5lc19ydGxkKCIke1N9L3NyYy9ydGxkL3J0bGQuYyIsICJsaWIiLCB0dW5lX2Jhc2VsaWIsICJlbHNlIiwgZCkKKyAgICAgICAgaWYgYml0cyA9PSA2NCBhbmQgdHVuZV9iYXNlbGliICE9ICJsaWI2NCI6CisgICAgICAgICAgICByZXBsYWNlX2xpbmVzX3J0bGQoIiR7U30vc3JjL3J0bGQvcnRsZC5jIiwgImxpYjY0IiwgdHVuZV9iYXNlbGliLCAidXNlXzY0Yml0IiwgZCkKK30KKworcHl0aG9uICgpIHsKKyAgICBvdmVycmlkZXMgPSBkLmdldFZhcigiT1ZFUlJJREVTIiwgVHJ1ZSkuc3BsaXQoIjoiKQorICAgIGlmICJjbGFzcy10YXJnZXQiIGluIG92ZXJyaWRlczoKKyAgICAgICAgYmIuYnVpbGQuYWRkdGFzaygnZG9fbGlua2VycGF0aHMnLCAnZG9fY29uZmlndXJlJywgJ2RvX3BhdGNoJywgZCkKK30KKwogZG9fY29uZmlndXJlX3ByZXBlbmQgKCkgewogICAgICAgICAjIERpc2FibGUgZG9jdW1lbnRhdGlvbiEKICAgICAgICAgZWNobyAiYWxsOiIgPiAke1N9L2RvYy9NYWtlZmlsZS5hbQpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9wc2V1ZG8vZmlsZXMvMDAwMS1Eb24tdC1zZW5kLVNJR1VTUjEtdG8taW5pdC5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHNldWRvL2ZpbGVzLzAwMDEtRG9uLXQtc2VuZC1TSUdVU1IxLXRvLWluaXQucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmM2OTRjZQotLS0gL2Rldi9udWxsCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHNldWRvL2ZpbGVzLzAwMDEtRG9uLXQtc2VuZC1TSUdVU1IxLXRvLWluaXQucGF0Y2gKQEAgLTAsMCArMSw0OCBAQAorRnJvbSBiZWZjNmRiZDY0NjlkNDI4YzllMDgzMGRiZTUxYmRmN2FjMzlkOWFlIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogU2VlYnMgPHNlZWJzQHNlZWJzLm5ldD4KK0RhdGU6IFRodSwgMjIgU2VwIDIwMTYgMTQ6MzU6MDQgLTA1MDAKK1N1YmplY3Q6IFtQQVRDSF0gRG9uJ3Qgc2VuZCBTSUdVU1IxIHRvIGluaXQuCisKK0lmIHRoZSBwYXJlbnQgZXhpdHMgZHVlIHRvIGNoaWxkIHByb2Nlc3MgYmVpbmcgc2xvdywgZ2V0cHBpZCgpIHdpbGwgcmV0dXJuCisxLCBhbmQgd2UnbGwgc2VuZCBTSUdVU1IxIHRvIGluaXQsIHdoaWNoIGNhbiBicmVhayB0aGluZ3MgbGlrZSBkdW1iaW5pdAord2hpY2ggYXJlbid0IGFkZXF1YXRlbHkgcHJvdGVjdGVkIGFnYWluc3Qgbm9uLXJvb3QgcHJvY2Vzc2VzIHNlbmRpbmcgdGhlbQorc2lnbmFscy4KKworU2lnbmVkLW9mZi1ieTogU2VlYnMgPHNlZWJzQHNlZWJzLm5ldD4KKworVXBzdHJlYW0tU3RhdHVzOiBCYWNrcG9ydCAoY29tbWl0IGJlZmM2ZGJkNjQ2OWQ0MjhjOWUwODMwZGJlNTFiZGY3YWMzOWQ5YWUpCisKK1tZT0NUTyAjMTAzMjRdCisKK1RoaXMgcmVzb2x2ZXMgYW4gaXNzdWUgd2hlcmUgYSBkb2NrZXIgY29udGFpbmVyIHJ1bm5pbmcgYnVpbGRzIHdvdWxkIGRpZQorZHVlIHRvIGl0J3MgJ21pbmkgaW5pdCcgYmVpbmcgc2lnbmFsZWQgYnkgcHNldWRvLgorCitTaWduZWQtb2ZmLWJ5OiBNYXJrIEhhdGxlIDxtYXJrLmhhdGxlQHdpbmRyaXZlci5jb20+CistLS0KKyBwc2V1ZG9fc2VydmVyLmMgfCAxMSArKysrKysrKy0tLQorCitkaWZmIC0tZ2l0IGEvcHNldWRvX3NlcnZlci5jIGIvcHNldWRvX3NlcnZlci5jCitpbmRleCA2NTEwMmRkLi44NzMxZDIwIDEwMDY0NAorLS0tIGEvcHNldWRvX3NlcnZlci5jCisrKysgYi9wc2V1ZG9fc2VydmVyLmMKK0BAIC0zNTgsOSArMzU4LDE0IEBAIHBzZXVkb19zZXJ2ZXJfc3RhcnQoaW50IGRhZW1vbml6ZSkgeworIAlzaWduYWwoU0lHVEVSTSwgcXVpdF9ub3cpOworIAkvKiB0ZWxsIHBhcmVudCBwcm9jZXNzIHRvIHN0b3Agd2FpdGluZyAqLworIAlpZiAoZGFlbW9uaXplKSB7CistCQlwc2V1ZG9fZGlhZygiU2V0dXAgY29tcGxldGUsIHNlbmRpbmcgU0lHVVNSMSB0byBwaWQgJWQuXG4iLAorLQkJCWdldHBwaWQoKSk7CistCQlraWxsKGdldHBwaWQoKSwgU0lHVVNSMSk7CisrCQlwaWRfdCBwcGlkID0gZ2V0cHBpZCgpOworKwkJaWYgKHBwaWQgPT0gMSkgeworKwkJCXBzZXVkb19kaWFnKCJTZXR1cCBjb21wbGV0ZSwgYnV0IHBhcmVudCBpcyBpbml0LCBub3Qgc2VuZGluZyBTSUdVU1IxLlxuIik7CisrCQl9IGVsc2UgeworKwkJCXBzZXVkb19kaWFnKCJTZXR1cCBjb21wbGV0ZSwgc2VuZGluZyBTSUdVU1IxIHRvIHBpZCAlZC5cbiIsCisrCQkJCXBwaWQpOworKwkJCWtpbGwocHBpZCwgU0lHVVNSMSk7CisrCQl9CisgCX0KKyAJcHNldWRvX3NlcnZlcl9sb29wKCk7CisgCXJldHVybiAwOworLS0gCisyLjUuNQorCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3BzZXVkby9maWxlcy8wMDAxLVF1aWV0LWRpYWdub3N0aWNzLWR1cmluZy1zdGFydHVwLWZvci1wc2V1ZG8tZC5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHNldWRvL2ZpbGVzLzAwMDEtUXVpZXQtZGlhZ25vc3RpY3MtZHVyaW5nLXN0YXJ0dXAtZm9yLXBzZXVkby1kLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ0YjlmNmEKLS0tIC9kZXYvbnVsbAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3BzZXVkby9maWxlcy8wMDAxLVF1aWV0LWRpYWdub3N0aWNzLWR1cmluZy1zdGFydHVwLWZvci1wc2V1ZG8tZC5wYXRjaApAQCAtMCwwICsxLDU0IEBACitGcm9tIGVlYWQ4YTUwNTI0NWEyOTJjNDNmMDcwYzBlODM2Y2RmZWI3YmQ3YmQgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBTZWVicyA8c2VlYnNAc2VlYnMubmV0PgorRGF0ZTogV2VkLCAyOCBTZXAgMjAxNiAxNzowNToxNyAtMDUwMAorU3ViamVjdDogW1BBVENIIDEvMl0gUXVpZXQgZGlhZ25vc3RpY3MgZHVyaW5nIHN0YXJ0dXAgZm9yIHBzZXVkbyAtZAorCitXaGVuIHRoZSBjbGllbnQgc3Bhd25zIGEgcHNldWRvIHNlcnZlciwgaXQgc3RhcnRzIG91dCBzZW5kaW5nIGRpYWdub3N0aWNzCit0byBzdGRlcnIuIFRoaXMgY2FuIGJlIHNwYW1teSBpbiBzb21lIGNhc2VzIHdpdGggcmFjZXMgZHVyaW5nIHN0YXJ0dXA7CitldmVyeXRoaW5nIHJlc29sdmVzLCBidXQgd2UgZ2V0IHNjYXJ5LWxvb2tpbmcgZGlhZ25vc3RpY3MuIFNvIHNob3ZlCit0aG9zZSBpbnRvIGEgbG9nIGZpbGUuCisKK1NpZ25lZC1vZmYtYnk6IFNlZWJzIDxzZWVic0BzZWVicy5uZXQ+CisKK1Vwc3RyZWFtLVN0YXR1czogQmFja3BvcnQKK1NpZ25lZC1vZmYtYnk6IFJvYmVydCBZYW5nIDxsaWV6aGkueWFuZ0B3aW5kcml2ZXIuY29tPgorLS0tCisgQ2hhbmdlTG9nLnR4dCAgIHwgNSArKysrKworIHBzZXVkb19zZXJ2ZXIuYyB8IDQgKysrLQorIDIgZmlsZXMgY2hhbmdlZCwgOCBpbnNlcnRpb25zKCspLCAxIGRlbGV0aW9uKC0pCisKK2RpZmYgLS1naXQgYS9DaGFuZ2VMb2cudHh0IGIvQ2hhbmdlTG9nLnR4dAoraW5kZXggZDYzNTljYS4uNGNjMjRkZSAxMDA2NDQKKy0tLSBhL0NoYW5nZUxvZy50eHQKKysrKyBiL0NoYW5nZUxvZy50eHQKK0BAIC0xLDMgKzEsOCBAQAorKzIwMTYtMDktMjg6CisrCSogKHNlZWJzKSBTZW5kIGVycm9ycyB0byBsb2cgd2hlbiBkYWVtb25pemluZywgYnV0IGRvIHRoYXQgYSBsb3QKKysJICBzb29uZXIgdG8gcHJldmVudCBzdGFydHVwIG1lc3NhZ2VzIHdoaWNoIGNhbiBzaG93IHVwIHNwdXJpb3VzbHkKKysJICB3aXRoIG11bHRpcGxlIGNsaWVudHMuCisrCisgMjAxNi0wNy0yODoKKyAJKiAoc2VlYnMpIEZpeCBwZXJmb3JtYW5jZSBpc3N1ZSBvbiBkZWxldGlvbiB3aXRoIHhhdHRyIGNoYW5nZXMuCisgCitkaWZmIC0tZ2l0IGEvcHNldWRvX3NlcnZlci5jIGIvcHNldWRvX3NlcnZlci5jCitpbmRleCA4NzMxZDIwLi43YzJkYjJmIDEwMDY0NAorLS0tIGEvcHNldWRvX3NlcnZlci5jCisrKysgYi9wc2V1ZG9fc2VydmVyLmMKK0BAIC0xNjIsNiArMTYyLDkgQEAgcHNldWRvX3NlcnZlcl9zdGFydChpbnQgZGFlbW9uaXplKSB7CisgCSAqIFNJR1VTUjEsIG9yIHVudGlsIHRvbyBtdWNoIHRpbWUgaGFzIHBhc3NlZC4gKi8KKyAJaWYgKGRhZW1vbml6ZSkgeworIAkJaW50IGNoaWxkOworKworKwkJLyogbWFrZSBzdGFydHVwIG1lc3NhZ2VzIGdvIGF3YXkgd2hlbiBpbnZva2VkLWFzLWRhZW1vbiAqLworKwkJcHNldWRvX2RlYnVnX2xvZ2ZpbGUoUFNFVURPX0xPR0ZJTEUsIDIpOworIAkJY2hpbGQgPSBmb3JrKCk7CisgCQlpZiAoY2hpbGQgPT0gLTEpIHsKKyAJCQlwc2V1ZG9fZGlhZygiQ291bGRuJ3QgZm9yayBjaGlsZCBwcm9jZXNzOiAlc1xuIiwKK0BAIC0yMzEsNyArMjM0LDYgQEAgcHNldWRvX3NlcnZlcl9zdGFydChpbnQgZGFlbW9uaXplKSB7CisgCQkJc2V0c2lkKCk7CisgCQkJZmNsb3NlKHN0ZGluKTsKKyAJCQlmY2xvc2Uoc3Rkb3V0KTsKKy0JCQlwc2V1ZG9fZGVidWdfbG9nZmlsZShQU0VVRE9fTE9HRklMRSwgMik7CisgCQkJLyogYW5kIHRoZW4ganVzdCBleGVjdXRlIHRoZSBzZXJ2ZXIgY29kZSBub3JtYWxseS4gICovCisgCQkJLyogQW55IGxvZ2dpbmcgd2lsbCBwcmVzdW1hYmx5IGdvIHRvIGxvZ2ZpbGUsIGJ1dAorIAkJCSAqIGV4aXQgc3RhdHVzIHdpbGwgbWFrZSBpdCBiYWNrIHRvIHRoZSBwYXJlbnQgZm9yCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3BzZXVkby9maWxlcy8wMDAyLVVzZS1jb3JyZWN0LWZpbGUtZGVzY3JpcHRvci5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHNldWRvL2ZpbGVzLzAwMDItVXNlLWNvcnJlY3QtZmlsZS1kZXNjcmlwdG9yLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRkNmZkODcKLS0tIC9kZXYvbnVsbAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3BzZXVkby9maWxlcy8wMDAyLVVzZS1jb3JyZWN0LWZpbGUtZGVzY3JpcHRvci5wYXRjaApAQCAtMCwwICsxLDUzIEBACitGcm9tIDdhMDYzMmNhZDg1MTgyNmQ4MDRkYjA1NDBkOWE1OTc3M2U2YmYyOWMgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBTZWVicyA8c2VlYnNAc2VlYnMubmV0PgorRGF0ZTogV2VkLCAyOCBTZXAgMjAxNiAyMjoxMjoyOSAtMDUwMAorU3ViamVjdDogW1BBVENIIDIvMl0gVXNlIGNvcnJlY3QgZmlsZSBkZXNjcmlwdG9yCisKK1NvIGl0IHR1cm5zIG91dCB0aGF0IHBzZXVkb19sb2dmaWxlKCkgd2FzIHJldHVybmluZyAwIG9yIC0xLCBhbmQKK3BzZXVkb19kZWJ1Z19sb2dmaWxlKCkgd2FzIGV4cGVjdGluZyBpdCB0byBiZSB0aGUgY29ycmVjdCBmaWxlIGRlc2NyaXB0b3IKK3RvIHVzZS4gQW5kIGl0J3MgYmFzaWNhbGx5IGEgbXlzdGVyeSB0aGF0IGFueSBvZiB0aGF0IGV2ZXIgd29ya2VkLgorCitTaWduZWQtb2ZmLWJ5OiBTZWVicyA8c2VlYnNAc2VlYnMubmV0PgorCitVcHN0cmVhbS1TdGF0dXM6IEJhY2twb3J0CitTaWduZWQtb2ZmLWJ5OiBSb2JlcnQgWWFuZyA8bGllemhpLnlhbmdAd2luZHJpdmVyLmNvbT4KKy0tLQorIENoYW5nZUxvZy50eHQgfCAzICsrKworIHBzZXVkb191dGlsLmMgfCAzICsrLQorIDIgZmlsZXMgY2hhbmdlZCwgNSBpbnNlcnRpb25zKCspLCAxIGRlbGV0aW9uKC0pCisKK2RpZmYgLS1naXQgYS9DaGFuZ2VMb2cudHh0IGIvQ2hhbmdlTG9nLnR4dAoraW5kZXggNGNjMjRkZS4uNDlhNmMzNiAxMDA2NDQKKy0tLSBhL0NoYW5nZUxvZy50eHQKKysrKyBiL0NoYW5nZUxvZy50eHQKK0BAIC0yLDYgKzIsOSBAQAorIAkqIChzZWVicykgU2VuZCBlcnJvcnMgdG8gbG9nIHdoZW4gZGFlbW9uaXppbmcsIGJ1dCBkbyB0aGF0IGEgbG90CisgCSAgc29vbmVyIHRvIHByZXZlbnQgc3RhcnR1cCBtZXNzYWdlcyB3aGljaCBjYW4gc2hvdyB1cCBzcHVyaW91c2x5CisgCSAgd2l0aCBtdWx0aXBsZSBjbGllbnRzLgorKwkqIChzZWVicykgcmV0dXJuIGZpbGUgZGVzY3JpcHRvciBmcm9tIHBzZXVkb19sb2dmaWxlLCBzbyB3ZSBzZXQKKysJICBwc2V1ZG9fdXRpbF9kZWJ1Z19mZCB0byB0aGUgcmlnaHQgdmFsdWUgaW5zdGVhZCBvZiB0byBzdGRpbi4KKysJICBOaWNlIGJ1Zy4KKyAKKyAyMDE2LTA3LTI4OgorIAkqIChzZWVicykgRml4IHBlcmZvcm1hbmNlIGlzc3VlIG9uIGRlbGV0aW9uIHdpdGggeGF0dHIgY2hhbmdlcy4KK2RpZmYgLS1naXQgYS9wc2V1ZG9fdXRpbC5jIGIvcHNldWRvX3V0aWwuYworaW5kZXggMGMxNTZjZi4uYTYwYzc0YiAxMDA2NDQKKy0tLSBhL3BzZXVkb191dGlsLmMKKysrKyBiL3BzZXVkb191dGlsLmMKK0BAIC0xNTY5LDcgKzE1NjksNyBAQCBwc2V1ZG9fbG9nZmlsZShjaGFyICpmaWxlbmFtZSwgY2hhciAqZGVmbmFtZSwgaW50IHByZWZlcl9mZCkgeworIAlpZiAoZmQgPT0gLTEpCisgCQlyZXR1cm4gLTE7CisgCWVsc2UKKy0JCXJldHVybiAwOworKwkJcmV0dXJuIGZkOworIH0KKyAKKyBpbnQKK0BAIC0xNTc5LDYgKzE1NzksNyBAQCBwc2V1ZG9fZGVidWdfbG9nZmlsZShjaGFyICpkZWZuYW1lLCBpbnQgcHJlZmVyX2ZkKSB7CisgCisgCWZkID0gcHNldWRvX2xvZ2ZpbGUoZmlsZW5hbWUsIGRlZm5hbWUsIHByZWZlcl9mZCk7CisgCWlmIChmZCA+IC0xKSB7CisrCQlwc2V1ZG9fZGlhZygiZGVidWdfbG9nZmlsZTogZmQgJWRcbiIsIGZkKTsKKyAJCXBzZXVkb191dGlsX2RlYnVnX2ZkID0gZmQ7CisgCQlyZXR1cm4gMDsKKyAJfQpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9wc2V1ZG8vZmlsZXMvMDAwMy1GaXgtcmVuYW1lYXQtcGFyYWxsZWwtdG8tcHJldmlvdXMtZml4LXRvLXJlbmFtZS5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHNldWRvL2ZpbGVzLzAwMDMtRml4LXJlbmFtZWF0LXBhcmFsbGVsLXRvLXByZXZpb3VzLWZpeC10by1yZW5hbWUucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzM5YzAzZQotLS0gL2Rldi9udWxsCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHNldWRvL2ZpbGVzLzAwMDMtRml4LXJlbmFtZWF0LXBhcmFsbGVsLXRvLXByZXZpb3VzLWZpeC10by1yZW5hbWUucGF0Y2gKQEAgLTAsMCArMSw2NCBAQAorRnJvbSBkOWFiM2EwYWNjOTQxNTEwNDg0OThiMWVhNGQ2OWU3NzA3ZGYxNTI2IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogU2VlYnMgPHNlZWJzQHNlZWJzLm5ldD4KK0RhdGU6IEZyaSwgMzAgU2VwIDIwMTYgMTA6NTY6MzUgLTA1MDAKK1N1YmplY3Q6IFtQQVRDSCAzLzNdIEZpeCByZW5hbWVhdCAocGFyYWxsZWwgdG8gcHJldmlvdXMgZml4IHRvIHJlbmFtZSkKKworVGhlcmUgd2FzIGEgYnVnIGluIHJlbmFtZSgpLCB3aGljaCB3YXMgZHVwbGljYXRlZCB3aGVuIHJlbmFtZWF0KCkgd2FzCitpbXBsZW1lbnRlZCwgYW5kIHdoaWNoIGdvdCBmaXhlZCB0d28geWVhcnMgYWdvIGZvciByZW5hbWUoKSwgYnV0IG5vCitvbmUgZXZlciB1c2VzIHJlbmFtZWF0KCkgc28gaXQgZGlkbid0IGdldCBmaXhlZCB0aGVyZS4gVGhhbmtzCit0byBBbnRvbiBHZXJhc2ltb3YgPGFudG9uQGFkdmFuY2VkdGVsZW1hdGljLmNvbT4gZm9yIHRoZSBidWcgcmVwb3J0CithbmQgcGF0Y2guCisKK1NpZ25lZC1vZmYtYnk6IFNlZWJzIDxzZWVic0BzZWVicy5uZXQ+CisKK1Vwc3RyZWFtLVN0YXR1czogQmFja3BvcnQKK1NpZ25lZC1vZmYtYnk6IEpvc2h1YSBMb2NrIDxqb3NodWEuZy5sb2NrQGludGVsLmNvbT4KKworLS0tCisgQ2hhbmdlTG9nLnR4dCAgICAgICAgICAgICAgfCA0ICsrKysKKyBwb3J0cy91bml4L2d1dHMvcmVuYW1lYXQuYyB8IDcgKysrKysrLQorIDIgZmlsZXMgY2hhbmdlZCwgMTAgaW5zZXJ0aW9ucygrKSwgMSBkZWxldGlvbigtKQorCitkaWZmIC0tZ2l0IGEvQ2hhbmdlTG9nLnR4dCBiL0NoYW5nZUxvZy50eHQKK2luZGV4IDY1Yjk3NTkuLmNhMDRjYzAgMTAwNjQ0CistLS0gYS9DaGFuZ2VMb2cudHh0CisrKysgYi9DaGFuZ2VMb2cudHh0CitAQCAtMSwzICsxLDcgQEAKKysyMDE2LTA5LTMwOgorKwkqIChzZWVicykgRml4IHJlbmFtZSBhdCwgbWF0Y2hpbmcgZml4IGZyb20gZWUwMGY2M2QgZm9yIHJlbmFtZS4gQnVnCisrCSAgYW5kIGZpeCBwcm92aWRlZCBieSBBbnRvbiBHZXJhc2ltb3YgPGFudG9uQGFkdmFuY2VkdGVsZW1hdGljLmNvbT4uCisrCisgMjAxNi0wOS0yODoKKyAJKiAoc2VlYnMpIFNlbmQgZXJyb3JzIHRvIGxvZyB3aGVuIGRhZW1vbml6aW5nLCBidXQgZG8gdGhhdCBhIGxvdAorIAkgIHNvb25lciB0byBwcmV2ZW50IHN0YXJ0dXAgbWVzc2FnZXMgd2hpY2ggY2FuIHNob3cgdXAgc3B1cmlvdXNseQorZGlmZiAtLWdpdCBhL3BvcnRzL3VuaXgvZ3V0cy9yZW5hbWVhdC5jIGIvcG9ydHMvdW5peC9ndXRzL3JlbmFtZWF0LmMKK2luZGV4IGFkZTA1MDkuLmQ1ZTM2ZmEgMTAwNjQ0CistLS0gYS9wb3J0cy91bml4L2d1dHMvcmVuYW1lYXQuYworKysrIGIvcG9ydHMvdW5peC9ndXRzL3JlbmFtZWF0LmMKK0BAIC0xMSw2ICsxMSw3IEBACisgCWludCBvbGRyYywgbmV3cmM7CisgCWludCBzYXZlX2Vycm5vOworIAlpbnQgb2xkX2RiX2VudHJ5ID0gMDsKKysJaW50IG1heV91bmxpbmtlZCA9IDA7CisgCisgCXBzZXVkb19kZWJ1ZyhQREJHRl9GSUxFLCAicmVuYW1lYXQ6ICVkLCVzLT4lZCwlc1xuIiwKKyAJCW9sZGRpcmZkLCBvbGRwYXRoID8gb2xkcGF0aCA6ICI8bmlsPiIsCitAQCAtNDQsMTAgKzQ1LDE0IEBACisgCS8qIGFzIHdpdGggdW5saW5rLCB3ZSBoYXZlIHRvIG1hcmsgdGhhdCB0aGUgZmlsZSBtYXkgZ2V0IGRlbGV0ZWQgKi8KKyAJbXNnID0gcHNldWRvX2NsaWVudF9vcChPUF9NQVlfVU5MSU5LLCAwLCAtMSwgbmV3ZGlyZmQsIG5ld3BhdGgsIG5ld3JjID8gTlVMTCA6ICZuZXdidWYpOworIAlpZiAobXNnICYmIG1zZy0+cmVzdWx0ID09IFJFU1VMVF9TVUNDRUVEKQorKwkJbWF5X3VubGlua2VkID0gMTsKKysJbXNnID0gcHNldWRvX2NsaWVudF9vcChPUF9TVEFULCAwLCAtMSwgb2xkZGlyZmQsIG9sZHBhdGgsIG9sZHJjID8gTlVMTCA6ICZvbGRidWYpOworKwlpZiAobXNnICYmIG1zZy0+cmVzdWx0ID09IFJFU1VMVF9TVUNDRUVEKQorIAkJb2xkX2RiX2VudHJ5ID0gMTsKKysKKyAJcmMgPSByZWFsX3JlbmFtZWF0KG9sZGRpcmZkLCBvbGRwYXRoLCBuZXdkaXJmZCwgbmV3cGF0aCk7CisgCXNhdmVfZXJybm8gPSBlcnJubzsKKy0JaWYgKG9sZF9kYl9lbnRyeSkgeworKwlpZiAobWF5X3VubGlua2VkKSB7CisgCQlpZiAocmMgPT0gLTEpIHsKKyAJCQkvKiBzaW5jZSB3ZSBmYWlsZWQsIHRoYXQgd2Fzbid0IHJlYWxseSB1bmxpbmtlZCAtLSBwdXQKKyAJCQkgKiBpdCBiYWNrLgorLS0gCisyLjcuNAorCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3BzZXVkby9maWxlcy9GaXgteGF0dHItcGVyZm9ybWFuY2UucGF0Y2ggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3BzZXVkby9maWxlcy9GaXgteGF0dHItcGVyZm9ybWFuY2UucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGUwNzJlNgotLS0gL2Rldi9udWxsCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHNldWRvL2ZpbGVzL0ZpeC14YXR0ci1wZXJmb3JtYW5jZS5wYXRjaApAQCAtMCwwICsxLDExNyBAQAorRnJvbSAwZDkwNzFmMzA5MGJiZDc4ODA1NThmM2I0ODhiMjM2YWMxOWI0NGZjIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogc2VlYnMgPHNlZWJzQHNlZWJzLm5ldD4KK0RhdGU6IFRodSwgMjggSnVsIDIwMTYgMTQ6MDI6MTIgLTA1MDAKK1N1YmplY3Q6IFtQQVRDSCAxLzJdIEZpeCB4YXR0ciBwZXJmb3JtYW5jZQorCitXaGVuIGRlbGV0aW5nIGZpbGVzLCB3ZSAqZG8qIGtub3cgdGhlIGlub2RlIGFuZCBhdHRyaWJ1dGUsIG1vc3Qgb2YgdGhlCit0aW1lLCBzbyB3ZSBwYXNzIHRob3NlIGluIHdoZW5ldmVyIHBvc3NpYmxlLiBUaGUgZnVsbCBwdXJnZSBvZiB1bm1hdGNoZWQKK3hhdHRycyBzaG91bGQgbm90IGhhcHBlbiB3aGVuIHRoZSBjb3JyZWN0IGRldi9pbm8gYXJlIGJlbGlldmVkIHRvIGJlIGtub3duLgorCitTaWduZWQtb2ZmLWJ5OiBTZWVicyA8c2VlYnNAc2VlYnMubmV0PgorCitbWU9DVE8gIzk5MjldCitVcHN0cmVhbS1TdGF0dXM6IEJhY2twb3J0ICgwZDkwNzFmMzA5MGJiZDc4ODA1NThmM2I0ODhiMjM2YWMxOWI0NGZjKQorU2lnbmVkLW9mZi1ieTogSm9zaHVhIExvY2sgPGpvc2h1YS5nLmxvY2tAaW50ZWwuY29tPgorLS0tCisgQ2hhbmdlTG9nLnR4dCB8ICAzICsrKworIHBzZXVkby5jICAgICAgfCAxMSArKysrKysrKy0tLQorIHBzZXVkb19kYi5jICAgfCAxNSArKysrKysrKystLS0tLS0KKyBwc2V1ZG9fZGIuaCAgIHwgIDIgKy0KKyA0IGZpbGVzIGNoYW5nZWQsIDIxIGluc2VydGlvbnMoKyksIDEwIGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvQ2hhbmdlTG9nLnR4dCBiL0NoYW5nZUxvZy50eHQKK2luZGV4IDEzMWYxNjMuLmQ2MzU5Y2EgMTAwNjQ0CistLS0gYS9DaGFuZ2VMb2cudHh0CisrKysgYi9DaGFuZ2VMb2cudHh0CitAQCAtMSwzICsxLDYgQEAKKysyMDE2LTA3LTI4OgorKwkqIChzZWVicykgRml4IHBlcmZvcm1hbmNlIGlzc3VlIG9uIGRlbGV0aW9uIHdpdGggeGF0dHIgY2hhbmdlcy4KKysKKyAyMDE2LTA3LTA4OgorIAkqIChSUCkgcmVsZWFzZSAxLjguMQorIAkqIChqb3NodWFnbCkgRml4IGxvZyB0YWJsZSBjcmVhdGlvbiBpc3N1ZQorZGlmZiAtLWdpdCBhL3BzZXVkby5jIGIvcHNldWRvLmMKK2luZGV4IDUyZjY0OWYuLmRiMWM0MDAgMTAwNjQ0CistLS0gYS9wc2V1ZG8uYworKysrIGIvcHNldWRvLmMKK0BAIC02MDAsNyArNjAwLDEyIEBAIHBzZXVkb19vcChwc2V1ZG9fbXNnX3QgKm1zZywgY29uc3QgY2hhciAqcHJvZ3JhbSwgY29uc3QgY2hhciAqdGFnLCBjaGFyICoqcmVzcG9uCisgCQkJCWlmIChieV9wYXRoLmRlbGV0aW5nICE9IDApIHsKKyAJCQkJCXBzZXVkb19kZWJ1ZyhQREJHRl9GSUxFLCAiaW5vZGUgbWlzbWF0Y2ggZm9yICclcycgLS0gb2xkIG9uZSB3YXMgbWFya2VkIGZvciBkZWxldGlvbiwgZGVsZXRpbmcuXG4iLAorIAkJCQkJCW1zZy0+cGF0aCk7CistCQkJCQlwZGJfZGlkX3VubGlua19maWxlKG1zZy0+cGF0aCwgYnlfcGF0aC5kZWxldGluZyk7CisrCQkJCQkvKiBpbiB0aGlzIGNhc2UsIHdlIGRvbid0IHRydXN0IHRoZQorKwkJCQkJICogZXhpc3RpbmcgZW50cmllcywgc28gd2Ugd2lsbCBkbyB0aGUKKysJCQkJCSAqIG1vcmUgZXhwZW5zaXZlIHN3ZWVwIGZvciBzdHJheQorKwkJCQkJICogeGF0dHJzLgorKwkJCQkJICovCisrCQkJCQlwZGJfZGlkX3VubGlua19maWxlKG1zZy0+cGF0aCwgTlVMTCwgYnlfcGF0aC5kZWxldGluZyk7CisgCQkJCX0gZWxzZSB7CisgCQkJCQlwc2V1ZG9fZGlhZygiaW5vZGUgbWlzbWF0Y2g6ICclcycgaW5vICVsbHUgaW4gZGIsICVsbHUgaW4gcmVxdWVzdC5cbiIsCisgCQkJCQkJbXNnLT5wYXRoLAorQEAgLTY5OCw3ICs3MDMsNyBAQCBwc2V1ZG9fb3AocHNldWRvX21zZ190ICptc2csIGNvbnN0IGNoYXIgKnByb2dyYW0sIGNvbnN0IGNoYXIgKnRhZywgY2hhciAqKnJlc3BvbgorIAkJCQlpZiAoYnlfaW5vLmRlbGV0aW5nICE9IDApIHsKKyAJCQkJCXBzZXVkb19kZWJ1ZyhQREJHRl9GSUxFLCAiaW5vZGUgbWlzbWF0Y2ggZm9yICclcycgLS0gb2xkIG9uZSB3YXMgbWFya2VkIGZvciBkZWxldGlvbiwgZGVsZXRpbmcuXG4iLAorIAkJCQkJCW1zZy0+cGF0aCk7CistCQkJCQlwZGJfZGlkX3VubGlua19maWxlKHBhdGhfYnlfaW5vLCBieV9pbm8uZGVsZXRpbmcpOworKwkJCQkJcGRiX2RpZF91bmxpbmtfZmlsZShwYXRoX2J5X2lubywgJmJ5X2lubywgYnlfaW5vLmRlbGV0aW5nKTsKKyAJCQkJfSBlbHNlIHsKKyAJCQkJCXBzZXVkb19kaWFnKCJwYXRoIG1pc21hdGNoIFslZCBsaW5rJXNdOiBpbm8gJWxsdSBkYiAnJXMnIHJlcSAnJXMnLlxuIiwKKyAJCQkJCQltc2ctPm5saW5rLAorQEAgLTkzMCw3ICs5MzUsNyBAQCBwc2V1ZG9fb3AocHNldWRvX21zZ190ICptc2csIGNvbnN0IGNoYXIgKnByb2dyYW0sIGNvbnN0IGNoYXIgKnRhZywgY2hhciAqKnJlc3BvbgorIAkJfQorIAkJYnJlYWs7CisgCWNhc2UgT1BfRElEX1VOTElOSzoKKy0JCXBkYl9kaWRfdW5saW5rX2ZpbGUobXNnLT5wYXRoLCBtc2ctPmNsaWVudCk7CisrCQlwZGJfZGlkX3VubGlua19maWxlKG1zZy0+cGF0aCwgbXNnLCBtc2ctPmNsaWVudCk7CisgCQlicmVhazsKKyAJY2FzZSBPUF9DQU5DRUxfVU5MSU5LOgorIAkJcGRiX2NhbmNlbF91bmxpbmtfZmlsZShtc2cpOworZGlmZiAtLWdpdCBhL3BzZXVkb19kYi5jIGIvcHNldWRvX2RiLmMKK2luZGV4IDI4OWJiMjkuLmU3ZGQxOTMgMTAwNjQ0CistLS0gYS9wc2V1ZG9fZGIuYworKysrIGIvcHNldWRvX2RiLmMKK0BAIC0xODQ4LDcgKzE4NDgsNyBAQCBwZGJfZGlkX3VubGlua19maWxlcyhpbnQgZGVsZXRpbmcpIHsKKyAKKyAvKiBjb25maXJtIGRlbGV0aW9uIG9mIGEgc3BlY2lmaWMgZmlsZSBieSBhIGdpdmVuIGNsaWVudCAqLworIGludAorLXBkYl9kaWRfdW5saW5rX2ZpbGUoY2hhciAqcGF0aCwgaW50IGRlbGV0aW5nKSB7CisrcGRiX2RpZF91bmxpbmtfZmlsZShjaGFyICpwYXRoLCBwc2V1ZG9fbXNnX3QgKm1zZywgaW50IGRlbGV0aW5nKSB7CisgCXN0YXRpYyBzcWxpdGUzX3N0bXQgKmRlbGV0ZV9leGFjdDsKKyAJaW50IHJjLCBleGFjdDsKKyAJY2hhciAqc3FsX2RlbGV0ZV9leGFjdCA9ICJERUxFVEUgRlJPTSBmaWxlcyBXSEVSRSBwYXRoID0gPyBBTkQgZGVsZXRpbmcgPSA/OyI7CitAQCAtMTg3OCwxMSArMTg3OCwxNCBAQCBwZGJfZGlkX3VubGlua19maWxlKGNoYXIgKnBhdGgsIGludCBkZWxldGluZykgeworIAlleGFjdCA9IHNxbGl0ZTNfY2hhbmdlcyhmaWxlX2RiKTsKKyAJcHNldWRvX2RlYnVnKFBEQkdGX0RCLCAiKGV4YWN0ICVkKVxuIiwgZXhhY3QpOworIAlzcWxpdGUzX3Jlc2V0KGRlbGV0ZV9leGFjdCk7CistCXNxbGl0ZTNfY2xlYXJfYmluZGluZ3MoZGVsZXRlX2V4YWN0KTsKKy0JLyogd2UgaGF2ZSB0byBjbGVhbiBldmVyeXRoaW5nIGJlY2F1c2Ugd2UgZG9uJ3Qga25vdyBmb3Igc3VyZSB0aGUKKy0JICogZGV2aWNlL2lub2RlLi4uCistCSAqLworLQlwZGJfY2xlYXJfdW51c2VkX3hhdHRycygpOworKwlpZiAobXNnKSB7CisrCQlwZGJfY2xlYXJfeGF0dHJzKG1zZyk7CisrCX0gZWxzZSB7CisrCQkvKiB3ZSBoYXZlIHRvIGNsZWFuIGV2ZXJ5dGhpbmcgYmVjYXVzZSB3ZSBkb24ndCBrbm93IGZvciBzdXJlIHRoZQorKwkJICogZGV2aWNlL2lub2RlLi4uCisrCQkgKi8KKysJCXBkYl9jbGVhcl91bnVzZWRfeGF0dHJzKCk7CisrCX0KKyAJcmV0dXJuIHJjICE9IFNRTElURV9ET05FOworIH0KKyAKK2RpZmYgLS1naXQgYS9wc2V1ZG9fZGIuaCBiL3BzZXVkb19kYi5oCitpbmRleCBhNTRmM2MxLi4xYjI1OTljIDEwMDY0NAorLS0tIGEvcHNldWRvX2RiLmgKKysrKyBiL3BzZXVkb19kYi5oCitAQCAtMzksNyArMzksNyBAQCB0eXBlZGVmIHN0cnVjdCB7CisgCisgZXh0ZXJuIGludCBwZGJfbWF5YmVfYmFja3VwKHZvaWQpOworIGV4dGVybiBpbnQgcGRiX2NhbmNlbF91bmxpbmtfZmlsZShwc2V1ZG9fbXNnX3QgKm1zZyk7CistZXh0ZXJuIGludCBwZGJfZGlkX3VubGlua19maWxlKGNoYXIgKnBhdGgsIGludCBkZWxldGluZyk7CisrZXh0ZXJuIGludCBwZGJfZGlkX3VubGlua19maWxlKGNoYXIgKnBhdGgsIHBzZXVkb19tc2dfdCAqbXNnLCBpbnQgZGVsZXRpbmcpOworIGV4dGVybiBpbnQgcGRiX2RpZF91bmxpbmtfZmlsZXMoaW50IGRlbGV0aW5nKTsKKyBleHRlcm4gaW50IHBkYl9saW5rX2ZpbGUocHNldWRvX21zZ190ICptc2cpOworIGV4dGVybiBpbnQgcGRiX21heV91bmxpbmtfZmlsZShwc2V1ZG9fbXNnX3QgKm1zZywgaW50IGRlbGV0aW5nKTsKKy0tIAorMi43LjQKKwpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9wc2V1ZG8vZmlsZXMvZmFsbGJhY2stZ3JvdXAgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3BzZXVkby9maWxlcy9mYWxsYmFjay1ncm91cAppbmRleCA4MWJmNzMyLi5iYjNkYmNhIDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3BzZXVkby9maWxlcy9mYWxsYmFjay1ncm91cAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3BzZXVkby9maWxlcy9mYWxsYmFjay1ncm91cApAQCAtMSwyICsxLDMgQEAKIHJvb3Q6KjowOgogbWFpbDoqOjg6Citub2JvZHk6Kjo5OToKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHNldWRvL2ZpbGVzL2ZhbGxiYWNrLXBhc3N3ZCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHNldWRvL2ZpbGVzL2ZhbGxiYWNrLXBhc3N3ZAppbmRleCBjMTQ1OGRjLi4wODg5YzU3IDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3BzZXVkby9maWxlcy9mYWxsYmFjay1wYXNzd2QKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9wc2V1ZG8vZmlsZXMvZmFsbGJhY2stcGFzc3dkCkBAIC0xICsxLDIgQEAKIHJvb3Q6OjA6MDpyb290Oi9ob21lL3Jvb3Q6L2Jpbi9zaAorbm9ib2R5Oio6NjU1MzQ6NjU1MzQ6bm9ib2R5Oi9ub25leGlzdGVudDovYmluL3NoCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3BzZXVkby9maWxlcy9oYW5kbGUtcmVtb3ZlLXhhdHRyLnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9wc2V1ZG8vZmlsZXMvaGFuZGxlLXJlbW92ZS14YXR0ci5wYXRjaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOGI3ZjMwYy4uMDAwMDAwMAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3BzZXVkby9maWxlcy9oYW5kbGUtcmVtb3ZlLXhhdHRyLnBhdGNoCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotRnJvbSBhMjRjZjEwMjk2N2E0OTY2YmZhYmUzNmMzNTQyZmI2NWYzNWJmNTM5IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQotRnJvbTogUGV0ZXIgU2VlYmFjaCA8cGV0ZXIuc2VlYmFjaEB3aW5kcml2ZXIuY29tPgotRGF0ZTogV2VkLCAyMyBNYXIgMjAxNiAxMTo1NToyNSAtMDUwMAotU3ViamVjdDogYWN0dWFsbHkgaGFuZGxlIHJlbW92ZV94YXR0ciBjb3JyZWN0bHkKLQotVGhlIHBhdGggaXMgcmVxdWlyZWQgYnV0IHdhc24ndCBiZWluZyBleHRyYWN0ZWQgZnJvbSB0aGUgY2xpZW50J3MgbWVzc2FnZSwKLXJlc3VsdGluZyBpbiB4YXR0ciByZW1vdmFsIG5ldmVyIHdvcmtpbmcuIFRoaXMgZG9lcyBub3QgZnVsbHkgYWRkcmVzcyBzb21lCi1kZWVwZXIgcHJvYmxlbXMgd2l0aCB0aGUgeGF0dHIgaW1wbGVtZW50YXRpb24sIGJ1dCBhdCBsZWFzdCB0aGUgY29tbW9uCi1yZW1vdmFsIGNhc2Ugd29ya3MuCi0KLVVwc3RyZWFtLVN0YXR1czogQmFja3BvcnQKLQotSW5kZXg6IHBzZXVkby0xLjcuNS9DaGFuZ2VMb2cudHh0Ci09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLS0gcHNldWRvLTEuNy41Lm9yaWcvQ2hhbmdlTG9nLnR4dAotKysrIHBzZXVkby0xLjcuNS9DaGFuZ2VMb2cudHh0Ci1AQCAtMSwzICsxLDcgQEAKLSsyMDE2LTAzLTIyOgotKyAgICAgICAqIChzZWVicykgZXh0cmFjdCBwYXRoIGZyb20gbWVzc2FnZSBmb3IgcmVtb3ZlX3hhdHRyIHNvIGl0Ci0rICAgICAgICAgYWN0dWFsbHkgd29ya3MuCi0rCi0gMjAxNi0wMi0wOToKLSAgICAgICAgICogKHNlZWJzKSAxLjcuNSByZWxlYXNlCi0gCi1JbmRleDogcHNldWRvLTEuNy41L3BzZXVkby5jCi09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLS0gcHNldWRvLTEuNy41Lm9yaWcvcHNldWRvLmMKLSsrKyBwc2V1ZG8tMS43LjUvcHNldWRvLmMKLUBAIC01NDMsNiArNTQzLDcgQEAgcHNldWRvX29wKHBzZXVkb19tc2dfdCAqbXNnLCBjb25zdCBjaGFyCi0gCQljYXNlIE9QX0dFVF9YQVRUUjoKLSAJCWNhc2UgT1BfTElTVF9YQVRUUjoKLSAJCWNhc2UgT1BfUkVQTEFDRV9YQVRUUjoKLSsJCWNhc2UgT1BfUkVNT1ZFX1hBVFRSOgotIAkJY2FzZSBPUF9TRVRfWEFUVFI6Ci0gCQkJLyogSW4gYSByZW5hbWUgdGhlcmUgYXJlIHR3byBwYXRocywgbnVsbCBzZXBhcmF0ZWQgaW4gbXNnLT5wYXRoICovCi0gCQkJaW5pdGlhbF9sZW4gPSBzdHJsZW4obXNnLT5wYXRoKTsKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHNldWRvL2ZpbGVzL21vcmVyZXRyaWVzLnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9wc2V1ZG8vZmlsZXMvbW9yZXJldHJpZXMucGF0Y2gKaW5kZXggYzFlNTU1Mi4uYWRlYTI2NiAxMDA2NDQKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9wc2V1ZG8vZmlsZXMvbW9yZXJldHJpZXMucGF0Y2gKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9wc2V1ZG8vZmlsZXMvbW9yZXJldHJpZXMucGF0Y2gKQEAgLTQsMTUgKzQsMTUgQEAKIFVwc3RyZWFtLVN0YXR1czogUGVuZGluZwogUlAgMjAxNi8yLzI4CiAKLUluZGV4OiBwc2V1ZG8tMS43LjUvcHNldWRvX2NsaWVudC5jCitJbmRleDogZ2l0L3BzZXVkb19jbGllbnQuYwogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0tIHBzZXVkby0xLjcuNS5vcmlnL3BzZXVkb19jbGllbnQuYwotKysrIHBzZXVkby0xLjcuNS9wc2V1ZG9fY2xpZW50LmMKLUBAIC0xMjE0LDcgKzEyMTQsNyBAQCBwc2V1ZG9fY2xpZW50X3NldHVwKHZvaWQpIHsKLSAJcmV0dXJuIDE7CistLS0gZ2l0Lm9yaWcvcHNldWRvX2NsaWVudC5jCisrKysgZ2l0L3BzZXVkb19jbGllbnQuYworQEAgLTEyODIsNyArMTI4Miw3IEBAIHBzZXVkb19jbGllbnRfc2V0dXAodm9pZCkgeworIAl9CiAgfQogIAotLSNkZWZpbmUgUFNFVURPX1JFVFJJRVMgNTAKKy0jZGVmaW5lIFBTRVVET19SRVRSSUVTIDIwCiArI2RlZmluZSBQU0VVRE9fUkVUUklFUyAyNTAKICBzdGF0aWMgcHNldWRvX21zZ190ICoKICBwc2V1ZG9fY2xpZW50X3JlcXVlc3QocHNldWRvX21zZ190ICptc2csIHNpemVfdCBsZW4sIGNvbnN0IGNoYXIgKnBhdGgpIHsKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHNldWRvL3BzZXVkby5pbmMgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3BzZXVkby9wc2V1ZG8uaW5jCmluZGV4IDBkZTdiMzYuLjE4Y2U5ZjkgMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHNldWRvL3BzZXVkby5pbmMKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9wc2V1ZG8vcHNldWRvLmluYwpAQCAtMjYsNiArMjYsOCBAQAogTk8zMkxJQlMgPz89ICIxIgogTk8zMkxJQlNfY2xhc3MtbmF0aXZlc2RrID0gIjEiCiAKK1BTRVVET19FWFRSQV9PUFRTID89ICItLWVuYWJsZS1mb3JjZS1hc3luYyAtLXdpdGhvdXQtcGFzc3dkLWZhbGxiYWNrIgorCiAjIENvbXBpbGUgZm9yIHRoZSBsb2NhbCBtYWNoaW5lIGFyY2guLi4KIGRvX2NvbXBpbGUgKCkgewogCWlmIFsgIiR7U0lURUlORk9fQklUU30iID0gIjY0IiBdOyB0aGVuCkBAIC0xMTIsMTAgKzExNCwxNSBAQAogCW9lX3J1bm1ha2UgJ0RFU1RESVI9JHtEfScgJHtNQUtFT1BUU30gJ0xJQj1saWIvcHNldWRvL2xpYiQoTUFSSzY0KScgaW5zdGFsbAogfQogCi0jIFR3byBiZWxvdyBhcmUgdGhlIHNhbWUKLSMgSWYgbmVjZXNzYXJ5IGluc3RhbGwgZm9yIHRoZSBhbHRlcm5hdGl2ZSBtYWNoaW5lIGFyY2guICBUaGlzIGlzIG9ubHkgCi0jIG5lY2Vzc2FyeSBpbiBhIG5hdGl2ZSBidWlsZC4KIGRvX2luc3RhbGxfYXBwZW5kX2NsYXNzLW5hdGl2ZSAoKSB7CisJaW5zdGFsbCAtZCAke0R9JHtzeXNjb25mZGlyfQorCSMgVGhlIGZhbGxiYWNrIGZpbGVzIHNob3VsZCBuZXZlciBiZSBtb2RpZmllZAorCWluc3RhbGwgLW0gNDQ0ICR7V09SS0RJUn0vZmFsbGJhY2stcGFzc3dkICR7RH0ke3N5c2NvbmZkaXJ9L3Bhc3N3ZAorCWluc3RhbGwgLW0gNDQ0ICR7V09SS0RJUn0vZmFsbGJhY2stZ3JvdXAgJHtEfSR7c3lzY29uZmRpcn0vZ3JvdXAKKworCSMgVHdvIG5hdGl2ZS9uYXRpdmVzZGsgZW50cmllcyBiZWxvdyBhcmUgdGhlIHNhbWUKKwkjIElmIG5lY2Vzc2FyeSBpbnN0YWxsIGZvciB0aGUgYWx0ZXJuYXRpdmUgbWFjaGluZSBhcmNoLiAgVGhpcyBpcyBvbmx5CisJIyBuZWNlc3NhcnkgaW4gYSBuYXRpdmUgYnVpbGQuCiAJbWF5YmVfbWFrZTMyCiAJaWYgJG1ha2UzMjsgdGhlbgogCQlta2RpciAtcCAke0R9JHtwcmVmaXh9L2xpYi9wc2V1ZG8vbGliCkBAIC0xMjksNiArMTM2LDcgQEAKIAkJbWtkaXIgLXAgJHtEfSR7cHJlZml4fS9saWIvcHNldWRvL2xpYgogCQljcCBsaWIvcHNldWRvL2xpYi9saWJwc2V1ZG8uc28gJHtEfSR7cHJlZml4fS9saWIvcHNldWRvL2xpYi8uCiAJZmkKKwljaHJwYXRoIC1kICR7RH0ke3ByZWZpeH0vbGliL3BzZXVkby9saWIqL2xpYnBzZXVkby5zbwogfQogCiBCQkNMQVNTRVhURU5EID0gIm5hdGl2ZSBuYXRpdmVzZGsiCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3BzZXVkby9wc2V1ZG9fMS42LjcuYmIgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3BzZXVkby9wc2V1ZG9fMS42LjcuYmIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGI4YzIwYWQuLjAwMDAwMDAKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9wc2V1ZG8vcHNldWRvXzEuNi43LmJiCisrKyAvZGV2L251bGwKQEAgLTEsMTkgKzAsMCBAQAotcmVxdWlyZSBwc2V1ZG8uaW5jCi0KLVNSQ19VUkkgPSAiIFwKLSAgICBodHRwOi8vZG93bmxvYWRzLnlvY3RvcHJvamVjdC5vcmcvcmVsZWFzZXMvcHNldWRvLyR7QlBOfS0ke1BWfS50YXIuYnoyIFwKLSAgICBmaWxlOi8vZmFsbGJhY2stcGFzc3dkIFwKLSAgICBmaWxlOi8vZmFsbGJhY2stZ3JvdXAgXAotIgotCi1TUkNfVVJJW21kNXN1bV0gPSAiNGNkMzk1MDJmOWJkMGU3MzRkZWU4MGUwOGIyOGE1ZjEiCi1TUkNfVVJJW3NoYTI1NnN1bV0gPSAiOWYyY2FjYTVmMTU3OWEzNzZhNTA5Y2Q4MWE4MTE1NmZjMjA4NjUwYWRkOWYwYWYyNzVkYTllOTExZjE4ZjI5MSIKLQotUFNFVURPX0VYVFJBX09QVFMgPz0gIi0tZW5hYmxlLWZvcmNlLWFzeW5jIC0td2l0aG91dC1wYXNzd2QtZmFsbGJhY2siCi0KLWRvX2luc3RhbGxfYXBwZW5kX2NsYXNzLW5hdGl2ZSAoKSB7Ci0JaW5zdGFsbCAtZCAke0R9JHtzeXNjb25mZGlyfQotCSMgVGhlIGZhbGxiYWNrIGZpbGVzIHNob3VsZCBuZXZlciBiZSBtb2RpZmllZAotCWluc3RhbGwgLW0gNDQ0ICR7V09SS0RJUn0vZmFsbGJhY2stcGFzc3dkICR7RH0ke3N5c2NvbmZkaXJ9L3Bhc3N3ZAotCWluc3RhbGwgLW0gNDQ0ICR7V09SS0RJUn0vZmFsbGJhY2stZ3JvdXAgJHtEfSR7c3lzY29uZmRpcn0vZ3JvdXAKLX0KZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHNldWRvL3BzZXVkb18xLjcuNS5iYiBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHNldWRvL3BzZXVkb18xLjcuNS5iYgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDkwZTY0NC4uMDAwMDAwMAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3BzZXVkby9wc2V1ZG9fMS43LjUuYmIKKysrIC9kZXYvbnVsbApAQCAtMSwyMiArMCwwIEBACi1yZXF1aXJlIHBzZXVkby5pbmMKLQotU1JDX1VSSSA9ICIgXAotICAgIGh0dHA6Ly9kb3dubG9hZHMueW9jdG9wcm9qZWN0Lm9yZy9yZWxlYXNlcy9wc2V1ZG8vJHtCUE59LSR7UFZ9LnRhci5iejIgXAotICAgIGZpbGU6Ly8wMDAxLWNvbmZpZ3VyZS1QcnVuZS1QSUUtZmxhZ3MucGF0Y2ggXAotICAgIGZpbGU6Ly9mYWxsYmFjay1wYXNzd2QgXAotICAgIGZpbGU6Ly9mYWxsYmFjay1ncm91cCBcCi0gICAgZmlsZTovL21vcmVyZXRyaWVzLnBhdGNoIFwKLSAgICBmaWxlOi8vaGFuZGxlLXJlbW92ZS14YXR0ci5wYXRjaCBcCi0iCi0KLVNSQ19VUklbbWQ1c3VtXSA9ICJjMTAyMDk5MzhmMDMxMjhkMGMxOTNmMDQxZmYzNTk2ZCIKLVNSQ19VUklbc2hhMjU2c3VtXSA9ICJmZDg5Y2FkZWM5ODRkM2I4MjAyYWNhNDY1ODk4YjFiYjQzNTBlMGQ2M2JhOWFhOWFjODk5ZjZmNTAyNzBlNjg4IgotCi1QU0VVRE9fRVhUUkFfT1BUUyA/PSAiLS1lbmFibGUtZm9yY2UtYXN5bmMgLS13aXRob3V0LXBhc3N3ZC1mYWxsYmFjayIKLQotZG9faW5zdGFsbF9hcHBlbmRfY2xhc3MtbmF0aXZlICgpIHsKLQlpbnN0YWxsIC1kICR7RH0ke3N5c2NvbmZkaXJ9Ci0JIyBUaGUgZmFsbGJhY2sgZmlsZXMgc2hvdWxkIG5ldmVyIGJlIG1vZGlmaWVkCi0JaW5zdGFsbCAtbSA0NDQgJHtXT1JLRElSfS9mYWxsYmFjay1wYXNzd2QgJHtEfSR7c3lzY29uZmRpcn0vcGFzc3dkCi0JaW5zdGFsbCAtbSA0NDQgJHtXT1JLRElSfS9mYWxsYmFjay1ncm91cCAke0R9JHtzeXNjb25mZGlyfS9ncm91cAotfQpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9wc2V1ZG8vcHNldWRvXzEuOC4xLmJiIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9wc2V1ZG8vcHNldWRvXzEuOC4xLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZiNzAwMzQKLS0tIC9kZXYvbnVsbAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3BzZXVkby9wc2V1ZG9fMS44LjEuYmIKQEAgLTAsMCArMSwxNiBAQAorcmVxdWlyZSBwc2V1ZG8uaW5jCisKK1NSQ19VUkkgPSAiaHR0cDovL2Rvd25sb2Fkcy55b2N0b3Byb2plY3Qub3JnL3JlbGVhc2VzL3BzZXVkby8ke0JQTn0tJHtQVn0udGFyLmJ6MiBcCisgICAgICAgICAgIGZpbGU6Ly8wMDAxLWNvbmZpZ3VyZS1QcnVuZS1QSUUtZmxhZ3MucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vZmFsbGJhY2stcGFzc3dkIFwKKyAgICAgICAgICAgZmlsZTovL2ZhbGxiYWNrLWdyb3VwIFwKKyAgICAgICAgICAgZmlsZTovL21vcmVyZXRyaWVzLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL0ZpeC14YXR0ci1wZXJmb3JtYW5jZS5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly8wMDAxLURvbi10LXNlbmQtU0lHVVNSMS10by1pbml0LnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovLzAwMDEtUXVpZXQtZGlhZ25vc3RpY3MtZHVyaW5nLXN0YXJ0dXAtZm9yLXBzZXVkby1kLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovLzAwMDItVXNlLWNvcnJlY3QtZmlsZS1kZXNjcmlwdG9yLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovLzAwMDMtRml4LXJlbmFtZWF0LXBhcmFsbGVsLXRvLXByZXZpb3VzLWZpeC10by1yZW5hbWUucGF0Y2ggXAorICAgICAgICAgICAiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICJlZTM4ZTRmYjYyZmY4OGFkMDY3YjFhNWEzODI1YmFjNyIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICJkYWM0YWQyZDIxMjI4MDUzMTUxMTIxMzIwZjYyOWQ0MWRkNWMwYzg3Njk1YWM0ZTdhZWEyODZjNDE0MTkyYWI1IgpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9wc2V1ZG8vcHNldWRvX2dpdC5iYiBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHNldWRvL3BzZXVkb19naXQuYmIKaW5kZXggYWJmZjFjZi4uODExMGIxYSAxMDA2NDQKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9wc2V1ZG8vcHNldWRvX2dpdC5iYgorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3BzZXVkby9wc2V1ZG9fZ2l0LmJiCkBAIC0xLDExICsxLDE1IEBACiByZXF1aXJlIHBzZXVkby5pbmMKIAotU1JDUkVWID0gIjc4NmM2ZDM4MTM2MjJkMThlMTJkMzZjNGFhNzIyYWY2YTQxN2M4ZmEiCi1QViA9ICIxLjcuNStnaXQke1NSQ1BWfSIKK1NSQ1JFViA9ICJiZWZjNmRiZDY0NjlkNDI4YzllMDgzMGRiZTUxYmRmN2FjMzlkOWFlIgorUFYgPSAiMS44LjErZ2l0JHtTUkNQVn0iCiAKIERFRkFVTFRfUFJFRkVSRU5DRSA9ICItMSIKIAotU1JDX1VSSSA9ICJnaXQ6Ly9naXQueW9jdG9wcm9qZWN0Lm9yZy9wc2V1ZG8iCitTUkNfVVJJID0gImdpdDovL2dpdC55b2N0b3Byb2plY3Qub3JnL3BzZXVkbyBcCisgICAgICAgICAgIGZpbGU6Ly8wMDAxLWNvbmZpZ3VyZS1QcnVuZS1QSUUtZmxhZ3MucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vZmFsbGJhY2stcGFzc3dkIFwKKyAgICAgICAgICAgZmlsZTovL2ZhbGxiYWNrLWdyb3VwIFwKKyAgICAgICAgICAgZmlsZTovL21vcmVyZXRyaWVzLnBhdGNoIgogCiBTID0gIiR7V09SS0RJUn0vZ2l0IgogCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24tbnVtcHkvMDAwMS1Eb24tdC1zZWFyY2gtdXNyLWFuZC1zby1vbi1mb3ItbGlicmFyaWVzLWJ5LWRlZmF1bHQtLnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24tbnVtcHkvZmlsZXMvMDAwMS1Eb24tdC1zZWFyY2gtdXNyLWFuZC1zby1vbi1mb3ItbGlicmFyaWVzLWJ5LWRlZmF1bHQtLnBhdGNoCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24tbnVtcHkvMDAwMS1Eb24tdC1zZWFyY2gtdXNyLWFuZC1zby1vbi1mb3ItbGlicmFyaWVzLWJ5LWRlZmF1bHQtLnBhdGNoCnJlbmFtZSB0byBpbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi1udW1weS9maWxlcy8wMDAxLURvbi10LXNlYXJjaC11c3ItYW5kLXNvLW9uLWZvci1saWJyYXJpZXMtYnktZGVmYXVsdC0ucGF0Y2gKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uLW51bXB5L2ZpbGVzL2FhcmNoNjQvX251bXB5Y29uZmlnLmggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi1udW1weS9maWxlcy9hYXJjaDY0L19udW1weWNvbmZpZy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjEwOWRlYjAKLS0tIC9kZXYvbnVsbAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi1udW1weS9maWxlcy9hYXJjaDY0L19udW1weWNvbmZpZy5oCkBAIC0wLDAgKzEsMzIgQEAKKyNkZWZpbmUgTlBZX0hBVkVfRU5ESUFOX0ggMQorI2RlZmluZSBOUFlfU0laRU9GX1NIT1JUIFNJWkVPRl9TSE9SVAorI2RlZmluZSBOUFlfU0laRU9GX0lOVCBTSVpFT0ZfSU5UCisjZGVmaW5lIE5QWV9TSVpFT0ZfTE9ORyBTSVpFT0ZfTE9ORworI2RlZmluZSBOUFlfU0laRU9GX0ZMT0FUIDQKKyNkZWZpbmUgTlBZX1NJWkVPRl9DT01QTEVYX0ZMT0FUIDgKKyNkZWZpbmUgTlBZX1NJWkVPRl9ET1VCTEUgOAorI2RlZmluZSBOUFlfU0laRU9GX0NPTVBMRVhfRE9VQkxFIDE2CisjZGVmaW5lIE5QWV9TSVpFT0ZfTE9OR0RPVUJMRSAxNgorI2RlZmluZSBOUFlfU0laRU9GX0NPTVBMRVhfTE9OR0RPVUJMRSAzMgorI2RlZmluZSBOUFlfU0laRU9GX1BZX0lOVFBUUl9UIDgKKyNkZWZpbmUgTlBZX1NJWkVPRl9QWV9MT05HX0xPTkcgOAorI2RlZmluZSBOUFlfU0laRU9GX0xPTkdMT05HIDgKKyNkZWZpbmUgTlBZX1NJWkVPRl9PRkZfVCA4CisjZGVmaW5lIE5QWV9OT19TTVAgMAorI2RlZmluZSBOUFlfSEFWRV9ERUNMX0lTTkFOCisjZGVmaW5lIE5QWV9IQVZFX0RFQ0xfSVNJTkYKKyNkZWZpbmUgTlBZX0hBVkVfREVDTF9JU0ZJTklURQorI2RlZmluZSBOUFlfSEFWRV9ERUNMX1NJR05CSVQKKyNkZWZpbmUgTlBZX1VTRV9DOTlfQ09NUExFWCAxCisjZGVmaW5lIE5QWV9IQVZFX0NPTVBMRVhfRE9VQkxFIDEKKyNkZWZpbmUgTlBZX0hBVkVfQ09NUExFWF9GTE9BVCAxCisjZGVmaW5lIE5QWV9IQVZFX0NPTVBMRVhfTE9OR19ET1VCTEUgMQorI2RlZmluZSBOUFlfRU5BQkxFX1NFUEFSQVRFX0NPTVBJTEFUSU9OIDEKKyNkZWZpbmUgTlBZX1VTRV9DOTlfRk9STUFUUyAxCisjZGVmaW5lIE5QWV9WSVNJQklMSVRZX0hJRERFTiBfX2F0dHJpYnV0ZV9fKCh2aXNpYmlsaXR5KCJoaWRkZW4iKSkpCisjZGVmaW5lIE5QWV9BQklfVkVSU0lPTiAweDAxMDAwMDA5CisjZGVmaW5lIE5QWV9BUElfVkVSU0lPTiAweDAwMDAwMDBBCisKKyNpZm5kZWYgX19TVERDX0ZPUk1BVF9NQUNST1MKKyNkZWZpbmUgX19TVERDX0ZPUk1BVF9NQUNST1MgMQorI2VuZGlmCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24tbnVtcHkvYWFyY2g2NC9jb25maWcuaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uLW51bXB5L2ZpbGVzL2FhcmNoNjQvY29uZmlnLmgKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi1udW1weS9hYXJjaDY0L2NvbmZpZy5oCnJlbmFtZSB0byBpbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi1udW1weS9maWxlcy9hYXJjaDY0L2NvbmZpZy5oCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24tbnVtcHkvYXJtL2NvbmZpZy5oIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24tbnVtcHkvZmlsZXMvYXJtL2NvbmZpZy5oCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24tbnVtcHkvYXJtL2NvbmZpZy5oCnJlbmFtZSB0byBpbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi1udW1weS9maWxlcy9hcm0vY29uZmlnLmgKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi1udW1weS9hcm0vbnVtcHljb25maWcuaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uLW51bXB5L2ZpbGVzL2FybS9udW1weWNvbmZpZy5oCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24tbnVtcHkvYXJtL251bXB5Y29uZmlnLmgKcmVuYW1lIHRvIGltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uLW51bXB5L2ZpbGVzL2FybS9udW1weWNvbmZpZy5oCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24tbnVtcHkvYXJtZWIvY29uZmlnLmggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi1udW1weS9maWxlcy9hcm1lYi9jb25maWcuaApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLW51bXB5L2FybWViL2NvbmZpZy5oCnJlbmFtZSB0byBpbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi1udW1weS9maWxlcy9hcm1lYi9jb25maWcuaApkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLW51bXB5L2FybWViL251bXB5Y29uZmlnLmggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi1udW1weS9maWxlcy9hcm1lYi9udW1weWNvbmZpZy5oCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24tbnVtcHkvYXJtZWIvbnVtcHljb25maWcuaApyZW5hbWUgdG8gaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24tbnVtcHkvZmlsZXMvYXJtZWIvbnVtcHljb25maWcuaApkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24tbnVtcHkvZmlsZXMvZml4X3NoZWJhbmdfZjJweS5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uLW51bXB5L2ZpbGVzL2ZpeF9zaGViYW5nX2YycHkucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGJlNmU0ZAotLS0gL2Rldi9udWxsCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uLW51bXB5L2ZpbGVzL2ZpeF9zaGViYW5nX2YycHkucGF0Y2gKQEAgLTAsMCArMSwyOSBAQAorVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtlbWJlZGRlZCBzcGVjaWZpY10KKworQXZvaWRzIHVzaW5nIHB5dGhvbiBmcm9tIHRoZSBIT1NUcyBuYXRpdmUgc3lzcm9vdCBmb3IgZjJweSwKK3VzZXMgVEFSR0VUIGVudiBweXRob24gaW5zdGVhZC4KKworU2lnbmVkLW9mZi1ieTogQWxlamFuZHJvIEhlcm5hbmRleiA8YWxlamFuZHJvLmhlcm5hbmRlekBsaW51eC5pbnRlbC5jb20+CisKK0luZGV4OiBudW1weS0xLjExLjAvbnVtcHkvZjJweS9zZXR1cC5weQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIG51bXB5LTEuMTEuMC5vcmlnL251bXB5L2YycHkvc2V0dXAucHkKKysrKyBudW1weS0xLjExLjAvbnVtcHkvZjJweS9zZXR1cC5weQorQEAgLTM3LDEwICszNywxMyBAQCBkZWYgX2dldF9mMnB5X3NoZWJhbmcoKToKKyAgICAgc2hvdWxkIGJlIGBgIyFweXRob25gYCByYXRoZXIgdGhhbiBgYCMhYGAgZm9sbG93ZWQgYnkgdGhlIGNvbnRlbnRzIG9mCisgICAgIGBgc3lzLmV4ZWN1dGFibGVgYC4KKyAgICAgIiIiCistICAgIGlmIHNldCgoJ2JkaXN0X3doZWVsJywgJ2JkaXN0X2VnZycsICdiZGlzdF93aW5pbnN0JywKKy0gICAgICAgICAgICAnYmRpc3RfcnBtJykpLmludGVyc2VjdGlvbihzeXMuYXJndik6CistICAgICAgICByZXR1cm4gJyMhcHl0aG9uJworLSAgICByZXR1cm4gJyMhJyArIHN5cy5leGVjdXRhYmxlCisrICAgICNpZiBzZXQoKCdiZGlzdF93aGVlbCcsICdiZGlzdF9lZ2cnLCAnYmRpc3Rfd2luaW5zdCcsCisrICAgICMgICAgICAgICdiZGlzdF9ycG0nKSkuaW50ZXJzZWN0aW9uKHN5cy5hcmd2KToKKysgICAgIyAgICByZXR1cm4gJyMhcHl0aG9uJworKyAgICAjcmV0dXJuICcjIScgKyBzeXMuZXhlY3V0YWJsZQorKyAgICAKKysgICAgIyBPbiBPRSwgd2UgbmVlZCB0byBhdm9pZCB1c2luZyB0aGUgSE9TVHMgcHl0aG9uLW5hdGl2ZSwgd2UgcmV0dXJuIGVudiBweXRob24gaW5zdGVhZAorKyAgICByZXR1cm4gJyMhL3Vzci9iaW4vZW52IHB5dGhvbicKKyAKKyAKKyBkZWYgY29uZmlndXJhdGlvbihwYXJlbnRfcGFja2FnZT0nJywgdG9wX3BhdGg9Tm9uZSk6CmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi1udW1weS9maWxlcy9taXBzL19udW1weWNvbmZpZy5oIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24tbnVtcHkvZmlsZXMvbWlwcy9fbnVtcHljb25maWcuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40YzQ2NWMyCi0tLSAvZGV2L251bGwKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24tbnVtcHkvZmlsZXMvbWlwcy9fbnVtcHljb25maWcuaApAQCAtMCwwICsxLDMyIEBACisjZGVmaW5lIE5QWV9IQVZFX0VORElBTl9IIDEKKyNkZWZpbmUgTlBZX1NJWkVPRl9TSE9SVCBTSVpFT0ZfU0hPUlQKKyNkZWZpbmUgTlBZX1NJWkVPRl9JTlQgU0laRU9GX0lOVAorI2RlZmluZSBOUFlfU0laRU9GX0xPTkcgU0laRU9GX0xPTkcKKyNkZWZpbmUgTlBZX1NJWkVPRl9GTE9BVCA0CisjZGVmaW5lIE5QWV9TSVpFT0ZfQ09NUExFWF9GTE9BVCA4CisjZGVmaW5lIE5QWV9TSVpFT0ZfRE9VQkxFIDgKKyNkZWZpbmUgTlBZX1NJWkVPRl9DT01QTEVYX0RPVUJMRSAxNgorI2RlZmluZSBOUFlfU0laRU9GX0xPTkdET1VCTEUgOAorI2RlZmluZSBOUFlfU0laRU9GX0NPTVBMRVhfTE9OR0RPVUJMRSAxNgorI2RlZmluZSBOUFlfRU5BQkxFX1NFUEFSQVRFX0NPTVBJTEFUSU9OIDEKKyNkZWZpbmUgTlBZX1NJWkVPRl9QWV9JTlRQVFJfVCA0CisjZGVmaW5lIE5QWV9TSVpFT0ZfUFlfTE9OR19MT05HIDgKKyNkZWZpbmUgTlBZX1NJWkVPRl9MT05HTE9ORyA4CisjZGVmaW5lIE5QWV9TSVpFT0ZfT0ZGX1QgOAorI2RlZmluZSBOUFlfTk9fU01QIDAKKyNkZWZpbmUgTlBZX0hBVkVfREVDTF9JU05BTgorI2RlZmluZSBOUFlfSEFWRV9ERUNMX0lTSU5GCisjZGVmaW5lIE5QWV9IQVZFX0RFQ0xfSVNGSU5JVEUKKyNkZWZpbmUgTlBZX0hBVkVfREVDTF9TSUdOQklUCisjZGVmaW5lIE5QWV9VU0VfQzk5X0NPTVBMRVggMQorI2RlZmluZSBOUFlfSEFWRV9DT01QTEVYX0RPVUJMRSAxCisjZGVmaW5lIE5QWV9IQVZFX0NPTVBMRVhfRkxPQVQgMQorI2RlZmluZSBOUFlfSEFWRV9DT01QTEVYX0xPTkdfRE9VQkxFIDEKKyNkZWZpbmUgTlBZX1VTRV9DOTlfRk9STUFUUyAxCisjZGVmaW5lIE5QWV9WSVNJQklMSVRZX0hJRERFTiBfX2F0dHJpYnV0ZV9fKCh2aXNpYmlsaXR5KCJoaWRkZW4iKSkpCisjZGVmaW5lIE5QWV9BQklfVkVSU0lPTiAweDAxMDAwMDA5CisjZGVmaW5lIE5QWV9BUElfVkVSU0lPTiAweDAwMDAwMDBBCisKKyNpZm5kZWYgX19TVERDX0ZPUk1BVF9NQUNST1MKKyNkZWZpbmUgX19TVERDX0ZPUk1BVF9NQUNST1MgMQorI2VuZGlmCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24tbnVtcHkvbWlwcy9jb25maWcuaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uLW51bXB5L2ZpbGVzL21pcHMvY29uZmlnLmgKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi1udW1weS9taXBzL2NvbmZpZy5oCnJlbmFtZSB0byBpbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi1udW1weS9maWxlcy9taXBzL2NvbmZpZy5oCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi1udW1weS9maWxlcy9taXBzNjQvX251bXB5Y29uZmlnLmggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi1udW1weS9maWxlcy9taXBzNjQvX251bXB5Y29uZmlnLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGViYjM5MAotLS0gL2Rldi9udWxsCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uLW51bXB5L2ZpbGVzL21pcHM2NC9fbnVtcHljb25maWcuaApAQCAtMCwwICsxLDMyIEBACisjZGVmaW5lIE5QWV9IQVZFX0VORElBTl9IIDEKKyNkZWZpbmUgTlBZX1NJWkVPRl9TSE9SVCBTSVpFT0ZfU0hPUlQKKyNkZWZpbmUgTlBZX1NJWkVPRl9JTlQgU0laRU9GX0lOVAorI2RlZmluZSBOUFlfU0laRU9GX0xPTkcgU0laRU9GX0xPTkcKKyNkZWZpbmUgTlBZX1NJWkVPRl9GTE9BVCA0CisjZGVmaW5lIE5QWV9TSVpFT0ZfQ09NUExFWF9GTE9BVCA4CisjZGVmaW5lIE5QWV9TSVpFT0ZfRE9VQkxFIDgKKyNkZWZpbmUgTlBZX1NJWkVPRl9DT01QTEVYX0RPVUJMRSAxNgorI2RlZmluZSBOUFlfU0laRU9GX0xPTkdET1VCTEUgMTYKKyNkZWZpbmUgTlBZX1NJWkVPRl9DT01QTEVYX0xPTkdET1VCTEUgMzIKKyNkZWZpbmUgTlBZX0VOQUJMRV9TRVBBUkFURV9DT01QSUxBVElPTiAxCisjZGVmaW5lIE5QWV9TSVpFT0ZfUFlfSU5UUFRSX1QgOAorI2RlZmluZSBOUFlfU0laRU9GX1BZX0xPTkdfTE9ORyA4CisjZGVmaW5lIE5QWV9TSVpFT0ZfTE9OR0xPTkcgOAorI2RlZmluZSBOUFlfU0laRU9GX09GRl9UIDgKKyNkZWZpbmUgTlBZX05PX1NNUCAwCisjZGVmaW5lIE5QWV9IQVZFX0RFQ0xfSVNOQU4KKyNkZWZpbmUgTlBZX0hBVkVfREVDTF9JU0lORgorI2RlZmluZSBOUFlfSEFWRV9ERUNMX0lTRklOSVRFCisjZGVmaW5lIE5QWV9IQVZFX0RFQ0xfU0lHTkJJVAorI2RlZmluZSBOUFlfVVNFX0M5OV9DT01QTEVYIDEKKyNkZWZpbmUgTlBZX0hBVkVfQ09NUExFWF9ET1VCTEUgMQorI2RlZmluZSBOUFlfSEFWRV9DT01QTEVYX0ZMT0FUIDEKKyNkZWZpbmUgTlBZX0hBVkVfQ09NUExFWF9MT05HX0RPVUJMRSAxCisjZGVmaW5lIE5QWV9VU0VfQzk5X0ZPUk1BVFMgMQorI2RlZmluZSBOUFlfVklTSUJJTElUWV9ISURERU4gX19hdHRyaWJ1dGVfXygodmlzaWJpbGl0eSgiaGlkZGVuIikpKQorI2RlZmluZSBOUFlfQUJJX1ZFUlNJT04gMHgwMTAwMDAwOQorI2RlZmluZSBOUFlfQVBJX1ZFUlNJT04gMHgwMDAwMDAwQQorCisjaWZuZGVmIF9fU1REQ19GT1JNQVRfTUFDUk9TCisjZGVmaW5lIF9fU1REQ19GT1JNQVRfTUFDUk9TIDEKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLW51bXB5L21pcHM2NC9jb25maWcuaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uLW51bXB5L2ZpbGVzL21pcHM2NC9jb25maWcuaApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLW51bXB5L21pcHM2NC9jb25maWcuaApyZW5hbWUgdG8gaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24tbnVtcHkvZmlsZXMvbWlwczY0L2NvbmZpZy5oCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24tbnVtcHkvbWlwczY0bjMyL19udW1weWNvbmZpZy5oIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24tbnVtcHkvZmlsZXMvbWlwczY0bjMyL19udW1weWNvbmZpZy5oCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24tbnVtcHkvbWlwczY0bjMyL19udW1weWNvbmZpZy5oCnJlbmFtZSB0byBpbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi1udW1weS9maWxlcy9taXBzNjRuMzIvX251bXB5Y29uZmlnLmgKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi1udW1weS9taXBzNjRuMzIvY29uZmlnLmggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi1udW1weS9maWxlcy9taXBzNjRuMzIvY29uZmlnLmgKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi1udW1weS9taXBzNjRuMzIvY29uZmlnLmgKcmVuYW1lIHRvIGltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uLW51bXB5L2ZpbGVzL21pcHM2NG4zMi9jb25maWcuaApkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLW51bXB5L21pcHNlbC9jb25maWcuaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uLW51bXB5L2ZpbGVzL21pcHNlbC9jb25maWcuaApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLW51bXB5L21pcHNlbC9jb25maWcuaApyZW5hbWUgdG8gaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24tbnVtcHkvZmlsZXMvbWlwc2VsL2NvbmZpZy5oCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi1udW1weS9maWxlcy9taXBzZWwvbnVtcHljb25maWcuaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uLW51bXB5L2ZpbGVzL21pcHNlbC9udW1weWNvbmZpZy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBiN2NkNTEKLS0tIC9kZXYvbnVsbAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi1udW1weS9maWxlcy9taXBzZWwvbnVtcHljb25maWcuaApAQCAtMCwwICsxLDE4IEBACisvKiBjYXQgLi9zcmMubGludXgtaTY4Ni0yLjUvbnVtcHkvY29yZS9pbmNsdWRlL251bXB5L251bXB5Y29uZmlnLmggKi8KKy8qCisgKiAgKiBUaGlzIGZpbGUgaXMgZ2VuZXJhdGVkIGJ5IG51bXB5L2NvcmUvc2V0dXAucHljLiBETyBOT1QgRURJVCAKKyAqICAgKi8KKyNkZWZpbmUgTlBZX1NJWkVPRl9TSE9SVCAyIAorI2RlZmluZSBOUFlfU0laRU9GX0lOVCA0IAorI2RlZmluZSBOUFlfU0laRU9GX0xPTkcgNCAKKyNkZWZpbmUgTlBZX1NJWkVPRl9GTE9BVCA0IAorI2RlZmluZSBOUFlfU0laRU9GX0RPVUJMRSA4IAorI2RlZmluZSBOUFlfU0laRU9GX0xPTkdET1VCTEUgMTIgCisjZGVmaW5lIE5QWV9TSVpFT0ZfUFlfSU5UUFRSX1QgNCAKKyNkZWZpbmUgTlBZX05PX1NNUCAwCisKKyNkZWZpbmUgTlBZX1NJWkVPRl9MT05HTE9ORyA4IAorI2RlZmluZSBOUFlfU0laRU9GX1BZX0xPTkdfTE9ORyA4IAorI2RlZmluZSBOUFlfU0laRU9GX09GRl9UIDgKKy8qICNkZWZpbmUgQ0hBUl9CSVQgOCAqLworCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi1udW1weS9maWxlcy9wb3dlcnBjL19udW1weWNvbmZpZy5oIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24tbnVtcHkvZmlsZXMvcG93ZXJwYy9fbnVtcHljb25maWcuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42ZTcyNjJhCi0tLSAvZGV2L251bGwKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24tbnVtcHkvZmlsZXMvcG93ZXJwYy9fbnVtcHljb25maWcuaApAQCAtMCwwICsxLDMyIEBACisjZGVmaW5lIE5QWV9IQVZFX0VORElBTl9IIDEKKyNkZWZpbmUgTlBZX1NJWkVPRl9TSE9SVCBTSVpFT0ZfU0hPUlQKKyNkZWZpbmUgTlBZX1NJWkVPRl9JTlQgU0laRU9GX0lOVAorI2RlZmluZSBOUFlfU0laRU9GX0xPTkcgU0laRU9GX0xPTkcKKyNkZWZpbmUgTlBZX1NJWkVPRl9GTE9BVCA0CisjZGVmaW5lIE5QWV9TSVpFT0ZfQ09NUExFWF9GTE9BVCA4CisjZGVmaW5lIE5QWV9TSVpFT0ZfRE9VQkxFIDgKKyNkZWZpbmUgTlBZX1NJWkVPRl9DT01QTEVYX0RPVUJMRSAxNgorI2RlZmluZSBOUFlfU0laRU9GX0xPTkdET1VCTEUgMTYKKyNkZWZpbmUgTlBZX1NJWkVPRl9DT01QTEVYX0xPTkdET1VCTEUgMzIKKyNkZWZpbmUgTlBZX0VOQUJMRV9TRVBBUkFURV9DT01QSUxBVElPTiAxCisjZGVmaW5lIE5QWV9TSVpFT0ZfUFlfSU5UUFRSX1QgNAorI2RlZmluZSBOUFlfU0laRU9GX1BZX0xPTkdfTE9ORyA4CisjZGVmaW5lIE5QWV9TSVpFT0ZfTE9OR0xPTkcgOAorI2RlZmluZSBOUFlfU0laRU9GX09GRl9UIDgKKyNkZWZpbmUgTlBZX05PX1NNUCAwCisjZGVmaW5lIE5QWV9IQVZFX0RFQ0xfSVNOQU4KKyNkZWZpbmUgTlBZX0hBVkVfREVDTF9JU0lORgorI2RlZmluZSBOUFlfSEFWRV9ERUNMX0lTRklOSVRFCisjZGVmaW5lIE5QWV9IQVZFX0RFQ0xfU0lHTkJJVAorI2RlZmluZSBOUFlfVVNFX0M5OV9DT01QTEVYIDEKKyNkZWZpbmUgTlBZX0hBVkVfQ09NUExFWF9ET1VCTEUgMQorI2RlZmluZSBOUFlfSEFWRV9DT01QTEVYX0ZMT0FUIDEKKyNkZWZpbmUgTlBZX0hBVkVfQ09NUExFWF9MT05HX0RPVUJMRSAxCisjZGVmaW5lIE5QWV9VU0VfQzk5X0ZPUk1BVFMgMQorI2RlZmluZSBOUFlfVklTSUJJTElUWV9ISURERU4gX19hdHRyaWJ1dGVfXygodmlzaWJpbGl0eSgiaGlkZGVuIikpKQorI2RlZmluZSBOUFlfQUJJX1ZFUlNJT04gMHgwMTAwMDAwOQorI2RlZmluZSBOUFlfQVBJX1ZFUlNJT04gMHgwMDAwMDAwQQorCisjaWZuZGVmIF9fU1REQ19GT1JNQVRfTUFDUk9TCisjZGVmaW5lIF9fU1REQ19GT1JNQVRfTUFDUk9TIDEKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLW51bXB5L3Bvd2VycGMvY29uZmlnLmggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi1udW1weS9maWxlcy9wb3dlcnBjL2NvbmZpZy5oCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24tbnVtcHkvcG93ZXJwYy9jb25maWcuaApyZW5hbWUgdG8gaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24tbnVtcHkvZmlsZXMvcG93ZXJwYy9jb25maWcuaApkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24tbnVtcHkvZmlsZXMvcG93ZXJwYzY0L19udW1weWNvbmZpZy5oIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24tbnVtcHkvZmlsZXMvcG93ZXJwYzY0L19udW1weWNvbmZpZy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRlYmIzOTAKLS0tIC9kZXYvbnVsbAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi1udW1weS9maWxlcy9wb3dlcnBjNjQvX251bXB5Y29uZmlnLmgKQEAgLTAsMCArMSwzMiBAQAorI2RlZmluZSBOUFlfSEFWRV9FTkRJQU5fSCAxCisjZGVmaW5lIE5QWV9TSVpFT0ZfU0hPUlQgU0laRU9GX1NIT1JUCisjZGVmaW5lIE5QWV9TSVpFT0ZfSU5UIFNJWkVPRl9JTlQKKyNkZWZpbmUgTlBZX1NJWkVPRl9MT05HIFNJWkVPRl9MT05HCisjZGVmaW5lIE5QWV9TSVpFT0ZfRkxPQVQgNAorI2RlZmluZSBOUFlfU0laRU9GX0NPTVBMRVhfRkxPQVQgOAorI2RlZmluZSBOUFlfU0laRU9GX0RPVUJMRSA4CisjZGVmaW5lIE5QWV9TSVpFT0ZfQ09NUExFWF9ET1VCTEUgMTYKKyNkZWZpbmUgTlBZX1NJWkVPRl9MT05HRE9VQkxFIDE2CisjZGVmaW5lIE5QWV9TSVpFT0ZfQ09NUExFWF9MT05HRE9VQkxFIDMyCisjZGVmaW5lIE5QWV9FTkFCTEVfU0VQQVJBVEVfQ09NUElMQVRJT04gMQorI2RlZmluZSBOUFlfU0laRU9GX1BZX0lOVFBUUl9UIDgKKyNkZWZpbmUgTlBZX1NJWkVPRl9QWV9MT05HX0xPTkcgOAorI2RlZmluZSBOUFlfU0laRU9GX0xPTkdMT05HIDgKKyNkZWZpbmUgTlBZX1NJWkVPRl9PRkZfVCA4CisjZGVmaW5lIE5QWV9OT19TTVAgMAorI2RlZmluZSBOUFlfSEFWRV9ERUNMX0lTTkFOCisjZGVmaW5lIE5QWV9IQVZFX0RFQ0xfSVNJTkYKKyNkZWZpbmUgTlBZX0hBVkVfREVDTF9JU0ZJTklURQorI2RlZmluZSBOUFlfSEFWRV9ERUNMX1NJR05CSVQKKyNkZWZpbmUgTlBZX1VTRV9DOTlfQ09NUExFWCAxCisjZGVmaW5lIE5QWV9IQVZFX0NPTVBMRVhfRE9VQkxFIDEKKyNkZWZpbmUgTlBZX0hBVkVfQ09NUExFWF9GTE9BVCAxCisjZGVmaW5lIE5QWV9IQVZFX0NPTVBMRVhfTE9OR19ET1VCTEUgMQorI2RlZmluZSBOUFlfVVNFX0M5OV9GT1JNQVRTIDEKKyNkZWZpbmUgTlBZX1ZJU0lCSUxJVFlfSElEREVOIF9fYXR0cmlidXRlX18oKHZpc2liaWxpdHkoImhpZGRlbiIpKSkKKyNkZWZpbmUgTlBZX0FCSV9WRVJTSU9OIDB4MDEwMDAwMDkKKyNkZWZpbmUgTlBZX0FQSV9WRVJTSU9OIDB4MDAwMDAwMEEKKworI2lmbmRlZiBfX1NURENfRk9STUFUX01BQ1JPUworI2RlZmluZSBfX1NURENfRk9STUFUX01BQ1JPUyAxCisjZW5kaWYKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi1udW1weS9wb3dlcnBjNjQvY29uZmlnLmggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi1udW1weS9maWxlcy9wb3dlcnBjNjQvY29uZmlnLmgKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi1udW1weS9wb3dlcnBjNjQvY29uZmlnLmgKcmVuYW1lIHRvIGltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uLW51bXB5L2ZpbGVzL3Bvd2VycGM2NC9jb25maWcuaApkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLW51bXB5L3JlbW92ZS1idWlsZC1wYXRoLWluLWNvbW1lbnRzLnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24tbnVtcHkvZmlsZXMvcmVtb3ZlLWJ1aWxkLXBhdGgtaW4tY29tbWVudHMucGF0Y2gKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi1udW1weS9yZW1vdmUtYnVpbGQtcGF0aC1pbi1jb21tZW50cy5wYXRjaApyZW5hbWUgdG8gaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24tbnVtcHkvZmlsZXMvcmVtb3ZlLWJ1aWxkLXBhdGgtaW4tY29tbWVudHMucGF0Y2gKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi1udW1weS94ODYtNjQvX251bXB5Y29uZmlnLmggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi1udW1weS9maWxlcy94ODYtNjQvX251bXB5Y29uZmlnLmgKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi1udW1weS94ODYtNjQvX251bXB5Y29uZmlnLmgKcmVuYW1lIHRvIGltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uLW51bXB5L2ZpbGVzL3g4Ni02NC9fbnVtcHljb25maWcuaApkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLW51bXB5L3g4Ni02NC9jb25maWcuaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uLW51bXB5L2ZpbGVzL3g4Ni02NC9jb25maWcuaApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLW51bXB5L3g4Ni02NC9jb25maWcuaApyZW5hbWUgdG8gaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24tbnVtcHkvZmlsZXMveDg2LTY0L2NvbmZpZy5oCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24tbnVtcHkveDg2L2NvbmZpZy5oIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24tbnVtcHkvZmlsZXMveDg2L2NvbmZpZy5oCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24tbnVtcHkveDg2L2NvbmZpZy5oCnJlbmFtZSB0byBpbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi1udW1weS9maWxlcy94ODYvY29uZmlnLmgKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi1udW1weS94ODYvbnVtcHljb25maWcuaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uLW51bXB5L2ZpbGVzL3g4Ni9udW1weWNvbmZpZy5oCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24tbnVtcHkveDg2L251bXB5Y29uZmlnLmgKcmVuYW1lIHRvIGltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uLW51bXB5L2ZpbGVzL3g4Ni9udW1weWNvbmZpZy5oCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi1udW1weS9weXRob24tbnVtcHlfMS4xMS4xLmJiIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24tbnVtcHkvcHl0aG9uLW51bXB5XzEuMTEuMS5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNWFmNzIwCi0tLSAvZGV2L251bGwKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24tbnVtcHkvcHl0aG9uLW51bXB5XzEuMTEuMS5iYgpAQCAtMCwwICsxLDEwNCBAQAorU1VNTUFSWSA9ICJBIHNvcGhpc3RpY2F0ZWQgTnVtZXJpYyBQcm9jZXNzaW5nIFBhY2thZ2UgZm9yIFB5dGhvbiIKK1NFQ1RJT04gPSAiZGV2ZWwvcHl0aG9uIgorTElDRU5TRSA9ICJQU0YiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9MSUNFTlNFLnR4dDttZDU9N2U1MWE1Njc3YjIyYjg2NWFiYmZiM2RmZjZmZmIyZDAiCisKK1NSQ05BTUUgPSAibnVtcHkiCisKK1NSQ19VUkkgPSAiaHR0cHM6Ly9maWxlcy5weXRob25ob3N0ZWQub3JnL3BhY2thZ2VzL3NvdXJjZS9uLyR7U1JDTkFNRX0vJHtTUkNOQU1FfS0ke1BWfS50YXIuZ3ogXAorICAgICAgICAgICBmaWxlOi8vMDAwMS1Eb24tdC1zZWFyY2gtdXNyLWFuZC1zby1vbi1mb3ItbGlicmFyaWVzLWJ5LWRlZmF1bHQtLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL3JlbW92ZS1idWlsZC1wYXRoLWluLWNvbW1lbnRzLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL2ZpeF9zaGViYW5nX2YycHkucGF0Y2ggXAorICAgICAgICAgICAke0NPTkZJR0ZJTEVTVVJJfSAiCitVUFNUUkVBTV9DSEVDS19VUkkgPSAiaHR0cHM6Ly9zb3VyY2Vmb3JnZS5uZXQvcHJvamVjdHMvbnVtcHkvZmlsZXMvIgorCitDT05GSUdGSUxFU1VSSSA/PSAiIgorCitDT05GSUdGSUxFU1VSSV9hYXJjaDY0ID0gIiBcCisgICAgZmlsZTovL2NvbmZpZy5oIFwKKyAgICBmaWxlOi8vX251bXB5Y29uZmlnLmggXAorIgorQ09ORklHRklMRVNVUklfYXJtID0gIiBcCisgICAgZmlsZTovL2NvbmZpZy5oIFwKKyAgICBmaWxlOi8vbnVtcHljb25maWcuaCBcCisiCitDT05GSUdGSUxFU1VSSV9hcm1lYiA9ICIgXAorICAgIGZpbGU6Ly9jb25maWcuaCBcCisgICAgZmlsZTovL251bXB5Y29uZmlnLmggXAorIgorQ09ORklHRklMRVNVUklfbWlwc2VsID0gIiBcCisgICAgZmlsZTovL2NvbmZpZy5oIFwKKyAgICBmaWxlOi8vbnVtcHljb25maWcuaCBcCisiCitDT05GSUdGSUxFU1VSSV94ODYgPSAiIFwKKyAgICBmaWxlOi8vY29uZmlnLmggXAorICAgIGZpbGU6Ly9udW1weWNvbmZpZy5oIFwKKyIKK0NPTkZJR0ZJTEVTVVJJX3g4Ni02NCA9ICIgXAorICAgIGZpbGU6Ly9jb25maWcuaCBcCisgICAgZmlsZTovL19udW1weWNvbmZpZy5oIFwKKyIKK0NPTkZJR0ZJTEVTVVJJX21pcHMgPSAiIFwKKyAgICBmaWxlOi8vY29uZmlnLmggXAorICAgIGZpbGU6Ly9fbnVtcHljb25maWcuaCBcCisiCitDT05GSUdGSUxFU1VSSV9wb3dlcnBjID0gIiBcCisgICAgZmlsZTovL2NvbmZpZy5oIFwKKyAgICBmaWxlOi8vX251bXB5Y29uZmlnLmggXAorIgorQ09ORklHRklMRVNVUklfcG93ZXJwYzY0ID0gIiBcCisgICAgZmlsZTovL2NvbmZpZy5oIFwKKyAgICBmaWxlOi8vX251bXB5Y29uZmlnLmggXAorIgorQ09ORklHRklMRVNVUklfbWlwczY0ID0gIiBcCisgICAgZmlsZTovL2NvbmZpZy5oIFwKKyAgICBmaWxlOi8vX251bXB5Y29uZmlnLmggXAorIgorQ09ORklHRklMRVNVUklfbWlwczY0bjMyID0gIiBcCisgICAgZmlsZTovL2NvbmZpZy5oIFwKKyAgICBmaWxlOi8vX251bXB5Y29uZmlnLmggXAorIgorCitTID0gIiR7V09SS0RJUn0vbnVtcHktJHtQVn0iCisKK2luaGVyaXQgc2V0dXB0b29scworCisjIE1ha2UgdGhlIGJ1aWxkIGZhaWwgYW5kIHJlcGxhY2UgKmNvbmZpZy5oIHdpdGggcHJvcGVyIG9uZQorIyBUaGlzIGlzIGEgdWdseSwgdWdseSBoYWNrIC0gS29lbgorZG9fY29tcGlsZV9wcmVwZW5kX2NsYXNzLXRhcmdldCgpIHsKKyAgICAke1NUQUdJTkdfQklORElSX05BVElWRX0vcHl0aG9uLW5hdGl2ZS9weXRob24gc2V0dXAucHkgYnVpbGQgJHtESVNUVVRJTFNfQlVJTERfQVJHU30gfHwgXAorICAgIHRydWUKKyAgICBjcCAke1dPUktESVJ9Lypjb25maWcuaCAke1N9L2J1aWxkLyQobHMgJHtTfS9idWlsZCB8IGdyZXAgc3JjKS9udW1weS9jb3JlL2luY2x1ZGUvbnVtcHkvCit9CisKK0ZJTEVTXyR7UE59LXN0YXRpY2RldiArPSAiJHtQWVRIT05fU0lURVBBQ0tBR0VTX0RJUn0vbnVtcHkvY29yZS9saWIvKi5hIgorCitTUkNfVVJJW21kNXN1bV0gPSAiMmY0NGE4OTVhODEwNGZmYWMxNDBjM2E3MGVkYmQ0NTAiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiZGM0MDgyYzQzOTc5Y2M4NTZhMmJmMzUyYTgyOTdlYTEwOWNjYjMyNDRkNzgzYWUwNjdlYjJlZTViMGQ1NzdjZCIKKworIyBpbnN0YWxsIHdoYXQgaXMgbmVlZGVkIGZvciBudW1weS50ZXN0KCkKK1JERVBFTkRTXyR7UE59ID0gInB5dGhvbi11bml0dGVzdCBcCisgICAgICAgICAgICAgICAgICBweXRob24tZGlmZmxpYiBcCisgICAgICAgICAgICAgICAgICBweXRob24tcHByaW50IFwKKyAgICAgICAgICAgICAgICAgIHB5dGhvbi1waWNrbGUgXAorICAgICAgICAgICAgICAgICAgcHl0aG9uLXNoZWxsIFwKKyAgICAgICAgICAgICAgICAgIHB5dGhvbi1ub3NlIFwKKyAgICAgICAgICAgICAgICAgIHB5dGhvbi1kb2N0ZXN0IFwKKyAgICAgICAgICAgICAgICAgIHB5dGhvbi1kYXRldGltZSBcCisgICAgICAgICAgICAgICAgICBweXRob24tZGlzdHV0aWxzIFwKKyAgICAgICAgICAgICAgICAgIHB5dGhvbi1taXNjIFwKKyAgICAgICAgICAgICAgICAgIHB5dGhvbi1tbWFwIFwKKyAgICAgICAgICAgICAgICAgIHB5dGhvbi1uZXRjbGllbnQgXAorICAgICAgICAgICAgICAgICAgcHl0aG9uLW51bWJlcnMgXAorICAgICAgICAgICAgICAgICAgcHl0aG9uLXB5ZG9jIFwKKyAgICAgICAgICAgICAgICAgIHB5dGhvbi1wa2d1dGlsIFwKKyAgICAgICAgICAgICAgICAgIHB5dGhvbi1lbWFpbCBcCisgICAgICAgICAgICAgICAgICBweXRob24tc3VicHJvY2VzcyBcCisgICAgICAgICAgICAgICAgICBweXRob24tY29tcHJlc3Npb24gXAorICAgICAgICAgICAgICAgICAgcHl0aG9uLWN0eXBlcyBcCisgICAgICAgICAgICAgICAgICBweXRob24tdGhyZWFkaW5nIFwKKyIKKworUkRFUEVORFNfJHtQTn1fY2xhc3MtbmF0aXZlID0gIiIKKworQkJDTEFTU0VYVEVORCA9ICJuYXRpdmUgbmF0aXZlc2RrIgpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24tbnVtcHkvcHl0aG9uMy1udW1weV8xLjExLjAuYmIgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi1udW1weS9weXRob24zLW51bXB5XzEuMTEuMC5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zY2NhMjIzCi0tLSAvZGV2L251bGwKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24tbnVtcHkvcHl0aG9uMy1udW1weV8xLjExLjAuYmIKQEAgLTAsMCArMSwxMDUgQEAKK1NVTU1BUlkgPSAiQSBzb3BoaXN0aWNhdGVkIE51bWVyaWMgUHJvY2Vzc2luZyBQYWNrYWdlIGZvciBQeXRob24iCitTRUNUSU9OID0gImRldmVsL3B5dGhvbiIKK0xJQ0VOU0UgPSAiUFNGIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vTElDRU5TRS50eHQ7bWQ1PTdlNTFhNTY3N2IyMmI4NjVhYmJmYjNkZmY2ZmZiMmQwIgorCitTUkNOQU1FID0gIm51bXB5IgorCitTUkNfVVJJID0gImh0dHBzOi8vZmlsZXMucHl0aG9uaG9zdGVkLm9yZy9wYWNrYWdlcy9zb3VyY2Uvbi8ke1NSQ05BTUV9LyR7U1JDTkFNRX0tJHtQVn0udGFyLmd6IFwKKyAgICAgICAgICAgZmlsZTovLzAwMDEtRG9uLXQtc2VhcmNoLXVzci1hbmQtc28tb24tZm9yLWxpYnJhcmllcy1ieS1kZWZhdWx0LS5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9yZW1vdmUtYnVpbGQtcGF0aC1pbi1jb21tZW50cy5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9maXhfc2hlYmFuZ19mMnB5LnBhdGNoIFwKKyAgICAgICAgICAgJHtDT05GSUdGSUxFU1VSSX0gIgorVVBTVFJFQU1fQ0hFQ0tfVVJJID0gImh0dHBzOi8vc291cmNlZm9yZ2UubmV0L3Byb2plY3RzL251bXB5L2ZpbGVzLyIKKworQ09ORklHRklMRVNVUkkgPz0gIiIKKworQ09ORklHRklMRVNVUklfYWFyY2g2NCA9ICIgXAorICAgIGZpbGU6Ly9jb25maWcuaCBcCisgICAgZmlsZTovL19udW1weWNvbmZpZy5oIFwKKyIKK0NPTkZJR0ZJTEVTVVJJX2FybSA9ICIgXAorICAgIGZpbGU6Ly9jb25maWcuaCBcCisgICAgZmlsZTovL251bXB5Y29uZmlnLmggXAorIgorQ09ORklHRklMRVNVUklfYXJtZWIgPSAiIFwKKyAgICBmaWxlOi8vY29uZmlnLmggXAorICAgIGZpbGU6Ly9udW1weWNvbmZpZy5oIFwKKyIKK0NPTkZJR0ZJTEVTVVJJX21pcHNlbCA9ICIgXAorICAgIGZpbGU6Ly9jb25maWcuaCBcCisgICAgZmlsZTovL251bXB5Y29uZmlnLmggXAorIgorQ09ORklHRklMRVNVUklfeDg2ID0gIiBcCisgICAgZmlsZTovL2NvbmZpZy5oIFwKKyAgICBmaWxlOi8vbnVtcHljb25maWcuaCBcCisiCitDT05GSUdGSUxFU1VSSV94ODYtNjQgPSAiIFwKKyAgICBmaWxlOi8vY29uZmlnLmggXAorICAgIGZpbGU6Ly9fbnVtcHljb25maWcuaCBcCisiCitDT05GSUdGSUxFU1VSSV9taXBzID0gIiBcCisgICAgZmlsZTovL2NvbmZpZy5oIFwKKyAgICBmaWxlOi8vX251bXB5Y29uZmlnLmggXAorIgorQ09ORklHRklMRVNVUklfcG93ZXJwYyA9ICIgXAorICAgIGZpbGU6Ly9jb25maWcuaCBcCisgICAgZmlsZTovL19udW1weWNvbmZpZy5oIFwKKyIKK0NPTkZJR0ZJTEVTVVJJX3Bvd2VycGM2NCA9ICIgXAorICAgIGZpbGU6Ly9jb25maWcuaCBcCisgICAgZmlsZTovL19udW1weWNvbmZpZy5oIFwKKyIKK0NPTkZJR0ZJTEVTVVJJX21pcHM2NCA9ICIgXAorICAgIGZpbGU6Ly9jb25maWcuaCBcCisgICAgZmlsZTovL19udW1weWNvbmZpZy5oIFwKKyIKK0NPTkZJR0ZJTEVTVVJJX21pcHM2NG4zMiA9ICIgXAorICAgIGZpbGU6Ly9jb25maWcuaCBcCisgICAgZmlsZTovL19udW1weWNvbmZpZy5oIFwKKyIKKworUyA9ICIke1dPUktESVJ9L251bXB5LSR7UFZ9IgorCitpbmhlcml0IHNldHVwdG9vbHMzCisKKyMgTWFrZSB0aGUgYnVpbGQgZmFpbCBhbmQgcmVwbGFjZSAqY29uZmlnLmggd2l0aCBwcm9wZXIgb25lCisjIFRoaXMgaXMgYSB1Z2x5LCB1Z2x5IGhhY2sgLSBLb2VuCitkb19jb21waWxlX3ByZXBlbmRfY2xhc3MtdGFyZ2V0KCkgeworICAgICR7U1RBR0lOR19CSU5ESVJfTkFUSVZFfS9weXRob24zLW5hdGl2ZS9weXRob24zIHNldHVwLnB5IGJ1aWxkICR7RElTVFVUSUxTX0JVSUxEX0FSR1N9IHx8IFwKKyAgICB0cnVlCisgICAgY3AgJHtXT1JLRElSfS8qY29uZmlnLmggJHtTfS9idWlsZC8kKGxzICR7U30vYnVpbGQgfCBncmVwIHNyYykvbnVtcHkvY29yZS9pbmNsdWRlL251bXB5LworfQorCitGSUxFU18ke1BOfS1zdGF0aWNkZXYgKz0gIiR7UFlUSE9OX1NJVEVQQUNLQUdFU19ESVJ9L251bXB5L2NvcmUvbGliLyouYSIKKworU1JDX1VSSVttZDVzdW1dID0gImJjNTZmYjlmYzI4OTVhYTQ5NjE4MDJmZmJkYjMxZDBiIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gImExZDEyNjhkMjAwODE2YmZiOTcyN2E3YTI3Yjc4ZDhlMzdlY2VjMmU0ZDVlYmQzM2ViNjRlMjc4OWUwZGI0M2UiCisKKyMgaW5zdGFsbCB3aGF0IGlzIG5lZWRlZCBmb3IgbnVtcHkudGVzdCgpCitSREVQRU5EU18ke1BOfSA9ICJweXRob24zLXVuaXR0ZXN0IFwKKyAgICAgICAgICAgICAgICAgIHB5dGhvbjMtZGlmZmxpYiBcCisgICAgICAgICAgICAgICAgICBweXRob24zLXBwcmludCBcCisgICAgICAgICAgICAgICAgICBweXRob24zLXBpY2tsZSBcCisgICAgICAgICAgICAgICAgICBweXRob24zLXNoZWxsIFwKKyAgICAgICAgICAgICAgICAgIHB5dGhvbjMtbm9zZSBcCisgICAgICAgICAgICAgICAgICBweXRob24zLWRvY3Rlc3QgXAorICAgICAgICAgICAgICAgICAgcHl0aG9uMy1kYXRldGltZSBcCisgICAgICAgICAgICAgICAgICBweXRob24zLWRpc3R1dGlscyBcCisgICAgICAgICAgICAgICAgICBweXRob24zLW1pc2MgXAorICAgICAgICAgICAgICAgICAgcHl0aG9uMy1tbWFwIFwKKyAgICAgICAgICAgICAgICAgIHB5dGhvbjMtbmV0Y2xpZW50IFwKKyAgICAgICAgICAgICAgICAgIHB5dGhvbjMtbnVtYmVycyBcCisgICAgICAgICAgICAgICAgICBweXRob24zLXB5ZG9jIFwKKyAgICAgICAgICAgICAgICAgIHB5dGhvbjMtcGtndXRpbCBcCisgICAgICAgICAgICAgICAgICBweXRob24zLWVtYWlsIFwKKyAgICAgICAgICAgICAgICAgIHB5dGhvbjMtc3VicHJvY2VzcyBcCisgICAgICAgICAgICAgICAgICBweXRob24zLWNvbXByZXNzaW9uIFwKKyAgICAgICAgICAgICAgICAgIHB5dGhvbjMtY3R5cGVzIFwKKyAgICAgICAgICAgICAgICAgIHB5dGhvbjMtdGhyZWFkaW5nIFwKKyAgICAgICAgICAgICAgICAgIHB5dGhvbjMtdGV4dHV0aWxzIFwKKyIKKworUkRFUEVORFNfJHtQTn1fY2xhc3MtbmF0aXZlID0gIiIKKworQkJDTEFTU0VYVEVORCA9ICJuYXRpdmUgbmF0aXZlc2RrIgpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLTMuNS1tYW5pZmVzdC5pbmMgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24tMy41LW1hbmlmZXN0LmluYwppbmRleCAzMzVjM2ZmLi4zMDQ2MTE0IDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24tMy41LW1hbmlmZXN0LmluYworKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24tMy41LW1hbmlmZXN0LmluYwpAQCAtNSwxNCArNSwxOCBAQAogCiAgCiAKLVBST1ZJREVTKz0iJHtQTn0tMnRvMyAke1BOfS1hc3luY2lvICR7UE59LWF1ZGlvICR7UE59LWNvZGVjcyAke1BOfS1jb21waWxlICR7UE59LWNvbXByZXNzaW9uICR7UE59LWNvcmUgJHtQTn0tY3J5cHQgJHtQTn0tY3R5cGVzICR7UE59LWN1cnNlcyAke1BOfS1kYXRldGltZSAke1BOfS1kYiAke1BOfS1kZWJ1Z2dlciAke1BOfS1kZXYgJHtQTn0tZGlmZmxpYiAke1BOfS1kaXN0dXRpbHMgJHtQTn0tZGlzdHV0aWxzLXN0YXRpY2RldiAke1BOfS1kb2N0ZXN0ICR7UE59LWVtYWlsICR7UE59LWZjbnRsICR7UE59LWdkYm0gJHtQTn0taHRtbCAke1BOfS1pZGxlICR7UE59LWltYWdlICR7UE59LWltcG9ydGxpYiAke1BOfS1pbyAke1BOfS1qc29uICR7UE59LWxhbmcgJHtQTn0tbG9nZ2luZyAke1BOfS1tYWlsYm94ICR7UE59LW1hdGggJHtQTn0tbWltZSAke1BOfS1tbWFwICR7UE59LW11bHRpcHJvY2Vzc2luZyAke1BOfS1uZXRjbGllbnQgJHtQTn0tbmV0c2VydmVyICR7UE59LW51bWJlcnMgJHtQTn0tcGlja2xlICR7UE59LXBrZ3V0aWwgJHtQTn0tcHByaW50ICR7UE59LXByb2ZpbGUgJHtQTn0tcHlkb2MgJHtQTn0tcmUgJHtQTn0tcmVhZGxpbmUgJHtQTn0tcmVwcmxpYiAke1BOfS1yZXNvdXJjZSAke1BOfS1zaGVsbCAke1BOfS1zbXRwZCAke1BOfS1zcWxpdGUzICR7UE59LXNxbGl0ZTMtdGVzdHMgJHtQTn0tc3RyaW5nb2xkICR7UE59LXN1YnByb2Nlc3MgJHtQTn0tc3lzbG9nICR7UE59LXRlcm1pbmFsICR7UE59LXRlc3RzICR7UE59LXRleHR1dGlscyAke1BOfS10aHJlYWRpbmcgJHtQTn0tdGtpbnRlciAke1BOfS11bml0dGVzdCAke1BOfS11bml4YWRtaW4gJHtQTn0teG1sICR7UE59LXhtbHJwYyAiCitQUk9WSURFUys9IiR7UE59LTJ0bzMgJHtQTn0tYXJncGFyc2UgJHtQTn0tYXN5bmNpbyAke1BOfS1hdWRpbyAke1BOfS1jb2RlY3MgJHtQTn0tY29tcGlsZSAke1BOfS1jb21wcmVzc2lvbiAke1BOfS1jb3JlICR7UE59LWNyeXB0ICR7UE59LWN0eXBlcyAke1BOfS1jdXJzZXMgJHtQTn0tZGF0ZXRpbWUgJHtQTn0tZGIgJHtQTn0tZGVidWdnZXIgJHtQTn0tZGV2ICR7UE59LWRpZmZsaWIgJHtQTn0tZGlzdHV0aWxzICR7UE59LWRpc3R1dGlscy1zdGF0aWNkZXYgJHtQTn0tZG9jdGVzdCAke1BOfS1lbWFpbCAke1BOfS1lbnVtICR7UE59LWZjbnRsICR7UE59LWdkYm0gJHtQTn0taHRtbCAke1BOfS1pZGxlICR7UE59LWltYWdlICR7UE59LWltcG9ydGxpYiAke1BOfS1pbyAke1BOfS1qc29uICR7UE59LWxhbmcgJHtQTn0tbG9nZ2luZyAke1BOfS1tYWlsYm94ICR7UE59LW1hdGggJHtQTn0tbWltZSAke1BOfS1tbWFwICR7UE59LW11bHRpcHJvY2Vzc2luZyAke1BOfS1uZXRjbGllbnQgJHtQTn0tbmV0c2VydmVyICR7UE59LW51bWJlcnMgJHtQTn0tcGlja2xlICR7UE59LXBrZ3V0aWwgJHtQTn0tcHByaW50ICR7UE59LXByb2ZpbGUgJHtQTn0tcHlkb2MgJHtQTn0tcmUgJHtQTn0tcmVhZGxpbmUgJHtQTn0tcmVwcmxpYiAke1BOfS1yZXNvdXJjZSAke1BOfS1zZWxlY3RvcnMgJHtQTn0tc2hlbGwgJHtQTn0tc2lnbmFsICR7UE59LXNtdHBkICR7UE59LXNxbGl0ZTMgJHtQTn0tc3FsaXRlMy10ZXN0cyAke1BOfS1zdHJpbmdvbGQgJHtQTn0tc3VicHJvY2VzcyAke1BOfS1zeXNsb2cgJHtQTn0tdGVybWluYWwgJHtQTn0tdGVzdHMgJHtQTn0tdGV4dHV0aWxzICR7UE59LXRocmVhZGluZyAke1BOfS10a2ludGVyICR7UE59LXVuaXR0ZXN0ICR7UE59LXVuaXhhZG1pbiAke1BOfS14bWwgJHtQTn0teG1scnBjICIKIAotUEFDS0FHRVM9IiR7UE59LWRiZyAke1BOfS0ydG8zICR7UE59LWFzeW5jaW8gJHtQTn0tYXVkaW8gJHtQTn0tY29kZWNzICR7UE59LWNvbXBpbGUgJHtQTn0tY29tcHJlc3Npb24gJHtQTn0tY29yZSAke1BOfS1jcnlwdCAke1BOfS1jdHlwZXMgJHtQTn0tY3Vyc2VzICR7UE59LWRhdGV0aW1lICR7UE59LWRiICR7UE59LWRlYnVnZ2VyICR7UE59LWRldiAke1BOfS1kaWZmbGliICR7UE59LWRpc3R1dGlscy1zdGF0aWNkZXYgJHtQTn0tZGlzdHV0aWxzICR7UE59LWRvY3Rlc3QgJHtQTn0tZW1haWwgJHtQTn0tZmNudGwgJHtQTn0tZ2RibSAke1BOfS1odG1sICR7UE59LWlkbGUgJHtQTn0taW1hZ2UgJHtQTn0taW1wb3J0bGliICR7UE59LWlvICR7UE59LWpzb24gJHtQTn0tbGFuZyAke1BOfS1sb2dnaW5nICR7UE59LW1haWxib3ggJHtQTn0tbWF0aCAke1BOfS1taW1lICR7UE59LW1tYXAgJHtQTn0tbXVsdGlwcm9jZXNzaW5nICR7UE59LW5ldGNsaWVudCAke1BOfS1uZXRzZXJ2ZXIgJHtQTn0tbnVtYmVycyAke1BOfS1waWNrbGUgJHtQTn0tcGtndXRpbCAke1BOfS1wcHJpbnQgJHtQTn0tcHJvZmlsZSAke1BOfS1weWRvYyAke1BOfS1yZSAke1BOfS1yZWFkbGluZSAke1BOfS1yZXBybGliICR7UE59LXJlc291cmNlICR7UE59LXNoZWxsICR7UE59LXNtdHBkICR7UE59LXNxbGl0ZTMgJHtQTn0tc3FsaXRlMy10ZXN0cyAke1BOfS1zdHJpbmdvbGQgJHtQTn0tc3VicHJvY2VzcyAke1BOfS1zeXNsb2cgJHtQTn0tdGVybWluYWwgJHtQTn0tdGVzdHMgJHtQTn0tdGV4dHV0aWxzICR7UE59LXRocmVhZGluZyAke1BOfS10a2ludGVyICR7UE59LXVuaXR0ZXN0ICR7UE59LXVuaXhhZG1pbiAke1BOfS14bWwgJHtQTn0teG1scnBjICR7UE59LW1vZHVsZXMiCitQQUNLQUdFUz0iJHtQTn0tZGJnICR7UE59LTJ0bzMgJHtQTn0tYXJncGFyc2UgJHtQTn0tYXN5bmNpbyAke1BOfS1hdWRpbyAke1BOfS1jb2RlY3MgJHtQTn0tY29tcGlsZSAke1BOfS1jb21wcmVzc2lvbiAke1BOfS1jb3JlICR7UE59LWNyeXB0ICR7UE59LWN0eXBlcyAke1BOfS1jdXJzZXMgJHtQTn0tZGF0ZXRpbWUgJHtQTn0tZGIgJHtQTn0tZGVidWdnZXIgJHtQTn0tZGV2ICR7UE59LWRpZmZsaWIgJHtQTn0tZGlzdHV0aWxzLXN0YXRpY2RldiAke1BOfS1kaXN0dXRpbHMgJHtQTn0tZG9jdGVzdCAke1BOfS1lbWFpbCAke1BOfS1lbnVtICR7UE59LWZjbnRsICR7UE59LWdkYm0gJHtQTn0taHRtbCAke1BOfS1pZGxlICR7UE59LWltYWdlICR7UE59LWltcG9ydGxpYiAke1BOfS1pbyAke1BOfS1qc29uICR7UE59LWxhbmcgJHtQTn0tbG9nZ2luZyAke1BOfS1tYWlsYm94ICR7UE59LW1hdGggJHtQTn0tbWltZSAke1BOfS1tbWFwICR7UE59LW11bHRpcHJvY2Vzc2luZyAke1BOfS1uZXRjbGllbnQgJHtQTn0tbmV0c2VydmVyICR7UE59LW51bWJlcnMgJHtQTn0tcGlja2xlICR7UE59LXBrZ3V0aWwgJHtQTn0tcHByaW50ICR7UE59LXByb2ZpbGUgJHtQTn0tcHlkb2MgJHtQTn0tcmUgJHtQTn0tcmVhZGxpbmUgJHtQTn0tcmVwcmxpYiAke1BOfS1yZXNvdXJjZSAke1BOfS1zZWxlY3RvcnMgJHtQTn0tc2hlbGwgJHtQTn0tc2lnbmFsICR7UE59LXNtdHBkICR7UE59LXNxbGl0ZTMgJHtQTn0tc3FsaXRlMy10ZXN0cyAke1BOfS1zdHJpbmdvbGQgJHtQTn0tc3VicHJvY2VzcyAke1BOfS1zeXNsb2cgJHtQTn0tdGVybWluYWwgJHtQTn0tdGVzdHMgJHtQTn0tdGV4dHV0aWxzICR7UE59LXRocmVhZGluZyAke1BOfS10a2ludGVyICR7UE59LXVuaXR0ZXN0ICR7UE59LXVuaXhhZG1pbiAke1BOfS14bWwgJHtQTn0teG1scnBjICR7UE59LW1vZHVsZXMiCiAKIFNVTU1BUllfJHtQTn0tMnRvMz0iUHl0aG9uIGF1dG9tYXRlZCBQeXRob24gMiB0byAzIGNvZGUgdHJhbnNsYXRvciIKIFJERVBFTkRTXyR7UE59LTJ0bzM9IiR7UE59LWNvcmUiCiBGSUxFU18ke1BOfS0ydG8zPSIke2xpYmRpcn0vcHl0aG9uMy41L2xpYjJ0bzMgIgogCitTVU1NQVJZXyR7UE59LWFyZ3BhcnNlPSJQeXRob24gY29tbWFuZCBsaW5lIGFyZ3VtZW50IHBhcnNlciIKK1JERVBFTkRTXyR7UE59LWFyZ3BhcnNlPSIke1BOfS1jb3JlICR7UE59LWNvZGVjcyAke1BOfS10ZXh0dXRpbHMiCitGSUxFU18ke1BOfS1hcmdwYXJzZT0iJHtsaWJkaXJ9L3B5dGhvbjMuNS9hcmdwYXJzZS4qICIKKwogU1VNTUFSWV8ke1BOfS1hc3luY2lvPSJQeXRob24gQXN5bmNocm9ub3VzIEkvTywgZXZlbnQgbG9vcCwgY29yb3V0aW5lcyBhbmQgdGFza3MiCiBSREVQRU5EU18ke1BOfS1hc3luY2lvPSIke1BOfS1jb3JlIgogRklMRVNfJHtQTn0tYXN5bmNpbz0iJHtsaWJkaXJ9L3B5dGhvbjMuNS9hc3luY2lvICIKQEAgLTMwLDE5ICszNCwxOSBAQAogRklMRVNfJHtQTn0tY29tcGlsZT0iJHtsaWJkaXJ9L3B5dGhvbjMuNS9weV9jb21waWxlLiogJHtsaWJkaXJ9L3B5dGhvbjMuNS9jb21waWxlYWxsLiogIgogCiBTVU1NQVJZXyR7UE59LWNvbXByZXNzaW9uPSJQeXRob24gaGlnaC1sZXZlbCBjb21wcmVzc2lvbiBzdXBwb3J0IgotUkRFUEVORFNfJHtQTn0tY29tcHJlc3Npb249IiR7UE59LWNvcmUgJHtQTn0tY29kZWNzIgotRklMRVNfJHtQTn0tY29tcHJlc3Npb249IiR7bGliZGlyfS9weXRob24zLjUvZ3ppcC4qICR7bGliZGlyfS9weXRob24zLjUvemlwZmlsZS4qICR7bGliZGlyfS9weXRob24zLjUvdGFyZmlsZS4qICR7bGliZGlyfS9weXRob24zLjUvbGliLWR5bmxvYWQvYnoyLiouc28gIgorUkRFUEVORFNfJHtQTn0tY29tcHJlc3Npb249IiR7UE59LWNvcmUgJHtQTn0tY29kZWNzICR7UE59LWltcG9ydGxpYiAke1BOfS10aHJlYWRpbmcgJHtQTn0tc2hlbGwiCitGSUxFU18ke1BOfS1jb21wcmVzc2lvbj0iJHtsaWJkaXJ9L3B5dGhvbjMuNS9nemlwLiogJHtsaWJkaXJ9L3B5dGhvbjMuNS96aXBmaWxlLiogJHtsaWJkaXJ9L3B5dGhvbjMuNS90YXJmaWxlLiogJHtsaWJkaXJ9L3B5dGhvbjMuNS9saWItZHlubG9hZC9iejIuKi5zbyAke2xpYmRpcn0vcHl0aG9uMy41L2xpYi1keW5sb2FkL3psaWIuKi5zbyAiCiAKIFNVTU1BUllfJHtQTn0tY29yZT0iUHl0aG9uIGludGVycHJldGVyIGFuZCBjb3JlIG1vZHVsZXMiCiBSREVQRU5EU18ke1BOfS1jb3JlPSIke1BOfS1sYW5nICR7UE59LXJlICR7UE59LXJlcHJsaWIgJHtQTn0tY29kZWNzICR7UE59LWlvICR7UE59LW1hdGgiCi1GSUxFU18ke1BOfS1jb3JlPSIke2xpYmRpcn0vcHl0aG9uMy41L19fZnV0dXJlX18uKiAke2xpYmRpcn0vcHl0aG9uMy41L19hYmNvbGwuKiAke2xpYmRpcn0vcHl0aG9uMy41L2FiYy4qICR7bGliZGlyfS9weXRob24zLjUvYXN0LiogJHtsaWJkaXJ9L3B5dGhvbjMuNS9jb3B5LiogJHtsaWJkaXJ9L3B5dGhvbjMuNS9jb3B5cmVnLiogJHtsaWJkaXJ9L3B5dGhvbjMuNS9Db25maWdQYXJzZXIuKiAke2xpYmRpcn0vcHl0aG9uMy41L2dlbmVyaWNwYXRoLiogJHtsaWJkaXJ9L3B5dGhvbjMuNS9nZXRvcHQuKiAke2xpYmRpcn0vcHl0aG9uMy41L2xpbmVjYWNoZS4qICR7bGliZGlyfS9weXRob24zLjUvbmV3LiogJHtsaWJkaXJ9L3B5dGhvbjMuNS9vcy4qICR7bGliZGlyfS9weXRob24zLjUvcG9zaXhwYXRoLiogJHtsaWJkaXJ9L3B5dGhvbjMuNS9zdHJ1Y3QuKiAke2xpYmRpcn0vcHl0aG9uMy41L3dhcm5pbmdzLiogJHtsaWJkaXJ9L3B5dGhvbjMuNS9zaXRlLiogJHtsaWJkaXJ9L3B5dGhvbjMuNS9zdGF0LiogJHtsaWJkaXJ9L3B5dGhvbjMuNS9Vc2VyRGljdC4qICR7bGliZGlyfS9weXRob24zLjUvVXNlckxpc3QuKiAke2xpYmRpcn0vcHl0aG9uMy41L1VzZXJTdHJpbmcuKiAke2xpYmRpcn0vcHl0aG9uMy41L2xpYi1keW5sb2FkL2JpbmFzY2lpLiouc28gJHtsaWJkaXJ9L3B5dGhvbjMuNS9saWItZHlubG9hZC9fc3RydWN0Liouc28gJHtsaWJkaXJ9L3B5dGhvbjMuNS9saWItZHlubG9hZC90aW1lLiouc28gJHtsaWJkaXJ9L3B5dGhvbjMuNS9saWItZHlubG9hZC94cmVhZGxpbmVzLiouc28gJHtsaWJkaXJ9L3B5dGhvbjMuNS90eXBlcy4qICR7bGliZGlyfS9weXRob24zLjUvcGxhdGZvcm0uKiAke2JpbmRpcn0vcHl0aG9uKiAke2xpYmRpcn0vcHl0aG9uMy41L193ZWFrcmVmc2V0LiogJHtsaWJkaXJ9L3B5dGhvbjMuNS9zeXNjb25maWcuKiAke2xpYmRpcn0vcHl0aG9uMy41L19zeXNjb25maWdkYXRhLiogJHtsaWJkaXJ9L3B5dGhvbjMuNS9jb25maWcvTWFrZWZpbGUgJHtpbmNsdWRlZGlyfS9weXRob24ke1BZVEhPTl9CSU5BQkl9L3B5Y29uZmlnKi5oICR7bGliZGlyfS9weXRob24ke1BZVEhPTl9NQUpNSU59L2NvbGxlY3Rpb25zICR7bGliZGlyfS9weXRob24ke1BZVEhPTl9NQUpNSU59L19jb2xsZWN0aW9uc19hYmMuKiAke2xpYmRpcn0vcHl0aG9uJHtQWVRIT05fTUFKTUlOfS9fc2l0ZWJ1aWx0aW5zLiogJHtsaWJkaXJ9L3B5dGhvbiR7UFlUSE9OX01BSk1JTn0vc2l0ZWN1c3RvbWl6ZS5weSAiCitGSUxFU18ke1BOfS1jb3JlPSIke2xpYmRpcn0vcHl0aG9uMy41L19fZnV0dXJlX18uKiAke2xpYmRpcn0vcHl0aG9uMy41L19hYmNvbGwuKiAke2xpYmRpcn0vcHl0aG9uMy41L2FiYy4qICR7bGliZGlyfS9weXRob24zLjUvYXN0LiogJHtsaWJkaXJ9L3B5dGhvbjMuNS9jb3B5LiogJHtsaWJkaXJ9L3B5dGhvbjMuNS9jb3B5cmVnLiogJHtsaWJkaXJ9L3B5dGhvbjMuNS9jb25maWdwYXJzZXIuKiAke2xpYmRpcn0vcHl0aG9uMy41L2dlbmVyaWNwYXRoLiogJHtsaWJkaXJ9L3B5dGhvbjMuNS9nZXRvcHQuKiAke2xpYmRpcn0vcHl0aG9uMy41L2xpbmVjYWNoZS4qICR7bGliZGlyfS9weXRob24zLjUvbmV3LiogJHtsaWJkaXJ9L3B5dGhvbjMuNS9vcy4qICR7bGliZGlyfS9weXRob24zLjUvcG9zaXhwYXRoLiogJHtsaWJkaXJ9L3B5dGhvbjMuNS9zdHJ1Y3QuKiAke2xpYmRpcn0vcHl0aG9uMy41L3dhcm5pbmdzLiogJHtsaWJkaXJ9L3B5dGhvbjMuNS9zaXRlLiogJHtsaWJkaXJ9L3B5dGhvbjMuNS9zdGF0LiogJHtsaWJkaXJ9L3B5dGhvbjMuNS9Vc2VyRGljdC4qICR7bGliZGlyfS9weXRob24zLjUvVXNlckxpc3QuKiAke2xpYmRpcn0vcHl0aG9uMy41L1VzZXJTdHJpbmcuKiAke2xpYmRpcn0vcHl0aG9uMy41L2xpYi1keW5sb2FkL2JpbmFzY2lpLiouc28gJHtsaWJkaXJ9L3B5dGhvbjMuNS9saWItZHlubG9hZC9fc3RydWN0Liouc28gJHtsaWJkaXJ9L3B5dGhvbjMuNS9saWItZHlubG9hZC90aW1lLiouc28gJHtsaWJkaXJ9L3B5dGhvbjMuNS9saWItZHlubG9hZC94cmVhZGxpbmVzLiouc28gJHtsaWJkaXJ9L3B5dGhvbjMuNS90eXBlcy4qICR7bGliZGlyfS9weXRob24zLjUvcGxhdGZvcm0uKiAke2JpbmRpcn0vcHl0aG9uKiAke2xpYmRpcn0vcHl0aG9uMy41L193ZWFrcmVmc2V0LiogJHtsaWJkaXJ9L3B5dGhvbjMuNS9zeXNjb25maWcuKiAke2xpYmRpcn0vcHl0aG9uMy41L19zeXNjb25maWdkYXRhLiogJHtsaWJkaXJ9L3B5dGhvbjMuNS9jb25maWcvTWFrZWZpbGUgJHtpbmNsdWRlZGlyfS9weXRob24ke1BZVEhPTl9CSU5BQkl9L3B5Y29uZmlnKi5oICR7bGliZGlyfS9weXRob24ke1BZVEhPTl9NQUpNSU59L2NvbGxlY3Rpb25zICR7bGliZGlyfS9weXRob24ke1BZVEhPTl9NQUpNSU59L19jb2xsZWN0aW9uc19hYmMuKiAke2xpYmRpcn0vcHl0aG9uJHtQWVRIT05fTUFKTUlOfS9fc2l0ZWJ1aWx0aW5zLiogJHtsaWJkaXJ9L3B5dGhvbiR7UFlUSE9OX01BSk1JTn0vc2l0ZWN1c3RvbWl6ZS5weSAiCiAKIFNVTU1BUllfJHtQTn0tY3J5cHQ9IlB5dGhvbiBiYXNpYyBjcnlwdG9ncmFwaGljIGFuZCBoYXNoaW5nIHN1cHBvcnQiCiBSREVQRU5EU18ke1BOfS1jcnlwdD0iJHtQTn0tY29yZSIKIEZJTEVTXyR7UE59LWNyeXB0PSIke2xpYmRpcn0vcHl0aG9uMy41L2hhc2hsaWIuKiAke2xpYmRpcn0vcHl0aG9uMy41L21kNS4qICR7bGliZGlyfS9weXRob24zLjUvc2hhLiogJHtsaWJkaXJ9L3B5dGhvbjMuNS9saWItZHlubG9hZC9jcnlwdC4qLnNvICR7bGliZGlyfS9weXRob24zLjUvbGliLWR5bmxvYWQvX2hhc2hsaWIuKi5zbyAke2xpYmRpcn0vcHl0aG9uMy41L2xpYi1keW5sb2FkL19zaGEyNTYuKi5zbyAke2xpYmRpcn0vcHl0aG9uMy41L2xpYi1keW5sb2FkL19zaGE1MTIuKi5zbyAiCiAKIFNVTU1BUllfJHtQTn0tY3R5cGVzPSJQeXRob24gQyB0eXBlcyBzdXBwb3J0IgotUkRFUEVORFNfJHtQTn0tY3R5cGVzPSIke1BOfS1jb3JlIgorUkRFUEVORFNfJHtQTn0tY3R5cGVzPSIke1BOfS1jb3JlICR7UE59LXN1YnByb2Nlc3MiCiBGSUxFU18ke1BOfS1jdHlwZXM9IiR7bGliZGlyfS9weXRob24zLjUvY3R5cGVzICR7bGliZGlyfS9weXRob24zLjUvbGliLWR5bmxvYWQvX2N0eXBlcy4qLnNvICR7bGliZGlyfS9weXRob24zLjUvbGliLWR5bmxvYWQvX2N0eXBlc190ZXN0Liouc28gIgogCiBTVU1NQVJZXyR7UE59LWN1cnNlcz0iUHl0aG9uIGN1cnNlcyBzdXBwb3J0IgpAQCAtNTEsNyArNTUsNyBAQAogCiBTVU1NQVJZXyR7UE59LWRhdGV0aW1lPSJQeXRob24gY2FsZW5kYXIgYW5kIHRpbWUgc3VwcG9ydCIKIFJERVBFTkRTXyR7UE59LWRhdGV0aW1lPSIke1BOfS1jb3JlICR7UE59LWNvZGVjcyIKLUZJTEVTXyR7UE59LWRhdGV0aW1lPSIke2xpYmRpcn0vcHl0aG9uMy41L19zdHJwdGltZS4qICR7bGliZGlyfS9weXRob24zLjUvY2FsZW5kYXIuKiAke2xpYmRpcn0vcHl0aG9uMy41L2xpYi1keW5sb2FkL2RhdGV0aW1lLiouc28gIgorRklMRVNfJHtQTn0tZGF0ZXRpbWU9IiR7bGliZGlyfS9weXRob24zLjUvX3N0cnB0aW1lLiogJHtsaWJkaXJ9L3B5dGhvbjMuNS9jYWxlbmRhci4qICR7bGliZGlyfS9weXRob24zLjUvZGF0ZXRpbWUuKiAke2xpYmRpcn0vcHl0aG9uMy41L2xpYi1keW5sb2FkL19kYXRldGltZS4qLnNvICIKIAogU1VNTUFSWV8ke1BOfS1kYj0iUHl0aG9uIGZpbGUtYmFzZWQgZGF0YWJhc2Ugc3VwcG9ydCIKIFJERVBFTkRTXyR7UE59LWRiPSIke1BOfS1jb3JlIgpAQCAtODUsNiArODksMTAgQEAKIFJERVBFTkRTXyR7UE59LWVtYWlsPSIke1BOfS1jb3JlICR7UE59LWlvICR7UE59LXJlICR7UE59LW1pbWUgJHtQTn0tYXVkaW8gJHtQTn0taW1hZ2UgJHtQTn0tbmV0Y2xpZW50IgogRklMRVNfJHtQTn0tZW1haWw9IiR7bGliZGlyfS9weXRob24zLjUvaW1hcGxpYi4qICR7bGliZGlyfS9weXRob24zLjUvZW1haWwgIgogCitTVU1NQVJZXyR7UE59LWVudW09IlB5dGhvbiBzdXBwb3J0IGZvciBlbnVtZXJhdGlvbnMiCitSREVQRU5EU18ke1BOfS1lbnVtPSIke1BOfS1jb3JlIgorRklMRVNfJHtQTn0tZW51bT0iJHtsaWJkaXJ9L3B5dGhvbjMuNS9lbnVtLiogIgorCiBTVU1NQVJZXyR7UE59LWZjbnRsPSJQeXRob24ncyBmY250bCBpbnRlcmZhY2UiCiBSREVQRU5EU18ke1BOfS1mY250bD0iJHtQTn0tY29yZSIKIEZJTEVTXyR7UE59LWZjbnRsPSIke2xpYmRpcn0vcHl0aG9uMy41L2xpYi1keW5sb2FkL2ZjbnRsLiouc28gIgpAQCAtMTA2LDcgKzExNCw3IEBACiBGSUxFU18ke1BOfS1pbWFnZT0iJHtsaWJkaXJ9L3B5dGhvbjMuNS9jb2xvcnN5cy4qICR7bGliZGlyfS9weXRob24zLjUvaW1naGRyLiogJHtsaWJkaXJ9L3B5dGhvbjMuNS9saWItZHlubG9hZC9pbWFnZW9wLiouc28gJHtsaWJkaXJ9L3B5dGhvbjMuNS9saWItZHlubG9hZC9yZ2JpbWcuKi5zbyAiCiAKIFNVTU1BUllfJHtQTn0taW1wb3J0bGliPSJQeXRob24gaW1wb3J0IGltcGxlbWVudGF0aW9uIGxpYnJhcnkiCi1SREVQRU5EU18ke1BOfS1pbXBvcnRsaWI9IiR7UE59LWNvcmUiCitSREVQRU5EU18ke1BOfS1pbXBvcnRsaWI9IiR7UE59LWNvcmUgJHtQTn0tbGFuZyIKIEZJTEVTXyR7UE59LWltcG9ydGxpYj0iJHtsaWJkaXJ9L3B5dGhvbjMuNS9pbXBvcnRsaWIgIgogCiBTVU1NQVJZXyR7UE59LWlvPSJQeXRob24gbG93LWxldmVsIEkvTyIKQEAgLTExOCw4ICsxMjYsOCBAQAogRklMRVNfJHtQTn0tanNvbj0iJHtsaWJkaXJ9L3B5dGhvbjMuNS9qc29uICR7bGliZGlyfS9weXRob24zLjUvbGliLWR5bmxvYWQvX2pzb24uKi5zbyAiCiAKIFNVTU1BUllfJHtQTn0tbGFuZz0iUHl0aG9uIGxvdy1sZXZlbCBsYW5ndWFnZSBzdXBwb3J0IgotUkRFUEVORFNfJHtQTn0tbGFuZz0iJHtQTn0tY29yZSIKLUZJTEVTXyR7UE59LWxhbmc9IiR7bGliZGlyfS9weXRob24zLjUvbGliLWR5bmxvYWQvX2Jpc2VjdC4qLnNvICR7bGliZGlyfS9weXRob24zLjUvbGliLWR5bmxvYWQvX2NvbGxlY3Rpb25zLiouc28gJHtsaWJkaXJ9L3B5dGhvbjMuNS9saWItZHlubG9hZC9faGVhcHEuKi5zbyAke2xpYmRpcn0vcHl0aG9uMy41L2xpYi1keW5sb2FkL193ZWFrcmVmLiouc28gJHtsaWJkaXJ9L3B5dGhvbjMuNS9saWItZHlubG9hZC9fZnVuY3Rvb2xzLiouc28gJHtsaWJkaXJ9L3B5dGhvbjMuNS9saWItZHlubG9hZC9hcnJheS4qLnNvICR7bGliZGlyfS9weXRob24zLjUvbGliLWR5bmxvYWQvaXRlcnRvb2xzLiouc28gJHtsaWJkaXJ9L3B5dGhvbjMuNS9saWItZHlubG9hZC9vcGVyYXRvci4qLnNvICR7bGliZGlyfS9weXRob24zLjUvbGliLWR5bmxvYWQvcGFyc2VyLiouc28gJHtsaWJkaXJ9L3B5dGhvbjMuNS9hdGV4aXQuKiAke2xpYmRpcn0vcHl0aG9uMy41L2Jpc2VjdC4qICR7bGliZGlyfS9weXRob24zLjUvY29kZS4qICR7bGliZGlyfS9weXRob24zLjUvY29kZW9wLiogJHtsaWJkaXJ9L3B5dGhvbjMuNS9jb2xsZWN0aW9ucy4qICR7bGliZGlyfS9weXRob24zLjUvX2NvbGxlY3Rpb25zX2FiYy4qICR7bGliZGlyfS9weXRob24zLjUvZGlzLiogJHtsaWJkaXJ9L3B5dGhvbjMuNS9mdW5jdG9vbHMuKiAke2xpYmRpcn0vcHl0aG9uMy41L2hlYXBxLiogJHtsaWJkaXJ9L3B5dGhvbjMuNS9pbnNwZWN0LiogJHtsaWJkaXJ9L3B5dGhvbjMuNS9rZXl3b3JkLiogJHtsaWJkaXJ9L3B5dGhvbjMuNS9vcGNvZGUuKiAke2xpYmRpcn0vcHl0aG9uMy41L3N5bWJvbC4qICR7bGliZGlyfS9weXRob24zLjUvcmVwci4qICR7bGliZGlyfS9weXRob24zLjUvdG9rZW4uKiAke2xpYmRpcn0vcHl0aG9uMy41L3Rva2VuaXplLiogJHtsaWJkaXJ9L3B5dGhvbjMuNS90cmFjZWJhY2suKiAke2xpYmRpcn0vcHl0aG9uMy41L3dlYWtyZWYuKiAiCitSREVQRU5EU18ke1BOfS1sYW5nPSIke1BOfS1jb3JlICR7UE59LWltcG9ydGxpYiIKK0ZJTEVTXyR7UE59LWxhbmc9IiR7bGliZGlyfS9weXRob24zLjUvbGliLWR5bmxvYWQvX2Jpc2VjdC4qLnNvICR7bGliZGlyfS9weXRob24zLjUvbGliLWR5bmxvYWQvX2NvbGxlY3Rpb25zLiouc28gJHtsaWJkaXJ9L3B5dGhvbjMuNS9saWItZHlubG9hZC9faGVhcHEuKi5zbyAke2xpYmRpcn0vcHl0aG9uMy41L2xpYi1keW5sb2FkL193ZWFrcmVmLiouc28gJHtsaWJkaXJ9L3B5dGhvbjMuNS9saWItZHlubG9hZC9fZnVuY3Rvb2xzLiouc28gJHtsaWJkaXJ9L3B5dGhvbjMuNS9saWItZHlubG9hZC9hcnJheS4qLnNvICR7bGliZGlyfS9weXRob24zLjUvbGliLWR5bmxvYWQvaXRlcnRvb2xzLiouc28gJHtsaWJkaXJ9L3B5dGhvbjMuNS9saWItZHlubG9hZC9vcGVyYXRvci4qLnNvICR7bGliZGlyfS9weXRob24zLjUvbGliLWR5bmxvYWQvcGFyc2VyLiouc28gJHtsaWJkaXJ9L3B5dGhvbjMuNS9hdGV4aXQuKiAke2xpYmRpcn0vcHl0aG9uMy41L2Jpc2VjdC4qICR7bGliZGlyfS9weXRob24zLjUvY29kZS4qICR7bGliZGlyfS9weXRob24zLjUvY29kZW9wLiogJHtsaWJkaXJ9L3B5dGhvbjMuNS9jb2xsZWN0aW9ucy4qICR7bGliZGlyfS9weXRob24zLjUvX2NvbGxlY3Rpb25zX2FiYy4qICR7bGliZGlyfS9weXRob24zLjUvY29udGV4dGxpYi4qICR7bGliZGlyfS9weXRob24zLjUvZGlzLiogJHtsaWJkaXJ9L3B5dGhvbjMuNS9mdW5jdG9vbHMuKiAke2xpYmRpcn0vcHl0aG9uMy41L2hlYXBxLiogJHtsaWJkaXJ9L3B5dGhvbjMuNS9pbnNwZWN0LiogJHtsaWJkaXJ9L3B5dGhvbjMuNS9rZXl3b3JkLiogJHtsaWJkaXJ9L3B5dGhvbjMuNS9vcGNvZGUuKiAke2xpYmRpcn0vcHl0aG9uMy41L29wZXJhdG9yLiogJHtsaWJkaXJ9L3B5dGhvbjMuNS9zeW1ib2wuKiAke2xpYmRpcn0vcHl0aG9uMy41L3JlcHIuKiAke2xpYmRpcn0vcHl0aG9uMy41L3Rva2VuLiogJHtsaWJkaXJ9L3B5dGhvbjMuNS90b2tlbml6ZS4qICR7bGliZGlyfS9weXRob24zLjUvdHJhY2ViYWNrLiogJHtsaWJkaXJ9L3B5dGhvbjMuNS93ZWFrcmVmLiogIgogCiBTVU1NQVJZXyR7UE59LWxvZ2dpbmc9IlB5dGhvbiBsb2dnaW5nIHN1cHBvcnQiCiBSREVQRU5EU18ke1BOfS1sb2dnaW5nPSIke1BOfS1jb3JlICR7UE59LWlvICR7UE59LWxhbmcgJHtQTn0tcGlja2xlICR7UE59LXN0cmluZ29sZCIKQEAgLTEzMCw3ICsxMzgsNyBAQAogRklMRVNfJHtQTn0tbWFpbGJveD0iJHtsaWJkaXJ9L3B5dGhvbjMuNS9tYWlsYm94LiogIgogCiBTVU1NQVJZXyR7UE59LW1hdGg9IlB5dGhvbiBtYXRoIHN1cHBvcnQiCi1SREVQRU5EU18ke1BOfS1tYXRoPSIke1BOfS1jb3JlIgorUkRFUEVORFNfJHtQTn0tbWF0aD0iJHtQTn0tY29yZSAke1BOfS1jcnlwdCIKIEZJTEVTXyR7UE59LW1hdGg9IiR7bGliZGlyfS9weXRob24zLjUvbGliLWR5bmxvYWQvY21hdGguKi5zbyAke2xpYmRpcn0vcHl0aG9uMy41L2xpYi1keW5sb2FkL21hdGguKi5zbyAke2xpYmRpcn0vcHl0aG9uMy41L2xpYi1keW5sb2FkL19yYW5kb20uKi5zbyAke2xpYmRpcn0vcHl0aG9uMy41L3JhbmRvbS4qICR7bGliZGlyfS9weXRob24zLjUvc2V0cy4qICIKIAogU1VNTUFSWV8ke1BOfS1taW1lPSJQeXRob24gTUlNRSBoYW5kbGluZyBBUElzIgpAQCAtMTkzLDEwICsyMDEsMTggQEAKIFJERVBFTkRTXyR7UE59LXJlc291cmNlPSIke1BOfS1jb3JlIgogRklMRVNfJHtQTn0tcmVzb3VyY2U9IiR7bGliZGlyfS9weXRob24zLjUvbGliLWR5bmxvYWQvcmVzb3VyY2UuKi5zbyAiCiAKK1NVTU1BUllfJHtQTn0tc2VsZWN0b3JzPSJQeXRob24gSGlnaC1sZXZlbCBJL08gbXVsdGlwbGV4aW5nIgorUkRFUEVORFNfJHtQTn0tc2VsZWN0b3JzPSIke1BOfS1jb3JlIgorRklMRVNfJHtQTn0tc2VsZWN0b3JzPSIke2xpYmRpcn0vcHl0aG9uMy41L3NlbGVjdG9ycy4qICIKKwogU1VNTUFSWV8ke1BOfS1zaGVsbD0iUHl0aG9uIHNoZWxsLWxpa2UgZnVuY3Rpb25hbGl0eSIKLVJERVBFTkRTXyR7UE59LXNoZWxsPSIke1BOfS1jb3JlICR7UE59LXJlIgorUkRFUEVORFNfJHtQTn0tc2hlbGw9IiR7UE59LWNvcmUgJHtQTn0tcmUgJHtQTn0tY29tcHJlc3Npb24iCiBGSUxFU18ke1BOfS1zaGVsbD0iJHtsaWJkaXJ9L3B5dGhvbjMuNS9jbWQuKiAke2xpYmRpcn0vcHl0aG9uMy41L2NvbW1hbmRzLiogJHtsaWJkaXJ9L3B5dGhvbjMuNS9kaXJjYWNoZS4qICR7bGliZGlyfS9weXRob24zLjUvZm5tYXRjaC4qICR7bGliZGlyfS9weXRob24zLjUvZ2xvYi4qICR7bGliZGlyfS9weXRob24zLjUvcG9wZW4yLiogJHtsaWJkaXJ9L3B5dGhvbjMuNS9zaGxleC4qICR7bGliZGlyfS9weXRob24zLjUvc2h1dGlsLiogIgogCitTVU1NQVJZXyR7UE59LXNpZ25hbD0iUHl0aG9uIHNldCBoYW5kbGVycyBmb3IgYXN5bmNocm9ub3VzIGV2ZW50cyBzdXBwb3J0IgorUkRFUEVORFNfJHtQTn0tc2lnbmFsPSIke1BOfS1jb3JlICR7UE59LWVudW0iCitGSUxFU18ke1BOfS1zaWduYWw9IiR7bGliZGlyfS9weXRob24zLjUvc2lnbmFsLiogIgorCiBTVU1NQVJZXyR7UE59LXNtdHBkPSJQeXRob24gU2ltcGxlIE1haWwgVHJhbnNwb3J0IERhZW1vbiIKIFJERVBFTkRTXyR7UE59LXNtdHBkPSIke1BOfS1jb3JlICR7UE59LW5ldHNlcnZlciAke1BOfS1lbWFpbCAke1BOfS1taW1lIgogRklMRVNfJHtQTn0tc210cGQ9IiR7YmluZGlyfS9zbXRwZC4qICR7bGliZGlyfS9weXRob24zLjUvc210cGQuKiAiCkBAIC0yMTQsOCArMjMwLDggQEAKIEZJTEVTXyR7UE59LXN0cmluZ29sZD0iJHtsaWJkaXJ9L3B5dGhvbjMuNS9saWItZHlubG9hZC9zdHJvcC4qLnNvICR7bGliZGlyfS9weXRob24zLjUvc3RyaW5nLiogJHtsaWJkaXJ9L3B5dGhvbjMuNS9zdHJpbmdvbGQuKiAiCiAKIFNVTU1BUllfJHtQTn0tc3VicHJvY2Vzcz0iUHl0aG9uIHN1YnByb2Nlc3Mgc3VwcG9ydCIKLVJERVBFTkRTXyR7UE59LXN1YnByb2Nlc3M9IiR7UE59LWNvcmUgJHtQTn0taW8gJHtQTn0tcmUgJHtQTn0tZmNudGwgJHtQTn0tcGlja2xlIgotRklMRVNfJHtQTn0tc3VicHJvY2Vzcz0iJHtsaWJkaXJ9L3B5dGhvbjMuNS9zdWJwcm9jZXNzLiogIgorUkRFUEVORFNfJHtQTn0tc3VicHJvY2Vzcz0iJHtQTn0tY29yZSAke1BOfS1pbyAke1BOfS1yZSAke1BOfS1mY250bCAke1BOfS1waWNrbGUgJHtQTn0tdGhyZWFkaW5nICR7UE59LXNpZ25hbCAke1BOfS1zZWxlY3RvcnMiCitGSUxFU18ke1BOfS1zdWJwcm9jZXNzPSIke2xpYmRpcn0vcHl0aG9uMy41L3N1YnByb2Nlc3MuKiAke2xpYmRpcn0vcHl0aG9uMy41L2xpYi1keW5sb2FkL19wb3NpeHN1YnByb2Nlc3MuKi5zbyAiCiAKIFNVTU1BUllfJHtQTn0tc3lzbG9nPSJQeXRob24gc3lzbG9nIGludGVyZmFjZSIKIFJERVBFTkRTXyR7UE59LXN5c2xvZz0iJHtQTn0tY29yZSIKQEAgLTIzNSw3ICsyNTEsNyBAQAogCiBTVU1NQVJZXyR7UE59LXRocmVhZGluZz0iUHl0aG9uIHRocmVhZGluZyAmIHN5bmNocm9uaXphdGlvbiBzdXBwb3J0IgogUkRFUEVORFNfJHtQTn0tdGhyZWFkaW5nPSIke1BOfS1jb3JlICR7UE59LWxhbmciCi1GSUxFU18ke1BOfS10aHJlYWRpbmc9IiR7bGliZGlyfS9weXRob24zLjUvX3RocmVhZGluZ19sb2NhbC4qICR7bGliZGlyfS9weXRob24zLjUvZHVtbXlfdGhyZWFkLiogJHtsaWJkaXJ9L3B5dGhvbjMuNS9kdW1teV90aHJlYWRpbmcuKiAke2xpYmRpcn0vcHl0aG9uMy41L211dGV4LiogJHtsaWJkaXJ9L3B5dGhvbjMuNS90aHJlYWRpbmcuKiAke2xpYmRpcn0vcHl0aG9uMy41L1F1ZXVlLiogIgorRklMRVNfJHtQTn0tdGhyZWFkaW5nPSIke2xpYmRpcn0vcHl0aG9uMy41L190aHJlYWRpbmdfbG9jYWwuKiAke2xpYmRpcn0vcHl0aG9uMy41L2R1bW15X3RocmVhZC4qICR7bGliZGlyfS9weXRob24zLjUvZHVtbXlfdGhyZWFkaW5nLiogJHtsaWJkaXJ9L3B5dGhvbjMuNS9tdXRleC4qICR7bGliZGlyfS9weXRob24zLjUvdGhyZWFkaW5nLiogJHtsaWJkaXJ9L3B5dGhvbjMuNS9xdWV1ZS4qICIKIAogU1VNTUFSWV8ke1BOfS10a2ludGVyPSJQeXRob24gVGNsL1RrIGJpbmRpbmdzIgogUkRFUEVORFNfJHtQTn0tdGtpbnRlcj0iJHtQTn0tY29yZSIKQEAgLTI1OCw3ICsyNzQsNyBAQAogRklMRVNfJHtQTn0teG1scnBjPSIke2xpYmRpcn0vcHl0aG9uMy41L3htbHJwY2xpYi4qICR7bGliZGlyfS9weXRob24zLjUvU2ltcGxlWE1MUlBDU2VydmVyLiogJHtsaWJkaXJ9L3B5dGhvbjMuNS9Eb2NYTUxSUENTZXJ2ZXIuKiAke2xpYmRpcn0vcHl0aG9uMy41L3htbHJwYyAiCiAKIFNVTU1BUllfJHtQTn0tbW9kdWxlcz0iQWxsIFB5dGhvbiBtb2R1bGVzIgotUkRFUEVORFNfJHtQTn0tbW9kdWxlcz0iJHtQTn0tMnRvMyAke1BOfS1hc3luY2lvICR7UE59LWF1ZGlvICR7UE59LWNvZGVjcyAke1BOfS1jb21waWxlICR7UE59LWNvbXByZXNzaW9uICR7UE59LWNvcmUgJHtQTn0tY3J5cHQgJHtQTn0tY3R5cGVzICR7UE59LWN1cnNlcyAke1BOfS1kYXRldGltZSAke1BOfS1kYiAke1BOfS1kZWJ1Z2dlciAke1BOfS1kaWZmbGliICR7UE59LWRpc3R1dGlscyAke1BOfS1kb2N0ZXN0ICR7UE59LWVtYWlsICR7UE59LWZjbnRsICR7UE59LWdkYm0gJHtQTn0taHRtbCAke1BOfS1pZGxlICR7UE59LWltYWdlICR7UE59LWltcG9ydGxpYiAke1BOfS1pbyAke1BOfS1qc29uICR7UE59LWxhbmcgJHtQTn0tbG9nZ2luZyAke1BOfS1tYWlsYm94ICR7UE59LW1hdGggJHtQTn0tbWltZSAke1BOfS1tbWFwICR7UE59LW11bHRpcHJvY2Vzc2luZyAke1BOfS1uZXRjbGllbnQgJHtQTn0tbmV0c2VydmVyICR7UE59LW51bWJlcnMgJHtQTn0tcGlja2xlICR7UE59LXBrZ3V0aWwgJHtQTn0tcHByaW50ICR7UE59LXByb2ZpbGUgJHtQTn0tcHlkb2MgJHtQTn0tcmUgJHtQTn0tcmVhZGxpbmUgJHtQTn0tcmVwcmxpYiAke1BOfS1yZXNvdXJjZSAke1BOfS1zaGVsbCAke1BOfS1zbXRwZCAke1BOfS1zcWxpdGUzICR7UE59LXNxbGl0ZTMtdGVzdHMgJHtQTn0tc3RyaW5nb2xkICR7UE59LXN1YnByb2Nlc3MgJHtQTn0tc3lzbG9nICR7UE59LXRlcm1pbmFsICR7UE59LXRlc3RzICR7UE59LXRleHR1dGlscyAke1BOfS10aHJlYWRpbmcgJHtQTn0tdGtpbnRlciAke1BOfS11bml0dGVzdCAke1BOfS11bml4YWRtaW4gJHtQTn0teG1sICR7UE59LXhtbHJwYyAgIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlcz0iJHtQTn0tMnRvMyAke1BOfS1hcmdwYXJzZSAke1BOfS1hc3luY2lvICR7UE59LWF1ZGlvICR7UE59LWNvZGVjcyAke1BOfS1jb21waWxlICR7UE59LWNvbXByZXNzaW9uICR7UE59LWNvcmUgJHtQTn0tY3J5cHQgJHtQTn0tY3R5cGVzICR7UE59LWN1cnNlcyAke1BOfS1kYXRldGltZSAke1BOfS1kYiAke1BOfS1kZWJ1Z2dlciAke1BOfS1kaWZmbGliICR7UE59LWRpc3R1dGlscyAke1BOfS1kb2N0ZXN0ICR7UE59LWVtYWlsICR7UE59LWVudW0gJHtQTn0tZmNudGwgJHtQTn0tZ2RibSAke1BOfS1odG1sICR7UE59LWlkbGUgJHtQTn0taW1hZ2UgJHtQTn0taW1wb3J0bGliICR7UE59LWlvICR7UE59LWpzb24gJHtQTn0tbGFuZyAke1BOfS1sb2dnaW5nICR7UE59LW1haWxib3ggJHtQTn0tbWF0aCAke1BOfS1taW1lICR7UE59LW1tYXAgJHtQTn0tbXVsdGlwcm9jZXNzaW5nICR7UE59LW5ldGNsaWVudCAke1BOfS1uZXRzZXJ2ZXIgJHtQTn0tbnVtYmVycyAke1BOfS1waWNrbGUgJHtQTn0tcGtndXRpbCAke1BOfS1wcHJpbnQgJHtQTn0tcHJvZmlsZSAke1BOfS1weWRvYyAke1BOfS1yZSAke1BOfS1yZWFkbGluZSAke1BOfS1yZXBybGliICR7UE59LXJlc291cmNlICR7UE59LXNlbGVjdG9ycyAke1BOfS1zaGVsbCAke1BOfS1zaWduYWwgJHtQTn0tc210cGQgJHtQTn0tc3FsaXRlMyAke1BOfS1zcWxpdGUzLXRlc3RzICR7UE59LXN0cmluZ29sZCAke1BOfS1zdWJwcm9jZXNzICR7UE59LXN5c2xvZyAke1BOfS10ZXJtaW5hbCAke1BOfS10ZXN0cyAke1BOfS10ZXh0dXRpbHMgJHtQTn0tdGhyZWFkaW5nICR7UE59LXRraW50ZXIgJHtQTn0tdW5pdHRlc3QgJHtQTn0tdW5peGFkbWluICR7UE59LXhtbCAke1BOfS14bWxycGMgICIKIEFMTE9XX0VNUFRZXyR7UE59LW1vZHVsZXMgPSAiMSIKIAogCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24tYXN5bmMuaW5jIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLWFzeW5jLmluYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yYzVjYjRkCi0tLSAvZGV2L251bGwKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLWFzeW5jLmluYwpAQCAtMCwwICsxLDE1IEBACitTVU1NQVJZID0gIlB5dGhvbiBmcmFtZXdvcmsgdG8gcHJvY2VzcyBpbnRlcmRlcGVuZGVudCB0YXNrcyBpbiBhIHBvb2wgb2Ygd29ya2VycyIKK0hPTUVQQUdFID0gImh0dHA6Ly9naXRodWIuY29tL2dpdHB5dGhvbi1kZXZlbG9wZXJzL2FzeW5jIgorU0VDVElPTiA9ICJkZXZlbC9weXRob24iCitMSUNFTlNFID0gIkJTRCIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL1BLRy1JTkZPO2JlZ2lubGluZT04O2VuZGxpbmU9ODttZDU9ODhkZjhlNzhiOWVkZmQ3NDQ5NTM4NjIxNzlmMmQxNGUiCisKK1NSQ19VUkkgPSAiaHR0cHM6Ly9maWxlcy5weXRob25ob3N0ZWQub3JnL3BhY2thZ2VzL3NvdXJjZS9hL2FzeW5jL2FzeW5jLSR7UFZ9LnRhci5neiIKK1NSQ19VUklbbWQ1c3VtXSA9ICI5YjA2YjU5OTdkZTIxNTRmM2JjMDI3M2Y4MGJjZWY2YiIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICJhYzY4OTRkODc2ZTQ1ODc4ZmFhZTQ5M2IwY2Y2MWQwZTI4ZWM0MTczMzQ0NDhhYzBhNmVhMjIyOWQ4MzQzMDUxIgorCitVUFNUUkVBTV9DSEVDS19VUkkgPSAiaHR0cHM6Ly9weXBpLnB5dGhvbi5vcmcvcHlwaS9hc3luYy8iCisKK1MgPSAiJHtXT1JLRElSfS9hc3luYy0ke1BWfSIKKworQkJDTEFTU0VYVEVORCA9ICJuYXRpdmVzZGsiCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24tYXN5bmNfMC42LjIuYmIgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24tYXN5bmNfMC42LjIuYmIKaW5kZXggYWQwYTYxNy4uZDg1NWU0MiAxMDA2NDQKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLWFzeW5jXzAuNi4yLmJiCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi1hc3luY18wLjYuMi5iYgpAQCAtMSwxOSArMSw1IEBACi1TVU1NQVJZID0gIlB5dGhvbiBmcmFtZXdvcmsgdG8gcHJvY2VzcyBpbnRlcmRlcGVuZGVudCB0YXNrcyBpbiBhIHBvb2wgb2Ygd29ya2VycyIKLUhPTUVQQUdFID0gImh0dHA6Ly9naXRodWIuY29tL2dpdHB5dGhvbi1kZXZlbG9wZXJzL2FzeW5jIgotU0VDVElPTiA9ICJkZXZlbC9weXRob24iCi1MSUNFTlNFID0gIkJTRCIKLUxJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL1BLRy1JTkZPO2JlZ2lubGluZT04O2VuZGxpbmU9ODttZDU9ODhkZjhlNzhiOWVkZmQ3NDQ5NTM4NjIxNzlmMmQxNGUiCi0KLVNSQ19VUkkgPSAiaHR0cDovL3B5cGkucHl0aG9uLm9yZy9wYWNrYWdlcy9zb3VyY2UvYS9hc3luYy9hc3luYy0ke1BWfS50YXIuZ3oiCi1TUkNfVVJJW21kNXN1bV0gPSAiOWIwNmI1OTk3ZGUyMTU0ZjNiYzAyNzNmODBiY2VmNmIiCi1TUkNfVVJJW3NoYTI1NnN1bV0gPSAiYWM2ODk0ZDg3NmU0NTg3OGZhYWU0OTNiMGNmNjFkMGUyOGVjNDE3MzM0NDQ4YWMwYTZlYTIyMjlkODM0MzA1MSIKLQotVVBTVFJFQU1fQ0hFQ0tfVVJJID0gImh0dHBzOi8vcHlwaS5weXRob24ub3JnL3B5cGkvYXN5bmMvIgotCi1TID0gIiR7V09SS0RJUn0vYXN5bmMtJHtQVn0iCityZXF1aXJlIHB5dGhvbi1hc3luYy5pbmMKIAogaW5oZXJpdCBzZXR1cHRvb2xzCiAKIFJERVBFTkRTXyR7UE59ICs9ICJweXRob24tdGhyZWFkaW5nIHB5dGhvbi1sYW5nIgotCi1CQkNMQVNTRVhURU5EID0gIm5hdGl2ZXNkayIKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi1kYnVzXzEuMi4wLmJiIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLWRidXNfMS4yLjAuYmIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGIzMTRkY2UuLjAwMDAwMDAKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLWRidXNfMS4yLjAuYmIKKysrIC9kZXYvbnVsbApAQCAtMSwyOSArMCwwIEBACi1TVU1NQVJZID0gIlB5dGhvbiBiaW5kaW5ncyBmb3IgdGhlIERCdXMgaW50ZXItcHJvY2VzcyBjb21tdW5pY2F0aW9uIHN5c3RlbSIKLVNFQ1RJT04gPSAiZGV2ZWwvcHl0aG9uIgotSE9NRVBBR0UgPSAiaHR0cDovL3d3dy5mcmVlZGVza3RvcC5vcmcvU29mdHdhcmUvZGJ1cyIKLUxJQ0VOU0UgPSAiTUlUIgotTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9MGI4MzA0N2NlOWU5NDhiNjdjMGZhY2M1ZjIzMzQ3NmEiCi1ERVBFTkRTID0gImV4cGF0IGRidXMgZGJ1cy1nbGliIHZpcnR1YWwvbGliaW50bCBweXRob24tcHlyZXgtbmF0aXZlIgotCi1TUkNfVVJJID0gImh0dHA6Ly9kYnVzLmZyZWVkZXNrdG9wLm9yZy9yZWxlYXNlcy9kYnVzLXB5dGhvbi9kYnVzLXB5dGhvbi0ke1BWfS50YXIuZ3ogXAotIgotCi1TUkNfVVJJW21kNXN1bV0gPSAiYjA5Y2QyZDFhMDU3Y2M0MzJjZTk0NGRlM2ZjMDZiZjciCi1TUkNfVVJJW3NoYTI1NnN1bV0gPSAiZTEyYzZjOGIyYmYzYTkzMDJmNzUxNjY5NTJjYmU0MWQ2YjM4YzM0NDFiYmM2NzY3ZGJkNDk4OTQyMzE2YzZkZiIKLVMgPSAiJHtXT1JLRElSfS9kYnVzLXB5dGhvbi0ke1BWfSIKLQotaW5oZXJpdCBkaXN0dXRpbHMtYmFzZSBhdXRvdG9vbHMgcGtnY29uZmlnCi0KLVBBQ0tBR0VDT05GSUcgPz0gIiIKLVBBQ0tBR0VDT05GSUdbZG9jc10gPSAiLS1lbmFibGUtaHRtbC1kb2NzLC0tZGlzYWJsZS1odG1sLWRvY3MscHl0aG9uLWRvY3V0aWxzLW5hdGl2ZSIKLVBBQ0tBR0VDT05GSUdbYXBpLWRvY3NdID0gIi0tZW5hYmxlLWFwaS1kb2NzLC0tZGlzYWJsZS1hcGktZG9jcyxweXRob24tZG9jdXRpbHMtbmF0aXZlIHB5dGhvbi1lcHlkb2MtbmF0aXZlIgotCi1leHBvcnQgQlVJTERfU1lTCi1leHBvcnQgSE9TVF9TWVMKLQotZXhwb3J0IFNUQUdJTkdfTElCRElSCi1leHBvcnQgU1RBR0lOR19JTkNESVIKLQotUkRFUEVORFNfJHtQTn0gPSAicHl0aG9uLWlvIHB5dGhvbi1sb2dnaW5nIHB5dGhvbi1zdHJpbmdvbGQgcHl0aG9uLXRocmVhZGluZyBweXRob24teG1sIgotCi1GSUxFU18ke1BOfS1kZXYgKz0gIiR7bGliZGlyfS9wa2djb25maWciCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24tZG9jdXRpbHNfMC4xMi5iYiBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi1kb2N1dGlsc18wLjEyLmJiCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4Y2RhODhkLi4wMDAwMDAwCi0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi1kb2N1dGlsc18wLjEyLmJiCisrKyAvZGV2L251bGwKQEAgLTEsMTggKzAsMCBAQAotU1VNTUFSWSA9ICJUZXh0IHByb2Nlc3Npbmcgc3lzdGVtIGZvciBkb2N1bWVudGF0aW9uIgotSE9NRVBBR0UgPSAiaHR0cDovL2RvY3V0aWxzLnNvdXJjZWZvcmdlLm5ldCIKLVNFQ1RJT04gPSAiZGV2ZWwvcHl0aG9uIgotTElDRU5TRSA9ICJQU0YgJiBCU0QtMi1DbGF1c2UgJiBHUEx2MyIKLUxJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkcudHh0O21kNT1hNzIyZmJkYzIwMzQ3ZGI3YjY5MjIzNTk0ZGQ1NDU3NCIKLQotREVQRU5EUyA9ICJweXRob24iCi0KLVNSQ19VUkkgPSAiJHtTT1VSQ0VGT1JHRV9NSVJST1J9L2RvY3V0aWxzL2RvY3V0aWxzLSR7UFZ9LnRhci5neiIKLVNSQ19VUklbbWQ1c3VtXSA9ICI0NjIyMjYzYjYyYzVjNzcxYzAzNTAyYWZhMzE1Nzc2OCIKLVNSQ19VUklbc2hhMjU2c3VtXSA9ICJjN2RiNzE3ODEwYWI2OTY1ZjY2YzhjZjAzOThhOThjOWQ4ZGY5ODJkYTM5YjRjZDdmMTYyOTExZWI4OTU5NmZhIgotCi1TID0gIiR7V09SS0RJUn0vZG9jdXRpbHMtJHtQVn0iCi0KLWluaGVyaXQgZGlzdHV0aWxzCi0KLUJCQ0xBU1NFWFRFTkQgPSAibmF0aXZlIgotCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24tZ2l0LmluYyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi1naXQuaW5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjEzYzA5N2EKLS0tIC9kZXYvbnVsbAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24tZ2l0LmluYwpAQCAtMCwwICsxLDIxIEBACitTVU1NQVJZID0gIlB5dGhvbiBsaWJyYXJ5IHVzZWQgdG8gaW50ZXJhY3Qgd2l0aCBHaXQgcmVwb3NpdG9yaWVzIgorREVTQ1JJUFRJT04gPSAiR2l0UHl0aG9uIHByb3ZpZGVzIG9iamVjdCBtb2RlbCByZWFkIGFuZCB3cml0ZSBhY2Nlc3MgdG8gXAorYSBnaXQgcmVwb3NpdG9yeS4gQWNjZXNzIHJlcG9zaXRvcnkgaW5mb3JtYXRpb24gY29udmVuaWVudGx5LCBhbHRlciB0aGUgXAoraW5kZXggZGlyZWN0bHksIGhhbmRsZSByZW1vdGVzLCBvciBnbyBkb3duIHRvIGxvdy1sZXZlbCBvYmplY3QgZGF0YWJhc2UgXAorYWNjZXNzIHdpdGggYmlnLWZpbGVzIHN1cHBvcnQuIgorSE9NRVBBR0UgPSAiaHR0cDovL2dpdGh1Yi5jb20vZ2l0cHl0aG9uLWRldmVsb3BlcnMvR2l0UHl0aG9uIgorU0VDVElPTiA9ICJkZXZlbC9weXRob24iCitMSUNFTlNFID0gIkJTRC0zLUNsYXVzZSIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0xJQ0VOU0U7bWQ1PThiOGQyNmMzN2MxZDVhMDRmOWIwMTg2ZWRiZWJjMTgzIgorCitTUkNfVVJJID0gImh0dHBzOi8vZmlsZXMucHl0aG9uaG9zdGVkLm9yZy9wYWNrYWdlcy9zb3VyY2UvRy9HaXRQeXRob24vR2l0UHl0aG9uLSR7UFZ9LnRhci5neiIKKworU1JDX1VSSVttZDVzdW1dID0gImFhMGJhOWRmMGFiZTRjOGYzNWRkN2JiOWJlODVkNTZlIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gImQ4ZTdhZGFhY2NlZWRkM2QwNDNlNmNkMjU0NGY1N2RiZTAwYzUzZmMyNjM3NDg4MGI3Y2VhNjdmMzE4OGFhNjgiCisKK1VQU1RSRUFNX0NIRUNLX1VSSSA9ICJodHRwczovL3B5cGkucHl0aG9uLm9yZy9weXBpL0dpdFB5dGhvbi8iCitVUFNUUkVBTV9DSEVDS19SRUdFWCA9ICIvR2l0UHl0aG9uLyg/UDxwdmVyPihcZCtbXC5cLV9dKikrKSIKKworUyA9ICIke1dPUktESVJ9L0dpdFB5dGhvbi0ke1BWfSIKKworQkJDTEFTU0VYVEVORCA9ICJuYXRpdmVzZGsiCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24tZ2l0XzEuMC4yLmJiIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLWdpdF8xLjAuMi5iYgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjAwZjgwNS4uMDAwMDAwMAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24tZ2l0XzEuMC4yLmJiCisrKyAvZGV2L251bGwKQEAgLTEsMjYgKzAsMCBAQAotU1VNTUFSWSA9ICJQeXRob24gbGlicmFyeSB1c2VkIHRvIGludGVyYWN0IHdpdGggR2l0IHJlcG9zaXRvcmllcyIKLURFU0NSSVBUSU9OID0gIkdpdFB5dGhvbiBwcm92aWRlcyBvYmplY3QgbW9kZWwgcmVhZCBhbmQgd3JpdGUgYWNjZXNzIHRvIFwKLWEgZ2l0IHJlcG9zaXRvcnkuIEFjY2VzcyByZXBvc2l0b3J5IGluZm9ybWF0aW9uIGNvbnZlbmllbnRseSwgYWx0ZXIgdGhlIFwKLWluZGV4IGRpcmVjdGx5LCBoYW5kbGUgcmVtb3Rlcywgb3IgZ28gZG93biB0byBsb3ctbGV2ZWwgb2JqZWN0IGRhdGFiYXNlIFwKLWFjY2VzcyB3aXRoIGJpZy1maWxlcyBzdXBwb3J0LiIKLUhPTUVQQUdFID0gImh0dHA6Ly9naXRodWIuY29tL2dpdHB5dGhvbi1kZXZlbG9wZXJzL0dpdFB5dGhvbiIKLVNFQ1RJT04gPSAiZGV2ZWwvcHl0aG9uIgotTElDRU5TRSA9ICJCU0QtMy1DbGF1c2UiCi1MSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9MSUNFTlNFO21kNT04YjhkMjZjMzdjMWQ1YTA0ZjliMDE4NmVkYmViYzE4MyIKLURFUEVORFMgPSAicHl0aG9uLWdpdGRiIgotCi1TUkNfVVJJID0gImh0dHA6Ly9weXBpLnB5dGhvbi5vcmcvcGFja2FnZXMvc291cmNlL0cvR2l0UHl0aG9uL0dpdFB5dGhvbi0ke1BWfS50YXIuZ3oiCi0KLVNSQ19VUklbbWQ1c3VtXSA9ICJkOTJkOTZhOGRhMGZjNzdjZjE0MWQzZTE2MDg0ZTA5NCIKLVNSQ19VUklbc2hhMjU2c3VtXSA9ICI4NWRlNzI1NTY3ODE0ODBhMzg4OTdhNzdkZTViNDU4YWUzODM4YjBmZDU4OTU5MzY3OWExYjVmMzRkMTgxZDg0IgotCi1VUFNUUkVBTV9DSEVDS19VUkkgPSAiaHR0cHM6Ly9weXBpLnB5dGhvbi5vcmcvcHlwaS9HaXRQeXRob24vIgotVVBTVFJFQU1fQ0hFQ0tfUkVHRVggPSAiL0dpdFB5dGhvbi8oP1A8cHZlcj4oXGQrW1wuXC1fXSopKykiCi0KLVMgPSAiJHtXT1JLRElSfS9HaXRQeXRob24tJHtQVn0iCi0KLWluaGVyaXQgc2V0dXB0b29scwotCi1SREVQRU5EU18ke1BOfSArPSAicHl0aG9uLWdpdGRiIHB5dGhvbi1sYW5nIHB5dGhvbi1pbyBweXRob24tc2hlbGwgcHl0aG9uLW1hdGggcHl0aG9uLXJlIHB5dGhvbi1zdWJwcm9jZXNzIHB5dGhvbi1zdHJpbmdvbGQgcHl0aG9uLXVuaXhhZG1pbiIKLQotQkJDTEFTU0VYVEVORCA9ICJuYXRpdmVzZGsiCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24tZ2l0XzIuMC43LmJiIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLWdpdF8yLjAuNy5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNDlkYmVhCi0tLSAvZGV2L251bGwKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLWdpdF8yLjAuNy5iYgpAQCAtMCwwICsxLDcgQEAKK3JlcXVpcmUgcHl0aG9uLWdpdC5pbmMKKworREVQRU5EUyA9ICJweXRob24tZ2l0ZGIiCisKK2luaGVyaXQgc2V0dXB0b29scworCitSREVQRU5EU18ke1BOfSArPSAicHl0aG9uLWdpdGRiIHB5dGhvbi1sYW5nIHB5dGhvbi1pbyBweXRob24tc2hlbGwgcHl0aG9uLW1hdGggcHl0aG9uLXJlIHB5dGhvbi1zdWJwcm9jZXNzIHB5dGhvbi1zdHJpbmdvbGQgcHl0aG9uLXVuaXhhZG1pbiIKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi1naXRkYi5pbmMgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24tZ2l0ZGIuaW5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA4MTkzZmIKLS0tIC9kZXYvbnVsbAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24tZ2l0ZGIuaW5jCkBAIC0wLDAgKzEsMTYgQEAKK1NVTU1BUlkgPSAiQSBwdXJlLVB5dGhvbiBnaXQgb2JqZWN0IGRhdGFiYXNlIgorSE9NRVBBR0UgPSAiaHR0cDovL2dpdGh1Yi5jb20vZ2l0cHl0aG9uLWRldmVsb3BlcnMvZ2l0ZGIiCitTRUNUSU9OID0gImRldmVsL3B5dGhvbiIKK0xJQ0VOU0UgPSAiQlNELTMtQ2xhdXNlIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vTElDRU5TRTttZDU9NTllNWVjYjEzMzM5YTkzNmVlZGY4MzI4MmVhZjQ1MjgiCisKK1NSQ19VUkkgPSAiaHR0cHM6Ly9maWxlcy5weXRob25ob3N0ZWQub3JnL3BhY2thZ2VzL3NvdXJjZS9nL2dpdGRiL2dpdGRiLSR7UFZ9LnRhci5neiIKKworU1JDX1VSSVttZDVzdW1dID0gIjQ0ZTQzNjZiOGJkZmQzMDZiMDc1YzNhNTJjOTZhZTFhIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gImEzZWJiYzI3YmUwMzVhMmU4NzRlZDkwNGRmNTE2ZTM1ZjRhMjlhNzc4YTc2NDM4NWRlMDlkZTllMGYxMzk2NTgiCisKK1VQU1RSRUFNX0NIRUNLX1VSSSA9ICJodHRwczovL3B5cGkucHl0aG9uLm9yZy9weXBpL2dpdGRiLyIKKworUyA9ICIke1dPUktESVJ9L2dpdGRiLSR7UFZ9IgorCitCQkNMQVNTRVhURU5EID0gIm5hdGl2ZXNkayIKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi1naXRkYl8wLjYuNC5iYiBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi1naXRkYl8wLjYuNC5iYgppbmRleCBjODJkZjFlLi4xNzc3Mzk1IDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24tZ2l0ZGJfMC42LjQuYmIKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLWdpdGRiXzAuNi40LmJiCkBAIC0xLDIxICsxLDcgQEAKLVNVTU1BUlkgPSAiQSBwdXJlLVB5dGhvbiBnaXQgb2JqZWN0IGRhdGFiYXNlIgotSE9NRVBBR0UgPSAiaHR0cDovL2dpdGh1Yi5jb20vZ2l0cHl0aG9uLWRldmVsb3BlcnMvZ2l0ZGIiCi1TRUNUSU9OID0gImRldmVsL3B5dGhvbiIKLUxJQ0VOU0UgPSAiQlNELTMtQ2xhdXNlIgotTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vTElDRU5TRTttZDU9NTllNWVjYjEzMzM5YTkzNmVlZGY4MzI4MmVhZjQ1MjgiCityZXF1aXJlIHB5dGhvbi1naXRkYi5pbmMKKwogREVQRU5EUyA9ICJweXRob24tYXN5bmMgcHl0aG9uLXNtbWFwIgogCi1TUkNfVVJJID0gImh0dHBzOi8vcHlwaS5weXRob24ub3JnL3BhY2thZ2VzL3NvdXJjZS9nL2dpdGRiL2dpdGRiLSR7UFZ9LnRhci5neiIKLQotU1JDX1VSSVttZDVzdW1dID0gIjQ0ZTQzNjZiOGJkZmQzMDZiMDc1YzNhNTJjOTZhZTFhIgotU1JDX1VSSVtzaGEyNTZzdW1dID0gImEzZWJiYzI3YmUwMzVhMmU4NzRlZDkwNGRmNTE2ZTM1ZjRhMjlhNzc4YTc2NDM4NWRlMDlkZTllMGYxMzk2NTgiCi0KLVVQU1RSRUFNX0NIRUNLX1VSSSA9ICJodHRwczovL3B5cGkucHl0aG9uLm9yZy9weXBpL2dpdGRiLyIKLQotUyA9ICIke1dPUktESVJ9L2dpdGRiLSR7UFZ9IgotCiBpbmhlcml0IGRpc3R1dGlscwogCiBSREVQRU5EU18ke1BOfSArPSAicHl0aG9uLXNtbWFwIHB5dGhvbi1hc3luYyBweXRob24tbW1hcCBweXRob24tbGFuZyBweXRob24temxpYiBweXRob24taW8gcHl0aG9uLXNoZWxsIgotCi1CQkNMQVNTRVhURU5EID0gIm5hdGl2ZXNkayIKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi1pbWFnaW5nLzAwMDEtcHl0aG9uLWltYWdpbmctc2V0dXAucHktZm9yY2UtcGF0aHMtZm9yLXpsaWItZnJlZXR5cC5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi1pbWFnaW5nLzAwMDEtcHl0aG9uLWltYWdpbmctc2V0dXAucHktZm9yY2UtcGF0aHMtZm9yLXpsaWItZnJlZXR5cC5wYXRjaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjU3NTMwNi4uMDAwMDAwMAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24taW1hZ2luZy8wMDAxLXB5dGhvbi1pbWFnaW5nLXNldHVwLnB5LWZvcmNlLXBhdGhzLWZvci16bGliLWZyZWV0eXAucGF0Y2gKKysrIC9kZXYvbnVsbApAQCAtMSw1NSArMCwwIEBACi1Gcm9tIDA3ZDRmMDk1YTllMjJhZTY3NmE4ZDY4MDczMTAxMTMxZTY1MDEyZGMgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCi1Gcm9tOiBLb2VuIEtvb2kgPGtvZW5AZG9taW5pb24udGhydWhlcmUubmV0PgotRGF0ZTogVHVlLCAxNSBOb3YgMjAxMSAxMzoxNjo1NCArMDEwMAotU3ViamVjdDogW1BBVENIXSBweXRob24gaW1hZ2luZyBzZXR1cC5weTogZm9yY2UgcGF0aHMgZm9yIHpsaWIsIGZyZWV0eXBlIGFuZCBqcGVnIGFuZCBkb24ndCBhZGQgaG9zdCBwYXRocwotCi1TaWduZWQtb2ZmLWJ5OiBLb2VuIEtvb2kgPGtvZW5AZG9taW5pb24udGhydWhlcmUubmV0PgotCi1VcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW2VtYmVkZGVkIHNwZWNpZmljXQotLS0tCi0gc2V0dXAucHkgfCAgIDE0ICsrKy0tLS0tLS0tLS0tCi0gMSBmaWxlcyBjaGFuZ2VkLCAzIGluc2VydGlvbnMoKyksIDExIGRlbGV0aW9ucygtKQotCi1kaWZmIC0tZ2l0IGEvc2V0dXAucHkgYi9zZXR1cC5weQotaW5kZXggNWQ0ZDUzYS4uYjFhMjJlYyAxMDA2NDQKLS0tLSBhL3NldHVwLnB5Ci0rKysgYi9zZXR1cC5weQotQEAgLTM0LDEwICszNCwxMCBAQCBkZWYgbGliaW5jbHVkZShyb290KToKLSAjIFRJRkZfUk9PVCA9IGxpYmluY2x1ZGUoIi9vcHQvdGlmZiIpCi0gCi0gVENMX1JPT1QgPSBOb25lCi0tSlBFR19ST09UID0gTm9uZQotLVpMSUJfUk9PVCA9IE5vbmUKLStKUEVHX1JPT1QgPSBvcy5lbnZpcm9uWydTVEFHSU5HX0xJQkRJUiddCi0rWkxJQl9ST09UID0gb3MuZW52aXJvblsnU1RBR0lOR19MSUJESVInXQotIFRJRkZfUk9PVCA9IE5vbmUKLS1GUkVFVFlQRV9ST09UID0gTm9uZQotK0ZSRUVUWVBFX1JPT1QgPSAgb3MuZW52aXJvblsnU1RBR0lOR19MSUJESVInXSwgb3MuZW52aXJvblsnU1RBR0lOR19JTkNESVInXQotIExDTVNfUk9PVCA9IE5vbmUKLSAKLSAjIEZJWE1FOiBhZGQgbWVjaGFuaXNtIHRvIGV4cGxpY2l0bHkgKmRpc2FibGUqIHRoZSB1c2Ugb2YgYSBsaWJyYXJ5Ci1AQCAtMTQ3LDcgKzE0Nyw2IEBAIGNsYXNzIHBpbF9idWlsZF9leHQoYnVpbGRfZXh0KToKLSAgICAgICAgICAgICBhZGRfZGlyZWN0b3J5KGxpYnJhcnlfZGlycywgIi9vcHQvbG9jYWwvbGliIikKLSAgICAgICAgICAgICBhZGRfZGlyZWN0b3J5KGluY2x1ZGVfZGlycywgIi9vcHQvbG9jYWwvaW5jbHVkZSIpCi0gCi0tICAgICAgICBhZGRfZGlyZWN0b3J5KGxpYnJhcnlfZGlycywgIi91c3IvbG9jYWwvbGliIikKLSAgICAgICAgICMgRklYTUU6IGNoZWNrIC9vcHQvc3R1ZmYgZGlyZWN0b3JpZXMgaGVyZT8KLSAKLSAgICAgICAgIHByZWZpeCA9IHN5c2NvbmZpZy5nZXRfY29uZmlnX3ZhcigicHJlZml4IikKLUBAIC0yMDcsMTMgKzIwNiw2IEBAIGNsYXNzIHBpbF9idWlsZF9leHQoYnVpbGRfZXh0KToKLSAgICAgICAgICAgICBpZiBvcy5wYXRoLmlzZmlsZShvcy5wYXRoLmpvaW4odGNsX2RpciwgInRrLmgiKSk6Ci0gICAgICAgICAgICAgICAgIGFkZF9kaXJlY3RvcnkoaW5jbHVkZV9kaXJzLCB0Y2xfZGlyKQotIAotLSAgICAgICAgIyBzdGFuZGFyZCBsb2NhdGlvbnMKLS0gICAgICAgIGFkZF9kaXJlY3RvcnkobGlicmFyeV9kaXJzLCAiL3Vzci9sb2NhbC9saWIiKQotLSAgICAgICAgYWRkX2RpcmVjdG9yeShpbmNsdWRlX2RpcnMsICIvdXNyL2xvY2FsL2luY2x1ZGUiKQotLQotLSAgICAgICAgYWRkX2RpcmVjdG9yeShsaWJyYXJ5X2RpcnMsICIvdXNyL2xpYiIpCi0tICAgICAgICBhZGRfZGlyZWN0b3J5KGluY2x1ZGVfZGlycywgIi91c3IvaW5jbHVkZSIpCi0tCi0gICAgICAgICAjCi0gICAgICAgICAjIGluc2VydCBuZXcgZGlycyAqYmVmb3JlKiBkZWZhdWx0IGxpYnMsIHRvIGF2b2lkIGNvbmZsaWN0cwotICAgICAgICAgIyBiZXR3ZWVuIFB5dGhvbiBQWUQgc3R1YiBsaWJzIGFuZCByZWFsIGxpYnJhcmllcwotLS0gCi0xLjcuMi41Ci0KZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi1pbWFnaW5nL2FsbG93LnRvLmRpc2FibGUuc29tZS5mZWF0dXJlcy5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi1pbWFnaW5nL2FsbG93LnRvLmRpc2FibGUuc29tZS5mZWF0dXJlcy5wYXRjaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDk2MGVkNC4uMDAwMDAwMAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24taW1hZ2luZy9hbGxvdy50by5kaXNhYmxlLnNvbWUuZmVhdHVyZXMucGF0Y2gKKysrIC9kZXYvbnVsbApAQCAtMSw2NSArMCwwIEBACi1BdCBsZWFzdCBsY21zIHdhc24ndCBkZXRlcm1pbmlzdGljbHkgZGV0ZWN0ZWQgZnJvbSBzeXNyb290LgotCi1UaGlzIHdpbGwgYWxsb3cgdG8gZXhwb3J0IExDTVNfRU5BQkxFRD1GYWxzZSB3aGVuIGxjbXMgaXNuJ3QgaW4gUEFDS0FHRUNPTkZJRy4KLQotVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtjb25maWd1cmF0aW9uXQotCi1TaWduZWQtb2ZmLWJ5OiBNYXJ0aW4gSmFuc2EgPE1hcnRpbi5KYW5zYUBnbWFpbC5jb20+Ci0KLWRpZmYgLXVOciBJbWFnaW5nLTEuMS43Lm9yaWcvc2V0dXAucHkgSW1hZ2luZy0xLjEuNy9zZXR1cC5weQotLS0tIEltYWdpbmctMS4xLjcub3JpZy9zZXR1cC5weQkyMDEzLTA3LTIyIDEwOjE3OjAyLjA4MTQ1NzA3NSArMDIwMAotKysrIEltYWdpbmctMS4xLjcvc2V0dXAucHkJMjAxMy0wNy0yMiAxMzoxMDowOS4wMjk3MDc0OTIgKzAyMDAKLUBAIC0zOSw2ICszOSwxMiBAQAotIFRJRkZfUk9PVCA9IE5vbmUKLSBGUkVFVFlQRV9ST09UID0gIG9zLmVudmlyb25bJ1NUQUdJTkdfTElCRElSJ10sIG9zLmVudmlyb25bJ1NUQUdJTkdfSU5DRElSJ10KLSBMQ01TX1JPT1QgPSBOb25lCi0rVENMX0VOQUJMRUQgPSBvcy5nZXRlbnYoJ1RDTF9FTkFCTEVEJywgIlRydWUiKQotK0pQRUdfRU5BQkxFRCA9IG9zLmdldGVudignSlBFR19FTkFCTEVEJywgIlRydWUiKQotK1pMSUJfRU5BQkxFRCA9IG9zLmdldGVudignWkxJQl9FTkFCTEVEJywgIlRydWUiKQotK1RJRkZfRU5BQkxFRCA9IG9zLmdldGVudignVElGRl9FTkFCTEVEJywgIlRydWUiKQotK0ZSRUVUWVBFX0VOQUJMRUQgPSBvcy5nZXRlbnYoJ0ZSRUVUWVBFX0VOQUJMRUQnLCAiVHJ1ZSIpCi0rTENNU19FTkFCTEVEID0gb3MuZ2V0ZW52KCdMQ01TX0VOQUJMRUQnLCAiVHJ1ZSIpCi0gCi0gIyBGSVhNRTogYWRkIG1lY2hhbmlzbSB0byBleHBsaWNpdGx5ICpkaXNhYmxlKiB0aGUgdXNlIG9mIGEgbGlicmFyeQotIAotQEAgLTIyMCwyMiArMjI2LDIyIEBACi0gICAgICAgICAgICAgemxpYiA9IGpwZWcgPSB0aWZmID0gZnJlZXR5cGUgPSB0Y2wgPSB0ayA9IGxjbXMgPSBOb25lCi0gICAgICAgICBmZWF0dXJlID0gZmVhdHVyZSgpCi0gCi0tICAgICAgICBpZiBmaW5kX2luY2x1ZGVfZmlsZShzZWxmLCAiemxpYi5oIik6Ci0rICAgICAgICBpZiBaTElCX0VOQUJMRUQgPT0gJ1RydWUnIGFuZCBmaW5kX2luY2x1ZGVfZmlsZShzZWxmLCAiemxpYi5oIik6Ci0gICAgICAgICAgICAgaWYgZmluZF9saWJyYXJ5X2ZpbGUoc2VsZiwgInoiKToKLSAgICAgICAgICAgICAgICAgZmVhdHVyZS56bGliID0gInoiCi0gICAgICAgICAgICAgZWxpZiBzeXMucGxhdGZvcm0gPT0gIndpbjMyIiBhbmQgZmluZF9saWJyYXJ5X2ZpbGUoc2VsZiwgInpsaWIiKToKLSAgICAgICAgICAgICAgICAgZmVhdHVyZS56bGliID0gInpsaWIiICMgYWx0ZXJuYXRpdmUgbmFtZQotIAotLSAgICAgICAgaWYgZmluZF9pbmNsdWRlX2ZpbGUoc2VsZiwgImpwZWdsaWIuaCIpOgotKyAgICAgICAgaWYgSlBFR19FTkFCTEVEID09ICdUcnVlJyBhbmQgZmluZF9pbmNsdWRlX2ZpbGUoc2VsZiwgImpwZWdsaWIuaCIpOgotICAgICAgICAgICAgIGlmIGZpbmRfbGlicmFyeV9maWxlKHNlbGYsICJqcGVnIik6Ci0gICAgICAgICAgICAgICAgIGZlYXR1cmUuanBlZyA9ICJqcGVnIgotICAgICAgICAgICAgIGVsaWYgc3lzLnBsYXRmb3JtID09ICJ3aW4zMiIgYW5kIGZpbmRfbGlicmFyeV9maWxlKHNlbGYsICJsaWJqcGVnIik6Ci0gICAgICAgICAgICAgICAgIGZlYXR1cmUuanBlZyA9ICJsaWJqcGVnIiAjIGFsdGVybmF0aXZlIG5hbWUKLSAKLS0gICAgICAgIGlmIGZpbmRfbGlicmFyeV9maWxlKHNlbGYsICJ0aWZmIik6Ci0rICAgICAgICBpZiBUSUZGX0VOQUJMRUQgPT0gJ1RydWUnIGFuZCBmaW5kX2xpYnJhcnlfZmlsZShzZWxmLCAidGlmZiIpOgotICAgICAgICAgICAgIGZlYXR1cmUudGlmZiA9ICJ0aWZmIgotIAotLSAgICAgICAgaWYgZmluZF9saWJyYXJ5X2ZpbGUoc2VsZiwgImZyZWV0eXBlIik6Ci0rICAgICAgICBpZiBGUkVFVFlQRV9FTkFCTEVEID09ICdUcnVlJyBhbmQgZmluZF9saWJyYXJ5X2ZpbGUoc2VsZiwgImZyZWV0eXBlIik6Ci0gICAgICAgICAgICAgIyBsb29rIGZvciBmcmVldHlwZTIgaW5jbHVkZSBmaWxlcwotICAgICAgICAgICAgIGZyZWV0eXBlX3ZlcnNpb24gPSAwCi0gICAgICAgICAgICAgZm9yIGRpciBpbiBzZWxmLmNvbXBpbGVyLmluY2x1ZGVfZGlyczoKLUBAIC0yNTYsMTEgKzI2MiwxMSBAQAotICAgICAgICAgICAgICAgICBpZiBkaXI6Ci0gICAgICAgICAgICAgICAgICAgICBhZGRfZGlyZWN0b3J5KHNlbGYuY29tcGlsZXIuaW5jbHVkZV9kaXJzLCBkaXIsIDApCi0gCi0tICAgICAgICBpZiBmaW5kX2luY2x1ZGVfZmlsZShzZWxmLCAibGNtcy5oIik6Ci0rICAgICAgICBpZiBMQ01TX0VOQUJMRUQgPT0gJ1RydWUnIGFuZCBmaW5kX2luY2x1ZGVfZmlsZShzZWxmLCAibGNtcy5oIik6Ci0gICAgICAgICAgICAgaWYgZmluZF9saWJyYXJ5X2ZpbGUoc2VsZiwgImxjbXMiKToKLSAgICAgICAgICAgICAgICAgZmVhdHVyZS5sY21zID0gImxjbXMiCi0gCi0tICAgICAgICBpZiBfdGtpbnRlciBhbmQgZmluZF9pbmNsdWRlX2ZpbGUoc2VsZiwgInRrLmgiKToKLSsgICAgICAgIGlmIFRDTF9FTkFCTEVEID09ICdUcnVlJyBhbmQgX3RraW50ZXIgYW5kIGZpbmRfaW5jbHVkZV9maWxlKHNlbGYsICJ0ay5oIik6Ci0gICAgICAgICAgICAgIyB0aGUgbGlicmFyeSBuYW1lcyBtYXkgdmFyeSBzb21ld2hhdCAoZS5nLiB0Y2w4NCBvciB0Y2w4LjQpCi0gICAgICAgICAgICAgdmVyc2lvbiA9IFRDTF9WRVJTSU9OWzBdICsgVENMX1ZFUlNJT05bMl0KLSAgICAgICAgICAgICBpZiBmaW5kX2xpYnJhcnlfZmlsZShzZWxmLCAidGNsIiArIHZlcnNpb24pOgpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLWltYWdpbmcvZml4LWZyZWV0eXBlLWluY2x1ZGVzLnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLWltYWdpbmcvZml4LWZyZWV0eXBlLWluY2x1ZGVzLnBhdGNoCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5ZWNjNjNhLi4wMDAwMDAwCi0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi1pbWFnaW5nL2ZpeC1mcmVldHlwZS1pbmNsdWRlcy5wYXRjaAorKysgL2Rldi9udWxsCkBAIC0xLDMwICswLDAgQEAKLVVwc3RyZWFtLVN0YXR1czogQmFja3BvcnQKLVNpZ25lZC1vZmYtYnk6IFJvc3MgQnVydG9uIDxyb3NzLmJ1cnRvbkBpbnRlbC5jb20+Ci0KLUZyb20gYzYwNDBmNjE4ZDhmMjcwNmE3YjQ2ZDFjZGYzN2QxYTU4N2Y5NzAxZiBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKLUZyb206IEFuZHJldyBTdHJvbW5vdiA8c3Ryb21ub3ZAZ21haWwuY29tPgotRGF0ZTogVGh1LCAyOCBOb3YgMjAxMyAxNjo1ODo0MyArMDQwMAotU3ViamVjdDogW1BBVENIXSBmaXggY29tcGlsaW5nIHdpdGggRnJlZVR5cGUgMi41LjEKLQotLS0tCi0gX2ltYWdpbmdmdC5jIHwgNCArKysrCi0gMSBmaWxlIGNoYW5nZWQsIDQgaW5zZXJ0aW9ucygrKQotCi1kaWZmIC0tZ2l0IGEvX2ltYWdpbmdmdC5jIGIvX2ltYWdpbmdmdC5jCi1pbmRleCA0N2Q1MGJkLi5mMTk1NTViIDEwMDY0NAotLS0tIGEvX2ltYWdpbmdmdC5jCi0rKysgYi9faW1hZ2luZ2Z0LmMKLUBAIC01OSw3ICs1OSwxMSBAQCBzdHJ1Y3QgewotICAgICBjb25zdCBjaGFyKiBtZXNzYWdlOwotIH0gZnRfZXJyb3JzW10gPQotIAotKyNpZiBkZWZpbmVkKFVTRV9GUkVFVFlQRV8yXzEpCi0rI2luY2x1ZGUgRlRfRVJST1JTX0gKLSsjZWxzZQotICNpbmNsdWRlIDxmcmVldHlwZS9mdGVycm9ycy5oPgotKyNlbmRpZgotIAotIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCi0gLyogZm9udCBvYmplY3RzICovCi0tLSAKLTEuOC41LjEKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi1pbWFnaW5nXzEuMS43LmJiIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLWltYWdpbmdfMS4xLjcuYmIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGE2NzgzMjguLjAwMDAwMDAKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLWltYWdpbmdfMS4xLjcuYmIKKysrIC9kZXYvbnVsbApAQCAtMSw0NSArMCwwIEBACi1TVU1NQVJZID0gIlB5dGhvbiBJbWFnaW5nIExpYnJhcnkgKFBJTCkiCi1TRUNUSU9OID0gImRldmVsL3B5dGhvbiIKLUxJQ0VOU0UgPSAiTUlUIgotTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vUkVBRE1FO2JlZ2lubGluZT05MjtlbmRsaW5lPTEyMDttZDU9YzQzNzFhZjQ1NzlmMWU0ODljZjg4MWMxNDQzZGQ0ZWMiCi1ERVBFTkRTID0gImZyZWV0eXBlIGpwZWcgdGlmZiIKLVNSQ05BTUUgPSAiSW1hZ2luZyIKLVBSID0gInI1IgotCi1TUkNfVVJJID0gImh0dHA6Ly9lZmZib3Qub3JnL2Rvd25sb2Fkcy9JbWFnaW5nLSR7UFZ9LnRhci5neiBcCi0gICAgICAgICAgIGZpbGU6Ly8wMDAxLXB5dGhvbi1pbWFnaW5nLXNldHVwLnB5LWZvcmNlLXBhdGhzLWZvci16bGliLWZyZWV0eXAucGF0Y2ggXAotICAgICAgICAgICBmaWxlOi8vYWxsb3cudG8uZGlzYWJsZS5zb21lLmZlYXR1cmVzLnBhdGNoIFwKLSAgICAgICAgICAgZmlsZTovL2ZpeC1mcmVldHlwZS1pbmNsdWRlcy5wYXRjaCIKLQotU1JDX1VSSVttZDVzdW1dID0gImZjMTRhNTRlMWNlMDJhMDIyNWJlODg1NGJmYmE0NzhlIgotU1JDX1VSSVtzaGEyNTZzdW1dID0gIjg5NWJjN2MyNDk4YzhlMWY5Yjk5OTM4ZjFhNDBkYzg2YjNmMTQ5NzQxZjEwNWNmN2M3YmQyZTA3MjU0MDUyMTEiCi1TID0gIiR7V09SS0RJUn0vJHtTUkNOQU1FfS0ke1BWfSIKLQotIyBUaGVyZSBpc24ndCBlbmFibGUvZGlzYWJsZSBvcHRpb24sIGFuZCBsY21zIGlzIGluIG1ldGEtb2UsIGF0IGxlYXN0IG1ha2UgaXQgZXhwbGljaXQgd2hlbiBlbmFibGVkCi0jIHNldHVwLnB5IGFscmVhZHkgaGFzIEZJWE1FOiBhZGQgbWVjaGFuaXNtIHRvIGV4cGxpY2l0bHkgKmRpc2FibGUqIHRoZSB1c2Ugb2YgYSBsaWJyYXJ5Ci1QQUNLQUdFQ09ORklHID8/PSAiIgotUEFDS0FHRUNPTkZJR1tsY21zXSA9ICIsLGxjbXMiCi0KLWluaGVyaXQgZGlzdHV0aWxzCi0KLWRvX2NvbXBpbGUoKSB7Ci0gICAgZXhwb3J0IFNUQUdJTkdfTElCRElSPSR7U1RBR0lOR19MSUJESVJ9Ci0gICAgZXhwb3J0IFNUQUdJTkdfSU5DRElSPSR7U1RBR0lOR19JTkNESVJ9Ci0gICAgZXhwb3J0IExDTVNfRU5BQkxFRD0ke0BiYi51dGlscy5jb250YWlucygnUEFDS0FHRUNPTkZJRycsICdsY21zJywgJ1RydWUnLCAnRmFsc2UnLCBkKX0KLSAgICBkaXN0dXRpbHNfZG9fY29tcGlsZQotfQotCi1kb19pbnN0YWxsKCkgewotICAgIGV4cG9ydCBTVEFHSU5HX0xJQkRJUj0ke1NUQUdJTkdfTElCRElSfQotICAgIGV4cG9ydCBTVEFHSU5HX0lOQ0RJUj0ke1NUQUdJTkdfSU5DRElSfQotICAgIGV4cG9ydCBMQ01TX0VOQUJMRUQ9JHtAYmIudXRpbHMuY29udGFpbnMoJ1BBQ0tBR0VDT05GSUcnLCAnbGNtcycsICdUcnVlJywgJ0ZhbHNlJywgZCl9Ci0gICAgZGlzdHV0aWxzX2RvX2luc3RhbGwKLSAgICBpbnN0YWxsIC1kICR7RH0ke2RhdGFkaXJ9L2RvYy8ke0JQTn0vaHRtbC8KLSAgICBpbnN0YWxsIC1tIDA2NDQgJHtTfS9SRUFETUUgJHtEfSR7ZGF0YWRpcn0vZG9jLyR7QlBOfS8KLSAgICBpbnN0YWxsIC1tIDA2NDQgJHtTfS9Eb2NzLyogJHtEfSR7ZGF0YWRpcn0vZG9jLyR7QlBOfS9odG1sLwotCi0gICAgIyBnZXQgcmlkIG9mICMhL3Vzci9sb2NhbC9iaW4vcHl0aG9uCi0gICAgc2VkIC1pIC1lICdzOi91c3IvbG9jYWwvYmluLzoke2JpbmRpcn0vZW52IDpnJyAke0R9JHtiaW5kaXJ9LyoKLX0KLQotUkRFUEVORFNfJHtQTn0gKz0gInB5dGhvbi1sYW5nIHB5dGhvbi1zdHJpbmdvbGQiCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24tbWFrby5pbmMgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24tbWFrby5pbmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODVlYzIxNwotLS0gL2Rldi9udWxsCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi1tYWtvLmluYwpAQCAtMCwwICsxLDE1IEBACitTVU1NQVJZID0gIlRlbXBsYXRpbmcgbGlicmFyeSBmb3IgUHl0aG9uIgorU0VDVElPTiA9ICJkZXZlbC9weXRob24iCitMSUNFTlNFID0gIk1JVCIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0xJQ0VOU0U7bWQ1PTFiYjIxZmEyZDJmN2E1MzRjODg0Yjk5MDQzMGE2ODYzIgorCitTUkNfVVJJID0gImh0dHBzOi8vZmlsZXMucHl0aG9uaG9zdGVkLm9yZy9wYWNrYWdlcy9zb3VyY2UvTS9NYWtvL01ha28tJHtQVn0udGFyLmd6IgorCitTUkNfVVJJW21kNXN1bV0gPSAiYzVmYzMxYTMyM2RkNDk5MDY4M2QyZjJkYTAyZDRlMjAiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiZmVkOTlkYmU0ZDBkZGIyN2EzM2VlNDkxMGQ4NzA4YWNhOWVmMWZlODU0ZTY2ODM4N2E5YWI5YTkwY2JmOTA1OSIKKworVVBTVFJFQU1fQ0hFQ0tfVVJJID0gImh0dHBzOi8vcHlwaS5weXRob24ub3JnL3B5cGkvbWFrby8iCitVUFNUUkVBTV9DSEVDS19SRUdFWCA9ICIvTWFrby8oP1A8cHZlcj4oXGQrW1wuXC1fXSopKykiCisKK1MgPSAiJHtXT1JLRElSfS9NYWtvLSR7UFZ9IgorCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24tbWFrb18xLjAuMy5iYiBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi1tYWtvXzEuMC4zLmJiCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5ZWZkNzAwLi4wMDAwMDAwCi0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi1tYWtvXzEuMC4zLmJiCisrKyAvZGV2L251bGwKQEAgLTEsMjQgKzAsMCBAQAotU1VNTUFSWSA9ICJUZW1wbGF0aW5nIGxpYnJhcnkgZm9yIFB5dGhvbiIKLVNFQ1RJT04gPSAiZGV2ZWwvcHl0aG9uIgotTElDRU5TRSA9ICJNSVQiCi1MSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9MSUNFTlNFO21kNT1kZWIzZmY4ZTRjMTdhYWY3YjgwODg5YjZiMmJmNGM4MyIKLQotU1JDX1VSSSA9ICJodHRwczovL3B5cGkucHl0aG9uLm9yZy9wYWNrYWdlcy9zb3VyY2UvTS9NYWtvL01ha28tJHtQVn0udGFyLmd6IgotCi1TUkNfVVJJW21kNXN1bV0gPSAiYTc4ZjIwZjYzNjZhOGEwNjU5Y2U1NTMyZjg2MTRlNTMiCi1TUkNfVVJJW3NoYTI1NnN1bV0gPSAiNzY0NGJjMGVlMzU5NjVkMmUxNDZkZGUzMTgyN2I4OTgyZWQ3MGE1ODI4MTA4NWZhYzQyODY5YTA5NzY0ZDM4YyIKLQotVVBTVFJFQU1fQ0hFQ0tfVVJJID0gImh0dHBzOi8vcHlwaS5weXRob24ub3JnL3B5cGkvbWFrby8iCi1VUFNUUkVBTV9DSEVDS19SRUdFWCA9ICIvTWFrby8oP1A8cHZlcj4oXGQrW1wuXC1fXSopKykiCi0KLVMgPSAiJHtXT1JLRElSfS9NYWtvLSR7UFZ9IgotCi1pbmhlcml0IHNldHVwdG9vbHMKLQotUkRFUEVORFNfJHtQTn0gPSAicHl0aG9uLXRocmVhZGluZyBcCi0gICAgICAgICAgICAgICAgICBweXRob24tbmV0Y2xpZW50IFwKLSAgICAgICAgICAgICAgICAgIHB5dGhvbi1odG1sIFwKLSIKLVJERVBFTkRTXyR7UE59X2NsYXNzLW5hdGl2ZSA9ICIiCi0KLUJCQ0xBU1NFWFRFTkQgPSAibmF0aXZlIG5hdGl2ZXNkayIKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi1tYWtvXzEuMC40LmJiIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLW1ha29fMS4wLjQuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjMwMDQ0ZQotLS0gL2Rldi9udWxsCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi1tYWtvXzEuMC40LmJiCkBAIC0wLDAgKzEsMTcgQEAKK3JlcXVpcmUgcHl0aG9uLW1ha28uaW5jCisKK2luaGVyaXQgc2V0dXB0b29scworCitSREVQRU5EU18ke1BOfSA9ICJweXRob24tdGhyZWFkaW5nIFwKKyAgICAgICAgICAgICAgICAgIHB5dGhvbi1uZXRjbGllbnQgXAorICAgICAgICAgICAgICAgICAgcHl0aG9uLWh0bWwgXAorIgorUkRFUEVORFNfJHtQTn1fY2xhc3MtbmF0aXZlID0gIiIKKworQkJDTEFTU0VYVEVORCA9ICJuYXRpdmUgbmF0aXZlc2RrIgorCisjIFRoZSBzYW1lIHV0aWxpdHkgaXMgcGFja2FnZWQgaW4gcHl0aG9uMy1tYWtvLCBzbyBpdCB3b3VsZCBjb25mbGljdAorZG9faW5zdGFsbF9hcHBlbmQoKSB7CisgICAgcm0gLWYgJHtEfSR7YmluZGlyfS9tYWtvLXJlbmRlcgorICAgIHJtZGlyICR7RH0ke2JpbmRpcn0KK30KZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi1uYXRpdmUvMTItZGlzdHV0aWxzLXByZWZpeC1pcy1pbnNpZGUtc3RhZ2luZy1hcmVhLnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLW5hdGl2ZS8xMi1kaXN0dXRpbHMtcHJlZml4LWlzLWluc2lkZS1zdGFnaW5nLWFyZWEucGF0Y2gKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGY4OWFhZmYuLjAwMDAwMDAKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLW5hdGl2ZS8xMi1kaXN0dXRpbHMtcHJlZml4LWlzLWluc2lkZS1zdGFnaW5nLWFyZWEucGF0Y2gKKysrIC9kZXYvbnVsbApAQCAtMSw2NSArMCwwIEBACi1VcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW2VtYmVkZGVkIHNwZWNpZmljXQotCi0jIFRoZSBwcm9wZXIgcHJlZml4IGlzIGluc2lkZSBvdXIgc3RhZ2luZyBhcmVhLgotIyBTaWduZWQtT2ZmOiBNaWNoYWVsICdNaWNrZXknIExhdWVyIDxtaWNrZXlAdmFuaWxsZS1tZWRpYS5kZT4KLSMgU2lnbmVkLW9mZi1ieTogUGhpbCBCbHVuZGVsbCA8cGhpbGJAZ251Lm9yZz4KLQotLS0tIFB5dGhvbi0yLjYuNi9MaWIvZGlzdHV0aWxzL3N5c2NvbmZpZy5weS5vcmlnCTIwMTItMDEtMDMgMTQ6MDI6MDMuMDI3MDA1Mjk2ICswMDAwCi0rKysgUHl0aG9uLTIuNi42L0xpYi9kaXN0dXRpbHMvc3lzY29uZmlnLnB5CTIwMTItMDEtMDMgMTQ6MDI6MzEuNTE3NjAxMDgxICswMDAwCi1AQCAtMTksOCArMTksOCBAQAotIGZyb20gZGlzdHV0aWxzLmVycm9ycyBpbXBvcnQgRGlzdHV0aWxzUGxhdGZvcm1FcnJvcgotIAotICMgVGhlc2UgYXJlIG5lZWRlZCBpbiBhIGNvdXBsZSBvZiBzcG90cywgc28ganVzdCBjb21wdXRlIHRoZW0gb25jZS4KLS1QUkVGSVggPSBvcy5wYXRoLm5vcm1wYXRoKHN5cy5wcmVmaXgpCi0tRVhFQ19QUkVGSVggPSBvcy5wYXRoLm5vcm1wYXRoKHN5cy5leGVjX3ByZWZpeCkKLStQUkVGSVggPSBvcy5wYXRoLm5vcm1wYXRoKHN5cy5wcmVmaXgpLnJlcGxhY2UoIG9zLmdldGVudigiQlVJTERfU1lTIiksIG9zLmdldGVudigiSE9TVF9TWVMiKSApCi0rRVhFQ19QUkVGSVggPSBvcy5wYXRoLm5vcm1wYXRoKHN5cy5leGVjX3ByZWZpeCkucmVwbGFjZSggb3MuZ2V0ZW52KCJCVUlMRF9TWVMiKSwgb3MuZ2V0ZW52KCJIT1NUX1NZUyIpICkKLSAKLSAjIFBhdGggdG8gdGhlIGJhc2UgZGlyZWN0b3J5IG9mIHRoZSBwcm9qZWN0LiBPbiBXaW5kb3dzIHRoZSBiaW5hcnkgbWF5Ci0gIyBsaXZlIGluIHByb2plY3QvUENCdWlsZDkuICBJZiB3ZSdyZSBkZWFsaW5nIHdpdGggYW4geDY0IFdpbmRvd3MgYnVpbGQsCi1AQCAtNzAsNyArNzAsNyBAQAotICAgICBzeXMuZXhlY19wcmVmaXggLS0gaS5lLiwgaWdub3JlICdwbGF0X3NwZWNpZmljJy4KLSAgICAgIiIiCi0gICAgIGlmIHByZWZpeCBpcyBOb25lOgotLSAgICAgICAgcHJlZml4ID0gcGxhdF9zcGVjaWZpYyBhbmQgRVhFQ19QUkVGSVggb3IgUFJFRklYCi0rICAgICAgICBwcmVmaXggPSBvcy5lbnZpcm9uWydTVEFHSU5HX0lOQ0RJUiddLnJzdHJpcCgnaW5jbHVkZScpCi0gCi0gICAgIGlmIG9zLm5hbWUgPT0gInBvc2l4IjoKLSAgICAgICAgIGlmIHB5dGhvbl9idWlsZDoKLUBAIC0xMTUsMTIgKzExNSwxNiBAQAotICAgICBJZiAncHJlZml4JyBpcyBzdXBwbGllZCwgdXNlIGl0IGluc3RlYWQgb2Ygc3lzLnByZWZpeCBvcgotICAgICBzeXMuZXhlY19wcmVmaXggLS0gaS5lLiwgaWdub3JlICdwbGF0X3NwZWNpZmljJy4KLSAgICAgIiIiCi0rICAgIGxpYl9iYXNlbmFtZSA9IG9zLmVudmlyb25bJ1NUQUdJTkdfTElCRElSJ10uc3BsaXQoJy8nKVstMV0KLSAgICAgaWYgcHJlZml4IGlzIE5vbmU6Ci0tICAgICAgICBwcmVmaXggPSBwbGF0X3NwZWNpZmljIGFuZCBFWEVDX1BSRUZJWCBvciBQUkVGSVgKLSsgICAgICAgIGlmIHBsYXRfc3BlY2lmaWM6Ci0rICAgICAgICAgICAgcHJlZml4ID0gb3MuZW52aXJvblsnU1RBR0lOR19MSUJESVInXS5yc3RyaXAobGliX2Jhc2VuYW1lKQotKyAgICAgICAgZWxzZToKLSsgICAgICAgICAgICBwcmVmaXggPSBQUkVGSVgKLSAKLSAgICAgaWYgb3MubmFtZSA9PSAicG9zaXgiOgotICAgICAgICAgbGlicHl0aG9uID0gb3MucGF0aC5qb2luKHByZWZpeCwKLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAibGliIiwgInB5dGhvbiIgKyBnZXRfcHl0aG9uX3ZlcnNpb24oKSkKLSsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaWJfYmFzZW5hbWUsICJweXRob24iICsgZ2V0X3B5dGhvbl92ZXJzaW9uKCkpCi0gICAgICAgICBpZiBzdGFuZGFyZF9saWI6Ci0gICAgICAgICAgICAgcmV0dXJuIGxpYnB5dGhvbgotICAgICAgICAgZWxzZToKLUBAIC0yMTYsNyArMjIwLDcgQEAKLSAgICAgZWxzZToKLSAgICAgICAgICMgVGhlIG5hbWUgb2YgdGhlIGNvbmZpZy5oIGZpbGUgY2hhbmdlZCBpbiAyLjIKLSAgICAgICAgIGNvbmZpZ19oID0gJ3B5Y29uZmlnLmgnCi0tICAgIHJldHVybiBvcy5wYXRoLmpvaW4oaW5jX2RpciwgY29uZmlnX2gpCi0rICAgIHJldHVybiBvcy5wYXRoLmpvaW4oaW5jX2RpciwgY29uZmlnX2gpLnJlcGxhY2UoIG9zLmdldGVudigiQlVJTERfU1lTIiksIG9zLmdldGVudigiSE9TVF9TWVMiKSApCi0gCi0gCi0gZGVmIGdldF9tYWtlZmlsZV9maWxlbmFtZSgpOgotQEAgLTIyNSw3ICsyMjksNyBAQAotICAgICAgICAgcmV0dXJuIG9zLnBhdGguam9pbihvcy5wYXRoLmRpcm5hbWUob3MucGF0aC5yZWFscGF0aChzeXMuZXhlY3V0YWJsZSkpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiTWFrZWZpbGUiKQotICAgICBsaWJfZGlyID0gZ2V0X3B5dGhvbl9saWIocGxhdF9zcGVjaWZpYz0xLCBzdGFuZGFyZF9saWI9MSkKLS0gICAgcmV0dXJuIG9zLnBhdGguam9pbihsaWJfZGlyLCAiY29uZmlnIiwgIk1ha2VmaWxlIikKLSsgICAgcmV0dXJuIG9zLnBhdGguam9pbihsaWJfZGlyLCAiY29uZmlnIiwgIk1ha2VmaWxlIikucmVwbGFjZSggb3MuZ2V0ZW52KCJCVUlMRF9TWVMiKSwgb3MuZ2V0ZW52KCJIT1NUX1NZUyIpICkKLSAKLSAKLSBkZWYgcGFyc2VfY29uZmlnX2goZnAsIGc9Tm9uZSk6CmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24tbmF0aXZlL2F2b2lkX3BhcmFsbGVsX21ha2VfcmFjZXNfb25fcGdlbi5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi1uYXRpdmUvYXZvaWRfcGFyYWxsZWxfbWFrZV9yYWNlc19vbl9wZ2VuLnBhdGNoCmluZGV4IDUyNzllN2MuLmE1OTJlYTQgMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi1uYXRpdmUvYXZvaWRfcGFyYWxsZWxfbWFrZV9yYWNlc19vbl9wZ2VuLnBhdGNoCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi1uYXRpdmUvYXZvaWRfcGFyYWxsZWxfbWFrZV9yYWNlc19vbl9wZ2VuLnBhdGNoCkBAIC00LDggKzQsOCBAQAogCiAtIEltcGxlbWVudHMgUmljaGFyZCBQdXJkaWUncyBpZGVhCiAKLVNpZ25lZC1PZmYtQnk6IFJpY2hhcmQgUHVyZGllIDxyaWNoYXJkLnB1cmRpZUBsaW51eGZvdW5kYXRpb24ub3JnPgotU2lnbmVkLU9mZi1CeTogQWxlamFuZHJvIEhlcm5hbmRleiA8YWxlamFuZHJvLmhlcm5hbmRlekBsaW51eC5pbnRlbC5jb20+CitTaWduZWQtb2ZmLWJ5OiBSaWNoYXJkIFB1cmRpZSA8cmljaGFyZC5wdXJkaWVAbGludXhmb3VuZGF0aW9uLm9yZz4KK1NpZ25lZC1vZmYtYnk6IEFsZWphbmRybyBIZXJuYW5kZXogPGFsZWphbmRyby5oZXJuYW5kZXpAbGludXguaW50ZWwuY29tPgogCiBJbmRleDogUHl0aG9uLTIuNy45L01ha2VmaWxlLnByZS5pbgogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLW5hdGl2ZS9kZWJ1Zy5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi1uYXRpdmUvZGVidWcucGF0Y2gKaW5kZXggNWVjMTBkNi4uMzYxNzg4MiAxMDA2NDQKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLW5hdGl2ZS9kZWJ1Zy5wYXRjaAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24tbmF0aXZlL2RlYnVnLnBhdGNoCkBAIC0xLDI0ICsxLDI3IEBACiBVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKIAotSW5kZXg6IFB5dGhvbi0yLjYuMS9MaWIvZGlzdHV0aWxzL3VuaXhjY29tcGlsZXIucHkKK0luZGV4OiBQeXRob24tMi43LjEyL0xpYi9kaXN0dXRpbHMvdW5peGNjb21waWxlci5weQogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0tIFB5dGhvbi0yLjYuMS5vcmlnL0xpYi9kaXN0dXRpbHMvdW5peGNjb21waWxlci5weQkyMDA5LTExLTEzIDE2OjA0OjU0LjAwMDAwMDAwMCArMDAwMAotKysrIFB5dGhvbi0yLjYuMS9MaWIvZGlzdHV0aWxzL3VuaXhjY29tcGlsZXIucHkJMjAwOS0xMS0xMyAxNjowNjoyNy4wMDAwMDAwMDAgKzAwMDAKLUBAIC0zMDAsNiArMzAwLDggQEAKLSAgICAgICAgIGR5bGliX2YgPSBzZWxmLmxpYnJhcnlfZmlsZW5hbWUobGliLCBsaWJfdHlwZT0nZHlsaWInKQotICAgICAgICAgc3RhdGljX2YgPSBzZWxmLmxpYnJhcnlfZmlsZW5hbWUobGliLCBsaWJfdHlwZT0nc3RhdGljJykKKy0tLSBQeXRob24tMi43LjEyLm9yaWcvTGliL2Rpc3R1dGlscy91bml4Y2NvbXBpbGVyLnB5CisrKysgUHl0aG9uLTIuNy4xMi9MaWIvZGlzdHV0aWxzL3VuaXhjY29tcGlsZXIucHkKK0BAIC0yNzgsNiArMjc4LDggQEAgY2xhc3MgVW5peENDb21waWxlcihDQ29tcGlsZXIpOgorIAorIAogIAogKyAgICAgICAgcHJpbnQgIkxvb2tpbmcgaW4gJXMgZm9yICVzIiAlIChsaWIsIGRpcnMpCiArCiAgICAgICAgICBmb3IgZGlyIGluIGRpcnM6CiAgICAgICAgICAgICAgc2hhcmVkID0gb3MucGF0aC5qb2luKGRpciwgc2hhcmVkX2YpCiAgICAgICAgICAgICAgZHlsaWIgPSBvcy5wYXRoLmpvaW4oZGlyLCBkeWxpYl9mKQotQEAgLTMwOSwxMCArMzExLDEzIEBACitAQCAtMjk4LDEyICszMDAsMTYgQEAgY2xhc3MgVW5peENDb21waWxlcihDQ29tcGlsZXIpOgogICAgICAgICAgICAgICMgYXNzdW1pbmcgdGhhdCAqYWxsKiBVbml4IEMgY29tcGlsZXJzIGRvLiAgQW5kIG9mIGNvdXJzZSBJJ20KICAgICAgICAgICAgICAjIGlnbm9yaW5nIGV2ZW4gR0NDJ3MgIi1zdGF0aWMiIG9wdGlvbi4gIFNvIHN1ZSBtZS4KICAgICAgICAgICAgICBpZiBvcy5wYXRoLmV4aXN0cyhkeWxpYik6CiArICAgICAgICAgICAgICAgIHByaW50ICJGb3VuZCAlcyIgJSAoZHlsaWIpCiAgICAgICAgICAgICAgICAgIHJldHVybiBkeWxpYgorICAgICAgICAgICAgIGVsaWYgb3MucGF0aC5leGlzdHMoeGNvZGVfc3R1Yik6CisrICAgICAgICAgICAgICAgIHByaW50ICJGb3VuZCAlcyIgJSAoeGNvZGVfc3R1YikKKyAgICAgICAgICAgICAgICAgcmV0dXJuIHhjb2RlX3N0dWIKICAgICAgICAgICAgICBlbGlmIG9zLnBhdGguZXhpc3RzKHNoYXJlZCk6CiArICAgICAgICAgICAgICAgIHByaW50ICJGb3VuZCAlcyIgJSAoc2hhcmVkKQogICAgICAgICAgICAgICAgICByZXR1cm4gc2hhcmVkCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24tbmF0aXZlL211bHRpbGliLnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLW5hdGl2ZS9tdWx0aWxpYi5wYXRjaAppbmRleCA4Y2E4OWU3Li45MTZiNDBmIDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24tbmF0aXZlL211bHRpbGliLnBhdGNoCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi1uYXRpdmUvbXVsdGlsaWIucGF0Y2gKQEAgLTEsNiArMSw2IEBACiBSZWJhc2VkIGZvciBQeXRob24gMi43LjkKIAotU2lnbmVkLU9mZi1CeTogQWxlamFuZHJvIEhlcm5hbmRleiA8YWxlamFuZHJvLmhlcm5hbmRlekBsaW51eC5pbnRlbC5jb20+CitTaWduZWQtb2ZmLWJ5OiBBbGVqYW5kcm8gSGVybmFuZGV6IDxhbGVqYW5kcm8uaGVybmFuZGV6QGxpbnV4LmludGVsLmNvbT4KIAogMjAxMS8wOS8yOQogVGhlIHB5dGhvbiByZWNpcGUgYnVpbGRpbmcgd2FzIGZhaWxpbmcgYmVjYXVzZSBweXRob24tbmF0aXZlIApAQCAtMTAsMTIgKzEwLDEyIEBACiAKIFVwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbb2Utc3BlY2lmaWNdCiAKLVNpZ25lZC1PZmYtQnk6IE5pdGluIEEgS2FtYmxlIDxuaXRpbi5hLmthbWJsZUBpbnRlbC5jb20+CitTaWduZWQtb2ZmLWJ5OiBOaXRpbiBBIEthbWJsZSA8bml0aW4uYS5rYW1ibGVAaW50ZWwuY29tPgogCi1JbmRleDogUHl0aG9uLTIuNy45L0luY2x1ZGUvcHl0aG9ucnVuLmgKK0luZGV4OiBQeXRob24tMi43LjEyL0luY2x1ZGUvcHl0aG9ucnVuLmgKID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tLSBQeXRob24tMi43Ljkub3JpZy9JbmNsdWRlL3B5dGhvbnJ1bi5oCi0rKysgUHl0aG9uLTIuNy45L0luY2x1ZGUvcHl0aG9ucnVuLmgKKy0tLSBQeXRob24tMi43LjEyLm9yaWcvSW5jbHVkZS9weXRob25ydW4uaAorKysrIFB5dGhvbi0yLjcuMTIvSW5jbHVkZS9weXRob25ydW4uaAogQEAgLTEwOCw2ICsxMDgsNyBAQCBQeUFQSV9GVU5DKGNoYXIgKikgUHlfR2V0UGF0aCh2b2lkKTsKICAvKiBJbiB0aGVpciBvd24gZmlsZXMgKi8KICBQeUFQSV9GVU5DKGNvbnN0IGNoYXIgKikgUHlfR2V0VmVyc2lvbih2b2lkKTsKQEAgLTI0LDEwICsyNCwxMCBAQAogIFB5QVBJX0ZVTkMoY29uc3QgY2hhciAqKSBQeV9HZXRDb3B5cmlnaHQodm9pZCk7CiAgUHlBUElfRlVOQyhjb25zdCBjaGFyICopIFB5X0dldENvbXBpbGVyKHZvaWQpOwogIFB5QVBJX0ZVTkMoY29uc3QgY2hhciAqKSBQeV9HZXRCdWlsZEluZm8odm9pZCk7Ci1JbmRleDogUHl0aG9uLTIuNy45L0xpYi9kaXN0dXRpbHMvY29tbWFuZC9pbnN0YWxsLnB5CitJbmRleDogUHl0aG9uLTIuNy4xMi9MaWIvZGlzdHV0aWxzL2NvbW1hbmQvaW5zdGFsbC5weQogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0tIFB5dGhvbi0yLjcuOS5vcmlnL0xpYi9kaXN0dXRpbHMvY29tbWFuZC9pbnN0YWxsLnB5Ci0rKysgUHl0aG9uLTIuNy45L0xpYi9kaXN0dXRpbHMvY29tbWFuZC9pbnN0YWxsLnB5CistLS0gUHl0aG9uLTIuNy4xMi5vcmlnL0xpYi9kaXN0dXRpbHMvY29tbWFuZC9pbnN0YWxsLnB5CisrKysgUHl0aG9uLTIuNy4xMi9MaWIvZGlzdHV0aWxzL2NvbW1hbmQvaW5zdGFsbC5weQogQEAgLTIyLDYgKzIyLDggQEAgZnJvbSBzaXRlIGltcG9ydCBVU0VSX0JBU0UKICBmcm9tIHNpdGUgaW1wb3J0IFVTRVJfU0lURQogIApAQCAtNDYsMTEgKzQ2LDExIEBACiAgICAgICAgICAnaGVhZGVycyc6ICckYmFzZS9pbmNsdWRlL3B5dGhvbiRweV92ZXJzaW9uX3Nob3J0LyRkaXN0X25hbWUnLAogICAgICAgICAgJ3NjcmlwdHMnOiAnJGJhc2UvYmluJywKICAgICAgICAgICdkYXRhJyAgIDogJyRiYXNlJywKLUluZGV4OiBQeXRob24tMi43LjkvTGliL3B5ZG9jLnB5CitJbmRleDogUHl0aG9uLTIuNy4xMi9MaWIvcHlkb2MucHkKID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tLSBQeXRob24tMi43Ljkub3JpZy9MaWIvcHlkb2MucHkKLSsrKyBQeXRob24tMi43LjkvTGliL3B5ZG9jLnB5Ci1AQCAtMzgzLDcgKzM4Myw3IEBAIGNsYXNzIERvYzoKKy0tLSBQeXRob24tMi43LjEyLm9yaWcvTGliL3B5ZG9jLnB5CisrKysgUHl0aG9uLTIuNy4xMi9MaWIvcHlkb2MucHkKK0BAIC0zODQsNyArMzg0LDcgQEAgY2xhc3MgRG9jOgogIAogICAgICAgICAgZG9jbG9jID0gb3MuZW52aXJvbi5nZXQoIlBZVEhPTkRPQ1MiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImh0dHA6Ly9kb2NzLnB5dGhvbi5vcmcvbGlicmFyeSIpCkBAIC01OSwxMCArNTksMTAgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInB5dGhvbiIrc3lzLnZlcnNpb25bMDozXSkKICAgICAgICAgIGlmIChpc2luc3RhbmNlKG9iamVjdCwgdHlwZShvcykpIGFuZAogICAgICAgICAgICAgIChvYmplY3QuX19uYW1lX18gaW4gKCdlcnJubycsICdleGNlcHRpb25zJywgJ2djJywgJ2ltcCcsCi1JbmRleDogUHl0aG9uLTIuNy45L0xpYi9zaXRlLnB5CitJbmRleDogUHl0aG9uLTIuNy4xMi9MaWIvc2l0ZS5weQogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0tIFB5dGhvbi0yLjcuOS5vcmlnL0xpYi9zaXRlLnB5Ci0rKysgUHl0aG9uLTIuNy45L0xpYi9zaXRlLnB5CistLS0gUHl0aG9uLTIuNy4xMi5vcmlnL0xpYi9zaXRlLnB5CisrKysgUHl0aG9uLTIuNy4xMi9MaWIvc2l0ZS5weQogQEAgLTI4OCwxMyArMjg4LDE5IEBAIGRlZiBnZXRzaXRlcGFja2FnZXMoKToKICAgICAgICAgIGlmIHN5cy5wbGF0Zm9ybSBpbiAoJ29zMmVteCcsICdyaXNjb3MnKToKICAgICAgICAgICAgICBzaXRlcGFja2FnZXMuYXBwZW5kKG9zLnBhdGguam9pbihwcmVmaXgsICJMaWIiLCAic2l0ZS1wYWNrYWdlcyIpKQpAQCAtODYsMTAgKzg2LDEwIEBACiAgICAgICAgICBpZiBzeXMucGxhdGZvcm0gPT0gImRhcndpbiI6CiAgICAgICAgICAgICAgIyBmb3IgZnJhbWV3b3JrIGJ1aWxkcyAqb25seSogd2UgYWRkIHRoZSBzdGFuZGFyZCBBcHBsZQogICAgICAgICAgICAgICMgbG9jYXRpb25zLgotSW5kZXg6IFB5dGhvbi0yLjcuOS9MaWIvdGVzdC90ZXN0X2RsLnB5CitJbmRleDogUHl0aG9uLTIuNy4xMi9MaWIvdGVzdC90ZXN0X2RsLnB5CiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLS0gUHl0aG9uLTIuNy45Lm9yaWcvTGliL3Rlc3QvdGVzdF9kbC5weQotKysrIFB5dGhvbi0yLjcuOS9MaWIvdGVzdC90ZXN0X2RsLnB5CistLS0gUHl0aG9uLTIuNy4xMi5vcmlnL0xpYi90ZXN0L3Rlc3RfZGwucHkKKysrKyBQeXRob24tMi43LjEyL0xpYi90ZXN0L3Rlc3RfZGwucHkKIEBAIC00LDEwICs0LDExIEBACiAgaW1wb3J0IHVuaXR0ZXN0CiAgZnJvbSB0ZXN0LnRlc3Rfc3VwcG9ydCBpbXBvcnQgdmVyYm9zZSwgaW1wb3J0X21vZHVsZQpAQCAtMTA0LDEwICsxMDQsMTAgQEAKICAgICAgKCcvdXNyL2Jpbi9jeWd3aW4xLmRsbCcsICdnZXRwaWQnKSwKICAgICAgKCcvdXNyL2xpYi9saWJjLmR5bGliJywgJ2dldHBpZCcpLAogICAgICBdCi1JbmRleDogUHl0aG9uLTIuNy45L0xpYi90cmFjZS5weQorSW5kZXg6IFB5dGhvbi0yLjcuMTIvTGliL3RyYWNlLnB5CiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLS0gUHl0aG9uLTIuNy45Lm9yaWcvTGliL3RyYWNlLnB5Ci0rKysgUHl0aG9uLTIuNy45L0xpYi90cmFjZS5weQorLS0tIFB5dGhvbi0yLjcuMTIub3JpZy9MaWIvdHJhY2UucHkKKysrKyBQeXRob24tMi43LjEyL0xpYi90cmFjZS5weQogQEAgLTc1NCwxMCArNzU0LDEwIEBAIGRlZiBtYWluKGFyZ3Y9Tm9uZSk6CiAgICAgICAgICAgICAgICAgICMgc2hvdWxkIEkgYWxzbyBjYWxsIGV4cGFuZHVzZXI/IChhZnRlciBhbGwsIGNvdWxkIHVzZSAkSE9NRSkKICAKQEAgLTEyMSwxMSArMTIxLDExIEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJweXRob24iICsgc3lzLnZlcnNpb25bOjNdKSkKICAgICAgICAgICAgICAgICAgcyA9IG9zLnBhdGgubm9ybXBhdGgocykKICAgICAgICAgICAgICAgICAgaWdub3JlX2RpcnMuYXBwZW5kKHMpCi1JbmRleDogUHl0aG9uLTIuNy45L01ha2VmaWxlLnByZS5pbgorSW5kZXg6IFB5dGhvbi0yLjcuMTIvTWFrZWZpbGUucHJlLmluCiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLS0gUHl0aG9uLTIuNy45Lm9yaWcvTWFrZWZpbGUucHJlLmluCi0rKysgUHl0aG9uLTIuNy45L01ha2VmaWxlLnByZS5pbgotQEAgLTg3LDYgKzg3LDcgQEAgUFlfQ0ZMQUdTPQkkKENGTEFHUykgJChDUFBGTEFHUykgJChDRkxBRworLS0tIFB5dGhvbi0yLjcuMTIub3JpZy9NYWtlZmlsZS5wcmUuaW4KKysrKyBQeXRob24tMi43LjEyL01ha2VmaWxlLnByZS5pbgorQEAgLTkyLDYgKzkyLDcgQEAgUFlfQ0ZMQUdTPQkkKENGTEFHUykgJChDUFBGTEFHUykgJChDRkxBRwogIAogICMgTWFjaGluZS1kZXBlbmRlbnQgc3ViZGlyZWN0b3JpZXMKICBNQUNIREVQPQlATUFDSERFUEAKQEAgLTEzMyw3ICsxMzMsNyBAQAogIAogICMgTXVsdGlhcmNoIGRpcmVjdG9yeSAobWF5IGJlIGVtcHR5KQogIE1VTFRJQVJDSD0JQE1VTFRJQVJDSEAKLUBAIC0xMDYsNyArMTA3LDcgQEAgTElCRElSPQkJQGxpYmRpckAKK0BAIC0xMTEsNyArMTEyLDcgQEAgTElCRElSPQkJQGxpYmRpckAKICBNQU5ESVI9CQlAbWFuZGlyQAogIElOQ0xVREVESVI9CUBpbmNsdWRlZGlyQAogIENPTkZJTkNMVURFRElSPQkkKGV4ZWNfcHJlZml4KS9pbmNsdWRlCkBAIC0xNDIsNyArMTQyLDcgQEAKICAKICAjIERldGFpbGVkIGRlc3RpbmF0aW9uIGRpcmVjdG9yaWVzCiAgQklOTElCREVTVD0JJChMSUJESVIpL3B5dGhvbiQoVkVSU0lPTikKLUBAIC01OTcsNiArNTk4LDcgQEAgTW9kdWxlcy9nZXRwYXRoLm86ICQoc3JjZGlyKS9Nb2R1bGVzL2dldAorQEAgLTY2OSw2ICs2NzAsNyBAQCBNb2R1bGVzL2dldHBhdGgubzogJChzcmNkaXIpL01vZHVsZXMvZ2V0CiAgCQktREVYRUNfUFJFRklYPSciJChleGVjX3ByZWZpeCkiJyBcCiAgCQktRFZFUlNJT049JyIkKFZFUlNJT04pIicgXAogIAkJLURWUEFUSD0nIiQoVlBBVEgpIicgXApAQCAtMTUwLDcgKzE1MCw3IEBACiAgCQktbyAkQCAkKHNyY2RpcikvTW9kdWxlcy9nZXRwYXRoLmMKICAKICBNb2R1bGVzL3B5dGhvbi5vOiAkKHNyY2RpcikvTW9kdWxlcy9weXRob24uYwotQEAgLTYzOSw3ICs2NDEsNyBAQCAkKEFTVF9DKTogJChBU1RfQVNETCkgJChBU0RMR0VOX0ZJTEVTKQorQEAgLTcyMCw3ICs3MjIsNyBAQCAkKEFTVF9DKTogJChBU1RfQVNETCkgJChBU0RMR0VOX0ZJTEVTKQogIFB5dGhvbi9jb21waWxlLm8gUHl0aG9uL3N5bXRhYmxlLm8gUHl0aG9uL2FzdC5vOiAkKEdSQU1NQVJfSCkgJChBU1RfSCkKICAKICBQeXRob24vZ2V0cGxhdGZvcm0ubzogJChzcmNkaXIpL1B5dGhvbi9nZXRwbGF0Zm9ybS5jCkBAIC0xNTksMjUgKzE1OSwyNSBAQAogIAogIFB5dGhvbi9pbXBvcnRkbC5vOiAkKHNyY2RpcikvUHl0aG9uL2ltcG9ydGRsLmMKICAJCSQoQ0MpIC1jICQoUFlfQ0ZMQUdTKSAtSSQoRExJTkNMRElSKSAtbyAkQCAkKHNyY2RpcikvUHl0aG9uL2ltcG9ydGRsLmMKLUluZGV4OiBQeXRob24tMi43LjkvTW9kdWxlcy9nZXRwYXRoLmMKK0luZGV4OiBQeXRob24tMi43LjEyL01vZHVsZXMvZ2V0cGF0aC5jCiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLS0gUHl0aG9uLTIuNy45Lm9yaWcvTW9kdWxlcy9nZXRwYXRoLmMKLSsrKyBQeXRob24tMi43LjkvTW9kdWxlcy9nZXRwYXRoLmMKLUBAIC0xMTYsOSArMTE2LDExIEBACi0gI2RlZmluZSBFWEVDX1BSRUZJWCBQUkVGSVgKKy0tLSBQeXRob24tMi43LjEyLm9yaWcvTW9kdWxlcy9nZXRwYXRoLmMKKysrKyBQeXRob24tMi43LjEyL01vZHVsZXMvZ2V0cGF0aC5jCitAQCAtMTAwLDYgKzEwMCwxMyBAQAorICNlcnJvciAiUFJFRklYLCBFWEVDX1BSRUZJWCwgVkVSU0lPTiwgYW5kIFZQQVRIIG11c3QgYmUgY29uc3RhbnQgZGVmaW5lZCIKICAjZW5kaWYKICAKICsjZGVmaW5lIExJQl9QWVRIT04gTElCICIvcHl0aG9uIiBWRVJTSU9OCiArCi0gI2lmbmRlZiBQWVRIT05QQVRICi0tI2RlZmluZSBQWVRIT05QQVRIIFBSRUZJWCAiL2xpYi9weXRob24iIFZFUlNJT04gIjoiIFwKLS0gICAgICAgICAgICAgIEVYRUNfUFJFRklYICIvbGliL3B5dGhvbiIgVkVSU0lPTiAiL2xpYi1keW5sb2FkIgorKyNpZm5kZWYgUFlUSE9OUEFUSAogKyNkZWZpbmUgUFlUSE9OUEFUSCBQUkVGSVggIi8iIExJQl9QWVRIT04gIjoiIFwKLSsgICAgICAgICAgICAgIEVYRUNfUFJFRklYICIvIiBMSUJfUFlUSE9OICIvbGliLWR5bmxvYWQiCi0gI2VuZGlmCi0gCisrICAgICAgICBFWEVDX1BSRUZJWCAiLyIgTElCX1BZVEhPTiAiL2xpYi1keW5sb2FkIgorKyNlbmRpZgorKwogICNpZm5kZWYgTEFORE1BUksKLUBAIC0xMjksNyArMTMxLDcgQEAgc3RhdGljIGNoYXIgcHJlZml4W01BWFBBVEhMRU4rMV07CisgI2RlZmluZSBMQU5ETUFSSyAib3MucHkiCisgI2VuZGlmCitAQCAtMTA4LDcgKzExNSw3IEBAIHN0YXRpYyBjaGFyIHByZWZpeFtNQVhQQVRITEVOKzFdOwogIHN0YXRpYyBjaGFyIGV4ZWNfcHJlZml4W01BWFBBVEhMRU4rMV07CiAgc3RhdGljIGNoYXIgcHJvZ3BhdGhbTUFYUEFUSExFTisxXTsKICBzdGF0aWMgY2hhciAqbW9kdWxlX3NlYXJjaF9wYXRoID0gTlVMTDsKQEAgLTE4NiwxMCArMTg2LDEwIEBACiAgCiAgc3RhdGljIHZvaWQKICByZWR1Y2UoY2hhciAqZGlyKQotSW5kZXg6IFB5dGhvbi0yLjcuOS9QeXRob24vZ2V0cGxhdGZvcm0uYworSW5kZXg6IFB5dGhvbi0yLjcuMTIvUHl0aG9uL2dldHBsYXRmb3JtLmMKID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tLSBQeXRob24tMi43Ljkub3JpZy9QeXRob24vZ2V0cGxhdGZvcm0uYwotKysrIFB5dGhvbi0yLjcuOS9QeXRob24vZ2V0cGxhdGZvcm0uYworLS0tIFB5dGhvbi0yLjcuMTIub3JpZy9QeXRob24vZ2V0cGxhdGZvcm0uYworKysrIFB5dGhvbi0yLjcuMTIvUHl0aG9uL2dldHBsYXRmb3JtLmMKIEBAIC0xMCwzICsxMCwxMyBAQCBQeV9HZXRQbGF0Zm9ybSh2b2lkKQogIHsKICAJcmV0dXJuIFBMQVRGT1JNOwpAQCAtMjA0LDEwICsyMDQsMTAgQEAKICt7CiArCXJldHVybiBMSUI7CiArfQotSW5kZXg6IFB5dGhvbi0yLjcuOS9QeXRob24vc3lzbW9kdWxlLmMKK0luZGV4OiBQeXRob24tMi43LjEyL1B5dGhvbi9zeXNtb2R1bGUuYwogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0tIFB5dGhvbi0yLjcuOS5vcmlnL1B5dGhvbi9zeXNtb2R1bGUuYwotKysrIFB5dGhvbi0yLjcuOS9QeXRob24vc3lzbW9kdWxlLmMKKy0tLSBQeXRob24tMi43LjEyLm9yaWcvUHl0aG9uL3N5c21vZHVsZS5jCisrKysgUHl0aG9uLTIuNy4xMi9QeXRob24vc3lzbW9kdWxlLmMKIEBAIC0xNDM3LDYgKzE0MzcsOCBAQCBfUHlTeXNfSW5pdCh2b2lkKQogICAgICAgICAgICAgICAgICAgICAgICAgIFB5U3RyaW5nX0Zyb21TdHJpbmcoUHlfR2V0Q29weXJpZ2h0KCkpKTsKICAgICAgU0VUX1NZU19GUk9NX1NUUklORygicGxhdGZvcm0iLApAQCAtMjE3LDExICsyMTcsMTEgQEAKICAgICAgU0VUX1NZU19GUk9NX1NUUklORygiZXhlY3V0YWJsZSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgUHlTdHJpbmdfRnJvbVN0cmluZyhQeV9HZXRQcm9ncmFtRnVsbFBhdGgoKSkpOwogICAgICBTRVRfU1lTX0ZST01fU1RSSU5HKCJwcmVmaXgiLAotSW5kZXg6IFB5dGhvbi0yLjcuOS9jb25maWd1cmUuYWMKK0luZGV4OiBQeXRob24tMi43LjEyL2NvbmZpZ3VyZS5hYwogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0tIFB5dGhvbi0yLjcuOS5vcmlnL2NvbmZpZ3VyZS5hYwotKysrIFB5dGhvbi0yLjcuOS9jb25maWd1cmUuYWMKLUBAIC03MzYsNiArNzM2LDExIEBAIFN1bk9TKikKKy0tLSBQeXRob24tMi43LjEyLm9yaWcvY29uZmlndXJlLmFjCisrKysgUHl0aG9uLTIuNy4xMi9jb25maWd1cmUuYWMKK0BAIC03NTYsNiArNzU2LDExIEBAIFN1bk9TKikKICAgICAgOzsKICBlc2FjCiAgCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24tbmF0aXZlL25vaG9zdGxpYnMucGF0Y2ggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24tbmF0aXZlL25vaG9zdGxpYnMucGF0Y2gKaW5kZXggOGE0NTJlOS4uMDc4MDYwYiAxMDA2NDQKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLW5hdGl2ZS9ub2hvc3RsaWJzLnBhdGNoCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi1uYXRpdmUvbm9ob3N0bGlicy5wYXRjaApAQCAtMiw4ICsyLDggQEAKIAogMjAxNC8xMi8xNQogUmViYXNlZCBmb3IgcHl0aG9uLTIuNy45Ci1TaWduZWQtT2ZmLUJ5OiBOaXRpbiBBIEthbWJsZSA8bml0aW4uYS5rYW1ibGVAaW50ZWwuY29tPgotU2lnbmVkLU9mZi1CeTogQWxlamFuZHJvIEhlcm5hbmRleiA8YWxlamFuZHJvLmhlcm5hbmRlekBsaW51eC5pbnRlbC5jb20+CitTaWduZWQtb2ZmLWJ5OiBOaXRpbiBBIEthbWJsZSA8bml0aW4uYS5rYW1ibGVAaW50ZWwuY29tPgorU2lnbmVkLW9mZi1ieTogQWxlamFuZHJvIEhlcm5hbmRleiA8YWxlamFuZHJvLmhlcm5hbmRlekBsaW51eC5pbnRlbC5jb20+CiAKIEluZGV4OiBQeXRob24tMi43Ljkvc2V0dXAucHkKID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi1uYXRpdmVfMi43LjExLmJiIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLW5hdGl2ZV8yLjcuMTEuYmIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDRjMjA0YTQuLjAwMDAwMDAKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLW5hdGl2ZV8yLjcuMTEuYmIKKysrIC9kZXYvbnVsbApAQCAtMSw2MyArMCwwIEBACi1yZXF1aXJlIHB5dGhvbi5pbmMKLQotRVhUUkFOQVRJVkVQQVRIICs9ICJiemlwMi1uYXRpdmUiCi1ERVBFTkRTID0gIm9wZW5zc2wtbmF0aXZlIGJ6aXAyLXJlcGxhY2VtZW50LW5hdGl2ZSB6bGliLW5hdGl2ZSByZWFkbGluZS1uYXRpdmUgc3FsaXRlMy1uYXRpdmUiCi1QUiA9ICIke0lOQ19QUn0uMSIKLQotU1JDX1VSSSArPSAiXAotICAgICAgICAgICAgZmlsZTovLzA1LWVuYWJsZS1jdHlwZXMtY3Jvc3MtYnVpbGQucGF0Y2ggXAotICAgICAgICAgICAgZmlsZTovLzEwLWRpc3R1dGlscy1maXgtc3dpZy1wYXJhbWV0ZXIucGF0Y2ggXAotICAgICAgICAgICAgZmlsZTovLzExLWRpc3R1dGlscy1uZXZlci1tb2RpZnktc2hlYmFuZy1saW5lLnBhdGNoIFwKLSAgICAgICAgICAgIGZpbGU6Ly8xMi1kaXN0dXRpbHMtcHJlZml4LWlzLWluc2lkZS1zdGFnaW5nLWFyZWEucGF0Y2ggXAotICAgICAgICAgICAgZmlsZTovL2RlYnVnLnBhdGNoIFwKLSAgICAgICAgICAgIGZpbGU6Ly91bml4Y2NvbXBpbGVyLnBhdGNoIFwKLSAgICAgICAgICAgIGZpbGU6Ly9ub2hvc3RsaWJzLnBhdGNoIFwKLSAgICAgICAgICAgIGZpbGU6Ly9tdWx0aWxpYi5wYXRjaCBcCi0gICAgICAgICAgICBmaWxlOi8vYWRkLW1kNW1vZHVsZS1zdXBwb3J0LnBhdGNoIFwKLSAgICAgICAgICAgIGZpbGU6Ly9idWlsZGRpci5wYXRjaCBcCi0gICAgICAgICAgICBmaWxlOi8vcGFyYWxsZWwtbWFrZWluc3QtY3JlYXRlLWJpbmRpci5wYXRjaCBcCi0gICAgICAgICAgICBmaWxlOi8vcmV2ZXJ0X3VzZV9vZl9zeXNjb25maWdkYXRhLnBhdGNoIFwKLSAgICAgICAgICAgIGZpbGU6Ly9hdm9pZF9wYXJhbGxlbF9tYWtlX3JhY2VzX29uX3BnZW4ucGF0Y2ggXAotICAgICAgICAgICAiCi1TID0gIiR7V09SS0RJUn0vUHl0aG9uLSR7UFZ9IgotCi1GSUxFU0VYVFJBUEFUSFMgPS4gIiR7RklMRV9ESVJOQU1FfS8ke1BOfToiCi0KLWluaGVyaXQgbmF0aXZlCi0KLVJQUk9WSURFUyArPSAicHl0aG9uLWRpc3R1dGlscy1uYXRpdmUgcHl0aG9uLWNvbXByZXNzaW9uLW5hdGl2ZSBweXRob24tdGV4dHV0aWxzLW5hdGl2ZSBweXRob24tY29kZWNzLW5hdGl2ZSBweXRob24tY29yZS1uYXRpdmUgcHl0aG9uLXVuaXR0ZXN0LW5hdGl2ZSIKLQotRVhUUkFfT0VDT05GX2FwcGVuZCA9ICIgLS1iaW5kaXI9JHtiaW5kaXJ9LyR7UE59IgotCi1FWFRSQV9PRU1BS0UgPSAnXAotICBCVUlMRF9TWVM9IiIgXAotICBIT1NUX1NZUz0iIiBcCi0gIExJQkM9IiIgXAotICBTVEFHSU5HX0xJQkRJUj0ke1NUQUdJTkdfTElCRElSX05BVElWRX0gXAotICBTVEFHSU5HX0lOQ0RJUj0ke1NUQUdJTkdfSU5DRElSX05BVElWRX0gXAotJwotCi1kb19jb25maWd1cmVfYXBwZW5kKCkgewotCWF1dG9yZWNvbmYgLS12ZXJib3NlIC0taW5zdGFsbCAtLWZvcmNlIC0tZXhjbHVkZT1hdXRvcG9pbnQgLi4vUHl0aG9uLSR7UFZ9L01vZHVsZXMvX2N0eXBlcy9saWJmZmkKLX0KLQotZG9faW5zdGFsbCgpIHsKLQlvZV9ydW5tYWtlICdERVNURElSPSR7RH0nIGluc3RhbGwKLQlpbnN0YWxsIC1kICR7RH0ke2JpbmRpcn0vJHtQTn0KLQlpbnN0YWxsIC1tIDA3NTUgUGFyc2VyL3BnZW4gJHtEfSR7YmluZGlyfS8ke1BOfQotCi0JIyBNYWtlIHN1cmUgd2UgdXNlIC91c3IvYmluL2VudiBweXRob24KLQlmb3IgUFlUSFNDUklQVCBpbiBgZ3JlcCAtcklsICR7YmluZGlyfS8ke1BOfS9weXRob24gJHtEfSR7YmluZGlyfS8ke1BOfWA7IGRvCi0JCXNlZCAtaSAtZSAnMXN8XiMhLip8IyEvdXNyL2Jpbi9lbnYgcHl0aG9ufCcgJFBZVEhTQ1JJUFQKLQlkb25lCi0KLQkjIEFkZCBhIHN5bWxpbmsgdG8gdGhlIG5hdGl2ZSBQeXRob24gc28gdGhhdCBzY3JpcHRzIGNhbiBqdXN0IGludm9rZQotCSMgIm5hdGl2ZXB5dGhvbiIgYW5kIGdldCB0aGUgcmlnaHQgb25lIHdpdGhvdXQgbmVlZGluZyBhYnNvbHV0ZSBwYXRocwotCSMgKHRoZXNlIG9mdGVuIGVuZCB1cCB0b28gbG9uZyBmb3IgdGhlICMhIHBhcnNlciBpbiB0aGUga2VybmVsIGFzIHRoZQotCSMgYnVmZmVyIGlzIDEyOCBieXRlcyBsb25nKS4KLQlsbiAtcyBweXRob24tbmF0aXZlL3B5dGhvbiAke0R9JHtiaW5kaXJ9L25hdGl2ZXB5dGhvbgotCi0JIyBXZSBkb24ndCB3YW50IG1vZHVsZXMgaW4gfi8ubG9jYWwgYmVpbmcgdXNlZCBpbiBwcmVmZXJlbmNlIHRvIHRob3NlCi0JIyBpbnN0YWxsZWQgaW4gdGhlIG5hdGl2ZSBzeXNyb290LCBzbyBkaXNhYmxlIHVzZXIgc2l0ZSBzdXBwb3J0LgotCXNlZCAtaSAtZSAncyxeXChFTkFCTEVfVVNFUl9TSVRFID0gXCkuKixcMUZhbHNlLCcgJHtEfSR7bGliZGlyfS9weXRob24ke1BZVEhPTl9NQUpNSU59L3NpdGUucHkKLX0KZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi1uYXRpdmVfMi43LjEyLmJiIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLW5hdGl2ZV8yLjcuMTIuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGU4M2NiZAotLS0gL2Rldi9udWxsCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi1uYXRpdmVfMi43LjEyLmJiCkBAIC0wLDAgKzEsNjEgQEAKK3JlcXVpcmUgcHl0aG9uLmluYworCitFWFRSQU5BVElWRVBBVEggKz0gImJ6aXAyLW5hdGl2ZSIKK0RFUEVORFMgPSAib3BlbnNzbC1uYXRpdmUgYnppcDItcmVwbGFjZW1lbnQtbmF0aXZlIHpsaWItbmF0aXZlIHJlYWRsaW5lLW5hdGl2ZSBzcWxpdGUzLW5hdGl2ZSBleHBhdC1uYXRpdmUiCitQUiA9ICIke0lOQ19QUn0uMSIKKworU1JDX1VSSSArPSAiXAorICAgICAgICAgICAgZmlsZTovLzA1LWVuYWJsZS1jdHlwZXMtY3Jvc3MtYnVpbGQucGF0Y2ggXAorICAgICAgICAgICAgZmlsZTovLzEwLWRpc3R1dGlscy1maXgtc3dpZy1wYXJhbWV0ZXIucGF0Y2ggXAorICAgICAgICAgICAgZmlsZTovLzExLWRpc3R1dGlscy1uZXZlci1tb2RpZnktc2hlYmFuZy1saW5lLnBhdGNoIFwKKyAgICAgICAgICAgIGZpbGU6Ly8wMDAxLWRpc3R1dGlscy1zZXQtdGhlLXByZWZpeC10by1iZS1pbnNpZGUtc3RhZ2luZy1kaXJlY3QucGF0Y2ggXAorICAgICAgICAgICAgZmlsZTovL2RlYnVnLnBhdGNoIFwKKyAgICAgICAgICAgIGZpbGU6Ly91bml4Y2NvbXBpbGVyLnBhdGNoIFwKKyAgICAgICAgICAgIGZpbGU6Ly9ub2hvc3RsaWJzLnBhdGNoIFwKKyAgICAgICAgICAgIGZpbGU6Ly9tdWx0aWxpYi5wYXRjaCBcCisgICAgICAgICAgICBmaWxlOi8vYWRkLW1kNW1vZHVsZS1zdXBwb3J0LnBhdGNoIFwKKyAgICAgICAgICAgIGZpbGU6Ly9idWlsZGRpci5wYXRjaCBcCisgICAgICAgICAgICBmaWxlOi8vcGFyYWxsZWwtbWFrZWluc3QtY3JlYXRlLWJpbmRpci5wYXRjaCBcCisgICAgICAgICAgICBmaWxlOi8vcmV2ZXJ0X3VzZV9vZl9zeXNjb25maWdkYXRhLnBhdGNoIFwKKyAgICAgICAgICAgIgorCitTID0gIiR7V09SS0RJUn0vUHl0aG9uLSR7UFZ9IgorCitGSUxFU0VYVFJBUEFUSFMgPS4gIiR7RklMRV9ESVJOQU1FfS8ke1BOfToiCisKK2luaGVyaXQgbmF0aXZlCisKK1JQUk9WSURFUyArPSAicHl0aG9uLWRpc3R1dGlscy1uYXRpdmUgcHl0aG9uLWNvbXByZXNzaW9uLW5hdGl2ZSBweXRob24tdGV4dHV0aWxzLW5hdGl2ZSBweXRob24tY29kZWNzLW5hdGl2ZSBweXRob24tY29yZS1uYXRpdmUgcHl0aG9uLXVuaXR0ZXN0LW5hdGl2ZSIKKworRVhUUkFfT0VDT05GX2FwcGVuZCA9ICIgLS1iaW5kaXI9JHtiaW5kaXJ9LyR7UE59IC0td2l0aC1zeXN0ZW0tZXhwYXQ9JHtTVEFHSU5HX0RJUl9IT1NUfSIKKworRVhUUkFfT0VNQUtFID0gJ1wKKyAgTElCQz0iIiBcCisgIFNUQUdJTkdfTElCRElSPSR7U1RBR0lOR19MSUJESVJfTkFUSVZFfSBcCisgIFNUQUdJTkdfSU5DRElSPSR7U1RBR0lOR19JTkNESVJfTkFUSVZFfSBcCisnCisKK2RvX2NvbmZpZ3VyZV9hcHBlbmQoKSB7CisJYXV0b3JlY29uZiAtLXZlcmJvc2UgLS1pbnN0YWxsIC0tZm9yY2UgLS1leGNsdWRlPWF1dG9wb2ludCAuLi9QeXRob24tJHtQVn0vTW9kdWxlcy9fY3R5cGVzL2xpYmZmaQorfQorCitkb19pbnN0YWxsKCkgeworCW9lX3J1bm1ha2UgJ0RFU1RESVI9JHtEfScgaW5zdGFsbAorCWluc3RhbGwgLWQgJHtEfSR7YmluZGlyfS8ke1BOfQorCWluc3RhbGwgLW0gMDc1NSBQYXJzZXIvcGdlbiAke0R9JHtiaW5kaXJ9LyR7UE59CisKKwkjIE1ha2Ugc3VyZSB3ZSB1c2UgL3Vzci9iaW4vZW52IHB5dGhvbgorCWZvciBQWVRIU0NSSVBUIGluIGBncmVwIC1ySWwgJHtiaW5kaXJ9LyR7UE59L3B5dGhvbiAke0R9JHtiaW5kaXJ9LyR7UE59YDsgZG8KKwkJc2VkIC1pIC1lICcxc3xeIyEuKnwjIS91c3IvYmluL2VudiBweXRob258JyAkUFlUSFNDUklQVAorCWRvbmUKKworCSMgQWRkIGEgc3ltbGluayB0byB0aGUgbmF0aXZlIFB5dGhvbiBzbyB0aGF0IHNjcmlwdHMgY2FuIGp1c3QgaW52b2tlCisJIyAibmF0aXZlcHl0aG9uIiBhbmQgZ2V0IHRoZSByaWdodCBvbmUgd2l0aG91dCBuZWVkaW5nIGFic29sdXRlIHBhdGhzCisJIyAodGhlc2Ugb2Z0ZW4gZW5kIHVwIHRvbyBsb25nIGZvciB0aGUgIyEgcGFyc2VyIGluIHRoZSBrZXJuZWwgYXMgdGhlCisJIyBidWZmZXIgaXMgMTI4IGJ5dGVzIGxvbmcpLgorCWxuIC1zIHB5dGhvbi1uYXRpdmUvcHl0aG9uICR7RH0ke2JpbmRpcn0vbmF0aXZlcHl0aG9uCisKKwkjIFdlIGRvbid0IHdhbnQgbW9kdWxlcyBpbiB+Ly5sb2NhbCBiZWluZyB1c2VkIGluIHByZWZlcmVuY2UgdG8gdGhvc2UKKwkjIGluc3RhbGxlZCBpbiB0aGUgbmF0aXZlIHN5c3Jvb3QsIHNvIGRpc2FibGUgdXNlciBzaXRlIHN1cHBvcnQuCisJc2VkIC1pIC1lICdzLF5cKEVOQUJMRV9VU0VSX1NJVEUgPSBcKS4qLFwxRmFsc2UsJyAke0R9JHtsaWJkaXJ9L3B5dGhvbiR7UFlUSE9OX01BSk1JTn0vc2l0ZS5weQorfQpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLW5vc2VfMS4zLjcuYmIgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24tbm9zZV8xLjMuNy5iYgppbmRleCBlYzYxNThmLi4zNzU3ZjNhIDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24tbm9zZV8xLjMuNy5iYgorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24tbm9zZV8xLjMuNy5iYgpAQCAtNSw3ICs1LDcgQEAKIExJQ0VOU0UgPSAiTEdQTHYyLjEiCiBMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9sZ3BsLnR4dDttZDU9YTZmODllMjEwMGQ5YjZjZGZmY2VhNGYzOThlMzczNDMiCiAKLVNSQ19VUkkgPSAiaHR0cDovL3B5cGkucHl0aG9uLm9yZy9wYWNrYWdlcy9zb3VyY2Uvbi9ub3NlL25vc2UtJHtQVn0udGFyLmd6IgorU1JDX1VSSSA9ICJodHRwczovL2ZpbGVzLnB5dGhvbmhvc3RlZC5vcmcvcGFja2FnZXMvc291cmNlL24vbm9zZS9ub3NlLSR7UFZ9LnRhci5neiIKIAogU1JDX1VSSVttZDVzdW1dID0gIjRkM2FkMGZmMDdiNjEzNzNkMmNlZmM4OWM1ZDBiMjBiIgogU1JDX1VSSVtzaGEyNTZzdW1dID0gImYxYmZmZWY5Y2JjODI2MjhmNmU3ZDdiNDBkN2UyNTVhZWZhYTFhZGI2YTFiMWQyNmM2OWE4Yjc5ZTYyMDhhOTgiCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24tbnVtcHkvYWFyY2g2NC9fbnVtcHljb25maWcuaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi1udW1weS9hYXJjaDY0L19udW1weWNvbmZpZy5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxOTFlNWExLi4wMDAwMDAwCi0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi1udW1weS9hYXJjaDY0L19udW1weWNvbmZpZy5oCisrKyAvZGV2L251bGwKQEAgLTEsMzEgKzAsMCBAQAotI2RlZmluZSBOUFlfSEFWRV9FTkRJQU5fSCAxCi0jZGVmaW5lIE5QWV9TSVpFT0ZfU0hPUlQgU0laRU9GX1NIT1JUCi0jZGVmaW5lIE5QWV9TSVpFT0ZfSU5UIFNJWkVPRl9JTlQKLSNkZWZpbmUgTlBZX1NJWkVPRl9MT05HIFNJWkVPRl9MT05HCi0jZGVmaW5lIE5QWV9TSVpFT0ZfRkxPQVQgNAotI2RlZmluZSBOUFlfU0laRU9GX0NPTVBMRVhfRkxPQVQgOAotI2RlZmluZSBOUFlfU0laRU9GX0RPVUJMRSA4Ci0jZGVmaW5lIE5QWV9TSVpFT0ZfQ09NUExFWF9ET1VCTEUgMTYKLSNkZWZpbmUgTlBZX1NJWkVPRl9MT05HRE9VQkxFIDE2Ci0jZGVmaW5lIE5QWV9TSVpFT0ZfQ09NUExFWF9MT05HRE9VQkxFIDMyCi0jZGVmaW5lIE5QWV9TSVpFT0ZfUFlfSU5UUFRSX1QgOAotI2RlZmluZSBOUFlfU0laRU9GX1BZX0xPTkdfTE9ORyA4Ci0jZGVmaW5lIE5QWV9TSVpFT0ZfTE9OR0xPTkcgOAotI2RlZmluZSBOUFlfTk9fU01QIDAKLSNkZWZpbmUgTlBZX0hBVkVfREVDTF9JU05BTgotI2RlZmluZSBOUFlfSEFWRV9ERUNMX0lTSU5GCi0jZGVmaW5lIE5QWV9IQVZFX0RFQ0xfSVNGSU5JVEUKLSNkZWZpbmUgTlBZX0hBVkVfREVDTF9TSUdOQklUCi0jZGVmaW5lIE5QWV9VU0VfQzk5X0NPTVBMRVggMQotI2RlZmluZSBOUFlfSEFWRV9DT01QTEVYX0RPVUJMRSAxCi0jZGVmaW5lIE5QWV9IQVZFX0NPTVBMRVhfRkxPQVQgMQotI2RlZmluZSBOUFlfSEFWRV9DT01QTEVYX0xPTkdfRE9VQkxFIDEKLSNkZWZpbmUgTlBZX0VOQUJMRV9TRVBBUkFURV9DT01QSUxBVElPTiAxCi0jZGVmaW5lIE5QWV9VU0VfQzk5X0ZPUk1BVFMgMQotI2RlZmluZSBOUFlfVklTSUJJTElUWV9ISURERU4gX19hdHRyaWJ1dGVfXygodmlzaWJpbGl0eSgiaGlkZGVuIikpKQotI2RlZmluZSBOUFlfQUJJX1ZFUlNJT04gMHgwMTAwMDAwOQotI2RlZmluZSBOUFlfQVBJX1ZFUlNJT04gMHgwMDAwMDAwQQotCi0jaWZuZGVmIF9fU1REQ19GT1JNQVRfTUFDUk9TCi0jZGVmaW5lIF9fU1REQ19GT1JNQVRfTUFDUk9TIDEKLSNlbmRpZgpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLW51bXB5L2FkZC1nbGliYy1jaGVjay5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi1udW1weS9hZGQtZ2xpYmMtY2hlY2sucGF0Y2gKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDI5NzY4ZjMuLjAwMDAwMDAKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLW51bXB5L2FkZC1nbGliYy1jaGVjay5wYXRjaAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLURvbnQgcHVuaXNoIG11c2wgZm9yIGdsaWJjJ3MgdHJpZ25vbWV0ZXJpYyBmdW5jdGlvbnMgcHJvYmxlbXMKLWFkZGl0aW9uYWxseSBlbnN1cmUgdGhhdCBnbGliYyBzcGVjaWZpYyBtYWNyb3MgYXJlIG5vdCB1c2VkCi11bmNvbmRpdGlvbmFsbHkKLQotU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KLVVwc3RyZWFtLVN0YXR1czogUGVuZGluZwotSW5kZXg6IG51bXB5LTEuMTAuNC9udW1weS9jb3JlL3NyYy9wcml2YXRlL25weV9jb25maWcuaAotPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0tIG51bXB5LTEuMTAuNC5vcmlnL251bXB5L2NvcmUvc3JjL3ByaXZhdGUvbnB5X2NvbmZpZy5oCi0rKysgbnVtcHktMS4xMC40L251bXB5L2NvcmUvc3JjL3ByaXZhdGUvbnB5X2NvbmZpZy5oCi1AQCAtNzUsMTAgKzc1LDEyIEBACi0gCi0gI2lmIGRlZmluZWQoSEFWRV9GRUFUVVJFU19IKQotICNpbmNsdWRlIDxmZWF0dXJlcy5oPgotKyNpZmRlZiBfX0dMSUJDX18KLSAjZGVmaW5lIFRSSUdfT0sgX19HTElCQ19QUkVSRVEoMiwgMTYpCi0gI2Vsc2UKLSAjZGVmaW5lIFRSSUdfT0sgMAotICNlbmRpZgotKyNlbmRpZgotIAotICNpZiAhVFJJR19PSwotICN1bmRlZiBIQVZFX0NBU0lOCi1JbmRleDogbnVtcHktMS4xMC40L251bXB5L2NvcmUvc3JjL25weW1hdGgvaWVlZTc1NC5jLnNyYwotPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0tIG51bXB5LTEuMTAuNC5vcmlnL251bXB5L2NvcmUvc3JjL25weW1hdGgvaWVlZTc1NC5jLnNyYwotKysrIG51bXB5LTEuMTAuNC9udW1weS9jb3JlL3NyYy9ucHltYXRoL2llZWU3NTQuYy5zcmMKLUBAIC02MTIsNyArNjEyLDcgQEAgdm9pZCBucHlfc2V0X2Zsb2F0c3RhdHVzX2ludmFsaWQodm9pZCkKLSB9Ci0gCi0gCi0tI2VsaWYgZGVmaW5lZChfX0dMSUJDX18pIHx8IGRlZmluZWQoX19BUFBMRV9fKSB8fCBcCi0rI2VsaWYgZGVmaW5lZChfX2xpbnV4X18pIHx8IGRlZmluZWQoX19BUFBMRV9fKSB8fCBcCi0gICAgICAgZGVmaW5lZChfX0NZR1dJTl9fKSB8fCBkZWZpbmVkKF9fTUlOR1czMl9fKSB8fCBcCi0gICAgICAgKGRlZmluZWQoX19GcmVlQlNEX18pICYmIChfX0ZyZWVCU0RfdmVyc2lvbiA+PSA1MDIxMTQpKQotICMgIGluY2x1ZGUgPGZlbnYuaD4KZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi1udW1weS9taXBzL19udW1weWNvbmZpZy5oIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLW51bXB5L21pcHMvX251bXB5Y29uZmlnLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDA1ZDJiOGIuLjAwMDAwMDAKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLW51bXB5L21pcHMvX251bXB5Y29uZmlnLmgKKysrIC9kZXYvbnVsbApAQCAtMSwzMSArMCwwIEBACi0jZGVmaW5lIE5QWV9IQVZFX0VORElBTl9IIDEKLSNkZWZpbmUgTlBZX1NJWkVPRl9TSE9SVCBTSVpFT0ZfU0hPUlQKLSNkZWZpbmUgTlBZX1NJWkVPRl9JTlQgU0laRU9GX0lOVAotI2RlZmluZSBOUFlfU0laRU9GX0xPTkcgU0laRU9GX0xPTkcKLSNkZWZpbmUgTlBZX1NJWkVPRl9GTE9BVCA0Ci0jZGVmaW5lIE5QWV9TSVpFT0ZfQ09NUExFWF9GTE9BVCA4Ci0jZGVmaW5lIE5QWV9TSVpFT0ZfRE9VQkxFIDgKLSNkZWZpbmUgTlBZX1NJWkVPRl9DT01QTEVYX0RPVUJMRSAxNgotI2RlZmluZSBOUFlfU0laRU9GX0xPTkdET1VCTEUgOAotI2RlZmluZSBOUFlfU0laRU9GX0NPTVBMRVhfTE9OR0RPVUJMRSAxNgotI2RlZmluZSBOUFlfRU5BQkxFX1NFUEFSQVRFX0NPTVBJTEFUSU9OIDEKLSNkZWZpbmUgTlBZX1NJWkVPRl9QWV9JTlRQVFJfVCA0Ci0jZGVmaW5lIE5QWV9TSVpFT0ZfUFlfTE9OR19MT05HIDgKLSNkZWZpbmUgTlBZX1NJWkVPRl9MT05HTE9ORyA4Ci0jZGVmaW5lIE5QWV9OT19TTVAgMAotI2RlZmluZSBOUFlfSEFWRV9ERUNMX0lTTkFOCi0jZGVmaW5lIE5QWV9IQVZFX0RFQ0xfSVNJTkYKLSNkZWZpbmUgTlBZX0hBVkVfREVDTF9JU0ZJTklURQotI2RlZmluZSBOUFlfSEFWRV9ERUNMX1NJR05CSVQKLSNkZWZpbmUgTlBZX1VTRV9DOTlfQ09NUExFWCAxCi0jZGVmaW5lIE5QWV9IQVZFX0NPTVBMRVhfRE9VQkxFIDEKLSNkZWZpbmUgTlBZX0hBVkVfQ09NUExFWF9GTE9BVCAxCi0jZGVmaW5lIE5QWV9IQVZFX0NPTVBMRVhfTE9OR19ET1VCTEUgMQotI2RlZmluZSBOUFlfVVNFX0M5OV9GT1JNQVRTIDEKLSNkZWZpbmUgTlBZX1ZJU0lCSUxJVFlfSElEREVOIF9fYXR0cmlidXRlX18oKHZpc2liaWxpdHkoImhpZGRlbiIpKSkKLSNkZWZpbmUgTlBZX0FCSV9WRVJTSU9OIDB4MDEwMDAwMDkKLSNkZWZpbmUgTlBZX0FQSV9WRVJTSU9OIDB4MDAwMDAwMEEKLQotI2lmbmRlZiBfX1NURENfRk9STUFUX01BQ1JPUwotI2RlZmluZSBfX1NURENfRk9STUFUX01BQ1JPUyAxCi0jZW5kaWYKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi1udW1weS9taXBzNjQvX251bXB5Y29uZmlnLmggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24tbnVtcHkvbWlwczY0L19udW1weWNvbmZpZy5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4ZTJiNWQwLi4wMDAwMDAwCi0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi1udW1weS9taXBzNjQvX251bXB5Y29uZmlnLmgKKysrIC9kZXYvbnVsbApAQCAtMSwzMSArMCwwIEBACi0jZGVmaW5lIE5QWV9IQVZFX0VORElBTl9IIDEKLSNkZWZpbmUgTlBZX1NJWkVPRl9TSE9SVCBTSVpFT0ZfU0hPUlQKLSNkZWZpbmUgTlBZX1NJWkVPRl9JTlQgU0laRU9GX0lOVAotI2RlZmluZSBOUFlfU0laRU9GX0xPTkcgU0laRU9GX0xPTkcKLSNkZWZpbmUgTlBZX1NJWkVPRl9GTE9BVCA0Ci0jZGVmaW5lIE5QWV9TSVpFT0ZfQ09NUExFWF9GTE9BVCA4Ci0jZGVmaW5lIE5QWV9TSVpFT0ZfRE9VQkxFIDgKLSNkZWZpbmUgTlBZX1NJWkVPRl9DT01QTEVYX0RPVUJMRSAxNgotI2RlZmluZSBOUFlfU0laRU9GX0xPTkdET1VCTEUgMTYKLSNkZWZpbmUgTlBZX1NJWkVPRl9DT01QTEVYX0xPTkdET1VCTEUgMzIKLSNkZWZpbmUgTlBZX0VOQUJMRV9TRVBBUkFURV9DT01QSUxBVElPTiAxCi0jZGVmaW5lIE5QWV9TSVpFT0ZfUFlfSU5UUFRSX1QgOAotI2RlZmluZSBOUFlfU0laRU9GX1BZX0xPTkdfTE9ORyA4Ci0jZGVmaW5lIE5QWV9TSVpFT0ZfTE9OR0xPTkcgOAotI2RlZmluZSBOUFlfTk9fU01QIDAKLSNkZWZpbmUgTlBZX0hBVkVfREVDTF9JU05BTgotI2RlZmluZSBOUFlfSEFWRV9ERUNMX0lTSU5GCi0jZGVmaW5lIE5QWV9IQVZFX0RFQ0xfSVNGSU5JVEUKLSNkZWZpbmUgTlBZX0hBVkVfREVDTF9TSUdOQklUCi0jZGVmaW5lIE5QWV9VU0VfQzk5X0NPTVBMRVggMQotI2RlZmluZSBOUFlfSEFWRV9DT01QTEVYX0RPVUJMRSAxCi0jZGVmaW5lIE5QWV9IQVZFX0NPTVBMRVhfRkxPQVQgMQotI2RlZmluZSBOUFlfSEFWRV9DT01QTEVYX0xPTkdfRE9VQkxFIDEKLSNkZWZpbmUgTlBZX1VTRV9DOTlfRk9STUFUUyAxCi0jZGVmaW5lIE5QWV9WSVNJQklMSVRZX0hJRERFTiBfX2F0dHJpYnV0ZV9fKCh2aXNpYmlsaXR5KCJoaWRkZW4iKSkpCi0jZGVmaW5lIE5QWV9BQklfVkVSU0lPTiAweDAxMDAwMDA5Ci0jZGVmaW5lIE5QWV9BUElfVkVSU0lPTiAweDAwMDAwMDBBCi0KLSNpZm5kZWYgX19TVERDX0ZPUk1BVF9NQUNST1MKLSNkZWZpbmUgX19TVERDX0ZPUk1BVF9NQUNST1MgMQotI2VuZGlmCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24tbnVtcHkvbWlwc2VsL251bXB5Y29uZmlnLmggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24tbnVtcHkvbWlwc2VsL251bXB5Y29uZmlnLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGM0YmY2NTQuLjAwMDAwMDAKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLW51bXB5L21pcHNlbC9udW1weWNvbmZpZy5oCisrKyAvZGV2L251bGwKQEAgLTEsMTcgKzAsMCBAQAotLyogY2F0IC4vc3JjLmxpbnV4LWk2ODYtMi41L251bXB5L2NvcmUvaW5jbHVkZS9udW1weS9udW1weWNvbmZpZy5oICovCi0vKgotICogICogVGhpcyBmaWxlIGlzIGdlbmVyYXRlZCBieSBudW1weS9jb3JlL3NldHVwLnB5Yy4gRE8gTk9UIEVESVQgCi0gKiAgICovCi0jZGVmaW5lIE5QWV9TSVpFT0ZfU0hPUlQgMiAKLSNkZWZpbmUgTlBZX1NJWkVPRl9JTlQgNCAKLSNkZWZpbmUgTlBZX1NJWkVPRl9MT05HIDQgCi0jZGVmaW5lIE5QWV9TSVpFT0ZfRkxPQVQgNCAKLSNkZWZpbmUgTlBZX1NJWkVPRl9ET1VCTEUgOCAKLSNkZWZpbmUgTlBZX1NJWkVPRl9MT05HRE9VQkxFIDEyIAotI2RlZmluZSBOUFlfU0laRU9GX1BZX0lOVFBUUl9UIDQgCi0jZGVmaW5lIE5QWV9OT19TTVAgMAotCi0jZGVmaW5lIE5QWV9TSVpFT0ZfTE9OR0xPTkcgOCAKLSNkZWZpbmUgTlBZX1NJWkVPRl9QWV9MT05HX0xPTkcgOCAKLS8qICNkZWZpbmUgQ0hBUl9CSVQgOCAqLwotCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24tbnVtcHkvcG93ZXJwYy9fbnVtcHljb25maWcuaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi1udW1weS9wb3dlcnBjL19udW1weWNvbmZpZy5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwZjQ1ZDViLi4wMDAwMDAwCi0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi1udW1weS9wb3dlcnBjL19udW1weWNvbmZpZy5oCisrKyAvZGV2L251bGwKQEAgLTEsMzEgKzAsMCBAQAotI2RlZmluZSBOUFlfSEFWRV9FTkRJQU5fSCAxCi0jZGVmaW5lIE5QWV9TSVpFT0ZfU0hPUlQgU0laRU9GX1NIT1JUCi0jZGVmaW5lIE5QWV9TSVpFT0ZfSU5UIFNJWkVPRl9JTlQKLSNkZWZpbmUgTlBZX1NJWkVPRl9MT05HIFNJWkVPRl9MT05HCi0jZGVmaW5lIE5QWV9TSVpFT0ZfRkxPQVQgNAotI2RlZmluZSBOUFlfU0laRU9GX0NPTVBMRVhfRkxPQVQgOAotI2RlZmluZSBOUFlfU0laRU9GX0RPVUJMRSA4Ci0jZGVmaW5lIE5QWV9TSVpFT0ZfQ09NUExFWF9ET1VCTEUgMTYKLSNkZWZpbmUgTlBZX1NJWkVPRl9MT05HRE9VQkxFIDE2Ci0jZGVmaW5lIE5QWV9TSVpFT0ZfQ09NUExFWF9MT05HRE9VQkxFIDMyCi0jZGVmaW5lIE5QWV9FTkFCTEVfU0VQQVJBVEVfQ09NUElMQVRJT04gMQotI2RlZmluZSBOUFlfU0laRU9GX1BZX0lOVFBUUl9UIDQKLSNkZWZpbmUgTlBZX1NJWkVPRl9QWV9MT05HX0xPTkcgOAotI2RlZmluZSBOUFlfU0laRU9GX0xPTkdMT05HIDgKLSNkZWZpbmUgTlBZX05PX1NNUCAwCi0jZGVmaW5lIE5QWV9IQVZFX0RFQ0xfSVNOQU4KLSNkZWZpbmUgTlBZX0hBVkVfREVDTF9JU0lORgotI2RlZmluZSBOUFlfSEFWRV9ERUNMX0lTRklOSVRFCi0jZGVmaW5lIE5QWV9IQVZFX0RFQ0xfU0lHTkJJVAotI2RlZmluZSBOUFlfVVNFX0M5OV9DT01QTEVYIDEKLSNkZWZpbmUgTlBZX0hBVkVfQ09NUExFWF9ET1VCTEUgMQotI2RlZmluZSBOUFlfSEFWRV9DT01QTEVYX0ZMT0FUIDEKLSNkZWZpbmUgTlBZX0hBVkVfQ09NUExFWF9MT05HX0RPVUJMRSAxCi0jZGVmaW5lIE5QWV9VU0VfQzk5X0ZPUk1BVFMgMQotI2RlZmluZSBOUFlfVklTSUJJTElUWV9ISURERU4gX19hdHRyaWJ1dGVfXygodmlzaWJpbGl0eSgiaGlkZGVuIikpKQotI2RlZmluZSBOUFlfQUJJX1ZFUlNJT04gMHgwMTAwMDAwOQotI2RlZmluZSBOUFlfQVBJX1ZFUlNJT04gMHgwMDAwMDAwQQotCi0jaWZuZGVmIF9fU1REQ19GT1JNQVRfTUFDUk9TCi0jZGVmaW5lIF9fU1REQ19GT1JNQVRfTUFDUk9TIDEKLSNlbmRpZgpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLW51bXB5L3Bvd2VycGM2NC9fbnVtcHljb25maWcuaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi1udW1weS9wb3dlcnBjNjQvX251bXB5Y29uZmlnLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDhlMmI1ZDAuLjAwMDAwMDAKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLW51bXB5L3Bvd2VycGM2NC9fbnVtcHljb25maWcuaAorKysgL2Rldi9udWxsCkBAIC0xLDMxICswLDAgQEAKLSNkZWZpbmUgTlBZX0hBVkVfRU5ESUFOX0ggMQotI2RlZmluZSBOUFlfU0laRU9GX1NIT1JUIFNJWkVPRl9TSE9SVAotI2RlZmluZSBOUFlfU0laRU9GX0lOVCBTSVpFT0ZfSU5UCi0jZGVmaW5lIE5QWV9TSVpFT0ZfTE9ORyBTSVpFT0ZfTE9ORwotI2RlZmluZSBOUFlfU0laRU9GX0ZMT0FUIDQKLSNkZWZpbmUgTlBZX1NJWkVPRl9DT01QTEVYX0ZMT0FUIDgKLSNkZWZpbmUgTlBZX1NJWkVPRl9ET1VCTEUgOAotI2RlZmluZSBOUFlfU0laRU9GX0NPTVBMRVhfRE9VQkxFIDE2Ci0jZGVmaW5lIE5QWV9TSVpFT0ZfTE9OR0RPVUJMRSAxNgotI2RlZmluZSBOUFlfU0laRU9GX0NPTVBMRVhfTE9OR0RPVUJMRSAzMgotI2RlZmluZSBOUFlfRU5BQkxFX1NFUEFSQVRFX0NPTVBJTEFUSU9OIDEKLSNkZWZpbmUgTlBZX1NJWkVPRl9QWV9JTlRQVFJfVCA4Ci0jZGVmaW5lIE5QWV9TSVpFT0ZfUFlfTE9OR19MT05HIDgKLSNkZWZpbmUgTlBZX1NJWkVPRl9MT05HTE9ORyA4Ci0jZGVmaW5lIE5QWV9OT19TTVAgMAotI2RlZmluZSBOUFlfSEFWRV9ERUNMX0lTTkFOCi0jZGVmaW5lIE5QWV9IQVZFX0RFQ0xfSVNJTkYKLSNkZWZpbmUgTlBZX0hBVkVfREVDTF9JU0ZJTklURQotI2RlZmluZSBOUFlfSEFWRV9ERUNMX1NJR05CSVQKLSNkZWZpbmUgTlBZX1VTRV9DOTlfQ09NUExFWCAxCi0jZGVmaW5lIE5QWV9IQVZFX0NPTVBMRVhfRE9VQkxFIDEKLSNkZWZpbmUgTlBZX0hBVkVfQ09NUExFWF9GTE9BVCAxCi0jZGVmaW5lIE5QWV9IQVZFX0NPTVBMRVhfTE9OR19ET1VCTEUgMQotI2RlZmluZSBOUFlfVVNFX0M5OV9GT1JNQVRTIDEKLSNkZWZpbmUgTlBZX1ZJU0lCSUxJVFlfSElEREVOIF9fYXR0cmlidXRlX18oKHZpc2liaWxpdHkoImhpZGRlbiIpKSkKLSNkZWZpbmUgTlBZX0FCSV9WRVJTSU9OIDB4MDEwMDAwMDkKLSNkZWZpbmUgTlBZX0FQSV9WRVJTSU9OIDB4MDAwMDAwMEEKLQotI2lmbmRlZiBfX1NURENfRk9STUFUX01BQ1JPUwotI2RlZmluZSBfX1NURENfRk9STUFUX01BQ1JPUyAxCi0jZW5kaWYKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi1udW1weV8xLjEwLjQuYmIgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24tbnVtcHlfMS4xMC40LmJiCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4YTU2MmRjLi4wMDAwMDAwCi0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi1udW1weV8xLjEwLjQuYmIKKysrIC9kZXYvbnVsbApAQCAtMSwxMDIgKzAsMCBAQAotU1VNTUFSWSA9ICJBIHNvcGhpc3RpY2F0ZWQgTnVtZXJpYyBQcm9jZXNzaW5nIFBhY2thZ2UgZm9yIFB5dGhvbiIKLVNFQ1RJT04gPSAiZGV2ZWwvcHl0aG9uIgotTElDRU5TRSA9ICJQU0YiCi1MSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9MSUNFTlNFLnR4dDttZDU9OWY0ZTg4YjU3NDhlODMxM2NhYWYzM2QwODFjZTY1YTMiCi0KLVNSQ19VUkkgPSAiJHtTT1VSQ0VGT1JHRV9NSVJST1J9L251bXB5L251bXB5LSR7UFZ9LnRhci5neiBcCi0gICAgICAgICAgIGZpbGU6Ly8wMDAxLURvbi10LXNlYXJjaC11c3ItYW5kLXNvLW9uLWZvci1saWJyYXJpZXMtYnktZGVmYXVsdC0ucGF0Y2ggXAotICAgICAgICAgICBmaWxlOi8vcmVtb3ZlLWJ1aWxkLXBhdGgtaW4tY29tbWVudHMucGF0Y2ggXAotICAgICAgICAgICBmaWxlOi8vYWRkLWdsaWJjLWNoZWNrLnBhdGNoIFwKLSAgICAgICAgICAgJHtDT05GSUdGSUxFU1VSSX0gIgotCi1DT05GSUdGSUxFU1VSSSA/PSAiIgotCi1DT05GSUdGSUxFU1VSSV9hYXJjaDY0ID0gIiBcCi0gICAgZmlsZTovL2NvbmZpZy5oIFwKLSAgICBmaWxlOi8vX251bXB5Y29uZmlnLmggXAotIgotQ09ORklHRklMRVNVUklfYXJtID0gIiBcCi0gICAgZmlsZTovL2NvbmZpZy5oIFwKLSAgICBmaWxlOi8vbnVtcHljb25maWcuaCBcCi0iCi1DT05GSUdGSUxFU1VSSV9hcm1lYiA9ICIgXAotICAgIGZpbGU6Ly9jb25maWcuaCBcCi0gICAgZmlsZTovL251bXB5Y29uZmlnLmggXAotIgotQ09ORklHRklMRVNVUklfbWlwc2VsID0gIiBcCi0gICAgZmlsZTovL2NvbmZpZy5oIFwKLSAgICBmaWxlOi8vbnVtcHljb25maWcuaCBcCi0iCi1DT05GSUdGSUxFU1VSSV94ODYgPSAiIFwKLSAgICBmaWxlOi8vY29uZmlnLmggXAotICAgIGZpbGU6Ly9udW1weWNvbmZpZy5oIFwKLSIKLUNPTkZJR0ZJTEVTVVJJX3g4Ni02NCA9ICIgXAotICAgIGZpbGU6Ly9jb25maWcuaCBcCi0gICAgZmlsZTovL19udW1weWNvbmZpZy5oIFwKLSIKLUNPTkZJR0ZJTEVTVVJJX21pcHMgPSAiIFwKLSAgICBmaWxlOi8vY29uZmlnLmggXAotICAgIGZpbGU6Ly9fbnVtcHljb25maWcuaCBcCi0iCi1DT05GSUdGSUxFU1VSSV9wb3dlcnBjID0gIiBcCi0gICAgZmlsZTovL2NvbmZpZy5oIFwKLSAgICBmaWxlOi8vX251bXB5Y29uZmlnLmggXAotIgotQ09ORklHRklMRVNVUklfcG93ZXJwYzY0ID0gIiBcCi0gICAgZmlsZTovL2NvbmZpZy5oIFwKLSAgICBmaWxlOi8vX251bXB5Y29uZmlnLmggXAotIgotQ09ORklHRklMRVNVUklfbWlwczY0ID0gIiBcCi0gICAgZmlsZTovL2NvbmZpZy5oIFwKLSAgICBmaWxlOi8vX251bXB5Y29uZmlnLmggXAotIgotQ09ORklHRklMRVNVUklfbWlwczY0bjMyID0gIiBcCi0gICAgZmlsZTovL2NvbmZpZy5oIFwKLSAgICBmaWxlOi8vX251bXB5Y29uZmlnLmggXAotIgotCi1TID0gIiR7V09SS0RJUn0vbnVtcHktJHtQVn0iCi0KLWluaGVyaXQgZGlzdHV0aWxzCi0KLSMgTWFrZSB0aGUgYnVpbGQgZmFpbCBhbmQgcmVwbGFjZSAqY29uZmlnLmggd2l0aCBwcm9wZXIgb25lCi0jIFRoaXMgaXMgYSB1Z2x5LCB1Z2x5IGhhY2sgLSBLb2VuCi1kb19jb21waWxlX3ByZXBlbmRfY2xhc3MtdGFyZ2V0KCkgewotICAgIEJVSUxEX1NZUz0ke0JVSUxEX1NZU30gSE9TVF9TWVM9JHtIT1NUX1NZU30gXAotICAgICR7U1RBR0lOR19CSU5ESVJfTkFUSVZFfS9weXRob24tbmF0aXZlL3B5dGhvbiBzZXR1cC5weSBidWlsZCAke0RJU1RVVElMU19CVUlMRF9BUkdTfSB8fCBcCi0gICAgdHJ1ZQotICAgIGNwICR7V09SS0RJUn0vKmNvbmZpZy5oICR7U30vYnVpbGQvJChscyAke1N9L2J1aWxkIHwgZ3JlcCBzcmMpL251bXB5L2NvcmUvaW5jbHVkZS9udW1weS8KLX0KLQotRklMRVNfJHtQTn0tc3RhdGljZGV2ICs9ICIke1BZVEhPTl9TSVRFUEFDS0FHRVNfRElSfS9udW1weS9jb3JlL2xpYi8qLmEiCi0KLVNSQ19VUklbbWQ1c3VtXSA9ICI5MGJiOTAzNDY1MmNlZmJhZGExOWNmN2QxNDFhNmE2MSIKLVNSQ19VUklbc2hhMjU2c3VtXSA9ICJmN2Y5MTg0MjA1NmE3Y2Y2ODBiMGVhZjhjZWZjNWU0NmM2OWUyNTIxZTY1MTEyOGQyZTZhYWFjY2VjODY1MmFlIgotCi0jIGluc3RhbGwgd2hhdCBpcyBuZWVkZWQgZm9yIG51bXB5LnRlc3QoKQotUkRFUEVORFNfJHtQTn0gPSAicHl0aG9uLXVuaXR0ZXN0IFwKLSAgICAgICAgICAgICAgICAgIHB5dGhvbi1kaWZmbGliIFwKLSAgICAgICAgICAgICAgICAgIHB5dGhvbi1wcHJpbnQgXAotICAgICAgICAgICAgICAgICAgcHl0aG9uLXBpY2tsZSBcCi0gICAgICAgICAgICAgICAgICBweXRob24tc2hlbGwgXAotICAgICAgICAgICAgICAgICAgcHl0aG9uLW5vc2UgXAotICAgICAgICAgICAgICAgICAgcHl0aG9uLWRvY3Rlc3QgXAotICAgICAgICAgICAgICAgICAgcHl0aG9uLWRhdGV0aW1lIFwKLSAgICAgICAgICAgICAgICAgIHB5dGhvbi1kaXN0dXRpbHMgXAotICAgICAgICAgICAgICAgICAgcHl0aG9uLW1pc2MgXAotICAgICAgICAgICAgICAgICAgcHl0aG9uLW1tYXAgXAotICAgICAgICAgICAgICAgICAgcHl0aG9uLW5ldGNsaWVudCBcCi0gICAgICAgICAgICAgICAgICBweXRob24tbnVtYmVycyBcCi0gICAgICAgICAgICAgICAgICBweXRob24tcHlkb2MgXAotICAgICAgICAgICAgICAgICAgcHl0aG9uLXBrZ3V0aWwgXAotICAgICAgICAgICAgICAgICAgcHl0aG9uLWVtYWlsIFwKLSAgICAgICAgICAgICAgICAgIHB5dGhvbi1zdWJwcm9jZXNzIFwKLSAgICAgICAgICAgICAgICAgIHB5dGhvbi1jb21wcmVzc2lvbiBcCi0gICAgICAgICAgICAgICAgICBweXRob24tY3R5cGVzIFwKLSAgICAgICAgICAgICAgICAgIHB5dGhvbi10aHJlYWRpbmcgXAotIgotCi1SREVQRU5EU18ke1BOfV9jbGFzcy1uYXRpdmUgPSAiIgotCi1CQkNMQVNTRVhURU5EID0gIm5hdGl2ZSBuYXRpdmVzZGsiCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24tcGV4cGVjdF80LjAuMS5iYiBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi1wZXhwZWN0XzQuMC4xLmJiCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3ZjE0MmEzLi4wMDAwMDAwCi0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi1wZXhwZWN0XzQuMC4xLmJiCisrKyAvZGV2L251bGwKQEAgLTEsMjUgKzAsMCBAQAotU1VNTUFSWSA9ICJBIFB1cmUgUHl0aG9uIEV4cGVjdCBsaWtlIE1vZHVsZSBmb3IgUHl0aG9uIgotSE9NRVBBR0UgPSAiaHR0cDovL3BleHBlY3QucmVhZHRoZWRvY3Mub3JnLyIKLVNFQ1RJT04gPSAiZGV2ZWwvcHl0aG9uIgotTElDRU5TRSA9ICJJU0MiCi1MSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9MSUNFTlNFO21kNT02NmMyMzc4YTk2YjMwN2Q1NmJmYjNhOWU1OGVkYWZhOCIKLQotU1JDX1VSSSA9ICJodHRwczovL3B5cGkucHl0aG9uLm9yZy9wYWNrYWdlcy9zb3VyY2UvcC9wZXhwZWN0L3BleHBlY3QtJHtQVn0udGFyLmd6IgotU1JDX1VSSVttZDVzdW1dID0gIjA1NmRmODFlNmNhNzA4MWYxMDE1YjRiMTQ3Yjk3N2I3IgotU1JDX1VSSVtzaGEyNTZzdW1dID0gIjIzMjc5NWViY2FhZjJlMTIwMzk2ZGJiYWEzYTEyOWVkYTUxNzU3ZWVhYWUxOTExNTU4ZjRlZjhlZTQxNGZjNmMiCi0KLVVQU1RSRUFNX0NIRUNLX1VSSSA9ICJodHRwczovL3B5cGkucHl0aG9uLm9yZy9weXBpL3BleHBlY3QiCi0KLVMgPSAiJHtXT1JLRElSfS9wZXhwZWN0LSR7UFZ9IgotCi1pbmhlcml0IGRpc3R1dGlscwotCi1SREVQRU5EU18ke1BOfSA9ICJcCi0gICAgcHl0aG9uLWNvcmUgXAotICAgIHB5dGhvbi1pbyBcCi0gICAgcHl0aG9uLXRlcm1pbmFsIFwKLSAgICBweXRob24tcmVzb3VyY2UgXAotICAgIHB5dGhvbi1mY250bCBcCi0iCi0KLUJCQ0xBU1NFWFRFTkQgPSAibmF0aXZlc2RrIgpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLXBleHBlY3RfNC4yLjAuYmIgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24tcGV4cGVjdF80LjIuMC5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MmUwZmE4Ci0tLSAvZGV2L251bGwKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLXBleHBlY3RfNC4yLjAuYmIKQEAgLTAsMCArMSwyOCBAQAorU1VNTUFSWSA9ICJBIFB1cmUgUHl0aG9uIEV4cGVjdCBsaWtlIE1vZHVsZSBmb3IgUHl0aG9uIgorSE9NRVBBR0UgPSAiaHR0cDovL3BleHBlY3QucmVhZHRoZWRvY3Mub3JnLyIKK1NFQ1RJT04gPSAiZGV2ZWwvcHl0aG9uIgorTElDRU5TRSA9ICJJU0MiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9MSUNFTlNFO21kNT0xYzdhNzI1MjUxODgwYWY4YzZhMTQ4MTgxNjY1Mzg1YiIKKworU1JDTkFNRSA9ICJwZXhwZWN0IgorCitTUkNfVVJJID0gImh0dHBzOi8vZmlsZXMucHl0aG9uaG9zdGVkLm9yZy9wYWNrYWdlcy9zb3VyY2UvcC8ke1NSQ05BTUV9LyR7U1JDTkFNRX0tJHtQVn0udGFyLmd6IgorU1JDX1VSSVttZDVzdW1dID0gIjgwNzFlYzVkZjBmM2Q1MTVkYWVkYWZhZDY3MmQxNjMyIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gImJmNjgxNmI4Y2M4ZDMwMWE0OTllN2FkZjMzODgyOGIzOWJjNzU0OGViNjRkYmVkNGRkNDEwZWQ5M2Q5NWY4NTMiCisKK1VQU1RSRUFNX0NIRUNLX1VSSSA9ICJodHRwczovL3B5cGkucHl0aG9uLm9yZy9weXBpL3BleHBlY3QiCisKK1MgPSAiJHtXT1JLRElSfS9wZXhwZWN0LSR7UFZ9IgorCitpbmhlcml0IHNldHVwdG9vbHMKKworUkRFUEVORFNfJHtQTn0gPSAiXAorICAgIHB5dGhvbi1jb3JlIFwKKyAgICBweXRob24taW8gXAorICAgIHB5dGhvbi10ZXJtaW5hbCBcCisgICAgcHl0aG9uLXJlc291cmNlIFwKKyAgICBweXRob24tZmNudGwgXAorICAgIHB5dGhvbi1wdHlwcm9jZXNzIFwKKyIKKworQkJDTEFTU0VYVEVORCA9ICJuYXRpdmVzZGsiCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24tcHR5cHJvY2Vzc18wLjUuMS5iYiBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi1wdHlwcm9jZXNzXzAuNS4xLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkzMWU1YTcKLS0tIC9kZXYvbnVsbAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24tcHR5cHJvY2Vzc18wLjUuMS5iYgpAQCAtMCwwICsxLDIzIEBACitTVU1NQVJZID0gIlJ1biBhIHN1YnByb2Nlc3MgaW4gYSBwc2V1ZG8gdGVybWluYWwiCitIT01FUEFHRSA9ICJodHRwOi8vcHR5cHJvY2Vzcy5yZWFkdGhlZG9jcy5pby9lbi9sYXRlc3QvIgorU0VDVElPTiA9ICJkZXZlbC9weXRob24iCitMSUNFTlNFID0gIklTQyIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0xJQ0VOU0U7bWQ1PWNmZGNkNTFmYTdkNTgwOGRhNGU3NDM0NmVlMzk0NDkwIgorCitTUkNOQU1FID0gInB0eXByb2Nlc3MiCisKK1NSQ19VUkkgPSAiaHR0cHM6Ly9maWxlcy5weXRob25ob3N0ZWQub3JnL3BhY2thZ2VzL3NvdXJjZS9wLyR7U1JDTkFNRX0vJHtTUkNOQU1FfS0ke1BWfS50YXIuZ3oiCitTUkNfVVJJW21kNXN1bV0gPSAiOTRlNTM3MTIyOTE0Y2M5ZWM5YzFlYWRjZDM2ZTczYTEiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiMDUzMGNlNjNhOTI5NWJmYWU3YmQwNmVkYzAyYjZhYTkzNTYxOWY0ODZmMGYxZGMwOTcyZjUxNjI2NWVlODFhNiIKKworVVBTVFJFQU1fQ0hFQ0tfVVJJID0gImh0dHBzOi8vcHlwaS5weXRob24ub3JnL3B5cGkvcHR5cHJvY2VzcyIKKworUyA9ICIke1dPUktESVJ9LyR7U1JDTkFNRX0tJHtQVn0iCisKK2luaGVyaXQgc2V0dXB0b29scworCitSREVQRU5EU18ke1BOfSA9ICJcCisgICAgcHl0aG9uLWNvcmUgXAorIgorCitCQkNMQVNTRVhURU5EID0gIm5hdGl2ZXNkayIKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi1weWNhaXJvXzEuMTAuMC5iYiBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi1weWNhaXJvXzEuMTAuMC5iYgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzBmZTI1Yy4uMDAwMDAwMAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24tcHljYWlyb18xLjEwLjAuYmIKKysrIC9kZXYvbnVsbApAQCAtMSw0MSArMCwwIEBACi1TVU1NQVJZID0gIlB5dGhvbiBiaW5kaW5ncyBmb3IgdGhlIENhaXJvIGNhbnZhcyBsaWJyYXJ5IgotSE9NRVBBR0UgPSAiaHR0cDovL2NhaXJvZ3JhcGhpY3Mub3JnL3B5Y2Fpcm8iCi1CVUdUUkFDS0VSID0gImh0dHA6Ly9idWdzLmZyZWVkZXNrdG9wLm9yZyIKLVNFQ1RJT04gPSAicHl0aG9uLWRldmVsIgotTElDRU5TRSA9ICJMR1BMdjIuMSAmIE1QTC0xLjEiCi1MSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT1mMmUwNzFhYjcyOTc4NDMxYjI5NGEwZDY5NjMyNzQyMSBcCi0gICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9DT1BZSU5HLUxHUEwtMi4xO21kNT1mYWQ5YjMzMzJiZTg5NGJhYjliYzUwMTU3Mjg2NGIyOSBcCi0gICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9DT1BZSU5HLU1QTC0xLjE7bWQ1PWJmZTFmNzVkNjA2OTEyYTQxMTFjOTA3NDNkNmM3MzI1IgotCi0jIGNhaXJvID49IDEuOC44Ci1ERVBFTkRTID0gImNhaXJvIgotUFIgPSAicjIiCi0KLVNSQ19VUkkgPSAiaHR0cDovL2NhaXJvZ3JhcGhpY3Mub3JnL3JlbGVhc2VzL3B5MmNhaXJvLSR7UFZ9LnRhci5iejIiCi0KLVNSQ19VUklbbWQ1c3VtXSA9ICIyMDMzNzEzMmM0YWIwNmMxMTQ2YWQzODRkNTUzNzJjNSIKLVNSQ19VUklbc2hhMjU2c3VtXSA9ICJkMzA0MzlmMDZjMmVjMWEzOWUyNzQ2NGM2YzgyOGI2ZWZhY2UzYjIyZWUxN2IyZGUwNWRjNDA5ZTQyOWE3NDMxIgotCi1TID0gIiR7V09SS0RJUn0vcHkyY2Fpcm8tJHtQVn0iCi0KLWluaGVyaXQgZGlzdHV0aWxzIHBrZ2NvbmZpZwotCi1CQkNMQVNTRVhURU5EID0gIm5hdGl2ZSIKLQotZG9fY29uZmlndXJlKCkgewotCUJVSUxEX1NZUz0ke0JVSUxEX1NZU30gSE9TVF9TWVM9JHtIT1NUX1NZU30gLi93YWYgY29uZmlndXJlIC0tcHJlZml4PSR7RH0ke3ByZWZpeH0gLS1saWJkaXI9JHtEfSR7bGliZGlyfQotfQotCi1kb19jb21waWxlKCkgewotCS4vd2FmIGJ1aWxkICR7UEFSQUxMRUxfTUFLRX0KLX0KLQotZG9faW5zdGFsbCgpIHsKLQkuL3dhZiBpbnN0YWxsCi0Jc2VkIFwKLQkJLWUgJ3M6QHByZWZpeEA6JHtwcmVmaXh9OicgXAotCQktZSAnczpAVkVSU0lPTkA6JHtQVn06JyBcCi0JCS1lICdzOkBpbmNsdWRlZGlyQDoke2luY2x1ZGVkaXJ9OicgXAotCQlweWNhaXJvLnBjLmluID4gcHljYWlyby5wYwotCWluc3RhbGwgLW0gMDY0NCBweWNhaXJvLnBjICR7RH0ke2xpYmRpcn0vcGtnY29uZmlnLwotfQpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLXB5Z29iamVjdF8zLjE4LjIuYmIgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24tcHlnb2JqZWN0XzMuMTguMi5iYgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTk4NzFmZS4uMDAwMDAwMAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24tcHlnb2JqZWN0XzMuMTguMi5iYgorKysgL2Rldi9udWxsCkBAIC0xLDI1ICswLDAgQEAKLVNVTU1BUlkgPSAiUHl0aG9uIEdPYmplY3QgYmluZGluZ3MiCi1TRUNUSU9OID0gImRldmVsL3B5dGhvbiIKLUxJQ0VOU0UgPSAiTEdQTHYyLjEiCi1MSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT1hOTE2NDY3YjkxMDc2ZTYzMWRkOGVkYjc0MjQ3NjljNyIKLQotaW5oZXJpdCBhdXRvdG9vbHMgcGtnY29uZmlnIGdub21lYmFzZSBkaXN0dXRpbHMtYmFzZSBnb2JqZWN0LWludHJvc3BlY3Rpb24KLQotREVQRU5EUyArPSAicHl0aG9uIGdsaWItMi4wIGdub21lLWNvbW1vbiIKLQotU1JDTkFNRT0icHlnb2JqZWN0IgotU1JDX1VSSSA9ICIgXAotICAgIGh0dHA6Ly9mdHAuZ25vbWUub3JnL3B1Yi9HTk9NRS9zb3VyY2VzLyR7U1JDTkFNRX0vJHtAZ25vbWVfdmVyZGlyKCIke1BWfSIpfS8ke1NSQ05BTUV9LSR7UFZ9LnRhci54eiBcCi0gICAgZmlsZTovLzAwMDEtY29uZmlndXJlLmFjLWFkZC1zeXNyb290LXBhdGgtdG8tR0lfREFUQURJUi1kb24tdC1zZS5wYXRjaCBcCi0iCi0KLVNSQ19VUklbbWQ1c3VtXSA9ICIwYTk1NmYzZTc4NWUyM2IwZjEzNjgzMmYyZTU3YTg2MiIKLVNSQ19VUklbc2hhMjU2c3VtXSA9ICIyYTNjYWQxNTE3OTE2Yjc0ZTEzMWU2MDAyYzM4MjQzNjFhZWUwNjcxZmZiMGQ1NWRlZDExOTQ3N2ZjMWMyYzVmIgotCi1TID0gIiR7V09SS0RJUn0vJHtTUkNOQU1FfS0ke1BWfSIKLQotQkJDTEFTU0VYVEVORCA9ICJuYXRpdmUiCi0KLUVYVFJBX09FQ09ORiA9ICItLWRpc2FibGUtY2Fpcm8gLS13aXRoLXB5dGhvbj1weXRob24yLjciCi0KLVJERVBFTkRTXyR7UE59ICs9ICJweXRob24tc2V0dXB0b29scyBweXRob24taW1wb3J0bGliIgpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLXB5cmV4LW5hdGl2ZV8wLjkuOS5iYiBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi1weXJleC1uYXRpdmVfMC45LjkuYmIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGU4ZWYxYWEuLjAwMDAwMDAKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLXB5cmV4LW5hdGl2ZV8wLjkuOS5iYgorKysgL2Rldi9udWxsCkBAIC0xLDUgKzAsMCBAQAotcmVxdWlyZSBweXRob24tcHlyZXhfJHtQVn0uYmIKLWluaGVyaXQgbmF0aXZlIHB5dGhvbm5hdGl2ZQotREVQRU5EUyA9ICJweXRob24tbmF0aXZlIgotUkRFUEVORFNfJHtQTn0gPSAiIgotUFIgPSAicjMiCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24tcHlyZXgvcHlyZXgtZml4LW9wdGltaXplZC1tb2RlLnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLXB5cmV4L3B5cmV4LWZpeC1vcHRpbWl6ZWQtbW9kZS5wYXRjaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzU4YzMyOC4uMDAwMDAwMAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24tcHlyZXgvcHlyZXgtZml4LW9wdGltaXplZC1tb2RlLnBhdGNoCisrKyAvZGV2L251bGwKQEAgLTEsMTUgKzAsMCBAQAotVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCi0KLUluZGV4OiBQeXJleC0wLjkuOC40L1B5cmV4L0Rpc3R1dGlscy9leHRlbnNpb24ucHkKLT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tLSBQeXJleC0wLjkuOC40Lm9yaWcvUHlyZXgvRGlzdHV0aWxzL2V4dGVuc2lvbi5weQotKysrIFB5cmV4LTAuOS44LjQvUHlyZXgvRGlzdHV0aWxzL2V4dGVuc2lvbi5weQotQEAgLTE1LDcgKzE1LDcgQEAgZXhjZXB0IEltcG9ydEVycm9yOgotICAgICB3YXJuaW5ncyA9IE5vbmUKLSAKLSBjbGFzcyBFeHRlbnNpb24oX0V4dGVuc2lvbi5FeHRlbnNpb24pOgotLSAgICBfRXh0ZW5zaW9uLkV4dGVuc2lvbi5fX2RvY19fICsgXAotKyAgICBfRXh0ZW5zaW9uLkV4dGVuc2lvbi5fX2RvY19fIG9yICIiICsgXAotICAgICAiIiJweXJleF9pbmNsdWRlX2RpcnMgOiBbc3RyaW5nXQotICAgICAgICAgbGlzdCBvZiBkaXJlY3RvcmllcyB0byBzZWFyY2ggZm9yIFB5cmV4IGhlYWRlciBmaWxlcyAoLnB4ZCkgKGluCi0gICAgICAgICBVbml4IGZvcm0gZm9yIHBvcnRhYmlsaXR5KQpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLXB5cmV4XzAuOS45LmJiIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLXB5cmV4XzAuOS45LmJiCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjNGRkMmU2Li4wMDAwMDAwCi0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi1weXJleF8wLjkuOS5iYgorKysgL2Rldi9udWxsCkBAIC0xLDIyICswLDAgQEAKLVNVTU1BUlkgPSAiTGFuZ3VhZ2UgZm9yIHdyaXRpbmcgUHl0aG9uIGV4dGVuc2lvbiBtb2R1bGVzIgotREVTQ1JJUFRJT04gPSAiUHlyZXggaXMgYSBsYW5ndWFnZSBzcGVjaWFsbHkgZGVzaWduZWQgZm9yIHdyaXRpbmcgUHl0aG9uIGV4dGVuc2lvbiBtb2R1bGVzLiBcCi1JdCdzIGRlc2lnbmVkIHRvIGJyaWRnZSB0aGUgZ2FwIGJldHdlZW4gdGhlIG5pY2UsIGhpZ2gtbGV2ZWwsIGVhc3ktdG8tdXNlIHdvcmxkIG9mIFB5dGhvbiBcCi1hbmQgdGhlIG1lc3N5LCBsb3ctbGV2ZWwgd29ybGQgb2YgQy4iCi1TRUNUSU9OID0gImRldmVsL3B5dGhvbiIKLUxJQ0VOU0UgPSAiQXBhY2hlLTIuMCIKLUxJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0xJQ0VOU0UudHh0O21kNT03NzFkNDcyZjUzZjkzMzAzM2Y1N2VlZWU3ODA4ZTViZCIKLVNSQ05BTUUgPSAiUHlyZXgiCi1QUiA9ICJyNCIKLQotU1JDX1VSSSA9ICJcCi0gIGh0dHA6Ly93d3cuY29zYy5jYW50ZXJidXJ5LmFjLm56L2dyZWcuZXdpbmcvcHl0aG9uLyR7U1JDTkFNRX0vJHtTUkNOQU1FfS0ke1BWfS50YXIuZ3ogXAotICBmaWxlOi8vcHlyZXgtZml4LW9wdGltaXplZC1tb2RlLnBhdGNoIFwKLSIKLQotU1JDX1VSSVttZDVzdW1dID0gIjUxNWRlZTY3ZDE1ZDQzOTM4NDFlMmQ2MGU4MzQxOTQ3IgotU1JDX1VSSVtzaGEyNTZzdW1dID0gIjVmODdkZjA2ODMxZDBiMzQxMmViNGJjOWQzZmMyZWU3YmZhZTFiOTEzZDdkYThjMjNhYjJiZjU2OTlmYjZiNTAiCi1TID0gIiR7V09SS0RJUn0vJHtTUkNOQU1FfS0ke1BWfSIKLQotaW5oZXJpdCBkaXN0dXRpbHMKLQotRklMRVNfJHtQTn0gKz0gIiR7ZGF0YWRpcn0ke2Jhc2VfbGliZGlyfS8ke1BZVEhPTl9ESVJ9L3NpdGUtcGFja2FnZXMvUHlyZXgvQ29tcGlsZXIvTGV4aWNvbi5waWNrbGUiCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24tc2NvbnMtbmF0aXZlXzIuNC4xLmJiIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLXNjb25zLW5hdGl2ZV8yLjUuMC5iYgpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLXNjb25zLW5hdGl2ZV8yLjQuMS5iYgpyZW5hbWUgdG8gaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLXNjb25zLW5hdGl2ZV8yLjUuMC5iYgpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLXNjb25zXzIuNC4xLmJiIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLXNjb25zXzIuNC4xLmJiCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwOTZjZjVjLi4wMDAwMDAwCi0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi1zY29uc18yLjQuMS5iYgorKysgL2Rldi9udWxsCkBAIC0xLDIyICswLDAgQEAKLVNVTU1BUlkgPSAiU29mdHdhcmUgQ29uc3RydWN0aW9uIHRvb2wgKG1ha2UvYXV0b3Rvb2xzIHJlcGxhY2VtZW50KSIKLVNFQ1RJT04gPSAiZGV2ZWwvcHl0aG9uIgotTElDRU5TRSA9ICJNSVQiCi1MSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9MSUNFTlNFLnR4dDttZDU9MjNiYzE1MzBjNTVlOWYwZDFiNzA5MDU2YmNlYTIzN2QiCi1TUkNOQU1FID0gInNjb25zIgotCi1TUkNfVVJJID0gIiR7U09VUkNFRk9SR0VfTUlSUk9SfS9zY29ucy9zY29ucy0ke1BWfS50YXIuZ3oiCi0KLVNSQ19VUklbbWQ1c3VtXSA9ICI5YTBkZGYzM2Q5ODM5ZjA0MzgwZTBmYWU4N2NjNGI0MCIKLVNSQ19VUklbc2hhMjU2c3VtXSA9ICI4ZmM0ZjQyOTI4YzY5YmNiYjMzZTFiZTk0YjY0NmYyYzcwMGI2NTk2OTNmYWJjNzc4YzE5MmQ0ZDIyZjc1M2E3IgotCi1VUFNUUkVBTV9DSEVDS19VUkkgPSAiaHR0cDovL3NvdXJjZWZvcmdlLm5ldC9wcm9qZWN0cy9zY29ucy9maWxlcy9zY29ucy8iCi1VUFNUUkVBTV9DSEVDS19SRUdFWCA9ICIvc2NvbnMvKD9QPHB2ZXI+KFxkK1tcLlwtX10qKSspLyIKLQotUyA9ICIke1dPUktESVJ9LyR7U1JDTkFNRX0tJHtQVn0iCi0KLWluaGVyaXQgZGlzdHV0aWxzCi0KLVJERVBFTkRTXyR7UE59ID0gIlwKLSAgcHl0aG9uLWZjbnRsIFwKLSAgcHl0aG9uLWlvIFwKLSAgIgpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLXNjb25zXzIuNS4wLmJiIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLXNjb25zXzIuNS4wLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg1NDNjNDEKLS0tIC9kZXYvbnVsbAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24tc2NvbnNfMi41LjAuYmIKQEAgLTAsMCArMSwyMyBAQAorU1VNTUFSWSA9ICJTb2Z0d2FyZSBDb25zdHJ1Y3Rpb24gdG9vbCAobWFrZS9hdXRvdG9vbHMgcmVwbGFjZW1lbnQpIgorU0VDVElPTiA9ICJkZXZlbC9weXRob24iCitMSUNFTlNFID0gIk1JVCIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0xJQ0VOU0UudHh0O21kNT0zYTg4NWRmZjZkMTRlNGNkODc2ZDkwMDhhMDlhNDJkZSIKK1NSQ05BTUUgPSAic2NvbnMiCisKK1NSQ19VUkkgPSAiaHR0cHM6Ly9maWxlcy5weXRob25ob3N0ZWQub3JnL3BhY2thZ2VzL3NvdXJjZS9zLyR7U1JDTkFNRX0vJHtTUkNOQU1FfS0ke1BWfS50YXIuZ3oiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICJiZGE1NTMwYTcwYTQxYTc4MzFkODNjOGIxOTFjMDIxZSIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICIwMWYxYjNkNjAyMzUxNmE4ZTFiNWU3Nzc5OWU1YTgyYTIzYjMyOTUzYjExMDJkMzM5MDU5ZmZlY2E4NjAwNDkzIgorCitVUFNUUkVBTV9DSEVDS19VUkkgPSAiaHR0cHM6Ly9weXBpLnB5dGhvbi5vcmcvcHlwaS9TQ29ucy8iCisKK1MgPSAiJHtXT1JLRElSfS8ke1NSQ05BTUV9LSR7UFZ9IgorCitpbmhlcml0IHNldHVwdG9vbHMKKworUkRFUEVORFNfJHtQTn0gPSAiXAorICBweXRob24tZmNudGwgXAorICBweXRob24taW8gXAorICBweXRob24tanNvbiBcCisgIHB5dGhvbi1zdWJwcm9jZXNzIFwKKyAgIgpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLXNldHVwdG9vbHMuaW5jIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLXNldHVwdG9vbHMuaW5jCmluZGV4IDA5MTdlODguLjkyY2E5YTAgMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi1zZXR1cHRvb2xzLmluYworKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24tc2V0dXB0b29scy5pbmMKQEAgLTEsMjEgKzEsMjEgQEAKIFNVTU1BUlkgPSAiRG93bmxvYWQsIGJ1aWxkLCBpbnN0YWxsLCB1cGdyYWRlLCBhbmQgdW5pbnN0YWxsIFB5dGhvbiBwYWNrYWdlcyIKIEhPTUVQQUdFID0gImh0dHBzOi8vcHlwaS5weXRob24ub3JnL3B5cGkvc2V0dXB0b29scyIKIFNFQ1RJT04gPSAiZGV2ZWwvcHl0aG9uIgotTElDRU5TRSA9ICJQU0YgfCBaUEwtMi4wIgorTElDRU5TRSA9ICJNSVQiCiAKLUxJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL3NldHVwLnB5O2JlZ2lubGluZT03ODtlbmRsaW5lPTc4O21kNT04YTMxNDI3MGRkN2E4ZGJjYTc0MTc3NTQxNWYxNzE2ZSIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL3NldHVwLnB5O2JlZ2lubGluZT0xMzQ7ZW5kbGluZT0xMzQ7bWQ1PTNlOGRmMDI0ZDZjMTQ0MmQxOGU4NGFjZjhmYmJjNDc1IgogCiBTUkNOQU1FID0gInNldHVwdG9vbHMiCiAKLVNSQ19VUkkgPSAiaHR0cDovL3B5cGkucHl0aG9uLm9yZy9wYWNrYWdlcy9zb3VyY2Uvcy8ke1NSQ05BTUV9LyR7U1JDTkFNRX0tJHtQVn0udGFyLmd6IgorU1JDX1VSSSA9ICJodHRwczovL2ZpbGVzLnB5dGhvbmhvc3RlZC5vcmcvcGFja2FnZXMvc291cmNlL3MvJHtTUkNOQU1FfS8ke1NSQ05BTUV9LSR7UFZ9LnRhci5neiIKIAotU1JDX1VSSVttZDVzdW1dID0gImM1YTdkOTBjMWUwYWNmOGM0ZWM1YzJiZjMxYmMyNWI1IgotU1JDX1VSSVtzaGEyNTZzdW1dID0gIjIxNGJmMjk5MzNmNDdjZjI1ZTZmYWE1NjlmNzEwNzMxNzI4YTA3YTE5Y2FlOTFlYTY0ZjgyNjA1MWY2OGE4Y2YiCitTUkNfVVJJW21kNXN1bV0gPSAiODY5ZjMwMjlkY2M2NmE2NGJhMzk4NzVlMmEyZjA0NGEiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiMTlhYWQxOTQ3MTA1MmQ1ZGFlZmU5NmYyYzFmYTJlODhkY2RiMTc0ODhiZjg3MDhkN2U2MzU2ODgxZWE4MzNjYiIKIAogVVBTVFJFQU1fQ0hFQ0tfVVJJID0gImh0dHBzOi8vcHlwaS5weXRob24ub3JnL3B5cGkvc2V0dXB0b29scyIKIAogUyA9ICIke1dPUktESVJ9LyR7U1JDTkFNRX0tJHtQVn0iCiAKIGRvX2luc3RhbGxfcHJlcGVuZCgpIHsKLSAgICBpbnN0YWxsIC1kICR7RH0vJHtsaWJkaXJ9LyR7UFlUSE9OX0RJUn0vc2l0ZS1wYWNrYWdlcworICAgIGluc3RhbGwgLWQgJHtEfSR7UFlUSE9OX1NJVEVQQUNLQUdFU19ESVJ9CiB9CmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24tc2V0dXB0b29sc18xOS40LmJiIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLXNldHVwdG9vbHNfMTkuNC5iYgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzE3MjAzOS4uMDAwMDAwMAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24tc2V0dXB0b29sc18xOS40LmJiCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotcmVxdWlyZSBweXRob24tc2V0dXB0b29scy5pbmMKLQotUFJPVklERVMgPSAicHl0aG9uLWRpc3RyaWJ1dGUiCi0KLURFUEVORFMgKz0gInB5dGhvbiIKLURFUEVORFNfY2xhc3MtbmF0aXZlICs9ICJweXRob24tbmF0aXZlIgotCi1pbmhlcml0IGRpc3R1dGlscwotCi1ESVNUVVRJTFNfSU5TVEFMTF9BUkdTICs9ICItLWluc3RhbGwtbGliPSR7RH0ke2xpYmRpcn0vJHtQWVRIT05fRElSfS9zaXRlLXBhY2thZ2VzIgotCi1SREVQRU5EU18ke1BOfSA9ICJcCi0gIHB5dGhvbi1zdHJpbmdvbGQgXAotICBweXRob24tZW1haWwgXAotICBweXRob24tc2hlbGwgXAotICBweXRob24tZGlzdHV0aWxzIFwKLSAgcHl0aG9uLWNvbXByZXNzaW9uIFwKLSAgcHl0aG9uLXBrZ3V0aWwgXAotICBweXRob24tcGxpc3RsaWIgXAotICBweXRob24tbnVtYmVycyBcCi0gIHB5dGhvbi1odG1sIFwKLSAgcHl0aG9uLW5ldHNlcnZlciBcCi0gIHB5dGhvbi1jdHlwZXMgXAotICBweXRob24tc3VicHJvY2VzcyBcCi0gIHB5dGhvbi11bml0dGVzdCBcCi0gIHB5dGhvbi1jb21waWxlIFwKLSIKLQotUkRFUEVORFNfJHtQTn1fY2xhc3MtbmF0aXZlID0gIlwKLSAgcHl0aG9uLWRpc3R1dGlscyBcCi0gIHB5dGhvbi1jb21wcmVzc2lvbiBcCi0iCi0KLVJSRVBMQUNFU18ke1BOfSA9ICJweXRob24tZGlzdHJpYnV0ZSIKLVJQUk9WSURFU18ke1BOfSA9ICJweXRob24tZGlzdHJpYnV0ZSIKLVJDT05GTElDVFNfJHtQTn0gPSAicHl0aG9uLWRpc3RyaWJ1dGUiCi0KLUJCQ0xBU1NFWFRFTkQgPSAibmF0aXZlIG5hdGl2ZXNkayIKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi1zZXR1cHRvb2xzXzIyLjAuNS5iYiBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi1zZXR1cHRvb2xzXzIyLjAuNS5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41MjY0NzRjCi0tLSAvZGV2L251bGwKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLXNldHVwdG9vbHNfMjIuMC41LmJiCkBAIC0wLDAgKzEsMzggQEAKK3JlcXVpcmUgcHl0aG9uLXNldHVwdG9vbHMuaW5jCisKK1BST1ZJREVTID0gInB5dGhvbi1kaXN0cmlidXRlIgorCitERVBFTkRTICs9ICJweXRob24iCitERVBFTkRTX2NsYXNzLW5hdGl2ZSArPSAicHl0aG9uLW5hdGl2ZSIKKworaW5oZXJpdCBkaXN0dXRpbHMKKworRElTVFVUSUxTX0lOU1RBTExfQVJHUyArPSAiLS1pbnN0YWxsLWxpYj0ke0R9JHtQWVRIT05fU0lURVBBQ0tBR0VTX0RJUn0iCisKK1JERVBFTkRTXyR7UE59ID0gIlwKKyAgcHl0aG9uLXN0cmluZ29sZCBcCisgIHB5dGhvbi1lbWFpbCBcCisgIHB5dGhvbi1zaGVsbCBcCisgIHB5dGhvbi1kaXN0dXRpbHMgXAorICBweXRob24tY29tcHJlc3Npb24gXAorICBweXRob24tcGtndXRpbCBcCisgIHB5dGhvbi1wbGlzdGxpYiBcCisgIHB5dGhvbi1udW1iZXJzIFwKKyAgcHl0aG9uLWh0bWwgXAorICBweXRob24tbmV0c2VydmVyIFwKKyAgcHl0aG9uLWN0eXBlcyBcCisgIHB5dGhvbi1zdWJwcm9jZXNzIFwKKyAgcHl0aG9uLXVuaXR0ZXN0IFwKKyAgcHl0aG9uLWNvbXBpbGUgXAorIgorCitSREVQRU5EU18ke1BOfV9jbGFzcy1uYXRpdmUgPSAiXAorICBweXRob24tZGlzdHV0aWxzIFwKKyAgcHl0aG9uLWNvbXByZXNzaW9uIFwKKyIKKworUlJFUExBQ0VTXyR7UE59ID0gInB5dGhvbi1kaXN0cmlidXRlIgorUlBST1ZJREVTXyR7UE59ID0gInB5dGhvbi1kaXN0cmlidXRlIgorUkNPTkZMSUNUU18ke1BOfSA9ICJweXRob24tZGlzdHJpYnV0ZSIKKworQkJDTEFTU0VYVEVORCA9ICJuYXRpdmUgbmF0aXZlc2RrIgpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLXNpeC5pbmMgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24tc2l4LmluYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iZDEyZmE5Ci0tLSAvZGV2L251bGwKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLXNpeC5pbmMKQEAgLTAsMCArMSwxNiBAQAorU1VNTUFSWSA9ICJQeXRob24gMiBhbmQgMyBjb21wYXRpYmlsaXR5IGxpYnJhcnkiCitIT01FUEFHRSA9ICJodHRwczovL3B5cGkucHl0aG9uLm9yZy9weXBpL3NpeC8iCitTRUNUSU9OID0gImRldmVsL3B5dGhvbiIKK0xJQ0VOU0UgPSAiTUlUIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vTElDRU5TRTttZDU9NmYwMGQ0YTUwNzEzZmE4NTk4NThkZDlhYmFhMzViMjEiCisKK1NSQ19VUkkgPSAiaHR0cHM6Ly9maWxlcy5weXRob25ob3N0ZWQub3JnL3BhY2thZ2VzL3NvdXJjZS9zL3NpeC9zaXgtJHtQVn0udGFyLmd6IgorU1JDX1VSSVttZDVzdW1dID0gIjM0ZWVkNTA3NTQ4MTE3YjJhYjUyM2FiMTRiMmY4YjU1IgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjEwNWY4ZDY4NjE2ZjgyNDhlMjRiZjBlOTM3MmVmMDRkM2NjMTAxMDRmMTk4MGY1NGQ1N2IyY2U3M2E1YWQ1NmEiCisKK1VQU1RSRUFNX0NIRUNLX1VSSSA9ICJodHRwczovL3B5cGkucHl0aG9uLm9yZy9weXBpL3NpeC8iCitVUFNUUkVBTV9DSEVDS19SRUdFWCA9ICIvc2l4Lyg/UDxwdmVyPihcZCtbXC5cLV9dKikrKSIKKworQkJDTEFTU0VYVEVORCA9ICJuYXRpdmUgbmF0aXZlc2RrIgorCitTID0gIiR7V09SS0RJUn0vc2l4LSR7UFZ9IgpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLXNpeF8xLjEwLjAuYmIgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24tc2l4XzEuMTAuMC5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MzUwNDg1Ci0tLSAvZGV2L251bGwKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLXNpeF8xLjEwLjAuYmIKQEAgLTAsMCArMSw0IEBACitpbmhlcml0IHNldHVwdG9vbHMKK3JlcXVpcmUgcHl0aG9uLXNpeC5pbmMKKworUkRFUEVORFNfJHtQTn0gKz0gInB5dGhvbi1pbyIKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi1zbWFydHBtL2NoYW5uZWxzLXJwbV9zeXMtdXNlLW1kNXN1bS1pbnN0ZWFkLW9mLW10aW1lLWFzLXRoZS0ucGF0Y2ggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24tc21hcnRwbS9jaGFubmVscy1ycG1fc3lzLXVzZS1tZDVzdW0taW5zdGVhZC1vZi1tdGltZS1hcy10aGUtLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJmMTRhMTIKLS0tIC9kZXYvbnVsbAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24tc21hcnRwbS9jaGFubmVscy1ycG1fc3lzLXVzZS1tZDVzdW0taW5zdGVhZC1vZi1tdGltZS1hcy10aGUtLnBhdGNoCkBAIC0wLDAgKzEsMzggQEAKK2NoYW5uZWxzL3JwbV9zeXM6IHVzZSBtZDVzdW0gaW5zdGVhZCBvZiBtdGltZSBhcyB0aGUgZGlnZXN0CisKK1VzZSB0aGUgaW50ZXJuYWwgZ2V0RmlsZURpZ2VzdCgpIGZ1bmN0aW9uICh3aGljaCBkZWZhdWx0cyB0byBtZDUpIGluc3RlYWQgb2YKK210aW1lIGZvciBnZXR0aW5nIHRoZSBmaWxlIGRpZ2VzdC4gT24gc29tZSBzeXN0ZW1zIG10aW1lIHByb3ZlZCB0byBiZQordW5yZWxpYWJsZSBiZWNhdXNlIG9mIGRlbGF5ZWQgdXBkYXRlLiBUaGlzIGNhdXNlZCBzbWFydCB0byBtaXNzIHJwbSBkYiB1cGRhdGVzCithbmQgdGh1cyBnZXQgaXRzIHVuZGVyc3RhbmRpbmcgb2YgaW5zdGFsbGVkIHBhY2thZ2VzIG91dCBvZiBzeW5jLgorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworU2lnbmVkLW9mZi1ieTogTWFya3VzIExlaHRvbmVuIDxtYXJrdXMubGVodG9uZW5AbGludXguaW50ZWwuY29tPgorLS0tCisgc21hcnQvY2hhbm5lbHMvcnBtX3N5cy5weSB8IDMgKystCisgMSBmaWxlIGNoYW5nZWQsIDIgaW5zZXJ0aW9ucygrKSwgMSBkZWxldGlvbigtKQorCitkaWZmIC0tZ2l0IGEvc21hcnQvY2hhbm5lbHMvcnBtX3N5cy5weSBiL3NtYXJ0L2NoYW5uZWxzL3JwbV9zeXMucHkKK2luZGV4IGI5ZmRhMjcuLjZmMWZlOTQgMTAwNjQ0CistLS0gYS9zbWFydC9jaGFubmVscy9ycG1fc3lzLnB5CisrKysgYi9zbWFydC9jaGFubmVscy9ycG1fc3lzLnB5CitAQCAtMjIsNiArMjIsNyBAQAorIGZyb20gc21hcnQuYmFja2VuZHMucnBtLmhlYWRlciBpbXBvcnQgUlBNREJMb2FkZXIKKyBmcm9tIHNtYXJ0LmJhY2tlbmRzLnJwbS5iYXNlIGltcG9ydCBnZXRUUywgcnBtX2pvaW5fZGJwYXRoCisgZnJvbSBzbWFydC5jaGFubmVsIGltcG9ydCBQYWNrYWdlQ2hhbm5lbAorK2Zyb20gc21hcnQudXRpbC5maWxldG9vbHMgaW1wb3J0IGdldEZpbGVEaWdlc3QKKyBmcm9tIHNtYXJ0IGltcG9ydCAqCisgaW1wb3J0IG9zCisgCitAQCAtMzUsNyArMzYsNyBAQCBjbGFzcyBSUE1TeXNDaGFubmVsKFBhY2thZ2VDaGFubmVsKToKKyAgICAgICAgIGRiZGlyID0gcnBtX2pvaW5fZGJwYXRoKHN5c2NvbmYuZ2V0KCJycG0tcm9vdCIsICIvIiksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN5c2NvbmYuZ2V0KCJycG0tZGJwYXRoIiwgInZhci9saWIvcnBtIikpCisgICAgICAgICBwYXRoID0gb3MucGF0aC5qb2luKGRiZGlyLCAiUGFja2FnZXMiKQorLSAgICAgICAgZGlnZXN0ID0gb3MucGF0aC5nZXRtdGltZShwYXRoKQorKyAgICAgICAgZGlnZXN0ID0gZ2V0RmlsZURpZ2VzdChwYXRoKQorICAgICAgICAgaWYgZGlnZXN0ID09IHNlbGYuX2RpZ2VzdDoKKyAgICAgICAgICAgICByZXR1cm4gVHJ1ZQorICAgICAgICAgc2VsZi5yZW1vdmVMb2FkZXJzKCkKKy0tIAorMi42LjYKKwpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLXNtYXJ0cG0vc21hcnQtYWRkLWRldWdnaW5nLXdoZW4tdGFyZ2V0cGF0aC1pcy1lbXB0eS5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi1zbWFydHBtL3NtYXJ0LWFkZC1kZXVnZ2luZy13aGVuLXRhcmdldHBhdGgtaXMtZW1wdHkucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWU4MDgwNAotLS0gL2Rldi9udWxsCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi1zbWFydHBtL3NtYXJ0LWFkZC1kZXVnZ2luZy13aGVuLXRhcmdldHBhdGgtaXMtZW1wdHkucGF0Y2gKQEAgLTAsMCArMSw0NyBAQAorRnJvbSAwMWU1MWFmZDAzMTMxOTQ3ZjhkNzRiOWEyM2ZkYmMwMDc4MjQ5NDk5IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogTWFyaWFubyBMb3BleiA8bWFyaWFuby5sb3BlekBsaW51eC5pbnRlbC5jb20+CitEYXRlOiBXZWQsIDMgQXVnIDIwMTYgMDc6NDc6MDkgKzAwMDAKK1N1YmplY3Q6IFtQQVRDSF0gZmV0Y2hlci5weTogQWRkIGRlYnVnZ2luZyB3aGVuIHRhcmdldHBhdGggaXMgZW1wdHkKKworVGhlcmUgYXJlIHNldmVyYWwgZXJyb3JzIHdoZW4gb3BlbmluaW5nIGZpbGVzIG9yIG1hbmlwdWxhdGluZworcGF0aCBzdHJpbmdzLCB0aG9zZSBlcnJvcnMgcG9pbnQgdGFyZ2V0cGF0aCBwYXNzZWQgdG8KK3NldFN1Y2NlZWRlZCgpIGlzIGVtcHR5LiBUaGlzIHBhdGNoIHdvbid0IHNvbHZlIHRoZSBwcm9ibGVtcywKK2J1dCB3aWxsIGFkZCBkZWJ1Z2dpbmcgdG8gZ2l2ZSBhbiBpZGVhIHdoeSBpcyBmYWlsaW5nLgorCitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW2RlYnVnZ2luZ10KKworU2lnbmVkLW9mZi1ieTogTWFyaWFubyBMb3BleiA8bWFyaWFuby5sb3BlekBsaW51eC5pbnRlbC5jb20+CistLS0KKyBzbWFydC9mZXRjaGVyLnB5IHwgMTYgKysrKysrKysrKysrKysrKworIDEgZmlsZSBjaGFuZ2VkLCAxNiBpbnNlcnRpb25zKCspCisKK2RpZmYgLS1naXQgYS9zbWFydC9mZXRjaGVyLnB5IGIvc21hcnQvZmV0Y2hlci5weQoraW5kZXggZGQzZmY2Yi4uNjRhYTk3OSAxMDA2NDQKKy0tLSBhL3NtYXJ0L2ZldGNoZXIucHkKKysrKyBiL3NtYXJ0L2ZldGNoZXIucHkKK0BAIC01OTQsNiArNTk0LDIyIEBAIGNsYXNzIEZldGNoSXRlbShvYmplY3QpOgorICAgICAgICAgICAgICAgICBzZWxmLl9ldGEgPSBOb25lCisgCisgICAgIGRlZiBzZXRTdWNjZWVkZWQoc2VsZiwgdGFyZ2V0cGF0aCwgZmV0Y2hlZHNpemU9MCk6CisrICAgICAgICAjIEl0IHNlZW1zIHRoZSBpbiBzb21lIG9kZCBjYXNlcyB0YXJnZXRwYXRoIGhlcmUKKysgICAgICAgICMgaXMgZW1wdHksIHRoaXMgd2lsbCBsZWFkIHRvIGJ1Z3MgaW4gc2V2ZXJhbCBwbGFjZXMKKysgICAgICAgIGlmIG5vdCB0YXJnZXRwYXRoOgorKyAgICAgICAgICAgIGltcG9ydCB0cmFjZWJhY2sKKysgICAgICAgICAgICB0Yl9zdHIgPSAiIgorKyAgICAgICAgICAgIGZvciB0aHJlYWRJZCwgc3RhY2sgaW4gc3lzLl9jdXJyZW50X2ZyYW1lcygpLml0ZW1zKCk6CisrICAgICAgICAgICAgICAgIHRiX3N0ciArPSAnXG5UaHJlYWRJRDogJXMnICUgdGhyZWFkSWQKKysgICAgICAgICAgICAgICAgZm9yIGZpbGVuYW1lLCBsaW5lbm8sIG5hbWUsIGxpbmUgaW4gdHJhY2ViYWNrLmV4dHJhY3Rfc3RhY2soc3RhY2spOgorKyAgICAgICAgICAgICAgICAgICAgdGJfc3RyICs9ICdcbkZpbGU6ICIlcyIsIGxpbmUgJWQsIGluICVzJyAlIChmaWxlbmFtZSwgbGluZW5vLCBuYW1lKQorKyAgICAgICAgICAgICAgICAgICAgaWYgbGluZToKKysgICAgICAgICAgICAgICAgICAgICAgICB0Yl9zdHIgKz0gIlxuICAlcyIgJSBsaW5lLnN0cmlwKCkKKysgICAgICAgICAgICBlcnJvcl9zdHJpbmcgPSBbIk5vIGZpbGUgcGF0aCBzcGVjaWZpZWQiLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAiVVJMOiAlcyIgJSBzZWxmLl91cmwsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICJTdGF0dXM6ICVzIiAlIHNlbGYuX3N0YXR1cywKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlRyYWNlYmFjazogJXMiICUgdGJfc3RyXQorKyAgICAgICAgICAgIHJhaXNlIEVycm9yLCBfKCJcbiIuam9pbihlcnJvcl9zdHJpbmcpKQorICAgICAgICAgaWYgc2VsZi5fc3RhdHVzIGlzIG5vdCBGQUlMRUQ6CisgICAgICAgICAgICAgc2VsZi5fc3RhdHVzID0gU1VDQ0VFREVECisgICAgICAgICAgICAgc2VsZi5fdGFyZ2V0cGF0aCA9IHRhcmdldHBhdGgKKy0tIAorMi42LjYKKwpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLXNtYXJ0cG0vc21hcnQtYXR0ZW1wdC5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi1zbWFydHBtL3NtYXJ0LWF0dGVtcHQucGF0Y2gKaW5kZXggZWM5OGUwMy4uNWFlZGM4OCAxMDA2NDQKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLXNtYXJ0cG0vc21hcnQtYXR0ZW1wdC5wYXRjaAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24tc21hcnRwbS9zbWFydC1hdHRlbXB0LnBhdGNoCkBAIC0zNiw3ICszNiw3IEBACiAgICAgICAgICBmaW5hbGx5OgogICAgICAgICAgICAgIGRlbCBnZXRUUy50cwogICAgICAgICAgICAgIGNiLmdyYWJPdXRwdXQoRmFsc2UpCi0rICAgICAgICAgICAgaWYgcHJvYnMgYW5kIHN5c2NvbmYuaGFzKCJhdHRlbXB0LWluc3RhbGwiLCBzb2Z0PVRydWUpOgorKyAgICAgICAgICAgIGlmIChwcm9icyBpcyBub3QgTm9uZSkgYW5kIHN5c2NvbmYuaGFzKCJhdHRlbXB0LWluc3RhbGwiLCBzb2Z0PVRydWUpOgogKyAgICAgICAgICAgICAgICBkZWYgcmVtb3ZlX2NvbmZsaWN0KHBrZ05FVlIpOgogKyAgICAgICAgICAgICAgICAgICAgZm9yIGtleSBpbiBjaGFuZ2VzZXQua2V5cygpOgogKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIHBrZ05FVlIgPT0gc3RyKGtleSk6CkBAIC02Nyw4ICs2Nyw4IEBACiArICAgICAgICAgICAgICAgICAgICAgICAgcmV0cnkgPSAwCiArCiAgICAgICAgICAgICAgcHJvZy5zZXREb25lKCkKLS0gICAgICAgICAgICBpZiBwcm9iczoKLSsgICAgICAgICAgICBpZiBwcm9icyBhbmQgKG5vdCByZXRyeSk6CistICAgICAgICAgICAgaWYgcHJvYnMgaXMgbm90IE5vbmU6CisrICAgICAgICAgICAgaWYgKHByb2JzIGlzIG5vdCBOb25lKSBhbmQgKG5vdCByZXRyeSk6CiAgICAgICAgICAgICAgICAgIHJhaXNlIEVycm9yLCAiXG4iLmpvaW4oW3hbMF0gZm9yIHggaW4gcHJvYnNdKQogICAgICAgICAgICAgIHByb2cuc3RvcCgpCiArICAgICAgICAgICAgaWYgcmV0cnkgYW5kIGxlbihjaGFuZ2VzZXQpOgpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLXNtYXJ0cG0vc21hcnQtY2hhbm5lbC1yZW1vdmUtYWxsLnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLXNtYXJ0cG0vc21hcnQtY2hhbm5lbC1yZW1vdmUtYWxsLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRhMjNlN2MKLS0tIC9kZXYvbnVsbAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24tc21hcnRwbS9zbWFydC1jaGFubmVsLXJlbW92ZS1hbGwucGF0Y2gKQEAgLTAsMCArMSwzMyBAQAorRnJvbSA2ZDIzNjNhNzA1Njk3ZjYxNWQ5ZTVhZjVkNjcwM2IyOTFlNjE4YjQ2IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogRGFuaWVsIEtsYXVlciA8ZGFuaWVsLmtsYXVlckBnaW4uZGU+CitEYXRlOiBUaHUsIDEyIE1heSAyMDE2IDE3OjU1OjAxICswMjAwCitTdWJqZWN0OiBbUEFUQ0hdIEZpeCBjaGFubmVsIGNvbW1hbmQgLS1yZW1vdmUtYWxsIG9wdGlvbiBwYXJzaW5nCisKK09wdGlvbi50YWtlX2FjdGlvbigpIHN0b3JlcyBhIGxpc3Qgb2Ygb3B0aW9ucyBnaXZlbiBmb3IgdmFsaWRhdGlvbiBsYXRlci4KK0l0IHN0cmlwcyBsZWFkaW5nIGRhc2hlcyBhbmQgdHVybnMgcmVtYWluaW5nIGRhc2hlcyBpbnRvIHVuZGVyc2NvcmVzLgorVGhpcyBsaXN0IGlzIHdoYXQgZW5zdXJlX2FjdGlvbigpIHdpbGwgY29tcGFyZSBpdHMgYXJndW1lbnRzIGFnYWluc3QsCit0aHVzIHdlIG11c3QgdXNlIHVuZGVyc2NvcmVzIGhlcmUuCisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitTaWduZWQtb2ZmLWJ5OiBEYW5pZWwgS2xhdWVyIDxkYW5pZWwua2xhdWVyQGdpbi5kZT4KKy0tLQorIHNtYXJ0L2NvbW1hbmRzL2NoYW5uZWwucHkgfCAyICstCisgMSBmaWxlIGNoYW5nZWQsIDEgaW5zZXJ0aW9uKCspLCAxIGRlbGV0aW9uKC0pCisKK2RpZmYgLS1naXQgYS9zbWFydC9jb21tYW5kcy9jaGFubmVsLnB5IGIvc21hcnQvY29tbWFuZHMvY2hhbm5lbC5weQoraW5kZXggMTA4ZjNmMS4uNjIzNGY2OSAxMDA2NDQKKy0tLSBhL3NtYXJ0L2NvbW1hbmRzL2NoYW5uZWwucHkKKysrKyBiL3NtYXJ0L2NvbW1hbmRzL2NoYW5uZWwucHkKK0BAIC0xNjQsNyArMTY0LDcgQEAgZGVmIG1haW4oY3RybCwgb3B0cyk6CisgICAgIG9wdHMuY2hlY2tfYXJnc19vZl9vcHRpb24oImVkaXQiLCAwKQorICAgICBvcHRzLmNoZWNrX2FyZ3Nfb2Zfb3B0aW9uKCJlbmFibGUiLCAtMSkKKyAgICAgb3B0cy5jaGVja19hcmdzX29mX29wdGlvbigiZGlzYWJsZSIsIC0xKQorLSAgICBvcHRzLmVuc3VyZV9hY3Rpb24oImNoYW5uZWwiLCBbImFkZCIsICJzZXQiLCAicmVtb3ZlIiwgInJlbW92ZS1hbGwiLAorKyAgICBvcHRzLmVuc3VyZV9hY3Rpb24oImNoYW5uZWwiLCBbImFkZCIsICJzZXQiLCAicmVtb3ZlIiwgInJlbW92ZV9hbGwiLAorICAgICAgICAgICAgICAgICAgICAgICAgImxpc3QiLCAic2hvdyIsICJ5YW1sIiwgImVuYWJsZSIsICJkaXNhYmxlIl0pCisgICAgIG9wdHMuY2hlY2tfcmVtYWluaW5nX2FyZ3MoKQorIAorLS0gCisxLjkuMQorCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24tc21hcnRwbS9zbWFydC1pbXByb3ZlLWVycm9yLXJlcG9ydGluZy5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi1zbWFydHBtL3NtYXJ0LWltcHJvdmUtZXJyb3ItcmVwb3J0aW5nLnBhdGNoCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiODIyNjViLi4wMDAwMDAwCi0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi1zbWFydHBtL3NtYXJ0LWltcHJvdmUtZXJyb3ItcmVwb3J0aW5nLnBhdGNoCisrKyAvZGV2L251bGwKQEAgLTEsOTEgKzAsMCBAQAotSW1wcm92ZSBlcnJvciByZXBvcnRpbmcgaW4gc21hcnQKLQotQWRkIGNvZGUgdG8gY2hlY2sgcHJvcGVyIGNvbW1hbmQgbGluZSBhcmd1bWVudHMgZm9yIHZhcmlvdXMKLXNtYXJ0IGNvbW1hbmRzLiBFeGl0IHdpdGggZXJyb3IgaWYgZXJyb25lb3VzL2FkZGl0aW9uYWwgYXJndW1lbnRzCi1hcmUgZ2l2ZW4gaW4gdGhlIGNvbW1hbmQgbGluZS4KLQotVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCi0KLVNpZ25lZC1vZmYtYnk6IEJvZ2RhbiBNYXJpbmVzY3UgPGJvZ2Rhbi5hLm1hcmluZXNjdUBpbnRlbC5jb20+Ci0KLWRpZmYgLS1naXQgYS9zbWFydC91dGlsL29wdHBhcnNlLnB5IGIvc21hcnQvdXRpbC9vcHRwYXJzZS5weQotaW5kZXggNmZmZjFiYy4uZjQ0NWEzYiAxMDA2NDQKLS0tLSBhL3NtYXJ0L3V0aWwvb3B0cGFyc2UucHkKLSsrKyBiL3NtYXJ0L3V0aWwvb3B0cGFyc2UucHkKLUBAIC03MCw2ICs3MCw4IEBAIGltcG9ydCBzeXMsIG9zCi0gaW1wb3J0IHR5cGVzCi0gaW1wb3J0IHRleHR3cmFwCi0gZnJvbSBnZXR0ZXh0IGltcG9ydCBnZXR0ZXh0IGFzIF8KLStmcm9tIHNtYXJ0IGltcG9ydCBFcnJvcgotK2ltcG9ydCByZQotIAotIGRlZiBfcmVwcihzZWxmKToKLSAgICAgcmV0dXJuICI8JXMgYXQgMHgleDogJXM+IiAlIChzZWxmLl9fY2xhc3NfXy5fX25hbWVfXywgaWQoc2VsZiksIHNlbGYpCi1AQCAtNzEwLDYgKzcxMiwxMiBAQCBjbGFzcyBPcHRpb246Ci0gICAgICAgICAgICAgc2VsZi5hY3Rpb24sIHNlbGYuZGVzdCwgb3B0LCB2YWx1ZSwgdmFsdWVzLCBwYXJzZXIpCi0gCi0gICAgIGRlZiB0YWtlX2FjdGlvbihzZWxmLCBhY3Rpb24sIGRlc3QsIG9wdCwgdmFsdWUsIHZhbHVlcywgcGFyc2VyKToKLSsgICAgICAgICMgS2VlcCBhbGwgdGhlIG9wdGlvbnMgaW4gdGhlIGNvbW1hbmQgbGluZSBpbiB0aGUgJ19naXZlbl9vcHRzJyBhcnJheQotKyAgICAgICAgIyBUaGlzIHdpbGwgYmUgdXNlZCBsYXRlciB0byB2YWxpZGF0ZSB0aGUgY29tbWFuZCBsaW5lCi0rICAgICAgICBnaXZlbl9vcHRzID0gZ2V0YXR0cihwYXJzZXIudmFsdWVzLCAiX2dpdmVuX29wdHMiLCBbXSkKLSsgICAgICAgIHVzZXJfb3B0ID0gcmUuc3ViKHIiXlwtKiIsICIiLCBvcHQpLnJlcGxhY2UoIi0iLCAiXyIpCi0rICAgICAgICBnaXZlbl9vcHRzLmFwcGVuZCh1c2VyX29wdCkKLSsgICAgICAgIHNldGF0dHIocGFyc2VyLnZhbHVlcywgIl9naXZlbl9vcHRzIiwgZ2l2ZW5fb3B0cykKLSAgICAgICAgIGlmIGFjdGlvbiA9PSAic3RvcmUiOgotICAgICAgICAgICAgIHNldGF0dHIodmFsdWVzLCBkZXN0LCB2YWx1ZSkKLSAgICAgICAgIGVsaWYgYWN0aW9uID09ICJzdG9yZV9jb25zdCI6Ci1AQCAtODIxLDYgKzgyOSw1NCBAQCBjbGFzcyBWYWx1ZXM6Ci0gICAgICAgICAgICAgc2V0YXR0cihzZWxmLCBhdHRyLCB2YWx1ZSkKLSAgICAgICAgIHJldHVybiBnZXRhdHRyKHNlbGYsIGF0dHIpCi0gCi0rICAgICMgQ2hlY2sgaWYgdGhlIGdpdmVuIG9wdGlvbiBoYXMgdGhlIHNwZWNpZmllZCBudW1iZXIgb2YgYXJndW1lbnRzCi0rICAgICMgUmFpc2UgYW4gZXJyb3IgaWYgdGhlIG9wdGlvbiBoYXMgYW4gaW52YWxpZCBudW1iZXIgb2YgYXJndW1lbnRzCi0rICAgICMgQSBuZWdhdGl2ZSBudW1iZXIgZm9yICduYXJncycgbWVhbnMgImF0IGxlYXN0IHxuYXJnc3wgYXJndW1lbnRzIGFyZSBuZWVkZWQiCi0rICAgIGRlZiBjaGVja19hcmdzX29mX29wdGlvbihzZWxmLCBvcHQsIG5hcmdzLCBlcnI9Tm9uZSk6Ci0rICAgICAgICBnaXZlbl9vcHRzID0gZ2V0YXR0cihzZWxmLCAiX2dpdmVuX29wdHMiLCBbXSkKLSsgICAgICAgIGlmIG5vdCBvcHQgaW4gZ2l2ZW5fb3B0czoKLSsgICAgICAgICAgICByZXR1cm4KLSsgICAgICAgIHZhbHVlcyA9IGdldGF0dHIoc2VsZiwgb3B0LCBbXSkKLSsgICAgICAgIGlmIHR5cGUodmFsdWVzKSAhPSB0eXBlKFtdKToKLSsgICAgICAgICAgICByZXR1cm4KLSsgICAgICAgIGlmIG5hcmdzIDwgMDoKLSsgICAgICAgICAgICBuYXJncyA9IC1uYXJncwotKyAgICAgICAgICAgIGlmIGxlbih2YWx1ZXMpID49IG5hcmdzOgotKyAgICAgICAgICAgICAgICByZXR1cm4KLSsgICAgICAgICAgICBpZiBub3QgZXJyOgotKyAgICAgICAgICAgICAgICBpZiBuYXJncyA9PSAxOgotKyAgICAgICAgICAgICAgICAgICAgZXJyID0gXygiT3B0aW9uICclcycgcmVxdWlyZXMgYXQgbGVhc3Qgb25lIGFyZ3VtZW50IikgJSBvcHQKLSsgICAgICAgICAgICAgICAgZWxzZToKLSsgICAgICAgICAgICAgICAgICAgIGVyciA9IF8oIk9wdGlvbiAnJXMnIHJlcXVpcmVzIGF0IGxlYXN0ICVkIGFyZ3VtZW50cyIpICUgKG9wdCwgbmFyZ3MpCi0rICAgICAgICAgICAgcmFpc2UgRXJyb3IsIGVycgotKyAgICAgICAgZWxpZiBuYXJncyA9PSAwOgotKyAgICAgICAgICAgIGlmIGxlbiggdmFsdWVzICkgPT0gMDoKLSsgICAgICAgICAgICAgICAgcmV0dXJuCi0rICAgICAgICAgICAgcmFpc2UgRXJyb3IsIGVycgotKyAgICAgICAgZWxzZToKLSsgICAgICAgICAgICBpZiBsZW4odmFsdWVzKSA9PSBuYXJnczoKLSsgICAgICAgICAgICAgICAgcmV0dXJuCi0rICAgICAgICAgICAgaWYgbm90IGVycjoKLSsgICAgICAgICAgICAgICAgaWYgbmFyZ3MgPT0gMToKLSsgICAgICAgICAgICAgICAgICAgIGVyciA9IF8oIk9wdGlvbiAnJXMnIHJlcXVpcmVzIG9uZSBhcmd1bWVudCIpICUgb3B0Ci0rICAgICAgICAgICAgICAgIGVsc2U6Ci0rICAgICAgICAgICAgICAgICAgICBlcnIgPSBfKCJPcHRpb24gJyVzJyByZXF1aXJlcyAlZCBhcmd1bWVudHMiKSAlIChvcHQsIG5hcmdzKQotKyAgICAgICAgICAgIHJhaXNlIEVycm9yLCBlcnIKLSsKLSsgICAgIyBDaGVjayB0aGF0IGF0IGxlYXN0IG9uZSBvZiB0aGUgb3B0aW9ucyBpbiAnYWN0bGlzdCcgd2FzIGdpdmVuIGFzIGFuIGFyZ3VtZW50Ci0rICAgICMgdG8gdGhlIGNvbW1hbmQgJ2NtZG5hbWUnCi0rICAgIGRlZiBlbnN1cmVfYWN0aW9uKHNlbGYsIGNtZG5hbWUsIGFjdGxpc3QpOgotKyAgICAgICAgZ2l2ZW5fb3B0cyA9IGdldGF0dHIoc2VsZiwgIl9naXZlbl9vcHRzIiwgW10pCi0rICAgICAgICBmb3IgYWN0aW9uIGluIGFjdGxpc3Q6Ci0rICAgICAgICAgICAgaWYgYWN0aW9uIGluIGdpdmVuX29wdHM6Ci0rICAgICAgICAgICAgICAgIHJldHVybgotKyAgICAgICAgcmFpc2UgRXJyb3IsIF8oIk5vIGFjdGlvbiBzcGVjaWZpZWQgZm9yIGNvbW1hbmQgJyVzJyIpICUgY21kbmFtZQotKwotKyAgICAjIENoZWNrIGlmIHRoZXJlIGFyZSBhbnkgb3RoZXIgYXJndW1lbnRzIGxlZnQgYWZ0ZXIgcGFyc2luZyB0aGUgY29tbWFuZCBsaW5lIGFuZAotKyAgICAjIHJhaXNlIGFuIGVycm9yIGlmIHN1Y2ggYXJndW1lbnRzIGFyZSBmb3VuZAotKyAgICBkZWYgY2hlY2tfcmVtYWluaW5nX2FyZ3Moc2VsZik6Ci0rICAgICAgICBpZiBzZWxmLmFyZ3M6Ci0rICAgICAgICAgICAgcmFpc2UgRXJyb3IsIF8oIkludmFsaWQgYXJndW1lbnQocykgJyVzJyIgJSBzdHIoc2VsZi5hcmdzKSkKLSAKLSBjbGFzcyBPcHRpb25Db250YWluZXI6Ci0gCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24tc21hcnRwbS9zbWFydC1sb2NhbGUucGF0Y2ggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24tc21hcnRwbS9zbWFydC1sb2NhbGUucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGYxZGZiOQotLS0gL2Rldi9udWxsCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi1zbWFydHBtL3NtYXJ0LWxvY2FsZS5wYXRjaApAQCAtMCwwICsxLDI3IEBACitycG0gb3IgY29tbWFuZHMgcnVuIGJ5IHJwbSBjYW4gdXNlIG91dHB1dCB3aGljaCBpc24ndCBzdHJpY3RseSBhY3NpaSBzdWNoCithcyBxdW90YXRpb24gY2hhcmFjdGVycyBhcm91bmQgZXhwcmVzc2lvbiB3aGljaCBhcmUgY2hhcmFjdGVyIDB4ZTIuCisKK1VzZSB1dGYtOCBhcyBhbiBlbmNvZGluZyByYXRoZXIgdGhhbiB3aGF0ZXZlciB0aGUgc3lzdGVtIHN1Z2dlc3RzIHRvCitlbnN1cmUgc21hcnQgY29wZXMgd2l0aCB0aGlzIHJhdGhlciB0aGFuIGVycm9yaW5nIHdpdGggdW5pY29kZSBlcnJvcnMuCisKK1JQIDIwMTYvNS8xOQorVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKKworSW5kZXg6IGdpdC9zbWFydC9iYWNrZW5kcy9ycG0vcG0ucHkKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBnaXQub3JpZy9zbWFydC9iYWNrZW5kcy9ycG0vcG0ucHkKKysrKyBnaXQvc21hcnQvYmFja2VuZHMvcnBtL3BtLnB5CitAQCAtMzIsMTEgKzMyLDcgQEAgZnJvbSBzbWFydC5wbSBpbXBvcnQgUGFja2FnZU1hbmFnZXIKKyBmcm9tIHNtYXJ0IGltcG9ydCBzeXNjb25mLCBpZmFjZSwgRXJyb3IsIF8KKyAKKyAKKy10cnk6CistICAgIEVOQ09ESU5HID0gbG9jYWxlLmdldHByZWZlcnJlZGVuY29kaW5nKCkKKy1leGNlcHQgbG9jYWxlLkVycm9yOgorLSAgICBFTkNPRElORyA9ICJhc2NpaSIKKy0KKytFTkNPRElORyA9ICJ1dGYtOCIKKyAKKyBkZWYgZ2V0X3B1YmxpY19rZXkoaGVhZGVyKToKKyAgICAgcmV0dXJuIGhlYWRlci5zcHJpbnRmKCIlfERTQUhFQURFUj97JXtEU0FIRUFERVI6cGdwc2lnfX06IgpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLXNtYXJ0cG0vc21hcnQtcnBtLXRyYW5zYWN0aW9uLWZhaWx1cmUtY2hlY2sucGF0Y2ggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24tc21hcnRwbS9zbWFydC1ycG0tdHJhbnNhY3Rpb24tZmFpbHVyZS1jaGVjay5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iYjhjM2FmCi0tLSAvZGV2L251bGwKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLXNtYXJ0cG0vc21hcnQtcnBtLXRyYW5zYWN0aW9uLWZhaWx1cmUtY2hlY2sucGF0Y2gKQEAgLTAsMCArMSw1NyBAQAorRnJvbSAwYzU1ZDdlMThmNDA0NjVlOTVlOGU0YmYyMmFmMDFmNWQ0NDc3ZDNjIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogRGFuaWVsIEtsYXVlciA8ZGFuaWVsLmtsYXVlckBnaW4uZGU+CitEYXRlOiBXZWQsIDExIE1heSAyMDE2IDE3OjIyOjQ5ICswMjAwCitTdWJqZWN0OiBbUEFUQ0hdIHJwbTogRG9uJ3QgaWdub3JlIHRyYW5zYWN0aW9uIGVycm9yIHdpdGggZW1wdHkgcHJvYmxlbXMgbGlzdAorCitTbWFydFBNIGNvdWxkIG1pc2ludGVycHJldCBSUE0gdHJhbnNhY3Rpb24gZXJyb3IgYXMgc3VjY2VzcywKK2lmIHRzLnJ1bigpIChSUE0gUHl0aG9uIEFQSSkgcmV0dXJucyBhbiBlbXB0eSBwcm9ibGVtcyBsaXN0LAorYmVjYXVzZSBvZiBpbmNvcnJlY3QgY2hlY2sgZm9yIE5vbmUgd2hpY2ggdHJlYXRlZCBlbXB0eSBsaXN0Cit0byBiZSB0aGUgc2FtZSBhcyBOb25lIHdoZW4gaXQgaGFzIGRpZmZlcmVudCBtZWFuaW5nLgorCit0cy5ydW4oKSByZXR1cm5zOgorKiBOb25lIGluIGNhc2Ugb2Ygc3VjY2VzcworKiBwcm9ibGVtcyBsaXN0IGluIGNhc2Ugb2YgZXJyb3IsIG1heSBiZSBlbXB0eQorKGxvb2sgYXQgcnBtdHNfUnVuKCkgaW4gcnBtLTUuNC4xNC9weXRob24vcnBtdHMtcHkuYyBbMV0pCisKKyJpZiBteWxpc3QiIGlzIG5vdCBnb29kIGVub3VnaCB0byBjaGVjayBmb3IgZXJyb3IgaGVyZSwgYmVjYXVzZSBpdCB3aWxsCit0cmVhdCBhbiBlbXB0eSBsaXN0IGFzICJmYWxzZSIgYmVjYXVzZSBpdHMgbGVuKCkgPT0gMCBbMl0uCisKK3RzLmNoZWNrKCkgc2VlbXMgdG8gYmUgZGlmZmVyZW50IChpdCdzIG9rIGZvciBpdCB0byByZXR1cm4gYW4gZW1wdHkgbGlzdCksCitidXQgZm9yIGNvbnNpc3RlbmN5IGl0IHNob3VsZCBiZSBtYWRlIGNsZWFyIHRoYXQgaXQgY2FuIHJldHVybiBlaXRoZXIgTm9uZSwKK2FuIGVtcHR5IGxpc3Qgb3IgYSBub24tZW1wdHkgbGlzdC4KKworWzFdIGh0dHA6Ly9ycG01Lm9yZy9jdnMvZmlsZXZpZXc/Zj1ycG0vcHl0aG9uL3JwbXRzLXB5LmMmdj0xLjExMS4yLjMKK1syXSBodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvc3RkdHlwZXMuaHRtbCN0cnV0aC12YWx1ZS10ZXN0aW5nCisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitTaWduZWQtb2ZmLWJ5OiBEYW5pZWwgS2xhdWVyIDxkYW5pZWwua2xhdWVyQGdpbi5kZT4KKy0tLQorIHNtYXJ0L2JhY2tlbmRzL3JwbS9wbS5weSB8IDQgKystLQorIDEgZmlsZSBjaGFuZ2VkLCAyIGluc2VydGlvbnMoKyksIDIgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9zbWFydC9iYWNrZW5kcy9ycG0vcG0ucHkgYi9zbWFydC9iYWNrZW5kcy9ycG0vcG0ucHkKK2luZGV4IDliYmQ5NTIuLjYzNWY3MjYgMTAwNjQ0CistLS0gYS9zbWFydC9iYWNrZW5kcy9ycG0vcG0ucHkKKysrKyBiL3NtYXJ0L2JhY2tlbmRzL3JwbS9wbS5weQorQEAgLTIwOCw3ICsyMDgsNyBAQCBjbGFzcyBSUE1QYWNrYWdlTWFuYWdlcihQYWNrYWdlTWFuYWdlcik6CisgICAgICAgICBmb3JjZSA9IHN5c2NvbmYuZ2V0KCJycG0tZm9yY2UiLCBGYWxzZSkKKyAgICAgICAgIGlmIG5vdCBmb3JjZToKKyAgICAgICAgICAgICBwcm9icyA9IHRzLmNoZWNrKCkKKy0gICAgICAgICAgICBpZiBwcm9iczoKKysgICAgICAgICAgICBpZiAocHJvYnMgaXMgbm90IE5vbmUpIGFuZCAobGVuKHByb2JzKSAhPSAwKToKKyAgICAgICAgICAgICAgICAgcHJvYmxpbmVzID0gW10KKyAgICAgICAgICAgICAgICAgZm9yIHByb2IgaW4gcHJvYnM6CisgICAgICAgICAgICAgICAgICAgICBuYW1lMSA9ICIlcy0lcy0lcyIgJSBwcm9iWzBdCitAQCAtMjQ3LDcgKzI0Nyw3IEBAIGNsYXNzIFJQTVBhY2thZ2VNYW5hZ2VyKFBhY2thZ2VNYW5hZ2VyKToKKyAgICAgICAgICAgICBkZWwgZ2V0VFMudHMKKyAgICAgICAgICAgICBjYi5ncmFiT3V0cHV0KEZhbHNlKQorICAgICAgICAgICAgIHByb2cuc2V0RG9uZSgpCistICAgICAgICAgICAgaWYgcHJvYnM6CisrICAgICAgICAgICAgaWYgcHJvYnMgaXMgbm90IE5vbmU6CisgICAgICAgICAgICAgICAgIHJhaXNlIEVycm9yLCAiXG4iLmpvaW4oW3hbMF0gZm9yIHggaW4gcHJvYnNdKQorICAgICAgICAgICAgIHByb2cuc3RvcCgpCisKKy0tCisxLjkuMQorCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24tc21hcnRwbS9zbWFydHBtLXJwbTUtbm9kaWcucGF0Y2ggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24tc21hcnRwbS9zbWFydHBtLXJwbTUtbm9kaWcucGF0Y2gKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGZlZmIyOWEuLjAwMDAwMDAKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLXNtYXJ0cG0vc21hcnRwbS1ycG01LW5vZGlnLnBhdGNoCisrKyAvZGV2L251bGwKQEAgLTEsNTkgKzAsMCBAQAotUlBNNSBoYXMgcmVtb3ZlZCBzdXBwb3J0IGZvciBSUE1WU0ZfTk9TSUdOQVRVUkVTCi0KLVBhdGNoIHNtYXJ0IHRvIG5vIGxvbmdlciB1c2UgdGhpcyBmbGFnCi0KLVVwc3RyZWFtLVN0YXR1czogUGVuZGluZwotCi1TaWduZWQtb2ZmLWJ5OiBNYXJrIEhhdGxlIDxtYXJrLmhhdGxlQHdpbmRyaXZlci5jb20+Ci0KLWRpZmYgLS1naXQgYS9zbWFydC9iYWNrZW5kcy9ycG0vYmFzZS5weSBiL3NtYXJ0L2JhY2tlbmRzL3JwbS9iYXNlLnB5Ci0tLS0gYS9zbWFydC9iYWNrZW5kcy9ycG0vYmFzZS5weQotKysrIGIvc21hcnQvYmFja2VuZHMvcnBtL2Jhc2UucHkKLUBAIC02MywxMSArNjMsMTEgQEAgZGVmIGdldFRTKG5ldz1GYWxzZSk6Ci0gICAgICAgICBpZiBzeXNjb25mLmdldCgicnBtLWRicGF0aCIpOgotICAgICAgICAgICAgIHJwbS5hZGRNYWNybygnX2RicGF0aCcsICIvIiArIHN5c2NvbmYuZ2V0KCJycG0tZGJwYXRoIikpCi0gICAgICAgICBnZXRUUy50cyA9IHJwbS50cyhnZXRUUy5yb290KQotLSAgICAgICAgaWYgbm90IHN5c2NvbmYuZ2V0KCJycG0tY2hlY2stc2lnbmF0dXJlcyIsIEZhbHNlKToKLS0gICAgICAgICAgICBpZiBoYXNhdHRyKHJwbSwgJ19SUE1WU0ZfTk9TSUdOQVRVUkVTJyk6Ci0tICAgICAgICAgICAgICAgIGdldFRTLnRzLnNldFZTRmxhZ3MocnBtLl9SUE1WU0ZfTk9TSUdOQVRVUkVTKQotLSAgICAgICAgICAgIGVsc2U6Ci0tICAgICAgICAgICAgICAgIHJhaXNlIEVycm9yLCBfKCJycG0gcmVxdWlyZXMgY2hlY2tpbmcgc2lnbmF0dXJlcyIpCi0rICAgICAgICAjaWYgbm90IHN5c2NvbmYuZ2V0KCJycG0tY2hlY2stc2lnbmF0dXJlcyIsIEZhbHNlKToKLSsgICAgICAgICMgICAgaWYgaGFzYXR0cihycG0sICdfUlBNVlNGX05PU0lHTkFUVVJFUycpOgotKyAgICAgICAgIyAgICAgICAgZ2V0VFMudHMuc2V0VlNGbGFncyhycG0uX1JQTVZTRl9OT1NJR05BVFVSRVMpCi0rICAgICAgICAjICAgIGVsc2U6Ci0rICAgICAgICAjICAgICAgICByYWlzZSBFcnJvciwgXygicnBtIHJlcXVpcmVzIGNoZWNraW5nIHNpZ25hdHVyZXMiKQotICAgICAgICAgcnBtX2RicGF0aCA9IHN5c2NvbmYuZ2V0KCJycG0tZGJwYXRoIiwgInZhci9saWIvcnBtIikKLSAgICAgICAgIGRiZGlyID0gcnBtX2pvaW5fZGJwYXRoKGdldFRTLnJvb3QsIHJwbV9kYnBhdGgpCi0gICAgICAgICBpZiBub3Qgb3MucGF0aC5pc2RpcihkYmRpcik6Ci1AQCAtODksMTEgKzg5LDExIEBAIGRlZiBnZXRUUyhuZXc9RmFsc2UpOgotICAgICAgICAgaWYgc3lzY29uZi5nZXQoInJwbS1kYnBhdGgiKToKLSAgICAgICAgICAgICBycG0uYWRkTWFjcm8oJ19kYnBhdGgnLCAiLyIgKyBzeXNjb25mLmdldCgicnBtLWRicGF0aCIpKQotICAgICAgICAgdHMgPSBycG0udHMoZ2V0VFMucm9vdCkKLS0gICAgICAgIGlmIG5vdCBzeXNjb25mLmdldCgicnBtLWNoZWNrLXNpZ25hdHVyZXMiLCBGYWxzZSk6Ci0tICAgICAgICAgICAgaWYgaGFzYXR0cihycG0sICdfUlBNVlNGX05PU0lHTkFUVVJFUycpOgotLSAgICAgICAgICAgICAgICB0cy5zZXRWU0ZsYWdzKHJwbS5fUlBNVlNGX05PU0lHTkFUVVJFUykKLS0gICAgICAgICAgICBlbHNlOgotLSAgICAgICAgICAgICAgICByYWlzZSBFcnJvciwgXygicnBtIHJlcXVpcmVzIGNoZWNraW5nIHNpZ25hdHVyZXMiKQotKyAgICAgICAgI2lmIG5vdCBzeXNjb25mLmdldCgicnBtLWNoZWNrLXNpZ25hdHVyZXMiLCBGYWxzZSk6Ci0rICAgICAgICAjICAgIGlmIGhhc2F0dHIocnBtLCAnX1JQTVZTRl9OT1NJR05BVFVSRVMnKToKLSsgICAgICAgICMgICAgICAgIHRzLnNldFZTRmxhZ3MocnBtLl9SUE1WU0ZfTk9TSUdOQVRVUkVTKQotKyAgICAgICAgIyAgICBlbHNlOgotKyAgICAgICAgIyAgICAgICAgcmFpc2UgRXJyb3IsIF8oInJwbSByZXF1aXJlcyBjaGVja2luZyBzaWduYXR1cmVzIikKLSAgICAgICAgIHJldHVybiB0cwotICAgICBlbHNlOgotICAgICAgICAgcmV0dXJuIGdldFRTLnRzCi1kaWZmIC0tZ2l0IGEvc21hcnQvcGx1Z2lucy95dW1jaGFubmVsc3luYy5weSBiL3NtYXJ0L3BsdWdpbnMveXVtY2hhbm5lbHN5bmMucHkKLS0tLSBhL3NtYXJ0L3BsdWdpbnMveXVtY2hhbm5lbHN5bmMucHkKLSsrKyBiL3NtYXJ0L3BsdWdpbnMveXVtY2hhbm5lbHN5bmMucHkKLUBAIC01Niw4ICs1Niw4IEBAIGRlZiBfZ2V0cmVsZWFzZXZlcigpOgotIAotICAgICBycG1yb290ID0gc3lzY29uZi5nZXQoInJwbS1yb290IiwgIi8iKQotICAgICB0cyA9IHJwbVV0aWxzLnRyYW5zYWN0aW9uLmluaXRSZWFkT25seVRyYW5zYWN0aW9uKHJvb3Q9cnBtcm9vdCkKLS0gICAgaWYgaGFzYXR0cihycG0sICdfUlBNVlNGX05PU0lHTkFUVVJFUycpIGFuZCBoYXNhdHRyKHJwbSwgJ19SUE1WU0ZfTk9ESUdFU1RTJyk6Ci0tICAgICAgICB0cy5wdXNoVlNGbGFncyh+KHJwbS5fUlBNVlNGX05PU0lHTkFUVVJFU3xycG0uX1JQTVZTRl9OT0RJR0VTVFMpKQotKyAgICAjaWYgaGFzYXR0cihycG0sICdfUlBNVlNGX05PU0lHTkFUVVJFUycpIGFuZCBoYXNhdHRyKHJwbSwgJ19SUE1WU0ZfTk9ESUdFU1RTJyk6Ci0rICAgICMgICAgdHMucHVzaFZTRmxhZ3MofihycG0uX1JQTVZTRl9OT1NJR05BVFVSRVN8cnBtLl9SUE1WU0ZfTk9ESUdFU1RTKSkKLSAgICAgcmVsZWFzZXZlciA9IE5vbmUKLSAgICAgIyBIQUNLOiB3ZSdyZSBoYXJkLWNvZGluZyB0aGUgbW9zdCB1c2VkIGRpc3Ryb3MsIHdpbGwgYWRkIG1vcmUgaWYgbmVlZGVkCi0gICAgIGlkeCA9IHRzLmRiTWF0Y2goJ3Byb3ZpZGVzJywgJ2ZlZG9yYS1yZWxlYXNlJykKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi1zbWFydHBtL3NtYXJ0cG0tcnBtNS1zdXBwb3J0LWNoZWNrLXNpZ25hdHVyZXMucGF0Y2ggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24tc21hcnRwbS9zbWFydHBtLXJwbTUtc3VwcG9ydC1jaGVjay1zaWduYXR1cmVzLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQwNjdhOTAKLS0tIC9kZXYvbnVsbAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24tc21hcnRwbS9zbWFydHBtLXJwbTUtc3VwcG9ydC1jaGVjay1zaWduYXR1cmVzLnBhdGNoCkBAIC0wLDAgKzEsMTEyIEBACitGcm9tIDViNzllMjhiZDcwYTBlYzViMzRjNWZmMTliNjZjYmJkZDFlNDg4MzUgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBIYWlxaW5nIEJhaSA8SGFpcWluZy5CYWlAd2luZHJpdmVyLmNvbT4KK0RhdGU6IEZyaSwgMTggTWFyIDIwMTYgMTM6MzQ6MDcgKzA4MDAKK1N1YmplY3Q6IFtQQVRDSF0gTWFrZSBzbWFydHBtIHRvIHN1cHBvcnQgY2hlY2sgc2lnbmF0dXJlcyBvZiBycG12NS4KKworVGhlIG9yaWdpbmFsIHN1cHBvcnQgZm9yICdycG0tY2hlY2stc2lnbmF0dXJlcycgaGFzIGJlZW4KK2Rpc2FibGVkIGZvciB0aGUgUlBNdjUgZG9lcyBub3Qgc3VwcG9ydCAnX1JQTVZTRl9OT1NJR05BVFVSRVMnCitub3cuIFRoaXMgZml4IHJlcGxhY2VzIHRoZSAnX1JQTVZTRl9OT1NJR05BVFVSRVMnIHdpdGgKK3JwbSBWUyBmbGFncyBzZXQ6UlBNVlNGX05PRFNBSEVBREVSfFJQTVZTRl9OT1JTQUhFQURFUnwKK1JQTVZTRl9OT0RTQXxSUE1WU0ZfTk9SU0EuCisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworU2lnbmVkLW9mZi1ieTogSGFpcWluZyBCYWkgPEhhaXFpbmcuQmFpQHdpbmRyaXZlci5jb20+CistLS0KKyBzbWFydC9iYWNrZW5kcy9ycG0vYmFzZS5weSAgICAgIHwgNDMgKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKy0tLS0tLS0tLS0KKyBzbWFydC9iYWNrZW5kcy9ycG0vcG0ucHkgICAgICAgIHwgIDIgKy0KKyBzbWFydC9wbHVnaW5zL3l1bWNoYW5uZWxzeW5jLnB5IHwgIDUgKysrLS0KKyAzIGZpbGVzIGNoYW5nZWQsIDM3IGluc2VydGlvbnMoKyksIDEzIGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvc21hcnQvYmFja2VuZHMvcnBtL2Jhc2UucHkgYi9zbWFydC9iYWNrZW5kcy9ycG0vYmFzZS5weQoraW5kZXggODVmNGQ0OS4uZGJkNjE2NSAxMDA2NDQKKy0tLSBhL3NtYXJ0L2JhY2tlbmRzL3JwbS9iYXNlLnB5CisrKysgYi9zbWFydC9iYWNrZW5kcy9ycG0vYmFzZS5weQorQEAgLTYzLDExICs2MywyMyBAQCBkZWYgZ2V0VFMobmV3PUZhbHNlKToKKyAgICAgICAgIGlmIHN5c2NvbmYuZ2V0KCJycG0tZGJwYXRoIik6CisgICAgICAgICAgICAgcnBtLmFkZE1hY3JvKCdfZGJwYXRoJywgIi8iICsgc3lzY29uZi5nZXQoInJwbS1kYnBhdGgiKSkKKyAgICAgICAgIGdldFRTLnRzID0gcnBtLnRzKGdldFRTLnJvb3QpCistICAgICAgICBpZiBub3Qgc3lzY29uZi5nZXQoInJwbS1jaGVjay1zaWduYXR1cmVzIiwgRmFsc2UpOgorLSAgICAgICAgICAgIGlmIGhhc2F0dHIocnBtLCAnX1JQTVZTRl9OT1NJR05BVFVSRVMnKToKKy0gICAgICAgICAgICAgICAgZ2V0VFMudHMuc2V0VlNGbGFncyhycG0uX1JQTVZTRl9OT1NJR05BVFVSRVMpCistICAgICAgICAgICAgZWxzZToKKy0gICAgICAgICAgICAgICAgcmFpc2UgRXJyb3IsIF8oInJwbSByZXF1aXJlcyBjaGVja2luZyBzaWduYXR1cmVzIikKKysKKysgICAgICAgICMgX1JQTVZTRl9OT1NJR05BVFVSRVMgaXMgbm90IHN1cHBvcnRlZCBpbiBSUE12NSwgc28gaGVyZSB1c2VzCisrICAgICAgICAjIFJQTVZTRl9OT0RTQUhFQURFUnxSUE1WU0ZfTk9SU0FIRUFERVJ8UlBNVlNGX05PRFNBfFJQTVZTRl9OT1JTQQorKyAgICAgICAgIyB0byByZXBsYWNlICdfUlBNVlNGX05PU0lHTkFUVVJFUycgdG8gY29udGludWUgdG8gc3VwcG9ydCBjaGVjaworKyAgICAgICAgIyBycG0gc2lnbmF0dXJlcworKworKyAgICAgICAgI2lmIG5vdCBzeXNjb25mLmdldCgicnBtLWNoZWNrLXNpZ25hdHVyZXMiLCBGYWxzZSk6CisrICAgICAgICAjICAgIGlmIGhhc2F0dHIocnBtLCAnX1JQTVZTRl9OT1NJR05BVFVSRVMnKToKKysgICAgICAgICMgICAgICAgIGdldFRTLnRzLnNldFZTRmxhZ3MocnBtLl9SUE1WU0ZfTk9TSUdOQVRVUkVTKQorKyAgICAgICAgIyAgICBlbHNlOgorKyAgICAgICAgIyAgICAgICAgcmFpc2UgRXJyb3IsIF8oInJwbSByZXF1aXJlcyBjaGVja2luZyBzaWduYXR1cmVzIikKKysgICAgICAgIGlmIHN5c2NvbmYuZ2V0KCJycG0tY2hlY2stc2lnbmF0dXJlcyIpID09IEZhbHNlOgorKyAgICAgICAgICAgIGdldFRTLnRzLnNldFZTRmxhZ3MocnBtLlJQTVZTRl9OT0RTQUhFQURFUnxycG0uUlBNVlNGX05PUlNBSEVBREVSfFwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJwbS5SUE1WU0ZfTk9EU0F8cnBtLlJQTVZTRl9OT1JTQSkKKysgICAgICAgIGVsc2U6CisrICAgICAgICAgICAgZ2V0VFMudHMuc2V0VlNGbGFncygwKQorKworICAgICAgICAgcnBtX2RicGF0aCA9IHN5c2NvbmYuZ2V0KCJycG0tZGJwYXRoIiwgInZhci9saWIvcnBtIikKKyAgICAgICAgIGRiZGlyID0gcnBtX2pvaW5fZGJwYXRoKGdldFRTLnJvb3QsIHJwbV9kYnBhdGgpCisgICAgICAgICBpZiBub3Qgb3MucGF0aC5pc2RpcihkYmRpcik6CitAQCAtODksMTEgKzEwMSwyMiBAQCBkZWYgZ2V0VFMobmV3PUZhbHNlKToKKyAgICAgICAgIGlmIHN5c2NvbmYuZ2V0KCJycG0tZGJwYXRoIik6CisgICAgICAgICAgICAgcnBtLmFkZE1hY3JvKCdfZGJwYXRoJywgIi8iICsgc3lzY29uZi5nZXQoInJwbS1kYnBhdGgiKSkKKyAgICAgICAgIHRzID0gcnBtLnRzKGdldFRTLnJvb3QpCistICAgICAgICBpZiBub3Qgc3lzY29uZi5nZXQoInJwbS1jaGVjay1zaWduYXR1cmVzIiwgRmFsc2UpOgorLSAgICAgICAgICAgIGlmIGhhc2F0dHIocnBtLCAnX1JQTVZTRl9OT1NJR05BVFVSRVMnKToKKy0gICAgICAgICAgICAgICAgdHMuc2V0VlNGbGFncyhycG0uX1JQTVZTRl9OT1NJR05BVFVSRVMpCistICAgICAgICAgICAgZWxzZToKKy0gICAgICAgICAgICAgICAgcmFpc2UgRXJyb3IsIF8oInJwbSByZXF1aXJlcyBjaGVja2luZyBzaWduYXR1cmVzIikKKysKKysgICAgICAgICMgX1JQTVZTRl9OT1NJR05BVFVSRVMgaXMgbm90IHN1cHBvcnRlZCBpbiBSUE12NSwgc28gaGVyZSB1c2VzCisrICAgICAgICAjIFJQTVZTRl9OT0RTQUhFQURFUnxSUE1WU0ZfTk9SU0FIRUFERVJ8UlBNVlNGX05PRFNBfFJQTVZTRl9OT1JTQQorKyAgICAgICAgIyB0byByZXBsYWNlICdfUlBNVlNGX05PU0lHTkFUVVJFUycgdG8gY29udGludWUgdG8gc3VwcG9ydCBjaGVjaworKyAgICAgICAgIyBycG0gc2lnbmF0dXJlcworKworKyAgICAgICAgI2lmIG5vdCBzeXNjb25mLmdldCgicnBtLWNoZWNrLXNpZ25hdHVyZXMiLCBGYWxzZSk6CisrICAgICAgICAjICAgIGlmIGhhc2F0dHIocnBtLCAnX1JQTVZTRl9OT1NJR05BVFVSRVMnKToKKysgICAgICAgICMgICAgICAgIHRzLnNldFZTRmxhZ3MocnBtLl9SUE1WU0ZfTk9TSUdOQVRVUkVTKQorKyAgICAgICAgIyAgICBlbHNlOgorKyAgICAgICAgIyAgICAgICAgcmFpc2UgRXJyb3IsIF8oInJwbSByZXF1aXJlcyBjaGVja2luZyBzaWduYXR1cmVzIikKKysgICAgICAgIGlmIHN5c2NvbmYuZ2V0KCJycG0tY2hlY2stc2lnbmF0dXJlcyIpID09IEZhbHNlOgorKyAgICAgICAgICAgIHRzLnNldFZTRmxhZ3MocnBtLlJQTVZTRl9OT0RTQUhFQURFUnxycG0uUlBNVlNGX05PUlNBSEVBREVSfFwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJwbS5SUE1WU0ZfTk9EU0F8cnBtLlJQTVZTRl9OT1JTQSkKKysgICAgICAgIGVsc2U6CisrICAgICAgICAgICAgdHMuc2V0VlNGbGFncygwKQorICAgICAgICAgcmV0dXJuIHRzCisgICAgIGVsc2U6CisgICAgICAgICByZXR1cm4gZ2V0VFMudHMKK2RpZmYgLS1naXQgYS9zbWFydC9iYWNrZW5kcy9ycG0vcG0ucHkgYi9zbWFydC9iYWNrZW5kcy9ycG0vcG0ucHkKK2luZGV4IGI1N2E4NDQuLjdiNjUxYjUgMTAwNjQ0CistLS0gYS9zbWFydC9iYWNrZW5kcy9ycG0vcG0ucHkKKysrKyBiL3NtYXJ0L2JhY2tlbmRzL3JwbS9wbS5weQorQEAgLTE4MCw3ICsxODAsNyBAQCBjbGFzcyBSUE1QYWNrYWdlTWFuYWdlcihQYWNrYWdlTWFuYWdlcik6CisgICAgICAgICAgICAgICAgIGZkID0gb3Mub3BlbihwYXRoLCBvcy5PX1JET05MWSkKKyAgICAgICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgICAgICAgaCA9IHRzLmhkckZyb21GZG5vKGZkKQorLSAgICAgICAgICAgICAgICAgICAgaWYgc3lzY29uZi5nZXQoInJwbS1jaGVjay1zaWduYXR1cmVzIiwgRmFsc2UpOgorKyAgICAgICAgICAgICAgICAgICAgaWYgc3lzY29uZi5nZXQoInJwbS1jaGVjay1zaWduYXR1cmVzIiwgVHJ1ZSk6CisgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIGdldF9wdWJsaWNfa2V5KGgpID09ICcobm9uZSknOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmFpc2UgcnBtLmVycm9yKCdwYWNrYWdlIGlzIG5vdCBzaWduZWQnKQorICAgICAgICAgICAgICAgICBleGNlcHQgcnBtLmVycm9yLCBlOgorZGlmZiAtLWdpdCBhL3NtYXJ0L3BsdWdpbnMveXVtY2hhbm5lbHN5bmMucHkgYi9zbWFydC9wbHVnaW5zL3l1bWNoYW5uZWxzeW5jLnB5CitpbmRleCBmODEwN2U2Li4yZGM1NDgyIDEwMDY0NAorLS0tIGEvc21hcnQvcGx1Z2lucy95dW1jaGFubmVsc3luYy5weQorKysrIGIvc21hcnQvcGx1Z2lucy95dW1jaGFubmVsc3luYy5weQorQEAgLTU2LDggKzU2LDkgQEAgZGVmIF9nZXRyZWxlYXNldmVyKCk6CisgCisgICAgIHJwbXJvb3QgPSBzeXNjb25mLmdldCgicnBtLXJvb3QiLCAiLyIpCisgICAgIHRzID0gcnBtVXRpbHMudHJhbnNhY3Rpb24uaW5pdFJlYWRPbmx5VHJhbnNhY3Rpb24ocm9vdD1ycG1yb290KQorLSAgICBpZiBoYXNhdHRyKHJwbSwgJ19SUE1WU0ZfTk9TSUdOQVRVUkVTJykgYW5kIGhhc2F0dHIocnBtLCAnX1JQTVZTRl9OT0RJR0VTVFMnKToKKy0gICAgICAgIHRzLnB1c2hWU0ZsYWdzKH4ocnBtLl9SUE1WU0ZfTk9TSUdOQVRVUkVTfHJwbS5fUlBNVlNGX05PRElHRVNUUykpCisrICAgICNfUlBNVlNGX05PU0lHTkFUVVJFUyBpcyBub3Qgc3VwcG9ydGVkIGluIFJQTXY1CisrICAgICNpZiBoYXNhdHRyKHJwbSwgJ19SUE1WU0ZfTk9TSUdOQVRVUkVTJykgYW5kIGhhc2F0dHIocnBtLCAnX1JQTVZTRl9OT0RJR0VTVFMnKToKKysgICAgIyAgICB0cy5wdXNoVlNGbGFncyh+KHJwbS5fUlBNVlNGX05PU0lHTkFUVVJFU3xycG0uX1JQTVZTRl9OT0RJR0VTVFMpKQorICAgICByZWxlYXNldmVyID0gTm9uZQorICAgICAjIEhBQ0s6IHdlJ3JlIGhhcmQtY29kaW5nIHRoZSBtb3N0IHVzZWQgZGlzdHJvcywgd2lsbCBhZGQgbW9yZSBpZiBuZWVkZWQKKyAgICAgaWR4ID0gdHMuZGJNYXRjaCgncHJvdmlkZXMnLCAnZmVkb3JhLXJlbGVhc2UnKQorLS0gCisxLjkuMQorCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24tc21hcnRwbV9naXQuYmIgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24tc21hcnRwbV9naXQuYmIKaW5kZXggZDlhOTA4ZC4uODYxOTEwYyAxMDA2NDQKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLXNtYXJ0cG1fZ2l0LmJiCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi1zbWFydHBtX2dpdC5iYgpAQCAtMTMsMTYgKzEzLDIwIEBACiAKIFNSQ19VUkkgPSAiXAogICAgICAgICAgIGdpdDovL2dpdGh1Yi5jb20vc21hcnRwbS9zbWFydC5naXQgXAotICAgICAgICAgIGZpbGU6Ly9zbWFydHBtLXJwbTUtbm9kaWcucGF0Y2ggXAogICAgICAgICAgIGZpbGU6Ly9zbWFydC1yZWNvbW1lbmRzLnBhdGNoIFwKLSAgICAgICAgICBmaWxlOi8vc21hcnQtaW1wcm92ZS1lcnJvci1yZXBvcnRpbmcucGF0Y2ggXAogICAgICAgICAgIGZpbGU6Ly9zbWFydC1jaGFubmVsc2Rpci5wYXRjaCBcCisgICAgICAgICAgZmlsZTovL3NtYXJ0LXJwbS10cmFuc2FjdGlvbi1mYWlsdXJlLWNoZWNrLnBhdGNoIFwKICAgICAgICAgICBmaWxlOi8vc21hcnQtYXR0ZW1wdC5wYXRjaCBcCiAgICAgICAgICAgZmlsZTovL3NtYXJ0LWF0dGVtcHQtZml4LnBhdGNoIFwKICAgICAgICAgICBmaWxlOi8vc21hcnQtYWRkLWZvci1ycG0taWdub3Jlc2l6ZS1jaGVjay5wYXRjaCBcCiAgICAgICAgICAgZmlsZTovL3NtYXJ0LWFscmVhZHktaW5zdGFsbGVkLW1lc3NhZ2UucGF0Y2ggXAogICAgICAgICAgIGZpbGU6Ly9zbWFydC1zZXQtbm9wcm9ncmVzcy1mb3ItcHljdXJsLnBhdGNoIFwKICAgICAgICAgICBmaWxlOi8vc21hcnQtY2FjaGUucHktZ2V0UGFja2FnZXMtbWF0Y2hlcy1uYW1lLXZlcnNpb24ucGF0Y2ggXAorICAgICAgICAgIGZpbGU6Ly9zbWFydC1jaGFubmVsLXJlbW92ZS1hbGwucGF0Y2ggXAorICAgICAgICAgIGZpbGU6Ly9zbWFydC1sb2NhbGUucGF0Y2ggXAorICAgICAgICAgIGZpbGU6Ly9zbWFydHBtLXJwbTUtc3VwcG9ydC1jaGVjay1zaWduYXR1cmVzLnBhdGNoIFwKKyAgICAgICAgICBmaWxlOi8vc21hcnQtYWRkLWRldWdnaW5nLXdoZW4tdGFyZ2V0cGF0aC1pcy1lbXB0eS5wYXRjaCBcCisgICAgICAgICAgZmlsZTovL2NoYW5uZWxzLXJwbV9zeXMtdXNlLW1kNXN1bS1pbnN0ZWFkLW9mLW10aW1lLWFzLXRoZS0ucGF0Y2ggXAogICAgICAgICAgIgogCiBTUkNSRVYgPSAiNDA3YTdlY2E3NjY0MzEyNTdkY2QxZGExNTE3NWNjMzZhMWJiMjJkMCIKQEAgLTUzLDQxICs1Nyw0MSBAQAogCiBkb19pbnN0YWxsX2FwcGVuZCgpIHsKICAgICMgV2UgZG9uJ3Qgc3VwcG9ydCB0aGUgZm9sbG93aW5nIGl0ZW1zCi0gICBybSAtcmYgJHtEfSR7bGliZGlyfS9weXRob24qL3NpdGUtcGFja2FnZXMvc21hcnQvYmFja2VuZHMvc2xhY2sKLSAgIHJtIC1yZiAke0R9JHtsaWJkaXJ9L3B5dGhvbiovc2l0ZS1wYWNrYWdlcy9zbWFydC9iYWNrZW5kcy9hcmNoCi0gICBybSAtcmYgJHtEfSR7bGliZGlyfS9weXRob24qL3NpdGUtcGFja2FnZXMvc21hcnQvaW50ZXJmYWNlcy9xdAorICAgcm0gLXJmICR7RH0ke1BZVEhPTl9TSVRFUEFDS0FHRVNfRElSfS9zbWFydC9iYWNrZW5kcy9zbGFjaworICAgcm0gLXJmICR7RH0ke1BZVEhPTl9TSVRFUEFDS0FHRVNfRElSfS9zbWFydC9iYWNrZW5kcy9hcmNoCisgICBybSAtcmYgJHtEfSR7UFlUSE9OX1NJVEVQQUNLQUdFU19ESVJ9L3NtYXJ0L2ludGVyZmFjZXMvcXQKIAogICAgIyBUZW1wb3JhcnksIGRlYmlhbiBzdXBwb3J0IGluIE9FIGlzIG1pc3NpbmcgdGhlIHB5dGhvbiBtb2R1bGUKLSAgIHJtIC1mICR7RH0ke2xpYmRpcn0vcHl0aG9uKi9zaXRlLXBhY2thZ2VzL3NtYXJ0L3BsdWdpbnMvYXB0Y2hhbm5lbHN5bmMucHkqCi0gICBybSAtZiAke0R9JHtsaWJkaXJ9L3B5dGhvbiovc2l0ZS1wYWNrYWdlcy9zbWFydC9wbHVnaW5zL2RlYmRpci5weSoKLSAgIHJtIC1yZiAke0R9JHtsaWJkaXJ9L3B5dGhvbiovc2l0ZS1wYWNrYWdlcy9zbWFydC9iYWNrZW5kcy9kZWIKKyAgIHJtIC1mICR7RH0ke1BZVEhPTl9TSVRFUEFDS0FHRVNfRElSfS9zbWFydC9wbHVnaW5zL2FwdGNoYW5uZWxzeW5jLnB5KgorICAgcm0gLWYgJHtEfSR7UFlUSE9OX1NJVEVQQUNLQUdFU19ESVJ9L3NtYXJ0L3BsdWdpbnMvZGViZGlyLnB5KgorICAgcm0gLXJmICR7RH0ke1BZVEhPTl9TSVRFUEFDS0FHRVNfRElSfS9zbWFydC9iYWNrZW5kcy9kZWIKIAogICAgIyBEaXNhYmxlIGF1dG9tYXRpYyBjaGFubmVsIGRldGVjdGlvbgotICAgcm0gLWYgJHtEfSR7bGliZGlyfS9weXRob24qL3NpdGUtcGFja2FnZXMvc21hcnQvcGx1Z2lucy9kZXRlY3RzeXMucHkqCisgICBybSAtZiAke0R9JHtQWVRIT05fU0lURVBBQ0tBR0VTX0RJUn0vc21hcnQvcGx1Z2lucy9kZXRlY3RzeXMucHkqCiAKICAgICMgRGlzYWJsZSBsYW5kc2NhcGUgc3VwcG9ydAotICAgcm0gLWYgJHtEfSR7bGliZGlyfS9weXRob24qL3NpdGUtcGFja2FnZXMvc21hcnQvcGx1Z2lucy9sYW5kc2NhcGUucHkqCisgICBybSAtZiAke0R9JHtQWVRIT05fU0lURVBBQ0tBR0VTX0RJUn0vc21hcnQvcGx1Z2lucy9sYW5kc2NhcGUucHkqCiAKICAgICMgRGlzYWJsZSB1cnBtaSBjaGFubmVsIHN1cHBvcnQKLSAgIHJtIC1mICR7RH0ke2xpYmRpcn0vcHl0aG9uKi9zaXRlLXBhY2thZ2VzL3NtYXJ0L3BsdWdpbnMvdXJwbWljaGFubmVsc3luYy5weSoKKyAgIHJtIC1mICR7RH0ke1BZVEhPTl9TSVRFUEFDS0FHRVNfRElSfS9zbWFydC9wbHVnaW5zL3VycG1pY2hhbm5lbHN5bmMucHkqCiAKICAgICMgRGlzYWJsZSB5dW0gY2hhbm5lbCBzdXBwb3J0Ci0gICBybSAtZiAke0R9JHtsaWJkaXJ9L3B5dGhvbiovc2l0ZS1wYWNrYWdlcy9zbWFydC9wbHVnaW5zL3l1bWNoYW5uZWxzeW5jLnB5KgorICAgcm0gLWYgJHtEfSR7UFlUSE9OX1NJVEVQQUNLQUdFU19ESVJ9L3NtYXJ0L3BsdWdpbnMveXVtY2hhbm5lbHN5bmMucHkqCiAKICAgICMgRGlzYWJsZSB6eXBwZXIgY2hhbm5lbCBzdXBwb3J0Ci0gICBybSAtZiAke0R9JHtsaWJkaXJ9L3B5dGhvbiovc2l0ZS1wYWNrYWdlcy9zbWFydC9wbHVnaW5zL3p5cHBjaGFubmVsc3luYy5weSoKKyAgIHJtIC1mICR7RH0ke1BZVEhPTl9TSVRFUEFDS0FHRVNfRElSfS9zbWFydC9wbHVnaW5zL3p5cHBjaGFubmVsc3luYy5weSoKIAogICAgaWYgWyAteiAiJHtAYmIudXRpbHMuY29udGFpbnMoJ1BBQ0tBR0VDT05GSUcnLCAncnBtJywgJ3JwbScsICcnLCBkKX0iIF07IHRoZW4KLSAgICAgIHJtIC1mICR7RH0ke2xpYmRpcn0vcHl0aG9uKi9zaXRlLXBhY2thZ2VzL3NtYXJ0L3BsdWdpbnMvcnBtZGlyLnB5KgotICAgICAgcm0gLXJmICR7RH0ke2xpYmRpcn0vcHl0aG9uKi9zaXRlLXBhY2thZ2VzL3NtYXJ0L2JhY2tlbmRzL3JwbQorICAgICAgcm0gLWYgJHtEfSR7UFlUSE9OX1NJVEVQQUNLQUdFU19ESVJ9L3NtYXJ0L3BsdWdpbnMvcnBtZGlyLnB5KgorICAgICAgcm0gLXJmICR7RH0ke1BZVEhPTl9TSVRFUEFDS0FHRVNfRElSfS9zbWFydC9iYWNrZW5kcy9ycG0KICAgIGZpCiAKICAgIGlmIFsgLXogIiR7QGJiLnV0aWxzLmNvbnRhaW5zKCdQQUNLQUdFQ09ORklHJywgJ3F0NCcsICdxdDQnLCAnJywgZCl9IiBdOyB0aGVuCi0gICAgICBybSAtcmYgJHtEfSR7bGliZGlyfS9weXRob24qL3NpdGUtcGFja2FnZXMvc21hcnQvaW50ZXJmYWNlcy9xdDQKKyAgICAgIHJtIC1yZiAke0R9JHtQWVRIT05fU0lURVBBQ0tBR0VTX0RJUn0vc21hcnQvaW50ZXJmYWNlcy9xdDQKICAgIGZpCiAKICAgIGlmIFsgLXogIiR7QGJiLnV0aWxzLmNvbnRhaW5zKCdQQUNLQUdFQ09ORklHJywgJ2d0aysnLCAnZ3RrJywgJycsIGQpfSIgXTsgdGhlbgotICAgICAgcm0gLXJmICR7RH0ke2xpYmRpcn0vcHl0aG9uKi9zaXRlLXBhY2thZ2VzL3NtYXJ0L2ludGVyZmFjZXMvZ3RrCisgICAgICBybSAtcmYgJHtEfSR7UFlUSE9OX1NJVEVQQUNLQUdFU19ESVJ9L3NtYXJ0L2ludGVyZmFjZXMvZ3RrCiAgICBmaQogfQogCkBAIC0xMjcsMTAgKzEzMSwxMCBAQAogCiBGSUxFU19zbWFydHBtID0gIiR7YmluZGlyfS9zbWFydCIKIAotRklMRVNfJHtQTn0tYmFja2VuZC1ycG0gPSAiJHtsaWJkaXJ9L3B5dGhvbiovc2l0ZS1wYWNrYWdlcy9zbWFydC9iYWNrZW5kcy9ycG0iCitGSUxFU18ke1BOfS1iYWNrZW5kLXJwbSA9ICIke1BZVEhPTl9TSVRFUEFDS0FHRVNfRElSfS9zbWFydC9iYWNrZW5kcy9ycG0iCiAKLUZJTEVTXyR7UE59LWludGVyZmFjZS1xdDQgPSAiJHtsaWJkaXJ9L3B5dGhvbiovc2l0ZS1wYWNrYWdlcy9zbWFydC9pbnRlcmZhY2VzL3F0NCIKLUZJTEVTXyR7UE59LWludGVyZmFjZS1ndGsgPSAiJHtsaWJkaXJ9L3B5dGhvbiovc2l0ZS1wYWNrYWdlcy9zbWFydC9pbnRlcmZhY2VzL2d0ayIKK0ZJTEVTXyR7UE59LWludGVyZmFjZS1xdDQgPSAiJHtQWVRIT05fU0lURVBBQ0tBR0VTX0RJUn0vc21hcnQvaW50ZXJmYWNlcy9xdDQiCitGSUxFU18ke1BOfS1pbnRlcmZhY2UtZ3RrID0gIiR7UFlUSE9OX1NJVEVQQUNLQUdFU19ESVJ9L3NtYXJ0L2ludGVyZmFjZXMvZ3RrIgogRklMRVNfJHtQTn0taW50ZXJmYWNlLWltYWdlcyA9ICIke2RhdGFkaXJ9LyR7YmFzZWxpYn0vcHl0aG9uKi9zaXRlLXBhY2thZ2VzL3NtYXJ0L2ludGVyZmFjZXMvaW1hZ2VzIgogCiBCQkNMQVNTRVhURU5EID0gIm5hdGl2ZSBuYXRpdmVzZGsiCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24tc21tYXAuaW5jIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLXNtbWFwLmluYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNjdlNmI1Ci0tLSAvZGV2L251bGwKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLXNtbWFwLmluYwpAQCAtMCwwICsxLDE5IEBACitTVU1NQVJZID0gIlB5dGhvbiBpbXBsZW1lbnRhdGlvbiBvZiBhIHNsaWRpbmcgd2luZG93IG1lbW9yeSBtYXAgbWFuYWdlciIKK0RFU0NSSVBUSU9OID0gIkEgcHVyZSBQeXRob24gaW1wbGVtZW50YXRpb24gb2YgYSBzbGlkaW5nIG1lbW9yeSBtYXAgdG8gXAoraGVscCB1bmlmeWluZyBtZW1vcnkgbWFwcGVkIGFjY2VzcyBvbiAzMiBhbmQgNjQgYml0IHN5c3RlbXMgYW5kIHRvIGhlbHAgXAorbWFuYWdpbmcgcmVzb3VyY2VzIG1vcmUgZWZmaWNpZW50bHkuIgorSE9NRVBBR0UgPSAiaHR0cDovL2dpdGh1Yi5jb20vZ2l0cHl0aG9uLWRldmVsb3BlcnMvR2l0UHl0aG9uIgorU0VDVElPTiA9ICJkZXZlbC9weXRob24iCitMSUNFTlNFID0gIkJTRCIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL1BLRy1JTkZPO2JlZ2lubGluZT04O2VuZGxpbmU9ODttZDU9ZTkxMGIzNWIwZWY0ZTFmNjY1YjlhNzVkNmFmYjc3MDkiCisKK1NSQ19VUkkgPSAiaHR0cHM6Ly9maWxlcy5weXRob25ob3N0ZWQub3JnL3BhY2thZ2VzL3NvdXJjZS9zL3NtbWFwL3NtbWFwLSR7UFZ9LnRhci5neiIKK1NSQ19VUklbbWQ1c3VtXSA9ICJkNzkzMmQ1YWNlMjA2YmY0YWUxNTE5OGNmMzZmYjZhYiIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICIwZTJiNjJiNDk3YmQ1ZjBhZmViYzAwMmVkYTRkOTBkZjlkMjA5YzMwZWYyNTdlODY3M2M5MGE2YjVjMTE5ZDYyIgorCitVUFNUUkVBTV9DSEVDS19VUkkgPSAiaHR0cHM6Ly9weXBpLnB5dGhvbi5vcmcvcHlwaS9zbW1hcC8iCitVUFNUUkVBTV9DSEVDS19SRUdFWCA9ICIvc21tYXAvKD9QPHB2ZXI+KFxkK1tcLlwtX10qKSspIgorCitTID0gIiR7V09SS0RJUn0vc21tYXAtJHtQVn0iCisKK0JCQ0xBU1NFWFRFTkQgPSAibmF0aXZlc2RrIgpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLXNtbWFwXzAuOS4wLmJiIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLXNtbWFwXzAuOS4wLmJiCmluZGV4IDVmOWNmNDUuLmMxMThkZDggMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi1zbW1hcF8wLjkuMC5iYgorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24tc21tYXBfMC45LjAuYmIKQEAgLTEsMjMgKzEsNSBAQAotU1VNTUFSWSA9ICJQeXRob24gaW1wbGVtZW50YXRpb24gb2YgYSBzbGlkaW5nIHdpbmRvdyBtZW1vcnkgbWFwIG1hbmFnZXIiCi1ERVNDUklQVElPTiA9ICJBIHB1cmUgUHl0aG9uIGltcGxlbWVudGF0aW9uIG9mIGEgc2xpZGluZyBtZW1vcnkgbWFwIHRvIFwKLWhlbHAgdW5pZnlpbmcgbWVtb3J5IG1hcHBlZCBhY2Nlc3Mgb24gMzIgYW5kIDY0IGJpdCBzeXN0ZW1zIGFuZCB0byBoZWxwIFwKLW1hbmFnaW5nIHJlc291cmNlcyBtb3JlIGVmZmljaWVudGx5LiIKLUhPTUVQQUdFID0gImh0dHA6Ly9naXRodWIuY29tL2dpdHB5dGhvbi1kZXZlbG9wZXJzL0dpdFB5dGhvbiIKLVNFQ1RJT04gPSAiZGV2ZWwvcHl0aG9uIgotTElDRU5TRSA9ICJCU0QiCi1MSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9QS0ctSU5GTztiZWdpbmxpbmU9ODtlbmRsaW5lPTg7bWQ1PWU5MTBiMzViMGVmNGUxZjY2NWI5YTc1ZDZhZmI3NzA5IgotCi1TUkNfVVJJID0gImh0dHA6Ly9weXBpLnB5dGhvbi5vcmcvcGFja2FnZXMvc291cmNlL3Mvc21tYXAvc21tYXAtJHtQVn0udGFyLmd6IgotU1JDX1VSSVttZDVzdW1dID0gImQ3OTMyZDVhY2UyMDZiZjRhZTE1MTk4Y2YzNmZiNmFiIgotU1JDX1VSSVtzaGEyNTZzdW1dID0gIjBlMmI2MmI0OTdiZDVmMGFmZWJjMDAyZWRhNGQ5MGRmOWQyMDljMzBlZjI1N2U4NjczYzkwYTZiNWMxMTlkNjIiCi0KLVVQU1RSRUFNX0NIRUNLX1VSSSA9ICJodHRwczovL3B5cGkucHl0aG9uLm9yZy9weXBpL3NtbWFwLyIKLVVQU1RSRUFNX0NIRUNLX1JFR0VYID0gIi9zbW1hcC8oP1A8cHZlcj4oXGQrW1wuXC1fXSopKykiCi0KLVMgPSAiJHtXT1JLRElSfS9zbW1hcC0ke1BWfSIKK3JlcXVpcmUgcHl0aG9uLXNtbWFwLmluYwogCiBpbmhlcml0IHNldHVwdG9vbHMKIAogUkRFUEVORFNfJHtQTn0gKz0gInB5dGhvbi1jb2RlY3MgcHl0aG9uLW1tYXAgcHl0aG9uLWxhbmciCi0KLUJCQ0xBU1NFWFRFTkQgPSAibmF0aXZlc2RrIgpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLmluYyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi5pbmMKaW5kZXggZjQ4MThjNi4uNzlhNDMxYyAxMDA2NDQKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLmluYworKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24uaW5jCkBAIC01LDEyICs1LDEyIEBACiAjIGJ1bXAgdGhpcyBvbiBldmVyeSBjaGFuZ2UgaW4gY29udHJpYi9weXRob24vZ2VuZXJhdGUtbWFuaWZlc3QtMi43LnB5CiBJTkNfUFIgPSAicjEiCiAKLUxJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0xJQ0VOU0U7bWQ1PWRkOThkMDFkNDcxZmFjOGQ4ZGJkZDk3NTIyOWRiYTAzIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vTElDRU5TRTttZDU9NmI2MDI1ODEzMGU0ZWQxMGQzMTAxNTE3ZWI1YjkzODUiCiAKIFNSQ19VUkkgPSAiaHR0cDovL3d3dy5weXRob24ub3JnL2Z0cC9weXRob24vJHtQVn0vUHl0aG9uLSR7UFZ9LnRhci54eiIKIAotU1JDX1VSSVttZDVzdW1dID0gIjFkYmNjODQ4YjRjZDgzOTlhODE5OWQwMDBmOWY4MjNjIgotU1JDX1VSSVtzaGEyNTZzdW1dID0gIjk2MmI0YzQ1YWY1MDEyNGVhNjFmMTFhMzBkZWI0MzQyZmMwYmMyMTEyNjc5MGZhMWQ3ZjZjNzk4MDk0MTNmNDYiCitTUkNfVVJJW21kNXN1bV0gPSAiNTdkZmZjZWU5Y2VlOGJiMmFiNWY4MmFmMWQ4ZTlhNjkiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiZDc4MzcxMjFkZDU2NTJhMDVmZWY4MDdjMzYxOTA5ZDI1NWQxNzMyODBjNGUxYTRkZWQ5NGQ3M2Q4MGExZjk3OCIKIAogIyBweXRob24gcmVjaXBlIGlzIGFjdHVhbGx5IHB5dGhvbiAyLngKICMgYWxzbywgZXhjbHVkZSBwcmUtcmVsZWFzZXMgZm9yIGJvdGggcHl0aG9uIDIueCBhbmQgMy54CmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24vMDAwMS1kaXN0dXRpbHMtc2V0LXRoZS1wcmVmaXgtdG8tYmUtaW5zaWRlLXN0YWdpbmctZGlyZWN0LnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLzAwMDEtZGlzdHV0aWxzLXNldC10aGUtcHJlZml4LXRvLWJlLWluc2lkZS1zdGFnaW5nLWRpcmVjdC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41MDJmODQ5Ci0tLSAvZGV2L251bGwKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLzAwMDEtZGlzdHV0aWxzLXNldC10aGUtcHJlZml4LXRvLWJlLWluc2lkZS1zdGFnaW5nLWRpcmVjdC5wYXRjaApAQCAtMCwwICsxLDUxIEBACitGcm9tIDRjZGYyZTlkZjEzYzYzMjdmY2M5NGQ1M2U0OTUzMDA1NTQzYWVmM2QgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBBbGV4YW5kZXIgS2FuYXZpbiA8YWxleC5rYW5hdmluQGdtYWlsLmNvbT4KK0RhdGU6IFdlZCwgNiBBcHIgMjAxNiAxNzo0MzowMiArMDMwMAorU3ViamVjdDogW1BBVENIIDAxLzEwXSBkaXN0dXRpbHM6IHNldCB0aGUgcHJlZml4IHRvIGJlIGluc2lkZSBzdGFnaW5nCisgZGlyZWN0b3J5CisKK1RoZSBwcm9wZXIgcHJlZml4IGlzIGluc2lkZSBvdXIgc3RhZ2luZyBhcmVhLgorCitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW2VtYmVkZGVkIHNwZWNpZmljXQorU2lnbmVkLW9mZi1ieTogTWljaGFlbCAnTWlja2V5JyBMYXVlciA8bWlja2V5QHZhbmlsbGUtbWVkaWEuZGU+CitTaWduZWQtb2ZmLWJ5OiBQaGlsIEJsdW5kZWxsIDxwaGlsYkBnbnUub3JnPgorU2lnbmVkLW9mZi1ieTogQWxleGFuZGVyIEthbmF2aW4gPGFsZXgua2FuYXZpbkBnbWFpbC5jb20+CistLS0KKyBMaWIvZGlzdHV0aWxzL3N5c2NvbmZpZy5weSB8IDEwICsrKysrKystLS0KKyAxIGZpbGUgY2hhbmdlZCwgNyBpbnNlcnRpb25zKCspLCAzIGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvTGliL2Rpc3R1dGlscy9zeXNjb25maWcucHkgYi9MaWIvZGlzdHV0aWxzL3N5c2NvbmZpZy5weQoraW5kZXggZGU3ZGExZC4uZjNhYWNmNyAxMDA2NDQKKy0tLSBhL0xpYi9kaXN0dXRpbHMvc3lzY29uZmlnLnB5CisrKysgYi9MaWIvZGlzdHV0aWxzL3N5c2NvbmZpZy5weQorQEAgLTc1LDcgKzc1LDcgQEAgZGVmIGdldF9weXRob25faW5jKHBsYXRfc3BlY2lmaWM9MCwgcHJlZml4PU5vbmUpOgorICAgICBzeXMuZXhlY19wcmVmaXggLS0gaS5lLiwgaWdub3JlICdwbGF0X3NwZWNpZmljJy4KKyAgICAgIiIiCisgICAgIGlmIHByZWZpeCBpcyBOb25lOgorLSAgICAgICAgcHJlZml4ID0gcGxhdF9zcGVjaWZpYyBhbmQgRVhFQ19QUkVGSVggb3IgUFJFRklYCisrICAgICAgICBwcmVmaXggPSBvcy5lbnZpcm9uWydTVEFHSU5HX0lOQ0RJUiddLnJzdHJpcCgnaW5jbHVkZScpCisgCisgICAgIGlmIG9zLm5hbWUgPT0gInBvc2l4IjoKKyAgICAgICAgIGlmIHB5dGhvbl9idWlsZDoKK0BAIC0xMTUsMTIgKzExNSwxNiBAQCBkZWYgZ2V0X3B5dGhvbl9saWIocGxhdF9zcGVjaWZpYz0wLCBzdGFuZGFyZF9saWI9MCwgcHJlZml4PU5vbmUpOgorICAgICBJZiAncHJlZml4JyBpcyBzdXBwbGllZCwgdXNlIGl0IGluc3RlYWQgb2Ygc3lzLnByZWZpeCBvcgorICAgICBzeXMuZXhlY19wcmVmaXggLS0gaS5lLiwgaWdub3JlICdwbGF0X3NwZWNpZmljJy4KKyAgICAgIiIiCisrICAgIGxpYl9iYXNlbmFtZSA9IG9zLmVudmlyb25bJ1NUQUdJTkdfTElCRElSJ10uc3BsaXQoJy8nKVstMV0KKyAgICAgaWYgcHJlZml4IGlzIE5vbmU6CistICAgICAgICBwcmVmaXggPSBwbGF0X3NwZWNpZmljIGFuZCBFWEVDX1BSRUZJWCBvciBQUkVGSVgKKysgICAgICAgIGlmIHBsYXRfc3BlY2lmaWM6CisrICAgICAgICAgICAgcHJlZml4ID0gb3MuZW52aXJvblsnU1RBR0lOR19MSUJESVInXS5yc3RyaXAobGliX2Jhc2VuYW1lKQorKyAgICAgICAgZWxzZToKKysgICAgICAgICAgICBwcmVmaXggPSBQUkVGSVgKKyAKKyAgICAgaWYgb3MubmFtZSA9PSAicG9zaXgiOgorICAgICAgICAgbGlicHl0aG9uID0gb3MucGF0aC5qb2luKHByZWZpeCwKKy0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAibGliIiwgInB5dGhvbiIgKyBnZXRfcHl0aG9uX3ZlcnNpb24oKSkKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaWJfYmFzZW5hbWUsICJweXRob24iICsgZ2V0X3B5dGhvbl92ZXJzaW9uKCkpCisgICAgICAgICBpZiBzdGFuZGFyZF9saWI6CisgICAgICAgICAgICAgcmV0dXJuIGxpYnB5dGhvbgorICAgICAgICAgZWxzZToKKy0tIAorMi44LjAucmMzCisKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi8wMS11c2UtcHJvcGVyLXRvb2xzLWZvci1jcm9zcy1idWlsZC5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi8wMS11c2UtcHJvcGVyLXRvb2xzLWZvci1jcm9zcy1idWlsZC5wYXRjaAppbmRleCAxMjU3Y2E2Li5iMmE4YzNiIDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24vMDEtdXNlLXByb3Blci10b29scy1mb3ItY3Jvc3MtYnVpbGQucGF0Y2gKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLzAxLXVzZS1wcm9wZXItdG9vbHMtZm9yLWNyb3NzLWJ1aWxkLnBhdGNoCkBAIC03LDEzICs3LDEzIEBACiBTaWduZWQtb2ZmLWJ5OiBQYXVsIEVnZ2xldG9uIDxwYXVsLmVnZ2xldG9uQGxpbnV4LmludGVsLmNvbT4KIAogUmViYXNlZCBmb3IgcHl0aG9uLTIuNy45Ci1TaWduZWQtT2ZmLUJ5OiBBbGVqYW5kcm8gSGVybmFuZGV6IDxhbGVqYW5kcm8uaGVybmFuZGV6QGxpbnV4LmludGVsLmNvbT4KK1NpZ25lZC1vZmYtYnk6IEFsZWphbmRybyBIZXJuYW5kZXogPGFsZWphbmRyby5oZXJuYW5kZXpAbGludXguaW50ZWwuY29tPgogCi1JbmRleDogUHl0aG9uLTIuNy45L01ha2VmaWxlLnByZS5pbgorSW5kZXg6IFB5dGhvbi0yLjcuMTIvTWFrZWZpbGUucHJlLmluCiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLS0gUHl0aG9uLTIuNy45Lm9yaWcvTWFrZWZpbGUucHJlLmluCi0rKysgUHl0aG9uLTIuNy45L01ha2VmaWxlLnByZS5pbgotQEAgLTIzNCw2ICsyMzQsNyBAQCBMSUJGRklfSU5DTFVERURJUj0JQExJQkZGSV9JTkNMVURFRElSQAorLS0tIFB5dGhvbi0yLjcuMTIub3JpZy9NYWtlZmlsZS5wcmUuaW4KKysrKyBQeXRob24tMi43LjEyL01ha2VmaWxlLnByZS5pbgorQEAgLTI0Niw2ICsyNDYsNyBAQCBMSUJGRklfSU5DTFVERURJUj0JQExJQkZGSV9JTkNMVURFRElSQAogICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiAgIyBQYXJzZXIKICBQR0VOPQkJUGFyc2VyL3BnZW4kKEVYRSkKQEAgLTIxLDcgKzIxLDcgQEAKICAKICBQU1JDUz0JCVwKICAJCVBhcnNlci9hY2NlbGVyLmMgXAotQEAgLTQ0NSw3ICs0NDYsNyBAQCAkKEJVSUxEUFlUSE9OKToJTW9kdWxlcy9weXRob24ubyAkKExJQlJBCitAQCAtNTEzLDcgKzUxNCw3IEBAICQoQlVJTERQWVRIT04pOglNb2R1bGVzL3B5dGhvbi5vICQoTElCUkEKICAJCQkkKEJMRExJQlJBUlkpICQoTElCUykgJChNT0RMSUJTKSAkKFNZU0xJQlMpICQoTERMQVNUKQogIAogIHBsYXRmb3JtOiAkKEJVSUxEUFlUSE9OKSBweWJ1aWxkZGlyLnR4dApAQCAtMzAsMTYgKzMwLDE2IEBACiAgCiAgIyBDcmVhdGUgYnVpbGQgZGlyZWN0b3J5IGFuZCBnZW5lcmF0ZSB0aGUgc3lzY29uZmlnIGJ1aWxkLXRpbWUgZGF0YSB0aGVyZS4KICAjIHB5YnVpbGRkaXIudHh0IGNvbnRhaW5zIHRoZSBuYW1lIG9mIHRoZSBidWlsZCBkaXIgYW5kIGlzIHVzZWQgZm9yCi1AQCAtNjExLDcgKzYxMiw3IEBAIE1vZHVsZXMvcHdkbW9kdWxlLm86ICQoc3JjZGlyKS9Nb2R1bGVzL3AKLSAkKEdSQU1NQVJfSCk6ICQoR1JBTU1BUl9JTlBVVCkgJChQR0VOU1JDUykKLSAJCUAkKE1LRElSX1ApIEluY2x1ZGUKLSAJCSQoTUFLRSkgJChQR0VOKQotLQkJJChQR0VOKSAkKEdSQU1NQVJfSU5QVVQpICQoR1JBTU1BUl9IKSAkKEdSQU1NQVJfQykKLSsJCSQoSE9TVFBHRU4pICQoR1JBTU1BUl9JTlBVVCkgJChHUkFNTUFSX0gpICQoR1JBTU1BUl9DKQotICQoR1JBTU1BUl9DKTogJChHUkFNTUFSX0gpICQoR1JBTU1BUl9JTlBVVCkgJChQR0VOU1JDUykKLSAJCSQoTUFLRSkgJChHUkFNTUFSX0gpCi0gCQl0b3VjaCAkKEdSQU1NQVJfQykKLUBAIC0xMDQzLDI3ICsxMDQ0LDI3IEBAIGxpYmluc3RhbGw6CWJ1aWxkX2FsbCAkKHNyY2RpcikvTGliLyQoUEwKK0BAIC02ODQsNyArNjg1LDcgQEAgJChHUkFNTUFSX0gpOiAkKEdSQU1NQVJfSU5QVVQpICQoUEdFTikKKyAJQCQoTUtESVJfUCkgSW5jbHVkZQorIAkjIEF2b2lkIGNvcHlpbmcgdGhlIGZpbGUgb250byBpdHNlbGYgZm9yIGFuIGluLXRyZWUgYnVpbGQKKyAJaWYgdGVzdCAiJChjcm9zc19jb21waWxpbmcpIiAhPSAieWVzIjsgdGhlbiBcCistCQkkKFBHRU4pICQoR1JBTU1BUl9JTlBVVCkgJChHUkFNTUFSX0gpICQoR1JBTU1BUl9DKTsgXAorKwkJJChIT1NUUEdFTikgJChHUkFNTUFSX0lOUFVUKSAkKEdSQU1NQVJfSCkgJChHUkFNTUFSX0MpOyBcCisgCWVsc2UgXAorIAkJY3AgJChzcmNkaXIpL0luY2x1ZGUvZ3JhbWluaXQuaCAkKEdSQU1NQVJfSCkudG1wOyBcCisgCQltdiAkKEdSQU1NQVJfSCkudG1wICQoR1JBTU1BUl9IKTsgXAorQEAgLTExMzMsMjcgKzExMzQsMjcgQEAgbGliaW5zdGFsbDoJYnVpbGRfYWxsICQoc3JjZGlyKS9MaWIvJChQTAogIAkJCSQoREVTVERJUikkKExJQkRFU1QpL2Rpc3R1dGlscy90ZXN0cyA7IFwKICAJZmkKICAJUFlUSE9OUEFUSD0kKERFU1RESVIpJChMSUJERVNUKSAgJChSVU5TSEFSRUQpIFwKQEAgLTczLDExICs3MywxMSBAQAogIAogICMgQ3JlYXRlIHRoZSBQTEFURElSIHNvdXJjZSBkaXJlY3RvcnksIGlmIG9uZSB3YXNuJ3QgZGlzdHJpYnV0ZWQuLgogICQoc3JjZGlyKS9MaWIvJChQTEFURElSKToKLUluZGV4OiBQeXRob24tMi43Ljkvc2V0dXAucHkKK0luZGV4OiBQeXRob24tMi43LjEyL3NldHVwLnB5CiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLS0gUHl0aG9uLTIuNy45Lm9yaWcvc2V0dXAucHkKLSsrKyBQeXRob24tMi43Ljkvc2V0dXAucHkKLUBAIC0zMzQsNiArMzM0LDcgQEAgY2xhc3MgUHlCdWlsZEV4dChidWlsZF9leHQpOgorLS0tIFB5dGhvbi0yLjcuMTIub3JpZy9zZXR1cC5weQorKysrIFB5dGhvbi0yLjcuMTIvc2V0dXAucHkKK0BAIC0zNTAsNiArMzUwLDcgQEAgY2xhc3MgUHlCdWlsZEV4dChidWlsZF9leHQpOgogICAgICAgICAgICAgIHNlbGYuZmFpbGVkLmFwcGVuZChleHQubmFtZSkKICAgICAgICAgICAgICBzZWxmLmFubm91bmNlKCcqKiogV0FSTklORzogcmVuYW1pbmcgIiVzIiBzaW5jZSBpbXBvcnRpbmcgaXQnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnIGZhaWxlZDogJXMnICUgKGV4dC5uYW1lLCB3aHkpLCBsZXZlbD0zKQpAQCAtODUsNyArODUsNyBAQAogICAgICAgICAgICAgIGFzc2VydCBub3Qgc2VsZi5pbnBsYWNlCiAgICAgICAgICAgICAgYmFzZW5hbWUsIHRhaWwgPSBvcy5wYXRoLnNwbGl0ZXh0KGV4dF9maWxlbmFtZSkKICAgICAgICAgICAgICBuZXduYW1lID0gYmFzZW5hbWUgKyAiX2ZhaWxlZCIgKyB0YWlsCi1AQCAtNTU4LDYgKzU1OSw5IEBAIGNsYXNzIFB5QnVpbGRFeHQoYnVpbGRfZXh0KToKK0BAIC01NzQsNiArNTc1LDkgQEAgY2xhc3MgUHlCdWlsZEV4dChidWlsZF9leHQpOgogIAogICAgICAgICAgIyBYWFggT21pdHRlZCBtb2R1bGVzOiBnbCwgcHVyZSwgZGwsIFNHSS1zcGVjaWZpYyBtb2R1bGVzCiAgCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24vMDYtYXZvaWRfdXNyX2xpYl90ZXJtY2FwX3BhdGhfaW5fbGlua2luZy5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi8wNi1hdm9pZF91c3JfbGliX3Rlcm1jYXBfcGF0aF9pbl9saW5raW5nLnBhdGNoCmluZGV4IGU0NTJjYjYuLjQzNWIzMTkgMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi8wNi1hdm9pZF91c3JfbGliX3Rlcm1jYXBfcGF0aF9pbl9saW5raW5nLnBhdGNoCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi8wNi1hdm9pZF91c3JfbGliX3Rlcm1jYXBfcGF0aF9pbl9saW5raW5nLnBhdGNoCkBAIC0xMSw3ICsxMSw3IEBACiAKIDIwMTEvMDkvMjkKIFJlYmFzZWQgZm9yIHB5dGhvbiAyLjcuMgotU2lnbmVkLU9mZi1CeTogTml0aW4gQSBLYW1ibGUgPG5pdGluLmEua2FtYmxlQGludGVsLmNvbT4KK1NpZ25lZC1vZmYtYnk6IE5pdGluIEEgS2FtYmxlIDxuaXRpbi5hLmthbWJsZUBpbnRlbC5jb20+CiAKIFNpZ25lZC1vZmYtYnk6IFBhdWwgRWdnbGV0b24gPHBhdWwuZWdnbGV0b25AbGludXguaW50ZWwuY29tPgogCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24vQ1ZFLTIwMTYtNTYzNi5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi9DVkUtMjAxNi01NjM2LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjlhMzc0NzEKLS0tIC9kZXYvbnVsbAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24vQ1ZFLTIwMTYtNTYzNi5wYXRjaApAQCAtMCwwICsxLDQ0IEBACisKKyMgSEcgY2hhbmdlc2V0IHBhdGNoCisjIFVzZXIgQmVuamFtaW4gUGV0ZXJzb24gPGJlbmphbWluQHB5dGhvbi5vcmc+CisjIERhdGUgMTQ1MzM1NzQyNCAyODgwMAorIyBOb2RlIElEIDk4NWZjNjRjNjBkNmFkZmZkMTEzOGI2Y2M0NmRmMzg4Y2E5MWNhNWQKKyMgUGFyZW50ICA3ZWM5NTRiOWZjNTQ0NDhhMzViNTZkMjcxMzQwYmExMDllYjM4MWI5CitwcmV2ZW50IGJ1ZmZlciBvdmVyZmxvdyBpbiBnZXRfZGF0YSAoY2xvc2VzICMyNjE3MSkKKworVXBzdHJlYW0tU3RhdHVzOiBCYWNrcG9ydAoraHR0cHM6Ly9oZy5weXRob24ub3JnL2NweXRob24vcmV2Lzk4NWZjNjRjNjBkNgorCitDVkU6IENWRS0yMDE2LTU2MzYKK1NpZ25lZC1vZmYtYnk6IEFybWluIEt1c3RlciA8YWt1c3RlckBtdmlzdGEuY29tPgorCitJbmRleDogUHl0aG9uLTIuNy4xMS9NaXNjL05FV1MKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBQeXRob24tMi43LjExLm9yaWcvTWlzYy9ORVdTCisrKysgUHl0aG9uLTIuNy4xMS9NaXNjL05FV1MKK0BAIC03LDYgKzcsOSBAQCBXaGF0J3MgTmV3IGluIFB5dGhvbiAyLjcuMTE/CisgCisgKlJlbGVhc2UgZGF0ZTogMjAxNS0xMi0wNSoKKyAKKystIElzc3VlICMyNjE3MTogRml4IHBvc3NpYmxlIGludGVnZXIgb3ZlcmZsb3cgYW5kIGhlYXAgY29ycnVwdGlvbiBpbgorKyAgemlwaW1wb3J0ZXIuZ2V0X2RhdGEoKS4KKysKKyBMaWJyYXJ5CisgLS0tLS0tLQorIAorSW5kZXg6IFB5dGhvbi0yLjcuMTEvTW9kdWxlcy96aXBpbXBvcnQuYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIFB5dGhvbi0yLjcuMTEub3JpZy9Nb2R1bGVzL3ppcGltcG9ydC5jCisrKysgUHl0aG9uLTIuNy4xMS9Nb2R1bGVzL3ppcGltcG9ydC5jCitAQCAtODk1LDYgKzg5NSwxMSBAQCBnZXRfZGF0YShjaGFyICphcmNoaXZlLCBQeU9iamVjdCAqdG9jX2VuCisgICAgICAgICBQeU1hcnNoYWxfUmVhZFNob3J0RnJvbUZpbGUoZnApOyAgICAgICAgLyogbG9jYWwgaGVhZGVyIHNpemUgKi8KKyAgICAgZmlsZV9vZmZzZXQgKz0gbDsgICAgICAgICAgIC8qIFN0YXJ0IG9mIGZpbGUgZGF0YSAqLworIAorKyAgICBpZiAoZGF0YV9zaXplID4gTE9OR19NQVggLSAxKSB7CisrICAgICAgICBmY2xvc2UoZnApOworKyAgICAgICAgUHlFcnJfTm9NZW1vcnkoKTsKKysgICAgICAgIHJldHVybiBOVUxMOworKyAgICB9CisgICAgIHJhd19kYXRhID0gUHlTdHJpbmdfRnJvbVN0cmluZ0FuZFNpemUoKGNoYXIgKilOVUxMLCBjb21wcmVzcyA9PSAwID8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhX3NpemUgOiBkYXRhX3NpemUgKyAxKTsKKyAgICAgaWYgKHJhd19kYXRhID09IE5VTEwpIHsKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi9hdm9pZF9wYXJhbGxlbF9tYWtlX3JhY2VzX29uX3BnZW4ucGF0Y2ggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24vYXZvaWRfcGFyYWxsZWxfbWFrZV9yYWNlc19vbl9wZ2VuLnBhdGNoCmluZGV4IGU5YmFlMzIuLjgwMTIyNDUgMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi9hdm9pZF9wYXJhbGxlbF9tYWtlX3JhY2VzX29uX3BnZW4ucGF0Y2gKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uL2F2b2lkX3BhcmFsbGVsX21ha2VfcmFjZXNfb25fcGdlbi5wYXRjaApAQCAtNCw4ICs0LDggQEAKIAogLSBJbXBsZW1lbnRzIFJpY2hhcmQgUHVyZGllJ3MgaWRlYQogCi1TaWduZWQtT2ZmLUJ5OiBSaWNoYXJkIFB1cmRpZSA8cmljaGFyZC5wdXJkaWVAbGludXhmb3VuZGF0aW9uLm9yZz4KLVNpZ25lZC1PZmYtQnk6IEFsZWphbmRybyBIZXJuYW5kZXogPGFsZWphbmRyby5oZXJuYW5kZXpAbGludXguaW50ZWwuY29tPgorU2lnbmVkLW9mZi1ieTogUmljaGFyZCBQdXJkaWUgPHJpY2hhcmQucHVyZGllQGxpbnV4Zm91bmRhdGlvbi5vcmc+CitTaWduZWQtb2ZmLWJ5OiBBbGVqYW5kcm8gSGVybmFuZGV6IDxhbGVqYW5kcm8uaGVybmFuZGV6QGxpbnV4LmludGVsLmNvbT4KIAogSW5kZXg6IFB5dGhvbi0yLjcuOS9NYWtlZmlsZS5wcmUuaW4KID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi9maXhfZm9yX3VzaW5nX2RpZmZlcmVudF9saWJkaXIucGF0Y2ggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24vZml4X2Zvcl91c2luZ19kaWZmZXJlbnRfbGliZGlyLnBhdGNoCmluZGV4IGU0MjYyZDkuLjVmNzMwOTMgMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi9maXhfZm9yX3VzaW5nX2RpZmZlcmVudF9saWJkaXIucGF0Y2gKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uL2ZpeF9mb3JfdXNpbmdfZGlmZmVyZW50X2xpYmRpci5wYXRjaApAQCAtNCwxNSArNCwxNSBAQAogVGhpcyBwYXRjaCBtYWtlcyB0aGUgbmF0aXZlIHB5dGhvbiBiaW5hcnkgbW9kdWxlcyBmaW5kYWJsZQogaW4gdGhlIGluc3RhbGwgcHJvY2VzcyBvZiB0aGUgaG9zdCBweXRob24uCiAKLVNpZ25lZC1PZmYtQnk6IE5pdGluIEEgS2FtYmxlIDxuaXRpbi5hLmthbWJsZUBpbnRlbC5jb20+CitTaWduZWQtb2ZmLWJ5OiBOaXRpbiBBIEthbWJsZSA8bml0aW4uYS5rYW1ibGVAaW50ZWwuY29tPgogRGF0ZTogMjAxMi8wMy8xNAogCiBVcGRhdGVkIGZvciBweXRob24gMi43LjMKLVNpZ25lZC1PZmYtQnk6IE5pdGluIEEgS2FtYmxlIDxuaXRpbi5hLmthbWJsZUBpbnRlbC5jb20+CitTaWduZWQtb2ZmLWJ5OiBOaXRpbiBBIEthbWJsZSA8bml0aW4uYS5rYW1ibGVAaW50ZWwuY29tPgogRGF0ZTogMjAxMi8wNS8wMQogCiBSZWJhc2VkIGZvciBweXRob24tMi43LjkKLVNpZ25lZC1PZmYtQnk6IEFsZWphbmRybyBIZXJuYW5kZXogPGFsZWphbmRyby5oZXJuYW5kZXpAbGludXguaW50ZWwuY29tPgorU2lnbmVkLW9mZi1ieTogQWxlamFuZHJvIEhlcm5hbmRleiA8YWxlamFuZHJvLmhlcm5hbmRlekBsaW51eC5pbnRlbC5jb20+CiAKIAogSW5kZXg6IFB5dGhvbi0yLjcuOS9MaWIvc3lzY29uZmlnLnB5CmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24vbXVsdGlsaWIucGF0Y2ggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24vbXVsdGlsaWIucGF0Y2gKaW5kZXggMGJmYTBkMi4uYjE2OTEzMyAxMDA2NDQKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uL211bHRpbGliLnBhdGNoCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi9tdWx0aWxpYi5wYXRjaApAQCAtMSwxMSArMSwxMSBAQAogUmViYXNlZCBmb3IgcHl0aG9uLTIuNy45Ci1TaWduZWQtT2ZmLUJ5OiBBbGVqYW5kcm8gSGVybmFuZGV6IDxhbGVqYW5kcm8uaGVybmFuZGV6QGxpbnV4LmludGVsLmNvbT4KK1NpZ25lZC1vZmYtYnk6IEFsZWphbmRybyBIZXJuYW5kZXogPGFsZWphbmRyby5oZXJuYW5kZXpAbGludXguaW50ZWwuY29tPgogCi1JbmRleDogUHl0aG9uLTIuNy45L2NvbmZpZ3VyZS5hYworSW5kZXg6IFB5dGhvbi0yLjcuMTIvY29uZmlndXJlLmFjCiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLS0gUHl0aG9uLTIuNy45Lm9yaWcvY29uZmlndXJlLmFjCi0rKysgUHl0aG9uLTIuNy45L2NvbmZpZ3VyZS5hYwotQEAgLTczNiw2ICs3MzYsMTAgQEAgU3VuT1MqKQorLS0tIFB5dGhvbi0yLjcuMTIub3JpZy9jb25maWd1cmUuYWMKKysrKyBQeXRob24tMi43LjEyL2NvbmZpZ3VyZS5hYworQEAgLTc1Niw2ICs3NTYsMTAgQEAgU3VuT1MqKQogICAgICA7OwogIGVzYWMKICAKQEAgLTE2LDEwICsxNiwxMCBAQAogIAogIEFDX1NVQlNUKExJQlJBUlkpCiAgQUNfTVNHX0NIRUNLSU5HKExJQlJBUlkpCi1JbmRleDogUHl0aG9uLTIuNy45L0luY2x1ZGUvcHl0aG9ucnVuLmgKK0luZGV4OiBQeXRob24tMi43LjEyL0luY2x1ZGUvcHl0aG9ucnVuLmgKID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tLSBQeXRob24tMi43Ljkub3JpZy9JbmNsdWRlL3B5dGhvbnJ1bi5oCi0rKysgUHl0aG9uLTIuNy45L0luY2x1ZGUvcHl0aG9ucnVuLmgKKy0tLSBQeXRob24tMi43LjEyLm9yaWcvSW5jbHVkZS9weXRob25ydW4uaAorKysrIFB5dGhvbi0yLjcuMTIvSW5jbHVkZS9weXRob25ydW4uaAogQEAgLTEwOCw2ICsxMDgsNyBAQCBQeUFQSV9GVU5DKGNoYXIgKikgUHlfR2V0UGF0aCh2b2lkKTsKICAvKiBJbiB0aGVpciBvd24gZmlsZXMgKi8KICBQeUFQSV9GVU5DKGNvbnN0IGNoYXIgKikgUHlfR2V0VmVyc2lvbih2b2lkKTsKQEAgLTI4LDEwICsyOCwxMCBAQAogIFB5QVBJX0ZVTkMoY29uc3QgY2hhciAqKSBQeV9HZXRDb3B5cmlnaHQodm9pZCk7CiAgUHlBUElfRlVOQyhjb25zdCBjaGFyICopIFB5X0dldENvbXBpbGVyKHZvaWQpOwogIFB5QVBJX0ZVTkMoY29uc3QgY2hhciAqKSBQeV9HZXRCdWlsZEluZm8odm9pZCk7Ci1JbmRleDogUHl0aG9uLTIuNy45L0xpYi9kaXN0dXRpbHMvY29tbWFuZC9pbnN0YWxsLnB5CitJbmRleDogUHl0aG9uLTIuNy4xMi9MaWIvZGlzdHV0aWxzL2NvbW1hbmQvaW5zdGFsbC5weQogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0tIFB5dGhvbi0yLjcuOS5vcmlnL0xpYi9kaXN0dXRpbHMvY29tbWFuZC9pbnN0YWxsLnB5Ci0rKysgUHl0aG9uLTIuNy45L0xpYi9kaXN0dXRpbHMvY29tbWFuZC9pbnN0YWxsLnB5CistLS0gUHl0aG9uLTIuNy4xMi5vcmlnL0xpYi9kaXN0dXRpbHMvY29tbWFuZC9pbnN0YWxsLnB5CisrKysgUHl0aG9uLTIuNy4xMi9MaWIvZGlzdHV0aWxzL2NvbW1hbmQvaW5zdGFsbC5weQogQEAgLTIyLDYgKzIyLDggQEAgZnJvbSBzaXRlIGltcG9ydCBVU0VSX0JBU0UKICBmcm9tIHNpdGUgaW1wb3J0IFVTRVJfU0lURQogIApAQCAtNTAsMTAgKzUwLDEwIEBACiAgICAgICAgICAnaGVhZGVycyc6ICckYmFzZS9pbmNsdWRlL3B5dGhvbiRweV92ZXJzaW9uX3Nob3J0LyRkaXN0X25hbWUnLAogICAgICAgICAgJ3NjcmlwdHMnOiAnJGJhc2UvYmluJywKICAgICAgICAgICdkYXRhJyAgIDogJyRiYXNlJywKLUluZGV4OiBQeXRob24tMi43LjkvTGliL2Rpc3R1dGlscy9zeXNjb25maWcucHkKK0luZGV4OiBQeXRob24tMi43LjEyL0xpYi9kaXN0dXRpbHMvc3lzY29uZmlnLnB5CiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLS0gUHl0aG9uLTIuNy45Lm9yaWcvTGliL2Rpc3R1dGlscy9zeXNjb25maWcucHkKLSsrKyBQeXRob24tMi43LjkvTGliL2Rpc3R1dGlscy9zeXNjb25maWcucHkKKy0tLSBQeXRob24tMi43LjEyLm9yaWcvTGliL2Rpc3R1dGlscy9zeXNjb25maWcucHkKKysrKyBQeXRob24tMi43LjEyL0xpYi9kaXN0dXRpbHMvc3lzY29uZmlnLnB5CiBAQCAtMTE5LDggKzExOSwxMSBAQCBkZWYgZ2V0X3B5dGhvbl9saWIocGxhdF9zcGVjaWZpYz0wLCBzdGFuCiAgICAgICAgICBwcmVmaXggPSBwbGF0X3NwZWNpZmljIGFuZCBFWEVDX1BSRUZJWCBvciBQUkVGSVgKICAKQEAgLTY4LDExICs2OCwxMSBAQAogICAgICAgICAgaWYgc3RhbmRhcmRfbGliOgogICAgICAgICAgICAgIHJldHVybiBsaWJweXRob24KICAgICAgICAgIGVsc2U6Ci1JbmRleDogUHl0aG9uLTIuNy45L0xpYi9weWRvYy5weQorSW5kZXg6IFB5dGhvbi0yLjcuMTIvTGliL3B5ZG9jLnB5CiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLS0gUHl0aG9uLTIuNy45Lm9yaWcvTGliL3B5ZG9jLnB5Ci0rKysgUHl0aG9uLTIuNy45L0xpYi9weWRvYy5weQotQEAgLTM4Myw3ICszODMsNyBAQCBjbGFzcyBEb2M6CistLS0gUHl0aG9uLTIuNy4xMi5vcmlnL0xpYi9weWRvYy5weQorKysrIFB5dGhvbi0yLjcuMTIvTGliL3B5ZG9jLnB5CitAQCAtMzg0LDcgKzM4NCw3IEBAIGNsYXNzIERvYzoKICAKICAgICAgICAgIGRvY2xvYyA9IG9zLmVudmlyb24uZ2V0KCJQWVRIT05ET0NTIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJodHRwOi8vZG9jcy5weXRob24ub3JnL2xpYnJhcnkiKQpAQCAtODEsMTAgKzgxLDEwIEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJweXRob24iK3N5cy52ZXJzaW9uWzA6M10pCiAgICAgICAgICBpZiAoaXNpbnN0YW5jZShvYmplY3QsIHR5cGUob3MpKSBhbmQKICAgICAgICAgICAgICAob2JqZWN0Ll9fbmFtZV9fIGluICgnZXJybm8nLCAnZXhjZXB0aW9ucycsICdnYycsICdpbXAnLAotSW5kZXg6IFB5dGhvbi0yLjcuOS9MaWIvc2l0ZS5weQorSW5kZXg6IFB5dGhvbi0yLjcuMTIvTGliL3NpdGUucHkKID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tLSBQeXRob24tMi43Ljkub3JpZy9MaWIvc2l0ZS5weQotKysrIFB5dGhvbi0yLjcuOS9MaWIvc2l0ZS5weQorLS0tIFB5dGhvbi0yLjcuMTIub3JpZy9MaWIvc2l0ZS5weQorKysrIFB5dGhvbi0yLjcuMTIvTGliL3NpdGUucHkKIEBAIC0yODgsMTMgKzI4OCwxOCBAQCBkZWYgZ2V0c2l0ZXBhY2thZ2VzKCk6CiAgICAgICAgICBpZiBzeXMucGxhdGZvcm0gaW4gKCdvczJlbXgnLCAncmlzY29zJyk6CiAgICAgICAgICAgICAgc2l0ZXBhY2thZ2VzLmFwcGVuZChvcy5wYXRoLmpvaW4ocHJlZml4LCAiTGliIiwgInNpdGUtcGFja2FnZXMiKSkKQEAgLTEwNywxMCArMTA3LDEwIEBACiAgICAgICAgICBpZiBzeXMucGxhdGZvcm0gPT0gImRhcndpbiI6CiAgICAgICAgICAgICAgIyBmb3IgZnJhbWV3b3JrIGJ1aWxkcyAqb25seSogd2UgYWRkIHRoZSBzdGFuZGFyZCBBcHBsZQogICAgICAgICAgICAgICMgbG9jYXRpb25zLgotSW5kZXg6IFB5dGhvbi0yLjcuOS9MaWIvc3lzY29uZmlnLnB5CitJbmRleDogUHl0aG9uLTIuNy4xMi9MaWIvc3lzY29uZmlnLnB5CiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLS0gUHl0aG9uLTIuNy45Lm9yaWcvTGliL3N5c2NvbmZpZy5weQotKysrIFB5dGhvbi0yLjcuOS9MaWIvc3lzY29uZmlnLnB5CistLS0gUHl0aG9uLTIuNy4xMi5vcmlnL0xpYi9zeXNjb25maWcucHkKKysrKyBQeXRob24tMi43LjEyL0xpYi9zeXNjb25maWcucHkKIEBAIC03LDEwICs3LDEwIEBAIGZyb20gb3MucGF0aCBpbXBvcnQgcGFyZGlyLCByZWFscGF0aAogIAogIF9JTlNUQUxMX1NDSEVNRVMgPSB7CkBAIC0xMzksMTAgKzEzOSwxMCBAQAogICAgICAgICAgJ2luY2x1ZGUnOiAne3VzZXJiYXNlfS9pbmNsdWRlL3B5dGhvbntweV92ZXJzaW9uX3Nob3J0fScsCiAgICAgICAgICAnc2NyaXB0cyc6ICd7dXNlcmJhc2V9L2JpbicsCiAgICAgICAgICAnZGF0YScgICA6ICd7dXNlcmJhc2V9JywKLUluZGV4OiBQeXRob24tMi43LjkvTGliL3Rlc3QvdGVzdF9kbC5weQorSW5kZXg6IFB5dGhvbi0yLjcuMTIvTGliL3Rlc3QvdGVzdF9kbC5weQogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0tIFB5dGhvbi0yLjcuOS5vcmlnL0xpYi90ZXN0L3Rlc3RfZGwucHkKLSsrKyBQeXRob24tMi43LjkvTGliL3Rlc3QvdGVzdF9kbC5weQorLS0tIFB5dGhvbi0yLjcuMTIub3JpZy9MaWIvdGVzdC90ZXN0X2RsLnB5CisrKysgUHl0aG9uLTIuNy4xMi9MaWIvdGVzdC90ZXN0X2RsLnB5CiBAQCAtNCwxMCArNCwxMSBAQAogIGltcG9ydCB1bml0dGVzdAogIGZyb20gdGVzdC50ZXN0X3N1cHBvcnQgaW1wb3J0IHZlcmJvc2UsIGltcG9ydF9tb2R1bGUKQEAgLTE1NywxMSArMTU3LDExIEBACiAgICAgICgnL3Vzci9iaW4vY3lnd2luMS5kbGwnLCAnZ2V0cGlkJyksCiAgICAgICgnL3Vzci9saWIvbGliYy5keWxpYicsICdnZXRwaWQnKSwKICAgICAgXQotSW5kZXg6IFB5dGhvbi0yLjcuOS9MaWIvdGVzdC90ZXN0X3NpdGUucHkKK0luZGV4OiBQeXRob24tMi43LjEyL0xpYi90ZXN0L3Rlc3Rfc2l0ZS5weQogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0tIFB5dGhvbi0yLjcuOS5vcmlnL0xpYi90ZXN0L3Rlc3Rfc2l0ZS5weQotKysrIFB5dGhvbi0yLjcuOS9MaWIvdGVzdC90ZXN0X3NpdGUucHkKLUBAIC0yNDEsMTIgKzI0MSwxNiBAQCBjbGFzcyBIZWxwZXJGdW5jdGlvbnNUZXN0cyh1bml0dGVzdC5UZXN0CistLS0gUHl0aG9uLTIuNy4xMi5vcmlnL0xpYi90ZXN0L3Rlc3Rfc2l0ZS5weQorKysrIFB5dGhvbi0yLjcuMTIvTGliL3Rlc3QvdGVzdF9zaXRlLnB5CitAQCAtMjQ2LDEyICsyNDYsMTYgQEAgY2xhc3MgSGVscGVyRnVuY3Rpb25zVGVzdHModW5pdHRlc3QuVGVzdAogICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZGlyc1syXSwgd2FudGVkKQogICAgICAgICAgZWxpZiBvcy5zZXAgPT0gJy8nOgogICAgICAgICAgICAgICMgT1MgWCBub24tZnJhbXdld29yayBidWlsZHMsIExpbnV4LCBGcmVlQlNELCBldGMKQEAgLTE4MSwxMCArMTgxLDEwIEBACiAgICAgICAgICBlbHNlOgogICAgICAgICAgICAgICMgb3RoZXIgcGxhdGZvcm1zCiAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oZGlycyksIDIpCi1JbmRleDogUHl0aG9uLTIuNy45L0xpYi90cmFjZS5weQorSW5kZXg6IFB5dGhvbi0yLjcuMTIvTGliL3RyYWNlLnB5CiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLS0gUHl0aG9uLTIuNy45Lm9yaWcvTGliL3RyYWNlLnB5Ci0rKysgUHl0aG9uLTIuNy45L0xpYi90cmFjZS5weQorLS0tIFB5dGhvbi0yLjcuMTIub3JpZy9MaWIvdHJhY2UucHkKKysrKyBQeXRob24tMi43LjEyL0xpYi90cmFjZS5weQogQEAgLTc1NCwxMCArNzU0LDEwIEBAIGRlZiBtYWluKGFyZ3Y9Tm9uZSk6CiAgICAgICAgICAgICAgICAgICMgc2hvdWxkIEkgYWxzbyBjYWxsIGV4cGFuZHVzZXI/IChhZnRlciBhbGwsIGNvdWxkIHVzZSAkSE9NRSkKICAKQEAgLTE5OCwxMSArMTk4LDExIEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJweXRob24iICsgc3lzLnZlcnNpb25bOjNdKSkKICAgICAgICAgICAgICAgICAgcyA9IG9zLnBhdGgubm9ybXBhdGgocykKICAgICAgICAgICAgICAgICAgaWdub3JlX2RpcnMuYXBwZW5kKHMpCi1JbmRleDogUHl0aG9uLTIuNy45L01ha2VmaWxlLnByZS5pbgorSW5kZXg6IFB5dGhvbi0yLjcuMTIvTWFrZWZpbGUucHJlLmluCiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLS0gUHl0aG9uLTIuNy45Lm9yaWcvTWFrZWZpbGUucHJlLmluCi0rKysgUHl0aG9uLTIuNy45L01ha2VmaWxlLnByZS5pbgotQEAgLTg3LDYgKzg3LDcgQEAgUFlfQ0ZMQUdTPQkkKENGTEFHUykgJChDUFBGTEFHUykgJChDRkxBRworLS0tIFB5dGhvbi0yLjcuMTIub3JpZy9NYWtlZmlsZS5wcmUuaW4KKysrKyBQeXRob24tMi43LjEyL01ha2VmaWxlLnByZS5pbgorQEAgLTkyLDYgKzkyLDcgQEAgUFlfQ0ZMQUdTPQkkKENGTEFHUykgJChDUFBGTEFHUykgJChDRkxBRwogIAogICMgTWFjaGluZS1kZXBlbmRlbnQgc3ViZGlyZWN0b3JpZXMKICBNQUNIREVQPQlATUFDSERFUEAKQEAgLTIxMCw3ICsyMTAsNyBAQAogIAogICMgTXVsdGlhcmNoIGRpcmVjdG9yeSAobWF5IGJlIGVtcHR5KQogIE1VTFRJQVJDSD0JQE1VTFRJQVJDSEAKLUBAIC0xMDYsNyArMTA3LDcgQEAgTElCRElSPQkJQGxpYmRpckAKK0BAIC0xMTEsNyArMTEyLDcgQEAgTElCRElSPQkJQGxpYmRpckAKICBNQU5ESVI9CQlAbWFuZGlyQAogIElOQ0xVREVESVI9CUBpbmNsdWRlZGlyQAogIENPTkZJTkNMVURFRElSPQkkKGV4ZWNfcHJlZml4KS9pbmNsdWRlCkBAIC0yMTksNyArMjE5LDcgQEAKICAKICAjIERldGFpbGVkIGRlc3RpbmF0aW9uIGRpcmVjdG9yaWVzCiAgQklOTElCREVTVD0JJChMSUJESVIpL3B5dGhvbiQoVkVSU0lPTikKLUBAIC01OTgsNiArNTk5LDcgQEAgTW9kdWxlcy9nZXRwYXRoLm86ICQoc3JjZGlyKS9Nb2R1bGVzL2dldAorQEAgLTY3MCw2ICs2NzEsNyBAQCBNb2R1bGVzL2dldHBhdGgubzogJChzcmNkaXIpL01vZHVsZXMvZ2V0CiAgCQktREVYRUNfUFJFRklYPSciJChleGVjX3ByZWZpeCkiJyBcCiAgCQktRFZFUlNJT049JyIkKFZFUlNJT04pIicgXAogIAkJLURWUEFUSD0nIiQoVlBBVEgpIicgXApAQCAtMjI3LDcgKzIyNyw3IEBACiAgCQktbyAkQCAkKHNyY2RpcikvTW9kdWxlcy9nZXRwYXRoLmMKICAKICBNb2R1bGVzL3B5dGhvbi5vOiAkKHNyY2RpcikvTW9kdWxlcy9weXRob24uYwotQEAgLTY0MCw3ICs2NDIsNyBAQCAkKEFTVF9DKTogJChBU1RfQVNETCkgJChBU0RMR0VOX0ZJTEVTKQorQEAgLTcyMSw3ICs3MjMsNyBAQCAkKEFTVF9DKTogJChBU1RfQVNETCkgJChBU0RMR0VOX0ZJTEVTKQogIFB5dGhvbi9jb21waWxlLm8gUHl0aG9uL3N5bXRhYmxlLm8gUHl0aG9uL2FzdC5vOiAkKEdSQU1NQVJfSCkgJChBU1RfSCkKICAKICBQeXRob24vZ2V0cGxhdGZvcm0ubzogJChzcmNkaXIpL1B5dGhvbi9nZXRwbGF0Zm9ybS5jCkBAIC0yMzYsMjUgKzIzNiwyNSBAQAogIAogIFB5dGhvbi9pbXBvcnRkbC5vOiAkKHNyY2RpcikvUHl0aG9uL2ltcG9ydGRsLmMKICAJCSQoQ0MpIC1jICQoUFlfQ0ZMQUdTKSAtSSQoRExJTkNMRElSKSAtbyAkQCAkKHNyY2RpcikvUHl0aG9uL2ltcG9ydGRsLmMKLUluZGV4OiBQeXRob24tMi43LjkvTW9kdWxlcy9nZXRwYXRoLmMKK0luZGV4OiBQeXRob24tMi43LjEyL01vZHVsZXMvZ2V0cGF0aC5jCiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLS0gUHl0aG9uLTIuNy45Lm9yaWcvTW9kdWxlcy9nZXRwYXRoLmMKLSsrKyBQeXRob24tMi43LjkvTW9kdWxlcy9nZXRwYXRoLmMKLUBAIC0xMTYsOSArMTE2LDExIEBACi0gI2RlZmluZSBFWEVDX1BSRUZJWCBQUkVGSVgKKy0tLSBQeXRob24tMi43LjEyLm9yaWcvTW9kdWxlcy9nZXRwYXRoLmMKKysrKyBQeXRob24tMi43LjEyL01vZHVsZXMvZ2V0cGF0aC5jCitAQCAtMTAwLDYgKzEwMCwxMyBAQAorICNlcnJvciAiUFJFRklYLCBFWEVDX1BSRUZJWCwgVkVSU0lPTiwgYW5kIFZQQVRIIG11c3QgYmUgY29uc3RhbnQgZGVmaW5lZCIKICAjZW5kaWYKICAKICsjZGVmaW5lIExJQl9QWVRIT04gTElCICIvcHl0aG9uIiBWRVJTSU9OCiArCi0gI2lmbmRlZiBQWVRIT05QQVRICi0tI2RlZmluZSBQWVRIT05QQVRIIFBSRUZJWCAiL2xpYi9weXRob24iIFZFUlNJT04gIjoiIFwKLS0gICAgICAgICAgICAgIEVYRUNfUFJFRklYICIvbGliL3B5dGhvbiIgVkVSU0lPTiAiL2xpYi1keW5sb2FkIgorKyNpZm5kZWYgUFlUSE9OUEFUSAogKyNkZWZpbmUgUFlUSE9OUEFUSCBQUkVGSVggIi8iIExJQl9QWVRIT04gIjoiIFwKICsgICAgICAgICAgICAgIEVYRUNfUFJFRklYICIvIiBMSUJfUFlUSE9OICIvbGliLWR5bmxvYWQiCi0gI2VuZGlmCi0gCisrI2VuZGlmCisrCiAgI2lmbmRlZiBMQU5ETUFSSwotQEAgLTEyOSw3ICsxMzEsNyBAQCBzdGF0aWMgY2hhciBwcmVmaXhbTUFYUEFUSExFTisxXTsKKyAjZGVmaW5lIExBTkRNQVJLICJvcy5weSIKKyAjZW5kaWYKK0BAIC0xMDgsNyArMTE1LDcgQEAgc3RhdGljIGNoYXIgcHJlZml4W01BWFBBVEhMRU4rMV07CiAgc3RhdGljIGNoYXIgZXhlY19wcmVmaXhbTUFYUEFUSExFTisxXTsKICBzdGF0aWMgY2hhciBwcm9ncGF0aFtNQVhQQVRITEVOKzFdOwogIHN0YXRpYyBjaGFyICptb2R1bGVfc2VhcmNoX3BhdGggPSBOVUxMOwpAQCAtMjYzLDEwICsyNjMsMTAgQEAKICAKICBzdGF0aWMgdm9pZAogIHJlZHVjZShjaGFyICpkaXIpCi1JbmRleDogUHl0aG9uLTIuNy45L1B5dGhvbi9nZXRwbGF0Zm9ybS5jCitJbmRleDogUHl0aG9uLTIuNy4xMi9QeXRob24vZ2V0cGxhdGZvcm0uYwogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0tIFB5dGhvbi0yLjcuOS5vcmlnL1B5dGhvbi9nZXRwbGF0Zm9ybS5jCi0rKysgUHl0aG9uLTIuNy45L1B5dGhvbi9nZXRwbGF0Zm9ybS5jCistLS0gUHl0aG9uLTIuNy4xMi5vcmlnL1B5dGhvbi9nZXRwbGF0Zm9ybS5jCisrKysgUHl0aG9uLTIuNy4xMi9QeXRob24vZ2V0cGxhdGZvcm0uYwogQEAgLTEwLDMgKzEwLDEzIEBAIFB5X0dldFBsYXRmb3JtKHZvaWQpCiAgewogIAlyZXR1cm4gUExBVEZPUk07CkBAIC0yODEsMTAgKzI4MSwxMCBAQAogK3sKICsJcmV0dXJuIExJQjsKICt9Ci1JbmRleDogUHl0aG9uLTIuNy45L1B5dGhvbi9zeXNtb2R1bGUuYworSW5kZXg6IFB5dGhvbi0yLjcuMTIvUHl0aG9uL3N5c21vZHVsZS5jCiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLS0gUHl0aG9uLTIuNy45Lm9yaWcvUHl0aG9uL3N5c21vZHVsZS5jCi0rKysgUHl0aG9uLTIuNy45L1B5dGhvbi9zeXNtb2R1bGUuYworLS0tIFB5dGhvbi0yLjcuMTIub3JpZy9QeXRob24vc3lzbW9kdWxlLmMKKysrKyBQeXRob24tMi43LjEyL1B5dGhvbi9zeXNtb2R1bGUuYwogQEAgLTE0MzcsNiArMTQzNyw4IEBAIF9QeVN5c19Jbml0KHZvaWQpCiAgICAgICAgICAgICAgICAgICAgICAgICAgUHlTdHJpbmdfRnJvbVN0cmluZyhQeV9HZXRDb3B5cmlnaHQoKSkpOwogICAgICBTRVRfU1lTX0ZST01fU1RSSU5HKCJwbGF0Zm9ybSIsCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24vcHl0aG9uLWZpeC1DVkUtMjAxNi0xMDAwMTEwLnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uL3B5dGhvbi1maXgtQ1ZFLTIwMTYtMTAwMDExMC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45Nzg4OGUyCi0tLSAvZGV2L251bGwKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uL3B5dGhvbi1maXgtQ1ZFLTIwMTYtMTAwMDExMC5wYXRjaApAQCAtMCwwICsxLDE2MiBAQAorRnJvbSBjYjI1ZmJkNWFiYzBmNGViMDdkYmI4ZWE4MTllOWMyNmJkYTRmYzk5IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogU2VudGhpbCBLdW1hcmFuIDxzZW50aGlsQHV0aGNvZGUuY29tPgorRGF0ZTogU2F0LCAzMCBKdWwgMjAxNiAwNTo0OTo1MyAtMDcwMAorU3ViamVjdDogW1BBVENIXSBweXRob246IGZpeCBDVkUtMjAxNi0xMDAwMTEwCitNSU1FLVZlcnNpb246IDEuMAorQ29udGVudC1UeXBlOiB0ZXh0L3BsYWluOyBjaGFyc2V0PVVURi04CitDb250ZW50LVRyYW5zZmVyLUVuY29kaW5nOiA4Yml0CisKK1ByZXZlbnQgSFRUUG94eSBhdHRhY2sgKENWRS0yMDE2LTEwMDAxMTApCisKK0lnbm9yZSB0aGUgSFRUUF9QUk9YWSB2YXJpYWJsZSB3aGVuIFJFUVVFU1RfTUVUSE9EIGVudmlyb25tZW50IGlzIHNldCwgd2hpY2gKK2luZGljYXRlcyB0aGF0IHRoZSBzY3JpcHQgaXMgaW4gQ0dJIG1vZGUuCisKK0lzc3VlIHJlcG9ydGVkIGFuZCBwYXRjaCBjb250cmlidXRlZCBieSBSw6ltaSBSYW1waW4uCisKK0JhY2twb3J0IHBhdGNoIGZyb20gaHR0cHM6Ly9oZy5weXRob24ub3JnL2NweXRob24vcmV2L2JhOTE1ZDU2MTY2Ny8KKworVXBzdHJlYW0tU3RhdHVzOiBCYWNrcG9ydAorQ1ZFOiBDVkUtMjAxNi0xMDAwMTEwCitTaWduZWQtb2ZmLWJ5OiBNaW5nbGkgWXUgPE1pbmdsaS5ZdUB3aW5kcml2ZXIuY29tPgorLS0tCisgRG9jL2hvd3RvL3VybGxpYjIucnN0ICAgfCAgNSArKysrKworIERvYy9saWJyYXJ5L3VybGxpYi5yc3QgIHwgMTAgKysrKysrKysrKworIERvYy9saWJyYXJ5L3VybGxpYjIucnN0IHwgIDUgKysrKysKKyBMaWIvdGVzdC90ZXN0X3VybGxpYi5weSB8IDEyICsrKysrKysrKysrKworIExpYi91cmxsaWIucHkgICAgICAgICAgIHwgIDkgKysrKysrKysrCisgTWlzYy9BQ0tTICAgICAgICAgICAgICAgfCAgMSArCisgTWlzYy9ORVdTICAgICAgICAgICAgICAgfCAgNCArKysrCisgNyBmaWxlcyBjaGFuZ2VkLCA0NiBpbnNlcnRpb25zKCspCisKK2RpZmYgLS1naXQgYS9Eb2MvaG93dG8vdXJsbGliMi5yc3QgYi9Eb2MvaG93dG8vdXJsbGliMi5yc3QKK2luZGV4IDZiYjA2ZDQuLjVjZjJjMGMgMTAwNjQ0CistLS0gYS9Eb2MvaG93dG8vdXJsbGliMi5yc3QKKysrKyBiL0RvYy9ob3d0by91cmxsaWIyLnJzdAorQEAgLTUyNSw2ICs1MjUsMTEgQEAgc2V0dGluZyB1cCBhIGBCYXNpYyBBdXRoZW50aWNhdGlvbmBfIGhhbmRsZXI6IDo6CisgICAgIHRocm91Z2ggYSBwcm94eS4gIEhvd2V2ZXIsIHRoaXMgY2FuIGJlIGVuYWJsZWQgYnkgZXh0ZW5kaW5nIHVybGxpYjIgYXMKKyAgICAgc2hvd24gaW4gdGhlIHJlY2lwZSBbI11fLgorIAorKy4uIG5vdGU6OgorKworKyAgICBgYEhUVFBfUFJPWFlgYCB3aWxsIGJlIGlnbm9yZWQgaWYgYSB2YXJpYWJsZSBgYFJFUVVFU1RfTUVUSE9EYGAgaXMgc2V0OyBzZWUKKysgICAgdGhlIGRvY3VtZW50YXRpb24gb24gOmZ1bmM6YH51cmxsaWIuZ2V0cHJveGllc2AuCisrCisgCisgU29ja2V0cyBhbmQgTGF5ZXJzCisgPT09PT09PT09PT09PT09PT09CitkaWZmIC0tZ2l0IGEvRG9jL2xpYnJhcnkvdXJsbGliLnJzdCBiL0RvYy9saWJyYXJ5L3VybGxpYi5yc3QKK2luZGV4IDNiNWRjMTYuLmJkZGNiYTkgMTAwNjQ0CistLS0gYS9Eb2MvbGlicmFyeS91cmxsaWIucnN0CisrKysgYi9Eb2MvbGlicmFyeS91cmxsaWIucnN0CitAQCAtMjk1LDYgKzI5NSwxNiBAQCBVdGlsaXR5IGZ1bmN0aW9ucworICAgIElmIGJvdGggbG93ZXJjYXNlIGFuZCB1cHBlcmNhc2UgZW52aXJvbm1lbnQgdmFyaWFibGVzIGV4aXN0IChhbmQgZGlzYWdyZWUpLAorICAgIGxvd2VyY2FzZSBpcyBwcmVmZXJyZWQuCisgCisrICAgIC4uIG5vdGU6OgorKworKyAgICAgICAgSWYgdGhlIGVudmlyb25tZW50IHZhcmlhYmxlIGBgUkVRVUVTVF9NRVRIT0RgYCBpcyBzZXQsIHdoaWNoIHVzdWFsbHkKKysgICAgICAgIGluZGljYXRlcyB5b3VyIHNjcmlwdCBpcyBydW5uaW5nIGluIGEgQ0dJIGVudmlyb25tZW50LCB0aGUgZW52aXJvbm1lbnQKKysgICAgICAgIHZhcmlhYmxlIGBgSFRUUF9QUk9YWWBgICh1cHBlcmNhc2UgYGBfUFJPWFlgYCkgd2lsbCBiZSBpZ25vcmVkLiBUaGlzIGlzCisrICAgICAgICBiZWNhdXNlIHRoYXQgdmFyaWFibGUgY2FuIGJlIGluamVjdGVkIGJ5IGEgY2xpZW50IHVzaW5nIHRoZSAiUHJveHk6IgorKyAgICAgICAgSFRUUCBoZWFkZXIuIElmIHlvdSBuZWVkIHRvIHVzZSBhbiBIVFRQIHByb3h5IGluIGEgQ0dJIGVudmlyb25tZW50LAorKyAgICAgICAgZWl0aGVyIHVzZSBgYFByb3h5SGFuZGxlcmBgIGV4cGxpY2l0bHksIG9yIG1ha2Ugc3VyZSB0aGUgdmFyaWFibGUgbmFtZQorKyAgICAgICAgaXMgaW4gbG93ZXJjYXNlIChvciBhdCBsZWFzdCB0aGUgYGBfcHJveHlgYCBzdWZmaXgpLgorKworIC4uIG5vdGU6OgorICAgICB1cmxsaWIgYWxzbyBleHBvc2VzIGNlcnRhaW4gdXRpbGl0eSBmdW5jdGlvbnMgbGlrZSBzcGxpdHR5cGUsIHNwbGl0aG9zdCBhbmQKKyAgICAgb3RoZXJzIHBhcnNpbmcgVVJMIGludG8gdmFyaW91cyBjb21wb25lbnRzLiBCdXQgaXQgaXMgcmVjb21tZW5kZWQgdG8gdXNlCitkaWZmIC0tZ2l0IGEvRG9jL2xpYnJhcnkvdXJsbGliMi5yc3QgYi9Eb2MvbGlicmFyeS91cmxsaWIyLnJzdAoraW5kZXggOGE0YzgwZS4uYjgwOGI5OCAxMDA2NDQKKy0tLSBhL0RvYy9saWJyYXJ5L3VybGxpYjIucnN0CisrKysgYi9Eb2MvbGlicmFyeS91cmxsaWIyLnJzdAorQEAgLTIyOSw2ICsyMjksMTEgQEAgVGhlIGZvbGxvd2luZyBjbGFzc2VzIGFyZSBwcm92aWRlZDoKKyAKKyAgICBUbyBkaXNhYmxlIGF1dG9kZXRlY3RlZCBwcm94eSBwYXNzIGFuIGVtcHR5IGRpY3Rpb25hcnkuCisgCisrICAgIC4uIG5vdGU6OgorKworKyAgICAgICBgYEhUVFBfUFJPWFlgYCB3aWxsIGJlIGlnbm9yZWQgaWYgYSB2YXJpYWJsZSBgYFJFUVVFU1RfTUVUSE9EYGAgaXMgc2V0OworKyAgICAgICBzZWUgdGhlIGRvY3VtZW50YXRpb24gb24gOmZ1bmM6YH51cmxsaWIuZ2V0cHJveGllc2AuCisrCisgCisgLi4gY2xhc3M6OiBIVFRQUGFzc3dvcmRNZ3IoKQorIAorZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfdXJsbGliLnB5IGIvTGliL3Rlc3QvdGVzdF91cmxsaWIucHkKK2luZGV4IDQzNGQ1MzMuLjI3YTFkMzggMTAwNjQ0CistLS0gYS9MaWIvdGVzdC90ZXN0X3VybGxpYi5weQorKysrIGIvTGliL3Rlc3QvdGVzdF91cmxsaWIucHkKK0BAIC0xNzAsNiArMTcwLDE4IEBAIGNsYXNzIFByb3h5VGVzdHModW5pdHRlc3QuVGVzdENhc2UpOgorICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHVybGxpYi5wcm94eV9ieXBhc3NfZW52aXJvbm1lbnQoJ2Fub3RoZXJkb21haW4uY29tOjg4ODgnKSkKKyAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh1cmxsaWIucHJveHlfYnlwYXNzX2Vudmlyb25tZW50KCduZXdkb21haW4uY29tOjEyMzQnKSkKKyAKKysgICAgZGVmIHRlc3RfcHJveHlfY2dpX2lnbm9yZShzZWxmKToKKysgICAgICAgIHRyeToKKysgICAgICAgICAgICBzZWxmLmVudi5zZXQoJ0hUVFBfUFJPWFknLCAnaHR0cDovL3NvbWV3aGVyZTozMTI4JykKKysgICAgICAgICAgICBwcm94aWVzID0gdXJsbGliLmdldHByb3hpZXNfZW52aXJvbm1lbnQoKQorKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJ2h0dHA6Ly9zb21ld2hlcmU6MzEyOCcsIHByb3hpZXNbJ2h0dHAnXSkKKysgICAgICAgICAgICBzZWxmLmVudi5zZXQoJ1JFUVVFU1RfTUVUSE9EJywgJ0dFVCcpCisrICAgICAgICAgICAgcHJveGllcyA9IHVybGxpYi5nZXRwcm94aWVzX2Vudmlyb25tZW50KCkKKysgICAgICAgICAgICBzZWxmLmFzc2VydE5vdEluKCdodHRwJywgcHJveGllcykKKysgICAgICAgIGZpbmFsbHk6CisrICAgICAgICAgICAgc2VsZi5lbnYudW5zZXQoJ1JFUVVFU1RfTUVUSE9EJykKKysgICAgICAgICAgICBzZWxmLmVudi51bnNldCgnSFRUUF9QUk9YWScpCisrCisgICAgIGRlZiB0ZXN0X3Byb3h5X2J5cGFzc19lbnZpcm9ubWVudF9ob3N0X21hdGNoKHNlbGYpOgorICAgICAgICAgYnlwYXNzID0gdXJsbGliLnByb3h5X2J5cGFzc19lbnZpcm9ubWVudAorICAgICAgICAgc2VsZi5lbnYuc2V0KCdOT19QUk9YWScsCitkaWZmIC0tZ2l0IGEvTGliL3VybGxpYi5weSBiL0xpYi91cmxsaWIucHkKK2luZGV4IDEzOWZhYjkuLmMzYmEyYzkgMTAwNjQ0CistLS0gYS9MaWIvdXJsbGliLnB5CisrKysgYi9MaWIvdXJsbGliLnB5CitAQCAtMTM4MCwxMiArMTM4MCwyMSBAQCBkZWYgZ2V0cHJveGllc19lbnZpcm9ubWVudCgpOgorICAgICBJZiB5b3UgbmVlZCBhIGRpZmZlcmVudCB3YXksIHlvdSBjYW4gcGFzcyBhIHByb3hpZXMgZGljdGlvbmFyeSB0byB0aGUKKyAgICAgW0ZhbmN5XVVSTG9wZW5lciBjb25zdHJ1Y3Rvci4KKyAgICAgIiIiCisrICAgICMgR2V0IGFsbCB2YXJpYWJsZXMKKyAgICAgcHJveGllcyA9IHt9CisgICAgIGZvciBuYW1lLCB2YWx1ZSBpbiBvcy5lbnZpcm9uLml0ZW1zKCk6CisgICAgICAgICBuYW1lID0gbmFtZS5sb3dlcigpCisgICAgICAgICBpZiB2YWx1ZSBhbmQgbmFtZVstNjpdID09ICdfcHJveHknOgorICAgICAgICAgICAgIHByb3hpZXNbbmFtZVs6LTZdXSA9IHZhbHVlCisgCisrICAgICMgQ1ZFLTIwMTYtMTAwMDExMCAtIElmIHdlIGFyZSBydW5uaW5nIGFzIENHSSBzY3JpcHQsIGZvcmdldCBIVFRQX1BST1hZCisrICAgICMgKG5vbi1hbGwtbG93ZXJjYXNlKSBhcyBpdCBtYXkgYmUgc2V0IGZyb20gdGhlIHdlYiBzZXJ2ZXIgYnkgYSAiUHJveHk6IgorKyAgICAjIGhlYWRlciBmcm9tIHRoZSBjbGllbnQKKysgICAgIyBJZiAicHJveHkiIGlzIGxvd2VyY2FzZSwgaXQgd2lsbCBzdGlsbCBiZSB1c2VkIHRoYW5rcyB0byB0aGUgbmV4dCBibG9jaworKyAgICBpZiAnUkVRVUVTVF9NRVRIT0QnIGluIG9zLmVudmlyb246CisrICAgICAgICBwcm94aWVzLnBvcCgnaHR0cCcsIE5vbmUpCisrCisrICAgICMgR2V0IGxvd2VyY2FzZSB2YXJpYWJsZXMKKyAgICAgZm9yIG5hbWUsIHZhbHVlIGluIG9zLmVudmlyb24uaXRlbXMoKToKKyAgICAgICAgIGlmIG5hbWVbLTY6XSA9PSAnX3Byb3h5JzoKKyAgICAgICAgICAgICBuYW1lID0gbmFtZS5sb3dlcigpCitkaWZmIC0tZ2l0IGEvTWlzYy9BQ0tTIGIvTWlzYy9BQ0tTCitpbmRleCBlZTNhNDY1Li45YzM3NGI3IDEwMDY0NAorLS0tIGEvTWlzYy9BQ0tTCisrKysgYi9NaXNjL0FDS1MKK0BAIC0xMTIxLDYgKzExMjEsNyBAQCBCdXJ0b24gUmFkb25zCisgSmVmZiBSYW1uYW5pCisgVmFycHUgUmFudGFsYQorIEJyb2RpZSBSYW8KKytSw6ltaSBSYW1waW4KKyBTZW5rbyBSYXNpYworIEFudHRpIFJhc2luZW4KKyBOaWtvbGF1cyBSYXRoCitkaWZmIC0tZ2l0IGEvTWlzYy9ORVdTIGIvTWlzYy9ORVdTCitpbmRleCA0YWIzYTcwLi5jYzJmNjViIDEwMDY0NAorLS0tIGEvTWlzYy9ORVdTCisrKysgYi9NaXNjL05FV1MKK0BAIC0xODcsNiArMTg3LDEwIEBAIExpYnJhcnkKKyAtIElzc3VlICMyNjY0NDogUmFpc2UgVmFsdWVFcnJvciByYXRoZXIgdGhhbiBTeXN0ZW1FcnJvciB3aGVuIGEgbmVnYXRpdmUKKyAgIGxlbmd0aCBpcyBwYXNzZWQgdG8gU1NMU29ja2V0LnJlY3YoKSBvciByZWFkKCkuCisgCisrLSBJc3N1ZSAjMjc1Njg6IFByZXZlbnQgSFRUUG94eSBhdHRhY2sgKENWRS0yMDE2LTEwMDAxMTApLiBJZ25vcmUgdGhlCisrICBIVFRQX1BST1hZIHZhcmlhYmxlIHdoZW4gUkVRVUVTVF9NRVRIT0QgZW52aXJvbm1lbnQgaXMgc2V0LCB3aGljaCBpbmRpY2F0ZXMKKysgIHRoYXQgdGhlIHNjcmlwdCBpcyBpbiBDR0kgbW9kZS4KKysKKyAtIElzc3VlICMyMzgwNDogRml4IFNTTCByZWN2KDApIGFuZCByZWFkKDApIG1ldGhvZHMgdG8gcmV0dXJuIHplcm8gYnl0ZXMKKyAgIGluc3RlYWQgb2YgdXAgdG8gMTAyNC4KKyAKKy0tIAorMi44LjEKKwpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uMy1hc3luY18wLjYuMi5iYiBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbjMtYXN5bmNfMC42LjIuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTRhMzBmNQotLS0gL2Rldi9udWxsCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbjMtYXN5bmNfMC42LjIuYmIKQEAgLTAsMCArMSw2IEBACityZXF1aXJlIHB5dGhvbi1hc3luYy5pbmMKKworaW5oZXJpdCBzZXR1cHRvb2xzMworCitSREVQRU5EU18ke1BOfSArPSAicHl0aG9uMy10aHJlYWRpbmcgcHl0aG9uMy1sYW5nIgorCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24zLWRidXNfMS4yLjQuYmIgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24zLWRidXNfMS4yLjQuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGU1YTAxYwotLS0gL2Rldi9udWxsCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbjMtZGJ1c18xLjIuNC5iYgpAQCAtMCwwICsxLDIzIEBACitTVU1NQVJZID0gIlB5dGhvbiBiaW5kaW5ncyBmb3IgdGhlIERCdXMgaW50ZXItcHJvY2VzcyBjb21tdW5pY2F0aW9uIHN5c3RlbSIKK1NFQ1RJT04gPSAiZGV2ZWwvcHl0aG9uIgorSE9NRVBBR0UgPSAiaHR0cDovL3d3dy5mcmVlZGVza3RvcC5vcmcvU29mdHdhcmUvZGJ1cyIKK0xJQ0VOU0UgPSAiTUlUIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9MGI4MzA0N2NlOWU5NDhiNjdjMGZhY2M1ZjIzMzQ3NmEiCitERVBFTkRTID0gImV4cGF0IGRidXMgZGJ1cy1nbGliIHZpcnR1YWwvbGliaW50bCIKKworU1JDX1VSSSA9ICJodHRwOi8vZGJ1cy5mcmVlZGVza3RvcC5vcmcvcmVsZWFzZXMvZGJ1cy1weXRob24vZGJ1cy1weXRob24tJHtQVn0udGFyLmd6IFwKKyIKKworU1JDX1VSSVttZDVzdW1dID0gIjczNzJhNTg4YzgzYTcyMzJiNGUwODE1OWJmZDQ4ZmU1IgorU1JDX1VSSVtzaGEyNTZzdW1dID0gImUyZjFkNjg3MWY3NGZiYTIzNjUyZTUxZDEwODczZTU0ZjcxYWRhYjA1MjU4MzNjMTliYWQ5ZTk5YjFiMmY5Y2MiCitTID0gIiR7V09SS0RJUn0vZGJ1cy1weXRob24tJHtQVn0iCisKK2luaGVyaXQgZGlzdHV0aWxzMy1iYXNlIGF1dG90b29scyBwa2djb25maWcKKworUEFDS0FHRUNPTkZJRyA/PSAiIgorUEFDS0FHRUNPTkZJR1tkb2NzXSA9ICItLWVuYWJsZS1odG1sLWRvY3MsLS1kaXNhYmxlLWh0bWwtZG9jcyxweXRob24zLWRvY3V0aWxzLW5hdGl2ZSIKK1BBQ0tBR0VDT05GSUdbYXBpLWRvY3NdID0gIi0tZW5hYmxlLWFwaS1kb2NzLC0tZGlzYWJsZS1hcGktZG9jcyxweXRob24zLWRvY3V0aWxzLW5hdGl2ZSBweXRob24zLWVweWRvYy1uYXRpdmUiCisKK1JERVBFTkRTXyR7UE59ID0gInB5dGhvbjMtaW8gcHl0aG9uMy1sb2dnaW5nIHB5dGhvbjMtc3RyaW5nb2xkIHB5dGhvbjMtdGhyZWFkaW5nIHB5dGhvbjMteG1sIgorCitGSUxFU18ke1BOfS1kZXYgKz0gIiR7bGliZGlyfS9wa2djb25maWciCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24zLWRvY3V0aWxzXzAuMTIuYmIgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24zLWRvY3V0aWxzXzAuMTIuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTc4ZmEzYgotLS0gL2Rldi9udWxsCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbjMtZG9jdXRpbHNfMC4xMi5iYgpAQCAtMCwwICsxLDE4IEBACitTVU1NQVJZID0gIlRleHQgcHJvY2Vzc2luZyBzeXN0ZW0gZm9yIGRvY3VtZW50YXRpb24iCitIT01FUEFHRSA9ICJodHRwOi8vZG9jdXRpbHMuc291cmNlZm9yZ2UubmV0IgorU0VDVElPTiA9ICJkZXZlbC9weXRob24iCitMSUNFTlNFID0gIlBTRiAmIEJTRC0yLUNsYXVzZSAmIEdQTHYzIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORy50eHQ7bWQ1PWE3MjJmYmRjMjAzNDdkYjdiNjkyMjM1OTRkZDU0NTc0IgorCitERVBFTkRTID0gInB5dGhvbjMiCisKK1NSQ19VUkkgPSAiJHtTT1VSQ0VGT1JHRV9NSVJST1J9L2RvY3V0aWxzL2RvY3V0aWxzLSR7UFZ9LnRhci5neiIKK1NSQ19VUklbbWQ1c3VtXSA9ICI0NjIyMjYzYjYyYzVjNzcxYzAzNTAyYWZhMzE1Nzc2OCIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICJjN2RiNzE3ODEwYWI2OTY1ZjY2YzhjZjAzOThhOThjOWQ4ZGY5ODJkYTM5YjRjZDdmMTYyOTExZWI4OTU5NmZhIgorCitTID0gIiR7V09SS0RJUn0vZG9jdXRpbHMtJHtQVn0iCisKK2luaGVyaXQgZGlzdHV0aWxzMworCitCQkNMQVNTRVhURU5EID0gIm5hdGl2ZSIKKwpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uMy1naXRfMi4wLjcuYmIgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24zLWdpdF8yLjAuNy5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jOWZlOWJhCi0tLSAvZGV2L251bGwKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uMy1naXRfMi4wLjcuYmIKQEAgLTAsMCArMSw3IEBACityZXF1aXJlIHB5dGhvbi1naXQuaW5jCisKK0RFUEVORFMgPSAicHl0aG9uMy1naXRkYiIKKworaW5oZXJpdCBzZXR1cHRvb2xzMworCitSREVQRU5EU18ke1BOfSArPSAicHl0aG9uMy1naXRkYiBweXRob24zLWxhbmcgcHl0aG9uMy1pbyBweXRob24zLXNoZWxsIHB5dGhvbjMtbWF0aCBweXRob24zLXJlIHB5dGhvbjMtc3VicHJvY2VzcyBweXRob24zLXN0cmluZ29sZCBweXRob24zLXVuaXhhZG1pbiBweXRob24zLWVudW0gcHl0aG9uMy1sb2dnaW5nIHB5dGhvbjMtZGF0ZXRpbWUgcHl0aG9uMy1uZXRjbGllbnQiCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24zLWdpdGRiXzAuNi40LmJiIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uMy1naXRkYl8wLjYuNC5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MGQ5ZDQ2Ci0tLSAvZGV2L251bGwKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uMy1naXRkYl8wLjYuNC5iYgpAQCAtMCwwICsxLDcgQEAKK3JlcXVpcmUgcHl0aG9uLWdpdGRiLmluYworCitERVBFTkRTID0gInB5dGhvbjMtYXN5bmMgcHl0aG9uMy1zbW1hcCIKKworaW5oZXJpdCBkaXN0dXRpbHMzCisKK1JERVBFTkRTXyR7UE59ICs9ICJweXRob24zLXNtbWFwIHB5dGhvbjMtYXN5bmMgcHl0aG9uMy1tbWFwIHB5dGhvbjMtbGFuZyBweXRob24zLWlvIHB5dGhvbjMtc2hlbGwgcHl0aG9uMy1jcnlwdCBweXRob24zLWNvbXByZXNzaW9uIgpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uMy1tYWtvXzEuMC40LmJiIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uMy1tYWtvXzEuMC40LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJiNTBmZmQKLS0tIC9kZXYvbnVsbAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24zLW1ha29fMS4wLjQuYmIKQEAgLTAsMCArMSwxMSBAQAorcmVxdWlyZSBweXRob24tbWFrby5pbmMKKworaW5oZXJpdCBzZXR1cHRvb2xzMworCitSREVQRU5EU18ke1BOfSA9ICJweXRob24zLXRocmVhZGluZyBcCisgICAgICAgICAgICAgICAgICBweXRob24zLW5ldGNsaWVudCBcCisgICAgICAgICAgICAgICAgICBweXRob24zLWh0bWwgXAorIgorUkRFUEVORFNfJHtQTn1fY2xhc3MtbmF0aXZlID0gIiIKKworQkJDTEFTU0VYVEVORCA9ICJuYXRpdmUgbmF0aXZlc2RrIgpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uMy1uYXRpdmVfMy41LjEuYmIgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24zLW5hdGl2ZV8zLjUuMS5iYgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggN2JhZDExYS4uMDAwMDAwMAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24zLW5hdGl2ZV8zLjUuMS5iYgorKysgL2Rldi9udWxsCkBAIC0xLDc5ICswLDAgQEAKLXJlcXVpcmUgcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLmluYwotCi1QUiA9ICIke0lOQ19QUn0uMCIKLVBZVEhPTl9NQUpNSU4gPSAiMy41IgotRElTVFJPX1NSQ19VUkkgPz0gImZpbGU6Ly9zaXRlY3VzdG9taXplLnB5IgotRElTVFJPX1NSQ19VUklfbGludXhzdGRiYXNlID0gIiIKLVNSQ19VUkkgPSAiaHR0cDovL3d3dy5weXRob24ub3JnL2Z0cC9weXRob24vJHtQVn0vUHl0aG9uLSR7UFZ9LnRhci54eiBcCi1maWxlOi8vMTItZGlzdHV0aWxzLXByZWZpeC1pcy1pbnNpZGUtc3RhZ2luZy1hcmVhLnBhdGNoIFwKLWZpbGU6Ly9weXRob24tY29uZmlnLnBhdGNoIFwKLWZpbGU6Ly8wMDAtY3Jvc3MtY29tcGlsZS5wYXRjaCBcCi1maWxlOi8vMDIwLWRvbnQtY29tcGlsZS1weXRob24tZmlsZXMucGF0Y2ggXAotZmlsZTovLzAzMC1maXh1cC1pbmNsdWRlLWRpcnMucGF0Y2ggXAotZmlsZTovLzA3MC1kb250LWNsZWFuLWlwa2ctaW5zdGFsbC5wYXRjaCBcCi1maWxlOi8vMDgwLWRpc3R1dGlscy1kb250X2FkanVzdF9maWxlcy5wYXRjaCBcCi1maWxlOi8vMTEwLWVuYWJsZS16bGliLnBhdGNoIFwKLWZpbGU6Ly8xMzAtcmVhZGxpbmUtc2V0dXAucGF0Y2ggXAotZmlsZTovLzE1MC1maXgtc2V0dXB0ZXJtLnBhdGNoIFwKLWZpbGU6Ly9weXRob24tMy4zLW11bHRpbGliLnBhdGNoIFwKLWZpbGU6Ly8wMy1maXgtdGtpbnRlci1kZXRlY3Rpb24ucGF0Y2ggXAotZmlsZTovL2F2b2lkX3dhcm5pbmdfYWJvdXRfdGtpbnRlci5wYXRjaCBcCi1maWxlOi8vc2h1dGlsLWZvbGxvdy1zeW1saW5rLWZpeC5wYXRjaCBcCi1maWxlOi8vMDAwMS1oMnB5LUZpeC1pc3N1ZS0xMzAzMi13aGVyZS1pdC1mYWlscy13aXRoLVVuaWNvZGVEZWNvLnBhdGNoIFwKLWZpbGU6Ly9zeXNyb290LWluY2x1ZGUtaGVhZGVycy5wYXRjaCBcCi1maWxlOi8vdW5peGNjb21waWxlci5wYXRjaCBcCi0ke0RJU1RST19TUkNfVVJJfSBcCi1maWxlOi8vc3lzY29uZmlnLnB5LWFkZC1fUFlUSE9OX1BST0pFQ1RfU1JDLnBhdGNoIFwKLWZpbGU6Ly9zZXR1cC5weS1jaGVjay1jcm9zc19jb21waWxpbmctd2hlbi1nZXQtRkxBR1MucGF0Y2ggXAotZmlsZTovLzAwMDEtRG8tbm90LXVzZS10aGUtc2hlbGwtdmVyc2lvbi1vZi1weXRob24tY29uZmlnLXRoYXQtdy5wYXRjaCBcCi0iCi1TUkNfVVJJW21kNXN1bV0gPSAiZTllYTZmMjYyM2ZmZmNkZDg3MWI3YjE5MTEzZmRlODAiCi1TUkNfVVJJW3NoYTI1NnN1bV0gPSAiYzZkNTdjMGMzNjZkOTA2MGFiNmMwY2RmODg5ZWJmM2Q5MjcxMWQ0NjZjYzAxMTljNDQxZGJmMjc0NmY3MjVjOSIKLQotTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vTElDRU5TRTttZDU9ZGQ5OGQwMWQ0NzFmYWM4ZDhkYmRkOTc1MjI5ZGJhMDMiCi0KLSMgZXhjbHVkZSBwcmUtcmVsZWFzZXMgZm9yIGJvdGggcHl0aG9uIDIueCBhbmQgMy54Ci1VUFNUUkVBTV9DSEVDS19SRUdFWCA9ICJbUHBdeXRob24tKD9QPHB2ZXI+XGQrKFwuXGQrKSspLnRhciIKLQotUyA9ICIke1dPUktESVJ9L1B5dGhvbi0ke1BWfSIKLQotRVhUUkFOQVRJVkVQQVRIICs9ICJiemlwMi1uYXRpdmUiCi1ERVBFTkRTID0gIm9wZW5zc2wtbmF0aXZlIGJ6aXAyLXJlcGxhY2VtZW50LW5hdGl2ZSB6bGliLW5hdGl2ZSByZWFkbGluZS1uYXRpdmUgc3FsaXRlMy1uYXRpdmUiCi0KLWluaGVyaXQgbmF0aXZlCi0KLVJQUk9WSURFUyArPSAicHl0aG9uMy1kaXN0dXRpbHMtbmF0aXZlIHB5dGhvbjMtY29tcHJlc3Npb24tbmF0aXZlIHB5dGhvbjMtdGV4dHV0aWxzLW5hdGl2ZSBweXRob24zLWNvcmUtbmF0aXZlIgotCi1FWFRSQV9PRUNPTkZfYXBwZW5kID0gIiAtLWJpbmRpcj0ke2JpbmRpcn0vJHtQTn0gLS13aXRob3V0LWVuc3VyZXBpcCIKLQotRVhUUkFfT0VNQUtFID0gJ1wKLSAgQlVJTERfU1lTPSIiIFwKLSAgSE9TVF9TWVM9IiIgXAotICBMSUJDPSIiIFwKLSAgU1RBR0lOR19MSUJESVI9JHtTVEFHSU5HX0xJQkRJUl9OQVRJVkV9IFwKLSAgU1RBR0lOR19JTkNESVI9JHtTVEFHSU5HX0lOQ0RJUl9OQVRJVkV9IFwKLSAgTElCPSR7YmFzZWxpYn0gXAotICBBUkNIPSR7VEFSR0VUX0FSQ0h9IFwKLScKLQotIyBObyBjdHlwZXMgb3B0aW9uIGZvciBweXRob24gMwotUFlUSE9OTFNCT1BUUyA9ICIiCi0KLWRvX2NvbmZpZ3VyZV9hcHBlbmQoKSB7Ci0JYXV0b3JlY29uZiAtLXZlcmJvc2UgLS1pbnN0YWxsIC0tZm9yY2UgLS1leGNsdWRlPWF1dG9wb2ludCAuLi9QeXRob24tJHtQVn0vTW9kdWxlcy9fY3R5cGVzL2xpYmZmaQotfQotCi1kb19pbnN0YWxsKCkgewotCWluc3RhbGwgLWQgJHtEfSR7bGliZGlyfS9wa2djb25maWcKLQlvZV9ydW5tYWtlICdERVNURElSPSR7RH0nIGluc3RhbGwKLQlpZiBbIC1lICR7V09SS0RJUn0vc2l0ZWN1c3RvbWl6ZS5weSBdOyB0aGVuCi0JCWluc3RhbGwgLW0gMDY0NCAke1dPUktESVJ9L3NpdGVjdXN0b21pemUucHkgJHtEfS8ke2xpYmRpcn0vcHl0aG9uJHtQWVRIT05fTUFKTUlOfQotCWZpCi0JaW5zdGFsbCAtZCAke0R9JHtiaW5kaXJ9LyR7UE59Ci0JaW5zdGFsbCAtbSAwNzU1IFBhcnNlci9wZ2VuICR7RH0ke2JpbmRpcn0vJHtQTn0KLQotCSMgTWFrZSBzdXJlIHdlIHVzZSAvdXNyL2Jpbi9lbnYgcHl0aG9uCi0JZm9yIFBZVEhTQ1JJUFQgaW4gYGdyZXAgLXJJbCAke2JpbmRpcn0vJHtQTn0vcHl0aG9uICR7RH0ke2JpbmRpcn0vJHtQTn1gOyBkbwotCQlzZWQgLWkgLWUgJzFzfF4jIS4qfCMhL3Vzci9iaW4vZW52IHB5dGhvbjN8JyAkUFlUSFNDUklQVAotCWRvbmUKLX0KZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbjMtbmF0aXZlXzMuNS4yLmJiIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uMy1uYXRpdmVfMy41LjIuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTk0ZjE1YwotLS0gL2Rldi9udWxsCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbjMtbmF0aXZlXzMuNS4yLmJiCkBAIC0wLDAgKzEsOTggQEAKK3JlcXVpcmUgcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLmluYworCitQUiA9ICIke0lOQ19QUn0uMCIKK1BZVEhPTl9NQUpNSU4gPSAiMy41IgorRElTVFJPX1NSQ19VUkkgPz0gImZpbGU6Ly9zaXRlY3VzdG9taXplLnB5IgorRElTVFJPX1NSQ19VUklfbGludXhzdGRiYXNlID0gIiIKK1NSQ19VUkkgPSAiaHR0cDovL3d3dy5weXRob24ub3JnL2Z0cC9weXRob24vJHtQVn0vUHl0aG9uLSR7UFZ9LnRhci54eiBcCitmaWxlOi8vMTItZGlzdHV0aWxzLXByZWZpeC1pcy1pbnNpZGUtc3RhZ2luZy1hcmVhLnBhdGNoIFwKK2ZpbGU6Ly9weXRob24tY29uZmlnLnBhdGNoIFwKK2ZpbGU6Ly8wMDAtY3Jvc3MtY29tcGlsZS5wYXRjaCBcCitmaWxlOi8vMDIwLWRvbnQtY29tcGlsZS1weXRob24tZmlsZXMucGF0Y2ggXAorZmlsZTovLzAzMC1maXh1cC1pbmNsdWRlLWRpcnMucGF0Y2ggXAorZmlsZTovLzA3MC1kb250LWNsZWFuLWlwa2ctaW5zdGFsbC5wYXRjaCBcCitmaWxlOi8vMDgwLWRpc3R1dGlscy1kb250X2FkanVzdF9maWxlcy5wYXRjaCBcCitmaWxlOi8vMTMwLXJlYWRsaW5lLXNldHVwLnBhdGNoIFwKK2ZpbGU6Ly8xNTAtZml4LXNldHVwdGVybS5wYXRjaCBcCitmaWxlOi8vcHl0aG9uLTMuMy1tdWx0aWxpYi5wYXRjaCBcCitmaWxlOi8vMDMtZml4LXRraW50ZXItZGV0ZWN0aW9uLnBhdGNoIFwKK2ZpbGU6Ly9hdm9pZF93YXJuaW5nX2Fib3V0X3RraW50ZXIucGF0Y2ggXAorZmlsZTovL3NodXRpbC1mb2xsb3ctc3ltbGluay1maXgucGF0Y2ggXAorZmlsZTovLzAwMDEtaDJweS1GaXgtaXNzdWUtMTMwMzItd2hlcmUtaXQtZmFpbHMtd2l0aC1Vbmljb2RlRGVjby5wYXRjaCBcCitmaWxlOi8vc3lzcm9vdC1pbmNsdWRlLWhlYWRlcnMucGF0Y2ggXAorZmlsZTovL3VuaXhjY29tcGlsZXIucGF0Y2ggXAorJHtESVNUUk9fU1JDX1VSSX0gXAorZmlsZTovL3N5c2NvbmZpZy5weS1hZGQtX1BZVEhPTl9QUk9KRUNUX1NSQy5wYXRjaCBcCitmaWxlOi8vc2V0dXAucHktY2hlY2stY3Jvc3NfY29tcGlsaW5nLXdoZW4tZ2V0LUZMQUdTLnBhdGNoIFwKK2ZpbGU6Ly8wMDAxLURvLW5vdC11c2UtdGhlLXNoZWxsLXZlcnNpb24tb2YtcHl0aG9uLWNvbmZpZy10aGF0LXcucGF0Y2ggXAorIgorCitTUkNfVVJJW21kNXN1bV0gPSAiODkwNmVmYmFjZmNkYzdjM2M5MTk4YWVlZmFmZDE1OWUiICAKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICIwMDEwZjU2MTAwYjliNzQyNTllYmNkNWQ0YjI5NWEzMjMyNGI1OGI1MTc0MDNhMTBkMWEyYWE3Y2IyMmJjYTQwIiAKKworTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vTElDRU5TRTttZDU9NmI2MDI1ODEzMGU0ZWQxMGQzMTAxNTE3ZWI1YjkzODUiCisKKyMgZXhjbHVkZSBwcmUtcmVsZWFzZXMgZm9yIGJvdGggcHl0aG9uIDIueCBhbmQgMy54CitVUFNUUkVBTV9DSEVDS19SRUdFWCA9ICJbUHBdeXRob24tKD9QPHB2ZXI+XGQrKFwuXGQrKSspLnRhciIKKworUyA9ICIke1dPUktESVJ9L1B5dGhvbi0ke1BWfSIKKworRVhUUkFOQVRJVkVQQVRIICs9ICJiemlwMi1uYXRpdmUiCitERVBFTkRTID0gIm9wZW5zc2wtbmF0aXZlIGJ6aXAyLXJlcGxhY2VtZW50LW5hdGl2ZSB6bGliLW5hdGl2ZSByZWFkbGluZS1uYXRpdmUgc3FsaXRlMy1uYXRpdmUiCisKK2luaGVyaXQgbmF0aXZlCisKK1JQUk9WSURFUyArPSAiIFwKKyAgICBweXRob24zLWNvbXByZXNzaW9uLW5hdGl2ZSBcCisgICAgcHl0aG9uMy1jb3JlLW5hdGl2ZSBcCisgICAgcHl0aG9uMy1kaXN0dXRpbHMtbmF0aXZlIFwKKyAgICBweXRob24zLWVtYWlsLW5hdGl2ZSBcCisgICAgcHl0aG9uMy1pbXBvcnRsaWItbmF0aXZlIFwKKyAgICBweXRob24zLWlvLW5hdGl2ZSBcCisgICAgcHl0aG9uMy1qc29uLW5hdGl2ZSBcCisgICAgcHl0aG9uMy1sYW5nLW5hdGl2ZSBcCisgICAgcHl0aG9uMy1taXNjLW5hdGl2ZSBcCisgICAgcHl0aG9uMy1uZXRjbGllbnQtbmF0aXZlIFwKKyAgICBweXRob24zLW5ldHNlcnZlci1uYXRpdmUgXAorICAgIHB5dGhvbjMtbnVtYmVycy1uYXRpdmUgXAorICAgIHB5dGhvbjMtcGtndXRpbC1uYXRpdmUgXAorICAgIHB5dGhvbjMtcHByaW50LW5hdGl2ZSBcCisgICAgcHl0aG9uMy1yZS1uYXRpdmUgXAorICAgIHB5dGhvbjMtc2hlbGwtbmF0aXZlIFwKKyAgICBweXRob24zLXN1YnByb2Nlc3MtbmF0aXZlIFwKKyAgICBweXRob24zLXRleHR1dGlscy1uYXRpdmUgXAorICAgIHB5dGhvbjMtdGhyZWFkaW5nLW5hdGl2ZSBcCisgICAgcHl0aG9uMy11bml0dGVzdC1uYXRpdmUgXAorIgorCitFWFRSQV9PRUNPTkZfYXBwZW5kID0gIiAtLWJpbmRpcj0ke2JpbmRpcn0vJHtQTn0gLS13aXRob3V0LWVuc3VyZXBpcCIKKworRVhUUkFfT0VNQUtFID0gJ1wKKyAgTElCQz0iIiBcCisgIFNUQUdJTkdfTElCRElSPSR7U1RBR0lOR19MSUJESVJfTkFUSVZFfSBcCisgIFNUQUdJTkdfSU5DRElSPSR7U1RBR0lOR19JTkNESVJfTkFUSVZFfSBcCisgIExJQj0ke2Jhc2VsaWJ9IFwKKyAgQVJDSD0ke1RBUkdFVF9BUkNIfSBcCisnCisKKyMgTm8gY3R5cGVzIG9wdGlvbiBmb3IgcHl0aG9uIDMKK1BZVEhPTkxTQk9QVFMgPSAiIgorCitkb19jb25maWd1cmVfYXBwZW5kKCkgeworCWF1dG9yZWNvbmYgLS12ZXJib3NlIC0taW5zdGFsbCAtLWZvcmNlIC0tZXhjbHVkZT1hdXRvcG9pbnQgLi4vUHl0aG9uLSR7UFZ9L01vZHVsZXMvX2N0eXBlcy9saWJmZmkKK30KKworZG9faW5zdGFsbCgpIHsKKwlpbnN0YWxsIC1kICR7RH0ke2xpYmRpcn0vcGtnY29uZmlnCisJb2VfcnVubWFrZSAnREVTVERJUj0ke0R9JyBpbnN0YWxsCisJaWYgWyAtZSAke1dPUktESVJ9L3NpdGVjdXN0b21pemUucHkgXTsgdGhlbgorCQlpbnN0YWxsIC1tIDA2NDQgJHtXT1JLRElSfS9zaXRlY3VzdG9taXplLnB5ICR7RH0vJHtsaWJkaXJ9L3B5dGhvbiR7UFlUSE9OX01BSk1JTn0KKwlmaQorCWluc3RhbGwgLWQgJHtEfSR7YmluZGlyfS8ke1BOfQorCWluc3RhbGwgLW0gMDc1NSBQYXJzZXIvcGdlbiAke0R9JHtiaW5kaXJ9LyR7UE59CisKKwkjIE1ha2Ugc3VyZSB3ZSB1c2UgL3Vzci9iaW4vZW52IHB5dGhvbgorCWZvciBQWVRIU0NSSVBUIGluIGBncmVwIC1ySWwgJHtiaW5kaXJ9LyR7UE59L3B5dGhvbiAke0R9JHtiaW5kaXJ9LyR7UE59YDsgZG8KKwkJc2VkIC1pIC1lICcxc3xeIyEuKnwjIS91c3IvYmluL2VudiBweXRob24zfCcgJFBZVEhTQ1JJUFQKKwlkb25lCit9CmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24zLW5vc2VfMS4zLjcuYmIgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24zLW5vc2VfMS4zLjcuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTliYmE0NAotLS0gL2Rldi9udWxsCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbjMtbm9zZV8xLjMuNy5iYgpAQCAtMCwwICsxLDI0IEBACitTVU1NQVJZID0gIkV4dGVuZHMgUHl0aG9uIHVuaXR0ZXN0IHRvIG1ha2UgdGVzdGluZyBlYXNpZXIiCitERVNDUklQVElPTiA9ICJub3NlIGV4dGVuZHMgdGhlIHRlc3QgbG9hZGluZyBhbmQgcnVubmluZyBmZWF0dXJlcyBvZiB1bml0dGVzdCwgXAorbWFraW5nIGl0IGVhc2llciB0byB3cml0ZSwgZmluZCBhbmQgcnVuIHRlc3RzLiIKK1NFQ1RJT04gPSAiZGV2ZWwvcHl0aG9uIgorTElDRU5TRSA9ICJMR1BMdjIuMSIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL2xncGwudHh0O21kNT1hNmY4OWUyMTAwZDliNmNkZmZjZWE0ZjM5OGUzNzM0MyIKKworU1JDX1VSSSA9ICJodHRwczovL2ZpbGVzLnB5dGhvbmhvc3RlZC5vcmcvcGFja2FnZXMvc291cmNlL24vbm9zZS9ub3NlLSR7UFZ9LnRhci5neiIKKworU1JDX1VSSVttZDVzdW1dID0gIjRkM2FkMGZmMDdiNjEzNzNkMmNlZmM4OWM1ZDBiMjBiIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gImYxYmZmZWY5Y2JjODI2MjhmNmU3ZDdiNDBkN2UyNTVhZWZhYTFhZGI2YTFiMWQyNmM2OWE4Yjc5ZTYyMDhhOTgiCisKK1VQU1RSRUFNX0NIRUNLX1VSSSA9ICJodHRwczovL3B5cGkucHl0aG9uLm9yZy9weXBpL25vc2UvIgorVVBTVFJFQU1fQ0hFQ0tfUkVHRVggPSAiL25vc2UvKD9QPHB2ZXI+KFxkK1tcLlwtX10qKSspIgorCitTID0gIiR7V09SS0RJUn0vbm9zZS0ke1BWfSIKKworaW5oZXJpdCBzZXR1cHRvb2xzMworCitSREVQRU5EU18ke1BOfV9jbGFzcy10YXJnZXQgPSAiXAorICBweXRob24zLXVuaXR0ZXN0IFwKKyAgIgorCitCQkNMQVNTRVhURU5EID0gIm5hdGl2ZSBuYXRpdmVzZGsiCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24zLXBpcF84LjAuMC5iYiBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbjMtcGlwXzguMC4wLmJiCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4MzRlY2RhLi4wMDAwMDAwCi0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbjMtcGlwXzguMC4wLmJiCisrKyAvZGV2L251bGwKQEAgLTEsNDggKzAsMCBAQAotU1VNTUFSWSA9ICJUaGUgUHlQQSByZWNvbW1lbmRlZCB0b29sIGZvciBpbnN0YWxsaW5nIFB5dGhvbiBwYWNrYWdlcyIKLXNIT01FUEFHRXNzcyA9ICJodHRwczovL3B5cGkucHl0aG9uLm9yZy9weXBpL3BpcCIKLVNFQ1RJT04gPSAiZGV2ZWwvcHl0aG9uIgotTElDRU5TRSA9ICJNSVQiCi1MSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9MSUNFTlNFLnR4dDttZDU9MjVmYmE0NTEwOTU2NWY4N2RlMjBiYWU4NWJjMzk0NTIiCi0KLVNSQ05BTUUgPSAicGlwIgotREVQRU5EUyArPSAicHl0aG9uMyBweXRob24zLXNldHVwdG9vbHMtbmF0aXZlIgotCi1TUkNfVVJJID0gIiBcCi0gIGh0dHA6Ly9weXBpLnB5dGhvbi5vcmcvcGFja2FnZXMvc291cmNlL3AvJHtTUkNOQU1FfS8ke1NSQ05BTUV9LSR7UFZ9LnRhci5neiBcCi0iCi1TUkNfVVJJW21kNXN1bV0gPSAiNTYwMWM0MzIzNDY0YWRkMTQ4MjI5MTYzNDE0Mjg5NGQiCi1TUkNfVVJJW3NoYTI1NnN1bV0gPSAiOTAxMTJiMjk2MTUyZjI3MGNiOGRkZGNkMTliN2I4NzQ4OGQ5ZTAwMmU4Y2Y2MjJlMTRjNGRhOWMyZjYzMTliMSIKLQotVVBTVFJFQU1fQ0hFQ0tfVVJJID0gImh0dHBzOi8vcHlwaS5weXRob24ub3JnL3B5cGkvcGlwIgotCi1TID0gIiR7V09SS0RJUn0vJHtTUkNOQU1FfS0ke1BWfSIKLQotaW5oZXJpdCBkaXN0dXRpbHMzCi0KLURJU1RVVElMU19JTlNUQUxMX0FSR1MgKz0gIi0taW5zdGFsbC1saWI9JHtEfSR7bGliZGlyfS8ke1BZVEhPTl9ESVJ9L3NpdGUtcGFja2FnZXMiCi0KLWRvX2luc3RhbGxfcHJlcGVuZCgpIHsKLSAgICBpbnN0YWxsIC1kICR7RH0vJHtsaWJkaXJ9LyR7UFlUSE9OX0RJUn0vc2l0ZS1wYWNrYWdlcwotfQotCi0jIFVzZSBzZXR1cHRvb2xzIHNpdGUucHkgaW5zdGVhZCwgYXZvaWQgc2hhcmVkIHN0YXRlIGlzc3VlCi1kb19pbnN0YWxsX2FwcGVuZCgpIHsKLSAgICBybSAke0R9LyR7bGliZGlyfS8ke1BZVEhPTl9ESVJ9L3NpdGUtcGFja2FnZXMvc2l0ZS5weQotICAgIHJtICR7RH0vJHtsaWJkaXJ9LyR7UFlUSE9OX0RJUn0vc2l0ZS1wYWNrYWdlcy9fX3B5Y2FjaGVfXy9zaXRlLmNweXRob24tKi5weWMKLQotICAgICMgSW5zdGFsbCBhcyBwaXAzIGFuZCBsZWF2ZSBwaXAyIGFzIGRlZmF1bHQKLSAgICBybSAke0R9LyR7YmluZGlyfS9waXAKLQotICAgICMgSW5zdGFsbGVkIGVnZ3MgbmVlZCB0byBiZSBwYXNzZWQgZGlyZWN0bHkgdG8gdGhlIGludGVycHJldGVyIHZpYSBhIHB0aCBmaWxlCi0gICAgZWNobyAiLi8ke1NSQ05BTUV9LSR7UFZ9LXB5JHtQWVRIT05fQkFTRVZFUlNJT059LmVnZyIgPiAke0R9JHtQWVRIT05fU0lURVBBQ0tBR0VTX0RJUn0vJHtTUkNOQU1FfS0ke1BWfS5wdGgKLX0KLQotUkRFUEVORFNfJHtQTn0gPSAiXAotICBweXRob24zLWNvbXBpbGUgXAotICBweXRob24zLWlvIFwKLSAgcHl0aG9uMy1qc29uIFwKLSAgcHl0aG9uMy1uZXRzZXJ2ZXIgXAotICBweXRob24zLXNldHVwdG9vbHMgXAotICBweXRob24zLXVuaXhhZG1pbiBcCi0gIHB5dGhvbjMteG1scnBjIFwKLSIKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbjMtcGlwXzguMS4yLmJiIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uMy1waXBfOC4xLjIuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWVmYjRjYgotLS0gL2Rldi9udWxsCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbjMtcGlwXzguMS4yLmJiCkBAIC0wLDAgKzEsNDcgQEAKK1NVTU1BUlkgPSAiVGhlIFB5UEEgcmVjb21tZW5kZWQgdG9vbCBmb3IgaW5zdGFsbGluZyBQeXRob24gcGFja2FnZXMiCitzSE9NRVBBR0Vzc3MgPSAiaHR0cHM6Ly9weXBpLnB5dGhvbi5vcmcvcHlwaS9waXAiCitTRUNUSU9OID0gImRldmVsL3B5dGhvbiIKK0xJQ0VOU0UgPSAiTUlUIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vTElDRU5TRS50eHQ7bWQ1PTI1ZmJhNDUxMDk1NjVmODdkZTIwYmFlODViYzM5NDUyIgorCitTUkNOQU1FID0gInBpcCIKK0RFUEVORFMgKz0gInB5dGhvbjMgcHl0aG9uMy1zZXR1cHRvb2xzLW5hdGl2ZSIKKworU1JDX1VSSSA9ICJodHRwczovL2ZpbGVzLnB5dGhvbmhvc3RlZC5vcmcvcGFja2FnZXMvc291cmNlL3AvJHtTUkNOQU1FfS8ke1NSQ05BTUV9LSR7UFZ9LnRhci5neiIKKworU1JDX1VSSVttZDVzdW1dID0gIjg3MDgzYzBiOTg2Nzk2M2IyOWY3YWJhMzYxM2U4ZjRhIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjRkMjRiMDNmZmE2NzYzOGEzZmE5MzFjMDlmZDllMDI3M2ZmYTkwNGU5NWViZWJlN2Q0YjFhNTRjOTNkN2I3MzIiCisKK1VQU1RSRUFNX0NIRUNLX1VSSSA9ICJodHRwczovL3B5cGkucHl0aG9uLm9yZy9weXBpL3BpcCIKKworUyA9ICIke1dPUktESVJ9LyR7U1JDTkFNRX0tJHtQVn0iCisKK2luaGVyaXQgZGlzdHV0aWxzMworCitESVNUVVRJTFNfSU5TVEFMTF9BUkdTICs9ICItLWluc3RhbGwtbGliPSR7RH0ke1BZVEhPTl9TSVRFUEFDS0FHRVNfRElSfSIKKworZG9faW5zdGFsbF9wcmVwZW5kKCkgeworICAgIGluc3RhbGwgLWQgJHtEfSR7UFlUSE9OX1NJVEVQQUNLQUdFU19ESVJ9Cit9CisKKyMgVXNlIHNldHVwdG9vbHMgc2l0ZS5weSBpbnN0ZWFkLCBhdm9pZCBzaGFyZWQgc3RhdGUgaXNzdWUKK2RvX2luc3RhbGxfYXBwZW5kKCkgeworICAgIHJtICR7RH0ke1BZVEhPTl9TSVRFUEFDS0FHRVNfRElSfS9zaXRlLnB5CisgICAgcm0gJHtEfSR7UFlUSE9OX1NJVEVQQUNLQUdFU19ESVJ9L19fcHljYWNoZV9fL3NpdGUuY3B5dGhvbi0qLnB5YworCisgICAgIyBJbnN0YWxsIGFzIHBpcDMgYW5kIGxlYXZlIHBpcDIgYXMgZGVmYXVsdAorICAgIHJtICR7RH0vJHtiaW5kaXJ9L3BpcAorCisgICAgIyBJbnN0YWxsZWQgZWdncyBuZWVkIHRvIGJlIHBhc3NlZCBkaXJlY3RseSB0byB0aGUgaW50ZXJwcmV0ZXIgdmlhIGEgcHRoIGZpbGUKKyAgICBlY2hvICIuLyR7U1JDTkFNRX0tJHtQVn0tcHkke1BZVEhPTl9CQVNFVkVSU0lPTn0uZWdnIiA+ICR7RH0ke1BZVEhPTl9TSVRFUEFDS0FHRVNfRElSfS8ke1NSQ05BTUV9LSR7UFZ9LnB0aAorfQorCitSREVQRU5EU18ke1BOfSA9ICJcCisgIHB5dGhvbjMtY29tcGlsZSBcCisgIHB5dGhvbjMtaW8gXAorICBweXRob24zLWpzb24gXAorICBweXRob24zLW5ldHNlcnZlciBcCisgIHB5dGhvbjMtc2V0dXB0b29scyBcCisgIHB5dGhvbjMtdW5peGFkbWluIFwKKyAgcHl0aG9uMy14bWxycGMgXAorIgpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uMy1weWNhaXJvXzEuMTAuMC5iYiBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbjMtcHljYWlyb18xLjEwLjAuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjkwMzFiMwotLS0gL2Rldi9udWxsCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbjMtcHljYWlyb18xLjEwLjAuYmIKQEAgLTAsMCArMSw0MCBAQAorU1VNTUFSWSA9ICJQeXRob24gYmluZGluZ3MgZm9yIHRoZSBDYWlybyBjYW52YXMgbGlicmFyeSIKK0hPTUVQQUdFID0gImh0dHA6Ly9jYWlyb2dyYXBoaWNzLm9yZy9weWNhaXJvIgorQlVHVFJBQ0tFUiA9ICJodHRwOi8vYnVncy5mcmVlZGVza3RvcC5vcmciCitTRUNUSU9OID0gInB5dGhvbi1kZXZlbCIKK0xJQ0VOU0UgPSAiTEdQTHYzIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9ZDMyMjM5YmNiNjczNDYzYWI4NzRlODBkNDdmYWU1MDQgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vQ09QWUlORy5MRVNTRVI7bWQ1PWU2YTYwMGZkNWUxZDljYmRlMmQ5ODM2ODAyMzNhZDAyIgorCisjIGNhaXJvID49IDEuOC44CitERVBFTkRTID0gImNhaXJvIgorUFIgPSAicjIiCisKK1NSQ19VUkkgPSAiaHR0cDovL2NhaXJvZ3JhcGhpY3Mub3JnL3JlbGVhc2VzL3B5Y2Fpcm8tJHtQVn0udGFyLmJ6MiIKKworU1JDX1VSSVttZDVzdW1dID0gImU2ZmQzZjJmMWU2YTcyZTBkYjA4NjhjNDk4NTY2OWM1IgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjlhYTQwNzhlN2ViNWJlNTgzYWVhYmJlOGQ4NzE3Mjc5NzcxN2Y5NWU4YzQzMzhmMGQ0YTE3YjY4M2E3MjUzYmUiCisKK1MgPSAiJHtXT1JLRElSfS9weWNhaXJvLSR7UFZ9IgorCitpbmhlcml0IGRpc3R1dGlsczMgcGtnY29uZmlnCisKK0JCQ0xBU1NFWFRFTkQgPSAibmF0aXZlIgorCitkb19jb25maWd1cmUoKSB7CisJUFlUSE9OPSR7UFlUSE9OfSAuL3dhZiBjb25maWd1cmUgLS1wcmVmaXg9JHtEfSR7cHJlZml4fSAtLWxpYmRpcj0ke0R9JHtsaWJkaXJ9Cit9CisKK2RvX2NvbXBpbGUoKSB7CisJLi93YWYgYnVpbGQgJHtQQVJBTExFTF9NQUtFfQorfQorCitkb19pbnN0YWxsKCkgeworCS4vd2FmIGluc3RhbGwKKwlzZWQgXAorCQktZSAnczpAcHJlZml4QDoke3ByZWZpeH06JyBcCisJCS1lICdzOkBWRVJTSU9OQDoke1BWfTonIFwKKwkJLWUgJ3M6QGluY2x1ZGVkaXJAOiR7aW5jbHVkZWRpcn06JyBcCisJCXB5M2NhaXJvLnBjLmluID4gcHkzY2Fpcm8ucGMKKwlpbnN0YWxsIC1tIDA2NDQgcHkzY2Fpcm8ucGMgJHtEfSR7bGliZGlyfS9wa2djb25maWcvCit9CmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24tcHlnb2JqZWN0LzAwMDEtY29uZmlndXJlLmFjLWFkZC1zeXNyb290LXBhdGgtdG8tR0lfREFUQURJUi1kb24tdC1zZS5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbjMtcHlnb2JqZWN0LzAwMDEtY29uZmlndXJlLmFjLWFkZC1zeXNyb290LXBhdGgtdG8tR0lfREFUQURJUi1kb24tdC1zZS5wYXRjaApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLXB5Z29iamVjdC8wMDAxLWNvbmZpZ3VyZS5hYy1hZGQtc3lzcm9vdC1wYXRoLXRvLUdJX0RBVEFESVItZG9uLXQtc2UucGF0Y2gKcmVuYW1lIHRvIGltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbjMtcHlnb2JqZWN0LzAwMDEtY29uZmlndXJlLmFjLWFkZC1zeXNyb290LXBhdGgtdG8tR0lfREFUQURJUi1kb24tdC1zZS5wYXRjaApkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uMy1weWdvYmplY3RfMy4yMC4xLmJiIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uMy1weWdvYmplY3RfMy4yMC4xLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNkYTE2ZjEKLS0tIC9kZXYvbnVsbAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24zLXB5Z29iamVjdF8zLjIwLjEuYmIKQEAgLTAsMCArMSwyNSBAQAorU1VNTUFSWSA9ICJQeXRob24gR09iamVjdCBiaW5kaW5ncyIKK1NFQ1RJT04gPSAiZGV2ZWwvcHl0aG9uIgorTElDRU5TRSA9ICJMR1BMdjIuMSIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PWE5MTY0NjdiOTEwNzZlNjMxZGQ4ZWRiNzQyNDc2OWM3IgorCitpbmhlcml0IGF1dG90b29scyBwa2djb25maWcgZ25vbWViYXNlIGRpc3R1dGlsczMtYmFzZSBnb2JqZWN0LWludHJvc3BlY3Rpb24gdXBzdHJlYW0tdmVyc2lvbi1pcy1ldmVuCisKK0RFUEVORFMgKz0gInB5dGhvbjMgZ2xpYi0yLjAiCisKK1NSQ05BTUU9InB5Z29iamVjdCIKK1NSQ19VUkkgPSAiIFwKKyAgICBodHRwOi8vZnRwLmdub21lLm9yZy9wdWIvR05PTUUvc291cmNlcy8ke1NSQ05BTUV9LyR7QGdub21lX3ZlcmRpcigiJHtQVn0iKX0vJHtTUkNOQU1FfS0ke1BWfS50YXIueHogXAorICAgIGZpbGU6Ly8wMDAxLWNvbmZpZ3VyZS5hYy1hZGQtc3lzcm9vdC1wYXRoLXRvLUdJX0RBVEFESVItZG9uLXQtc2UucGF0Y2ggXAorIgorCitTUkNfVVJJW21kNXN1bV0gPSAiNDM1NGM2MjgzYjEzNWY4NTk1NjNiNzI0NTdmNmEzMjEiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiM2QyNjEwMDVkNmZlZDZhOTJhYzRjMjVmMjgzNzkyNTUyZjdkYWQ4NjVkMWI3ZTBjMDNjMmI4NGMwNGRiZDc0NSIKKworUyA9ICIke1dPUktESVJ9LyR7U1JDTkFNRX0tJHtQVn0iCisKK0JCQ0xBU1NFWFRFTkQgPSAibmF0aXZlIgorCitFWFRSQV9PRUNPTkYgPSAiLS1kaXNhYmxlLWNhaXJvIgorCitSREVQRU5EU18ke1BOfSArPSAicHl0aG9uMy1zZXR1cHRvb2xzIHB5dGhvbjMtaW1wb3J0bGliIgpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uMy1zZXR1cHRvb2xzXzE5LjQuYmIgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24zLXNldHVwdG9vbHNfMTkuNC5iYgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZmIyOTMxYy4uMDAwMDAwMAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24zLXNldHVwdG9vbHNfMTkuNC5iYgorKysgL2Rldi9udWxsCkBAIC0xLDM3ICswLDAgQEAKLXJlcXVpcmUgcHl0aG9uLXNldHVwdG9vbHMuaW5jCi0KLURFUEVORFMgKz0gInB5dGhvbjMiCi1ERVBFTkRTX2NsYXNzLW5hdGl2ZSArPSAicHl0aG9uMy1uYXRpdmUiCi0KLWluaGVyaXQgZGlzdHV0aWxzMwotCi1ESVNUVVRJTFNfSU5TVEFMTF9BUkdTICs9ICItLWluc3RhbGwtbGliPSR7RH0ke2xpYmRpcn0vJHtQWVRIT05fRElSfS9zaXRlLXBhY2thZ2VzIgotCi0jIFRoZSBpbnN0YWxsZXIgcHV0cyB0aGUgd3JvbmcgcGF0aCBpbiB0aGUgc2V0dXB0b29scy5wdGggZmlsZS4gIENvcnJlY3QgaXQuCi1kb19pbnN0YWxsX2FwcGVuZCgpIHsKLSAgICBybSAke0R9JHtQWVRIT05fU0lURVBBQ0tBR0VTX0RJUn0vc2V0dXB0b29scy5wdGgKLSAgICBtdiAke0R9JHtiaW5kaXJ9L2Vhc3lfaW5zdGFsbCAke0R9JHtiaW5kaXJ9L2Vhc3kzX2luc3RhbGwKLSAgICBlY2hvICIuLyR7U1JDTkFNRX0tJHtQVn0tcHkke1BZVEhPTl9CQVNFVkVSU0lPTn0uZWdnIiA+ICR7RH0ke1BZVEhPTl9TSVRFUEFDS0FHRVNfRElSfS9zZXR1cHRvb2xzLnB0aAotfQotCi1SREVQRU5EU18ke1BOfSA9ICJcCi0gIHB5dGhvbjMtZGlzdHV0aWxzIFwKLSAgcHl0aG9uMy1jb21wcmVzc2lvbiBcCi0iCi1SREVQRU5EU18ke1BOfV9jbGFzcy10YXJnZXQgPSAiXAotICBweXRob24zLWN0eXBlcyBcCi0gIHB5dGhvbjMtZGlzdHV0aWxzIFwKLSAgcHl0aG9uMy1lbWFpbCBcCi0gIHB5dGhvbjMtaW1wb3J0bGliIFwKLSAgcHl0aG9uMy1udW1iZXJzIFwKLSAgcHl0aG9uMy1jb21wcmVzc2lvbiBcCi0gIHB5dGhvbjMtc2hlbGwgXAotICBweXRob24zLXN1YnByb2Nlc3MgXAotICBweXRob24zLXRleHR1dGlscyBcCi0gIHB5dGhvbjMtcGtndXRpbCBcCi0gIHB5dGhvbjMtdGhyZWFkaW5nIFwKLSAgcHl0aG9uMy1taXNjIFwKLSAgcHl0aG9uMy11bml0dGVzdCBcCi0gIHB5dGhvbjMteG1sIFwKLSIKLUJCQ0xBU1NFWFRFTkQgPSAibmF0aXZlIgpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uMy1zZXR1cHRvb2xzXzIyLjAuNS5iYiBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbjMtc2V0dXB0b29sc18yMi4wLjUuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjVhZjZmMAotLS0gL2Rldi9udWxsCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbjMtc2V0dXB0b29sc18yMi4wLjUuYmIKQEAgLTAsMCArMSwzNyBAQAorcmVxdWlyZSBweXRob24tc2V0dXB0b29scy5pbmMKKworREVQRU5EUyArPSAicHl0aG9uMyIKK0RFUEVORFNfY2xhc3MtbmF0aXZlICs9ICJweXRob24zLW5hdGl2ZSIKKworaW5oZXJpdCBkaXN0dXRpbHMzCisKK0RJU1RVVElMU19JTlNUQUxMX0FSR1MgKz0gIi0taW5zdGFsbC1saWI9JHtEfSR7UFlUSE9OX1NJVEVQQUNLQUdFU19ESVJ9IgorCisjIFRoZSBpbnN0YWxsZXIgcHV0cyB0aGUgd3JvbmcgcGF0aCBpbiB0aGUgc2V0dXB0b29scy5wdGggZmlsZS4gIENvcnJlY3QgaXQuCitkb19pbnN0YWxsX2FwcGVuZCgpIHsKKyAgICBybSAke0R9JHtQWVRIT05fU0lURVBBQ0tBR0VTX0RJUn0vc2V0dXB0b29scy5wdGgKKyAgICBtdiAke0R9JHtiaW5kaXJ9L2Vhc3lfaW5zdGFsbCAke0R9JHtiaW5kaXJ9L2Vhc3kzX2luc3RhbGwKKyAgICBlY2hvICIuLyR7U1JDTkFNRX0tJHtQVn0tcHkke1BZVEhPTl9CQVNFVkVSU0lPTn0uZWdnIiA+ICR7RH0ke1BZVEhPTl9TSVRFUEFDS0FHRVNfRElSfS9zZXR1cHRvb2xzLnB0aAorfQorCitSREVQRU5EU18ke1BOfSA9ICJcCisgIHB5dGhvbjMtZGlzdHV0aWxzIFwKKyAgcHl0aG9uMy1jb21wcmVzc2lvbiBcCisiCitSREVQRU5EU18ke1BOfV9jbGFzcy10YXJnZXQgPSAiXAorICBweXRob24zLWN0eXBlcyBcCisgIHB5dGhvbjMtZGlzdHV0aWxzIFwKKyAgcHl0aG9uMy1lbWFpbCBcCisgIHB5dGhvbjMtaW1wb3J0bGliIFwKKyAgcHl0aG9uMy1udW1iZXJzIFwKKyAgcHl0aG9uMy1jb21wcmVzc2lvbiBcCisgIHB5dGhvbjMtc2hlbGwgXAorICBweXRob24zLXN1YnByb2Nlc3MgXAorICBweXRob24zLXRleHR1dGlscyBcCisgIHB5dGhvbjMtcGtndXRpbCBcCisgIHB5dGhvbjMtdGhyZWFkaW5nIFwKKyAgcHl0aG9uMy1taXNjIFwKKyAgcHl0aG9uMy11bml0dGVzdCBcCisgIHB5dGhvbjMteG1sIFwKKyIKK0JCQ0xBU1NFWFRFTkQgPSAibmF0aXZlIgpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uMy1zaXhfMS4xMC4wLmJiIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uMy1zaXhfMS4xMC4wLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM4YTQ3YjcKLS0tIC9kZXYvbnVsbAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24zLXNpeF8xLjEwLjAuYmIKQEAgLTAsMCArMSw0IEBACitpbmhlcml0IHNldHVwdG9vbHMzCityZXF1aXJlIHB5dGhvbi1zaXguaW5jCisKK1JERVBFTkRTXyR7UE59ICs9ICJweXRob24zLWlvIgpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uMy1zbW1hcF8wLjkuMC5iYiBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbjMtc21tYXBfMC45LjAuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWY4YTI2ZAotLS0gL2Rldi9udWxsCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbjMtc21tYXBfMC45LjAuYmIKQEAgLTAsMCArMSw1IEBACityZXF1aXJlIHB5dGhvbi1zbW1hcC5pbmMKKworaW5oZXJpdCBzZXR1cHRvb2xzMworCitSREVQRU5EU18ke1BOfSArPSAicHl0aG9uMy1jb2RlY3MgcHl0aG9uMy1tbWFwIHB5dGhvbjMtbGFuZyIKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbjMvMDAwLWNyb3NzLWNvbXBpbGUucGF0Y2ggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24zLzAwMC1jcm9zcy1jb21waWxlLnBhdGNoCmluZGV4IDI4ZmU3MGEuLjJkODIyMjEgMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbjMvMDAwLWNyb3NzLWNvbXBpbGUucGF0Y2gKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uMy8wMDAtY3Jvc3MtY29tcGlsZS5wYXRjaApAQCAtOSwxOSArOSwxOSBAQAogIE1ha2VmaWxlLnByZS5pbiB8ICAgMjUgKysrKysrKysrKysrKy0tLS0tLS0tLS0tLQogIDEgZmlsZSBjaGFuZ2VkLCAxMyBpbnNlcnRpb25zKCspLCAxMiBkZWxldGlvbnMoLSkKIAotSW5kZXg6IFB5dGhvbi0zLjUuMS9NYWtlZmlsZS5wcmUuaW4KK0luZGV4OiBQeXRob24tMy41LjIvTWFrZWZpbGUucHJlLmluCiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLS0gUHl0aG9uLTMuNS4xLm9yaWcvTWFrZWZpbGUucHJlLmluCi0rKysgUHl0aG9uLTMuNS4xL01ha2VmaWxlLnByZS5pbgorLS0tIFB5dGhvbi0zLjUuMi5vcmlnL01ha2VmaWxlLnByZS5pbgorKysrIFB5dGhvbi0zLjUuMi9NYWtlZmlsZS5wcmUuaW4KIEBAIC0yMjAsNiArMjIwLDcgQEAgTElCT0JKUz0JQExJQk9CSlNACiAgCiAgUFlUSE9OPQkJcHl0aG9uJChFWEUpCiAgQlVJTERQWVRIT049CXB5dGhvbiQoQlVJTERFWEUpCiArSE9TVFBZVEhPTj0JJChCVUlMRFBZVEhPTikKICAKKyBjcm9zc19jb21waWxpbmc9QGNyb3NzX2NvbXBpbGluZ0AKICBQWVRIT05fRk9SX0JVSUxEPUBQWVRIT05fRk9SX0JVSUxEQAotIF9QWVRIT05fSE9TVF9QTEFURk9STT1AX1BZVEhPTl9IT1NUX1BMQVRGT1JNQAotQEAgLTI3Niw2ICsyNzcsNyBAQCBMSUJGRklfSU5DTFVERURJUj0JQExJQkZGSV9JTkNMVURFRElSQAorQEAgLTI3OSw2ICsyODAsNyBAQCBMSUJGRklfSU5DTFVERURJUj0JQExJQkZGSV9JTkNMVURFRElSQAogICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiAgIyBQYXJzZXIKICBQR0VOPQkJUGFyc2VyL3BnZW4kKEVYRSkKQEAgLTI5LDcgKzI5LDcgQEAKICAKICBQU1JDUz0JCVwKICAJCVBhcnNlci9hY2NlbGVyLmMgXAotQEAgLTUwNiw3ICs1MDgsNyBAQCBidWlsZF9hbGxfZ2VuZXJhdGVfcHJvZmlsZToKK0BAIC01MDksNyArNTExLDcgQEAgYnVpbGRfYWxsX2dlbmVyYXRlX3Byb2ZpbGU6CiAgCiAgcnVuX3Byb2ZpbGVfdGFzazoKICAJOiAjIEZJWE1FOiBjYW4ndCBydW4gZm9yIGEgY3Jvc3MgYnVpbGQKQEAgLTM4LDE2ICszOCwxNiBAQAogIAogIGJ1aWxkX2FsbF9tZXJnZV9wcm9maWxlOgogIAkkKExMVk1fUFJPRl9NRVJHRVIpCi1AQCAtNzc5LDcgKzc4MSw3IEBAICQoSU9fT0JKUyk6ICQoSU9fSCkKLSAKLSAkKEdSQU1NQVJfSCk6ICQoR1JBTU1BUl9JTlBVVCkgJChQR0VOKQotIAkJQCQoTUtESVJfUCkgSW5jbHVkZQotLQkJJChQR0VOKSAkKEdSQU1NQVJfSU5QVVQpICQoR1JBTU1BUl9IKSAkKEdSQU1NQVJfQykKLSsJCSQoSE9TVFBHRU4pICQoR1JBTU1BUl9JTlBVVCkgJChHUkFNTUFSX0gpICQoR1JBTU1BUl9DKQotICQoR1JBTU1BUl9DKTogJChHUkFNTUFSX0gpCi0gCQl0b3VjaCAkKEdSQU1NQVJfQykKLSAKLUBAIC05NjgsNyArOTcwLDcgQEAgJChMSUJSQVJZX09CSlMpICQoTU9ET0JKUykgUHJvZ3JhbXMvcHl0aAorQEAgLTc5Miw3ICs3OTQsNyBAQCAkKEdSQU1NQVJfSCk6ICQoR1JBTU1BUl9JTlBVVCkgJChQR0VOKQorIAlAJChNS0RJUl9QKSBJbmNsdWRlCisgCSMgQXZvaWQgY29weWluZyB0aGUgZmlsZSBvbnRvIGl0c2VsZiBmb3IgYW4gaW4tdHJlZSBidWlsZAorIAlpZiB0ZXN0ICIkKGNyb3NzX2NvbXBpbGluZykiICE9ICJ5ZXMiOyB0aGVuIFwKKy0JCSQoUEdFTikgJChHUkFNTUFSX0lOUFVUKSAkKEdSQU1NQVJfSCkgJChHUkFNTUFSX0MpOyBcCisrCQkkKEhPU1RQR0VOKSAkKEdSQU1NQVJfSU5QVVQpICQoR1JBTU1BUl9IKSAkKEdSQU1NQVJfQyk7IFwKKyAJZWxzZSBcCisgCQljcCAkKHNyY2RpcikvSW5jbHVkZS9ncmFtaW5pdC5oICQoR1JBTU1BUl9IKS50bXA7IFwKKyAJCW12ICQoR1JBTU1BUl9IKS50bXAgJChHUkFNTUFSX0gpOyBcCitAQCAtOTkwLDcgKzk5Miw3IEBAICQoTElCUkFSWV9PQkpTKSAkKE1PRE9CSlMpIFByb2dyYW1zL3B5dGgKICAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiAgCiAgVEVTVE9QVFM9CSQoRVhUUkFURVNUT1BUUykKQEAgLTU2LDcgKzU2LDcgQEAKICBURVNUUlVOTkVSPQkkKFRFU1RQWVRIT04pICQoc3JjZGlyKS9Ub29scy9zY3JpcHRzL3J1bl90ZXN0cy5weQogIFRFU1RUSU1FT1VUPQkzNjAwCiAgCi1AQCAtMTQ1NSw3ICsxNDU3LDcgQEAgZnJhbWV3b3JraW5zdGFsbHN0cnVjdHVyZToJJChMRExJQlJBUlkpCitAQCAtMTQ4MSw3ICsxNDgzLDcgQEAgZnJhbWV3b3JraW5zdGFsbHN0cnVjdHVyZToJJChMRExJQlJBUlkpCiAgCQlmaTsgXAogIAlkb25lCiAgCSQoTE4pIC1mc24gaW5jbHVkZS9weXRob24kKExEVkVSU0lPTikgJChERVNURElSKSQocHJlZml4KS9IZWFkZXJzCkBAIC02NSw3ICs2NSw3IEBACiAgCSQoTE4pIC1mc24gJChWRVJTSU9OKSAkKERFU1RESVIpJChQWVRIT05GUkFNRVdPUktJTlNUQUxMRElSKS9WZXJzaW9ucy9DdXJyZW50CiAgCSQoTE4pIC1mc24gVmVyc2lvbnMvQ3VycmVudC8kKFBZVEhPTkZSQU1FV09SSykgJChERVNURElSKSQoUFlUSE9ORlJBTUVXT1JLSU5TVEFMTERJUikvJChQWVRIT05GUkFNRVdPUkspCiAgCSQoTE4pIC1mc24gVmVyc2lvbnMvQ3VycmVudC9IZWFkZXJzICQoREVTVERJUikkKFBZVEhPTkZSQU1FV09SS0lOU1RBTExESVIpL0hlYWRlcnMKLUBAIC0xNTIxLDcgKzE1MjMsNyBAQCBjb25maWcuc3RhdHVzOgkkKHNyY2RpcikvY29uZmlndXJlCitAQCAtMTU0Nyw3ICsxNTQ5LDcgQEAgY29uZmlnLnN0YXR1czoJJChzcmNkaXIpL2NvbmZpZ3VyZQogIAogICMgUnVuIHJlaW5kZW50IG9uIHRoZSBsaWJyYXJ5CiAgcmVpbmRlbnQ6CkBAIC03NCw3ICs3NCw3IEBACiAgCiAgIyBSZXJ1biBjb25maWd1cmUgd2l0aCB0aGUgc2FtZSBvcHRpb25zIGFzIGl0IHdhcyBydW4gbGFzdCB0aW1lLAogICMgcHJvdmlkZWQgdGhlIGNvbmZpZy5zdGF0dXMgc2NyaXB0IGV4aXN0cwotQEAgLTE2NTYsNyArMTY1OCw3IEBAIGZ1bm55OgorQEAgLTE2ODMsNyArMTY4NSw3IEBAIGZ1bm55OgogIAogICMgUGVyZm9ybSBzb21lIHZlcmlmaWNhdGlvbiBjaGVja3Mgb24gYW55IG1vZGlmaWVkIGZpbGVzLgogIHBhdGNoY2hlY2s6IGFsbApkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uMy8xMTAtZW5hYmxlLXpsaWIucGF0Y2ggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24zLzExMC1lbmFibGUtemxpYi5wYXRjaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZmI5MmExOS4uMDAwMDAwMAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24zLzExMC1lbmFibGUtemxpYi5wYXRjaAorKysgL2Rldi9udWxsCkBAIC0xLDIxICswLDAgQEAKLUVuYWJsZSB6bGliIGluIHB5dGhvbgotCi0tS2hlbQotCi1VcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW09FLVNwZWNpZmljXQotCi0tLS0KLSBNb2R1bGVzL1NldHVwLmRpc3QgfCAgICAyICstCi0gMSBmaWxlIGNoYW5nZWQsIDEgaW5zZXJ0aW9uKCspLCAxIGRlbGV0aW9uKC0pCi0KLS0tLSBhL01vZHVsZXMvU2V0dXAuZGlzdAotKysrIGIvTW9kdWxlcy9TZXR1cC5kaXN0Ci1AQCAtMzU0LDcgKzM1NCw3IEBAIF9zeW10YWJsZSBzeW10YWJsZW1vZHVsZS5jCi0gIyBBbmRyZXcgS3VjaGxpbmcncyB6bGliIG1vZHVsZS4KLSAjIFRoaXMgcmVxdWlyZSB6bGliIDEuMS4zIChvciBsYXRlcikuCi0gIyBTZWUgaHR0cDovL3d3dy5nemlwLm9yZy96bGliLwotLSN6bGliIHpsaWJtb2R1bGUuYyAtSSQocHJlZml4KS9pbmNsdWRlIC1MJChleGVjX3ByZWZpeCkvbGliIC1segotK3psaWIgemxpYm1vZHVsZS5jIC1segotIAotICMgSW50ZXJmYWNlIHRvIHRoZSBFeHBhdCBYTUwgcGFyc2VyCi0gIwpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uMy8xMi1kaXN0dXRpbHMtcHJlZml4LWlzLWluc2lkZS1zdGFnaW5nLWFyZWEucGF0Y2ggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24zLzEyLWRpc3R1dGlscy1wcmVmaXgtaXMtaW5zaWRlLXN0YWdpbmctYXJlYS5wYXRjaAppbmRleCA4YjkzYzFjLi5jNTNlYzBjIDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24zLzEyLWRpc3R1dGlscy1wcmVmaXgtaXMtaW5zaWRlLXN0YWdpbmctYXJlYS5wYXRjaAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24zLzEyLWRpc3R1dGlscy1wcmVmaXgtaXMtaW5zaWRlLXN0YWdpbmctYXJlYS5wYXRjaApAQCAtMSw0ICsxLDQgQEAKLUZyb20gZDRkZDY3ZGFhMTU1NWJmMTMyNzJjYzA3MTcwNjMzODU3MjUzOWJhZCBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb20gNzYzMGFiMjI1Nzg3NDZkM2Q3OTBkMDU5OGMwZDI3OWNmN2FmZWQ5NyBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKIEZyb206IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CiBEYXRlOiBUdWUsIDE0IE1heSAyMDEzIDE1OjAwOjI2IC0wNzAwCiBTdWJqZWN0OiBbUEFUQ0ggMDEvMjBdIHB5dGhvbjM6IEFkZCB0YXJnZXQgYW5kIG5hdGl2ZSByZWNpcGVzCkBAIC0xNCwyNyArMTQsMTQgQEAKICMgU2lnbmVkLW9mZi1ieTogQWxlamFuZHJvIEhlcm5hbmRleiA8YWxlamFuZHJvLmhlcm5hbmRlekBsaW51eC5pbnRlbC5jb20+CiAKIC0tLQorIExpYi9kaXN0dXRpbHMvc3lzY29uZmlnLnB5IHwgMTAgKysrKysrKystLQorIDEgZmlsZSBjaGFuZ2VkLCA4IGluc2VydGlvbnMoKyksIDIgZGVsZXRpb25zKC0pCisKIGRpZmYgLS1naXQgYS9MaWIvZGlzdHV0aWxzL3N5c2NvbmZpZy5weSBiL0xpYi9kaXN0dXRpbHMvc3lzY29uZmlnLnB5Ci1pbmRleCA1NzM3MjRkLi40MThiNDc4IDEwMDY0NAoraW5kZXggNTczNzI0ZC4uMzkwYzQ4NSAxMDA2NDQKIC0tLSBhL0xpYi9kaXN0dXRpbHMvc3lzY29uZmlnLnB5CiArKysgYi9MaWIvZGlzdHV0aWxzL3N5c2NvbmZpZy5weQotQEAgLTE3LDEwICsxNywxMSBAQCBpbXBvcnQgc3lzCi0gZnJvbSAuZXJyb3JzIGltcG9ydCBEaXN0dXRpbHNQbGF0Zm9ybUVycm9yCi0gCi0gIyBUaGVzZSBhcmUgbmVlZGVkIGluIGEgY291cGxlIG9mIHNwb3RzLCBzbyBqdXN0IGNvbXB1dGUgdGhlbSBvbmNlLgotLVBSRUZJWCA9IG9zLnBhdGgubm9ybXBhdGgoc3lzLnByZWZpeCkKLS1FWEVDX1BSRUZJWCA9IG9zLnBhdGgubm9ybXBhdGgoc3lzLmV4ZWNfcHJlZml4KQotLUJBU0VfUFJFRklYID0gb3MucGF0aC5ub3JtcGF0aChzeXMuYmFzZV9wcmVmaXgpCi0tQkFTRV9FWEVDX1BSRUZJWCA9IG9zLnBhdGgubm9ybXBhdGgoc3lzLmJhc2VfZXhlY19wcmVmaXgpCi0rUFJFRklYID0gb3MucGF0aC5ub3JtcGF0aChzeXMucHJlZml4KS5yZXBsYWNlKCBvcy5nZXRlbnYoIkJVSUxEX1NZUyIpLCBvcy5nZXRlbnYoIkhPU1RfU1lTIikgKQotK0VYRUNfUFJFRklYID0gb3MucGF0aC5ub3JtcGF0aChzeXMuZXhlY19wcmVmaXgpLnJlcGxhY2UoIG9zLmdldGVudigiQlVJTERfU1lTIiksIG9zLmdldGVudigiSE9TVF9TWVMiKSApCi0rQkFTRV9QUkVGSVggPSBvcy5wYXRoLm5vcm1wYXRoKHN5cy5iYXNlX3ByZWZpeCkucmVwbGFjZSggb3MuZ2V0ZW52KCJCVUlMRF9TWVMiKSwgb3MuZ2V0ZW52KCJIT1NUX1NZUyIpICkKLStCQVNFX0VYRUNfUFJFRklYPSBvcy5wYXRoLm5vcm1wYXRoKHN5cy5iYXNlX2V4ZWNfcHJlZml4KS5yZXBsYWNlKCBvcy5nZXRlbnYoIkJVSUxEX1NZUyIpLCBvcy5nZXRlbnYoIkhPU1RfU1lTIikgKQotKwotIAotICMgUGF0aCB0byB0aGUgYmFzZSBkaXJlY3Rvcnkgb2YgdGhlIHByb2plY3QuIE9uIFdpbmRvd3MgdGhlIGJpbmFyeSBtYXkKLSAjIGxpdmUgaW4gcHJvamVjdC9QQ0J1aWxkL3dpbjMyIG9yIHByb2plY3QvUENCdWlsZC9hbWQ2NC4KLUBAIC04NCw3ICs4NSw5IEBAIGRlZiBnZXRfcHl0aG9uX2luYyhwbGF0X3NwZWNpZmljPTAsIHByZWZpeD1Ob25lKToKK0BAIC04NCw3ICs4NCw5IEBAIGRlZiBnZXRfcHl0aG9uX2luYyhwbGF0X3NwZWNpZmljPTAsIHByZWZpeD1Ob25lKToKICAgICAgSWYgJ3ByZWZpeCcgaXMgc3VwcGxpZWQsIHVzZSBpdCBpbnN0ZWFkIG9mIHN5cy5iYXNlX3ByZWZpeCBvcgogICAgICBzeXMuYmFzZV9leGVjX3ByZWZpeCAtLSBpLmUuLCBpZ25vcmUgJ3BsYXRfc3BlY2lmaWMnLgogICAgICAiIiIKQEAgLTQ1LDcgKzMyLDcgQEAKICAgICAgICAgIHByZWZpeCA9IHBsYXRfc3BlY2lmaWMgYW5kIEJBU0VfRVhFQ19QUkVGSVggb3IgQkFTRV9QUkVGSVgKICAgICAgaWYgb3MubmFtZSA9PSAicG9zaXgiOgogICAgICAgICAgaWYgcHl0aG9uX2J1aWxkOgotQEAgLTEyNSw2ICsxMjgsMTAgQEAgZGVmIGdldF9weXRob25fbGliKHBsYXRfc3BlY2lmaWM9MCwgc3RhbmRhcmRfbGliPTAsIHByZWZpeD1Ob25lKToKK0BAIC0xMjUsNiArMTI3LDEwIEBAIGRlZiBnZXRfcHl0aG9uX2xpYihwbGF0X3NwZWNpZmljPTAsIHN0YW5kYXJkX2xpYj0wLCBwcmVmaXg9Tm9uZSk6CiAgICAgIElmICdwcmVmaXgnIGlzIHN1cHBsaWVkLCB1c2UgaXQgaW5zdGVhZCBvZiBzeXMuYmFzZV9wcmVmaXggb3IKICAgICAgc3lzLmJhc2VfZXhlY19wcmVmaXggLS0gaS5lLiwgaWdub3JlICdwbGF0X3NwZWNpZmljJy4KICAgICAgIiIiCkBAIC01Niw3ICs0Myw3IEBACiAgICAgIGlmIHByZWZpeCBpcyBOb25lOgogICAgICAgICAgaWYgc3RhbmRhcmRfbGliOgogICAgICAgICAgICAgIHByZWZpeCA9IHBsYXRfc3BlY2lmaWMgYW5kIEJBU0VfRVhFQ19QUkVGSVggb3IgQkFTRV9QUkVGSVgKLUBAIC0xMzMsNyArMTQwLDcgQEAgZGVmIGdldF9weXRob25fbGliKHBsYXRfc3BlY2lmaWM9MCwgc3RhbmRhcmRfbGliPTAsIHByZWZpeD1Ob25lKToKK0BAIC0xMzMsNyArMTM5LDcgQEAgZGVmIGdldF9weXRob25fbGliKHBsYXRfc3BlY2lmaWM9MCwgc3RhbmRhcmRfbGliPTAsIHByZWZpeD1Ob25lKToKICAKICAgICAgaWYgb3MubmFtZSA9PSAicG9zaXgiOgogICAgICAgICAgbGlicHl0aG9uID0gb3MucGF0aC5qb2luKHByZWZpeCwKQEAgLTY1LDI0ICs1Miw2IEBACiAgICAgICAgICBpZiBzdGFuZGFyZF9saWI6CiAgICAgICAgICAgICAgcmV0dXJuIGxpYnB5dGhvbgogICAgICAgICAgZWxzZToKLUBAIC0yMzMsNyArMjQwLDcgQEAgZGVmIGdldF9jb25maWdfaF9maWxlbmFtZSgpOgotICAgICBlbHNlOgotICAgICAgICAgaW5jX2RpciA9IGdldF9weXRob25faW5jKHBsYXRfc3BlY2lmaWM9MSkKLSAKLS0gICAgcmV0dXJuIG9zLnBhdGguam9pbihpbmNfZGlyLCAncHljb25maWcuaCcpCi0rICAgIHJldHVybiBvcy5wYXRoLmpvaW4oaW5jX2RpciwgJ3B5Y29uZmlnLmgnLnJlcGxhY2UoIG9zLmdldGVudigiQlVJTERfU1lTIiksIG9zLmdldGVudigiSE9TVF9TWVMiKSApKQotIAotIAotIGRlZiBnZXRfbWFrZWZpbGVfZmlsZW5hbWUoKToKLUBAIC0yNDIsNyArMjQ5LDcgQEAgZGVmIGdldF9tYWtlZmlsZV9maWxlbmFtZSgpOgotICAgICAgICAgcmV0dXJuIG9zLnBhdGguam9pbihfc3lzX2hvbWUgb3IgcHJvamVjdF9iYXNlLCAiTWFrZWZpbGUiKQotICAgICBsaWJfZGlyID0gZ2V0X3B5dGhvbl9saWIocGxhdF9zcGVjaWZpYz0wLCBzdGFuZGFyZF9saWI9MSkKLSAgICAgY29uZmlnX2ZpbGUgPSAnY29uZmlnLXt9e30nLmZvcm1hdChnZXRfcHl0aG9uX3ZlcnNpb24oKSwgYnVpbGRfZmxhZ3MpCi0tICAgIHJldHVybiBvcy5wYXRoLmpvaW4obGliX2RpciwgY29uZmlnX2ZpbGUsICdNYWtlZmlsZScpCi0rICAgIHJldHVybiBvcy5wYXRoLmpvaW4obGliX2RpciwgY29uZmlnX2ZpbGUsICdNYWtlZmlsZScpLnJlcGxhY2UoIG9zLmdldGVudigiQlVJTERfU1lTIiksIG9zLmdldGVudigiSE9TVF9TWVMiKSApCi0gCi0gCi0gZGVmIHBhcnNlX2NvbmZpZ19oKGZwLCBnPU5vbmUpOgogLS0gCi0yLjcuMAorMi44LjAucmMzCiAKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbjMvQ1ZFLTIwMTYtNTYzNi5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbjMvQ1ZFLTIwMTYtNTYzNi5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wZDQ5NGQyCi0tLSAvZGV2L251bGwKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uMy9DVkUtMjAxNi01NjM2LnBhdGNoCkBAIC0wLDAgKzEsNDQgQEAKKworIyBIRyBjaGFuZ2VzZXQgcGF0Y2gKKyMgVXNlciBCZW5qYW1pbiBQZXRlcnNvbiA8YmVuamFtaW5AcHl0aG9uLm9yZz4KKyMgRGF0ZSAxNDUzMzU3NTA2IDI4ODAwCisjIE5vZGUgSUQgMTBkYWQ2ZGExYjI4ZWE0YWY3OGFkOTUyOWU0NjlmZGJmNGViYmM4ZgorIyBQYXJlbnQgIGEzYWMyY2Q5M2RiOWQ1MzM2ZGZkN2I1YjI3ZWZkZTJjNTY4ZDg3OTQjIFBhcmVudCAgMDFkZGQ2MDhiODVjODU5NTI1MzdkOTVhNDNiYmFiZjRmYjY1NTA1NworbWVyZ2UgMy40ICgjMjYxNzEpCisKK1Vwc3RyZWFtLVN0YXR1czogQmFja3BvcnQKK0NWRTogQ1ZFLTIwMTYtNTYzNgorCitodHRwczovL2hnLnB5dGhvbi5vcmcvY3B5dGhvbi9yYXctcmV2LzEwZGFkNmRhMWIyOAorU2lnbmVkLW9mZi1ieTogQXJtaW4gS3VzdGVyIDxha3VzdGVyQG12aXN0YS5jb20+CisKK0luZGV4OiBQeXRob24tMy41LjEvTWlzYy9ORVdTCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gUHl0aG9uLTMuNS4xLm9yaWcvTWlzYy9ORVdTCisrKysgUHl0aG9uLTMuNS4xL01pc2MvTkVXUworQEAgLTkxLDYgKzkxLDkgQEAgQ29yZSBhbmQgQnVpbHRpbnMKKyAgIFB5dGhvbi5oIGhlYWRlciB0byBmaXggYSBjb21waWxhdGlvbiBlcnJvciB3aXRoIE9wZW5NUC4gUHlUaHJlYWRTdGF0ZV9HRVQoKQorICAgYmVjb21lcyBhbiBhbGlhcyB0byBQeVRocmVhZFN0YXRlX0dldCgpIHRvIGF2b2lkIEFCSSBpbmNvbXBhdGliaWxpZXMuCisgCisrLSBJc3N1ZSAjMjYxNzE6IEZpeCBwb3NzaWJsZSBpbnRlZ2VyIG92ZXJmbG93IGFuZCBoZWFwIGNvcnJ1cHRpb24gaW4KKysgIHppcGltcG9ydGVyLmdldF9kYXRhKCkuCisrCisgTGlicmFyeQorIC0tLS0tLS0KKyAKK0luZGV4OiBQeXRob24tMy41LjEvTW9kdWxlcy96aXBpbXBvcnQuYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIFB5dGhvbi0zLjUuMS5vcmlnL01vZHVsZXMvemlwaW1wb3J0LmMKKysrKyBQeXRob24tMy41LjEvTW9kdWxlcy96aXBpbXBvcnQuYworQEAgLTExMTIsNiArMTExMiwxMSBAQCBnZXRfZGF0YShQeU9iamVjdCAqYXJjaGl2ZSwgUHlPYmplY3QgKnRvCisgICAgIH0KKyAgICAgZmlsZV9vZmZzZXQgKz0gbDsgICAgICAgICAgIC8qIFN0YXJ0IG9mIGZpbGUgZGF0YSAqLworIAorKyAgICBpZiAoZGF0YV9zaXplID4gTE9OR19NQVggLSAxKSB7CisrICAgICAgICBmY2xvc2UoZnApOworKyAgICAgICAgUHlFcnJfTm9NZW1vcnkoKTsKKysgICAgICAgIHJldHVybiBOVUxMOworKyAgICB9CisgICAgIGJ5dGVzX3NpemUgPSBjb21wcmVzcyA9PSAwID8gZGF0YV9zaXplIDogZGF0YV9zaXplICsgMTsKKyAgICAgaWYgKGJ5dGVzX3NpemUgPT0gMCkKKyAgICAgICAgIGJ5dGVzX3NpemUrKzsKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbjMvZml4X2Zvcl91c2luZ19kaWZmZXJlbnRfbGliZGlyLnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uMy9maXhfZm9yX3VzaW5nX2RpZmZlcmVudF9saWJkaXIucGF0Y2gKaW5kZXggY2QxYTk3OC4uMDYxMDU2NSAxMDA2NDQKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uMy9maXhfZm9yX3VzaW5nX2RpZmZlcmVudF9saWJkaXIucGF0Y2gKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uMy9maXhfZm9yX3VzaW5nX2RpZmZlcmVudF9saWJkaXIucGF0Y2gKQEAgLTQsMTEgKzQsMTEgQEAKIFRoaXMgcGF0Y2ggbWFrZXMgdGhlIG5hdGl2ZSBweXRob24gYmluYXJ5IG1vZHVsZXMgZmluZGFibGUKIGluIHRoZSBpbnN0YWxsIHByb2Nlc3Mgb2YgdGhlIGhvc3QgcHl0aG9uLgogCi1TaWduZWQtT2ZmLUJ5OiBOaXRpbiBBIEthbWJsZSA8bml0aW4uYS5rYW1ibGVAaW50ZWwuY29tPgorU2lnbmVkLW9mZi1ieTogTml0aW4gQSBLYW1ibGUgPG5pdGluLmEua2FtYmxlQGludGVsLmNvbT4KIERhdGU6IDIwMTIvMDMvMTQKIAogVXBkYXRlZCBmb3IgcHl0aG9uIDIuNy4zCi1TaWduZWQtT2ZmLUJ5OiBOaXRpbiBBIEthbWJsZSA8bml0aW4uYS5rYW1ibGVAaW50ZWwuY29tPgorU2lnbmVkLW9mZi1ieTogTml0aW4gQSBLYW1ibGUgPG5pdGluLmEua2FtYmxlQGludGVsLmNvbT4KIERhdGU6IDIwMTIvMDUvMDEKIAogSW5kZXg6IFB5dGhvbi0zLjMuMHJjMi9MaWIvc3lzY29uZmlnLnB5CmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24zL3B5dGhvbi0zLjMtbXVsdGlsaWIucGF0Y2ggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24zL3B5dGhvbi0zLjMtbXVsdGlsaWIucGF0Y2gKaW5kZXggNDRlYzQyNC4uMDU2ZThlNyAxMDA2NDQKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uMy9weXRob24tMy4zLW11bHRpbGliLnBhdGNoCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbjMvcHl0aG9uLTMuMy1tdWx0aWxpYi5wYXRjaApAQCAtNywxMCArNywxMCBAQAogU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KIFNpZ25lZC1vZmYtYnk6IEFsZWphbmRybyBIZXJuYW5kZXogPGFsZWphbmRyby5oZXJuYW5kZXpAbGludXguaW50ZWwuY29tPgogCi1JbmRleDogUHl0aG9uLTMuNS4wL0luY2x1ZGUvcHl0aG9ucnVuLmgKK0luZGV4OiBQeXRob24tMy41LjIvSW5jbHVkZS9weXRob25ydW4uaAogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0tIFB5dGhvbi0zLjUuMC5vcmlnL0luY2x1ZGUvcHl0aG9ucnVuLmgKLSsrKyBQeXRob24tMy41LjAvSW5jbHVkZS9weXRob25ydW4uaAorLS0tIFB5dGhvbi0zLjUuMi5vcmlnL0luY2x1ZGUvcHl0aG9ucnVuLmgKKysrKyBQeXRob24tMy41LjIvSW5jbHVkZS9weXRob25ydW4uaAogQEAgLTIzLDYgKzIzLDkgQEAgdHlwZWRlZiBzdHJ1Y3QgewogIH0gUHlDb21waWxlckZsYWdzOwogICNlbmRpZgpAQCAtMjEsMTAgKzIxLDEwIEBACiAgI2lmbmRlZiBQeV9MSU1JVEVEX0FQSQogIFB5QVBJX0ZVTkMoaW50KSBQeVJ1bl9TaW1wbGVTdHJpbmdGbGFncyhjb25zdCBjaGFyICosIFB5Q29tcGlsZXJGbGFncyAqKTsKICBQeUFQSV9GVU5DKGludCkgUHlSdW5fQW55RmlsZUZsYWdzKEZJTEUgKiwgY29uc3QgY2hhciAqLCBQeUNvbXBpbGVyRmxhZ3MgKik7Ci1JbmRleDogUHl0aG9uLTMuNS4wL0xpYi9kaXN0dXRpbHMvY29tbWFuZC9pbnN0YWxsLnB5CitJbmRleDogUHl0aG9uLTMuNS4yL0xpYi9kaXN0dXRpbHMvY29tbWFuZC9pbnN0YWxsLnB5CiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLS0gUHl0aG9uLTMuNS4wLm9yaWcvTGliL2Rpc3R1dGlscy9jb21tYW5kL2luc3RhbGwucHkKLSsrKyBQeXRob24tMy41LjAvTGliL2Rpc3R1dGlscy9jb21tYW5kL2luc3RhbGwucHkKKy0tLSBQeXRob24tMy41LjIub3JpZy9MaWIvZGlzdHV0aWxzL2NvbW1hbmQvaW5zdGFsbC5weQorKysrIFB5dGhvbi0zLjUuMi9MaWIvZGlzdHV0aWxzL2NvbW1hbmQvaW5zdGFsbC5weQogQEAgLTE5LDYgKzE5LDggQEAgZnJvbSBzaXRlIGltcG9ydCBVU0VSX0JBU0UKICBmcm9tIHNpdGUgaW1wb3J0IFVTRVJfU0lURQogIEhBU19VU0VSX1NJVEUgPSBUcnVlCkBAIC00MywyMyArNDMsMjMgQEAKICAgICAgICAgICdoZWFkZXJzJzogJyRiYXNlL2luY2x1ZGUvcHl0aG9uJHB5X3ZlcnNpb25fc2hvcnQkYWJpZmxhZ3MvJGRpc3RfbmFtZScsCiAgICAgICAgICAnc2NyaXB0cyc6ICckYmFzZS9iaW4nLAogICAgICAgICAgJ2RhdGEnICAgOiAnJGJhc2UnLAotSW5kZXg6IFB5dGhvbi0zLjUuMC9MaWIvcHlkb2MucHkKK0luZGV4OiBQeXRob24tMy41LjIvTGliL3B5ZG9jLnB5CiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLS0gUHl0aG9uLTMuNS4wLm9yaWcvTGliL3B5ZG9jLnB5Ci0rKysgUHl0aG9uLTMuNS4wL0xpYi9weWRvYy5weQotQEAgLTM5Myw3ICszOTMsNyBAQCBjbGFzcyBEb2M6CistLS0gUHl0aG9uLTMuNS4yLm9yaWcvTGliL3B5ZG9jLnB5CisrKysgUHl0aG9uLTMuNS4yL0xpYi9weWRvYy5weQorQEAgLTM4NCw3ICszODQsNyBAQCBjbGFzcyBEb2M6CisgICAgIGRvY21vZHVsZSA9IGRvY2NsYXNzID0gZG9jcm91dGluZSA9IGRvY290aGVyID0gZG9jcHJvcGVydHkgPSBkb2NkYXRhID0gZmFpbAogIAotICAgICAgICAgZG9jbG9jID0gb3MuZW52aXJvbi5nZXQoIlBZVEhPTkRPQ1MiLCBzZWxmLlBZVEhPTkRPQ1MpCisgICAgIGRlZiBnZXRkb2Nsb2Moc2VsZiwgb2JqZWN0LAorLSAgICAgICAgICAgICAgICAgIGJhc2VkaXI9b3MucGF0aC5qb2luKHN5cy5iYXNlX2V4ZWNfcHJlZml4LCAibGliIiwKKysgICAgICAgICAgICAgICAgICBiYXNlZGlyPW9zLnBhdGguam9pbihzeXMuYmFzZV9leGVjX3ByZWZpeCwgc3lzLmxpYiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAicHl0aG9uJWQuJWQiICUgIHN5cy52ZXJzaW9uX2luZm9bOjJdKSk6CisgICAgICAgICAiIiJSZXR1cm4gdGhlIGxvY2F0aW9uIG9mIG1vZHVsZSBkb2NzIG9yIE5vbmUiIiIKICAKLS0gICAgICAgIGJhc2VkaXIgPSBvcy5wYXRoLmpvaW4oc3lzLmJhc2VfZXhlY19wcmVmaXgsICJsaWIiLAotKyAgICAgICAgYmFzZWRpciA9IG9zLnBhdGguam9pbihzeXMuYmFzZV9leGVjX3ByZWZpeCwgc3lzLmxpYiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInB5dGhvbiVkLiVkIiAlICBzeXMudmVyc2lvbl9pbmZvWzoyXSkKLSAgICAgICAgIGlmIChpc2luc3RhbmNlKG9iamVjdCwgdHlwZShvcykpIGFuZAotICAgICAgICAgICAgIChvYmplY3QuX19uYW1lX18gaW4gKCdlcnJubycsICdleGNlcHRpb25zJywgJ2djJywgJ2ltcCcsCi1JbmRleDogUHl0aG9uLTMuNS4wL0xpYi90cmFjZS5weQorSW5kZXg6IFB5dGhvbi0zLjUuMi9MaWIvdHJhY2UucHkKID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tLSBQeXRob24tMy41LjAub3JpZy9MaWIvdHJhY2UucHkKLSsrKyBQeXRob24tMy41LjAvTGliL3RyYWNlLnB5CistLS0gUHl0aG9uLTMuNS4yLm9yaWcvTGliL3RyYWNlLnB5CisrKysgUHl0aG9uLTMuNS4yL0xpYi90cmFjZS5weQogQEAgLTc0OSwxMCArNzQ5LDEwIEBAIGRlZiBtYWluKGFyZ3Y9Tm9uZSk6CiAgICAgICAgICAgICAgICAgICMgc2hvdWxkIEkgYWxzbyBjYWxsIGV4cGFuZHVzZXI/IChhZnRlciBhbGwsIGNvdWxkIHVzZSAkSE9NRSkKICAKQEAgLTczLDExICs3MywxMSBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAicHl0aG9uIiArIHN5cy52ZXJzaW9uWzozXSkpCiAgICAgICAgICAgICAgICAgIHMgPSBvcy5wYXRoLm5vcm1wYXRoKHMpCiAgICAgICAgICAgICAgICAgIGlnbm9yZV9kaXJzLmFwcGVuZChzKQotSW5kZXg6IFB5dGhvbi0zLjUuMC9NYWtlZmlsZS5wcmUuaW4KK0luZGV4OiBQeXRob24tMy41LjIvTWFrZWZpbGUucHJlLmluCiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLS0gUHl0aG9uLTMuNS4wLm9yaWcvTWFrZWZpbGUucHJlLmluCi0rKysgUHl0aG9uLTMuNS4wL01ha2VmaWxlLnByZS5pbgotQEAgLTEwMSw2ICsxMDEsOCBAQCBQWV9DT1JFX0NGTEFHUz0JJChQWV9DRkxBR1MpICQoUFlfQ0ZMQUdTCistLS0gUHl0aG9uLTMuNS4yLm9yaWcvTWFrZWZpbGUucHJlLmluCisrKysgUHl0aG9uLTMuNS4yL01ha2VmaWxlLnByZS5pbgorQEAgLTEwNiw2ICsxMDYsOCBAQCBQWV9DT1JFX0NGTEFHUz0JJChQWV9DRkxBR1MpICQoUFlfQ0ZMQUdTCiAgCiAgIyBNYWNoaW5lLWRlcGVuZGVudCBzdWJkaXJlY3RvcmllcwogIE1BQ0hERVA9CUBNQUNIREVQQApAQCAtODYsNyArODYsNyBAQAogIAogICMgTXVsdGlhcmNoIGRpcmVjdG9yeSAobWF5IGJlIGVtcHR5KQogIE1VTFRJQVJDSD0JQE1VTFRJQVJDSEAKLUBAIC0xMjAsNyArMTIyLDcgQEAgTElCRElSPQkJQGxpYmRpckAKK0BAIC0xMjUsNyArMTI3LDcgQEAgTElCRElSPQkJQGxpYmRpckAKICBNQU5ESVI9CQlAbWFuZGlyQAogIElOQ0xVREVESVI9CUBpbmNsdWRlZGlyQAogIENPTkZJTkNMVURFRElSPQkkKGV4ZWNfcHJlZml4KS9pbmNsdWRlCkBAIC05NSw3ICs5NSw3IEBACiAgQUJJRkxBR1M9CUBBQklGTEFHU0AKICAKICAjIERldGFpbGVkIGRlc3RpbmF0aW9uIGRpcmVjdG9yaWVzCi1AQCAtNzI5LDYgKzczMSw3IEBAIE1vZHVsZXMvZ2V0cGF0aC5vOiAkKHNyY2RpcikvTW9kdWxlcy9nZXQKK0BAIC03NTUsNiArNzU3LDcgQEAgTW9kdWxlcy9nZXRwYXRoLm86ICQoc3JjZGlyKS9Nb2R1bGVzL2dldAogIAkJLURFWEVDX1BSRUZJWD0nIiQoZXhlY19wcmVmaXgpIicgXAogIAkJLURWRVJTSU9OPSciJChWRVJTSU9OKSInIFwKICAJCS1EVlBBVEg9JyIkKFZQQVRIKSInIFwKQEAgLTEwMyw3ICsxMDMsNyBAQAogIAkJLW8gJEAgJChzcmNkaXIpL01vZHVsZXMvZ2V0cGF0aC5jCiAgCiAgUHJvZ3JhbXMvcHl0aG9uLm86ICQoc3JjZGlyKS9Qcm9ncmFtcy9weXRob24uYwotQEAgLTc5OCw3ICs4MDEsNyBAQCAkKE9QQ09ERV9IKTogJChzcmNkaXIpL0xpYi9vcGNvZGUucHkgJChPCitAQCAtODM1LDcgKzgzOCw3IEBAICQoT1BDT0RFX0gpOiAkKHNyY2RpcikvTGliL29wY29kZS5weSAkKE8KICBQeXRob24vY29tcGlsZS5vIFB5dGhvbi9zeW10YWJsZS5vIFB5dGhvbi9hc3QubzogJChHUkFNTUFSX0gpICQoQVNUX0gpCiAgCiAgUHl0aG9uL2dldHBsYXRmb3JtLm86ICQoc3JjZGlyKS9QeXRob24vZ2V0cGxhdGZvcm0uYwpAQCAtMTEyLDI1ICsxMTIsMjUgQEAKICAKICBQeXRob24vaW1wb3J0ZGwubzogJChzcmNkaXIpL1B5dGhvbi9pbXBvcnRkbC5jCiAgCQkkKENDKSAtYyAkKFBZX0NPUkVfQ0ZMQUdTKSAtSSQoRExJTkNMRElSKSAtbyAkQCAkKHNyY2RpcikvUHl0aG9uL2ltcG9ydGRsLmMKLUluZGV4OiBQeXRob24tMy41LjAvTW9kdWxlcy9nZXRwYXRoLmMKK0luZGV4OiBQeXRob24tMy41LjIvTW9kdWxlcy9nZXRwYXRoLmMKID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tLSBQeXRob24tMy41LjAub3JpZy9Nb2R1bGVzL2dldHBhdGguYwotKysrIFB5dGhvbi0zLjUuMC9Nb2R1bGVzL2dldHBhdGguYwotQEAgLTExNyw5ICsxMTcsMTEgQEAKLSAjZGVmaW5lIEVYRUNfUFJFRklYIFBSRUZJWAorLS0tIFB5dGhvbi0zLjUuMi5vcmlnL01vZHVsZXMvZ2V0cGF0aC5jCisrKysgUHl0aG9uLTMuNS4yL01vZHVsZXMvZ2V0cGF0aC5jCitAQCAtMTA1LDYgKzEwNSwxMyBAQAorICNlcnJvciAiUFJFRklYLCBFWEVDX1BSRUZJWCwgVkVSU0lPTiwgYW5kIFZQQVRIIG11c3QgYmUgY29uc3RhbnQgZGVmaW5lZCIKICAjZW5kaWYKICAKICsjZGVmaW5lIExJQl9QWVRIT04gTElCICIvcHl0aG9uIiBWRVJTSU9OCiArCi0gI2lmbmRlZiBQWVRIT05QQVRICi0tI2RlZmluZSBQWVRIT05QQVRIIFBSRUZJWCAiL2xpYi9weXRob24iIFZFUlNJT04gIjoiIFwKLS0gICAgICAgICAgICAgIEVYRUNfUFJFRklYICIvbGliL3B5dGhvbiIgVkVSU0lPTiAiL2xpYi1keW5sb2FkIgorKyNpZm5kZWYgUFlUSE9OUEFUSAogKyNkZWZpbmUgUFlUSE9OUEFUSCBQUkVGSVggIi8iIExJQl9QWVRIT04gIjoiIFwKLSsgICAgICAgICAgICAgIEVYRUNfUFJFRklYICIvIiBMSUJfUFlUSE9OICIvbGliLWR5bmxvYWQiCi0gI2VuZGlmCi0gCisrICAgICAgICBFWEVDX1BSRUZJWCAiLyIgTElCX1BZVEhPTiAiL2xpYi1keW5sb2FkIgorKyNlbmRpZgorKwogICNpZm5kZWYgTEFORE1BUksKLUBAIC0xMzAsNiArMTMyLDcgQEAgc3RhdGljIHdjaGFyX3QgcHJlZml4W01BWFBBVEhMRU4rMV07CisgI2RlZmluZSBMQU5ETUFSSyBMIm9zLnB5IgorICNlbmRpZgorQEAgLTExMyw2ICsxMjAsNyBAQCBzdGF0aWMgd2NoYXJfdCBwcmVmaXhbTUFYUEFUSExFTisxXTsKICBzdGF0aWMgd2NoYXJfdCBleGVjX3ByZWZpeFtNQVhQQVRITEVOKzFdOwogIHN0YXRpYyB3Y2hhcl90IHByb2dwYXRoW01BWFBBVEhMRU4rMV07CiAgc3RhdGljIHdjaGFyX3QgKm1vZHVsZV9zZWFyY2hfcGF0aCA9IE5VTEw7CkBAIC0xMzgsMTAgKzEzOCwxMCBAQAogIAogIC8qIEdldCBmaWxlIHN0YXR1cy4gRW5jb2RlIHRoZSBwYXRoIHRvIHRoZSBsb2NhbGUgZW5jb2RpbmcuICovCiAgCi1JbmRleDogUHl0aG9uLTMuNS4wL1B5dGhvbi9nZXRwbGF0Zm9ybS5jCitJbmRleDogUHl0aG9uLTMuNS4yL1B5dGhvbi9nZXRwbGF0Zm9ybS5jCiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLS0gUHl0aG9uLTMuNS4wLm9yaWcvUHl0aG9uL2dldHBsYXRmb3JtLmMKLSsrKyBQeXRob24tMy41LjAvUHl0aG9uL2dldHBsYXRmb3JtLmMKKy0tLSBQeXRob24tMy41LjIub3JpZy9QeXRob24vZ2V0cGxhdGZvcm0uYworKysrIFB5dGhvbi0zLjUuMi9QeXRob24vZ2V0cGxhdGZvcm0uYwogQEAgLTEwLDMgKzEwLDIzIEBAIFB5X0dldFBsYXRmb3JtKHZvaWQpCiAgewogIAlyZXR1cm4gUExBVEZPUk07CkBAIC0xNjYsMTEgKzE2NiwxMSBAQAogK3sKICsJcmV0dXJuIExJQjsKICt9Ci1JbmRleDogUHl0aG9uLTMuNS4wL1B5dGhvbi9zeXNtb2R1bGUuYworSW5kZXg6IFB5dGhvbi0zLjUuMi9QeXRob24vc3lzbW9kdWxlLmMKID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tLSBQeXRob24tMy41LjAub3JpZy9QeXRob24vc3lzbW9kdWxlLmMKLSsrKyBQeXRob24tMy41LjAvUHl0aG9uL3N5c21vZHVsZS5jCi1AQCAtMTc2Nyw2ICsxNzY3LDEwIEBAIF9QeVN5c19Jbml0KHZvaWQpCistLS0gUHl0aG9uLTMuNS4yLm9yaWcvUHl0aG9uL3N5c21vZHVsZS5jCisrKysgUHl0aG9uLTMuNS4yL1B5dGhvbi9zeXNtb2R1bGUuYworQEAgLTE3OTAsNiArMTc5MCwxMCBAQCBfUHlTeXNfSW5pdCh2b2lkKQogICAgICAgICAgICAgICAgICAgICAgICAgIFB5VW5pY29kZV9Gcm9tU3RyaW5nKFB5X0dldENvcHlyaWdodCgpKSk7CiAgICAgIFNFVF9TWVNfRlJPTV9TVFJJTkcoInBsYXRmb3JtIiwKICAgICAgICAgICAgICAgICAgICAgICAgICBQeVVuaWNvZGVfRnJvbVN0cmluZyhQeV9HZXRQbGF0Zm9ybSgpKSk7CkBAIC0xODEsMTEgKzE4MSwxMSBAQAogICAgICBTRVRfU1lTX0ZST01fU1RSSU5HKCJleGVjdXRhYmxlIiwKICAgICAgICAgICAgICAgICAgICAgICAgICBQeVVuaWNvZGVfRnJvbVdpZGVDaGFyKAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQeV9HZXRQcm9ncmFtRnVsbFBhdGgoKSwgLTEpKTsKLUluZGV4OiBQeXRob24tMy41LjAvc2V0dXAucHkKK0luZGV4OiBQeXRob24tMy41LjIvc2V0dXAucHkKID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tLSBQeXRob24tMy41LjAub3JpZy9zZXR1cC5weQotKysrIFB5dGhvbi0zLjUuMC9zZXR1cC5weQotQEAgLTQ3Miw3ICs0NzIsNyBAQCBjbGFzcyBQeUJ1aWxkRXh0KGJ1aWxkX2V4dCk6CistLS0gUHl0aG9uLTMuNS4yLm9yaWcvc2V0dXAucHkKKysrKyBQeXRob24tMy41LjIvc2V0dXAucHkKK0BAIC00OTIsNyArNDkyLDcgQEAgY2xhc3MgUHlCdWlsZEV4dChidWlsZF9leHQpOgogICAgICAgICAgIyBkaXJlY3RvcmllcyAoaS5lLiAnLicgYW5kICdJbmNsdWRlJykgbXVzdCBiZSBmaXJzdC4gIFNlZSBpc3N1ZQogICAgICAgICAgIyAxMDUyMC4KICAgICAgICAgIGlmIG5vdCBjcm9zc19jb21waWxpbmc6CkBAIC0xOTQsNyArMTk0LDcgQEAKICAgICAgICAgICAgICBhZGRfZGlyX3RvX2xpc3Qoc2VsZi5jb21waWxlci5pbmNsdWRlX2RpcnMsICcvdXNyL2xvY2FsL2luY2x1ZGUnKQogICAgICAgICAgIyBvbmx5IGNoYW5nZSB0aGlzIGZvciBjcm9zcyBidWlsZHMgZm9yIDMuMywgaXNzdWVzIG9uIE1hZ2VpYQogICAgICAgICAgaWYgY3Jvc3NfY29tcGlsaW5nOgotQEAgLTUzMCw4ICs1MzAsNyBAQCBjbGFzcyBQeUJ1aWxkRXh0KGJ1aWxkX2V4dCk6CitAQCAtNTUwLDggKzU1MCw3IEBAIGNsYXNzIFB5QnVpbGRFeHQoYnVpbGRfZXh0KToKICAgICAgICAgICMgYmUgYXNzdW1lZCB0aGF0IG5vIGFkZGl0aW9uYWwgLUksLUwgZGlyZWN0aXZlcyBhcmUgbmVlZGVkLgogICAgICAgICAgaWYgbm90IGNyb3NzX2NvbXBpbGluZzoKICAgICAgICAgICAgICBsaWJfZGlycyA9IHNlbGYuY29tcGlsZXIubGlicmFyeV9kaXJzICsgWwpAQCAtMjA0LDcgKzIwNCw3IEBACiAgICAgICAgICAgICAgICAgIF0KICAgICAgICAgICAgICBpbmNfZGlycyA9IHNlbGYuY29tcGlsZXIuaW5jbHVkZV9kaXJzICsgWycvdXNyL2luY2x1ZGUnXQogICAgICAgICAgZWxzZToKLUBAIC03MTYsMTEgKzcxNSwxMSBAQCBjbGFzcyBQeUJ1aWxkRXh0KGJ1aWxkX2V4dCk6CitAQCAtNzQzLDExICs3NDIsMTEgQEAgY2xhc3MgUHlCdWlsZEV4dChidWlsZF9leHQpOgogICAgICAgICAgICAgIGVsaWYgY3Vyc2VzX2xpYnJhcnk6CiAgICAgICAgICAgICAgICAgIHJlYWRsaW5lX2xpYnMuYXBwZW5kKGN1cnNlc19saWJyYXJ5KQogICAgICAgICAgICAgIGVsaWYgc2VsZi5jb21waWxlci5maW5kX2xpYnJhcnlfZmlsZShsaWJfZGlycyArCkBAIC0yMTgsMTAgKzIxOCwxMCBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXh0cmFfbGlua19hcmdzPXJlYWRsaW5lX2V4dHJhX2xpbmtfYXJncywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpYnJhcmllcz1yZWFkbGluZV9saWJzKSApCiAgICAgICAgICBlbHNlOgotSW5kZXg6IFB5dGhvbi0zLjUuMC9MaWIvc3lzY29uZmlnLnB5CitJbmRleDogUHl0aG9uLTMuNS4yL0xpYi9zeXNjb25maWcucHkKID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tLSBQeXRob24tMy41LjAub3JpZy9MaWIvc3lzY29uZmlnLnB5Ci0rKysgUHl0aG9uLTMuNS4wL0xpYi9zeXNjb25maWcucHkKKy0tLSBQeXRob24tMy41LjIub3JpZy9MaWIvc3lzY29uZmlnLnB5CisrKysgUHl0aG9uLTMuNS4yL0xpYi9zeXNjb25maWcucHkKIEBAIC0yMCwxMCArMjAsMTAgQEAgX19hbGxfXyA9IFsKICAKICBfSU5TVEFMTF9TQ0hFTUVTID0gewpAQCAtMjY0LDExICsyNjQsMTEgQEAKICAgICAgICAgICdpbmNsdWRlJzogJ3t1c2VyYmFzZX0vaW5jbHVkZS9weXRob257cHlfdmVyc2lvbl9zaG9ydH0nLAogICAgICAgICAgJ3NjcmlwdHMnOiAne3VzZXJiYXNlfS9iaW4nLAogICAgICAgICAgJ2RhdGEnOiAne3VzZXJiYXNlfScsCi1JbmRleDogUHl0aG9uLTMuNS4wL2NvbmZpZ3VyZS5hYworSW5kZXg6IFB5dGhvbi0zLjUuMi9jb25maWd1cmUuYWMKID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tLSBQeXRob24tMy41LjAub3JpZy9jb25maWd1cmUuYWMKLSsrKyBQeXRob24tMy41LjAvY29uZmlndXJlLmFjCi1AQCAtODU4LDYgKzg1OCw0MSBAQCBQTEFURElSPXBsYXQtJE1BQ0hERVAKKy0tLSBQeXRob24tMy41LjIub3JpZy9jb25maWd1cmUuYWMKKysrKyBQeXRob24tMy41LjIvY29uZmlndXJlLmFjCitAQCAtODc2LDYgKzg3Niw0MSBAQCBQTEFURElSPXBsYXQtJE1BQ0hERVAKICBBQ19TVUJTVChQTEFURElSKQogIEFDX1NVQlNUKFBMQVRGT1JNX1RSSVBMRVQpCiAgCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24zL3B5dGhvbjMtZml4LUNWRS0yMDE2LTEwMDAxMTAucGF0Y2ggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24zL3B5dGhvbjMtZml4LUNWRS0yMDE2LTEwMDAxMTAucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWIxYjcyMwotLS0gL2Rldi9udWxsCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbjMvcHl0aG9uMy1maXgtQ1ZFLTIwMTYtMTAwMDExMC5wYXRjaApAQCAtMCwwICsxLDE0OCBAQAorRnJvbSBhYWIzZThjNDMyYjkwNTA4YWMxNDc1NTEyOGY1YTY4N2JlMmZkZjQzIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogTWluZ2xpIFl1IDxNaW5nbGkuWXVAd2luZHJpdmVyLmNvbT4KK0RhdGU6IFRodSwgMjIgU2VwIDIwMTYgMTY6Mzk6NDkgKzA4MDAKK1N1YmplY3Q6IFtQQVRDSF0gcHl0aG9uMzogZml4IENWRS0yMDE2LTEwMDAxMTAKK01JTUUtVmVyc2lvbjogMS4wCitDb250ZW50LVR5cGU6IHRleHQvcGxhaW47IGNoYXJzZXQ9VVRGLTgKK0NvbnRlbnQtVHJhbnNmZXItRW5jb2Rpbmc6IDhiaXQKKworSWdub3JlIHRoZSBIVFRQX1BST1hZIHZhcmlhYmxlIHdoZW4gUkVRVUVTVF9NRVRIT0QgZW52aXJvbm1lbnQgaXMgc2V0LCB3aGljaAoraW5kaWNhdGVzIHRoYXQgdGhlIHNjcmlwdCBpcyBpbiBDR0kgbW9kZS4KKworSXNzdWUgIzI3NTY4IFJlcG9ydGVkIGFuZCBwYXRjaCBjb250cmlidXRlZCBieSBSw6ltaSBSYW1waW4uIFsjMjc1NjhdCisKK0JhY2twb3J0IHBhdGNoIGZyb20gaHR0cHM6Ly9oZy5weXRob24ub3JnL2NweXRob24vcmV2L2EwYWM1MmVkOGY3OQorCitVcHN0cmVhbS1TdGF0dXM6IEJhY2twb3J0CitDVkU6IENWRS0yMDE2LTEwMDAxMTAKK1NpZ25lZC1vZmYtYnk6IE1pbmdsaSBZdSA8TWluZ2xpLll1QHdpbmRyaXZlci5jb20+CistLS0KKyBEb2MvaG93dG8vdXJsbGliMi5yc3QgICAgICAgICAgfCAgNSArKysrKworIERvYy9saWJyYXJ5L3VybGxpYi5yZXF1ZXN0LnJzdCB8IDE3ICsrKysrKysrKysrKysrKystCisgTGliL3Rlc3QvdGVzdF91cmxsaWIucHkgICAgICAgIHwgMTQgKysrKysrKysrKysrKy0KKyBMaWIvdXJsbGliL3JlcXVlc3QucHkgICAgICAgICAgfCAgNiArKysrKysKKyBNaXNjL05FV1MgICAgICAgICAgICAgICAgICAgICAgfCAgNCArKysrCisgNSBmaWxlcyBjaGFuZ2VkLCA0NCBpbnNlcnRpb25zKCspLCAyIGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvRG9jL2hvd3RvL3VybGxpYjIucnN0IGIvRG9jL2hvd3RvL3VybGxpYjIucnN0CitpbmRleCAyNGE0MTU2Li5kMmM3OTkxIDEwMDY0NAorLS0tIGEvRG9jL2hvd3RvL3VybGxpYjIucnN0CisrKysgYi9Eb2MvaG93dG8vdXJsbGliMi5yc3QKK0BAIC01MzgsNiArNTM4LDExIEBAIHNldHRpbmcgdXAgYSBgQmFzaWMgQXV0aGVudGljYXRpb25gXyBoYW5kbGVyOiA6OgorICAgICB0aHJvdWdoIGEgcHJveHkuICBIb3dldmVyLCB0aGlzIGNhbiBiZSBlbmFibGVkIGJ5IGV4dGVuZGluZyB1cmxsaWIucmVxdWVzdCBhcworICAgICBzaG93biBpbiB0aGUgcmVjaXBlIFsjXV8uCisgCisrLi4gbm90ZTo6CisrCisrICAgIGBgSFRUUF9QUk9YWWBgIHdpbGwgYmUgaWdub3JlZCBpZiBhIHZhcmlhYmxlIGBgUkVRVUVTVF9NRVRIT0RgYCBpcyBzZXQ7IHNlZQorKyAgICB0aGUgZG9jdW1lbnRhdGlvbiBvbiA6ZnVuYzpgfnVybGxpYi5yZXF1ZXN0LmdldHByb3hpZXNgLgorKworIAorIFNvY2tldHMgYW5kIExheWVycworID09PT09PT09PT09PT09PT09PQorZGlmZiAtLWdpdCBhL0RvYy9saWJyYXJ5L3VybGxpYi5yZXF1ZXN0LnJzdCBiL0RvYy9saWJyYXJ5L3VybGxpYi5yZXF1ZXN0LnJzdAoraW5kZXggMTMzODkwNi4uMTI5MWFlYiAxMDA2NDQKKy0tLSBhL0RvYy9saWJyYXJ5L3VybGxpYi5yZXF1ZXN0LnJzdAorKysrIGIvRG9jL2xpYnJhcnkvdXJsbGliLnJlcXVlc3QucnN0CitAQCAtMTczLDYgKzE3MywxNiBAQCBUaGUgOm1vZDpgdXJsbGliLnJlcXVlc3RgIG1vZHVsZSBkZWZpbmVzIHRoZSBmb2xsb3dpbmcgZnVuY3Rpb25zOgorICAgIElmIGJvdGggbG93ZXJjYXNlIGFuZCB1cHBlcmNhc2UgZW52aXJvbm1lbnQgdmFyaWFibGVzIGV4aXN0IChhbmQgZGlzYWdyZWUpLAorICAgIGxvd2VyY2FzZSBpcyBwcmVmZXJyZWQuCisgCisrICAgIC4uIG5vdGU6OgorKworKyAgICAgICBJZiB0aGUgZW52aXJvbm1lbnQgdmFyaWFibGUgYGBSRVFVRVNUX01FVEhPRGBgIGlzIHNldCwgd2hpY2ggdXN1YWxseQorKyAgICAgICBpbmRpY2F0ZXMgeW91ciBzY3JpcHQgaXMgcnVubmluZyBpbiBhIENHSSBlbnZpcm9ubWVudCwgdGhlIGVudmlyb25tZW50CisrICAgICAgIHZhcmlhYmxlIGBgSFRUUF9QUk9YWWBgICh1cHBlcmNhc2UgYGBfUFJPWFlgYCkgd2lsbCBiZSBpZ25vcmVkLiBUaGlzIGlzCisrICAgICAgIGJlY2F1c2UgdGhhdCB2YXJpYWJsZSBjYW4gYmUgaW5qZWN0ZWQgYnkgYSBjbGllbnQgdXNpbmcgdGhlICJQcm94eToiIEhUVFAKKysgICAgICAgaGVhZGVyLiBJZiB5b3UgbmVlZCB0byB1c2UgYW4gSFRUUCBwcm94eSBpbiBhIENHSSBlbnZpcm9ubWVudCwgZWl0aGVyIHVzZQorKyAgICAgICBgYFByb3h5SGFuZGxlcmBgIGV4cGxpY2l0bHksIG9yIG1ha2Ugc3VyZSB0aGUgdmFyaWFibGUgbmFtZSBpcyBpbgorKyAgICAgICBsb3dlcmNhc2UgKG9yIGF0IGxlYXN0IHRoZSBgYF9wcm94eWBgIHN1ZmZpeCkuCisrCisgCisgVGhlIGZvbGxvd2luZyBjbGFzc2VzIGFyZSBwcm92aWRlZDoKKyAKK0BAIC0yODAsNiArMjkwLDExIEBAIFRoZSBmb2xsb3dpbmcgY2xhc3NlcyBhcmUgcHJvdmlkZWQ6CisgICAgbGlzdCBvZiBob3N0bmFtZSBzdWZmaXhlcywgb3B0aW9uYWxseSB3aXRoIGBgOnBvcnRgYCBhcHBlbmRlZCwgZm9yIGV4YW1wbGUKKyAgICBgYGNlcm4uY2gsbmNzYS51aXVjLmVkdSxzb21lLmhvc3Q6ODA4MGBgLgorIAorKyAgICAuLiBub3RlOjoKKysKKysgICAgICAgYGBIVFRQX1BST1hZYGAgd2lsbCBiZSBpZ25vcmVkIGlmIGEgdmFyaWFibGUgYGBSRVFVRVNUX01FVEhPRGBgIGlzIHNldDsKKysgICAgICAgc2VlIHRoZSBkb2N1bWVudGF0aW9uIG9uIDpmdW5jOmB+dXJsbGliLnJlcXVlc3QuZ2V0cHJveGllc2AuCisrCisgCisgLi4gY2xhc3M6OiBIVFRQUGFzc3dvcmRNZ3IoKQorIAorQEAgLTExMzgsNyArMTE1Myw3IEBAIHRoZSByZXR1cm5lZCBieXRlcyBvYmplY3QgdG8gc3RyaW5nIG9uY2UgaXQgZGV0ZXJtaW5lcyBvciBndWVzc2VzCisgdGhlIGFwcHJvcHJpYXRlIGVuY29kaW5nLgorIAorIFRoZSBmb2xsb3dpbmcgVzNDIGRvY3VtZW50LCBodHRwczovL3d3dy53My5vcmcvSW50ZXJuYXRpb25hbC9PLWNoYXJzZXRcICwgbGlzdHMKKy10aGUgdmFyaW91cyB3YXlzIGluIHdoaWNoIGEgKFgpSFRNTCBvciBhIFhNTCBkb2N1bWVudCBjb3VsZCBoYXZlIHNwZWNpZmllZCBpdHMKKyt0aGUgdmFyaW91cyB3YXlzIGluIHdoaWNoIGFuIChYKUhUTUwgb3IgYW4gWE1MIGRvY3VtZW50IGNvdWxkIGhhdmUgc3BlY2lmaWVkIGl0cworIGVuY29kaW5nIGluZm9ybWF0aW9uLgorIAorIEFzIHRoZSBweXRob24ub3JnIHdlYnNpdGUgdXNlcyAqdXRmLTgqIGVuY29kaW5nIGFzIHNwZWNpZmllZCBpbiBpdHMgbWV0YSB0YWcsIHdlCitkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF91cmxsaWIucHkgYi9MaWIvdGVzdC90ZXN0X3VybGxpYi5weQoraW5kZXggNWQwNWY4ZC4uMjQ3NTk4YSAxMDA2NDQKKy0tLSBhL0xpYi90ZXN0L3Rlc3RfdXJsbGliLnB5CisrKysgYi9MaWIvdGVzdC90ZXN0X3VybGxpYi5weQorQEAgLTEsNCArMSw0IEBACistIiIiUmVncmVzc3Npb24gdGVzdHMgZm9yIHdoYXQgd2FzIGluIFB5dGhvbiAyJ3MgInVybGxpYiIgbW9kdWxlIiIiCisrIiIiUmVncmVzc2lvbiB0ZXN0cyBmb3Igd2hhdCB3YXMgaW4gUHl0aG9uIDIncyAidXJsbGliIiBtb2R1bGUiIiIKKyAKKyBpbXBvcnQgdXJsbGliLnBhcnNlCisgaW1wb3J0IHVybGxpYi5yZXF1ZXN0CitAQCAtMjMyLDYgKzIzMiwxOCBAQCBjbGFzcyBQcm94eVRlc3RzKHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh1cmxsaWIucmVxdWVzdC5wcm94eV9ieXBhc3NfZW52aXJvbm1lbnQoJ2Fub3RoZXJkb21haW4uY29tOjg4ODgnKSkKKyAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh1cmxsaWIucmVxdWVzdC5wcm94eV9ieXBhc3NfZW52aXJvbm1lbnQoJ25ld2RvbWFpbi5jb206MTIzNCcpKQorIAorKyAgICBkZWYgdGVzdF9wcm94eV9jZ2lfaWdub3JlKHNlbGYpOgorKyAgICAgICAgdHJ5OgorKyAgICAgICAgICAgIHNlbGYuZW52LnNldCgnSFRUUF9QUk9YWScsICdodHRwOi8vc29tZXdoZXJlOjMxMjgnKQorKyAgICAgICAgICAgIHByb3hpZXMgPSB1cmxsaWIucmVxdWVzdC5nZXRwcm94aWVzX2Vudmlyb25tZW50KCkKKysgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCdodHRwOi8vc29tZXdoZXJlOjMxMjgnLCBwcm94aWVzWydodHRwJ10pCisrICAgICAgICAgICAgc2VsZi5lbnYuc2V0KCdSRVFVRVNUX01FVEhPRCcsICdHRVQnKQorKyAgICAgICAgICAgIHByb3hpZXMgPSB1cmxsaWIucmVxdWVzdC5nZXRwcm94aWVzX2Vudmlyb25tZW50KCkKKysgICAgICAgICAgICBzZWxmLmFzc2VydE5vdEluKCdodHRwJywgcHJveGllcykKKysgICAgICAgIGZpbmFsbHk6CisrICAgICAgICAgICAgc2VsZi5lbnYudW5zZXQoJ1JFUVVFU1RfTUVUSE9EJykKKysgICAgICAgICAgICBzZWxmLmVudi51bnNldCgnSFRUUF9QUk9YWScpCisrCisgICAgIGRlZiB0ZXN0X3Byb3h5X2J5cGFzc19lbnZpcm9ubWVudF9ob3N0X21hdGNoKHNlbGYpOgorICAgICAgICAgYnlwYXNzID0gdXJsbGliLnJlcXVlc3QucHJveHlfYnlwYXNzX2Vudmlyb25tZW50CisgICAgICAgICBzZWxmLmVudi5zZXQoJ05PX1BST1hZJywKK2RpZmYgLS1naXQgYS9MaWIvdXJsbGliL3JlcXVlc3QucHkgYi9MaWIvdXJsbGliL3JlcXVlc3QucHkKK2luZGV4IDE3MzFmZTMuLjNiZTMyN2QgMTAwNjQ0CistLS0gYS9MaWIvdXJsbGliL3JlcXVlc3QucHkKKysrKyBiL0xpYi91cmxsaWIvcmVxdWVzdC5weQorQEAgLTI0MTIsNiArMjQxMiwxMiBAQCBkZWYgZ2V0cHJveGllc19lbnZpcm9ubWVudCgpOgorICAgICAgICAgbmFtZSA9IG5hbWUubG93ZXIoKQorICAgICAgICAgaWYgdmFsdWUgYW5kIG5hbWVbLTY6XSA9PSAnX3Byb3h5JzoKKyAgICAgICAgICAgICBwcm94aWVzW25hbWVbOi02XV0gPSB2YWx1ZQorKyAgICAjIENWRS0yMDE2LTEwMDAxMTAgLSBJZiB3ZSBhcmUgcnVubmluZyBhcyBDR0kgc2NyaXB0LCBmb3JnZXQgSFRUUF9QUk9YWQorKyAgICAjIChub24tYWxsLWxvd2VyY2FzZSkgYXMgaXQgbWF5IGJlIHNldCBmcm9tIHRoZSB3ZWIgc2VydmVyIGJ5IGEgIlByb3h5OiIKKysgICAgIyBoZWFkZXIgZnJvbSB0aGUgY2xpZW50CisrICAgICMgSWYgInByb3h5IiBpcyBsb3dlcmNhc2UsIGl0IHdpbGwgc3RpbGwgYmUgdXNlZCB0aGFua3MgdG8gdGhlIG5leHQgYmxvY2sKKysgICAgaWYgJ1JFUVVFU1RfTUVUSE9EJyBpbiBvcy5lbnZpcm9uOgorKyAgICAgICAgcHJveGllcy5wb3AoJ2h0dHAnLCBOb25lKQorICAgICBmb3IgbmFtZSwgdmFsdWUgaW4gb3MuZW52aXJvbi5pdGVtcygpOgorICAgICAgICAgaWYgbmFtZVstNjpdID09ICdfcHJveHknOgorICAgICAgICAgICAgIG5hbWUgPSBuYW1lLmxvd2VyKCkKK2RpZmYgLS1naXQgYS9NaXNjL05FV1MgYi9NaXNjL05FV1MKK2luZGV4IDRhZDI1NTEuLjJmY2M5NWIgMTAwNjQ0CistLS0gYS9NaXNjL05FV1MKKysrKyBiL01pc2MvTkVXUworQEAgLTMyOSw2ICszMjksMTAgQEAgTGlicmFyeQorIC0gSXNzdWUgIzI2NjQ0OiBSYWlzZSBWYWx1ZUVycm9yIHJhdGhlciB0aGFuIFN5c3RlbUVycm9yIHdoZW4gYSBuZWdhdGl2ZQorICAgbGVuZ3RoIGlzIHBhc3NlZCB0byBTU0xTb2NrZXQucmVjdigpIG9yIHJlYWQoKS4KKyAKKystIElzc3VlICMyNzU2ODogUHJldmVudCBIVFRQb3h5IGF0dGFjayAoQ1ZFLTIwMTYtMTAwMDExMCkuIElnbm9yZSB0aGUKKysgIEhUVFBfUFJPWFkgdmFyaWFibGUgd2hlbiBSRVFVRVNUX01FVEhPRCBlbnZpcm9ubWVudCBpcyBzZXQsIHdoaWNoIGluZGljYXRlcworKyAgdGhhdCB0aGUgc2NyaXB0IGlzIGluIENHSSBtb2RlLgorKworIC0gSXNzdWUgIzIzODA0OiBGaXggU1NMIHJlY3YoMCkgYW5kIHJlYWQoMCkgbWV0aG9kcyB0byByZXR1cm4gemVybyBieXRlcworICAgaW5zdGVhZCBvZiB1cCB0byAxMDI0LgorIAorLS0gCisyLjguMQorCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24zL3VuaXhjY29tcGlsZXIucGF0Y2ggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24zL3VuaXhjY29tcGlsZXIucGF0Y2gKaW5kZXggN2I5MGYxMy4uM2UyYjFkMSAxMDA2NDQKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uMy91bml4Y2NvbXBpbGVyLnBhdGNoCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbjMvdW5peGNjb21waWxlci5wYXRjaApAQCAtMTgsOSArMTgsOSBAQAogIAogICAgICBkZWYgbGlicmFyeV9kaXJfb3B0aW9uKHNlbGYsIGRpcik6CiAtICAgICAgICByZXR1cm4gIi1MIiArIGRpcgotKyAgICAgICAgaWYgZGlyLnN0YXJ0c3dpdGgoIi4iKToKLSsgICAgICAgICAgICByZXR1cm4gIi1MIiArIGRpcgotKyAgICAgICAgcmV0dXJuICItTD0iICsgZGlyCisrICAgICAgICBpZiBkaXIuc3RhcnRzd2l0aCgiLyIpOgorKyAgICAgICAgICAgIHJldHVybiAiLUw9IiArIGRpcgorKyAgICAgICAgcmV0dXJuICItTCIgKyBkaXIKICAKICAgICAgZGVmIF9pc19nY2Moc2VsZiwgY29tcGlsZXJfbmFtZSk6CiAgICAgICAgICByZXR1cm4gImdjYyIgaW4gY29tcGlsZXJfbmFtZSBvciAiZysrIiBpbiBjb21waWxlcl9uYW1lCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24zL3VzZV9wYWNrZWRfaW1wb3J0bGliLnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uMy91c2VfcGFja2VkX2ltcG9ydGxpYi5wYXRjaAppbmRleCA2YzRiMGNkLi43MDcwOGEwIDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24zL3VzZV9wYWNrZWRfaW1wb3J0bGliLnBhdGNoCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbjMvdXNlX3BhY2tlZF9pbXBvcnRsaWIucGF0Y2gKQEAgLTYsNyArNiw3IEBACiB0aGlzIGF2b2lkcyBleGVjdXRpbmcgdGhlIGJpbmFyeSBhbmQgZm9yY2VzIGl0IHRvIHVzZSB0aGUgcGFja2VkIGltcG9ydGxpYiouaCBmaWxlcy4KIAogIAotU2lnbmVkLU9mZi1CeTogQWxlamFuZHJvIEhlcm5hbmRleiA8YWxlamFuZHJvLmhlcm5hbmRlekBsaW51eC5pbnRlbC5jb20+IAorU2lnbmVkLW9mZi1ieTogQWxlamFuZHJvIEhlcm5hbmRleiA8YWxlamFuZHJvLmhlcm5hbmRlekBsaW51eC5pbnRlbC5jb20+IAogCiBJbmRleDogUHl0aG9uLTMuNS4wL01ha2VmaWxlLnByZS5pbgogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uM18zLjUuMS5iYiBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbjNfMy41LjEuYmIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDJmYmIzY2IuLjAwMDAwMDAKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uM18zLjUuMS5iYgorKysgL2Rldi9udWxsCkBAIC0xLDIyNiArMCwwIEBACi1yZXF1aXJlIHJlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi5pbmMKLQotREVQRU5EUyA9ICJweXRob24zLW5hdGl2ZSBsaWJmZmkgYnppcDIgZGIgZ2RibSBvcGVuc3NsIHJlYWRsaW5lIHNxbGl0ZTMgemxpYiB2aXJ0dWFsL2xpYmludGwgeHoiCi1QUiA9ICIke0lOQ19QUn0uMCIKLVBZVEhPTl9NQUpNSU4gPSAiMy41IgotUFlUSE9OX0JJTkFCST0gIiR7UFlUSE9OX01BSk1JTn1tIgotRElTVFJPX1NSQ19VUkkgPz0gImZpbGU6Ly9zaXRlY3VzdG9taXplLnB5IgotRElTVFJPX1NSQ19VUklfbGludXhzdGRiYXNlID0gIiIKLVNSQ19VUkkgPSAiaHR0cDovL3d3dy5weXRob24ub3JnL2Z0cC9weXRob24vJHtQVn0vUHl0aG9uLSR7UFZ9LnRhci54eiBcCi1maWxlOi8vcHl0aG9uLWNvbmZpZy5wYXRjaCBcCi1maWxlOi8vMDAwLWNyb3NzLWNvbXBpbGUucGF0Y2ggXAotZmlsZTovLzAyMC1kb250LWNvbXBpbGUtcHl0aG9uLWZpbGVzLnBhdGNoIFwKLWZpbGU6Ly8wMzAtZml4dXAtaW5jbHVkZS1kaXJzLnBhdGNoIFwKLWZpbGU6Ly8wNzAtZG9udC1jbGVhbi1pcGtnLWluc3RhbGwucGF0Y2ggXAotZmlsZTovLzA4MC1kaXN0dXRpbHMtZG9udF9hZGp1c3RfZmlsZXMucGF0Y2ggXAotZmlsZTovLzExMC1lbmFibGUtemxpYi5wYXRjaCBcCi1maWxlOi8vMTMwLXJlYWRsaW5lLXNldHVwLnBhdGNoIFwKLWZpbGU6Ly8xNTAtZml4LXNldHVwdGVybS5wYXRjaCBcCi1maWxlOi8vMDAwMS1oMnB5LUZpeC1pc3N1ZS0xMzAzMi13aGVyZS1pdC1mYWlscy13aXRoLVVuaWNvZGVEZWNvLnBhdGNoIFwKLWZpbGU6Ly90d2Vhay1NVUxUSUFSQ0gtZm9yLXBvd2VycGMtbGludXgtZ251c3BlLnBhdGNoIFwKLSR7RElTVFJPX1NSQ19VUkl9IFwKLSIKLQotU1JDX1VSSSArPSAiXAotICAgICAgICAgICAgZmlsZTovLzAzLWZpeC10a2ludGVyLWRldGVjdGlvbi5wYXRjaCBcCi0gICAgICAgICAgICBmaWxlOi8vYXZvaWRfd2FybmluZ19hYm91dF90a2ludGVyLnBhdGNoIFwKLSAgICAgICAgICAgIGZpbGU6Ly9jZ2lfcHkucGF0Y2ggXAotICAgICAgICAgICAgZmlsZTovL2hvc3RfaW5jbHVkZV9jb250YW1pbmF0aW9uLnBhdGNoIFwKLSAgICAgICAgICAgIGZpbGU6Ly9weXRob24tMy4zLW11bHRpbGliLnBhdGNoIFwKLSAgICAgICAgICAgIGZpbGU6Ly9zaHV0aWwtZm9sbG93LXN5bWxpbmstZml4LnBhdGNoIFwKLSAgICAgICAgICAgIGZpbGU6Ly9zeXNyb290LWluY2x1ZGUtaGVhZGVycy5wYXRjaCBcCi0gICAgICAgICAgICBmaWxlOi8vdW5peGNjb21waWxlci5wYXRjaCBcCi0gICAgICAgICAgICBmaWxlOi8vYXZvaWQtbmN1cnNlc3ctaW5jbHVkZS1wYXRoLnBhdGNoIFwKLSAgICAgICAgICAgIGZpbGU6Ly9weXRob24zLXVzZS1DUk9TU1BZVEhPTlBBVEgtZm9yLVBZVEhPTl9GT1JfQlVJTEQucGF0Y2ggXAotICAgICAgICAgICAgZmlsZTovL3B5dGhvbjMtc2V0dXAucHktbm8taG9zdC1oZWFkZXJzLWxpYnMucGF0Y2ggXAotICAgICAgICAgICAgZmlsZTovL3N5c2NvbmZpZy5weS1hZGQtX1BZVEhPTl9QUk9KRUNUX1NSQy5wYXRjaCBcCi0gICAgICAgICAgICBmaWxlOi8vc2V0dXAucHktY2hlY2stY3Jvc3NfY29tcGlsaW5nLXdoZW4tZ2V0LUZMQUdTLnBhdGNoIFwKLSAgICAgICAgICAgIGZpbGU6Ly9zZXR1cC5weS1maW5kLWxpYnJhcmllcy1pbi1zdGFnaW5nLWRpcnMucGF0Y2ggXAotICAgICAgICAgICAgZmlsZTovL3VzZV9wYWNrZWRfaW1wb3J0bGliLnBhdGNoIFwKLSAgICAgICAgICAgIGZpbGU6Ly9jb25maWd1cmUuYWMtZml4LUxJQlBMLnBhdGNoIFwKLSAgICAgICAgICAgIgotU1JDX1VSSVttZDVzdW1dID0gImU5ZWE2ZjI2MjNmZmZjZGQ4NzFiN2IxOTExM2ZkZTgwIgotU1JDX1VSSVtzaGEyNTZzdW1dID0gImM2ZDU3YzBjMzY2ZDkwNjBhYjZjMGNkZjg4OWViZjNkOTI3MTFkNDY2Y2MwMTE5YzQ0MWRiZjI3NDZmNzI1YzkiCi0KLSMgZXhjbHVkZSBwcmUtcmVsZWFzZXMgZm9yIGJvdGggcHl0aG9uIDIueCBhbmQgMy54Ci1VUFNUUkVBTV9DSEVDS19SRUdFWCA9ICJbUHBdeXRob24tKD9QPHB2ZXI+XGQrKFwuXGQrKSspLnRhciIKLQotTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vTElDRU5TRTttZDU9ZGQ5OGQwMWQ0NzFmYWM4ZDhkYmRkOTc1MjI5ZGJhMDMiCi0KLVMgPSAiJHtXT1JLRElSfS9QeXRob24tJHtQVn0iCi0KLWluaGVyaXQgYXV0b3Rvb2xzIG11bHRpbGliX2hlYWRlciBweXRob24zbmF0aXZlIHBrZ2NvbmZpZwotCi1DT05GSUdVUkVPUFRTICs9ICIgLS13aXRoLXN5c3RlbS1mZmkgIgotCi1DQUNIRURfQ09ORklHVVJFVkFSUyA9ICJhY19jdl9oYXZlX2NoZmxhZ3M9bm8gXAotICAgICAgICAgICAgICAgIGFjX2N2X2hhdmVfbGNoZmxhZ3M9bm8gXAotICAgICAgICAgICAgICAgIGFjX2N2X2hhdmVfbG9uZ19sb25nX2Zvcm1hdD15ZXMgXAotICAgICAgICAgICAgICAgIGFjX2N2X2J1Z2d5X2dldGFkZHJpbmZvPW5vIFwKLSAgICAgICAgICAgICAgICBhY19jdl9maWxlX19kZXZfcHRteD15ZXMgXAotICAgICAgICAgICAgICAgIGFjX2N2X2ZpbGVfX2Rldl9wdGM9bm8gXAotIgotCi1UQVJHRVRfQ0NfQVJDSCArPSAiLUROREVCVUcgLWZuby1pbmxpbmUiCi1TREtfQ0NfQVJDSCArPSAiLUROREVCVUcgLWZuby1pbmxpbmUiCi1FWFRSQV9PRU1BS0UgKz0gIkNST1NTX0NPTVBJTEU9eWVzIgotRVhUUkFfT0VDT05GICs9ICJDUk9TU1BZVEhPTlBBVEg9JHtTVEFHSU5HX0xJQkRJUl9OQVRJVkV9L3B5dGhvbiR7UFlUSE9OX01BSk1JTn0vbGliLWR5bmxvYWQvIC0td2l0aG91dC1lbnN1cmVwaXAiCi0KLWV4cG9ydCBDUk9TU19DT01QSUxFID0gIiR7VEFSR0VUX1BSRUZJWH0iCi1leHBvcnQgX1BZVEhPTl9QUk9KRUNUX0JBU0UgPSAiJHtCfSIKLWV4cG9ydCBfUFlUSE9OX1BST0pFQ1RfU1JDID0gIiR7U30iCi1leHBvcnQgQ0NTSEFSRUQgPSAiLWZQSUMiCi0KLSMgRml4IGN0eXBlcyBjcm9zcyBjb21waWxhdGlvbgotZXhwb3J0IENST1NTUFlUSE9OUEFUSCA9ICIke0J9L2J1aWxkL2xpYi5saW51eC0ke1RBUkdFVF9BUkNIfS0ke1BZVEhPTl9NQUpNSU59OiR7U30vTGliOiR7U30vTGliL3BsYXQtbGludXgiCi0KLSMgTm8gY3R5cGVzIG9wdGlvbiBmb3IgcHl0aG9uIDMKLVBZVEhPTkxTQk9QVFMgPSAiIgotCi1kb19jb25maWd1cmVfYXBwZW5kKCkgewotCXJtIC1mICR7U30vTWFrZWZpbGUub3JpZwotCWF1dG9yZWNvbmYgLVdjcm9zcyAtLXZlcmJvc2UgLS1pbnN0YWxsIC0tZm9yY2UgLS1leGNsdWRlPWF1dG9wb2ludCAuLi9QeXRob24tJHtQVn0vTW9kdWxlcy9fY3R5cGVzL2xpYmZmaQotfQotCi1kb19jb21waWxlKCkgewotICAgICAgICAjIHJlZ2VuZXJhdGUgcGxhdGZvcm0gc3BlY2lmaWMgZmlsZXMsIGJlY2F1c2UgdGhleSBkZXBlbmQgb24gc3lzdGVtIGhlYWRlcnMKLSAgICAgICAgY2QgJHtTfS9MaWIvcGxhdC1saW51eCoKLSAgICAgICAgaW5jbHVkZT0ke1NUQUdJTkdfSU5DRElSfSAke1NUQUdJTkdfQklORElSX05BVElWRX0vcHl0aG9uMy1uYXRpdmUvcHl0aG9uMyBcCi0gICAgICAgICAgICAgICAgJHtTfS9Ub29scy9zY3JpcHRzL2gycHkucHkgLWkgJyh1X2xvbmcpJyBcCi0gICAgICAgICAgICAgICAgJHtTVEFHSU5HX0lOQ0RJUn0vZGxmY24uaCBcCi0gICAgICAgICAgICAgICAgJHtTVEFHSU5HX0lOQ0RJUn0vbGludXgvY2Ryb20uaCBcCi0gICAgICAgICAgICAgICAgJHtTVEFHSU5HX0lOQ0RJUn0vbmV0aW5ldC9pbi5oIFwKLSAgICAgICAgICAgICAgICAke1NUQUdJTkdfSU5DRElSfS9zeXMvdHlwZXMuaAotICAgICAgICBzZWQgLWUgJ3MsJHtTVEFHSU5HX0RJUl9IT1NUfSwsZycgLWkgKi5weQotICAgICAgICBjZCAtCi0KLQotCSMgcmVtb3ZlIGFueSBib2d1cyBMRF9MSUJSQVJZX1BBVEgKLQlzZWQgLWkgLWUgcyxSVU5TSEFSRUQ9LiosUlVOU0hBUkVEPSwgTWFrZWZpbGUKLQotCWlmIFsgISAtZiBNYWtlZmlsZS5vcmlnIF07IHRoZW4KLQkJaW5zdGFsbCAtbSAwNjQ0IE1ha2VmaWxlIE1ha2VmaWxlLm9yaWcKLQlmaQotCXNlZCAtaSAtZSAncyxeQ09ORklHVVJFX0xERkxBR1M9LiosQ09ORklHVVJFX0xERkxBR1M9LUwuIC1MJHtTVEFHSU5HX0xJQkRJUn0sZycgXAotCQktZSAncyxsaWJkaXI9JHtsaWJkaXJ9LGxpYmRpcj0ke1NUQUdJTkdfTElCRElSfSxnJyBcCi0JCS1lICdzLGxpYmV4ZWNkaXI9JHtsaWJleGVjZGlyfSxsaWJleGVjZGlyPSR7U1RBR0lOR19ESVJfSE9TVH0ke2xpYmV4ZWNkaXJ9LGcnIFwKLQkJLWUgJ3MsXkxJQkRJUj0uKixMSUJESVI9JHtTVEFHSU5HX0xJQkRJUn0sZycgXAotCQktZSAncyxpbmNsdWRlZGlyPSR7aW5jbHVkZWRpcn0saW5jbHVkZWRpcj0ke1NUQUdJTkdfSU5DRElSfSxnJyBcCi0JCS1lICdzLF5JTkNMVURFRElSPS4qLElOQ0xVREU9JHtTVEFHSU5HX0lOQ0RJUn0sZycgXAotCQktZSAncyxeQ09ORklOQ0xVREVESVI9LiosQ09ORklOQ0xVREU9JHtTVEFHSU5HX0lOQ0RJUn0sZycgXAotCQlNYWtlZmlsZQotCSMgc2F2ZSBjb3B5IG9mIGl0IG5vdywgYmVjYXVzZSBpZiB3ZSBkbyBpdCBpbiBkb19pbnN0YWxsIGFuZCAKLQkjIHRoZW4gY2FsbCBkb19pbnN0YWxsIHR3aWNlIHdlIGdldCBNYWtlZmlsZS5vcmlnID09IE1ha2VmaWxlLnN5c3Jvb3QKLQlpbnN0YWxsIC1tIDA2NDQgTWFrZWZpbGUgTWFrZWZpbGUuc3lzcm9vdAotCi0Jb2VfcnVubWFrZSBIT1NUUEdFTj0ke1NUQUdJTkdfQklORElSX05BVElWRX0vcHl0aG9uMy1uYXRpdmUvcGdlbiBcCi0JCUhPU1RQWVRIT049JHtTVEFHSU5HX0JJTkRJUl9OQVRJVkV9L3B5dGhvbjMtbmF0aXZlL3B5dGhvbjMgXAotCQlTVEFHSU5HX0xJQkRJUj0ke1NUQUdJTkdfTElCRElSfSBcCi0JCVNUQUdJTkdfQkFTRUxJQkRJUj0ke1NUQUdJTkdfQkFTRUxJQkRJUn0gXAotCQlTVEFHSU5HX0lOQ0RJUj0ke1NUQUdJTkdfSU5DRElSfSBcCi0JCUJVSUxEX1NZUz0ke0JVSUxEX1NZU30gSE9TVF9TWVM9JHtIT1NUX1NZU30gXAotCQlMSUI9JHtiYXNlbGlifSBcCi0JCUFSQ0g9JHtUQVJHRVRfQVJDSH0gXAotCQlPUFQ9IiR7Q0ZMQUdTfSIgbGlicHl0aG9uMy5zbwotCi0Jb2VfcnVubWFrZSBIT1NUUEdFTj0ke1NUQUdJTkdfQklORElSX05BVElWRX0vcHl0aG9uMy1uYXRpdmUvcGdlbiBcCi0JCUhPU1RQWVRIT049JHtTVEFHSU5HX0JJTkRJUl9OQVRJVkV9L3B5dGhvbjMtbmF0aXZlL3B5dGhvbjMgXAotCQlTVEFHSU5HX0xJQkRJUj0ke1NUQUdJTkdfTElCRElSfSBcCi0JCVNUQUdJTkdfSU5DRElSPSR7U1RBR0lOR19JTkNESVJ9IFwKLQkJU1RBR0lOR19CQVNFTElCRElSPSR7U1RBR0lOR19CQVNFTElCRElSfSBcCi0JCUJVSUxEX1NZUz0ke0JVSUxEX1NZU30gSE9TVF9TWVM9JHtIT1NUX1NZU30gXAotCQlMSUI9JHtiYXNlbGlifSBcCi0JCUFSQ0g9JHtUQVJHRVRfQVJDSH0gXAotCQlPUFQ9IiR7Q0ZMQUdTfSIKLX0KLQotZG9faW5zdGFsbCgpIHsKLQkjIG1ha2UgaW5zdGFsbCBuZWVkcyB0aGUgb3JpZ2luYWwgTWFrZWZpbGUsIG9yIG90aGVyd2lzZSB0aGUgaW5jbHVlcyB3b3VsZAotCSMgZ28gdG8gJHtEfSR7U1RBR0lORy4uLn0vLi4uCi0JaW5zdGFsbCAtbSAwNjQ0IE1ha2VmaWxlLm9yaWcgTWFrZWZpbGUKLQotCWluc3RhbGwgLWQgJHtEfSR7bGliZGlyfS9wa2djb25maWcKLQlpbnN0YWxsIC1kICR7RH0ke2xpYmRpcn0vcHl0aG9uJHtQWVRIT05fTUFKTUlOfS9jb25maWcKLQotCSMgcmVydW4gdGhlIGJ1aWxkIG9uY2UgYWdhaW4gd2l0aCBvcmlnaW5hbCBtYWtlZmlsZSB0aGlzIHRpbWUKLQkjIHJ1biBpbnN0YWxsIGluIGEgc2VwYXJhdGUgc3RlcCB0byBhdm9pZCBjb21waWxlL2luc3RhbGwgcmFjZQotCW9lX3J1bm1ha2UgSE9TVFBHRU49JHtTVEFHSU5HX0JJTkRJUl9OQVRJVkV9L3B5dGhvbjMtbmF0aXZlL3BnZW4gXAotCQlIT1NUUFlUSE9OPSR7U1RBR0lOR19CSU5ESVJfTkFUSVZFfS9weXRob24zLW5hdGl2ZS9weXRob24zIFwKLQkJU1RBR0lOR19MSUJESVI9JHtTVEFHSU5HX0xJQkRJUn0gXAotCQlTVEFHSU5HX0lOQ0RJUj0ke1NUQUdJTkdfSU5DRElSfSBcCi0JCVNUQUdJTkdfQkFTRUxJQkRJUj0ke1NUQUdJTkdfQkFTRUxJQkRJUn0gXAotCQlCVUlMRF9TWVM9JHtCVUlMRF9TWVN9IEhPU1RfU1lTPSR7SE9TVF9TWVN9IFwKLQkJTElCPSR7YmFzZWxpYn0gXAotCQlBUkNIPSR7VEFSR0VUX0FSQ0h9IFwKLQkJREVTVERJUj0ke0R9IExJQkRJUj0ke2xpYmRpcn0KLQkKLQlvZV9ydW5tYWtlIEhPU1RQR0VOPSR7U1RBR0lOR19CSU5ESVJfTkFUSVZFfS9weXRob24zLW5hdGl2ZS9wZ2VuIFwKLQkJSE9TVFBZVEhPTj0ke1NUQUdJTkdfQklORElSX05BVElWRX0vcHl0aG9uMy1uYXRpdmUvcHl0aG9uMyBcCi0JCVNUQUdJTkdfTElCRElSPSR7U1RBR0lOR19MSUJESVJ9IFwKLQkJU1RBR0lOR19JTkNESVI9JHtTVEFHSU5HX0lOQ0RJUn0gXAotCQlTVEFHSU5HX0JBU0VMSUJESVI9JHtTVEFHSU5HX0JBU0VMSUJESVJ9IFwKLQkJQlVJTERfU1lTPSR7QlVJTERfU1lTfSBIT1NUX1NZUz0ke0hPU1RfU1lTfSBcCi0JCUxJQj0ke2Jhc2VsaWJ9IFwKLQkJQVJDSD0ke1RBUkdFVF9BUkNIfSBcCi0JCURFU1RESVI9JHtEfSBMSUJESVI9JHtsaWJkaXJ9IGluc3RhbGwKLQotCSMgYXZvaWQgY29uZmxpY3Qgd2l0aCAydG8zIGZyb20gUHl0aG9uIDIKLQlybSAtZiAke0R9LyR7YmluZGlyfS8ydG8zCi0KLQlpbnN0YWxsIC1tIDA2NDQgTWFrZWZpbGUuc3lzcm9vdCAke0R9LyR7bGliZGlyfS9weXRob24ke1BZVEhPTl9NQUpNSU59L2NvbmZpZy9NYWtlZmlsZQotCi0JaWYgWyAtZSAke1dPUktESVJ9L3NpdGVjdXN0b21pemUucHkgXTsgdGhlbgotCQlpbnN0YWxsIC1tIDA2NDQgJHtXT1JLRElSfS9zaXRlY3VzdG9taXplLnB5ICR7RH0vJHtsaWJkaXJ9L3B5dGhvbiR7UFlUSE9OX01BSk1JTn0KLQlmaQotCi0Jb2VfbXVsdGlsaWJfaGVhZGVyIHB5dGhvbiR7UFlUSE9OX0JJTkFCSX0vcHljb25maWcuaAotfQotCi1kb19pbnN0YWxsX2FwcGVuZF9jbGFzcy1uYXRpdmVzZGsgKCkgewotCWNyZWF0ZV93cmFwcGVyICR7RH0ke2JpbmRpcn0vcHl0aG9uJHtQWVRIT05fTUFKTUlOfSBURVJNSU5GT19ESVJTPScke3N5c2NvbmZkaXJ9L3Rlcm1pbmZvOi9ldGMvdGVybWluZm86L3Vzci9zaGFyZS90ZXJtaW5mbzovdXNyL3NoYXJlL21pc2MvdGVybWluZm86L2xpYi90ZXJtaW5mbycKLX0KLQotU1NUQVRFX1NDQU5fRklMRVMgKz0gIk1ha2VmaWxlIgotUEFDS0FHRV9QUkVQUk9DRVNTX0ZVTkNTICs9ICJweV9wYWNrYWdlX3ByZXByb2Nlc3MiCi0KLXB5X3BhY2thZ2VfcHJlcHJvY2VzcyAoKSB7Ci0JIyBjb3B5IGJhY2sgdGhlIG9sZCBNYWtlZmlsZSB0byBmaXggdGFyZ2V0IHBhY2thZ2UKLQlpbnN0YWxsIC1tIDA2NDQgJHtCfS9NYWtlZmlsZS5vcmlnICR7UEtHRH0vJHtsaWJkaXJ9L3B5dGhvbiR7UFlUSE9OX01BSk1JTn0vY29uZmlnL01ha2VmaWxlCi0JIyBSZW1vdmUgcmVmZXJlbmNlcyB0byBidWlsZG1hY2hpbmUgcGF0aHMgaW4gdGFyZ2V0IE1ha2VmaWxlIGFuZCBfc3lzY29uZmlnZGF0YQotCXNlZCAtaSAtZSAnczotLXN5c3Jvb3Q9JHtTVEFHSU5HX0RJUl9UQVJHRVR9OjpnJyAtZSBzOictLXdpdGgtbGlidG9vbC1zeXNyb290PSR7U1RBR0lOR19ESVJfVEFSR0VUfSc6OmcgXAotCQkke1BLR0R9LyR7bGliZGlyfS9weXRob24ke1BZVEhPTl9NQUpNSU59L2NvbmZpZy9NYWtlZmlsZSBcCi0JCSR7UEtHRH0vJHtsaWJkaXJ9L3B5dGhvbiR7UFlUSE9OX01BSk1JTn0vX3N5c2NvbmZpZ2RhdGEucHkKLX0KLQotcmVxdWlyZSBweXRob24tJHtQWVRIT05fTUFKTUlOfS1tYW5pZmVzdC5pbmMKLQotIyBtYW51YWwgZGVwZW5kZW5jeSBhZGRpdGlvbnMKLVJQUk9WSURFU18ke1BOfS1jb3JlID0gIiR7UE59IgotUlJFQ09NTUVORFNfJHtQTn0tY29yZSA9ICIke1BOfS1yZWFkbGluZSIKLVJSRUNPTU1FTkRTXyR7UE59LWNyeXB0ID0gIm9wZW5zc2wiCi1SUkVDT01NRU5EU18ke1BOfS1jcnlwdF9jbGFzcy1uYXRpdmVzZGsgPSAibmF0aXZlc2RrLW9wZW5zc2wiCi0KLUZJTEVTXyR7UE59LTJ0bzMgKz0gIiR7YmluZGlyfS8ydG8zLSR7UFlUSE9OX01BSk1JTn0iCi1GSUxFU18ke1BOfS1weWRvYyArPSAiJHtiaW5kaXJ9L3B5ZG9jJHtQWVRIT05fTUFKTUlOfSAke2JpbmRpcn0vcHlkb2MzIgotRklMRVNfJHtQTn0taWRsZSArPSAiJHtiaW5kaXJ9L2lkbGUzICR7YmluZGlyfS9pZGxlJHtQWVRIT05fTUFKTUlOfSIKLQotUEFDS0FHRVMgPSsgIiR7UE59LXB5dmVudiIKLUZJTEVTXyR7UE59LXB5dmVudiArPSAiJHtiaW5kaXJ9L3B5dmVudi0ke1BZVEhPTl9NQUpNSU59ICR7YmluZGlyfS9weXZlbnYiCi0KLSMgcGFja2FnZSBsaWJweXRob24zCi1QQUNLQUdFUyA9KyAibGlicHl0aG9uMyBsaWJweXRob24zLXN0YXRpY2RldiIKLUZJTEVTX2xpYnB5dGhvbjMgPSAiJHtsaWJkaXJ9L2xpYnB5dGhvbiouc28uKiIKLUZJTEVTX2xpYnB5dGhvbjMtc3RhdGljZGV2ICs9ICIke2xpYmRpcn0vcHl0aG9uJHtQWVRIT05fTUFKTUlOfS9jb25maWctJHtQWVRIT05fQklOQUJJfS9saWJweXRob24ke1BZVEhPTl9CSU5BQkl9LmEiCi1JTlNBTkVfU0tJUF8ke1BOfS1kZXYgKz0gImRldi1lbGYiCi0KLSMgY2F0Y2ggYWxsIHRoZSByZXN0ICh1bnNvcnRlZCkKLVBBQ0tBR0VTICs9ICIke1BOfS1taXNjIgotUkRFUEVORFNfJHtQTn0tbWlzYyArPSAiJHtQTn0tY29yZSIKLVJERVBFTkRTXyR7UE59LW1vZHVsZXMgKz0gIiR7UE59LW1pc2MiCi1GSUxFU18ke1BOfS1taXNjID0gIiR7bGliZGlyfS9weXRob24ke1BZVEhPTl9NQUpNSU59IgotCi0jIGNhdGNoIG1hbnBhZ2UKLVBBQ0tBR0VTICs9ICIke1BOfS1tYW4iCi1GSUxFU18ke1BOfS1tYW4gPSAiJHtkYXRhZGlyfS9tYW4iCi0KLUJCQ0xBU1NFWFRFTkQgPSAibmF0aXZlc2RrIgpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uM18zLjUuMi5iYiBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbjNfMy41LjIuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTZjYmI5YwotLS0gL2Rldi9udWxsCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbjNfMy41LjIuYmIKQEAgLTAsMCArMSwyMjQgQEAKK3JlcXVpcmUgcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLmluYworCitERVBFTkRTID0gInB5dGhvbjMtbmF0aXZlIGxpYmZmaSBiemlwMiBkYiBnZGJtIG9wZW5zc2wgcmVhZGxpbmUgc3FsaXRlMyB6bGliIHZpcnR1YWwvbGliaW50bCB4eiIKK1BSID0gIiR7SU5DX1BSfS4wIgorUFlUSE9OX01BSk1JTiA9ICIzLjUiCitQWVRIT05fQklOQUJJPSAiJHtQWVRIT05fTUFKTUlOfW0iCitESVNUUk9fU1JDX1VSSSA/PSAiZmlsZTovL3NpdGVjdXN0b21pemUucHkiCitESVNUUk9fU1JDX1VSSV9saW51eHN0ZGJhc2UgPSAiIgorU1JDX1VSSSA9ICJodHRwOi8vd3d3LnB5dGhvbi5vcmcvZnRwL3B5dGhvbi8ke1BWfS9QeXRob24tJHtQVn0udGFyLnh6IFwKK2ZpbGU6Ly9weXRob24tY29uZmlnLnBhdGNoIFwKK2ZpbGU6Ly8wMDAtY3Jvc3MtY29tcGlsZS5wYXRjaCBcCitmaWxlOi8vMDIwLWRvbnQtY29tcGlsZS1weXRob24tZmlsZXMucGF0Y2ggXAorZmlsZTovLzAzMC1maXh1cC1pbmNsdWRlLWRpcnMucGF0Y2ggXAorZmlsZTovLzA3MC1kb250LWNsZWFuLWlwa2ctaW5zdGFsbC5wYXRjaCBcCitmaWxlOi8vMDgwLWRpc3R1dGlscy1kb250X2FkanVzdF9maWxlcy5wYXRjaCBcCitmaWxlOi8vMTMwLXJlYWRsaW5lLXNldHVwLnBhdGNoIFwKK2ZpbGU6Ly8xNTAtZml4LXNldHVwdGVybS5wYXRjaCBcCitmaWxlOi8vMDAwMS1oMnB5LUZpeC1pc3N1ZS0xMzAzMi13aGVyZS1pdC1mYWlscy13aXRoLVVuaWNvZGVEZWNvLnBhdGNoIFwKK2ZpbGU6Ly90d2Vhay1NVUxUSUFSQ0gtZm9yLXBvd2VycGMtbGludXgtZ251c3BlLnBhdGNoIFwKKyR7RElTVFJPX1NSQ19VUkl9IFwKKyIKKworU1JDX1VSSSArPSAiXAorICAgICAgICAgICAgZmlsZTovLzAzLWZpeC10a2ludGVyLWRldGVjdGlvbi5wYXRjaCBcCisgICAgICAgICAgICBmaWxlOi8vYXZvaWRfd2FybmluZ19hYm91dF90a2ludGVyLnBhdGNoIFwKKyAgICAgICAgICAgIGZpbGU6Ly9jZ2lfcHkucGF0Y2ggXAorICAgICAgICAgICAgZmlsZTovL2hvc3RfaW5jbHVkZV9jb250YW1pbmF0aW9uLnBhdGNoIFwKKyAgICAgICAgICAgIGZpbGU6Ly9weXRob24tMy4zLW11bHRpbGliLnBhdGNoIFwKKyAgICAgICAgICAgIGZpbGU6Ly9zaHV0aWwtZm9sbG93LXN5bWxpbmstZml4LnBhdGNoIFwKKyAgICAgICAgICAgIGZpbGU6Ly9zeXNyb290LWluY2x1ZGUtaGVhZGVycy5wYXRjaCBcCisgICAgICAgICAgICBmaWxlOi8vdW5peGNjb21waWxlci5wYXRjaCBcCisgICAgICAgICAgICBmaWxlOi8vYXZvaWQtbmN1cnNlc3ctaW5jbHVkZS1wYXRoLnBhdGNoIFwKKyAgICAgICAgICAgIGZpbGU6Ly9weXRob24zLXVzZS1DUk9TU1BZVEhPTlBBVEgtZm9yLVBZVEhPTl9GT1JfQlVJTEQucGF0Y2ggXAorICAgICAgICAgICAgZmlsZTovL3B5dGhvbjMtc2V0dXAucHktbm8taG9zdC1oZWFkZXJzLWxpYnMucGF0Y2ggXAorICAgICAgICAgICAgZmlsZTovL3N5c2NvbmZpZy5weS1hZGQtX1BZVEhPTl9QUk9KRUNUX1NSQy5wYXRjaCBcCisgICAgICAgICAgICBmaWxlOi8vc2V0dXAucHktY2hlY2stY3Jvc3NfY29tcGlsaW5nLXdoZW4tZ2V0LUZMQUdTLnBhdGNoIFwKKyAgICAgICAgICAgIGZpbGU6Ly9zZXR1cC5weS1maW5kLWxpYnJhcmllcy1pbi1zdGFnaW5nLWRpcnMucGF0Y2ggXAorICAgICAgICAgICAgZmlsZTovL2NvbmZpZ3VyZS5hYy1maXgtTElCUEwucGF0Y2ggXAorICAgICAgICAgICAgZmlsZTovL3B5dGhvbjMtZml4LUNWRS0yMDE2LTEwMDAxMTAucGF0Y2ggXAorICAgICAgICAgICAiCitTUkNfVVJJW21kNXN1bV0gPSAiODkwNmVmYmFjZmNkYzdjM2M5MTk4YWVlZmFmZDE1OWUiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiMDAxMGY1NjEwMGI5Yjc0MjU5ZWJjZDVkNGIyOTVhMzIzMjRiNThiNTE3NDAzYTEwZDFhMmFhN2NiMjJiY2E0MCIKKworTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vTElDRU5TRTttZDU9NmI2MDI1ODEzMGU0ZWQxMGQzMTAxNTE3ZWI1YjkzODUiCisKKyMgZXhjbHVkZSBwcmUtcmVsZWFzZXMgZm9yIGJvdGggcHl0aG9uIDIueCBhbmQgMy54CitVUFNUUkVBTV9DSEVDS19SRUdFWCA9ICJbUHBdeXRob24tKD9QPHB2ZXI+XGQrKFwuXGQrKSspLnRhciIKKworUyA9ICIke1dPUktESVJ9L1B5dGhvbi0ke1BWfSIKKworaW5oZXJpdCBhdXRvdG9vbHMgbXVsdGlsaWJfaGVhZGVyIHB5dGhvbjNuYXRpdmUgcGtnY29uZmlnCisKK0NPTkZJR1VSRU9QVFMgKz0gIiAtLXdpdGgtc3lzdGVtLWZmaSAiCisKK0NBQ0hFRF9DT05GSUdVUkVWQVJTID0gImFjX2N2X2hhdmVfY2hmbGFncz1ubyBcCisgICAgICAgICAgICAgICAgYWNfY3ZfaGF2ZV9sY2hmbGFncz1ubyBcCisgICAgICAgICAgICAgICAgYWNfY3ZfaGF2ZV9sb25nX2xvbmdfZm9ybWF0PXllcyBcCisgICAgICAgICAgICAgICAgYWNfY3ZfYnVnZ3lfZ2V0YWRkcmluZm89bm8gXAorICAgICAgICAgICAgICAgIGFjX2N2X2ZpbGVfX2Rldl9wdG14PXllcyBcCisgICAgICAgICAgICAgICAgYWNfY3ZfZmlsZV9fZGV2X3B0Yz1ubyBcCisiCisKK1RBUkdFVF9DQ19BUkNIICs9ICItRE5ERUJVRyAtZm5vLWlubGluZSIKK1NES19DQ19BUkNIICs9ICItRE5ERUJVRyAtZm5vLWlubGluZSIKK0VYVFJBX09FTUFLRSArPSAiQ1JPU1NfQ09NUElMRT15ZXMiCitFWFRSQV9PRUNPTkYgKz0gIkNST1NTUFlUSE9OUEFUSD0ke1NUQUdJTkdfTElCRElSX05BVElWRX0vcHl0aG9uJHtQWVRIT05fTUFKTUlOfS9saWItZHlubG9hZC8gLS13aXRob3V0LWVuc3VyZXBpcCIKKworZXhwb3J0IENST1NTX0NPTVBJTEUgPSAiJHtUQVJHRVRfUFJFRklYfSIKK2V4cG9ydCBfUFlUSE9OX1BST0pFQ1RfQkFTRSA9ICIke0J9IgorZXhwb3J0IF9QWVRIT05fUFJPSkVDVF9TUkMgPSAiJHtTfSIKK2V4cG9ydCBDQ1NIQVJFRCA9ICItZlBJQyIKKworIyBGaXggY3Jvc3MgY29tcGlsYXRpb24gb2YgZGlmZmVyZW50IG1vZHVsZXMKK2V4cG9ydCBDUk9TU1BZVEhPTlBBVEggPSAiJHtTVEFHSU5HX0xJQkRJUl9OQVRJVkV9L3B5dGhvbiR7UFlUSE9OX01BSk1JTn0vbGliLWR5bmxvYWQvOiR7Qn0vYnVpbGQvbGliLmxpbnV4LSR7VEFSR0VUX0FSQ0h9LSR7UFlUSE9OX01BSk1JTn06JHtTfS9MaWI6JHtTfS9MaWIvcGxhdC1saW51eCIKKworIyBObyBjdHlwZXMgb3B0aW9uIGZvciBweXRob24gMworUFlUSE9OTFNCT1BUUyA9ICIiCisKK2RvX2NvbmZpZ3VyZV9hcHBlbmQoKSB7CisJcm0gLWYgJHtTfS9NYWtlZmlsZS5vcmlnCisJYXV0b3JlY29uZiAtV2Nyb3NzIC0tdmVyYm9zZSAtLWluc3RhbGwgLS1mb3JjZSAtLWV4Y2x1ZGU9YXV0b3BvaW50IC4uL1B5dGhvbi0ke1BWfS9Nb2R1bGVzL19jdHlwZXMvbGliZmZpCit9CisKK2RvX2NvbXBpbGUoKSB7CisgICAgICAgICMgcmVnZW5lcmF0ZSBwbGF0Zm9ybSBzcGVjaWZpYyBmaWxlcywgYmVjYXVzZSB0aGV5IGRlcGVuZCBvbiBzeXN0ZW0gaGVhZGVycworICAgICAgICBjZCAke1N9L0xpYi9wbGF0LWxpbnV4KgorICAgICAgICBpbmNsdWRlPSR7U1RBR0lOR19JTkNESVJ9ICR7U1RBR0lOR19CSU5ESVJfTkFUSVZFfS9weXRob24zLW5hdGl2ZS9weXRob24zIFwKKyAgICAgICAgICAgICAgICAke1N9L1Rvb2xzL3NjcmlwdHMvaDJweS5weSAtaSAnKHVfbG9uZyknIFwKKyAgICAgICAgICAgICAgICAke1NUQUdJTkdfSU5DRElSfS9kbGZjbi5oIFwKKyAgICAgICAgICAgICAgICAke1NUQUdJTkdfSU5DRElSfS9saW51eC9jZHJvbS5oIFwKKyAgICAgICAgICAgICAgICAke1NUQUdJTkdfSU5DRElSfS9uZXRpbmV0L2luLmggXAorICAgICAgICAgICAgICAgICR7U1RBR0lOR19JTkNESVJ9L3N5cy90eXBlcy5oCisgICAgICAgIHNlZCAtZSAncywke1NUQUdJTkdfRElSX0hPU1R9LCxnJyAtaSAqLnB5CisgICAgICAgIGNkIC0KKworCisJIyByZW1vdmUgYW55IGJvZ3VzIExEX0xJQlJBUllfUEFUSAorCXNlZCAtaSAtZSBzLFJVTlNIQVJFRD0uKixSVU5TSEFSRUQ9LCBNYWtlZmlsZQorCisJaWYgWyAhIC1mIE1ha2VmaWxlLm9yaWcgXTsgdGhlbgorCQlpbnN0YWxsIC1tIDA2NDQgTWFrZWZpbGUgTWFrZWZpbGUub3JpZworCWZpCisJc2VkIC1pIC1lICdzLF5DT05GSUdVUkVfTERGTEFHUz0uKixDT05GSUdVUkVfTERGTEFHUz0tTC4gLUwke1NUQUdJTkdfTElCRElSfSxnJyBcCisJCS1lICdzLGxpYmRpcj0ke2xpYmRpcn0sbGliZGlyPSR7U1RBR0lOR19MSUJESVJ9LGcnIFwKKwkJLWUgJ3MsbGliZXhlY2Rpcj0ke2xpYmV4ZWNkaXJ9LGxpYmV4ZWNkaXI9JHtTVEFHSU5HX0RJUl9IT1NUfSR7bGliZXhlY2Rpcn0sZycgXAorCQktZSAncyxeTElCRElSPS4qLExJQkRJUj0ke1NUQUdJTkdfTElCRElSfSxnJyBcCisJCS1lICdzLGluY2x1ZGVkaXI9JHtpbmNsdWRlZGlyfSxpbmNsdWRlZGlyPSR7U1RBR0lOR19JTkNESVJ9LGcnIFwKKwkJLWUgJ3MsXklOQ0xVREVESVI9LiosSU5DTFVERT0ke1NUQUdJTkdfSU5DRElSfSxnJyBcCisJCS1lICdzLF5DT05GSU5DTFVERURJUj0uKixDT05GSU5DTFVERT0ke1NUQUdJTkdfSU5DRElSfSxnJyBcCisJCU1ha2VmaWxlCisJIyBzYXZlIGNvcHkgb2YgaXQgbm93LCBiZWNhdXNlIGlmIHdlIGRvIGl0IGluIGRvX2luc3RhbGwgYW5kIAorCSMgdGhlbiBjYWxsIGRvX2luc3RhbGwgdHdpY2Ugd2UgZ2V0IE1ha2VmaWxlLm9yaWcgPT0gTWFrZWZpbGUuc3lzcm9vdAorCWluc3RhbGwgLW0gMDY0NCBNYWtlZmlsZSBNYWtlZmlsZS5zeXNyb290CisKKwlvZV9ydW5tYWtlIEhPU1RQR0VOPSR7U1RBR0lOR19CSU5ESVJfTkFUSVZFfS9weXRob24zLW5hdGl2ZS9wZ2VuIFwKKwkJSE9TVFBZVEhPTj0ke1NUQUdJTkdfQklORElSX05BVElWRX0vcHl0aG9uMy1uYXRpdmUvcHl0aG9uMyBcCisJCVNUQUdJTkdfTElCRElSPSR7U1RBR0lOR19MSUJESVJ9IFwKKwkJU1RBR0lOR19CQVNFTElCRElSPSR7U1RBR0lOR19CQVNFTElCRElSfSBcCisJCVNUQUdJTkdfSU5DRElSPSR7U1RBR0lOR19JTkNESVJ9IFwKKwkJTElCPSR7YmFzZWxpYn0gXAorCQlBUkNIPSR7VEFSR0VUX0FSQ0h9IFwKKwkJT1BUPSIke0NGTEFHU30iIGxpYnB5dGhvbjMuc28KKworCW9lX3J1bm1ha2UgSE9TVFBHRU49JHtTVEFHSU5HX0JJTkRJUl9OQVRJVkV9L3B5dGhvbjMtbmF0aXZlL3BnZW4gXAorCQlIT1NUUFlUSE9OPSR7U1RBR0lOR19CSU5ESVJfTkFUSVZFfS9weXRob24zLW5hdGl2ZS9weXRob24zIFwKKwkJU1RBR0lOR19MSUJESVI9JHtTVEFHSU5HX0xJQkRJUn0gXAorCQlTVEFHSU5HX0lOQ0RJUj0ke1NUQUdJTkdfSU5DRElSfSBcCisJCVNUQUdJTkdfQkFTRUxJQkRJUj0ke1NUQUdJTkdfQkFTRUxJQkRJUn0gXAorCQlMSUI9JHtiYXNlbGlifSBcCisJCUFSQ0g9JHtUQVJHRVRfQVJDSH0gXAorCQlPUFQ9IiR7Q0ZMQUdTfSIKK30KKworZG9faW5zdGFsbCgpIHsKKwkjIG1ha2UgaW5zdGFsbCBuZWVkcyB0aGUgb3JpZ2luYWwgTWFrZWZpbGUsIG9yIG90aGVyd2lzZSB0aGUgaW5jbHVlcyB3b3VsZAorCSMgZ28gdG8gJHtEfSR7U1RBR0lORy4uLn0vLi4uCisJaW5zdGFsbCAtbSAwNjQ0IE1ha2VmaWxlLm9yaWcgTWFrZWZpbGUKKworCWluc3RhbGwgLWQgJHtEfSR7bGliZGlyfS9wa2djb25maWcKKwlpbnN0YWxsIC1kICR7RH0ke2xpYmRpcn0vcHl0aG9uJHtQWVRIT05fTUFKTUlOfS9jb25maWcKKworCSMgcmVydW4gdGhlIGJ1aWxkIG9uY2UgYWdhaW4gd2l0aCBvcmlnaW5hbCBtYWtlZmlsZSB0aGlzIHRpbWUKKwkjIHJ1biBpbnN0YWxsIGluIGEgc2VwYXJhdGUgc3RlcCB0byBhdm9pZCBjb21waWxlL2luc3RhbGwgcmFjZQorCW9lX3J1bm1ha2UgSE9TVFBHRU49JHtTVEFHSU5HX0JJTkRJUl9OQVRJVkV9L3B5dGhvbjMtbmF0aXZlL3BnZW4gXAorCQlIT1NUUFlUSE9OPSR7U1RBR0lOR19CSU5ESVJfTkFUSVZFfS9weXRob24zLW5hdGl2ZS9weXRob24zIFwKKwkJU1RBR0lOR19MSUJESVI9JHtTVEFHSU5HX0xJQkRJUn0gXAorCQlTVEFHSU5HX0lOQ0RJUj0ke1NUQUdJTkdfSU5DRElSfSBcCisJCVNUQUdJTkdfQkFTRUxJQkRJUj0ke1NUQUdJTkdfQkFTRUxJQkRJUn0gXAorCQlMSUI9JHtiYXNlbGlifSBcCisJCUFSQ0g9JHtUQVJHRVRfQVJDSH0gXAorCQlERVNURElSPSR7RH0gTElCRElSPSR7bGliZGlyfQorCQorCW9lX3J1bm1ha2UgSE9TVFBHRU49JHtTVEFHSU5HX0JJTkRJUl9OQVRJVkV9L3B5dGhvbjMtbmF0aXZlL3BnZW4gXAorCQlIT1NUUFlUSE9OPSR7U1RBR0lOR19CSU5ESVJfTkFUSVZFfS9weXRob24zLW5hdGl2ZS9weXRob24zIFwKKwkJU1RBR0lOR19MSUJESVI9JHtTVEFHSU5HX0xJQkRJUn0gXAorCQlTVEFHSU5HX0lOQ0RJUj0ke1NUQUdJTkdfSU5DRElSfSBcCisJCVNUQUdJTkdfQkFTRUxJQkRJUj0ke1NUQUdJTkdfQkFTRUxJQkRJUn0gXAorCQlMSUI9JHtiYXNlbGlifSBcCisJCUFSQ0g9JHtUQVJHRVRfQVJDSH0gXAorCQlERVNURElSPSR7RH0gTElCRElSPSR7bGliZGlyfSBpbnN0YWxsCisKKwkjIGF2b2lkIGNvbmZsaWN0IHdpdGggMnRvMyBmcm9tIFB5dGhvbiAyCisJcm0gLWYgJHtEfS8ke2JpbmRpcn0vMnRvMworCisJaW5zdGFsbCAtbSAwNjQ0IE1ha2VmaWxlLnN5c3Jvb3QgJHtEfS8ke2xpYmRpcn0vcHl0aG9uJHtQWVRIT05fTUFKTUlOfS9jb25maWcvTWFrZWZpbGUKKwlpbnN0YWxsIC1tIDA2NDQgTWFrZWZpbGUuc3lzcm9vdCAke0R9LyR7bGliZGlyfS9weXRob24ke1BZVEhPTl9NQUpNSU59L2NvbmZpZy0ke1BZVEhPTl9NQUpNSU59JHtQWVRIT05fQUJJfS9NYWtlZmlsZQorCisJaWYgWyAtZSAke1dPUktESVJ9L3NpdGVjdXN0b21pemUucHkgXTsgdGhlbgorCQlpbnN0YWxsIC1tIDA2NDQgJHtXT1JLRElSfS9zaXRlY3VzdG9taXplLnB5ICR7RH0vJHtsaWJkaXJ9L3B5dGhvbiR7UFlUSE9OX01BSk1JTn0KKwlmaQorCisJb2VfbXVsdGlsaWJfaGVhZGVyIHB5dGhvbiR7UFlUSE9OX0JJTkFCSX0vcHljb25maWcuaAorfQorCitkb19pbnN0YWxsX2FwcGVuZF9jbGFzcy1uYXRpdmVzZGsgKCkgeworCWNyZWF0ZV93cmFwcGVyICR7RH0ke2JpbmRpcn0vcHl0aG9uJHtQWVRIT05fTUFKTUlOfSBURVJNSU5GT19ESVJTPScke3N5c2NvbmZkaXJ9L3Rlcm1pbmZvOi9ldGMvdGVybWluZm86L3Vzci9zaGFyZS90ZXJtaW5mbzovdXNyL3NoYXJlL21pc2MvdGVybWluZm86L2xpYi90ZXJtaW5mbycKK30KKworU1NUQVRFX1NDQU5fRklMRVMgKz0gIk1ha2VmaWxlIgorUEFDS0FHRV9QUkVQUk9DRVNTX0ZVTkNTICs9ICJweV9wYWNrYWdlX3ByZXByb2Nlc3MiCisKK3B5X3BhY2thZ2VfcHJlcHJvY2VzcyAoKSB7CisJIyBjb3B5IGJhY2sgdGhlIG9sZCBNYWtlZmlsZSB0byBmaXggdGFyZ2V0IHBhY2thZ2UKKwlpbnN0YWxsIC1tIDA2NDQgJHtCfS9NYWtlZmlsZS5vcmlnICR7UEtHRH0vJHtsaWJkaXJ9L3B5dGhvbiR7UFlUSE9OX01BSk1JTn0vY29uZmlnL01ha2VmaWxlCisJaW5zdGFsbCAtbSAwNjQ0ICR7Qn0vTWFrZWZpbGUub3JpZyAke1BLR0R9LyR7bGliZGlyfS9weXRob24ke1BZVEhPTl9NQUpNSU59L2NvbmZpZy0ke1BZVEhPTl9NQUpNSU59JHtQWVRIT05fQUJJfS9NYWtlZmlsZQorCSMgUmVtb3ZlIHJlZmVyZW5jZXMgdG8gYnVpbGRtYWNoaW5lIHBhdGhzIGluIHRhcmdldCBNYWtlZmlsZSBhbmQgX3N5c2NvbmZpZ2RhdGEKKwlzZWQgLWkgLWUgJ3M6LS1zeXNyb290PSR7U1RBR0lOR19ESVJfVEFSR0VUfTo6ZycgLWUgczonLS13aXRoLWxpYnRvb2wtc3lzcm9vdD0ke1NUQUdJTkdfRElSX1RBUkdFVH0nOjpnIFwKKwkJJHtQS0dEfS8ke2xpYmRpcn0vcHl0aG9uJHtQWVRIT05fTUFKTUlOfS9jb25maWcvTWFrZWZpbGUgXAorCQkke1BLR0R9LyR7bGliZGlyfS9weXRob24ke1BZVEhPTl9NQUpNSU59L2NvbmZpZy0ke1BZVEhPTl9NQUpNSU59JHtQWVRIT05fQUJJfS9NYWtlZmlsZSBcCisJCSR7UEtHRH0vJHtsaWJkaXJ9L3B5dGhvbiR7UFlUSE9OX01BSk1JTn0vX3N5c2NvbmZpZ2RhdGEucHkKK30KKworcmVxdWlyZSBweXRob24tJHtQWVRIT05fTUFKTUlOfS1tYW5pZmVzdC5pbmMKKworIyBtYW51YWwgZGVwZW5kZW5jeSBhZGRpdGlvbnMKK1JQUk9WSURFU18ke1BOfS1jb3JlID0gIiR7UE59IgorUlJFQ09NTUVORFNfJHtQTn0tY29yZSA9ICIke1BOfS1yZWFkbGluZSIKK1JSRUNPTU1FTkRTXyR7UE59LWNyeXB0ID0gIm9wZW5zc2wiCitSUkVDT01NRU5EU18ke1BOfS1jcnlwdF9jbGFzcy1uYXRpdmVzZGsgPSAibmF0aXZlc2RrLW9wZW5zc2wiCisKK0ZJTEVTXyR7UE59LTJ0bzMgKz0gIiR7YmluZGlyfS8ydG8zLSR7UFlUSE9OX01BSk1JTn0iCitGSUxFU18ke1BOfS1weWRvYyArPSAiJHtiaW5kaXJ9L3B5ZG9jJHtQWVRIT05fTUFKTUlOfSAke2JpbmRpcn0vcHlkb2MzIgorRklMRVNfJHtQTn0taWRsZSArPSAiJHtiaW5kaXJ9L2lkbGUzICR7YmluZGlyfS9pZGxlJHtQWVRIT05fTUFKTUlOfSIKKworUEFDS0FHRVMgPSsgIiR7UE59LXB5dmVudiIKK0ZJTEVTXyR7UE59LXB5dmVudiArPSAiJHtiaW5kaXJ9L3B5dmVudi0ke1BZVEhPTl9NQUpNSU59ICR7YmluZGlyfS9weXZlbnYiCisKKyMgcGFja2FnZSBsaWJweXRob24zCitQQUNLQUdFUyA9KyAibGlicHl0aG9uMyBsaWJweXRob24zLXN0YXRpY2RldiIKK0ZJTEVTX2xpYnB5dGhvbjMgPSAiJHtsaWJkaXJ9L2xpYnB5dGhvbiouc28uKiIKK0ZJTEVTX2xpYnB5dGhvbjMtc3RhdGljZGV2ICs9ICIke2xpYmRpcn0vcHl0aG9uJHtQWVRIT05fTUFKTUlOfS9jb25maWctJHtQWVRIT05fQklOQUJJfS9saWJweXRob24ke1BZVEhPTl9CSU5BQkl9LmEiCitJTlNBTkVfU0tJUF8ke1BOfS1kZXYgKz0gImRldi1lbGYiCisKKyMgY2F0Y2ggYWxsIHRoZSByZXN0ICh1bnNvcnRlZCkKK1BBQ0tBR0VTICs9ICIke1BOfS1taXNjIgorUkRFUEVORFNfJHtQTn0tbWlzYyArPSAiJHtQTn0tY29yZSAke1BOfS1lbWFpbCAke1BOfS1jb2RlY3MgJHtQTn0tdGV4dHV0aWxzICR7UE59LWFyZ3BhcnNlIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlcyArPSAiJHtQTn0tbWlzYyIKK0ZJTEVTXyR7UE59LW1pc2MgPSAiJHtsaWJkaXJ9L3B5dGhvbiR7UFlUSE9OX01BSk1JTn0iCisKKyMgY2F0Y2ggbWFucGFnZQorUEFDS0FHRVMgKz0gIiR7UE59LW1hbiIKK0ZJTEVTXyR7UE59LW1hbiA9ICIke2RhdGFkaXJ9L21hbiIKKworQkJDTEFTU0VYVEVORCA9ICJuYXRpdmVzZGsiCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob25fMi43LjExLmJiIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uXzIuNy4xMS5iYgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjA2ZjE1My4uMDAwMDAwMAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob25fMi43LjExLmJiCisrKyAvZGV2L251bGwKQEAgLTEsMTczICswLDAgQEAKLXJlcXVpcmUgcHl0aG9uLmluYwotREVQRU5EUyA9ICJweXRob24tbmF0aXZlIGxpYmZmaSBiemlwMiBkYiBnZGJtIG9wZW5zc2wgcmVhZGxpbmUgc3FsaXRlMyB6bGliIgotUFIgPSAiJHtJTkNfUFJ9IgotCi1ESVNUUk9fU1JDX1VSSSA/PSAiZmlsZTovL3NpdGVjdXN0b21pemUucHkiCi1ESVNUUk9fU1JDX1VSSV9saW51eHN0ZGJhc2UgPSAiIgotU1JDX1VSSSArPSAiXAotICBmaWxlOi8vMDEtdXNlLXByb3Blci10b29scy1mb3ItY3Jvc3MtYnVpbGQucGF0Y2ggXAotICBmaWxlOi8vMDMtZml4LXRraW50ZXItZGV0ZWN0aW9uLnBhdGNoIFwKLSAgZmlsZTovLzA2LWF2b2lkX3Vzcl9saWJfdGVybWNhcF9wYXRoX2luX2xpbmtpbmcucGF0Y2ggXAotICAke0RJU1RST19TUkNfVVJJfSBcCi0gIGZpbGU6Ly9tdWx0aWxpYi5wYXRjaCBcCi0gIGZpbGU6Ly9jZ2lfcHkucGF0Y2ggXAotICBmaWxlOi8vc2V0dXBfcHlfc2tpcF9jcm9zc19pbXBvcnRfY2hlY2sucGF0Y2ggXAotICBmaWxlOi8vYWRkLW1kNW1vZHVsZS1zdXBwb3J0LnBhdGNoIFwKLSAgZmlsZTovL2hvc3RfaW5jbHVkZV9jb250YW1pbmF0aW9uLnBhdGNoIFwKLSAgZmlsZTovL2ZpeF9mb3JfdXNpbmdfZGlmZmVyZW50X2xpYmRpci5wYXRjaCBcCi0gIGZpbGU6Ly9zZXR1cHR3ZWFrcy5wYXRjaCBcCi0gIGZpbGU6Ly9jaGVjay1pZi10YXJnZXQtaXMtNjRiLW5vdC1ob3N0LnBhdGNoIFwKLSAgZmlsZTovL3NlYXJjaF9kYl9oX2luX2luY19kaXJzX2FuZF9hdm9pZF93YXJuaW5nLnBhdGNoIFwKLSAgZmlsZTovL2F2b2lkX3dhcm5pbmdfYWJvdXRfdGtpbnRlci5wYXRjaCBcCi0gIGZpbGU6Ly9hdm9pZF93YXJuaW5nX2Zvcl9zdW5vc19zcGVjaWZpY19tb2R1bGUucGF0Y2ggXAotICBmaWxlOi8vcHl0aG9uLTIuNy4zLXJlbW92ZS1ic2RiLXJwYXRoLnBhdGNoIFwKLSAgZmlsZTovL2ZpeC1tYWtlZmlsZS1mb3ItcHRlc3QucGF0Y2ggXAotICBmaWxlOi8vcnVuLXB0ZXN0IFwKLSAgZmlsZTovL3BhcmFsbGVsLW1ha2VpbnN0LWNyZWF0ZS1iaW5kaXIucGF0Y2ggXAotICBmaWxlOi8vdXNlX3N5c3Jvb3RfbmN1cnNlc19pbnN0ZWFkX29mX2hvc3QucGF0Y2ggXAotICBmaWxlOi8vYXZvaWRfcGFyYWxsZWxfbWFrZV9yYWNlc19vbl9wZ2VuLnBhdGNoIFwKLSAgZmlsZTovL2FkZC1DUk9TU1BZVEhPTlBBVEgtZm9yLVBZVEhPTl9GT1JfQlVJTEQucGF0Y2ggXAotIgotCi1TID0gIiR7V09SS0RJUn0vUHl0aG9uLSR7UFZ9IgotCi1pbmhlcml0IGF1dG90b29scyBtdWx0aWxpYl9oZWFkZXIgcHl0aG9uLWRpciBweXRob25uYXRpdmUKLQotQ09ORklHVVJFT1BUUyArPSAiIC0td2l0aC1zeXN0ZW0tZmZpICIKLQotRVhUUkFfT0VDT05GICs9ICJhY19jdl9maWxlX19kZXZfcHRteD15ZXMgYWNfY3ZfZmlsZV9fZGV2X3B0Yz1ubyIKLQotZG9fY29uZmlndXJlX2FwcGVuZCgpIHsKLQlybSAtZiAke1N9L01ha2VmaWxlLm9yaWcKLSAgICAgICAgYXV0b3JlY29uZiAtV2Nyb3NzIC0tdmVyYm9zZSAtLWluc3RhbGwgLS1mb3JjZSAtLWV4Y2x1ZGU9YXV0b3BvaW50IC4uL1B5dGhvbi0ke1BWfS9Nb2R1bGVzL19jdHlwZXMvbGliZmZpCi19Ci0KLWRvX2NvbXBpbGUoKSB7Ci0gICAgICAgICMgcmVnZW5lcmF0ZSBwbGF0Zm9ybSBzcGVjaWZpYyBmaWxlcywgYmVjYXVzZSB0aGV5IGRlcGVuZCBvbiBzeXN0ZW0gaGVhZGVycwotICAgICAgICBjZCAke1N9L0xpYi9wbGF0LWxpbnV4MgotICAgICAgICBpbmNsdWRlPSR7U1RBR0lOR19JTkNESVJ9ICR7U1RBR0lOR19CSU5ESVJfTkFUSVZFfS9weXRob24tbmF0aXZlL3B5dGhvbiBcCi0gICAgICAgICAgICAgICAgJHtTfS9Ub29scy9zY3JpcHRzL2gycHkucHkgLWkgJyh1X2xvbmcpJyBcCi0gICAgICAgICAgICAgICAgJHtTVEFHSU5HX0lOQ0RJUn0vZGxmY24uaCBcCi0gICAgICAgICAgICAgICAgJHtTVEFHSU5HX0lOQ0RJUn0vbGludXgvY2Ryb20uaCBcCi0gICAgICAgICAgICAgICAgJHtTVEFHSU5HX0lOQ0RJUn0vbmV0aW5ldC9pbi5oIFwKLSAgICAgICAgICAgICAgICAke1NUQUdJTkdfSU5DRElSfS9zeXMvdHlwZXMuaAotICAgICAgICBzZWQgLWUgJ3MsJHtTVEFHSU5HX0RJUl9IT1NUfSwsZycgLWkgKi5weQotICAgICAgICBjZCAtCi0KLQkjIHJlbW92ZSBhbnkgYm9ndXMgTERfTElCUkFSWV9QQVRICi0Jc2VkIC1pIC1lIHMsUlVOU0hBUkVEPS4qLFJVTlNIQVJFRD0sIE1ha2VmaWxlCi0KLQlpZiBbICEgLWYgTWFrZWZpbGUub3JpZyBdOyB0aGVuCi0JCWluc3RhbGwgLW0gMDY0NCBNYWtlZmlsZSBNYWtlZmlsZS5vcmlnCi0JZmkKLQlzZWQgLWkgLWUgJ3MjXkxERkxBR1M9LiojTERGTEFHUz0ke0xERkxBR1N9IC1MLiAtTCR7U1RBR0lOR19MSUJESVJ9I2cnIFwKLQkJLWUgJ3MsbGliZGlyPSR7bGliZGlyfSxsaWJkaXI9JHtTVEFHSU5HX0xJQkRJUn0sZycgXAotCQktZSAncyxsaWJleGVjZGlyPSR7bGliZXhlY2Rpcn0sbGliZXhlY2Rpcj0ke1NUQUdJTkdfRElSX0hPU1R9JHtsaWJleGVjZGlyfSxnJyBcCi0JCS1lICdzLF5MSUJESVI9LiosTElCRElSPSR7U1RBR0lOR19MSUJESVJ9LGcnIFwKLQkJLWUgJ3MsaW5jbHVkZWRpcj0ke2luY2x1ZGVkaXJ9LGluY2x1ZGVkaXI9JHtTVEFHSU5HX0lOQ0RJUn0sZycgXAotCQktZSAncyxeSU5DTFVERURJUj0uKixJTkNMVURFPSR7U1RBR0lOR19JTkNESVJ9LGcnIFwKLQkJLWUgJ3MsXkNPTkZJTkNMVURFRElSPS4qLENPTkZJTkNMVURFPSR7U1RBR0lOR19JTkNESVJ9LGcnIFwKLQkJTWFrZWZpbGUKLQkjIHNhdmUgY29weSBvZiBpdCBub3csIGJlY2F1c2UgaWYgd2UgZG8gaXQgaW4gZG9faW5zdGFsbCBhbmQgCi0JIyB0aGVuIGNhbGwgZG9faW5zdGFsbCB0d2ljZSB3ZSBnZXQgTWFrZWZpbGUub3JpZyA9PSBNYWtlZmlsZS5zeXNyb290Ci0JaW5zdGFsbCAtbSAwNjQ0IE1ha2VmaWxlIE1ha2VmaWxlLnN5c3Jvb3QKLQotCWV4cG9ydCBDUk9TU19DT01QSUxFPSIke1RBUkdFVF9QUkVGSVh9IgotCWV4cG9ydCBQWVRIT05CVUlMRERJUj0iJHtCfSIKLQotCW9lX3J1bm1ha2UgSE9TVFBHRU49JHtTVEFHSU5HX0JJTkRJUl9OQVRJVkV9L3B5dGhvbi1uYXRpdmUvcGdlbiBcCi0JCUhPU1RQWVRIT049JHtTVEFHSU5HX0JJTkRJUl9OQVRJVkV9L3B5dGhvbi1uYXRpdmUvcHl0aG9uIFwKLQkJU1RBR0lOR19MSUJESVI9JHtTVEFHSU5HX0xJQkRJUn0gXAotCQlTVEFHSU5HX0lOQ0RJUj0ke1NUQUdJTkdfSU5DRElSfSBcCi0JCVNUQUdJTkdfQkFTRUxJQkRJUj0ke1NUQUdJTkdfQkFTRUxJQkRJUn0gXAotCQlCVUlMRF9TWVM9JHtCVUlMRF9TWVN9IEhPU1RfU1lTPSR7SE9TVF9TWVN9IFwKLQkJT1BUPSIke0NGTEFHU30iCi19Ci0KLWRvX2luc3RhbGwoKSB7Ci0JIyBtYWtlIGluc3RhbGwgbmVlZHMgdGhlIG9yaWdpbmFsIE1ha2VmaWxlLCBvciBvdGhlcndpc2UgdGhlIGluY2x1ZXMgd291bGQKLQkjIGdvIHRvICR7RH0ke1NUQUdJTkcuLi59Ly4uLgotCWluc3RhbGwgLW0gMDY0NCBNYWtlZmlsZS5vcmlnIE1ha2VmaWxlCi0KLQlleHBvcnQgQ1JPU1NfQ09NUElMRT0iJHtUQVJHRVRfUFJFRklYfSIKLQlleHBvcnQgUFlUSE9OQlVJTERESVI9IiR7Qn0iCi0KLQkjIEFmdGVyIHN3aXp6bGluZyB0aGUgbWFrZWZpbGUsIHdlIG5lZWQgdG8gcnVuIHRoZSBidWlsZCBhZ2Fpbi4KLQkjIGluc3RhbGwgY2FuIHJhY2Ugd2l0aCB0aGUgYnVpbGQgc28gd2UgaGF2ZSB0byBydW4gdGhpcyBmaXJzdCwgdGhlbiBpbnN0YWxsCi0Jb2VfcnVubWFrZSBIT1NUUEdFTj0ke1NUQUdJTkdfQklORElSX05BVElWRX0vcHl0aG9uLW5hdGl2ZS9wZ2VuIFwKLQkJSE9TVFBZVEhPTj0ke1NUQUdJTkdfQklORElSX05BVElWRX0vcHl0aG9uLW5hdGl2ZS9weXRob24gXAotCQlDUk9TU1BZVEhPTlBBVEg9JHtTVEFHSU5HX0xJQkRJUl9OQVRJVkV9L3B5dGhvbiR7UFlUSE9OX01BSk1JTn0vbGliLWR5bmxvYWQvIFwKLQkJU1RBR0lOR19MSUJESVI9JHtTVEFHSU5HX0xJQkRJUn0gXAotCQlTVEFHSU5HX0lOQ0RJUj0ke1NUQUdJTkdfSU5DRElSfSBcCi0JCVNUQUdJTkdfQkFTRUxJQkRJUj0ke1NUQUdJTkdfQkFTRUxJQkRJUn0gXAotCQlCVUlMRF9TWVM9JHtCVUlMRF9TWVN9IEhPU1RfU1lTPSR7SE9TVF9TWVN9IFwKLQkJREVTVERJUj0ke0R9IExJQkRJUj0ke2xpYmRpcn0KLQkKLQlvZV9ydW5tYWtlIEhPU1RQR0VOPSR7U1RBR0lOR19CSU5ESVJfTkFUSVZFfS9weXRob24tbmF0aXZlL3BnZW4gXAotCQlIT1NUUFlUSE9OPSR7U1RBR0lOR19CSU5ESVJfTkFUSVZFfS9weXRob24tbmF0aXZlL3B5dGhvbiBcCi0JCUNST1NTUFlUSE9OUEFUSD0ke1NUQUdJTkdfTElCRElSX05BVElWRX0vcHl0aG9uJHtQWVRIT05fTUFKTUlOfS9saWItZHlubG9hZC8gXAotCQlTVEFHSU5HX0xJQkRJUj0ke1NUQUdJTkdfTElCRElSfSBcCi0JCVNUQUdJTkdfSU5DRElSPSR7U1RBR0lOR19JTkNESVJ9IFwKLQkJU1RBR0lOR19CQVNFTElCRElSPSR7U1RBR0lOR19CQVNFTElCRElSfSBcCi0JCUJVSUxEX1NZUz0ke0JVSUxEX1NZU30gSE9TVF9TWVM9JHtIT1NUX1NZU30gXAotCQlERVNURElSPSR7RH0gTElCRElSPSR7bGliZGlyfSBpbnN0YWxsCi0KLQlpbnN0YWxsIC1tIDA2NDQgTWFrZWZpbGUuc3lzcm9vdCAke0R9LyR7bGliZGlyfS9weXRob24ke1BZVEhPTl9NQUpNSU59L2NvbmZpZy9NYWtlZmlsZQotCi0JaWYgWyAtZSAke1dPUktESVJ9L3NpdGVjdXN0b21pemUucHkgXTsgdGhlbgotCQlpbnN0YWxsIC1tIDA2NDQgJHtXT1JLRElSfS9zaXRlY3VzdG9taXplLnB5ICR7RH0vJHtsaWJkaXJ9L3B5dGhvbiR7UFlUSE9OX01BSk1JTn0KLQlmaQotCi0Jb2VfbXVsdGlsaWJfaGVhZGVyIHB5dGhvbiR7UFlUSE9OX01BSk1JTn0vcHljb25maWcuaAotfQotCi1kb19pbnN0YWxsX2FwcGVuZF9jbGFzcy1uYXRpdmVzZGsgKCkgewotCWNyZWF0ZV93cmFwcGVyICR7RH0ke2JpbmRpcn0vcHl0aG9uMi43IFBZVEhPTkhPTUU9JyR7cHJlZml4fScgVEVSTUlORk9fRElSUz0nJHtzeXNjb25mZGlyfS90ZXJtaW5mbzovZXRjL3Rlcm1pbmZvOi91c3Ivc2hhcmUvdGVybWluZm86L3Vzci9zaGFyZS9taXNjL3Rlcm1pbmZvOi9saWIvdGVybWluZm8nCi19Ci0KLVNTVEFURV9TQ0FOX0ZJTEVTICs9ICJNYWtlZmlsZSIKLVBBQ0tBR0VfUFJFUFJPQ0VTU19GVU5DUyArPSAicHlfcGFja2FnZV9wcmVwcm9jZXNzIgotCi1weV9wYWNrYWdlX3ByZXByb2Nlc3MgKCkgewotCSMgY29weSBiYWNrIHRoZSBvbGQgTWFrZWZpbGUgdG8gZml4IHRhcmdldCBwYWNrYWdlCi0JaW5zdGFsbCAtbSAwNjQ0ICR7Qn0vTWFrZWZpbGUub3JpZyAke1BLR0R9LyR7bGliZGlyfS9weXRob24ke1BZVEhPTl9NQUpNSU59L2NvbmZpZy9NYWtlZmlsZQotCi0JIyBSZW1vdmUgcmVmZXJlbmNlcyB0byBidWlsZG1hY2hpbmUgcGF0aHMgaW4gdGFyZ2V0IE1ha2VmaWxlIGFuZCBfc3lzY29uZmlnZGF0YQotCXNlZCAtaSAtZSAnczotLXN5c3Jvb3Q9JHtTVEFHSU5HX0RJUl9UQVJHRVR9OjpnJyAtZSBzOictLXdpdGgtbGlidG9vbC1zeXNyb290PSR7U1RBR0lOR19ESVJfVEFSR0VUfSc6OmcgXAotCQkke1BLR0R9LyR7bGliZGlyfS9weXRob24ke1BZVEhPTl9NQUpNSU59L2NvbmZpZy9NYWtlZmlsZSBcCi0JCSR7UEtHRH0vJHtsaWJkaXJ9L3B5dGhvbiR7UFlUSE9OX01BSk1JTn0vX3N5c2NvbmZpZ2RhdGEucHkKLX0KLQotcmVxdWlyZSBweXRob24tJHtQWVRIT05fTUFKTUlOfS1tYW5pZmVzdC5pbmMKLQotIyBtYW51YWwgZGVwZW5kZW5jeSBhZGRpdGlvbnMKLVJQUk9WSURFU18ke1BOfS1jb3JlID0gIiR7UE59IgotUlJFQ09NTUVORFNfJHtQTn0tY29yZSA9ICIke1BOfS1yZWFkbGluZSIKLVJSRUNPTU1FTkRTXyR7UE59LWNvcmVfYXBwZW5kX2NsYXNzLW5hdGl2ZXNkayA9ICIgbmF0aXZlc2RrLXB5dGhvbi1tb2R1bGVzIgotUlJFQ09NTUVORFNfJHtQTn0tY3J5cHQgPSAib3BlbnNzbCIKLQotIyBwYWNrYWdlIGxpYnB5dGhvbjIKLVBBQ0tBR0VTID0rICJsaWIke0JQTn0yIgotRklMRVNfbGliJHtCUE59MiA9ICIke2xpYmRpcn0vbGlicHl0aG9uKi5zby4qIgotCi0jIGNhdGNoIGFsbCB0aGUgcmVzdCAodW5zb3J0ZWQpCi1QQUNLQUdFUyArPSAiJHtQTn0tbWlzYyIKLUZJTEVTXyR7UE59LW1pc2MgPSAiJHtsaWJkaXJ9L3B5dGhvbiR7UFlUSE9OX01BSk1JTn0iCi1SREVQRU5EU18ke1BOfS1tb2R1bGVzICs9ICIke1BOfS1taXNjIgotUkRFUEVORFNfJHtQTn0tcHRlc3QgPSAiJHtQTn0tbW9kdWxlcyIKLSNpbmhlcml0IHB0ZXN0IGFmdGVyICJyZXF1aXJlIHB5dGhvbi0ke1BZVEhPTl9NQUpNSU59LW1hbmlmZXN0LmluYyIgc28gUEFDS0FHRVMgZG9lc24ndCBnZXQgb3ZlcndyaXR0ZW4KLWluaGVyaXQgcHRlc3QKLQotIyBUaGlzIG11c3QgY29tZSBhZnRlciBpbmhlcml0IHB0ZXN0IGZvciB0aGUgb3ZlcnJpZGUgdG8gdGFrZSBlZmZlY3QKLWRvX2luc3RhbGxfcHRlc3QoKSB7Ci0JY3AgJHtCfS9NYWtlZmlsZSAke0R9JHtQVEVTVF9QQVRIfQotCXNlZCAtZSBzOkxJQkRJUi9weXRob24vcHRlc3Q6JHtQVEVTVF9QQVRIfTpnIFwKLQkgLWUgczpMSUJESVI6JHtsaWJkaXJ9OmcgXAotCSAtaSAke0R9JHtQVEVTVF9QQVRIfS9ydW4tcHRlc3QKLX0KLQotIyBjYXRjaCBtYW5wYWdlCi1QQUNLQUdFUyArPSAiJHtQTn0tbWFuIgotRklMRVNfJHtQTn0tbWFuID0gIiR7ZGF0YWRpcn0vbWFuIgotCi1CQkNMQVNTRVhURU5EID0gIm5hdGl2ZXNkayIKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbl8yLjcuMTIuYmIgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob25fMi43LjEyLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjlmZTM1ZGIKLS0tIC9kZXYvbnVsbAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob25fMi43LjEyLmJiCkBAIC0wLDAgKzEsMTcxIEBACityZXF1aXJlIHB5dGhvbi5pbmMKK0RFUEVORFMgPSAicHl0aG9uLW5hdGl2ZSBsaWJmZmkgYnppcDIgZGIgZ2RibSBvcGVuc3NsIHJlYWRsaW5lIHNxbGl0ZTMgemxpYiIKK1BSID0gIiR7SU5DX1BSfSIKKworRElTVFJPX1NSQ19VUkkgPz0gImZpbGU6Ly9zaXRlY3VzdG9taXplLnB5IgorRElTVFJPX1NSQ19VUklfbGludXhzdGRiYXNlID0gIiIKK1NSQ19VUkkgKz0gIlwKKyAgZmlsZTovLzAxLXVzZS1wcm9wZXItdG9vbHMtZm9yLWNyb3NzLWJ1aWxkLnBhdGNoIFwKKyAgZmlsZTovLzAzLWZpeC10a2ludGVyLWRldGVjdGlvbi5wYXRjaCBcCisgIGZpbGU6Ly8wNi1hdm9pZF91c3JfbGliX3Rlcm1jYXBfcGF0aF9pbl9saW5raW5nLnBhdGNoIFwKKyAgJHtESVNUUk9fU1JDX1VSSX0gXAorICBmaWxlOi8vbXVsdGlsaWIucGF0Y2ggXAorICBmaWxlOi8vY2dpX3B5LnBhdGNoIFwKKyAgZmlsZTovL3NldHVwX3B5X3NraXBfY3Jvc3NfaW1wb3J0X2NoZWNrLnBhdGNoIFwKKyAgZmlsZTovL2FkZC1tZDVtb2R1bGUtc3VwcG9ydC5wYXRjaCBcCisgIGZpbGU6Ly9ob3N0X2luY2x1ZGVfY29udGFtaW5hdGlvbi5wYXRjaCBcCisgIGZpbGU6Ly9maXhfZm9yX3VzaW5nX2RpZmZlcmVudF9saWJkaXIucGF0Y2ggXAorICBmaWxlOi8vc2V0dXB0d2Vha3MucGF0Y2ggXAorICBmaWxlOi8vY2hlY2staWYtdGFyZ2V0LWlzLTY0Yi1ub3QtaG9zdC5wYXRjaCBcCisgIGZpbGU6Ly9zZWFyY2hfZGJfaF9pbl9pbmNfZGlyc19hbmRfYXZvaWRfd2FybmluZy5wYXRjaCBcCisgIGZpbGU6Ly9hdm9pZF93YXJuaW5nX2Fib3V0X3RraW50ZXIucGF0Y2ggXAorICBmaWxlOi8vYXZvaWRfd2FybmluZ19mb3Jfc3Vub3Nfc3BlY2lmaWNfbW9kdWxlLnBhdGNoIFwKKyAgZmlsZTovL3B5dGhvbi0yLjcuMy1yZW1vdmUtYnNkYi1ycGF0aC5wYXRjaCBcCisgIGZpbGU6Ly9maXgtbWFrZWZpbGUtZm9yLXB0ZXN0LnBhdGNoIFwKKyAgZmlsZTovL3J1bi1wdGVzdCBcCisgIGZpbGU6Ly9wYXJhbGxlbC1tYWtlaW5zdC1jcmVhdGUtYmluZGlyLnBhdGNoIFwKKyAgZmlsZTovL3VzZV9zeXNyb290X25jdXJzZXNfaW5zdGVhZF9vZl9ob3N0LnBhdGNoIFwKKyAgZmlsZTovL2FkZC1DUk9TU1BZVEhPTlBBVEgtZm9yLVBZVEhPTl9GT1JfQlVJTEQucGF0Y2ggXAorICBmaWxlOi8vcHl0aG9uLWZpeC1DVkUtMjAxNi0xMDAwMTEwLnBhdGNoIFwKKyIKKworUyA9ICIke1dPUktESVJ9L1B5dGhvbi0ke1BWfSIKKworaW5oZXJpdCBhdXRvdG9vbHMgbXVsdGlsaWJfaGVhZGVyIHB5dGhvbi1kaXIgcHl0aG9ubmF0aXZlCisKK0NPTkZJR1VSRU9QVFMgKz0gIiAtLXdpdGgtc3lzdGVtLWZmaSAiCisKK0VYVFJBX09FQ09ORiArPSAiYWNfY3ZfZmlsZV9fZGV2X3B0bXg9eWVzIGFjX2N2X2ZpbGVfX2Rldl9wdGM9bm8iCisKK2RvX2NvbmZpZ3VyZV9hcHBlbmQoKSB7CisJcm0gLWYgJHtTfS9NYWtlZmlsZS5vcmlnCisgICAgICAgIGF1dG9yZWNvbmYgLVdjcm9zcyAtLXZlcmJvc2UgLS1pbnN0YWxsIC0tZm9yY2UgLS1leGNsdWRlPWF1dG9wb2ludCAuLi9QeXRob24tJHtQVn0vTW9kdWxlcy9fY3R5cGVzL2xpYmZmaQorfQorCitkb19jb21waWxlKCkgeworICAgICAgICAjIHJlZ2VuZXJhdGUgcGxhdGZvcm0gc3BlY2lmaWMgZmlsZXMsIGJlY2F1c2UgdGhleSBkZXBlbmQgb24gc3lzdGVtIGhlYWRlcnMKKyAgICAgICAgY2QgJHtTfS9MaWIvcGxhdC1saW51eDIKKyAgICAgICAgaW5jbHVkZT0ke1NUQUdJTkdfSU5DRElSfSAke1NUQUdJTkdfQklORElSX05BVElWRX0vcHl0aG9uLW5hdGl2ZS9weXRob24gXAorICAgICAgICAgICAgICAgICR7U30vVG9vbHMvc2NyaXB0cy9oMnB5LnB5IC1pICcodV9sb25nKScgXAorICAgICAgICAgICAgICAgICR7U1RBR0lOR19JTkNESVJ9L2RsZmNuLmggXAorICAgICAgICAgICAgICAgICR7U1RBR0lOR19JTkNESVJ9L2xpbnV4L2Nkcm9tLmggXAorICAgICAgICAgICAgICAgICR7U1RBR0lOR19JTkNESVJ9L25ldGluZXQvaW4uaCBcCisgICAgICAgICAgICAgICAgJHtTVEFHSU5HX0lOQ0RJUn0vc3lzL3R5cGVzLmgKKyAgICAgICAgc2VkIC1lICdzLCR7U1RBR0lOR19ESVJfSE9TVH0sLGcnIC1pICoucHkKKyAgICAgICAgY2QgLQorCisJIyByZW1vdmUgYW55IGJvZ3VzIExEX0xJQlJBUllfUEFUSAorCXNlZCAtaSAtZSBzLFJVTlNIQVJFRD0uKixSVU5TSEFSRUQ9LCBNYWtlZmlsZQorCisJaWYgWyAhIC1mIE1ha2VmaWxlLm9yaWcgXTsgdGhlbgorCQlpbnN0YWxsIC1tIDA2NDQgTWFrZWZpbGUgTWFrZWZpbGUub3JpZworCWZpCisJc2VkIC1pIC1lICdzI15MREZMQUdTPS4qI0xERkxBR1M9JHtMREZMQUdTfSAtTC4gLUwke1NUQUdJTkdfTElCRElSfSNnJyBcCisJCS1lICdzLGxpYmRpcj0ke2xpYmRpcn0sbGliZGlyPSR7U1RBR0lOR19MSUJESVJ9LGcnIFwKKwkJLWUgJ3MsbGliZXhlY2Rpcj0ke2xpYmV4ZWNkaXJ9LGxpYmV4ZWNkaXI9JHtTVEFHSU5HX0RJUl9IT1NUfSR7bGliZXhlY2Rpcn0sZycgXAorCQktZSAncyxeTElCRElSPS4qLExJQkRJUj0ke1NUQUdJTkdfTElCRElSfSxnJyBcCisJCS1lICdzLGluY2x1ZGVkaXI9JHtpbmNsdWRlZGlyfSxpbmNsdWRlZGlyPSR7U1RBR0lOR19JTkNESVJ9LGcnIFwKKwkJLWUgJ3MsXklOQ0xVREVESVI9LiosSU5DTFVERT0ke1NUQUdJTkdfSU5DRElSfSxnJyBcCisJCS1lICdzLF5DT05GSU5DTFVERURJUj0uKixDT05GSU5DTFVERT0ke1NUQUdJTkdfSU5DRElSfSxnJyBcCisJCU1ha2VmaWxlCisJIyBzYXZlIGNvcHkgb2YgaXQgbm93LCBiZWNhdXNlIGlmIHdlIGRvIGl0IGluIGRvX2luc3RhbGwgYW5kIAorCSMgdGhlbiBjYWxsIGRvX2luc3RhbGwgdHdpY2Ugd2UgZ2V0IE1ha2VmaWxlLm9yaWcgPT0gTWFrZWZpbGUuc3lzcm9vdAorCWluc3RhbGwgLW0gMDY0NCBNYWtlZmlsZSBNYWtlZmlsZS5zeXNyb290CisKKwlleHBvcnQgQ1JPU1NfQ09NUElMRT0iJHtUQVJHRVRfUFJFRklYfSIKKwlleHBvcnQgUFlUSE9OQlVJTERESVI9IiR7Qn0iCisKKwlvZV9ydW5tYWtlIEhPU1RQR0VOPSR7U1RBR0lOR19CSU5ESVJfTkFUSVZFfS9weXRob24tbmF0aXZlL3BnZW4gXAorCQlIT1NUUFlUSE9OPSR7U1RBR0lOR19CSU5ESVJfTkFUSVZFfS9weXRob24tbmF0aXZlL3B5dGhvbiBcCisJCVNUQUdJTkdfTElCRElSPSR7U1RBR0lOR19MSUJESVJ9IFwKKwkJU1RBR0lOR19JTkNESVI9JHtTVEFHSU5HX0lOQ0RJUn0gXAorCQlTVEFHSU5HX0JBU0VMSUJESVI9JHtTVEFHSU5HX0JBU0VMSUJESVJ9IFwKKwkJT1BUPSIke0NGTEFHU30iCit9CisKK2RvX2luc3RhbGwoKSB7CisJIyBtYWtlIGluc3RhbGwgbmVlZHMgdGhlIG9yaWdpbmFsIE1ha2VmaWxlLCBvciBvdGhlcndpc2UgdGhlIGluY2x1ZXMgd291bGQKKwkjIGdvIHRvICR7RH0ke1NUQUdJTkcuLi59Ly4uLgorCWluc3RhbGwgLW0gMDY0NCBNYWtlZmlsZS5vcmlnIE1ha2VmaWxlCisKKwlleHBvcnQgQ1JPU1NfQ09NUElMRT0iJHtUQVJHRVRfUFJFRklYfSIKKwlleHBvcnQgUFlUSE9OQlVJTERESVI9IiR7Qn0iCisKKwkjIEFmdGVyIHN3aXp6bGluZyB0aGUgbWFrZWZpbGUsIHdlIG5lZWQgdG8gcnVuIHRoZSBidWlsZCBhZ2Fpbi4KKwkjIGluc3RhbGwgY2FuIHJhY2Ugd2l0aCB0aGUgYnVpbGQgc28gd2UgaGF2ZSB0byBydW4gdGhpcyBmaXJzdCwgdGhlbiBpbnN0YWxsCisJb2VfcnVubWFrZSBIT1NUUEdFTj0ke1NUQUdJTkdfQklORElSX05BVElWRX0vcHl0aG9uLW5hdGl2ZS9wZ2VuIFwKKwkJSE9TVFBZVEhPTj0ke1NUQUdJTkdfQklORElSX05BVElWRX0vcHl0aG9uLW5hdGl2ZS9weXRob24gXAorCQlDUk9TU1BZVEhPTlBBVEg9JHtTVEFHSU5HX0xJQkRJUl9OQVRJVkV9L3B5dGhvbiR7UFlUSE9OX01BSk1JTn0vbGliLWR5bmxvYWQvIFwKKwkJU1RBR0lOR19MSUJESVI9JHtTVEFHSU5HX0xJQkRJUn0gXAorCQlTVEFHSU5HX0lOQ0RJUj0ke1NUQUdJTkdfSU5DRElSfSBcCisJCVNUQUdJTkdfQkFTRUxJQkRJUj0ke1NUQUdJTkdfQkFTRUxJQkRJUn0gXAorCQlERVNURElSPSR7RH0gTElCRElSPSR7bGliZGlyfQorCQorCW9lX3J1bm1ha2UgSE9TVFBHRU49JHtTVEFHSU5HX0JJTkRJUl9OQVRJVkV9L3B5dGhvbi1uYXRpdmUvcGdlbiBcCisJCUhPU1RQWVRIT049JHtTVEFHSU5HX0JJTkRJUl9OQVRJVkV9L3B5dGhvbi1uYXRpdmUvcHl0aG9uIFwKKwkJQ1JPU1NQWVRIT05QQVRIPSR7U1RBR0lOR19MSUJESVJfTkFUSVZFfS9weXRob24ke1BZVEhPTl9NQUpNSU59L2xpYi1keW5sb2FkLyBcCisJCVNUQUdJTkdfTElCRElSPSR7U1RBR0lOR19MSUJESVJ9IFwKKwkJU1RBR0lOR19JTkNESVI9JHtTVEFHSU5HX0lOQ0RJUn0gXAorCQlTVEFHSU5HX0JBU0VMSUJESVI9JHtTVEFHSU5HX0JBU0VMSUJESVJ9IFwKKwkJREVTVERJUj0ke0R9IExJQkRJUj0ke2xpYmRpcn0gaW5zdGFsbAorCisJaW5zdGFsbCAtbSAwNjQ0IE1ha2VmaWxlLnN5c3Jvb3QgJHtEfS8ke2xpYmRpcn0vcHl0aG9uJHtQWVRIT05fTUFKTUlOfS9jb25maWcvTWFrZWZpbGUKKworCWlmIFsgLWUgJHtXT1JLRElSfS9zaXRlY3VzdG9taXplLnB5IF07IHRoZW4KKwkJaW5zdGFsbCAtbSAwNjQ0ICR7V09SS0RJUn0vc2l0ZWN1c3RvbWl6ZS5weSAke0R9LyR7bGliZGlyfS9weXRob24ke1BZVEhPTl9NQUpNSU59CisJZmkKKworCW9lX211bHRpbGliX2hlYWRlciBweXRob24ke1BZVEhPTl9NQUpNSU59L3B5Y29uZmlnLmgKK30KKworZG9faW5zdGFsbF9hcHBlbmRfY2xhc3MtbmF0aXZlc2RrICgpIHsKKwljcmVhdGVfd3JhcHBlciAke0R9JHtiaW5kaXJ9L3B5dGhvbjIuNyBQWVRIT05IT01FPScke3ByZWZpeH0nIFRFUk1JTkZPX0RJUlM9JyR7c3lzY29uZmRpcn0vdGVybWluZm86L2V0Yy90ZXJtaW5mbzovdXNyL3NoYXJlL3Rlcm1pbmZvOi91c3Ivc2hhcmUvbWlzYy90ZXJtaW5mbzovbGliL3Rlcm1pbmZvJworfQorCitTU1RBVEVfU0NBTl9GSUxFUyArPSAiTWFrZWZpbGUiCitQQUNLQUdFX1BSRVBST0NFU1NfRlVOQ1MgKz0gInB5X3BhY2thZ2VfcHJlcHJvY2VzcyIKKworcHlfcGFja2FnZV9wcmVwcm9jZXNzICgpIHsKKwkjIGNvcHkgYmFjayB0aGUgb2xkIE1ha2VmaWxlIHRvIGZpeCB0YXJnZXQgcGFja2FnZQorCWluc3RhbGwgLW0gMDY0NCAke0J9L01ha2VmaWxlLm9yaWcgJHtQS0dEfS8ke2xpYmRpcn0vcHl0aG9uJHtQWVRIT05fTUFKTUlOfS9jb25maWcvTWFrZWZpbGUKKworCSMgUmVtb3ZlIHJlZmVyZW5jZXMgdG8gYnVpbGRtYWNoaW5lIHBhdGhzIGluIHRhcmdldCBNYWtlZmlsZSBhbmQgX3N5c2NvbmZpZ2RhdGEKKwlzZWQgLWkgLWUgJ3M6LS1zeXNyb290PSR7U1RBR0lOR19ESVJfVEFSR0VUfTo6ZycgLWUgczonLS13aXRoLWxpYnRvb2wtc3lzcm9vdD0ke1NUQUdJTkdfRElSX1RBUkdFVH0nOjpnIFwKKwkJJHtQS0dEfS8ke2xpYmRpcn0vcHl0aG9uJHtQWVRIT05fTUFKTUlOfS9jb25maWcvTWFrZWZpbGUgXAorCQkke1BLR0R9LyR7bGliZGlyfS9weXRob24ke1BZVEhPTl9NQUpNSU59L19zeXNjb25maWdkYXRhLnB5CisgICAgcHl0aG9uIC1tIHB5X2NvbXBpbGUgJHtQS0dEfS8ke2xpYmRpcn0vcHl0aG9uJHtQWVRIT05fTUFKTUlOfS9fc3lzY29uZmlnZGF0YS5weQorfQorCityZXF1aXJlIHB5dGhvbi0ke1BZVEhPTl9NQUpNSU59LW1hbmlmZXN0LmluYworCisjIG1hbnVhbCBkZXBlbmRlbmN5IGFkZGl0aW9ucworUlBST1ZJREVTXyR7UE59LWNvcmUgPSAiJHtQTn0iCitSUkVDT01NRU5EU18ke1BOfS1jb3JlID0gIiR7UE59LXJlYWRsaW5lIgorUlJFQ09NTUVORFNfJHtQTn0tY29yZV9hcHBlbmRfY2xhc3MtbmF0aXZlc2RrID0gIiBuYXRpdmVzZGstcHl0aG9uLW1vZHVsZXMiCitSUkVDT01NRU5EU18ke1BOfS1jcnlwdCA9ICJvcGVuc3NsIgorCisjIHBhY2thZ2UgbGlicHl0aG9uMgorUEFDS0FHRVMgPSsgImxpYiR7QlBOfTIiCitGSUxFU19saWIke0JQTn0yID0gIiR7bGliZGlyfS9saWJweXRob24qLnNvLioiCisKKyMgY2F0Y2ggYWxsIHRoZSByZXN0ICh1bnNvcnRlZCkKK1BBQ0tBR0VTICs9ICIke1BOfS1taXNjIgorRklMRVNfJHtQTn0tbWlzYyA9ICIke2xpYmRpcn0vcHl0aG9uJHtQWVRIT05fTUFKTUlOfSIKK1JERVBFTkRTXyR7UE59LW1vZHVsZXMgKz0gIiR7UE59LW1pc2MiCitSREVQRU5EU18ke1BOfS1wdGVzdCA9ICIke1BOfS1tb2R1bGVzIgorI2luaGVyaXQgcHRlc3QgYWZ0ZXIgInJlcXVpcmUgcHl0aG9uLSR7UFlUSE9OX01BSk1JTn0tbWFuaWZlc3QuaW5jIiBzbyBQQUNLQUdFUyBkb2Vzbid0IGdldCBvdmVyd3JpdHRlbgoraW5oZXJpdCBwdGVzdAorCisjIFRoaXMgbXVzdCBjb21lIGFmdGVyIGluaGVyaXQgcHRlc3QgZm9yIHRoZSBvdmVycmlkZSB0byB0YWtlIGVmZmVjdAorZG9faW5zdGFsbF9wdGVzdCgpIHsKKwljcCAke0J9L01ha2VmaWxlICR7RH0ke1BURVNUX1BBVEh9CisJc2VkIC1lIHM6TElCRElSL3B5dGhvbi9wdGVzdDoke1BURVNUX1BBVEh9OmcgXAorCSAtZSBzOkxJQkRJUjoke2xpYmRpcn06ZyBcCisJIC1pICR7RH0ke1BURVNUX1BBVEh9L3J1bi1wdGVzdAorfQorCisjIGNhdGNoIG1hbnBhZ2UKK1BBQ0tBR0VTICs9ICIke1BOfS1tYW4iCitGSUxFU18ke1BOfS1tYW4gPSAiJHtkYXRhZGlyfS9tYW4iCisKK0JCQ0xBU1NFWFRFTkQgPSAibmF0aXZlc2RrIgpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9xZW11L25hdGl2ZXNkay1xZW11LWhlbHBlcl8xLjAuYmIgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3FlbXUvbmF0aXZlc2RrLXFlbXUtaGVscGVyXzEuMC5iYgppbmRleCA1MWQxYzU5Li45NDNjYTVmIDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3FlbXUvbmF0aXZlc2RrLXFlbXUtaGVscGVyXzEuMC5iYgorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3FlbXUvbmF0aXZlc2RrLXFlbXUtaGVscGVyXzEuMC5iYgpAQCAtMSwxNSArMSwxNiBAQAogU1VNTUFSWSA9ICJRZW11IGhlbHBlciBzY3JpcHRzIgogTElDRU5TRSA9ICJHUEx2MiIKLVJERVBFTkRTXyR7UE59ID0gIm5hdGl2ZXNkay1xZW11IgorUkRFUEVORFNfJHtQTn0gPSAibmF0aXZlc2RrLXFlbXUgbmF0aXZlc2RrLXB5dGhvbjMtc3VicHJvY2VzcyBcCisgICAgICAgICAgICAgICAgICBuYXRpdmVzZGstcHl0aG9uMy1zaGVsbCBuYXRpdmVzZGstcHl0aG9uMy1mY250bCBcCisgICAgICAgICAgICAgICAgIgorCiBQUiA9ICJyOSIKIAotCiBMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly8ke1dPUktESVJ9L3R1bmN0bC5jO2VuZGxpbmU9NDttZDU9ZmYzYTA5OTk2YmM1ZmZmNmJjNWQ0ZTBiNGMyOGY5OTkgXAotICAgICAgICAgICAgICAgICAgICBmaWxlOi8vJHtDT1JFQkFTRX0vc2NyaXB0cy9ydW5xZW11O2VuZGxpbmU9MTg7bWQ1PTc3ZmJlNDQyYTg4YjFiY2RjMjljM2JhNjc3MzNiMjFiIgorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vJHtDT1JFQkFTRX0vc2NyaXB0cy9ydW5xZW11O2VuZGxpbmU9MTk7bWQ1PWE4YWQxOTA1YzcwOWEyZGVhYTA1NzYwOGViYWY3MDVhIgogCiAKIFNSQ19VUkkgPSAiZmlsZTovLyR7Q09SRUJBU0V9L3NjcmlwdHMvcnVucWVtdSBcCi0gICAgICAgICAgIGZpbGU6Ly8ke0NPUkVCQVNFfS9zY3JpcHRzL3J1bnFlbXUtaW50ZXJuYWwgXAogICAgICAgICAgICBmaWxlOi8vJHtDT1JFQkFTRX0vc2NyaXB0cy9ydW5xZW11LWFkZHB0YWJsZTJpbWFnZSBcCiAgICAgICAgICAgIGZpbGU6Ly8ke0NPUkVCQVNFfS9zY3JpcHRzL3J1bnFlbXUtZ2VuLXRhcGRldnMgXAogICAgICAgICAgICBmaWxlOi8vJHtDT1JFQkFTRX0vc2NyaXB0cy9ydW5xZW11LWlmdXAgXApAQCAtMTgsNyArMTksNiBAQAogICAgICAgICAgICBmaWxlOi8vJHtDT1JFQkFTRX0vc2NyaXB0cy9ydW5xZW11LWV4dHJhY3Qtc2RrIFwKICAgICAgICAgICAgZmlsZTovLyR7Q09SRUJBU0V9L3NjcmlwdHMvcnVucWVtdS1leHBvcnQtcm9vdGZzIFwKICAgICAgICAgICAgZmlsZTovL3R1bmN0bC5jIFwKLSAgICAgICAgICAgZmlsZTovL3JhdzJmbGFzaC5jIFwKICAgICAgICAgICAiCiAKIFMgPSAiJHtXT1JLRElSfSIKQEAgLTI3LDggKzI3LDYgQEAKIAogZG9fY29tcGlsZSgpIHsKIAkke0NDfSB0dW5jdGwuYyAtbyB0dW5jdGwKLQkke0NDfSByYXcyZmxhc2guYyAtbyByYXcyZmxhc2guc3BpdHoKLQkke0NDfSByYXcyZmxhc2guYyAtbyBmbGFzaDJyYXcuc3BpdHogLURmbGFzaDJyYXcKIH0KIAogZG9faW5zdGFsbCgpIHsKQEAgLTM2LDEyICszNCw0IEBACiAJaW5zdGFsbCAtbSAwNzU1ICR7V09SS0RJUn0ke0NPUkVCQVNFfS9zY3JpcHRzL29lLSogJHtEfSR7YmluZGlyfS8KIAlpbnN0YWxsIC1tIDA3NTUgJHtXT1JLRElSfSR7Q09SRUJBU0V9L3NjcmlwdHMvcnVucWVtdSogJHtEfSR7YmluZGlyfS8KIAlpbnN0YWxsIHR1bmN0bCAke0R9JHtiaW5kaXJ9LwotCWluc3RhbGwgcmF3MmZsYXNoLnNwaXR6ICR7RH0ke2JpbmRpcn0vCi0JaW5zdGFsbCBmbGFzaDJyYXcuc3BpdHogJHtEfSR7YmluZGlyfS8KLQlsbiAtZnMgcmF3MmZsYXNoLnNwaXR6ICR7RH0ke2JpbmRpcn0vcmF3MmZsYXNoLmFraXRhCi0JbG4gLWZzIHJhdzJmbGFzaC5zcGl0eiAke0R9JHtiaW5kaXJ9L3JhdzJmbGFzaC5ib3J6b2kKLQlsbiAtZnMgcmF3MmZsYXNoLnNwaXR6ICR7RH0ke2JpbmRpcn0vcmF3MmZsYXNoLnRlcnJpZXIKLQlsbiAtZnMgZmxhc2gycmF3LnNwaXR6ICR7RH0ke2JpbmRpcn0vZmxhc2gycmF3LmFraXRhCi0JbG4gLWZzIGZsYXNoMnJhdy5zcGl0eiAke0R9JHtiaW5kaXJ9L2ZsYXNoMnJhdy5ib3J6b2kKLQlsbiAtZnMgZmxhc2gycmF3LnNwaXR6ICR7RH0ke2JpbmRpcn0vZmxhc2gycmF3LnRlcnJpZXIKIH0KZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcWVtdS9xZW11LWhlbHBlci9yYXcyZmxhc2guYyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcWVtdS9xZW11LWhlbHBlci9yYXcyZmxhc2guYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTlmYWY2Mi4uMDAwMDAwMAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3FlbXUvcWVtdS1oZWxwZXIvcmF3MmZsYXNoLmMKKysrIC9kZXYvbnVsbApAQCAtMSwzNzAgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoYykgMjAwNiBPcGVuZWRIYW5kIEx0ZC4KLSAqCi0gKiBUaGlzIGZpbGUgaXMgbGljZW5zZWQgdW5kZXIgR05VIEdQTCB2Mi4KLSAqLwotI2luY2x1ZGUgPHN0cmluZy5oPgotI2luY2x1ZGUgPHVuaXN0ZC5oPgotI2luY2x1ZGUgPHN0ZGludC5oPgotI2luY2x1ZGUgPHN0ZGlvLmg+Ci0jaW5jbHVkZSA8c3lzL3R5cGVzLmg+Ci0jaW5jbHVkZSA8c3RkbGliLmg+Ci0KLSNkZWZpbmUgVEZSKF8pCQlfCi0jZGVmaW5lIFZFUkJPU0UKLSNkZWZpbmUgUEJBUl9MRU4JNDAKLQotI2RlZmluZSBQQVJUSVRJT05fU1RBUlQJMHgwMDcwMDAwMAotCi1zdGF0aWMgY29uc3QgaW50IGVjY19wb3M4W10gPSB7Ci0JMHgwLCAweDEsIDB4MiwKLX07Ci0KLXN0YXRpYyBjb25zdCBpbnQgZWNjX3BvczE2W10gPSB7Ci0JMHgwLCAweDEsIDB4MiwgMHgzLCAweDYsIDB4NywKLX07Ci0KLXN0YXRpYyBjb25zdCBpbnQgZWNjX3BvczY0W10gPSB7Ci0JMHgyOCwgMHgyOSwgMHgyYSwgMHgyYiwgMHgyYywgMHgyZCwgMHgyZSwgMHgyZiwKLQkweDMwLCAweDMxLCAweDMyLCAweDMzLCAweDM0LCAweDM1LCAweDM2LCAweDM3LAotCTB4MzgsIDB4MzksIDB4M2EsIDB4M2IsIDB4M2MsIDB4M2QsIDB4M2UsIDB4M2YsCi19OwotCi1zdGF0aWMgY29uc3QgaW50IGVjY19ha2l0YVtdID0gewotCTB4MDUsIDB4MDEsIDB4MDIsIDB4MDMsIDB4MDYsIDB4MDcsIDB4MTUsIDB4MTEsCi0JMHgxMiwgMHgxMywgMHgxNiwgMHgxNywgMHgyNSwgMHgyMSwgMHgyMiwgMHgyMywKLQkweDI2LCAweDI3LCAweDM1LCAweDMxLCAweDMyLCAweDMzLCAweDM2LCAweDM3LAotfTsKLQotc3RydWN0IGpmZnNfbWFya2VyX3MgewotCWludCBwb3M7Ci0JdWludDhfdCB2YWx1ZTsKLX07Ci0KLXN0YXRpYyBjb25zdCBzdHJ1Y3QgamZmc19tYXJrZXJfcyBmcmVlX3BvczhbXSA9IHsKLQl7IDB4MDMsIDB4ZmYgfSwgeyAweDA0LCAweGZmIH0sIHsgMHgwNiwgMHg4NSB9LCB7IDB4MDcsIDB4MTkgfSwKLQl7IC0xIH0sCi19OwotCi1zdGF0aWMgY29uc3Qgc3RydWN0IGpmZnNfbWFya2VyX3MgZnJlZV9wb3MxNltdID0gewotCXsgMHgwOCwgMHg4NSB9LCB7IDB4MDksIDB4MTkgfSwgeyAweDBhLCAweDAzIH0sIHsgMHgwYiwgMHgyMCB9LAotCXsgMHgwYywgMHgwOCB9LCB7IDB4MGQsIDB4MDAgfSwgeyAweDBlLCAweDAwIH0sIHsgMHgwZiwgMHgwMCB9LAotCXsgLTEgfSwKLX07Ci0KLXN0YXRpYyBjb25zdCBzdHJ1Y3QgamZmc19tYXJrZXJfcyBmcmVlX3BvczY0W10gPSB7Ci0JeyAweDAyLCAweGZmIH0sIHsgMHgwMywgMHhmZiB9LCB7IDB4MDQsIDB4ZmYgfSwgeyAweDA1LCAweGZmIH0sCi0JeyAweDA2LCAweGZmIH0sIHsgMHgwNywgMHhmZiB9LCB7IDB4MDgsIDB4ZmYgfSwgeyAweDA5LCAweGZmIH0sCi0JeyAweDBhLCAweGZmIH0sIHsgMHgwYiwgMHhmZiB9LCB7IDB4MGMsIDB4ZmYgfSwgeyAweDBkLCAweGZmIH0sCi0JeyAweDBlLCAweGZmIH0sIHsgMHgwZiwgMHhmZiB9LCB7IDB4MTAsIDB4ODUgfSwgeyAweDExLCAweDE5IH0sCi0JeyAweDEyLCAweDAzIH0sIHsgMHgxMywgMHgyMCB9LCB7IDB4MTQsIDB4MDggfSwgeyAweDE1LCAweDAwIH0sCi0JeyAweDE2LCAweDAwIH0sIHsgMHgxNywgMHgwMCB9LCB7IDB4MTgsIDB4ZmYgfSwgeyAweDE5LCAweGZmIH0sCi0JeyAweDFhLCAweGZmIH0sIHsgMHgxYiwgMHhmZiB9LCB7IDB4MWMsIDB4ZmYgfSwgeyAweDFkLCAweGZmIH0sCi0JeyAweDFlLCAweGZmIH0sIHsgMHgxZiwgMHhmZiB9LCB7IDB4MjAsIDB4ZmYgfSwgeyAweDIxLCAweGZmIH0sCi0JeyAweDIyLCAweGZmIH0sIHsgMHgyMywgMHhmZiB9LCB7IDB4MjQsIDB4ZmYgfSwgeyAweDI1LCAweGZmIH0sCi0JeyAweDI2LCAweGZmIH0sIHsgMHgyNywgMHhmZiB9LAotCXsgLTEgfSwKLX07Ci0KLXN0YXRpYyBjb25zdCBzdHJ1Y3QgamZmc19tYXJrZXJfcyBmcmVlX2FraXRhW10gPSB7Ci0JeyAweDA4LCAweDg1IH0sIHsgMHgwOSwgMHgxOSB9LCB7IDB4MGEsIDB4MDMgfSwgeyAweDBiLCAweDIwIH0sCi0JeyAweDBjLCAweDA4IH0sIHsgMHgwZCwgMHgwMCB9LCB7IDB4MGUsIDB4MDAgfSwgeyAweDBmLCAweDAwIH0sCi0JeyAweDEwLCAweGZmIH0sCi0JeyAtMSB9LAotfTsKLQotI2RlZmluZSBMRU4oYXJyYXkpCShzaXplb2YoYXJyYXkpIC8gc2l6ZW9mKCphcnJheSkpCi0KLXN0YXRpYyBjb25zdCBzdHJ1Y3QgZWNjX3N0eWxlX3MgewotCWludCBwYWdlX3NpemU7Ci0JaW50IG9vYl9zaXplOwotCWludCBlY2NieXRlczsKLQlpbnQgZWNjc2l6ZTsKLQljb25zdCBpbnQgKmVjY3BvczsKLQlpbnQgcm9tc2l6ZTsKLQljb25zdCBzdHJ1Y3QgamZmc19tYXJrZXJfcyAqZnJlZXBvczsKLX0gc3BpdHogPSB7Ci0JMHgyMDAsIDB4MTAsIDB4MTAwLCBMRU4oZWNjX3BvczE2KSwgZWNjX3BvczE2LCAweDAxMDAwMDAwLCBmcmVlX3BvczE2Ci19LCBha2l0YSA9IHsKLQkweDgwMCwgMHg0MCwgMHgxMDAsIExFTihlY2NfYWtpdGEpLCBlY2NfYWtpdGEsIDB4MDgwMDAwMDAsIGZyZWVfYWtpdGEKLX0sIGJvcnpvaSA9IHsKLQkweDgwMCwgMHg0MCwgMHgxMDAsIExFTihlY2NfYWtpdGEpLCBlY2NfYWtpdGEsIDB4MDgwMDAwMDAsIGZyZWVfYWtpdGEKLX0sIHRlcnJpZXIgPSB7Ci0JMHg4MDAsIDB4NDAsIDB4MTAwLCBMRU4oZWNjX2FraXRhKSwgZWNjX2FraXRhLCAweDA4MDAwMDAwLCBmcmVlX2FraXRhCi19OwotCi1zdHJ1Y3QgZWNjX3N0YXRlX3MgewotCWludCBjb3VudDsKLQl1aW50OF90IGNwOwotCXVpbnQ4X3QgbHBbMl07Ci0JY29uc3Qgc3RydWN0IGVjY19zdHlsZV9zICpzdHlsZTsKLX07Ci0KLSNpZm5kZWYgZmxhc2gycmF3Ci0vKgotICogUHJlLWNhbGN1bGF0ZWQgMjU2LXdheSAxIGJ5dGUgY29sdW1uIHBhcml0eS4gIFRhYmxlIGJvcnJvd2VkIGZyb20gTGludXguCi0gKi8KLXN0YXRpYyBjb25zdCB1aW50OF90IGVjY19wcmVjYWxjX3RhYmxlW10gPSB7Ci0JMHgwMCwgMHg1NSwgMHg1NiwgMHgwMywgMHg1OSwgMHgwYywgMHgwZiwgMHg1YSwKLQkweDVhLCAweDBmLCAweDBjLCAweDU5LCAweDAzLCAweDU2LCAweDU1LCAweDAwLAotCTB4NjUsIDB4MzAsIDB4MzMsIDB4NjYsIDB4M2MsIDB4NjksIDB4NmEsIDB4M2YsCi0JMHgzZiwgMHg2YSwgMHg2OSwgMHgzYywgMHg2NiwgMHgzMywgMHgzMCwgMHg2NSwKLQkweDY2LCAweDMzLCAweDMwLCAweDY1LCAweDNmLCAweDZhLCAweDY5LCAweDNjLAotCTB4M2MsIDB4NjksIDB4NmEsIDB4M2YsIDB4NjUsIDB4MzAsIDB4MzMsIDB4NjYsCi0JMHgwMywgMHg1NiwgMHg1NSwgMHgwMCwgMHg1YSwgMHgwZiwgMHgwYywgMHg1OSwKLQkweDU5LCAweDBjLCAweDBmLCAweDVhLCAweDAwLCAweDU1LCAweDU2LCAweDAzLAotCTB4NjksIDB4M2MsIDB4M2YsIDB4NmEsIDB4MzAsIDB4NjUsIDB4NjYsIDB4MzMsCi0JMHgzMywgMHg2NiwgMHg2NSwgMHgzMCwgMHg2YSwgMHgzZiwgMHgzYywgMHg2OSwKLQkweDBjLCAweDU5LCAweDVhLCAweDBmLCAweDU1LCAweDAwLCAweDAzLCAweDU2LAotCTB4NTYsIDB4MDMsIDB4MDAsIDB4NTUsIDB4MGYsIDB4NWEsIDB4NTksIDB4MGMsCi0JMHgwZiwgMHg1YSwgMHg1OSwgMHgwYywgMHg1NiwgMHgwMywgMHgwMCwgMHg1NSwKLQkweDU1LCAweDAwLCAweDAzLCAweDU2LCAweDBjLCAweDU5LCAweDVhLCAweDBmLAotCTB4NmEsIDB4M2YsIDB4M2MsIDB4NjksIDB4MzMsIDB4NjYsIDB4NjUsIDB4MzAsCi0JMHgzMCwgMHg2NSwgMHg2NiwgMHgzMywgMHg2OSwgMHgzYywgMHgzZiwgMHg2YSwKLQkweDZhLCAweDNmLCAweDNjLCAweDY5LCAweDMzLCAweDY2LCAweDY1LCAweDMwLAotCTB4MzAsIDB4NjUsIDB4NjYsIDB4MzMsIDB4NjksIDB4M2MsIDB4M2YsIDB4NmEsCi0JMHgwZiwgMHg1YSwgMHg1OSwgMHgwYywgMHg1NiwgMHgwMywgMHgwMCwgMHg1NSwKLQkweDU1LCAweDAwLCAweDAzLCAweDU2LCAweDBjLCAweDU5LCAweDVhLCAweDBmLAotCTB4MGMsIDB4NTksIDB4NWEsIDB4MGYsIDB4NTUsIDB4MDAsIDB4MDMsIDB4NTYsCi0JMHg1NiwgMHgwMywgMHgwMCwgMHg1NSwgMHgwZiwgMHg1YSwgMHg1OSwgMHgwYywKLQkweDY5LCAweDNjLCAweDNmLCAweDZhLCAweDMwLCAweDY1LCAweDY2LCAweDMzLAotCTB4MzMsIDB4NjYsIDB4NjUsIDB4MzAsIDB4NmEsIDB4M2YsIDB4M2MsIDB4NjksCi0JMHgwMywgMHg1NiwgMHg1NSwgMHgwMCwgMHg1YSwgMHgwZiwgMHgwYywgMHg1OSwKLQkweDU5LCAweDBjLCAweDBmLCAweDVhLCAweDAwLCAweDU1LCAweDU2LCAweDAzLAotCTB4NjYsIDB4MzMsIDB4MzAsIDB4NjUsIDB4M2YsIDB4NmEsIDB4NjksIDB4M2MsCi0JMHgzYywgMHg2OSwgMHg2YSwgMHgzZiwgMHg2NSwgMHgzMCwgMHgzMywgMHg2NiwKLQkweDY1LCAweDMwLCAweDMzLCAweDY2LCAweDNjLCAweDY5LCAweDZhLCAweDNmLAotCTB4M2YsIDB4NmEsIDB4NjksIDB4M2MsIDB4NjYsIDB4MzMsIDB4MzAsIDB4NjUsCi0JMHgwMCwgMHg1NSwgMHg1NiwgMHgwMywgMHg1OSwgMHgwYywgMHgwZiwgMHg1YSwKLQkweDVhLCAweDBmLCAweDBjLCAweDU5LCAweDAzLCAweDU2LCAweDU1LCAweDAwLAotfTsKLQotLyogVXBkYXRlIEVDQyBwYXJpdHkgY291bnQgKi8KLXN0YXRpYyBpbmxpbmUgdWludDhfdCBlY2NfZGlnZXN0KHN0cnVjdCBlY2Nfc3RhdGVfcyAqcywgdWludDhfdCBzYW1wbGUpIHsKLQl1aW50OF90IGlkeCA9IGVjY19wcmVjYWxjX3RhYmxlW3NhbXBsZV07Ci0KLQlzLT5jcCBePSBpZHggJiAweDNmOwotCWlmIChpZHggJiAweDQwKSB7Ci0JCXMtPmxwWzBdIF49IH4ocy0+Y291bnQgJiAweGZmKTsKLQkJcy0+bHBbMV0gXj0gcy0+Y291bnQgJiAweGZmOwotCX0KLQlzLT5jb3VudCArKzsKLQotCXJldHVybiBzYW1wbGU7Ci19Ci0KLXN0YXRpYyB2b2lkIGJ1ZmZlcl9kaWdlc3Qoc3RydWN0IGVjY19zdGF0ZV9zICplY2MsCi0JCWNvbnN0IHVpbnQ4X3QgKmJ1ZiwgdWludDhfdCAqb3V0KSB7Ci0JaW50IGksIGxwX2FbMl07Ci0KLQllY2MtPmxwWzBdID0gMHgwMDsKLQllY2MtPmxwWzFdID0gMHgwMDsKLQllY2MtPmNwID0gMHgwMDsKLQllY2MtPmNvdW50ID0gMDsKLQlmb3IgKGkgPSAwOyBpIDwgZWNjLT5zdHlsZS0+ZWNjYnl0ZXM7IGkgKyspCi0JCWVjY19kaWdlc3QoZWNjLCBidWZbaV0pOwotCi0jIGRlZmluZSBCU0hSKGJ5dGUsIGZyb20sIHRvKQkoKGVjYy0+bHBbYnl0ZV0gPj4gKGZyb20gLSB0bykpICYgKDEgPDwgdG8pKQotCWxwX2FbMF0gPQotCQlCU0hSKDAsIDQsIDApIHwgQlNIUigwLCA1LCAyKSB8Ci0JCUJTSFIoMCwgNiwgNCkgfCBCU0hSKDAsIDcsIDYpIHwKLQkJQlNIUigxLCA0LCAxKSB8IEJTSFIoMSwgNSwgMykgfAotCQlCU0hSKDEsIDYsIDUpIHwgQlNIUigxLCA3LCA3KTsKLQotIyBkZWZpbmUgQlNITChieXRlLCBmcm9tLCB0bykJKChlY2MtPmxwW2J5dGVdIDw8ICh0byAtIGZyb20pKSAmICgxIDw8IHRvKSkKLQlscF9hWzFdID0KLQkJQlNITCgwLCAwLCAwKSB8IEJTSEwoMCwgMSwgMikgfAotCQlCU0hMKDAsIDIsIDQpIHwgQlNITCgwLCAzLCA2KSB8Ci0JCUJTSEwoMSwgMCwgMSkgfCBCU0hMKDEsIDEsIDMpIHwKLQkJQlNITCgxLCAyLCA1KSB8IEJTSEwoMSwgMywgNyk7Ci0KLQlvdXRbMF0gPSB+bHBfYVsxXTsKLQlvdXRbMV0gPSB+bHBfYVswXTsKLQlvdXRbMl0gPSAofmVjYy0+Y3AgPDwgMikgfCAweDAzOwotfQotCi1zdGF0aWMgdm9pZCBqZmZzMl9mb3JtYXQoY29uc3Qgc3RydWN0IGVjY19zdGF0ZV9zICplY2MsIHVpbnQ4X3Qgb29iW10pIHsKLQljb25zdCBzdHJ1Y3QgamZmc19tYXJrZXJfcyAqYnl0ZTsKLQlmb3IgKGJ5dGUgPSBlY2MtPnN0eWxlLT5mcmVlcG9zOyBieXRlLT5wb3MgPj0gMDsgYnl0ZSArKykKLQkJb29iW2J5dGUtPnBvc10gPSBieXRlLT52YWx1ZTsKLX0KLQotc3RhdGljIHZvaWQgYnVmZmVyX2ZpbGwoY29uc3Qgc3RydWN0IGVjY19zdGF0ZV9zICplY2MsIHVpbnQ4X3QgYnVmZmVyW10sCi0JCWludCAqbGVuLCBpbnQgKnBhcnRpdGlvbiwgaW50IGNvdW50LCB1aW50OF90IGpmZnNfYnVmZmVyW10pIHsKLQlpbnQgcmV0OwotCi0Jc3dpdGNoICgqcGFydGl0aW9uKSB7Ci0JY2FzZSAwOgotCQlpZiAoY291bnQgPCBQQVJUSVRJT05fU1RBUlQpIHsKLQkJCW1lbWNweShidWZmZXIsIGpmZnNfYnVmZmVyICsgY291bnQsCi0JCQkJCWVjYy0+c3R5bGUtPmVjY2J5dGVzKTsKLQkJCSpsZW4gPSBlY2MtPnN0eWxlLT5lY2NieXRlczsKLQkJCWJyZWFrOwotCQl9Ci0JCSpwYXJ0aXRpb24gPSAxOwotCWNhc2UgMToKLQkJaWYgKGNvdW50IC0gUEFSVElUSU9OX1NUQVJUIDwgUEFSVElUSU9OX1NUQVJUKSB7Ci0JCQltZW1jcHkoYnVmZmVyLCBqZmZzX2J1ZmZlciArIGNvdW50IC0gUEFSVElUSU9OX1NUQVJULAotCQkJCQllY2MtPnN0eWxlLT5lY2NieXRlcyk7Ci0JCQkqbGVuID0gZWNjLT5zdHlsZS0+ZWNjYnl0ZXM7Ci0JCQlicmVhazsKLQkJfQotCi0JCXdoaWxlICgqbGVuIDwgZWNjLT5zdHlsZS0+ZWNjYnl0ZXMpIHsKLQkJCXJldCA9IFRGUihyZWFkKDAsIGJ1ZmZlciArICpsZW4sIDB4ODAwIC0gKmxlbikpOwotCQkJaWYgKHJldCA8PSAwKQotCQkJCWJyZWFrOwotCQkJKmxlbiArPSByZXQ7Ci0JCX0KLQotCQlpZiAoKmxlbiA9PSAwKQotCQkJKnBhcnRpdGlvbiA9IDI7Ci0JCWVsc2UgaWYgKCpsZW4gPCBlY2MtPnN0eWxlLT5lY2NieXRlcykgewotCQkJZnByaW50ZihzdGRlcnIsICJcbldhcm5pbmc6ICVpIHN0cmF5IGJ5dGVzXG4iLCAqbGVuKTsKLQkJCW1lbXNldChidWZmZXIgKyAqbGVuLCAweGZmLAotCQkJCQllY2MtPnN0eWxlLT5lY2NieXRlcyAtICpsZW4pOwotCQkJKmxlbiA9IGVjYy0+c3R5bGUtPmVjY2J5dGVzOwotCQkJYnJlYWs7Ci0JCX0gZWxzZQotCQkJYnJlYWs7Ci0JY2FzZSAyOgotCQltZW1zZXQoYnVmZmVyLCAweGZmLCBlY2MtPnN0eWxlLT5lY2NieXRlcyk7Ci0JCSpsZW4gPSBlY2MtPnN0eWxlLT5lY2NieXRlczsKLQkJYnJlYWs7Ci0JfQotfQotCi1pbnQgbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdLCBjaGFyICplbnZwW10pIHsKLQlzdHJ1Y3QgZWNjX3N0YXRlX3MgZWNjOwotCXVpbnQ4X3QgYnVmZmVyWzB4MTAwMF0sIGVjY19wYXlsb2FkWzB4NDBdLCByZWdzWzNdLCAqamZmczsKLQlpbnQgcmV0LCBsZW4sIGVjY2J5dGUsIGNvdW50LCBwYXJ0aXRpb247Ci0KLQkvKiBDaGVjayBpZiB3ZSdyZSBjYWxsZWQgYnkgInJhdzJmbGFzaC5zcGl0eiIgb3Igc2ltaWxhciAqLwotCWxlbiA9IHN0cmxlbihhcmd2WzBdKTsKLQlpZiAoIXN0cmNhc2VjbXAoYXJndlswXSArIGxlbiAtIDUsICJha2l0YSIpKQotCQllY2Muc3R5bGUgPSAmYWtpdGE7Ci0JZWxzZSBpZiAoIXN0cmNhc2VjbXAoYXJndlswXSArIGxlbiAtIDYsICJib3J6b2kiKSkKLQkJZWNjLnN0eWxlID0gJmJvcnpvaTsKLQllbHNlIGlmICghc3RyY2FzZWNtcChhcmd2WzBdICsgbGVuIC0gNywgInRlcnJpZXIiKSkKLQkJZWNjLnN0eWxlID0gJnRlcnJpZXI7Ci0JZWxzZQotCQllY2Muc3R5bGUgPSAmc3BpdHo7Ci0KLSMgaWZkZWYgVkVSQk9TRQotCWZwcmludGYoc3RkZXJyLCAiWyIpOwotIyBlbmRpZgotCi0JLyogU2tpcCBmaXJzdCAxMCBieXRlcyAqLwotCVRGUihyZWFkKDAsIGJ1ZmZlciwgMHgxMCkpOwotCi0JbGVuID0gMDsKLQlqZmZzID0gKHVpbnQ4X3QgKikgbWFsbG9jKFBBUlRJVElPTl9TVEFSVCk7Ci0Jd2hpbGUgKGxlbiA8IFBBUlRJVElPTl9TVEFSVCkgewotCQlyZXQgPSBURlIocmVhZCgwLCBqZmZzICsgbGVuLCBQQVJUSVRJT05fU1RBUlQgLSBsZW4pKTsKLQkJaWYgKHJldCA8PSAwKQotCQkJYnJlYWs7Ci0JCWxlbiArPSByZXQ7Ci0JfQotCi0JLyogQ29udmVydCBkYXRhIGZyb20gc3RkaW4gKi8KLQlwYXJ0aXRpb24gPSBsZW4gPSBlY2NieXRlID0gY291bnQgPSAwOwotCW1lbXNldChlY2NfcGF5bG9hZCwgMHhmZiwgZWNjLnN0eWxlLT5vb2Jfc2l6ZSk7Ci0JamZmczJfZm9ybWF0KCZlY2MsIGVjY19wYXlsb2FkKTsKLQl3aGlsZSAoY291bnQgPCBlY2Muc3R5bGUtPnJvbXNpemUpIHsKLQkJYnVmZmVyX2ZpbGwoJmVjYywgYnVmZmVyLCAmbGVuLCAmcGFydGl0aW9uLCBjb3VudCwgamZmcyk7Ci0JCWJ1ZmZlcl9kaWdlc3QoJmVjYywgYnVmZmVyLCByZWdzKTsKLQotCQllY2NfcGF5bG9hZFtlY2Muc3R5bGUtPmVjY3Bvc1tlY2NieXRlICsrXV0gPSByZWdzWzBdOwotCQllY2NfcGF5bG9hZFtlY2Muc3R5bGUtPmVjY3Bvc1tlY2NieXRlICsrXV0gPSByZWdzWzFdOwotCQllY2NfcGF5bG9hZFtlY2Muc3R5bGUtPmVjY3Bvc1tlY2NieXRlICsrXV0gPSByZWdzWzJdOwotCi0JCVRGUih3cml0ZSgxLCBidWZmZXIsIGVjYy5zdHlsZS0+ZWNjYnl0ZXMpKTsKLQkJY291bnQgKz0gZWNjLnN0eWxlLT5lY2NieXRlczsKLQkJbGVuIC09IGVjYy5zdHlsZS0+ZWNjYnl0ZXM7Ci0JCW1lbW1vdmUoYnVmZmVyLCBidWZmZXIgKyBlY2Muc3R5bGUtPmVjY2J5dGVzLCBsZW4pOwotCi0JCWlmIChlY2NieXRlID49IGVjYy5zdHlsZS0+ZWNjc2l6ZSkgewotCQkJVEZSKHdyaXRlKDEsIGVjY19wYXlsb2FkLCBlY2Muc3R5bGUtPm9vYl9zaXplKSk7Ci0JCQllY2NieXRlID0gMDsKLQkJCW1lbXNldChlY2NfcGF5bG9hZCwgMHhmZiwgZWNjLnN0eWxlLT5vb2Jfc2l6ZSk7Ci0JCQlpZiAocGFydGl0aW9uIDwgMikKLQkJCQlqZmZzMl9mb3JtYXQoJmVjYywgZWNjX3BheWxvYWQpOwotCQl9Ci0KLSMgaWZkZWYgVkVSQk9TRQotCQlpZiAoY291bnQgKiBQQkFSX0xFTiAvIGVjYy5zdHlsZS0+cm9tc2l6ZSA+Ci0JCQkJKGNvdW50IC0gZWNjLnN0eWxlLT5lY2NieXRlcykgKgotCQkJCVBCQVJfTEVOIC8gZWNjLnN0eWxlLT5yb21zaXplKQotCQkJZnByaW50ZihzdGRlcnIsICIjIik7Ci0jIGVuZGlmCi0JfQotCi0jIGlmZGVmIFZFUkJPU0UKLQlmcHJpbnRmKHN0ZGVyciwgIl1cbiIpOwotIyBlbmRpZgotCWZyZWUoamZmcyk7Ci0JcmV0dXJuIDA7Ci19Ci0jZWxzZQotaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSwgY2hhciAqZW52cFtdKSB7Ci0Jc3RydWN0IGVjY19zdGF0ZV9zIGVjYzsKLQl1aW50OF90IGJ1ZmZlclsweDEwMDBdOwotCWludCByZXQsIGxlbiwgY291bnQ7Ci0KLQkvKiBDaGVjayBpZiB3ZSdyZSBjYWxsZWQgYnkgImZsYXNoMnJhdy5zcGl0eiIgb3Igc2ltaWxhciAqLwotCWxlbiA9IHN0cmxlbihhcmd2WzBdKTsKLQlpZiAoIXN0cmNhc2VjbXAoYXJndlswXSArIGxlbiAtIDUsICJha2l0YSIpKQotCQllY2Muc3R5bGUgPSAmYWtpdGE7Ci0JZWxzZSBpZiAoIXN0cmNhc2VjbXAoYXJndlswXSArIGxlbiAtIDYsICJib3J6b2kiKSkKLQkJZWNjLnN0eWxlID0gJmJvcnpvaTsKLQllbHNlIGlmICghc3RyY2FzZWNtcChhcmd2WzBdICsgbGVuIC0gNywgInRlcnJpZXIiKSkKLQkJZWNjLnN0eWxlID0gJnRlcnJpZXI7Ci0JZWxzZQotCQllY2Muc3R5bGUgPSAmc3BpdHo7Ci0KLSMgaWZkZWYgVkVSQk9TRQotCWZwcmludGYoc3RkZXJyLCAiWyIpOwotIyBlbmRpZgotCi0JLyogQ29udmVydCBkYXRhIGZyb20gc3RkaW4gKi8KLQljb3VudCA9IDA7Ci0Jd2hpbGUgKGNvdW50IDwgZWNjLnN0eWxlLT5yb21zaXplKSB7Ci0JCWxlbiA9IDA7Ci0JCXdoaWxlIChsZW4gPCBlY2Muc3R5bGUtPnBhZ2Vfc2l6ZSkgewotCQkJcmV0ID0gVEZSKHJlYWQoMCwgYnVmZmVyICsgbGVuLAotCQkJCQkJZWNjLnN0eWxlLT5wYWdlX3NpemUgLSBsZW4pKTsKLQkJCWlmIChyZXQgPD0gMCkKLQkJCQlicmVhazsKLQkJCWxlbiArPSByZXQ7Ci0JCX0KLQkJaWYgKGxlbiA9PSAwKQotCQkJYnJlYWs7Ci0JCWlmIChsZW4gPCBlY2Muc3R5bGUtPnBhZ2Vfc2l6ZSkgewotCQkJZnByaW50ZihzdGRlcnIsICJcbldhcm5pbmc6ICVpIHN0cmF5IGJ5dGVzXG4iLCBsZW4pOwotCQl9Ci0KLQkJVEZSKHdyaXRlKDEsIGJ1ZmZlciwgZWNjLnN0eWxlLT5wYWdlX3NpemUpKTsKLQotCQljb3VudCArPSBsZW47Ci0JCWxlbiA9IDA7Ci0JCXdoaWxlIChsZW4gPCBlY2Muc3R5bGUtPm9vYl9zaXplKSB7Ci0JCQlyZXQgPSBURlIocmVhZCgwLCBidWZmZXIsIGVjYy5zdHlsZS0+b29iX3NpemUgLSBsZW4pKTsKLQkJCWlmIChyZXQgPD0gMCkKLQkJCQlicmVhazsKLQkJCWxlbiArPSByZXQ7Ci0JCX0KLQotIyBpZmRlZiBWRVJCT1NFCi0JCWlmIChjb3VudCAqIFBCQVJfTEVOIC8gZWNjLnN0eWxlLT5yb21zaXplID4KLQkJCQkoY291bnQgLSBlY2Muc3R5bGUtPnBhZ2Vfc2l6ZSkgKgotCQkJCVBCQVJfTEVOIC8gZWNjLnN0eWxlLT5yb21zaXplKQotCQkJZnByaW50ZihzdGRlcnIsICIjIik7Ci0jIGVuZGlmCi0JfQotCi0jIGlmZGVmIFZFUkJPU0UKLQlmcHJpbnRmKHN0ZGVyciwgIl1cbiIpOwotIyBlbmRpZgotCXJldHVybiAwOwotfQotI2VuZGlmCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3FlbXUvcWVtdS5pbmMgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3FlbXUvcWVtdS5pbmMKaW5kZXggMjY5Yzg5OC4uYjQ2ZTdmNyAxMDA2NDQKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9xZW11L3FlbXUuaW5jCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcWVtdS9xZW11LmluYwpAQCAtMiw3ICsyLDcgQEAKIEhPTUVQQUdFID0gImh0dHA6Ly9xZW11Lm9yZyIKIExJQ0VOU0UgPSAiR1BMdjIgJiBMR1BMdjIuMSIKIERFUEVORFMgPSAiZ2xpYi0yLjAgemxpYiBwaXhtYW4iCi1SREVQRU5EU18ke1BOfV9jbGFzcy10YXJnZXQgKz0gImJhc2ggcHl0aG9uIgorUkRFUEVORFNfJHtQTn1fY2xhc3MtdGFyZ2V0ICs9ICJiYXNoIgogUkRFUEVORFNfJHtQTn0tcHRlc3QgPSAiYmFzaCBtYWtlIgogCiByZXF1aXJlIHFlbXUtdGFyZ2V0cy5pbmMKQEAgLTIxLDYgKzIxLDcgQEAKICAgICBmaWxlOi8vd2Fjb20ucGF0Y2ggXAogICAgIGZpbGU6Ly9hZGQtcHRlc3QtaW4tbWFrZWZpbGUucGF0Y2ggXAogICAgIGZpbGU6Ly9ydW4tcHRlc3QgXAorICAgIGZpbGU6Ly8wMDAxLXRhcmdldC1taXBzLWFkZC0yNEtFYy1DUFUtZGVmaW5pdGlvbi5wYXRjaCBcCiAgICAgIgogCiBTUkNfVVJJX2FwcGVuZF9jbGFzcy1uYXRpdmUgPSAiXApAQCAtMzAsOCArMzEsMTIgQEAKIAogRVhUUkFfT0VDT05GICs9ICItLXRhcmdldC1saXN0PSR7QGdldF9xZW11X3RhcmdldF9saXN0KGQpfSAtLWRpc2FibGUtd2Vycm9yICAtLWRpc2FibGUtYmx1ZXogLS1kaXNhYmxlLWxpYmlzY3NpIC0td2l0aC1zeXN0ZW0tcGl4bWFuIC0tZXh0cmEtY2ZsYWdzPScke0NGTEFHU30nIgogCi1FWFRSQV9PRUNPTkZfY2xhc3MtbmF0aXZlc2RrID0gIi0tdGFyZ2V0LWxpc3Q9JHtAZ2V0X3FlbXVfdGFyZ2V0X2xpc3QoZCl9IC0tZGlzYWJsZS13ZXJyb3IgXAotCQkJCSIKK0VYVFJBX09FQ09ORl9jbGFzcy1uYXRpdmVzZGsgPSAiLS10YXJnZXQtbGlzdD0ke0BnZXRfcWVtdV90YXJnZXRfbGlzdChkKX0gLS1kaXNhYmxlLXdlcnJvciIKKworRVhUUkFfT0VNQUtFX2FwcGVuZF9jbGFzcy1uYXRpdmUgPSAiIExEPScke0xEfScgQVI9JyR7QVJ9JyBPQkpDT1BZPScke09CSkNPUFl9JyBMREZMQUdTPScke0xERkxBR1N9JyIKKworTERGTEFHU19hcHBlbmRfY2xhc3MtbmF0aXZlID0gIiAtZnVzZS1sZD1iZmQiCisKIGV4cG9ydCBMSUJUT09MPSIke0hPU1RfU1lTfS1saWJ0b29sIgogCiBkb19jb25maWd1cmVfcHJlcGVuZF9jbGFzcy1uYXRpdmUoKSB7CkBAIC0zOSwxMyArNDQsMTIgQEAKIAlCSE9TVF9QS0dDT05GSUdfUEFUSD0kKFBBVEg9L3Vzci9iaW46L2JpbiBwa2ctY29uZmlnIC0tdmFyaWFibGUgcGNfcGF0aCBwa2ctY29uZmlnIHx8IGVjaG8gIiIpCiAJaWYgWyAhIC16ICIkQkhPU1RfUEtHQ09ORklHX1BBVEgiIF07IHRoZW4KIAkJZXhwb3J0IFBLR19DT05GSUdfUEFUSD0kUEtHX0NPTkZJR19QQVRIOiRCSE9TVF9QS0dDT05GSUdfUEFUSAotCQkjIGxpbmsgd2l0aCBzeXN0ZW0gZGJ1cyBvbiBVYnVudHUgMTUuMTAKLQkJIyBGSVhNRTogcmVtb3ZlIGJlbG93IDQgbGluZXMgd2hlbiBvZSBkYnVzIGlzIHVwZ3JhZGVkCi0JCWlmIFsgLXIgL2V0Yy9sc2ItcmVsZWFzZSAtYSAiJChsc2JfcmVsZWFzZSAtaXMpJChsc2JfcmVsZWFzZSAtcnMpIiA9ICJVYnVudHUxNS4xMCIgXSA7IHRoZW4KLQkJCWxpYnM9JChQS0dfQ09ORklHX0FMTE9XX1NZU1RFTV9MSUJTPTEgUEtHX0NPTkZJR19QQVRIPSRCSE9TVF9QS0dDT05GSUdfUEFUSCBQQVRIPS91c3IvYmluOi9iaW4gcGtnLWNvbmZpZyAtLWxpYnMgZGJ1cy0xIHx8IGVjaG8gIiIpCi0JCQlbIC1uICIkbGlicyIgXSAmJiBleHBvcnQgTERGTEFHUz0iJGxpYnMgJExERkxBR1MiCi0JCWZpCiAJZmkKKworCSMgQWx0ZXIgdGFyZ2V0IG1ha2VmaWxlcyB0byBhY2NlcHQgQ0ZMQUdTIHNldCB2aWEgZW52CisJc2VkIC1pIC1yIFwKKwkJLWUgJ3MvXihDfE9QX0N8SEVMUEVSX0MpRkxBR1M9L1wxRkxBR1MrPS8nIFwKKwkJIiR7U30iL01ha2VmaWxlICIke1N9Ii9NYWtlZmlsZS50YXJnZXQKIH0KIAogS1ZNRU5BQkxFID0gIi0tZW5hYmxlLWt2bSIKQEAgLTcyLDcgKzc2LDcgQEAKIAljcCAtckwgJHtCfS90ZXN0cyAke0R9JHtQVEVTVF9QQVRIfQogCWZpbmQgJHtEfSR7UFRFU1RfUEFUSH0vdGVzdHMgLXR5cGUgZiAtbmFtZSAiKi5bU3NoY29kXSIgfCB4YXJncyAtaSBybSAtcmYge30KIAotCWNwICR7U30vdGVzdHMvTWFrZWZpbGUgJHtEfSR7UFRFU1RfUEFUSH0vdGVzdHMKKwljcCAke1N9L3Rlc3RzL01ha2VmaWxlLmluY2x1ZGUgJHtEfSR7UFRFU1RfUEFUSH0vdGVzdHMKIH0KIAogZG9faW5zdGFsbCAoKSB7CkBAIC0xMDMsOSArMTA3LDggQEAKIAkiCiBQQUNLQUdFQ09ORklHX2NsYXNzLW5hdGl2ZSA/Pz0gImZkdCBhbHNhIHV1aWQiCiBQQUNLQUdFQ09ORklHX2NsYXNzLW5hdGl2ZXNkayA/Pz0gImZkdCBzZGwiCi1OQVRJVkVERVBTID0gIiIKLU5BVElWRURFUFNfY2xhc3MtbmF0aXZlID0gIiR7QGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCAneDExJywgJ2xpYnhleHQtbmF0aXZlJywgJycsZCl9IgotUEFDS0FHRUNPTkZJR1tzZGxdID0gIi0tZW5hYmxlLXNkbCwtLWRpc2FibGUtc2RsLGxpYnNkbCAke05BVElWRURFUFN9LCIKKworUEFDS0FHRUNPTkZJR1tzZGxdID0gIi0tZW5hYmxlLXNkbCwtLWRpc2FibGUtc2RsLGxpYnNkbCIKIFBBQ0tBR0VDT05GSUdbdmlydGZzXSA9ICItLWVuYWJsZS12aXJ0ZnMgLS1lbmFibGUtYXR0ciwtLWRpc2FibGUtdmlydGZzLGxpYmNhcCBhdHRyLCIKIFBBQ0tBR0VDT05GSUdbYWlvXSA9ICItLWVuYWJsZS1saW51eC1haW8sLS1kaXNhYmxlLWxpbnV4LWFpbyxsaWJhaW8sIgogUEFDS0FHRUNPTkZJR1t4ZnNdID0gIi0tZW5hYmxlLXhmc2N0bCwtLWRpc2FibGUteGZzY3RsLHhmc3Byb2dzLCIKQEAgLTExNyw3ICsxMjAsNyBAQAogUEFDS0FHRUNPTkZJR1tuc3NdID0gIi0tZW5hYmxlLXNtYXJ0Y2FyZCwtLWRpc2FibGUtc21hcnRjYXJkLG5zcywiCiBQQUNLQUdFQ09ORklHW3V1aWRdID0gIi0tZW5hYmxlLXV1aWQsLS1kaXNhYmxlLXV1aWQsdXRpbC1saW51eCwiCiBQQUNLQUdFQ09ORklHW2N1cnNlc10gPSAiLS1lbmFibGUtY3Vyc2VzLC0tZGlzYWJsZS1jdXJzZXMsbmN1cnNlcywiCi1QQUNLQUdFQ09ORklHW2d0aytdID0gIi0tZW5hYmxlLWd0ayAtLWVuYWJsZS12dGUsLS1kaXNhYmxlLWd0ayAtLWRpc2FibGUtdnRlLGd0aysgbGlidnRlLCIKK1BBQ0tBR0VDT05GSUdbZ3RrK10gPSAiLS1lbmFibGUtZ3RrIC0td2l0aC1ndGthYmk9My4wIC0tZW5hYmxlLXZ0ZSwtLWRpc2FibGUtZ3RrIC0tZGlzYWJsZS12dGUsZ3RrKzMgdnRlIgogUEFDS0FHRUNPTkZJR1tsaWJjYXAtbmddID0gIi0tZW5hYmxlLWNhcC1uZywtLWRpc2FibGUtY2FwLW5nLGxpYmNhcC1uZywiCiBQQUNLQUdFQ09ORklHW3NzaDJdID0gIi0tZW5hYmxlLWxpYnNzaDIsLS1kaXNhYmxlLWxpYnNzaDIsbGlic3NoMiwiCiBQQUNLQUdFQ09ORklHW2djcnlwdF0gPSAiLS1lbmFibGUtZ2NyeXB0LC0tZGlzYWJsZS1nY3J5cHQsZ2NyeXB0LCIKQEAgLTEyOSw2ICsxMzIsNyBAQAogUEFDS0FHRUNPTkZJR1tsem9dID0gIi0tZW5hYmxlLWx6bywtLWRpc2FibGUtbHpvLGx6byIKIFBBQ0tBR0VDT05GSUdbbnVtYV0gPSAiLS1lbmFibGUtbnVtYSwtLWRpc2FibGUtbnVtYSxudW1hY3RsIgogUEFDS0FHRUNPTkZJR1tnbnV0bHNdID0gIi0tZW5hYmxlLWdudXRscywtLWRpc2FibGUtZ251dGxzLGdudXRscyIKK1BBQ0tBR0VDT05GSUdbYnppcDJdID0gIi0tZW5hYmxlLWJ6aXAyLC0tZGlzYWJsZS1iemlwMixiemlwMiIKIAogRVhUUkFfT0VDT05GICs9ICIke0BiYi51dGlscy5jb250YWlucygnUEFDS0FHRUNPTkZJRycsICdhbHNhJywgJy0tYXVkaW8tZHJ2LWxpc3Q9b3NzLGFsc2EnLCAnJywgZCl9IgogCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3FlbXUvcWVtdS8wMDAxLXRhcmdldC1taXBzLWFkZC0yNEtFYy1DUFUtZGVmaW5pdGlvbi5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcWVtdS9xZW11LzAwMDEtdGFyZ2V0LW1pcHMtYWRkLTI0S0VjLUNQVS1kZWZpbml0aW9uLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM0ZGJlZTcKLS0tIC9kZXYvbnVsbAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3FlbXUvcWVtdS8wMDAxLXRhcmdldC1taXBzLWFkZC0yNEtFYy1DUFUtZGVmaW5pdGlvbi5wYXRjaApAQCAtMCwwICsxLDU0IEBACitGcm9tIDkyNmJjMTk0ZjkxOGQ0NmJkOTM1NTdiMTVkYTgxNTNiNmE5NGExZDUgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiA9P1VURi04P3E/QW5kcj1DMz1BOT0yMERyYXN6aWs/PSA8Z2l0QGFuZHJlZC5uZXQ+CitEYXRlOiBNb24sIDI1IEp1bCAyMDE2IDIzOjU4OjIyICswMTAwCitTdWJqZWN0OiBbUEFUQ0hdIHRhcmdldC1taXBzOiBhZGQgMjRLRWMgQ1BVIGRlZmluaXRpb24KK01JTUUtVmVyc2lvbjogMS4wCitDb250ZW50LVR5cGU6IHRleHQvcGxhaW47IGNoYXJzZXQ9VVRGLTgKK0NvbnRlbnQtVHJhbnNmZXItRW5jb2Rpbmc6IDhiaXQKKworRGVmaW5lIGEgbmV3IENQVSBkZWZpbml0aW9uIHN1cHBvcnRpbmcgMjRLRWMgY29yZXMsIHNpbWlsYXIgdG8KK3RoZSBleGlzdGluZyAyNEtjLCBidXQgd2l0aCBhZGRlZCBzdXBwb3J0IGZvciBEU1AgaW5zdHJ1Y3Rpb25zCithbmQgTUlQUzE2ZSAoYW5kIHdpdGhvdXQgRlBVKS4KKworU2lnbmVkLW9mZi1ieTogQW5kcsOpIERyYXN6aWsgPGdpdEBhbmRyZWQubmV0PgorLS0tCitVcHN0cmVhbS1TdGF0dXM6IFN1Ym1pdHRlZCBbaHR0cDovL2xpc3RzLm5vbmdudS5vcmcvYXJjaGl2ZS9odG1sL3FlbXUtZGV2ZWwvMjAxNi0wNy9tc2cwNTc3OC5odG1sXQorIHRhcmdldC1taXBzL3RyYW5zbGF0ZV9pbml0LmMgfCAyMiArKysrKysrKysrKysrKysrKysrKysrCisgMSBmaWxlIGNoYW5nZWQsIDIyIGluc2VydGlvbnMoKykKKworZGlmZiAtLWdpdCBhL3RhcmdldC1taXBzL3RyYW5zbGF0ZV9pbml0LmMgYi90YXJnZXQtbWlwcy90cmFuc2xhdGVfaW5pdC5jCitpbmRleCAzOWVkNWM0Li42YWUyM2U0IDEwMDY0NAorLS0tIGEvdGFyZ2V0LW1pcHMvdHJhbnNsYXRlX2luaXQuYworKysrIGIvdGFyZ2V0LW1pcHMvdHJhbnNsYXRlX2luaXQuYworQEAgLTI1Niw2ICsyNTYsMjggQEAgc3RhdGljIGNvbnN0IG1pcHNfZGVmX3QgbWlwc19kZWZzW10gPQorICAgICAgICAgLm1tdV90eXBlID0gTU1VX1RZUEVfUjQwMDAsCisgICAgIH0sCisgICAgIHsKKysgICAgICAgIC5uYW1lID0gIjI0S0VjIiwKKysgICAgICAgIC5DUDBfUFJpZCA9IDB4MDAwMTk2MDAsCisrICAgICAgICAuQ1AwX0NvbmZpZzAgPSBNSVBTX0NPTkZJRzAgfCAoMHgxIDw8IENQMEMwX0FSKSB8CisrICAgICAgICAgICAgICAgICAgICAgICAoTU1VX1RZUEVfUjQwMDAgPDwgQ1AwQzBfTVQpLAorKyAgICAgICAgLkNQMF9Db25maWcxID0gTUlQU19DT05GSUcxIHwgKDE1IDw8IENQMEMxX01NVSkgfAorKyAgICAgICAgICAgICAgICAgICAgICAgKDAgPDwgQ1AwQzFfSVMpIHwgKDMgPDwgQ1AwQzFfSUwpIHwgKDEgPDwgQ1AwQzFfSUEpIHwKKysgICAgICAgICAgICAgICAgICAgICAgICgwIDw8IENQMEMxX0RTKSB8ICgzIDw8IENQMEMxX0RMKSB8ICgxIDw8IENQMEMxX0RBKSB8CisrICAgICAgICAgICAgICAgICAgICAgICAoMSA8PCBDUDBDMV9DQSksCisrICAgICAgICAuQ1AwX0NvbmZpZzIgPSBNSVBTX0NPTkZJRzIsCisrICAgICAgICAuQ1AwX0NvbmZpZzMgPSBNSVBTX0NPTkZJRzMgfCAoMSA8PCBDUDBDM19EU1BQKSB8ICgwIDw8IENQMEMzX1ZJbnQpLAorKyAgICAgICAgLkNQMF9MTEFkZHJfcndfYml0bWFzayA9IDAsCisrICAgICAgICAuQ1AwX0xMQWRkcl9zaGlmdCA9IDQsCisrICAgICAgICAuU1lOQ0lfU3RlcCA9IDMyLAorKyAgICAgICAgLkNDUmVzID0gMiwKKysgICAgICAgIC8qIHdlIGhhdmUgYSBEU1AsIGJ1dCBubyBGUFUgKi8KKysgICAgICAgIC5DUDBfU3RhdHVzX3J3X2JpdG1hc2sgPSAweDEzNzhGRjFGLAorKyAgICAgICAgLlNFR0JJVFMgPSAzMiwKKysgICAgICAgIC5QQUJJVFMgPSAzMiwKKysgICAgICAgIC5pbnNuX2ZsYWdzID0gQ1BVX01JUFMzMlIyIHwgQVNFX01JUFMxNiB8IEFTRV9EU1AsCisrICAgICAgICAubW11X3R5cGUgPSBNTVVfVFlQRV9SNDAwMCwKKysgICAgfSwKKysgICAgeworICAgICAgICAgLm5hbWUgPSAiMjRLZiIsCisgICAgICAgICAuQ1AwX1BSaWQgPSAweDAwMDE5MzAwLAorICAgICAgICAgLkNQMF9Db25maWcwID0gTUlQU19DT05GSUcwIHwgKDB4MSA8PCBDUDBDMF9BUikgfAorLS0gCisyLjguMQorCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3FlbXUvcWVtdS9DVkUtMjAxNi0xNTY4LnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9xZW11L3FlbXUvQ1ZFLTIwMTYtMTU2OC5wYXRjaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTZmZDM0Ni4uMDAwMDAwMAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3FlbXUvcWVtdS9DVkUtMjAxNi0xNTY4LnBhdGNoCisrKyAvZGV2L251bGwKQEAgLTEsNDYgKzAsMCBAQAotRnJvbSA0YWIwMzU5YThhZTE4MmE3YWM1Yzk5NjA5NjY3MjczMTY3NzAzZmFiIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQotRnJvbTogUHJhc2FkIEogUGFuZGl0IDxwanBAZmVkb3JhcHJvamVjdC5vcmc+Ci1EYXRlOiBNb24sIDExIEphbiAyMDE2IDE0OjEwOjQyIC0wNTAwCi1TdWJqZWN0OiBbUEFUQ0hdIGlkZTogYWhjaTogcmVzZXQgbmNxIG9iamVjdCB0byB1bnVzZWQgb24gZXJyb3IKLQotV2hlbiBwcm9jZXNzaW5nIE5DUSBjb21tYW5kcywgQUhDSSBkZXZpY2UgZW11bGF0aW9uIHByZXBhcmVzIGEKLU5DUSB0cmFuc2ZlciBvYmplY3Q7IFRvIHdoaWNoIGFuIGFpbyBjb250cm9sIGJsb2NrKGFpb2NiKSBvYmplY3QKLWlzIGFzc2lnbmVkIGluICdleGVjdXRlX25jcV9jb21tYW5kJy4gSW4gY2FzZSwgd2hlbiB0aGUgTkNRCi1jb21tYW5kIGlzIGludmFsaWQsIHRoZSAnYWlvY2InIG9iamVjdCBpcyBub3QgYXNzaWduZWQsIGFuZCBOQ1EKLXRyYW5zZmVyIG9iamVjdCBpcyBsZWZ0IGFzICd1c2VkJy4gVGhpcyBsZWFkcyB0byBhIHVzZSBhZnRlcgotZnJlZSBraW5kIG9mIGVycm9yIGluICdiZHJ2X2Fpb19jYW5jZWxfYXN5bmMnIHZpYSAnYWhjaV9yZXNldF9wb3J0Jy4KLVJlc2V0IE5DUSB0cmFuc2ZlciBvYmplY3QgdG8gJ3VudXNlZCcgdG8gYXZvaWQgaXQuCi0KLVtNYWludGFpbmVyIGVkaXQ6IHMvQUNISS9BSENJLyBpbiB0aGUgY29tbWl0IG1lc3NhZ2UuIC0tanNdCi0KLVJlcG9ydGVkLWJ5OiBRaW5naGFvIFRhbmcgPGx1b2RhbG9uZ2RlQGdtYWlsLmNvbT4KLVNpZ25lZC1vZmYtYnk6IFByYXNhZCBKIFBhbmRpdCA8cGpwQGZlZG9yYXByb2plY3Qub3JnPgotUmV2aWV3ZWQtYnk6IEpvaG4gU25vdyA8anNub3dAcmVkaGF0LmNvbT4KLU1lc3NhZ2UtaWQ6IDE0NTIyODI1MTEtNDExNi0xLWdpdC1zZW5kLWVtYWlsLXBwYW5kaXRAcmVkaGF0LmNvbQotU2lnbmVkLW9mZi1ieTogSm9obiBTbm93IDxqc25vd0ByZWRoYXQuY29tPgotCi1VcHN0cmVhbS1TdGF0dXM6IEJhY2twb3J0Ci0KLWh0dHA6Ly9naXQucWVtdS5vcmcvP3A9cWVtdS5naXQ7YT1jb21taXQ7aD00YWIwMzU5YThhZTE4MmE3YWM1Yzk5NjA5NjY3MjczMTY3NzAzZmFiCi0KLUNWRTogQ1ZFLTIwMTYtMTU2OAotW1lvY3RvICMgOTAxM10KLQotU2lnbmVkLW9mZi1ieTogQXJtaW4gS3VzdGVyIDxha3VzdGVyQG12aXN0YS5jb20+Ci0KLS0tLQotIGh3L2lkZS9haGNpLmMgfCAxICsKLSAxIGZpbGUgY2hhbmdlZCwgMSBpbnNlcnRpb24oKykKLQotSW5kZXg6IHFlbXUtMi41LjAvaHcvaWRlL2FoY2kuYwotPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0tIHFlbXUtMi41LjAub3JpZy9ody9pZGUvYWhjaS5jCi0rKysgcWVtdS0yLjUuMC9ody9pZGUvYWhjaS5jCi1AQCAtOTEwLDYgKzkxMCw3IEBAIHN0YXRpYyB2b2lkIG5jcV9lcnIoTkNRVHJhbnNmZXJTdGF0ZSAqbmMKLSAgICAgaWRlX3N0YXRlLT5lcnJvciA9IEFCUlRfRVJSOwotICAgICBpZGVfc3RhdGUtPnN0YXR1cyA9IFJFQURZX1NUQVQgfCBFUlJfU1RBVDsKLSAgICAgbmNxX3Rmcy0+ZHJpdmUtPnBvcnRfcmVncy5zY3JfZXJyIHw9ICgxIDw8IG5jcV90ZnMtPnRhZyk7Ci0rICAgIG5jcV90ZnMtPnVzZWQgPSAwOwotIH0KLSAKLSBzdGF0aWMgdm9pZCBuY3FfZmluaXNoKE5DUVRyYW5zZmVyU3RhdGUgKm5jcV90ZnMpCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3FlbXUvcWVtdS9DVkUtMjAxNi0yMTk3LnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9xZW11L3FlbXUvQ1ZFLTIwMTYtMjE5Ny5wYXRjaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTQ2NDM1Yy4uMDAwMDAwMAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3FlbXUvcWVtdS9DVkUtMjAxNi0yMTk3LnBhdGNoCisrKyAvZGV2L251bGwKQEAgLTEsNTkgKzAsMCBAQAotRnJvbTogUHJhc2FkIEogUGFuZGl0IDxhZGRyZXNzQGhpZGRlbj4KLQotV2hlbiBJREUgQUhDSSBlbXVsYXRpb24gdXNlcyBGcmFtZSBJbmZvcm1hdGlvbiBTdHJ1Y3R1cmVzKEZJUykKLWVuZ2luZSBmb3IgZGF0YSB0cmFuc2ZlciwgdGhlIG1hcHBlZCBGSVMgYnVmZmVyIGFkZHJlc3MgaXMgc3RvcmVkCi1pbiBhIHN0YXRpYyAnYm91bmNlLmJ1ZmZlcicuIFdoZW4gYSByZXF1ZXN0IGlzIG1hZGUgdG8gbWFwIGFub3RoZXIKLW1lbW9yeSByZWdpb24sIGFkZHJlc3Nfc3BhY2VfbWFwKCkgcmV0dXJucyBOVUxMIGJlY2F1c2UKLSdib3VuY2UuYnVmZmVyJyBpcyBpbl91c2UuIEl0IGxlYWRzIHRvIGEgbnVsbCBwb2ludGVyIGRlcmVmZXJlbmNlCi1lcnJvciB3aGlsZSBkb2luZyAnZG1hX21lbW9yeV91bm1hcCcuIEFkZCBhIGNoZWNrIHRvIGF2b2lkIGl0LgotCi1SZXBvcnRlZC1ieTogWnVvemhpIGZ6eiA8YWRkcmVzc0BoaWRkZW4+Ci1TaWduZWQtb2ZmLWJ5OiBQcmFzYWQgSiBQYW5kaXQgPGFkZHJlc3NAaGlkZGVuPgotCi1VcHN0cmVhbS1TdGF0dXM6IEJhY2twb3J0Ci1odHRwczovL2xpc3RzLmdudS5vcmcvYXJjaGl2ZS9odG1sL3FlbXUtZGV2ZWwvMjAxNi0wMS9tc2cwNTc0MC5odG1sCi0KLUNWRTogQ1ZFLTIwMTYtMjE5NwotU2lnbmVkLW9mZi1ieTogQXJtaW4gS3VzdGVyIDxha3VzdGVyQG12aXN0YS5jb20+Ci0KLS0tLQotIGh3L2lkZS9haGNpLmMgfCAxNiArKysrKysrKysrLS0tLS0tCi0gIDEgZmlsZSBjaGFuZ2VkLCAxMCBpbnNlcnRpb25zKCspLCA2IGRlbGV0aW9ucygtKQotCi0gIFVwZGF0ZSBhcyBwZXIgcmV2aWV3Ci0gICAgLT4gaHR0cHM6Ly9saXN0cy5nbnUub3JnL2FyY2hpdmUvaHRtbC9xZW11LWRldmVsLzIwMTYtMDEvbXNnMDU3MTUuaHRtbAotCi1JbmRleDogcWVtdS0yLjUuMC9ody9pZGUvYWhjaS5jCi09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLS0gcWVtdS0yLjUuMC5vcmlnL2h3L2lkZS9haGNpLmMKLSsrKyBxZW11LTIuNS4wL2h3L2lkZS9haGNpLmMKLUBAIC02NjEsOSArNjYxLDExIEBAIHN0YXRpYyBib29sIGFoY2lfbWFwX2Zpc19hZGRyZXNzKEFIQ0lEZXYKLSAKLSBzdGF0aWMgdm9pZCBhaGNpX3VubWFwX2Zpc19hZGRyZXNzKEFIQ0lEZXZpY2UgKmFkKQotIHsKLS0gICAgZG1hX21lbW9yeV91bm1hcChhZC0+aGJhLT5hcywgYWQtPnJlc19maXMsIDI1NiwKLS0gICAgICAgICAgICAgICAgICAgICBETUFfRElSRUNUSU9OX0ZST01fREVWSUNFLCAyNTYpOwotLSAgICBhZC0+cmVzX2ZpcyA9IE5VTEw7Ci0rICAgIGlmIChhZC0+cmVzX2ZpcykgewotKyAgICAgICAgZG1hX21lbW9yeV91bm1hcChhZC0+aGJhLT5hcywgYWQtPnJlc19maXMsIDI1NiwKLSsgICAgICAgICAgICAgICAgICAgICAgICAgRE1BX0RJUkVDVElPTl9GUk9NX0RFVklDRSwgMjU2KTsKLSsgICAgICAgIGFkLT5yZXNfZmlzID0gTlVMTDsKLSsgICAgfQotIH0KLSAKLSBzdGF0aWMgYm9vbCBhaGNpX21hcF9jbGJfYWRkcmVzcyhBSENJRGV2aWNlICphZCkKLUBAIC02NzcsOSArNjc5LDExIEBAIHN0YXRpYyBib29sIGFoY2lfbWFwX2NsYl9hZGRyZXNzKEFIQ0lEZXYKLSAKLSBzdGF0aWMgdm9pZCBhaGNpX3VubWFwX2NsYl9hZGRyZXNzKEFIQ0lEZXZpY2UgKmFkKQotIHsKLS0gICAgZG1hX21lbW9yeV91bm1hcChhZC0+aGJhLT5hcywgYWQtPmxzdCwgMTAyNCwKLS0gICAgICAgICAgICAgICAgICAgICBETUFfRElSRUNUSU9OX0ZST01fREVWSUNFLCAxMDI0KTsKLS0gICAgYWQtPmxzdCA9IE5VTEw7Ci0rICAgIGlmIChhZC0+bHN0KSB7Ci0rICAgICAgICBkbWFfbWVtb3J5X3VubWFwKGFkLT5oYmEtPmFzLCBhZC0+bHN0LCAxMDI0LAotKyAgICAgICAgICAgICAgICAgICAgICAgICBETUFfRElSRUNUSU9OX0ZST01fREVWSUNFLCAxMDI0KTsKLSsgICAgICAgIGFkLT5sc3QgPSBOVUxMOwotKyAgICB9Ci0gfQotIAotIHN0YXRpYyB2b2lkIGFoY2lfd3JpdGVfZmlzX3NkYihBSENJU3RhdGUgKnMsIE5DUVRyYW5zZmVyU3RhdGUgKm5jcV90ZnMpCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3FlbXUvcWVtdS9DVkUtMjAxNi0yMTk4LnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9xZW11L3FlbXUvQ1ZFLTIwMTYtMjE5OC5wYXRjaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjEyMDFmMC4uMDAwMDAwMAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3FlbXUvcWVtdS9DVkUtMjAxNi0yMTk4LnBhdGNoCisrKyAvZGV2L251bGwKQEAgLTEsNDUgKzAsMCBAQAotRnJvbTogUHJhc2FkIEogUGFuZGl0IDxhZGRyZXNzQGhpZGRlbj4KLQotVVNCIEVoY2kgZW11bGF0aW9uIHN1cHBvcnRzIGhvc3QgY29udHJvbGxlciBjYXBhYmlsaXR5IHJlZ2lzdGVycy4KLUJ1dCBpdHMgbW1pbyAnLndyaXRlJyBmdW5jdGlvbiB3YXMgbWlzc2luZywgd2hpY2ggbGVhZCB0byBhIG51bGwKLXBvaW50ZXIgZGVyZWZlcmVuY2UgaXNzdWUuIEFkZCBhIGRvIG5vdGhpbmcgJ2VoY2lfY2Fwc193cml0ZScKLWRlZmluaXRpb24gdG8gYXZvaWQgaXQ7IERvIG5vdGhpbmcgYmVjYXVzZSBjYXBhYmlsaXR5IHJlZ2lzdGVycwotYXJlIFJlYWQgT25seShSTykuCi0KLVJlcG9ydGVkLWJ5OiBadW96aGkgRnp6IDxhZGRyZXNzQGhpZGRlbj4KLVNpZ25lZC1vZmYtYnk6IFByYXNhZCBKIFBhbmRpdCA8YWRkcmVzc0BoaWRkZW4+Ci0KLVVwc3RyZWFtLVN0YXR1czogQmFja3BvcnQKLWh0dHBzOi8vbGlzdHMuZ251Lm9yZy9hcmNoaXZlL2h0bWwvcWVtdS1kZXZlbC8yMDE2LTAxL21zZzA1ODk5Lmh0bWwKLQotQ1ZFOiBDVkUtMjAxNi0yMTk4Ci1TaWduZWQtb2ZmLWJ5OiBBcm1pbiBLdXN0ZXIgPGFrdXN0ZXJAbXZpc3RhLmNvbT4KLQotLS0tCi0gaHcvdXNiL2hjZC1laGNpLmMgfCA2ICsrKysrKwotICAxIGZpbGUgY2hhbmdlZCwgNiBpbnNlcnRpb25zKCspCi0KLUluZGV4OiBxZW11LTIuNS4wL2h3L3VzYi9oY2QtZWhjaS5jCi09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLS0gcWVtdS0yLjUuMC5vcmlnL2h3L3VzYi9oY2QtZWhjaS5jCi0rKysgcWVtdS0yLjUuMC9ody91c2IvaGNkLWVoY2kuYwotQEAgLTg5Myw2ICs4OTMsMTEgQEAgc3RhdGljIHVpbnQ2NF90IGVoY2lfY2Fwc19yZWFkKHZvaWQgKnB0cgotICAgICByZXR1cm4gcy0+Y2Fwc1thZGRyXTsKLSB9Ci0gCi0rc3RhdGljIHZvaWQgZWhjaV9jYXBzX3dyaXRlKHZvaWQgKnB0ciwgaHdhZGRyIGFkZHIsCi0rICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50NjRfdCB2YWwsIHVuc2lnbmVkIHNpemUpCi0rewotK30KLSsKLSBzdGF0aWMgdWludDY0X3QgZWhjaV9vcHJlZ19yZWFkKHZvaWQgKnB0ciwgaHdhZGRyIGFkZHIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBzaXplKQotIHsKLUBAIC0yMzEwLDYgKzIzMTUsNyBAQCBzdGF0aWMgdm9pZCBlaGNpX2ZyYW1lX3RpbWVyKHZvaWQgKm9wYXF1Ci0gCi0gc3RhdGljIGNvbnN0IE1lbW9yeVJlZ2lvbk9wcyBlaGNpX21taW9fY2Fwc19vcHMgPSB7Ci0gICAgIC5yZWFkID0gZWhjaV9jYXBzX3JlYWQsCi0rICAgIC53cml0ZSA9IGVoY2lfY2Fwc193cml0ZSwKLSAgICAgLnZhbGlkLm1pbl9hY2Nlc3Nfc2l6ZSA9IDEsCi0gICAgIC52YWxpZC5tYXhfYWNjZXNzX3NpemUgPSA0LAotICAgICAuaW1wbC5taW5fYWNjZXNzX3NpemUgPSAxLApkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9xZW11L3FlbXUvYWRkLXB0ZXN0LWluLW1ha2VmaWxlLnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9xZW11L3FlbXUvYWRkLXB0ZXN0LWluLW1ha2VmaWxlLnBhdGNoCmluZGV4IGE5OWY3MjAuLjJjZTM0NzggMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcWVtdS9xZW11L2FkZC1wdGVzdC1pbi1tYWtlZmlsZS5wYXRjaAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3FlbXUvcWVtdS9hZGQtcHRlc3QtaW4tbWFrZWZpbGUucGF0Y2gKQEAgLTQsMTQgKzQsMTQgQEAKIAogU2lnbmVkLW9mZi1ieTogS2FpIEthbmcgPGthaS5rYW5nQHdpbmRyaXZlci5jb20+CiAtLS0KLSB0ZXN0cy9NYWtlZmlsZSB8ICAgMTAgKysrKysrKysrKwotIDEgZmlsZSBjaGFuZ2VkLCAxMCBpbnNlcnRpb25zKCspCisgdGVzdHMvTWFrZWZpbGUuaW5jbHVkZSB8IDggKysrKysrKysKKyAxIGZpbGUgY2hhbmdlZCwgOCBpbnNlcnRpb25zKCspCiAKLWRpZmYgLS1naXQgYS90ZXN0cy9NYWtlZmlsZSBiL3Rlc3RzL01ha2VmaWxlCi1pbmRleCA4OGY3MTA1Li4zZjQwYjRiIDEwMDY0NAotLS0tIGEvdGVzdHMvTWFrZWZpbGUKLSsrKyBiL3Rlc3RzL01ha2VmaWxlCi1AQCAtNDA1LDMgKzQwNSwxMiBAQCBhbGw6ICQoUUVNVV9JT1RFU1RTX0hFTFBFUlMteSkKK2RpZmYgLS1naXQgYS90ZXN0cy9NYWtlZmlsZS5pbmNsdWRlIGIvdGVzdHMvTWFrZWZpbGUuaW5jbHVkZQoraW5kZXggMTRiZTQ5MS4uMGZjZTM3YSAxMDA2NDQKKy0tLSBhL3Rlc3RzL01ha2VmaWxlLmluY2x1ZGUKKysrKyBiL3Rlc3RzL01ha2VmaWxlLmluY2x1ZGUKK0BAIC03NzYsMyArNzc2LDExIEBAIGFsbDogJChRRU1VX0lPVEVTVFNfSEVMUEVSUy15KQogIAogIC1pbmNsdWRlICQod2lsZGNhcmQgdGVzdHMvKi5kKQogIC1pbmNsdWRlICQod2lsZGNhcmQgdGVzdHMvbGlicW9zLyouZCkKQEAgLTIzLDcgKzIzLDYgQEAKICsJCW5mPSQkKGVjaG8gJCRmIHwgc2VkICdzL3Rlc3RzXC8vXC5cLy9nJyk7IFwKICsJCSQkbmY7IFwKICsJZG9uZQotKwotLS0KLTEuNy45LjUKKy0tIAorMi45LjAKIApkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9xZW11L3FlbXUvZGlzYWJsZS1ncmFicy5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcWVtdS9xZW11L2Rpc2FibGUtZ3JhYnMucGF0Y2gKaW5kZXggNDE3MjZiMS4uMTIzODMzZiAxMDA2NDQKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9xZW11L3FlbXUvZGlzYWJsZS1ncmFicy5wYXRjaAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3FlbXUvcWVtdS9kaXNhYmxlLWdyYWJzLnBhdGNoCkBAIC0yOSw5ICsyOSw5IEBACiAtLS0gYS91aS9zZGwuYwogKysrIGIvdWkvc2RsLmMKIEBAIC01OSw2ICs1OSwxMCBAQCBzdGF0aWMgU0RMX0N1cnNvciAqZ3Vlc3Rfc3ByaXRlID0gTlVMTDsKLSBzdGF0aWMgU0RMX1BpeGVsRm9ybWF0IGhvc3RfZm9ybWF0OwogIHN0YXRpYyBpbnQgc2NhbGluZ19hY3RpdmUgPSAwOwogIHN0YXRpYyBOb3RpZmllciBtb3VzZV9tb2RlX25vdGlmaWVyOworIHN0YXRpYyBpbnQgaWRsZV9jb3VudGVyOwogKyNpZm5kZWYgVHJ1ZQogKyNkZWZpbmUgVHJ1ZSAxCiArI2VuZGlmCkBAIC00MCw3ICs0MCw3IEBACiAgc3RhdGljIHZvaWQgc2RsX3VwZGF0ZShEaXNwbGF5Q2hhbmdlTGlzdGVuZXIgKmRjbCwKICAgICAgICAgICAgICAgICAgICAgICAgIGludCB4LCBpbnQgeSwgaW50IHcsIGludCBoKQogQEAgLTM4NCwxNCArMzg4LDE2IEBAIHN0YXRpYyB2b2lkIHNkbF9ncmFiX3N0YXJ0KHZvaWQpCi0gICAgICAgICAgICAgU0RMX1dhcnBNb3VzZShndWVzdF94LCBndWVzdF95KTsKKyAgICAgICAgICAgICB9CiAgICAgIH0gZWxzZQogICAgICAgICAgc2RsX2hpZGVfY3Vyc29yKCk7CiAtICAgIFNETF9XTV9HcmFiSW5wdXQoU0RMX0dSQUJfT04pOwpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9xZW11L3FlbXUvZml4LWxpYmNhcC1oZWFkZXItaXNzdWUtb24tc29tZS1kaXN0cm8ucGF0Y2ggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3FlbXUvcWVtdS9maXgtbGliY2FwLWhlYWRlci1pc3N1ZS1vbi1zb21lLWRpc3Ryby5wYXRjaAppbmRleCAxM2E2ZWEyLi5jZWU2YTY3IDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3FlbXUvcWVtdS9maXgtbGliY2FwLWhlYWRlci1pc3N1ZS1vbi1zb21lLWRpc3Ryby5wYXRjaAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3FlbXUvcWVtdS9maXgtbGliY2FwLWhlYWRlci1pc3N1ZS1vbi1zb21lLWRpc3Ryby5wYXRjaApAQCAtNjcsOSArNjcsOSBAQAogICNpbmNsdWRlIDxzeXMvdmZzLmg+CiAgI2luY2x1ZGUgPHN5cy9pb2N0bC5oPgogQEAgLTI2LDcgKzI1LDExIEBACi0gI2luY2x1ZGUgInZpcnRpby05cC1tYXJzaGFsLmgiCi0gI2luY2x1ZGUgImh3LzlwZnMvdmlydGlvLTlwLXByb3h5LmgiCi0gI2luY2x1ZGUgImZzZGV2L3ZpcnRpby05cC1tYXJzaGFsLmgiCisgI2luY2x1ZGUgIjlwLWlvdi1tYXJzaGFsLmgiCisgI2luY2x1ZGUgImh3LzlwZnMvOXAtcHJveHkuaCIKKyAjaW5jbHVkZSAiZnNkZXYvOXAtaW92LW1hcnNoYWwuaCIKIC0KICsvKgogKyAqIEluY2x1ZGUgdGhpcyBvbmUgbGFzdCBkdWUgdG8gc29tZSB2ZXJzaW9ucyBvZiBpdCBiZWluZyBidWdneToKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcWVtdS9xZW11L3FlbXUtMi41LjAtY2ZsYWdzLnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9xZW11L3FlbXUvcWVtdS0yLjUuMC1jZmxhZ3MucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTczMzk0ZgotLS0gL2Rldi9udWxsCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcWVtdS9xZW11L3FlbXUtMi41LjAtY2ZsYWdzLnBhdGNoCkBAIC0wLDAgKzEsMTMgQEAKKy0tLSBhL2NvbmZpZ3VyZQorKysrIGIvY29uZmlndXJlCitAQCAtNDQ2OCwxMCArNDQ2OCw2IEBAIGZpCisgaWYgdGVzdCAiJGdjb3YiID0gInllcyIgOyB0aGVuCisgICBDRkxBR1M9Ii1mcHJvZmlsZS1hcmNzIC1mdGVzdC1jb3ZlcmFnZSAtZyAkQ0ZMQUdTIgorICAgTERGTEFHUz0iLWZwcm9maWxlLWFyY3MgLWZ0ZXN0LWNvdmVyYWdlICRMREZMQUdTIgorLWVsaWYgdGVzdCAiJGZvcnRpZnlfc291cmNlIiA9ICJ5ZXMiIDsgdGhlbgorLSAgQ0ZMQUdTPSItTzIgLVVfRk9SVElGWV9TT1VSQ0UgLURfRk9SVElGWV9TT1VSQ0U9MiAkQ0ZMQUdTIgorLWVsaWYgdGVzdCAiJGRlYnVnIiA9ICJubyI7IHRoZW4KKy0gIENGTEFHUz0iLU8yICRDRkxBR1MiCisgZmkKKyAKKyAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcWVtdS9xZW11XzIuNS4wLmJiIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9xZW11L3FlbXVfMi41LjAuYmIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGU5ZDlhOGQuLjAwMDAwMDAKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9xZW11L3FlbXVfMi41LjAuYmIKKysrIC9kZXYvbnVsbApAQCAtMSwyNCArMCwwIEBACi1yZXF1aXJlIHFlbXUuaW5jCi0KLUxJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PTQ0MWMyOGQyY2Y4NmUxNWEzN2ZhNDdlMTVhNzJmYmFjIFwKLSAgICAgICAgICAgICAgICAgICAgZmlsZTovL0NPUFlJTkcuTElCO2VuZGxpbmU9MjQ7bWQ1PWMwNGRlZjdhZTM4ODUwZTdkM2VmNTQ4NTg4MTU5OTEzIgotCi1TUkNfVVJJICs9ICJmaWxlOi8vY29uZmlndXJlLWZpeC1EYXJ3aW4tdGFyZ2V0LWRldGVjdGlvbi5wYXRjaCBcCi0gICAgICAgICAgICBmaWxlOi8vcWVtdS1lbmxhcmdlLWVudi1lbnRyeS1zaXplLnBhdGNoIFwKLSAgICAgICAgICAgIGZpbGU6Ly9RZW11LUFybS12ZXJzYXRpbGVwYi1BZGQtbWVtb3J5LXNpemUtY2hlY2tpbmcucGF0Y2ggXAotICAgICAgICAgICAgZmlsZTovL25vLXZhbGdyaW5kLnBhdGNoIFwKLSAgICAgICAgICAgIGZpbGU6Ly9DVkUtMjAxNi0xNTY4LnBhdGNoIFwKLSAgICAgICAgICAgIGZpbGU6Ly9DVkUtMjAxNi0yMTk3LnBhdGNoIFwKLSAgICAgICAgICAgIGZpbGU6Ly9DVkUtMjAxNi0yMTk4LnBhdGNoIFwKLSAgICAgICAgICAgIGZpbGU6Ly9wYXRobGltaXQucGF0Y2ggXAotICAgICAgICAgICAiCi1TUkNfVVJJX3ByZXBlbmQgPSAiaHR0cDovL3dpa2kucWVtdS1wcm9qZWN0Lm9yZy9kb3dubG9hZC8ke0JQfS50YXIuYnoyIgotU1JDX1VSSVttZDVzdW1dID0gImY0NjlmMjMzMGJiZTc2ZTNlMzlkYjEwZTlhYzRmOGRiIgotU1JDX1VSSVtzaGEyNTZzdW1dID0gIjM0NDM4ODc0MDE2MTlmZTMzYmZhNWQ5MDBhNGYyZDZhNzk0MjVhZTJiN2U0M2Q1YjhjMzZlYjdhNjgzNzcyZDQiCi0KLUNPTVBBVElCTEVfSE9TVF9jbGFzcy10YXJnZXRfbWlwczY0ID0gIm51bGwiCi0KLWRvX2luc3RhbGxfYXBwZW5kKCkgewotICAgICMgUHJldmVudCBRQSB3YXJuaW5ncyBhYm91dCBpbnN0YWxsZWQgJHtsb2NhbHN0YXRlZGlyfS9ydW4KLSAgICBpZiBbIC1kICR7RH0ke2xvY2Fsc3RhdGVkaXJ9L3J1biBdOyB0aGVuIHJtZGlyICR7RH0ke2xvY2Fsc3RhdGVkaXJ9L3J1bjsgZmkKLX0KZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcWVtdS9xZW11XzIuNy4wLmJiIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9xZW11L3FlbXVfMi43LjAuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjE5YjhlZAotLS0gL2Rldi9udWxsCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcWVtdS9xZW11XzIuNy4wLmJiCkBAIC0wLDAgKzEsMjMgQEAKK3JlcXVpcmUgcWVtdS5pbmMKKworTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9NDQxYzI4ZDJjZjg2ZTE1YTM3ZmE0N2UxNWE3MmZiYWMgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vQ09QWUlORy5MSUI7ZW5kbGluZT0yNDttZDU9YzA0ZGVmN2FlMzg4NTBlN2QzZWY1NDg1ODgxNTk5MTMiCisKK1NSQ19VUkkgKz0gImZpbGU6Ly9jb25maWd1cmUtZml4LURhcndpbi10YXJnZXQtZGV0ZWN0aW9uLnBhdGNoIFwKKyAgICAgICAgICAgIGZpbGU6Ly9xZW11LWVubGFyZ2UtZW52LWVudHJ5LXNpemUucGF0Y2ggXAorICAgICAgICAgICAgZmlsZTovL1FlbXUtQXJtLXZlcnNhdGlsZXBiLUFkZC1tZW1vcnktc2l6ZS1jaGVja2luZy5wYXRjaCBcCisgICAgICAgICAgICBmaWxlOi8vbm8tdmFsZ3JpbmQucGF0Y2ggXAorICAgICAgICAgICAgZmlsZTovL3BhdGhsaW1pdC5wYXRjaCBcCisgICAgICAgICAgICBmaWxlOi8vcWVtdS0yLjUuMC1jZmxhZ3MucGF0Y2ggXAorIgorCitTUkNfVVJJX3ByZXBlbmQgPSAiaHR0cDovL3dpa2kucWVtdS1wcm9qZWN0Lm9yZy9kb3dubG9hZC8ke0JQfS50YXIuYnoyIgorU1JDX1VSSVttZDVzdW1dID0gIjA4ZDRkMDZkMWNiNTk4ZWZlY2Q3OTYxMzdmNDg0NGFiIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjMyNmU3Mzk1MDZiYTY5MGRhZjY5ZmMxN2JkMzkxM2E2YzMxM2Q5OTI4ZDc0M2JkOGVkZGI4MmY0MDNmODFlNTMiCisKK0NPTVBBVElCTEVfSE9TVF9jbGFzcy10YXJnZXRfbWlwczY0ID0gIm51bGwiCisKK2RvX2luc3RhbGxfYXBwZW5kKCkgeworICAgICMgUHJldmVudCBRQSB3YXJuaW5ncyBhYm91dCBpbnN0YWxsZWQgJHtsb2NhbHN0YXRlZGlyfS9ydW4KKyAgICBpZiBbIC1kICR7RH0ke2xvY2Fsc3RhdGVkaXJ9L3J1biBdOyB0aGVuIHJtZGlyICR7RH0ke2xvY2Fsc3RhdGVkaXJ9L3J1bjsgZmkKK30KZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcWVtdS9xZW11d3JhcHBlci1jcm9zc18xLjAuYmIgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3FlbXUvcWVtdXdyYXBwZXItY3Jvc3NfMS4wLmJiCmluZGV4IDdmNGM2ZDkuLjUzYjMwMmQgMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcWVtdS9xZW11d3JhcHBlci1jcm9zc18xLjAuYmIKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9xZW11L3FlbXV3cmFwcGVyLWNyb3NzXzEuMC5iYgpAQCAtNDEsMTAgKzQxLDYgQEAKIAljaG1vZCAreCAke0R9JHtiaW5kaXJfY3Jvc3NzY3JpcHRzfS9xZW11d3JhcHBlcgogfQogCi1TWVNST09UX1BSRVBST0NFU1NfRlVOQ1MgKz0gInFlbXV3cmFwcGVyX3N5c3Jvb3RfcHJlcHJvY2VzcyIKLQotcWVtdXdyYXBwZXJfc3lzcm9vdF9wcmVwcm9jZXNzICgpIHsKLQlzeXNyb290X3N0YWdlX2RpciAke0R9JHtiaW5kaXJfY3Jvc3NzY3JpcHRzfSAke1NZU1JPT1RfREVTVERJUn0ke2JpbmRpcl9jcm9zc3NjcmlwdHN9Ci19CitTWVNST09UX0RJUlMgKz0gIiR7YmluZGlyX2Nyb3Nzc2NyaXB0c30iCiAKIElOSElCSVRfREVGQVVMVF9ERVBTID0gIjEiCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3F1aWx0L3F1aWx0LmluYyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcXVpbHQvcXVpbHQuaW5jCmluZGV4IDRlMzkzYzQuLjUxMmI3OTggMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcXVpbHQvcXVpbHQuaW5jCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcXVpbHQvcXVpbHQuaW5jCkBAIC00OCwxMCArNDgsMTAgQEAKIH0KIAogZG9faW5zdGFsbF9wdGVzdCgpIHsKLQl0YXIgLWNmIC0gYmluLyAtLWV4Y2x1ZGUgXCouaW4gfCAoIGNkICR7RH0ke1BURVNUX1BBVEh9ICYmIHRhciAteGYgLSApCi0JdGFyIC1jZiAtIGNvbXBhdC8gLS1leGNsdWRlIFwqLmluIHwgKCBjZCAke0R9JHtQVEVTVF9QQVRIfSAmJiB0YXIgLXhmIC0gKQotCXRhciAtY2YgLSBxdWlsdC8gLS1leGNsdWRlIFwqLmluIHwgKCBjZCAke0R9JHtQVEVTVF9QQVRIfSAmJiB0YXIgLXhmIC0gKQotCXRhciAtY2YgLSB0ZXN0LyAtLWV4Y2x1ZGUgbWFpbC50ZXN0IC0tZXhjbHVkZSBkZWxldGUudGVzdCB8ICggY2QgJHtEfSR7UFRFU1RfUEFUSH0gJiYgdGFyIC14ZiAtICYmIGNobW9kIDc3NyB0ZXN0KQorCXRhciAtYyAtLWV4Y2x1ZGU9XCouaW4gYmluLyB8ICggY2QgJHtEfSR7UFRFU1RfUEFUSH0gJiYgdGFyIC14ZiAtICkKKwl0YXIgLWMgLS1leGNsdWRlPVwqLmluIGNvbXBhdC8gfCAoIGNkICR7RH0ke1BURVNUX1BBVEh9ICYmIHRhciAteGYgLSApCisJdGFyIC1jIC0tZXhjbHVkZT1cKi5pbiBxdWlsdC8gfCAoIGNkICR7RH0ke1BURVNUX1BBVEh9ICYmIHRhciAteGYgLSApCisJdGFyIC1jIC0tZXhjbHVkZT1tYWlsLnRlc3QgLS1leGNsdWRlPWRlbGV0ZS50ZXN0IHRlc3QvIHwgKCBjZCAke0R9JHtQVEVTVF9QQVRIfSAmJiB0YXIgLXhmIC0gJiYgY2htb2QgNzc3IHRlc3QpCiAJY3AgJHtXT1JLRElSfS9NYWtlZmlsZSAke0R9JHtQVEVTVF9QQVRIfQogCWNwICR7V09SS0RJUn0vdGVzdC5zaCAke0R9JHtQVEVTVF9QQVRIfQogfQpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9ycG0vcnBtLzAwMDEtc3lzdGVtLmgtcXVlcnkuYy1zdXBwb3J0LW5vc2lnbmF0dXJlLnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9ycG0vcnBtLzAwMDEtc3lzdGVtLmgtcXVlcnkuYy1zdXBwb3J0LW5vc2lnbmF0dXJlLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc3ZGM1YjYKLS0tIC9kZXYvbnVsbAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3JwbS9ycG0vMDAwMS1zeXN0ZW0uaC1xdWVyeS5jLXN1cHBvcnQtbm9zaWduYXR1cmUucGF0Y2gKQEAgLTAsMCArMSw2MyBAQAorRnJvbSBkOGZjYzNjYmVlYzRkZWZiNWJhYmRlNWJkMDllYTI5NGRkM2ZkMDhiIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogUm9iZXJ0IFlhbmcgPGxpZXpoaS55YW5nQHdpbmRyaXZlci5jb20+CitEYXRlOiBTdW4sIDMgSnVsIDIwMTYgMTk6MDE6NTkgLTA3MDAKK1N1YmplY3Q6IFtQQVRDSF0gc3lzdGVtLmgvcXVlcnkuYzogc3VwcG9ydCBub3NpZ25hdHVyZQorCisqIERlZmluZSBTVVBQT1JUX05PU0lHTkFUVVJFUyB0byAxIGluIHN5c3RlbS5oCisqICFRVkFfSVNTRVQocXZhLT5xdmFfZmxhZ3MsIFNJR05BVFVSRSkgLT4gUVZBX0lTU0VUKHF2YS0+cXZhX2ZsYWdzLCBTSUdOQVRVUkUpLAorICBvdGhlcndpc2UsIHdoZW4gdXNlIC0tbm9zaWduYXR1cmUgd291bGQgcmVhZCBkYXRhYmFzZSBhbmQgdmVyaWZ5CisgIHNpZ25hdHVyZSwgdGhpcyBpcyBub3QgZXhwZWN0ZWQuCisKK1Vwc3RyZWFtLVN0YXR1czogU3VibWl0dGVkIFtTZW50IGVtYWlsIHRvIHJwbS1kZXZlbEBycG01Lm9yZ10KKworU2lnbmVkLW9mZi1ieTogUm9iZXJ0IFlhbmcgPGxpZXpoaS55YW5nQHdpbmRyaXZlci5jb20+CistLS0KKyBsaWIvcXVlcnkuYyB8IDYgKysrLS0tCisgc3lzdGVtLmggICAgfCA0ICsrLS0KKyAyIGZpbGVzIGNoYW5nZWQsIDUgaW5zZXJ0aW9ucygrKSwgNSBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL2xpYi9xdWVyeS5jIGIvbGliL3F1ZXJ5LmMKK2luZGV4IDUwYTc0NTMuLmI3NjFkNzYgMTAwNjQ0CistLS0gYS9saWIvcXVlcnkuYworKysrIGIvbGliL3F1ZXJ5LmMKK0BAIC05NTQsMTkgKzk1NCwxOSBAQCBKQkpERUJVRygoc3RkZXJyLCAiLS0+ICVzKCVwLCVwLCVwKVxuIiwgX19GVU5DVElPTl9fLCB0cywgcXZhLCBhcmd2KSk7CisgICAgIHZzZmxhZ3MgPSAocnBtVlNGbGFncykgcnBtRXhwYW5kTnVtZXJpYygiJXs/X3ZzZmxhZ3NfcXVlcnl9Iik7CisgICAgIHZzZmxhZ3MgPSAocnBtVlNGbGFncykgMDsJLyogWFhYIEZJWE1FOiBpZ25vcmUgZGVmYXVsdCBkaXNhYmxlcnMuICovCisgI2lmIGRlZmluZWQoU1VQUE9SVF9OT1NJR05BVFVSRVMpCistICAgIGlmICghUVZBX0lTU0VUKHF2YS0+cXZhX2ZsYWdzLCBESUdFU1QpKSB7CisrICAgIGlmIChRVkFfSVNTRVQocXZhLT5xdmFfZmxhZ3MsIERJR0VTVCkpIHsKKyAJVlNGX1NFVCh2c2ZsYWdzLCBOT1NIQTFIRUFERVIpOworIAlWU0ZfU0VUKHZzZmxhZ3MsIE5PTUQ1SEVBREVSKTsKKyAJVlNGX1NFVCh2c2ZsYWdzLCBOT1NIQTEpOworIAlWU0ZfU0VUKHZzZmxhZ3MsIE5PTUQ1KTsKKyAgICAgfQorLSAgICBpZiAoIVFWQV9JU1NFVChxdmEtPnF2YV9mbGFncywgU0lHTkFUVVJFKSkgeworKyAgICBpZiAoUVZBX0lTU0VUKHF2YS0+cXZhX2ZsYWdzLCBTSUdOQVRVUkUpKSB7CisgCVZTRl9TRVQodnNmbGFncywgTk9EU0FIRUFERVIpOworIAlWU0ZfU0VUKHZzZmxhZ3MsIE5PUlNBSEVBREVSKTsKKyAJVlNGX1NFVCh2c2ZsYWdzLCBOT0RTQSk7CisgCVZTRl9TRVQodnNmbGFncywgTk9SU0EpOworICAgICB9CistICAgIGlmICghUVZBX0lTU0VUKHF2YS0+cXZhX2ZsYWdzLCBIRFJDSEspKSB7CisrICAgIGlmIChRVkFfSVNTRVQocXZhLT5xdmFfZmxhZ3MsIEhEUkNISykpIHsKKyAJVlNGX1NFVCh2c2ZsYWdzLCBOT0hEUkNISyk7CisgICAgIH0KKyAgICAgVlNGX0NMUih2c2ZsYWdzLCBORUVEUEFZTE9BRCk7CS8qIFhYWCBuZWVkZWQ/ICovCitkaWZmIC0tZ2l0IGEvc3lzdGVtLmggYi9zeXN0ZW0uaAoraW5kZXggMmZmODkwNi4uYWQ0NjE5YSAxMDA2NDQKKy0tLSBhL3N5c3RlbS5oCisrKysgYi9zeXN0ZW0uaAorQEAgLTc4Nyw5ICs3ODcsOSBAQCBzdGF0aWMgaW5saW5lIGNvbnN0IGNoYXIgKnJjc2lkKGNvbnN0IGNoYXIgKnApIHsgXAorICNkZWZpbmUgU1VQUE9SVF9JMThOU1RSSU5HX1RZUEUJMQorIAorIC8qKgorLSAqIEVsaW1pbmF0ZSBzaWduYXR1cmUvZGlnZXN0IGRpc2FibGVycy4KKysgKiBTaWduYXR1cmUvZGlnZXN0IGRpc2FibGVycy4KKyAgKi8KKy0jdW5kZWYJU1VQUE9SVF9OT1NJR05BVFVSRVMKKysjZGVmaW5lIFNVUFBPUlRfTk9TSUdOQVRVUkVTIDEKKyAKKyAvKioKKyAgKiBQZXJtaXQgYXIoMSkgcGF5bG9hZHMuIERpc2FibGVkIHdoaWxlIHJwbWlvL2lvc20uYyBpcyB1bmRlciBkZXZlbG9wbWVudC4KKy0tIAorMi45LjAKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcnBtL3JwbS9nY2M2LXN0ZGxpYi5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcnBtL3JwbS9nY2M2LXN0ZGxpYi5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wYTM3MmM2Ci0tLSAvZGV2L251bGwKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9ycG0vcnBtL2djYzYtc3RkbGliLnBhdGNoCkBAIC0wLDAgKzEsNTQgQEAKK2djYzYgaGFzIGZpeGVkIGEgbG9uZyBzdGFuZGluZyBjKysgaW5jbHVkZSBpc3N1ZSB3aGVyZSA8Y2hlYWRlcj4KK3dhcyBkaWZmZXJlbnQgZnJvbSA8aGVhZGVyLmg+IGluY2x1c2lvbiB2aWEKKworaHR0cHM6Ly9nY2MuZ251Lm9yZy9tbC9saWJzdGRjKysvMjAxNi0wMS9tc2cwMDAyNS5odG1sCisKK2FuZCBpdHMgYWxzbyBkZXNjaWJlZCBpbiBodHRwczovL2djYy5nbnUub3JnL2djYy02L3BvcnRpbmdfdG8uaHRtbAorcnBtaW8gY29tcG9uZW50IHVzZXMgc29tZSAuY3BwIGFuZCAuY2MgZmllcyB3aGljaCBuZWVkIHRvIHVzZQorQyBzdGRsaWIuaCBmcm9tIEMgbGlicmFyeSBhbmQgbm90IHRoZSBDKysgbGlic3RkYysrIGhlYWRlcgordGhlcmVmb3JlIHdlIHBhc3MgX0dMSUJDWFhfSU5DTFVERV9ORVhUX0NfSEVBREVSUyBzbyB0aGF0IGl0CitrZWVwcyB0aGUgb2xkIGJlaGF2aW9yCisKKy9hL2J1aWxkL3RtcC9zeXNyb290cy9yYXNwYmVycnlwaTIvdXNyL2luY2x1ZGUvYysrLzYuMC4xL2NzdGRsaWI6MTQzOjExOiBlcnJvcjogJzo6Z2V0ZW52JyBoYXMgbm90IGJlZW4gZGVjbGFyZWQKKyAgIHVzaW5nIDo6Z2V0ZW52OworICAgICAgICAgICBefn5+fn4KK0luIGZpbGUgaW5jbHVkZWQgZnJvbSAuLi8uLi9ycG0tNS40LjE1L3N5c3RlbS5oOjIwMTowLAorICAgICAgICAgICAgICAgICBmcm9tIC4uLy4uL3JwbS01LjQuMTUvcnBtaW8vcnBtanMuY3BwOjE6CisvYS9idWlsZC90bXAvc3lzcm9vdHMvcmFzcGJlcnJ5cGkyL3Vzci9pbmNsdWRlL2MrKy82LjAuMS9zdGRsaWIuaDo2MjoxMjogZXJyb3I6ICdzdGQ6OmdldGVudicgaGFzIG5vdCBiZWVuIGRlY2xhcmVkCisgdXNpbmcgc3RkOjpnZXRlbnY7CisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KKworSW5kZXg6IHJwbS01LjQuMTUvcnBtaW8vTWFrZWZpbGUuYW0KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBycG0tNS40LjE1Lm9yaWcvcnBtaW8vTWFrZWZpbGUuYW0KKysrKyBycG0tNS40LjE1L3JwbWlvL01ha2VmaWxlLmFtCitAQCAtMTUxLDcgKzE1MSw3IEBAIGxpYnJwbWlvX2xhX1NPVVJDRVMgPSBcCisgCWdyb2VzdGwuYyBoYW1zaS5jIGpoLmMga2VjY2FrLmMgbGFuZS5jIGx1ZmZhLmMgbWQyLmMgbWQ2LmMgcmFkaW9nYXR1bi5jXAorIAlzYWxzYTEwLmMgc2Fsc2EyMC5jIHNoYWJhbC5jIHNoYXZpdGUzLmMgc2ltZC5jIHNrZWluLmMgdGliMy5jIHRpZ2VyLmMgXAorIAlycG1naXQuYyBycG1pby1zdHViLmMgXAorLQlycG1qcy5jcHAgcnBtanNpby5jIHJwbWtleXJpbmcuYyBcCisrCXJwbWpuaS5jYyBycG1qcy5jcHAgcnBtanNpby5jIHJwbWtleXJpbmcuYyBcCisgCXJwbW5peC5jIHJwbW9kYmMuYyBycG1zcWwuYyBzZXQuYyBcCisgCWFyLmMgXAorIAlhcmd2LmMgXAorQEAgLTE5NSw3ICsxOTUsNiBAQCBsaWJycG1pb19sYV9TT1VSQ0VTID0gXAorIAlycG1ob29rLmMgXAorIAlycG1pby5jIFwKKyAJcnBtaW9iLmMgXAorLQlycG1qbmkuY2MgXAorIAlycG1rdS5jIFwKKyAJcnBtbG9nLmMgXAorIAlycG1sdGMuYyBcCitAQCAtMjc5LDcgKzI3OCw5IEBAIGtlY2Nhay5sbzogJCh0b3Bfc3JjZGlyKS9ycG1pby9rZWNjYWsuYworICNycG1qcy5sbzogJCh0b3Bfc3JjZGlyKS9ycG1pby9ycG1qcy5jCisgIwlAJChMVENPTVBJTEUpIC1PMCAtYyAkPAorIHJwbWpzLmxvOiAkKHRvcF9zcmNkaXIpL3JwbWlvL3JwbWpzLmNwcAorLQlAJChMVENPTVBJTEUpIC1PMCAtYyAkPAorKwlAJChMVENPTVBJTEUpIC1PMCAtYyAtRF9HTElCQ1hYX0lOQ0xVREVfTkVYVF9DX0hFQURFUlMgJDwKKytycG1qbmkubG86ICQodG9wX3NyY2RpcikvcnBtaW8vcnBtam5pLmNjCisrCUAkKExUQ09NUElMRSkgLU8wIC1jIC1EX0dMSUJDWFhfSU5DTFVERV9ORVhUX0NfSEVBREVSUyAkPAorIAorIFlBQ0MgPSBieWFjYyAtZAorIGdldGRhdGUuYzogZ2V0ZGF0ZS55CmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3JwbS9ycG0vcnBtLWVuc3VyZS1ycG0yY3Bpby1jYWxsLXJwbS1yZWxvY2F0aW9uLWNvZGUucGF0Y2ggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3JwbS9ycG0vcnBtLWVuc3VyZS1ycG0yY3Bpby1jYWxsLXJwbS1yZWxvY2F0aW9uLWNvZGUucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjNhZjEwMAotLS0gL2Rldi9udWxsCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcnBtL3JwbS9ycG0tZW5zdXJlLXJwbTJjcGlvLWNhbGwtcnBtLXJlbG9jYXRpb24tY29kZS5wYXRjaApAQCAtMCwwICsxLDI1IEBACitXZSBuZWVkIHRvIGNhbGwgcnBtY2xpSW5pdCB0byBlbnN1cmUgdGhlIHJwbSByZWxvY2F0aW9uIGNvZGUgaXMgY2FsbGVkCithbmQgaXQgY29ycmVjdGx5IGhvbm91cnMgdGhlIHJlbG9jYXRpb24gZW52aXJvbm1lbnRhbCB2YXJpYWJsZXMuCisKK3doZW4gd2UgZXhwb3J0IHRoZSB3cnNkayBhbmQgc291cmNlIHRoZSBzZGssIHRoZW4gZXhlY3V0ZSBycG0yY3BpbyB4eHgucnBtfGNwaW8gLXQuCit3ZSB3aWxsIGdldCB0aGUgZm9sbG93aW5nIGVycm9yIDoKKyJycG0tNS40LjE0L3JwbWRiL2RiY29uZmlnLmM6NDkzOgorZGIzTmV3OiBBc3NlcnRpb24gYGRiT3B0cyAhPSAoKHZvaWQgKikwKSAmJiAqZGJPcHRzICE9ICdcMCcnIGZhaWxlZC4KKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK1NpZ25lZC1vZmYtYnk6IFJpY2hhcmQgUHVyZGllIDxyaWNoYXJkLnB1cmRpZUBsaW51eGZvdW5kYXRpb24ub3JnPgorU2lnbmVkLW9mZi1ieTogWmhpeGlvbmcgQ2hpIDx6aGl4aW9uZy5jaGlAd2luZHJpdmVyLmNvbT4KK0luZGV4OiBycG0tNS40LjE1L3Rvb2xzL3JwbTJjcGlvLmMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBycG0tNS40LjE1Lm9yaWcvdG9vbHMvcnBtMmNwaW8uYwkyMDEyLTA0LTI3IDAxOjQ2OjUxLjAwMDAwMDAwMCArMDgwMAorKysrIHJwbS01LjQuMTUvdG9vbHMvcnBtMmNwaW8uYwkyMDE2LTA5LTA1IDExOjA3OjMwLjQxOTkwMzMzOCArMDgwMAorQEAgLTg3LDYgKzg3LDggQEAKKyAjZW5kaWYKKyAJKHZvaWQpIHJwbXRzU2V0VlNGbGFncyh0cywgdnNmbGFncyk7CisgCisrCXJwbWNsaUluaXQoYXJnYywgYXJndiwgTlVMTCk7CisrCisgCS8qQC1tdXN0bW9kQCovICAgICAgLyogTENMOiBzZWdmYXVsdCAqLworIAlyYyA9IHJwbVJlYWRQYWNrYWdlRmlsZSh0cywgZmRpLCAicnBtMmNwaW8iLCAmaCk7CisgCS8qQD1tdXN0bW9kQCovCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3JwbS9ycG0vcnBtZGItbW9yZS12ZXJib3NlLWVycm9yLWxvZ2dpbmctaW4tcnBtVGVtcEZpbGUucGF0Y2ggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3JwbS9ycG0vcnBtZGItbW9yZS12ZXJib3NlLWVycm9yLWxvZ2dpbmctaW4tcnBtVGVtcEZpbGUucGF0Y2gKaW5kZXggODA5ZTU0ZS4uM2E2Zjg3NCAxMDA2NDQKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9ycG0vcnBtL3JwbWRiLW1vcmUtdmVyYm9zZS1lcnJvci1sb2dnaW5nLWluLXJwbVRlbXBGaWxlLnBhdGNoCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcnBtL3JwbS9ycG1kYi1tb3JlLXZlcmJvc2UtZXJyb3ItbG9nZ2luZy1pbi1ycG1UZW1wRmlsZS5wYXRjaApAQCAtNSwzMiArNSwxMCBAQAogU2lnbmVkLW9mZi1ieTogTWFya3VzIExlaHRvbmVuIDxtYXJrdXMubGVodG9uZW5AbGludXguaW50ZWwuY29tPgogCiBkaWZmIC0tZ2l0IGEvcnBtZGIvc2lnbmF0dXJlLmMgYi9ycG1kYi9zaWduYXR1cmUuYwotaW5kZXggZGNlNmM0ZS4uYTFkMGYwNiAxMDA2NDQKK2luZGV4IDEwMDIwNGIuLmU1NmFiM2QgMTAwNjQ0CiAtLS0gYS9ycG1kYi9zaWduYXR1cmUuYwogKysrIGIvcnBtZGIvc2lnbmF0dXJlLmMKLUBAIC0zNyw2ICszNyw3IEBAIGludCBycG1UZW1wRmlsZShjb25zdCBjaGFyICogcHJlZml4LCBjb25zdCBjaGFyICoqIGZucHRyLCB2b2lkICogZmRwdHIpCi0gICAgIGludCB0ZW1wdXQ7Ci0gICAgIEZEX3QgZmQgPSBOVUxMOwotICAgICB1bnNpZ25lZCBpbnQgcmFuOwotKyAgICBpbnQgcmV0ID0gMDsKLSAKLSAgICAgaWYgKCFwcmVmaXgpIHByZWZpeCA9ICIiOwotIAotQEAgLTQ0LDggKzQ1LDExIEBAIGludCBycG1UZW1wRmlsZShjb25zdCBjaGFyICogcHJlZml4LCBjb25zdCBjaGFyICoqIGZucHRyLCB2b2lkICogZmRwdHIpCi0gICAgIGlmICghX2luaXRpYWxpemVkKSB7Ci0gCV9pbml0aWFsaXplZCA9IDE7Ci0gCXRlbXBmbiA9IHJwbUdlblBhdGgocHJlZml4LCB0cG1hY3JvLCBOVUxMKTsKLS0JaWYgKHJwbWlvTWtwYXRoKHRlbXBmbiwgMDc1NSwgKHVpZF90KSAtMSwgKGdpZF90KSAtMSkpCi0tCSAgICBnb3RvIGVycnhpdDsKLSsgICAgICAgIHJldCA9IHJwbWlvTWtwYXRoKHRlbXBmbiwgMDc1NSwgKHVpZF90KSAtMSwgKGdpZF90KSAtMSk7Ci0rICAgICAgICBpZiAocmV0KSB7Ci0rICAgICAgICAgICAgcnBtbG9nKFJQTUxPR19FUlIsIF8oImVycm9yIGNyZWF0aW5nIHRlbXBvcmFyeSBkaXJlY3RvcnkgJXM6ICVkXG4iKSwgdGVtcGZuLCByZXQpOwotKyAgICAgICAgICAgIGdvdG8gZXJyeGl0OwotKyAgICAgICAgfQotICAgICB9Ci0gCi0gICAgIC8qIFhYWCBzaG91bGQgcHJvYmFibHkgdXNlIG1rc3RlbXAgaGVyZSAqLwotQEAgLTY4LDEyICs3MiwxNiBAQCBpbnQgcnBtVGVtcEZpbGUoY29uc3QgY2hhciAqIHByZWZpeCwgY29uc3QgY2hhciAqKiBmbnB0ciwgdm9pZCAqIGZkcHRyKQorQEAgLTcyLDEyICs3MiwxNiBAQCBpbnQgcnBtVGVtcEZpbGUoY29uc3QgY2hhciAqIHByZWZpeCwgY29uc3QgY2hhciAqKiBmbnB0ciwgdm9pZCAqIGZkcHRyKQogICNlbmRpZgogIAogIAl0ZW1wdXQgPSB1cmxQYXRoKHRlbXBmbiwgJnRmbik7CmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3JwbS9ycG0vcnBtZGItcHJldmVudC1yYWNlLWluLXRtcGRpci1jcmVhdGlvbi5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcnBtL3JwbS9ycG1kYi1wcmV2ZW50LXJhY2UtaW4tdG1wZGlyLWNyZWF0aW9uLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY0ODNmM2EKLS0tIC9kZXYvbnVsbAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3JwbS9ycG0vcnBtZGItcHJldmVudC1yYWNlLWluLXRtcGRpci1jcmVhdGlvbi5wYXRjaApAQCAtMCwwICsxLDQxIEBACitycG1kYjogcHJldmVudCByYWNlIGluIHRtcGRpciBjcmVhdGlvbgorCitJZiB0d28gKG9yIG1vcmUpIGluc3RhbmNlcyBvZiBycG0gYXJlIHJ1bm5pbmcgYXQgdGhlIHNhbWUgdGltZSB0aGV5IG1heQorYmUgdHJ5aW5nIHRvIGNyZWF0ZSB0aGUgc2FtZSAoYmFzZS0pdGVtcG9yYXJ5IGRpcmVjdG9yeSBhdCB0aGUgc2FtZSB0aW1lCit3aGljaCBjYXVzZXMgdGhlIG90aGVyIG1rZGlyIHRvIGZhaWwgd2l0aCBFRVhJU1QuIFRoaXMgcGF0Y2ggcHJldmVudHMgYQorZmFpbHVyZSBjYXVzZWQgYnkgdGhpcyByYWNlIGJ5IGlnbm9yaW5nIEVFWElTVCBlcnJvciBvbiBkaXJlY3RvcnkKK2NyZWF0aW9uLgorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworU2lnbmVkLW9mZi1ieTogTWFya3VzIExlaHRvbmVuIDxtYXJrdXMubGVodG9uZW5AbGludXguaW50ZWwuY29tPgorCitkaWZmIC0tZ2l0IGEvcnBtZGIvc2lnbmF0dXJlLmMgYi9ycG1kYi9zaWduYXR1cmUuYworaW5kZXggZGNlNmM0ZS4uMTAwMjA0YiAxMDA2NDQKKy0tLSBhL3JwbWRiL3NpZ25hdHVyZS5jCisrKysgYi9ycG1kYi9zaWduYXR1cmUuYworQEAgLTM3LDYgKzM3LDcgQEAgaW50IHJwbVRlbXBGaWxlKGNvbnN0IGNoYXIgKiBwcmVmaXgsIGNvbnN0IGNoYXIgKiogZm5wdHIsIHZvaWQgKiBmZHB0cikKKyAgICAgaW50IHRlbXB1dDsKKyAgICAgRkRfdCBmZCA9IE5VTEw7CisgICAgIHVuc2lnbmVkIGludCByYW47CisrICAgIGludCByZXQgPSAwOworIAorICAgICBpZiAoIXByZWZpeCkgcHJlZml4ID0gIiI7CisgCitAQCAtNDQsOCArNDUsMTEgQEAgaW50IHJwbVRlbXBGaWxlKGNvbnN0IGNoYXIgKiBwcmVmaXgsIGNvbnN0IGNoYXIgKiogZm5wdHIsIHZvaWQgKiBmZHB0cikKKyAgICAgaWYgKCFfaW5pdGlhbGl6ZWQpIHsKKyAJX2luaXRpYWxpemVkID0gMTsKKyAJdGVtcGZuID0gcnBtR2VuUGF0aChwcmVmaXgsIHRwbWFjcm8sIE5VTEwpOworLQlpZiAocnBtaW9Na3BhdGgodGVtcGZuLCAwNzU1LCAodWlkX3QpIC0xLCAoZ2lkX3QpIC0xKSkKKy0JICAgIGdvdG8gZXJyeGl0OworKyAgICAgICAgcmV0ID0gcnBtaW9Na3BhdGgodGVtcGZuLCAwNzU1LCAodWlkX3QpIC0xLCAoZ2lkX3QpIC0xKTsKKysgICAgICAgIGlmIChyZXQgJiYgcmV0ICE9IEVFWElTVCkgeworKyAgICAgICAgICAgIHJwbWxvZyhSUE1MT0dfRVJSLCBfKCJlcnJvciBjcmVhdGluZyB0ZW1wb3JhcnkgZGlyZWN0b3J5ICVzOiAlZFxuIiksIHRlbXBmbiwgcmV0KTsKKysgICAgICAgICAgICBnb3RvIGVycnhpdDsKKysgICAgICAgIH0KKyAgICAgfQorIAorICAgICAvKiBYWFggc2hvdWxkIHByb2JhYmx5IHVzZSBta3N0ZW1wIGhlcmUgKi8KKy0tIAorMi42LjYKKwpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9ycG0vcnBtXzUuNCtjdnMuYmIgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3JwbS9ycG1fNS40K2N2cy5iYgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDk5MWY2ZC4uMDAwMDAwMAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3JwbS9ycG1fNS40K2N2cy5iYgorKysgL2Rldi9udWxsCkBAIC0xLDczMCArMCwwIEBACi1TVU1NQVJZID0gIlRoZSBSUE0gcGFja2FnZSBtYW5hZ2VtZW50IHN5c3RlbSIKLURFU0NSSVBUSU9OID0gIlRoZSBSUE0gUGFja2FnZSBNYW5hZ2VyIChSUE0pIGlzIGEgcG93ZXJmdWwgY29tbWFuZCBsaW5lIGRyaXZlbiBcCi1wYWNrYWdlIG1hbmFnZW1lbnQgc3lzdGVtIGNhcGFibGUgb2YgaW5zdGFsbGluZywgdW5pbnN0YWxsaW5nLCBcCi12ZXJpZnlpbmcsIHF1ZXJ5aW5nLCBhbmQgdXBkYXRpbmcgc29mdHdhcmUgcGFja2FnZXMuIEVhY2ggc29mdHdhcmUgXAotcGFja2FnZSBjb25zaXN0cyBvZiBhbiBhcmNoaXZlIG9mIGZpbGVzIGFsb25nIHdpdGggaW5mb3JtYXRpb24gYWJvdXQgXAotdGhlIHBhY2thZ2UgbGlrZSBpdHMgdmVyc2lvbiwgYSBkZXNjcmlwdGlvbiwgZXRjLiIKLQotU1VNTUFSWV8ke1BOfS1saWJzID0gIkxpYnJhcmllcyBmb3IgbWFuaXB1bGF0aW5nIFJQTSBwYWNrYWdlcyIKLURFU0NSSVBUSU9OXyR7UE59LWxpYnMgPSAiVGhpcyBwYWNrYWdlIGNvbnRhaW5zIHRoZSBSUE0gc2hhcmVkIGxpYnJhcmllcy4iCi0KLVNVTU1BUllfJHtQTn0tZGV2ID0gIkRldmVsb3BtZW50IGZpbGVzIGZvciBtYW5pcHVsYXRpbmcgUlBNIHBhY2thZ2VzIgotREVTQ1JJUFRJT05fJHtQTn0tZGV2ID0gIlRoaXMgcGFja2FnZSBjb250YWlucyB0aGUgUlBNIEMgbGlicmFyeSBhbmQgaGVhZGVyIGZpbGVzLiBUaGVzZSBcCi1kZXZlbG9wbWVudCBmaWxlcyB3aWxsIHNpbXBsaWZ5IHRoZSBwcm9jZXNzIG9mIHdyaXRpbmcgcHJvZ3JhbXMgdGhhdCBcCi1tYW5pcHVsYXRlIFJQTSBwYWNrYWdlcyBhbmQgZGF0YWJhc2VzLiBUaGVzZSBmaWxlcyBhcmUgaW50ZW5kZWQgdG8gXAotc2ltcGxpZnkgdGhlIHByb2Nlc3Mgb2YgY3JlYXRpbmcgZ3JhcGhpY2FsIHBhY2thZ2UgbWFuYWdlcnMgb3IgYW55IFwKLW90aGVyIHRvb2xzIHRoYXQgbmVlZCBhbiBpbnRpbWF0ZSBrbm93bGVkZ2Ugb2YgUlBNIHBhY2thZ2VzIGluIG9yZGVyIFwKLXRvIGZ1bmN0aW9uLiIKLQotU1VNTUFSWV8ke1BOfS1jb21tb24gPSAiQ29tbW9uIFJQTSBwYXRocywgc2NyaXB0cywgZG9jdW1lbnRhdGlvbiBhbmQgY29uZmlndXJhdGlvbiIKLURFU0NSSVBUSU9OXyR7UE59LWNvbW1vbiA9ICJUaGUgcnBtLWNvbW1vbiBwYWNrYWdlIGNvbnRhaW5zIHBhdGhzLCBzY3JpcHRzLCBkb2N1bWVudGF0aW9uIFwKLWFuZCBjb25maWd1cmF0aW9uIGNvbW1vbiBiZXR3ZWVuIFJQTSBQYWNrYWdlIE1hbmFnZXIuIgotCi1TVU1NQVJZXyR7UE59LWJ1aWxkID0gIlNjcmlwdHMgYW5kIGV4ZWN1dGFibGUgcHJvZ3JhbXMgdXNlZCB0byBidWlsZCBwYWNrYWdlcyIKLURFU0NSSVBUSU9OXyR7UE59LWJ1aWxkID0gIlRoZSBycG0tYnVpbGQgcGFja2FnZWMgb250YWlucyB0aGUgc2NyaXB0cyBhbmQgZXhlY3V0YWJsZSBwcm9ncmFtcyBcCi10aGF0IGFyZSB1c2VkIHRvIGJ1aWxkIHBhY2thZ2VzIHVzaW5nIHRoZSBSUE0gUGFja2FnZSBNYW5hZ2VyLiIKLQotU1VNTUFSWV9weXRob24tcnBtID0gIlB5dGhvbiBiaW5kaW5ncyBmb3IgYXBwcyB3aGljaCB3aWxsIG1hbnVwdWxhdGUgUlBNIHBhY2thZ2VzIgotREVTQ1JJUFRJT05fcHl0aG9uLXJwbSA9ICJUaGUgcnBtLXB5dGhvbiBwYWNrYWdlIGNvbnRhaW5zIGEgbW9kdWxlIHRoYXQgcGVybWl0cyBhcHBsaWNhdGlvbnMgXAotd3JpdHRlbiBpbiB0aGUgUHl0aG9uIHByb2dyYW1taW5nIGxhbmd1YWdlIHRvIHVzZSB0aGUgaW50ZXJmYWNlIFwKLXN1cHBsaWVkIGJ5IHRoZSBSUE0gUGFja2FnZSBNYW5hZ2VyIGxpYnJhcmllcy4iCi0KLVNVTU1BUllfcGVybC1tb2R1bGUtcnBtID0gIlBlcmwgYmluZGluZ3MgZm9yIGFwcHMgd2hpY2ggd2lsbCBtYW5pcHVsYXRlIFJQTSBwYWNrYWdlcyIKLURFU0NSSVBUSU9OX3BlcmwtbW9kdWxlcy1ycG0gPSAiVGhlIHBlcmwtbW9kdWxlcy1ycG0gcGFja2FnZSBjb250YWlucyBhIG1vZHVsZSB0aGF0IHBlcm1pdHMgYXBwbGljYXRpb25zIFwKLXdyaXR0ZW4gaW4gdGhlIFBlcmwgcHJvZ3JhbW1pbmcgbGFuZ3VhZ2UgdG8gdXNlIHRoZSBpbnRlcmZhY2UgXAotc3VwcGxpZWQgYnkgdGhlIFJQTSBQYWNrYWdlIE1hbmFnZXIgbGlicmFyaWVzLiIKLQotSE9NRVBBR0UgPSAiaHR0cDovL3JwbTUub3JnLyIKLUxJQ0VOU0UgPSAiTEdQTHYyLjEgJiBBcGFjaGUtMi4wIgotTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORy5MSUI7bWQ1PTJkNTAyNWQ0YWEzNDk1YmVmZWY4ZjE3MjA2YTViMGExIgotTElDX0ZJTEVTX0NIS1NVTSArPSAiZmlsZTovL3JwbWlvL21vbmdvLmM7YmVnaW49NTtlbmQ9MTg7bWQ1PWQ4MzI3YmEyYzcxNjY0YzA1OTE0M2U2ZDMzM2I4OTAxIgotCi0jIFdlIG11c3QgaGF2ZSBnZXR0ZXh0LW5hdGl2ZSwgd2UgbmVlZCBnZXR0ZXh0aXplLCB3aGljaCBtYXkgbm90IGJlIHByb3ZpZGVkCi1ERVBFTkRTID0gImxpYnBjcmUgYXR0ciBhY2wgb3NzcC11dWlkIGZpbGUgYnlhY2MtbmF0aXZlIGdldHRleHQtbmF0aXZlIgotREVQRU5EU19hcHBlbmRfY2xhc3MtbmF0aXZlID0gIiBmaWxlLXJlcGxhY2VtZW50LW5hdGl2ZSIKLQotIyBBcHBseSB2YXJpb3VzIGZpeHVwcyB0aGF0IGFyZSB1bmlxdWUgdG8gdGhlIENWUyBlbnZpcm9ubWVudAotZG9fZml4dXBfdW5wYWNrICgpIHsKLQkjICdsbicgaXNuJ3QgcmVsaWFibGUsIGFuZCAnbXYnIGNvdWxkIGJyZWFrIGxhdGVyIGJ1aWxkcwotCXJtIC1yZiAke1N9L3N5Y2sgOyBjcCAtciAke1dPUktESVJ9L3N5Y2sgJHtTfS8uCi0Jcm0gLXJmICR7U30vbHVhIDsgY3AgLXIgJHtXT1JLRElSfS9sdWEgJHtTfS8uCi0Jcm0gLXJmICR7U30vcG9wdCA7IGNwIC1yICR7V09SS0RJUn0vcG9wdCAke1N9Ly4KLQlybSAtcmYgJHtTfS9iZWVjcnlwdCA7IGNwIC1yICR7V09SS0RJUn0vYmVlY3J5cHQgJHtTfS8uCi19Ci0KLWFkZHRhc2sgZml4dXBfdW5wYWNrIGFmdGVyIGRvX3VucGFjayBiZWZvcmUgZG9fcGF0Y2gKLQotIyBUaGlzIHJlY2lwZSBpcyByZWFsbHkgZGVzaWduZWQgZm9yIGRldmVsb3BtZW50Li4uIHRvIFRyeSBvdXQgdGhlIGxhdGVzdAotIyBjb21tdW5pdHkgd29yayBpbiBwcm9ncmVzcy4KLURFRkFVTFRfUFJFRkVSRU5DRSA9ICItMSIKLQotUyA9ICIke1dPUktESVJ9L3JwbSIKLQotIyBycG0yY3BpbyBpcyBhIHNoZWxsIHNjcmlwdCwgd2hpY2ggaXMgcGFydCBvZiB0aGUgcnBtIHNyYy5ycG0uICBJdCBpcyBuZWVkZWQKLSMgaW4gb3JkZXIgdG8gZXh0cmFjdCB0aGUgZGlzdHJpYnV0aW9uIFNSUE0gaW50byBhIGZvcm1hdCB3ZSBjYW4gZXh0cmFjdC4uLgotU1JDX1VSSSA9ICJjdnM6Ly9hbm9ueW1vdXNAcnBtNS5vcmcvY3ZzO3RhZz1ycG0tNV80O21vZHVsZT1ycG0gXAotCSAgIGN2czovL2Fub255bW91c0BycG01Lm9yZy9jdnM7dGFnPXJwbS01XzQ7bW9kdWxlPXN5Y2sgXAotCSAgIGN2czovL2Fub255bW91c0BycG01Lm9yZy9jdnM7dGFnPXJwbS01XzQ7bW9kdWxlPWx1YSBcCi0JICAgY3ZzOi8vYW5vbnltb3VzQHJwbTUub3JnL2N2czt0YWc9cnBtLTVfNDttb2R1bGU9cG9wdCBcCi0JICAgY3ZzOi8vYW5vbnltb3VzQHJwbTUub3JnL2N2czt0YWc9cnBtLTVfNDttb2R1bGU9YmVlY3J5cHQgXAotCSAgIGZpbGU6Ly9wZXJmaWxlX3JwbWRlcHMuc2ggXAotCSAgIGZpbGU6Ly9weXRob25kZXBzLnNoIFwKLSIKLQotIyBCdWcgZml4ZXMKLVNSQ19VUkkgKz0gIiBcCi0JICAgZmlsZTovL2hlYWRlci1pbmNsdWRlLWZpeC5wYXRjaCBcCi0JICAgZmlsZTovL3JwbS1saWJzcWwtZml4LnBhdGNoIFwKLQkgICBmaWxlOi8vcnBtLXBsYXRmb3JtLnBhdGNoIFwKLQkgICBmaWxlOi8vcnBtLXBsYXRmb3JtMi5wYXRjaCBcCi0JICAgZmlsZTovL3JwbS10b29scy1tdHJlZS1MREZMQUdTLnBhdGNoIFwKLQkgICBmaWxlOi8vcnBtLWNhbm9uYXJjaC5wYXRjaCBcCi0JICAgZmlsZTovL3JwbS1uby1sb29wbXNnLnBhdGNoIFwKLQkgICBmaWxlOi8vcnBtLXJlc29sdmVkZXAucGF0Y2ggXAotCSAgIGZpbGU6Ly9ycG0tcGFja2FnZW9yaWdpbi5wYXRjaCBcCi0JICAgZmlsZTovL3VjbGliYy1zdXBwb3J0LnBhdGNoIFwKLQkgICBmaWxlOi8vcnBtYXRjaC5wYXRjaCBcCi0JICAgZmlsZTovL21ha2VmaWxlLWFtLWV4ZWMtaG9vay5wYXRjaCBcCi0JICAgZmlsZTovL3B5dGhvbi1ycG0tcnBtc2Vuc2UucGF0Y2ggXAotCSAgIGZpbGU6Ly9kZWJ1Z2VkaXQtc2Vndi5wYXRjaCBcCi0JICAgZmlsZTovL2RlYnVnZWRpdC12YWxpZC1maWxlLXRvLWZpeC1zZWdtZW50LWZhdWx0LnBhdGNoIFwKLQkgICBmaWxlOi8vcnBtLXBsYXRmb3JtLWZpbGUtZml4LnBhdGNoIFwKLQkgICBmaWxlOi8vcnBtLWxzYi1jb21wYXRpYmlsaXR5LnBhdGNoIFwKLQkgICBmaWxlOi8vcnBtLXRhZy1nZW5lcmF0ZS1lbmRpYW4tY29udmVyc2lvbi1maXgucGF0Y2ggXAotCSAgIGZpbGU6Ly9ycG0taGFyZGxpbmstc2VnZmF1bHQtZml4LnBhdGNoIFwKLQkgICBmaWxlOi8vcnBtLXBheWxvYWQtdXNlLWhhc2hlZC1pbm9kZS5wYXRjaCBcCi0JICAgZmlsZTovL3JwbS1maXgtbG9naW8tY3AucGF0Y2ggXAotCSAgIGZpbGU6Ly8wMDAxLXVzaW5nLXBvcHRQYXJzZUFyZ3ZTdHJpbmctdG8tcGFyc2UtdGhlLV9ncGdfY2hlY2tfcGEucGF0Y2ggXAotCSAgIGZpbGU6Ly9ycG0tb3BlbmRiLWJlZm9yZS12ZXJpZnlzY3JpcHQtdG8tYXZvaWQtbnVsbC1wb2ludC5wYXRjaCBcCi0JICAgZmlsZTovLzAwMDEtZGVmaW5lLUVNX0FBUkNINjQucGF0Y2ggXAotCSAgIGZpbGU6Ly9ycG0tcnBtZmMuYy1maXgtZm9yLU4zMi1NSVBTNjQucGF0Y2ggXAotCSAgIGZpbGU6Ly9ycG0tbGliLXRyYW5zYWN0aW9uLmMtZml4LWZpbGUtY29uZmxpY3RzLWZvci1taXBzNjQtTjMyLnBhdGNoIFwKLQkgICBmaWxlOi8vcnBtLW1vbmdvZGItc2FzbC5wYXRjaCBcCi0JICAgZmlsZTovL3JwbS1maXgtcGFyc2VFbWJlZGRlZC5wYXRjaCBcCi0JICAgZmlsZTovL3JwbS1ycG1pby1oZWFkZXJzLnBhdGNoIFwKLQkgICBmaWxlOi8vcnBtLXB5dGhvbi1yZXN0b3JlLW9yaWdpbi5wYXRjaCBcCi0JICAgZmlsZTovL3JwbS1rZWNjYWstc3NlLWludHJpbi5wYXRjaCBcCi0JICAgZmlsZTovL3JwbS1hdG9taWMtb3BzLnBhdGNoIFwKLQkgICBmaWxlOi8vcnBtLWdudS1hdG9taWMucGF0Y2ggXAotCSAgIGZpbGU6Ly9ycG0tdGFnbmFtZS10eXBlLnBhdGNoIFwKLQkgICBmaWxlOi8vcnBtLXB5dGhvbi10YWduYW1lLnBhdGNoIFwKLQkgICBmaWxlOi8vcnBtLXB5dGhvbi1BZGRFcmFzZS5wYXRjaCBcCi0JICAgZmlsZTovL3JwbS1ycG1wZ3AtcG9wdC5wYXRjaCBcCi0JICAgZmlsZTovLzAwMDEtRGlzYWJsZS1fX3N5bmNfYWRkX2FuZF9mZXRjaF84LW9uLW5pb3MyLnBhdGNoIFwKLSIKLQotIyBPRSBzcGVjaWZpYyBjaGFuZ2VzCi1TUkNfVVJJICs9ICIgXAotCSAgIGZpbGU6Ly9ycG0tbG9nLWF1dG8tcm0ucGF0Y2ggXAotCSAgIGZpbGU6Ly9ycG0tZGItcmVkdWNlLnBhdGNoIFwKLQkgICBmaWxlOi8vcnBtLWF1dG9nZW4ucGF0Y2ggXAotCSAgIGZpbGU6Ly9ycG0tc2hvd3JjLnBhdGNoIFwKLQkgICBmaWxlOi8vcnBtLWZpbGVjbGFzcy5wYXRjaCBcCi0JICAgZmlsZTovL3JwbS1zY3JpcHRsZXRleGVjaGVscGVyLnBhdGNoIFwKLQkgICBmaWxlOi8vcnBtZGVwcy1vZWNvcmUucGF0Y2ggXAotCSAgIGZpbGU6Ly9ycG0tbm8tcGVybC11cnBtLnBhdGNoIFwKLQkgICBmaWxlOi8vcnBtLW1hY3Jvcy5wYXRjaCBcCi0JICAgZmlsZTovL3JwbS1sdWEucGF0Y2ggXAotCSAgIGZpbGU6Ly9ycG0tb3NzcC11dWlkLnBhdGNoIFwKLQkgICBmaWxlOi8vcnBtLXV1aWQtaW5jbHVkZS5wYXRjaCBcCi0JICAgZmlsZTovL3JwbS1wa2djb25maWdkZXBzLnBhdGNoIFwKLQkgICBmaWxlOi8vbm8tbGRmbGFncy1pbi1wa2djb25maWcucGF0Y2ggXAotCSAgIGZpbGU6Ly9kYmNvbnZlcnQucGF0Y2ggXAotCSAgIGZpbGU6Ly9ycG0tZGJfYnVmZmVyX3NtYWxsLnBhdGNoIFwKLQkgICBmaWxlOi8vcnBtLXB5LWluaXQucGF0Y2ggXAotCSAgIGZpbGU6Ly9ycG0tcmVsb2MtbWFjcm9zLnBhdGNoIFwKLQkgICBmaWxlOi8vcnBtLWRiNS1vci1kYjYucGF0Y2ggXAotCSAgIGZpbGU6Ly9ycG0tZGI2MC5wYXRjaCBcCi0JICAgZmlsZTovL3JwbXF2X2NjX2JfZ29uZS5wYXRjaCBcCi0JICAgZmlsZTovL3JwbS1yZWFscGF0aC5wYXRjaCBcCi0JICAgZmlsZTovL3JwbS1jaGVjay1yb290cGF0aC1yZWFzb25hYmxlbmVzcy5wYXRjaCBcCi0JICAgZmlsZTovL3JwbS1tYWNyb3MuaW4tZGlzYWJsZS1leHRlcm5hbC1rZXktc2VydmVyLnBhdGNoIFwKLQkgICBmaWxlOi8vY29uZmlndXJlLmFjLWNoZWNrLWZvci1ib3RoLWdwZzItYW5kLWdwZy5wYXRjaCBcCi0JICAgZmlsZTovL3JwbS1kaXNhYmxlLWF1dG8tc3RhY2stcHJvdGVjdG9yLnBhdGNoIFwKLQkgICBmaWxlOi8vcG9wdC1kaXNhYmxlLWF1dG8tc3RhY2stcHJvdGVjdG9yLnBhdGNoIFwKLQkgICBmaWxlOi8vcnBtLXN5Y2stZml4LWdyYW0ucGF0Y2ggXAotCSAgIGZpbGU6Ly9ycG0tcnBtZGItZ3JhbW1hci5wYXRjaCBcCi0JICAgZmlsZTovL3JwbS1kaXNhYmxlLWJsYWtldGVzdC5wYXRjaCBcCi0JICAgZmlsZTovL3JwbS1hdXRvZ2VuLWZvcmNlLnBhdGNoIFwKLSIKLQotU1JDX1VSSV9hcHBlbmRfbGliYy1tdXNsID0gIlwKLSAgICAgICAgICAgZmlsZTovLzAwMDEtcnBtLUZpeC1idWlsZC1vbi1tdXNsLnBhdGNoIFwKLSIKLSMgVW5jb21tZW50IHRoZSBmb2xsb3dpbmcgbGluZSB0byBlbmFibGUgcGxhdGZvcm0gc2NvcmUgZGVidWdnaW5nCi0jIFRoaXMgaXMgdXNlZnVsIHdoZW4gaWRlbnRpZnlpbmcgaXNzdWVzIHdpdGggU21hcnQgYmVpbmcgdW5hYmxlCi0jIHRvIHByb2Nlc3MgY2VydGFpbiBwYWNrYWdlIGZlZWRzLgotI1NSQ19VUkkgKz0gImZpbGU6Ly9ycG0tZGVidWctcGxhdGZvcm0ucGF0Y2giCi0KLWluaGVyaXQgYXV0b3Rvb2xzIGdldHRleHQKLQotYWNwYXRocyA9ICItSSAke1N9L2RiL2Rpc3QvYWNsb2NhbCAtSSAke1N9L2RiL2Rpc3QvYWNsb2NhbF9qYXZhIgotCi0jIFRoZSBsb2NhbCBkaXN0cmlidXRpb24gbWFjcm8gZGlyZWN0b3J5Ci1kaXN0cm9tYWNyb2RpciA9ICIke2xpYmRpcn0vcnBtL3Bva3kiCi0KLSMgU3BlY2lmeSB0aGUgZGVmYXVsdCBycG0gbWFjcm9zIGluIHRlcm1zIG9mIGFkanVzdGFibGUgdmFyaWFibGVzCi1ycG1fbWFjcm9zID0gIiV7X3VzcmxpYnJwbX0vbWFjcm9zOiV7X3VzcmxpYnJwbX0vJHtESVNUUk99L21hY3Jvczole191c3JsaWJycG19LyR7RElTVFJPfS8le190YXJnZXR9L21hY3Jvczole19ldGNycG19L21hY3Jvcy4qOiV7X2V0Y3JwbX0vbWFjcm9zOiV7X2V0Y3JwbX0vJXtfdGFyZ2V0fS9tYWNyb3M6fi8ub2VycG1tYWNyb3MiCi1ycG1fbWFjcm9zX2NsYXNzLW5hdGl2ZSA9ICIle191c3JsaWJycG19L21hY3Jvczole191c3JsaWJycG19LyR7RElTVFJPfS9tYWNyb3M6JXtfdXNybGlicnBtfS8ke0RJU1RST30vJXtfdGFyZ2V0fS9tYWNyb3M6fi8ub2VycG1tYWNyb3MiCi1ycG1fbWFjcm9zX2NsYXNzLW5hdGl2ZXNkayA9ICIle191c3JsaWJycG19L21hY3Jvczole191c3JsaWJycG19LyR7RElTVFJPfS9tYWNyb3M6JXtfdXNybGlicnBtfS8ke0RJU1RST30vJXtfdGFyZ2V0fS9tYWNyb3M6fi8ub2VycG1tYWNyb3MiCi0KLSMgc3FsaXRlIGx1YSB0Y2wgYXVnZWFzIG5zcyBnY3J5cHQgbmVvbiB4eiB4YXIga2V5dXRpbHMgcGVybCBzZWxpbnV4Ci0KLSMgU2V0IHRoZSBkaWdlc3QgYWxnb3JpdGhtIHVzZWQgZm9yIHZlcmlmeWluZyBmaWxlIGludGVncml0eQotIyBJZiB0aGlzIHZhbHVlIGNoYW5nZXMsIGFuZCB0d28gZGlmZmVyZW50IHBhY2thZ2VzIGhhdmUgZGlmZmVyZW50IHZhbHVlcwotIyB0aGUgInNhbWUgZmlsZSIgdmFsaWRhdGlvbiAodHdvIHBhY2thZ2VzIGhhdmUgYSBub24tY29uZmxpY3QgZmlsZSkKLSMgd2lsbCBmYWlsLiAgVGhpcyBtYXkgbGVhZCB0byB1cGdyYWRlIHByb2JsZW1zLiAgWW91IHNob3VsZCB0cmVhdCB0aGlzCi0jIHZhbHVlIGFzIGEgZGlzdHJpYnV0aW9uIHdpZGUgc2V0dGluZywgYW5kIG9ubHkgY2hhbmdlIGl0IHdoZW4geW91IGludGVuZAotIyBhIGZ1bGwgc3lzdGVtIHVwZ3JhZGUhCi0jCi0jIERlZmluZWQgZmlsZSBkaWdlc3QgYWxnb3JpdGhtIHZhbHVlcyAobm90ZTogbm90IGFsbCBhcmUgYXZhaWxhYmxlISk6Ci0jICAgICAgIDEgICAgICAgTUQ1IChsZWdhY3kgUlBNIGRlZmF1bHQpCi0jICAgICAgIDIgICAgICAgU0hBMQotIyAgICAgICAzICAgICAgIFJJUEVNRC0xNjAKLSMgICAgICAgNSAgICAgICBNRDIKLSMgICAgICAgNiAgICAgICBUSUdFUi0xOTIKLSMgICAgICAgOCAgICAgICBTSEEyNTYKLSMgICAgICAgOSAgICAgICBTSEEzODQKLSMgICAgICAgMTAgICAgICBTSEE1MTIKLSMgICAgICAgMTEgICAgICBTSEEyMjQKLSMgICAgICAgMTA0ICAgICBNRDQKLSMgICAgICAgMTA1ICAgICBSSVBFTUQtMTI4Ci0jICAgICAgIDEwNiAgICAgQ1JDLTMyCi0jICAgICAgIDEwNyAgICAgQURMRVItMzIKLSMgICAgICAgMTA4ICAgICBDUkMtNjQgKEVDTUEtMTgyIHBvbHlub21pYWwsIHVudGVzdGVkIHVpbnQ2NF90IHByb2JsZW1zKQotIyAgICAgICAxMDkgICAgIEplbmtpbnMgbG9va3VwMy5jIGhhc2hsaXR0bGUoKQotIyAgICAgICAxMTEgICAgIFJJUEVNRC0yNTYKLSMgICAgICAgMTEyICAgICBSSVBFTUQtMzIwCi0jICAgICAgIDE4OCAgICAgQkxBS0UyQgotIyAgICAgICAxODkgICAgIEJMQUtFMkJQCi0jICAgICAgIDE5MCAgICAgQkxBS0UyUwotIyAgICAgICAxOTEgICAgIEJMQUtFMlNQCi1SUE1fRklMRV9ESUdFU1RfQUxHTyA/PSAiMSIKLQotIyBBbGwgcGFja2FnZXMgYnVpbGQgd2l0aCBSUE01IGNvbnRhaW4gYSBub24tcmVwdWRpYWJsZSBzaWduYXR1cmUuCi0jIFRoZSBwdXJwb3NlIG9mIHRoaXMgc2lnbmF0dXJlIGlzIG5vdCB0byBzaG93IGF1dGhlbnRpY2l0eSBvZiBhIHBhY2thZ2UsCi0jIGJ1dCBpbnN0ZWFkIGFjdCBhcyBhIHNlY29uZGFyeSBwYWNrYWdlIHdpZGUgdmFsaWRhdGlvbiB0aGF0IHNob3dzIGl0Ci0jIHdhc24ndCBkYW1hZ2VkIGJ5IGFjY2lkZW50IGluIHRyYW5zcG9ydC4gIChXaGVuIGxhdGVyIHlvdSBzaWduIHRoZSBwYWNrYWdlLCAKLSMgdGhpcyBzaWduYXR1cmUgbWF5IG9yIG1heSBub3QgYmUgcmVwbGFjZWQgYXMgdGhlcmUgYXJlIHRocmVlIHNpZ25hdHVyZSAKLSMgc2xvdHMsIG9uZSBmb3IgRFNBL1JTQSwgb25lIGZvciBFQ1NEQSwgYW5kIG9uZSByZXNlcnZlZC4pCi0jCi0jIFRoZXJlIGlzIGEga25vd24gaXNzdWUgdy8gUlNBIHNpZ25hdHVyZXMgdGhhdCBpZiB0aGV5IHN0YXJ0IHdpdGggYW4gMHgwMAotIyB0aGUgc2lnbmluZyBhbmQgdmFsaWRhdGlvbiBtYXkgZmFpbC4KLSMKLSMgVGhlIGZvbGxvd2luZyBpcyB0aGUgbGlzdCBvZiBjaG9pY2VzIGZvciB0aGUgbm9uLXJwdWRpYWJsZSBzaWduYXR1cmUKLSMgKG5vdGU6IG5vdCBhbGwgb2YgdGhlc2UgYXJlIGltcGxlbWVudGVkKToKLSMgICAgICAgRFNBICAgICAgICAgICAgIChkZWZhdWx0KQotIyAgICAgICBSU0EgICAgICAgICAgICAgKGltcGxpZXMgU0hBMSkKLSMgICAgICAgRUNEU0EgICAgICAgICAgIChpbXBsaWVzIFNIQTI1NikKLSMgICAgICAgRFNBL1NIQTEKLSMgICAgICAgRFNBL1NIQTIyNAotIyAgICAgICBEU0EvU0hBMjU2Ci0jICAgICAgIERTQS9TSEEzODQKLSMgICAgICAgRFNBL1NIQTUxMgotIyAgICAgICBSU0EvU0hBMQotIyAgICAgICBSU0EvU0hBMjI0Ci0jICAgICAgIFJTQS9TSEEyNTYKLSMgICAgICAgUlNBL1NIQTM4NAotIyAgICAgICBSU0EvU0hBNTEyCi0jICAgICAgIEVDRFNBL1NIQTIyNCAgICAodXNpbmcgTklTVCBQLTIyNCkKLSMgICAgICAgRUNEU0EvU0hBMjU2ICAgICh1c2luZyBOSVNUIFAtMjU2KQotIyAgICAgICBFQ0RTQS9TSEEzODQgICAgKHVzaW5nIE5JU1QgUC0zODQpCi0jICAgICAgIEVDRFNBL1NIQTUxMiAgICAodXNpbmcgTklTVCBQLTUyMSkKLVJQTV9TRUxGX1NJR05fQUxHTyA/PSAiRFNBIgotCi0jIE5vdGU6IHBlcmwgYW5kIHNxbGl0ZSB3L28gZGIgc3BlY2lmaWVkIGRvZXMgbm90IGN1cnJlbnRseSB3b3JrLgotIyAgICAgICB0Y2wsIGF1Z2VhcywgbnNzLCBnY3J5cHQsIHhhciBhbmQga2V5dXRpbHMgc3VwcG9ydCBpcyB1bnRlc3RlZC4KLVBBQ0tBR0VDT05GSUcgPz89ICJkYiBiemlwMiB6bGliIHBvcHQgb3BlbnNzbCBsaWJlbGYgcHl0aG9uIgotCi0jIE5vdGU6IHN3aXRjaGluZyB0byBpbnRlcm5hbCBwb3B0IG1heSBub3Qgd29yaywgYXMgaXQgd2lsbCBnZW5lcmF0ZQotIyBhIHNoYXJlZCBsaWJyYXJ5IHdoaWNoIHdpbGwgaW50ZW50aW9uYWxseSBub3QgYmUgcGFja2FnZWQuCi0jCi0jIElmIHlvdSBpbnRlbmQgdG8gdXNlIHRoZSBpbnRlcm5hbCB2ZXJzaW9uLCBhZGRpdGlvbmFsIHdvcmsgbWF5IGJlIHJlcXVpcmVkLgotUEFDS0FHRUNPTkZJR1twb3B0XSA9ICItLXdpdGgtcG9wdD1leHRlcm5hbCwtLXdpdGgtcG9wdD1pbnRlcm5hbCxwb3B0LCIKLQotUEFDS0FHRUNPTkZJR1tiemlwMl0gPSAiLS13aXRoLWJ6aXAyLC0td2l0aG91dC1iemlwMixiemlwMiwiCi1QQUNLQUdFQ09ORklHW3h6XSA9ICItLXdpdGgteHosLS13aXRob3V0LXh6LHh6LCIKLVBBQ0tBR0VDT05GSUdbemxpYl0gPSAiLS13aXRoLXpsaWIsLS13aXRob3V0LXpsaWIsemxpYiwiCi1QQUNLQUdFQ09ORklHW3hhcl0gPSAiLS13aXRoLXhhciwtLXdpdGhvdXQteGFyLHhhciwiCi0KLVdJVEhfUFlUSE9OID0gIiAtLXdpdGgtcHl0aG9uPSR7UFlUSE9OX0JBU0VWRVJTSU9OfSBcCi0JCS0td2l0aC1weXRob24taW5jLWRpcj0ke1NUQUdJTkdfSU5DRElSfS9weXRob24ke1BZVEhPTl9CQVNFVkVSU0lPTn0gXAotCQktLXdpdGgtcHl0aG9uLWxpYi1kaXI9JHtsaWJkaXJ9L3B5dGhvbiR7UFlUSE9OX0JBU0VWRVJTSU9OfS9zaXRlLXBhY2thZ2VzIFwKLQkJLS13aXRob3V0LXB5dGhvbmVtYmVkIgotUEFDS0FHRUNPTkZJR1tweXRob25dID0gIiR7V0lUSF9QWVRIT059LC0td2l0aG91dC1weXRob24scHl0aG9uLCIKLQotIyBQZXJsIG1vZHVsZXMgYXJlIG5vdCBidWlsdCwgYnV0IHRoZXkgY291bGQgYmUgZW5hYmxlZCBmYWlybHkgZWFzaWx5Ci0jIHRoZSBwZXJsIG1vZHVsZSBjcmVhdGlvbiBhbmQgaW5zdGFsbGF0aW9uIHdvdWxkIG5lZWQgdG8gYmUgcGF0Y2hlZC4KLSMgKGN1cnJlbnRseSBoYXMgaG9zdCBwZXJsIGNvbnRhbWluYXRpb24gaXNzdWVzKQotV0lUSF9QRVJMID0gIi0td2l0aC1wZXJsIC0td2l0aG91dC1wZXJsZW1iZWQgLS13aXRob3V0LXBlcmwtdXJwbSIKLVdJVEhPVVRfUEVSTCA9ICItLXdpdGhvdXQtcGVybCAtLXdpdGhvdXQtcGVybC11cnBtIgotUEFDS0FHRUNPTkZJR1twZXJsXSA9ICIke1dJVEhfUEVSTH0sJHtXSVRIT1VUX1BFUkx9LHBlcmwsIgotCi0jIFRoZSAtLXdpdGgtZGJzcWwgd2lsbCBvbmx5IHRlbGwgUlBNIHRvIGNoZWNrIGZvciBzdXBwb3J0LCBkYgotIyBtYXkgb3IgbWF5IG5vdCBiZSBidWlsdCB3LyB0aGUgZGJzcWwgc3VwcG9ydC4KLVdJVEhfREIgPSAiLS13aXRoLWRiIC0td2l0aC1kYnNxbCAtLXdpdGhvdXQtZGItdG9vbHMtaW50ZWdyYXRlZCIKLVBBQ0tBR0VDT05GSUdbZGJdID0gIiR7V0lUSF9EQn0sLS13aXRob3V0LWRiLGRiLCIKLQotUEFDS0FHRUNPTkZJR1tzcWxpdGVdID0gIi0td2l0aC1zcWxpdGUsLS13aXRob3V0LXNxbGl0ZSxzcWxpdGUzLCIKLQotIyBUaGlzIHN3aXRjaCBzaW1wbHkgZGlzYWJsZXMgZXh0ZXJuYWwgYmVlY3J5cHQsIFJQTTUgYWx3YXlzIHVzZXMgYmVlY3J5cHQKLSMgZm9yIGJhc2U2NCBwcm9jZXNzaW5nIGFuZCB2YXJpb3VzIGRpZ2VzdCBhbGdvcml0aG1zLgotIyBCZWVjcnlwdCBpcyBvbmx5IHRoZSBwcmVmZXJyZWQgY3J5cHRvIGVuZ2luZSBpZiBpdCdzIHRoZSBvbmx5IGVuZ2luZSBlbmFibGVkLgotUEFDS0FHRUNPTkZJR1tiZWVjcnlwdF0gPSAiLS13aXRoLWJlZWNyeXB0PWV4dGVybmFsLC0td2l0aC1iZWVjcnlwdD1pbnRlcm5hbCxiZWVjcnlwdCwiCi0KLSMgLS13aXRoLXVzZWNyeXB0bz0gc2V0dGluZyBkZWZpbmVkIHRoZSBpdGVtIGFzIHRoZSBwcmVmZXJyZWQgc3lzdGVtCi0jIGNyeXB0byBlbmdpbmUsIHdoaWNoIHdpbGwgdGFrZSBwcmlvcml0eSBvdmVyIHRoZSBpbmNsdWRlZCBiZWVjcnlwdAotUEFDS0FHRUNPTkZJR1tvcGVuc3NsXSA9ICItLXdpdGgtb3BlbnNzbCAtLXdpdGgtdXNlY3J5cHRvPW9wZW5zc2wsLS13aXRob3V0LW9wZW5zc2wsb3BlbnNzbCwiCi1QQUNLQUdFQ09ORklHW25zc10gPSAiLS13aXRoLW5zcyAtLXdpdGgtdXNlY3J5cHRvPW5zcywtLXdpdGhvdXQtbnNzLG5zcywiCi1QQUNLQUdFQ09ORklHW2djcnlwdF0gPSAiLS13aXRoLWdjcnlwdCAtLXdpdGgtdXNlY3J5cHRvPWdjcnlwdCwtLXdpdGhvdXQtZ2NyeXB0LGdjcnlwdCwiCi0KLVBBQ0tBR0VDT05GSUdba2V5dXRpbHNdID0gIi0td2l0aC1rZXl1dGlscywtLXdpdGhvdXQta2V5dXRpbHMsa2V5dXRpbHMsIgotUEFDS0FHRUNPTkZJR1tsaWJlbGZdID0gIi0td2l0aC1saWJlbGYsLS13aXRob3V0LWxpYmVsZixlbGZ1dGlscywiCi0KLVdJVEhfU0VMSU5VWCA9ICItLXdpdGgtc2VsaW51eCAtLXdpdGgtc2Vwb2wgLS13aXRoLXNlbWFuYWdlIgotV0lUSE9VVF9TRUxJTlVYID0gIi0td2l0aG91dC1zZWxpbnV4IC0td2l0aG91dC1zZXBvbCAtLXdpdGhvdXQtc2VtYW5hZ2UiCi1QQUNLQUdFQ09ORklHW3NlbGludXhdID0gIiR7V0lUSF9TRUxJTlVYfSwke1dJVEhPVVRfU0VMSU5VWH0sbGlic2VsaW51eCwiCi0KLVdJVEhfTkVPTiA9ICItLXdpdGgtbmVvbiAtLXdpdGgtbGlicHJveHkgLS13aXRoLWV4cGF0IC0td2l0aG91dC1nc3NhcGkiCi1XSVRIT1VUX05FT04gPSAiLS13aXRob3V0LW5lb24gLS13aXRob3V0LWxpYnByb3h5IC0td2l0aG91dC1leHBhdCAtLXdpdGhvdXQtZ3NzYXBpIgotUEFDS0FHRUNPTkZJR1tuZW9uXSA9ICIke1dJVEhfTkVPTn0sJHtXSVRIT1VUX05FT059LG5lb24gZXhwYXQsIgotCi1QQUNLQUdFQ09ORklHW2x1YV0gPSAiLS13aXRoLWx1YSwtLXdpdGhvdXQtbHVhLGV4cGF0LCIKLVBBQ0tBR0VDT05GSUdbdGNsXSA9ICItLXdpdGgtdGNsLC0td2l0aG91dC10Y2wsdGNsLCIKLQotUEFDS0FHRUNPTkZJR1thdWdlYXNdID0gIi0td2l0aC1hdWdlYXMsLS13aXRob3V0LWF1Z2VhcyxhdWdlYXMsIgotCi1FWFRSQV9PRUNPTkYgKz0gIi0tdmVyYm9zZSBcCi0JCS0tc3lzY29uZmRpcj0ke3N5c2NvbmZkaXJ9IFwKLQkJLS13aXRoLWZpbGUgXAotCQktLXdpdGgtcGF0aC1tYWdpYz0le191c3JsaWJycG19Ly4uLy4uL3NoYXJlL21pc2MvbWFnaWMubWdjIFwKLQkJLS13aXRoLXN5Y2s9aW50ZXJuYWwgXAotCQktLXdpdGhvdXQtcmVhZGxpbmUgXAotCQktLXdpdGhvdXQtbGlidGFzbjEgXAotCQktLXdpdGhvdXQtcGFrY2hvaXMgXAotCQktLXdpdGhvdXQtZ251dGxzIFwKLQkJLS13aXRoLXBjcmUgXAotCQktLWVuYWJsZS11dGY4IFwKLQkJLS13aXRoLXV1aWQgXAotCQktLXdpdGgtYXR0ciBcCi0JCS0td2l0aC1hY2wgXAotCQktLXdpdGgtcHRocmVhZHMgXAotCQktLXdpdGhvdXQtY3VkZiBcCi0JCS0td2l0aG91dC1maWNsIFwKLQkJLS13aXRob3V0LWF0ZXJtIFwKLQkJLS13aXRob3V0LW5peCBcCi0JCS0td2l0aG91dC1iYXNoIFwKLQkJLS13aXRob3V0LXJjIFwKLQkJLS13aXRob3V0LWpzIFwKLQkJLS13aXRob3V0LWdwc2VlIFwKLQkJLS13aXRob3V0LXJ1YnkgXAotCQktLXdpdGhvdXQtc3F1aXJyZWwgXAotCQktLXdpdGhvdXQtc2FzbDIgXAotCQktLXdpdGgtYnVpbGQtZXh0bGliZGVwIFwKLQkJLS13aXRoLWJ1aWxkLW1heGV4dGxpYmRlcCBcCi0JCS0td2l0aG91dC12YWxncmluZCBcCi0JCS0tZGlzYWJsZS1vcGVubXAgXAotCQktLWVuYWJsZS1idWlsZC1waWMgXAotCQktLWVuYWJsZS1idWlsZC12ZXJzaW9uc2NyaXB0IFwKLQkJLS1lbmFibGUtYnVpbGQtd2FybmluZ3MgXAotCQktLWVuYWJsZS1idWlsZC1kZWJ1ZyBcCi0JCS0tZW5hYmxlLW1haW50YWluZXItbW9kZSBcCi0JCS0td2l0aC1wYXRoLW1hY3Jvcz0ke3JwbV9tYWNyb3N9IFwKLQkJLS13aXRoLXBhdGgtbGliPSR7bGliZGlyfS9ycG0gXAotCQktLXdpdGgtYnVncmVwb3J0PWh0dHA6Ly9idWd6aWxsYS55b2N0b3Byb2plY3Qub3JnIFwKLQkJLS1wcm9ncmFtLXByZWZpeD0gXAotCQlZQUNDPWJ5YWNjIgotCi1DRkxBR1NfYXBwZW5kID0gIiAtRFJQTV9WRU5ET1JfV0lORFJJVkVSIC1EUlBNX1ZFTkRPUl9QT0tZIC1EUlBNX1ZFTkRPUl9PRSIKLQotTERGTEFHU19hcHBlbmRfbGliYy11Y2xpYmMgPSAiLWxydCAtbHB0aHJlYWQiCi0KLVBBQ0tBR0VTID0gIiR7UE59LWRiZyAke1BOfSAke1BOfS1kb2MgJHtQTn0tbGlicyAke1BOfS1kZXYgJHtQTn0tc3RhdGljZGV2ICR7UE59LWNvbW1vbiAke1BOfS1idWlsZCBweXRob24tcnBtIHBlcmwtbW9kdWxlLXJwbSAke1BOfS1sb2NhbGUiCi0KLVNPTElCUyA9ICI1LjQuc28iCi0KLSMgQmFzZWQgb24gJWZpbGVzIHNlY3Rpb24gaW4gdGhlIHJwbS5zcGVjCi0KLUZJTEVTXyR7UE59ID0gICIke2JpbmRpcn0vcnBtIFwKLQkJJHtiaW5kaXJ9L3JwbWNvbnN0YW50IFwKLQkJJHtsaWJkaXJ9L3JwbS9ycG0uKiBcCi0JCSR7bGliZGlyfS9ycG0vdGdwZyBcCi0JCSR7bGliZGlyfS9ycG0vbWFjcm9zIFwKLQkJJHtsaWJkaXJ9L3JwbS9ycG1wb3B0IFwKLQkJJHtsaWJkaXJ9L3JwbS9ycG0yY3BpbyBcCi0JCSR7bGliZGlyfS9ycG0vdmNoZWNrIFwKLQkJJHtsaWJkaXJ9L3JwbS9oZWxwZXJzIFwKLQkJJHtsaWJkaXJ9L3JwbS9xZiBcCi0JCSR7bGliZGlyfS9ycG0vY3B1aW5mby55YW1sIFwKLQkJJHtsaWJkaXJ9L3JwbS9iaW4vbXRyZWUgXAotCQkke2xpYmRpcn0vcnBtL2Jpbi9ycG1rZXkgXAotCQkke2xpYmRpcn0vcnBtL2Jpbi9ycG1yZXBvIFwKLQkJJHtsaWJkaXJ9L3JwbS9iaW4vcnBtcmVwby5yZWFsIFwKLQkJJHtsaWJkaXJ9L3JwbS9iaW4vcnBtc3BlY2R1bXAgXAotCQkke2xpYmRpcn0vcnBtL2Jpbi9ycG1zcGVjZHVtcC5yZWFsIFwKLQkJJHtsaWJkaXJ9L3JwbS9iaW4vd2dldCBcCi0JCSR7bG9jYWxzdGF0ZWRpcn0vY2FjaGUgXAotCQkke2xvY2Fsc3RhdGVkaXJ9L2NhY2hlL3JwbSBcCi0JCSR7bG9jYWxzdGF0ZWRpcn0vY2FjaGUvd2RqIFwKLQkJJHtsb2NhbHN0YXRlZGlyfS9saWIgXAotCQkke2xvY2Fsc3RhdGVkaXJ9L2xpYi9ycG0gXAotCQkke2xvY2Fsc3RhdGVkaXJ9L2xpYi93ZGogXAotCQkke2JpbmRpcn0vcnBtLnJlYWwgXAotCQkke2JpbmRpcn0vcnBtY29uc3RhbnQucmVhbCBcCi0JCSR7YmluZGlyfS9ycG0yY3Bpby5yZWFsIFwKLQkJIgotCi1GSUxFU18ke1BOfS1jb21tb24gPSAiJHtiaW5kaXJ9L3JwbTJjcGlvIFwKLQkJJHtiaW5kaXJ9L2dlbmRpZmYgXAotCQkke3N5c2NvbmZkaXJ9L3JwbSBcCi0JCSR7bG9jYWxzdGF0ZWRpcn0vc3Bvb2wvcmVwYWNrYWdlIFwKLQkJIgotCi1GSUxFU18ke1BOfS1saWJzID0gIiR7bGliZGlyfS9saWJycG0tKi5zbyBcCi0JCSR7bGliZGlyfS9saWJycG1jb25zdGFudC0qLnNvIFwKLQkJJHtsaWJkaXJ9L2xpYnJwbWRiLSouc28gXAotCQkke2xpYmRpcn0vbGlicnBtaW8tKi5zbyBcCi0JCSR7bGliZGlyfS9saWJycG1taXNjLSouc28gXAotCQkke2xpYmRpcn0vbGlicnBtYnVpbGQtKi5zbyBcCi0JCSIKLQotRklMRVNfJHtQTn0tYnVpbGQgPSAiJHtwcmVmaXh9L3NyYy9ycG0gXAotCQkke2JpbmRpcn0vcnBtYnVpbGQgXAotCQkke2JpbmRpcn0vcnBtYnVpbGQucmVhbCBcCi0JCSR7bGliZGlyfS9ycG0vYnJwLSogXAotCQkke2xpYmRpcn0vcnBtL2NoZWNrLWZpbGVzIFwKLQkJJHtsaWJkaXJ9L3JwbS9jcm9zcy1idWlsZCBcCi0JCSR7bGliZGlyfS9ycG0vZmluZC1kZWJ1Z2luZm8uc2ggXAotCQkke2xpYmRpcn0vcnBtL2ZpbmQtbGFuZy5zaCBcCi0JCSR7bGliZGlyfS9ycG0vZmluZC1wcm92LnBsIFwKLQkJJHtsaWJkaXJ9L3JwbS9maW5kLXByb3ZpZGVzLnBlcmwgXAotCQkke2xpYmRpcn0vcnBtL2ZpbmQtcmVxLnBsIFwKLQkJJHtsaWJkaXJ9L3JwbS9maW5kLXJlcXVpcmVzLnBlcmwgXAotCQkke2xpYmRpcn0vcnBtL2dldHBvLnNoIFwKLQkJJHtsaWJkaXJ9L3JwbS9odHRwLnJlcSBcCi0JCSR7bGliZGlyfS9ycG0vamF2YWRlcHMuc2ggXAotCQkke2xpYmRpcn0vcnBtL21vbm8tZmluZC1wcm92aWRlcyBcCi0JCSR7bGliZGlyfS9ycG0vbW9uby1maW5kLXJlcXVpcmVzIFwKLQkJJHtsaWJkaXJ9L3JwbS9leGVjdXRhYmxlZGVwcy5zaCBcCi0JCSR7bGliZGlyfS9ycG0vbGlidG9vbGRlcHMuc2ggXAotCQkke2xpYmRpcn0vcnBtL29zZ2lkZXBzLnBsIFwKLQkJJHtsaWJkaXJ9L3JwbS9wZXJsZGVwcy5wbCBcCi0JCSR7bGliZGlyfS9ycG0vcGVybC5wcm92IFwKLQkJJHtsaWJkaXJ9L3JwbS9wZXJsLnJlcSBcCi0JCSR7bGliZGlyfS9ycG0vcGhwLnByb3YgXAotCQkke2xpYmRpcn0vcnBtL3BocC5yZXEgXAotCQkke2xpYmRpcn0vcnBtL3BrZ2NvbmZpZ2RlcHMuc2ggXAotCQkke2xpYmRpcn0vcnBtL3B5dGhvbmRlcHMuc2ggXAotCQkke2xpYmRpcn0vcnBtL2Jpbi9kZWJ1Z2VkaXQgXAotCQkke2xpYmRpcn0vcnBtL2Jpbi9kZWJ1Z2VkaXQucmVhbCBcCi0JCSR7bGliZGlyfS9ycG0vYmluL3JwbWNhY2hlIFwKLQkJJHtsaWJkaXJ9L3JwbS9iaW4vcnBtY2FjaGUucmVhbCBcCi0JCSR7bGliZGlyfS9ycG0vYmluL3JwbWNtcCBcCi0JCSR7bGliZGlyfS9ycG0vYmluL3JwbWNtcC5yZWFsIFwKLQkJJHtsaWJkaXJ9L3JwbS9iaW4vcnBtZGVwcyBcCi0JCSR7bGliZGlyfS9ycG0vYmluL3JwbWRlcHMucmVhbCBcCi0JCSR7bGliZGlyfS9ycG0vYmluL3JwbWRlcHMtb2Vjb3JlIFwKLQkJJHtsaWJkaXJ9L3JwbS9iaW4vcnBtZGVwcy1vZWNvcmUucmVhbCBcCi0JCSR7bGliZGlyfS9ycG0vYmluL3JwbWRpZ2VzdCBcCi0JCSR7bGliZGlyfS9ycG0vYmluL3JwbWRpZ2VzdC5yZWFsIFwKLQkJJHtsaWJkaXJ9L3JwbS9iaW4vYWJpLWNvbXBsaWFuY2UtY2hlY2tlci5wbCBcCi0JCSR7bGliZGlyfS9ycG0vYmluL2FwaS1zYW5pdHktYXV0b3Rlc3QucGwgXAotCQkke2xpYmRpcn0vcnBtL2Jpbi9jaHJvb3QgXAotCQkke2xpYmRpcn0vcnBtL2Jpbi9jcCBcCi0JCSR7bGliZGlyfS9ycG0vYmluL2Ric3FsIFwKLQkJJHtsaWJkaXJ9L3JwbS9iaW4vZmluZCBcCi0JCSR7bGliZGlyfS9ycG0vYmluL2luc3RhbGwtc2ggXAotCQkke2xpYmRpcn0vcnBtL2Jpbi9sdWEgXAotCQkke2xpYmRpcn0vcnBtL2Jpbi9sdWFjIFwKLQkJJHtsaWJkaXJ9L3JwbS9iaW4vbWtpbnN0YWxsZGlycyBcCi0JCSR7bGliZGlyfS9ycG0vYmluL3JwbWx1YSBcCi0JCSR7bGliZGlyfS9ycG0vYmluL3JwbWx1YWMgXAotCQkke2xpYmRpcn0vcnBtL2Jpbi9zcWxpdGUzIFwKLQkJJHtsaWJkaXJ9L3JwbS9tYWNyb3MuZC9jbWFrZSBcCi0JCSR7bGliZGlyfS9ycG0vbWFjcm9zLmQvamF2YSBcCi0JCSR7bGliZGlyfS9ycG0vbWFjcm9zLmQvbGlidG9vbCBcCi0JCSR7bGliZGlyfS9ycG0vbWFjcm9zLmQvbWFuZHJpdmEgXAotCQkke2xpYmRpcn0vcnBtL21hY3Jvcy5kL21vbm8gXAotCQkke2xpYmRpcn0vcnBtL21hY3Jvcy5kL3BlcmwgXAotCQkke2xpYmRpcn0vcnBtL21hY3Jvcy5kL3BocCBcCi0JCSR7bGliZGlyfS9ycG0vbWFjcm9zLmQvcGtnY29uZmlnIFwKLQkJJHtsaWJkaXJ9L3JwbS9tYWNyb3MuZC9weXRob24gXAotCQkke2xpYmRpcn0vcnBtL21hY3Jvcy5kL3J1YnkgXAotCQkke2xpYmRpcn0vcnBtL21hY3Jvcy5kL3NlbGludXggXAotCQkke2xpYmRpcn0vcnBtL21hY3Jvcy5kL3RjbCBcCi0JCSR7bGliZGlyfS9ycG0vbWFjcm9zLnJwbWJ1aWxkIFwKLQkJJHtsaWJkaXJ9L3JwbS91X3BrZy5zaCBcCi0JCSR7bGliZGlyfS9ycG0vdnBrZy1wcm92aWRlcy5zaCBcCi0JCSR7bGliZGlyfS9ycG0vdnBrZy1wcm92aWRlczIuc2ggXAotCQkke2xpYmRpcn0vcnBtL3BlcmZpbGVfcnBtZGVwcy5zaCBcCi0JCSR7ZGlzdHJvbWFjcm9kaXJ9IFwKLQkJIgotUkRFUEVORFNfJHtQTn0gPSAiYmFzZS1maWxlcyBydW4tcG9zdGluc3RzIgotUkRFUEVORFNfJHtQTn1fY2xhc3MtbmF0aXZlID0gIiIKLVJERVBFTkRTXyR7UE59X2NsYXNzLW5hdGl2ZXNkayA9ICIiCi1SREVQRU5EU18ke1BOfS1idWlsZCA9ICJmaWxlIGJhc2ggcGVybCIKLQotUkRFUEVORFNfcHl0aG9uLXJwbSA9ICIke1BOfSBweXRob24iCi0KLUZJTEVTX3B5dGhvbi1ycG0gPSAiJHtsaWJkaXJ9L3B5dGhvbiovc2l0ZS1wYWNrYWdlcy9ycG0iCi1QUk9WSURFUyArPSAicHl0aG9uLXJwbSIKLQotRklMRVNfcGVybC1tb2R1bGUtcnBtID0gIiR7bGliZGlyfS9wZXJsLyovKiBcCi0JCSIKLQotUkRFUEVORFNfJHtQTn0tZGV2ICs9ICJiYXNoIgotCi1GSUxFU18ke1BOfS1kZXYgPSAiJHtpbmNsdWRlZGlyfS9ycG0gXAotCQkke2xpYmRpcn0vbGlicnBtLmxhIFwKLQkJJHtsaWJkaXJ9L2xpYnJwbS5zbyBcCi0JCSR7bGliZGlyfS9saWJycG1jb25zdGFudC5sYSBcCi0JCSR7bGliZGlyfS9saWJycG1jb25zdGFudC5zbyBcCi0JCSR7bGliZGlyfS9saWJycG1kYi5sYSBcCi0JCSR7bGliZGlyfS9saWJycG1kYi5zbyBcCi0JCSR7bGliZGlyfS9saWJycG1pby5sYSBcCi0JCSR7bGliZGlyfS9saWJycG1pby5zbyBcCi0JCSR7bGliZGlyfS9saWJycG1taXNjLmxhIFwKLQkJJHtsaWJkaXJ9L2xpYnJwbW1pc2Muc28gXAotCQkke2xpYmRpcn0vbGlicnBtYnVpbGQubGEgXAotCQkke2xpYmRpcn0vbGlicnBtYnVpbGQuc28gXAotCQkke2xpYmRpcn0vcnBtL2xpYi9saWJsdWEubGEgXAotCQkke2xpYmRpcn0vcGtnY29uZmlnL3JwbS5wYyBcCi0JCSR7bGliZGlyfS9ycG0vcnBtZGJfbG9hZGN2dCBcCi0JCSIKLQotRklMRVNfJHtQTn0tc3RhdGljZGV2ID0gIiBcCi0JCSR7bGliZGlyfS9saWJycG0uYSBcCi0JCSR7bGliZGlyfS9saWJycG1jb25zdGFudC5hIFwKLQkJJHtsaWJkaXJ9L2xpYnJwbWRiLmEgXAotCQkke2xpYmRpcn0vbGlicnBtaW8uYSBcCi0JCSR7bGliZGlyfS9saWJycG1taXNjLmEgXAotCQkke2xpYmRpcn0vbGlicnBtYnVpbGQuYSBcCi0JCSR7bGliZGlyfS9ycG0vbGliL2xpYmx1YS5hIFwKLQkJJHtsaWJkaXJ9L3B5dGhvbiovc2l0ZS1wYWNrYWdlcy9ycG0vKi5hIFwKLQkJIgotCi1kb19jb25maWd1cmUoKSB7Ci0JIyBEaXNhYmxlIHRlc3RzIQotCWVjaG8gImFsbDoiID4gJHtTfS90ZXN0cy9NYWtlZmlsZS5hbQotCXNlZCAtZSAncy9AX19NS0RJUl9QQC8le19fbWtkaXJ9IC1wLycgLWkgJHtTfS9tYWNyb3MvbWFjcm9zLmluCi0KLQkoIGNkICR7U307ICR7U30vYXV0b2dlbi5zaCApCi0KLQkjIE5BU1RZIGhhY2sgdG8gbWFrZSBzdXJlIGNvbmZpZ3VyZSBmaWxlcyB0aGUgcmlnaHQgcGtnLWNvbmZpZyBmaWxlLi4uCi0Jc2VkIC1lICdzL3BrZy1jb25maWcgLS1leGlzdHMgdXVpZC9wa2ctY29uZmlnIC0tZXhpc3RzIG9zc3AtdXVpZC9nJyBcCi0JICAgIC1lICdzL3BrZy1jb25maWcgdXVpZC9wa2ctY29uZmlnIG9zc3AtdXVpZC9nJyAtaSAke1N9L2NvbmZpZ3VyZQotCi0JKCBjZCAke1N9L3N5Y2sgOyBzZXQgK2UgOyBybSAtLSAtbCogOyBtYWtlIGRpc3RjbGVhbiApIHx8IDoKLQotCWV4cG9ydCB2YXJwcmVmaXg9JHtsb2NhbHN0YXRlZGlyfQotCW9lX3J1bmNvbmYKLX0KLQotZG9faW5zdGFsbF9hcHBlbmQoKSB7Ci0JIyBDb25maWd1cmUgLWRpc3RyaWJ1dGlvbiB3aWRlLSBwYWNrYWdlIGNyeXB0byBzZXR0aW5ncwotCSMgSWYgdGhlc2UgY2hhbmdlLCBlZmZlY3RpdmVseSBhbGwgcGFja2FnZXMgaGF2ZSB0byBiZSB1cGdyYWRlZCEKLQlzZWQgLWkgLWUgJ3MsJV9idWlsZF9maWxlX2RpZ2VzdF9hbGdvLiosJV9idWlsZF9zaWduICR7UlBNX0ZJTEVfRElHRVNUX0FMR099LCcgJHtEfS8ke2xpYmRpcn0vcnBtL21hY3Jvcy5ycG1idWlsZAotCXNlZCAtaSAtZSAncywlX2J1aWxkX3NpZ24uKiwlX2J1aWxkX3NpZ24gJHtSUE1fU0VMRl9TSUdOX0FMR099LCcgJHtEfS8ke2xpYmRpcn0vcnBtL21hY3Jvcy5ycG1idWlsZAotCi0Jc2VkIC1pIC1lICdzLCVfX3NjcmlwdGxldF9yZXF1aXJlcywjJSVfX3NjcmlwdGxldF9yZXF1aXJlcywnICR7RH0vJHtsaWJkaXJ9L3JwbS9tYWNyb3MKLQlzZWQgLWkgLWUgJ3MsJV9fcGVybF9wcm92aWRlcywjJSVfX3BlcmxfcHJvdmlkZXMsJyAke0R9LyR7bGliZGlyfS9ycG0vbWFjcm9zICR7RH0vJHtsaWJkaXJ9L3JwbS9tYWNyb3MuZC8qCi0Jc2VkIC1pIC1lICdzLCVfX3BlcmxfcmVxdWlyZXMsIyUlX19wZXJsX3JlcXVpcmVzLCcgJHtEfS8ke2xpYmRpcn0vcnBtL21hY3JvcyAke0R9LyR7bGliZGlyfS9ycG0vbWFjcm9zLmQvKgotCXNlZCAtaSAtZSAncywlX3JlcGFja2FnZV9hbGxfZXJhc3VyZXNbXl9dLiosJV9yZXBhY2thZ2VfYWxsX2VyYXN1cmVzIDAsJyAke0R9LyR7bGliZGlyfS9ycG0vbWFjcm9zCi0Jc2VkIC1pIC1lICdzLF4jJV9vcGVuYWxsX2JlZm9yZV9jaHJvb3QuKiwlX29wZW5hbGxfYmVmb3JlX2Nocm9vdFx0MSwnICR7RH0vJHtsaWJkaXJ9L3JwbS9tYWNyb3MKLQotCSMgRW5hYmxlIE1JUFM2NCBOMzIgdHJhbnNhY3Rpb25zLiAgKFRoaXMgaXMgYSBuby1vcCBvbiBub24tTUlQUyB0YXJnZXRzLikKLQlzZWQgLWkgLWUgJ3MsJV90cmFuc2FjdGlvbl9jb2xvclteX10uKiwlX3RyYW5zYWN0aW9uX2NvbG9yIDcsJyAke0R9LyR7bGliZGlyfS9ycG0vbWFjcm9zCi0KLQkjIEVuYWJsZSBEZWJpYW4gc3R5bGUgYXJiaXRyYXJ5IHRhZ3MuLi4KLQlzZWQgLWkgLWUgJ3MsJV9hcmJpdHJhcnlfdGFnc1teX10uKiwlX2FyYml0cmFyeV90YWdzICV7X2FyYml0cmFyeV90YWdzX2RlYmlhbn0sJyAke0R9LyR7bGliZGlyfS9ycG0vbWFjcm9zCi0KLQlpbnN0YWxsIC1tIDA3NTUgJHtXT1JLRElSfS9weXRob25kZXBzLnNoICR7RH0vJHtsaWJkaXJ9L3JwbS9weXRob25kZXBzLnNoCi0JaW5zdGFsbCAtbSAwNzU1ICR7V09SS0RJUn0vcGVyZmlsZV9ycG1kZXBzLnNoICR7RH0vJHtsaWJkaXJ9L3JwbS9wZXJmaWxlX3JwbWRlcHMuc2gKLQotCSMgUmVtb3ZlIHVucGFja2FnZWQgZmlsZXMgKGJhc2VkIG9uIGxpc3QgaW4gcnBtLnNwZWMpCi0Jcm0gLWYgJHtEfS8ke2xpYmRpcn0vcnBtL3tTcGVjZmlsZS5wbSxjcGFuZmx1dGUsY3BhbmZsdXRlMixycG1kaWZmLHJwbWRpZmYuY2dpLHNxbC5wcm92LHNxbC5yZXEsdGNsLnJlcSx0cnBtfQotCi0Jcm0gLWYgJHtEfS8ke21hbmRpcn0vbWFuOC9ycG1jYWNoZS44KgotCXJtIC1mICR7RH0vJHttYW5kaXJ9L21hbjgvcnBtZ3JhcGguOCoKLQlybSAtZiAke0R9LyR7bWFuZGlyfS8qL21hbjgvcnBtY2FjaGUuOCoKLQlybSAtZiAke0R9LyR7bWFuZGlyfS8qL21hbjgvcnBtZ3JhcGguOCoKLQlybSAtcmYgJHtEfS8ke21hbmRpcn0ve2ZyLGtvfQotCi0Jcm0gLWYgJHtEfS8ke2luY2x1ZGVkaXJ9L3BvcHQuaAotCXJtIC1mICR7RH0vJHtsaWJkaXJ9L2xpYnBvcHQuKgotCXJtIC1mICR7RH0vJHtsaWJkaXJ9L3BrZ2NvbmZpZy9wb3B0LnBjCi0Jcm0gLWYgJHtEfS8ke2RhdGFkaXJ9L2xvY2FsZS8qL0xDX01FU1NBR0VTL3BvcHQubW8KLQlybSAtZiAke0R9LyR7bWFuZGlyfS9tYW4zL3BvcHQuMwotCi0Jcm0gLWYgJHtEfS8ke21hbmRpcn0vbWFuMS94YXIuMSoKLQlybSAtZiAke0R9LyR7YmluZGlyfS94YXIKLQlybSAtcmYgJHtEfS8ke2luY2x1ZGVkaXJ9L3hhcgotCXJtIC1mICR7RH0vJHtsaWJkaXJ9L2xpYnhhcioKLQotCXJtIC1mICR7RH0vJHtiaW5kaXJ9L2x6KgotCXJtIC1mICR7RH0vJHtiaW5kaXJ9L3VubHptYQotCXJtIC1mICR7RH0vJHtiaW5kaXJ9L3VueHoKLQlybSAtZiAke0R9LyR7YmluZGlyfS94eioKLQlybSAtcmYgJHtEfS8ke2luY2x1ZGVkaXJ9L2x6bWEqCi0Jcm0gLWYgJHtEfS8ke21hbmRpcn0vbWFuMS9seiouMQotCXJtIC1mICR7RH0vJHtsaWJkaXJ9L3BrZ2NvbmZpZy9saWJsem1hKgotCi0Jcm0gLWYgJHtEfS8ke2xpYmRpcn0vcHl0aG9uJXt3aXRoX3B5dGhvbl92ZXJzaW9ufS9zaXRlLXBhY2thZ2VzLyouYQotCXJtIC1mICR7RH0vJHtsaWJkaXJ9L3B5dGhvbiV7d2l0aF9weXRob25fdmVyc2lvbn0vc2l0ZS1wYWNrYWdlcy8qLmxhCi0Jcm0gLWYgJHtEfS8ke2xpYmRpcn0vcHl0aG9uJXt3aXRoX3B5dGhvbl92ZXJzaW9ufS9zaXRlLXBhY2thZ2VzL3JwbS8qLmEKLQlybSAtZiAke0R9LyR7bGliZGlyfS9weXRob24le3dpdGhfcHl0aG9uX3ZlcnNpb259L3NpdGUtcGFja2FnZXMvcnBtLyoubGEKLQotCSNmaW5kICR7RH0vJHtsaWJkaXJ9L3Blcmw1IC10eXBlIGYgLWEgXCggLW5hbWUgcGVybGxvY2FsLnBvZCAtbyAtbmFtZSAucGFja2xpc3QgXAotCSMJLW8gXCggLW5hbWUgJyouYnMnIC1hIC1lbXB0eSBcKSBcKSAtZXhlYyBybSAtZiB7fSAnOycKLQkjZmluZCAke0R9LyR7bGliZGlyfS9wZXJsNSAtdHlwZSBkIC1kZXB0aCAtZXhlYyBybWRpciB7fSAyPi9kZXYvbnVsbCAnOycKLQotCXJtIC1mICR7RH0vJHtsaWJkaXJ9L3JwbS9kYmNvbnZlcnQuc2gKLQotCXJtIC1mICR7RH0vJHtsaWJkaXJ9L3JwbS9saWJzcWxkYi4qCi0KLQkjIFdlIGRvbid0IHdhbnQsIG5vciBuZWVkIHRoZSBNYW5kcml2YSBtdWx0aWFyY2ggaXRlbXMKLQlybSAtZiAke0R9LyR7YmluZGlyfS9tdWx0aWFyY2gtZGlzcGF0Y2gKLQlybSAtZiAke0R9LyR7YmluZGlyfS9tdWx0aWFyY2gtcGxhdGZvcm0KLQlybSAtZiAke0R9LyR7bGliZGlyfS9ycG0vY2hlY2stbXVsdGlhcmNoLWZpbGVzCi0Jcm0gLWYgJHtEfS8ke2xpYmRpcn0vcnBtL21rbXVsdGlhcmNoCi0Jcm0gLWYgJHtEfS8ke2luY2x1ZGVkaXJ9L211bHRpYXJjaC1kaXNwYXRjaC5oCi0KLQlybSAtZiAke0R9LyR7bGliZGlyfS9ycG0vZ3N0cmVhbWVyLnNoCi0Jcm0gLWYgJHtEfS8ke2xpYmRpcn0vcnBtL2dlbV9oZWxwZXIucmIKLQlybSAtZiAke0R9LyR7bGliZGlyfS9ycG0vcnVieWdlbXMucmIKLQlybSAtZiAke0R9LyR7bGliZGlyfS9ycG0va21vZC1kZXBzLnNoCi0Jcm0gLWYgJHtEfS8ke2xpYmRpcn0vcnBtL3B5dGhvbmVnZ3MucHkKLQlybSAtZiAke0R9LyR7bGliZGlyfS9ycG0vbWFjcm9zLmQva2VybmVsCi0Jcm0gLWYgJHtEfS8ke2xpYmRpcn0vcnBtL21hY3Jvcy5kL2dzdHJlYW1lcgotCXJtIC1mICR7RH0vJHtsaWJkaXJ9L3JwbS9iaW4vbWdvCi0Jcm0gLWYgJHtEfS8ke2xpYmRpcn0vcnBtL2Jpbi9kYmNvbnZlcnQKLQlybSAtZiAke0R9LyR7bGliZGlyfS9ycG0vYmluL3BvbTJzcGVjCi0KLQlybSAtcmYgJHtEfS92YXIvbGliL3dkaiAke0R9L3Zhci9jYWNoZS93ZGoKLQlybSAtZiAke0R9LyR7bGliZGlyfS9ycG0vYmluL2FwaS1zYW5pdHktY2hlY2tlci5wbAotCi19Ci0KLWRvX2luc3RhbGxfYXBwZW5kX2NsYXNzLXRhcmdldCgpIHsKLQkjIENyZWF0ZSBhbmQgaW5zdGFsbCBkaXN0cmlidXRpb24gc3BlY2lmaWMgbWFjcm9zCi0JbWtkaXIgLXAgJHtEfS8ke2Rpc3Ryb21hY3JvZGlyfQotCWNhdCA8PCBFT0YgPiAke0R9LyR7ZGlzdHJvbWFjcm9kaXJ9L21hY3JvcwotJV9kZWZhdWx0ZG9jZGlyCQkke2RvY2Rpcn0KLQotJV9wcmVmaXggICAgICAgICAgICAgICAgJHtwcmVmaXh9Ci0lX2V4ZWNfcHJlZml4ICAgICAgICAgICAke2V4ZWNfcHJlZml4fQotJV9kYXRhcm9vdGRpciAgICAgICAgICAgJHtkYXRhZGlyfQotJV9iaW5kaXIgICAgICAgICAgICAgICAgJHtiaW5kaXJ9Ci0lX3NiaW5kaXIgICAgICAgICAgICAgICAke3NiaW5kaXJ9Ci0lX2xpYmV4ZWNkaXIgICAgICAgICAgICAle19saWJkaXJ9LyV7bmFtZX0KLSVfZGF0YWRpciAgICAgICAgICAgICAgICR7ZGF0YWRpcn0KLSVfc3lzY29uZmRpciAgICAgICAgICAgICR7c3lzY29uZmRpcn0KLSVfc2hhcmVkc3RhdGVkaXIgICAgICAgICR7c2hhcmVkc3RhdGVkaXJ9Ci0lX2xvY2Fsc3RhdGVkaXIgICAgICAgICAke2xvY2Fsc3RhdGVkaXJ9Ci0lX2xpYiAgICAgICAgICAgICAgICAgICBsaWIKLSVfbGliZGlyICAgICAgICAgICAgICAgICV7X2V4ZWNfcHJlZml4fS8le19saWJ9Ci0lX2luY2x1ZGVkaXIgICAgICAgICAgICAke2luY2x1ZGVkaXJ9Ci0lX29sZGluY2x1ZGVkaXIgICAgICAgICAke29sZGluY2x1ZGVkaXJ9Ci0lX2luZm9kaXIgICAgICAgICAgICAgICAke2luZm9kaXJ9Ci0lX21hbmRpciAgICAgICAgICAgICAgICAke21hbmRpcn0KLSVfbG9jYWxlZGlyICAgICAgICAgICAgICV7X2xpYmRpcn0vbG9jYWxlCi1FT0YKLQotCSMgQ3JlYXRlIGFuZCBpbnN0YWxsIG11bHRpbGliIHNwZWNpZmljIG1hY3JvcwotCSR7QG11bHRpbGliX3JwbW1hY3JvcyhkKX0KLX0KLQotZG9faW5zdGFsbF9hcHBlbmRfY2xhc3MtbmF0aXZlICgpIHsKLQlzZWQgLWkgLWUgJ3N8XiMhLiovdXNyL2Jpbi9weXRob258IyEgL3Vzci9iaW4vZW52IG5hdGl2ZXB5dGhvbnwnICR7RH0vJHtsaWJkaXJ9L3B5dGhvbjIuNy9zaXRlLXBhY2thZ2VzL3JwbS90cmFuc2FjdGlvbi5weQotfQotCi1kb19pbnN0YWxsX2FwcGVuZF9jbGFzcy1uYXRpdmVzZGsgKCkgewotCXNlZCAtaSAtZSAnc3xeIyEuKi91c3IvYmluL3B5dGhvbnwjISAvdXNyL2Jpbi9lbnYgcHl0aG9ufCcgJHtEfS8ke2xpYmRpcn0vcHl0aG9uMi43L3NpdGUtcGFja2FnZXMvcnBtL3RyYW5zYWN0aW9uLnB5Ci19Ci0KLWRlZiBtdWx0aWxpYl9ycG1tYWNyb3MoZCk6Ci0gICAgbG9jYWxkYXRhID0gZC5jcmVhdGVDb3B5KCkKLSAgICAjIFdlIG5lZWQgdG8gY2xlYXIgdGhlIFRPT0xDSEFJTl9PUFRJT05TICgtLXN5c3Jvb3QpCi0gICAgbG9jYWxkYXRhLmRlbFZhcignVE9PTENIQUlOX09QVElPTlMnKQotCi0gICAgIyBTZXQgJ2xvY2FsZGF0YScgdmFsdWVzIHRvIGJlIGNvbnNpc3RlbnQgd2l0aCAnZCcgdmFsdWVzLgotICAgIGxvY2FsZGF0YS5zZXRWYXIoJ2Rpc3Ryb21hY3JvZGlyJywgZC5nZXRWYXIoJ2Rpc3Ryb21hY3JvZGlyJywgVHJ1ZSkpCi0gICAgbG9jYWxkYXRhLnNldFZhcignV09SS0RJUicsIGQuZ2V0VmFyKCdXT1JLRElSJywgVHJ1ZSkpCi0KLSAgICByZXQgPSBnZW5fYXJjaF9tYWNybyhsb2NhbGRhdGEpCi0KLSAgICB2YXJpYW50cyA9IGQuZ2V0VmFyKCJNVUxUSUxJQl9WQVJJQU5UUyIsIFRydWUpIG9yICIiCi0gICAgZm9yIGl0ZW0gaW4gdmFyaWFudHMuc3BsaXQoKToKLSAgICAgICAgIyBMb2FkIG92ZXJyaWRlcyBmcm9tICdkJyB0byBhdm9pZCBoYXZpbmcgdG8gcmVzZXQgdGhlIHZhbHVlLi4uCi0gICAgICAgIGxvY2FsZGF0YSA9IGQuY3JlYXRlQ29weSgpCi0gICAgICAgIG92ZXJyaWRlcyA9IGQuZ2V0VmFyKCJPVkVSUklERVMiLCBGYWxzZSkgKyAiOnZpcnRjbGFzcy1tdWx0aWxpYi0iICsgaXRlbQotICAgICAgICBsb2NhbGRhdGEuc2V0VmFyKCJPVkVSUklERVMiLCBvdmVycmlkZXMpCi0gICAgICAgIGxvY2FsZGF0YS5zZXRWYXIoIk1MUFJFRklYIiwgaXRlbSArICItIikKLSAgICAgICAgYmIuZGF0YS51cGRhdGVfZGF0YShsb2NhbGRhdGEpCi0gICAgICAgIHJldCArPSBnZW5fYXJjaF9tYWNybyhsb2NhbGRhdGEpCi0gICAgcmV0dXJuIHJldAotCi1kZWYgZ2VuX2FyY2hfbWFjcm8oZCk6Ci0gICAgIyBHZW5lcmF0ZSBzaGVsbCBzY3JpcHQgdG8gcHJvZHVjZSB0aGUgZmlsZSBhcyBwYXJ0IG9mIGRvX2luc3RhbGwKLSAgICB2YWwgID0gIm1rZGlyIC1wICR7RH0vJHtkaXN0cm9tYWNyb2Rpcn0vJHtUQVJHRVRfQVJDSH0tJHtUQVJHRVRfT1N9XG4iCi0gICAgdmFsICs9ICJjYXQgPDwgRU9GID4gJHtEfS8ke2Rpc3Ryb21hY3JvZGlyfS8ke1RBUkdFVF9BUkNIfS0ke1RBUkdFVF9PU30vbWFjcm9zXG4iCi0gICAgdmFsICs9ICIlX2xpYiAgICAgICAgICAgICAgICR7YmFzZWxpYn1cbiIKLSAgICB2YWwgKz0gIiVfbGliZGlyICAgICAgICAgICAgJHtsaWJkaXJ9XG4iCi0gICAgdmFsICs9ICIlX2xvY2FsZWRpciAgICAgICAgICR7bG9jYWxlZGlyfVxuIgotICAgIHZhbCArPSAiXG4iCi0gICAgdmFsICs9ICIjIFRvb2xjaGFpbiBjb25maWd1cmF0aW9uXG4iCi0gICAgdmFsICs9ICIlVE9PTENIQUlOX09QVElPTlMgICV7bmlsfVxuIgotICAgIHZhbCArPSAiJV9fYXIgICAgICAgICAgICAgICAke0BkLmdldFZhcignQVInLCBUcnVlKS5yZXBsYWNlKCckJywnJScpfVxuIgotICAgIHZhbCArPSAiJV9fYXMgICAgICAgICAgICAgICAke0BkLmdldFZhcignQVMnLCBUcnVlKS5yZXBsYWNlKCckJywnJScpfVxuIgotICAgIHZhbCArPSAiJV9fY2MgICAgICAgICAgICAgICAke0BkLmdldFZhcignQ0MnLCBUcnVlKS5yZXBsYWNlKCckJywnJScpfVxuIgotICAgIHZhbCArPSAiJV9fY3BwICAgICAgICAgICAgICAke0BkLmdldFZhcignQ1BQJywgVHJ1ZSkucmVwbGFjZSgnJCcsJyUnKX1cbiIKLSAgICB2YWwgKz0gIiVfX2N4eCAgICAgICAgICAgICAgJHtAZC5nZXRWYXIoJ0NYWCcsIFRydWUpLnJlcGxhY2UoJyQnLCclJyl9XG4iCi0gICAgdmFsICs9ICIlX19sZCAgICAgICAgICAgICAgICR7QGQuZ2V0VmFyKCdMRCcsIFRydWUpLnJlcGxhY2UoJyQnLCclJyl9XG4iCi0gICAgdmFsICs9ICIlX19ubSAgICAgICAgICAgICAgICR7QGQuZ2V0VmFyKCdOTScsIFRydWUpLnJlcGxhY2UoJyQnLCclJyl9XG4iCi0gICAgdmFsICs9ICIlX19vYmpjb3B5ICAgICAgICAgICR7QGQuZ2V0VmFyKCdPQkpDT1BZJywgVHJ1ZSkucmVwbGFjZSgnJCcsJyUnKX1cbiIKLSAgICB2YWwgKz0gIiVfX29iamR1bXAgICAgICAgICAgJHtAZC5nZXRWYXIoJ09CSkRVTVAnLCBUcnVlKS5yZXBsYWNlKCckJywnJScpfVxuIgotICAgIHZhbCArPSAiJV9fcmFubGliICAgICAgICAgICAke0BkLmdldFZhcignUkFOTElCJywgVHJ1ZSkucmVwbGFjZSgnJCcsJyUnKX1cbiIKLSAgICB2YWwgKz0gIiVfX3N0cmlwICAgICAgICAgICAgJHtAZC5nZXRWYXIoJ1NUUklQJywgVHJ1ZSkucmVwbGFjZSgnJCcsJyUnKX1cbiIKLSAgICB2YWwgKz0gIkVPRlxuIgotICAgIHZhbCArPSAiXG4iCi0gICAgcmV0dXJuIGQuZXhwYW5kKHZhbCkKLQotCi1hZGRfbmF0aXZlX3dyYXBwZXIoKSB7Ci0gICAgICAgIGNyZWF0ZV93cmFwcGVyICR7RH0vJHtiaW5kaXJ9L3JwbSBcCi0JCVJQTV9VU1JMSUJSUE09J2BkaXJuYW1lICQnJ3JlYWxwYXRoYCcvJHtAb3MucGF0aC5yZWxwYXRoKGQuZ2V0VmFyKCdsaWJkaXInLCBUcnVlKSwgZC5nZXRWYXIoJ2JpbmRpcicsIFRydWUpKX0vcnBtIFwKLQkJUlBNX0VUQ1JQTT0nJCd7UlBNX0VUQ1JQTS0nYGRpcm5hbWUgJCcncmVhbHBhdGhgJy8ke0Bvcy5wYXRoLnJlbHBhdGgoZC5nZXRWYXIoJ3N5c2NvbmZkaXInLCBUcnVlKSwgZC5nZXRWYXIoJ2JpbmRpcicsIFRydWUpKX0vcnBtfSBcCi0JCVJQTV9MT0NBTEVESVJSUE09J2BkaXJuYW1lICQnJ3JlYWxwYXRoYCcvJHtAb3MucGF0aC5yZWxwYXRoKGQuZ2V0VmFyKCdkYXRhZGlyJywgVHJ1ZSksIGQuZ2V0VmFyKCdiaW5kaXInLCBUcnVlKSl9L2xvY2FsZQotCi0gICAgICAgIGNyZWF0ZV93cmFwcGVyICR7RH0vJHtiaW5kaXJ9L3JwbTJjcGlvIFwKLQkJUlBNX1VTUkxJQlJQTT0nYGRpcm5hbWUgJCcncmVhbHBhdGhgJy8ke0Bvcy5wYXRoLnJlbHBhdGgoZC5nZXRWYXIoJ2xpYmRpcicsIFRydWUpLCBkLmdldFZhcignYmluZGlyJywgVHJ1ZSkpfS9ycG0gXAotCQlSUE1fRVRDUlBNPSckJ3tSUE1fRVRDUlBNLSdgZGlybmFtZSAkJydyZWFscGF0aGAnLyR7QG9zLnBhdGgucmVscGF0aChkLmdldFZhcignc3lzY29uZmRpcicsIFRydWUpLCBkLmdldFZhcignYmluZGlyJywgVHJ1ZSkpfS9ycG19IFwKLQkJUlBNX0xPQ0FMRURJUlJQTT0nYGRpcm5hbWUgJCcncmVhbHBhdGhgJy8ke0Bvcy5wYXRoLnJlbHBhdGgoZC5nZXRWYXIoJ2RhdGFkaXInLCBUcnVlKSwgZC5nZXRWYXIoJ2JpbmRpcicsIFRydWUpKX0vbG9jYWxlCi0KLSAgICAgICAgY3JlYXRlX3dyYXBwZXIgJHtEfS8ke2JpbmRpcn0vcnBtYnVpbGQgXAotCQlSUE1fVVNSTElCUlBNPSdgZGlybmFtZSAkJydyZWFscGF0aGAnLyR7QG9zLnBhdGgucmVscGF0aChkLmdldFZhcignbGliZGlyJywgVHJ1ZSksIGQuZ2V0VmFyKCdiaW5kaXInLCBUcnVlKSl9L3JwbSBcCi0JCVJQTV9FVENSUE09JyQne1JQTV9FVENSUE0tJ2BkaXJuYW1lICQnJ3JlYWxwYXRoYCcvJHtAb3MucGF0aC5yZWxwYXRoKGQuZ2V0VmFyKCdzeXNjb25mZGlyJywgVHJ1ZSksIGQuZ2V0VmFyKCdiaW5kaXInLCBUcnVlKSl9L3JwbX0gXAotCQlSUE1fTE9DQUxFRElSUlBNPSdgZGlybmFtZSAkJydyZWFscGF0aGAnLyR7QG9zLnBhdGgucmVscGF0aChkLmdldFZhcignZGF0YWRpcicsIFRydWUpLCBkLmdldFZhcignYmluZGlyJywgVHJ1ZSkpfS9sb2NhbGUKLQotICAgICAgICBjcmVhdGVfd3JhcHBlciAke0R9LyR7YmluZGlyfS9ycG1jb25zdGFudCBcCi0JCVJQTV9VU1JMSUJSUE09J2BkaXJuYW1lICQnJ3JlYWxwYXRoYCcvJHtAb3MucGF0aC5yZWxwYXRoKGQuZ2V0VmFyKCdsaWJkaXInLCBUcnVlKSwgZC5nZXRWYXIoJ2JpbmRpcicsIFRydWUpKX0vcnBtIFwKLQkJUlBNX0VUQ1JQTT0nJCd7UlBNX0VUQ1JQTS0nYGRpcm5hbWUgJCcncmVhbHBhdGhgJy8ke0Bvcy5wYXRoLnJlbHBhdGgoZC5nZXRWYXIoJ3N5c2NvbmZkaXInLCBUcnVlKSwgZC5nZXRWYXIoJ2JpbmRpcicsIFRydWUpKX0vcnBtfSBcCi0JCVJQTV9MT0NBTEVESVJSUE09J2BkaXJuYW1lICQnJ3JlYWxwYXRoYCcvJHtAb3MucGF0aC5yZWxwYXRoKGQuZ2V0VmFyKCdkYXRhZGlyJywgVHJ1ZSksIGQuZ2V0VmFyKCdiaW5kaXInLCBUcnVlKSl9L2xvY2FsZQotCi0JZm9yIHJwbV9iaW5hcnkgaW4gJHtEfS8ke2xpYmRpcn0vcnBtL2Jpbi9ycG0qICR7RH0vJHtsaWJkaXJ9L3JwbS9iaW4vZGVidWdlZGl0OyBkbwotICAgICAgICAJY3JlYXRlX3dyYXBwZXIgJHJwbV9iaW5hcnkgXAotCQkJUlBNX1VTUkxJQlJQTT0nYGRpcm5hbWUgJCcncmVhbHBhdGhgJy8ke0Bvcy5wYXRoLnJlbHBhdGgoZC5nZXRWYXIoJ2xpYmRpcicsIFRydWUpLCBkLmdldFZhcignYmluZGlyJywgVHJ1ZSkpfS9ycG0gXAotCQkJUlBNX0VUQ1JQTT0nJCd7UlBNX0VUQ1JQTS0nYGRpcm5hbWUgJCcncmVhbHBhdGhgJy8ke0Bvcy5wYXRoLnJlbHBhdGgoZC5nZXRWYXIoJ3N5c2NvbmZkaXInLCBUcnVlKSwgZC5nZXRWYXIoJ2JpbmRpcicsIFRydWUpKX0vcnBtfSBcCi0JCQlSUE1fTE9DQUxFRElSUlBNPSdgZGlybmFtZSAkJydyZWFscGF0aGAnLyR7QG9zLnBhdGgucmVscGF0aChkLmdldFZhcignZGF0YWRpcicsIFRydWUpLCBkLmdldFZhcignYmluZGlyJywgVHJ1ZSkpfS9sb2NhbGUKLQlkb25lCi19Ci0KLWRvX2luc3RhbGxfYXBwZW5kX2NsYXNzLW5hdGl2ZSgpIHsKLQlhZGRfbmF0aXZlX3dyYXBwZXIKLX0KLQotZG9faW5zdGFsbF9hcHBlbmRfY2xhc3MtbmF0aXZlc2RrKCkgewotCWFkZF9uYXRpdmVfd3JhcHBlcgotfQotCi1CQkNMQVNTRVhURU5EID0gIm5hdGl2ZSBuYXRpdmVzZGsiCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3JwbS9ycG1fNS40LjE2LmJiIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9ycG0vcnBtXzUuNC4xNi5iYgppbmRleCBmMmMxMmQyLi4xMzMyMzk3IDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3JwbS9ycG1fNS40LjE2LmJiCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcnBtL3JwbV81LjQuMTYuYmIKQEAgLTExNiw2ICsxMTYsOSBAQAogCSAgIGZpbGU6Ly9ycG0tZml4LWx1YS10ZXN0cy1jb21waWxhdGlvbi1mYWlsdXJlLnBhdGNoIFwKIAkgICBmaWxlOi8vcnBtcXYuYy1jaGVjay1fZ3BnX3Bhc3NwaHJhc2UtYmVmb3JlLWFzay1mb3ItaW5wdXQucGF0Y2ggXAogCSAgIGZpbGU6Ly8wMDAxLURpc2FibGUtX19zeW5jX2FkZF9hbmRfZmV0Y2hfOC1vbi1uaW9zMi5wYXRjaCBcCisJICAgZmlsZTovL2djYzYtc3RkbGliLnBhdGNoIFwKKwkgICBmaWxlOi8vMDAwMS1zeXN0ZW0uaC1xdWVyeS5jLXN1cHBvcnQtbm9zaWduYXR1cmUucGF0Y2ggXAorCSAgIGZpbGU6Ly9ycG0tZW5zdXJlLXJwbTJjcGlvLWNhbGwtcnBtLXJlbG9jYXRpb24tY29kZS5wYXRjaCBcCiAiCiAKICMgT0Ugc3BlY2lmaWMgY2hhbmdlcwpAQCAtMTUxLDYgKzE1NCw3IEBACiAJICAgZmlsZTovL3JwbS1ycG1kYi1ncmFtbWFyLnBhdGNoIFwKIAkgICBmaWxlOi8vcnBtLWRpc2FibGUtYmxha2V0ZXN0LnBhdGNoIFwKIAkgICBmaWxlOi8vcnBtLWF1dG9nZW4tZm9yY2UucGF0Y2ggXAorCSAgIGZpbGU6Ly9ycG1kYi1wcmV2ZW50LXJhY2UtaW4tdG1wZGlyLWNyZWF0aW9uLnBhdGNoIFwKIAkgICBmaWxlOi8vcnBtZGItbW9yZS12ZXJib3NlLWVycm9yLWxvZ2dpbmctaW4tcnBtVGVtcEZpbGUucGF0Y2ggXAogIgogCkBAIC0xNjQsNyArMTY4LDcgQEAKIAogVVBTVFJFQU1fQ0hFQ0tfUkVHRVggPSAicnBtLSg/UDxwdmVyPihcZCtbXC5cLV9dKikrKS0uKiQiCiAKLWluaGVyaXQgYXV0b3Rvb2xzIGdldHRleHQKK2luaGVyaXQgYXV0b3Rvb2xzIGdldHRleHQgcHl0aG9uLWRpcgogCiBhY3BhdGhzID0gIi1JICR7U30vZGIvZGlzdC9hY2xvY2FsIC1JICR7U30vZGIvZGlzdC9hY2xvY2FsX2phdmEiCiAKQEAgLTI1Nyw3ICsyNjEsNyBAQAogCiBXSVRIX1BZVEhPTiA9ICIgLS13aXRoLXB5dGhvbj0ke1BZVEhPTl9CQVNFVkVSU0lPTn0gXAogCQktLXdpdGgtcHl0aG9uLWluYy1kaXI9JHtTVEFHSU5HX0lOQ0RJUn0vcHl0aG9uJHtQWVRIT05fQkFTRVZFUlNJT059IFwKLQkJLS13aXRoLXB5dGhvbi1saWItZGlyPSR7bGliZGlyfS9weXRob24ke1BZVEhPTl9CQVNFVkVSU0lPTn0vc2l0ZS1wYWNrYWdlcyBcCisJCS0td2l0aC1weXRob24tbGliLWRpcj0ke1BZVEhPTl9TSVRFUEFDS0FHRVNfRElSfSBcCiAJCS0td2l0aG91dC1weXRob25lbWJlZCIKIFBBQ0tBR0VDT05GSUdbcHl0aG9uXSA9ICIke1dJVEhfUFlUSE9OfSwtLXdpdGhvdXQtcHl0aG9uLHB5dGhvbiwiCiAKQEAgLTM0NCw3ICszNDgsNyBAQAogCQktLXByb2dyYW0tcHJlZml4PSBcCiAJCVlBQ0M9YnlhY2MiCiAKLUNGTEFHU19hcHBlbmQgPSAiIC1EUlBNX1ZFTkRPUl9XSU5EUklWRVIgLURSUE1fVkVORE9SX1BPS1kgLURSUE1fVkVORE9SX09FIgorQ0ZMQUdTX2FwcGVuZCA9ICIgLURSUE1fVkVORE9SX1dJTkRSSVZFUiAtRFJQTV9WRU5ET1JfUE9LWSAtRFJQTV9WRU5ET1JfT0UgLURfR0xJQkNYWF9JTkNMVURFX05FWFRfQ19IRUFERVJTIgogCiBMREZMQUdTX2FwcGVuZF9saWJjLXVjbGliYyA9ICItbHJ0IC1scHRocmVhZCIKIApAQCAtNDc1LDcgKzQ3OSw3IEBACiAKIFJERVBFTkRTX3B5dGhvbi1ycG0gPSAiJHtQTn0gcHl0aG9uIgogCi1GSUxFU19weXRob24tcnBtID0gIiR7bGliZGlyfS9weXRob24qL3NpdGUtcGFja2FnZXMvcnBtIgorRklMRVNfcHl0aG9uLXJwbSA9ICIke1BZVEhPTl9TSVRFUEFDS0FHRVNfRElSfS9ycG0iCiBQUk9WSURFUyArPSAicHl0aG9uLXJwbSIKIAogRklMRVNfcGVybC1tb2R1bGUtcnBtID0gIiR7bGliZGlyfS9wZXJsLyovKiBcCkBAIC01MTAsNyArNTE0LDcgQEAKIAkJJHtsaWJkaXJ9L2xpYnJwbW1pc2MuYSBcCiAJCSR7bGliZGlyfS9saWJycG1idWlsZC5hIFwKIAkJJHtsaWJkaXJ9L3JwbS9saWIvbGlibHVhLmEgXAotCQkke2xpYmRpcn0vcHl0aG9uKi9zaXRlLXBhY2thZ2VzL3JwbS8qLmEgXAorCQkke1BZVEhPTl9TSVRFUEFDS0FHRVNfRElSfS9ycG0vKi5hIFwKIAkJIgogCiBkb19jb25maWd1cmUoKSB7CkBAIC01MjQsNyArNTI4LDcgQEAKIAlzZWQgLWUgJ3MvcGtnLWNvbmZpZyAtLWV4aXN0cyB1dWlkL3BrZy1jb25maWcgLS1leGlzdHMgb3NzcC11dWlkL2cnIFwKIAkgICAgLWUgJ3MvcGtnLWNvbmZpZyB1dWlkL3BrZy1jb25maWcgb3NzcC11dWlkL2cnIC1pICR7U30vY29uZmlndXJlCiAKLQkoIGNkICR7U30vc3ljayA7IHNldCArZSA7IHJtIC0tIC1sKiA7IG1ha2UgZGlzdGNsZWFuICkgfHwgOgorCSggY2QgJHtTfS9zeWNrIDsgc2V0ICtlIDsgcm0gLS0gLWwqIDsgcm0gTWFrZWZpbGUgY29uZmlnLmggY29uZmlnLnN0YXR1cyBsaWIvTWFrZWZpbGUgbGlidG9vbCBzdGFtcC1oMSB0ZXN0cy8uZGVwcyB0ZXN0cy9NYWtlZmlsZSAgKSB8fCA6CiAKIAlleHBvcnQgdmFycHJlZml4PSR7bG9jYWxzdGF0ZWRpcn0KIAlvZV9ydW5jb25mCkBAIC01NTEsNTQgKzU1NSwyMCBAQAogCWluc3RhbGwgLW0gMDc1NSAke1dPUktESVJ9L3B5dGhvbmRlcHMuc2ggJHtEfS8ke2xpYmRpcn0vcnBtL3B5dGhvbmRlcHMuc2gKIAlpbnN0YWxsIC1tIDA3NTUgJHtXT1JLRElSfS9wZXJmaWxlX3JwbWRlcHMuc2ggJHtEfS8ke2xpYmRpcn0vcnBtL3BlcmZpbGVfcnBtZGVwcy5zaAogCi0JIyBSZW1vdmUgdW5wYWNrYWdlZCBmaWxlcyAoYmFzZWQgb24gbGlzdCBpbiBycG0uc3BlYykKLQlybSAtZiAke0R9LyR7bGliZGlyfS9ycG0ve1NwZWNmaWxlLnBtLGNwYW5mbHV0ZSxjcGFuZmx1dGUyLHJwbWRpZmYscnBtZGlmZi5jZ2ksc3FsLnByb3Ysc3FsLnJlcSx0Y2wucmVxLHRycG19Ci0KLQlybSAtZiAke0R9LyR7bWFuZGlyfS9tYW44L3JwbWNhY2hlLjgqCi0Jcm0gLWYgJHtEfS8ke21hbmRpcn0vbWFuOC9ycG1ncmFwaC44KgotCXJtIC1mICR7RH0vJHttYW5kaXJ9LyovbWFuOC9ycG1jYWNoZS44KgotCXJtIC1mICR7RH0vJHttYW5kaXJ9LyovbWFuOC9ycG1ncmFwaC44KgotCXJtIC1yZiAke0R9LyR7bWFuZGlyfS97ZnIsa299Ci0KIAlybSAtZiAke0R9LyR7aW5jbHVkZWRpcn0vcG9wdC5oCiAJcm0gLWYgJHtEfS8ke2xpYmRpcn0vbGlicG9wdC4qCiAJcm0gLWYgJHtEfS8ke2xpYmRpcn0vcGtnY29uZmlnL3BvcHQucGMKIAlybSAtZiAke0R9LyR7ZGF0YWRpcn0vbG9jYWxlLyovTENfTUVTU0FHRVMvcG9wdC5tbwogCXJtIC1mICR7RH0vJHttYW5kaXJ9L21hbjMvcG9wdC4zCiAKLQlybSAtZiAke0R9LyR7bWFuZGlyfS9tYW4xL3hhci4xKgotCXJtIC1mICR7RH0vJHtiaW5kaXJ9L3hhcgotCXJtIC1yZiAke0R9LyR7aW5jbHVkZWRpcn0veGFyCi0Jcm0gLWYgJHtEfS8ke2xpYmRpcn0vbGlieGFyKgotCi0Jcm0gLWYgJHtEfS8ke2JpbmRpcn0vbHoqCi0Jcm0gLWYgJHtEfS8ke2JpbmRpcn0vdW5sem1hCi0Jcm0gLWYgJHtEfS8ke2JpbmRpcn0vdW54egotCXJtIC1mICR7RH0vJHtiaW5kaXJ9L3h6KgotCXJtIC1yZiAke0R9LyR7aW5jbHVkZWRpcn0vbHptYSoKLQlybSAtZiAke0R9LyR7bWFuZGlyfS9tYW4xL2x6Ki4xCi0Jcm0gLWYgJHtEfS8ke2xpYmRpcn0vcGtnY29uZmlnL2xpYmx6bWEqCi0KLQlybSAtZiAke0R9LyR7bGliZGlyfS9weXRob24le3dpdGhfcHl0aG9uX3ZlcnNpb259L3NpdGUtcGFja2FnZXMvKi5hCi0Jcm0gLWYgJHtEfS8ke2xpYmRpcn0vcHl0aG9uJXt3aXRoX3B5dGhvbl92ZXJzaW9ufS9zaXRlLXBhY2thZ2VzLyoubGEKLQlybSAtZiAke0R9LyR7bGliZGlyfS9weXRob24le3dpdGhfcHl0aG9uX3ZlcnNpb259L3NpdGUtcGFja2FnZXMvcnBtLyouYQotCXJtIC1mICR7RH0vJHtsaWJkaXJ9L3B5dGhvbiV7d2l0aF9weXRob25fdmVyc2lvbn0vc2l0ZS1wYWNrYWdlcy9ycG0vKi5sYQotCi0JI2ZpbmQgJHtEfS8ke2xpYmRpcn0vcGVybDUgLXR5cGUgZiAtYSBcKCAtbmFtZSBwZXJsbG9jYWwucG9kIC1vIC1uYW1lIC5wYWNrbGlzdCBcCi0JIwktbyBcKCAtbmFtZSAnKi5icycgLWEgLWVtcHR5IFwpIFwpIC1leGVjIHJtIC1mIHt9ICc7JwotCSNmaW5kICR7RH0vJHtsaWJkaXJ9L3Blcmw1IC10eXBlIGQgLWRlcHRoIC1leGVjIHJtZGlyIHt9IDI+L2Rldi9udWxsICc7JworCXJtIC1mICR7RH0ke1BZVEhPTl9TSVRFUEFDS0FHRVNfRElSfS8qLmEKKwlybSAtZiAke0R9JHtQWVRIT05fU0lURVBBQ0tBR0VTX0RJUn0vKi5sYQorCXJtIC1mICR7RH0ke1BZVEhPTl9TSVRFUEFDS0FHRVNfRElSfS9ycG0vKi5hCisJcm0gLWYgJHtEfSR7UFlUSE9OX1NJVEVQQUNLQUdFU19ESVJ9L3JwbS8qLmxhCiAKIAlybSAtZiAke0R9LyR7bGliZGlyfS9ycG0vZGJjb252ZXJ0LnNoCi0KIAlybSAtZiAke0R9LyR7bGliZGlyfS9ycG0vbGlic3FsZGIuKgogCi0JIyBXZSBkb24ndCB3YW50LCBub3IgbmVlZCB0aGUgTWFuZHJpdmEgbXVsdGlhcmNoIGl0ZW1zCi0Jcm0gLWYgJHtEfS8ke2JpbmRpcn0vbXVsdGlhcmNoLWRpc3BhdGNoCi0Jcm0gLWYgJHtEfS8ke2JpbmRpcn0vbXVsdGlhcmNoLXBsYXRmb3JtCi0Jcm0gLWYgJHtEfS8ke2xpYmRpcn0vcnBtL2NoZWNrLW11bHRpYXJjaC1maWxlcwotCXJtIC1mICR7RH0vJHtsaWJkaXJ9L3JwbS9ta211bHRpYXJjaAotCXJtIC1mICR7RH0vJHtpbmNsdWRlZGlyfS9tdWx0aWFyY2gtZGlzcGF0Y2guaAotCiAJcm0gLWYgJHtEfS8ke2xpYmRpcn0vcnBtL2dzdHJlYW1lci5zaAogCXJtIC1mICR7RH0vJHtsaWJkaXJ9L3JwbS9nZW1faGVscGVyLnJiCiAJcm0gLWYgJHtEfS8ke2xpYmRpcn0vcnBtL3J1YnlnZW1zLnJiCkBAIC02MDcsMTIgKzU3NywxMCBAQAogCXJtIC1mICR7RH0vJHtsaWJkaXJ9L3JwbS9tYWNyb3MuZC9rZXJuZWwKIAlybSAtZiAke0R9LyR7bGliZGlyfS9ycG0vbWFjcm9zLmQvZ3N0cmVhbWVyCiAJcm0gLWYgJHtEfS8ke2xpYmRpcn0vcnBtL2Jpbi9tZ28KLQlybSAtZiAke0R9LyR7bGliZGlyfS9ycG0vYmluL2RiY29udmVydAogCXJtIC1mICR7RH0vJHtsaWJkaXJ9L3JwbS9iaW4vcG9tMnNwZWMKIAogCXJtIC1yZiAke0R9L3Zhci9saWIvd2RqICR7RH0vdmFyL2NhY2hlL3dkagogCXJtIC1mICR7RH0vJHtsaWJkaXJ9L3JwbS9iaW4vYXBpLXNhbml0eS1jaGVja2VyLnBsCi0KIH0KIAogZG9faW5zdGFsbF9hcHBlbmRfY2xhc3MtdGFyZ2V0KCkgewpAQCAtNjQ1LDExICs2MTMsMTEgQEAKIH0KIAogZG9faW5zdGFsbF9hcHBlbmRfY2xhc3MtbmF0aXZlICgpIHsKLQlzZWQgLWkgLWUgJ3N8XiMhLiovdXNyL2Jpbi9weXRob258IyEgL3Vzci9iaW4vZW52IG5hdGl2ZXB5dGhvbnwnICR7RH0vJHtsaWJkaXJ9L3B5dGhvbjIuNy9zaXRlLXBhY2thZ2VzL3JwbS90cmFuc2FjdGlvbi5weQorCXNlZCAtaSAtZSAnc3xeIyEuKi91c3IvYmluL3B5dGhvbnwjISAvdXNyL2Jpbi9lbnYgbmF0aXZlcHl0aG9ufCcgJHtEfSR7UFlUSE9OX1NJVEVQQUNLQUdFU19ESVJ9L3JwbS90cmFuc2FjdGlvbi5weQogfQogCiBkb19pbnN0YWxsX2FwcGVuZF9jbGFzcy1uYXRpdmVzZGsgKCkgewotCXNlZCAtaSAtZSAnc3xeIyEuKi91c3IvYmluL3B5dGhvbnwjISAvdXNyL2Jpbi9lbnYgcHl0aG9ufCcgJHtEfS8ke2xpYmRpcn0vcHl0aG9uMi43L3NpdGUtcGFja2FnZXMvcnBtL3RyYW5zYWN0aW9uLnB5CisJc2VkIC1pIC1lICdzfF4jIS4qL3Vzci9iaW4vcHl0aG9ufCMhIC91c3IvYmluL2VudiBweXRob258JyAke0R9JHtQWVRIT05fU0lURVBBQ0tBR0VTX0RJUn0vcnBtL3RyYW5zYWN0aW9uLnB5CiB9CiAKIGRlZiBtdWx0aWxpYl9ycG1tYWNyb3MoZCk6CmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3JzeW5jL3JzeW5jLmluYyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcnN5bmMvcnN5bmMuaW5jCmluZGV4IGM2NWYyNzAuLjM3ODk3YWIgMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcnN5bmMvcnN5bmMuaW5jCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcnN5bmMvcnN5bmMuaW5jCkBAIC0zLDExICszLDYgQEAKIEJVR1RSQUNLRVIgPSAiaHR0cDovL3JzeW5jLnNhbWJhLm9yZy9idWd6aWxsYS5odG1sIgogU0VDVElPTiA9ICJjb25zb2xlL25ldHdvcmsiCiAKLSMgR1BMdjIrICg8PCAzLjAuMCksIEdQTHYzKyAoPj0gMy4wLjApCi1MSUNFTlNFID0gIkdQTHYzKyIKLUxJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PWQzMjIzOWJjYjY3MzQ2M2FiODc0ZTgwZDQ3ZmFlNTA0IgotCi0jIG5lZWRzIHRvIGFkZCBhY2wgYW5kIGF0dHIKIERFUEVORFMgPSAicG9wdCIKIAogU1JDX1VSSSA9ICJodHRwOi8vcnN5bmMuc2FtYmEub3JnL2Z0cC9yc3luYy9zcmMvcnN5bmMtJHtQVn0udGFyLmd6IFwKQEAgLTIxLDMgKzE2LDUgQEAKIH0KIAogRVhUUkFfT0VNQUtFPSdTVFJJUD0iIicKKworUEFDS0FHRUNPTkZJR1tpcHY2XSA9ICItLWVuYWJsZS1pcHY2LC0tZGlzYWJsZS1pcHY2LCIKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcnN5bmMvcnN5bmNfMi42LjkuYmIgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3JzeW5jL3JzeW5jXzIuNi45LmJiCmluZGV4IDY4NTRjNzcuLmVmZGYyNTUgMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcnN5bmMvcnN5bmNfMi42LjkuYmIKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9yc3luYy9yc3luY18yLjYuOS5iYgpAQCAtMSwyOCArMSwxNSBAQAotU1VNTUFSWSA9ICJGaWxlIHN5bmNocm9uaXphdGlvbiB0b29sIgotSE9NRVBBR0UgPSAiaHR0cDovL3JzeW5jLnNhbWJhLm9yZy8iCi1CVUdUUkFDS0VSID0gImh0dHA6Ly9yc3luYy5zYW1iYS5vcmcvYnVnemlsbGEuaHRtbCIKLVNFQ1RJT04gPSAiY29uc29sZS9uZXR3b3JrIgorcmVxdWlyZSByc3luYy5pbmMKIAotIyBuZWVkcyB0byBhZGQgYWNsIGFuZCBhdHRyCi1ERVBFTkRTID0gInBvcHQiCi0KLVNSQ19VUkkgPSAiaHR0cDovL3JzeW5jLnNhbWJhLm9yZy9mdHAvcnN5bmMvc3JjL3JzeW5jLSR7UFZ9LnRhci5neiBcCi0gICAgICAgICAgIGZpbGU6Ly9yc3luYy0yLjYuOS1mbmFtZS1vYm8ucGF0Y2ggXAotICAgICAgICAgICBmaWxlOi8vcnN5bmNkLmNvbmYiCitTUkNfVVJJICs9ICJmaWxlOi8vcnN5bmMtMi42LjktZm5hbWUtb2JvLnBhdGNoIFwKKyAgICAgICAgICAgIGZpbGU6Ly9yc3luY2QuY29uZiBcCisiCiAKIFNSQ19VUklbbWQ1c3VtXSA9ICI5OTZkOGQ4ODMxZGJjYTE3OTEwMDk0ZTU2ZGNiNTk0MiIKIFNSQ19VUklbc2hhMjU2c3VtXSA9ICJjYTQzNzMwMWJlY2Q4OTBlNzMzMDBiYzY5YTM5MTg5ZmYxNTY0YmFhNzYxOTQ4ZmYxNDliM2RkN2JkZTYzM2Y5IgogCi1pbmhlcml0IGF1dG90b29scwotCi1kb19pbnN0YWxsX2FwcGVuZCgpIHsKLQlpbnN0YWxsIC1kICR7RH0ke3N5c2NvbmZkaXJ9Ci0JaW5zdGFsbCAtbSAwNjQ0ICR7V09SS0RJUn0vcnN5bmNkLmNvbmYgJHtEfSR7c3lzY29uZmRpcn0KLX0KLQotRVhUUkFfT0VNQUtFPSdTVFJJUD0iIicKLQogTElDRU5TRSA9ICJHUEx2MisiCiBMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT02ZDVhOWQ0YzRkM2FmMjVjZDY4ZmQ4M2U4YThjYjA5YyIKIAogUFIgPSAicjQiCisKK1BBQ0tBR0VDT05GSUcgPz89ICIke0BiYi51dGlscy5jb250YWlucygnRElTVFJPX0ZFQVRVUkVTJywgJ2lwdjYnLCAnaXB2NicsICcnLCBkKX0iCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3JzeW5jL3JzeW5jXzMuMS4yLmJiIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9yc3luYy9yc3luY18zLjEuMi5iYgppbmRleCA5NjM3ZWQ0Li5jNmNiMzMxIDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3JzeW5jL3JzeW5jXzMuMS4yLmJiCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcnN5bmMvcnN5bmNfMy4xLjIuYmIKQEAgLTUsNyArNSwxMyBAQAogU1JDX1VSSVttZDVzdW1dID0gIjBmNzU4ZDdlMDAwYzBmN2Y3ZDM3OTI2MTBmYWQ3MGNiIgogU1JDX1VSSVtzaGEyNTZzdW1dID0gImVjZmE2MmE3ZmEzYzRjMThiOWVjY2Q4YzE2ZWFkZGVlNGJkMzA4YTc2ZWE1MGI1YzAyYTU4NDBmMDljMGExYzIiCiAKLVBBQ0tBR0VDT05GSUcgPz89ICJhY2wgYXR0ciIKKyMgR1BMdjIrICg8PCAzLjAuMCksIEdQTHYzKyAoPj0gMy4wLjApCitMSUNFTlNFID0gIkdQTHYzKyIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PWQzMjIzOWJjYjY3MzQ2M2FiODc0ZTgwZDQ3ZmFlNTA0IgorCitQQUNLQUdFQ09ORklHID8/PSAiYWNsIGF0dHIgXAorICAgICR7QGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCAnaXB2NicsICdpcHY2JywgJycsIGQpfSBcCisiCiBQQUNLQUdFQ09ORklHW2FjbF0gPSAiLS1lbmFibGUtYWNsLXN1cHBvcnQsLS1kaXNhYmxlLWFjbC1zdXBwb3J0LGFjbCwiCiBQQUNLQUdFQ09ORklHW2F0dHJdID0gIi0tZW5hYmxlLXhhdHRyLXN1cHBvcnQsLS1kaXNhYmxlLXhhdHRyLXN1cHBvcnQsYXR0ciwiCiAKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcnVieS9ydWJ5LmluYyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcnVieS9ydWJ5LmluYwppbmRleCAzMTNlNzUyLi5mZGU2N2U5IDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3J1YnkvcnVieS5pbmMKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9ydWJ5L3J1YnkuaW5jCkBAIC0yMCw3ICsyMCw4IEBACiBTSFJUX1ZFUiA9ICIke0BvZS51dGlscy50cmltX3ZlcnNpb24oIiR7UFZ9IiwgMil9IgogU1JDX1VSSSA9ICJodHRwOi8vY2FjaGUucnVieS1sYW5nLm9yZy9wdWIvcnVieS8ke1NIUlRfVkVSfS9ydWJ5LSR7UFZ9LnRhci5neiBcCiAgICAgICAgICAgIGZpbGU6Ly9leHRtay5wYXRjaCBcCi0iCisgICAgICAgICAgIGZpbGU6Ly8wMDAyLU9iZXktTERGTEFHUy1mb3ItdGhlLWxpbmstb2YtbGlicnVieS5wYXRjaCBcCisgICAgICAgICAgICIKIAogaW5oZXJpdCBhdXRvdG9vbHMKIApkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9ydWJ5L3J1YnkvMDAwMi1PYmV5LUxERkxBR1MtZm9yLXRoZS1saW5rLW9mLWxpYnJ1YnkucGF0Y2ggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3J1YnkvcnVieS8wMDAyLU9iZXktTERGTEFHUy1mb3ItdGhlLWxpbmstb2YtbGlicnVieS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMDExNGJhCi0tLSAvZGV2L251bGwKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9ydWJ5L3J1YnkvMDAwMi1PYmV5LUxERkxBR1MtZm9yLXRoZS1saW5rLW9mLWxpYnJ1YnkucGF0Y2gKQEAgLTAsMCArMSwyOCBAQAorVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK0Zyb20gMzA2ZTk1YTk4MThkMzlkMzM0OTA3NWFhYzk2MDllMDYyYjBmMTljZSBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IENocmlzdG9waGVyIExhcnNvbiA8Y2hyaXNfbGFyc29uQG1lbnRvci5jb20+CitEYXRlOiBUaHUsIDUgTWF5IDIwMTYgMTA6NTk6MDcgLTA3MDAKK1N1YmplY3Q6IFtQQVRDSCAyLzJdIE9iZXkgTERGTEFHUyBmb3IgdGhlIGxpbmsgb2YgbGlicnVieQorCitTaWduZWQtb2ZmLWJ5OiBDaHJpc3RvcGhlciBMYXJzb24gPGNocmlzX2xhcnNvbkBtZW50b3IuY29tPgorLS0tCisgTWFrZWZpbGUuaW4gfCAyICstCisgMSBmaWxlIGNoYW5nZWQsIDEgaW5zZXJ0aW9uKCspLCAxIGRlbGV0aW9uKC0pCisKK2RpZmYgLS1naXQgYS9NYWtlZmlsZS5pbiBiL01ha2VmaWxlLmluCitpbmRleCA3ZGEyNDg4Li41YjRhZWExIDEwMDY0NAorLS0tIGEvTWFrZWZpbGUuaW4KKysrKyBiL01ha2VmaWxlLmluCitAQCAtNzUsNyArNzUsNyBAQCBFWFRMSUJTID0KKyBMSUJTID0gQExJQlNAICQoRVhUTElCUykKKyBNSVNTSU5HID0gQExJQk9CSlNAIEBBTExPQ0FACisgTERTSEFSRUQgPSBATElCUlVCWV9MRFNIQVJFREAKKy1ETERGTEFHUyA9IEBMSUJSVUJZX0RMREZMQUdTQCAkKFhMREZMQUdTKSAkKEFSQ0hfRkxBRykKKytETERGTEFHUyA9IEBMSUJSVUJZX0RMREZMQUdTQCBATERGTEFHU0AgJChYTERGTEFHUykgJChBUkNIX0ZMQUcpCisgU09MSUJTID0gQFNPTElCU0AKKyBNQUlOTElCUyA9IEBNQUlOTElCU0AKKyBBUkNITUlOSU9CSlMgPSBATUlOSU9CSlNACistLSAKKzIuOC4wCisKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcnVieS9ydWJ5XzIuMi4yLmJiIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9ydWJ5L3J1YnlfMi4yLjIuYmIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDY3MTUwMjMuLjAwMDAwMDAKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9ydWJ5L3J1YnlfMi4yLjIuYmIKKysrIC9kZXYvbnVsbApAQCAtMSw0NiArMCwwIEBACi1yZXF1aXJlIHJ1YnkuaW5jCi0KLVNSQ19VUklbbWQ1c3VtXSA9ICIzMjZlOTlkZGM3NTM4MWM3YjUwYzg1ZjcwODlmMzI2MCIKLVNSQ19VUklbc2hhMjU2c3VtXSA9ICI1ZmZjMGYzMTdlNDI5ZTZiMjlkNGE5OGFjNTIxYzNjZTY1NDgxYmZkMjJhOGNmODQ1ZmEwMmE3YjExM2Q5YjQ0IgotCi0jIGl0J3MgdW5rbm93biB0byBjb25maWd1cmUgc2NyaXB0LCBidXQgdGhlbiBwYXNzZWQgdG8gZXh0Y29uZi5yYgotIyBtYXliZSBpdCdzIG5vdCByZWFsbHkgbmVlZGVkIGFzIHdlJ3JlIGhhcmRjb2RpbmcgdGhlIHJlc3VsdCB3aXRoCi0jIDAwMDEtc29ja2V0LWV4dGNvbmYtaGFyZGNvZGUtd2lkZS1nZXRhZGRyLWluZm8tdGVzdC1vdXRjby5wYXRjaAotVU5LTk9XTl9DT05GSUdVUkVfV0hJVEVMSVNUICs9ICItLWVuYWJsZS13aWRlLWdldGFkZHJpbmZvIgotCi1QQUNLQUdFQ09ORklHID8/PSAiIgotUEFDS0FHRUNPTkZJRyArPSAiJHtAYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsICdpcHY2JywgJ2lwdjYnLCAnJywgZCl9IgotCi1QQUNLQUdFQ09ORklHW3ZhbGdyaW5kXSA9ICItLXdpdGgtdmFsZ3JpbmQ9eWVzLCAtLXdpdGgtdmFsZ3JpbmQ9bm8sIHZhbGdyaW5kIgotUEFDS0FHRUNPTkZJR1tncG1dID0gIi0td2l0aC1nbXA9eWVzLCAtLXdpdGgtZ21wPW5vLCBnbXAiCi1QQUNLQUdFQ09ORklHW2lwdjZdID0gIiwtLWVuYWJsZS13aWRlLWdldGFkZHJpbmZvLCIKLQotRVhUUkFfT0VDT05GID0gIlwKLSAgICAtLWRpc2FibGUtdmVyc2lvbmVkLXBhdGhzIFwKLSAgICAtLWRpc2FibGUtcnBhdGggXAotICAgIC0tZGlzYWJsZS1kdHJhY2UgXAotICAgIC0tZW5hYmxlLXNoYXJlZCBcCi0gICAgLS1lbmFibGUtbG9hZC1yZWxhdGl2ZSBcCi0iCi0KLUVYVFJBX09FTUFLRSA9ICIgXAotICAgIExJQlJVQllBUkc9Jy1scnVieS1zdGF0aWMnIFwKLSIKLQotZG9faW5zdGFsbCgpIHsKLSAgICBvZV9ydW5tYWtlICdERVNURElSPSR7RH0nIGluc3RhbGwKLX0KLQotUEFDS0FHRVMgPSsgIiR7UE59LXJpLWRvY3MgJHtQTn0tcmRvYyIKLQotU1VNTUFSWV8ke1BOfS1yaS1kb2NzID0gInJpIChSdWJ5IEludGVyYWN0aXZlKSBkb2N1bWVudGF0aW9uIGZvciB0aGUgUnVieSBzdGFuZGFyZCBsaWJyYXJ5IgotUkRFUEVORFNfJHtQTn0tcmktZG9jcyA9ICIke1BOfSIKLUZJTEVTXyR7UE59LXJpLWRvY3MgKz0gIiR7ZGF0YWRpcn0vcmkiCi0KLVNVTU1BUllfJHtQTn0tcmRvYyA9ICJSRG9jIGRvY3VtZW50YXRpb24gZ2VuZXJhdG9yIGZyb20gUnVieSBzb3VyY2UiCi1SREVQRU5EU18ke1BOfS1yZG9jID0gIiR7UE59IgotRklMRVNfJHtQTn0tcmRvYyArPSAiJHtsaWJkaXJ9L3J1YnkvKi9yZG9jICR7YmluZGlyfS9yZG9jIgotCi1GSUxFU18ke1BOfSArPSAiJHtkYXRhZGlyfS9ydWJ5Z2VtcyIKLQotQkJDTEFTU0VYVEVORCA9ICJuYXRpdmUiCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3J1YnkvcnVieV8yLjIuNS5iYiBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcnVieS9ydWJ5XzIuMi41LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVhNjQ1ODIKLS0tIC9kZXYvbnVsbAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3J1YnkvcnVieV8yLjIuNS5iYgpAQCAtMCwwICsxLDQyIEBACityZXF1aXJlIHJ1YnkuaW5jCisKK1NSQ19VUklbbWQ1c3VtXSA9ICJiZDhlMzQ5ZDRmYjJjNzVkOTA4MTc2NDk2NzRmOTRiZSIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICIzMGM0YjMxNjk3YTRjYTRlYTBjOGRiOGFkMzBjZjQ1ZTY2OTBhMGYwOTY4N2U1ZDQ4M2M5MzNjMDNjYTMzNWUzIgorCisjIGl0J3MgdW5rbm93biB0byBjb25maWd1cmUgc2NyaXB0LCBidXQgdGhlbiBwYXNzZWQgdG8gZXh0Y29uZi5yYgorIyBtYXliZSBpdCdzIG5vdCByZWFsbHkgbmVlZGVkIGFzIHdlJ3JlIGhhcmRjb2RpbmcgdGhlIHJlc3VsdCB3aXRoCisjIDAwMDEtc29ja2V0LWV4dGNvbmYtaGFyZGNvZGUtd2lkZS1nZXRhZGRyLWluZm8tdGVzdC1vdXRjby5wYXRjaAorVU5LTk9XTl9DT05GSUdVUkVfV0hJVEVMSVNUICs9ICItLWVuYWJsZS13aWRlLWdldGFkZHJpbmZvIgorCitQQUNLQUdFQ09ORklHID8/PSAiIgorUEFDS0FHRUNPTkZJRyArPSAiJHtAYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsICdpcHY2JywgJ2lwdjYnLCAnJywgZCl9IgorCitQQUNLQUdFQ09ORklHW3ZhbGdyaW5kXSA9ICItLXdpdGgtdmFsZ3JpbmQ9eWVzLCAtLXdpdGgtdmFsZ3JpbmQ9bm8sIHZhbGdyaW5kIgorUEFDS0FHRUNPTkZJR1tncG1dID0gIi0td2l0aC1nbXA9eWVzLCAtLXdpdGgtZ21wPW5vLCBnbXAiCitQQUNLQUdFQ09ORklHW2lwdjZdID0gIiwtLWVuYWJsZS13aWRlLWdldGFkZHJpbmZvLCIKKworRVhUUkFfT0VDT05GID0gIlwKKyAgICAtLWRpc2FibGUtdmVyc2lvbmVkLXBhdGhzIFwKKyAgICAtLWRpc2FibGUtcnBhdGggXAorICAgIC0tZGlzYWJsZS1kdHJhY2UgXAorICAgIC0tZW5hYmxlLXNoYXJlZCBcCisgICAgLS1lbmFibGUtbG9hZC1yZWxhdGl2ZSBcCisiCisKK2RvX2luc3RhbGwoKSB7CisgICAgb2VfcnVubWFrZSAnREVTVERJUj0ke0R9JyBpbnN0YWxsCit9CisKK1BBQ0tBR0VTID0rICIke1BOfS1yaS1kb2NzICR7UE59LXJkb2MiCisKK1NVTU1BUllfJHtQTn0tcmktZG9jcyA9ICJyaSAoUnVieSBJbnRlcmFjdGl2ZSkgZG9jdW1lbnRhdGlvbiBmb3IgdGhlIFJ1Ynkgc3RhbmRhcmQgbGlicmFyeSIKK1JERVBFTkRTXyR7UE59LXJpLWRvY3MgPSAiJHtQTn0iCitGSUxFU18ke1BOfS1yaS1kb2NzICs9ICIke2RhdGFkaXJ9L3JpIgorCitTVU1NQVJZXyR7UE59LXJkb2MgPSAiUkRvYyBkb2N1bWVudGF0aW9uIGdlbmVyYXRvciBmcm9tIFJ1Ynkgc291cmNlIgorUkRFUEVORFNfJHtQTn0tcmRvYyA9ICIke1BOfSIKK0ZJTEVTXyR7UE59LXJkb2MgKz0gIiR7bGliZGlyfS9ydWJ5LyovcmRvYyAke2JpbmRpcn0vcmRvYyIKKworRklMRVNfJHtQTn0gKz0gIiR7ZGF0YWRpcn0vcnVieWdlbXMiCisKK0JCQ0xBU1NFWFRFTkQgPSAibmF0aXZlIgpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9ydW4tcG9zdGluc3RzL3J1bi1wb3N0aW5zdHMvcnVuLXBvc3RpbnN0cyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcnVuLXBvc3RpbnN0cy9ydW4tcG9zdGluc3RzL3J1bi1wb3N0aW5zdHMKaW5kZXggNTNhOGUxZC4uMDRiYTM5NCAxMDA3NTUKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9ydW4tcG9zdGluc3RzL3J1bi1wb3N0aW5zdHMvcnVuLXBvc3RpbnN0cworKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3J1bi1wb3N0aW5zdHMvcnVuLXBvc3RpbnN0cy9ydW4tcG9zdGluc3RzCkBAIC02LDcgKzYsNyBAQAogIwogCiAjIFRoZSBmb2xsb3dpbmcgc2NyaXB0IHdpbGwgcnVuIGFsbCB0aGUgc2NyaXB0bGV0cyBmb3VuZCBpbiAjU1lTQ09ORkRJUiMvZGViLXBvc3RpbnN0cywKLSMgI1NZU0NPTkZESVIjL2lway1wb3N0aW5zdHMgb3IgI1NZU0NPTkZESVIjL3JwbS1wb3NpbnN0cy4KKyMgI1NZU0NPTkZESVIjL2lway1wb3N0aW5zdHMgb3IgI1NZU0NPTkZESVIjL3JwbS1wb3N0aW5zdHMuCiAKICMgdGhlIG9yZGVyIG9mIHRoaXMgbGlzdCBpcyBpbXBvcnRhbnQsIGRvIG5vdCBjaGFuZ2UhCiBiYWNrZW5kX2xpc3Q9InJwbSBkZWIgaXBrIgpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9zZ21sLWNvbW1vbi9zZ21sLWNvbW1vbi1uYXRpdmVfMC42LjMuYmIgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3NnbWwtY29tbW9uL3NnbWwtY29tbW9uLW5hdGl2ZV8wLjYuMy5iYgppbmRleCA1OTc1MzY1Li45N2IzMDhhIDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3NnbWwtY29tbW9uL3NnbWwtY29tbW9uLW5hdGl2ZV8wLjYuMy5iYgorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3NnbWwtY29tbW9uL3NnbWwtY29tbW9uLW5hdGl2ZV8wLjYuMy5iYgpAQCAtMjIsOCArMjIsNiBAQAogCiBTWVNST09UX1BSRVBST0NFU1NfRlVOQ1MgKz0gInNnbWxfY29tbW9uX25hdGl2ZV9tYW5nbGUiCiBTU1RBVEVQT1NUSU5TVEZVTkNTICs9ICJzZ21sX2NvbW1vbl9zc3RhdGVfcG9zdGluc3QiCi1DTEVBTkZVTkNTICs9ICJzZ21sX2NvbW1vbl9zc3RhdGVfY2xlYW4iCi0KIAogZG9faW5zdGFsbF9hcHBlbmQoKSB7CiAJIyBpbnN0YWxsLWNhdGFsb2cgc2NyaXB0IGNvbnRhaW5zIGhhcmQtY29kZWQgcmVmZXJlbmNlcyB0bwpAQCAtNTksMTMgKzU3LDE0IEBACiAJCQkJZmkKIAkJCWRvbmUKIAkJZmkKLQlmaQotfQorCQljYXQgPDwgRU9GID4gJHtTU1RBVEVfSU5TVF9QT1NUUk19CisjIS9iaW4vc2gKIAotc2dtbF9jb21tb25fc3N0YXRlX2NsZWFuICgpIHsKLQkjIEVuc3VyZSB0aGF0IHRoZSBjYXRhbG9nIGZpbGUgc2dtbC1kb2Nib29rLmNhdCBpcyBwcm9wZXJseQotCSMgdXBkYXRlZCB3aGVuIHRoZSBwYWNrYWdlIGlzIHJlbW92ZWQgZnJvbSBzc3RhdGUgY2FjaGUuCi0JaWYgWyAtZiAke3N5c2NvbmZkaXJ9L3NnbWwvc2dtbC1kb2Nib29rLmNhdCBdOyB0aGVuCi0JCXNlZCAtaSAnL1wvc2dtbFwvc2dtbC1lbnQuY2F0L2QnICR7c3lzY29uZmRpcn0vc2dtbC9zZ21sLWRvY2Jvb2suY2F0CisjIEVuc3VyZSB0aGF0IHRoZSBjYXRhbG9nIGZpbGUgc2dtbC1kb2Nib29rLmNhdCBpcyBwcm9wZXJseQorIyB1cGRhdGVkIHdoZW4gdGhlIHBhY2thZ2UgaXMgcmVtb3ZlZCBmcm9tIHNzdGF0ZSBjYWNoZS4KK2lmIFsgLWYgJHtzeXNjb25mZGlyfS9zZ21sL3NnbWwtZG9jYm9vay5jYXQgXTsgdGhlbgorCXNlZCAtaSAnL1wvc2dtbFwvc2dtbC1lbnQuY2F0L2QnICR7c3lzY29uZmRpcn0vc2dtbC9zZ21sLWRvY2Jvb2suY2F0CitmaQorRU9GCiAJZmkKIH0KZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvc3RyYWNlL3N0cmFjZS8wMDAxLUZpeC1idWlsZC13aGVuLXVzaW5nLW5vbi1nbGliYy1saWJjLWltcGxlbWVudGF0aW9uLW8ucGF0Y2ggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3N0cmFjZS9zdHJhY2UvMDAwMS1GaXgtYnVpbGQtd2hlbi11c2luZy1ub24tZ2xpYmMtbGliYy1pbXBsZW1lbnRhdGlvbi1vLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdmNTkyMTAKLS0tIC9kZXYvbnVsbAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3N0cmFjZS9zdHJhY2UvMDAwMS1GaXgtYnVpbGQtd2hlbi11c2luZy1ub24tZ2xpYmMtbGliYy1pbXBsZW1lbnRhdGlvbi1vLnBhdGNoCkBAIC0wLDAgKzEsMzYgQEAKK0Zyb20gMWYwYzIyYjc5MDQ1Y2ZjZGM5NzY2NDNmMzgzYzFkMDk1ODlkMzA4NyBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CitEYXRlOiBTYXQsIDMwIEFwciAyMDE2IDE2OjIzOjU2ICswMDAwCitTdWJqZWN0OiBbUEFUQ0hdIEZpeCBidWlsZCB3aGVuIHVzaW5nIG5vbi1nbGliYyBsaWJjIGltcGxlbWVudGF0aW9uIG9uIHBwYworCitnbGliYyBpbmNsdWRlcyB0aGUga2VybmVsIGhlYWRlciBpbnRvIGl0cyBvd24gaGVhZGVyIGZvciBtYWNyb3MKK211c2wgZG9lcyBub3QKKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCitTaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorLS0tCisgcHRyYWNlLmggfCA4ICsrKysrKystCisgMSBmaWxlIGNoYW5nZWQsIDcgaW5zZXJ0aW9ucygrKSwgMSBkZWxldGlvbigtKQorCitkaWZmIC0tZ2l0IGEvcHRyYWNlLmggYi9wdHJhY2UuaAoraW5kZXggZDhhZjk3Ni4uNDk3OGE2OSAxMDA2NDQKKy0tLSBhL3B0cmFjZS5oCisrKysgYi9wdHJhY2UuaAorQEAgLTUyLDcgKzUyLDEzIEBAIGV4dGVybiBsb25nIHB0cmFjZShpbnQsIGludCwgY2hhciAqLCBsb25nKTsKKyAjIGRlZmluZSBwdHJhY2VfcGVla3NpZ2luZm9fYXJncyBYWFhfcHRyYWNlX3BlZWtzaWdpbmZvX2FyZ3MKKyAjZW5kaWYKKyAKKy0jaW5jbHVkZSA8bGludXgvcHRyYWNlLmg+CisrI2lmIGRlZmluZWQoUE9XRVJQQykgJiYgIWRlZmluZWQoX19HTElCQ19fKQorKyNkZWZpbmUgcHRfcmVncyB1YXBpX3B0X3JlZ3MKKysjZW5kaWYKKysjIGluY2x1ZGUgPGxpbnV4L3B0cmFjZS5oPgorKyNpZiBkZWZpbmVkKFBPV0VSUEMpICYmICFkZWZpbmVkKF9fR0xJQkNfXykKKysjIHVuZGVmIHB0X3JlZ3MKKysjZW5kaWYKKyAKKyAjaWZkZWYgSEFWRV9TVFJVQ1RfSUE2NF9GUFJFRworICMgdW5kZWYgaWE2NF9mcHJlZworLS0gCisxLjguMy4xCisKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvc3RyYWNlL3N0cmFjZS8wMDAxLU1vdmUtZ2NjLWNvbXBhdC1tYWNyb3MtdG8tZ2NjX2NvbXBhdC5oLnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9zdHJhY2Uvc3RyYWNlLzAwMDEtTW92ZS1nY2MtY29tcGF0LW1hY3Jvcy10by1nY2NfY29tcGF0LmgucGF0Y2gKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGFhNjFlMTUuLjAwMDAwMDAKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9zdHJhY2Uvc3RyYWNlLzAwMDEtTW92ZS1nY2MtY29tcGF0LW1hY3Jvcy10by1nY2NfY29tcGF0LmgucGF0Y2gKKysrIC9kZXYvbnVsbApAQCAtMSwxNzYgKzAsMCBAQAotRnJvbSBmMzIxMjZiYTc5MGRkNGU2MWQ0M2EyMTQwYjI0ZjAyNDI2Mjk3YmI2IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQotRnJvbTogIkRtaXRyeSBWLiBMZXZpbiIgPGxkdkBhbHRsaW51eC5vcmc+Ci1EYXRlOiBUaHUsIDMxIERlYyAyMDE1IDE0OjE5OjQxICswMDAwCi1TdWJqZWN0OiBbUEFUQ0hdIE1vdmUgZ2NjIGNvbXBhdCBtYWNyb3MgdG8gZ2NjX2NvbXBhdC5oCi0KLSogZGVmcy5oOiBJbmNsdWRlICJnY2NfY29tcGF0LmgiLgotKEdOVUNfUFJFUkVRLCBBVFRSSUJVVEVfTk9SRVRVUk4sIEFUVFJJQlVURV9GT1JNQVQsCi1BVFRSSUJVVEVfQUxJR05FRCwgQVRUUklCVVRFX1BBQ0tFRCwgQVRUUklCVVRFX01BTExPQywKLUFUVFJJQlVURV9OT0lOTElORSwgQVRUUklCVVRFX0FMTE9DX1NJWkUpOiBNb3ZlIC4uLgotKiBnY2NfY29tcGF0Lmg6IC4uLiBoZXJlLgotKiBNYWtlZmlsZS5hbSAoc3RyYWNlX1NPVVJDRVMpOiBBZGQgZ2NjX2NvbXBhdC5oLgotLS0tCi1TaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgotVXBzdHJlYW0tU3RhdHVzOiBCYWNrcG9ydAotCi0gTWFrZWZpbGUuYW0gIHwgIDEgKwotIGRlZnMuaCAgICAgICB8IDQzICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gZ2NjX2NvbXBhdC5oIHwgNzMgKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrCi0gMyBmaWxlcyBjaGFuZ2VkLCA3NSBpbnNlcnRpb25zKCspLCA0MiBkZWxldGlvbnMoLSkKLSBjcmVhdGUgbW9kZSAxMDA2NDQgZ2NjX2NvbXBhdC5oCi0KLWRpZmYgLS1naXQgYS9NYWtlZmlsZS5hbSBiL01ha2VmaWxlLmFtCi1pbmRleCBhYjUyNzc4Li5kNDM2MDhkIDEwMDY0NAotLS0tIGEvTWFrZWZpbGUuYW0KLSsrKyBiL01ha2VmaWxlLmFtCi1AQCAtOTcsNiArOTcsNyBAQCBzdHJhY2VfU09VUkNFUyA9CVwKLSAJZmxvY2suYwkJXAotIAlmbG9jay5oCQlcCi0gCWZ1dGV4LmMJCVwKLSsJZ2NjX2NvbXBhdC5oCVwKLSAJZ2V0X3JvYnVzdF9saXN0LmMgXAotIAlnZXRjcHUuYwlcCi0gCWdldGN3ZC5jCVwKLWRpZmYgLS1naXQgYS9kZWZzLmggYi9kZWZzLmgKLWluZGV4IDI4M2FiMWYuLmJhZTIxMmMgMTAwNjQ0Ci0tLS0gYS9kZWZzLmgKLSsrKyBiL2RlZnMuaAotQEAgLTU1LDYgKzU1LDcgQEAKLSAjaW5jbHVkZSA8c3lzL3N5c2NhbGwuaD4KLSAKLSAjaW5jbHVkZSAibXBlcnNfdHlwZS5oIgotKyNpbmNsdWRlICJnY2NfY29tcGF0LmgiCi0gCi0gI2lmbmRlZiBIQVZFX1NUUkVSUk9SCi0gY29uc3QgY2hhciAqc3RyZXJyb3IoaW50KTsKLUBAIC02OCw0OCArNjksNiBAQCBjb25zdCBjaGFyICpzdHJlcnJvcihpbnQpOwotIGV4dGVybiBjaGFyICpzdHBjcHkoY2hhciAqZHN0LCBjb25zdCBjaGFyICpzcmMpOwotICNlbmRpZgotIAotLSNpZiBkZWZpbmVkIF9fR05VQ19fICYmIGRlZmluZWQgX19HTlVDX01JTk9SX18KLS0jIGRlZmluZSBHTlVDX1BSRVJFUShtYWosIG1pbikJXAotLQkoKF9fR05VQ19fIDw8IDE2KSArIF9fR05VQ19NSU5PUl9fID49ICgobWFqKSA8PCAxNikgKyAobWluKSkKLS0jZWxzZQotLSMgZGVmaW5lIF9fYXR0cmlidXRlX18oeCkJLyogZW1wdHkgKi8KLS0jIGRlZmluZSBHTlVDX1BSRVJFUShtYWosIG1pbikJMAotLSNlbmRpZgotLQotLSNpZiBHTlVDX1BSRVJFUSgyLCA1KQotLSMgZGVmaW5lIEFUVFJJQlVURV9OT1JFVFVSTglfX2F0dHJpYnV0ZV9fKChfX25vcmV0dXJuX18pKQotLSNlbHNlCi0tIyBkZWZpbmUgQVRUUklCVVRFX05PUkVUVVJOCS8qIGVtcHR5ICovCi0tI2VuZGlmCi0tCi0tI2lmIEdOVUNfUFJFUkVRKDIsIDcpCi0tIyBkZWZpbmUgQVRUUklCVVRFX0ZPUk1BVChhcmdzKQlfX2F0dHJpYnV0ZV9fKChfX2Zvcm1hdF9fIGFyZ3MpKQotLSMgZGVmaW5lIEFUVFJJQlVURV9BTElHTkVEKGFyZykJX19hdHRyaWJ1dGVfXygoX19hbGlnbmVkX18oYXJnKSkpCi0tIyBkZWZpbmUgQVRUUklCVVRFX1BBQ0tFRAlfX2F0dHJpYnV0ZV9fKChfX3BhY2tlZF9fKSkKLS0jZWxzZQotLSMgZGVmaW5lIEFUVFJJQlVURV9GT1JNQVQoYXJncykJLyogZW1wdHkgKi8KLS0jIGRlZmluZSBBVFRSSUJVVEVfQUxJR05FRChhcmcpCS8qIGVtcHR5ICovCi0tIyBkZWZpbmUgQVRUUklCVVRFX1BBQ0tFRAkvKiBlbXB0eSAqLwotLSNlbmRpZgotLQotLSNpZiBHTlVDX1BSRVJFUSgzLCAwKQotLSMgZGVmaW5lIEFUVFJJQlVURV9NQUxMT0MJX19hdHRyaWJ1dGVfXygoX19tYWxsb2NfXykpCi0tI2Vsc2UKLS0jIGRlZmluZSBBVFRSSUJVVEVfTUFMTE9DCS8qIGVtcHR5ICovCi0tI2VuZGlmCi0tCi0tI2lmIEdOVUNfUFJFUkVRKDMsIDEpCi0tIyBkZWZpbmUgQVRUUklCVVRFX05PSU5MSU5FCV9fYXR0cmlidXRlX18oKF9fbm9pbmxpbmVfXykpCi0tI2Vsc2UKLS0jIGRlZmluZSBBVFRSSUJVVEVfTk9JTkxJTkUJLyogZW1wdHkgKi8KLS0jZW5kaWYKLS0KLS0jaWYgR05VQ19QUkVSRVEoNCwgMykKLS0jIGRlZmluZSBBVFRSSUJVVEVfQUxMT0NfU0laRShhcmdzKQlfX2F0dHJpYnV0ZV9fKChfX2FsbG9jX3NpemVfXyBhcmdzKSkKLS0jZWxzZQotLSMgZGVmaW5lIEFUVFJJQlVURV9BTExPQ19TSVpFKGFyZ3MpCS8qIGVtcHR5ICovCi0tI2VuZGlmCi0tCi0gI2lmbmRlZiBvZmZzZXRvZgotICMgZGVmaW5lIG9mZnNldG9mKHR5cGUsIG1lbWJlcikJXAotIAkoKChjaGFyICopICYoKCh0eXBlICopIE5VTEwpLT5tZW1iZXIpKSAtICgoY2hhciAqKSAodHlwZSAqKSBOVUxMKSkKLWRpZmYgLS1naXQgYS9nY2NfY29tcGF0LmggYi9nY2NfY29tcGF0LmgKLW5ldyBmaWxlIG1vZGUgMTAwNjQ0Ci1pbmRleCAwMDAwMDAwLi4xZjJjODM1Ci0tLS0gL2Rldi9udWxsCi0rKysgYi9nY2NfY29tcGF0LmgKLUBAIC0wLDAgKzEsNzMgQEAKLSsvKgotKyAqIENvcHlyaWdodCAoYykgMjAxNSBEbWl0cnkgVi4gTGV2aW4gPGxkdkBhbHRsaW51eC5vcmc+Ci0rICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSsgKgotKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotKyAqIGFyZSBtZXQ6Ci0rICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSsgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0rICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSsgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0rICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSsgKiAzLiBUaGUgbmFtZSBvZiB0aGUgYXV0aG9yIG1heSBub3QgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMKLSsgKiAgICBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLSsgKgotKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIEFVVEhPUiBgYEFTIElTJycgQU5EIEFOWSBFWFBSRVNTIE9SCi0rICogSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUwotKyAqIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuCi0rICogSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULAotKyAqIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVAotKyAqIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKLSsgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKLSsgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0rICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCi0rICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSsgKi8KLSsKLSsjaWZuZGVmIEdDQ19DT01QQVRfSF8KLSsjZGVmaW5lIEdDQ19DT01QQVRfSF8KLSsKLSsjaWYgZGVmaW5lZCBfX0dOVUNfXyAmJiBkZWZpbmVkIF9fR05VQ19NSU5PUl9fCi0rIyBkZWZpbmUgR05VQ19QUkVSRVEobWFqLCBtaW4pCVwKLSsJKChfX0dOVUNfXyA8PCAxNikgKyBfX0dOVUNfTUlOT1JfXyA+PSAoKG1haikgPDwgMTYpICsgKG1pbikpCi0rI2Vsc2UKLSsjIGRlZmluZSBfX2F0dHJpYnV0ZV9fKHgpCS8qIGVtcHR5ICovCi0rIyBkZWZpbmUgR05VQ19QUkVSRVEobWFqLCBtaW4pCTAKLSsjZW5kaWYKLSsKLSsjaWYgR05VQ19QUkVSRVEoMiwgNSkKLSsjIGRlZmluZSBBVFRSSUJVVEVfTk9SRVRVUk4JX19hdHRyaWJ1dGVfXygoX19ub3JldHVybl9fKSkKLSsjZWxzZQotKyMgZGVmaW5lIEFUVFJJQlVURV9OT1JFVFVSTgkvKiBlbXB0eSAqLwotKyNlbmRpZgotKwotKyNpZiBHTlVDX1BSRVJFUSgyLCA3KQotKyMgZGVmaW5lIEFUVFJJQlVURV9GT1JNQVQoYXJncykJX19hdHRyaWJ1dGVfXygoX19mb3JtYXRfXyBhcmdzKSkKLSsjIGRlZmluZSBBVFRSSUJVVEVfQUxJR05FRChhcmcpCV9fYXR0cmlidXRlX18oKF9fYWxpZ25lZF9fKGFyZykpKQotKyMgZGVmaW5lIEFUVFJJQlVURV9QQUNLRUQJX19hdHRyaWJ1dGVfXygoX19wYWNrZWRfXykpCi0rI2Vsc2UKLSsjIGRlZmluZSBBVFRSSUJVVEVfRk9STUFUKGFyZ3MpCS8qIGVtcHR5ICovCi0rIyBkZWZpbmUgQVRUUklCVVRFX0FMSUdORUQoYXJnKQkvKiBlbXB0eSAqLwotKyMgZGVmaW5lIEFUVFJJQlVURV9QQUNLRUQJLyogZW1wdHkgKi8KLSsjZW5kaWYKLSsKLSsjaWYgR05VQ19QUkVSRVEoMywgMCkKLSsjIGRlZmluZSBBVFRSSUJVVEVfTUFMTE9DCV9fYXR0cmlidXRlX18oKF9fbWFsbG9jX18pKQotKyNlbHNlCi0rIyBkZWZpbmUgQVRUUklCVVRFX01BTExPQwkvKiBlbXB0eSAqLwotKyNlbmRpZgotKwotKyNpZiBHTlVDX1BSRVJFUSgzLCAxKQotKyMgZGVmaW5lIEFUVFJJQlVURV9OT0lOTElORQlfX2F0dHJpYnV0ZV9fKChfX25vaW5saW5lX18pKQotKyNlbHNlCi0rIyBkZWZpbmUgQVRUUklCVVRFX05PSU5MSU5FCS8qIGVtcHR5ICovCi0rI2VuZGlmCi0rCi0rI2lmIEdOVUNfUFJFUkVRKDQsIDMpCi0rIyBkZWZpbmUgQVRUUklCVVRFX0FMTE9DX1NJWkUoYXJncykJX19hdHRyaWJ1dGVfXygoX19hbGxvY19zaXplX18gYXJncykpCi0rI2Vsc2UKLSsjIGRlZmluZSBBVFRSSUJVVEVfQUxMT0NfU0laRShhcmdzKQkvKiBlbXB0eSAqLwotKyNlbmRpZgotKwotKyNlbmRpZgotLS0gCi0xLjkuMQotCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3N0cmFjZS9zdHJhY2UvMDAwMS1hcmMtbWV0YWctbmlvczItb3Ixay10aWxlLWZpeC1idWlsZC5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvc3RyYWNlL3N0cmFjZS8wMDAxLWFyYy1tZXRhZy1uaW9zMi1vcjFrLXRpbGUtZml4LWJ1aWxkLnBhdGNoCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhOWQzMjAzLi4wMDAwMDAwCi0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvc3RyYWNlL3N0cmFjZS8wMDAxLWFyYy1tZXRhZy1uaW9zMi1vcjFrLXRpbGUtZml4LWJ1aWxkLnBhdGNoCisrKyAvZGV2L251bGwKQEAgLTEsMTE3ICswLDAgQEAKLUZyb20gZGQxYTgwYzhkMjEzZWVkOTVmZTU1YjdlYmNiMDdlZTE2NWRkOGU0YiBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKLUZyb206ICJEbWl0cnkgVi4gTGV2aW4iIDxsZHZAYWx0bGludXgub3JnPgotRGF0ZTogVGh1LCAyNCBEZWMgMjAxNSAxNTo0MDo1NSArMDAwMAotU3ViamVjdDogW1BBVENIXSBhcmMsIG1ldGFnLCBuaW9zMiwgb3IxaywgdGlsZTogZml4IGJ1aWxkCi0KLUZpeCBidWlsZCByZWdyZXNzaW9uIGludHJvZHVjZWQgYnkgY29tbWl0Ci0zNDY4M2UzOTI2ZDhjMmRhYTM2OGFmYjgwNWRhNDIyZWU3MDQzMzk2LgotCi0qIGxpbnV4LzMyL3N5c2NhbGxlbnQuaDogQWRkIHN5c18gcHJlZml4IHRvIEFSQ0hfbW1hcCBhbmQgbW1hcC4KLSogbGludXgvYXJjL3N5c2NhbGxlbnQuaDogQWRkIHN5c18gcHJlZml4IHRvIEFSQ0hfbW1hcCBhbmQgbW1hcF9wZ29mZi4KLSogbGludXgvbmlvczIvc3lzY2FsbGVudC5oOiBMaWtld2lzZS4KLSogbGludXgvb3Ixay9zeXNjYWxsZW50Lmg6IExpa2V3aXNlLgotKiBsaW51eC90aWxlL3N5c2NhbGxlbnQxLmg6IEFkZCBzeXNfIHByZWZpeCB0byBBUkNIX21tYXAgYW5kIHN5c19tbWFwXzRrb2ZmLgotKiBwYXRodHJhY2UuYyAocGF0aHRyYWNlX21hdGNoKTogSGFuZGxlIFNFTl9BUkNIX21tYXAuCi0qIE5FV1M6IE1lbnRpb24gdGhpcyBidWlsZCBmaXguCi0KLVJlcG9ydGVkLWJ5OiBBbGV4ZXkgQnJvZGtpbiA8QWxleGV5LkJyb2RraW5Ac3lub3BzeXMuY29tPgotU2lnbmVkLW9mZi1ieTogTWFyZWsgVmFzdXQgPG1hcmV4QGRlbnguZGU+Ci1VcHN0cmVhbS1TdGF0dXM6IEJhY2twb3J0Ci0tLS0KLSBORVdTICAgICAgICAgICAgICAgICAgICAgfCAzICsrKwotIGxpbnV4LzMyL3N5c2NhbGxlbnQuaCAgICB8IDYgKysrLS0tCi0gbGludXgvYXJjL3N5c2NhbGxlbnQuaCAgIHwgMiArLQotIGxpbnV4L25pb3MyL3N5c2NhbGxlbnQuaCB8IDIgKy0KLSBsaW51eC9vcjFrL3N5c2NhbGxlbnQuaCAgfCAyICstCi0gbGludXgvdGlsZS9zeXNjYWxsZW50MS5oIHwgMiArLQotIHBhdGh0cmFjZS5jICAgICAgICAgICAgICB8IDEgKwotIDcgZmlsZXMgY2hhbmdlZCwgMTEgaW5zZXJ0aW9ucygrKSwgNyBkZWxldGlvbnMoLSkKLQotZGlmZiAtLWdpdCBhL05FV1MgYi9ORVdTCi1pbmRleCBmZTQwY2E0Li4wOTI2M2ViIDEwMDY0NAotLS0tIGEvTkVXUwotKysrIGIvTkVXUwotQEAgLTEsMyArMSw5IEBACi0rTm90ZXdvcnRoeSBjaGFuZ2VzIGluIHJlbGVhc2UgPy4/PyAoPz8/Py0/Py0/PykKLSs9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotKwotKyogQnVnIGZpeGVzCi0rICAqIEZpeGVkIGJ1aWxkIG9uIGFyYywgbWV0YWcsIG5pb3MyLCBvcjFrLCBhbmQgdGlsZSBhcmNoaXRlY3R1cmVzLgotKwotIE5vdGV3b3J0aHkgY2hhbmdlcyBpbiByZWxlYXNlIDQuMTEgKDIwMTUtMTItMjEpCi0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAKLWRpZmYgLS1naXQgYS9saW51eC8zMi9zeXNjYWxsZW50LmggYi9saW51eC8zMi9zeXNjYWxsZW50LmgKLWluZGV4IDVmOTk3ZTcuLmU2Zjg5NWMgMTAwNjQ0Ci0tLS0gYS9saW51eC8zMi9zeXNjYWxsZW50LmgKLSsrKyBiL2xpbnV4LzMyL3N5c2NhbGxlbnQuaAotQEAgLTEsNSArMSw1IEBACi0tI2lmbmRlZiBBUkNIX21tYXAKLS0jIGRlZmluZSBBUkNIX21tYXAgbW1hcAotKyNpZm5kZWYgc3lzX0FSQ0hfbW1hcAotKyMgZGVmaW5lIHN5c19BUkNIX21tYXAgc3lzX21tYXAKLSAjZW5kaWYKLSBbICAwXSA9IHsgMiwJMCwJCVNFTihpb19zZXR1cCksCQkJImlvX3NldHVwIgkJfSwKLSBbICAxXSA9IHsgMSwJMCwJCVNFTihpb19kZXN0cm95KSwJCSJpb19kZXN0cm95IgkJfSwKLUBAIC0yNzYsNSArMjc2LDUgQEAKLSBbMjgzXSA9IHsgMiwJMCwJCVNFTihtZW1iYXJyaWVyKSwJCSJtZW1iYXJyaWVyIiwJCX0sCi0gWzI4NF0gPSB7IDMsCVRNLAkJU0VOKG1sb2NrMiksCQkJIm1sb2NrMiIJCX0sCi0gCi0tI3VuZGVmIEFSQ0hfbW1hcAotKyN1bmRlZiBzeXNfQVJDSF9tbWFwCi0gI3VuZGVmIEFSQ0hfV0FOVF9TWU5DX0ZJTEVfUkFOR0UyCi1kaWZmIC0tZ2l0IGEvbGludXgvYXJjL3N5c2NhbGxlbnQuaCBiL2xpbnV4L2FyYy9zeXNjYWxsZW50LmgKLWluZGV4IDU4NDdkYzQuLjExMDAwMDggMTAwNjQ0Ci0tLS0gYS9saW51eC9hcmMvc3lzY2FsbGVudC5oCi0rKysgYi9saW51eC9hcmMvc3lzY2FsbGVudC5oCi1AQCAtMSw0ICsxLDQgQEAKLS0jZGVmaW5lIEFSQ0hfbW1hcCBtbWFwX3Bnb2ZmCi0rI2RlZmluZSBzeXNfQVJDSF9tbWFwIHN5c19tbWFwX3Bnb2ZmCi0gI2luY2x1ZGUgIjMyL3N5c2NhbGxlbnQuaCIKLSBbMjQ0XSA9IHsgMywJMCwJU0VOKHByaW50YXJncyksCSJhcmNfY2FjaGVmbHVzaCJ9LAotIFsyNDVdID0geyAxLAkwLAlTRU4ocHJpbnRhcmdzKSwJImFyY19zZXR0bHMiCX0sCi1kaWZmIC0tZ2l0IGEvbGludXgvbmlvczIvc3lzY2FsbGVudC5oIGIvbGludXgvbmlvczIvc3lzY2FsbGVudC5oCi1pbmRleCA4YTRiNzBlLi4wMWVmZTNhIDEwMDY0NAotLS0tIGEvbGludXgvbmlvczIvc3lzY2FsbGVudC5oCi0rKysgYi9saW51eC9uaW9zMi9zeXNjYWxsZW50LmgKLUBAIC0xLDQgKzEsNCBAQAotLSNkZWZpbmUgQVJDSF9tbWFwIG1tYXBfcGdvZmYKLSsjZGVmaW5lIHN5c19BUkNIX21tYXAgc3lzX21tYXBfcGdvZmYKLSAjaW5jbHVkZSAiMzIvc3lzY2FsbGVudC5oIgotIFsyNDRdID0gezQsICAgIDAsCVNFTihjYWNoZWZsdXNoKSwgImNhY2hlZmx1c2gifSwKLSBbMjQ1IC4uLiAyNTldID0geyB9LAotZGlmZiAtLWdpdCBhL2xpbnV4L29yMWsvc3lzY2FsbGVudC5oIGIvbGludXgvb3Ixay9zeXNjYWxsZW50LmgKLWluZGV4IGVkODRiM2IuLjM1MWZlMjUgMTAwNjQ0Ci0tLS0gYS9saW51eC9vcjFrL3N5c2NhbGxlbnQuaAotKysrIGIvbGludXgvb3Ixay9zeXNjYWxsZW50LmgKLUBAIC0xLDQgKzEsNCBAQAotLSNkZWZpbmUgQVJDSF9tbWFwIG1tYXBfcGdvZmYKLSsjZGVmaW5lIHN5c19BUkNIX21tYXAgc3lzX21tYXBfcGdvZmYKLSAjaW5jbHVkZSAiMzIvc3lzY2FsbGVudC5oIgotIFsyNDRdID0geyAzLAlORiwJU0VOKG9yMWtfYXRvbWljKSwJIm9yMWtfYXRvbWljIgl9LAotIFsyNDUgLi4uIDI1OV0gPSB7IH0sCi1kaWZmIC0tZ2l0IGEvbGludXgvdGlsZS9zeXNjYWxsZW50MS5oIGIvbGludXgvdGlsZS9zeXNjYWxsZW50MS5oCi1pbmRleCBjODZmMDU5Li4yOGRiYWI0IDEwMDY0NAotLS0tIGEvbGludXgvdGlsZS9zeXNjYWxsZW50MS5oCi0rKysgYi9saW51eC90aWxlL3N5c2NhbGxlbnQxLmgKLUBAIC0xLDQgKzEsNCBAQAotLSNkZWZpbmUgQVJDSF9tbWFwIG1tYXBfNGtvZmYKLSsjZGVmaW5lIHN5c19BUkNIX21tYXAgc3lzX21tYXBfNGtvZmYKLSAjZGVmaW5lIEFSQ0hfV0FOVF9TWU5DX0ZJTEVfUkFOR0UyIDEKLSAjaW5jbHVkZSAiMzIvc3lzY2FsbGVudC5oIgotIFsyNDRdID0geyAxLAkwLAlTRU4ocHJpbnRhcmdzKSwJImNtcHhjaGdfYmFkYWRkciIJfSwKLWRpZmYgLS1naXQgYS9wYXRodHJhY2UuYyBiL3BhdGh0cmFjZS5jCi1pbmRleCBkNTMwZWMyLi5lNzJjZGY3IDEwMDY0NAotLS0tIGEvcGF0aHRyYWNlLmMKLSsrKyBiL3BhdGh0cmFjZS5jCi1AQCAtMjE2LDYgKzIxNiw3IEBAIHBhdGh0cmFjZV9tYXRjaChzdHJ1Y3QgdGNiICp0Y3ApCi0gCWNhc2UgU0VOX21tYXA6Ci0gCWNhc2UgU0VOX21tYXBfNGtvZmY6Ci0gCWNhc2UgU0VOX21tYXBfcGdvZmY6Ci0rCWNhc2UgU0VOX0FSQ0hfbW1hcDoKLSAJCS8qIHgsIHgsIHgsIHgsIGZkICovCi0gCQlyZXR1cm4gZmRtYXRjaCh0Y3AsIHRjcC0+dV9hcmdbNF0pOwotIAotLS0gCi0yLjYuNAotCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3N0cmFjZS9zdHJhY2UvMDAwMS1zY21fcmlnaHRzLWZkLnRlc3QtcmV3cml0ZS13aXRob3V0LWZvcmsucGF0Y2ggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3N0cmFjZS9zdHJhY2UvMDAwMS1zY21fcmlnaHRzLWZkLnRlc3QtcmV3cml0ZS13aXRob3V0LWZvcmsucGF0Y2gKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGM0ZTY0NWIuLjAwMDAwMDAKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9zdHJhY2Uvc3RyYWNlLzAwMDEtc2NtX3JpZ2h0cy1mZC50ZXN0LXJld3JpdGUtd2l0aG91dC1mb3JrLnBhdGNoCisrKyAvZGV2L251bGwKQEAgLTEsMTk4ICswLDAgQEAKLUZyb20gM2ZkY2RkNDdjNmE2NzU4NTEyM2EwYTBjOGZmZmFiY2M5Zjc5YTNhMiBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKLUZyb206ICJEbWl0cnkgVi4gTGV2aW4iIDxsZHZAYWx0bGludXgub3JnPgotRGF0ZTogVHVlLCAxMiBKYW4gMjAxNiAxNDo0NzoxMiArMDAwMAotU3ViamVjdDogW1BBVENIXSBzY21fcmlnaHRzLWZkLnRlc3Q6IHJld3JpdGUgd2l0aG91dCBmb3JrCi0KLSogdGVzdHMvc2NtX3JpZ2h0cy5jIChtYWluKTogUmV3cml0ZSB3aXRob3V0IGZvcmsuCi1QbGFjZSBhbGwgb2JqZWN0cyBwYXNzZWQgdG8gc2VuZG1zZyBhbmQgcmVjdm1zZyBhdCB0aGUgZW5kCi1vZiBtZW1vcnkgcGFnZXMgZm9sbG93ZWQgYnkgaW5hY2Nlc3NpYmxlIHBhZ2VzLgotKiB0ZXN0cy9zY21fcmlnaHRzLWZkLnRlc3Q6IFVwZGF0ZS4KLS0tLQotU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KLVVwc3RyZWFtLVN0YXR1czogQmFja3BvcnQKLQotIHRlc3RzL3NjbV9yaWdodHMtZmQudGVzdCB8ICAxMiArKy0tLQotIHRlc3RzL3NjbV9yaWdodHMuYyAgICAgICB8IDEyMiArKysrKysrKysrKysrKysrKysrKysrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotIDIgZmlsZXMgY2hhbmdlZCwgNjMgaW5zZXJ0aW9ucygrKSwgNzEgZGVsZXRpb25zKC0pCi0KLWRpZmYgLS1naXQgYS90ZXN0cy9zY21fcmlnaHRzLWZkLnRlc3QgYi90ZXN0cy9zY21fcmlnaHRzLWZkLnRlc3QKLWluZGV4IGEzMmVmMzYuLjQ4YzUwMjggMTAwNzU1Ci0tLS0gYS90ZXN0cy9zY21fcmlnaHRzLWZkLnRlc3QKLSsrKyBiL3Rlc3RzL3NjbV9yaWdodHMtZmQudGVzdAotQEAgLTQ5LDE4ICs0OSwxOCBAQCB0b3VjaCAtLSAiJGZpbGUiIHx8Ci0gCWZyYW1ld29ya19za2lwXyAnZmFpbGVkIHRvIGNyZWF0ZSBhIGZpbGUnCi0gCi0gcnVuX3Byb2cgLi9zY21fcmlnaHRzIC9kZXYvemVybwotLXJ1bl9zdHJhY2VfbWVyZ2UgLXkgLXggLWVuZXR3b3JrICRhcmdzICIkZmlsZSIKLStydW5fc3RyYWNlIC15IC14IC1lbmV0d29yayAkYXJncyAiJGZpbGUiCi0gCi0rc2FtcGxlPSdcXHhmMVxceGYyXFx4ZjNcXHhmNFxceGY1XFx4ZjZcXHhmN1xceGY4XFx4ZjlcXHhmYVxceGZiXFx4ZmNcXHhmZFxceGZlXFx4ZmYnCi0gbj0nWzEtOV1bMC05XSonCi0tbXNnPSdce21zZ19uYW1lXCgwXCk9TlVMTCwgbXNnX2lvdlwoMVwpPVxbXHsiXFx4MDBcXHgwMFxceDAwXFx4MDBbXiJdKiIsICciJG4iJ1x9XF0sIG1zZ19jb250cm9sbGVuPSciJG4iCi0tcmlnaHRzPSdce2Ntc2dfbGVuPSciJG4iJywgY21zZ19sZXZlbD1TT0xfU09DS0VULCBjbXNnX3R5cGU9U0NNX1JJR0hUUywgXFszPC9kZXYvbnVsbD4sIDQ8L2Rldi96ZXJvPiwgNTwvW159Pl0qLyhBXFxuKXsxMjd9Wj5cXVx9JwotK21zZz0nXHttc2dfbmFtZVwoMFwpPU5VTEwsIG1zZ19pb3ZcKDFcKT1cW1x7IiciJHNhbXBsZSInIiwgMTVcfVxdLCBtc2dfY29udHJvbGxlbj0nIiRuIgotK3JpZ2h0cz0nXHtjbXNnX2xlbj0nIiRuIicsIGNtc2dfbGV2ZWw9U09MX1NPQ0tFVCwgY21zZ190eXBlPVNDTV9SSUdIVFMsIFxbNDwvZGV2L251bGw+LCA1PC9kZXYvemVybz4sIDY8L1tefT5dKi8oQVxcbil7MTI3fVo+XF1cfScKLSBjcmVkcz0nXHtjbXNnX2xlbj0nIiRuIicsIGNtc2dfbGV2ZWw9U09MX1NPQ0tFVCwgY21zZ190eXBlPVNDTV9DUkVERU5USUFMUywgXHtwaWQ9JyIkbiInLCB1aWQ9WzAtOV0rLCBnaWQ9WzAtOV0rXH1cfScKLS1wcmVmaXg9J1sxLTldWzAtOV0qICtbMC05XSs6WzAtOV0rOlswLTldK1wuWzAtOV0rICsnCi0gRVhQRUNURUQ9IiRMT0cuZXhwZWN0ZWQiCi0gCi0gY2F0ID4gIiRFWFBFQ1RFRCIgPDwgX19FT0ZfXwotLSR7cHJlZml4fXNlbmRtc2dcXCgxPHNvY2tldDpcXFtbMC05XStcXF0+LCAkbXNnLCBcXFskcmlnaHRzXFxdLCBtc2dfZmxhZ3M9MFxcfSwgMFxcKSArPSAkbgotLSR7cHJlZml4fXJlY3Ztc2dcXCgwPHNvY2tldDpcXFtbMC05XStcXF0+LCAkbXNnLCBcXFskY3JlZHMsICRyaWdodHNcXF0sIG1zZ19mbGFncz0wXFx9LCAwXFwpICs9ICRuCi0rc2VuZG1zZ1xcKDM8c29ja2V0OlxcW1swLTldK1xcXT4sICRtc2csIFxcWyRyaWdodHNcXF0sIG1zZ19mbGFncz0wXFx9LCAwXFwpID0gMTUKLStyZWN2bXNnXFwoMDxzb2NrZXQ6XFxbWzAtOV0rXFxdPiwgJG1zZywgXFxbJGNyZWRzLCAkcmlnaHRzXFxdLCBtc2dfZmxhZ3M9MFxcfSwgMFxcKSA9IDE1Ci0gX19FT0ZfXwotIAotIG1hdGNoX2dyZXAgIiRMT0ciICIkRVhQRUNURUQiCi1kaWZmIC0tZ2l0IGEvdGVzdHMvc2NtX3JpZ2h0cy5jIGIvdGVzdHMvc2NtX3JpZ2h0cy5jCi1pbmRleCAxZTVlODUwLi4wMGFmNGQ1IDEwMDY0NAotLS0tIGEvdGVzdHMvc2NtX3JpZ2h0cy5jCi0rKysgYi90ZXN0cy9zY21fcmlnaHRzLmMKLUBAIC0yNywyNiArMjcsMzkgQEAKLSAKLSAjaW5jbHVkZSAidGVzdHMuaCIKLSAjaW5jbHVkZSA8YXNzZXJ0Lmg+Ci0tI2luY2x1ZGUgPHN0cmluZy5oPgotLSNpbmNsdWRlIDxzdGRsaWIuaD4KLS0jaW5jbHVkZSA8dW5pc3RkLmg+Ci0gI2luY2x1ZGUgPGVycm5vLmg+Ci0gI2luY2x1ZGUgPGZjbnRsLmg+Ci0rI2luY2x1ZGUgPHN0ZGxpYi5oPgotKyNpbmNsdWRlIDxzdHJpbmcuaD4KLSsjaW5jbHVkZSA8dW5pc3RkLmg+Ci0gI2luY2x1ZGUgPHN5cy9zb2NrZXQuaD4KLS0jaW5jbHVkZSA8c3lzL3dhaXQuaD4KLSAKLSBpbnQgbWFpbihpbnQgYWMsIGNvbnN0IGNoYXIgKiphdikKLSB7Ci0tCWludCBpOwotLQlpbnQgZGF0YSA9IDA7Ci0tCXN0cnVjdCBpb3ZlYyBpb3YgPSB7Ci0tCQkuaW92X2Jhc2UgPSAmZGF0YSwKLS0JCS5pb3ZfbGVuID0gc2l6ZW9mKGlvdikKLS0JfTsKLSsJYXNzZXJ0KGFjID4gMCk7Ci0rCWludCBmZHNbYWNdOwotKwotKwlzdGF0aWMgY29uc3QgY2hhciBzYW1wbGVbXSA9Ci0rCQkiXHhmMVx4ZjJceGYzXHhmNFx4ZjVceGY2XHhmN1x4ZjhceGY5XHhmYVx4ZmJceGZjXHhmZFx4ZmVceGZmIjsKLSsJY29uc3QgdW5zaWduZWQgaW50IGRhdGFfc2l6ZSA9IHNpemVvZihzYW1wbGUpIC0gMTsKLSsJdm9pZCAqZGF0YSA9IHRhaWxfYWxsb2MoZGF0YV9zaXplKTsKLSsJbWVtY3B5KGRhdGEsIHNhbXBsZSwgZGF0YV9zaXplKTsKLSsKLSsJc3RydWN0IGlvdmVjICppb3YgPSB0YWlsX2FsbG9jKHNpemVvZihzdHJ1Y3QgaW92ZWMpKTsKLSsJaW92LT5pb3ZfYmFzZSA9IGRhdGE7Ci0rCWlvdi0+aW92X2xlbiA9IGRhdGFfc2l6ZTsKLSAKLS0Jd2hpbGUgKChpID0gb3BlbigiL2Rldi9udWxsIiwgT19SRFdSKSkgPCAzKQotKwlzdHJ1Y3QgbXNnaGRyICptaCA9IHRhaWxfYWxsb2Moc2l6ZW9mKHN0cnVjdCBtc2doZHIpKTsKLSsJbWVtc2V0KG1oLCAwLCBzaXplb2YoKm1oKSk7Ci0rCW1oLT5tc2dfaW92ID0gaW92OwotKwltaC0+bXNnX2lvdmxlbiA9IDE7Ci0rCi0rCWludCBpOwotKwl3aGlsZSAoKGkgPSBvcGVuKCIvZGV2L251bGwiLCBPX1JEV1IpKSA8PSBhYyArIDIpCi0gCQlhc3NlcnQoaSA+PSAwKTsKLS0JKHZvaWQpIGNsb3NlKDMpOwotKwl3aGlsZSAoaSA+IDIpCi0rCQlhc3NlcnQoY2xvc2UoaS0tKSA9PSAwKTsKLSsJYXNzZXJ0KGNsb3NlKDApID09IDApOwotIAotIAlpbnQgc3ZbMl07Ci0gCWlmIChzb2NrZXRwYWlyKEFGX1VOSVgsIFNPQ0tfU1RSRUFNLCAwLCBzdikpCi1AQCAtNTUsNjAgKzY4LDM5IEBAIGludCBtYWluKGludCBhYywgY29uc3QgY2hhciAqKmF2KQotIAlpZiAoc2V0c29ja29wdChzdlswXSwgU09MX1NPQ0tFVCwgU09fUEFTU0NSRUQsICZvbmUsIHNpemVvZihvbmUpKSkKLSAJCXBlcnJvcl9tc2dfYW5kX3NraXAoInNldHNvY2tvcHQiKTsKLSAKLS0JcGlkX3QgcGlkID0gZm9yaygpOwotLQlpZiAocGlkIDwgMCkKLS0JCXBlcnJvcl9tc2dfYW5kX2ZhaWwoImZvcmsiKTsKLS0KLS0JaWYgKHBpZCkgewotLQkJYXNzZXJ0KGNsb3NlKHN2WzBdKSA9PSAwKTsKLS0JCWFzc2VydChkdXAyKHN2WzFdLCAxKSA9PSAxKTsKLS0JCWFzc2VydChjbG9zZShzdlsxXSkgPT0gMCk7Ci0tCi0tCQlpbnQgZmRzW2FjXTsKLS0JCWFzc2VydCgoZmRzWzBdID0gb3BlbigiL2Rldi9udWxsIiwgT19SRFdSKSkgPT0gMyk7Ci0tCQlmb3IgKGkgPSAxOyBpIDwgYWM7ICsraSkKLS0JCQlhc3NlcnQoKGZkc1tpXSA9IG9wZW4oYXZbaV0sIE9fUkRPTkxZKSkgPT0gaSArIDMpOwotLQotLQkJdW5pb24gewotLQkJCXN0cnVjdCBjbXNnaGRyIGNtc2c7Ci0tCQkJY2hhciBidWZbQ01TR19MRU4oc2l6ZW9mKGZkcykpXTsKLS0JCX0gY29udHJvbDsKLS0KLS0JCWNvbnRyb2wuY21zZy5jbXNnX2xldmVsID0gU09MX1NPQ0tFVDsKLS0JCWNvbnRyb2wuY21zZy5jbXNnX3R5cGUgPSBTQ01fUklHSFRTOwotLQkJY29udHJvbC5jbXNnLmNtc2dfbGVuID0gQ01TR19MRU4oc2l6ZW9mKGZkcykpOwotLQkJbWVtY3B5KENNU0dfREFUQSgmY29udHJvbC5jbXNnKSwgZmRzLCBzaXplb2YoZmRzKSk7Ci0tCi0tCQlzdHJ1Y3QgbXNnaGRyIG1oID0gewotLQkJCS5tc2dfaW92ID0gJmlvdiwKLS0JCQkubXNnX2lvdmxlbiA9IDEsCi0tCQkJLm1zZ19jb250cm9sID0gJmNvbnRyb2wsCi0tCQkJLm1zZ19jb250cm9sbGVuID0gc2l6ZW9mKGNvbnRyb2wpCi0tCQl9OwotLQotLQkJYXNzZXJ0KHNlbmRtc2coMSwgJm1oLCAwKSA9PSBzaXplb2YoaW92KSk7Ci0tCQlhc3NlcnQoY2xvc2UoMSkgPT0gMCk7Ci0tCi0tICAgICAgICAgICAgICAgIGludCBzdGF0dXM7Ci0tCQlhc3NlcnQod2FpdHBpZChwaWQsICZzdGF0dXMsIDApID09IHBpZCk7Ci0tCQlhc3NlcnQoc3RhdHVzID09IDApOwotLQl9IGVsc2UgewotLQkJYXNzZXJ0KGNsb3NlKHN2WzFdKSA9PSAwKTsKLS0JCWFzc2VydChkdXAyKHN2WzBdLCAwKSA9PSAwKTsKLS0JCWFzc2VydChjbG9zZShzdlswXSkgPT0gMCk7Ci0tCi0tCQlzdHJ1Y3QgY21zZ2hkciBjb250cm9sWzQgKyBhYyAqIHNpemVvZihpbnQpIC8gc2l6ZW9mKHN0cnVjdCBjbXNnaGRyKV07Ci0tCi0tCQlzdHJ1Y3QgbXNnaGRyIG1oID0gewotLQkJCS5tc2dfaW92ID0gJmlvdiwKLS0JCQkubXNnX2lvdmxlbiA9IDEsCi0tCQkJLm1zZ19jb250cm9sID0gY29udHJvbCwKLS0JCQkubXNnX2NvbnRyb2xsZW4gPSBzaXplb2YoY29udHJvbCkKLS0JCX07Ci0tCi0tCQlhc3NlcnQocmVjdm1zZygwLCAmbWgsIDApID09IHNpemVvZihpb3YpKTsKLS0JCWFzc2VydChjbG9zZSgwKSA9PSAwKTsKLSsJYXNzZXJ0KChmZHNbMF0gPSBvcGVuKCIvZGV2L251bGwiLCBPX1JEV1IpKSA9PSA0KTsKLSsJZm9yIChpID0gMTsgaSA8IGFjOyArK2kpCi0rCQlhc3NlcnQoKGZkc1tpXSA9IG9wZW4oYXZbaV0sIE9fUkRPTkxZKSkgPT0gaSArIDQpOwotKwotKwl1bnNpZ25lZCBpbnQgY21zZ19zaXplID0gQ01TR19TUEFDRShzaXplb2YoZmRzKSk7Ci0rCXN0cnVjdCBjbXNnaGRyICpjbXNnID0gdGFpbF9hbGxvYyhjbXNnX3NpemUpOwotKwltZW1zZXQoY21zZywgMCwgY21zZ19zaXplKTsKLSsJY21zZy0+Y21zZ19sZXZlbCA9IFNPTF9TT0NLRVQ7Ci0rCWNtc2ctPmNtc2dfdHlwZSA9IFNDTV9SSUdIVFM7Ci0rCWNtc2ctPmNtc2dfbGVuID0gQ01TR19MRU4oc2l6ZW9mKGZkcykpOwotKwltZW1jcHkoQ01TR19EQVRBKGNtc2cpLCBmZHMsIHNpemVvZihmZHMpKTsKLSsKLSsJbWgtPm1zZ19jb250cm9sID0gY21zZzsKLSsJbWgtPm1zZ19jb250cm9sbGVuID0gY21zZ19zaXplOwotKwotKwlhc3NlcnQoc2VuZG1zZyhzdlsxXSwgbWgsIDApID09IChpbnQpIGRhdGFfc2l6ZSk7Ci0rCi0rCWFzc2VydChjbG9zZShzdlsxXSkgPT0gMCk7Ci0rCWFzc2VydChvcGVuKCIvZGV2L251bGwiLCBPX1JEV1IpID09IHN2WzFdKTsKLSsKLSsJZm9yIChpID0gMDsgaSA8IGFjOyArK2kpIHsKLSsJCWFzc2VydChjbG9zZShmZHNbaV0pID09IDApOwotKwkJZmRzW2ldID0gMDsKLSAJfQotIAotKwljbXNnX3NpemUgKz0gQ01TR19TUEFDRShzaXplb2Yoc3RydWN0IHVjcmVkKSk7Ci0rCWNtc2cgPSB0YWlsX2FsbG9jKGNtc2dfc2l6ZSk7Ci0rCW1lbXNldChjbXNnLCAwLCBjbXNnX3NpemUpOwotKwltaC0+bXNnX2NvbnRyb2wgPSBjbXNnOwotKwltaC0+bXNnX2NvbnRyb2xsZW4gPSBjbXNnX3NpemU7Ci0rCi0rCWFzc2VydChyZWN2bXNnKDAsIG1oLCAwKSA9PSAoaW50KSBkYXRhX3NpemUpOwotKwlhc3NlcnQoY2xvc2UoMCkgPT0gMCk7Ci0rCi0gCXJldHVybiAwOwotIH0KLS0tIAotMS45LjEKLQpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9zdHJhY2Uvc3RyYWNlLzAwMDEtdGVzdHMtaW50cm9kdWNlLWxpYnRlc3RzLnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9zdHJhY2Uvc3RyYWNlLzAwMDEtdGVzdHMtaW50cm9kdWNlLWxpYnRlc3RzLnBhdGNoCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxNTc1ZWNkLi4wMDAwMDAwCi0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvc3RyYWNlL3N0cmFjZS8wMDAxLXRlc3RzLWludHJvZHVjZS1saWJ0ZXN0cy5wYXRjaAorKysgL2Rldi9udWxsCkBAIC0xLDMwNiArMCwwIEBACi1Gcm9tIDg3ZTZiMjMwZmZmODAwZWI3NjhiNjhiMmU1MTczZWJiZTgzZmQzZWYgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCi1Gcm9tOiAiRG1pdHJ5IFYuIExldmluIiA8bGR2QGFsdGxpbnV4Lm9yZz4KLURhdGU6IFNhdCwgMiBKYW4gMjAxNiAxMjowNToxNCArMDAwMAotU3ViamVjdDogW1BBVENIXSB0ZXN0czogaW50cm9kdWNlIGxpYnRlc3RzCi0KLUludHJvZHVjZSB0ZXN0cy9saWJ0ZXN0cy5hIHdpdGggY29tbW9uIGZ1bmN0aW9ucyBmb3IgdXNlIGluIHRlc3RzLgotCi0qIHRlc3RzL3Rlc3RzLmg6IE5ldyBmaWxlLgotKiB0ZXN0cy9lcnJvcl9tc2cuYzogTGlrZXdpc2UuCi0qIHRlc3RzL3RhaWxfYWxsb2MuYzogTGlrZXdpc2UuCi0qIHRlc3RzL2dldF9wYWdlX3NpemUuYzogTGlrZXdpc2UuCi0qIHRlc3RzL01ha2VmaWxlLmFtIChsaWJ0ZXN0c19hX1NPVVJDRVMsIGxpYnRlc3RzX2FfQ1BQRkxBR1MsCi1jaGVja19MSUJSQVJJRVMsIExEQUREKTogTmV3IHZhcmlhYmxlcy4KLShjbG9ja194ZXR0aW1lX0xEQURELCBmaWx0ZXJfdW5hdmFpbGFibGVfTERBREQsIG1xX0xEQURELAotcGNfTERBREQsIHRpbWVzX0xEQUREKTogQWRkICQoTERBREQpLgotKiB0ZXN0cy8uZ2l0aWdub3JlOiBBZGQgbGlidGVzdHMuYS4KLS0tLQotU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KLVVwc3RyZWFtLVN0YXR1czogQmFja3BvcnQKLQotIHRlc3RzLy5naXRpZ25vcmUgICAgICB8ICAxICsKLSB0ZXN0cy9NYWtlZmlsZS5hbSAgICAgfCAyMCArKysrKysrKysrLS0tLQotIHRlc3RzL2Vycm9yX21zZy5jICAgICB8IDc0ICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKwotIHRlc3RzL2dldF9wYWdlX3NpemUuYyB8IDEzICsrKysrKysrKwotIHRlc3RzL3RhaWxfYWxsb2MuYyAgICB8IDUyICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKwotIHRlc3RzL3Rlc3RzLmggICAgICAgICB8IDYyICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKwotIDYgZmlsZXMgY2hhbmdlZCwgMjE3IGluc2VydGlvbnMoKyksIDUgZGVsZXRpb25zKC0pCi0gY3JlYXRlIG1vZGUgMTAwNjQ0IHRlc3RzL2Vycm9yX21zZy5jCi0gY3JlYXRlIG1vZGUgMTAwNjQ0IHRlc3RzL2dldF9wYWdlX3NpemUuYwotIGNyZWF0ZSBtb2RlIDEwMDY0NCB0ZXN0cy90YWlsX2FsbG9jLmMKLSBjcmVhdGUgbW9kZSAxMDA2NDQgdGVzdHMvdGVzdHMuaAotCi1kaWZmIC0tZ2l0IGEvdGVzdHMvTWFrZWZpbGUuYW0gYi90ZXN0cy9NYWtlZmlsZS5hbQotaW5kZXggMzg2YTJjMi4uNjJkMGU1NiAxMDA2NDQKLS0tLSBhL3Rlc3RzL01ha2VmaWxlLmFtCi0rKysgYi90ZXN0cy9NYWtlZmlsZS5hbQotQEAgLTQwLDYgKzQwLDE2IEBAIEFNX0NQUEZMQUdTID0gJChBUkNIX01GTEFHUykgXAotIAkgICAgICAtSSQodG9wX3NyY2RpcikKLSBBTV9MREZMQUdTID0gJChBUkNIX01GTEFHUykKLSAKLStsaWJ0ZXN0c19hX1NPVVJDRVMgPSBcCi0rCWdldF9wYWdlX3NpemUuYyBcCi0rCWVycm9yX21zZy5jIFwKLSsJdGFpbF9hbGxvYy5jIFwKLSsJdGVzdHMuaCBcCi0rCSMgZW5kIG9mIGxpYnRlc3RzX2FfU09VUkNFUwotK2xpYnRlc3RzX2FfQ1BQRkxBR1MgPSAkKEFNX0NQUEZMQUdTKSAtRF9GSUxFX09GRlNFVF9CSVRTPTY0Ci0rY2hlY2tfTElCUkFSSUVTID0gbGlidGVzdHMuYQotK0xEQUREID0gbGlidGVzdHMuYQotKwotIGNoZWNrX1BST0dSQU1TID0gXAotIAlfbmV3c2VsZWN0IFwKLSAJYWRqdGltZXggXAotQEAgLTE0NiwxOSArMTU2LDE5IEBAIGNoZWNrX1BST0dSQU1TID0gXAotIAl4ZXR0aW1lb2ZkYXkgXAotIAkjIGVuZCBvZiBjaGVja19QUk9HUkFNUwotIAotLWNsb2NrX3hldHRpbWVfTERBREQgPSAtbHJ0Ci0tZmlsdGVyX3VuYXZhaWxhYmxlX0xEQUREID0gLWxwdGhyZWFkCi0rY2xvY2tfeGV0dGltZV9MREFERCA9IC1scnQgJChMREFERCkKLStmaWx0ZXJfdW5hdmFpbGFibGVfTERBREQgPSAtbHB0aHJlYWQgJChMREFERCkKLSBmc3RhdDY0X0NQUEZMQUdTID0gJChBTV9DUFBGTEFHUykgLURfRklMRV9PRkZTRVRfQklUUz02NAotIGZzdGF0YXQ2NF9DUFBGTEFHUyA9ICQoQU1fQ1BQRkxBR1MpIC1EX0ZJTEVfT0ZGU0VUX0JJVFM9NjQKLSBmdHJ1bmNhdGU2NF9DUFBGTEFHUyA9ICQoQU1fQ1BQRkxBR1MpIC1EX0ZJTEVfT0ZGU0VUX0JJVFM9NjQKLSBsc3RhdDY0X0NQUEZMQUdTID0gJChBTV9DUFBGTEFHUykgLURfRklMRV9PRkZTRVRfQklUUz02NAotIG1tYXA2NF9DUFBGTEFHUyA9ICQoQU1fQ1BQRkxBR1MpIC1EX0ZJTEVfT0ZGU0VUX0JJVFM9NjQKLS1tcV9MREFERCA9IC1scnQKLSttcV9MREFERCA9IC1scnQgJChMREFERCkKLSBuZXdmc3RhdGF0X0NQUEZMQUdTID0gJChBTV9DUFBGTEFHUykgLURfRklMRV9PRkZTRVRfQklUUz02NAotLXBjX0xEQUREID0gJChkbF9MSUJTKQotK3BjX0xEQUREID0gJChkbF9MSUJTKSAkKExEQUREKQotIHN0YXQ2NF9DUFBGTEFHUyA9ICQoQU1fQ1BQRkxBR1MpIC1EX0ZJTEVfT0ZGU0VUX0JJVFM9NjQKLSBzdGF0ZnNfQ1BQRkxBR1MgPSAkKEFNX0NQUEZMQUdTKSAtRF9GSUxFX09GRlNFVF9CSVRTPTY0Ci0tdGltZXNfTERBREQgPSAtbHJ0Ci0rdGltZXNfTERBREQgPSAtbHJ0ICQoTERBREQpCi0gdHJ1bmNhdGU2NF9DUFBGTEFHUyA9ICQoQU1fQ1BQRkxBR1MpIC1EX0ZJTEVfT0ZGU0VUX0JJVFM9NjQKLSB1aW9fQ1BQRkxBR1MgPSAkKEFNX0NQUEZMQUdTKSAtRF9GSUxFX09GRlNFVF9CSVRTPTY0Ci0gc3RhY2tfZmNhbGxfU09VUkNFUyA9IHN0YWNrLWZjYWxsLmMgXAotZGlmZiAtLWdpdCBhL3Rlc3RzL2Vycm9yX21zZy5jIGIvdGVzdHMvZXJyb3JfbXNnLmMKLW5ldyBmaWxlIG1vZGUgMTAwNjQ0Ci1pbmRleCAwMDAwMDAwLi4zZmQzNDExCi0tLS0gL2Rldi9udWxsCi0rKysgYi90ZXN0cy9lcnJvcl9tc2cuYwotQEAgLTAsMCArMSw3NCBAQAotKy8qCi0rICogQ29weXJpZ2h0IChjKSAyMDE2IERtaXRyeSBWLiBMZXZpbiA8bGR2QGFsdGxpbnV4Lm9yZz4KLSsgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgotKyAqCi0rICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0rICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0rICogYXJlIG1ldDoKLSsgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSsgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSsgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotKyAqIDMuIFRoZSBuYW1lIG9mIHRoZSBhdXRob3IgbWF5IG5vdCBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cwotKyAqICAgIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotKyAqCi0rICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQVVUSE9SIGBgQVMgSVMnJyBBTkQgQU5ZIEVYUFJFU1MgT1IKLSsgKiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTCi0rICogT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4KLSsgKiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsCi0rICogSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUCi0rICogTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAotKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQotKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSsgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKLSsgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotKyAqLwotKwotKyNpbmNsdWRlICJ0ZXN0cy5oIgotKyNpbmNsdWRlIDxlcnJuby5oPgotKyNpbmNsdWRlIDxzdGRhcmcuaD4KLSsjaW5jbHVkZSA8c3RkaW8uaD4KLSsjaW5jbHVkZSA8c3RkbGliLmg+Ci0rI2luY2x1ZGUgPHN0cmluZy5oPgotKwotK3ZvaWQKLStwZXJyb3JfbXNnX2FuZF9mYWlsKGNvbnN0IGNoYXIgKmZtdCwgLi4uKQotK3sKLSsJaW50IGVycl9ubyA9IGVycm5vOwotKwl2YV9saXN0IHA7Ci0rCi0rCXZhX3N0YXJ0KHAsIGZtdCk7Ci0rCXZmcHJpbnRmKHN0ZGVyciwgZm10LCBwKTsKLSsJaWYgKGVycl9ubykKLSsJCWZwcmludGYoc3RkZXJyLCAiOiAlc1xuIiwgc3RyZXJyb3IoZXJyX25vKSk7Ci0rCWVsc2UKLSsJCXB1dGMoJ1xuJywgc3RkZXJyKTsKLSsJZXhpdCgxKTsKLSt9Ci0rCi0rdm9pZAotK2Vycm9yX21zZ19hbmRfc2tpcChjb25zdCBjaGFyICpmbXQsIC4uLikKLSt7Ci0rCXZhX2xpc3QgcDsKLSsKLSsJdmFfc3RhcnQocCwgZm10KTsKLSsJdmZwcmludGYoc3RkZXJyLCBmbXQsIHApOwotKwlwdXRjKCdcbicsIHN0ZGVycik7Ci0rCWV4aXQoNzcpOwotK30KLSsKLSt2b2lkCi0rcGVycm9yX21zZ19hbmRfc2tpcChjb25zdCBjaGFyICpmbXQsIC4uLikKLSt7Ci0rCWludCBlcnJfbm8gPSBlcnJubzsKLSsJdmFfbGlzdCBwOwotKwotKwl2YV9zdGFydChwLCBmbXQpOwotKwl2ZnByaW50ZihzdGRlcnIsIGZtdCwgcCk7Ci0rCWlmIChlcnJfbm8pCi0rCQlmcHJpbnRmKHN0ZGVyciwgIjogJXNcbiIsIHN0cmVycm9yKGVycl9ubykpOwotKwllbHNlCi0rCQlwdXRjKCdcbicsIHN0ZGVycik7Ci0rCWV4aXQoNzcpOwotK30KLWRpZmYgLS1naXQgYS90ZXN0cy9nZXRfcGFnZV9zaXplLmMgYi90ZXN0cy9nZXRfcGFnZV9zaXplLmMKLW5ldyBmaWxlIG1vZGUgMTAwNjQ0Ci1pbmRleCAwMDAwMDAwLi5hZWVhODYxCi0tLS0gL2Rldi9udWxsCi0rKysgYi90ZXN0cy9nZXRfcGFnZV9zaXplLmMKLUBAIC0wLDAgKzEsMTMgQEAKLSsjaW5jbHVkZSAidGVzdHMuaCIKLSsjaW5jbHVkZSA8dW5pc3RkLmg+Ci0rCi0rc2l6ZV90Ci0rZ2V0X3BhZ2Vfc2l6ZSh2b2lkKQotK3sKLSsJc3RhdGljIHNpemVfdCBwYWdlX3NpemU7Ci0rCi0rCWlmICghcGFnZV9zaXplKQotKwkJcGFnZV9zaXplID0gc3lzY29uZihfU0NfUEFHRVNJWkUpOwotKwotKwlyZXR1cm4gcGFnZV9zaXplOwotK30KLWRpZmYgLS1naXQgYS90ZXN0cy90YWlsX2FsbG9jLmMgYi90ZXN0cy90YWlsX2FsbG9jLmMKLW5ldyBmaWxlIG1vZGUgMTAwNjQ0Ci1pbmRleCAwMDAwMDAwLi4yYjhiMTRlCi0tLS0gL2Rldi9udWxsCi0rKysgYi90ZXN0cy90YWlsX2FsbG9jLmMKLUBAIC0wLDAgKzEsNTIgQEAKLSsvKgotKyAqIENvcHlyaWdodCAoYykgMjAxNS0yMDE2IERtaXRyeSBWLiBMZXZpbiA8bGR2QGFsdGxpbnV4Lm9yZz4KLSsgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgotKyAqCi0rICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0rICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0rICogYXJlIG1ldDoKLSsgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSsgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSsgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotKyAqIDMuIFRoZSBuYW1lIG9mIHRoZSBhdXRob3IgbWF5IG5vdCBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cwotKyAqICAgIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotKyAqCi0rICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQVVUSE9SIGBgQVMgSVMnJyBBTkQgQU5ZIEVYUFJFU1MgT1IKLSsgKiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTCi0rICogT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4KLSsgKiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsCi0rICogSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUCi0rICogTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAotKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQotKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSsgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKLSsgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotKyAqLwotKwotKyNpbmNsdWRlICJ0ZXN0cy5oIgotKyNpbmNsdWRlIDxzdHJpbmcuaD4KLSsjaW5jbHVkZSA8c3lzL21tYW4uaD4KLSsKLSt2b2lkICoKLSt0YWlsX2FsbG9jKGNvbnN0IHNpemVfdCBzaXplKQotK3sKLSsJY29uc3Qgc2l6ZV90IHBhZ2Vfc2l6ZSA9IGdldF9wYWdlX3NpemUoKTsKLSsJY29uc3Qgc2l6ZV90IGxlbiA9IChzaXplICsgcGFnZV9zaXplIC0gMSkgJiAtcGFnZV9zaXplOwotKwljb25zdCBzaXplX3QgYWxsb2Nfc2l6ZSA9IGxlbiArIDIgKiBwYWdlX3NpemU7Ci0rCi0rCXZvaWQgKnAgPSBtbWFwKE5VTEwsIGFsbG9jX3NpemUsIFBST1RfUkVBRCB8IFBST1RfV1JJVEUsCi0rCQkgICAgICAgTUFQX1BSSVZBVEUgfCBNQVBfQU5PTllNT1VTLCAtMSwgMCk7Ci0rCWlmIChNQVBfRkFJTEVEID09IHApCi0rCQlwZXJyb3JfbXNnX2FuZF9mYWlsKCJtbWFwKCV6dSkiLCBhbGxvY19zaXplKTsKLSsKLSsJdm9pZCAqc3RhcnRfd29yayA9IHAgKyBwYWdlX3NpemU7Ci0rCXZvaWQgKnRhaWxfZ3VhcmQgPSBzdGFydF93b3JrICsgbGVuOwotKwotKwlpZiAobXVubWFwKHAsIHBhZ2Vfc2l6ZSkgfHwgbXVubWFwKHRhaWxfZ3VhcmQsIHBhZ2Vfc2l6ZSkpCi0rCQlwZXJyb3JfbXNnX2FuZF9mYWlsKCJtdW5tYXAiKTsKLSsKLSsJbWVtc2V0KHN0YXJ0X3dvcmssIDB4ZmYsIGxlbik7Ci0rCXJldHVybiB0YWlsX2d1YXJkIC0gc2l6ZTsKLSt9Ci1kaWZmIC0tZ2l0IGEvdGVzdHMvdGVzdHMuaCBiL3Rlc3RzL3Rlc3RzLmgKLW5ldyBmaWxlIG1vZGUgMTAwNjQ0Ci1pbmRleCAwMDAwMDAwLi45MWZhMjRlCi0tLS0gL2Rldi9udWxsCi0rKysgYi90ZXN0cy90ZXN0cy5oCi1AQCAtMCwwICsxLDYyIEBACi0rLyoKLSsgKiBDb3B5cmlnaHQgKGMpIDIwMTYgRG1pdHJ5IFYuIExldmluIDxsZHZAYWx0bGludXgub3JnPgotKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0rICoKLSsgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSsgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSsgKiBhcmUgbWV0OgotKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0rICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0rICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0rICogMy4gVGhlIG5hbWUgb2YgdGhlIGF1dGhvciBtYXkgbm90IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzCi0rICogICAgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0rICoKLSsgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBBVVRIT1IgYGBBUyBJUycnIEFORCBBTlkgRVhQUkVTUyBPUgotKyAqIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMKLSsgKiBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELgotKyAqIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwKLSsgKiBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQKLSsgKiBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCi0rICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCi0rICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgotKyAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0rICovCi0rCi0rI2lmbmRlZiBURVNUU19IXwotKyMgZGVmaW5lIFRFU1RTX0hfCi0rCi0rIyBpZmRlZiBIQVZFX0NPTkZJR19ICi0rIyAgaW5jbHVkZSAiY29uZmlnLmgiCi0rIyBlbmRpZgotKwotKyMgaW5jbHVkZSA8c3lzL3R5cGVzLmg+Ci0rIyBpbmNsdWRlICJnY2NfY29tcGF0LmgiCi0rCi0rLyogQ2FjaGVkIHN5c2NvbmYoX1NDX1BBR0VTSVpFKS4gKi8KLStzaXplX3QgZ2V0X3BhZ2Vfc2l6ZSh2b2lkKTsKLSsKLSsvKiBQcmludCBtZXNzYWdlIGFuZCBzdHJlcnJvcihlcnJubykgdG8gc3RkZXJyLCB0aGVuIGV4aXQoMSkuICovCi0rdm9pZCBwZXJyb3JfbXNnX2FuZF9mYWlsKGNvbnN0IGNoYXIgKiwgLi4uKQotKwlBVFRSSUJVVEVfRk9STUFUKChwcmludGYsIDEsIDIpKSBBVFRSSUJVVEVfTk9SRVRVUk47Ci0rLyogUHJpbnQgbWVzc2FnZSB0byBzdGRlcnIsIHRoZW4gZXhpdCg3NykuICovCi0rdm9pZCBlcnJvcl9tc2dfYW5kX3NraXAoY29uc3QgY2hhciAqLCAuLi4pCi0rCUFUVFJJQlVURV9GT1JNQVQoKHByaW50ZiwgMSwgMikpIEFUVFJJQlVURV9OT1JFVFVSTjsKLSsvKiBQcmludCBtZXNzYWdlIGFuZCBzdHJlcnJvcihlcnJubykgdG8gc3RkZXJyLCB0aGVuIGV4aXQoNzcpLiAqLwotK3ZvaWQgcGVycm9yX21zZ19hbmRfc2tpcChjb25zdCBjaGFyICosIC4uLikKLSsJQVRUUklCVVRFX0ZPUk1BVCgocHJpbnRmLCAxLCAyKSkgQVRUUklCVVRFX05PUkVUVVJOOwotKwotKy8qCi0rICogQWxsb2NhdGUgbWVtb3J5IHRoYXQgZW5kcyBvbiB0aGUgcGFnZSBib3VuZGFyeS4KLSsgKiBQYWdlcyBhbGxvY2F0ZWQgYnkgdGhpcyBjYWxsIGFyZSBwcmVjZWVkZWQgYnkgYW4gdW5tYXBwZWQgcGFnZQotKyAqIGFuZCBmb2xsb3dlZCBhbHNvIGJ5IGFuIHVubWFwcGVkIHBhZ2UuCi0rICovCi0rdm9pZCAqdGFpbF9hbGxvYyhjb25zdCBzaXplX3QpCi0rCUFUVFJJQlVURV9NQUxMT0MgQVRUUklCVVRFX0FMTE9DX1NJWkUoKDEpKTsKLSsKLSsjIGRlZmluZSBTS0lQX01BSU5fVU5ERUZJTkVEKGFyZykgXAotKwlpbnQgbWFpbih2b2lkKSB7IGVycm9yX21zZ19hbmRfc2tpcCgidW5kZWZpbmVkOiAlcyIsIGFyZyk7IH0KLSsKLSsjZW5kaWYKLS0tIAotMS45LjEKLQpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9zdHJhY2Uvc3RyYWNlLzAwMDEtdGVzdHMtc2NtX3JpZ2h0cy5jLXVzZS1saWJ0ZXN0cy5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvc3RyYWNlL3N0cmFjZS8wMDAxLXRlc3RzLXNjbV9yaWdodHMuYy11c2UtbGlidGVzdHMucGF0Y2gKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDNmYmFiOGIuLjAwMDAwMDAKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9zdHJhY2Uvc3RyYWNlLzAwMDEtdGVzdHMtc2NtX3JpZ2h0cy5jLXVzZS1saWJ0ZXN0cy5wYXRjaAorKysgL2Rldi9udWxsCkBAIC0xLDU0ICswLDAgQEAKLUZyb20gMzM5YTE1YjYxOWI0NzljNjNjYWZiYTIxZDVmYzM1OWU2MTNkOWVlOCBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKLUZyb206ICJEbWl0cnkgVi4gTGV2aW4iIDxsZHZAYWx0bGludXgub3JnPgotRGF0ZTogTW9uLCA0IEphbiAyMDE2IDIzOjUzOjMxICswMDAwCi1TdWJqZWN0OiBbUEFUQ0hdIHRlc3RzL3NjbV9yaWdodHMuYzogdXNlIGxpYnRlc3RzCi0KLSogdGVzdHMvc2NtX3JpZ2h0cy5jIChtYWluKTogVXNlIHBlcnJvcl9tc2dfYW5kX2ZhaWwgYW5kIHBlcnJvcl9tc2dfYW5kX3NraXAuCi0tLS0KLVNpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+Ci1VcHN0cmVhbS1TdGF0dXM6IEJhY2twb3J0Ci0KLSB0ZXN0cy9zY21fcmlnaHRzLmMgfCAxMiArKysrKysrKy0tLS0KLSAxIGZpbGUgY2hhbmdlZCwgOCBpbnNlcnRpb25zKCspLCA0IGRlbGV0aW9ucygtKQotCi1kaWZmIC0tZ2l0IGEvdGVzdHMvc2NtX3JpZ2h0cy5jIGIvdGVzdHMvc2NtX3JpZ2h0cy5jCi1pbmRleCBjNDE0NDRmLi4xZTVlODUwIDEwMDY0NAotLS0tIGEvdGVzdHMvc2NtX3JpZ2h0cy5jCi0rKysgYi90ZXN0cy9zY21fcmlnaHRzLmMKLUBAIC0xLDUgKzEsNSBAQAotIC8qCi0tICogQ29weXJpZ2h0IChjKSAyMDE0LTIwMTUgRG1pdHJ5IFYuIExldmluIDxsZHZAYWx0bGludXgub3JnPgotKyAqIENvcHlyaWdodCAoYykgMjAxNC0yMDE2IERtaXRyeSBWLiBMZXZpbiA8bGR2QGFsdGxpbnV4Lm9yZz4KLSAgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICAqCi0gICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci1AQCAtMjUsNiArMjUsNyBAQAotICAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gICovCi0gCi0rI2luY2x1ZGUgInRlc3RzLmgiCi0gI2luY2x1ZGUgPGFzc2VydC5oPgotICNpbmNsdWRlIDxzdHJpbmcuaD4KLSAjaW5jbHVkZSA8c3RkbGliLmg+Ci1AQCAtNDgsMTIgKzQ5LDE1IEBAIGludCBtYWluKGludCBhYywgY29uc3QgY2hhciAqKmF2KQotIAkodm9pZCkgY2xvc2UoMyk7Ci0gCi0gCWludCBzdlsyXTsKLS0JYXNzZXJ0KHNvY2tldHBhaXIoQUZfVU5JWCwgU09DS19TVFJFQU0sIDAsIHN2KSA9PSAwKTsKLSsJaWYgKHNvY2tldHBhaXIoQUZfVU5JWCwgU09DS19TVFJFQU0sIDAsIHN2KSkKLSsJCXBlcnJvcl9tc2dfYW5kX3NraXAoInNvY2tldHBhaXIiKTsKLSAJaW50IG9uZSA9IDE7Ci0tCWFzc2VydChzZXRzb2Nrb3B0KHN2WzBdLCBTT0xfU09DS0VULCBTT19QQVNTQ1JFRCwgJm9uZSwgc2l6ZW9mKG9uZSkpID09IDApOwotKwlpZiAoc2V0c29ja29wdChzdlswXSwgU09MX1NPQ0tFVCwgU09fUEFTU0NSRUQsICZvbmUsIHNpemVvZihvbmUpKSkKLSsJCXBlcnJvcl9tc2dfYW5kX3NraXAoInNldHNvY2tvcHQiKTsKLSAKLSAJcGlkX3QgcGlkID0gZm9yaygpOwotLQlhc3NlcnQocGlkID49IDApOwotKwlpZiAocGlkIDwgMCkKLSsJCXBlcnJvcl9tc2dfYW5kX2ZhaWwoImZvcmsiKTsKLSAKLSAJaWYgKHBpZCkgewotIAkJYXNzZXJ0KGNsb3NlKHN2WzBdKSA9PSAwKTsKLS0tIAotMS45LjEKLQpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9zdHJhY2Uvc3RyYWNlL01ha2VmaWxlLXB0ZXN0LnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9zdHJhY2Uvc3RyYWNlL01ha2VmaWxlLXB0ZXN0LnBhdGNoCmluZGV4IDgyNDAzMWUuLjJiNzZlOGEgMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvc3RyYWNlL3N0cmFjZS9NYWtlZmlsZS1wdGVzdC5wYXRjaAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3N0cmFjZS9zdHJhY2UvTWFrZWZpbGUtcHRlc3QucGF0Y2gKQEAgLTEwLDIzICsxMCwyMiBAQAogIDIgZmlsZXMgY2hhbmdlZCwgMTkgaW5zZXJ0aW9ucygrKSwgMSBkZWxldGlvbigtKQogCiBkaWZmIC0tZ2l0IGEvY29uZmlndXJlLmFjIGIvY29uZmlndXJlLmFjCi1pbmRleCAwMjA5YmFjLi5iOTY5ZTI1IDEwMDY0NAogLS0tIGEvY29uZmlndXJlLmFjCiArKysgYi9jb25maWd1cmUuYWMKIEBAIC0zNiw3ICszNiw3IEBAIEFDX0lOSVQoW3N0cmFjZV0sCiAgQUNfQ09ORklHX1NSQ0RJUihbc3RyYWNlLmNdKQogIEFDX0NPTkZJR19BVVhfRElSKFsuXSkKICBBQ19DT05GSUdfSEVBREVSUyhbY29uZmlnLmhdKQotLUFNX0lOSVRfQVVUT01BS0UoW2ZvcmVpZ24gbm9zdGRpbmMgZGlzdC14eiBuby1kaXN0LWd6aXAgc2lsZW50LXJ1bGVzIHBhcmFsbGVsLXRlc3RzXSkKLStBTV9JTklUX0FVVE9NQUtFKFtmb3JlaWduIG5vc3RkaW5jIGRpc3QteHogbm8tZGlzdC1nemlwIHNpbGVudC1ydWxlcyBzZXJpYWwtdGVzdHNdKQorLUFNX0lOSVRfQVVUT01BS0UoW2ZvcmVpZ24gbm9zdGRpbmMgZGlzdC14eiBzaWxlbnQtcnVsZXMgcGFyYWxsZWwtdGVzdHNdKQorK0FNX0lOSVRfQVVUT01BS0UoW2ZvcmVpZ24gbm9zdGRpbmMgZGlzdC14eiBzaWxlbnQtcnVsZXMgc2VyaWFsLXRlc3RzXSkKICBBTV9NQUlOVEFJTkVSX01PREUKICBBQ19DQU5PTklDQUxfSE9TVAogIAogZGlmZiAtLWdpdCBhL3Rlc3RzL01ha2VmaWxlLmFtIGIvdGVzdHMvTWFrZWZpbGUuYW0KLWluZGV4IDBmMjNiNGIuLjQyOWY3ZTkgMTAwNjQ0CitpbmRleCA5MDIzMDI5Li5lMTkxN2ZhIDEwMDY0NAogLS0tIGEvdGVzdHMvTWFrZWZpbGUuYW0KICsrKyBiL3Rlc3RzL01ha2VmaWxlLmFtCi1AQCAtMzMyLDMgKzMzMiwyMSBAQCBrc3lzZW50Lmg6ICQoc3JjZGlyKS9rc3lzZW50LnNlZAorQEAgLTc4NCwzICs3ODQsMjEgQEAga3N5c2VudC5oOiAkKHNyY2Rpcikva3N5c2VudC5zZWQKICAKICBCVUlMVF9TT1VSQ0VTID0ga3N5c2VudC5oCiAgQ0xFQU5GSUxFUyA9IGtzeXNlbnQuaCAkKFRFU1RTOj0udG1wKQpAQCAtNDgsNiArNDcsMyBAQAogKwkJc2VkIC1pIC1lICdzLyQke3NyY2Rpcj0ufS8uL2cnICQoREVTVERJUikvJChURVNURElSKS8kJGZpbGU7IFwKICsJZG9uZQogKwlmb3IgaSBpbiBuZXQgbmV0LWZkIHNjbV9yaWdodHMtZmQgc2lnYWN0aW9uOyBkbyBzZWQgLWkgLWUgJ3MvJCRzcmNkaXIvLi9nJyAkKERFU1RESVIpLyQoVEVTVERJUikvJCRpLnRlc3Q7IGRvbmUKLS0tIAotMS45LjEKLQpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9zdHJhY2Uvc3RyYWNlL21pcHMtU0lHRU1ULnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9zdHJhY2Uvc3RyYWNlL21pcHMtU0lHRU1ULnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIyNDM3OGIKLS0tIC9kZXYvbnVsbAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3N0cmFjZS9zdHJhY2UvbWlwcy1TSUdFTVQucGF0Y2gKQEAgLTAsMCArMSwyNCBAQAorU0lHRU1UIGlzIG5vdCBkZWZpbmVkIGV2ZXJ5d2hlcmUgZS5nIG11c2wgZG9lcworbm90IGRlZmluZSBpdC4gVGhlcmVmb3JlIGNoZWNrIGl0IGJlaW5nIGRlZmluZWQKK2JlZm9yZSB1c2luZyBpdC4KKworRml4ZXMgZXJyb3JzIGUuZy4KKy4uLy4uL3N0cmFjZS00LjEzL3Rlc3RzL3NpZ25hbDJuYW1lLmM6NDU6NzogZXJyb3I6ICdTSUdFTVQnIHVuZGVjbGFyZWQgKGZpcnN0IHVzZSBpbiB0aGlzIGZ1bmN0aW9uKQorCitTaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK0luZGV4OiBzdHJhY2UtNC4xMy90ZXN0cy9zaWduYWwybmFtZS5jCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gc3RyYWNlLTQuMTMub3JpZy90ZXN0cy9zaWduYWwybmFtZS5jCisrKysgc3RyYWNlLTQuMTMvdGVzdHMvc2lnbmFsMm5hbWUuYworQEAgLTQyLDcgKzQyLDkgQEAgc2lnbmFsMm5hbWUoaW50IHNpZykKKyAJQ0FTRShTSUdFTVQpOworIAlDQVNFKFNJR0xPU1QpOworICNlbGlmIGRlZmluZWQgTUlQUworKyNpZmRlZiBTSUdFTVQKKyAJQ0FTRShTSUdFTVQpOworKyNlbmRpZgorIAlDQVNFKFNJR0lPVCk7CisgCUNBU0UoU0lHUFdSKTsKKyAjZWxzZQpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9zdHJhY2Uvc3RyYWNlL3VwZGF0ZS1nYXdrLXBhdGhzLnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9zdHJhY2Uvc3RyYWNlL3VwZGF0ZS1nYXdrLXBhdGhzLnBhdGNoCmluZGV4IGJmYzdmMzQuLjk0ZWU1M2MgMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvc3RyYWNlL3N0cmFjZS91cGRhdGUtZ2F3ay1wYXRocy5wYXRjaAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3N0cmFjZS9zdHJhY2UvdXBkYXRlLWdhd2stcGF0aHMucGF0Y2gKQEAgLTEyLDE5ICsxMiwyMCBAQAogCiBTaWduZWQtb2ZmLWJ5OiBBbmRyZSBNY0N1cmR5IDxhcm1jY3VyZHlAZ21haWwuY29tPgogLS0tCi0gbXBlcnMuYXdrICAgICAgICAgICAgICAgICB8IDIgKy0KLSB0ZXN0cy9jYXBzLmF3ayAgICAgICAgICAgIHwgMiArLQotIHRlc3RzL21hdGNoLmF3ayAgICAgICAgICAgfCAyICstCi0gdGVzdHMvbmV0LXl5LWFjY2VwdC5hd2sgICB8IDIgKy0KLSB0ZXN0cy9uZXQteXktY29ubmVjdC5hd2sgIHwgMiArLQotIHRlc3RzL3NpZ2FjdGlvbi5hd2sgICAgICAgfCAyICstCi0gdGVzdHMvdWlkLmF3ayAgICAgICAgICAgICB8IDIgKy0KLSB0ZXN0cy91bml4LXl5LWFjY2VwdC5hd2sgIHwgMiArLQotIHRlc3RzL3VuaXgteXktY29ubmVjdC5hd2sgfCAyICstCi0gOSBmaWxlcyBjaGFuZ2VkLCA5IGluc2VydGlvbnMoKyksIDkgZGVsZXRpb25zKC0pCisgbXBlcnMuYXdrICAgICAgICAgICAgICAgIHwgMiArLQorIHRlc3RzLW0zMi9jYXBzLmF3ayAgICAgICB8IDIgKy0KKyB0ZXN0cy1tMzIvbWF0Y2guYXdrICAgICAgfCAyICstCisgdGVzdHMtbTMyL3NpZ2FjdGlvbi5hd2sgIHwgMiArLQorIHRlc3RzLW14MzIvY2Fwcy5hd2sgICAgICB8IDIgKy0KKyB0ZXN0cy1teDMyL21hdGNoLmF3ayAgICAgfCAyICstCisgdGVzdHMtbXgzMi9zaWdhY3Rpb24uYXdrIHwgMiArLQorIHRlc3RzL2NhcHMuYXdrICAgICAgICAgICB8IDIgKy0KKyB0ZXN0cy9tYXRjaC5hd2sgICAgICAgICAgfCAyICstCisgdGVzdHMvc2lnYWN0aW9uLmF3ayAgICAgIHwgMiArLQorIDEwIGZpbGVzIGNoYW5nZWQsIDEwIGluc2VydGlvbnMoKyksIDEwIGRlbGV0aW9ucygtKQogCiBkaWZmIC0tZ2l0IGEvbXBlcnMuYXdrIGIvbXBlcnMuYXdrCi1pbmRleCA3M2JmMGIwLi41MGU2YzE2IDEwMDY0NAoraW5kZXggOTkyNDhjNS4uZmYxMDUyMCAxMDA2NDQKIC0tLSBhL21wZXJzLmF3awogKysrIGIvbXBlcnMuYXdrCiBAQCAtMSw0ICsxLDQgQEAKQEAgLTMyLDE3ICszMyw3NyBAQAogKyMhL3Vzci9iaW4vZ2F3awogICMKICAjIENvcHlyaWdodCAoYykgMjAxNSBFbHZpcmEgS2hhYmlyb3ZhIDxsaW5lcHJpbnRlcjBAZ21haWwuY29tPgotICMgQ29weXJpZ2h0IChjKSAyMDE1IERtaXRyeSBWLiBMZXZpbiA8bGR2QGFsdGxpbnV4Lm9yZz4KLWRpZmYgLS1naXQgYS90ZXN0cy9jYXBzLmF3ayBiL3Rlc3RzL2NhcHMuYXdrCi1pbmRleCBiYWQ4YjBmLi44NDVmMzdjIDEwMDY0NAotLS0tIGEvdGVzdHMvY2Fwcy5hd2sKLSsrKyBiL3Rlc3RzL2NhcHMuYXdrCisgIyBDb3B5cmlnaHQgKGMpIDIwMTUtMjAxNiBEbWl0cnkgVi4gTGV2aW4gPGxkdkBhbHRsaW51eC5vcmc+CitkaWZmIC0tZ2l0IGEvdGVzdHMtbTMyL2NhcHMuYXdrIGIvdGVzdHMtbTMyL2NhcHMuYXdrCitpbmRleCA2NzAwM2FjLi5hNjZmMWYwIDEwMDY0NAorLS0tIGEvdGVzdHMtbTMyL2NhcHMuYXdrCisrKysgYi90ZXN0cy1tMzIvY2Fwcy5hd2sKK0BAIC0xLDQgKzEsNCBAQAorLSMhL2Jpbi9nYXdrCisrIyEvdXNyL2Jpbi9nYXdrCisgIworICMgVGhpcyBmaWxlIGlzIHBhcnQgb2YgY2FwcyBzdHJhY2UgdGVzdC4KKyAjCitkaWZmIC0tZ2l0IGEvdGVzdHMtbTMyL21hdGNoLmF3ayBiL3Rlc3RzLW0zMi9tYXRjaC5hd2sKK2luZGV4IGFiZmJhZTkuLmYyNzQwYmYgMTAwNjQ0CistLS0gYS90ZXN0cy1tMzIvbWF0Y2guYXdrCisrKysgYi90ZXN0cy1tMzIvbWF0Y2guYXdrCiBAQCAtMSw0ICsxLDQgQEAKIC0jIS9iaW4vZ2F3awogKyMhL3Vzci9iaW4vZ2F3awogICMKICAjIENvcHlyaWdodCAoYykgMjAxNC0yMDE1IERtaXRyeSBWLiBMZXZpbiA8bGR2QGFsdGxpbnV4Lm9yZz4KICAjIEFsbCByaWdodHMgcmVzZXJ2ZWQuCitkaWZmIC0tZ2l0IGEvdGVzdHMtbTMyL3NpZ2FjdGlvbi5hd2sgYi90ZXN0cy1tMzIvc2lnYWN0aW9uLmF3aworaW5kZXggNWM2YjZkMC4uM2UxNDQ2NCAxMDA2NDQKKy0tLSBhL3Rlc3RzLW0zMi9zaWdhY3Rpb24uYXdrCisrKysgYi90ZXN0cy1tMzIvc2lnYWN0aW9uLmF3aworQEAgLTEsNCArMSw0IEBACistIyEvYmluL2dhd2sKKysjIS91c3IvYmluL2dhd2sKKyAjCisgIyBDb3B5cmlnaHQgKGMpIDIwMTQtMjAxNSBEbWl0cnkgVi4gTGV2aW4gPGxkdkBhbHRsaW51eC5vcmc+CisgIyBBbGwgcmlnaHRzIHJlc2VydmVkLgorZGlmZiAtLWdpdCBhL3Rlc3RzLW14MzIvY2Fwcy5hd2sgYi90ZXN0cy1teDMyL2NhcHMuYXdrCitpbmRleCA2NzAwM2FjLi5hNjZmMWYwIDEwMDY0NAorLS0tIGEvdGVzdHMtbXgzMi9jYXBzLmF3aworKysrIGIvdGVzdHMtbXgzMi9jYXBzLmF3aworQEAgLTEsNCArMSw0IEBACistIyEvYmluL2dhd2sKKysjIS91c3IvYmluL2dhd2sKKyAjCisgIyBUaGlzIGZpbGUgaXMgcGFydCBvZiBjYXBzIHN0cmFjZSB0ZXN0LgorICMKK2RpZmYgLS1naXQgYS90ZXN0cy1teDMyL21hdGNoLmF3ayBiL3Rlc3RzLW14MzIvbWF0Y2guYXdrCitpbmRleCBhYmZiYWU5Li5mMjc0MGJmIDEwMDY0NAorLS0tIGEvdGVzdHMtbXgzMi9tYXRjaC5hd2sKKysrKyBiL3Rlc3RzLW14MzIvbWF0Y2guYXdrCitAQCAtMSw0ICsxLDQgQEAKKy0jIS9iaW4vZ2F3aworKyMhL3Vzci9iaW4vZ2F3aworICMKKyAjIENvcHlyaWdodCAoYykgMjAxNC0yMDE1IERtaXRyeSBWLiBMZXZpbiA8bGR2QGFsdGxpbnV4Lm9yZz4KKyAjIEFsbCByaWdodHMgcmVzZXJ2ZWQuCitkaWZmIC0tZ2l0IGEvdGVzdHMtbXgzMi9zaWdhY3Rpb24uYXdrIGIvdGVzdHMtbXgzMi9zaWdhY3Rpb24uYXdrCitpbmRleCA1YzZiNmQwLi4zZTE0NDY0IDEwMDY0NAorLS0tIGEvdGVzdHMtbXgzMi9zaWdhY3Rpb24uYXdrCisrKysgYi90ZXN0cy1teDMyL3NpZ2FjdGlvbi5hd2sKK0BAIC0xLDQgKzEsNCBAQAorLSMhL2Jpbi9nYXdrCisrIyEvdXNyL2Jpbi9nYXdrCisgIworICMgQ29weXJpZ2h0IChjKSAyMDE0LTIwMTUgRG1pdHJ5IFYuIExldmluIDxsZHZAYWx0bGludXgub3JnPgorICMgQWxsIHJpZ2h0cyByZXNlcnZlZC4KK2RpZmYgLS1naXQgYS90ZXN0cy9jYXBzLmF3ayBiL3Rlc3RzL2NhcHMuYXdrCitpbmRleCA2NzAwM2FjLi5hNjZmMWYwIDEwMDY0NAorLS0tIGEvdGVzdHMvY2Fwcy5hd2sKKysrKyBiL3Rlc3RzL2NhcHMuYXdrCitAQCAtMSw0ICsxLDQgQEAKKy0jIS9iaW4vZ2F3aworKyMhL3Vzci9iaW4vZ2F3aworICMKKyAjIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIGNhcHMgc3RyYWNlIHRlc3QuCisgIwogZGlmZiAtLWdpdCBhL3Rlc3RzL21hdGNoLmF3ayBiL3Rlc3RzL21hdGNoLmF3awogaW5kZXggYWJmYmFlOS4uZjI3NDBiZiAxMDA2NDQKIC0tLSBhL3Rlc3RzL21hdGNoLmF3awpAQCAtNTMsMjYgKzExNCw2IEBACiAgIwogICMgQ29weXJpZ2h0IChjKSAyMDE0LTIwMTUgRG1pdHJ5IFYuIExldmluIDxsZHZAYWx0bGludXgub3JnPgogICMgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLWRpZmYgLS1naXQgYS90ZXN0cy9uZXQteXktYWNjZXB0LmF3ayBiL3Rlc3RzL25ldC15eS1hY2NlcHQuYXdrCi1pbmRleCBmZWQzZTMwLi5lOTE2YWIwIDEwMDY0NAotLS0tIGEvdGVzdHMvbmV0LXl5LWFjY2VwdC5hd2sKLSsrKyBiL3Rlc3RzL25ldC15eS1hY2NlcHQuYXdrCi1AQCAtMSw0ICsxLDQgQEAKLS0jIS9iaW4vZ2F3awotKyMhL3Vzci9iaW4vZ2F3awotICMKLSAjIENvcHlyaWdodCAoYykgMjAxNCBNYXNhdGFrZSBZQU1BVE8gPHlhbWF0b0ByZWRoYXQuY29tPgotICMgQ29weXJpZ2h0IChjKSAyMDE0LTIwMTUgRG1pdHJ5IFYuIExldmluIDxsZHZAYWx0bGludXgub3JnPgotZGlmZiAtLWdpdCBhL3Rlc3RzL25ldC15eS1jb25uZWN0LmF3ayBiL3Rlc3RzL25ldC15eS1jb25uZWN0LmF3awotaW5kZXggZjRkY2Y5MS4uYjNjZWM4YyAxMDA2NDQKLS0tLSBhL3Rlc3RzL25ldC15eS1jb25uZWN0LmF3awotKysrIGIvdGVzdHMvbmV0LXl5LWNvbm5lY3QuYXdrCi1AQCAtMSw0ICsxLDQgQEAKLS0jIS9iaW4vZ2F3awotKyMhL3Vzci9iaW4vZ2F3awotICMKLSAjIENvcHlyaWdodCAoYykgMjAxNCBNYXNhdGFrZSBZQU1BVE8gPHlhbWF0b0ByZWRoYXQuY29tPgotICMgQ29weXJpZ2h0IChjKSAyMDE0LTIwMTUgRG1pdHJ5IFYuIExldmluIDxsZHZAYWx0bGludXgub3JnPgogZGlmZiAtLWdpdCBhL3Rlc3RzL3NpZ2FjdGlvbi5hd2sgYi90ZXN0cy9zaWdhY3Rpb24uYXdrCiBpbmRleCA1YzZiNmQwLi4zZTE0NDY0IDEwMDY0NAogLS0tIGEvdGVzdHMvc2lnYWN0aW9uLmF3awpAQCAtODMsMzYgKzEyNCwzIEBACiAgIwogICMgQ29weXJpZ2h0IChjKSAyMDE0LTIwMTUgRG1pdHJ5IFYuIExldmluIDxsZHZAYWx0bGludXgub3JnPgogICMgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLWRpZmYgLS1naXQgYS90ZXN0cy91aWQuYXdrIGIvdGVzdHMvdWlkLmF3awotaW5kZXggYTU2YzViZS4uNjdiMDc0OSAxMDA2NDQKLS0tLSBhL3Rlc3RzL3VpZC5hd2sKLSsrKyBiL3Rlc3RzL3VpZC5hd2sKLUBAIC0xLDQgKzEsNCBAQAotLSMhL2Jpbi9nYXdrCi0rIyEvdXNyL2Jpbi9nYXdrCi0gIwotICMgQ29weXJpZ2h0IChjKSAyMDE0LTIwMTUgRG1pdHJ5IFYuIExldmluIDxsZHZAYWx0bGludXgub3JnPgotICMgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLWRpZmYgLS1naXQgYS90ZXN0cy91bml4LXl5LWFjY2VwdC5hd2sgYi90ZXN0cy91bml4LXl5LWFjY2VwdC5hd2sKLWluZGV4IDRlZDYwZTQuLjJhOWQ5YzAgMTAwNjQ0Ci0tLS0gYS90ZXN0cy91bml4LXl5LWFjY2VwdC5hd2sKLSsrKyBiL3Rlc3RzL3VuaXgteXktYWNjZXB0LmF3awotQEAgLTEsNCArMSw0IEBACi0tIyEvYmluL2dhd2sKLSsjIS91c3IvYmluL2dhd2sKLSAjCi0gIyBDb3B5cmlnaHQgKGMpIDIwMTQgTWFzYXRha2UgWUFNQVRPIDx5YW1hdG9AcmVkaGF0LmNvbT4KLSAjIENvcHlyaWdodCAoYykgMjAxNC0yMDE1IERtaXRyeSBWLiBMZXZpbiA8bGR2QGFsdGxpbnV4Lm9yZz4KLWRpZmYgLS1naXQgYS90ZXN0cy91bml4LXl5LWNvbm5lY3QuYXdrIGIvdGVzdHMvdW5peC15eS1jb25uZWN0LmF3awotaW5kZXggMjYyYmYyZS4uYzgwOWRmYSAxMDA2NDQKLS0tLSBhL3Rlc3RzL3VuaXgteXktY29ubmVjdC5hd2sKLSsrKyBiL3Rlc3RzL3VuaXgteXktY29ubmVjdC5hd2sKLUBAIC0xLDQgKzEsNCBAQAotLSMhL2Jpbi9nYXdrCi0rIyEvdXNyL2Jpbi9nYXdrCi0gIwotICMgQ29weXJpZ2h0IChjKSAyMDE0IE1hc2F0YWtlIFlBTUFUTyA8eWFtYXRvQHJlZGhhdC5jb20+Ci0gIyBDb3B5cmlnaHQgKGMpIDIwMTQtMjAxNSBEbWl0cnkgVi4gTGV2aW4gPGxkdkBhbHRsaW51eC5vcmc+Ci0tLSAKLTEuOS4xCi0KZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvc3RyYWNlL3N0cmFjZV80LjExLmJiIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9zdHJhY2Uvc3RyYWNlXzQuMTEuYmIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDczOTEzODguLjAwMDAwMDAKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9zdHJhY2Uvc3RyYWNlXzQuMTEuYmIKKysrIC9kZXYvbnVsbApAQCAtMSw1MSArMCwwIEBACi1TVU1NQVJZID0gIlN5c3RlbSBjYWxsIHRyYWNpbmcgdG9vbCIKLUhPTUVQQUdFID0gImh0dHA6Ly9zdHJhY2Uuc291cmNlZm9yZ2UubmV0IgotU0VDVElPTiA9ICJjb25zb2xlL3V0aWxzIgotTElDRU5TRSA9ICJCU0QiCi1MSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT0xMjQ1MDBjMjFlODU2ZjA5MTJkZjI5Mjk1YmExMDRjNyIKLQotU1JDX1VSSSA9ICIke1NPVVJDRUZPUkdFX01JUlJPUn0vc3RyYWNlL3N0cmFjZS0ke1BWfS50YXIueHogXAotICAgICAgICAgICBmaWxlOi8vZGlzYWJsZS1naXQtdmVyc2lvbi1nZW4ucGF0Y2ggXAotICAgICAgICAgICBmaWxlOi8vbW9yZS1yb2J1c3QtdGVzdC1mb3ItbTMyLW14MzItY29tcGlsZS1zdXBwb3J0LnBhdGNoIFwKLSAgICAgICAgICAgZmlsZTovL3VwZGF0ZS1nYXdrLXBhdGhzLnBhdGNoIFwKLSAgICAgICAgICAgZmlsZTovL3VzZS1hc20tc2dpZGVmcy5oLnBhdGNoIFwKLSAgICAgICAgICAgZmlsZTovLzAwMDEtYXJjLW1ldGFnLW5pb3MyLW9yMWstdGlsZS1maXgtYnVpbGQucGF0Y2ggXAotICAgICAgICAgICBmaWxlOi8vTWFrZWZpbGUtcHRlc3QucGF0Y2ggXAotICAgICAgICAgICBmaWxlOi8vMDAwMS10ZXN0cy1zY21fcmlnaHRzLmMtdXNlLWxpYnRlc3RzLnBhdGNoIFwKLSAgICAgICAgICAgZmlsZTovLzAwMDEtc2NtX3JpZ2h0cy1mZC50ZXN0LXJld3JpdGUtd2l0aG91dC1mb3JrLnBhdGNoIFwKLSAgICAgICAgICAgZmlsZTovLzAwMDEtTW92ZS1nY2MtY29tcGF0LW1hY3Jvcy10by1nY2NfY29tcGF0LmgucGF0Y2ggXAotICAgICAgICAgICBmaWxlOi8vMDAwMS10ZXN0cy1pbnRyb2R1Y2UtbGlidGVzdHMucGF0Y2ggXAotICAgICAgICAgICBmaWxlOi8vcnVuLXB0ZXN0IFwKLSAgICAgICAgICAiCi0KLVNSQ19VUklbbWQ1c3VtXSA9ICJhMTVkMjU1NWE3ZmViYjU2ZDAwYzZlMWE1MWM2NTVkYyIKLVNSQ19VUklbc2hhMjU2c3VtXSA9ICJlODZhNWY2Y2Q4Zjk0MWY2N2YzZTRiMjhmNGU2MGYzZDkxODVjOTUxY2YyNjY0MDQ1MzMyMTBhMmU1Y2Q4MTUyIgotCi1pbmhlcml0IGF1dG90b29scyBwdGVzdCBibHVldG9vdGgKLQotUkRFUEVORFNfJHtQTn0tcHRlc3QgKz0gIm1ha2UgY29yZXV0aWxzIGdyZXAgZ2F3ayBzZWQiCi0KLVBBQ0tBR0VDT05GSUdfY2xhc3MtdGFyZ2V0ID8/PSAiXAotICAgICR7QGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCAnYmx1ZXRvb3RoJywgJ2JsdWV6JywgJycsIGQpfSBcCi0iCi0KLVBBQ0tBR0VDT05GSUdbYmx1ZXpdID0gImFjX2N2X2hlYWRlcl9ibHVldG9vdGhfYmx1ZXRvb3RoX2g9eWVzLGFjX2N2X2hlYWRlcl9ibHVldG9vdGhfYmx1ZXRvb3RoX2g9bm8sJHtCTFVFWn0iCi1QQUNLQUdFQ09ORklHW2xpYnVud2luZF0gPSAiLS13aXRoLWxpYnVud2luZCwtLXdpdGhvdXQtbGlidW53aW5kLGxpYnVud2luZCIKLQotVEVTVERJUiA9ICJ0ZXN0cyIKLQotZG9faW5zdGFsbF9hcHBlbmQoKSB7Ci0JIyBXZSBkb24ndCBzaGlwIHN0cmFjZS1ncmFwaCBoZXJlIGJlY2F1c2UgaXQgbmVlZHMgcGVybAotCXJtICR7RH0ke2JpbmRpcn0vc3RyYWNlLWdyYXBoCi19Ci0KLWRvX2NvbXBpbGVfcHRlc3QoKSB7Ci0Jb2VfcnVubWFrZSAtQyAke1RFU1RESVJ9IGJ1aWxkdGVzdC1URVNUUwotfQotCi1kb19pbnN0YWxsX3B0ZXN0KCkgewotCW9lX3J1bm1ha2UgLUMgJHtURVNURElSfSBpbnN0YWxsLXB0ZXN0IEJVSUxERElSPSR7Qn0gREVTVERJUj0ke0R9JHtQVEVTVF9QQVRIfSBURVNURElSPSR7VEVTVERJUn0KLQlzZWQgLWkgLWUgJy9ec3JjL3Mvc3RyYWNlLipbMS05XS9wdGVzdC8nICR7RH0vJHtQVEVTVF9QQVRIfS8ke1RFU1RESVJ9L01ha2VmaWxlCi19Ci0KLUJCQ0xBU1NFWFRFTkQgPSAibmF0aXZlIgpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9zdHJhY2Uvc3RyYWNlXzQuMTMuYmIgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3N0cmFjZS9zdHJhY2VfNC4xMy5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jYWU3ZjIxCi0tLSAvZGV2L251bGwKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9zdHJhY2Uvc3RyYWNlXzQuMTMuYmIKQEAgLTAsMCArMSw0OSBAQAorU1VNTUFSWSA9ICJTeXN0ZW0gY2FsbCB0cmFjaW5nIHRvb2wiCitIT01FUEFHRSA9ICJodHRwOi8vc3RyYWNlLnNvdXJjZWZvcmdlLm5ldCIKK1NFQ1RJT04gPSAiY29uc29sZS91dGlscyIKK0xJQ0VOU0UgPSAiQlNEIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9MTI0NTAwYzIxZTg1NmYwOTEyZGYyOTI5NWJhMTA0YzciCisKK1NSQ19VUkkgPSAiJHtTT1VSQ0VGT1JHRV9NSVJST1J9L3N0cmFjZS9zdHJhY2UtJHtQVn0udGFyLnh6IFwKKyAgICAgICAgICAgZmlsZTovL2Rpc2FibGUtZ2l0LXZlcnNpb24tZ2VuLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL21vcmUtcm9idXN0LXRlc3QtZm9yLW0zMi1teDMyLWNvbXBpbGUtc3VwcG9ydC5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly91cGRhdGUtZ2F3ay1wYXRocy5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly91c2UtYXNtLXNnaWRlZnMuaC5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9NYWtlZmlsZS1wdGVzdC5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9ydW4tcHRlc3QgXAorICAgICAgICAgICBmaWxlOi8vMDAwMS1GaXgtYnVpbGQtd2hlbi11c2luZy1ub24tZ2xpYmMtbGliYy1pbXBsZW1lbnRhdGlvbi1vLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL21pcHMtU0lHRU1ULnBhdGNoIFwKKyAgICAgICAgICAgIgorCitTUkNfVVJJW21kNXN1bV0gPSAiNGI3OGM3ZmViZGQyNGM3OWQ1MTQ3ODI0ZDFhMDgwYTMiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiZDQ4ZjczMjU3NmM5MWVjZTM2YTU4NDNkNjNmOWJlMDU0YzQwZWY1OWYxZTQ3NzM5ODYwNDI2MzY4NjE2MjVkNyIKKworaW5oZXJpdCBhdXRvdG9vbHMgcHRlc3QgYmx1ZXRvb3RoCisKK1JERVBFTkRTXyR7UE59LXB0ZXN0ICs9ICJtYWtlIGNvcmV1dGlscyBncmVwIGdhd2sgc2VkIgorCitQQUNLQUdFQ09ORklHX2NsYXNzLXRhcmdldCA/Pz0gIlwKKyAgICAke0BiYi51dGlscy5jb250YWlucygnRElTVFJPX0ZFQVRVUkVTJywgJ2JsdWV0b290aCcsICdibHVleicsICcnLCBkKX0gXAorIgorCitQQUNLQUdFQ09ORklHW2JsdWV6XSA9ICJhY19jdl9oZWFkZXJfYmx1ZXRvb3RoX2JsdWV0b290aF9oPXllcyxhY19jdl9oZWFkZXJfYmx1ZXRvb3RoX2JsdWV0b290aF9oPW5vLCR7QkxVRVp9IgorUEFDS0FHRUNPTkZJR1tsaWJ1bndpbmRdID0gIi0td2l0aC1saWJ1bndpbmQsLS13aXRob3V0LWxpYnVud2luZCxsaWJ1bndpbmQiCisKK1RFU1RESVIgPSAidGVzdHMiCisKK2RvX2luc3RhbGxfYXBwZW5kKCkgeworCSMgV2UgZG9uJ3Qgc2hpcCBzdHJhY2UtZ3JhcGggaGVyZSBiZWNhdXNlIGl0IG5lZWRzIHBlcmwKKwlybSAke0R9JHtiaW5kaXJ9L3N0cmFjZS1ncmFwaAorfQorCitkb19jb21waWxlX3B0ZXN0KCkgeworCW9lX3J1bm1ha2UgLUMgJHtURVNURElSfSBidWlsZHRlc3QtVEVTVFMKK30KKworZG9faW5zdGFsbF9wdGVzdCgpIHsKKwlvZV9ydW5tYWtlIC1DICR7VEVTVERJUn0gaW5zdGFsbC1wdGVzdCBCVUlMRERJUj0ke0J9IERFU1RESVI9JHtEfSR7UFRFU1RfUEFUSH0gVEVTVERJUj0ke1RFU1RESVJ9CisJc2VkIC1pIC1lICcvXnNyYy9zL3N0cmFjZS4qWzEtOV0vcHRlc3QvJyAke0R9LyR7UFRFU1RfUEFUSH0vJHtURVNURElSfS9NYWtlZmlsZQorfQorCitCQkNMQVNTRVhURU5EID0gIm5hdGl2ZSIKK1RPT0xDSEFJTiA9ICJnY2MiCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3N1YnZlcnNpb24vc3VidmVyc2lvbl8xLjkuMy5iYiBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvc3VidmVyc2lvbi9zdWJ2ZXJzaW9uXzEuOS4zLmJiCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhMTlhNjc1Li4wMDAwMDAwCi0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvc3VidmVyc2lvbi9zdWJ2ZXJzaW9uXzEuOS4zLmJiCisrKyAvZGV2L251bGwKQEAgLTEsNTMgKzAsMCBAQAotU1VNTUFSWSA9ICJTdWJ2ZXJzaW9uIChzdm4pIHZlcnNpb24gY29udHJvbCBzeXN0ZW0gY2xpZW50IgotU0VDVElPTiA9ICJjb25zb2xlL25ldHdvcmsiCi1ERVBFTkRTID0gImFwci11dGlsIHNlcmYgc3FsaXRlMyBmaWxlIgotREVQRU5EU19hcHBlbmRfY2xhc3MtbmF0aXZlID0gIiBmaWxlLXJlcGxhY2VtZW50LW5hdGl2ZSIKLVJERVBFTkRTXyR7UE59ID0gInNlcmYiCi1MSUNFTlNFID0gIkFwYWNoZS0yIgotSE9NRVBBR0UgPSAiaHR0cDovL3N1YnZlcnNpb24udGlncmlzLm9yZyIKLQotQkJDTEFTU0VYVEVORCA9ICJuYXRpdmUiCi0KLWluaGVyaXQgZ2V0dGV4dCBweXRob25uYXRpdmUKLQotU1JDX1VSSSA9ICIke0FQQUNIRV9NSVJST1J9LyR7QlBOfS8ke0JQTn0tJHtQVn0udGFyLmJ6MiBcCi0gICAgICAgICAgIGZpbGU6Ly9kaXNhYmxlX21hY29zLnBhdGNoIFwKLSAgICAgICAgICAgZmlsZTovL3NlcmYubTQtUmVnZXgtbW9kaWZpZWQtdG8tYWxsb3ctRC1pbi1wYXRocy5wYXRjaCBcCi0gICAgICAgICAgIGZpbGU6Ly8wMDAxLUZpeC1saWJ0b29sLW5hbWUtaW4tY29uZmlndXJlLmFjLnBhdGNoIFwKLSAgICAgICAgICAgIgotU1JDX1VSSVttZDVzdW1dID0gIjI0MzAzNmViMjhiNTBjZTUxN2ZjMjI4ZWIzMjUwYWRkIgotU1JDX1VSSVtzaGEyNTZzdW1dID0gIjhiYmY2YmIxMjUwMDNkODhlZTFjMjI5MzVhMzZiN2IxYWI3ZDk1N2UwYzhiNWZiZmU1Y2I2MzEwYjZlODZhZTAiCi0KLUxJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0xJQ0VOU0U7bWQ1PWFmODFhZTQ5YmEzNTllNzA2MjZjMDVlOWJmMzEzNzA5IgotCi1QQUNLQUdFQ09ORklHW3Nhc2xdID0gIi0td2l0aC1zYXNsLC0td2l0aG91dC1zYXNsLGN5cnVzLXNhc2wiCi1QQUNLQUdFQ09ORklHW2dub21lLWtleXJpbmddID0gIi0td2l0aC1nbm9tZS1rZXlyaW5nLC0td2l0aG91dC1nbm9tZS1rZXlyaW5nLGdsaWItMi4wIGdub21lLWtleXJpbmciCi0KLUVYVFJBX09FQ09ORiA9ICIgXAotICAgICAgICAgICAgICAgIC0td2l0aG91dC1iZXJrZWxleS1kYiAtLXdpdGhvdXQtYXB4cyBcCi0gICAgICAgICAgICAgICAgLS13aXRob3V0LXN3aWcgLS13aXRoLWFwcj0ke1NUQUdJTkdfQklORElSX0NST1NTfSBcCi0gICAgICAgICAgICAgICAgLS13aXRoLWFwci11dGlsPSR7U1RBR0lOR19CSU5ESVJfQ1JPU1N9IFwKLSAgICAgICAgICAgICAgICAtLWRpc2FibGUta2V5Y2hhaW4gXAotICAgICAgICAgICAgICAgIGFjX2N2X3BhdGhfUlVCWT1ub25lIgotCi1pbmhlcml0IGF1dG90b29scwotCi1leHBvcnQgTERGTEFHUyArPSAiIC1MJHtTVEFHSU5HX0xJQkRJUn0gIgotQ1BQRkxBR1MgKz0gIi1QIgotQlVJTERfQ1BQRkxBR1MgKz0gIi1QIgotCi1hY3BhdGhzID0gIi1JIGJ1aWxkLyAtSSBidWlsZC9hYy1tYWNyb3MvIgotCi1kb19jb25maWd1cmVfcHJlcGVuZCAoKSB7Ci0Jcm0gLWYgJHtTfS9saWJ0b29sCi0Jcm0gLWYgJHtTfS9idWlsZC9saWJ0b29sLm00ICR7U30vYnVpbGQvbHRtYWluLnNoICR7U30vYnVpbGQvbHRvcHRpb25zLm00ICR7U30vYnVpbGQvbHRzdWdhci5tNCAke1N9L2J1aWxkL2x0dmVyc2lvbi5tNCAke1N9L2J1aWxkL2x0fm9ic29sZXRlLm00Ci0Jcm0gLWYgJHtTfS9hY2xvY2FsLm00Ci0Jc2VkIC1pIC1lICdzOndpdGhfc2FzbD0iL3Vzci9sb2NhbCI6d2l0aF9zYXNsPSIke1NUQUdJTkdfRElSfSI6JyAke1N9L2J1aWxkL2FjLW1hY3Jvcy9zYXNsLm00Ci19Ci0KLSN8IHg4Nl82NC1saW51eC1saWJ0b29sOiBpbnN0YWxsOiB3YXJuaW5nOiBgL2hvbWUvcG9reWJ1aWxkL3lvY3RvLWF1dG9idWlsZGVyL3lvY3RvLXdvcmtlci9uaWdodGx5LXFhLWxvZ3JvdGF0ZS9idWlsZC9idWlsZC90bXAvd29yay94ODZfNjQtbGludXgvc3VidmVyc2lvbi1uYXRpdmUvMS44LjktcjAvYnVpbGQvc3VidmVyc2lvbi9saWJzdm5fcmFfbG9jYWwvbGlic3ZuX3JhX2xvY2FsLTEubGEnIGhhcyBub3QgYmVlbiBpbnN0YWxsZWQgaW4gYC9ob21lL3Bva3lidWlsZC95b2N0by1hdXRvYnVpbGRlci95b2N0by13b3JrZXIvbmlnaHRseS1xYS1sb2dyb3RhdGUvYnVpbGQvYnVpbGQvdG1wL3N5c3Jvb3RzL3g4Nl82NC1saW51eC91c3IvbGliJ3wgeDg2XzY0LWxpbnV4LWxpYnRvb2w6IGluc3RhbGw6IHdhcm5pbmc6IGAvaG9tZS9wb2t5YnVpbGQveW9jdG8tYXV0b2J1aWxkZXIveW9jdG8td29ya2VyL25pZ2h0bHktcWEtbG9ncm90YXRlL2J1aWxkL2J1aWxkL3RtcC93b3JrL3g4Nl82NC1saW51eC9zdWJ2ZXJzaW9uLW5hdGl2ZS8xLjguOS1yMC9idWlsZC9zdWJ2ZXJzaW9uL2xpYnN2bl9yZXBvcy9saWJzdm5fcmVwb3MtMS5sYScgaGFzIG5vdCBiZWVuIGluc3RhbGxlZCBpbiBgL2hvbWUvcG9reWJ1aWxkL3lvY3RvLWF1dG9idWlsZGVyL3lvY3RvLXdvcmtlci9uaWdodGx5LXFhLWxvZ3JvdGF0ZS9idWlsZC9idWlsZC90bXAvc3lzcm9vdHMveDg2XzY0LWxpbnV4L3Vzci9saWInfCAvdXNyL2Jpbi9sZDogY2Fubm90IGZpbmQgLWxzdm5fZGVsdGEtMXwgY29sbGVjdDI6IGxkIHJldHVybmVkIDEgZXhpdCBzdGF0dXN8IHg4Nl82NC1saW51eC1saWJ0b29sOiBpbnN0YWxsOiB3YXJuaW5nOiBgL2hvbWUvcG9reWJ1aWxkL3lvY3RvLWF1dG9idWlsZGVyL3lvY3RvLXdvcmtlci9uaWdodGx5LXFhLWxvZ3JvdGF0ZS9idWlsZC9idWlsZC90bXAvd29yay94ODZfNjQtbGludXgvc3VidmVyc2lvbi1uYXRpdmUvMS44LjktcjAvYnVpbGQvc3VidmVyc2lvbi9saWJzdm5fcmFfc3ZuL2xpYnN2bl9yYV9zdm4tMS5sYScgaGFzIG5vdCBiZWVuIGluc3RhbGxlZCBpbiBgL2hvbWUvcG9reWJ1aWxkL3lvY3RvLWF1dG9idWlsZGVyL3lvY3RvLXdvcmtlci9uaWdodGx5LXFhLWxvZ3JvdGF0ZS9idWlsZC9idWlsZC90bXAvc3lzcm9vdHMveDg2XzY0LWxpbnV4L3Vzci9saWInfCB4ODZfNjQtbGludXgtbGlidG9vbDogaW5zdGFsbDogd2FybmluZzogYC9ob21lL3Bva3lidWlsZC95b2N0by1hdXRvYnVpbGRlci95b2N0by13b3JrZXIvbmlnaHRseS1xYS1sb2dyb3RhdGUvYnVpbGQvYnVpbGQvdG1wL3dvcmsveDg2XzY0LWxpbnV4L3N1YnZlcnNpb24tbmF0aXZlLzEuOC45LXIwL2J1aWxkL3N1YnZlcnNpb24vbGlic3ZuX3JhX3NlcmYvbGlic3ZuX3JhX3NlcmYtMS5sYScgaGFzIG5vdCBiZWVuIGluc3RhbGxlZCBpbiBgL2hvbWUvcG9reWJ1aWxkL3lvY3RvLWF1dG9idWlsZGVyL3lvY3RvLXdvcmtlci9uaWdodGx5LXFhLWxvZ3JvdGF0ZS9idWlsZC9idWlsZC90bXAvc3lzcm9vdHMveDg2XzY0LWxpbnV4L3Vzci9saWInCi0jfCB4ODZfNjQtbGludXgtbGlidG9vbDogaW5zdGFsbDogZXJyb3I6IHJlbGluayBgbGlic3ZuX3JhX3NlcmYtMS5sYScgd2l0aCB0aGUgYWJvdmUgY29tbWFuZCBiZWZvcmUgaW5zdGFsbGluZyBpdAotI3wgeDg2XzY0LWxpbnV4LWxpYnRvb2w6IGluc3RhbGw6IHdhcm5pbmc6IGAuLi8uLi9zdWJ2ZXJzaW9uL2xpYnN2bl9yZXBvcy9saWJzdm5fcmVwb3MtMS5sYScgaGFzIG5vdCBiZWVuIGluc3RhbGxlZCBpbiBgL2hvbWUvcG9reWJ1aWxkL3lvY3RvLWF1dG9idWlsZGVyL3lvY3RvLXdvcmtlci9uaWdodGx5LXFhLWxvZ3JvdGF0ZS9idWlsZC9idWlsZC90bXAvc3lzcm9vdHMveDg2XzY0LWxpbnV4L3Vzci9saWInCi0jfCAvaG9tZS9wb2t5YnVpbGQveW9jdG8tYXV0b2J1aWxkZXIveW9jdG8td29ya2VyL25pZ2h0bHktcWEtbG9ncm90YXRlL2J1aWxkL2J1aWxkL3RtcC93b3JrL3g4Nl82NC1saW51eC9zdWJ2ZXJzaW9uLW5hdGl2ZS8xLjguOS1yMC9zdWJ2ZXJzaW9uLTEuOC45L2J1aWxkLW91dHB1dHMubWs6MTA5MDogcmVjaXBlIGZvciB0YXJnZXQgJ2luc3RhbGwtc2VyZi1saWInIGZhaWxlZAotI3wgbWFrZTogKioqIFtpbnN0YWxsLXNlcmYtbGliXSBFcnJvciAxCi1QQVJBTExFTF9NQUtFSU5TVCA9ICIiCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3N1YnZlcnNpb24vc3VidmVyc2lvbl8xLjkuNC5iYiBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvc3VidmVyc2lvbi9zdWJ2ZXJzaW9uXzEuOS40LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNjZTgzYzEKLS0tIC9kZXYvbnVsbAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3N1YnZlcnNpb24vc3VidmVyc2lvbl8xLjkuNC5iYgpAQCAtMCwwICsxLDU0IEBACitTVU1NQVJZID0gIlN1YnZlcnNpb24gKHN2bikgdmVyc2lvbiBjb250cm9sIHN5c3RlbSBjbGllbnQiCitTRUNUSU9OID0gImNvbnNvbGUvbmV0d29yayIKK0RFUEVORFMgPSAiYXByLXV0aWwgc2VyZiBzcWxpdGUzIGZpbGUiCitERVBFTkRTX2FwcGVuZF9jbGFzcy1uYXRpdmUgPSAiIGZpbGUtcmVwbGFjZW1lbnQtbmF0aXZlIgorUkRFUEVORFNfJHtQTn0gPSAic2VyZiIKK0xJQ0VOU0UgPSAiQXBhY2hlLTIiCitIT01FUEFHRSA9ICJodHRwOi8vc3VidmVyc2lvbi50aWdyaXMub3JnIgorCitCQkNMQVNTRVhURU5EID0gIm5hdGl2ZSIKKworaW5oZXJpdCBnZXR0ZXh0CisKK1NSQ19VUkkgPSAiJHtBUEFDSEVfTUlSUk9SfS8ke0JQTn0vJHtCUE59LSR7UFZ9LnRhci5iejIgXAorICAgICAgICAgICBmaWxlOi8vZGlzYWJsZV9tYWNvcy5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9zZXJmLm00LVJlZ2V4LW1vZGlmaWVkLXRvLWFsbG93LUQtaW4tcGF0aHMucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vMDAwMS1GaXgtbGlidG9vbC1uYW1lLWluLWNvbmZpZ3VyZS5hYy5wYXRjaCBcCisgICAgICAgICAgICIKKworU1JDX1VSSVttZDVzdW1dID0gIjI5MTIxYTAzOGY4NzY0MTA1NWE4MTgzZjQ5ZTk3MzlmIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjEyNjdmOWUyYWI5ODNmMjYwNjIzYmVlODQxZTZjOWNjNDU4YmY0YmY3NzYyMzhlZDVmMTAwOTgzZjc5ZTkyOTkiCisKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0xJQ0VOU0U7bWQ1PWFmODFhZTQ5YmEzNTllNzA2MjZjMDVlOWJmMzEzNzA5IgorCitQQUNLQUdFQ09ORklHW3Nhc2xdID0gIi0td2l0aC1zYXNsLC0td2l0aG91dC1zYXNsLGN5cnVzLXNhc2wiCitQQUNLQUdFQ09ORklHW2dub21lLWtleXJpbmddID0gIi0td2l0aC1nbm9tZS1rZXlyaW5nLC0td2l0aG91dC1nbm9tZS1rZXlyaW5nLGdsaWItMi4wIGdub21lLWtleXJpbmciCisKK0VYVFJBX09FQ09ORiA9ICIgXAorICAgICAgICAgICAgICAgIC0td2l0aG91dC1iZXJrZWxleS1kYiAtLXdpdGhvdXQtYXB4cyBcCisgICAgICAgICAgICAgICAgLS13aXRob3V0LXN3aWcgLS13aXRoLWFwcj0ke1NUQUdJTkdfQklORElSX0NST1NTfSBcCisgICAgICAgICAgICAgICAgLS13aXRoLWFwci11dGlsPSR7U1RBR0lOR19CSU5ESVJfQ1JPU1N9IFwKKyAgICAgICAgICAgICAgICAtLWRpc2FibGUta2V5Y2hhaW4gXAorICAgICAgICAgICAgICAgIGFjX2N2X3BhdGhfUlVCWT1ub25lIgorCitpbmhlcml0IGF1dG90b29scworCitleHBvcnQgTERGTEFHUyArPSAiIC1MJHtTVEFHSU5HX0xJQkRJUn0gIgorQ1BQRkxBR1MgKz0gIi1QIgorQlVJTERfQ1BQRkxBR1MgKz0gIi1QIgorCithY3BhdGhzID0gIi1JIGJ1aWxkLyAtSSBidWlsZC9hYy1tYWNyb3MvIgorCitkb19jb25maWd1cmVfcHJlcGVuZCAoKSB7CisJcm0gLWYgJHtTfS9saWJ0b29sCisJcm0gLWYgJHtTfS9idWlsZC9saWJ0b29sLm00ICR7U30vYnVpbGQvbHRtYWluLnNoICR7U30vYnVpbGQvbHRvcHRpb25zLm00ICR7U30vYnVpbGQvbHRzdWdhci5tNCAke1N9L2J1aWxkL2x0dmVyc2lvbi5tNCAke1N9L2J1aWxkL2x0fm9ic29sZXRlLm00CisJcm0gLWYgJHtTfS9hY2xvY2FsLm00CisJc2VkIC1pIC1lICdzOndpdGhfc2FzbD0iL3Vzci9sb2NhbCI6d2l0aF9zYXNsPSIke1NUQUdJTkdfRElSfSI6JyAke1N9L2J1aWxkL2FjLW1hY3Jvcy9zYXNsLm00Cit9CisKKyN8IHg4Nl82NC1saW51eC1saWJ0b29sOiBpbnN0YWxsOiB3YXJuaW5nOiBgL2hvbWUvcG9reWJ1aWxkL3lvY3RvLWF1dG9idWlsZGVyL3lvY3RvLXdvcmtlci9uaWdodGx5LXFhLWxvZ3JvdGF0ZS9idWlsZC9idWlsZC90bXAvd29yay94ODZfNjQtbGludXgvc3VidmVyc2lvbi1uYXRpdmUvMS44LjktcjAvYnVpbGQvc3VidmVyc2lvbi9saWJzdm5fcmFfbG9jYWwvbGlic3ZuX3JhX2xvY2FsLTEubGEnIGhhcyBub3QgYmVlbiBpbnN0YWxsZWQgaW4gYC9ob21lL3Bva3lidWlsZC95b2N0by1hdXRvYnVpbGRlci95b2N0by13b3JrZXIvbmlnaHRseS1xYS1sb2dyb3RhdGUvYnVpbGQvYnVpbGQvdG1wL3N5c3Jvb3RzL3g4Nl82NC1saW51eC91c3IvbGliJ3wgeDg2XzY0LWxpbnV4LWxpYnRvb2w6IGluc3RhbGw6IHdhcm5pbmc6IGAvaG9tZS9wb2t5YnVpbGQveW9jdG8tYXV0b2J1aWxkZXIveW9jdG8td29ya2VyL25pZ2h0bHktcWEtbG9ncm90YXRlL2J1aWxkL2J1aWxkL3RtcC93b3JrL3g4Nl82NC1saW51eC9zdWJ2ZXJzaW9uLW5hdGl2ZS8xLjguOS1yMC9idWlsZC9zdWJ2ZXJzaW9uL2xpYnN2bl9yZXBvcy9saWJzdm5fcmVwb3MtMS5sYScgaGFzIG5vdCBiZWVuIGluc3RhbGxlZCBpbiBgL2hvbWUvcG9reWJ1aWxkL3lvY3RvLWF1dG9idWlsZGVyL3lvY3RvLXdvcmtlci9uaWdodGx5LXFhLWxvZ3JvdGF0ZS9idWlsZC9idWlsZC90bXAvc3lzcm9vdHMveDg2XzY0LWxpbnV4L3Vzci9saWInfCAvdXNyL2Jpbi9sZDogY2Fubm90IGZpbmQgLWxzdm5fZGVsdGEtMXwgY29sbGVjdDI6IGxkIHJldHVybmVkIDEgZXhpdCBzdGF0dXN8IHg4Nl82NC1saW51eC1saWJ0b29sOiBpbnN0YWxsOiB3YXJuaW5nOiBgL2hvbWUvcG9reWJ1aWxkL3lvY3RvLWF1dG9idWlsZGVyL3lvY3RvLXdvcmtlci9uaWdodGx5LXFhLWxvZ3JvdGF0ZS9idWlsZC9idWlsZC90bXAvd29yay94ODZfNjQtbGludXgvc3VidmVyc2lvbi1uYXRpdmUvMS44LjktcjAvYnVpbGQvc3VidmVyc2lvbi9saWJzdm5fcmFfc3ZuL2xpYnN2bl9yYV9zdm4tMS5sYScgaGFzIG5vdCBiZWVuIGluc3RhbGxlZCBpbiBgL2hvbWUvcG9reWJ1aWxkL3lvY3RvLWF1dG9idWlsZGVyL3lvY3RvLXdvcmtlci9uaWdodGx5LXFhLWxvZ3JvdGF0ZS9idWlsZC9idWlsZC90bXAvc3lzcm9vdHMveDg2XzY0LWxpbnV4L3Vzci9saWInfCB4ODZfNjQtbGludXgtbGlidG9vbDogaW5zdGFsbDogd2FybmluZzogYC9ob21lL3Bva3lidWlsZC95b2N0by1hdXRvYnVpbGRlci95b2N0by13b3JrZXIvbmlnaHRseS1xYS1sb2dyb3RhdGUvYnVpbGQvYnVpbGQvdG1wL3dvcmsveDg2XzY0LWxpbnV4L3N1YnZlcnNpb24tbmF0aXZlLzEuOC45LXIwL2J1aWxkL3N1YnZlcnNpb24vbGlic3ZuX3JhX3NlcmYvbGlic3ZuX3JhX3NlcmYtMS5sYScgaGFzIG5vdCBiZWVuIGluc3RhbGxlZCBpbiBgL2hvbWUvcG9reWJ1aWxkL3lvY3RvLWF1dG9idWlsZGVyL3lvY3RvLXdvcmtlci9uaWdodGx5LXFhLWxvZ3JvdGF0ZS9idWlsZC9idWlsZC90bXAvc3lzcm9vdHMveDg2XzY0LWxpbnV4L3Vzci9saWInCisjfCB4ODZfNjQtbGludXgtbGlidG9vbDogaW5zdGFsbDogZXJyb3I6IHJlbGluayBgbGlic3ZuX3JhX3NlcmYtMS5sYScgd2l0aCB0aGUgYWJvdmUgY29tbWFuZCBiZWZvcmUgaW5zdGFsbGluZyBpdAorI3wgeDg2XzY0LWxpbnV4LWxpYnRvb2w6IGluc3RhbGw6IHdhcm5pbmc6IGAuLi8uLi9zdWJ2ZXJzaW9uL2xpYnN2bl9yZXBvcy9saWJzdm5fcmVwb3MtMS5sYScgaGFzIG5vdCBiZWVuIGluc3RhbGxlZCBpbiBgL2hvbWUvcG9reWJ1aWxkL3lvY3RvLWF1dG9idWlsZGVyL3lvY3RvLXdvcmtlci9uaWdodGx5LXFhLWxvZ3JvdGF0ZS9idWlsZC9idWlsZC90bXAvc3lzcm9vdHMveDg2XzY0LWxpbnV4L3Vzci9saWInCisjfCAvaG9tZS9wb2t5YnVpbGQveW9jdG8tYXV0b2J1aWxkZXIveW9jdG8td29ya2VyL25pZ2h0bHktcWEtbG9ncm90YXRlL2J1aWxkL2J1aWxkL3RtcC93b3JrL3g4Nl82NC1saW51eC9zdWJ2ZXJzaW9uLW5hdGl2ZS8xLjguOS1yMC9zdWJ2ZXJzaW9uLTEuOC45L2J1aWxkLW91dHB1dHMubWs6MTA5MDogcmVjaXBlIGZvciB0YXJnZXQgJ2luc3RhbGwtc2VyZi1saWInIGZhaWxlZAorI3wgbWFrZTogKioqIFtpbnN0YWxsLXNlcmYtbGliXSBFcnJvciAxCitQQVJBTExFTF9NQUtFSU5TVCA9ICIiCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3N3YWJiZXIvc3dhYmJlci1uYXRpdmVfZ2l0LmJiIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9zd2FiYmVyL3N3YWJiZXItbmF0aXZlX2dpdC5iYgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMmYzMTNiYi4uMDAwMDAwMAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3N3YWJiZXIvc3dhYmJlci1uYXRpdmVfZ2l0LmJiCisrKyAvZGV2L251bGwKQEAgLTEsMjEgKzAsMCBAQAotU1VNTUFSWSA9ICJUb29sIHRvIG1vbml0b3IgYW5kIHJlcG9ydCBvbiBob3N0IHN5c3RlbSBmaWxlIHVzYWdlIgotSE9NRVBBR0UgPSAiaHR0cDovL2dpdC55b2N0b3Byb2plY3Qub3JnL2NnaXQvY2dpdC5jZ2kvc3dhYmJlciIKLUxJQ0VOU0UgPSAiR1BMdjIiCi1MSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT0zOTNhNWNhNDQ1ZjY5NjU4NzNlY2EwMjU5YTE3ZjgzMyIKLQotU1JDUkVWID0gIjJkMWZlMzZmYjBhNGZkYWFlODgyM2E5ODE4YTY3ODUxODJkNzVlNjYiCi1QViA9ICIwLjArZ2l0JHtTUkNQVn0iCi0KLVMgPSAiJHtXT1JLRElSfS9naXQiCi0KLVNSQ19VUkkgPSAiZ2l0Oi8vZ2l0LnlvY3RvcHJvamVjdC5vcmcvc3dhYmJlciIKLQotaW5oZXJpdCBuYXRpdmUKLQotZG9fY29uZmlndXJlICgpIHsKLQk6Ci19Ci0KLWRvX2luc3RhbGwoKSB7Ci0gIG9lX3J1bm1ha2UgJ0RFU1RESVI9JHtEfScgaW5zdGFsbAotfQpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9zd2lnL3N3aWcuaW5jIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9zd2lnL3N3aWcuaW5jCmluZGV4IDlkYTQwZGYuLjcwNGJiMjcgMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvc3dpZy9zd2lnLmluYworKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3N3aWcvc3dpZy5pbmMKQEAgLTcsMTQgKzcsMTQgQEAKIAogU0VDVElPTiA9ICJkZXZlbCIKIAotREVQRU5EUyA9ICJsaWJwY3JlIHB5dGhvbiIKK0RFUEVORFMgPSAibGlicGNyZSBweXRob24zIgogCiBTUkNfVVJJID0gIiR7U09VUkNFRk9SR0VfTUlSUk9SfS8ke0JQTn0vJHtCUE59LSR7UFZ9LnRhci5neiIKIAotaW5oZXJpdCBhdXRvdG9vbHMgcHl0aG9ubmF0aXZlCitpbmhlcml0IGF1dG90b29scyBweXRob24zbmF0aXZlCiAKIEVYVFJBX09FQ09ORiA9ICIgXAotICAgIC0td2l0aC1weXRob249JHtQWVRIT059IFwKKyAgICAtLXdpdGgtcHl0aG9uMz0ke1BZVEhPTn0gXAogICAgIC0td2l0aG91dC1hbGxlZ3JvY2wgXAogICAgIC0td2l0aG91dC1hbmRyb2lkIFwKICAgICAtLXdpdGhvdXQtYm9vc3QgXApAQCAtMzMsNyArMzMsNiBAQAogICAgIC0td2l0aG91dC1wZXJsNSBcCiAgICAgLS13aXRob3V0LXBpa2UgXAogICAgIC0td2l0aG91dC1waHAgXAotICAgIC0td2l0aG91dC1weXRob24zIFwKICAgICAtLXdpdGhvdXQtciBcCiAgICAgLS13aXRob3V0LXJ1YnkgXAogICAgIC0td2l0aG91dC10Y2wgXApkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9zeXN0ZW1kLWJvb3RjaGFydC9zeXN0ZW1kLWJvb3RjaGFydF8yMzAuYmIgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3N5c3RlbWQtYm9vdGNoYXJ0L3N5c3RlbWQtYm9vdGNoYXJ0XzIzMC5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45Y2U2MjlhCi0tLSAvZGV2L251bGwKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9zeXN0ZW1kLWJvb3RjaGFydC9zeXN0ZW1kLWJvb3RjaGFydF8yMzAuYmIKQEAgLTAsMCArMSwyOSBAQAorTElDRU5TRSA9ICJMR1BMdjIuMSAmIEdQTHYyIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vTElDRU5TRS5MR1BMMi4xO21kNT00ZmJkNjUzODBjZGQyNTU5NTEwNzkwMDhiMzY0NTE2YyBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9MSUNFTlNFLkdQTDI7bWQ1PTc1MTQxOTI2MGFhOTU0NDk5ZjdhYmFhYmFhODgyYmJlIgorCitTUkNfVVJJID0gImdpdDovL2dpdGh1Yi5jb20vc3lzdGVtZC9zeXN0ZW1kLWJvb3RjaGFydC5naXQ7cHJvdG9jb2w9aHR0cHMiCisKKyMgTW9kaWZ5IHRoZXNlIGFzIGRlc2lyZWQKK1BWID0gIjIzMCtnaXQke1NSQ1BWfSIKK1NSQ1JFViA9ICJkY2IyNDZiNDYyMzkyNTllYzk5YjNjNmU2YWI3ZDI3ZTFhNWE4YTg0IgorCitTID0gIiR7V09SS0RJUn0vZ2l0IgorCitERVBFTkRTID0gInN5c3RlbWQgbGlieHNsdC1uYXRpdmUgeG1sdG8tbmF0aXZlIGRvY2Jvb2steG1sLWR0ZDQtbmF0aXZlIGRvY2Jvb2steHNsLXN0eWxlc2hlZXRzLW5hdGl2ZSBpbnRsdG9vbCIKKworaW5oZXJpdCBwa2djb25maWcgYXV0b3Rvb2xzIHN5c3RlbWQgZGlzdHJvX2ZlYXR1cmVzX2NoZWNrCisKK1JFUVVJUkVEX0RJU1RST19GRUFUVVJFUyA9ICJzeXN0ZW1kIgorCitTWVNURU1EX1NFUlZJQ0VfJHtQTn0gPSAic3lzdGVtZC1ib290Y2hhcnQuc2VydmljZSIKKworZG9fY29uZmlndXJlX3ByZXBlbmQoKSB7CisgICAgIyBpbnRsdG9vbC5tNCBpcyBhIHNvZnQgbGluayB0byAvdXNyL3NoYXJlL2FjbG9jYWwvbTQsIGRlbGV0ZSBpdCBhbmQgdXNlIHRoZSBvbmUgaW4gb3VyIHN5c3Jvb3QKKyAgICBybSAtZiAke1N9L200L2ludGx0b29sLm00Cit9CisKK0ZJTEVTXyR7UE59ICs9ICIke3N5c3RlbWRfdW5pdGRpcn0vc3lzdGVtZC1ib290Y2hhcnQiCisKK0VYVFJBX09FQ09ORiA9ICIgLS13aXRoLXJvb3RwcmVmaXg9JHtiYXNlX3ByZWZpeH0gXAorICAgICAgICAgICAgICAgICAtLXdpdGgtcm9vdGxpYmRpcj0ke2Jhc2VfbGliZGlyfSIKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvdGNmLWFnZW50L3RjZi1hZ2VudF9naXQuYmIgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3RjZi1hZ2VudC90Y2YtYWdlbnRfZ2l0LmJiCmluZGV4IGFiMmZjZDcuLmU1ZTQxZjEgMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvdGNmLWFnZW50L3RjZi1hZ2VudF9naXQuYmIKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy90Y2YtYWdlbnQvdGNmLWFnZW50X2dpdC5iYgpAQCAtNSwxMSArNSwxMSBAQAogTElDRU5TRSA9ICJFUEwtMS4wIHwgRURMLTEuMCIKIExJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL2VkbC12MTAuaHRtbDttZDU9NTIyYTM5MGE4M2RjMTg2NTEzZjA1MDA1NDNhZDM2NzkiCiAKLVNSQ1JFViA9ICJiOWE3MzVlOWM3Y2Y4MmY4MGQ0MTJiN2FiMTVkMDhiODlkNWE0Y2NjIgotUFYgPSAiMS4zLjArZ2l0JHtTUkNQVn0iCitTUkNSRVYgPSAiMmRkZGQ1ZjQ0MGExNWQ1NDA2MDMyZmFjMjBmMjA2NDg0NTEzNjQ2ZiIKK1BWID0gIjEuNC4wK2dpdCR7U1JDUFZ9IgogCiBVUFNUUkVBTV9DSEVDS19HSVRUQUdSRUdFWCA9ICIoP1A8cHZlcj4oXGQrKFwuXGQrKSspKSIKLVNSQ19VUkkgPSAiZ2l0Oi8vZ2l0LmVjbGlwc2Uub3JnL2dpdHJvb3QvdGNmL29yZy5lY2xpcHNlLnRjZi5hZ2VudC5naXQ7YnJhbmNoPTEuM19tYXJzX2J1Z2ZpeCBcCitTUkNfVVJJID0gImdpdDovL2dpdC5lY2xpcHNlLm9yZy9naXRyb290L3RjZi9vcmcuZWNsaXBzZS50Y2YuYWdlbnQ7YnJhbmNoPTEuNF9uZW9uX2J1Z2ZpeCBcCiAgICAgICAgICAgIGZpbGU6Ly9maXhfcmFubGliLnBhdGNoIFwKICAgICAgICAgICAgZmlsZTovL2xkZmxhZ3MucGF0Y2ggXAogICAgICAgICAgICBmaWxlOi8vMDAwMS1jYW5vbmljYWxpemVfZmlsZV9uYW1lLWlzLXNwZWNpZmljLXRvLWdsaWJjLnBhdGNoO3N0cmlwbGV2ZWw9MiBcCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3RjbHRrL3RjbC9maXhfaXNzdWVfd2l0aF9vbGRfZGlzdHJvX2dsaWJjLnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy90Y2x0ay90Y2wvZml4X2lzc3VlX3dpdGhfb2xkX2Rpc3Ryb19nbGliYy5wYXRjaAppbmRleCA1YjVkZTA3Li43MmEwZmE0IDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3RjbHRrL3RjbC9maXhfaXNzdWVfd2l0aF9vbGRfZGlzdHJvX2dsaWJjLnBhdGNoCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvdGNsdGsvdGNsL2ZpeF9pc3N1ZV93aXRoX29sZF9kaXN0cm9fZ2xpYmMucGF0Y2gKQEAgLTEyLDcgKzEyLDcgQEAKIHwgTWFraW5nIGRpcmVjdG9yeSAvc3J2L2hvbWUvbml0aW4vYnVpbGRzL2J1aWxkLWdjYzQ3L3RtcC93b3JrL3g4Nl82NC1wb2t5LWxpbnV4L3RjbC04LjUuMTEtcjUvaW1hZ2UvdXNyL2JpbgogfCBtYWtlOiAqKiogW2luc3RhbGwtbXNnc10gRXJyb3IgMQogCi1TaWduZWQtT2ZmLUJ5OiBOaXRpbiBBIEthbWJsZSA8bml0aW4uYS5rYW1ibGVAaW50ZWwuY29tPgorU2lnbmVkLW9mZi1ieTogTml0aW4gQSBLYW1ibGUgPG5pdGluLmEua2FtYmxlQGludGVsLmNvbT4KIDIwMTIvMDQvMjYKIAogSW5kZXg6IHVuaXgvTWFrZWZpbGUuaW4KZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvdGNsdGsvdGNsL25vX3BhY2thZ2VzLnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy90Y2x0ay90Y2wvbm9fcGFja2FnZXMucGF0Y2gKaW5kZXggYWI2Y2M0My4uNWM2MjJhMiAxMDA2NDQKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy90Y2x0ay90Y2wvbm9fcGFja2FnZXMucGF0Y2gKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy90Y2x0ay90Y2wvbm9fcGFja2FnZXMucGF0Y2gKQEAgLTUsMjYgKzUsMjYgQEAKIAogU2lnbmVkLW9mZi1ieTogQm9nZGFuIE1hcmluZXNjdSA8Ym9nZGFuLmEubWFyaW5lc2N1QGludGVsLmNvbT4KIAotSW5kZXg6IHVuaXgvTWFrZWZpbGUuaW4KLT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tLSB1bml4Lm9yaWcvTWFrZWZpbGUuaW4JMjAxMy0xMS0xMCAyMzozODoxMi4yMzU0MjU4OTEgLTA4MDAKLSsrKyB1bml4L01ha2VmaWxlLmluCTIwMTMtMTEtMTAgMjM6Mzg6MTIuMjMxNDI1ODkxIC0wODAwCi1AQCAtNjExLDcgKzYxMSw3IEBACitkaWZmIC0tZ2l0IGEvTWFrZWZpbGUuaW4gYi9NYWtlZmlsZS5pbgoraW5kZXggYjcyOWZmZC4uMmMyZTgyNCAxMDA2NDQKKy0tLSBhL01ha2VmaWxlLmluCisrKysgYi9NYWtlZmlsZS5pbgorQEAgLTYxMiw3ICs2MTIsNyBAQCBTUkNTID0gJChHRU5FUklDX1NSQ1MpICQoVE9NTUFUSF9TUkNTKSAkKFVOSVhfU1JDUykgJChOT1RJRllfU1JDUykgXAogICMgU3RhcnQgb2YgcnVsZXMKICAjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAKIC1hbGw6IGJpbmFyaWVzIGxpYnJhcmllcyBkb2MgcGFja2FnZXMKICthbGw6IGJpbmFyaWVzIGxpYnJhcmllcyBkb2MKICAKLSBiaW5hcmllczogJHtMSUJfRklMRX0gJChTVFVCX0xJQl9GSUxFKSAke1RDTF9FWEV9CisgYmluYXJpZXM6ICR7TElCX0ZJTEV9ICR7VENMX0VYRX0KICAKLUBAIC02NTMsMTIgKzY1MywxMiBAQAorQEAgLTY1NiwxMiArNjU2LDEyIEBAIE1ha2VmaWxlOiAkKFVOSVhfRElSKS9NYWtlZmlsZS5pbiAkKERMVEVTVF9ESVIpL01ha2VmaWxlLmluCiAgI3RjbENvbmZpZy5oOiAkKFVOSVhfRElSKS90Y2xDb25maWcuaC5pbgogICMJJChTSEVMTCkgY29uZmlnLnN0YXR1cwogIAogLWNsZWFuOiBjbGVhbi1wYWNrYWdlcwogK2NsZWFuOgotIAlybSAtZiAqLmEgKi5vIGxpYnRjbCogY29yZSBlcnJzICp+IFwjKiBUQUdTICouRSBhLm91dCBcCisgCXJtIC1yZiAqLmEgKi5vIGxpYnRjbCogY29yZSBlcnJzICp+IFwjKiBUQUdTICouRSBhLm91dCBcCiAgCQllcnJvcnMgJHtUQ0xfRVhFfSAke1RDTFRFU1RfRVhFfSBsaWIuZXhwIFRjbCBARFRSQUNFX0hEUkAKICAJY2QgZGx0ZXN0IDsgJChNQUtFKSBjbGVhbgogIApAQCAtMzMsNyArMzMsNyBAQAogIAlybSAtcmYgTWFrZWZpbGUgY29uZmlnLnN0YXR1cyBjb25maWcuY2FjaGUgY29uZmlnLmxvZyB0Y2xDb25maWcuc2ggXAogIAkJdGNsQ29uZmlnLmggKi5wbGlzdCBUY2wuZnJhbWV3b3JrIHRjbC5wYwogIAljZCBkbHRlc3QgOyAkKE1BS0UpIGRpc3RjbGVhbgotQEAgLTcwNiw3ICs3MDYsNyBAQAorQEAgLTcwOSw3ICs3MDksNyBAQCB0Y2x0ZXN0LXJlYWw6CiAgIyB0Y2x0ZXN0LCBpZToKICAjCSUgbWFrZSB0ZXN0IFRFU1RGTEFHUz0iLXZlcmJvc2UgYnBzIC1maWxlIGZpbGVOYW1lLnRlc3QiCiAgCkBAIC00Miw3ICs0Miw3IEBACiAgCiAgdGVzdC10Y2w6ICR7VENMVEVTVF9FWEV9CiAgCSQoU0hFTExfRU5WKSAke1RDTFRFU1RfRVhFfSAkKFRPUF9ESVIpL3Rlc3RzL2FsbC50Y2wgJChURVNURkxBR1MpCi1AQCAtNzcxLDcgKzc3MSw3IEBACitAQCAtNzc0LDcgKzc3NCw3IEBAIElOU1RBTExfUEFDS0FHRV9UQVJHRVRTID0gaW5zdGFsbC1wYWNrYWdlcwogIElOU1RBTExfREVWX1RBUkdFVFMgPSBpbnN0YWxsLWhlYWRlcnMKICBJTlNUQUxMX0VYVFJBX1RBUkdFVFMgPSBARVhUUkFfSU5TVEFMTEAKICBJTlNUQUxMX1RBUkdFVFMgPSAkKElOU1RBTExfQkFTRV9UQVJHRVRTKSAkKElOU1RBTExfRE9DX1RBUkdFVFMpICQoSU5TVEFMTF9ERVZfVEFSR0VUUykgXApkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy90Y2x0ay90Y2xfOC42LjQuYmIgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3RjbHRrL3RjbF84LjYuNC5iYgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOGU5MmIzZS4uMDAwMDAwMAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3RjbHRrL3RjbF84LjYuNC5iYgorKysgL2Rldi9udWxsCkBAIC0xLDEwMiArMCwwIEBACi1TVU1NQVJZID0gIlRvb2wgQ29tbWFuZCBMYW5ndWFnZSIKLUhPTUVQQUdFID0gImh0dHA6Ly90Y2wuc291cmNlZm9yZ2UubmV0IgotU0VDVElPTiA9ICJkZXZlbC90Y2x0ayIKLQotIyBodHRwOi8vd3d3LnRjbC50ay9zb2Z0d2FyZS90Y2x0ay9saWNlbnNlLmh0bWwKLUxJQ0VOU0UgPSAidGNsICYgQlNELTMtQ2xhdXNlIgotTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vLi4vbGljZW5zZS50ZXJtczttZDU9MDU4ZjYyMjk3OTgyODFiYmNhYzQyMzljNzg4Y2ZhMzggXAotICAgIGZpbGU6Ly8uLi9jb21wYXQvbGljZW5zZS50ZXJtczttZDU9MDU4ZjYyMjk3OTgyODFiYmNhYzQyMzljNzg4Y2ZhMzggXAotICAgIGZpbGU6Ly8uLi9saWJyYXJ5L2xpY2Vuc2UudGVybXM7bWQ1PTA1OGY2MjI5Nzk4MjgxYmJjYWM0MjM5Yzc4OGNmYTM4IFwKLSAgICBmaWxlOi8vLi4vbWFjb3N4L2xpY2Vuc2UudGVybXM7bWQ1PTA1OGY2MjI5Nzk4MjgxYmJjYWM0MjM5Yzc4OGNmYTM4IFwKLSAgICBmaWxlOi8vLi4vdGVzdHMvbGljZW5zZS50ZXJtczttZDU9MDU4ZjYyMjk3OTgyODFiYmNhYzQyMzljNzg4Y2ZhMzggXAotICAgIGZpbGU6Ly8uLi93aW4vbGljZW5zZS50ZXJtczttZDU9MDU4ZjYyMjk3OTgyODFiYmNhYzQyMzljNzg4Y2ZhMzggXAotIgotCi1ERVBFTkRTID0gInRjbC1uYXRpdmUgemxpYiIKLQotQkFTRV9TUkNfVVJJID0gIiR7U09VUkNFRk9SR0VfTUlSUk9SfS90Y2wvJHtCUE59JHtQVn0tc3JjLnRhci5neiBcCi0gICAgICAgICAgICAgICAgZmlsZTovL3RjbC1hZGQtc29uYW1lLnBhdGNoIgotU1JDX1VSSSA9ICIke0JBU0VfU1JDX1VSSX0gXAotICAgICAgICAgICBmaWxlOi8vZml4X25vbl9uYXRpdmVfYnVpbGRfaXNzdWUucGF0Y2ggXAotICAgICAgICAgICBmaWxlOi8vZml4X2lzc3VlX3dpdGhfb2xkX2Rpc3Ryb19nbGliYy5wYXRjaCBcCi0gICAgICAgICAgIGZpbGU6Ly9ub19wYWNrYWdlcy5wYXRjaCBcCi0gICAgICAgICAgIGZpbGU6Ly90Y2wtcmVtb3ZlLWhhcmRjb2RlZC1pbnN0YWxsLXBhdGgucGF0Y2ggXAotICAgICAgICAgICBmaWxlOi8vYWx0ZXItaW5jbHVkZWRpci5wYXRjaCBcCi0gICAgICAgICAgIGZpbGU6Ly9ydW4tcHRlc3QgXAotIgotU1JDX1VSSVttZDVzdW1dID0gImQ3Y2JiOTFmMWRlZDE5MTkzNzBhMzBlZGQxNTM0MzA0IgotU1JDX1VSSVtzaGEyNTZzdW1dID0gIjllNmVkOTRjOTgxYzFkMGM1ZjVmZWZiODExMmQwNmM2YmY0ZDA1MGE3MzI3ZTk1ZTcxZDQxN2M0MTY1MTljOGQiCi0KLVNSQ19VUklfY2xhc3MtbmF0aXZlID0gIiR7QkFTRV9TUkNfVVJJfSIKLQotUyA9ICIke1dPUktESVJ9LyR7QlBOfSR7UFZ9L3VuaXgiCi0KLVZFUiA9ICIke1BWfSIKLQotaW5oZXJpdCBhdXRvdG9vbHMgcHRlc3QgYmluY29uZmlnCi0KLURFUEVORFNfY2xhc3MtbmF0aXZlID0gInpsaWItbmF0aXZlIgotCi1FWFRSQV9PRUNPTkYgPSAiLS1lbmFibGUtdGhyZWFkcyAtLWRpc2FibGUtcnBhdGggLS1saWJkaXI9JHtsaWJkaXJ9IgotCi1kb19jb25maWd1cmUoKSB7Ci0JY2QgJHtTfQotCWdudS1jb25maWdpemUKLQljZCAke0J9Ci0Jb2VfcnVuY29uZgotfQotCi1kb19jb21waWxlX3ByZXBlbmQoKSB7Ci0JZWNobyA+ICR7U30vLi4vY29tcGF0L2ZpeHN0cnRvZC5jCi19Ci0KLWRvX2luc3RhbGwoKSB7Ci0JYXV0b3Rvb2xzX2RvX2luc3RhbGwgaW5zdGFsbC1wcml2YXRlLWhlYWRlcnMKLQlsbiAtc2YgLi90Y2xzaCR7VkVSfSAke0R9JHtiaW5kaXJ9L3RjbHNoCi0JbG4gLXNmIHRjbHNoOC42ICR7RH0ke2JpbmRpcn0vdGNsc2gke1ZFUn0KLQlzZWQgLWkgInMrLUwke0J9Ky1MJHtTVEFHSU5HX0xJQkRJUn0rZyIgdGNsQ29uZmlnLnNoCi0Jc2VkIC1pICJzKyR7V09SS0RJUn0rJHtTVEFHSU5HX0lOQ0RJUn0rZyIgdGNsQ29uZmlnLnNoCi0Jc2VkIC1pICJzLC1MJHtsaWJkaXJ9LC1MPSR7bGliZGlyfSxnIiB0Y2xDb25maWcuc2gKLQlzZWQgLWkgInMsLUkke2luY2x1ZGVkaXJ9LC1JPSR7aW5jbHVkZWRpcn0sZyIgdGNsQ29uZmlnLnNoCi0JaW5zdGFsbCAtZCAke0R9JHtiaW5kaXJfY3Jvc3NzY3JpcHRzfQotCWluc3RhbGwgLW0gMDc1NSB0Y2xDb25maWcuc2ggJHtEfSR7YmluZGlyX2Nyb3Nzc2NyaXB0c30KLQlpbnN0YWxsIC1tIDA3NTUgdGNsQ29uZmlnLnNoICR7RH0ke2xpYmRpcn0KLQljZCAuLgotCWZvciBkaXIgaW4gY29tcGF0IGdlbmVyaWMgdW5peDsgZG8KLQkJaW5zdGFsbCAtZCAke0R9JHtpbmNsdWRlZGlyfS8ke0JQTn0ke1ZFUn0vJGRpcgotCQlpbnN0YWxsIC1tIDA2NDQgJHtTfS8uLi8kZGlyLyouaCAke0R9JHtpbmNsdWRlZGlyfS8ke0JQTn0ke1ZFUn0vJGRpci8KLQlkb25lCi19Ci0KLVNZU1JPT1RfUFJFUFJPQ0VTU19GVU5DUyArPSAidGNsX3N5c3Jvb3RfcHJlcHJvY2VzcyIKLXRjbF9zeXNyb290X3ByZXByb2Nlc3MgKCkgewotCXN5c3Jvb3Rfc3RhZ2VfZGlyICR7RH0ke2JpbmRpcl9jcm9zc3NjcmlwdHN9ICR7U1lTUk9PVF9ERVNURElSfSR7YmluZGlyX2Nyb3Nzc2NyaXB0c30KLX0KLQotUEFDS0FHRVMgPSsgInRjbC1saWIiCi1GSUxFU190Y2wtbGliID0gIiR7bGliZGlyfS9saWJ0Y2w4LjYuc28uKiIKLUZJTEVTXyR7UE59ICs9ICIke2xpYmRpcn0vdGNsJHtWRVJ9ICR7bGliZGlyfS90Y2w4LjYgJHtsaWJkaXJ9L3RjbDgiCi1GSUxFU18ke1BOfS1kZXYgKz0gIiR7bGliZGlyfS90Y2xDb25maWcuc2ggJHtsaWJkaXJ9L3RjbG9vQ29uZmlnLnNoIgotCi0jIGlzbid0IGdldHRpbmcgcGlja2VkIHVwIGJ5IHNobGlicyBjb2RlCi1SREVQRU5EU18ke1BOfSArPSAidGNsLWxpYiIKLVJERVBFTkRTXyR7UE59X2NsYXNzLW5hdGl2ZSA9ICIiCi1SREVQRU5EU18ke1BOfS1wdGVzdCArPSAibGliZ2NjIgotCi1CQkNMQVNTRVhURU5EID0gIm5hdGl2ZSIKLQotZG9fY29tcGlsZV9wdGVzdCgpIHsKLQlvZV9ydW5tYWtlIHRjbHRlc3QKLX0KLQotZG9faW5zdGFsbF9wdGVzdCgpIHsKLQljcCAke0J9L3RjbHRlc3QgJHtEfSR7UFRFU1RfUEFUSH0KLQljcCAtciAke1N9Ly4uL2xpYnJhcnkgJHtEfSR7UFRFU1RfUEFUSH0KLQljcCAtciAke1N9Ly4uL3Rlc3RzICR7RH0ke1BURVNUX1BBVEh9Ci19Ci0KLSMgRml4IHNvbWUgcGF0aHMgdGhhdCBtaWdodCBiZSB1c2VkIGJ5IFRjbCBleHRlbnNpb25zCi1CSU5DT05GSUdfR0xPQiA9ICIqQ29uZmlnLnNoIgotCi0jIEZpeCB0aGUgcGF0aCBpbiBzc3RhdGUKLVNTVEFURV9TQ0FOX0ZJTEVTICs9ICIqQ29uZmlnLnNoIgpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy90Y2x0ay90Y2xfOC42LjYuYmIgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3RjbHRrL3RjbF84LjYuNi5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yZGQwYTdhCi0tLSAvZGV2L251bGwKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy90Y2x0ay90Y2xfOC42LjYuYmIKQEAgLTAsMCArMSw5NyBAQAorU1VNTUFSWSA9ICJUb29sIENvbW1hbmQgTGFuZ3VhZ2UiCitIT01FUEFHRSA9ICJodHRwOi8vdGNsLnNvdXJjZWZvcmdlLm5ldCIKK1NFQ1RJT04gPSAiZGV2ZWwvdGNsdGsiCisKKyMgaHR0cDovL3d3dy50Y2wudGsvc29mdHdhcmUvdGNsdGsvbGljZW5zZS5odG1sCitMSUNFTlNFID0gInRjbCAmIEJTRC0zLUNsYXVzZSIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovLy4uL2xpY2Vuc2UudGVybXM7bWQ1PTA1OGY2MjI5Nzk4MjgxYmJjYWM0MjM5Yzc4OGNmYTM4IFwKKyAgICBmaWxlOi8vLi4vY29tcGF0L2xpY2Vuc2UudGVybXM7bWQ1PTA1OGY2MjI5Nzk4MjgxYmJjYWM0MjM5Yzc4OGNmYTM4IFwKKyAgICBmaWxlOi8vLi4vbGlicmFyeS9saWNlbnNlLnRlcm1zO21kNT0wNThmNjIyOTc5ODI4MWJiY2FjNDIzOWM3ODhjZmEzOCBcCisgICAgZmlsZTovLy4uL21hY29zeC9saWNlbnNlLnRlcm1zO21kNT0wNThmNjIyOTc5ODI4MWJiY2FjNDIzOWM3ODhjZmEzOCBcCisgICAgZmlsZTovLy4uL3Rlc3RzL2xpY2Vuc2UudGVybXM7bWQ1PTA1OGY2MjI5Nzk4MjgxYmJjYWM0MjM5Yzc4OGNmYTM4IFwKKyAgICBmaWxlOi8vLi4vd2luL2xpY2Vuc2UudGVybXM7bWQ1PTA1OGY2MjI5Nzk4MjgxYmJjYWM0MjM5Yzc4OGNmYTM4IFwKKyIKKworREVQRU5EUyA9ICJ0Y2wtbmF0aXZlIHpsaWIiCisKK0JBU0VfU1JDX1VSSSA9ICIke1NPVVJDRUZPUkdFX01JUlJPUn0vdGNsLyR7QlBOfSR7UFZ9LXNyYy50YXIuZ3ogXAorICAgICAgICAgICAgICAgIGZpbGU6Ly90Y2wtYWRkLXNvbmFtZS5wYXRjaCIKK1NSQ19VUkkgPSAiJHtCQVNFX1NSQ19VUkl9IFwKKyAgICAgICAgICAgZmlsZTovL2ZpeF9ub25fbmF0aXZlX2J1aWxkX2lzc3VlLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL2ZpeF9pc3N1ZV93aXRoX29sZF9kaXN0cm9fZ2xpYmMucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vbm9fcGFja2FnZXMucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vdGNsLXJlbW92ZS1oYXJkY29kZWQtaW5zdGFsbC1wYXRoLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL2FsdGVyLWluY2x1ZGVkaXIucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vcnVuLXB0ZXN0IFwKKyIKK1NSQ19VUklbbWQ1c3VtXSA9ICI1MTkzYWVhODEwNzgzOWE3OWRmOGFjNzA5NTUyZWNiNyIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICJhMjY1NDA5NzgxZTRiM2VkY2M0ZWY4MjI1MzMwNzFiMzRjM2RjNjc5MGI4OTM5NjM4MDliOWZlMjIxYmVmZTA3IgorCitTUkNfVVJJX2NsYXNzLW5hdGl2ZSA9ICIke0JBU0VfU1JDX1VSSX0iCisKK1MgPSAiJHtXT1JLRElSfS8ke0JQTn0ke1BWfS91bml4IgorCitWRVIgPSAiJHtQVn0iCisKK2luaGVyaXQgYXV0b3Rvb2xzIHB0ZXN0IGJpbmNvbmZpZworCitERVBFTkRTX2NsYXNzLW5hdGl2ZSA9ICJ6bGliLW5hdGl2ZSIKKworRVhUUkFfT0VDT05GID0gIi0tZW5hYmxlLXRocmVhZHMgLS1kaXNhYmxlLXJwYXRoIC0tbGliZGlyPSR7bGliZGlyfSIKKworZG9fY29uZmlndXJlKCkgeworCWNkICR7U30KKwlnbnUtY29uZmlnaXplCisJY2QgJHtCfQorCW9lX3J1bmNvbmYKK30KKworZG9fY29tcGlsZV9wcmVwZW5kKCkgeworCWVjaG8gPiAke1N9Ly4uL2NvbXBhdC9maXhzdHJ0b2QuYworfQorCitkb19pbnN0YWxsKCkgeworCWF1dG90b29sc19kb19pbnN0YWxsIGluc3RhbGwtcHJpdmF0ZS1oZWFkZXJzCisJbG4gLXNmIC4vdGNsc2gke1ZFUn0gJHtEfSR7YmluZGlyfS90Y2xzaAorCWxuIC1zZiB0Y2xzaDguNiAke0R9JHtiaW5kaXJ9L3RjbHNoJHtWRVJ9CisJc2VkIC1pICJzKy1MJHtCfSstTCR7U1RBR0lOR19MSUJESVJ9K2ciIHRjbENvbmZpZy5zaAorCXNlZCAtaSAicyske1dPUktESVJ9KyR7U1RBR0lOR19JTkNESVJ9K2ciIHRjbENvbmZpZy5zaAorCWluc3RhbGwgLWQgJHtEfSR7YmluZGlyX2Nyb3Nzc2NyaXB0c30KKwlpbnN0YWxsIC1tIDA3NTUgdGNsQ29uZmlnLnNoICR7RH0ke2JpbmRpcl9jcm9zc3NjcmlwdHN9CisJaW5zdGFsbCAtbSAwNzU1IHRjbENvbmZpZy5zaCAke0R9JHtsaWJkaXJ9CisJY2QgLi4KKwlmb3IgZGlyIGluIGNvbXBhdCBnZW5lcmljIHVuaXg7IGRvCisJCWluc3RhbGwgLWQgJHtEfSR7aW5jbHVkZWRpcn0vJHtCUE59JHtWRVJ9LyRkaXIKKwkJaW5zdGFsbCAtbSAwNjQ0ICR7U30vLi4vJGRpci8qLmggJHtEfSR7aW5jbHVkZWRpcn0vJHtCUE59JHtWRVJ9LyRkaXIvCisJZG9uZQorfQorCitTWVNST09UX0RJUlMgKz0gIiR7YmluZGlyX2Nyb3Nzc2NyaXB0c30iCisKK1BBQ0tBR0VTID0rICJ0Y2wtbGliIgorRklMRVNfdGNsLWxpYiA9ICIke2xpYmRpcn0vbGlidGNsOC42LnNvLioiCitGSUxFU18ke1BOfSArPSAiJHtsaWJkaXJ9L3RjbCR7VkVSfSAke2xpYmRpcn0vdGNsOC42ICR7bGliZGlyfS90Y2w4IgorRklMRVNfJHtQTn0tZGV2ICs9ICIke2xpYmRpcn0vdGNsQ29uZmlnLnNoICR7bGliZGlyfS90Y2xvb0NvbmZpZy5zaCIKKworIyBpc24ndCBnZXR0aW5nIHBpY2tlZCB1cCBieSBzaGxpYnMgY29kZQorUkRFUEVORFNfJHtQTn0gKz0gInRjbC1saWIiCitSREVQRU5EU18ke1BOfV9jbGFzcy1uYXRpdmUgPSAiIgorUkRFUEVORFNfJHtQTn0tcHRlc3QgKz0gImxpYmdjYyIKKworQkJDTEFTU0VYVEVORCA9ICJuYXRpdmUiCisKK2RvX2NvbXBpbGVfcHRlc3QoKSB7CisJb2VfcnVubWFrZSB0Y2x0ZXN0Cit9CisKK2RvX2luc3RhbGxfcHRlc3QoKSB7CisJY3AgJHtCfS90Y2x0ZXN0ICR7RH0ke1BURVNUX1BBVEh9CisJY3AgLXIgJHtTfS8uLi9saWJyYXJ5ICR7RH0ke1BURVNUX1BBVEh9CisJY3AgLXIgJHtTfS8uLi90ZXN0cyAke0R9JHtQVEVTVF9QQVRIfQorfQorCisjIEZpeCBzb21lIHBhdGhzIHRoYXQgbWlnaHQgYmUgdXNlZCBieSBUY2wgZXh0ZW5zaW9ucworQklOQ09ORklHX0dMT0IgPSAiKkNvbmZpZy5zaCIKKworIyBGaXggdGhlIHBhdGggaW4gc3N0YXRlCitTU1RBVEVfU0NBTl9GSUxFUyArPSAiKkNvbmZpZy5zaCIKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvdW5mczMvdW5mczNfMC45LjIyLnI0OTcuYmIgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3VuZnMzL3VuZnMzXzAuOS4yMi5yNDk3LmJiCmluZGV4IGViYTExMzkuLmU3NTc0ZmIgMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvdW5mczMvdW5mczNfMC45LjIyLnI0OTcuYmIKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy91bmZzMy91bmZzM18wLjkuMjIucjQ5Ny5iYgpAQCAtOSw4ICs5LDggQEAKIENIRUNLX0RBVEUgPSAiRGVjIDEwLCAyMDE1IgogCiBERVBFTkRTID0gImZsZXgtbmF0aXZlIGJpc29uLW5hdGl2ZSBmbGV4IgotREVQRU5EU19hcHBlbmRfbGliYy1tdXNsID0gIiBsaWJ0aXJwYyAiCi1ERVBFTkRTX2FwcGVuZF9jbGFzcy1uYXRpdmVzZGsgKz0gImZsZXgtbmF0aXZlc2RrIgorREVQRU5EU19hcHBlbmRfbGliYy1tdXNsID0gIiBsaWJ0aXJwYyIKK0RFUEVORFNfYXBwZW5kX2NsYXNzLW5hdGl2ZXNkayA9ICIgZmxleC1uYXRpdmVzZGsiCiAKIE1PRF9QViA9ICI0OTciCiBTID0gIiR7V09SS0RJUn0vdHJ1bmsiCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3ZhbGEvdmFsYS5pbmMgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3ZhbGEvdmFsYS5pbmMKaW5kZXggMmE4ODc1Zi4uMzRjOWRiOSAxMDA2NDQKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy92YWxhL3ZhbGEuaW5jCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvdmFsYS92YWxhLmluYwpAQCAtMTEsNyArMTEsNyBAQAogTElDRU5TRSA9ICJMR1BMdjIuMSIKIExJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PWZiYzA5MzkwMTg1N2ZjZDExOGYwNjVmOTAwOTgyYzI0IgogCi1TSFJUX1ZFUiA9ICIke0BkLmdldFZhcignUFYnLDEpLnNwbGl0KCcuJylbMF19LiR7QGQuZ2V0VmFyKCdQVicsMSkuc3BsaXQoJy4nKVsxXX0iCitTSFJUX1ZFUiA9ICIke0BkLmdldFZhcignUFYnLCBUcnVlKS5zcGxpdCgnLicpWzBdfS4ke0BkLmdldFZhcignUFYnLCBUcnVlKS5zcGxpdCgnLicpWzFdfSIKIAogU1JDX1VSSSA9ICJodHRwOi8vZnRwLmdub21lLm9yZy9wdWIvR05PTUUvc291cmNlcy8ke0JQTn0vJHtTSFJUX1ZFUn0vJHtCUH0udGFyLnh6IgogaW5oZXJpdCBhdXRvdG9vbHMgcGtnY29uZmlnIHVwc3RyZWFtLXZlcnNpb24taXMtZXZlbgpAQCAtMzYsMTUgKzM2LDE0IEBACiAgICAgICAgIGluc3RhbGwgJHtCfS92YXBpZ2VuLXdyYXBwZXIgJHtEfSR7YmluZGlyfS8KIH0KIAorIyBQdXQgdmFwaWdlbiB3cmFwcGVyIGludG8gdGFyZ2V0IHN5c3Jvb3Qgc28gdGhhdCBpdCBjYW4gYmUgdXNlZCB3aGVuIGJ1aWxkaW5nCisjIHZhcGkgZmlsZXMuCitTWVNST09UX0RJUlNfYXBwZW5kX2NsYXNzLXRhcmdldCA9ICIgJHtiaW5kaXJ9IgogCi1TWVNST09UX1BSRVBST0NFU1NfRlVOQ1NfYXBwZW5kX2NsYXNzLXRhcmdldCArPSAidmFwaWdlbl9zeXNyb290X3ByZXByb2Nlc3MiCi0KK1NZU1JPT1RfUFJFUFJPQ0VTU19GVU5DU19hcHBlbmRfY2xhc3MtdGFyZ2V0ID0gIiB2YXBpZ2VuX3N5c3Jvb3RfcHJlcHJvY2VzcyIKIHZhcGlnZW5fc3lzcm9vdF9wcmVwcm9jZXNzKCkgewotICAgICAgICAjIFB1dCB2YXBpZ2VuIHdyYXBwZXIgaW50byB0YXJnZXQgc3lzcm9vdCBzbyB0aGF0IGl0IGNhbiBiZSB1c2VkIHdoZW4gYnVpbGRpbmcgdmFwaSBmaWxlcy4KLSAgICAgICAgc3lzcm9vdF9zdGFnZV9kaXIgJHtEfSR7YmluZGlyfSAke1NZU1JPT1RfREVTVERJUn0ke2JpbmRpcn0KLQotICAgICAgICAjIEFsc28sIHR3ZWFrIHRoZSB2YXBpZ2VuIG5hbWUgaW4gdmFwaWdlbiBwa2djb25maWcgZmlsZSwgc28gdGhhdCBpdCBwaWNrcyB1cCBvdXIKLSAgICAgICAgIyB3cmFwcGVyLgorICAgICAgICAjIFR3ZWFrIHRoZSB2YXBpZ2VuIG5hbWUgaW4gdGhlIHZhcGlnZW4gcGtnY29uZmlnIGZpbGUsIHNvIHRoYXQgaXQgcGlja3MKKyAgICAgICAgIyB1cCBvdXIgd3JhcHBlci4KICAgICAgICAgc2VkIC1pIFwKICAgICAgICAgICAgLWUgInN8dmFwaWdlbj0uKnx2YXBpZ2VuPSR7YmluZGlyfS92YXBpZ2VuLXdyYXBwZXJ8IiBcCiAgICAgICAgICAgICR7U1lTUk9PVF9ERVNURElSfSR7ZGF0YWRpcn0vcGtnY29uZmlnL3ZhcGlnZW4tJHtTSFJUX1ZFUn0ucGMKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvdmFsYS92YWxhXzAuMzAuMS5iYiBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvdmFsYS92YWxhXzAuMzAuMS5iYgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjM5NGFmYy4uMDAwMDAwMAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3ZhbGEvdmFsYV8wLjMwLjEuYmIKKysrIC9kZXYvbnVsbApAQCAtMSw4ICswLDAgQEAKLXJlcXVpcmUgJHtCUE59LmluYwotCi1TUkNfVVJJICs9ICIgZmlsZTovLzAwMDEtZ2l0LXZlcnNpb24tZ2VuLWRvbi10LWFwcGVuZC1kaXJ0eS1pZi13ZS1yZS1ub3QtaW4tZy5wYXRjaCBcCi0gICAgICAgICAgICAgZmlsZTovLzAwMDEtdmFwaWdlbi5tNC11c2UtUEtHX0NPTkZJR19TWVNST09UX0RJUi5wYXRjaCBcCi0iCi0KLVNSQ19VUklbbWQ1c3VtXSA9ICJjYzJlYjIzODRmYzEwMDM4YjY0Mzc1M2Q3MzRhNWE1MSIKLVNSQ19VUklbc2hhMjU2c3VtXSA9ICIyM2FkZDc4ZTVjNmE1ZTZkZjAxOWQ0YTg4NWM5Yzc5ODE0YzllMGI5NTc1MTllYzhhNGY0ZDgyNmM0ZTVkZjJjIgpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy92YWxhL3ZhbGFfMC4zMi4xLmJiIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy92YWxhL3ZhbGFfMC4zMi4xLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIzNDA4NmUKLS0tIC9kZXYvbnVsbAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3ZhbGEvdmFsYV8wLjMyLjEuYmIKQEAgLTAsMCArMSw4IEBACityZXF1aXJlICR7QlBOfS5pbmMKKworU1JDX1VSSSArPSAiIGZpbGU6Ly8wMDAxLWdpdC12ZXJzaW9uLWdlbi1kb24tdC1hcHBlbmQtZGlydHktaWYtd2UtcmUtbm90LWluLWcucGF0Y2ggXAorICAgICAgICAgICAgIGZpbGU6Ly8wMDAxLXZhcGlnZW4ubTQtdXNlLVBLR19DT05GSUdfU1lTUk9PVF9ESVIucGF0Y2ggXAorIgorCitTUkNfVVJJW21kNXN1bV0gPSAiNzU1ODgxNzcwYmZmYWMwMjBiNWVhNWY2MjVmYmU1MjgiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiZGQwZDQ3ZTU0OGEzNGNmYjFlNGIwNDE0OWFjZDA4MmE4NjQxNGM0OTA1N2ZmYjc5OTAyZWI5YTUwOGExNjFhOSIKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvdmFsZ3JpbmQvdmFsZ3JpbmQvZ2NjNS1wb3J0LnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy92YWxncmluZC92YWxncmluZC9nY2M1LXBvcnQucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzZiYzgyMQotLS0gL2Rldi9udWxsCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvdmFsZ3JpbmQvdmFsZ3JpbmQvZ2NjNS1wb3J0LnBhdGNoCkBAIC0wLDAgKzEsNjQgQEAKK2JhY2twb3J0IGZpeCBmcm9tIHVwc3RyZWFtIHRvIGZpeCBidWlsZCBlcnJvcnMgd2l0aCBnY2MgNgorCitodHRwOi8vdmFsZ3JpbmQuMTA5MDgubjcubmFiYmxlLmNvbS9WYWxncmluZC1yMTU3NzMtaW4tdHJ1bmstY29uZmlndXJlLWFjLWRyZC10ZXN0cy1zdGQtdGhyZWFkLWNwcC1kcmQtdGVzdHMtc3RkLXRocmVhZDItY3BwLXRkNTYxMDkuaHRtbAorCisuLi8uLi8uLi92YWxncmluZC0zLjExLjAvZHJkL3Rlc3RzL3N0ZF90aHJlYWQuY3BwOjMwOjM6IGVycm9yOiAnX0ltcGxfYmFzZScgaXMgbm90IGEgbWVtYmVyIG9mICdzdGQ6OnRocmVhZCcKKyAgIHN0ZDo6dGhyZWFkOjpfSW1wbF9iYXNlKiBfX3QgPSBzdGF0aWNfY2FzdDxzdGQ6OnRocmVhZDo6X0ltcGxfYmFzZSo+KF9fcCk7CisgICBefn4KKy4uLy4uLy4uL3ZhbGdyaW5kLTMuMTEuMC9kcmQvdGVzdHMvc3RkX3RocmVhZC5jcHA6MzA6Mjg6IGVycm9yOiAnX190JyB3YXMgbm90IGRlY2xhcmVkIGluIHRoaXMgc2NvcGUKKyAgIHN0ZDo6dGhyZWFkOjpfSW1wbF9iYXNlKiBfX3QgPSBzdGF0aWNfY2FzdDxzdGQ6OnRocmVhZDo6X0ltcGxfYmFzZSo+KF9fcCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgXn5+CisuLi8uLi8uLi92YWxncmluZC0zLjExLjAvZHJkL3Rlc3RzL3N0ZF90aHJlYWQuY3BwOjMwOjU5OiBlcnJvcjogJ19JbXBsX2Jhc2UnIGluICdjbGFzcyBzdGQ6OnRocmVhZCcgZG9lcyBub3QgbmFtZSBhIHR5cGUKKyAgIHN0ZDo6dGhyZWFkOjpfSW1wbF9iYXNlKiBfX3QgPSBzdGF0aWNfY2FzdDxzdGQ6OnRocmVhZDo6X0ltcGxfYmFzZSo+KF9fcCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF5+fn5+fn5+fn4KKworU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KK1Vwc3RyZWFtLVN0YXR1czogQmFja3BvcnQKKworSW5kZXg6IGNvbmZpZ3VyZS5hYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGEvY29uZmlndXJlLmFjCShyZXZpc2lvbiAxNTc3MikKKysrKyBiL2NvbmZpZ3VyZS5hYwkocmV2aXNpb24gMTU3NzMpCitAQCAtMTYwLDcgKzE2MCw3IEBACisgICAgICBpY2MtMVtbMy05XV0uKikKKyAJQUNfTVNHX1JFU1VMVChbb2sgKElDQyB2ZXJzaW9uICR7Z2NjX3ZlcnNpb259KV0pCisgCTs7CistICAgICBub3RjbGFuZy1bWzMtOV1dLip8bm90Y2xhbmctW1sxLTldWzAtOV1dKikKKysgICAgIG5vdGNsYW5nLVtbMy05XV18bm90Y2xhbmctW1szLTldXS4qfG5vdGNsYW5nLVtbMS05XVswLTldXSopCisgCUFDX01TR19SRVNVTFQoW29rICgke2djY192ZXJzaW9ufSldKQorIAk7OworICAgICAgY2xhbmctMi45fGNsYW5nLVtbMy05XV0uKnxjbGFuZy1bWzEtOV1bMC05XV0qKQorSW5kZXg6IGRyZC90ZXN0cy9zdGRfdGhyZWFkMi5jcHAKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBhL2RyZC90ZXN0cy9zdGRfdGhyZWFkMi5jcHAJKHJldmlzaW9uIDE1NzcyKQorKysrIGIvZHJkL3Rlc3RzL3N0ZF90aHJlYWQyLmNwcAkocmV2aXNpb24gMTU3NzMpCitAQCAtMjYsNiArMjYsNyBAQAorICAgcmV0dXJuIDA7CisgfQorIAorKyNpZiBkZWZpbmVkKF9fR05VQ19fKSAmJiBfX0dOVUNfXyAtMCA8IDYKKyAvLworIC8vIEZyb20gbGlic3RkYysrLXYzL3NyYy9jKysxMS90aHJlYWQuY2MKKyAvLworQEAgLTcwLDMgKzcxLDQgQEAKKyAgICAgfQorICAgfQorIH0KKysjZW5kaWYKK0luZGV4OiBkcmQvdGVzdHMvc3RkX3RocmVhZC5jcHAKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBhL2RyZC90ZXN0cy9zdGRfdGhyZWFkLmNwcAkocmV2aXNpb24gMTU3NzIpCisrKysgYi9kcmQvdGVzdHMvc3RkX3RocmVhZC5jcHAJKHJldmlzaW9uIDE1NzczKQorQEAgLTIxLDYgKzIxLDcgQEAKKyAgIHJldHVybiAwOworIH0KKyAKKysjaWYgZGVmaW5lZChfX0dOVUNfXykgJiYgX19HTlVDX18gLTAgPCA2CisgLy8KKyAvLyBGcm9tIGxpYnN0ZGMrKy12My9zcmMvYysrMTEvdGhyZWFkLmNjCisgLy8KK0BAIC02NSwzICs2Niw0IEBACisgICAgIH0KKyAgIH0KKyB9CisrI2VuZGlmCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3ZhbGdyaW5kL3ZhbGdyaW5kXzMuMTEuMC5iYiBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvdmFsZ3JpbmQvdmFsZ3JpbmRfMy4xMS4wLmJiCmluZGV4IDUxYzg4YmYuLjQyZmQyN2YgMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvdmFsZ3JpbmQvdmFsZ3JpbmRfMy4xMS4wLmJiCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvdmFsZ3JpbmQvdmFsZ3JpbmRfMy4xMS4wLmJiCkBAIC0yMyw2ICsyMyw3IEBACiAgICAgICAgICAgIGZpbGU6Ly8wMDAxLVJlbW92ZS10ZXN0cy10aGF0LWZhaWwtdG8tYnVpbGQtb24tc29tZS1QUEMzMi1jb25maWcucGF0Y2ggXAogICAgICAgICAgICBmaWxlOi8vdXNlLWFwcHJvcHJpYXRlLW1hcmNoLW1jcHUtbWZwdS1mb3ItQVJNLXRlc3QtYXBwcy5wYXRjaCBcCiAgICAgICAgICAgIGZpbGU6Ly9hdm9pZC1uZW9uLWZvci10YXJnZXRzLXdoaWNoLWRvbi10LXN1cHBvcnQtaXQucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vZ2NjNS1wb3J0LnBhdGNoIFwKICIKIFNSQ19VUklfYXBwZW5kX2xpYmMtbXVzbCA9ICJcCiAgICAgICAgICAgIGZpbGU6Ly8wMDAxLWZpeC1idWlsZC1mb3ItbXVzbC10YXJnZXRzLnBhdGNoIFwKQEAgLTM3LDYgKzM4LDEwIEBACiBDT01QQVRJQkxFX0hPU1RfYXJtdjUgPSAnbnVsbCcKIENPTVBBVElCTEVfSE9TVF9hcm12NiA9ICdudWxsJwogCisjIHZhbGdyaW5kIGRvZXNuJ3QgbGlrZSBtaXBzIHNvZnQgZmxvYXQKK0NPTVBBVElCTEVfSE9TVF9taXBzID0gIiR7QGJiLnV0aWxzLmNvbnRhaW5zKCJUQVJHRVRfRlBVIiwgInNvZnQiLCAibnVsbCIsICIuKi1saW51eCIsIGQpfSIKK0NPTVBBVElCTEVfSE9TVF9taXBzZWwgPSAiJHtAYmIudXRpbHMuY29udGFpbnMoIlRBUkdFVF9GUFUiLCAic29mdCIsICJudWxsIiwgIi4qLWxpbnV4IiwgZCl9IgorCiBpbmhlcml0IGF1dG90b29scyBwdGVzdAogCiBFWFRSQV9PRUNPTkYgPSAiLS1lbmFibGUtdGxzIC0td2l0aG91dC1tcGljYyIKQEAgLTY4LDkgKzczLDkgQEAKIFJERVBFTkRTXyR7UE59LXB0ZXN0ICs9ICIgc2VkIHBlcmwgcGVybC1tb2R1bGUtZmlsZS1nbG9iIgogUkRFUEVORFNfJHtQTn0tcHRlc3RfYXBwZW5kX2xpYmMtZ2xpYmMgPSAiIGdsaWJjLXV0aWxzIgogCi0jIE9uZSBvZiB0aGUgdGVzdHMgY29udGFpbnMgYSBib2d1cyBpbnRlcnByZXRlciBwYXRoIG9uIHB1cnBvc2UsIGFuZCBRQQotIyBjaGVjayBjb21wbGFpbnMgYWJvdXQgaXQKLUlOU0FORV9TS0lQXyR7UE59LXB0ZXN0ICs9ICJmaWxlLXJkZXBzIgorIyBPbmUgb2YgdGhlIHRlc3RzIGNvbnRhaW5zIGEgYm9ndXMgaW50ZXJwcmV0ZXIgcGF0aCBvbiBwdXJwb3NlLgorIyBTa2lwIGZpbGUgZGVwZW5kZW5jeSBjaGVjaworU0tJUF9GSUxFREVQU18ke1BOfS1wdGVzdCA9ICcxJwogCiBkb19jb21waWxlX3B0ZXN0KCkgewogICAgIG9lX3J1bm1ha2UgY2hlY2sKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMveG1sdG8veG1sdG9fMC4wLjI4LmJiIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy94bWx0by94bWx0b18wLjAuMjguYmIKaW5kZXggNzFmODczZi4uYWFhZWI2ZSAxMDA2NDQKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy94bWx0by94bWx0b18wLjAuMjguYmIKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy94bWx0by94bWx0b18wLjAuMjguYmIKQEAgLTEzLDggKzEzLDkgQEAKIFNSQ19VUklbc2hhMjU2c3VtXSA9ICIyZjk4NmI3YzlhMGU5YWM2NzI4MTQ3NjY4ZTc3NmQ0MDU0NjUyODRlMTNjNzRkNDE0NmM5Y2JjNTFmZDhhYWQzIgogCiBpbmhlcml0IGF1dG90b29scworUkRFUEVORFNfY2xhc3MtbmF0aXZlID0gImxpYnhzbHQtbmF0aXZlIgogCi0jIHhtbHRvIG5lZWRzIGdldG9wdC94bWxsaW50L3hzbHRwcm9jL2Jhc2ggYXQgcnVudGltZQorIyB4bWx0byBuZWVkcyBnZXRvcHQveG1sbGludC94c2x0cHJvYy9iYXNoL3RhaWwgYXQgcnVudGltZQogUkRFUEVORFNfJHtQTn0gPSAiZG9jYm9vay14bWwtZHRkNCBcCiAgICAgICAgICAgICAgICAgICBkb2Nib29rLXhzbC1zdHlsZXNoZWV0cyBcCiAgICAgICAgICAgICAgICAgICB1dGlsLWxpbnV4IFwKQEAgLTIzLDcgKzI0LDkgQEAKICIKIFJERVBFTkRTXyR7UE59X2FwcGVuZF9jbGFzcy10YXJnZXQgPSAiIFwKICAgICAgICAgICAgICAgICAgIGxpYnhzbHQtYmluIFwKKyAgICAgICAgICAgICAgICAgIGNvcmV1dGlscyBcCiAiCitDQUNIRURfQ09ORklHVVJFVkFSUyArPSAiYWNfY3ZfcGF0aF9UQUlMPSR7YmluZGlyfS90YWlsIgogCiBCQkNMQVNTRVhURU5EID0gIm5hdGl2ZSIKIApkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9hc2NpaWRvYy9hc2NpaWRvY184LjYuOS5iYiBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvYXNjaWlkb2MvYXNjaWlkb2NfOC42LjkuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWNkMTQ1NAotLS0gL2Rldi9udWxsCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvYXNjaWlkb2MvYXNjaWlkb2NfOC42LjkuYmIKQEAgLTAsMCArMSwyNCBAQAorU1VNTUFSWSA9ICJUb29sIGZvciBjcmVhdGluZyBIVE1MLCBQREYsIEVQVUIsIG1hbiBwYWdlcyIKK0RFU0NSSVBUSU9OID0gIkFzY2lpRG9jIGlzIGEgdGV4dCBkb2N1bWVudCBmb3JtYXQgZm9yIHdyaXRpbmcgc2hvcnQgZG9jdW1lbnRzLCBcCithcnRpY2xlcywgYm9va3MgYW5kIFVOSVggbWFuIHBhZ2VzLiIKKworSE9NRVBBR0UgPSAiaHR0cDovL2FzY2lpZG9jLm9yZy8iCisKK0xJQ0VOU0UgPSAiR1BMdjIiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT04Y2E0M2NiYzg0MmMyMzM2ZTgzNTkyNmMyMTY2YzI4YiBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9DT1BZUklHSFQ7bWQ1PTAyOWFkNTQyOGJhNWVmYTIwMTc2YjM5NjIyMmQ0MDY5IgorCitTUkNfVVJJID0gImh0dHA6Ly9kb3dubG9hZHMuc291cmNlZm9yZ2UubmV0L3Byb2plY3QvJHtCUE59LyR7QlBOfS8ke1BWfS8ke0JQfS50YXIuZ3oiCitTUkNfVVJJW21kNXN1bV0gPSAiYzU5MDE4ZjEwNWJlOGQwMjI3MTRiODI2YjBiZTEzMGEiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiNzhkYjlkMDU2N2M4YWI2NTcwYTZlZmY3ZmZkZjg0ZWFkZDkxZjJkZmMwYTkyYTJkMDEwNWQzMjNjYWI0ZTFmMCIKKworVVBTVFJFQU1fQ0hFQ0tfVVJJID0gImh0dHBzOi8vc291cmNlZm9yZ2UubmV0L3Byb2plY3RzL2FzY2lpZG9jL2ZpbGVzLyIKKworaW5oZXJpdCBkaXN0dXRpbHMgYXV0b3Rvb2xzLWJyb2tlbnNlcAorCitleHBvcnQgREVTVERJUiA9ICIke0R9IgorREVQRU5EU19jbGFzcy1uYXRpdmUgPSAiZG9jYm9vay14bWwtZHRkNC1uYXRpdmUiCitSREVQRU5EU18ke1BOfSArPSAicHl0aG9uIiAKK0JCQ0xBU1NFWFRFTkQgPSAibmF0aXZlIgorCitDTEVBTkJST0tFTiA9ICIxIgpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9hdC9hdC9jb25maWd1cmUtZml4LXdpdGgtd2l0aG91dC1zZWxpbnV4LnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9hdC9hdC9jb25maWd1cmUtZml4LXdpdGgtd2l0aG91dC1zZWxpbnV4LnBhdGNoCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzODlhZjFlLi4wMDAwMDAwCi0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvYXQvYXQvY29uZmlndXJlLWZpeC13aXRoLXdpdGhvdXQtc2VsaW51eC5wYXRjaAorKysgL2Rldi9udWxsCkBAIC0xLDUzICswLDAgQEAKLUZyb20gYzAyMzU0YWY3ZjNkOTQyNmRhMzE1MDNhYmZhZTcwOTUyYzY5OWE5ZCBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKLUZyb206IFdlbnpvbmcgRmFuIDx3ZW56b25nLmZhbkB3aW5kcml2ZXIuY29tPgotRGF0ZTogRnJpLCAxOCBNYXIgMjAxNiAwMzoyMzoxMSAtMDQwMAotU3ViamVjdDogW1BBVENIXSBjb25maWd1cmU6IGZpeCB3aXRoL3dpdGhvdXQgc2VsaW51eAotCi1Qcm9ibGVtOgotd2l0aG91dC1zZWxpbnV4IGRvZXNuJ3Qgd29yayBzaW5jZSBXSVRIX1NFTElOVVggaXMgYWx3YXlzIGJlIGRlZmluZWQgbm8KLW1hdHRlciB3aGljaCBvcHRpb24gaXMgZ2l2ZW46IHdpdGgtc2VsaW51eCwgd2l0aG91dC1zZWxpbnV4LgotCi1GaXg6Ci1EaXNhYmxlIHNlbGludXggc3VwcG9ydCBpZiB3aXRob3V0LXNlbGludXggaXMgZ2l2ZW47IG90aGVyd2lzZSBjaGVjawotbGlic2VsaW51eCB0byBkZXRlcm1pbmUgaWYgc2VsaW51eCBzdXBwb3J0IHNob3VsZCBiZSBlbmFibGVkLgotCi1VcHN0cmVhbS1TdGF0dXM6IFN1Ym1pdHRlZCBbYXRAcGFja2FnZXMuZGViaWFuLm9yZ10KLQotU2lnbmVkLW9mZi1ieTogV2Vuem9uZyBGYW4gPHdlbnpvbmcuZmFuQHdpbmRyaXZlci5jb20+Ci0tLS0KLSBjb25maWd1cmUuYWMgfCAxOSArKysrKysrKysrKysrKystLS0tCi0gMSBmaWxlIGNoYW5nZWQsIDE1IGluc2VydGlvbnMoKyksIDQgZGVsZXRpb25zKC0pCi0KLWRpZmYgLS1naXQgYS9jb25maWd1cmUuYWMgYi9jb25maWd1cmUuYWMKLWluZGV4IDVhNDM0MTkuLjhjOWRlNjIgMTAwNjQ0Ci0tLS0gYS9jb25maWd1cmUuYWMKLSsrKyBiL2NvbmZpZ3VyZS5hYwotQEAgLTI0MCwxMCArMjQwLDIxIEBAIEFDX0FSR19XSVRIKGRhZW1vbl91c2VybmFtZSwKLSBBQ19TVUJTVChEQUVNT05fVVNFUk5BTUUpCi0gCi0gQUNfQVJHX1dJVEgoc2VsaW51eCwKLS1bIC0td2l0aC1zZWxpbnV4ICAgICAgIERlZmluZSB0byBydW4gd2l0aCBzZWxpbnV4XSwKLS1BQ19ERUZJTkUoV0lUSF9TRUxJTlVYLCAxLCBbRGVmaW5lIGlmIHlvdSBhcmUgYnVpbGRpbmcgd2l0aF9zZWxpbnV4XSksCi0tKQotLUFDX0NIRUNLX0xJQihzZWxpbnV4LCBpc19zZWxpbnV4X2VuYWJsZWQsIFNFTElOVVhMSUI9LWxzZWxpbnV4KQotK1sgLS13aXRoLXNlbGludXggICAgICAgRGVmaW5lIHRvIHJ1biB3aXRoIHNlbGludXggKGRlZmF1bHQ9Y2hlY2spXSwKLStbXSwKLStbd2l0aF9zZWxpbnV4PWNoZWNrXSkKLSsKLStpZiB0ZXN0ICJ4JHdpdGhfc2VsaW51eCIgIT0geG5vOyB0aGVuCi0rICBBQ19DSEVDS19MSUIoW3NlbGludXhdLCBbaXNfc2VsaW51eF9lbmFibGVkXSwKLSsgICAgW1NFTElOVVhMSUI9LWxzZWxpbnV4Ci0rICAgICBBQ19ERUZJTkUoV0lUSF9TRUxJTlVYLCAxLCBbRGVmaW5lIGlmIHlvdSBhcmUgYnVpbGRpbmcgd2l0aF9zZWxpbnV4XSkKLSsgICAgXSwKLSsgICAgW2lmIHRlc3QgIngkd2l0aF9zZWxpbnV4IiAhPSB4Y2hlY2s7IHRoZW4KLSsgICAgICAgQUNfTVNHX0ZBSUxVUkUoWy0td2l0aC1zZWxpbnV4IGlzIGdpdmVuLCBidXQgdGVzdCBmb3Igc2VsaW51eCBmYWlsZWRdKQotKyAgICAgZmkKLSsgICAgXQotKyAgKQotK2ZpCi0gQUNfU1VCU1QoU0VMSU5VWExJQikKLSBBQ19TVUJTVChXSVRIX1NFTElOVVgpCi0gCi0tLSAKLTEuOS4xCi0KZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvYXQvYXRfMy4xLjE4LmJiIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9hdC9hdF8zLjEuMTguYmIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDkzMDQ0ZjUuLjAwMDAwMDAKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9hdC9hdF8zLjEuMTguYmIKKysrIC9kZXYvbnVsbApAQCAtMSw3MCArMCwwIEBACi1TVU1NQVJZID0gIkRlbGF5ZWQgam9iIGV4ZWN1dGlvbiBhbmQgYmF0Y2ggcHJvY2Vzc2luZyIKLURFU0NSSVBUSU9OID0gIkF0IGFsbG93cyBmb3IgY29tbWFuZHMgdG8gYmUgcnVuIGF0IGEgcGFydGljdWxhciB0aW1lLiAgQmF0Y2ggd2lsbCBleGVjdXRlIGNvbW1hbmRzIHdoZW4gXAotdGhlIHN5c3RlbSBsb2FkIGxldmVscyBkcm9wIHRvIGEgcGFydGljdWxhciBsZXZlbC4iCi1TRUNUSU9OID0gImJhc2UiCi1MSUNFTlNFID0gIkdQTHYyKyIKLUxJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PTQzMjVhZmQzOTZmZWJjYjY1OWMzNmI0OTUzMzEzNWQ0IgotREVQRU5EUyA9ICJmbGV4IGZsZXgtbmF0aXZlIFwKLSAgICAgICAgICAgJHtAYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsICdwYW0nLCAnbGlicGFtJywgJycsIGQpfSIKLQotUkRFUEVORFNfJHtQTn0gPSAiJHtAYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsICdwYW0nLCAnJHtQQU1fREVQU30nLCAnJywgZCl9IFwKLSIKLQotUEFNX0RFUFMgPSAibGlicGFtIGxpYnBhbS1ydW50aW1lIHBhbS1wbHVnaW4tZW52IHBhbS1wbHVnaW4tbGltaXRzIgotCi1SQ09ORkxJQ1RTXyR7UE59ID0gImF0ZCIKLVJSRVBMQUNFU18ke1BOfSA9ICJhdGQiCi0KLVNSQ19VUkkgPSAiJHtERUJJQU5fTUlSUk9SfS9tYWluL2EvYXQvYXRfJHtQVn0ub3JpZy50YXIuZ3o7c3ViZGlyPSR7QlB9IFwKLSAgICBmaWxlOi8vZml4X3BhcmFsbGVsX2J1aWxkX2Vycm9yLnBhdGNoIFwKLSAgICBmaWxlOi8vcG9zaXh0bS5jIFwKLSAgICBmaWxlOi8vcG9zaXh0bS5oIFwKLSAgICBmaWxlOi8vZmlsZV9yZXBsYWNlbWVudF93aXRoX2dwbHYyLnBhdGNoIFwKLSAgICBmaWxlOi8vYXRkLmluaXQgXAotICAgIGZpbGU6Ly9hdGQuc2VydmljZSBcCi0gICAgJHtAYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsICdwYW0nLCAnJHtQQU1fU1JDX1VSSX0nLCAnJywgZCl9IFwKLSAgICBmaWxlOi8vbWFrZWZpbGUtZml4LXBhcmFsbGVsLnBhdGNoIFwKLSAgICBmaWxlOi8vMDAwMS1yZW1vdmUtZ2xpYmMtYXNzdW1wdGlvbi5wYXRjaCBcCi0gICAgZmlsZTovL2NvbmZpZ3VyZS1maXgtd2l0aC13aXRob3V0LXNlbGludXgucGF0Y2ggXAotICAgICIKLQotUEFNX1NSQ19VUkkgPSAiZmlsZTovL3BhbS5jb25mLnBhdGNoIFwKLSAgICAgICAgICAgICAgIGZpbGU6Ly9jb25maWd1cmUtYWRkLWVuYWJsZS1wYW0ucGF0Y2giCi0KLVNSQ19VUklbbWQ1c3VtXSA9ICJmNjdhN2FhYjU1N2NkNWI0YTEzMTEwNzlhMDhhY2ViZSIKLVNSQ19VUklbc2hhMjU2c3VtXSA9ICJkYmQ1YzhjYjhlZGQ1M2VmNDY3MzYzYzNhZjAzOTFjMDg3NjlmMWRiYmQ0ZDUwMDJjNTlhNGNkNGNhYzExZDUyIgotCi1FWFRSQV9PRUNPTkYgKz0gImFjX2N2X3BhdGhfU0VORE1BSUw9L2Jpbi90cnVlIFwKLSAgICAgICAgICAgICAgICAgLS13aXRoLWRhZW1vbl91c2VybmFtZT1yb290IFwKLSAgICAgICAgICAgICAgICAgLS13aXRoLWRhZW1vbl9ncm91cG5hbWU9cm9vdCBcCi0gICAgICAgICAgICAgICAgIC0td2l0aC1qb2JkaXI9L3Zhci9zcG9vbC9hdC9qb2JzIFwKLSAgICAgICAgICAgICAgICAgLS13aXRoLWF0c3Bvb2w9L3Zhci9zcG9vbC9hdC9zcG9vbCBcCi0gICAgICAgICAgICAgICAgIGFjX2N2X2hlYWRlcl9zZWN1cml0eV9wYW1fYXBwbF9oPSR7QGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCAncGFtJywgJ3llcycsICdubycsIGQpfSAiCi0KLWluaGVyaXQgYXV0b3Rvb2xzLWJyb2tlbnNlcCBzeXN0ZW1kIHVwZGF0ZS1yYy5kCi0KLUlOSVRTQ1JJUFRfTkFNRSA9ICJhdGQiCi1JTklUU0NSSVBUX1BBUkFNUyA9ICJkZWZhdWx0cyIKLQotU1lTVEVNRF9TRVJWSUNFXyR7UE59ID0gImF0ZC5zZXJ2aWNlIgotCi1jb3B5X3NvdXJjZXMoKSB7Ci0JY3AgLWYgJHtXT1JLRElSfS9wb3NpeHRtLltjaF0gJHtTfQotfQotZG9fcGF0Y2hbcG9zdGZ1bmNzXSArPSAiY29weV9zb3VyY2VzIgotCi1kb19pbnN0YWxsICgpIHsKLQlvZV9ydW5tYWtlIC1lICJJUk9PVD0ke0R9IiBpbnN0YWxsCi0KLQlpbnN0YWxsIC1kICR7RH0ke3N5c2NvbmZkaXJ9L2luaXQuZAotCWluc3RhbGwgLW0gMDc1NSAgICAke1dPUktESVJ9L2F0ZC5pbml0CQkke0R9JHtzeXNjb25mZGlyfS9pbml0LmQvYXRkCi0KLQkjIGluc3RhbGwgc3lzdGVtZCB1bml0IGZpbGVzCi0JaW5zdGFsbCAtZCAke0R9JHtzeXN0ZW1kX3VuaXRkaXJ9L3N5c3RlbQotCWluc3RhbGwgLW0gMDY0NCAke1dPUktESVJ9L2F0ZC5zZXJ2aWNlICR7RH0ke3N5c3RlbWRfdW5pdGRpcn0vc3lzdGVtCi0Jc2VkIC1pIC1lICdzLEBTQklORElSQCwke3NiaW5kaXJ9LGcnICR7RH0ke3N5c3RlbWRfdW5pdGRpcn0vc3lzdGVtL2F0ZC5zZXJ2aWNlCi0KLQlpZiBbICIke0BiYi51dGlscy5jb250YWlucygnRElTVFJPX0ZFQVRVUkVTJywgJ3BhbScsICdwYW0nLCAnJywgZCl9IiA9ICJwYW0iIF07IHRoZW4KLQkJaW5zdGFsbCAtRCAtbSAwNjQ0ICR7V09SS0RJUn0vJHtCUH0vcGFtLmNvbmYgJHtEfSR7c3lzY29uZmRpcn0vcGFtLmQvYXRkCi0JZmkKLX0KZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvYXQvYXRfMy4xLjIwLmJiIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9hdC9hdF8zLjEuMjAuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODU0NTliNgotLS0gL2Rldi9udWxsCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvYXQvYXRfMy4xLjIwLmJiCkBAIC0wLDAgKzEsNzEgQEAKK1NVTU1BUlkgPSAiRGVsYXllZCBqb2IgZXhlY3V0aW9uIGFuZCBiYXRjaCBwcm9jZXNzaW5nIgorREVTQ1JJUFRJT04gPSAiQXQgYWxsb3dzIGZvciBjb21tYW5kcyB0byBiZSBydW4gYXQgYSBwYXJ0aWN1bGFyIHRpbWUuICBCYXRjaCB3aWxsIGV4ZWN1dGUgY29tbWFuZHMgd2hlbiBcCit0aGUgc3lzdGVtIGxvYWQgbGV2ZWxzIGRyb3AgdG8gYSBwYXJ0aWN1bGFyIGxldmVsLiIKK1NFQ1RJT04gPSAiYmFzZSIKK0xJQ0VOU0UgPSAiR1BMdjIrIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9NDMyNWFmZDM5NmZlYmNiNjU5YzM2YjQ5NTMzMTM1ZDQiCitERVBFTkRTID0gImZsZXggZmxleC1uYXRpdmUgXAorICAgICAgICAgICAke0BiYi51dGlscy5jb250YWlucygnRElTVFJPX0ZFQVRVUkVTJywgJ3BhbScsICdsaWJwYW0nLCAnJywgZCl9IgorCitSREVQRU5EU18ke1BOfSA9ICIke0BiYi51dGlscy5jb250YWlucygnRElTVFJPX0ZFQVRVUkVTJywgJ3BhbScsICcke1BBTV9ERVBTfScsICcnLCBkKX0gXAorIgorCitQQU1fREVQUyA9ICJsaWJwYW0gbGlicGFtLXJ1bnRpbWUgcGFtLXBsdWdpbi1lbnYgcGFtLXBsdWdpbi1saW1pdHMiCisKK1JDT05GTElDVFNfJHtQTn0gPSAiYXRkIgorUlJFUExBQ0VTXyR7UE59ID0gImF0ZCIKKworU1JDX1VSSSA9ICJodHRwOi8vc25hcHNob3QuZGViaWFuLm9yZy9hcmNoaXZlL2RlYmlhbi8yMDE2MDcyOFQwNDM0NDNaL3Bvb2wvbWFpbi9hLyR7QlBOfS8ke0JQTn1fJHtQVn0ub3JpZy50YXIuZ3ogXAorICAgIGZpbGU6Ly9maXhfcGFyYWxsZWxfYnVpbGRfZXJyb3IucGF0Y2ggXAorICAgIGZpbGU6Ly9wb3NpeHRtLmMgXAorICAgIGZpbGU6Ly9wb3NpeHRtLmggXAorICAgIGZpbGU6Ly9maWxlX3JlcGxhY2VtZW50X3dpdGhfZ3BsdjIucGF0Y2ggXAorICAgIGZpbGU6Ly9hdGQuaW5pdCBcCisgICAgZmlsZTovL2F0ZC5zZXJ2aWNlIFwKKyAgICAke0BiYi51dGlscy5jb250YWlucygnRElTVFJPX0ZFQVRVUkVTJywgJ3BhbScsICcke1BBTV9TUkNfVVJJfScsICcnLCBkKX0gXAorICAgIGZpbGU6Ly9tYWtlZmlsZS1maXgtcGFyYWxsZWwucGF0Y2ggXAorICAgIGZpbGU6Ly8wMDAxLXJlbW92ZS1nbGliYy1hc3N1bXB0aW9uLnBhdGNoIFwKKyAgICAiCisKK1BBTV9TUkNfVVJJID0gImZpbGU6Ly9wYW0uY29uZi5wYXRjaCBcCisgICAgICAgICAgICAgICBmaWxlOi8vY29uZmlndXJlLWFkZC1lbmFibGUtcGFtLnBhdGNoIgorCitTUkNfVVJJW21kNXN1bV0gPSAiZTdiZDdiNzg1YjJjYmIxN2UxMzNkNmJkYzBmYjA5OWUiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiMDg3MTkyM2NhYjczMDUwYjk4YWNlMDIwNjY0ZWIyZGRjMWU2NjllNDE2NmI1YWJiNjRkODY0ZDAyZmNlZmFiOSIKKworVVBTVFJFQU1fQ0hFQ0tfVVJJID0gIiR7REVCSUFOX01JUlJPUn0vbWFpbi9hL2F0LyIKKworRVhUUkFfT0VDT05GICs9ICJhY19jdl9wYXRoX1NFTkRNQUlMPS9iaW4vdHJ1ZSBcCisgICAgICAgICAgICAgICAgIC0td2l0aC1kYWVtb25fdXNlcm5hbWU9cm9vdCBcCisgICAgICAgICAgICAgICAgIC0td2l0aC1kYWVtb25fZ3JvdXBuYW1lPXJvb3QgXAorICAgICAgICAgICAgICAgICAtLXdpdGgtam9iZGlyPS92YXIvc3Bvb2wvYXQvam9icyBcCisgICAgICAgICAgICAgICAgIC0td2l0aC1hdHNwb29sPS92YXIvc3Bvb2wvYXQvc3Bvb2wgXAorICAgICAgICAgICAgICAgICBhY19jdl9oZWFkZXJfc2VjdXJpdHlfcGFtX2FwcGxfaD0ke0BiYi51dGlscy5jb250YWlucygnRElTVFJPX0ZFQVRVUkVTJywgJ3BhbScsICd5ZXMnLCAnbm8nLCBkKX0gIgorCitpbmhlcml0IGF1dG90b29scy1icm9rZW5zZXAgc3lzdGVtZCB1cGRhdGUtcmMuZAorCitJTklUU0NSSVBUX05BTUUgPSAiYXRkIgorSU5JVFNDUklQVF9QQVJBTVMgPSAiZGVmYXVsdHMiCisKK1NZU1RFTURfU0VSVklDRV8ke1BOfSA9ICJhdGQuc2VydmljZSIKKworY29weV9zb3VyY2VzKCkgeworCWNwIC1mICR7V09SS0RJUn0vcG9zaXh0bS5bY2hdICR7U30KK30KK2RvX3BhdGNoW3Bvc3RmdW5jc10gKz0gImNvcHlfc291cmNlcyIKKworZG9faW5zdGFsbCAoKSB7CisJb2VfcnVubWFrZSAtZSAiSVJPT1Q9JHtEfSIgaW5zdGFsbAorCisJaW5zdGFsbCAtZCAke0R9JHtzeXNjb25mZGlyfS9pbml0LmQKKwlpbnN0YWxsIC1tIDA3NTUgICAgJHtXT1JLRElSfS9hdGQuaW5pdAkJJHtEfSR7c3lzY29uZmRpcn0vaW5pdC5kL2F0ZAorCisJIyBpbnN0YWxsIHN5c3RlbWQgdW5pdCBmaWxlcworCWluc3RhbGwgLWQgJHtEfSR7c3lzdGVtZF91bml0ZGlyfS9zeXN0ZW0KKwlpbnN0YWxsIC1tIDA2NDQgJHtXT1JLRElSfS9hdGQuc2VydmljZSAke0R9JHtzeXN0ZW1kX3VuaXRkaXJ9L3N5c3RlbQorCXNlZCAtaSAtZSAncyxAU0JJTkRJUkAsJHtzYmluZGlyfSxnJyAke0R9JHtzeXN0ZW1kX3VuaXRkaXJ9L3N5c3RlbS9hdGQuc2VydmljZQorCisJaWYgWyAiJHtAYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsICdwYW0nLCAncGFtJywgJycsIGQpfSIgPSAicGFtIiBdOyB0aGVuCisJCWluc3RhbGwgLUQgLW0gMDY0NCAke1dPUktESVJ9LyR7QlB9L3BhbS5jb25mICR7RH0ke3N5c2NvbmZkaXJ9L3BhbS5kL2F0ZAorCWZpCit9CmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2F1Z2Vhcy9hdWdlYXMuaW5jIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9hdWdlYXMvYXVnZWFzLmluYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjNkMTJjYS4uMDAwMDAwMAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2F1Z2Vhcy9hdWdlYXMuaW5jCisrKyAvZGV2L251bGwKQEAgLTEsMzAgKzAsMCBAQAotU1VNTUFSWSA9ICJBdWdlYXMgY29uZmlndXJhdGlvbiBBUEkiCi1IT01FUEFHRSA9ICJodHRwOi8vYXVnZWFzLm5ldC8iCi1CVUdUUkFDS0VSID0gImh0dHBzOi8vZmVkb3JhaG9zdGVkLm9yZy9hdWdlYXMvcmVwb3J0LzEiCi0KLUxJQ0VOU0UgPSAiTEdQTHYyLjErIgotTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9YmJiNDYxMjExYTMzYjEzNGQ0MmVkNWVlODAyYjM3ZmYiCi0KLVNSQ19VUkkgPSAiaHR0cDovL2Rvd25sb2FkLmF1Z2Vhcy5uZXQvJHtCUH0udGFyLmd6IFwKLSAgICAgICAgICAgZmlsZTovL2FkZC1taXNzaW5nLWFyZ3otY29uZGl0aW9uYWwucGF0Y2ggXAotICAgICAgICAgICBmaWxlOi8vc2VwYnVpbGRmaXgucGF0Y2ggXAotICAgICAgICAgICBmaWxlOi8vMDAwMS1VbnNldC1uZWVkX2NoYXJzZXRfYWxpYXMtd2hlbi1idWlsZGluZy1mb3ItbXVzbC5wYXRjaCBcCi0gICAgICAgICAgIgotCi1ERVBFTkRTID0gInJlYWRsaW5lIGxpYnhtbDIiCi0KLWluaGVyaXQgYXV0b3Rvb2xzIHBrZ2NvbmZpZwotCi1QQUNLQUdFUyA9KyAiJHtQTn0tbGVuc2VzIGxpYiR7QlBOfSIKLQotRklMRVNfJHtQTn0tbGVuc2VzID0gIiR7ZGF0YWRpcn0vYXVnZWFzL2xlbnNlcyIKLUZJTEVTX2xpYiR7QlBOfSA9ICIke2xpYmRpcn0vbGliKiR7U09MSUJTfSIKLQotUkRFUEVORFNfbGliJHtCUE59ICs9ICIke1BOfS1sZW5zZXMiCi1SUkVDT01NRU5EU19saWIke0JQTn0gKz0gIiR7UE59IgotCi1MRUFEX1NPTkFNRSA9ICJsaWJhdWdlYXMuc28iCi0KLWRvX2luc3RhbGxfYXBwZW5kKCkgewotCXJtIC1mciAke0R9JHtkYXRhZGlyfS92aW0KLX0KZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvYXVnZWFzL2F1Z2Vhcy8wMDAxLVVuc2V0LW5lZWRfY2hhcnNldF9hbGlhcy13aGVuLWJ1aWxkaW5nLWZvci1tdXNsLnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9hdWdlYXMvYXVnZWFzLzAwMDEtVW5zZXQtbmVlZF9jaGFyc2V0X2FsaWFzLXdoZW4tYnVpbGRpbmctZm9yLW11c2wucGF0Y2gKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDlhMTk4NzYuLjAwMDAwMDAKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9hdWdlYXMvYXVnZWFzLzAwMDEtVW5zZXQtbmVlZF9jaGFyc2V0X2FsaWFzLXdoZW4tYnVpbGRpbmctZm9yLW11c2wucGF0Y2gKKysrIC9kZXYvbnVsbApAQCAtMSwzMCArMCwwIEBACi1Gcm9tIGI5NTY1ZGMyZmUwYzRmN2RhYWVjOTFiN2U4M2JjNzMxM2RlZTJmNGEgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCi1Gcm9tOiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgotRGF0ZTogTW9uLCAxMyBBcHIgMjAxNSAxNzowMjoxMyAtMDcwMAotU3ViamVjdDogW1BBVENIXSBVbnNldCBuZWVkX2NoYXJzZXRfYWxpYXMgd2hlbiBidWlsZGluZyBmb3IgbXVzbAotCi1sb2NhbGNoYXJzZXQgdXNlcyBhY19jdl9nbnVfbGlicmFyeV8yXzEgZnJvbSBnbGliYzIxLm00Ci13aGljaCBhY3R1YWxseSBzaG91ZGwgYmUgZml4ZWQgaW4gZ251bGliIGFuZCB0aGVuIGFsbCBkb3duc3RyZWFtCi1wcm9qZWN0cyB3aWxsIGdldCBpdCBldmVudHVhbGx5LiBGb3Igbm93IHdlIGFwcGx5IHRoZSBmaXggdG8KLWNvcmV1dGlscwotCi1VcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKLQotU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KLS0tLQotIGxpYi9nbnVsaWIubWsgfCAyICstCi0gMSBmaWxlIGNoYW5nZWQsIDEgaW5zZXJ0aW9uKCspLCAxIGRlbGV0aW9uKC0pCi0KLUluZGV4OiBhdWdlYXMtMS4yLjAvZ251bGliL2xpYi9NYWtlZmlsZS5hbQotPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0tIGF1Z2Vhcy0xLjIuMC5vcmlnL2dudWxpYi9saWIvTWFrZWZpbGUuYW0KLSsrKyBhdWdlYXMtMS4yLjAvZ251bGliL2xpYi9NYWtlZmlsZS5hbQotQEAgLTQ2Myw3ICs0NjMsNyBAQCBpbnN0YWxsLWV4ZWMtbG9jYWxjaGFyc2V0OiBhbGwtbG9jYWwKLSAJICBjYXNlICckKGhvc3Rfb3MpJyBpbiBcCi0gCSAgICBkYXJ3aW5bNTZdKikgXAotIAkgICAgICBuZWVkX2NoYXJzZXRfYWxpYXM9dHJ1ZSA7OyBcCi0tCSAgICBkYXJ3aW4qIHwgY3lnd2luKiB8IG1pbmd3KiB8IHB3MzIqIHwgY2VnY2MqKSBcCi0rCSAgICBkYXJ3aW4qIHwgY3lnd2luKiB8IG1pbmd3KiB8IHB3MzIqIHwgY2VnY2MqIHwgbGludXgtbXVzbCopIFwKLSAJICAgICAgbmVlZF9jaGFyc2V0X2FsaWFzPWZhbHNlIDs7IFwKLSAJICAgICopIFwKLSAJICAgICAgbmVlZF9jaGFyc2V0X2FsaWFzPXRydWUgOzsgXApkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9hdWdlYXMvYXVnZWFzL2FkZC1taXNzaW5nLWFyZ3otY29uZGl0aW9uYWwucGF0Y2ggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2F1Z2Vhcy9hdWdlYXMvYWRkLW1pc3NpbmctYXJnei1jb25kaXRpb25hbC5wYXRjaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYWJiZGJhYS4uMDAwMDAwMAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2F1Z2Vhcy9hdWdlYXMvYWRkLW1pc3NpbmctYXJnei1jb25kaXRpb25hbC5wYXRjaAorKysgL2Rldi9udWxsCkBAIC0xLDIwICswLDAgQEAKLUFkZCBtaXNzaW5nIEdMX0dFTkVSQVRFX0FSR1pfSCBjb25kaXRpb25hbAotCi0tIEdMX0dFTkVSQVRFX0FSR1pfSCBpcyB1c2VkIGluIGdudWxpYi9saWIvTWFrZWZpbGUuYW0KLQotVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCi1TaWduZWQtb2ZmLWJ5OiBDb25zdGFudGluIE11c2NhIDxjb25zdGFudGlueC5tdXNjYUBpbnRlbC5jb20+Ci0KLUluZGV4OiBhdWdlYXMtMS4wLjAvY29uZmlndXJlLmFjCi09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLS0gYXVnZWFzLTEuMC4wLm9yaWcvY29uZmlndXJlLmFjCi0rKysgYXVnZWFzLTEuMC4wL2NvbmZpZ3VyZS5hYwotQEAgLTU1LDYgKzU1LDggQEAgQUNfQVJHX1dJVEgoW2ZhaWxtYWxsb2NdLAotIAotIEFNX0NPTkRJVElPTkFMKFtXSVRIX0ZBSUxNQUxMT0NdLCBbdGVzdCB4JHdpdGhfZmFpbG1hbGxvYyAhPSB4bm9dKQotIAotK0FNX0NPTkRJVElPTkFMKFtHTF9HRU5FUkFURV9BUkdaX0hdLCBbdGVzdCAtbiAiJEFSR1pfSCJdKQotKwotIGRubCAtLWVuYWJsZS1kZWJ1Zz0oeWVzfG5vKQotIEFDX0FSR19FTkFCTEUoW2RlYnVnXSwKLSAgICAgICAgICAgICAgIFtBQ19IRUxQX1NUUklORyhbLS1lbmFibGUtZGVidWc9bm8veWVzXSwKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvYXVnZWFzL2F1Z2Vhcy9zZXBidWlsZGZpeC5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvYXVnZWFzL2F1Z2Vhcy9zZXBidWlsZGZpeC5wYXRjaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjgyYTNlZS4uMDAwMDAwMAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2F1Z2Vhcy9hdWdlYXMvc2VwYnVpbGRmaXgucGF0Y2gKKysrIC9kZXYvbnVsbApAQCAtMSwyMiArMCwwIEBACi1FbnN1cmUgdGhhdCBidWlsZHMgaW4gc2VwYXJhdGUgYnVpbGRkaXJzICgke0J9ICE9ICR7U30pIGNvcnJlY3RseSBpbnN0YWxsIHRoZSAKLWxlbnNlcyBmaWxlcy4KLQotVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCi0KLVJQIDIwMTMvNC8xNwotCi1JbmRleDogYXVnZWFzLTEuMC4wL01ha2VmaWxlLmFtCi09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLS0gYXVnZWFzLTEuMC4wLm9yaWcvTWFrZWZpbGUuYW0JMjAxMi0xMS0wMiAxNToyMDoxMS4wMDAwMDAwMDAgKzAwMDAKLSsrKyBhdWdlYXMtMS4wLjAvTWFrZWZpbGUuYW0JMjAxMy0wNC0xNyAxMDozNjoyNC4wMzM0MDAxMjUgKzAwMDAKLUBAIC01LDggKzUsOCBAQAotIGxlbnNkaXI9JChkYXRhZGlyKS9hdWdlYXMvbGVuc2VzL2Rpc3QKLSBsZW5zdGVzdGRpcj0kKGRhdGFkaXIpL2F1Z2Vhcy9sZW5zZXMvZGlzdC90ZXN0cwotIAotLWRpc3RfbGVuc19EQVRBPSQod2lsZGNhcmQgbGVuc2VzLyouYXVnKQotLWRpc3RfbGVuc3Rlc3RfREFUQT0kKHdpbGRjYXJkIGxlbnNlcy90ZXN0cy8qLmF1ZykKLStkaXN0X2xlbnNfREFUQT0kKHdpbGRjYXJkICQodG9wX3NyY2RpcikvbGVuc2VzLyouYXVnKQotK2Rpc3RfbGVuc3Rlc3RfREFUQT0kKHdpbGRjYXJkICQodG9wX3NyY2RpcilsZW5zZXMvdGVzdHMvKi5hdWcpCi0gCi0gRVhUUkFfRElTVD1hdWdlYXMuc3BlYyBidWlsZC9hdXgvbW92ZS1pZi1jaGFuZ2UgTWFrZWZpbGUuYW0gSEFDS0lORwotIApkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9hdWdlYXMvYXVnZWFzXzEuNC4wLmJiIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9hdWdlYXMvYXVnZWFzXzEuNC4wLmJiCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxMDY0YWQ0Li4wMDAwMDAwCi0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvYXVnZWFzL2F1Z2Vhc18xLjQuMC5iYgorKysgL2Rldi9udWxsCkBAIC0xLDQgKzAsMCBAQAotcmVxdWlyZSBhdWdlYXMuaW5jCi0KLVNSQ19VUklbbWQ1c3VtXSA9ICJhMjUzNmE5YzNkNzQ0ZGMwOWQyMzQyMjhmZTRiMGM5MyIKLVNSQ19VUklbc2hhMjU2c3VtXSA9ICI2NTlmYWU3YWMyMjkwMjllNjBhODY5YTNiODhjNjE2Y2ZkNTFjZjJmYmEyODZjZGZlM2FmM2EwNTJjYjM1YjMwIgpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9iYXNoL2Jhc2gtMy4yLjQ4L2J1aWxkLXRlc3RzLnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9iYXNoL2Jhc2gtMy4yLjQ4L2J1aWxkLXRlc3RzLnBhdGNoCmluZGV4IDkxMzQxZWUuLmU2MzQ1N2MgMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvYmFzaC9iYXNoLTMuMi40OC9idWlsZC10ZXN0cy5wYXRjaAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2Jhc2gvYmFzaC0zLjIuNDgvYnVpbGQtdGVzdHMucGF0Y2gKQEAgLTExLDE1ICsxMSwxNSBAQAogIAogIHJlY2hvJChFWEVFWFQpOgkJJChTVVBQT1JUX1NSQylyZWNoby5jCiAtCUAkKENDX0ZPUl9CVUlMRCkgJChDQ0ZMQUdTX0ZPUl9CVUlMRCkgLW8gJEAgJChTVVBQT1JUX1NSQylyZWNoby5jICR7TElCU19GT1JfQlVJTER9Ci0rCUAkKENDKSAkKENDRkxBR1MpIC1vICRAICQ8CisrCUAkKENDKSAkKENDRkxBR1MpICQoTERGTEFHUykgLW8gJEAgJDwKICAKICB6ZWNobyQoRVhFRVhUKToJCSQoU1VQUE9SVF9TUkMpemVjaG8uYwogLQlAJChDQ19GT1JfQlVJTEQpICQoQ0NGTEFHU19GT1JfQlVJTEQpIC1vICRAICQoU1VQUE9SVF9TUkMpemVjaG8uYyAke0xJQlNfRk9SX0JVSUxEfQotKwlAJChDQykgJChDQ0ZMQUdTKSAtbyAkQCAkPAorKwlAJChDQykgJChDQ0ZMQUdTKSAkKExERkxBR1MpIC1vICRAICQ8CiAgCiAgcHJpbnRlbnYkKEVYRUVYVCk6CSQoU1VQUE9SVF9TUkMpcHJpbnRlbnYuYwogLQlAJChDQ19GT1JfQlVJTEQpICQoQ0NGTEFHU19GT1JfQlVJTEQpIC1vICRAICQoU1VQUE9SVF9TUkMpcHJpbnRlbnYuYyAke0xJQlNfRk9SX0JVSUxEfQotKwlAJChDQykgJChDQ0ZMQUdTKSAtbyAkQCAkPAorKwlAJChDQykgJChDQ0ZMQUdTKSAkKExERkxBR1MpIC1vICRAICQ8CiAgCiAtdGVzdCB0ZXN0cyBjaGVjazoJZm9yY2UgJChQcm9ncmFtKSAkKFRFU1RTX1NVUFBPUlQpCiArdGVzdCB0ZXN0cyBjaGVjazoKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvYmFzaC9iYXNoLTMuMi40OC9zdHJpbmctZm9ybWF0LnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9iYXNoL2Jhc2gtMy4yLjQ4L3N0cmluZy1mb3JtYXQucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWRhMzk2NAotLS0gL2Rldi9udWxsCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvYmFzaC9iYXNoLTMuMi40OC9zdHJpbmctZm9ybWF0LnBhdGNoCkBAIC0wLDAgKzEsMjEgQEAKK0ZpeCBhIHN0cmluZyBmb3JtYXQgd2FybmluZyB3aGVuIHVzaW5nIHNlY3VyaXR5IGZsYWdzOgorCit8IC4uL2Jhc2gtMy4yLjQ4L3ByaW50X2NtZC5jOjExNTI6MzogZXJyb3I6IGZvcm1hdCBub3QgYSBzdHJpbmcgbGl0ZXJhbCBhbmQgbm8gZm9ybWF0IGFyZ3VtZW50cyBbLVdlcnJvcj1mb3JtYXQtc2VjdXJpdHldCit8ICAgIGNwcmludGYgKGluZGVudGF0aW9uX3N0cmluZyk7CisKK1Vwc3RyZWFtLVN0YXR1czogQmFja3BvcnQKK1NpZ25lZC1vZmYtYnk6IFJvc3MgQnVydG9uIDxyb3NzLmJ1cnRvbkBpbnRlbC5jb20+CisKK2RpZmYgLS1naXQgYS9wcmludF9jbWQuYyBiL3ByaW50X2NtZC5jCitpbmRleCBkMWRmZDFhLi45NTZkYjUzIDEwMDY0NAorLS0tIGEvcHJpbnRfY21kLmMKKysrKyBiL3ByaW50X2NtZC5jCitAQCAtMTE0OSw3ICsxMTQ5LDcgQEAgaW5kZW50IChhbW91bnQpCisgICBmb3IgKGkgPSAwOyBhbW91bnQgPiAwOyBhbW91bnQtLSkKKyAgICAgaW5kZW50YXRpb25fc3RyaW5nW2krK10gPSAnICc7CisgICBpbmRlbnRhdGlvbl9zdHJpbmdbaV0gPSAnXDAnOworLSAgY3ByaW50ZiAoaW5kZW50YXRpb25fc3RyaW5nKTsKKysgIGNwcmludGYgKCIlcyIsIGluZGVudGF0aW9uX3N0cmluZyk7CisgfQorIAorIHN0YXRpYyB2b2lkCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2Jhc2gvYmFzaC5pbmMgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2Jhc2gvYmFzaC5pbmMKaW5kZXggOTNjYTAwYi4uMWQwODUyNiAxMDA2NDQKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9iYXNoL2Jhc2guaW5jCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvYmFzaC9iYXNoLmluYwpAQCAtMiw3ICsyLDcgQEAKIEhPTUVQQUdFID0gImh0dHA6Ly90aXN3d3cuY2FzZS5lZHUvcGhwL2NoZXQvYmFzaC9iYXNodG9wLmh0bWwiCiBTRUNUSU9OID0gImJhc2Uvc2hlbGwiCiAKLURFUEVORFMgPSAibmN1cnNlcyBiaXNvbi1uYXRpdmUiCitERVBFTkRTID0gIm5jdXJzZXMgYmlzb24tbmF0aXZlIHZpcnR1YWwvbGliaWNvbnYiCiAKIGluaGVyaXQgYXV0b3Rvb2xzIGdldHRleHQgdGV4aW5mbyB1cGRhdGUtYWx0ZXJuYXRpdmVzIHB0ZXN0CiAKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvYmFzaC9iYXNoLzAwMDEtaGVscC1maXgtcHJpbnRmLWZvcm1hdC1zZWN1cml0eS13YXJuaW5nLnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9iYXNoL2Jhc2gvMDAwMS1oZWxwLWZpeC1wcmludGYtZm9ybWF0LXNlY3VyaXR5LXdhcm5pbmcucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTQwNWM4NAotLS0gL2Rldi9udWxsCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvYmFzaC9iYXNoLzAwMDEtaGVscC1maXgtcHJpbnRmLWZvcm1hdC1zZWN1cml0eS13YXJuaW5nLnBhdGNoCkBAIC0wLDAgKzEsMzUgQEAKK0Zyb20gZTU4MzdhNDJmOGY0OGE2YTcyMTgwNWZmOGY3ZmNkMzI4NjFkMDljYSBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206ID0/VVRGLTg/cT9BbmRyPUMzPUE5PTIwRHJhc3ppaz89IDxhZHJhc3ppa0B0eWNvaW50LmNvbT4KK0RhdGU6IFR1ZSwgMjYgSnVsIDIwMTYgMTM6MDk6NDcgKzAxMDAKK1N1YmplY3Q6IFtQQVRDSF0gaGVscDogZml4IHByaW50ZigpIGZvcm1hdCBzZWN1cml0eSB3YXJuaW5nCitNSU1FLVZlcnNpb246IDEuMAorQ29udGVudC1UeXBlOiB0ZXh0L3BsYWluOyBjaGFyc2V0PVVURi04CitDb250ZW50LVRyYW5zZmVyLUVuY29kaW5nOiA4Yml0CisKK3wgLi4vLi4vYmFzaC00LjMuMzAvYnVpbHRpbnMvLi4vLi4vYmFzaC00LjMuMzAvYnVpbHRpbnMvaGVscC5kZWY6IEluIGZ1bmN0aW9uICdoZWxwX2J1aWx0aW4nOgorfCAuLi8uLi9iYXNoLTQuMy4zMC9idWlsdGlucy8uLi8uLi9iYXNoLTQuMy4zMC9idWlsdGlucy9oZWxwLmRlZjoxMzA6NzogZXJyb3I6IGZvcm1hdCBub3QgYSBzdHJpbmcgbGl0ZXJhbCBhbmQgbm8gZm9ybWF0IGFyZ3VtZW50cyBbLVdlcnJvcj1mb3JtYXQtc2VjdXJpdHldCit8ICAgICAgICBwcmludGYgKG5nZXR0ZXh0ICgiU2hlbGwgY29tbWFuZHMgbWF0Y2hpbmcga2V5d29yZCBgIiwgIlNoZWxsIGNvbW1hbmRzIG1hdGNoaW5nIGtleXdvcmRzIGAiLCAobGlzdC0+bmV4dCA/IDIgOiAxKSkpOworfCAgICAgICAgXn5+fn5+CisKK1NpZ25lZC1vZmYtYnk6IEFuZHLDqSBEcmFzemlrIDxhZHJhc3ppa0B0eWNvaW50LmNvbT4KKy0tLQorVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisgYnVpbHRpbnMvaGVscC5kZWYgfCAyICstCisgMSBmaWxlIGNoYW5nZWQsIDEgaW5zZXJ0aW9uKCspLCAxIGRlbGV0aW9uKC0pCisKK2RpZmYgLS1naXQgYS9idWlsdGlucy9oZWxwLmRlZiBiL2J1aWx0aW5zL2hlbHAuZGVmCitpbmRleCAxODk0ZjE3Li5jZjYyNGM2IDEwMDY0NAorLS0tIGEvYnVpbHRpbnMvaGVscC5kZWYKKysrKyBiL2J1aWx0aW5zL2hlbHAuZGVmCitAQCAtMTI3LDcgKzEyNyw3IEBAIGhlbHBfYnVpbHRpbiAobGlzdCkKKyAKKyAgIGlmIChnbG9iX3BhdHRlcm5fcCAobGlzdC0+d29yZC0+d29yZCkpCisgICAgIHsKKy0gICAgICBwcmludGYgKG5nZXR0ZXh0ICgiU2hlbGwgY29tbWFuZHMgbWF0Y2hpbmcga2V5d29yZCBgIiwgIlNoZWxsIGNvbW1hbmRzIG1hdGNoaW5nIGtleXdvcmRzIGAiLCAobGlzdC0+bmV4dCA/IDIgOiAxKSkpOworKyAgICAgIHByaW50ZiAoIiVzIiwgbmdldHRleHQgKCJTaGVsbCBjb21tYW5kcyBtYXRjaGluZyBrZXl3b3JkIGAiLCAiU2hlbGwgY29tbWFuZHMgbWF0Y2hpbmcga2V5d29yZHMgYCIsIChsaXN0LT5uZXh0ID8gMiA6IDEpKSk7CisgICAgICAgcHJpbnRfd29yZF9saXN0IChsaXN0LCAiLCAiKTsKKyAgICAgICBwcmludGYgKCInXG5cbiIpOworICAgICB9CistLSAKKzIuOC4xCisKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvYmFzaC9iYXNoL2ZpeC1ydW4tYnVpbHRpbnMucGF0Y2ggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2Jhc2gvYmFzaC9maXgtcnVuLWJ1aWx0aW5zLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJmYTM4ODMKLS0tIC9kZXYvbnVsbAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2Jhc2gvYmFzaC9maXgtcnVuLWJ1aWx0aW5zLnBhdGNoCkBAIC0wLDAgKzEsMzMgQEAKK0Zyb20gMGM0Y2FiOTU5NGM5NmMyZGM0MzVhOGQ5NzI0NjA1ODI0YmNiZjkxNyBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IERlbmdrZSBEdSA8ZGVuZ2tlLmR1QHdpbmRyaXZlci5jb20+CitEYXRlOiBUdWUsIDE5IEFwciAyMDE2IDAyOjU3OjQ1IC0wNDAwCitTdWJqZWN0OiBbUEFUQ0hdIGZpeCBydW4tYnVpbHRpbnMgZmFpbGVkCisKK0ZBSUw6IHJ1bi1idWlsdGlucworMS4gcmVkaXJlY3QgdGhlIHN0ZGVyciBvdXRwdXQgb2YgY29tbWFuZCBleGVjIHdpdGggLWwgb3B0aW9uIGluCisgICBidWlsdGlucy50ZXN0cyB0byAvZGV2L251bGwKKzIuIGVuc3VyZSB0aGUgc3lzdGVtIGNvbnRhaW4gdGhlIGxvY2FsZXMgImVuX1VTLlVURi04IgorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworU2lnbmVkLW9mZi1ieTogRGVuZ2tlIER1IDxkZW5na2UuZHVAd2luZHJpdmVyLmNvbT4KKy0tLQorIHRlc3RzL2J1aWx0aW5zLnRlc3RzIHwgMiArLQorIDEgZmlsZSBjaGFuZ2VkLCAxIGluc2VydGlvbigrKSwgMSBkZWxldGlvbigtKQorCitkaWZmIC0tZ2l0IGEvdGVzdHMvYnVpbHRpbnMudGVzdHMgYi90ZXN0cy9idWlsdGlucy50ZXN0cworaW5kZXggOWQ3NzUyMC4uNjNmM2FmOCAxMDA2NDQKKy0tLSBhL3Rlc3RzL2J1aWx0aW5zLnRlc3RzCisrKysgYi90ZXN0cy9idWlsdGlucy50ZXN0cworQEAgLTEwOSw3ICsxMDksNyBAQCBlc2FjCisgCisgIyB0ZXN0IG9wdGlvbnMgdG8gZXhlYworIChleGVjIC1hIHNwZWNpYWxuYW1lICR7VEhJU19TSH0gLWMgJ2VjaG8gJDAnICkKKy0oZXhlYyAtbCAtYSBzcGVjaWFsbmFtZSAke1RISVNfU0h9IC1jICdlY2hvICQwJyApCisrKGV4ZWMgLWwgLWEgc3BlY2lhbG5hbWUgJHtUSElTX1NIfSAtYyAnZWNobyAkMCcgKSAyPiAvZGV2L251bGwKKyAjIHRlc3QgYGNsZWFuJyBlbnZpcm9ubWVudC4gIGlmIC9iaW4vc2ggaXMgYmFzaCwgYW5kIHRoZSBzY3JpcHQgdmVyc2lvbiBvZgorICMgcHJpbnRlbnYgaXMgcnVuLCB0aGVyZSB3aWxsIGJlIHZhcmlhYmxlcyBpbiB0aGUgZW52aXJvbm1lbnQgdGhhdCBiYXNoCisgIyBzZXRzIG9uIHN0YXJ0dXAuICBBbHNvIHRlc3QgY29kZSB0aGF0IHByZWZpeGVzIGFyZ3ZbMF0gd2l0aCBhIGRhc2guCistLSAKKzIuOC4xCisKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvYmFzaC9iYXNoL2ZpeC1ydW4taW50bC5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvYmFzaC9iYXNoL2ZpeC1ydW4taW50bC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNGEzNDA5Ci0tLSAvZGV2L251bGwKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9iYXNoL2Jhc2gvZml4LXJ1bi1pbnRsLnBhdGNoCkBAIC0wLDAgKzEsMTEwIEBACitGcm9tIGEwMGQzMTYxZmQ3YjZhNjk4YmRkMmVkNWYwYWM1ZmFhYzU4MGVlMmEgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBEZW5na2UgRHUgPGRlbmdrZS5kdUB3aW5kcml2ZXIuY29tPgorRGF0ZTogV2VkLCAzIEF1ZyAyMDE2IDIzOjEzOjAwIC0wNDAwCitTdWJqZWN0OiBbUEFUQ0hdIGZpeCBydW4taW50bCBmYWlsZWQKKworMS4gRmlsdGVyIGV4dHJhIHdoaXRlIHNwYWNlIG9mIGludGwucmlnaHQKKworICAgRHVlIHRvIHRoZSBleHRyYSB3aGl0ZSBzcGFjZSBvZiBpbnRsLnJpZ2h0LCB3aGVuIHRoZSByZXN1bHQgb2YKKyAgIHN1Yi10ZXN0IHVuaWNvZGUyLnN1YiBvZiBpbnRsLnRlc3RzIGNvbXBhcmVkIHRvIGl0LCB0aGUgdGVzdAorICAgZmFpbGVkLgorCisgICBTbyB3ZSBuZWVkIHRvIGZpbHRlciB0aGUgZXh0cmEgd2hpdGUgc3BhY2Ugb2YgaW50bC5yaWdodC4KKworICAgSW1wb3J0IHRoaXMgcGF0Y2ggZm9yIGludGwucmlnaHQgZnJvbSBiYXNoIGRldmVsIGJyYW5jaDoKKworCWh0dHA6Ly9naXQuc2F2YW5uYWguZ251Lm9yZy9jZ2l0L2Jhc2guZ2l0L2xvZy8/aD1kZXZlbAorCisgICBjb21taXQgaXM6CisKKwk4NWVjMDc3OGY5ZDc3OGUxODIwZmI4YzBlM2U5OTZmMmQxMTAzYjQ1CisKKzIuIENoYW5nZSBpbnRsLnJpZ2h0IGNvcnJlc3BvbmQgdG8gdGhlIHVuaWNvZGUzLnN1YidzIG91dHB1dAorCisgICBJbiBzdWItdGVzdCB1bmljb2RlMy5zdWIgb2YgaW50bC50ZXN0cywgdGhlIHBheWxvYWQgdmFsdWUgaXM6CisKKwlwYXlsb2FkPSQnXDA2NVwyNDdcMTAwXDA2M1wyMzFcMDUzXDMwNlwxMjNcMDcwXDIzN1wyNDJcMzUyXDI2MycKKworICAgSXQgdXNlZCBxdW90ZWQgc3RyaW5nIGV4cGFuc2lvbihlc2NhcGVkIG9jdGFsKSB0byBhc3NpZ24gQVNDSUkKKyAgIGNoYXJhY3RlcnMgdG8gdmFyaWFibGVzLiBTbyB3aGVuIHRoZSB0ZXN0IHJ1biB0aGUgZm9sbG93aW5nOgorCisJcHJpbnRmICVxICIkcGF5bG9hZCIKKworICAgSXQgcHJvZHVjZWQ6CisKKwkkJzVcMjQ3QDNcMjMxK1wzMDZTOFwyMzdcMjQyXDM1MlwyNjMnCisKKyAgIFdoZW4gY29tcGFyZWQgdG8gdGhlIGludGwucmlnaHQoY29udGFpbiB0aGUgY29udmVydGVkIGNoYXJhY3RlciksIGl0IGZhaWxlZC4KKworICAgSW1wb3J0IHBhcnRzIG9mIHBhdGNoIGZvciBpbnRsLnJpZ2h0IGZyb20gYmFzaCBkZXZlbCBicmFuY2g6CisKKwlodHRwOi8vZ2l0LnNhdmFubmFoLmdudS5vcmcvY2dpdC9iYXNoLmdpdC9sb2cvP2g9ZGV2ZWwKKworICAgY29tbWl0IGlzOgorCisJNzRiOGNiYjQxMzk4YjQ0NTNkOGJhMDRkMGNkZDFiMjVmOWRjYjllMworCitVcHN0cmVhbS1TdGF0dXM6IEJhY2twb3J0CisKK1NpZ25lZC1vZmYtYnk6IERlbmdrZSBEdSA8ZGVuZ2tlLmR1QHdpbmRyaXZlci5jb20+CistLS0KKyB0ZXN0cy9pbnRsLnJpZ2h0IHwgMzAgKysrKysrKysrKysrKysrLS0tLS0tLS0tLS0tLS0tCisgMSBmaWxlIGNoYW5nZWQsIDE1IGluc2VydGlvbnMoKyksIDE1IGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvdGVzdHMvaW50bC5yaWdodCBiL3Rlc3RzL2ludGwucmlnaHQKK2luZGV4IGFjZjEwOGEuLjFlZmRmYmUgMTAwNjQ0CistLS0gYS90ZXN0cy9pbnRsLnJpZ2h0CisrKysgYi90ZXN0cy9pbnRsLnJpZ2h0CitAQCAtMTgsMzQgKzE4LDM0IEBAIGHDqWIKKyAxLjAwMDAKKyAxLDAwMDAKKyBQYXNzZWQgYWxsIDEzNzggVW5pY29kZSB0ZXN0cworLTAwMDAwMDAgICAzMDMgMjc3IDAxMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKyswMDAwMDAwIDMwMyAyNzcgMDEyCisgMDAwMDAwMworLTAwMDAwMDAgICAzMDMgMjc3IDAxMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKyswMDAwMDAwIDMwMyAyNzcgMDEyCisgMDAwMDAwMworLTAwMDAwMDAgICAzMDMgMjc3IDAxMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKyswMDAwMDAwIDMwMyAyNzcgMDEyCisgMDAwMDAwMworLTAwMDAwMDAgICAzMDMgMjc3IDAxMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKyswMDAwMDAwIDMwMyAyNzcgMDEyCisgMDAwMDAwMworLTAwMDAwMDAgICAzNTcgMjc3IDI3NyAwMTIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKyswMDAwMDAwIDM1NyAyNzcgMjc3IDAxMgorIDAwMDAwMDQKKy0wMDAwMDAwICAgMzU3IDI3NyAyNzcgMDEyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisrMDAwMDAwMCAzNTcgMjc3IDI3NyAwMTIKKyAwMDAwMDA0CistMDAwMDAwMCAgIDAxMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorKzAwMDAwMDAgMDEyCisgMDAwMDAwMQorLTAwMDAwMDAgICAwMTIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKyswMDAwMDAwIDAxMgorIDAwMDAwMDEKKy0wMDAwMDAwICAgMDEyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisrMDAwMDAwMCAwMTIKKyAwMDAwMDAxCistMDAwMDAwMCAgIDAxMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorKzAwMDAwMDAgMDEyCisgMDAwMDAwMQorLTAwMDAwMDAgICAzMDMgMjc3IDAxMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKyswMDAwMDAwIDMwMyAyNzcgMDEyCisgMDAwMDAwMworLTAwMDAwMDAgICAzMDMgMjc3IDAxMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKyswMDAwMDAwIDMwMyAyNzcgMDEyCisgMDAwMDAwMworLTAwMDAwMDAgICAzMDMgMjc3IDAxMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKyswMDAwMDAwIDMwMyAyNzcgMDEyCisgMDAwMDAwMworLTAwMDAwMDAgICAxMDEgMDQwIDMwMiAyNDMgMDQwIDMwNSAyMjIgMDEyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKyswMDAwMDAwIDEwMSAwNDAgMzAyIDI0MyAwNDAgMzA1IDIyMiAwMTIKKyAwMDAwMDEwCisgLi91bmljb2RlMy5zdWI6IGxpbmUgMjogNadAM5krxlM4n6LqszogY29tbWFuZCBub3QgZm91bmQKKy01p0AzmSvGUzifouqzCisrJCc1XDI0N0AzXDIzMStcMzA2UzhcMjM3XDI0MlwzNTJcMjYzJworICsgOiAkJzVcMjQ3QDNcMjMxK1wzMDZTOFwyMzdcMjQyXDM1MlwyNjMnCistLSAKKzIuOC4xCisKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvYmFzaC9iYXNoL3J1bi1wdGVzdCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvYmFzaC9iYXNoL3J1bi1wdGVzdAppbmRleCAyMDk4ZmE0Li5jNjFmYWJkIDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2Jhc2gvYmFzaC9ydW4tcHRlc3QKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9iYXNoL2Jhc2gvcnVuLXB0ZXN0CkBAIC0xLDIgKzEsMjIgQEAKICMhL2Jpbi9zaAorCitlbl9VUz1gbG9jYWxlIC1hIHwgZ3JlcCBlbl9VUypgCitmcl9GUj1gbG9jYWxlIC1hIHwgZ3JlcCBmcl9GUipgCitkZV9ERT1gbG9jYWxlIC1hIHwgZ3JlcCBkZV9ERSpgCisKK2lmIFsgLXogIiRlbl9VUyIgXQordGhlbgorICAgICAgICBlY2hvICJXYXJuaW5nOiBUaGUgZW5fVVMqIGxvY2FsZXMgaXMgbmVlZGVkIHRvIHJ1biB0aGUgaW50bC50ZXN0cywgcGxlYXNlIGFkZCBpdC4iCitmaQorIAoraWYgWyAteiAiJGZyX0ZSIiBdCit0aGVuCisgICAgICAgIGVjaG8gIldhcm5pbmc6IFRoZSBmcl9GUiogbG9jYWxlcyBpcyBuZWVkZWQgdG8gcnVuIHRoZSBpbnRsLnRlc3RzLCBwbGVhc2UgYWRkIGl0LiIKK2ZpCisgCitpZiBbIC16ICIkZGVfREUiIF0KK3RoZW4KKyAgICAgICAgZWNobyAiV2FybmluZzogVGhlIGRlX0RFKiBsb2NhbGVzIGlzIG5lZWRlZCB0byBydW4gdGhlIGludGwudGVzdHMsIHBsZWFzZSBhZGQgaXQuIgorZmkKKwogbWFrZSAtayBUSElTX1NIPS9iaW4vYmFzaCBCVUlMRF9ESVI9YHB3ZGAgc3JjZGlyPWBwd2RgICBydW50ZXN0CmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2Jhc2gvYmFzaF8zLjIuNDguYmIgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2Jhc2gvYmFzaF8zLjIuNDguYmIKaW5kZXggZDQyYjI5Mi4uNmI0MDI4ZCAxMDA2NDQKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9iYXNoL2Jhc2hfMy4yLjQ4LmJiCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvYmFzaC9iYXNoXzMuMi40OC5iYgpAQCAtMjAsNiArMjAsNyBAQAogICAgICAgICAgICBmaWxlOi8vdGVzdC1vdXRwdXQucGF0Y2ggXAogICAgICAgICAgICBmaWxlOi8vcnVuLXB0ZXN0IFwKICAgICAgICAgICAgZmlsZTovL2RvbnQtaW5jbHVkZS10YXJnZXQtQ0ZMQUdTLWluLWhvc3QtTERGTEFHUy5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9zdHJpbmctZm9ybWF0LnBhdGNoIFwKICAgICAgICAgICAiCiAKIFNSQ19VUklbdGFyYmFsbC5tZDVzdW1dID0gIjMzOGRjZjk3NWE5MzY0MGJiM2VhYTg0M2NhNDJlM2Y4IgpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9iYXNoL2Jhc2hfNC4zLjMwLmJiIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9iYXNoL2Jhc2hfNC4zLjMwLmJiCmluZGV4IDQ0MjZjZjAuLjc2NTU2MmYgMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvYmFzaC9iYXNoXzQuMy4zMC5iYgorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2Jhc2gvYmFzaF80LjMuMzAuYmIKQEAgLTE0LDEyICsxNCwyMiBAQAogICAgICAgICAgICAke0dOVV9NSVJST1J9L2Jhc2gvYmFzaC00LjMtcGF0Y2hlcy9iYXNoNDMtMDM3O2FwcGx5PXllcztzdHJpcGxldmVsPTA7bmFtZT1wYXRjaDAzNyBcCiAgICAgICAgICAgICR7R05VX01JUlJPUn0vYmFzaC9iYXNoLTQuMy1wYXRjaGVzL2Jhc2g0My0wMzg7YXBwbHk9eWVzO3N0cmlwbGV2ZWw9MDtuYW1lPXBhdGNoMDM4IFwKICAgICAgICAgICAgJHtHTlVfTUlSUk9SfS9iYXNoL2Jhc2gtNC4zLXBhdGNoZXMvYmFzaDQzLTAzOTthcHBseT15ZXM7c3RyaXBsZXZlbD0wO25hbWU9cGF0Y2gwMzkgXAorICAgICAgICAgICAke0dOVV9NSVJST1J9L2Jhc2gvYmFzaC00LjMtcGF0Y2hlcy9iYXNoNDMtMDQwO2FwcGx5PXllcztzdHJpcGxldmVsPTA7bmFtZT1wYXRjaDA0MCBcCisgICAgICAgICAgICR7R05VX01JUlJPUn0vYmFzaC9iYXNoLTQuMy1wYXRjaGVzL2Jhc2g0My0wNDE7YXBwbHk9eWVzO3N0cmlwbGV2ZWw9MDtuYW1lPXBhdGNoMDQxIFwKKyAgICAgICAgICAgJHtHTlVfTUlSUk9SfS9iYXNoL2Jhc2gtNC4zLXBhdGNoZXMvYmFzaDQzLTA0MjthcHBseT15ZXM7c3RyaXBsZXZlbD0wO25hbWU9cGF0Y2gwNDIgXAorICAgICAgICAgICAke0dOVV9NSVJST1J9L2Jhc2gvYmFzaC00LjMtcGF0Y2hlcy9iYXNoNDMtMDQzO2FwcGx5PXllcztzdHJpcGxldmVsPTA7bmFtZT1wYXRjaDA0MyBcCisgICAgICAgICAgICR7R05VX01JUlJPUn0vYmFzaC9iYXNoLTQuMy1wYXRjaGVzL2Jhc2g0My0wNDQ7YXBwbHk9eWVzO3N0cmlwbGV2ZWw9MDtuYW1lPXBhdGNoMDQ0IFwKKyAgICAgICAgICAgJHtHTlVfTUlSUk9SfS9iYXNoL2Jhc2gtNC4zLXBhdGNoZXMvYmFzaDQzLTA0NTthcHBseT15ZXM7c3RyaXBsZXZlbD0wO25hbWU9cGF0Y2gwNDUgXAorICAgICAgICAgICAke0dOVV9NSVJST1J9L2Jhc2gvYmFzaC00LjMtcGF0Y2hlcy9iYXNoNDMtMDQ2O2FwcGx5PXllcztzdHJpcGxldmVsPTA7bmFtZT1wYXRjaDA0NiBcCiAgICAgICAgICAgIGZpbGU6Ly9leGVjdXRlX2NtZC5wYXRjaDtzdHJpcGxldmVsPTAgXAogICAgICAgICAgICBmaWxlOi8vbWtidWlsdGluc19oYXZlX3N0cmluZ2l6ZS5wYXRjaCBcCiAgICAgICAgICAgIGZpbGU6Ly9idWlsZC10ZXN0cy5wYXRjaCBcCiAgICAgICAgICAgIGZpbGU6Ly90ZXN0LW91dHB1dC5wYXRjaCBcCiAgICAgICAgICAgIGZpbGU6Ly9maXgtcnVuLWNvcHJvYy1ydW4taGVyZWRvYy1ydW4tZXhlY3NjcmlwdC1ydW4tdGVzdC1mLnBhdGNoIFwKICAgICAgICAgICAgZmlsZTovL3J1bi1wdGVzdCBcCisgICAgICAgICAgIGZpbGU6Ly9maXgtcnVuLWJ1aWx0aW5zLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovLzAwMDEtaGVscC1maXgtcHJpbnRmLWZvcm1hdC1zZWN1cml0eS13YXJuaW5nLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL2ZpeC1ydW4taW50bC5wYXRjaCBcCiAgICAgICAgICAgICIKIAogU1JDX1VSSVt0YXJiYWxsLm1kNXN1bV0gPSAiYTI3YjNlZTliZTgzYmQzYmE0NDhjMGZmNTJiMjg0NDciCkBAIC00Myw1ICs1MywxOSBAQAogU1JDX1VSSVtwYXRjaDAzOC5zaGEyNTZzdW1dID0gImFkYmVhYTUwMGNhN2E4MjUzNWYwZTg4ZDY3MzY2MTk2M2Y4YTVmY2RjN2FkNjM0NDVlNjhiZjViNDk3ODYzNjciCiBTUkNfVVJJW3BhdGNoMDM5Lm1kNXN1bV0gPSAiYTQ3NzU0ODdhYmU5NTg1MzY3NTFjOGNlNTNjZGY2ZjkiCiBTUkNfVVJJW3BhdGNoMDM5LnNoYTI1NnN1bV0gPSAiYWI5NGRjZWQyMjE1NTQxMDk3NjkxZjYwYzNlYjMyM2NjMjhlZjI1NDk0NjNlNmE1MzM0YmJjYzFlNjFlNzRlYyIKK1NSQ19VUklbcGF0Y2gwNDAubWQ1c3VtXSA9ICI4MGQzNTg3YzU4ODU0ZTIyNjA1NWVmMDk5ZmZlYjUzNSIKK1NSQ19VUklbcGF0Y2gwNDAuc2hhMjU2c3VtXSA9ICI4NGJiMzk2YjkyNjI5OTJjYTU0MjRmZWFiNmVkM2VjMzlmMTkzZWY1Yzc2ZGZlNGE2MmI1NTFiZDhkZDlkNzZiIgorU1JDX1VSSVtwYXRjaDA0MS5tZDVzdW1dID0gIjIwYmY2M2VlZjdjYjQ0MWMwYjFjYzQ5ZWYzMTkxZDAzIgorU1JDX1VSSVtwYXRjaDA0MS5zaGEyNTZzdW1dID0gIjRlYzQzMjk2NmU0MTk4NTI0YTdlMGNkNjg1ZmUyMjJlOTYwNDM3NjljOTYxM2U2Njc0MmFjNDc1ZGIxMzJjMWEiCitTUkNfVVJJW3BhdGNoMDQyLm1kNXN1bV0gPSAiNzA3OTA2NDZhZTYxZTIwN2M5OTVlNDQ5MzEzOTBlNTAiCitTUkNfVVJJW3BhdGNoMDQyLnNoYTI1NnN1bV0gPSAiYWMyMTkzMjJkYjI3OTFkYTg3YTQ5NmVlNmU4ZTU1NDQ4NDY0OTRiZGFhZWEyNjI2MjcwYzJmNzNjMTA0NDkxOSIKK1NSQ19VUklbcGF0Y2gwNDMubWQ1c3VtXSA9ICI4NTVhNDY5NTVjYjI1MTUzNGU4MGI0NzMyYjc0OGUzNyIKK1NSQ19VUklbcGF0Y2gwNDMuc2hhMjU2c3VtXSA9ICI0N2E4YTNjMDA1YjQ2ZTI1ODIxZjRkOGY1Y2NiMDRjMWQ2NTNiMWM4MjljYjQwNTY4ZDU1M2RjNDRmN2E2MTgwIgorU1JDX1VSSVtwYXRjaDA0NC5tZDVzdW1dID0gIjI5NjIzZDMyODJmY2JiMzdlMTE1ODEzNjUwOWI1YmI4IgorU1JDX1VSSVtwYXRjaDA0NC5zaGEyNTZzdW1dID0gIjkzMzg4MjA2MzBiZjY3MzczYjQ0ZDhlYTY4NDA5ZjY1MTYyZWE3YTQ3YjliMjlhY2UwNmEwYWVkMTI1NjdmOTkiCitTUkNfVVJJW3BhdGNoMDQ1Lm1kNXN1bV0gPSAiNDQ3MzI0NGNhNWFiZmQ0YjAxOGVhMjZkYzczZTc0MTIiCitTUkNfVVJJW3BhdGNoMDQ1LnNoYTI1NnN1bV0gPSAiYmE2ZWMzOTc4ZTllYWExZWIzZmFiZGFmM2NjNmZkZjhjNDYwNmFjMWM1OTlmYWFlYjRlMmQ2OTg2NDE1MDAyMyIKK1NSQ19VUklbcGF0Y2gwNDYubWQ1c3VtXSA9ICI3ZTVmYjA5OTkxYzA3NzA3NmI4NmUwZTA1Nzc5ODkxMyIKK1NSQ19VUklbcGF0Y2gwNDYuc2hhMjU2c3VtXSA9ICJiM2I0NTZhNmI2OTBjZDI5MzM1M2YxN2UyMmQ5MmEyMDJiM2M4YmNlNTg3YWU1ZjI2NjdjMjBjOWFiNmY2ODhmIgogCiBCQkNMQVNTRVhURU5EID0gIm5hdGl2ZXNkayIKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvYmxrdG9vbC9ibGt0b29sXzQtNy5iYiBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvYmxrdG9vbC9ibGt0b29sXzQtNy5iYgppbmRleCBkNjI1MGE5Li40NTUxYzMyIDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2Jsa3Rvb2wvYmxrdG9vbF80LTcuYmIKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9ibGt0b29sL2Jsa3Rvb2xfNC03LmJiCkBAIC05LDcgKzksNyBAQAogCiBERVBFTkRTID0gImdsaWItMi4wIgogCi1TUkNfVVJJID0gIiR7REVCSUFOX01JUlJPUn0vbWFpbi9iL2Jsa3Rvb2wvYmxrdG9vbF80Lm9yaWcudGFyLmd6O25hbWU9dGFyYmFsbCBcCitTUkNfVVJJID0gImh0dHA6Ly9zbmFwc2hvdC5kZWJpYW4ub3JnL2FyY2hpdmUvZGViaWFuLzIwMTYwNzI4VDA0MzQ0M1ovcG9vbC9tYWluL2IvJHtCUE59LyR7QlBOfV80Lm9yaWcudGFyLmd6O25hbWU9dGFyYmFsbCBcCiAgICAgICAgICAgIGZpbGU6Ly8wMDAxLWZpeC10eXBvcy1pbi1tYW5wYWdlLnBhdGNoIFwKICAgICAgICAgICAgZmlsZTovLzAwMDItZml4LXN0cmluZy1lcnJvci5wYXRjaCBcCiAgICAgICAgICAgIGZpbGU6Ly8wMDAzLUZpeC0zLWQtYXJndW1lbnQtZm9yLUJMS1JPU0VULWl0LW11c3QtYmUtY29uc3QtaW50LnBhdGNoIFwKQEAgLTIwLDYgKzIwLDcgQEAKIAogIyBmb3IgdGhpcyBwYWNrYWdlIHdlJ3JlIG1vc3RseSBpbnRlcmVzdGVkIGluIHRyYWNraW5nIGRlYmlhbiBwYXRjaGVzLAogIyBhbmQgbm90IGluIHRoZSB1cHN0cmVhbSB2ZXJzaW9uIHdoZXJlIGFsbCBkZXZlbG9wbWVudCBoYXMgZWZmZWN0aXZlbHkgc3RvcHBlZAorVVBTVFJFQU1fQ0hFQ0tfVVJJID0gIiR7REVCSUFOX01JUlJPUn0vbWFpbi9iL2Jsa3Rvb2wvIgogVVBTVFJFQU1fQ0hFQ0tfUkVHRVggPSAiKD9QPHB2ZXI+KChcZCtcLiopKyktKChcZCtcLiopKykpXC4oZGlmZnxkZWJpYW5cLnRhcilcLihnenx4eikiCiAKIFMgPSAiJHtXT1JLRElSfS8ke0JQTn0tNC5vcmlnIgpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9ieWFjYy9ieWFjY18yMDE1MDcxMS5iYiBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvYnlhY2MvYnlhY2NfMjAxNTA3MTEuYmIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGU1YjU0NTEuLjAwMDAwMDAKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9ieWFjYy9ieWFjY18yMDE1MDcxMS5iYgorKysgL2Rldi9udWxsCkBAIC0xLDExICswLDAgQEAKLSMgU2lnaC4gVGhpcyBpcyBvbmUgb2YgdGhvc2UgcGxhY2VzIHdoZXJlIGV2ZXJ5b25lIGxpY2Vuc2VzIGl0IGRpZmZlcmVudGx5LiBTb21lb25lCi0jIGV2ZW4gYXBwbHkgVUNCIHRvIGl0IChGcmVlL05ldC9PcGVuQlNEKS4gVGhlIG1haW50YWluZXIgc3RhdGVzIHRoYXQ6Ci0jICJJJ3ZlIGZvdW5kIG5vIHJlbGlhYmxlIHNvdXJjZSB3aGljaCBzdGF0ZXMgdGhhdCBieWFjYyBtdXN0IGJlYXIgYSBVQ0IgY29weXJpZ2h0LiIKLSMgU2V0dGluZyB0byBQRCBhcyB0aGlzIGlzIHdoYXQgdGhlIHVwc3RyZWFtIGhhcyBpdCBhcy4KLQotTElDRU5TRSA9ICJQRCIKLUxJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL3BhY2thZ2UvZGViaWFuL2NvcHlyaWdodDttZDU9YzUyZmIyZDFiM2Y3NWIzYjc1MzQ5Mjc4MDdhMWI3MTQiCi1yZXF1aXJlIGJ5YWNjLmluYwotCi1TUkNfVVJJW21kNXN1bV0gPSAiMjcwMDQwMTAzMDU4M2M0ZTkxNjlhYzdlYTdkMDhkZTgiCi1TUkNfVVJJW3NoYTI1NnN1bV0gPSAiYzM1NGU0ZWUxNGM0YTFiZjExZTU1ZGRlOTI3NTAxMWQxNDg4N2VmMDY2NDA2YTA4OGI2ZmE1NmNhZjAzOTI0OCIKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvYnlhY2MvYnlhY2NfMjAxNjA2MDYuYmIgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2J5YWNjL2J5YWNjXzIwMTYwNjA2LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk4MTI5ZDAKLS0tIC9kZXYvbnVsbAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2J5YWNjL2J5YWNjXzIwMTYwNjA2LmJiCkBAIC0wLDAgKzEsMTIgQEAKKyMgU2lnaC4gVGhpcyBpcyBvbmUgb2YgdGhvc2UgcGxhY2VzIHdoZXJlIGV2ZXJ5b25lIGxpY2Vuc2VzIGl0IGRpZmZlcmVudGx5LiBTb21lb25lCisjIGV2ZW4gYXBwbHkgVUNCIHRvIGl0IChGcmVlL05ldC9PcGVuQlNEKS4gVGhlIG1haW50YWluZXIgc3RhdGVzIHRoYXQ6CisjICJJJ3ZlIGZvdW5kIG5vIHJlbGlhYmxlIHNvdXJjZSB3aGljaCBzdGF0ZXMgdGhhdCBieWFjYyBtdXN0IGJlYXIgYSBVQ0IgY29weXJpZ2h0LiIKKyMgU2V0dGluZyB0byBQRCBhcyB0aGlzIGlzIHdoYXQgdGhlIHVwc3RyZWFtIGhhcyBpdCBhcy4KKworTElDRU5TRSA9ICJQRCIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL3BhY2thZ2UvZGViaWFuL2NvcHlyaWdodDttZDU9NzQ1MzNkMzJmZmQzOGJjYTRjYmYxZjEzMDVmOGJjNjAiCityZXF1aXJlIGJ5YWNjLmluYworCisKK1NSQ19VUklbbWQ1c3VtXSA9ICJkNTI3YzgxMWIzNjBmMDRhOGM1ZjVhMGE5MDYyNTk2NiIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICJjYzhmZGNlZDQ4NmNiNzBjZWM3YTdjOTM1OGRlODM2YmZkMjY3ZDE5ZDY0NTY3NjBiYjQ3MjFjY2ZlYTVhYzkxIgpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9iemlwMi9iemlwMi0xLjAuNi9DVkUtMjAxNi0zMTg5LnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9iemlwMi9iemlwMi0xLjAuNi9DVkUtMjAxNi0zMTg5LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFkMGMzYTYKLS0tIC9kZXYvbnVsbAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2J6aXAyL2J6aXAyLTEuMC42L0NWRS0yMDE2LTMxODkucGF0Y2gKQEAgLTAsMCArMSwxOCBAQAorVXBzdHJlYW0tU3RhdHVzOiBCYWNrcG9ydAoraHR0cHM6Ly9idWd6aWxsYS5zdXNlLmNvbS9hdHRhY2htZW50LmNnaT9pZD02ODEzMzQKKworQ1ZFOiBDVkUtMjAxNi0zMTg5CitTaWduZWQtb2ZmLWJ5OiBBcm1pbiBLdXN0ZXIgPGFrdXN0ZXJAbXZpc3RhLmNvbT4KKworSW5kZXg6IGJ6aXAyLTEuMC42L2J6aXAycmVjb3Zlci5jCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gYnppcDItMS4wLjYub3JpZy9iemlwMnJlY292ZXIuYworKysrIGJ6aXAyLTEuMC42L2J6aXAycmVjb3Zlci5jCitAQCAtNDU3LDYgKzQ1Nyw3IEBAIEludDMyIG1haW4gKCBJbnQzMiBhcmdjLCBDaGFyKiogYXJndiApCisgICAgICAgICAgICAgYnNQdXRVQ2hhciAoIGJzV3IsIDB4NTAgKTsgYnNQdXRVQ2hhciAoIGJzV3IsIDB4OTAgKTsKKyAgICAgICAgICAgICBic1B1dFVJbnQzMiAoIGJzV3IsIGJsb2NrQ1JDICk7CisgICAgICAgICAgICAgYnNDbG9zZSAoIGJzV3IgKTsKKysgICAgICAgICAgICBvdXRGaWxlID0gTlVMTDsKKyAgICAgICAgICB9CisgICAgICAgICAgaWYgKHdyQmxvY2sgPj0gcmJDdHIpIGJyZWFrOworICAgICAgICAgIHdyQmxvY2srKzsKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvYnppcDIvYnppcDJfMS4wLjYuYmIgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2J6aXAyL2J6aXAyXzEuMC42LmJiCmluZGV4IGY3MTdkODUuLmVmN2JjODkgMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvYnppcDIvYnppcDJfMS4wLjYuYmIKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9iemlwMi9iemlwMl8xLjAuNi5iYgpAQCAtMTIsNyArMTIsOSBAQAogICAgICAgICAgICBmaWxlOi8vZml4LWJ1bnppcDItcXQtcmV0dXJucy0wLWZvci1jb3JydXB0LWFyY2hpdmVzLnBhdGNoIFwKICAgICAgICAgICAgZmlsZTovL2NvbmZpZ3VyZS5hYztzdWJkaXI9JHtCUH0gXAogICAgICAgICAgICBmaWxlOi8vTWFrZWZpbGUuYW07c3ViZGlyPSR7QlB9IFwKLSAgICAgICAgICAgZmlsZTovL3J1bi1wdGVzdCIKKyAgICAgICAgICAgZmlsZTovL3J1bi1wdGVzdCBcCisgICAgICAgICAgIGZpbGU6Ly9DVkUtMjAxNi0zMTg5LnBhdGNoIFwKKyAgICAgICAgICAgIgogCiBTUkNfVVJJW21kNXN1bV0gPSAiMDBiNTE2ZjQ3MDRkNGE3Y2I1MGExZDk3ZTZlOGUxNWIiCiBTUkNfVVJJW3NoYTI1NnN1bV0gPSAiYTI4NDhmMzRmY2Q1ZDZjZjQ3ZGVmMDA0NjFmY2I1MjhhMDQ4NGQ4ZWRlZjgyMDhkNmQyZTI5MDlkYzYxZDljZCIKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvY3Bpby9jcGlvX3YyLmluYyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvY3Bpby9jcGlvX3YyLmluYwppbmRleCAxYmRjNjE3Li4zMWFkYjcxIDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2NwaW8vY3Bpb192Mi5pbmMKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9jcGlvL2NwaW9fdjIuaW5jCkBAIC0zOSwzICszOSw1IEBACiAKIEFMVEVSTkFUSVZFX1BSSU9SSVRZW3JtdF0gPSAiNTAiCiBBTFRFUk5BVElWRV9MSU5LX05BTUVbcm10XSA9ICIke2Jhc2Vfc2JpbmRpcn0vcm10IgorCitCQkNMQVNTRVhURU5EID0gIm5hdGl2ZSIKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvY3JhY2tsaWIvY3JhY2tsaWIvMDAwMS1BcHBseS1wYXRjaC10by1maXgtQ1ZFLTIwMTYtNjMxOC5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvY3JhY2tsaWIvY3JhY2tsaWIvMDAwMS1BcHBseS1wYXRjaC10by1maXgtQ1ZFLTIwMTYtNjMxOC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMjUxYWM5Ci0tLSAvZGV2L251bGwKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9jcmFja2xpYi9jcmFja2xpYi8wMDAxLUFwcGx5LXBhdGNoLXRvLWZpeC1DVkUtMjAxNi02MzE4LnBhdGNoCkBAIC0wLDAgKzEsMTA1IEBACitGcm9tIDQ3ZTVkZWM1MjFhYjYyNDNjOWIyNDlkZDY1YjkzZDIzMmQ5MGQ2YjEgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBKYW4gRGl0dGJlcm5lciA8amFuQGRpdHRiZXJuZXIuaW5mbz4KK0RhdGU6IFRodSwgMjUgQXVnIDIwMTYgMTc6MTM6NDkgKzAyMDAKK1N1YmplY3Q6IFtQQVRDSF0gQXBwbHkgcGF0Y2ggdG8gZml4IENWRS0yMDE2LTYzMTgKKworVGhpcyBwYXRjaCBmaXhlcyBhbiBpc3N1ZSB3aXRoIGEgc3RhY2stYmFzZWQgYnVmZmVyIG92ZXJmbG93IHdoZW4KK3BhcnNpbmcgbGFyZ2UgR0VDT1MgZmllbGQuIFNlZQoraHR0cHM6Ly9jdmUubWl0cmUub3JnL2NnaS1iaW4vY3ZlbmFtZS5jZ2k/bmFtZT1DVkUtMjAxNi02MzE4IGFuZAoraHR0cHM6Ly9zZWN1cml0eS10cmFja2VyLmRlYmlhbi5vcmcvdHJhY2tlci9DVkUtMjAxNi02MzE4IGZvciBtb3JlCitpbmZvcm1hdGlvbi4KKworVXBzdHJlYW0tU3RhdHVzOiBCYWNrcG9ydCBbaHR0cHM6Ly9naXRodWIuY29tL2NyYWNrbGliL2NyYWNrbGliL2NvbW1pdC80N2U1ZGVjNTIxYWI2MjQzYzliMjQ5ZGQ2NWI5M2QyMzJkOTBkNmIxXQorQ1ZFOiBDVkUtMjAxNi02MzE4CitTaWduZWQtb2ZmLWJ5OiBEZW5na2UgRHUgPGRlbmdrZS5kdUB3aW5kcml2ZXIuY29tPgorLS0tCisgbGliL2Zhc2Npc3QuYyB8IDU3ICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAxIGZpbGUgY2hhbmdlZCwgMzMgaW5zZXJ0aW9ucygrKSwgMjQgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9saWIvZmFzY2lzdC5jIGIvbGliL2Zhc2Npc3QuYworaW5kZXggYTk5NjUwOS4uZDRkZWIxNSAxMDA2NDQKKy0tLSBhL2xpYi9mYXNjaXN0LmMKKysrKyBiL2xpYi9mYXNjaXN0LmMKK0BAIC01MDIsNyArNTAyLDcgQEAgRmFzY2lzdEdlY29zVXNlcihjaGFyICpwYXNzd29yZCwgY29uc3QgY2hhciAqdXNlciwgY29uc3QgY2hhciAqZ2Vjb3MpCisgICAgIGNoYXIgZ2J1ZmZlcltTVFJJTkdTSVpFXTsKKyAgICAgY2hhciB0YnVmZmVyW1NUUklOR1NJWkVdOworICAgICBjaGFyICp1d29yZHNbU1RSSU5HU0laRV07CistICAgIGNoYXIgbG9uZ2J1ZmZlcltTVFJJTkdTSVpFICogMl07CisrICAgIGNoYXIgbG9uZ2J1ZmZlcltTVFJJTkdTSVpFXTsKKyAKKyAgICAgaWYgKGdlY29zID09IE5VTEwpCisgCWdlY29zID0gIiI7CitAQCAtNTgzLDM4ICs1ODMsNDcgQEAgRmFzY2lzdEdlY29zVXNlcihjaGFyICpwYXNzd29yZCwgY29uc3QgY2hhciAqdXNlciwgY29uc3QgY2hhciAqZ2Vjb3MpCisgICAgIHsKKyAJZm9yIChpID0gMDsgaSA8IGo7IGkrKykKKyAJeworLQkgICAgc3RyY3B5KGxvbmdidWZmZXIsIHV3b3Jkc1tpXSk7CistCSAgICBzdHJjYXQobG9uZ2J1ZmZlciwgdXdvcmRzW2pdKTsKKy0KKy0JICAgIGlmIChHVHJ5KGxvbmdidWZmZXIsIHBhc3N3b3JkKSkKKysJICAgIGlmIChzdHJsZW4odXdvcmRzW2ldKSArIHN0cmxlbih1d29yZHNbal0pIDwgU1RSSU5HU0laRSkKKyAJICAgIHsKKy0JCXJldHVybiBfKCJpdCBpcyBkZXJpdmVkIGZyb20geW91ciBwYXNzd29yZCBlbnRyeSIpOworLQkgICAgfQorKwkJc3RyY3B5KGxvbmdidWZmZXIsIHV3b3Jkc1tpXSk7CisrCQlzdHJjYXQobG9uZ2J1ZmZlciwgdXdvcmRzW2pdKTsKKyAKKy0JICAgIHN0cmNweShsb25nYnVmZmVyLCB1d29yZHNbal0pOworLQkgICAgc3RyY2F0KGxvbmdidWZmZXIsIHV3b3Jkc1tpXSk7CisrCQlpZiAoR1RyeShsb25nYnVmZmVyLCBwYXNzd29yZCkpCisrCQl7CisrCQkgICAgcmV0dXJuIF8oIml0IGlzIGRlcml2ZWQgZnJvbSB5b3VyIHBhc3N3b3JkIGVudHJ5Iik7CisrCQl9CisgCistCSAgICBpZiAoR1RyeShsb25nYnVmZmVyLCBwYXNzd29yZCkpCistCSAgICB7CistCQlyZXR1cm4gXygiaXQncyBkZXJpdmVkIGZyb20geW91ciBwYXNzd29yZCBlbnRyeSIpOworLQkgICAgfQorKwkJc3RyY3B5KGxvbmdidWZmZXIsIHV3b3Jkc1tqXSk7CisrCQlzdHJjYXQobG9uZ2J1ZmZlciwgdXdvcmRzW2ldKTsKKyAKKy0JICAgIGxvbmdidWZmZXJbMF0gPSB1d29yZHNbaV1bMF07CistCSAgICBsb25nYnVmZmVyWzFdID0gJ1wwJzsKKy0JICAgIHN0cmNhdChsb25nYnVmZmVyLCB1d29yZHNbal0pOworKwkJaWYgKEdUcnkobG9uZ2J1ZmZlciwgcGFzc3dvcmQpKQorKwkJeworKwkJICAgcmV0dXJuIF8oIml0J3MgZGVyaXZlZCBmcm9tIHlvdXIgcGFzc3dvcmQgZW50cnkiKTsKKysJCX0KKysJICAgIH0KKyAKKy0JICAgIGlmIChHVHJ5KGxvbmdidWZmZXIsIHBhc3N3b3JkKSkKKysJICAgIGlmIChzdHJsZW4odXdvcmRzW2pdKSA8IFNUUklOR1NJWkUgLSAxKQorIAkgICAgeworLQkJcmV0dXJuIF8oIml0IGlzIGRlcml2YWJsZSBmcm9tIHlvdXIgcGFzc3dvcmQgZW50cnkiKTsKKysJCWxvbmdidWZmZXJbMF0gPSB1d29yZHNbaV1bMF07CisrCQlsb25nYnVmZmVyWzFdID0gJ1wwJzsKKysJCXN0cmNhdChsb25nYnVmZmVyLCB1d29yZHNbal0pOworKworKwkJaWYgKEdUcnkobG9uZ2J1ZmZlciwgcGFzc3dvcmQpKQorKwkJeworKwkJICAgIHJldHVybiBfKCJpdCBpcyBkZXJpdmFibGUgZnJvbSB5b3VyIHBhc3N3b3JkIGVudHJ5Iik7CisrCQl9CisgCSAgICB9CisgCistCSAgICBsb25nYnVmZmVyWzBdID0gdXdvcmRzW2pdWzBdOworLQkgICAgbG9uZ2J1ZmZlclsxXSA9ICdcMCc7CistCSAgICBzdHJjYXQobG9uZ2J1ZmZlciwgdXdvcmRzW2ldKTsKKy0KKy0JICAgIGlmIChHVHJ5KGxvbmdidWZmZXIsIHBhc3N3b3JkKSkKKysJICAgIGlmIChzdHJsZW4odXdvcmRzW2ldKSA8IFNUUklOR1NJWkUgLSAxKQorIAkgICAgeworLQkJcmV0dXJuIF8oIml0J3MgZGVyaXZhYmxlIGZyb20geW91ciBwYXNzd29yZCBlbnRyeSIpOworKwkJbG9uZ2J1ZmZlclswXSA9IHV3b3Jkc1tqXVswXTsKKysJCWxvbmdidWZmZXJbMV0gPSAnXDAnOworKwkJc3RyY2F0KGxvbmdidWZmZXIsIHV3b3Jkc1tpXSk7CisrCisrCQlpZiAoR1RyeShsb25nYnVmZmVyLCBwYXNzd29yZCkpCisrCQl7CisrCQkgICAgcmV0dXJuIF8oIml0J3MgZGVyaXZhYmxlIGZyb20geW91ciBwYXNzd29yZCBlbnRyeSIpOworKwkJfQorIAkgICAgfQorIAl9CisgICAgIH0KKy0tIAorMi44LjEKKwpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9jcmFja2xpYi9jcmFja2xpYl8yLjkuNS5iYiBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvY3JhY2tsaWIvY3JhY2tsaWJfMi45LjUuYmIKaW5kZXggM2JkM2Y5My4uODI5OTUyMSAxMDA2NDQKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9jcmFja2xpYi9jcmFja2xpYl8yLjkuNS5iYgorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2NyYWNrbGliL2NyYWNrbGliXzIuOS41LmJiCkBAIC00LDE1ICs0LDEzIEBACiBMSUNFTlNFID0gIkxHUEx2Mi4xKyIKIExJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkcuTElCO21kNT1lM2VkYTAxZDk4MTVmOGQyNGFhZTJkYmQ4OWI2OGIwNiIKIAotREVQRU5EUyA9ICJjcmFja2xpYi1uYXRpdmUgemxpYiBweXRob24iCi1SREVQRU5EXyR7UE59LXB5dGhvbiArPSAicHl0aG9uIgorREVQRU5EUyA9ICJjcmFja2xpYi1uYXRpdmUgemxpYiIKIAotUEFDS0FHRVMgKz0gIiR7UE59LXB5dGhvbiIKLQotRVhUUkFfT0VDT05GID0gIi0td2l0aC1weXRob24gLS1saWJkaXI9JHtiYXNlX2xpYmRpcn0iCitFWFRSQV9PRUNPTkYgPSAiLS13aXRob3V0LXB5dGhvbiAtLWxpYmRpcj0ke2Jhc2VfbGliZGlyfSIKIAogU1JDX1VSSSA9ICIke1NPVVJDRUZPUkdFX01JUlJPUn0vY3JhY2tsaWIvY3JhY2tsaWItJHtQVn0udGFyLmd6IFwKICAgICAgICAgICAgZmlsZTovLzAwMDEtcGFja2xpYi5jLXN1cHBvcnQtZGljdGlvbmFyeS1ieXRlLW9yZGVyLWRlcGVuZGVudC5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly8wMDAxLUFwcGx5LXBhdGNoLXRvLWZpeC1DVkUtMjAxNi02MzE4LnBhdGNoIFwKICAgICAgICAgICAgZmlsZTovLzAwMDItY3Jha2xpYi1maXgtdGVzdG51bS1hbmQtdGVzdHN0ci1mYWlsZWQucGF0Y2giCiAKIFNSQ19VUklbbWQ1c3VtXSA9ICIzNzY3OTBhOTVjMWZiNjQ1ZTU5ZTZlOTgwM2M3ODU4MiIKQEAgLTIxLDI3ICsxOSwxMSBAQAogVVBTVFJFQU1fQ0hFQ0tfVVJJID0gImh0dHA6Ly9zb3VyY2Vmb3JnZS5uZXQvcHJvamVjdHMvY3JhY2tsaWIvZmlsZXMvY3JhY2tsaWIvIgogVVBTVFJFQU1fQ0hFQ0tfUkVHRVggPSAiL2NyYWNrbGliLyg/UDxwdmVyPihcZCtbXC5cLV9dKikrKS8iCiAKLWluaGVyaXQgYXV0b3Rvb2xzIGdldHRleHQgcHl0aG9ubmF0aXZlIHB5dGhvbi1kaXIKK2luaGVyaXQgYXV0b3Rvb2xzIGdldHRleHQKIAogZG9faW5zdGFsbF9hcHBlbmRfY2xhc3MtdGFyZ2V0KCkgewogCWNyZWF0ZS1jcmFja2xpYi1kaWN0IC1vICR7RH0ke2RhdGFkaXJ9L2NyYWNrbGliL3B3X2RpY3QgJHtEfSR7ZGF0YWRpcn0vY3JhY2tsaWIvY3JhY2tsaWItc21hbGwKIH0KIAotZG9faW5zdGFsbF9hcHBlbmQoKSB7Ci0Jc3JjX2Rpcj0iJHtEfSR7YmFzZV9saWJkaXJ9LyR7UFlUSE9OX0RJUn0vc2l0ZS1wYWNrYWdlcyIKLQlybSAtZiAkc3JjX2Rpci90ZXN0X2NyYWNrbGliLnB5KgotCi0JaWYgWyAiJHtiYXNlX2xpYmRpcn0iICE9ICIke2xpYmRpcn0iIF0gOyB0aGVuCi0JICAgIyBNb3ZlIHB5dGhvbiBmaWxlcyBmcm9tICR7YmFzZV9saWJkaXJ9IHRvICR7bGliZGlyfSBzaW5jZSB1c2VkIC0tbGliZGlyPSR7YmFzZV9saWJkaXJ9Ci0JICAgaW5zdGFsbCAtZCAtbSAwNzU1ICR7RH0ke1BZVEhPTl9TSVRFUEFDS0FHRVNfRElSfS8KLQkgICBtdiAkc3JjX2Rpci8qICR7RH0ke1BZVEhPTl9TSVRFUEFDS0FHRVNfRElSfQotCSAgIHJtIC1mciAke0R9JHtiYXNlX2xpYmRpcn0vJHtQWVRIT05fRElSfQotCWZpCi19Ci0KIEJCQ0xBU1NFWFRFTkQgPSAibmF0aXZlIG5hdGl2ZXNkayIKIAotRklMRVNfJHtQTn0tcHl0aG9uID0gIiR7UFlUSE9OX1NJVEVQQUNLQUdFU19ESVJ9L2NyYWNrbGliLnB5KiBcCi0JJHtQWVRIT05fU0lURVBBQ0tBR0VTX0RJUn0vX2NyYWNrbGliLioiCi0KLUZJTEVTXyR7UE59LXN0YXRpY2RldiArPSAiJHtQWVRIT05fU0lURVBBQ0tBR0VTX0RJUn0vX2NyYWNrbGliLmEiCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2Nyb25pZS9jcm9uaWUvY3JvbmRfcGFtX2NvbmZpZy5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvY3JvbmllL2Nyb25pZS9jcm9uZF9wYW1fY29uZmlnLnBhdGNoCmluZGV4IDY3NTg3MmMuLjZjOTI4MTYgMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvY3JvbmllL2Nyb25pZS9jcm9uZF9wYW1fY29uZmlnLnBhdGNoCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvY3JvbmllL2Nyb25pZS9jcm9uZF9wYW1fY29uZmlnLnBhdGNoCkBAIC00LDE2ICs0LDE5IEBACiBVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKIAogU2lnbmVkLW9mZi1ieTogV2Vuem9uZyBGYW4gPHdlbnpvbmcuZmFuQHdpbmRyaXZlci5jb20+Ci0tLS0gY3JvbmllLTEuNC43L3BhbS9jcm9uZC5vcmlnCTIwMTAtMTItMTYgMTY6NTk6MDIuMDAwMDAwMDAwICswODAwCi0rKysgY3JvbmllLTEuNC43L3BhbS9jcm9uZAkyMDExLTA3LTIwIDA5OjQ3OjE2LjA4MDgxOTIwMyArMDgwMAotQEAgLTQsNyArNCw3IEBACitJbmRleDogY3JvbmllLTEuNS4xL3BhbS9jcm9uZAorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGNyb25pZS0xLjUuMS5vcmlnL3BhbS9jcm9uZAorKysrIGNyb25pZS0xLjUuMS9wYW0vY3JvbmQKK0BAIC00LDggKzQsOCBAQAogICMKLSAjIE5vIFBBTSBhdXRoZW50aWNhdGlvbiBjYWxsZWQsIGF1dGggbW9kdWxlcyBub3QgbmVlZGVkCisgIyBBbHRob3VnaCBubyBQQU0gYXV0aGVudGljYXRpb24gaXMgY2FsbGVkLCBhdXRoIG1vZHVsZXMKKyAjIGFyZSB1c2VkIGZvciBjcmVkZW50aWFsIHNldHRpbmcKKy1hdXRoICAgICAgIGluY2x1ZGUgICAgcGFzc3dvcmQtYXV0aAorK2F1dGggICAgICAgaW5jbHVkZSAgICBjb21tb24tYXV0aAogIGFjY291bnQgICAgcmVxdWlyZWQgICBwYW1fYWNjZXNzLnNvCiAtYWNjb3VudCAgICBpbmNsdWRlICAgIHBhc3N3b3JkLWF1dGgKICthY2NvdW50ICAgIGluY2x1ZGUgICAgY29tbW9uLWFjY291bnQKICBzZXNzaW9uICAgIHJlcXVpcmVkICAgcGFtX2xvZ2ludWlkLnNvCiAtc2Vzc2lvbiAgICBpbmNsdWRlICAgIHBhc3N3b3JkLWF1dGgKLS1hdXRoICAgICAgIGluY2x1ZGUgICAgcGFzc3dvcmQtYXV0aAogK3Nlc3Npb24gICAgaW5jbHVkZSAgICBjb21tb24tc2Vzc2lvbi1ub25pbnRlcmFjdGl2ZQotK2F1dGggICAgICAgaW5jbHVkZSAgICBjb21tb24tYXV0aApkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9jcm9uaWUvY3JvbmllXzEuNS4wLmJiIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9jcm9uaWUvY3JvbmllXzEuNS4wLmJiCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2OTc1MDFhLi4wMDAwMDAwCi0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvY3JvbmllL2Nyb25pZV8xLjUuMC5iYgorKysgL2Rldi9udWxsCkBAIC0xLDgxICswLDAgQEAKLVNVTU1BUlkgPSAiQ3JvbiBkYWVtb24gZm9yIGV4ZWN1dGluZyBwcm9ncmFtcyBhdCBzZXQgdGltZXMiCi1ERVNDUklQVElPTiA9ICJDcm9uaWUgY29udGFpbnMgdGhlIHN0YW5kYXJkIFVOSVggZGFlbW9uIGNyb25kIHRoYXQgcnVucyBcCi1zcGVjaWZpZWQgcHJvZ3JhbXMgYXQgc2NoZWR1bGVkIHRpbWVzIGFuZCByZWxhdGVkIHRvb2xzLiBJdCBpcyBiYXNlZCBvbiB0aGUgXAotb3JpZ2luYWwgY3JvbiBhbmQgaGFzIHNlY3VyaXR5IGFuZCBjb25maWd1cmF0aW9uIGVuaGFuY2VtZW50cyBsaWtlIHRoZSBcCi1hYmlsaXR5IHRvIHVzZSBwYW0gYW5kIFNFTGludXguIgotSE9NRVBBR0UgPSAiaHR0cHM6Ly9mZWRvcmFob3N0ZWQub3JnL2Nyb25pZS8iCi1CVUdUUkFDS0VSID0gImh0dHBzOi8vYnVnemlsbGEucmVkaGF0LmNvbSIKLQotIyBJbnRlcm5ldCBTeXN0ZW1zIENvbnNvcnRpdW0gTGljZW5zZQotTElDRU5TRSA9ICJJU0MgJiBCU0QtMy1DbGF1c2UgJiBCU0QtMi1DbGF1c2UgJiBHUEx2MisiCi1MSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT1kZDJhNTkyMTcwNzYwZTEzODZjNzY5ZTEwNDNiMzcyMiBcCi0gICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9zcmMvY3Jvbi5jO2VuZGxpbmU9MjA7bWQ1PWI0MjVjMzM0MjY1MDI2MTc3MTI4MzUzYTE0MjYzM2I0IFwKLSAgICAgICAgICAgICAgICAgICAgZmlsZTovL3NyYy9wb3Blbi5jO2JlZ2lubGluZT0zO2VuZGxpbmU9MzE7bWQ1PWVkZDUwNzQyZDhkZWY3MTJlOTQ3MmRiYTM1MzY2OGE5IgotCi1TRUNUSU9OID0gInV0aWxzIgotCi1TUkNfVVJJID0gImh0dHBzOi8vZmVkb3JhaG9zdGVkLm9yZy9yZWxlYXNlcy9jL3IvY3JvbmllL2Nyb25pZS0ke1BWfS50YXIuZ3ogXAotICAgICAgICAgICBmaWxlOi8vY3JvbmQuaW5pdCBcCi0gICAgICAgICAgIGZpbGU6Ly9jcm9udGFiIFwKLSAgICAgICAgICAgZmlsZTovL2Nyb25kLnNlcnZpY2UgXAotICAgICAgICAgICAke0BiYi51dGlscy5jb250YWlucygnRElTVFJPX0ZFQVRVUkVTJywgJ3BhbScsICcke1BBTV9TUkNfVVJJfScsICcnLCBkKX0iCi0KLVBBTV9TUkNfVVJJID0gImZpbGU6Ly9jcm9uZF9wYW1fY29uZmlnLnBhdGNoIgotUEFNX0RFUFMgPSAibGlicGFtIGxpYnBhbS1ydW50aW1lIHBhbS1wbHVnaW4tYWNjZXNzIHBhbS1wbHVnaW4tbG9naW51aWQiCi0KLVNSQ19VUklbbWQ1c3VtXSA9ICI5ZGI3NWUxODg0ZDgzYTQ1ZTAwMmQxNDVjNmM1NGQ0NSIKLVNSQ19VUklbc2hhMjU2c3VtXSA9ICI5Y2YwZTNmNGY1MDQyYTljMDk0MTNkNjJjOGUwYzA1NWUxMjQwMWY3MGIxMTI0NjVmMGY4MWYyYzg0ZWJmYjNmIgotCi1pbmhlcml0IGF1dG90b29scyB1cGRhdGUtcmMuZCB1c2VyYWRkIHN5c3RlbWQKLQotUEFDS0FHRUNPTkZJRyA/PSAiJHtAYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsICdwYW0nLCAncGFtJywgJycsIGQpfSIKLQotUEFDS0FHRUNPTkZJR1thdWRpdF0gPSAiLS13aXRoLWF1ZGl0LC0td2l0aG91dC1hdWRpdCxhdWRpdCwiCi1QQUNLQUdFQ09ORklHW3BhbV0gPSAiLS13aXRoLXBhbSwtLXdpdGhvdXQtcGFtLGxpYnBhbSwke1BBTV9ERVBTfSIKLQotSU5JVFNDUklQVF9OQU1FID0gImNyb25kIgotSU5JVFNDUklQVF9QQVJBTVMgPSAic3RhcnQgOTAgMiAzIDQgNSAuIHN0b3AgNjAgMCAxIDYgLiIKLQotVVNFUkFERF9QQUNLQUdFUyA9ICIke1BOfSIKLUdST1VQQUREX1BBUkFNXyR7UE59ID0gIi0tc3lzdGVtIGNyb250YWIiCi0KLVNZU1RFTURfU0VSVklDRV8ke1BOfSA9ICJjcm9uZC5zZXJ2aWNlIgotCi1kb19pbnN0YWxsX2FwcGVuZCAoKSB7Ci0JaW5zdGFsbCAtZCAke0R9JHtzeXNjb25mZGlyfS9zeXNjb25maWcvCi0JaW5zdGFsbCAtZCAke0R9JHtzeXNjb25mZGlyfS9pbml0LmQvCi0JaW5zdGFsbCAtbSAwNjQ0ICR7U30vY3JvbmQuc3lzY29uZmlnICR7RH0ke3N5c2NvbmZkaXJ9L3N5c2NvbmZpZy9jcm9uZAotCWluc3RhbGwgLW0gMDc1NSAke1dPUktESVJ9L2Nyb25kLmluaXQgJHtEfSR7c3lzY29uZmRpcn0vaW5pdC5kL2Nyb25kCi0KLQkjIGluc3RhbGwgc3lzdGVtZCB1bml0IGZpbGVzCi0JaW5zdGFsbCAtZCAke0R9JHtzeXN0ZW1kX3VuaXRkaXJ9L3N5c3RlbQotCWluc3RhbGwgLW0gMDY0NCAke1dPUktESVJ9L2Nyb25kLnNlcnZpY2UgJHtEfSR7c3lzdGVtZF91bml0ZGlyfS9zeXN0ZW0KLQlzZWQgLWkgLWUgJ3MsQEJBU0VfQklORElSQCwke2Jhc2VfYmluZGlyfSxnJyBcCi0JICAgICAgIC1lICdzLEBTQklORElSQCwke3NiaW5kaXJ9LGcnIFwKLQkgICAgICAgJHtEfSR7c3lzdGVtZF91bml0ZGlyfS9zeXN0ZW0vY3JvbmQuc2VydmljZQotCi0JIyBiZWxvdyBhcmUgbmVjZXNzYXJ5IGZvciBhIGNvbXBsZXRlIGNyb24gZW52aXJvbm1lbnQKLQlpbnN0YWxsIC1kICR7RH0ke2xvY2Fsc3RhdGVkaXJ9L3Nwb29sL2Nyb24KLQlpbnN0YWxsIC1tIDA3NTUgJHtXT1JLRElSfS9jcm9udGFiICR7RH0ke3N5c2NvbmZkaXJ9LwotCW1rZGlyIC1wICR7RH0ke3N5c2NvbmZkaXJ9L2Nyb24uZAotCW1rZGlyIC1wICR7RH0ke3N5c2NvbmZkaXJ9L2Nyb24uaG91cmx5Ci0JbWtkaXIgLXAgJHtEfSR7c3lzY29uZmRpcn0vY3Jvbi5kYWlseQotCW1rZGlyIC1wICR7RH0ke3N5c2NvbmZkaXJ9L2Nyb24ud2Vla2x5Ci0JbWtkaXIgLXAgJHtEfSR7c3lzY29uZmRpcn0vY3Jvbi5tb250aGx5Ci0JdG91Y2ggJHtEfSR7c3lzY29uZmRpcn0vY3Jvbi5kZW55Ci0KLQkjIGJlbG93IHNldHRpbmcgaXMgbmVjZXNzYXJ5IHRvIGFsbG93IG5vcm1hbCB1c2VyIHVzaW5nIGNyb250YWIKLQotCSMgc2V0Z2lkIGZvciBjcm9udGFiIGJpbmFyeQotCWNob3duIHJvb3Q6Y3JvbnRhYiAke0R9JHtiaW5kaXJ9L2Nyb250YWIKLQljaG1vZCAyNzU1ICR7RH0ke2JpbmRpcn0vY3JvbnRhYgotCi0JIyBhbGxvdyAnY3JvbnRhYicgZ3JvdXAgd3JpdGUgdG8gL3Zhci9zcG9vbC9jcm9uCi0JY2hvd24gcm9vdDpjcm9udGFiICR7RH0ke2xvY2Fsc3RhdGVkaXJ9L3Nwb29sL2Nyb24KLQljaG1vZCA3NzAgJHtEfSR7bG9jYWxzdGF0ZWRpcn0vc3Bvb2wvY3JvbgotCi0JY2htb2QgNjAwICR7RH0ke3N5c2NvbmZkaXJ9L2Nyb250YWIKLX0KLQotRklMRVNfJHtQTn0gKz0gIiR7c3lzY29uZmRpcn0vY3JvbioiCi1DT05GRklMRVNfJHtQTn0gKz0gIiR7c3lzY29uZmRpcn0vY3JvbnRhYiIKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvY3JvbmllL2Nyb25pZV8xLjUuMS5iYiBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvY3JvbmllL2Nyb25pZV8xLjUuMS5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45OWIyYmI1Ci0tLSAvZGV2L251bGwKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9jcm9uaWUvY3JvbmllXzEuNS4xLmJiCkBAIC0wLDAgKzEsODEgQEAKK1NVTU1BUlkgPSAiQ3JvbiBkYWVtb24gZm9yIGV4ZWN1dGluZyBwcm9ncmFtcyBhdCBzZXQgdGltZXMiCitERVNDUklQVElPTiA9ICJDcm9uaWUgY29udGFpbnMgdGhlIHN0YW5kYXJkIFVOSVggZGFlbW9uIGNyb25kIHRoYXQgcnVucyBcCitzcGVjaWZpZWQgcHJvZ3JhbXMgYXQgc2NoZWR1bGVkIHRpbWVzIGFuZCByZWxhdGVkIHRvb2xzLiBJdCBpcyBiYXNlZCBvbiB0aGUgXAorb3JpZ2luYWwgY3JvbiBhbmQgaGFzIHNlY3VyaXR5IGFuZCBjb25maWd1cmF0aW9uIGVuaGFuY2VtZW50cyBsaWtlIHRoZSBcCithYmlsaXR5IHRvIHVzZSBwYW0gYW5kIFNFTGludXguIgorSE9NRVBBR0UgPSAiaHR0cHM6Ly9mZWRvcmFob3N0ZWQub3JnL2Nyb25pZS8iCitCVUdUUkFDS0VSID0gImh0dHBzOi8vYnVnemlsbGEucmVkaGF0LmNvbSIKKworIyBJbnRlcm5ldCBTeXN0ZW1zIENvbnNvcnRpdW0gTGljZW5zZQorTElDRU5TRSA9ICJJU0MgJiBCU0QtMy1DbGF1c2UgJiBCU0QtMi1DbGF1c2UgJiBHUEx2MisiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT1kZDJhNTkyMTcwNzYwZTEzODZjNzY5ZTEwNDNiMzcyMiBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9zcmMvY3Jvbi5jO2VuZGxpbmU9MjA7bWQ1PWI0MjVjMzM0MjY1MDI2MTc3MTI4MzUzYTE0MjYzM2I0IFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL3NyYy9wb3Blbi5jO2JlZ2lubGluZT0zO2VuZGxpbmU9MzE7bWQ1PWVkZDUwNzQyZDhkZWY3MTJlOTQ3MmRiYTM1MzY2OGE5IgorCitTRUNUSU9OID0gInV0aWxzIgorCitTUkNfVVJJID0gImh0dHBzOi8vZmVkb3JhaG9zdGVkLm9yZy9yZWxlYXNlcy9jL3IvY3JvbmllL2Nyb25pZS0ke1BWfS50YXIuZ3ogXAorICAgICAgICAgICBmaWxlOi8vY3JvbmQuaW5pdCBcCisgICAgICAgICAgIGZpbGU6Ly9jcm9udGFiIFwKKyAgICAgICAgICAgZmlsZTovL2Nyb25kLnNlcnZpY2UgXAorICAgICAgICAgICAke0BiYi51dGlscy5jb250YWlucygnRElTVFJPX0ZFQVRVUkVTJywgJ3BhbScsICcke1BBTV9TUkNfVVJJfScsICcnLCBkKX0iCisKK1BBTV9TUkNfVVJJID0gImZpbGU6Ly9jcm9uZF9wYW1fY29uZmlnLnBhdGNoIgorUEFNX0RFUFMgPSAibGlicGFtIGxpYnBhbS1ydW50aW1lIHBhbS1wbHVnaW4tYWNjZXNzIHBhbS1wbHVnaW4tbG9naW51aWQiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICI5MTBlNmVmZmNjMDMyOTk4YjBhNDlmYmQ0NjMyMmUxOCIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICI2YzczNjY2MTAyYTZiNWQzNWUyZWFmMWJkMDY5MjVmMmQ0YjBjZWY4ZDMzMjNjMzcyODZkZGEzMDg5YTg1MzM4IgorCitpbmhlcml0IGF1dG90b29scyB1cGRhdGUtcmMuZCB1c2VyYWRkIHN5c3RlbWQKKworUEFDS0FHRUNPTkZJRyA/PSAiJHtAYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsICdwYW0nLCAncGFtJywgJycsIGQpfSIKKworUEFDS0FHRUNPTkZJR1thdWRpdF0gPSAiLS13aXRoLWF1ZGl0LC0td2l0aG91dC1hdWRpdCxhdWRpdCwiCitQQUNLQUdFQ09ORklHW3BhbV0gPSAiLS13aXRoLXBhbSwtLXdpdGhvdXQtcGFtLGxpYnBhbSwke1BBTV9ERVBTfSIKKworSU5JVFNDUklQVF9OQU1FID0gImNyb25kIgorSU5JVFNDUklQVF9QQVJBTVMgPSAic3RhcnQgOTAgMiAzIDQgNSAuIHN0b3AgNjAgMCAxIDYgLiIKKworVVNFUkFERF9QQUNLQUdFUyA9ICIke1BOfSIKK0dST1VQQUREX1BBUkFNXyR7UE59ID0gIi0tc3lzdGVtIGNyb250YWIiCisKK1NZU1RFTURfU0VSVklDRV8ke1BOfSA9ICJjcm9uZC5zZXJ2aWNlIgorCitkb19pbnN0YWxsX2FwcGVuZCAoKSB7CisJaW5zdGFsbCAtZCAke0R9JHtzeXNjb25mZGlyfS9zeXNjb25maWcvCisJaW5zdGFsbCAtZCAke0R9JHtzeXNjb25mZGlyfS9pbml0LmQvCisJaW5zdGFsbCAtbSAwNjQ0ICR7U30vY3JvbmQuc3lzY29uZmlnICR7RH0ke3N5c2NvbmZkaXJ9L3N5c2NvbmZpZy9jcm9uZAorCWluc3RhbGwgLW0gMDc1NSAke1dPUktESVJ9L2Nyb25kLmluaXQgJHtEfSR7c3lzY29uZmRpcn0vaW5pdC5kL2Nyb25kCisKKwkjIGluc3RhbGwgc3lzdGVtZCB1bml0IGZpbGVzCisJaW5zdGFsbCAtZCAke0R9JHtzeXN0ZW1kX3VuaXRkaXJ9L3N5c3RlbQorCWluc3RhbGwgLW0gMDY0NCAke1dPUktESVJ9L2Nyb25kLnNlcnZpY2UgJHtEfSR7c3lzdGVtZF91bml0ZGlyfS9zeXN0ZW0KKwlzZWQgLWkgLWUgJ3MsQEJBU0VfQklORElSQCwke2Jhc2VfYmluZGlyfSxnJyBcCisJICAgICAgIC1lICdzLEBTQklORElSQCwke3NiaW5kaXJ9LGcnIFwKKwkgICAgICAgJHtEfSR7c3lzdGVtZF91bml0ZGlyfS9zeXN0ZW0vY3JvbmQuc2VydmljZQorCisJIyBiZWxvdyBhcmUgbmVjZXNzYXJ5IGZvciBhIGNvbXBsZXRlIGNyb24gZW52aXJvbm1lbnQKKwlpbnN0YWxsIC1kICR7RH0ke2xvY2Fsc3RhdGVkaXJ9L3Nwb29sL2Nyb24KKwlpbnN0YWxsIC1tIDA3NTUgJHtXT1JLRElSfS9jcm9udGFiICR7RH0ke3N5c2NvbmZkaXJ9LworCW1rZGlyIC1wICR7RH0ke3N5c2NvbmZkaXJ9L2Nyb24uZAorCW1rZGlyIC1wICR7RH0ke3N5c2NvbmZkaXJ9L2Nyb24uaG91cmx5CisJbWtkaXIgLXAgJHtEfSR7c3lzY29uZmRpcn0vY3Jvbi5kYWlseQorCW1rZGlyIC1wICR7RH0ke3N5c2NvbmZkaXJ9L2Nyb24ud2Vla2x5CisJbWtkaXIgLXAgJHtEfSR7c3lzY29uZmRpcn0vY3Jvbi5tb250aGx5CisJdG91Y2ggJHtEfSR7c3lzY29uZmRpcn0vY3Jvbi5kZW55CisKKwkjIGJlbG93IHNldHRpbmcgaXMgbmVjZXNzYXJ5IHRvIGFsbG93IG5vcm1hbCB1c2VyIHVzaW5nIGNyb250YWIKKworCSMgc2V0Z2lkIGZvciBjcm9udGFiIGJpbmFyeQorCWNob3duIHJvb3Q6Y3JvbnRhYiAke0R9JHtiaW5kaXJ9L2Nyb250YWIKKwljaG1vZCAyNzU1ICR7RH0ke2JpbmRpcn0vY3JvbnRhYgorCisJIyBhbGxvdyAnY3JvbnRhYicgZ3JvdXAgd3JpdGUgdG8gL3Zhci9zcG9vbC9jcm9uCisJY2hvd24gcm9vdDpjcm9udGFiICR7RH0ke2xvY2Fsc3RhdGVkaXJ9L3Nwb29sL2Nyb24KKwljaG1vZCA3NzAgJHtEfSR7bG9jYWxzdGF0ZWRpcn0vc3Bvb2wvY3JvbgorCisJY2htb2QgNjAwICR7RH0ke3N5c2NvbmZkaXJ9L2Nyb250YWIKK30KKworRklMRVNfJHtQTn0gKz0gIiR7c3lzY29uZmRpcn0vY3JvbioiCitDT05GRklMRVNfJHtQTn0gKz0gIiR7c3lzY29uZmRpcn0vY3JvbnRhYiIKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvY3Vwcy9jdXBzLmluYyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvY3Vwcy9jdXBzLmluYwppbmRleCA0YjJkMjE0Li4wMmI2MzU4IDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2N1cHMvY3Vwcy5pbmMKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9jdXBzL2N1cHMuaW5jCkBAIC0zLDEzICszLDEzIEBACiBMSUNFTlNFID0gIkdQTHYyICYgTEdQTHYyIgogREVQRU5EUyA9ICJnbnV0bHMgbGlicG5nIGpwZWcgZGJ1cyBkYnVzLWdsaWIgemxpYiBsaWJ1c2IiCiAKLVNSQ19VUkkgPSAiaHR0cHM6Ly93d3cuY3Vwcy5vcmcvc29mdHdhcmUvJHtQVn0vJHtCUH0tc291cmNlLnRhci5iejIgXAorU1JDX1VSSSA9ICJodHRwczovL2dpdGh1Yi5jb20vYXBwbGUvY3Vwcy9yZWxlYXNlcy9kb3dubG9hZC9yZWxlYXNlLSR7UFZ9LyR7QlB9LXNvdXJjZS50YXIuZ3ogXAogICAgICAgICAgICBmaWxlOi8vdXNlX2VjaG9fb25seV9pbl9pbml0LnBhdGNoIFwKICAgICAgICAgICAgZmlsZTovLzAwMDEtZG9uLXQtdHJ5LXRvLXJ1bi1nZW5lcmF0ZWQtYmluYXJpZXMucGF0Y2ggXAogICAgICAgICAgICBmaWxlOi8vY3Vwc19zZXJ2ZXJiaW4ucGF0Y2ggXAogCSAgIgogCi1VUFNUUkVBTV9DSEVDS19VUkkgPSAiaHR0cDovL3d3dy5jdXBzLm9yZy9zb2Z0d2FyZS5waHAiCitVUFNUUkVBTV9DSEVDS19VUkkgPSAiaHR0cHM6Ly9naXRodWIuY29tL2FwcGxlL2N1cHMvcmVsZWFzZXMiCiBVUFNUUkVBTV9DSEVDS19SRUdFWCA9ICJjdXBzLSg/UDxwdmVyPlxkK1wuXGQrKFwuXGQrKT8pLXNvdXJjZS50YXIiCiAKIExFQURfU09OQU1FID0gImxpYmN1cHNkcml2ZXIuc28iCkBAIC00NCw2ICs0NCw3IEBACiAgICAgICAgICAgICAgICAtLXdpdGhvdXQtcGVybCBcCiAgICAgICAgICAgICAgICAtLXdpdGhvdXQtcHl0aG9uIFwKICAgICAgICAgICAgICAgIC0td2l0aG91dC1qYXZhIFwKKyAgICAgICAgICAgICAgIERTT0ZMQUdTPScke0xERkxBR1N9JyBcCiAgICAgICAgICAgICAgICAiCiAKIEVYVFJBX0FVVE9SRUNPTkYgKz0gIi0tZXhjbHVkZT1hdXRvaGVhZGVyIgpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9jdXBzL2N1cHNfMi4xLjMuYmIgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2N1cHMvY3Vwc18yLjEuMy5iYgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYWVmMjExZC4uMDAwMDAwMAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2N1cHMvY3Vwc18yLjEuMy5iYgorKysgL2Rldi9udWxsCkBAIC0xLDYgKzAsMCBAQAotcmVxdWlyZSBjdXBzLmluYwotCi1MSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9MSUNFTlNFLnR4dDttZDU9NmM1YTM1MDU5NmZiYTAyNzU0YmQ5NmViNmRmM2FmZDAiCi0KLVNSQ19VUklbbWQ1c3VtXSA9ICI2MmI4ZmFmZDU5MGU3NWY3MjMxNjkxNTc5MGIwODUwYSIKLVNSQ19VUklbc2hhMjU2c3VtXSA9ICIzNmE3MGQ0MzU4NGFlYTI2MTdkYTkxNGI5MzMxZTIzMzQxYzM1MDFhODI1NGM0ZDJlYWU5YzExZWMwMWZkNGQzIgpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9jdXBzL2N1cHNfMi4xLjQuYmIgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2N1cHMvY3Vwc18yLjEuNC5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wZmFiODA2Ci0tLSAvZGV2L251bGwKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9jdXBzL2N1cHNfMi4xLjQuYmIKQEAgLTAsMCArMSw2IEBACityZXF1aXJlIGN1cHMuaW5jCisKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0xJQ0VOU0UudHh0O21kNT02YzVhMzUwNTk2ZmJhMDI3NTRiZDk2ZWI2ZGYzYWZkMCIKKworU1JDX1VSSVttZDVzdW1dID0gIjlmOWJmNmUzYjljMjBhMzUxOWI0ZGM0MDk2NjZkNmU3IgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjRiMTRmZDgzMzE4MGFjNTI5ZWJlYmVhNzY2YTA5MDk0YzI1NjhiZjg0MjZlMjE5Y2IzYTE3MTUzMDRlZjcyOGQiCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2RpZmZ1dGlscy9kaWZmdXRpbHMtMi44LjEvZGlmZnV0aWxzX2ZpeF9mb3JfYXV0b21ha2UtMS4xMi5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvZGlmZnV0aWxzL2RpZmZ1dGlscy0yLjguMS9kaWZmdXRpbHNfZml4X2Zvcl9hdXRvbWFrZS0xLjEyLnBhdGNoCmluZGV4IGNjMDVkMWQuLmY4NjM4YmIgMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvZGlmZnV0aWxzL2RpZmZ1dGlscy0yLjguMS9kaWZmdXRpbHNfZml4X2Zvcl9hdXRvbWFrZS0xLjEyLnBhdGNoCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvZGlmZnV0aWxzL2RpZmZ1dGlscy0yLjguMS9kaWZmdXRpbHNfZml4X2Zvcl9hdXRvbWFrZS0xLjEyLnBhdGNoCkBAIC0xMCw3ICsxMCw3IEBACiB8IGNvbmZpZ3VyZS5hYzo5MDogdGhlIHRvcCBsZXZlbAogfCBhdXRvbTR0ZTogbTQgZmFpbGVkIHdpdGggZXhpdCBzdGF0dXM6IDEKIAotU2lnbmVkLU9mZi1CeTogTml0aW4gQSBLYW1ibGUgPG5pdGluLmEua2FtYmxlQGludGVsLmNvbT4KK1NpZ25lZC1vZmYtYnk6IE5pdGluIEEgS2FtYmxlIDxuaXRpbi5hLmthbWJsZUBpbnRlbC5jb20+CiAyMDEyLzA1LzA0CiAKIEluZGV4OiBkaWZmdXRpbHMtMi44LjEvbTQvcHJlcmVxLm00CmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2RpZmZ1dGlscy9kaWZmdXRpbHMtMi44LjEvZml4X2djYzYucGF0Y2ggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2RpZmZ1dGlscy9kaWZmdXRpbHMtMi44LjEvZml4X2djYzYucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjkxNTI4NwotLS0gL2Rldi9udWxsCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvZGlmZnV0aWxzL2RpZmZ1dGlscy0yLjguMS9maXhfZ2NjNi5wYXRjaApAQCAtMCwwICsxLDMxIEBACitGaXhlcyB0byBhbGxvdyBkaWZmdXRpbHMgdG8gYnVpbGQgd2l0aCBnY2MgdjYuCisKK1JQCisyMDE2LzUvMjUKKworSW5kZXg6IGRpZmZ1dGlscy0yLjguMS9saWIvcG9zaXgvcmVnZXguaAorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGRpZmZ1dGlscy0yLjguMS5vcmlnL2xpYi9wb3NpeC9yZWdleC5oCisrKysgZGlmZnV0aWxzLTIuOC4xL2xpYi9wb3NpeC9yZWdleC5oCitAQCAtNTI5LDcgKzUyOSw5IEBAIGV4dGVybiBpbnQgcmVfZXhlYyBfUkVfQVJHUyAoKGNvbnN0IGNoYXIKKyAvKiBGb3Igbm93IHVuY29uZGl0aW9uYWxseSBkZWZpbmUgX19yZXN0cmljdF9hcnIgdG8gZXhwYW5kIHRvIG5vdGhpbmcuCisgICAgSWRlYWxseSB3ZSB3b3VsZCBoYXZlIGEgdGVzdCBmb3IgdGhlIGNvbXBpbGVyIHdoaWNoIGFsbG93cyBkZWZpbmluZworICAgIGl0IHRvIHJlc3RyaWN0LiAgKi8KKysjaWZuZGVmIF9fcmVzdHJpY3RfYXJyCisgI2RlZmluZSBfX3Jlc3RyaWN0X2FycgorKyNlbmRpZgorIAorIC8qIFBPU0lYIGNvbXBhdGliaWxpdHkuICAqLworIGV4dGVybiBpbnQgcmVnY29tcCBfUkVfQVJHUyAoKHJlZ2V4X3QgKl9fcmVzdHJpY3QgX19wcmVnLAorSW5kZXg6IGRpZmZ1dGlscy0yLjguMS9zcmMvZGlmZi5jCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZGlmZnV0aWxzLTIuOC4xLm9yaWcvc3JjL2RpZmYuYworKysrIGRpZmZ1dGlscy0yLjguMS9zcmMvZGlmZi5jCitAQCAtNzEsNiArNzEsNyBAQCBzdGF0aWMgdm9pZCB1c2FnZSAodm9pZCk7Cisgc3RhdGljIGJvb2wgcmVjdXJzaXZlOworIAorIC8qIEluIGNvbnRleHQgZGlmZnMsIHNob3cgcHJldmlvdXMgbGluZXMgdGhhdCBtYXRjaCB0aGVzZSByZWdleHBzLiAgKi8KKytzdHJ1Y3QgcmVfcGF0dGVybl9idWZmZXIgZnVuY3Rpb25fcmVnZXhwOworIHN0YXRpYyBzdHJ1Y3QgcmVnZXhwX2xpc3QgZnVuY3Rpb25fcmVnZXhwX2xpc3Q7CisgCisgLyogSWdub3JlIGNoYW5nZXMgYWZmZWN0aW5nIG9ubHkgbGluZXMgdGhhdCBtYXRjaCB0aGVzZSByZWdleHBzLiAgKi8KZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvZGlmZnV0aWxzL2RpZmZ1dGlscy0zLjMvMDAwMS1VbnNldC1uZWVkX2NoYXJzZXRfYWxpYXMtd2hlbi1idWlsZGluZy1mb3ItbXVzbC5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvZGlmZnV0aWxzL2RpZmZ1dGlscy0zLjQvMDAwMS1VbnNldC1uZWVkX2NoYXJzZXRfYWxpYXMtd2hlbi1idWlsZGluZy1mb3ItbXVzbC5wYXRjaApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9kaWZmdXRpbHMvZGlmZnV0aWxzLTMuMy8wMDAxLVVuc2V0LW5lZWRfY2hhcnNldF9hbGlhcy13aGVuLWJ1aWxkaW5nLWZvci1tdXNsLnBhdGNoCnJlbmFtZSB0byBpbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2RpZmZ1dGlscy9kaWZmdXRpbHMtMy40LzAwMDEtVW5zZXQtbmVlZF9jaGFyc2V0X2FsaWFzLXdoZW4tYnVpbGRpbmctZm9yLW11c2wucGF0Y2gKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvZGlmZnV0aWxzL2RpZmZ1dGlscy0zLjMvcnVuLXB0ZXN0IGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9kaWZmdXRpbHMvZGlmZnV0aWxzLTMuNC9ydW4tcHRlc3QKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvZGlmZnV0aWxzL2RpZmZ1dGlscy0zLjMvcnVuLXB0ZXN0CnJlbmFtZSB0byBpbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2RpZmZ1dGlscy9kaWZmdXRpbHMtMy40L3J1bi1wdGVzdApkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9kaWZmdXRpbHMvZGlmZnV0aWxzXzIuOC4xLmJiIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9kaWZmdXRpbHMvZGlmZnV0aWxzXzIuOC4xLmJiCmluZGV4IGJmNDI1YmIuLmZlNTZmOWMgMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvZGlmZnV0aWxzL2RpZmZ1dGlsc18yLjguMS5iYgorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2RpZmZ1dGlscy9kaWZmdXRpbHNfMi44LjEuYmIKQEAgLTYsNyArNiw4IEBACiBQUiA9ICJyNy4wIgogCiBTUkNfVVJJID0gIiR7R05VX01JUlJPUn0vZGlmZnV0aWxzL2RpZmZ1dGlscy0ke1BWfS50YXIuZ3ogXAotICAgICAgICAgICBmaWxlOi8vZGlmZnV0aWxzX2ZpeF9mb3JfYXV0b21ha2UtMS4xMi5wYXRjaCIKKyAgICAgICAgICAgZmlsZTovL2RpZmZ1dGlsc19maXhfZm9yX2F1dG9tYWtlLTEuMTIucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vZml4X2djYzYucGF0Y2giCiAKIFNSQ19VUklbbWQ1c3VtXSA9ICI3MWY5YzVhZTE5YjYwNjA4ZjZjN2YxNjJkYTg2YTQyOCIKIFNSQ19VUklbc2hhMjU2c3VtXSA9ICJjNTAwMTc0OGIwNjkyMjRkZDk4YmYxYmI5ZWU4NzczMjFjN2RlOGIzMzJjOGFhZDVhZjNlMmE3MzcyZDIzZjVhIgpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9kaWZmdXRpbHMvZGlmZnV0aWxzXzMuMy5iYiBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvZGlmZnV0aWxzL2RpZmZ1dGlsc18zLjMuYmIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDUwMDg2OTAuLjAwMDAwMDAKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9kaWZmdXRpbHMvZGlmZnV0aWxzXzMuMy5iYgorKysgL2Rldi9udWxsCkBAIC0xLDM3ICswLDAgQEAKLUxJQ0VOU0UgPSAiR1BMdjMrIgotTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9ZDMyMjM5YmNiNjczNDYzYWI4NzRlODBkNDdmYWU1MDQiCi0KLXJlcXVpcmUgZGlmZnV0aWxzLmluYwotCi1TUkNfVVJJID0gIiR7R05VX01JUlJPUn0vZGlmZnV0aWxzL2RpZmZ1dGlscy0ke1BWfS50YXIueHogXAotICAgICAgICAgICBmaWxlOi8vMDAwMS1VbnNldC1uZWVkX2NoYXJzZXRfYWxpYXMtd2hlbi1idWlsZGluZy1mb3ItbXVzbC5wYXRjaCBcCi0gICAgICAgICAgIGZpbGU6Ly9ydW4tcHRlc3QgXAotIgotCi1FWFRSQV9PRUNPTkYgKz0gIi0td2l0aG91dC1saWJzaWdzZWd2LXByZWZpeCIKLQotZG9fY29uZmlndXJlX3ByZXBlbmQgKCkgewotCSMgTmVlZCB0byByZW1vdmUgZ2V0dGV4dCBtYWNyb3Mgd2l0aCB3ZWlyZCBtaXggb2YgdmVyc2lvbnMKLQlmb3IgaSBpbiBjb2Rlc2V0Lm00IGdldHRleHRfZ2wubTQgaW50bG1hY29zeC5tNCBpbnR0eXBlcy1wcmkubTQgbGliLWxkX2dsLm00IGxpYi1wcmVmaXhfZ2wubTQgcG9fZ2wubTQgc3NpemVfdC5tNCB3Y2hhcl90Lm00IHdpbnRfdC5tNDsgZG8KLQkJcm0gLWYgJHtTfS9tNC8kaQotCWRvbmUKLX0KLQotU1JDX1VSSVttZDVzdW1dID0gIjk5MTgwMjA4ZWMyYTgyY2U3MWY1NWIwZDczODlmMWIzIgotU1JDX1VSSVtzaGEyNTZzdW1dID0gImEyNWU4OWE4YWI2NWZkZWQxNzMxZTQxODZiZTFiYjI1Y2RhOTY3ODM0YjZkZjk3MzU5OWNkY2Q1YWJkZmMxOWMiCi0KLWluaGVyaXQgcHRlc3QKLQotZG9faW5zdGFsbF9wdGVzdCgpIHsKLQl0PSR7RH0ke1BURVNUX1BBVEh9Ci0JaW5zdGFsbCAtRCAke1N9L2J1aWxkLWF1eC90ZXN0LWRyaXZlciAkdC9idWlsZC1hdXgvdGVzdC1kcml2ZXIKLQljcCAtciAke1N9L3Rlc3RzICR0LwotCWluc3RhbGwgJHtCfS90ZXN0cy9NYWtlZmlsZSAkdC90ZXN0cy8KLQlzZWQgLWUgJ3N8Xk1ha2VmaWxlOnxfTWFrZWZpbGU6fCcgXAotCSAgICAtZSAnc3xiYXNofHNofCcgXAotCSAgICAtZSAnc3xedG9wX3NyY2RpciA9IFwoLipcKXx0b3Bfc3JjZGlyID0gLi5cL3wnIFwKLQkgICAgLWUgJ3N8XnNyY2RpciA9IFwoLipcKXxzcmNkaXIgPSAufCcgXAotCSAgICAtZSAnc3wiYCQoYnVpbHRfcHJvZ3JhbXMpYCJ8ZGlmZnwnIFwKLQkgICAgLWUgJ3N8Z2F3a3xhd2t8ZycgXAotCSAgICAtaSAkdC90ZXN0cy9NYWtlZmlsZQotfQpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9kaWZmdXRpbHMvZGlmZnV0aWxzXzMuNC5iYiBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvZGlmZnV0aWxzL2RpZmZ1dGlsc18zLjQuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2I3MDkyYgotLS0gL2Rldi9udWxsCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvZGlmZnV0aWxzL2RpZmZ1dGlsc18zLjQuYmIKQEAgLTAsMCArMSwzNyBAQAorTElDRU5TRSA9ICJHUEx2MysiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT1kMzIyMzliY2I2NzM0NjNhYjg3NGU4MGQ0N2ZhZTUwNCIKKworcmVxdWlyZSBkaWZmdXRpbHMuaW5jCisKK1NSQ19VUkkgPSAiJHtHTlVfTUlSUk9SfS9kaWZmdXRpbHMvZGlmZnV0aWxzLSR7UFZ9LnRhci54eiBcCisgICAgICAgICAgIGZpbGU6Ly8wMDAxLVVuc2V0LW5lZWRfY2hhcnNldF9hbGlhcy13aGVuLWJ1aWxkaW5nLWZvci1tdXNsLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL3J1bi1wdGVzdCBcCisiCisKK0VYVFJBX09FQ09ORiArPSAiLS13aXRob3V0LWxpYnNpZ3NlZ3YtcHJlZml4IgorCitkb19jb25maWd1cmVfcHJlcGVuZCAoKSB7CisJIyBOZWVkIHRvIHJlbW92ZSBnZXR0ZXh0IG1hY3JvcyB3aXRoIHdlaXJkIG1peCBvZiB2ZXJzaW9ucworCWZvciBpIGluIGNvZGVzZXQubTQgZ2V0dGV4dF9nbC5tNCBpbnRsbWFjb3N4Lm00IGludHR5cGVzLXByaS5tNCBsaWItbGRfZ2wubTQgbGliLXByZWZpeF9nbC5tNCBwb19nbC5tNCBzc2l6ZV90Lm00IHdjaGFyX3QubTQgd2ludF90Lm00OyBkbworCQlybSAtZiAke1N9L200LyRpCisJZG9uZQorfQorCitTUkNfVVJJW21kNXN1bV0gPSAiZGY5Y2E0NjVmMzAzMDdjZmZkMDNkYTE3NmE0M2E1ZDQiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiZGI1M2MwMjVmMmFjM2QyMTdiY2Y3NTNkYWQ2ZGVlN2I0MTBiMzNkMDk0ODQ5NWZmMDE1YWFmOGI5MTE4OWNlMiIKKworaW5oZXJpdCBwdGVzdAorCitkb19pbnN0YWxsX3B0ZXN0KCkgeworCXQ9JHtEfSR7UFRFU1RfUEFUSH0KKwlpbnN0YWxsIC1EICR7U30vYnVpbGQtYXV4L3Rlc3QtZHJpdmVyICR0L2J1aWxkLWF1eC90ZXN0LWRyaXZlcgorCWNwIC1yICR7U30vdGVzdHMgJHQvCisJaW5zdGFsbCAke0J9L3Rlc3RzL01ha2VmaWxlICR0L3Rlc3RzLworCXNlZCAtZSAnc3xeTWFrZWZpbGU6fF9NYWtlZmlsZTp8JyBcCisJICAgIC1lICdzfGJhc2h8c2h8JyBcCisJICAgIC1lICdzfF50b3Bfc3JjZGlyID0gXCguKlwpfHRvcF9zcmNkaXIgPSAuLlwvfCcgXAorCSAgICAtZSAnc3xec3JjZGlyID0gXCguKlwpfHNyY2RpciA9IC58JyBcCisJICAgIC1lICdzfCJgJChidWlsdF9wcm9ncmFtcylgInxkaWZmfCcgXAorCSAgICAtZSAnc3xnYXdrfGF3a3xnJyBcCisJICAgIC1pICR0L3Rlc3RzL01ha2VmaWxlCit9CmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2V0aHRvb2wvZXRodG9vbF80LjIuYmIgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2V0aHRvb2wvZXRodG9vbF80LjIuYmIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDk1ZGY3ODQuLjAwMDAwMDAKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9ldGh0b29sL2V0aHRvb2xfNC4yLmJiCisrKyAvZGV2L251bGwKQEAgLTEsMzAgKzAsMCBAQAotU1VNTUFSWSA9ICJEaXNwbGF5IG9yIGNoYW5nZSBldGhlcm5ldCBjYXJkIHNldHRpbmdzIgotREVTQ1JJUFRJT04gPSAiQSBzbWFsbCB1dGlsaXR5IGZvciBleGFtaW5pbmcgYW5kIHR1bmluZyB0aGUgc2V0dGluZ3Mgb2YgeW91ciBldGhlcm5ldC1iYXNlZCBuZXR3b3JrIGludGVyZmFjZXMuIgotSE9NRVBBR0UgPSAiaHR0cDovL3d3dy5rZXJuZWwub3JnL3B1Yi9zb2Z0d2FyZS9uZXR3b3JrL2V0aHRvb2wvIgotU0VDVElPTiA9ICJjb25zb2xlL25ldHdvcmsiCi1MSUNFTlNFID0gIkdQTHYyKyIKLUxJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PWIyMzRlZTRkNjlmNWZjZTQ0ODZhODBmZGFmNGE0MjYzIFwKLSAgICAgICAgICAgICAgICAgICAgZmlsZTovL2V0aHRvb2wuYztiZWdpbmxpbmU9NDtlbmRsaW5lPTE3O21kNT1jMTliMzA1NDhjNTgyNTc3ZmM2YjQ0MzYyNmZjMTIxNiIKLQotU1JDX1VSSSA9ICIke0tFUk5FTE9SR19NSVJST1J9L3NvZnR3YXJlL25ldHdvcmsvZXRodG9vbC9ldGh0b29sLSR7UFZ9LnRhci5neiBcCi0gICAgICAgICAgIGZpbGU6Ly9ydW4tcHRlc3QgXAotICAgICAgICAgICBmaWxlOi8vYXZvaWRfcGFyYWxsZWxfdGVzdHMucGF0Y2ggXAotICAgICAgICAgICAiCi0KLVNSQ19VUklbbWQ1c3VtXSA9ICI1YjU1ZjdjZDc2ZTkwMWRmYzI3MzhhYzIyY2FiOTZjYSIKLVNSQ19VUklbc2hhMjU2c3VtXSA9ICJmODQyMjZkYjhkZDE4YWZhZjkxZDhkMDBmNWNiOGY4N2VjM2Q3Zjc4N2QyYTM2MDVkZTA4ZDZkZmE5NWFiOGVmIgotCi1pbmhlcml0IGF1dG90b29scyBwdGVzdAotUkRFUEVORFNfJHtQTn0tcHRlc3QgKz0gIm1ha2UiCi0KLWRvX2NvbXBpbGVfcHRlc3QoKSB7Ci0gICBvZV9ydW5tYWtlIGJ1aWxkdGVzdC1URVNUUwotfQotCi1kb19pbnN0YWxsX3B0ZXN0ICgpIHsKLSAgIGNwICR7Qn0vTWFrZWZpbGUgICAgICAgICAgICAgICAgICR7RH0ke1BURVNUX1BBVEh9Ci0gICBpbnN0YWxsICR7Qn0vdGVzdC1jbWRsaW5lICAgICAgICAke0R9JHtQVEVTVF9QQVRIfQotICAgaW5zdGFsbCAke0J9L3Rlc3QtZmVhdHVyZXMgICAgICAgJHtEfSR7UFRFU1RfUEFUSH0KLSAgIGluc3RhbGwgJHtCfS9ldGh0b29sICAgICAgICAgICAgICR7RH0ke1BURVNUX1BBVEh9L2V0aHRvb2wKLSAgIHNlZCAtaSAncy9eTWFrZWZpbGUvX01ha2VmaWxlLycgICR7RH0ke1BURVNUX1BBVEh9L01ha2VmaWxlCi19CmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2V0aHRvb2wvZXRodG9vbF80LjYuYmIgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2V0aHRvb2wvZXRodG9vbF80LjYuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzg4ZDRlYQotLS0gL2Rldi9udWxsCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvZXRodG9vbC9ldGh0b29sXzQuNi5iYgpAQCAtMCwwICsxLDMwIEBACitTVU1NQVJZID0gIkRpc3BsYXkgb3IgY2hhbmdlIGV0aGVybmV0IGNhcmQgc2V0dGluZ3MiCitERVNDUklQVElPTiA9ICJBIHNtYWxsIHV0aWxpdHkgZm9yIGV4YW1pbmluZyBhbmQgdHVuaW5nIHRoZSBzZXR0aW5ncyBvZiB5b3VyIGV0aGVybmV0LWJhc2VkIG5ldHdvcmsgaW50ZXJmYWNlcy4iCitIT01FUEFHRSA9ICJodHRwOi8vd3d3Lmtlcm5lbC5vcmcvcHViL3NvZnR3YXJlL25ldHdvcmsvZXRodG9vbC8iCitTRUNUSU9OID0gImNvbnNvbGUvbmV0d29yayIKK0xJQ0VOU0UgPSAiR1BMdjIrIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9YjIzNGVlNGQ2OWY1ZmNlNDQ4NmE4MGZkYWY0YTQyNjMgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vZXRodG9vbC5jO2JlZ2lubGluZT00O2VuZGxpbmU9MTc7bWQ1PWMxOWIzMDU0OGM1ODI1NzdmYzZiNDQzNjI2ZmMxMjE2IgorCitTUkNfVVJJID0gIiR7S0VSTkVMT1JHX01JUlJPUn0vc29mdHdhcmUvbmV0d29yay9ldGh0b29sL2V0aHRvb2wtJHtQVn0udGFyLmd6IFwKKyAgICAgICAgICAgZmlsZTovL3J1bi1wdGVzdCBcCisgICAgICAgICAgIGZpbGU6Ly9hdm9pZF9wYXJhbGxlbF90ZXN0cy5wYXRjaCBcCisgICAgICAgICAgICIKKworU1JDX1VSSVttZDVzdW1dID0gIjExODZkZDgzYTAzODQxMDliOTJjNmNkNDBhN2JiMGU1IgorU1JDX1VSSVtzaGEyNTZzdW1dID0gImFkNDU2MjA4ODdmN2U2MTMxMmZjMmY5Y2EzZmQ1MGQ0OWFjNzczN2VkODc0YjBiMDI4NDVkMDdlMGZhM2NhNDkiCisKK2luaGVyaXQgYXV0b3Rvb2xzIHB0ZXN0CitSREVQRU5EU18ke1BOfS1wdGVzdCArPSAibWFrZSIKKworZG9fY29tcGlsZV9wdGVzdCgpIHsKKyAgIG9lX3J1bm1ha2UgYnVpbGR0ZXN0LVRFU1RTCit9CisKK2RvX2luc3RhbGxfcHRlc3QgKCkgeworICAgY3AgJHtCfS9NYWtlZmlsZSAgICAgICAgICAgICAgICAgJHtEfSR7UFRFU1RfUEFUSH0KKyAgIGluc3RhbGwgJHtCfS90ZXN0LWNtZGxpbmUgICAgICAgICR7RH0ke1BURVNUX1BBVEh9CisgICBpbnN0YWxsICR7Qn0vdGVzdC1mZWF0dXJlcyAgICAgICAke0R9JHtQVEVTVF9QQVRIfQorICAgaW5zdGFsbCAke0J9L2V0aHRvb2wgICAgICAgICAgICAgJHtEfSR7UFRFU1RfUEFUSH0vZXRodG9vbAorICAgc2VkIC1pICdzL15NYWtlZmlsZS9fTWFrZWZpbGUvJyAgJHtEfSR7UFRFU1RfUEFUSH0vTWFrZWZpbGUKK30KZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvZmluZHV0aWxzL2ZpbmR1dGlscy00LjIuMzEvZmluZHV0aWxzX2ZpeF9mb3JfYXV0b21ha2UtMS4xMi5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvZmluZHV0aWxzL2ZpbmR1dGlscy00LjIuMzEvZmluZHV0aWxzX2ZpeF9mb3JfYXV0b21ha2UtMS4xMi5wYXRjaAppbmRleCAyZDBkZGI0Li4xYjdmOGNmIDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2ZpbmR1dGlscy9maW5kdXRpbHMtNC4yLjMxL2ZpbmR1dGlsc19maXhfZm9yX2F1dG9tYWtlLTEuMTIucGF0Y2gKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9maW5kdXRpbHMvZmluZHV0aWxzLTQuMi4zMS9maW5kdXRpbHNfZml4X2Zvcl9hdXRvbWFrZS0xLjEyLnBhdGNoCkBAIC02LDcgKzYsNyBAQAogCiB8IGNvbmZpZ3VyZS5pbjo3NTogZXJyb3I6IGF1dG9tYXRpYyBkZS1BTlNJLWZpY2F0aW9uIHN1cHBvcnQgaGFzIGJlZW4gcmVtb3ZlZAogCi1TaWduZWQtT2ZmLUJ5OiBOaXRpbiBBIEthbWJsZSA8bml0aW4uYS5rYW1ibGVAaW50ZWwuY29tPgorU2lnbmVkLW9mZi1ieTogTml0aW4gQSBLYW1ibGUgPG5pdGluLmEua2FtYmxlQGludGVsLmNvbT4KIDIwMTIvMDUvMDQKIAogSW5kZXg6IGZpbmR1dGlscy00LjIuMzEvY29uZmlndXJlLmluCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2Zvb21hdGljL2Zvb21hdGljLWZpbHRlcnMtNC4wLjE3L0NWRS0yMDE1LTgzMjcucGF0Y2ggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2Zvb21hdGljL2Zvb21hdGljLWZpbHRlcnMtNC4wLjE3L0NWRS0yMDE1LTgzMjcucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWFlZGM4OAotLS0gL2Rldi9udWxsCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvZm9vbWF0aWMvZm9vbWF0aWMtZmlsdGVycy00LjAuMTcvQ1ZFLTIwMTUtODMyNy5wYXRjaApAQCAtMCwwICsxLDIzIEBACitVcHN0cmVhbS1TdGF0dXM6IEJhY2twb3J0CisKKworaHR0cDovL2J6ci5saW51eGZvdW5kYXRpb24ub3JnL2xvZ2dlcmhlYWQvb3BlbnByaW50aW5nL2N1cHMtZmlsdGVycy9yZXZpc2lvbi83NDA2CisKK0hhbmQgYXBwbGllZCBjaGFuZ2UgdG8gdXRpbC5jLiBGaXggd2FzIGZvciBjdXBzLWZpbHRlcnMgYnV0IGFsc28gYXBwbGllZCB0byBmb29tYXRpYy1maWx0ZXJzLgorCitDVkU6IENWRS0yMDE1LTgzMjcKK1NpZ25lZC1vZmYtYnk6IEFybWluIEt1c3RlciA8YWt1c3RlckBtdmlzdGEuY29tPgorCitJbmRleDogdXRpbC5jCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gYS91dGlsLmMKKysrKyBiL3V0aWwuYworQEAgLTMxLDcgKzMxLDcgQEAKKyAjaW5jbHVkZSA8YXNzZXJ0Lmg+CisgCisgCistY29uc3QgY2hhciogc2hlbGxlc2NhcGVzID0gInw7PD4mISRcJ1wiIyo/KClbXXt9IjsKKytjb25zdCBjaGFyKiBzaGVsbGVzY2FwZXMgPSAifDs8PiYhJFwnXCJgIyo/KClbXXt9IjsKKyAKKyBjb25zdCBjaGFyICogdGVtcF9kaXIoKQorIHsKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvZm9vbWF0aWMvZm9vbWF0aWMtZmlsdGVycy00LjAuMTcvQ1ZFLTIwMTUtODU2MC5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvZm9vbWF0aWMvZm9vbWF0aWMtZmlsdGVycy00LjAuMTcvQ1ZFLTIwMTUtODU2MC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kYzk3M2M0Ci0tLSAvZGV2L251bGwKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9mb29tYXRpYy9mb29tYXRpYy1maWx0ZXJzLTQuMC4xNy9DVkUtMjAxNS04NTYwLnBhdGNoCkBAIC0wLDAgKzEsMjMgQEAKK1Vwc3RyZWFtLVN0YXR1czogQmFja3BvcnQKKworCitodHRwOi8vYnpyLmxpbnV4Zm91bmRhdGlvbi5vcmcvbG9nZ2VyaGVhZC9vcGVucHJpbnRpbmcvY3Vwcy1maWx0ZXJzL3JldmlzaW9uLzc0MTkKKworSGFuZCBhcHBsaWVkIGNoYW5nZSB0byB1dGlsLmMuIEZpeCB3YXMgZm9yIGN1cHMtZmlsdGVycyBidXQgYWxzbyBhcHBsaWVkIHRvIGZvb21hdGljLWZpbHRlcnMuCisKK0NWRTogQ1ZFLTIwMTUtODU2MAorU2lnbmVkLW9mZi1ieTogQXJtaW4gS3VzdGVyIDxha3VzdGVyQG12aXN0YS5jb20+CisKK0luZGV4OiB1dGlsLmMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBhL3V0aWwuYworKysrIGIvdXRpbC5jCitAQCAtMzEsNyArMzEsNyBAQAorICNpbmNsdWRlIDxhc3NlcnQuaD4KKyAKKyAKKy1jb25zdCBjaGFyKiBzaGVsbGVzY2FwZXMgPSAifDw+JiEkXCdcIiMqPygpW117fSI7CisrY29uc3QgY2hhciogc2hlbGxlc2NhcGVzID0gInw7PD4mISRcJ1wiIyo/KClbXXt9IjsKKyAKKyBjb25zdCBjaGFyICogdGVtcF9kaXIoKQorIHsKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvZm9vbWF0aWMvZm9vbWF0aWMtZmlsdGVyc180LjAuMTcuYmIgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2Zvb21hdGljL2Zvb21hdGljLWZpbHRlcnNfNC4wLjE3LmJiCmluZGV4IDBjZmZlZGQuLjNmNDM5ZTcgMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvZm9vbWF0aWMvZm9vbWF0aWMtZmlsdGVyc180LjAuMTcuYmIKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9mb29tYXRpYy9mb29tYXRpYy1maWx0ZXJzXzQuMC4xNy5iYgpAQCAtMTcsNiArMTcsMTAgQEAKIAogU1JDX1VSSSA9ICJodHRwOi8vd3d3Lm9wZW5wcmludGluZy5vcmcvZG93bmxvYWQvZm9vbWF0aWMvZm9vbWF0aWMtZmlsdGVycy0ke1BWfS50YXIuZ3oiCiAKK1NSQ19VUkkgKz0gImZpbGU6Ly9DVkUtMjAxNS04NTYwLnBhdGNoIFwKKyAgICAgICAgICAgIGZpbGU6Ly9DVkUtMjAxNS04MzI3LnBhdGNoIFwKKyAgICAgICAgICAgIgorCiBTUkNfVVJJW21kNXN1bV0gPSAiYjA1ZjVkY2JmZTM1OWYxOThlZWYzZGY1YjI4M2Q4OTYiCiBTUkNfVVJJW3NoYTI1NnN1bV0gPSAiYTJlMmU1M2U1MDI1NzFlODhlZWI5MDEwYzQ1YTBkNTQ2NzFmMTU3MDdlZTEwNGY1YzljMjJiNTllYTdhMzNlMyIKIApkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9nYXdrL2dhd2stMy4xLjUvMDAwMS1nYXdrLWZpeC1ub24tZ2xpYmMtZ2NjLTQtY29tcGlsYXRpb24ucGF0Y2ggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2dhd2svZ2F3ay0zLjEuNS8wMDAxLWdhd2stZml4LW5vbi1nbGliYy1nY2MtNC1jb21waWxhdGlvbi5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iYzkyMDFiCi0tLSAvZGV2L251bGwKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9nYXdrL2dhd2stMy4xLjUvMDAwMS1nYXdrLWZpeC1ub24tZ2xpYmMtZ2NjLTQtY29tcGlsYXRpb24ucGF0Y2gKQEAgLTAsMCArMSw2NyBAQAorRnJvbSA1MzQ5NmUyZTMwNmIxNmFjNTk4MDE1NTNmNzc1YmNjYTE2NGU2YTM5IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogPT9VVEYtOD9xP0FuZHI9QzM9QTk9MjBEcmFzemlrPz0gPGdpdEBhbmRyZWQubmV0PgorRGF0ZTogV2VkLCAxNCBTZXAgMjAxNiAxNjoyMDozNyArMDEwMAorU3ViamVjdDogW1BBVENIXSBmaXggZ2NjID49IDQgY29tcGlsYXRpb24KKworfCAuLi9nYXdrLTMuMS41L2hhcmQtbG9jYWxlLmg6IEluIGZ1bmN0aW9uICdoYXJkX2xvY2FsZSc6Cit8IC4uL2dhd2stMy4xLjUvaGFyZC1sb2NhbGUuaDo0MzoyMDogZXJyb3I6IGludmFsaWQgc3RvcmFnZSBjbGFzcyBmb3IgZnVuY3Rpb24gJ3htYWxsb2MnCit8ICAgICAgICBzdGF0aWMgcHRyX3QgeG1hbGxvYyBQQVJBTVMgKChzaXplX3QgbikpOworfCAgICAgICAgICAgICAgICAgICAgIF5+fn5+fn4KKworfCAuLi9nYXdrLTMuMS41L2hhcmQtbG9jYWxlLmg6NDU6MjI6IHdhcm5pbmc6IGltcGxpY2l0IGRlY2xhcmF0aW9uIG9mIGZ1bmN0aW9uICd4bWFsbG9jJyBbLVdpbXBsaWNpdC1mdW5jdGlvbi1kZWNsYXJhdGlvbl0KK3wgICAgICAgIGNoYXIgKmxvY2FsZSA9IHhtYWxsb2MgKHN0cmxlbiAocCkgKyAxKTsKK3wgICAgICAgICAgICAgICAgICAgICAgIF5+fn5+fn4KK3wgLi4vZ2F3ay0zLjEuNS9oYXJkLWxvY2FsZS5oOjQ1OjIyOiB3YXJuaW5nOiBpbml0aWFsaXphdGlvbiBtYWtlcyBwb2ludGVyIGZyb20gaW50ZWdlciB3aXRob3V0IGEgY2FzdCBbLVdpbnQtY29udmVyc2lvbl0KK3wgLi4vZ2F3ay0zLjEuNS9kZmEuYzogQXQgdG9wIGxldmVsOgorfCAuLi9nYXdrLTMuMS41L2RmYS5jOjEyNToxNDogZXJyb3I6IGNvbmZsaWN0aW5nIHR5cGVzIGZvciAneG1hbGxvYycKK3wgIHN0YXRpYyBwdHJfdCB4bWFsbG9jIFBBUkFNUyAoKHNpemVfdCBuKSk7Cit8ICAgICAgICAgICAgICAgXn5+fn5+fgorfCBJbiBmaWxlIGluY2x1ZGVkIGZyb20gLi4vZ2F3ay0zLjEuNS9kZmEuYzoxMTI6MDoKK3wgLi4vZ2F3ay0zLjEuNS9oYXJkLWxvY2FsZS5oOjQ1OjIyOiBub3RlOiBwcmV2aW91cyBpbXBsaWNpdCBkZWNsYXJhdGlvbiBvZiAneG1hbGxvYycgd2FzIGhlcmUKK3wgICAgICAgIGNoYXIgKmxvY2FsZSA9IHhtYWxsb2MgKHN0cmxlbiAocCkgKyAxKTsKK3wgICAgICAgICAgICAgICAgICAgICAgIF5+fn5+fn4KKworVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtyZXF1aXJlZCBmb3IgZ2F3ayAzLjEuNSAoR1BMdjIpIHJlY2lwZSBvbmx5XQorCitTaWduZWQtb2ZmLWJ5OiBBbmRyw6kgRHJhc3ppayA8Z2l0QGFuZHJlZC5uZXQ+CistLS0KKyBkZmEuYyAgICAgICAgIHwgMiArLQorIGhhcmQtbG9jYWxlLmggfCAyIC0tCisgMiBmaWxlcyBjaGFuZ2VkLCAxIGluc2VydGlvbigrKSwgMyBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL2RmYS5jIGIvZGZhLmMKK2luZGV4IDcxZTM3MzYuLjk3ZjYwNDUgMTAwNjQ0CistLS0gYS9kZmEuYworKysrIGIvZGZhLmMKK0BAIC0xMDksNiArMTA5LDcgQEAgZXh0ZXJuIHZvaWQgZnJlZSgpOworIAorICNpbmNsdWRlICJyZWdleC5oIgorICNpbmNsdWRlICJkZmEuaCIKKytzdGF0aWMgcHRyX3QgeG1hbGxvYyBQQVJBTVMgKChzaXplX3QgbikpOworICNpbmNsdWRlICJoYXJkLWxvY2FsZS5oIgorIAorIC8qIEhQVVgsIGRlZmluZSB0aG9zZSBhcyBtYWNyb3MgaW4gc3lzL3BhcmFtLmggKi8KK0BAIC0xMjIsNyArMTIzLDYgQEAgZXh0ZXJuIHZvaWQgZnJlZSgpOworIHN0YXRpYyB2b2lkIGRmYW11c3QgUEFSQU1TICgoc3RydWN0IGRmYSAqZGZhKSk7CisgCisgc3RhdGljIHB0cl90IHhjYWxsb2MgUEFSQU1TICgoc2l6ZV90IG4sIHNpemVfdCBzKSk7Cistc3RhdGljIHB0cl90IHhtYWxsb2MgUEFSQU1TICgoc2l6ZV90IG4pKTsKKyBzdGF0aWMgcHRyX3QgeHJlYWxsb2MgUEFSQU1TICgocHRyX3QgcCwgc2l6ZV90IG4pKTsKKyAjaWZkZWYgREVCVUcKKyBzdGF0aWMgdm9pZCBwcnRvayBQQVJBTVMgKCh0b2tlbiB0KSk7CitkaWZmIC0tZ2l0IGEvaGFyZC1sb2NhbGUuaCBiL2hhcmQtbG9jYWxlLmgKK2luZGV4IDBmNDk4NmIuLjllZTU3ZTAgMTAwNjQ0CistLS0gYS9oYXJkLWxvY2FsZS5oCisrKysgYi9oYXJkLWxvY2FsZS5oCitAQCAtNDAsOCArNDAsNiBAQCBoYXJkX2xvY2FsZSAoaW50IGNhdGVnb3J5KQorICAgICAgIGlmIChzdHJjbXAgKHAsICJDIikgPT0gMCB8fCBzdHJjbXAgKHAsICJQT1NJWCIpID09IDApCisgCWhhcmQgPSAwOworICMgZWxzZQorLSAgICAgIHN0YXRpYyBwdHJfdCB4bWFsbG9jIFBBUkFNUyAoKHNpemVfdCBuKSk7CistCisgICAgICAgY2hhciAqbG9jYWxlID0geG1hbGxvYyAoc3RybGVuIChwKSArIDEpOworICAgICAgIHN0cmNweSAobG9jYWxlLCBwKTsKKyAKKy0tIAorMi45LjMKKwpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9nYXdrL2dhd2stMy4xLjUvZ2F3ay0zLjEuNV9maXhfZm9yX2F1dG9tYWtlLTEuMTIucGF0Y2ggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2dhd2svZ2F3ay0zLjEuNS9nYXdrLTMuMS41X2ZpeF9mb3JfYXV0b21ha2UtMS4xMi5wYXRjaAppbmRleCBiM2U3OTg3Li5jNDJjMzNjIDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2dhd2svZ2F3ay0zLjEuNS9nYXdrLTMuMS41X2ZpeF9mb3JfYXV0b21ha2UtMS4xMi5wYXRjaAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2dhd2svZ2F3ay0zLjEuNS9nYXdrLTMuMS41X2ZpeF9mb3JfYXV0b21ha2UtMS4xMi5wYXRjaApAQCAtMTEsNyArMTEsNyBAQAogLi4uCiB8IE1ha2VmaWxlLmFtOjI3OiBlcnJvcjogYXV0b21hdGljIGRlLUFOU0ktZmljYXRpb24gc3VwcG9ydCBoYXMgYmVlbiByZW1vdmVkCiAKLVNpZ25lZC1PZmYtQnk6IE5pdGluIEEgS2FtYmxlIDxuaXRpbi5hLmthbWJsZUBpbnRlbC5jb20+CitTaWduZWQtb2ZmLWJ5OiBOaXRpbiBBIEthbWJsZSA8bml0aW4uYS5rYW1ibGVAaW50ZWwuY29tPgogMjAxMi8wNS8wNAogCiBJbmRleDogZ2F3ay0zLjEuNS9jb25maWd1cmUuYWMKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvZ2F3ay9nYXdrXzMuMS41LmJiIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9nYXdrL2dhd2tfMy4xLjUuYmIKaW5kZXggN2M5MmJkZS4uNjNmZDMyZiAxMDA2NDQKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9nYXdrL2dhd2tfMy4xLjUuYmIKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9nYXdrL2dhd2tfMy4xLjUuYmIKQEAgLTE1LDggKzE1LDExIEBACiBSREVQRU5EU19wZ2F3ayArPSAiZ2F3ay1jb21tb24iCiBQUiA9ICJyMiIKIAotU1JDX1VSSSA9ICIke0dOVV9NSVJST1J9L2dhd2svZ2F3ay0ke1BWfS50YXIuZ3ogXAotCWZpbGU6Ly9nYXdrLTMuMS41X2ZpeF9mb3JfYXV0b21ha2UtMS4xMi5wYXRjaCIKK1NSQ19VUkkgPSAiXAorICAgICR7R05VX01JUlJPUn0vZ2F3ay9nYXdrLSR7UFZ9LnRhci5neiBcCisgICAgZmlsZTovL2dhd2stMy4xLjVfZml4X2Zvcl9hdXRvbWFrZS0xLjEyLnBhdGNoIFwKKyAgICBmaWxlOi8vMDAwMS1nYXdrLWZpeC1ub24tZ2xpYmMtZ2NjLTQtY29tcGlsYXRpb24ucGF0Y2ggXAorIgogCiBTUkNfVVJJW21kNXN1bV0gPSAiNDc2MDMyNTQ4OTQ3OWNhYzE3ZmUwMTE0YjhmNjJmMzAiCiBTUkNfVVJJW3NoYTI1NnN1bV0gPSAiNDYzZGNiOWQwY2EzOThiMWQ0ZjVhMzMyZjZjZDljZWM1NjQ0MTI2NWZjYTYxNmYyZWExYjQ0ZDQ1OWU5ZjBmOCIKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvZ2hvc3RzY3JpcHQvZmlsZXMvMDAwMS1CdWctNjk2NDk3LUZpeC1zdXBwb3J0LWZvci1idWlsZGluZy13aXRoLW5vLWpiaWcyLWRlLnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9naG9zdHNjcmlwdC9maWxlcy8wMDAxLUJ1Zy02OTY0OTctRml4LXN1cHBvcnQtZm9yLWJ1aWxkaW5nLXdpdGgtbm8tamJpZzItZGUucGF0Y2gKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQ1ODZhMWQuLjAwMDAwMDAKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9naG9zdHNjcmlwdC9maWxlcy8wMDAxLUJ1Zy02OTY0OTctRml4LXN1cHBvcnQtZm9yLWJ1aWxkaW5nLXdpdGgtbm8tamJpZzItZGUucGF0Y2gKKysrIC9kZXYvbnVsbApAQCAtMSw4MSArMCwwIEBACi1Gcm9tIDFkMTk5OTgwOTExNTRmODliODI5NGU0NTk0YTA1OTg2YjRjMmY4MjIgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCi1Gcm9tOiBDaHJpcyBMaWRkZWxsIDxjaHJpcy5saWRkZWxsQGFydGlmZXguY29tPgotRGF0ZTogV2VkLCAxMyBKYW4gMjAxNiAwMjowODo0MiAtMDUwMAotU3ViamVjdDogW1BBVENIIDEvMl0gQnVnIDY5NjQ5NzogRml4IHN1cHBvcnQgZm9yIGJ1aWxkaW5nIHdpdGggbm8gamJpZzIKLSBkZWNvZGVyCi0KLUF1dGhvcjogQ2hyaXMgTGlkZGVsbCA8Y2hyaXMubGlkZGVsbEBhcnRpZmV4LmNvbT4KLQotVXBzdHJlYW0tU3RhdHVzOiBCYWNrcG9ydAotaHR0cDovL2J1Z3MuZ2hvc3RzY3JpcHQuY29tL3Nob3dfYnVnLmNnaT9pZD02OTY0OTcKLWh0dHA6Ly9naXQuZ2hvc3RzY3JpcHQuY29tLz9wPWdob3N0cGRsLmdpdDthPWNvbW1pdGRpZmY7aD1iMGY1YTk3NQotU2lnbmVkLW9mZi1ieTogSG9uZ3h1IEppYSA8aG9uZ3h1LmppYUB3aW5kcml2ZXIuY29tPgotLS0tCi0gYmFzZS9saWIubWFrIHwgIDkgKysrKysrKysrCi0gcHNpL2ludC5tYWsgIHwgMjMgKysrKysrKysrKysrKysrKysrLS0tLS0KLSAyIGZpbGVzIGNoYW5nZWQsIDI3IGluc2VydGlvbnMoKyksIDUgZGVsZXRpb25zKC0pCi0KLWRpZmYgLS1naXQgYS9iYXNlL2xpYi5tYWsgYi9iYXNlL2xpYi5tYWsKLWluZGV4IDI0MWRmMmYuLmRhYTcwNTYgMTAwNjQ0Ci0tLS0gYS9iYXNlL2xpYi5tYWsKLSsrKyBiL2Jhc2UvbGliLm1hawotQEAgLTE3MzIsNiArMTczMiwxMCBAQCAkKEdMRClzamJpZzJfamJpZzJkZWMuZGV2IDogJChMSUJfTUFLKSAkKEVDSE9HU19YRSkgXAotIAkkKFNFVE1PRCkgJChHTEQpc2piaWcyX2piaWcyZGVjICQoc2piaWcyX2piaWcyZGVjKQotIAkkKEFERE1PRCkgJChHTEQpc2piaWcyX2piaWcyZGVjIC1pbmNsdWRlICQoR0xEKWpiaWcyZGVjLmRldgotIAotKyQoR0xEKXNqYmlnMl8uZGV2IDogJChMSUJfTUFLKSAkKEVDSE9HU19YRSkgXAotKyAgJChMSUJfTUFLKSAkKE1BS0VESVJTKQotKwkkKFNFVE1PRCkgJChHTEQpc2piaWcyXwotKwotICMgamJpZzJkZWMuZGV2IGlzIGRlZmluZWQgaW4gamJpZzIubWFrCi0gCi0gJChHTE9CSilzamJpZzIuJChPQkopIDogJChHTFNSQylzamJpZzIuYyAkKEFLKSBcCi1AQCAtMTczOSw2ICsxNzQzLDExIEBAICQoR0xPQkopc2piaWcyLiQoT0JKKSA6ICQoR0xTUkMpc2piaWcyLmMgJChBSykgXAotICAkKHNqYmlnMl9oKSAkKHN0cmltcGxfaCkgJChNQUtFRElSUykKLSAJJChHTEpCSUcyQ0MpICQoR0xPXylzamJpZzIuJChPQkopICQoQ18pICQoR0xTUkMpc2piaWcyLmMKLSAKLSskKEdMT0JKKXNub2piaWcyLiQoT0JKKSA6ICQoR0xTUkMpc25vamJpZzIuYyAkKEFLKSBcCi0rICQoc3RkaW50X19oKSAkKG1lbW9yeV9faCkgJChzdGRpb19faCkgJChnc2Vycm9yc19oKSAkKGdkZWJ1Z19oKSBcCi0rICQoc3RyaW1wbF9oKSAkKExJQl9NQUspICQoTUFLRURJUlMpCi0rCSQoR0xKQklHMkNDKSAkKEdMT18pc25vamJpZzIuJChPQkopICQoQ18pICQoR0xTUkMpc25vamJpZzIuYwotKwotICMgbHVyYXRlY2ggdmVyc2lvbgotIHNqYmlnMl9sdXJhdGVjaD0kKEdMT0JKKXNqYmlnMl9sdXJhdGVjaC4kKE9CSikKLSAKLWRpZmYgLS1naXQgYS9wc2kvaW50Lm1hayBiL3BzaS9pbnQubWFrCi1pbmRleCA2MTQ5YTNiLi5mOWQ2NjdkIDEwMDY0NAotLS0tIGEvcHNpL2ludC5tYWsKLSsrKyBiL3BzaS9pbnQubWFrCi1AQCAtMTI1NCwxMSArMTI1NCwyNCBAQCAkKFBTT0JKKXpmYWVzLiQoT0JKKSA6ICQoUFNTUkMpemZhZXMuYyAkKE9QKSAkKG1lbW9yeV9faClcCi0gIyB0aGlzIGNhbiBiZSB0dXJuZWQgb24gYW5kIG9mZiB3aXRoIGEgRkVBVFVSRV9ERVYKLSAKLSBmamJpZzJfPSQoUFNPQkopemZqYmlnMl8kKEpCSUcyX0xJQikuJChPQkopCi0tJChQU0QpamJpZzIuZGV2IDogJChJTlRfTUFLKSAkKEVDSE9HU19YRSkgJChmamJpZzJfKSAkKEdMRClzamJpZzIuZGV2XAotLSAkKE1BS0VESVJTKQotLQkkKFNFVE1PRCkgJChQU0QpamJpZzIgJChmamJpZzJfKQotLQkkKEFERE1PRCkgJChQU0QpamJpZzIgLWluY2x1ZGUgJChHTEQpc2piaWcyCi0tCSQoQURETU9EKSAkKFBTRClqYmlnMiAtb3BlciB6ZmpiaWcyCi0rCi0rJChQU0QpamJpZzJfamJpZzJkZWMuZGV2IDogJChFQ0hPR1NfWEUpICQoZmpiaWcyXykgJChHTEQpc2piaWcyLmRldlwKLSsgJChJTlRfTUFLKSAkKE1BS0VESVJTKQotKwkkKFNFVE1PRCkgJChQU0QpamJpZzJfamJpZzJkZWMgJChmamJpZzJfKQotKwkkKEFERE1PRCkgJChQU0QpamJpZzJfamJpZzJkZWMgLWluY2x1ZGUgJChHTEQpc2piaWcyCi0rCSQoQURETU9EKSAkKFBTRClqYmlnMl9qYmlnMmRlYyAtb3BlciB6ZmpiaWcyCi0rCi0rJChQU0QpamJpZzJfbHVyYXRlY2guZGV2IDogJChFQ0hPR1NfWEUpICQoZmpiaWcyXykgJChHTEQpc2piaWcyLmRldlwKLSsgJChJTlRfTUFLKSAkKE1BS0VESVJTKQotKwkkKFNFVE1PRCkgJChQU0QpamJpZzJfbHVyYXRlY2ggJChmamJpZzJfKQotKwkkKEFERE1PRCkgJChQU0QpamJpZzJfbHVyYXRlY2ggLWluY2x1ZGUgJChHTEQpc2piaWcyCi0rCSQoQURETU9EKSAkKFBTRClqYmlnMl9sdXJhdGVjaCAtb3BlciB6ZmpiaWcyCi0rCi0rJChQU0QpamJpZzJfLmRldiA6ICQoRUNIT0dTX1hFKSAkKElOVF9NQUspICQoTUFLRURJUlMpCi0rCSQoU0VUTU9EKSAkKFBTRClqYmlnMl8gCi0rCi0rJChQU0QpamJpZzIuZGV2IDogJChQU0QpamJpZzJfJChKQklHMl9MSUIpLmRldiAkKElOVF9NQUspICQoTUFLRURJUlMpCi0rCSQoQ1BfKSAkKFBTRClqYmlnMl8kKEpCSUcyX0xJQikuZGV2ICQoUFNEKWpiaWcyLmRldgotIAotICQoUFNPQkopemZqYmlnMl9qYmlnMmRlYy4kKE9CSikgOiAkKFBTU1JDKXpmamJpZzIuYyAkKE9QKSAkKG1lbW9yeV9faClcCi0gICQoZ3NzdHJ1Y3RfaCkgJChnc3R5cGVzX2gpICQoaWFsbG9jX2gpICQoaWRpY3RfaCkgJChpZmlsdGVyX2gpXAotLS0gCi0xLjkuMQotCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2dob3N0c2NyaXB0L2ZpbGVzLzAwMDItQnVnLTY5NjQ5Ny1wYXJ0LTItZml4LXN1cHBvcnQtZm9yLWJ1aWxkaW5nLXdpdGgtYS1KUC5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvZ2hvc3RzY3JpcHQvZmlsZXMvMDAwMi1CdWctNjk2NDk3LXBhcnQtMi1maXgtc3VwcG9ydC1mb3ItYnVpbGRpbmctd2l0aC1hLUpQLnBhdGNoCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmY2ZjNDc5Li4wMDAwMDAwCi0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvZ2hvc3RzY3JpcHQvZmlsZXMvMDAwMi1CdWctNjk2NDk3LXBhcnQtMi1maXgtc3VwcG9ydC1mb3ItYnVpbGRpbmctd2l0aC1hLUpQLnBhdGNoCisrKyAvZGV2L251bGwKQEAgLTEsNDggKzAsMCBAQAotRnJvbSAzYjQzZjkzZWMwMjYxMWM0ZDU1NDYxMjk1M2Y1YjY0NzY1Yjg2ODNiIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQotRnJvbTogQ2hyaXMgTGlkZGVsbCA8Y2hyaXMubGlkZGVsbEBhcnRpZmV4LmNvbT4KLURhdGU6IFdlZCwgMTMgSmFuIDIwMTYgMDI6MTQ6NTUgLTA1MDAKLVN1YmplY3Q6IFtQQVRDSCAyLzJdIEJ1ZyA2OTY0OTcgKHBhcnQgMik6IGZpeCBzdXBwb3J0IGZvciBidWlsZGluZyB3aXRoIGEgSlBYCi0gZGVjb2RlcgotCi1BdXRob3I6IENocmlzIExpZGRlbGwgPGNocmlzLmxpZGRlbGxAYXJ0aWZleC5jb20+Ci0KLVVwc3RyZWFtLVN0YXR1czogQmFja3BvcnQKLWh0dHA6Ly9idWdzLmdob3N0c2NyaXB0LmNvbS9zaG93X2J1Zy5jZ2k/aWQ9Njk2NDk3Ci1odHRwOi8vZ2l0Lmdob3N0c2NyaXB0LmNvbS8/cD1naG9zdHBkbC5naXQ7YT1jb21taXRkaWZmO2g9YjBmNWE5NzUKLVNpZ25lZC1vZmYtYnk6IEhvbmd4dSBKaWEgPGhvbmd4dS5qaWFAd2luZHJpdmVyLmNvbT4KLS0tLQotIGJhc2UvbGliLm1hayB8IDMgKysrCi0gcHNpL2ludC5tYWsgIHwgMyArKysKLSAyIGZpbGVzIGNoYW5nZWQsIDYgaW5zZXJ0aW9ucygrKQotCi1kaWZmIC0tZ2l0IGEvYmFzZS9saWIubWFrIGIvYmFzZS9saWIubWFrCi1pbmRleCBkYWE3MDU2Li44ODUzZGQ1IDEwMDY0NAotLS0tIGEvYmFzZS9saWIubWFrCi0rKysgYi9iYXNlL2xpYi5tYWsKLUBAIC0xNzc0LDYgKzE3NzQsOSBAQCAkKEdMT0JKKXNqcHguJChPQkopIDogJChHTFNSQylzanB4LmMgJChBSykgXAotICAkKGdkZWJ1Z19oKSAkKHN0cmltcGxfaCkgJChzanB4X2gpICQoTUFLRURJUlMpCi0gCSQoR0xKQVNDQykgJChHTE9fKXNqcHguJChPQkopICQoQ18pICQoR0xTUkMpc2pweC5jCi0gCi0rJChHTEQpc2pweF8uZGV2IDogJChMSUJfTUFLKSAkKEVDSE9HU19YRSkgJChMSUJfTUFLKSAkKE1BS0VESVJTKQotKwkkKFNFVE1PRCkgJChHTEQpc2pweF8KLSsKLSAjIGx1cmF0ZWNoIHZlcnNpb24KLSBzanB4X2x1cmF0ZWNoPSQoR0xPQkopc2pweF9sdXJhdGVjaC4kKE9CSikKLSAkKEdMRClzanB4X2x1cmF0ZWNoLmRldiA6ICQoTElCX01BSykgJChFQ0hPR1NfWEUpIFwKLWRpZmYgLS1naXQgYS9wc2kvaW50Lm1hayBiL3BzaS9pbnQubWFrCi1pbmRleCBmOWQ2NjdkLi5kYjAxYjY1IDEwMDY0NAotLS0tIGEvcHNpL2ludC5tYWsKLSsrKyBiL3BzaS9pbnQubWFrCi1AQCAtMTI5MCw2ICsxMjkwLDkgQEAgJChQU0QpanB4LmRldiA6ICQoSU5UX01BSykgJChFQ0hPR1NfWEUpICQoUFNEKWpweF8kKEpQWF9MSUIpLmRldlwKLSAgJChNQUtFRElSUykKLSAJJChDUF8pICQoUFNEKWpweF8kKEpQWF9MSUIpLmRldiAkKFBTRClqcHguZGV2Ci0gCi0rJChQU0QpanB4Xy5kZXYgOiAkKEVDSE9HU19YRSkgJChJTlRfTUFLKSAkKE1BS0VESVJTKQotKwkkKFNFVE1PRCkgJChQU0QpanB4XwotKwotIGZqcHhfbHVyYXRlY2g9JChQU09CSil6ZmpweF9sdXJhdGVjaC4kKE9CSikKLSAKLSAkKFBTT0JKKXpmanB4LiQoT0JKKSA6ICQoUFNTUkMpemZqcHguYyAkKE9QKSAkKG1lbW9yeV9faClcCi0tLSAKLTEuOS4xCi0KZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvZ2hvc3RzY3JpcHQvZmlsZXMvZG8tbm90LWNoZWNrLWxvY2FsLWxpYnBuZy1zb3VyY2UucGF0Y2ggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2dob3N0c2NyaXB0L2ZpbGVzL2RvLW5vdC1jaGVjay1sb2NhbC1saWJwbmctc291cmNlLnBhdGNoCmluZGV4IGI0NDVhNmMuLmMzZTQ0ZmUgMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvZ2hvc3RzY3JpcHQvZmlsZXMvZG8tbm90LWNoZWNrLWxvY2FsLWxpYnBuZy1zb3VyY2UucGF0Y2gKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9naG9zdHNjcmlwdC9maWxlcy9kby1ub3QtY2hlY2stbG9jYWwtbGlicG5nLXNvdXJjZS5wYXRjaApAQCAtMTYsMTcgKzE2LDE3IEBACiAgMSBmaWxlIGNoYW5nZWQsIDIgaW5zZXJ0aW9ucygrKSwgMiBkZWxldGlvbnMoLSkKIAogZGlmZiAtLWdpdCBhL2NvbmZpZ3VyZS5hYyBiL2NvbmZpZ3VyZS5hYwotaW5kZXggYWIzMGE5Ny4uYjc2MmZkNyAxMDA2NDQKK2luZGV4IGJmNmQzZjUuLjAxZGYwM2YgMTAwNjQ0CiAtLS0gYS9jb25maWd1cmUuYWMKICsrKyBiL2NvbmZpZ3VyZS5hYwotQEAgLTk1NSwxMSArOTU1LDExIEBAIEFDX1NVQlNUKFpMSUJESVIpCitAQCAtOTMwLDExICs5MzAsMTEgQEAgQUNfU1VCU1QoWkxJQkRJUikKICBBQ19TVUJTVChGVF9TWVNfWkxJQikKICAKICBkbmwgcG5nIGZvciB0aGUgcG5nIG91dHB1dCBkZXZpY2U7IGl0IGFsc28gcmVxdWlyZXMgemxpYgogLUxJQlBOR0RJUj1zcmMKICtMSUJQTkdESVI9JHNyY2Rpci9saWJwbmcKICBQTkdERVZTPScnCi0gUE5HREVWU19BTEw9J3BuZzQ4IHBuZzE2bSBwbmdncmF5IHBuZ21vbm8gcG5nMjU2IHBuZzE2IHBuZ2FscGhhJworIFBOR0RFVlNfQUxMPSdwbmc0OCBwbmcxNm0gcG5nZ3JheSBwbmdtb25vIHBuZ21vbm9kIHBuZzI1NiBwbmcxNiBwbmdhbHBoYScKICBBQ19NU0dfQ0hFQ0tJTkcoW2ZvciBsb2NhbCBwbmcgbGlicmFyeSBzb3VyY2VdKQogLWlmIHRlc3QgLWYgJHNyY2Rpci9saWJwbmcvcG5ncmVhZC5jOyB0aGVuCiAraWYgZmFsc2U7IHRoZW4KQEAgLTM0LDUgKzM0LDUgQEAKICAgICAgICAgIFNIQVJFX0xJQlBORz0wCiAgICAgICAgICBMSUJQTkdESVI9JHNyY2Rpci9saWJwbmcKIC0tIAotMS45LjEKKzIuOC4xCiAKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvZ2hvc3RzY3JpcHQvZ2hvc3RzY3JpcHQvZ2hvc3RzY3JpcHQtOS4wMi1wcmV2ZW50X3JlY29tcGlsaW5nLnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9naG9zdHNjcmlwdC9naG9zdHNjcmlwdC9naG9zdHNjcmlwdC05LjAyLXByZXZlbnRfcmVjb21waWxpbmcucGF0Y2gKaW5kZXggYmMyOWJlNS4uZTcwOTE5NSAxMDA2NDQKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9naG9zdHNjcmlwdC9naG9zdHNjcmlwdC9naG9zdHNjcmlwdC05LjAyLXByZXZlbnRfcmVjb21waWxpbmcucGF0Y2gKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9naG9zdHNjcmlwdC9naG9zdHNjcmlwdC9naG9zdHNjcmlwdC05LjAyLXByZXZlbnRfcmVjb21waWxpbmcucGF0Y2gKQEAgLTEsNCArMSw0IEBACi11c3QgdXNlIGNvbW1hbmRzIHByb3ZpZGVkIGJ5IGdob3N0c2NyaXB0LW5hdGl2ZSwgcHJldmVudGluZyByZWNvbXBpbGUgdGhlbSB3aGVuCitKdXN0IHVzZSBjb21tYW5kcyBwcm92aWRlZCBieSBnaG9zdHNjcmlwdC1uYXRpdmUsIHByZXZlbnRpbmcgcmVjb21waWxlIHRoZW0gd2hlbgogY29tcGlsZSBnaG9zdHNjcmlwdC4KIFdheSB0byBlbmFibGUgY3Jvc3MgY29tcGlsZS4KIApAQCAtNyw5NCArNyw5MyBAQAogU2lnbmVkLW9mZi1ieTogS2FuZyBLYWkgPGthaS5rYW5nQHdpbmRyaXZlci5jb20+CiBTaWduZWQtb2ZmLWJ5OiBXZW56b25nIEZhbiA8d2Vuem9uZy5mYW5Ad2luZHJpdmVyLmNvbT4KIAorUmViYXNlIHRvIDkuMTkKK1NpZ25lZC1vZmYtYnk6IEhvbmd4dSBKaWEgPGhvbmd4dS5qaWFAd2luZHJpdmVyLmNvbT4KKy0tLQorIGJhc2UvdW5peC1hdXgubWFrIHwgNjQgKysrKysrKysrKysrKysrKysrKysrKysrKysrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIDEgZmlsZSBjaGFuZ2VkLCAzMiBpbnNlcnRpb25zKCspLCAzMiBkZWxldGlvbnMoLSkKKwogZGlmZiAtLWdpdCBhL2Jhc2UvdW5peC1hdXgubWFrIGIvYmFzZS91bml4LWF1eC5tYWsKLWluZGV4IGE5MWZiMjYuLmM5OTFkMTEgMTAwNjQ0CitpbmRleCAwMTEwNjY3Li5lMmViMWExIDEwMDY0NAogLS0tIGEvYmFzZS91bml4LWF1eC5tYWsKICsrKyBiL2Jhc2UvdW5peC1hdXgubWFrCi1AQCAtNjksNDYgKzY5LDQ2IEBAICQoR0xPQkopZ3Bfc3lzdi4kKE9CSik6ICQoR0xTUkMpZ3Bfc3lzdi5jICQoc3RkaW9fX2gpICQodGltZV9faCkgJChBSylcCi0gICQoTUFLRURJUlMpCi0gCSQoR0xDQykgJChHTE9fKWdwX3N5c3YuJChPQkopICQoQ18pICQoR0xTUkMpZ3Bfc3lzdi5jCitAQCAtNzEsNDQgKzcxLDQ0IEBAICQoR0xPQkopZ3Bfc3lzdi4kKE9CSik6ICQoR0xTUkMpZ3Bfc3lzdi5jICQoc3RkaW9fX2gpICQodGltZV9faCkgJChBSylcCiAgCi0tIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBBdXhpbGlhcnkgcHJvZ3JhbXMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMKLS0KLS0kKEVDSE9HU19YRSk6ICQoR0xTUkMpZWNob2dzLmMgJChBSykgJChzdGRwcmVfaCkgJChNQUtFRElSUykKKyAjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIEF1eGlsaWFyeSBwcm9ncmFtcyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIworIAorLSQoRUNIT0dTX1hFKTogJChHTFNSQyllY2hvZ3MuYyAkKEFLKSAkKHN0ZHByZV9oKSAkKFVOSVhfQVVYX01BSykgJChNQUtFRElSUykKIC0JJChDQ0FVWF8pICQoSV8pJChHTFNSQ0RJUikkKF9JKSAkKE9fKSQoRUNIT0dTX1hFKSAkKEdMU1JDKWVjaG9ncy5jICQoQVVYRVhUUkFMSUJTKQogLQotLSMgT24gdGhlIFJTLzYwMDAgKGF0IGxlYXN0KSwgY29tcGlsaW5nIGdlbmFyY2guYyB3aXRoIGdjYyB3aXRoIC1PCi0tIyBwcm9kdWNlcyBhIGJ1Z2d5IGV4ZWN1dGFibGUuCi0tJChHRU5BUkNIX1hFKTogJChHTFNSQylnZW5hcmNoLmMgJChBSykgJChHRU5BUkNIX0RFUFMpICQoTUFLRURJUlMpCisrIyQoRUNIT0dTX1hFKTogJChHTFNSQyllY2hvZ3MuYyAkKEFLKSAkKHN0ZHByZV9oKSAkKFVOSVhfQVVYX01BSykgJChNQUtFRElSUykKKysjCSQoQ0NBVVhfKSAkKElfKSQoR0xTUkNESVIpJChfSSkgJChPXykkKEVDSE9HU19YRSkgJChHTFNSQyllY2hvZ3MuYyAkKEFVWEVYVFJBTElCUykKKysjCisgIyBPbiB0aGUgUlMvNjAwMCAoYXQgbGVhc3QpLCBjb21waWxpbmcgZ2VuYXJjaC5jIHdpdGggZ2NjIHdpdGggLU8KKyAjIHByb2R1Y2VzIGEgYnVnZ3kgZXhlY3V0YWJsZS4KKy0kKEdFTkFSQ0hfWEUpOiAkKEdMU1JDKWdlbmFyY2guYyAkKEFLKSAkKEdFTkFSQ0hfREVQUykgJChVTklYX0FVWF9NQUspICQoTUFLRURJUlMpCiAtCSQoQ0NBVVhfKSAkKElfKSQoR0xTUkNESVIpJChfSSkgJChPXykkKEdFTkFSQ0hfWEUpICQoR0xTUkMpZ2VuYXJjaC5jICQoQVVYRVhUUkFMSUJTKQogLQotLSQoR0VOQ09ORl9YRSk6ICQoR0xTUkMpZ2VuY29uZi5jICQoQUspICQoR0VOQ09ORl9ERVBTKSAkKE1BS0VESVJTKQorLSQoR0VOQ09ORl9YRSk6ICQoR0xTUkMpZ2VuY29uZi5jICQoQUspICQoR0VOQ09ORl9ERVBTKSAkKFVOSVhfQVVYX01BSykgJChNQUtFRElSUykKIC0JJChDQ0FVWF8pICQoSV8pJChHTFNSQ0RJUikkKF9JKSAkKE9fKSQoR0VOQ09ORl9YRSkgJChHTFNSQylnZW5jb25mLmMgJChBVVhFWFRSQUxJQlMpCiAtCi0tJChHRU5ERVZfWEUpOiAkKEdMU1JDKWdlbmRldi5jICQoQUspICQoR0VOREVWX0RFUFMpICQoTUFLRURJUlMpCistJChHRU5ERVZfWEUpOiAkKEdMU1JDKWdlbmRldi5jICQoQUspICQoR0VOREVWX0RFUFMpICQoVU5JWF9BVVhfTUFLKSAkKE1BS0VESVJTKQogLQkkKENDQVVYXykgJChJXykkKEdMU1JDRElSKSQoX0kpICQoT18pJChHRU5ERVZfWEUpICQoR0xTUkMpZ2VuZGV2LmMgJChBVVhFWFRSQUxJQlMpCiAtCi0tJChHRU5IVF9YRSk6ICQoR0xTUkMpZ2VuaHQuYyAkKEFLKSAkKEdFTkhUX0RFUFMpICQoTUFLRURJUlMpCistJChHRU5IVF9YRSk6ICQoR0xTUkMpZ2VuaHQuYyAkKEFLKSAkKEdFTkhUX0RFUFMpICQoVU5JWF9BVVhfTUFLKSAkKE1BS0VESVJTKQogLQkkKENDQVVYXykgJChHRU5IVF9DRkxBR1MpICQoT18pJChHRU5IVF9YRSkgJChHTFNSQylnZW5odC5jICQoQVVYRVhUUkFMSUJTKQogLQotLSMgVG8gZ2V0IEdTIHRvIHVzZSB0aGUgc3lzdGVtIHpsaWIsIHlvdSByZW1vdmUvaGlkZSB0aGUgZ3MvemxpYiBkaXJlY3RvcnkKLS0jIHdoaWNoIG1lYW5zIHRoYXQgdGhlIG1rcm9tZnMgYnVpbGQgY2FuJ3QgZmluZCB0aGUgemxpYiBzb3VyY2UgaXQgbmVlZHMuCi0tIyBTbyBpdCdzIHNwbGl0IGludG8gdHdvIHRhcmdldHMsIG9uZSB1c2luZyB0aGUgemxpYiBzb3VyY2UgZGlyZWN0bHkuLi4uLgorKyMkKEdFTkFSQ0hfWEUpOiAkKEdMU1JDKWdlbmFyY2guYyAkKEFLKSAkKEdFTkFSQ0hfREVQUykgJChVTklYX0FVWF9NQUspICQoTUFLRURJUlMpCisrIwkkKENDQVVYXykgJChJXykkKEdMU1JDRElSKSQoX0kpICQoT18pJChHRU5BUkNIX1hFKSAkKEdMU1JDKWdlbmFyY2guYyAkKEFVWEVYVFJBTElCUykKKysjCisrIyQoR0VOQ09ORl9YRSk6ICQoR0xTUkMpZ2VuY29uZi5jICQoQUspICQoR0VOQ09ORl9ERVBTKSAkKFVOSVhfQVVYX01BSykgJChNQUtFRElSUykKKysjCSQoQ0NBVVhfKSAkKElfKSQoR0xTUkNESVIpJChfSSkgJChPXykkKEdFTkNPTkZfWEUpICQoR0xTUkMpZ2VuY29uZi5jICQoQVVYRVhUUkFMSUJTKQorKyMKKysjJChHRU5ERVZfWEUpOiAkKEdMU1JDKWdlbmRldi5jICQoQUspICQoR0VOREVWX0RFUFMpICQoVU5JWF9BVVhfTUFLKSAkKE1BS0VESVJTKQorKyMJJChDQ0FVWF8pICQoSV8pJChHTFNSQ0RJUikkKF9JKSAkKE9fKSQoR0VOREVWX1hFKSAkKEdMU1JDKWdlbmRldi5jICQoQVVYRVhUUkFMSUJTKQorKyMKKysjJChHRU5IVF9YRSk6ICQoR0xTUkMpZ2VuaHQuYyAkKEFLKSAkKEdFTkhUX0RFUFMpICQoVU5JWF9BVVhfTUFLKSAkKE1BS0VESVJTKQorKyMJJChDQ0FVWF8pICQoR0VOSFRfQ0ZMQUdTKSAkKE9fKSQoR0VOSFRfWEUpICQoR0xTUkMpZ2VuaHQuYyAkKEFVWEVYVFJBTElCUykKKysjCisgIyBUbyBnZXQgR1MgdG8gdXNlIHRoZSBzeXN0ZW0gemxpYiwgeW91IHJlbW92ZS9oaWRlIHRoZSBncy96bGliIGRpcmVjdG9yeQorICMgd2hpY2ggbWVhbnMgdGhhdCB0aGUgbWtyb21mcyBidWlsZCBjYW4ndCBmaW5kIHRoZSB6bGliIHNvdXJjZSBpdCBuZWVkcy4KKyAjIFNvIGl0J3Mgc3BsaXQgaW50byB0d28gdGFyZ2V0cywgb25lIHVzaW5nIHRoZSB6bGliIHNvdXJjZSBkaXJlY3RseS4uLi4uCiAtTUtST01GU19PQkpTXzA9JChNS1JPTUZTX1pMSUJfT0JKUykgJChBVVgpZ3BtaXNjLiQoT0JKKSAkKEFVWClncF9nZXRudi4kKE9CSikgXAogLSAkKEFVWClnc2NkZWZzLiQoT0JKKSAkKEFVWClncF91bml4LiQoT0JKKSAkKEFVWClncF91bmlmcy4kKE9CSikgJChBVVgpZ3BfdW5pZm4uJChPQkopIFwKIC0gJChBVVgpZ3Bfc3RkaWEuJChPQkopICQoQVVYKWdzdXRpbC4kKE9CSikgJChBVVgpbWVtZW50by4kKE9CSikKIC0KLS0kKE1LUk9NRlNfWEUpXzA6ICQoR0xTUkMpbWtyb21mcy5jICQoTUtST01GU19DT01NT05fREVQUykgJChNS1JPTUZTX09CSlNfMCkgJChNQUtFRElSUykKKy0kKE1LUk9NRlNfWEUpXzA6ICQoR0xTUkMpbWtyb21mcy5jICQoTUtST01GU19DT01NT05fREVQUykgJChNS1JPTUZTX09CSlNfMCkgJChVTklYX0FVWF9NQUspICQoTUFLRURJUlMpCiAtCSQoQ0NBVVhfKSAkKEdFTk9QVCkgJChDRkxBR1MpICQoSV8pJChHTFNSQ0RJUikkKF9JKSAkKElfKSQoR0xPQkopJChfSSkgJChJXykkKFpTUkNESVIpJChfSSkgJChHTFNSQylta3JvbWZzLmMgJChPXykkKE1LUk9NRlNfWEUpXzAgJChNS1JPTUZTX09CSlNfMCkgJChBVVhFWFRSQUxJQlMpCiAtCi0tIyAuLi4uIGFuZCBvbmUgdXNpbmcgdGhlIHpsaWIgbGlicmFyeSBsaW5rZWQgdmlhIHRoZSBjb21tYW5kIGxpbmUKKysjTUtST01GU19PQkpTXzA9JChNS1JPTUZTX1pMSUJfT0JKUykgJChBVVgpZ3BtaXNjLiQoT0JKKSAkKEFVWClncF9nZXRudi4kKE9CSikgXAorKyMgJChBVVgpZ3NjZGVmcy4kKE9CSikgJChBVVgpZ3BfdW5peC4kKE9CSikgJChBVVgpZ3BfdW5pZnMuJChPQkopICQoQVVYKWdwX3VuaWZuLiQoT0JKKSBcCisrIyAkKEFVWClncF9zdGRpYS4kKE9CSikgJChBVVgpZ3N1dGlsLiQoT0JKKSAkKEFVWCltZW1lbnRvLiQoT0JKKQorKyMKKysjJChNS1JPTUZTX1hFKV8wOiAkKEdMU1JDKW1rcm9tZnMuYyAkKE1LUk9NRlNfQ09NTU9OX0RFUFMpICQoTUtST01GU19PQkpTXzApICQoVU5JWF9BVVhfTUFLKSAkKE1BS0VESVJTKQorKyMJJChDQ0FVWF8pICQoR0VOT1BUKSAkKENGTEFHUykgJChJXykkKEdMU1JDRElSKSQoX0kpICQoSV8pJChHTE9CSikkKF9JKSAkKElfKSQoWlNSQ0RJUikkKF9JKSAkKEdMU1JDKW1rcm9tZnMuYyAkKE9fKSQoTUtST01GU19YRSlfMCAkKE1LUk9NRlNfT0JKU18wKSAkKEFVWEVYVFJBTElCUykKKysjCisgIyAuLi4uIGFuZCBvbmUgdXNpbmcgdGhlIHpsaWIgbGlicmFyeSBsaW5rZWQgdmlhIHRoZSBjb21tYW5kIGxpbmUKIC1NS1JPTUZTX09CSlNfMT0kKEFVWClnc2NkZWZzLiQoT0JKKSBcCiAtICQoQVVYKWdwbWlzYy4kKE9CSikgJChBVVgpZ3BfZ2V0bnYuJChPQkopIFwKIC0gJChBVVgpZ3BfdW5peC4kKE9CSikgJChBVVgpZ3BfdW5pZnMuJChPQkopICQoQVVYKWdwX3VuaWZuLiQoT0JKKSBcCiAtICQoQVVYKWdwX3N0ZGlhLiQoT0JKKSAkKEFVWClnc3V0aWwuJChPQkopCiAtCi0tJChNS1JPTUZTX1hFKV8xOiAkKEdMU1JDKW1rcm9tZnMuYyAkKE1LUk9NRlNfQ09NTU9OX0RFUFMpICQoTUtST01GU19PQkpTXzEpICQoTUFLRURJUlMpCistJChNS1JPTUZTX1hFKV8xOiAkKEdMU1JDKW1rcm9tZnMuYyAkKE1LUk9NRlNfQ09NTU9OX0RFUFMpICQoTUtST01GU19PQkpTXzEpICQoVU5JWF9BVVhfTUFLKSAkKE1BS0VESVJTKQogLQkkKENDQVVYXykgJChHRU5PUFQpICQoQ0ZMQUdTKSAkKElfKSQoR0xTUkNESVIpJChfSSkgJChJXykkKEdMT0JKKSQoX0kpICQoSV8pJChaU1JDRElSKSQoX0kpICQoR0xTUkMpbWtyb21mcy5jICQoT18pJChNS1JPTUZTX1hFKV8xICQoTUtST01GU19PQkpTXzEpICQoQVVYRVhUUkFMSUJTKQogLQotLSQoTUtST01GU19YRSk6ICQoTUtST01GU19YRSlfJChTSEFSRV9aTElCKSAkKE1BS0VESVJTKQorLSQoTUtST01GU19YRSk6ICQoTUtST01GU19YRSlfJChTSEFSRV9aTElCKSAkKFVOSVhfQVVYX01BSykgJChNQUtFRElSUykKIC0JJChDUF8pICQoTUtST01GU19YRSlfJChTSEFSRV9aTElCKSAkKE1LUk9NRlNfWEUpCi0rIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gQXV4aWxpYXJ5IHByb2dyYW1zIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjCi0rIwotKyMkKEVDSE9HU19YRSk6ICQoR0xTUkMpZWNob2dzLmMgJChBSykgJChzdGRwcmVfaCkgJChNQUtFRElSUykKLSsjCSQoQ0NBVVhfKSAkKElfKSQoR0xTUkNESVIpJChfSSkgJChPXykkKEVDSE9HU19YRSkgJChHTFNSQyllY2hvZ3MuYyAkKEFVWEVYVFJBTElCUykKLSsjCi0rIyMgT24gdGhlIFJTLzYwMDAgKGF0IGxlYXN0KSwgY29tcGlsaW5nIGdlbmFyY2guYyB3aXRoIGdjYyB3aXRoIC1PCi0rIyMgcHJvZHVjZXMgYSBidWdneSBleGVjdXRhYmxlLgotKyMkKEdFTkFSQ0hfWEUpOiAkKEdMU1JDKWdlbmFyY2guYyAkKEFLKSAkKEdFTkFSQ0hfREVQUykgJChNQUtFRElSUykKLSsjCSQoQ0NBVVhfKSAkKElfKSQoR0xTUkNESVIpJChfSSkgJChPXykkKEdFTkFSQ0hfWEUpICQoR0xTUkMpZ2VuYXJjaC5jICQoQVVYRVhUUkFMSUJTKQotKyMKLSsjJChHRU5DT05GX1hFKTogJChHTFNSQylnZW5jb25mLmMgJChBSykgJChHRU5DT05GX0RFUFMpICQoTUFLRURJUlMpCi0rIwkkKENDQVVYXykgJChJXykkKEdMU1JDRElSKSQoX0kpICQoT18pJChHRU5DT05GX1hFKSAkKEdMU1JDKWdlbmNvbmYuYyAkKEFVWEVYVFJBTElCUykKLSsjCi0rIyQoR0VOREVWX1hFKTogJChHTFNSQylnZW5kZXYuYyAkKEFLKSAkKEdFTkRFVl9ERVBTKSAkKE1BS0VESVJTKQotKyMJJChDQ0FVWF8pICQoSV8pJChHTFNSQ0RJUikkKF9JKSAkKE9fKSQoR0VOREVWX1hFKSAkKEdMU1JDKWdlbmRldi5jICQoQVVYRVhUUkFMSUJTKQotKyMKLSsjJChHRU5IVF9YRSk6ICQoR0xTUkMpZ2VuaHQuYyAkKEFLKSAkKEdFTkhUX0RFUFMpICQoTUFLRURJUlMpCi0rIwkkKENDQVVYXykgJChHRU5IVF9DRkxBR1MpICQoT18pJChHRU5IVF9YRSkgJChHTFNSQylnZW5odC5jICQoQVVYRVhUUkFMSUJTKQotKyMKLSsjIyBUbyBnZXQgR1MgdG8gdXNlIHRoZSBzeXN0ZW0gemxpYiwgeW91IHJlbW92ZS9oaWRlIHRoZSBncy96bGliIGRpcmVjdG9yeQotKyMjIHdoaWNoIG1lYW5zIHRoYXQgdGhlIG1rcm9tZnMgYnVpbGQgY2FuJ3QgZmluZCB0aGUgemxpYiBzb3VyY2UgaXQgbmVlZHMuCi0rIyMgU28gaXQncyBzcGxpdCBpbnRvIHR3byB0YXJnZXRzLCBvbmUgdXNpbmcgdGhlIHpsaWIgc291cmNlIGRpcmVjdGx5Li4uLi4KLSsjTUtST01GU19PQkpTXzA9JChNS1JPTUZTX1pMSUJfT0JKUykgJChBVVgpZ3BtaXNjLiQoT0JKKSAkKEFVWClncF9nZXRudi4kKE9CSikgXAotKyMgJChBVVgpZ3NjZGVmcy4kKE9CSikgJChBVVgpZ3BfdW5peC4kKE9CSikgJChBVVgpZ3BfdW5pZnMuJChPQkopICQoQVVYKWdwX3VuaWZuLiQoT0JKKSBcCi0rIyAkKEFVWClncF9zdGRpYS4kKE9CSikgJChBVVgpZ3N1dGlsLiQoT0JKKSAkKEFVWCltZW1lbnRvLiQoT0JKKQotKyMKLSsjJChNS1JPTUZTX1hFKV8wOiAkKEdMU1JDKW1rcm9tZnMuYyAkKE1LUk9NRlNfQ09NTU9OX0RFUFMpICQoTUtST01GU19PQkpTXzApICQoTUFLRURJUlMpCi0rIwkkKENDQVVYXykgJChHRU5PUFQpICQoQ0ZMQUdTKSAkKElfKSQoR0xTUkNESVIpJChfSSkgJChJXykkKEdMT0JKKSQoX0kpICQoSV8pJChaU1JDRElSKSQoX0kpICQoR0xTUkMpbWtyb21mcy5jICQoT18pJChNS1JPTUZTX1hFKV8wICQoTUtST01GU19PQkpTXzApICQoQVVYRVhUUkFMSUJTKQotKyMKLSsjIyAuLi4uIGFuZCBvbmUgdXNpbmcgdGhlIHpsaWIgbGlicmFyeSBsaW5rZWQgdmlhIHRoZSBjb21tYW5kIGxpbmUKICsjTUtST01GU19PQkpTXzE9JChBVVgpZ3NjZGVmcy4kKE9CSikgXAogKyMgJChBVVgpZ3BtaXNjLiQoT0JKKSAkKEFVWClncF9nZXRudi4kKE9CSikgXAogKyMgJChBVVgpZ3BfdW5peC4kKE9CSikgJChBVVgpZ3BfdW5pZnMuJChPQkopICQoQVVYKWdwX3VuaWZuLiQoT0JKKSBcCiArIyAkKEFVWClncF9zdGRpYS4kKE9CSikgJChBVVgpZ3N1dGlsLiQoT0JKKQogKyMKLSsjJChNS1JPTUZTX1hFKV8xOiAkKEdMU1JDKW1rcm9tZnMuYyAkKE1LUk9NRlNfQ09NTU9OX0RFUFMpICQoTUtST01GU19PQkpTXzEpICQoTUFLRURJUlMpCisrIyQoTUtST01GU19YRSlfMTogJChHTFNSQylta3JvbWZzLmMgJChNS1JPTUZTX0NPTU1PTl9ERVBTKSAkKE1LUk9NRlNfT0JKU18xKSAkKFVOSVhfQVVYX01BSykgJChNQUtFRElSUykKICsjCSQoQ0NBVVhfKSAkKEdFTk9QVCkgJChDRkxBR1MpICQoSV8pJChHTFNSQ0RJUikkKF9JKSAkKElfKSQoR0xPQkopJChfSSkgJChJXykkKFpTUkNESVIpJChfSSkgJChHTFNSQylta3JvbWZzLmMgJChPXykkKE1LUk9NRlNfWEUpXzEgJChNS1JPTUZTX09CSlNfMSkgJChBVVhFWFRSQUxJQlMpCiArIwotKyMkKE1LUk9NRlNfWEUpOiAkKE1LUk9NRlNfWEUpXyQoU0hBUkVfWkxJQikgJChNQUtFRElSUykKKysjJChNS1JPTUZTX1hFKTogJChNS1JPTUZTX1hFKV8kKFNIQVJFX1pMSUIpICQoVU5JWF9BVVhfTUFLKSAkKE1BS0VESVJTKQogKyMJJChDUF8pICQoTUtST01GU19YRSlfJChTSEFSRV9aTElCKSAkKE1LUk9NRlNfWEUpCiAgCiAgIyBRdWVyeSB0aGUgZW52aXJvbm1lbnQgdG8gY29uc3RydWN0IGdjb25maWdfLmguCiAgIyBUaGVzZSBhcmUgYWxsIGRlZmluZWQgY29uZGl0aW9uYWxseSAoZXhjZXB0IHRoZSBKYXNQRVIgb25lKSwgc28gdGhhdAorLS0gCisyLjguMQorCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2dob3N0c2NyaXB0L2dob3N0c2NyaXB0L3BuZ19tYWsucGF0Y2ggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2dob3N0c2NyaXB0L2dob3N0c2NyaXB0L3BuZ19tYWsucGF0Y2gKaW5kZXggZGE5MDBlYS4uOGI4NDk4NiAxMDA2NDQKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9naG9zdHNjcmlwdC9naG9zdHNjcmlwdC9wbmdfbWFrLnBhdGNoCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvZ2hvc3RzY3JpcHQvZ2hvc3RzY3JpcHQvcG5nX21hay5wYXRjaApAQCAtMSwyMSArMSwzMiBAQAogZ2hvc3RzY3JpcHQ6IGFkZCBkZXBlbmRlbmN5IGZvciBwbmdsaWJjb25mLmgKLSAgICAKKwogV2hlbiB1c2luZyBwYXJhbGxlbCBtYWtlIGpvYnMsIHdlIG5lZWQgdG8gYmUgc3VyZSB0aGF0CiBwbmdsaWJjb25mLmggaXMgY3JlYXRlZCBiZWZvcmUgd2UgdHJ5IHRvIHJlZmVyZW5jZSBpdCwKIHNvIGFkZCBhIHJ1bGUgdG8gcG5nLm1hay4KIAogVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCi0gICAgCisKIFNpZ25lZC1vZmYtYnk6IEpvZSBTbGF0ZXIgPGpzbGF0ZXJAd2luZHJpdmVyLmNvbT4KIAorUmViYXNlIHRvIDkuMTkKK1NpZ25lZC1vZmYtYnk6IEhvbmd4dSBKaWEgPGhvbmd4dS5qaWFAd2luZHJpdmVyLmNvbT4KKy0tLQorIGJhc2UvcG5nLm1hayB8IDIgKysKKyAxIGZpbGUgY2hhbmdlZCwgMiBpbnNlcnRpb25zKCspCisKK2RpZmYgLS1naXQgYS9iYXNlL3BuZy5tYWsgYi9iYXNlL3BuZy5tYWsKK2luZGV4IGZlNWM2ZTIuLjhhYmI1M2EgMTAwNjQ0CiAtLS0gYS9iYXNlL3BuZy5tYWsKICsrKyBiL2Jhc2UvcG5nLm1hawotQEAgLTgxLDYgKzgxLDggQEAgcG5nLmNvbmZpZy1jbGVhbiA6Ci0gJChwbmdsaWJjb25mX2gpIDogJChQTkdTUkMpc2NyaXB0cyQoRClwbmdsaWJjb25mLmgucHJlYnVpbHQKLSAJJChDUF8pICAkKFBOR1NSQylzY3JpcHRzJChEKXBuZ2xpYmNvbmYuaC5wcmVidWlsdCAkKHBuZ2xpYmNvbmZfaCkKK0BAIC03NCw2ICs3NCw4IEBAIHBuZy5jbGVhbi1ub3QtY29uZmlnLWNsZWFuIDoKKyAKKyBwbmdsaWJjb25mX2g9JChQTkdHRU5ESVIpJChEKXBuZ2xpYmNvbmYuaAogIAogKyQoTUFLRURJUlMpIDogJChwbmdsaWJjb25mX2gpCiArCi0gUERFUD0kKEFLKSAkKHBuZ2xpYmNvbmZfaCkgJChNQUtFRElSUykKLSAKLSBwbmdfMT0kKFBOR09CSilwbmcuJChPQkopICQoUE5HT0JKKXBuZ21lbS4kKE9CSikgJChQTkdPQkopcG5nZXJyb3IuJChPQkopICQoUE5HT0JKKXBuZ3NldC4kKE9CSikKKyBwbmcuY29uZmlnLWNsZWFuIDoKKyAJJChSTV8pICQocG5nbGliY29uZl9oKQorIAkkKFJNXykgJChQTkdHRU4pbHBnKi5kZXYKKy0tIAorMi44LjEKKwpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9naG9zdHNjcmlwdC9naG9zdHNjcmlwdF85LjE4LmJiIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9naG9zdHNjcmlwdC9naG9zdHNjcmlwdF85LjE4LmJiCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkNDIyMmM3Li4wMDAwMDAwCi0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvZ2hvc3RzY3JpcHQvZ2hvc3RzY3JpcHRfOS4xOC5iYgorKysgL2Rldi9udWxsCkBAIC0xLDEwNyArMCwwIEBACi1TVU1NQVJZID0gIlRoZSBHUEwgR2hvc3RzY3JpcHQgUG9zdFNjcmlwdC9QREYgaW50ZXJwcmV0ZXIiCi1ERVNDUklQVElPTiA9ICJHaG9zdHNjcmlwdCBpcyB1c2VkIGZvciBQb3N0U2NyaXB0L1BERiBwcmV2aWV3IGFuZCBwcmludGluZy4gIFVzdWFsbHkgYXMgXAotYSBiYWNrLWVuZCB0byBhIHByb2dyYW0gc3VjaCBhcyBnaG9zdHZpZXcsIGl0IGNhbiBkaXNwbGF5IFBvc3RTY3JpcHQgYW5kIFBERiBcCi1kb2N1bWVudHMgaW4gYW4gWDExIGVudmlyb25tZW50LiBcCi1cCi1GdXJ0aGVybW9yZSwgaXQgY2FuIHJlbmRlciBQb3N0U2NyaXB0IGFuZCBQREYgZmlsZXMgYXMgZ3JhcGhpY3MgdG8gYmUgcHJpbnRlZCBcCi1vbiBub24tUG9zdFNjcmlwdCBwcmludGVycy4gU3VwcG9ydGVkIHByaW50ZXJzIGluY2x1ZGUgY29tbW9uIFwKLWRvdC1tYXRyaXgsIGlua2pldCBhbmQgbGFzZXIgbW9kZWxzLiBcCi0iCi1IT01FUEFHRSA9ICJodHRwOi8vd3d3Lmdob3N0c2NyaXB0LmNvbSIKLVNFQ1RJT04gPSAiY29uc29sZS91dGlscyIKLQotTElDRU5TRSA9ICJHUEx2MyIKLUxJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0xJQ0VOU0U7bWQ1PWIxN2NlYTU0NzQzNDM1YWIyYTU4MWMyMzdiZWEyOTRhIgotCi1ERVBFTkRTID0gImdob3N0c2NyaXB0LW5hdGl2ZSB0aWZmIGpwZWcgZm9udGNvbmZpZyBjdXBzIGxpYnBuZyIKLURFUEVORFNfY2xhc3MtbmF0aXZlID0gImxpYnBuZy1uYXRpdmUiCi0KLVNSQ19VUklfQkFTRSA9ICJodHRwOi8vZG93bmxvYWRzLmdob3N0c2NyaXB0LmNvbS9wdWJsaWMvZ2hvc3RzY3JpcHQtJHtQVn0udGFyLmd6IFwKLSAgICAgICAgICAgICAgICBmaWxlOi8vZ2hvc3RzY3JpcHQtOS4xNS1wYXJhbGxlbC1tYWtlLnBhdGNoIFwKLSAgICAgICAgICAgICAgICBmaWxlOi8vZ2hvc3RzY3JpcHQtOS4xNi1XZXJyb3ItcmV0dXJuLXR5cGUucGF0Y2ggXAotICAgICAgICAgICAgICAgIGZpbGU6Ly9wbmdfbWFrLnBhdGNoIFwKLSAgICAgICAgICAgICAgICBmaWxlOi8vMDAwMS1CdWctNjk2NDk3LUZpeC1zdXBwb3J0LWZvci1idWlsZGluZy13aXRoLW5vLWpiaWcyLWRlLnBhdGNoIFwKLSAgICAgICAgICAgICAgICBmaWxlOi8vMDAwMi1CdWctNjk2NDk3LXBhcnQtMi1maXgtc3VwcG9ydC1mb3ItYnVpbGRpbmctd2l0aC1hLUpQLnBhdGNoIFwKLSAgICAgICAgICAgICAgICBmaWxlOi8vZG8tbm90LWNoZWNrLWxvY2FsLWxpYnBuZy1zb3VyY2UucGF0Y2ggXAotIgotCi1TUkNfVVJJID0gIiR7U1JDX1VSSV9CQVNFfSBcCi0gICAgICAgICAgIGZpbGU6Ly9naG9zdHNjcmlwdC05LjAyLXByZXZlbnRfcmVjb21waWxpbmcucGF0Y2ggXAotICAgICAgICAgICBmaWxlOi8vZ2hvc3RzY3JpcHQtOS4wMi1nZW5hcmNoLnBhdGNoIFwKLSAgICAgICAgICAgZmlsZTovL29iamFyY2guaCBcCi0gICAgICAgICAgIGZpbGU6Ly9jdXBzLW5vLWdjcnlwdC5wYXRjaCBcCi0gICAgICAgICAgICIKLQotU1JDX1VSSV9jbGFzcy1uYXRpdmUgPSAiJHtTUkNfVVJJX0JBU0V9IFwKLSAgICAgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9naG9zdHNjcmlwdC1uYXRpdmUtZml4LWRpc2FibGUtc3lzdGVtLWxpYnRpZmYucGF0Y2ggXAotICAgICAgICAgICAgICAgICAgICAgICAgZmlsZTovL2Jhc2UtZ2VuaHQuYy1hZGQtYS1wcmVwcm9jZXNzb3ItZGVmaW5lLXRvLWFsbG93LWZvcGUucGF0Y2ggXAotICAgICAgICAgICAgICAgICAgICAgICAgIgotCi1TUkNfVVJJW21kNXN1bV0gPSAiMzNhNDc1NjdkN2E1OTFjMDBhMjUzY2FkZGQxMmE4OGEiCi1TUkNfVVJJW3NoYTI1NnN1bV0gPSAiNWZjOTMwNzk3NDlhMjUwYmU1NDA0YzQ2NTk0Mzg1MGUzZWQ1ZmZiYzBkNWMwN2UxMGM3YzVlZThhZmJiZGIxYiIKLQotRVhUUkFfT0VDT05GID0gIi0td2l0aG91dC14IC0td2l0aC1zeXN0ZW0tbGlidGlmZiAtLXdpdGhvdXQtamJpZzJkZWMgXAotICAgICAgICAgICAgICAgIC0td2l0aC1mb250cGF0aD0ke2RhdGFkaXJ9L2ZvbnRzIFwKLSAgICAgICAgICAgICAgICAtLXdpdGhvdXQtbGliaWRuIC0td2l0aC1jdXBzLXNlcnZlcmJpbj0ke2V4ZWNfcHJlZml4fS9saWIvY3VwcyBcCi0gICAgICAgICAgICAgICAgLS13aXRoLWN1cHMtZGF0YWRpcj0ke2RhdGFkaXJ9L2N1cHMgXAotICAgICAgICAgICAgICAgICR7QGJhc2VfY29uZGl0aW9uYWwoJ1NJVEVJTkZPX0VORElBTk5FU1MnLCAnbGUnLCAnLS1lbmFibGUtbGl0dGxlLWVuZGlhbicsICctLWVuYWJsZS1iaWctZW5kaWFuJywgZCl9IFwKLSAgICAgICAgICAgICAgICAiCi0KLUVYVFJBX09FQ09ORl9hcHBlbmRfbWlwcyA9ICIgLS13aXRoLWxhcmdlX2NvbG9yX2luZGV4PTAiCi1FWFRSQV9PRUNPTkZfYXBwZW5kX21pcHNlbCA9ICIgLS13aXRoLWxhcmdlX2NvbG9yX2luZGV4PTAiCi0KLSMgRXhwbGljaXR5IGRpc2FibGUgbGlidGlmZiwgZm9udGNvbmZpZywKLSMgZnJlZXR5cGUsIGN1cHMgZm9yIGdob3N0c2NyaXB0LW5hdGl2ZQotRVhUUkFfT0VDT05GX2NsYXNzLW5hdGl2ZSA9ICItLXdpdGhvdXQteCAtLXdpdGgtc3lzdGVtLWxpYnRpZmY9bm8gXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLXdpdGhvdXQtamJpZzJkZWMgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLXdpdGgtZm9udHBhdGg9JHtkYXRhZGlyfS9mb250cyBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0td2l0aG91dC1saWJpZG4gLS1kaXNhYmxlLWZvbnRjb25maWcgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLWRpc2FibGUtZnJlZXR5cGUgLS1kaXNhYmxlLWN1cHMiCi0KLSMgVGhpcyBoYXMgYmVlbiBmaXhlZCB1cHN0cmVhbSBidXQgZm9yIG5vdyB3ZSBuZWVkIHRvIHN1YnZlcnQgdGhlIGNoZWNrIGZvciB0aW1lLmgKLSMgaHR0cDovL2J1Z3MuZ2hvc3RzY3JpcHQuY29tL3Nob3dfYnVnLmNnaT9pZD02OTI0NDMKLSMgaHR0cDovL2J1Z3MuZ2hvc3RzY3JpcHQuY29tL3Nob3dfYnVnLmNnaT9pZD02OTI0MjYKLUNGTEFHUyArPSAiLURIQVZFX1NZU19USU1FX0g9MSIKLUJVSUxEX0NGTEFHUyArPSAiLURIQVZFX1NZU19USU1FX0g9MSIKLQotaW5oZXJpdCBhdXRvdG9vbHMKLQotZG9fY29uZmlndXJlX3ByZXBlbmQgKCkgewotCW1rZGlyIC1wIG9iagotCW1rZGlyIC1wIHNvb2JqCi0JaWYgWyAtZSAke1dPUktESVJ9L29iamFyY2guaCBdOyB0aGVuCi0JCWNwICR7V09SS0RJUn0vb2JqYXJjaC5oIG9iai9hcmNoLmgKLQlmaQotfQotCi1kb19jb25maWd1cmVfYXBwZW5kICgpIHsKLQkjIGNvcHkgdG9vbHMgZnJvbSB0aGUgbmF0aXZlIGdob3N0c2NyaXB0IGJ1aWxkCi0JaWYgWyAiJHtQTn0iICE9ICJnaG9zdHNjcmlwdC1uYXRpdmUiIF07IHRoZW4KLQkJbWtkaXIgLXAgb2JqL2F1eCBzb29iagotCQlmb3IgaSBpbiBnZW5hcmNoIGdlbmNvbmYgbWtyb21mcyBlY2hvZ3MgZ2VuZGV2IGdlbmh0OyBkbwotCQkJY3AgJHtTVEFHSU5HX0JJTkRJUl9OQVRJVkV9L2dob3N0c2NyaXB0LSR7UFZ9LyRpIG9iai9hdXgvJGkKLQkJZG9uZQotCWZpCi19Ci0KLWRvX2luc3RhbGxfYXBwZW5kICgpIHsKLSAgICBta2RpciAtcCAke0R9JHtkYXRhZGlyfS9naG9zdHNjcmlwdC8ke1BWfS8KLSAgICBjcCAtciAke1N9L1Jlc291cmNlICR7RH0ke2RhdGFkaXJ9L2dob3N0c2NyaXB0LyR7UFZ9LwotICAgIGNwIC1yICR7U30vaWNjcHJvZmlsZXMgJHtEfSR7ZGF0YWRpcn0vZ2hvc3RzY3JpcHQvJHtQVn0vCi19Ci0KLWRvX2NvbXBpbGVfY2xhc3MtbmF0aXZlICgpIHsKLSAgICBta2RpciAtcCBvYmoKLSAgICBmb3IgaSBpbiBnZW5hcmNoIGdlbmNvbmYgbWtyb21mcyBlY2hvZ3MgZ2VuZGV2IGdlbmh0OyBkbwotICAgICAgICBvZV9ydW5tYWtlIG9iai9hdXgvJGkKLSAgICBkb25lCi19Ci0KLWRvX2luc3RhbGxfY2xhc3MtbmF0aXZlICgpIHsKLSAgICBpbnN0YWxsIC1kICR7RH0ke2JpbmRpcn0vZ2hvc3RzY3JpcHQtJHtQVn0KLSAgICBmb3IgaSBpbiBnZW5hcmNoIGdlbmNvbmYgbWtyb21mcyBlY2hvZ3MgZ2VuZGV2IGdlbmh0OyBkbwotICAgICAgICBpbnN0YWxsIC1tIDc1NSBvYmovYXV4LyRpICR7RH0ke2JpbmRpcn0vZ2hvc3RzY3JpcHQtJHtQVn0vJGkKLSAgICBkb25lCi19Ci0KLUJCQ0xBU1NFWFRFTkQgPSAibmF0aXZlIgpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9naG9zdHNjcmlwdC9naG9zdHNjcmlwdF85LjE5LmJiIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9naG9zdHNjcmlwdC9naG9zdHNjcmlwdF85LjE5LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZlMjAxNmIKLS0tIC9kZXYvbnVsbAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2dob3N0c2NyaXB0L2dob3N0c2NyaXB0XzkuMTkuYmIKQEAgLTAsMCArMSwxMDYgQEAKK1NVTU1BUlkgPSAiVGhlIEdQTCBHaG9zdHNjcmlwdCBQb3N0U2NyaXB0L1BERiBpbnRlcnByZXRlciIKK0RFU0NSSVBUSU9OID0gIkdob3N0c2NyaXB0IGlzIHVzZWQgZm9yIFBvc3RTY3JpcHQvUERGIHByZXZpZXcgYW5kIHByaW50aW5nLiAgVXN1YWxseSBhcyBcCithIGJhY2stZW5kIHRvIGEgcHJvZ3JhbSBzdWNoIGFzIGdob3N0dmlldywgaXQgY2FuIGRpc3BsYXkgUG9zdFNjcmlwdCBhbmQgUERGIFwKK2RvY3VtZW50cyBpbiBhbiBYMTEgZW52aXJvbm1lbnQuIFwKK1wKK0Z1cnRoZXJtb3JlLCBpdCBjYW4gcmVuZGVyIFBvc3RTY3JpcHQgYW5kIFBERiBmaWxlcyBhcyBncmFwaGljcyB0byBiZSBwcmludGVkIFwKK29uIG5vbi1Qb3N0U2NyaXB0IHByaW50ZXJzLiBTdXBwb3J0ZWQgcHJpbnRlcnMgaW5jbHVkZSBjb21tb24gXAorZG90LW1hdHJpeCwgaW5ramV0IGFuZCBsYXNlciBtb2RlbHMuIFwKKyIKK0hPTUVQQUdFID0gImh0dHA6Ly93d3cuZ2hvc3RzY3JpcHQuY29tIgorU0VDVElPTiA9ICJjb25zb2xlL3V0aWxzIgorCitMSUNFTlNFID0gIkdQTHYzIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vTElDRU5TRTttZDU9YjE3Y2VhNTQ3NDM0MzVhYjJhNTgxYzIzN2JlYTI5NGEiCisKK0RFUEVORFMgPSAiZ2hvc3RzY3JpcHQtbmF0aXZlIHRpZmYganBlZyBmb250Y29uZmlnIGN1cHMgbGlicG5nIgorREVQRU5EU19jbGFzcy1uYXRpdmUgPSAibGlicG5nLW5hdGl2ZSIKKworVVBTVFJFQU1fQ0hFQ0tfVVJJID0gImh0dHBzOi8vZ2l0aHViLmNvbS9BcnRpZmV4U29mdHdhcmUvZ2hvc3RwZGwtZG93bmxvYWRzL3JlbGVhc2VzIgorCitTUkNfVVJJX0JBU0UgPSAiaHR0cHM6Ly9naXRodWIuY29tL0FydGlmZXhTb2Z0d2FyZS9naG9zdHBkbC1kb3dubG9hZHMvcmVsZWFzZXMvZG93bmxvYWQvZ3M5MTkvJHtCUE59LSR7UFZ9LnRhci5neiBcCisgICAgICAgICAgICAgICAgZmlsZTovL2dob3N0c2NyaXB0LTkuMTUtcGFyYWxsZWwtbWFrZS5wYXRjaCBcCisgICAgICAgICAgICAgICAgZmlsZTovL2dob3N0c2NyaXB0LTkuMTYtV2Vycm9yLXJldHVybi10eXBlLnBhdGNoIFwKKyAgICAgICAgICAgICAgICBmaWxlOi8vcG5nX21hay5wYXRjaCBcCisgICAgICAgICAgICAgICAgZmlsZTovL2RvLW5vdC1jaGVjay1sb2NhbC1saWJwbmctc291cmNlLnBhdGNoIFwKKyIKKworU1JDX1VSSSA9ICIke1NSQ19VUklfQkFTRX0gXAorICAgICAgICAgICBmaWxlOi8vZ2hvc3RzY3JpcHQtOS4wMi1wcmV2ZW50X3JlY29tcGlsaW5nLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL2dob3N0c2NyaXB0LTkuMDItZ2VuYXJjaC5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9vYmphcmNoLmggXAorICAgICAgICAgICBmaWxlOi8vY3Vwcy1uby1nY3J5cHQucGF0Y2ggXAorICAgICAgICAgICAiCisKK1NSQ19VUklfY2xhc3MtbmF0aXZlID0gIiR7U1JDX1VSSV9CQVNFfSBcCisgICAgICAgICAgICAgICAgICAgICAgICBmaWxlOi8vZ2hvc3RzY3JpcHQtbmF0aXZlLWZpeC1kaXNhYmxlLXN5c3RlbS1saWJ0aWZmLnBhdGNoIFwKKyAgICAgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9iYXNlLWdlbmh0LmMtYWRkLWEtcHJlcHJvY2Vzc29yLWRlZmluZS10by1hbGxvdy1mb3BlLnBhdGNoIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICIKKworU1JDX1VSSVttZDVzdW1dID0gImM5NjgyY2U2Yjg1MmY5MTk3YzY5OTA1YTQzOTI4OTA3IgorU1JDX1VSSVtzaGEyNTZzdW1dID0gImNmM2MwZGNlNjdkYjE1NTdhODczNjY5Njk5NDVmOWM1MjM1ODg3OTg5YzBiNTg1ZTAzN2FmMzY2ZGMwMzU5ODkiCisKK0VYVFJBX09FQ09ORiA9ICItLXdpdGhvdXQteCAtLXdpdGgtc3lzdGVtLWxpYnRpZmYgLS13aXRob3V0LWpiaWcyZGVjIFwKKyAgICAgICAgICAgICAgICAtLXdpdGgtZm9udHBhdGg9JHtkYXRhZGlyfS9mb250cyBcCisgICAgICAgICAgICAgICAgLS13aXRob3V0LWxpYmlkbiAtLXdpdGgtY3Vwcy1zZXJ2ZXJiaW49JHtleGVjX3ByZWZpeH0vbGliL2N1cHMgXAorICAgICAgICAgICAgICAgIC0td2l0aC1jdXBzLWRhdGFkaXI9JHtkYXRhZGlyfS9jdXBzIFwKKyAgICAgICAgICAgICAgICAiCisKK0VYVFJBX09FQ09ORl9hcHBlbmRfbWlwcyA9ICIgLS13aXRoLWxhcmdlX2NvbG9yX2luZGV4PTAiCitFWFRSQV9PRUNPTkZfYXBwZW5kX21pcHNlbCA9ICIgLS13aXRoLWxhcmdlX2NvbG9yX2luZGV4PTAiCisKKyMgRXhwbGljaXR5IGRpc2FibGUgbGlidGlmZiwgZm9udGNvbmZpZywKKyMgZnJlZXR5cGUsIGN1cHMgZm9yIGdob3N0c2NyaXB0LW5hdGl2ZQorRVhUUkFfT0VDT05GX2NsYXNzLW5hdGl2ZSA9ICItLXdpdGhvdXQteCAtLXdpdGgtc3lzdGVtLWxpYnRpZmY9bm8gXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLXdpdGhvdXQtamJpZzJkZWMgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLXdpdGgtZm9udHBhdGg9JHtkYXRhZGlyfS9mb250cyBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0td2l0aG91dC1saWJpZG4gLS1kaXNhYmxlLWZvbnRjb25maWcgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLWRpc2FibGUtZnJlZXR5cGUgLS1kaXNhYmxlLWN1cHMiCisKKyMgVGhpcyBoYXMgYmVlbiBmaXhlZCB1cHN0cmVhbSBidXQgZm9yIG5vdyB3ZSBuZWVkIHRvIHN1YnZlcnQgdGhlIGNoZWNrIGZvciB0aW1lLmgKKyMgaHR0cDovL2J1Z3MuZ2hvc3RzY3JpcHQuY29tL3Nob3dfYnVnLmNnaT9pZD02OTI0NDMKKyMgaHR0cDovL2J1Z3MuZ2hvc3RzY3JpcHQuY29tL3Nob3dfYnVnLmNnaT9pZD02OTI0MjYKK0NGTEFHUyArPSAiLURIQVZFX1NZU19USU1FX0g9MSIKK0JVSUxEX0NGTEFHUyArPSAiLURIQVZFX1NZU19USU1FX0g9MSIKKworaW5oZXJpdCBhdXRvdG9vbHMKKworZG9fY29uZmlndXJlX3ByZXBlbmQgKCkgeworCW1rZGlyIC1wIG9iagorCW1rZGlyIC1wIHNvb2JqCisJaWYgWyAtZSAke1dPUktESVJ9L29iamFyY2guaCBdOyB0aGVuCisJCWNwICR7V09SS0RJUn0vb2JqYXJjaC5oIG9iai9hcmNoLmgKKwlmaQorfQorCitkb19jb25maWd1cmVfYXBwZW5kICgpIHsKKwkjIGNvcHkgdG9vbHMgZnJvbSB0aGUgbmF0aXZlIGdob3N0c2NyaXB0IGJ1aWxkCisJaWYgWyAiJHtQTn0iICE9ICJnaG9zdHNjcmlwdC1uYXRpdmUiIF07IHRoZW4KKwkJbWtkaXIgLXAgb2JqL2F1eCBzb29iagorCQlmb3IgaSBpbiBnZW5hcmNoIGdlbmNvbmYgbWtyb21mcyBlY2hvZ3MgZ2VuZGV2IGdlbmh0OyBkbworCQkJY3AgJHtTVEFHSU5HX0JJTkRJUl9OQVRJVkV9L2dob3N0c2NyaXB0LSR7UFZ9LyRpIG9iai9hdXgvJGkKKwkJZG9uZQorCWZpCit9CisKK2RvX2luc3RhbGxfYXBwZW5kICgpIHsKKyAgICBta2RpciAtcCAke0R9JHtkYXRhZGlyfS9naG9zdHNjcmlwdC8ke1BWfS8KKyAgICBjcCAtciAke1N9L1Jlc291cmNlICR7RH0ke2RhdGFkaXJ9L2dob3N0c2NyaXB0LyR7UFZ9LworICAgIGNwIC1yICR7U30vaWNjcHJvZmlsZXMgJHtEfSR7ZGF0YWRpcn0vZ2hvc3RzY3JpcHQvJHtQVn0vCit9CisKK2RvX2NvbXBpbGVfY2xhc3MtbmF0aXZlICgpIHsKKyAgICBta2RpciAtcCBvYmoKKyAgICBmb3IgaSBpbiBnZW5hcmNoIGdlbmNvbmYgbWtyb21mcyBlY2hvZ3MgZ2VuZGV2IGdlbmh0OyBkbworICAgICAgICBvZV9ydW5tYWtlIG9iai9hdXgvJGkKKyAgICBkb25lCit9CisKK2RvX2luc3RhbGxfY2xhc3MtbmF0aXZlICgpIHsKKyAgICBpbnN0YWxsIC1kICR7RH0ke2JpbmRpcn0vZ2hvc3RzY3JpcHQtJHtQVn0KKyAgICBmb3IgaSBpbiBnZW5hcmNoIGdlbmNvbmYgbWtyb21mcyBlY2hvZ3MgZ2VuZGV2IGdlbmh0OyBkbworICAgICAgICBpbnN0YWxsIC1tIDc1NSBvYmovYXV4LyRpICR7RH0ke2JpbmRpcn0vZ2hvc3RzY3JpcHQtJHtQVn0vJGkKKyAgICBkb25lCit9CisKK0JCQ0xBU1NFWFRFTkQgPSAibmF0aXZlIgpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9ncmVwL2dyZXAtMi41LjFhL2ZpeC1mb3ItdGV4aW5mby01LjEucGF0Y2ggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2dyZXAvZ3JlcC0yLjUuMWEvZml4LWZvci10ZXhpbmZvLTUuMS5wYXRjaAppbmRleCA1YTQxNDljLi5jZTU5NTA5IDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2dyZXAvZ3JlcC0yLjUuMWEvZml4LWZvci10ZXhpbmZvLTUuMS5wYXRjaAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2dyZXAvZ3JlcC0yLjUuMWEvZml4LWZvci10ZXhpbmZvLTUuMS5wYXRjaApAQCAtMSw2ICsxLDYgQEAKIFVwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbUG9reSBTcGVjaWZpYyB0aGlzIGlzIGdwbHYyIHZlcnNpb25dCiAKLVNpZ25lZC1vZmYtYnkgU2F1bCBXb2xkIDxzZ3dAbGludXguaW50ZWwuY29tPgorU2lnbmVkLW9mZi1ieTogU2F1bCBXb2xkIDxzZ3dAbGludXguaW50ZWwuY29tPgogCiBJbmRleDogZ3JlcC0yLjUuMWEvZG9jL2dyZXAudGV4aQogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9ncmVwL2dyZXAtMi41LjFhL2dyZXAtQ1ZFLTIwMTItNTY2Ny5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvZ3JlcC9ncmVwLTIuNS4xYS9ncmVwLUNWRS0yMDEyLTU2NjcucGF0Y2gKaW5kZXggNzIxZjJhMC4uYTQwYTlmMyAxMDA2NDQKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9ncmVwL2dyZXAtMi41LjFhL2dyZXAtQ1ZFLTIwMTItNTY2Ny5wYXRjaAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2dyZXAvZ3JlcC0yLjUuMWEvZ3JlcC1DVkUtMjAxMi01NjY3LnBhdGNoCkBAIC0xMiw3ICsxMiw3IEBACiBhY2NlcHRpbmcgcGF0Y2hlcy4gIFRoaXMgaXMgbm90IGEgYmFja3BvcnQuCiBDVkU6IENWRS0yMDEyLTU2NjcKIAotU2lnbmVkLW9mZi1ieSBNaW5nIExpdSA8bWluZy5saXVAd2luZHJpdmVyLmNvbT4KK1NpZ25lZC1vZmYtYnk6IE1pbmcgTGl1IDxtaW5nLmxpdUB3aW5kcml2ZXIuY29tPgogLS0tCiAgZ3JlcC5jIHwgICAgNyArKystLS0tCiAgMSBmaWxlIGNoYW5nZWQsIDMgaW5zZXJ0aW9ucygrKSwgNCBkZWxldGlvbnMoLSkKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvZ3JlcC9ncmVwLTIuNS4xYS9ncmVwX2ZpeF9mb3JfYXV0b21ha2UtMS4xMi5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvZ3JlcC9ncmVwLTIuNS4xYS9ncmVwX2ZpeF9mb3JfYXV0b21ha2UtMS4xMi5wYXRjaAppbmRleCAzY2NjZTVmLi5kOWIxZTM1IDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2dyZXAvZ3JlcC0yLjUuMWEvZ3JlcF9maXhfZm9yX2F1dG9tYWtlLTEuMTIucGF0Y2gKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9ncmVwL2dyZXAtMi41LjFhL2dyZXBfZml4X2Zvcl9hdXRvbWFrZS0xLjEyLnBhdGNoCkBAIC0xMyw3ICsxMyw3IEBACiB8IHNyYy9NYWtlZmlsZS5hbToyOiBlcnJvcjogYXV0b21hdGljIGRlLUFOU0ktZmljYXRpb24gc3VwcG9ydCBoYXMgYmVlbiByZW1vdmVkCiB8IGF1dG9yZWNvbmY6IGF1dG9tYWtlIGZhaWxlZCB3aXRoIGV4aXQgc3RhdHVzOiAxCiAKLVNpZ25lZC1PZmYtQnk6IE5pdGluIEEgS2FtYmxlIDxuaXRpbi5hLmthbWJsZUBpbnRlbC5jb20+CitTaWduZWQtb2ZmLWJ5OiBOaXRpbiBBIEthbWJsZSA8bml0aW4uYS5rYW1ibGVAaW50ZWwuY29tPgogMjAxMi8wNS8wNAogCiBJbmRleDogZ3JlcC0yLjUuMWEvY29uZmlndXJlLmluCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2dyZXAvZ3JlcF8yLjIzLmJiIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9ncmVwL2dyZXBfMi4yMy5iYgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTNmZjMyZC4uMDAwMDAwMAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2dyZXAvZ3JlcF8yLjIzLmJiCisrKyAvZGV2L251bGwKQEAgLTEsNDMgKzAsMCBAQAotU1VNTUFSWSA9ICJHTlUgZ3JlcCB1dGlsaXR5IgotSE9NRVBBR0UgPSAiaHR0cDovL3NhdmFubmFoLmdudS5vcmcvcHJvamVjdHMvZ3JlcC8iCi1CVUdUUkFDS0VSID0gImh0dHA6Ly9zYXZhbm5haC5nbnUub3JnL2J1Z3MvP2dyb3VwPWdyZXAiCi1TRUNUSU9OID0gImNvbnNvbGUvdXRpbHMiCi1MSUNFTlNFID0gIkdQTHYzIgotTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9ODAwNmQ5YzgxNDI3N2MxYmZjNGNhMjJhZjk0YjU5ZWUiCi0KLVNSQ19VUkkgPSAiJHtHTlVfTUlSUk9SfS9ncmVwL2dyZXAtJHtQVn0udGFyLnh6IFwKLSAgICAgICAgICAgZmlsZTovLzAwMDEtVW5zZXQtbmVlZF9jaGFyc2V0X2FsaWFzLXdoZW4tYnVpbGRpbmctZm9yLW11c2wucGF0Y2ggXAotICAgICAgICAgICIKLQotU1JDX1VSSVttZDVzdW1dID0gImY0NmFhOWQwZDI1NzdiOTIxMmExMDQzNDhhMjg2Nzg3IgotU1JDX1VSSVtzaGEyNTZzdW1dID0gIjU0ZmM0NzhlZTFjZTE3NzgwMTA5ODIwZWYzMDczMGM5ZTE4NzE1YTk0OWY3ZDVjNmFmYzY3M2FkYjJhNTZlY2YiCi0KLWluaGVyaXQgYXV0b3Rvb2xzIGdldHRleHQgdGV4aW5mbwotCi1FWFRSQV9PRUNPTkYgPSAiLS1kaXNhYmxlLXBlcmwtcmVnZXhwIgotCi1kb19jb25maWd1cmVfcHJlcGVuZCAoKSB7Ci0Jcm0gLWYgJHtTfS9tNC9pbml0Lm00Ci19Ci0KLWRvX2luc3RhbGwgKCkgewotCWF1dG90b29sc19kb19pbnN0YWxsCi0JaWYgWyAiJHtiYXNlX2JpbmRpcn0iICE9ICIke2JpbmRpcn0iIF07IHRoZW4KLQkJaW5zdGFsbCAtZCAke0R9JHtiYXNlX2JpbmRpcn0KLQkJbXYgJHtEfSR7YmluZGlyfS9ncmVwICR7RH0ke2Jhc2VfYmluZGlyfS9ncmVwCi0JCW12ICR7RH0ke2JpbmRpcn0vZWdyZXAgJHtEfSR7YmFzZV9iaW5kaXJ9L2VncmVwCi0JCW12ICR7RH0ke2JpbmRpcn0vZmdyZXAgJHtEfSR7YmFzZV9iaW5kaXJ9L2ZncmVwCi0JCXJtZGlyICR7RH0ke2JpbmRpcn0vCi0JZmkKLX0KLQotaW5oZXJpdCB1cGRhdGUtYWx0ZXJuYXRpdmVzCi0KLUFMVEVSTkFUSVZFX1BSSU9SSVRZID0gIjEwMCIKLQotQUxURVJOQVRJVkVfJHtQTn0gPSAiZ3JlcCBlZ3JlcCBmZ3JlcCIKLUFMVEVSTkFUSVZFX0xJTktfTkFNRVtncmVwXSA9ICIke2Jhc2VfYmluZGlyfS9ncmVwIgotQUxURVJOQVRJVkVfTElOS19OQU1FW2VncmVwXSA9ICIke2Jhc2VfYmluZGlyfS9lZ3JlcCIKLUFMVEVSTkFUSVZFX0xJTktfTkFNRVtmZ3JlcF0gPSAiJHtiYXNlX2JpbmRpcn0vZmdyZXAiCi0KLWV4cG9ydCBDT05GSUdfU0hFTEw9Ii9iaW4vc2giCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2dyZXAvZ3JlcF8yLjI1LmJiIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9ncmVwL2dyZXBfMi4yNS5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45NzIwZDlmCi0tLSAvZGV2L251bGwKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9ncmVwL2dyZXBfMi4yNS5iYgpAQCAtMCwwICsxLDQzIEBACitTVU1NQVJZID0gIkdOVSBncmVwIHV0aWxpdHkiCitIT01FUEFHRSA9ICJodHRwOi8vc2F2YW5uYWguZ251Lm9yZy9wcm9qZWN0cy9ncmVwLyIKK0JVR1RSQUNLRVIgPSAiaHR0cDovL3NhdmFubmFoLmdudS5vcmcvYnVncy8/Z3JvdXA9Z3JlcCIKK1NFQ1RJT04gPSAiY29uc29sZS91dGlscyIKK0xJQ0VOU0UgPSAiR1BMdjMiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT04MDA2ZDljODE0Mjc3YzFiZmM0Y2EyMmFmOTRiNTllZSIKKworU1JDX1VSSSA9ICIke0dOVV9NSVJST1J9L2dyZXAvZ3JlcC0ke1BWfS50YXIueHogXAorICAgICAgICAgICBmaWxlOi8vMDAwMS1VbnNldC1uZWVkX2NoYXJzZXRfYWxpYXMtd2hlbi1idWlsZGluZy1mb3ItbXVzbC5wYXRjaCBcCisgICAgICAgICAgIgorCitTUkNfVVJJW21kNXN1bV0gPSAiMDRlOTZiMGU2ZjBmZTZhMTgwYWU2MmM4OGZjZDBhZjYiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiZTIxZTgzYmFjNTA0NTBlMGQwZDYxYTQyYzE1NGVlMGRjZWFhY2RiZjRmNjA0ZWY2ZTc5MDcxY2I4ZTU5NjgzMCIKKworaW5oZXJpdCBhdXRvdG9vbHMgZ2V0dGV4dCB0ZXhpbmZvCisKK0VYVFJBX09FQ09ORiA9ICItLWRpc2FibGUtcGVybC1yZWdleHAiCisKK2RvX2NvbmZpZ3VyZV9wcmVwZW5kICgpIHsKKwlybSAtZiAke1N9L200L2luaXQubTQKK30KKworZG9faW5zdGFsbCAoKSB7CisJYXV0b3Rvb2xzX2RvX2luc3RhbGwKKwlpZiBbICIke2Jhc2VfYmluZGlyfSIgIT0gIiR7YmluZGlyfSIgXTsgdGhlbgorCQlpbnN0YWxsIC1kICR7RH0ke2Jhc2VfYmluZGlyfQorCQltdiAke0R9JHtiaW5kaXJ9L2dyZXAgJHtEfSR7YmFzZV9iaW5kaXJ9L2dyZXAKKwkJbXYgJHtEfSR7YmluZGlyfS9lZ3JlcCAke0R9JHtiYXNlX2JpbmRpcn0vZWdyZXAKKwkJbXYgJHtEfSR7YmluZGlyfS9mZ3JlcCAke0R9JHtiYXNlX2JpbmRpcn0vZmdyZXAKKwkJcm1kaXIgJHtEfSR7YmluZGlyfS8KKwlmaQorfQorCitpbmhlcml0IHVwZGF0ZS1hbHRlcm5hdGl2ZXMKKworQUxURVJOQVRJVkVfUFJJT1JJVFkgPSAiMTAwIgorCitBTFRFUk5BVElWRV8ke1BOfSA9ICJncmVwIGVncmVwIGZncmVwIgorQUxURVJOQVRJVkVfTElOS19OQU1FW2dyZXBdID0gIiR7YmFzZV9iaW5kaXJ9L2dyZXAiCitBTFRFUk5BVElWRV9MSU5LX05BTUVbZWdyZXBdID0gIiR7YmFzZV9iaW5kaXJ9L2VncmVwIgorQUxURVJOQVRJVkVfTElOS19OQU1FW2ZncmVwXSA9ICIke2Jhc2VfYmluZGlyfS9mZ3JlcCIKKworZXhwb3J0IENPTkZJR19TSEVMTD0iL2Jpbi9zaCIKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvZ3JvZmYvZ3JvZmYtMS4xOC4xLjQvZml4LW5hcnJvd2luZy1jb252ZXJzaW9uLWVycm9yLnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9ncm9mZi9ncm9mZi0xLjE4LjEuNC9maXgtbmFycm93aW5nLWNvbnZlcnNpb24tZXJyb3IucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGIwMTc2ZgotLS0gL2Rldi9udWxsCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvZ3JvZmYvZ3JvZmYtMS4xOC4xLjQvZml4LW5hcnJvd2luZy1jb252ZXJzaW9uLWVycm9yLnBhdGNoCkBAIC0wLDAgKzEsNjEgQEAKK0Zyb20gZmMyODlhYjY5YzZkN2U0YWQ0ODkxNzI1MDlhODVmNjhhZmVjNDNlYSBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEhvbmd4dSBKaWEgPGhvbmd4dS5qaWFAd2luZHJpdmVyLmNvbT4KK0RhdGU6IEZyaSwgMjkgSnVsIDIwMTYgMDM6MTk6MzkgLTA0MDAKK1N1YmplY3Q6IFtQQVRDSF0gZml4IG5hcnJvd2luZyBjb252ZXJzaW9uIGVycm9yCisKK1doaWxlIGdjYzYgdXNlZCwgYnVpbGQgb2xkIGdyb2ZmIChmb3IgYW50aS1HUEx2MyByZWFzb25zKSBmYWlsZWQ6CisuLi4uLgorfGdyb2ZmLTEuMTguMS40L3NyYy9kZXZpY2VzL2dyb2xicC9jaGFyc2V0Lmg6Njk6MTogZXJyb3I6IG5hcnJvd2luZworY29udmVyc2lvbiBvZiAnMTMwJyBmcm9tICdpbnQnIHRvICdjaGFyJyBpbnNpZGUgeyB9IFstV25hcnJvd2luZ10KKy4uLi4uLgorCitJbiB1cHN0cmVhbSBnaXQ6Ly9naXQuc2F2YW5uYWguZ251Lm9yZy9ncm9mZi5naXQsCit0aGUgZm9sbG93aW5nIGNvbW1pdCBmaXggdGhlIGlzc3VlLCBidXQgdGhlIGxpY2Vuc2UgaXMgR1BMVjMsCit3ZSBjb3VsZCBub3QgYmFja3BvcnQgaXQgdG8gdGhlIG9sZCBncm9mZiB3aGljaCBsaWNlbnNlIGlzIEdQTFYyLgorLi4uCitjb21taXQgZDE4MDAzOGFlMGRhMTk2NTViYzI3NjBhZTIwNDNlZmEwNTUwYTc2YworQXV0aG9yOiBXZXJuZXIgTEVNQkVSRyA8d2xAZ251Lm9yZz4KK0RhdGU6ICAgV2VkIEFwciAxNiAyMToxMTowNyAyMDAzICswMDAwCisgICAgKiBzcmMvZGV2aWNlcy9ncm9sYnAvY2hhcnNldC5oIChzeW1zZXQpOiBVc2UgYHVuc2lnbmVkIGNoYXInLgorLi4uCisKK1dlIHVzZSBhbm90aGVyIGRpZmZlcmVudCB3YXkgdG8gZml4IHRoZSBpc3N1ZS4KKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK1NpZ25lZC1vZmYtYnk6IEhvbmd4dSBKaWEgPGhvbmd4dS5qaWFAd2luZHJpdmVyLmNvbT4KKy0tLQorIHNyYy9kZXZpY2VzL2dyb2xicC9jaGFyc2V0LmggfCAyICstCisgc3JjL2RldmljZXMvZ3JvbGJwL2xicC5jYyAgICB8IDQgKystLQorIDIgZmlsZXMgY2hhbmdlZCwgMyBpbnNlcnRpb25zKCspLCAzIGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvc3JjL2RldmljZXMvZ3JvbGJwL2NoYXJzZXQuaCBiL3NyYy9kZXZpY2VzL2dyb2xicC9jaGFyc2V0LmgKK2luZGV4IGFkYzc2ZjQuLmU5YzZjNWIgMTAwNjQ0CistLS0gYS9zcmMvZGV2aWNlcy9ncm9sYnAvY2hhcnNldC5oCisrKysgYi9zcmMvZGV2aWNlcy9ncm9sYnAvY2hhcnNldC5oCitAQCAtMSw2ICsxLDYgQEAKKyAvLyBEZWZpbml0aW9uIG9mIHRoZSBXUDU0IGNoYXJhY3RlciBzZXQKKyAKKy1jaGFyIHN5bXNldFtdID0geworK2ludCBzeW1zZXRbXSA9IHsKKyAweDU3LDB4NTAsMHgzNSwweDM0LDB4MDAsMHg0MSwweDc2LDB4NjEsMHg2ZSwweDc0LDB4NDcsMHg2MSwKKyAweDcyLDB4NjQsMHg2NSwweDJkLDB4NDIsMHg2ZiwweDZmLDB4NmIsMHgwMCwweDQxLDB4NzYsCisgMHg2MSwweDZlLDB4NzQsMHg0NywweDYxLDB4NzIsMHg2NCwweDY1LDB4MmQsMHg0NCwweDY1LAorZGlmZiAtLWdpdCBhL3NyYy9kZXZpY2VzL2dyb2xicC9sYnAuY2MgYi9zcmMvZGV2aWNlcy9ncm9sYnAvbGJwLmNjCitpbmRleCA3NmRiMzJhLi4wMGQ0Y2E3IDEwMDY0NAorLS0tIGEvc3JjL2RldmljZXMvZ3JvbGJwL2xicC5jYworKysrIGIvc3JjL2RldmljZXMvZ3JvbGJwL2xicC5jYworQEAgLTE1Miw4ICsxNTIsOCBAQCBzdGF0aWMgdm9pZCB3cDU0Y2hhcnNldCgpCisgeworICAgdW5zaWduZWQgaW50IGk7CisgICBsYnBwdXRzKCJcMDMzWzcxNDsxMDA7Mjk7MDszMjsxMjAufSIpOworLSAgZm9yIChpID0gMDsgaSA8IHNpemVvZihzeW1zZXQpOyBpKyspCistICAgIGxicHB1dGMoc3ltc2V0W2ldKTsKKysgIGZvciAoaSA9IDA7IGkgPCBzaXplb2Yoc3ltc2V0KS9zaXplb2Yoc3ltc2V0WzBdKTsgaSsrKQorKyAgICBsYnBwdXRjKChjaGFyKXN5bXNldFtpXSYweEZGKTsKKyAgIGxicHB1dHMoIlwwMzNbMTAwOzAgRCIpOworICAgcmV0dXJuOworIH0KKy0tIAorMi44LjEKKwpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9ncm9mZi9ncm9mZl8xLjE4LjEuNC5iYiBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvZ3JvZmYvZ3JvZmZfMS4xOC4xLjQuYmIKaW5kZXggYmQ3ODZhMy4uZmM3ZWI0NCAxMDA2NDQKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9ncm9mZi9ncm9mZl8xLjE4LjEuNC5iYgorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2dyb2ZmL2dyb2ZmXzEuMTguMS40LmJiCkBAIC0xMyw2ICsxMyw3IEBACiAgICAgICAgICAgZmlsZTovL21hbi1sb2NhbC5wYXRjaCBcCiAgICAgICAgICAgZmlsZTovL21kb2MtbG9jYWwucGF0Y2ggXAogICAgICAgICAgIGZpbGU6Ly9ncm9mZi0xLjE4LjEuNC1maXgtYmluZGlyLnBhdGNoIFwKKyAgICAgICAgICBmaWxlOi8vZml4LW5hcnJvd2luZy1jb252ZXJzaW9uLWVycm9yLnBhdGNoIFwKICIgCiAKIGluaGVyaXQgYXV0b3Rvb2xzIHRleGluZm8KZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvZ3JvZmYvZ3JvZmZfMS4yMi4zLmJiIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9ncm9mZi9ncm9mZl8xLjIyLjMuYmIKaW5kZXggNGJmZmE4MS4uZGQyNDFmMyAxMDA2NDQKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9ncm9mZi9ncm9mZl8xLjIyLjMuYmIKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9ncm9mZi9ncm9mZl8xLjIyLjMuYmIKQEAgLTU2LDYgKzU2LDE3IEBACiAJaWYgWyAtZSAke0R9JHtsaWJkaXJ9L2NoYXJzZXQuYWxpYXMgXTsgdGhlbgogCQlybSAtcmYgJHtEfSR7bGliZGlyfS9jaGFyc2V0LmFsaWFzCiAJZmkKKworCSMgYXdrIGlzIGxvY2F0ZWQgYXQgL3Vzci9iaW4vLCBub3QgL2Jpbi8KKwlTUEVDSUFMX0FXSz1gZmluZCAke0R9IC1uYW1lIHNwZWNpYWwuYXdrYAorCWlmIFsgLWYgJHtTUEVDSUFMX0FXS30gXTsgdGhlbgorCQlzZWQgLWkgLWUgJ3M6IyEuKmF3azojISAke1VTUkJJTlBBVEh9L2F3azonICR7U1BFQ0lBTF9BV0t9CisJZmkKKworCSMgbm90IHNoaXAgL3Vzci9iaW4vZ2xpbHlwb25kIGFuZCBpdHMgcmVsZWF0ZWQgZmlsZXMgaW4gZW1iZWRkZWQgdGFyZ2V0IHN5c3RlbQorCXJtIC1yZiAke0R9JHtiaW5kaXJ9L2dsaWx5cG9uZAorCXJtIC1yZiAke0R9JHtsaWJkaXJ9L2dyb2ZmL2dsaWx5cG9uZAorCXJtIC1yZiAke0R9JHttYW5kaXJ9L21hbjEvZ2xpbHlwb25kKgogfQogCiBkb19pbnN0YWxsX2FwcGVuZF9jbGFzcy1uYXRpdmUoKSB7CmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2d6aXAvZ3ppcC0xLjYvd3JvbmctcGF0aC1maXgucGF0Y2ggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2d6aXAvZ3ppcC0xLjYvd3JvbmctcGF0aC1maXgucGF0Y2gKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDkyODYzZDYuLjAwMDAwMDAKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9nemlwL2d6aXAtMS42L3dyb25nLXBhdGgtZml4LnBhdGNoCisrKyAvZGV2L251bGwKQEAgLTEsMzEgKzAsMCBAQAotZml4IE1ha2VNYWtlciBpc3N1ZXMgd2l0aCB1c2luZyB3cm9uZyBTSEVMTC9HUkVQCi0KLUEgc2V0IG9mIHN1YnN0aXR1dGlvbiBpcyBiZWluZyBwcm9jZXNzZWQgdG8gYWxsIHRhcmdldCBzY3JpcHRzIHdpdGggc2VkIGJ5Ci1yZXBsYWNpbmcgc29tZSBrZXkgd29yZHMgd2l0aCB0aGUgZGV0ZWN0ZWQgdmFsdWVzIGF0IGNvbmZpZ3VyZSB0aW1lLCB0aGlzCi1pcyBleGFjdGx5IG5vdCBjb21wbGlhbnQgd2l0aCBjcm9zcyBjb21wbGluZywgYW5kIHdpbGwgY2F1c2UgbWlzc2luZyBwYXRoCi1lcnJvcnMgYXQgcnVuIHRpbWUgbGlrZToKLSIvdXNyL2Jpbi96Z3JlcDogbGluZSAyMzA6IC91c3IvYmluL2dyZXA6IE5vIHN1Y2ggZmlsZSBvciBkaXJlY3RvcnkiCi0KLUZpeGVkIGJ5IHJlbW92aW5nIHVubmVlZGVkIHN1YnN0aXR1dGlvbiBhbmQgdXNpbmcgcmVhbCBydW50aW1lIHBhdGhzCi1pbnN0ZWFkLgotCi1TaWduZWQtb2ZmLWJ5OiBNaW5nIExpdSA8bWluZy5saXVAd2luZHJpdmVyLmNvbT4KLQotVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCi0KLUluZGV4OiBnemlwLTEuMy4xMi9NYWtlZmlsZS5hbQotPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotZGlmZiAtdXJwTiBhL01ha2VmaWxlLmFtIGIvTWFrZWZpbGUuYW0KLS0tLSBhL01ha2VmaWxlLmFtCTIwMTMtMTEtMzAgMTA6MDY6MDkuNDAyMjM0ODcxICswODAwCi0rKysgYi9NYWtlZmlsZS5hbQkyMDEzLTExLTMwIDEwOjEzOjQyLjk1MjIzNjAyNSArMDgwMAotQEAgLTgxLDkgKzgxLDggQEAgZ3ppcC5kb2MuZ3o6IGd6aXAuZG9jICQoYmluX1BST0dSQU1TKQotIFNVRkZJWEVTID0gLmluCi0gLmluOgotIAkkKEFNX1ZfR0VOKXNlZCBcCi0tCQktZSAnc3wvYmluL3NofCQoU0hFTEwpfGcnIFwKLSAJCS1lICdzfFtAXWJpbmRpckB8J1wnJyQoYmluZGlyKSdcJyd8ZycgXAotLQkJLWUgJ3N8W0BdR1JFUEB8JChHUkVQKXxnJyBcCi0rCQktZSAnc3xbQF1HUkVQQHwkKGJhc2VfYmluZGlyKS9ncmVwfGcnIFwKLSAJCS1lICdzfFtAXVZFUlNJT05AfCQoVkVSU0lPTil8ZycgXAotIAkJJChzcmNkaXIpLyRALmluID4kQC10IFwKLSAJICAmJiBjaG1vZCBhK3ggJEAtdCBcCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2d6aXAvZ3ppcC0xLjgvd3JvbmctcGF0aC1maXgucGF0Y2ggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2d6aXAvZ3ppcC0xLjgvd3JvbmctcGF0aC1maXgucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGRjMTAwMAotLS0gL2Rldi9udWxsCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvZ3ppcC9nemlwLTEuOC93cm9uZy1wYXRoLWZpeC5wYXRjaApAQCAtMCwwICsxLDI5IEBACitmaXggTWFrZU1ha2VyIGlzc3VlcyB3aXRoIHVzaW5nIHdyb25nIFNIRUxML0dSRVAKKworQSBzZXQgb2Ygc3Vic3RpdHV0aW9uIGlzIGJlaW5nIHByb2Nlc3NlZCB0byBhbGwgdGFyZ2V0IHNjcmlwdHMgd2l0aCBzZWQgYnkKK3JlcGxhY2luZyBzb21lIGtleSB3b3JkcyB3aXRoIHRoZSBkZXRlY3RlZCB2YWx1ZXMgYXQgY29uZmlndXJlIHRpbWUsIHRoaXMKK2lzIGV4YWN0bHkgbm90IGNvbXBsaWFudCB3aXRoIGNyb3NzIGNvbXBsaW5nLCBhbmQgd2lsbCBjYXVzZSBtaXNzaW5nIHBhdGgKK2Vycm9ycyBhdCBydW4gdGltZSBsaWtlOgorIi91c3IvYmluL3pncmVwOiBsaW5lIDIzMDogL3Vzci9iaW4vZ3JlcDogTm8gc3VjaCBmaWxlIG9yIGRpcmVjdG9yeSIKKworRml4ZWQgYnkgcmVtb3ZpbmcgdW5uZWVkZWQgc3Vic3RpdHV0aW9uIGFuZCB1c2luZyByZWFsIHJ1bnRpbWUgcGF0aHMKK2luc3RlYWQuCisKK1NpZ25lZC1vZmYtYnk6IE1pbmcgTGl1IDxtaW5nLmxpdUB3aW5kcml2ZXIuY29tPgorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworSW5kZXg6IGd6aXAtMS44L01ha2VmaWxlLmFtCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZ3ppcC0xLjgub3JpZy9NYWtlZmlsZS5hbQorKysrIGd6aXAtMS44L01ha2VmaWxlLmFtCitAQCAtODEsOCArODEsNyBAQCBnemlwLmRvYy5nejogZ3ppcC5kb2MgJChiaW5fUFJPR1JBTVMpCisgU1VGRklYRVMgPSAuaW4KKyAuaW46CisgCSQoQU1fVl9HRU4pc2VkIFwKKy0JCS1lICdzfC9iaW4vc2h8JChTSEVMTCl8ZycgXAorLQkJLWUgJ3N8W0BdR1JFUEB8JChHUkVQKXxnJyBcCisrCQktZSAnc3xbQF1HUkVQQHwkKGJhc2VfYmluZGlyKS9ncmVwfGcnIFwKKyAJCS1lICdzfFtAXVZFUlNJT05AfCQoVkVSU0lPTil8ZycgXAorIAkJJChzcmNkaXIpLyRALmluID4kQC10IFwKKyAJICAmJiBjaG1vZCBhK3ggJEAtdCBcCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2d6aXAvZ3ppcC5pbmMgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2d6aXAvZ3ppcC5pbmMKaW5kZXggNmU4MTg4My4uMDRmOGY5NSAxMDA2NDQKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9nemlwL2d6aXAuaW5jCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvZ3ppcC9nemlwLmluYwpAQCAtMjIsMTEgKzIyLDYgQEAKIAlmaQogfQogCi1kb19pbnN0YWxsX2FwcGVuZF9saWJjLW11c2wgKCkgewotCXJtICR7RH0ke2xpYmRpcn0vY2hhcnNldC5hbGlhcwotCXJtZGlyICR7RH0ke2xpYmRpcn0KLX0KLQogaW5oZXJpdCB1cGRhdGUtYWx0ZXJuYXRpdmVzCiAKIEFMVEVSTkFUSVZFX1BSSU9SSVRZID0gIjEwMCIKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvZ3ppcC9nemlwXzEuNi5iYiBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvZ3ppcC9nemlwXzEuNi5iYgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjM0N2YwYi4uMDAwMDAwMAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2d6aXAvZ3ppcF8xLjYuYmIKKysrIC9kZXYvbnVsbApAQCAtMSwxNyArMCwwIEBACi1yZXF1aXJlIGd6aXAuaW5jCi0KLUxJQ0VOU0UgPSAiR1BMdjMrIgotCi1TUkNfVVJJID0gIiR7R05VX01JUlJPUn0vZ3ppcC8ke0JQfS50YXIuZ3oiCi1TUkNfVVJJX2FwcGVuZF9jbGFzcy10YXJnZXQgPSAiIGZpbGU6Ly93cm9uZy1wYXRoLWZpeC5wYXRjaCIKLQotTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9ZDMyMjM5YmNiNjczNDYzYWI4NzRlODBkNDdmYWU1MDQgXAotICAgICAgICAgICAgICAgICAgICBmaWxlOi8vZ3ppcC5oO2JlZ2lubGluZT04O2VuZGxpbmU9MjA7bWQ1PTZlNDdjYWFhNjMwZTBjOGJmOWYxYmM4ZDk0YThlZDBlIgotCi1QUk9WSURFU19hcHBlbmRfY2xhc3MtbmF0aXZlID0gIiBnemlwLXJlcGxhY2VtZW50LW5hdGl2ZSIKLU5BVElWRV9QQUNLQUdFX1BBVEhfU1VGRklYID0gIi8ke1BOfSIKLQotQkJDTEFTU0VYVEVORCA9ICJuYXRpdmUiCi0KLVNSQ19VUklbbWQ1c3VtXSA9ICIzODYwM2NiMjg0M2JmNTY4MWZmNDFhYWIzYmNkNmEyMCIKLVNSQ19VUklbc2hhMjU2c3VtXSA9ICI5N2ViODNiNzYzZDllNWFkMzVmMzUxZmU1NTE3ZTZiNzE1MjFkN2FhYzdhY2YzZTNjYWNkYjZiMTQ5NmQ4ZjdlIgpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9nemlwL2d6aXBfMS44LmJiIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9nemlwL2d6aXBfMS44LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmExOWI5NjUKLS0tIC9kZXYvbnVsbAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2d6aXAvZ3ppcF8xLjguYmIKQEAgLTAsMCArMSwxOCBAQAorcmVxdWlyZSBnemlwLmluYworCitMSUNFTlNFID0gIkdQTHYzKyIKKworU1JDX1VSSSA9ICIke0dOVV9NSVJST1J9L2d6aXAvJHtCUH0udGFyLmd6IgorU1JDX1VSSV9hcHBlbmRfY2xhc3MtdGFyZ2V0ID0gIiBmaWxlOi8vd3JvbmctcGF0aC1maXgucGF0Y2giCisKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PWQzMjIzOWJjYjY3MzQ2M2FiODc0ZTgwZDQ3ZmFlNTA0IFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL2d6aXAuaDtiZWdpbmxpbmU9ODtlbmRsaW5lPTIwO21kNT02ZTQ3Y2FhYTYzMGUwYzhiZjlmMWJjOGQ5NGE4ZWQwZSIKKworUFJPVklERVNfYXBwZW5kX2NsYXNzLW5hdGl2ZSA9ICIgZ3ppcC1yZXBsYWNlbWVudC1uYXRpdmUiCitOQVRJVkVfUEFDS0FHRV9QQVRIX1NVRkZJWCA9ICIvJHtQTn0iCisKK0JCQ0xBU1NFWFRFTkQgPSAibmF0aXZlIgorCitTUkNfVVJJW21kNXN1bV0gPSAiNzMyNTUzMTUyODE0YjIyZGMzNWFhMDI2N2RmNTI4NmMiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiMWZmN2FlZGIzZDY2YTBkNzNmNDQyZjYyNjFlNGIzODYwZGY2ZmQ2Yzk0MDI1YzJjYjMxYTIwMmM5YzYwZmUwZSIKKwpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9oZHBhcm0vaGRwYXJtXzkuNDguYmIgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2hkcGFybS9oZHBhcm1fOS40OC5iYgppbmRleCBlYzNkMjZmLi5jZDg1Nzc2IDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2hkcGFybS9oZHBhcm1fOS40OC5iYgorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2hkcGFybS9oZHBhcm1fOS40OC5iYgpAQCAtMiw4ICsyLDEyIEBACiBERVNDUklQVElPTiA9ICJoZHBhcm0gaXMgYSBMaW51eCBzaGVsbCB1dGlsaXR5IGZvciB2aWV3aW5nIFwKIGFuZCBtYW5pcHVsYXRpbmcgdmFyaW91cyBJREUgZHJpdmUgYW5kIGRyaXZlciBwYXJhbWV0ZXJzLiIKIFNFQ1RJT04gPSAiY29uc29sZS91dGlscyIKLUxJQ0VOU0UgPSAiQlNEIgorCitMSUNFTlNFID0gIkJTRCAmIEdQTHYyIgorTElDRU5TRV8ke1BOfSA9ICJCU0QiCitMSUNFTlNFXyR7UE59LWRiZyA9ICJCU0QiCiBMSUNFTlNFX3dpcGVyID0gIkdQTHYyIgorCiBMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9MSUNFTlNFLlRYVDttZDU9OTEwYThhNDJjOTYyZDIzODYxOWM3NWZkYjc4YmRiMjQgXAogICAgICAgICAgICAgICAgICAgICBmaWxlOi8vZGViaWFuL2NvcHlyaWdodDttZDU9YTgyZDdiYTNhZGU5ZThlYzkwMjc0OWRiOThjNTkyZjMgXAogICAgICAgICAgICAgICAgICAgICBmaWxlOi8vd2lwZXIvR1BMdjIudHh0O21kNT1mY2IwMmRjNTUyYTA0MWRlZTI3ZTRiODVjNzM5NjA2NyBcCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2ltYWdlcy9jb3JlLWltYWdlLWtlcm5lbC1kZXYuYmIgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2ltYWdlcy9jb3JlLWltYWdlLWtlcm5lbC1kZXYuYmIKaW5kZXggMjZiODhjOS4uYTQwYjNhYSAxMDA2NDQKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9pbWFnZXMvY29yZS1pbWFnZS1rZXJuZWwtZGV2LmJiCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvaW1hZ2VzL2NvcmUtaW1hZ2Uta2VybmVsLWRldi5iYgpAQCAtMTQsNyArMTQsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICIKIAogIyBXZSBuZWVkIGV4dHJhIHNwYWNlIGZvciB0aGluZ3MgbGlrZSBrZXJuZWwgYnVpbGRzLCBldGMuCi1JTUFHRV9ST09URlNfRVhUUkFfU1BBQ0VfYXBwZW5kICs9ICIrIDMwMDAwMDAiCitJTUFHRV9ST09URlNfRVhUUkFfU1BBQ0VfYXBwZW5kID0gIiArIDMwMDAwMDAiCiAKICMgTGV0J3MgZGVmaW5lIG91ciBvd24gc3Vic2V0IHRvIHRlc3QsIHdlIGNhbiBsYXRlciBhZGQgYSBvbi10YXJnZXQga2VybmVsIGJ1aWxkIGV2ZW4hCiBERUZBVUxUX1RFU1RfU1VJVEVTID0gInBpbmcgc3NoIGRmIGNvbm5tYW4gc3lzbG9nIHNjcCBkYXRlIHBhcnNlbG9ncyIKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvaW1hZ2VzL2NvcmUtaW1hZ2UtdGVzdG1hc3Rlci1pbml0cmFtZnMuYmIgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2ltYWdlcy9jb3JlLWltYWdlLXRlc3RtYXN0ZXItaW5pdHJhbWZzLmJiCmluZGV4IGFkMTQwN2MuLjA5YTZkMTYgMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvaW1hZ2VzL2NvcmUtaW1hZ2UtdGVzdG1hc3Rlci1pbml0cmFtZnMuYmIKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9pbWFnZXMvY29yZS1pbWFnZS10ZXN0bWFzdGVyLWluaXRyYW1mcy5iYgpAQCAtMTgsMyArMTgsNiBAQAogSU1BR0VfUk9PVEZTX1NJWkUgPSAiODE5MiIKIElNQUdFX1JPT1RGU19FWFRSQV9TUEFDRSA9ICIwIgogQkFEX1JFQ09NTUVOREFUSU9OUyArPSAiYnVzeWJveC1zeXNsb2ciCisKKyMgVXNlIHRoZSBzYW1lIHJlc3RyaWN0aW9uIGFzIGluaXRyYW1mcy1saXZlLWluc3RhbGwtdGVzdGZzCitDT01QQVRJQkxFX0hPU1QgPSAiKGkuODZ8eDg2XzY0KS4qLWxpbnV4IgpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9saWJhaW8vbGliYWlvL2xpYmFpb19maXhfZm9yX3gzMi5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbGliYWlvL2xpYmFpby9saWJhaW9fZml4X2Zvcl94MzIucGF0Y2gKaW5kZXggNTA4ZjVhMS4uZGM0YmE1MCAxMDA2NDQKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9saWJhaW8vbGliYWlvL2xpYmFpb19maXhfZm9yX3gzMi5wYXRjaAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2xpYmFpby9saWJhaW8vbGliYWlvX2ZpeF9mb3JfeDMyLnBhdGNoCkBAIC02LDcgKzYsNyBAQAogCiBSZWNlaXZlZCB0aGlzIHBhdGNoIGZyb20gSC5KLiBMdSA8aGpsLnRvb2xzQGdtYWlsLmNvbT4KIAotU2lnbmVkLU9mZi1CeTogTml0aW4gQSBLYW1ibGUgPG5pdGluLmEua2FtYmxlQGludGVsLmNvbT4KK1NpZ25lZC1vZmYtYnk6IE5pdGluIEEgS2FtYmxlIDxuaXRpbi5hLmthbWJsZUBpbnRlbC5jb20+CiAyMDExLzEyLzAyCiAKIC0tLSBsaWJhaW8tMC4zLjEwOS9zcmMvc3lzY2FsbC14ODZfNjQuaC54MzIJMjAwOS0xMC0wOSAxMToxNzowMi4wMDAwMDAwMDAgLTA3MDAKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbGliYWlvL2xpYmFpb18wLjMuMTEwLmJiIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9saWJhaW8vbGliYWlvXzAuMy4xMTAuYmIKaW5kZXggMmFkZmEwYS4uNzU5NzVkNCAxMDA2NDQKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9saWJhaW8vbGliYWlvXzAuMy4xMTAuYmIKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9saWJhaW8vbGliYWlvXzAuMy4xMTAuYmIKQEAgLTUsNyArNSw3IEBACiBMSUNFTlNFID0gIkxHUEx2Mi4xKyIKIExJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PWQ4MDQ1ZjNiOGY5MjljMWNiMjlhMWUzZmQ3MzdiNDk5IgogCi1TUkNfVVJJID0gIiR7REVCSUFOX01JUlJPUn0vbWFpbi9saWJhL2xpYmFpby9saWJhaW9fJHtQVn0ub3JpZy50YXIuZ3ogXAorU1JDX1VSSSA9ICJodHRwOi8vc25hcHNob3QuZGViaWFuLm9yZy9hcmNoaXZlL2RlYmlhbi8yMDE2MDcyOFQwNDM0NDNaL3Bvb2wvbWFpbi9saWJhLyR7QlBOfS8ke0JQTn1fJHtQVn0ub3JpZy50YXIuZ3ogXAogICAgICAgICAgICBmaWxlOi8vZ2VuZXJpYy1hcmNoLWRlY3RlY3Rpb24tZm9yLXBhZGRpbmctZGVmaW5lcy5wYXRjaCBcCiAgICAgICAgICAgIGZpbGU6Ly8wMF9hcmNoZXMucGF0Y2ggXAogICAgICAgICAgICBmaWxlOi8vZGVzdGRpci5wYXRjaCBcCkBAIC0xNyw2ICsxNyw4IEBACiBTUkNfVVJJW21kNXN1bV0gPSAiMmEzNTYwMmU0Mzc3ODM4M2UyZjQ5MDdhNGNhMzlhYjgiCiBTUkNfVVJJW3NoYTI1NnN1bV0gPSAiZTAxOTAyOGU2MzE3MjU3MjkzNzYyNTBlMzJiNDczMDEyZjdjYjY4ZTFmNzI3NWJmYzFiYmNkZDBmODc0NWY3ZSIKIAorVVBTVFJFQU1fQ0hFQ0tfVVJJID0gIiR7REVCSUFOX01JUlJPUn0vbWFpbi9saWJhL2xpYmFpby8iCisKIEVYVFJBX09FTUFLRSA9KyAicHJlZml4PSR7cHJlZml4fSBpbmNsdWRlZGlyPSR7aW5jbHVkZWRpcn0gbGliZGlyPSR7bGliZGlyfSIKIAogZG9faW5zdGFsbCAoKSB7CmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2xpYmFyY2hpdmUvbGliYXJjaGl2ZS8wMDAxLVNldC14YXR0cnMtYWZ0ZXItc2V0dGluZy10aW1lcy5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbGliYXJjaGl2ZS9saWJhcmNoaXZlLzAwMDEtU2V0LXhhdHRycy1hZnRlci1zZXR0aW5nLXRpbWVzLnBhdGNoCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2ZDc0ZTg2Li4wMDAwMDAwCi0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbGliYXJjaGl2ZS9saWJhcmNoaXZlLzAwMDEtU2V0LXhhdHRycy1hZnRlci1zZXR0aW5nLXRpbWVzLnBhdGNoCisrKyAvZGV2L251bGwKQEAgLTEsNTkgKzAsMCBAQAotRnJvbSA1NDVkZWQ1NjA5NWM1NzA0MjZmZTEwMmZmMjE5Mjg4OTY4MWVhNzVjIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQotRnJvbTogRG1pdHJ5IFJvemhrb3YgPGRtaXRyeS5yb3poa292QGxpbnV4LmludGVsLmNvbT4KLURhdGU6IE1vbiwgMjkgRmViIDIwMTYgMTQ6Mzg6MjUgKzAyMDAKLVN1YmplY3Q6IFtQQVRDSF0gU2V0IHhhdHRycyBhZnRlciBzZXR0aW5nIHRpbWVzCi0KLVdpdGggSW50ZWdyaXR5IE1lYXN1cmVtZW50IEFyY2hpdGVjdHVyZSAoSU1BKSBlbmFibGVkIGluIExpbnV4Ci1rZXJuZWwgdGhlIHNlY3VyaXR5LmltYSBleHRlbmRlZCBhdHRyaWJ1dGUgZ2V0cyBvdmVyd3JpdHRlbgotd2hlbiBzZXR0aW5nIHRpbWVzIG9uIGEgZmlsZSB3aXRoIGEgZnV0aW1lbnMoKSBjYWxsLiBTbyBpdCdzIHNhZmVyCi10byBzZXQgeGF0dHJzIGFmdGVyIHRpbWVzLgotCi1VcHN0cmVhbS1TdGF0dXM6IFN1Ym1pdHRlZCBbaHR0cHM6Ly9naXRodWIuY29tL2xpYmFyY2hpdmUvbGliYXJjaGl2ZS9wdWxsLzY2NF0KLQotU2lnbmVkLW9mZi1ieTogRG1pdHJ5IFJvemhrb3YgPGRtaXRyeS5yb3poa292QGxpbnV4LmludGVsLmNvbT4KLQotLS0tCi0gbGliYXJjaGl2ZS9hcmNoaXZlX3dyaXRlX2Rpc2tfcG9zaXguYyB8IDIxICsrKysrKysrKysrLS0tLS0tLS0tLQotIDEgZmlsZSBjaGFuZ2VkLCAxMSBpbnNlcnRpb25zKCspLCAxMCBkZWxldGlvbnMoLSkKLQotZGlmZiAtLWdpdCBhL2xpYmFyY2hpdmUvYXJjaGl2ZV93cml0ZV9kaXNrX3Bvc2l4LmMgYi9saWJhcmNoaXZlL2FyY2hpdmVfd3JpdGVfZGlza19wb3NpeC5jCi1pbmRleCAwZmM2MTkzLi4yN2M5YzFlIDEwMDY0NAotLS0tIGEvbGliYXJjaGl2ZS9hcmNoaXZlX3dyaXRlX2Rpc2tfcG9zaXguYwotKysrIGIvbGliYXJjaGl2ZS9hcmNoaXZlX3dyaXRlX2Rpc2tfcG9zaXguYwotQEAgLTE2MjAsMTYgKzE2MjAsNiBAQCBfYXJjaGl2ZV93cml0ZV9kaXNrX2ZpbmlzaF9lbnRyeShzdHJ1Y3QgYXJjaGl2ZSAqX2EpCi0JfQotCi0JLyoKLS0JICogU2VjdXJpdHktcmVsYXRlZCBleHRlbmRlZCBhdHRyaWJ1dGVzIChzdWNoIGFzCi0tCSAqIHNlY3VyaXR5LmNhcGFiaWxpdHkgb24gTGludXgpIGhhdmUgdG8gYmUgcmVzdG9yZWQgbGFzdCwKLS0JICogc2luY2UgdGhleSdyZSBpbXBsaWNpdGx5IHJlbW92ZWQgYnkgb3RoZXIgZmlsZSBjaGFuZ2VzLgotLQkgKi8KLS0JaWYgKGEtPnRvZG8gJiBUT0RPX1hBVFRSKSB7Ci0tCQlpbnQgcjIgPSBzZXRfeGF0dHJzKGEpOwotLQkJaWYgKHIyIDwgcmV0KSByZXQgPSByMjsKLS0JfQotLQotLQkvKgotCSAqIFNvbWUgZmxhZ3MgcHJldmVudCBmaWxlIG1vZGlmaWNhdGlvbjsgdGhleSBtdXN0IGJlIHJlc3RvcmVkIGFmdGVyCi0JICogZmlsZSBjb250ZW50cyBhcmUgd3JpdHRlbi4KLQkgKi8KLUBAIC0xNjQ4LDYgKzE2MzgsMTcgQEAgX2FyY2hpdmVfd3JpdGVfZGlza19maW5pc2hfZW50cnkoc3RydWN0IGFyY2hpdmUgKl9hKQotCX0KLQotCS8qCi0rCSAqIFNlY3VyaXR5LXJlbGF0ZWQgZXh0ZW5kZWQgYXR0cmlidXRlcyAoc3VjaCBhcwotKwkgKiBzZWN1cml0eS5jYXBhYmlsaXR5IG9yIHNlY3VyaXR5LmltYSBvbiBMaW51eCkgaGF2ZSB0byBiZSByZXN0b3JlZCBsYXN0LAotKwkgKiBzaW5jZSB0aGV5J3JlIGltcGxpY2l0bHkgcmVtb3ZlZCBieSBvdGhlciBmaWxlIGNoYW5nZXMgbGlrZSBzZXR0aW5nCi0rCSAqIHRpbWVzLgotKwkgKi8KLSsJaWYgKGEtPnRvZG8gJiBUT0RPX1hBVFRSKSB7Ci0rCQlpbnQgcjIgPSBzZXRfeGF0dHJzKGEpOwotKwkJaWYgKHIyIDwgcmV0KSByZXQgPSByMjsKLSsJfQotKwotKwkvKgotCSAqIE1hYyBleHRlbmRlZCBtZXRhZGF0YSBpbmNsdWRlcyBBQ0xzLgotCSAqLwotCWlmIChhLT50b2RvICYgVE9ET19NQUNfTUVUQURBVEEpIHsKLS0tCi0yLjUuMApkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9saWJhcmNoaXZlL2xpYmFyY2hpdmUvbGliYXJjaGl2ZS1DVkUtMjAxMy0wMjExLnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9saWJhcmNoaXZlL2xpYmFyY2hpdmUvbGliYXJjaGl2ZS1DVkUtMjAxMy0wMjExLnBhdGNoCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxOTUyM2Y0Li4wMDAwMDAwCi0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbGliYXJjaGl2ZS9saWJhcmNoaXZlL2xpYmFyY2hpdmUtQ1ZFLTIwMTMtMDIxMS5wYXRjaAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLUZyb20gMmY1NWQ2YmQzMDhlYTYxOTc1NTU4YzI0NjlhZTM0OWRiYTI5N2U4OSBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKLUZyb206IFJvYmVydCBZYW5nIDxsaWV6aGkueWFuZ0B3aW5kcml2ZXIuY29tPgotRGF0ZTogU2F0LCAyMiBGZWIgMjAxNCAxNDozNTo1OSArMDgwMAotU3ViamVjdDogW1BBVENIXSBGaXggQ1ZFLTIwMTMtMDIxMQotCi1UaGlzIHBhdGNoIGNvbWVzIGZyb206aHR0cHM6Ly9naXRodWIuY29tL2xpYmFyY2hpdmUvbGliYXJjaGl2ZS9jb21taXQvMjI1MzE1NDU1MTQwNDNlMDQ2MzNlMWMwMTVjNzU0MGI5ZGU5ZGJlNAotCi1VcHN0cmVhbS1TdGF0dXM6IEJhY2twb3J0Ci1DVkU6IENWRS0yMDEzLTAyMTEKLQotU2lnbmVkLW9mZi1ieTogQmFvZ2VuIHNoYW5nIDxiYW9nZW4uc2hhbmdAd2luZHJpdmVyLmNvbT4KLQotVXBkYXRlIHRoZSBwYXRjaCBiZWNhdXNlIG9mIHVwcmV2IG9uIDIwMTQwMjIyCi0KLVNpZ25lZC1vZmYtYnk6IFJvYmVydCBZYW5nIDxsaWV6aGkueWFuZ0B3aW5kcml2ZXIuY29tPgotLS0tCi0gbGliYXJjaGl2ZS9hcmNoaXZlX3dyaXRlLmMgfCA0ICsrKysKLSAxIGZpbGUgY2hhbmdlZCwgNCBpbnNlcnRpb25zKCspCi0KLWRpZmYgLS1naXQgYS9saWJhcmNoaXZlL2FyY2hpdmVfd3JpdGUuYyBiL2xpYmFyY2hpdmUvYXJjaGl2ZV93cml0ZS5jCi1pbmRleCBhM2QxYTMzLi5hMzIzNTg4IDEwMDY0NAotLS0tIGEvbGliYXJjaGl2ZS9hcmNoaXZlX3dyaXRlLmMKLSsrKyBiL2xpYmFyY2hpdmUvYXJjaGl2ZV93cml0ZS5jCi1AQCAtNjcxLDggKzY3MSwxMiBAQCBzdGF0aWMgc3NpemVfdAotIF9hcmNoaXZlX3dyaXRlX2RhdGEoc3RydWN0IGFyY2hpdmUgKl9hLCBjb25zdCB2b2lkICpidWZmLCBzaXplX3QgcykKLSB7Ci0gCXN0cnVjdCBhcmNoaXZlX3dyaXRlICphID0gKHN0cnVjdCBhcmNoaXZlX3dyaXRlICopX2E7Ci0rCWNvbnN0IHNpemVfdCBtYXhfd3JpdGUgPSBJTlRfTUFYOwotIAlhcmNoaXZlX2NoZWNrX21hZ2ljKCZhLT5hcmNoaXZlLCBBUkNISVZFX1dSSVRFX01BR0lDLAotIAkgICAgQVJDSElWRV9TVEFURV9EQVRBLCAiYXJjaGl2ZV93cml0ZV9kYXRhIik7Ci0rCS8qIEluIHBhcnRpY3VsYXIsIHRoaXMgY2F0Y2hlcyBhdHRlbXB0cyB0byBwYXNzIG5lZ2F0aXZlIHZhbHVlcy4gKi8KLSsJaWYgKHMgPiBtYXhfd3JpdGUpCi0rCQlzID0gbWF4X3dyaXRlOwotIAlhcmNoaXZlX2NsZWFyX2Vycm9yKCZhLT5hcmNoaXZlKTsKLSAJcmV0dXJuICgoYS0+Zm9ybWF0X3dyaXRlX2RhdGEpKGEsIGJ1ZmYsIHMpKTsKLSB9Ci0tLSAKLTEuOC4yLjEKLQpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9saWJhcmNoaXZlL2xpYmFyY2hpdmUvbGliYXJjaGl2ZS1DVkUtMjAxNS0yMzA0LnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9saWJhcmNoaXZlL2xpYmFyY2hpdmUvbGliYXJjaGl2ZS1DVkUtMjAxNS0yMzA0LnBhdGNoCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1YzI0Mzk2Li4wMDAwMDAwCi0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbGliYXJjaGl2ZS9saWJhcmNoaXZlL2xpYmFyY2hpdmUtQ1ZFLTIwMTUtMjMwNC5wYXRjaAorKysgL2Rldi9udWxsCkBAIC0xLDE1MiArMCwwIEBACi1Gcm9tIDU5MzU3MTU3NzA2ZDQ3YzM2NWIyMjI3NzM5ZTE3ZGFiYTM2MDc1MjYgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCi1Gcm9tOiBBbGVzc2FuZHJvIEdoZWRpbmkgPGFsZXNzYW5kcm9AZ2hlZGluaS5tZT4KLURhdGU6IFN1biwgMSBNYXIgMjAxNSAxMjowNzo0NSArMDEwMAotU3ViamVjdDogW1BBVENIXSBBZGQgQVJDSElWRV9FWFRSQUNUX1NFQ1VSRV9OT0FCU09MVVRFUEFUSFMgb3B0aW9uCi0KLVRoaXMgZml4ZXMgYSBkaXJlY3RvcnkgdHJhdmVyc2FsIGluIHRoZSBjcGlvIHRvb2wuCi0KLQotVXBzdHJlYW0tU3RhdHVzOiBiYWNrcG9ydAotQ1ZFOiBDVkUtMjAxNS0yMzA0Ci0KLVNpZ25lZC1vZmYtYnk6IExpIFpob3UgPGxpLnpob3VAd2luZHJpdmVyLmNvbT4KLS0tLQotIGNwaW8vYnNkY3Bpby4xICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAzICsrLQotIGNwaW8vY3Bpby5jICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAyICsrCi0gbGliYXJjaGl2ZS9hcmNoaXZlLmggICAgICAgICAgICAgICAgICAgICB8ICAgIDIgKysKLSBsaWJhcmNoaXZlL2FyY2hpdmVfd3JpdGVfZGlzay4zICAgICAgICAgIHwgICAgMyArKysKLSBsaWJhcmNoaXZlL2FyY2hpdmVfd3JpdGVfZGlza19wb3NpeC5jICAgIHwgICAxNCArKysrKysrKysrKy0tLQotIGxpYmFyY2hpdmUvdGVzdC90ZXN0X3dyaXRlX2Rpc2tfc2VjdXJlLmMgfCAgIDIzICsrKysrKysrKysrKysrKysrKysrKysrCi0gNiBmaWxlcyBjaGFuZ2VkLCA0MyBpbnNlcnRpb25zKCspLCA0IGRlbGV0aW9ucygtKQotCi1kaWZmIC0tZ2l0IGEvY3Bpby9ic2RjcGlvLjEgYi9jcGlvL2JzZGNwaW8uMQotaW5kZXggZjk2NmFhMC4uZTUyNTQ2ZSAxMDA2NDQKLS0tLSBhL2NwaW8vYnNkY3Bpby4xCi0rKysgYi9jcGlvL2JzZGNwaW8uMQotQEAgLTE1Niw3ICsxNTYsOCBAQCBTZWUgYWJvdmUgZm9yIGRlc2NyaXB0aW9uLgotIC5JdCBGbCBGbCBpbnNlY3VyZQotIChpIGFuZCBwIG1vZGUgb25seSkKLSBEaXNhYmxlIHNlY3VyaXR5IGNoZWNrcyBkdXJpbmcgZXh0cmFjdGlvbiBvciBjb3B5aW5nLgotLVRoaXMgYWxsb3dzIGV4dHJhY3Rpb24gdmlhIHN5bWJvbGljIGxpbmtzIGFuZCBwYXRoIG5hbWVzIGNvbnRhaW5pbmcKLStUaGlzIGFsbG93cyBleHRyYWN0aW9uIHZpYSBzeW1ib2xpYyBsaW5rcywgYWJzb2x1dGUgcGF0aHMsCi0rYW5kIHBhdGggbmFtZXMgY29udGFpbmluZwotIC5TcSAuLgotIGluIHRoZSBuYW1lLgotIC5JdCBGbCBKICwgRmwgRmwgeHoKLWRpZmYgLS1naXQgYS9jcGlvL2NwaW8uYyBiL2NwaW8vY3Bpby5jCi1pbmRleCAwYWNkZTExLi5iMjY3ZTliIDEwMDY0NAotLS0tIGEvY3Bpby9jcGlvLmMKLSsrKyBiL2NwaW8vY3Bpby5jCi1AQCAtMTcxLDYgKzE3MSw3IEBAIG1haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKLSAJY3Bpby0+ZXh0cmFjdF9mbGFncyB8PSBBUkNISVZFX0VYVFJBQ1RfTk9fT1ZFUldSSVRFX05FV0VSOwotIAljcGlvLT5leHRyYWN0X2ZsYWdzIHw9IEFSQ0hJVkVfRVhUUkFDVF9TRUNVUkVfU1lNTElOS1M7Ci0gCWNwaW8tPmV4dHJhY3RfZmxhZ3MgfD0gQVJDSElWRV9FWFRSQUNUX1NFQ1VSRV9OT0RPVERPVDsKLSsJY3Bpby0+ZXh0cmFjdF9mbGFncyB8PSBBUkNISVZFX0VYVFJBQ1RfU0VDVVJFX05PQUJTT0xVVEVQQVRIUzsKLSAJY3Bpby0+ZXh0cmFjdF9mbGFncyB8PSBBUkNISVZFX0VYVFJBQ1RfUEVSTTsKLSAJY3Bpby0+ZXh0cmFjdF9mbGFncyB8PSBBUkNISVZFX0VYVFJBQ1RfRkZMQUdTOwotIAljcGlvLT5leHRyYWN0X2ZsYWdzIHw9IEFSQ0hJVkVfRVhUUkFDVF9BQ0w7Ci1AQCAtMjU2LDYgKzI1Nyw3IEBAIG1haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKLSAJCWNhc2UgT1BUSU9OX0lOU0VDVVJFOgotIAkJCWNwaW8tPmV4dHJhY3RfZmxhZ3MgJj0gfkFSQ0hJVkVfRVhUUkFDVF9TRUNVUkVfU1lNTElOS1M7Ci0gCQkJY3Bpby0+ZXh0cmFjdF9mbGFncyAmPSB+QVJDSElWRV9FWFRSQUNUX1NFQ1VSRV9OT0RPVERPVDsKLSsJCQljcGlvLT5leHRyYWN0X2ZsYWdzICY9IH5BUkNISVZFX0VYVFJBQ1RfU0VDVVJFX05PQUJTT0xVVEVQQVRIUzsKLSAJCQlicmVhazsKLSAJCWNhc2UgJ0wnOiAvKiBHTlUgY3BpbyAqLwotIAkJCWNwaW8tPm9wdGlvbl9mb2xsb3dfbGlua3MgPSAxOwotZGlmZiAtLWdpdCBhL2xpYmFyY2hpdmUvYXJjaGl2ZS5oIGIvbGliYXJjaGl2ZS9hcmNoaXZlLmgKLWluZGV4IDFmMGZjMzguLmVmNjM1YWMgMTAwNjQ0Ci0tLS0gYS9saWJhcmNoaXZlL2FyY2hpdmUuaAotKysrIGIvbGliYXJjaGl2ZS9hcmNoaXZlLmgKLUBAIC02NDksNiArNjQ5LDggQEAgX19MQV9ERUNMIGludCBhcmNoaXZlX3JlYWRfc2V0X3Bhc3NwaHJhc2VfY2FsbGJhY2soc3RydWN0IGFyY2hpdmUgKiwKLSAvKiBEZWZhdWx0OiBEbyBub3QgdXNlIEhGUysgY29tcHJlc3Npb24gaWYgaXQgd2FzIG5vdCBjb21wcmVzc2VkLiAqLwotIC8qIFRoaXMgaGFzIG5vIGVmZmVjdCBleGNlcHQgb24gTWFjIE9TIHYxMC42IG9yIGxhdGVyLiAqLwotICNkZWZpbmUJQVJDSElWRV9FWFRSQUNUX0hGU19DT01QUkVTU0lPTl9GT1JDRUQJKDB4ODAwMCkKLSsvKiBEZWZhdWx0OiBEbyBub3QgcmVqZWN0IGVudHJpZXMgd2l0aCBhYnNvbHV0ZSBwYXRocyAqLwotKyNkZWZpbmUgQVJDSElWRV9FWFRSQUNUX1NFQ1VSRV9OT0FCU09MVVRFUEFUSFMgKDB4MTAwMDApCi0gCi0gX19MQV9ERUNMIGludCBhcmNoaXZlX3JlYWRfZXh0cmFjdChzdHJ1Y3QgYXJjaGl2ZSAqLCBzdHJ1Y3QgYXJjaGl2ZV9lbnRyeSAqLAotIAkJICAgICBpbnQgZmxhZ3MpOwotZGlmZiAtLWdpdCBhL2xpYmFyY2hpdmUvYXJjaGl2ZV93cml0ZV9kaXNrLjMgYi9saWJhcmNoaXZlL2FyY2hpdmVfd3JpdGVfZGlzay4zCi1pbmRleCBmYTkyNWNjLi5hMmU3YWZhIDEwMDY0NAotLS0tIGEvbGliYXJjaGl2ZS9hcmNoaXZlX3dyaXRlX2Rpc2suMwotKysrIGIvbGliYXJjaGl2ZS9hcmNoaXZlX3dyaXRlX2Rpc2suMwotQEAgLTE3Nyw2ICsxNzcsOSBAQCBUaGUgZGVmYXVsdCBpcyB0byBub3QgcmVmdXNlIHN1Y2ggcGF0aHMuCi0gTm90ZSB0aGF0IHBhdGhzIGVuZGluZyBpbgotIC5QYSAuLgotIGFsd2F5cyBjYXVzZSBhbiBlcnJvciwgcmVnYXJkbGVzcyBvZiB0aGlzIGZsYWcuCi0rLkl0IENtIEFSQ0hJVkVfRVhUUkFDVF9TRUNVUkVfTk9BQlNPTFVURVBBVEhTCi0rUmVmdXNlIHRvIGV4dHJhY3QgYW4gYWJzb2x1dGUgcGF0aC4KLStUaGUgZGVmYXVsdCBpcyB0byBub3QgcmVmdXNlIHN1Y2ggcGF0aHMuCi0gLkl0IENtIEFSQ0hJVkVfRVhUUkFDVF9TUEFSU0UKLSBTY2FuIGRhdGEgZm9yIGJsb2NrcyBvZiBOVUwgYnl0ZXMgYW5kIHRyeSB0byByZWNyZWF0ZSB0aGVtIHdpdGggaG9sZXMuCi0gVGhpcyByZXN1bHRzIGluIHNwYXJzZSBmaWxlcywgaW5kZXBlbmRlbnQgb2Ygd2hldGhlciB0aGUgYXJjaGl2ZSBmb3JtYXQKLWRpZmYgLS1naXQgYS9saWJhcmNoaXZlL2FyY2hpdmVfd3JpdGVfZGlza19wb3NpeC5jIGIvbGliYXJjaGl2ZS9hcmNoaXZlX3dyaXRlX2Rpc2tfcG9zaXguYwotaW5kZXggYWIzYmRhYy4uYzEyOTBlYiAxMDA2NDQKLS0tLSBhL2xpYmFyY2hpdmUvYXJjaGl2ZV93cml0ZV9kaXNrX3Bvc2l4LmMKLSsrKyBiL2xpYmFyY2hpdmUvYXJjaGl2ZV93cml0ZV9kaXNrX3Bvc2l4LmMKLUBAIC0yNTA5LDggKzI1MDksOSBAQCBjbGVhbnVwX3BhdGhuYW1lX3dpbihzdHJ1Y3QgYXJjaGl2ZV93cml0ZV9kaXNrICphKQotIC8qCi0gICogQ2Fub25pY2FsaXplIHRoZSBwYXRobmFtZS4gIEluIHBhcnRpY3VsYXIsIHRoaXMgc3RyaXBzIGR1cGxpY2F0ZQotICAqICcvJyBjaGFyYWN0ZXJzLCAnLicgZWxlbWVudHMsIGFuZCB0cmFpbGluZyAnLycuICBJdCBhbHNvIHJhaXNlcyBhbgotLSAqIGVycm9yIGZvciBhbiBlbXB0eSBwYXRoLCBhIHRyYWlsaW5nICcuLicgb3IgKGlmIF9TRUNVUkVfTk9ET1RET1QgaXMKLS0gKiBzZXQpIGFueSAnLi4nIGluIHRoZSBwYXRoLgotKyAqIGVycm9yIGZvciBhbiBlbXB0eSBwYXRoLCBhIHRyYWlsaW5nICcuLicsIChpZiBfU0VDVVJFX05PRE9URE9UIGlzCi0rICogc2V0KSBhbnkgJy4uJyBpbiB0aGUgcGF0aCBvciAoaWYgQVJDSElWRV9FWFRSQUNUX1NFQ1VSRV9OT0FCU09MVVRFUEFUSFMKLSsgKiBpcyBzZXQpIGlmIHRoZSBwYXRoIGlzIGFic29sdXRlLgotICAqLwotIHN0YXRpYyBpbnQKLSBjbGVhbnVwX3BhdGhuYW1lKHN0cnVjdCBhcmNoaXZlX3dyaXRlX2Rpc2sgKmEpCi1AQCAtMjUyOSw4ICsyNTMwLDE1IEBAIGNsZWFudXBfcGF0aG5hbWUoc3RydWN0IGFyY2hpdmVfd3JpdGVfZGlzayAqYSkKLSAJY2xlYW51cF9wYXRobmFtZV93aW4oYSk7Ci0gI2VuZGlmCi0gCS8qIFNraXAgbGVhZGluZyAnLycuICovCi0tCWlmICgqc3JjID09ICcvJykKLSsJaWYgKCpzcmMgPT0gJy8nKSB7Ci0rCQlpZiAoYS0+ZmxhZ3MgJiBBUkNISVZFX0VYVFJBQ1RfU0VDVVJFX05PQUJTT0xVVEVQQVRIUykgewotKwkJCWFyY2hpdmVfc2V0X2Vycm9yKCZhLT5hcmNoaXZlLCBBUkNISVZFX0VSUk5PX01JU0MsCi0rCQkJICAgICAgICAgICAgICAgICAgIlBhdGggaXMgYWJzb2x1dGUiKTsKLSsJCQlyZXR1cm4gKEFSQ0hJVkVfRkFJTEVEKTsKLSsJCX0KLSsKLSAJCXNlcGFyYXRvciA9ICpzcmMrKzsKLSsJfQotIAotIAkvKiBTY2FuIHRoZSBwYXRobmFtZSBvbmUgZWxlbWVudCBhdCBhIHRpbWUuICovCi0gCWZvciAoOzspIHsKLWRpZmYgLS1naXQgYS9saWJhcmNoaXZlL3Rlc3QvdGVzdF93cml0ZV9kaXNrX3NlY3VyZS5jIGIvbGliYXJjaGl2ZS90ZXN0L3Rlc3Rfd3JpdGVfZGlza19zZWN1cmUuYwotaW5kZXggMzFjNWJmZC4uMmM5NDIwNiAxMDA2NDQKLS0tLSBhL2xpYmFyY2hpdmUvdGVzdC90ZXN0X3dyaXRlX2Rpc2tfc2VjdXJlLmMKLSsrKyBiL2xpYmFyY2hpdmUvdGVzdC90ZXN0X3dyaXRlX2Rpc2tfc2VjdXJlLmMKLUBAIC0xNzgsNiArMTc4LDI5IEBAIERFRklORV9URVNUKHRlc3Rfd3JpdGVfZGlza19zZWN1cmUpCi0gCWFzc2VydChTX0lTRElSKHN0LnN0X21vZGUpKTsKLSAJYXJjaGl2ZV9lbnRyeV9mcmVlKGFlKTsKLSAKLSsJLyoKLSsJICogV2l0aG91dCBzZWN1cml0eSBjaGVja3MsIHdlIHNob3VsZCBiZSBhYmxlIHRvCi0rCSAqIGV4dHJhY3QgYW4gYWJzb2x1dGUgcGF0aC4KLSsJICovCi0rCWFzc2VydCgoYWUgPSBhcmNoaXZlX2VudHJ5X25ldygpKSAhPSBOVUxMKTsKLSsJYXJjaGl2ZV9lbnRyeV9jb3B5X3BhdGhuYW1lKGFlLCAiL3RtcC9saWJhcmNoaXZlX3Rlc3QtdGVzdF93cml0ZV9kaXNrX3NlY3VyZS1hYnNvbHV0ZV9wYXRoLnRtcCIpOwotKwlhcmNoaXZlX2VudHJ5X3NldF9tb2RlKGFlLCBTX0lGUkVHIHwgMDc3Nyk7Ci0rCWFzc2VydCgwID09IGFyY2hpdmVfd3JpdGVfaGVhZGVyKGEsIGFlKSk7Ci0rCWFzc2VydCgwID09IGFyY2hpdmVfd3JpdGVfZmluaXNoX2VudHJ5KGEpKTsKLSsJYXNzZXJ0RmlsZUV4aXN0cygiL3RtcC9saWJhcmNoaXZlX3Rlc3QtdGVzdF93cml0ZV9kaXNrX3NlY3VyZS1hYnNvbHV0ZV9wYXRoLnRtcCIpOwotKwlhc3NlcnQoMCA9PSB1bmxpbmsoIi90bXAvbGliYXJjaGl2ZV90ZXN0LXRlc3Rfd3JpdGVfZGlza19zZWN1cmUtYWJzb2x1dGVfcGF0aC50bXAiKSk7Ci0rCi0rCS8qIEJ1dCB3aXRoIHNlY3VyaXR5IGNoZWNrcyBlbmFibGVkLCB0aGlzIHNob3VsZCBmYWlsLiAqLwotKwlhc3NlcnQoYXJjaGl2ZV9lbnRyeV9jbGVhcihhZSkgIT0gTlVMTCk7Ci0rCWFyY2hpdmVfZW50cnlfY29weV9wYXRobmFtZShhZSwgIi90bXAvbGliYXJjaGl2ZV90ZXN0LXRlc3Rfd3JpdGVfZGlza19zZWN1cmUtYWJzb2x1dGVfcGF0aC50bXAiKTsKLSsJYXJjaGl2ZV9lbnRyeV9zZXRfbW9kZShhZSwgU19JRlJFRyB8IDA3NzcpOwotKwlhcmNoaXZlX3dyaXRlX2Rpc2tfc2V0X29wdGlvbnMoYSwgQVJDSElWRV9FWFRSQUNUX1NFQ1VSRV9OT0FCU09MVVRFUEFUSFMpOwotKwlmYWlsdXJlKCJFeHRyYWN0aW5nIGFuIGFic29sdXRlIHBhdGggc2hvdWxkIGZhaWwgaGVyZS4iKTsKLSsJYXNzZXJ0RXF1YWxJbnQoQVJDSElWRV9GQUlMRUQsIGFyY2hpdmVfd3JpdGVfaGVhZGVyKGEsIGFlKSk7Ci0rCWFyY2hpdmVfZW50cnlfZnJlZShhZSk7Ci0rCWFzc2VydCgwID09IGFyY2hpdmVfd3JpdGVfZmluaXNoX2VudHJ5KGEpKTsKLSsJYXNzZXJ0RmlsZU5vdEV4aXN0cygiL3RtcC9saWJhcmNoaXZlX3Rlc3QtdGVzdF93cml0ZV9kaXNrX3NlY3VyZS1hYnNvbHV0ZV9wYXRoLnRtcCIpOwotKwotIAlhc3NlcnRFcXVhbEludChBUkNISVZFX09LLCBhcmNoaXZlX3dyaXRlX2ZyZWUoYSkpOwotIAotIAkvKiBUZXN0IHRoZSBlbnRyaWVzIG9uIGRpc2suICovCi0tLSAKLTEuNy45LjUKLQpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9saWJhcmNoaXZlL2xpYmFyY2hpdmUvbWtkaXIucGF0Y2ggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2xpYmFyY2hpdmUvbGliYXJjaGl2ZS9ta2Rpci5wYXRjaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTA5YTI5NS4uMDAwMDAwMAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2xpYmFyY2hpdmUvbGliYXJjaGl2ZS9ta2Rpci5wYXRjaAorKysgL2Rldi9udWxsCkBAIC0xLDQ1ICswLDAgQEAKLUFkZCBtaXNzaW5nIG1rZGlyIGNhbGxzIHNvIHRoYXQgb3V0LW9mLXRyZWUgYnVpbGRzIHdvcmsuCi0KLVVwc3RyZWFtLVN0YXR1czogU3VibWl0dGVkIChodHRwczovL2dpdGh1Yi5jb20vbGliYXJjaGl2ZS9saWJhcmNoaXZlL3B1bGwvNTM0KQotU2lnbmVkLW9mZi1ieTogUm9zcyBCdXJ0b24gPHJvc3MuYnVydG9uQGludGVsLmNvbT4KLQotZGlmZiAtLWdpdCBhL01ha2VmaWxlLmFtIGIvTWFrZWZpbGUuYW0KLWluZGV4IDNmYTJkMjIuLjVlY2NhNTIgMTAwNjQ0Ci0tLS0gYS9NYWtlZmlsZS5hbQotKysrIGIvTWFrZWZpbGUuYW0KLUBAIC01MDgsNiArNTA4LDcgQEAgbGliYXJjaGl2ZV90ZXN0X0xEQUREPSAkKExUTElCSUNPTlYpCi0gIyBCdWlsZGluZyBpdCBhdXRvbWF0aWNhbGx5IHByb3ZpZGVzIGEgc2FuaXR5LWNoZWNrIG9uIGxpYmFyY2hpdmVfdGVzdF9TT1VSQ0VTCi0gIyBhYm92ZS4KLSBsaWJhcmNoaXZlL3Rlc3QvbGlzdC5oOiBNYWtlZmlsZQotKwkkKE1LRElSX1ApIGxpYmFyY2hpdmUvdGVzdAotIAljYXQgJCh0b3Bfc3JjZGlyKS9saWJhcmNoaXZlL3Rlc3QvdGVzdF8qLmMgfCBncmVwIERFRklORV9URVNUID4gbGliYXJjaGl2ZS90ZXN0L2xpc3QuaAotIAotIGxpYmFyY2hpdmVfVEVTVFNfRU5WSVJPTk1FTlQ9IExJQkFSQ0hJVkVfVEVTVF9GSUxFUz1gY2QgJCh0b3Bfc3JjZGlyKTsvYmluL3B3ZGAvbGliYXJjaGl2ZS90ZXN0IExSWklQPU5PQ09ORklHCi1AQCAtODM1LDYgKzgzNiw3IEBAIGJzZHRhcl90ZXN0X0NQUEZMQUdTPVwKLSAJJChQTEFURk9STUNQUEZMQUdTKQotIAotIHRhci90ZXN0L2xpc3QuaDogTWFrZWZpbGUKLSsJJChNS0RJUl9QKSB0YXIvdGVzdAotIAljYXQgJCh0b3Bfc3JjZGlyKS90YXIvdGVzdC90ZXN0XyouYyB8IGdyZXAgREVGSU5FX1RFU1QgPiB0YXIvdGVzdC9saXN0LmgKLSAKLSBpZiBCVUlMRF9CU0RUQVIKLUBAIC05NzUsNiArOTc3LDcgQEAgYnNkY3Bpb190ZXN0X0NQUEZMQUdTPSBcCi0gYnNkY3Bpb190ZXN0X0xEQUREPWxpYmFyY2hpdmVfZmUubGEKLSAKLSBjcGlvL3Rlc3QvbGlzdC5oOiBNYWtlZmlsZQotKwkkKE1LRElSX1ApIGNwaW8vdGVzdAotIAljYXQgJCh0b3Bfc3JjZGlyKS9jcGlvL3Rlc3QvdGVzdF8qLmMgfCBncmVwIERFRklORV9URVNUID4gY3Bpby90ZXN0L2xpc3QuaAotIAotIGlmIEJVSUxEX0JTRENQSU8KLWRpZmYgLS1naXQgYS9jb25maWd1cmUuYWMgYi9jb25maWd1cmUuYWMKLWluZGV4IDM4YmQyOTkuLjdiZGIwMGMgMTAwNjQ0Ci0tLS0gYS9jb25maWd1cmUuYWMKLSsrKyBiL2NvbmZpZ3VyZS5hYwotQEAgLTEwMiw2ICsxMDIsNyBAQCBBQ19VU0VfU1lTVEVNX0VYVEVOU0lPTlMKLSBBQ19MSUJUT09MX1dJTjMyX0RMTAotIEFDX1BST0dfTElCVE9PTAotIEFDX0NIRUNLX1RPT0woW1NUUklQXSxbc3RyaXBdKQotK0FDX1BST0dfTUtESVJfUAotIAotICMKLSAjIE9wdGlvbnMgZm9yIGJ1aWxkaW5nIGJzZHRhci4KZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbGliYXJjaGl2ZS9saWJhcmNoaXZlL3BrZ2NvbmZpZy5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbGliYXJjaGl2ZS9saWJhcmNoaXZlL3BrZ2NvbmZpZy5wYXRjaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzQ2YWY5MS4uMDAwMDAwMAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2xpYmFyY2hpdmUvbGliYXJjaGl2ZS9wa2djb25maWcucGF0Y2gKKysrIC9kZXYvbnVsbApAQCAtMSwyNSArMCwwIEBACi1Vc2UgcGtnLWNvbmZpZyBmb3IgdGhlIGxpYnhtbDIgZGVwZW5kZW5jeSwgbm90IHRoZSAtY29uZmlnIHNjcmlwdC4KLQotVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCi0KLVJQIDIwMTQvNS8yMgotCi1JbmRleDogbGliYXJjaGl2ZS0zLjEuMi9jb25maWd1cmUuYWMKLT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tLSBsaWJhcmNoaXZlLTMuMS4yLm9yaWcvY29uZmlndXJlLmFjCTIwMTMtMDItMDkgMTc6MjM6MDMuMDAwMDAwMDAwICswMDAwCi0rKysgbGliYXJjaGl2ZS0zLjEuMi9jb25maWd1cmUuYWMJMjAxNC0wNS0xMyAxNToyNjo0NS40NDY0OTkxMDggKzAwMDAKLUBAIC0zMjksMTAgKzMyOSwxMCBAQAotICAgQVNfSEVMUF9TVFJJTkcoWy0td2l0aG91dC1leHBhdF0sIFtEb24ndCBidWlsZCBzdXBwb3J0IGZvciB4YXIgdGhyb3VnaCBleHBhdF0pKQotIAotIGlmIHRlc3QgIngkd2l0aF94bWwyIiAhPSAieG5vIjsgdGhlbgotLSAgQUNfUEFUSF9QUk9HKFtYTUwyX0NPTkZJR10sIFt4bWwyLWNvbmZpZ10sLCBbJHtQQVRIfV0pCi0tICBpZiB0ZXN0ICJ4JFhNTDJfQ09ORklHIiAhPSAieCI7IHRoZW4KLS0gICAgQ1BQRkxBR1M9IiR7Q1BQRkxBR1N9IGAke1hNTDJfQ09ORklHfSAtLWNmbGFnc2AiCi0tICAgIExJQlM9IiR7TElCU30gYCR7WE1MMl9DT05GSUd9IC0tbGlic2AiCi0rICBQS0dfQ0hFQ0tfTU9EVUxFUyhQS0dfWE1MMiwgW2xpYnhtbC0yLjBdLCwpCi0rICBpZiB0ZXN0ICJ4JFBLR19YTUwyX0NGTEFHUyIgIT0gIngiOyB0aGVuCi0rICAgIENQUEZMQUdTPSIke0NQUEZMQUdTfSAke1BLR19YTUwyX0NGTEFHU30iCi0rICAgIExJQlM9IiR7TElCU30gJHtQS0dfWE1MMl9MSUJTfSIKLSAgICAgQUNfQ0hFQ0tfTElCKHhtbDIseG1sSW5pdFBhcnNlcixbdHJ1ZV0sQUNfTVNHX0ZBSUxVUkUoTWlzc2luZyB4bWwyIGxpYnJhcnkpKQotICAgZWxzZQotICAgICBBQ19DSEVDS19MSUIoeG1sMix4bWxJbml0UGFyc2VyKQpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9saWJhcmNoaXZlL2xpYmFyY2hpdmVfMy4xLjIuYmIgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2xpYmFyY2hpdmUvbGliYXJjaGl2ZV8zLjEuMi5iYgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZWQ2NzdhYy4uMDAwMDAwMAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2xpYmFyY2hpdmUvbGliYXJjaGl2ZV8zLjEuMi5iYgorKysgL2Rldi9udWxsCkBAIC0xLDcxICswLDAgQEAKLVNVTU1BUlkgPSAiU3VwcG9ydCBmb3IgcmVhZGluZyB2YXJpb3VzIGFyY2hpdmUgZm9ybWF0cyIKLURFU0NSSVBUSU9OID0gIkMgbGlicmFyeSBhbmQgY29tbWFuZC1saW5lIHRvb2xzIGZvciByZWFkaW5nIGFuZCB3cml0aW5nIHRhciwgY3BpbywgemlwLCBJU08sIGFuZCBvdGhlciBhcmNoaXZlIGZvcm1hdHMiCi1IT01FUEFHRSA9ICJodHRwOi8vd3d3LmxpYmFyY2hpdmUub3JnLyIKLVNFQ1RJT04gPSAiZGV2ZWwiCi1MSUNFTlNFID0gIkJTRCIKLUxJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PWI0ZTNmZmQ2MDdkNjY4NmM2Y2IyZjYzMzk0MzcwODQxIgotCi1ERVBFTkRTID0gImUyZnNwcm9ncy1uYXRpdmUiCi0KLVBBQ0tBR0VDT05GSUcgPz0gInpsaWIgYnoyIgotCi1QQUNLQUdFQ09ORklHX2FwcGVuZF9jbGFzcy10YXJnZXQgPSAiXAotCWxpYnhtbDIgXAotCSR7QGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCAnYWNsJywgJ2FjbCcsICcnLCBkKX0gXAotCSR7QGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCAneGF0dHInLCAneGF0dHInLCAnJywgZCl9IFwKLQkke0BiYi51dGlscy5jb250YWlucygnRElTVFJPX0ZFQVRVUkVTJywgJ2xhcmdlZmlsZScsICdsYXJnZWZpbGUnLCAnJywgZCl9IFwKLSIKLQotUEFDS0FHRUNPTkZJR19hcHBlbmRfY2xhc3MtbmF0aXZlc2RrID0gIiBsYXJnZWZpbGUiCi0KLVBBQ0tBR0VDT05GSUdbYWNsXSA9ICItLWVuYWJsZS1hY2wsLS1kaXNhYmxlLWFjbCxhY2wsIgotUEFDS0FHRUNPTkZJR1t4YXR0cl0gPSAiLS1lbmFibGUteGF0dHIsLS1kaXNhYmxlLXhhdHRyLGF0dHIsIgotUEFDS0FHRUNPTkZJR1tsYXJnZWZpbGVdID0gIi0tZW5hYmxlLWxhcmdlZmlsZSwtLWRpc2FibGUtbGFyZ2VmaWxlLCwiCi1QQUNLQUdFQ09ORklHW3psaWJdID0gIi0td2l0aC16bGliLC0td2l0aG91dC16bGliLHpsaWIsIgotUEFDS0FHRUNPTkZJR1tiejJdID0gIi0td2l0aC1iejJsaWIsLS13aXRob3V0LWJ6MmxpYixiemlwMiwiCi1QQUNLQUdFQ09ORklHW3h6XSA9ICItLXdpdGgtbHptYWRlYyAtLXdpdGgtbHptYSwtLXdpdGhvdXQtbHptYWRlYyAtLXdpdGhvdXQtbHptYSx4eiwiCi1QQUNLQUdFQ09ORklHW29wZW5zc2xdID0gIi0td2l0aC1vcGVuc3NsLC0td2l0aG91dC1vcGVuc3NsLG9wZW5zc2wsIgotUEFDS0FHRUNPTkZJR1tsaWJ4bWwyXSA9ICItLXdpdGgteG1sMiwtLXdpdGhvdXQteG1sMixsaWJ4bWwyLCIKLVBBQ0tBR0VDT05GSUdbZXhwYXRdID0gIi0td2l0aC1leHBhdCwtLXdpdGhvdXQtZXhwYXQsZXhwYXQsIgotUEFDS0FHRUNPTkZJR1tsem9dID0gIi0td2l0aC1sem8yLC0td2l0aG91dC1sem8yLGx6bywiCi1QQUNLQUdFQ09ORklHW25ldHRsZV0gPSAiLS13aXRoLW5ldHRsZSwtLXdpdGhvdXQtbmV0dGxlLG5ldHRsZSwiCi0KLVNSQ19VUkkgPSAiaHR0cDovL2xpYmFyY2hpdmUub3JnL2Rvd25sb2Fkcy9saWJhcmNoaXZlLSR7UFZ9LnRhci5neiBcCi0gICAgICAgICAgIGZpbGU6Ly9saWJhcmNoaXZlLUNWRS0yMDEzLTAyMTEucGF0Y2ggXAotICAgICAgICAgICBmaWxlOi8vcGtnY29uZmlnLnBhdGNoIFwKLSAgICAgICAgICAgZmlsZTovL2xpYmFyY2hpdmUtQ1ZFLTIwMTUtMjMwNC5wYXRjaCBcCi0gICAgICAgICAgIGZpbGU6Ly9ta2Rpci5wYXRjaCBcCi0gICAgICAgICAgIGZpbGU6Ly8wMDAxLVNldC14YXR0cnMtYWZ0ZXItc2V0dGluZy10aW1lcy5wYXRjaCBcCi0gICAgICAgICAgICIKLQotU1JDX1VSSVttZDVzdW1dID0gImVmYWQ1YTUwM2Y2NjMyOWJiOWQyZjQzMDhiNWRlOThhIgotU1JDX1VSSVtzaGEyNTZzdW1dID0gImViODdlYWNkOGZlNDllOGQ5MGM4ZmRjMTg5ODEzMDIzY2NjMzE5YzVlNzUyYjAxZmI2YWQwY2M3YjJjNTNkNWUiCi0KLWluaGVyaXQgYXV0b3Rvb2xzIHVwZGF0ZS1hbHRlcm5hdGl2ZXMgcGtnY29uZmlnCi0KLUNQUEZMQUdTICs9ICItSSR7V09SS0RJUn0vZXh0cmEtaW5jbHVkZXMiCi0KLWRvX2NvbmZpZ3VyZVtjbGVhbmRpcnNdICs9ICIke1dPUktESVJ9L2V4dHJhLWluY2x1ZGVzIgotZG9fY29uZmlndXJlX3ByZXBlbmQoKSB7Ci0JIyBXZSBqdXN0IG5lZWQgdGhlIGhlYWRlcnMgZm9yIHNvbWUgdHlwZSBjb25zdGFudHMsIHNvIG5vIG5lZWQgdG8KLQkjIGJ1aWxkIGFsbCBvZiBlMmZzcHJvZ3MgZm9yIHRoZSB0YXJnZXQKLQljcCAtUiAke1NUQUdJTkdfSU5DRElSX05BVElWRX0vZXh0MmZzICR7V09SS0RJUn0vZXh0cmEtaW5jbHVkZXMvCi19Ci0KLUFMVEVSTkFUSVZFX1BSSU9SSVRZID0gIjEwMCIKLQotUEFDS0FHRVMgPSsgImJzZHRhciIKLUZJTEVTX2JzZHRhciA9ICIke2JpbmRpcn0vYnNkdGFyIgotCi1BTFRFUk5BVElWRV9ic2R0YXIgPSAidGFyIgotQUxURVJOQVRJVkVfTElOS19OQU1FW3Rhcl0gPSAiJHtiYXNlX2JpbmRpcn0vdGFyIgotQUxURVJOQVRJVkVfVEFSR0VUW3Rhcl0gPSAiJHtiaW5kaXJ9L2JzZHRhciIKLQotUEFDS0FHRVMgPSsgImJzZGNwaW8iCi1GSUxFU19ic2RjcGlvID0gIiR7YmluZGlyfS9ic2RjcGlvIgotCi1BTFRFUk5BVElWRV9ic2RjcGlvID0gImNwaW8iCi1BTFRFUk5BVElWRV9MSU5LX05BTUVbY3Bpb10gPSAiJHtiYXNlX2JpbmRpcn0vY3BpbyIKLUFMVEVSTkFUSVZFX1RBUkdFVFtjcGlvXSA9ICIke2JpbmRpcn0vYnNkY3BpbyIKLQotQkJDTEFTU0VYVEVORCA9ICJuYXRpdmUgbmF0aXZlc2RrIgpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9saWJhcmNoaXZlL2xpYmFyY2hpdmVfMy4yLjEuYmIgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2xpYmFyY2hpdmUvbGliYXJjaGl2ZV8zLjIuMS5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNjViNWRmCi0tLSAvZGV2L251bGwKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9saWJhcmNoaXZlL2xpYmFyY2hpdmVfMy4yLjEuYmIKQEAgLTAsMCArMSw2NyBAQAorU1VNTUFSWSA9ICJTdXBwb3J0IGZvciByZWFkaW5nIHZhcmlvdXMgYXJjaGl2ZSBmb3JtYXRzIgorREVTQ1JJUFRJT04gPSAiQyBsaWJyYXJ5IGFuZCBjb21tYW5kLWxpbmUgdG9vbHMgZm9yIHJlYWRpbmcgYW5kIHdyaXRpbmcgdGFyLCBjcGlvLCB6aXAsIElTTywgYW5kIG90aGVyIGFyY2hpdmUgZm9ybWF0cyIKK0hPTUVQQUdFID0gImh0dHA6Ly93d3cubGliYXJjaGl2ZS5vcmcvIgorU0VDVElPTiA9ICJkZXZlbCIKK0xJQ0VOU0UgPSAiQlNEIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9ZWQ5OWFjYTAwNmJjMzQ2OTc0YmI3NDVhMzUzMzY0MjUiCisKK0RFUEVORFMgPSAiZTJmc3Byb2dzLW5hdGl2ZSIKKworUEFDS0FHRUNPTkZJRyA/PSAiemxpYiBiejIiCisKK1BBQ0tBR0VDT05GSUdfYXBwZW5kX2NsYXNzLXRhcmdldCA9ICJcCisJbGlieG1sMiBcCisJJHtAYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsICdhY2wnLCAnYWNsJywgJycsIGQpfSBcCisJJHtAYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsICd4YXR0cicsICd4YXR0cicsICcnLCBkKX0gXAorCSR7QGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCAnbGFyZ2VmaWxlJywgJ2xhcmdlZmlsZScsICcnLCBkKX0gXAorIgorCitQQUNLQUdFQ09ORklHX2FwcGVuZF9jbGFzcy1uYXRpdmVzZGsgPSAiIGxhcmdlZmlsZSIKKworUEFDS0FHRUNPTkZJR1thY2xdID0gIi0tZW5hYmxlLWFjbCwtLWRpc2FibGUtYWNsLGFjbCwiCitQQUNLQUdFQ09ORklHW3hhdHRyXSA9ICItLWVuYWJsZS14YXR0ciwtLWRpc2FibGUteGF0dHIsYXR0ciwiCitQQUNLQUdFQ09ORklHW2xhcmdlZmlsZV0gPSAiLS1lbmFibGUtbGFyZ2VmaWxlLC0tZGlzYWJsZS1sYXJnZWZpbGUsLCIKK1BBQ0tBR0VDT05GSUdbemxpYl0gPSAiLS13aXRoLXpsaWIsLS13aXRob3V0LXpsaWIsemxpYiwiCitQQUNLQUdFQ09ORklHW2J6Ml0gPSAiLS13aXRoLWJ6MmxpYiwtLXdpdGhvdXQtYnoybGliLGJ6aXAyLCIKK1BBQ0tBR0VDT05GSUdbeHpdID0gIi0td2l0aC1sem1hZGVjIC0td2l0aC1sem1hLC0td2l0aG91dC1sem1hZGVjIC0td2l0aG91dC1sem1hLHh6LCIKK1BBQ0tBR0VDT05GSUdbb3BlbnNzbF0gPSAiLS13aXRoLW9wZW5zc2wsLS13aXRob3V0LW9wZW5zc2wsb3BlbnNzbCwiCitQQUNLQUdFQ09ORklHW2xpYnhtbDJdID0gIi0td2l0aC14bWwyLC0td2l0aG91dC14bWwyLGxpYnhtbDIsIgorUEFDS0FHRUNPTkZJR1tleHBhdF0gPSAiLS13aXRoLWV4cGF0LC0td2l0aG91dC1leHBhdCxleHBhdCwiCitQQUNLQUdFQ09ORklHW2x6b10gPSAiLS13aXRoLWx6bzIsLS13aXRob3V0LWx6bzIsbHpvLCIKK1BBQ0tBR0VDT05GSUdbbmV0dGxlXSA9ICItLXdpdGgtbmV0dGxlLC0td2l0aG91dC1uZXR0bGUsbmV0dGxlLCIKK1BBQ0tBR0VDT05GSUdbbHo0XSA9ICItLXdpdGgtbHo0LC0td2l0aG91dC1sejQsbHo0LCIKKworU1JDX1VSSSA9ICJodHRwOi8vbGliYXJjaGl2ZS5vcmcvZG93bmxvYWRzL2xpYmFyY2hpdmUtJHtQVn0udGFyLmd6IFwKKyAgICAgICAgICAgIgorCitTUkNfVVJJW21kNXN1bV0gPSAiYWZhMjU3MDQ3ZDE5NDFhNTY1MjE2ZWRiZjAxNzFlNzIiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiNzJlZTFhNGUzZmQ1MzQ1MjVmMTNhMGJhMWFhN2IwNWIyMDNkMTg2ZTBjNjA3MmE4YTQ3Mzg2NDlkMGIzY2ZkMiIKKworaW5oZXJpdCBhdXRvdG9vbHMgdXBkYXRlLWFsdGVybmF0aXZlcyBwa2djb25maWcKKworQ1BQRkxBR1MgKz0gIi1JJHtXT1JLRElSfS9leHRyYS1pbmNsdWRlcyIKKworZG9fY29uZmlndXJlW2NsZWFuZGlyc10gKz0gIiR7V09SS0RJUn0vZXh0cmEtaW5jbHVkZXMiCitkb19jb25maWd1cmVfcHJlcGVuZCgpIHsKKwkjIFdlIGp1c3QgbmVlZCB0aGUgaGVhZGVycyBmb3Igc29tZSB0eXBlIGNvbnN0YW50cywgc28gbm8gbmVlZCB0bworCSMgYnVpbGQgYWxsIG9mIGUyZnNwcm9ncyBmb3IgdGhlIHRhcmdldAorCWNwIC1SICR7U1RBR0lOR19JTkNESVJfTkFUSVZFfS9leHQyZnMgJHtXT1JLRElSfS9leHRyYS1pbmNsdWRlcy8KK30KKworQUxURVJOQVRJVkVfUFJJT1JJVFkgPSAiMTAwIgorCitQQUNLQUdFUyA9KyAiYnNkdGFyIgorRklMRVNfYnNkdGFyID0gIiR7YmluZGlyfS9ic2R0YXIiCisKK0FMVEVSTkFUSVZFX2JzZHRhciA9ICJ0YXIiCitBTFRFUk5BVElWRV9MSU5LX05BTUVbdGFyXSA9ICIke2Jhc2VfYmluZGlyfS90YXIiCitBTFRFUk5BVElWRV9UQVJHRVRbdGFyXSA9ICIke2JpbmRpcn0vYnNkdGFyIgorCitQQUNLQUdFUyA9KyAiYnNkY3BpbyIKK0ZJTEVTX2JzZGNwaW8gPSAiJHtiaW5kaXJ9L2JzZGNwaW8iCisKK0FMVEVSTkFUSVZFX2JzZGNwaW8gPSAiY3BpbyIKK0FMVEVSTkFUSVZFX0xJTktfTkFNRVtjcGlvXSA9ICIke2Jhc2VfYmluZGlyfS9jcGlvIgorQUxURVJOQVRJVkVfVEFSR0VUW2NwaW9dID0gIiR7YmluZGlyfS9ic2RjcGlvIgorCitCQkNMQVNTRVhURU5EID0gIm5hdGl2ZSBuYXRpdmVzZGsiCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2xpYmlkbi9saWJpZG4vMDAwMS1pZG4tZml4LXByaW50Zi1mb3JtYXQtc2VjdXJpdHktd2FybmluZ3MucGF0Y2ggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2xpYmlkbi9saWJpZG4vMDAwMS1pZG4tZml4LXByaW50Zi1mb3JtYXQtc2VjdXJpdHktd2FybmluZ3MucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWFkYzdkOQotLS0gL2Rldi9udWxsCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbGliaWRuL2xpYmlkbi8wMDAxLWlkbi1maXgtcHJpbnRmLWZvcm1hdC1zZWN1cml0eS13YXJuaW5ncy5wYXRjaApAQCAtMCwwICsxLDE4MSBAQAorRnJvbSA4MmY5OGRjYmM0MjliYmU4OWE5ODM3YzUzM2NiY2JjMDJlNzdjNzkwIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogPT9VVEYtOD9xP0FuZHI9QzM9QTk9MjBEcmFzemlrPz0gPGFkcmFzemlrQHR5Y29pbnQuY29tPgorRGF0ZTogVHVlLCAyOCBKdW4gMjAxNiAxMjo0MzozMSArMDEwMAorU3ViamVjdDogW1BBVENIXSBpZG46IGZpeCBwcmludGYoKSBmb3JtYXQgc2VjdXJpdHkgd2FybmluZ3MKK01JTUUtVmVyc2lvbjogMS4wCitDb250ZW50LVR5cGU6IHRleHQvcGxhaW47IGNoYXJzZXQ9VVRGLTgKK0NvbnRlbnQtVHJhbnNmZXItRW5jb2Rpbmc6IDhiaXQKKworfCAuLi8uLi9saWJpZG4tMS4zMi9zcmMvaWRuLmM6IEluIGZ1bmN0aW9uICdtYWluJzoKK3wgLi4vLi4vbGliaWRuLTEuMzIvc3JjL2lkbi5jOjE3Mjo3OiBlcnJvcjogZm9ybWF0IG5vdCBhIHN0cmluZyBsaXRlcmFsIGFuZCBubyBmb3JtYXQgYXJndW1lbnRzIFstV2Vycm9yPWZvcm1hdC1zZWN1cml0eV0KK3wgICAgICAgIGVycm9yICgwLCAwLCBfKCJvbmx5IG9uZSBvZiAtcywgLWUsIC1kLCAtYSwgLXUgb3IgLW4gY2FuIGJlIHNwZWNpZmllZCIpKTsKK3wgICAgICAgIF5+fn5+Cit8IC4uLy4uL2xpYmlkbi0xLjMyL3NyYy9pZG4uYzoxODc6NTogZXJyb3I6IGZvcm1hdCBub3QgYSBzdHJpbmcgbGl0ZXJhbCBhbmQgbm8gZm9ybWF0IGFyZ3VtZW50cyBbLVdlcnJvcj1mb3JtYXQtc2VjdXJpdHldCit8ICAgICAgZnByaW50ZiAoc3RkZXJyLCBfKCJUeXBlIGVhY2ggaW5wdXQgc3RyaW5nIG9uIGEgbGluZSBieSBpdHNlbGYsICIKK3wgICAgICBefn5+fn5+Cit8IC4uLy4uL2xpYmlkbi0xLjMyL3NyYy9pZG4uYzoyMDI6NDogZXJyb3I6IGZvcm1hdCBub3QgYSBzdHJpbmcgbGl0ZXJhbCBhbmQgbm8gZm9ybWF0IGFyZ3VtZW50cyBbLVdlcnJvcj1mb3JtYXQtc2VjdXJpdHldCit8ICAgICBlcnJvciAoRVhJVF9GQUlMVVJFLCBlcnJubywgXygiaW5wdXQgZXJyb3IiKSk7Cit8ICAgICBefn5+fgorfCAuLi8uLi9saWJpZG4tMS4zMi9zcmMvaWRuLmM6MjIwOjg6IGVycm9yOiBmb3JtYXQgbm90IGEgc3RyaW5nIGxpdGVyYWwgYW5kIG5vIGZvcm1hdCBhcmd1bWVudHMgWy1XZXJyb3I9Zm9ybWF0LXNlY3VyaXR5XQorfCAgICAgICAgIF8oImNvdWxkIG5vdCBjb252ZXJ0IGZyb20gVVRGLTggdG8gVUNTLTQiKSk7Cit8ICAgICAgICAgXgorfCAuLi8uLi9saWJpZG4tMS4zMi9zcmMvaWRuLmM6MjQ1Ojg6IGVycm9yOiBmb3JtYXQgbm90IGEgc3RyaW5nIGxpdGVyYWwgYW5kIG5vIGZvcm1hdCBhcmd1bWVudHMgWy1XZXJyb3I9Zm9ybWF0LXNlY3VyaXR5XQorfCAgICAgICAgIF8oImNvdWxkIG5vdCBjb252ZXJ0IGZyb20gVVRGLTggdG8gVUNTLTQiKSk7Cit8ICAgICAgICAgXgorfCAuLi8uLi9saWJpZG4tMS4zMi9zcmMvaWRuLmM6MjgxOjY6IGVycm9yOiBmb3JtYXQgbm90IGEgc3RyaW5nIGxpdGVyYWwgYW5kIG5vIGZvcm1hdCBhcmd1bWVudHMgWy1XZXJyb3I9Zm9ybWF0LXNlY3VyaXR5XQorfCAgICAgICBfKCJjb3VsZCBub3QgY29udmVydCBmcm9tIFVURi04IHRvIFVDUy00IikpOworfCAgICAgICBeCit8IC4uLy4uL2xpYmlkbi0xLjMyL3NyYy9pZG4uYzozNDA6NjogZXJyb3I6IGZvcm1hdCBub3QgYSBzdHJpbmcgbGl0ZXJhbCBhbmQgbm8gZm9ybWF0IGFyZ3VtZW50cyBbLVdlcnJvcj1mb3JtYXQtc2VjdXJpdHldCit8ICAgICAgIF8oImNvdWxkIG5vdCBjb252ZXJ0IGZyb20gVUNTLTQgdG8gVVRGLTgiKSk7Cit8ICAgICAgIF4KK3wgLi4vLi4vbGliaWRuLTEuMzIvc3JjL2lkbi5jOjM2NDo2OiBlcnJvcjogZm9ybWF0IG5vdCBhIHN0cmluZyBsaXRlcmFsIGFuZCBubyBmb3JtYXQgYXJndW1lbnRzIFstV2Vycm9yPWZvcm1hdC1zZWN1cml0eV0KK3wgICAgICAgXygiY291bGQgbm90IGNvbnZlcnQgZnJvbSBVQ1MtNCB0byBVVEYtOCIpKTsKK3wgICAgICAgXgorfCAuLi8uLi9saWJpZG4tMS4zMi9zcmMvaWRuLmM6NDQyOjg6IGVycm9yOiBmb3JtYXQgbm90IGEgc3RyaW5nIGxpdGVyYWwgYW5kIG5vIGZvcm1hdCBhcmd1bWVudHMgWy1XZXJyb3I9Zm9ybWF0LXNlY3VyaXR5XQorfCAgICAgICAgIF8oImNvdWxkIG5vdCBjb252ZXJ0IGZyb20gVUNTLTQgdG8gVVRGLTgiKSk7Cit8ICAgICAgICAgXgorfCAuLi8uLi9saWJpZG4tMS4zMi9zcmMvaWRuLmM6NDk4OjY6IGVycm9yOiBmb3JtYXQgbm90IGEgc3RyaW5nIGxpdGVyYWwgYW5kIG5vIGZvcm1hdCBhcmd1bWVudHMgWy1XZXJyb3I9Zm9ybWF0LXNlY3VyaXR5XQorfCAgICAgICBfKCJjb3VsZCBub3QgY29udmVydCBmcm9tIFVURi04IHRvIFVDUy00IikpOworfCAgICAgICBeCit8IC4uLy4uL2xpYmlkbi0xLjMyL3NyYy9pZG4uYzo1Mjc6NTogZXJyb3I6IGZvcm1hdCBub3QgYSBzdHJpbmcgbGl0ZXJhbCBhbmQgbm8gZm9ybWF0IGFyZ3VtZW50cyBbLVdlcnJvcj1mb3JtYXQtc2VjdXJpdHldCit8ICAgICAgXygiY291bGQgbm90IGNvbnZlcnQgZnJvbSBVVEYtOCB0byBVQ1MtNCIpKTsKK3wgICAgICBeCit8IC4uLy4uL2xpYmlkbi0xLjMyL3NyYy9pZG4uYzo1NDA6NjogZXJyb3I6IGZvcm1hdCBub3QgYSBzdHJpbmcgbGl0ZXJhbCBhbmQgbm8gZm9ybWF0IGFyZ3VtZW50cyBbLVdlcnJvcj1mb3JtYXQtc2VjdXJpdHldCit8ICAgICAgIGVycm9yIChFWElUX0ZBSUxVUkUsIDAsIF8oImNvdWxkIG5vdCBkbyBORktDIG5vcm1hbGl6YXRpb24iKSk7Cit8ICAgICAgIF5+fn5+Cit8IC4uLy4uL2xpYmlkbi0xLjMyL3NyYy9pZG4uYzo1NTE6NTogZXJyb3I6IGZvcm1hdCBub3QgYSBzdHJpbmcgbGl0ZXJhbCBhbmQgbm8gZm9ybWF0IGFyZ3VtZW50cyBbLVdlcnJvcj1mb3JtYXQtc2VjdXJpdHldCit8ICAgICAgXygiY291bGQgbm90IGNvbnZlcnQgZnJvbSBVVEYtOCB0byBVQ1MtNCIpKTsKK3wgICAgICBeCisKK1NpZ25lZC1vZmYtYnk6IEFuZHLDqSBEcmFzemlrIDxhZHJhc3ppa0B0eWNvaW50LmNvbT4KKy0tLQorVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKKyBzcmMvaWRuLmMgfCAyNyArKysrKysrKysrKysrKy0tLS0tLS0tLS0tLS0KKyAxIGZpbGUgY2hhbmdlZCwgMTQgaW5zZXJ0aW9ucygrKSwgMTMgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9zcmMvaWRuLmMgYi9zcmMvaWRuLmMKK2luZGV4IGJlMWM3ZDEuLjY4ZTQyOTEgMTAwNjQ0CistLS0gYS9zcmMvaWRuLmMKKysrKyBiL3NyYy9pZG4uYworQEAgLTE3MCw3ICsxNzAsNyBAQCBtYWluIChpbnQgYXJnYywgY2hhciAqYXJndltdKQorICAgICAgIChhcmdzX2luZm8uaWRuYV90b191bmljb2RlX2dpdmVuID8gMSA6IDApICsKKyAgICAgICAoYXJnc19pbmZvLm5ma2NfZ2l2ZW4gPyAxIDogMCkgIT0gMSkKKyAgICAgeworLSAgICAgIGVycm9yICgwLCAwLCBfKCJvbmx5IG9uZSBvZiAtcywgLWUsIC1kLCAtYSwgLXUgb3IgLW4gY2FuIGJlIHNwZWNpZmllZCIpKTsKKysgICAgICBlcnJvciAoMCwgMCwgIiVzIiwgXygib25seSBvbmUgb2YgLXMsIC1lLCAtZCwgLWEsIC11IG9yIC1uIGNhbiBiZSBzcGVjaWZpZWQiKSk7CisgICAgICAgdXNhZ2UgKEVYSVRfRkFJTFVSRSk7CisgICAgIH0KKyAKK0BAIC0xODUsNyArMTg1LDcgQEAgbWFpbiAoaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKKyAgIGlmICghYXJnc19pbmZvLnF1aWV0X2dpdmVuCisgICAgICAgJiYgYXJnc19pbmZvLmlucHV0c19udW0gPT0gMAorICAgICAgICYmIGlzYXR0eSAoZmlsZW5vIChzdGRpbikpKQorLSAgICBmcHJpbnRmIChzdGRlcnIsIF8oIlR5cGUgZWFjaCBpbnB1dCBzdHJpbmcgb24gYSBsaW5lIGJ5IGl0c2VsZiwgIgorKyAgICBmcHJpbnRmIChzdGRlcnIsICIlcyIsIF8oIlR5cGUgZWFjaCBpbnB1dCBzdHJpbmcgb24gYSBsaW5lIGJ5IGl0c2VsZiwgIgorIAkJICAgICAgICJ0ZXJtaW5hdGVkIGJ5IGEgbmV3bGluZSBjaGFyYWN0ZXIuXG4iKSk7CisgCisgICBkbworQEAgLTE5Nyw3ICsxOTcsNyBAQCBtYWluIChpbnQgYXJnYywgY2hhciAqYXJndltdKQorIAkgIGlmIChmZW9mIChzdGRpbikpCisgCSAgICBicmVhazsKKyAKKy0JICBlcnJvciAoRVhJVF9GQUlMVVJFLCBlcnJubywgXygiaW5wdXQgZXJyb3IiKSk7CisrCSAgZXJyb3IgKEVYSVRfRkFJTFVSRSwgZXJybm8sICIlcyIsIF8oImlucHV0IGVycm9yIikpOworIAl9CisgCisgICAgICAgaWYgKHN0cmxlbiAobGluZSkgPiAwKQorQEAgLTIxNSw3ICsyMTUsNyBAQCBtYWluIChpbnQgYXJnYywgY2hhciAqYXJndltdKQorIAkgIGlmICghcSkKKyAJICAgIHsKKyAJICAgICAgZnJlZSAocCk7CistCSAgICAgIGVycm9yIChFWElUX0ZBSUxVUkUsIDAsCisrCSAgICAgIGVycm9yIChFWElUX0ZBSUxVUkUsIDAsICIlcyIsCisgCQkgICAgIF8oImNvdWxkIG5vdCBjb252ZXJ0IGZyb20gVVRGLTggdG8gVUNTLTQiKSk7CisgCSAgICB9CisgCitAQCAtMjQwLDcgKzI0MCw3IEBAIG1haW4gKGludCBhcmdjLCBjaGFyICphcmd2W10pCisgCSAgaWYgKCFxKQorIAkgICAgeworIAkgICAgICBmcmVlIChyKTsKKy0JICAgICAgZXJyb3IgKEVYSVRfRkFJTFVSRSwgMCwKKysJICAgICAgZXJyb3IgKEVYSVRfRkFJTFVSRSwgMCwgIiVzIiwKKyAJCSAgICAgXygiY291bGQgbm90IGNvbnZlcnQgZnJvbSBVVEYtOCB0byBVQ1MtNCIpKTsKKyAJICAgIH0KKyAKK0BAIC0yNzcsNyArMjc3LDcgQEAgbWFpbiAoaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKKyAJICBxID0gc3RyaW5ncHJlcF91dGY4X3RvX3VjczQgKHAsIC0xLCAmbGVuKTsKKyAJICBmcmVlIChwKTsKKyAJICBpZiAoIXEpCistCSAgICBlcnJvciAoRVhJVF9GQUlMVVJFLCAwLAorKwkgICAgZXJyb3IgKEVYSVRfRkFJTFVSRSwgMCwgIiVzIiwKKyAJCSAgIF8oImNvdWxkIG5vdCBjb252ZXJ0IGZyb20gVVRGLTggdG8gVUNTLTQiKSk7CisgCisgCSAgaWYgKGFyZ3NfaW5mby5kZWJ1Z19naXZlbikKK0BAIC0zMzYsNyArMzM2LDcgQEAgbWFpbiAoaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKKyAJICByID0gc3RyaW5ncHJlcF91Y3M0X3RvX3V0ZjggKHEsIC0xLCBOVUxMLCBOVUxMKTsKKyAJICBmcmVlIChxKTsKKyAJICBpZiAoIXIpCistCSAgICBlcnJvciAoRVhJVF9GQUlMVVJFLCAwLAorKwkgICAgZXJyb3IgKEVYSVRfRkFJTFVSRSwgMCwgIiVzIiwKKyAJCSAgIF8oImNvdWxkIG5vdCBjb252ZXJ0IGZyb20gVUNTLTQgdG8gVVRGLTgiKSk7CisgCisgCSAgcCA9IHN0cmluZ3ByZXBfdXRmOF90b19sb2NhbGUgKHIpOworQEAgLTM2MCw3ICszNjAsNyBAQCBtYWluIChpbnQgYXJnYywgY2hhciAqYXJndltdKQorIAkgIHEgPSBzdHJpbmdwcmVwX3V0ZjhfdG9fdWNzNCAocCwgLTEsIE5VTEwpOworIAkgIGZyZWUgKHApOworIAkgIGlmICghcSkKKy0JICAgIGVycm9yIChFWElUX0ZBSUxVUkUsIDAsCisrCSAgICBlcnJvciAoRVhJVF9GQUlMVVJFLCAwLCAiJXMiLAorIAkJICAgXygiY291bGQgbm90IGNvbnZlcnQgZnJvbSBVQ1MtNCB0byBVVEYtOCIpKTsKKyAKKyAJICBpZiAoYXJnc19pbmZvLmRlYnVnX2dpdmVuKQorQEAgLTQzOCw3ICs0MzgsNyBAQCBtYWluIChpbnQgYXJnYywgY2hhciAqYXJndltdKQorIAkgIGlmICghcSkKKyAJICAgIHsKKyAJICAgICAgZnJlZSAocCk7CistCSAgICAgIGVycm9yIChFWElUX0ZBSUxVUkUsIDAsCisrCSAgICAgIGVycm9yIChFWElUX0ZBSUxVUkUsIDAsICIlcyIsCisgCQkgICAgIF8oImNvdWxkIG5vdCBjb252ZXJ0IGZyb20gVUNTLTQgdG8gVVRGLTgiKSk7CisgCSAgICB9CisgCitAQCAtNDk0LDcgKzQ5NCw3IEBAIG1haW4gKGludCBhcmdjLCBjaGFyICphcmd2W10pCisgCSAgciA9IHN0cmluZ3ByZXBfdWNzNF90b191dGY4IChxLCAtMSwgTlVMTCwgTlVMTCk7CisgCSAgZnJlZSAocSk7CisgCSAgaWYgKCFyKQorLQkgICAgZXJyb3IgKEVYSVRfRkFJTFVSRSwgMCwKKysJICAgIGVycm9yIChFWElUX0ZBSUxVUkUsIDAsICIlcyIsCisgCQkgICBfKCJjb3VsZCBub3QgY29udmVydCBmcm9tIFVURi04IHRvIFVDUy00IikpOworIAorIAkgIHAgPSBzdHJpbmdwcmVwX3V0ZjhfdG9fbG9jYWxlIChyKTsKK0BAIC01MjMsNyArNTIzLDcgQEAgbWFpbiAoaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKKyAJICAgICAgaWYgKCFxKQorIAkJeworIAkJICBmcmVlIChwKTsKKy0JCSAgZXJyb3IgKEVYSVRfRkFJTFVSRSwgMCwKKysJCSAgZXJyb3IgKEVYSVRfRkFJTFVSRSwgMCwgIiVzIiwKKyAJCQkgXygiY291bGQgbm90IGNvbnZlcnQgZnJvbSBVVEYtOCB0byBVQ1MtNCIpKTsKKyAJCX0KKyAKK0BAIC01MzcsNyArNTM3LDggQEAgbWFpbiAoaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKKyAJICByID0gc3RyaW5ncHJlcF91dGY4X25ma2Nfbm9ybWFsaXplIChwLCAtMSk7CisgCSAgZnJlZSAocCk7CisgCSAgaWYgKCFyKQorLQkgICAgZXJyb3IgKEVYSVRfRkFJTFVSRSwgMCwgXygiY291bGQgbm90IGRvIE5GS0Mgbm9ybWFsaXphdGlvbiIpKTsKKysJICAgIGVycm9yIChFWElUX0ZBSUxVUkUsIDAsICIlcyIsCisrCQkgICBfKCJjb3VsZCBub3QgZG8gTkZLQyBub3JtYWxpemF0aW9uIikpOworIAorIAkgIGlmIChhcmdzX2luZm8uZGVidWdfZ2l2ZW4pCisgCSAgICB7CitAQCAtNTQ3LDcgKzU0OCw3IEBAIG1haW4gKGludCBhcmdjLCBjaGFyICphcmd2W10pCisgCSAgICAgIGlmICghcSkKKyAJCXsKKyAJCSAgZnJlZSAocik7CistCQkgIGVycm9yIChFWElUX0ZBSUxVUkUsIDAsCisrCQkgIGVycm9yIChFWElUX0ZBSUxVUkUsIDAsICIlcyIsCisgCQkJIF8oImNvdWxkIG5vdCBjb252ZXJ0IGZyb20gVVRGLTggdG8gVUNTLTQiKSk7CisgCQl9CisgCistLSAKKzIuOC4xCisKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbGliaWRuL2xpYmlkbi9hdm9pZF9BTV9QUk9HX01LRElSX1Bfd2FybmluZ19lcnJvcl93aXRoX2F1dG9tYWtlXzEuMTIucGF0Y2ggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2xpYmlkbi9saWJpZG4vYXZvaWRfQU1fUFJPR19NS0RJUl9QX3dhcm5pbmdfZXJyb3Jfd2l0aF9hdXRvbWFrZV8xLjEyLnBhdGNoCmluZGV4IDM0NzZiYjkuLjk4YmE0ZDYgMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbGliaWRuL2xpYmlkbi9hdm9pZF9BTV9QUk9HX01LRElSX1Bfd2FybmluZ19lcnJvcl93aXRoX2F1dG9tYWtlXzEuMTIucGF0Y2gKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9saWJpZG4vbGliaWRuL2F2b2lkX0FNX1BST0dfTUtESVJfUF93YXJuaW5nX2Vycm9yX3dpdGhfYXV0b21ha2VfMS4xMi5wYXRjaApAQCAtNyw3ICs3LDcgQEAKIGVsaW1pbmF0ZWQgdGhlc2UgZGVwcmVjYXRlZCBtYWNyb3MgeWV0LiBTbyBkaXNhYmxlIHRoZSB0cmVhdG1lbnQgb2Ygd2FybmluZ3MKIGFzIGVycm9ycyB1bnRpbCBnZXR0ZXh0IGlzIHVwZGF0ZWQgdG8gcmVtb3ZlIHRoZSBkZXByZWNhdGVkIG1hY3Jvcy4KIAotU2lnbmVkLU9mZi1ieTogTml0aW4gQSBLYW1ibGUgPG5pdGluLmEua2FtYmxlQGludGVsLmNvbT4KK1NpZ25lZC1vZmYtYnk6IE5pdGluIEEgS2FtYmxlIDxuaXRpbi5hLmthbWJsZUBpbnRlbC5jb20+CiAyMDEyLzA3LzEwCiAKIEluZGV4OiBsaWJpZG4tMS4yNC9jb25maWd1cmUuYWMKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbGliaWRuL2xpYmlkbi9saWJpZG5fZml4X2Zvcl9hdXRvbWFrZS0xLjEyLnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9saWJpZG4vbGliaWRuL2xpYmlkbl9maXhfZm9yX2F1dG9tYWtlLTEuMTIucGF0Y2gKaW5kZXggMjBhZmQyNS4uNTY4M2QzYyAxMDA2NDQKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9saWJpZG4vbGliaWRuL2xpYmlkbl9maXhfZm9yX2F1dG9tYWtlLTEuMTIucGF0Y2gKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9saWJpZG4vbGliaWRuL2xpYmlkbl9maXhfZm9yX2F1dG9tYWtlLTEuMTIucGF0Y2gKQEAgLTYsNyArNiw3IEBACiB8IC9zcnYvaG9tZS9uaXRpbi9idWlsZHMvYnVpbGQtZ2NjNDcvdG1wL3N5c3Jvb3RzL3g4Nl82NC1saW51eC91c3Ivc2hhcmUvYXV0b21ha2UtMS4xMi9hbS9sdGxpYnJhcnkuYW06IHdhcm5pbmc6ICdsaWJpZG4ubGEnOiBsaW5raW5nIGxpYnRvb2wgbGlicmFyaWVzIHVzaW5nIGEgbm9uLVBPU0lYCiB8IC9zcnYvaG9tZS9uaXRpbi9idWlsZHMvYnVpbGQtZ2NjNDcvdG1wL3N5c3Jvb3RzL3g4Nl82NC1saW51eC91c3Ivc2hhcmUvYXV0b21ha2UtMS4xMi9hbS9sdGxpYnJhcnkuYW06IGFyY2hpdmVyIHJlcXVpcmVzICdBTV9QUk9HX0FSJyBpbiAnY29uZmlndXJlLmFjJwogCi1TaWduZWQtT2ZmLUJ5OiBOaXRpbiBBIEthbWJsZSA8bml0aW4uYS5rYW1ibGVAaW50ZWwuY29tPgorU2lnbmVkLW9mZi1ieTogTml0aW4gQSBLYW1ibGUgPG5pdGluLmEua2FtYmxlQGludGVsLmNvbT4KIDIwMTIvMDUvMDMKIAogSW5kZXg6IGxpYmlkbi0xLjI0L2NvbmZpZ3VyZS5hYwpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9saWJpZG4vbGliaWRuXzEuMzIuYmIgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2xpYmlkbi9saWJpZG5fMS4zMi5iYgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNGQ2ZTg4NS4uMDAwMDAwMAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2xpYmlkbi9saWJpZG5fMS4zMi5iYgorKysgL2Rldi9udWxsCkBAIC0xLDM3ICswLDAgQEAKLVNVTU1BUlkgPSAiSW50ZXJuYXRpb25hbGl6ZWQgRG9tYWluIE5hbWUgc3VwcG9ydCBsaWJyYXJ5IgotREVTQ1JJUFRJT04gPSAiSW1wbGVtZW50YXRpb24gb2YgdGhlIFN0cmluZ3ByZXAsIFB1bnljb2RlIGFuZCBJRE5BIHNwZWNpZmljYXRpb25zIGRlZmluZWQgYnkgdGhlIElFVEYgSW50ZXJuYXRpb25hbGl6ZWQgRG9tYWluIE5hbWVzIChJRE4pIHdvcmtpbmcgZ3JvdXAuIgotSE9NRVBBR0UgPSAiaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL2xpYmlkbi8iCi1TRUNUSU9OID0gImxpYnMiCi1MSUNFTlNFID0gIihMR1BMdjIuMSsgfCBMR1BMdjMpICYgR1BMdjMrIgotTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9ZGY0YmU0Nzk0MGE5MWVlNjk1NTZmNWY3MWVlZDRhZWMgXAotICAgICAgICAgICAgICAgICAgICBmaWxlOi8vQ09QWUlORy5MRVNTRVJ2MjttZDU9NGZiZDY1MzgwY2RkMjU1OTUxMDc5MDA4YjM2NDUxNmMgXAotICAgICAgICAgICAgICAgICAgICBmaWxlOi8vQ09QWUlORy5MRVNTRVJ2MzttZDU9ZTZhNjAwZmQ1ZTFkOWNiZGUyZDk4MzY4MDIzM2FkMDIgXAotICAgICAgICAgICAgICAgICAgICBmaWxlOi8vQ09QWUlOR3YyO21kNT1iMjM0ZWU0ZDY5ZjVmY2U0NDg2YTgwZmRhZjRhNDI2MyBcCi0gICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9DT1BZSU5HdjM7bWQ1PWQzMjIzOWJjYjY3MzQ2M2FiODc0ZTgwZDQ3ZmFlNTA0IFwKLSAgICAgICAgICAgICAgICAgICAgZmlsZTovL2xpYi9pZG5hLmg7ZW5kbGluZT0yMTttZDU9N2MwYjM4MjhkMWIxNTM2NjNiZTlhMDRhZDRmNzk3NWYgXAotICAgICAgICAgICAgICAgICAgICBmaWxlOi8vc3JjL2lkbi5jO2VuZGxpbmU9MjA7bWQ1PWY0MjM1ZjJhMmNiMmI2NTc4NmIyOTc5ZmIzY2Y3ZmJmIgotCi1pbmhlcml0IHBrZ2NvbmZpZyBhdXRvdG9vbHMgZ2V0dGV4dCB0ZXhpbmZvCi0KLVNSQ19VUkkgPSAiJHtHTlVfTUlSUk9SfS9saWJpZG4vJHtCUE59LSR7UFZ9LnRhci5neiBcCi0gICAgICAgICAgIGZpbGU6Ly9saWJpZG5fZml4X2Zvcl9hdXRvbWFrZS0xLjEyLnBhdGNoIFwKLSAgICAgICAgICAgZmlsZTovL2F2b2lkX0FNX1BST0dfTUtESVJfUF93YXJuaW5nX2Vycm9yX3dpdGhfYXV0b21ha2VfMS4xMi5wYXRjaCBcCi0gICAgICAgICAgIGZpbGU6Ly9kb250LWRlcGVuZC1vbi1oZWxwMm1hbi5wYXRjaCBcCi0iCi0KLVNSQ19VUklbbWQ1c3VtXSA9ICI0ZGQ4MzU2YmE1NzcyODdlYTcwNzZiZmExNTU0YjUzNCIKLVNSQ19VUklbc2hhMjU2c3VtXSA9ICJiYTVkNWFmZWUyYmVmZjcwM2EzNGVlMDk0NjY4ZGE1YzZlYTVhZmEzODc4NGNlYmJhODkyNDEwNWUxODVjNGY1IgotCi0jIGNvbW1hbmQgdG9vbCBpcyB1bmRlciBHUEx2MyssIHdoaWxlIGxpYmlkbiBpdHNlbGYgaXMgdW5kZXIgTEdQTHYyLjErIG9yIExHUEx2MwotIyBzbyBwYWNrYWdlIGNvbW1hbmQgaW50byBhIHNlcGFyYXRlIHBhY2thZ2UKLVBBQ0tBR0VTID0rICJpZG4iCi1GSUxFU19pZG4gPSAiJHtiaW5kaXJ9LyoiCi0KLUVYVFJBX09FQ09ORiA9ICItLWRpc2FibGUtY3NoYXJwIgotCi1kb19pbnN0YWxsX2FwcGVuZCgpIHsKLQlybSAtcmYgJHtEfSR7ZGF0YWRpcn0vZW1hY3MKLX0KLQotQkJDTEFTU0VYVEVORCA9ICJuYXRpdmUgbmF0aXZlc2RrIgotCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2xpYmlkbi9saWJpZG5fMS4zMy5iYiBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbGliaWRuL2xpYmlkbl8xLjMzLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQzZDBmNTUKLS0tIC9kZXYvbnVsbAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2xpYmlkbi9saWJpZG5fMS4zMy5iYgpAQCAtMCwwICsxLDQyIEBACitTVU1NQVJZID0gIkludGVybmF0aW9uYWxpemVkIERvbWFpbiBOYW1lIHN1cHBvcnQgbGlicmFyeSIKK0RFU0NSSVBUSU9OID0gIkltcGxlbWVudGF0aW9uIG9mIHRoZSBTdHJpbmdwcmVwLCBQdW55Y29kZSBhbmQgSUROQSBzcGVjaWZpY2F0aW9ucyBkZWZpbmVkIGJ5IHRoZSBJRVRGIEludGVybmF0aW9uYWxpemVkIERvbWFpbiBOYW1lcyAoSUROKSB3b3JraW5nIGdyb3VwLiIKK0hPTUVQQUdFID0gImh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS9saWJpZG4vIgorU0VDVElPTiA9ICJsaWJzIgorTElDRU5TRSA9ICIoTEdQTHYyLjErIHwgTEdQTHYzKSAmIEdQTHYzKyIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PWRmNGJlNDc5NDBhOTFlZTY5NTU2ZjVmNzFlZWQ0YWVjIFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL0NPUFlJTkcuTEVTU0VSdjI7bWQ1PTRmYmQ2NTM4MGNkZDI1NTk1MTA3OTAwOGIzNjQ1MTZjIFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL0NPUFlJTkcuTEVTU0VSdjM7bWQ1PWU2YTYwMGZkNWUxZDljYmRlMmQ5ODM2ODAyMzNhZDAyIFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL0NPUFlJTkd2MjttZDU9YjIzNGVlNGQ2OWY1ZmNlNDQ4NmE4MGZkYWY0YTQyNjMgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vQ09QWUlOR3YzO21kNT1kMzIyMzliY2I2NzM0NjNhYjg3NGU4MGQ0N2ZhZTUwNCBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9saWIvaWRuYS5oO2VuZGxpbmU9MjE7bWQ1PTM3Y2ZmYWQyNDgwN2Y0NDZhMjRkZTNlNzM3MWYyMGI5IFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL3NyYy9pZG4uYztlbmRsaW5lPTIwO21kNT0wOWU5NzAzNGE4ODc3YjM0NTFjYjY1MDY1ZmMyYzA2ZSIKK0RFUEVORFMgPSAidmlydHVhbC9saWJpY29udiIKKworaW5oZXJpdCBwa2djb25maWcgYXV0b3Rvb2xzIGdldHRleHQgdGV4aW5mbyBndGstZG9jCisKK1NSQ19VUkkgPSAiJHtHTlVfTUlSUk9SfS9saWJpZG4vJHtCUE59LSR7UFZ9LnRhci5neiBcCisgICAgICAgICAgIGZpbGU6Ly9saWJpZG5fZml4X2Zvcl9hdXRvbWFrZS0xLjEyLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL2F2b2lkX0FNX1BST0dfTUtESVJfUF93YXJuaW5nX2Vycm9yX3dpdGhfYXV0b21ha2VfMS4xMi5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9kb250LWRlcGVuZC1vbi1oZWxwMm1hbi5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly8wMDAxLWlkbi1maXgtcHJpbnRmLWZvcm1hdC1zZWN1cml0eS13YXJuaW5ncy5wYXRjaCBcCisiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICJhOWFhN2UwMDM2NjVkZTljODJiZDNmOWZjNmNjZjMwOCIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICI0NGE3YWFiNjM1YmI3MjFjZWVmNmJlZWNjNGQ0OWRmZDE5NDc4MzI1ZTFiNDdmMzE5NmY3ZDJhY2M0OTMwZTE5IgorCisjIGNvbW1hbmQgdG9vbCBpcyB1bmRlciBHUEx2MyssIHdoaWxlIGxpYmlkbiBpdHNlbGYgaXMgdW5kZXIgTEdQTHYyLjErIG9yIExHUEx2MworIyBzbyBwYWNrYWdlIGNvbW1hbmQgaW50byBhIHNlcGFyYXRlIHBhY2thZ2UKK1BBQ0tBR0VTID0rICJpZG4iCitGSUxFU19pZG4gPSAiJHtiaW5kaXJ9LyoiCisKK0xJQ0VOU0VfJHtQTn0gPSAiTEdQTHYyLjErIHwgTEdQTHYzIgorTElDRU5TRV9pZG4gPSAiR1BMdjMrIgorCitFWFRSQV9PRUNPTkYgPSAiLS1kaXNhYmxlLWNzaGFycCIKKworZG9faW5zdGFsbF9hcHBlbmQoKSB7CisJcm0gLXJmICR7RH0ke2RhdGFkaXJ9L2VtYWNzCit9CisKK0JCQ0xBU1NFWFRFTkQgPSAibmF0aXZlIG5hdGl2ZXNkayIKKwpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9saWJzb2x2L2xpYnNvbHYvMDAwMS1BZGQtZmFsbGJhY2stZm9wZW5jb29raWUtaW1wbGVtZW50YXRpb24ucGF0Y2ggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2xpYnNvbHYvbGlic29sdi8wMDAxLUFkZC1mYWxsYmFjay1mb3BlbmNvb2tpZS1pbXBsZW1lbnRhdGlvbi5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yNGUyMjI4Ci0tLSAvZGV2L251bGwKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9saWJzb2x2L2xpYnNvbHYvMDAwMS1BZGQtZmFsbGJhY2stZm9wZW5jb29raWUtaW1wbGVtZW50YXRpb24ucGF0Y2gKQEAgLTAsMCArMSwyNTQgQEAKK0Zyb20gNWI2ZTExM2Y1NDhiZDhhMmIxMDAyNjdiYzVkNTRjZWU4NjFhNGI5OCBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206ID0/VVRGLTg/cT9OZWFsPTIwR29tcGE9MjA9Mjg9RTM9ODM9OEI9RTM9ODM9QkM9RTM9ODM9QUI9RTM9ODM9QkI/PQorID0/VVRGLTg/cT89RTM9ODI9QjM9RTM9ODI9OTk9RTM9ODM9QjM9RTM9ODM9OEY9RTM9ODI9OUE9Mjk/PQorIDxuZ29tcGExM0BnbWFpbC5jb20+CitEYXRlOiBXZWQsIDExIE5vdiAyMDE1IDIwOjMyOjE3IC0wNTAwCitTdWJqZWN0OiBbUEFUQ0hdIEFkZCBmYWxsYmFjayBmb3BlbmNvb2tpZSgpIGltcGxlbWVudGF0aW9uCitNSU1FLVZlcnNpb246IDEuMAorQ29udGVudC1UeXBlOiB0ZXh0L3BsYWluOyBjaGFyc2V0PVVURi04CitDb250ZW50LVRyYW5zZmVyLUVuY29kaW5nOiA4Yml0CisKK0luIGVudmlyb25tZW50cyB3aGVyZSBuZWl0aGVyIGZvcGVuY29va2llKCkgbm9yIGZ1bm9wZW4oKQorYXJlIGltcGxlbWVudGVkLCB3ZSBuZWVkIHRvIHByb3ZpZGUgYSBzdWl0YWJsZSBpbXBsZW1lbnRhdGlvbgorb2YgZm9wZW5jb29raWUoKSB0aGF0IHdlIGNhbiB1c2UuCisKK1Vwc3RyZWFtLVN0YXR1czogU3VibWl0dGVkIFsgaHR0cHM6Ly9naXRodWIuY29tL29wZW5TVVNFL2xpYnNvbHYvcHVsbC8xMTIgXQorCitTaWduZWQtb2ZmLWJ5OiBOZWFsIEdvbXBhICjjg4vjg7zjg6vjg7vjgrPjgpnjg7Pjg4/jgpopIDxuZ29tcGExM0BnbWFpbC5jb20+Y29tPgorU2lnbmVkLW9mZi1ieTogTWF4aW4gQi4gSm9obiA8bWF4aW4uam9obkBpbnRlbC5jb20+CistLS0KKyBleHQvQ01ha2VMaXN0cy50eHQgICAgICAgICAgICAgICAgICAgICB8ICAgNyArKworIGV4dC9zb2x2X3hmb3Blbi5jICAgICAgICAgICAgICAgICAgICAgIHwgIDEwICstLQorIGV4dC9zb2x2X3hmb3Blbl9mYWxsYmFja19mb3BlbmNvb2tpZS5jIHwgMTI0ICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKworIGV4dC9zb2x2X3hmb3Blbl9mYWxsYmFja19mb3BlbmNvb2tpZS5oIHwgIDI4ICsrKysrKysrCisgNCBmaWxlcyBjaGFuZ2VkLCAxNjUgaW5zZXJ0aW9ucygrKSwgNCBkZWxldGlvbnMoLSkKKyBjcmVhdGUgbW9kZSAxMDA2NDQgZXh0L3NvbHZfeGZvcGVuX2ZhbGxiYWNrX2ZvcGVuY29va2llLmMKKyBjcmVhdGUgbW9kZSAxMDA2NDQgZXh0L3NvbHZfeGZvcGVuX2ZhbGxiYWNrX2ZvcGVuY29va2llLmgKKworZGlmZiAtLWdpdCBhL2V4dC9DTWFrZUxpc3RzLnR4dCBiL2V4dC9DTWFrZUxpc3RzLnR4dAoraW5kZXggYWQ1MjQ5NS4uNGYyODJjZSAxMDA2NDQKKy0tLSBhL2V4dC9DTWFrZUxpc3RzLnR4dAorKysrIGIvZXh0L0NNYWtlTGlzdHMudHh0CitAQCAtNCw2ICs0LDEzIEBAIFNFVCAobGlic29sdmV4dF9TUkNTCisgU0VUIChsaWJzb2x2ZXh0X0hFQURFUlMKKyAgICAgdG9vbHNfdXRpbC5oIHNvbHZfeGZvcGVuLmggdGVzdGNhc2UuaCkKKyAKKytJRiAoTk9UIEhBVkVfRk9QRU5DT09LSUUgQU5EIE5PVCBIQVZFX0ZVTk9QRU4pCisrICAgIFNFVCAobGlic29sdmV4dF9TUkNTICR7bGlic29sdmV4dF9TUkNTfQorKyAgICAgICAgc29sdl94Zm9wZW5fZmFsbGJhY2tfZm9wZW5jb29raWUuYykKKysgICAgU0VUIChsaWJzb2x2ZXh0X0hFQURFUlMgJHtsaWJzb2x2ZXh0X0hFQURFUlN9CisrICAgICAgICBzb2x2X3hmb3Blbl9mYWxsYmFja19mb3BlbmNvb2tpZS5oKQorK0VORElGIChOT1QgSEFWRV9GT1BFTkNPT0tJRSBBTkQgTk9UIEhBVkVfRlVOT1BFTikKKysKKyBJRiAoRU5BQkxFX1JQTURCKQorICAgICBTRVQgKGxpYnNvbHZleHRfU1JDUyAke2xpYnNvbHZleHRfU1JDU30KKyAgICAgICAgIHBvb2xfZmlsZWNvbmZsaWN0cy5jIHJlcG9fcnBtZGIuYykKK2RpZmYgLS1naXQgYS9leHQvc29sdl94Zm9wZW4uYyBiL2V4dC9zb2x2X3hmb3Blbi5jCitpbmRleCBiMDQyMWJmLi4zMTM0NWRkIDEwMDY0NAorLS0tIGEvZXh0L3NvbHZfeGZvcGVuLmMKKysrKyBiL2V4dC9zb2x2X3hmb3Blbi5jCitAQCAtMTMsNiArMTMsMTAgQEAKKyAjaW5jbHVkZSA8emxpYi5oPgorICNpbmNsdWRlIDxmY250bC5oPgorIAorKyNpZiAhZGVmaW5lZChIQVZFX0ZVTk9QRU4pICYmICFkZWZpbmVkKEhBVkVfRk9QRU5DT09LSUUpCisrI2luY2x1ZGUgInNvbHZfeGZvcGVuX2ZhbGxiYWNrX2ZvcGVuY29va2llLmgiCisrI2VuZGlmCisrCisgI2luY2x1ZGUgInNvbHZfeGZvcGVuLmgiCisgI2luY2x1ZGUgInV0aWwuaCIKKyAKK0BAIC0zOSw3ICs0Myw3IEBAIHN0YXRpYyBGSUxFICpjb29raWVvcGVuKHZvaWQgKmNvb2tpZSwgY29uc3QgY2hhciAqbW9kZSwKKyAJc3NpemVfdCAoKmN3cml0ZSkodm9pZCAqLCBjb25zdCBjaGFyICosIHNpemVfdCksCisgCWludCAoKmNjbG9zZSkodm9pZCAqKSkKKyB7CistI2lmZGVmIEhBVkVfRlVOT1BFTgorKyNpZiBkZWZpbmVkKEhBVkVfRlVOT1BFTikgJiYgIWRlZmluZWQoSEFWRV9GT1BFTkNPT0tJRSkKKyAgIGlmICghY29va2llKQorICAgICByZXR1cm4gMDsKKyAgIHJldHVybiBmdW5vcGVuKGNvb2tpZSwKK0BAIC00OCw3ICs1Miw3IEBAIHN0YXRpYyBGSUxFICpjb29raWVvcGVuKHZvaWQgKmNvb2tpZSwgY29uc3QgY2hhciAqbW9kZSwKKyAgICAgICAoZnBvc190ICgqKSh2b2lkICosIGZwb3NfdCwgaW50KSlOVUxMLAkJCQkJLyogc2Vla2ZuICovCisgICAgICAgY2Nsb3NlCisgICAgICAgKTsKKy0jZWxpZiBkZWZpbmVkKEhBVkVfRk9QRU5DT09LSUUpCisrI2Vsc2UKKyAgIGNvb2tpZV9pb19mdW5jdGlvbnNfdCBjaW87CisgCisgICBpZiAoIWNvb2tpZSkKK0BAIC02MCw4ICs2NCw2IEBAIHN0YXRpYyBGSUxFICpjb29raWVvcGVuKHZvaWQgKmNvb2tpZSwgY29uc3QgY2hhciAqbW9kZSwKKyAgICAgY2lvLndyaXRlID0gY3dyaXRlOworICAgY2lvLmNsb3NlID0gY2Nsb3NlOworICAgcmV0dXJuICBmb3BlbmNvb2tpZShjb29raWUsICptb2RlID09ICd3JyA/ICJ3IiA6ICJyIiwgY2lvKTsKKy0jZWxzZQorLSMgZXJyb3IgTmVlZCB0byBpbXBsZW1lbnQgY3VzdG9tIEkvTworICNlbmRpZgorIH0KKyAKK2RpZmYgLS1naXQgYS9leHQvc29sdl94Zm9wZW5fZmFsbGJhY2tfZm9wZW5jb29raWUuYyBiL2V4dC9zb2x2X3hmb3Blbl9mYWxsYmFja19mb3BlbmNvb2tpZS5jCituZXcgZmlsZSBtb2RlIDEwMDY0NAoraW5kZXggMDAwMDAwMC4uODk0MjZhOQorLS0tIC9kZXYvbnVsbAorKysrIGIvZXh0L3NvbHZfeGZvcGVuX2ZhbGxiYWNrX2ZvcGVuY29va2llLmMKK0BAIC0wLDAgKzEsMTI0IEBACisrLyoKKysgKglQcm92aWRlcyBhIHZlcnkgbGltaXRlZCBmb3BlbmNvb2tpZSgpIGZvciBlbnZpcm9ubWVudHMgd2l0aCBhIGxpYmMKKysgKgl0aGF0IGxhY2tzIGl0LgorKyAqCisrICoJQXV0aG9yczogemhhc2hhICYgbnN6CisrICoJTW9kaWZpZWQgZm9yIGxpYnNvbHYgYnkgTmVhbCBHb21wYQorKyAqCisrICoJVGhpcyBwcm9ncmFtIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBCU0QgbGljZW5zZSwgcmVhZCBMSUNFTlNFLkJTRAorKyAqCWZvciBmdXJ0aGVyIGluZm9ybWF0aW9uLgorKyAqCisrICovCisrCisrI2RlZmluZSBfTEFSR0VGSUxFNjRfU09VUkNFIDEKKysjaW5jbHVkZSA8cHRocmVhZC5oPgorKyNpbmNsdWRlIDxzdGRpby5oPgorKyNpbmNsdWRlIDxzdGRsaWIuaD4KKysjaW5jbHVkZSA8dW5pc3RkLmg+CisrI2luY2x1ZGUgPGZjbnRsLmg+CisrI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorKyNpbmNsdWRlIDxlcnJuby5oPgorKyNpbmNsdWRlICJzb2x2X3hmb3Blbl9mYWxsYmFja19mb3BlbmNvb2tpZS5oIgorKworK2V4dGVybiBpbnQgcGlwZTIoaW50WzJdLCBpbnQpOworKworK3N0cnVjdCBjdHggeworKyAgICBpbnQgZmQ7CisrICAgIHZvaWQgKmNvb2tpZTsKKysgICAgc3RydWN0IGNvb2tpZV9pb19mdW5jdGlvbnNfdCBpbzsKKysgICAgY2hhciBidWZbMTAyNF07CisrfTsKKysKKytzdGF0aWMgdm9pZCAqcHJveHkodm9pZCAqYXJnKQorK3sKKysgICAgc3RydWN0IGN0eCAqY3R4ID0gYXJnOworKyAgICBzc2l6ZV90IHI7CisrICAgIHNpemVfdCBuLCBrOworKworKyAgICBwdGhyZWFkX2RldGFjaChwdGhyZWFkX3NlbGYoKSk7CisrCisrICAgIHdoaWxlICgxKSB7CisrICAgICAgICByID0gY3R4LT5pby5yZWFkID8KKysgICAgICAgICAgICAoY3R4LT5pby5yZWFkKShjdHgtPmNvb2tpZSwgY3R4LT5idWYsIHNpemVvZihjdHgtPmJ1ZikpIDoKKysgICAgICAgICAgICByZWFkKGN0eC0+ZmQsIGN0eC0+YnVmLCBzaXplb2YoY3R4LT5idWYpKTsKKysgICAgICAgIGlmIChyIDwgMCkgeworKyAgICAgICAgICAgIGlmIChlcnJubyAhPSBFSU5UUikgeyBicmVhazsgfQorKyAgICAgICAgICAgIGNvbnRpbnVlOworKyAgICAgICAgfQorKyAgICAgICAgaWYgKHIgPT0gMCkgeyBicmVhazsgfQorKworKyAgICAgICAgbiA9IHIsIGsgPSAwOworKyAgICAgICAgd2hpbGUgKG4gPiAwKSB7CisrICAgICAgICAgICAgciA9IGN0eC0+aW8ud3JpdGUgPworKyAgICAgICAgICAgICAgICAoY3R4LT5pby53cml0ZSkoY3R4LT5jb29raWUsIGN0eC0+YnVmICsgaywgbikgOgorKyAgICAgICAgICAgICAgICB3cml0ZShjdHgtPmZkLCBjdHgtPmJ1ZiArIGssIG4pOworKyAgICAgICAgICAgIGlmIChyIDwgMCkgeworKyAgICAgICAgICAgICAgICBpZiAoZXJybm8gIT0gRUlOVFIpIHsgYnJlYWs7IH0KKysgICAgICAgICAgICAgICAgY29udGludWU7CisrICAgICAgICAgICAgfQorKyAgICAgICAgICAgIGlmIChyID09IDApIHsgYnJlYWs7IH0KKysKKysgICAgICAgICAgICBuIC09IHIsIGsgKz0gcjsKKysgICAgICAgIH0KKysgICAgICAgIGlmIChuID4gMCkgeyBicmVhazsgfQorKyAgICB9CisrCisrICAgIGlmIChjdHgtPmlvLmNsb3NlKSB7IChjdHgtPmlvLmNsb3NlKShjdHgtPmNvb2tpZSk7IH0KKysgICAgY2xvc2UoY3R4LT5mZCk7CisrICAgIHJldHVybiBOVUxMOworK30KKysKKytGSUxFICpmb3BlbmNvb2tpZSh2b2lkICpjb29raWUsIGNvbnN0IGNoYXIgKm1vZGUsIHN0cnVjdCBjb29raWVfaW9fZnVuY3Rpb25zX3QgaW8pCisreworKyAgICBzdHJ1Y3QgY3R4ICpjdHggPSBOVUxMOworKyAgICBpbnQgcmQgPSAwLCB3ciA9IDA7CisrICAgIGludCBwWzJdID0geyAtMSwgLTEgfTsKKysgICAgRklMRSAqZiA9IE5VTEw7CisrICAgIHB0aHJlYWRfdCBkdW1teTsKKysKKysgICAgc3dpdGNoIChtb2RlWzBdKSB7CisrICAgICAgICBjYXNlICdhJzoKKysgICAgICAgIGNhc2UgJ3cnOiB3ciA9IDE7IGJyZWFrOworKyAgICAgICAgY2FzZSAncic6IHJkID0gMTsgYnJlYWs7CisrICAgICAgICBkZWZhdWx0OgorKyAgICAgICAgICAgIGVycm5vID0gRUlOVkFMOworKyAgICAgICAgICAgIHJldHVybiBOVUxMOworKyAgICB9CisrICAgIHN3aXRjaCAobW9kZVsxXSkgeworKyAgICAgICAgY2FzZSAnXDAnOiBicmVhazsKKysgICAgICAgIGNhc2UgJysnOgorKyAgICAgICAgICAgIGlmIChtb2RlWzJdID09ICdcMCcpIHsKKysgICAgICAgICAgICAgICAgZXJybm8gPSBFTk9UU1VQOworKyAgICAgICAgICAgICAgICByZXR1cm4gTlVMTDsKKysgICAgICAgICAgICB9CisrICAgICAgICBkZWZhdWx0OgorKyAgICAgICAgICAgIGVycm5vID0gRUlOVkFMOworKyAgICAgICAgICAgIHJldHVybiBOVUxMOworKyAgICB9CisrICAgIGlmIChpby5zZWVrKSB7CisrICAgICAgICBlcnJubyA9IEVOT1RTVVA7CisrICAgICAgICByZXR1cm4gTlVMTDsKKysgICAgfQorKworKyAgICBjdHggPSBtYWxsb2Moc2l6ZW9mKCpjdHgpKTsKKysgICAgaWYgKCFjdHgpIHsgcmV0dXJuIE5VTEw7IH0KKysgICAgaWYgKHBpcGUyKHAsIE9fQ0xPRVhFQykgIT0gMCkgeyBnb3RvIGVycjsgfQorKyAgICBpZiAoKGYgPSBmZG9wZW4ocFt3cl0sIG1vZGUpKSA9PSBOVUxMKSB7IGdvdG8gZXJyOyB9CisrICAgIHBbd3JdID0gLTE7CisrICAgIGN0eC0+ZmQgPSBwW3JkXTsKKysgICAgY3R4LT5jb29raWUgPSBjb29raWU7CisrICAgIGN0eC0+aW8ucmVhZCA9IHJkID8gaW8ucmVhZCA6IE5VTEw7CisrICAgIGN0eC0+aW8ud3JpdGUgPSB3ciA/IGlvLndyaXRlIDogTlVMTDsKKysgICAgY3R4LT5pby5zZWVrID0gTlVMTDsKKysgICAgY3R4LT5pby5jbG9zZSA9IGlvLmNsb3NlOworKyAgICBpZiAocHRocmVhZF9jcmVhdGUoJmR1bW15LCBOVUxMLCBwcm94eSwgY3R4KSAhPSAwKSB7IGdvdG8gZXJyOyB9CisrCisrICAgIHJldHVybiBmOworKworK2VycjoKKysgICAgaWYgKHBbMF0gPj0gMCkgeyBjbG9zZShwWzBdKTsgfQorKyAgICBpZiAocFsxXSA+PSAwKSB7IGNsb3NlKHBbMV0pOyB9CisrICAgIGlmIChmKSB7IGZjbG9zZShmKTsgfQorKyAgICBmcmVlKGN0eCk7CisrICAgIHJldHVybiBOVUxMOworK30KK2RpZmYgLS1naXQgYS9leHQvc29sdl94Zm9wZW5fZmFsbGJhY2tfZm9wZW5jb29raWUuaCBiL2V4dC9zb2x2X3hmb3Blbl9mYWxsYmFja19mb3BlbmNvb2tpZS5oCituZXcgZmlsZSBtb2RlIDEwMDY0NAoraW5kZXggMDAwMDAwMC4uNzIyM2UzZgorLS0tIC9kZXYvbnVsbAorKysrIGIvZXh0L3NvbHZfeGZvcGVuX2ZhbGxiYWNrX2ZvcGVuY29va2llLmgKK0BAIC0wLDAgKzEsMjggQEAKKysvKgorKyAqCVByb3ZpZGVzIGEgdmVyeSBsaW1pdGVkIGZvcGVuY29va2llKCkgZm9yIGVudmlyb25tZW50cyB3aXRoIGEgbGliYworKyAqCXRoYXQgbGFja3MgaXQuCisrICoKKysgKglBdXRob3JzOiB6aGFzaGEgJiBuc3oKKysgKglNb2RpZmllZCBmb3IgbGlic29sdiBieSBOZWFsIEdvbXBhCisrICoKKysgKglUaGlzIHByb2dyYW0gaXMgbGljZW5zZWQgdW5kZXIgdGhlIEJTRCBsaWNlbnNlLCByZWFkIExJQ0VOU0UuQlNECisrICoJZm9yIGZ1cnRoZXIgaW5mb3JtYXRpb24uCisrICoKKysgKi8KKysKKysjaWZuZGVmIFNPTFZfWEZPUEVOX0ZBTExCQUNLX0ZPUEVOQ09PS0lFX0gKKysjZGVmaW5lIFNPTFZfWEZPUEVOX0ZBTExCQUNLX0ZPUEVOQ09PS0lFX0gKKysKKysjaW5jbHVkZSA8c3RkaW8uaD4KKysjaW5jbHVkZSA8c3RkaW50Lmg+CisrCisrdHlwZWRlZiBzdHJ1Y3QgY29va2llX2lvX2Z1bmN0aW9uc190IHsKKysgICAgc3NpemVfdCAoKnJlYWQpKHZvaWQgKiwgY2hhciAqLCBzaXplX3QpOworKyAgICBzc2l6ZV90ICgqd3JpdGUpKHZvaWQgKiwgY29uc3QgY2hhciAqLCBzaXplX3QpOworKyAgICBpbnQgKCpzZWVrKSh2b2lkICosIG9mZjY0X3QsIGludCk7CisrICAgIGludCAoKmNsb3NlKSh2b2lkICopOworK30gY29va2llX2lvX2Z1bmN0aW9uc190OworKworK0ZJTEUgKmZvcGVuY29va2llKHZvaWQgKmNvb2tpZSwgY29uc3QgY2hhciAqbW9kZSwgc3RydWN0IGNvb2tpZV9pb19mdW5jdGlvbnNfdCBpbyk7CisrCisrI2VuZGlmCistLSAKKzIuNC4wCisKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbGlic29sdi9saWJzb2x2LzAwMDEtQ01ha2VMaXN0cy50eHQtZml4LU1BTl9JTlNUQUxMX0RJUi5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbGlic29sdi9saWJzb2x2LzAwMDEtQ01ha2VMaXN0cy50eHQtZml4LU1BTl9JTlNUQUxMX0RJUi5wYXRjaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTcyZWNjOS4uMDAwMDAwMAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2xpYnNvbHYvbGlic29sdi8wMDAxLUNNYWtlTGlzdHMudHh0LWZpeC1NQU5fSU5TVEFMTF9ESVIucGF0Y2gKKysrIC9kZXYvbnVsbApAQCAtMSwzNyArMCwwIEBACi1Gcm9tIDI4MGYwZDM3YzY0MmQ2OGJhZDJhMmU0OWVmNDM3OTUzNDc0ZDk5ZTYgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCi1Gcm9tOiBSb2JlcnQgWWFuZyA8bGllemhpLnlhbmdAd2luZHJpdmVyLmNvbT4KLURhdGU6IFdlZCwgNiBBcHIgMjAxNiAyMzoxNTowMiAtMDcwMAotU3ViamVjdDogW1BBVENIXSBDTWFrZUxpc3RzLnR4dDogZml4IE1BTl9JTlNUQUxMX0RJUgotCi1JdCBjaGVja3MgJHtDTUFLRV9JTlNUQUxMX1BSRUZJWH0vc2hhcmUvbWFuIHdoZW4gY29uZmlndXJlLCBidXQgaXQgbWF5Ci1ub3QgZXhpc3Qgd2hlbiBjcm9zc2NvbXBpbGUsIGZvciBleGFtcGxlLCB3aGVuIENNQUtFX0lOU1RBTExfUFJFRklYPSIvIiwKLWl0IGlzIE9LLCBidXQgd2hlbiBDTUFLRV9JTlNUQUxMX1BSRUZJWD0iL3NvbWUvcGF0aC9lbHNlIiwgdGhlbiBpdAotZG9lc24ndCBleGlzdCwgYW5kIHRoZSBtYW4gZGlyIHdvdWxkIGJlIHNldCB0byAiL3Vzci9tYW4iIHdoaWNoIGlzCi1pbmNvcnJlY3QuCi0KLVVwc3RyZWFtLVN0YXR1czogUGVuZGluZwotCi1TaWduZWQtb2ZmLWJ5OiBSb2JlcnQgWWFuZyA8bGllemhpLnlhbmdAd2luZHJpdmVyLmNvbT4KLS0tLQotIENNYWtlTGlzdHMudHh0IHwgNSArLS0tLQotIDEgZmlsZSBjaGFuZ2VkLCAxIGluc2VydGlvbigrKSwgNCBkZWxldGlvbnMoLSkKLQotZGlmZiAtLWdpdCBhL0NNYWtlTGlzdHMudHh0IGIvQ01ha2VMaXN0cy50eHQKLWluZGV4IGZkMTQyNmIuLjc0N2RiMjIgMTAwNjQ0Ci0tLS0gYS9DTWFrZUxpc3RzLnR4dAotKysrIGIvQ01ha2VMaXN0cy50eHQKLUBAIC01NywxMCArNTcsNyBAQCBlbHNlIChERUZJTkVEIElOQ0xVREUpCi0gRU5ESUYgKERFRklORUQgIElOQ0xVREUpCi0gTUVTU0FHRSAoU1RBVFVTICJIZWFkZXIgZmlsZXMgd2lsbCBiZSBpbnN0YWxsZWQgaW4gJHtJTkNMVURFX0lOU1RBTExfRElSfSIpCi0gU0VUIChCSU5fSU5TVEFMTF9ESVIgIiR7Q01BS0VfSU5TVEFMTF9QUkVGSVh9L2JpbiIpCi0tU0VUIChNQU5fSU5TVEFMTF9ESVIgIiR7Q01BS0VfSU5TVEFMTF9QUkVGSVh9L21hbiIpCi0tSUYgKElTX0RJUkVDVE9SWSAiJHtDTUFLRV9JTlNUQUxMX1BSRUZJWH0vc2hhcmUvbWFuIiAgQU5EIE5PVCBJU19ESVJFQ1RPUlkgIiR7Q01BS0VfSU5TVEFMTF9QUkVGSVh9L21hbiIpCi0tICBTRVQgKE1BTl9JTlNUQUxMX0RJUiAiJHtDTUFLRV9JTlNUQUxMX1BSRUZJWH0vc2hhcmUvbWFuIikKLS1FTkRJRiAoSVNfRElSRUNUT1JZICIke0NNQUtFX0lOU1RBTExfUFJFRklYfS9zaGFyZS9tYW4iICBBTkQgTk9UIElTX0RJUkVDVE9SWSAiJHtDTUFLRV9JTlNUQUxMX1BSRUZJWH0vbWFuIikKLStTRVQgKE1BTl9JTlNUQUxMX0RJUiAiJHtDTUFLRV9JTlNUQUxMX1BSRUZJWH0vc2hhcmUvbWFuIikKLSBNRVNTQUdFKFNUQVRVUyAiTWFuIHBhZ2VzIHdpbGwgYmUgaW5zdGFsbGVkIGluICR7TUFOX0lOU1RBTExfRElSfSIpCi0gCi0gIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLS0tIAotMi43LjQKLQpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9saWJzb2x2L2xpYnNvbHZfMC42LjIzLmJiIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9saWJzb2x2L2xpYnNvbHZfMC42LjIzLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYzZjNkNmUKLS0tIC9kZXYvbnVsbAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2xpYnNvbHYvbGlic29sdl8wLjYuMjMuYmIKQEAgLTAsMCArMSwyOSBAQAorU1VNTUFSWSA9ICJMaWJyYXJ5IGZvciBzb2x2aW5nIHBhY2thZ2VzIGFuZCByZWFkaW5nIHJlcG9zaXRvcmllcyIKK0hPTUVQQUdFID0gImh0dHBzOi8vZ2l0aHViLmNvbS9vcGVuU1VTRS9saWJzb2x2IgorQlVHVFJBQ0tFUiA9ICJodHRwczovL2dpdGh1Yi5jb20vb3BlblNVU0UvbGlic29sdi9pc3N1ZXMiCitTRUNUSU9OID0gImRldmVsIgorTElDRU5TRSA9ICJCU0QtMy1DbGF1c2UiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9MSUNFTlNFLkJTRDttZDU9NjIyNzJiZDExYzk3Mzk2ZDRhYWYxYzQxYmMxMWY3ZDgiCisKK0RFUEVORFMgPSAiZXhwYXQgemxpYiIKKworU1JDX1VSSSA9ICJnaXQ6Ly9naXRodWIuY29tL29wZW5TVVNFL2xpYnNvbHYuZ2l0IFwKKyAgICAgICAgICAiCitTUkNfVVJJX2FwcGVuZF9saWJjLW11c2wgPSAiIGZpbGU6Ly8wMDAxLUFkZC1mYWxsYmFjay1mb3BlbmNvb2tpZS1pbXBsZW1lbnRhdGlvbi5wYXRjaCIKKworU1JDUkVWID0gImY2NTRjOGNmYTUyNDI3ZWQ0MmQ3MTQyZTU4NDUyZGFlMDhjMGMyZDAiCitVUFNUUkVBTV9DSEVDS19HSVRUQUdSRUdFWCA9ICIoP1A8cHZlcj5cZCsoXC5cZCspKykiCisKK1MgPSAiJHtXT1JLRElSfS9naXQiCisKK2luaGVyaXQgY21ha2UKKworRVhUUkFfT0VDTUFLRSA9ICItRExJQj0ke2Jhc2VsaWJ9IC1ETVVMVElfU0VNQU5USUNTPU9OIgorCitQQUNLQUdFUyA9KyAiJHtQTn0tdG9vbHMgJHtQTn1leHQiCisKK0ZJTEVTXyR7UE59LWRldiArPSAiJHtkYXRhZGlyfS9jbWFrZS9Nb2R1bGVzL0ZpbmRMaWJTb2x2LmNtYWtlIgorRklMRVNfJHtQTn0tdG9vbHMgPSAiJHtiaW5kaXJ9LyoiCitGSUxFU18ke1BOfWV4dCA9ICIke2xpYmRpcn0vJHtQTn1leHQuc28uKiIKKworQkJDTEFTU0VYVEVORCA9KyAibmF0aXZlIG5hdGl2ZXNkayIKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbGlic29sdi9saWJzb2x2X2dpdC5iYiBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbGlic29sdi9saWJzb2x2X2dpdC5iYgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZmI4MWM4YS4uMDAwMDAwMAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2xpYnNvbHYvbGlic29sdl9naXQuYmIKKysrIC9kZXYvbnVsbApAQCAtMSwzMCArMCwwIEBACi1TVU1NQVJZID0gIkxpYnJhcnkgZm9yIHNvbHZpbmcgcGFja2FnZXMgYW5kIHJlYWRpbmcgcmVwb3NpdG9yaWVzIgotSE9NRVBBR0UgPSAiaHR0cHM6Ly9naXRodWIuY29tL29wZW5TVVNFL2xpYnNvbHYiCi1CVUdUUkFDS0VSID0gImh0dHBzOi8vZ2l0aHViLmNvbS9vcGVuU1VTRS9saWJzb2x2L2lzc3VlcyIKLVNFQ1RJT04gPSAiZGV2ZWwiCi1MSUNFTlNFID0gIkJTRC0zLUNsYXVzZSIKLUxJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0xJQ0VOU0UuQlNEO21kNT02MjI3MmJkMTFjOTczOTZkNGFhZjFjNDFiYzExZjdkOCIKLQotREVQRU5EUyA9ICJleHBhdCB6bGliIgotCi1QViA9ICIwLjYuMTkiCi0KLVNSQ19VUkkgPSAiZ2l0Oi8vZ2l0aHViLmNvbS9vcGVuU1VTRS9saWJzb2x2LmdpdCBcCi0gICAgICAgICAgIGZpbGU6Ly8wMDAxLUNNYWtlTGlzdHMudHh0LWZpeC1NQU5fSU5TVEFMTF9ESVIucGF0Y2ggXAotIgotU1JDUkVWID0gIjRjNWFmNDAxYTg5ODU4ZDRjZWJiZmU0MGM1OWEwMDMxZmY5ZGI1YjAiCi1VUFNUUkVBTV9DSEVDS19HSVRUQUdSRUdFWCA9ICIoP1A8cHZlcj5cZCsoXC5cZCspKykiCi0KLVMgPSAiJHtXT1JLRElSfS9naXQiCi0KLWluaGVyaXQgY21ha2UKLQotRVhUUkFfT0VDTUFLRSA9ICItRExJQj0ke2Jhc2VsaWJ9IgotCi1QQUNLQUdFUyA9KyAiJHtQTn0tdG9vbHMgJHtQTn1leHQiCi0KLUZJTEVTXyR7UE59LWRldiArPSAiJHtkYXRhZGlyfS9jbWFrZS9Nb2R1bGVzL0ZpbmRMaWJTb2x2LmNtYWtlIgotRklMRVNfJHtQTn0tdG9vbHMgPSAiJHtiaW5kaXJ9LyoiCi1GSUxFU18ke1BOfWV4dCA9ICIke2xpYmRpcn0vJHtQTn1leHQuc28uKiIKLQotQkJDTEFTU0VYVEVORCA9KyAibmF0aXZlIG5hdGl2ZXNkayIKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbGlidXNlci9saWJ1c2VyLzAwMDEtbW9kdWxlcy1maWxlcy5jLXBhcnNlX2ZpZWxkLWZpeC1zdHJpbmctZm9ybWF0aW5nLWluLS5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbGlidXNlci9saWJ1c2VyLzAwMDEtbW9kdWxlcy1maWxlcy5jLXBhcnNlX2ZpZWxkLWZpeC1zdHJpbmctZm9ybWF0aW5nLWluLS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43YzQ3ZGYyCi0tLSAvZGV2L251bGwKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9saWJ1c2VyL2xpYnVzZXIvMDAwMS1tb2R1bGVzLWZpbGVzLmMtcGFyc2VfZmllbGQtZml4LXN0cmluZy1mb3JtYXRpbmctaW4tLnBhdGNoCkBAIC0wLDAgKzEsMzQgQEAKK0Zyb20gYTQ4NTc5MTFlY2U1ZWJmY2RlZjQyYWVlNGMwNzBlYjIxNmYzOTU5NyBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206ID0/VVRGLTg/cT9Bbj1DMz1BRGJhbD0yMExpbT1DMz1CM24/PSA8YW5pYmFsLmxpbW9uQGxpbnV4LmludGVsLmNvbT4KK0RhdGU6IEZyaSwgMTMgTWF5IDIwMTYgMTE6NDA6MTMgLTA1MDAKK1N1YmplY3Q6IFtQQVRDSF0gbW9kdWxlcy9maWxlcy5jOiBwYXJzZV9maWVsZCBmaXggc3RyaW5nIGZvcm1hdGluZyBpbgorIGdfd2FybmluZ3MKK01JTUUtVmVyc2lvbjogMS4wCitDb250ZW50LVR5cGU6IHRleHQvcGxhaW47IGNoYXJzZXQ9VVRGLTgKK0NvbnRlbnQtVHJhbnNmZXItRW5jb2Rpbmc6IDhiaXQKKworW1lPQ1RPICM5NTQ3XQorCitTaWduZWQtb2ZmLWJ5OiBBbsOtYmFsIExpbcOzbiA8YW5pYmFsLmxpbW9uQGxpbnV4LmludGVsLmNvbT4KKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCistLS0KKyBtb2R1bGVzL2ZpbGVzLmMgfCAyICstCisgMSBmaWxlIGNoYW5nZWQsIDEgaW5zZXJ0aW9uKCspLCAxIGRlbGV0aW9uKC0pCisKK2RpZmYgLS1naXQgYS9tb2R1bGVzL2ZpbGVzLmMgYi9tb2R1bGVzL2ZpbGVzLmMKK2luZGV4IDRlZjBhNTcuLjM1ZWFmYzkgMTAwNjQ0CistLS0gYS9tb2R1bGVzL2ZpbGVzLmMKKysrKyBiL21vZHVsZXMvZmlsZXMuYworQEAgLTUzNCw3ICs1MzQsNyBAQCBwYXJzZV9maWVsZChjb25zdCBzdHJ1Y3QgZm9ybWF0X3NwZWNpZmllciAqZm9ybWF0LCBHVmFsdWUgKnZhbHVlLAorIAkJCQkJCSBzdHJpbmcsICZlcnIpOworIAlpZiAocmV0ID09IEZBTFNFKSB7CisgCQlnX2Fzc2VydChlcnIgIT0gTlVMTCk7CistCQlnX3dhcm5pbmcobHVfc3RyZXJyb3IoZXJyKSk7CisrCQlnX3dhcm5pbmcobHVfc3RyZXJyb3IoZXJyKSwgTlVMTCk7CisgCQlsdV9lcnJvcl9mcmVlKCZlcnIpOworIAl9CisgCXJldHVybiByZXQ7CistLSAKKzIuMS40CisKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbGlidXNlci9saWJ1c2VyXzAuNjIuYmIgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2xpYnVzZXIvbGlidXNlcl8wLjYyLmJiCmluZGV4IDEzNjlhZTguLjNkMGI1MTYgMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbGlidXNlci9saWJ1c2VyXzAuNjIuYmIKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9saWJ1c2VyL2xpYnVzZXJfMC42Mi5iYgpAQCAtMTQsMTYgKzE0LDE3IEBACiBTUkNfVVJJID0gImh0dHBzOi8vZmVkb3JhaG9zdGVkLm9yZy9yZWxlYXNlcy9sL2kvbGlidXNlci9saWJ1c2VyLSR7UFZ9LnRhci54eiBcCiAgICAgICAgICAgIGZpbGU6Ly8wMDAxLUNoZWNrLWZvci1pc3NldHVnaWQucGF0Y2ggXAogICAgICAgICAgICBmaWxlOi8vMDAwMi1yZW1vdmUtdW51c2VkLWV4ZWNpbmZvLmgucGF0Y2ggXAotICAgICAgICAgICIKKyAgICAgICAgICAgZmlsZTovLzAwMDEtbW9kdWxlcy1maWxlcy5jLXBhcnNlX2ZpZWxkLWZpeC1zdHJpbmctZm9ybWF0aW5nLWluLS5wYXRjaCBcCisgICAgICAgICAgICIKIAogU1JDX1VSSVttZDVzdW1dID0gIjYzZTVlNWM1NTFlOTlkYzUzMDJiNDBiODBiZDZkNGYyIgogU1JDX1VSSVtzaGEyNTZzdW1dID0gImE1OGZmNGZhYmIwMWEyNTA0M2IxNDIxODVhMzNlZWVhOTYxMTA5ZGQ2MGQ0YjQwYjZhOWRmNGZhM2NhY2UyMGIiCiAKLURFUEVORFMgPSAicG9wdCBsaWJwYW0gZ2xpYi0yLjAgZG9jYm9vay11dGlscy1uYXRpdmUgbGludXhkb2MtdG9vbHMtbmF0aXZlIHB5dGhvbiIKK0RFUEVORFMgPSAicG9wdCBsaWJwYW0gZ2xpYi0yLjAgZG9jYm9vay11dGlscy1uYXRpdmUgbGludXhkb2MtdG9vbHMtbmF0aXZlIHB5dGhvbjMiCiAKLWluaGVyaXQgYXV0b3Rvb2xzIGdldHRleHQgcHl0aG9ubmF0aXZlIHB5dGhvbi1kaXIgcGtnY29uZmlnCitpbmhlcml0IGF1dG90b29scyBnZXR0ZXh0IHB5dGhvbjNuYXRpdmUgcHl0aG9uMy1kaXIgcGtnY29uZmlnIGd0ay1kb2MKIAotRVhUUkFfT0VNQUtFID0gIlBZVEhPTl9DUFBGTEFHUz0tSSR7U1RBR0lOR19JTkNESVJ9LyR7UFlUSE9OX0RJUn0iCitFWFRSQV9PRU1BS0UgPSAiUFlUSE9OX0NQUEZMQUdTPS1JJHtTVEFHSU5HX0lOQ0RJUn0vJHtQWVRIT05fRElSfSR7UFlUSE9OX0FCSX0iCiAKIFBBQ0tBR0VTICs9ICIke1BOfS1weXRob24gIgogCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2xpZ2h0dHBkL2xpZ2h0dHBkLzAwMDEtVXNlLXBrZy1jb25maWctZm9yLXBjcmUtZGVwZW5kZW5jeS1pbnN0ZWFkLW9mLWNvbmZpZy5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbGlnaHR0cGQvbGlnaHR0cGQvMDAwMS1Vc2UtcGtnLWNvbmZpZy1mb3ItcGNyZS1kZXBlbmRlbmN5LWluc3RlYWQtb2YtY29uZmlnLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI4YzdmMzcKLS0tIC9kZXYvbnVsbAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2xpZ2h0dHBkL2xpZ2h0dHBkLzAwMDEtVXNlLXBrZy1jb25maWctZm9yLXBjcmUtZGVwZW5kZW5jeS1pbnN0ZWFkLW9mLWNvbmZpZy5wYXRjaApAQCAtMCwwICsxLDM3IEBACitGcm9tIGU3YThjOTI1YjkzMTZhNzJiZGM4ZjMyNzg5ZmZlNTZmZGE1YzQ3ODggTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBBbGV4YW5kZXIgS2FuYXZpbiA8YWxleC5rYW5hdmluQGdtYWlsLmNvbT4KK0RhdGU6IEZyaSwgMjYgQXVnIDIwMTYgMTg6MjA6MzIgKzAzMDAKK1N1YmplY3Q6IFtQQVRDSF0gVXNlIHBrZy1jb25maWcgZm9yIHBjcmUgZGVwZW5kZW5jeSBpbnN0ZWFkIG9mIC1jb25maWcgc2NyaXB0LgorCitSUCAyMDE0LzUvMjIKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworU2lnbmVkLW9mZi1ieTogQWxleGFuZGVyIEthbmF2aW4gPGFsZXgua2FuYXZpbkBnbWFpbC5jb20+CistLS0KKyBjb25maWd1cmUuYWMgfCAxMSArKysrKystLS0tLQorIDEgZmlsZSBjaGFuZ2VkLCA2IGluc2VydGlvbnMoKyksIDUgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9jb25maWd1cmUuYWMgYi9jb25maWd1cmUuYWMKK2luZGV4IDFkMTcyYTEuLmE5MjM2ZGEgMTAwNjQ0CistLS0gYS9jb25maWd1cmUuYWMKKysrKyBiL2NvbmZpZ3VyZS5hYworQEAgLTM4MCwxMSArMzgwLDEyIEBAIGlmIHRlc3QgIiRXSVRIX1BDUkUiICE9ICJubyI7IHRoZW4KKyAJCQlQQ1JFX0xJQj0iLUwkV0lUSF9QQ1JFL2xpYiAtbHBjcmUiCisgCQkJQ1BQRkxBR1M9IiRDUFBGTEFHUyAtSSRXSVRIX1BDUkUvaW5jbHVkZSIKKyAJCWVsc2UKKy0JCQlBQ19QQVRIX1BST0coUENSRUNPTkZJRywgcGNyZS1jb25maWcpCistCQkJaWYgdGVzdCB4IiRQQ1JFQ09ORklHIiAhPSB4OyB0aGVuCistCQkJCVBDUkVfTElCPWAkUENSRUNPTkZJRyAtLWxpYnNgCistCQkJCUNQUEZMQUdTPSIkQ1BQRkxBR1MgYCRQQ1JFQ09ORklHIC0tY2ZsYWdzYCIKKy0JCQlmaQorKwkJCVBLR19DSEVDS19NT0RVTEVTKFBDUkVQS0csIFtsaWJwY3JlXSwgWworKwkJCQlQQ1JFX0xJQj0ke1BDUkVQS0dfTElCU30KKysJCQkJQ1BQRkxBR1M9IiRDUFBGTEFHUyAke1BDUkVQS0dfQ0ZMQUdTfSIKKysJCQldLCBbCisrCQkJCUFDX01TR19FUlJPUihbcGNyZSBwa2djb25maWcgbm90IGZvdW5kLCBpbnN0YWxsIHRoZSBwY3JlLWRldmVsIHBhY2thZ2Ugb3IgYnVpbGQgd2l0aCAtLXdpdGhvdXQtcGNyZV0pCisrCQkJXSkKKyAJCWZpCisgCisgICBpZiB0ZXN0IHgiJFBDUkVfTElCIiAhPSB4OyB0aGVuCistLSAKKzIuOS4zCisKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbGlnaHR0cGQvbGlnaHR0cGQvcGtnY29uZmlnLnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9saWdodHRwZC9saWdodHRwZC9wa2djb25maWcucGF0Y2gKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGUzOTVmOTIuLjAwMDAwMDAKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9saWdodHRwZC9saWdodHRwZC9wa2djb25maWcucGF0Y2gKKysrIC9kZXYvbnVsbApAQCAtMSwzMyArMCwwIEBACi1Vc2UgcGtnLWNvbmZpZyBmb3IgcGNyZSBkZXBlbmRlbmN5IGluc3RlYWQgb2YgLWNvbmZpZyBzY3JpcHQuCi0KLVVwc3RyZWFtLVN0YXR1czogUGVuZGluZwotCi1SUCAyMDE0LzUvMjIKLQotCi1JbmRleDogbGlnaHR0cGQtMS40LjM1L2NvbmZpZ3VyZS5hYwotPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0tIGxpZ2h0dHBkLTEuNC4zNS5vcmlnL2NvbmZpZ3VyZS5hYwkyMDE0LTAzLTA2IDE0OjA4OjAwLjAwMDAwMDAwMCArMDAwMAotKysrIGxpZ2h0dHBkLTEuNC4zNS9jb25maWd1cmUuYWMJMjAxNC0wNS0xMyAxNjo1ODozMC43NTg0NzExNjkgKzAwMDAKLUBAIC0zMDksMTYgKzMwOSwxNCBAQAotIEFDX01TR19SRVNVTFQoWyRXSVRIX1BDUkVdKQotIAotIGlmIHRlc3QgIiRXSVRIX1BDUkUiICE9ICJubyI7IHRoZW4KLS0gIEFDX1BBVEhfUFJPRyhQQ1JFQ09ORklHLCBwY3JlLWNvbmZpZykKLS0KLS0gIGlmIHRlc3QgeCIkUENSRUNPTkZJRyIgIT0geDsgdGhlbgotLSAgICBQQ1JFX0xJQj1gJFBDUkVDT05GSUcgLS1saWJzYAotLSAgICBDUFBGTEFHUz0iJENQUEZMQUdTIGAkUENSRUNPTkZJRyAtLWNmbGFnc2AiCi0rICBQS0dfQ0hFQ0tfTU9EVUxFUyhQQ1JFUEtHLCBbbGlicGNyZV0sIFsKLSsgICAgUENSRV9MSUI9JHtQQ1JFUEtHX0xJQlN9Ci0rICAgIENQUEZMQUdTPSIkQ1BQRkxBR1MgJHtQQ1JFUEtHX0NGTEFHU30iCi0gICAgIEFDX0RFRklORShbSEFWRV9MSUJQQ1JFXSwgWzFdLCBbbGlicGNyZV0pCi0gICAgIEFDX0RFRklORShbSEFWRV9QQ1JFX0hdLCBbMV0sIFtwY3JlLmhdKQotLSAgZWxzZQotKyAgXSwgWwotICAgICAgQUNfTVNHX0VSUk9SKFtwY3JlLWNvbmZpZyBub3QgZm91bmQsIGluc3RhbGwgdGhlIHBjcmUtZGV2ZWwgcGFja2FnZSBvciBidWlsZCB3aXRoIC0td2l0aG91dC1wY3JlXSkKLS0gIGZpCi0rICBdKQotIGZpCi0gCi0gQUNfU1VCU1QoUENSRV9MSUIpCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2xpZ2h0dHBkL2xpZ2h0dHBkXzEuNC4zOS5iYiBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbGlnaHR0cGQvbGlnaHR0cGRfMS40LjM5LmJiCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzNzhhY2NiLi4wMDAwMDAwCi0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbGlnaHR0cGQvbGlnaHR0cGRfMS40LjM5LmJiCisrKyAvZGV2L251bGwKQEAgLTEsNzYgKzAsMCBAQAotU1VNTUFSWSA9ICJMaWdodHdlaWdodCBoaWdoLXBlcmZvcm1hbmNlIHdlYiBzZXJ2ZXIiCi1IT01FUEFHRSA9ICJodHRwOi8vd3d3LmxpZ2h0dHBkLm5ldC8iCi1CVUdUUkFDS0VSID0gImh0dHA6Ly9yZWRtaW5lLmxpZ2h0dHBkLm5ldC9wcm9qZWN0cy9saWdodHRwZC9pc3N1ZXMiCi0KLUxJQ0VOU0UgPSAiQlNEIgotTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9ZTRkYWM1YzZhYjE2OWFhMjEyZmViNTAyODg1M2E1NzkiCi0KLVNFQ1RJT04gPSAibmV0IgotREVQRU5EUyA9ICJ6bGliIGxpYnBjcmUiCi1SREVQRU5EU18ke1BOfSArPSAiIFwKLSAgICAgICAgICAgICAgIGxpZ2h0dHBkLW1vZHVsZS1hY2Nlc3MgXAotICAgICAgICAgICAgICAgbGlnaHR0cGQtbW9kdWxlLWFjY2Vzc2xvZyBcCi0gICAgICAgICAgICAgICBsaWdodHRwZC1tb2R1bGUtaW5kZXhmaWxlIFwKLSAgICAgICAgICAgICAgIGxpZ2h0dHBkLW1vZHVsZS1kaXJsaXN0aW5nIFwKLSAgICAgICAgICAgICAgIGxpZ2h0dHBkLW1vZHVsZS1zdGF0aWNmaWxlIFwKLSIKLQotU1JDX1VSSSA9ICJodHRwOi8vZG93bmxvYWQubGlnaHR0cGQubmV0L2xpZ2h0dHBkL3JlbGVhc2VzLTEuNC54L2xpZ2h0dHBkLSR7UFZ9LnRhci54eiBcCi0gICAgICAgIGZpbGU6Ly9pbmRleC5odG1sLmxpZ2h0dHBkIFwKLSAgICAgICAgZmlsZTovL2xpZ2h0dHBkLmNvbmYgXAotICAgICAgICBmaWxlOi8vbGlnaHR0cGQgXAotICAgICAgICBmaWxlOi8vbGlnaHR0cGQuc2VydmljZSBcCi0gICAgICAgIGZpbGU6Ly9wa2djb25maWcucGF0Y2ggXAotICAgICAgICAiCi0KLVNSQ19VUklbbWQ1c3VtXSA9ICI2M2M3NTYzYmUxYzdhN2E5ODE5YTUxZjA3ZjFhZjhiMiIKLVNSQ19VUklbc2hhMjU2c3VtXSA9ICI3ZWI5YTE4NTNjM2Q2ZGQ1ODUxNjgyYjA3MzNhNzI5YmE0MTU4ZDZiZGZmODA5NzRkNWVmNWYxZjY4ODczNjViIgotCi1QQUNLQUdFQ09ORklHID8/PSAib3BlbnNzbCIKLVBBQ0tBR0VDT05GSUdbb3BlbnNzbF0gPSAiLS13aXRoLW9wZW5zc2wsIC0td2l0aG91dC1vcGVuc3NsLCBvcGVuc3NsIgotCi1FWFRSQV9PRUNPTkYgPSAiIFwKLSAgICAgICAgICAgICAtLXdpdGhvdXQtYnppcDIgXAotICAgICAgICAgICAgIC0td2l0aG91dC1sZGFwIFwKLSAgICAgICAgICAgICAtLXdpdGhvdXQtbHVhIFwKLSAgICAgICAgICAgICAtLXdpdGhvdXQtbWVtY2FjaGUgXAotICAgICAgICAgICAgIC0td2l0aC1wY3JlIFwKLSAgICAgICAgICAgICAtLXdpdGhvdXQtd2ViZGF2LXByb3BzIFwKLSAgICAgICAgICAgICAtLXdpdGhvdXQtd2ViZGF2LWxvY2tzIFwKLSAgICAgICAgICAgICAtLWRpc2FibGUtc3RhdGljIFwKLSIKLQotaW5oZXJpdCBhdXRvdG9vbHMgcGtnY29uZmlnIHVwZGF0ZS1yYy5kIGdldHRleHQgc3lzdGVtZAotCi1JTklUU0NSSVBUX05BTUUgPSAibGlnaHR0cGQiCi1JTklUU0NSSVBUX1BBUkFNUyA9ICJkZWZhdWx0cyA3MCIKLQotU1lTVEVNRF9TRVJWSUNFXyR7UE59ID0gImxpZ2h0dHBkLnNlcnZpY2UiCi0KLWRvX2luc3RhbGxfYXBwZW5kKCkgewotCWluc3RhbGwgLWQgJHtEfSR7c3lzY29uZmRpcn0vaW5pdC5kICR7RH0ke3N5c2NvbmZkaXJ9L2xpZ2h0dHBkLmQgJHtEfS93d3cvcGFnZXMvZGF2Ci0JaW5zdGFsbCAtbSAwNzU1ICR7V09SS0RJUn0vbGlnaHR0cGQgJHtEfSR7c3lzY29uZmRpcn0vaW5pdC5kCi0JaW5zdGFsbCAtbSAwNjQ0ICR7V09SS0RJUn0vbGlnaHR0cGQuY29uZiAke0R9JHtzeXNjb25mZGlyfQotCWluc3RhbGwgLW0gMDY0NCAke1dPUktESVJ9L2luZGV4Lmh0bWwubGlnaHR0cGQgJHtEfS93d3cvcGFnZXMvaW5kZXguaHRtbAotCi0JaW5zdGFsbCAtZCAke0R9JHtzeXN0ZW1kX3VuaXRkaXJ9L3N5c3RlbQotCWluc3RhbGwgLW0gMDY0NCAke1dPUktESVJ9L2xpZ2h0dHBkLnNlcnZpY2UgJHtEfSR7c3lzdGVtZF91bml0ZGlyfS9zeXN0ZW0KLQlzZWQgLWkgLWUgJ3MsQFNCSU5ESVJALCR7c2JpbmRpcn0sZycgXAotCQktZSAncyxAU1lTQ09ORkRJUkAsJHtzeXNjb25mZGlyfSxnJyBcCi0JCS1lICdzLEBCQVNFX0JJTkRJUkAsJHtiYXNlX2JpbmRpcn0sZycgXAotCQkke0R9JHtzeXN0ZW1kX3VuaXRkaXJ9L3N5c3RlbS9saWdodHRwZC5zZXJ2aWNlCi0JI0ZvciBGSFMgY29tcGxpYW5jZSwgY3JlYXRlIHN5bWJvbGljIGxpbmtzIHRvIC92YXIvbG9nIGFuZCAvdmFyL3RtcCBmb3IgbG9ncyBhbmQgdGVtcG9yYXJ5IGRhdGEKLQlsbiAtc2YgJHtsb2NhbHN0YXRlZGlyfS9sb2cgJHtEfS93d3cvbG9ncwotCWxuIC1zZiAke2xvY2Fsc3RhdGVkaXJ9L3RtcCAke0R9L3d3dy92YXIKLX0KLQotRklMRVNfJHtQTn0gKz0gIiR7c3lzY29uZmRpcn0gL3d3dyIKLQotQ09ORkZJTEVTXyR7UE59ID0gIiR7c3lzY29uZmRpcn0vbGlnaHR0cGQuY29uZiIKLQotUEFDS0FHRVNfRFlOQU1JQyArPSAiXmxpZ2h0dHBkLW1vZHVsZS0uKiIKLQotcHl0aG9uIHBvcHVsYXRlX3BhY2thZ2VzX3ByZXBlbmQgKCkgewotICAgIGxpZ2h0dHBkX2xpYmRpciA9IGQuZXhwYW5kKCcke2xpYmRpcn0nKQotICAgIGRvX3NwbGl0X3BhY2thZ2VzKGQsIGxpZ2h0dHBkX2xpYmRpciwgJ15tb2RfKC4qKVwuc28kJywgJ2xpZ2h0dHBkLW1vZHVsZS0lcycsICdMaWdodHRwZCBtb2R1bGUgZm9yICVzJywgZXh0cmFfZGVwZW5kcz0nJykKLX0KZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbGlnaHR0cGQvbGlnaHR0cGRfMS40LjQxLmJiIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9saWdodHRwZC9saWdodHRwZF8xLjQuNDEuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWEzZjMyMwotLS0gL2Rldi9udWxsCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbGlnaHR0cGQvbGlnaHR0cGRfMS40LjQxLmJiCkBAIC0wLDAgKzEsNzkgQEAKK1NVTU1BUlkgPSAiTGlnaHR3ZWlnaHQgaGlnaC1wZXJmb3JtYW5jZSB3ZWIgc2VydmVyIgorSE9NRVBBR0UgPSAiaHR0cDovL3d3dy5saWdodHRwZC5uZXQvIgorQlVHVFJBQ0tFUiA9ICJodHRwOi8vcmVkbWluZS5saWdodHRwZC5uZXQvcHJvamVjdHMvbGlnaHR0cGQvaXNzdWVzIgorCitMSUNFTlNFID0gIkJTRCIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PWU0ZGFjNWM2YWIxNjlhYTIxMmZlYjUwMjg4NTNhNTc5IgorCitTRUNUSU9OID0gIm5ldCIKK0RFUEVORFMgPSAiemxpYiBsaWJwY3JlIgorUkRFUEVORFNfJHtQTn0gKz0gIiBcCisgICAgICAgICAgICAgICBsaWdodHRwZC1tb2R1bGUtYWNjZXNzIFwKKyAgICAgICAgICAgICAgIGxpZ2h0dHBkLW1vZHVsZS1hY2Nlc3Nsb2cgXAorICAgICAgICAgICAgICAgbGlnaHR0cGQtbW9kdWxlLWluZGV4ZmlsZSBcCisgICAgICAgICAgICAgICBsaWdodHRwZC1tb2R1bGUtZGlybGlzdGluZyBcCisgICAgICAgICAgICAgICBsaWdodHRwZC1tb2R1bGUtc3RhdGljZmlsZSBcCisiCisKK1NSQ19VUkkgPSAiaHR0cDovL2Rvd25sb2FkLmxpZ2h0dHBkLm5ldC9saWdodHRwZC9yZWxlYXNlcy0xLjQueC9saWdodHRwZC0ke1BWfS50YXIueHogXAorICAgICAgICBmaWxlOi8vaW5kZXguaHRtbC5saWdodHRwZCBcCisgICAgICAgIGZpbGU6Ly9saWdodHRwZC5jb25mIFwKKyAgICAgICAgZmlsZTovL2xpZ2h0dHBkIFwKKyAgICAgICAgZmlsZTovL2xpZ2h0dHBkLnNlcnZpY2UgXAorICAgICAgICBmaWxlOi8vMDAwMS1Vc2UtcGtnLWNvbmZpZy1mb3ItcGNyZS1kZXBlbmRlbmN5LWluc3RlYWQtb2YtY29uZmlnLnBhdGNoIFwKKyAgICAgICAgIgorCitTUkNfVVJJW21kNXN1bV0gPSAiMWRmMmU0ZGJjOTY1Y2ZlNmY5OWYwMDhhYzNkYjRkOGQiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiNGJjYzM4M2VmNmQ2ZGM3YjI4NGY2ODg4MmQ3MWExNzhlMjk4NmM4M2M0ZTg1ZWViM2M4ZjNiODgyZTM0NmI2YyIKKworUEFDS0FHRUNPTkZJRyA/Pz0gIm9wZW5zc2wgXAorICAgICR7QGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCAnaXB2NicsICdpcHY2JywgJycsIGQpfSBcCisiCitQQUNLQUdFQ09ORklHW29wZW5zc2xdID0gIi0td2l0aC1vcGVuc3NsLCAtLXdpdGhvdXQtb3BlbnNzbCwgb3BlbnNzbCIKK1BBQ0tBR0VDT05GSUdbaXB2Nl0gPSAiLS1lbmFibGUtaXB2NiwtLWRpc2FibGUtaXB2NiwiCisKK0VYVFJBX09FQ09ORiA9ICIgXAorICAgICAgICAgICAgIC0td2l0aG91dC1iemlwMiBcCisgICAgICAgICAgICAgLS13aXRob3V0LWxkYXAgXAorICAgICAgICAgICAgIC0td2l0aG91dC1sdWEgXAorICAgICAgICAgICAgIC0td2l0aG91dC1tZW1jYWNoZWQgXAorICAgICAgICAgICAgIC0td2l0aC1wY3JlIFwKKyAgICAgICAgICAgICAtLXdpdGhvdXQtd2ViZGF2LXByb3BzIFwKKyAgICAgICAgICAgICAtLXdpdGhvdXQtd2ViZGF2LWxvY2tzIFwKKyAgICAgICAgICAgICAtLWRpc2FibGUtc3RhdGljIFwKKyIKKworaW5oZXJpdCBhdXRvdG9vbHMgcGtnY29uZmlnIHVwZGF0ZS1yYy5kIGdldHRleHQgc3lzdGVtZAorCitJTklUU0NSSVBUX05BTUUgPSAibGlnaHR0cGQiCitJTklUU0NSSVBUX1BBUkFNUyA9ICJkZWZhdWx0cyA3MCIKKworU1lTVEVNRF9TRVJWSUNFXyR7UE59ID0gImxpZ2h0dHBkLnNlcnZpY2UiCisKK2RvX2luc3RhbGxfYXBwZW5kKCkgeworCWluc3RhbGwgLWQgJHtEfSR7c3lzY29uZmRpcn0vaW5pdC5kICR7RH0ke3N5c2NvbmZkaXJ9L2xpZ2h0dHBkLmQgJHtEfS93d3cvcGFnZXMvZGF2CisJaW5zdGFsbCAtbSAwNzU1ICR7V09SS0RJUn0vbGlnaHR0cGQgJHtEfSR7c3lzY29uZmRpcn0vaW5pdC5kCisJaW5zdGFsbCAtbSAwNjQ0ICR7V09SS0RJUn0vbGlnaHR0cGQuY29uZiAke0R9JHtzeXNjb25mZGlyfQorCWluc3RhbGwgLW0gMDY0NCAke1dPUktESVJ9L2luZGV4Lmh0bWwubGlnaHR0cGQgJHtEfS93d3cvcGFnZXMvaW5kZXguaHRtbAorCisJaW5zdGFsbCAtZCAke0R9JHtzeXN0ZW1kX3VuaXRkaXJ9L3N5c3RlbQorCWluc3RhbGwgLW0gMDY0NCAke1dPUktESVJ9L2xpZ2h0dHBkLnNlcnZpY2UgJHtEfSR7c3lzdGVtZF91bml0ZGlyfS9zeXN0ZW0KKwlzZWQgLWkgLWUgJ3MsQFNCSU5ESVJALCR7c2JpbmRpcn0sZycgXAorCQktZSAncyxAU1lTQ09ORkRJUkAsJHtzeXNjb25mZGlyfSxnJyBcCisJCS1lICdzLEBCQVNFX0JJTkRJUkAsJHtiYXNlX2JpbmRpcn0sZycgXAorCQkke0R9JHtzeXN0ZW1kX3VuaXRkaXJ9L3N5c3RlbS9saWdodHRwZC5zZXJ2aWNlCisJI0ZvciBGSFMgY29tcGxpYW5jZSwgY3JlYXRlIHN5bWJvbGljIGxpbmtzIHRvIC92YXIvbG9nIGFuZCAvdmFyL3RtcCBmb3IgbG9ncyBhbmQgdGVtcG9yYXJ5IGRhdGEKKwlsbiAtc2YgJHtsb2NhbHN0YXRlZGlyfS9sb2cgJHtEfS93d3cvbG9ncworCWxuIC1zZiAke2xvY2Fsc3RhdGVkaXJ9L3RtcCAke0R9L3d3dy92YXIKK30KKworRklMRVNfJHtQTn0gKz0gIiR7c3lzY29uZmRpcn0gL3d3dyIKKworQ09ORkZJTEVTXyR7UE59ID0gIiR7c3lzY29uZmRpcn0vbGlnaHR0cGQuY29uZiIKKworUEFDS0FHRVNfRFlOQU1JQyArPSAiXmxpZ2h0dHBkLW1vZHVsZS0uKiIKKworcHl0aG9uIHBvcHVsYXRlX3BhY2thZ2VzX3ByZXBlbmQgKCkgeworICAgIGxpZ2h0dHBkX2xpYmRpciA9IGQuZXhwYW5kKCcke2xpYmRpcn0nKQorICAgIGRvX3NwbGl0X3BhY2thZ2VzKGQsIGxpZ2h0dHBkX2xpYmRpciwgJ15tb2RfKC4qKVwuc28kJywgJ2xpZ2h0dHBkLW1vZHVsZS0lcycsICdMaWdodHRwZCBtb2R1bGUgZm9yICVzJywgZXh0cmFfZGVwZW5kcz0nJykKK30KZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbHNiL2xzYmluaXRzY3JpcHRzLzAwMDEtZnVuY3Rpb25zLWF2b2lkLWV4aXQtMS13aGljaC1jYXVzZXMtaW5pdC1zY3JpcHRzLXRvLS5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbHNiL2xzYmluaXRzY3JpcHRzLzAwMDEtZnVuY3Rpb25zLWF2b2lkLWV4aXQtMS13aGljaC1jYXVzZXMtaW5pdC1zY3JpcHRzLXRvLS5wYXRjaAppbmRleCAwODA5YzliLi4xN2M5MDAyIDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2xzYi9sc2Jpbml0c2NyaXB0cy8wMDAxLWZ1bmN0aW9ucy1hdm9pZC1leGl0LTEtd2hpY2gtY2F1c2VzLWluaXQtc2NyaXB0cy10by0ucGF0Y2gKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9sc2IvbHNiaW5pdHNjcmlwdHMvMDAwMS1mdW5jdGlvbnMtYXZvaWQtZXhpdC0xLXdoaWNoLWNhdXNlcy1pbml0LXNjcmlwdHMtdG8tLnBhdGNoCkBAIC0xMSwxMyArMTEsMTQgQEAKIGluZGV4IDY4NTAwNDYuLjExMjIzZjcgMTAwNjQ0CiAtLS0gYS9yYy5kL2luaXQuZC9mdW5jdGlvbnMKICsrKyBiL3JjLmQvaW5pdC5kL2Z1bmN0aW9ucwotQEAgLTU5Nyw1ICs1OTcsNSBAQCBpZiBbICIkX3VzZV9zeXN0ZW1jdGwiID0gIjEiIF07IHRoZW4KK0BAIC01OTcsNiArNTk3LDYgQEAgaWYgWyAiJF91c2Vfc3lzdGVtY3RsIiA9ICIxIiBdOyB0aGVuCiAgCWZpCiAgZmkKICAKIC1zdHJzdHIgIiQoY2F0IC9wcm9jL2NtZGxpbmUpIiAicmMuZGVidWciICYmIHNldCAteAogK3N0cnN0ciAiJChjYXQgL3Byb2MvY21kbGluZSkiICJyYy5kZWJ1ZyIgJiYgc2V0IC14IHx8IHRydWUKLSAKKyByZXR1cm4gMAorCiAtLSAKIDIuMS4wCiAKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbHNiL2xzYmluaXRzY3JpcHRzXzkuNjQuYmIgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2xzYi9sc2Jpbml0c2NyaXB0c185LjY0LmJiCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3MjczMDUwLi4wMDAwMDAwCi0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbHNiL2xzYmluaXRzY3JpcHRzXzkuNjQuYmIKKysrIC9kZXYvbnVsbApAQCAtMSwzMyArMCwwIEBACi1TVU1NQVJZID0gIlN5c1YgaW5pdCBzY3JpcHRzIHdoaWNoIGFyZSBvbmx5IHVzZWQgaW4gYW4gTFNCIGltYWdlIgotU0VDVElPTiA9ICJiYXNlIgotTElDRU5TRSA9ICJHUEx2MiIKLURFUEVORFMgPSAicG9wdCBnbGliLTIuMCIKLQotUkRFUEVORFNfJHtQTn0gKz0gInV0aWwtbGludXgiCi0KLUxJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PWViZjRlOGI0OTc4MGFiMTg3ZDUxYmQyNmFhYTAyMmM2IgotCi1TPSIke1dPUktESVJ9L2luaXRzY3JpcHRzLSR7UFZ9IgotU1JDX1VSSSA9ICJodHRwOi8vcGtncy5mZWRvcmFwcm9qZWN0Lm9yZy9yZXBvL3BrZ3MvaW5pdHNjcmlwdHMvaW5pdHNjcmlwdHMtJHtQVn0udGFyLmJ6Mi85Y2NlMmFlMTAwOTc1MGU4NGJlMzdjMDlhMDI4NzU3ZS9pbml0c2NyaXB0cy0ke1BWfS50YXIuYnoyIFwKLSAgICAgICAgICAgZmlsZTovL2Z1bmN0aW9ucy5wYXRjaCBcCi0gICAgICAgICAgIGZpbGU6Ly8wMDAxLWZ1bmN0aW9ucy1hdm9pZC1leGl0LTEtd2hpY2gtY2F1c2VzLWluaXQtc2NyaXB0cy10by0ucGF0Y2ggXAotICAgICAgICAgICIgCi0KLVNSQ19VUklbbWQ1c3VtXSA9ICI5Y2NlMmFlMTAwOTc1MGU4NGJlMzdjMDlhMDI4NzU3ZSIKLVNSQ19VUklbc2hhMjU2c3VtXSA9ICI0OGI1OWNlODE1N2NmYzU4YmJkNGIxZGZhNThhZDEwODcyNDU3NjFhZTExYzIwMzNiNjZhZTM4NjRlYTdlMWNmIgotCi1pbmhlcml0IHVwZGF0ZS1hbHRlcm5hdGl2ZXMKLQotQUxURVJOQVRJVkVfUFJJT1JJVFkgPSAiMTAwIgotQUxURVJOQVRJVkVfJHtQTn0gPSAiZnVuY3Rpb25zIgotQUxURVJOQVRJVkVfTElOS19OQU1FW2Z1bmN0aW9uc10gPSAiJHtzeXNjb25mZGlyfS9pbml0LmQvZnVuY3Rpb25zIgotCi0jIFNpbmNlIHdlIGFyZSBvbmx5IHRha2luZyB0aGUgcGF0Y2hlZCB2ZXJzaW9uIG9mIGZ1bmN0aW9ucywgbm8gbmVlZCB0bwotIyBjb25maWd1cmUgb3IgY29tcGlsZSBhbnl0aGluZyBzbyBkbyBub3QgZXhlY3V0ZSB0aGVzZQotZG9fY29uZmlndXJlW25vZXhlY10gPSAiMSIgCi1kb19jb21waWxlW25vZXhlY10gPSAiMSIgCi0KLWRvX2luc3RhbGwoKXsKLQlpbnN0YWxsIC1kICR7RH0ke3N5c2NvbmZkaXJ9L2luaXQuZC8KLQlpbnN0YWxsIC1tIDA2NDQgJHtTfS9yYy5kL2luaXQuZC9mdW5jdGlvbnMgJHtEfSR7c3lzY29uZmRpcn0vaW5pdC5kL2Z1bmN0aW9ucwotfQpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9sc2IvbHNiaW5pdHNjcmlwdHNfOS42OC5iYiBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbHNiL2xzYmluaXRzY3JpcHRzXzkuNjguYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGMwOGZmZgotLS0gL2Rldi9udWxsCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbHNiL2xzYmluaXRzY3JpcHRzXzkuNjguYmIKQEAgLTAsMCArMSwzMyBAQAorU1VNTUFSWSA9ICJTeXNWIGluaXQgc2NyaXB0cyB3aGljaCBhcmUgb25seSB1c2VkIGluIGFuIExTQiBpbWFnZSIKK1NFQ1RJT04gPSAiYmFzZSIKK0xJQ0VOU0UgPSAiR1BMdjIiCitERVBFTkRTID0gInBvcHQgZ2xpYi0yLjAiCisKK1JERVBFTkRTXyR7UE59ICs9ICJ1dGlsLWxpbnV4IgorCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT1lYmY0ZThiNDk3ODBhYjE4N2Q1MWJkMjZhYWEwMjJjNiIKKworUz0iJHtXT1JLRElSfS9pbml0c2NyaXB0cy0ke1BWfSIKK1NSQ19VUkkgPSAiaHR0cDovL3BrZ3MuZmVkb3JhcHJvamVjdC5vcmcvcmVwby9wa2dzL2luaXRzY3JpcHRzL2luaXRzY3JpcHRzLSR7UFZ9LnRhci5iejIvNmE1MWE1YWYzOGUwMTQ0NWY1Mzk4OWVkMDcyN2MzZTEvaW5pdHNjcmlwdHMtJHtQVn0udGFyLmJ6MiBcCisgICAgICAgICAgIGZpbGU6Ly9mdW5jdGlvbnMucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vMDAwMS1mdW5jdGlvbnMtYXZvaWQtZXhpdC0xLXdoaWNoLWNhdXNlcy1pbml0LXNjcmlwdHMtdG8tLnBhdGNoIFwKKyAgICAgICAgICAiIAorCitTUkNfVVJJW21kNXN1bV0gPSAiNmE1MWE1YWYzOGUwMTQ0NWY1Mzk4OWVkMDcyN2MzZTEiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiMmExYzZlOWRiYWEzN2E2NzY1MThmNDgwM2I1MDFlMTA3YzA1OGJiMTRlZjdhOGRiMjRjNTJiNzdmYmNiYTUzMSIKKworaW5oZXJpdCB1cGRhdGUtYWx0ZXJuYXRpdmVzCisKK0FMVEVSTkFUSVZFX1BSSU9SSVRZID0gIjEwMCIKK0FMVEVSTkFUSVZFXyR7UE59ID0gImZ1bmN0aW9ucyIKK0FMVEVSTkFUSVZFX0xJTktfTkFNRVtmdW5jdGlvbnNdID0gIiR7c3lzY29uZmRpcn0vaW5pdC5kL2Z1bmN0aW9ucyIKKworIyBTaW5jZSB3ZSBhcmUgb25seSB0YWtpbmcgdGhlIHBhdGNoZWQgdmVyc2lvbiBvZiBmdW5jdGlvbnMsIG5vIG5lZWQgdG8KKyMgY29uZmlndXJlIG9yIGNvbXBpbGUgYW55dGhpbmcgc28gZG8gbm90IGV4ZWN1dGUgdGhlc2UKK2RvX2NvbmZpZ3VyZVtub2V4ZWNdID0gIjEiIAorZG9fY29tcGlsZVtub2V4ZWNdID0gIjEiIAorCitkb19pbnN0YWxsKCl7CisJaW5zdGFsbCAtZCAke0R9JHtzeXNjb25mZGlyfS9pbml0LmQvCisJaW5zdGFsbCAtbSAwNjQ0ICR7U30vcmMuZC9pbml0LmQvZnVuY3Rpb25zICR7RH0ke3N5c2NvbmZkaXJ9L2luaXQuZC9mdW5jdGlvbnMKK30KZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbHNiL2xzYnRlc3QvTFNCX1Rlc3Quc2ggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2xzYi9sc2J0ZXN0L0xTQl9UZXN0LnNoCmluZGV4IGI5OTcxYTEuLmMzMWEzZWIgMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbHNiL2xzYnRlc3QvTFNCX1Rlc3Quc2gKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9sc2IvbHNidGVzdC9MU0JfVGVzdC5zaApAQCAtMTEzLDcgKzExMyw3IEBACiAjZmkKIAogU0VSVkVSMT0iXAotCWh0dHA6Ly8ke1NFUlZFUl9OQU1FfS9wdWIvbHNiL2Jhc2UvJHtMU0JfUkVMRUFTRX0vYmluYXJ5IgorCWh0dHA6Ly8ke1NFUlZFUl9OQU1FfS9wdWIvbHNiL2Jhc2UvcmVsZWFzZWQtYWxsL2JpbmFyeSIJCiBTRVJWRVIyPSJcCiAJaHR0cDovLyR7U0VSVkVSX05BTUV9L3B1Yi9sc2IvdGVzdF9zdWl0ZXMvcmVsZWFzZWQtYWxsL2JpbmFyeS9ydW50aW1lIgogU0VSVkVSMz0iXApAQCAtNDI5LDcgKzQyOSw2IEBACiAvb3B0L2xzYi90ZXN0L2Rlc2t0b3AvZnJlZXR5cGUKIC9vcHQvbHNiL3Rlc3QvZGVza3RvcC9ndGt2dHMKIC9vcHQvbHNiL3Rlc3QvZGVza3RvcC9saWJwbmcKLS9vcHQvbHNiL3Rlc3QvZGVza3RvcC9xdDMKIC9vcHQvbHNiL3Rlc3QvZGVza3RvcC94ZnQKIC9vcHQvbHNiL3Rlc3QvZGVza3RvcC94bWwKIC9vcHQvbHNiL3Rlc3QvZGVza3RvcC94cmVuZGVyCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2xzYi9sc2J0ZXN0L3BhY2thZ2VzX2xpc3QgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2xzYi9sc2J0ZXN0L3BhY2thZ2VzX2xpc3QKaW5kZXggMjdkODM1Mi4uOTU5ZjkzMSAxMDA2NDQKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9sc2IvbHNidGVzdC9wYWNrYWdlc19saXN0CisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbHNiL2xzYnRlc3QvcGFja2FnZXNfbGlzdApAQCAtMSw0ICsxLDQgQEAKLUxTQl9SRUxFQVNFPSJyZWxlYXNlZC00LjEuMCIKK0xTQl9SRUxFQVNFPSJyZWxlYXNlZC01LjAiCiBMU0JfQVJDSD0ibHNiYXJjaCIKIAogQkFTRV9QQUNLQUdFU19MSVNUPSJsc2Itc2V0dXAtNC4xLjAtMS5ub2FyY2gucnBtIgpAQCAtOSwzNiArOSwzNSBAQAogCWxzYi14dmZiLTEuMi4wLTIyLnRhcmdldGFyY2gucnBtIFwKIAkiCiAKLVJVTlRJTUVfUEFDS0FHRVNfTElTVD0ibHNiLWNtZGNoay00LjEuNC01LnRhcmdldGFyY2gucnBtIFwKLQlsc2ItbGliY2hrLTQuMS40LTUudGFyZ2V0YXJjaC5ycG0gXAotCWxzYi1xbS0yLjItMTIubHNiNC50YXJnZXRhcmNoLnJwbSBcCi0JbHNiLXRhc2stZGlzdC10ZXN0a2l0LTQuMS45LTEubm9hcmNoLnJwbSBcCi0JbHNiLXRlc3QtY29yZS00LjEuMTUtMS50YXJnZXRhcmNoLnJwbSBcCi0JbHNiLXRlc3QtY3BwLXQyYy00LjEuMC0xLnRhcmdldGFyY2gucnBtIFwKLQlsc2ItdGVzdC1kZXNrdG9wLTQuMS45LTEudGFyZ2V0YXJjaC5ycG0gXAotCWxzYi10ZXN0LWRlc2t0b3AtdDJjLTQuMS4zLTMudGFyZ2V0YXJjaC5ycG0gXAotCWxzYi10ZXN0LWxpYnN0ZGNwcC00LjEuMC0xOC5sc2I0LnRhcmdldGFyY2gucnBtIFwKLQlsc2ItdGVzdC1vbHZlci1jb3JlLTQuMS40LTEudGFyZ2V0YXJjaC5ycG0gXAotCWxzYi10ZXN0LXBlcmwtNC4xLjgtMS5ub2FyY2gucnBtIFwKLQlsc2ItdGVzdC1wcmludGluZy00LjEuMi0xLnRhcmdldGFyY2gucnBtIFwKLQlsc2ItdGVzdC1weXRob24tNC4xLjUtMS50YXJnZXRhcmNoLnJwbSBcCi0JbHNiLXRlc3QtcXQzLWF6b3YtNC4xLjEtMy50YXJnZXRhcmNoLnJwbSBcCi0JbHNiLXRlc3QtcXQ0LWF6b3YtNC4xLjMtMS50YXJnZXRhcmNoLnJwbSBcCi0JbHNiLXRlc3QteHRzNS01LjEuNS00NS5sc2I0LnRhcmdldGFyY2gucnBtIFwKLQlsc2ItdGVzdC1hbHNhLXQyYy00LjEuMC0xLnRhcmdldGFyY2gucnBtIFwKLQlsc2ItdGVzdC1jb3JlLXQyYy00LjEuMi0zLnRhcmdldGFyY2gucnBtIFwKLQlsc2ItdGVzdC14bWwyLWF6b3YtNC4xLjAtMS50YXJnZXRhcmNoLnJwbSBcCitSVU5USU1FX1BBQ0tBR0VTX0xJU1Q9ImxzYi1jbWRjaGstNS4wLjMtMS50YXJnZXRhcmNoLnJwbSBcCisJbHNiLWxpYmNoay01LjAuMy0xLnRhcmdldGFyY2gucnBtIFwKKwlsc2ItcW0tMi4yLTEubHNiNS50YXJnZXRhcmNoLnJwbSBcCisJbHNiLXRhc2stZGlzdC10ZXN0a2l0LTUuMC4wLTIubm9hcmNoLnJwbSBcCisJbHNiLXRlc3QtY29yZS01LjAuMS0xLnRhcmdldGFyY2gucnBtIFwKKwlsc2ItdGVzdC1jcHAtdDJjLTUuMC4wLTEudGFyZ2V0YXJjaC5ycG0gXAorCWxzYi10ZXN0LWRlc2t0b3AtNS4wLjAtMS50YXJnZXRhcmNoLnJwbSBcCisJbHNiLXRlc3QtZGVza3RvcC10MmMtNS4wLjAtMS50YXJnZXRhcmNoLnJwbSBcCisJbHNiLXRlc3QtbGlic3RkY3BwLTQuMS4wLTIyLmxzYjEudGFyZ2V0YXJjaC5ycG0gXAorCWxzYi10ZXN0LW9sdmVyLWNvcmUtNS4wLjAtMS50YXJnZXRhcmNoLnJwbSBcCisJbHNiLXRlc3QtcGVybC01LjAuMi0xLm5vYXJjaC5ycG0gXAorCWxzYi10ZXN0LXByaW50aW5nLTUuMC4xLTEudGFyZ2V0YXJjaC5ycG0gXAorCWxzYi10ZXN0LXB5dGhvbi01LjAuMC0xLnRhcmdldGFyY2gucnBtIFwKKwlsc2ItdGVzdC1xdDQtYXpvdi01LjAuMC0xLnRhcmdldGFyY2gucnBtIFwKKwlsc2ItdGVzdC14dHM1LTUuMS41LTQ3LmxzYjUudGFyZ2V0YXJjaC5ycG0gXAorCWxzYi10ZXN0LWFsc2EtdDJjLTUuMS45MS00LnRhcmdldGFyY2gucnBtIFwKKwlsc2ItdGVzdC1jb3JlLXQyYy01LjAuMS0xLnRhcmdldGFyY2gucnBtIFwKKwlsc2ItdGVzdC14bWwyLWF6b3YtNS4wLjAtMS50YXJnZXRhcmNoLnJwbSBcCiAJIgogCi1BUFBfUEFDS0FHRVNfTElTVD0ibHNiLXB5dGhvbi0yLjQuNi03LmxzYjQudGFyZ2V0YXJjaC5ycG0gXAotCWxzYi1hcGFjaGUtMi4yLjE0LTgubHNiNC50YXJnZXRhcmNoLnJwbSBcCi0JbHNiLXRjbC04LjUuNy04LmxzYjQudGFyZ2V0YXJjaC5ycG0gXAotCWxzYi1leHBlY3QtNS40My4wLTEzLmxzYjQudGFyZ2V0YXJjaC5ycG0gXAotCWxzYi1ncm9mZi0xLjIwLjEtNy5sc2I0LnRhcmdldGFyY2gucnBtIFwKLQlsc2ItcmFwdG9yLTEuNC4xOS01LmxzYjQudGFyZ2V0YXJjaC5ycG0gXAotCWxzYi14cGRmLTEuMDEtMTQubHNiNC50YXJnZXRhcmNoLnJwbSBcCi0JbHNiLXNhbWJhLTMuNC4zLTkubHNiNC50YXJnZXRhcmNoLnJwbSBcCi0JbHNiLXJzeW5jLTMuMC42LTYubHNiNC50YXJnZXRhcmNoLnJwbSBcCitBUFBfUEFDS0FHRVNfTElTVD0ibHNiLXB5dGhvbi0yLjQuNi0xMC5sc2I1LnRhcmdldGFyY2gucnBtIFwKKwlsc2ItYXBhY2hlLTIuMi4xOS01LmxzYjUudGFyZ2V0YXJjaC5ycG0gXAorCWxzYi10Y2wtOC41LjktMjEubHNiNS50YXJnZXRhcmNoLnJwbSBcCisJbHNiLWV4cGVjdC01LjQzLjAtMjEubHNiNS50YXJnZXRhcmNoLnJwbSBcCisJbHNiLWdyb2ZmLTEuMjAuMS05LmxzYjUudGFyZ2V0YXJjaC5ycG0gXAorCWxzYi1yYXB0b3ItMS40LjIxLTQubHNiNS50YXJnZXRhcmNoLnJwbSBcCisJbHNiLXhwZGYtMS4wMS0xNy5sc2I1LnRhcmdldGFyY2gucnBtIFwKKwlsc2Itc2FtYmEtMy41LjktNS5sc2I1LnRhcmdldGFyY2gucnBtIFwKKwlsc2ItcnN5bmMtMy4wLjgtMy5sc2I1LnRhcmdldGFyY2gucnBtIFwKIAkiCiAKIEFQUF9URVNURklMRVNfTElTVD0iZXhwZWN0LXRlc3RzLnRhciBcCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2xzYi9sc2J0ZXN0L3Nlc3Npb24gYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2xzYi9sc2J0ZXN0L3Nlc3Npb24KaW5kZXggODVjYTJlZi4uM2FiY2NhNyAxMDA2NDQKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9sc2IvbHNidGVzdC9zZXNzaW9uCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbHNiL2xzYnRlc3Qvc2Vzc2lvbgpAQCAtMTI2LDE1ICsxMjYsNiBAQAogQVVUT1JFUExZX1RFU1RTVUlURV9ESVI6IC9vcHQvbHNiL3Rlc3QvcHl0aG9uCiBBVVRPUkVQTFlfUkVTVUxUU19ESVI6IC9vcHQvbHNiL3Rlc3QvcHl0aG9uL3Jlc3VsdHMKIAotW3F0My1hem92XQotUlVOOiAxCi1WRVJTSU9OOiBsb2NhbHwqCi0KLVtxdDMtYXpvdnxsb2NhbHwqXQotQVVUT1JFUExZX1RFU1RTVUlURV9ESVI6IC9vcHQvbHNiL3Rlc3QvcXQzLWF6b3YKLUFVVE9SRVBMWV9YMTFfRk9OVF9QQVRIOiBbZGVmYXVsdF0KLUFVVE9SRVBMWV9SRVNVTFRTX0RJUjogL29wdC9sc2IvdGVzdC9xdDMtYXpvdi9yZXN1bHRzCi0KIFtxdDQtYXpvdl0KIFJVTjogMQogVkVSU0lPTjogbG9jYWx8KgpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9sc29mL2xzb2ZfNC44OS5iYiBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbHNvZi9sc29mXzQuODkuYmIKaW5kZXggYzEwMzM3Yi4uYjczMmNmMCAxMDA2NDQKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9sc29mL2xzb2ZfNC44OS5iYgorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2xzb2YvbHNvZl80Ljg5LmJiCkBAIC00Nyw4ICs0Nyw2IEBACiBleHBvcnQgSSA9ICIke1NUQUdJTkdfSU5DRElSfSIKIGV4cG9ydCBMID0gIiR7U1RBR0lOR19JTkNESVJ9IgogCi1FWFRSQV9PRU1BS0UgPSAiIgotCiBkb19jb21waWxlICgpIHsKIAlvZV9ydW5tYWtlICdDQz0ke0NDfScgJ0NGR0w9JHtMREZMQUdTfSAtTC4vbGliIC1sbHNvZicgJ0RFQlVHPScgJ0lOQ0w9JHtDRkxBR1N9JwogfQpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9sdHAvbHRwLzAwMDEtdGVzdGNhc2VzLW5ldHdvcmstbmZzdjQtYWNsLWFjbDEuYy1TZWN1cml0eS1maXgtb24tcy5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbHRwL2x0cC8wMDAxLXRlc3RjYXNlcy1uZXR3b3JrLW5mc3Y0LWFjbC1hY2wxLmMtU2VjdXJpdHktZml4LW9uLXMucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDQ1MzJiZQotLS0gL2Rldi9udWxsCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbHRwL2x0cC8wMDAxLXRlc3RjYXNlcy1uZXR3b3JrLW5mc3Y0LWFjbC1hY2wxLmMtU2VjdXJpdHktZml4LW9uLXMucGF0Y2gKQEAgLTAsMCArMSw0MSBAQAorRnJvbSA2NzJhNTZiZTE0NDI2ZWFlNDQ4NjQ2NzNjNmMyYWZjYTBhYjg5ZDQ2IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogPT9VVEYtOD9xP0FuPUMzPUFEYmFsPTIwTGltPUMzPUIzbj89IDxhbmliYWwubGltb25AbGludXguaW50ZWwuY29tPgorRGF0ZTogRnJpLCAxMyBNYXkgMjAxNiAxMToxMToyOCAtMDUwMAorU3ViamVjdDogW1BBVENIXSB0ZXN0Y2FzZXMvbmV0d29yay9uZnN2NC9hY2wvYWNsMS5jOiBTZWN1cml0eSBmaXggb24gc3RyaW5nCisgcHJpbnRmCitNSU1FLVZlcnNpb246IDEuMAorQ29udGVudC1UeXBlOiB0ZXh0L3BsYWluOyBjaGFyc2V0PVVURi04CitDb250ZW50LVRyYW5zZmVyLUVuY29kaW5nOiA4Yml0CisKK0ZpeGVzOgorCithY2wxLmM6IEluIGZ1bmN0aW9uICd0ZXN0X2FjbF9kZWZhdWx0JzoKK2FjbDEuYzozMTc6MjogZXJyb3I6IGZvcm1hdCBub3QgYSBzdHJpbmcgbGl0ZXJhbCBhbmQgbm8gZm9ybWF0IGFyZ3VtZW50cworWy1XZXJyb3I9Zm9ybWF0LXNlY3VyaXR5XQorICBwcmludGYoY21kKTsKKworW1lPQ1RPICM5NTQ4XQorCitTaWduZWQtb2ZmLWJ5OiBBbsOtYmFsIExpbcOzbiA8YW5pYmFsLmxpbW9uQGxpbnV4LmludGVsLmNvbT4KKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCistLS0KKyB0ZXN0Y2FzZXMvbmV0d29yay9uZnN2NC9hY2wvYWNsMS5jIHwgMiArLQorIDEgZmlsZSBjaGFuZ2VkLCAxIGluc2VydGlvbigrKSwgMSBkZWxldGlvbigtKQorCitkaWZmIC0tZ2l0IGEvdGVzdGNhc2VzL25ldHdvcmsvbmZzdjQvYWNsL2FjbDEuYyBiL3Rlc3RjYXNlcy9uZXR3b3JrL25mc3Y0L2FjbC9hY2wxLmMKK2luZGV4IGI4YjY3YjQuLjdjN2M1MDYgMTAwNjQ0CistLS0gYS90ZXN0Y2FzZXMvbmV0d29yay9uZnN2NC9hY2wvYWNsMS5jCisrKysgYi90ZXN0Y2FzZXMvbmV0d29yay9uZnN2NC9hY2wvYWNsMS5jCitAQCAtMzE0LDcgKzMxNCw3IEBAIHZvaWQgdGVzdF9hY2xfZGVmYXVsdChjaGFyICpkaXIsIGFjbF90IGFjbCkKKyAJY2hhciAqY21kID0gbWFsbG9jKDI1Nik7CisgCisgCXN0cmNweShjbWQsICJjaG1vZCA3Nzc3ICIpOworLQlwcmludGYoY21kKTsKKysJcHJpbnRmKGNtZCwgTlVMTCk7CisgCXN0cmNhdChjbWQsIGRpcik7CisgCXN5c3RlbShjbWQpOworIAlhY2wyID0gYWNsX2dldF9maWxlKHBhdGgsIEFDTF9UWVBFX0FDQ0VTUyk7CistLSAKKzIuMS40CisKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbHRwL2x0cC8wMDAyLUFkZC1rbm9iLXRvLWNvbnRyb2wtd2hldGhlci1udW1hLXN1cHBvcnQtc2hvdWxkLWJlLWMucGF0Y2ggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2x0cC9sdHAvMDAwMi1BZGQta25vYi10by1jb250cm9sLXdoZXRoZXItbnVtYS1zdXBwb3J0LXNob3VsZC1iZS1jLnBhdGNoCmluZGV4IDY4NzI1ZGMuLjA2ODRiZWUgMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbHRwL2x0cC8wMDAyLUFkZC1rbm9iLXRvLWNvbnRyb2wtd2hldGhlci1udW1hLXN1cHBvcnQtc2hvdWxkLWJlLWMucGF0Y2gKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9sdHAvbHRwLzAwMDItQWRkLWtub2ItdG8tY29udHJvbC13aGV0aGVyLW51bWEtc3VwcG9ydC1zaG91bGQtYmUtYy5wYXRjaApAQCAtNyw3ICs3LDcgQEAKIG90aGVyd2lzZSB1bmRldGVybWluaXN0aWMgZGVwZW5kZW5jeSB3aWxsIGJlIGdlbmVyYXRlZAogZHVyaW5nIGJ1aWxkIGRlcGVuZGluZyB1cG9uZyBudW1hIGJlaW5nIHN0YWdlZCBvciBub3QKIAotc2lnbmVkLW9mZi1ieTogUm95LkxpIDxyb25ncWluZy5saUB3aW5kcml2ZXIuY29tPgorU2lnbmVkLW9mZi1ieTogUm95LkxpIDxyb25ncWluZy5saUB3aW5kcml2ZXIuY29tPgogU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KIC0tLQogIG00L2x0cC1udW1hLm00IHwgMTAgKysrKysrKysrLQpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9sdHAvbHRwXzIwMTYwMTI2LmJiIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9sdHAvbHRwXzIwMTYwMTI2LmJiCmluZGV4IDA5N2MxNmQuLjc2MzFlMGUgMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbHRwL2x0cF8yMDE2MDEyNi5iYgorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2x0cC9sdHBfMjAxNjAxMjYuYmIKQEAgLTYyLDYgKzYyLDcgQEAKICAgICAgICAgICAgZmlsZTovLzAwMzMtc2htYXQxLUNvdmVyLUdOVS1zcGVjaWZpYy1jb2RlLXVuZGVyLV9fVVNFX0dOVS5wYXRjaCBcCiAgICAgICAgICAgIGZpbGU6Ly8wMDM0LXBlcmlvZGljX291dHB1dC5wYXRjaCBcCiAgICAgICAgICAgIGZpbGU6Ly8wMDM1LWZpeC10ZXN0X3Byb2Nfa2lsbC1oYW5nLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovLzAwMDEtdGVzdGNhc2VzLW5ldHdvcmstbmZzdjQtYWNsLWFjbDEuYy1TZWN1cml0eS1maXgtb24tcy5wYXRjaCBcCiAgICAgICAgICAgICIKIAogUyA9ICIke1dPUktESVJ9L2dpdCIKQEAgLTkxLDYgKzkyLDE0IEBACiAgICAgaW5zdGFsbCAtZCAke0R9L29wdC9sdHAvCiAgICAgb2VfcnVubWFrZSBERVNURElSPSR7RH0gU0tJUF9JRENIRUNLPTEgaW5zdGFsbAogCisgICAgIyBmaXh1cCBub3QgZGVwbG95IFNUUGZhaWx1cmVfcmVwb3J0LnBsIHRvIGF2b2lkIGNvbmZ1c2luZyBhYm91dCBpdCBmYWlscyB0byBydW4KKyAgICAjIGFzIGl0IGxhY2tzIGRlcGVuZGVuY3kgb24gc29tZSBwZXJsIG1vdWRsZSBzdWNoIGFzIExXUDo6U2ltcGxlCisgICAgIyBBbmQgdGhpcyBzY3JpcHQgcHJldmlvdXNseSB3b3JrcyBhcyBhIHRvb2wgZm9yIGFuYWx5emluZyBmYWlsdXJlcyBmcm9tIExUUAorICAgICMgcnVucyBvbiB0aGUgT1NETCdzIFNjYWxlYWJsZSBUZXN0IFBsYXRmb3JtIChTVFApIGFuZCBpdCBtYWlubHkgYWNjZXNzZXMKKyAgICAjIGh0dHA6Ly9raGFjay5vc2RsLm9yZyB0byByZXRyaWV2ZSBsdHAgdGVzdCByZXN1bHRzIHJ1biBvbgorICAgICMgT1NETCdzIFNjYWxlYWJsZSBUZXN0IFBsYXRmb3JtLCBidXQgbm93IGh0dHA6Ly9raGFjay5vc2RsLm9yZyB1bmFjY2Vzc2libGUKKyAgICBybSAtcmYgJHtEfS9vcHQvbHRwL2Jpbi9TVFBmYWlsdXJlX3JlcG9ydC5wbAorCiAgICAgIyBDb3B5IFBPU0lYIHRlc3Qgc3VpdGUgaW50byAke0R9L29wdC9sdHAvdGVzdGNhc2VzIGJ5IG1hbnVhbAogICAgIGNwIC1yIHRlc3RjYXNlcy9vcGVuX3Bvc2l4X3Rlc3RzdWl0ZSAke0R9L29wdC9sdHAvdGVzdGNhc2VzCiB9CmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL21haWx4L21haWx4XzEyLjUtNS5iYiBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbWFpbHgvbWFpbHhfMTIuNS01LmJiCmluZGV4IDRhMzJkMmYuLjlkZDcxMGEgMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbWFpbHgvbWFpbHhfMTIuNS01LmJiCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbWFpbHgvbWFpbHhfMTIuNS01LmJiCkBAIC0xMSw3ICsxMSw3IEBACiAKIERFUEVORFMgPSAib3BlbnNzbCIKIAotU1JDX1VSSSA9ICIke0RFQklBTl9NSVJST1J9L21haW4vaC9oZWlybG9vbS1tYWlseC9oZWlybG9vbS1tYWlseF8xMi41Lm9yaWcudGFyLmd6O25hbWU9YXJjaGl2ZSBcCitTUkNfVVJJID0gImh0dHA6Ly9zbmFwc2hvdC5kZWJpYW4ub3JnL2FyY2hpdmUvZGViaWFuLzIwMTYwNzI4VDA0MzQ0M1ovcG9vbC9tYWluL2gvaGVpcmxvb20tbWFpbHgvaGVpcmxvb20tbWFpbHhfMTIuNS5vcmlnLnRhci5nejtuYW1lPWFyY2hpdmUgXAogICAgICAgICAgICBmaWxlOi8vMDAwMS1Eb24tdC1yZXVzZS13ZWFrLXN5bWJvbC1vcHRvcHQtdG8tZml4LUZUQkZTLW9uLW1pcHMucGF0Y2ggXAogICAgICAgICAgICBmaWxlOi8vMDAwMi1QYXRjaGVkLW91dC1TU0wyLXN1cHBvcnQtc2luY2UtaXQtaXMtbm8tbG9uZ2VyLXN1cHBvLnBhdGNoIFwKICAgICAgICAgICAgZmlsZTovLzAwMDMtRml4ZWQtTGludGlhbi13YXJuaW5nLXdhcm5pbmctbWFjcm8tTi1ub3QtZGVmaW5lZC5wYXRjaCBcCkBAIC0yOCw2ICsyOCw3IEBACiAKICMgZm9yIHRoaXMgcGFja2FnZSB3ZSdyZSBtb3N0bHkgaW50ZXJlc3RlZCBpbiB0cmFja2luZyBkZWJpYW4gcGF0Y2hlcywKICMgYW5kIG5vdCBpbiB0aGUgdXBzdHJlYW0gdmVyc2lvbiB3aGVyZSBhbGwgZGV2ZWxvcG1lbnQgaGFzIGVmZmVjdGl2ZWx5IHN0b3BwZWQKK1VQU1RSRUFNX0NIRUNLX1VSSSA9ICIke0RFQklBTl9NSVJST1J9L21haW4vaC9oZWlybG9vbS1tYWlseC8iCiBVUFNUUkVBTV9DSEVDS19SRUdFWCA9ICIoP1A8cHZlcj4oKFxkK1wuKikrKS0oKFxkK1wuKikrKSlcLihkaWZmfGRlYmlhblwudGFyKVwuKGd6fHh6KSIKIAogUyA9ICIke1dPUktESVJ9L2hlaXJsb29tLW1haWx4LTEyLjUiCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL21hbi1wYWdlcy9tYW4tcGFnZXNfNC4wNC5iYiBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbWFuLXBhZ2VzL21hbi1wYWdlc180LjA0LmJiCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2NWRmMGFhLi4wMDAwMDAwCi0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbWFuLXBhZ2VzL21hbi1wYWdlc180LjA0LmJiCisrKyAvZGV2L251bGwKQEAgLTEsMzEgKzAsMCBAQAotU1VNTUFSWSA9ICJMaW51eCBtYW4tcGFnZXMiCi1ERVNDUklQVElPTiA9ICJUaGUgTGludXggbWFuLXBhZ2VzIHByb2plY3QgZG9jdW1lbnRzIHRoZSBMaW51eCBrZXJuZWwgYW5kIEMgbGlicmFyeSBpbnRlcmZhY2VzIHRoYXQgYXJlIGVtcGxveWVkIGJ5IHVzZXIgcHJvZ3JhbXMiCi1TRUNUSU9OID0gImNvbnNvbGUvdXRpbHMiCi1IT01FUEFHRSA9ICJodHRwOi8vd3d3Lmtlcm5lbC5vcmcvcHViL2xpbnV4L2RvY3MvbWFuLXBhZ2VzIgotTElDRU5TRSA9ICJHUEx2MisiCi0KLUxJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL1JFQURNRTttZDU9OGYyYTNkNDMwNTdkNDU4ZTUwNjY3MTQ5ODA1NjdhNjAiCi1TUkNfVVJJID0gIiR7S0VSTkVMT1JHX01JUlJPUn0vbGludXgvZG9jcy8ke0JQTn0vQXJjaGl2ZS8ke0JQfS50YXIuZ3oiCi0KLVNSQ19VUklbbWQ1c3VtXSA9ICI5MDFjZDUyZTBlZTJhOWQ3NTA4YWUxYWIxNWQ1ZTgzNSIKLVNSQ19VUklbc2hhMjU2c3VtXSA9ICJiZmYwNzI0NjJiYWVhOGQxYjhlNDU2ODc1OTMyNGM1ZWQ2Yzc2MDcxNmZlODMwYmNhNzExMjljYzA5ZTAwNjY4IgotCi1SREVQRU5EU18ke1BOfSA9ICJtYW4iCi0KLWRvX2NvbmZpZ3VyZVtub2V4ZWNdID0gIjEiCi1kb19jb21waWxlW25vZXhlY10gPSAiMSIKLQotZG9faW5zdGFsbCgpIHsKLSAgICAgICAgb2VfcnVubWFrZSBpbnN0YWxsIERFU1RESVI9JHtEfQotfQotCi0jIE9ubHkgZGVsaXZlcmVzIG1hbi1wYWdlcyBzbyBGSUxFU18ke1BOfSBnZXRzIGV2ZXJ5dGhpbmcKLUZJTEVTXyR7UE59LWRvYyA9ICIiCi1GSUxFU18ke1BOfSA9ICIke21hbmRpcn0vKiIKLQotaW5oZXJpdCB1cGRhdGUtYWx0ZXJuYXRpdmVzCi0KLUFMVEVSTkFUSVZFX1BSSU9SSVRZID0gIjEwMCIKLUFMVEVSTkFUSVZFXyR7UE59ID0gInBhc3N3ZC41IGdldHNwbmFtLjMiCi1BTFRFUk5BVElWRV9MSU5LX05BTUVbcGFzc3dkLjVdID0gIiR7bWFuZGlyfS9tYW41L3Bhc3N3ZC41IgotQUxURVJOQVRJVkVfTElOS19OQU1FW2dldHNwbmFtLjNdID0gIiR7bWFuZGlyfS9tYW4zL2dldHNwbmFtLjMiCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL21hbi1wYWdlcy9tYW4tcGFnZXNfNC4wNy5iYiBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbWFuLXBhZ2VzL21hbi1wYWdlc180LjA3LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc2YTNmZDgKLS0tIC9kZXYvbnVsbAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL21hbi1wYWdlcy9tYW4tcGFnZXNfNC4wNy5iYgpAQCAtMCwwICsxLDMxIEBACitTVU1NQVJZID0gIkxpbnV4IG1hbi1wYWdlcyIKK0RFU0NSSVBUSU9OID0gIlRoZSBMaW51eCBtYW4tcGFnZXMgcHJvamVjdCBkb2N1bWVudHMgdGhlIExpbnV4IGtlcm5lbCBhbmQgQyBsaWJyYXJ5IGludGVyZmFjZXMgdGhhdCBhcmUgZW1wbG95ZWQgYnkgdXNlciBwcm9ncmFtcyIKK1NFQ1RJT04gPSAiY29uc29sZS91dGlscyIKK0hPTUVQQUdFID0gImh0dHA6Ly93d3cua2VybmVsLm9yZy9wdWIvbGludXgvZG9jcy9tYW4tcGFnZXMiCitMSUNFTlNFID0gIkdQTHYyKyIKKworTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vUkVBRE1FO21kNT04ZjJhM2Q0MzA1N2Q0NThlNTA2NjcxNDk4MDU2N2E2MCIKK1NSQ19VUkkgPSAiJHtLRVJORUxPUkdfTUlSUk9SfS9saW51eC9kb2NzLyR7QlBOfS9BcmNoaXZlLyR7QlB9LnRhci5neiIKKworU1JDX1VSSVttZDVzdW1dID0gIjA1YmExY2IyMWU5OWQwMmJkN2JjMWE1OTM3ODk2NWQyIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gImM5NzMzNTExMzE5MzFmNzcwMGY1ZTlmYmY0ZWYzNjZjNDNlYTdjMTUxNWQyODJlOGQ1ZGI5Yzc3NTkwYzRjOTMiCisKK1JERVBFTkRTXyR7UE59ID0gIm1hbiIKKworZG9fY29uZmlndXJlW25vZXhlY10gPSAiMSIKK2RvX2NvbXBpbGVbbm9leGVjXSA9ICIxIgorCitkb19pbnN0YWxsKCkgeworICAgICAgICBvZV9ydW5tYWtlIGluc3RhbGwgREVTVERJUj0ke0R9Cit9CisKKyMgT25seSBkZWxpdmVyZXMgbWFuLXBhZ2VzIHNvIEZJTEVTXyR7UE59IGdldHMgZXZlcnl0aGluZworRklMRVNfJHtQTn0tZG9jID0gIiIKK0ZJTEVTXyR7UE59ID0gIiR7bWFuZGlyfS8qIgorCitpbmhlcml0IHVwZGF0ZS1hbHRlcm5hdGl2ZXMKKworQUxURVJOQVRJVkVfUFJJT1JJVFkgPSAiMTAwIgorQUxURVJOQVRJVkVfJHtQTn0gPSAicGFzc3dkLjUgZ2V0c3BuYW0uMyIKK0FMVEVSTkFUSVZFX0xJTktfTkFNRVtwYXNzd2QuNV0gPSAiJHttYW5kaXJ9L21hbjUvcGFzc3dkLjUiCitBTFRFUk5BVElWRV9MSU5LX05BTUVbZ2V0c3BuYW0uM10gPSAiJHttYW5kaXJ9L21hbjMvZ2V0c3BuYW0uMyIKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbWMvbWNfNC44LjE1LmJiIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9tYy9tY180LjguMTUuYmIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDZjM2ExNmEuLjAwMDAwMDAKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9tYy9tY180LjguMTUuYmIKKysrIC9kZXYvbnVsbApAQCAtMSw0OSArMCwwIEBACi1TVU1NQVJZID0gIk1pZG5pZ2h0IENvbW1hbmRlciBpcyBhbiBuY3Vyc2VzIGJhc2VkIGZpbGUgbWFuYWdlciIKLUhPTUVQQUdFID0gImh0dHA6Ly93d3cubWlkbmlnaHQtY29tbWFuZGVyLm9yZy8iCi1MSUNFTlNFID0gIkdQTHYzIgotTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9MjcwYmJhZmUzNjBlNzNmOTg0MGJkNzk4MTYyMWY5YzIiCi1TRUNUSU9OID0gImNvbnNvbGUvdXRpbHMiCi1ERVBFTkRTID0gIm5jdXJzZXMgZ2xpYi0yLjAgdXRpbC1saW51eCIKLVJERVBFTkRTXyR7UE59ID0gIm5jdXJzZXMtdGVybWluZm8iCi0KLVNSQ19VUkkgPSAiaHR0cDovL3d3dy5taWRuaWdodC1jb21tYW5kZXIub3JnL2Rvd25sb2Fkcy8ke0JQTn0tJHtQVn0udGFyLmJ6MiBcCi0gICAgICAgICAgICIKLVNSQ19VUklbbWQ1c3VtXSA9ICJkYjQ4Y2UyNmJhNDI1YTYxZWRjNTE5MzBlOTQyMjdmZCIKLVNSQ19VUklbc2hhMjU2c3VtXSA9ICJmNzRlM2RhNzA0MTA5NzVjZGViMjdlZTlhNjZkMWRkODEyMjUwYjZkM2VkZTM2NGJjYTcyOGRkNWE0OGU1NDcxIgotCi1pbmhlcml0IGF1dG90b29scyBnZXR0ZXh0IHBrZ2NvbmZpZwotCi0jCi0jIEJvdGggU2FtYmEgKHNtYikgYW5kIHNmdHAgcmVxdWlyZSBwYWNrYWdlIGRlbGl2ZXJlZCBmcm9tIG1ldGEtb3BlbmVtYmVkZGVkCi0jCi1QQUNLQUdFQ09ORklHID8/PSAiIgotUEFDS0FHRUNPTkZJR1tzbWJdID0gIi0tZW5hYmxlLXZmcy1zbWIsLS1kaXNhYmxlLXZmcy1zbWIsc2FtYmEsIgotUEFDS0FHRUNPTkZJR1tzZnRwXSA9ICItLWVuYWJsZS12ZnMtc2Z0cCwtLWRpc2FibGUtdmZzLXNmdHAsbGlic3NoMiwiCi0KLUVYVFJBX09FQ09ORiA9ICItLXdpdGgtc2NyZWVuPW5jdXJzZXMgLS13aXRob3V0LWdwbS1tb3VzZSAtLXdpdGhvdXQteCIKLQotZG9faW5zdGFsbF9hcHBlbmQgKCkgewotCXNlZCAtaSAtZSAnMXMsIyEuKnBlcmwsIyEke2JpbmRpcn0vZW52IHBlcmwsJyAke0R9JHtsaWJleGVjZGlyfS9tYy9leHRmcy5kLyoKLQlzZWQgLWkgLWUgJzFzLCMhLipweXRob24sIyEke2JpbmRpcn0vZW52IHB5dGhvbiwnICR7RH0ke2xpYmV4ZWNkaXJ9L21jL2V4dGZzLmQvKgotfQotCi1QQUNLQUdFUyA9KyAiJHtCUE59LWhlbHBlcnMtcGVybCAke0JQTn0taGVscGVycy1weXRob24gJHtCUE59LWhlbHBlcnMgJHtCUE59LWZpc2giCi0KLVNVTU1BUllfJHtCUE59LWhlbHBlcnMtcGVybCA9ICJNaWRuaWdodCBDb21tYW5kZXIgUGVybC1iYXNlZCBoZWxwZXIgc2NyaXB0cyIKLUZJTEVTXyR7QlBOfS1oZWxwZXJzLXBlcmwgPSAiJHtsaWJleGVjZGlyfS9tYy9leHRmcy5kL2ErICR7bGliZXhlY2Rpcn0vbWMvZXh0ZnMuZC9hcHQrIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHtsaWJleGVjZGlyfS9tYy9leHRmcy5kL2RlYiAke2xpYmV4ZWNkaXJ9L21jL2V4dGZzLmQvZGViYSBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICR7bGliZXhlY2Rpcn0vbWMvZXh0ZnMuZC9kZWJkICR7bGliZXhlY2Rpcn0vbWMvZXh0ZnMuZC9kcGtnKyBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICR7bGliZXhlY2Rpcn0vbWMvZXh0ZnMuZC9tYWlsZnMgJHtsaWJleGVjZGlyfS9tYy9leHRmcy5kL3BhdGNoZnMgXCAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHtsaWJleGVjZGlyfS9tYy9leHRmcy5kL3JwbXMrICR7bGliZXhlY2Rpcn0vbWMvZXh0ZnMuZC91bGliIFwgCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICR7bGliZXhlY2Rpcn0vbWMvZXh0ZnMuZC91emlwIgotUkRFUEVORFNfJHtCUE59LWhlbHBlcnMtcGVybCA9ICJwZXJsIgotCi1TVU1NQVJZXyR7QlBOfS1oZWxwZXJzLXB5dGhvbiA9ICJNaWRuaWdodCBDb21tYW5kZXIgUHl0aG9uLWJhc2VkIGhlbHBlciBzY3JpcHRzIgotRklMRVNfJHtCUE59LWhlbHBlcnMtcHl0aG9uID0gIiR7bGliZXhlY2Rpcn0vbWMvZXh0ZnMuZC9zMysgJHtsaWJleGVjZGlyfS9tYy9leHRmcy5kL3VjMTU0MSIKLVJERVBFTkRTXyR7QlBOfS1oZWxwZXJzLXB5dGhvbiA9ICJweXRob24iCi0KLVNVTU1BUllfJHtCUE59LWhlbHBlcnMgPSAiTWlkbmlnaHQgQ29tbWFuZGVyIHNoZWxsIGhlbHBlciBzY3JpcHRzIgotRklMRVNfJHtCUE59LWhlbHBlcnMgPSAiJHtsaWJleGVjZGlyfS9tYy9leHRmcy5kLyogJHtsaWJleGVjZGlyfS9tYy9leHQuZC8qIgotCi1TVU1NQVJZXyR7QlBOfS1maXNoID0gIk1pZG5pZ2h0IENvbW1hbmRlciBGaXNoIHNjcmlwdHMiCi1GSUxFU18ke0JQTn0tZmlzaCA9ICIke2xpYmV4ZWNkaXJ9L21jL2Zpc2giCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL21jL21jXzQuOC4xNy5iYiBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbWMvbWNfNC44LjE3LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE1YzRlY2UKLS0tIC9kZXYvbnVsbAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL21jL21jXzQuOC4xNy5iYgpAQCAtMCwwICsxLDQ5IEBACitTVU1NQVJZID0gIk1pZG5pZ2h0IENvbW1hbmRlciBpcyBhbiBuY3Vyc2VzIGJhc2VkIGZpbGUgbWFuYWdlciIKK0hPTUVQQUdFID0gImh0dHA6Ly93d3cubWlkbmlnaHQtY29tbWFuZGVyLm9yZy8iCitMSUNFTlNFID0gIkdQTHYzIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9MjcwYmJhZmUzNjBlNzNmOTg0MGJkNzk4MTYyMWY5YzIiCitTRUNUSU9OID0gImNvbnNvbGUvdXRpbHMiCitERVBFTkRTID0gIm5jdXJzZXMgZ2xpYi0yLjAgdXRpbC1saW51eCIKK1JERVBFTkRTXyR7UE59ID0gIm5jdXJzZXMtdGVybWluZm8iCisKK1NSQ19VUkkgPSAiaHR0cDovL3d3dy5taWRuaWdodC1jb21tYW5kZXIub3JnL2Rvd25sb2Fkcy8ke0JQTn0tJHtQVn0udGFyLmJ6MiBcCisgICAgICAgICAgICIKK1NSQ19VUklbbWQ1c3VtXSA9ICI2ZTljMDcwNjZlNDBhZjA2YjI2M2ExM2ZhZDE3YTA3ZiIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICI2NmQwY2IzN2JhYWVkOGVmOTMwZjhhZDI1YTYzNGFkYWQ0ZjI2NGViNjE4MjA4OTM5MjBhYzg3YjlkZmI3ODNiIgorCitpbmhlcml0IGF1dG90b29scyBnZXR0ZXh0IHBrZ2NvbmZpZworCisjCisjIEJvdGggU2FtYmEgKHNtYikgYW5kIHNmdHAgcmVxdWlyZSBwYWNrYWdlIGRlbGl2ZXJlZCBmcm9tIG1ldGEtb3BlbmVtYmVkZGVkCisjCitQQUNLQUdFQ09ORklHID8/PSAiIgorUEFDS0FHRUNPTkZJR1tzbWJdID0gIi0tZW5hYmxlLXZmcy1zbWIsLS1kaXNhYmxlLXZmcy1zbWIsc2FtYmEsIgorUEFDS0FHRUNPTkZJR1tzZnRwXSA9ICItLWVuYWJsZS12ZnMtc2Z0cCwtLWRpc2FibGUtdmZzLXNmdHAsbGlic3NoMiwiCisKK0VYVFJBX09FQ09ORiA9ICItLXdpdGgtc2NyZWVuPW5jdXJzZXMgLS13aXRob3V0LWdwbS1tb3VzZSAtLXdpdGhvdXQteCIKKworZG9faW5zdGFsbF9hcHBlbmQgKCkgeworCXNlZCAtaSAtZSAnMXMsIyEuKnBlcmwsIyEke2JpbmRpcn0vZW52IHBlcmwsJyAke0R9JHtsaWJleGVjZGlyfS9tYy9leHRmcy5kLyoKKwlzZWQgLWkgLWUgJzFzLCMhLipweXRob24sIyEke2JpbmRpcn0vZW52IHB5dGhvbiwnICR7RH0ke2xpYmV4ZWNkaXJ9L21jL2V4dGZzLmQvKgorfQorCitQQUNLQUdFUyA9KyAiJHtCUE59LWhlbHBlcnMtcGVybCAke0JQTn0taGVscGVycy1weXRob24gJHtCUE59LWhlbHBlcnMgJHtCUE59LWZpc2giCisKK1NVTU1BUllfJHtCUE59LWhlbHBlcnMtcGVybCA9ICJNaWRuaWdodCBDb21tYW5kZXIgUGVybC1iYXNlZCBoZWxwZXIgc2NyaXB0cyIKK0ZJTEVTXyR7QlBOfS1oZWxwZXJzLXBlcmwgPSAiJHtsaWJleGVjZGlyfS9tYy9leHRmcy5kL2ErICR7bGliZXhlY2Rpcn0vbWMvZXh0ZnMuZC9hcHQrIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHtsaWJleGVjZGlyfS9tYy9leHRmcy5kL2RlYiAke2xpYmV4ZWNkaXJ9L21jL2V4dGZzLmQvZGViYSBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICR7bGliZXhlY2Rpcn0vbWMvZXh0ZnMuZC9kZWJkICR7bGliZXhlY2Rpcn0vbWMvZXh0ZnMuZC9kcGtnKyBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICR7bGliZXhlY2Rpcn0vbWMvZXh0ZnMuZC9tYWlsZnMgJHtsaWJleGVjZGlyfS9tYy9leHRmcy5kL3BhdGNoZnMgXCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHtsaWJleGVjZGlyfS9tYy9leHRmcy5kL3JwbXMrICR7bGliZXhlY2Rpcn0vbWMvZXh0ZnMuZC91bGliIFwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICR7bGliZXhlY2Rpcn0vbWMvZXh0ZnMuZC91emlwIgorUkRFUEVORFNfJHtCUE59LWhlbHBlcnMtcGVybCA9ICJwZXJsIgorCitTVU1NQVJZXyR7QlBOfS1oZWxwZXJzLXB5dGhvbiA9ICJNaWRuaWdodCBDb21tYW5kZXIgUHl0aG9uLWJhc2VkIGhlbHBlciBzY3JpcHRzIgorRklMRVNfJHtCUE59LWhlbHBlcnMtcHl0aG9uID0gIiR7bGliZXhlY2Rpcn0vbWMvZXh0ZnMuZC9zMysgJHtsaWJleGVjZGlyfS9tYy9leHRmcy5kL3VjMTU0MSIKK1JERVBFTkRTXyR7QlBOfS1oZWxwZXJzLXB5dGhvbiA9ICJweXRob24iCisKK1NVTU1BUllfJHtCUE59LWhlbHBlcnMgPSAiTWlkbmlnaHQgQ29tbWFuZGVyIHNoZWxsIGhlbHBlciBzY3JpcHRzIgorRklMRVNfJHtCUE59LWhlbHBlcnMgPSAiJHtsaWJleGVjZGlyfS9tYy9leHRmcy5kLyogJHtsaWJleGVjZGlyfS9tYy9leHQuZC8qIgorCitTVU1NQVJZXyR7QlBOfS1maXNoID0gIk1pZG5pZ2h0IENvbW1hbmRlciBGaXNoIHNjcmlwdHMiCitGSUxFU18ke0JQTn0tZmlzaCA9ICIke2xpYmV4ZWNkaXJ9L21jL2Zpc2giCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL21kYWRtL2ZpbGVzLzAwMDEtRml4LXNvbWUtdHlwZS1jb21wYXJpc29uLXByb2JsZW1zLnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9tZGFkbS9maWxlcy8wMDAxLUZpeC1zb21lLXR5cGUtY29tcGFyaXNvbi1wcm9ibGVtcy5wYXRjaAppbmRleCBlZTQ4MmI1Li5mODI5NDY3IDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL21kYWRtL2ZpbGVzLzAwMDEtRml4LXNvbWUtdHlwZS1jb21wYXJpc29uLXByb2JsZW1zLnBhdGNoCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbWRhZG0vZmlsZXMvMDAwMS1GaXgtc29tZS10eXBlLWNvbXBhcmlzb24tcHJvYmxlbXMucGF0Y2gKQEAgLTExLDcgKzExLDcgQEAKIAogVXBzdHJlYW0tU3RhdHVzOiBCYWNrcG9ydAogCi1TaWduZWQtb2ZmLWJ5IDogWGlhbyBOaSA8eG5pQHJlZGhhdC5jb20+CitTaWduZWQtb2ZmLWJ5OiA6IFhpYW8gTmkgPHhuaUByZWRoYXQuY29tPgogU2lnbmVkLW9mZi1ieTogTWF4aW4gQi4gSm9obiA8bWF4aW4uam9obkBpbnRlbC5jb20+CiAtLS0KIApkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9tZGFkbS9maWxlcy8wMDAxLW1kYWRtLmgtVW5kZWZpbmUtZHByaW50Zi1iZWZvcmUtcmVkZWZpbmluZy5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbWRhZG0vZmlsZXMvMDAwMS1tZGFkbS5oLVVuZGVmaW5lLWRwcmludGYtYmVmb3JlLXJlZGVmaW5pbmcucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGNmODA5MgotLS0gL2Rldi9udWxsCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbWRhZG0vZmlsZXMvMDAwMS1tZGFkbS5oLVVuZGVmaW5lLWRwcmludGYtYmVmb3JlLXJlZGVmaW5pbmcucGF0Y2gKQEAgLTAsMCArMSw0MyBAQAorRnJvbSA2ZDM2OWU4ZjIyNjU5NDYzMmNlNDI2MDEyOTUwOWRhZjcwMzBkZTBhIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KK0RhdGU6IE1vbiwgOSBNYXkgMjAxNiAyMjowMzo1NyArMDAwMAorU3ViamVjdDogW1BBVENIXSBtZGFkbS5oOiBVbmRlZmluZSBkcHJpbnRmIGJlZm9yZSByZWRlZmluaW5nCisKK2RwcmludGYgaXMgYWxzbyBkZWZpbmVkIGluIGxpYmMgc2VlCit1c3IvaW5jbHVkZS9iaXRzL3N0ZGlvMi5oLCB0aGlzIGNvbWVzIGludG8KK3BsYXkgZXNwZWNpYWxseSB3aGVuIGZvcnRpZnkgc291cmNlcyBpcyBlbmFibGVkCithbmQgY29tcGlsZXJzIGxpa2UgY2xhbmcgcmVwb3J0cyB0aGUgb3ZlcnJpZGUKKworSW4gZmlsZSBpbmNsdWRlZCBmcm9tIHBvbGljeS5jOjI1OgorLi9tZGFkbS5oOjE1NjI6OTogZXJyb3I6ICdkcHJpbnRmJyBtYWNybyByZWRlZmluZWQgWy1XZXJyb3IsLVdtYWNyby1yZWRlZmluZWRdCisgICAgICAgIF4KKy9tbnQvb2Uvb3BlbmVtYmVkZGVkLWNvcmUvYnVpbGQvdG1wLWdsaWJjL3N5c3Jvb3RzL3FlbXV4ODYvdXNyL2luY2x1ZGUvYml0cy9zdGRpbzIuaDoxNDU6MTI6IG5vdGU6IHByZXZpb3VzIGRlZmluaXRpb24gaXMgaGVyZQorCitTaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorLS0tCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworIG1kYWRtLmggfCAyICsrCisgMSBmaWxlIGNoYW5nZWQsIDIgaW5zZXJ0aW9ucygrKQorCitkaWZmIC0tZ2l0IGEvbWRhZG0uaCBiL21kYWRtLmgKK2luZGV4IDIzMGU2MGYuLjhjOGY0ZDEgMTAwNzU1CistLS0gYS9tZGFkbS5oCisrKysgYi9tZGFkbS5oCitAQCAtMTU1NCwxMSArMTU1NCwxMyBAQCBzdGF0aWMgaW5saW5lIGNoYXIgKnRvX3N1YmFycmF5KHN0cnVjdCBtZHN0YXRfZW50ICplbnQsIGNoYXIgKmNvbnRhaW5lcikKKyB9CisgCisgI2lmZGVmIERFQlVHCisrI3VuZGVmIGRwcmludGYKKyAjZGVmaW5lIGRwcmludGYoZm10LCBhcmcuLi4pIFwKKyAJZnByaW50ZihzdGRlcnIsICIlczogJXM6ICJmbXQsIE5hbWUsIF9fZnVuY19fLCAjI2FyZykKKyAjZGVmaW5lIGRwcmludGZfY29udChmbXQsIGFyZy4uLikgXAorIAlmcHJpbnRmKHN0ZGVyciwgZm10LCAjI2FyZykKKyAjZWxzZQorKyN1bmRlZiBkcHJpbnRmCisgI2RlZmluZSBkcHJpbnRmKGZtdCwgYXJnLi4uKSBcCisgICAgICAgICAoeyBpZiAoMCkgZnByaW50ZihzdGRlcnIsICIlczogJXM6ICIgZm10LCBOYW1lLCBfX2Z1bmNfXywgIyNhcmcpOyAwOyB9KQorICNkZWZpbmUgZHByaW50Zl9jb250KGZtdCwgYXJnLi4uKSBcCistLSAKKzEuOS4xCisKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbWRhZG0vZmlsZXMvMDAwMS1yYWlkNmNoZWNrLUZpeC1pZi1lbHNlLWluZGVudGF0aW9uLnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9tZGFkbS9maWxlcy8wMDAxLXJhaWQ2Y2hlY2stRml4LWlmLWVsc2UtaW5kZW50YXRpb24ucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGIzNGI4NAotLS0gL2Rldi9udWxsCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbWRhZG0vZmlsZXMvMDAwMS1yYWlkNmNoZWNrLUZpeC1pZi1lbHNlLWluZGVudGF0aW9uLnBhdGNoCkBAIC0wLDAgKzEsMzcgQEAKK0Zyb20gMWIwYWExZGViZjZmYmU5OTIzYzlhYWM2NzFkMjg5NGY3NmMzMmY5ZCBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CitEYXRlOiBXZWQsIDIwIEFwciAyMDE2IDE2OjM4OjEzICswMDAwCitTdWJqZWN0OiBbUEFUQ0hdIHJhaWQ2Y2hlY2s6IEZpeCBpZi1lbHNlIGluZGVudGF0aW9uCisKK2djYyA2IHdhcm5zIGFib3V0IGFtYmlndWl0eSBkdWUgdG8gdGhpcyBpbmRlbnRhdGlvbgorfCByYWlkNmNoZWNrLmM6IEluIGZ1bmN0aW9uICdtYW51YWxfcmVwYWlyJzoKK3wgcmFpZDZjaGVjay5jOjI2Nzo0OiBlcnJvcjogdGhpcyAnZWxzZScgY2xhdXNlIGRvZXMgbm90IGd1YXJkLi4uIFstV2Vycm9yPW1pc2xlYWRpbmctaW5kZW50YXRpb25dCit8ICAgICBlbHNlCit8ICAgICBefn5+Cit8IHJhaWQ2Y2hlY2suYzoyNjk6NTogbm90ZTogLi4udGhpcyBzdGF0ZW1lbnQsIGJ1dCB0aGUgbGF0dGVyIGlzIG1pc2xlYWRpbmdseSBpbmRlbnRlZCBhcyBpZiBpdCBpcyBndWFyZGVkIGJ5IHRoZSAnZWxzZScKK3wgICAgICBwcmludGYoIlJlcGFpcmluZyBEKCVkKSBhbmQgUFxuIiwgZmFpbGVkX2RhdGEpOworfCAgICAgIF5+fn5+fgorCitTaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorLS0tCitVcHN0cmVhbS1TdGF0dXM6IFN1Ym1pdHRlZAorCisgcmFpZDZjaGVjay5jIHwgMiArLQorIDEgZmlsZSBjaGFuZ2VkLCAxIGluc2VydGlvbigrKSwgMSBkZWxldGlvbigtKQorCitkaWZmIC0tZ2l0IGEvcmFpZDZjaGVjay5jIGIvcmFpZDZjaGVjay5jCitpbmRleCBhZDdmZmU3Li40MDliMWI2IDEwMDY0NAorLS0tIGEvcmFpZDZjaGVjay5jCisrKysgYi9yYWlkNmNoZWNrLmMKK0BAIC0yNjYsNyArMjY2LDcgQEAgaW50IG1hbnVhbF9yZXBhaXIoaW50IGNodW5rX3NpemUsIGludCBzeW5kcm9tZV9kaXNrcywKKyAJCQkJZmFpbGVkX2RhdGEgPSBmYWlsZWRfc2xvdDI7CisgCQkJZWxzZQorIAkJCQlmYWlsZWRfZGF0YSA9IGZhaWxlZF9zbG90MTsKKy0JCQkJcHJpbnRmKCJSZXBhaXJpbmcgRCglZCkgYW5kIFBcbiIsIGZhaWxlZF9kYXRhKTsKKysJCQlwcmludGYoIlJlcGFpcmluZyBEKCVkKSBhbmQgUFxuIiwgZmFpbGVkX2RhdGEpOworIAkJCXJhaWQ2X2RhdGFwX3JlY292KHN5bmRyb21lX2Rpc2tzKzIsIGNodW5rX3NpemUsCisgCQkJCQkgIGZhaWxlZF9kYXRhLCAodWludDhfdCoqKWJsb2NrcywgMSk7CisgCQl9IGVsc2UgeworLS0gCisxLjkuMQorCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL21kYWRtL2ZpbGVzL21kYWRtLTMuMi4yX2ZpeF9mb3JfeDMyLnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9tZGFkbS9maWxlcy9tZGFkbS0zLjIuMl9maXhfZm9yX3gzMi5wYXRjaAppbmRleCA0MGFjYzE0Li44NGMzODJkIDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL21kYWRtL2ZpbGVzL21kYWRtLTMuMi4yX2ZpeF9mb3JfeDMyLnBhdGNoCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbWRhZG0vZmlsZXMvbWRhZG0tMy4yLjJfZml4X2Zvcl94MzIucGF0Y2gKQEAgLTYsNyArNiw3IEBACiBBcyB0aGUgYml0YmFrZSBkZWZpbmVkIENDIGlzIGdvb2QsIHRoZXJlIGlzIG5vIG5lZWQgdG8gcmVkZmluZSBDQyBpbiB0aGUgCiBtYWtlIGZpbGUsIGhlbmNlIG1ha2luZyB0aGUgQ0MgZGVmaW5pdGlvbiBpbiB0aGUgTWFrZWZpbGUgY29uZGl0aW9uYWwuCiAKLVNpZ25lZC1PZmYtQnk6IE5pdGluIEEgS2FtYmxlIDxuaXRpbi5hLmthbWJsZUBpbnRlbC5jb20+IDIwMTEvMTIvMDcKK1NpZ25lZC1vZmYtYnk6IE5pdGluIEEgS2FtYmxlIDxuaXRpbi5hLmthbWJsZUBpbnRlbC5jb20+IDIwMTEvMTIvMDcKIAogSW5kZXg6IG1kYWRtLTMuMy9NYWtlZmlsZQogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9tZGFkbS9tZGFkbV8zLjQuYmIgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL21kYWRtL21kYWRtXzMuNC5iYgppbmRleCAxNDJkZmRkLi4yNjEwNTRlIDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL21kYWRtL21kYWRtXzMuNC5iYgorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL21kYWRtL21kYWRtXzMuNC5iYgpAQCAtMTksNyArMTksOSBAQAogICAgICAgICAgICBmaWxlOi8vMDAwMS1GaXgtc29tZS10eXBlLWNvbXBhcmlzb24tcHJvYmxlbXMucGF0Y2ggXAogICAgICAgICAgICBmaWxlOi8vMDAwMS1GaXgtdGhlLXBhdGgtb2YtY29yb3N5bmMtYW5kLWRsbS1oZWFkZXItZmlsZXMtY2hlY2sucGF0Y2ggXAogICAgICAgICAgICBmaWxlOi8vcnVuLXB0ZXN0IFwKLQkgICIKKyAgICAgICAgICAgZmlsZTovLzAwMDEtcmFpZDZjaGVjay1GaXgtaWYtZWxzZS1pbmRlbnRhdGlvbi5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly8wMDAxLW1kYWRtLmgtVW5kZWZpbmUtZHByaW50Zi1iZWZvcmUtcmVkZWZpbmluZy5wYXRjaCBcCisgICAgICAgICAgICIKIFNSQ19VUklbbWQ1c3VtXSA9ICIwNGI4YjIxZjYzNzU0MDM1MGY4NTE3YzdlNjhkM2M2MyIKIFNSQ19VUklbc2hhMjU2c3VtXSA9ICIyN2QwYmU0NjI3ZDM4YTEyZGRjZDFjMWMzNzIxZDY0OWQ0ZTg5ZTEwOTM5MTQ0OTdlMjJiNTcyNDVjZGE4ODA4IgogCkBAIC00NCw4ICs0Niw2IEBACiAJYXV0b3Rvb2xzX2RvX2luc3RhbGwKIH0KIAotRklMRVNfJHtQTn0gKz0gIiR7YmFzZV9saWJkaXJ9L3VkZXYvcnVsZXMuZC8qLnJ1bGVzIgotCiBpbmhlcml0IHB0ZXN0CiAKIGRvX2NvbXBpbGVfcHRlc3QoKSB7CmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL21zbXRwL21zbXRwXzEuNi4zLmJiIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9tc210cC9tc210cF8xLjYuMy5iYgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNmRiZDc4Zi4uMDAwMDAwMAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL21zbXRwL21zbXRwXzEuNi4zLmJiCisrKyAvZGV2L251bGwKQEAgLTEsMzAgKzAsMCBAQAotU1VNTUFSWSA9ICJtc210cCBpcyBhbiBTTVRQIGNsaWVudCIKLURFU0NSSVBUSU9OID0gIkEgc2VuZG1haWwgcmVwbGFjZW1lbnQgZm9yIHVzZSBpbiBNVEFzIGxpa2UgbXV0dCIKLUhPTUVQQUdFID0gImh0dHA6Ly9tc210cC5zb3VyY2Vmb3JnZS5uZXQvIgotU0VDVElPTiA9ICJjb25zb2xlL25ldHdvcmsiCi0KLUxJQ0VOU0UgPSAiR1BMdjMiCi1ERVBFTkRTID0gInpsaWIgZ251dGxzIgotCi0jQ09QWUlORyBvciBMaWNlbmNlCi1MSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT1kMzIyMzliY2I2NzM0NjNhYjg3NGU4MGQ0N2ZhZTUwNCIKLQotU1JDX1VSSSA9ICJodHRwOi8vc291cmNlZm9yZ2UubmV0L3Byb2plY3RzL21zbXRwL2ZpbGVzL21zbXRwLyR7UFZ9LyR7QlBOfS0ke1BWfS50YXIueHogXAotICAgICAgICAgICIKLQotU1JDX1VSSVttZDVzdW1dID0gIjZkOTM4NGMwOTQwNWRiOTQ3NmJlYWEyMjM3YzU2NzA1IgotU1JDX1VSSVtzaGEyNTZzdW1dID0gImY5ODJiZTA2OWMwNzcyYzNlZTgzOTI1ZjU1MmY1ZGFjNWZiMzA3ZDJkMWM2ODIwMmY5OTI2YmIxM2I3NTczNTUiCi0KLWluaGVyaXQgZ2V0dGV4dCBhdXRvdG9vbHMgdXBkYXRlLWFsdGVybmF0aXZlcyBwa2djb25maWcKLQotRVhUUkFfT0VDT05GICs9ICItLXdpdGhvdXQtbGlic2VjcmV0IC0td2l0aG91dC1saWJnc2FzbCAtLXdpdGhvdXQtbGliaWRuIgotCi1BTFRFUk5BVElWRV8ke1BOfSA9ICJzZW5kbWFpbCIKLUFMVEVSTkFUSVZFX1RBUkdFVFtzZW5kbWFpbF0gPSAiJHtiaW5kaXJ9L21zbXRwIgotQUxURVJOQVRJVkVfTElOS19OQU1FW3NlbmRtYWlsXSA9ICIke3NiaW5kaXJ9L3NlbmRtYWlsIgotQUxURVJOQVRJVkVfUFJJT1JJVFkgPSAiMTAwIgotCi1wa2dfcG9zdGluc3RfJHtQTn1fbGludXhzdGRiYXNlICgpIHsKLQkjIC91c3IvbGliL3NlbmRtaWFsIGlzIHJlcXVpcmVkIGJ5IExTQiBjb3JlIHRlc3QKLQlbICEgLUwgJEQvdXNyL2xpYi9zZW5kbWFpbCBdICYmIGxuIC1zZiAke3NiaW5kaXJ9L3NlbmRtYWlsICREL3Vzci9saWIvCi19CmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL21zbXRwL21zbXRwXzEuNi41LmJiIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9tc210cC9tc210cF8xLjYuNS5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kMGMzOWViCi0tLSAvZGV2L251bGwKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9tc210cC9tc210cF8xLjYuNS5iYgpAQCAtMCwwICsxLDMwIEBACitTVU1NQVJZID0gIm1zbXRwIGlzIGFuIFNNVFAgY2xpZW50IgorREVTQ1JJUFRJT04gPSAiQSBzZW5kbWFpbCByZXBsYWNlbWVudCBmb3IgdXNlIGluIE1UQXMgbGlrZSBtdXR0IgorSE9NRVBBR0UgPSAiaHR0cDovL21zbXRwLnNvdXJjZWZvcmdlLm5ldC8iCitTRUNUSU9OID0gImNvbnNvbGUvbmV0d29yayIKKworTElDRU5TRSA9ICJHUEx2MyIKK0RFUEVORFMgPSAiemxpYiBnbnV0bHMiCisKKyNDT1BZSU5HIG9yIExpY2VuY2UKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PWQzMjIzOWJjYjY3MzQ2M2FiODc0ZTgwZDQ3ZmFlNTA0IgorCitTUkNfVVJJID0gImh0dHA6Ly9zb3VyY2Vmb3JnZS5uZXQvcHJvamVjdHMvbXNtdHAvZmlsZXMvbXNtdHAvJHtQVn0vJHtCUE59LSR7UFZ9LnRhci54eiBcCisgICAgICAgICAgIgorCitTUkNfVVJJW21kNXN1bV0gPSAiNTBhOGM5YmI3MmY4MjIyNzc5ZGI2YjRhYWUyOTY1ZTAiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiNzZhMGQ2MDY5M2M3ZTY1ZDBjN2ExMmYwMWQzMDA4ODJkMjgwYjFlMWJlMDIwMmY1NDczMGFlNDRkNDRhNTAwNiIKKworaW5oZXJpdCBnZXR0ZXh0IGF1dG90b29scyB1cGRhdGUtYWx0ZXJuYXRpdmVzIHBrZ2NvbmZpZworCitFWFRSQV9PRUNPTkYgKz0gIi0td2l0aG91dC1saWJzZWNyZXQgLS13aXRob3V0LWxpYmdzYXNsIC0td2l0aG91dC1saWJpZG4iCisKK0FMVEVSTkFUSVZFXyR7UE59ID0gInNlbmRtYWlsIgorQUxURVJOQVRJVkVfVEFSR0VUW3NlbmRtYWlsXSA9ICIke2JpbmRpcn0vbXNtdHAiCitBTFRFUk5BVElWRV9MSU5LX05BTUVbc2VuZG1haWxdID0gIiR7c2JpbmRpcn0vc2VuZG1haWwiCitBTFRFUk5BVElWRV9QUklPUklUWSA9ICIxMDAiCisKK3BrZ19wb3N0aW5zdF8ke1BOfV9saW51eHN0ZGJhc2UgKCkgeworCSMgL3Vzci9saWIvc2VuZG1pYWwgaXMgcmVxdWlyZWQgYnkgTFNCIGNvcmUgdGVzdAorCVsgISAtTCAkRC91c3IvbGliL3NlbmRtYWlsIF0gJiYgbG4gLXNmICR7c2JpbmRpcn0vc2VuZG1haWwgJEQvdXNyL2xpYi8KK30KZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbmV0LXRvb2xzL25ldC10b29scy8wMDAxLWxpYi1pbmV0Ni5jLUlORVQ2X3JyZXNvbHZlLXZhcmlvdXMtZml4ZXMucGF0Y2ggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL25ldC10b29scy9uZXQtdG9vbHMvMDAwMS1saWItaW5ldDYuYy1JTkVUNl9ycmVzb2x2ZS12YXJpb3VzLWZpeGVzLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhiZTQ1Y2MKLS0tIC9kZXYvbnVsbAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL25ldC10b29scy9uZXQtdG9vbHMvMDAwMS1saWItaW5ldDYuYy1JTkVUNl9ycmVzb2x2ZS12YXJpb3VzLWZpeGVzLnBhdGNoCkBAIC0wLDAgKzEsODcgQEAKK0Zyb20gMDhhYmZjZDkyM2U5ZjM3ZDE5MDJkYjI2NzcxYjFkYzY3MzFlYjI2NSBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEppcmkgUG9wZWxrYSA8anBvcGVsa2FAcmVkaGF0LmNvbT4KK0RhdGU6IEZyaSwgMjcgU2VwIDIwMTMgMTg6NDA6MDYgKzAyMDAKK1N1YmplY3Q6IFtQQVRDSCAxLzFdIGxpYi9pbmV0Ni5jOklORVQ2X3JyZXNvbHZlKCkgLSB2YXJpb3VzIGZpeGVzCisKKzEpIEZhbGwtYmFjayB0byBudW1lcmljIGFkZHJlc3MgaWYgZ2V0bmFtZWluZm8gZmFpbHMuCisgICBSZXZlcnNlIGxvb2t1cCBpcyBub3QgbWFuZGF0b3J5LCB0aGVyZWZvcmUgaXRzIGZhaWwKKyAgIGlzIG5vdCBhbiBlcnJvci4gSnVzdCByZXR1cm4gbnVtZXJpYyBhZGRyZXNzIGluIHRoYXQgY2FzZS4KKyAgIFRoaXMgbWFrZXMgbmV0c3RhdC9yb3V0ZSBzaG93IElQdjYgYWRkcmVzcyBpbnN0ZWFkIG9mCisgICBbVU5LTk9XTl0gaW4gY2FzZSBvZiBETlMgcHJvYmxlbXMuCisKKzIpIFBhc3MgbGVuZ3RoIG9mICduYW1lJyBidWZmZXIgaW50byBmdW5jdGlvbi4KKyAgICduYW1lJyBpcyBhIHBvaW50ZXIgYW5kIHRoZXJlZm9yZSBzaXplb2YobmFtZSkKKyAgIHJldHVybnMgc2l6ZSBvZiBwb2ludGVyIGFuZCBub3Qgc2l6ZSBvZiB0aGUgYnVmZmVyLgorICAgc2VlIGh0dHA6Ly9zdGFja292ZXJmbG93LmNvbS9xdWVzdGlvbnMvMTQyOTg3MTAvYy1wb2ludGVycy1hbmQtYXJyYXlzLXNpemVvZi1vcGVyYXRvcgorICAgVGhlIHNpemVvZigpIHVzYWdlIHdhcyBhZGRlZCB3aXRoIGNvbW1pdCA2MDQ3ODVhZGMsCisgICBzbyBJIGNoZWNrZWQgYWxsIHRoZSBvdGhlciBjaGFuZ2VzIGluIHRoYXQgY29tbWl0CisgICBhbmQgdGhleSBzZWVtIHRvIGJlIE9LLgorCiszKSByZW1vdmUgdW51c2VkICdzJyB2YXJpYWJsZQorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworU2lnbmVkLW9mZi1ieTogU2hhbiBIYWkgPHNoYW4uaGFpQHdpbmRyaXZlci5jb20+CitTaWduZWQtb2ZmLWJ5OiBKaWFuY2h1YW4gV2FuZyA8amlhbmNodWFuLndhbmdAd2luZHJpdmVyLmNvbT4KKy0tLQorIGxpYi9pbmV0Ni5jIHwgMjEgKysrKysrKysrKy0tLS0tLS0tLS0tCisgMSBmaWxlIGNoYW5nZWQsIDEwIGluc2VydGlvbnMoKyksIDExIGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvbGliL2luZXQ2LmMgYi9saWIvaW5ldDYuYworaW5kZXggOWE0ODRhMC4uMmE5YzQ1OSAxMDA2NDQKKy0tLSBhL2xpYi9pbmV0Ni5jCisrKysgYi9saWIvaW5ldDYuYworQEAgLTg0LDEwICs4NCw5IEBAIHN0YXRpYyBpbnQgSU5FVDZfcmVzb2x2ZShjaGFyICpuYW1lLCBzdHJ1Y3Qgc29ja2FkZHJfaW42ICpzaW42KQorICNlbmRpZgorIAorIAorLXN0YXRpYyBpbnQgSU5FVDZfcnJlc29sdmUoY2hhciAqbmFtZSwgc3RydWN0IHNvY2thZGRyX2luNiAqc2luNiwgaW50IG51bWVyaWMpCisrc3RhdGljIGludCBJTkVUNl9ycmVzb2x2ZShjaGFyICpuYW1lLCBzaXplX3QgbmFtZWxlbiwKKysJCQkgIHN0cnVjdCBzb2NrYWRkcl9pbjYgKnNpbjYsIGludCBudW1lcmljKQorIHsKKy0gICAgaW50IHM7CistCisgICAgIC8qIEdybXBmLiAtRnZLICovCisgICAgIGlmIChzaW42LT5zaW42X2ZhbWlseSAhPSBBRl9JTkVUNikgeworICNpZmRlZiBERUJVRworQEAgLTk4LDIxICs5NywyMCBAQCBzdGF0aWMgaW50IElORVQ2X3JyZXNvbHZlKGNoYXIgKm5hbWUsIHN0cnVjdCBzb2NrYWRkcl9pbjYgKnNpbjYsIGludCBudW1lcmljKQorIAlyZXR1cm4gKC0xKTsKKyAgICAgfQorICAgICBpZiAobnVtZXJpYyAmIDB4N0ZGRikgeworLQlpbmV0X250b3AoIEFGX0lORVQ2LCAmc2luNi0+c2luNl9hZGRyLCBuYW1lLCA4MCk7CisrCWluZXRfbnRvcCggQUZfSU5FVDYsICZzaW42LT5zaW42X2FkZHIsIG5hbWUsIG5hbWVsZW4pOworIAlyZXR1cm4gKDApOworICAgICB9CisgICAgIGlmIChJTjZfSVNfQUREUl9VTlNQRUNJRklFRCgmc2luNi0+c2luNl9hZGRyKSkgeworICAgICAgICAgaWYgKG51bWVyaWMgJiAweDgwMDApCistCSAgICBzdHJjcHkobmFtZSwgImRlZmF1bHQiKTsKKysJICAgIHNhZmVfc3RybmNweShuYW1lLCAiZGVmYXVsdCIsIG5hbWVsZW4pOworIAllbHNlCistCSAgICBzdHJjcHkobmFtZSwgIls6Ol0iKTsKKysJICAgIHNhZmVfc3RybmNweShuYW1lLCAiWzo6XSIsIG5hbWVsZW4pOworIAlyZXR1cm4gKDApOworICAgICB9CisgCistICAgIGlmICgocyA9IGdldG5hbWVpbmZvKChzdHJ1Y3Qgc29ja2FkZHIgKikgc2luNiwgc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9pbjYpLAorLQkJCSBuYW1lLCAyNTUgLyogISEgKi8gLCBOVUxMLCAwLCAwKSkpIHsKKy0JZnB1dHMoImdldG5hbWVpbmZvIGZhaWxlZFxuIiwgc3RkZXJyKTsKKy0JcmV0dXJuIC0xOworKyAgICBpZiAoZ2V0bmFtZWluZm8oKHN0cnVjdCBzb2NrYWRkciAqKSBzaW42LCBzaXplb2Yoc3RydWN0IHNvY2thZGRyX2luNiksCisrCQkgICAgbmFtZSwgbmFtZWxlbiAsIE5VTEwsIDAsIDApKSB7CisrCWluZXRfbnRvcCggQUZfSU5FVDYsICZzaW42LT5zaW42X2FkZHIsIG5hbWUsIG5hbWVsZW4pOworICAgICB9CisgICAgIHJldHVybiAoMCk7CisgfQorQEAgLTE0Myw3ICsxNDEsOCBAQCBzdGF0aWMgY2hhciAqSU5FVDZfc3ByaW50KHN0cnVjdCBzb2NrYWRkciAqc2FwLCBpbnQgbnVtZXJpYykKKyAKKyAgICAgaWYgKHNhcC0+c2FfZmFtaWx5ID09IDB4RkZGRiB8fCBzYXAtPnNhX2ZhbWlseSA9PSAwKQorIAlyZXR1cm4gc2FmZV9zdHJuY3B5KGJ1ZmYsIF8oIltOT05FIFNFVF0iKSwgc2l6ZW9mKGJ1ZmYpKTsKKy0gICAgaWYgKElORVQ2X3JyZXNvbHZlKGJ1ZmYsIChzdHJ1Y3Qgc29ja2FkZHJfaW42ICopIHNhcCwgbnVtZXJpYykgIT0gMCkKKysgICAgaWYgKElORVQ2X3JyZXNvbHZlKGJ1ZmYsIHNpemVvZihidWZmKSwKKysJCSAgICAgICAoc3RydWN0IHNvY2thZGRyX2luNiAqKSBzYXAsIG51bWVyaWMpICE9IDApCisgCXJldHVybiBzYWZlX3N0cm5jcHkoYnVmZiwgXygiW1VOS05PV05dIiksIHNpemVvZihidWZmKSk7CisgICAgIHJldHVybiAoZml4X3Y0X2FkZHJlc3MoYnVmZiwgJigoc3RydWN0IHNvY2thZGRyX2luNiAqKXNhcCktPnNpbjZfYWRkcikpOworIH0KKy0tIAorMS44LjUuMi4yMzMuZzkzMmY3ZTQKKwpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9uZXQtdG9vbHMvbmV0LXRvb2xzL25ldC10b29scy1maXgtYnVpbGRpbmctd2l0aC1saW51eC00LjgucGF0Y2ggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL25ldC10b29scy9uZXQtdG9vbHMvbmV0LXRvb2xzLWZpeC1idWlsZGluZy13aXRoLWxpbnV4LTQuOC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41MDVlZWIwCi0tLSAvZGV2L251bGwKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9uZXQtdG9vbHMvbmV0LXRvb2xzL25ldC10b29scy1maXgtYnVpbGRpbmctd2l0aC1saW51eC00LjgucGF0Y2gKQEAgLTAsMCArMSw1MiBAQAorRnJvbSA0ZDU2NjQ1ZWExNDRhMzRmN2NkZDNlM2VkZTY0NTJkODFmYmFlMjUxIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogUmFuZHkgTWFjTGVvZCA8UmFuZHkuTWFjTGVvZEB3aW5kcml2ZXIuY29tPgorRGF0ZTogU2F0LCA4IE9jdCAyMDE2IDE0OjQyOjU0ICswODAwCitTdWJqZWN0OiBbUEFUQ0hdIGlwdHVubmVsLmM6IGluY2x1ZGUgbGludXgvaXAuaCB0byBmaXggYnVpbGRpbmcgd2l0aCBsaW51eC00LjgKKworRml4IGEgYnVpbGQgZXJyb3Igd2hlbiB1c2luZyB0aGUgbGludXgtNC44IGhlYWRlcnMgdGhhdCByZXN1bHRzIGluOgorCitJbiBmaWxlIGluY2x1ZGVkIGZyb20KKy4uLi9zeXNyb290cy9xZW11YXJtNjQvdXNyL2luY2x1ZGUvbGludXgvaWZfdHVubmVsLmg6NjowLAorICAgICAgICAgICAgICAgICAgZnJvbSBpcHR1bm5lbC5jOjM5OgorLi4uL3FlbXVhcm02NC91c3IvaW5jbHVkZS9saW51eC9pcC5oOjg1Ojg6IGVycm9yOiByZWRlZmluaXRpb24gb2YKKydzdHJ1Y3QgaXBoZHInCisgIHN0cnVjdCBpcGhkciB7CisgICAgICAgICBefn5+fgorSW4gZmlsZSBpbmNsdWRlZCBmcm9tIGlwdHVubmVsLmM6Mjk6MDoKKy4uLi9xZW11YXJtNjQvdXNyL2luY2x1ZGUvbmV0aW5ldC9pcC5oOjQ0Ojg6IG5vdGU6IG9yaWdpbmFsbHkgZGVmaW5lZCBoZXJlCisgIHN0cnVjdCBpcGhkcgorICAgICAgICAgXn5+fn4KKworVXBzdHJlYW0tU3RhdHVzOiBTdWJtaXR0ZWQgWzFdCisKK1sxXSBodHRwczovL3NvdXJjZWZvcmdlLm5ldC9wL25ldC10b29scy9tYWlsbWFuL21lc3NhZ2UvMzU0MTMwMjIvCisKK1NpZ25lZC1vZmYtYnk6IFJhbmR5IE1hY0xlb2QgPFJhbmR5Lk1hY0xlb2RAd2luZHJpdmVyLmNvbT4KK1NpZ25lZC1vZmYtYnk6IEphY2tpZSBIdWFuZyA8amFja2llLmh1YW5nQHdpbmRyaXZlci5jb20+CistLS0KKyBpcHR1bm5lbC5jIHwgMiArLQorIDEgZmlsZSBjaGFuZ2VkLCAxIGluc2VydGlvbigrKSwgMSBkZWxldGlvbigtKQorCitkaWZmIC0tZ2l0IGEvaXB0dW5uZWwuYyBiL2lwdHVubmVsLmMKK2luZGV4IDQ5NDNkODMuLmFjZmNiYzcgMTAwNjQ0CistLS0gYS9pcHR1bm5lbC5jCisrKysgYi9pcHR1bm5lbC5jCitAQCAtMjYsNyArMjYsNiBAQAorICNpbmNsdWRlIDxzeXMvc29ja2V0Lmg+CisgI2luY2x1ZGUgPHN5cy9pb2N0bC5oPgorICNpbmNsdWRlIDxuZXRpbmV0L2luLmg+CistI2luY2x1ZGUgPG5ldGluZXQvaXAuaD4KKyAjaW5jbHVkZSA8YXJwYS9pbmV0Lmg+CisgI2lmIGRlZmluZWQoX19HTElCQ19fKSAmJiAoX19HTElCQ19fID4gMiB8fCAoX19HTElCQ19fID09IDIgJiYgX19HTElCQ19NSU5PUl9fID49IDEpKQorICNpbmNsdWRlIDxuZXQvaWYuaD4KK0BAIC0zNiw2ICszNSw3IEBACisgI2luY2x1ZGUgPGxpbnV4L2lmX2FycC5oPgorICNlbmRpZgorICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorKyNpbmNsdWRlIDxsaW51eC9pcC5oPgorICNpbmNsdWRlIDxsaW51eC9pZl90dW5uZWwuaD4KKyAKKyAjaW5jbHVkZSAiY29uZmlnLmgiCistLSAKKzIuOC4zCisKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbmV0LXRvb2xzL25ldC10b29sc18xLjYwLTI2LmJiIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9uZXQtdG9vbHMvbmV0LXRvb2xzXzEuNjAtMjYuYmIKaW5kZXggNjNiMjA1MS4uNDdhNjhhNSAxMDA2NDQKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9uZXQtdG9vbHMvbmV0LXRvb2xzXzEuNjAtMjYuYmIKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9uZXQtdG9vbHMvbmV0LXRvb2xzXzEuNjAtMjYuYmIKQEAgLTE1LDYgKzE1LDggQEAKICAgICAgICAgICAgZmlsZTovL25ldC10b29scy0xLjYwLXNjdHAxLnBhdGNoIFwKICAgICAgICAgICAgZmlsZTovL25ldC10b29scy0xLjYwLXNjdHAyLXF1aWV0LnBhdGNoIFwKICAgICAgICAgICAgZmlsZTovL25ldC10b29scy0xLjYwLXNjdHAzLWFkZHJzLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovLzAwMDEtbGliLWluZXQ2LmMtSU5FVDZfcnJlc29sdmUtdmFyaW91cy1maXhlcy5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9uZXQtdG9vbHMtZml4LWJ1aWxkaW5nLXdpdGgtbGludXgtNC44LnBhdGNoIFwKICAgICAgICAgICAiCiAKICMgZm9yIHRoaXMgcGFja2FnZSB3ZSdyZSBtb3N0bHkgaW50ZXJlc3RlZCBpbiB0cmFja2luZyBkZWJpYW4gcGF0Y2hlcywKQEAgLTk5LDYgKzEwMSwxMCBAQAogYmFzZV9iaW5kaXJfcHJvZ3MgID0gImRuc2RvbWFpbm5hbWUgZG9tYWlubmFtZSBob3N0bmFtZSBuZXRzdGF0IG5pc2RvbWFpbm5hbWUgeXBkb21haW5uYW1lIgogCiBBTFRFUk5BVElWRV8ke1BOfSA9ICIke2Jhc2Vfc2JpbmRpcl9wcm9nc30gJHtiYXNlX2JpbmRpcl9wcm9nc30iCitBTFRFUk5BVElWRV8ke1BOfS1kb2MgKz0gImhvc3RuYW1lLjEiCitBTFRFUk5BVElWRV9MSU5LX05BTUVbaG9zdG5hbWUuMV0gPSAiJHttYW5kaXJ9L21hbjEvaG9zdG5hbWUuMSIKK0FMVEVSTkFUSVZFX1BSSU9SSVRZW2hvc3RuYW1lLjFdID0gIjEwIgorCiBweXRob24gX19hbm9ueW1vdXMoKSB7CiAJZm9yIHByb2cgaW4gZC5nZXRWYXIoJ2Jhc2Vfc2JpbmRpcl9wcm9ncycsIFRydWUpLnNwbGl0KCk6CiAJCWQuc2V0VmFyRmxhZygnQUxURVJOQVRJVkVfTElOS19OQU1FJywgcHJvZywgJyVzLyVzJyAlIChkLmdldFZhcignYmFzZV9zYmluZGlyJywgVHJ1ZSksIHByb2cpKQpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9uZXd0L2ZpbGVzLzAwMDEtZGV0ZWN0LWdvbGQtYXMtR05VLWxpbmtlci10b28ucGF0Y2ggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL25ld3QvZmlsZXMvMDAwMS1kZXRlY3QtZ29sZC1hcy1HTlUtbGlua2VyLXRvby5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNGIzYWZkCi0tLSAvZGV2L251bGwKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9uZXd0L2ZpbGVzLzAwMDEtZGV0ZWN0LWdvbGQtYXMtR05VLWxpbmtlci10b28ucGF0Y2gKQEAgLTAsMCArMSwzMSBAQAorRnJvbSA1ODI0NWI4NTlmZmJjYjE3ODA1NzViZjFiMGEwMThkNTVlNzRlNDM0IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogPT9VVEYtOD9xP0FuZHJlYXM9MjBNPUMzPUJDbGxlcj89IDxzY2huaXR6ZWx0b255QGdvb2dsZW1haWwuY29tPgorRGF0ZTogV2VkLCAyMSBTZXAgMjAxNiAyMToxNDo0MCArMDIwMAorU3ViamVjdDogW1BBVENIXSBkZXRlY3QgZ29sZCBhcyBHTlUgbGlua2VyIHRvbworTUlNRS1WZXJzaW9uOiAxLjAKK0NvbnRlbnQtVHlwZTogdGV4dC9wbGFpbjsgY2hhcnNldD1VVEYtOAorQ29udGVudC1UcmFuc2Zlci1FbmNvZGluZzogOGJpdAorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworU2lnbmVkLW9mZi1ieTogQW5kcmVhcyBNw7xsbGVyIDxzY2huaXR6ZWx0b255QGdvb2dsZW1haWwuY29tPgorLS0tCisgY29uZmlndXJlLmFjIHwgMiArLQorIDEgZmlsZSBjaGFuZ2VkLCAxIGluc2VydGlvbigrKSwgMSBkZWxldGlvbigtKQorCitkaWZmIC0tZ2l0IGEvY29uZmlndXJlLmFjIGIvY29uZmlndXJlLmFjCitpbmRleCAwM2U4YmRhLi5jMmZjZTUxIDEwMDY0NAorLS0tIGEvY29uZmlndXJlLmFjCisrKysgYi9jb25maWd1cmUuYWMKK0BAIC0yOCw3ICsyOCw3IEBAIEFDX0NIRUNLX1NJWkVPRihbdm9pZCAqXSkKKyBBQ19NU0dfQ0hFQ0tJTkcoW2ZvciBHTlUgbGRdKQorIExEPWAkQ0MgLXByaW50LXByb2ctbmFtZT1sZCAyPiY1YAorIAorLWlmIHRlc3QgYCRMRCAtdiAyPiYxIHwgJGFjX2N2X3BhdGhfR1JFUCAtYyAiR05VIGxkImAgPSAwOyB0aGVuCisraWYgdGVzdCBgJExEIC12IDI+JjEgfCAkYWNfY3ZfcGF0aF9HUkVQIC1jICJHTlUgImAgPSAwOyB0aGVuCisgICAjIE5vdAorICAgR05VX0xEPSIiCisgICBBQ19NU0dfUkVTVUxUKFtub10pCistLSAKKzIuNS41CisKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbmV3dC9maWxlcy9yZW1vdmVfc2xhbmdfaW5jbHVkZS5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbmV3dC9maWxlcy9yZW1vdmVfc2xhbmdfaW5jbHVkZS5wYXRjaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTI2MzRlYy4uMDAwMDAwMAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL25ld3QvZmlsZXMvcmVtb3ZlX3NsYW5nX2luY2x1ZGUucGF0Y2gKKysrIC9kZXYvbnVsbApAQCAtMSwxNiArMCwwIEBACi0KLVVwc3RyZWFtLVN0YXR1czogUGVuZGluZwotCi1JbmRleDogZ2l0L01ha2VmaWxlLmluCi09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLS0gZ2l0Lm9yaWcvTWFrZWZpbGUuaW4KLSsrKyBnaXQvTWFrZWZpbGUuaW4KLUBAIC01LDcgKzUsNyBAQCBDQyA9IEBDQ0AKLSBDUFAgPSBAQ1BQQAotIENGTEFHUyA9IEBDRkxBR1NACi0gTERGTEFHUyA9IEBMREZMQUdTQAotLUNQUEZMQUdTID0gLURfR05VX1NPVVJDRSAtSS91c3IvaW5jbHVkZS9zbGFuZyBAQ1BQRkxBR1NAIAotK0NQUEZMQUdTID0gLURfR05VX1NPVVJDRSBAQ1BQRkxBR1NAIAotIEdOVV9MRCA9IEBHTlVfTERACi0gCi0gVkVSU0lPTiA9IEBWRVJTSU9OQApkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9uZXd0L2xpYm5ld3QtcHl0aG9uXzAuNTIuMTguYmIgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL25ld3QvbGlibmV3dC1weXRob25fMC41Mi4xOC5iYgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYmEwNDc1Ny4uMDAwMDAwMAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL25ld3QvbGlibmV3dC1weXRob25fMC41Mi4xOC5iYgorKysgL2Rldi9udWxsCkBAIC0xLDI4ICswLDAgQEAKLXJlcXVpcmUgcmVjaXBlcy1leHRlbmRlZC9uZXd0L2xpYm5ld3RfJHtQVn0uYmIKLQotU1VNTUFSWSAuPSAiIC0gcHl0aG9uIgotREVQRU5EUyA9ICJsaWJuZXd0IHB5dGhvbiIKLVJERVBFTkRTXyR7UE59ICs9ICJweXRob24tY29yZSIKLQotaW5oZXJpdCBweXRob25uYXRpdmUgcHl0aG9uLWRpcgotCi1FWFRSQV9PRUNPTkYgKz0gIi0td2l0aC1weXRob24iCi1FWFRSQV9PRU1BS0UgKz0gIlBZVEhPTlZFUlM9JHtQWVRIT05fRElSfSIKLQotCi1kb19jb21waWxlICgpIHsKLQlWRVJTSU9OPSIkKHNlZCAtbiAncy9eVkVSU0lPTiA9IC8vcCcgTWFrZWZpbGUpIgotCW9lX3J1bm1ha2UgX3NuYWNrLnNvCi19Ci0KLWRvX2luc3RhbGwgKCkgewotCWluc3RhbGwgLWQgJHtEfSR7UFlUSE9OX1NJVEVQQUNLQUdFU19ESVJ9Ci0JaW5zdGFsbCAtbSAwNzU1ICR7UFlUSE9OX0RJUn0vX3NuYWNrLnNvICR7RH0ke1BZVEhPTl9TSVRFUEFDS0FHRVNfRElSfS8KLQlpbnN0YWxsIC1tIDA2NDQgc25hY2sucHkgJHtEfSR7UFlUSE9OX1NJVEVQQUNLQUdFU19ESVJ9LwotfQotCi1QQUNLQUdFU19yZW1vdmUgPSAid2hpcHRhaWwiCi0KLUZJTEVTXyR7UE59ID0gIiR7UFlUSE9OX1NJVEVQQUNLQUdFU19ESVJ9LyoiCi0KLUJCQ0xBU1NFWFRFTkQgPSAibmF0aXZlIgpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9uZXd0L2xpYm5ld3QtcHl0aG9uXzAuNTIuMTkuYmIgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL25ld3QvbGlibmV3dC1weXRob25fMC41Mi4xOS5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMDM2OWVmCi0tLSAvZGV2L251bGwKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9uZXd0L2xpYm5ld3QtcHl0aG9uXzAuNTIuMTkuYmIKQEAgLTAsMCArMSwyOCBAQAorcmVxdWlyZSByZWNpcGVzLWV4dGVuZGVkL25ld3QvbGlibmV3dF8ke1BWfS5iYgorCitTVU1NQVJZIC49ICIgLSBweXRob24iCitERVBFTkRTID0gImxpYm5ld3QgcHl0aG9uMyIKK1JERVBFTkRTXyR7UE59ICs9ICJweXRob24zLWNvcmUiCisKK2luaGVyaXQgcHl0aG9uM25hdGl2ZSBweXRob24zLWRpcgorCitFWFRSQV9PRUNPTkYgKz0gIi0td2l0aC1weXRob24iCitFWFRSQV9PRU1BS0UgKz0gIlBZVEhPTlZFUlM9JHtQWVRIT05fRElSfSIKKworCitkb19jb21waWxlICgpIHsKKwlWRVJTSU9OPSIkKHNlZCAtbiAncy9eVkVSU0lPTiA9IC8vcCcgTWFrZWZpbGUpIgorCW9lX3J1bm1ha2UgX3NuYWNrLnNvCit9CisKK2RvX2luc3RhbGwgKCkgeworCWluc3RhbGwgLWQgJHtEfSR7UFlUSE9OX1NJVEVQQUNLQUdFU19ESVJ9CisJaW5zdGFsbCAtbSAwNzU1ICR7UFlUSE9OX0RJUn0vX3NuYWNrLnNvICR7RH0ke1BZVEhPTl9TSVRFUEFDS0FHRVNfRElSfS8KKwlpbnN0YWxsIC1tIDA2NDQgc25hY2sucHkgJHtEfSR7UFlUSE9OX1NJVEVQQUNLQUdFU19ESVJ9LworfQorCitQQUNLQUdFU19yZW1vdmUgPSAid2hpcHRhaWwiCisKK0ZJTEVTXyR7UE59ID0gIiR7UFlUSE9OX1NJVEVQQUNLQUdFU19ESVJ9LyoiCisKK0JCQ0xBU1NFWFRFTkQgPSAibmF0aXZlIgpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9uZXd0L2xpYm5ld3RfMC41Mi4xOC5iYiBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbmV3dC9saWJuZXd0XzAuNTIuMTguYmIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDlhMjk2NGIuLjAwMDAwMDAKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9uZXd0L2xpYm5ld3RfMC41Mi4xOC5iYgorKysgL2Rldi9udWxsCkBAIC0xLDU5ICswLDAgQEAKLVNVTU1BUlkgPSAiQSBsaWJyYXJ5IGZvciB0ZXh0IG1vZGUgdXNlciBpbnRlcmZhY2VzIgotCi1ERVNDUklQVElPTiA9ICJOZXd0IGlzIGEgcHJvZ3JhbW1pbmcgbGlicmFyeSBmb3IgY29sb3IgdGV4dCBtb2RlLCB3aWRnZXQgYmFzZWQgdXNlciBcCi1pbnRlcmZhY2VzLiAgTmV3dCBjYW4gYmUgdXNlZCB0byBhZGQgc3RhY2tlZCB3aW5kb3dzLCBlbnRyeSB3aWRnZXRzLCBcCi1jaGVja2JveGVzLCByYWRpbyBidXR0b25zLCBsYWJlbHMsIHBsYWluIHRleHQgZmllbGRzLCBzY3JvbGxiYXJzLCBcCi1ldGMuLCB0byB0ZXh0IG1vZGUgdXNlciBpbnRlcmZhY2VzLiAgVGhpcyBwYWNrYWdlIGFsc28gY29udGFpbnMgdGhlIFwKLXNoYXJlZCBsaWJyYXJ5IG5lZWRlZCBieSBwcm9ncmFtcyBidWlsdCB3aXRoIG5ld3QsIGFzIHdlbGwgYXMgYSBcCi0vdXNyL2Jpbi9kaWFsb2cgcmVwbGFjZW1lbnQgY2FsbGVkIHdoaXB0YWlsLiAgTmV3dCBpcyBiYXNlZCBvbiB0aGUgXAotc2xhbmcgbGlicmFyeS4iCi0KLUhPTUVQQUdFID0gImh0dHBzOi8vZmVkb3JhaG9zdGVkLm9yZy9uZXd0LyIKLVNFQ1RJT04gPSAibGlicyIKLQotTElDRU5TRSA9ICJMR1BMdjIiCi1MSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT01ZjMwZjA3MTZkZmRkMGQ5MWViNDM5ZWJlYzUyMmVjMiIKLQotIyBzbGFuZyBuZWVkcyB0byBiZSA+PSAyLjIKLURFUEVORFMgPSAic2xhbmcgcG9wdCIKLQotU1JDX1VSSSA9ICJodHRwczovL2ZlZG9yYWhvc3RlZC5vcmcvcmVsZWFzZXMvbi9lL25ld3QvbmV3dC0ke1BWfS50YXIuZ3ogXAotICAgICAgICAgICBmaWxlOi8vcmVtb3ZlX3NsYW5nX2luY2x1ZGUucGF0Y2ggXAotICAgICAgICAgICBmaWxlOi8vZml4X1NIQVJFRERJUi5wYXRjaCBcCi0gICAgICAgICAgIGZpbGU6Ly9jcm9zc19hci5wYXRjaCBcCi0gICAgICAgICAgIGZpbGU6Ly9NYWtlZmlsZS5pbi1BZGQtdGluZm8tbGlicmFyeS10by10aGUtbGlua2luZy1saWJyYXJpLnBhdGNoIFwKLSAgICAgICAgICAgZmlsZTovL3BpZS1mbGFncy5wYXRjaCBcCi0iCi0KLVNSQ19VUklbbWQ1c3VtXSA9ICI2ODU3MjFiZWUxYTMxODU3MDcwNGIxOWRjZjMxZDI2OCIKLVNSQ19VUklbc2hhMjU2c3VtXSA9ICI3NzFiMGU2MzRlZGU1NmFlNmE2YWNkOTEwNzI4YmI1ODMyYWMxM2RkYjBkMWQyNzkxOWQyNDk4ZGFiNzBjOTFlIgotCi1TID0gIiR7V09SS0RJUn0vbmV3dC0ke1BWfSIKLQotRVhUUkFfT0VDT05GID0gIi0td2l0aG91dC10Y2wgLS13aXRob3V0LXB5dGhvbiIKLQotaW5oZXJpdCBhdXRvdG9vbHMtYnJva2Vuc2VwCi0KLUNMRUFOQlJPS0VOID0gIjEiCi0KLWV4cG9ydCBTVEFHSU5HX0lOQ0RJUgotZXhwb3J0IFNUQUdJTkdfTElCRElSCi1leHBvcnQgQ1BQRkxBR1MKLQotZXhwb3J0IEJVSUxEX1NZUwotZXhwb3J0IEhPU1RfU1lTCi0KLVBBQ0tBR0VTX3ByZXBlbmQgPSAid2hpcHRhaWwgIgotCi1kb19jb25maWd1cmVfcHJlcGVuZCgpIHsKLSAgICBzaCBhdXRvZ2VuLnNoCi19Ci0KLWRvX2NvbXBpbGVfcHJlcGVuZCgpIHsKLSAgICAjIE1ha2Ugc3VyZSB0aGUgcmVjb21waWxlIGlzIE9LCi0gICAgcm0gLWYgJHtCfS8uZGVwZW5kCi19Ci0KLUZJTEVTX3doaXB0YWlsID0gIiR7YmluZGlyfS93aGlwdGFpbCIKLQotQkJDTEFTU0VYVEVORCA9ICJuYXRpdmUiCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL25ld3QvbGlibmV3dF8wLjUyLjE5LmJiIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9uZXd0L2xpYm5ld3RfMC41Mi4xOS5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMjZjZTFmCi0tLSAvZGV2L251bGwKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9uZXd0L2xpYm5ld3RfMC41Mi4xOS5iYgpAQCAtMCwwICsxLDU0IEBACitTVU1NQVJZID0gIkEgbGlicmFyeSBmb3IgdGV4dCBtb2RlIHVzZXIgaW50ZXJmYWNlcyIKKworREVTQ1JJUFRJT04gPSAiTmV3dCBpcyBhIHByb2dyYW1taW5nIGxpYnJhcnkgZm9yIGNvbG9yIHRleHQgbW9kZSwgd2lkZ2V0IGJhc2VkIHVzZXIgXAoraW50ZXJmYWNlcy4gIE5ld3QgY2FuIGJlIHVzZWQgdG8gYWRkIHN0YWNrZWQgd2luZG93cywgZW50cnkgd2lkZ2V0cywgXAorY2hlY2tib3hlcywgcmFkaW8gYnV0dG9ucywgbGFiZWxzLCBwbGFpbiB0ZXh0IGZpZWxkcywgc2Nyb2xsYmFycywgXAorZXRjLiwgdG8gdGV4dCBtb2RlIHVzZXIgaW50ZXJmYWNlcy4gIFRoaXMgcGFja2FnZSBhbHNvIGNvbnRhaW5zIHRoZSBcCitzaGFyZWQgbGlicmFyeSBuZWVkZWQgYnkgcHJvZ3JhbXMgYnVpbHQgd2l0aCBuZXd0LCBhcyB3ZWxsIGFzIGEgXAorL3Vzci9iaW4vZGlhbG9nIHJlcGxhY2VtZW50IGNhbGxlZCB3aGlwdGFpbC4gIE5ld3QgaXMgYmFzZWQgb24gdGhlIFwKK3NsYW5nIGxpYnJhcnkuIgorCitIT01FUEFHRSA9ICJodHRwczovL2ZlZG9yYWhvc3RlZC5vcmcvbmV3dC8iCitTRUNUSU9OID0gImxpYnMiCisKK0xJQ0VOU0UgPSAiTEdQTHYyIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9NWYzMGYwNzE2ZGZkZDBkOTFlYjQzOWViZWM1MjJlYzIiCisKKyMgc2xhbmcgbmVlZHMgdG8gYmUgPj0gMi4yCitERVBFTkRTID0gInNsYW5nIHBvcHQiCisKK1NSQ19VUkkgPSAiaHR0cHM6Ly9mZWRvcmFob3N0ZWQub3JnL3JlbGVhc2VzL24vZS9uZXd0L25ld3QtJHtQVn0udGFyLmd6IFwKKyAgICAgICAgICAgZmlsZTovL2ZpeF9TSEFSRURESVIucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vY3Jvc3NfYXIucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vTWFrZWZpbGUuaW4tQWRkLXRpbmZvLWxpYnJhcnktdG8tdGhlLWxpbmtpbmctbGlicmFyaS5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9waWUtZmxhZ3MucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vMDAwMS1kZXRlY3QtZ29sZC1hcy1HTlUtbGlua2VyLXRvby5wYXRjaCBcCisiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICJlNGFhMGY3OTQzZWRkMzljNTI0ODFhODdmNjhmNDEyYSIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICIwOGMwZGI1NmMyMTk5NmFmNmE3Y2JhYjk5NDkxYjc3NGM2YzA5Y2VmOTFjZDliMDM5MDNjODQ2MzRiZmYyZTgwIgorCitTID0gIiR7V09SS0RJUn0vbmV3dC0ke1BWfSIKKworRVhUUkFfT0VDT05GID0gIi0td2l0aG91dC10Y2wgLS13aXRob3V0LXB5dGhvbiIKKworaW5oZXJpdCBhdXRvdG9vbHMtYnJva2Vuc2VwCisKK0NMRUFOQlJPS0VOID0gIjEiCisKK2V4cG9ydCBDUFBGTEFHUworCitQQUNLQUdFU19wcmVwZW5kID0gIndoaXB0YWlsICIKKworZG9fY29uZmlndXJlX3ByZXBlbmQoKSB7CisgICAgc2ggYXV0b2dlbi5zaAorfQorCitkb19jb21waWxlX3ByZXBlbmQoKSB7CisgICAgIyBNYWtlIHN1cmUgdGhlIHJlY29tcGlsZSBpcyBPSworICAgIHJtIC1mICR7Qn0vLmRlcGVuZAorfQorCitGSUxFU193aGlwdGFpbCA9ICIke2JpbmRpcn0vd2hpcHRhaWwiCisKK0JCQ0xBU1NFWFRFTkQgPSAibmF0aXZlIgpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9wYWNrYWdlZ3JvdXBzL3BhY2thZ2Vncm91cC1jb3JlLWZ1bGwtY21kbGluZS5iYiBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvcGFja2FnZWdyb3Vwcy9wYWNrYWdlZ3JvdXAtY29yZS1mdWxsLWNtZGxpbmUuYmIKaW5kZXggMWQ3ZTYwOC4uYTYwYTY4YyAxMDA2NDQKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9wYWNrYWdlZ3JvdXBzL3BhY2thZ2Vncm91cC1jb3JlLWZ1bGwtY21kbGluZS5iYgorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3BhY2thZ2Vncm91cHMvcGFja2FnZWdyb3VwLWNvcmUtZnVsbC1jbWRsaW5lLmJiCkBAIC01LDcgKzUsNiBAQAogU1VNTUFSWSA9ICJTdGFuZGFyZCBmdWxsLWZlYXR1cmVkIExpbnV4IHN5c3RlbSIKIERFU0NSSVBUSU9OID0gIlBhY2thZ2UgZ3JvdXAgYnJpbmdpbmcgaW4gcGFja2FnZXMgbmVlZGVkIGZvciBhIG1vcmUgdHJhZGl0aW9uYWwgZnVsbC1mZWF0dXJlZCBMaW51eCBzeXN0ZW0iCiBQUiA9ICJyNiIKLUxJQ0VOU0UgPSAiTUlUIgogCiBpbmhlcml0IHBhY2thZ2Vncm91cAogCkBAIC0xNDQsNyArMTQzLDYgQEAKICAgICBjcm9uaWUgXAogICAgIGRidXMgXAogICAgIGRidXMtZ2xpYiBcCi0gICAgcHl0aG9uLWRidXMgXAogICAgIGVsZnV0aWxzIFwKICAgICBnemlwIFwKICAgICBsZXNzIFwKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvcGFja2FnZWdyb3Vwcy9wYWNrYWdlZ3JvdXAtY29yZS1sc2IuYmIgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3BhY2thZ2Vncm91cHMvcGFja2FnZWdyb3VwLWNvcmUtbHNiLmJiCmluZGV4IGEyOWMzZDcuLjI5NTY0ZTAgMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvcGFja2FnZWdyb3Vwcy9wYWNrYWdlZ3JvdXAtY29yZS1sc2IuYmIKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9wYWNrYWdlZ3JvdXBzL3BhY2thZ2Vncm91cC1jb3JlLWxzYi5iYgpAQCAtNSw3ICs1LDYgQEAKIFNVTU1BUlkgPSAiTGludXggU3RhbmRhcmQgQmFzZSAoTFNCKSIKIERFU0NSSVBUSU9OID0gIlBhY2thZ2VzIHJlcXVpcmVkIHRvIHNhdGlzZnkgdGhlIExpbnV4IFN0YW5kYXJkIEJhc2UgKExTQikgc3BlY2lmaWNhdGlvbiIKIFBSID0gInIxMCIKLUxJQ0VOU0UgPSAiTUlUIgogCiBpbmhlcml0IHBhY2thZ2Vncm91cCBkaXN0cm9fZmVhdHVyZXNfY2hlY2sKIApAQCAtMjAxLDE2ICsyMDAsNiBAQAogICAgIHB5dGhvbi1taXNjIFwKICIKIAotZGVmIGdldF9saWJxdDMoZCk6Ci0gICAgaWYgJ2xpbnV4c3RkYmFzZScgaW4gZC5nZXRWYXIoJ0RJU1RST09WRVJSSURFUycsIEZhbHNlKSBvciAiIjoKLSAgICAgICAgaWYgJ3F0MycgaW4gZC5nZXRWYXIoJ0JCRklMRV9DT0xMRUNUSU9OUycsIEZhbHNlKSBvciAiIjoKLSAgICAgICAgICAgIHJldHVybiAnbGlicXQtbXQzJwotCi0gICAgICAgIGJiLndhcm4oJ1RoZSBtZXRhLXF0MyBsYXllciBzaG91bGQgYmUgYWRkZWQsIHRoaXMgbGF5ZXIgcHJvdmlkZXMgUXQgMy54JyBcCi0gICAgICAgICAgICAgICAgJ2xpYnJhcmllcy4gSXRzIGludGVuZGVkIHVzZSBpcyBmb3IgcGFzc2luZyBMU0IgdGVzdHMgYXMgUXQzIGlzJyBcCi0gICAgICAgICAgICAgICAgJ2EgcmVxdWlyZW1lbnQgZm9yIExTQi4nKQotICAgIHJldHVybiAnJwotCiBRVDRQS0dTID0gIiBcCiAgICAgbGlicXRjb3JlNCBcCiAgICAgbGlicXRndWk0IFwKQEAgLTIyOSw4ICsyMTgsOCBAQAogICAgICAgICBpZiAncXQ0JyBpbiBkLmdldFZhcignQkJGSUxFX0NPTExFQ1RJT05TJywgRmFsc2UpIG9yICIiOgogICAgICAgICAgICAgcmV0dXJuIGQuZ2V0VmFyKCdRVDRQS0dTJywgRmFsc2UpCiAKLSAgICAgICAgYmIud2FybignVGhlIG1ldGEtcXQ0IGxheWVyIHNob3VsZCBiZSBhZGRlZCwgdGhpcyBsYXllciBwcm92aWRlcyBRdCA0LngnIFwKLSAgICAgICAgICAgICAgICAnbGlicmFyaWVzLiBJdHMgaW50ZW5kZWQgdXNlIGlzIGZvciBwYXNzaW5nIExTQiB0ZXN0cyBhcyBRdDQgaXMnIFwKKyAgICAgICAgYmIud2FybignVGhlIG1ldGEtcXQ0IGxheWVyIHNob3VsZCBiZSBhZGRlZCwgdGhpcyBsYXllciBwcm92aWRlcyBRdCA0LnggJyBcCisgICAgICAgICAgICAgICAgJ2xpYnJhcmllcy4gSXRzIGludGVuZGVkIHVzZSBpcyBmb3IgcGFzc2luZyBMU0IgdGVzdHMgYXMgUXQ0IGlzICcgXAogICAgICAgICAgICAgICAgICdhIHJlcXVpcmVtZW50IGZvciBMU0IuJykKICAgICByZXR1cm4gJycKIApAQCAtMjU1LDcgKzI0NCw2IEBACiAgICAgYXRrIFwKICAgICBsaWJhc291bmQgXAogICAgICR7QGdldF9saWJxdDQoZCl9IFwKLSAgICAke0BnZXRfbGlicXQzKGQpfSBcCiAiCiAKIFJERVBFTkRTX3BhY2thZ2Vncm91cC1jb3JlLWxzYi1ydW50aW1lLWFkZCA9ICJcCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3BhbS9saWJwYW0vY3J5cHRfY29uZmlndXJlLnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9wYW0vbGlicGFtL2NyeXB0X2NvbmZpZ3VyZS5wYXRjaAppbmRleCBiZWM4MmE1Li45MTdhOGFmIDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3BhbS9saWJwYW0vY3J5cHRfY29uZmlndXJlLnBhdGNoCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvcGFtL2xpYnBhbS9jcnlwdF9jb25maWd1cmUucGF0Y2gKQEAgLTEsMzEgKzEsNDAgQEAKK0Zyb20gYjg2NTc1YWI0YTBkZjA3ZGExNjAyODM0NTlkYTI3MGUxYzAzNzJhMCBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206ICJNYXhpbiBCLiBKb2huIiA8bWF4aW4uam9obkBpbnRlbC5jb20+CitEYXRlOiBUdWUsIDI0IE1heSAyMDE2IDE0OjExOjA5ICswMzAwCitTdWJqZWN0OiBbUEFUQ0hdIGNyeXB0X2NvbmZpZ3VyZQorCiBUaGlzIHBhdGNoIGZpeGVzIGEgY2FzZSB3aGVyZSBpdCBmaW5kIGNyeXB0IGRlZmluZWQgaW4gbGliYyAobXVzbCkgYnV0CiBub3QgaW4gc3BlY2lmaWVkIGxpYnJhcmllcyB0aGVuIGl0IGVuZHMgdXAgYXNzaWduaW5nCi0KIExJQkNSWVBUPSItbCIgd2hpY2ggdGhlbiBnb2VzIGludG8gbWFrZWZpbGUgY2F1c2UgYWxsIHNvcnQgb2YgcHJvYmxlbXMKIGUuZy4KIAogbGQ6IGNhbm5vdCBmaW5kIC1sLW0zMgogfCBjb2xsZWN0MjogZXJyb3I6IGxkIHJldHVybmVkIDEgZXhpdCBzdGF0dXMKLQotVGhlIHJlYXNvbiBpcyB0aGF0IC1sIGFwcGVhcnMgb24gY29tbWFuZGxpbmUgd2l0aCBvdXQgYW55IGxpYnJhcnkgYW5kCi1jb21waWxlciB0cmVhdHMgdGhlIG5leHQgYXJndW1lbnQgYXMgbGlicmFyeSBuYW1lIHdoYXRldmVyIGl0IGlzLgotCitUaGUgcmVhc29uIGlzIHRoYXQgLWwgYXBwZWFycyBvbiBjb21tYW5kbGluZSB3aXRoCitvdXQgYW55IGxpYnJhcnkgYW5kIGNvbXBpbGVyIHRyZWF0cyB0aGUgbmV4dCBhcmd1bWVudCBhcyBsaWJyYXJ5IG5hbWUKK3doYXRldmVyIGl0IGlzLgogCiBVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKLVNpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CiAKLUluZGV4OiBMaW51eC1QQU0tMS4xLjYvY29uZmlndXJlLmluCi09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLS0gTGludXgtUEFNLTEuMS42Lm9yZy9jb25maWd1cmUuYWMKLSsrKyBMaW51eC1QQU0tMS4xLjYvY29uZmlndXJlLmFjCi1AQCAtNDAwLDcgKzQwMCw5IEBAIEFTX0lGKFt0ZXN0ICJ4JGFjX2N2X2hlYWRlcl94Y3J5cHRfaCIgPQorU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KK1NpZ25lZC1vZmYtYnk6IE1heGluIEIuIEpvaG4gPG1heGluLmpvaG5AaW50ZWwuY29tPgorLS0tCisgY29uZmlndXJlLmFjIHwgMiArLQorIDEgZmlsZSBjaGFuZ2VkLCAxIGluc2VydGlvbigrKSwgMSBkZWxldGlvbigtKQorCitkaWZmIC0tZ2l0IGEvY29uZmlndXJlLmFjIGIvY29uZmlndXJlLmFjCitpbmRleCBkZjM5ZDA3Li5lNjhkODU2IDEwMDY0NAorLS0tIGEvY29uZmlndXJlLmFjCisrKysgYi9jb25maWd1cmUuYWMKK0BAIC00MDEsNyArNDAxLDcgQEAgQVNfSUYoW3Rlc3QgIngkYWNfY3ZfaGVhZGVyX3hjcnlwdF9oIiA9ICJ4eWVzIl0sCiAgICBbY3J5cHRfbGlicz0iY3J5cHQiXSkKICAKICBCQUNLVVBfTElCUz0kTElCUwotLUFDX1NFQVJDSF9MSUJTKFtjcnlwdF0sWyRjcnlwdF9saWJzXSwgTElCQ1JZUFQ9Ii1sJGFjX2xpYiIsIExJQkNSWVBUPSIiKQotK0FDX1NFQVJDSF9MSUJTKFtjcnlwdF0sWyRjcnlwdF9saWJzXSwKLSsJICAgICAgIFt0ZXN0ICIkYWNfY3Zfc2VhcmNoX2NyeXB0IiA9ICJub25lIHJlcXVpcmVkIiB8fAotKwkJTElCQ1JZUFQ9IiRhY19jdl9zZWFyY2hfY3J5cHQiXSkKKy1BQ19TRUFSQ0hfTElCUyhbY3J5cHRdLFskY3J5cHRfbGlic10sIExJQkNSWVBUPSIke2FjX2xpYjorLWwkYWNfbGlifSIsIExJQkNSWVBUPSIiKQorK0FDX1NFQVJDSF9MSUJTKFtjcnlwdF0sWyRjcnlwdF9saWJzXSwgW3Rlc3QgIiRhY19jdl9zZWFyY2hfY3J5cHQiID0gIm5vbmUgcmVxdWlyZWQiIHx8IExJQkNSWVBUPSIkYWNfY3Zfc2VhcmNoX2NyeXB0Il0pCiAgQUNfQ0hFQ0tfRlVOQ1MoY3J5cHRfciBjcnlwdF9nZW5zYWx0X3IpCiAgTElCUz0kQkFDS1VQX0xJQlMKICBBQ19TVUJTVChMSUJDUllQVCkKKy0tIAorMi40LjAKKwpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9wYW0vbGlicGFtL3BhbS1uby1pbm5ldGdyLnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9wYW0vbGlicGFtL3BhbS1uby1pbm5ldGdyLnBhdGNoCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1ZTU1MWFjLi4wMDAwMDAwCi0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvcGFtL2xpYnBhbS9wYW0tbm8taW5uZXRnci5wYXRjaAorKysgL2Rldi9udWxsCkBAIC0xLDk3ICswLDAgQEAKLWlubmV0Z3IgbWF5IG5vdCBiZSB0aGVyZSBzbyBtYWtlIHN1cmUgdGhhdCB3aGVuIGlubmV0Z3IgaXMgbm90IHByZXNlbnQKLXRoZW4gd2UgaW5mb3JtIGFib3V0IGl0IGFuZCBub3QgdXNlIGl0LgotCi0tS2hlbQotCi1VcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKLQotU2lnbmVkLW9mZi1ieTogU2NvdHQgR2FybWFuIDxzY290dC5hLmdhcm1hbkBpbnRlbC5jb20+Ci0KLUluZGV4OiBMaW51eC1QQU0tMS4xLjMvbW9kdWxlcy9wYW1fZ3JvdXAvcGFtX2dyb3VwLmMKLT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tLSBMaW51eC1QQU0tMS4xLjMub3JpZy9tb2R1bGVzL3BhbV9ncm91cC9wYW1fZ3JvdXAuYwotKysrIExpbnV4LVBBTS0xLjEuMy9tb2R1bGVzL3BhbV9ncm91cC9wYW1fZ3JvdXAuYwotQEAgLTY1OSw3ICs2NTksMTEgQEAgc3RhdGljIGludCBjaGVja19hY2NvdW50KHBhbV9oYW5kbGVfdCAqcAotIAl9Ci0gCS8qIElmIGJ1ZmZlciBzdGFydHMgd2l0aCBALCB3ZSBhcmUgdXNpbmcgbmV0Z3JvdXBzICovCi0gCWlmIChidWZmZXJbMF0gPT0gJ0AnKQotLQkgIGdvb2QgJj0gaW5uZXRnciAoJmJ1ZmZlclsxXSwgTlVMTCwgdXNlciwgTlVMTCk7Ci0rI2lmZGVmIEhBVkVfSU5ORVRHUgotKyAgICAgICAgICAgZ29vZCAmPSBpbm5ldGdyICgmYnVmZmVyWzFdLCBOVUxMLCB1c2VyLCBOVUxMKTsKLSsjZWxzZQotKyAgICAgICAgICAgcGFtX3N5c2xvZyAocGFtaCwgTE9HX0VSUiwgInBhbV9ncm91cCBkb2VzIG5vdCBoYXZlIG5ldGdyb3VwIHN1cHBvcnQiKTsKLSsjZW5kaWYKLSAJLyogb3RoZXJ3aXNlLCBpZiB0aGUgYnVmZmVyIHN0YXJ0cyB3aXRoICUsIGl0J3MgYSBVTklYIGdyb3VwICovCi0gCWVsc2UgaWYgKGJ1ZmZlclswXSA9PSAnJScpCi0gICAgICAgICAgIGdvb2QgJj0gcGFtX21vZHV0aWxfdXNlcl9pbl9ncm91cF9uYW1fbmFtKHBhbWgsIHVzZXIsICZidWZmZXJbMV0pOwotSW5kZXg6IExpbnV4LVBBTS0xLjEuMy9tb2R1bGVzL3BhbV90aW1lL3BhbV90aW1lLmMKLT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tLSBMaW51eC1QQU0tMS4xLjMub3JpZy9tb2R1bGVzL3BhbV90aW1lL3BhbV90aW1lLmMKLSsrKyBMaW51eC1QQU0tMS4xLjMvbW9kdWxlcy9wYW1fdGltZS9wYW1fdGltZS5jCi1AQCAtNTU1LDkgKzU1NSwxMyBAQCBjaGVja19hY2NvdW50KHBhbV9oYW5kbGVfdCAqcGFtaCwgY29uc3QKLSAJICB9Ci0gCSAgLyogSWYgYnVmZmVyIHN0YXJ0cyB3aXRoIEAsIHdlIGFyZSB1c2luZyBuZXRncm91cHMgKi8KLSAJICBpZiAoYnVmZmVyWzBdID09ICdAJykKLS0JICAgIGdvb2QgJj0gaW5uZXRnciAoJmJ1ZmZlclsxXSwgTlVMTCwgdXNlciwgTlVMTCk7Ci0rI2lmZGVmIEhBVkVfSU5ORVRHUgotKwkgICAgICAgZ29vZCAmPSBpbm5ldGdyICgmYnVmZmVyWzFdLCBOVUxMLCB1c2VyLCBOVUxMKTsKLSsjZWxzZQotKwkgICAgICAgcGFtX3N5c2xvZyAocGFtaCwgTE9HX0VSUiwgInBhbV90aW1lIGRvZXMgbm90IGhhdmUgbmV0Z3JvdXAgc3VwcG9ydCIpOwotKyNlbmRpZgotIAkgIGVsc2UKLS0JICAgIGdvb2QgJj0gbG9naWNfZmllbGQocGFtaCwgdXNlciwgYnVmZmVyLCBjb3VudCwgaXNfc2FtZSk7Ci0rCSAgICAgICBnb29kICY9IGxvZ2ljX2ZpZWxkKHBhbWgsIHVzZXIsIGJ1ZmZlciwgY291bnQsIGlzX3NhbWUpOwotIAkgIEQoKCJ3aXRoIHVzZXI6ICVzIiwgZ29vZCA/ICJwYXNzZXMiOiJmYWlscyIgKSk7Ci0gCi0gCSAgLyogaGVyZSB3ZSBnZXQgdGhlIHRpbWUgZmllbGQgKi8KLUluZGV4OiBMaW51eC1QQU0tMS4xLjMvbW9kdWxlcy9wYW1fc3VjY2VlZF9pZi9wYW1fc3VjY2VlZF9pZi5jCi09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLS0gTGludXgtUEFNLTEuMS4zLm9yaWcvbW9kdWxlcy9wYW1fc3VjY2VlZF9pZi9wYW1fc3VjY2VlZF9pZi5jCi0rKysgTGludXgtUEFNLTEuMS4zL21vZHVsZXMvcGFtX3N1Y2NlZWRfaWYvcGFtX3N1Y2NlZWRfaWYuYwotQEAgLTIzMSwxOCArMjMxLDI3IEBAIGV2YWx1YXRlX25vdGluZ3JvdXAocGFtX2hhbmRsZV90ICpwYW1oLAotIH0KLSAvKiBSZXR1cm4gUEFNX1NVQ0NFU1MgaWYgdGhlIChob3N0LHVzZXIpIGlzIGluIHRoZSBuZXRncm91cC4gKi8KLSBzdGF0aWMgaW50Ci0tZXZhbHVhdGVfaW5uZXRncihjb25zdCBjaGFyICpob3N0LCBjb25zdCBjaGFyICp1c2VyLCBjb25zdCBjaGFyICpncm91cCkKLStldmFsdWF0ZV9pbm5ldGdyKGNvbnN0IHBhbV9oYW5kbGVfdCogcGFtaCwgY29uc3QgY2hhciAqaG9zdCwgY29uc3QgY2hhciAqdXNlciwgY29uc3QgY2hhciAqZ3JvdXApCi0gewotKyNpZmRlZiBIQVZFX0lOTkVUR1IKLSAJaWYgKGlubmV0Z3IoZ3JvdXAsIGhvc3QsIHVzZXIsIE5VTEwpID09IDEpCi0gCQlyZXR1cm4gUEFNX1NVQ0NFU1M7Ci0rI2Vsc2UKLSsgICAgICAgIHBhbV9zeXNsb2cgKHBhbWgsIExPR19FUlIsICJwYW1fc3VjY2VlZF9pZiBkb2VzIG5vdCBoYXZlIG5ldGdyb3VwIHN1cHBvcnQiKTsKLSsjZW5kaWYKLSsKLSAJcmV0dXJuIFBBTV9BVVRIX0VSUjsKLSB9Ci0gLyogUmV0dXJuIFBBTV9TVUNDRVNTIGlmIHRoZSAoaG9zdCx1c2VyKSBpcyBOT1QgaW4gdGhlIG5ldGdyb3VwLiAqLwotIHN0YXRpYyBpbnQKLS1ldmFsdWF0ZV9ub3Rpbm5ldGdyKGNvbnN0IGNoYXIgKmhvc3QsIGNvbnN0IGNoYXIgKnVzZXIsIGNvbnN0IGNoYXIgKmdyb3VwKQotK2V2YWx1YXRlX25vdGlubmV0Z3IoY29uc3QgcGFtX2hhbmRsZV90KiBwYW1oLCBjb25zdCBjaGFyICpob3N0LCBjb25zdCBjaGFyICp1c2VyLCBjb25zdCBjaGFyICpncm91cCkKLSB7Ci0rI2lmZGVmIEhBVkVfSU5ORVRHUgotIAlpZiAoaW5uZXRncihncm91cCwgaG9zdCwgdXNlciwgTlVMTCkgPT0gMCkKLSAJCXJldHVybiBQQU1fU1VDQ0VTUzsKLSsjZWxzZQotKwlwYW1fc3lzbG9nIChwYW1oLCBMT0dfRVJSLCAicGFtX3N1Y2NlZWRfaWYgZG9lcyBub3QgaGF2ZSBuZXRncm91cCBzdXBwb3J0Iik7Ci0rI2VuZGlmCi0gCXJldHVybiBQQU1fQVVUSF9FUlI7Ci0gfQotIAotQEAgLTM2MSwxNCArMzcwLDE0IEBAIGV2YWx1YXRlKHBhbV9oYW5kbGVfdCAqcGFtaCwgaW50IGRlYnVnLAotIAkJY29uc3Qgdm9pZCAqcmhvc3Q7Ci0gCQlpZiAocGFtX2dldF9pdGVtKHBhbWgsIFBBTV9SSE9TVCwgJnJob3N0KSAhPSBQQU1fU1VDQ0VTUykKLSAJCQlyaG9zdCA9IE5VTEw7Ci0tCQlyZXR1cm4gZXZhbHVhdGVfaW5uZXRncihyaG9zdCwgdXNlciwgcmlnaHQpOwotKwkJcmV0dXJuIGV2YWx1YXRlX2lubmV0Z3IocGFtaCwgcmhvc3QsIHVzZXIsIHJpZ2h0KTsKLSAJfQotIAkvKiAoUmhvc3QsIHVzZXIpIGlzIG5vdCBpbiB0aGlzIGdyb3VwLiAqLwotIAlpZiAoc3RyY2FzZWNtcChxdWFsLCAibm90aW5uZXRnciIpID09IDApIHsKLSAJCWNvbnN0IHZvaWQgKnJob3N0OwotIAkJaWYgKHBhbV9nZXRfaXRlbShwYW1oLCBQQU1fUkhPU1QsICZyaG9zdCkgIT0gUEFNX1NVQ0NFU1MpCi0gCQkJcmhvc3QgPSBOVUxMOwotLQkJcmV0dXJuIGV2YWx1YXRlX25vdGlubmV0Z3Iocmhvc3QsIHVzZXIsIHJpZ2h0KTsKLSsJCXJldHVybiBldmFsdWF0ZV9ub3Rpbm5ldGdyKHBhbWgsIHJob3N0LCB1c2VyLCByaWdodCk7Ci0gCX0KLSAJLyogRmFpbCBjbG9zZWQuICovCi0gCXJldHVybiBQQU1fU0VSVklDRV9FUlI7CmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3BhbS9saWJwYW0vcGFtLXVuaXgtbnVsbG9rLXNlY3VyZS5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvcGFtL2xpYnBhbS9wYW0tdW5peC1udWxsb2stc2VjdXJlLnBhdGNoCmluZGV4IDMyNDFlODIuLmQyY2M2NjggMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvcGFtL2xpYnBhbS9wYW0tdW5peC1udWxsb2stc2VjdXJlLnBhdGNoCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvcGFtL2xpYnBhbS9wYW0tdW5peC1udWxsb2stc2VjdXJlLnBhdGNoCkBAIC0xLDkgKzEsMTEgQEAKLUZyb20gOWJkYzE5NzQ3NDc5NWYyZDAwMGMyYmMwNGY1OGY3Y2VmODg5OGYyMSBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKLUZyb206IEFtYXJuYXRoIFZhbGx1cmkgPGFtYXJuYXRoLnZhbGx1cmlAaW50ZWwuY29tPgotRGF0ZTogV2VkLCAxNSBKdWwgMjAxNSAxMzowNzoyMCArMDMwMAotU3ViamVjdDogW1BBVENIXSBEZWJpYW4gcGF0Y2ggdG8gYWRkIGEgbmV3ICdudWxsb2tfc2VjdXJlJyBvcHRpb24gdG8gcGFtX3VuaXgsCi0gd2hpY2ggYWNjZXB0cyB1c2VycyB3aXRoIG51bGwgcGFzc3dvcmRzIG9ubHkgd2hlbiB0aGUgYXBwbGljYW50IGlzIGNvbm5lY3RlZAotIGZyb20gYSB0dHkgbGlzdGVkIGluIC9ldGMvc2VjdXJldHR5LgorRnJvbSBiNjU0NWI4M2Y5NGM1ZmI3YWVjMTQ3OGI4ZDQ1OGExMzkzZjQ3OWM4IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogIk1heGluIEIuIEpvaG4iIDxtYXhpbi5qb2huQGludGVsLmNvbT4KK0RhdGU6IFdlZCwgMjUgTWF5IDIwMTYgMTQ6MTI6MjUgKzAzMDAKK1N1YmplY3Q6IFtQQVRDSF0gcGFtX3VuaXg6IHN1cHBvcnQgJ251bGxva19zZWN1cmUnIG9wdGlvbgorCitEZWJpYW4gcGF0Y2ggdG8gYWRkIGEgbmV3ICdudWxsb2tfc2VjdXJlJyBvcHRpb24gdG8gcGFtX3VuaXgsCit3aGljaCBhY2NlcHRzIHVzZXJzIHdpdGggbnVsbCBwYXNzd29yZHMgb25seSB3aGVuIHRoZSBhcHBsaWNhbnQgaXMKK2Nvbm5lY3RlZCBmcm9tIGEgdHR5IGxpc3RlZCBpbiAvZXRjL3NlY3VyZXR0eS4KIAogQXV0aG9yczogU2FtIEhhcnRtYW4gPGhhcnRtYW5zQGRlYmlhbi5vcmc+LAogICAgICAgICAgU3RldmUgTGFuZ2FzZWsgPHZvcmxvbkBkZWJpYW4ub3JnPgpAQCAtMTEsNzggKzEzLDMxIEBACiBVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKIAogU2lnbmVkLW9mZi1ieTogTWluZyBMaXUgPG1pbmcubGl1QHdpbmRyaXZlci5jb20+Ci0KLXYyOgotCS0gRm9yd2FyZCBwb3J0ZWQgZnJvbSB2MS4xLjYgdG8gdjEuMi4xCi0KIFNpZ25lZC1vZmYtYnk6IEFtYXJuYXRoIFZhbGx1cmkgPGFtYXJuYXRoLnZhbGx1cmlAaW50ZWwuY29tPgorU2lnbmVkLW9mZi1ieTogTWF4aW4gQi4gSm9obiA8bWF4aW4uam9obkBpbnRlbC5jb20+CiAtLS0KICBtb2R1bGVzL3BhbV91bml4L01ha2VmaWxlLmFtICAgIHwgIDMgKystCi0gbW9kdWxlcy9wYW1fdW5peC9SRUFETUUgICAgICAgICB8IDExICsrKysrKysrKystCi0gbW9kdWxlcy9wYW1fdW5peC9wYW1fdW5peC44ICAgICB8ICA5ICsrKysrKysrLQogIG1vZHVsZXMvcGFtX3VuaXgvcGFtX3VuaXguOC54bWwgfCAxOSArKysrKysrKysrKysrKysrKystCiAgbW9kdWxlcy9wYW1fdW5peC9zdXBwb3J0LmMgICAgICB8IDQwICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrLS0tLS0KICBtb2R1bGVzL3BhbV91bml4L3N1cHBvcnQuaCAgICAgIHwgIDggKysrKysrLS0KLSA2IGZpbGVzIGNoYW5nZWQsIDc5IGluc2VydGlvbnMoKyksIDExIGRlbGV0aW9ucygtKQorIDQgZmlsZXMgY2hhbmdlZCwgNjEgaW5zZXJ0aW9ucygrKSwgOSBkZWxldGlvbnMoLSkKIAogZGlmZiAtLWdpdCBhL21vZHVsZXMvcGFtX3VuaXgvTWFrZWZpbGUuYW0gYi9tb2R1bGVzL3BhbV91bml4L01ha2VmaWxlLmFtCi1pbmRleCA1NmVkNTkxLi45YTM3MmFjIDEwMDY0NAoraW5kZXggNTZkZjE3OC4uMmJiYTQ2MCAxMDA2NDQKIC0tLSBhL21vZHVsZXMvcGFtX3VuaXgvTWFrZWZpbGUuYW0KICsrKyBiL21vZHVsZXMvcGFtX3VuaXgvTWFrZWZpbGUuYW0KIEBAIC0zMCw3ICszMCw4IEBAIGlmIEhBVkVfVkVSU0lPTklORwogICAgcGFtX3VuaXhfbGFfTERGTEFHUyArPSAtV2wsLS12ZXJzaW9uLXNjcmlwdD0kKHNyY2RpcikvLi4vbW9kdWxlcy5tYXAKICBlbmRpZgogIHBhbV91bml4X2xhX0xJQkFERCA9ICQodG9wX2J1aWxkZGlyKS9saWJwYW0vbGlicGFtLmxhIFwKLS0JQExJQkNSWVBUQCBATElCU0VMSU5VWEAgJChOSVNfTElCUykKLSsJQExJQkNSWVBUQCBATElCU0VMSU5VWEAgJChOSVNfTElCUykgXAorLQlATElCQ1JZUFRAIEBMSUJTRUxJTlVYQCBAVElSUENfTElCU0AgQE5TTF9MSUJTQAorKwlATElCQ1JZUFRAIEBMSUJTRUxJTlVYQCBAVElSUENfTElCU0AgQE5TTF9MSUJTQCBcCiArCS4uL3BhbV9zZWN1cmV0dHkvdHR5X3NlY3VyZS5sbwogIAogIHNlY3VyZWxpYl9MVExJQlJBUklFUyA9IHBhbV91bml4LmxhCiAgCi1kaWZmIC0tZ2l0IGEvbW9kdWxlcy9wYW1fdW5peC9SRUFETUUgYi9tb2R1bGVzL3BhbV91bml4L1JFQURNRQotaW5kZXggMzkzNWRiYS4uNzg4MGQ5MSAxMDA2NDQKLS0tLSBhL21vZHVsZXMvcGFtX3VuaXgvUkVBRE1FCi0rKysgYi9tb2R1bGVzL3BhbV91bml4L1JFQURNRQotQEAgLTY3LDcgKzY3LDE2IEBAIG51bGxvawotIAotICAgICBUaGUgZGVmYXVsdCBhY3Rpb24gb2YgdGhpcyBtb2R1bGUgaXMgdG8gbm90IHBlcm1pdCB0aGUgdXNlciBhY2Nlc3MgdG8gYQotICAgICBzZXJ2aWNlIGlmIHRoZWlyIG9mZmljaWFsIHBhc3N3b3JkIGlzIGJsYW5rLiBUaGUgbnVsbG9rIGFyZ3VtZW50IG92ZXJyaWRlcwotLSAgICB0aGlzIGRlZmF1bHQuCi0rICAgIHRoaXMgZGVmYXVsdCBhbmQgYWxsb3dzIGFueSB1c2VyIHdpdGggYSBibGFuayBwYXNzd29yZCB0byBhY2Nlc3MgdGhlCi0rICAgIHNlcnZpY2UuCi0rCi0rbnVsbG9rX3NlY3VyZQotKwotKyAgICBUaGUgZGVmYXVsdCBhY3Rpb24gb2YgdGhpcyBtb2R1bGUgaXMgdG8gbm90IHBlcm1pdCB0aGUgdXNlciBhY2Nlc3MgdG8gYQotKyAgICBzZXJ2aWNlIGlmIHRoZWlyIG9mZmljaWFsIHBhc3N3b3JkIGlzIGJsYW5rLiBUaGUgbnVsbG9rX3NlY3VyZSBhcmd1bWVudAotKyAgICBvdmVycmlkZXMgdGhpcyBkZWZhdWx0IGFuZCBhbGxvd3MgYW55IHVzZXIgd2l0aCBhIGJsYW5rIHBhc3N3b3JkIHRvIGFjY2VzcwotKyAgICB0aGUgc2VydmljZSBhcyBsb25nIGFzIHRoZSB2YWx1ZSBvZiBQQU1fVFRZIGlzIHNldCB0byBvbmUgb2YgdGhlIHZhbHVlcwotKyAgICBmb3VuZCBpbiAvZXRjL3NlY3VyZXR0eS4KLSAKLSB0cnlfZmlyc3RfcGFzcwotIAotZGlmZiAtLWdpdCBhL21vZHVsZXMvcGFtX3VuaXgvcGFtX3VuaXguOCBiL21vZHVsZXMvcGFtX3VuaXgvcGFtX3VuaXguOAotaW5kZXggMzM5MTc4Yi4uYTRiZDkwNiAxMDA2NDQKLS0tLSBhL21vZHVsZXMvcGFtX3VuaXgvcGFtX3VuaXguOAotKysrIGIvbW9kdWxlcy9wYW1fdW5peC9wYW1fdW5peC44Ci1AQCAtOTIsNyArOTIsMTQgQEAgVHVybnMgb2ZmIGluZm9ybWF0aW9uYWwgbWVzc2FnZXMgbmFtZWx5IG1lc3NhZ2VzIGFib3V0IHNlc3Npb24gb3BlbiBhbmQgY2xvc2UgdmkKLSAuUlMgNAotIFRoZSBkZWZhdWx0IGFjdGlvbiBvZiB0aGlzIG1vZHVsZSBpcyB0byBub3QgcGVybWl0IHRoZSB1c2VyIGFjY2VzcyB0byBhIHNlcnZpY2UgaWYgdGhlaXIgb2ZmaWNpYWwgcGFzc3dvcmQgaXMgYmxhbmtcJi4gVGhlCi0gXGZCbnVsbG9rXGZSCi0tYXJndW1lbnQgb3ZlcnJpZGVzIHRoaXMgZGVmYXVsdFwmLgotK2FyZ3VtZW50IG92ZXJyaWRlcyB0aGlzIGRlZmF1bHQgYW5kIGFsbG93cyBhbnkgdXNlciB3aXRoIGEgYmxhbmsgcGFzc3dvcmQgdG8gYWNjZXNzIHRoZSBzZXJ2aWNlXCYuCi0rLlJFCi0rLlBQCi0rXGZCbnVsbG9rX3NlY3VyZVxmUgotKy5SUyA0Ci0rVGhlIGRlZmF1bHQgYWN0aW9uIG9mIHRoaXMgbW9kdWxlIGlzIHRvIG5vdCBwZXJtaXQgdGhlIHVzZXIgYWNjZXNzIHRvIGEgc2VydmljZSBpZiB0aGVpciBvZmZpY2lhbCBwYXNzd29yZCBpcyBibGFua1wmLiBUaGUKLStcZkJudWxsb2tfc2VjdXJlXGZSCi0rYXJndW1lbnQgb3ZlcnJpZGVzIHRoaXMgZGVmYXVsdCBhbmQgYWxsb3dzIGFueSB1c2VyIHdpdGggYSBibGFuayBwYXNzd29yZCB0byBhY2Nlc3MgdGhlIHNlcnZpY2UgYXMgbG9uZyBhcyB0aGUgdmFsdWUgb2YgUEFNX1RUWSBpcyBzZXQgdG8gb25lIG9mIHRoZSB2YWx1ZXMgZm91bmQgaW4gL2V0Yy9zZWN1cmV0dHlcJi4KLSAuUkUKLSAuUFAKLSBcZkJ0cnlfZmlyc3RfcGFzc1xmUgogZGlmZiAtLWdpdCBhL21vZHVsZXMvcGFtX3VuaXgvcGFtX3VuaXguOC54bWwgYi9tb2R1bGVzL3BhbV91bml4L3BhbV91bml4LjgueG1sCi1pbmRleCBhOGI2NGJiLi4xY2VkNmY0IDEwMDY0NAoraW5kZXggMWIzMThmMS4uYmUwMzMwZSAxMDA2NDQKIC0tLSBhL21vZHVsZXMvcGFtX3VuaXgvcGFtX3VuaXguOC54bWwKICsrKyBiL21vZHVsZXMvcGFtX3VuaXgvcGFtX3VuaXguOC54bWwKIEBAIC0xNTksNyArMTU5LDI0IEBACkBAIC0xMTIsMTAgKzY3LDEwIEBACiAgICAgICAgICA8L2xpc3RpdGVtPgogICAgICAgIDwvdmFybGlzdGVudHJ5PgogZGlmZiAtLWdpdCBhL21vZHVsZXMvcGFtX3VuaXgvc3VwcG9ydC5jIGIvbW9kdWxlcy9wYW1fdW5peC9zdXBwb3J0LmMKLWluZGV4IGFiY2NkODIuLjIzNjE5NTcgMTAwNjQ0CitpbmRleCBmYzg1OTVlLi4yOWUzMzQxIDEwMDY0NAogLS0tIGEvbW9kdWxlcy9wYW1fdW5peC9zdXBwb3J0LmMKICsrKyBiL21vZHVsZXMvcGFtX3VuaXgvc3VwcG9ydC5jCi1AQCAtMTg5LDEzICsxODksMjIgQEAgaW50IF9zZXRfY3RybChwYW1faGFuZGxlX3QgKnBhbWgsIGludCBmbGFncywgaW50ICpyZW1lbWJlciwgaW50ICpyb3VuZHMsCitAQCAtMTgzLDEzICsxODMsMjIgQEAgaW50IF9zZXRfY3RybChwYW1faGFuZGxlX3QgKnBhbWgsIGludCBmbGFncywgaW50ICpyZW1lbWJlciwgaW50ICpyb3VuZHMsCiAgCS8qIG5vdyBwYXJzZSB0aGUgYXJndW1lbnRzIHRvIHRoaXMgbW9kdWxlICovCiAgCiAgCWZvciAoOyBhcmdjLS0gPiAwOyArK2FyZ3YpIHsKQEAgLTE0MSw3ICs5Niw3IEBACiAgCQkJfQogIAkJfQogIAotQEAgLTU2Niw2ICs1NzUsNyBAQCBzdGF0aWMgaW50IF91bml4X3J1bl9oZWxwZXJfYmluYXJ5KHBhbV9oYW5kbGVfdCAqcGFtaCwgY29uc3QgY2hhciAqcGFzc3dkLAorQEAgLTU2MCw2ICs1NjksNyBAQCBzdGF0aWMgaW50IF91bml4X3J1bl9oZWxwZXJfYmluYXJ5KHBhbV9oYW5kbGVfdCAqcGFtaCwgY29uc3QgY2hhciAqcGFzc3dkLAogICAgICBpZiAoY2hpbGQgPT0gMCkgewogIAlzdGF0aWMgY2hhciAqZW52cFtdID0geyBOVUxMIH07CiAgCWNvbnN0IGNoYXIgKmFyZ3NbXSA9IHsgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCB9OwpAQCAtMTQ5LDcgKzEwNCw3IEBACiAgCiAgCS8qIFhYWCAtIHNob3VsZCByZWFsbHkgdGlkeSB1cCBQQU0gaGVyZSB0b28gKi8KICAKLUBAIC01OTMsNyArNjAzLDE2IEBAIHN0YXRpYyBpbnQgX3VuaXhfcnVuX2hlbHBlcl9iaW5hcnkocGFtX2hhbmRsZV90ICpwYW1oLCBjb25zdCBjaGFyICpwYXNzd2QsCitAQCAtNTg3LDcgKzU5NywxNiBAQCBzdGF0aWMgaW50IF91bml4X3J1bl9oZWxwZXJfYmluYXJ5KHBhbV9oYW5kbGVfdCAqcGFtaCwgY29uc3QgY2hhciAqcGFzc3dkLAogIAkvKiBleGVjIGJpbmFyeSBoZWxwZXIgKi8KICAJYXJnc1swXSA9IENIS1BXRF9IRUxQRVI7CiAgCWFyZ3NbMV0gPSB1c2VyOwpAQCAtMTY3LDcgKzEyMiw3IEBACiAgCSAgYXJnc1syXT0ibnVsbG9rIjsKICAJfSBlbHNlIHsKICAJICBhcmdzWzJdPSJub251bGwiOwotQEAgLTY3OCw2ICs2OTcsMTcgQEAgX3VuaXhfYmxhbmtwYXNzd2QgKHBhbV9oYW5kbGVfdCAqcGFtaCwgdW5zaWduZWQgaW50IGN0cmwsIGNvbnN0IGNoYXIgKm5hbWUpCitAQCAtNjcyLDYgKzY5MSwxNyBAQCBfdW5peF9ibGFua3Bhc3N3ZCAocGFtX2hhbmRsZV90ICpwYW1oLCB1bnNpZ25lZCBpbnQgY3RybCwgY29uc3QgY2hhciAqbmFtZSkKICAJaWYgKG9uKFVOSVhfX05PTlVMTCwgY3RybCkpCiAgCQlyZXR1cm4gMDsJLyogd2lsbCBmYWlsIGJ1dCBkb24ndCBsZXQgb24geWV0ICovCiAgCkBAIC0xODUsNyArMTQwLDcgQEAKICAJLyogVU5JWCBwYXNzd29yZHMgYXJlYSAqLwogIAogIAlyZXR2YWwgPSBnZXRfcHdkX2hhc2gocGFtaCwgbmFtZSwgJnB3ZCwgJnNhbHQpOwotQEAgLTc2NCw3ICs3OTQsNyBAQCBpbnQgX3VuaXhfdmVyaWZ5X3Bhc3N3b3JkKHBhbV9oYW5kbGVfdCAqIHBhbWgsIGNvbnN0IGNoYXIgKm5hbWUKK0BAIC03NTgsNyArNzg4LDcgQEAgaW50IF91bml4X3ZlcmlmeV9wYXNzd29yZChwYW1faGFuZGxlX3QgKiBwYW1oLCBjb25zdCBjaGFyICpuYW1lCiAgCQkJfQogIAkJfQogIAl9IGVsc2UgewpAQCAtMTk1LDQ2ICsxNTAsNDYgQEAKICAKICAJaWYgKHJldHZhbCA9PSBQQU1fU1VDQ0VTUykgewogZGlmZiAtLWdpdCBhL21vZHVsZXMvcGFtX3VuaXgvc3VwcG9ydC5oIGIvbW9kdWxlcy9wYW1fdW5peC9zdXBwb3J0LmgKLWluZGV4IDM3MjljZTAuLjQzY2RiZWEgMTAwNjQ0CitpbmRleCBiNGMyNzljLi44ZGE0YThlIDEwMDY0NAogLS0tIGEvbW9kdWxlcy9wYW1fdW5peC9zdXBwb3J0LmgKICsrKyBiL21vZHVsZXMvcGFtX3VuaXgvc3VwcG9ydC5oCi1AQCAtOTksOCArOTksOSBAQCB0eXBlZGVmIHN0cnVjdCB7Ci0gI2RlZmluZSBVTklYX01JTl9QQVNTX0xFTiAgICAgICAgMjcJLyogbWluIGxlbmd0aCBmb3IgcGFzc3dvcmQgKi8KK0BAIC05OCw4ICs5OCw5IEBAIHR5cGVkZWYgc3RydWN0IHsKICAjZGVmaW5lIFVOSVhfUVVJRVQJCSAyOAkvKiBEb24ndCBwcmludCBpbmZvcm1hdGlvbmFsIG1lc3NhZ2VzICovCi0gI2RlZmluZSBVTklYX0RFUyAgICAgICAgICAgICAgICAgMjkgICAgIC8qIERFUywgZGVmYXVsdCAqLwotKyNkZWZpbmUgVU5JWF9OVUxMT0tfU0VDVVJFICAgICAgIDMwICAgICAvKiBOVUxMIHBhc3N3b3JkcyBhbGxvd2VkIG9ubHkgb24gc2VjdXJlIHR0eXMgKi8KKyAjZGVmaW5lIFVOSVhfTk9fUEFTU19FWFBJUlkgICAgICAyOSAgICAgLyogRG9uJ3QgY2hlY2sgZm9yIHBhc3N3b3JkIGV4cGlyYXRpb24gaWYgbm90IHVzZWQgZm9yIGF1dGhlbnRpY2F0aW9uICovCisgI2RlZmluZSBVTklYX0RFUyAgICAgICAgICAgICAgICAgMzAgICAgIC8qIERFUywgZGVmYXVsdCAqLworKyNkZWZpbmUgVU5JWF9OVUxMT0tfU0VDVVJFICAgICAgIDMxICAgICAvKiBOVUxMIHBhc3N3b3JkcyBhbGxvd2VkIG9ubHkgb24gc2VjdXJlIHR0eXMgKi8KICAvKiAtLS0tLS0tLS0tLS0tLSAqLwotLSNkZWZpbmUgVU5JWF9DVFJMU18gICAgICAgICAgICAgIDMwCS8qIG51bWJlciBvZiBjdHJsIGFyZ3VtZW50cyBkZWZpbmVkICovCi0rI2RlZmluZSBVTklYX0NUUkxTXyAgICAgICAgICAgICAgMzEJLyogbnVtYmVyIG9mIGN0cmwgYXJndW1lbnRzIGRlZmluZWQgKi8KKy0jZGVmaW5lIFVOSVhfQ1RSTFNfICAgICAgICAgICAgICAzMQkvKiBudW1iZXIgb2YgY3RybCBhcmd1bWVudHMgZGVmaW5lZCAqLworKyNkZWZpbmUgVU5JWF9DVFJMU18gICAgICAgICAgICAgIDMyCS8qIG51bWJlciBvZiBjdHJsIGFyZ3VtZW50cyBkZWZpbmVkICovCiAgCiAgI2RlZmluZSBVTklYX0RFU19DUllQVChjdHJsKQkob2ZmKFVOSVhfTUQ1X1BBU1MsY3RybCkmJm9mZihVTklYX0JJR0NSWVBULGN0cmwpJiZvZmYoVU5JWF9TSEEyNTZfUEFTUyxjdHJsKSYmb2ZmKFVOSVhfU0hBNTEyX1BBU1MsY3RybCkmJm9mZihVTklYX0JMT1dGSVNIX1BBU1MsY3RybCkpCiAgCi1AQCAtMTE4LDcgKzExOSw3IEBAIHN0YXRpYyBjb25zdCBVTklYX0N0cmxzIHVuaXhfYXJnc1tVTklYX0NUUkxTX10gPQotIC8qIFVOSVhfTk9UX1NFVF9QQVNTICovICAgIHsibm90X3NldF9wYXNzIiwgICAgX0FMTF9PTl8sICAgICAgICAgICAgICAgIDAxMDAsIDB9LAorQEAgLTExNyw3ICsxMTgsNyBAQCBzdGF0aWMgY29uc3QgVU5JWF9DdHJscyB1bml4X2FyZ3NbVU5JWF9DVFJMU19dID0KKyAvKiBVTklYX0FVVEhUT0tfVFlQRSAqLyAgICB7ImF1dGh0b2tfdHlwZT0iLCAgIF9BTExfT05fLCAgICAgICAgICAgICAgICAwMTAwLCAwfSwKICAvKiBVTklYX19QUkVMSU0gKi8gICAgICAgICB7TlVMTCwgICAgICAgICAgICAgIF9BTExfT05fXigwNjAwKSwgICAgICAgICAwMjAwLCAwfSwKICAvKiBVTklYX19VUERBVEUgKi8gICAgICAgICB7TlVMTCwgICAgICAgICAgICAgIF9BTExfT05fXigwNjAwKSwgICAgICAgICAwNDAwLCAwfSwKIC0vKiBVTklYX19OT05VTEwgKi8gICAgICAgICB7TlVMTCwgICAgICAgICAgICAgIF9BTExfT05fLCAgICAgICAgICAgICAgIDAxMDAwLCAwfSwKLSsvKiBVTklYX19OT05VTEwgKi8gICAgICAgICB7TlVMTCwgICAgICAgICAgICAgIF9BTExfT05fXigwMjAwMDAwMDAwMCksICAgMDEwMDAsIDB9LAorKy8qIFVOSVhfX05PTlVMTCAqLyAgICAgICAgIHtOVUxMLCAgICAgICAgICAgICAgX0FMTF9PTl9eKDAyMDAwMDAwMDAwKSwgMDEwMDAsIDB9LAogIC8qIFVOSVhfX1FVSUVUICovICAgICAgICAgIHtOVUxMLCAgICAgICAgICAgICAgX0FMTF9PTl8sICAgICAgICAgICAgICAgMDIwMDAsIDB9LAogIC8qIFVOSVhfVVNFX0FVVEhUT0sgKi8gICAgIHsidXNlX2F1dGh0b2siLCAgICAgX0FMTF9PTl8sICAgICAgICAgICAgICAgMDQwMDAsIDB9LAogIC8qIFVOSVhfU0hBRE9XICovICAgICAgICAgIHsic2hhZG93IiwgICAgICAgICAgX0FMTF9PTl8sICAgICAgICAgICAgICAwMTAwMDAsIDB9LAogQEAgLTEzOSw2ICsxNDAsNyBAQCBzdGF0aWMgY29uc3QgVU5JWF9DdHJscyB1bml4X2FyZ3NbVU5JWF9DVFJMU19dID0KLSAvKiBVTklYX01JTl9QQVNTX0xFTiAqLyAgICB7Im1pbmxlbj0iLAkJX0FMTF9PTl8sICAgICAgICAgMDQwMDAwMDAwMCwgMH0sCiAgLyogVU5JWF9RVUlFVCAqLyAgICAgICAgICAgeyJxdWlldCIsICAgICAgICAgICBfQUxMX09OXywgICAgICAgICAwMTAwMDAwMDAwMCwgMH0sCisgLyogVU5JWF9OT19QQVNTX0VYUElSWSAqLyAgeyJub19wYXNzX2V4cGlyeSIsICBfQUxMX09OXywgICAgICAgICAwMjAwMDAwMDAwMCwgMH0sCiAgLyogVU5JWF9ERVMgKi8gICAgICAgICAgICAgeyJkZXMiLCAgICAgICAgICAgICBfQUxMX09OX14oMDI2MDQyMDAwMCksICAgICAgMCwgMX0sCi0rLyogVU5JWF9OVUxMT0tfU0VDVVJFICovICAgeyJudWxsb2tfc2VjdXJlIiwgICBfQUxMX09OX14oMDEwMDApLCAgMDIwMDAwMDAwMDAsIDB9LAorKy8qIFVOSVhfTlVMTE9LX1NFQ1VSRSAqLyAgIHsibnVsbG9rX3NlY3VyZSIsICAgX0FMTF9PTl9eKDAxMDAwKSwgMDIwMDAwMDAwMDAsIDB9LAogIH07CiAgCiAgI2RlZmluZSBVTklYX0RFRkFVTFRTICAodW5peF9hcmdzW1VOSVhfX05PTlVMTF0uZmxhZykKLUBAIC0xNzEsNiArMTczLDggQEAgZXh0ZXJuIGludCBfdW5peF9yZWFkX3Bhc3N3b3JkKHBhbV9oYW5kbGVfdCAqIHBhbWgKLSAJCQksY29uc3QgY2hhciAqcHJvbXB0MgorQEAgLTE3Miw2ICsxNzQsOCBAQCBleHRlcm4gaW50IF91bml4X3JlYWRfcGFzc3dvcmQocGFtX2hhbmRsZV90ICogcGFtaAogIAkJCSxjb25zdCBjaGFyICpkYXRhX25hbWUKICAJCQksY29uc3Qgdm9pZCAqKnBhc3MpOwotK2V4dGVybiBpbnQgX3BhbW1vZHV0aWxfdHR5X3NlY3VyZShjb25zdCBwYW1faGFuZGxlX3QgKnBhbWgsCi0rICAgICAgICAgY29uc3QgY2hhciAqdXR0eW5hbWUpOwogIAorK2V4dGVybiBpbnQgX3BhbW1vZHV0aWxfdHR5X3NlY3VyZShjb25zdCBwYW1faGFuZGxlX3QgKnBhbWgsIGNvbnN0IGNoYXIgKnV0dHluYW1lKTsKKysKICBleHRlcm4gaW50IF91bml4X3J1bl92ZXJpZnlfYmluYXJ5KHBhbV9oYW5kbGVfdCAqcGFtaCwKICAJCQl1bnNpZ25lZCBpbnQgY3RybCwgY29uc3QgY2hhciAqdXNlciwgaW50ICpkYXlzbGVmdCk7CisgI2VuZGlmIC8qIF9QQU1fVU5JWF9TVVBQT1JUX0ggKi8KIC0tIAotMi4xLjQKKzIuNC4wCiAKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvcGFtL2xpYnBhbV8xLjIuMS5iYiBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvcGFtL2xpYnBhbV8xLjIuMS5iYgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzQxZWEyNC4uMDAwMDAwMAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3BhbS9saWJwYW1fMS4yLjEuYmIKKysrIC9kZXYvbnVsbApAQCAtMSwxNzEgKzAsMCBAQAotU1VNTUFSWSA9ICJMaW51eC1QQU0gKFBsdWdnYWJsZSBBdXRoZW50aWNhdGlvbiBNb2R1bGVzKSIKLURFU0NSSVBUSU9OID0gIkxpbnV4LVBBTSAoUGx1Z2dhYmxlIEF1dGhlbnRpY2F0aW9uIE1vZHVsZXMgZm9yIExpbnV4KSwgYSBmbGV4aWJsZSBtZWNoYW5pc20gZm9yIGF1dGhlbnRpY2F0aW5nIHVzZXJzIgotSE9NRVBBR0UgPSAiaHR0cHM6Ly9mZWRvcmFob3N0ZWQub3JnL2xpbnV4LXBhbS8iCi1CVUdUUkFDS0VSID0gImh0dHBzOi8vZmVkb3JhaG9zdGVkLm9yZy9saW51eC1wYW0vbmV3dGlja2V0IgotU0VDVElPTiA9ICJiYXNlIgotIyBQQU0gaXMgZHVhbCBsaWNlbnNlZCB1bmRlciBHUEwgYW5kIEJTRC4KLSMgL2V0Yy9wYW0uZCBjb21lcyBmcm9tIERlYmlhbiBsaWJwYW0tcnVudGltZSBpbiAyMDA5LTExIChhdCB0aGF0IHRpbWUKLSMgbGlicGFtLXJ1bnRpbWUtMS4wLjEgaXMgR1BMdjIrKSwgYnkgb3BlbmVtYmVkZGVkCi1MSUNFTlNFID0gIkdQTHYyKyB8IEJTRCIKLUxJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PTdlYjVjMWJmODU0ZTg4ODEwMDVkNjczNTk5ZWU3NGQzIgotCi1TUkNfVVJJID0gImh0dHA6Ly9saW51eC1wYW0ub3JnL2xpYnJhcnkvTGludXgtUEFNLSR7UFZ9LnRhci5iejIgXAotICAgICAgICAgICBmaWxlOi8vOTlfcGFtIFwKLSAgICAgICAgICAgZmlsZTovL3BhbS5kL2NvbW1vbi1hY2NvdW50IFwKLSAgICAgICAgICAgZmlsZTovL3BhbS5kL2NvbW1vbi1hdXRoIFwKLSAgICAgICAgICAgZmlsZTovL3BhbS5kL2NvbW1vbi1wYXNzd29yZCBcCi0gICAgICAgICAgIGZpbGU6Ly9wYW0uZC9jb21tb24tc2Vzc2lvbiBcCi0gICAgICAgICAgIGZpbGU6Ly9wYW0uZC9jb21tb24tc2Vzc2lvbi1ub25pbnRlcmFjdGl2ZSBcCi0gICAgICAgICAgIGZpbGU6Ly9wYW0uZC9vdGhlciBcCi0gICAgICAgICAgIGZpbGU6Ly9saWJwYW0teHRlc3RzLnBhdGNoIFwKLSAgICAgICAgICAgZmlsZTovL2ZpeHNlcGJ1aWxkLnBhdGNoIFwKLSAgICAgICAgICAgZmlsZTovL3BhbS1zZWN1cml0eS1hYnN0cmFjdC1zZWN1cmV0dHktaGFuZGxpbmcucGF0Y2ggXAotICAgICAgICAgICBmaWxlOi8vcGFtLXVuaXgtbnVsbG9rLXNlY3VyZS5wYXRjaCBcCi0gICAgICAgICAgIGZpbGU6Ly9saWJwYW0teHRlc3RzLXJlbW92ZS1iYXNoLWRlcGVuZGVuY3kucGF0Y2ggXAotICAgICAgICAgICBmaWxlOi8vY3J5cHRfY29uZmlndXJlLnBhdGNoIFwKLSAgICAgICAgICAiCi0KLVNSQ19VUklbbWQ1c3VtXSA9ICI5ZGM1MzA2NzU1NmQyZGQ1Njc4MDhmZDUwOTUxOWRkNiIKLVNSQ19VUklbc2hhMjU2c3VtXSA9ICIzNDJiMTIxMWMwZDNiMjAzYTdkZjI1NDBhNWIwM2E0MjhhMDg3YmQ4YTQ4YzE3ZTQ5YWUyNjhmOTkyYjMzNGQ5IgotCi1TUkNfVVJJX2FwcGVuZF9saWJjLXVjbGliYyA9ICIgZmlsZTovL3BhbS1uby1pbm5ldGdyLnBhdGNoIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWxlOi8vdXNlLXV0bXB4LnBhdGNoIgotCi1TUkNfVVJJX2FwcGVuZF9saWJjLW11c2wgPSAiIGZpbGU6Ly9wYW0tbm8taW5uZXRnci5wYXRjaCBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly8wMDAxLUFkZC1zdXBwb3J0LWZvci1kZWZpbmluZy1taXNzaW5nLWZ1bmNpdG9uYWxpdHkucGF0Y2ggXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWxlOi8vaW5jbHVkZV9wYXRoc19oZWFkZXIucGF0Y2ggXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIgotCi1ERVBFTkRTID0gImJpc29uIGZsZXggZmxleC1uYXRpdmUgY3JhY2tsaWIiCi0KLUVYVFJBX09FQ09ORiA9ICItLXdpdGgtZGItdW5pcXVlbmFtZT1fcGFtIFwKLSAgICAgICAgICAgICAgICAtLWluY2x1ZGVkaXI9JHtpbmNsdWRlZGlyfS9zZWN1cml0eSBcCi0gICAgICAgICAgICAgICAgLS1saWJkaXI9JHtiYXNlX2xpYmRpcn0gXAotICAgICAgICAgICAgICAgIC0tZGlzYWJsZS1uaXMgXAotICAgICAgICAgICAgICAgIC0tZGlzYWJsZS1yZWdlbmVyYXRlLWRvY3UgXAotCQktLWRpc2FibGUtcHJlbHVkZSIKLQotQ0ZMQUdTX2FwcGVuZCA9ICIgLWZQSUMgIgotCi1QUiA9ICJyNSIKLQotUyA9ICIke1dPUktESVJ9L0xpbnV4LVBBTS0ke1BWfSIKLQotaW5oZXJpdCBhdXRvdG9vbHMgZ2V0dGV4dCBwa2djb25maWcKLQotUEFDS0FHRUNPTkZJR1thdWRpdF0gPSAiLS1lbmFibGUtYXVkaXQsLS1kaXNhYmxlLWF1ZGl0LGF1ZGl0LCIKLQotUEFDS0FHRVMgKz0gIiR7UE59LXJ1bnRpbWUgJHtQTn0teHRlc3RzIgotRklMRVNfJHtQTn0gPSAiJHtiYXNlX2xpYmRpcn0vbGliKiR7U09MSUJTfSIKLUZJTEVTXyR7UE59LWRldiArPSAiJHtiYXNlX2xpYmRpcn0vc2VjdXJpdHkvKi5sYSAke2Jhc2VfbGliZGlyfS8qLmxhICR7YmFzZV9saWJkaXJ9L2xpYioke1NPTElCU0RFVn0iCi1GSUxFU18ke1BOfS1ydW50aW1lID0gIiR7c3lzY29uZmRpcn0iCi1GSUxFU18ke1BOfS14dGVzdHMgPSAiJHtkYXRhZGlyfS9MaW51eC1QQU0veHRlc3RzIgotCi1QQUNLQUdFU19EWU5BTUlDICs9ICJeJHtNTFBSRUZJWH1wYW0tcGx1Z2luLS4qIgotCi1kZWYgZ2V0X211bHRpbGliX2JpdChkKToKLSAgICBiYXNlbGliID0gZC5nZXRWYXIoJ2Jhc2VsaWInLCBUcnVlKSBvciAnJwotICAgIHJldHVybiBiYXNlbGliLnJlcGxhY2UoJ2xpYicsICcnKQotCi1saWJwYW1fc3VmZml4ID0gInN1ZmZpeCR7QGdldF9tdWx0aWxpYl9iaXQoZCl9IgotCi1SUFJPVklERVNfJHtQTn0gKz0gIiR7UE59LSR7bGlicGFtX3N1ZmZpeH0iCi1SUFJPVklERVNfJHtQTn0tcnVudGltZSArPSAiJHtQTn0tcnVudGltZS0ke2xpYnBhbV9zdWZmaXh9IgotCi1SREVQRU5EU18ke1BOfS1ydW50aW1lID0gIiR7UE59LSR7bGlicGFtX3N1ZmZpeH0gXAotICAgICR7TUxQUkVGSVh9cGFtLXBsdWdpbi1kZW55LSR7bGlicGFtX3N1ZmZpeH0gXAotICAgICR7TUxQUkVGSVh9cGFtLXBsdWdpbi1wZXJtaXQtJHtsaWJwYW1fc3VmZml4fSBcCi0gICAgJHtNTFBSRUZJWH1wYW0tcGx1Z2luLXdhcm4tJHtsaWJwYW1fc3VmZml4fSBcCi0gICAgJHtNTFBSRUZJWH1wYW0tcGx1Z2luLXVuaXgtJHtsaWJwYW1fc3VmZml4fSBcCi0gICAgIgotUkRFUEVORFNfJHtQTn0teHRlc3RzID0gIiR7UE59LSR7bGlicGFtX3N1ZmZpeH0gXAotICAgICR7TUxQUkVGSVh9cGFtLXBsdWdpbi1hY2Nlc3MtJHtsaWJwYW1fc3VmZml4fSBcCi0gICAgJHtNTFBSRUZJWH1wYW0tcGx1Z2luLWRlYnVnLSR7bGlicGFtX3N1ZmZpeH0gXAotICAgICR7TUxQUkVGSVh9cGFtLXBsdWdpbi1jcmFja2xpYi0ke2xpYnBhbV9zdWZmaXh9IFwKLSAgICAke01MUFJFRklYfXBhbS1wbHVnaW4tcHdoaXN0b3J5LSR7bGlicGFtX3N1ZmZpeH0gXAotICAgICR7TUxQUkVGSVh9cGFtLXBsdWdpbi1zdWNjZWVkLWlmLSR7bGlicGFtX3N1ZmZpeH0gXAotICAgICR7TUxQUkVGSVh9cGFtLXBsdWdpbi10aW1lLSR7bGlicGFtX3N1ZmZpeH0gXAotICAgIGNvcmV1dGlscyIKLQotIyBGSVhNRTogTmF0aXZlIHN1ZmZpeCBicmVha3MgaGVyZSwgZGlzYWJsZSBpdCBmb3Igbm93Ci1SUkVDT01NRU5EU18ke1BOfSA9ICIke1BOfS1ydW50aW1lLSR7bGlicGFtX3N1ZmZpeH0iCi1SUkVDT01NRU5EU18ke1BOfV9jbGFzcy1uYXRpdmUgPSAiIgotCi1weXRob24gcG9wdWxhdGVfcGFja2FnZXNfcHJlcGVuZCAoKSB7Ci0gICAgZGVmIHBhbV9wbHVnaW5fYXBwZW5kX2ZpbGUocG4sIGRpciwgZmlsZSk6Ci0gICAgICAgIG5mID0gb3MucGF0aC5qb2luKGRpciwgZmlsZSkKLSAgICAgICAgb2YgPSBkLmdldFZhcignRklMRVNfJyArIHBuLCBUcnVlKQotICAgICAgICBpZiBvZjoKLSAgICAgICAgICAgIG5mID0gb2YgKyAiICIgKyBuZgotICAgICAgICBkLnNldFZhcignRklMRVNfJyArIHBuLCBuZikKLQotICAgIGRlZiBwYW1fcGx1Z2luX2hvb2soZmlsZSwgcGtnLCBwYXR0ZXJuLCBmb3JtYXQsIGJhc2VuYW1lKToKLSAgICAgICAgcG4gPSBkLmdldFZhcignUE4nLCBUcnVlKQotICAgICAgICBsaWJwYW1fc3VmZml4ID0gZC5nZXRWYXIoJ2xpYnBhbV9zdWZmaXgnLCBUcnVlKQotCi0gICAgICAgIHJkZXBzID0gZC5nZXRWYXIoJ1JERVBFTkRTXycgKyBwa2csIFRydWUpCi0gICAgICAgIGlmIHJkZXBzOgotICAgICAgICAgICAgcmRlcHMgPSByZGVwcyArICIgIiArIHBuICsgIi0iICsgbGlicGFtX3N1ZmZpeAotICAgICAgICBlbHNlOgotICAgICAgICAgICAgcmRlcHMgPSBwbiArICItIiArIGxpYnBhbV9zdWZmaXgKLSAgICAgICAgZC5zZXRWYXIoJ1JERVBFTkRTXycgKyBwa2csIHJkZXBzKQotCi0gICAgICAgIHByb3ZpZGVzID0gZC5nZXRWYXIoJ1JQUk9WSURFU18nICsgcGtnLCBUcnVlKQotICAgICAgICBpZiBwcm92aWRlczoKLSAgICAgICAgICAgIHByb3ZpZGVzID0gcHJvdmlkZXMgKyAiICIgKyBwa2cgKyAiLSIgKyBsaWJwYW1fc3VmZml4Ci0gICAgICAgIGVsc2U6Ci0gICAgICAgICAgICBwcm92aWRlcyA9IHBrZyArICItIiArIGxpYnBhbV9zdWZmaXgKLSAgICAgICAgZC5zZXRWYXIoJ1JQUk9WSURFU18nICsgcGtnLCBwcm92aWRlcykKLQotICAgIG1scHJlZml4ID0gZC5nZXRWYXIoJ01MUFJFRklYJywgVHJ1ZSkgb3IgJycKLSAgICBkdmFyID0gYmIuZGF0YS5leHBhbmQoJyR7V09SS0RJUn0vcGFja2FnZScsIGQsIFRydWUpCi0gICAgcGFtX2xpYmRpciA9IGQuZXhwYW5kKCcke2Jhc2VfbGliZGlyfS9zZWN1cml0eScpCi0gICAgcGFtX3NiaW5kaXIgPSBkLmV4cGFuZCgnJHtzYmluZGlyfScpCi0gICAgcGFtX2ZpbHRlcmRpciA9IGQuZXhwYW5kKCcke2Jhc2VfbGliZGlyfS9zZWN1cml0eS9wYW1fZmlsdGVyJykKLSAgICBwYW1fcGtnbmFtZSA9IG1scHJlZml4ICsgJ3BhbS1wbHVnaW4lcycKLQotICAgIGRvX3NwbGl0X3BhY2thZ2VzKGQsIHBhbV9saWJkaXIsICdecGFtKC4qKVwuc28kJywgcGFtX3BrZ25hbWUsCi0gICAgICAgICAgICAgICAgICAgICAgJ1BBTSBwbHVnaW4gZm9yICVzJywgaG9vaz1wYW1fcGx1Z2luX2hvb2ssIGV4dHJhX2RlcGVuZHM9JycpCi0gICAgcGFtX3BsdWdpbl9hcHBlbmRfZmlsZSgnJXNwYW0tcGx1Z2luLXVuaXgnICUgbWxwcmVmaXgsIHBhbV9zYmluZGlyLCAndW5peF9jaGtwd2QnKQotICAgIHBhbV9wbHVnaW5fYXBwZW5kX2ZpbGUoJyVzcGFtLXBsdWdpbi11bml4JyAlIG1scHJlZml4LCBwYW1fc2JpbmRpciwgJ3VuaXhfdXBkYXRlJykKLSAgICBwYW1fcGx1Z2luX2FwcGVuZF9maWxlKCclc3BhbS1wbHVnaW4tdGFsbHknICUgbWxwcmVmaXgsIHBhbV9zYmluZGlyLCAncGFtX3RhbGx5JykKLSAgICBwYW1fcGx1Z2luX2FwcGVuZF9maWxlKCclc3BhbS1wbHVnaW4tdGFsbHkyJyAlIG1scHJlZml4LCBwYW1fc2JpbmRpciwgJ3BhbV90YWxseTInKQotICAgIHBhbV9wbHVnaW5fYXBwZW5kX2ZpbGUoJyVzcGFtLXBsdWdpbi10aW1lc3RhbXAnICUgbWxwcmVmaXgsIHBhbV9zYmluZGlyLCAncGFtX3RpbWVzdGFtcF9jaGVjaycpCi0gICAgcGFtX3BsdWdpbl9hcHBlbmRfZmlsZSgnJXNwYW0tcGx1Z2luLW1raG9tZWRpcicgJSBtbHByZWZpeCwgcGFtX3NiaW5kaXIsICdta2hvbWVkaXJfaGVscGVyJykKLSAgICBwYW1fcGx1Z2luX2FwcGVuZF9maWxlKCclc3BhbS1wbHVnaW4tY29uc29sZScgJSBtbHByZWZpeCwgcGFtX3NiaW5kaXIsICdwYW1fY29uc29sZV9hcHBseScpCi0gICAgZG9fc3BsaXRfcGFja2FnZXMoZCwgcGFtX2ZpbHRlcmRpciwgJ14oLiopJCcsICdwYW0tZmlsdGVyLSVzJywgJ1BBTSBmaWx0ZXIgZm9yICVzJywgZXh0cmFfZGVwZW5kcz0nJykKLX0KLQotZG9faW5zdGFsbCgpIHsKLQlhdXRvdG9vbHNfZG9faW5zdGFsbAotCi0JIyBkb24ndCBpbnN0YWxsIC92YXIvcnVuIHdoZW4gcG9wdWxhdGluZyByb290ZnMuIERvIGl0IHRocm91Z2ggdm9sYXRpbGUKLQlybSAtcmYgJHtEfSR7bG9jYWxzdGF0ZWRpcn0KLQlpbnN0YWxsIC1kICR7RH0ke3N5c2NvbmZkaXJ9L2RlZmF1bHQvdm9sYXRpbGVzCi0JaW5zdGFsbCAtbSAwNjQ0ICR7V09SS0RJUn0vOTlfcGFtICR7RH0ke3N5c2NvbmZkaXJ9L2RlZmF1bHQvdm9sYXRpbGVzCi0KLQlpbnN0YWxsIC1kICR7RH0ke3N5c2NvbmZkaXJ9L3BhbS5kLwotCWluc3RhbGwgLW0gMDY0NCAke1dPUktESVJ9L3BhbS5kLyogJHtEfSR7c3lzY29uZmRpcn0vcGFtLmQvCi0KLQkjIFRoZSBsc2IgcmVxdWlyZXMgdW5peF9jaGtwd2QgaGFzIHNldHVpZCBwZXJtaXNzaW9uCi0JY2htb2QgNDc1NSAke0R9JHtzYmluZGlyfS91bml4X2Noa3B3ZAotCi0JaWYgJHtAYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsJ3N5c3RlbWQnLCd0cnVlJywnZmFsc2UnLGQpfTsgdGhlbgotCQllY2hvICJzZXNzaW9uIG9wdGlvbmFsIHBhbV9zeXN0ZW1kLnNvIiA+PiAke0R9JHtzeXNjb25mZGlyfS9wYW0uZC9jb21tb24tc2Vzc2lvbgotCWZpCi19Ci0KLXB5dGhvbiBkb19wYW1fc2FuaXR5ICgpIHsKLSAgICBpZiBub3QgYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsICdwYW0nLCBUcnVlLCBGYWxzZSwgZCk6Ci0gICAgICAgIGJiLndhcm4oIkJ1aWxkaW5nIGxpYnBhbSBidXQgJ3BhbScgaXNuJ3QgaW4gRElTVFJPX0ZFQVRVUkVTLCBQQU0gd29uJ3Qgd29yayBjb3JyZWN0bHkiKQotfQotYWRkdGFzayBwYW1fc2FuaXR5IGJlZm9yZSBkb19jb25maWd1cmUKLQotQkJDTEFTU0VYVEVORCA9ICJuYXRpdmVzZGsgbmF0aXZlIgotCi1DT05GRklMRVNfJHtQTn0tcnVudGltZSArPSAiJHtzeXNjb25mZGlyfS9wYW0uZC9jb21tb24tc2Vzc2lvbiIKLUNPTkZGSUxFU18ke1BOfS1ydW50aW1lICs9ICIke3N5c2NvbmZkaXJ9L3BhbS5kL2NvbW1vbi1hdXRoIgotQ09ORkZJTEVTXyR7UE59LXJ1bnRpbWUgKz0gIiR7c3lzY29uZmRpcn0vcGFtLmQvY29tbW9uLXBhc3N3b3JkIgotQ09ORkZJTEVTXyR7UE59LXJ1bnRpbWUgKz0gIiR7c3lzY29uZmRpcn0vcGFtLmQvY29tbW9uLXNlc3Npb24tbm9uaW50ZXJhY3RpdmUiCi1DT05GRklMRVNfJHtQTn0tcnVudGltZSArPSAiJHtzeXNjb25mZGlyfS9wYW0uZC9jb21tb24tYWNjb3VudCIKLUNPTkZGSUxFU18ke1BOfS1ydW50aW1lICs9ICIke3N5c2NvbmZkaXJ9L3NlY3VyaXR5L2xpbWl0cy5jb25mIgpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9wYW0vbGlicGFtXzEuMy4wLmJiIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9wYW0vbGlicGFtXzEuMy4wLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJiNWE0YmQKLS0tIC9kZXYvbnVsbAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3BhbS9saWJwYW1fMS4zLjAuYmIKQEAgLTAsMCArMSwxNjkgQEAKK1NVTU1BUlkgPSAiTGludXgtUEFNIChQbHVnZ2FibGUgQXV0aGVudGljYXRpb24gTW9kdWxlcykiCitERVNDUklQVElPTiA9ICJMaW51eC1QQU0gKFBsdWdnYWJsZSBBdXRoZW50aWNhdGlvbiBNb2R1bGVzIGZvciBMaW51eCksIGEgZmxleGlibGUgbWVjaGFuaXNtIGZvciBhdXRoZW50aWNhdGluZyB1c2VycyIKK0hPTUVQQUdFID0gImh0dHBzOi8vZmVkb3JhaG9zdGVkLm9yZy9saW51eC1wYW0vIgorQlVHVFJBQ0tFUiA9ICJodHRwczovL2ZlZG9yYWhvc3RlZC5vcmcvbGludXgtcGFtL25ld3RpY2tldCIKK1NFQ1RJT04gPSAiYmFzZSIKKyMgUEFNIGlzIGR1YWwgbGljZW5zZWQgdW5kZXIgR1BMIGFuZCBCU0QuCisjIC9ldGMvcGFtLmQgY29tZXMgZnJvbSBEZWJpYW4gbGlicGFtLXJ1bnRpbWUgaW4gMjAwOS0xMSAoYXQgdGhhdCB0aW1lCisjIGxpYnBhbS1ydW50aW1lLTEuMC4xIGlzIEdQTHYyKyksIGJ5IG9wZW5lbWJlZGRlZAorTElDRU5TRSA9ICJHUEx2MisgfCBCU0QiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT03ZWI1YzFiZjg1NGU4ODgxMDA1ZDY3MzU5OWVlNzRkMyIKKworU1JDX1VSSSA9ICJodHRwOi8vbGludXgtcGFtLm9yZy9saWJyYXJ5L0xpbnV4LVBBTS0ke1BWfS50YXIuYnoyIFwKKyAgICAgICAgICAgZmlsZTovLzk5X3BhbSBcCisgICAgICAgICAgIGZpbGU6Ly9wYW0uZC9jb21tb24tYWNjb3VudCBcCisgICAgICAgICAgIGZpbGU6Ly9wYW0uZC9jb21tb24tYXV0aCBcCisgICAgICAgICAgIGZpbGU6Ly9wYW0uZC9jb21tb24tcGFzc3dvcmQgXAorICAgICAgICAgICBmaWxlOi8vcGFtLmQvY29tbW9uLXNlc3Npb24gXAorICAgICAgICAgICBmaWxlOi8vcGFtLmQvY29tbW9uLXNlc3Npb24tbm9uaW50ZXJhY3RpdmUgXAorICAgICAgICAgICBmaWxlOi8vcGFtLmQvb3RoZXIgXAorICAgICAgICAgICBmaWxlOi8vbGlicGFtLXh0ZXN0cy5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9maXhzZXBidWlsZC5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9wYW0tc2VjdXJpdHktYWJzdHJhY3Qtc2VjdXJldHR5LWhhbmRsaW5nLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL3BhbS11bml4LW51bGxvay1zZWN1cmUucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vbGlicGFtLXh0ZXN0cy1yZW1vdmUtYmFzaC1kZXBlbmRlbmN5LnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL2NyeXB0X2NvbmZpZ3VyZS5wYXRjaCBcCisgICAgICAgICAgIgorCitTUkNfVVJJW21kNXN1bV0gPSAiZGE0YjIyODliN2NmYjE5NTgzZDU0ZTllYWFlZjFjM2EiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiMjQxYWVkMWVmNTIyZjY2ZWQ2NzI3MTllY2YyMjA1ZWM1MTNmZDAwNzVlZDgwY2RhOGUwODZhNWIxYTAxZDFiYiIKKworU1JDX1VSSV9hcHBlbmRfbGliYy11Y2xpYmMgPSAiIGZpbGU6Ly91c2UtdXRtcHgucGF0Y2giCisKK1NSQ19VUklfYXBwZW5kX2xpYmMtbXVzbCA9ICIgZmlsZTovLzAwMDEtQWRkLXN1cHBvcnQtZm9yLWRlZmluaW5nLW1pc3NpbmctZnVuY2l0b25hbGl0eS5wYXRjaCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9pbmNsdWRlX3BhdGhzX2hlYWRlci5wYXRjaCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAiCisKK0RFUEVORFMgPSAiYmlzb24tbmF0aXZlIGZsZXggZmxleC1uYXRpdmUgY3JhY2tsaWIgbGlieG1sMi1uYXRpdmUiCisKK0VYVFJBX09FQ09ORiA9ICItLXdpdGgtZGItdW5pcXVlbmFtZT1fcGFtIFwKKyAgICAgICAgICAgICAgICAtLWluY2x1ZGVkaXI9JHtpbmNsdWRlZGlyfS9zZWN1cml0eSBcCisgICAgICAgICAgICAgICAgLS1saWJkaXI9JHtiYXNlX2xpYmRpcn0gXAorICAgICAgICAgICAgICAgIC0tZGlzYWJsZS1uaXMgXAorICAgICAgICAgICAgICAgIC0tZGlzYWJsZS1yZWdlbmVyYXRlLWRvY3UgXAorCQktLWRpc2FibGUtcHJlbHVkZSIKKworQ0ZMQUdTX2FwcGVuZCA9ICIgLWZQSUMgIgorCitQUiA9ICJyNSIKKworUyA9ICIke1dPUktESVJ9L0xpbnV4LVBBTS0ke1BWfSIKKworaW5oZXJpdCBhdXRvdG9vbHMgZ2V0dGV4dCBwa2djb25maWcKKworUEFDS0FHRUNPTkZJR1thdWRpdF0gPSAiLS1lbmFibGUtYXVkaXQsLS1kaXNhYmxlLWF1ZGl0LGF1ZGl0LCIKKworUEFDS0FHRVMgKz0gIiR7UE59LXJ1bnRpbWUgJHtQTn0teHRlc3RzIgorRklMRVNfJHtQTn0gPSAiJHtiYXNlX2xpYmRpcn0vbGliKiR7U09MSUJTfSIKK0ZJTEVTXyR7UE59LWRldiArPSAiJHtiYXNlX2xpYmRpcn0vc2VjdXJpdHkvKi5sYSAke2Jhc2VfbGliZGlyfS8qLmxhICR7YmFzZV9saWJkaXJ9L2xpYioke1NPTElCU0RFVn0iCitGSUxFU18ke1BOfS1ydW50aW1lID0gIiR7c3lzY29uZmRpcn0iCitGSUxFU18ke1BOfS14dGVzdHMgPSAiJHtkYXRhZGlyfS9MaW51eC1QQU0veHRlc3RzIgorCitQQUNLQUdFU19EWU5BTUlDICs9ICJeJHtNTFBSRUZJWH1wYW0tcGx1Z2luLS4qIgorCitkZWYgZ2V0X211bHRpbGliX2JpdChkKToKKyAgICBiYXNlbGliID0gZC5nZXRWYXIoJ2Jhc2VsaWInLCBUcnVlKSBvciAnJworICAgIHJldHVybiBiYXNlbGliLnJlcGxhY2UoJ2xpYicsICcnKQorCitsaWJwYW1fc3VmZml4ID0gInN1ZmZpeCR7QGdldF9tdWx0aWxpYl9iaXQoZCl9IgorCitSUFJPVklERVNfJHtQTn0gKz0gIiR7UE59LSR7bGlicGFtX3N1ZmZpeH0iCitSUFJPVklERVNfJHtQTn0tcnVudGltZSArPSAiJHtQTn0tcnVudGltZS0ke2xpYnBhbV9zdWZmaXh9IgorCitSREVQRU5EU18ke1BOfS1ydW50aW1lID0gIiR7UE59LSR7bGlicGFtX3N1ZmZpeH0gXAorICAgICR7TUxQUkVGSVh9cGFtLXBsdWdpbi1kZW55LSR7bGlicGFtX3N1ZmZpeH0gXAorICAgICR7TUxQUkVGSVh9cGFtLXBsdWdpbi1wZXJtaXQtJHtsaWJwYW1fc3VmZml4fSBcCisgICAgJHtNTFBSRUZJWH1wYW0tcGx1Z2luLXdhcm4tJHtsaWJwYW1fc3VmZml4fSBcCisgICAgJHtNTFBSRUZJWH1wYW0tcGx1Z2luLXVuaXgtJHtsaWJwYW1fc3VmZml4fSBcCisgICAgIgorUkRFUEVORFNfJHtQTn0teHRlc3RzID0gIiR7UE59LSR7bGlicGFtX3N1ZmZpeH0gXAorICAgICR7TUxQUkVGSVh9cGFtLXBsdWdpbi1hY2Nlc3MtJHtsaWJwYW1fc3VmZml4fSBcCisgICAgJHtNTFBSRUZJWH1wYW0tcGx1Z2luLWRlYnVnLSR7bGlicGFtX3N1ZmZpeH0gXAorICAgICR7TUxQUkVGSVh9cGFtLXBsdWdpbi1jcmFja2xpYi0ke2xpYnBhbV9zdWZmaXh9IFwKKyAgICAke01MUFJFRklYfXBhbS1wbHVnaW4tcHdoaXN0b3J5LSR7bGlicGFtX3N1ZmZpeH0gXAorICAgICR7TUxQUkVGSVh9cGFtLXBsdWdpbi1zdWNjZWVkLWlmLSR7bGlicGFtX3N1ZmZpeH0gXAorICAgICR7TUxQUkVGSVh9cGFtLXBsdWdpbi10aW1lLSR7bGlicGFtX3N1ZmZpeH0gXAorICAgIGNvcmV1dGlscyIKKworIyBGSVhNRTogTmF0aXZlIHN1ZmZpeCBicmVha3MgaGVyZSwgZGlzYWJsZSBpdCBmb3Igbm93CitSUkVDT01NRU5EU18ke1BOfSA9ICIke1BOfS1ydW50aW1lLSR7bGlicGFtX3N1ZmZpeH0iCitSUkVDT01NRU5EU18ke1BOfV9jbGFzcy1uYXRpdmUgPSAiIgorCitweXRob24gcG9wdWxhdGVfcGFja2FnZXNfcHJlcGVuZCAoKSB7CisgICAgZGVmIHBhbV9wbHVnaW5fYXBwZW5kX2ZpbGUocG4sIGRpciwgZmlsZSk6CisgICAgICAgIG5mID0gb3MucGF0aC5qb2luKGRpciwgZmlsZSkKKyAgICAgICAgb2YgPSBkLmdldFZhcignRklMRVNfJyArIHBuLCBUcnVlKQorICAgICAgICBpZiBvZjoKKyAgICAgICAgICAgIG5mID0gb2YgKyAiICIgKyBuZgorICAgICAgICBkLnNldFZhcignRklMRVNfJyArIHBuLCBuZikKKworICAgIGRlZiBwYW1fcGx1Z2luX2hvb2soZmlsZSwgcGtnLCBwYXR0ZXJuLCBmb3JtYXQsIGJhc2VuYW1lKToKKyAgICAgICAgcG4gPSBkLmdldFZhcignUE4nLCBUcnVlKQorICAgICAgICBsaWJwYW1fc3VmZml4ID0gZC5nZXRWYXIoJ2xpYnBhbV9zdWZmaXgnLCBUcnVlKQorCisgICAgICAgIHJkZXBzID0gZC5nZXRWYXIoJ1JERVBFTkRTXycgKyBwa2csIFRydWUpCisgICAgICAgIGlmIHJkZXBzOgorICAgICAgICAgICAgcmRlcHMgPSByZGVwcyArICIgIiArIHBuICsgIi0iICsgbGlicGFtX3N1ZmZpeAorICAgICAgICBlbHNlOgorICAgICAgICAgICAgcmRlcHMgPSBwbiArICItIiArIGxpYnBhbV9zdWZmaXgKKyAgICAgICAgZC5zZXRWYXIoJ1JERVBFTkRTXycgKyBwa2csIHJkZXBzKQorCisgICAgICAgIHByb3ZpZGVzID0gZC5nZXRWYXIoJ1JQUk9WSURFU18nICsgcGtnLCBUcnVlKQorICAgICAgICBpZiBwcm92aWRlczoKKyAgICAgICAgICAgIHByb3ZpZGVzID0gcHJvdmlkZXMgKyAiICIgKyBwa2cgKyAiLSIgKyBsaWJwYW1fc3VmZml4CisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBwcm92aWRlcyA9IHBrZyArICItIiArIGxpYnBhbV9zdWZmaXgKKyAgICAgICAgZC5zZXRWYXIoJ1JQUk9WSURFU18nICsgcGtnLCBwcm92aWRlcykKKworICAgIG1scHJlZml4ID0gZC5nZXRWYXIoJ01MUFJFRklYJywgVHJ1ZSkgb3IgJycKKyAgICBkdmFyID0gYmIuZGF0YS5leHBhbmQoJyR7V09SS0RJUn0vcGFja2FnZScsIGQsIFRydWUpCisgICAgcGFtX2xpYmRpciA9IGQuZXhwYW5kKCcke2Jhc2VfbGliZGlyfS9zZWN1cml0eScpCisgICAgcGFtX3NiaW5kaXIgPSBkLmV4cGFuZCgnJHtzYmluZGlyfScpCisgICAgcGFtX2ZpbHRlcmRpciA9IGQuZXhwYW5kKCcke2Jhc2VfbGliZGlyfS9zZWN1cml0eS9wYW1fZmlsdGVyJykKKyAgICBwYW1fcGtnbmFtZSA9IG1scHJlZml4ICsgJ3BhbS1wbHVnaW4lcycKKworICAgIGRvX3NwbGl0X3BhY2thZ2VzKGQsIHBhbV9saWJkaXIsICdecGFtKC4qKVwuc28kJywgcGFtX3BrZ25hbWUsCisgICAgICAgICAgICAgICAgICAgICAgJ1BBTSBwbHVnaW4gZm9yICVzJywgaG9vaz1wYW1fcGx1Z2luX2hvb2ssIGV4dHJhX2RlcGVuZHM9JycpCisgICAgcGFtX3BsdWdpbl9hcHBlbmRfZmlsZSgnJXNwYW0tcGx1Z2luLXVuaXgnICUgbWxwcmVmaXgsIHBhbV9zYmluZGlyLCAndW5peF9jaGtwd2QnKQorICAgIHBhbV9wbHVnaW5fYXBwZW5kX2ZpbGUoJyVzcGFtLXBsdWdpbi11bml4JyAlIG1scHJlZml4LCBwYW1fc2JpbmRpciwgJ3VuaXhfdXBkYXRlJykKKyAgICBwYW1fcGx1Z2luX2FwcGVuZF9maWxlKCclc3BhbS1wbHVnaW4tdGFsbHknICUgbWxwcmVmaXgsIHBhbV9zYmluZGlyLCAncGFtX3RhbGx5JykKKyAgICBwYW1fcGx1Z2luX2FwcGVuZF9maWxlKCclc3BhbS1wbHVnaW4tdGFsbHkyJyAlIG1scHJlZml4LCBwYW1fc2JpbmRpciwgJ3BhbV90YWxseTInKQorICAgIHBhbV9wbHVnaW5fYXBwZW5kX2ZpbGUoJyVzcGFtLXBsdWdpbi10aW1lc3RhbXAnICUgbWxwcmVmaXgsIHBhbV9zYmluZGlyLCAncGFtX3RpbWVzdGFtcF9jaGVjaycpCisgICAgcGFtX3BsdWdpbl9hcHBlbmRfZmlsZSgnJXNwYW0tcGx1Z2luLW1raG9tZWRpcicgJSBtbHByZWZpeCwgcGFtX3NiaW5kaXIsICdta2hvbWVkaXJfaGVscGVyJykKKyAgICBwYW1fcGx1Z2luX2FwcGVuZF9maWxlKCclc3BhbS1wbHVnaW4tY29uc29sZScgJSBtbHByZWZpeCwgcGFtX3NiaW5kaXIsICdwYW1fY29uc29sZV9hcHBseScpCisgICAgZG9fc3BsaXRfcGFja2FnZXMoZCwgcGFtX2ZpbHRlcmRpciwgJ14oLiopJCcsICdwYW0tZmlsdGVyLSVzJywgJ1BBTSBmaWx0ZXIgZm9yICVzJywgZXh0cmFfZGVwZW5kcz0nJykKK30KKworZG9faW5zdGFsbCgpIHsKKwlhdXRvdG9vbHNfZG9faW5zdGFsbAorCisJIyBkb24ndCBpbnN0YWxsIC92YXIvcnVuIHdoZW4gcG9wdWxhdGluZyByb290ZnMuIERvIGl0IHRocm91Z2ggdm9sYXRpbGUKKwlybSAtcmYgJHtEfSR7bG9jYWxzdGF0ZWRpcn0KKwlpbnN0YWxsIC1kICR7RH0ke3N5c2NvbmZkaXJ9L2RlZmF1bHQvdm9sYXRpbGVzCisJaW5zdGFsbCAtbSAwNjQ0ICR7V09SS0RJUn0vOTlfcGFtICR7RH0ke3N5c2NvbmZkaXJ9L2RlZmF1bHQvdm9sYXRpbGVzCisKKwlpbnN0YWxsIC1kICR7RH0ke3N5c2NvbmZkaXJ9L3BhbS5kLworCWluc3RhbGwgLW0gMDY0NCAke1dPUktESVJ9L3BhbS5kLyogJHtEfSR7c3lzY29uZmRpcn0vcGFtLmQvCisKKwkjIFRoZSBsc2IgcmVxdWlyZXMgdW5peF9jaGtwd2QgaGFzIHNldHVpZCBwZXJtaXNzaW9uCisJY2htb2QgNDc1NSAke0R9JHtzYmluZGlyfS91bml4X2Noa3B3ZAorCisJaWYgJHtAYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsJ3N5c3RlbWQnLCd0cnVlJywnZmFsc2UnLGQpfTsgdGhlbgorCQllY2hvICJzZXNzaW9uIG9wdGlvbmFsIHBhbV9zeXN0ZW1kLnNvIiA+PiAke0R9JHtzeXNjb25mZGlyfS9wYW0uZC9jb21tb24tc2Vzc2lvbgorCWZpCit9CisKK3B5dGhvbiBkb19wYW1fc2FuaXR5ICgpIHsKKyAgICBpZiBub3QgYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsICdwYW0nLCBUcnVlLCBGYWxzZSwgZCk6CisgICAgICAgIGJiLndhcm4oIkJ1aWxkaW5nIGxpYnBhbSBidXQgJ3BhbScgaXNuJ3QgaW4gRElTVFJPX0ZFQVRVUkVTLCBQQU0gd29uJ3Qgd29yayBjb3JyZWN0bHkiKQorfQorYWRkdGFzayBwYW1fc2FuaXR5IGJlZm9yZSBkb19jb25maWd1cmUKKworQkJDTEFTU0VYVEVORCA9ICJuYXRpdmVzZGsgbmF0aXZlIgorCitDT05GRklMRVNfJHtQTn0tcnVudGltZSArPSAiJHtzeXNjb25mZGlyfS9wYW0uZC9jb21tb24tc2Vzc2lvbiIKK0NPTkZGSUxFU18ke1BOfS1ydW50aW1lICs9ICIke3N5c2NvbmZkaXJ9L3BhbS5kL2NvbW1vbi1hdXRoIgorQ09ORkZJTEVTXyR7UE59LXJ1bnRpbWUgKz0gIiR7c3lzY29uZmRpcn0vcGFtLmQvY29tbW9uLXBhc3N3b3JkIgorQ09ORkZJTEVTXyR7UE59LXJ1bnRpbWUgKz0gIiR7c3lzY29uZmRpcn0vcGFtLmQvY29tbW9uLXNlc3Npb24tbm9uaW50ZXJhY3RpdmUiCitDT05GRklMRVNfJHtQTn0tcnVudGltZSArPSAiJHtzeXNjb25mZGlyfS9wYW0uZC9jb21tb24tYWNjb3VudCIKK0NPTkZGSUxFU18ke1BOfS1ydW50aW1lICs9ICIke3N5c2NvbmZkaXJ9L3NlY3VyaXR5L2xpbWl0cy5jb25mIgpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9wYXgvcGF4L3BheC0zLjRfZml4X2Zvcl94MzIucGF0Y2ggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3BheC9wYXgvcGF4LTMuNF9maXhfZm9yX3gzMi5wYXRjaAppbmRleCA4MDg3OGYzLi43YWRiZDAyIDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3BheC9wYXgvcGF4LTMuNF9maXhfZm9yX3gzMi5wYXRjaAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3BheC9wYXgvcGF4LTMuNF9maXhfZm9yX3gzMi5wYXRjaApAQCAtOSw3ICs5LDcgQEAKICAgICBzaXplIG9mIG9mZl90IHRvIHNlZSBpZiBmaWxlIG9mZnNldCBpcyA2NGJpdC4gIFRoaXMgcGF0Y2ggYWRkcwogICAgIEFDX0NIRUNLX1NJWkVPRihvZmZfdCkgYW5kIGNoZWNrcyBTSVpFT0ZfT0ZGX1QgPT0gOC4KIAotU2lnbmVkLU9mZi1CeTogTml0aW4gQSBLYW1ibGUgPG5pdGluLmEua2FtYmxlQGludGVsLmNvbT4gMjAxMS8xMi8wNgorU2lnbmVkLW9mZi1ieTogTml0aW4gQSBLYW1ibGUgPG5pdGluLmEua2FtYmxlQGludGVsLmNvbT4gMjAxMS8xMi8wNgogCiBJbmRleDogcGF4LTMuNC9jb25maWd1cmUuaW4KID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvcGlnei9waWd6XzIuMy4zLmJiIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9waWd6L3BpZ3pfMi4zLjMuYmIKaW5kZXggMDgwYmUyYi4uOWU5NzI3MyAxMDA2NDQKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9waWd6L3BpZ3pfMi4zLjMuYmIKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9waWd6L3BpZ3pfMi4zLjMuYmIKQEAgLTEsNiArMSw4IEBACiByZXF1aXJlIHBpZ3ouaW5jCiBMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9waWd6LmM7YmVnaW5saW5lPTc7ZW5kbGluZT0yMTttZDU9YTIxZDQwNzVjYjAwYWI0Y2ExN2ZjZTVlNzUzNGNhOTUiCiAKK1VQU1RSRUFNX0NIRUNLX1VSSSA6PSAiJHtTUkNfVVJJfSIKK1NSQ19VUkkgPSAiaHR0cDovL2Rvd25sb2Fkcy55b2N0b3Byb2plY3Qub3JnL21pcnJvci9zb3VyY2VzLyR7QlB9LnRhci5neiIKIFNSQ19VUkkgKz0gImZpbGU6Ly9saW5rLW9yZGVyLnBhdGNoIgogCiBTUkNfVVJJW21kNXN1bV0gPSAiMDFkN2ExNmNjZTc3OTI5Y2MxYTc4YWExYmRmYjY4Y2IiCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3Byb2Nwcy9wcm9jcHNfMy4zLjExLmJiIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9wcm9jcHMvcHJvY3BzXzMuMy4xMS5iYgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzZkY2NjNi4uMDAwMDAwMAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3Byb2Nwcy9wcm9jcHNfMy4zLjExLmJiCisrKyAvZGV2L251bGwKQEAgLTEsNjYgKzAsMCBAQAotU1VNTUFSWSA9ICJTeXN0ZW0gYW5kIHByb2Nlc3MgbW9uaXRvcmluZyB1dGlsaXRpZXMiCi1ERVNDUklQVElPTiA9ICJQcm9jcHMgY29udGFpbnMgYSBzZXQgb2Ygc3lzdGVtIHV0aWxpdGllcyB0aGF0IHByb3ZpZGUgc3lzdGVtIGluZm9ybWF0aW9uIGFib3V0IHByb2Nlc3NlcyB1c2luZyBcCi10aGUgL3Byb2MgZmlsZXN5c3RlbS4gVGhlIHBhY2thZ2UgaW5jbHVkZXMgdGhlIHByb2dyYW1zIHBzLCB0b3AsIHZtc3RhdCwgdywga2lsbCwgYW5kIHNraWxsLiIKLUhPTUVQQUdFID0gImh0dHBzOi8vZ2l0b3Jpb3VzLm9yZy9wcm9jcHMiCi1TRUNUSU9OID0gImJhc2UiCi1MSUNFTlNFID0gIkdQTHYyKyAmIExHUEx2MisiCi1MSUNfRklMRVNfQ0hLU1VNPSJmaWxlOi8vQ09QWUlORzttZDU9YjIzNGVlNGQ2OWY1ZmNlNDQ4NmE4MGZkYWY0YTQyNjMgXAotICAgICAgICAgICAgICAgICAgZmlsZTovL0NPUFlJTkcuTElCO21kNT00Y2Y2NmE0OTg0MTIwMDA3Yzk4ODFjYzg3MWNmNDlkYiBcCi0gICAgICAgICAgICAgICAgICIKLQotREVQRU5EUyA9ICJuY3Vyc2VzIgotCi1pbmhlcml0IGF1dG90b29scyBnZXR0ZXh0IHBrZ2NvbmZpZyB1cGRhdGUtYWx0ZXJuYXRpdmVzCi0KLVNSQ19VUkkgPSAiaHR0cDovL2Rvd25sb2Fkcy5zb3VyY2Vmb3JnZS5uZXQvcHJvamVjdC9wcm9jcHMtbmcvUHJvZHVjdGlvbi9wcm9jcHMtbmctJHtQVn0udGFyLnh6IFwKLSAgICAgICAgICAgZmlsZTovL3N5c2N0bC5jb25mIFwKLSAgICAgICAgICAiCi0KLVNSQ19VUklbbWQ1c3VtXSA9ICI2Y2M1Yjk0YzFjNWI4Y2JjODlhZDM0NWE3YjUyMmY3NCIKLVNSQ19VUklbc2hhMjU2c3VtXSA9ICJlOTQ5MzE2OWEyZDJhZGMwYmMwNDU1Mzg3MDczMTBjOGU4NzdiMzg1ZTRlMjk2MTQzYjYyNjA3ZDJiYjA0NGVkIgotCi1TID0gIiR7V09SS0RJUn0vcHJvY3BzLW5nLSR7UFZ9IgotCi1FWFRSQV9PRUNPTkYgPSAiLS1lbmFibGUtc2tpbGwgLS1kaXNhYmxlLW1vZGVybi10b3AiCi0KLUNQUEZMQUdTICs9ICItSSR7U30iCi0KLWRvX2luc3RhbGxfYXBwZW5kICgpIHsKLQlpbnN0YWxsIC1kICR7RH0ke2Jhc2VfYmluZGlyfQotCVsgIiR7YmluZGlyfSIgIT0gIiR7YmFzZV9iaW5kaXJ9IiBdICYmIGZvciBpIGluICR7YmFzZV9iaW5kaXJfcHJvZ3N9OyBkbyBtdiAke0R9JHtiaW5kaXJ9LyRpICR7RH0ke2Jhc2VfYmluZGlyfS8kaTsgZG9uZQotCWluc3RhbGwgLWQgJHtEfSR7YmFzZV9zYmluZGlyfQotCVsgIiR7c2JpbmRpcn0iICE9ICIke2Jhc2Vfc2JpbmRpcn0iIF0gJiYgZm9yIGkgaW4gJHtiYXNlX3NiaW5kaXJfcHJvZ3N9OyBkbyBtdiAke0R9JHtzYmluZGlyfS8kaSAke0R9JHtiYXNlX3NiaW5kaXJ9LyRpOyBkb25lCi0gICAgICAgIGlmIFsgIiR7YmFzZV9zYmluZGlyfSIgIT0gIiR7c2JpbmRpcn0iIF07IHRoZW4KLSAgICAgICAgICAgICAgICBybWRpciAke0R9JHtzYmluZGlyfQotICAgICAgICBmaQotCi0gICAgICAgIGluc3RhbGwgLWQgJHtEfSR7c3lzY29uZmRpcn0KLSAgICAgICAgaW5zdGFsbCAtbSAwNjQ0ICR7V09SS0RJUn0vc3lzY3RsLmNvbmYgJHtEfSR7c3lzY29uZmRpcn0vc3lzY3RsLmNvbmYKLSAgICAgICAgaWYgJHtAYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsJ3N5c3RlbWQnLCd0cnVlJywnZmFsc2UnLGQpfTsgdGhlbgotICAgICAgICAgICAgICAgIGluc3RhbGwgLWQgJHtEfSR7c3lzY29uZmRpcn0vc3lzY3RsLmQKLSAgICAgICAgICAgICAgICBsbiAtc2YgLi4vc3lzY3RsLmNvbmYgJHtEfSR7c3lzY29uZmRpcn0vc3lzY3RsLmQvOTktc3lzY3RsLmNvbmYKLSAgICAgICAgZmkKLX0KLQotQ09ORkZJTEVTXyR7UE59ID0gIiR7c3lzY29uZmRpcn0vc3lzY3RsLmNvbmYiCi0KLWJpbmRpcl9wcm9ncyA9ICJmcmVlIHBraWxsIHBtYXAgcGdyZXAgcHdkeCBza2lsbCBzbmljZSB0b3AgdXB0aW1lIgotYmFzZV9iaW5kaXJfcHJvZ3MgKz0gImtpbGwgcGlkb2YgcHMgd2F0Y2giCi1iYXNlX3NiaW5kaXJfcHJvZ3MgKz0gInN5c2N0bCIKLQotQUxURVJOQVRJVkVfUFJJT1JJVFkgPSAiMjAwIgotCi1BTFRFUk5BVElWRV8ke1BOfSA9ICIke2JpbmRpcl9wcm9nc30gJHtiYXNlX2JpbmRpcl9wcm9nc30gJHtiYXNlX3NiaW5kaXJfcHJvZ3N9IgotCi1BTFRFUk5BVElWRV8ke1BOfS1kb2MgPSAia2lsbC4xIHVwdGltZS4xIgotQUxURVJOQVRJVkVfTElOS19OQU1FW2tpbGwuMV0gPSAiJHttYW5kaXJ9L21hbjEva2lsbC4xIgotQUxURVJOQVRJVkVfTElOS19OQU1FW3VwdGltZS4xXSA9ICIke21hbmRpcn0vbWFuMS91cHRpbWUuMSIKLQotcHl0aG9uIF9fYW5vbnltb3VzKCkgewotICAgIGZvciBwcm9nIGluIGQuZ2V0VmFyKCdiYXNlX2JpbmRpcl9wcm9ncycsIFRydWUpLnNwbGl0KCk6Ci0gICAgICAgIGQuc2V0VmFyRmxhZygnQUxURVJOQVRJVkVfTElOS19OQU1FJywgcHJvZywgJyVzLyVzJyAlIChkLmdldFZhcignYmFzZV9iaW5kaXInLCBUcnVlKSwgcHJvZykpCi0KLSAgICBmb3IgcHJvZyBpbiBkLmdldFZhcignYmFzZV9zYmluZGlyX3Byb2dzJywgVHJ1ZSkuc3BsaXQoKToKLSAgICAgICAgZC5zZXRWYXJGbGFnKCdBTFRFUk5BVElWRV9MSU5LX05BTUUnLCBwcm9nLCAnJXMvJXMnICUgKGQuZ2V0VmFyKCdiYXNlX3NiaW5kaXInLCBUcnVlKSwgcHJvZykpCi19Ci0KZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvcHJvY3BzL3Byb2Nwc18zLjMuMTIuYmIgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3Byb2Nwcy9wcm9jcHNfMy4zLjEyLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRjYTFhNTAKLS0tIC9kZXYvbnVsbAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3Byb2Nwcy9wcm9jcHNfMy4zLjEyLmJiCkBAIC0wLDAgKzEsNjYgQEAKK1NVTU1BUlkgPSAiU3lzdGVtIGFuZCBwcm9jZXNzIG1vbml0b3JpbmcgdXRpbGl0aWVzIgorREVTQ1JJUFRJT04gPSAiUHJvY3BzIGNvbnRhaW5zIGEgc2V0IG9mIHN5c3RlbSB1dGlsaXRpZXMgdGhhdCBwcm92aWRlIHN5c3RlbSBpbmZvcm1hdGlvbiBhYm91dCBwcm9jZXNzZXMgdXNpbmcgXAordGhlIC9wcm9jIGZpbGVzeXN0ZW0uIFRoZSBwYWNrYWdlIGluY2x1ZGVzIHRoZSBwcm9ncmFtcyBwcywgdG9wLCB2bXN0YXQsIHcsIGtpbGwsIGFuZCBza2lsbC4iCitIT01FUEFHRSA9ICJodHRwczovL2dpdG9yaW91cy5vcmcvcHJvY3BzIgorU0VDVElPTiA9ICJiYXNlIgorTElDRU5TRSA9ICJHUEx2MisgJiBMR1BMdjIrIgorTElDX0ZJTEVTX0NIS1NVTT0iZmlsZTovL0NPUFlJTkc7bWQ1PWIyMzRlZTRkNjlmNWZjZTQ0ODZhODBmZGFmNGE0MjYzIFwKKyAgICAgICAgICAgICAgICAgIGZpbGU6Ly9DT1BZSU5HLkxJQjttZDU9NGNmNjZhNDk4NDEyMDAwN2M5ODgxY2M4NzFjZjQ5ZGIgXAorICAgICAgICAgICAgICAgICAiCisKK0RFUEVORFMgPSAibmN1cnNlcyIKKworaW5oZXJpdCBhdXRvdG9vbHMgZ2V0dGV4dCBwa2djb25maWcgdXBkYXRlLWFsdGVybmF0aXZlcworCitTUkNfVVJJID0gImh0dHA6Ly9kb3dubG9hZHMuc291cmNlZm9yZ2UubmV0L3Byb2plY3QvcHJvY3BzLW5nL1Byb2R1Y3Rpb24vcHJvY3BzLW5nLSR7UFZ9LnRhci54eiBcCisgICAgICAgICAgIGZpbGU6Ly9zeXNjdGwuY29uZiBcCisgICAgICAgICAgIgorCitTUkNfVVJJW21kNXN1bV0gPSAiOTU3ZTQyZThiMTkzNDkwYjIxMTEyNTJlNGEyYjQ0M2MiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiNmVkNjVhYjg2MzE4ZjM3OTA0ZThmOTAxNDQxNWEwOThiZWM1YmM1MzY1M2U1ZDlhYjQwNGY5NWNhNWUxYTdkNCIKKworUyA9ICIke1dPUktESVJ9L3Byb2Nwcy1uZy0ke1BWfSIKKworRVhUUkFfT0VDT05GID0gIi0tZW5hYmxlLXNraWxsIC0tZGlzYWJsZS1tb2Rlcm4tdG9wIgorCitDUFBGTEFHUyArPSAiLUkke1N9IgorCitkb19pbnN0YWxsX2FwcGVuZCAoKSB7CisJaW5zdGFsbCAtZCAke0R9JHtiYXNlX2JpbmRpcn0KKwlbICIke2JpbmRpcn0iICE9ICIke2Jhc2VfYmluZGlyfSIgXSAmJiBmb3IgaSBpbiAke2Jhc2VfYmluZGlyX3Byb2dzfTsgZG8gbXYgJHtEfSR7YmluZGlyfS8kaSAke0R9JHtiYXNlX2JpbmRpcn0vJGk7IGRvbmUKKwlpbnN0YWxsIC1kICR7RH0ke2Jhc2Vfc2JpbmRpcn0KKwlbICIke3NiaW5kaXJ9IiAhPSAiJHtiYXNlX3NiaW5kaXJ9IiBdICYmIGZvciBpIGluICR7YmFzZV9zYmluZGlyX3Byb2dzfTsgZG8gbXYgJHtEfSR7c2JpbmRpcn0vJGkgJHtEfSR7YmFzZV9zYmluZGlyfS8kaTsgZG9uZQorICAgICAgICBpZiBbICIke2Jhc2Vfc2JpbmRpcn0iICE9ICIke3NiaW5kaXJ9IiBdOyB0aGVuCisgICAgICAgICAgICAgICAgcm1kaXIgJHtEfSR7c2JpbmRpcn0KKyAgICAgICAgZmkKKworICAgICAgICBpbnN0YWxsIC1kICR7RH0ke3N5c2NvbmZkaXJ9CisgICAgICAgIGluc3RhbGwgLW0gMDY0NCAke1dPUktESVJ9L3N5c2N0bC5jb25mICR7RH0ke3N5c2NvbmZkaXJ9L3N5c2N0bC5jb25mCisgICAgICAgIGlmICR7QGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCdzeXN0ZW1kJywndHJ1ZScsJ2ZhbHNlJyxkKX07IHRoZW4KKyAgICAgICAgICAgICAgICBpbnN0YWxsIC1kICR7RH0ke3N5c2NvbmZkaXJ9L3N5c2N0bC5kCisgICAgICAgICAgICAgICAgbG4gLXNmIC4uL3N5c2N0bC5jb25mICR7RH0ke3N5c2NvbmZkaXJ9L3N5c2N0bC5kLzk5LXN5c2N0bC5jb25mCisgICAgICAgIGZpCit9CisKK0NPTkZGSUxFU18ke1BOfSA9ICIke3N5c2NvbmZkaXJ9L3N5c2N0bC5jb25mIgorCitiaW5kaXJfcHJvZ3MgPSAiZnJlZSBwa2lsbCBwbWFwIHBncmVwIHB3ZHggc2tpbGwgc25pY2UgdG9wIHVwdGltZSIKK2Jhc2VfYmluZGlyX3Byb2dzICs9ICJraWxsIHBpZG9mIHBzIHdhdGNoIgorYmFzZV9zYmluZGlyX3Byb2dzICs9ICJzeXNjdGwiCisKK0FMVEVSTkFUSVZFX1BSSU9SSVRZID0gIjIwMCIKKworQUxURVJOQVRJVkVfJHtQTn0gPSAiJHtiaW5kaXJfcHJvZ3N9ICR7YmFzZV9iaW5kaXJfcHJvZ3N9ICR7YmFzZV9zYmluZGlyX3Byb2dzfSIKKworQUxURVJOQVRJVkVfJHtQTn0tZG9jID0gImtpbGwuMSB1cHRpbWUuMSIKK0FMVEVSTkFUSVZFX0xJTktfTkFNRVtraWxsLjFdID0gIiR7bWFuZGlyfS9tYW4xL2tpbGwuMSIKK0FMVEVSTkFUSVZFX0xJTktfTkFNRVt1cHRpbWUuMV0gPSAiJHttYW5kaXJ9L21hbjEvdXB0aW1lLjEiCisKK3B5dGhvbiBfX2Fub255bW91cygpIHsKKyAgICBmb3IgcHJvZyBpbiBkLmdldFZhcignYmFzZV9iaW5kaXJfcHJvZ3MnLCBUcnVlKS5zcGxpdCgpOgorICAgICAgICBkLnNldFZhckZsYWcoJ0FMVEVSTkFUSVZFX0xJTktfTkFNRScsIHByb2csICclcy8lcycgJSAoZC5nZXRWYXIoJ2Jhc2VfYmluZGlyJywgVHJ1ZSksIHByb2cpKQorCisgICAgZm9yIHByb2cgaW4gZC5nZXRWYXIoJ2Jhc2Vfc2JpbmRpcl9wcm9ncycsIFRydWUpLnNwbGl0KCk6CisgICAgICAgIGQuc2V0VmFyRmxhZygnQUxURVJOQVRJVkVfTElOS19OQU1FJywgcHJvZywgJyVzLyVzJyAlIChkLmdldFZhcignYmFzZV9zYmluZGlyJywgVHJ1ZSksIHByb2cpKQorfQorCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3BzbWlzYy9wc21pc2MuaW5jIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9wc21pc2MvcHNtaXNjLmluYwppbmRleCA2OGUwNjU2Li45OGE4NDcwIDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3BzbWlzYy9wc21pc2MuaW5jCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvcHNtaXNjL3BzbWlzYy5pbmMKQEAgLTE1LDYgKzE1LDkgQEAKIAogaW5oZXJpdCBhdXRvdG9vbHMgZ2V0dGV4dAogCitQQUNLQUdFQ09ORklHID8/PSAiJHtAYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsICdpcHY2JywgJ2lwdjYnLCAnJywgZCl9IgorUEFDS0FHRUNPTkZJR1tpcHY2XSA9ICItLWVuYWJsZS1pcHY2LC0tZGlzYWJsZS1pcHY2LCIKKwogQUxMT1dfRU1QVFlfJHtQTn0gPSAiMSIKIAogUEFDS0FHRVMgPSsgImZ1c2VyIGZ1c2VyLWRvYyBraWxsYWxsIGtpbGxhbGwtZG9jIHBzdHJlZSBwc3RyZWUtZG9jIgpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9xdW90YS9xdW90YS8wMDAxLVVzZS1OR1JPVVBTX01BWC1pbnN0ZWFkLW9mLU5HUk9VUFMucGF0Y2ggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3F1b3RhL3F1b3RhLzAwMDEtVXNlLU5HUk9VUFNfTUFYLWluc3RlYWQtb2YtTkdST1VQUy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42ZmIyZGFmCi0tLSAvZGV2L251bGwKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9xdW90YS9xdW90YS8wMDAxLVVzZS1OR1JPVVBTX01BWC1pbnN0ZWFkLW9mLU5HUk9VUFMucGF0Y2gKQEAgLTAsMCArMSw4MyBAQAorVXBzdHJlYW0tU3RhdHVzOiBCYWNrcG9ydAorCitTaWduZWQtb2ZmLWJ5OiBLYWkgS2FuZyA8a2FpLmthbmdAd2luZHJpdmVyLmNvbT4KKy0tLQorRnJvbSBmZWNhNmQyZTU1ZDk5MmJiZTE3NmVlOGZhYTczNGMxMDVlYjFiMmUxIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogVGhlb2RvcmUgVHMnbyA8dHl0c29AbWl0LmVkdT4KK0RhdGU6IFR1ZSwgMjkgTWFyIDIwMTYgMjA6NDg6MDUgLTA0MDAKK1N1YmplY3Q6IFtQQVRDSF0gVXNlIE5HUk9VUFNfTUFYIGluc3RlYWQgb2YgTkdST1VQUworCitOR1JST1VQU19NQVggaXMgd2hhdCBpcyBkZWZpbmVkIGJ5IFN1U3YzOyBOR1JPVVBTIGlzIG5vdCBndWFyYW50ZWVkIGJ5Cithbnkgc3RhbmRhcmQsIGJ1dCBpcyBqdXN0IGFuIGFuY2llbnQgQlNEJ2lzbS4gIFNpbmNlIEFuZHJvaWQncyBiaW9uaWMKK2xpYmMgaGFzIHRoZSBmb3JtZXIgYnV0IG5vdCB0aGUgbGF0dGVyLCBsZXQncyB1c2UgTkdST1VQU19NQVggaW5zdGVhZC4KKworU2lnbmVkLW9mZi1ieTogVGhlb2RvcmUgVHMnbyA8dHl0c29AbWl0LmVkdT4KK1NpZ25lZC1vZmYtYnk6IEphbiBLYXJhIDxqYWNrQHN1c2UuY3o+CistLS0KKyBxdW90YS5jICAgIHwgNSArKystLQorIHF1b3Rhb3BzLmMgfCA1ICsrKy0tCisgMiBmaWxlcyBjaGFuZ2VkLCA2IGluc2VydGlvbnMoKyksIDQgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9xdW90YS5jIGIvcXVvdGEuYworaW5kZXggMDQ5ZGFjNC4uZTE5NWVhZCAxMDA2NDQKKy0tLSBhL3F1b3RhLmMKKysrKyBiL3F1b3RhLmMKK0BAIC00OCw2ICs0OCw3IEBACisgI2luY2x1ZGUgPGVycm5vLmg+CisgI2luY2x1ZGUgPHN0cmluZy5oPgorICNpbmNsdWRlIDx1bmlzdGQuaD4KKysjaW5jbHVkZSA8bGltaXRzLmg+CisgI2lmZGVmIFJQQworICNpbmNsdWRlIDxycGMvcnBjLmg+CisgI2luY2x1ZGUgInJxdW90YS5oIgorQEAgLTI5Niw3ICsyOTcsNyBAQCBzdGF0aWMgaW50IHNob3dxdW90YXMoaW50IHR5cGUsIHFpZF90IGlkLCBpbnQgbW50Y250LCBjaGFyICoqbW50KQorIGludCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndikKKyB7CisgCWludCBuZ3JvdXBzOworLQlnaWRfdCBnaWRzZXRbTkdST1VQU10sICpnaWRzZXRwOworKwlnaWRfdCBnaWRzZXRbTkdST1VQU19NQVhdLCAqZ2lkc2V0cDsKKyAJaW50IGksIHJldDsKKyAJc3RydWN0IG9wdGlvbiBsb25nX29wdHNbXSA9IHsKKyAJCXsgImhlbHAiLCAwLCBOVUxMLCAnaCcgfSwKK0BAIC00MDUsNyArNDA2LDcgQEAgaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KQorIAkJCXJldCB8PSBzaG93cXVvdGFzKFVTUlFVT1RBLCBnZXR1aWQoKSwgYXJnYywgYXJndik7CisgCQlpZiAoZmxhZ3MgJiBGTF9HUk9VUCkgeworIAkJCW5ncm91cHMgPSBzeXNjb25mKF9TQ19OR1JPVVBTX01BWCk7CistCQkJaWYgKG5ncm91cHMgPiBOR1JPVVBTKSB7CisrCQkJaWYgKG5ncm91cHMgPiBOR1JPVVBTX01BWCkgeworIAkJCQlnaWRzZXRwID0gbWFsbG9jKG5ncm91cHMgKiBzaXplb2YoZ2lkX3QpKTsKKyAJCQkJaWYgKCFnaWRzZXRwKQorIAkJCQkJZGllKDEsIF8oIkdpZCBzZXQgYWxsb2NhdGlvbiAoJWQpOiAlc1xuIiksIG5ncm91cHMsIHN0cmVycm9yKGVycm5vKSk7CitkaWZmIC0tZ2l0IGEvcXVvdGFvcHMuYyBiL3F1b3Rhb3BzLmMKK2luZGV4IDEzNmFlYzMuLjU5MGRjMWIgMTAwNjQ0CistLS0gYS9xdW90YW9wcy5jCisrKysgYi9xdW90YW9wcy5jCitAQCAtNTEsNiArNTEsNyBAQAorICNpbmNsdWRlIDx1bmlzdGQuaD4KKyAjaW5jbHVkZSA8dGltZS5oPgorICNpbmNsdWRlIDxjdHlwZS5oPgorKyNpbmNsdWRlIDxsaW1pdHMuaD4KKyAKKyAjaWYgZGVmaW5lZChSUEMpCisgI2luY2x1ZGUgInJxdW90YS5oIgorQEAgLTk3LDcgKzk4LDcgQEAgc3RydWN0IGRxdW90ICpnZXRwcml2cyhxaWRfdCBpZCwgc3RydWN0IHF1b3RhX2hhbmRsZSAqKmhhbmRsZXMsIGludCBxdWlldCkKKyAjaWYgZGVmaW5lZChCU0RfQkVIQVZJT1VSKQorIAlpbnQgaiwgbmdyb3VwczsKKyAJdWlkX3QgZXVpZDsKKy0JZ2lkX3QgZ2lkc2V0W05HUk9VUFNdLCAqZ2lkc2V0cDsKKysJZ2lkX3QgZ2lkc2V0W05HUk9VUFNfTUFYXSwgKmdpZHNldHA7CisgI2VuZGlmCisgCisgCWZvciAoaSA9IDA7IGhhbmRsZXNbaV07IGkrKykgeworQEAgLTExNSw3ICsxMTYsNyBAQCBzdHJ1Y3QgZHF1b3QgKmdldHByaXZzKHFpZF90IGlkLCBzdHJ1Y3QgcXVvdGFfaGFuZGxlICoqaGFuZGxlcywgaW50IHF1aWV0KQorIAkJCQlpZiAoZ2V0ZXVpZCgpID09IDApCisgCQkJCQlicmVhazsKKyAJCQkJbmdyb3VwcyA9IHN5c2NvbmYoX1NDX05HUk9VUFNfTUFYKTsKKy0JCQkJaWYgKG5ncm91cHMgPiBOR1JPVVBTKSB7CisrCQkJCWlmIChuZ3JvdXBzID4gTkdST1VQU19NQVgpIHsKKyAJCQkJCWdpZHNldHAgPSBtYWxsb2Mobmdyb3VwcyAqIHNpemVvZihnaWRfdCkpOworIAkJCQkJaWYgKCFnaWRzZXRwKSB7CisgCQkJCQkJZ2lkMmdyb3VwKGlkLCBuYW1lKTsKKy0tIAorMi42LjEKKwpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9xdW90YS9xdW90YS8wMDAyLUFsbG93LWJ1aWxkaW5nLW9uLXN5c3RlbXMtdGhhdC1kby1ub3QtaGF2ZS1ycGMtaGVhZGUucGF0Y2ggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3F1b3RhL3F1b3RhLzAwMDItQWxsb3ctYnVpbGRpbmctb24tc3lzdGVtcy10aGF0LWRvLW5vdC1oYXZlLXJwYy1oZWFkZS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42Y2VhNTQ4Ci0tLSAvZGV2L251bGwKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9xdW90YS9xdW90YS8wMDAyLUFsbG93LWJ1aWxkaW5nLW9uLXN5c3RlbXMtdGhhdC1kby1ub3QtaGF2ZS1ycGMtaGVhZGUucGF0Y2gKQEAgLTAsMCArMSwxNTMgQEAKK1Vwc3RyZWFtLVN0YXR1czogQmFja3BvcnQKKworU2lnbmVkLW9mZi1ieTogS2FpIEthbmcgPGthaS5rYW5nQHdpbmRyaXZlci5jb20+CistLS0KK0Zyb20gZjMwZTFhZGE4MzI2NDYzY2MwYWYwNDhhZmEwNThiYzJmMWRjOTM3MCBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IFRoZW9kb3JlIFRzJ28gPHR5dHNvQG1pdC5lZHU+CitEYXRlOiBUdWUsIDI5IE1hciAyMDE2IDIwOjQ4OjA0IC0wNDAwCitTdWJqZWN0OiBbUEFUQ0hdIEFsbG93IGJ1aWxkaW5nIG9uIHN5c3RlbXMgdGhhdCBkbyBub3QgaGF2ZSBycGMgaGVhZGVyIGZpbGVzCisKK0FuZHJvaWQncyBiaW9uaWMgQyBsaWJyYXJ5IGRvZXNuJ3QgaGF2ZSBTdW4gUlBDIHN1cHBvcnQuCisKK1NpZ25lZC1vZmYtYnk6IFRoZW9kb3JlIFRzJ28gPHR5dHNvQG1pdC5lZHU+CitTaWduZWQtb2ZmLWJ5OiBKYW4gS2FyYSA8amFja0BzdXNlLmN6PgorLS0tCisgTWFrZWZpbGUuYW0gfCAzMCArKysrKysrKysrKysrKysrLS0tLS0tLS0tLS0tLS0KKyBxdW90YW9wcy5jICB8ICAyICsrCisgc2V0cXVvdGEuYyAgfCAgMiArKworIDMgZmlsZXMgY2hhbmdlZCwgMjAgaW5zZXJ0aW9ucygrKSwgMTQgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9NYWtlZmlsZS5hbSBiL01ha2VmaWxlLmFtCitpbmRleCA2ZDdlYTBlLi44MmRiOTlmIDEwMDY0NAorLS0tIGEvTWFrZWZpbGUuYW0KKysrKyBiL01ha2VmaWxlLmFtCitAQCAtMSw3ICsxLDUgQEAKKyBBQ0xPQ0FMX0FNRkxBR1MgPSAtSSBtNAorIAorLUJVSUxUX1NPVVJDRVMgPSBycXVvdGEuaCBycXVvdGEuYyBycXVvdGFfY2xudC5jCistCisgZG9jZGlyID0gJChkYXRhZGlyKS9kb2MvQFBBQ0tBR0VACisgZG9jX0RBVEEgPSBcCisgCVJFQURNRS5tYWlsc2VydmVyIFwKK0BAIC0xMiwxMSArMTAsNiBAQCBkb2NfREFUQSA9IFwKKyAJZG9jL3F1b3Rhcy5wcmVmb3JtYXRlZCBcCisgCWRvYy9xdW90YXMtMS5lcHMKKyAKKy1ycGNzdmNkaXIgPSAkKGluY2x1ZGVkaXIpL3JwY3N2YworLXJwY3N2Y19EQVRBID0gXAorLQlycXVvdGEuaCBcCistCXJxdW90YS54CistCisgc3lzY29uZl9EQVRBID0gXAorIAl3YXJucXVvdGEuY29uZiBcCisgCXF1b3RhdGFiIFwKK0BAIC0zNSwxNSArMjgsMTIgQEAgbWFuX01BTlMgPSBcCisgCXF1b3RhLjEgXAorIAlxdW90LjggXAorIAlyZXBxdW90YS44IFwKKy0JcnBjLnJxdW90YWQuOCBcCisgCXJxdW90YS4zIFwKKyAJc2V0cXVvdGEuOCBcCisgCXdhcm5xdW90YS5jb25mLjUgXAorIAl3YXJucXVvdGEuOCBcCisgCXhxbXN0YXRzLjgKKyAKKy1DTEVBTkZJTEVTID0gcnF1b3RhLmMgcnF1b3RhLmggcnF1b3RhX2NsbnQuYworLQorIFNVQkRJUlMgPSBwbworIAorIEVYVFJBX0RJU1QgPSBcCitAQCAtNTUsOSArNDUsMTUgQEAgRVhUUkFfRElTVCA9IFwKKyAJQ2hhbmdlbG9nIFwKKyAJbGRhcC1zY3JpcHRzCisgCistbm9pbnN0X0xJQlJBUklFUyA9IFwKKy0JbGlicXVvdGEuYSBcCistCWxpYnJwY2NsaWVudC5hCisrbm9pbnN0X0xJQlJBUklFUyA9IGxpYnF1b3RhLmEKKysKKytpZiBXSVRIX1JQQworK3JwY3N2Y2RpciA9ICQoaW5jbHVkZWRpcikvcnBjc3ZjCisrcnBjc3ZjX0RBVEEgPSBcCisrCXJxdW90YS5oIFwKKysJcnF1b3RhLngKKysKKytub2luc3RfTElCUkFSSUVTICs9IGxpYnJwY2NsaWVudC5hCisgCisgbGlicnBjY2xpZW50X2FfU09VUkNFUyA9IFwKKyAJcnF1b3RhLmMgXAorQEAgLTY3LDggKzYzLDEwIEBAIGxpYnJwY2NsaWVudF9hX1NPVVJDRVMgPSBcCisgCXJxdW90YV9jbG50LmMKKyBsaWJycGNjbGllbnRfYV9DRkxBR1MgPSAtV25vLXVudXNlZAorIAorLWlmIFdJVEhfUlBDCisgUlBDTElCUyA9IGxpYnJwY2NsaWVudC5hCisrQlVJTFRfU09VUkNFUyA9IHJxdW90YS5oIHJxdW90YS5jIHJxdW90YV9jbG50LmMKKytDTEVBTkZJTEVTID0gcnF1b3RhLmMgcnF1b3RhLmggcnF1b3RhX2NsbnQuYworK21hbl9NQU5TICs9IHJwYy5ycXVvdGFkLjgKKyBlbmRpZgorIAorIGxpYnF1b3RhX2FfU09VUkNFUyA9IFwKK0BAIC0yMTcsNiArMjE1LDcgQEAgY29udmVydHF1b3RhX0xEQUREID0gXAorIAlsaWJxdW90YS5hIFwKKyAJJChSUENMSUJTKQorIAorK2lmIFdJVEhfUlBDCisgcnBjX3JxdW90YWRfU09VUkNFUyA9IFwKKyAJcnF1b3RhX3NlcnZlci5jIFwKKyAJcnF1b3RhX3N2Yy5jIFwKK0BAIC0yMjUsNiArMjI0LDcgQEAgcnBjX3JxdW90YWRfTERBREQgPSBcCisgCWxpYnF1b3RhLmEgXAorIAkkKFdSQVBfTElCUykgXAorIAkkKFJQQ0xJQlMpCisrZW5kaWYKKyAKKyBxdW90YV9ubGRfU09VUkNFUyA9IHF1b3RhX25sZC5jCisgcXVvdGFfbmxkX0NGTEFHUyA9IFwKK0BAIC0yMzYsNiArMjM2LDcgQEAgcXVvdGFfbmxkX0xEQUREID0gXAorIAkkKERCVVNfTElCUykgXAorIAkkKExJQk5MM19MSUJTKQorIAorK2lmIFdJVEhfUlBDCisgIyAtLS0tLS0tLS0tLS0tLS0tLS0KKyAjIFJwY2dlbiBjb252ZXJzaW9ucworICMgLS0tLS0tLS0tLS0tLS0tLS0tCitAQCAtMjUwLDYgKzI1MSw3IEBAIHF1b3RhX25sZF9MREFERCA9IFwKKyBycXVvdGFfY2xudC5jOiBycXVvdGEueAorIAlAcm0gLWYgJEAKKyAJQCQoUlBDR0VOKSAtbCAtbyAkQCAkPAorK2VuZGlmCisgCisgIyAtLS0tLS0tLQorICMgUXVvdGFvZmYKK2RpZmYgLS1naXQgYS9xdW90YW9wcy5jIGIvcXVvdGFvcHMuYworaW5kZXggNDdlZjlhNy4uMTM2YWVjMyAxMDA2NDQKKy0tLSBhL3F1b3Rhb3BzLmMKKysrKyBiL3F1b3Rhb3BzLmMKK0BAIC0zNCw3ICszNCw5IEBACisgCisgI2luY2x1ZGUgImNvbmZpZy5oIgorIAorKyNpZiBkZWZpbmVkKFJQQykKKyAjaW5jbHVkZSA8cnBjL3JwYy5oPgorKyNlbmRpZgorICNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyAjaW5jbHVkZSA8c3lzL3N0YXQuaD4KKyAjaW5jbHVkZSA8c3lzL2ZpbGUuaD4KK2RpZmYgLS1naXQgYS9zZXRxdW90YS5jIGIvc2V0cXVvdGEuYworaW5kZXggNTFkN2IzYy4uOGVjZDljMyAxMDA2NDQKKy0tLSBhL3NldHF1b3RhLmMKKysrKyBiL3NldHF1b3RhLmMKK0BAIC03LDcgKzcsOSBAQAorIAorICNpbmNsdWRlICJjb25maWcuaCIKKyAKKysjaWYgZGVmaW5lZChSUEMpCisgI2luY2x1ZGUgPHJwYy9ycGMuaD4KKysjZW5kaWYKKyAjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisgI2luY2x1ZGUgPGVycm5vLmg+CisgI2luY2x1ZGUgPHN0ZGlvLmg+CistLSAKKzIuNi4xCisKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvcXVvdGEvcXVvdGEvMDAwMy1Eb24tdC1idWlsZC1ycGMucnF1b3RhZC13aGVuLWRpc2FibGUtcnBjLXdhcy1yZXF1ZXN0LnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9xdW90YS9xdW90YS8wMDAzLURvbi10LWJ1aWxkLXJwYy5ycXVvdGFkLXdoZW4tZGlzYWJsZS1ycGMtd2FzLXJlcXVlc3QucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTQ1NTM4NAotLS0gL2Rldi9udWxsCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvcXVvdGEvcXVvdGEvMDAwMy1Eb24tdC1idWlsZC1ycGMucnF1b3RhZC13aGVuLWRpc2FibGUtcnBjLXdhcy1yZXF1ZXN0LnBhdGNoCkBAIC0wLDAgKzEsNjIgQEAKK1Vwc3RyZWFtLVN0YXR1czogQmFja3BvcnQKKworU2lnbmVkLW9mZi1ieTogS2FpIEthbmcgPGthaS5rYW5nQHdpbmRyaXZlci5jb20+CistLS0KK0Zyb20gYzdhNzYyMzdlN2E1MWE2OWQwMjM2ZWJmYzE5MWU0NjJmODA1Y2Y0ZSBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IExhcnMgV2VuZGxlciA8cG9seW5vbWlhbC1jQGdlbnRvby5vcmc+CitEYXRlOiBNb24sIDE1IEZlYiAyMDE2IDE0OjQyOjE0ICswMTAwCitTdWJqZWN0OiBbUEFUQ0hdIERvbid0IGJ1aWxkIHJwYy5ycXVvdGFkIHdoZW4gLS1kaXNhYmxlLXJwYyB3YXMgcmVxdWVzdGVkLgorCitUaGlzIGZpeGVzIGEgYnVjaCBvZiB1bmRlZmluZWQgcmVmZXJlbmNlczoKKworeDg2XzY0LXBjLWxpbnV4LWdudS1nY2MgIC1tYXJjaD1uYXRpdmUgLW10dW5lPW5hdGl2ZSAtTzIgLXBpcGUgLURfR05VX1NPVVJDRSAtV2EKK2xsIC1EX0xBUkdFRklMRTY0X1NPVVJDRSAtRF9GSUxFX09GRlNFVF9CSVRTPTY0IC1mUElDIC1waWUgLVdsLC1PMSAtV2wsLS1oYXNoLXN0Cit5bGU9Z251IC1XbCwtLXNvcnQtY29tbW9uIC1XbCwtLWFzLW5lZWRlZCAtbyBycGMucnF1b3RhZCBycXVvdGFfc2VydmVyLm8gcnF1b3RhXworc3ZjLm8gc3ZjX3NvY2tldC5vIGxpYnF1b3RhLmEKK3JxdW90YV9zdmMubzogSW4gZnVuY3Rpb24gYHJxdW90YXByb2dfMic6CitycXVvdGFfc3ZjLmM6KC50ZXh0KzB4MWQzKTogdW5kZWZpbmVkIHJlZmVyZW5jZSB0byBgeGRyX3NldHF1b3RhX3JzbHQnCitycXVvdGFfc3ZjLmM6KC50ZXh0KzB4MWRhKTogdW5kZWZpbmVkIHJlZmVyZW5jZSB0byBgeGRyX2V4dF9zZXRxdW90YV9hcmdzJworcnF1b3RhX3N2Yy5jOigudGV4dCsweDJiMik6IHVuZGVmaW5lZCByZWZlcmVuY2UgdG8gYHhkcl9zZXRxdW90YV9yc2x0JworcnF1b3RhX3N2Yy5jOigudGV4dCsweDJiOSk6IHVuZGVmaW5lZCByZWZlcmVuY2UgdG8gYHhkcl9leHRfc2V0cXVvdGFfYXJncycKK3JxdW90YV9zdmMuYzooLnRleHQrMHgyZmYpOiB1bmRlZmluZWQgcmVmZXJlbmNlIHRvIGB4ZHJfZ2V0cXVvdGFfcnNsdCcKK3JxdW90YV9zdmMuYzooLnRleHQrMHgzMDYpOiB1bmRlZmluZWQgcmVmZXJlbmNlIHRvIGB4ZHJfZXh0X2dldHF1b3RhX2FyZ3MnCitycXVvdGFfc3ZjLmM6KC50ZXh0KzB4MzFhKTogdW5kZWZpbmVkIHJlZmVyZW5jZSB0byBgeGRyX2dldHF1b3RhX3JzbHQnCitycXVvdGFfc3ZjLmM6KC50ZXh0KzB4MzIxKTogdW5kZWZpbmVkIHJlZmVyZW5jZSB0byBgeGRyX2V4dF9nZXRxdW90YV9hcmdzJworcnF1b3RhX3N2Yy5vOiBJbiBmdW5jdGlvbiBgcnF1b3RhcHJvZ18xJzoKK3JxdW90YV9zdmMuYzooLnRleHQrMHgzZjMpOiB1bmRlZmluZWQgcmVmZXJlbmNlIHRvIGB4ZHJfc2V0cXVvdGFfcnNsdCcKK3JxdW90YV9zdmMuYzooLnRleHQrMHgzZmEpOiB1bmRlZmluZWQgcmVmZXJlbmNlIHRvIGB4ZHJfc2V0cXVvdGFfYXJncycKK3JxdW90YV9zdmMuYzooLnRleHQrMHg0ZDIpOiB1bmRlZmluZWQgcmVmZXJlbmNlIHRvIGB4ZHJfc2V0cXVvdGFfcnNsdCcKK3JxdW90YV9zdmMuYzooLnRleHQrMHg0ZDkpOiB1bmRlZmluZWQgcmVmZXJlbmNlIHRvIGB4ZHJfc2V0cXVvdGFfYXJncycKK3JxdW90YV9zdmMuYzooLnRleHQrMHg1MWYpOiB1bmRlZmluZWQgcmVmZXJlbmNlIHRvIGB4ZHJfZ2V0cXVvdGFfcnNsdCcKK3JxdW90YV9zdmMuYzooLnRleHQrMHg1MjYpOiB1bmRlZmluZWQgcmVmZXJlbmNlIHRvIGB4ZHJfZ2V0cXVvdGFfYXJncycKK3JxdW90YV9zdmMuYzooLnRleHQrMHg1M2EpOiB1bmRlZmluZWQgcmVmZXJlbmNlIHRvIGB4ZHJfZ2V0cXVvdGFfcnNsdCcKK3JxdW90YV9zdmMuYzooLnRleHQrMHg1NDEpOiB1bmRlZmluZWQgcmVmZXJlbmNlIHRvIGB4ZHJfZ2V0cXVvdGFfYXJncycKK2NvbGxlY3QyOiBlcnJvcjogbGQgcmV0dXJuZWQgMSBleGl0IHN0YXR1cworTWFrZWZpbGU6OTAxOiByZWNpcGUgZm9yIHRhcmdldCAncnBjLnJxdW90YWQnIGZhaWxlZAorCitTaWduZWQtb2ZmLWJ5OiBMYXJzIFdlbmRsZXIgPHBvbHlub21pYWwtY0BnZW50b28ub3JnPgorU2lnbmVkLW9mZi1ieTogSmFuIEthcmEgPGphY2tAc3VzZS5jej4KKy0tLQorIE1ha2VmaWxlLmFtIHwgNSArKysrLQorIDEgZmlsZSBjaGFuZ2VkLCA0IGluc2VydGlvbnMoKyksIDEgZGVsZXRpb24oLSkKKworZGlmZiAtLWdpdCBhL01ha2VmaWxlLmFtIGIvTWFrZWZpbGUuYW0KK2luZGV4IDc3Zjg0MDAuLjZkN2VhMGUgMTAwNjQ0CistLS0gYS9NYWtlZmlsZS5hbQorKysrIGIvTWFrZWZpbGUuYW0KK0BAIC0xMTYsOCArMTE2LDExIEBAIHNiaW5fUFJPR1JBTVMgPSBcCisgCXhxbXN0YXRzIFwKKyAJZWRxdW90YSBcCisgCXNldHF1b3RhIFwKKy0JY29udmVydHF1b3RhIFwKKysJY29udmVydHF1b3RhCisraWYgV0lUSF9SUEMKKytzYmluX1BST0dSQU1TICs9IFwKKyAJcnBjLnJxdW90YWQKKytlbmRpZgorIGlmIFdJVEhfTkVUTElOSworIHNiaW5fUFJPR1JBTVMgKz0gXAorIAlxdW90YV9ubGQKKy0tIAorMi42LjEKKwpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9xdW90YS9xdW90YS8wMDA0LUZpeC13YXJuaW5ncy1kdWUtdG8tbWlzc2luZy1zdGRsaWIuaC5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvcXVvdGEvcXVvdGEvMDAwNC1GaXgtd2FybmluZ3MtZHVlLXRvLW1pc3Npbmctc3RkbGliLmgucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmRiNGNlYQotLS0gL2Rldi9udWxsCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvcXVvdGEvcXVvdGEvMDAwNC1GaXgtd2FybmluZ3MtZHVlLXRvLW1pc3Npbmctc3RkbGliLmgucGF0Y2gKQEAgLTAsMCArMSw0NiBAQAorVXBzdHJlYW0tU3RhdHVzOiBCYWNrcG9ydAorCitTaWduZWQtb2ZmLWJ5OiBLYWkgS2FuZyA8a2FpLmthbmdAd2luZHJpdmVyLmNvbT4KKy0tLQorRnJvbSBjNGI1NmVlNThiOWI3NmQyNTk4NTM1Y2Y2MTA5YTI3YjIyZTYwYWJlIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogSmFuIEthcmEgPGphY2tAc3VzZS5jej4KK0RhdGU6IFdlZCwgMzAgTWFyIDIwMTYgMTA6MjE6MTMgKzAyMDAKK1N1YmplY3Q6IFtQQVRDSF0gRml4IHdhcm5pbmdzIGR1ZSB0byBtaXNzaW5nIHN0ZGxpYi5oCisKK1doZW4gY29tcGlsaW5nIHdpdGhvdXQgUlBDLCB3ZSBkbyBub3QgZ2V0IHN0ZGxpYi5oIGF1dG9tYXRpY2FsbHkKK2luY2x1ZGVkIHZpYSBvdGhlciBpbmNsdWRlcyBhbmQgdGh1cyBtaXNzIHNvbWUgZnVuY3Rpb24gZGVmaW5pdGlvbnMuCitJbmNsdWRlIHN0ZGxpYi5oIGV4cGxpY2l0ZWx5LgorCitTaWduZWQtb2ZmLWJ5OiBKYW4gS2FyYSA8amFja0BzdXNlLmN6PgorLS0tCisgcXVvdGFvcHMuYyB8IDEgKworIHNldHF1b3RhLmMgfCAxICsKKyAyIGZpbGVzIGNoYW5nZWQsIDIgaW5zZXJ0aW9ucygrKQorCitkaWZmIC0tZ2l0IGEvcXVvdGFvcHMuYyBiL3F1b3Rhb3BzLmMKK2luZGV4IDU5MGRjMWIuLjU2Y2Y2MjIgMTAwNjQ0CistLS0gYS9xdW90YW9wcy5jCisrKysgYi9xdW90YW9wcy5jCitAQCAtNTIsNiArNTIsNyBAQAorICNpbmNsdWRlIDx0aW1lLmg+CisgI2luY2x1ZGUgPGN0eXBlLmg+CisgI2luY2x1ZGUgPGxpbWl0cy5oPgorKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyAKKyAjaWYgZGVmaW5lZChSUEMpCisgI2luY2x1ZGUgInJxdW90YS5oIgorZGlmZiAtLWdpdCBhL3NldHF1b3RhLmMgYi9zZXRxdW90YS5jCitpbmRleCA4ZWNkOWMzLi40MjE2MzFlIDEwMDY0NAorLS0tIGEvc2V0cXVvdGEuYworKysrIGIvc2V0cXVvdGEuYworQEAgLTE3LDYgKzE3LDcgQEAKKyAjaW5jbHVkZSA8Z2V0b3B0Lmg+CisgI2luY2x1ZGUgPHRpbWUuaD4KKyAjaW5jbHVkZSA8Y3R5cGUuaD4KKysjaW5jbHVkZSA8c3RkbGliLmg+CisgCisgI2lmIGRlZmluZWQoUlBDKQorICNpbmNsdWRlICJycXVvdGEuaCIKKy0tIAorMi42LjEKKwpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9xdW90YS9xdW90YS9mY250bC5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvcXVvdGEvcXVvdGEvZmNudGwucGF0Y2gKaW5kZXggMjdlNjBmZC4uMmQzNzk3MSAxMDA2NDQKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9xdW90YS9xdW90YS9mY250bC5wYXRjaAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3F1b3RhL3F1b3RhL2ZjbnRsLnBhdGNoCkBAIC01OSwyMCArNTksNiBAQAogICNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KICAjaW5jbHVkZSAicXVvdGFfdHJlZS5oIgogIAotSW5kZXg6IHF1b3RhLXRvb2xzL3F1b3Rhb3BzLmMKLT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tLSBxdW90YS10b29scy5vcmlnL3F1b3Rhb3BzLmMKLSsrKyBxdW90YS10b29scy9xdW90YW9wcy5jCi1AQCAtMzQsNyArMzQsOSBAQAotIAotICNpbmNsdWRlICJjb25maWcuaCIKLSAKLSsjaWYgZGVmaW5lZChSUEMpCi0gI2luY2x1ZGUgPHJwYy9ycGMuaD4KLSsjZW5kaWYKLSAjaW5jbHVkZSA8c3lzL3R5cGVzLmg+Ci0gI2luY2x1ZGUgPHN5cy9zdGF0Lmg+Ci0gI2luY2x1ZGUgPHN5cy9maWxlLmg+CiBJbmRleDogcXVvdGEtdG9vbHMvcnF1b3RhX2NsaWVudC5jCiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAtLS0gcXVvdGEtdG9vbHMub3JpZy9ycXVvdGFfY2xpZW50LmMKQEAgLTk3LDE3ICs4MywzIEBACiAgI2luY2x1ZGUgImNvbW1vbi5oIgogICNpbmNsdWRlICJxdW90YWlvLmgiCiAgI2luY2x1ZGUgInF1b3Rhc3lzLmgiCi1JbmRleDogcXVvdGEtdG9vbHMvc2V0cXVvdGEuYwotPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0tIHF1b3RhLXRvb2xzLm9yaWcvc2V0cXVvdGEuYwotKysrIHF1b3RhLXRvb2xzL3NldHF1b3RhLmMKLUBAIC03LDcgKzcsOSBAQAotIAotICNpbmNsdWRlICJjb25maWcuaCIKLSAKLSsjaWYgZGVmaW5lZChSUEMpCi0gI2luY2x1ZGUgPHJwYy9ycGMuaD4KLSsjZW5kaWYKLSAjaW5jbHVkZSA8c3lzL3R5cGVzLmg+Ci0gI2luY2x1ZGUgPGVycm5vLmg+Ci0gI2luY2x1ZGUgPHN0ZGlvLmg+CmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3F1b3RhL3F1b3RhXzQuMDMuYmIgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3F1b3RhL3F1b3RhXzQuMDMuYmIKaW5kZXggNGE5ODA0Ni4uMjJhYWI0MSAxMDA2NDQKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9xdW90YS9xdW90YV80LjAzLmJiCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvcXVvdGEvcXVvdGFfNC4wMy5iYgpAQCAtMTIsNiArMTIsMTAgQEAKICAgICAgICAgICAgZmlsZTovLzAwMDEtRG8tbm90LWFjY2lkZW50YWx5LW92ZXJyaWRlLWNvbW1hbmRsaW5lLXBhc3NlZC1DRkxBRy5wYXRjaCBcCiAgICAgICAgICAgIGZpbGU6Ly9mY250bC5wYXRjaCBcCiAgICAgICAgICAgIGZpbGU6Ly9yZW1vdmVfbm9uX3Bvc2l4X3R5cGVzLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovLzAwMDEtVXNlLU5HUk9VUFNfTUFYLWluc3RlYWQtb2YtTkdST1VQUy5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly8wMDAyLUFsbG93LWJ1aWxkaW5nLW9uLXN5c3RlbXMtdGhhdC1kby1ub3QtaGF2ZS1ycGMtaGVhZGUucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vMDAwMy1Eb24tdC1idWlsZC1ycGMucnF1b3RhZC13aGVuLWRpc2FibGUtcnBjLXdhcy1yZXF1ZXN0LnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovLzAwMDQtRml4LXdhcm5pbmdzLWR1ZS10by1taXNzaW5nLXN0ZGxpYi5oLnBhdGNoIFwKICAgICAgICAgICAiCiBTUkNfVVJJX2FwcGVuZF9saWJjLW11c2wgPSAiIGZpbGU6Ly9yZXBsYWNlX2dldHJwY2J5bnVtYmVyX3IucGF0Y2giCiAKQEAgLTI1LDggKzI5LDggQEAKIAogaW5oZXJpdCBhdXRvdG9vbHMtYnJva2Vuc2VwIGdldHRleHQgcGtnY29uZmlnCiAKLUNGTEFHUyArPSAiLUkke1NUQUdJTkdfSU5DRElSfS90aXJwYyIKLUxERkxBR1MgKz0gIi1sdGlycGMiCitDRkxBR1MgKz0gIiR7QGJiLnV0aWxzLmNvbnRhaW5zKCdQQUNLQUdFQ09ORklHJywgJ3JwYycsICctSSR7U1RBR0lOR19JTkNESVJ9L3RpcnBjJywgJycsIGQpfSIKK0xERkxBR1MgKz0gIiR7QGJiLnV0aWxzLmNvbnRhaW5zKCdQQUNLQUdFQ09ORklHJywgJ3JwYycsICctbHRpcnBjJywgJycsIGQpfSIKIEFTTkVFREVEID0gIiIKIAogUEFDS0FHRUNPTkZJRyA/Pz0gInRjcC13cmFwcGVycyBycGMgYnNkIgpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9zY3JlZW4vc2NyZWVuLzAwMDEtRml4LXN0YWNrLW92ZXJmbG93LWR1ZS10by10b28tZGVlcC1yZWN1cnNpb24ucGF0Y2ggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3NjcmVlbi9zY3JlZW4vMDAwMS1GaXgtc3RhY2stb3ZlcmZsb3ctZHVlLXRvLXRvby1kZWVwLXJlY3Vyc2lvbi5wYXRjaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNGFjODIwZi4uMDAwMDAwMAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3NjcmVlbi9zY3JlZW4vMDAwMS1GaXgtc3RhY2stb3ZlcmZsb3ctZHVlLXRvLXRvby1kZWVwLXJlY3Vyc2lvbi5wYXRjaAorKysgL2Rldi9udWxsCkBAIC0xLDU4ICswLDAgQEAKLUJ1ZzogNDU3MTMKLQotSG93IHRvIHJlcHJvZHVjZToKLVJ1biB0aGlzIGNvbW1hbmQgaW5zaWRlIHNjcmVlbgotJCBwcmludGYgJ1x4MWJbMTAwMDAwMDBUJwotCi1zY3JlZW4gd2lsbCByZWN1cnNpdmVseSBjYWxsIE1TY3JvbGxWIHRvIGRlcHRoIG4vMjU2LgotVGhpcyBpcyB0aW1lIGNvbnN1bWluZyBhbmQgd2lsbCBvdmVyZmxvdyBzdGFjayBpZiBuIGlzIGh1Z2UuCi0KLUZpeGVzIENWRS0yMDE1LTY4MDYKLQotVXBzdHJlYW0tU3RhdHVzOiBCYWNrcG9ydAotQ1ZFOiBDVkUtMjAxNS02ODA2Ci0KLVNpZ25lZC1vZmYtYnk6IEt1YW5nLWNoZSBXdSA8a2N3dUBjc2llLm9yZz4KLVNpZ25lZC1vZmYtYnk6IEFtYWRldXN6IFPFgmF3acWEc2tpIDxhbWFkZUBhc21ibHIubmV0PgotU2lnbmVkLW9mZi1ieTogTWF4aW4gQi4gSm9obiA8bWF4aW4uam9obkBpbnRlbC5jb20+Ci0tLS0KLWRpZmYgLU5hdXIgc2NyZWVuLTQuMy4xLW9yaWcvYW5zaS5jIHNjcmVlbi00LjMuMS9hbnNpLmMKLS0tLSBzY3JlZW4tNC4zLjEtb3JpZy9hbnNpLmMJMjAxNS0wNi0yOSAwMDoyMjo1NS4wMDAwMDAwMDAgKzAzMDAKLSsrKyBzY3JlZW4tNC4zLjEvYW5zaS5jCTIwMTUtMTAtMDYgMTM6MTM6NTguMjk3NjQ4MDM5ICswMzAwCi1AQCAtMjUwMiwxMyArMjUwMiwxMyBAQAotICAgICByZXR1cm47Ci0gICBpZiAobiA+IDApCi0gICAgIHsKLSsgICAgICBpZiAoeWUgLSB5cyArIDEgPCBuKQotKwkgIG4gPSB5ZSAtIHlzICsgMTsKLSAgICAgICBpZiAobiA+IDI1NikKLSAJewotIAkgIE1TY3JvbGxWKHAsIG4gLSAyNTYsIHlzLCB5ZSwgYmNlKTsKLSAJICBuID0gMjU2OwotIAl9Ci0tICAgICAgaWYgKHllIC0geXMgKyAxIDwgbikKLS0JbiA9IHllIC0geXMgKyAxOwotICNpZmRlZiBDT1BZX1BBU1RFCi0gICAgICAgaWYgKGNvbXBhY3RoaXN0KQotIAl7Ci1AQCAtMjU2MiwxNSArMjU2MiwxNSBAQAotICAgICB9Ci0gICBlbHNlCi0gICAgIHsKLS0gICAgICBpZiAobiA8IC0yNTYpCi0tCXsKLS0JICBNU2Nyb2xsVihwLCBuICsgMjU2LCB5cywgeWUsIGJjZSk7Ci0tCSAgbiA9IC0yNTY7Ci0tCX0KLSAgICAgICBuID0gLW47Ci0gICAgICAgaWYgKHllIC0geXMgKyAxIDwgbikKLSAJbiA9IHllIC0geXMgKyAxOwotIAotKyAgICAgIGlmIChuID4gMjU2KQotKyAgICAgIHsKLSsgICAgICAgIE1TY3JvbGxWKHAsIC0gKG4gLSAyNTYpLCB5cywgeWUsIGJjZSk7Ci0rICAgICAgICBuID0gMjU2OwotKyAgICAgIH0KLSAgICAgICBtbCA9IHAtPndfbWxpbmVzICsgeWU7Ci0gICAgICAgLyogQ2xlYXIgbGluZXMgKi8KLSAgICAgICBmb3IgKGkgPSB5ZTsgaSA+IHllIC0gbjsgaS0tLCBtbC0tKQpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9zY3JlZW4vc2NyZWVuLzAwMDEtZml4LWZvci1tdWx0aWpvYi1idWlsZC5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvc2NyZWVuL3NjcmVlbi8wMDAxLWZpeC1mb3ItbXVsdGlqb2ItYnVpbGQucGF0Y2gKaW5kZXggNDBlY2VmMC4uZmJkYjBlYiAxMDA2NDQKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9zY3JlZW4vc2NyZWVuLzAwMDEtZml4LWZvci1tdWx0aWpvYi1idWlsZC5wYXRjaAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3NjcmVlbi9zY3JlZW4vMDAwMS1maXgtZm9yLW11bHRpam9iLWJ1aWxkLnBhdGNoCkBAIC0xLDMgKzEsMTMgQEAKK0Zyb20gNzlhZDI4ODVlMjY2MzEwNzdkZDZiOGFlYmUxN2FlOTViMzgxMzNhNiBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEphY2tpZSBIdWFuZyA8amFja2llLmh1YW5nQHdpbmRyaXZlci5jb20+CitEYXRlOiBUdWUsIDI2IEp1bCAyMDE2IDE0OjIzOjU5ICswODAwCitTdWJqZWN0OiBbUEFUQ0hdIGZpeCBmb3IgbXVsdGlqb2IgYnVpbGQKKworbWFrZSBzdXJlIHRoYXQgY29tbS5zaCBzY3JpcHQgZ2VuZXJhdGVzIGNvbW0uaCBoZWFkZXIgYmVmb3JlIGRvaW5nCithbnl0aGluZyBlbHNlCisKK1NpZ25lZC1vZmYtYnk6IEFtYWRldXN6IFNhd2lza2kgPGFtYWRlQGFzbWJsci5uZXQ+CisKIFVwc3RyZWFtLVN0YXR1czogQmFja3BvcnQKIAogQmFja3BvcnQgcGF0Y2ggdG8gZml4IHBhcmFsbGVsIGJ1aWxkIGZhaWx1cmUgYW5kIHVwZGF0ZSBjb250ZXh0IHRvIG1ha2UgcGF0Y2gKQEAgLTYsMjUgKzE2LDEzIEBACiBodHRwOi8vZ2l0LnNhdmFubmFoLmdudS5vcmcvY2dpdC9zY3JlZW4uZ2l0L2NvbW1pdD9pZD1jMGRlNmRkCiAKIFNpZ25lZC1vZmYtYnk6IEthaSBLYW5nIDxrYWkua2FuZ0B3aW5kcml2ZXIuY29tPgorU2lnbmVkLW9mZi1ieTogSmFja2llIEh1YW5nIDxqYWNraWUuaHVhbmdAd2luZHJpdmVyLmNvbT4KIC0tLQotRnJvbSBjMGRlNmRkNzk3MGIyYzdiNDI2YTVjMzlkY2JjMzFjMmJlZjg3MjMyIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQotRnJvbTogPT9VVEYtOD9xP0FtYWRldXN6PTIwUz1DNT04MmF3aT1DNT04NHNraT89IDxhbWFkZUBhc21ibHIubmV0PgotRGF0ZTogVGh1LCAyIEphbiAyMDE0IDE4OjE4OjA2ICswMTAwCi1TdWJqZWN0OiBbUEFUQ0hdIGZpeCBmb3IgbXVsdGlqb2IgYnVpbGQKLU1JTUUtVmVyc2lvbjogMS4wCi1Db250ZW50LVR5cGU6IHRleHQvcGxhaW47IGNoYXJzZXQ9VVRGLTgKLUNvbnRlbnQtVHJhbnNmZXItRW5jb2Rpbmc6IDhiaXQKLQotbWFrZSBzdXJlIHRoYXQgY29tbS5zaCBzY3JpcHQgZ2VuZXJhdGVzIGNvbW0uaCBoZWFkZXIgYmVmb3JlIGRvaW5nCi1hbnl0aGluZyBlbHNlCi0KLVNpZ25lZC1vZmYtYnk6IEFtYWRldXN6IFPFgmF3acWEc2tpIDxhbWFkZUBhc21ibHIubmV0PgotLS0tCi0gTWFrZWZpbGUuaW4gfCAxMCArKysrKy0tLS0tCi0gMSBmaWxlIGNoYW5nZWQsIDUgaW5zZXJ0aW9ucygrKSwgNSBkZWxldGlvbnMoLSkKKyBNYWtlZmlsZS5pbiB8IDggKysrKy0tLS0KKyAxIGZpbGUgY2hhbmdlZCwgNCBpbnNlcnRpb25zKCspLCA0IGRlbGV0aW9ucygtKQogCiBkaWZmIC0tZ2l0IGEvTWFrZWZpbGUuaW4gYi9NYWtlZmlsZS5pbgotaW5kZXggY2U4NmNiYy4uZGVhMTZkOCAxMDA2NDQKK2luZGV4IGFjYTdkYTMuLjM2MDc3MTEgMTAwNjQ0CiAtLS0gYS9NYWtlZmlsZS5pbgogKysrIGIvTWFrZWZpbGUuaW4KIEBAIC0yOTgsNyArMjk4LDcgQEAgc2VhcmNoLm86IGxheW91dC5oIHZpZXdwb3J0LmggY2FudmFzLmggc2VhcmNoLmMgY29uZmlnLmggc2NyZWVuLmggb3MuaCBvc2RlZi5oIGEKQEAgLTUxLDggKzQ5LDEwIEBACiAgIGJyYWlsbGUuaAogLWxpc3RfZ2VuZXJpYy5vOiBsaXN0X2dlbmVyaWMuaCBsaXN0X2dlbmVyaWMuYyBsYXllci5oIHNjcmVlbi5oIG9zZGVmLmgKIC1saXN0X2Rpc3BsYXkubzogbGlzdF9nZW5lcmljLmggbGlzdF9kaXNwbGF5LmMgbGF5ZXIuaCBzY3JlZW4uaCBvc2RlZi5oCi0tbGlzdF93aW5kb3cubzogbGlzdF9nZW5lcmljLmggbGlzdF93aW5kb3cuYyB3aW5kb3cuaCBsYXllci5oIHNjcmVlbi5oIG9zZGVmLmgKICtsaXN0X2dlbmVyaWMubzogbGlzdF9nZW5lcmljLmggbGlzdF9nZW5lcmljLmMgbGF5ZXIuaCBzY3JlZW4uaCBvc2RlZi5oIGNvbW0uaAogK2xpc3RfZGlzcGxheS5vOiBsaXN0X2dlbmVyaWMuaCBsaXN0X2Rpc3BsYXkuYyBsYXllci5oIHNjcmVlbi5oIG9zZGVmLmggY29tbS5oCi0rbGlzdF93aW5kb3cubzogbGlzdF9nZW5lcmljLmggbGlzdF93aW5kb3cuYyB3aW5kb3cuaCBsYXllci5oIHNjcmVlbi5oIG9zZGVmLmggY29tbS5oCisgbGlzdF93aW5kb3cubzogbGlzdF9nZW5lcmljLmggbGlzdF93aW5kb3cuYyB3aW5kb3cuaCBsYXllci5oIHNjcmVlbi5oIG9zZGVmLmggY29tbS5oCiAgCistLSAKKzEuOS4xCisKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvc2NyZWVuL3NjcmVlbl80LjMuMS5iYiBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvc2NyZWVuL3NjcmVlbl80LjMuMS5iYgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDBkODc4Yi4uMDAwMDAwMAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3NjcmVlbi9zY3JlZW5fNC4zLjEuYmIKKysrIC9kZXYvbnVsbApAQCAtMSw1MyArMCwwIEBACi1TVU1NQVJZID0gIk11bHRpcGxleGluZyB0ZXJtaW5hbCBtYW5hZ2VyIgotREVTQ1JJUFRJT04gPSAiU2NyZWVuIGlzIGEgZnVsbC1zY3JlZW4gd2luZG93IG1hbmFnZXIgXAotdGhhdCBtdWx0aXBsZXhlcyBhIHBoeXNpY2FsIHRlcm1pbmFsIGJldHdlZW4gc2V2ZXJhbCBcCi1wcm9jZXNzZXMsIHR5cGljYWxseSBpbnRlcmFjdGl2ZSBzaGVsbHMuIgotSE9NRVBBR0UgPSAiaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL3NjcmVlbi8iCi1CVUdUUkFDS0VSID0gImh0dHBzOi8vc2F2YW5uYWguZ251Lm9yZy9idWdzLz9mdW5jPWFkZGl0ZW0mZ3JvdXA9c2NyZWVuIgotCi1TRUNUSU9OID0gImNvbnNvbGUvdXRpbHMiCi0KLUxJQ0VOU0UgPSAiR1BMdjMrIgotTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9ZDMyMjM5YmNiNjczNDYzYWI4NzRlODBkNDdmYWU1MDQgXAotICAgICAgICAgICAgICAgICAgICBmaWxlOi8vc2NyZWVuLmg7ZW5kbGluZT0yNjttZDU9Mzk3MTE0Mjk4OTI4OWE4MTk4YTU0NDIyMDcwM2MyYmYiCi0KLURFUEVORFMgPSAibmN1cnNlcyBcCi0gICAgICAgICAgJHtAYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsICdwYW0nLCAnbGlicGFtJywgJycsIGQpfSIKLVJERVBFTkRTXyR7UE59ID0gImJhc2UtZmlsZXMiCi0KLVNSQ19VUkkgPSAiJHtHTlVfTUlSUk9SfS9zY3JlZW4vc2NyZWVuLSR7UFZ9LnRhci5neiBcCi0gICAgICAgICAgIGZpbGU6Ly9maXgtcGFyYWxsZWwtbWFrZS5wYXRjaCBcCi0gICAgICAgICAgICR7QGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCAncGFtJywgJ2ZpbGU6Ly9zY3JlZW4ucGFtJywgJycsIGQpfSBcCi0gICAgICAgICAgIGZpbGU6Ly9SZW1vdmUtcmVkdW5kYW50LWNvbXBpbGVyLXNhbml0eS1jaGVja3MucGF0Y2ggXAotICAgICAgICAgICBmaWxlOi8vUHJvdmlkZS1jcm9zcy1jb21waWxlLWFsdGVybmF0aXZlcy1mb3ItQUNfVFJZX1JVTi5wYXRjaCBcCi0gICAgICAgICAgIGZpbGU6Ly9Ta2lwLWhvc3QtZmlsZS1zeXN0ZW0tY2hlY2tzLXdoZW4tY3Jvc3MtY29tcGlsaW5nLnBhdGNoIFwKLSAgICAgICAgICAgZmlsZTovL0F2b2lkLW1pcy1pZGVudGlmeWluZy1zeXN0ZW1zLWFzLVNWUjQucGF0Y2ggXAotICAgICAgICAgICBmaWxlOi8vMDAwMS1maXgtZm9yLW11bHRpam9iLWJ1aWxkLnBhdGNoIFwKLSAgICAgICAgICAgZmlsZTovLzAwMDItY29tbS5oLW5vdy1kZXBlbmRzLW9uLXRlcm0uaC5wYXRjaCBcCi0gICAgICAgICAgIGZpbGU6Ly8wMDAxLUZpeC1zdGFjay1vdmVyZmxvdy1kdWUtdG8tdG9vLWRlZXAtcmVjdXJzaW9uLnBhdGNoIFwKLSAgICAgICAgICAiCi0KLVNSQ19VUklbbWQ1c3VtXSA9ICI1YmIzYjBmZjI2NzRlMjkzNzhjMzFhZDM0MTExNzBhZCIKLVNSQ19VUklbc2hhMjU2c3VtXSA9ICJmYTQwNDlmOGFlZTI4M2RlNjJlMjgzZDQyN2YyY2ZkMzVkNmMzNjliNDBmN2Y0NWY5NDdkYmZkOTE1Njk5ZDYzIgotCi1pbmhlcml0IGF1dG90b29scyB0ZXhpbmZvCi0KLVBBQ0tBR0VDT05GSUcgPz89ICIiCi1QQUNLQUdFQ09ORklHW3V0ZW1wdGVyXSA9ICJhY19jdl9oZWFkZXJfdXRlbXB0ZXJfaD15ZXMsYWNfY3ZfaGVhZGVyX3V0ZW1wdGVyX2g9bm8sbGlidXRlbXB0ZXIsIgotCi1FWFRSQV9PRUNPTkYgPSAiLS13aXRoLXB0eS1tb2RlPTA2MjAgLS13aXRoLXB0eS1ncm91cD01IFwKLSAgICAgICAgICAgICAgICR7QGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCAncGFtJywgJy0tZW5hYmxlLXBhbScsICctLWRpc2FibGUtcGFtJywgZCl9IgotCi1kb19pbnN0YWxsX2FwcGVuZCAoKSB7Ci0JaWYgWyAiJHtAYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsICdwYW0nLCAncGFtJywgJycsIGQpfSIgPSAicGFtIiBdOyB0aGVuCi0JCWluc3RhbGwgLUQgLW0gNjQ0ICR7V09SS0RJUn0vc2NyZWVuLnBhbSAke0R9LyR7c3lzY29uZmRpcn0vcGFtLmQvc2NyZWVuCi0JZmkKLX0KLQotcGtnX3Bvc3RpbnN0XyR7UE59ICgpIHsKLQlncmVwIC1xICJeJHtiaW5kaXJ9L3NjcmVlbiQiICREJHtzeXNjb25mZGlyfS9zaGVsbHMgfHwgZWNobyAke2JpbmRpcn0vc2NyZWVuID4+ICREJHtzeXNjb25mZGlyfS9zaGVsbHMKLX0KLQotcGtnX3Bvc3RybV8ke1BOfSAoKSB7Ci0JcHJpbnRmICIkKGdyZXAgLXYgIl4ke2JpbmRpcn0vc2NyZWVuJCIgJEQke3N5c2NvbmZkaXJ9L3NoZWxscylcbiIgPiAkRCR7c3lzY29uZmRpcn0vc2hlbGxzCi19CmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3NjcmVlbi9zY3JlZW5fNC40LjAuYmIgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3NjcmVlbi9zY3JlZW5fNC40LjAuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzY5YmFjMQotLS0gL2Rldi9udWxsCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvc2NyZWVuL3NjcmVlbl80LjQuMC5iYgpAQCAtMCwwICsxLDUyIEBACitTVU1NQVJZID0gIk11bHRpcGxleGluZyB0ZXJtaW5hbCBtYW5hZ2VyIgorREVTQ1JJUFRJT04gPSAiU2NyZWVuIGlzIGEgZnVsbC1zY3JlZW4gd2luZG93IG1hbmFnZXIgXAordGhhdCBtdWx0aXBsZXhlcyBhIHBoeXNpY2FsIHRlcm1pbmFsIGJldHdlZW4gc2V2ZXJhbCBcCitwcm9jZXNzZXMsIHR5cGljYWxseSBpbnRlcmFjdGl2ZSBzaGVsbHMuIgorSE9NRVBBR0UgPSAiaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL3NjcmVlbi8iCitCVUdUUkFDS0VSID0gImh0dHBzOi8vc2F2YW5uYWguZ251Lm9yZy9idWdzLz9mdW5jPWFkZGl0ZW0mZ3JvdXA9c2NyZWVuIgorCitTRUNUSU9OID0gImNvbnNvbGUvdXRpbHMiCisKK0xJQ0VOU0UgPSAiR1BMdjMrIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9ZDMyMjM5YmNiNjczNDYzYWI4NzRlODBkNDdmYWU1MDQgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vc2NyZWVuLmg7ZW5kbGluZT0yNjttZDU9Mzk3MTE0Mjk4OTI4OWE4MTk4YTU0NDIyMDcwM2MyYmYiCisKK0RFUEVORFMgPSAibmN1cnNlcyBcCisgICAgICAgICAgJHtAYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsICdwYW0nLCAnbGlicGFtJywgJycsIGQpfSIKK1JERVBFTkRTXyR7UE59ID0gImJhc2UtZmlsZXMiCisKK1NSQ19VUkkgPSAiJHtHTlVfTUlSUk9SfS9zY3JlZW4vc2NyZWVuLSR7UFZ9LnRhci5neiBcCisgICAgICAgICAgIGZpbGU6Ly9maXgtcGFyYWxsZWwtbWFrZS5wYXRjaCBcCisgICAgICAgICAgICR7QGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCAncGFtJywgJ2ZpbGU6Ly9zY3JlZW4ucGFtJywgJycsIGQpfSBcCisgICAgICAgICAgIGZpbGU6Ly9SZW1vdmUtcmVkdW5kYW50LWNvbXBpbGVyLXNhbml0eS1jaGVja3MucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vUHJvdmlkZS1jcm9zcy1jb21waWxlLWFsdGVybmF0aXZlcy1mb3ItQUNfVFJZX1JVTi5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9Ta2lwLWhvc3QtZmlsZS1zeXN0ZW0tY2hlY2tzLXdoZW4tY3Jvc3MtY29tcGlsaW5nLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL0F2b2lkLW1pcy1pZGVudGlmeWluZy1zeXN0ZW1zLWFzLVNWUjQucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vMDAwMi1jb21tLmgtbm93LWRlcGVuZHMtb24tdGVybS5oLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovLzAwMDEtZml4LWZvci1tdWx0aWpvYi1idWlsZC5wYXRjaCBcCisgICAgICAgICAgIgorCitTUkNfVVJJW21kNXN1bV0gPSAiZDI2ZTExYTM2NDhjMmIxMWFhZWZhMjE1YTU1ZGZkMzkiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiZWY3MjJhNTQ3NTlhM2JmMjNhYWQyNzJiYmYzM2M0MTRjMTA3OGNhZDZiY2Q5ODJmYWRhOTNjMGQ3OTE3MjE4YiIKKworaW5oZXJpdCBhdXRvdG9vbHMgdGV4aW5mbworCitQQUNLQUdFQ09ORklHID8/PSAiIgorUEFDS0FHRUNPTkZJR1t1dGVtcHRlcl0gPSAiYWNfY3ZfaGVhZGVyX3V0ZW1wdGVyX2g9eWVzLGFjX2N2X2hlYWRlcl91dGVtcHRlcl9oPW5vLGxpYnV0ZW1wdGVyLCIKKworRVhUUkFfT0VDT05GID0gIi0td2l0aC1wdHktbW9kZT0wNjIwIC0td2l0aC1wdHktZ3JvdXA9NSBcCisgICAgICAgICAgICAgICAke0BiYi51dGlscy5jb250YWlucygnRElTVFJPX0ZFQVRVUkVTJywgJ3BhbScsICctLWVuYWJsZS1wYW0nLCAnLS1kaXNhYmxlLXBhbScsIGQpfSIKKworZG9faW5zdGFsbF9hcHBlbmQgKCkgeworCWlmIFsgIiR7QGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCAncGFtJywgJ3BhbScsICcnLCBkKX0iID0gInBhbSIgXTsgdGhlbgorCQlpbnN0YWxsIC1EIC1tIDY0NCAke1dPUktESVJ9L3NjcmVlbi5wYW0gJHtEfS8ke3N5c2NvbmZkaXJ9L3BhbS5kL3NjcmVlbgorCWZpCit9CisKK3BrZ19wb3N0aW5zdF8ke1BOfSAoKSB7CisJZ3JlcCAtcSAiXiR7YmluZGlyfS9zY3JlZW4kIiAkRCR7c3lzY29uZmRpcn0vc2hlbGxzIHx8IGVjaG8gJHtiaW5kaXJ9L3NjcmVlbiA+PiAkRCR7c3lzY29uZmRpcn0vc2hlbGxzCit9CisKK3BrZ19wb3N0cm1fJHtQTn0gKCkgeworCXByaW50ZiAiJChncmVwIC12ICJeJHtiaW5kaXJ9L3NjcmVlbiQiICREJHtzeXNjb25mZGlyfS9zaGVsbHMpXG4iID4gJEQke3N5c2NvbmZkaXJ9L3NoZWxscworfQpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9zZWQvc2VkLTQuMS4yL3NlZC00LjEuMl9maXhfZm9yX2F1dG9tYWtlLTEuMTIucGF0Y2ggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3NlZC9zZWQtNC4xLjIvc2VkLTQuMS4yX2ZpeF9mb3JfYXV0b21ha2UtMS4xMi5wYXRjaAppbmRleCA4MDU5NDA2Li5jN2MwYWEwIDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3NlZC9zZWQtNC4xLjIvc2VkLTQuMS4yX2ZpeF9mb3JfYXV0b21ha2UtMS4xMi5wYXRjaAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3NlZC9zZWQtNC4xLjIvc2VkLTQuMS4yX2ZpeF9mb3JfYXV0b21ha2UtMS4xMi5wYXRjaApAQCAtNiw3ICs2LDcgQEAKIHwgbWFrZVsxXTogbWtkaXJfcEA6IENvbW1hbmQgbm90IGZvdW5kCiB8IG1ha2VbMV06ICoqKiBbaW5zdGFsbC1kYXRhLXllc10gRXJyb3IgMTI3CiAKLVNpZ25lZC1PZmYtQnk6IE5pdGluIEEgS2FtYmxlIDxuaXRpbi5hLmthbWJsZUBpbnRlbC5jb20+CitTaWduZWQtb2ZmLWJ5OiBOaXRpbiBBIEthbWJsZSA8bml0aW4uYS5rYW1ibGVAaW50ZWwuY29tPgogMjAxMi8wNy8xMwogCiBJbmRleDogc2VkLTQuMS4yL2ludGwvTWFrZWZpbGUuaW4KZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvc2VkL3NlZC00LjIuMi9zZWQtYWRkLXB0ZXN0LnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9zZWQvc2VkLTQuMi4yL3NlZC1hZGQtcHRlc3QucGF0Y2gKaW5kZXggMTA1ZThiNy4uMDI5MzkwMCAxMDA2NDQKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9zZWQvc2VkLTQuMi4yL3NlZC1hZGQtcHRlc3QucGF0Y2gKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9zZWQvc2VkLTQuMi4yL3NlZC1hZGQtcHRlc3QucGF0Y2gKQEAgLTU0LDcgKzU0LDcgQEAKICAjIGR1bW15IHRhcmdldHMgZm9yICQoVEVTVFMpIHNvIHRoYXQgbWFrZSBkb2VzIG5vdCBjb21wbGFpbi4KICAKICtpbnN0YWxsLXB0ZXN0OgotKwljZCAkKEJVSUxERElSKTsgdGFyIC1jZiAtICQoVEVTVERJUikgLS1leGNsdWRlICoubyB8ICggY2QgJChERVNURElSKSAmJiB0YXIgLXhmIC0gKQorKwljZCAkKEJVSUxERElSKTsgdGFyIC1jIC0tZXhjbHVkZT0qLm8gJChURVNURElSKSB8ICggY2QgJChERVNURElSKSAmJiB0YXIgLXhmIC0gKQogKwlmb3IgaSBpbiAkKEVYVFJBX0RJU1QpIHRzdC1yZWdleDIuYzsgZG8gaW5zdGFsbCAkKHNyY2RpcikvJCRpICQoREVTVERJUikvJChURVNURElSKTsgZG9uZQogKwlzZWQgLWUgJ3MvXk1ha2VmaWxlOi9fTWFrZWZpbGU6LycgLWUgJ3MvXnNyY2RpciA9IFwoLipcKS9zcmNkaXIgPSAuLycgLWUgJ3MvYmFzaC9zaC8nIC1pICQoREVTVERJUikvJChURVNURElSKS9NYWtlZmlsZQogKwlmb3IgaSBpbiBgZ3JlcCAtcmwgIi4uL3NlZC9zZWQiICQoREVTVERJUikvJChURVNURElSKWA7IGRvIHNlZCAtZSAncy8uLlwvc2VkXC9zZWQvc2VkLycgLWkgJCRpOyBkb25lCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3NoYWRvdy9maWxlcy9zaGFkb3ctcmVsYXhlZC11c2VybmFtZXMucGF0Y2ggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3NoYWRvdy9maWxlcy9zaGFkb3ctcmVsYXhlZC11c2VybmFtZXMucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWFmMDRkNQotLS0gL2Rldi9udWxsCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvc2hhZG93L2ZpbGVzL3NoYWRvdy1yZWxheGVkLXVzZXJuYW1lcy5wYXRjaApAQCAtMCwwICsxLDEwMCBAQAorCitUaGUgZ3JvdXBhZGQgZnJvbSBzaGFkb3cgZG9lcyBub3QgYWxsb3cgdXBwZXIgY2FzZSBncm91cCBuYW1lcywgdGhlCitzYW1lIGlzIHRydWUgZm9yIHRoZSB1cHN0cmVhbSBzaGFkb3cuIEJ1dCBkaXN0cmlidXRpb25zIGxpa2UKK0RlYmlhbi9VYnVudHUvQ2VudE9TIGhhcyB0aGVpciBvd24gd2F5IHRvIGNvcGUgd2l0aCB0aGlzIHByb2JsZW0sCit0aGlzIHBhdGNoIGlzIHBpY2tlZCB1cCBmcm9tIENlbnRPUyByZWxlYXNlIDcuMCB0byByZWxheCB0aGUgdXNlcm5hbWVzCityZXN0cmljdGlvbnMgdG8gYWxsb3cgdGhlIHVwcGVyIGNhc2UgZ3JvdXAgbmFtZXMsIGFuZCB0aGUgcmVsYXhhdGlvbiBpcworUE9TSVggY29tcGxpYW50IGJlY2F1c2UgUE9TSVggaW5kaWNhdGUgdGhhdCB1c2VybmFtZXMgYXJlIGNvbXBvc2VkIG9mIAorY2hhcmFjdGVycyBmcm9tIHRoZSBwb3J0YWJsZSBmaWxlbmFtZSBjaGFyYWN0ZXIgc2V0IFtBLVphLXowLTkuXy1dLgorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworU2lnbmVkLW9mZi1ieTogU2hhbiBIYWkgPHNoYW4uaGFpQHdpbmRyaXZlci5jb20+IAorCitkaWZmIC11cnBOIGEvbGlibWlzYy9jaGtuYW1lLmMgYi9saWJtaXNjL2Noa25hbWUuYworaW5kZXggNTA4OTExMi4uZjQwYTBkYSAxMDA2NDQKKy0tLSBhL2xpYm1pc2MvY2hrbmFtZS5jCisrKysgYi9saWJtaXNjL2Noa25hbWUuYworQEAgLTQ5LDIxICs0OSwyOCBAQAorIHN0YXRpYyBib29sIGlzX3ZhbGlkX25hbWUgKGNvbnN0IGNoYXIgKm5hbWUpCisgeworIAkvKgorLQkgKiBVc2VyL2dyb3VwIG5hbWVzIG11c3QgbWF0Y2ggW2Etel9dW2EtejAtOV8tXSpbJF0KKy0JICovCistCWlmICgoJ1wwJyA9PSAqbmFtZSkgfHwKKy0JICAgICEoKCgnYScgPD0gKm5hbWUpICYmICgneicgPj0gKm5hbWUpKSB8fCAoJ18nID09ICpuYW1lKSkpIHsKKysgICAgICAgICAqIFVzZXIvZ3JvdXAgbmFtZXMgbXVzdCBtYXRjaCBnbnUgZS1yZWdleDoKKysgICAgICAgICAqICAgIFthLXpBLVowLTlfLl1bYS16QS1aMC05Xy4tXXswLDMwfVthLXpBLVowLTlfLiQtXT8KKysgICAgICAgICAqCisrICAgICAgICAgKiBhcyBhIG5vbi1QT1NJWCwgZXh0ZW5zaW9uLCBhbGxvdyAiJCIgYXMgdGhlIGxhc3QgY2hhciBmb3IKKysgICAgICAgICAqIHNha2Ugb2YgU2FtYmEgMy54ICJhZGQgbWFjaGluZSBzY3JpcHQiCisrICAgICAgICAgKi8KKysJaWYgKCAoJ1wwJyA9PSAqbmFtZSkgfHwKKysgICAgICAgICAgICAgISgoKm5hbWUgPj0gJ2EnICYmICpuYW1lIDw9ICd6JykgfHwKKysgICAgICAgICAgICAgICAoKm5hbWUgPj0gJ0EnICYmICpuYW1lIDw9ICdaJykgfHwKKysgICAgICAgICAgICAgICAoKm5hbWUgPj0gJzAnICYmICpuYW1lIDw9ICc5JykgfHwKKysgICAgICAgICAgICAgICAoKm5hbWUgPT0gJ18nKSB8fCAoKm5hbWUgPT0gJy4nKSAKKysJICAgICAgKSkgeworIAkJcmV0dXJuIGZhbHNlOworIAl9CisgCisgCXdoaWxlICgnXDAnICE9ICorK25hbWUpIHsKKy0JCWlmICghKCggKCdhJyA8PSAqbmFtZSkgJiYgKCd6JyA+PSAqbmFtZSkgKSB8fAorLQkJICAgICAgKCAoJzAnIDw9ICpuYW1lKSAmJiAoJzknID49ICpuYW1lKSApIHx8CistCQkgICAgICAoJ18nID09ICpuYW1lKSB8fAorLQkJICAgICAgKCctJyA9PSAqbmFtZSkgfHwKKy0JCSAgICAgICgnLicgPT0gKm5hbWUpIHx8CistCQkgICAgICAoICgnJCcgPT0gKm5hbWUpICYmICgnXDAnID09ICoobmFtZSArIDEpKSApCistCQkgICAgICkpIHsKKysgICAgICAgICAgICAgICAgaWYgKCEoICAoKm5hbWUgPj0gJ2EnICYmICpuYW1lIDw9ICd6JykgfHwKKysgICAgICAgICAgICAgICAgICAgICAgICAoKm5hbWUgPj0gJ0EnICYmICpuYW1lIDw9ICdaJykgfHwKKysgICAgICAgICAgICAgICAgICAgICAgICAoKm5hbWUgPj0gJzAnICYmICpuYW1lIDw9ICc5JykgfHwKKysgICAgICAgICAgICAgICAgICAgICAgICAoKm5hbWUgPT0gJ18nKSB8fCAoKm5hbWUgPT0gJy4nKSB8fCAoKm5hbWUgPT0gJy0nKSB8fAorKyAgICAgICAgICAgICAgICAgICAgICAgICgqbmFtZSA9PSAnJCcgJiYgKihuYW1lICsgMSkgPT0gJ1wwJykgCisrICAgICAgICAgICAgICAgICAgICAgKSkgeworIAkJCXJldHVybiBmYWxzZTsKKyAJCX0KKyAJfQorZGlmZiAtdXJwTiBhL21hbi9ncm91cGFkZC44LnhtbCBiL21hbi9ncm91cGFkZC44LnhtbAoraW5kZXggMjMwZmQwYy4uOTRmNzgwNyAxMDA2NDQKKy0tLSBhL21hbi9ncm91cGFkZC44LnhtbAorKysrIGIvbWFuL2dyb3VwYWRkLjgueG1sCitAQCAtMjIyLDEyICsyMjIsNiBAQAorICAgIDxyZWZzZWN0MSBpZD0nY2F2ZWF0cyc+CisgICAgICA8dGl0bGU+Q0FWRUFUUzwvdGl0bGU+CisgICAgICA8cGFyYT4KKy0gICAgICAgR3JvdXBuYW1lcyBtdXN0IHN0YXJ0IHdpdGggYSBsb3dlciBjYXNlIGxldHRlciBvciBhbiB1bmRlcnNjb3JlLAorLSAgICAgICBmb2xsb3dlZCBieSBsb3dlciBjYXNlIGxldHRlcnMsIGRpZ2l0cywgdW5kZXJzY29yZXMsIG9yIGRhc2hlcy4KKy0gICAgICAgVGhleSBjYW4gZW5kIHdpdGggYSBkb2xsYXIgc2lnbi4KKy0gICAgICAgSW4gcmVndWxhciBleHByZXNzaW9uIHRlcm1zOiBbYS16X11bYS16MC05Xy1dKlskXT8KKy0gICAgIDwvcGFyYT4KKy0gICAgIDxwYXJhPgorICAgICAgICBHcm91cG5hbWVzIG1heSBvbmx5IGJlIHVwIHRvICZHUk9VUF9OQU1FX01BWF9MRU5HVEg7IGNoYXJhY3RlcnMgbG9uZy4KKyAgICAgIDwvcGFyYT4KKyAgICAgIDxwYXJhPgorZGlmZiAtdXJwTiBhL21hbi91c2VyYWRkLjgueG1sIGIvbWFuL3VzZXJhZGQuOC54bWwKK2luZGV4IDVkZWM5ODkuLmZlNjIzYjkgMTAwNjQ0CistLS0gYS9tYW4vdXNlcmFkZC44LnhtbAorKysrIGIvbWFuL3VzZXJhZGQuOC54bWwKK0BAIC0zMzYsNyArMzM2LDcgQEAKKyAJPC90ZXJtPgorIAk8bGlzdGl0ZW0+CisgCSAgPHBhcmE+CistCSAgICBEbyBubyBjcmVhdGUgdGhlIHVzZXIncyBob21lIGRpcmVjdG9yeSwgZXZlbiBpZiB0aGUgc3lzdGVtCisrCSAgICBEbyBub3QgY3JlYXRlIHRoZSB1c2VyJ3MgaG9tZSBkaXJlY3RvcnksIGV2ZW4gaWYgdGhlIHN5c3RlbQorIAkgICAgd2lkZSBzZXR0aW5nIGZyb20gPGZpbGVuYW1lPi9ldGMvbG9naW4uZGVmczwvZmlsZW5hbWU+CisgCSAgICAoPG9wdGlvbj5DUkVBVEVfSE9NRTwvb3B0aW9uPikgaXMgc2V0IHRvCisgCSAgICA8cmVwbGFjZWFibGU+eWVzPC9yZXBsYWNlYWJsZT4uCitAQCAtNjA3LDEyICs2MDcsNiBAQAorICAgICA8L3BhcmE+CisgCisgICAgIDxwYXJhPgorLSAgICAgIFVzZXJuYW1lcyBtdXN0IHN0YXJ0IHdpdGggYSBsb3dlciBjYXNlIGxldHRlciBvciBhbiB1bmRlcnNjb3JlLAorLSAgICAgIGZvbGxvd2VkIGJ5IGxvd2VyIGNhc2UgbGV0dGVycywgZGlnaXRzLCB1bmRlcnNjb3Jlcywgb3IgZGFzaGVzLgorLSAgICAgIFRoZXkgY2FuIGVuZCB3aXRoIGEgZG9sbGFyIHNpZ24uCistICAgICAgSW4gcmVndWxhciBleHByZXNzaW9uIHRlcm1zOiBbYS16X11bYS16MC05Xy1dKlskXT8KKy0gICAgPC9wYXJhPgorLSAgICA8cGFyYT4KKyAgICAgICBVc2VybmFtZXMgbWF5IG9ubHkgYmUgdXAgdG8gMzIgY2hhcmFjdGVycyBsb25nLgorICAgICA8L3BhcmE+CisgICA8L3JlZnNlY3QxPgpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9zaGFkb3cvc2hhZG93LXN5c3Jvb3RfNC4yLjEuYmIgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3NoYWRvdy9zaGFkb3ctc3lzcm9vdF80LjIuMS5iYgppbmRleCA2OTc1NjljLi5lZjAxNDYyIDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3NoYWRvdy9zaGFkb3ctc3lzcm9vdF80LjIuMS5iYgorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3NoYWRvdy9zaGFkb3ctc3lzcm9vdF80LjIuMS5iYgpAQCAtMjEsMTIgKzIxLDEwIEBACiAKIGRvX2luc3RhbGwoKSB7CiAJaW5zdGFsbCAtZCAke0R9JHtzeXNjb25mZGlyfQotCWluc3RhbGwgLXAgLW0gNzU1ICR7U30vbG9naW4uZGVmc19zaGFkb3ctc3lzcm9vdCAke0R9JHtzeXNjb25mZGlyfS9sb2dpbi5kZWZzCisJaW5zdGFsbCAtcCAtbSA2NDQgJHtTfS9sb2dpbi5kZWZzX3NoYWRvdy1zeXNyb290ICR7RH0ke3N5c2NvbmZkaXJ9L2xvZ2luLmRlZnMKIH0KIAotc3lzcm9vdF9zdGFnZV9hbGwoKSB7Ci0Jc3lzcm9vdF9zdGFnZV9kaXIgJHtEfSAke1NZU1JPT1RfREVTVERJUn0KLX0KK1NZU1JPT1RfRElSUyArPSAiJHtzeXNjb25mZGlyfSIKIAogIyBkb24ndCBjcmVhdGUgYW55IHBhY2thZ2VzCiAjIG90aGVyd2lzZTogZGJ1cy1kZXYgZGVwZW5kcyBvbiBzaGFkb3ctc3lzcm9vdC1kZXYgd2hpY2ggZGVwZW5kcyBvbiBzaGFkb3ctc3lzcm9vdCAKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvc2hhZG93L3NoYWRvdy5pbmMgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3NoYWRvdy9zaGFkb3cuaW5jCmluZGV4IGQwMjRiMDEuLjM1YTE4ZjggMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvc2hhZG93L3NoYWRvdy5pbmMKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9zaGFkb3cvc2hhZG93LmluYwpAQCAtMjIsNiArMjIsNyBAQAogU1JDX1VSSV9hcHBlbmRfY2xhc3MtdGFyZ2V0ID0gIiBcCiAgICAgICAgICAgIGZpbGU6Ly9sb2dpbl9kZWZzX3BhbS5zZWQgXAogICAgICAgICAgICBmaWxlOi8vc2hhZG93LXVwZGF0ZS1wYW0tY29uZi5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9zaGFkb3ctcmVsYXhlZC11c2VybmFtZXMucGF0Y2ggXAogICAgICAgICAgICAiCiAKIFNSQ19VUklfYXBwZW5kX2NsYXNzLW5hdGl2ZSA9ICIgXApAQCAtMTc5LDEwICsxODAsMTEgQEAKIEFMVEVSTkFUSVZFX0xJTktfTkFNRVtsb2dpbl0gPSAiJHtiYXNlX2JpbmRpcn0vbG9naW4iCiBBTFRFUk5BVElWRV9MSU5LX05BTUVbc3VdID0gIiR7YmFzZV9iaW5kaXJ9L3N1IgogCi1BTFRFUk5BVElWRV8ke1BOfS1kb2MgPSAicGFzc3dkLjUgZ2V0c3BuYW0uMyBncm91cHMuMSIKK0FMVEVSTkFUSVZFXyR7UE59LWRvYyA9ICJwYXNzd2QuNSBnZXRzcG5hbS4zIGdyb3Vwcy4xIHN1LjEiCiBBTFRFUk5BVElWRV9MSU5LX05BTUVbcGFzc3dkLjVdID0gIiR7bWFuZGlyfS9tYW41L3Bhc3N3ZC41IgogQUxURVJOQVRJVkVfTElOS19OQU1FW2dldHNwbmFtLjNdID0gIiR7bWFuZGlyfS9tYW4zL2dldHNwbmFtLjMiCiBBTFRFUk5BVElWRV9MSU5LX05BTUVbZ3JvdXBzLjFdID0gIiR7bWFuZGlyfS9tYW4xL2dyb3Vwcy4xIgorQUxURVJOQVRJVkVfTElOS19OQU1FW3N1LjFdID0gIiR7bWFuZGlyfS9tYW4xL3N1LjEiCiAKIHBrZ19wb3N0aW5zdF8ke1BOfSAoKSB7CiAJaWYgWyAieCREIiAhPSAieCIgXTsgdGhlbgpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9zbGFuZy9zbGFuZy9jaGFuZ2UtY2hhci10eXBlLXRvLXNpZ25lZC1jaGFyLWluLW1hY3Jvcy5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvc2xhbmcvc2xhbmcvY2hhbmdlLWNoYXItdHlwZS10by1zaWduZWQtY2hhci1pbi1tYWNyb3MucGF0Y2gKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDJlYTFmZmQuLjAwMDAwMDAKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9zbGFuZy9zbGFuZy9jaGFuZ2UtY2hhci10eXBlLXRvLXNpZ25lZC1jaGFyLWluLW1hY3Jvcy5wYXRjaAorKysgL2Rldi9udWxsCkBAIC0xLDIxOCArMCwwIEBACi1zbGFuZzogY2hhbmdlIGNoYXIgdHlwZSB0byBzaWduZWQgY2hhciBpbiBtYWNyb3MKLQotQyBsYW5ndWFnZSBoYXMgMyBkaXN0aW5jdCBjaGFyIHR5cGVzOgotICAgICAgICAgY2hhcgotICAgICAgICAgdW5zaWduZWQgY2hhcgotICAgICAgICAgc2lnbmVkIGNoYXIKLUEgY2hhciBoYXMgdGhlIHNhbWUgcmFuZ2Ugb2YgdmFsdWVzIGFzIHNpZ25lZCBjaGFyIG9uIFg4NiwKLWJ1dCBzYW1lIGFzIHVuc2lnbmVkIGNoYXIgb24gQVJNIHdoaWNoIG1hZGUgU2xhbmcncyB0eXBlY2FzdCgpCi1hbmQgYXJyYXlfc29ydCgpIHVuYWJsZSB0byB3b3JrIGZvciBjaGFyIHZhbHVlIG9uIEFSTSwgc2luY2UKLVNsYW5nIGlzIGFzc3VtaW5nICJjaGFyIiBhcyAic2lnbmVkIGNoYXIiLgotCi1Ob3cgd2UgY2hhbmdlICJjaGFyIiBhcyAic2lnbmVkIGNoYXIiIGV4cGxpY2l0bHkgaW4KLXV0aWwvbWtzbGFyaXRoMi5zbCwgYW5kIHVzZSBpdCB0byByZWdlbmVyYXRlIHNyYy9zbGFyaXRoMi5pbmMKLQotVXBzdHJlYW0tU3RhdHVzOiBTdWJtaXR0ZWQKLVNpZ25lZC1vZmYtYnk6IFJveS5MaSA8cm9uZ3FpbmcubGlAd2luZHJpdmVyLmNvbT4KLS0tLQotIHNyYy9zbGFyaXRoMi5pbmMgICAgICAgfCAgIDcyICsrKysrKysrKysrKysrKysrKysrKysrKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSBzcmMvdXRpbC9ta3NsYXJpdGgyLnNsIHwgICAgMiAtCi0gMiBmaWxlcyBjaGFuZ2VkLCAzNyBpbnNlcnRpb25zKCspLCAzNyBkZWxldGlvbnMoLSkKLQotLS0tIGEvc3JjL3V0aWwvbWtzbGFyaXRoMi5zbAotKysrIGIvc3JjL3V0aWwvbWtzbGFyaXRoMi5zbAotQEAgLTEsNyArMSw3IEBACi0gIyEvdXNyL2Jpbi9lbnYgc2xzaAotIAotIHByaXZhdGUgdmFyaWFibGUgQ1R5cGVzID0KLS0gIFsiY2hhciIsICJ1bnNpZ25lZCBjaGFyIiwgInNob3J0IiwgInVuc2lnbmVkIHNob3J0IiwgImludCIsICJ1bnNpZ25lZCBpbnQiLAotKyAgWyJzaWduZWQgY2hhciIsICJ1bnNpZ25lZCBjaGFyIiwgInNob3J0IiwgInVuc2lnbmVkIHNob3J0IiwgImludCIsICJ1bnNpZ25lZCBpbnQiLAotICAgICJsb25nIiwgInVuc2lnbmVkIGxvbmciLCAibG9uZyBsb25nIiwgInVuc2lnbmVkIGxvbmcgbG9uZyIsCi0gICAgImZsb2F0IiwgImRvdWJsZSIsICJsb25nIGRvdWJsZSJdOwotIHByaXZhdGUgdmFyaWFibGUgSXNfSW50X1R5cGUgPQotLS0tIGEvc3JjL3NsYXJpdGgyLmluYwotKysrIGIvc3JjL3NsYXJpdGgyLmluYwotQEAgLTEsNDMgKzEsNDMgQEAKLSAvKiBETyBOT1QgRURJVCAtLSB0aGlzIGZpbGUgd2FzIGdlbmVyYXRlZCBieSBzcmMvdXRpbC9ta3NsYXJpdGgyLnNsICovCi0tLyogLS0tLS0tLS0tLS0tIGNoYXIgLS0tLS0tLS0tLSAqLwotLURFRlVOXzEoY29weV9jaGFyX3RvX2NoYXIsY2hhcixjaGFyKQotKy8qIC0tLS0tLS0tLS0tLSBzaWduZWQgY2hhciAtLS0tLS0tLS0tICovCi0rREVGVU5fMShjb3B5X2NoYXJfdG9fY2hhcixzaWduZWQgY2hhcixzaWduZWQgY2hhcikKLSAjZGVmaW5lIGNoYXJfdG9fY2hhcglOVUxMCi0gI2RlZmluZSBjb3B5X2NoYXJfdG9fdWNoYXIJY29weV9jaGFyX3RvX2NoYXIKLSAjZGVmaW5lIGNoYXJfdG9fdWNoYXIJTlVMTAotLURFRlVOXzEoY29weV9jaGFyX3RvX3Nob3J0LGNoYXIsc2hvcnQpCi0rREVGVU5fMShjb3B5X2NoYXJfdG9fc2hvcnQsc2lnbmVkIGNoYXIsc2hvcnQpCi0gI2RlZmluZSBjaGFyX3RvX3Nob3J0CU5VTEwKLS1ERUZVTl8xKGNvcHlfY2hhcl90b191c2hvcnQsY2hhcix1bnNpZ25lZCBzaG9ydCkKLStERUZVTl8xKGNvcHlfY2hhcl90b191c2hvcnQsc2lnbmVkIGNoYXIsdW5zaWduZWQgc2hvcnQpCi0gI2RlZmluZSBjaGFyX3RvX3VzaG9ydAlOVUxMCi0tREVGVU5fMShjb3B5X2NoYXJfdG9faW50LGNoYXIsaW50KQotLURFRlVOXzIoY2hhcl90b19pbnQsY2hhcixpbnQsY29weV9jaGFyX3RvX2ludCkKLS1ERUZVTl8xKGNvcHlfY2hhcl90b191aW50LGNoYXIsdW5zaWduZWQgaW50KQotLURFRlVOXzIoY2hhcl90b191aW50LGNoYXIsdW5zaWduZWQgaW50LGNvcHlfY2hhcl90b191aW50KQotLURFRlVOXzEoY29weV9jaGFyX3RvX2xvbmcsY2hhcixsb25nKQotLURFRlVOXzIoY2hhcl90b19sb25nLGNoYXIsbG9uZyxjb3B5X2NoYXJfdG9fbG9uZykKLS1ERUZVTl8xKGNvcHlfY2hhcl90b191bG9uZyxjaGFyLHVuc2lnbmVkIGxvbmcpCi0tREVGVU5fMihjaGFyX3RvX3Vsb25nLGNoYXIsdW5zaWduZWQgbG9uZyxjb3B5X2NoYXJfdG9fdWxvbmcpCi0rREVGVU5fMShjb3B5X2NoYXJfdG9faW50LHNpZ25lZCBjaGFyLGludCkKLStERUZVTl8yKGNoYXJfdG9faW50LHNpZ25lZCBjaGFyLGludCxjb3B5X2NoYXJfdG9faW50KQotK0RFRlVOXzEoY29weV9jaGFyX3RvX3VpbnQsc2lnbmVkIGNoYXIsdW5zaWduZWQgaW50KQotK0RFRlVOXzIoY2hhcl90b191aW50LHNpZ25lZCBjaGFyLHVuc2lnbmVkIGludCxjb3B5X2NoYXJfdG9fdWludCkKLStERUZVTl8xKGNvcHlfY2hhcl90b19sb25nLHNpZ25lZCBjaGFyLGxvbmcpCi0rREVGVU5fMihjaGFyX3RvX2xvbmcsc2lnbmVkIGNoYXIsbG9uZyxjb3B5X2NoYXJfdG9fbG9uZykKLStERUZVTl8xKGNvcHlfY2hhcl90b191bG9uZyxzaWduZWQgY2hhcix1bnNpZ25lZCBsb25nKQotK0RFRlVOXzIoY2hhcl90b191bG9uZyxzaWduZWQgY2hhcix1bnNpZ25lZCBsb25nLGNvcHlfY2hhcl90b191bG9uZykKLSAjaWYgZGVmaW5lZChIQVZFX0xPTkdfTE9ORykKLS1ERUZVTl8xKGNvcHlfY2hhcl90b19sbG9uZyxjaGFyLGxvbmcgbG9uZykKLS1ERUZVTl8yKGNoYXJfdG9fbGxvbmcsY2hhcixsb25nIGxvbmcsY29weV9jaGFyX3RvX2xsb25nKQotK0RFRlVOXzEoY29weV9jaGFyX3RvX2xsb25nLHNpZ25lZCBjaGFyLGxvbmcgbG9uZykKLStERUZVTl8yKGNoYXJfdG9fbGxvbmcsc2lnbmVkIGNoYXIsbG9uZyBsb25nLGNvcHlfY2hhcl90b19sbG9uZykKLSAjZW5kaWYgLyogZGVmaW5lZChIQVZFX0xPTkdfTE9ORykgKi8KLSAjaWYgZGVmaW5lZChIQVZFX0xPTkdfTE9ORykKLS1ERUZVTl8xKGNvcHlfY2hhcl90b191bGxvbmcsY2hhcix1bnNpZ25lZCBsb25nIGxvbmcpCi0tREVGVU5fMihjaGFyX3RvX3VsbG9uZyxjaGFyLHVuc2lnbmVkIGxvbmcgbG9uZyxjb3B5X2NoYXJfdG9fdWxsb25nKQotK0RFRlVOXzEoY29weV9jaGFyX3RvX3VsbG9uZyxzaWduZWQgY2hhcix1bnNpZ25lZCBsb25nIGxvbmcpCi0rREVGVU5fMihjaGFyX3RvX3VsbG9uZyxzaWduZWQgY2hhcix1bnNpZ25lZCBsb25nIGxvbmcsY29weV9jaGFyX3RvX3VsbG9uZykKLSAjZW5kaWYgLyogZGVmaW5lZChIQVZFX0xPTkdfTE9ORykgKi8KLSAjaWYgU0xBTkdfSEFTX0ZMT0FUCi0tREVGVU5fMShjb3B5X2NoYXJfdG9fZmxvYXQsY2hhcixmbG9hdCkKLS1ERUZVTl8yKGNoYXJfdG9fZmxvYXQsY2hhcixmbG9hdCxjb3B5X2NoYXJfdG9fZmxvYXQpCi0rREVGVU5fMShjb3B5X2NoYXJfdG9fZmxvYXQsc2lnbmVkIGNoYXIsZmxvYXQpCi0rREVGVU5fMihjaGFyX3RvX2Zsb2F0LHNpZ25lZCBjaGFyLGZsb2F0LGNvcHlfY2hhcl90b19mbG9hdCkKLSAjZW5kaWYgLyogU0xBTkdfSEFTX0ZMT0FUICovCi0gI2lmIFNMQU5HX0hBU19GTE9BVAotLURFRlVOXzEoY29weV9jaGFyX3RvX2RvdWJsZSxjaGFyLGRvdWJsZSkKLS1ERUZVTl8yKGNoYXJfdG9fZG91YmxlLGNoYXIsZG91YmxlLGNvcHlfY2hhcl90b19kb3VibGUpCi0rREVGVU5fMShjb3B5X2NoYXJfdG9fZG91YmxlLHNpZ25lZCBjaGFyLGRvdWJsZSkKLStERUZVTl8yKGNoYXJfdG9fZG91YmxlLHNpZ25lZCBjaGFyLGRvdWJsZSxjb3B5X2NoYXJfdG9fZG91YmxlKQotICNlbmRpZiAvKiBTTEFOR19IQVNfRkxPQVQgKi8KLSAjaWYgZGVmaW5lZChIQVZFX0xPTkdfRE9VQkxFKQotLURFRlVOXzEoY29weV9jaGFyX3RvX2xkb3VibGUsY2hhcixsb25nIGRvdWJsZSkKLS1ERUZVTl8yKGNoYXJfdG9fbGRvdWJsZSxjaGFyLGxvbmcgZG91YmxlLGNvcHlfY2hhcl90b19sZG91YmxlKQotK0RFRlVOXzEoY29weV9jaGFyX3RvX2xkb3VibGUsc2lnbmVkIGNoYXIsbG9uZyBkb3VibGUpCi0rREVGVU5fMihjaGFyX3RvX2xkb3VibGUsc2lnbmVkIGNoYXIsbG9uZyBkb3VibGUsY29weV9jaGFyX3RvX2xkb3VibGUpCi0gI2VuZGlmIC8qIGRlZmluZWQoSEFWRV9MT05HX0RPVUJMRSkgKi8KLSAjaWYgU0xBTkdfSEFTX0ZMT0FUCi0tVE9fRE9VQkxFX0ZVTihjaGFyX3RvX29uZV9kb3VibGUsY2hhcikKLStUT19ET1VCTEVfRlVOKGNoYXJfdG9fb25lX2RvdWJsZSxzaWduZWQgY2hhcikKLSAjZW5kaWYKLSAKLSAvKiAtLS0tLS0tLS0tLS0gdW5zaWduZWQgY2hhciAtLS0tLS0tLS0tICovCi1AQCAtODIsNyArODIsNyBAQCBUT19ET1VCTEVfRlVOKHVjaGFyX3RvX29uZV9kb3VibGUsdW5zaWduCi0gI2VuZGlmCi0gCi0gLyogLS0tLS0tLS0tLS0tIHNob3J0IC0tLS0tLS0tLS0gKi8KLS1ERUZVTl8xKGNvcHlfc2hvcnRfdG9fY2hhcixzaG9ydCxjaGFyKQotK0RFRlVOXzEoY29weV9zaG9ydF90b19jaGFyLHNob3J0LHNpZ25lZCBjaGFyKQotICNkZWZpbmUgc2hvcnRfdG9fY2hhcglOVUxMCi0gREVGVU5fMShjb3B5X3Nob3J0X3RvX3VjaGFyLHNob3J0LHVuc2lnbmVkIGNoYXIpCi0gI2RlZmluZSBzaG9ydF90b191Y2hhcglOVUxMCi1AQCAtMTIzLDcgKzEyMyw3IEBAIFRPX0RPVUJMRV9GVU4oc2hvcnRfdG9fb25lX2RvdWJsZSxzaG9ydCkKLSAjZW5kaWYKLSAKLSAvKiAtLS0tLS0tLS0tLS0gdW5zaWduZWQgc2hvcnQgLS0tLS0tLS0tLSAqLwotLURFRlVOXzEoY29weV91c2hvcnRfdG9fY2hhcix1bnNpZ25lZCBzaG9ydCxjaGFyKQotK0RFRlVOXzEoY29weV91c2hvcnRfdG9fY2hhcix1bnNpZ25lZCBzaG9ydCxzaWduZWQgY2hhcikKLSAjZGVmaW5lIHVzaG9ydF90b19jaGFyCU5VTEwKLSBERUZVTl8xKGNvcHlfdXNob3J0X3RvX3VjaGFyLHVuc2lnbmVkIHNob3J0LHVuc2lnbmVkIGNoYXIpCi0gI2RlZmluZSB1c2hvcnRfdG9fdWNoYXIJTlVMTAotQEAgLTE2NCw3ICsxNjQsNyBAQCBUT19ET1VCTEVfRlVOKHVzaG9ydF90b19vbmVfZG91YmxlLHVuc2lnCi0gI2VuZGlmCi0gCi0gLyogLS0tLS0tLS0tLS0tIGludCAtLS0tLS0tLS0tICovCi0tREVGVU5fMShjb3B5X2ludF90b19jaGFyLGludCxjaGFyKQotK0RFRlVOXzEoY29weV9pbnRfdG9fY2hhcixpbnQsc2lnbmVkIGNoYXIpCi0gI2RlZmluZSBpbnRfdG9fY2hhcglOVUxMCi0gREVGVU5fMShjb3B5X2ludF90b191Y2hhcixpbnQsdW5zaWduZWQgY2hhcikKLSAjZGVmaW5lIGludF90b191Y2hhcglOVUxMCi1AQCAtMjA1LDcgKzIwNSw3IEBAIFRPX0RPVUJMRV9GVU4oaW50X3RvX29uZV9kb3VibGUsaW50KQotICNlbmRpZgotIAotIC8qIC0tLS0tLS0tLS0tLSB1bnNpZ25lZCBpbnQgLS0tLS0tLS0tLSAqLwotLURFRlVOXzEoY29weV91aW50X3RvX2NoYXIsdW5zaWduZWQgaW50LGNoYXIpCi0rREVGVU5fMShjb3B5X3VpbnRfdG9fY2hhcix1bnNpZ25lZCBpbnQsc2lnbmVkIGNoYXIpCi0gI2RlZmluZSB1aW50X3RvX2NoYXIJTlVMTAotIERFRlVOXzEoY29weV91aW50X3RvX3VjaGFyLHVuc2lnbmVkIGludCx1bnNpZ25lZCBjaGFyKQotICNkZWZpbmUgdWludF90b191Y2hhcglOVUxMCi1AQCAtMjQ2LDcgKzI0Niw3IEBAIFRPX0RPVUJMRV9GVU4odWludF90b19vbmVfZG91YmxlLHVuc2lnbmUKLSAjZW5kaWYKLSAKLSAvKiAtLS0tLS0tLS0tLS0gbG9uZyAtLS0tLS0tLS0tICovCi0tREVGVU5fMShjb3B5X2xvbmdfdG9fY2hhcixsb25nLGNoYXIpCi0rREVGVU5fMShjb3B5X2xvbmdfdG9fY2hhcixsb25nLHNpZ25lZCBjaGFyKQotICNkZWZpbmUgbG9uZ190b19jaGFyCU5VTEwKLSBERUZVTl8xKGNvcHlfbG9uZ190b191Y2hhcixsb25nLHVuc2lnbmVkIGNoYXIpCi0gI2RlZmluZSBsb25nX3RvX3VjaGFyCU5VTEwKLUBAIC0yODcsNyArMjg3LDcgQEAgVE9fRE9VQkxFX0ZVTihsb25nX3RvX29uZV9kb3VibGUsbG9uZykKLSAjZW5kaWYKLSAKLSAvKiAtLS0tLS0tLS0tLS0gdW5zaWduZWQgbG9uZyAtLS0tLS0tLS0tICovCi0tREVGVU5fMShjb3B5X3Vsb25nX3RvX2NoYXIsdW5zaWduZWQgbG9uZyxjaGFyKQotK0RFRlVOXzEoY29weV91bG9uZ190b19jaGFyLHVuc2lnbmVkIGxvbmcsc2lnbmVkIGNoYXIpCi0gI2RlZmluZSB1bG9uZ190b19jaGFyCU5VTEwKLSBERUZVTl8xKGNvcHlfdWxvbmdfdG9fdWNoYXIsdW5zaWduZWQgbG9uZyx1bnNpZ25lZCBjaGFyKQotICNkZWZpbmUgdWxvbmdfdG9fdWNoYXIJTlVMTAotQEAgLTMyOSw3ICszMjksNyBAQCBUT19ET1VCTEVfRlVOKHVsb25nX3RvX29uZV9kb3VibGUsdW5zaWduCi0gCi0gLyogLS0tLS0tLS0tLS0tIGxvbmcgbG9uZyAtLS0tLS0tLS0tICovCi0gI2lmIGRlZmluZWQoSEFWRV9MT05HX0xPTkcpCi0tREVGVU5fMShjb3B5X2xsb25nX3RvX2NoYXIsbG9uZyBsb25nLGNoYXIpCi0rREVGVU5fMShjb3B5X2xsb25nX3RvX2NoYXIsbG9uZyBsb25nLHNpZ25lZCBjaGFyKQotICNkZWZpbmUgbGxvbmdfdG9fY2hhcglOVUxMCi0gREVGVU5fMShjb3B5X2xsb25nX3RvX3VjaGFyLGxvbmcgbG9uZyx1bnNpZ25lZCBjaGFyKQotICNkZWZpbmUgbGxvbmdfdG9fdWNoYXIJTlVMTAotQEAgLTM3Miw3ICszNzIsNyBAQCBUT19ET1VCTEVfRlVOKGxsb25nX3RvX29uZV9kb3VibGUsbG9uZyBsCi0gCi0gLyogLS0tLS0tLS0tLS0tIHVuc2lnbmVkIGxvbmcgbG9uZyAtLS0tLS0tLS0tICovCi0gI2lmIGRlZmluZWQoSEFWRV9MT05HX0xPTkcpCi0tREVGVU5fMShjb3B5X3VsbG9uZ190b19jaGFyLHVuc2lnbmVkIGxvbmcgbG9uZyxjaGFyKQotK0RFRlVOXzEoY29weV91bGxvbmdfdG9fY2hhcix1bnNpZ25lZCBsb25nIGxvbmcsc2lnbmVkIGNoYXIpCi0gI2RlZmluZSB1bGxvbmdfdG9fY2hhcglOVUxMCi0gREVGVU5fMShjb3B5X3VsbG9uZ190b191Y2hhcix1bnNpZ25lZCBsb25nIGxvbmcsdW5zaWduZWQgY2hhcikKLSAjZGVmaW5lIHVsbG9uZ190b191Y2hhcglOVUxMCi1AQCAtNDE1LDcgKzQxNSw3IEBAIFRPX0RPVUJMRV9GVU4odWxsb25nX3RvX29uZV9kb3VibGUsdW5zaWcKLSAKLSAvKiAtLS0tLS0tLS0tLS0gZmxvYXQgLS0tLS0tLS0tLSAqLwotICNpZiBTTEFOR19IQVNfRkxPQVQKLS1ERUZVTl8xKGNvcHlfZmxvYXRfdG9fY2hhcixmbG9hdCxjaGFyKQotK0RFRlVOXzEoY29weV9mbG9hdF90b19jaGFyLGZsb2F0LHNpZ25lZCBjaGFyKQotICNkZWZpbmUgZmxvYXRfdG9fY2hhcglOVUxMCi0gREVGVU5fMShjb3B5X2Zsb2F0X3RvX3VjaGFyLGZsb2F0LHVuc2lnbmVkIGNoYXIpCi0gI2RlZmluZSBmbG9hdF90b191Y2hhcglOVUxMCi1AQCAtNDU4LDcgKzQ1OCw3IEBAIFRPX0RPVUJMRV9GVU4oZmxvYXRfdG9fb25lX2RvdWJsZSxmbG9hdCkKLSAKLSAvKiAtLS0tLS0tLS0tLS0gZG91YmxlIC0tLS0tLS0tLS0gKi8KLSAjaWYgU0xBTkdfSEFTX0ZMT0FUCi0tREVGVU5fMShjb3B5X2RvdWJsZV90b19jaGFyLGRvdWJsZSxjaGFyKQotK0RFRlVOXzEoY29weV9kb3VibGVfdG9fY2hhcixkb3VibGUsc2lnbmVkIGNoYXIpCi0gI2RlZmluZSBkb3VibGVfdG9fY2hhcglOVUxMCi0gREVGVU5fMShjb3B5X2RvdWJsZV90b191Y2hhcixkb3VibGUsdW5zaWduZWQgY2hhcikKLSAjZGVmaW5lIGRvdWJsZV90b191Y2hhcglOVUxMCi1AQCAtNTAxLDcgKzUwMSw3IEBAIFRPX0RPVUJMRV9GVU4oZG91YmxlX3RvX29uZV9kb3VibGUsZG91YmwKLSAKLSAvKiAtLS0tLS0tLS0tLS0gbG9uZyBkb3VibGUgLS0tLS0tLS0tLSAqLwotICNpZiBkZWZpbmVkKEhBVkVfTE9OR19ET1VCTEUpCi0tREVGVU5fMShjb3B5X2xkb3VibGVfdG9fY2hhcixsb25nIGRvdWJsZSxjaGFyKQotK0RFRlVOXzEoY29weV9sZG91YmxlX3RvX2NoYXIsbG9uZyBkb3VibGUsc2lnbmVkIGNoYXIpCi0gI2RlZmluZSBsZG91YmxlX3RvX2NoYXIJTlVMTAotIERFRlVOXzEoY29weV9sZG91YmxlX3RvX3VjaGFyLGxvbmcgZG91YmxlLHVuc2lnbmVkIGNoYXIpCi0gI2RlZmluZSBsZG91YmxlX3RvX3VjaGFyCU5VTEwKLUBAIC01NDUsNyArNTQ1LDcgQEAgVE9fRE9VQkxFX0ZVTihsZG91YmxlX3RvX29uZV9kb3VibGUsbG9uZwotICNpZiBTTEFOR19IQVNfRkxPQVQKLSBzdGF0aWMgVG9fRG91YmxlX0Z1bl9UYWJsZV9UeXBlIFRvX0RvdWJsZV9GdW5fVGFibGUgW01BWF9BUklUSE1FVElDX1RZUEVTXSA9Ci0gewotLSAgIHtzaXplb2YoY2hhciksIGNoYXJfdG9fb25lX2RvdWJsZX0sCi0rICAge3NpemVvZihzaWduZWQgY2hhciksIGNoYXJfdG9fb25lX2RvdWJsZX0sCi0gICAge3NpemVvZih1bnNpZ25lZCBjaGFyKSwgdWNoYXJfdG9fb25lX2RvdWJsZX0sCi0gICAge3NpemVvZihzaG9ydCksIHNob3J0X3RvX29uZV9kb3VibGV9LAotICAgIHtzaXplb2YodW5zaWduZWQgc2hvcnQpLCB1c2hvcnRfdG9fb25lX2RvdWJsZX0sCi1AQCAtNTgzLDcgKzU4Myw3IEBAIHN0YXRpYyBUb19Eb3VibGVfRnVuX1RhYmxlX1R5cGUgVG9fRG91YmwKLSAKLSBzdGF0aWMgQmluYXJ5X01hdHJpeF9UeXBlIEJpbmFyeV9NYXRyaXggW01BWF9BUklUSE1FVElDX1RZUEVTXVtNQVhfQVJJVEhNRVRJQ19UWVBFU10gPQotIHsKLS0gICAvKiBjaGFyICovCi0rICAgLyogc2lnbmVkIGNoYXIgKi8KLSAgICB7Ci0gICAgICB7KEZWT0lEX1NUQVIpY29weV9jaGFyX3RvX2NoYXIsIGNoYXJfdG9fY2hhcn0sCi0gICAgICB7KEZWT0lEX1NUQVIpY29weV9jaGFyX3RvX3VjaGFyLCBjaGFyX3RvX3VjaGFyfSwKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvc2xhbmcvc2xhbmcvZml4LWNoZWNrLXBjcmUucGF0Y2ggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3NsYW5nL3NsYW5nL2ZpeC1jaGVjay1wY3JlLnBhdGNoCmluZGV4IDBjMTU1M2EuLmEwZWMwZmYgMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvc2xhbmcvc2xhbmcvZml4LWNoZWNrLXBjcmUucGF0Y2gKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9zbGFuZy9zbGFuZy9maXgtY2hlY2stcGNyZS5wYXRjaApAQCAtMTEsMTQgKzExLDEzIEBACiBVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUKIFNpZ25lZC1vZmYtYnk6IFJveS5MaSA8cm9uZ3FpbmcubGlAd2luZHJpdmVyLmNvbT4KIC0tLQotIGNvbmZpZ3VyZSB8ICAgNjAgKysrKysrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gMSBmaWxlcyBjaGFuZ2VkLCA2IGluc2VydGlvbnMoKyksIDU0IGRlbGV0aW9ucygtKQorIGNvbmZpZ3VyZSB8ICAgNzIgKysrKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAxIGZpbGUgY2hhbmdlZCwgNiBpbnNlcnRpb25zKCspLCA2NiBkZWxldGlvbnMoLSkKIAogZGlmZiAtLWdpdCBhL2NvbmZpZ3VyZSBiL2NvbmZpZ3VyZQotaW5kZXggZjE1ODZjMy4uZDIyODE0ZiAxMDA3NTUKIC0tLSBhL2NvbmZpZ3VyZQogKysrIGIvY29uZmlndXJlCi1AQCAtNjk5MSw2ICs2OTkxLDcgQEAgJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIHRoZSBwY3JlIGxpYnJhcnkgYW5kIGhlYWRlciBmaWxlcyAuLi4gIiA+JjY7IH0KK0BAIC03MTkxLDYgKzcxOTEsNyBAQCAkYXNfZWNob19uICJjaGVja2luZyBmb3IgdGhlIHBjcmUgbGlicmFyeSBhbmQgaGVhZGVyIGZpbGVzIC4uLiAiID4mNjsgfQogIAkgL3Vzci9pbmNsdWRlL3BjcmUsL3Vzci9saWIgXAogIAkgL3Vzci9wY3JlL2luY2x1ZGUsL3Vzci9wY3JlL2xpYiBcCiAgCSAvdXNyL2luY2x1ZGUsL3Vzci9saWIgXApAQCAtMjYsNyArMjUsNyBAQAogIAkgL29wdC9pbmNsdWRlL3BjcmUsL29wdC9saWIgXAogIAkgL29wdC9wY3JlL2luY2x1ZGUsL29wdC9wY3JlL2xpYiBcCiAgCSAvb3B0L2luY2x1ZGUsL29wdC9saWIiCi1AQCAtNzAyMSwxNCArNzAyMiwxNCBAQCAkYXNfZWNob19uICJjaGVja2luZyBmb3IgdGhlIHBjcmUgbGlicmFyeSBhbmQgaGVhZGVyIGZpbGVzIC4uLiAiID4mNjsgfQorQEAgLTcyMjEsMTQgKzcyMjIsMTQgQEAgJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIHRoZSBwY3JlIGxpYnJhcnkgYW5kIGhlYWRlciBmaWxlcyAuLi4gIiA+JjY7IH0KICAgICAgICAgIHhpbmNkaXI9YGVjaG8gJGluY2x1ZGVfYW5kX2xpYiB8IHRyICcsJyAnICcgfCBhd2sgJ3twcmludCAkMX0nYAogIAl4bGliZGlyPWBlY2hvICRpbmNsdWRlX2FuZF9saWIgfCB0ciAnLCcgJyAnIHwgYXdrICd7cHJpbnQgJDJ9J2AKICAJZm91bmQ9MApAQCAtNDUsNyArNDQsNyBAQAogIAkgICAgICBqZF93aXRoX3BjcmVfbGlicmFyeT0ieWVzIgogIAkgICAgICBmb3VuZD0xCiAgCSAgICAgIGJyZWFrCi1AQCAtNzA1NCw1NiArNzA1NSw3IEBAICRhc19lY2hvICJ5ZXM6ICRqZF9wY3JlX2xpYnJhcnlfZGlyIGFuZCAkamRfcGNyZV9pbmNsdWRlX2RpciIgPiY2OyB9CitAQCAtNzI1NSw2OCArNzI1NSw3IEBAICRhc19lY2hvICJ5ZXM6ICRqZF9wY3JlX2xpYnJhcnlfZGlyIGFuZCAkamRfcGNyZV9pbmNsdWRlX2RpciIgPiY2OyB9CiAgICAgIHRoZW4KICAgICAgICBQQ1JFX0xJQj0iIgogICAgICBlbHNlCkBAIC03NCw3ICs3Myw3IEBACiAtICAgICAgZmkKIC0gICAgZmkKIC0gIDs7Ci0tICAqb3NmKnwqb3BlbmJzZCopCistICAqb3NmKnwqb3BlbmJzZCp8KmZyZWVic2QqKQogLSAgICBpZiB0ZXN0ICJYJEdDQyIgPSBYeWVzCiAtICAgIHRoZW4KIC0gICAgICBSUEFUSD0iLVdsLC1ycGF0aCwiCkBAIC05NSw3ICs5NCwxOSBAQAogLSAgICAgIFJQQVRIPSIkUlBBVEgkamRfcGNyZV9saWJyYXJ5X2RpciIKIC0gICAgZmkKIC0gIGVsc2UKLS0gICAgUlBBVEg9IiRSUEFUSDokamRfcGNyZV9saWJyYXJ5X2RpciIKKy0gICAgX2FscmVhZHlfdGhlcmU9MAorLSAgICBmb3IgWCBpbiBgZWNobyAkUlBBVEggfCBzZWQgJ3MvOi8gL2cnYAorLSAgICBkbworLSAgICAgIGlmIHRlc3QgIiRYIiA9ICIkamRfcGNyZV9saWJyYXJ5X2RpciIKKy0gICAgICB0aGVuCistICAgICAgICBfYWxyZWFkeV90aGVyZT0xCistCWJyZWFrCistICAgICAgZmkKKy0gICAgZG9uZQorLSAgICBpZiB0ZXN0ICRfYWxyZWFkeV90aGVyZSA9IDAKKy0gICAgdGhlbgorLSAgICAgIFJQQVRIPSIkUlBBVEg6JGpkX3BjcmVfbGlicmFyeV9kaXIiCistICAgIGZpCiAtICBmaQogLWZpCiAtCkBAIC0xMDMsNiArMTE0LDMgQEAKICAgICAgZmkKICAKICAgICAgUENSRV9JTkM9LUkkamRfcGNyZV9pbmNsdWRlX2RpcgotLS0gCi0xLjcuNC4xCi0KZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvc2xhbmcvc2xhbmcvcnBhdGhmaXgucGF0Y2ggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3NsYW5nL3NsYW5nL3JwYXRoZml4LnBhdGNoCmluZGV4IDUwY2FjOTIuLmY4MmE1MzEgMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvc2xhbmcvc2xhbmcvcnBhdGhmaXgucGF0Y2gKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9zbGFuZy9zbGFuZy9ycGF0aGZpeC5wYXRjaApAQCAtMTAsNyArMTAsNyBAQAogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogLS0tIHNsYW5nLTIuMi40Lm9yaWcvY29uZmlndXJlCTIwMTItMDMtMTQgMjM6NDA6MDEuMjgzNTYwNjc5ICswMDAwCiArKysgc2xhbmctMi4yLjQvY29uZmlndXJlCTIwMTItMDMtMTQgMjM6NDE6MTguMDIzNTU4OTAwICswMDAwCi1AQCAtNjA4MSw1NiArNjA4MSw3IEBACitAQCAtNjI0Niw2OCArNjI0Niw3IEBAIGVzYWMKICBFTEZfQ0ZMQUdTPSIkRUxGX0NGTEFHUyAkSUVFRV9DRkxBR1MiCiAgQ0ZMQUdTPSIkQ0ZMQUdTICRJRUVFX0NGTEFHUyIKICAKQEAgLTM5LDcgKzM5LDcgQEAKIC0gICAgICBmaQogLSAgICBmaQogLSAgOzsKLS0gICpvc2YqfCpvcGVuYnNkKikKKy0gICpvc2YqfCpvcGVuYnNkKnwqZnJlZWJzZCopCiAtICAgIGlmIHRlc3QgIlgkR0NDIiA9IFh5ZXMKIC0gICAgdGhlbgogLSAgICAgIFJQQVRIPSItV2wsLXJwYXRoLCIKQEAgLTYwLDcgKzYwLDE5IEBACiAtICAgICAgUlBBVEg9IiRSUEFUSCRsaWJkaXIiCiAtICAgIGZpCiAtICBlbHNlCi0tICAgIFJQQVRIPSIkUlBBVEg6JGxpYmRpciIKKy0gICAgX2FscmVhZHlfdGhlcmU9MAorLSAgICBmb3IgWCBpbiBgZWNobyAkUlBBVEggfCBzZWQgJ3MvOi8gL2cnYAorLSAgICBkbworLSAgICAgIGlmIHRlc3QgIiRYIiA9ICIkbGliZGlyIgorLSAgICAgIHRoZW4KKy0gICAgICAgIF9hbHJlYWR5X3RoZXJlPTEKKy0JYnJlYWsKKy0gICAgICBmaQorLSAgICBkb25lCistICAgIGlmIHRlc3QgJF9hbHJlYWR5X3RoZXJlID0gMAorLSAgICB0aGVuCistICAgICAgUlBBVEg9IiRSUEFUSDokbGliZGlyIgorLSAgICBmaQogLSAgZmkKIC1maQogLQpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9zbGFuZy9zbGFuZy9zbGFuZy1maXgtdGhlLWljb252LWV4aXN0ZW5jZS1jaGVja2luZy5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvc2xhbmcvc2xhbmcvc2xhbmctZml4LXRoZS1pY29udi1leGlzdGVuY2UtY2hlY2tpbmcucGF0Y2gKaW5kZXggOTU4ZmU5OC4uODUwNTUxZSAxMDA2NDQKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9zbGFuZy9zbGFuZy9zbGFuZy1maXgtdGhlLWljb252LWV4aXN0ZW5jZS1jaGVja2luZy5wYXRjaAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3NsYW5nL3NsYW5nL3NsYW5nLWZpeC10aGUtaWNvbnYtZXhpc3RlbmNlLWNoZWNraW5nLnBhdGNoCkBAIC0xOSwxNCArMTksMTQgQEAKIAogU2lnbmVkLW9mZi1ieTogWmhlbmcgSnVubGluZyA8emhlbmdqdW5saW5nQGh1YXdlaS5jb20+CiAtLS0KLSBjb25maWd1cmUgfCA2MCArKysrKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAxIGZpbGUgY2hhbmdlZCwgNiBpbnNlcnRpb25zKCspLCA1NCBkZWxldGlvbnMoLSkKKyBjb25maWd1cmUgfCAgIDcyICsrKysrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgMSBmaWxlIGNoYW5nZWQsIDYgaW5zZXJ0aW9ucygrKSwgNjYgZGVsZXRpb25zKC0pCiAKIGRpZmYgLS1naXQgYS9jb25maWd1cmUgYi9jb25maWd1cmUKLWluZGV4IDdhOTYyNTYuLjkxNjMyZjMgMTAwNzU1CitpbmRleCBmYTM5NWZmLi43ZmE3NjljIDEwMDc1NQogLS0tIGEvY29uZmlndXJlCiArKysgYi9jb25maWd1cmUKLUBAIC03OTA5LDYgKzc5MDksNyBAQCAkYXNfZWNob19uICJjaGVja2luZyBmb3IgdGhlIGljb252IGxpYnJhcnkgYW5kIGhlYWRlciBmaWxlcyAuLi4gIiA+JjY7IH0KK0BAIC04MjU5LDYgKzgyNTksNyBAQCAkYXNfZWNob19uICJjaGVja2luZyBmb3IgdGhlIGljb252IGxpYnJhcnkgYW5kIGhlYWRlciBmaWxlcyAuLi4gIiA+JjY7IH0KICAJIC91c3IvaW5jbHVkZS9pY29udiwvdXNyL2xpYiBcCiAgCSAvdXNyL2ljb252L2luY2x1ZGUsL3Vzci9pY29udi9saWIgXAogIAkgL3Vzci9pbmNsdWRlLC91c3IvbGliIFwKQEAgLTM0LDcgKzM0LDcgQEAKICAJIC9vcHQvaW5jbHVkZS9pY29udiwvb3B0L2xpYiBcCiAgCSAvb3B0L2ljb252L2luY2x1ZGUsL29wdC9pY29udi9saWIgXAogIAkgL29wdC9pbmNsdWRlLC9vcHQvbGliIgotQEAgLTc5MzksMTQgKzc5NDAsMTQgQEAgJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIHRoZSBpY29udiBsaWJyYXJ5IGFuZCBoZWFkZXIgZmlsZXMgLi4uICIgPiY2OyB9CitAQCAtODI4OSwxNCArODI5MCwxNCBAQCAkYXNfZWNob19uICJjaGVja2luZyBmb3IgdGhlIGljb252IGxpYnJhcnkgYW5kIGhlYWRlciBmaWxlcyAuLi4gIiA+JjY7IH0KICAgICAgICAgIHhpbmNkaXI9YGVjaG8gJGluY2x1ZGVfYW5kX2xpYiB8IHRyICcsJyAnICcgfCBhd2sgJ3twcmludCAkMX0nYAogIAl4bGliZGlyPWBlY2hvICRpbmNsdWRlX2FuZF9saWIgfCB0ciAnLCcgJyAnIHwgYXdrICd7cHJpbnQgJDJ9J2AKICAJZm91bmQ9MApAQCAtNTMsNyArNTMsNyBAQAogIAkgICAgICBqZF93aXRoX2ljb252X2xpYnJhcnk9InllcyIKICAJICAgICAgZm91bmQ9MQogIAkgICAgICBicmVhawotQEAgLTc5NzIsNTYgKzc5NzMsNyBAQCAkYXNfZWNobyAieWVzOiAkamRfaWNvbnZfbGlicmFyeV9kaXIgYW5kICRqZF9pY29udl9pbmNsdWRlX2RpciIgPiY2OyB9CitAQCAtODIwMSw2OCArODIwMSw3IEBAICRhc19lY2hvICJ5ZXM6ICRqZF9pY29udl9saWJyYXJ5X2RpciBhbmQgJGpkX2ljb252X2luY2x1ZGVfZGlyIiA+JjY7IH0KICAgICAgdGhlbgogICAgICAgIElDT05WX0xJQj0iIgogICAgICBlbHNlCkBAIC04Miw3ICs4Miw3IEBACiAtICAgICAgZmkKIC0gICAgZmkKIC0gIDs7Ci0tICAqb3NmKnwqb3BlbmJzZCopCistICAqb3NmKnwqb3BlbmJzZCp8KmZyZWVic2QqKQogLSAgICBpZiB0ZXN0ICJYJEdDQyIgPSBYeWVzCiAtICAgIHRoZW4KIC0gICAgICBSUEFUSD0iLVdsLC1ycGF0aCwiCkBAIC0xMDMsNyArMTAzLDE5IEBACiAtICAgICAgUlBBVEg9IiRSUEFUSCRqZF9pY29udl9saWJyYXJ5X2RpciIKIC0gICAgZmkKIC0gIGVsc2UKLS0gICAgUlBBVEg9IiRSUEFUSDokamRfaWNvbnZfbGlicmFyeV9kaXIiCistICAgIF9hbHJlYWR5X3RoZXJlPTAKKy0gICAgZm9yIFggaW4gYGVjaG8gJFJQQVRIIHwgc2VkICdzLzovIC9nJ2AKKy0gICAgZG8KKy0gICAgICBpZiB0ZXN0ICIkWCIgPSAiJGpkX2ljb252X2xpYnJhcnlfZGlyIgorLSAgICAgIHRoZW4KKy0gICAgICAgIF9hbHJlYWR5X3RoZXJlPTEKKy0JYnJlYWsKKy0gICAgICBmaQorLSAgICBkb25lCistICAgIGlmIHRlc3QgJF9hbHJlYWR5X3RoZXJlID0gMAorLSAgICB0aGVuCistICAgICAgUlBBVEg9IiRSUEFUSDokamRfaWNvbnZfbGlicmFyeV9kaXIiCistICAgIGZpCiAtICBmaQogLWZpCiAtCkBAIC0xMTEsNiArMTIzLDMgQEAKICAgICAgZmkKICAKICAgICAgSUNPTlZfSU5DPS1JJGpkX2ljb252X2luY2x1ZGVfZGlyCi0tLSAKLTEuOC4zLjQKLQpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9zbGFuZy9zbGFuZy9zcHJpbnRmLWJ1Zy1jb25jZXJuaW5nLTgtYml0LWNoYXJhY3RlcnMucGF0Y2ggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3NsYW5nL3NsYW5nL3NwcmludGYtYnVnLWNvbmNlcm5pbmctOC1iaXQtY2hhcmFjdGVycy5wYXRjaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDIwMDAxYi4uMDAwMDAwMAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3NsYW5nL3NsYW5nL3NwcmludGYtYnVnLWNvbmNlcm5pbmctOC1iaXQtY2hhcmFjdGVycy5wYXRjaAorKysgL2Rldi9udWxsCkBAIC0xLDQyICswLDAgQEAKLVVwc3RyZWFtLVN0YXR1czogQmFja3BvcnQKLQotRnJvbSAzYTA1ZDFhOTIwMTQwZTlmMmM3Mjc5MWMxMmY2NjQyMTNmZWI0NmRmIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQotRnJvbTogTWFuZnJlZCBIYW5rZSA8TWFuZnJlZC5IYW5rZUB0bmd0ZWNoLmNvbT4KLURhdGU6IFRodSwgMjAgSnVuIDIwMTMgMTA6MjQ6MTIgKzAyMDAKLVN1YmplY3Q6IFtQQVRDSF0gc3ByaW50ZiBidWcgKGNvbmNlcm5pbmcgJWMgZm9yIDgtYml0IGNoYXJhY3RlciBpbiBub24tVVRGOAotIG1vZGUpIGZpeGVkCi0KLWNoYXIgKnN0ciBwb2ludHMgdG8gU0x1Y2hhcl9UeXBlIHV0ZjhfYnVmW10sIHdoaWNoIGhhZCB0b28gc21hbGwgc2NvcGUKLQotc3JjL3Rlc3Qvc3Ryb3BzLnNsIGZhaWxlZCBpbiB0aGUgZm9sbG93aW5nIGVudmlyb25tZW50OgotIC0gY29tcGlsZXI6ICBnY2MgKERlYmlhbiA0LjcuMi01KSA0LjcuMgotIC0gQ0ZMQUdTOiAgICAtZyAtTzIKLSAtIGxpYmM6ICAgICAgR05VIEMgTGlicmFyeSAoRGViaWFuIEVHTElCQyAyLjEzLTM4KSBzdGFibGUgcmVsZWFzZSB2ZXJzaW9uIDIuMTMKLSAtIGtlcm5lbDogICAgMy4yLjAtNC02ODYtcGFlICMxIFNNUCBEZWJpYW4gMy4yLjM5LTIgaTY4NiBHTlUvTGludXgKLS0tLQotIHNyYy9zbHN0cm9wcy5jIHwgICAgMiArLQotIDEgZmlsZSBjaGFuZ2VkLCAxIGluc2VydGlvbigrKSwgMSBkZWxldGlvbigtKQotCi1kaWZmIC0tZ2l0IGEvc3JjL3Nsc3Ryb3BzLmMgYi9zcmMvc2xzdHJvcHMuYwotaW5kZXggY2U2YWNiMC4uY2JiYmIwMSAxMDA2NDQKLS0tLSBhL3NyYy9zbHN0cm9wcy5jCi0rKysgYi9zcmMvc2xzdHJvcHMuYwotQEAgLTE4ODQsNiArMTg4NCw3IEBAIHN0YXRpYyBjaGFyICpTTGRvX3NwcmludGYgKGNoYXIgKmZtdCkgLyp7e3sqLwotICNlbmRpZgotICAgIHVuc2lnbmVkIGNoYXIgdWNoOwotICAgIGludCB1c2VfbG9uZyA9IDAsIHVzZV9hbHRfZm9ybWF0ID0gMDsKLSsgICBTTHVjaGFyX1R5cGUgdXRmOF9idWZbU0xVVEY4X01BWF9NQkxFTisxXTsKLSAKLSAgICB3aGlsZSAoMSkKLSAgICAgIHsKLUBAIC0yMDcxLDcgKzIwNzIsNiBAQCBzdGF0aWMgY2hhciAqU0xkb19zcHJpbnRmIChjaGFyICpmbXQpIC8qe3t7Ki8KLSAjZW5kaWYKLSAJICAgICAgIHsKLSAJCSAgU0x3Y2hhcl9UeXBlIHdjOwotLQkJICBTTHVjaGFyX1R5cGUgdXRmOF9idWZbU0xVVEY4X01BWF9NQkxFTisxXTsKLSAKLSAJCSAgaWYgKC0xID09IFNMYW5nX3BvcF93Y2hhciAoJndjKSkKLSAJCSAgICByZXR1cm4gb3V0OwotLS0gCi0xLjcuOS41Ci0KZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvc2xhbmcvc2xhbmdfMi4yLjQuYmIgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3NsYW5nL3NsYW5nXzIuMi40LmJiCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyMzdlOWYyLi4wMDAwMDAwCi0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvc2xhbmcvc2xhbmdfMi4yLjQuYmIKKysrIC9kZXYvbnVsbApAQCAtMSw1NCArMCwwIEBACi1TVU1NQVJZID0gIlRoZSBzaGFyZWQgbGlicmFyeSBmb3IgdGhlIFMtTGFuZyBleHRlbnNpb24gbGFuZ3VhZ2UiCi0KLURFU0NSSVBUSU9OID0gIlMtTGFuZyBpcyBhbiBpbnRlcnByZXRlZCBsYW5ndWFnZSBhbmQgYSBwcm9ncmFtbWluZyBsaWJyYXJ5LiAgVGhlIFwKLVMtTGFuZyBsYW5ndWFnZSB3YXMgZGVzaWduZWQgc28gdGhhdCBpdCBjYW4gYmUgZWFzaWx5IGVtYmVkZGVkIGludG8gXAotYSBwcm9ncmFtIHRvIHByb3ZpZGUgdGhlIHByb2dyYW0gd2l0aCBhIHBvd2VyZnVsIGV4dGVuc2lvbiBsYW5ndWFnZS4gXAotVGhlIFMtTGFuZyBsaWJyYXJ5LCBwcm92aWRlZCBpbiB0aGlzIHBhY2thZ2UsIHByb3ZpZGVzIHRoZSBTLUxhbmcgXAotZXh0ZW5zaW9uIGxhbmd1YWdlLiAgUy1MYW5nJ3Mgc3ludGF4IHJlc2VtYmxlcyBDLCB3aGljaCBtYWtlcyBpdCBlYXN5IFwKLXRvIHJlY29kZSBTLUxhbmcgcHJvY2VkdXJlcyBpbiBDIGlmIHlvdSBuZWVkIHRvLiIKLQotSE9NRVBBR0UgPSAiaHR0cDovL3d3dy5qZWRzb2Z0Lm9yZy9zbGFuZy8iCi1TRUNUSU9OID0gImxpYnMiCi1ERVBFTkRTID0gInBjcmUgbmN1cnNlcyIKLVBSID0gInIxMiIKLQotTElDRU5TRSA9ICJHUEx2MiIKLUxJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PWE1MmExOGE0NzJkNGY3ZTQ1NDc5YjA2NTYzNzE3YzAyIgotCi0KLVNSQ19VUkkgPSAiaHR0cDovL3d3dy5qZWRzb2Z0Lm9yZy9yZWxlYXNlcy9zbGFuZy9vbGQvc2xhbmctJHtQVn0udGFyLmJ6MiBcCi0gICAgICAgICAgIGZpbGU6Ly9ycGF0aGZpeC5wYXRjaCBcCi0gICAgICAgICAgIGZpbGU6Ly9maXgtY2hlY2stcGNyZS5wYXRjaCBcCi0gICAgICAgICAgIGZpbGU6Ly9jaGFuZ2UtY2hhci10eXBlLXRvLXNpZ25lZC1jaGFyLWluLW1hY3Jvcy5wYXRjaCBcCi0gICAgICAgICAgIGZpbGU6Ly9zcHJpbnRmLWJ1Zy1jb25jZXJuaW5nLTgtYml0LWNoYXJhY3RlcnMucGF0Y2ggXAotICAgICAgICAgICBmaWxlOi8vc2xhbmctZml4LXRoZS1pY29udi1leGlzdGVuY2UtY2hlY2tpbmcucGF0Y2ggXAotICAgICAgICAgICBmaWxlOi8vMDAwMS1GaXgtZXJyb3ItY29uZmxpY3RpbmctdHlwZXMtZm9yLXBvc2l4X2Nsb3NlLnBhdGNoIFwKLSAgICAgICAgICAiCi1VUFNUUkVBTV9DSEVDS19VUkkgPSAiaHR0cDovL3d3dy5qZWRzb2Z0Lm9yZy9yZWxlYXNlcy9zbGFuZy8iCi0KLWluaGVyaXQgYXV0b3Rvb2xzLWJyb2tlbnNlcAotCi1DTEVBTkJST0tFTiA9ICIxIgotCi1TUkNfVVJJW21kNXN1bV0gPSAiN2ZjZmQ0NDdlMzc4ZjA3ZGQwYzBiYWU2NzFmZTY0ODciCi1TUkNfVVJJW3NoYTI1NnN1bV0gPSAiOWE4MjU3YTlhMmE1NTA5OWFmODU4YjEzMzM4ZGM4ZjNhMDZkZDIwNjlmNDZmMGRmMmM5YzNiYjg0YTAxZDVkYiIKLQotRVhUUkFfT0VDT05GICs9ICIgLS13aXRob3V0LXogLS13aXRob3V0LXBuZyAtLXdpdGhvdXQtb25pZyAtLXgtaW5jbHVkZXM9JHtTVEFHSU5HX0RJUl9IT1NUfS91c3IvaW5jbHVkZS9YMTEgLS14LWxpYnJhcmllcz0ke1NUQUdJTkdfRElSX0hPU1R9L3Vzci9saWIiCi0KLWRvX2NvbmZpZ3VyZV9wcmVwZW5kKCkgewotICAgICMgc2xhbmcga2VlcHMgY29uZmlndXJlLmFjIGFuZCByZXN0IG9mIGF1dG9jb25mIGZpbGVzIGluIGF1dG9jb25mLyBkaXJlY3RvcnkKLSAgICAjIHdlIGhhdmUgdG8gZ28gdGhlcmUgdG8gYmUgYWJsZSB0byBydW4gZ251LWNvbmZpZ2l6ZSBjYXVzZSBpdCBleHBlY3RzIGNvbmZpZ3VyZS57aW4sYWN9Ci0gICAgIyB0byBiZSBwcmVzZW50LiBSZXN1bHRpbmcgZmlsZXMgbGFuZCBpbiBhdXRvY29uZi9hdXRvY29uZi8gc28gd2UgbmVlZCB0byBtb3ZlIHRoZW0uCi0gICAgY2QgJHtTfS9hdXRvY29uZiAmJiBnbnUtY29uZmlnaXplIC0tZm9yY2UgJiYgbXYgYXV0b2NvbmYvY29uZmlnLiogLgotICAgIGNkICR7Qn0KLX0KLQotZG9faW5zdGFsbCgpIHsKLQlvZV9ydW5tYWtlIGluc3RhbGwgREVTVERJUj0ke0R9IC1lICdJTlNUX0xJQl9ESVI9JHtTVEFHSU5HX0RJUl9IT1NUfS91c3IvbGliJwotfQotCi1GSUxFU18ke1BOfSArPSAiJHtsaWJkaXJ9LyR7QlBOfS92Mi9tb2R1bGVzLyAke2RhdGFkaXJ9L3Nsc2gvIgotCi1QQVJBTExFTF9NQUtFID0gIiIKLQotQkJDTEFTU0VYVEVORCA9ICJuYXRpdmUiCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3NsYW5nL3NsYW5nXzIuMy4wLmJiIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9zbGFuZy9zbGFuZ18yLjMuMC5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xN2VmYmJlCi0tLSAvZGV2L251bGwKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9zbGFuZy9zbGFuZ18yLjMuMC5iYgpAQCAtMCwwICsxLDUxIEBACitTVU1NQVJZID0gIlRoZSBzaGFyZWQgbGlicmFyeSBmb3IgdGhlIFMtTGFuZyBleHRlbnNpb24gbGFuZ3VhZ2UiCisKK0RFU0NSSVBUSU9OID0gIlMtTGFuZyBpcyBhbiBpbnRlcnByZXRlZCBsYW5ndWFnZSBhbmQgYSBwcm9ncmFtbWluZyBsaWJyYXJ5LiAgVGhlIFwKK1MtTGFuZyBsYW5ndWFnZSB3YXMgZGVzaWduZWQgc28gdGhhdCBpdCBjYW4gYmUgZWFzaWx5IGVtYmVkZGVkIGludG8gXAorYSBwcm9ncmFtIHRvIHByb3ZpZGUgdGhlIHByb2dyYW0gd2l0aCBhIHBvd2VyZnVsIGV4dGVuc2lvbiBsYW5ndWFnZS4gXAorVGhlIFMtTGFuZyBsaWJyYXJ5LCBwcm92aWRlZCBpbiB0aGlzIHBhY2thZ2UsIHByb3ZpZGVzIHRoZSBTLUxhbmcgXAorZXh0ZW5zaW9uIGxhbmd1YWdlLiAgUy1MYW5nJ3Mgc3ludGF4IHJlc2VtYmxlcyBDLCB3aGljaCBtYWtlcyBpdCBlYXN5IFwKK3RvIHJlY29kZSBTLUxhbmcgcHJvY2VkdXJlcyBpbiBDIGlmIHlvdSBuZWVkIHRvLiIKKworSE9NRVBBR0UgPSAiaHR0cDovL3d3dy5qZWRzb2Z0Lm9yZy9zbGFuZy8iCitTRUNUSU9OID0gImxpYnMiCitERVBFTkRTID0gInBjcmUgbmN1cnNlcyIKKworTElDRU5TRSA9ICJHUEx2MiIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PWE1MmExOGE0NzJkNGY3ZTQ1NDc5YjA2NTYzNzE3YzAyIgorCisKK1NSQ19VUkkgPSAiaHR0cDovL3d3dy5qZWRzb2Z0Lm9yZy9yZWxlYXNlcy8ke0JQTn0vJHtCUH0udGFyLmJ6MiBcCisgICAgICAgICAgIGZpbGU6Ly9ycGF0aGZpeC5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9maXgtY2hlY2stcGNyZS5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9zbGFuZy1maXgtdGhlLWljb252LWV4aXN0ZW5jZS1jaGVja2luZy5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly8wMDAxLUZpeC1lcnJvci1jb25mbGljdGluZy10eXBlcy1mb3ItcG9zaXhfY2xvc2UucGF0Y2ggXAorICAgICAgICAgICIKK1VQU1RSRUFNX0NIRUNLX1VSSSA9ICJodHRwOi8vd3d3LmplZHNvZnQub3JnL3JlbGVhc2VzL3NsYW5nLyIKKworaW5oZXJpdCBhdXRvdG9vbHMtYnJva2Vuc2VwCisKK0NMRUFOQlJPS0VOID0gIjEiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICIzYmNjNzkwNDYwZDUyZGIxMzE2YzIwMzk1YjdhYzJmMSIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICJmOTUyMjQwNjBmNDVlMGQ4MjEyYTUwMzliMzM5YWZhNWYxYTk0YTFiYjAyOThlNzk2MTA0ZTViMTJlOTI2MTI5IgorCitFWFRSQV9PRUNPTkYgKz0gIiAtLXdpdGhvdXQteiAtLXdpdGhvdXQtcG5nIC0td2l0aG91dC1vbmlnIC0teC1pbmNsdWRlcz0ke1NUQUdJTkdfRElSX0hPU1R9L3Vzci9pbmNsdWRlL1gxMSAtLXgtbGlicmFyaWVzPSR7U1RBR0lOR19ESVJfSE9TVH0vdXNyL2xpYiIKKworZG9fY29uZmlndXJlX3ByZXBlbmQoKSB7CisgICAgIyBzbGFuZyBrZWVwcyBjb25maWd1cmUuYWMgYW5kIHJlc3Qgb2YgYXV0b2NvbmYgZmlsZXMgaW4gYXV0b2NvbmYvIGRpcmVjdG9yeQorICAgICMgd2UgaGF2ZSB0byBnbyB0aGVyZSB0byBiZSBhYmxlIHRvIHJ1biBnbnUtY29uZmlnaXplIGNhdXNlIGl0IGV4cGVjdHMgY29uZmlndXJlLntpbixhY30KKyAgICAjIHRvIGJlIHByZXNlbnQuIFJlc3VsdGluZyBmaWxlcyBsYW5kIGluIGF1dG9jb25mL2F1dG9jb25mLyBzbyB3ZSBuZWVkIHRvIG1vdmUgdGhlbS4KKyAgICBjZCAke1N9L2F1dG9jb25mICYmIGdudS1jb25maWdpemUgLS1mb3JjZSAmJiBtdiBhdXRvY29uZi9jb25maWcuKiAuCisgICAgY2QgJHtCfQorfQorCitkb19pbnN0YWxsKCkgeworCW9lX3J1bm1ha2UgaW5zdGFsbCBERVNURElSPSR7RH0gLWUgJ0lOU1RfTElCX0RJUj0ke1NUQUdJTkdfRElSX0hPU1R9L3Vzci9saWInCit9CisKK0ZJTEVTXyR7UE59ICs9ICIke2xpYmRpcn0vJHtCUE59L3YyL21vZHVsZXMvICR7ZGF0YWRpcn0vc2xzaC8iCisKK1BBUkFMTEVMX01BS0UgPSAiIgorCitCQkNMQVNTRVhURU5EID0gIm5hdGl2ZSIKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvc3RhdC9zdGF0LTMuMy9maXgtc2VjdXJpdHktZm9ybWF0LnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9zdGF0L3N0YXQtMy4zL2ZpeC1zZWN1cml0eS1mb3JtYXQucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGMwMWVkMAotLS0gL2Rldi9udWxsCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvc3RhdC9zdGF0LTMuMy9maXgtc2VjdXJpdHktZm9ybWF0LnBhdGNoCkBAIC0wLDAgKzEsNjggQEAKK3N0YXQ6IEZpeGluZyBzZWN1cml0eSBmb3JtYXR0aW5nIGlzc3VlcworCitGaXggc2VjdXJpdHkgZm9ybWF0dGluZyBpc3N1ZXMgcmVsYXRlZCB0byBwcmludGYgd2l0aG91dCBOVUxMIGFyZ3VtZW50IAorCitzdGF0LmM6IEluIGZ1bmN0aW9uICdwcmludF9odW1hbl9hY2Nlc3MnOgorc3RhdC5jOjI5MjoxMzogZXJyb3I6IGZvcm1hdCBub3QgYSBzdHJpbmcgbGl0ZXJhbCBhbmQgbm8gZm9ybWF0IGFyZ3VtZW50cyBbLVdlcnJvcj1mb3JtYXQtc2VjdXJpdHldCisgICAgIHByaW50ZiAoYWNjZXNzKTsKKyAgICAgICAgICAgICBeCitzdGF0LmM6IEluIGZ1bmN0aW9uICdwcmludF9odW1hbl90aW1lJzoKK3N0YXQuYzoyOTk6NTc6IGVycm9yOiBmb3JtYXQgbm90IGEgc3RyaW5nIGxpdGVyYWwgYW5kIG5vIGZvcm1hdCBhcmd1bWVudHMgWy1XZXJyb3I9Zm9ybWF0LXNlY3VyaXR5XQorICAgaWYgKHN0cmZ0aW1lKHN0ciwgNDAsICIlYyIsIGxvY2FsdGltZSh0KSkgPiAwKSBwcmludGYoc3RyKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF4KK3N0YXQuYzogSW4gZnVuY3Rpb24gJ3ByaW50X2l0JzoKK3N0YXQuYzo2MTM6NjogZXJyb3I6IGZvcm1hdCBub3QgYSBzdHJpbmcgbGl0ZXJhbCBhbmQgbm8gZm9ybWF0IGFyZ3VtZW50cyBbLVdlcnJvcj1mb3JtYXQtc2VjdXJpdHldCisgICAgICBwcmludGYoYik7CisgICAgICBeCitzdGF0LmM6NjQyOjY6IGVycm9yOiBmb3JtYXQgbm90IGEgc3RyaW5nIGxpdGVyYWwgYW5kIG5vIGZvcm1hdCBhcmd1bWVudHMgWy1XZXJyb3I9Zm9ybWF0LXNlY3VyaXR5XQorICAgICAgcHJpbnRmKGIpOworICAgICAgXgorCitbWU9DVE8gIzk1NTBdCitbaHR0cHM6Ly9idWd6aWxsYS55b2N0b3Byb2plY3Qub3JnL3Nob3dfYnVnLmNnaT9pZD05NTUwXQorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworU2lnbmVkLW9mZi1ieTogRWR3aW4gUGxhdWNodSA8ZWR3aW4ucGxhdWNodS5jYW1hY2hvQGludGVsLmNvbT4KKworZGlmZiAtLWdpdCBhL3N0YXQuYyBiL3N0YXQuYworaW5kZXggMWVkMDdhOS4uMmJlNmY2MiAxMDA2NDQKKy0tLSBhL3N0YXQuYworKysrIGIvc3RhdC5jCitAQCAtMjg5LDE1ICsyODksMTUgQEAgdm9pZCBwcmludF9odW1hbl9hY2Nlc3Moc3RydWN0IHN0YXQgKnN0YXRidWYpCisgICAgIGRlZmF1bHQ6CisgICAgICAgYWNjZXNzWzBdID0gJz8nOworICAgICB9CistICAgIHByaW50ZiAoYWNjZXNzKTsKKysgICAgZnB1dHMoYWNjZXNzLHN0ZG91dCk7CisgfQorIAorIHZvaWQgcHJpbnRfaHVtYW5fdGltZSh0aW1lX3QgKnQpCisgeworICAgY2hhciBzdHJbNDBdOworICAgCistICBpZiAoc3RyZnRpbWUoc3RyLCA0MCwgIiVjIiwgbG9jYWx0aW1lKHQpKSA+IDApIHByaW50ZihzdHIpOworLSAgZWxzZSBwcmludGYoIkNhbm5vdCBjYWxjdWxhdGUgaHVtYW4gcmVhZGFibGUgdGltZSwgc29ycnkiKTsKKysgIGlmIChzdHJmdGltZShzdHIsIDQwLCAiJWMiLCBsb2NhbHRpbWUodCkpID4gMCkgZnB1dHMoc3RyLHN0ZG91dCk7CisrICBlbHNlIGZwdXRzKCJDYW5ub3QgY2FsY3VsYXRlIGh1bWFuIHJlYWRhYmxlIHRpbWUsIHNvcnJ5IixzdGRvdXQpOworIH0KKyAKKyAvKiBwcmludCBzdGF0ZnMgaW5mbyAqLworQEAgLTYxMCw3ICs2MTAsNyBAQCB2b2lkIHByaW50X2l0KGNoYXIgKm1hc3RlcmZvcm1hdCwgY2hhciAqZmlsZW5hbWUsCisgCXsKKyAJICAgIHN0cmNweSAocGZvcm1hdCwgIiUiKTsKKyAJICAgICptKysgPSAnXDAnOworLQkgICAgcHJpbnRmKGIpOworKwkgICAgZnB1dHMoYixzdGRvdXQpOworIAorIAkgICAgLyogY29weSBhbGwgZm9ybWF0IHNwZWNpZmllcnMgdG8gb3VyIGZvcm1hdCBzdHJpbmcgKi8KKyAJICAgIHdoaWxlIChpc2RpZ2l0KCptKSB8fCBzdHJjaHIoIiMwLSsuIEkiLCAqbSkpCitAQCAtNjM5LDcgKzYzOSw3IEBAIHZvaWQgcHJpbnRfaXQoY2hhciAqbWFzdGVyZm9ybWF0LCBjaGFyICpmaWxlbmFtZSwKKyAJfQorIAllbHNlCisgCXsKKy0JICAgIHByaW50ZihiKTsKKysJICAgIGZwdXRzKGIsc3Rkb3V0KTsKKyAJICAgIGIgPSBOVUxMOworIAl9CisgICAgIH0KZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvc3RhdC9zdGF0XzMuMy5iYiBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvc3RhdC9zdGF0XzMuMy5iYgppbmRleCBhNWVjZTA3Li4wNjk3YzczIDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3N0YXQvc3RhdF8zLjMuYmIKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9zdGF0L3N0YXRfMy4zLmJiCkBAIC02LDYgKzYsNyBAQAogICAgICAgICAgICAgICAgICAgICBmaWxlOi8vR1BMO21kNT05NGQ1NWQ1MTJhOWJhMzZjYWE5YjdkZjA3OWJhZTE5ZiIKIAogU1JDX1VSSSA9ICJodHRwOi8vd3d3LmliaWJsaW8ub3JnL3B1Yi9MaW51eC91dGlscy9maWxlLyR7QlB9LnRhci5neiBcCisgICAgICAgICAgIGZpbGU6Ly9maXgtc2VjdXJpdHktZm9ybWF0LnBhdGNoIFwKICAgICAgICAgICAgZmlsZTovL2ZpeC1lcnJvci1yZXR1cm4ucGF0Y2giCiAKIFNSQ19VUklbbWQ1c3VtXSA9ICIzN2UyNDdlOGU0MDBhZDkyMDVmMWIwNTAwYjcyOGZkMyIKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvc3Vkby9zdWRvXzEuOC4xNS5iYiBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvc3Vkby9zdWRvXzEuOC4xNS5iYgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDQyMDQzZWMuLjAwMDAwMDAKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9zdWRvL3N1ZG9fMS44LjE1LmJiCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotcmVxdWlyZSBzdWRvLmluYwotCi1TUkNfVVJJID0gImh0dHA6Ly9mdHAuc3Vkby53cy9zdWRvL2Rpc3Qvc3Vkby0ke1BWfS50YXIuZ3ogXAotICAgICAgICAgICAke0BiYi51dGlscy5jb250YWlucygnRElTVFJPX0ZFQVRVUkVTJywgJ3BhbScsICcke1BBTV9TUkNfVVJJfScsICcnLCBkKX0gXAotICAgICAgICAgICBmaWxlOi8vMDAwMS1JbmNsdWRlLXN5cy10eXBlcy5oLWZvci1pZF90LWRlZmluaXRpb24ucGF0Y2ggXAotICAgICAgICAgICAiCi0KLVBBTV9TUkNfVVJJID0gImZpbGU6Ly9zdWRvLnBhbSIKLQotU1JDX1VSSVttZDVzdW1dID0gIjdjZjZiOWI3NmQwNDc4YTU3MjQzMmJlZDQ4MWRkN2I1IgotU1JDX1VSSVtzaGEyNTZzdW1dID0gIjQzMTYzODE3MDgzMjRkYThiNmNiMTUxZjY1NWMxYTExODU1MjA3YzdjMDIyNDRkOGZmZGVhNTEwNGQ3Y2MzMDgiCi0KLURFUEVORFMgKz0gIiAke0BiYi51dGlscy5jb250YWlucygnRElTVFJPX0ZFQVRVUkVTJywgJ3BhbScsICdsaWJwYW0nLCAnJywgZCl9IgotUkRFUEVORFNfJHtQTn0gKz0gIiAke0BiYi51dGlscy5jb250YWlucygnRElTVFJPX0ZFQVRVUkVTJywgJ3BhbScsICdwYW0tcGx1Z2luLWxpbWl0cyBwYW0tcGx1Z2luLWtleWluaXQnLCAnJywgZCl9IgotCi1FWFRSQV9PRUNPTkYgKz0gIiBcCi0gICAgICAgICAgICAgYWNfY3ZfdHlwZV9yc2l6ZV90PW5vIFwKLSAgICAgICAgICAgICAke0BiYi51dGlscy5jb250YWlucygnRElTVFJPX0ZFQVRVUkVTJywgJ3BhbScsICctLXdpdGgtcGFtJywgJy0td2l0aG91dC1wYW0nLCBkKX0gXAotICAgICAgICAgICAgICR7QGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCAnc3lzdGVtZCcsICctLWVuYWJsZS10bXBmaWxlcy5kPSR7bGliZGlyfS90bXBmaWxlcy5kJywgJy0tZGlzYWJsZS10bXBmaWxlcy5kJywgZCl9IFwKLSAgICAgICAgICAgICAiCi0KLWRvX2luc3RhbGxfYXBwZW5kICgpIHsKLQlpZiBbICIke0BiYi51dGlscy5jb250YWlucygnRElTVFJPX0ZFQVRVUkVTJywgJ3BhbScsICdwYW0nLCAnJywgZCl9IiA9ICJwYW0iIF07IHRoZW4KLQkJaW5zdGFsbCAtRCAtbSA2NDQgJHtXT1JLRElSfS9zdWRvLnBhbSAke0R9LyR7c3lzY29uZmRpcn0vcGFtLmQvc3VkbwotCWZpCi0KLQljaG1vZCA0MTExICR7RH0ke2JpbmRpcn0vc3VkbwotCWNobW9kIDA0NDAgJHtEfSR7c3lzY29uZmRpcn0vc3Vkb2VycwotCi0JIyBFeHBsaWNpdGx5IHJlbW92ZSB0aGUgJHtsb2NhbHN0YXRlZGlyfS9ydW4gZGlyZWN0b3J5IHRvIGF2b2lkIFFBIGVycm9yCi0Jcm1kaXIgLXAgLS1pZ25vcmUtZmFpbC1vbi1ub24tZW1wdHkgJHtEfSR7bG9jYWxzdGF0ZWRpcn0vcnVuL3N1ZG8KLX0KLQotRklMRVNfJHtQTn0gKz0gIiR7bGliZGlyfS90bXBmaWxlcy5kIgotRklMRVNfJHtQTn0tZGV2ICs9ICIke2xpYmV4ZWNkaXJ9LyR7QlBOfS9saWIqJHtTT0xJQlNERVZ9ICR7bGliZXhlY2Rpcn0vJHtCUE59LyoubGEgXAotICAgICAgICAgICAgICAgICAgICAke2xpYmV4ZWNkaXJ9L2xpYioke1NPTElCU0RFVn0gJHtsaWJleGVjZGlyfS8qLmxhIgpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9zdWRvL3N1ZG9fMS44LjE3cDEuYmIgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3N1ZG8vc3Vkb18xLjguMTdwMS5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MTRhZDVjCi0tLSAvZGV2L251bGwKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9zdWRvL3N1ZG9fMS44LjE3cDEuYmIKQEAgLTAsMCArMSwzNiBAQAorcmVxdWlyZSBzdWRvLmluYworCitTUkNfVVJJID0gImh0dHA6Ly9mdHAuc3Vkby53cy9zdWRvL2Rpc3Qvc3Vkby0ke1BWfS50YXIuZ3ogXAorICAgICAgICAgICAke0BiYi51dGlscy5jb250YWlucygnRElTVFJPX0ZFQVRVUkVTJywgJ3BhbScsICcke1BBTV9TUkNfVVJJfScsICcnLCBkKX0gXAorICAgICAgICAgICBmaWxlOi8vMDAwMS1JbmNsdWRlLXN5cy10eXBlcy5oLWZvci1pZF90LWRlZmluaXRpb24ucGF0Y2ggXAorICAgICAgICAgICAiCisKK1BBTV9TUkNfVVJJID0gImZpbGU6Ly9zdWRvLnBhbSIKKworU1JDX1VSSVttZDVzdW1dID0gIjUwYTg0MGE2ODhjZWI2ZmEzYWIyNGZjMGFkZjRmYTIzIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gImM2OTBkNzA3ZmI1NjFiM2VjZGY2YTZkZTU1NjNiYzBiNzY5Mzg4ZWZmMjAxYzg1MWVkYmFjZTQwOGJiMTU1Y2MiCisKK0RFUEVORFMgKz0gIiAke0BiYi51dGlscy5jb250YWlucygnRElTVFJPX0ZFQVRVUkVTJywgJ3BhbScsICdsaWJwYW0nLCAnJywgZCl9IgorUkRFUEVORFNfJHtQTn0gKz0gIiAke0BiYi51dGlscy5jb250YWlucygnRElTVFJPX0ZFQVRVUkVTJywgJ3BhbScsICdwYW0tcGx1Z2luLWxpbWl0cyBwYW0tcGx1Z2luLWtleWluaXQnLCAnJywgZCl9IgorCitFWFRSQV9PRUNPTkYgKz0gIiBcCisgICAgICAgICAgICAgYWNfY3ZfdHlwZV9yc2l6ZV90PW5vIFwKKyAgICAgICAgICAgICAke0BiYi51dGlscy5jb250YWlucygnRElTVFJPX0ZFQVRVUkVTJywgJ3BhbScsICctLXdpdGgtcGFtJywgJy0td2l0aG91dC1wYW0nLCBkKX0gXAorICAgICAgICAgICAgICR7QGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCAnc3lzdGVtZCcsICctLWVuYWJsZS10bXBmaWxlcy5kPSR7bGliZGlyfS90bXBmaWxlcy5kJywgJy0tZGlzYWJsZS10bXBmaWxlcy5kJywgZCl9IFwKKyAgICAgICAgICAgICAiCisKK2RvX2luc3RhbGxfYXBwZW5kICgpIHsKKwlpZiBbICIke0BiYi51dGlscy5jb250YWlucygnRElTVFJPX0ZFQVRVUkVTJywgJ3BhbScsICdwYW0nLCAnJywgZCl9IiA9ICJwYW0iIF07IHRoZW4KKwkJaW5zdGFsbCAtRCAtbSA2NDQgJHtXT1JLRElSfS9zdWRvLnBhbSAke0R9LyR7c3lzY29uZmRpcn0vcGFtLmQvc3VkbworCWZpCisKKwljaG1vZCA0MTExICR7RH0ke2JpbmRpcn0vc3VkbworCWNobW9kIDA0NDAgJHtEfSR7c3lzY29uZmRpcn0vc3Vkb2VycworCisJIyBFeHBsaWNpdGx5IHJlbW92ZSB0aGUgJHtsb2NhbHN0YXRlZGlyfS9ydW4gZGlyZWN0b3J5IHRvIGF2b2lkIFFBIGVycm9yCisJcm1kaXIgLXAgLS1pZ25vcmUtZmFpbC1vbi1ub24tZW1wdHkgJHtEfSR7bG9jYWxzdGF0ZWRpcn0vcnVuL3N1ZG8KK30KKworRklMRVNfJHtQTn0gKz0gIiR7bGliZGlyfS90bXBmaWxlcy5kIgorRklMRVNfJHtQTn0tZGV2ICs9ICIke2xpYmV4ZWNkaXJ9LyR7QlBOfS9saWIqJHtTT0xJQlNERVZ9ICR7bGliZXhlY2Rpcn0vJHtCUE59LyoubGEgXAorICAgICAgICAgICAgICAgICAgICAke2xpYmV4ZWNkaXJ9L2xpYioke1NPTElCU0RFVn0gJHtsaWJleGVjZGlyfS8qLmxhIgpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9zeXNrbG9nZC9zeXNrbG9nZC5pbmMgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3N5c2tsb2dkL3N5c2tsb2dkLmluYwppbmRleCAxZTM2M2RiLi41YzE1ZmZlIDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3N5c2tsb2dkL3N5c2tsb2dkLmluYworKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3N5c2tsb2dkL3N5c2tsb2dkLmluYwpAQCAtNTUsNyArNTUsNyBAQAogcGtnX3ByZXJtXyR7UE59ICgpIHsKIAlpZiB0ZXN0ICJ4JEQiID0gIngiOyB0aGVuCiAJaWYgdGVzdCAiJDEiID0gInVwZ3JhZGUiIC1vICIkMSIgPSAicmVtb3ZlIjsgdGhlbgotCQkvZXRjL2luaXQuZC9zeXNsb2cgc3RvcAorCQkvZXRjL2luaXQuZC9zeXNsb2cgc3RvcCB8fCA6CiAJZmkKIAlmaQogfQpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9zeXNzdGF0L3N5c3N0YXQuaW5jIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9zeXNzdGF0L3N5c3N0YXQuaW5jCmluZGV4IGMzNTMyOTEuLmJiNTYyOWQgMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvc3lzc3RhdC9zeXNzdGF0LmluYworKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3N5c3N0YXQvc3lzc3RhdC5pbmMKQEAgLTE0LDYgKzE0LDcgQEAKIAogREVQRU5EUyArPSAiYmFzZS1wYXNzd2QiCiAKKyMgYXV0b3Rvb2xzLWJyb2tlbnNlcCBhcyB0aGlzIHBhY2thZ2UgZG9lc24ndCB1c2UgYXV0b21ha2UKIGluaGVyaXQgYXV0b3Rvb2xzLWJyb2tlbnNlcCBnZXR0ZXh0IHN5c3RlbWQKIAogRVhUUkFfT0VDT05GICs9ICItLWRpc2FibGUtc2Vuc29ycyIKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvc3lzc3RhdC9zeXNzdGF0XzExLjIuMC5iYiBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvc3lzc3RhdC9zeXNzdGF0XzExLjIuMC5iYgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggN2E4ZWI5Ni4uMDAwMDAwMAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3N5c3N0YXQvc3lzc3RhdF8xMS4yLjAuYmIKKysrIC9kZXYvbnVsbApAQCAtMSw4ICswLDAgQEAKLXJlcXVpcmUgc3lzc3RhdC5pbmMKLQotTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9OGNhNDNjYmM4NDJjMjMzNmU4MzU5MjZjMjE2NmMyOGIiCi0KLVNSQ19VUkkgKz0gImZpbGU6Ly8wMDAxLUluY2x1ZGUtbmVlZGVkLWhlYWRlcnMtZXhwbGljaXRseS5wYXRjaCIKLQotU1JDX1VSSVttZDVzdW1dID0gImU4YjYxNTc3NWFkOTg3ODBlM2YwNjc1YjkxZWRkYjE5IgotU1JDX1VSSVtzaGEyNTZzdW1dID0gIjk4MDZiOWE2NjI1Njg3OTZkM2ZiOTNlY2QwMWVjZWExMGQ4MTVlNjY4MzM3YTY0NjQ5NDk1M2JmZjRiYzQxNTUiCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3N5c3N0YXQvc3lzc3RhdF8xMS40LjAuYmIgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3N5c3N0YXQvc3lzc3RhdF8xMS40LjAuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjlmODNmYwotLS0gL2Rldi9udWxsCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvc3lzc3RhdC9zeXNzdGF0XzExLjQuMC5iYgpAQCAtMCwwICsxLDggQEAKK3JlcXVpcmUgc3lzc3RhdC5pbmMKKworTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9YTIzYTc0YjNmNGNhZjk2MTYyMzA3ODlkOTQyMTdhY2IiCisKK1NSQ19VUkkgKz0gImZpbGU6Ly8wMDAxLUluY2x1ZGUtbmVlZGVkLWhlYWRlcnMtZXhwbGljaXRseS5wYXRjaCIKKworU1JDX1VSSVttZDVzdW1dID0gImVlN2I4YzBiMTM5YTExYTdhMzQxOGRjMDY1OGNhMWJlIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gImI4NTE4Y2E4OGFjZmNiYzQ3NGE0MDYwMjJlZTljMGMzMjEwY2NlZjRmMGVjODBlNWIzZThjNDFkZGE4YzE2ZjIiCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3Rhci90YXIvcmVtb3ZlLWdldHMucGF0Y2ggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3Rhci90YXIvcmVtb3ZlLWdldHMucGF0Y2gKaW5kZXggMGI4YmUzOS4uZjI0ZGU5MiAxMDA2NDQKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC90YXIvdGFyL3JlbW92ZS1nZXRzLnBhdGNoCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvdGFyL3Rhci9yZW1vdmUtZ2V0cy5wYXRjaApAQCAtMywyMCArMywyNyBAQAogU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KIAogVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCi1JbmRleDogdGFyLTEuMjcvZ251L3N0ZGlvLmluLmgKLT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tLSB0YXItMS4yNy5vcmlnL2dudS9zdGRpby5pbi5oCTIwMTMtMDYtMjkgMDg6NTQ6MjYuMDAwMDAwMDAwICswMzAwCi0rKysgdGFyLTEuMjcvZ251L3N0ZGlvLmluLmgJMjAxMy0xMC0xNiAxNToyMjo0Ni45NzcyMDQ3MzcgKzAzMDAKLUBAIC03MTAsMTAgKzcxMCwxMiBAQAorLS0tCisgZ251L3N0ZGlvLmluLmggfCAyICsrCisgMSBmaWxlIGNoYW5nZWQsIDIgaW5zZXJ0aW9ucygrKQorCitkaWZmIC0tZ2l0IGEvZ251L3N0ZGlvLmluLmggYi9nbnUvc3RkaW8uaW4uaAoraW5kZXggZWM0Mzg3NC4uNTAyZTNhZSAxMDA2NDQKKy0tLSBhL2dudS9zdGRpby5pbi5oCisrKysgYi9nbnUvc3RkaW8uaW4uaAorQEAgLTcyMiwxMCArNzIyLDEyIEBAIF9HTF9XQVJOX09OX1VTRSAoZ2V0bGluZSwgImdldGxpbmUgaXMgdW5wb3J0YWJsZSAtICIKICAvKiBJdCBpcyB2ZXJ5IHJhcmUgdGhhdCB0aGUgZGV2ZWxvcGVyIGV2ZXIgaGFzIGZ1bGwgY29udHJvbCBvZiBzdGRpbiwKICAgICBzbyBhbnkgdXNlIG9mIGdldHMgd2FycmFudHMgYW4gdW5jb25kaXRpb25hbCB3YXJuaW5nOyBiZXNpZGVzLCBDMTEKICAgICByZW1vdmVkIGl0LiAgKi8KICsjaWYgZGVmaW5lZCBnZXRzCiAgI3VuZGVmIGdldHMKLSAjaWYgSEFWRV9SQVdfREVDTF9HRVRTCisgI2lmIEhBVkVfUkFXX0RFQ0xfR0VUUyAmJiAhZGVmaW5lZCBfX2NwbHVzcGx1cwogIF9HTF9XQVJOX09OX1VTRSAoZ2V0cywgImdldHMgaXMgYSBzZWN1cml0eSBob2xlIC0gdXNlIGZnZXRzIGluc3RlYWQiKTsKICAjZW5kaWYKICsjZW5kaWYKICAKLSAKICAjaWYgQEdOVUxJQl9PQlNUQUNLX1BSSU5URkAgfHwgQEdOVUxJQl9PQlNUQUNLX1BSSU5URl9QT1NJWEAKKyBzdHJ1Y3Qgb2JzdGFjazsKKy0tIAorMi44LjMKKwpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC90YXIvdGFyXzEuMjguYmIgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3Rhci90YXJfMS4yOC5iYgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTE4ZTYyMi4uMDAwMDAwMAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3Rhci90YXJfMS4yOC5iYgorKysgL2Rldi9udWxsCkBAIC0xLDE4ICswLDAgQEAKLXJlcXVpcmUgdGFyLmluYwotCi1QQUNLQUdFQ09ORklHID8/PSAiIgotUEFDS0FHRUNPTkZJR1thY2xdID0gIi0td2l0aC1wb3NpeC1hY2xzLCAtLXdpdGhvdXQtcG9zaXgtYWNscywgYWNsLCIKLQotTElDRU5TRSA9ICJHUEx2MyIKLUxJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PWQzMjIzOWJjYjY3MzQ2M2FiODc0ZTgwZDQ3ZmFlNTA0IgotCi1TUkNfVVJJICs9ICJmaWxlOi8vcmVtb3ZlLWdldHMucGF0Y2ggXAotICAgICAgICAgICAgZmlsZTovL211c2xfZGlyZW50LnBhdGNoIFwKLSAgICAgICAgICAgIgotU1JDX1VSSVttZDVzdW1dID0gIjhmMzJiMmJjMWVkN2RkZjRjZjRlNGEzOTcxMTM0MWIwIgotU1JDX1VSSVtzaGEyNTZzdW1dID0gIjYwZTRiZmUwNjAyZmVmMzRjZDkwOGQ5MWNmNjM4ZTE3ZWViMDkzOTRkN2I5OGMyNDg3MjE3ZGM0ZDMxNDc1NjIiCi0KLWRvX2luc3RhbGxfYXBwZW5kX2xpYmMtbXVzbCgpIHsKLQlybSAtZiAke0R9JHtsaWJkaXJ9L2NoYXJzZXQuYWxpYXMKLQlybWRpciAke0R9JHtsaWJkaXJ9Ci19CmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3Rhci90YXJfMS4yOS5iYiBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvdGFyL3Rhcl8xLjI5LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVmY2U1N2QKLS0tIC9kZXYvbnVsbAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3Rhci90YXJfMS4yOS5iYgpAQCAtMCwwICsxLDE4IEBACityZXF1aXJlIHRhci5pbmMKKworUEFDS0FHRUNPTkZJRyA/Pz0gIiIKK1BBQ0tBR0VDT05GSUdbYWNsXSA9ICItLXdpdGgtcG9zaXgtYWNscywgLS13aXRob3V0LXBvc2l4LWFjbHMsIGFjbCwiCisKK0xJQ0VOU0UgPSAiR1BMdjMiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT1kMzIyMzliY2I2NzM0NjNhYjg3NGU4MGQ0N2ZhZTUwNCIKKworU1JDX1VSSSArPSAiZmlsZTovL3JlbW92ZS1nZXRzLnBhdGNoIFwKKyAgICAgICAgICAgIGZpbGU6Ly9tdXNsX2RpcmVudC5wYXRjaCBcCisgICAgICAgICAgICIKK1NSQ19VUklbbWQ1c3VtXSA9ICI5NTVjZDUzMzk1NWFjYjE4MDRiODNmZDcwMjE4ZGE1MSIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICIyMzZiMTExOTBjMGEzYTY4ODViZGI4ZDYxNDI0ZjJiMzZhNTg3Mjg2OWFhM2Y3ZjY5NWRlYTRiNDg0M2FlMmYyIgorCitkb19pbnN0YWxsX2FwcGVuZF9saWJjLW11c2woKSB7CisJcm0gLWYgJHtEfSR7bGliZGlyfS9jaGFyc2V0LmFsaWFzCisJcm1kaXIgJHtEfSR7bGliZGlyfQorfQpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC90emNvZGUvdHpjb2RlLW5hdGl2ZV8yMDE2Yy5iYiBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvdHpjb2RlL3R6Y29kZS1uYXRpdmVfMjAxNmMuYmIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDA2YjkyZWEuLjAwMDAwMDAKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC90emNvZGUvdHpjb2RlLW5hdGl2ZV8yMDE2Yy5iYgorKysgL2Rldi9udWxsCkBAIC0xLDI1ICswLDAgQEAKLSMgbm90ZSB0aGF0IHdlIGFsbG93IGZvciB1cyB0byB1c2UgZGF0YSBsYXRlciB0aGFuIG91ciBjb2RlIHZlcnNpb24KLSMKLVNVTU1BUlkgPSAidHpjb2RlLCB0aW1lem9uZSB6b25laW5mbyB1dGlscyAtLSB6aWMsIHpkdW1wLCB0enNlbGVjdCIKLUxJQ0VOU0UgPSAiUEQgJiBCU0QgJiBCU0QtMy1DbGF1c2UiCi0KLUxJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0xJQ0VOU0U7bWQ1PTc2YWUyYmVjZmNiOWE2ODUwNDFjNmYxNjZiNDRjMmMyIgotCi1TUkNfVVJJID0iIGh0dHA6Ly93d3cuaWFuYS5vcmcvdGltZS16b25lcy9yZXBvc2l0b3J5L3JlbGVhc2VzL3R6Y29kZSR7UFZ9LnRhci5nejtuYW1lPXR6Y29kZSBcCi0gICAgICAgICAgIGh0dHA6Ly93d3cuaWFuYS5vcmcvdGltZS16b25lcy9yZXBvc2l0b3J5L3JlbGVhc2VzL3R6ZGF0YSR7UFZ9LnRhci5nejtuYW1lPXR6ZGF0YSIKLQotU1JDX1VSSVt0emNvZGUubWQ1c3VtXSA9ICJmZmI4MmFiMGI1ODgxMzg3NTk5MDJiNDYyN2E2YTgwZCIKLVNSQ19VUklbdHpjb2RlLnNoYTI1NnN1bV0gPSAiMzQ0YjFiZDQ4NjkzNWJjYTJiN2JhYTQ3ZGIzYjk5YjMyMjExYzQ1ZjMxZWMwZDFlYWQ4YmFjZDEwM2M1YTQxNiIKLVNSQ19VUklbdHpkYXRhLm1kNXN1bV0gPSAiMDMzMGNjZDE2MTQwZDNiNjQzOGExOGRhZTliMzRiOTMiCi1TUkNfVVJJW3R6ZGF0YS5zaGEyNTZzdW1dID0gIjg3MDBkOTgxZTZmMjAwN2FjMDM3ZGFiYjVkMmIxMmYzOTBlODYyOWJiYzMwZTU2NGJjMjFjZjBjMDY5YTJkNDgiCi0KLVMgPSAiJHtXT1JLRElSfSIKLQotaW5oZXJpdCBuYXRpdmUKLQotZG9faW5zdGFsbCAoKSB7Ci0gICAgICAgIGluc3RhbGwgLWQgJHtEfSR7YmluZGlyfS8KLSAgICAgICAgaW5zdGFsbCAtbSA3NTUgemljICR7RH0ke2JpbmRpcn0vCi0gICAgICAgIGluc3RhbGwgLW0gNzU1IHpkdW1wICR7RH0ke2JpbmRpcn0vCi0gICAgICAgIGluc3RhbGwgLW0gNzU1IHR6c2VsZWN0ICR7RH0ke2JpbmRpcn0vCi19CmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3R6Y29kZS90emNvZGUtbmF0aXZlXzIwMTZnLmJiIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC90emNvZGUvdHpjb2RlLW5hdGl2ZV8yMDE2Zy5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMmU2MjE3Ci0tLSAvZGV2L251bGwKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC90emNvZGUvdHpjb2RlLW5hdGl2ZV8yMDE2Zy5iYgpAQCAtMCwwICsxLDI2IEBACisjIG5vdGUgdGhhdCB3ZSBhbGxvdyBmb3IgdXMgdG8gdXNlIGRhdGEgbGF0ZXIgdGhhbiBvdXIgY29kZSB2ZXJzaW9uCisjCitTVU1NQVJZID0gInR6Y29kZSwgdGltZXpvbmUgem9uZWluZm8gdXRpbHMgLS0gemljLCB6ZHVtcCwgdHpzZWxlY3QiCitMSUNFTlNFID0gIlBEICYgQlNEICYgQlNELTMtQ2xhdXNlIgorCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9MSUNFTlNFO21kNT1lZjFhMzUyYjkwMWVlN2I3NWE3NWRmODE3MWQ2YWNhNyIKKworU1JDX1VSSSA9IiBodHRwOi8vd3d3LmlhbmEub3JnL3RpbWUtem9uZXMvcmVwb3NpdG9yeS9yZWxlYXNlcy90emNvZGUke1BWfS50YXIuZ3o7bmFtZT10emNvZGUgXAorICAgICAgICAgICBodHRwOi8vd3d3LmlhbmEub3JnL3RpbWUtem9uZXMvcmVwb3NpdG9yeS9yZWxlYXNlcy90emRhdGEke1BWfS50YXIuZ3o7bmFtZT10emRhdGEiCitVUFNUUkVBTV9DSEVDS19VUkkgPSAiaHR0cDovL3d3dy5pYW5hLm9yZy90aW1lLXpvbmVzIgorCitTUkNfVVJJW3R6Y29kZS5tZDVzdW1dID0gImY4OTg2NzAxMzY3NmUzY2I5NTQ0YmUyZGY3ZDM2YTkxIgorU1JDX1VSSVt0emNvZGUuc2hhMjU2c3VtXSA9ICIxZmY5MGI0N2FkNzk4NjE0MGE1MTNiNTI4N2IxODUxYzQwZjgwZmQ0NGZkNjM2ZGI1Y2M1YjQ2ZDA2ZjlmYTJiIgorU1JDX1VSSVt0emRhdGEubWQ1c3VtXSA9ICIzYzdlOTdlYzg1MjcyMTExMDRkMjdjYzFkOTdhMjNkZSIKK1NSQ19VUklbdHpkYXRhLnNoYTI1NnN1bV0gPSAiM2M3MTM3YjJiYzQ3MzIzYjBkZTQ3Yjc3Nzg2YmFjZjgxZWQ1MDNkNGIyYzY5M2ZmOGFkYTJmYmQxMjgxZWJkMSIKKworUyA9ICIke1dPUktESVJ9IgorCitpbmhlcml0IG5hdGl2ZQorCitkb19pbnN0YWxsICgpIHsKKyAgICAgICAgaW5zdGFsbCAtZCAke0R9JHtiaW5kaXJ9LworICAgICAgICBpbnN0YWxsIC1tIDc1NSB6aWMgJHtEfSR7YmluZGlyfS8KKyAgICAgICAgaW5zdGFsbCAtbSA3NTUgemR1bXAgJHtEfSR7YmluZGlyfS8KKyAgICAgICAgaW5zdGFsbCAtbSA3NTUgdHpzZWxlY3QgJHtEfSR7YmluZGlyfS8KK30KZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvdHpkYXRhL3R6ZGF0YV8yMDE2Yy5iYiBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvdHpkYXRhL3R6ZGF0YV8yMDE2Yy5iYgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNWViODViNy4uMDAwMDAwMAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3R6ZGF0YS90emRhdGFfMjAxNmMuYmIKKysrIC9kZXYvbnVsbApAQCAtMSwyMTIgKzAsMCBAQAotU1VNTUFSWSA9ICJUaW1lem9uZSBkYXRhIgotSE9NRVBBR0UgPSAiaHR0cDovL3d3dy5pYW5hLm9yZy90aW1lLXpvbmVzIgotU0VDVElPTiA9ICJiYXNlIgotTElDRU5TRSA9ICJQRCAmIEJTRCAmIEJTRC0zLUNsYXVzZSIKLUxJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0xJQ0VOU0U7bWQ1PTc2YWUyYmVjZmNiOWE2ODUwNDFjNmYxNjZiNDRjMmMyIgotCi1ERVBFTkRTID0gInR6Y29kZS1uYXRpdmUiCi0KLVNSQ19VUkkgPSAiaHR0cDovL3d3dy5pYW5hLm9yZy90aW1lLXpvbmVzL3JlcG9zaXRvcnkvcmVsZWFzZXMvdHpkYXRhJHtQVn0udGFyLmd6O25hbWU9dHpkYXRhIgotCi1TUkNfVVJJW3R6ZGF0YS5tZDVzdW1dID0gIjAzMzBjY2QxNjE0MGQzYjY0MzhhMThkYWU5YjM0YjkzIgotU1JDX1VSSVt0emRhdGEuc2hhMjU2c3VtXSA9ICI4NzAwZDk4MWU2ZjIwMDdhYzAzN2RhYmI1ZDJiMTJmMzkwZTg2MjliYmMzMGU1NjRiYzIxY2YwYzA2OWEyZDQ4IgotCi1pbmhlcml0IGFsbGFyY2gKLQotUkNPTkZMSUNUU18ke1BOfSA9ICJ0aW1lem9uZXMgdGltZXpvbmUtYWZyaWNhIHRpbWV6b25lLWFtZXJpY2EgdGltZXpvbmUtYW50YXJjdGljYSBcCi0gICAgICAgICAgICAgdGltZXpvbmUtYXJjdGljIHRpbWV6b25lLWFzaWEgdGltZXpvbmUtYXRsYW50aWMgXAotICAgICAgICAgICAgIHRpbWV6b25lLWF1c3RyYWxpYSB0aW1lem9uZS1ldXJvcGUgdGltZXpvbmUtaW5kaWFuIFwKLSAgICAgICAgICAgICB0aW1lem9uZS1pc28zMTY2LnRhYiB0aW1lem9uZS1wYWNpZmljIHRpbWV6b25lLXpvbmUudGFiIgotCi1TID0gIiR7V09SS0RJUn0iCi0KLURFRkFVTFRfVElNRVpPTkUgPz0gIlVuaXZlcnNhbCIKLUlOU1RBTExfVElNRVpPTkVfRklMRSA/PSAiMSIKLQotVFpPTkVTPSAiYWZyaWNhIGFudGFyY3RpY2EgYXNpYSBhdXN0cmFsYXNpYSBldXJvcGUgbm9ydGhhbWVyaWNhIHNvdXRoYW1lcmljYSAgXAotICAgICAgICAgZmFjdG9yeSBldGNldGVyYSBiYWNrd2FyZCBzeXN0ZW12IFwKLSAgICAgICAgIgotIyBwYWNpZmljbmV3IAotCi1kb19jb21waWxlICgpIHsKLSAgICAgICAgZm9yIHpvbmUgaW4gJHtUWk9ORVN9OyBkbyBcCi0gICAgICAgICAgICAke1NUQUdJTkdfQklORElSX05BVElWRX0vemljIC1kICR7V09SS0RJUn0ke2RhdGFkaXJ9L3pvbmVpbmZvIC1MIC9kZXYvbnVsbCBcCi0gICAgICAgICAgICAgICAgLXkgJHtTfS95ZWFyaXN0eXBlLnNoICR7U30vJHt6b25lfSA7IFwKLSAgICAgICAgICAgICR7U1RBR0lOR19CSU5ESVJfTkFUSVZFfS96aWMgLWQgJHtXT1JLRElSfSR7ZGF0YWRpcn0vem9uZWluZm8vcG9zaXggLUwgL2Rldi9udWxsIFwKLSAgICAgICAgICAgICAgICAteSAke1N9L3llYXJpc3R5cGUuc2ggJHtTfS8ke3pvbmV9IDsgXAotICAgICAgICAgICAgJHtTVEFHSU5HX0JJTkRJUl9OQVRJVkV9L3ppYyAtZCAke1dPUktESVJ9JHtkYXRhZGlyfS96b25laW5mby9yaWdodCAtTCAke1N9L2xlYXBzZWNvbmRzIFwKLSAgICAgICAgICAgICAgICAteSAke1N9L3llYXJpc3R5cGUuc2ggJHtTfS8ke3pvbmV9IDsgXAotICAgICAgICBkb25lCi19Ci0KLWRvX2luc3RhbGwgKCkgewotICAgICAgICBpbnN0YWxsIC1kICR7RH0vJGV4ZWNfcHJlZml4ICR7RH0ke2RhdGFkaXJ9L3pvbmVpbmZvCi0gICAgICAgIGNwIC1wUFIgJHtTfS8kZXhlY19wcmVmaXggJHtEfS8KLSAgICAgICAgIyBsaWJjIGlzIHJlbW92aW5nIHpvbmVpbmZvIGZpbGVzIGZyb20gcGFja2FnZQotICAgICAgICBjcCAtcFAgIiR7U30vem9uZS50YWIiICR7RH0ke2RhdGFkaXJ9L3pvbmVpbmZvCi0gICAgICAgIGNwIC1wUCAiJHtTfS9pc28zMTY2LnRhYiIgJHtEfSR7ZGF0YWRpcn0vem9uZWluZm8KLQotICAgICAgICAjIEluc3RhbGwgZGVmYXVsdCB0aW1lem9uZQotICAgICAgICBpZiBbIC1lICR7RH0ke2RhdGFkaXJ9L3pvbmVpbmZvLyR7REVGQVVMVF9USU1FWk9ORX0gXTsgdGhlbgotICAgICAgICAgICAgaW5zdGFsbCAtZCAke0R9JHtzeXNjb25mZGlyfQotICAgICAgICAgICAgaWYgWyAiJHtJTlNUQUxMX1RJTUVaT05FX0ZJTEV9IiA9ICIxIiBdOyB0aGVuCi0gICAgICAgICAgICAgICAgZWNobyAke0RFRkFVTFRfVElNRVpPTkV9ID4gJHtEfSR7c3lzY29uZmRpcn0vdGltZXpvbmUKLSAgICAgICAgICAgIGZpCi0gICAgICAgICAgICBsbiAtcyAke2RhdGFkaXJ9L3pvbmVpbmZvLyR7REVGQVVMVF9USU1FWk9ORX0gJHtEfSR7c3lzY29uZmRpcn0vbG9jYWx0aW1lCi0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIGJiZXJyb3IgIkRFRkFVTFRfVElNRVpPTkUgaXMgc2V0IHRvIGFuIGludmFsaWQgdmFsdWUuIgotICAgICAgICAgICAgZXhpdCAxCi0gICAgICAgIGZpCi0KLSAgICAgICAgY2hvd24gLVIgcm9vdDpyb290ICR7RH0KLX0KLQotcGtnX3Bvc3RpbnN0XyR7UE59ICgpIHsKLQlldGNfbHQ9IiREJHtzeXNjb25mZGlyfS9sb2NhbHRpbWUiCi0Jc3JjPSIkRCR7c3lzY29uZmRpcn0vdGltZXpvbmUiCi0KLQlpZiBbIC1lICR7c3JjfSBdIDsgdGhlbgotCQl0ej0kKHNlZCAtZSAnczojLio6OicgLWUgJ3M6W1s6c3BhY2U6XV0qOjpnJyAtZSAnL14kL2QnICIke3NyY30iKQotCWZpCi0JCi0JaWYgWyAteiAiJHt0en0iIF0gOyB0aGVuCi0JCWV4aXQgMAotCWZpCi0JCi0JaWYgWyAhIC1lICIkRCR7ZGF0YWRpcn0vem9uZWluZm8vJHt0en0iIF0gOyB0aGVuCi0JCWVjaG8gIllvdSBoYXZlIGFuIGludmFsaWQgVElNRVpPTkUgc2V0dGluZyBpbiAke3NyY30iCi0JCWVjaG8gIllvdXIgJHtldGNfbHR9IGhhcyBiZWVuIHJlc2V0IHRvIFVuaXZlcnNhbDsgZW5qb3khIgotCQl0ej0iVW5pdmVyc2FsIgotCQllY2hvICJVcGRhdGluZyAke2V0Y19sdH0gd2l0aCAkRCR7ZGF0YWRpcn0vem9uZWluZm8vJHt0en0iCi0JCWlmIFsgLUwgJHtldGNfbHR9IF0gOyB0aGVuCi0JCQlybSAtZiAiJHtldGNfbHR9IgotCQlmaQotCQlsbiAtcyAiJHtkYXRhZGlyfS96b25laW5mby8ke3R6fSIgIiR7ZXRjX2x0fSIKLQlmaQotfQotCi0jIFBhY2thZ2VzIHByaW1hcmlseSBvcmdhbml6ZWQgYnkgZGlyZWN0b3J5IHdpdGggYSBtYWpvciBjaXR5Ci0jIGluIG1vc3QgdGltZSB6b25lcyBpbiB0aGUgYmFzZSBwYWNrYWdlCi0KLVBBQ0tBR0VTID0gInR6ZGF0YSB0emRhdGEtbWlzYyB0emRhdGEtcG9zaXggdHpkYXRhLXJpZ2h0IHR6ZGF0YS1hZnJpY2EgXAotICAgIHR6ZGF0YS1hbWVyaWNhcyB0emRhdGEtYW50YXJjdGljYSB0emRhdGEtYXJjdGljIHR6ZGF0YS1hc2lhIFwKLSAgICB0emRhdGEtYXRsYW50aWMgdHpkYXRhLWF1c3RyYWxpYSB0emRhdGEtZXVyb3BlIHR6ZGF0YS1wYWNpZmljIgotCi1GSUxFU190emRhdGEtYWZyaWNhICs9ICIke2RhdGFkaXJ9L3pvbmVpbmZvL0FmcmljYS8qIgotUlBST1ZJREVTX3R6ZGF0YS1hZnJpY2EgPSAidHpkYXRhLWFmcmljYSIKLQotRklMRVNfdHpkYXRhLWFtZXJpY2FzICs9ICIke2RhdGFkaXJ9L3pvbmVpbmZvL0FtZXJpY2EvKiAgXAotICAgICAgICAgICAgICAgICR7ZGF0YWRpcn0vem9uZWluZm8vVVMvKiAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICAgICAgJHtkYXRhZGlyfS96b25laW5mby9CcmF6aWwvKiAgICAgICAgICAgIFwKLSAgICAgICAgICAgICAgICAke2RhdGFkaXJ9L3pvbmVpbmZvL0NhbmFkYS8qICAgICAgICAgICAgXAotICAgICAgICAgICAgICAgICR7ZGF0YWRpcn0vem9uZWluZm8vTWV4aWNvLyogICAgICAgICAgICBcCi0gICAgICAgICAgICAgICAgJHtkYXRhZGlyfS96b25laW5mby9DaGlsZS8qIgotUlBST1ZJREVTX3R6ZGF0YS1hbWVyaWNhcyA9ICJ0emRhdGEtYW1lcmljYXMiCi0KLUZJTEVTX3R6ZGF0YS1hbnRhcmN0aWNhICs9ICIke2RhdGFkaXJ9L3pvbmVpbmZvL0FudGFyY3RpY2EvKiIKLVJQUk9WSURFU190emRhdGEtYW50YXJjdGljYSA9ICJ0emRhdGEtYW50YXJjdGljYSIKLQotRklMRVNfdHpkYXRhLWFyY3RpYyArPSAiJHtkYXRhZGlyfS96b25laW5mby9BcmN0aWMvKiIKLVJQUk9WSURFU190emRhdGEtYXJjdGljID0gInR6ZGF0YS1hcmN0aWMiCi0KLUZJTEVTX3R6ZGF0YS1hc2lhICs9ICIke2RhdGFkaXJ9L3pvbmVpbmZvL0FzaWEvKiAgICAgICAgXAotICAgICAgICAgICAgICAgICR7ZGF0YWRpcn0vem9uZWluZm8vSW5kaWFuLyogICAgICAgICAgICBcCi0gICAgICAgICAgICAgICAgJHtkYXRhZGlyfS96b25laW5mby9NaWRlYXN0LyoiCi1SUFJPVklERVNfdHpkYXRhLWFzaWEgPSAidHpkYXRhLWFzaWEiCi0KLUZJTEVTX3R6ZGF0YS1hdGxhbnRpYyArPSAiJHtkYXRhZGlyfS96b25laW5mby9BdGxhbnRpYy8qIgotUlBST1ZJREVTX3R6ZGF0YS1hdGxhbnRpYyA9ICJ0emRhdGEtYXRsYW50aWMiCi0KLUZJTEVTX3R6ZGF0YS1hdXN0cmFsaWEgKz0gIiR7ZGF0YWRpcn0vem9uZWluZm8vQXVzdHJhbGlhLyoiCi1SUFJPVklERVNfdHpkYXRhLWF1c3RyYWxpYSA9ICJ0emRhdGEtYXVzdHJhbGlhIgotCi1GSUxFU190emRhdGEtZXVyb3BlICs9ICIke2RhdGFkaXJ9L3pvbmVpbmZvL0V1cm9wZS8qIgotUlBST1ZJREVTX3R6ZGF0YS1ldXJvcGUgPSAidHpkYXRhLWV1cm9wZSIKLQotRklMRVNfdHpkYXRhLXBhY2lmaWMgKz0gIiR7ZGF0YWRpcn0vem9uZWluZm8vUGFjaWZpYy8qIgotUlBST1ZJREVTX3R6ZGF0YS1wYWNpZmljID0gInR6ZGF0YS1wYWNpZmljIgotCi1GSUxFU190emRhdGEtcG9zaXggKz0gIiR7ZGF0YWRpcn0vem9uZWluZm8vcG9zaXgvKiIKLVJQUk9WSURFU190emRhdGEtcG9zaXggPSAidHpkYXRhLXBvc2l4IgotCi1GSUxFU190emRhdGEtcmlnaHQgKz0gIiR7ZGF0YWRpcn0vem9uZWluZm8vcmlnaHQvKiIKLVJQUk9WSURFU190emRhdGEtcmlnaHQgPSAidHpkYXRhLXJpZ2h0IgotCi0KLUZJTEVTX3R6ZGF0YS1taXNjICs9ICIke2RhdGFkaXJ9L3pvbmVpbmZvL0N1YmEgICAgICAgICAgIFwKLSAgICAgICAgICAgICAgICAke2RhdGFkaXJ9L3pvbmVpbmZvL0VneXB0ICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgICAgICAke2RhdGFkaXJ9L3pvbmVpbmZvL0VpcmUgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgICAgICAke2RhdGFkaXJ9L3pvbmVpbmZvL0ZhY3RvcnkgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgICAgICAke2RhdGFkaXJ9L3pvbmVpbmZvL0dCLUVpcmUgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgICAgICAke2RhdGFkaXJ9L3pvbmVpbmZvL0hvbmdrb25nICAgICAgICAgICAgIFwKLSAgICAgICAgICAgICAgICAke2RhdGFkaXJ9L3pvbmVpbmZvL0ljZWxhbmQgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgICAgICAke2RhdGFkaXJ9L3pvbmVpbmZvL0lyYW4gICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgICAgICAke2RhdGFkaXJ9L3pvbmVpbmZvL0lzcmFlbCAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgICAgICAke2RhdGFkaXJ9L3pvbmVpbmZvL0phbWFpY2EgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgICAgICAke2RhdGFkaXJ9L3pvbmVpbmZvL0phcGFuICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgICAgICAke2RhdGFkaXJ9L3pvbmVpbmZvL0t3YWphbGVpbiAgICAgICAgICAgIFwKLSAgICAgICAgICAgICAgICAke2RhdGFkaXJ9L3pvbmVpbmZvL0xpYnlhICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgICAgICAke2RhdGFkaXJ9L3pvbmVpbmZvL05hdmFqbyAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgICAgICAke2RhdGFkaXJ9L3pvbmVpbmZvL1BvbGFuZCAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgICAgICAke2RhdGFkaXJ9L3pvbmVpbmZvL1BvcnR1Z2FsICAgICAgICAgICAgIFwKLSAgICAgICAgICAgICAgICAke2RhdGFkaXJ9L3pvbmVpbmZvL1NpbmdhcG9yZSAgICAgICAgICAgIFwKLSAgICAgICAgICAgICAgICAke2RhdGFkaXJ9L3pvbmVpbmZvL1R1cmtleSIKLVJQUk9WSURFU190emRhdGEtbWlzYyA9ICJ0emRhdGEtbWlzYyIKLQotCi1GSUxFU18ke1BOfSArPSAiJHtkYXRhZGlyfS96b25laW5mby9QYWNpZmljL0hvbm9sdWx1ICAgICBcCi0gICAgICAgICAgICAgICAgJHtkYXRhZGlyfS96b25laW5mby9BbWVyaWNhL0FuY2hvcmFnZSAgICBcCi0gICAgICAgICAgICAgICAgJHtkYXRhZGlyfS96b25laW5mby9BbWVyaWNhL0xvc19BbmdlbGVzICBcCi0gICAgICAgICAgICAgICAgJHtkYXRhZGlyfS96b25laW5mby9BbWVyaWNhL0RlbnZlciAgICAgICBcCi0gICAgICAgICAgICAgICAgJHtkYXRhZGlyfS96b25laW5mby9BbWVyaWNhL0NoaWNhZ28gICAgICBcCi0gICAgICAgICAgICAgICAgJHtkYXRhZGlyfS96b25laW5mby9BbWVyaWNhL05ld19Zb3JrICAgICBcCi0gICAgICAgICAgICAgICAgJHtkYXRhZGlyfS96b25laW5mby9BbWVyaWNhL0NhcmFjYXMgICAgICBcCi0gICAgICAgICAgICAgICAgJHtkYXRhZGlyfS96b25laW5mby9BbWVyaWNhL1Nhb19QYXVsbyAgICBcCi0gICAgICAgICAgICAgICAgJHtkYXRhZGlyfS96b25laW5mby9FdXJvcGUvTG9uZG9uICAgICAgICBcCi0gICAgICAgICAgICAgICAgJHtkYXRhZGlyfS96b25laW5mby9FdXJvcGUvUGFyaXMgICAgICAgICBcCi0gICAgICAgICAgICAgICAgJHtkYXRhZGlyfS96b25laW5mby9BZnJpY2EvQ2Fpcm8gICAgICAgICBcCi0gICAgICAgICAgICAgICAgJHtkYXRhZGlyfS96b25laW5mby9FdXJvcGUvTW9zY293ICAgICAgICBcCi0gICAgICAgICAgICAgICAgJHtkYXRhZGlyfS96b25laW5mby9Bc2lhL0R1YmFpICAgICAgICAgICBcCi0gICAgICAgICAgICAgICAgJHtkYXRhZGlyfS96b25laW5mby9Bc2lhL0thcmFjaGkgICAgICAgICBcCi0gICAgICAgICAgICAgICAgJHtkYXRhZGlyfS96b25laW5mby9Bc2lhL0RoYWthICAgICAgICAgICBcCi0gICAgICAgICAgICAgICAgJHtkYXRhZGlyfS96b25laW5mby9Bc2lhL0JhbmtvayAgICAgICAgICBcCi0gICAgICAgICAgICAgICAgJHtkYXRhZGlyfS96b25laW5mby9Bc2lhL0hvbmdfS29uZyAgICAgICBcCi0gICAgICAgICAgICAgICAgJHtkYXRhZGlyfS96b25laW5mby9Bc2lhL1Rva3lvICAgICAgICAgICBcCi0gICAgICAgICAgICAgICAgJHtkYXRhZGlyfS96b25laW5mby9BdXN0cmFsaWEvRGFyd2luICAgICBcCi0gICAgICAgICAgICAgICAgJHtkYXRhZGlyfS96b25laW5mby9BdXN0cmFsaWEvQWRlbGFpZGUgICBcCi0gICAgICAgICAgICAgICAgJHtkYXRhZGlyfS96b25laW5mby9BdXN0cmFsaWEvQnJpc2JhbmUgICBcCi0gICAgICAgICAgICAgICAgJHtkYXRhZGlyfS96b25laW5mby9BdXN0cmFsaWEvU3lkbmV5ICAgICBcCi0gICAgICAgICAgICAgICAgJHtkYXRhZGlyfS96b25laW5mby9QYWNpZmljL05vdW1lYSAgICAgICBcCi0gICAgICAgICAgICAgICAgJHtkYXRhZGlyfS96b25laW5mby9DRVQgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICAgICAgJHtkYXRhZGlyfS96b25laW5mby9DU1Q2Q0RUICAgICAgICAgICAgICBcCi0gICAgICAgICAgICAgICAgJHtkYXRhZGlyfS96b25laW5mby9FRVQgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICAgICAgJHtkYXRhZGlyfS96b25laW5mby9FU1QgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICAgICAgJHtkYXRhZGlyfS96b25laW5mby9FU1Q1RURUICAgICAgICAgICAgICBcCi0gICAgICAgICAgICAgICAgJHtkYXRhZGlyfS96b25laW5mby9HQiAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICAgICAgJHtkYXRhZGlyfS96b25laW5mby9HTVQgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICAgICAgJHtkYXRhZGlyfS96b25laW5mby9HTVQrMCAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICAgICAgJHtkYXRhZGlyfS96b25laW5mby9HTVQtMCAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICAgICAgJHtkYXRhZGlyfS96b25laW5mby9HTVQwICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICAgICAgJHtkYXRhZGlyfS96b25laW5mby9HcmVlbndpY2ggICAgICAgICAgICBcCi0gICAgICAgICAgICAgICAgJHtkYXRhZGlyfS96b25laW5mby9IU1QgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICAgICAgJHtkYXRhZGlyfS96b25laW5mby9NRVQgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICAgICAgJHtkYXRhZGlyfS96b25laW5mby9NU1QgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICAgICAgJHtkYXRhZGlyfS96b25laW5mby9NU1Q3TURUICAgICAgICAgICAgICBcCi0gICAgICAgICAgICAgICAgJHtkYXRhZGlyfS96b25laW5mby9OWiAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICAgICAgJHtkYXRhZGlyfS96b25laW5mby9OWi1DSEFUICAgICAgICAgICAgICBcCi0gICAgICAgICAgICAgICAgJHtkYXRhZGlyfS96b25laW5mby9QUkMgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICAgICAgJHtkYXRhZGlyfS96b25laW5mby9QU1Q4UERUICAgICAgICAgICAgICBcCi0gICAgICAgICAgICAgICAgJHtkYXRhZGlyfS96b25laW5mby9ST0MgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICAgICAgJHtkYXRhZGlyfS96b25laW5mby9ST0sgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICAgICAgJHtkYXRhZGlyfS96b25laW5mby9VQ1QgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICAgICAgJHtkYXRhZGlyfS96b25laW5mby9VVEMgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICAgICAgJHtkYXRhZGlyfS96b25laW5mby9Vbml2ZXJzYWwgICAgICAgICAgICBcCi0gICAgICAgICAgICAgICAgJHtkYXRhZGlyfS96b25laW5mby9XLVNVICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICAgICAgJHtkYXRhZGlyfS96b25laW5mby9XRVQgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICAgICAgJHtkYXRhZGlyfS96b25laW5mby9adWx1ICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICAgICAgJHtkYXRhZGlyfS96b25laW5mby96b25lLnRhYiAgICAgICAgICAgICBcCi0gICAgICAgICAgICAgICAgJHtkYXRhZGlyfS96b25laW5mby9pc28zMTY2LnRhYiAgICAgICAgICBcCi0gICAgICAgICAgICAgICAgJHtkYXRhZGlyfS96b25laW5mby9FdGMvKiIKLQotQ09ORkZJTEVTXyR7UE59ICs9ICIke0AgIiR7c3lzY29uZmRpcn0vdGltZXpvbmUiIGlmIGJiLnV0aWxzLnRvX2Jvb2xlYW4oZC5nZXRWYXIoJ0lOU1RBTExfVElNRVpPTkVfRklMRScsIFRydWUpKSBlbHNlICIiIH0iCi1DT05GRklMRVNfJHtQTn0gKz0gIiR7c3lzY29uZmRpcn0vbG9jYWx0aW1lIgpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC90emRhdGEvdHpkYXRhXzIwMTZnLmJiIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC90emRhdGEvdHpkYXRhXzIwMTZnLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNlZTRiNWEKLS0tIC9kZXYvbnVsbAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3R6ZGF0YS90emRhdGFfMjAxNmcuYmIKQEAgLTAsMCArMSwyMTMgQEAKK1NVTU1BUlkgPSAiVGltZXpvbmUgZGF0YSIKK0hPTUVQQUdFID0gImh0dHA6Ly93d3cuaWFuYS5vcmcvdGltZS16b25lcyIKK1NFQ1RJT04gPSAiYmFzZSIKK0xJQ0VOU0UgPSAiUEQgJiBCU0QgJiBCU0QtMy1DbGF1c2UiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9MSUNFTlNFO21kNT1lZjFhMzUyYjkwMWVlN2I3NWE3NWRmODE3MWQ2YWNhNyIKKworREVQRU5EUyA9ICJ0emNvZGUtbmF0aXZlIgorCitTUkNfVVJJID0gImh0dHA6Ly93d3cuaWFuYS5vcmcvdGltZS16b25lcy9yZXBvc2l0b3J5L3JlbGVhc2VzL3R6ZGF0YSR7UFZ9LnRhci5nejtuYW1lPXR6ZGF0YSIKK1VQU1RSRUFNX0NIRUNLX1VSSSA9ICJodHRwOi8vd3d3LmlhbmEub3JnL3RpbWUtem9uZXMiCisKK1NSQ19VUklbdHpkYXRhLm1kNXN1bV0gPSAiM2M3ZTk3ZWM4NTI3MjExMTA0ZDI3Y2MxZDk3YTIzZGUiCitTUkNfVVJJW3R6ZGF0YS5zaGEyNTZzdW1dID0gIjNjNzEzN2IyYmM0NzMyM2IwZGU0N2I3Nzc4NmJhY2Y4MWVkNTAzZDRiMmM2OTNmZjhhZGEyZmJkMTI4MWViZDEiCisKK2luaGVyaXQgYWxsYXJjaAorCitSQ09ORkxJQ1RTXyR7UE59ID0gInRpbWV6b25lcyB0aW1lem9uZS1hZnJpY2EgdGltZXpvbmUtYW1lcmljYSB0aW1lem9uZS1hbnRhcmN0aWNhIFwKKyAgICAgICAgICAgICB0aW1lem9uZS1hcmN0aWMgdGltZXpvbmUtYXNpYSB0aW1lem9uZS1hdGxhbnRpYyBcCisgICAgICAgICAgICAgdGltZXpvbmUtYXVzdHJhbGlhIHRpbWV6b25lLWV1cm9wZSB0aW1lem9uZS1pbmRpYW4gXAorICAgICAgICAgICAgIHRpbWV6b25lLWlzbzMxNjYudGFiIHRpbWV6b25lLXBhY2lmaWMgdGltZXpvbmUtem9uZS50YWIiCisKK1MgPSAiJHtXT1JLRElSfSIKKworREVGQVVMVF9USU1FWk9ORSA/PSAiVW5pdmVyc2FsIgorSU5TVEFMTF9USU1FWk9ORV9GSUxFID89ICIxIgorCitUWk9ORVM9ICJhZnJpY2EgYW50YXJjdGljYSBhc2lhIGF1c3RyYWxhc2lhIGV1cm9wZSBub3J0aGFtZXJpY2Egc291dGhhbWVyaWNhICBcCisgICAgICAgICBmYWN0b3J5IGV0Y2V0ZXJhIGJhY2t3YXJkIHN5c3RlbXYgXAorICAgICAgICAiCisjIHBhY2lmaWNuZXcgCisKK2RvX2NvbXBpbGUgKCkgeworICAgICAgICBmb3Igem9uZSBpbiAke1RaT05FU307IGRvIFwKKyAgICAgICAgICAgICR7U1RBR0lOR19CSU5ESVJfTkFUSVZFfS96aWMgLWQgJHtXT1JLRElSfSR7ZGF0YWRpcn0vem9uZWluZm8gLUwgL2Rldi9udWxsIFwKKyAgICAgICAgICAgICAgICAteSAke1N9L3llYXJpc3R5cGUuc2ggJHtTfS8ke3pvbmV9IDsgXAorICAgICAgICAgICAgJHtTVEFHSU5HX0JJTkRJUl9OQVRJVkV9L3ppYyAtZCAke1dPUktESVJ9JHtkYXRhZGlyfS96b25laW5mby9wb3NpeCAtTCAvZGV2L251bGwgXAorICAgICAgICAgICAgICAgIC15ICR7U30veWVhcmlzdHlwZS5zaCAke1N9LyR7em9uZX0gOyBcCisgICAgICAgICAgICAke1NUQUdJTkdfQklORElSX05BVElWRX0vemljIC1kICR7V09SS0RJUn0ke2RhdGFkaXJ9L3pvbmVpbmZvL3JpZ2h0IC1MICR7U30vbGVhcHNlY29uZHMgXAorICAgICAgICAgICAgICAgIC15ICR7U30veWVhcmlzdHlwZS5zaCAke1N9LyR7em9uZX0gOyBcCisgICAgICAgIGRvbmUKK30KKworZG9faW5zdGFsbCAoKSB7CisgICAgICAgIGluc3RhbGwgLWQgJHtEfS8kZXhlY19wcmVmaXggJHtEfSR7ZGF0YWRpcn0vem9uZWluZm8KKyAgICAgICAgY3AgLXBQUiAke1N9LyRleGVjX3ByZWZpeCAke0R9LworICAgICAgICAjIGxpYmMgaXMgcmVtb3Zpbmcgem9uZWluZm8gZmlsZXMgZnJvbSBwYWNrYWdlCisgICAgICAgIGNwIC1wUCAiJHtTfS96b25lLnRhYiIgJHtEfSR7ZGF0YWRpcn0vem9uZWluZm8KKyAgICAgICAgY3AgLXBQICIke1N9L2lzbzMxNjYudGFiIiAke0R9JHtkYXRhZGlyfS96b25laW5mbworCisgICAgICAgICMgSW5zdGFsbCBkZWZhdWx0IHRpbWV6b25lCisgICAgICAgIGlmIFsgLWUgJHtEfSR7ZGF0YWRpcn0vem9uZWluZm8vJHtERUZBVUxUX1RJTUVaT05FfSBdOyB0aGVuCisgICAgICAgICAgICBpbnN0YWxsIC1kICR7RH0ke3N5c2NvbmZkaXJ9CisgICAgICAgICAgICBpZiBbICIke0lOU1RBTExfVElNRVpPTkVfRklMRX0iID0gIjEiIF07IHRoZW4KKyAgICAgICAgICAgICAgICBlY2hvICR7REVGQVVMVF9USU1FWk9ORX0gPiAke0R9JHtzeXNjb25mZGlyfS90aW1lem9uZQorICAgICAgICAgICAgZmkKKyAgICAgICAgICAgIGxuIC1zICR7ZGF0YWRpcn0vem9uZWluZm8vJHtERUZBVUxUX1RJTUVaT05FfSAke0R9JHtzeXNjb25mZGlyfS9sb2NhbHRpbWUKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgYmJlcnJvciAiREVGQVVMVF9USU1FWk9ORSBpcyBzZXQgdG8gYW4gaW52YWxpZCB2YWx1ZS4iCisgICAgICAgICAgICBleGl0IDEKKyAgICAgICAgZmkKKworICAgICAgICBjaG93biAtUiByb290OnJvb3QgJHtEfQorfQorCitwa2dfcG9zdGluc3RfJHtQTn0gKCkgeworCWV0Y19sdD0iJEQke3N5c2NvbmZkaXJ9L2xvY2FsdGltZSIKKwlzcmM9IiREJHtzeXNjb25mZGlyfS90aW1lem9uZSIKKworCWlmIFsgLWUgJHtzcmN9IF0gOyB0aGVuCisJCXR6PSQoc2VkIC1lICdzOiMuKjo6JyAtZSAnczpbWzpzcGFjZTpdXSo6OmcnIC1lICcvXiQvZCcgIiR7c3JjfSIpCisJZmkKKwkKKwlpZiBbIC16ICIke3R6fSIgXSA7IHRoZW4KKwkJZXhpdCAwCisJZmkKKwkKKwlpZiBbICEgLWUgIiREJHtkYXRhZGlyfS96b25laW5mby8ke3R6fSIgXSA7IHRoZW4KKwkJZWNobyAiWW91IGhhdmUgYW4gaW52YWxpZCBUSU1FWk9ORSBzZXR0aW5nIGluICR7c3JjfSIKKwkJZWNobyAiWW91ciAke2V0Y19sdH0gaGFzIGJlZW4gcmVzZXQgdG8gVW5pdmVyc2FsOyBlbmpveSEiCisJCXR6PSJVbml2ZXJzYWwiCisJCWVjaG8gIlVwZGF0aW5nICR7ZXRjX2x0fSB3aXRoICREJHtkYXRhZGlyfS96b25laW5mby8ke3R6fSIKKwkJaWYgWyAtTCAke2V0Y19sdH0gXSA7IHRoZW4KKwkJCXJtIC1mICIke2V0Y19sdH0iCisJCWZpCisJCWxuIC1zICIke2RhdGFkaXJ9L3pvbmVpbmZvLyR7dHp9IiAiJHtldGNfbHR9IgorCWZpCit9CisKKyMgUGFja2FnZXMgcHJpbWFyaWx5IG9yZ2FuaXplZCBieSBkaXJlY3Rvcnkgd2l0aCBhIG1ham9yIGNpdHkKKyMgaW4gbW9zdCB0aW1lIHpvbmVzIGluIHRoZSBiYXNlIHBhY2thZ2UKKworUEFDS0FHRVMgPSAidHpkYXRhIHR6ZGF0YS1taXNjIHR6ZGF0YS1wb3NpeCB0emRhdGEtcmlnaHQgdHpkYXRhLWFmcmljYSBcCisgICAgdHpkYXRhLWFtZXJpY2FzIHR6ZGF0YS1hbnRhcmN0aWNhIHR6ZGF0YS1hcmN0aWMgdHpkYXRhLWFzaWEgXAorICAgIHR6ZGF0YS1hdGxhbnRpYyB0emRhdGEtYXVzdHJhbGlhIHR6ZGF0YS1ldXJvcGUgdHpkYXRhLXBhY2lmaWMiCisKK0ZJTEVTX3R6ZGF0YS1hZnJpY2EgKz0gIiR7ZGF0YWRpcn0vem9uZWluZm8vQWZyaWNhLyoiCitSUFJPVklERVNfdHpkYXRhLWFmcmljYSA9ICJ0emRhdGEtYWZyaWNhIgorCitGSUxFU190emRhdGEtYW1lcmljYXMgKz0gIiR7ZGF0YWRpcn0vem9uZWluZm8vQW1lcmljYS8qICBcCisgICAgICAgICAgICAgICAgJHtkYXRhZGlyfS96b25laW5mby9VUy8qICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAke2RhdGFkaXJ9L3pvbmVpbmZvL0JyYXppbC8qICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICR7ZGF0YWRpcn0vem9uZWluZm8vQ2FuYWRhLyogICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgJHtkYXRhZGlyfS96b25laW5mby9NZXhpY28vKiAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAke2RhdGFkaXJ9L3pvbmVpbmZvL0NoaWxlLyoiCitSUFJPVklERVNfdHpkYXRhLWFtZXJpY2FzID0gInR6ZGF0YS1hbWVyaWNhcyIKKworRklMRVNfdHpkYXRhLWFudGFyY3RpY2EgKz0gIiR7ZGF0YWRpcn0vem9uZWluZm8vQW50YXJjdGljYS8qIgorUlBST1ZJREVTX3R6ZGF0YS1hbnRhcmN0aWNhID0gInR6ZGF0YS1hbnRhcmN0aWNhIgorCitGSUxFU190emRhdGEtYXJjdGljICs9ICIke2RhdGFkaXJ9L3pvbmVpbmZvL0FyY3RpYy8qIgorUlBST1ZJREVTX3R6ZGF0YS1hcmN0aWMgPSAidHpkYXRhLWFyY3RpYyIKKworRklMRVNfdHpkYXRhLWFzaWEgKz0gIiR7ZGF0YWRpcn0vem9uZWluZm8vQXNpYS8qICAgICAgICBcCisgICAgICAgICAgICAgICAgJHtkYXRhZGlyfS96b25laW5mby9JbmRpYW4vKiAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAke2RhdGFkaXJ9L3pvbmVpbmZvL01pZGVhc3QvKiIKK1JQUk9WSURFU190emRhdGEtYXNpYSA9ICJ0emRhdGEtYXNpYSIKKworRklMRVNfdHpkYXRhLWF0bGFudGljICs9ICIke2RhdGFkaXJ9L3pvbmVpbmZvL0F0bGFudGljLyoiCitSUFJPVklERVNfdHpkYXRhLWF0bGFudGljID0gInR6ZGF0YS1hdGxhbnRpYyIKKworRklMRVNfdHpkYXRhLWF1c3RyYWxpYSArPSAiJHtkYXRhZGlyfS96b25laW5mby9BdXN0cmFsaWEvKiIKK1JQUk9WSURFU190emRhdGEtYXVzdHJhbGlhID0gInR6ZGF0YS1hdXN0cmFsaWEiCisKK0ZJTEVTX3R6ZGF0YS1ldXJvcGUgKz0gIiR7ZGF0YWRpcn0vem9uZWluZm8vRXVyb3BlLyoiCitSUFJPVklERVNfdHpkYXRhLWV1cm9wZSA9ICJ0emRhdGEtZXVyb3BlIgorCitGSUxFU190emRhdGEtcGFjaWZpYyArPSAiJHtkYXRhZGlyfS96b25laW5mby9QYWNpZmljLyoiCitSUFJPVklERVNfdHpkYXRhLXBhY2lmaWMgPSAidHpkYXRhLXBhY2lmaWMiCisKK0ZJTEVTX3R6ZGF0YS1wb3NpeCArPSAiJHtkYXRhZGlyfS96b25laW5mby9wb3NpeC8qIgorUlBST1ZJREVTX3R6ZGF0YS1wb3NpeCA9ICJ0emRhdGEtcG9zaXgiCisKK0ZJTEVTX3R6ZGF0YS1yaWdodCArPSAiJHtkYXRhZGlyfS96b25laW5mby9yaWdodC8qIgorUlBST1ZJREVTX3R6ZGF0YS1yaWdodCA9ICJ0emRhdGEtcmlnaHQiCisKKworRklMRVNfdHpkYXRhLW1pc2MgKz0gIiR7ZGF0YWRpcn0vem9uZWluZm8vQ3ViYSAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICR7ZGF0YWRpcn0vem9uZWluZm8vRWd5cHQgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICR7ZGF0YWRpcn0vem9uZWluZm8vRWlyZSAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICR7ZGF0YWRpcn0vem9uZWluZm8vRmFjdG9yeSAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICR7ZGF0YWRpcn0vem9uZWluZm8vR0ItRWlyZSAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICR7ZGF0YWRpcn0vem9uZWluZm8vSG9uZ2tvbmcgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICR7ZGF0YWRpcn0vem9uZWluZm8vSWNlbGFuZCAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICR7ZGF0YWRpcn0vem9uZWluZm8vSXJhbiAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICR7ZGF0YWRpcn0vem9uZWluZm8vSXNyYWVsICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICR7ZGF0YWRpcn0vem9uZWluZm8vSmFtYWljYSAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICR7ZGF0YWRpcn0vem9uZWluZm8vSmFwYW4gICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICR7ZGF0YWRpcn0vem9uZWluZm8vS3dhamFsZWluICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICR7ZGF0YWRpcn0vem9uZWluZm8vTGlieWEgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICR7ZGF0YWRpcn0vem9uZWluZm8vTmF2YWpvICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICR7ZGF0YWRpcn0vem9uZWluZm8vUG9sYW5kICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICR7ZGF0YWRpcn0vem9uZWluZm8vUG9ydHVnYWwgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICR7ZGF0YWRpcn0vem9uZWluZm8vU2luZ2Fwb3JlICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICR7ZGF0YWRpcn0vem9uZWluZm8vVHVya2V5IgorUlBST1ZJREVTX3R6ZGF0YS1taXNjID0gInR6ZGF0YS1taXNjIgorCisKK0ZJTEVTXyR7UE59ICs9ICIke2RhdGFkaXJ9L3pvbmVpbmZvL1BhY2lmaWMvSG9ub2x1bHUgICAgIFwKKyAgICAgICAgICAgICAgICAke2RhdGFkaXJ9L3pvbmVpbmZvL0FtZXJpY2EvQW5jaG9yYWdlICAgIFwKKyAgICAgICAgICAgICAgICAke2RhdGFkaXJ9L3pvbmVpbmZvL0FtZXJpY2EvTG9zX0FuZ2VsZXMgIFwKKyAgICAgICAgICAgICAgICAke2RhdGFkaXJ9L3pvbmVpbmZvL0FtZXJpY2EvRGVudmVyICAgICAgIFwKKyAgICAgICAgICAgICAgICAke2RhdGFkaXJ9L3pvbmVpbmZvL0FtZXJpY2EvQ2hpY2FnbyAgICAgIFwKKyAgICAgICAgICAgICAgICAke2RhdGFkaXJ9L3pvbmVpbmZvL0FtZXJpY2EvTmV3X1lvcmsgICAgIFwKKyAgICAgICAgICAgICAgICAke2RhdGFkaXJ9L3pvbmVpbmZvL0FtZXJpY2EvQ2FyYWNhcyAgICAgIFwKKyAgICAgICAgICAgICAgICAke2RhdGFkaXJ9L3pvbmVpbmZvL0FtZXJpY2EvU2FvX1BhdWxvICAgIFwKKyAgICAgICAgICAgICAgICAke2RhdGFkaXJ9L3pvbmVpbmZvL0V1cm9wZS9Mb25kb24gICAgICAgIFwKKyAgICAgICAgICAgICAgICAke2RhdGFkaXJ9L3pvbmVpbmZvL0V1cm9wZS9QYXJpcyAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAke2RhdGFkaXJ9L3pvbmVpbmZvL0FmcmljYS9DYWlybyAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAke2RhdGFkaXJ9L3pvbmVpbmZvL0V1cm9wZS9Nb3Njb3cgICAgICAgIFwKKyAgICAgICAgICAgICAgICAke2RhdGFkaXJ9L3pvbmVpbmZvL0FzaWEvRHViYWkgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAke2RhdGFkaXJ9L3pvbmVpbmZvL0FzaWEvS2FyYWNoaSAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAke2RhdGFkaXJ9L3pvbmVpbmZvL0FzaWEvRGhha2EgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAke2RhdGFkaXJ9L3pvbmVpbmZvL0FzaWEvQmFua29rICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAke2RhdGFkaXJ9L3pvbmVpbmZvL0FzaWEvSG9uZ19Lb25nICAgICAgIFwKKyAgICAgICAgICAgICAgICAke2RhdGFkaXJ9L3pvbmVpbmZvL0FzaWEvVG9reW8gICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAke2RhdGFkaXJ9L3pvbmVpbmZvL0F1c3RyYWxpYS9EYXJ3aW4gICAgIFwKKyAgICAgICAgICAgICAgICAke2RhdGFkaXJ9L3pvbmVpbmZvL0F1c3RyYWxpYS9BZGVsYWlkZSAgIFwKKyAgICAgICAgICAgICAgICAke2RhdGFkaXJ9L3pvbmVpbmZvL0F1c3RyYWxpYS9CcmlzYmFuZSAgIFwKKyAgICAgICAgICAgICAgICAke2RhdGFkaXJ9L3pvbmVpbmZvL0F1c3RyYWxpYS9TeWRuZXkgICAgIFwKKyAgICAgICAgICAgICAgICAke2RhdGFkaXJ9L3pvbmVpbmZvL1BhY2lmaWMvTm91bWVhICAgICAgIFwKKyAgICAgICAgICAgICAgICAke2RhdGFkaXJ9L3pvbmVpbmZvL0NFVCAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAke2RhdGFkaXJ9L3pvbmVpbmZvL0NTVDZDRFQgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAke2RhdGFkaXJ9L3pvbmVpbmZvL0VFVCAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAke2RhdGFkaXJ9L3pvbmVpbmZvL0VTVCAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAke2RhdGFkaXJ9L3pvbmVpbmZvL0VTVDVFRFQgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAke2RhdGFkaXJ9L3pvbmVpbmZvL0dCICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAke2RhdGFkaXJ9L3pvbmVpbmZvL0dNVCAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAke2RhdGFkaXJ9L3pvbmVpbmZvL0dNVCswICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAke2RhdGFkaXJ9L3pvbmVpbmZvL0dNVC0wICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAke2RhdGFkaXJ9L3pvbmVpbmZvL0dNVDAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAke2RhdGFkaXJ9L3pvbmVpbmZvL0dyZWVud2ljaCAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAke2RhdGFkaXJ9L3pvbmVpbmZvL0hTVCAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAke2RhdGFkaXJ9L3pvbmVpbmZvL01FVCAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAke2RhdGFkaXJ9L3pvbmVpbmZvL01TVCAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAke2RhdGFkaXJ9L3pvbmVpbmZvL01TVDdNRFQgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAke2RhdGFkaXJ9L3pvbmVpbmZvL05aICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAke2RhdGFkaXJ9L3pvbmVpbmZvL05aLUNIQVQgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAke2RhdGFkaXJ9L3pvbmVpbmZvL1BSQyAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAke2RhdGFkaXJ9L3pvbmVpbmZvL1BTVDhQRFQgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAke2RhdGFkaXJ9L3pvbmVpbmZvL1JPQyAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAke2RhdGFkaXJ9L3pvbmVpbmZvL1JPSyAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAke2RhdGFkaXJ9L3pvbmVpbmZvL1VDVCAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAke2RhdGFkaXJ9L3pvbmVpbmZvL1VUQyAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAke2RhdGFkaXJ9L3pvbmVpbmZvL1VuaXZlcnNhbCAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAke2RhdGFkaXJ9L3pvbmVpbmZvL1ctU1UgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAke2RhdGFkaXJ9L3pvbmVpbmZvL1dFVCAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAke2RhdGFkaXJ9L3pvbmVpbmZvL1p1bHUgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAke2RhdGFkaXJ9L3pvbmVpbmZvL3pvbmUudGFiICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAke2RhdGFkaXJ9L3pvbmVpbmZvL2lzbzMxNjYudGFiICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAke2RhdGFkaXJ9L3pvbmVpbmZvL0V0Yy8qIgorCitDT05GRklMRVNfJHtQTn0gKz0gIiR7QCAiJHtzeXNjb25mZGlyfS90aW1lem9uZSIgaWYgYmIudXRpbHMudG9fYm9vbGVhbihkLmdldFZhcignSU5TVEFMTF9USU1FWk9ORV9GSUxFJywgVHJ1ZSkpIGVsc2UgIiIgfSIKK0NPTkZGSUxFU18ke1BOfSArPSAiJHtzeXNjb25mZGlyfS9sb2NhbHRpbWUiCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3VuemlwL3VuemlwL2ZpeC1zZWN1cml0eS1mb3JtYXQucGF0Y2ggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3VuemlwL3VuemlwL2ZpeC1zZWN1cml0eS1mb3JtYXQucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGU5YjA2YwotLS0gL2Rldi9udWxsCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvdW56aXAvdW56aXAvZml4LXNlY3VyaXR5LWZvcm1hdC5wYXRjaApAQCAtMCwwICsxLDk3IEBACit1bnppcDogRml4aW5nIHNlY3VyaXR5IGZvcm1hdHRpbmcgaXNzdWVzCisKK0ZpeCBzZWN1cml0eSBmb3JtYXR0aW5nIGlzc3VlcyByZWxhdGVkIHRvIHNwcmludGYgcGFyYW1ldGVycyBleHBldGVkLiAKKworW1lPQ1RPICM5NTUxXQorW2h0dHBzOi8vYnVnemlsbGEueW9jdG9wcm9qZWN0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9OTU1MV0KKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK1NpZ25lZC1vZmYtYnk6IEVkd2luIFBsYXVjaHUgPGVkd2luLnBsYXVjaHUuY2FtYWNob0BpbnRlbC5jb20+CisKK2RpZmYgLS1naXQgYS9leHRyYWN0LmMgYi9leHRyYWN0LmMKK2luZGV4IDdjZDkxMjMuLjI1YzVhNjIgMTAwNjQ0CistLS0gYS9leHRyYWN0LmMKKysrKyBiL2V4dHJhY3QuYworQEAgLTQ3NSw3ICs0NzUsNyBAQCBpbnQgZXh0cmFjdF9vcl90ZXN0X2ZpbGVzKF9fRykgICAgLyogcmV0dXJuIFBLLXR5cGUgZXJyb3IgY29kZSAqLworICAgICAgICAgICAgICAgICAgICAgSW5mbyhzbGlkZSwgMHg0MDEsICgoY2hhciAqKXNsaWRlLAorICAgICAgICAgICAgICAgICAgICAgICBMb2FkRmFyU3RyaW5nKENlbnRTaWdNc2cpLCBqICsgYmxrbnVtKkRJUl9CTEtTSVogKyAxKSk7CisgICAgICAgICAgICAgICAgICAgICBJbmZvKHNsaWRlLCAweDQwMSwgKChjaGFyICopc2xpZGUsCistICAgICAgICAgICAgICAgICAgICAgIExvYWRGYXJTdHJpbmcoUmVwb3J0TXNnKSkpOworKyAgICAgICAgICAgICAgICAgICAgICAiJXMiLExvYWRGYXJTdHJpbmcoUmVwb3J0TXNnKSkpOworICAgICAgICAgICAgICAgICAgICAgZXJyb3JfaW5fYXJjaGl2ZSA9IFBLX0JBREVSUjsKKyAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICByZWFjaGVkX2VuZCA9IFRSVUU7ICAgICAvKiAuLi5zbyBubyBtb3JlIGxlZnQgdG8gZG8gKi8KK0BAIC03NTQsOCArNzU0LDggQEAgaW50IGV4dHJhY3Rfb3JfdGVzdF9maWxlcyhfX0cpICAgIC8qIHJldHVybiBQSy10eXBlIGVycm9yIGNvZGUgKi8KKworICNpZm5kZWYgU0ZYCisgICAgIGlmIChub19lbmRzaWdfZm91bmQpIHsgICAgICAgICAgICAgICAgICAgICAgLyoganVzdCB0byBtYWtlIHN1cmUgKi8KKy0gICAgICAgIEluZm8oc2xpZGUsIDB4NDAxLCAoKGNoYXIgKilzbGlkZSwgTG9hZEZhclN0cmluZyhFbmRTaWdNc2cpKSk7CistICAgICAgICBJbmZvKHNsaWRlLCAweDQwMSwgKChjaGFyICopc2xpZGUsIExvYWRGYXJTdHJpbmcoUmVwb3J0TXNnKSkpOworKyAgICAgICAgSW5mbyhzbGlkZSwgMHg0MDEsICgoY2hhciAqKXNsaWRlLCAiJXMiLCBMb2FkRmFyU3RyaW5nKEVuZFNpZ01zZykpKTsKKysgICAgICAgIEluZm8oc2xpZGUsIDB4NDAxLCAoKGNoYXIgKilzbGlkZSwgIiVzIiwgTG9hZEZhclN0cmluZyhSZXBvcnRNc2cpKSk7CisgICAgICAgICBpZiAoIWVycm9yX2luX2FyY2hpdmUpICAgICAgIC8qIGRvbid0IG92ZXJ3cml0ZSBzdHJvbmdlciBlcnJvciAqLworICAgICAgICAgICAgIGVycm9yX2luX2FyY2hpdmUgPSBQS19XQVJOOworICAgICB9CitkaWZmIC0tZ2l0IGEvbGlzdC5jIGIvbGlzdC5jCitpbmRleCAxNWUwMDExLi4wYjQ4NGY2IDEwMDY0NAorLS0tIGEvbGlzdC5jCisrKysgYi9saXN0LmMKK0BAIC0xODEsNyArMTgxLDcgQEAgaW50IGxpc3RfZmlsZXMoX19HKSAgICAvKiByZXR1cm4gUEstdHlwZSBlcnJvciBjb2RlICovCisgICAgICAgICAgICAgICAgIEluZm8oc2xpZGUsIDB4NDAxLAorICAgICAgICAgICAgICAgICAgICAgICgoY2hhciAqKXNsaWRlLCBMb2FkRmFyU3RyaW5nKENlbnRTaWdNc2cpLCBqKSk7CisgICAgICAgICAgICAgICAgIEluZm8oc2xpZGUsIDB4NDAxLAorLSAgICAgICAgICAgICAgICAgICAgICgoY2hhciAqKXNsaWRlLCBMb2FkRmFyU3RyaW5nKFJlcG9ydE1zZykpKTsKKysgICAgICAgICAgICAgICAgICAgICAoKGNoYXIgKilzbGlkZSwgIiVzIiwgTG9hZEZhclN0cmluZyhSZXBvcnRNc2cpKSk7CisgICAgICAgICAgICAgICAgIHJldHVybiBQS19CQURFUlI7ICAgLyogc2lnIG5vdCBmb3VuZCAqLworICAgICAgICAgICAgIH0KKyAgICAgICAgIH0KK0BAIC01MDcsNyArNTA3LDcgQEAgaW50IGxpc3RfZmlsZXMoX19HKSAgICAvKiByZXR1cm4gUEstdHlwZSBlcnJvciBjb2RlICovCisgICAgICAgICAgICAgJiYgKCFHLmVjcmVjLmlzX3ppcDY0X2FyY2hpdmUpCisgICAgICAgICAgICAgJiYgKG1lbWNtcChHLnNpZywgZW5kX2NlbnRyYWxfc2lnLCA0KSAhPSAwKQorICAgICAgICAgICAgKSB7ICAgICAgICAgIC8qIGp1c3QgdG8gbWFrZSBzdXJlIGFnYWluICovCistICAgICAgICAgICAgSW5mbyhzbGlkZSwgMHg0MDEsICgoY2hhciAqKXNsaWRlLCBMb2FkRmFyU3RyaW5nKEVuZFNpZ01zZykpKTsKKysgICAgICAgICAgICBJbmZvKHNsaWRlLCAweDQwMSwgKChjaGFyICopc2xpZGUsICIlcyIsIExvYWRGYXJTdHJpbmcoRW5kU2lnTXNnKSkpOworICAgICAgICAgICAgIGVycm9yX2luX2FyY2hpdmUgPSBQS19XQVJOOyAgIC8qIGRpZG4ndCBmaW5kIHNpZyAqLworICAgICAgICAgfQorCitAQCAtNTkxLDcgKzU5MSw3IEBAIGludCBnZXRfdGltZV9zdGFtcChfX0dfXyBsYXN0X21vZHRpbWUsIG5tZW1iZXIpICAvKiByZXR1cm4gUEstdHlwZSBlcnJvciBjb2RlICovCisgICAgICAgICAgICAgICAgIEluZm8oc2xpZGUsIDB4NDAxLAorICAgICAgICAgICAgICAgICAgICAgICgoY2hhciAqKXNsaWRlLCBMb2FkRmFyU3RyaW5nKENlbnRTaWdNc2cpLCBqKSk7CisgICAgICAgICAgICAgICAgIEluZm8oc2xpZGUsIDB4NDAxLAorLSAgICAgICAgICAgICAgICAgICAgICgoY2hhciAqKXNsaWRlLCBMb2FkRmFyU3RyaW5nKFJlcG9ydE1zZykpKTsKKysgICAgICAgICAgICAgICAgICAgICAoKGNoYXIgKilzbGlkZSwgIiVzIiwgTG9hZEZhclN0cmluZyhSZXBvcnRNc2cpKSk7CisgICAgICAgICAgICAgICAgIHJldHVybiBQS19CQURFUlI7ICAgLyogc2lnIG5vdCBmb3VuZCAqLworICAgICAgICAgICAgIH0KKyAgICAgICAgIH0KK0BAIC02NzQsNyArNjc0LDcgQEAgaW50IGdldF90aW1lX3N0YW1wKF9fR19fIGxhc3RfbW9kdGltZSwgbm1lbWJlcikgIC8qIHJldHVybiBQSy10eXBlIGVycm9yIGNvZGUgKi8KKyAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisgCisgICAgIGlmIChtZW1jbXAoRy5zaWcsIGVuZF9jZW50cmFsX3NpZywgNCkpIHsgICAgLyoganVzdCB0byBtYWtlIHN1cmUgYWdhaW4gKi8KKy0gICAgICAgIEluZm8oc2xpZGUsIDB4NDAxLCAoKGNoYXIgKilzbGlkZSwgTG9hZEZhclN0cmluZyhFbmRTaWdNc2cpKSk7CisrICAgICAgICBJbmZvKHNsaWRlLCAweDQwMSwgKChjaGFyICopc2xpZGUsICIlcyIsIExvYWRGYXJTdHJpbmcoRW5kU2lnTXNnKSkpOworICAgICAgICAgZXJyb3JfaW5fYXJjaGl2ZSA9IFBLX1dBUk47CisgICAgIH0KKyAgICAgaWYgKCpubWVtYmVyID09IDBMICYmIGVycm9yX2luX2FyY2hpdmUgPD0gUEtfV0FSTikKK2RpZmYgLS1naXQgYS96aXBpbmZvLmMgYi96aXBpbmZvLmMKK2luZGV4IDBhYzc1YjMuLjFlN2ZhODIgMTAwNjQ0CistLS0gYS96aXBpbmZvLmMKKysrKyBiL3ppcGluZm8uYworQEAgLTgzMyw3ICs4MzMsNyBAQCBpbnQgemlwaW5mbyhfX0cpICAgLyogcmV0dXJuIFBLLXR5cGUgZXJyb3IgY29kZSAqLworICAgICAgICAgICAgICAgICBJbmZvKHNsaWRlLCAweDQwMSwKKyAgICAgICAgICAgICAgICAgICAgICAoKGNoYXIgKilzbGlkZSwgTG9hZEZhclN0cmluZyhDZW50U2lnTXNnKSwgaikpOworICAgICAgICAgICAgICAgICBJbmZvKHNsaWRlLCAweDQwMSwKKy0gICAgICAgICAgICAgICAgICAgICAoKGNoYXIgKilzbGlkZSwgTG9hZEZhclN0cmluZyhSZXBvcnRNc2cpKSk7CisrICAgICAgICAgICAgICAgICAgICAgKChjaGFyICopc2xpZGUsICIlcyIsIExvYWRGYXJTdHJpbmcoUmVwb3J0TXNnKSkpOworICAgICAgICAgICAgICAgICBlcnJvcl9pbl9hcmNoaXZlID0gUEtfQkFERVJSOyAgIC8qIHNpZyBub3QgZm91bmQgKi8KKyAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgfQorQEAgLTEwMjIsNyArMTAyMiw3IEBAIGludCB6aXBpbmZvKF9fRykgICAvKiByZXR1cm4gUEstdHlwZSBlcnJvciBjb2RlICovCisgICAgICAgICAgICAgJiYgKCFHLmVjcmVjLmlzX3ppcDY0X2FyY2hpdmUpCisgICAgICAgICAgICAgJiYgKG1lbWNtcChHLnNpZywgZW5kX2NlbnRyYWxfc2lnLCA0KSAhPSAwKQorICAgICAgICAgICAgKSB7ICAgICAgICAgIC8qIGp1c3QgdG8gbWFrZSBzdXJlIGFnYWluICovCistICAgICAgICAgICAgSW5mbyhzbGlkZSwgMHg0MDEsICgoY2hhciAqKXNsaWRlLCBMb2FkRmFyU3RyaW5nKEVuZFNpZ01zZykpKTsKKysgICAgICAgICAgICBJbmZvKHNsaWRlLCAweDQwMSwgKChjaGFyICopc2xpZGUsICIlcyIsIExvYWRGYXJTdHJpbmcoRW5kU2lnTXNnKSkpOworICAgICAgICAgICAgIGVycm9yX2luX2FyY2hpdmUgPSBQS19XQVJOOyAgIC8qIGRpZG4ndCBmaW5kIHNpZyAqLworICAgICAgICAgfQorIApkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC91bnppcC91bnppcF82LjAuYmIgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3VuemlwL3VuemlwXzYuMC5iYgppbmRleCA5ZWZlNzU2Li41NDczNzljIDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3VuemlwL3VuemlwXzYuMC5iYgorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3VuemlwL3VuemlwXzYuMC5iYgpAQCAtNiw3ICs2LDcgQEAKIFBFID0gIjEiCiBQUiA9ICJyNSIKIAotU1JDX1VSSSA9ICJmdHA6Ly9mdHAuaW5mby16aXAub3JnL3B1Yi9pbmZvemlwL3NyYy91bnppcDYwLnRneiBcCitTUkNfVVJJID0gIiR7U09VUkNFRk9SR0VfTUlSUk9SfS9pbmZvemlwL1VuWmlwJTIwNi54JTIwJTI4bGF0ZXN0JTI5L1VuWmlwJTIwNi4wL3VuemlwNjAudGFyLmd6IFwKIAlmaWxlOi8vYXZvaWQtc3RyaXAucGF0Y2ggXAogCWZpbGU6Ly9kZWZpbmUtbGRmbGFncy5wYXRjaCBcCiAJZmlsZTovLzA2LXVuemlwNjAtYWx0LWljb252LXV0ZjhfQ1ZFLTIwMTUtMTMxNS5wYXRjaCBcCkBAIC0xNiw2ICsxNiw3IEBACiAJZmlsZTovLzExLWN2ZS0yMDE0LTgxNDEtZ2V0emlwNjRkYXRhLnBhdGNoIFwKIAlmaWxlOi8vQ1ZFLTIwMTUtNzY5Ni5wYXRjaCBcCiAJZmlsZTovL0NWRS0yMDE1LTc2OTcucGF0Y2ggXAorICAgICAgICBmaWxlOi8vZml4LXNlY3VyaXR5LWZvcm1hdC5wYXRjaCBcCiAiCiAKIFNSQ19VUklbbWQ1c3VtXSA9ICI2MmI0OTA0MDc0ODk1MjFkYjg2M2I1MjNhN2Y4NjM3NSIKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvd2F0Y2hkb2cvd2F0Y2hkb2ctY29uZmlnLmJiIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC93YXRjaGRvZy93YXRjaGRvZy1jb25maWcuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGJmNDBmMAotLS0gL2Rldi9udWxsCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvd2F0Y2hkb2cvd2F0Y2hkb2ctY29uZmlnLmJiCkBAIC0wLDAgKzEsMjAgQEAKK1NVTU1BUlkgPSAiU29mdHdhcmUgd2F0Y2hkb2ciCitERVNDUklQVElPTiA9ICJXYXRjaGRvZyBpcyBhIGRhZW1vbiB0aGF0IGNoZWNrcyBpZiB5b3VyIHN5c3RlbSBpcyBzdGlsbCBcCit3b3JraW5nLiBJZiBwcm9ncmFtcyBpbiB1c2VyIHNwYWNlIGFyZSBub3QgbG9uZ2VyIGV4ZWN1dGVkIGl0IHdpbGwgcmVib290IFwKK3RoZSBzeXN0ZW0uIgorSE9NRVBBR0UgPSAiaHR0cDovL3dhdGNoZG9nLnNvdXJjZWZvcmdlLm5ldC8iCitCVUdUUkFDS0VSID0gImh0dHA6Ly9zb3VyY2Vmb3JnZS5uZXQvdHJhY2tlci8/Z3JvdXBfaWQ9MTcyMDMwJmF0aWQ9ODYwMTk0IgorCitMSUNFTlNFID0gIk1JVC1YIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vJHtDT1JFQkFTRX0vbWV0YS9DT1BZSU5HLk1JVDttZDU9M2RhOWNmYmNiNzg4YzgwYTAzODQzNjFiNGRlMjA0MjAiCisKK1NSQ19VUkkgPSAiIFwKKyAgICBmaWxlOi8vd2F0Y2hkb2cuZGVmYXVsdCBcCisgICAgZmlsZTovL3dhdGNoZG9nLmNvbmYgXAorIgorCitkb19pbnN0YWxsKCkgeworICAgIGluc3RhbGwgLURtIDA2NDQgJHtXT1JLRElSfS93YXRjaGRvZy5kZWZhdWx0ICR7RH0ke3N5c2NvbmZkaXJ9L2RlZmF1bHQvd2F0Y2hkb2cKKyAgICBpbnN0YWxsIC1EbSAwNjQ0ICR7V09SS0RJUn0vd2F0Y2hkb2cuY29uZiAke0R9JHtzeXNjb25mZGlyfS93YXRjaGRvZy5jb25mCit9CisKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvd2F0Y2hkb2cvd2F0Y2hkb2ctY29uZmlnL3dhdGNoZG9nLmNvbmYgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3dhdGNoZG9nL3dhdGNoZG9nLWNvbmZpZy93YXRjaGRvZy5jb25mCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM0OTNkMTIKLS0tIC9kZXYvbnVsbAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3dhdGNoZG9nL3dhdGNoZG9nLWNvbmZpZy93YXRjaGRvZy5jb25mCkBAIC0wLDAgKzEsNDIgQEAKKyNwaW5nCQkJPSAxNzIuMzEuMTQuMQorI3BpbmcJCQk9IDE3Mi4yNi4xLjI1NQorI2ludGVyZmFjZQkJPSBldGgwCisjZmlsZQkJCT0gL3Zhci9sb2cvbWVzc2FnZXMKKyNjaGFuZ2UJCQk9IDE0MDcKKworIyBVbmNvbW1lbnQgdG8gZW5hYmxlIHRlc3QuIFNldHRpbmcgb25lIG9mIHRoZXNlIHZhbHVlcyB0byAnMCcgZGlzYWJsZXMgaXQuCisjIFRoZXNlIHZhbHVlcyB3aWxsIGhvcGVmdWxseSBuZXZlciByZWJvb3QgeW91ciBtYWNoaW5lIGR1cmluZyBub3JtYWwgdXNlCisjIChpZiB5b3VyIG1hY2hpbmUgaXMgcmVhbGx5IGh1bmcsIHRoZSBsb2FkYXZnIHdpbGwgZ28gbXVjaCBoaWdoZXIgdGhhbiAyNSkKKyNtYXgtbG9hZC0xCQk9IDI0CisjbWF4LWxvYWQtNQkJPSAxOAorI21heC1sb2FkLTE1CQk9IDEyCisKKyMgTm90ZSB0aGF0IHRoaXMgaXMgdGhlIG51bWJlciBvZiBwYWdlcyEKKyMgVG8gZ2V0IHRoZSByZWFsIHNpemUsIGNoZWNrIGhvdyBsYXJnZSB0aGUgcGFnZXNpemUgaXMgb24geW91ciBtYWNoaW5lLgorI21pbi1tZW1vcnkJCT0gMQorCisjcmVwYWlyLWJpbmFyeQkJPSAvdXNyL3NiaW4vcmVwYWlyCisjcmVwYWlyLXRpbWVvdXQJCT0gCisjdGVzdC1iaW5hcnkJCT0gCisjdGVzdC10aW1lb3V0CQk9IAorCit3YXRjaGRvZy1kZXZpY2UJPSAvZGV2L3dhdGNoZG9nCisKKyMgRGVmYXVsdHMgY29tcGlsZWQgaW50byB0aGUgYmluYXJ5CisjdGVtcGVyYXR1cmUtZGV2aWNlCT0KKyNtYXgtdGVtcGVyYXR1cmUJPSAxMjAKKworIyBEZWZhdWx0cyBjb21waWxlZCBpbnRvIHRoZSBiaW5hcnkKKyNhZG1pbgkJCT0gcm9vdAorI2ludGVydmFsCQk9IDEKKyNsb2d0aWNrICAgICAgICAgICAgICAgID0gMQorI2xvZy1kaXIJCT0gL3Zhci9sb2cvd2F0Y2hkb2cKKworIyBUaGlzIGdyZWF0bHkgZGVjcmVhc2VzIHRoZSBjaGFuY2UgdGhhdCB3YXRjaGRvZyB3b24ndCBiZSBzY2hlZHVsZWQgYmVmb3JlCisjIHlvdXIgbWFjaGluZSBpcyByZWFsbHkgbG9hZGVkCityZWFsdGltZQkJPSB5ZXMKK3ByaW9yaXR5CQk9IDEKKworIyBDaGVjayBpZiByc3lzbG9nZCBpcyBzdGlsbCBydW5uaW5nIGJ5IGVuYWJsaW5nIHRoZSBmb2xsb3dpbmcgbGluZQorI3BpZGZpbGUJCT0gL3Zhci9ydW4vcnN5c2xvZ2QucGlkICAgCisKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvd2F0Y2hkb2cvd2F0Y2hkb2ctY29uZmlnL3dhdGNoZG9nLmRlZmF1bHQgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3dhdGNoZG9nL3dhdGNoZG9nLWNvbmZpZy93YXRjaGRvZy5kZWZhdWx0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY0N2Q1YWIKLS0tIC9kZXYvbnVsbAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3dhdGNoZG9nL3dhdGNoZG9nLWNvbmZpZy93YXRjaGRvZy5kZWZhdWx0CkBAIC0wLDAgKzEsMiBAQAorIyBTdGFydCB3YXRjaGRvZyBhdCBib290IHRpbWU/IDAgb3IgMQorcnVuX3dhdGNoZG9nPTEKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvd2F0Y2hkb2cvd2F0Y2hkb2cvMDAwMS1GaXgtYnVpbGQtaXNzdWVzLWZvdW5kLXdpdGgtbm9uLWdsaWJjLUMtbGlicmFyaWVzLnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC93YXRjaGRvZy93YXRjaGRvZy8wMDAxLUZpeC1idWlsZC1pc3N1ZXMtZm91bmQtd2l0aC1ub24tZ2xpYmMtQy1saWJyYXJpZXMucGF0Y2gKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDhhZmVkNWMuLjAwMDAwMDAKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC93YXRjaGRvZy93YXRjaGRvZy8wMDAxLUZpeC1idWlsZC1pc3N1ZXMtZm91bmQtd2l0aC1ub24tZ2xpYmMtQy1saWJyYXJpZXMucGF0Y2gKKysrIC9kZXYvbnVsbApAQCAtMSw5OSArMCwwIEBACi1Gcm9tIDgzZWMzNGRmMzU3MjE4YTFjOWNmYzEzYTIzZDMzNjdkMzMzNjUyYzMgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCi1Gcm9tOiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgotRGF0ZTogV2VkLCAzMCBEZWMgMjAxNSAwMTowMToxNSArMDAwMAotU3ViamVjdDogW1BBVENIXSBGaXggYnVpbGQgaXNzdWVzIGZvdW5kIHdpdGggbm9uIGdsaWJjIEMgbGlicmFyaWVzCi0KLUFkZCB0aW1lLmggZm9yIGdldHRpbmcgdGltZV90IGRlZmluaXRpb24KLWxpbWl0cy5oIGZvciBQQVRIX01BWAotbGludXgvcGFyYW0uaCBmb3IgRVhFQ19QQUdFU0laRQotUmVwbGFjZSBkZXByZWNhdGVkIE1OVFRBQiB3aXRoIF9QQVRIX01OVFRBQgotaW5jbHVkZSBleHQyX21udC5oIGZvciBNTlRPUFRfVVNSUVVPVEEgYW5kIE1OVE9QVF9HUlBRVU9UQSBhbmQKLU1OVFRZUEVfRVhUMgotSW5jbHVkZSBzeXMvdHlwZXMuaCBmb3IgdV9jaGFyIGRlZmluaXRpb24KLQotU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KLS0tLQotCi1VcHN0cmVhbS1TdGF0dXM6IFN1Ym1pdHRlZAotCi0gaW5jbHVkZS9leHRlcm4uaCB8IDEgKwotIHNyYy9jb25maWdmaWxlLmMgfCAxICsKLSBzcmMvbWVtb3J5LmMgICAgIHwgMyArKysKLSBzcmMvbmV0LmMgICAgICAgIHwgMSArCi0gc3JjL3NodXRkb3duLmMgICB8IDMgKystCi0gNSBmaWxlcyBjaGFuZ2VkLCA4IGluc2VydGlvbnMoKyksIDEgZGVsZXRpb24oLSkKLQotZGlmZiAtLWdpdCBhL2luY2x1ZGUvZXh0ZXJuLmggYi9pbmNsdWRlL2V4dGVybi5oCi1pbmRleCAyMWRiMTFiLi4wNGIxNmJjIDEwMDY0NAotLS0tIGEvaW5jbHVkZS9leHRlcm4uaAotKysrIGIvaW5jbHVkZS9leHRlcm4uaAotQEAgLTMsNiArMyw3IEBACi0gCi0gI2luY2x1ZGUgPG5ldGluZXQvaW4uaD4KLSAjaW5jbHVkZSA8c3RkaW8uaD4KLSsjaW5jbHVkZSA8dGltZS5oPgotIAotICNpbmNsdWRlICJsb2dtZXNzYWdlLmgiCi0gI2luY2x1ZGUgInhtYWxsb2MuaCIKLWRpZmYgLS1naXQgYS9zcmMvY29uZmlnZmlsZS5jIGIvc3JjL2NvbmZpZ2ZpbGUuYwotaW5kZXggYmU1ZDdiMy4uN2MxZDFkZCAxMDA2NDQKLS0tLSBhL3NyYy9jb25maWdmaWxlLmMKLSsrKyBiL3NyYy9jb25maWdmaWxlLmMKLUBAIC0xNiw2ICsxNiw3IEBACi0gI2luY2x1ZGUgPGVycm5vLmg+Ci0gI2luY2x1ZGUgPHN0cmluZy5oPgotICNpbmNsdWRlIDxkaXJlbnQuaD4KLSsjaW5jbHVkZSA8bGltaXRzLmg+Ci0gI2luY2x1ZGUgPHN5cy9zdGF0Lmg+Ci0gCi0gI2luY2x1ZGUgImV4dGVybi5oIgotZGlmZiAtLWdpdCBhL3NyYy9tZW1vcnkuYyBiL3NyYy9tZW1vcnkuYwotaW5kZXggZTk2MDdlNC4uYjVlMDhhYSAxMDA2NDQKLS0tLSBhL3NyYy9tZW1vcnkuYwotKysrIGIvc3JjL21lbW9yeS5jCi1AQCAtMjEsNiArMjEsOSBAQAotICNpbmNsdWRlIDxzeXMvc3RhdC5oPgotICNpbmNsdWRlIDxzeXMvcGFyYW0uaD4KLSAjaW5jbHVkZSA8c3lzL21tYW4uaD4KLSsjaWZkZWYgX19saW51eF9fCi0rI2luY2x1ZGUgPGxpbnV4L3BhcmFtLmg+Ci0rI2VuZGlmCi0gCi0gI2luY2x1ZGUgImV4dGVybi5oIgotICNpbmNsdWRlICJ3YXRjaF9lcnIuaCIKLWRpZmYgLS1naXQgYS9zcmMvbmV0LmMgYi9zcmMvbmV0LmMKLWluZGV4IDIxODIzYWUuLjg5MzBjYWYgMTAwNjQ0Ci0tLS0gYS9zcmMvbmV0LmMKLSsrKyBiL3NyYy9uZXQuYwotQEAgLTE3LDYgKzE3LDcgQEAKLSAjaW5jbHVkZSA8c3RyaW5nLmg+Ci0gI2luY2x1ZGUgPHVuaXN0ZC5oPgkJLyogZm9yIGdldGhvc3RuYW1lKCkgZXRjICovCi0gI2luY2x1ZGUgPG5ldGRiLmg+CQkvKiBmb3IgZ2V0aG9zdGJ5bmFtZSgpICovCi0rI2luY2x1ZGUgPHN5cy90eXBlcy5oPgotICNpbmNsdWRlIDxzeXMvcGFyYW0uaD4JLyogZm9yIE1BWEhPU1ROQU1FTEVOICovCi0gI2luY2x1ZGUgPHN5cy9zb2NrZXQuaD4KLSAjaW5jbHVkZSA8bmV0aW5ldC9pbi5oPgotZGlmZiAtLWdpdCBhL3NyYy9zaHV0ZG93bi5jIGIvc3JjL3NodXRkb3duLmMKLWluZGV4IDc0YWFmYTUuLjQ2Yjk5Y2YgMTAwNjQ0Ci0tLS0gYS9zcmMvc2h1dGRvd24uYwotKysrIGIvc3JjL3NodXRkb3duLmMKLUBAIC0yNSw2ICsyNSw3IEBACi0gCi0gI2luY2x1ZGUgIndhdGNoX2Vyci5oIgotICNpbmNsdWRlICJleHRlcm4uaCIKLSsjaW5jbHVkZSAiZXh0Ml9tbnQuaCIKLSAKLSAjaWYgZGVmaW5lZCBfX0dMSUJDX18KLSAjaW5jbHVkZSAiZXh0Ml9tbnQuaCIKLUBAIC0xMjMsNyArMTI0LDcgQEAgc3RhdGljIHZvaWQgbW50X29mZigpCi0gCUZJTEUgKmZwOwotIAlzdHJ1Y3QgbW50ZW50ICptbnQ7Ci0gCi0tCWZwID0gc2V0bW50ZW50KE1OVFRBQiwgInIiKTsKLSsJZnAgPSBzZXRtbnRlbnQoX1BBVEhfTU5UVEFCLCAiciIpOwotIAkvKiBpbiBzb21lIHJhcmUgY2FzZXMgZnAgbWlnaHQgYmUgTlVMTCBzbyBiZSBjYXJlZnVsICovCi0gCXdoaWxlIChmcCAhPSBOVUxMICYmICgobW50ID0gZ2V0bW50ZW50KGZwKSkgIT0gKHN0cnVjdCBtbnRlbnQgKikwKSkgewotIAkJLyogRmlyc3QgY2hlY2sgaWYgc3dhcCAqLwotLS0gCi0yLjYuNAotCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3dhdGNoZG9nL3dhdGNoZG9nLzAwMDEtSW5jbHVkZS1saW51eC1wYXJhbS5oLWZvci1FWEVDX1BBR0VTSVpFLWRlZmluaXRpb24ucGF0Y2ggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3dhdGNoZG9nL3dhdGNoZG9nLzAwMDEtSW5jbHVkZS1saW51eC1wYXJhbS5oLWZvci1FWEVDX1BBR0VTSVpFLWRlZmluaXRpb24ucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTk4ZjE5OAotLS0gL2Rldi9udWxsCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvd2F0Y2hkb2cvd2F0Y2hkb2cvMDAwMS1JbmNsdWRlLWxpbnV4LXBhcmFtLmgtZm9yLUVYRUNfUEFHRVNJWkUtZGVmaW5pdGlvbi5wYXRjaApAQCAtMCwwICsxLDMyIEBACitGcm9tIDhmOTEzODVkYmQ1ZTdjMTRiMzZlY2JkOGEwMWNhODJjNzA5ZjZkNzcgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorRGF0ZTogRnJpLCAyNCBKdW4gMjAxNiAxODoxOToyOSArMDAwMAorU3ViamVjdDogW1BBVENIXSBJbmNsdWRlIGxpbnV4L3BhcmFtLmggZm9yIEVYRUNfUEFHRVNJWkUgZGVmaW5pdGlvbgorCitNdXNsIGRvZXMgbm90IGluY2x1ZGUgbGludXgvcGFyYW0uaCB3aGVyZWFzIGdsaWJjCitkb2VzLCBzbyBpdCBmYWlscyB0byBidWlsZCBvbiBtdXNsLgorCitTaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorLS0tCitVcHN0cmVhbS1TdGF0dXM6IFN1Ym1pdHRlZAorCisgc3JjL3dhdGNoZG9nLmMgfCAzICsrKworIDEgZmlsZSBjaGFuZ2VkLCAzIGluc2VydGlvbnMoKykKKworZGlmZiAtLWdpdCBhL3NyYy93YXRjaGRvZy5jIGIvc3JjL3dhdGNoZG9nLmMKK2luZGV4IGFjZjY0NTAuLjQ4NjM4NGEgMTAwNjQ0CistLS0gYS9zcmMvd2F0Y2hkb2cuYworKysrIGIvc3JjL3dhdGNoZG9nLmMKK0BAIC0yNiw2ICsyNiw5IEBACisgI2luY2x1ZGUgPHN5cy9wYXJhbS5oPgkJLyogRm9yIEVYRUNfUEFHRVNJWkUgKi8KKyAjaW5jbHVkZSA8bGludXgvb29tLmg+CisgI2luY2x1ZGUgPGxpbnV4L3dhdGNoZG9nLmg+CisrI2lmZGVmIF9fbGludXhfXworKyNpbmNsdWRlIDxsaW51eC9wYXJhbS5oPgorKyNlbmRpZgorICNpbmNsdWRlIDxzdHJpbmcuaD4KKyAKKyAjaW5jbHVkZSA8bGliZ2VuLmg+CistLSAKKzEuOC4zLjEKKwpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC93YXRjaGRvZy93YXRjaGRvZy9maXgtcGluZy1mYWlsdXJlLnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC93YXRjaGRvZy93YXRjaGRvZy9maXgtcGluZy1mYWlsdXJlLnBhdGNoCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxNGFiOWM1Li4wMDAwMDAwCi0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvd2F0Y2hkb2cvd2F0Y2hkb2cvZml4LXBpbmctZmFpbHVyZS5wYXRjaAorKysgL2Rldi9udWxsCkBAIC0xLDc5ICswLDAgQEAKLUZpeCBwaW5nIG1vZGUgZmFpbHVyZQotCi1VcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcgIAotCi1XaGVuIHdhdGNoZG9nIHdvcmtzIG9uIHBpbmcgbW9kZSwgdGhlIHN5c3RlbSB3aWxsIGJlIHJlYm9vdGVkIHNpbmNlCi13YXRjaGRvZyBjYW4gbm90IHJlY2VpdmUgdGhlIGV4cGVjdGVkIEVDT1JFUExZIG9uIGEgc2V0dGluZyBpbnRlcnZhbC4KLQotUGluZyBtb2RlIHVzZXMgYSByYXcgc29ja2V0IHRvIHNlbmQgYSBFQ08gcGFja2V0LCB0aGVuIHVzZXMgc2VsZWN0KCkKLXRvIHdhaXQgYW5kIHJlY3Zmcm9tKCkgdG8gcmVjZWl2ZSB0aGUgRUNPUkVQTFkgcGFja2V0LCBpZiBzZWxlY3QoKQotc2hvd3MgdGhlIGRhdGEgaXMgcmVhZHksIGFuZCB0aGUgZGF0YSBpcyBub3QgdGhlIGV4cGVjdGVkIEVDT1JFUExZLAotYW5kIHdhaXRpbmcgdGltZSBpcyBub3Qgb3ZlcmR1ZSwgaXQgd2lsbCBjb250aW51ZSB1c2Ugc2VsZWN0KCkgYW5kCi1yZWN2ZnJvbSgpLgotCi1Qcm9ibGVtIGlzIHRoYXQgdGhlIHJhdyBzb2NrZXQgY2FuIHJlY2VpdmUgYW55IGljbXAgcGFja2V0cywgaWYgd2UgZG8KLW5vdCBzZXQgZmlsdGVycywgYW5kIHRoZXJlIGFyZSBtYW55IGljbXAgcGFja2V0cyBvbiBzb2NrZXQsIHRoaXMKLXByb2dyYW0gd2lsbCBub3QgZmluZCBpdHMgaW50ZXJlc3RlZCBFQ09SRVBMWSBwYWNrZXQgaW4gYSBzcGVjaWFsCi1pbnRlcnZhbCwgd2hpY2ggbWFrZXMgdGhlIHBpbmcgbW9kZSBmYWlsLgotCi0KLU90aGVyIHByb2dyYW0gaXMgdGhhdCB3YXRjaGRvZyBzb21ldGltZSBjYW4gbm90IHJlYWNoIHRoZSBjYWxsIG9mCi1yZWN2ZnJvbSB0byB0cnkgdG8gcmVjZWl2ZSBwYWNrZXRzIHNpbmNlIHR2X3NlYyBvZiBzdHJ1Y3QgdGltZXZhbAotb2Ygc2VsZWN0IHBhcmFtZXRlciBpcyAwLgotCi1UaGUgdGltZW91dCBvZiBzZWxlY3QoKSBpcyB0aGUgcmVzdWx0IG9mIHBpbmcgaW50ZXJ2YWwgbWludXNpbmcgdGhlCi10aW1lIG9mIGNhbGxpbmcgZ2V0dGltZW9mZGF5IHNwZW5kaW5nLCB3aGVuIHBpbmcgaW50ZXJ2YWwgaXMgMSBzZWNvbmQsCi1hbmQgdGhlIGNhbGwgb2YgZ2V0dGltZW9mZGF5KCkgc3BlbmRzIHNldmVyYWwgdXNlY29uZHMsIHRoZSB0dl9zZWMgb2YKLXN0cnVjdCB0aW1ldmFsIG9mIHNlbGVjdCBwYXJhbWV0ZXIgbXVzdCBiZSAwLCBhdCB0aGF0IGNvbmRpdGlvbiwgd2UKLXNob3VsZCBpdCBpcyB2YWxpZCBvZiB0dl9zZWMgb2Ygc3RydWN0IHRpbWV2YWwgb2Ygc2VsZWN0IHBhcmFtZXRlciBiZSAwIAotCi1TaWduZWQtb2ZmLWJ5OiBSb3kuTGkgPHJvbmdxaW5nLmxpQHdpbmRyaXZlci5jb20+Ci0tLS0KLSBzcmMvbmV0LmMgICAgICB8ICAgIDIgKy0KLSBzcmMvd2F0Y2hkb2cuYyB8ICAgIDUgKysrKy0KLSAyIGZpbGVzIGNoYW5nZWQsIDUgaW5zZXJ0aW9ucygrKSwgMiBkZWxldGlvbnMoLSkKLQotSW5kZXg6IHdhdGNoZG9nLTUuMTQvc3JjL3dhdGNoZG9nLmMKLT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tLSB3YXRjaGRvZy01LjE0Lm9yaWcvc3JjL3dhdGNoZG9nLmMKLSsrKyB3YXRjaGRvZy01LjE0L3NyYy93YXRjaGRvZy5jCi1AQCAtMjQsNiArMjQsNyBAQAotICNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KLSAjaW5jbHVkZSA8c3lzL2lvY3RsLmg+Ci0gI2luY2x1ZGUgPGxpbnV4L29vbS5oPgotKyNpbmNsdWRlIDxsaW51eC9pY21wLmg+Ci0gI2luY2x1ZGUgPGxpbnV4L3dhdGNoZG9nLmg+Ci0gI2luY2x1ZGUgPHN0cmluZy5oPgotIAotSW5kZXg6IHdhdGNoZG9nLTUuMTQvc3JjL25ldC5jCi09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLS0gd2F0Y2hkb2ctNS4xNC5vcmlnL3NyYy9uZXQuYwotKysrIHdhdGNoZG9nLTUuMTQvc3JjL25ldC5jCi1AQCAtMTEsNyArMTEsOCBAQAotICNpbmNsdWRlIDxlcnJuby5oPgotICNpbmNsdWRlIDxzeXMvdGltZS5oPgotICNpbmNsdWRlIDxuZXRpbmV0L2lwLmg+Ci0tI2luY2x1ZGUgPG5ldGluZXQvaXBfaWNtcC5oPgotKyNpbmNsdWRlIDxsaW51eC9pY21wLmg+Ci0rLy8jaW5jbHVkZSA8bmV0aW5ldC9pcF9pY21wLmg+Ci0gI2luY2x1ZGUgPGZjbnRsLmg+Ci0gI2luY2x1ZGUgPHN0cmluZy5oPgotICNpbmNsdWRlIDx1bmlzdGQuaD4JCS8qIGZvciBnZXRob3N0bmFtZSgpIGV0YyAqLwotQEAgLTE3OSw2ICsxODAsOSBAQCBpbnQgb3Blbl9uZXRjaGVjayhzdHJ1Y3QgbGlzdCAqdGxpc3QpCi0gewotIAlzdHJ1Y3QgbGlzdCAqYWN0OwotIAlpbnQgaG9sZCA9IDA7Ci0rCXN0cnVjdCBpY21wX2ZpbHRlciBmaWx0OwotKwlmaWx0LmRhdGEgPSB+KDE8PElDTVBfRUNIT1JFUExZKTsKLSsKLSAKLSAJaWYgKHRsaXN0ICE9IE5VTEwpIHsKLSAJCWZvciAoYWN0ID0gdGxpc3Q7IGFjdCAhPSBOVUxMOyBhY3QgPSBhY3QtPm5leHQpIHsKLUBAIC0yMDIsNiArMjA2LDcgQEAgaW50IG9wZW5fbmV0Y2hlY2soc3RydWN0IGxpc3QgKnRsaXN0KQotIAkJCSAgICBmYXRhbF9lcnJvcihFWF9TWVNFUlIsICJlcnJvciBvcGVuaW5nIHNvY2tldCAoJXMpIiwgc3RyZXJyb3IoZXJybm8pKTsKLSAJCQl9Ci0gCi0rCQkJc2V0c29ja29wdChuZXQtPnNvY2tfZnAsIFNPTF9SQVcsIElDTVBfRklMVEVSLCAoY2hhciopJmZpbHQsIHNpemVvZihmaWx0KSk7Ci0gCQkJLyogdGhpcyBpcyBuZWNlc3NhcnkgZm9yIGJyb2FkY2FzdCBwaW5ncyB0byB3b3JrICovCi0gCQkJKHZvaWQpc2V0c29ja29wdChuZXQtPnNvY2tfZnAsIFNPTF9TT0NLRVQsIFNPX0JST0FEQ0FTVCwgKGNoYXIgKikmaG9sZCwgc2l6ZW9mKGhvbGQpKTsKLSAKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvd2F0Y2hkb2cvd2F0Y2hkb2cvZml4c2VwYnVpbGQucGF0Y2ggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3dhdGNoZG9nL3dhdGNoZG9nL2ZpeHNlcGJ1aWxkLnBhdGNoCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyZmFkM2ExLi4wMDAwMDAwCi0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvd2F0Y2hkb2cvd2F0Y2hkb2cvZml4c2VwYnVpbGQucGF0Y2gKKysrIC9kZXYvbnVsbApAQCAtMSwyNyArMCwwIEBACi1GaXggb3V0IG9mIHRyZWUgYnVpbGQgc3VwcG9ydDoKLQotfCBpbnN0YWxsaW5nIC9ldGMvd2F0Y2hkb2cuY29uZgotfCAgL2Jpbi9ta2RpciAtcCAnL21lZGlhL2J1aWxkMS9wb2t5L2J1aWxkL3RtcC93b3JrL2k1ODYtcG9reS1saW51eC93YXRjaGRvZy81LjEzLXIwL2ltYWdlL3Vzci9zaGFyZS9tYW4vbWFuNScKLXwgIC9iaW4vbWtkaXIgLXAgJy9tZWRpYS9idWlsZDEvcG9reS9idWlsZC90bXAvd29yay9pNTg2LXBva3ktbGludXgvd2F0Y2hkb2cvNS4xMy1yMC9pbWFnZS91c3Ivc2hhcmUvbWFuL21hbjgnCi18ICAvdXNyL2Jpbi9pbnN0YWxsIC1jIC1tIDY0NCAvbWVkaWEvYnVpbGQxL3Bva3kvYnVpbGQvdG1wL3dvcmsvaTU4Ni1wb2t5LWxpbnV4L3dhdGNoZG9nLzUuMTMtcjAvd2F0Y2hkb2ctNS4xMy93YXRjaGRvZy5jb25mLjUgJy9tZWRpYS9idWlsZDEvcG9reS9idWlsZC90bXAvd29yay9pNTg2LXBva3ktbGludXgvd2F0Y2hkb2cvNS4xMy1yMC9pbWFnZS91c3Ivc2hhcmUvbWFuL21hbjUnCi18ICAvdXNyL2Jpbi9pbnN0YWxsIC1jIC1tIDY0NCAvbWVkaWEvYnVpbGQxL3Bva3kvYnVpbGQvdG1wL3dvcmsvaTU4Ni1wb2t5LWxpbnV4L3dhdGNoZG9nLzUuMTMtcjAvd2F0Y2hkb2ctNS4xMy93YXRjaGRvZy44IC9tZWRpYS9idWlsZDEvcG9reS9idWlsZC90bXAvd29yay9pNTg2LXBva3ktbGludXgvd2F0Y2hkb2cvNS4xMy1yMC93YXRjaGRvZy01LjEzL3dkX2tlZXBhbGl2ZS44IC9tZWRpYS9idWlsZDEvcG9reS9idWlsZC90bXAvd29yay9pNTg2LXBva3ktbGludXgvd2F0Y2hkb2cvNS4xMy1yMC93YXRjaGRvZy01LjEzL3dkX2lkZW50aWZ5LjggJy9tZWRpYS9idWlsZDEvcG9reS9idWlsZC90bXAvd29yay9pNTg2LXBva3ktbGludXgvd2F0Y2hkb2cvNS4xMy1yMC9pbWFnZS91c3Ivc2hhcmUvbWFuL21hbjgnCi18IC91c3IvYmluL2luc3RhbGw6IGNhbm5vdCBzdGF0IGB3YXRjaGRvZy5jb25mJzogTm8gc3VjaCBmaWxlIG9yIGRpcmVjdG9yeQotfCBtYWtlWzJdOiAqKiogW2luc3RhbGwtZXRjLWxvY2FsXSBFcnJvciAxCi0KLVVwc3RyZWFtLVN0YXR1czogUGVuZGluZwotCi1SUCAyMDEzLzAzLzIxCi0KLUluZGV4OiB3YXRjaGRvZy01LjEzL01ha2VmaWxlLmFtCi09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLS0gd2F0Y2hkb2ctNS4xMy5vcmlnL01ha2VmaWxlLmFtCTIwMTMtMDItMDEgMTE6MTU6NDQuMDAwMDAwMDAwICswMDAwCi0rKysgd2F0Y2hkb2ctNS4xMy9NYWtlZmlsZS5hbQkyMDEzLTAzLTIxIDExOjU5OjM1LjYzNzEzOTAzMSArMDAwMAotQEAgLTE2LDcgKzE2LDcgQEAKLSAJZWxzZSBcCi0gCSAgICAgICAgZWNobyAiaW5zdGFsbGluZyAkKENPTkZJR19GSUxFTkFNRSkiOyBcCi0gCQkkKG1raW5zdGFsbGRpcnMpIGBkaXJuYW1lICQoREVTVERJUikkKENPTkZJR19GSUxFTkFNRSlgOyBcCi0tCSAgICAgICAgJChJTlNUQUxMX0RBVEEpIHdhdGNoZG9nLmNvbmYgJChERVNURElSKSQoQ09ORklHX0ZJTEVOQU1FKTsgXAotKwkgICAgICAgICQoSU5TVEFMTF9EQVRBKSAkKHNyY2Rpcikvd2F0Y2hkb2cuY29uZiAkKERFU1RESVIpJChDT05GSUdfRklMRU5BTUUpOyBcCi0gCWZpCi0gCi0gaW5zdGFsbC1kYXRhLWxvY2FsOiBpbnN0YWxsLWV0Yy1sb2NhbApkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC93YXRjaGRvZy93YXRjaGRvZy93ZF9rZWVwYWxpdmUuaW5pdCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvd2F0Y2hkb2cvd2F0Y2hkb2cvd2Rfa2VlcGFsaXZlLmluaXQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWQzZTRjNQotLS0gL2Rldi9udWxsCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvd2F0Y2hkb2cvd2F0Y2hkb2cvd2Rfa2VlcGFsaXZlLmluaXQKQEAgLTAsMCArMSwxMjEgQEAKKyMhL2Jpbi9zaAorIy9ldGMvaW5pdC5kL3dkX2tlZXBhbGl2ZTogc3RhcnQgd2Rfa2VlcGFsaXZlIGRhZW1vbi4KKworIyMjIEJFR0lOIElOSVQgSU5GTworIyBQcm92aWRlczogICAgICAgICAgd2Rfa2VlcGFsaXZlCisjIFNob3J0LURlc2NyaXB0aW9uOiBTdGFydCB3YXRjaGRvZyBrZWVwYWxpdmUgZGFlbW9uCisjIFJlcXVpcmVkLVN0YXJ0OiAgICAkcmVtb3RlX2ZzCisjIFJlcXVpcmVkLVN0b3A6ICAgICAkcmVtb3RlX2ZzCisjIFgtU3RhcnQtQmVmb3JlOiAgICAkYWxsCisjIERlZmF1bHQtU3RhcnQ6ICAgICAyIDMgNCA1CisjIERlZmF1bHQtU3RvcAorIyMjIEVORCBJTklUIElORk8KKworUEFUSD0vYmluOi91c3IvYmluOi9zYmluOi91c3Ivc2JpbgorCit0ZXN0IC14IC91c3Ivc2Jpbi93ZF9rZWVwYWxpdmUgfHwgZXhpdCAwCisKKyMgRm9yIGNvbmZpZ3VyYXRpb24gb2YgdGhlIGluaXQgc2NyaXB0IHVzZSB0aGUgZmlsZQorIyAvZXRjL2RlZmF1bHQvd2F0Y2hkb2csIGRvIG5vdCBlZGl0IHRoaXMgaW5pdCBzY3JpcHQuCisKKyMgU2V0IHJ1bl93YXRjaGRvZyB0byAxIHRvIHN0YXJ0IHdhdGNoZG9nIG9yIDAgdG8gZGlzYWJsZSBpdC4KK3J1bl93YXRjaGRvZz0wCisKKyMgU3BlY2lmeSBhZGRpdGlvbmFsIHdhdGNoZG9nIG9wdGlvbnMgaGVyZSAoc2VlIG1hbnBhZ2UpLgord2F0Y2hkb2dfb3B0aW9ucz0iIgorCisjIFNwZWNpZnkgbW9kdWxlIHRvIGxvYWQKK3dhdGNoZG9nX21vZHVsZT0ibm9uZSIKKworWyAtZSAvZXRjL2RlZmF1bHQvd2F0Y2hkb2cgXSAmJiAuIC9ldGMvZGVmYXVsdC93YXRjaGRvZworCitOQU1FPXdkX2tlZXBhbGl2ZQorREFFTU9OPS91c3Ivc2Jpbi93ZF9rZWVwYWxpdmUKKworU1RPUF9SRVRSWV9TQ0hFRFVMRT0nVEVSTS8xMC9mb3JldmVyL0tJTEwvMScKKworIyAuIC9saWIvbHNiL2luaXQtZnVuY3Rpb25zCisKKyMgTW9jayBEZWJpYW4gc3R1ZmYKK2xvZ19iZWdpbl9tc2coKSB7CisgICAgZWNobyAtbiAkKgorfQorCitsb2dfZW5kX21zZygpIHsKKyAgICBpZiBbICIkMSIgPSAiMCIgXTsgdGhlbgorICAgICAgICBlY2hvICdkb25lJworICAgIGVsc2UKKyAgICAgICAgZWNobyAnZXJyb3InCisgICAgZmkKK30KKworbG9nX2RhZW1vbl9tc2coKSB7CisgICAgZWNobyAkKgorfQorCitsb2dfcHJvZ3Jlc3NfbXNnKCkgeworICAgIGVjaG8gJCoKK30KKworCitjYXNlICIkMSIgaW4KKyAgc3RhcnQpCisgICAgaWYgWyAkcnVuX3dhdGNoZG9nID0gMSBdCisgICAgdGhlbgorICAgICAgICBbICR7d2F0Y2hkb2dfbW9kdWxlOi1ub25lfSAhPSAibm9uZSIgXSAmJiAvc2Jpbi9tb2Rwcm9iZSAkd2F0Y2hkb2dfbW9kdWxlCisJZWNobyAtbiAiU3RhcnRpbmcgd2F0Y2hkb2cga2VlcGFsaXZlIGRhZW1vbjogIgorCWlmIHN0YXJ0LXN0b3AtZGFlbW9uIC0tc3RhcnQgLS1xdWlldCBcCisJICAgIC0tZXhlYyAkREFFTU9OIC0tICR3YXRjaGRvZ19vcHRpb25zCisJdGhlbgorCSAgICBlY2hvIHdkX2tlZXBhbGl2ZS4KKwllbHNlCisJICAgIGVjaG8KKwlmaQorICAgIGZpCisgICAgOzsKKworICBzdG9wKQorICAgIGlmIFsgJHJ1bl93YXRjaGRvZyA9IDEgXQorICAgIHRoZW4KKwllY2hvIC1uICJTdG9wcGluZyB3YXRjaGRvZyBrZWVwYWxpdmUgZGFlbW9uOiAiCisJaWYgc3RhcnQtc3RvcC1kYWVtb24gLS1zdG9wIC0tcXVpZXQgLS1waWRmaWxlIC92YXIvcnVuLyROQU1FLnBpZCBcCisJICAgICRTVE9QX1JFVFJZX1NDSEVEVUxFCisJdGhlbgorCSAgICBlY2hvIHdkX2tlZXBhbGl2ZS4KKwllbHNlCisJICAgIGVjaG8KKwlmaQorICAgIGZpCisgICAgOzsKKworICBzdGF0dXMpCisgICAgc3RhdHVzX29mX3Byb2MgIiREQUVNT04iICIkTkFNRSIgJiYgZXhpdCAwIHx8IGV4aXQgJD8KKyAgICA7OworCisgIHJlc3RhcnQpCisgICAgJDAgZm9yY2UtcmVsb2FkCisgICAgOzsKKworICBmb3JjZS1yZWxvYWQpCisgICAgaWYgWyAkcnVuX3dhdGNoZG9nID0gMCBdOyB0aGVuIGV4aXQgMDsgZmkKKyAgICBlY2hvIC1uICJSZXN0YXJ0aW5nICROQU1FIGRhZW1vbi4iCisgICAgc3RhcnQtc3RvcC1kYWVtb24gLS1zdG9wIC0tcXVpZXQgLS1waWRmaWxlIC92YXIvcnVuLyROQU1FLnBpZCBcCisJJFNUT1BfUkVUUllfU0NIRURVTEUKKyAgICBlY2hvIC1uICIuIgorICAgIGlmIHN0YXJ0LXN0b3AtZGFlbW9uIC0tc3RhcnQgLS1xdWlldCAtLXBpZGZpbGUgL3Zhci9ydW4vJE5BTUUucGlkIFwKKwktLWV4ZWMgJERBRU1PTiAtLSAkd2F0Y2hkb2dfb3B0aW9ucworICAgIHRoZW4KKwllY2hvICJkb25lLiIKKyAgICBlbHNlCisJZWNobworICAgIGZpCisgICAgOzsKKworICAqKQorICAgIGVjaG8gIlVzYWdlOiAvZXRjL2luaXQuZC93ZF9rZWVwYWxpdmUge3N0YXJ0fHN0b3B8c3RhdHVzfHJlc3RhcnR8Zm9yY2UtcmVsb2FkfSIKKyAgICBleGl0IDEKKworZXNhYworCitleGl0IDAKKwpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC93YXRjaGRvZy93YXRjaGRvZ181LjE0LmJiIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC93YXRjaGRvZy93YXRjaGRvZ181LjE0LmJiCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3MzMwMjM4Li4wMDAwMDAwCi0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvd2F0Y2hkb2cvd2F0Y2hkb2dfNS4xNC5iYgorKysgL2Rldi9udWxsCkBAIC0xLDQwICswLDAgQEAKLVNVTU1BUlkgPSAiU29mdHdhcmUgd2F0Y2hkb2ciCi1ERVNDUklQVElPTiA9ICJXYXRjaGRvZyBpcyBhIGRhZW1vbiB0aGF0IGNoZWNrcyBpZiB5b3VyIHN5c3RlbSBpcyBzdGlsbCBcCi13b3JraW5nLiBJZiBwcm9ncmFtcyBpbiB1c2VyIHNwYWNlIGFyZSBub3QgbG9uZ2VyIGV4ZWN1dGVkIFwKLWl0IHdpbGwgcmVib290IHRoZSBzeXN0ZW0uIgotSE9NRVBBR0UgPSAiaHR0cDovL3dhdGNoZG9nLnNvdXJjZWZvcmdlLm5ldC8iCi1CVUdUUkFDS0VSID0gImh0dHA6Ly9zb3VyY2Vmb3JnZS5uZXQvdHJhY2tlci8/Z3JvdXBfaWQ9MTcyMDMwJmF0aWQ9ODYwMTk0IgotCi1MSUNFTlNFID0gIkdQTC0yLjArIgotTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9ZWNjMDU1MWJmNTRhZDk3ZjZiNTQxNzIwZjg0ZDY1NjkiCi0KLVNSQ19VUkkgPSAiJHtTT1VSQ0VGT1JHRV9NSVJST1J9L3dhdGNoZG9nL3dhdGNoZG9nLSR7UFZ9LnRhci5neiBcCi0gICAgICAgICAgIGZpbGU6Ly9maXhzZXBidWlsZC5wYXRjaCBcCi0JICAgZmlsZTovL2ZpeC1waW5nLWZhaWx1cmUucGF0Y2ggXAotCSAgIGZpbGU6Ly93YXRjaGRvZy1pbml0LnBhdGNoIFwKLQkgICBmaWxlOi8vd2F0Y2hkb2ctY29uZi5wYXRjaCBcCi0JICAgZmlsZTovLzAwMDEtRml4LWJ1aWxkLWlzc3Vlcy1mb3VuZC13aXRoLW5vbi1nbGliYy1DLWxpYnJhcmllcy5wYXRjaCBcCi0iCi0KLVNSQ19VUklbbWQ1c3VtXSA9ICI1YjJkYmEwYzU5Mzk0MmY0YWNjMTAwYmNhMGQ1NjBjNCIKLVNSQ19VUklbc2hhMjU2c3VtXSA9ICI2MjBiMmY0OWU5ODc5ZjJlODVjNzNkNGMxZjQyMmY5MTAxZTZiMzhlODI0ZmVhMjQxNGJlZmQ4YmI2ODY2YWQxIgotCi1VUFNUUkVBTV9DSEVDS19VUkkgPSAiaHR0cDovL3NvdXJjZWZvcmdlLm5ldC9wcm9qZWN0cy93YXRjaGRvZy9maWxlcy93YXRjaGRvZy8iCi1VUFNUUkVBTV9DSEVDS19SRUdFWCA9ICIvd2F0Y2hkb2cvKD9QPHB2ZXI+KFxkK1tcLlwtX10qKSspLyIKLQotaW5oZXJpdCBhdXRvdG9vbHMKLWluaGVyaXQgdXBkYXRlLXJjLmQKLQotREVQRU5EU19hcHBlbmRfbGliYy1tdXNsID0gIiBsaWJ0aXJwYyAiCi1DRkxBR1NfYXBwZW5kX2xpYmMtbXVzbCA9ICIgLUkke1NUQUdJTkdfSU5DRElSfS90aXJwYyAiCi1MREZMQUdTX2FwcGVuZF9saWJjLW11c2wgPSAiIC1sdGlycGMgIgotRVhUUkFfT0VDT05GX2FwcGVuZF9saWJjLW11c2wgPSAiIC0tZGlzYWJsZS1uZnMgIgotCi1JTklUU0NSSVBUX05BTUUgPSAid2F0Y2hkb2cuc2giCi1JTklUU0NSSVBUX1BBUkFNUyA9ICJzdGFydCAxNSAxIDIgMyA0IDUgLiBzdG9wIDg1IDAgNiAuIgotCi1SUkVDT01NRU5EU18ke1BOfSA9ICJrZXJuZWwtbW9kdWxlLXNvZnRkb2ciCi0KLWRvX2luc3RhbGxfYXBwZW5kKCkgewotCWluc3RhbGwgLUQgJHtTfS9yZWRoYXQvd2F0Y2hkb2cuaW5pdCAke0R9LyR7c3lzY29uZmRpcn0vaW5pdC5kL3dhdGNoZG9nLnNoCi19CmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3dhdGNoZG9nL3dhdGNoZG9nXzUuMTUuYmIgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3dhdGNoZG9nL3dhdGNoZG9nXzUuMTUuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2VkZmMwNAotLS0gL2Rldi9udWxsCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvd2F0Y2hkb2cvd2F0Y2hkb2dfNS4xNS5iYgpAQCAtMCwwICsxLDU5IEBACitTVU1NQVJZID0gIlNvZnR3YXJlIHdhdGNoZG9nIgorREVTQ1JJUFRJT04gPSAiV2F0Y2hkb2cgaXMgYSBkYWVtb24gdGhhdCBjaGVja3MgaWYgeW91ciBzeXN0ZW0gaXMgc3RpbGwgXAord29ya2luZy4gSWYgcHJvZ3JhbXMgaW4gdXNlciBzcGFjZSBhcmUgbm90IGxvbmdlciBleGVjdXRlZCBcCitpdCB3aWxsIHJlYm9vdCB0aGUgc3lzdGVtLiIKK0hPTUVQQUdFID0gImh0dHA6Ly93YXRjaGRvZy5zb3VyY2Vmb3JnZS5uZXQvIgorQlVHVFJBQ0tFUiA9ICJodHRwOi8vc291cmNlZm9yZ2UubmV0L3RyYWNrZXIvP2dyb3VwX2lkPTE3MjAzMCZhdGlkPTg2MDE5NCIKKworTElDRU5TRSA9ICJHUEwtMi4wKyIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PWVjYzA1NTFiZjU0YWQ5N2Y2YjU0MTcyMGY4NGQ2NTY5IgorCitTUkNfVVJJID0gIiR7U09VUkNFRk9SR0VfTUlSUk9SfS93YXRjaGRvZy93YXRjaGRvZy0ke1BWfS50YXIuZ3ogXAorICAgICAgICAgICBmaWxlOi8vMDAwMS1JbmNsdWRlLWxpbnV4LXBhcmFtLmgtZm9yLUVYRUNfUEFHRVNJWkUtZGVmaW5pdGlvbi5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly93YXRjaGRvZy1pbml0LnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL3dhdGNoZG9nLWNvbmYucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vd2Rfa2VlcGFsaXZlLmluaXQgXAorIgorCitTUkNfVVJJW21kNXN1bV0gPSAiNjc4YzMyZjZmMzVhMDQ5MmM5YzFiNzZiNGFhODg4MjgiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiZmZkYzg2NTEzN2FkNWQ4ZTUzNjY0YmQyMmJhZDRkZTZjYTEzNmQxYjQ2MzY3MjAzMjBjYjUyYWYwYzE4OTQ3YyIKKworVVBTVFJFQU1fQ0hFQ0tfVVJJID0gImh0dHA6Ly9zb3VyY2Vmb3JnZS5uZXQvcHJvamVjdHMvd2F0Y2hkb2cvZmlsZXMvd2F0Y2hkb2cvIgorVVBTVFJFQU1fQ0hFQ0tfUkVHRVggPSAiL3dhdGNoZG9nLyg/UDxwdmVyPihcZCtbXC5cLV9dKikrKS8iCisKK2luaGVyaXQgYXV0b3Rvb2xzCitpbmhlcml0IHVwZGF0ZS1yYy5kCisKK0RFUEVORFNfYXBwZW5kX2xpYmMtbXVzbCA9ICIgbGlidGlycGMgIgorQ0ZMQUdTX2FwcGVuZF9saWJjLW11c2wgPSAiIC1JJHtTVEFHSU5HX0lOQ0RJUn0vdGlycGMgIgorTERGTEFHU19hcHBlbmRfbGliYy1tdXNsID0gIiAtbHRpcnBjICIKK0VYVFJBX09FQ09ORl9hcHBlbmRfbGliYy1tdXNsID0gIiAtLWRpc2FibGUtbmZzICIKKworSU5JVFNDUklQVF9QQUNLQUdFUyA9ICIke1BOfSAke1BOfS1rZWVwYWxpdmUiCisKK0lOSVRTQ1JJUFRfTkFNRV8ke1BOfSA9ICJ3YXRjaGRvZy5zaCIKK0lOSVRTQ1JJUFRfUEFSQU1TXyR7UE59ID0gInN0YXJ0IDE1IDEgMiAzIDQgNSAuIHN0b3AgODUgMCA2IC4iCisKK0lOSVRTQ1JJUFRfTkFNRV8ke1BOfS1rZWVwYWxpdmUgPSAid2Rfa2VlcGFsaXZlIgorSU5JVFNDUklQVF9QQVJBTVNfJHtQTn0ta2VlcGFsaXZlID0gInN0YXJ0IDE1IDEgMiAzIDQgNSAuIHN0b3AgODUgMCA2IC4iCisKK2RvX2luc3RhbGxfYXBwZW5kKCkgeworCWluc3RhbGwgLUQgJHtTfS9yZWRoYXQvd2F0Y2hkb2cuaW5pdCAke0R9LyR7c3lzY29uZmRpcn0vaW5pdC5kL3dhdGNoZG9nLnNoCisgICAgaW5zdGFsbCAtRG0gMDc1NSAke1dPUktESVJ9L3dkX2tlZXBhbGl2ZS5pbml0ICR7RH0ke3N5c2NvbmZkaXJ9L2luaXQuZC93ZF9rZWVwYWxpdmUKKworICAgICMgd2F0Y2hkb2cuY29uZiBpcyBwcm92aWRlZCBieSB0aGUgd2F0Y2hkb2ctY29uZmlnIHJlY2lwZQorICAgIHJtICR7RH0ke3N5c2NvbmZkaXJ9L3dhdGNoZG9nLmNvbmYKK30KKworUEFDS0FHRVMgPSsgIiR7UE59LWtlZXBhbGl2ZSIKKworRklMRVNfJHtQTn0ta2VlcGFsaXZlID0gIiBcCisgICAgJHtzeXNjb25mZGlyfS9pbml0LmQvd2Rfa2VlcGFsaXZlIFwKKyAgICAke3NiaW5kaXJ9L3dkX2tlZXBhbGl2ZSBcCisiCisKK1JERVBFTkRTXyR7UE59ICs9ICIke1BOfS1jb25maWcgJHtQTn0ta2VlcGFsaXZlIgorUkRFUEVORFNfJHtQTn0ta2VlcGFsaXZlICs9ICIke1BOfS1jb25maWciCisKK1JSRUNPTU1FTkRTXyR7UE59ID0gImtlcm5lbC1tb2R1bGUtc29mdGRvZyIKKwpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC93Z2V0L3dnZXQuaW5jIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC93Z2V0L3dnZXQuaW5jCmluZGV4IGRjMzgxYTYuLmM0YWJmZTQgMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvd2dldC93Z2V0LmluYworKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3dnZXQvd2dldC5pbmMKQEAgLTksNyArOSw3IEBACiAKIGluaGVyaXQgYXV0b3Rvb2xzIGdldHRleHQgdGV4aW5mbyB1cGRhdGUtYWx0ZXJuYXRpdmVzIHBrZ2NvbmZpZwogCi1FWFRSQV9PRUNPTkYgPSAiLS1lbmFibGUtaXB2NiAtLXdpdGgtc3NsPWdudXRscyAtLWRpc2FibGUtcnBhdGggLS1kaXNhYmxlLWlyaSBcCitFWFRSQV9PRUNPTkYgPSAiLS13aXRoLXNzbD1nbnV0bHMgLS1kaXNhYmxlLXJwYXRoIC0tZGlzYWJsZS1pcmkgXAogICAgICAgICAgICAgICAgIC0td2l0aG91dC1saWJnbnV0bHMtcHJlZml4IGFjX2N2X2hlYWRlcl91dWlkX3V1aWRfaD1ubyIKIAogQUxURVJOQVRJVkVfJHtQTn0gPSAid2dldCIKQEAgLTIwLDggKzIwLDkgQEAKIAogQkJDTEFTU0VYVEVORCArPSAibmF0aXZlc2RrIgogCi1QQUNLQUdFQ09ORklHID8/PSAiIgorUEFDS0FHRUNPTkZJRyA/Pz0gIiR7QGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCAnaXB2NicsICdpcHY2JywgJycsIGQpfSIKIFBBQ0tBR0VDT05GSUdbbGlidXVpZF0gPSAiLS13aXRoLWxpYnV1aWQsIC0td2l0aG91dC1saWJ1dWlkLHV0aWwtbGludXgiCitQQUNLQUdFQ09ORklHW2lwdjZdID0gIi0tZW5hYmxlLWlwdjYsLS1kaXNhYmxlLWlwdjYsIgogCiAjIExldCBhY2xvY2FsIHVzZSB0aGUgcmVsYXRpdmUgcGF0aCBmb3IgdGhlIG00IGZpbGUgcmF0aGVyIHRoYW4KICMgYWJzb2x1dGUsIG90aGVyd2lzZSB0aGVyZSBtaWdodCBiZSBhbiAiQXJndW1lbnQgbGlzdCB0b28gbG9uZyIgZXJyb3IKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvd2dldC93Z2V0XzEuMTcuMS5iYiBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvd2dldC93Z2V0XzEuMTcuMS5iYgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZGNhNWQxZi4uMDAwMDAwMAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3dnZXQvd2dldF8xLjE3LjEuYmIKKysrIC9kZXYvbnVsbApAQCAtMSw4ICswLDAgQEAKLVNSQ19VUkkgPSAiJHtHTlVfTUlSUk9SfS93Z2V0L3dnZXQtJHtQVn0udGFyLmd6IFwKLSAgICAgICAgICAgZmlsZTovLzAwMDEtVW5zZXQtbmVlZF9jaGFyc2V0X2FsaWFzLXdoZW4tYnVpbGRpbmctZm9yLW11c2wucGF0Y2ggXAotICAgICAgICAgICIKLQotU1JDX1VSSVttZDVzdW1dID0gImE2YTkwOGM5YWUwZTZhNDE5NGM2Mjg5NzRjYzNmMDVhIgotU1JDX1VSSVtzaGEyNTZzdW1dID0gIjAyOWZiYjkzYmRjMWMwYzVhNzUwN2I2MDc2YTZlYzJmOGQzNDIwNGE4NWFhODdlNWIyZjYxYTk0MDViMjkwZjUiCi0KLXJlcXVpcmUgd2dldC5pbmMKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvd2dldC93Z2V0XzEuMTguYmIgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3dnZXQvd2dldF8xLjE4LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM5NjliOTgKLS0tIC9kZXYvbnVsbAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3dnZXQvd2dldF8xLjE4LmJiCkBAIC0wLDAgKzEsOCBAQAorU1JDX1VSSSA9ICIke0dOVV9NSVJST1J9L3dnZXQvd2dldC0ke1BWfS50YXIuZ3ogXAorICAgICAgICAgICBmaWxlOi8vMDAwMS1VbnNldC1uZWVkX2NoYXJzZXRfYWxpYXMtd2hlbi1idWlsZGluZy1mb3ItbXVzbC5wYXRjaCBcCisgICAgICAgICAgIgorCitTUkNfVVJJW21kNXN1bV0gPSAiZmMyZGViZDgzOTllM2I5MzNhOWIyMjY3OTRlMmE4ODYiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiYTAwYTY1ZmFiODRjYzQ2ZTI0YzUzY2U4OGM0NTYwNDY2OGE3YTQ3OTI3NmUwMzdkYzJmNTU4ZTM0NzE3ZmIyZCIKKworcmVxdWlyZSB3Z2V0LmluYwpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC93aGljaC93aGljaC0yLjE4L2ZpeF9uYW1lX2NvbmZsaWN0X2dyb3VwX21lbWJlci5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvd2hpY2gvd2hpY2gtMi4xOC9maXhfbmFtZV9jb25mbGljdF9ncm91cF9tZW1iZXIucGF0Y2gKaW5kZXggZmI5YjFhNC4uMGUwOTg4YiAxMDA2NDQKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC93aGljaC93aGljaC0yLjE4L2ZpeF9uYW1lX2NvbmZsaWN0X2dyb3VwX21lbWJlci5wYXRjaAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3doaWNoL3doaWNoLTIuMTgvZml4X25hbWVfY29uZmxpY3RfZ3JvdXBfbWVtYmVyLnBhdGNoCkBAIC0zLDcgKzMsNyBAQAogIyBnbGliYyBhbHNvIGltcGxlbWVudHMgdGhlIGZ1bmN0aW9uIGdyb3VwX21lbWJlci4gVG8gYXZvaWQgbmFtZSBjb25mbGljdCwKICMgaGVyZSBsZXQgdXMgYXBwZW5kIGEgIl8iIHRvIHdoaWNoJ3MgdmVyc2lvbi4KICMKLSMgU2lnbmVkLW9mZi1ieSBEZXh1YW4gQ3VpIDxkZXh1YW4uY3VpQGludGVsLmNvbT4sIDIwMTAtMDgtMjAKKyMgU2lnbmVkLW9mZi1ieTogRGV4dWFuIEN1aSA8ZGV4dWFuLmN1aUBpbnRlbC5jb20+LCAyMDEwLTA4LTIwCiAjICh0aGlzIHBhdGNoIGlzIGxpY2Vuc2VkIHVuZGVyIEdQTHYyKQogCiAtLS0gd2hpY2gtMi4xOC9iYXNoLmMKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQveGRnLXV0aWxzL3hkZy11dGlsc18xLjEuMS5iYiBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQveGRnLXV0aWxzL3hkZy11dGlsc18xLjEuMS5iYgppbmRleCBjMTQ3MmNmLi41MDA3NDk4IDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3hkZy11dGlscy94ZGctdXRpbHNfMS4xLjEuYmIKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC94ZGctdXRpbHMveGRnLXV0aWxzXzEuMS4xLmJiCkBAIC0yNyw2ICsyNyw3IEBACiAKIFVQU1RSRUFNX0NIRUNLX1JFR0VYID0gInhkZy11dGlscy0oP1A8cHZlcj4oKFxkK1tcLlwtX10qKSspKChyY3xhbHBoYXxiZXRhKVxkKyk/KVwuKHRhclwuZ3p8dGd6KSIKIAorIyBOZWVkcyBicm9rZW5zZXAgYXMgdGhpcyBkb2Vzbid0IHVzZSBhdXRvbWFrZQogaW5oZXJpdCBhdXRvdG9vbHMtYnJva2Vuc2VwIGRpc3Ryb19mZWF0dXJlc19jaGVjawogCiAjIFRoZSB4cHJvcCByZXF1aXJlcyB4MTEgaW4gRElTVFJPX0ZFQVRVUkVTCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3ppcC96aXAtMy4wL2ZpeC1zZWN1cml0eS1mb3JtYXQucGF0Y2ggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3ppcC96aXAtMy4wL2ZpeC1zZWN1cml0eS1mb3JtYXQucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTlkODU0OAotLS0gL2Rldi9udWxsCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvemlwL3ppcC0zLjAvZml4LXNlY3VyaXR5LWZvcm1hdC5wYXRjaApAQCAtMCwwICsxLDQyIEBACit6aXA6IEZpeGluZyBzZWN1cml0eSBmb3JtYXR0aW5nIGlzc3VlcworCitGaXggc2VjdXJpdHkgZm9ybWF0dGluZyBpc3N1ZXMgcmVsYXRlZCB0byBwcmludGluZyB3aXRob3V0IE5VTEwgYXJndW1lbnQKKworemlwLmM6IEluIGZ1bmN0aW9uICdoZWxwX2V4dGVuZGVkJzoKK3ppcC5jOjEwMzE6NTogZXJyb3I6IGZvcm1hdCBub3QgYSBzdHJpbmcgbGl0ZXJhbCBhbmQgbm8gZm9ybWF0IGFyZ3VtZW50cyBbLVdlcnJvcj1mb3JtYXQtc2VjdXJpdHldCisgICAgIHByaW50Zih0ZXh0W2ldKTsKKyAgICAgXgoremlwLmM6IEluIGZ1bmN0aW9uICd2ZXJzaW9uX2luZm8nOgoremlwLmM6MTIyODo1OiBlcnJvcjogZm9ybWF0IG5vdCBhIHN0cmluZyBsaXRlcmFsIGFuZCBubyBmb3JtYXQgYXJndW1lbnRzIFstV2Vycm9yPWZvcm1hdC1zZWN1cml0eV0KKyAgICAgcHJpbnRmKGNyeXB0bm90ZVtpXSk7CisgICAgIF4KKworW1lPQ1RPICM5NTUyXQorW2h0dHBzOi8vYnVnemlsbGEueW9jdG9wcm9qZWN0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9OTU1Ml0KKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK1NpZ25lZC1vZmYtYnk6IEVkd2luIFBsYXVjaHUgPGVkd2luLnBsYXVjaHUuY2FtYWNob0BpbnRlbC5jb20+CisKK2RpZmYgLS1naXQgYS96aXAuYyBiL3ppcC5jCitpbmRleCA0Mzk4MjFmLi5kN2RhNzY4IDEwMDY0NAorLS0tIGEvemlwLmMKKysrKyBiL3ppcC5jCitAQCAtMTAyOCw3ICsxMDI4LDcgQEAgbG9jYWwgdm9pZCBoZWxwX2V4dGVuZGVkKCkKKyAKKyAgIGZvciAoaSA9IDA7IGkgPCBzaXplb2YodGV4dCkvc2l6ZW9mKGNoYXIgKik7IGkrKykKKyAgIHsKKy0gICAgcHJpbnRmKHRleHRbaV0pOworKyAgICBmcHV0cyh0ZXh0W2ldLHN0ZG91dCk7CisgICAgIHB1dGNoYXIoJ1xuJyk7CisgICB9CisgI2lmZGVmIERPUworQEAgLTEyMjUsNyArMTIyNSw3IEBAIGxvY2FsIHZvaWQgdmVyc2lvbl9pbmZvKCkKKyAgICAgICAgICAgICBDUl9NQUpPUlZFUiwgQ1JfTUlOT1JWRVIsIENSX0JFVEFfVkVSLCBDUl9WRVJTSU9OX0RBVEUpOworICAgZm9yIChpID0gMDsgaSA8IHNpemVvZihjcnlwdG5vdGUpL3NpemVvZihjaGFyICopOyBpKyspCisgICB7CistICAgIHByaW50ZihjcnlwdG5vdGVbaV0pOworKyAgICBmcHV0cyhjcnlwdG5vdGVbaV0sc3Rkb3V0KTsKKyAgICAgcHV0Y2hhcignXG4nKTsKKyAgIH0KKyAgICsraTsgIC8qIGNyeXB0IHN1cHBvcnQgbWVhbnMgdGhlcmUgSVMgYXQgbGVhc3Qgb25lIGNvbXBpbGF0aW9uIG9wdGlvbiAqLwpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC96aXAvemlwLmluYyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvemlwL3ppcC5pbmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDYyMjFjNWUuLjAwMDAwMDAKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC96aXAvemlwLmluYworKysgL2Rldi9udWxsCkBAIC0xLDI2ICswLDAgQEAKLVNVTU1BUlkgPSAiQ29tcHJlc3Nvci9hcmNoaXZlciBmb3IgY3JlYXRpbmcgYW5kIG1vZGlmeWluZyAuemlwIGZpbGVzIgotSE9NRVBBR0UgPSAiaHR0cDovL3d3dy5pbmZvLXppcC5vcmciCi1TRUNUSU9OID0gImNvbnNvbGUvdXRpbHMiCi0KLUxJQ0VOU0UgPSAiQlNELTMtQ2xhdXNlIgotTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vTElDRU5TRTttZDU9MDRkNDNjNWQ3MGI0OTZjMDMyMzA4MTA2ZTI2YWUxN2QiCi0KLVNSQ19VUkkgPSAiZnRwOi8vZnRwLmluZm8temlwLm9yZy9wdWIvaW5mb3ppcC9zcmMvemlwJHtAZC5nZXRWYXIoJ1BWJywxKS5yZXBsYWNlKCcuJywgJycpfS50Z3oiCi0KLUVYVFJBX09FTUFLRSA9ICInQ0M9JHtDQ30nICdCSU5EPSR7Q0N9JyAnQVM9JHtDQ30gLWMnICdDUFA9JHtDUFB9JyBcCi0JCSdDRkxBR1M9LUkuIC1EVU5JWCAke0NGTEFHU30nICdJTlNUQUxMPWluc3RhbGwnIFwKLQkJJ0JJTkZMQUdTPTA3NTUnICdJTlNUQUxMX0Q9aW5zdGFsbCAtZCciCi0KLWRvX2NvbXBpbGUoKSB7Ci0Jb2VfcnVubWFrZSAtZiB1bml4L01ha2VmaWxlIGZsYWdzIElaX0JaSVAyPW5vX3N1Y2hfZGlyZWN0b3J5Ci0Jc2VkIC1pICdzI0xGTEFHUzE9IiIjTEZMQUdTMT0iJHtMREZMQUdTfSIjJyBmbGFncwotCW9lX3J1bm1ha2UgLWYgdW5peC9NYWtlZmlsZSBnZW5lcmljIElaX0JaSVAyPW5vX3N1Y2hfZGlyZWN0b3J5Ci19Ci0KLWRvX2luc3RhbGwoKSB7Ci0Jb2VfcnVubWFrZSAtZiB1bml4L01ha2VmaWxlIHByZWZpeD0ke0R9JHtwcmVmaXh9IFwKLQkJICAgQklORElSPSR7RH0ke2JpbmRpcn0gTUFORElSPSR7RH0ke21hbmRpcn0vbWFuMSBcCi0JCSAgIGluc3RhbGwKLX0KLQotQkJDTEFTU0VYVEVORCA9ICJuYXRpdmUiCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3ppcC96aXBfMy4wLmJiIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC96aXAvemlwXzMuMC5iYgppbmRleCAzODNkYTRiLi4wODc0MjNhIDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3ppcC96aXBfMy4wLmJiCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvemlwL3ppcF8zLjAuYmIKQEAgLTEsMTggKzEsNDIgQEAKLXJlcXVpcmUgemlwLmluYworU1VNTUFSWSA9ICJDb21wcmVzc29yL2FyY2hpdmVyIGZvciBjcmVhdGluZyBhbmQgbW9kaWZ5aW5nIC56aXAgZmlsZXMiCitIT01FUEFHRSA9ICJodHRwOi8vd3d3LmluZm8temlwLm9yZyIKK1NFQ1RJT04gPSAiY29uc29sZS91dGlscyIKIAotUFI9InIyIgorTElDRU5TRSA9ICJCU0QtMy1DbGF1c2UiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9MSUNFTlNFO21kNT0wNGQ0M2M1ZDcwYjQ5NmMwMzIzMDgxMDZlMjZhZTE3ZCIKIAotIyB6aXAtMi4zMiBzdGlsbCB1c2VzIGRpcmVjdG9yeSBuYW1lIG9mIHppcC0yLjMwCitQUiA9ICJyMiIKKwogUyA9ICIke1dPUktESVJ9L3ppcDMwIgogCitTUkNfVVJJID0gIiR7U09VUkNFRk9SR0VfTUlSUk9SfS9pbmZvemlwL1ppcCUyMDMueCUyMCUyOGxhdGVzdCUyOS8zLjAvemlwMzAudGFyLmd6IFwKKyAgICAgICAgICAgZmlsZTovL2ZpeC1zZWN1cml0eS1mb3JtYXQucGF0Y2giCisKIFNSQ19VUklbbWQ1c3VtXSA9ICI3Yjc0NTUxZTYzZjhlZTZhYWI2ZmJjODY2NzZjMGQzNyIKIFNSQ19VUklbc2hhMjU2c3VtXSA9ICJmMGU4YmIxZjliN2ViMGIwMTI4NTQ5NWEyNjk5ZGYzYTRiNzY2Nzg0YzE3NjVhOGYxYWVlZGY2M2MwODA2MzY5IgogCi0jIGV4Y2x1ZGUgdmVyc2lvbiAyLjMuMiB3aGljaCB0cmlnZ2VycyBhIGZhbHNlIHBvc2l0aXZlCi1VUFNUUkVBTV9DSEVDS19SRUdFWCA9ICJeemlwKD9QPHB2ZXI+KD8hMjMyKS4rKVwudGd6IgotCiAjIHppcC5pbmMgc2V0cyBDRkxBR1MsIGJ1dCB3aGF0IE1ha2VmaWxlIGFjdHVhbGx5IHVzZXMgaXMKICMgQ0ZMQUdTX05PT1BULiAgSXQgd2lsbCBhbHNvIGZvcmNlIC1PMyBvcHRpbWl6YXRpb24sIG92ZXJyaWRpbmcKICMgd2hhdGV2ZXIgd2Ugc2V0LgotIwotRVhUUkFfT0VNQUtFX2FwcGVuZCA9ICIgJ0NGTEFHU19OT09QVD0tSS4gLURVTklYICR7Q0ZMQUdTfSciCitFWFRSQV9PRU1BS0UgPSAiJ0NDPSR7Q0N9JyAnQklORD0ke0NDfScgJ0FTPSR7Q0N9IC1jJyAnQ1BQPSR7Q1BQfScgXAorCQknQ0ZMQUdTPS1JLiAtRFVOSVggJHtDRkxBR1N9JyBcCisJCSdDRkxBR1NfTk9PUFQ9LUkuIC1EVU5JWCAke0NGTEFHU30nIFwKKwkJJ0lOU1RBTEw9aW5zdGFsbCcgJ0lOU1RBTExfRD1pbnN0YWxsIC1kJyBcCisJCSdCSU5GTEFHUz0wNzU1JyIKKworZG9fY29tcGlsZSgpIHsKKwlvZV9ydW5tYWtlIC1mIHVuaXgvTWFrZWZpbGUgZmxhZ3MgSVpfQlpJUDI9bm9fc3VjaF9kaXJlY3RvcnkKKwlzZWQgLWkgJ3MjTEZMQUdTMT0iIiNMRkxBR1MxPSIke0xERkxBR1N9IiMnIGZsYWdzCisJb2VfcnVubWFrZSAtZiB1bml4L01ha2VmaWxlIGdlbmVyaWMgSVpfQlpJUDI9bm9fc3VjaF9kaXJlY3RvcnkKK30KKworZG9faW5zdGFsbCgpIHsKKwlvZV9ydW5tYWtlIC1mIHVuaXgvTWFrZWZpbGUgcHJlZml4PSR7RH0ke3ByZWZpeH0gXAorCQkgICBCSU5ESVI9JHtEfSR7YmluZGlyfSBNQU5ESVI9JHtEfSR7bWFuZGlyfS9tYW4xIFwKKwkJICAgaW5zdGFsbAorfQorCitCQkNMQVNTRVhURU5EID0gIm5hdGl2ZSIKKworIyBleGNsdWRlIHZlcnNpb24gMi4zLjIgd2hpY2ggdHJpZ2dlcnMgYSBmYWxzZSBwb3NpdGl2ZQorVVBTVFJFQU1fQ0hFQ0tfUkVHRVggPSAiXnppcCg/UDxwdmVyPig/ITIzMikuKylcLnRneiIKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ25vbWUvZXBpcGhhbnkvZXBpcGhhbnlfMy4xOC40LmJiIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1nbm9tZS9lcGlwaGFueS9lcGlwaGFueV8zLjE4LjQuYmIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDg2OTU2OWMuLjAwMDAwMDAKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1nbm9tZS9lcGlwaGFueS9lcGlwaGFueV8zLjE4LjQuYmIKKysrIC9kZXYvbnVsbApAQCAtMSwyNiArMCwwIEBACi1TVU1NQVJZID0gIldlYktpdCBiYXNlZCB3ZWIgYnJvd3NlciBmb3IgR05PTUUiCi1MSUNFTlNFID0gIkdQTHYyKyIKLUxJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PTc1MTQxOTI2MGFhOTU0NDk5ZjdhYmFhYmFhODgyYmJlIgotCi1ERVBFTkRTID0gImxpYnNvdXAtMi40IHdlYmtpdGd0ayBndGsrMyBpc28tY29kZXMgY2EtY2VydGlmaWNhdGVzIGF2YWhpIGxpYm5vdGlmeSBnY3IgbGlid25jazMgXAotCSAgIGdzZXR0aW5ncy1kZXNrdG9wLXNjaGVtYXMgZ25vbWUtZGVza3RvcDMgbGlieG1sMi1uYXRpdmUgaW50bHRvb2wtbmF0aXZlIgotCi1pbmhlcml0IGdub21lYmFzZSBnc2V0dGluZ3MgZGlzdHJvX2ZlYXR1cmVzX2NoZWNrIHVwc3RyZWFtLXZlcnNpb24taXMtZXZlbgotIyBsaWJ3bmNrMyBpcyB4MTEgb25seQotUkVRVUlSRURfRElTVFJPX0ZFQVRVUkVTID0gIngxMSIKLQotU1JDX1VSSSArPSAiZmlsZTovLzAwMDEteWVscC5tNC1kcm9wLXRoZS1jaGVjay1mb3ItaXRzdG9vbC5wYXRjaCIKLVNSQ19VUklbYXJjaGl2ZS5tZDVzdW1dID0gIjE3MmI3ODI1NjEwMGU4ZDNjNjI5NzY0YWJkMGUxNDk1IgotU1JDX1VSSVthcmNoaXZlLnNoYTI1NnN1bV0gPSAiYmU2OTlkNDg0MzcxMTExYWJhZTc1NGU2NjkxODcyMTVkZjczZTIxNTMzZjQ2MWU1MTNiNzk1MzdkN2ExYzFjMSIKLQotRVhUUkFfT0VDT05GICs9ICIgLS1kaXNhYmxlLW5zcyAtLXdpdGgtZGlzdHJpYnV0b3ItbmFtZT0ke0RJU1RST30iCi0KLWRvX2NvbmZpZ3VyZV9wcmVwZW5kKCkgewotICAgIHRvdWNoICR7U30vZ25vbWUtZG9jLXV0aWxzLm1ha2UKLSAgICBzZWQgLWkgLWUgczpoZWxwOjpnICR7U30vTWFrZWZpbGUuYW0KLX0KLQotRklMRVNfJHtQTn0gKz0gIiR7ZGF0YWRpcn0vYXBwZGF0YSAke2RhdGFkaXJ9L2RidXMtMSAke2RhdGFkaXJ9L2dub21lLXNoZWxsL3NlYXJjaC1wcm92aWRlcnMiCi1SREVQRU5EU18ke1BOfSA9ICJpc28tY29kZXMgYWR3YWl0YS1pY29uLXRoZW1lIgotUlJFQ09NTUVORFNfJHtQTn0gPSAiY2EtY2VydGlmaWNhdGVzIgotCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdub21lL2VwaXBoYW55L2VwaXBoYW55XzMuMjAuMy5iYiBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ25vbWUvZXBpcGhhbnkvZXBpcGhhbnlfMy4yMC4zLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmViYTQ4MGIKLS0tIC9kZXYvbnVsbAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdub21lL2VwaXBoYW55L2VwaXBoYW55XzMuMjAuMy5iYgpAQCAtMCwwICsxLDI1IEBACitTVU1NQVJZID0gIldlYktpdCBiYXNlZCB3ZWIgYnJvd3NlciBmb3IgR05PTUUiCitMSUNFTlNFID0gIkdQTHYyKyIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PTc1MTQxOTI2MGFhOTU0NDk5ZjdhYmFhYmFhODgyYmJlIgorCitERVBFTkRTID0gImxpYnNvdXAtMi40IHdlYmtpdGd0ayBndGsrMyBpc28tY29kZXMgY2EtY2VydGlmaWNhdGVzIGF2YWhpIGxpYm5vdGlmeSBnY3IgbGlid25jazMgXAorCSAgIGdzZXR0aW5ncy1kZXNrdG9wLXNjaGVtYXMgZ25vbWUtZGVza3RvcDMgbGlieG1sMi1uYXRpdmUgaW50bHRvb2wtbmF0aXZlIgorCitpbmhlcml0IGdub21lYmFzZSBnc2V0dGluZ3MgZGlzdHJvX2ZlYXR1cmVzX2NoZWNrIHVwc3RyZWFtLXZlcnNpb24taXMtZXZlbgorIyBsaWJ3bmNrMyBpcyB4MTEgb25seQorUkVRVUlSRURfRElTVFJPX0ZFQVRVUkVTID0gIngxMSIKKworU1JDX1VSSSArPSAiZmlsZTovLzAwMDEteWVscC5tNC1kcm9wLXRoZS1jaGVjay1mb3ItaXRzdG9vbC5wYXRjaCIKK1NSQ19VUklbYXJjaGl2ZS5tZDVzdW1dID0gIjMxODIyYjZiMTk5ZjcyNGYyMTJhZTkyMDBiYzA1NWYxIgorU1JDX1VSSVthcmNoaXZlLnNoYTI1NnN1bV0gPSAiNGQ5ZGUxYmRiNDRjMTRhZGYyNWFhNmRjMDJlYTNkZTYwOTI1Y2ZmNWViMDFmZTg5NTQ1ZTYwMzJjOWI0MjRhMiIKKworRVhUUkFfT0VDT05GICs9ICIgLS1kaXNhYmxlLW5zcyAtLXdpdGgtZGlzdHJpYnV0b3ItbmFtZT0ke0RJU1RST30iCisKK2RvX2NvbmZpZ3VyZV9wcmVwZW5kKCkgeworICAgIHNlZCAtaSAtZSBzOmhlbHA6OmcgJHtTfS9NYWtlZmlsZS5hbQorfQorCitGSUxFU18ke1BOfSArPSAiJHtkYXRhZGlyfS9hcHBkYXRhICR7ZGF0YWRpcn0vZGJ1cy0xICR7ZGF0YWRpcn0vZ25vbWUtc2hlbGwvc2VhcmNoLXByb3ZpZGVycyIKK1JERVBFTkRTXyR7UE59ID0gImlzby1jb2RlcyBhZHdhaXRhLWljb24tdGhlbWUiCitSUkVDT01NRU5EU18ke1BOfSA9ICJjYS1jZXJ0aWZpY2F0ZXMiCisKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ25vbWUvZ2NyL2djcl8zLjE4LjAuYmIgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdub21lL2djci9nY3JfMy4xOC4wLmJiCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzMjUyM2E2Li4wMDAwMDAwCi0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ25vbWUvZ2NyL2djcl8zLjE4LjAuYmIKKysrIC9kZXYvbnVsbApAQCAtMSw0MSArMCwwIEBACi1TVU1NQVJZID0gIkEgbGlicmFyeSBmb3IgYml0cyBvZiBjcnlwdG8gVUkgYW5kIHBhcnNpbmcgZXRjIgotSE9NRVBBR0UgPSAiaHR0cDovL3d3dy5nbm9tZS5vcmcvIgotQlVHVFJBQ0tFUiA9ICJodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy8iCi0KLUxJQ0VOU0UgPSAiR1BMdjIiCi1MSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT01NWNhODE3Y2NiN2Q1YjViNjYzNTU2OTBlOWFiYzYwNSIKLQotREVQRU5EUyA9ICJndGsrMyBwMTEta2l0IGdsaWItMi4wIGxpYmdjcnlwdCIKLQotaW5oZXJpdCBhdXRvdG9vbHMgZ25vbWViYXNlIGd0ay1pY29uLWNhY2hlIGd0ay1kb2MgZGlzdHJvX2ZlYXR1cmVzX2NoZWNrIHVwc3RyZWFtLXZlcnNpb24taXMtZXZlbiB2YWxhIGdvYmplY3QtaW50cm9zcGVjdGlvbgotIyBkZXBlbmRzIG9uIGd0ayszLCBidXQgYWxzbyB4MTEgdGhyb3VnaCBndGsrLXgxMQotUkVRVUlSRURfRElTVFJPX0ZFQVRVUkVTID0gIngxMSIKLQotU1JDX1VSSVthcmNoaXZlLm1kNXN1bV0gPSAiYjk1OWJhYzk5ZTE3YzliYjA5OTBhMTVjOWJlMTFhZWQiCi1TUkNfVVJJW2FyY2hpdmUuc2hhMjU2c3VtXSA9ICJkNGQxNmRhNWFmNTUxNDhhNjk0MDU1ODM1Y2NkMDdhZDM0ZGFmMGFkMDNiZGFkOTI5YmY3Y2FkMTU2MzdjZTAwIgotCi1GSUxFU18ke1BOfSArPSAiIFwKLSAgICAke2RhdGFkaXJ9L2RidXMtMSBcCi0gICAgJHtkYXRhZGlyfS9nY3ItMyBcCi0iCi0KLSMgaHR0cDovL2Vycm9ycy55b2N0b3Byb2plY3Qub3JnL0Vycm9ycy9EZXRhaWxzLzIwMjI5LwotQVJNX0lOU1RSVUNUSU9OX1NFVCA9ICJhcm0iCi0KLSMgb24geDg2LTY0IHRoZSBpbnRyb3NwZWN0aW9uIGJpbmFyeSBnb2VzIGludG8gCi0jIGFuIGluZmluaXRlIGxvb3AgdW5kZXIgcWVtdSBkdXJpbmcgY29tcGlsYXRpb24sIAotIyBwcmludGluZyB0aGUgZm9sbG93aW5nOgotIyAKLSMgZ2NyeXB0LU1lc3NhZ2U6IHNlbGVjdCgpIGVycm9yOiBCYWQgYWRkcmVzcwotIwotIyBnY3J5cHQtTWVzc2FnZTogc2VsZWN0KCkgZXJyb3I6IEJhZCBhZGRyZXNzCi0jCi0jIGdjcnlwdC1NZXNzYWdlOiBzZWxlY3QoKSBlcnJvcjogQmFkIGFkZHJlc3MKLSMKLSMgVGhpcyB3aWxsIGJlIGludmVzdGlnYXRlZCBsYXRlci4KLUVYVFJBX09FQ09ORl9hcHBlbmRfeDg2LTY0ID0gIiAtLWRpc2FibGUtaW50cm9zcGVjdGlvbiIKLQotIyBHY3ItMy5icm9rZW46IHBva3kvYnVpbGQtbWlwczY0L3RtcC93b3JrL21pcHM2NC1wb2t5LWxpbnV4L2xpYmdwZy1lcnJvci8xLjE5LXIwL2xpYmdwZy1lcnJvci0xLjE5L3NyYy9wb3NpeC1sb2NrLmM6MTE5OiBnZXRfbG9ja19vYmplY3Q6IEFzc2VydGlvbiBgISJzaXplb2YgbG9jayBvYmoiJyBmYWlsZWQuCi0jIHFlbXU6IHVuY2F1Z2h0IHRhcmdldCBzaWduYWwgNiAoQWJvcnRlZCkgLSBjb3JlIGR1bXBlZAotRVhUUkFfT0VDT05GX2FwcGVuZF9taXBzNjQgPSAiIC0tZGlzYWJsZS1pbnRyb3NwZWN0aW9uIgotCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdub21lL2djci9nY3JfMy4yMC4wLmJiIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1nbm9tZS9nY3IvZ2NyXzMuMjAuMC5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMzJhNDU1Ci0tLSAvZGV2L251bGwKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1nbm9tZS9nY3IvZ2NyXzMuMjAuMC5iYgpAQCAtMCwwICsxLDQwIEBACitTVU1NQVJZID0gIkEgbGlicmFyeSBmb3IgYml0cyBvZiBjcnlwdG8gVUkgYW5kIHBhcnNpbmcgZXRjIgorSE9NRVBBR0UgPSAiaHR0cDovL3d3dy5nbm9tZS5vcmcvIgorQlVHVFJBQ0tFUiA9ICJodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy8iCisKK0xJQ0VOU0UgPSAiR1BMdjIiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT01NWNhODE3Y2NiN2Q1YjViNjYzNTU2OTBlOWFiYzYwNSIKKworREVQRU5EUyA9ICJpbnRsdG9vbC1uYXRpdmUgZ3RrKzMgcDExLWtpdCBnbGliLTIuMCBsaWJnY3J5cHQiCisKK2luaGVyaXQgYXV0b3Rvb2xzIGdub21lYmFzZSBndGstaWNvbi1jYWNoZSBndGstZG9jIGRpc3Ryb19mZWF0dXJlc19jaGVjayB1cHN0cmVhbS12ZXJzaW9uLWlzLWV2ZW4gdmFsYSBnb2JqZWN0LWludHJvc3BlY3Rpb24KKyMgZGVwZW5kcyBvbiBndGsrMywgYnV0IGFsc28geDExIHRocm91Z2ggZ3RrKy14MTEKK1JFUVVJUkVEX0RJU1RST19GRUFUVVJFUyA9ICJ4MTEiCisKK1NSQ19VUklbYXJjaGl2ZS5tZDVzdW1dID0gIjQzMTRiZjg5ZWFjMjkzZGQwYTlkODA2NTkzZmYxYjM1IgorU1JDX1VSSVthcmNoaXZlLnNoYTI1NnN1bV0gPSAiOTA1NzJjNjI2ZDhhNzA4MjI1NTYwYzQyYjQ0MjFmNzk0MTMxNTI0N2ZhMTY3OWQ0ZWY1NjliZGU3ZjRiYjM3OSIKKworRklMRVNfJHtQTn0gKz0gIiBcCisgICAgJHtkYXRhZGlyfS9kYnVzLTEgXAorICAgICR7ZGF0YWRpcn0vZ2NyLTMgXAorIgorCisjIGh0dHA6Ly9lcnJvcnMueW9jdG9wcm9qZWN0Lm9yZy9FcnJvcnMvRGV0YWlscy8yMDIyOS8KK0FSTV9JTlNUUlVDVElPTl9TRVQgPSAiYXJtIgorCisjIG9uIHg4Ni02NCB0aGUgaW50cm9zcGVjdGlvbiBiaW5hcnkgZ29lcyBpbnRvIAorIyBhbiBpbmZpbml0ZSBsb29wIHVuZGVyIHFlbXUgZHVyaW5nIGNvbXBpbGF0aW9uLCAKKyMgcHJpbnRpbmcgdGhlIGZvbGxvd2luZzoKKyMgCisjIGdjcnlwdC1NZXNzYWdlOiBzZWxlY3QoKSBlcnJvcjogQmFkIGFkZHJlc3MKKyMKKyMgZ2NyeXB0LU1lc3NhZ2U6IHNlbGVjdCgpIGVycm9yOiBCYWQgYWRkcmVzcworIworIyBnY3J5cHQtTWVzc2FnZTogc2VsZWN0KCkgZXJyb3I6IEJhZCBhZGRyZXNzCisjCisjIFRoaXMgd2lsbCBiZSBpbnZlc3RpZ2F0ZWQgbGF0ZXIuCitFWFRSQV9PRUNPTkZfYXBwZW5kX3g4Ni02NCA9ICIgLS1kaXNhYmxlLWludHJvc3BlY3Rpb24gLS1kaXNhYmxlLWd0ay1kb2MiCisKKyMgR2NyLTMuYnJva2VuOiBwb2t5L2J1aWxkLW1pcHM2NC90bXAvd29yay9taXBzNjQtcG9reS1saW51eC9saWJncGctZXJyb3IvMS4xOS1yMC9saWJncGctZXJyb3ItMS4xOS9zcmMvcG9zaXgtbG9jay5jOjExOTogZ2V0X2xvY2tfb2JqZWN0OiBBc3NlcnRpb24gYCEic2l6ZW9mIGxvY2sgb2JqIicgZmFpbGVkLgorIyBxZW11OiB1bmNhdWdodCB0YXJnZXQgc2lnbmFsIDYgKEFib3J0ZWQpIC0gY29yZSBkdW1wZWQKK0VYVFJBX09FQ09ORl9hcHBlbmRfbWlwczY0ID0gIiAtLWRpc2FibGUtaW50cm9zcGVjdGlvbiAtLWRpc2FibGUtZ3RrLWRvYyIKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ25vbWUvZ2RrLXBpeGJ1Zi9nZGstcGl4YnVmXzIuMzIuMy5iYiBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ25vbWUvZ2RrLXBpeGJ1Zi9nZGstcGl4YnVmXzIuMzIuMy5iYgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYmE5NGVlYy4uMDAwMDAwMAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdub21lL2dkay1waXhidWYvZ2RrLXBpeGJ1Zl8yLjMyLjMuYmIKKysrIC9kZXYvbnVsbApAQCAtMSwxMDIgKzAsMCBAQAotU1VNTUFSWSA9ICJJbWFnZSBsb2FkaW5nIGxpYnJhcnkgZm9yIEdUSysiCi1IT01FUEFHRSA9ICJodHRwOi8vd3d3Lmd0ay5vcmcvIgotQlVHVFJBQ0tFUiA9ICJodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy8iCi0KLUxJQ0VOU0UgPSAiTEdQTHYyIgotTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9M2JmNTAwMDJhZWZkMDAyZjQ5ZTdiYjg1NDA2M2Y3ZTcgXAotICAgICAgICAgICAgICAgICAgICBmaWxlOi8vZ2RrLXBpeGJ1Zi9nZGstcGl4YnVmLmg7ZW5kbGluZT0yNjttZDU9NzJiMzlkYTdjYmRkZTJlNjY1MzI5ZmVmNjE4ZTFkNmIiCi0KLVNFQ1RJT04gPSAibGlicyIKLQotREVQRU5EUyA9ICJnbGliLTIuMCIKLQotTUFKX1ZFUiA9ICIke0BvZS51dGlscy50cmltX3ZlcnNpb24oIiR7UFZ9IiwgMil9IgotCi1TUkNfVVJJID0gIiR7R05PTUVfTUlSUk9SfS8ke0JQTn0vJHtNQUpfVkVSfS8ke0JQTn0tJHtQVn0udGFyLnh6IFwKLSAgICAgICAgICAgZmlsZTovL2hhcmRjb2RlZF9saWJ0b29sLnBhdGNoIFwKLSAgICAgICAgICAgZmlsZTovL2V4dGVuZGluZy1saWJpbnN0YWxsLWRlcGVuZGVuY2llcy5wYXRjaCBcCi0gICAgICAgICAgIGZpbGU6Ly9ydW4tcHRlc3QgXAotICAgICAgICAgICBmaWxlOi8vZmF0YWwtbG9hZGVyLnBhdGNoIFwKLSAgICAgICAgICAgIgotCi1TUkNfVVJJW21kNXN1bV0gPSAiOTI3NTA3NjYzOWJhYTI0YTM0MmYzZTAyYzQwMjkyMGUiCi1TUkNfVVJJW3NoYTI1NnN1bV0gPSAiMmI2NzcxZjFhYzcyZjY4N2E4OTcxZTU5ODEwYjhkYzY1OGU2NWU3ZDMwODZiZDJlNjc2ZTYxOGZkNTQxZDAzMSIKLQotaW5oZXJpdCBhdXRvdG9vbHMgcGtnY29uZmlnIGdldHRleHQgcGl4YnVmY2FjaGUgcHRlc3QtZ25vbWUgdXBzdHJlYW0tdmVyc2lvbi1pcy1ldmVuIGdvYmplY3QtaW50cm9zcGVjdGlvbgotCi1MSUJWID0gIjIuMTAuMCIKLQotR0RLX1BJWEJVRl9MT0FERVJTID89ICJwbmcganBlZyIKLQotUEFDS0FHRUNPTkZJRyA/Pz0gIiR7R0RLX1BJWEJVRl9MT0FERVJTfSIKLVBBQ0tBR0VDT05GSUdfbGludXhzdGRiYXNlID0gIiR7QGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCAneDExJywgJ3gxMScsICcnLCBkKX0gJHtHREtfUElYQlVGX0xPQURFUlN9IgotUEFDS0FHRUNPTkZJR19jbGFzcy1uYXRpdmUgPSAiJHtHREtfUElYQlVGX0xPQURFUlN9IgotCi1QQUNLQUdFQ09ORklHW3BuZ10gPSAiLS13aXRoLWxpYnBuZywtLXdpdGhvdXQtbGlicG5nLGxpYnBuZyIKLVBBQ0tBR0VDT05GSUdbanBlZ10gPSAiLS13aXRoLWxpYmpwZWcsLS13aXRob3V0LWxpYmpwZWcsanBlZyIKLVBBQ0tBR0VDT05GSUdbdGlmZl0gPSAiLS13aXRoLWxpYnRpZmYsLS13aXRob3V0LWxpYnRpZmYsdGlmZiIKLVBBQ0tBR0VDT05GSUdbanBlZzIwMDBdID0gIi0td2l0aC1saWJqYXNwZXIsLS13aXRob3V0LWxpYmphc3BlcixqYXNwZXIiCi0KLSMgVXNlIEdJTyB0byBzbmlmZiBpbWFnZSBmb3JtYXQgaW5zdGVhZCBvZiB0cnlpbmcgYWxsIGxvYWRlcnMKLVBBQ0tBR0VDT05GSUdbZ2lvLXNuaWZmXSA9ICItLWVuYWJsZS1naW8tc25pZmZpbmcsLS1kaXNhYmxlLWdpby1zbmlmZmluZywsc2hhcmVkLW1pbWUtaW5mbyIKLVBBQ0tBR0VDT05GSUdbeDExXSA9ICItLXdpdGgteDExLC0td2l0aG91dC14MTEsdmlydHVhbC9saWJ4MTEiCi0KLVBBQ0tBR0VTID0rICIke1BOfS14bGliIgotCi1GSUxFU18ke1BOfS14bGliID0gIiR7bGliZGlyfS8qcGl4YnVmX3hsaWIqJHtTT0xJQlN9IgotQUxMT1dfRU1QVFlfJHtQTn0teGxpYiA9ICIxIgotCi1GSUxFU18ke1BOfSArPSAiJHtsaWJkaXJ9L2dkay1waXhidWYtMi4wL2dkay1waXhidWYtcXVlcnktbG9hZGVycyIKLQotRklMRVNfJHtQTn0tZGV2ICs9ICIgXAotCSR7YmluZGlyfS9nZGstcGl4YnVmLWNzb3VyY2UgXAotCSR7YmluZGlyfS9nZGstcGl4YnVmLXBpeGRhdGEgXAotCSR7aW5jbHVkZWRpcn0vKiBcCi0JJHtsaWJkaXJ9L2dkay1waXhidWYtMi4wLyR7TElCVn0vbG9hZGVycy8qLmxhIFwKLSIKLQotUEFDS0FHRVNfRFlOQU1JQyArPSAiXmdkay1waXhidWYtbG9hZGVyLS4qIgotUEFDS0FHRVNfRFlOQU1JQ19jbGFzcy1uYXRpdmUgPSAiIgotCi1weXRob24gcG9wdWxhdGVfcGFja2FnZXNfcHJlcGVuZCAoKSB7Ci0gICAgcG9zdGluc3RfcGl4YnVmbG9hZGVyID0gZC5nZXRWYXIoInBvc3RpbnN0X3BpeGJ1ZmxvYWRlciIsIFRydWUpCi0KLSAgICBsb2FkZXJzX3Jvb3QgPSBkLmV4cGFuZCgnJHtsaWJkaXJ9L2dkay1waXhidWYtMi4wLyR7TElCVn0vbG9hZGVycycpCi0KLSAgICBwYWNrYWdlcyA9ICcgJy5qb2luKGRvX3NwbGl0X3BhY2thZ2VzKGQsIGxvYWRlcnNfcm9vdCwgJ15saWJwaXhidWZsb2FkZXItKC4qKVwuc28kJywgJ2dkay1waXhidWYtbG9hZGVyLSVzJywgJ0dESyBwaXhidWYgbG9hZGVyIGZvciAlcycpKQotICAgIGQuc2V0VmFyKCdQSVhCVUZfUEFDS0FHRVMnLCBwYWNrYWdlcykKLQotICAgICMgVGhlIHRlc3Qgc3VpdGUgZXhlcmNpc2VzIGFsbCB0aGUgbG9hZGVycywgc28gZW5zdXJlIHRoZXkgYXJlIGFsbAotICAgICMgZGVwZW5kZW5jaWVzIG9mIHRoZSBwdGVzdCBwYWNrYWdlLgotICAgIGQuYXBwZW5kVmFyKCJSREVQRU5EU19nZGstcGl4YnVmLXB0ZXN0IiwgIiAiICsgcGFja2FnZXMpCi19Ci0KLWRvX2luc3RhbGxfYXBwZW5kKCkgewotCSMgTW92ZSBnZGstcGl4YnVmLXF1ZXJ5LWxvYWRlcnMgaW50byBsaWJkaXIgc28gaXQgaXMgYWx3YXlzIGF2YWlsYWJsZQotCSMgaW4gbXVsdGlsaWIgYnVpbGRzLgotCW12ICR7RH0vJHtiaW5kaXJ9L2dkay1waXhidWYtcXVlcnktbG9hZGVycyAke0R9LyR7bGliZGlyfS9nZGstcGl4YnVmLTIuMC8KLX0KLQotZG9faW5zdGFsbF9hcHBlbmRfY2xhc3MtbmF0aXZlKCkgewotCWZpbmQgJHtEfSR7bGliZGlyfSAtbmFtZSAibGlicGl4YnVmbG9hZGVyLSoubGEiIC1leGVjIHJtIFx7XH0gXDsKLQotCWNyZWF0ZV93cmFwcGVyICR7RH0vJHtiaW5kaXJ9L2dkay1waXhidWYtY3NvdXJjZSBcCi0JCUdES19QSVhCVUZfTU9EVUxFX0ZJTEU9JHtTVEFHSU5HX0xJQkRJUl9OQVRJVkV9L2dkay1waXhidWYtMi4wLyR7TElCVn0vbG9hZGVycy5jYWNoZQotCi0JY3JlYXRlX3dyYXBwZXIgJHtEfS8ke2JpbmRpcn0vZ2RrLXBpeGJ1Zi1waXhkYXRhIFwKLQkJR0RLX1BJWEJVRl9NT0RVTEVfRklMRT0ke1NUQUdJTkdfTElCRElSX05BVElWRX0vZ2RrLXBpeGJ1Zi0yLjAvJHtMSUJWfS9sb2FkZXJzLmNhY2hlCi0KLQljcmVhdGVfd3JhcHBlciAke0R9LyR7bGliZGlyfS9nZGstcGl4YnVmLTIuMC9nZGstcGl4YnVmLXF1ZXJ5LWxvYWRlcnMgXAotCQlHREtfUElYQlVGX01PRFVMRV9GSUxFPSR7U1RBR0lOR19MSUJESVJfTkFUSVZFfS9nZGstcGl4YnVmLTIuMC8ke0xJQlZ9L2xvYWRlcnMuY2FjaGUgXAotCQlHREtfUElYQlVGX01PRFVMRURJUj0ke1NUQUdJTkdfTElCRElSX05BVElWRX0vZ2RrLXBpeGJ1Zi0yLjAvJHtMSUJWfS9sb2FkZXJzCi19Ci1CQkNMQVNTRVhURU5EID0gIm5hdGl2ZSIKLQotU1NUQVRFUFJFSU5TVEZVTkNTX2FwcGVuZF9jbGFzcy1uYXRpdmUgPSAiIGdka3BpeGJ1Zl9zc3RhdGVfcHJlaW5zdCIKLVNZU1JPT1RfUFJFUFJPQ0VTU19GVU5DU19hcHBlbmRfY2xhc3MtbmF0aXZlID0gIiBnZGtwaXhidWZfc3N0YXRlX3ByZWluc3QiCi0KLWdka3BpeGJ1Zl9zc3RhdGVfcHJlaW5zdCgpIHsKLQlpZiBbICIke0JCX0NVUlJFTlRUQVNLfSIgPSAicG9wdWxhdGVfc3lzcm9vdCIgXTsgdGhlbgotCQlybSAtcmYgJHtTVEFHSU5HX0xJQkRJUl9OQVRJVkV9L2dkay1waXhidWYtMi4wLyR7TElCVn0vKgotCWZpCi19CmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdub21lL2dkay1waXhidWYvZ2RrLXBpeGJ1Zl8yLjM0LjAuYmIgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdub21lL2dkay1waXhidWYvZ2RrLXBpeGJ1Zl8yLjM0LjAuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGYzOTQ5NAotLS0gL2Rldi9udWxsCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ25vbWUvZ2RrLXBpeGJ1Zi9nZGstcGl4YnVmXzIuMzQuMC5iYgpAQCAtMCwwICsxLDEwMiBAQAorU1VNTUFSWSA9ICJJbWFnZSBsb2FkaW5nIGxpYnJhcnkgZm9yIEdUSysiCitIT01FUEFHRSA9ICJodHRwOi8vd3d3Lmd0ay5vcmcvIgorQlVHVFJBQ0tFUiA9ICJodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy8iCisKK0xJQ0VOU0UgPSAiTEdQTHYyIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9M2JmNTAwMDJhZWZkMDAyZjQ5ZTdiYjg1NDA2M2Y3ZTcgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vZ2RrLXBpeGJ1Zi9nZGstcGl4YnVmLmg7ZW5kbGluZT0yNjttZDU9NzJiMzlkYTdjYmRkZTJlNjY1MzI5ZmVmNjE4ZTFkNmIiCisKK1NFQ1RJT04gPSAibGlicyIKKworREVQRU5EUyA9ICJnbGliLTIuMCIKKworTUFKX1ZFUiA9ICIke0BvZS51dGlscy50cmltX3ZlcnNpb24oIiR7UFZ9IiwgMil9IgorCitTUkNfVVJJID0gIiR7R05PTUVfTUlSUk9SfS8ke0JQTn0vJHtNQUpfVkVSfS8ke0JQTn0tJHtQVn0udGFyLnh6IFwKKyAgICAgICAgICAgZmlsZTovL2hhcmRjb2RlZF9saWJ0b29sLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL2V4dGVuZGluZy1saWJpbnN0YWxsLWRlcGVuZGVuY2llcy5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9ydW4tcHRlc3QgXAorICAgICAgICAgICBmaWxlOi8vZmF0YWwtbG9hZGVyLnBhdGNoIFwKKyAgICAgICAgICAgIgorCitTUkNfVVJJW21kNXN1bV0gPSAiNjNjYjE5ZjkyY2Y3NzA5Y2NmNDRiYmI2ZmUxZmY3MGMiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiZDU1ZTViMzgzZWUyMTliZDBlMjNiZjZlZDQ0MjdkNTZhN2RiNTM3OTcyOWE2ZTNlMGEwZTBlYmE5YThkODg3OSIKKworaW5oZXJpdCBhdXRvdG9vbHMgcGtnY29uZmlnIGdldHRleHQgcGl4YnVmY2FjaGUgcHRlc3QtZ25vbWUgdXBzdHJlYW0tdmVyc2lvbi1pcy1ldmVuIGdvYmplY3QtaW50cm9zcGVjdGlvbiBndGstZG9jCisKK0xJQlYgPSAiMi4xMC4wIgorCitHREtfUElYQlVGX0xPQURFUlMgPz0gInBuZyBqcGVnIgorCitQQUNLQUdFQ09ORklHID8/PSAiJHtHREtfUElYQlVGX0xPQURFUlN9IgorUEFDS0FHRUNPTkZJR19saW51eHN0ZGJhc2UgPSAiJHtAYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsICd4MTEnLCAneDExJywgJycsIGQpfSAke0dES19QSVhCVUZfTE9BREVSU30iCitQQUNLQUdFQ09ORklHX2NsYXNzLW5hdGl2ZSA9ICIke0dES19QSVhCVUZfTE9BREVSU30iCisKK1BBQ0tBR0VDT05GSUdbcG5nXSA9ICItLXdpdGgtbGlicG5nLC0td2l0aG91dC1saWJwbmcsbGlicG5nIgorUEFDS0FHRUNPTkZJR1tqcGVnXSA9ICItLXdpdGgtbGlianBlZywtLXdpdGhvdXQtbGlianBlZyxqcGVnIgorUEFDS0FHRUNPTkZJR1t0aWZmXSA9ICItLXdpdGgtbGlidGlmZiwtLXdpdGhvdXQtbGlidGlmZix0aWZmIgorUEFDS0FHRUNPTkZJR1tqcGVnMjAwMF0gPSAiLS13aXRoLWxpYmphc3BlciwtLXdpdGhvdXQtbGliamFzcGVyLGphc3BlciIKKworIyBVc2UgR0lPIHRvIHNuaWZmIGltYWdlIGZvcm1hdCBpbnN0ZWFkIG9mIHRyeWluZyBhbGwgbG9hZGVycworUEFDS0FHRUNPTkZJR1tnaW8tc25pZmZdID0gIi0tZW5hYmxlLWdpby1zbmlmZmluZywtLWRpc2FibGUtZ2lvLXNuaWZmaW5nLCxzaGFyZWQtbWltZS1pbmZvIgorUEFDS0FHRUNPTkZJR1t4MTFdID0gIi0td2l0aC14MTEsLS13aXRob3V0LXgxMSx2aXJ0dWFsL2xpYngxMSIKKworUEFDS0FHRVMgPSsgIiR7UE59LXhsaWIiCisKK0ZJTEVTXyR7UE59LXhsaWIgPSAiJHtsaWJkaXJ9LypwaXhidWZfeGxpYioke1NPTElCU30iCitBTExPV19FTVBUWV8ke1BOfS14bGliID0gIjEiCisKK0ZJTEVTXyR7UE59ICs9ICIke2xpYmRpcn0vZ2RrLXBpeGJ1Zi0yLjAvZ2RrLXBpeGJ1Zi1xdWVyeS1sb2FkZXJzIgorCitGSUxFU18ke1BOfS1kZXYgKz0gIiBcCisJJHtiaW5kaXJ9L2dkay1waXhidWYtY3NvdXJjZSBcCisJJHtiaW5kaXJ9L2dkay1waXhidWYtcGl4ZGF0YSBcCisJJHtpbmNsdWRlZGlyfS8qIFwKKwkke2xpYmRpcn0vZ2RrLXBpeGJ1Zi0yLjAvJHtMSUJWfS9sb2FkZXJzLyoubGEgXAorIgorCitQQUNLQUdFU19EWU5BTUlDICs9ICJeZ2RrLXBpeGJ1Zi1sb2FkZXItLioiCitQQUNLQUdFU19EWU5BTUlDX2NsYXNzLW5hdGl2ZSA9ICIiCisKK3B5dGhvbiBwb3B1bGF0ZV9wYWNrYWdlc19wcmVwZW5kICgpIHsKKyAgICBwb3N0aW5zdF9waXhidWZsb2FkZXIgPSBkLmdldFZhcigicG9zdGluc3RfcGl4YnVmbG9hZGVyIiwgVHJ1ZSkKKworICAgIGxvYWRlcnNfcm9vdCA9IGQuZXhwYW5kKCcke2xpYmRpcn0vZ2RrLXBpeGJ1Zi0yLjAvJHtMSUJWfS9sb2FkZXJzJykKKworICAgIHBhY2thZ2VzID0gJyAnLmpvaW4oZG9fc3BsaXRfcGFja2FnZXMoZCwgbG9hZGVyc19yb290LCAnXmxpYnBpeGJ1ZmxvYWRlci0oLiopXC5zbyQnLCAnZ2RrLXBpeGJ1Zi1sb2FkZXItJXMnLCAnR0RLIHBpeGJ1ZiBsb2FkZXIgZm9yICVzJykpCisgICAgZC5zZXRWYXIoJ1BJWEJVRl9QQUNLQUdFUycsIHBhY2thZ2VzKQorCisgICAgIyBUaGUgdGVzdCBzdWl0ZSBleGVyY2lzZXMgYWxsIHRoZSBsb2FkZXJzLCBzbyBlbnN1cmUgdGhleSBhcmUgYWxsCisgICAgIyBkZXBlbmRlbmNpZXMgb2YgdGhlIHB0ZXN0IHBhY2thZ2UuCisgICAgZC5hcHBlbmRWYXIoIlJERVBFTkRTX2dkay1waXhidWYtcHRlc3QiLCAiICIgKyBwYWNrYWdlcykKK30KKworZG9faW5zdGFsbF9hcHBlbmQoKSB7CisJIyBNb3ZlIGdkay1waXhidWYtcXVlcnktbG9hZGVycyBpbnRvIGxpYmRpciBzbyBpdCBpcyBhbHdheXMgYXZhaWxhYmxlCisJIyBpbiBtdWx0aWxpYiBidWlsZHMuCisJbXYgJHtEfS8ke2JpbmRpcn0vZ2RrLXBpeGJ1Zi1xdWVyeS1sb2FkZXJzICR7RH0vJHtsaWJkaXJ9L2dkay1waXhidWYtMi4wLworfQorCitkb19pbnN0YWxsX2FwcGVuZF9jbGFzcy1uYXRpdmUoKSB7CisJZmluZCAke0R9JHtsaWJkaXJ9IC1uYW1lICJsaWJwaXhidWZsb2FkZXItKi5sYSIgLWV4ZWMgcm0gXHtcfSBcOworCisJY3JlYXRlX3dyYXBwZXIgJHtEfS8ke2JpbmRpcn0vZ2RrLXBpeGJ1Zi1jc291cmNlIFwKKwkJR0RLX1BJWEJVRl9NT0RVTEVfRklMRT0ke1NUQUdJTkdfTElCRElSX05BVElWRX0vZ2RrLXBpeGJ1Zi0yLjAvJHtMSUJWfS9sb2FkZXJzLmNhY2hlCisKKwljcmVhdGVfd3JhcHBlciAke0R9LyR7YmluZGlyfS9nZGstcGl4YnVmLXBpeGRhdGEgXAorCQlHREtfUElYQlVGX01PRFVMRV9GSUxFPSR7U1RBR0lOR19MSUJESVJfTkFUSVZFfS9nZGstcGl4YnVmLTIuMC8ke0xJQlZ9L2xvYWRlcnMuY2FjaGUKKworCWNyZWF0ZV93cmFwcGVyICR7RH0vJHtsaWJkaXJ9L2dkay1waXhidWYtMi4wL2dkay1waXhidWYtcXVlcnktbG9hZGVycyBcCisJCUdES19QSVhCVUZfTU9EVUxFX0ZJTEU9JHtTVEFHSU5HX0xJQkRJUl9OQVRJVkV9L2dkay1waXhidWYtMi4wLyR7TElCVn0vbG9hZGVycy5jYWNoZSBcCisJCUdES19QSVhCVUZfTU9EVUxFRElSPSR7U1RBR0lOR19MSUJESVJfTkFUSVZFfS9nZGstcGl4YnVmLTIuMC8ke0xJQlZ9L2xvYWRlcnMKK30KK0JCQ0xBU1NFWFRFTkQgPSAibmF0aXZlIgorCitTU1RBVEVQUkVJTlNURlVOQ1NfYXBwZW5kX2NsYXNzLW5hdGl2ZSA9ICIgZ2RrcGl4YnVmX3NzdGF0ZV9wcmVpbnN0IgorU1lTUk9PVF9QUkVQUk9DRVNTX0ZVTkNTX2FwcGVuZF9jbGFzcy1uYXRpdmUgPSAiIGdka3BpeGJ1Zl9zc3RhdGVfcHJlaW5zdCIKKworZ2RrcGl4YnVmX3NzdGF0ZV9wcmVpbnN0KCkgeworCWlmIFsgIiR7QkJfQ1VSUkVOVFRBU0t9IiA9ICJwb3B1bGF0ZV9zeXNyb290IiBdOyB0aGVuCisJCXJtIC1yZiAke1NUQUdJTkdfTElCRElSX05BVElWRX0vZ2RrLXBpeGJ1Zi0yLjAvJHtMSUJWfS8qCisJZmkKK30KZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ25vbWUvZ25vbWUtZGVza3RvcC9nbm9tZS1kZXNrdG9wM18zLjE4LjIuYmIgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdub21lL2dub21lLWRlc2t0b3AvZ25vbWUtZGVza3RvcDNfMy4xOC4yLmJiCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlZTQ2MGQ5Li4wMDAwMDAwCi0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ25vbWUvZ25vbWUtZGVza3RvcC9nbm9tZS1kZXNrdG9wM18zLjE4LjIuYmIKKysrIC9kZXYvbnVsbApAQCAtMSwyNCArMCwwIEBACi1TVU1NQVJZID0gIkdOT01FIGxpYnJhcnkgZm9yIHJlYWRpbmcgLmRlc2t0b3AgZmlsZXMiCi1TRUNUSU9OID0gIngxMS9nbm9tZSIKLUxJQ0VOU0UgPSAiR1BMdjIgJiBMR1BMdjIiCi1MSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT1iMjM0ZWU0ZDY5ZjVmY2U0NDg2YTgwZmRhZjRhNDI2MyBcCi0gICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9DT1BZSU5HLkxJQjttZDU9NWYzMGYwNzE2ZGZkZDBkOTFlYjQzOWViZWM1MjJlYzIiCi0KLUJQTiA9ICJnbm9tZS1kZXNrdG9wIgotCi1pbmhlcml0IGdub21lIHBrZ2NvbmZpZyB1cHN0cmVhbS12ZXJzaW9uLWlzLWV2ZW4gZ29iamVjdC1pbnRyb3NwZWN0aW9uCi1TUkNfVVJJW2FyY2hpdmUubWQ1c3VtXSA9ICI5YTU4NzUyNDdhYmRiOTliYWQ5M2YxYzQyMzBkMWQ2ZCIKLVNSQ19VUklbYXJjaGl2ZS5zaGEyNTZzdW1dID0gImRkZDQ2ZDAyMmRlMTM3NTQzYTcxZjUwYzczOTJiMzJmOWI5OGQ1ZDNmMmI1MzA0MGIzNWY1ODAyZGUyZTdiNTYiCi0KLURFUEVORFMgKz0gImdzZXR0aW5ncy1kZXNrdG9wLXNjaGVtYXMgZ2NvbmYgbGlieHJhbmRyIHZpcnR1YWwvbGlieDExIGd0ayszIGdsaWItMi4wIGdub21lLWRvYy11dGlscyBnbm9tZS1jb21tb24gc3RhcnR1cC1ub3RpZmljYXRpb24geGtleWJvYXJkLWNvbmZpZyBpc28tY29kZXMiCi0KLWluaGVyaXQgZGlzdHJvX2ZlYXR1cmVzX2NoZWNrCi1SRVFVSVJFRF9ESVNUUk9fRkVBVFVSRVMgPSAieDExIgotCi1FWFRSQV9PRUNPTkYgPSAiLS1kaXNhYmxlLWRlc2t0b3AtZG9jcyIKLQotUEFDS0FHRVMgPSsgImxpYmdub21lLWRlc2t0b3AzIgotRklMRVNfbGliZ25vbWUtZGVza3RvcDMgPSAiJHtsaWJkaXJ9L2xpYioke1NPTElCU30gJHtkYXRhZGlyfS9saWJnbm9tZS1kZXNrdG9wKi9wbnAuaWRzICR7ZGF0YWRpcn0vZ25vbWUvKnhtbCIKLQotUlJFQ09NTUVORFNfbGliZ25vbWUtZGVza3RvcDMgKz0gImdzZXR0aW5ncy1kZXNrdG9wLXNjaGVtYXMiCi0KZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ25vbWUvZ25vbWUtZGVza3RvcC9nbm9tZS1kZXNrdG9wM18zLjIwLjIuYmIgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdub21lL2dub21lLWRlc2t0b3AvZ25vbWUtZGVza3RvcDNfMy4yMC4yLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmViMDYxYjIKLS0tIC9kZXYvbnVsbAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdub21lL2dub21lLWRlc2t0b3AvZ25vbWUtZGVza3RvcDNfMy4yMC4yLmJiCkBAIC0wLDAgKzEsMjMgQEAKK1NVTU1BUlkgPSAiR05PTUUgbGlicmFyeSBmb3IgcmVhZGluZyAuZGVza3RvcCBmaWxlcyIKK1NFQ1RJT04gPSAieDExL2dub21lIgorTElDRU5TRSA9ICJHUEx2MiAmIExHUEx2MiIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PWIyMzRlZTRkNjlmNWZjZTQ0ODZhODBmZGFmNGE0MjYzIFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL0NPUFlJTkcuTElCO21kNT01ZjMwZjA3MTZkZmRkMGQ5MWViNDM5ZWJlYzUyMmVjMiIKKworQlBOID0gImdub21lLWRlc2t0b3AiCisKK2luaGVyaXQgZ25vbWUgcGtnY29uZmlnIHVwc3RyZWFtLXZlcnNpb24taXMtZXZlbiBnb2JqZWN0LWludHJvc3BlY3Rpb24KK1NSQ19VUklbYXJjaGl2ZS5tZDVzdW1dID0gIjgzNTRlZDM4NjI0ZjVlYjZiNWQzNDI2N2I2NThhOWM5IgorU1JDX1VSSVthcmNoaXZlLnNoYTI1NnN1bV0gPSAiNDkyYzJkYTdhYThjM2E4YjY1Nzk2ZTgxNzFmYzhmMGRmYjVkMzIyZGQyNzk5YzBkNzYzOTJlMWZiMDYxZTJiMiIKKworREVQRU5EUyArPSAiaW50bHRvb2wtbmF0aXZlIGdzZXR0aW5ncy1kZXNrdG9wLXNjaGVtYXMgZ2NvbmYgbGlieHJhbmRyIHZpcnR1YWwvbGlieDExIGd0ayszIGdsaWItMi4wIHN0YXJ0dXAtbm90aWZpY2F0aW9uIHhrZXlib2FyZC1jb25maWcgaXNvLWNvZGVzIgorCitpbmhlcml0IGRpc3Ryb19mZWF0dXJlc19jaGVjayBndGstZG9jCitSRVFVSVJFRF9ESVNUUk9fRkVBVFVSRVMgPSAieDExIgorCitFWFRSQV9PRUNPTkYgPSAiLS1kaXNhYmxlLWRlc2t0b3AtZG9jcyIKKworUEFDS0FHRVMgPSsgImxpYmdub21lLWRlc2t0b3AzIgorRklMRVNfbGliZ25vbWUtZGVza3RvcDMgPSAiJHtsaWJkaXJ9L2xpYioke1NPTElCU30gJHtkYXRhZGlyfS9saWJnbm9tZS1kZXNrdG9wKi9wbnAuaWRzICR7ZGF0YWRpcn0vZ25vbWUvKnhtbCIKKworUlJFQ09NTUVORFNfbGliZ25vbWUtZGVza3RvcDMgKz0gImdzZXR0aW5ncy1kZXNrdG9wLXNjaGVtYXMiCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdub21lL2dub21lL2Fkd2FpdGEtaWNvbi10aGVtZV8zLjE4LjAuYmIgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdub21lL2dub21lL2Fkd2FpdGEtaWNvbi10aGVtZV8zLjE4LjAuYmIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDgxYzg4NDUuLjAwMDAwMDAKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1nbm9tZS9nbm9tZS9hZHdhaXRhLWljb24tdGhlbWVfMy4xOC4wLmJiCisrKyAvZGV2L251bGwKQEAgLTEsMzcgKzAsMCBAQAotU1VNTUFSWSA9ICJHVEsrIGljb24gdGhlbWUiCi1IT01FUEFHRSA9ICJodHRwOi8vZnRwLmdub21lLm9yZy9wdWIvR05PTUUvc291cmNlcy9hZHdhaXRhLWljb24tdGhlbWUvIgotQlVHVFJBQ0tFUiA9ICJodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy8iCi1TRUNUSU9OID0gIngxMS9nbm9tZSIKLQotTElDRU5TRSA9ICJMR1BMLTMuMCB8IENDLUJZLVNBLTMuMCIKLUxJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PWM4NGNhYzg4ZTQ2ZmMwNzY0N2VhMDdlNmMyNGVlYjdjIgotCi1pbmhlcml0IGFsbGFyY2ggYXV0b3Rvb2xzIHBrZ2NvbmZpZyBnZXR0ZXh0IGd0ay1pY29uLWNhY2hlIHVwc3RyZWFtLXZlcnNpb24taXMtZXZlbgotCi1ERVBFTkRTICs9ICJpbnRsdG9vbC1uYXRpdmUiCi0KLU1BSl9WRVIgPSAiJHtAb2UudXRpbHMudHJpbV92ZXJzaW9uKCIke1BWfSIsIDIpfSIKLVNSQ19VUkkgPSAiJHtHTk9NRV9NSVJST1J9LyR7QlBOfS8ke01BSl9WRVJ9LyR7QlBOfS0ke1BWfS50YXIueHogXAotICAgICAgICAgICIKLQotU1JDX1VSSVttZDVzdW1dID0gImVjMWZhM2ZkZTgzYWQxNjZhZTcwNzVhOTdkYzFlYzRiIgotU1JDX1VSSVtzaGEyNTZzdW1dID0gIjVlOWNlNzI2MDAxZmRkOGVlOTNjMzk0ZmRjM2NkYjllMTYwM2JiZWQ1YjdjNjJkZjQ1M2NjZjUyMWVjNTBlNTgiCi0KLWRvX2luc3RhbGxfYXBwZW5kKCkgewotCSMgQnVpbGQgdXNlcyBndGstZW5jb2RlLXN5bWJvbGljLXN2ZyB0byBjcmVhdGUgcG5nIHZlcnNpb25zOgotICAgICAgICAjIG5vIG5lZWQgdG8gc3RvcmUgdGhlIHN2Z3MgYW55bW9yZS4KLQlybSAtZiAke0R9JHtwcmVmaXh9L3NoYXJlL2ljb25zL0Fkd2FpdGEvc2NhbGFibGUvKi8qLXN5bWJvbGljLnN2ZyBcCi0JICAgICAgJHtEfSR7cHJlZml4fS9zaGFyZS9pY29ucy9BZHdhaXRhL3NjYWxhYmxlLyovKi1zeW1ib2xpYy1ydGwuc3ZnCi19Ci0KLVBBQ0tBR0VTID0gIiR7UE59LWN1cnNvcnMgJHtQTn0tc3ltYm9saWMgJHtQTn0taGlyZXMgJHtQTn0iCi0KLVJSRVBMQUNFU18ke1BOfSA9ICJnbm9tZS1pY29uLXRoZW1lIgotUkNPTkZMSUNUU18ke1BOfSA9ICJnbm9tZS1pY29uLXRoZW1lIgotUlBST1ZJREVTXyR7UE59ID0gImdub21lLWljb24tdGhlbWUiCi0KLUZJTEVTXyR7UE59LWN1cnNvcnMgPSAiJHtwcmVmaXh9L3NoYXJlL2ljb25zL0Fkd2FpdGEvY3Vyc29ycy8iCi1GSUxFU18ke1BOfS1zeW1ib2xpYyA9ICIke3ByZWZpeH0vc2hhcmUvaWNvbnMvQWR3YWl0YS8qLyovKi5zeW1ib2xpYy5wbmciCi1GSUxFU18ke1BOfS1oaXJlcyA9ICIke3ByZWZpeH0vc2hhcmUvaWNvbnMvQWR3YWl0YS8yNTZ4MjU2LyIKLUZJTEVTXyR7UE59ID0gIiR7cHJlZml4fS9zaGFyZS9pY29ucy9BZHdhaXRhLyBcCi0gICAgICAgICAgICAgICAke3ByZWZpeH0vc2hhcmUvcGtnY29uZmlnL2Fkd2FpdGEtaWNvbi10aGVtZS5wYyIKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ25vbWUvZ25vbWUvYWR3YWl0YS1pY29uLXRoZW1lXzMuMjAuYmIgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdub21lL2dub21lL2Fkd2FpdGEtaWNvbi10aGVtZV8zLjIwLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJiMGVhZWIKLS0tIC9kZXYvbnVsbAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdub21lL2dub21lL2Fkd2FpdGEtaWNvbi10aGVtZV8zLjIwLmJiCkBAIC0wLDAgKzEsNDEgQEAKK1NVTU1BUlkgPSAiR1RLKyBpY29uIHRoZW1lIgorSE9NRVBBR0UgPSAiaHR0cDovL2Z0cC5nbm9tZS5vcmcvcHViL0dOT01FL3NvdXJjZXMvYWR3YWl0YS1pY29uLXRoZW1lLyIKK0JVR1RSQUNLRVIgPSAiaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvIgorU0VDVElPTiA9ICJ4MTEvZ25vbWUiCisKK0xJQ0VOU0UgPSAiTEdQTC0zLjAgfCBDQy1CWS1TQS0zLjAiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT1jODRjYWM4OGU0NmZjMDc2NDdlYTA3ZTZjMjRlZWI3YyIKKworaW5oZXJpdCBhbGxhcmNoIGF1dG90b29scyBwa2djb25maWcgZ2V0dGV4dCBndGstaWNvbi1jYWNoZSB1cHN0cmVhbS12ZXJzaW9uLWlzLWV2ZW4KKworCitNQUpfVkVSID0gIiR7QG9lLnV0aWxzLnRyaW1fdmVyc2lvbigiJHtQVn0iLCAyKX0iCitTUkNfVVJJID0gIiR7R05PTUVfTUlSUk9SfS8ke0JQTn0vJHtNQUpfVkVSfS8ke0JQTn0tJHtQVn0udGFyLnh6IFwKKyAgICAgICAgICAiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICI0MTFiZTJiZDY4ZGQ4YjBhM2M4NmFjYTJlYjM1MWNlNCIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICI3YTBhODg3MzQ5ZjM0MGRkNjQ0MDMyZjg5ZDgxMjY0YjY5NGM0YjAwNmJkNTFhZjFjMmMzNjhkNDMxZTdhZTM1IgorCitkb19pbnN0YWxsX2FwcGVuZCgpIHsKKwkjIEJ1aWxkIHVzZXMgZ3RrLWVuY29kZS1zeW1ib2xpYy1zdmcgdG8gY3JlYXRlIHBuZyB2ZXJzaW9uczoKKyAgICAgICAgIyBubyBuZWVkIHRvIHN0b3JlIHRoZSBzdmdzIGFueW1vcmUuCisJcm0gLWYgJHtEfSR7cHJlZml4fS9zaGFyZS9pY29ucy9BZHdhaXRhL3NjYWxhYmxlLyovKi1zeW1ib2xpYy5zdmcgXAorCSAgICAgICR7RH0ke3ByZWZpeH0vc2hhcmUvaWNvbnMvQWR3YWl0YS9zY2FsYWJsZS8qLyotc3ltYm9saWMtcnRsLnN2ZworfQorCitQQUNLQUdFUyA9ICIke1BOfS1jdXJzb3JzICR7UE59LXN5bWJvbGljLWhpcmVzICR7UE59LXN5bWJvbGljICR7UE59LWhpcmVzICR7UE59IgorCitSUkVQTEFDRVNfJHtQTn0gPSAiZ25vbWUtaWNvbi10aGVtZSIKK1JDT05GTElDVFNfJHtQTn0gPSAiZ25vbWUtaWNvbi10aGVtZSIKK1JQUk9WSURFU18ke1BOfSA9ICJnbm9tZS1pY29uLXRoZW1lIgorCitGSUxFU18ke1BOfS1jdXJzb3JzID0gIiR7cHJlZml4fS9zaGFyZS9pY29ucy9BZHdhaXRhL2N1cnNvcnMvIgorRklMRVNfJHtQTn0tc3ltYm9saWMtaGlyZXMgPSAiJHtwcmVmaXh9L3NoYXJlL2ljb25zL0Fkd2FpdGEvOTZ4OTYvKi8qLnN5bWJvbGljLnBuZyBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAke3ByZWZpeH0vc2hhcmUvaWNvbnMvQWR3YWl0YS82NHg2NC8qLyouc3ltYm9saWMucG5nIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICR7cHJlZml4fS9zaGFyZS9pY29ucy9BZHdhaXRhLzQ4eDQ4LyovKi5zeW1ib2xpYy5wbmcgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHtwcmVmaXh9L3NoYXJlL2ljb25zL0Fkd2FpdGEvMzJ4MzIvKi8qLnN5bWJvbGljLnBuZyIKK0ZJTEVTXyR7UE59LXN5bWJvbGljID0gIiR7cHJlZml4fS9zaGFyZS9pY29ucy9BZHdhaXRhLzE2eDE2LyovKi5zeW1ib2xpYy5wbmcgXAorICAgICAgICAgICAgICAgICAgICAgICAgJHtwcmVmaXh9L3NoYXJlL2ljb25zL0Fkd2FpdGEvMjR4MjQvKi8qLnN5bWJvbGljLnBuZyIKK0ZJTEVTXyR7UE59LWhpcmVzID0gIiR7cHJlZml4fS9zaGFyZS9pY29ucy9BZHdhaXRhLzI1NngyNTYvIgorRklMRVNfJHtQTn0gPSAiJHtwcmVmaXh9L3NoYXJlL2ljb25zL0Fkd2FpdGEvIFwKKyAgICAgICAgICAgICAgICR7cHJlZml4fS9zaGFyZS9wa2djb25maWcvYWR3YWl0YS1pY29uLXRoZW1lLnBjIgpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1nbm9tZS9nbm9tZS9nbm9tZS1kb2MtdXRpbHMuaW5jIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1nbm9tZS9nbm9tZS9nbm9tZS1kb2MtdXRpbHMuaW5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4YWRmYWM3Li4wMDAwMDAwCi0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ25vbWUvZ25vbWUvZ25vbWUtZG9jLXV0aWxzLmluYworKysgL2Rldi9udWxsCkBAIC0xLDMwICswLDAgQEAKLVNVTU1BUlkgPSAiQSBjb2xsZWN0aW9uIG9mIGRvY3VtZW50YXRpb24gdXRpbGl0aWVzIGZvciB0aGUgR25vbWUgcHJvamVjdCIKLURFU0NSSVBUSU9OID0gIlRoZSBHTk9NRSBEb2N1bWVudGF0aW9uIEJ1aWxkIFV0aWxpdGllcyAoZ25vbWUtZG9jLSBcCi11dGlscykgd2VyZSBjcmVhdGVkIHRvIG1ha2UgaXQgZWFzaWVyIGZvciBhcHBsaWNhdGlvbiBkZXZlbG9wZXJzIHRvIFwKLWluY2x1ZGUgYW5kIGNyZWF0ZSBkb2N1bWVudGF0aW9uIGluIHRoZWlyIHJlbGVhc2VzLiBUaGV5IGluY2x1ZGUgdGhlIFwKLXhtbDJwbyB0b29sIHdoaWNoIG1ha2VzIGl0IGVhc2llciB0byB0cmFuc2xhdGUgYW5kIGtlZXAgdXAgdG8gZGF0ZSBcCi10cmFuc2xhdGlvbnMgb2YgZG9jdW1lbnRhdGlvbi4iCi1MSUNFTlNFID0gIkdQTHYyICYgTEdQTHYyLjEiCi1ERVBFTkRTID0gImxpYnhtbDIgbGlieHNsdCBsaWJ4c2x0LW5hdGl2ZSBnbm9tZS1kb2MtdXRpbHMtbmF0aXZlIGdsaWItMi4wIgotREVQRU5EU19jbGFzcy1uYXRpdmUgPSAibGlieG1sMi1uYXRpdmUgbGlieHNsdC1uYXRpdmUgaW50bHRvb2wtbmF0aXZlIGdsaWItMi4wLW5hdGl2ZSIKLQotaW5oZXJpdCBnbm9tZWJhc2UgZ2V0dGV4dCBweXRob24tZGlyIHB5dGhvbm5hdGl2ZSBhdXRvdG9vbHMtYnJva2Vuc2VwCi0KLUNMRUFOQlJPS0VOID0gIjEiCi0KLUVYVFJBX09FQ09ORiArPSAiLS1kaXNhYmxlLXNjcm9sbGtlZXBlciIKLQotZG9faW5zdGFsbF9hcHBlbmQoKSB7Ci0JY2hvd24gLVIgcm9vdDpyb290ICR7RH0KLX0KLQotZG9faW5zdGFsbF9hcHBlbmRfY2xhc3MtbmF0aXZlICgpIHsKLQlzZWQgLWkgLWUgJ3N8XiMhLiovdXNyL2Jpbi9lbnYgcHl0aG9ufCMhIC91c3IvYmluL2VudiBuYXRpdmVweXRob258JyAke0R9JHtiaW5kaXJ9L3htbDJwbwotfQotCi1GSUxFU18ke1BOfSArPSAiJHtkYXRhZGlyfS94bWwqICR7UFlUSE9OX1NJVEVQQUNLQUdFU19ESVJ9LyoiCi0KLVJERVBFTkRTXyR7UE59ID0gImJhc2giCi1SREVQRU5EU18ke1BOfV9jbGFzcy1uYXRpdmUgPSAiIgotCi1CQkNMQVNTRVhURU5EID0gIm5hdGl2ZSIKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ25vbWUvZ25vbWUvZ25vbWUtZG9jLXV0aWxzLzAwMDEtZ2xpYi1nZXR0ZXh0Lm00LVVwZGF0ZS1BTV9HTElCX0dOVV9HRVRURVhULXRvLW1hdGNoLS5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ25vbWUvZ25vbWUvZ25vbWUtZG9jLXV0aWxzLzAwMDEtZ2xpYi1nZXR0ZXh0Lm00LVVwZGF0ZS1BTV9HTElCX0dOVV9HRVRURVhULXRvLW1hdGNoLS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40Y2ZjYWJkCi0tLSAvZGV2L251bGwKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1nbm9tZS9nbm9tZS9nbm9tZS1kb2MtdXRpbHMvMDAwMS1nbGliLWdldHRleHQubTQtVXBkYXRlLUFNX0dMSUJfR05VX0dFVFRFWFQtdG8tbWF0Y2gtLnBhdGNoCkBAIC0wLDAgKzEsNDAgQEAKK0Zyb20gNDI2ZTM4NDY4NDYzYTRhYmI0OTVjZjZhMjY5Yjk2MzViMjEwNzUxOSBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEp1c3NpIEt1a2tvbmVuIDxqdXNzaS5rdWtrb25lbkBpbnRlbC5jb20+CitEYXRlOiBUdWUsIDE3IE1heSAyMDE2IDEzOjUxOjI0ICswMzAwCitTdWJqZWN0OiBbUEFUQ0hdIGdsaWItZ2V0dGV4dC5tNDogVXBkYXRlIEFNX0dMSUJfR05VX0dFVFRFWFQgdG8gbWF0Y2ggZ2xpYgorCitUaGlzIGF2b2lkcworICBlcnJvcjogbTRfY29weTogd29uJ3Qgb3ZlcndyaXRlIGRlZmluZWQgbWFjcm86IGdsaWJfREVGVU4KKworU2lnbmVkLW9mZi1ieTogSnVzc2kgS3Vra29uZW4gPGp1c3NpLmt1a2tvbmVuQGludGVsLmNvbT4KK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbTm8gdXBzdHJlYW1dCistLS0KKyBtNC9nbGliLWdldHRleHQubTQgfCA1ICsrKy0tCisgMSBmaWxlIGNoYW5nZWQsIDMgaW5zZXJ0aW9ucygrKSwgMiBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL200L2dsaWItZ2V0dGV4dC5tNCBiL200L2dsaWItZ2V0dGV4dC5tNAoraW5kZXggODFmOGZkMi4uZTJiMTQyYiAxMDA2NDQKKy0tLSBhL200L2dsaWItZ2V0dGV4dC5tNAorKysrIGIvbTQvZ2xpYi1nZXR0ZXh0Lm00CitAQCAtMzEwLDcgKzMxMCw3IEBAIG1zZ3N0ciAiIgorICMgb24gdmFyaW91cyB2YXJpYWJsZXMgbmVlZGVkIGJ5IHRoZSBNYWtlZmlsZS5pbi5pbiBpbnN0YWxsZWQgYnkKKyAjIGdsaWItZ2V0dGV4dGl6ZS4KKyBkbmwKKy1nbGliX0RFRlVOKFtHTElCX0dOVV9HRVRURVhUXSwKKytBVV9ERUZVTihbR0xJQl9HTlVfR0VUVEVYVF0sCisgICBbQUNfUkVRVUlSRShbQUNfUFJPR19DQ10pZG5sCisgICAgQUNfUkVRVUlSRShbQUNfSEVBREVSX1NURENdKWRubAorIAorQEAgLTM4MSw3ICszODEsOCBAQCBnbGliX0RFRlVOKFtHTElCX0dOVV9HRVRURVhUXSwKKyAgICBybSAtZiBwby9QT1RGSUxFUworICAgIHNlZCAtZSAiL14jL2QiIC1lICIvXlwkL2QiIC1lICJzLC4qLAkkcG9zcmNwcmVmaXgmIFxcXFwsIiAtZSAiXCRzL1woLipcKSBcXFxcL1wxLyIgXAorIAk8ICRzcmNkaXIvcG8vUE9URklMRVMuaW4gPiBwby9QT1RGSUxFUworLSAgXSkKKysgIF0KKysgIFtbJDA6IFRoaXMgbWFjcm8gaXMgZGVwcmVjYXRlZC4gWW91IHNob3VsZCB1c2UgdXBzdHJlYW0gZ2V0dGV4dCBpbnN0ZWFkLl1dKQorIAorICMgQVhfR0xJQl9ERUZJTkVfTE9DQUxFRElSKFZBUklBQkxFKQorICMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLS0gCisyLjEuNAorCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdub21lL2dub21lL2dub21lLWRvYy11dGlscy9zeXNyb290ZWQtcGtnLWNvbmZpZy5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ25vbWUvZ25vbWUvZ25vbWUtZG9jLXV0aWxzL3N5c3Jvb3RlZC1wa2ctY29uZmlnLnBhdGNoCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0MTZkNjk4Li4wMDAwMDAwCi0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ25vbWUvZ25vbWUvZ25vbWUtZG9jLXV0aWxzL3N5c3Jvb3RlZC1wa2ctY29uZmlnLnBhdGNoCisrKyAvZGV2L251bGwKQEAgLTEsMzUgKzAsMCBAQAotSW4gY3Jvc3MgZW52aXJvbm1lbnQgd2UgaGF2ZSB0byBwcmVwZW5kIHRoZSBzeXNyb290IHRvIHRoZSBwYXRoIGZvdW5kIGJ5Ci1wa2djb25maWcgc2luY2UgdGhlIHBhdGggcmV0dXJuZWQgZnJvbSBwa2djb25maWcgZG9lcyBub3QgaGF2ZSBzeXNyb290IHByZWZpeGVkCi1pdCBlbmRzIHVwIHVzaW5nIHRoZSBmaWxlcyBmcm9tIGhvc3Qgc3lzdGVtLiBOb3cgdXN1YWxseSBwZW9wbGUgaGF2ZSBnbm9tZSBpbnN0YWxsZWQKLXNvIHRoZSBidWlsZCBzdWNjZWVkcyBidXQgaWYgeW91IGRvbnQgaGF2ZSBnbm9tZSBpbnN0YWxsZWQgb24gYnVpbGQgaG9zdCB0aGVuCi1pdCB3b250IGZpbmQgdGhlIGZpbGVzIG9uIGhvc3Qgc3lzdGVtIGFuZCBwYWNrYWdlcyB1c2luZyBnbm9tZS1kb2MtdXRpbHMgd29udAotY29tcGlsZS4KLQotVGhpcyBzaG91bGQgd29yayBvayB3aXRoIG5vbiBzeXNyb290ZWQgYnVpbGRzIHRvbyBzaW5jZSBpbiB0aG9zZSBjYXNlcyBQS0dfQ09ORklHX1NZU1JPT1RfRElSCi13aWxsIGJlIGVtcHR5Ci0KLVVwc3RyZWFtLVN0YXR1czogUGVuZGluZwotU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KLVNpZ25lZC1vZmYtYnk6IENvbnN0YW50aW4gTXVzY2EgPGNvbnN0YW50aW54Lm11c2NhQGludGVsLmNvbT4KLQotSW5kZXg6IGdub21lLWRvYy11dGlscy0wLjIwLjEwL3Rvb2xzL2dub21lLWRvYy11dGlscy5tYWtlCi09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLS0gZ25vbWUtZG9jLXV0aWxzLTAuMjAuMTAub3JpZy90b29scy9nbm9tZS1kb2MtdXRpbHMubWFrZQotKysrIGdub21lLWRvYy11dGlscy0wLjIwLjEwL3Rvb2xzL2dub21lLWRvYy11dGlscy5tYWtlCi1AQCAtMTMzLDExICsxMzMsMTEgQEAgX0RPQ19BQlNfU1JDRElSID0gQGFic19zcmNkaXJACi0gX3htbDJwbyA/PSBgd2hpY2ggeG1sMnBvYAotIF94bWwycG9fbW9kZSA9ICQoaWYgJChET0NfSUQpLG1hbGxhcmQsZG9jYm9vaykKLSAKLS1fZGIyaHRtbCA/PSBgJChQS0dfQ09ORklHKSAtLXZhcmlhYmxlIGRiMmh0bWwgZ25vbWUtZG9jLXV0aWxzYAotLV9kYjJvbWYgID89IGAkKFBLR19DT05GSUcpIC0tdmFyaWFibGUgZGIyb21mIGdub21lLWRvYy11dGlsc2AKLS1fY2h1bmtzICA/PSBgJChQS0dfQ09ORklHKSAtLXZhcmlhYmxlIHhtbGRpciBnbm9tZS1kb2MtdXRpbHNgL2dub21lL3hzbHQvZG9jYm9vay91dGlscy9jaHVua3MueHNsCi0tX2NyZWRpdHMgPz0gYCQoUEtHX0NPTkZJRykgLS12YXJpYWJsZSB4bWxkaXIgZ25vbWUtZG9jLXV0aWxzYC9nbm9tZS94c2x0L2RvY2Jvb2svdXRpbHMvY3JlZGl0cy54c2wKLS1faWRzID89ICQoc2hlbGwgJChQS0dfQ09ORklHKSAtLXZhcmlhYmxlIHhtbGRpciBnbm9tZS1kb2MtdXRpbHMpL2dub21lL3hzbHQvZG9jYm9vay91dGlscy9pZHMueHNsCi0rX2RiMmh0bWwgPz0gJHtQS0dfQ09ORklHX1NZU1JPT1RfRElSfWAkKFBLR19DT05GSUcpIC0tdmFyaWFibGUgZGIyaHRtbCBnbm9tZS1kb2MtdXRpbHNgCi0rX2RiMm9tZiAgPz0gJHtQS0dfQ09ORklHX1NZU1JPT1RfRElSfWAkKFBLR19DT05GSUcpIC0tdmFyaWFibGUgZGIyb21mIGdub21lLWRvYy11dGlsc2AKLStfY2h1bmtzICA/PSAke1BLR19DT05GSUdfU1lTUk9PVF9ESVJ9YCQoUEtHX0NPTkZJRykgLS12YXJpYWJsZSB4bWxkaXIgZ25vbWUtZG9jLXV0aWxzYC9nbm9tZS94c2x0L2RvY2Jvb2svdXRpbHMvY2h1bmtzLnhzbAotK19jcmVkaXRzID89ICR7UEtHX0NPTkZJR19TWVNST09UX0RJUn1gJChQS0dfQ09ORklHKSAtLXZhcmlhYmxlIHhtbGRpciBnbm9tZS1kb2MtdXRpbHNgL2dub21lL3hzbHQvZG9jYm9vay91dGlscy9jcmVkaXRzLnhzbAotK19pZHMgPz0gJHtQS0dfQ09ORklHX1NZU1JPT1RfRElSfSQoc2hlbGwgJChQS0dfQ09ORklHKSAtLXZhcmlhYmxlIHhtbGRpciBnbm9tZS1kb2MtdXRpbHMpL2dub21lL3hzbHQvZG9jYm9vay91dGlscy9pZHMueHNsCi0gCi0gaWYgRU5BQkxFX1NLCi0gX0VOQUJMRV9TSyA9IHRydWUKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ25vbWUvZ25vbWUvZ25vbWUtZG9jLXV0aWxzL3VzZS11c3ItYmluLWVudi1mb3ItcHl0aG9uLWluLXhtbDJwby5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ25vbWUvZ25vbWUvZ25vbWUtZG9jLXV0aWxzL3VzZS11c3ItYmluLWVudi1mb3ItcHl0aG9uLWluLXhtbDJwby5wYXRjaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMGUxOTZjMC4uMDAwMDAwMAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdub21lL2dub21lL2dub21lLWRvYy11dGlscy91c2UtdXNyLWJpbi1lbnYtZm9yLXB5dGhvbi1pbi14bWwycG8ucGF0Y2gKKysrIC9kZXYvbnVsbApAQCAtMSwzMCArMCwwIEBACi1XZSBjYW4ndCB1c2UgIyEvZnVsbC9wYXRoL3RvL3B5dGhvbiAtdSBhcyB0aGlzIGNhbiBiZSBsb25nZXIgdGhhbiBzaGViYW5nCi1hbGxvd3MgZm9yLiAgSW4gb3JkZXIgdG8gYmUgYXBwcm9wcmFpdGUgZm9yIHVwc3RyZWFtIG1vcmUgd29yayB3b3VsZCBiZQotbmVlZGVkIHRvIG1ha2Ugc3VyZSB0aGF0IHRoZSBtYWluIHhtbDJwbyBjb2RlIGRvZXNuJ3QgcmVseSBvbiBweXRob24KLWJlaW5nIGludm9rZWQgd2l0aCAtdSAoZm9yY2Ugc3RkaW4vb3V0L2VyciB0byBiZSB1c2VkIHJhdykuCi0KLVVwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbV291bGQgYnJlYWsgYmVoYXZpb3Igb24gV2luZG93c10KLVNpZ25lZC1vZmYtYnk6IENvbnN0YW50aW4gTXVzY2EgPGNvbnN0YW50aW54Lm11c2NhQGludGVsLmNvbT4KLQotSW5kZXg6IGdub21lLWRvYy11dGlscy0wLjIwLjEwL3htbDJwby94bWwycG8vTWFrZWZpbGUuYW0KLT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tLSBnbm9tZS1kb2MtdXRpbHMtMC4yMC4xMC5vcmlnL3htbDJwby94bWwycG8vTWFrZWZpbGUuYW0KLSsrKyBnbm9tZS1kb2MtdXRpbHMtMC4yMC4xMC94bWwycG8veG1sMnBvL01ha2VmaWxlLmFtCi1AQCAtNyw3ICs3LDYgQEAgQ0xFQU5GSUxFUyA9IHhtbDJwbwotIAotIHhtbDJwbzogeG1sMnBvLnB5LmluCi0gCSQoQU1fVl9HRU4pc2VkIC1lICJzL15WRVJTSU9OID0uKi9WRVJTSU9OID0gXCJAVkVSU0lPTkBcIi8iIFwKLS0JICAgIC1lICJzK14jIS4qcHl0aG9uLiorIyEkKFBZVEhPTikrIiBcCi0gCSAgPCAkKHNyY2RpcikveG1sMnBvLnB5LmluID4geG1sMnBvCi0gCSQoQU1fVl9hdCljaG1vZCAreCB4bWwycG8KLSAKLUluZGV4OiBnbm9tZS1kb2MtdXRpbHMtMC4yMC4xMC94bWwycG8veG1sMnBvL3htbDJwby5weS5pbgotPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0tIGdub21lLWRvYy11dGlscy0wLjIwLjEwLm9yaWcveG1sMnBvL3htbDJwby94bWwycG8ucHkuaW4KLSsrKyBnbm9tZS1kb2MtdXRpbHMtMC4yMC4xMC94bWwycG8veG1sMnBvL3htbDJwby5weS5pbgotQEAgLTEsNCArMSw0IEBACi0tIyEvdXNyL2Jpbi9weXRob24gLXUKLSsjIS91c3IvYmluL2VudiBweXRob24KLSAjIC0qLSBlbmNvZGluZzogdXRmLTggLSotCi0gIyBDb3B5cmlnaHQgKGMpIDIwMDQsIDIwMDUsIDIwMDYgRGFuaWxvIMWgZWdhbiA8ZGFuaWxvQGdub21lLm9yZz4uCi0gIyBDb3B5cmlnaHQgKGMpIDIwMDkgQ2xhdWRlIFBhcm96IDxjbGF1ZGVAMnhsaWJyZS5uZXQ+LgpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1nbm9tZS9nbm9tZS9nbm9tZS1kb2MtdXRpbHMveHNsdHByb2Nfbm9uZXQucGF0Y2ggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdub21lL2dub21lL2dub21lLWRvYy11dGlscy94c2x0cHJvY19ub25ldC5wYXRjaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTM0NjQ5NC4uMDAwMDAwMAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdub21lL2dub21lL2dub21lLWRvYy11dGlscy94c2x0cHJvY19ub25ldC5wYXRjaAorKysgL2Rldi9udWxsCkBAIC0xLDk1ICswLDAgQEAKLVRoaXMgYWRkcyB0aGUgLW5vbmV0IG9wdGlvbiB0byB4c2x0cHJvYyBpbnZvY2F0aW9ucywgd2hpY2ggZml4ZXMKLWNvbXBpbGUgZXJyb3JzIHdoZW4gYnVpbGRpbmcgdGhlIGdub21lLWRvYy11dGlscyBkb2NzLgotCi1VcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW2NvbmZpZ3VyYXRpb25dCi1TaWduZWQtb2ZmLWJ5OiBTY290dCBHYXJtYW4gPHNjb3R0LmEuZ2FybWFuQGludGVsLmNvbT4KLVNpZ25lZC1vZmYtYnk6IENvbnN0YW50aW4gTXVzY2EgPGNvbnN0YW50aW54Lm11c2NhQGludGVsLmNvbT4KLQotSW5kZXg6IGdub21lLWRvYy11dGlscy0wLjIwLjEwL2RvYy94c2x0L01ha2VmaWxlLmFtCi09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLS0gZ25vbWUtZG9jLXV0aWxzLTAuMjAuMTAub3JpZy9kb2MveHNsdC9NYWtlZmlsZS5hbQotKysrIGdub21lLWRvYy11dGlscy0wLjIwLjEwL2RvYy94c2x0L01ha2VmaWxlLmFtCi1AQCAtMjEsMTQgKzIxLDE0IEBAIGFsbDogJCh4c2xkb2NfZG9jcykgJCh4c2xkb2NfeG1scykKLSAKLSAkKHhzbGRvY19kb2NzKTogJCh4c2xkb2NfeHNscykgeHNsZG9jLmF3ayB4c2xkb2MtZmlsbC54c2wKLSAJJChBTV9WX0dFTikkKEdEVV9BV0spIC1mICIkKHNyY2RpcikveHNsZG9jLmF3ayIgIiQoZmlsdGVyICUvJChiYXNlbmFtZSAkKG5vdGRpciAkQCkpLnhzbCwkKHhzbGRvY194c2xzKSkiIFwKLS0JfCB4c2x0cHJvYyAtbyAiJEAiIFwKLSsJfCB4c2x0cHJvYyAtbm9uZXQgLW8gIiRAIiBcCi0gCS0tc3RyaW5ncGFyYW0gYmFzZW5hbWUgIiQoYmFzZW5hbWUgJChub3RkaXIgJEApKSIgXAotIAktLXN0cmluZ3BhcmFtIHhzbF9maWxlICIkKGZpbHRlciAlLyQoYmFzZW5hbWUgJChub3RkaXIgJEApKS54c2wsJCh4c2xkb2NfeHNscykpIiBcCi0gCSIkKHNyY2RpcikveHNsZG9jLWZpbGwueHNsIiAtCi0gCi0gJCh4c2xkb2NfeG1scyk6IHhzbGRvYy1kb2Nib29rLnhzbAotICQoeHNsZG9jX3htbHMpOiBDLyUueG1sIDogQy8lLnhzbGRvYwotLQkkKEFNX1ZfR0VOKXhzbHRwcm9jIC1vICIkQCIgXAotKwkkKEFNX1ZfR0VOKXhzbHRwcm9jIC1ub25ldCAtbyAiJEAiIFwKLSAJLS1zdHJpbmdwYXJhbSBiYXNlbmFtZSAiJChiYXNlbmFtZSAkKG5vdGRpciAkQCkpIiBcCi0gCS0tc3RyaW5ncGFyYW0geHNsX2ZpbGUgIiQoZmlsdGVyICUvJChiYXNlbmFtZSAkKG5vdGRpciAkQCkpLnhzbCwkKHhzbGRvY194c2xzKSkiIFwKLSAJIiQoc3JjZGlyKS94c2xkb2MtZG9jYm9vay54c2wiICIkPCIKLUBAIC02Miw3ICs2Miw3IEBAIGdub21lLWRvYy14c2x0LWNoZWNrLWluY2x1ZGVzOgotIGdub21lLWRvYy14c2x0LWNoZWNrLXhzbGRvYzogJCh4c2xkb2NfZG9jcykKLSAJQGVjaG8gIlJ1bm5pbmcgeHNsZG9jIGNoZWNrcyI7Ci0gCUAoZWNobyAiPHhzbGRvYz4iOyBjYXQgJCh4c2xkb2NfZG9jcyk7IGVjaG8gIjwveHNsZG9jPiIpIFwKLS0JfCB4c2x0cHJvYyAiJChzcmNkaXIpL3hzbGRvYy1jaGVjay54c2wiIC0gMT4gL2Rldi9udWxsCi0rCXwgeHNsdHByb2MgLW5vbmV0ICIkKHNyY2RpcikveHNsZG9jLWNoZWNrLnhzbCIgLSAxPiAvZGV2L251bGwKLSAKLSAuUEhPTlk6IGNsZWFuLXhzbGRvYwotIGNsZWFuLWxvY2FsOiBjbGVhbl94c2xkb2MKLUluZGV4OiBnbm9tZS1kb2MtdXRpbHMtMC4yMC4xMC90b29scy9nbm9tZS1kb2MtdXRpbHMubWFrZQotPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0tIGdub21lLWRvYy11dGlscy0wLjIwLjEwLm9yaWcvdG9vbHMvZ25vbWUtZG9jLXV0aWxzLm1ha2UKLSsrKyBnbm9tZS1kb2MtdXRpbHMtMC4yMC4xMC90b29scy9nbm9tZS1kb2MtdXRpbHMubWFrZQotQEAgLTM3LDcgKzM3LDcgQEAgJChET0NfSF9GSUxFKTogJChET0NfSF9ET0NTKTsKLSAJbGlzdD0nJChET0NfSF9ET0NTKSc7IGZvciBkb2MgaW4gJCRsaXN0OyBkbyBcCi0gCSAgeG1scGF0aD0iYGVjaG8gJCRkb2MgfCBzZWQgLWUgJ3MvXlwoLipcL1wpLiovXDEvJyAtZSAnL1wvLyFzLy4qLy8nYDokKHNyY2RpcikvYGVjaG8gJCRkb2MgfCBzZWQgLWUgJ3MvXlwoLipcL1wpLiovXDEvJyAtZSAnL1wvLyFzLy4qLy8nYCI7IFwKLSAJICBpZiAhIHRlc3QgLWYgIiQkZG9jIjsgdGhlbiBkb2M9IiQoc3JjZGlyKS8kJGRvYyI7IGZpOyBcCi0tCSAgeHNsdHByb2MgLS1wYXRoICIkJHhtbHBhdGgiICQoX2NyZWRpdHMpICQkZG9jOyBcCi0rCSAgeHNsdHByb2MgLW5vbmV0IC0tcGF0aCAiJCR4bWxwYXRoIiAkKF9jcmVkaXRzKSAkJGRvYzsgXAotIAlkb25lIHwgc29ydCB8IHVuaXEgXAotIAkgIHwgYXdrICdCRUdJTntzPSIifXtuPXNwbGl0KCQkMCx3LCI8Iik7aWYocyE9IiImJnMhPXN1YnN0cih3WzFdLDEsbGVuZ3RoKHdbMV0pLTEpKXtwcmludCBzfTtpZihuPjEpe3ByaW50ICQkMDtzPSIifWVsc2V7cz0kJDB9fTtFTkR7aWYocyE9IiIpe3ByaW50IHN9fScgXAotIAkgIHwgc2VkIC1lICdzL1xcL1xcXFwvJyAtZSAncy8iL1xcIi8nIC1lICdzL1woLipcKS9cdCJcMSIsLycgPj4gJEAudG1wCi1AQCAtNTAsNyArNTAsNyBAQCAkKERPQ19IX0ZJTEUpOiAkKERPQ19IX0RPQ1MpOwotIAkgIGRvY2lkPWBlY2hvICIkJGRvYyIgfCBzZWQgLWUgJ3MvLipcL1woW14vXSpcKVwueG1sL1wxLycgXAotIAkgICAgfCBzZWQgLWUgJ3MvW15hLXpBLVpfXS9fL2cnIHwgdHIgJ2EteicgJ0EtWidgOyBcCi0gCSAgZWNobyAkJHhtbHBhdGg7IFwKLS0JICBpZHM9YHhzbHRwcm9jIC0teGluY2x1ZGUgLS1wYXRoICIkJHhtbHBhdGgiICQoX2lkcykgJCRkb2NgOyBcCi0rCSAgaWRzPWB4c2x0cHJvYyAtbm9uZXQgLS14aW5jbHVkZSAtLXBhdGggIiQkeG1scGF0aCIgJChfaWRzKSAkJGRvY2A7IFwKLSAJICBmb3IgaWQgaW4gJCRpZHM7IGRvIFwKLSAJICAgIGVjaG8gJyNkZWZpbmUgSEVMUF8nYGVjaG8gJCRkb2NpZGAnXydgZWNobyAkJGlkIFwKLSAJICAgICAgfCBzZWQgLWUgJ3MvW15hLXpBLVpfXS9fL2cnIHwgdHIgJ2EteicgJ0EtWidgJyAiJyQkaWQnIicgPj4gJEAudG1wOyBcCi1AQCAtMTk3LDcgKzE5Nyw3IEBAICQoX0RPQ19PTUZfREIpIDogJChET0NfTU9EVUxFKS0lLm9tZiA6ICUKLSAJICBlY2hvICJUaGUgZmlsZSAnJChfc2tjb250ZW50c2xpc3QpJyBkb2VzIG5vdCBleGlzdC4iID4mMjsJCVwKLSAJICBlY2hvICJQbGVhc2UgY2hlY2sgeW91ciBTY3JvbGxLZWVwZXIgaW5zdGFsbGF0aW9uLiIgPiYyOwkJXAotIAkgIGV4aXQgMTsgfQotLQkkKEdEVV9WX0RCMk9NRil4c2x0cHJvYyAtbyAkQCAkKGNhbGwgZGIyb21mX2FyZ3MsJEAsJDwsJ2RvY2Jvb2snKSB8fCB7IHJtIC1mICIkQCI7IGV4aXQgMTsgfQotKwkkKEdEVV9WX0RCMk9NRil4c2x0cHJvYyAtbm9uZXQgLW8gJEAgJChjYWxsIGRiMm9tZl9hcmdzLCRALCQ8LCdkb2Nib29rJykgfHwgeyBybSAtZiAiJEAiOyBleGl0IDE7IH0KLSAKLSAjIyBAIF9ET0NfT01GX0hUTUwKLSAjIyBUaGUgT01GIGZpbGVzIGZvciBIVE1MIG91dHB1dAotQEAgLTIxMiw3ICsyMTIsNyBAQCBpZiBFTkFCTEVfU0sKLSAJICBlY2hvICJQbGVhc2UgY2hlY2sgeW91ciBTY3JvbGxLZWVwZXIgaW5zdGFsbGF0aW9uLiIgPiYyOwkJXAotIAkgIGV4aXQgMTsgfQotIGVuZGlmCi0tCSQoR0RVX1ZfREIyT01GKXhzbHRwcm9jIC1vICRAICQoY2FsbCBkYjJvbWZfYXJncywkQCwkPCwneGh0bWwnKSB8fCB7IHJtIC1mICIkQCI7IGV4aXQgMTsgfQotKwkkKEdEVV9WX0RCMk9NRil4c2x0cHJvYyAtbm9uZXQgLW8gJEAgJChjYWxsIGRiMm9tZl9hcmdzLCRALCQ8LCd4aHRtbCcpIHx8IHsgcm0gLWYgIiRAIjsgZXhpdCAxOyB9Ci0gCi0gIyMgQCBfRE9DX09NRl9BTEwKLSAjIyBBbGwgT01GIG91dHB1dCBmaWxlcyB0byBiZSBidWlsdAotQEAgLTI2Nyw3ICsyNjcsNyBAQCBfRE9DX0NfRklHVVJFUyA9ICQoaWYgJChET0NfRklHVVJFUyksCi0gIyMgQWxsIEhUTUwgZG9jdW1lbnRhdGlvbiBpbiB0aGUgQyBsb2NhbGUKLSAjIEZJWE1FOiBwcm9iYWJseSBoYXZlIHRvIHNoZWxsIGVzY2FwZSB0byBkZXRlcm1pbmUgdGhlIGZpbGUgbmFtZXMKLSBfRE9DX0NfSFRNTCA9ICQoZm9yZWFjaCBmLAkJCQkJCVwKLS0JJChzaGVsbCB4c2x0cHJvYyAtLXhpbmNsdWRlIAkJCQkJXAotKwkkKHNoZWxsIHhzbHRwcm9jIC1ub25ldCAtLXhpbmNsdWRlIAkJCQkJXAotIAkgIC0tc3RyaW5ncGFyYW0gZGIuY2h1bmsuYmFzZW5hbWUgIiQoRE9DX01PRFVMRSkiCQlcCi0gCSAgJChfY2h1bmtzKSAiQy8kKERPQ19NT0RVTEUpLnhtbCIpLAkJCQlcCi0gCUMvJChmKS54aHRtbCkKLUBAIC0zOTMsNyArMzkzLDcgQEAgX0RPQ19IVE1MX0FMTCA9ICQoaWYgJChmaWx0ZXIgaHRtbCBIVE1MLAotIF9ET0NfSFRNTF9UT1BTID0gJChmb3JlYWNoIGxjLEMgJChfRE9DX1JFQUxfTElOR1VBUyksJChsYykvJChET0NfTU9EVUxFKS54aHRtbCkKLSAKLSAkKF9ET0NfSFRNTF9UT1BTKTogJChfRE9DX0NfRE9DUykgJChfRE9DX0xDX0RPQ1MpCi0tCSQoR0RVX1ZfREIySFRNKXhzbHRwcm9jIC1vICRAIC0teGluY2x1ZGUgLS1wYXJhbSBkYi5jaHVuay5jaHVua190b3AgImZhbHNlKCkiIC0tc3RyaW5ncGFyYW0gZGIuY2h1bmsuYmFzZW5hbWUgIiQoRE9DX01PRFVMRSkiIC0tc3RyaW5ncGFyYW0gZGIuY2h1bmsuZXh0ZW5zaW9uICIueGh0bWwiICQoX2RiMmh0bWwpICQocGF0c3Vic3QgJS54aHRtbCwlLnhtbCwkQCkKLSsJJChHRFVfVl9EQjJIVE0peHNsdHByb2MgLW5vbmV0IC1vICRAIC0teGluY2x1ZGUgLS1wYXJhbSBkYi5jaHVuay5jaHVua190b3AgImZhbHNlKCkiIC0tc3RyaW5ncGFyYW0gZGIuY2h1bmsuYmFzZW5hbWUgIiQoRE9DX01PRFVMRSkiIC0tc3RyaW5ncGFyYW0gZGIuY2h1bmsuZXh0ZW5zaW9uICIueGh0bWwiICQoX2RiMmh0bWwpICQocGF0c3Vic3QgJS54aHRtbCwlLnhtbCwkQCkKLSAKLSAKLSAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1nbm9tZS9nbm9tZS9nbm9tZS1kb2MtdXRpbHNfMC4yMC4xMC5iYiBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ25vbWUvZ25vbWUvZ25vbWUtZG9jLXV0aWxzXzAuMjAuMTAuYmIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDc4Y2MwMDUuLjAwMDAwMDAKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1nbm9tZS9nbm9tZS9nbm9tZS1kb2MtdXRpbHNfMC4yMC4xMC5iYgorKysgL2Rldi9udWxsCkBAIC0xLDExICswLDAgQEAKLXJlcXVpcmUgZ25vbWUtZG9jLXV0aWxzLmluYwotTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORy5HUEw7bWQ1PWViNzIzYjYxNTM5ZmVlZjAxM2RlNDc2ZTY4YjVjNTBhIFwKLQkJICAgIGZpbGU6Ly9DT1BZSU5HLkxHUEw7bWQ1PWE2Zjg5ZTIxMDBkOWI2Y2RmZmNlYTRmMzk4ZTM3MzQzIgotCi1TUkNfVVJJICs9ICJmaWxlOi8veHNsdHByb2Nfbm9uZXQucGF0Y2ggXAotICAgICAgICAgICAgZmlsZTovL3VzZS11c3ItYmluLWVudi1mb3ItcHl0aG9uLWluLXhtbDJwby5wYXRjaCBcCi0gICAgICAgICAgICBmaWxlOi8vc3lzcm9vdGVkLXBrZy1jb25maWcucGF0Y2ggXAotICAgICAgICAgICAiCi0KLVNSQ19VUklbYXJjaGl2ZS5tZDVzdW1dID0gIjNjNjRhZDdiYWNkNjE3YjA0OTk5ZTRhMTY4YWZhYWM1IgotU1JDX1VSSVthcmNoaXZlLnNoYTI1NnN1bV0gPSAiY2IwNjM5ZmZhOTU1MGI2ZGRmM2I2MmYzYjFhZGQ5MmZiOTJhYjQ2OTBkMzUxZjIzNTNjZmZlNjY4YmU4YzRhNiIKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ25vbWUvZ25vbWUvZ25vbWUtdGhlbWVzLXN0YW5kYXJkXzMuMjAuMi5iYiBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ25vbWUvZ25vbWUvZ25vbWUtdGhlbWVzLXN0YW5kYXJkXzMuMjAuMi5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jOThkODcwCi0tLSAvZGV2L251bGwKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1nbm9tZS9nbm9tZS9nbm9tZS10aGVtZXMtc3RhbmRhcmRfMy4yMC4yLmJiCkBAIC0wLDAgKzEsMzkgQEAKK1NVTU1BUlkgPSAiR1RLKzIgc3RhbmRhcmQgdGhlbWVzIgorSE9NRVBBR0UgPSAiaHR0cDovL2Z0cC5nbm9tZS5vcmcvcHViL0dOT01FL3NvdXJjZXMvZ25vbWUtdGhlbWVzLXN0YW5kYXJkLyIKK0JVR1RSQUNLRVIgPSAiaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvIgorU0VDVElPTiA9ICJ4MTEvZ25vbWUiCisKK0xJQ0VOU0UgPSAiTEdQTC0yLjEiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT0yZDUwMjVkNGFhMzQ5NWJlZmVmOGYxNzIwNmE1YjBhMSIKKworaW5oZXJpdCBhdXRvdG9vbHMgcGtnY29uZmlnIGdldHRleHQgZ3RrLWljb24tY2FjaGUgdXBzdHJlYW0tdmVyc2lvbi1pcy1ldmVuIGRpc3Ryb19mZWF0dXJlc19jaGVjaworCitBTllfT0ZfRElTVFJPX0ZFQVRVUkVTID0gIiR7R1RLMkRJU1RST0ZFQVRVUkVTfSIKKworREVQRU5EUyArPSAiaW50bHRvb2wtbmF0aXZlIGd0aysiCisKK01BSl9WRVIgPSAiJHtAb2UudXRpbHMudHJpbV92ZXJzaW9uKCIke1BWfSIsIDIpfSIKK1NSQ19VUkkgPSAiJHtHTk9NRV9NSVJST1J9LyR7QlBOfS8ke01BSl9WRVJ9LyR7QlBOfS0ke1BWfS50YXIueHogXAorICAgICAgICAgICIKKworU1JDX1VSSVttZDVzdW1dID0gImFkYzNiMWQ1NzMzMDU2MWZlYTUyNDg0MmQwYzBiNDg1IgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjlkMGQ5YzRiMmM5ZjkwMDgzMDFjM2MxODc4ZWJiOTU4NTlhNzM1YjdmZDRhNmE1MTg4MDJiOTYzN2U0YTc5MTUiCisKK0VYVFJBX09FQ09ORiA9ICItLWRpc2FibGUtZ3RrMy1lbmdpbmUiCisKK2RvX2luc3RhbGxfYXBwZW5kKCkgeworICAgICAgICAjIE9ubHkgYnVpbGRpbmcgQWR3YWl0YSwgcmVtb3ZlIGhpZ2hjb250cmFzdCBmaWxlcworICAgICAgICBybSAtcmYgJHtEfSR7cHJlZml4fS9zaGFyZS90aGVtZXMvSGlnaENvbnRyYXN0IFwKKyAgICAgICAgICAgICAgICR7RH0ke3ByZWZpeH0vc2hhcmUvaWNvbnMKK30KKworIyBUaGVyZSBjb3VsZCBiZSBnbm9tZS10aGVtZS1oaWdoY29udHJhc3QgYXMgd2VsbCBidXQgdGhhdCByZXF1aXJlcworIyBndGsrMyBhbmQgaW5jbHVkZXMgbG90cyBvZiBpY29ucyAoaXMgYWxzbyBicm9rZW4gd2l0aCBCICE9IFMpLgorUEFDS0FHRVMgKz0gImdub21lLXRoZW1lLWFkd2FpdGEgXAorICAgICAgICAgICAgIGdub21lLXRoZW1lLWFkd2FpdGEtZGJnIFwKKyAgICAgICAgICAgICBnbm9tZS10aGVtZS1hZHdhaXRhLWRldiIKKworRklMRVNfZ25vbWUtdGhlbWUtYWR3YWl0YSA9ICIke3ByZWZpeH0vc2hhcmUvdGhlbWVzL0Fkd2FpdGEgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHtsaWJkaXJ9L2d0ay0yLjAvMi4xMC4wL2VuZ2luZXMvbGliYWR3YWl0YS5zbyIKK0ZJTEVTX2dub21lLXRoZW1lLWFkd2FpdGEtZGV2ID0gIiR7bGliZGlyfS9ndGstMi4wLzIuMTAuMC9lbmdpbmVzL2xpYmFkd2FpdGEubGEiCitGSUxFU19nbm9tZS10aGVtZS1hZHdhaXRhLWRiZyA9ICIke2xpYmRpcn0vZ3RrLTIuMC8yLjEwLjAvZW5naW5lcy8uZGVidWcvbGliYWR3YWl0YS5zbyIKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ25vbWUvZ29iamVjdC1pbnRyb3NwZWN0aW9uL2dvYmplY3QtaW50cm9zcGVjdGlvbi8wMDAxLVByZWZpeC1wa2ctY29uZmlnLXBhdGhzLXdpdGgtUEtHX0NPTkZJR19TWVNST09UX0RJUi0ucGF0Y2ggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdub21lL2dvYmplY3QtaW50cm9zcGVjdGlvbi9nb2JqZWN0LWludHJvc3BlY3Rpb24vMDAwMS1QcmVmaXgtcGtnLWNvbmZpZy1wYXRocy13aXRoLVBLR19DT05GSUdfU1lTUk9PVF9ESVItLnBhdGNoCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1MDI2ZDgxLi4wMDAwMDAwCi0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ25vbWUvZ29iamVjdC1pbnRyb3NwZWN0aW9uL2dvYmplY3QtaW50cm9zcGVjdGlvbi8wMDAxLVByZWZpeC1wa2ctY29uZmlnLXBhdGhzLXdpdGgtUEtHX0NPTkZJR19TWVNST09UX0RJUi0ucGF0Y2gKKysrIC9kZXYvbnVsbApAQCAtMSw5NyArMCwwIEBACi1Gcm9tIGE1NzYwNGUyMDVlNjUzNWFjZDk5ODk0NDRhZDFmNWY1MDM4ZjRmYmEgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCi1Gcm9tOiBBbGV4YW5kZXIgS2FuYXZpbiA8YWxleC5rYW5hdmluQGdtYWlsLmNvbT4KLURhdGU6IFRodSwgOCBPY3QgMjAxNSAxODozMDozNSArMDMwMAotU3ViamVjdDogW1BBVENIIDEvNF0gUHJlZml4IHBrZy1jb25maWcgcGF0aHMgd2l0aCBQS0dfQ09ORklHX1NZU1JPT1RfRElSCi0gZW52aXJvbm1lbnQgdmFyaWFibGUKLQotVGhpcyBlbnZpcm9ubWVudCB2YXJpYWJsZSBzZXRzIHRoZSBsb2NhdGlvbiBvZiBzeXNyb290IGRpcmVjdG9yeSBpbiBjcm9zcy1jb21waWxhdGlvbgotZW52aXJvbm1lbnRzOyBpZiB0aGUgdmFyaWFibGUgaXMgbm90IHNldCwgdGhlIHByZWZpeCB3aWxsIGJlIGVtcHR5LgotCi1VcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcgW3JldmlldyBvbiBvZS1jb3JlIGxpc3RdCi1TaWduZWQtb2ZmLWJ5OiBBbGV4YW5kZXIgS2FuYXZpbiA8YWxleC5rYW5hdmluQGdtYWlsLmNvbT4KLQotLS0tCi0gTWFrZWZpbGUtZ2lyLmFtICAgICB8IDE4ICsrKysrKysrKy0tLS0tLS0tLQotIG00L2ludHJvc3BlY3Rpb24ubTQgfCAgOCArKysrLS0tLQotIDIgZmlsZXMgY2hhbmdlZCwgMTMgaW5zZXJ0aW9ucygrKSwgMTMgZGVsZXRpb25zKC0pCi0KLWRpZmYgLS1naXQgYS9NYWtlZmlsZS1naXIuYW0gYi9NYWtlZmlsZS1naXIuYW0KLWluZGV4IDlhY2E2NjQuLjA5YjkzNjAgMTAwNjQ0Ci0tLS0gYS9NYWtlZmlsZS1naXIuYW0KLSsrKyBiL01ha2VmaWxlLWdpci5hbQotQEAgLTU1LDggKzU1LDggQEAgZWxzZQotIGVuZGlmCi0gCi0gIyBnbGliCi0tR0xJQl9JTkNMVURFRElSPSQoc2hlbGwgIiR7UEtHX0NPTkZJR30iIC0tdmFyaWFibGU9aW5jbHVkZWRpciBnbGliLTIuMCkvZ2xpYi0yLjAKLS1HTElCX0xJQkRJUj0kKHNoZWxsICIke1BLR19DT05GSUd9IiAtLXZhcmlhYmxlPWxpYmRpciBnbGliLTIuMCkKLStHTElCX0lOQ0xVREVESVI9JChQS0dfQ09ORklHX1NZU1JPT1RfRElSKSQoc2hlbGwgIiR7UEtHX0NPTkZJR30iIC0tdmFyaWFibGU9aW5jbHVkZWRpciBnbGliLTIuMCkvZ2xpYi0yLjAKLStHTElCX0xJQkRJUj0kKFBLR19DT05GSUdfU1lTUk9PVF9ESVIpJChzaGVsbCAiJHtQS0dfQ09ORklHfSIgLS12YXJpYWJsZT1saWJkaXIgZ2xpYi0yLjApCi0gCi0gR0xJQl9MSUJSQVJZPWdsaWItMi4wCi0gCi1AQCAtOTIsOCArOTIsOCBAQCBHTGliLTIuMC5naXI6IGctaXItc2Nhbm5lciBnLWlyLWNvbXBpbGVyJChFWEVFWFQpCi0gZ2lyL0RCdXNHTGliLTEuMC50eXBlbGliOiBHT2JqZWN0LTIuMC5naXIKLSAKLSAjIGdvYmplY3QKLS1HT0JKRUNUX0lOQ0xVREVESVI9JChzaGVsbCAiJHtQS0dfQ09ORklHfSIgLS12YXJpYWJsZT1pbmNsdWRlZGlyIGdvYmplY3QtMi4wKS9nbGliLTIuMAotLUdPQkpFQ1RfTElCRElSPSQoc2hlbGwgIiR7UEtHX0NPTkZJR30iIC0tdmFyaWFibGU9bGliZGlyIGdvYmplY3QtMi4wKQotK0dPQkpFQ1RfSU5DTFVERURJUj0kKFBLR19DT05GSUdfU1lTUk9PVF9ESVIpJChzaGVsbCAiJHtQS0dfQ09ORklHfSIgLS12YXJpYWJsZT1pbmNsdWRlZGlyIGdvYmplY3QtMi4wKS9nbGliLTIuMAotK0dPQkpFQ1RfTElCRElSPSQoUEtHX0NPTkZJR19TWVNST09UX0RJUikkKHNoZWxsICIke1BLR19DT05GSUd9IiAtLXZhcmlhYmxlPWxpYmRpciBnb2JqZWN0LTIuMCkKLSAKLSBHT0JKRUNUX0xJQlJBUlk9Z29iamVjdC0yLjAKLSAKLUBAIC0xMjAsOCArMTIwLDggQEAgR09iamVjdF8yXzBfZ2lyX0ZJTEVTID0gXAotIEJVSUxUX0dJUlNPVVJDRVMgKz0gR09iamVjdC0yLjAuZ2lyCi0gCi0gIyBnbW9kdWxlCi0tR01PRFVMRV9JTkNMVURFRElSPSQoc2hlbGwgIiR7UEtHX0NPTkZJR30iIC0tdmFyaWFibGU9aW5jbHVkZWRpciBnbW9kdWxlLTIuMCkvZ2xpYi0yLjAKLS1HTU9EVUxFX0xJQkRJUj0kKHNoZWxsICIke1BLR19DT05GSUd9IiAtLXZhcmlhYmxlPWxpYmRpciBnbW9kdWxlLTIuMCkKLStHTU9EVUxFX0lOQ0xVREVESVI9JChQS0dfQ09ORklHX1NZU1JPT1RfRElSKSQoc2hlbGwgIiR7UEtHX0NPTkZJR30iIC0tdmFyaWFibGU9aW5jbHVkZWRpciBnbW9kdWxlLTIuMCkvZ2xpYi0yLjAKLStHTU9EVUxFX0xJQkRJUj0kKFBLR19DT05GSUdfU1lTUk9PVF9ESVIpJChzaGVsbCAiJHtQS0dfQ09ORklHfSIgLS12YXJpYWJsZT1saWJkaXIgZ21vZHVsZS0yLjApCi0gCi0gR01PRFVMRV9MSUJSQVJZPWdtb2R1bGUtMi4wCi0gCi1AQCAtMTQ2LDEzICsxNDYsMTMgQEAgR01vZHVsZV8yXzBfZ2lyX0ZJTEVTID0gJChHTElCX0lOQ0xVREVESVIpL2dtb2R1bGUuaCBcCi0gQlVJTFRfR0lSU09VUkNFUyArPSBHTW9kdWxlLTIuMC5naXIKLSAKLSAjIGdpbwotLUdJT19JTkNMVURFRElSPSQoc2hlbGwgIiR7UEtHX0NPTkZJR30iIC0tdmFyaWFibGU9aW5jbHVkZWRpciBnaW8tMi4wKS9nbGliLTIuMAotLUdJT19MSUJESVI9JChzaGVsbCAiJHtQS0dfQ09ORklHfSIgLS12YXJpYWJsZT1saWJkaXIgZ2lvLTIuMCkKLStHSU9fSU5DTFVERURJUj0kKFBLR19DT05GSUdfU1lTUk9PVF9ESVIpJChzaGVsbCAiJHtQS0dfQ09ORklHfSIgLS12YXJpYWJsZT1pbmNsdWRlZGlyIGdpby0yLjApL2dsaWItMi4wCi0rR0lPX0xJQkRJUj0kKFBLR19DT05GSUdfU1lTUk9PVF9ESVIpJChzaGVsbCAiJHtQS0dfQ09ORklHfSIgLS12YXJpYWJsZT1saWJkaXIgZ2lvLTIuMCkKLSAKLSBHSU9fTElCUkFSWT1naW8tMi4wCi0gCi0gaWYgSEFWRV9HSU9fVU5JWAotLUdJT19VTklYX0hEUlM9JChzaGVsbCAiJHtQS0dfQ09ORklHfSIgLS12YXJpYWJsZT1pbmNsdWRlZGlyIGdpby11bml4LTIuMCkvZ2lvLXVuaXgtMi4wL2dpby8qLmgKLStHSU9fVU5JWF9IRFJTPSQoUEtHX0NPTkZJR19TWVNST09UX0RJUikkKHNoZWxsICIke1BLR19DT05GSUd9IiAtLXZhcmlhYmxlPWluY2x1ZGVkaXIgZ2lvLXVuaXgtMi4wKS9naW8tdW5peC0yLjAvZ2lvLyouaAotIEdJT19VTklYX1BBQ0tBR0VTID0gZ2lvLXVuaXgtMi4wCi0gZWxzZQotIEdJT19VTklYX0hEUlM9Ci1kaWZmIC0tZ2l0IGEvbTQvaW50cm9zcGVjdGlvbi5tNCBiL200L2ludHJvc3BlY3Rpb24ubTQKLWluZGV4IGQ4OWMzZDkuLmI1NjIyNjYgMTAwNjQ0Ci0tLS0gYS9tNC9pbnRyb3NwZWN0aW9uLm00Ci0rKysgYi9tNC9pbnRyb3NwZWN0aW9uLm00Ci1AQCAtNTYsMTQgKzU2LDE0IEBAIG00X2RlZmluZShbX0dPQkpFQ1RfSU5UUk9TUEVDVElPTl9DSEVDS19JTlRFUk5BTF0sCi0gICAgIElOVFJPU1BFQ1RJT05fR0lSRElSPQotICAgICBJTlRST1NQRUNUSU9OX1RZUEVMSUJESVI9Ci0gICAgIGlmIHRlc3QgIngkZm91bmRfaW50cm9zcGVjdGlvbiIgPSAieHllcyI7IHRoZW4KLS0gICAgICAgSU5UUk9TUEVDVElPTl9TQ0FOTkVSPWAkUEtHX0NPTkZJRyAtLXZhcmlhYmxlPWdfaXJfc2Nhbm5lciBnb2JqZWN0LWludHJvc3BlY3Rpb24tMS4wYAotLSAgICAgICBJTlRST1NQRUNUSU9OX0NPTVBJTEVSPWAkUEtHX0NPTkZJRyAtLXZhcmlhYmxlPWdfaXJfY29tcGlsZXIgZ29iamVjdC1pbnRyb3NwZWN0aW9uLTEuMGAKLS0gICAgICAgSU5UUk9TUEVDVElPTl9HRU5FUkFURT1gJFBLR19DT05GSUcgLS12YXJpYWJsZT1nX2lyX2dlbmVyYXRlIGdvYmplY3QtaW50cm9zcGVjdGlvbi0xLjBgCi0rICAgICAgIElOVFJPU1BFQ1RJT05fU0NBTk5FUj0kUEtHX0NPTkZJR19TWVNST09UX0RJUmAkUEtHX0NPTkZJRyAtLXZhcmlhYmxlPWdfaXJfc2Nhbm5lciBnb2JqZWN0LWludHJvc3BlY3Rpb24tMS4wYAotKyAgICAgICBJTlRST1NQRUNUSU9OX0NPTVBJTEVSPSRQS0dfQ09ORklHX1NZU1JPT1RfRElSYCRQS0dfQ09ORklHIC0tdmFyaWFibGU9Z19pcl9jb21waWxlciBnb2JqZWN0LWludHJvc3BlY3Rpb24tMS4wYAotKyAgICAgICBJTlRST1NQRUNUSU9OX0dFTkVSQVRFPSRQS0dfQ09ORklHX1NZU1JPT1RfRElSYCRQS0dfQ09ORklHIC0tdmFyaWFibGU9Z19pcl9nZW5lcmF0ZSBnb2JqZWN0LWludHJvc3BlY3Rpb24tMS4wYAotICAgICAgICBJTlRST1NQRUNUSU9OX0dJUkRJUj1gJFBLR19DT05GSUcgLS12YXJpYWJsZT1naXJkaXIgZ29iamVjdC1pbnRyb3NwZWN0aW9uLTEuMGAKLSAgICAgICAgSU5UUk9TUEVDVElPTl9UWVBFTElCRElSPSIkKCRQS0dfQ09ORklHIC0tdmFyaWFibGU9dHlwZWxpYmRpciBnb2JqZWN0LWludHJvc3BlY3Rpb24tMS4wKSIKLSAgICAgICAgSU5UUk9TUEVDVElPTl9DRkxBR1M9YCRQS0dfQ09ORklHIC0tY2ZsYWdzIGdvYmplY3QtaW50cm9zcGVjdGlvbi0xLjBgCi0gICAgICAgIElOVFJPU1BFQ1RJT05fTElCUz1gJFBLR19DT05GSUcgLS1saWJzIGdvYmplY3QtaW50cm9zcGVjdGlvbi0xLjBgCi0tICAgICAgIElOVFJPU1BFQ1RJT05fTUFLRUZJTEU9YCRQS0dfQ09ORklHIC0tdmFyaWFibGU9ZGF0YWRpciBnb2JqZWN0LWludHJvc3BlY3Rpb24tMS4wYC9nb2JqZWN0LWludHJvc3BlY3Rpb24tMS4wL01ha2VmaWxlLmludHJvc3BlY3Rpb24KLSsgICAgICAgSU5UUk9TUEVDVElPTl9NQUtFRklMRT0kUEtHX0NPTkZJR19TWVNST09UX0RJUmAkUEtHX0NPTkZJRyAtLXZhcmlhYmxlPWRhdGFkaXIgZ29iamVjdC1pbnRyb3NwZWN0aW9uLTEuMGAvZ29iamVjdC1pbnRyb3NwZWN0aW9uLTEuMC9NYWtlZmlsZS5pbnRyb3NwZWN0aW9uCi0gICAgIGZpCi0gICAgIEFDX1NVQlNUKElOVFJPU1BFQ1RJT05fU0NBTk5FUikKLSAgICAgQUNfU1VCU1QoSU5UUk9TUEVDVElPTl9DT01QSUxFUikKLS0tIAotMi43LjAKLQpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1nbm9tZS9nb2JqZWN0LWludHJvc3BlY3Rpb24vZ29iamVjdC1pbnRyb3NwZWN0aW9uLzAwMDEtUmV2ZXJ0LWFuLWluY29tcGxldGUtdXBzdHJlYW0tYXR0ZW1wdC1hdC1jcm9zcy1jb21waS5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ25vbWUvZ29iamVjdC1pbnRyb3NwZWN0aW9uL2dvYmplY3QtaW50cm9zcGVjdGlvbi8wMDAxLVJldmVydC1hbi1pbmNvbXBsZXRlLXVwc3RyZWFtLWF0dGVtcHQtYXQtY3Jvc3MtY29tcGkucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWFiYWVhNwotLS0gL2Rldi9udWxsCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ25vbWUvZ29iamVjdC1pbnRyb3NwZWN0aW9uL2dvYmplY3QtaW50cm9zcGVjdGlvbi8wMDAxLVJldmVydC1hbi1pbmNvbXBsZXRlLXVwc3RyZWFtLWF0dGVtcHQtYXQtY3Jvc3MtY29tcGkucGF0Y2gKQEAgLTAsMCArMSw1MCBAQAorRnJvbSAzYTlkMWU1ZWUwYWFlNTZmYWZlYzBiZWJhMjAxNGMxOWU0ZmYzMTBjIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogQWxleGFuZGVyIEthbmF2aW4gPGFsZXgua2FuYXZpbkBnbWFpbC5jb20+CitEYXRlOiBXZWQsIDIzIE1hciAyMDE2IDE3OjA3OjI4ICswMjAwCitTdWJqZWN0OiBbUEFUQ0ggMS81XSBSZXZlcnQgYW4gaW5jb21wbGV0ZSB1cHN0cmVhbSBhdHRlbXB0IGF0IGNyb3NzLWNvbXBpbGUKKyBzdXBwb3J0CisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworU2lnbmVkLW9mZi1ieTogQWxleGFuZGVyIEthbmF2aW4gPGFsZXgua2FuYXZpbkBnbWFpbC5jb20+CistLS0KKyBjb21tb24ubWsgICAgICAgICAgICAgICAgfCA0IC0tLS0KKyBnaXNjYW5uZXIvZ2R1bXBwYXJzZXIucHkgfCA2IC0tLS0tLQorIDIgZmlsZXMgY2hhbmdlZCwgMTAgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9jb21tb24ubWsgYi9jb21tb24ubWsKK2luZGV4IGI3NzhmN2EuLmUyNmM2MzcgMTAwNjQ0CistLS0gYS9jb21tb24ubWsKKysrKyBiL2NvbW1vbi5taworQEAgLTI0LDEyICsyNCw4IEBAIElOVFJPU1BFQ1RJT05fU0NBTk5FUl9BUkdTID0gXAorICAgICAtLWFkZC1pbmNsdWRlLXBhdGg9JCh0b3BfYnVpbGRkaXIpIFwKKyAgICAgLS1hZGQtaW5jbHVkZS1wYXRoPSQodG9wX2J1aWxkZGlyKS9naXIKKyAKKy0jIEdJX0NST1NTX0xBVU5DSEVSIGlzIHRoZSBjb21tYW5kIHRvIHVzZSBmb3IgZXhlY3V0aW5nIGctaXItY29tcGlsZXIuCistIyBOb3JtYWxseSB3aWxsIGJlIHVuZGVmaW5lZCBidXQgY2FuIGJlIHNldCAoZS5nLiB0byB3aW5lIG9yIHFlbXUpCistIyB3aGVuIGNyb3NzLWNvbXBpbGluZworIElOVFJPU1BFQ1RJT05fQ09NUElMRVIgPSBcCisgICAgIGVudiBQQVRIPSIubGliczokKFBBVEgpIiBcCistICAgICAgICAkKEdJX0NST1NTX0xBVU5DSEVSKSBcCisgICAgICAgICAkKHRvcF9idWlsZGRpcikvZy1pci1jb21waWxlciQoRVhFRVhUKQorIAorIElOVFJPU1BFQ1RJT05fQ09NUElMRVJfQVJHUyA9IFwKK2RpZmYgLS1naXQgYS9naXNjYW5uZXIvZ2R1bXBwYXJzZXIucHkgYi9naXNjYW5uZXIvZ2R1bXBwYXJzZXIucHkKK2luZGV4IDExMzRmMzMuLjliZGMyYmMgMTAwNjQ0CistLS0gYS9naXNjYW5uZXIvZ2R1bXBwYXJzZXIucHkKKysrKyBiL2dpc2Nhbm5lci9nZHVtcHBhcnNlci5weQorQEAgLTE2MiwxMiArMTYyLDYgQEAgYmxvYiBjb250YWluaW5nIGRhdGEgZ2xlYW5lZCBmcm9tIEdPYmplY3QncyBwcmltaXRpdmUgaW50cm9zcGVjdGlvbi4iIiIKKyAgICAgICAgIG91dF9wYXRoID0gb3MucGF0aC5qb2luKHNlbGYuX2JpbmFyeS50bXBkaXIsICdkdW1wLnhtbCcpCisgCisgICAgICAgICBhcmdzID0gW10KKy0KKy0gICAgICAgICMgUHJlcGVuZCB0aGUgbGF1bmNoZXIgY29tbWFuZCBhbmQgYXJndW1lbnRzLCBpZiBkZWZpbmVkCistICAgICAgICBsYXVuY2hlciA9IG9zLmVudmlyb24uZ2V0KCdHSV9DUk9TU19MQVVOQ0hFUicpCistICAgICAgICBpZiBsYXVuY2hlcjoKKy0gICAgICAgICAgICBhcmdzLmV4dGVuZChsYXVuY2hlci5zcGxpdCgpKQorLQorICAgICAgICAgYXJncy5leHRlbmQoc2VsZi5fYmluYXJ5LmFyZ3MpCisgICAgICAgICBhcmdzLmFwcGVuZCgnLS1pbnRyb3NwZWN0LWR1bXA9JXMsJXMnICUgKGluX3BhdGgsIG91dF9wYXRoKSkKKyAKKy0tIAorMi43LjAKKwpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1nbm9tZS9nb2JqZWN0LWludHJvc3BlY3Rpb24vZ29iamVjdC1pbnRyb3NwZWN0aW9uLzAwMDEtY29uZmlndXJlLmFjLWFkZC1ob3N0LWdpLWdpLWNyb3NzLXdyYXBwZXItYW5kLWdpLWxkZC5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ25vbWUvZ29iamVjdC1pbnRyb3NwZWN0aW9uL2dvYmplY3QtaW50cm9zcGVjdGlvbi8wMDAxLWNvbmZpZ3VyZS5hYy1hZGQtaG9zdC1naS1naS1jcm9zcy13cmFwcGVyLWFuZC1naS1sZGQucGF0Y2gKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDZhZmVmYWIuLjAwMDAwMDAKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1nbm9tZS9nb2JqZWN0LWludHJvc3BlY3Rpb24vZ29iamVjdC1pbnRyb3NwZWN0aW9uLzAwMDEtY29uZmlndXJlLmFjLWFkZC1ob3N0LWdpLWdpLWNyb3NzLXdyYXBwZXItYW5kLWdpLWxkZC5wYXRjaAorKysgL2Rldi9udWxsCkBAIC0xLDIwNCArMCwwIEBACi1Gcm9tIGM2ZTRmODNjMzczYjU3NzE2NmE3ZTQ2MTMwY2U4ZmYwMjVlZTg1MTUgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCi1Gcm9tOiBBbGV4YW5kZXIgS2FuYXZpbiA8YWxleC5rYW5hdmluQGdtYWlsLmNvbT4KLURhdGU6IE1vbiwgMTkgT2N0IDIwMTUgMTg6Mjk6MjEgKzAzMDAKLVN1YmplY3Q6IFtQQVRDSF0gY29uZmlndXJlLmFjOiBhZGQgaG9zdC1naSwgZ2ktY3Jvc3Mtd3JhcHBlciwgZ2ktbGRkLXdyYXBwZXIKLSBhbmQgaW50cm9zcGVjdGlvbi1kYXRhIG9wdGlvbnMKLQotV2l0aCB0aGUgZmlyc3Qgb3B0aW9uLCBnb2JqZWN0LWludHJvc3BlY3Rpb24gdG9vbHMgKGctaXItZG9jLXRvb2wgYW5kIGctaXItc2Nhbm5lcikKLXRoYXQgYXJlIGFscmVhZHkgaW5zdGFsbGVkIGluIHRoZSBob3N0IHN5c3RlbSB3aWxsIGJlIHVzZWQgZm9yIGJ1aWxkaW5nIHRoZSBzb3VyY2UgdHJlZS4KLQotV2l0aCB0aGUgc2Vjb25kIG9wdGlvbiwgZy1pci1zY2FubmVyIHdpbGwgYmUgaW5zdHJ1Y3RlZCB0byB1c2UgYW4gZXhlY3V0YWJsZQotd3JhcHBlciB0byBydW4gYmluYXJpZXMgaXQncyBwcm9kdWNpbmcsIGFuZCBnLWlyLWNvbXBpbGVyIHdpbGwgYmUgcnVuCi10aHJvdWdoIHRoZSBzYW1lIHdyYXBwZXIgKGhvc3Qgc3lzdGVtJ3MgZy1pci1jb21waWxlciBjYW5ub3QgYmUgdXNlZCBiZWNhdXNlCi1pdCdzIHByb2R1Y2luZyBhcmNoaXRlY3R1cmUtc3BlY2lmaWMgb3V0cHV0KS4KLQotV2l0aCB0aGUgdGhpcmQgb3B0aW9uLCBnaXNjYW5uZXIgd2lsbCBiZSBpbnN0cnVjdGVkIHRvIHVzZSBhIHNwZWNpYWwgbGRkCi1jb21tYW5kIGluc3RlYWQgb2Ygc3lzdGVtJ3MgbGRkICh3aGljaCBkb2VzIG5vdCB3b3JrIHdoZW4gdGhlIGJpbmFyeSB0byBpbnNwZWN0Ci1pcyBjb21waWxlZCBmb3IgYSBkaWZmZXJlbnQgYXJjaGl0ZWN0dXJlKS4KLQotV2l0aCB0aGUgZm91cnRoIG9wdGlvbiwgaXQgaXMgcG9zc2libGUgdG8gZGlzYWJsZSBidWlsZGluZyBvZiBpbnRyb3NwZWN0aW9uIGRhdGEKLSguZ2lyIGFuZCAudHlwZWxpYiBmaWxlcyksIHdoaWNoIG1heSBiZSBkaWZmaWN1bHQgb3IgaW1wb3NzaWJsZSBpbiBjcm9zcy1jb21waWxhdGlvbgotZW52aXJvbm1lbnRzLCBiZWNhdXNlIG9mIGxhY2sgb2YgZW11bGF0aW9uIChvciBuYXRpdmUgaGFyZHdhcmUpIGZvciB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZQotb24gd2hpY2ggdGhlIHRhcmdldCBiaW5hcmllcyBjYW4gYmUgcnVuLgotCi1UaGVzZSBvcHRpb25zIGFyZSB1c2VmdWwgd2hlbiBjcm9zcy1jb21waWxpbmcgZm9yIGEgZGlmZmVyZW50IHRhcmdldCBhcmNoaXRlY3R1cmUuCi0KLVVwc3RyZWFtLVN0YXR1czogUGVuZGluZyBbcmV2aWV3IG9uIG9lLWNvcmUgbGlzdF0KLVNpZ25lZC1vZmYtYnk6IEFsZXhhbmRlciBLYW5hdmluIDxhbGV4LmthbmF2aW5AZ21haWwuY29tPgotCi0tLS0KLSBNYWtlZmlsZS5hbSAgICAgICB8ICAyICsrCi0gY29tbW9uLm1rICAgICAgICAgfCAzOSArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysKLSBjb25maWd1cmUuYWMgICAgICB8IDQyICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKwotIHRlc3RzL01ha2VmaWxlLmFtIHwgIDUgKysrKy0KLSA0IGZpbGVzIGNoYW5nZWQsIDg3IGluc2VydGlvbnMoKyksIDEgZGVsZXRpb24oLSkKLQotZGlmZiAtLWdpdCBhL01ha2VmaWxlLmFtIGIvTWFrZWZpbGUuYW0KLWluZGV4IDQzN2M2NzMuLjFlYjM1NDUgMTAwNjQ0Ci0tLS0gYS9NYWtlZmlsZS5hbQotKysrIGIvTWFrZWZpbGUuYW0KLUBAIC0yMSw3ICsyMSw5IEBAIGluY2x1ZGUgTWFrZWZpbGUtY21waC5hbQotIGluY2x1ZGUgTWFrZWZpbGUtZ2lyZXBvc2l0b3J5LmFtCi0gaW5jbHVkZSBNYWtlZmlsZS1naXNjYW5uZXIuYW0KLSBpbmNsdWRlIE1ha2VmaWxlLWV4YW1wbGVzLmFtCi0raWYgQlVJTERfSU5UUk9TUEVDVElPTl9EQVRBCi0gaW5jbHVkZSBNYWtlZmlsZS1naXIuYW0KLStlbmRpZgotIGluY2x1ZGUgTWFrZWZpbGUtdG9vbHMuYW0KLSBpbmNsdWRlIE1ha2VmaWxlLW1zdmNwcm9qLmFtCi0gCi1kaWZmIC0tZ2l0IGEvY29tbW9uLm1rIGIvY29tbW9uLm1rCi1pbmRleCBlMjZjNjM3Li45ZjNhNjVmIDEwMDY0NAotLS0tIGEvY29tbW9uLm1rCi0rKysgYi9jb21tb24ubWsKLUBAIC02LDYgKzYsMTUgQEAKLSAjIG1vZHVsZSBpdHNlbGYuCi0gIwotIAotK2lmIFVTRV9IT1NUX0dJCi0rSU5UUk9TUEVDVElPTl9TQ0FOTkVSID0gXAotKyAgICBlbnYgUEFUSD0iJChQQVRIKSIgXAotKyAgICAgICAgTFBBVEg9LmxpYnMgXAotKyAgICAgICAgQ0M9IiQoQ0MpIiBcCi0rICAgICAgICBQWVRIT05QQVRIPSQodG9wX2J1aWxkZGlyKTokKHRvcF9zcmNkaXIpIFwKLSsgICAgICAgIFVOSU5TVEFMTEVEX0lOVFJPU1BFQ1RJT05fQlVJTERESVI9JCh0b3BfYnVpbGRkaXIpIFwKLSsgICAgICAgIGctaXItc2Nhbm5lcgotK2Vsc2UKLSBJTlRST1NQRUNUSU9OX1NDQU5ORVIgPSBcCi0gICAgIGVudiBQQVRIPSIubGliczokKFBBVEgpIiBcCi0gICAgICAgICBMUEFUSD0ubGlicyBcCi1AQCAtMTQsOSArMjMsMjQgQEAgSU5UUk9TUEVDVElPTl9TQ0FOTkVSID0gXAotICAgICAgICAgVU5JTlNUQUxMRURfSU5UUk9TUEVDVElPTl9TUkNESVI9JCh0b3Bfc3JjZGlyKSBcCi0gICAgICAgICBVTklOU1RBTExFRF9JTlRST1NQRUNUSU9OX0JVSUxERElSPSQodG9wX2J1aWxkZGlyKSBcCi0gICAgICAgICAkKHRvcF9idWlsZGRpcikvZy1pci1zY2FubmVyCi0rZW5kaWYKLSsKLStpZiBVU0VfQ1JPU1NfV1JBUFBFUgotK0NST1NTX1dSQVBQRVJfQVJHID0gLS11c2UtYmluYXJ5LXdyYXBwZXI9JChHSV9DUk9TU19XUkFQUEVSKQotK2Vsc2UKLStDUk9TU19XUkFQUEVSX0FSRyA9Ci0rZW5kaWYKLSsKLStpZiBVU0VfTEREX1dSQVBQRVIKLStMRERfV1JBUFBFUl9BUkcgPSAtLXVzZS1sZGQtd3JhcHBlcj0kKEdJX0xERF9XUkFQUEVSKQotK2Vsc2UKLStMRERfV1JBUFBFUl9BUkcgPQotK2VuZGlmCi0gCi0gSU5UUk9TUEVDVElPTl9TQ0FOTkVSX0FSR1MgPSBcCi0gICAgIC0tdmVyYm9zZSBcCi0rICAgICQoQ1JPU1NfV1JBUFBFUl9BUkcpIFwKLSsgICAgJChMRERfV1JBUFBFUl9BUkcpIFwKLSAgICAgLUkkKHRvcF9zcmNkaXIpIFwKLSAgICAgLS1hZGQtaW5jbHVkZS1wYXRoPSQoc3JjZGlyKSBcCi0gICAgIC0tYWRkLWluY2x1ZGUtcGF0aD0kKHRvcF9zcmNkaXIpL2dpciBcCi1AQCAtMjQsOSArNDgsMTUgQEAgSU5UUk9TUEVDVElPTl9TQ0FOTkVSX0FSR1MgPSBcCi0gICAgIC0tYWRkLWluY2x1ZGUtcGF0aD0kKHRvcF9idWlsZGRpcikgXAotICAgICAtLWFkZC1pbmNsdWRlLXBhdGg9JCh0b3BfYnVpbGRkaXIpL2dpcgotIAotK2lmIFVTRV9DUk9TU19XUkFQUEVSCi0rSU5UUk9TUEVDVElPTl9DT01QSUxFUiA9IFwKLSsgICAgZW52IFBBVEg9Ii5saWJzOiQoUEFUSCkiIFwKLSsgICAgICAgICQoR0lfQ1JPU1NfV1JBUFBFUikgJCh0b3BfYnVpbGRkaXIpLy5saWJzL2ctaXItY29tcGlsZXIkKEVYRUVYVCkKLStlbHNlCi0gSU5UUk9TUEVDVElPTl9DT01QSUxFUiA9IFwKLSAgICAgZW52IFBBVEg9Ii5saWJzOiQoUEFUSCkiIFwKLSAgICAgICAgICQodG9wX2J1aWxkZGlyKS9nLWlyLWNvbXBpbGVyJChFWEVFWFQpCi0rZW5kaWYKLSAKLSBJTlRST1NQRUNUSU9OX0NPTVBJTEVSX0FSR1MgPSBcCi0gICAgIC0taW5jbHVkZWRpcj0kKHNyY2RpcikgXAotQEAgLTM1LDYgKzY1LDE0IEBAIElOVFJPU1BFQ1RJT05fQ09NUElMRVJfQVJHUyA9IFwKLSAgICAgLS1pbmNsdWRlZGlyPSQodG9wX2J1aWxkZGlyKSBcCi0gICAgIC0taW5jbHVkZWRpcj0kKHRvcF9idWlsZGRpcikvZ2lyCi0gCi0raWYgVVNFX0hPU1RfR0kKLStJTlRST1NQRUNUSU9OX0RPQ1RPT0wgPSBcCi0rICAgIGVudiBQQVRIPSIkKFBBVEgpIiBcCi0rICAgICAgICBMUEFUSD0ubGlicyBcCi0rICAgICAgICBQWVRIT05QQVRIPSQodG9wX2J1aWxkZGlyKTokKHRvcF9zcmNkaXIpIFwKLSsgICAgICAgIFVOSU5TVEFMTEVEX0lOVFJPU1BFQ1RJT05fQlVJTERESVI9JCh0b3BfYnVpbGRkaXIpIFwKLSsgICAgICAgIGctaXItZG9jLXRvb2wKLStlbHNlCi0gSU5UUk9TUEVDVElPTl9ET0NUT09MID0gXAotICAgICBlbnYgUEFUSD0iLmxpYnM6JChQQVRIKSIgXAotICAgICAgICAgTFBBVEg9LmxpYnMgXAotQEAgLTQyLDYgKzgwLDcgQEAgSU5UUk9TUEVDVElPTl9ET0NUT09MID0gXAotICAgICAgICAgVU5JTlNUQUxMRURfSU5UUk9TUEVDVElPTl9TUkNESVI9JCh0b3Bfc3JjZGlyKSBcCi0gICAgICAgICBVTklOU1RBTExFRF9JTlRST1NQRUNUSU9OX0JVSUxERElSPSQodG9wX2J1aWxkZGlyKSBcCi0gICAgICAgICAkKHRvcF9idWlsZGRpcikvZy1pci1kb2MtdG9vbAotK2VuZGlmCi0gCi0gSU5UUk9TUEVDVElPTl9ET0NUT09MX0FSR1MgPSBcCi0gICAgIC0tYWRkLWluY2x1ZGUtcGF0aD0kKHNyY2RpcikgXAotZGlmZiAtLWdpdCBhL2NvbmZpZ3VyZS5hYyBiL2NvbmZpZ3VyZS5hYwotaW5kZXggYjExNTk2Yi4uZDc4YWU1MiAxMDA2NDQKLS0tLSBhL2NvbmZpZ3VyZS5hYwotKysrIGIvY29uZmlndXJlLmFjCi1AQCAtMzQ3LDYgKzM0Nyw0OCBAQCBmaQotIAotIEFDX1NVQlNUKEVYVFJBX0xJTktfRkxBR1MpCi0gCi0rQUNfQVJHX0VOQUJMRShbaG9zdC1naV0sCi0rW0FTX0hFTFBfU1RSSU5HKFstLWVuYWJsZS1ob3N0LWdpXSxbVXNlIGdvYmplY3QgaW50cm9zcGVjdGlvbiB0b29scyBpbnN0YWxsZWQgaW4gdGhlIGhvc3Qgc3lzdGVtICh1c2VmdWwgd2hlbiBjcm9zcy1jb21waWxpbmcpXSldLAotK1tjYXNlICIke2VuYWJsZXZhbH0iIGluCi0rICB5ZXMpIGhvc3RfZ2k9dHJ1ZSA7OwotKyAgbm8pICBob3N0X2dpPWZhbHNlIDs7Ci0rICAqKSBBQ19NU0dfRVJST1IoW2JhZCB2YWx1ZSAke2VuYWJsZXZhbH0gZm9yIC0tZW5hYmxlLWhvc3QtZ2ldKSA7OwotK2VzYWNdLFtob3N0X2dpPWZhbHNlXSkKLStBTV9DT05ESVRJT05BTChbVVNFX0hPU1RfR0ldLCBbdGVzdCB4JGhvc3RfZ2kgPSB4dHJ1ZV0pCi0rCi0rQUNfQVJHX0VOQUJMRShbZ2ktY3Jvc3Mtd3JhcHBlcl0sCi0rW0FTX0hFTFBfU1RSSU5HKFstLWVuYWJsZS1naS1jcm9zcy13cmFwcGVyPXBhdGhdLFtVc2UgYSB3cmFwcGVyIHRvIHJ1biBnaWNvbXBpbGVyIGFuZCBiaW5hcmllcyBwcm9kdWNlZCBieSBnaXNjYW5uZXIgKHVzZWZ1bCB3aGVuIGNyb3NzLWNvbXBpbGluZyldKV0sCi0rWwotK0dJX0NST1NTX1dSQVBQRVI9IiR7ZW5hYmxldmFsfSIKLSt1c2Vfd3JhcHBlcj10cnVlCi0rXSxbCi0rR0lfQ1JPU1NfV1JBUFBFUj0iIgotK3VzZV93cmFwcGVyPWZhbHNlCi0rXSkKLStBQ19TVUJTVChHSV9DUk9TU19XUkFQUEVSKQotK0FNX0NPTkRJVElPTkFMKFtVU0VfQ1JPU1NfV1JBUFBFUl0sIFt0ZXN0IHgkdXNlX3dyYXBwZXIgPSB4dHJ1ZV0pCi0rCi0rQUNfQVJHX0VOQUJMRShbZ2ktbGRkLXdyYXBwZXJdLAotK1tBU19IRUxQX1NUUklORyhbLS1lbmFibGUtZ2ktbGRkLXdyYXBwZXI9cGF0aF0sW1VzZSBhIGxkZCB3cmFwcGVyIGluc3RlYWQgb2Ygc3lzdGVtJ3MgbGRkIGNvbW1hbmQgaW4gZ2lzY2FubmVyICh1c2VmdWwgd2hlbiBjcm9zcy1jb21waWxpbmcpXSldLAotK1sKLStHSV9MRERfV1JBUFBFUj0iJHtlbmFibGV2YWx9IgotK3VzZV9sZGRfd3JhcHBlcj10cnVlCi0rXSxbCi0rR0lfTEREX1dSQVBQRVI9IiIKLSt1c2VfbGRkX3dyYXBwZXI9ZmFsc2UKLStdKQotK0FDX1NVQlNUKEdJX0xERF9XUkFQUEVSKQotK0FNX0NPTkRJVElPTkFMKFtVU0VfTEREX1dSQVBQRVJdLCBbdGVzdCB4JHVzZV9sZGRfd3JhcHBlciA9IHh0cnVlXSkKLSsKLStBQ19BUkdfRU5BQkxFKFtpbnRyb3NwZWN0aW9uLWRhdGFdLAotK1tBU19IRUxQX1NUUklORyhbLS1lbmFibGUtaW50cm9zcGVjdGlvbi1kYXRhXSxbQnVpbGQgaW50cm9zcGVjdGlvbiBkYXRhICguZ2lyIGFuZCAudHlwZWxpYiBmaWxlcykgaW4gYWRkaXRpb24gdG8gbGlicmFyeSBhbmQgdG9vbHNdKV0sCi0rW2Nhc2UgIiR7ZW5hYmxldmFsfSIgaW4KLSsgIHllcykgaW50cm9zcGVjdGlvbl9kYXRhPXRydWUgOzsKLSsgIG5vKSAgaW50cm9zcGVjdGlvbl9kYXRhPWZhbHNlIDs7Ci0rICAqKSBBQ19NU0dfRVJST1IoW2JhZCB2YWx1ZSAke2VuYWJsZXZhbH0gZm9yIC0tZW5hYmxlLWludHJvc3BlY3Rpb24tZGF0YV0pIDs7Ci0rZXNhY10sW2ludHJvc3BlY3Rpb25fZGF0YT10cnVlXSkKLStBTV9DT05ESVRJT05BTChbQlVJTERfSU5UUk9TUEVDVElPTl9EQVRBXSwgW3Rlc3QgeCRpbnRyb3NwZWN0aW9uX2RhdGEgPSB4dHJ1ZV0pCi0rCi0gQUNfQ09ORklHX0ZJTEVTKFsKLSBNYWtlZmlsZQotIHRlc3RzL01ha2VmaWxlCi1kaWZmIC0tZ2l0IGEvdGVzdHMvTWFrZWZpbGUuYW0gYi90ZXN0cy9NYWtlZmlsZS5hbQotaW5kZXggYmRkMGZhNy4uNzVkZDNjOSAxMDA2NDQKLS0tLSBhL3Rlc3RzL01ha2VmaWxlLmFtCi0rKysgYi90ZXN0cy9NYWtlZmlsZS5hbQotQEAgLTEsNiArMSw5IEBACi0gaW5jbHVkZSAkKHRvcF9zcmNkaXIpL2NvbW1vbi5tawotIAotLVNVQkRJUlMgPSAuIHNjYW5uZXIgcmVwb3NpdG9yeSBvZmZzZXRzIHdhcm4KLStTVUJESVJTID0gLiBzY2FubmVyIHJlcG9zaXRvcnkgd2FybgotK2lmIEJVSUxEX0lOVFJPU1BFQ1RJT05fREFUQQotK1NVQkRJUlMgKz0gb2Zmc2V0cwotK2VuZGlmCi0gCi0gRVhUUkFfRElTVD0KLSBCVUlMVF9TT1VSQ0VTPQotLS0gCi0yLjYuMgotCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdub21lL2dvYmplY3QtaW50cm9zcGVjdGlvbi9nb2JqZWN0LWludHJvc3BlY3Rpb24vMDAwMS1naXNjYW5uZXItYWRkLWEtdXNlLWxkZC13cmFwcGVyLW9wdGlvbi5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ25vbWUvZ29iamVjdC1pbnRyb3NwZWN0aW9uL2dvYmplY3QtaW50cm9zcGVjdGlvbi8wMDAxLWdpc2Nhbm5lci1hZGQtYS11c2UtbGRkLXdyYXBwZXItb3B0aW9uLnBhdGNoCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmOTIzZGNjLi4wMDAwMDAwCi0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ25vbWUvZ29iamVjdC1pbnRyb3NwZWN0aW9uL2dvYmplY3QtaW50cm9zcGVjdGlvbi8wMDAxLWdpc2Nhbm5lci1hZGQtYS11c2UtbGRkLXdyYXBwZXItb3B0aW9uLnBhdGNoCisrKyAvZGV2L251bGwKQEAgLTEsNDggKzAsMCBAQAotRnJvbSAyOTFhOTJmMjAwOTgxYTc3MmIyZDAzNzM5ZGZmYjU5MjZhODJjNWE1IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQotRnJvbTogQWxleGFuZGVyIEthbmF2aW4gPGFsZXgua2FuYXZpbkBnbWFpbC5jb20+Ci1EYXRlOiBGcmksIDMwIE9jdCAyMDE1IDE2OjI4OjQ2ICswMjAwCi1TdWJqZWN0OiBbUEFUQ0ggMS8yXSBnaXNjYW5uZXI6IGFkZCBhIC0tdXNlLWxkZC13cmFwcGVyIG9wdGlvbgotCi1UaGlzIGlzIHVzZWZ1bCBpbiBjcm9zcy1jb21waWxlIGVudmlyb25tZW50cyB3aGVyZSBzeXN0ZW0ncyBsZGQKLWNvbW1hbmQgZG9lcyBub3Qgd29yayBvbiBiaW5hcmllcyBidWlsdCBmb3IgYSBkaWZmZXJlbnQgYXJjaGl0ZWN0dXJlCi0KLVVwc3RyZWFtLVN0YXR1czogUGVuZGluZyBbcmV2aWV3IGluIG9lLWNvcmVdCi1TaWduZWQtb2ZmLWJ5OiBBbGV4YW5kZXIgS2FuYXZpbiA8YWxleC5rYW5hdmluQGdtYWlsLmNvbT4KLQotLS0tCi0gZ2lzY2FubmVyL3NjYW5uZXJtYWluLnB5IHwgMyArKysKLSBnaXNjYW5uZXIvc2hsaWJzLnB5ICAgICAgfCA0ICsrKy0KLSAyIGZpbGVzIGNoYW5nZWQsIDYgaW5zZXJ0aW9ucygrKSwgMSBkZWxldGlvbigtKQotCi1kaWZmIC0tZ2l0IGEvZ2lzY2FubmVyL3NjYW5uZXJtYWluLnB5IGIvZ2lzY2FubmVyL3NjYW5uZXJtYWluLnB5Ci1pbmRleCBlMzdkM2UzLi5iOGZmZjVmIDEwMDc1NQotLS0tIGEvZ2lzY2FubmVyL3NjYW5uZXJtYWluLnB5Ci0rKysgYi9naXNjYW5uZXIvc2Nhbm5lcm1haW4ucHkKLUBAIC0xMjEsNiArMTIxLDkgQEAgZGVmIF9nZXRfb3B0aW9uX3BhcnNlcigpOgotICAgICBwYXJzZXIuYWRkX29wdGlvbigiIiwgIi0tdXNlLWJpbmFyeS13cmFwcGVyIiwKLSAgICAgICAgICAgICAgICAgICAgICAgYWN0aW9uPSJzdG9yZSIsIGRlc3Q9IndyYXBwZXIiLCBkZWZhdWx0PU5vbmUsCi0gICAgICAgICAgICAgICAgICAgICAgIGhlbHA9IndyYXBwZXIgdG8gdXNlIGZvciBydW5uaW5nIHByb2dyYW1zICh1c2VmdWwgd2hlbiBjcm9zcy1jb21waWxpbmcpIikKLSsgICAgcGFyc2VyLmFkZF9vcHRpb24oIiIsICItLXVzZS1sZGQtd3JhcHBlciIsCi0rICAgICAgICAgICAgICAgICAgICAgIGFjdGlvbj0ic3RvcmUiLCBkZXN0PSJsZGRfd3JhcHBlciIsIGRlZmF1bHQ9Tm9uZSwKLSsgICAgICAgICAgICAgICAgICAgICAgaGVscD0id3JhcHBlciB0byB1c2UgaW5zdGVhZCBvZiBsZGQgKHVzZWZ1bCB3aGVuIGNyb3NzLWNvbXBpbGluZykiKQotICAgICBwYXJzZXIuYWRkX29wdGlvbigiIiwgIi0tcHJvZ3JhbS1hcmciLAotICAgICAgICAgICAgICAgICAgICAgICBhY3Rpb249ImFwcGVuZCIsIGRlc3Q9InByb2dyYW1fYXJncyIsIGRlZmF1bHQ9W10sCi0gICAgICAgICAgICAgICAgICAgICAgIGhlbHA9ImV4dHJhIGFyZ3VtZW50cyB0byBwcm9ncmFtIikKLWRpZmYgLS1naXQgYS9naXNjYW5uZXIvc2hsaWJzLnB5IGIvZ2lzY2FubmVyL3NobGlicy5weQotaW5kZXggMWFkNzVlZS4uNDExMTdjNiAxMDA2NDQKLS0tLSBhL2dpc2Nhbm5lci9zaGxpYnMucHkKLSsrKyBiL2dpc2Nhbm5lci9zaGxpYnMucHkKLUBAIC0xMDAsNyArMTAwLDkgQEAgZGVmIF9yZXNvbHZlX25vbl9saWJ0b29sKG9wdGlvbnMsIGJpbmFyeSwgbGlicmFyaWVzKToKLSAgICAgICAgICAgICBhcmdzLmV4dGVuZChsaWJ0b29sKQotICAgICAgICAgICAgIGFyZ3MuYXBwZW5kKCctLW1vZGU9ZXhlY3V0ZScpCi0gICAgICAgICBwbGF0Zm9ybV9zeXN0ZW0gPSBwbGF0Zm9ybS5zeXN0ZW0oKQotLSAgICAgICAgaWYgcGxhdGZvcm1fc3lzdGVtID09ICdEYXJ3aW4nOgotKyAgICAgICAgaWYgb3B0aW9ucy5sZGRfd3JhcHBlcjoKLSsgICAgICAgICAgICBhcmdzLmV4dGVuZChbb3B0aW9ucy5sZGRfd3JhcHBlciwgYmluYXJ5LmFyZ3NbMF1dKQotKyAgICAgICAgZWxpZiBwbGF0Zm9ybV9zeXN0ZW0gPT0gJ0Rhcndpbic6Ci0gICAgICAgICAgICAgYXJncy5leHRlbmQoWydvdG9vbCcsICctTCcsIGJpbmFyeS5hcmdzWzBdXSkKLSAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgYXJncy5leHRlbmQoWydsZGQnLCBiaW5hcnkuYXJnc1swXV0pCi0tLSAKLTIuMS40Ci0KZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ25vbWUvZ29iamVjdC1pbnRyb3NwZWN0aW9uL2dvYmplY3QtaW50cm9zcGVjdGlvbi8wMDAxLWdpc2Nhbm5lci1hZGQtdXNlLWJpbmFyeS13cmFwcGVyLW9wdGlvbi5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ25vbWUvZ29iamVjdC1pbnRyb3NwZWN0aW9uL2dvYmplY3QtaW50cm9zcGVjdGlvbi8wMDAxLWdpc2Nhbm5lci1hZGQtdXNlLWJpbmFyeS13cmFwcGVyLW9wdGlvbi5wYXRjaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTEyNDFhOS4uMDAwMDAwMAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdub21lL2dvYmplY3QtaW50cm9zcGVjdGlvbi9nb2JqZWN0LWludHJvc3BlY3Rpb24vMDAwMS1naXNjYW5uZXItYWRkLXVzZS1iaW5hcnktd3JhcHBlci1vcHRpb24ucGF0Y2gKKysrIC9kZXYvbnVsbApAQCAtMSw1MiArMCwwIEBACi1Gcm9tIDIzMjJmMzYwNTYyNjVmODA5YWFmZmI3NGZjZjVhYzBjODMxMjk3NTIgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCi1Gcm9tOiBBbGV4YW5kZXIgS2FuYXZpbiA8YWxleC5rYW5hdmluQGdtYWlsLmNvbT4KLURhdGU6IE1vbiwgMTkgT2N0IDIwMTUgMTg6MjY6NDAgKzAzMDAKLVN1YmplY3Q6IFtQQVRDSCAyLzRdIGdpc2Nhbm5lcjogYWRkIC0tdXNlLWJpbmFyeS13cmFwcGVyIG9wdGlvbgotCi1XaXRoIHRoaXMgb3B0aW9uLCBnaXNjYW5uZXIgd2lsbCB1c2UgYSB3cmFwcGVyIGV4ZWN1dGFibGUgdG8gcnVuCi1iaW5hcmllcyBpdCdzIHByb2R1Y2luZywgaW5zdGVhZCBvZiBydW5uaW5nIHRoZW0gZGlyZWN0bHkuIFRoaXMKLWlzIHVzZWZ1bCB3aGVuIGJpbmFyaWVzIGFyZSBjcm9zcy1jb21waWxlZCBhbmQgY2Fubm90IGJlIHJ1biBkaXJlY3RseSwKLWJ1dCB0aGV5IGNhbiBiZSBydW4gdXNpbmcgZm9yIGV4YW1wbGUgUUVNVSBlbXVsYXRpb24uCi0KLVVwc3RyZWFtLVN0YXR1czogUGVuZGluZyBbcmV2aWV3IG9uIG9lLWNvcmUgbGlzdF0KLVNpZ25lZC1vZmYtYnk6IEFsZXhhbmRlciBLYW5hdmluIDxhbGV4LmthbmF2aW5AZ21haWwuY29tPgotCi0tLS0KLSBnaXNjYW5uZXIvc2Nhbm5lcm1haW4ucHkgfCAxNCArKysrKysrKysrKysrKwotIDEgZmlsZSBjaGFuZ2VkLCAxNCBpbnNlcnRpb25zKCspCi0KLWRpZmYgLS1naXQgYS9naXNjYW5uZXIvc2Nhbm5lcm1haW4ucHkgYi9naXNjYW5uZXIvc2Nhbm5lcm1haW4ucHkKLWluZGV4IGIzNjI4NGQuLmUzN2QzZTMgMTAwNzU1Ci0tLS0gYS9naXNjYW5uZXIvc2Nhbm5lcm1haW4ucHkKLSsrKyBiL2dpc2Nhbm5lci9zY2FubmVybWFpbi5weQotQEAgLTExOCw2ICsxMTgsOSBAQCBkZWYgX2dldF9vcHRpb25fcGFyc2VyKCk6Ci0gICAgIHBhcnNlci5hZGRfb3B0aW9uKCIiLCAiLS1wcm9ncmFtIiwKLSAgICAgICAgICAgICAgICAgICAgICAgYWN0aW9uPSJzdG9yZSIsIGRlc3Q9InByb2dyYW0iLCBkZWZhdWx0PU5vbmUsCi0gICAgICAgICAgICAgICAgICAgICAgIGhlbHA9InByb2dyYW0gdG8gZXhlY3V0ZSIpCi0rICAgIHBhcnNlci5hZGRfb3B0aW9uKCIiLCAiLS11c2UtYmluYXJ5LXdyYXBwZXIiLAotKyAgICAgICAgICAgICAgICAgICAgICBhY3Rpb249InN0b3JlIiwgZGVzdD0id3JhcHBlciIsIGRlZmF1bHQ9Tm9uZSwKLSsgICAgICAgICAgICAgICAgICAgICAgaGVscD0id3JhcHBlciB0byB1c2UgZm9yIHJ1bm5pbmcgcHJvZ3JhbXMgKHVzZWZ1bCB3aGVuIGNyb3NzLWNvbXBpbGluZykiKQotICAgICBwYXJzZXIuYWRkX29wdGlvbigiIiwgIi0tcHJvZ3JhbS1hcmciLAotICAgICAgICAgICAgICAgICAgICAgICBhY3Rpb249ImFwcGVuZCIsIGRlc3Q9InByb2dyYW1fYXJncyIsIGRlZmF1bHQ9W10sCi0gICAgICAgICAgICAgICAgICAgICAgIGhlbHA9ImV4dHJhIGFyZ3VtZW50cyB0byBwcm9ncmFtIikKLUBAIC00MDYsNiArNDA5LDE3IEBAIGRlZiBjcmVhdGVfYmluYXJ5KHRyYW5zZm9ybWVyLCBvcHRpb25zLCBhcmdzKToKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2R1bXBfcGFyc2VyLmdldF9lcnJvcl9xdWFya19mdW5jdGlvbnMoKSkKLSAKLSAgICAgc2hsaWJzID0gcmVzb2x2ZV9zaGxpYnMob3B0aW9ucywgYmluYXJ5LCBvcHRpb25zLmxpYnJhcmllcykKLSsgICAgaWYgb3B0aW9ucy53cmFwcGVyOgotKyAgICAgICAgIyBUaGUgd3JhcHBlciBuZWVkcyB0aGUgYmluYXJ5IGl0c2VsZiwgbm90IHRoZSBsaWJ0b29sIHdyYXBwZXIgc2NyaXB0LAotKyAgICAgICAgIyBzbyB3ZSBjaGVjayBpZiBsaWJ0b29sIGhhcyBzbmVha2VkIHRoZSBiaW5hcnkgaW50byAubGlicyBzdWJkaXJlY3RvcnkKLSsgICAgICAgICMgYW5kIGFkanVzdCB0aGUgcGF0aCBhY2NvcmRpbmdseQotKwlpbXBvcnQgb3MucGF0aAotKyAgICAgICAgZGlyX25hbWUsIGJpbmFyeV9uYW1lICA9IG9zLnBhdGguc3BsaXQoYmluYXJ5LmFyZ3NbMF0pCi0rICAgICAgICBsaWJ0b29sX2JpbmFyeSA9IG9zLnBhdGguam9pbihkaXJfbmFtZSwgJy5saWJzJywgYmluYXJ5X25hbWUpCi0rICAgICAgICBpZiBvcy5wYXRoLmV4aXN0cyhsaWJ0b29sX2JpbmFyeSk6Ci0rCSAgICBiaW5hcnkuYXJnc1swXSA9IGxpYnRvb2xfYmluYXJ5Ci0rCSMgVGhlbiBwcmVwZW5kIHRoZSB3cmFwcGVyIHRvIHRoZSBjb21tYW5kIGxpbmUgdG8gZXhlY3V0ZQotKyAgICAgICAgYmluYXJ5LmFyZ3MgPSBbb3B0aW9ucy53cmFwcGVyXSArIGJpbmFyeS5hcmdzCi0gICAgIGdkdW1wX3BhcnNlci5zZXRfaW50cm9zcGVjdGlvbl9iaW5hcnkoYmluYXJ5KQotICAgICBnZHVtcF9wYXJzZXIucGFyc2UoKQotICAgICByZXR1cm4gc2hsaWJzCi0tLSAKLTIuMS40Ci0KZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ25vbWUvZ29iamVjdC1pbnRyb3NwZWN0aW9uL2dvYmplY3QtaW50cm9zcGVjdGlvbi8wMDAyLWNvbmZpZ3VyZS5hYy1hZGQtaG9zdC1naS1naS1jcm9zcy13cmFwcGVyLWdpLWxkZC13cmEucGF0Y2ggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdub21lL2dvYmplY3QtaW50cm9zcGVjdGlvbi9nb2JqZWN0LWludHJvc3BlY3Rpb24vMDAwMi1jb25maWd1cmUuYWMtYWRkLWhvc3QtZ2ktZ2ktY3Jvc3Mtd3JhcHBlci1naS1sZGQtd3JhLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ4YTBjODUKLS0tIC9kZXYvbnVsbAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdub21lL2dvYmplY3QtaW50cm9zcGVjdGlvbi9nb2JqZWN0LWludHJvc3BlY3Rpb24vMDAwMi1jb25maWd1cmUuYWMtYWRkLWhvc3QtZ2ktZ2ktY3Jvc3Mtd3JhcHBlci1naS1sZGQtd3JhLnBhdGNoCkBAIC0wLDAgKzEsMjAzIEBACitGcm9tIGIxNTAzZmUyNjkzZDYwMmIzZTI0ZTRiODMyZGMwOTM0OTYwZDVkMjIgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBBbGV4YW5kZXIgS2FuYXZpbiA8YWxleC5rYW5hdmluQGdtYWlsLmNvbT4KK0RhdGU6IE1vbiwgMTkgT2N0IDIwMTUgMTg6Mjk6MjEgKzAzMDAKK1N1YmplY3Q6IFtQQVRDSCAyLzVdIGNvbmZpZ3VyZS5hYzogYWRkIGhvc3QtZ2ksIGdpLWNyb3NzLXdyYXBwZXIsCisgZ2ktbGRkLXdyYXBwZXIgYW5kIGludHJvc3BlY3Rpb24tZGF0YSBvcHRpb25zCisKK1dpdGggdGhlIGZpcnN0IG9wdGlvbiwgZ29iamVjdC1pbnRyb3NwZWN0aW9uIHRvb2xzIChnLWlyLWRvYy10b29sIGFuZCBnLWlyLXNjYW5uZXIpCit0aGF0IGFyZSBhbHJlYWR5IGluc3RhbGxlZCBpbiB0aGUgaG9zdCBzeXN0ZW0gd2lsbCBiZSB1c2VkIGZvciBidWlsZGluZyB0aGUgc291cmNlIHRyZWUuCisKK1dpdGggdGhlIHNlY29uZCBvcHRpb24sIGctaXItc2Nhbm5lciB3aWxsIGJlIGluc3RydWN0ZWQgdG8gdXNlIGFuIGV4ZWN1dGFibGUKK3dyYXBwZXIgdG8gcnVuIGJpbmFyaWVzIGl0J3MgcHJvZHVjaW5nLCBhbmQgZy1pci1jb21waWxlciB3aWxsIGJlIHJ1bgordGhyb3VnaCB0aGUgc2FtZSB3cmFwcGVyIChob3N0IHN5c3RlbSdzIGctaXItY29tcGlsZXIgY2Fubm90IGJlIHVzZWQgYmVjYXVzZQoraXQncyBwcm9kdWNpbmcgYXJjaGl0ZWN0dXJlLXNwZWNpZmljIG91dHB1dCkuCisKK1dpdGggdGhlIHRoaXJkIG9wdGlvbiwgZ2lzY2FubmVyIHdpbGwgYmUgaW5zdHJ1Y3RlZCB0byB1c2UgYSBzcGVjaWFsIGxkZAorY29tbWFuZCBpbnN0ZWFkIG9mIHN5c3RlbSdzIGxkZCAod2hpY2ggZG9lcyBub3Qgd29yayB3aGVuIHRoZSBiaW5hcnkgdG8gaW5zcGVjdAoraXMgY29tcGlsZWQgZm9yIGEgZGlmZmVyZW50IGFyY2hpdGVjdHVyZSkuCisKK1dpdGggdGhlIGZvdXJ0aCBvcHRpb24sIGl0IGlzIHBvc3NpYmxlIHRvIGRpc2FibGUgYnVpbGRpbmcgb2YgaW50cm9zcGVjdGlvbiBkYXRhCisoLmdpciBhbmQgLnR5cGVsaWIgZmlsZXMpLCB3aGljaCBtYXkgYmUgZGlmZmljdWx0IG9yIGltcG9zc2libGUgaW4gY3Jvc3MtY29tcGlsYXRpb24KK2Vudmlyb25tZW50cywgYmVjYXVzZSBvZiBsYWNrIG9mIGVtdWxhdGlvbiAob3IgbmF0aXZlIGhhcmR3YXJlKSBmb3IgdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUKK29uIHdoaWNoIHRoZSB0YXJnZXQgYmluYXJpZXMgY2FuIGJlIHJ1bi4KKworVGhlc2Ugb3B0aW9ucyBhcmUgdXNlZnVsIHdoZW4gY3Jvc3MtY29tcGlsaW5nIGZvciBhIGRpZmZlcmVudCB0YXJnZXQgYXJjaGl0ZWN0dXJlLgorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcgW3JldmlldyBvbiBvZS1jb3JlIGxpc3RdCitTaWduZWQtb2ZmLWJ5OiBBbGV4YW5kZXIgS2FuYXZpbiA8YWxleC5rYW5hdmluQGdtYWlsLmNvbT4KKy0tLQorIE1ha2VmaWxlLmFtICAgICAgIHwgIDIgKysKKyBjb21tb24ubWsgICAgICAgICB8IDM5ICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKworIGNvbmZpZ3VyZS5hYyAgICAgIHwgNDIgKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrCisgdGVzdHMvTWFrZWZpbGUuYW0gfCAgNSArKysrLQorIDQgZmlsZXMgY2hhbmdlZCwgODcgaW5zZXJ0aW9ucygrKSwgMSBkZWxldGlvbigtKQorCitkaWZmIC0tZ2l0IGEvTWFrZWZpbGUuYW0gYi9NYWtlZmlsZS5hbQoraW5kZXggYjA4MGE4OS4uY2U4ZDI5YiAxMDA2NDQKKy0tLSBhL01ha2VmaWxlLmFtCisrKysgYi9NYWtlZmlsZS5hbQorQEAgLTIxLDcgKzIxLDkgQEAgaW5jbHVkZSBNYWtlZmlsZS1jbXBoLmFtCisgaW5jbHVkZSBNYWtlZmlsZS1naXJlcG9zaXRvcnkuYW0KKyBpbmNsdWRlIE1ha2VmaWxlLWdpc2Nhbm5lci5hbQorIGluY2x1ZGUgTWFrZWZpbGUtZXhhbXBsZXMuYW0KKytpZiBCVUlMRF9JTlRST1NQRUNUSU9OX0RBVEEKKyBpbmNsdWRlIE1ha2VmaWxlLWdpci5hbQorK2VuZGlmCisgaW5jbHVkZSBNYWtlZmlsZS10b29scy5hbQorIGluY2x1ZGUgTWFrZWZpbGUtbXN2Y3Byb2ouYW0KKyAKK2RpZmYgLS1naXQgYS9jb21tb24ubWsgYi9jb21tb24ubWsKK2luZGV4IGUyNmM2MzcuLjlmM2E2NWYgMTAwNjQ0CistLS0gYS9jb21tb24ubWsKKysrKyBiL2NvbW1vbi5taworQEAgLTYsNiArNiwxNSBAQAorICMgbW9kdWxlIGl0c2VsZi4KKyAjCisgCisraWYgVVNFX0hPU1RfR0kKKytJTlRST1NQRUNUSU9OX1NDQU5ORVIgPSBcCisrICAgIGVudiBQQVRIPSIkKFBBVEgpIiBcCisrICAgICAgICBMUEFUSD0ubGlicyBcCisrICAgICAgICBDQz0iJChDQykiIFwKKysgICAgICAgIFBZVEhPTlBBVEg9JCh0b3BfYnVpbGRkaXIpOiQodG9wX3NyY2RpcikgXAorKyAgICAgICAgVU5JTlNUQUxMRURfSU5UUk9TUEVDVElPTl9CVUlMRERJUj0kKHRvcF9idWlsZGRpcikgXAorKyAgICAgICAgZy1pci1zY2FubmVyCisrZWxzZQorIElOVFJPU1BFQ1RJT05fU0NBTk5FUiA9IFwKKyAgICAgZW52IFBBVEg9Ii5saWJzOiQoUEFUSCkiIFwKKyAgICAgICAgIExQQVRIPS5saWJzIFwKK0BAIC0xNCw5ICsyMywyNCBAQCBJTlRST1NQRUNUSU9OX1NDQU5ORVIgPSBcCisgICAgICAgICBVTklOU1RBTExFRF9JTlRST1NQRUNUSU9OX1NSQ0RJUj0kKHRvcF9zcmNkaXIpIFwKKyAgICAgICAgIFVOSU5TVEFMTEVEX0lOVFJPU1BFQ1RJT05fQlVJTERESVI9JCh0b3BfYnVpbGRkaXIpIFwKKyAgICAgICAgICQodG9wX2J1aWxkZGlyKS9nLWlyLXNjYW5uZXIKKytlbmRpZgorKworK2lmIFVTRV9DUk9TU19XUkFQUEVSCisrQ1JPU1NfV1JBUFBFUl9BUkcgPSAtLXVzZS1iaW5hcnktd3JhcHBlcj0kKEdJX0NST1NTX1dSQVBQRVIpCisrZWxzZQorK0NST1NTX1dSQVBQRVJfQVJHID0KKytlbmRpZgorKworK2lmIFVTRV9MRERfV1JBUFBFUgorK0xERF9XUkFQUEVSX0FSRyA9IC0tdXNlLWxkZC13cmFwcGVyPSQoR0lfTEREX1dSQVBQRVIpCisrZWxzZQorK0xERF9XUkFQUEVSX0FSRyA9CisrZW5kaWYKKyAKKyBJTlRST1NQRUNUSU9OX1NDQU5ORVJfQVJHUyA9IFwKKyAgICAgLS12ZXJib3NlIFwKKysgICAgJChDUk9TU19XUkFQUEVSX0FSRykgXAorKyAgICAkKExERF9XUkFQUEVSX0FSRykgXAorICAgICAtSSQodG9wX3NyY2RpcikgXAorICAgICAtLWFkZC1pbmNsdWRlLXBhdGg9JChzcmNkaXIpIFwKKyAgICAgLS1hZGQtaW5jbHVkZS1wYXRoPSQodG9wX3NyY2RpcikvZ2lyIFwKK0BAIC0yNCw5ICs0OCwxNSBAQCBJTlRST1NQRUNUSU9OX1NDQU5ORVJfQVJHUyA9IFwKKyAgICAgLS1hZGQtaW5jbHVkZS1wYXRoPSQodG9wX2J1aWxkZGlyKSBcCisgICAgIC0tYWRkLWluY2x1ZGUtcGF0aD0kKHRvcF9idWlsZGRpcikvZ2lyCisgCisraWYgVVNFX0NST1NTX1dSQVBQRVIKKytJTlRST1NQRUNUSU9OX0NPTVBJTEVSID0gXAorKyAgICBlbnYgUEFUSD0iLmxpYnM6JChQQVRIKSIgXAorKyAgICAgICAgJChHSV9DUk9TU19XUkFQUEVSKSAkKHRvcF9idWlsZGRpcikvLmxpYnMvZy1pci1jb21waWxlciQoRVhFRVhUKQorK2Vsc2UKKyBJTlRST1NQRUNUSU9OX0NPTVBJTEVSID0gXAorICAgICBlbnYgUEFUSD0iLmxpYnM6JChQQVRIKSIgXAorICAgICAgICAgJCh0b3BfYnVpbGRkaXIpL2ctaXItY29tcGlsZXIkKEVYRUVYVCkKKytlbmRpZgorIAorIElOVFJPU1BFQ1RJT05fQ09NUElMRVJfQVJHUyA9IFwKKyAgICAgLS1pbmNsdWRlZGlyPSQoc3JjZGlyKSBcCitAQCAtMzUsNiArNjUsMTQgQEAgSU5UUk9TUEVDVElPTl9DT01QSUxFUl9BUkdTID0gXAorICAgICAtLWluY2x1ZGVkaXI9JCh0b3BfYnVpbGRkaXIpIFwKKyAgICAgLS1pbmNsdWRlZGlyPSQodG9wX2J1aWxkZGlyKS9naXIKKyAKKytpZiBVU0VfSE9TVF9HSQorK0lOVFJPU1BFQ1RJT05fRE9DVE9PTCA9IFwKKysgICAgZW52IFBBVEg9IiQoUEFUSCkiIFwKKysgICAgICAgIExQQVRIPS5saWJzIFwKKysgICAgICAgIFBZVEhPTlBBVEg9JCh0b3BfYnVpbGRkaXIpOiQodG9wX3NyY2RpcikgXAorKyAgICAgICAgVU5JTlNUQUxMRURfSU5UUk9TUEVDVElPTl9CVUlMRERJUj0kKHRvcF9idWlsZGRpcikgXAorKyAgICAgICAgZy1pci1kb2MtdG9vbAorK2Vsc2UKKyBJTlRST1NQRUNUSU9OX0RPQ1RPT0wgPSBcCisgICAgIGVudiBQQVRIPSIubGliczokKFBBVEgpIiBcCisgICAgICAgICBMUEFUSD0ubGlicyBcCitAQCAtNDIsNiArODAsNyBAQCBJTlRST1NQRUNUSU9OX0RPQ1RPT0wgPSBcCisgICAgICAgICBVTklOU1RBTExFRF9JTlRST1NQRUNUSU9OX1NSQ0RJUj0kKHRvcF9zcmNkaXIpIFwKKyAgICAgICAgIFVOSU5TVEFMTEVEX0lOVFJPU1BFQ1RJT05fQlVJTERESVI9JCh0b3BfYnVpbGRkaXIpIFwKKyAgICAgICAgICQodG9wX2J1aWxkZGlyKS9nLWlyLWRvYy10b29sCisrZW5kaWYKKyAKKyBJTlRST1NQRUNUSU9OX0RPQ1RPT0xfQVJHUyA9IFwKKyAgICAgLS1hZGQtaW5jbHVkZS1wYXRoPSQoc3JjZGlyKSBcCitkaWZmIC0tZ2l0IGEvY29uZmlndXJlLmFjIGIvY29uZmlndXJlLmFjCitpbmRleCA2YzkxZmE1Li4yMTM0MGE1IDEwMDY0NAorLS0tIGEvY29uZmlndXJlLmFjCisrKysgYi9jb25maWd1cmUuYWMKK0BAIC0zNjAsNiArMzYwLDQ4IEBAIGZpCisgCisgQUNfU1VCU1QoRVhUUkFfTElOS19GTEFHUykKKyAKKytBQ19BUkdfRU5BQkxFKFtob3N0LWdpXSwKKytbQVNfSEVMUF9TVFJJTkcoWy0tZW5hYmxlLWhvc3QtZ2ldLFtVc2UgZ29iamVjdCBpbnRyb3NwZWN0aW9uIHRvb2xzIGluc3RhbGxlZCBpbiB0aGUgaG9zdCBzeXN0ZW0gKHVzZWZ1bCB3aGVuIGNyb3NzLWNvbXBpbGluZyldKV0sCisrW2Nhc2UgIiR7ZW5hYmxldmFsfSIgaW4KKysgIHllcykgaG9zdF9naT10cnVlIDs7CisrICBubykgIGhvc3RfZ2k9ZmFsc2UgOzsKKysgICopIEFDX01TR19FUlJPUihbYmFkIHZhbHVlICR7ZW5hYmxldmFsfSBmb3IgLS1lbmFibGUtaG9zdC1naV0pIDs7CisrZXNhY10sW2hvc3RfZ2k9ZmFsc2VdKQorK0FNX0NPTkRJVElPTkFMKFtVU0VfSE9TVF9HSV0sIFt0ZXN0IHgkaG9zdF9naSA9IHh0cnVlXSkKKysKKytBQ19BUkdfRU5BQkxFKFtnaS1jcm9zcy13cmFwcGVyXSwKKytbQVNfSEVMUF9TVFJJTkcoWy0tZW5hYmxlLWdpLWNyb3NzLXdyYXBwZXI9cGF0aF0sW1VzZSBhIHdyYXBwZXIgdG8gcnVuIGdpY29tcGlsZXIgYW5kIGJpbmFyaWVzIHByb2R1Y2VkIGJ5IGdpc2Nhbm5lciAodXNlZnVsIHdoZW4gY3Jvc3MtY29tcGlsaW5nKV0pXSwKKytbCisrR0lfQ1JPU1NfV1JBUFBFUj0iJHtlbmFibGV2YWx9IgorK3VzZV93cmFwcGVyPXRydWUKKytdLFsKKytHSV9DUk9TU19XUkFQUEVSPSIiCisrdXNlX3dyYXBwZXI9ZmFsc2UKKytdKQorK0FDX1NVQlNUKEdJX0NST1NTX1dSQVBQRVIpCisrQU1fQ09ORElUSU9OQUwoW1VTRV9DUk9TU19XUkFQUEVSXSwgW3Rlc3QgeCR1c2Vfd3JhcHBlciA9IHh0cnVlXSkKKysKKytBQ19BUkdfRU5BQkxFKFtnaS1sZGQtd3JhcHBlcl0sCisrW0FTX0hFTFBfU1RSSU5HKFstLWVuYWJsZS1naS1sZGQtd3JhcHBlcj1wYXRoXSxbVXNlIGEgbGRkIHdyYXBwZXIgaW5zdGVhZCBvZiBzeXN0ZW0ncyBsZGQgY29tbWFuZCBpbiBnaXNjYW5uZXIgKHVzZWZ1bCB3aGVuIGNyb3NzLWNvbXBpbGluZyldKV0sCisrWworK0dJX0xERF9XUkFQUEVSPSIke2VuYWJsZXZhbH0iCisrdXNlX2xkZF93cmFwcGVyPXRydWUKKytdLFsKKytHSV9MRERfV1JBUFBFUj0iIgorK3VzZV9sZGRfd3JhcHBlcj1mYWxzZQorK10pCisrQUNfU1VCU1QoR0lfTEREX1dSQVBQRVIpCisrQU1fQ09ORElUSU9OQUwoW1VTRV9MRERfV1JBUFBFUl0sIFt0ZXN0IHgkdXNlX2xkZF93cmFwcGVyID0geHRydWVdKQorKworK0FDX0FSR19FTkFCTEUoW2ludHJvc3BlY3Rpb24tZGF0YV0sCisrW0FTX0hFTFBfU1RSSU5HKFstLWVuYWJsZS1pbnRyb3NwZWN0aW9uLWRhdGFdLFtCdWlsZCBpbnRyb3NwZWN0aW9uIGRhdGEgKC5naXIgYW5kIC50eXBlbGliIGZpbGVzKSBpbiBhZGRpdGlvbiB0byBsaWJyYXJ5IGFuZCB0b29sc10pXSwKKytbY2FzZSAiJHtlbmFibGV2YWx9IiBpbgorKyAgeWVzKSBpbnRyb3NwZWN0aW9uX2RhdGE9dHJ1ZSA7OworKyAgbm8pICBpbnRyb3NwZWN0aW9uX2RhdGE9ZmFsc2UgOzsKKysgICopIEFDX01TR19FUlJPUihbYmFkIHZhbHVlICR7ZW5hYmxldmFsfSBmb3IgLS1lbmFibGUtaW50cm9zcGVjdGlvbi1kYXRhXSkgOzsKKytlc2FjXSxbaW50cm9zcGVjdGlvbl9kYXRhPXRydWVdKQorK0FNX0NPTkRJVElPTkFMKFtCVUlMRF9JTlRST1NQRUNUSU9OX0RBVEFdLCBbdGVzdCB4JGludHJvc3BlY3Rpb25fZGF0YSA9IHh0cnVlXSkKKysKKyBBQ19DT05GSUdfRklMRVMoWworIE1ha2VmaWxlCisgdGVzdHMvTWFrZWZpbGUKK2RpZmYgLS1naXQgYS90ZXN0cy9NYWtlZmlsZS5hbSBiL3Rlc3RzL01ha2VmaWxlLmFtCitpbmRleCBiZGQwZmE3Li43NWRkM2M5IDEwMDY0NAorLS0tIGEvdGVzdHMvTWFrZWZpbGUuYW0KKysrKyBiL3Rlc3RzL01ha2VmaWxlLmFtCitAQCAtMSw2ICsxLDkgQEAKKyBpbmNsdWRlICQodG9wX3NyY2RpcikvY29tbW9uLm1rCisgCistU1VCRElSUyA9IC4gc2Nhbm5lciByZXBvc2l0b3J5IG9mZnNldHMgd2FybgorK1NVQkRJUlMgPSAuIHNjYW5uZXIgcmVwb3NpdG9yeSB3YXJuCisraWYgQlVJTERfSU5UUk9TUEVDVElPTl9EQVRBCisrU1VCRElSUyArPSBvZmZzZXRzCisrZW5kaWYKKyAKKyBFWFRSQV9ESVNUPQorIEJVSUxUX1NPVVJDRVM9CistLSAKKzIuNy4wCisKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ25vbWUvZ29iamVjdC1pbnRyb3NwZWN0aW9uL2dvYmplY3QtaW50cm9zcGVjdGlvbi8wMDAzLWdpc2Nhbm5lci1hZGQtdXNlLWJpbmFyeS13cmFwcGVyLW9wdGlvbi5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ25vbWUvZ29iamVjdC1pbnRyb3NwZWN0aW9uL2dvYmplY3QtaW50cm9zcGVjdGlvbi8wMDAzLWdpc2Nhbm5lci1hZGQtdXNlLWJpbmFyeS13cmFwcGVyLW9wdGlvbi5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mMjFlYWNhCi0tLSAvZGV2L251bGwKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1nbm9tZS9nb2JqZWN0LWludHJvc3BlY3Rpb24vZ29iamVjdC1pbnRyb3NwZWN0aW9uLzAwMDMtZ2lzY2FubmVyLWFkZC11c2UtYmluYXJ5LXdyYXBwZXItb3B0aW9uLnBhdGNoCkBAIC0wLDAgKzEsNTEgQEAKK0Zyb20gNzA0Yjg4OGQwYWJmYjAxMDY3MzUyYzQwMTU2ZjQ5ZjY1NTY5MWM3YyBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEFsZXhhbmRlciBLYW5hdmluIDxhbGV4LmthbmF2aW5AZ21haWwuY29tPgorRGF0ZTogTW9uLCAxOSBPY3QgMjAxNSAxODoyNjo0MCArMDMwMAorU3ViamVjdDogW1BBVENIIDMvNV0gZ2lzY2FubmVyOiBhZGQgLS11c2UtYmluYXJ5LXdyYXBwZXIgb3B0aW9uCisKK1dpdGggdGhpcyBvcHRpb24sIGdpc2Nhbm5lciB3aWxsIHVzZSBhIHdyYXBwZXIgZXhlY3V0YWJsZSB0byBydW4KK2JpbmFyaWVzIGl0J3MgcHJvZHVjaW5nLCBpbnN0ZWFkIG9mIHJ1bm5pbmcgdGhlbSBkaXJlY3RseS4gVGhpcworaXMgdXNlZnVsIHdoZW4gYmluYXJpZXMgYXJlIGNyb3NzLWNvbXBpbGVkIGFuZCBjYW5ub3QgYmUgcnVuIGRpcmVjdGx5LAorYnV0IHRoZXkgY2FuIGJlIHJ1biB1c2luZyBmb3IgZXhhbXBsZSBRRU1VIGVtdWxhdGlvbi4KKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nIFtyZXZpZXcgb24gb2UtY29yZSBsaXN0XQorU2lnbmVkLW9mZi1ieTogQWxleGFuZGVyIEthbmF2aW4gPGFsZXgua2FuYXZpbkBnbWFpbC5jb20+CistLS0KKyBnaXNjYW5uZXIvc2Nhbm5lcm1haW4ucHkgfCAxNCArKysrKysrKysrKysrKworIDEgZmlsZSBjaGFuZ2VkLCAxNCBpbnNlcnRpb25zKCspCisKK2RpZmYgLS1naXQgYS9naXNjYW5uZXIvc2Nhbm5lcm1haW4ucHkgYi9naXNjYW5uZXIvc2Nhbm5lcm1haW4ucHkKK2luZGV4IDYzMzQ5NmYuLmQ2ODRjZDAgMTAwNzU1CistLS0gYS9naXNjYW5uZXIvc2Nhbm5lcm1haW4ucHkKKysrKyBiL2dpc2Nhbm5lci9zY2FubmVybWFpbi5weQorQEAgLTEyNCw2ICsxMjQsOSBAQCBkZWYgX2dldF9vcHRpb25fcGFyc2VyKCk6CisgICAgIHBhcnNlci5hZGRfb3B0aW9uKCIiLCAiLS1wcm9ncmFtIiwKKyAgICAgICAgICAgICAgICAgICAgICAgYWN0aW9uPSJzdG9yZSIsIGRlc3Q9InByb2dyYW0iLCBkZWZhdWx0PU5vbmUsCisgICAgICAgICAgICAgICAgICAgICAgIGhlbHA9InByb2dyYW0gdG8gZXhlY3V0ZSIpCisrICAgIHBhcnNlci5hZGRfb3B0aW9uKCIiLCAiLS11c2UtYmluYXJ5LXdyYXBwZXIiLAorKyAgICAgICAgICAgICAgICAgICAgICBhY3Rpb249InN0b3JlIiwgZGVzdD0id3JhcHBlciIsIGRlZmF1bHQ9Tm9uZSwKKysgICAgICAgICAgICAgICAgICAgICAgaGVscD0id3JhcHBlciB0byB1c2UgZm9yIHJ1bm5pbmcgcHJvZ3JhbXMgKHVzZWZ1bCB3aGVuIGNyb3NzLWNvbXBpbGluZykiKQorICAgICBwYXJzZXIuYWRkX29wdGlvbigiIiwgIi0tcHJvZ3JhbS1hcmciLAorICAgICAgICAgICAgICAgICAgICAgICBhY3Rpb249ImFwcGVuZCIsIGRlc3Q9InByb2dyYW1fYXJncyIsIGRlZmF1bHQ9W10sCisgICAgICAgICAgICAgICAgICAgICAgIGhlbHA9ImV4dHJhIGFyZ3VtZW50cyB0byBwcm9ncmFtIikKK0BAIC00MTksNiArNDIyLDE3IEBAIGRlZiBjcmVhdGVfYmluYXJ5KHRyYW5zZm9ybWVyLCBvcHRpb25zLCBhcmdzKToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2R1bXBfcGFyc2VyLmdldF9lcnJvcl9xdWFya19mdW5jdGlvbnMoKSkKKyAKKyAgICAgc2hsaWJzID0gcmVzb2x2ZV9zaGxpYnMob3B0aW9ucywgYmluYXJ5LCBvcHRpb25zLmxpYnJhcmllcykKKysgICAgaWYgb3B0aW9ucy53cmFwcGVyOgorKyAgICAgICAgIyBUaGUgd3JhcHBlciBuZWVkcyB0aGUgYmluYXJ5IGl0c2VsZiwgbm90IHRoZSBsaWJ0b29sIHdyYXBwZXIgc2NyaXB0LAorKyAgICAgICAgIyBzbyB3ZSBjaGVjayBpZiBsaWJ0b29sIGhhcyBzbmVha2VkIHRoZSBiaW5hcnkgaW50byAubGlicyBzdWJkaXJlY3RvcnkKKysgICAgICAgICMgYW5kIGFkanVzdCB0aGUgcGF0aCBhY2NvcmRpbmdseQorKyAgICAgICAgaW1wb3J0IG9zLnBhdGgKKysgICAgICAgIGRpcl9uYW1lLCBiaW5hcnlfbmFtZSAgPSBvcy5wYXRoLnNwbGl0KGJpbmFyeS5hcmdzWzBdKQorKyAgICAgICAgbGlidG9vbF9iaW5hcnkgPSBvcy5wYXRoLmpvaW4oZGlyX25hbWUsICcubGlicycsIGJpbmFyeV9uYW1lKQorKyAgICAgICAgaWYgb3MucGF0aC5leGlzdHMobGlidG9vbF9iaW5hcnkpOgorKyAgICAgICAgICAgIGJpbmFyeS5hcmdzWzBdID0gbGlidG9vbF9iaW5hcnkKKysJIyBUaGVuIHByZXBlbmQgdGhlIHdyYXBwZXIgdG8gdGhlIGNvbW1hbmQgbGluZSB0byBleGVjdXRlCisrICAgICAgICBiaW5hcnkuYXJncyA9IFtvcHRpb25zLndyYXBwZXJdICsgYmluYXJ5LmFyZ3MKKyAgICAgZ2R1bXBfcGFyc2VyLnNldF9pbnRyb3NwZWN0aW9uX2JpbmFyeShiaW5hcnkpCisgICAgIGdkdW1wX3BhcnNlci5wYXJzZSgpCisgICAgIHJldHVybiBzaGxpYnMKKy0tIAorMi43LjAKKwpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1nbm9tZS9nb2JqZWN0LWludHJvc3BlY3Rpb24vZ29iamVjdC1pbnRyb3NwZWN0aW9uLzAwMDQtZ2lzY2FubmVyLWFkZC1hLXVzZS1sZGQtd3JhcHBlci1vcHRpb24ucGF0Y2ggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdub21lL2dvYmplY3QtaW50cm9zcGVjdGlvbi9nb2JqZWN0LWludHJvc3BlY3Rpb24vMDAwNC1naXNjYW5uZXItYWRkLWEtdXNlLWxkZC13cmFwcGVyLW9wdGlvbi5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hZmI3MWU3Ci0tLSAvZGV2L251bGwKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1nbm9tZS9nb2JqZWN0LWludHJvc3BlY3Rpb24vZ29iamVjdC1pbnRyb3NwZWN0aW9uLzAwMDQtZ2lzY2FubmVyLWFkZC1hLXVzZS1sZGQtd3JhcHBlci1vcHRpb24ucGF0Y2gKQEAgLTAsMCArMSw0NyBAQAorRnJvbSBkNGFkNTdmZDRhMzJjNGYwZDJmMDUyMmEzMDkwZWY5NDA3NDY0MzFiIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogQWxleGFuZGVyIEthbmF2aW4gPGFsZXgua2FuYXZpbkBnbWFpbC5jb20+CitEYXRlOiBGcmksIDMwIE9jdCAyMDE1IDE2OjI4OjQ2ICswMjAwCitTdWJqZWN0OiBbUEFUQ0ggNC81XSBnaXNjYW5uZXI6IGFkZCBhIC0tdXNlLWxkZC13cmFwcGVyIG9wdGlvbgorCitUaGlzIGlzIHVzZWZ1bCBpbiBjcm9zcy1jb21waWxlIGVudmlyb25tZW50cyB3aGVyZSBzeXN0ZW0ncyBsZGQKK2NvbW1hbmQgZG9lcyBub3Qgd29yayBvbiBiaW5hcmllcyBidWlsdCBmb3IgYSBkaWZmZXJlbnQgYXJjaGl0ZWN0dXJlCisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZyBbcmV2aWV3IGluIG9lLWNvcmVdCitTaWduZWQtb2ZmLWJ5OiBBbGV4YW5kZXIgS2FuYXZpbiA8YWxleC5rYW5hdmluQGdtYWlsLmNvbT4KKy0tLQorIGdpc2Nhbm5lci9zY2FubmVybWFpbi5weSB8IDMgKysrCisgZ2lzY2FubmVyL3NobGlicy5weSAgICAgIHwgNCArKystCisgMiBmaWxlcyBjaGFuZ2VkLCA2IGluc2VydGlvbnMoKyksIDEgZGVsZXRpb24oLSkKKworZGlmZiAtLWdpdCBhL2dpc2Nhbm5lci9zY2FubmVybWFpbi5weSBiL2dpc2Nhbm5lci9zY2FubmVybWFpbi5weQoraW5kZXggZDY4NGNkMC4uMWIzYjM2OSAxMDA3NTUKKy0tLSBhL2dpc2Nhbm5lci9zY2FubmVybWFpbi5weQorKysrIGIvZ2lzY2FubmVyL3NjYW5uZXJtYWluLnB5CitAQCAtMTI3LDYgKzEyNyw5IEBAIGRlZiBfZ2V0X29wdGlvbl9wYXJzZXIoKToKKyAgICAgcGFyc2VyLmFkZF9vcHRpb24oIiIsICItLXVzZS1iaW5hcnktd3JhcHBlciIsCisgICAgICAgICAgICAgICAgICAgICAgIGFjdGlvbj0ic3RvcmUiLCBkZXN0PSJ3cmFwcGVyIiwgZGVmYXVsdD1Ob25lLAorICAgICAgICAgICAgICAgICAgICAgICBoZWxwPSJ3cmFwcGVyIHRvIHVzZSBmb3IgcnVubmluZyBwcm9ncmFtcyAodXNlZnVsIHdoZW4gY3Jvc3MtY29tcGlsaW5nKSIpCisrICAgIHBhcnNlci5hZGRfb3B0aW9uKCIiLCAiLS11c2UtbGRkLXdyYXBwZXIiLAorKyAgICAgICAgICAgICAgICAgICAgICBhY3Rpb249InN0b3JlIiwgZGVzdD0ibGRkX3dyYXBwZXIiLCBkZWZhdWx0PU5vbmUsCisrICAgICAgICAgICAgICAgICAgICAgIGhlbHA9IndyYXBwZXIgdG8gdXNlIGluc3RlYWQgb2YgbGRkICh1c2VmdWwgd2hlbiBjcm9zcy1jb21waWxpbmcpIikKKyAgICAgcGFyc2VyLmFkZF9vcHRpb24oIiIsICItLXByb2dyYW0tYXJnIiwKKyAgICAgICAgICAgICAgICAgICAgICAgYWN0aW9uPSJhcHBlbmQiLCBkZXN0PSJwcm9ncmFtX2FyZ3MiLCBkZWZhdWx0PVtdLAorICAgICAgICAgICAgICAgICAgICAgICBoZWxwPSJleHRyYSBhcmd1bWVudHMgdG8gcHJvZ3JhbSIpCitkaWZmIC0tZ2l0IGEvZ2lzY2FubmVyL3NobGlicy5weSBiL2dpc2Nhbm5lci9zaGxpYnMucHkKK2luZGV4IGM5M2QyMGMuLmM1YjU5NDIgMTAwNjQ0CistLS0gYS9naXNjYW5uZXIvc2hsaWJzLnB5CisrKysgYi9naXNjYW5uZXIvc2hsaWJzLnB5CitAQCAtMTA1LDcgKzEwNSw5IEBAIGRlZiBfcmVzb2x2ZV9ub25fbGlidG9vbChvcHRpb25zLCBiaW5hcnksIGxpYnJhcmllcyk6CisgICAgICAgICAgICAgYXJncy5leHRlbmQobGlidG9vbCkKKyAgICAgICAgICAgICBhcmdzLmFwcGVuZCgnLS1tb2RlPWV4ZWN1dGUnKQorICAgICAgICAgcGxhdGZvcm1fc3lzdGVtID0gcGxhdGZvcm0uc3lzdGVtKCkKKy0gICAgICAgIGlmIHBsYXRmb3JtX3N5c3RlbSA9PSAnRGFyd2luJzoKKysgICAgICAgIGlmIG9wdGlvbnMubGRkX3dyYXBwZXI6CisrICAgICAgICAgICAgYXJncy5leHRlbmQoW29wdGlvbnMubGRkX3dyYXBwZXIsIGJpbmFyeS5hcmdzWzBdXSkKKysgICAgICAgIGVsaWYgcGxhdGZvcm1fc3lzdGVtID09ICdEYXJ3aW4nOgorICAgICAgICAgICAgIGFyZ3MuZXh0ZW5kKFsnb3Rvb2wnLCAnLUwnLCBiaW5hcnkuYXJnc1swXV0pCisgICAgICAgICBlbHNlOgorICAgICAgICAgICAgIGFyZ3MuZXh0ZW5kKFsnbGRkJywgYmluYXJ5LmFyZ3NbMF1dKQorLS0gCisyLjcuMAorCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdub21lL2dvYmplY3QtaW50cm9zcGVjdGlvbi9nb2JqZWN0LWludHJvc3BlY3Rpb24vMDAwNS1QcmVmaXgtcGtnLWNvbmZpZy1wYXRocy13aXRoLVBLR19DT05GSUdfU1lTUk9PVF9ESVItLnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1nbm9tZS9nb2JqZWN0LWludHJvc3BlY3Rpb24vZ29iamVjdC1pbnRyb3NwZWN0aW9uLzAwMDUtUHJlZml4LXBrZy1jb25maWctcGF0aHMtd2l0aC1QS0dfQ09ORklHX1NZU1JPT1RfRElSLS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40N2ExOGVjCi0tLSAvZGV2L251bGwKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1nbm9tZS9nb2JqZWN0LWludHJvc3BlY3Rpb24vZ29iamVjdC1pbnRyb3NwZWN0aW9uLzAwMDUtUHJlZml4LXBrZy1jb25maWctcGF0aHMtd2l0aC1QS0dfQ09ORklHX1NZU1JPT1RfRElSLS5wYXRjaApAQCAtMCwwICsxLDk2IEBACitGcm9tIGUwOGIzNjc3ZGQwNGQ2ZWM0MDdiYThmNzRmNjAxYjJkNTEzMTBlZmYgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBBbGV4YW5kZXIgS2FuYXZpbiA8YWxleC5rYW5hdmluQGdtYWlsLmNvbT4KK0RhdGU6IFRodSwgOCBPY3QgMjAxNSAxODozMDozNSArMDMwMAorU3ViamVjdDogW1BBVENIIDUvNV0gUHJlZml4IHBrZy1jb25maWcgcGF0aHMgd2l0aCBQS0dfQ09ORklHX1NZU1JPT1RfRElSCisgZW52aXJvbm1lbnQgdmFyaWFibGUKKworVGhpcyBlbnZpcm9ubWVudCB2YXJpYWJsZSBzZXRzIHRoZSBsb2NhdGlvbiBvZiBzeXNyb290IGRpcmVjdG9yeSBpbiBjcm9zcy1jb21waWxhdGlvbgorZW52aXJvbm1lbnRzOyBpZiB0aGUgdmFyaWFibGUgaXMgbm90IHNldCwgdGhlIHByZWZpeCB3aWxsIGJlIGVtcHR5LgorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcgW3JldmlldyBvbiBvZS1jb3JlIGxpc3RdCitTaWduZWQtb2ZmLWJ5OiBBbGV4YW5kZXIgS2FuYXZpbiA8YWxleC5rYW5hdmluQGdtYWlsLmNvbT4KKy0tLQorIE1ha2VmaWxlLWdpci5hbSAgICAgfCAxOCArKysrKysrKystLS0tLS0tLS0KKyBtNC9pbnRyb3NwZWN0aW9uLm00IHwgIDggKysrKy0tLS0KKyAyIGZpbGVzIGNoYW5nZWQsIDEzIGluc2VydGlvbnMoKyksIDEzIGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvTWFrZWZpbGUtZ2lyLmFtIGIvTWFrZWZpbGUtZ2lyLmFtCitpbmRleCBhMDkyNjBhLi5iYTZlODllIDEwMDY0NAorLS0tIGEvTWFrZWZpbGUtZ2lyLmFtCisrKysgYi9NYWtlZmlsZS1naXIuYW0KK0BAIC01NSw4ICs1NSw4IEBAIGVsc2UKKyBlbmRpZgorIAorICMgZ2xpYgorLUdMSUJfSU5DTFVERURJUj0kKHNoZWxsICIke1BLR19DT05GSUd9IiAtLXZhcmlhYmxlPWluY2x1ZGVkaXIgZ2xpYi0yLjApL2dsaWItMi4wCistR0xJQl9MSUJESVI9JChzaGVsbCAiJHtQS0dfQ09ORklHfSIgLS12YXJpYWJsZT1saWJkaXIgZ2xpYi0yLjApCisrR0xJQl9JTkNMVURFRElSPSQoUEtHX0NPTkZJR19TWVNST09UX0RJUikkKHNoZWxsICIke1BLR19DT05GSUd9IiAtLXZhcmlhYmxlPWluY2x1ZGVkaXIgZ2xpYi0yLjApL2dsaWItMi4wCisrR0xJQl9MSUJESVI9JChQS0dfQ09ORklHX1NZU1JPT1RfRElSKSQoc2hlbGwgIiR7UEtHX0NPTkZJR30iIC0tdmFyaWFibGU9bGliZGlyIGdsaWItMi4wKQorIAorIEdMSUJfTElCUkFSWT1nbGliLTIuMAorIAorQEAgLTkyLDggKzkyLDggQEAgR0xpYi0yLjAuZ2lyOiBnLWlyLXNjYW5uZXIgZy1pci1jb21waWxlciQoRVhFRVhUKQorIGdpci9EQnVzR0xpYi0xLjAudHlwZWxpYjogR09iamVjdC0yLjAuZ2lyCisgCisgIyBnb2JqZWN0CistR09CSkVDVF9JTkNMVURFRElSPSQoc2hlbGwgIiR7UEtHX0NPTkZJR30iIC0tdmFyaWFibGU9aW5jbHVkZWRpciBnb2JqZWN0LTIuMCkvZ2xpYi0yLjAKKy1HT0JKRUNUX0xJQkRJUj0kKHNoZWxsICIke1BLR19DT05GSUd9IiAtLXZhcmlhYmxlPWxpYmRpciBnb2JqZWN0LTIuMCkKKytHT0JKRUNUX0lOQ0xVREVESVI9JChQS0dfQ09ORklHX1NZU1JPT1RfRElSKSQoc2hlbGwgIiR7UEtHX0NPTkZJR30iIC0tdmFyaWFibGU9aW5jbHVkZWRpciBnb2JqZWN0LTIuMCkvZ2xpYi0yLjAKKytHT0JKRUNUX0xJQkRJUj0kKFBLR19DT05GSUdfU1lTUk9PVF9ESVIpJChzaGVsbCAiJHtQS0dfQ09ORklHfSIgLS12YXJpYWJsZT1saWJkaXIgZ29iamVjdC0yLjApCisgCisgR09CSkVDVF9MSUJSQVJZPWdvYmplY3QtMi4wCisgCitAQCAtMTIwLDggKzEyMCw4IEBAIEdPYmplY3RfMl8wX2dpcl9GSUxFUyA9IFwKKyBCVUlMVF9HSVJTT1VSQ0VTICs9IEdPYmplY3QtMi4wLmdpcgorIAorICMgZ21vZHVsZQorLUdNT0RVTEVfSU5DTFVERURJUj0kKHNoZWxsICIke1BLR19DT05GSUd9IiAtLXZhcmlhYmxlPWluY2x1ZGVkaXIgZ21vZHVsZS0yLjApL2dsaWItMi4wCistR01PRFVMRV9MSUJESVI9JChzaGVsbCAiJHtQS0dfQ09ORklHfSIgLS12YXJpYWJsZT1saWJkaXIgZ21vZHVsZS0yLjApCisrR01PRFVMRV9JTkNMVURFRElSPSQoUEtHX0NPTkZJR19TWVNST09UX0RJUikkKHNoZWxsICIke1BLR19DT05GSUd9IiAtLXZhcmlhYmxlPWluY2x1ZGVkaXIgZ21vZHVsZS0yLjApL2dsaWItMi4wCisrR01PRFVMRV9MSUJESVI9JChQS0dfQ09ORklHX1NZU1JPT1RfRElSKSQoc2hlbGwgIiR7UEtHX0NPTkZJR30iIC0tdmFyaWFibGU9bGliZGlyIGdtb2R1bGUtMi4wKQorIAorIEdNT0RVTEVfTElCUkFSWT1nbW9kdWxlLTIuMAorIAorQEAgLTE0NiwxMyArMTQ2LDEzIEBAIEdNb2R1bGVfMl8wX2dpcl9GSUxFUyA9ICQoR0xJQl9JTkNMVURFRElSKS9nbW9kdWxlLmggXAorIEJVSUxUX0dJUlNPVVJDRVMgKz0gR01vZHVsZS0yLjAuZ2lyCisgCisgIyBnaW8KKy1HSU9fSU5DTFVERURJUj0kKHNoZWxsICIke1BLR19DT05GSUd9IiAtLXZhcmlhYmxlPWluY2x1ZGVkaXIgZ2lvLTIuMCkvZ2xpYi0yLjAKKy1HSU9fTElCRElSPSQoc2hlbGwgIiR7UEtHX0NPTkZJR30iIC0tdmFyaWFibGU9bGliZGlyIGdpby0yLjApCisrR0lPX0lOQ0xVREVESVI9JChQS0dfQ09ORklHX1NZU1JPT1RfRElSKSQoc2hlbGwgIiR7UEtHX0NPTkZJR30iIC0tdmFyaWFibGU9aW5jbHVkZWRpciBnaW8tMi4wKS9nbGliLTIuMAorK0dJT19MSUJESVI9JChQS0dfQ09ORklHX1NZU1JPT1RfRElSKSQoc2hlbGwgIiR7UEtHX0NPTkZJR30iIC0tdmFyaWFibGU9bGliZGlyIGdpby0yLjApCisgCisgR0lPX0xJQlJBUlk9Z2lvLTIuMAorIAorIGlmIEhBVkVfR0lPX1VOSVgKKy1HSU9fVU5JWF9JTkNMVURFRElSID0gJChzaGVsbCAiJHtQS0dfQ09ORklHfSIgLS12YXJpYWJsZT1pbmNsdWRlZGlyIGdpby11bml4LTIuMCkvZ2lvLXVuaXgtMi4wCisrR0lPX1VOSVhfSU5DTFVERURJUiA9ICQoUEtHX0NPTkZJR19TWVNST09UX0RJUikkKHNoZWxsICIke1BLR19DT05GSUd9IiAtLXZhcmlhYmxlPWluY2x1ZGVkaXIgZ2lvLXVuaXgtMi4wKS9naW8tdW5peC0yLjAKKyBHSU9fVU5JWF9IRFJTID0gJChHSU9fVU5JWF9JTkNMVURFRElSKS9naW8vKi5oCisgR0lPX1VOSVhfUEFDS0FHRVMgPSBnaW8tdW5peC0yLjAKKyBlbHNlCitkaWZmIC0tZ2l0IGEvbTQvaW50cm9zcGVjdGlvbi5tNCBiL200L2ludHJvc3BlY3Rpb24ubTQKK2luZGV4IGQ4OWMzZDkuLmI1NjIyNjYgMTAwNjQ0CistLS0gYS9tNC9pbnRyb3NwZWN0aW9uLm00CisrKysgYi9tNC9pbnRyb3NwZWN0aW9uLm00CitAQCAtNTYsMTQgKzU2LDE0IEBAIG00X2RlZmluZShbX0dPQkpFQ1RfSU5UUk9TUEVDVElPTl9DSEVDS19JTlRFUk5BTF0sCisgICAgIElOVFJPU1BFQ1RJT05fR0lSRElSPQorICAgICBJTlRST1NQRUNUSU9OX1RZUEVMSUJESVI9CisgICAgIGlmIHRlc3QgIngkZm91bmRfaW50cm9zcGVjdGlvbiIgPSAieHllcyI7IHRoZW4KKy0gICAgICAgSU5UUk9TUEVDVElPTl9TQ0FOTkVSPWAkUEtHX0NPTkZJRyAtLXZhcmlhYmxlPWdfaXJfc2Nhbm5lciBnb2JqZWN0LWludHJvc3BlY3Rpb24tMS4wYAorLSAgICAgICBJTlRST1NQRUNUSU9OX0NPTVBJTEVSPWAkUEtHX0NPTkZJRyAtLXZhcmlhYmxlPWdfaXJfY29tcGlsZXIgZ29iamVjdC1pbnRyb3NwZWN0aW9uLTEuMGAKKy0gICAgICAgSU5UUk9TUEVDVElPTl9HRU5FUkFURT1gJFBLR19DT05GSUcgLS12YXJpYWJsZT1nX2lyX2dlbmVyYXRlIGdvYmplY3QtaW50cm9zcGVjdGlvbi0xLjBgCisrICAgICAgIElOVFJPU1BFQ1RJT05fU0NBTk5FUj0kUEtHX0NPTkZJR19TWVNST09UX0RJUmAkUEtHX0NPTkZJRyAtLXZhcmlhYmxlPWdfaXJfc2Nhbm5lciBnb2JqZWN0LWludHJvc3BlY3Rpb24tMS4wYAorKyAgICAgICBJTlRST1NQRUNUSU9OX0NPTVBJTEVSPSRQS0dfQ09ORklHX1NZU1JPT1RfRElSYCRQS0dfQ09ORklHIC0tdmFyaWFibGU9Z19pcl9jb21waWxlciBnb2JqZWN0LWludHJvc3BlY3Rpb24tMS4wYAorKyAgICAgICBJTlRST1NQRUNUSU9OX0dFTkVSQVRFPSRQS0dfQ09ORklHX1NZU1JPT1RfRElSYCRQS0dfQ09ORklHIC0tdmFyaWFibGU9Z19pcl9nZW5lcmF0ZSBnb2JqZWN0LWludHJvc3BlY3Rpb24tMS4wYAorICAgICAgICBJTlRST1NQRUNUSU9OX0dJUkRJUj1gJFBLR19DT05GSUcgLS12YXJpYWJsZT1naXJkaXIgZ29iamVjdC1pbnRyb3NwZWN0aW9uLTEuMGAKKyAgICAgICAgSU5UUk9TUEVDVElPTl9UWVBFTElCRElSPSIkKCRQS0dfQ09ORklHIC0tdmFyaWFibGU9dHlwZWxpYmRpciBnb2JqZWN0LWludHJvc3BlY3Rpb24tMS4wKSIKKyAgICAgICAgSU5UUk9TUEVDVElPTl9DRkxBR1M9YCRQS0dfQ09ORklHIC0tY2ZsYWdzIGdvYmplY3QtaW50cm9zcGVjdGlvbi0xLjBgCisgICAgICAgIElOVFJPU1BFQ1RJT05fTElCUz1gJFBLR19DT05GSUcgLS1saWJzIGdvYmplY3QtaW50cm9zcGVjdGlvbi0xLjBgCistICAgICAgIElOVFJPU1BFQ1RJT05fTUFLRUZJTEU9YCRQS0dfQ09ORklHIC0tdmFyaWFibGU9ZGF0YWRpciBnb2JqZWN0LWludHJvc3BlY3Rpb24tMS4wYC9nb2JqZWN0LWludHJvc3BlY3Rpb24tMS4wL01ha2VmaWxlLmludHJvc3BlY3Rpb24KKysgICAgICAgSU5UUk9TUEVDVElPTl9NQUtFRklMRT0kUEtHX0NPTkZJR19TWVNST09UX0RJUmAkUEtHX0NPTkZJRyAtLXZhcmlhYmxlPWRhdGFkaXIgZ29iamVjdC1pbnRyb3NwZWN0aW9uLTEuMGAvZ29iamVjdC1pbnRyb3NwZWN0aW9uLTEuMC9NYWtlZmlsZS5pbnRyb3NwZWN0aW9uCisgICAgIGZpCisgICAgIEFDX1NVQlNUKElOVFJPU1BFQ1RJT05fU0NBTk5FUikKKyAgICAgQUNfU1VCU1QoSU5UUk9TUEVDVElPTl9DT01QSUxFUikKKy0tIAorMi43LjAKKwpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1nbm9tZS9nb2JqZWN0LWludHJvc3BlY3Rpb24vZ29iamVjdC1pbnRyb3NwZWN0aW9uXzEuNDYuMC5iYiBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ25vbWUvZ29iamVjdC1pbnRyb3NwZWN0aW9uL2dvYmplY3QtaW50cm9zcGVjdGlvbl8xLjQ2LjAuYmIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDliMTYxNDcuLjAwMDAwMDAKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1nbm9tZS9nb2JqZWN0LWludHJvc3BlY3Rpb24vZ29iamVjdC1pbnRyb3NwZWN0aW9uXzEuNDYuMC5iYgorKysgL2Rldi9udWxsCkBAIC0xLDE2MyArMCwwIEBACi1IT01FUEFHRSA9ICJodHRwOi8vZ25vbWUub3JnIgotQlVHVFJBQ0tFUiA9ICJodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy8iCi1TRUNUSU9OID0gImxpYnMiCi1MSUNFTlNFID0gIkxHUEx2MisgJiBHUEx2MisiCi1MSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT05MGQ1Nzc1MzVhMzg5OGUxYWU1ZGJmMGFlMzUwOWE4YyBcCi0gICAgICAgICAgICAgICAgICAgIGZpbGU6Ly90b29scy9jb21waWxlci5jO2VuZGxpbmU9MjA7bWQ1PWZjNTAwN2ZjMjAwMjI3MjBlNmMwYjBjZGRlNDFmYWJkIFwKLSAgICAgICAgICAgICAgICAgICAgZmlsZTovL2dpc2Nhbm5lci9zb3VyY2VzY2FubmVyLmM7ZW5kbGluZT0yMjttZDU9MTk0ZDZlMGMxZDAwNjYyZjMyZDAzMGNlNDRkZThkMzkgXAotICAgICAgICAgICAgICAgICAgICBmaWxlOi8vZ2lyZXBvc2l0b3J5L2dpcmVnaXN0ZXJlZHR5cGVpbmZvLmM7ZW5kbGluZT0yMTttZDU9NjYxODQ3NjExYWU2OTc5NDY1NDE1ZjMxYTc1OWJhMjciCi0KLVNSQ19VUkkgPSAiJHtHTk9NRV9NSVJST1J9LyR7QlBOfS8xLjQ2LyR7QlBOfS0ke1BWfS50YXIueHogXAotICAgICAgICAgICBmaWxlOi8vMDAwMS1QcmVmaXgtcGtnLWNvbmZpZy1wYXRocy13aXRoLVBLR19DT05GSUdfU1lTUk9PVF9ESVItLnBhdGNoIFwKLSAgICAgICAgICAgZmlsZTovLzAwMDEtZ2lzY2FubmVyLWFkZC11c2UtYmluYXJ5LXdyYXBwZXItb3B0aW9uLnBhdGNoIFwKLSAgICAgICAgICAgZmlsZTovLzAwMDEtZ2lzY2FubmVyLWFkZC1hLXVzZS1sZGQtd3JhcHBlci1vcHRpb24ucGF0Y2ggXAotICAgICAgICAgICBmaWxlOi8vMDAwMS1jb25maWd1cmUuYWMtYWRkLWhvc3QtZ2ktZ2ktY3Jvc3Mtd3JhcHBlci1hbmQtZ2ktbGRkLnBhdGNoIFwKLSAgICAgICAgICAgIgotU1JDX1VSSVttZDVzdW1dID0gImFkYjQwYTMxYzdjODBiNjViMGY0YzhmZDcxYjQ5M2RjIgotU1JDX1VSSVtzaGEyNTZzdW1dID0gIjY2NThiZDNjMmI4ODEzZWIzZTI1MTFlZTE1MzIzOGQwOWFjZTlkMzA5ZTQ1NzRhZjI3NDQzZDg3NDIzZTQyMzMiCi0KLWluaGVyaXQgYXV0b3Rvb2xzIHBrZ2NvbmZpZyBndGstZG9jIHB5dGhvbm5hdGl2ZSBxZW11IGdvYmplY3QtaW50cm9zcGVjdGlvbi1kYXRhCi1CQkNMQVNTRVhURU5EID0gIm5hdGl2ZSIKLQotIyBuZWNlc3NhcnkgdG8gbGV0IHRoZSBjYWxsIGZvciBweXRob24tY29uZmlnIGZyb20gY29uZmlndXJlLmFjIHN1Y2NlZWQKLWV4cG9ydCBCVUlMRF9TWVMKLWV4cG9ydCBIT1NUX1NZUwotZXhwb3J0IFNUQUdJTkdfSU5DRElSCi1leHBvcnQgU1RBR0lOR19MSUJESVIKLQotIyBuZWVkZWQgZm9yIHdyaXRpbmcgb3V0IHRoZSBxZW11IHdyYXBwZXIgc2NyaXB0Ci1leHBvcnQgU1RBR0lOR19ESVJfSE9TVAotZXhwb3J0IEIKLQotREVQRU5EU19hcHBlbmQgPSAiIGxpYmZmaSB6bGliIGdsaWItMi4wIHB5dGhvbiIKLQotIyB0YXJnZXQgYnVpbGQgbmVlZHMgcWVtdSB0byBydW4gdGVtcG9yYXJ5IGludHJvc3BlY3Rpb24gYmluYXJpZXMgY3JlYXRlZAotIyBvbiB0aGUgZmx5IGJ5IGctaXItc2Nhbm5lciBhbmQgYSBuYXRpdmUgdmVyc2lvbiBvZiBpdHNlbGYgdG8gcnVuCi0jIG5hdGl2ZSB2ZXJzaW9ucyBvZiBpdHMgb3duIHRvb2xzIGR1cmluZyBidWlsZC4KLSMgQWxzbyBwcmVsaW5rLXJ0bGQgaXMgdXNlZCB0byBmaW5kIG91dCBsaWJyYXJ5IGRlcGVuZGVuY2llcyBvZiBpbnRyb3NwZWN0aW9uIGJpbmFyaWVzCi0jIChzdGFuZGFyZCBsZGQgZG9lc24ndCB3b3JrIHdoZW4gY3Jvc3MtY29tcGlsaW5nKS4KLURFUEVORFNfY2xhc3MtdGFyZ2V0X2FwcGVuZCA9ICIgZ29iamVjdC1pbnRyb3NwZWN0aW9uLW5hdGl2ZSBxZW11LW5hdGl2ZSBwcmVsaW5rLW5hdGl2ZSIKLQotU1NUQVRFX1NDQU5fRklMRVMgKz0gImctaXItc2Nhbm5lci1xZW11d3JhcHBlciBnLWlyLXNjYW5uZXItd3JhcHBlciBnLWlyLWNvbXBpbGVyLXdyYXBwZXIgZy1pci1zY2FubmVyLWxkZHdyYXBwZXIgR2lvLTIuMC5naXIiCi0KLWRvX2NvbmZpZ3VyZV9wcmVwZW5kX2NsYXNzLW5hdGl2ZSgpIHsKLSAgICAgICAgIyBUd2VhayB0aGUgbmF0aXZlIHB5dGhvbiBzY3JpcHRzIHNvIHRoYXQgdGhleSBkb24ndCByZWZlciB0byB0aGUKLSAgICAgICAgIyBmdWxsIHBhdGggb2YgbmF0aXZlIHB5dGhvbiBiaW5hcnkgKHRoZSBzb2x1dGlvbiBpcyB0YWtlbiBmcm9tIGdsaWItMi4wIHJlY2lwZSkKLSAgICAgICAgIyBUaGlzIHJlbW92ZXMgdGhlIHJpc2sgb2YgZXhjZWVkaW5nIExpbnV4IGtlcm5lbCdzIHNoZWJhbmcgbGluZSBsaW1pdCAoMTI4IGJ5dGVzKQotICAgICAgICBzZWQgLWkgLWUgJzFzLCMhLiosIyEke1VTUkJJTlBBVEh9L2VudiBuYXRpdmVweXRob24sJyAke1N9L3Rvb2xzL2ctaXItdG9vbC10ZW1wbGF0ZS5pbgotfQotCi1kb19jb25maWd1cmVfcHJlcGVuZF9jbGFzcy10YXJnZXQoKSB7Ci0gICAgICAgICMgV3JpdGUgb3V0IGEgcWVtdSB3cmFwcGVyIHRoYXQgd2lsbCBiZSBnaXZlbiB0byBnaS1zY2FubmVyIHNvIHRoYXQgaXQKLSAgICAgICAgIyBjYW4gcnVuIHRhcmdldCBoZWxwZXIgYmluYXJpZXMgdGhyb3VnaCB0aGF0LgotICAgICAgICBxZW11X2JpbmFyeT0iJHtAcWVtdV93cmFwcGVyX2NtZGxpbmUoZCwgJyRTVEFHSU5HX0RJUl9IT1NUJywgWydcJEdJUl9FWFRSQV9MSUJTX1BBVEgnLCcubGlicycsJyRTVEFHSU5HX0RJUl9IT1NULyR7bGliZGlyfScsJyRTVEFHSU5HX0RJUl9IT1NULyR7YmFzZV9saWJkaXJ9J10pfSIKLSAgICAgICAgY2F0ID4gJHtCfS9nLWlyLXNjYW5uZXItcWVtdXdyYXBwZXIgPDwgRU9GCi0jIS9iaW4vc2gKLSMgVXNlIGEgbW9kdWxlcyBkaXJlY3Rvcnkgd2hpY2ggZG9lc24ndCBleGlzdCBzbyB3ZSBkb24ndCBsb2FkIHJhbmRvbSB0aGluZ3MKLSMgd2hpY2ggbWF5IHRoZW4gZ2V0IGRlbGV0ZWQgKG9yIHRoZWlyIGRlcGVuZGVuY2llcykgYW5kIHBvdGVudGlhbGx5IHNlZ2ZhdWx0Ci1leHBvcnQgR0lPX01PRFVMRV9ESVI9JHtTVEFHSU5HX0xJQkRJUn0vZ2lvL21vZHVsZXMtZHVtbXkKLQotJHFlbXVfYmluYXJ5ICJcJEAiCi1pZiBbIFwkPyAtbmUgMCBdOyB0aGVuCi0gICAgZWNobyAiSWYgdGhlIGFib3ZlIGVycm9yIG1lc3NhZ2UgaXMgYWJvdXQgbWlzc2luZyAuc28gbGlicmFyaWVzLCB0aGVuIHNldHRpbmcgdXAgR0lSX0VYVFJBX0xJQlNfUEFUSCBpbiB0aGUgcmVjaXBlIHNob3VsZCBoZWxwLiIKLSAgICBlY2hvICIodHlwaWNhbGx5IGxpa2UgdGhpczogR0lSX0VYVFJBX0xJQlNfUEFUSD1cIiQiIntCfS9zb21ldGhpbmcvLmxpYnNcIiApIgotICAgIGV4aXQgMQotZmkKLUVPRgotICAgICAgICBjaG1vZCAreCAke0J9L2ctaXItc2Nhbm5lci1xZW11d3JhcHBlcgotCi0gICAgICAgICMgV3JpdGUgb3V0IGEgd3JhcHBlciBmb3IgZy1pci1zY2FubmVyIGl0c2VsZiwgd2hpY2ggd2lsbCBiZSB1c2VkIHdoZW4gYnVpbGRpbmcgaW50cm9zcGVjdGlvbiBmaWxlcwotICAgICAgICAjIGZvciBnbGliLWJhc2VkIHBhY2thZ2VzLiBUaGlzIHdyYXBwZXIgY2FsbHMgdGhlIG5hdGl2ZSB2ZXJzaW9uIG9mIHRoZSBzY2FubmVyLCBhbmQgdGVsbHMgaXQgdG8gdXNlCi0gICAgICAgICMgYSBxZW11IHdyYXBwZXIgZm9yIHJ1bm5pbmcgdHJhbnNpZW50IHRhcmdldCBiaW5hcmllcyBwcm9kdWNlZCBieSB0aGUgc2Nhbm5lciwgYW5kIGFuIGluY2x1ZGUgZGlyZWN0b3J5IAotICAgICAgICAjIGZyb20gdGhlIHRhcmdldCBzeXNyb290LgotICAgICAgICBjYXQgPiAke0J9L2ctaXItc2Nhbm5lci13cmFwcGVyIDw8IEVPRgotIyEvYmluL3NoCi0jIFRoaXMgcHJldmVudHMgZy1pci1zY2FubmVyIGZyb20gd3JpdGluZyBjYWNoZSBkYXRhIHRvICRIT01FCi1leHBvcnQgR0lfU0NBTk5FUl9ESVNBQkxFX0NBQ0hFPTEKLQotZy1pci1zY2FubmVyIC0tdXNlLWJpbmFyeS13cmFwcGVyPSR7U1RBR0lOR19CSU5ESVJ9L2ctaXItc2Nhbm5lci1xZW11d3JhcHBlciAtLXVzZS1sZGQtd3JhcHBlcj0ke1NUQUdJTkdfQklORElSfS9nLWlyLXNjYW5uZXItbGRkd3JhcHBlciAtLWFkZC1pbmNsdWRlLXBhdGg9JHtTVEFHSU5HX0RBVEFESVJ9L2dpci0xLjAgIlwkQCIKLUVPRgotICAgICAgICBjaG1vZCAreCAke0J9L2ctaXItc2Nhbm5lci13cmFwcGVyCi0KLSAgICAgICAgIyBXcml0ZSBvdXQgYSB3cmFwcGVyIGZvciBnLWlyLWNvbXBpbGVyLCB3aGljaCBydW5zIHRoZSB0YXJnZXQgdmVyc2lvbiBvZiBpdCB0aHJvdWdoIHFlbXUuCi0gICAgICAgICMgZy1pci1jb21waWxlciB3cml0ZXMgb3V0IHRoZSByYXcgY29udGVudCBvZiBhIEMgc3RydWN0IHRvIGRpc2ssIGFuZCB0aGVyZWZvcmUgaXMgYXJjaGl0ZWN0dXJlIGRlcGVuZGVudC4KLSAgICAgICAgY2F0ID4gJHtCfS9nLWlyLWNvbXBpbGVyLXdyYXBwZXIgPDwgRU9GCi0jIS9iaW4vc2gKLSR7U1RBR0lOR19CSU5ESVJ9L2ctaXItc2Nhbm5lci1xZW11d3JhcHBlciAke1NUQUdJTkdfQklORElSfS9nLWlyLWNvbXBpbGVyICJcJEAiCi1FT0YKLSAgICAgICAgY2htb2QgK3ggJHtCfS9nLWlyLWNvbXBpbGVyLXdyYXBwZXIKLQotICAgICAgICAjIFdyaXRlIG91dCBhIHdyYXBwZXIgdG8gdXNlIGluc3RlYWQgb2YgbGRkLCB3aGljaCBkb2VzIG5vdCB3b3JrIHdoZW4gYSBiaW5hcnkgaXMgYnVpbHQKLSAgICAgICAgIyBmb3IgYSBkaWZmZXJlbnQgYXJjaGl0ZWN0dXJlCi0gICAgICAgIGNhdCA+ICR7Qn0vZy1pci1zY2FubmVyLWxkZHdyYXBwZXIgPDwgRU9GCi0jIS9iaW4vc2gKLXByZWxpbmstcnRsZCAtLXJvb3Q9JFNUQUdJTkdfRElSX0hPU1QgIlwkQCIKLUVPRgotICAgICAgICBjaG1vZCAreCAke0J9L2ctaXItc2Nhbm5lci1sZGR3cmFwcGVyCi0KLSAgICAgICAgIyBBbHNvIHR3ZWFrIHRoZSB0YXJnZXQgcHl0aG9uIHNjcmlwdHMgc28gdGhhdCB0aGV5IGRvbid0IHJlZmVyIHRvIHRoZQotICAgICAgICAjIG5hdGl2ZSB2ZXJzaW9uIG9mIHB5dGhvbiBiaW5hcnkgKHRoZSBzb2x1dGlvbiBpcyB0YWtlbiBmcm9tIGdsaWItMi4wIHJlY2lwZSkKLSAgICAgICAgc2VkIC1pIC1lICcxcywjIS4qLCMhJHtVU1JCSU5QQVRIfS9lbnYgcHl0aG9uLCcgJHtTfS90b29scy9nLWlyLXRvb2wtdGVtcGxhdGUuaW4KLX0KLQotIyBDb25maWd1cmUgdGFyZ2V0IGJ1aWxkIHRvIHVzZSBuYXRpdmUgdG9vbHMgb2YgaXRzZWxmIGFuZCB0byB1c2UgYSBxZW11IHdyYXBwZXIKLSMgYW5kIG9wdGlvbmFsbHkgdG8gZ2VuZXJhdGUgaW50cm9zcGVjdGlvbiBkYXRhCi1FWFRSQV9PRUNPTkZfY2xhc3MtdGFyZ2V0ICs9ICItLWVuYWJsZS1ob3N0LWdpIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tZW5hYmxlLWdpLWNyb3NzLXdyYXBwZXI9JHtCfS9nLWlyLXNjYW5uZXItcWVtdXdyYXBwZXIgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS1lbmFibGUtZ2ktbGRkLXdyYXBwZXI9JHtCfS9nLWlyLXNjYW5uZXItbGRkd3JhcHBlciBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAke0BiYi51dGlscy5jb250YWlucygnR0lfREFUQV9FTkFCTEVEJywgJ1RydWUnLCAnLS1lbmFibGUtaW50cm9zcGVjdGlvbi1kYXRhJywgJy0tZGlzYWJsZS1pbnRyb3NwZWN0aW9uLWRhdGEnLCBkKX0gXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiCi0KLQotZG9fY29tcGlsZV9wcmVwZW5kX2NsYXNzLXRhcmdldCgpIHsKLSAgICAgICAgIyBUaGlzIHByZXZlbnRzIGctaXItc2Nhbm5lciBmcm9tIHdyaXRpbmcgY2FjaGUgZGF0YSB0byAkSE9NRQotICAgICAgICBleHBvcnQgR0lfU0NBTk5FUl9ESVNBQkxFX0NBQ0hFPTEKLQotICAgICAgICAjIE5lZWRlZCB0byBydW4gZy1pciB1bml0IHRlc3RzLCB3aGljaCB3b24ndCBiZSBhYmxlIHRvIGZpbmQgdGhlIGJ1aWx0IGxpYnJhcmllcyBvdGhlcndpc2UKLSAgICAgICAgZXhwb3J0IEdJUl9FWFRSQV9MSUJTX1BBVEg9JEIvLmxpYnMKLX0KLQotIyBPdXIgd3JhcHBlcnMgbmVlZCB0byBiZSBhdmFpbGFibGUgc3lzdGVtLXdpZGUsIGJlY2F1c2UgdGhleSB3aWxsIGJlIHVzZWQgCi0jIHRvIGJ1aWxkIGludHJvc3BlY3Rpb24gZmlsZXMgZm9yIGFsbCBvdGhlciBnb2JqZWN0LWJhc2VkIHBhY2thZ2VzCi1kb19pbnN0YWxsX2FwcGVuZF9jbGFzcy10YXJnZXQoKSB7Ci0gICAgICAgIGluc3RhbGwgLWQgJHtEfSR7YmluZGlyfS8KLSAgICAgICAgaW5zdGFsbCAke0J9L2ctaXItc2Nhbm5lci1xZW11d3JhcHBlciAke0R9JHtiaW5kaXJ9LwotICAgICAgICBpbnN0YWxsICR7Qn0vZy1pci1zY2FubmVyLXdyYXBwZXIgJHtEfSR7YmluZGlyfS8KLSAgICAgICAgaW5zdGFsbCAke0J9L2ctaXItY29tcGlsZXItd3JhcHBlciAke0R9JHtiaW5kaXJ9LwotICAgICAgICBpbnN0YWxsICR7Qn0vZy1pci1zY2FubmVyLWxkZHdyYXBwZXIgJHtEfSR7YmluZGlyfS8KLX0KLQotIyAudHlwZWxpYiBmaWxlcyBhcmUgbmVlZGVkIGF0IHJ1bnRpbWUgYW5kIHNvIHRoZXkgZ28gdG8gdGhlIG1haW4gcGFja2FnZQotRklMRVNfJHtQTn1fYXBwZW5kID0gIiAke2xpYmRpcn0vZ2lyZXBvc2l0b3J5LSovKi50eXBlbGliIgotCi0jIC5naXIgZmlsZXMgZ28gdG8gZGV2IHBhY2thZ2UsIGFzIHRoZXkncmUgbmVlZGVkIGZvciBkZXZlbG9waW5nIChidXQgbm90IGZvciBydW5uaW5nKQotIyB0aGluZ3MgdGhhdCBkZXBlbmRzIG9uIGludHJvc3BlY3Rpb24uCi1GSUxFU18ke1BOfS1kZXZfYXBwZW5kID0gIiAke2RhdGFkaXJ9L2dpci0qLyouZ2lyIgotCi0jIFRoZXNlIGFyZSB1c2VkIGJ5IGdvYmplY3QtYmFzZWQgcGFja2FnZXMKLSMgdG8gZ2VuZXJhdGUgdHJhbnNpZW50IGludHJvc3BlY3Rpb24gYmluYXJpZXMKLUZJTEVTXyR7UE59LWRldl9hcHBlbmQgPSAiICR7ZGF0YWRpcn0vZ29iamVjdC1pbnRyb3NwZWN0aW9uLTEuMC9nZHVtcC5jIFwKLSAgICAgICAgICAgICAgICR7ZGF0YWRpcn0vZ29iamVjdC1pbnRyb3NwZWN0aW9uLTEuMC9NYWtlZmlsZS5pbnRyb3NwZWN0aW9uIgotCi0jIFRoZXNlIGFyZSB1c2VkIGJ5IGRlcGVuZGVudCBwYWNrYWdlcyAoZS5nLiBweWdvYmplY3QpIHRvIGJ1aWxkIHRoZWlyCi0jIHRlc3RzdWl0ZXMuCi1GSUxFU18ke1BOfS1kZXZfYXBwZW5kID0gIiAke2RhdGFkaXJ9L2dvYmplY3QtaW50cm9zcGVjdGlvbi0xLjAvdGVzdHMvKi5jIFwKLSAgICAgICAgICAgICAgICAgICAke2RhdGFkaXJ9L2dvYmplY3QtaW50cm9zcGVjdGlvbi0xLjAvdGVzdHMvKi5oIgotCi1GSUxFU18ke1BOfS1kYmcgKz0gIiR7bGliZGlyfS9nb2JqZWN0LWludHJvc3BlY3Rpb24vZ2lzY2FubmVyLy5kZWJ1Zy8iCi1GSUxFU18ke1BOfS1zdGF0aWNkZXYgKz0gIiR7bGliZGlyfS9nb2JqZWN0LWludHJvc3BlY3Rpb24vZ2lzY2FubmVyLyouYSIKLQotIyB3ZSBuZWVkIHRhcmdldCB2ZXJzaW9ucyBvZiBpbnRyb3NwZWN0aW9uIHRvb2xzIGluIHN5c3Jvb3Qgc28gdGhhdCB0aGV5IGNhbiBiZSBydW4gdmlhIHFlbXUKLSMgd2hlbiBidWlsZGluZyBpbnRyb3NwZWN0aW9uIGZpbGVzIGluIG90aGVyIHBhY2thZ2VzCi1TWVNST09UX1BSRVBST0NFU1NfRlVOQ1NfYXBwZW5kX2NsYXNzLXRhcmdldCArPSAiZ2lfYmluYXJpZXNfc3lzcm9vdF9wcmVwcm9jZXNzIgotCi1naV9iaW5hcmllc19zeXNyb290X3ByZXByb2Nlc3MoKSB7Ci0gICAgICAgIHN5c3Jvb3Rfc3RhZ2VfZGlyICR7RH0ke2JpbmRpcn0gJHtTWVNST09UX0RFU1RESVJ9JHtiaW5kaXJ9Ci0KLSAgICAgICAgIyBBbHNvLCB0d2VhayB0aGUgYmluYXJ5IG5hbWVzIGluIGludHJvc3BlY3Rpb24gcGtnY29uZmlnIGZpbGUsIHNvIHRoYXQgaXQgcGlja3MgdXAgb3VyIAotICAgICAgICAjIHdyYXBwZXJzIHdoaWNoIGRvIHRoZSBjcm9zcy1jb21waWxlIGFuZCBxZW11IG1hZ2ljLgotICAgICAgICBzZWQgLWkgXAotICAgICAgICAgICAtZSAic3xnX2lyX3NjYW5uZXI9Lip8Z19pcl9zY2FubmVyPSR7YmluZGlyfS9nLWlyLXNjYW5uZXItd3JhcHBlcnwiIFwKLSAgICAgICAgICAgLWUgInN8Z19pcl9jb21waWxlcj0uKnxnX2lyX2NvbXBpbGVyPSR7YmluZGlyfS9nLWlyLWNvbXBpbGVyLXdyYXBwZXJ8IiBcCi0gICAgICAgICAgICR7U1lTUk9PVF9ERVNURElSfSR7bGliZGlyfS9wa2djb25maWcvZ29iamVjdC1pbnRyb3NwZWN0aW9uLTEuMC5wYwotfQpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1nbm9tZS9nb2JqZWN0LWludHJvc3BlY3Rpb24vZ29iamVjdC1pbnRyb3NwZWN0aW9uXzEuNDguMC5iYiBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ25vbWUvZ29iamVjdC1pbnRyb3NwZWN0aW9uL2dvYmplY3QtaW50cm9zcGVjdGlvbl8xLjQ4LjAuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWJhYTQ4NQotLS0gL2Rldi9udWxsCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ25vbWUvZ29iamVjdC1pbnRyb3NwZWN0aW9uL2dvYmplY3QtaW50cm9zcGVjdGlvbl8xLjQ4LjAuYmIKQEAgLTAsMCArMSwxNzMgQEAKK1NVTU1BUlkgPSAiTWlkZGxld2FyZSBsYXllciBiZXR3ZWVuIEdPYmplY3QtdXNpbmcgQyBsaWJyYXJpZXMgYW5kIGxhbmd1YWdlIGJpbmRpbmdzIgorSE9NRVBBR0UgPSAiaHR0cHM6Ly93aWtpLmdub21lLm9yZy9hY3Rpb24vc2hvdy9Qcm9qZWN0cy9HT2JqZWN0SW50cm9zcGVjdGlvbiIKK0JVR1RSQUNLRVIgPSAiaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvIgorU0VDVElPTiA9ICJsaWJzIgorTElDRU5TRSA9ICJMR1BMdjIrICYgR1BMdjIrIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9OTBkNTc3NTM1YTM4OThlMWFlNWRiZjBhZTM1MDlhOGMgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vdG9vbHMvY29tcGlsZXIuYztlbmRsaW5lPTIwO21kNT1mYzUwMDdmYzIwMDIyNzIwZTZjMGIwY2RkZTQxZmFiZCBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9naXNjYW5uZXIvc291cmNlc2Nhbm5lci5jO2VuZGxpbmU9MjI7bWQ1PTE5NGQ2ZTBjMWQwMDY2MmYzMmQwMzBjZTQ0ZGU4ZDM5IFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL2dpcmVwb3NpdG9yeS9naXJlZ2lzdGVyZWR0eXBlaW5mby5jO2VuZGxpbmU9MjE7bWQ1PTY2MTg0NzYxMWFlNjk3OTQ2NTQxNWYzMWE3NTliYTI3IgorCitTUkNfVVJJID0gIiR7R05PTUVfTUlSUk9SfS8ke0JQTn0vMS40OC8ke0JQTn0tJHtQVn0udGFyLnh6IFwKKyAgICAgICAgICAgZmlsZTovLzAwMDEtUmV2ZXJ0LWFuLWluY29tcGxldGUtdXBzdHJlYW0tYXR0ZW1wdC1hdC1jcm9zcy1jb21waS5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly8wMDAyLWNvbmZpZ3VyZS5hYy1hZGQtaG9zdC1naS1naS1jcm9zcy13cmFwcGVyLWdpLWxkZC13cmEucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vMDAwMy1naXNjYW5uZXItYWRkLXVzZS1iaW5hcnktd3JhcHBlci1vcHRpb24ucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vMDAwNC1naXNjYW5uZXItYWRkLWEtdXNlLWxkZC13cmFwcGVyLW9wdGlvbi5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly8wMDA1LVByZWZpeC1wa2ctY29uZmlnLXBhdGhzLXdpdGgtUEtHX0NPTkZJR19TWVNST09UX0RJUi0ucGF0Y2ggXAorICAgICAgICAgICAiCitTUkNfVVJJW21kNXN1bV0gPSAiMDEzMDFmYTkwMTk2NjdkNDhlOTI3MzUzZTA4YmMyMTgiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiZmEyNzVhYWNjZGJmYzkxZWMwYmM5YTZmZDA1NjIwNTFhY2RiYTczMWU3ZDU4NGI2NGEyNzdmZWM2MGU3NTg3NyIKKworaW5oZXJpdCBhdXRvdG9vbHMgcGtnY29uZmlnIGd0ay1kb2MgcHl0aG9uM25hdGl2ZSBxZW11IGdvYmplY3QtaW50cm9zcGVjdGlvbi1kYXRhIHVwc3RyZWFtLXZlcnNpb24taXMtZXZlbgorQkJDTEFTU0VYVEVORCA9ICJuYXRpdmUiCisKKyMgbmVlZGVkIGZvciB3cml0aW5nIG91dCB0aGUgcWVtdSB3cmFwcGVyIHNjcmlwdAorZXhwb3J0IFNUQUdJTkdfRElSX0hPU1QKK2V4cG9ydCBCCisKK0RFUEVORFNfYXBwZW5kID0gIiBsaWJmZmkgemxpYiBnbGliLTIuMCBweXRob24zIGZsZXgtbmF0aXZlIGJpc29uLW5hdGl2ZSIKKworIyB0YXJnZXQgYnVpbGQgbmVlZHMgcWVtdSB0byBydW4gdGVtcG9yYXJ5IGludHJvc3BlY3Rpb24gYmluYXJpZXMgY3JlYXRlZAorIyBvbiB0aGUgZmx5IGJ5IGctaXItc2Nhbm5lciBhbmQgYSBuYXRpdmUgdmVyc2lvbiBvZiBpdHNlbGYgdG8gcnVuCisjIG5hdGl2ZSB2ZXJzaW9ucyBvZiBpdHMgb3duIHRvb2xzIGR1cmluZyBidWlsZC4KKyMgQWxzbyBwcmVsaW5rLXJ0bGQgaXMgdXNlZCB0byBmaW5kIG91dCBsaWJyYXJ5IGRlcGVuZGVuY2llcyBvZiBpbnRyb3NwZWN0aW9uIGJpbmFyaWVzCisjIChzdGFuZGFyZCBsZGQgZG9lc24ndCB3b3JrIHdoZW4gY3Jvc3MtY29tcGlsaW5nKS4KK0RFUEVORFNfY2xhc3MtdGFyZ2V0X2FwcGVuZCA9ICIgZ29iamVjdC1pbnRyb3NwZWN0aW9uLW5hdGl2ZSBxZW11LW5hdGl2ZSBwcmVsaW5rLW5hdGl2ZSIKKworU1NUQVRFX1NDQU5fRklMRVMgKz0gImctaXItc2Nhbm5lci1xZW11d3JhcHBlciBnLWlyLXNjYW5uZXItd3JhcHBlciBnLWlyLWNvbXBpbGVyLXdyYXBwZXIgZy1pci1zY2FubmVyLWxkZHdyYXBwZXIgR2lvLTIuMC5naXIiCisKK2RvX2NvbmZpZ3VyZV9wcmVwZW5kX2NsYXNzLW5hdGl2ZSgpIHsKKyAgICAgICAgIyBUd2VhayB0aGUgbmF0aXZlIHB5dGhvbiBzY3JpcHRzIHNvIHRoYXQgdGhleSBkb24ndCByZWZlciB0byB0aGUKKyAgICAgICAgIyBmdWxsIHBhdGggb2YgbmF0aXZlIHB5dGhvbiBiaW5hcnkgKHRoZSBzb2x1dGlvbiBpcyB0YWtlbiBmcm9tIGdsaWItMi4wIHJlY2lwZSkKKyAgICAgICAgIyBUaGlzIHJlbW92ZXMgdGhlIHJpc2sgb2YgZXhjZWVkaW5nIExpbnV4IGtlcm5lbCdzIHNoZWJhbmcgbGluZSBsaW1pdCAoMTI4IGJ5dGVzKQorICAgICAgICBzZWQgLWkgLWUgJzFzLCMhLiosIyEke1VTUkJJTlBBVEh9L2VudiBweXRob24zLCcgJHtTfS90b29scy9nLWlyLXRvb2wtdGVtcGxhdGUuaW4KK30KKworZG9fY29uZmlndXJlX3ByZXBlbmRfY2xhc3MtdGFyZ2V0KCkgeworICAgICAgICAjIFdyaXRlIG91dCBhIHFlbXUgd3JhcHBlciB0aGF0IHdpbGwgYmUgZ2l2ZW4gdG8gZ2ktc2Nhbm5lciBzbyB0aGF0IGl0CisgICAgICAgICMgY2FuIHJ1biB0YXJnZXQgaGVscGVyIGJpbmFyaWVzIHRocm91Z2ggdGhhdC4KKyAgICAgICAgcWVtdV9iaW5hcnk9IiR7QHFlbXVfd3JhcHBlcl9jbWRsaW5lKGQsICckU1RBR0lOR19ESVJfSE9TVCcsIFsnXCRHSVJfRVhUUkFfTElCU19QQVRIJywnLmxpYnMnLCckU1RBR0lOR19ESVJfSE9TVC8ke2xpYmRpcn0nLCckU1RBR0lOR19ESVJfSE9TVC8ke2Jhc2VfbGliZGlyfSddKX0iCisgICAgICAgIGNhdCA+ICR7Qn0vZy1pci1zY2FubmVyLXFlbXV3cmFwcGVyIDw8IEVPRgorIyEvYmluL3NoCisjIFVzZSBhIG1vZHVsZXMgZGlyZWN0b3J5IHdoaWNoIGRvZXNuJ3QgZXhpc3Qgc28gd2UgZG9uJ3QgbG9hZCByYW5kb20gdGhpbmdzCisjIHdoaWNoIG1heSB0aGVuIGdldCBkZWxldGVkIChvciB0aGVpciBkZXBlbmRlbmNpZXMpIGFuZCBwb3RlbnRpYWxseSBzZWdmYXVsdAorZXhwb3J0IEdJT19NT0RVTEVfRElSPSR7U1RBR0lOR19MSUJESVJ9L2dpby9tb2R1bGVzLWR1bW15CisKKyRxZW11X2JpbmFyeSAiXCRAIgoraWYgWyBcJD8gLW5lIDAgXTsgdGhlbgorICAgIGVjaG8gIklmIHRoZSBhYm92ZSBlcnJvciBtZXNzYWdlIGlzIGFib3V0IG1pc3NpbmcgLnNvIGxpYnJhcmllcywgdGhlbiBzZXR0aW5nIHVwIEdJUl9FWFRSQV9MSUJTX1BBVEggaW4gdGhlIHJlY2lwZSBzaG91bGQgaGVscC4iCisgICAgZWNobyAiKHR5cGljYWxseSBsaWtlIHRoaXM6IEdJUl9FWFRSQV9MSUJTX1BBVEg9XCIkIiJ7Qn0vc29tZXRoaW5nLy5saWJzXCIgKSIKKyAgICBleGl0IDEKK2ZpCitFT0YKKyAgICAgICAgY2htb2QgK3ggJHtCfS9nLWlyLXNjYW5uZXItcWVtdXdyYXBwZXIKKworICAgICAgICAjIFdyaXRlIG91dCBhIHdyYXBwZXIgZm9yIGctaXItc2Nhbm5lciBpdHNlbGYsIHdoaWNoIHdpbGwgYmUgdXNlZCB3aGVuIGJ1aWxkaW5nIGludHJvc3BlY3Rpb24gZmlsZXMKKyAgICAgICAgIyBmb3IgZ2xpYi1iYXNlZCBwYWNrYWdlcy4gVGhpcyB3cmFwcGVyIGNhbGxzIHRoZSBuYXRpdmUgdmVyc2lvbiBvZiB0aGUgc2Nhbm5lciwgYW5kIHRlbGxzIGl0IHRvIHVzZQorICAgICAgICAjIGEgcWVtdSB3cmFwcGVyIGZvciBydW5uaW5nIHRyYW5zaWVudCB0YXJnZXQgYmluYXJpZXMgcHJvZHVjZWQgYnkgdGhlIHNjYW5uZXIsIGFuZCBhbiBpbmNsdWRlIGRpcmVjdG9yeSAKKyAgICAgICAgIyBmcm9tIHRoZSB0YXJnZXQgc3lzcm9vdC4KKyAgICAgICAgY2F0ID4gJHtCfS9nLWlyLXNjYW5uZXItd3JhcHBlciA8PCBFT0YKKyMhL2Jpbi9zaAorIyBUaGlzIHByZXZlbnRzIGctaXItc2Nhbm5lciBmcm9tIHdyaXRpbmcgY2FjaGUgZGF0YSB0byAkSE9NRQorZXhwb3J0IEdJX1NDQU5ORVJfRElTQUJMRV9DQUNIRT0xCisKK2ctaXItc2Nhbm5lciAtLXVzZS1iaW5hcnktd3JhcHBlcj0ke1NUQUdJTkdfQklORElSfS9nLWlyLXNjYW5uZXItcWVtdXdyYXBwZXIgLS11c2UtbGRkLXdyYXBwZXI9JHtTVEFHSU5HX0JJTkRJUn0vZy1pci1zY2FubmVyLWxkZHdyYXBwZXIgLS1hZGQtaW5jbHVkZS1wYXRoPSR7U1RBR0lOR19EQVRBRElSfS9naXItMS4wICJcJEAiCitFT0YKKyAgICAgICAgY2htb2QgK3ggJHtCfS9nLWlyLXNjYW5uZXItd3JhcHBlcgorCisgICAgICAgICMgV3JpdGUgb3V0IGEgd3JhcHBlciBmb3IgZy1pci1jb21waWxlciwgd2hpY2ggcnVucyB0aGUgdGFyZ2V0IHZlcnNpb24gb2YgaXQgdGhyb3VnaCBxZW11LgorICAgICAgICAjIGctaXItY29tcGlsZXIgd3JpdGVzIG91dCB0aGUgcmF3IGNvbnRlbnQgb2YgYSBDIHN0cnVjdCB0byBkaXNrLCBhbmQgdGhlcmVmb3JlIGlzIGFyY2hpdGVjdHVyZSBkZXBlbmRlbnQuCisgICAgICAgIGNhdCA+ICR7Qn0vZy1pci1jb21waWxlci13cmFwcGVyIDw8IEVPRgorIyEvYmluL3NoCiske1NUQUdJTkdfQklORElSfS9nLWlyLXNjYW5uZXItcWVtdXdyYXBwZXIgJHtTVEFHSU5HX0JJTkRJUn0vZy1pci1jb21waWxlciAiXCRAIgorRU9GCisgICAgICAgIGNobW9kICt4ICR7Qn0vZy1pci1jb21waWxlci13cmFwcGVyCisKKyAgICAgICAgIyBXcml0ZSBvdXQgYSB3cmFwcGVyIHRvIHVzZSBpbnN0ZWFkIG9mIGxkZCwgd2hpY2ggZG9lcyBub3Qgd29yayB3aGVuIGEgYmluYXJ5IGlzIGJ1aWx0CisgICAgICAgICMgZm9yIGEgZGlmZmVyZW50IGFyY2hpdGVjdHVyZQorICAgICAgICBjYXQgPiAke0J9L2ctaXItc2Nhbm5lci1sZGR3cmFwcGVyIDw8IEVPRgorIyEvYmluL3NoCitwcmVsaW5rLXJ0bGQgLS1yb290PSRTVEFHSU5HX0RJUl9IT1NUICJcJEAiCitFT0YKKyAgICAgICAgY2htb2QgK3ggJHtCfS9nLWlyLXNjYW5uZXItbGRkd3JhcHBlcgorCisgICAgICAgICMgQWxzbyB0d2VhayB0aGUgdGFyZ2V0IHB5dGhvbiBzY3JpcHRzIHNvIHRoYXQgdGhleSBkb24ndCByZWZlciB0byB0aGUKKyAgICAgICAgIyBuYXRpdmUgdmVyc2lvbiBvZiBweXRob24gYmluYXJ5ICh0aGUgc29sdXRpb24gaXMgdGFrZW4gZnJvbSBnbGliLTIuMCByZWNpcGUpCisgICAgICAgIHNlZCAtaSAtZSAnMXMsIyEuKiwjISR7VVNSQklOUEFUSH0vZW52IHB5dGhvbjMsJyAke1N9L3Rvb2xzL2ctaXItdG9vbC10ZW1wbGF0ZS5pbgorfQorCisjIENvbmZpZ3VyZSB0YXJnZXQgYnVpbGQgdG8gdXNlIG5hdGl2ZSB0b29scyBvZiBpdHNlbGYgYW5kIHRvIHVzZSBhIHFlbXUgd3JhcHBlcgorIyBhbmQgb3B0aW9uYWxseSB0byBnZW5lcmF0ZSBpbnRyb3NwZWN0aW9uIGRhdGEKK0VYVFJBX09FQ09ORl9jbGFzcy10YXJnZXQgKz0gIi0tZW5hYmxlLWhvc3QtZ2kgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS1lbmFibGUtZ2ktY3Jvc3Mtd3JhcHBlcj0ke0J9L2ctaXItc2Nhbm5lci1xZW11d3JhcHBlciBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLWVuYWJsZS1naS1sZGQtd3JhcHBlcj0ke0J9L2ctaXItc2Nhbm5lci1sZGR3cmFwcGVyIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICR7QGJiLnV0aWxzLmNvbnRhaW5zKCdHSV9EQVRBX0VOQUJMRUQnLCAnVHJ1ZScsICctLWVuYWJsZS1pbnRyb3NwZWN0aW9uLWRhdGEnLCAnLS1kaXNhYmxlLWludHJvc3BlY3Rpb24tZGF0YScsIGQpfSBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIKKworUEFDS0FHRUNPTkZJRyA/PSAiIgorUEFDS0FHRUNPTkZJR1tkb2N0b29sXSA9ICItLWVuYWJsZS1kb2N0b29sLC0tZGlzYWJsZS1kb2N0b29sLHB5dGhvbjMtbWFrbywiCisKK2RvX2NvbXBpbGVfcHJlcGVuZCgpIHsKKyAgICAgICAgIyBUaGlzIHByZXZlbnRzIGctaXItc2Nhbm5lciBmcm9tIHdyaXRpbmcgY2FjaGUgZGF0YSB0byAkSE9NRQorICAgICAgICBleHBvcnQgR0lfU0NBTk5FUl9ESVNBQkxFX0NBQ0hFPTEKKworICAgICAgICAjIE5lZWRlZCB0byBydW4gZy1pciB1bml0IHRlc3RzLCB3aGljaCB3b24ndCBiZSBhYmxlIHRvIGZpbmQgdGhlIGJ1aWx0IGxpYnJhcmllcyBvdGhlcndpc2UKKyAgICAgICAgZXhwb3J0IEdJUl9FWFRSQV9MSUJTX1BBVEg9JEIvLmxpYnMKK30KKworIyBPdXIgd3JhcHBlcnMgbmVlZCB0byBiZSBhdmFpbGFibGUgc3lzdGVtLXdpZGUsIGJlY2F1c2UgdGhleSB3aWxsIGJlIHVzZWQgCisjIHRvIGJ1aWxkIGludHJvc3BlY3Rpb24gZmlsZXMgZm9yIGFsbCBvdGhlciBnb2JqZWN0LWJhc2VkIHBhY2thZ2VzCitkb19pbnN0YWxsX2FwcGVuZF9jbGFzcy10YXJnZXQoKSB7CisgICAgICAgIGluc3RhbGwgLWQgJHtEfSR7YmluZGlyfS8KKyAgICAgICAgaW5zdGFsbCAke0J9L2ctaXItc2Nhbm5lci1xZW11d3JhcHBlciAke0R9JHtiaW5kaXJ9LworICAgICAgICBpbnN0YWxsICR7Qn0vZy1pci1zY2FubmVyLXdyYXBwZXIgJHtEfSR7YmluZGlyfS8KKyAgICAgICAgaW5zdGFsbCAke0J9L2ctaXItY29tcGlsZXItd3JhcHBlciAke0R9JHtiaW5kaXJ9LworICAgICAgICBpbnN0YWxsICR7Qn0vZy1pci1zY2FubmVyLWxkZHdyYXBwZXIgJHtEfSR7YmluZGlyfS8KK30KKworIyAudHlwZWxpYiBmaWxlcyBhcmUgbmVlZGVkIGF0IHJ1bnRpbWUgYW5kIHNvIHRoZXkgZ28gdG8gdGhlIG1haW4gcGFja2FnZQorRklMRVNfJHtQTn1fYXBwZW5kID0gIiAke2xpYmRpcn0vZ2lyZXBvc2l0b3J5LSovKi50eXBlbGliIgorCisjIC5naXIgZmlsZXMgZ28gdG8gZGV2IHBhY2thZ2UsIGFzIHRoZXkncmUgbmVlZGVkIGZvciBkZXZlbG9waW5nIChidXQgbm90IGZvciBydW5uaW5nKQorIyB0aGluZ3MgdGhhdCBkZXBlbmRzIG9uIGludHJvc3BlY3Rpb24uCitGSUxFU18ke1BOfS1kZXZfYXBwZW5kID0gIiAke2RhdGFkaXJ9L2dpci0qLyouZ2lyIgorCisjIFRoZXNlIGFyZSB1c2VkIGJ5IGdvYmplY3QtYmFzZWQgcGFja2FnZXMKKyMgdG8gZ2VuZXJhdGUgdHJhbnNpZW50IGludHJvc3BlY3Rpb24gYmluYXJpZXMKK0ZJTEVTXyR7UE59LWRldl9hcHBlbmQgPSAiICR7ZGF0YWRpcn0vZ29iamVjdC1pbnRyb3NwZWN0aW9uLTEuMC9nZHVtcC5jIFwKKyAgICAgICAgICAgICAgICR7ZGF0YWRpcn0vZ29iamVjdC1pbnRyb3NwZWN0aW9uLTEuMC9NYWtlZmlsZS5pbnRyb3NwZWN0aW9uIgorCisjIFRoZXNlIGFyZSB1c2VkIGJ5IGRlcGVuZGVudCBwYWNrYWdlcyAoZS5nLiBweWdvYmplY3QpIHRvIGJ1aWxkIHRoZWlyCisjIHRlc3RzdWl0ZXMuCitGSUxFU18ke1BOfS1kZXZfYXBwZW5kID0gIiAke2RhdGFkaXJ9L2dvYmplY3QtaW50cm9zcGVjdGlvbi0xLjAvdGVzdHMvKi5jIFwKKyAgICAgICAgICAgICAgICAgICAke2RhdGFkaXJ9L2dvYmplY3QtaW50cm9zcGVjdGlvbi0xLjAvdGVzdHMvKi5oIgorCitGSUxFU18ke1BOfS1kYmcgKz0gIiR7bGliZGlyfS9nb2JqZWN0LWludHJvc3BlY3Rpb24vZ2lzY2FubmVyLy5kZWJ1Zy8iCitGSUxFU18ke1BOfS1zdGF0aWNkZXYgKz0gIiR7bGliZGlyfS9nb2JqZWN0LWludHJvc3BlY3Rpb24vZ2lzY2FubmVyLyouYSIKKworIyB3ZSBuZWVkIHRhcmdldCB2ZXJzaW9ucyBvZiBpbnRyb3NwZWN0aW9uIHRvb2xzIGluIHN5c3Jvb3Qgc28gdGhhdCB0aGV5IGNhbiBiZSBydW4gdmlhIHFlbXUKKyMgd2hlbiBidWlsZGluZyBpbnRyb3NwZWN0aW9uIGZpbGVzIGluIG90aGVyIHBhY2thZ2VzCitTWVNST09UX0RJUlNfYXBwZW5kX2NsYXNzLXRhcmdldCA9ICIgJHtiaW5kaXJ9IgorCitTWVNST09UX1BSRVBST0NFU1NfRlVOQ1NfYXBwZW5kX2NsYXNzLXRhcmdldCA9ICIgZ2lfYmluYXJpZXNfc3lzcm9vdF9wcmVwcm9jZXNzIgorZ2lfYmluYXJpZXNfc3lzcm9vdF9wcmVwcm9jZXNzKCkgeworICAgICAgICAjIFR3ZWFrIHRoZSBiaW5hcnkgbmFtZXMgaW4gdGhlIGludHJvc3BlY3Rpb24gcGtnY29uZmlnIGZpbGUsIHNvIHRoYXQgaXQKKyAgICAgICAgIyBwaWNrcyB1cCBvdXIgd3JhcHBlcnMgd2hpY2ggZG8gdGhlIGNyb3NzLWNvbXBpbGUgYW5kIHFlbXUgbWFnaWMuCisgICAgICAgIHNlZCAtaSBcCisgICAgICAgICAgIC1lICJzfGdfaXJfc2Nhbm5lcj0uKnxnX2lyX3NjYW5uZXI9JHtiaW5kaXJ9L2ctaXItc2Nhbm5lci13cmFwcGVyfCIgXAorICAgICAgICAgICAtZSAic3xnX2lyX2NvbXBpbGVyPS4qfGdfaXJfY29tcGlsZXI9JHtiaW5kaXJ9L2ctaXItY29tcGlsZXItd3JhcHBlcnwiIFwKKyAgICAgICAgICAgJHtTWVNST09UX0RFU1RESVJ9JHtsaWJkaXJ9L3BrZ2NvbmZpZy9nb2JqZWN0LWludHJvc3BlY3Rpb24tMS4wLnBjCit9CisKKyMgTmVlZCB0byBlbnN1cmUgbGQuc28uY29uZiBleGlzdHMgc28gcHJlbGluay1uYXRpdmUgd29ya3MKKyMgYm90aCBiZWZvcmUgd2UgYnVpbGQgYW5kIGlmIHdlIGluc3RhbGwgZnJvbSBzc3RhdGUKK2RvX2NvbmZpZ3VyZVtwcmVmdW5jc10gKz0gImdvYmplY3RfaW50cm9zcGVjdGlvbl9wcmVjb25maWd1cmUiCitweXRob24gZ29iamVjdF9pbnRyb3NwZWN0aW9uX3ByZWNvbmZpZ3VyZSAoKSB7CisgICAgb2UudXRpbHMud3JpdGVfbGRfc29fY29uZihkKQorfQorCitTU1RBVEVQT1NUSU5TVEZVTkNTICs9ICJnb2JqZWN0X2ludHJvc3BlY3Rpb25fcG9zdGluc3QiCitweXRob24gZ29iamVjdF9pbnRyb3NwZWN0aW9uX3Bvc3RpbnN0ICgpIHsKKyAgICBpZiBkLmdldFZhcigiQkJfQ1VSUkVOVFRBU0siLCBUcnVlKS5zdGFydHN3aXRoKCJwb3B1bGF0ZV9zeXNyb290Iik6CisgICAgICAgIG9lLnV0aWxzLndyaXRlX2xkX3NvX2NvbmYoZCkKK30KZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ25vbWUvZ3NldHRpbmdzLWRlc2t0b3Atc2NoZW1hcy9nc2V0dGluZ3MtZGVza3RvcC1zY2hlbWFzXzMuMTkuMy5iYiBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ25vbWUvZ3NldHRpbmdzLWRlc2t0b3Atc2NoZW1hcy9nc2V0dGluZ3MtZGVza3RvcC1zY2hlbWFzXzMuMTkuMy5iYgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjVmZGFiYS4uMDAwMDAwMAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdub21lL2dzZXR0aW5ncy1kZXNrdG9wLXNjaGVtYXMvZ3NldHRpbmdzLWRlc2t0b3Atc2NoZW1hc18zLjE5LjMuYmIKKysrIC9kZXYvbnVsbApAQCAtMSwxNCArMCwwIEBACi1TVU1NQVJZID0gIkdOT01FIGRlc2t0b3Atd2lkZSBHU2V0dGluZ3Mgc2NoZW1hcyIKLUhPTUVQQUdFID0gImh0dHA6Ly9saXZlLmdub21lLm9yZy9nc2V0dGluZ3MtZGVza3RvcC1zY2hlbWFzIgotQlVHVFJBQ0tFUiA9ICJodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy8iCi0KLUxJQ0VOU0UgPSAiTEdQTHYyLjEiCi1MSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT00ZmJkNjUzODBjZGQyNTU5NTEwNzkwMDhiMzY0NTE2YyIKLQotREVQRU5EUyA9ICJnbGliLTIuMCBpbnRsdG9vbC1uYXRpdmUiCi0KLWluaGVyaXQgZ25vbWViYXNlIGdzZXR0aW5ncyBnZXR0ZXh0IGdvYmplY3QtaW50cm9zcGVjdGlvbgotCi1TUkNfVVJJW2FyY2hpdmUubWQ1c3VtXSA9ICJmZGM5MmFiY2ZmZTQ2ODIxYmU0MjMxOTNiMjc1Y2Y4YiIKLVNSQ19VUklbYXJjaGl2ZS5zaGEyNTZzdW1dID0gIjkwODQ5ODliNzVjYTliM2ZjNTk4NGM4YTBkMjk3YTkzZDNkMTI0ZjUxY2FkZDJiZGFhYWE3NWE3ODNjODA2MzUiCi0KZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ25vbWUvZ3NldHRpbmdzLWRlc2t0b3Atc2NoZW1hcy9nc2V0dGluZ3MtZGVza3RvcC1zY2hlbWFzXzMuMjAuMC5iYiBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ25vbWUvZ3NldHRpbmdzLWRlc2t0b3Atc2NoZW1hcy9nc2V0dGluZ3MtZGVza3RvcC1zY2hlbWFzXzMuMjAuMC5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iYjkyNGNlCi0tLSAvZGV2L251bGwKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1nbm9tZS9nc2V0dGluZ3MtZGVza3RvcC1zY2hlbWFzL2dzZXR0aW5ncy1kZXNrdG9wLXNjaGVtYXNfMy4yMC4wLmJiCkBAIC0wLDAgKzEsMTMgQEAKK1NVTU1BUlkgPSAiR05PTUUgZGVza3RvcC13aWRlIEdTZXR0aW5ncyBzY2hlbWFzIgorSE9NRVBBR0UgPSAiaHR0cDovL2xpdmUuZ25vbWUub3JnL2dzZXR0aW5ncy1kZXNrdG9wLXNjaGVtYXMiCitCVUdUUkFDS0VSID0gImh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnLyIKKworTElDRU5TRSA9ICJMR1BMdjIuMSIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PTRmYmQ2NTM4MGNkZDI1NTk1MTA3OTAwOGIzNjQ1MTZjIgorCitERVBFTkRTID0gImdsaWItMi4wIGludGx0b29sLW5hdGl2ZSIKKworaW5oZXJpdCBnbm9tZWJhc2UgZ3NldHRpbmdzIGdldHRleHQgZ29iamVjdC1pbnRyb3NwZWN0aW9uIHVwc3RyZWFtLXZlcnNpb24taXMtZXZlbgorCitTUkNfVVJJW2FyY2hpdmUubWQ1c3VtXSA9ICJjNWQ4N2VhNDgwYWE5YmY2NmIxMzRkZGI1YjhlYTBmOCIKK1NSQ19VUklbYXJjaGl2ZS5zaGEyNTZzdW1dID0gIjU1YTQxYjUzM2MwYWI5NTVlMGEzNmE4NGQ3MzgyOTQ1MWM4OGIwMjdkOGQ3MTk5NTVkOGY2OTVjMzVjNmQ5YzEiCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdub21lL2d0aysvZ3RrKy5pbmMgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdub21lL2d0aysvZ3RrKy5pbmMKaW5kZXggNWJiZmU2Yi4uYzI0MGJhYSAxMDA2NDQKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1nbm9tZS9ndGsrL2d0aysuaW5jCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ25vbWUvZ3RrKy9ndGsrLmluYwpAQCAtNTgsNyArNTgsMTQgQEAKIAkke2xpYmRpcn0vZ3RrLTIuMC9tb2R1bGVzL2xpYmZlcnJldC5zbyBcCiAJIgogCi1HVEtCQVNFX1JSRUNPTU1FTkRTID89ICJsaWJlcmF0aW9uLWZvbnRzIGdkay1waXhidWYtbG9hZGVyLXBuZyBnZGstcGl4YnVmLWxvYWRlci1qcGVnIGdkay1waXhidWYtbG9hZGVyLWdpZiBnZGstcGl4YnVmLWxvYWRlci14cG0gc2hhcmVkLW1pbWUtaW5mbyIKK0dUS0JBU0VfUlJFQ09NTUVORFMgPz0gImxpYmVyYXRpb24tZm9udHMgXAorICAgICAgICAgICAgICAgICAgICAgICAgZ2RrLXBpeGJ1Zi1sb2FkZXItcG5nIFwKKyAgICAgICAgICAgICAgICAgICAgICAgIGdkay1waXhidWYtbG9hZGVyLWpwZWcgXAorICAgICAgICAgICAgICAgICAgICAgICAgZ2RrLXBpeGJ1Zi1sb2FkZXItZ2lmIFwKKyAgICAgICAgICAgICAgICAgICAgICAgIGdkay1waXhidWYtbG9hZGVyLXhwbSBcCisgICAgICAgICAgICAgICAgICAgICAgICBzaGFyZWQtbWltZS1pbmZvIFwKKyAgICAgICAgICAgICAgICAgICAgICAgIGdub21lLXRoZW1lLWFkd2FpdGEgXAorICAgICAgICAgICAgICAgICAgICAgICAgIgogR1RLR0xJQkNfUlJFQ09NTUVORFMgPz0gIiR7R1RLQkFTRV9SUkVDT01NRU5EU30gZ2xpYmMtZ2NvbnYtaXNvODg1OS0xIgogCiBSUkVDT01NRU5EU18ke1BOfSA9ICIke0dUS0JBU0VfUlJFQ09NTUVORFN9IgpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1nbm9tZS9ndGsrL2d0ayszLmluYyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ25vbWUvZ3RrKy9ndGsrMy5pbmMKaW5kZXggYmQyOTMwMC4uODNlOWI5MiAxMDA2NDQKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1nbm9tZS9ndGsrL2d0ayszLmluYworKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdub21lL2d0aysvZ3RrKzMuaW5jCkBAIC02LDcgKzYsNyBAQAogU0VDVElPTiA9ICJsaWJzIgogCiBERVBFTkRTID0gImdsaWItMi4wIGNhaXJvIHBhbmdvIGF0ayBqcGVnIGxpYnBuZyBnZGstcGl4YnVmIFwKLSAgICAgICAgICAgZG9jYm9vay11dGlscy1uYXRpdmUgZ2RrLXBpeGJ1Zi1uYXRpdmUgbGliZXBveHkiCisgICAgICAgICAgIGRvY2Jvb2stdXRpbHMtbmF0aXZlIGdkay1waXhidWYtbmF0aXZlIgogCiBMSUNFTlNFID0gIkxHUEx2MiAmIExHUEx2MisgJiBMR1BMdjIuMSsiCiAKQEAgLTIxLDYgKzIxLDggQEAKICAgICAjIERvIHRoaXMgYmVjYXVzZSB0aGUgY29uZmlndXJlIHNjcmlwdCBpcyBydW5uaW5nIC4vbGlidG9vbCBkaXJlY3RseQogICAgIHJtIC1mIGxpYnRvb2wKICAgICBsbiAtcyAke1RBUkdFVF9QUkVGSVh9bGlidG9vbCBsaWJ0b29sCisgICAgI2RlbGV0ZSBhIGZpbGUgdGhhdCB3aWxsIGdldCBjb25mdXNlZCB3aXRoIGdlbmVyYXRlZCBvbmUgaW4gJHtCfQorICAgIHJtIC1mICR7U30vZ3RrL2d0a3R5cGVmdW5jcy5jCiB9CiAKIEVYVFJBX09FQ09ORiArPSAiIFwKQEAgLTI5LDE5ICszMSwyNSBAQAogICAgICAgICAgICAgICAgICAtLWVuYWJsZS1tb2R1bGVzIFwKICAgICAgICAgICAgICAgICAgLS1kaXNhYmxlLWN1cHMgXAogICAgICAgICAgICAgICAgICAtLWRpc2FibGUtY29sb3JkIFwKLSIKKyAgICAgICAgICAgICAgICAgV0FZTEFORF9QUk9UT0NPTFNfU1lTUk9PVF9ESVI9JHtTVEFHSU5HX0RJUn0vJHtNQUNISU5FfSBcCisgICAgICAgICAgICAgICAgICR7QGJiLnV0aWxzLmNvbnRhaW5zKCJESVNUUk9fRkVBVFVSRVMiLCAieDExIiwgIiIsICItLWRpc2FibGUtZ3RrLWRvYyIsIGQpfSBcCisgICAgICAgICAgICAgICAgICIKK0VYVFJBX09FQ09ORlt2YXJkZXBzZXhjbHVkZV0gPSAiTUFDSElORSIKIAogZG9fY29tcGlsZV9wcmVwZW5kKCkgewogICAgICAgICBleHBvcnQgR0lSX0VYVFJBX0xJQlNfUEFUSD0iJHtCfS9nZGsvLmxpYnMiCiB9CiAKIFBBQ0tBR0VDT05GSUcgPz89ICIke0BiYi51dGlscy5jb250YWlucygiRElTVFJPX0ZFQVRVUkVTIiwgIngxMSIsICJ4MTEiLCAiIiwgZCl9IFwKKyAgICAgICAgICAgICAgICAgICAke0BiYi51dGlscy5jb250YWlucygiRElTVFJPX0ZFQVRVUkVTIiwgIm9wZW5nbCIsICJvcGVuZ2wiLCAiIiwgZCl9IFwKICAgICAgICAgICAgICAgICAgICAke0BiYi51dGlscy5jb250YWlucygiRElTVFJPX0ZFQVRVUkVTIiwgIm9wZW5nbCB4MTEiLCAiZ2x4IiwgIiIsIGQpfSBcCiAgICAgICAgICAgICAgICAgICAgJHtAYmIudXRpbHMuY29udGFpbnMoIkRJU1RST19GRUFUVVJFUyIsICJ3YXlsYW5kIiwgIndheWxhbmQiLCAiIiwgZCl9IgogCiBQQUNLQUdFQ09ORklHW3gxMV0gPSAiLS1lbmFibGUteDExLWJhY2tlbmQsLS1kaXNhYmxlLXgxMS1iYWNrZW5kLGF0LXNwaTItYXRrIGZvbnRjb25maWcgbGlieDExIGxpYnhleHQgbGlieGN1cnNvciBsaWJ4aSBsaWJ4ZGFtYWdlIGxpYnhyYW5kciBsaWJ4cmVuZGVyIGxpYnhjb21wb3NpdGUgbGlieGZpeGVzIgorIyB0aGlzIGlzIHByb3ZpZGVkIGJ5IG9lLWNvcmUgcGF0Y2ggdGhhdCByZW1vdmVzIGVwb3h5L2dsIGRlcGVuZGVuY3kgZnJvbSBhIFgxMSBidWlsZAorUEFDS0FHRUNPTkZJR1tvcGVuZ2xdID0gIi0tZW5hYmxlLW9wZW5nbCwtLWRpc2FibGUtb3BlbmdsLGxpYmVwb3h5IgogUEFDS0FHRUNPTkZJR1tnbHhdID0gIi0tZW5hYmxlLWdseCwtLWRpc2FibGUtZ2x4LCxsaWJnbCIKLVBBQ0tBR0VDT05GSUdbd2F5bGFuZF0gPSAiLS1lbmFibGUtd2F5bGFuZC1iYWNrZW5kLC0tZGlzYWJsZS13YXlsYW5kLWJhY2tlbmQsd2F5bGFuZCBsaWJ4a2Jjb21tb24gdmlydHVhbC9tZXNhIHdheWxhbmQtbmF0aXZlIgorUEFDS0FHRUNPTkZJR1t3YXlsYW5kXSA9ICItLWVuYWJsZS13YXlsYW5kLWJhY2tlbmQsLS1kaXNhYmxlLXdheWxhbmQtYmFja2VuZCx3YXlsYW5kIHdheWxhbmQtcHJvdG9jb2xzIGxpYnhrYmNvbW1vbiB2aXJ0dWFsL21lc2Egd2F5bGFuZC1uYXRpdmUiCiAKIGRvX2luc3RhbGxfYXBwZW5kKCkgewogCW12ICR7RH0ke2JpbmRpcn0vZ3RrLXVwZGF0ZS1pY29uLWNhY2hlICR7RH0ke2JpbmRpcn0vZ3RrLXVwZGF0ZS1pY29uLWNhY2hlLTMuMApAQCAtNjEsMTAgKzY5LDYgQEAKICAgICAgICAgICAgICAgICAgICAgJHtkYXRhZGlyfS9pY29ucy9oaWNvbG9yLyovYXBwcy9ndGszLWRlbW8qLnBuZyBcCiAgICAgICAgICAgICAgICAgICAgICR7ZGF0YWRpcn0vaWNvbnMvaGljb2xvci8qL2FwcHMvZ3RrMy13aWRnZXQtZmFjdG9yeSoucG5nIgogCi0jIFRoZSBkZW1vIHVzZXMgUE5HIGZpbGVzIGFuZCBtaW1lIHR5cGUgc25pZmZpbmcsIHNvIGVuc3VyZSB0aGF0IHRoZXNlCi0jIGRlcGVuZGVuY2llcyBhcmUgcHJlc2VudC4KLVJERVBFTkRTXyR7UE59LWRlbW8gKz0gImdkay1waXhidWYtbG9hZGVyLXBuZyBzaGFyZWQtbWltZS1pbmZvIgotCiBGSUxFU18ke1BOfV9hcHBlbmQgPSAiICR7YmluZGlyfS9ndGstdXBkYXRlLWljb24tY2FjaGUtMy4wIFwKICAgICAgICAgICAgICAgICR7YmluZGlyfS9ndGstcXVlcnktaW1tb2R1bGVzLTMuMCBcCiAgICAgICAgICAgICAgICAke2JpbmRpcn0vZ3RrLWxhdW5jaCBcCkBAIC03NSw2ICs3OSw3IEBACiBGSUxFU18ke1BOfS1kZXYgKz0gIiBcCiAgICAgICAgICAgICAgICAgICAgICR7ZGF0YWRpcn0vZ3RrLTMuMC9ndGtidWlsZGVyLnJuZyBcCiAgICAgICAgICAgICAgICAgICAgICR7ZGF0YWRpcn0vZ3RrLTMuMC9pbmNsdWRlIFwKKyAgICAgICAgICAgICAgICAgICAgJHtkYXRhZGlyfS9nZXR0ZXh0L2l0cyBcCiAgICAgICAgICAgICAgICAgICAgICR7bGliZGlyfS9ndGstMy4wL2luY2x1ZGUgXAogICAgICAgICAgICAgICAgICAgICAke2xpYmRpcn0vZ3RrLTMuMC8ke0xJQlZ9L2xvYWRlcnMvKi5sYSBcCiAgICAgICAgICAgICAgICAgICAgICR7bGliZGlyfS9ndGstMy4wLyR7TElCVn0vaW1tb2R1bGVzLyoubGEgXApAQCAtODQsOSArODksMjIgQEAKICAgICAgICAgICAgICAgICAgICAgJHtiaW5kaXJ9L2d0ay1idWlsZGVyLWNvbnZlcnQgXAogICAgICAgICAgICAgICAgICAgICAke2JpbmRpcn0vZ3RrLWVuY29kZS1zeW1ib2xpYy1zdmcgXAogICAgICAgICAgICAgICAgICAgICAke2JpbmRpcn0vZ3RrLWJ1aWxkZXItdG9vbCBcCisgICAgICAgICAgICAgICAgICAgICR7YmluZGlyfS9ndGstcXVlcnktc2V0dGluZ3MgXAogICAgICAgICAgICAgICAgICAgICAiCiAKLVJSRUNPTU1FTkRTXyR7UE59ID0gImFkd2FpdGEtaWNvbi10aGVtZS1zeW1ib2xpYyIKK0dUS0JBU0VfUlJFQ09NTUVORFMgPz0gImxpYmVyYXRpb24tZm9udHMgXAorICAgICAgICAgICAgICAgICAgICAgICAgZ2RrLXBpeGJ1Zi1sb2FkZXItcG5nIFwKKyAgICAgICAgICAgICAgICAgICAgICAgIGdkay1waXhidWYtbG9hZGVyLWpwZWcgXAorICAgICAgICAgICAgICAgICAgICAgICAgZ2RrLXBpeGJ1Zi1sb2FkZXItZ2lmIFwKKyAgICAgICAgICAgICAgICAgICAgICAgIGdkay1waXhidWYtbG9hZGVyLXhwbSBcCisgICAgICAgICAgICAgICAgICAgICAgICBzaGFyZWQtbWltZS1pbmZvIFwKKyAgICAgICAgICAgICAgICAgICAgICAgIGFkd2FpdGEtaWNvbi10aGVtZS1zeW1ib2xpYyBcCisgICAgICAgICAgICAgICAgICAgICAgICAiCitHVEtHTElCQ19SUkVDT01NRU5EUyA/PSAiJHtHVEtCQVNFX1JSRUNPTU1FTkRTfSBnbGliYy1nY29udi1pc284ODU5LTEiCisKK1JSRUNPTU1FTkRTXyR7UE59ID0gIiR7R1RLQkFTRV9SUkVDT01NRU5EU30iCitSUkVDT01NRU5EU18ke1BOfV9saWJjLWdsaWJjID0gIiR7R1RLR0xJQkNfUlJFQ09NTUVORFN9IgorUkRFUEVORFNfJHtQTn0tZGV2ICs9ICIke0BiYi51dGlscy5jb250YWlucygiUEFDS0FHRUNPTkZJRyIsICJ3YXlsYW5kIiwgIndheWxhbmQtcHJvdG9jb2xzIiwgIiIsIGQpfSIKIAogUEFDS0FHRVNfRFlOQU1JQyArPSAiXmd0azMtaW1tb2R1bGUtLiogXmd0azMtcHJpbnRiYWNrZW5kLS4qIgogCkBAIC0xMTAsNCArMTI4LDMgQEAKICAgICBpZiAoZC5nZXRWYXIoJ0RFQklBTl9OQU1FUycsIFRydWUpKToKICAgICAgICAgZC5zZXRWYXIoZC5leHBhbmQoJ1BLR18ke1BOfScpLCAnJHtNTFBSRUZJWH1saWJndGstMy4wJykKIH0KLQpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1nbm9tZS9ndGsrL2d0ayszLzAwMDEtSGFyZGNvZGVkLWxpYnRvb2wucGF0Y2ggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdub21lL2d0aysvZ3RrKzMvMDAwMS1IYXJkY29kZWQtbGlidG9vbC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wYmRhMWYxCi0tLSAvZGV2L251bGwKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1nbm9tZS9ndGsrL2d0ayszLzAwMDEtSGFyZGNvZGVkLWxpYnRvb2wucGF0Y2gKQEAgLTAsMCArMSw0NyBAQAorRnJvbSA1YTczYTViOTI1NjZlMzE0YmJjOGExYmQ0MGYxZWMyMDQ4MzdjMTExIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogSnVzc2kgS3Vra29uZW4gPGp1c3NpLmt1a2tvbmVuQGludGVsLmNvbT4KK0RhdGU6IFR1ZSwgMjEgSnVuIDIwMTYgMTQ6NTM6NTYgKzAzMDAKK1N1YmplY3Q6IFtQQVRDSCAxLzRdIEhhcmRjb2RlZCBsaWJ0b29sCisKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbZW1iZWRkZWQgc3BlY2lmaWNdCisKK1NpZ25lZC1vZmYtYnk6IE1hcmtvIExpbmRxdmlzdCA8Y2F6Zmk3NEBnbWFpbC5jb20+CitTaWduZWQtb2ZmLWJ5OiBKdXNzaSBLdWtrb25lbiA8anVzc2kua3Vra29uZW5AaW50ZWwuY29tPgorLS0tCisgY29uZmlndXJlLmFjIHwgNiArKystLS0KKyAxIGZpbGUgY2hhbmdlZCwgMyBpbnNlcnRpb25zKCspLCAzIGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvY29uZmlndXJlLmFjIGIvY29uZmlndXJlLmFjCitpbmRleCAyM2QzMDc3Li5iNjkzMWQ2IDEwMDY0NAorLS0tIGEvY29uZmlndXJlLmFjCisrKysgYi9jb25maWd1cmUuYWMKK0BAIC02MTAsNyArNjEwLDcgQEAgQUNfTVNHX0NIRUNLSU5HKFt3aGV0aGVyIHRvIHdyaXRlIGRlcGVuZGVuY2llcyBpbnRvIC5wYyBmaWxlc10pCisgY2FzZSAkZW5hYmxlX2V4cGxpY2l0X2RlcHMgaW4KKyAgIGF1dG8pCisgICAgIGV4cG9ydCBTRUQKKy0gICAgZGVwbGlic19jaGVja19tZXRob2Q9YCguL2xpYnRvb2wgLS1jb25maWc7IGVjaG8gJ2V2YWwgZWNobyBcIiRkZXBsaWJzX2NoZWNrX21ldGhvZFwiJykgfCBzaGAKKysgICAgZGVwbGlic19jaGVja19tZXRob2Q9YCguLyRob3N0X2FsaWFzLWxpYnRvb2wgLS1jb25maWc7IGVjaG8gJ2V2YWwgZWNobyBcIiRkZXBsaWJzX2NoZWNrX21ldGhvZFwiJykgfCBzaGAKKyAgICAgaWYgdGVzdCAieCRkZXBsaWJzX2NoZWNrX21ldGhvZCIgIT0geHBhc3NfYWxsIHx8IHRlc3QgIngkZW5hYmxlX3N0YXRpYyIgPSB4eWVzIDsgdGhlbgorICAgICAgIGVuYWJsZV9leHBsaWNpdF9kZXBzPXllcworICAgICBlbHNlCitAQCAtODc2LDcgKzg3Niw3IEBAIGVsc2UKKyAgICAgZG5sIE5vdyB3ZSBjaGVjayB0byBzZWUgaWYgb3VyIGxpYnRvb2wgc3VwcG9ydHMgc2hhcmVkIGxpYiBkZXBzCisgICAgIGRubCAoaW4gYSByYXRoZXIgdWdseSB3YXkgZXZlbikKKyAgICAgaWYgJGR5bndvcmtzOyB0aGVuCistICAgICAgICBtb2R1bGVfbGlidG9vbF9jb25maWc9IiR7Q09ORklHX1NIRUxMLS9iaW4vc2h9IC4vbGlidG9vbCAtLWNvbmZpZyIKKysgICAgICAgIG1vZHVsZV9saWJ0b29sX2NvbmZpZz0iJHtDT05GSUdfU0hFTEwtL2Jpbi9zaH0gLi8kaG9zdF9hbGlhcy1saWJ0b29sIC0tY29uZmlnIgorICAgICAgICAgbW9kdWxlX2RlcGxpYnNfY2hlY2s9YCRtb2R1bGVfbGlidG9vbF9jb25maWcgfCBcCisgICAgICAgICAgICAgZ3JlcCAnXltbYS16X11dKmNoZWNrW1thLXpfXV0qX21ldGhvZD1bWydcJyciXV0nIHwgXAorICAgICAgICAgICAgIHNlZCAncy8uKltbJ1wnJyJdXVwoLipcKVtbJ1wnJyJdXSQvXDEvJ2AKK0BAIC0xNjMwLDcgKzE2MzAsNyBAQCBBQ19TVUJTVChHVEtfUFJJTlRfQkFDS0VORFMpCisgIyBXZSBhcmUgdXNpbmcgZ21vZHVsZS1uby1leHBvcnQgbm93LCBidXQgSSdtIGxlYXZpbmcgdGhlIHN0cmlwcGluZworICMgY29kZSBpbiBwbGFjZSBmb3Igbm93LCBzaW5jZSBwYW5nbyBhbmQgYXRrIHN0aWxsIHJlcXVpcmUgZ21vZHVsZS4KKyBleHBvcnQgU0VECistZXhwb3J0X2R5bmFtaWM9YCguL2xpYnRvb2wgLS1jb25maWc7IGVjaG8gZXZhbCBlY2hvIFxcJGV4cG9ydF9keW5hbWljX2ZsYWdfc3BlYykgfCBzaGAKKytleHBvcnRfZHluYW1pYz1gKC4vJGhvc3RfYWxpYXMtbGlidG9vbCAtLWNvbmZpZzsgZWNobyBldmFsIGVjaG8gXFwkZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjKSB8IHNoYAorIGlmIHRlc3QgLW4gIiRleHBvcnRfZHluYW1pYyI7IHRoZW4KKyAgIEdES19ERVBfTElCUz1gZWNobyAkR0RLX0RFUF9MSUJTIHwgc2VkIC1lICJzLyRleHBvcnRfZHluYW1pYy8vImAKKyAgIEdUS19ERVBfTElCUz1gZWNobyAkR1RLX0RFUF9MSUJTIHwgc2VkIC1lICJzLyRleHBvcnRfZHluYW1pYy8vImAKKy0tIAorMi4xLjQKKwpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1nbm9tZS9ndGsrL2d0ayszLzAwMDEtUmVkby1mb2N1cy1oYW5kbGluZy1pbi10cmVldmlldy1vbmNlLW1vcmUucGF0Y2ggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdub21lL2d0aysvZ3RrKzMvMDAwMS1SZWRvLWZvY3VzLWhhbmRsaW5nLWluLXRyZWV2aWV3LW9uY2UtbW9yZS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lODE5YWRkCi0tLSAvZGV2L251bGwKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1nbm9tZS9ndGsrL2d0ayszLzAwMDEtUmVkby1mb2N1cy1oYW5kbGluZy1pbi10cmVldmlldy1vbmNlLW1vcmUucGF0Y2gKQEAgLTAsMCArMSwzOSBAQAorVXBzdHJlYW0tU3RhdHVzOiBCYWNrcG9ydCBbMjlmYWEyZGJdCitTaWduZWQtb2ZmLWJ5OiBKdXNzaSBLdWtrb25lbiA8anVzc2kua3Vra29uZW5AaW50ZWwuY29tPgorCisKK0Zyb20gMjlmYWEyZGI0NGIwNGI5Y2Y3ZjRkOTZlMzI2OTFmNDI0NDkwYzczMCBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IE1hdHRoaWFzIENsYXNlbiA8bWNsYXNlbkByZWRoYXQuY29tPgorRGF0ZTogU3VuLCAxMSBTZXAgMjAxNiAxMTo0Nzo1NSAtMDQwMAorU3ViamVjdDogW1BBVENIXSBSZWRvIGZvY3VzIGhhbmRsaW5nIGluIHRyZWV2aWV3IG9uY2UgbW9yZQorCitUaGUgZml4IGZvciBidWcgNzY3NDY4IGhhZCBzb21lIHVuaW50ZW5kZWQgc2lkZS1lZmZlY3RzLiBUaGlzIGlzCithbiBhdHRlbXB0IGF0IGRvaW5nIHRoZSBzYW1lIGZpeCAoZG9uJ3QgZ3JhYiBmb2N1cyB3aGVuIHdlIGFyZQorZ3JhYi1zaGFkb3dlZCksIHdoaWxlIGF2b2lkaW5nIHRoZSBicmVha2FnZSwgYnkgdXNpbmcgR1RLKydzCitpbnRlcm5hbCB0cmFja2luZyBmb3IgZ3JhYi1zaGFkb3dlZC1uZXNzLgorCitodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzcwNTA4CistLS0KKyBndGsvZ3RrdHJlZXZpZXcuYyB8IDMgKy0tCisgMSBmaWxlIGNoYW5nZWQsIDEgaW5zZXJ0aW9uKCspLCAyIGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvZ3RrL2d0a3RyZWV2aWV3LmMgYi9ndGsvZ3RrdHJlZXZpZXcuYworaW5kZXggYTc0NjNjYy4uNzNkMzU1NyAxMDA2NDQKKy0tLSBhL2d0ay9ndGt0cmVldmlldy5jCisrKysgYi9ndGsvZ3RrdHJlZXZpZXcuYworQEAgLTMwNTAsMTEgKzMwNTAsMTAgQEAgc3RhdGljIHZvaWQKKyBncmFiX2ZvY3VzX2FuZF91bnNldF9kcmF3X2tleWZvY3VzIChHdGtUcmVlVmlldyAqdHJlZV92aWV3KQorIHsKKyAgIEd0a1dpZGdldCAqd2lkZ2V0ID0gR1RLX1dJREdFVCAodHJlZV92aWV3KTsKKy0gIEd0a1dpZGdldCAqZ3JhYl93aWRnZXQgPSBndGtfZ3JhYl9nZXRfY3VycmVudCAoKTsKKyAKKyAgIGlmIChndGtfd2lkZ2V0X2dldF9jYW5fZm9jdXMgKHdpZGdldCkgJiYKKyAgICAgICAhZ3RrX3dpZGdldF9oYXNfZm9jdXMgKHdpZGdldCkgJiYKKy0gICAgICAoIWdyYWJfd2lkZ2V0IHx8IGdyYWJfd2lkZ2V0ID09IHdpZGdldCkpCisrICAgICAgIV9ndGtfd2lkZ2V0X2dldF9zaGFkb3dlZCAod2lkZ2V0KSkKKyAgICAgZ3RrX3dpZGdldF9ncmFiX2ZvY3VzICh3aWRnZXQpOworIAorICAgdHJlZV92aWV3LT5wcml2LT5kcmF3X2tleWZvY3VzID0gMDsKKy0tIAorMi45LjMKKwpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1nbm9tZS9ndGsrL2d0ayszLzAwMDItRG8tbm90LXRyeS10by1pbml0aWFsaXplLUdMLXdpdGhvdXQtbGliR0wucGF0Y2ggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdub21lL2d0aysvZ3RrKzMvMDAwMi1Eby1ub3QtdHJ5LXRvLWluaXRpYWxpemUtR0wtd2l0aG91dC1saWJHTC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45ODk3MTZlCi0tLSAvZGV2L251bGwKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1nbm9tZS9ndGsrL2d0ayszLzAwMDItRG8tbm90LXRyeS10by1pbml0aWFsaXplLUdMLXdpdGhvdXQtbGliR0wucGF0Y2gKQEAgLTAsMCArMSw2MCBAQAorRnJvbSBkNjNiOTI2ZjhjOGQ4YjVjOWY5ZWMzM2QwNzhiNzc1ZjA0MDlkODhhIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogSnVzc2kgS3Vra29uZW4gPGp1c3NpLmt1a2tvbmVuQGludGVsLmNvbT4KK0RhdGU6IEZyaSwgMTYgT2N0IDIwMTUgMTY6MzU6MTYgKzAzMDAKK1N1YmplY3Q6IFtQQVRDSCAyLzRdIERvIG5vdCB0cnkgdG8gaW5pdGlhbGl6ZSBHTCB3aXRob3V0IGxpYkdMCisKK19nZGtfeDExX3NjcmVlbl91cGRhdGVfdmlzdWFsc19mb3JfZ2woKSB3aWxsIGVuZCB1cCBjYWxsaW5nIGVwb3h5cworR0xYIGFwaSB3aGljaCB3aWxsIGV4aXQoKSBpZiBsaWJHTC5zby4xIGlzIG5vdCBwcmVzZW50LiBXZSBkbyBub3QKK3dhbnQgdGhhdCB0byBoYXBwZW4gYW5kIHdlIGRvbid0IHdhbnQgZXZlcnkgYXBwIHRvIGhhdmUgdG8gc2V0CisiR0RLX0dMPWRpc2FibGVkIiBlbnZpcm9ubWVudCB2YXJpYWJsZTogc28gdXNlICNpZmRlZiBzZXQgYmFzZWQgb24KK29wZW5nbCBkaXN0cm8gZmVhdHVyZS4KKworVXBzdHJlYW0gaXMgbm90IGludGVyZXN0ZWQgaW4gdGhlIGZpeCBhcyBpdCBpczogRWl0aGVyIGVwb3h5IHNob3VsZCBiZQorZml4ZWQgKHRvIG5vdCBleGl0KSBvciBHVEsrIHBvc3NpYmx5IGNvdWxkIGRvIHNvbWUgYWRkaXRpb25hbCBwcm9iaW5nCitiZWZvcmUgY2FsbGluZyBlcG94eSBBUElzLgorCitVcHN0cmVhbS1TdGF0dXM6IERlbmllZAorU2lnbmVkLW9mZi1ieTogSnVzc2kgS3Vra29uZW4gPGp1c3NpLmt1a2tvbmVuQGludGVsLmNvbT4KKy0tLQorIGNvbmZpZ3VyZS5hYyAgICAgICAgICAgIHwgNyArKysrKysrCisgZ2RrL3gxMS9nZGt2aXN1YWwteDExLmMgfCA1ICsrKysrCisgMiBmaWxlcyBjaGFuZ2VkLCAxMiBpbnNlcnRpb25zKCspCisKK2RpZmYgLS1naXQgYS9jb25maWd1cmUuYWMgYi9jb25maWd1cmUuYWMKK2luZGV4IGI2OTMxZDYuLmUyN2RhNDkgMTAwNjQ0CistLS0gYS9jb25maWd1cmUuYWMKKysrKyBiL2NvbmZpZ3VyZS5hYworQEAgLTM0Miw2ICszNDIsMTMgQEAgQUNfQVJHX0VOQUJMRShtaXItYmFja2VuZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbZW5hYmxlIHRoZSBNaXIgZ2RrIGJhY2tlbmRdKV0sCisgCQkJICAgICAgW2JhY2tlbmRfc2V0PXllc10pCisgCisrQUNfQVJHX0VOQUJMRShnbHgsCisrICAgICAgICAgICAgICBbQVNfSEVMUF9TVFJJTkcoWy0tZW5hYmxlLWdseF0sCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW1doZW4gZW5hYmxlZCBHZGsgd2lsbCB0cnkgdG8gaW5pdGlhbGl6ZSBHTFhdKV0pCisrQVNfSUYoW3Rlc3QgIngkZW5hYmxlX2dseCIgIT0gInhubyJdLCBbCisrICBBQ19ERUZJTkUoW0hBVkVfR0xYXSwgW10sIFtHTFggd2lsbCBiZSBhdmFpbGFibGUgYXQgcnVudGltZV0pCisrXSkKKysKKyBpZiB0ZXN0IC16ICIkYmFja2VuZF9zZXQiOyB0aGVuCisgICBpZiB0ZXN0ICIkcGxhdGZvcm1fd2luMzIiID0geWVzOyB0aGVuCisgICAgIGVuYWJsZV93aW4zMl9iYWNrZW5kPXllcworZGlmZiAtLWdpdCBhL2dkay94MTEvZ2RrdmlzdWFsLXgxMS5jIGIvZ2RrL3gxMS9nZGt2aXN1YWwteDExLmMKK2luZGV4IDgxNDc5ZDguLjNjOGM1YzAgMTAwNjQ0CistLS0gYS9nZGsveDExL2dka3Zpc3VhbC14MTEuYworKysrIGIvZ2RrL3gxMS9nZGt2aXN1YWwteDExLmMKK0BAIC0zMDYsNyArMzA2LDEyIEBAIF9nZGtfeDExX3NjcmVlbl9pbml0X3Zpc3VhbHMgKEdka1NjcmVlbiAqc2NyZWVuKQorICAgLyogSWYgR0wgaXMgYXZhaWxhYmxlIHdlIHdhbnQgdG8gcGljayBiZXR0ZXIgZGVmYXVsdC9yZ2JhIHZpc3VhbHMsCisgICAgICBhcyB3ZSBjYXJlIGFib3V0IGdseCBkZXRhaWxzIHN1Y2ggYXMgYWxwaGEvZGVwdGgvc3RlbmNpbCBkZXB0aCwKKyAgICAgIHN0ZXJlbyBhbmQgZG91YmxlIGJ1ZmZlcmluZyAqLworKyAgLyogdXBkYXRlX3Zpc3VhbHNfZm9yX2dsKCkgd2lsbCBlbmQgdXAgY2FsbGluZyBlcG94eSBHTFggYXBpIHdoaWNoCisrICAgICB3aWxsIGV4aXQgaWYgbGliZ2wgaXMgbm90IHRoZXJlOiBzbyBvbmx5IGRvIHRoaXMgaWYgd2Uga25vdyBHTAorKyAgICAgaXMgYXZhaWxhYmxlICovCisrI2lmZGVmIEhBVkVfR0xYCisgICBfZ2RrX3gxMV9zY3JlZW5fdXBkYXRlX3Zpc3VhbHNfZm9yX2dsIChzY3JlZW4pOworKyNlbmRpZgorIH0KKyAKKyBnaW50CistLSAKKzIuMS40CisKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ25vbWUvZ3RrKy9ndGsrMy8wMDAzLUFkZC1kaXNhYmxlLW9wZW5nbC1jb25maWd1cmUtb3B0aW9uLnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1nbm9tZS9ndGsrL2d0ayszLzAwMDMtQWRkLWRpc2FibGUtb3BlbmdsLWNvbmZpZ3VyZS1vcHRpb24ucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDkxMmM0NAotLS0gL2Rldi9udWxsCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ25vbWUvZ3RrKy9ndGsrMy8wMDAzLUFkZC1kaXNhYmxlLW9wZW5nbC1jb25maWd1cmUtb3B0aW9uLnBhdGNoCkBAIC0wLDAgKzEsOTU0IEBACitGcm9tIGE4ZmE1NDdmZGMxNDE2YjMzMGFjZWQ4MDVmNTM0M2FkOTEyOTMyYWUgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBKdXNzaSBLdWtrb25lbiA8anVzc2kua3Vra29uZW5AaW50ZWwuY29tPgorRGF0ZTogVHVlLCAyMSBKdW4gMjAxNiAxNToxMTozOSArMDMwMAorU3ViamVjdDogW1BBVENIIDMvNF0gQWRkIC0tZGlzYWJsZS1vcGVuZ2wgY29uZmlndXJlIG9wdGlvbgorCistLWRpc2FibGUtb3BlbmdsIHdpbGwgcmVtb3ZlIHRoZSBkZXBlbmRlbmN5IG9uIGxpYmVwb3h5IGFuZCBvbiB0aGUKK09wZW5HTCBBUElzLiBUaGlzIGlzIHVzZWZ1bCBmb3IgdGhvc2Ugd2hvIHdhbnQgdG8ga2VlcCB1c2luZyBndGsrMword2l0aG91dCB0aGUgIm9wZW5nbCIgZGlzdHJvIGZlYXR1cmUuCisKK0d0a0dMQXJlYSBpcyBzdGlsbCBwYXJ0IG9mIHRoZSBBUEkgKGl0IGp1c3QgZG9lc24ndCB3b3JrKSBldmVuIHdoZW4KK09wZW5HTCBpcyBkaXNhYmxlZC4gR2RrWDExR0xDb250ZXh0IHdhcyByZW1vdmVkIGZyb20gdGhlIEd0ayBBUEkKK2NvbXBsZXRlbHk6IHRoYXQgb2JqZWN0IGV4cG9zZXMgR0wgQVBJIGVsZW1lbnRzIHNvIGl0IGhhZCB0byBiZSBhdAordGhlIHZlcnkgbGVhc3QgbW9kaWZpZWQuCisKK1RoZSBwYXRjaCBpcyBfbm90XyBncmVhdCBmcm9tIGEgbWFpbnRlbmFuY2UgcG9pbnQgb2YgdmlldyBhbmQKK21vZGlmeWluZyB0aGUgbGlicmFyeSBBUEkgaXMgYWxzbyBhIGZhaXJseSBuYXN0eSB0aGluZyB0byBkby4KK0xvbmctdGVybSBpdCB3b3VsZCBiZSBnb29kIHRvIGZpbmQgYW4gYWx0ZXJuYXRpdmUgc29sdXRpb24gdG8gdGhpcworKG1heWJlIGEgbm8tb3AgYmFja2VuZCBmb3IgbGliZXBveHk/KQorCitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW0V2aWwgZXllIGV4cGVjdGVkIGZyb20gdXBzdHJlYW1dCitTaWduZWQtb2ZmLWJ5OiBKdXNzaSBLdWtrb25lbiA8anVzc2kua3Vra29uZW5AaW50ZWwuY29tPgorLS0tCisgY29uZmlndXJlLmFjICAgICAgICAgICAgICAgICAgICAgIHwgMTMgKysrKysrKysrKystLQorIGRlbW9zL2d0ay1kZW1vL2dsYXJlYS5jICAgICAgICAgICB8IDEzICsrKysrKysrKysrKysKKyBkb2NzL3Rvb2xzL01ha2VmaWxlLmFtICAgICAgICAgICAgfCAgOSArKysrKysrLS0KKyBkb2NzL3Rvb2xzL3dpZGdldHMuYyAgICAgICAgICAgICAgfCAgNCArKystCisgZ2RrL2dka2Rpc3BsYXkuYyAgICAgICAgICAgICAgICAgIHwgIDQgKysrLQorIGdkay9nZGtnbC5jICAgICAgICAgICAgICAgICAgICAgICB8IDEwICsrKysrKysrKysKKyBnZGsvZ2RrZ2xjb250ZXh0LmMgICAgICAgICAgICAgICAgfCAgNiArKysrKysKKyBnZGsvZ2Rrd2luZG93LmMgICAgICAgICAgICAgICAgICAgfCAxMyArKysrKysrKysrKysrCisgZ2RrL3gxMS9NYWtlZmlsZS5hbSAgICAgICAgICAgICAgIHwgMzAgKysrKysrKysrKysrKysrKysrKysrKysrKystLS0tCisgZ2RrL3gxMS9nZGtkaXNwbGF5LXgxMS5jICAgICAgICAgIHwgIDYgKysrKystCisgZ2RrL3gxMS9nZGtzY3JlZW4teDExLmMgICAgICAgICAgIHwgIDUgKysrKysKKyBnZGsveDExL2dka3dpbmRvdy14MTEuYyAgICAgICAgICAgfCAgNCArKysrCisgZ2RrL3gxMS9nZGt4LWF1dG9jbGVhbnVwcy5oICAgICAgIHwgIDIgKysKKyBnZGsveDExL2dka3gtd2l0aC1nbC1jb250ZXh0LmggICAgfCA1OSArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKworIGdkay94MTEvZ2RreC13aXRob3V0LWdsLWNvbnRleHQuaCB8IDU4ICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysKKyBnZGsveDExL2dka3guaCAgICAgICAgICAgICAgICAgICAgfCA1OSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIGd0ay9NYWtlZmlsZS5hbSAgICAgICAgICAgICAgICAgICB8ICAzICstLQorIGd0ay9ndGtnbGFyZWEuYyAgICAgICAgICAgICAgICAgICB8IDIwICsrKysrKysrKysrKysrKysrKystCisgZ3RrL2luc3BlY3Rvci9nZW5lcmFsLmMgICAgICAgICAgIHwgIDYgKysrKysrCisgdGVzdHMvTWFrZWZpbGUuYW0gICAgICAgICAgICAgICAgIHwgMTAgKysrKysrKy0tLQorIHRlc3RzdWl0ZS9ndGsvb2JqZWN0cy1maW5hbGl6ZS5jICB8ICAyICsrCisgMjEgZmlsZXMgY2hhbmdlZCwgMjYwIGluc2VydGlvbnMoKyksIDc2IGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvY29uZmlndXJlLmFjIGIvY29uZmlndXJlLmFjCitpbmRleCBhMDE4MjRlLi5kZGU5ZGM1IDEwMDY0NAorLS0tIGEvY29uZmlndXJlLmFjCisrKysgYi9jb25maWd1cmUuYWMKK0BAIC0zNDIsNiArMzQyLDE1IEBAIEFDX0FSR19FTkFCTEUobWlyLWJhY2tlbmQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2VuYWJsZSB0aGUgTWlyIGdkayBiYWNrZW5kXSldLAorIAkJCSAgICAgIFtiYWNrZW5kX3NldD15ZXNdKQorIAorK0FDX0FSR19FTkFCTEUob3BlbmdsLAorKyAgICAgICAgICAgICAgW0FTX0hFTFBfU1RSSU5HKFstLWVuYWJsZS1vcGVuZ2xdLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtXaGVuIGVuYWJsZWQsIEd0aysgd2lsbCB1c2UgbGliZXBveHkgYW5kIGV4cG9zZXMgR3RrR0xBcmVhIHdpZGdldCBdKV0pCisrQVNfSUYoW3Rlc3QgIngkZW5hYmxlX29wZW5nbCIgIT0gInhubyJdLCBbCisrICBBQ19ERUZJTkUoW0hBVkVfT1BFTkdMXSwgWzFdLCBbbGliZXBveHkgYW5kIG9wZW5nbCBBUElzIGFyZSBhdmFpbGFibGUgYXQgYnVpbGR0aW1lXSkKKysgIEVQT1hZX1BBQ0tBR0VTPSJlcG94eSA+PSBlcG94eV9yZXF1aXJlZF92ZXJzaW9uIgorK10pCisrQU1fQ09ORElUSU9OQUwoW0hBVkVfT1BFTkdMXSxbdGVzdCAieCRlbmFibGVfb3BlbmdsIiAhPSAieG5vIl0pCisrCisgQUNfQVJHX0VOQUJMRShnbHgsCisgICAgICAgICAgICAgICBbQVNfSEVMUF9TVFJJTkcoWy0tZW5hYmxlLWdseF0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW1doZW4gZW5hYmxlZCBHZGsgd2lsbCB0cnkgdG8gaW5pdGlhbGl6ZSBHTFhdKV0pCitAQCAtMTMzMyw3ICsxMzQyLDcgQEAgQ0ZMQUdTPSIkc2F2ZWRfY2ZsYWdzIgorIExERkxBR1M9IiRzYXZlZF9sZGZsYWdzIgorIAorIEdES19QQUNLQUdFUz0iJFBBTkdPX1BBQ0tBR0VTIGdkay1waXhidWYtMi4wID49IGdka19waXhidWZfcmVxdWlyZWRfdmVyc2lvbiBjYWlybyA+PSBjYWlyb19yZXF1aXJlZF92ZXJzaW9uIGNhaXJvLWdvYmplY3QgPj0gY2Fpcm9fcmVxdWlyZWRfdmVyc2lvbiIKKy1HREtfUFJJVkFURV9QQUNLQUdFUz0iJEdES19HSU9fUEFDS0FHRSAkWF9QQUNLQUdFUyAkV0FZTEFORF9QQUNLQUdFUyAkTUlSX1BBQ0tBR0VTICRjYWlyb19iYWNrZW5kcyBlcG94eSA+PSBlcG94eV9yZXF1aXJlZF92ZXJzaW9uIgorK0dES19QUklWQVRFX1BBQ0tBR0VTPSIkR0RLX0dJT19QQUNLQUdFICRYX1BBQ0tBR0VTICRXQVlMQU5EX1BBQ0tBR0VTICRNSVJfUEFDS0FHRVMgJGNhaXJvX2JhY2tlbmRzICRFUE9YWV9QQUNLQUdFUyIKKyAKKyBQS0dfQ0hFQ0tfTU9EVUxFUyhHREtfREVQLCAkR0RLX1BBQ0tBR0VTICRHREtfUFJJVkFURV9QQUNLQUdFUykKKyBHREtfREVQX0xJQlM9IiRHREtfRVhUUkFfTElCUyAkR0RLX0RFUF9MSUJTICRNQVRIX0xJQiIKK0BAIC0xMzY3LDcgKzEzNzYsNyBAQCBmaQorIFBLR19DSEVDS19NT0RVTEVTKEFUSywgJEFUS19QQUNLQUdFUykKKyAKKyBHVEtfUEFDS0FHRVM9ImF0ayA+PSBhdGtfcmVxdWlyZWRfdmVyc2lvbiBjYWlybyA+PSBjYWlyb19yZXF1aXJlZF92ZXJzaW9uIGNhaXJvLWdvYmplY3QgPj0gY2Fpcm9fcmVxdWlyZWRfdmVyc2lvbiBnZGstcGl4YnVmLTIuMCA+PSBnZGtfcGl4YnVmX3JlcXVpcmVkX3ZlcnNpb24gZ2lvLTIuMCA+PSBnbGliX3JlcXVpcmVkX3ZlcnNpb24iCistR1RLX1BSSVZBVEVfUEFDS0FHRVM9IiRBVEtfUEFDS0FHRVMgJFdBWUxBTkRfUEFDS0FHRVMgJE1JUl9QQUNLQUdFUyBlcG94eSA+PSBlcG94eV9yZXF1aXJlZF92ZXJzaW9uIgorK0dUS19QUklWQVRFX1BBQ0tBR0VTPSIkQVRLX1BBQ0tBR0VTICRXQVlMQU5EX1BBQ0tBR0VTICRNSVJfUEFDS0FHRVMgJEVQT1hZX1BBQ0tBR0VTIgorIGlmIHRlc3QgIngkZW5hYmxlX3gxMV9iYWNrZW5kIiA9IHh5ZXMgLW8gIngkZW5hYmxlX3dheWxhbmRfYmFja2VuZCIgPSB4eWVzOyB0aGVuCisgICBHVEtfUFJJVkFURV9QQUNLQUdFUz0iJEdUS19QUklWQVRFX1BBQ0tBR0VTIHBhbmdvZnQyIgorIGZpCitkaWZmIC0tZ2l0IGEvZGVtb3MvZ3RrLWRlbW8vZ2xhcmVhLmMgYi9kZW1vcy9ndGstZGVtby9nbGFyZWEuYworaW5kZXggM2FiYTcyOS4uYzZjNzlmNyAxMDA2NDQKKy0tLSBhL2RlbW9zL2d0ay1kZW1vL2dsYXJlYS5jCisrKysgYi9kZW1vcy9ndGstZGVtby9nbGFyZWEuYworQEAgLTUsNyArNSw5IEBACisgCisgI2luY2x1ZGUgPG1hdGguaD4KKyAjaW5jbHVkZSA8Z3RrL2d0ay5oPgorKyNpZiBIQVZFX09QRU5HTAorICNpbmNsdWRlIDxlcG94eS9nbC5oPgorKyNlbmRpZgorIAorIHN0YXRpYyBHdGtXaWRnZXQgKmRlbW9fd2luZG93ID0gTlVMTDsKKyAKK0BAIC0yMyw2ICsyNSw4IEBAIGVudW0geworIC8qIFJvdGF0aW9uIGFuZ2xlcyBvbiBlYWNoIGF4aXMgKi8KKyBzdGF0aWMgZmxvYXQgcm90YXRpb25fYW5nbGVzW05fQVhJU10gPSB7IDAuMCB9OworIAorKyNpZmRlZiBIQVZFX09QRU5HTAorKworIC8qIFRoZSBvYmplY3Qgd2UgYXJlIGRyYXdpbmcgKi8KKyBzdGF0aWMgY29uc3QgR0xmbG9hdCB2ZXJ0ZXhfZGF0YVtdID0geworICAgMC5mLCAgIDAuNWYsICAgMC5mLCAxLmYsCitAQCAtMjEzLDYgKzIxNyw3IEBAIGNvbXB1dGVfbXZwIChmbG9hdCAqcmVzLAorIHN0YXRpYyBHTHVpbnQgcG9zaXRpb25fYnVmZmVyOworIHN0YXRpYyBHTHVpbnQgcHJvZ3JhbTsKKyBzdGF0aWMgR0x1aW50IG12cF9sb2NhdGlvbjsKKysjZW5kaWYKKyAKKyAvKiBXZSBuZWVkIHRvIHNldCB1cCBvdXIgc3RhdGUgd2hlbiB3ZSByZWFsaXplIHRoZSBHdGtHTEFyZWEgd2lkZ2V0ICovCisgc3RhdGljIHZvaWQKK0BAIC0yMjMsOCArMjI4LDEwIEBAIHJlYWxpemUgKEd0a1dpZGdldCAqd2lkZ2V0KQorICAgaWYgKGd0a19nbF9hcmVhX2dldF9lcnJvciAoR1RLX0dMX0FSRUEgKHdpZGdldCkpICE9IE5VTEwpCisgICAgIHJldHVybjsKKyAKKysjaWZkZWYgSEFWRV9PUEVOR0wKKyAgIGluaXRfYnVmZmVycyAoJnBvc2l0aW9uX2J1ZmZlciwgTlVMTCk7CisgICBpbml0X3NoYWRlcnMgKCZwcm9ncmFtLCAmbXZwX2xvY2F0aW9uKTsKKysjZW5kaWYKKyB9CisgCisgLyogV2Ugc2hvdWxkIHRlYXIgZG93biB0aGUgc3RhdGUgd2hlbiB1bnJlYWxpemluZyAqLworQEAgLTIzNiwxMCArMjQzLDEzIEBAIHVucmVhbGl6ZSAoR3RrV2lkZ2V0ICp3aWRnZXQpCisgICBpZiAoZ3RrX2dsX2FyZWFfZ2V0X2Vycm9yIChHVEtfR0xfQVJFQSAod2lkZ2V0KSkgIT0gTlVMTCkKKyAgICAgcmV0dXJuOworIAorKyNpZmRlZiBIQVZFX09QRU5HTAorICAgZ2xEZWxldGVCdWZmZXJzICgxLCAmcG9zaXRpb25fYnVmZmVyKTsKKyAgIGdsRGVsZXRlUHJvZ3JhbSAocHJvZ3JhbSk7CisrI2VuZGlmCisgfQorIAorKyNpZmRlZiBIQVZFX09QRU5HTAorIHN0YXRpYyB2b2lkCisgZHJhd190cmlhbmdsZSAodm9pZCkKKyB7CitAQCAtMjcyLDYgKzI4Miw3IEBAIGRyYXdfdHJpYW5nbGUgKHZvaWQpCisgICBnbEJpbmRCdWZmZXIgKEdMX0FSUkFZX0JVRkZFUiwgMCk7CisgICBnbFVzZVByb2dyYW0gKDApOworIH0KKysjZW5kaWYKKyAKKyBzdGF0aWMgZ2Jvb2xlYW4KKyByZW5kZXIgKEd0a0dMQXJlYSAgICAqYXJlYSwKK0BAIC0yODAsNiArMjkxLDcgQEAgcmVuZGVyIChHdGtHTEFyZWEgICAgKmFyZWEsCisgICBpZiAoZ3RrX2dsX2FyZWFfZ2V0X2Vycm9yIChhcmVhKSAhPSBOVUxMKQorICAgICByZXR1cm4gRkFMU0U7CisgCisrI2lmZGVmIEhBVkVfT1BFTkdMCisgICAvKiBDbGVhciB0aGUgdmlld3BvcnQgKi8KKyAgIGdsQ2xlYXJDb2xvciAoMC41LCAwLjUsIDAuNSwgMS4wKTsKKyAgIGdsQ2xlYXIgKEdMX0NPTE9SX0JVRkZFUl9CSVQpOworQEAgLTI4OSw2ICszMDEsNyBAQCByZW5kZXIgKEd0a0dMQXJlYSAgICAqYXJlYSwKKyAKKyAgIC8qIEZsdXNoIHRoZSBjb250ZW50cyBvZiB0aGUgcGlwZWxpbmUgKi8KKyAgIGdsRmx1c2ggKCk7CisrI2VuZGlmCisgCisgICByZXR1cm4gVFJVRTsKKyB9CitkaWZmIC0tZ2l0IGEvZG9jcy90b29scy9NYWtlZmlsZS5hbSBiL2RvY3MvdG9vbHMvTWFrZWZpbGUuYW0KK2luZGV4IDZhNmQ3MGYuLjVjZGYzMTIgMTAwNjQ0CistLS0gYS9kb2NzL3Rvb2xzL01ha2VmaWxlLmFtCisrKysgYi9kb2NzL3Rvb2xzL01ha2VmaWxlLmFtCitAQCAtOSwxMyArOSwxOCBAQCBBTV9DUFBGTEFHUyA9IFwKKyAJJChHVEtfREVCVUdfRkxBR1MpCQlcCisgCSQoR1RLX0RFUF9DRkxBR1MpCisgCisraWYgSEFWRV9PUEVOR0wKKytHRUFSU19MREFERCA9ICQodG9wX2J1aWxkZGlyKS90ZXN0cy9ndGtnZWFycy5vCisrZW5kaWYKKysKKyBERVBTID0gXAorLQkkKHRvcF9idWlsZGRpcikvZ3RrL2xpYmd0ay0zLmxhCisrCSQodG9wX2J1aWxkZGlyKS9ndGsvbGliZ3RrLTMubGEJXAorKwkkKEdFQVJTX0xEQUREKQorIAorIExEQUREUyA9IFwKKyAJJCh0b3BfYnVpbGRkaXIpL2d0ay9saWJndGstMy5sYQlcCisgCSQodG9wX2J1aWxkZGlyKS9nZGsvbGliZ2RrLTMubGEJXAorLQkkKHRvcF9idWlsZGRpcikvdGVzdHMvZ3RrZ2VhcnMubyBcCisrCSQoR0VBUlNfTERBREQpCQkJXAorIAkkKEdUS19ERVBfTElCUykJCQlcCisgCSQoR0RLX0RFUF9MSUJTKQkJCVwKKyAJLWxtCitkaWZmIC0tZ2l0IGEvZG9jcy90b29scy93aWRnZXRzLmMgYi9kb2NzL3Rvb2xzL3dpZGdldHMuYworaW5kZXggOTMyZGFmMS4uNTQyMzlkNiAxMDA2NDQKKy0tLSBhL2RvY3MvdG9vbHMvd2lkZ2V0cy5jCisrKysgYi9kb2NzL3Rvb2xzL3dpZGdldHMuYworQEAgLTE1MjYsOSArMTUyNiwxMSBAQCBjcmVhdGVfZ2xfYXJlYSAodm9pZCkKKyAgIHdpZGdldCA9IGd0a19mcmFtZV9uZXcgKE5VTEwpOworICAgZ3RrX2ZyYW1lX3NldF9zaGFkb3dfdHlwZSAoR1RLX0ZSQU1FICh3aWRnZXQpLCBHVEtfU0hBRE9XX0lOKTsKKyAKKysjaWZkZWYgSEFWRV9PUEVOR0wKKyAgIGdlYXJzID0gZ3RrX2dlYXJzX25ldyAoKTsKKyAgIGd0a19jb250YWluZXJfYWRkIChHVEtfQ09OVEFJTkVSICh3aWRnZXQpLCBnZWFycyk7CistIAorKyNlbmRpZgorKworICAgaW5mbyA9IG5ld193aWRnZXRfaW5mbyAoImdsYXJlYSIsIHdpZGdldCwgTUVESVVNKTsKKyAKKyAgIHJldHVybiBpbmZvOworZGlmZiAtLWdpdCBhL2dkay9nZGtkaXNwbGF5LmMgYi9nZGsvZ2RrZGlzcGxheS5jCitpbmRleCA2MTUwZWY3Li4yMjIzNjI5IDEwMDY0NAorLS0tIGEvZ2RrL2dka2Rpc3BsYXkuYworKysrIGIvZ2RrL2dka2Rpc3BsYXkuYworQEAgLTIzNjAsNyArMjM2MCw5IEBAIGdib29sZWFuCisgZ2RrX2Rpc3BsYXlfbWFrZV9nbF9jb250ZXh0X2N1cnJlbnQgKEdka0Rpc3BsYXkgICAqZGlzcGxheSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR2RrR0xDb250ZXh0ICpjb250ZXh0KQorIHsKKy0gIHJldHVybiBHREtfRElTUExBWV9HRVRfQ0xBU1MgKGRpc3BsYXkpLT5tYWtlX2dsX2NvbnRleHRfY3VycmVudCAoZGlzcGxheSwgY29udGV4dCk7CisrICBpZiAoR0RLX0RJU1BMQVlfR0VUX0NMQVNTIChkaXNwbGF5KS0+bWFrZV9nbF9jb250ZXh0X2N1cnJlbnQpCisrICAgIHJldHVybiBHREtfRElTUExBWV9HRVRfQ0xBU1MgKGRpc3BsYXkpLT5tYWtlX2dsX2NvbnRleHRfY3VycmVudCAoZGlzcGxheSwgY29udGV4dCk7CisrICByZXR1cm4gRkFMU0U7CisgfQorIAorIEdka1JlbmRlcmluZ01vZGUKK2RpZmYgLS1naXQgYS9nZGsvZ2RrZ2wuYyBiL2dkay9nZGtnbC5jCitpbmRleCBlOGJhNzcwLi5iYTdjODRiIDEwMDY0NAorLS0tIGEvZ2RrL2dka2dsLmMKKysrKyBiL2dkay9nZGtnbC5jCitAQCAtMjIsNyArMjIsOSBAQAorIAorICNpbmNsdWRlICJnZGtpbnRlcm5hbHMuaCIKKyAKKysjaWZkZWYgSEFWRV9PUEVOR0wKKyAjaW5jbHVkZSA8ZXBveHkvZ2wuaD4KKysjZW5kaWYKKyAjaW5jbHVkZSA8bWF0aC5oPgorICNpbmNsdWRlIDxzdHJpbmcuaD4KKyAKK0BAIC0zNiw2ICszOCw3IEBAIGdka19jYWlyb19zdXJmYWNlX21hcmtfYXNfZGlyZWN0IChjYWlyb19zdXJmYWNlX3QgKnN1cmZhY2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdfb2JqZWN0X3JlZiAod2luZG93KSwgIGdfb2JqZWN0X3VucmVmKTsKKyB9CisgCisrI2lmZGVmIEhBVkVfT1BFTkdMCisgc3RhdGljIGNvbnN0IGNoYXIgKgorIGdldF92ZXJ0ZXhfdHlwZV9uYW1lIChpbnQgdHlwZSkKKyB7CitAQCAtMjU0LDYgKzI1Nyw3IEBAIHVzZV90ZXh0dXJlX3JlY3RfcHJvZ3JhbSAoR2RrR0xDb250ZXh0UGFpbnREYXRhICpwYWludF9kYXRhKQorICAgICAgIGdsVXNlUHJvZ3JhbSAocGFpbnRfZGF0YS0+Y3VycmVudF9wcm9ncmFtLT5wcm9ncmFtKTsKKyAgICAgfQorIH0KKysjZW5kaWYKKyAKKyB2b2lkCisgZ2RrX2dsX3RleHR1cmVfcXVhZHMgKEdka0dMQ29udGV4dCAqcGFpbnRfY29udGV4dCwKK0BAIC0yNjEsNiArMjY1LDcgQEAgZ2RrX2dsX3RleHR1cmVfcXVhZHMgKEdka0dMQ29udGV4dCAqcGFpbnRfY29udGV4dCwKKyAgICAgICAgICAgICAgICAgICAgICAgaW50IG5fcXVhZHMsCisgICAgICAgICAgICAgICAgICAgICAgIEdka1RleHR1cmVkUXVhZCAqcXVhZHMpCisgeworKyNpZmRlZiBIQVZFX09QRU5HTAorICAgR2RrR0xDb250ZXh0UGFpbnREYXRhICpwYWludF9kYXRhICA9IGdka19nbF9jb250ZXh0X2dldF9wYWludF9kYXRhIChwYWludF9jb250ZXh0KTsKKyAgIEdka0dMQ29udGV4dFByb2dyYW0gKnByb2dyYW07CisgICBHZGtXaW5kb3cgKndpbmRvdyA9IGdka19nbF9jb250ZXh0X2dldF93aW5kb3cgKHBhaW50X2NvbnRleHQpOworQEAgLTMyNCw2ICszMjksNyBAQCBnZGtfZ2xfdGV4dHVyZV9xdWFkcyAoR2RrR0xDb250ZXh0ICpwYWludF9jb250ZXh0LAorIAorICAgZ2xEaXNhYmxlVmVydGV4QXR0cmliQXJyYXkgKHByb2dyYW0tPnBvc2l0aW9uX2xvY2F0aW9uKTsKKyAgIGdsRGlzYWJsZVZlcnRleEF0dHJpYkFycmF5IChwcm9ncmFtLT51dl9sb2NhdGlvbik7CisrI2VuZGlmCisgfQorIAorIC8qIHgseSx3aWR0aCxoZWlnaHQgZGVzY3JpYmVzIGEgcmVjdGFuZ2xlIGluIHRoZSBnbCByZW5kZXIgYnVmZmVyCitAQCAtMzcyLDYgKzM3OCw3IEBAIGdka19jYWlyb19kcmF3X2Zyb21fZ2wgKGNhaXJvX3QgICAgICAgICAgICAgICpjciwKKyAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgICAgICAgICAgICAgICAgICAgd2lkdGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgaW50ICAgICAgICAgICAgICAgICAgIGhlaWdodCkKKyB7CisrI2lmZGVmIEhBVkVfT1BFTkdMCisgICBHZGtHTENvbnRleHQgKnBhaW50X2NvbnRleHQ7CisgICBjYWlyb19zdXJmYWNlX3QgKmltYWdlOworICAgY2Fpcm9fbWF0cml4X3QgbWF0cml4OworQEAgLTY5Miw2ICs2OTksNyBAQCBnZGtfY2Fpcm9fZHJhd19mcm9tX2dsIChjYWlyb190ICAgICAgICAgICAgICAqY3IsCisgICBpZiAoY2xpcF9yZWdpb24pCisgICAgIGNhaXJvX3JlZ2lvbl9kZXN0cm95IChjbGlwX3JlZ2lvbik7CisgCisrI2VuZGlmCisgfQorIAorIC8qIFRoaXMgaXMgYWx3YXlzIGNhbGxlZCB3aXRoIHRoZSBwYWludCBjb250ZXh0IGN1cnJlbnQgKi8KK0BAIC02OTksNiArNzA3LDcgQEAgdm9pZAorIGdka19nbF90ZXh0dXJlX2Zyb21fc3VyZmFjZSAoY2Fpcm9fc3VyZmFjZV90ICpzdXJmYWNlLAorIAkJCSAgICAgY2Fpcm9fcmVnaW9uX3QgICpyZWdpb24pCisgeworKyNpZmRlZiBIQVZFX09QRU5HTAorICAgR2RrR0xDb250ZXh0ICpwYWludF9jb250ZXh0OworICAgY2Fpcm9fc3VyZmFjZV90ICppbWFnZTsKKyAgIGRvdWJsZSBkZXZpY2VfeF9vZmZzZXQsIGRldmljZV95X29mZnNldDsKK0BAIC03OTksNCArODA4LDUgQEAgZ2RrX2dsX3RleHR1cmVfZnJvbV9zdXJmYWNlIChjYWlyb19zdXJmYWNlX3QgKnN1cmZhY2UsCisgCisgICBnbERpc2FibGUgKEdMX1NDSVNTT1JfVEVTVCk7CisgICBnbERlbGV0ZVRleHR1cmVzICgxLCAmdGV4dHVyZV9pZCk7CisrI2VuZGlmCisgfQorZGlmZiAtLWdpdCBhL2dkay9nZGtnbGNvbnRleHQuYyBiL2dkay9nZGtnbGNvbnRleHQuYworaW5kZXggMDBhMzNlYi4uYmQ4YTc5MyAxMDA2NDQKKy0tLSBhL2dkay9nZGtnbGNvbnRleHQuYworKysrIGIvZ2RrL2dka2dsY29udGV4dC5jCitAQCAtODUsNyArODUsOSBAQAorICNpbmNsdWRlICJnZGtpbnRsLmgiCisgI2luY2x1ZGUgImdkay1wcml2YXRlLmgiCisgCisrI2lmZGVmIEhBVkVfT1BFTkdMCisgI2luY2x1ZGUgPGVwb3h5L2dsLmg+CisrI2VuZGlmCisgCisgdHlwZWRlZiBzdHJ1Y3QgeworICAgR2RrRGlzcGxheSAqZGlzcGxheTsKK0BAIC0yMzksNiArMjQxLDcgQEAgZ2RrX2dsX2NvbnRleHRfdXBsb2FkX3RleHR1cmUgKEdka0dMQ29udGV4dCAgICAqY29udGV4dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ICAgICAgICAgICAgICBoZWlnaHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGd1aW50ICAgICAgICAgICAgdGV4dHVyZV90YXJnZXQpCisgeworKyNpZmRlZiBIQVZFX09QRU5HTAorICAgZ19yZXR1cm5faWZfZmFpbCAoR0RLX0lTX0dMX0NPTlRFWFQgKGNvbnRleHQpKTsKKyAKKyAgIGdsUGl4ZWxTdG9yZWkgKEdMX1VOUEFDS19BTElHTk1FTlQsIDQpOworQEAgLTI0Niw2ICsyNDksNyBAQCBnZGtfZ2xfY29udGV4dF91cGxvYWRfdGV4dHVyZSAoR2RrR0xDb250ZXh0ICAgICpjb250ZXh0LAorICAgZ2xUZXhJbWFnZTJEICh0ZXh0dXJlX3RhcmdldCwgMCwgR0xfUkdCQSwgd2lkdGgsIGhlaWdodCwgMCwgR0xfQkdSQSwgR0xfVU5TSUdORURfSU5UXzhfOF84XzhfUkVWLAorICAgICAgICAgICAgICAgICBjYWlyb19pbWFnZV9zdXJmYWNlX2dldF9kYXRhIChpbWFnZV9zdXJmYWNlKSk7CisgICBnbFBpeGVsU3RvcmVpIChHTF9VTlBBQ0tfUk9XX0xFTkdUSCwgMCk7CisrI2VuZGlmCisgfQorIAorIHN0YXRpYyB2b2lkCitAQCAtNjM1LDYgKzYzOSw3IEBAIGdka19nbF9jb250ZXh0X3JlYWxpemUgKEdka0dMQ29udGV4dCAgKmNvbnRleHQsCisgc3RhdGljIHZvaWQKKyBnZGtfZ2xfY29udGV4dF9jaGVja19leHRlbnNpb25zIChHZGtHTENvbnRleHQgKmNvbnRleHQpCisgeworKyNpZmRlZiBIQVZFX09QRU5HTAorICAgR2RrR0xDb250ZXh0UHJpdmF0ZSAqcHJpdiA9IGdka19nbF9jb250ZXh0X2dldF9pbnN0YW5jZV9wcml2YXRlIChjb250ZXh0KTsKKyAgIGdib29sZWFuIGhhc19ucG90LCBoYXNfdGV4dHVyZV9yZWN0YW5nbGU7CisgCitAQCAtNjc3LDYgKzY4Miw3IEBAIGdka19nbF9jb250ZXh0X2NoZWNrX2V4dGVuc2lvbnMgKEdka0dMQ29udGV4dCAqY29udGV4dCkKKyAgICAgICAgICAgICAgICAgICAgICAgIHByaXYtPnVzZV90ZXh0dXJlX3JlY3RhbmdsZSA/ICJ5ZXMiIDogIm5vIikpOworIAorICAgcHJpdi0+ZXh0ZW5zaW9uc19jaGVja2VkID0gVFJVRTsKKysjZW5kaWYKKyB9CisgCisgLyoqCitkaWZmIC0tZ2l0IGEvZ2RrL2dka3dpbmRvdy5jIGIvZ2RrL2dka3dpbmRvdy5jCitpbmRleCA2NmViYjlkLi43NGEwYzNhIDEwMDY0NAorLS0tIGEvZ2RrL2dka3dpbmRvdy5jCisrKysgYi9nZGsvZ2Rrd2luZG93LmMKK0BAIC00NCw3ICs0NCw5IEBACisgCisgI2luY2x1ZGUgPG1hdGguaD4KKyAKKysjaWZkZWYgSEFWRV9PUEVOR0wKKyAjaW5jbHVkZSA8ZXBveHkvZ2wuaD4KKysjZW5kaWYKKyAKKyAvKiBmb3IgdGhlIHVzZSBvZiByb3VuZCgpICovCisgI2luY2x1ZGUgImZhbGxiYWNrLWM4OS5jIgorQEAgLTI3NTksNiArMjc2MSwxMyBAQCBnZGtfd2luZG93X2dldF9wYWludF9nbF9jb250ZXh0IChHZGtXaW5kb3cgICp3aW5kb3csCisgeworICAgR0Vycm9yICppbnRlcm5hbF9lcnJvciA9IE5VTEw7CisgCisrI2lmbmRlZiBIQVZFX09QRU5HTAorKyAgZ19zZXRfZXJyb3JfbGl0ZXJhbCAoZXJyb3IsIEdES19HTF9FUlJPUiwKKysgICAgICAgICAgICAgICAgICAgICAgIEdES19HTF9FUlJPUl9OT1RfQVZBSUxBQkxFLAorKyAgICAgICAgICAgICAgICAgICAgICAgXygiR0wgc3VwcG9ydCBkaXNhYmxlZCB3aXRoIC0tZGlzYWJsZS1vcGVuZ2wiKSk7CisrICByZXR1cm4gTlVMTDsKKysjZW5kaWYKKysKKyAgIGlmIChfZ2RrX2dsX2ZsYWdzICYgR0RLX0dMX0RJU0FCTEUpCisgICAgIHsKKyAgICAgICBnX3NldF9lcnJvcl9saXRlcmFsIChlcnJvciwgR0RLX0dMX0VSUk9SLAorQEAgLTI5NTUsNiArMjk2NCw3IEBAIGdka193aW5kb3dfYmVnaW5fcGFpbnRfcmVnaW9uIChHZGtXaW5kb3cgICAgICAgKndpbmRvdywKKyAgICAgICAgIH0KKyAgICAgICBlbHNlCisgICAgICAgICB7CisrI2lmZGVmIEhBVkVfT1BFTkdMCisgCSAgZ2RrX2dsX2NvbnRleHRfbWFrZV9jdXJyZW50IChjb250ZXh0KTsKKyAgICAgICAgICAgLyogV2l0aCBnbCB3ZSBhbHdheXMgbmVlZCBhIHN1cmZhY2UgdG8gY29tYmluZSB0aGUgZ2wKKyAgICAgICAgICAgICAgZHJhd2luZyB3aXRoIHRoZSBuYXRpdmUgZHJhd2luZy4gKi8KK0BAIC0yOTY5LDYgKzI5NzksNyBAQCBnZGtfd2luZG93X2JlZ2luX3BhaW50X3JlZ2lvbiAoR2RrV2luZG93ICAgICAgICp3aW5kb3csCisgICAgICAgICAgIGdsQmxlbmRGdW5jIChHTF9PTkUsIEdMX09ORV9NSU5VU19TUkNfQUxQSEEpOworIAorICAgICAgICAgICBnbFZpZXdwb3J0ICgwLCAwLCB3dywgd2gpOworKyNlbmRpZgorICAgICAgICAgfQorICAgICB9CisgCitAQCAtMzExNyw2ICszMTI4LDcgQEAgZ2RrX3dpbmRvd19lbmRfcGFpbnQgKEdka1dpbmRvdyAqd2luZG93KQorIAorICAgICAgICAgICBnZGtfZ2xfY29udGV4dF9tYWtlX2N1cnJlbnQgKHdpbmRvdy0+Z2xfcGFpbnRfY29udGV4dCk7CisgCisrI2lmZGVmIEhBVkVfT1BFTkdMCisgICAgICAgICAgIGlmICghY2Fpcm9fcmVnaW9uX2lzX2VtcHR5IChvcGFxdWVfcmVnaW9uKSkKKyAgICAgICAgICAgICBnZGtfZ2xfdGV4dHVyZV9mcm9tX3N1cmZhY2UgKHdpbmRvdy0+Y3VycmVudF9wYWludC5zdXJmYWNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3BhcXVlX3JlZ2lvbik7CitAQCAtMzEyNyw2ICszMTM5LDcgQEAgZ2RrX3dpbmRvd19lbmRfcGFpbnQgKEdka1dpbmRvdyAqd2luZG93KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aW5kb3ctPmN1cnJlbnRfcGFpbnQubmVlZF9ibGVuZF9yZWdpb24pOworICAgICAgICAgICAgICAgZ2xEaXNhYmxlKEdMX0JMRU5EKTsKKyAgICAgICAgICAgICB9CisrI2VuZGlmCisgCisgICAgICAgICAgIGNhaXJvX3JlZ2lvbl9kZXN0cm95IChvcGFxdWVfcmVnaW9uKTsKKyAKK2RpZmYgLS1naXQgYS9nZGsveDExL01ha2VmaWxlLmFtIGIvZ2RrL3gxMS9NYWtlZmlsZS5hbQoraW5kZXggYzQ4OGEzMS4uNGNlM2MwNyAxMDA2NDQKKy0tLSBhL2dkay94MTEvTWFrZWZpbGUuYW0KKysrKyBiL2dkay94MTEvTWFrZWZpbGUuYW0KK0BAIC0zOSw4ICszOSw2IEBAIGxpYmdka194MTFfbGFfU09VUkNFUyA9IAlcCisgCWdka2V2ZW50dHJhbnNsYXRvci5jCVwKKyAJZ2RrZXZlbnR0cmFuc2xhdG9yLmgJXAorIAlnZGtnZW9tZXRyeS14MTEuYyAgCVwKKy0JZ2RrZ2xjb250ZXh0LXgxMS5jCVwKKy0JZ2RrZ2xjb250ZXh0LXgxMS5oCVwKKyAJZ2Rra2V5cy14MTEuYwkJXAorIAlnZGttYWluLXgxMS5jCQlcCisgCWdka3Byb3BlcnR5LXgxMS5jCVwKK0BAIC01MywxNCArNTEsMzIgQEAgbGliZ2RrX3gxMV9sYV9TT1VSQ0VTID0gCVwKKyAJZ2Rrd2luZG93LXgxMS5oCQlcCisgCWdka3hmdGRlZmF1bHRzLmMJXAorIAlnZGt4aWQuYwkJXAorLQlnZGt4LmgJCQlcCisgCWdka3ByaXZhdGUteDExLmgJXAorIAl4c2V0dGluZ3MtY2xpZW50LmgJXAorIAl4c2V0dGluZ3MtY2xpZW50LmMKKyAKKytpZiBIQVZFX09QRU5HTAorK2xpYmdka194MTFfbGFfU09VUkNFUyArPSAgICAgICAgXAorKwlnZGtnbGNvbnRleHQteDExLmMJXAorKwlnZGtnbGNvbnRleHQteDExLmgKKytlbmRpZgorKworIGxpYmdka2luY2x1ZGVfSEVBREVSUyA9IAlcCisgCWdka3guaAorIAorK2lmIEhBVkVfT1BFTkdMCisrR0RLWF9IRUFERVIgPSBnZGt4LXdpdGgtZ2wtY29udGV4dC5oCisrZWxzZQorK0dES1hfSEVBREVSID0gZ2RreC13aXRob3V0LWdsLWNvbnRleHQuaAorK2VuZGlmCisrCisrQlVJTFRfU09VUkNFUyA9IGdka3guaAorKworKy5QSE9OWTogZ2RreC5oCisrZ2RreC5oOgorKwkkKEFNX1ZfR0VOKSBjZCAkKHNyY2RpcikgXAorKwkmJiAoY21wIC1zICQoR0RLWF9IRUFERVIpIGdka3guaCB8fCBjcCAkKEdES1hfSEVBREVSKSBnZGt4LmggKQorKworIGxpYmdka3gxMWluY2x1ZGVfSEVBREVSUyA9IAlcCisgCWdka3gtYXV0b2NsZWFudXBzLmgJXAorIAlnZGt4MTFhcHBsYXVuY2hjb250ZXh0LmggXAorQEAgLTc0LDcgKzkwLDYgQEAgbGliZ2RreDExaW5jbHVkZV9IRUFERVJTID0gCVwKKyAJZ2RreDExZGlzcGxheS5oCQlcCisgCWdka3gxMWRpc3BsYXltYW5hZ2VyLmgJXAorIAlnZGt4MTFkbmQuaAkJXAorLQlnZGt4MTFnbGNvbnRleHQuaAlcCisgCWdka3gxMWtleXMuaAkJXAorIAlnZGt4MTFwcm9wZXJ0eS5oCVwKKyAJZ2RreDExc2NyZWVuLmgJCVwKK0BAIC04Myw5ICs5OCwxNiBAQCBsaWJnZGt4MTFpbmNsdWRlX0hFQURFUlMgPSAJXAorIAlnZGt4MTF2aXN1YWwuaAkJXAorIAlnZGt4MTF3aW5kb3cuaAorIAorK2lmIEhBVkVfT1BFTkdMCisrbGliZ2RreDExaW5jbHVkZV9IRUFERVJTICs9IGdka3gxMWdsY29udGV4dC5oCisrZW5kaWYKKysKKyAjIFdlIG5lZWQgdG8gaW5jbHVkZSBhbGwgdGhlc2UgQyBmaWxlcyBoZXJlIHNpbmNlIHRoZSBjb25kaXRpb25hbHMKKyAjIGRvbid0IHNlZW0gdG8gYmUgY29ycmVjdGx5IGV4cGFuZGVkIGZvciB0aGUgZGlzdCBmaWxlcy4KKyBFWFRSQV9ESVNUICs9IAkJCVwKKysJZ2RreC5oCQkJXAorIAlnZGtzZXR0aW5ncy5jCisgCisrTUFJTlRBSU5FUkNMRUFORklMRVMgPSBnZGt4LmgKKysKKyAtaW5jbHVkZSAkKHRvcF9zcmNkaXIpL2dpdC5taworZGlmZiAtLWdpdCBhL2dkay94MTEvZ2RrZGlzcGxheS14MTEuYyBiL2dkay94MTEvZ2RrZGlzcGxheS14MTEuYworaW5kZXggZGU5MWM2NC4uNDJkNTBmNiAxMDA2NDQKKy0tLSBhL2dkay94MTEvZ2RrZGlzcGxheS14MTEuYworKysrIGIvZ2RrL3gxMS9nZGtkaXNwbGF5LXgxMS5jCitAQCAtMzcsNyArMzcsOSBAQAorICNpbmNsdWRlICJnZGtkaXNwbGF5LXgxMS5oIgorICNpbmNsdWRlICJnZGtwcml2YXRlLXgxMS5oIgorICNpbmNsdWRlICJnZGtzY3JlZW4teDExLmgiCisrI2lmZGVmIEhBVkVfT1BFTkdMCisgI2luY2x1ZGUgImdka2dsY29udGV4dC14MTEuaCIKKysjZW5kaWYKKyAjaW5jbHVkZSAiZ2RrLXByaXZhdGUuaCIKKyAKKyAjaW5jbHVkZSA8Z2xpYi5oPgorQEAgLTI5NTksNyArMjk2MSw5IEBAIGdka194MTFfZGlzcGxheV9jbGFzc19pbml0IChHZGtYMTFEaXNwbGF5Q2xhc3MgKiBjbGFzcykKKyAgIGRpc3BsYXlfY2xhc3MtPnRleHRfcHJvcGVydHlfdG9fdXRmOF9saXN0ID0gX2dka194MTFfZGlzcGxheV90ZXh0X3Byb3BlcnR5X3RvX3V0ZjhfbGlzdDsKKyAgIGRpc3BsYXlfY2xhc3MtPnV0ZjhfdG9fc3RyaW5nX3RhcmdldCA9IF9nZGtfeDExX2Rpc3BsYXlfdXRmOF90b19zdHJpbmdfdGFyZ2V0OworIAorLSAgZGlzcGxheV9jbGFzcy0+bWFrZV9nbF9jb250ZXh0X2N1cnJlbnQgPSBnZGtfeDExX2Rpc3BsYXlfbWFrZV9nbF9jb250ZXh0X2N1cnJlbnQ7CisrI2lmZGVmIEhBVkVfT1BFTkdMCisrICAgZGlzcGxheV9jbGFzcy0+bWFrZV9nbF9jb250ZXh0X2N1cnJlbnQgPSBnZGtfeDExX2Rpc3BsYXlfbWFrZV9nbF9jb250ZXh0X2N1cnJlbnQ7CisrI2VuZGlmCisgCisgICBkaXNwbGF5X2NsYXNzLT5nZXRfZGVmYXVsdF9zZWF0ID0gZ2RrX3gxMV9kaXNwbGF5X2dldF9kZWZhdWx0X3NlYXQ7CisgCitkaWZmIC0tZ2l0IGEvZ2RrL3gxMS9nZGtzY3JlZW4teDExLmMgYi9nZGsveDExL2dka3NjcmVlbi14MTEuYworaW5kZXggOWQ4ZWQyMC4uYmQ0NmIwMCAxMDA2NDQKKy0tLSBhL2dkay94MTEvZ2Rrc2NyZWVuLXgxMS5jCisrKysgYi9nZGsveDExL2dka3NjcmVlbi14MTEuYworQEAgLTE5NjgsMyArMTk2OCw4IEBAIGdka194MTFfc2NyZWVuX2dldF9jdXJyZW50X2Rlc2t0b3AgKEdka1NjcmVlbiAqc2NyZWVuKQorIHsKKyAgIHJldHVybiBnZXRfbmV0d21fY2FyZGluYWxfcHJvcGVydHkgKHNjcmVlbiwgIl9ORVRfQ1VSUkVOVF9ERVNLVE9QIik7CisgfQorKworKyNpZm5kZWYgSEFWRV9PUEVOR0wKKysvKiBGdW5jdGlvbiBmcm9tIGluIGdkay94MTEvZ2RrZ2xjb250ZXh0LXgxMS5jICovCisrdm9pZCBfZ2RrX3gxMV9zY3JlZW5fdXBkYXRlX3Zpc3VhbHNfZm9yX2dsIChHZGtTY3JlZW4gKnNjcmVlbikge30KKysjZW5kaWYKK2RpZmYgLS1naXQgYS9nZGsveDExL2dka3dpbmRvdy14MTEuYyBiL2dkay94MTEvZ2Rrd2luZG93LXgxMS5jCitpbmRleCA5ZWQwODdhLi4zMGQ2ZWI3IDEwMDY0NAorLS0tIGEvZ2RrL3gxMS9nZGt3aW5kb3cteDExLmMKKysrKyBiL2dkay94MTEvZ2Rrd2luZG93LXgxMS5jCitAQCAtMzYsNyArMzYsOSBAQAorICNpbmNsdWRlICJnZGthc3luYy5oIgorICNpbmNsdWRlICJnZGtldmVudHNvdXJjZS5oIgorICNpbmNsdWRlICJnZGtkaXNwbGF5LXgxMS5oIgorKyNpZmRlZiBIQVZFX09QRU5HTAorICNpbmNsdWRlICJnZGtnbGNvbnRleHQteDExLmgiCisrI2VuZGlmCisgI2luY2x1ZGUgImdka3ByaXZhdGUteDExLmgiCisgI2luY2x1ZGUgImdkay1wcml2YXRlLmgiCisgCitAQCAtNTc4Miw3ICs1Nzg0LDkgQEAgZ2RrX3dpbmRvd19pbXBsX3gxMV9jbGFzc19pbml0IChHZGtXaW5kb3dJbXBsWDExQ2xhc3MgKmtsYXNzKQorICAgaW1wbF9jbGFzcy0+c2V0X29wYXF1ZV9yZWdpb24gPSBnZGtfeDExX3dpbmRvd19zZXRfb3BhcXVlX3JlZ2lvbjsKKyAgIGltcGxfY2xhc3MtPnNldF9zaGFkb3dfd2lkdGggPSBnZGtfeDExX3dpbmRvd19zZXRfc2hhZG93X3dpZHRoOworICAgaW1wbF9jbGFzcy0+c2hvd193aW5kb3dfbWVudSA9IGdka194MTFfd2luZG93X3Nob3dfd2luZG93X21lbnU7CisrI2lmZGVmIEhBVkVfT1BFTkdMCisgICBpbXBsX2NsYXNzLT5jcmVhdGVfZ2xfY29udGV4dCA9IGdka194MTFfd2luZG93X2NyZWF0ZV9nbF9jb250ZXh0OworICAgaW1wbF9jbGFzcy0+aW52YWxpZGF0ZV9mb3JfbmV3X2ZyYW1lID0gZ2RrX3gxMV93aW5kb3dfaW52YWxpZGF0ZV9mb3JfbmV3X2ZyYW1lOworKyNlbmRpZgorICAgaW1wbF9jbGFzcy0+Z2V0X3Vuc2NhbGVkX3NpemUgPSBnZGtfeDExX3dpbmRvd19nZXRfdW5zY2FsZWRfc2l6ZTsKKyB9CitkaWZmIC0tZ2l0IGEvZ2RrL3gxMS9nZGt4LWF1dG9jbGVhbnVwcy5oIGIvZ2RrL3gxMS9nZGt4LWF1dG9jbGVhbnVwcy5oCitpbmRleCBlZGIwZWE3Li5hMzE3ZDYxIDEwMDY0NAorLS0tIGEvZ2RrL3gxMS9nZGt4LWF1dG9jbGVhbnVwcy5oCisrKysgYi9nZGsveDExL2dka3gtYXV0b2NsZWFudXBzLmgKK0BAIC0zMCw3ICszMCw5IEBAIEdfREVGSU5FX0FVVE9QVFJfQ0xFQU5VUF9GVU5DKEdka1gxMURldmljZVhJMiwgZ19vYmplY3RfdW5yZWYpCisgR19ERUZJTkVfQVVUT1BUUl9DTEVBTlVQX0ZVTkMoR2RrWDExRGlzcGxheSwgZ19vYmplY3RfdW5yZWYpCisgR19ERUZJTkVfQVVUT1BUUl9DTEVBTlVQX0ZVTkMoR2RrWDExRGlzcGxheU1hbmFnZXIsIGdfb2JqZWN0X3VucmVmKQorIEdfREVGSU5FX0FVVE9QVFJfQ0xFQU5VUF9GVU5DKEdka1gxMURyYWdDb250ZXh0LCBnX29iamVjdF91bnJlZikKKysjaWZkZWYgSEFWRV9PUEVOR0wKKyBHX0RFRklORV9BVVRPUFRSX0NMRUFOVVBfRlVOQyhHZGtYMTFHTENvbnRleHQsIGdfb2JqZWN0X3VucmVmKQorKyNlbmRpZgorIEdfREVGSU5FX0FVVE9QVFJfQ0xFQU5VUF9GVU5DKEdka1gxMUtleW1hcCwgZ19vYmplY3RfdW5yZWYpCisgR19ERUZJTkVfQVVUT1BUUl9DTEVBTlVQX0ZVTkMoR2RrWDExU2NyZWVuLCBnX29iamVjdF91bnJlZikKKyBHX0RFRklORV9BVVRPUFRSX0NMRUFOVVBfRlVOQyhHZGtYMTFWaXN1YWwsIGdfb2JqZWN0X3VucmVmKQorZGlmZiAtLWdpdCBhL2dkay94MTEvZ2RreC13aXRoLWdsLWNvbnRleHQuaCBiL2dkay94MTEvZ2RreC13aXRoLWdsLWNvbnRleHQuaAorbmV3IGZpbGUgbW9kZSAxMDA2NDQKK2luZGV4IDAwMDAwMDAuLmFlMDVmYTYKKy0tLSAvZGV2L251bGwKKysrKyBiL2dkay94MTEvZ2RreC13aXRoLWdsLWNvbnRleHQuaAorQEAgLTAsMCArMSw1OSBAQAorKy8qIEdESyAtIFRoZSBHSU1QIERyYXdpbmcgS2l0CisrICogQ29weXJpZ2h0IChDKSAxOTk1LTE5OTcgUGV0ZXIgTWF0dGlzLCBTcGVuY2VyIEtpbWJhbGwgYW5kIEpvc2ggTWFjRG9uYWxkCisrICoKKysgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisrICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKysgKgorKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisrICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKysgKiBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorKyAqCisrICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworKyAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnkuIElmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKysgKi8KKysKKysvKgorKyAqIE1vZGlmaWVkIGJ5IHRoZSBHVEsrIFRlYW0gYW5kIG90aGVycyAxOTk3LTIwMDAuICBTZWUgdGhlIEFVVEhPUlMKKysgKiBmaWxlIGZvciBhIGxpc3Qgb2YgcGVvcGxlIG9uIHRoZSBHVEsrIFRlYW0uICBTZWUgdGhlIENoYW5nZUxvZworKyAqIGZpbGVzIGZvciBhIGxpc3Qgb2YgY2hhbmdlcy4gIFRoZXNlIGZpbGVzIGFyZSBkaXN0cmlidXRlZCB3aXRoCisrICogR1RLKyBhdCBmdHA6Ly9mdHAuZ3RrLm9yZy9wdWIvZ3RrLy4KKysgKi8KKysKKysjaWZuZGVmIF9fR0RLX1hfSF9fCisrI2RlZmluZSBfX0dES19YX0hfXworKworKyNpbmNsdWRlIDxnZGsvZ2RrLmg+CisrCisrI2luY2x1ZGUgPFgxMS9YbGliLmg+CisrI2luY2x1ZGUgPFgxMS9YdXRpbC5oPgorKworKyNkZWZpbmUgX19HREtYX0hfSU5TSURFX18KKysKKysjaW5jbHVkZSA8Z2RrL3gxMS9nZGt4MTFhcHBsYXVuY2hjb250ZXh0Lmg+CisrI2luY2x1ZGUgPGdkay94MTEvZ2RreDExY3Vyc29yLmg+CisrI2luY2x1ZGUgPGdkay94MTEvZ2RreDExZGV2aWNlLmg+CisrI2luY2x1ZGUgPGdkay94MTEvZ2RreDExZGV2aWNlLWNvcmUuaD4KKysjaW5jbHVkZSA8Z2RrL3gxMS9nZGt4MTFkZXZpY2UteGkyLmg+CisrI2luY2x1ZGUgPGdkay94MTEvZ2RreDExZGV2aWNlbWFuYWdlci5oPgorKyNpbmNsdWRlIDxnZGsveDExL2dka3gxMWRldmljZW1hbmFnZXItY29yZS5oPgorKyNpbmNsdWRlIDxnZGsveDExL2dka3gxMWRldmljZW1hbmFnZXIteGkyLmg+CisrI2luY2x1ZGUgPGdkay94MTEvZ2RreDExZGlzcGxheS5oPgorKyNpbmNsdWRlIDxnZGsveDExL2dka3gxMWRpc3BsYXltYW5hZ2VyLmg+CisrI2luY2x1ZGUgPGdkay94MTEvZ2RreDExZG5kLmg+CisrI2luY2x1ZGUgPGdkay94MTEvZ2RreDExZ2xjb250ZXh0Lmg+CisrI2luY2x1ZGUgPGdkay94MTEvZ2RreDExa2V5cy5oPgorKyNpbmNsdWRlIDxnZGsveDExL2dka3gxMXByb3BlcnR5Lmg+CisrI2luY2x1ZGUgPGdkay94MTEvZ2RreDExc2NyZWVuLmg+CisrI2luY2x1ZGUgPGdkay94MTEvZ2RreDExc2VsZWN0aW9uLmg+CisrI2luY2x1ZGUgPGdkay94MTEvZ2RreDExdXRpbHMuaD4KKysjaW5jbHVkZSA8Z2RrL3gxMS9nZGt4MTF2aXN1YWwuaD4KKysjaW5jbHVkZSA8Z2RrL3gxMS9nZGt4MTF3aW5kb3cuaD4KKysKKysjaW5jbHVkZSA8Z2RrL3gxMS9nZGt4LWF1dG9jbGVhbnVwcy5oPgorKworKyN1bmRlZiBfX0dES1hfSF9JTlNJREVfXworKworKyNlbmRpZiAvKiBfX0dES19YX0hfXyAqLworZGlmZiAtLWdpdCBhL2dkay94MTEvZ2RreC13aXRob3V0LWdsLWNvbnRleHQuaCBiL2dkay94MTEvZ2RreC13aXRob3V0LWdsLWNvbnRleHQuaAorbmV3IGZpbGUgbW9kZSAxMDA2NDQKK2luZGV4IDAwMDAwMDAuLmM5ZTI2MTcKKy0tLSAvZGV2L251bGwKKysrKyBiL2dkay94MTEvZ2RreC13aXRob3V0LWdsLWNvbnRleHQuaAorQEAgLTAsMCArMSw1OCBAQAorKy8qIEdESyAtIFRoZSBHSU1QIERyYXdpbmcgS2l0CisrICogQ29weXJpZ2h0IChDKSAxOTk1LTE5OTcgUGV0ZXIgTWF0dGlzLCBTcGVuY2VyIEtpbWJhbGwgYW5kIEpvc2ggTWFjRG9uYWxkCisrICoKKysgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisrICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKysgKgorKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisrICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKysgKiBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorKyAqCisrICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworKyAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnkuIElmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKysgKi8KKysKKysvKgorKyAqIE1vZGlmaWVkIGJ5IHRoZSBHVEsrIFRlYW0gYW5kIG90aGVycyAxOTk3LTIwMDAuICBTZWUgdGhlIEFVVEhPUlMKKysgKiBmaWxlIGZvciBhIGxpc3Qgb2YgcGVvcGxlIG9uIHRoZSBHVEsrIFRlYW0uICBTZWUgdGhlIENoYW5nZUxvZworKyAqIGZpbGVzIGZvciBhIGxpc3Qgb2YgY2hhbmdlcy4gIFRoZXNlIGZpbGVzIGFyZSBkaXN0cmlidXRlZCB3aXRoCisrICogR1RLKyBhdCBmdHA6Ly9mdHAuZ3RrLm9yZy9wdWIvZ3RrLy4KKysgKi8KKysKKysjaWZuZGVmIF9fR0RLX1hfSF9fCisrI2RlZmluZSBfX0dES19YX0hfXworKworKyNpbmNsdWRlIDxnZGsvZ2RrLmg+CisrCisrI2luY2x1ZGUgPFgxMS9YbGliLmg+CisrI2luY2x1ZGUgPFgxMS9YdXRpbC5oPgorKworKyNkZWZpbmUgX19HREtYX0hfSU5TSURFX18KKysKKysjaW5jbHVkZSA8Z2RrL3gxMS9nZGt4MTFhcHBsYXVuY2hjb250ZXh0Lmg+CisrI2luY2x1ZGUgPGdkay94MTEvZ2RreDExY3Vyc29yLmg+CisrI2luY2x1ZGUgPGdkay94MTEvZ2RreDExZGV2aWNlLmg+CisrI2luY2x1ZGUgPGdkay94MTEvZ2RreDExZGV2aWNlLWNvcmUuaD4KKysjaW5jbHVkZSA8Z2RrL3gxMS9nZGt4MTFkZXZpY2UteGkyLmg+CisrI2luY2x1ZGUgPGdkay94MTEvZ2RreDExZGV2aWNlbWFuYWdlci5oPgorKyNpbmNsdWRlIDxnZGsveDExL2dka3gxMWRldmljZW1hbmFnZXItY29yZS5oPgorKyNpbmNsdWRlIDxnZGsveDExL2dka3gxMWRldmljZW1hbmFnZXIteGkyLmg+CisrI2luY2x1ZGUgPGdkay94MTEvZ2RreDExZGlzcGxheS5oPgorKyNpbmNsdWRlIDxnZGsveDExL2dka3gxMWRpc3BsYXltYW5hZ2VyLmg+CisrI2luY2x1ZGUgPGdkay94MTEvZ2RreDExZG5kLmg+CisrI2luY2x1ZGUgPGdkay94MTEvZ2RreDExa2V5cy5oPgorKyNpbmNsdWRlIDxnZGsveDExL2dka3gxMXByb3BlcnR5Lmg+CisrI2luY2x1ZGUgPGdkay94MTEvZ2RreDExc2NyZWVuLmg+CisrI2luY2x1ZGUgPGdkay94MTEvZ2RreDExc2VsZWN0aW9uLmg+CisrI2luY2x1ZGUgPGdkay94MTEvZ2RreDExdXRpbHMuaD4KKysjaW5jbHVkZSA8Z2RrL3gxMS9nZGt4MTF2aXN1YWwuaD4KKysjaW5jbHVkZSA8Z2RrL3gxMS9nZGt4MTF3aW5kb3cuaD4KKysKKysjaW5jbHVkZSA8Z2RrL3gxMS9nZGt4LWF1dG9jbGVhbnVwcy5oPgorKworKyN1bmRlZiBfX0dES1hfSF9JTlNJREVfXworKworKyNlbmRpZiAvKiBfX0dES19YX0hfXyAqLworZGlmZiAtLWdpdCBhL2dkay94MTEvZ2RreC5oIGIvZ2RrL3gxMS9nZGt4LmgKK2RlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAoraW5kZXggYWUwNWZhNi4uMDAwMDAwMAorLS0tIGEvZ2RrL3gxMS9nZGt4LmgKKysrKyAvZGV2L251bGwKK0BAIC0xLDU5ICswLDAgQEAKKy0vKiBHREsgLSBUaGUgR0lNUCBEcmF3aW5nIEtpdAorLSAqIENvcHlyaWdodCAoQykgMTk5NS0xOTk3IFBldGVyIE1hdHRpcywgU3BlbmNlciBLaW1iYWxsIGFuZCBKb3NoIE1hY0RvbmFsZAorLSAqCistICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKy0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKy0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCistICoKKy0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKy0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCistICogTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKy0gKgorLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKy0gKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5LiBJZiBub3QsIHNlZSA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCistICovCistCistLyoKKy0gKiBNb2RpZmllZCBieSB0aGUgR1RLKyBUZWFtIGFuZCBvdGhlcnMgMTk5Ny0yMDAwLiAgU2VlIHRoZSBBVVRIT1JTCistICogZmlsZSBmb3IgYSBsaXN0IG9mIHBlb3BsZSBvbiB0aGUgR1RLKyBUZWFtLiAgU2VlIHRoZSBDaGFuZ2VMb2cKKy0gKiBmaWxlcyBmb3IgYSBsaXN0IG9mIGNoYW5nZXMuICBUaGVzZSBmaWxlcyBhcmUgZGlzdHJpYnV0ZWQgd2l0aAorLSAqIEdUSysgYXQgZnRwOi8vZnRwLmd0ay5vcmcvcHViL2d0ay8uCistICovCistCistI2lmbmRlZiBfX0dES19YX0hfXworLSNkZWZpbmUgX19HREtfWF9IX18KKy0KKy0jaW5jbHVkZSA8Z2RrL2dkay5oPgorLQorLSNpbmNsdWRlIDxYMTEvWGxpYi5oPgorLSNpbmNsdWRlIDxYMTEvWHV0aWwuaD4KKy0KKy0jZGVmaW5lIF9fR0RLWF9IX0lOU0lERV9fCistCistI2luY2x1ZGUgPGdkay94MTEvZ2RreDExYXBwbGF1bmNoY29udGV4dC5oPgorLSNpbmNsdWRlIDxnZGsveDExL2dka3gxMWN1cnNvci5oPgorLSNpbmNsdWRlIDxnZGsveDExL2dka3gxMWRldmljZS5oPgorLSNpbmNsdWRlIDxnZGsveDExL2dka3gxMWRldmljZS1jb3JlLmg+CistI2luY2x1ZGUgPGdkay94MTEvZ2RreDExZGV2aWNlLXhpMi5oPgorLSNpbmNsdWRlIDxnZGsveDExL2dka3gxMWRldmljZW1hbmFnZXIuaD4KKy0jaW5jbHVkZSA8Z2RrL3gxMS9nZGt4MTFkZXZpY2VtYW5hZ2VyLWNvcmUuaD4KKy0jaW5jbHVkZSA8Z2RrL3gxMS9nZGt4MTFkZXZpY2VtYW5hZ2VyLXhpMi5oPgorLSNpbmNsdWRlIDxnZGsveDExL2dka3gxMWRpc3BsYXkuaD4KKy0jaW5jbHVkZSA8Z2RrL3gxMS9nZGt4MTFkaXNwbGF5bWFuYWdlci5oPgorLSNpbmNsdWRlIDxnZGsveDExL2dka3gxMWRuZC5oPgorLSNpbmNsdWRlIDxnZGsveDExL2dka3gxMWdsY29udGV4dC5oPgorLSNpbmNsdWRlIDxnZGsveDExL2dka3gxMWtleXMuaD4KKy0jaW5jbHVkZSA8Z2RrL3gxMS9nZGt4MTFwcm9wZXJ0eS5oPgorLSNpbmNsdWRlIDxnZGsveDExL2dka3gxMXNjcmVlbi5oPgorLSNpbmNsdWRlIDxnZGsveDExL2dka3gxMXNlbGVjdGlvbi5oPgorLSNpbmNsdWRlIDxnZGsveDExL2dka3gxMXV0aWxzLmg+CistI2luY2x1ZGUgPGdkay94MTEvZ2RreDExdmlzdWFsLmg+CistI2luY2x1ZGUgPGdkay94MTEvZ2RreDExd2luZG93Lmg+CistCistI2luY2x1ZGUgPGdkay94MTEvZ2RreC1hdXRvY2xlYW51cHMuaD4KKy0KKy0jdW5kZWYgX19HREtYX0hfSU5TSURFX18KKy0KKy0jZW5kaWYgLyogX19HREtfWF9IX18gKi8KK2RpZmYgLS1naXQgYS9ndGsvTWFrZWZpbGUuYW0gYi9ndGsvTWFrZWZpbGUuYW0KK2luZGV4IDZhNTNhMmIuLjQ5YTM1ZTYgMTAwNjQ0CistLS0gYS9ndGsvTWFrZWZpbGUuYW0KKysrKyBiL2d0ay9NYWtlZmlsZS5hbQorQEAgLTEzNTEsMTQgKzEzNTEsMTMgQEAgZ3RrcHJpdmF0ZXR5cGVidWlsdGlucy5jOiAkKGd0a19wcml2YXRlX3R5cGVfaF9zb3VyY2VzKSAgZ3RrcHJpdmF0ZXR5cGVidWlsdGlucy4KKyAJJiYgY3AgeGdlbi1ncHRiYyBndGtwcml2YXRldHlwZWJ1aWx0aW5zLmMgIFwKKyAJJiYgcm0gLWYgeGdlbi1ncHRiYworIAorLQorIGd0a3R5cGVmdW5jcy5jOiBzdGFtcC1ndGt0eXBlYnVpbHRpbnMuaCBzdGFtcC1ndGtwcml2YXRldHlwZWJ1aWx0aW5zLmggJCh0b3Bfc3JjZGlyKS9ndGsvKi5oICQodG9wX3NyY2RpcikvZ3RrL2ExMXkvKi5oICQodG9wX3NyY2RpcikvZ3RrL2RlcHJlY2F0ZWQvKi5oICQodG9wX3NyY2RpcikvZ2RrLyouaCBNYWtlZmlsZQorIAkkKEFNX1ZfR0VOKSAoZWNobyAnI3VuZGVmIEdUS19DT01QSUxBVElPTicgJiYgZWNobyAnI2luY2x1ZGUgPGd0ay9ndGt4Lmg+JykgPiB4Z2VuLWd0ZnNyYy5jICYmIFwKKyAJICBlY2hvICdHX0dOVUNfQkVHSU5fSUdOT1JFX0RFUFJFQ0FUSU9OUycgPiB4Z2VuLWd0ZiAmJiBcCisgCSAgJHtDUFB9ICQoREVGUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChBTV9DRkxBR1MpICQoQ0ZMQUdTKSB4Z2VuLWd0ZnNyYy5jIHwgXAorIAkgICQoR1JFUCkgLW8gJ1xiZ1t0ZF1rX1thLXpBLVowLTlfXSpfZ2V0X3R5cGVcYicgfCBcCisgCSAgc29ydCB8IHVuaXEgfCBcCistCSAgJChTRUQpICd7IHMvXi8qdHArKyA9IC87IHMvJCQvKCk7Lzsgcy9eLipcKGdka194MTFcfGd0a19wbHVnX1x8Z3RrX3NvY2tldF9cKS4qJCQvI2lmZGVmIEdES19XSU5ET1dJTkdfWDExXG4mXG4jZW5kaWYvOyB9JyA+PiB4Z2VuLWd0ZiBcCisrCSAgJChTRUQpICd7IHMvXi8qdHArKyA9IC87IHMvJCQvKCk7Lzsgcy9eLipcKGdka194MTFcfGd0a19wbHVnX1x8Z3RrX3NvY2tldF9cKS4qJCQvI2lmZGVmIEdES19XSU5ET1dJTkdfWDExXG4mXG4jZW5kaWYvOyBzL14uKmdka194MTFfZ2wuKiQkLyNpZmRlZiBIQVZFX09QRU5HTFxuJlxuI2VuZGlmLzsgfScgPj4geGdlbi1ndGYgXAorIAkmJiBjcCB4Z2VuLWd0ZiAkQCAmJiBybSAtZiB4Z2VuLWd0ZgorIGd0a3Rlc3R1dGlscy5jOiBndGt0eXBlZnVuY3MuYworIAorZGlmZiAtLWdpdCBhL2d0ay9ndGtnbGFyZWEuYyBiL2d0ay9ndGtnbGFyZWEuYworaW5kZXggMjQ1ZmM2Yi4uNDIxNGFkMSAxMDA2NDQKKy0tLSBhL2d0ay9ndGtnbGFyZWEuYworKysrIGIvZ3RrL2d0a2dsYXJlYS5jCitAQCAtMjgsNyArMjgsOSBAQAorICNpbmNsdWRlICJndGtwcml2YXRlLmgiCisgI2luY2x1ZGUgImd0a3JlbmRlci5oIgorIAorKyNpZmRlZiBIQVZFX09QRU5HTAorICNpbmNsdWRlIDxlcG94eS9nbC5oPgorKyNlbmRpZgorIAorIC8qKgorICAqIFNFQ1RJT046Z3RrZ2xhcmVhCitAQCAtMzU3LDkgKzM1OSwxMiBAQCBndGtfZ2xfYXJlYV9yZWFsX2NyZWF0ZV9jb250ZXh0IChHdGtHTEFyZWEgKmFyZWEpCisgc3RhdGljIHZvaWQKKyBndGtfZ2xfYXJlYV9yZXNpemUgKEd0a0dMQXJlYSAqYXJlYSwgaW50IHdpZHRoLCBpbnQgaGVpZ2h0KQorIHsKKysjaWZkZWYgSEFWRV9PUEVOR0wKKyAgIGdsVmlld3BvcnQgKDAsIDAsIHdpZHRoLCBoZWlnaHQpOworKyNlbmRpZgorIH0KKyAKKysjaWZkZWYgSEFWRV9PUEVOR0wKKyAvKgorICAqIENyZWF0ZXMgYWxsIHRoZSBidWZmZXIgb2JqZWN0cyBuZWVkZWQgZm9yIHJlbmRlcmluZyB0aGUgc2NlbmUKKyAgKi8KK0BAIC00NjcsNiArNDcyLDcgQEAgZ3RrX2dsX2FyZWFfYWxsb2NhdGVfYnVmZmVycyAoR3RrR0xBcmVhICphcmVhKQorIAorICAgcHJpdi0+bmVlZHNfcmVuZGVyID0gVFJVRTsKKyB9CisrI2VuZGlmCisgCisgLyoqCisgICogZ3RrX2dsX2FyZWFfYXR0YWNoX2J1ZmZlcnM6CitAQCAtNDg1LDYgKzQ5MSw3IEBAIGd0a19nbF9hcmVhX2FsbG9jYXRlX2J1ZmZlcnMgKEd0a0dMQXJlYSAqYXJlYSkKKyB2b2lkCisgZ3RrX2dsX2FyZWFfYXR0YWNoX2J1ZmZlcnMgKEd0a0dMQXJlYSAqYXJlYSkKKyB7CisrI2lmZGVmIEhBVkVfT1BFTkdMCisgICBHdGtHTEFyZWFQcml2YXRlICpwcml2ID0gZ3RrX2dsX2FyZWFfZ2V0X2luc3RhbmNlX3ByaXZhdGUgKGFyZWEpOworIAorICAgZ19yZXR1cm5faWZfZmFpbCAoR1RLX0lTX0dMX0FSRUEgKGFyZWEpKTsKK0BAIC01MTcsMTEgKzUyNCwxMyBAQCBndGtfZ2xfYXJlYV9hdHRhY2hfYnVmZmVycyAoR3RrR0xBcmVhICphcmVhKQorICAgICAgICAgZ2xGcmFtZWJ1ZmZlclJlbmRlcmJ1ZmZlckVYVCAoR0xfRlJBTUVCVUZGRVJfRVhULCBHTF9TVEVOQ0lMX0FUVEFDSE1FTlRfRVhULAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0xfUkVOREVSQlVGRkVSX0VYVCwgcHJpdi0+ZGVwdGhfc3RlbmNpbF9idWZmZXIpOworICAgICB9CisrI2VuZGlmCisgfQorIAorIHN0YXRpYyB2b2lkCisgZ3RrX2dsX2FyZWFfZGVsZXRlX2J1ZmZlcnMgKEd0a0dMQXJlYSAqYXJlYSkKKyB7CisrI2lmZGVmIEhBVkVfT1BFTkdMCisgICBHdGtHTEFyZWFQcml2YXRlICpwcml2ID0gZ3RrX2dsX2FyZWFfZ2V0X2luc3RhbmNlX3ByaXZhdGUgKGFyZWEpOworIAorICAgaWYgKHByaXYtPmNvbnRleHQgPT0gTlVMTCkKK0BAIC01NTMsNiArNTYyLDcgQEAgZ3RrX2dsX2FyZWFfZGVsZXRlX2J1ZmZlcnMgKEd0a0dMQXJlYSAqYXJlYSkKKyAgICAgICBnbERlbGV0ZUZyYW1lYnVmZmVyc0VYVCAoMSwgJnByaXYtPmZyYW1lX2J1ZmZlcik7CisgICAgICAgcHJpdi0+ZnJhbWVfYnVmZmVyID0gMDsKKyAgICAgfQorKyNlbmRpZgorIH0KKyAKKyBzdGF0aWMgdm9pZAorQEAgLTY2Myw2ICs2NzMsNyBAQCBndGtfZ2xfYXJlYV9kcmF3IChHdGtXaWRnZXQgKndpZGdldCwKKyAgIEd0a0dMQXJlYSAqYXJlYSA9IEdUS19HTF9BUkVBICh3aWRnZXQpOworICAgR3RrR0xBcmVhUHJpdmF0ZSAqcHJpdiA9IGd0a19nbF9hcmVhX2dldF9pbnN0YW5jZV9wcml2YXRlIChhcmVhKTsKKyAgIGdib29sZWFuIHVudXNlZDsKKysjaWZkZWYgSEFWRV9PUEVOR0wKKyAgIGludCB3LCBoLCBzY2FsZTsKKyAgIEdMZW51bSBzdGF0dXM7CisgCitAQCAtNjc0LDcgKzY4NSw2IEBAIGd0a19nbF9hcmVhX2RyYXcgKEd0a1dpZGdldCAqd2lkZ2V0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBndGtfd2lkZ2V0X2dldF9hbGxvY2F0ZWRfaGVpZ2h0ICh3aWRnZXQpKTsKKyAgICAgICByZXR1cm4gRkFMU0U7CisgICAgIH0KKy0KKyAgIGlmIChwcml2LT5jb250ZXh0ID09IE5VTEwpCisgICAgIHJldHVybiBGQUxTRTsKKyAKK0BAIC03MjAsNiArNzMwLDE0IEBAIGd0a19nbF9hcmVhX2RyYXcgKEd0a1dpZGdldCAqd2lkZ2V0LAorICAgICB9CisgCisgICByZXR1cm4gVFJVRTsKKysjZWxzZQorKyAgaWYgKHByaXYtPmVycm9yICE9IE5VTEwpCisrICAgICAgZ3RrX2dsX2FyZWFfZHJhd19lcnJvcl9zY3JlZW4gKGFyZWEsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNyLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBndGtfd2lkZ2V0X2dldF9hbGxvY2F0ZWRfd2lkdGggKHdpZGdldCksCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGd0a193aWRnZXRfZ2V0X2FsbG9jYXRlZF9oZWlnaHQgKHdpZGdldCkpOworKyAgcmV0dXJuIEZBTFNFOworKyNlbmRpZgorIH0KKyAKKyBzdGF0aWMgZ2Jvb2xlYW4KK2RpZmYgLS1naXQgYS9ndGsvaW5zcGVjdG9yL2dlbmVyYWwuYyBiL2d0ay9pbnNwZWN0b3IvZ2VuZXJhbC5jCitpbmRleCA0ZWFiM2E3Li5jNGU5MDBlIDEwMDY0NAorLS0tIGEvZ3RrL2luc3BlY3Rvci9nZW5lcmFsLmMKKysrKyBiL2d0ay9pbnNwZWN0b3IvZ2VuZXJhbC5jCitAQCAtMzMsOCArMzMsMTAgQEAKKyAKKyAjaWZkZWYgR0RLX1dJTkRPV0lOR19YMTEKKyAjaW5jbHVkZSAieDExL2dka3guaCIKKysjaWZkZWYgSEFWRV9PUEVOR0wKKyAjaW5jbHVkZSA8ZXBveHkvZ2x4Lmg+CisgI2VuZGlmCisrI2VuZGlmCisgCisgI2lmZGVmIEdES19XSU5ET1dJTkdfV0lOMzIKKyAjaW5jbHVkZSAid2luMzIvZ2Rrd2luMzIuaCIKK0BAIC0xNDcsNiArMTQ5LDcgQEAgYXBwZW5kX2V4dGVuc2lvbl9yb3cgKEd0a0luc3BlY3RvckdlbmVyYWwgKmdlbiwKKyAgIGd0a19zaXplX2dyb3VwX2FkZF93aWRnZXQgKEdUS19TSVpFX0dST1VQIChnZW4tPnByaXYtPmxhYmVscyksIGxhYmVsKTsKKyB9CisgCisrI2lmZGVmIEhBVkVfT1BFTkdMCisgI2lmZGVmIEdES19XSU5ET1dJTkdfWDExCisgc3RhdGljIHZvaWQKKyBhcHBlbmRfZ2x4X2V4dGVuc2lvbl9yb3cgKEd0a0luc3BlY3RvckdlbmVyYWwgKmdlbiwKK0BAIC0xNTYsNiArMTU5LDcgQEAgYXBwZW5kX2dseF9leHRlbnNpb25fcm93IChHdGtJbnNwZWN0b3JHZW5lcmFsICpnZW4sCisgICBhcHBlbmRfZXh0ZW5zaW9uX3JvdyAoZ2VuLCBleHQsIGVwb3h5X2hhc19nbHhfZXh0ZW5zaW9uIChkcHksIDAsIGV4dCkpOworIH0KKyAjZW5kaWYKKysjZW5kaWYKKyAKKyAjaWZkZWYgR0RLX1dJTkRPV0lOR19XQVlMQU5ECisgc3RhdGljIHZvaWQKK0BAIC0xNzEsNiArMTc1LDcgQEAgYXBwZW5kX2VnbF9leHRlbnNpb25fcm93IChHdGtJbnNwZWN0b3JHZW5lcmFsICpnZW4sCisgc3RhdGljIHZvaWQKKyBpbml0X2dsIChHdGtJbnNwZWN0b3JHZW5lcmFsICpnZW4pCisgeworKyNpZmRlZiBIQVZFX09QRU5HTAorICNpZmRlZiBHREtfV0lORE9XSU5HX1gxMQorICAgaWYgKEdES19JU19YMTFfRElTUExBWSAoZ2RrX2Rpc3BsYXlfZ2V0X2RlZmF1bHQgKCkpKQorICAgICB7CitAQCAtMTk3LDYgKzIwMiw3IEBAIGluaXRfZ2wgKEd0a0luc3BlY3RvckdlbmVyYWwgKmdlbikKKyAgICAgfQorICAgZWxzZQorICNlbmRpZgorKyNlbmRpZgorICNpZmRlZiBHREtfV0lORE9XSU5HX1dBWUxBTkQKKyAgIGlmIChHREtfSVNfV0FZTEFORF9ESVNQTEFZIChnZGtfZGlzcGxheV9nZXRfZGVmYXVsdCAoKSkpCisgICAgIHsKK2RpZmYgLS1naXQgYS90ZXN0cy9NYWtlZmlsZS5hbSBiL3Rlc3RzL01ha2VmaWxlLmFtCitpbmRleCA2ODE4MDdkLi4yOTQxYTM2IDEwMDY0NAorLS0tIGEvdGVzdHMvTWFrZWZpbGUuYW0KKysrKyBiL3Rlc3RzL01ha2VmaWxlLmFtCitAQCAtODAsOCArODAsNiBAQCBub2luc3RfUFJPR1JBTVMgPSAgJChURVNUX1BST0dTKQlcCisgCXRlc3RmdWxsc2NyZWVuCQkJXAorIAl0ZXN0Z2VvbWV0cnkJCQlcCisgCXRlc3RnaWNvbnBpeGJ1ZgkJCVwKKy0JdGVzdGdsYXJlYQkJCVwKKy0JdGVzdGdsYmxlbmRpbmcJCQlcCisgCXRlc3RncmlkCQkJXAorIAl0ZXN0Z3RrCQkJCVwKKyAJdGVzdGhlYWRlcmJhcgkJCVwKK0BAIC0xNjksMTEgKzE2NywxNyBAQCBub2luc3RfUFJPR1JBTVMgPSAgJChURVNUX1BST0dTKQlcCisgCXRlc3RhY3Rpb25iYXIJCQlcCisgCXRlc3R3aW5kb3dzaXplCQkJXAorIAl0ZXN0cG9wb3ZlcgkJCVwKKy0JZ2RrZ2VhcnMJCQlcCisgCWxpc3Rtb2RlbAkJCVwKKyAJdGVzdHBvcHVwCQkJXAorIAkkKE5VTEwpCisgCisraWYgSEFWRV9PUEVOR0wKKytub2luc3RfUFJPR1JBTVMgKz0KKysJdGVzdGdsYXJlYSAgICAgICAgICAgICAgICAgICAgICBcCisrCXRlc3RnbGJsZW5kaW5nICAgICAgICAgICAgICAgICAgXAorKwlnZGtnZWFycworK2VuZGlmCisrCisgaWYgVVNFX1gxMQorIG5vaW5zdF9QUk9HUkFNUyArPSB0ZXN0ZXJyb3JzCisgZW5kaWYKK2RpZmYgLS1naXQgYS90ZXN0c3VpdGUvZ3RrL29iamVjdHMtZmluYWxpemUuYyBiL3Rlc3RzdWl0ZS9ndGsvb2JqZWN0cy1maW5hbGl6ZS5jCitpbmRleCBlMGViZWUwLi43MDM2NDNjIDEwMDY0NAorLS0tIGEvdGVzdHN1aXRlL2d0ay9vYmplY3RzLWZpbmFsaXplLmMKKysrKyBiL3Rlc3RzdWl0ZS9ndGsvb2JqZWN0cy1maW5hbGl6ZS5jCitAQCAtMTE1LDggKzExNSwxMCBAQCBtYWluIChpbnQgYXJnYywgY2hhciAqKmFyZ3YpCisgCSAgYWxsX3R5cGVzW2ldICE9IEdES19UWVBFX1gxMV9ERVZJQ0VfTUFOQUdFUl9DT1JFICYmCisgCSAgYWxsX3R5cGVzW2ldICE9IEdES19UWVBFX1gxMV9ERVZJQ0VfTUFOQUdFUl9YSTIgJiYKKyAJICBhbGxfdHlwZXNbaV0gIT0gR0RLX1RZUEVfWDExX0RJU1BMQVlfTUFOQUdFUiAmJgorKyNpZmRlZiBIQVZFX09QRU5HTAorIAkgIGFsbF90eXBlc1tpXSAhPSBHREtfVFlQRV9YMTFfR0xfQ09OVEVYVCAmJgorICNlbmRpZgorKyNlbmRpZgorIAkgIC8qIE5vdCBhbGxvd2VkIHRvIGZpbmFsaXplIGEgR2RrUGl4YnVmTG9hZGVyIHdpdGhvdXQgY2FsbGluZyBnZGtfcGl4YnVmX2xvYWRlcl9jbG9zZSgpICovCisgCSAgYWxsX3R5cGVzW2ldICE9IEdES19UWVBFX1BJWEJVRl9MT0FERVIgJiYKKyAJICBhbGxfdHlwZXNbaV0gIT0gZ2RrX3BpeGJ1Zl9zaW1wbGVfYW5pbV9pdGVyX2dldF90eXBlKCkpCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdub21lL2d0aysvZ3RrKzMvMDAwNC1jb25maWd1cmUuYWMtRml4LXdheWxhbmQtcHJvdG9jb2xzLXBhdGgucGF0Y2ggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdub21lL2d0aysvZ3RrKzMvMDAwNC1jb25maWd1cmUuYWMtRml4LXdheWxhbmQtcHJvdG9jb2xzLXBhdGgucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjM0YjNhNAotLS0gL2Rldi9udWxsCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ25vbWUvZ3RrKy9ndGsrMy8wMDA0LWNvbmZpZ3VyZS5hYy1GaXgtd2F5bGFuZC1wcm90b2NvbHMtcGF0aC5wYXRjaApAQCAtMCwwICsxLDM2IEBACitGcm9tIDk3Yjc4ZTU2NjYzNDU3OWJiYWU1MWJlOTE0YWVhYWE5MjExMzdhOGIgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBKdXNzaSBLdWtrb25lbiA8anVzc2kua3Vra29uZW5AaW50ZWwuY29tPgorRGF0ZTogVGh1LCA5IEp1biAyMDE2IDExOjIxOjM2ICswMzAwCitTdWJqZWN0OiBbUEFUQ0ggNC80XSBjb25maWd1cmUuYWM6IEZpeCB3YXlsYW5kLXByb3RvY29scyBwYXRoCisKK1RoZSB3YXlsYW5kLXByb3RvY29scyBkaXJlY3RvcnkgaXMgdXNlZCBkdXJpbmcgYnVpbGQ6IEZpeCB0aGUgcGF0aAordG8gcG9pbnQgdG8gc3lzcm9vdCBzcGVjaWZpZWQgaW4gcmVjaXBlLgorCitOb3JtYWxseSBQS0dfQ09ORklHX1NZU1JPT1RfRElSIGNvdWxkIGJlIHVzZWQgaW4gY29uZmlndXJlLmFjIGJ1dCB0aGF0CiticmVha3MgbXVsdGlsaWIgZ3RrKyBhcyBpdCB3b3VsZCBwb2ludCB0byBtdWx0aWxpYiBzeXNyb290IHdoZW4gdGhlCisoYWxsYXJjaCkgd2F5bGFuZC1wcm90b2NvbHMgaXMgYWN0dWFsbHkgaW4gdGhlIG1hY2hpbmUgc3lzcm9vdC4KKworU2lnbmVkLW9mZi1ieTogSnVzc2kgS3Vra29uZW4gPGp1c3NpLmt1a2tvbmVuQGludGVsLmNvbT4KK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbZW1iZWRkZWQgc3BlY2lmaWNdCisKK1NpZ25lZC1vZmYtYnk6IEp1c3NpIEt1a2tvbmVuIDxqdXNzaS5rdWtrb25lbkBpbnRlbC5jb20+CistLS0KKyBjb25maWd1cmUuYWMgfCAyICstCisgMSBmaWxlIGNoYW5nZWQsIDEgaW5zZXJ0aW9uKCspLCAxIGRlbGV0aW9uKC0pCisKK2RpZmYgLS1naXQgYS9jb25maWd1cmUuYWMgYi9jb25maWd1cmUuYWMKK2luZGV4IGEzZTliZWIuLmRkZTlkYzUgMTAwNjQ0CistLS0gYS9jb25maWd1cmUuYWMKKysrKyBiL2NvbmZpZ3VyZS5hYworQEAgLTQ2MSw3ICs0NjEsNyBAQCBmaQorIGlmIHRlc3QgIiRlbmFibGVfd2F5bGFuZF9iYWNrZW5kIiA9ICJ5ZXMiOyB0aGVuCisgICAjIEZvciB0aGUgY2Fpcm8gaW1hZ2UgYmFja2VuZAorICAgY2Fpcm9fYmFja2VuZHM9IiRjYWlyb19iYWNrZW5kcyBjYWlybyIKKy0gIEFDX1NVQlNUKFdBWUxBTkRfUFJPVE9DT0xTX0RBVEFESVIsIGAkUEtHX0NPTkZJRyAtLXZhcmlhYmxlPXBrZ2RhdGFkaXIgd2F5bGFuZC1wcm90b2NvbHNgKQorKyAgQUNfU1VCU1QoV0FZTEFORF9QUk9UT0NPTFNfREFUQURJUiwgJHtXQVlMQU5EX1BST1RPQ09MU19TWVNST09UX0RJUn1gJFBLR19DT05GSUcgLS12YXJpYWJsZT1wa2dkYXRhZGlyIHdheWxhbmQtcHJvdG9jb2xzYCkKKyAgIEdES19CQUNLRU5EUz0iJEdES19CQUNLRU5EUyB3YXlsYW5kIgorICAgR0RLX1dJTkRPV0lORz0iJEdES19XSU5ET1dJTkcKKyAjZGVmaW5lIEdES19XSU5ET1dJTkdfV0FZTEFORCIKKy0tIAorMi4xLjQKKwpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1nbm9tZS9ndGsrL2d0ayszL0RvLW5vdC10cnktdG8taW5pdGlhbGl6ZS1HTC13aXRob3V0LWxpYkdMLnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1nbm9tZS9ndGsrL2d0ayszL0RvLW5vdC10cnktdG8taW5pdGlhbGl6ZS1HTC13aXRob3V0LWxpYkdMLnBhdGNoCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjOGM0ODBjLi4wMDAwMDAwCi0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ25vbWUvZ3RrKy9ndGsrMy9Eby1ub3QtdHJ5LXRvLWluaXRpYWxpemUtR0wtd2l0aG91dC1saWJHTC5wYXRjaAorKysgL2Rldi9udWxsCkBAIC0xLDYwICswLDAgQEAKLUZyb20gZmMyMjA1OGExMGRiOTEzNTM0ZjExMzQ4Zjg2NjgxZmU5ZTE4MzhlNSBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKLUZyb206IEp1c3NpIEt1a2tvbmVuIDxqdXNzaS5rdWtrb25lbkBpbnRlbC5jb20+Ci1EYXRlOiBGcmksIDE2IE9jdCAyMDE1IDE2OjM1OjE2ICswMzAwCi1TdWJqZWN0OiBbUEFUQ0hdIERvIG5vdCB0cnkgdG8gaW5pdGlhbGl6ZSBHTCB3aXRob3V0IGxpYkdMCi0KLV9nZGtfeDExX3NjcmVlbl91cGRhdGVfdmlzdWFsc19mb3JfZ2woKSB3aWxsIGVuZCB1cCBjYWxsaW5nIGVwb3h5cwotR0xYIGFwaSB3aGljaCB3aWxsIGV4aXQoKSBpZiBsaWJHTC5zby4xIGlzIG5vdCBwcmVzZW50LiBXZSBkbyBub3QKLXdhbnQgdGhhdCB0byBoYXBwZW4gYW5kIHdlIGRvbid0IHdhbnQgZXZlcnkgYXBwIHRvIGhhdmUgdG8gc2V0Ci0iR0RLX0dMPWRpc2FibGVkIiBlbnZpcm9ubWVudCB2YXJpYWJsZTogc28gdXNlICNpZmRlZiBzZXQgYmFzZWQgb24KLW9wZW5nbCBkaXN0cm8gZmVhdHVyZS4KLQotVXBzdHJlYW0gaXMgbm90IGludGVyZXN0ZWQgaW4gdGhlIGZpeCBhcyBpdCBpczogRWl0aGVyIGVwb3h5IHNob3VsZCBiZQotZml4ZWQgKHRvIG5vdCBleGl0KSBvciBHVEsrIHBvc3NpYmx5IGNvdWxkIGRvIHNvbWUgYWRkaXRpb25hbCBwcm9iaW5nCi1iZWZvcmUgY2FsbGluZyBlcG94eSBBUElzLgotCi1VcHN0cmVhbS1TdGF0dXM6IERlbmllZAotU2lnbmVkLW9mZi1ieTogSnVzc2kgS3Vra29uZW4gPGp1c3NpLmt1a2tvbmVuQGludGVsLmNvbT4KLS0tLQotIGNvbmZpZ3VyZS5hYyAgICAgICAgICAgIHwgNyArKysrKysrCi0gZ2RrL3gxMS9nZGt2aXN1YWwteDExLmMgfCA1ICsrKysrCi0gMiBmaWxlcyBjaGFuZ2VkLCAxMiBpbnNlcnRpb25zKCspCi0KLWRpZmYgLS1naXQgYS9jb25maWd1cmUuYWMgYi9jb25maWd1cmUuYWMKLWluZGV4IDcyOWE2MmUuLjU4Y2MxYWMgMTAwNjQ0Ci0tLS0gYS9jb25maWd1cmUuYWMKLSsrKyBiL2NvbmZpZ3VyZS5hYwotQEAgLTMyOCw2ICszMjgsMTMgQEAgQUNfQVJHX0VOQUJMRShtaXItYmFja2VuZCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbZW5hYmxlIHRoZSBNaXIgZ2RrIGJhY2tlbmRdKV0sCi0gCQkJICAgICAgW2JhY2tlbmRfc2V0PXllc10pCi0gCi0rQUNfQVJHX0VOQUJMRShnbHgsCi0rICAgICAgICAgICAgICBbQVNfSEVMUF9TVFJJTkcoWy0tZW5hYmxlLWdseF0sCi0rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW1doZW4gZW5hYmxlZCBHZGsgd2lsbCB0cnkgdG8gaW5pdGlhbGl6ZSBHTFhdKV0pCi0rQVNfSUYoW3Rlc3QgIngkZW5hYmxlX2dseCIgIT0gInhubyJdLCBbCi0rICBBQ19ERUZJTkUoW0hBVkVfR0xYXSwgW10sIFtHTFggd2lsbCBiZSBhdmFpbGFibGUgYXQgcnVudGltZV0pCi0rXSkKLSsKLSBpZiB0ZXN0IC16ICIkYmFja2VuZF9zZXQiOyB0aGVuCi0gICBpZiB0ZXN0ICIkcGxhdGZvcm1fd2luMzIiID0geWVzOyB0aGVuCi0gICAgIGVuYWJsZV93aW4zMl9iYWNrZW5kPXllcwotZGlmZiAtLWdpdCBhL2dkay94MTEvZ2RrdmlzdWFsLXgxMS5jIGIvZ2RrL3gxMS9nZGt2aXN1YWwteDExLmMKLWluZGV4IGYzYjA2MmQuLmM4MjQzZjQgMTAwNjQ0Ci0tLS0gYS9nZGsveDExL2dka3Zpc3VhbC14MTEuYwotKysrIGIvZ2RrL3gxMS9nZGt2aXN1YWwteDExLmMKLUBAIC0zNDUsNyArMzQ1LDEyIEBAIF9nZGtfeDExX3NjcmVlbl9pbml0X3Zpc3VhbHMgKEdka1NjcmVlbiAqc2NyZWVuKQotICAgLyogSWYgR0wgaXMgYXZhaWxhYmxlIHdlIHdhbnQgdG8gcGljayBiZXR0ZXIgZGVmYXVsdC9yZ2JhIHZpc3VhbHMsCi0gICAgICBhcyB3ZSBjYXJlIGFib3V0IGdseCBkZXRhaWxzIHN1Y2ggYXMgYWxwaGEvZGVwdGgvc3RlbmNpbCBkZXB0aCwKLSAgICAgIHN0ZXJlbyBhbmQgZG91YmxlIGJ1ZmZlcmluZyAqLwotKyAgLyogdXBkYXRlX3Zpc3VhbHNfZm9yX2dsKCkgd2lsbCBlbmQgdXAgY2FsbGluZyBlcG94eSBHTFggYXBpIHdoaWNoCi0rICAgICB3aWxsIGV4aXQgaWYgbGliZ2wgaXMgbm90IHRoZXJlOiBzbyBvbmx5IGRvIHRoaXMgaWYgd2Uga25vdyBHTAotKyAgICAgaXMgYXZhaWxhYmxlICovCi0rI2lmZGVmIEhBVkVfR0xYCi0gICBfZ2RrX3gxMV9zY3JlZW5fdXBkYXRlX3Zpc3VhbHNfZm9yX2dsIChzY3JlZW4pOwotKyNlbmRpZgotIH0KLSAKLSBnaW50Ci0tLSAKLTIuMS40Ci0KZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ25vbWUvZ3RrKy9ndGsrMy9Eb250LWZvcmNlLWNzZC5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ25vbWUvZ3RrKy9ndGsrMy9Eb250LWZvcmNlLWNzZC5wYXRjaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzJkOGE4NC4uMDAwMDAwMAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdub21lL2d0aysvZ3RrKzMvRG9udC1mb3JjZS1jc2QucGF0Y2gKKysrIC9kZXYvbnVsbApAQCAtMSwxMTggKzAsMCBAQAotd2luZG93OiBDaGVjayBpZiB3ZSBjYW4gdXNlIENTRCBiZWZvcmUgZW5hYmxpbmcgdGhlbQotCi1VcHN0cmVhbS1TdGF0dXM6IEJhY2twb3J0Ci1TaWduZWQtb2ZmLWJ5OiBKdXNzaSBLdWtrb25lbiA8anVzc2kua3Vra29uZW5AaW50ZWwuY29tPgotCi0KLUZyb20gYzVlNWVlNjc0OTBlN2U3YWY1NjA1MmQ4ZjhiZWI3NWRiMDAyYzJmMSBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKLUZyb206IEVtbWFudWVsZSBCYXNzaSA8ZWJhc3NpQGdub21lLm9yZz4KLURhdGU6IFdlZCwgMyBKdW4gMjAxNSAxNDowNzoyOSArMDEwMAotU3ViamVjdDogd2luZG93OiBDaGVjayBpZiB3ZSBjYW4gdXNlIENTRCBiZWZvcmUgZW5hYmxpbmcgdGhlbQotCi1UaGUgY2hhbmdlIGluIDAzMjEzYjk1MDlmYzFkZjE2YzY2MTk0ZWExNjhhZWQ2YzE1MTEwZTkgY2hhbmdlZCB0aGUgcnVsZXMKLWFzIHRvIHdoZW4gQ1NEIGNhbiBiZSBlbmFibGVkLCBidXQgaXQgYWxzbyB1bmNvbmRpdGlvbmFsbHkgZW5hYmxlcyBDU0QKLXdpdGggdGhlIGltcGxpY2l0IGFzc3VtcHRpb24gdGhhdCBjbGllbnQtc2lkZSBzaGFkb3dzIHdlcmUgdGhlIHJlYWwKLWlzc3VlLCBhbmQgdGhhdCB3ZSBjb3VsZCB3b3JrIGFyb3VuZCB0aGF0IGJ5IGRyYXdpbmcgb3VyIG93biBib3JkZXJzLgotVGhpcyBhbHNvIG1lYW5zIHRoYXQgc2V0dGluZyBhIHRpdGxlYmFyIGZvciBhIEd0a1dpbmRvdyB3aWxsIGVuYWJsZSBDU0QKLXVuY29uZGl0aW9uYWxseS4KLQotSW4gcmVhbGl0eSwgc29tZSB3aW5kb3cgbWFuYWdlcnMgKGxpa2UgTWF0Y2hib3gpICpvbmx5KiBzdXBwb3J0Ci1zZXJ2ZXItc2lkZSBkZWNvcmF0aW9ucywgYW5kIHdpbGwgaWdub3JlIGFsbCBoaW50cyB0byB0aGUgY29udHJhcnksIHRvCi10aGUgcG9pbnQgb2YgZHJhd2luZyBkZWNvcmF0aW9ucyBhdCByYW5kb20gbG9jYXRpb25zIG9uIHRvcCBvZiB0aGUKLXdpbmRvdy4KLQotU2luY2UgQ1NEIGFyZSBlbmFibGVkIHVuY29uZGl0aW9uYWxseSwgdGhlIEdUS19DU0QgZW52aXJvbm1lbnQgdmFyaWFibGUKLWlzIGFsc28gbm90IGEgc3VpdGFibGUgZXNjYXBlIGhhdGNoLgotCi1JbiB0aGUgZ3JhbmQgdHJhZGl0aW9uIG9mIGFza2luZyBvdXJzZWx2ZXMgaWYgd2Ugc2hvdWxkIGRvIHNvbWV0aGluZwotanVzdCBiZWNhdXNlIHdlIGNhbiwgd2Ugc2hvdWxkIHNwbGl0IHRoZSBlbnZpcm9ubWVudCBjaGVja3MgZnJvbSB0aGUKLWNoZWNrcyBvbiB3aGF0IHRoZSB1c2VyIHJlcXVlc3RlZDsgYnkgZG9pbmcgdGhhdCwgd2UgY2FuIGFsc28gY2hlY2sKLXdoZW4gZW5hYmxpbmcgY2xpZW50LXNpZGUgZGVjb3JhdGlvbnMsIGFuZCBpZGVhbGx5IGJhaWwgb3V0IGlmIG5lZWRlZC4KLQotaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTc1MDM0MwotCi1kaWZmIC0tZ2l0IGEvZ3RrL2d0a3dpbmRvdy5jIGIvZ3RrL2d0a3dpbmRvdy5jCi1pbmRleCA0MjNjNmJkLi45ZmU4ODJmIDEwMDY0NAotLS0tIGEvZ3RrL2d0a3dpbmRvdy5jCi0rKysgYi9ndGsvZ3Rrd2luZG93LmMKLUBAIC00MDU2LDYgKzQwNTYsMzIgQEAgZ3RrX3dpbmRvd19zdXBwb3J0c19jbGllbnRfc2hhZG93IChHdGtXaW5kb3cgKndpbmRvdykKLSAgIHJldHVybiBUUlVFOwotIH0KLSAKLStzdGF0aWMgZ2Jvb2xlYW4KLStndGtfd2luZG93X2Nhbl91c2VfY3NkIChHdGtXaW5kb3cgKndpbmRvdykKLSt7Ci0rICBjb25zdCBnY2hhciAqY3NkX2VudjsKLSsKLSsjaWZkZWYgR0RLX1dJTkRPV0lOR19CUk9BRFdBWQotKyAgaWYgKEdES19JU19CUk9BRFdBWV9ESVNQTEFZIChndGtfd2lkZ2V0X2dldF9kaXNwbGF5IChHVEtfV0lER0VUICh3aW5kb3cpKSkpCi0rICAgIHJldHVybiBUUlVFOwotKyNlbmRpZgotKwotKyNpZmRlZiBHREtfV0lORE9XSU5HX1dBWUxBTkQKLSsgIGlmIChHREtfSVNfV0FZTEFORF9ESVNQTEFZIChndGtfd2lkZ2V0X2dldF9kaXNwbGF5IChHVEtfV0lER0VUICh3aW5kb3cpKSkpCi0rICAgIHJldHVybiBUUlVFOwotKyNlbmRpZgotKwotKyNpZmRlZiBHREtfV0lORE9XSU5HX01JUgotKyAgaWYgKEdES19JU19NSVJfRElTUExBWSAoZ3RrX3dpZGdldF9nZXRfZGlzcGxheSAoR1RLX1dJREdFVCAod2luZG93KSkpKQotKyAgICByZXR1cm4gVFJVRTsKLSsjZW5kaWYKLSsKLSsgIGNzZF9lbnYgPSBnX2dldGVudiAoIkdUS19DU0QiKTsKLSsKLSsgIC8qIElmIEdUS19DU0QgaXMgdW5zZXQgd2UgZGVmYXVsdCB0byBDU0Qgc3VwcG9ydCAqLwotKyAgcmV0dXJuIGNzZF9lbnYgPT0gTlVMTCB8fCAoc3RyY21wIChjc2RfZW52LCAiMSIpID09IDApOwotK30KLSsKLSBzdGF0aWMgdm9pZAotIGd0a193aW5kb3dfZW5hYmxlX2NzZCAoR3RrV2luZG93ICp3aW5kb3cpCi0gewotQEAgLTQwNjMsNiArNDA4OSwxMCBAQCBndGtfd2luZG93X2VuYWJsZV9jc2QgKEd0a1dpbmRvdyAqd2luZG93KQotICAgR3RrV2lkZ2V0ICp3aWRnZXQgPSBHVEtfV0lER0VUICh3aW5kb3cpOwotICAgR2RrVmlzdWFsICp2aXN1YWw7Ci0gCi0rICAvKiBJZiB0aGUgZW52aXJvbm1lbnQgZG9lcyBub3Qgc3VwcG9ydCBDU0QsIHRoZW4gdGhlcmUncyBubyBwb2ludCBpbiBlbmFibGluZyB0aGVtICovCi0rICBpZiAoIWd0a193aW5kb3dfY2FuX3VzZV9jc2QgKHdpbmRvdykpCi0rICAgIHJldHVybjsKLSsKLSAgIC8qIFdlIG5lZWQgYSB2aXN1YWwgd2l0aCBhbHBoYSBmb3IgY2xpZW50IHNoYWRvd3MgKi8KLSAgIGlmIChwcml2LT51c2VfY2xpZW50X3NoYWRvdykKLSAgICAgewotQEAgLTU4MzksNyArNTg2OSw2IEBAIHN0YXRpYyBnYm9vbGVhbgotIGd0a193aW5kb3dfc2hvdWxkX3VzZV9jc2QgKEd0a1dpbmRvdyAqd2luZG93KQotIHsKLSAgIEd0a1dpbmRvd1ByaXZhdGUgKnByaXYgPSB3aW5kb3ctPnByaXY7Ci0tICBjb25zdCBnY2hhciAqY3NkX2VudjsKLSAKLSAgIGlmIChwcml2LT5jc2RfcmVxdWVzdGVkKQotICAgICByZXR1cm4gVFJVRTsKLUBAIC01ODUwLDI0ICs1ODc5LDcgQEAgZ3RrX3dpbmRvd19zaG91bGRfdXNlX2NzZCAoR3RrV2luZG93ICp3aW5kb3cpCi0gICBpZiAocHJpdi0+dHlwZSA9PSBHVEtfV0lORE9XX1BPUFVQKQotICAgICByZXR1cm4gRkFMU0U7Ci0gCi0tI2lmZGVmIEdES19XSU5ET1dJTkdfQlJPQURXQVkKLS0gIGlmIChHREtfSVNfQlJPQURXQVlfRElTUExBWSAoZ3RrX3dpZGdldF9nZXRfZGlzcGxheSAoR1RLX1dJREdFVCAod2luZG93KSkpKQotLSAgICByZXR1cm4gVFJVRTsKLS0jZW5kaWYKLS0KLS0jaWZkZWYgR0RLX1dJTkRPV0lOR19XQVlMQU5ECi0tICBpZiAoR0RLX0lTX1dBWUxBTkRfRElTUExBWSAoZ3RrX3dpZGdldF9nZXRfZGlzcGxheSAoR1RLX1dJREdFVCAod2luZG93KSkpKQotLSAgICByZXR1cm4gVFJVRTsKLS0jZW5kaWYKLS0KLS0jaWZkZWYgR0RLX1dJTkRPV0lOR19NSVIKLS0gIGlmIChHREtfSVNfTUlSX0RJU1BMQVkgKGd0a193aWRnZXRfZ2V0X2Rpc3BsYXkgKEdUS19XSURHRVQgKHdpbmRvdykpKSkKLS0gICAgcmV0dXJuIFRSVUU7Ci0tI2VuZGlmCi0tCi0tICBjc2RfZW52ID0gZ19nZXRlbnYgKCJHVEtfQ1NEIik7Ci0tCi0tICByZXR1cm4gKGdfc3RyY21wMCAoY3NkX2VudiwgIjEiKSA9PSAwKTsKLSsgIHJldHVybiBndGtfd2luZG93X2Nhbl91c2VfY3NkICh3aW5kb3cpOwotIH0KLSAKLSBzdGF0aWMgdm9pZAotLS0gCi1jZ2l0IHYwLjEwLjIKLQpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1nbm9tZS9ndGsrL2d0ayszL2hhcmRjb2RlZF9saWJ0b29sLnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1nbm9tZS9ndGsrL2d0ayszL2hhcmRjb2RlZF9saWJ0b29sLnBhdGNoCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzYjRiZWViLi4wMDAwMDAwCi0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ25vbWUvZ3RrKy9ndGsrMy9oYXJkY29kZWRfbGlidG9vbC5wYXRjaAorKysgL2Rldi9udWxsCkBAIC0xLDM1ICswLDAgQEAKLVVwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbZW1iZWRkZWQgc3BlY2lmaWNdCi0KLVNpZ25lZC1vZmYtYnk6IE1hcmtvIExpbmRxdmlzdCA8Y2F6Zmk3NEBnbWFpbC5jb20+Ci0KLUluZGV4OiBndGsrLTMuOC4yL2NvbmZpZ3VyZS5hYwotPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0tIGd0aystMy44LjIub3JpZy9jb25maWd1cmUuYWMKLSsrKyBndGsrLTMuOC4yL2NvbmZpZ3VyZS5hYwotQEAgLTUzMSw3ICs1MzEsNyBAQCBBQ19NU0dfQ0hFQ0tJTkcoW1doZXRoZXIgdG8gd3JpdGUgZGVwZW5kCi0gY2FzZSAkZW5hYmxlX2V4cGxpY2l0X2RlcHMgaW4KLSAgIGF1dG8pCi0gICAgIGV4cG9ydCBTRUQKLS0gICAgZGVwbGlic19jaGVja19tZXRob2Q9YCguL2xpYnRvb2wgLS1jb25maWc7IGVjaG8gJ2V2YWwgZWNobyBcIiRkZXBsaWJzX2NoZWNrX21ldGhvZFwiJykgfCBzaGAKLSsgICAgZGVwbGlic19jaGVja19tZXRob2Q9YCguLyRob3N0X2FsaWFzLWxpYnRvb2wgLS1jb25maWc7IGVjaG8gJ2V2YWwgZWNobyBcIiRkZXBsaWJzX2NoZWNrX21ldGhvZFwiJykgfCBzaGAKLSAgICAgaWYgdGVzdCAieCRkZXBsaWJzX2NoZWNrX21ldGhvZCIgIT0geHBhc3NfYWxsIHx8IHRlc3QgIngkZW5hYmxlX3N0YXRpYyIgPSB4eWVzIDsgdGhlbgotICAgICAgIGVuYWJsZV9leHBsaWNpdF9kZXBzPXllcwotICAgICBlbHNlCi1AQCAtNzkzLDcgKzc5Myw3IEBAIGVsc2UKLSAgICAgZG5sIE5vdyB3ZSBjaGVjayB0byBzZWUgaWYgb3VyIGxpYnRvb2wgc3VwcG9ydHMgc2hhcmVkIGxpYiBkZXBzCi0gICAgIGRubCAoaW4gYSByYXRoZXIgdWdseSB3YXkgZXZlbikKLSAgICAgaWYgJGR5bndvcmtzOyB0aGVuCi0tICAgICAgICBtb2R1bGVfbGlidG9vbF9jb25maWc9IiR7Q09ORklHX1NIRUxMLS9iaW4vc2h9IC4vbGlidG9vbCAtLWNvbmZpZyIKLSsgICAgICAgIG1vZHVsZV9saWJ0b29sX2NvbmZpZz0iJHtDT05GSUdfU0hFTEwtL2Jpbi9zaH0gLi8kaG9zdF9hbGlhcy1saWJ0b29sIC0tY29uZmlnIgotICAgICAgICAgbW9kdWxlX2RlcGxpYnNfY2hlY2s9YCRtb2R1bGVfbGlidG9vbF9jb25maWcgfCBcCi0gICAgICAgICAgICAgZ3JlcCAnXltbYS16X11dKmNoZWNrW1thLXpfXV0qX21ldGhvZD1bWydcJyciXV0nIHwgXAotICAgICAgICAgICAgIHNlZCAncy8uKltbJ1wnJyJdXVwoLipcKVtbJ1wnJyJdXSQvXDEvJ2AKLUBAIC0xNTI4LDcgKzE1MjgsNyBAQCBmaQotICMgV2UgYXJlIHVzaW5nIGdtb2R1bGUtbm8tZXhwb3J0IG5vdywgYnV0IEknbSBsZWF2aW5nIHRoZSBzdHJpcHBpbmcKLSAjIGNvZGUgaW4gcGxhY2UgZm9yIG5vdywgc2luY2UgcGFuZ28gYW5kIGF0ayBzdGlsbCByZXF1aXJlIGdtb2R1bGUuCi0gZXhwb3J0IFNFRAotLWV4cG9ydF9keW5hbWljPWAoLi9saWJ0b29sIC0tY29uZmlnOyBlY2hvIGV2YWwgZWNobyBcXCRleHBvcnRfZHluYW1pY19mbGFnX3NwZWMpIHwgc2hgCi0rZXhwb3J0X2R5bmFtaWM9YCguLyRob3N0X2FsaWFzLWxpYnRvb2wgLS1jb25maWc7IGVjaG8gZXZhbCBlY2hvIFxcJGV4cG9ydF9keW5hbWljX2ZsYWdfc3BlYykgfCBzaGAKLSBpZiB0ZXN0IC1uICIkZXhwb3J0X2R5bmFtaWMiOyB0aGVuCi0gICBHREtfREVQX0xJQlM9YGVjaG8gJEdES19ERVBfTElCUyB8IHNlZCAtZSAicy8kZXhwb3J0X2R5bmFtaWMvLyJgCi0gICBHVEtfREVQX0xJQlM9YGVjaG8gJEdUS19ERVBfTElCUyB8IHNlZCAtZSAicy8kZXhwb3J0X2R5bmFtaWMvLyJgCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdub21lL2d0aysvZ3RrKzNfMy4xOC44LmJiIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1nbm9tZS9ndGsrL2d0ayszXzMuMTguOC5iYgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjc2YzBjYy4uMDAwMDAwMAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdub21lL2d0aysvZ3RrKzNfMy4xOC44LmJiCisrKyAvZGV2L251bGwKQEAgLTEsMTkgKzAsMCBAQAotcmVxdWlyZSBndGsrMy5pbmMKLQotTUFKX1ZFUiA9ICIke0BvZS51dGlscy50cmltX3ZlcnNpb24oIiR7UFZ9IiwgMil9IgotCi1TUkNfVVJJID0gImh0dHA6Ly9mdHAuZ25vbWUub3JnL3B1Yi9nbm9tZS9zb3VyY2VzL2d0aysvJHtNQUpfVkVSfS9ndGsrLSR7UFZ9LnRhci54eiBcCi0gICAgICAgICAgIGZpbGU6Ly9oYXJkY29kZWRfbGlidG9vbC5wYXRjaCBcCi0gICAgICAgICAgIGZpbGU6Ly9Eb250LWZvcmNlLWNzZC5wYXRjaCBcCi0gICAgICAgICAgIGZpbGU6Ly9Eby1ub3QtdHJ5LXRvLWluaXRpYWxpemUtR0wtd2l0aG91dC1saWJHTC5wYXRjaCBcCi0gICAgICAgICAgIgotCi1TUkNfVVJJW21kNXN1bV0gPSAiOTY3MWFjYjQxZGMxMzU2MWQxOTIzM2YxYTc1Y2YxODQiCi1TUkNfVVJJW3NoYTI1NnN1bV0gPSAiMWM1M2VmMWJiNTUzNjQ2OThmNzE4M2VjZDE4NWI1NDdmOTJmNGEzYTdhYmZhZmQ1MzE0MDAyMzJlMmUwNTJmOCIKLQotUyA9ICIke1dPUktESVJ9L2d0aystJHtQVn0iCi0KLUxJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PTVmMzBmMDcxNmRmZGQwZDkxZWI0MzllYmVjNTIyZWMyIFwKLSAgICAgICAgICAgICAgICAgICAgZmlsZTovL2d0ay9ndGsuaDtlbmRsaW5lPTI1O21kNT0xZDhkYzBmY2NkYmZhMjYyODdhMjcxZGNlODhhZjczNyBcCi0gICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9nZGsvZ2RrLmg7ZW5kbGluZT0yNTttZDU9YzkyMGNlMzlkYzg4YzZmMDZkM2U3YzUwZTA4MDg2ZjIgXAotICAgICAgICAgICAgICAgICAgICBmaWxlOi8vdGVzdHMvdGVzdGd0ay5jO2VuZGxpbmU9MjU7bWQ1PWNiNzMyZGFlZTFkODJhZjdhMmJmOTUzY2YzY2YyNmYxIgpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1nbm9tZS9ndGsrL2d0ayszXzMuMjAuOS5iYiBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ25vbWUvZ3RrKy9ndGsrM18zLjIwLjkuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzhlMDk1YQotLS0gL2Rldi9udWxsCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ25vbWUvZ3RrKy9ndGsrM18zLjIwLjkuYmIKQEAgLTAsMCArMSwyMCBAQAorcmVxdWlyZSBndGsrMy5pbmMKKworTUFKX1ZFUiA9ICIke0BvZS51dGlscy50cmltX3ZlcnNpb24oIiR7UFZ9IiwgMil9IgorCitTUkNfVVJJID0gImh0dHA6Ly9mdHAuZ25vbWUub3JnL3B1Yi9nbm9tZS9zb3VyY2VzL2d0aysvJHtNQUpfVkVSfS9ndGsrLSR7UFZ9LnRhci54eiBcCisgICAgICAgICAgIGZpbGU6Ly8wMDAxLUhhcmRjb2RlZC1saWJ0b29sLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovLzAwMDItRG8tbm90LXRyeS10by1pbml0aWFsaXplLUdMLXdpdGhvdXQtbGliR0wucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vMDAwMy1BZGQtZGlzYWJsZS1vcGVuZ2wtY29uZmlndXJlLW9wdGlvbi5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly8wMDA0LWNvbmZpZ3VyZS5hYy1GaXgtd2F5bGFuZC1wcm90b2NvbHMtcGF0aC5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly8wMDAxLVJlZG8tZm9jdXMtaGFuZGxpbmctaW4tdHJlZXZpZXctb25jZS1tb3JlLnBhdGNoIFwKKyAgICAgICAgICAiCitTUkNfVVJJW21kNXN1bV0gPSAiY2M3NmNhYzVlMThjNzcyYzY3ODRiZjE5YTNkZmYwOGIiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiODNhNjA5YmEyZjM0MjRiNTUwOWU3Mzk2N2M0OWM2NzgzM2FmNDY2ZDZmOTEwODFiMjRlZTVjNjRmY2U2YWMxNyIKKworUyA9ICIke1dPUktESVJ9L2d0aystJHtQVn0iCisKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PTVmMzBmMDcxNmRmZGQwZDkxZWI0MzllYmVjNTIyZWMyIFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL2d0ay9ndGsuaDtlbmRsaW5lPTI1O21kNT0xZDhkYzBmY2NkYmZhMjYyODdhMjcxZGNlODhhZjczNyBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9nZGsvZ2RrLmg7ZW5kbGluZT0yNTttZDU9YzkyMGNlMzlkYzg4YzZmMDZkM2U3YzUwZTA4MDg2ZjIgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vdGVzdHMvdGVzdGd0ay5jO2VuZGxpbmU9MjU7bWQ1PWNiNzMyZGFlZTFkODJhZjdhMmJmOTUzY2YzY2YyNmYxIgpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1nbm9tZS9ndGsrL2d0aytfMi4yNC4yOS5iYiBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ25vbWUvZ3RrKy9ndGsrXzIuMjQuMjkuYmIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGNmNTVkMjAuLjAwMDAwMDAKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1nbm9tZS9ndGsrL2d0aytfMi4yNC4yOS5iYgorKysgL2Rldi9udWxsCkBAIC0xLDM0ICswLDAgQEAKLXJlcXVpcmUgZ3RrKy5pbmMKLQotTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9M2JmNTAwMDJhZWZkMDAyZjQ5ZTdiYjg1NDA2M2Y3ZTcgXAotICAgICAgICAgICAgICAgICAgICBmaWxlOi8vZ3RrL2d0ay5oO2VuZGxpbmU9Mjc7bWQ1PWM1OWUwYjQ0OTBkZDEzNWE1NzI2ZWJmODUxZjliMTdmIFwKLSAgICAgICAgICAgICAgICAgICAgZmlsZTovL2dkay9nZGsuaDtlbmRsaW5lPTI3O21kNT0wN2RiMjg1ZWMyMDhmYjNlMGJmN2Q4NjFiMDYxNDIwMiBcCi0gICAgICAgICAgICAgICAgICAgIGZpbGU6Ly90ZXN0cy90ZXN0Z3RrLmM7ZW5kbGluZT0yNzttZDU9MjYyZGI1ZGI1Zjc3NmY5ODYzZTU2ZGYzMTQyM2UyNGMiCi1TUkNfVVJJID0gImh0dHA6Ly9mdHAuZ25vbWUub3JnL3B1Yi9nbm9tZS9zb3VyY2VzL2d0aysvMi4yNC9ndGsrLSR7UFZ9LnRhci54eiBcCi0gICAgICAgICAgIGZpbGU6Ly94c2V0dGluZ3MucGF0Y2ggXAotICAgICAgICAgICBmaWxlOi8vaGFyZGNvZGVkX2xpYnRvb2wucGF0Y2ggXAotICAgICAgICAgICBmaWxlOi8vdG9nZ2xlLWZvbnQuZGlmZjtzdHJpcGxldmVsPTAgXAotICAgICAgICAgICBmaWxlOi8vZG9jLWZpeGVzLnBhdGNoIFwKLSAgICAgICAgICAgZmlsZTovL3N0cmljdC1wcm90b3R5cGVzLnBhdGNoIFwKLQkgICIKLQotU1JDX1VSSVttZDVzdW1dID0gIjFiN2EzNjg5ZjY1NjE3Mzg3YjViNTQ1MjBmNDQzOWU4IgotU1JDX1VSSVtzaGEyNTZzdW1dID0gIjA3NDFjNTk2MDBkM2Q4MTBhMjIzODY2NDUzZGMyYmJiMThjZTQ3MjM4Mjg2ODFiYTI0YWE2NTE5YzM3NjMxYjgiCi0KLUVYVFJBX09FQ09ORiA9ICItLWVuYWJsZS14a2IgLS1kaXNhYmxlLWdsaWJ0ZXN0IC0tZGlzYWJsZS1jdXBzIC0tZGlzYWJsZS14aW5lcmFtYSIKLQotTElCViA9ICIyLjEwLjAiCi0KLVBBQ0tBR0VTX0RZTkFNSUMgKz0gIl5ndGstaW1tb2R1bGUtLiogXmd0ay1wcmludGJhY2tlbmQtLioiCi0KLXB5dGhvbiBwb3B1bGF0ZV9wYWNrYWdlc19wcmVwZW5kICgpIHsKLSAgICBndGtfbGliZGlyID0gZC5leHBhbmQoJyR7bGliZGlyfS9ndGstMi4wLyR7TElCVn0nKQotICAgIGltbW9kdWxlc19yb290ID0gb3MucGF0aC5qb2luKGd0a19saWJkaXIsICdpbW1vZHVsZXMnKQotICAgIHByaW50bW9kdWxlc19yb290ID0gb3MucGF0aC5qb2luKGd0a19saWJkaXIsICdwcmludGJhY2tlbmRzJyk7Ci0KLSAgICBkLnNldFZhcignR1RLSU1NT0RVTEVTX1BBQ0tBR0VTJywgJyAnLmpvaW4oZG9fc3BsaXRfcGFja2FnZXMoZCwgaW1tb2R1bGVzX3Jvb3QsICdeaW0tKC4qKVwuc28kJywgJ2d0ay1pbW1vZHVsZS0lcycsICdHVEsgaW5wdXQgbW9kdWxlIGZvciAlcycpKSkKLSAgICBkb19zcGxpdF9wYWNrYWdlcyhkLCBwcmludG1vZHVsZXNfcm9vdCwgJ15saWJwcmludGJhY2tlbmQtKC4qKVwuc28kJywgJ2d0ay1wcmludGJhY2tlbmQtJXMnLCAnR1RLIHByaW50YmFja2VuZCBtb2R1bGUgZm9yICVzJykKLQotICAgIGlmIChkLmdldFZhcignREVCSUFOX05BTUVTJywgVHJ1ZSkpOgotICAgICAgICBkLnNldFZhcihkLmV4cGFuZCgnUEtHXyR7UE59JyksICcke01MUFJFRklYfWxpYmd0ay0yLjAnKQotfQpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1nbm9tZS9ndGsrL2d0aytfMi4yNC4zMC5iYiBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ25vbWUvZ3RrKy9ndGsrXzIuMjQuMzAuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGZlOTkwZAotLS0gL2Rldi9udWxsCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ25vbWUvZ3RrKy9ndGsrXzIuMjQuMzAuYmIKQEAgLTAsMCArMSwzNCBAQAorcmVxdWlyZSBndGsrLmluYworCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT0zYmY1MDAwMmFlZmQwMDJmNDllN2JiODU0MDYzZjdlNyBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9ndGsvZ3RrLmg7ZW5kbGluZT0yNzttZDU9YzU5ZTBiNDQ5MGRkMTM1YTU3MjZlYmY4NTFmOWIxN2YgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vZ2RrL2dkay5oO2VuZGxpbmU9Mjc7bWQ1PTA3ZGIyODVlYzIwOGZiM2UwYmY3ZDg2MWIwNjE0MjAyIFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL3Rlc3RzL3Rlc3RndGsuYztlbmRsaW5lPTI3O21kNT0yNjJkYjVkYjVmNzc2Zjk4NjNlNTZkZjMxNDIzZTI0YyIKK1NSQ19VUkkgPSAiaHR0cDovL2Z0cC5nbm9tZS5vcmcvcHViL2dub21lL3NvdXJjZXMvZ3RrKy8yLjI0L2d0aystJHtQVn0udGFyLnh6IFwKKyAgICAgICAgICAgZmlsZTovL3hzZXR0aW5ncy5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9oYXJkY29kZWRfbGlidG9vbC5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly90b2dnbGUtZm9udC5kaWZmO3N0cmlwbGV2ZWw9MCBcCisgICAgICAgICAgIGZpbGU6Ly9kb2MtZml4ZXMucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vc3RyaWN0LXByb3RvdHlwZXMucGF0Y2ggXAorCSAgIgorCitTUkNfVVJJW21kNXN1bV0gPSAiMDQ1NjhiYTVjNThiNzVlM2M3NTQzZTQ1NjI4YWQ3ODkiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiMGQxNWNlYzNiNmQ1NWM2MGVhYzIwNWIxZjNiYTgxYTFlZDRlYWRkOWQwZjhlN2M1MDhiYzcwNjVkMGM0Y2E1MCIKKworRVhUUkFfT0VDT05GID0gIi0tZW5hYmxlLXhrYiAtLWRpc2FibGUtZ2xpYnRlc3QgLS1kaXNhYmxlLWN1cHMgLS1kaXNhYmxlLXhpbmVyYW1hIgorCitMSUJWID0gIjIuMTAuMCIKKworUEFDS0FHRVNfRFlOQU1JQyArPSAiXmd0ay1pbW1vZHVsZS0uKiBeZ3RrLXByaW50YmFja2VuZC0uKiIKKworcHl0aG9uIHBvcHVsYXRlX3BhY2thZ2VzX3ByZXBlbmQgKCkgeworICAgIGd0a19saWJkaXIgPSBkLmV4cGFuZCgnJHtsaWJkaXJ9L2d0ay0yLjAvJHtMSUJWfScpCisgICAgaW1tb2R1bGVzX3Jvb3QgPSBvcy5wYXRoLmpvaW4oZ3RrX2xpYmRpciwgJ2ltbW9kdWxlcycpCisgICAgcHJpbnRtb2R1bGVzX3Jvb3QgPSBvcy5wYXRoLmpvaW4oZ3RrX2xpYmRpciwgJ3ByaW50YmFja2VuZHMnKTsKKworICAgIGQuc2V0VmFyKCdHVEtJTU1PRFVMRVNfUEFDS0FHRVMnLCAnICcuam9pbihkb19zcGxpdF9wYWNrYWdlcyhkLCBpbW1vZHVsZXNfcm9vdCwgJ15pbS0oLiopXC5zbyQnLCAnZ3RrLWltbW9kdWxlLSVzJywgJ0dUSyBpbnB1dCBtb2R1bGUgZm9yICVzJykpKQorICAgIGRvX3NwbGl0X3BhY2thZ2VzKGQsIHByaW50bW9kdWxlc19yb290LCAnXmxpYnByaW50YmFja2VuZC0oLiopXC5zbyQnLCAnZ3RrLXByaW50YmFja2VuZC0lcycsICdHVEsgcHJpbnRiYWNrZW5kIG1vZHVsZSBmb3IgJXMnKQorCisgICAgaWYgKGQuZ2V0VmFyKCdERUJJQU5fTkFNRVMnLCBUcnVlKSk6CisgICAgICAgIGQuc2V0VmFyKGQuZXhwYW5kKCdQS0dfJHtQTn0nKSwgJyR7TUxQUkVGSVh9bGliZ3RrLTIuMCcpCit9CmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdub21lL2d0aysvZ3RrLWljb24tdXRpbHMtbmF0aXZlXzMuMTguOC5iYiBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ25vbWUvZ3RrKy9ndGstaWNvbi11dGlscy1uYXRpdmVfMy4xOC44LmJiCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3OTNmMTRhLi4wMDAwMDAwCi0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ25vbWUvZ3RrKy9ndGstaWNvbi11dGlscy1uYXRpdmVfMy4xOC44LmJiCisrKyAvZGV2L251bGwKQEAgLTEsNjAgKzAsMCBAQAotU1VNTUFSWSA9ICJOYXRpdmUgaWNvbiB1dGlscyBmb3IgR1RLKyIKLURFU0NSSVBUSU9OID0gImd0ay11cGRhdGUtaWNvbi1jYWNoZSBhbmQgZ3RrLWVuY29kZS1zeW1ib2xpYy1zdmcgYnVpbHQgZnJvbSBHVEsrIG5hdGl2ZWx5LCBmb3IgYnVpbGQgdGltZSBhbmQgb24taG9zdCBwb3N0aW5zdCBzY3JpcHQgZXhlY3V0aW9uLiIKLVNFQ1RJT04gPSAibGlicyIKLQotREVQRU5EUyA9ICJnbGliLTIuMC1uYXRpdmUgZ2RrLXBpeGJ1Zi1uYXRpdmUgbGlicnN2Zy1uYXRpdmUiCi0KLUxJQ0VOU0UgPSAiTEdQTHYyICYgTEdQTHYyKyAmIExHUEx2Mi4xKyIKLQotTUFKX1ZFUiA9ICIke0BvZS51dGlscy50cmltX3ZlcnNpb24oIiR7UFZ9IiwgMil9IgotCi1TUkNfVVJJID0gImh0dHA6Ly9mdHAuZ25vbWUub3JnL3B1Yi9nbm9tZS9zb3VyY2VzL2d0aysvJHtNQUpfVkVSfS9ndGsrLSR7UFZ9LnRhci54eiBcCi0gICAgICAgICAgZmlsZTovL1JlbW92ZS1HZGstZGVwZW5kZW5jeS1mcm9tLWd0ay1lbmNvZGUtc3ltYm9saWMtc3ZnLnBhdGNoIgotU1JDX1VSSVttZDVzdW1dID0gIjk2NzFhY2I0MWRjMTM1NjFkMTkyMzNmMWE3NWNmMTg0IgotU1JDX1VSSVtzaGEyNTZzdW1dID0gIjFjNTNlZjFiYjU1MzY0Njk4ZjcxODNlY2QxODViNTQ3ZjkyZjRhM2E3YWJmYWZkNTMxNDAwMjMyZTJlMDUyZjgiCi0KLUxJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PTVmMzBmMDcxNmRmZGQwZDkxZWI0MzllYmVjNTIyZWMyIFwKLSAgICAgICAgICAgICAgICAgICAgZmlsZTovL2d0ay9ndGsuaDtlbmRsaW5lPTI1O21kNT0xZDhkYzBmY2NkYmZhMjYyODdhMjcxZGNlODhhZjczNyBcCi0gICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9nZGsvZ2RrLmg7ZW5kbGluZT0yNTttZDU9YzkyMGNlMzlkYzg4YzZmMDZkM2U3YzUwZTA4MDg2ZjIgXAotICAgICAgICAgICAgICAgICAgICBmaWxlOi8vdGVzdHMvdGVzdGd0ay5jO2VuZGxpbmU9MjU7bWQ1PWNiNzMyZGFlZTFkODJhZjdhMmJmOTUzY2YzY2YyNmYxIgotCi1TID0gIiR7V09SS0RJUn0vZ3RrKy0ke1BWfSIKLQotaW5oZXJpdCBwa2djb25maWcgbmF0aXZlIHVwc3RyZWFtLXZlcnNpb24taXMtZXZlbgotCi1QS0dfQ09ORklHX0ZPUl9CVUlMRCA9ICIke1NUQUdJTkdfQklORElSX05BVElWRX0vcGtnLWNvbmZpZy1uYXRpdmUiCi0KLWRvX2NvbmZpZ3VyZSgpIHsKLQkjIFF1aXRlIHVnbHkgYnV0IGRlZmluZXMgZW5vdWdoIHRvIGNvbXBpbGUgdGhlIHRvb2xzLgotCWlmICEgdGVzdCAtZiBndGsvY29uZmlnLmg7IHRoZW4KLQkJZWNobyAiI2RlZmluZSBHRVRURVhUX1BBQ0tBR0UgXCJndGszMFwiIiA+PiBndGsvY29uZmlnLmgKLQkJZWNobyAiI2RlZmluZSBIQVZFX1VOSVNURF9IIDEiID4+IGd0ay9jb25maWcuaAotCQllY2hvICIjZGVmaW5lIEhBVkVfRlRXX0ggMSIgPj4gZ3RrL2NvbmZpZy5oCi0JZmkKLQlpZiAhIHRlc3QgLWYgZ2RrL2NvbmZpZy5oOyB0aGVuCi0JCXRvdWNoIGdkay9jb25maWcuaAotCWZpCi19Ci0KLWRvX2NvbXBpbGUoKSB7Ci0JJHtCVUlMRF9DQ30gJHtCVUlMRF9DRkxBR1N9ICR7QlVJTERfTERGTEFHU30gXAotCQkke1N9L2d0ay91cGRhdGVpY29uY2FjaGUuYyBcCi0JCSQoJHtQS0dfQ09ORklHX0ZPUl9CVUlMRH0gLS1jZmxhZ3MgLS1saWJzIGdkay1waXhidWYtMi4wKSBcCi0JCS1vIGd0ay11cGRhdGUtaWNvbi1jYWNoZQotCi0JJHtCVUlMRF9DQ30gJHtCVUlMRF9DRkxBR1N9ICR7QlVJTERfTERGTEFHU30gXAotCQkke1N9L2d0ay9lbmNvZGVzeW1ib2xpYy5jIFwKLQkJJCgke1BLR19DT05GSUdfRk9SX0JVSUxEfSAtLWNmbGFncyAtLWxpYnMgZ2lvLTIuMCBnZGstcGl4YnVmLTIuMCkgXAotCQktbyBndGstZW5jb2RlLXN5bWJvbGljLXN2ZwotfQotCi1kb19pbnN0YWxsKCkgewotCWluc3RhbGwgLWQgJHtEfSR7YmluZGlyfQotCWluc3RhbGwgLW0gMDc1NSAke0J9L2d0ay11cGRhdGUtaWNvbi1jYWNoZSAke0R9JHtiaW5kaXJ9Ci0JaW5zdGFsbCAtbSAwNzU1ICR7Qn0vZ3RrLWVuY29kZS1zeW1ib2xpYy1zdmcgJHtEfSR7YmluZGlyfQotCi0JY3JlYXRlX3dyYXBwZXIgJHtEfS8ke2JpbmRpcn0vZ3RrLXVwZGF0ZS1pY29uLWNhY2hlIFwKLQkJR0RLX1BJWEJVRl9NT0RVTEVfRklMRT0ke1NUQUdJTkdfTElCRElSX05BVElWRX0vZ2RrLXBpeGJ1Zi0yLjAvMi4xMC4wL2xvYWRlcnMuY2FjaGUKLQljcmVhdGVfd3JhcHBlciAke0R9LyR7YmluZGlyfS9ndGstZW5jb2RlLXN5bWJvbGljLXN2ZyBcCi0JCUdES19QSVhCVUZfTU9EVUxFX0ZJTEU9JHtTVEFHSU5HX0xJQkRJUl9OQVRJVkV9L2dkay1waXhidWYtMi4wLzIuMTAuMC9sb2FkZXJzLmNhY2hlCi19CmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdub21lL2d0aysvZ3RrLWljb24tdXRpbHMtbmF0aXZlXzMuMjAuOS5iYiBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ25vbWUvZ3RrKy9ndGstaWNvbi11dGlscy1uYXRpdmVfMy4yMC45LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjcxYzFkNjIKLS0tIC9kZXYvbnVsbAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdub21lL2d0aysvZ3RrLWljb24tdXRpbHMtbmF0aXZlXzMuMjAuOS5iYgpAQCAtMCwwICsxLDYwIEBACitTVU1NQVJZID0gIk5hdGl2ZSBpY29uIHV0aWxzIGZvciBHVEsrIgorREVTQ1JJUFRJT04gPSAiZ3RrLXVwZGF0ZS1pY29uLWNhY2hlIGFuZCBndGstZW5jb2RlLXN5bWJvbGljLXN2ZyBidWlsdCBmcm9tIEdUSysgbmF0aXZlbHksIGZvciBidWlsZCB0aW1lIGFuZCBvbi1ob3N0IHBvc3RpbnN0IHNjcmlwdCBleGVjdXRpb24uIgorU0VDVElPTiA9ICJsaWJzIgorCitERVBFTkRTID0gImdsaWItMi4wLW5hdGl2ZSBnZGstcGl4YnVmLW5hdGl2ZSBsaWJyc3ZnLW5hdGl2ZSIKKworTElDRU5TRSA9ICJMR1BMdjIgJiBMR1BMdjIrICYgTEdQTHYyLjErIgorCitNQUpfVkVSID0gIiR7QG9lLnV0aWxzLnRyaW1fdmVyc2lvbigiJHtQVn0iLCAyKX0iCisKK1NSQ19VUkkgPSAiaHR0cDovL2Z0cC5nbm9tZS5vcmcvcHViL2dub21lL3NvdXJjZXMvZ3RrKy8ke01BSl9WRVJ9L2d0aystJHtQVn0udGFyLnh6IFwKKyAgICAgICAgICBmaWxlOi8vUmVtb3ZlLUdkay1kZXBlbmRlbmN5LWZyb20tZ3RrLWVuY29kZS1zeW1ib2xpYy1zdmcucGF0Y2giCitTUkNfVVJJW21kNXN1bV0gPSAiY2M3NmNhYzVlMThjNzcyYzY3ODRiZjE5YTNkZmYwOGIiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiODNhNjA5YmEyZjM0MjRiNTUwOWU3Mzk2N2M0OWM2NzgzM2FmNDY2ZDZmOTEwODFiMjRlZTVjNjRmY2U2YWMxNyIKKworTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9NWYzMGYwNzE2ZGZkZDBkOTFlYjQzOWViZWM1MjJlYzIgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vZ3RrL2d0ay5oO2VuZGxpbmU9MjU7bWQ1PTFkOGRjMGZjY2RiZmEyNjI4N2EyNzFkY2U4OGFmNzM3IFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL2dkay9nZGsuaDtlbmRsaW5lPTI1O21kNT1jOTIwY2UzOWRjODhjNmYwNmQzZTdjNTBlMDgwODZmMiBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly90ZXN0cy90ZXN0Z3RrLmM7ZW5kbGluZT0yNTttZDU9Y2I3MzJkYWVlMWQ4MmFmN2EyYmY5NTNjZjNjZjI2ZjEiCisKK1MgPSAiJHtXT1JLRElSfS9ndGsrLSR7UFZ9IgorCitpbmhlcml0IHBrZ2NvbmZpZyBuYXRpdmUgdXBzdHJlYW0tdmVyc2lvbi1pcy1ldmVuCisKK1BLR19DT05GSUdfRk9SX0JVSUxEID0gIiR7U1RBR0lOR19CSU5ESVJfTkFUSVZFfS9wa2ctY29uZmlnLW5hdGl2ZSIKKworZG9fY29uZmlndXJlKCkgeworCSMgUXVpdGUgdWdseSBidXQgZGVmaW5lcyBlbm91Z2ggdG8gY29tcGlsZSB0aGUgdG9vbHMuCisJaWYgISB0ZXN0IC1mIGd0ay9jb25maWcuaDsgdGhlbgorCQllY2hvICIjZGVmaW5lIEdFVFRFWFRfUEFDS0FHRSBcImd0azMwXCIiID4+IGd0ay9jb25maWcuaAorCQllY2hvICIjZGVmaW5lIEhBVkVfVU5JU1REX0ggMSIgPj4gZ3RrL2NvbmZpZy5oCisJCWVjaG8gIiNkZWZpbmUgSEFWRV9GVFdfSCAxIiA+PiBndGsvY29uZmlnLmgKKwlmaQorCWlmICEgdGVzdCAtZiBnZGsvY29uZmlnLmg7IHRoZW4KKwkJdG91Y2ggZ2RrL2NvbmZpZy5oCisJZmkKK30KKworZG9fY29tcGlsZSgpIHsKKwkke0JVSUxEX0NDfSAke0JVSUxEX0NGTEFHU30gJHtCVUlMRF9MREZMQUdTfSBcCisJCSR7U30vZ3RrL3VwZGF0ZWljb25jYWNoZS5jIFwKKwkJJCgke1BLR19DT05GSUdfRk9SX0JVSUxEfSAtLWNmbGFncyAtLWxpYnMgZ2RrLXBpeGJ1Zi0yLjApIFwKKwkJLW8gZ3RrLXVwZGF0ZS1pY29uLWNhY2hlCisKKwkke0JVSUxEX0NDfSAke0JVSUxEX0NGTEFHU30gJHtCVUlMRF9MREZMQUdTfSBcCisJCSR7U30vZ3RrL2VuY29kZXN5bWJvbGljLmMgXAorCQkkKCR7UEtHX0NPTkZJR19GT1JfQlVJTER9IC0tY2ZsYWdzIC0tbGlicyBnaW8tMi4wIGdkay1waXhidWYtMi4wKSBcCisJCS1vIGd0ay1lbmNvZGUtc3ltYm9saWMtc3ZnCit9CisKK2RvX2luc3RhbGwoKSB7CisJaW5zdGFsbCAtZCAke0R9JHtiaW5kaXJ9CisJaW5zdGFsbCAtbSAwNzU1ICR7Qn0vZ3RrLXVwZGF0ZS1pY29uLWNhY2hlICR7RH0ke2JpbmRpcn0KKwlpbnN0YWxsIC1tIDA3NTUgJHtCfS9ndGstZW5jb2RlLXN5bWJvbGljLXN2ZyAke0R9JHtiaW5kaXJ9CisKKwljcmVhdGVfd3JhcHBlciAke0R9LyR7YmluZGlyfS9ndGstdXBkYXRlLWljb24tY2FjaGUgXAorCQlHREtfUElYQlVGX01PRFVMRV9GSUxFPSR7U1RBR0lOR19MSUJESVJfTkFUSVZFfS9nZGstcGl4YnVmLTIuMC8yLjEwLjAvbG9hZGVycy5jYWNoZQorCWNyZWF0ZV93cmFwcGVyICR7RH0vJHtiaW5kaXJ9L2d0ay1lbmNvZGUtc3ltYm9saWMtc3ZnIFwKKwkJR0RLX1BJWEJVRl9NT0RVTEVfRklMRT0ke1NUQUdJTkdfTElCRElSX05BVElWRX0vZ2RrLXBpeGJ1Zi0yLjAvMi4xMC4wL2xvYWRlcnMuY2FjaGUKK30KZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ25vbWUvZ3RrLWRvYy1zdHViL2ZpbGVzLzAwMDEtUmV2ZXJ0LUltcG9ydC1pbnRyb3NwZWN0aW9uLXN0dWItbWFjaGluZXJ5LXRvby5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ25vbWUvZ3RrLWRvYy1zdHViL2ZpbGVzLzAwMDEtUmV2ZXJ0LUltcG9ydC1pbnRyb3NwZWN0aW9uLXN0dWItbWFjaGluZXJ5LXRvby5wYXRjaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODBiMDUyMS4uMDAwMDAwMAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdub21lL2d0ay1kb2Mtc3R1Yi9maWxlcy8wMDAxLVJldmVydC1JbXBvcnQtaW50cm9zcGVjdGlvbi1zdHViLW1hY2hpbmVyeS10b28ucGF0Y2gKKysrIC9kZXYvbnVsbApAQCAtMSwzMDUgKzAsMCBAQAotRnJvbSBkNjM2YmUyOWJmOTUzOTZiNGUyN2ZjZDE3ZmY4NGNiNzA5MWNjYTkxIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQotRnJvbTogQWxleGFuZGVyIEthbmF2aW4gPGFsZXgua2FuYXZpbkBnbWFpbC5jb20+Ci1EYXRlOiBUaHUsIDggT2N0IDIwMTUgMTU6Mzc6NDAgKzAzMDAKLVN1YmplY3Q6IFtQQVRDSF0gUmV2ZXJ0ICJJbXBvcnQgaW50cm9zcGVjdGlvbiBzdHViIG1hY2hpbmVyeSB0b28iCi0KLVRoaXMgcmV2ZXJ0cyBjb21taXQgM2RmZDBhMDlkZTY5NmVjOGM1NDQ3NjI3NDdmOGEwZjc3MTUzNjIyZS4KLUFzIHdlIHByb3ZpZGUgdGhlIGZ1bGwgaW50cm9zcGVjdGlvbiBzdXBwb3J0LCB3ZSBuZWVkIHRvIHJlbW92ZQotdGhlIHN0dWJzIGZyb20gdGhpcyBwYWNrYWdlIHRoYXQgY29uZmxpY3Qgd2l0aCBpdC4KLQotVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nIFtyZXZpZXcgb24gb2UtY29yZSBsaXN0XQotU2lnbmVkLW9mZi1ieTogQWxleGFuZGVyIEthbmF2aW4gPGFsZXgua2FuYXZpbkBnbWFpbC5jb20+Ci0tLS0KLSBNYWtlZmlsZSAgICAgICAgICAgICAgIHwgICA0IC0tCi0gTWFrZWZpbGUuaW50cm9zcGVjdGlvbiB8IDE2MyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gaW50cm9zcGVjdGlvbi5tNCAgICAgICB8ICA5NiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotIDMgZmlsZXMgY2hhbmdlZCwgMjYzIGRlbGV0aW9ucygtKQotIGRlbGV0ZSBtb2RlIDEwMDY0NCBNYWtlZmlsZS5pbnRyb3NwZWN0aW9uCi0gZGVsZXRlIG1vZGUgMTAwNjQ0IGludHJvc3BlY3Rpb24ubTQKLQotZGlmZiAtLWdpdCBhL01ha2VmaWxlIGIvTWFrZWZpbGUKLWluZGV4IDdjYjZjZTUuLmFkNDIzMWEgMTAwNjQ0Ci0tLS0gYS9NYWtlZmlsZQotKysrIGIvTWFrZWZpbGUKLUBAIC0yMyw3ICsyMywzIEBAIGluc3RhbGw6ICQoYmluX3Byb2dyYW1zKQotIAotIAlta2RpciAtcCAkKERFU1RESVIpJChkYXRhcm9vdGRpcikvYWNsb2NhbC8KLSAJaW5zdGFsbCAtbSAwNjQ0ICQoc3JjZGlyKS9ndGstZG9jLm00ICQoREVTVERJUikkKGRhdGFyb290ZGlyKS9hY2xvY2FsL2d0ay1kb2MubTQKLS0KLS0JbWtkaXIgLXAgJChERVNURElSKSQoZGF0YXJvb3RkaXIpL2dvYmplY3QtaW50cm9zcGVjdGlvbi0xLjAKLS0JaW5zdGFsbCAtbSAwNjQ0ICQoc3JjZGlyKS9NYWtlZmlsZS5pbnRyb3NwZWN0aW9uICQoREVTVERJUikkKGRhdGFyb290ZGlyKS9nb2JqZWN0LWludHJvc3BlY3Rpb24tMS4wL01ha2VmaWxlLmludHJvc3BlY3Rpb24KLS0JaW5zdGFsbCAtbSAwNjQ0ICQoc3JjZGlyKS9pbnRyb3NwZWN0aW9uLm00ICQoREVTVERJUikkKGRhdGFyb290ZGlyKS9hY2xvY2FsL2ludHJvc3BlY3Rpb24ubTQKLWRpZmYgLS1naXQgYS9NYWtlZmlsZS5pbnRyb3NwZWN0aW9uIGIvTWFrZWZpbGUuaW50cm9zcGVjdGlvbgotZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0Ci1pbmRleCA3NTVkZDE1Li4wMDAwMDAwCi0tLS0gYS9NYWtlZmlsZS5pbnRyb3NwZWN0aW9uCi0rKysgL2Rldi9udWxsCi1AQCAtMSwxNjMgKzAsMCBAQAotLSMgLSotIE1vZGU6IG1ha2UgLSotCi0tIyBDb3B5cmlnaHQgMjAwOS0yMDEwIEpvaGFuIERhaGxpbgotLSMKLS0jIFRoaXMgZmlsZSBpcyBmcmVlIHNvZnR3YXJlOyB0aGUgYXV0aG9yKHMpIGdpdmVzIHVubGltaXRlZAotLSMgcGVybWlzc2lvbiB0byBjb3B5IGFuZC9vciBkaXN0cmlidXRlIGl0LCB3aXRoIG9yIHdpdGhvdXQKLS0jIG1vZGlmaWNhdGlvbnMsIGFzIGxvbmcgYXMgdGhpcyBub3RpY2UgaXMgcHJlc2VydmVkLgotLSMKLS0jICogSW5wdXQgdmFyaWFibGVzOgotLSMKLS0jICAgSU5UUk9TUEVDVElPTl9HSVJTIC0gTGlzdCBvZiBHSVJTIHRoYXQgc2hvdWxkIGJlIGdlbmVyYXRlZAotLSMgICBJTlRST1NQRUNUSU9OX1NDQU5ORVIgLSBDb21tYW5kIHRvIGludm9rZSBzY2FubmVyLCBub3JtYWxseSBzZXQgYnkKLS0jICAgICAgR09CSkVDVF9JTlRST1NQRUNUSU9OX1JFUVVJUkUvQ0hFQ0soKSBpbiBpbnRyb3NwZWN0aW9uLm00Ci0tIyAgIElOVFJPU1BFQ1RJT05fU0NBTk5FUl9BUkdTIC0gQWRkaXRpb25hbCBhcmdzIHRvIHBhc3MgaW4gdG8gdGhlIHNjYW5uZXIKLS0jICAgSU5UUk9TUEVDVElPTl9TQ0FOTkVSX0VOViAtIEVudmlyb25tZW50IHZhcmlhYmxlcyB0byBzZXQgYmVmb3JlIHJ1bm5pbmcKLS0jICAgICAgdGhlIHNjYW5uZXIKLS0jICAgSU5UUk9TUEVDVElPTl9DT01QSUxFUiAtIENvbW1hbmQgdG8gaW52b2tlIGNvbXBpbGVyLCBub3JtYWxseSBzZXQgYnkKLS0jICAgICAgR09CSkVDVF9JTlRST1NQRUNUSU9OX1JFUVVJUkUvQ0hFQ0soKSBpbiBpbnRyb3NwZWN0aW9uLm00Ci0tIyAgIElOVFJPU1BFQ1RJT05fQ09NUElMRVJfQVJHUyAtIEFkZGl0aW9uYWwgYXJncyB0byBwYXNzIGluIHRvIHRoZSBjb21waWxlcgotLSMKLS0jICogU2ltcGxlIHR1dG9yaWFsCi0tIwotLSMgQWRkIHRoaXMgdG8gY29uZmlndXJlLmFjOgotLSMgICAtV25vLXBvcnRhYmlsaXR5IHRvIEFNX0lOSVRfQVVUT01BS0UKLS0jICAgR09CSkVDVF9JTlRST1NQRUNUSU9OX0NIRUNLKFswLjYuN10pCi0tIwotLSMgQWRkIHRoaXMgdG8gTWFrZWZpbGUuYW0gd2hlcmUgeW91ciBsaWJyYXJ5L3Byb2dyYW0gaXMgYnVpbHQ6Ci0tIyAgIGluY2x1ZGUgJChJTlRST1NQRUNUSU9OX01BS0VGSUxFKQotLSMgICBJTlRST1NQRUNUSU9OX0dJUlMgPSBZb3VyTGliLTEuMC5naXIKLS0jICAgWW91ckxpYl8xXzBfZ2lyX05BTUVTUEFDRSA9IFlvdXJMaWIKLS0jICAgWW91ckxpYl8xXzBfZ2lyX1ZFUlNJT04gPSAxLjAKLS0jICAgWW91ckxpYl8xXzBfZ2lyX0xJQlMgPSBsaWJ5b3VybGliLmxhCi0tIyAgIFlvdXJMaWJfMV8wX2dpcl9GSUxFUyA9ICQobGlieW91cmxpYl8xXzBfU09VUkNFUykKLS0jICAgZ2lyZGlyID0gJChkYXRhZGlyKS9naXItMS4wCi0tIyAgIGRpc3RfZ2lyX0RBVEEgPSBZb3VyTGliLTEuMC5naXIKLS0jICAgdHlwZWxpYmRpciA9ICQobGliZGlyKS9naXJlcG9zaXRvcnktMS4wCi0tIyAgIHR5cGVsaWJfREFUQSA9IFlvdXJMaWItMS4wLnR5cGVsaWIKLS0jICAgQ0xFQU5GSUxFUyA9ICQoZGlzdF9naXJfREFUQSkgJCh0eXBlbGliX0RBVEEpCi0tIwotLQotLSMgTWFrZSBzdXJlIHRoZSByZXF1aXJlZCB2YXJpYWJsZXMgYXJlIHNldCwgdGhlc2Ugc2hvdWxkIHVuZGVyIG5vcm1hbAotLSMgY2lyY3Vtc3RhbmNlcyBjb21lIGZyb20gaW50cm9zcGVjdGlvbi5tNAotLSQoaWYgJChJTlRST1NQRUNUSU9OX1NDQU5ORVIpLCwkKGVycm9yIE5lZWQgdG8gZGVmaW5lIElOVFJPU1BFQ1RJT05fU0NBTk5FUikpCi0tJChpZiAkKElOVFJPU1BFQ1RJT05fQ09NUElMRVIpLCwkKGVycm9yIE5lZWQgdG8gZGVmaW5lIElOVFJPU1BFQ1RJT05fQ09NUElMRVIpKQotLQotLSMgUHJpdmF0ZSBmdW5jdGlvbnMKLS0KLS0jIyBUcmFuc2Zvcm0gdGhlIGdpciBmaWxlbmFtZSB0byBzb21ldGhpbmcgd2hpY2ggY2FuIHJlZmVyZW5jZSB0aHJvdWdoIGEgdmFyaWFibGUKLS0jIyB3aXRob3V0IGF1dG9tYWtlL21ha2UgY29tcGxhaW5pbmcsIGVnIEd0ay0yLjAuZ2lyIC0+IEd0a18yXzBfZ2lyCi0tX2dpcl9uYW1lID0gJChzdWJzdCAvLF8sJChzdWJzdCAtLF8sJChzdWJzdCAuLF8sJCgxKSkpKQotLQotLSMgTmFtZXNwYWNlIGFuZCBWZXJzaW9uIGlzIGVpdGhlciBmZXRjaGVkIGZyb20gdGhlIGdpciBmaWxlbmFtZQotLSMgb3IgdGhlIF9OQU1FU1BBQ0UvX1ZFUlNJT04gdmFyaWFibGUgY29tYm8KLS1fZ2lyX25hbWVzcGFjZSA9ICQob3IgJCgkKF9naXJfbmFtZSlfTkFNRVNQQUNFKSwkKGZpcnN0d29yZCAkKHN1YnN0IC0sICwkKG5vdGRpciAkKDEpKSkpKQotLV9naXJfdmVyc2lvbiA9ICQob3IgJCgkKF9naXJfbmFtZSlfVkVSU0lPTiksJChsYXN0d29yZCAkKHN1YnN0IC0sICwkKDE6Lmdpcj0pKSkpCi0tCi0tIyBfUFJPR1JBTSBpcyBhbiBvcHRpb25hbCB2YXJpYWJsZSB3aGljaCBuZWVkcyBpdCdzIG93biAtLXByb2dyYW0gYXJndW1lbnQKLS1fZ2lyX3Byb2dyYW0gPSAkKGlmICQoJChfZ2lyX25hbWUpX1BST0dSQU0pLC0tcHJvZ3JhbT0kKCQoX2dpcl9uYW1lKV9QUk9HUkFNKSkKLS0KLS0jIFZhcmlhYmxlcyB3aGljaCBwcm92aWRlcyBhIGxpc3Qgb2YgdGhpbmdzCi0tX2dpcl9saWJyYXJpZXMgPSAkKGZvcmVhY2ggbGliLCQoJChfZ2lyX25hbWUpX0xJQlMpLC0tbGlicmFyeT0kKGxpYikpCi0tX2dpcl9wYWNrYWdlcyA9ICQoZm9yZWFjaCBwa2csJCgkKF9naXJfbmFtZSlfUEFDS0FHRVMpLC0tcGtnPSQocGtnKSkKLS1fZ2lyX2luY2x1ZGVzID0gJChmb3JlYWNoIGluY2x1ZGUsJCgkKF9naXJfbmFtZSlfSU5DTFVERVMpLC0taW5jbHVkZT0kKGluY2x1ZGUpKQotLV9naXJfZXhwb3J0X3BhY2thZ2VzID0gJChmb3JlYWNoIHBrZywkKCQoX2dpcl9uYW1lKV9FWFBPUlRfUEFDS0FHRVMpLC0tcGtnLWV4cG9ydD0kKHBrZykpCi0tCi0tIyBSZXVzZSB0aGUgTElCVE9PTCB2YXJpYWJsZSBmcm9tIGF1dG9tYWtlIGlmIGl0J3Mgc2V0LCBidXQKLS0jIHdvcmsgYXJvdW5kIE1TWVMgd2VpcmRuZXNzOiBXaGVuIHJ1bm5pbmcgZy1pci1zY2FubmVyLCBNU1lTIGNoYW5nZXMKLS0jIGEgY29tbWFuZC1saW5lIGFyZ3VtZW50IC0tbGlidG9vbD0iL2Jpbi9zaCAuLi8uLi9saWJ0b29sIiBpbnRvCi0tIyAtLWxpYnRvb2w9Yzovb3B0L21zeXMvMS4wL2Jpbi9saWJ0b29sLiBTbyBqdXN0IHVzZSBzaC5leGUgd2l0aG91dCBwYXRoCi0tIyBiZWNhdXNlIHdlIGFscmVhZHkgImtub3ciIHdoZXJlIHRoZSBsaWJ0b29sIGNvbmZpZ3VyZSBwcm9kdWNlZCBpcy4KLS1fZ2lyX2xpYnRvb2wgPSAkKGlmICQoZmluZHN0cmluZyBNSU5HVzMyLCQoc2hlbGwgdW5hbWUgLXMpKSwtLWxpYnRvb2w9IiQodG9wX2J1aWxkZGlyKS9saWJ0b29sIiwkKGlmICQoTElCVE9PTCksLS1saWJ0b29sPSIkKExJQlRPT0wpIikpCi0tCi0tIyBNYWNyb3MgZm9yIEFNX1NJTEVOVF9SVUxFUyBwcmV0dGluZXNzCi0tX2dpcl92ZXJib3NpdHkgPSAkKGlmICQoQU1fREVGQVVMVF9WRVJCT1NJVFkpLCQoQU1fREVGQVVMVF9WRVJCT1NJVFkpLDEpCi0tCi0tX2dpcl9zaWxlbnRfc2Nhbm5lcl9wcmVmaXggPSAkKF9naXJfc2lsZW50X3NjYW5uZXJfcHJlZml4XyQoVikpCi0tX2dpcl9zaWxlbnRfc2Nhbm5lcl9wcmVmaXhfID0gJChfZ2lyX3NpbGVudF9zY2FubmVyX3ByZWZpeF8kKF9naXJfdmVyYm9zaXR5KSkKLS1fZ2lyX3NpbGVudF9zY2FubmVyX3ByZWZpeF8wID0gQGVjaG8gIiAgR0lTQ0FOICQoMSkiOwotLV9naXJfc2lsZW50X3NjYW5uZXJfb3B0cyA9ICQoX2dpcl9zaWxlbnRfc2Nhbm5lcl9vcHRzXyQoVikpCi0tX2dpcl9zaWxlbnRfc2Nhbm5lcl9vcHRzXyA9ICQoX2dpcl9zaWxlbnRfc2Nhbm5lcl9vcHRzXyQoX2dpcl92ZXJib3NpdHkpKQotLV9naXJfc2lsZW50X3NjYW5uZXJfb3B0c18wID0gLS1xdWlldAotLQotLV9naXJfc2lsZW50X2NvbXBpbGVyID0gJChfZ2lyX3NpbGVudF9jb21waWxlcl8kKFYpKQotLV9naXJfc2lsZW50X2NvbXBpbGVyXyA9ICQoX2dpcl9zaWxlbnRfY29tcGlsZXJfJChfZ2lyX3ZlcmJvc2l0eSkpCi0tX2dpcl9zaWxlbnRfY29tcGlsZXJfMCA9IEBlY2hvICIgIEdJQ09NUCAkKDEpIjsKLS0KLS0jCi0tIyBDcmVhdGVzIGEgR0lSIGJ5IHNjYW5uaW5nIEMgaGVhZGVycy9zb3VyY2VzCi0tIyAkKDEpIC0gTmFtZSBvZiB0aGUgZ2lyIGZpbGUgKG91dHB1dCkKLS0jCi0tIyBJZiBvdXRwdXQgaXMgR3RrLTIuMC5naXIgdGhlbiB5b3Ugc2hvdWxkIG5hbWUgdGhlIHZhcmlhYmxlcyBsaWtlCi0tIyBHdGtfMl8wX2dpcl9OQU1FU1BBQ0UsIEd0a18yXzBfZ2lyX1ZFUlNJT04gZXRjLgotLSMgUmVxdWlyZWQgdmFyaWFibGVzOgotLSMgRklMRVMgLSBDIHNvdXJjZXMgYW5kIGhlYWRlcnMgd2hpY2ggc2hvdWxkIGJlIHNjYW5uZWQKLS0jCi0tIyBPbmUgb2YgdGhlc2UgdmFyaWFibGVzIGFyZSByZXF1aXJlZDoKLS0jIExJQlMgLSBMaWJyYXJ5IHdoZXJlIHRoZSBzeW1ib2wgcmVwcmVzZW50ZWQgaW4gdGhlIGdpciBjYW4gYmUgZm91bmQKLS0jIFBST0dSQU0gLSBQcm9ncmFtIHdoZXJlIHRoZSBzeW1ib2wgcmVwcmVzZW50ZWQgaW4gdGhlIGdpciBjYW4gYmUgZm91bmQKLS0jCi0tIyBPcHRpb25hbCB2YXJpYWJsZXMKLS0jIE5BTUVTUEFDRSAtIE5hbWVzcGFjZSBvZiB0aGUgZ2lyLCBmaXJzdCBsZXR0ZXIgY2FwaXRhbCwKLS0jICAgcmVzdCBzaG91bGQgYmUgbG93ZXIgY2FzZSwgZm9yIGluc3RhbmNlOiAnR3RrJywgJ0NsdXR0ZXInLCAnQ2x1dHRlckd0aycuCi0tIyAgIElmIG5vdCBwcmVzZW50IHRoZSBuYW1lc3BhY2Ugd2lsbCBiZSBmZXRjaGVkIGZyb20gdGhlIGdpciBmaWxlbmFtZSwKLS0jICAgdGhlIHBhcnQgYmVmb3JlIHRoZSBmaXJzdCBkYXNoLiBGb3IgJ0d0ay0yLjAnLCBuYW1lc3BhY2Ugd2lsbCBiZSAnR3RrJy4KLS0jIFZFUlNJT04gLSBWZXJzaW9uIG9mIHRoZSBnaXIsIGlmIG5vdCBwcmVzZW50LCB3aWxsIGJlIGZldGNoZWQgZnJvbSBnaXIKLS0jIGZpbGVuYW1lLCB0aGUgcGFydCBhZnRlciB0aGUgZmlyc3QgZGFzaC4gRm9yICdHdGstMi4wJywgdmVyc2lvbiB3aWxsIGJlICcyLjAnLgotLSMgTElCVE9PTCAtIENvbW1hbmQgdG8gaW52b2tlIGxpYnRvb2wsIHVzdWFsbHkgc2V0IGJ5IGF1dG9tYWtlCi0tIyBTQ0FOTkVSRkxBR1MgLSBGbGFncyB0byBwYXNzIGluIHRvIHRoZSBzY2FubmVyLCBzZWUgZy1pci1zY2FubmVyKDEpIGZvciBhIGxpc3QKLS0jIENGTEFHUyAtIEZsYWdzIHRvIHBhc3MgaW4gdG8gdGhlIHBhcnNlciB3aGVuIHNjYW5uaW5nIGhlYWRlcnMKLS0jIExERkxBR1MgLSBMaW5rZXIgZmxhZ3MgdXNlZCBieSB0aGUgc2Nhbm5lcgotLSMgUEFDS0FHRVMgLSBsaXN0IG9mIHBrZy1jb25maWcgbmFtZXMgd2hpY2ggY2ZsYWdzIGFyZSByZXF1aXJlZCB0byBwYXJzZQotLSMgICB0aGUgaGVhZGVycyBvZiB0aGlzIGdpcgotLSMgSU5DTFVERVMgLSBHaXIgZmlsZXMgdG8gaW5jbHVkZSB3aXRob3V0IHRoZSAuZ2lyIHN1ZmZpeCwgZm9yIGluc3RhbmNlCi0tIyAgIEdMaWItMi4wLCBHdGstMi4wLiBUaGlzIGlzIG5lZWRlZCBmb3IgYWxsIGxpYnJhcmllcyB3aGljaCB5b3UgZGVwZW5kIG9uIHRoYXQKLS0jICAgcHJvdmlkZXMgaW50cm9zcGVjdGlvbiBpbmZvcm1hdGlvbi4KLS0jIEVYUE9SVF9QQUNLQUdFUyAtIGxpc3Qgb2YgcGtnLWNvbmZpZyBuYW1lcyB0aGF0IGFyZSBwcm92aWRlZCBieSB0aGlzIGdpci4KLS0jICAgQnkgZGVmYXVsdCB0aGUgbmFtZXMgaW4gdGhlIFBBQ0tBR0VTIHZhcmlhYmxlIHdpbGwgYmUgdXNlZC4KLS0jCi0tCi0tZGVmaW5lIGludHJvc3BlY3Rpb24tc2Nhbm5lcgotLQotLSMgQmFzaWMgc2FuaXR5IGNoZWNrLCB0byBtYWtlIHN1cmUgcmVxdWlyZWQgdmFyaWFibGVzIGFyZSBzZXQKLS0kKGlmICQoJChfZ2lyX25hbWUpX0ZJTEVTKSwsJChlcnJvciBOZWVkIHRvIGRlZmluZSAkKF9naXJfbmFtZSlfRklMRVMpKQotLSQoaWYgJChvciAkKGZpbmRzdHJpbmcgLS1oZWFkZXItb25seSwkKCQoX2dpcl9uYW1lKV9TQ0FOTkVSRkxBR1MpKSwKLS0gICAgICAgICAgJCgkKF9naXJfbmFtZSlfTElCUyksCi0tICAgICAgICAgICQoJChfZ2lyX25hbWUpX1BST0dSQU0pKSwsCi0tICAgICQoZXJyb3IgTmVlZCB0byBkZWZpbmUgJChfZ2lyX25hbWUpX0xJQlMgb3IgJChfZ2lyX25hbWUpX1BST0dSQU0pKQotLQotLSMgT25seSBkZXBlbmRlbmNpZXMgd2Uga25vdyBhcmUgYWN0dWFsbHkgZmlsZW5hbWVzIGdvZXMgaW50byBfRklMRVMsIG1ha2UKLS0jIHN1cmUgdGhlc2UgYXJlIGJ1aWx0IGJlZm9yZSBydW5uaW5nIHRoZSBzY2FubmVyLiBMaWJyYXJpZXMgYW5kIHByb2dyYW1zCi0tIyBuZWVkcyB0byBiZSBhZGRlZCBtYW51YWxseS4KLS0kKDEpOiAkJCgkKF9naXJfbmFtZSlfRklMRVMpCi0tCUAgJChNS0RJUl9QKSAkKGRpciAkKDEpKQotLQkkKF9naXJfc2lsZW50X3NjYW5uZXJfcHJlZml4KSAkKElOVFJPU1BFQ1RJT05fU0NBTk5FUl9FTlYpICQoSU5UUk9TUEVDVElPTl9TQ0FOTkVSKSAkKF9naXJfc2lsZW50X3NjYW5uZXJfb3B0cykgXAotLQkkKElOVFJPU1BFQ1RJT05fU0NBTk5FUl9BUkdTKSBcCi0tCSAgLS1uYW1lc3BhY2U9JChfZ2lyX25hbWVzcGFjZSkgXAotLQkgIC0tbnN2ZXJzaW9uPSQoX2dpcl92ZXJzaW9uKSBcCi0tCSAgJChfZ2lyX2xpYnRvb2wpIFwKLS0JICAkKF9naXJfcGFja2FnZXMpIFwKLS0JICAkKF9naXJfaW5jbHVkZXMpIFwKLS0JICAkKF9naXJfZXhwb3J0X3BhY2thZ2VzKSBcCi0tCSAgJChfZ2lyX3Byb2dyYW0pIFwKLS0JICAkKF9naXJfbGlicmFyaWVzKSBcCi0tCSAgJCgkKF9naXJfbmFtZSlfU0NBTk5FUkZMQUdTKSBcCi0tCSAgJCgkKF9naXJfbmFtZSlfQ0ZMQUdTKSBcCi0tCSAgJCgkKF9naXJfbmFtZSlfTERGTEFHUykgXAotLQkgICQkXiBcCi0tCSAgLS1vdXRwdXQgJCgxKQotLWVuZGVmCi0tCi0tJChmb3JlYWNoIGdpciwkKElOVFJPU1BFQ1RJT05fR0lSUyksJChldmFsICQoY2FsbCBpbnRyb3NwZWN0aW9uLXNjYW5uZXIsJChnaXIpKSkpCi0tCi0tIwotLSMgQ29tcGlsZXMgYSBnaXIgaW50byBhIHR5cGVsaWIKLS0jICQoMSk6IGdpciBmaWxlbmFtZSAoaW5wdXQpCi0tIyAkKDIpOiB0eXBlbGliIGZpbGVuYW1lIChvdXRwdXQpCi0tIwotLWRlZmluZSBpbnRyb3NwZWN0aW9uLWNvbXBpbGVyCi0tJChfZ2lyX3NpbGVudF9jb21waWxlcikgJChJTlRST1NQRUNUSU9OX0NPTVBJTEVSKSAkKElOVFJPU1BFQ1RJT05fQ09NUElMRVJfQVJHUykgLS1pbmNsdWRlZGlyPS4gJCgxKSAtbyAkKDIpCi0tZW5kZWYKLS0KLS0jIFNpbXBsZSBydWxlIHRvIGNvbXBpbGUgYSB0eXBlbGliLgotLSUudHlwZWxpYjogJS5naXIKLS0JJChjYWxsIGludHJvc3BlY3Rpb24tY29tcGlsZXIsJDwsJEApCi1kaWZmIC0tZ2l0IGEvaW50cm9zcGVjdGlvbi5tNCBiL2ludHJvc3BlY3Rpb24ubTQKLWRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAotaW5kZXggZDg5YzNkOS4uMDAwMDAwMAotLS0tIGEvaW50cm9zcGVjdGlvbi5tNAotKysrIC9kZXYvbnVsbAotQEAgLTEsOTYgKzAsMCBAQAotLWRubCAtKi0gbW9kZTogYXV0b2NvbmYgLSotCi0tZG5sIENvcHlyaWdodCAyMDA5IEpvaGFuIERhaGxpbgotLWRubAotLWRubCBUaGlzIGZpbGUgaXMgZnJlZSBzb2Z0d2FyZTsgdGhlIGF1dGhvcihzKSBnaXZlcyB1bmxpbWl0ZWQKLS1kbmwgcGVybWlzc2lvbiB0byBjb3B5IGFuZC9vciBkaXN0cmlidXRlIGl0LCB3aXRoIG9yIHdpdGhvdXQKLS1kbmwgbW9kaWZpY2F0aW9ucywgYXMgbG9uZyBhcyB0aGlzIG5vdGljZSBpcyBwcmVzZXJ2ZWQuCi0tZG5sCi0tCi0tIyBzZXJpYWwgMQotLQotLW00X2RlZmluZShbX0dPQkpFQ1RfSU5UUk9TUEVDVElPTl9DSEVDS19JTlRFUk5BTF0sCi0tWwotLSAgICBBQ19CRUZPUkUoW0FDX1BST0dfTElCVE9PTF0sWyQwXSlkbmwgc2V0dXAgbGlidG9vbCBmaXJzdAotLSAgICBBQ19CRUZPUkUoW0FNX1BST0dfTElCVE9PTF0sWyQwXSlkbmwgc2V0dXAgbGlidG9vbCBmaXJzdAotLSAgICBBQ19CRUZPUkUoW0xUX0lOSVRdLFskMF0pZG5sIHNldHVwIGxpYnRvb2wgZmlyc3QKLS0KLS0gICAgZG5sIGVuYWJsZS9kaXNhYmxlIGludHJvc3BlY3Rpb24KLS0gICAgbTRfaWYoWyQyXSwgW3JlcXVpcmVdLAotLSAgICBbZG5sCi0tICAgICAgICBlbmFibGVfaW50cm9zcGVjdGlvbj15ZXMKLS0gICAgXSxbZG5sCi0tICAgICAgICBBQ19BUkdfRU5BQkxFKGludHJvc3BlY3Rpb24sCi0tICAgICAgICAgICAgICAgICAgQVNfSEVMUF9TVFJJTkcoWy0tZW5hYmxlLWludHJvc3BlY3Rpb25bPUA8OkBuby9hdXRvL3llc0A6PkBdXSwKLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbRW5hYmxlIGludHJvc3BlY3Rpb24gZm9yIHRoaXMgYnVpbGRdKSwsIAotLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtlbmFibGVfaW50cm9zcGVjdGlvbj1hdXRvXSkKLS0gICAgXSlkbmwKLS0KLS0gICAgQUNfTVNHX0NIRUNLSU5HKFtmb3IgZ29iamVjdC1pbnRyb3NwZWN0aW9uXSkKLS0KLS0gICAgZG5sIHByZXNlbmNlL3ZlcnNpb24gY2hlY2tpbmcKLS0gICAgQVNfQ0FTRShbJGVuYWJsZV9pbnRyb3NwZWN0aW9uXSwKLS0gICAgW25vXSwgW2RubAotLSAgICAgICAgZm91bmRfaW50cm9zcGVjdGlvbj0ibm8gKGRpc2FibGVkLCB1c2UgLS1lbmFibGUtaW50cm9zcGVjdGlvbiB0byBlbmFibGUpIgotLSAgICBdLGRubAotLSAgICBbeWVzXSxbZG5sCi0tICAgICAgICBQS0dfQ0hFQ0tfRVhJU1RTKFtnb2JqZWN0LWludHJvc3BlY3Rpb24tMS4wXSwsCi0tICAgICAgICAgICAgICAgICAgICAgICAgIEFDX01TR19FUlJPUihbZ29iamVjdC1pbnRyb3NwZWN0aW9uLTEuMCBpcyBub3QgaW5zdGFsbGVkXSkpCi0tICAgICAgICBQS0dfQ0hFQ0tfRVhJU1RTKFtnb2JqZWN0LWludHJvc3BlY3Rpb24tMS4wID49ICQxXSwKLS0gICAgICAgICAgICAgICAgICAgICAgICAgZm91bmRfaW50cm9zcGVjdGlvbj15ZXMsCi0tICAgICAgICAgICAgICAgICAgICAgICAgIEFDX01TR19FUlJPUihbWW91IG5lZWQgdG8gaGF2ZSBnb2JqZWN0LWludHJvc3BlY3Rpb24gPj0gJDEgaW5zdGFsbGVkIHRvIGJ1aWxkIEFDX1BBQ0tBR0VfTkFNRV0pKQotLSAgICBdLGRubAotLSAgICBbYXV0b10sW2RubAotLSAgICAgICAgUEtHX0NIRUNLX0VYSVNUUyhbZ29iamVjdC1pbnRyb3NwZWN0aW9uLTEuMCA+PSAkMV0sIGZvdW5kX2ludHJvc3BlY3Rpb249eWVzLCBmb3VuZF9pbnRyb3NwZWN0aW9uPW5vKQotLQlkbmwgQ2Fub25pY2FsaXplIGVuYWJsZV9pbnRyb3NwZWN0aW9uCi0tCWVuYWJsZV9pbnRyb3NwZWN0aW9uPSRmb3VuZF9pbnRyb3NwZWN0aW9uCi0tICAgIF0sZG5sCi0tICAgIFtkbmwJCi0tICAgICAgICBBQ19NU0dfRVJST1IoW2ludmFsaWQgYXJndW1lbnQgcGFzc2VkIHRvIC0tZW5hYmxlLWludHJvc3BlY3Rpb24sIHNob3VsZCBiZSBvbmUgb2YgQDw6QG5vL2F1dG8veWVzQDo+QF0pCi0tICAgIF0pZG5sCi0tCi0tICAgIEFDX01TR19SRVNVTFQoWyRmb3VuZF9pbnRyb3NwZWN0aW9uXSkKLS0KLS0gICAgSU5UUk9TUEVDVElPTl9TQ0FOTkVSPQotLSAgICBJTlRST1NQRUNUSU9OX0NPTVBJTEVSPQotLSAgICBJTlRST1NQRUNUSU9OX0dFTkVSQVRFPQotLSAgICBJTlRST1NQRUNUSU9OX0dJUkRJUj0KLS0gICAgSU5UUk9TUEVDVElPTl9UWVBFTElCRElSPQotLSAgICBpZiB0ZXN0ICJ4JGZvdW5kX2ludHJvc3BlY3Rpb24iID0gInh5ZXMiOyB0aGVuCi0tICAgICAgIElOVFJPU1BFQ1RJT05fU0NBTk5FUj1gJFBLR19DT05GSUcgLS12YXJpYWJsZT1nX2lyX3NjYW5uZXIgZ29iamVjdC1pbnRyb3NwZWN0aW9uLTEuMGAKLS0gICAgICAgSU5UUk9TUEVDVElPTl9DT01QSUxFUj1gJFBLR19DT05GSUcgLS12YXJpYWJsZT1nX2lyX2NvbXBpbGVyIGdvYmplY3QtaW50cm9zcGVjdGlvbi0xLjBgCi0tICAgICAgIElOVFJPU1BFQ1RJT05fR0VORVJBVEU9YCRQS0dfQ09ORklHIC0tdmFyaWFibGU9Z19pcl9nZW5lcmF0ZSBnb2JqZWN0LWludHJvc3BlY3Rpb24tMS4wYAotLSAgICAgICBJTlRST1NQRUNUSU9OX0dJUkRJUj1gJFBLR19DT05GSUcgLS12YXJpYWJsZT1naXJkaXIgZ29iamVjdC1pbnRyb3NwZWN0aW9uLTEuMGAKLS0gICAgICAgSU5UUk9TUEVDVElPTl9UWVBFTElCRElSPSIkKCRQS0dfQ09ORklHIC0tdmFyaWFibGU9dHlwZWxpYmRpciBnb2JqZWN0LWludHJvc3BlY3Rpb24tMS4wKSIKLS0gICAgICAgSU5UUk9TUEVDVElPTl9DRkxBR1M9YCRQS0dfQ09ORklHIC0tY2ZsYWdzIGdvYmplY3QtaW50cm9zcGVjdGlvbi0xLjBgCi0tICAgICAgIElOVFJPU1BFQ1RJT05fTElCUz1gJFBLR19DT05GSUcgLS1saWJzIGdvYmplY3QtaW50cm9zcGVjdGlvbi0xLjBgCi0tICAgICAgIElOVFJPU1BFQ1RJT05fTUFLRUZJTEU9YCRQS0dfQ09ORklHIC0tdmFyaWFibGU9ZGF0YWRpciBnb2JqZWN0LWludHJvc3BlY3Rpb24tMS4wYC9nb2JqZWN0LWludHJvc3BlY3Rpb24tMS4wL01ha2VmaWxlLmludHJvc3BlY3Rpb24KLS0gICAgZmkKLS0gICAgQUNfU1VCU1QoSU5UUk9TUEVDVElPTl9TQ0FOTkVSKQotLSAgICBBQ19TVUJTVChJTlRST1NQRUNUSU9OX0NPTVBJTEVSKQotLSAgICBBQ19TVUJTVChJTlRST1NQRUNUSU9OX0dFTkVSQVRFKQotLSAgICBBQ19TVUJTVChJTlRST1NQRUNUSU9OX0dJUkRJUikKLS0gICAgQUNfU1VCU1QoSU5UUk9TUEVDVElPTl9UWVBFTElCRElSKQotLSAgICBBQ19TVUJTVChJTlRST1NQRUNUSU9OX0NGTEFHUykKLS0gICAgQUNfU1VCU1QoSU5UUk9TUEVDVElPTl9MSUJTKQotLSAgICBBQ19TVUJTVChJTlRST1NQRUNUSU9OX01BS0VGSUxFKQotLQotLSAgICBBTV9DT05ESVRJT05BTChIQVZFX0lOVFJPU1BFQ1RJT04sIHRlc3QgIngkZm91bmRfaW50cm9zcGVjdGlvbiIgPSAieHllcyIpCi0tXSkKLS0KLS0KLS1kbmwgVXNhZ2U6Ci0tZG5sICAgR09CSkVDVF9JTlRST1NQRUNUSU9OX0NIRUNLKFttaW5pbXVtLWctaS12ZXJzaW9uXSkKLS0KLS1BQ19ERUZVTihbR09CSkVDVF9JTlRST1NQRUNUSU9OX0NIRUNLXSwKLS1bCi0tICBfR09CSkVDVF9JTlRST1NQRUNUSU9OX0NIRUNLX0lOVEVSTkFMKFskMV0pCi0tXSkKLS0KLS1kbmwgVXNhZ2U6Ci0tZG5sICAgR09CSkVDVF9JTlRST1NQRUNUSU9OX1JFUVVJUkUoW21pbmltdW0tZy1pLXZlcnNpb25dKQotLQotLQotLUFDX0RFRlVOKFtHT0JKRUNUX0lOVFJPU1BFQ1RJT05fUkVRVUlSRV0sCi0tWwotLSAgX0dPQkpFQ1RfSU5UUk9TUEVDVElPTl9DSEVDS19JTlRFUk5BTChbJDFdLCBbcmVxdWlyZV0pCi0tXSkKLS0tIAotMi4xLjQKLQpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1nbm9tZS9ndGstZG9jLXN0dWIvZ3RrLWRvYy1zdHViX2dpdC5iYiBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ25vbWUvZ3RrLWRvYy1zdHViL2d0ay1kb2Mtc3R1Yl9naXQuYmIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDg0ZTQ5YzEuLjAwMDAwMDAKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1nbm9tZS9ndGstZG9jLXN0dWIvZ3RrLWRvYy1zdHViX2dpdC5iYgorKysgL2Rldi9udWxsCkBAIC0xLDMzICswLDAgQEAKLVNVTU1BUlkgPSAiU3R1YiBpbXBsZW1lbnRhdGlvbiBvZiBndGstZG9jIgotREVTQ1JJUFRJT04gPSAiU3R1YiBpbXBsZW1lbnRhdGlvbiBvZiBndGstZG9jLCBhcyB3ZSBkb24ndCB3YW50IHRvIGJ1aWxkIHRoZSBBUEkgZG9jdW1lbnRhdGlvbiIKLVNFQ1RJT04gPSAieDExL2Jhc2UiCi1MSUNFTlNFID0gIkdQTHYyIgotTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9OTRkNTVkNTEyYTliYTM2Y2FhOWI3ZGYwNzliYWUxOWYiCi0KLVBST1ZJREVTID0gImd0ay1kb2MiCi0KLVNSQ1JFViA9ICIxZGVhMjY2NTkzZWRiNzY2ZDZkODk4Yzc5NDUxZWYxOTNlYjE3Y2ZhIgotUFYgPSAiMS4xK2dpdCR7U1JDUFZ9IgotCi1TUkNfVVJJID0gImdpdDovL2dpdC5nbm9tZS5vcmcvJHtCUE59IFwKLQkgICBmaWxlOi8vMDAwMS1SZXZlcnQtSW1wb3J0LWludHJvc3BlY3Rpb24tc3R1Yi1tYWNoaW5lcnktdG9vLnBhdGNoIFwKLQkgICIKLQotUyA9ICIke1dPUktESVJ9L2dpdCIKLQotZG9fY29uZmlndXJlKCkgewotCS4vY29uZmlndXJlIC0tcHJlZml4PSR7cHJlZml4fSBcCi0gICAgICAgICAgICAgICAgICAgIC0tc3lzY29uZmRpcj0ke3N5c2NvbmZkaXJ9IFwKLSAgICAgICAgICAgICAgICAgICAgLS1iaW5kaXI9JHtiaW5kaXJ9IFwKLSAgICAgICAgICAgICAgICAgICAgLS1saWJkaXI9JHtsaWJkaXJ9IFwKLSAgICAgICAgICAgICAgICAgICAgLS1kYXRhZGlyPSR7ZGF0YWRpcn0gXAotICAgICAgICAgICAgICAgICAgICAtLWRhdGFyb290ZGlyPSR7ZGF0YWRpcn0KLX0KLQotZG9faW5zdGFsbCgpIHsKLQlvZV9ydW5tYWtlIGluc3RhbGwgREVTVERJUj0iJHtEfSIKLX0KLQotRklMRVNfJHtQTn0gKz0gIiR7ZGF0YWRpcn0iCi0KLUJCQ0xBU1NFWFRFTkQgPSAibmF0aXZlIgpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1nbm9tZS9ndGstZG9jL2ZpbGVzLzAwMDEtRG8tbm90LWVycm9yLW91dC1pZi1wZXJsLWlzLW5vdC1mb3VuZC1vci1pdHMtdmVyc2lvbi5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ25vbWUvZ3RrLWRvYy9maWxlcy8wMDAxLURvLW5vdC1lcnJvci1vdXQtaWYtcGVybC1pcy1ub3QtZm91bmQtb3ItaXRzLXZlcnNpb24ucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGE5MDI4NwotLS0gL2Rldi9udWxsCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ25vbWUvZ3RrLWRvYy9maWxlcy8wMDAxLURvLW5vdC1lcnJvci1vdXQtaWYtcGVybC1pcy1ub3QtZm91bmQtb3ItaXRzLXZlcnNpb24ucGF0Y2gKQEAgLTAsMCArMSw0MCBAQAorRnJvbSBlNzMzMjQxZmI1ODBmMDMyZWZiYmU2ODRlYzM1ZDRjOWQyN2YxNTk1IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogQWxleGFuZGVyIEthbmF2aW4gPGFsZXgua2FuYXZpbkBnbWFpbC5jb20+CitEYXRlOiBUaHUsIDggU2VwIDIwMTYgMTM6Mzg6MzkgKzAzMDAKK1N1YmplY3Q6IFtQQVRDSF0gRG8gbm90IGVycm9yIG91dCBpZiBwZXJsIGlzIG5vdCBmb3VuZCBvciBpdHMgdmVyc2lvbiBpcyB0b28KKyBvbGQuCisKK1RoaXMgYWxsb3dzIHVzZSB0byBhdm9pZCBkZXBlbmRpbmcgb24gcGVybC1uYXRpdmUgaWYgd2UncmUgbm90IGdvaW5nCit0byB1c2UgaXQgKHdoZW4gYXBpLWRvY3MgYXJlIGRpc2FibGVkKS4KKworVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtvZS1jb3JlIHNwZWNpZmljXQorU2lnbmVkLW9mZi1ieTogQWxleGFuZGVyIEthbmF2aW4gPGFsZXgua2FuYXZpbkBnbWFpbC5jb20+CistLS0KKyBjb25maWd1cmUuYWMgfCA0ICsrLS0KKyAxIGZpbGUgY2hhbmdlZCwgMiBpbnNlcnRpb25zKCspLCAyIGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvY29uZmlndXJlLmFjIGIvY29uZmlndXJlLmFjCitpbmRleCAyYTYxZDZlLi4yOTQxNWJkIDEwMDY0NAorLS0tIGEvY29uZmlndXJlLmFjCisrKysgYi9jb25maWd1cmUuYWMKK0BAIC0zNiw3ICszNiw3IEBAIGRubCBDaGVjayBmb3IgUGVybC4KKyBkbmwKKyBBQ19QQVRIX1BST0coW1BFUkxdLCBbcGVybF0pCisgaWYgdGVzdCAteiAiJFBFUkwiOyB0aGVuCistCUFDX01TR19FUlJPUihbcGVybCBub3QgZm91bmRdKQorKwlBQ19NU0dfV0FSTihbcGVybCBub3QgZm91bmRdKQorIGZpCisgCisgQUNfTVNHX0NIRUNLSU5HKFtpZiBQZXJsIHZlcnNpb24gPj0gNS4xOC4wXSkKK0BAIC00NCw3ICs0NCw3IEBAIGlmICIkUEVSTCIgLWUgInJlcXVpcmUgdjUuMTguMCI7IHRoZW4KKyAJQUNfTVNHX1JFU1VMVChbeWVzXSkKKyBlbHNlCisgCUFDX01TR19SRVNVTFQoW25vXSkKKy0JQUNfTVNHX0VSUk9SKFtwZXJsID49IDUuMTguMCBpcyByZXF1aXJlZCBmb3IgZ3RrLWRvY10pCisrCUFDX01TR19XQVJOKFtwZXJsID49IDUuMTguMCBpcyByZXF1aXJlZCBmb3IgZ3RrLWRvY10pCisgZmkKKyAKKyBkbmwKKy0tIAorMi45LjMKKwpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1nbm9tZS9ndGstZG9jL2ZpbGVzLzAwMDEtRG8tbm90LWVycm9yLW91dC1pZi14c2x0cHJvYy1pcy1ub3QtZm91bmQucGF0Y2ggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdub21lL2d0ay1kb2MvZmlsZXMvMDAwMS1Eby1ub3QtZXJyb3Itb3V0LWlmLXhzbHRwcm9jLWlzLW5vdC1mb3VuZC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45OWFlNGQ0Ci0tLSAvZGV2L251bGwKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1nbm9tZS9ndGstZG9jL2ZpbGVzLzAwMDEtRG8tbm90LWVycm9yLW91dC1pZi14c2x0cHJvYy1pcy1ub3QtZm91bmQucGF0Y2gKQEAgLTAsMCArMSwzMSBAQAorRnJvbSA4YjdmYmJiNDA1OTU5ZjI4NjhhZDZlYWRkN2RkMDAwMTg3NThhOGE1IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogQWxleGFuZGVyIEthbmF2aW4gPGFsZXgua2FuYXZpbkBnbWFpbC5jb20+CitEYXRlOiBXZWQsIDcgU2VwIDIwMTYgMTQ6NTI6MDQgKzAzMDAKK1N1YmplY3Q6IFtQQVRDSF0gRG8gbm90IGVycm9yIG91dCBpZiB4c2x0cHJvYyBpcyBub3QgZm91bmQuCisKK1RoaXMgYWxsb3dzIHVzIHRvIGRyb3AgdGhlIGhhcmQgeHNsdHByb2MgZGVwZW5kZW5jeSwgaWYgd2UncmUgbm90Citnb2luZyB0byBhY3R1YWxseSBydW4gdGhlIGd0a2RvYyBzY3JpcHRzICh3aGVuIGFwaSBkb2N1bWVudGF0aW9uIGlzCitkaXNhYmxlZCkuCisKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbb2UtY29yZSBzcGVjaWZpY10KK1NpZ25lZC1vZmYtYnk6IEFsZXhhbmRlciBLYW5hdmluIDxhbGV4LmthbmF2aW5AZ21haWwuY29tPgorLS0tCisgY29uZmlndXJlLmFjIHwgMiArLQorIDEgZmlsZSBjaGFuZ2VkLCAxIGluc2VydGlvbigrKSwgMSBkZWxldGlvbigtKQorCitkaWZmIC0tZ2l0IGEvY29uZmlndXJlLmFjIGIvY29uZmlndXJlLmFjCitpbmRleCBiMGM4OGQ3Li4yYTYxZDZlIDEwMDY0NAorLS0tIGEvY29uZmlndXJlLmFjCisrKysgYi9jb25maWd1cmUuYWMKK0BAIC01OCw3ICs1OCw3IEBAIGRubCBDaGVjayBmb3IgeHNsdHByb2MKKyBkbmwKKyBBQ19QQVRIX1BST0coW1hTTFRQUk9DXSwgW3hzbHRwcm9jXSkKKyBpZiB0ZXN0IC16ICIkWFNMVFBST0MiOyB0aGVuCistCUFDX01TR19FUlJPUihbeHNsdHByb2Mgbm90IGZvdW5kXSkKKysJQUNfTVNHX1dBUk4oW3hzbHRwcm9jIG5vdCBmb3VuZF0pCisgZmkKKyAKKyBkbmwKKy0tIAorMi45LjMKKwpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1nbm9tZS9ndGstZG9jL2ZpbGVzLzAwMDEtRG8tbm90LWhhcmRvY29kZS1wYXRocy10by1wZXJsLXB5dGhvbi1pbi1zY3JpcHRzLnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1nbm9tZS9ndGstZG9jL2ZpbGVzLzAwMDEtRG8tbm90LWhhcmRvY29kZS1wYXRocy10by1wZXJsLXB5dGhvbi1pbi1zY3JpcHRzLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ3N2ZjOWEKLS0tIC9kZXYvbnVsbAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdub21lL2d0ay1kb2MvZmlsZXMvMDAwMS1Eby1ub3QtaGFyZG9jb2RlLXBhdGhzLXRvLXBlcmwtcHl0aG9uLWluLXNjcmlwdHMucGF0Y2gKQEAgLTAsMCArMSwxMzkgQEAKK0Zyb20gNmZhYjgyYjkzYzdiZDMwMWViNDI0NDg1MTViMDJmN2NiMzMwNjg5NyBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEFsZXhhbmRlciBLYW5hdmluIDxhbGV4LmthbmF2aW5AZ21haWwuY29tPgorRGF0ZTogV2VkLCAzMSBBdWcgMjAxNiAxNjo0NDo0NiArMDMwMAorU3ViamVjdDogW1BBVENIXSBEbyBub3QgaGFyZG9jb2RlIHBhdGhzIHRvIHBlcmwvcHl0aG9uIGluIHNjcmlwdHMuCisKK0RvaW5nIHNvIHdoZW4gdGhlIGludGVycHJldGVycyBhcmUgc29tZXdoZXJlIGRlZXAgaW4gYSBzeXNyb290IGRpcmVjdG9yeQorY2FuIHJlYWNoIHRoZSBzaGViYW5nIGxpbmUgbGltaXQsIGFuZCByZXN1bHRpbmcgc2NyaXB0cyB3b3VsZG4ndCB3b3JrCitvbiB0YXJnZXRzIGVpdGhlci4KKworVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtvZS1jb3JlIHNwZWNpZmljXQorU2lnbmVkLW9mZi1ieTogQWxleGFuZGVyIEthbmF2aW4gPGFsZXgua2FuYXZpbkBnbWFpbC5jb20+CistLS0KKyBndGtkb2MtY2hlY2suaW4gICAgIHwgMiArLQorIGd0a2RvYy1jb21tb24ucGwuaW4gfCAyICstCisgZ3RrZG9jLWRlcHNjYW4uaW4gICB8IDIgKy0KKyBndGtkb2MtZml4eHJlZi5pbiAgIHwgMiArLQorIGd0a2RvYy1ta2RiLmluICAgICAgfCAyICstCisgZ3RrZG9jLW1rdG1wbC5pbiAgICB8IDIgKy0KKyBndGtkb2MtcmViYXNlLmluICAgIHwgMiArLQorIGd0a2RvYy1zY2FuLmluICAgICAgfCAyICstCisgZ3RrZG9jLXNjYW5nb2JqLmluICB8IDIgKy0KKyB0ZXN0cy90b29scy5zaC5pbiAgIHwgNCArKy0tCisgMTAgZmlsZXMgY2hhbmdlZCwgMTEgaW5zZXJ0aW9ucygrKSwgMTEgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9ndGtkb2MtY2hlY2suaW4gYi9ndGtkb2MtY2hlY2suaW4KK2luZGV4IDU2MGQ2OWIuLmI2MDg1N2YgMTAwNzU1CistLS0gYS9ndGtkb2MtY2hlY2suaW4KKysrKyBiL2d0a2RvYy1jaGVjay5pbgorQEAgLTEsNCArMSw0IEBACistIyFAUEVSTEAgLXcKKysjIS91c3IvYmluL2VudiBwZXJsCisgIyAtKi0gY3BlcmwgLSotCisgIworICMgZ3RrLWRvYyAtIEdUSyBEb2NCb29rIGRvY3VtZW50YXRpb24gZ2VuZXJhdG9yLgorZGlmZiAtLWdpdCBhL2d0a2RvYy1jb21tb24ucGwuaW4gYi9ndGtkb2MtY29tbW9uLnBsLmluCitpbmRleCA0NzQ3Mzk2Li5jZmFkYjc4IDEwMDY0NAorLS0tIGEvZ3RrZG9jLWNvbW1vbi5wbC5pbgorKysrIGIvZ3RrZG9jLWNvbW1vbi5wbC5pbgorQEAgLTEsNCArMSw0IEBACistIyFAUEVSTEAgLXcKKysjIS91c3IvYmluL2VudiBwZXJsCisgIyAtKi0gY3BlcmwgLSotCisgIworICMgZ3RrLWRvYyAtIEdUSyBEb2NCb29rIGRvY3VtZW50YXRpb24gZ2VuZXJhdG9yLgorZGlmZiAtLWdpdCBhL2d0a2RvYy1kZXBzY2FuLmluIGIvZ3RrZG9jLWRlcHNjYW4uaW4KK2luZGV4IDgzYWYwMWIuLjkxN2UyNDcgMTAwNjQ0CistLS0gYS9ndGtkb2MtZGVwc2Nhbi5pbgorKysrIGIvZ3RrZG9jLWRlcHNjYW4uaW4KK0BAIC0xLDQgKzEsNCBAQAorLSMhQFBZVEhPTkAKKysjIS91c3IvYmluL2VudiBweXRob24KKyAKKyBpbXBvcnQgZ3ppcCwgb3MucGF0aCwgcmUKKyAKK2RpZmYgLS1naXQgYS9ndGtkb2MtZml4eHJlZi5pbiBiL2d0a2RvYy1maXh4cmVmLmluCitpbmRleCAzZDllOGQwLi5kNTUxOTBiIDEwMDc1NQorLS0tIGEvZ3RrZG9jLWZpeHhyZWYuaW4KKysrKyBiL2d0a2RvYy1maXh4cmVmLmluCitAQCAtMSw0ICsxLDQgQEAKKy0jIUBQRVJMQCAtdworKyMhL3Vzci9iaW4vZW52IHBlcmwKKyAjIC0qLSBjcGVybCAtKi0KKyAjCisgIyBndGstZG9jIC0gR1RLIERvY0Jvb2sgZG9jdW1lbnRhdGlvbiBnZW5lcmF0b3IuCitkaWZmIC0tZ2l0IGEvZ3RrZG9jLW1rZGIuaW4gYi9ndGtkb2MtbWtkYi5pbgoraW5kZXggOGRkNmQ1ZS4uZDgwODc1MCAxMDA3NTUKKy0tLSBhL2d0a2RvYy1ta2RiLmluCisrKysgYi9ndGtkb2MtbWtkYi5pbgorQEAgLTEsNCArMSw0IEBACistIyFAUEVSTEAgLXcKKysjIS91c3IvYmluL2VudiBwZXJsCisgIyAtKi0gY3BlcmwgLSotCisgIworICMgZ3RrLWRvYyAtIEdUSyBEb2NCb29rIGRvY3VtZW50YXRpb24gZ2VuZXJhdG9yLgorZGlmZiAtLWdpdCBhL2d0a2RvYy1ta3RtcGwuaW4gYi9ndGtkb2MtbWt0bXBsLmluCitpbmRleCBjNjRkZmQzLi4yZjQ2YzE4IDEwMDc1NQorLS0tIGEvZ3RrZG9jLW1rdG1wbC5pbgorKysrIGIvZ3RrZG9jLW1rdG1wbC5pbgorQEAgLTEsNCArMSw0IEBACistIyFAUEVSTEAgLXcKKysjIS91c3IvYmluL2VudiBwZXJsCisgIyAtKi0gY3BlcmwgLSotCisgIworICMgZ3RrLWRvYyAtIEdUSyBEb2NCb29rIGRvY3VtZW50YXRpb24gZ2VuZXJhdG9yLgorZGlmZiAtLWdpdCBhL2d0a2RvYy1yZWJhc2UuaW4gYi9ndGtkb2MtcmViYXNlLmluCitpbmRleCAzNzU0ODJkLi5jZjA1YjQ1IDEwMDY0NAorLS0tIGEvZ3RrZG9jLXJlYmFzZS5pbgorKysrIGIvZ3RrZG9jLXJlYmFzZS5pbgorQEAgLTEsNCArMSw0IEBACistIyFAUEVSTEAgLXcKKysjIS91c3IvYmluL2VudiBwZXJsCisgIyAtKi0gY3BlcmwgLSotCisgIworICMgZ3RrLWRvYyAtIEdUSyBEb2NCb29rIGRvY3VtZW50YXRpb24gZ2VuZXJhdG9yLgorZGlmZiAtLWdpdCBhL2d0a2RvYy1zY2FuLmluIGIvZ3RrZG9jLXNjYW4uaW4KK2luZGV4IDA0OGU1YzkuLjc4YzYxMzYgMTAwNzU1CistLS0gYS9ndGtkb2Mtc2Nhbi5pbgorKysrIGIvZ3RrZG9jLXNjYW4uaW4KK0BAIC0xLDQgKzEsNCBAQAorLSMhQFBFUkxAIC13CisrIyEvdXNyL2Jpbi9lbnYgcGVybAorICMgLSotIGNwZXJsIC0qLQorICMKKyAjIGd0ay1kb2MgLSBHVEsgRG9jQm9vayBkb2N1bWVudGF0aW9uIGdlbmVyYXRvci4KK2RpZmYgLS1naXQgYS9ndGtkb2Mtc2NhbmdvYmouaW4gYi9ndGtkb2Mtc2NhbmdvYmouaW4KK2luZGV4IGZiNjZiNzYuLjY3ZWU4ZjcgMTAwNjQ0CistLS0gYS9ndGtkb2Mtc2NhbmdvYmouaW4KKysrKyBiL2d0a2RvYy1zY2FuZ29iai5pbgorQEAgLTEsNCArMSw0IEBACistIyFAUEVSTEAgLXcKKysjIS91c3IvYmluL2VudiBwZXJsCisgIyAtKi0gY3BlcmwgLSotCisgIworICMgZ3RrLWRvYyAtIEdUSyBEb2NCb29rIGRvY3VtZW50YXRpb24gZ2VuZXJhdG9yLgorZGlmZiAtLWdpdCBhL3Rlc3RzL3Rvb2xzLnNoLmluIGIvdGVzdHMvdG9vbHMuc2guaW4KK2luZGV4IGExMTRhNDIuLjcwNzM4ODMgMTAwNjQ0CistLS0gYS90ZXN0cy90b29scy5zaC5pbgorKysrIGIvdGVzdHMvdG9vbHMuc2guaW4KK0BAIC0xMSw3ICsxMSw3IEBAIGVjaG8gIlJ1bm5pbmcgc3VpdGUocyk6IGd0ay1kb2MtJHN1aXRlIjsKKyAKKyAjIHRlc3QgcGVybCBzY3JpcHRzCisgZm9yIGZpbGUgaW4gZ3RrZG9jLWNoZWNrIGd0a2RvYy1maXh4cmVmIGd0a2RvYy1ta2RiIGd0a2RvYy1ta3RtcGwgZ3RrZG9jLXJlYmFzZSBndGtkb2Mtc2NhbiBndGtkb2Mtc2NhbmdvYmogOyBkbworLSAgQFBFUkxAIC1jd1QgYHdoaWNoICRmaWxlYAorKyAgcGVybCAtY3dUIGB3aGljaCAkZmlsZWAKKyAgIGlmIHRlc3QgJD8gPSAxIDsgdGhlbiBmYWlsZWQ9YGV4cHIgJGZhaWxlZCArIDFgOyBmaQorICAgdGVzdGVkPWBleHByICR0ZXN0ZWQgKyAxYAorIGRvbmUKK0BAIC0zNCw3ICszNCw3IEBAIGRvbmUKKyAKKyAKKyAjIHRlc3QgcHl0aG9uIHNjcmlwdHMKKy1AUFlUSE9OQCAtbSBweV9jb21waWxlIGB3aGljaCBndGtkb2MtZGVwc2NhbmAKKytweXRob24gLW0gcHlfY29tcGlsZSBgd2hpY2ggZ3RrZG9jLWRlcHNjYW5gCisgaWYgdGVzdCAkPyAhPSAwIDsgdGhlbiBmYWlsZWQ9YGV4cHIgJGZhaWxlZCArIDFgOyBmaQorIHRlc3RlZD1gZXhwciAkdGVzdGVkICsgMWAKKyAKKy0tIAorMi45LjMKKwpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1nbm9tZS9ndGstZG9jL2ZpbGVzL3BrZy1jb25maWctbmF0aXZlLnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1nbm9tZS9ndGstZG9jL2ZpbGVzL3BrZy1jb25maWctbmF0aXZlLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM3Njg4NzAKLS0tIC9kZXYvbnVsbAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdub21lL2d0ay1kb2MvZmlsZXMvcGtnLWNvbmZpZy1uYXRpdmUucGF0Y2gKQEAgLTAsMCArMSwzNCBAQAorVXNlIG5hdGl2ZSBwa2ctY29uZmlnIHdoZW4gbG9va2luZyBmb3IgZ3RrLWRvYy4KKworVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlCitTaWduZWQtb2ZmLWJ5OiBSb3NzIEJ1cnRvbiA8cm9zcy5idXJ0b25AaW50ZWwuY29tPgorCitkaWZmIC0tZ2l0IGEvZ3RrLWRvYy5tNCBiL2d0ay1kb2MubTQKK2luZGV4IDM2NzU1NDMuLjk0ODgxYWUgMTAwNjQ0CistLS0gYS9ndGstZG9jLm00CisrKysgYi9ndGstZG9jLm00CitAQCAtMSw2ICsxLDYgQEAKKyBkbmwgLSotIG1vZGU6IGF1dG9jb25mIC0qLQorCistIyBzZXJpYWwgMgorKyMgc2VyaWFsIDIuMQorCisgZG5sIFVzYWdlOgorIGRubCAgIEdUS19ET0NfQ0hFQ0soW21pbmltdW0tZ3RrLWRvYy12ZXJzaW9uXSkKK0BAIC0xMCwxMSArMTAsMTYgQEAgQUNfREVGVU4oW0dUS19ET0NfQ0hFQ0tdLAorICAgQUNfQkVGT1JFKFtBQ19QUk9HX0xJQlRPT0xdLFskMF0pZG5sIHNldHVwIGxpYnRvb2wgZmlyc3QKKyAgIEFDX0JFRk9SRShbQU1fUFJPR19MSUJUT09MXSxbJDBdKWRubCBzZXR1cCBsaWJ0b29sIGZpcnN0CisKKysgIGd0a2RvY19wa2djb25maWdfc2F2ZT0kUEtHX0NPTkZJRworKyAgUEtHX0NPTkZJRz1wa2ctY29uZmlnLW5hdGl2ZQorKworICAgaWZlbHNlKFskMV0sW10sW2d0a19kb2NfcmVxdWlyZXM9Imd0ay1kb2MiXSxbZ3RrX2RvY19yZXF1aXJlcz0iZ3RrLWRvYyA+PSAkMSJdKQorICAgQUNfTVNHX0NIRUNLSU5HKFtmb3IgZ3RrLWRvY10pCisgICBQS0dfQ0hFQ0tfRVhJU1RTKFskZ3RrX2RvY19yZXF1aXJlc10sW2hhdmVfZ3RrX2RvYz15ZXNdLFtoYXZlX2d0a19kb2M9bm9dKQorICAgQUNfTVNHX1JFU1VMVCgkaGF2ZV9ndGtfZG9jKQorCisrICBQS0dfQ09ORklHPSRndGtkb2NfcGtnY29uZmlnX3NhdmUKKysKKyAgIGlmIHRlc3QgIiRoYXZlX2d0a19kb2MiID0gIm5vIjsgdGhlbgorICAgICAgIEFDX01TR19XQVJOKFsKKyAgIFlvdSB3aWxsIG5vdCBiZSBhYmxlIHRvIGNyZWF0ZSBzb3VyY2UgcGFja2FnZXMgd2l0aCAnbWFrZSBkaXN0JwpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1nbm9tZS9ndGstZG9jL2d0ay1kb2NfMS4yNS5iYiBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ25vbWUvZ3RrLWRvYy9ndGstZG9jXzEuMjUuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmFmOTk2ZQotLS0gL2Rldi9udWxsCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ25vbWUvZ3RrLWRvYy9ndGstZG9jXzEuMjUuYmIKQEAgLTAsMCArMSw1MiBAQAorU1VNTUFSWSA9ICJEb2N1bWVudGF0aW9uIGdlbmVyYXRvciBmb3IgZ2xpYi1iYXNlZCBzb2Z0d2FyZSIKK0RFU0NSSVBUSU9OID0gIkd0ay1kb2MgaXMgYSBzZXQgb2Ygc2NyaXB0cyB0aGF0IGV4dHJhY3Qgc3BlY2lhbGx5IGZvcm1hdHRlZCBjb21tZW50cyBcCisgICAgICAgICAgICAgICBmcm9tIGdsaWItYmFzZWQgc29mdHdhcmUgYW5kIHByb2R1Y2UgYSBzZXQgb2YgaHRtbCBkb2N1bWVudGF0aW9uIGZpbGVzIGZyb20gdGhlbSIKK0hPTUVQQUdFID0gImh0dHA6Ly93d3cuZ3RrLm9yZy9ndGstZG9jLyIKK0xJQ0VOU0UgPSAiR1BMdjIiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT05NGQ1NWQ1MTJhOWJhMzZjYWE5YjdkZjA3OWJhZTE5ZiIKKworaW5oZXJpdCBnbm9tZWJhc2UKKworIyBDb25maWd1cmUgdGhlIHNjcmlwdHMgY29ycmVjdGx5IChhbmQgYnVpbGQgdGhlaXIgZGVwZW5kZW5jaWVzKSBvbmx5IGlmIHRoZXkgYXJlIGFjdHVhbGx5CisjIGdvaW5nIHRvIGJlIHVzZWQ7IG90aGVyaXdzZSB3ZSBuZWVkIG9ubHkgdGhlIG00L21ha2VmaWxlIGluY2x1ZGVzIGZyb20gdGhlIGd0ay1kb2MgdGFyYmFsbC4KK1BBQ0tBR0VDT05GSUcgPz89ICIke0BiYi51dGlscy5jb250YWlucygiRElTVFJPX0ZFQVRVUkVTIiwgImFwaS1kb2N1bWVudGF0aW9uIiwgIndvcmtpbmctc2NyaXB0cyIsICIiLCBkKX0iCisKKyMgVGhpcyB3aWxsIGNhdXNlIHRhcmdldCBndGstZG9jIHRvIGhhcmRjb2RlIHBhdGhzIG9mIG5hdGl2ZSBkZXBlbmRlbmNpZXMKKyMgaW50byBpdHMgc2NyaXB0cy4gVGhpcyBtZWFucyB0aGF0IHRhcmdldCBndGstZG9jIHBhY2thZ2UgaXMgYnJva2VuOworIyBob3BlZnVsbHkgbm8gb25lIG1pbmRzIGJlY2F1c2UgaXRzIHNjcmlwdHMgYXJlIG5vdCB1c2VkIGZvciBhbnl0aGluZyBkdXJpbmcgYnVpbGQKKyMgYW5kIHNob3VsZG4ndCBiZSB1c2VkIG9uIHRhcmdldHMuCitQQUNLQUdFQ09ORklHW3dvcmtpbmctc2NyaXB0c10gPSAiLS13aXRoLWhpZ2hsaWdodD1zb3VyY2UtaGlnaGxpZ2h0LC0td2l0aC1oaWdobGlnaHQ9bm8sbGlieHNsdC1uYXRpdmUgeG1sdG8tbmF0aXZlIHNvdXJjZS1oaWdobGlnaHQtbmF0aXZlIHBlcmwtbmF0aXZlIgorCisjIFdlIGNhbm5vdCB1c2UgaG9zdCBwZXJsLCBiZWNhdXNlIGl0IG1heSBiZSB0b28gb2xkIGZvciBndGstZG9jCitFWFRSQU5BVElWRVBBVEggKz0gInBlcmwtbmF0aXZlIgorCitTUkNfVVJJICs9ICJmaWxlOi8vMDAwMS1Eby1ub3QtaGFyZG9jb2RlLXBhdGhzLXRvLXBlcmwtcHl0aG9uLWluLXNjcmlwdHMucGF0Y2ggXAorICAgICAgICAgICAgZmlsZTovLzAwMDEtRG8tbm90LWVycm9yLW91dC1pZi14c2x0cHJvYy1pcy1ub3QtZm91bmQucGF0Y2ggXAorICAgICAgICAgICAgZmlsZTovLzAwMDEtRG8tbm90LWVycm9yLW91dC1pZi1wZXJsLWlzLW5vdC1mb3VuZC1vci1pdHMtdmVyc2lvbi5wYXRjaCBcCisgICAgICAgICAgICIKK1NSQ19VUklfYXBwZW5kX2NsYXNzLW5hdGl2ZSA9ICIgZmlsZTovL3BrZy1jb25maWctbmF0aXZlLnBhdGNoIgorCitTUkNfVVJJW2FyY2hpdmUubWQ1c3VtXSA9ICIwZGM2NTcwOTUzMTEyYTQ2NGE0MDlmYjk5MjU4Y2NiYyIKK1NSQ19VUklbYXJjaGl2ZS5zaGEyNTZzdW1dID0gIjFlYTQ2ZWQ0MDBlNjUwMWY5NzVhY2FhZmVhMzE0NzljZWE4ZjMyZjkxMWRjYTRkZmYwMzZmNTllNjQ2NGZkNDIiCisKK0JCQ0xBU1NFWFRFTkQgPSAibmF0aXZlIgorCisjIERvIG5vdCBjaGVjayBmb3IgWE1MIGNhdGFsb2dzIHdoZW4gYnVpbGRpbmcgYmVjYXVzZSB0aGF0CisjIGluZm9ybWF0aW9uIGlzIG5vdCB1c2VkIGZvciBhbnl0aGluZyBkdXJpbmcgYnVpbGQuIFJlY2lwZQorIyBkZXBlbmRlbmNpZXMgbWFrZSBzdXJlIHdlIGhhdmUgYWxsIHRoZSByaWdodCBiaXRzLgorZG9fY29uZmlndXJlX3ByZXBlbmQoKSB7CisgICAgICAgIHNlZCAtaSAtZSAncyxeSkhfQ0hFQ0tfWE1MX0NBVEFMT0cuKiwsJyAke1N9L2NvbmZpZ3VyZS5hYworfQorCitGSUxFU18ke1BOfSArPSAiJHtkYXRhZGlyfS9zZ21sIgorRklMRVNfJHtQTn0tZGV2ICs9ICIke2xpYmRpcn0vY21ha2UiCitGSUxFU18ke1BOfS1kb2MgPSAiIgorCitTWVNST09UX1BSRVBST0NFU1NfRlVOQ1NfYXBwZW5kX2NsYXNzLW5hdGl2ZSA9ICIgZ3RrZG9jX21ha2VmaWxlc19zeXNyb290X3ByZXByb2Nlc3MiCitndGtkb2NfbWFrZWZpbGVzX3N5c3Jvb3RfcHJlcHJvY2VzcygpIHsKKyAgICAgICAgIyBQYXRjaCB0aGUgZ3RrLWRvYyBtYWtlZmlsZXMgc28gdGhhdCB0aGUgcWVtdSB3cmFwcGVyIGlzIHVzZWQgdG8gcnVuIHRyYW5zaWVudCBiaW5hcmllcworICAgICAgICAjIGluc3RlYWQgb2YgbGlidG9vbCB3cmFwcGVyIG9yIHJ1bm5pbmcgdGhlbSBkaXJlY3RseQorICAgICAgICBzZWQgLWkgXAorICAgICAgICAgICAtZSAic3xHVEtET0NfUlVOID0uKnxHVEtET0NfUlVOID0gXCQodG9wX2J1aWxkZGlyKS9ndGtkb2MtcWVtdXdyYXBwZXJ8IiBcCisgICAgICAgICAgICR7U1lTUk9PVF9ERVNURElSfSR7ZGF0YWRpcn0vZ3RrLWRvYy9kYXRhL2d0ay1kb2MqbWFrZQorfQpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1nbm9tZS9ndGstZW5naW5lcy9ndGstZW5naW5lcy0yLjIwLjIvZ2xpYi0yLjMyLnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1nbm9tZS9ndGstZW5naW5lcy9ndGstZW5naW5lcy0yLjIwLjIvZ2xpYi0yLjMyLnBhdGNoCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmMGI4NzhkLi4wMDAwMDAwCi0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ25vbWUvZ3RrLWVuZ2luZXMvZ3RrLWVuZ2luZXMtMi4yMC4yL2dsaWItMi4zMi5wYXRjaAorKysgL2Rldi9udWxsCkBAIC0xLDIzICswLDAgQEAKLUZyb20gOGQ0OWEzODZmNDY3Y2JmOGUwODQyZDIyMTgxMjZmNjQzZTUwZjgzNCBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKLUZyb206IERvbWluaXF1ZSBMZXVlbmJlcmdlciA8ZGltc3RhckBvcGVuc3VzZS5vcmc+Ci1EYXRlOiBTdW4sIDI3IE5vdiAyMDExIDE0OjI0OjU3ICswMDAwCi1TdWJqZWN0OiBGaXggYnVpbGQgd2l0aCBnbGliIDIuMzE6IE9ubHkgZ2xpYi5oIGNhbiBiZSAjaW5jbHVkZSdkLiBGaXhlcyBidWcgIzY2NDkxNAotCi1VcHN0cmVhbS1TdGF0dXM6IEJhY2twb3J0Ci0KLS0tLQotZGlmZiAtLWdpdCBhL2VuZ2luZXMvY2xlYXJsb29rcy9zcmMvYW5pbWF0aW9uLmMgYi9lbmdpbmVzL2NsZWFybG9va3Mvc3JjL2FuaW1hdGlvbi5jCi1pbmRleCAxZjdhNDFmLi41NmE5Mjg2IDEwMDY0NAotLS0tIGEvZW5naW5lcy9jbGVhcmxvb2tzL3NyYy9hbmltYXRpb24uYwotKysrIGIvZW5naW5lcy9jbGVhcmxvb2tzL3NyYy9hbmltYXRpb24uYwotQEAgLTI4LDcgKzI4LDcgQEAKLSAjaW5jbHVkZSAiYW5pbWF0aW9uLmgiCi0gCi0gI2lmZGVmIEhBVkVfV09SS0lOR19BTklNQVRJT04KLS0jaW5jbHVkZSA8Z2xpYi9ndGltZXIuaD4KLSsjaW5jbHVkZSA8Z2xpYi5oPgotIAotIHN0cnVjdCBfQW5pbWF0aW9uSW5mbyB7Ci0gCUdUaW1lciAqdGltZXI7Ci0tLQotY2dpdCB2MC45LjAuMgpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1nbm9tZS9ndGstZW5naW5lcy9ndGstZW5naW5lcy0yLjIwLjIvc3Vic3RpdHV0ZS10ZXN0cy5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ25vbWUvZ3RrLWVuZ2luZXMvZ3RrLWVuZ2luZXMtMi4yMC4yL3N1YnN0aXR1dGUtdGVzdHMucGF0Y2gKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDVjNTU3YmEuLjAwMDAwMDAKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1nbm9tZS9ndGstZW5naW5lcy9ndGstZW5naW5lcy0yLjIwLjIvc3Vic3RpdHV0ZS10ZXN0cy5wYXRjaAorKysgL2Rldi9udWxsCkBAIC0xLDM3ICswLDAgQEAKLVVwc3RyZWFtLVN0YXR1czogUGVuZGluZwotCi1TaWduZWQtb2ZmLWJ5OiBNYXJrbyBMaW5kcXZpc3QgPGNhemZpNzRAZ21haWwuY29tPgotZGlmZiAtTnVyZCBndGstZW5naW5lcy0yLjIwLjIvY29uZmlndXJlLmFjIGd0ay1lbmdpbmVzLTIuMjAuMi9jb25maWd1cmUuYWMKLS0tLSBndGstZW5naW5lcy0yLjIwLjIvY29uZmlndXJlLmFjCTIwMTAtMTAtMDEgMTU6NDI6MzcuMDAwMDAwMDAwICswMzAwCi0rKysgZ3RrLWVuZ2luZXMtMi4yMC4yL2NvbmZpZ3VyZS5hYwkyMDEzLTA4LTIwIDAyOjUwOjI3LjkzMDUxMDU2NSArMDMwMAotQEAgLTE2Niw2ICsxNjYsOSBAQAotCi0gQUNfU1VCU1QoREVWRUxPUE1FTlRfQ0ZMQUdTKQotCi0rQUNfU1VCU1QoW2V4cG9ydGVkX3N5bWJvbHNfdGVzdHNdLCBbWyQoRVhQT1JURURfU1lNQk9MU19URVNUUyldXSkKLStBQ19TVUJTVChbdG9ydHVyZV90ZXN0X3Rlc3RzXSwgW1skKFRPUlRVUkVfVEVTVF9URVNUUyldXSkKLSsKLSBBTV9DT05GSUdfSEVBREVSKFtlbmdpbmVzL3N1cHBvcnQvY29uZmlnLmhdKQotCi0gQUNfQ09ORklHX0ZJTEVTKFsKLWRpZmYgLU51cmQgZ3RrLWVuZ2luZXMtMi4yMC4yL3Rlc3QvTWFrZWZpbGUuYW0gZ3RrLWVuZ2luZXMtMi4yMC4yL3Rlc3QvTWFrZWZpbGUuYW0KLS0tLSBndGstZW5naW5lcy0yLjIwLjIvdGVzdC9NYWtlZmlsZS5hbQkyMDEwLTA5LTE5IDE4OjE4OjIxLjAwMDAwMDAwMCArMDMwMAotKysrIGd0ay1lbmdpbmVzLTIuMjAuMi90ZXN0L01ha2VmaWxlLmFtCTIwMTMtMDgtMjAgMDI6NTA6MzYuODQyNTEwODY1ICswMzAwCi1AQCAtNjYsNyArNjYsNyBAQAotICMgUHJlZml4IHdpdGggZXhwb3J0ZWRfCi0gRVhQT1JURURfU1lNQk9MU19URVNUUyA9ICQocGF0c3Vic3QgJSxleHBvcnRlZF8lLCQoQlVJTERfRU5HSU5FUykpCi0KLS1URVNUUyArPSAkKEVYUE9SVEVEX1NZTUJPTFNfVEVTVFMpCi0rVEVTVFMgKz0gQGV4cG9ydGVkX3N5bWJvbHNfdGVzdHNACi0KLQotICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLUBAIC04OCw3ICs4OCw3IEBACi0gVE9SVFVSRV9URVNUX1RFU1RTID0gdG9ydHVyZV9idWlsZGluICQocGF0c3Vic3QgJSx0b3J0dXJlXyUsJChUT1JUVVJFX1RFU1RfRU5HSU5FUykpCi0KLSAjIEFkZCBUT1JUVVJFX1RFU1RfRU5HSU5FUyB0byBsaXN0IG9mIHRlc3RzCi0tVEVTVFMgKz0gJChUT1JUVVJFX1RFU1RfVEVTVFMpCi0rVEVTVFMgKz0gQHRvcnR1cmVfdGVzdF90ZXN0c0AKLQotICMgUG9zc2libGUgb3RoZXIgdGVzdHM6Ci0gIyAgLSBBbiBleHRlbnNpdmUgdGhlbWUgc3dpdGNoIHRlc3RzIHRoYXQgbG9hZHMvdW5sb2FkcyB0aGUgZW5naW5lCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdub21lL2d0ay1lbmdpbmVzL2d0ay1lbmdpbmVzXzIuMjAuMi5iYiBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ25vbWUvZ3RrLWVuZ2luZXMvZ3RrLWVuZ2luZXNfMi4yMC4yLmJiCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjMGFjOTExLi4wMDAwMDAwCi0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ25vbWUvZ3RrLWVuZ2luZXMvZ3RrLWVuZ2luZXNfMi4yMC4yLmJiCisrKyAvZGV2L251bGwKQEAgLTEsNTUgKzAsMCBAQAotU1VNTUFSWSA9ICJHVEsrIHRoZW1lIGVuZ2luZXMiCi1IT01FUEFHRSA9ICJodHRwOi8vd3d3Lmdub21lLm9yZy8iCi1CVUdUUkFDS0VSID0gImh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnLyIKLQotTElDRU5TRSA9ICJMR1BMdjIuMSIKLUxJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PTJkNTAyNWQ0YWEzNDk1YmVmZWY4ZjE3MjA2YTViMGExIgotCi1TRUNUSU9OID0gIngxMS9iYXNlIgotREVQRU5EUyA9ICJpbnRsdG9vbC1uYXRpdmUgZ3RrKyBnZXR0ZXh0LW5hdGl2ZSIKLQotUFIgPSAicjMiCi0KLVBBQ0tBR0VTICs9ICIke1BOfS1zY2hlbWFzIgotUEFDS0FHRVNfRFlOQU1JQyArPSAiXmd0ay1lbmdpbmUtLiogXmd0ay10aGVtZS0uKiIKLQotUkRFUEVORFNfZ3RrLXRoZW1lLXJlZG1vbmQgPSAiZ3RrLWVuZ2luZS1yZWRtb25kOTUiCi1SREVQRU5EU19ndGstdGhlbWUtbWV0YWwgPSAiZ3RrLWVuZ2luZS1tZXRhbCIKLVJERVBFTkRTX2d0ay10aGVtZS1taXN0ID0gImd0ay1lbmdpbmUtbWlzdCIKLVJERVBFTkRTX2d0ay10aGVtZS1jcnV4ID0gImd0ay1lbmdpbmUtY3J1eC1lbmdpbmUiCi1SREVQRU5EU19ndGstdGhlbWUtbGlnaHRob3VzZWJsdWUgPSAiZ3RrLWVuZ2luZS1saWdodGhvdXNlYmx1ZSIKLVJERVBFTkRTX2d0ay10aGVtZS10aGluaWNlID0gImd0ay1lbmdpbmUtdGhpbmljZSIKLVJERVBFTkRTX2d0ay10aGVtZS1pbmR1c3RyaWFsID0gImd0ay1lbmdpbmUtaW5kdXN0cmlhbCIKLVJERVBFTkRTX2d0ay10aGVtZS1jbGVhcmxvb2tzID0gImd0ay1lbmdpbmUtY2xlYXJsb29rcyIKLQotRklMRVNfJHtQTn0gPSAiIgotRklMRVNfJHtQTn0tZGV2ICs9ICIke2xpYmRpcn0vZ3RrLTIuMC8qL2VuZ2luZXMvKi5sYSIKLUZJTEVTXyR7UE59LXNjaGVtYXMgPSAiJHtkYXRhZGlyfS9ndGstZW5naW5lcy8qLnhtbCIKLQotQ0ZMQUdTX3ByZXBlbmQgPSAiLURIQVZFX0FOSU1BVElPTiAiCi0KLVJERVBFTkRTXyR7UE59LWRldiA9ICIiCi0KLWluaGVyaXQgZ25vbWViYXNlCi1HTk9NRV9DT01QUkVTU19UWVBFPSJiejIiCi0KLWluaGVyaXQgZGlzdHJvX2ZlYXR1cmVzX2NoZWNrCi1BTllfT0ZfRElTVFJPX0ZFQVRVUkVTID0gIiR7R1RLMkRJU1RST0ZFQVRVUkVTfSIKLQotIyBUaGlzIHBpY2tzIHN0YWJsZSByZWxlYXNlcyBpbiB0aGUgMi54IHNlcmllcyAoYnV0IG5vdCAyLjkwIG9ud2FyZHMsCi0jIHdoaWNoIHdlcmUgR05PTUUgMyBiZXRhcykuCi1VUFNUUkVBTV9DSEVDS19SRUdFWCA9ICIoP1A8cHZlcj4yXC4oWzAtOF0qWzAyNDY4XSkrKFwuXGQrKSspIgotCi1weXRob24gcG9wdWxhdGVfcGFja2FnZXNfcHJlcGVuZCgpIHsKLSAgICBlbmdpbmVzX3Jvb3QgPSBvcy5wYXRoLmpvaW4oZC5nZXRWYXIoJ2xpYmRpcicsIFRydWUpLCAiZ3RrLTIuMC8yLjEwLjAvZW5naW5lcyIpCi0gICAgdGhlbWVzX3Jvb3QgPSBvcy5wYXRoLmpvaW4oZC5nZXRWYXIoJ2RhdGFkaXInLCBUcnVlKSwgInRoZW1lcyIpCi0KLSAgICBkb19zcGxpdF9wYWNrYWdlcyhkLCBlbmdpbmVzX3Jvb3QsICdebGliKC4qKVwuc28kJywgJ2d0ay1lbmdpbmUtJXMnLCAnR1RLICVzIHRoZW1lIGVuZ2luZScsIGV4dHJhX2RlcGVuZHM9JycpCi0gICAgZG9fc3BsaXRfcGFja2FnZXMoZCwgdGhlbWVzX3Jvb3QsICcoLiopJywgJ2d0ay10aGVtZS0lcycsICdHVEsgdGhlbWUgJXMnLCBhbGxvd19kaXJzPVRydWUsIGV4dHJhX2RlcGVuZHM9JycpCi0gICAgIyBUT0RPOiBtYXJrIHRoZW1lIHBhY2thZ2VzIGFzIGFyY2ggYWxsCi19Ci0KLVNSQ19VUkkgKz0gImZpbGU6Ly9nbGliLTIuMzIucGF0Y2ggXAotICAgICAgICAgICAgZmlsZTovL3N1YnN0aXR1dGUtdGVzdHMucGF0Y2giCi1TUkNfVVJJW2FyY2hpdmUubWQ1c3VtXSA9ICI1ZGViMjg3YmM2MDc1ZGMyMTgxMjEzMDYwNGM3ZGM0ZiIKLVNSQ19VUklbYXJjaGl2ZS5zaGEyNTZzdW1dID0gIjE1YjY4MGFiY2E2Yzc3M2VjYjg1MjUzNTIxZmExMDBkZDNiODU0OWJlZmVlY2M3NTk1YjEwMjA5ZDYyZDY2YjUiCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdub21lL2pzb24tZ2xpYi9qc29uLWdsaWJfMS4wLjQuYmIgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdub21lL2pzb24tZ2xpYi9qc29uLWdsaWJfMS4wLjQuYmIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDNjZTM4Y2UuLjAwMDAwMDAKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1nbm9tZS9qc29uLWdsaWIvanNvbi1nbGliXzEuMC40LmJiCisrKyAvZGV2L251bGwKQEAgLTEsMTggKzAsMCBAQAotU1VNTUFSWSA9ICJKU09OLUdMaWIgaW1wbGVtZW50cyBhIGZ1bGwgSlNPTiBwYXJzZXIgdXNpbmcgR0xpYiBhbmQgR09iamVjdCIKLURFU0NSSVBUSU9OID0gIlVzZSBKU09OLUdMaWIgaXQgaXMgcG9zc2libGUgdG8gcGFyc2UgYW5kIGdlbmVyYXRlIHZhbGlkIEpTT05cCi0gZGF0YSBzdHJ1Y3R1cmVzLCB1c2luZyBhIERPTS1saWtlIEFQSS4gSlNPTi1HTGliIGFsc28gb2ZmZXJzIEdPYmplY3QgXAotaW50ZWdyYXRpb24sIHByb3ZpZGluZyB0aGUgYWJpbGl0eSB0byBzZXJpYWxpemUgYW5kIGRlc2VyaWFsaXplIEdPYmplY3QgXAotaW5zdGFuY2VzIHRvIGFuZCBmcm9tIEpTT04gZGF0YSB0eXBlcy4iCi1IT01FUEFHRSA9ICJodHRwOi8vbGl2ZS5nbm9tZS5vcmcvSnNvbkdsaWIiCi0KLUxJQ0VOU0UgPSAiTEdQTHYyLjEiCi1MSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT03ZmJjMzM4MzA5YWMzOGZlZmNkNjRiMDRiYjkwM2UzNCIKLQotREVQRU5EUyA9ICJnbGliLTIuMCIKLQotU1JDX1VSSVthcmNoaXZlLm1kNXN1bV0gPSAiMzEzMWIwNDE3ZWNkZTNkYTFhZTcyYWNjZWFhMzc1Y2YiCi1TUkNfVVJJW2FyY2hpdmUuc2hhMjU2c3VtXSA9ICI4MGYzNTkzY2I2YmQxM2YxNDY1ODI4ZTQ2YTlmNzQwZTJlOWJkM2NkMjI1Nzg4OTQ0MmIzZTYyYmQ2ZGUwNWNkIgotCi1pbmhlcml0IGdub21lYmFzZSBnZXR0ZXh0IGxpYl9wYWNrYWdlIGdvYmplY3QtaW50cm9zcGVjdGlvbgotCi1CQkNMQVNTRVhURU5EID0gIm5hdGl2ZSIKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ25vbWUvanNvbi1nbGliL2pzb24tZ2xpYl8xLjIuMi5iYiBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ25vbWUvanNvbi1nbGliL2pzb24tZ2xpYl8xLjIuMi5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ZGYyYTQyCi0tLSAvZGV2L251bGwKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1nbm9tZS9qc29uLWdsaWIvanNvbi1nbGliXzEuMi4yLmJiCkBAIC0wLDAgKzEsMTggQEAKK1NVTU1BUlkgPSAiSlNPTi1HTGliIGltcGxlbWVudHMgYSBmdWxsIEpTT04gcGFyc2VyIHVzaW5nIEdMaWIgYW5kIEdPYmplY3QiCitERVNDUklQVElPTiA9ICJVc2UgSlNPTi1HTGliIGl0IGlzIHBvc3NpYmxlIHRvIHBhcnNlIGFuZCBnZW5lcmF0ZSB2YWxpZCBKU09OXAorIGRhdGEgc3RydWN0dXJlcywgdXNpbmcgYSBET00tbGlrZSBBUEkuIEpTT04tR0xpYiBhbHNvIG9mZmVycyBHT2JqZWN0IFwKK2ludGVncmF0aW9uLCBwcm92aWRpbmcgdGhlIGFiaWxpdHkgdG8gc2VyaWFsaXplIGFuZCBkZXNlcmlhbGl6ZSBHT2JqZWN0IFwKK2luc3RhbmNlcyB0byBhbmQgZnJvbSBKU09OIGRhdGEgdHlwZXMuIgorSE9NRVBBR0UgPSAiaHR0cDovL2xpdmUuZ25vbWUub3JnL0pzb25HbGliIgorCitMSUNFTlNFID0gIkxHUEx2Mi4xIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9N2ZiYzMzODMwOWFjMzhmZWZjZDY0YjA0YmI5MDNlMzQiCisKK0RFUEVORFMgPSAiZ2xpYi0yLjAiCisKK1NSQ19VUklbYXJjaGl2ZS5tZDVzdW1dID0gImMxZGFlZmI4ZDBmYjU5NjEyYWYwYzA3MmM4YWFiYjU4IgorU1JDX1VSSVthcmNoaXZlLnNoYTI1NnN1bV0gPSAiZWExMjhhYjUyYTgyNGZjZDA2ZTU0NDhmYmIyYmQ4ZDlhMTM3NDBkNTFjNjZkNDQ1ODI4ZWRiYTcxMzIxYTYyMSIKKworaW5oZXJpdCBnbm9tZWJhc2UgZ2V0dGV4dCBsaWJfcGFja2FnZSBnb2JqZWN0LWludHJvc3BlY3Rpb24gZ3RrLWRvYworCitCQkNMQVNTRVhURU5EID0gIm5hdGl2ZSIKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ25vbWUvbGliZ2xhZGUvbGliZ2xhZGUtMi42LjQvZ2xhZGUtY3J1ZnQucGF0Y2ggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdub21lL2xpYmdsYWRlL2xpYmdsYWRlLTIuNi40L2dsYWRlLWNydWZ0LnBhdGNoCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjNWQ1ODY0Li4wMDAwMDAwCi0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ25vbWUvbGliZ2xhZGUvbGliZ2xhZGUtMi42LjQvZ2xhZGUtY3J1ZnQucGF0Y2gKKysrIC9kZXYvbnVsbApAQCAtMSwxMDIgKzAsMCBAQAotVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCi0KLWRpZmYgLXVyIGxpYmdsYWRlLTIuNC4wfi9jb25maWd1cmUuaW4gbGliZ2xhZGUtMi40LjAvY29uZmlndXJlLmluCi0tLS0gbGliZ2xhZGUtMi40LjB+L2NvbmZpZ3VyZS5pbgkyMDA0LTA1LTE3IDEyOjM4OjMxLjAwMDAwMDAwMCArMDEwMAotKysrIGxpYmdsYWRlLTIuNC4wL2NvbmZpZ3VyZS5pbgkyMDA0LTA3LTI4IDE2OjUzOjA5LjAwMDAwMDAwMCArMDEwMAotQEAgLTE0Nyw2ICsxNDcsMTggQEAKLSBBTV9DT05ESVRJT05BTChIQVZFX1BZVEhPTiwgJGhhdmVfcHl0aG9uKQotIEFDX1NVQlNUKFBZVEhPTikKLSAKLStBQ19NU0dfQ0hFQ0tJTkcoW2ZvciBjcnVmdCBpbiBsaWJndGtdKQotK0FDX1RSWV9MSU5LKFsKLSsjaW5jbHVkZSA8Z3RrL2d0ay5oPgotKyNpbmNsdWRlIDxzdGRpby5oPgotK10sICAgICAgWyBndGtfdHJlZV9nZXRfdHlwZSAoKTsgcmV0dXJuIDA7IF0sCi0rICAgICAgICBbIEFDX01TR19SRVNVTFQoeWVzKQotKyAgICAgICAgICBoYXZlX2NydWZ0PXllcyBdLAotKyAgICAgICAgWyBBQ19NU0dfUkVTVUxUKG5vKQotKwkgIEFDX0RFRklORShESVNBQkxFX0NSVUZULCxbbGVhdmUgb3V0IHN1cHBvcnQgZm9yIG9sZCwgYnJva2VuIHdpZGdldHNdKQotKyAgICAgICAgICBoYXZlX2NydWZ0PW5vIF0pCi0rQUNfU1VCU1QoRElTQUJMRV9DUlVGVCkKLSsKLSBkbmwgYWRkIGRlYnVnZ2luZyBvcHRpb25zIC4uLgotIGNoYW5nZXF1b3RlKCwpZG5sCi0gaWYgdGVzdCAieCRHQ0MiID0geHllczsgdGhlbgotT25seSBpbiBsaWJnbGFkZS0yLjQuMDogY29uZmlndXJlLmluLm9yaWcKLWRpZmYgLXVyIGxpYmdsYWRlLTIuNC4wfi9nbGFkZS9nbGFkZS1ndGsuYyBsaWJnbGFkZS0yLjQuMC9nbGFkZS9nbGFkZS1ndGsuYwotLS0tIGxpYmdsYWRlLTIuNC4wfi9nbGFkZS9nbGFkZS1ndGsuYwkyMDA0LTAzLTEzIDEzOjQ3OjM1LjAwMDAwMDAwMCArMDAwMAotKysrIGxpYmdsYWRlLTIuNC4wL2dsYWRlL2dsYWRlLWd0ay5jCTIwMDQtMDctMjggMTY6NTM6NTIuMDAwMDAwMDAwICswMTAwCi1AQCAtMjEzLDYgKzIxMyw4IEBACi0gCWd0a19jbGlzdF9jb2x1bW5fdGl0bGVzX2hpZGUgKEdUS19DTElTVCAodykpOwotIH0KLSAKLSsjaWZuZGVmIERJU0FCTEVfQ1JVRlQKLSsKLSBzdGF0aWMgdm9pZAotIHRyZWVfc2V0X3NlbGVjdGlvbl9tb2RlIChHbGFkZVhNTCAqeG1sLCBHdGtXaWRnZXQgKncsCi0gCQkJIGNvbnN0IGNoYXIgKm5hbWUsIGNvbnN0IGNoYXIgKnZhbHVlKQotQEAgLTIzOCw2ICsyNDAsOCBAQAotICAgICBndGtfdHJlZV9zZXRfdmlld19saW5lcyAoR1RLX1RSRUUgKHcpLCBCT09MICh2YWx1ZSkpOwotIH0KLSAKLSsjZW5kaWYKLSsKLSBzdGF0aWMgdm9pZAotIGxpc3Rfc2V0X3NlbGVjdGlvbl9tb2RlIChHbGFkZVhNTCAqeG1sLCBHdGtXaWRnZXQgKncsCi0gCQkJIGNvbnN0IGNoYXIgKm5hbWUsIGNvbnN0IGNoYXIgKnZhbHVlKQotQEAgLTI1NCw2ICsyNTgsNyBAQAotICAgICBndGtfY2hlY2tfbWVudV9pdGVtX3NldF9zaG93X3RvZ2dsZSAoR1RLX0NIRUNLX01FTlVfSVRFTSAodyksIEJPT0wgKHZhbHVlKSk7Ci0gfQotIAotKyNpZm5kZWYgRElTQUJMRV9DUlVGVAotIHN0YXRpYyB2b2lkCi0gdGV4dF9zZXRfdGV4dCAoR2xhZGVYTUwgKnhtbCwgR3RrV2lkZ2V0ICp3LAotIAkgICAgICAgY29uc3QgY2hhciAqbmFtZSwgY29uc3QgY2hhciAqdmFsdWUpCi1AQCAtMjYyLDYgKzI2Nyw3IEBACi0gCi0gICAgIGd0a19lZGl0YWJsZV9pbnNlcnRfdGV4dCAoR1RLX0VESVRBQkxFICh3KSwgdmFsdWUsIC0xLCAmcG9zKTsKLSB9Ci0rI2VuZGlmCi0gCi0gc3RhdGljIHZvaWQKLSByYWRpb19tZW51X2l0ZW1fc2V0X2dyb3VwIChHbGFkZVhNTCAqeG1sLCBHdGtXaWRnZXQgKncsCi1AQCAtMTEyNSwxMyArMTEzMSwxNyBAQAotICAgICBnbGFkZV9yZWdpc3Rlcl9jdXN0b21fcHJvcCAoR1RLX1RZUEVfQ0xJU1QsICJzZWxlY3Rpb25fbW9kZSIsIGNsaXN0X3NldF9zZWxlY3Rpb25fbW9kZSk7Ci0gICAgIGdsYWRlX3JlZ2lzdGVyX2N1c3RvbV9wcm9wIChHVEtfVFlQRV9DTElTVCwgInNoYWRvd190eXBlIiwgY2xpc3Rfc2V0X3NoYWRvd190eXBlKTsKLSAgICAgZ2xhZGVfcmVnaXN0ZXJfY3VzdG9tX3Byb3AgKEdUS19UWVBFX0NMSVNULCAic2hvd190aXRsZXMiLCBjbGlzdF9zZXRfc2hvd190aXRsZXMpOwotKyNpZm5kZWYgRElTQUJMRV9DUlVGVAotICAgICBnbGFkZV9yZWdpc3Rlcl9jdXN0b21fcHJvcCAoR1RLX1RZUEVfVFJFRSwgInNlbGVjdGlvbl9tb2RlIiwgdHJlZV9zZXRfc2VsZWN0aW9uX21vZGUpOwotICAgICBnbGFkZV9yZWdpc3Rlcl9jdXN0b21fcHJvcCAoR1RLX1RZUEVfVFJFRSwgInZpZXdfbW9kZSIsIHRyZWVfc2V0X3ZpZXdfbW9kZSk7Ci0gICAgIGdsYWRlX3JlZ2lzdGVyX2N1c3RvbV9wcm9wIChHVEtfVFlQRV9UUkVFLCAidmlld19saW5lIiwgdHJlZV9zZXRfdmlld19saW5lKTsKLSsjZW5kaWYKLSAgICAgZ2xhZGVfcmVnaXN0ZXJfY3VzdG9tX3Byb3AgKEdUS19UWVBFX0xJU1QsICJzZWxlY3Rpb25fbW9kZSIsIGxpc3Rfc2V0X3NlbGVjdGlvbl9tb2RlKTsKLSAgICAgZ2xhZGVfcmVnaXN0ZXJfY3VzdG9tX3Byb3AgKEdUS19UWVBFX0NIRUNLX01FTlVfSVRFTSwgImFsd2F5c19zaG93X3RvZ2dsZSIsCi0gCQkJCWNoZWNrX21lbnVfaXRlbV9zZXRfYWx3YXlzX3Nob3dfdG9nZ2xlKTsKLSsjaWZuZGVmIERJU0FCTEVfQ1JVRlQKLSAgICAgZ2xhZGVfcmVnaXN0ZXJfY3VzdG9tX3Byb3AgKEdUS19UWVBFX1RFWFQsICJ0ZXh0IiwgdGV4dF9zZXRfdGV4dCk7Ci0rI2VuZGlmCi0gICAgIGdsYWRlX3JlZ2lzdGVyX2N1c3RvbV9wcm9wIChHVEtfVFlQRV9SQURJT19NRU5VX0lURU0sICJncm91cCIsCi0gCQkJCXJhZGlvX21lbnVfaXRlbV9zZXRfZ3JvdXApOwotICAgICBnbGFkZV9yZWdpc3Rlcl9jdXN0b21fcHJvcCAoR1RLX1RZUEVfVE9PTEJBUiwgInRvb2x0aXBzIiwgdG9vbGJhcl9zZXRfdG9vbHRpcHMpOwotQEAgLTEyODgsOCArMTI5OCwxMCBAQAotIAkJCSAgIGdsYWRlX3N0YW5kYXJkX2J1aWxkX2NoaWxkcmVuLCBOVUxMKTsKLSAgICAgZ2xhZGVfcmVnaXN0ZXJfd2lkZ2V0IChHVEtfVFlQRV9URUFST0ZGX01FTlVfSVRFTSwgZ2xhZGVfc3RhbmRhcmRfYnVpbGRfd2lkZ2V0LAotIAkJCSAgIE5VTEwsIE5VTEwpOwotKyNpZm5kZWYgRElTQUJMRV9DUlVGVAotICAgICBnbGFkZV9yZWdpc3Rlcl93aWRnZXQgKEdUS19UWVBFX1RFWFQsIGdsYWRlX3N0YW5kYXJkX2J1aWxkX3dpZGdldCwKLSAJCQkgICBOVUxMLCBOVUxMKTsKLSsjZW5kaWYKLSAgICAgZ2xhZGVfcmVnaXN0ZXJfd2lkZ2V0IChHVEtfVFlQRV9URVhUX1ZJRVcsIGdsYWRlX3N0YW5kYXJkX2J1aWxkX3dpZGdldCwKLSAJCQkgICBOVUxMLCBOVUxMKTsKLSAgICAgZ2xhZGVfcmVnaXN0ZXJfd2lkZ2V0IChHVEtfVFlQRV9USVBTX1FVRVJZLCBnbGFkZV9zdGFuZGFyZF9idWlsZF93aWRnZXQsCi1AQCAtMTMwNCw4ICsxMzE2LDEwIEBACi0gCQkJICAgZ2xhZGVfc3RhbmRhcmRfYnVpbGRfY2hpbGRyZW4sIE5VTEwpOwotICAgICBnbGFkZV9yZWdpc3Rlcl93aWRnZXQgKEdUS19UWVBFX1RPT0xfQlVUVE9OLCBnbGFkZV9zdGFuZGFyZF9idWlsZF93aWRnZXQsCi0gCQkJICAgTlVMTCwgTlVMTCk7Ci0rI2lmbmRlZiBESVNBQkxFX0NSVUZUCi0gICAgIGdsYWRlX3JlZ2lzdGVyX3dpZGdldCAoR1RLX1RZUEVfVFJFRSwgZ2xhZGVfc3RhbmRhcmRfYnVpbGRfd2lkZ2V0LAotIAkJCSAgIE5VTEwsIE5VTEwpOwotKyNlbmRpZgotICAgICBnbGFkZV9yZWdpc3Rlcl93aWRnZXQgKEdUS19UWVBFX1RSRUVfVklFVywgZ2xhZGVfc3RhbmRhcmRfYnVpbGRfd2lkZ2V0LAotIAkJCSAgIE5VTEwsIE5VTEwpOwotICAgICBnbGFkZV9yZWdpc3Rlcl93aWRnZXQgKEdUS19UWVBFX1ZCVVRUT05fQk9YLCBnbGFkZV9zdGFuZGFyZF9idWlsZF93aWRnZXQsCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdub21lL2xpYmdsYWRlL2xpYmdsYWRlLTIuNi40L25vLXhtbDIucGF0Y2ggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdub21lL2xpYmdsYWRlL2xpYmdsYWRlLTIuNi40L25vLXhtbDIucGF0Y2gKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGRjNGMwOTIuLjAwMDAwMDAKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1nbm9tZS9saWJnbGFkZS9saWJnbGFkZS0yLjYuNC9uby14bWwyLnBhdGNoCisrKyAvZGV2L251bGwKQEAgLTEsNTAxICswLDAgQEAKLVVwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbY29uZmlndXJhdGlvbl0KLQotZGlmZiAtdXJOIGxpYmdsYWRlLTIuNC4yLm9yaWcvY29uZmlndXJlLmluIGxpYmdsYWRlLTIuNC4yL2NvbmZpZ3VyZS5pbgotLS0tIGxpYmdsYWRlLTIuNC4yLm9yaWcvY29uZmlndXJlLmluCTIwMDUtMDItMTEgMTI6NDI6NTguMDAwMDAwMDAwICswMTAwCi0rKysgbGliZ2xhZGUtMi40LjIvY29uZmlndXJlLmluCTIwMDUtMDMtMjIgMDE6MjI6MDAuMDAwMDAwMDAwICswMTAwCi1AQCAtNTIsMTEgKzUyLDMzIEBACi0gQUNfUEFUSF9QUk9HKFBLR19DT05GSUcsIHBrZy1jb25maWcsIG5vKQotIAotIFBLR19DSEVDS19NT0RVTEVTKExJQkdMQURFLCBbZG5sCi0tICBsaWJ4bWwtMi4wID49IHJlcXVpcmVkX2xpYnhtbF92ZXJzaW9uIGRubAotICAgYXRrID49IHJlcXVpcmVkX2F0a192ZXJzaW9uIGRubAotICAgZ3RrKy0yLjAgPj0gcmVxdWlyZWRfZ3RrX3ZlcnNpb24gZG5sCi0gICBnbGliLTIuMCA+PSByZXF1aXJlZF9nbGliX3ZlcnNpb25dKQotIAotK2Rpc2FibGVfeG1sMj1ubwotK0FDX0FSR19XSVRIKFtsaWJ4bWwyXSwKLSsgIEFDX0hFTFBfU1RSSU5HKFstLXdpdGhvdXQtbGlieG1sMl0sIFtEb24ndCB1c2UgbGlieG1sMiwgdXNlIEdsaWIncyBHTWFya3VwUGFyc2VyIGluc3RlYWRdKSwKLSsgIFtkaXNhYmxlX3htbDI9eWVzXSwKLSsgIFtkaXNhYmxlX3htbDI9bm9dKQotKwotK0FDX01TR19DSEVDS0lORyhbaWYgd2UgYXJlIHVzaW5nIGxpYnhtbDJdKQotK2lmIHRlc3QgIngkZGlzYWJsZV94bWwyIiA9PSAieG5vIjsgdGhlbgotKyAgQUNfTVNHX1JFU1VMVCh5ZXMpCi0rICBQS0dfQ0hFQ0tfTU9EVUxFUyhYTUwyLCBsaWJ4bWwtMi4wID49IDIuNC4xMCkKLSsgIFBLR0NGR19SRVFVSVJFX0xJQlhNTDI9ImxpYnhtbC0yLjAiCi0rICBMSUJHTEFERV9DRkxBR1M9IiRMSUJHTEFERV9DRkxBR1MgJFhNTDJfQ0ZMQUdTIgotKyAgTElCR0xBREVfTElCUz0iJExJQkdMQURFX0xJQlMgJFhNTDJfTElCUyIKLStlbHNlCi0rICBMSUJHTEFERV9DRkxBR1M9IiRMSUJHTEFERV9DRkxBR1MgLURVU0VfR01BUktVUF9QQVJTRVIiCi0rICBQS0dDRkdfUkVRVUlSRV9MSUJYTUwyPSIiCi0rICBBQ19NU0dfUkVTVUxUKG5vKQotK2ZpCi0rCi0rQUNfU1VCU1QoWE1MMl9MSUJTKQotK0FDX1NVQlNUKFhNTDJfQ0ZMQUdTKQotK0FDX1NVQlNUKFBLR0NGR19SRVFVSVJFX0xJQlhNTDIpCi0rCi0gQUNfTVNHX0NIRUNLSU5HKFtmb3IgbmF0aXZlIFdpbjMyXSkKLSBjYXNlICIkaG9zdCIgaW4KLSAgICotKi1taW5ndyopCi1AQCAtMTE2LDYgKzEzOCwyMSBAQAotICAgZmkKLSBmaQotIAotK2lmIHRlc3QgIngkZGlzYWJsZV94bWwyIiA9PSAieHllcyI7IHRoZW4KLSsgIGVjaG8gIioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqIgotKyAgZWNobyAiICBZb3UgY2hvc2UgdG8gZGlzYWJsZSBsaWJ4bWwyIGFuZCB1c2UgR2xpYidzIgotKyAgZWNobyAiICBHTWFya3VwUGFyc2VyIGluc3RlYWQuIiAKLSsgIGVjaG8gIAotKyAgZWNobyAiICBQbGVhc2UgYmVhciBpbiBtaW5kIHRoYXQgdXNpbmcgbGliZ2xhZGUgd2l0aCIKLSsgIGVjaG8gIiAgR01hcmt1cFBhcnNlciBpcyBhbiBleHBlcmltZW50YWwgZmVhdHVyZSBvbmx5LiIKLSsgIGVjaG8KLSsgIGVjaG8gIiAgUGxlYXNlIHBvc3QgcHJvYmxlbXMgb3Igc3VjY2VzcyBzdG9yaWVzIHRvIgotKyAgZWNobyAiICB0aGUgZ2xhZGUtZGV2ZWwgbWFpbGluZyBsaXN0LiBUaGFuayB5b3UuIgotKyAgZWNobyAiKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioiCi0rZmkKLSsKLSsKLSsKLSBHVEtfRE9DX0NIRUNLKDEuMCkKLSAKLSBkbmwgZ2V0dGV4dCBzdHVmZiAuLi4gdGhlcmUgaXMgbm8gbWVzc2FnZSBjYXRhbG9nIGZvciBsaWJnbGFkZSAtLSBsaWJnbGFkZQotZGlmZiAtdXJOIGxpYmdsYWRlLTIuNC4yLm9yaWcvZ2xhZGUvZ2xhZGUtcGFyc2VyLmMgbGliZ2xhZGUtMi40LjIvZ2xhZGUvZ2xhZGUtcGFyc2VyLmMKLS0tLSBsaWJnbGFkZS0yLjQuMi5vcmlnL2dsYWRlL2dsYWRlLXBhcnNlci5jCTIwMDQtMTEtMTEgMTE6NTY6MTMuMDAwMDAwMDAwICswMTAwCi0rKysgbGliZ2xhZGUtMi40LjIvZ2xhZGUvZ2xhZGUtcGFyc2VyLmMJMjAwNS0wMy0yMiAwMToyMDowMC4wMDAwMDAwMDAgKzAxMDAKLUBAIC0zNCw3ICszNCwxNSBAQAotICMgIGRlZmluZSBkZ2V0dGV4dChEb21haW4sIFN0cmluZykgKFN0cmluZykKLSAjZW5kaWYKLSAKLS0jaW5jbHVkZSA8bGlieG1sL3BhcnNlci5oPgotKyNpZmRlZiBVU0VfR01BUktVUF9QQVJTRVIKLSsjICBpbmNsdWRlIDx6bGliLmg+Ci0rI2Vsc2UKLSsjICBpbmNsdWRlIDxsaWJ4bWwvcGFyc2VyLmg+Ci0rI2VuZGlmCi0rCi0rI2lmZGVmIFVTRV9HTUFSS1VQX1BBUlNFUgotKyMgIGRlZmluZSB4bWxDaGFyIGdjaGFyCi0rI2VuZGlmCi0gCi0gI2luY2x1ZGUgImdsYWRlLXBhcnNlci5oIgotICNpbmNsdWRlICJnbGFkZS1wcml2YXRlLmgiCi1AQCAtNTA4LDcgKzUxNiw5IEBACi0gICAgIGNhc2UgUEFSU0VSX1NUQVJUOgotIAlpZiAoIXN0cmNtcChuYW1lLCAiZ2xhZGUtaW50ZXJmYWNlIikpIHsKLSAJICAgIHN0YXRlLT5zdGF0ZSA9IFBBUlNFUl9HTEFERV9JTlRFUkZBQ0U7Ci0tI2lmIDAKLSsKLSsjaWZuZGVmIFVTRV9HTUFSS1VQX1BBUlNFUgotKyAjaWYgMAotIAkgICAgLyogY2hlY2sgZm9yIGNvcnJlY3QgWE1MIG5hbWVzcGFjZSAqLwotIAkgICAgZm9yIChpID0gMDsgYXR0cnMgJiYgYXR0cnNbaV0gIT0gTlVMTDsgaSArPSAyKSB7Ci0gCQlpZiAoIXN0cmNtcChhdHRyc1tpXSwgInhtbG5zIikgJiYKLUBAIC01MTgsNyArNTI4LDkgQEAKLSAJCSAgICBnX3dhcm5pbmcoInVua25vd24gYXR0cmlidXRlIGAlcycgZm9yIDxnbGFkZS1pbnRlcmZhY2U+IiwKLSAJCQkgICAgICBhdHRyc1tpXSk7Ci0gCSAgICB9Ci0rICNlbmRpZgotICNlbmRpZgotKwotIAl9IGVsc2UgewotIAkgICAgZ193YXJuaW5nKCJFeHBlY3RlZCA8Z2xhZGUtaW50ZXJmYWNlPi4gIEdvdCA8JXM+LiIsIG5hbWUpOwotIAkgICAgc3RhdGUtPnByZXZfc3RhdGUgPSBzdGF0ZS0+c3RhdGU7Ci1AQCAtMTA2MywxMiArMTA3NSwxOCBAQAotICAgICB9Ci0gfQotIAotKyNpZm5kZWYgVVNFX0dNQVJLVVBfUEFSU0VSCi0rCi0gc3RhdGljIHhtbEVudGl0eVB0cgotIGdsYWRlX3BhcnNlcl9nZXRfZW50aXR5KEdsYWRlUGFyc2VTdGF0ZSAqc3RhdGUsIGNvbnN0IHhtbENoYXIgKm5hbWUpCi0gewotICAgICByZXR1cm4geG1sR2V0UHJlZGVmaW5lZEVudGl0eShuYW1lKTsKLSB9Ci0gCi0rI2VuZGlmIC8qICFkZWZpbmVkKFVTRV9HTUFSS1VQX1BBUlNFUikgKi8KLSsKLSsjaWZuZGVmIFVTRV9HTUFSS1VQX1BBUlNFUgotKwotIHN0YXRpYyB2b2lkCi0gZ2xhZGVfcGFyc2VyX3dhcm5pbmcoR2xhZGVQYXJzZVN0YXRlICpzdGF0ZSwgY29uc3QgY2hhciAqbXNnLCAuLi4pCi0gewotQEAgLTEwNzksNiArMTA5NywxMCBAQAotICAgICB2YV9lbmQoYXJncyk7Ci0gfQotIAotKyNlbmRpZiAvKiAhZGVmaW5lZChVU0VfR01BUktVUF9QQVJTRVIpICovCi0rCi0rI2lmbmRlZiBVU0VfR01BUktVUF9QQVJTRVIKLSsKLSBzdGF0aWMgdm9pZAotIGdsYWRlX3BhcnNlcl9lcnJvcihHbGFkZVBhcnNlU3RhdGUgKnN0YXRlLCBjb25zdCBjaGFyICptc2csIC4uLikKLSB7Ci1AQCAtMTA4OSw2ICsxMTExLDEwIEBACi0gICAgIHZhX2VuZChhcmdzKTsKLSB9Ci0gCi0rI2VuZGlmIC8qICFkZWZpbmVkKFVTRV9HTUFSS1VQX1BBUlNFUikgKi8KLSsKLSsjaWZuZGVmIFVTRV9HTUFSS1VQX1BBUlNFUgotKwotIHN0YXRpYyB2b2lkCi0gZ2xhZGVfcGFyc2VyX2ZhdGFsX2Vycm9yKEdsYWRlUGFyc2VTdGF0ZSAqc3RhdGUsIGNvbnN0IGNoYXIgKm1zZywgLi4uKQotIHsKLUBAIC0xMDk5LDYgKzExMjUsMTAgQEAKLSAgICAgdmFfZW5kKGFyZ3MpOwotIH0KLSAKLSsjZW5kaWYgLyogIWRlZmluZWQoVVNFX0dNQVJLVVBfUEFSU0VSKSAqLwotKwotKyNpZm5kZWYgVVNFX0dNQVJLVVBfUEFSU0VSCi0rCi0gc3RhdGljIHhtbFNBWEhhbmRsZXIgZ2xhZGVfcGFyc2VyID0gewotICAgICAoaW50ZXJuYWxTdWJzZXRTQVhGdW5jKU5VTEwsICAgICAgICAgICAgICAgICAgICAgICAvKiBpbnRlcm5hbFN1YnNldCAqLwotICAgICAoaXNTdGFuZGFsb25lU0FYRnVuYylOVUxMLCAgICAgICAgICAgICAgICAgICAgICAgICAvKiBpc1N0YW5kYWxvbmUgKi8KLUBAIC0xMTI2LDYgKzExNTYsODIgQEAKLSAgICAgKGZhdGFsRXJyb3JTQVhGdW5jKWdsYWRlX3BhcnNlcl9mYXRhbF9lcnJvciwgICAgICAgLyogZmF0YWxFcnJvciAqLwotIH07Ci0gCi0rI2Vsc2UgLyogVVNFX0dNQVJLVVBfUEFSU0VSICovCi0rCi0rc3RhdGljIHZvaWQKLStnbGFkZV9wYXJzZXJfc3RhcnRfZWxlbWVudF93cmFwcGVyKEdNYXJrdXBQYXJzZUNvbnRleHQgKmNvbnRleHQsCi0rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBnY2hhciAgICAgICAgICpuYW1lLCAKLSsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGdjaGFyICAgICAgICAqKmF0dHJfbmFtZXMsCi0rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBnY2hhciAgICAgICAgKiphdHRyX3ZhbHVlcywKLSsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdwb2ludGVyICAgICAgICAgICAgIHN0YXRlLAotKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0Vycm9yICAgICAgICAgICAgICoqZXJyb3IpCi0rewotKyAgICBndWludCBpID0gMDsKLSsKLSsgICAgLyogUGFjayBhdHRyaWJ1dGUgbmFtZXMvdmFsdWVzIGZyb20gdHdvIHNlcGFyYXRlCi0rICAgICAqICBhcnJheXMgKEdNYXJrdXBQYXJzZXIgc3R5bGUpIGludG8gb25lIHNpbmdsZQotKyAgICAgKiAgYXJyYXkgKGxpYnhtbCBTQVhQYXJzZXIgc3R5bGUpLiBUaGlzIGlzIG5vdAotKyAgICAgKiAgdmVyeSBlZmZpY2llbnQsIGJ1dCB3ZSBkbyBpdCB0byBtYWtlIHRoZQotKyAgICAgKiAgR01hcmt1cFBhcnNlciBjb2RlIGFzIGxpdHRsZSBpbnZhc2l2ZSBhcwotKyAgICAgKiAgcG9zc2libGUuICovCi0rCi0rICAgIHdoaWxlIChhdHRyX25hbWVzW2ldICE9IE5VTEwpIHsKLSsgICAgICArK2k7Ci0rICAgIH0KLSsKLSsgICAgaWYgKDEpCi0rICAgIHsKLSsgICAgICAgIGNvbnN0IGdjaGFyICphdHRyWyhpKjIpKzFdOwotKyAgICAgICAgZ3VpbnQgaiwgazsKLSsgICAgICAgCi0rICAgICAgICBmb3IgKGo9MCwgaz0wOyAgayA8IGk7ICBqICs9IDIpCi0rICAgICAgICB7Ci0rICAgICAgICAgICAgYXR0cltqXSA9IGF0dHJfbmFtZXNba107Ci0rICAgICAgICAgICAgYXR0cltqKzFdID0gYXR0cl92YWx1ZXNba107Ci0rICAgICAgICAgICAgKytrOwotKyAgICAgICAgfQotKyAgICAgICAgYXR0cltpKjJdID0gTlVMTDsKLSsKLSsgICAgICAgIGdsYWRlX3BhcnNlcl9zdGFydF9lbGVtZW50KChHbGFkZVBhcnNlU3RhdGUqKXN0YXRlLCBuYW1lLCBhdHRyKTsKLSsgICAgfQotK30KLSsKLStzdGF0aWMgdm9pZAotK2dsYWRlX3BhcnNlcl9lbmRfZWxlbWVudF93cmFwcGVyKEdNYXJrdXBQYXJzZUNvbnRleHQgKmNvbnRleHQsIAotKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGdjaGFyICAgICAgICAgKm5hbWUsCi0rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3BvaW50ZXIgICAgICAgICAgICAgc3RhdGUsCi0rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0Vycm9yICAgICAgICAgICAgICoqZXJyKQotK3sKLSsgICAgZ2xhZGVfcGFyc2VyX2VuZF9lbGVtZW50KChHbGFkZVBhcnNlU3RhdGUqKXN0YXRlLCBuYW1lKTsKLSt9Ci0rCi0rc3RhdGljIHZvaWQKLStnbGFkZV9wYXJzZXJfY2hhcmFjdGVyc193cmFwcGVyKEdNYXJrdXBQYXJzZUNvbnRleHQgKmNvbnRleHQsIAotKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZ2NoYXIgICAgICAgICAqY2hhcnMsIAotKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3NpemUgICAgICAgICAgICAgICAgbGVuLAotKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3BvaW50ZXIgICAgICAgICAgICAgc3RhdGUsCi0rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHRXJyb3IgICAgICAgICAgICAgKiplcnIpCi0rewotKyAgICBnbGFkZV9wYXJzZXJfY2hhcmFjdGVycygoR2xhZGVQYXJzZVN0YXRlKilzdGF0ZSwgY2hhcnMsIChpbnQpIGxlbik7Ci0rfQotKwotK3N0YXRpYyB2b2lkCi0rZ2xhZGVfcGFyc2VyX2Vycm9yKEdNYXJrdXBQYXJzZUNvbnRleHQgKmNvbnRleHQsIEdFcnJvciAqZXJyLCBncG9pbnRlciBkYXRhKQotK3sKLSsgICAgZ19sb2coIkdsYWRlLVBhcnNlciIsIEdfTE9HX0xFVkVMX0NSSVRJQ0FMLCAiJXMiLCBlcnItPm1lc3NhZ2UpOwotK30KLSsKLStzdGF0aWMgY29uc3QgR01hcmt1cFBhcnNlciAgIGdsYWRlX3BhcnNlciA9IHsKLSsgICAgZ2xhZGVfcGFyc2VyX3N0YXJ0X2VsZW1lbnRfd3JhcHBlciwgIC8qIGVsZW1lbnQgb3BlbiAgICovCi0rICAgIGdsYWRlX3BhcnNlcl9lbmRfZWxlbWVudF93cmFwcGVyLCAgICAvKiBlbGVtZW50IGNsb3NlICAqLwotKyAgICBnbGFkZV9wYXJzZXJfY2hhcmFjdGVyc193cmFwcGVyLCAgICAgLyogdGV4dCBjb250ZW50ICAgKi8KLSsgICAgTlVMTCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHBhc3N0aHJvdWdoICAgICovCi0rICAgIGdsYWRlX3BhcnNlcl9lcnJvciwgICAgICAgICAgICAgICAgICAvKiBwYXJzZSBlcnJvciAgICAqLwotK307Ci0rCi0rI2VuZGlmIC8qIFVTRV9HTUFSS1VQX1BBUlNFUiAqLwotKwotKwotIHN0YXRpYyB2b2lkCi0gd2lkZ2V0X2luZm9fZnJlZShHbGFkZVdpZGdldEluZm8gKmluZm8pCi0gewotQEAgLTExOTEsNiArMTI5Nyw5IEBACi0gICoKLSAgKiBSZXR1cm5zOiB0aGUgR2xhZGVJbnRlcmZhY2Ugc3RydWN0dXJlIGZvciB0aGUgWE1MIGZpbGUuCi0gICovCi0rCi0rI2lmbmRlZiBVU0VfR01BUktVUF9QQVJTRVIKLSsKLSBHbGFkZUludGVyZmFjZSAqCi0gZ2xhZGVfcGFyc2VyX3BhcnNlX2ZpbGUoY29uc3QgZ2NoYXIgKmZpbGUsIGNvbnN0IGdjaGFyICpkb21haW4pCi0gewotQEAgLTEyMjIsNiArMTMzMSwzMSBAQAotICAgICByZXR1cm4gc3RhdGUuaW50ZXJmYWNlOwotIH0KLSAKLSsjZWxzZSAvKiBkZWZpbmVkKFVTRV9HTUFSS1VQX1BBUlNFUikgKi8KLSsKLStHbGFkZUludGVyZmFjZSAqCi0rZ2xhZGVfcGFyc2VyX3BhcnNlX2ZpbGUoY29uc3QgZ2NoYXIgKmZpbGUsIGNvbnN0IGdjaGFyICpkb21haW4pCi0rewotKyAgICBHbGFkZUludGVyZmFjZSAgKmludGVyZmFjZTsKLSsgICAgR0Vycm9yICAgICAgICAgICplcnIgICAgID0gTlVMTDsKLSsgICAgZ2NoYXIgICAgICAgICAgICpjb250ZW50ID0gTlVMTDsKLSsgICAgZ3NpemUgICAgICAgICAgICBjbGVuOwotKwotKyAgICBpZiAoIWdfZmlsZV9nZXRfY29udGVudHMoZmlsZSwgJmNvbnRlbnQsICZjbGVuLCAmZXJyKSkgewotKyAgICAgICAgZ193YXJuaW5nKCJjb3VsZCBub3QgbG9hZCBnbGFkZSBmaWxlOiAlcyIsIGVyci0+bWVzc2FnZSk7Ci0rICAgICAgICBnX2Vycm9yX2ZyZWUoZXJyKTsKLSsgICAgICAgIHJldHVybiBOVUxMOwotKyAgICB9Ci0rCi0rICAgIGludGVyZmFjZSA9IGdsYWRlX3BhcnNlcl9wYXJzZV9idWZmZXIoY29udGVudCwgKGdpbnQpIGNsZW4sIGRvbWFpbik7Ci0rCi0rICAgIGdfZnJlZShjb250ZW50KTsKLSsKLSsgICAgcmV0dXJuIGludGVyZmFjZTsKLSt9Ci0rCi0rI2VuZGlmIC8qIFVTRV9HTUFSS1VQX1BBUlNFUiAqLwotKwotIC8qKgotICAqIGdsYWRlX3BhcnNlcl9wYXJzZV9idWZmZXIKLSAgKiBAYnVmZmVyOiBhIGJ1ZmZlciBpbiBtZW1vcnkgY29udGFpbmluZyBYTUwgZGF0YS4KLUBAIC0xMjM3LDYgKzEzNzEsOSBAQAotICAqCi0gICogUmV0dXJuczogdGhlIEdsYWRlSW50ZXJmYWNlIHN0cnVjdHVyZSBmb3IgdGhlIFhNTCBidWZmZXIuCi0gICovCi0rCi0rI2lmbmRlZiBVU0VfR01BUktVUF9QQVJTRVIKLSsKLSBHbGFkZUludGVyZmFjZSAqCi0gZ2xhZGVfcGFyc2VyX3BhcnNlX2J1ZmZlcihjb25zdCBnY2hhciAqYnVmZmVyLCBnaW50IGxlbiwgY29uc3QgZ2NoYXIgKmRvbWFpbikKLSB7Ci1AQCAtMTI2Myw2ICsxNDAwLDE2MSBAQAotICAgICByZXR1cm4gc3RhdGUuaW50ZXJmYWNlOwotIH0KLSAKLSsjZWxzZSAvKiBkZWZpbmVkKFVTRV9HTUFSS1VQX1BBUlNFUikgKi8KLSsKLSsKLStzdGF0aWMgR2xhZGVJbnRlcmZhY2UgKgotK2dsYWRlX3BhcnNlcl9wYXJzZV9idWZmZXJfaW50ZXJuYWwoY29uc3QgZ2NoYXIgKmJ1ZmZlciwgZ2ludCBsZW4sIGNvbnN0IGdjaGFyICpkb21haW4pCi0rewotKwlHTWFya3VwUGFyc2VDb250ZXh0ICAqY29udGV4dDsKLSsJR2xhZGVQYXJzZVN0YXRlICAgICAgIHN0YXRlID0geyAwIH07Ci0rCUdFcnJvciAgICAgICAgICAgICAgICplcnIgICA9IE5VTEw7Ci0rCi0rCXN0YXRlLmludGVyZmFjZSA9IE5VTEw7Ci0rCWlmIChkb21haW4pCi0rCQlzdGF0ZS5kb21haW4gPSBkb21haW47Ci0rCWVsc2UKLSsJCXN0YXRlLmRvbWFpbiA9IHRleHRkb21haW4oTlVMTCk7Ci0rCi0rCS8qIEZJWE1FOiBUaGlzIHN0cnN0cigpIGlzIG5vdCBzYWZlLCBhcyBpdCBpZ25vcmVzIHRoZSBsZW4KLSsJICogICAgICAgIGFyZ3VtZW50IGFuZCBhc3N1bWVzIHRoZSBidWZmZXIgaXMgTlVMLXRlcm1pbmF0ZWQgKi8KLSsJaWYgKHN0cnN0cihidWZmZXIsICI8P3htbCIpID09IE5VTEwpIHsKLSsJCWdfd2FybmluZygiTm8gWE1MIGhlYWRlciBmb3VuZCBpbiBkb2N1bWVudCEiKTsKLSsJCXJldHVybiBOVUxMOwotKwl9Ci0rCi0rCWNvbnRleHQgPSBnX21hcmt1cF9wYXJzZV9jb250ZXh0X25ldygmZ2xhZGVfcGFyc2VyLCAoR01hcmt1cFBhcnNlRmxhZ3MpIDAsICZzdGF0ZSwgTlVMTCk7Ci0rCi0rCWdsYWRlX3BhcnNlcl9zdGFydF9kb2N1bWVudCgmc3RhdGUpOwotKwotKwlpZiAoIWdfbWFya3VwX3BhcnNlX2NvbnRleHRfcGFyc2UoY29udGV4dCwgYnVmZmVyLCAoZ3NzaXplKSBsZW4sICZlcnIpKSB7Ci0rCQlnX3dhcm5pbmcoImRvY3VtZW50IG5vdCB3ZWxsIGZvcm1lZDogJXMiLCBlcnItPm1lc3NhZ2UpOwotKwkJZ19lcnJvcl9mcmVlKGVycik7Ci0rCQlpZiAoc3RhdGUuaW50ZXJmYWNlKQotKwkJCWdsYWRlX2ludGVyZmFjZV9kZXN0cm95IChzdGF0ZS5pbnRlcmZhY2UpOwotKwkJcmV0dXJuIE5VTEw7Ci0rCX0KLSsKLSsJZ2xhZGVfcGFyc2VyX2VuZF9kb2N1bWVudCgmc3RhdGUpOwotKwotKwlpZiAoc3RhdGUuc3RhdGUgIT0gUEFSU0VSX0ZJTklTSCkgewotKwkJZ193YXJuaW5nKCJkaWQgbm90IGZpbmlzaCBpbiBQQVJTRVJfRklOSVNIIHN0YXRlISIpOwotKwotKwkJaWYgKHN0YXRlLmludGVyZmFjZSkKLSsJCQlnbGFkZV9pbnRlcmZhY2VfZGVzdHJveShzdGF0ZS5pbnRlcmZhY2UpOwotKwotKwkJcmV0dXJuIE5VTEw7Ci0rCX0KLSsKLSsJcmV0dXJuIHN0YXRlLmludGVyZmFjZTsKLSt9Ci0rCi0rc3RydWN0IF9nemlwX3JmYzE5NTJfaGRyCi0rewotKwlndWludDgJaWQxLCBpZDIsIGNtLCBmbGFnczsKLSsJZ3VpbnQzMiBtdGltZTsKLSsJZ3VpbnQ4ICB4ZmxhZ3M7Ci0rCWd1aW50OCAgb3M7Ci0rfTsKLSsKLStzdGF0aWMgR2xhZGVJbnRlcmZhY2UgKgotK2dsYWRlX3BhcnNlcl9wYXJzZV9nemlwcGVkX2J1ZmZlcihjb25zdCBnY2hhciAqYnVmZmVyLCBnaW50IGxlbiwgY29uc3QgZ2NoYXIgKmRvbWFpbikKLSt7Ci0rCXN0cnVjdCBfZ3ppcF9yZmMxOTUyX2hkciAqaGRyID0gKHN0cnVjdCBfZ3ppcF9yZmMxOTUyX2hkciopYnVmZmVyOwotKwlzdHJ1Y3Qgel9zdHJlYW1fcyAgICAgICAgIHpzdHJlYW07Ci0rCUdsYWRlSW50ZXJmYWNlICAgICAgICAgICAqaW50ZXJmYWNlOwotKwljb25zdCBndWludDggICAgICAgICAgICAgKmNidWY7ICAgICAgICAgICAgICAvKiBzdGFydCBvZiBjb21wcmVzc2VkIGRhdGEgKi8KLSsJZ3VpbnQ4ICAgICAgICAgICAgICAgICAgICpkZWNvbXByZXNzX2J1ZjsKLSsJZ3Vsb25nICAgICAgICAgICAgICAgICAgICBkZWNvbXByZXNzX2xlbiA9IDA7Ci0rCWdpbnQgICAgICAgICAgICAgICAgICAgICAgcmV0OwotKwotKwlnX2Fzc2VydChoZHIgIT0gTlVMTCAmJiBoZHItPmlkMSA9PSAweDFmICYmIGhkci0+aWQyID09IDB4OGIpOwotKwotKwlpZiAoaGRyLT5jbSAhPSBaX0RFRkxBVEVEKSB7Ci0rCQlnX3dhcm5pbmcoIlVua25vd24gZGVjb21wcmVzc2lvbiBtZXRob2QgJXUiLCAoZ3VpbnQpIGhkci0+Y20pOwotKwkJcmV0dXJuIE5VTEw7Ci0rCX0KLSsKLSsJLyogVW5jb21wcmVzc2VkIHNpemUgKG1vZHVsbyAyXjMyKSBpcyBsYXN0Ci0rCSAqICA0IGJ5dGVzIG9mIGd6aXBwZWQgZmlsZSwgYW5kIGxpdHRsZSBlbmRpYW4uCi0rCSAqICBTZWUgUkZDIDE5NTIgKi8KLSsJZGVjb21wcmVzc19sZW4gPSBHVUlOVDMyX0ZST01fTEUoKigoZ3VpbnQzMiopKCgoZ3VpbnQ4KilidWZmZXIpICsgbGVuIC0gNCkpKTsKLSsKLSsJLyogcGFyYW5vaWQgbW9kZTogZ2xhZGUgZmlsZXMgPiA1TUIgYXJlIHVubGlrZWx5ICovCi0rCWdfcmV0dXJuX3ZhbF9pZl9mYWlsKGRlY29tcHJlc3NfbGVuIDwgNSoxMDI0KjEwMjQsIE5VTEwpOwotKwotKwlkZWNvbXByZXNzX2J1ZiA9IGdfbWFsbG9jMChkZWNvbXByZXNzX2xlbiArIDEpOyAvKiArMSBmb3IgTlVMLXRlcm1pbmF0b3IgKi8KLSsKLSsJLyogZmluZCBzdGFydCBvZiBjb21wcmVzc2VkIGRhdGEsIHNraXBwaW5nIGhlYWRlciBzdHVmZiAqLwotKwljYnVmID0gKGd1aW50OCopYnVmZmVyICsgMTA7Ci0rCWlmIChoZHItPmZsYWdzICYgMHgwNCkgewotKwkJZ3VpbnQxNiB4bGVuID0gR1VJTlQxNl9GUk9NX0xFKCooKGd1aW50MTYqKWNidWYpKTsKLSsJCWNidWYgKz0geGxlbiArIDI7Ci0rCX0KLSsJaWYgKGhkci0+ZmxhZ3MgJiAweDA4KSB7Ci0rCQlndWludDE2IG9uYW1lbGVuID0gc3RybGVuKGNidWYpOwotKwkJY2J1ZiArPSBvbmFtZWxlbiArIDE7Ci0rCX0KLSsJaWYgKGhkci0+ZmxhZ3MgJiAweDEwKSB7Ci0rCQlndWludDE2IGNvbW1lbnRsZW4gPSBzdHJsZW4oY2J1Zik7Ci0rCQljYnVmICs9IGNvbW1lbnRsZW4gKyAxOwotKwl9Ci0rCWlmIChoZHItPmZsYWdzICYgMHgwMikKLSsJewotKwkJY2J1ZiArPSAyOyAvKiBza2lwIGhlYWRlciBDUkMxNiAqLwotKwl9Ci0rCi0rCXpzdHJlYW0ubmV4dF9pbiAgPSAodm9pZCopY2J1ZjsKLSsJenN0cmVhbS5hdmFpbF9pbiA9ICh1TG9uZ2YpIGxlbiAtICgodm9pZCopY2J1Zi0odm9pZCopYnVmZmVyKSAtIDQgLSA0ICsxOyAKLSsJenN0cmVhbS5uZXh0X291dCA9IGRlY29tcHJlc3NfYnVmOwotKwl6c3RyZWFtLmF2YWlsX291dD0gZGVjb21wcmVzc19sZW47Ci0rCXpzdHJlYW0uemFsbG9jICAgPSBaX05VTEw7Ci0rCXpzdHJlYW0uemZyZWUgICAgPSBaX05VTEw7Ci0rCXpzdHJlYW0ub3BhcXVlICAgPSBaX05VTEw7Ci0rCi0rCXJldCA9IGluZmxhdGVJbml0MigmenN0cmVhbSwgLU1BWF9XQklUUyk7Ci0rCi0rCWlmIChyZXQgIT0gWl9PSykgewotKwkJZ193YXJuaW5nKCJpbmZsYXRlSW5pdDIoKSBmYWlsZWQuIHpsaWIgZXJyb3IgY29kZTogJWQiLCByZXQpOwotKwkJZ19mcmVlKGRlY29tcHJlc3NfYnVmKTsKLSsJCXJldHVybiBOVUxMOwotKwl9Ci0rCi0rCXJldCA9IGluZmxhdGUoJnpzdHJlYW0sIFpfRklOSVNIKTsKLSsKLSsJaWYgKHJldCAhPSBaX1NUUkVBTV9FTkQpIHsKLSsJCWdfd2FybmluZygiemxpYiBkZWNvbXByZXNzaW9uIGZhaWxlZC4gemxpYiBlcnJvciBjb2RlOiAlZCIsIHJldCk7Ci0rCQlnX2ZyZWUoZGVjb21wcmVzc19idWYpOwotKwkJcmV0dXJuIE5VTEw7Ci0rCX0KLSsKLSsJaW50ZXJmYWNlID0gZ2xhZGVfcGFyc2VyX3BhcnNlX2J1ZmZlcl9pbnRlcm5hbChkZWNvbXByZXNzX2J1ZiwgZGVjb21wcmVzc19sZW4sIGRvbWFpbik7Ci0rCi0rCWdfZnJlZShkZWNvbXByZXNzX2J1Zik7Ci0rCi0rCXJldHVybiBpbnRlcmZhY2U7Ci0rfQotKwotK0dsYWRlSW50ZXJmYWNlICoKLStnbGFkZV9wYXJzZXJfcGFyc2VfYnVmZmVyKGNvbnN0IGdjaGFyICpidWZmZXIsIGdpbnQgbGVuLCBjb25zdCBnY2hhciAqZG9tYWluKQotK3sKLSsJZ19yZXR1cm5fdmFsX2lmX2ZhaWwoYnVmZmVyICE9IE5VTEwsIE5VTEwpOwotKwlnX3JldHVybl92YWxfaWZfZmFpbChsZW4gPiAwLCBOVUxMKTsKLSsKLSsJLyogQ2hlY2sgaWYgYnVmZmVyIGlzIGd6aXBwZWQgKi8KLSsJaWYgKGJ1ZmZlclswXSA9PSAweDFmICYmIGJ1ZmZlclsxXSA9PSAoZ2NoYXIpMHg4YikgewotKwkJcmV0dXJuIGdsYWRlX3BhcnNlcl9wYXJzZV9nemlwcGVkX2J1ZmZlcihidWZmZXIsIGxlbiwgZG9tYWluKTsKLSsJfQotKwotKwkvKiBCdWZmZXIgaXMgY2xlYXJ0ZXh0LiAqLwotKwlyZXR1cm4gZ2xhZGVfcGFyc2VyX3BhcnNlX2J1ZmZlcl9pbnRlcm5hbChidWZmZXIsIGxlbiwgZG9tYWluKTsKLSt9Ci0rCi0rI2VuZGlmIC8qIFVTRV9HTUFSS1VQX1BBUlNFUiAqLwotKwotKwotKyNpZm5kZWYgVVNFX0dNQVJLVVBfUEFSU0VSCi0rCi0gc3RhdGljIHZvaWQKLSBkdW1wX3dpZGdldCh4bWxOb2RlICpwYXJlbnQsIEdsYWRlV2lkZ2V0SW5mbyAqaW5mbywgZ2ludCBpbmRlbnQpCi0gewotQEAgLTEzODIsNiArMTY3NCw4IEBACi0gCXhtbE5vZGVBZGRDb250ZW50KHdpZGdldCwgIiAgIik7Ci0gfQotIAotKyNlbmRpZiAvKiAhZGVmaW5lZChVU0VfR01BUktVUF9QQVJTRVIpICovCi0rCi0gLyoqCi0gICogZ2xhZGVfaW50ZXJmYWNlX2R1bXAKLSAgKiBAaW50ZXJmYWNlOiB0aGUgR2xhZGVJbnRlcmZhY2UKLUBAIC0xMzkwLDYgKzE2ODQsOSBAQAotICAqIFRoaXMgZnVuY3Rpb24gZHVtcHMgdGhlIGNvbnRlbnRzIG9mIGEgR2xhZGVJbnRlcmZhY2UgaW50byBhIGZpbGUgYXMKLSAgKiBYTUwuICBJdCBpcyBpbnRlbmRlZCBtYWlubHkgYXMgYSBkZWJ1Z2dpbmcgdG9vbC4KLSAgKi8KLSsKLSsjaWZuZGVmIFVTRV9HTUFSS1VQX1BBUlNFUgotKwotIHZvaWQKLSBnbGFkZV9pbnRlcmZhY2VfZHVtcChHbGFkZUludGVyZmFjZSAqaW50ZXJmYWNlLCBjb25zdCBnY2hhciAqZmlsZW5hbWUpCi0gewotQEAgLTE0MjgsNiArMTcyNSwxNyBAQAotICAgICB4bWxGcmVlRG9jKGRvYyk7Ci0gfQotIAotKyNlbHNlIC8qIGRlZmluZWQoVVNFX0dNQVJLVVBfUEFSU0VSKSAqLwotKwotK3ZvaWQKLStnbGFkZV9pbnRlcmZhY2VfZHVtcChHbGFkZUludGVyZmFjZSAqaW50ZXJmYWNlLCBjb25zdCBnY2hhciAqZmlsZW5hbWUpCi0rewotKyAgICBnX3dhcm5pbmcoImdsYWRlX2ludGVyZmFjZV9kdW1wKCkgaXMgb25seSBhdmFpbGFibGUgd2l0aCBsaWJ4bWwyLiIpOwotK30KLSsKLSsjZW5kaWYgLyogVVNFX0dNQVJLVVBfUEFSU0VSICovCi0rCi0rCi0gI2lmIDAKLSBpbnQKLSBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndikgewotZGlmZiAtdXJOIGxpYmdsYWRlLTIuNC4yLm9yaWcvbGliZ2xhZGUtMi4wLnBjLmluIGxpYmdsYWRlLTIuNC4yL2xpYmdsYWRlLTIuMC5wYy5pbgotLS0tIGxpYmdsYWRlLTIuNC4yLm9yaWcvbGliZ2xhZGUtMi4wLnBjLmluCTIwMDEtMTItMTIgMTU6Mjg6MjMuMDAwMDAwMDAwICswMTAwCi0rKysgbGliZ2xhZGUtMi40LjIvbGliZ2xhZGUtMi4wLnBjLmluCTIwMDUtMDMtMjIgMDE6MjA6MDAuMDAwMDAwMDAwICswMTAwCi1AQCAtMTEsNyArMTEsNyBAQAotIE5hbWU6IExpYmdsYWRlCi0gRGVzY3JpcHRpb246IGEgbGlicmFyeSBmb3IgZHluYW1pY2FsbHkgbG9hZGluZyBHTEFERSBpbnRlcmZhY2UgZmlsZXMKLSBWZXJzaW9uOiBAVkVSU0lPTkAKLS1SZXF1aXJlczogZ3RrKy0yLjAgbGlieG1sLTIuMAotK1JlcXVpcmVzOiBndGsrLTIuMCBAUEtHQ0ZHX1JFUVVJUkVfTElCWE1MMkAKLSBMaWJzOiAtTCR7bGliZGlyfSAtbGdsYWRlLTIuMAotIENmbGFnczogLUkke2luY2x1ZGVkaXJ9L2xpYmdsYWRlLTIuMAotIApkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1nbm9tZS9saWJnbGFkZS9saWJnbGFkZS0yLjYuNC9weXRob25fZW52aXJvbm1lbnQucGF0Y2ggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdub21lL2xpYmdsYWRlL2xpYmdsYWRlLTIuNi40L3B5dGhvbl9lbnZpcm9ubWVudC5wYXRjaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjViMmVjNC4uMDAwMDAwMAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdub21lL2xpYmdsYWRlL2xpYmdsYWRlLTIuNi40L3B5dGhvbl9lbnZpcm9ubWVudC5wYXRjaAorKysgL2Rldi9udWxsCkBAIC0xLDE0ICswLDAgQEAKLVVzaW5nIEBQWVRIT05AIGZvciB0aGlzIHBhdGggd291bGQgcmVzdWx0IGluIHRoZSBidWlsZCBzeXN0ZW0gcHl0aG9uIGJlaW5nIAotcmVmZXJyZWQgdG8uIEluc3RlYWQgd2Ugd2FudCB0byBsb2NhdGUgcHl0aG9uIGZyb20gdGhlIGVudmlyb25tZW50LgotCi1VcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW2NvbmZpZ3VyYXRpb25dCi0KLWRpZmYgLXJ1TiBsaWJnbGFkZS0yLjYuNC1vcmlnLy9saWJnbGFkZS1jb252ZXJ0LmluIGxpYmdsYWRlLTIuNi40L2xpYmdsYWRlLWNvbnZlcnQuaW4KLS0tLSBsaWJnbGFkZS0yLjYuNC1vcmlnLy9saWJnbGFkZS1jb252ZXJ0LmluCTIwMTEtMDktMjIgMTA6MTg6MjguOTkxMTY0MDAzICswODAwCi0rKysgbGliZ2xhZGUtMi42LjQvbGliZ2xhZGUtY29udmVydC5pbgkyMDExLTA5LTIyIDEwOjE4OjU1LjQzMTE2NDAwMyArMDgwMAotQEAgLTEsNCArMSw0IEBACi0tIyFAUFlUSE9OQAotKyMhL3Vzci9iaW4vZW52IHB5dGhvbgotICMgLSotIG1vZGU6IHB5dGhvbiAtKi0KLSAKLSAjIHllcywgdGhpcyByZXF1aXJlcyBweXRob24gMi54IGFuZCBhbiBYTUwgcGFyc2VyIG1vZHVsZSAoZWcuIFB5RXhwYXQpCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdub21lL2xpYmdsYWRlL2xpYmdsYWRlXzIuNi40LmJiIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1nbm9tZS9saWJnbGFkZS9saWJnbGFkZV8yLjYuNC5iYgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTUzZTE5Yy4uMDAwMDAwMAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdub21lL2xpYmdsYWRlL2xpYmdsYWRlXzIuNi40LmJiCisrKyAvZGV2L251bGwKQEAgLTEsMzEgKzAsMCBAQAotU1VNTUFSWSA9ICJSdW50aW1lIHN1cHBvcnQgZm9yIHRoZSBHVEsrIGludGVyZmFjZSBidWlsZGVyIgotSE9NRVBBR0UgPSAiaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2xpYmdsYWRlLyIKLUJVR1RSQUNLRVIgPSAiaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvIgotCi1MSUNFTlNFID0gIkxHUEx2MiAmIExHUEx2MisiCi1MSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT01NWNhODE3Y2NiN2Q1YjViNjYzNTU2OTBlOWFiYzYwNSBcCi0gICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9nbGFkZS9nbGFkZS5oO2VuZGxpbmU9MjI7bWQ1PWEwNGY0NjFjOTY0YmE0YjU3YTE3MmQxZmJjZDhmOGZjIFwKLSAgICAgICAgICAgICAgICAgICAgZmlsZTovL2dsYWRlL2dsYWRlLWd0ay5jO2VuZGxpbmU9MjI7bWQ1PTc2NmY5OTM0MzNlMjY0MmZlYzg3OTM2ZDMxOTk5MGZmIgotCi1TRUNUSU9OID0gImxpYnMiCi1QUiA9ICJyNSIKLURFUEVORFMgPSAiemxpYiBnZGstcGl4YnVmIGd0aysiCi0KLWluaGVyaXQgYXV0b3Rvb2xzIHBrZ2NvbmZpZyBnbm9tZWJhc2UgZ3RrLWRvYyBkaXN0cm9fZmVhdHVyZXNfY2hlY2sKLUFOWV9PRl9ESVNUUk9fRkVBVFVSRVMgPSAiJHtHVEsyRElTVFJPRkVBVFVSRVN9IgotR05PTUVfQ09NUFJFU1NfVFlQRT0iYnoyIgotCi1TUkNfVVJJICs9ICJmaWxlOi8vZ2xhZGUtY3J1ZnQucGF0Y2ggZmlsZTovL25vLXhtbDIucGF0Y2ggZmlsZTovL3B5dGhvbl9lbnZpcm9ubWVudC5wYXRjaCIKLQotU1JDX1VSSVthcmNoaXZlLm1kNXN1bV0gPSAiZDE3NzZiNDBmNGUxNjZiNWU5YzEwN2YxYzhmZTQxMzkiCi1TUkNfVVJJW2FyY2hpdmUuc2hhMjU2c3VtXSA9ICI2NDM2MWU3NjQ3ODM5ZDM2ZWQ4MzM2ZDk5MmZkMjEwZDNlODEzOTg4MjI2OWJlZDQ3ZGM0Njc0OTgwMTY1ZGVjIgotCi1FWFRSQV9PRUNPTkYgKz0gIi0td2l0aG91dC1saWJ4bWwyIgotCi1DRkxBR1MgKz0gIi1seiIKLQotUEFDS0FHRVMgKz0gIiAke1BOfS1kYXRhIgotRklMRVNfJHtQTn0gPSAiJHtsaWJkaXJ9L2xpYiouc28uKiIKLUZJTEVTXyR7UE59LWRhdGEgPSAiJHtkYXRhZGlyfS94bWwvbGliZ2xhZGUvZ2xhZGUtMi4wLmR0ZCIKLUZJTEVTXyR7UE59LWRldiArPSAiJHtiaW5kaXJ9L2xpYmdsYWRlLWNvbnZlcnQiCi0jUkRFUEVORFNfJHtQTn0gPSAiJHtQTn0tZGF0YSIKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ25vbWUvbGliZ3VkZXYvbGliZ3VkZXZfMjMwLmJiIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1nbm9tZS9saWJndWRldi9saWJndWRldl8yMzAuYmIKaW5kZXggNmExMDUwMi4uNzA5NTUzYiAxMDA2NDQKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1nbm9tZS9saWJndWRldi9saWJndWRldl8yMzAuYmIKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1nbm9tZS9saWJndWRldi9saWJndWRldl8yMzAuYmIKQEAgLTEwLDUgKzEwLDcgQEAKIExJQ0VOU0UgPSAiTEdQTHYyLjEiCiBMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT00ZmJkNjUzODBjZGQyNTU5NTEwNzkwMDhiMzY0NTE2YyIKIAotaW5oZXJpdCBnbm9tZWJhc2UgZ29iamVjdC1pbnRyb3NwZWN0aW9uCitpbmhlcml0IGdub21lYmFzZSBnb2JqZWN0LWludHJvc3BlY3Rpb24gZ3RrLWRvYwogCitVUFNUUkVBTV9DSEVDS19VUkkgPSAiaHR0cDovL2Z0cC5nbm9tZS5vcmcvcHViL0dOT01FL3NvdXJjZXMvbGliZ3VkZXYvIgorVVBTVFJFQU1fQ0hFQ0tfUkVHRVggPSAiKD9QPHB2ZXI+KFxkKykpIgpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1nbm9tZS9saWJyc3ZnL2xpYnJzdmdfMi40MC4xMy5iYiBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ25vbWUvbGlicnN2Zy9saWJyc3ZnXzIuNDAuMTMuYmIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDJhYzUyZjcuLjAwMDAwMDAKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1nbm9tZS9saWJyc3ZnL2xpYnJzdmdfMi40MC4xMy5iYgorKysgL2Rldi9udWxsCkBAIC0xLDQ1ICswLDAgQEAKLVNVTU1BUlkgPSAiTGlicmFyeSBmb3IgcmVuZGVyaW5nIFNWRyBmaWxlcyIKLUhPTUVQQUdFID0gImh0dHA6Ly9mdHAuZ25vbWUub3JnL3B1Yi9HTk9NRS9zb3VyY2VzL2xpYnJzdmcvIgotQlVHVFJBQ0tFUiA9ICJodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy8iCi0KLUxJQ0VOU0UgPSAiTEdQTHYyKyIKLUxJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PTk0ZDU1ZDUxMmE5YmEzNmNhYTliN2RmMDc5YmFlMTlmIFwKLSAgICAgICAgICAgICAgICAgICAgZmlsZTovL3JzdmcuaDtiZWdpbmxpbmU9MztlbmRsaW5lPTI0O21kNT0yMGI0MTEzYzQ5MDliYmYwZDY3ZTAwNjc3ODMwMmJjNiIKLQotU0VDVElPTiA9ICJ4MTEvdXRpbHMiCi1ERVBFTkRTID0gImNhaXJvIGdkay1waXhidWYgZ2xpYi0yLjAgbGliY3JvY28gbGlieG1sMiBwYW5nbyIKLUJCQ0xBU1NFWFRFTkQgPSAibmF0aXZlIgotCi1pbmhlcml0IGF1dG90b29scyBwa2djb25maWcgZ25vbWViYXNlIGd0ay1kb2MgcGl4YnVmY2FjaGUgdXBzdHJlYW0tdmVyc2lvbi1pcy1ldmVuIGdvYmplY3QtaW50cm9zcGVjdGlvbgotCi1TUkNfVVJJICs9ICJmaWxlOi8vZ3RrLW9wdGlvbi5wYXRjaCIKLQotU1JDX1VSSVthcmNoaXZlLm1kNXN1bV0gPSAiYWQwMzc4MGUxMmM1NmU1MjQ3NGQ4ZWRmODY5NzZjNzMiCi1TUkNfVVJJW2FyY2hpdmUuc2hhMjU2c3VtXSA9ICI0ZDZlYTkzZWMwNWY1ZGFiZTcyNjJkNzExZDI0NmEwYTk5YjIzMTFlMjE1MzYwZGQzZGNhYmQ2YWZlM2I5ODA0IgotCi1DQUNIRURfQ09ORklHVVJFVkFSUyA9ICJhY19jdl9wYXRoX0dES19QSVhCVUZfUVVFUllMT0FERVJTPSR7U1RBR0lOR19MSUJESVJfTkFUSVZFfS9nZGstcGl4YnVmLTIuMC9nZGstcGl4YnVmLXF1ZXJ5LWxvYWRlcnMiCi0KLSMgVGhlIG9sZGVyIGxkICgyLjIyKSBvbiB0aGUgaG9zdCAoQ2VudG9zIDYuNSkgZG9lc24ndCBoYXZlIHRoZQotIyAtQnN5bWJvbGljLWZ1bmN0aW9ucyBvcHRpb24sIHdlIGNhbiBkaXNhYmxlIGl0IGZvciBuYXRpdmUuCi1FWFRSQV9PRUNPTkZfYXBwZW5kX2NsYXNzLW5hdGl2ZSA9ICIgLS1lbmFibGUtQnN5bWJvbGljPWF1dG8iCi0KLVBBQ0tBR0VDT05GSUcgPz89ICJnZGtwaXhidWYiCi0jIFRoZSBnZGstcGl4YnVmIGxvYWRlcgotUEFDS0FHRUNPTkZJR1tnZGtwaXhidWZdID0gIi0tZW5hYmxlLXBpeGJ1Zi1sb2FkZXIsLS1kaXNhYmxlLXBpeGJ1Zi1sb2FkZXIsZ2RrLXBpeGJ1Zi1uYXRpdmUiCi0jIEdUSysgdGVzdCBhcHBsaWNhdGlvbiAocnN2Zy12aWV3KQotUEFDS0FHRUNPTkZJR1tndGtdID0gIi0td2l0aC1ndGszLC0td2l0aG91dC1ndGszLGd0ayszIgotCi1kb19pbnN0YWxsX2FwcGVuZCgpIHsKLQkjIExvYWRhYmxlIG1vZHVsZXMgZG9uJ3QgbmVlZCAuYSBvciAubGEgb24gTGludXgKLQlybSAtZiAke0R9JHtsaWJkaXJ9L2dkay1waXhidWYtMi4wLyovbG9hZGVycy8qLmEgJHtEfSR7bGliZGlyfS9nZGstcGl4YnVmLTIuMC8qL2xvYWRlcnMvKi5sYQotfQotCi1QQUNLQUdFUyA9KyAibGlicnN2Zy1ndGsgcnN2ZyIKLUZJTEVTX3JzdmcgPSAiJHtiaW5kaXJ9L3JzdmcqIFwKLQkgICAgICAke2RhdGFkaXJ9L3BpeG1hcHMvc3ZnLXZpZXdlci5zdmcgXAotCSAgICAgICR7ZGF0YWRpcn0vdGhlbWVzIgotRklMRVNfbGlicnN2Zy1ndGsgPSAiJHtsaWJkaXJ9L2dkay1waXhidWYtMi4wLyovKi8qLnNvIgotCi1QSVhCVUZfUEFDS0FHRVMgPSAibGlicnN2Zy1ndGsiCi0KLVBJWEJVRkNBQ0hFX1NZU1JPT1RfREVQU19hcHBlbmRfY2xhc3MtbmF0aXZlID0gIiBoYXJmYnV6ei1uYXRpdmU6ZG9fcG9wdWxhdGVfc3lzcm9vdF9zZXRzY2VuZSBwYW5nby1uYXRpdmU6ZG9fcG9wdWxhdGVfc3lzcm9vdF9zZXRzY2VuZSBpY3UtbmF0aXZlOmRvX3BvcHVsYXRlX3N5c3Jvb3Rfc2V0c2NlbmUiCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdub21lL2xpYnJzdmcvbGlicnN2Z18yLjQwLjE2LmJiIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1nbm9tZS9saWJyc3ZnL2xpYnJzdmdfMi40MC4xNi5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40OTI0M2M4Ci0tLSAvZGV2L251bGwKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1nbm9tZS9saWJyc3ZnL2xpYnJzdmdfMi40MC4xNi5iYgpAQCAtMCwwICsxLDQzIEBACitTVU1NQVJZID0gIkxpYnJhcnkgZm9yIHJlbmRlcmluZyBTVkcgZmlsZXMiCitIT01FUEFHRSA9ICJodHRwOi8vZnRwLmdub21lLm9yZy9wdWIvR05PTUUvc291cmNlcy9saWJyc3ZnLyIKK0JVR1RSQUNLRVIgPSAiaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvIgorCitMSUNFTlNFID0gIkxHUEx2MisiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT05NGQ1NWQ1MTJhOWJhMzZjYWE5YjdkZjA3OWJhZTE5ZiBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9yc3ZnLmg7YmVnaW5saW5lPTM7ZW5kbGluZT0yNDttZDU9MjBiNDExM2M0OTA5YmJmMGQ2N2UwMDY3NzgzMDJiYzYiCisKK1NFQ1RJT04gPSAieDExL3V0aWxzIgorREVQRU5EUyA9ICJjYWlybyBnZGstcGl4YnVmIGdsaWItMi4wIGxpYmNyb2NvIGxpYnhtbDIgcGFuZ28iCitCQkNMQVNTRVhURU5EID0gIm5hdGl2ZSIKKworaW5oZXJpdCBhdXRvdG9vbHMgcGtnY29uZmlnIGdub21lYmFzZSBndGstZG9jIHBpeGJ1ZmNhY2hlIHVwc3RyZWFtLXZlcnNpb24taXMtZXZlbiBnb2JqZWN0LWludHJvc3BlY3Rpb24KKworU1JDX1VSSSArPSAiZmlsZTovL2d0ay1vcHRpb24ucGF0Y2giCisKK1NSQ19VUklbYXJjaGl2ZS5tZDVzdW1dID0gImY0NzRmZTM3MTc3YTJiZjgwNTA3ODdkZjIwNDYwOTVjIgorU1JDX1VSSVthcmNoaXZlLnNoYTI1NnN1bV0gPSAiZDQ4YmNmNmIwM2ZhOThmMDdkZjEwMzMyZmI0OWQ4YzAxMDc4NmRkY2E2YWIzNGNiYmEyMTc2ODRmNTMzZmYyZSIKKworQ0FDSEVEX0NPTkZJR1VSRVZBUlMgPSAiYWNfY3ZfcGF0aF9HREtfUElYQlVGX1FVRVJZTE9BREVSUz0ke1NUQUdJTkdfTElCRElSX05BVElWRX0vZ2RrLXBpeGJ1Zi0yLjAvZ2RrLXBpeGJ1Zi1xdWVyeS1sb2FkZXJzIgorCisjIFRoZSBvbGRlciBsZCAoMi4yMikgb24gdGhlIGhvc3QgKENlbnRvcyA2LjUpIGRvZXNuJ3QgaGF2ZSB0aGUKKyMgLUJzeW1ib2xpYy1mdW5jdGlvbnMgb3B0aW9uLCB3ZSBjYW4gZGlzYWJsZSBpdCBmb3IgbmF0aXZlLgorRVhUUkFfT0VDT05GX2FwcGVuZF9jbGFzcy1uYXRpdmUgPSAiIC0tZW5hYmxlLUJzeW1ib2xpYz1hdXRvIgorCitQQUNLQUdFQ09ORklHID8/PSAiZ2RrcGl4YnVmIgorIyBUaGUgZ2RrLXBpeGJ1ZiBsb2FkZXIKK1BBQ0tBR0VDT05GSUdbZ2RrcGl4YnVmXSA9ICItLWVuYWJsZS1waXhidWYtbG9hZGVyLC0tZGlzYWJsZS1waXhidWYtbG9hZGVyLGdkay1waXhidWYtbmF0aXZlIgorIyBHVEsrIHRlc3QgYXBwbGljYXRpb24gKHJzdmctdmlldykKK1BBQ0tBR0VDT05GSUdbZ3RrXSA9ICItLXdpdGgtZ3RrMywtLXdpdGhvdXQtZ3RrMyxndGsrMyIKKworZG9faW5zdGFsbF9hcHBlbmQoKSB7CisJIyBMb2FkYWJsZSBtb2R1bGVzIGRvbid0IG5lZWQgLmEgb3IgLmxhIG9uIExpbnV4CisJcm0gLWYgJHtEfSR7bGliZGlyfS9nZGstcGl4YnVmLTIuMC8qL2xvYWRlcnMvKi5hICR7RH0ke2xpYmRpcn0vZ2RrLXBpeGJ1Zi0yLjAvKi9sb2FkZXJzLyoubGEKK30KKworUEFDS0FHRVMgPSsgImxpYnJzdmctZ3RrIHJzdmciCitGSUxFU19yc3ZnID0gIiR7YmluZGlyfS9yc3ZnKiBcCisJICAgICAgJHtkYXRhZGlyfS9waXhtYXBzL3N2Zy12aWV3ZXIuc3ZnIFwKKwkgICAgICAke2RhdGFkaXJ9L3RoZW1lcyIKK0ZJTEVTX2xpYnJzdmctZ3RrID0gIiR7bGliZGlyfS9nZGstcGl4YnVmLTIuMC8qLyovKi5zbyIKKworUElYQlVGX1BBQ0tBR0VTID0gImxpYnJzdmctZ3RrIgpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1nbm9tZS9saWJzZWNyZXQvbGlic2VjcmV0XzAuMTguNC5iYiBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ25vbWUvbGlic2VjcmV0L2xpYnNlY3JldF8wLjE4LjQuYmIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGJlYWFiYTAuLjAwMDAwMDAKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1nbm9tZS9saWJzZWNyZXQvbGlic2VjcmV0XzAuMTguNC5iYgorKysgL2Rldi9udWxsCkBAIC0xLDI1ICswLDAgQEAKLVNVTU1BUlkgPSAibGlic2VjcmV0IGlzIGEgbGlicmFyeSBmb3Igc3RvcmluZyBhbmQgcmV0cmlldmluZyBwYXNzd29yZHMgYW5kIG90aGVyIHNlY3JldHMiCi1MSUNFTlNFID0gIkxHUEx2Mi4xIgotTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9MjNjMmE1ZTAxMDZiOTlkNzUyMzg5ODY1NTliYjVmYzYiCi0KLWluaGVyaXQgZ25vbWViYXNlIGd0ay1kb2MgdmFsYSBnb2JqZWN0LWludHJvc3BlY3Rpb24KLQotREVQRU5EUyArPSAiZ2xpYi0yLjAgbGliZ2NyeXB0IGdldHRleHQtbmF0aXZlIGludGx0b29sLW5hdGl2ZSIKLQotRVhUUkFfT0VDT05GICs9ICItLWRpc2FibGUtbWFucGFnZXMiCi0KLVNSQ19VUklbYXJjaGl2ZS5tZDVzdW1dID0gIjUxOTBkYTFlZTY4NjQzNzA0NmJjMTAwNjhmMTIwZDFkIgotU1JDX1VSSVthcmNoaXZlLnNoYTI1NnN1bV0gPSAiMGYyOWI1MTY5ODE5OGU2OTk5YzkxZjRhZGNlMzExOWM4YzQ1N2Y1NDZiMTMzYTg1YmFlYTVlYTkwMTBhMTllZCIKLQotIyBodHRwOi8vZXJyb3JzLnlvY3RvcHJvamVjdC5vcmcvRXJyb3JzL0RldGFpbHMvMjAyMjgvCi1BUk1fSU5TVFJVQ1RJT05fU0VUID0gImFybSIKLQotIyB2YXBpZ2VuLm00IGJ1bmRsZWQgd2l0aCB0aGUgdGFyYmFsbCBkb2VzIG5vdCB5ZXQgaGF2ZSBvdXIgY3Jvc3MtY29tcGlsYXRpb24gZml4ZXMKLWRvX2NvbmZpZ3VyZV9wcmVwZW5kKCkgewotICAgIHJtIC1mICR7U30vYnVpbGQvbTQvdmFwaWdlbi5tNAotfQotCi0jIFNlY3JldC0xOiBwb2t5L2J1aWxkLW1pcHM2NC90bXAvd29yay9taXBzNjQtcG9reS1saW51eC9saWJncGctZXJyb3IvMS4xOS1yMC9saWJncGctZXJyb3ItMS4xOS9zcmMvcG9zaXgtbG9jay5jOjExOTogZ2V0X2xvY2tfb2JqZWN0OiBBc3NlcnRpb24gYCEic2l6ZW9mIGxvY2sgb2JqIicgZmFpbGVkLgotIyBxZW11OiB1bmNhdWdodCB0YXJnZXQgc2lnbmFsIDYgKEFib3J0ZWQpIC0gY29yZSBkdW1wZWQKLUVYVFJBX09FQ09ORl9hcHBlbmRfbWlwczY0ID0gIiAtLWRpc2FibGUtaW50cm9zcGVjdGlvbiIKLQpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1nbm9tZS9saWJzZWNyZXQvbGlic2VjcmV0XzAuMTguNS5iYiBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ25vbWUvbGlic2VjcmV0L2xpYnNlY3JldF8wLjE4LjUuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmNiMzA0NgotLS0gL2Rldi9udWxsCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ25vbWUvbGlic2VjcmV0L2xpYnNlY3JldF8wLjE4LjUuYmIKQEAgLTAsMCArMSwyNSBAQAorU1VNTUFSWSA9ICJsaWJzZWNyZXQgaXMgYSBsaWJyYXJ5IGZvciBzdG9yaW5nIGFuZCByZXRyaWV2aW5nIHBhc3N3b3JkcyBhbmQgb3RoZXIgc2VjcmV0cyIKK0xJQ0VOU0UgPSAiTEdQTHYyLjEiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT0yM2MyYTVlMDEwNmI5OWQ3NTIzODk4NjU1OWJiNWZjNiIKKworaW5oZXJpdCBnbm9tZWJhc2UgZ3RrLWRvYyB2YWxhIGdvYmplY3QtaW50cm9zcGVjdGlvbgorCitERVBFTkRTICs9ICJnbGliLTIuMCBsaWJnY3J5cHQgZ2V0dGV4dC1uYXRpdmUgaW50bHRvb2wtbmF0aXZlIgorCitFWFRSQV9PRUNPTkYgKz0gIi0tZGlzYWJsZS1tYW5wYWdlcyIKKworU1JDX1VSSVthcmNoaXZlLm1kNXN1bV0gPSAiMmQ2ODg4MjU5MjEzMTNkYTg3MzEzMTNiMGE3ZjM5NGMiCitTUkNfVVJJW2FyY2hpdmUuc2hhMjU2c3VtXSA9ICI5Y2U3YmQ4ZGQ1ODMxZjI3ODZjOTM1ZDgyNjM4YWM0MjhmYTA4NTA1N2NjNjc4MGFiYTBlMzkzNzU4ODdjY2IzIgorCisjIGh0dHA6Ly9lcnJvcnMueW9jdG9wcm9qZWN0Lm9yZy9FcnJvcnMvRGV0YWlscy8yMDIyOC8KK0FSTV9JTlNUUlVDVElPTl9TRVQgPSAiYXJtIgorCisjIHZhcGlnZW4ubTQgYnVuZGxlZCB3aXRoIHRoZSB0YXJiYWxsIGRvZXMgbm90IHlldCBoYXZlIG91ciBjcm9zcy1jb21waWxhdGlvbiBmaXhlcworZG9fY29uZmlndXJlX3ByZXBlbmQoKSB7CisgICAgcm0gLWYgJHtTfS9idWlsZC9tNC92YXBpZ2VuLm00Cit9CisKKyMgU2VjcmV0LTE6IHBva3kvYnVpbGQtbWlwczY0L3RtcC93b3JrL21pcHM2NC1wb2t5LWxpbnV4L2xpYmdwZy1lcnJvci8xLjE5LXIwL2xpYmdwZy1lcnJvci0xLjE5L3NyYy9wb3NpeC1sb2NrLmM6MTE5OiBnZXRfbG9ja19vYmplY3Q6IEFzc2VydGlvbiBgISJzaXplb2YgbG9jayBvYmoiJyBmYWlsZWQuCisjIHFlbXU6IHVuY2F1Z2h0IHRhcmdldCBzaWduYWwgNiAoQWJvcnRlZCkgLSBjb3JlIGR1bXBlZAorRVhUUkFfT0VDT05GX2FwcGVuZF9taXBzNjQgPSAiIC0tZGlzYWJsZS1pbnRyb3NwZWN0aW9uIC0tZGlzYWJsZS1ndGstZG9jIgorCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdub21lL2xpYnduY2svbGlid25jazNfMy4xNC4xLmJiIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1nbm9tZS9saWJ3bmNrL2xpYnduY2szXzMuMTQuMS5iYgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDk1ODk0Yi4uMDAwMDAwMAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdub21lL2xpYnduY2svbGlid25jazNfMy4xNC4xLmJiCisrKyAvZGV2L251bGwKQEAgLTEsMjAgKzAsMCBAQAotU1VNTUFSWSA9ICJXaW5kb3cgbmF2aWdhdGlvbiBjb25zdHJ1Y3Rpb24gdG9vbGtpdCIKLUxJQ0VOU0UgPSAiTEdQTHYyIgotTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9NWYzMGYwNzE2ZGZkZDBkOTFlYjQzOWViZWM1MjJlYzIiCi0KLUJQTiA9ICJsaWJ3bmNrIgotCi1TRUNUSU9OID0gIngxMS9saWJzIgotREVQRU5EUyA9ICJndGsrMyBnZGstcGl4YnVmLW5hdGl2ZSBsaWJ4cmVzIgotCi1QQUNLQUdFQ09ORklHID8/PSAic3RhcnR1cC1ub3RpZmljYXRpb24iCi1QQUNLQUdFQ09ORklHW3N0YXJ0dXAtbm90aWZpY2F0aW9uXSA9ICItLWVuYWJsZS1zdGFydHVwLW5vdGlmaWNhdGlvbiwtLWRpc2FibGUtc3RhcnR1cC1ub3RpZmljYXRpb24sc3RhcnR1cC1ub3RpZmljYXRpb24iCi0KLWluaGVyaXQgZ25vbWViYXNlIGdvYmplY3QtaW50cm9zcGVjdGlvbgotU1JDX1VSSVthcmNoaXZlLm1kNXN1bV0gPSAiZDk2YzBiNzRjNGRjNWZkYWU3NTg5NjQwOTg2MDNjOTAiCi1TUkNfVVJJW2FyY2hpdmUuc2hhMjU2c3VtXSA9ICJiYjY0M2M5YzQyM2M4YWE3OWM1OTk3M2NlMjdjZTkxZDNiMTgwZDFlOTkwNzkwMjI3OGZiNzkzOTFmNTJiZWZhIgotCi1pbmhlcml0IGRpc3Ryb19mZWF0dXJlc19jaGVjawotIyBsaWJ4cmVzIG1lYW5zIHgxMSBvbmx5Ci1SRVFVSVJFRF9ESVNUUk9fRkVBVFVSRVMgPSAieDExIgotCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdub21lL2xpYnduY2svbGlid25jazNfMy4yMC4xLmJiIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1nbm9tZS9saWJ3bmNrL2xpYnduY2szXzMuMjAuMS5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mZDRlZjY5Ci0tLSAvZGV2L251bGwKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1nbm9tZS9saWJ3bmNrL2xpYnduY2szXzMuMjAuMS5iYgpAQCAtMCwwICsxLDE5IEBACitTVU1NQVJZID0gIldpbmRvdyBuYXZpZ2F0aW9uIGNvbnN0cnVjdGlvbiB0b29sa2l0IgorTElDRU5TRSA9ICJMR1BMdjIiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT01ZjMwZjA3MTZkZmRkMGQ5MWViNDM5ZWJlYzUyMmVjMiIKKworQlBOID0gImxpYnduY2siCisKK1NFQ1RJT04gPSAieDExL2xpYnMiCitERVBFTkRTID0gImludGx0b29sLW5hdGl2ZSBndGsrMyBnZGstcGl4YnVmLW5hdGl2ZSBsaWJ4cmVzIgorCitQQUNLQUdFQ09ORklHID8/PSAic3RhcnR1cC1ub3RpZmljYXRpb24iCitQQUNLQUdFQ09ORklHW3N0YXJ0dXAtbm90aWZpY2F0aW9uXSA9ICItLWVuYWJsZS1zdGFydHVwLW5vdGlmaWNhdGlvbiwtLWRpc2FibGUtc3RhcnR1cC1ub3RpZmljYXRpb24sc3RhcnR1cC1ub3RpZmljYXRpb24iCisKK2luaGVyaXQgZ25vbWViYXNlIGdvYmplY3QtaW50cm9zcGVjdGlvbiBndGstZG9jCitTUkNfVVJJW2FyY2hpdmUubWQ1c3VtXSA9ICI0ODc5MzhkNjVkNGJmYWUxZjI1MDEwNTJiMWJkNzQ5MiIKK1NSQ19VUklbYXJjaGl2ZS5zaGEyNTZzdW1dID0gIjFjYjAzNzE2YmM0NzcwNThkZmRmM2ViZmE0ZjUzNGRlM2IxM2IxYWEwNjdmY2QwNjRkMGI3ODEzMjkxY2JhNzIiCisKK2luaGVyaXQgZGlzdHJvX2ZlYXR1cmVzX2NoZWNrCisjIGxpYnhyZXMgbWVhbnMgeDExIG9ubHkKK1JFUVVJUkVEX0RJU1RST19GRUFUVVJFUyA9ICJ4MTEiCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL2J1aWxkZXIvZmlsZXMvYnVpbGRlcl9zZXNzaW9uLnNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy9idWlsZGVyL2ZpbGVzL2J1aWxkZXJfc2Vzc2lvbi5zaAppbmRleCAwMDFhMDMzLi40ZTUwOWE3IDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL2J1aWxkZXIvZmlsZXMvYnVpbGRlcl9zZXNzaW9uLnNoCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvYnVpbGRlci9maWxlcy9idWlsZGVyX3Nlc3Npb24uc2gKQEAgLTIzLDggKzIzLDggQEAKICAgICB4ZGctbWltZSBkZWZhdWx0IGVwaXBoYW55LmRlc2t0b3AgeC1zY2hlbWUtaGFuZGxlci9odHRwcwogICAgIHhkZy1taW1lIGRlZmF1bHQgZXBpcGhhbnkuZGVza3RvcCB0ZXh0L2h0bWwKIAotICAgICNyZWdpc3RlciB0ZXh0IGZpbGVzIHdpdGggbGVhZnBhZCB0ZXh0IGVkaXRvcgotICAgIHhkZy1taW1lIGRlZmF1bHQgbGVhZnBhZC5kZXNrdG9wIHRleHQvcGxhaW4KKyAgICAjcmVnaXN0ZXIgdGV4dCBmaWxlcyB3aXRoIGwzYWZwYWQgdGV4dCBlZGl0b3IKKyAgICB4ZGctbWltZSBkZWZhdWx0IGwzYWZwYWQuZGVza3RvcCB0ZXh0L3BsYWluCiBmaQogCiBjZCAvaG9tZS9idWlsZGVyL3Bva3kKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvY2Fpcm8vY2Fpcm8uaW5jIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy9jYWlyby9jYWlyby5pbmMKaW5kZXggYzdlNjg2ZC4uYzRiNmYzMiAxMDA2NDQKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy9jYWlyby9jYWlyby5pbmMKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy9jYWlyby9jYWlyby5pbmMKQEAgLTM2LDcgKzM2LDcgQEAKICAgICAgICAgICAgICAgICAgLS1lbmFibGUtdGVlIFwKICAgICAgICAgICAgICAgICAiCiAKLWluaGVyaXQgYXV0b3Rvb2xzIHBrZ2NvbmZpZworaW5oZXJpdCBhdXRvdG9vbHMgcGtnY29uZmlnIHVwc3RyZWFtLXZlcnNpb24taXMtZXZlbiBndGstZG9jCiAKICMgV2UgZG9uJ3QgZGVwZW5kIG9uIGJpbnV0aWxzIHNvIHdlIG5lZWQgdG8gZGlzYWJsZSB0aGlzCiBleHBvcnQgYWNfY3ZfbGliX2JmZF9iZmRfb3BlbnI9Im5vIgpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy9jYWlyby9jYWlyb18xLjE0LjYuYmIgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL2NhaXJvL2NhaXJvXzEuMTQuNi5iYgppbmRleCAyMGI0NjY4Li5kMmMxZTEyIDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL2NhaXJvL2NhaXJvXzEuMTQuNi5iYgorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL2NhaXJvL2NhaXJvXzEuMTQuNi5iYgpAQCAtNyw4ICs3LDYgQEAKIFNSQ19VUklbbWQ1c3VtXSA9ICIyM2EwYjJmMDIzNTQzMWQzNTIzOGRmMWQzYTUxN2ZkYiIKIFNSQ19VUklbc2hhMjU2c3VtXSA9ICI2MTNjYjM4NDQ3Yjc2YTkzZmY3MjM1ZTE3YWNkNTVhNzhiNTJlYTg0YTlkZjEyOGMzZjIyNTdmOGVhYTdiMjUyIgogCi1VUFNUUkVBTV9DSEVDS19SRUdFWCA9ICJjYWlyby0oP1A8cHZlcj5cZCsoXC5cZCspKylcLnRhciIKLQogUEFDS0FHRVMgPSsgImNhaXJvLWdvYmplY3QgY2Fpcm8tc2NyaXB0LWludGVycHJldGVyIGNhaXJvLXBlcmYtdXRpbHMiCiAKIFNVTU1BUllfJHtQTn0gPSAiVGhlIENhaXJvIDJEIHZlY3RvciBncmFwaGljcyBsaWJyYXJ5IgpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy9jYW50YXJlbGwtZm9udHMvY2FudGFyZWxsLWZvbnRzX2dpdC5iYiBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvY2FudGFyZWxsLWZvbnRzL2NhbnRhcmVsbC1mb250c19naXQuYmIKaW5kZXggMTI3ZjBhMS4uZTNlNGNkZSAxMDA2NDQKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy9jYW50YXJlbGwtZm9udHMvY2FudGFyZWxsLWZvbnRzX2dpdC5iYgorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL2NhbnRhcmVsbC1mb250cy9jYW50YXJlbGwtZm9udHNfZ2l0LmJiCkBAIC0xMCwxMCArMTAsMTEgQEAKIExJQ0VOU0UgPSAiT0ZMLTEuMSIKIExJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PWRmOTFlM2ZmY2FiOGNmYjk3MmE2NmJmMTEyNTUxODhkIgogCi1QViA9ICIwLjAuMjErZ2l0JHtTUkNQVn0iCitQViA9ICIwLjAuMjQiCiAKLVNSQ1JFViA9ICI2MTFjMTY5ZGY1Mjg3YzA1OWQ2M2IwYzhmMDU3MDY0N2M3NWM5MTg5IgorU1JDUkVWID0gIjA3YjZlYTJjYmJlYmZjMzYwYWE0NjY4NjEyYTM3NmJlNWUyMTRlYWEiCiBTUkNfVVJJID0gImdpdDovL2dpdC5nbm9tZS5vcmcvY2FudGFyZWxsLWZvbnRzO3Byb3RvY29sPWdpdDticmFuY2g9bWFzdGVyIgorVVBTVFJFQU1fQ0hFQ0tfR0lUVEFHUkVHRVggPSAiKD9QPHB2ZXI+KD8hMFwuMTMpKD8hMFwuMTBcLjEpXGQrXC5cZCsoXC5cZCspKykiCiAKIFMgPSAiJHtXT1JLRElSfS9naXQiCiAKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvY2x1dHRlci9jbHV0dGVyLTEuMC8wMDAxLVJlbW92ZS1jbHV0dGVyLnR5cGVzLWFzLWl0LWlzLWJ1aWxkLWNvbmZpZ3VyYXRpb24tc3AucGF0Y2ggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL2NsdXR0ZXIvY2x1dHRlci0xLjAvMDAwMS1SZW1vdmUtY2x1dHRlci50eXBlcy1hcy1pdC1pcy1idWlsZC1jb25maWd1cmF0aW9uLXNwLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdiM2MxOTgKLS0tIC9kZXYvbnVsbAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL2NsdXR0ZXIvY2x1dHRlci0xLjAvMDAwMS1SZW1vdmUtY2x1dHRlci50eXBlcy1hcy1pdC1pcy1idWlsZC1jb25maWd1cmF0aW9uLXNwLnBhdGNoCkBAIC0wLDAgKzEsMTQzIEBACitGcm9tIDNhMDQwNGRmYmM2NWM2YTg2NGUwMWQxMjAwYTQ4MDc0ZTE5ZDVkZWYgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBBbGV4YW5kZXIgS2FuYXZpbiA8YWxleC5rYW5hdmluQGdtYWlsLmNvbT4KK0RhdGU6IEZyaSwgMiBTZXAgMjAxNiAxNDoyODozOCArMDMwMAorU3ViamVjdDogW1BBVENIXSBSZW1vdmUgY2x1dHRlci50eXBlcyBhcyBpdCBpcyBidWlsZCBjb25maWd1cmF0aW9uLXNwZWNpZmljLgorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKK1NpZ25lZC1vZmYtYnk6IEFsZXhhbmRlciBLYW5hdmluIDxhbGV4LmthbmF2aW5AZ21haWwuY29tPgorLS0tCisgZG9jL3JlZmVyZW5jZS9jbHV0dGVyLnR5cGVzIHwgMTIyIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgMSBmaWxlIGNoYW5nZWQsIDEyMiBkZWxldGlvbnMoLSkKKyBkZWxldGUgbW9kZSAxMDA2NDQgZG9jL3JlZmVyZW5jZS9jbHV0dGVyLnR5cGVzCisKK2RpZmYgLS1naXQgYS9kb2MvcmVmZXJlbmNlL2NsdXR0ZXIudHlwZXMgYi9kb2MvcmVmZXJlbmNlL2NsdXR0ZXIudHlwZXMKK2RlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAoraW5kZXggMDAzN2FjYy4uMDAwMDAwMAorLS0tIGEvZG9jL3JlZmVyZW5jZS9jbHV0dGVyLnR5cGVzCisrKysgL2Rldi9udWxsCitAQCAtMSwxMjIgKzAsMCBAQAorLWNhbGx5X2FjdG9yX2dldF90eXBlCistY2FsbHlfY2xvbmVfZ2V0X3R5cGUKKy1jYWxseV9ncm91cF9nZXRfdHlwZQorLWNhbGx5X3JlY3RhbmdsZV9nZXRfdHlwZQorLWNhbGx5X3Jvb3RfZ2V0X3R5cGUKKy1jYWxseV9zdGFnZV9nZXRfdHlwZQorLWNhbGx5X3RleHRfZ2V0X3R5cGUKKy1jYWxseV90ZXh0dXJlX2dldF90eXBlCistY2FsbHlfdXRpbF9nZXRfdHlwZQorLWNsdXR0ZXJfYWN0aW9uX2dldF90eXBlCistY2x1dHRlcl9hY3Rvcl9ib3hfZ2V0X3R5cGUKKy1jbHV0dGVyX2FjdG9yX2dldF90eXBlCistY2x1dHRlcl9hY3Rvcl9tZXRhX2dldF90eXBlCistY2x1dHRlcl9hbGlnbl9jb25zdHJhaW50X2dldF90eXBlCistY2x1dHRlcl9hbHBoYV9nZXRfdHlwZQorLWNsdXR0ZXJfYW5pbWF0YWJsZV9nZXRfdHlwZQorLWNsdXR0ZXJfYW5pbWF0aW9uX2dldF90eXBlCistY2x1dHRlcl9hbmltYXRvcl9nZXRfdHlwZQorLWNsdXR0ZXJfYW5pbWF0b3Jfa2V5X2dldF90eXBlCistY2x1dHRlcl9iYWNrZW5kX2dldF90eXBlCistY2x1dHRlcl9iZWhhdmlvdXJfZGVwdGhfZ2V0X3R5cGUKKy1jbHV0dGVyX2JlaGF2aW91cl9lbGxpcHNlX2dldF90eXBlCistY2x1dHRlcl9iZWhhdmlvdXJfZ2V0X3R5cGUKKy1jbHV0dGVyX2JlaGF2aW91cl9vcGFjaXR5X2dldF90eXBlCistY2x1dHRlcl9iZWhhdmlvdXJfcGF0aF9nZXRfdHlwZQorLWNsdXR0ZXJfYmVoYXZpb3VyX3JvdGF0ZV9nZXRfdHlwZQorLWNsdXR0ZXJfYmVoYXZpb3VyX3NjYWxlX2dldF90eXBlCistY2x1dHRlcl9iaW5fbGF5b3V0X2dldF90eXBlCistY2x1dHRlcl9iaW5kX2NvbnN0cmFpbnRfZ2V0X3R5cGUKKy1jbHV0dGVyX2JpbmRpbmdfcG9vbF9nZXRfdHlwZQorLWNsdXR0ZXJfYmx1cl9lZmZlY3RfZ2V0X3R5cGUKKy1jbHV0dGVyX2JveF9nZXRfdHlwZQorLWNsdXR0ZXJfYm94X2xheW91dF9nZXRfdHlwZQorLWNsdXR0ZXJfYnJpZ2h0bmVzc19jb250cmFzdF9lZmZlY3RfZ2V0X3R5cGUKKy1jbHV0dGVyX2NhaXJvX3RleHR1cmVfZ2V0X3R5cGUKKy1jbHV0dGVyX2NhbnZhc19nZXRfdHlwZQorLWNsdXR0ZXJfY2hpbGRfbWV0YV9nZXRfdHlwZQorLWNsdXR0ZXJfY2xpY2tfYWN0aW9uX2dldF90eXBlCistY2x1dHRlcl9jbGlwX25vZGVfZ2V0X3R5cGUKKy1jbHV0dGVyX2Nsb25lX2dldF90eXBlCistY2x1dHRlcl9jb2xvcl9nZXRfdHlwZQorLWNsdXR0ZXJfY29sb3Jfbm9kZV9nZXRfdHlwZQorLWNsdXR0ZXJfY29sb3JpemVfZWZmZWN0X2dldF90eXBlCistY2x1dHRlcl9jb25zdHJhaW50X2dldF90eXBlCistY2x1dHRlcl9jb250YWluZXJfZ2V0X3R5cGUKKy1jbHV0dGVyX2NvbnRlbnRfZ2V0X3R5cGUKKy1jbHV0dGVyX2RlZm9ybV9lZmZlY3RfZ2V0X3R5cGUKKy1jbHV0dGVyX2Rlc2F0dXJhdGVfZWZmZWN0X2dldF90eXBlCistY2x1dHRlcl9kZXZpY2VfbWFuYWdlcl9nZXRfdHlwZQorLWNsdXR0ZXJfZHJhZ19hY3Rpb25fZ2V0X3R5cGUKKy1jbHV0dGVyX2Ryb3BfYWN0aW9uX2dldF90eXBlCistY2x1dHRlcl9lZmZlY3RfZ2V0X3R5cGUKKy1jbHV0dGVyX2V2ZW50X2dldF90eXBlCistY2x1dHRlcl9ldmVudF9zZXF1ZW5jZV9nZXRfdHlwZQorLWNsdXR0ZXJfZml4ZWRfbGF5b3V0X2dldF90eXBlCistY2x1dHRlcl9mbG93X2xheW91dF9nZXRfdHlwZQorLWNsdXR0ZXJfZm9nX2dldF90eXBlCistY2x1dHRlcl9nZW9tZXRyeV9nZXRfdHlwZQorLWNsdXR0ZXJfZ2VzdHVyZV9hY3Rpb25fZ2V0X3R5cGUKKy1jbHV0dGVyX2dseF90ZXh0dXJlX3BpeG1hcF9nZXRfdHlwZQorLWNsdXR0ZXJfZ3JpZF9sYXlvdXRfZ2V0X3R5cGUKKy1jbHV0dGVyX2dyb3VwX2dldF90eXBlCistY2x1dHRlcl9pbWFnZV9nZXRfdHlwZQorLWNsdXR0ZXJfaW5wdXRfZGV2aWNlX2dldF90eXBlCistY2x1dHRlcl9pbnRlcnZhbF9nZXRfdHlwZQorLWNsdXR0ZXJfa2V5ZnJhbWVfdHJhbnNpdGlvbl9nZXRfdHlwZQorLWNsdXR0ZXJfa25vdF9nZXRfdHlwZQorLWNsdXR0ZXJfbGF5b3V0X21hbmFnZXJfZ2V0X3R5cGUKKy1jbHV0dGVyX2xheW91dF9tZXRhX2dldF90eXBlCistY2x1dHRlcl9saXN0X21vZGVsX2dldF90eXBlCistY2x1dHRlcl9tYXJnaW5fZ2V0X3R5cGUKKy1jbHV0dGVyX21lZGlhX2dldF90eXBlCistY2x1dHRlcl9tb2RlbF9nZXRfdHlwZQorLWNsdXR0ZXJfbW9kZWxfaXRlcl9nZXRfdHlwZQorLWNsdXR0ZXJfb2Zmc2NyZWVuX2VmZmVjdF9nZXRfdHlwZQorLWNsdXR0ZXJfcGFnZV90dXJuX2VmZmVjdF9nZXRfdHlwZQorLWNsdXR0ZXJfcGFpbnRfbm9kZV9nZXRfdHlwZQorLWNsdXR0ZXJfcGFpbnRfdm9sdW1lX2dldF90eXBlCistY2x1dHRlcl9wYW5fYWN0aW9uX2dldF90eXBlCistY2x1dHRlcl9wYXJhbV9jb2xvcl9nZXRfdHlwZQorLWNsdXR0ZXJfcGFyYW1fZml4ZWRfZ2V0X3R5cGUKKy1jbHV0dGVyX3BhcmFtX3VuaXRzX2dldF90eXBlCistY2x1dHRlcl9wYXRoX2NvbnN0cmFpbnRfZ2V0X3R5cGUKKy1jbHV0dGVyX3BhdGhfZ2V0X3R5cGUKKy1jbHV0dGVyX3BhdGhfbm9kZV9nZXRfdHlwZQorLWNsdXR0ZXJfcGVyc3BlY3RpdmVfZ2V0X3R5cGUKKy1jbHV0dGVyX3BpcGVsaW5lX25vZGVfZ2V0X3R5cGUKKy1jbHV0dGVyX3BvaW50X2dldF90eXBlCistY2x1dHRlcl9wcm9wZXJ0eV90cmFuc2l0aW9uX2dldF90eXBlCistY2x1dHRlcl9yZWN0X2dldF90eXBlCistY2x1dHRlcl9yZWN0YW5nbGVfZ2V0X3R5cGUKKy1jbHV0dGVyX3JvdGF0ZV9hY3Rpb25fZ2V0X3R5cGUKKy1jbHV0dGVyX3Njb3JlX2dldF90eXBlCistY2x1dHRlcl9zY3JpcHRfZ2V0X3R5cGUKKy1jbHV0dGVyX3NjcmlwdGFibGVfZ2V0X3R5cGUKKy1jbHV0dGVyX3Njcm9sbF9hY3Rvcl9nZXRfdHlwZQorLWNsdXR0ZXJfc2V0dGluZ3NfZ2V0X3R5cGUKKy1jbHV0dGVyX3NoYWRlcl9lZmZlY3RfZ2V0X3R5cGUKKy1jbHV0dGVyX3NoYWRlcl9mbG9hdF9nZXRfdHlwZQorLWNsdXR0ZXJfc2hhZGVyX2dldF90eXBlCistY2x1dHRlcl9zaGFkZXJfaW50X2dldF90eXBlCistY2x1dHRlcl9zaGFkZXJfbWF0cml4X2dldF90eXBlCistY2x1dHRlcl9zaXplX2dldF90eXBlCistY2x1dHRlcl9zbmFwX2NvbnN0cmFpbnRfZ2V0X3R5cGUKKy1jbHV0dGVyX3N0YWdlX2dldF90eXBlCistY2x1dHRlcl9zdGFnZV9tYW5hZ2VyX2dldF90eXBlCistY2x1dHRlcl9zdGF0ZV9nZXRfdHlwZQorLWNsdXR0ZXJfc3RhdGVfa2V5X2dldF90eXBlCistY2x1dHRlcl9zd2lwZV9hY3Rpb25fZ2V0X3R5cGUKKy1jbHV0dGVyX3RhYmxlX2xheW91dF9nZXRfdHlwZQorLWNsdXR0ZXJfdGFwX2FjdGlvbl9nZXRfdHlwZQorLWNsdXR0ZXJfdGV4dF9idWZmZXJfZ2V0X3R5cGUKKy1jbHV0dGVyX3RleHRfZ2V0X3R5cGUKKy1jbHV0dGVyX3RleHRfbm9kZV9nZXRfdHlwZQorLWNsdXR0ZXJfdGV4dHVyZV9nZXRfdHlwZQorLWNsdXR0ZXJfdGV4dHVyZV9ub2RlX2dldF90eXBlCistY2x1dHRlcl90aW1lbGluZV9nZXRfdHlwZQorLWNsdXR0ZXJfdHJhbnNpdGlvbl9nZXRfdHlwZQorLWNsdXR0ZXJfdHJhbnNpdGlvbl9ncm91cF9nZXRfdHlwZQorLWNsdXR0ZXJfdW5pdHNfZ2V0X3R5cGUKKy1jbHV0dGVyX3ZlcnRleF9nZXRfdHlwZQorLWNsdXR0ZXJfem9vbV9hY3Rpb25fZ2V0X3R5cGUKKy0tIAorMi45LjMKKwpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy9jbHV0dGVyL2NsdXR0ZXItMS4wLzAwMDEtYnVpbGQtVXNlLUFDX0NPTVBJTEVfSUZFTFNFLnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy9jbHV0dGVyL2NsdXR0ZXItMS4wLzAwMDEtYnVpbGQtVXNlLUFDX0NPTVBJTEVfSUZFTFNFLnBhdGNoCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjNGVkZmYzLi4wMDAwMDAwCi0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvY2x1dHRlci9jbHV0dGVyLTEuMC8wMDAxLWJ1aWxkLVVzZS1BQ19DT01QSUxFX0lGRUxTRS5wYXRjaAorKysgL2Rldi9udWxsCkBAIC0xLDEwNSArMCwwIEBACi1Gcm9tIDQ4M2E0YmIwMGU3ZGQyZjE0ZDg2ZTE2N2M4MDEzYzg2Mzg3MjNjMzMgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCi1Gcm9tOiBFbW1hbnVlbGUgQmFzc2kgPGViYXNzaUBnbm9tZS5vcmc+Ci1EYXRlOiBUaHUsIDE4IEZlYiAyMDE2IDE3OjE5OjA5ICswMDAwCi1TdWJqZWN0OiBbUEFUQ0hdIGJ1aWxkOiBVc2UgQUNfQ09NUElMRV9JRkVMU0UKLQotSW5zdGVhZCBvZiBBQ19UUllfQ09NUElMRSwgd2hpY2ggaGFzIGJlZW4gZGVwcmVjYXRlZCBieSBuZXdlciBhdXRvY29uZi4KLS0tLQotVXBzdHJlYW0tU3RhdHVzOiBCYWNrcG9ydAotU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KLQotIGNvbmZpZ3VyZS5hYyB8IDY2ICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotIDEgZmlsZSBjaGFuZ2VkLCAzMyBpbnNlcnRpb25zKCspLCAzMyBkZWxldGlvbnMoLSkKLQotZGlmZiAtLWdpdCBhL2NvbmZpZ3VyZS5hYyBiL2NvbmZpZ3VyZS5hYwotaW5kZXggNGQ3MmUwYy4uOGNhM2Y5NCAxMDA2NDQKLS0tLSBhL2NvbmZpZ3VyZS5hYwotKysrIGIvY29uZmlndXJlLmFjCi1AQCAtMzQ4LDI0ICszNDgsMjUgQEAgQVNfSUYoW3Rlc3QgIngkZW5hYmxlX3dheWxhbmQiICE9IHhub10sCi0gICAgICAgICAjIFdlIG5lZWQgdG8gbWFudWFsbHkgY2hlY2sgZm9yIFdheWxhbmQgc3VwcG9ydCBpbiBDb2dsIGJlY2F1c2UKLSAgICAgICAgICMgdGhlIHdpbmRvd2luZyBzeXN0ZW1zIGFyZSBub3QgZXhwb3NlZCBpbiB0aGUgcGtnLWNvbmZpZyBmaWxlCi0gICAgICAgICBzYXZlZF9DRkxBR1M9IiR7Q0ZMQUdTfSIKLS0gICAgICAgIENGTEFHUz0iYCRQS0dfQ09ORklHIC0tY2ZsYWdzICRDTFVUVEVSX0JBU0VfUENfRklMRVNgIgotKyAgICAgICAgQ0ZMQUdTPSJgJFBLR19DT05GSUcgLS1jZmxhZ3MgY29nbC0xLjBgIgotIAotICAgICAgICAgQUNfTVNHX0NIRUNLSU5HKFtmb3IgV2F5bGFuZCBDb2dsIGJhY2tlbmRdKQotLSAgICAgICAgQUNfVFJZX0NPTVBJTEUoWyNpbmNsdWRlIDxjb2dsL2NvZ2wuaD5dLAotLSAgICAgICAgICAgICAgICAgICAgICAgWwotLSAgICAgICAgICAgICAgICAgICAgICAgICAjaWZuZGVmIENPR0xfSEFTX0VHTF9QTEFURk9STV9XQVlMQU5EX1NVUFBPUlQKLS0gICAgICAgICAgICAgICAgICAgICAgICAgI2Vycm9yICJObyBXYXlsYW5kIHN1cHBvcnQgaW4gQ29nbCIKLS0gICAgICAgICAgICAgICAgICAgICAgICAgI2VuZGlmCi0tICAgICAgICAgICAgICAgICAgICAgICAgIGludCBtYWluICh2b2lkKSB7IHJldHVybiAwOyB9Ci0tICAgICAgICAgICAgICAgICAgICAgICBdLAotLSAgICAgICAgICAgICAgICAgICAgICAgWwotLSAgICAgICAgICAgICAgICAgICAgICAgICBBQ19NU0dfUkVTVUxUKHllcykKLS0gICAgICAgICAgICAgICAgICAgICAgICAgaGF2ZV9jb2dsX3dheWxhbmQ9eWVzCi0tICAgICAgICAgICAgICAgICAgICAgICBdLAotLSAgICAgICAgICAgICAgICAgICAgICAgWwotLSAgICAgICAgICAgICAgICAgICAgICAgICBBQ19NU0dfUkVTVUxUKG5vKQotLSAgICAgICAgICAgICAgICAgICAgICAgICBoYXZlX2NvZ2xfd2F5bGFuZD1ubwotLSAgICAgICAgICAgICAgICAgICAgICAgXSkKLSsKLSsgICAgICAgIEFDX0NPTVBJTEVfSUZFTFNFKFtBQ19MQU5HX1BST0dSQU0oW1sKLSsjaW5jbHVkZSA8Y29nbC9jb2dsLmg+Ci0rXV0sCi0rW1sKLSsjaWZuZGVmIENPR0xfSEFTX0VHTF9QTEFURk9STV9XQVlMQU5EX1NVUFBPUlQKLSsjZXJyb3IgQ29nbCBjb21waWxlZCB3aXRob3V0IFdheWxhbmQgc3VwcG9ydAotKyNlbmRpZgotK11dKV0sIFsKLSsgICAgICAgICAgQUNfTVNHX1JFU1VMVCh5ZXMpCi0rICAgICAgICAgIGhhdmVfY29nbF93YXlsYW5kPXllcwotKyAgICAgICAgXSwgWwotKyAgICAgICAgICBBQ19NU0dfUkVTVUxUKG5vKQotKyAgICAgICAgICBoYXZlX2NvZ2xfd2F5bGFuZD1ubwotKyAgICAgICAgXSkKLSsKLSAgICAgICAgIENGTEFHUz0iJHtzYXZlZF9DRkxBR1N9IgotICAgICAgICAgQVNfSUYoW3Rlc3QgIngkaGF2ZV9jb2dsX3dheWxhbmQiID0geHllc10sCi0gICAgICAgICAgICAgICBbCi1AQCAtNDk5LDI2ICs1MDAsMjUgQEAgQVNfSUYoW3Rlc3QgIngkZW5hYmxlX21pciIgPSAieHllcyJdLAotICAgICAgICAgIyBXZSBuZWVkIHRvIG1hbnVhbGx5IGNoZWNrIGZvciBNaXIgc3VwcG9ydCBpbiBDb2dsIGJlY2F1c2UKLSAgICAgICAgICMgdGhlIHdpbmRvd2luZyBzeXN0ZW1zIGFyZSBub3QgZXhwb3NlZCBpbiB0aGUgcGtnLWNvbmZpZyBmaWxlCi0gICAgICAgICBzYXZlZF9DRkxBR1M9IiR7Q0ZMQUdTfSIKLS0gICAgICAgIENGTEFHUz0iYCRQS0dfQ09ORklHIC0tY2ZsYWdzICRDTFVUVEVSX0JBU0VfUENfRklMRVNgIgotKyAgICAgICAgQ0ZMQUdTPSJgJFBLR19DT05GSUcgLS1jZmxhZ3MgY29nbC0xLjBgIgotIAotICAgICAgICAgQUNfTVNHX0NIRUNLSU5HKFtmb3IgTWlyIENvZ2wgYmFja2VuZF0pCi0tICAgICAgICBBQ19UUllfQ09NUElMRShbI2luY2x1ZGUgPGNvZ2wvY29nbC5oPl0sCi0tICAgICAgICAgICAgICAgICAgICAgICBbCi0tICAgICAgICAgICAgICAgICAgICAgICAgI2lmbmRlZiBDT0dMX0hBU19FR0xfUExBVEZPUk1fTUlSX1NVUFBPUlQKLS0gICAgICAgICAgICAgICAgICAgICAgICAjZXJyb3IgIk5vIE1pciBzdXBwb3J0IGluIENvZ2wiCi0tICAgICAgICAgICAgICAgICAgICAgICAgI2VuZGlmCi0tICAgICAgICAgICAgICAgICAgICAgICAgaW50IG1haW4gKHZvaWQpIHsgcmV0dXJuIDA7IH0KLS0gICAgICAgICAgICAgICAgICAgICAgIF0sCi0tICAgICAgICAgICAgICAgICAgICAgICBbCi0tICAgICAgICAgICAgICAgICAgICAgICAgIEFDX01TR19SRVNVTFQoeWVzKQotLSAgICAgICAgICAgICAgICAgICAgICAgICBoYXZlX2NvZ2xfbWlyPXllcwotLSAgICAgICAgICAgICAgICAgICAgICAgXSwKLS0gICAgICAgICAgICAgICAgICAgICAgIFsKLS0gICAgICAgICAgICAgICAgICAgICAgICAgQUNfTVNHX1JFU1VMVChubykKLS0gICAgICAgICAgICAgICAgICAgICAgICAgaGF2ZV9jb2dsX21pcj1ubwotLSAgICAgICAgICAgICAgICAgICAgICAgXSkKLSAKLS0gICAgICAgIENGTEFHUz0iJHtzYXZlZF9DRkxBR1N9IgotKyAgICAgICAgQUNfQ09NUElMRV9JRkVMU0UoW0FDX0xBTkdfUFJPR1JBTShbWwotKyNpbmNsdWRlIDxjb2dsL2NvZ2wuaD4KLStdXSwKLStbWwotKyNpZm5kZWYgQ09HTF9IQVNfRUdMX1BMQVRGT1JNX01JUl9TVVBQT1JUCi0rI2Vycm9yIENvZ2wgY29tcGlsZWQgd2l0aG91dCBNaXIgc3VwcG9ydAotKyNlbmRpZgotK11dKV0sIFsKLSsgICAgICAgICAgQUNfTVNHX1JFU1VMVCh5ZXMpCi0rICAgICAgICAgIGhhdmVfY29nbF9taXI9eWVzCi0rICAgICAgICBdLCBbCi0rICAgICAgICAgIEFDX01TR19SRVNVTFQobm8pCi0rICAgICAgICAgIGhhdmVfY29nbF9taXI9bm8KLSsgICAgICAgIF0pCi0rCi0gICAgICAgICBBU19JRihbdGVzdCAieCRoYXZlX2NvZ2xfbWlyIiA9IHhub10sIFtBQ19NU0dfRVJST1IoIioqKiBDb2dsIGlzIG1pc3NpbmcgTWlyIHN1cHBvcnQuIildKQotIAotICAgICAgICAgUEtHX0NIRUNLX0VYSVNUUyhbbWlyY2xpZW50XSwKLS0tIAotMS45LjEKLQpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy9jbHV0dGVyL2NsdXR0ZXItMS4wXzEuMjQuMi5iYiBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvY2x1dHRlci9jbHV0dGVyLTEuMF8xLjI0LjIuYmIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGM1M2IzZTcuLjAwMDAwMDAKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy9jbHV0dGVyL2NsdXR0ZXItMS4wXzEuMjQuMi5iYgorKysgL2Rldi9udWxsCkBAIC0xLDEwICswLDAgQEAKLXJlcXVpcmUgY2x1dHRlci0xLjAuaW5jCi0KLUxJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PTRmYmQ2NTM4MGNkZDI1NTk1MTA3OTAwOGIzNjQ1MTZjIgotCi1TUkNfVVJJW2FyY2hpdmUubWQ1c3VtXSA9ICIzYjk4ZTFiMzM3MTk5ODJhNTczNmFlNDJjYmY3MTgzZSIKLVNSQ19VUklbYXJjaGl2ZS5zaGEyNTZzdW1dID0gIjk2MzFjOThjYjRiY2JmZWMxNWUxYmJlOWVhYTZlZWYwZjEyNzIwMTU1MmZjZTQwZDdkMjhmMjEzMzgwM2NkNjMiCi1TUkNfVVJJICs9ICJmaWxlOi8vaW5zdGFsbC1leGFtcGxlcy5wYXRjaCBcCi0gICAgICAgICAgICBmaWxlOi8vcnVuLWluc3RhbGxlZC10ZXN0cy13aXRoLXRhcC1vdXRwdXQucGF0Y2ggXAotICAgICAgICAgICAgZmlsZTovLzAwMDEtYnVpbGQtVXNlLUFDX0NPTVBJTEVfSUZFTFNFLnBhdGNoIFwKLSAgICAgICAgICAgIGZpbGU6Ly9ydW4tcHRlc3QiCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL2NsdXR0ZXIvY2x1dHRlci0xLjBfMS4yNi4wLmJiIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy9jbHV0dGVyL2NsdXR0ZXItMS4wXzEuMjYuMC5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kZmExY2ZlCi0tLSAvZGV2L251bGwKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy9jbHV0dGVyL2NsdXR0ZXItMS4wXzEuMjYuMC5iYgpAQCAtMCwwICsxLDEwIEBACityZXF1aXJlIGNsdXR0ZXItMS4wLmluYworCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT00ZmJkNjUzODBjZGQyNTU5NTEwNzkwMDhiMzY0NTE2YyIKKworU1JDX1VSSVthcmNoaXZlLm1kNXN1bV0gPSAiYjA2NWU5Y2E1M2QxZjZiYzFlYzI2YWViMjczMzhiYjciCitTUkNfVVJJW2FyY2hpdmUuc2hhMjU2c3VtXSA9ICI2NzUxNGU3ODI0YjNmZWI0NzIzMTY0MDg0YjM2ZDZjZTFhZTQxY2IzYTk4OTdlOWYxYTU2YzgzMzQ5OTNjZTA2IgorU1JDX1VSSSArPSAiZmlsZTovL2luc3RhbGwtZXhhbXBsZXMucGF0Y2ggXAorICAgICAgICAgICAgZmlsZTovL3J1bi1pbnN0YWxsZWQtdGVzdHMtd2l0aC10YXAtb3V0cHV0LnBhdGNoIFwKKyAgICAgICAgICAgIGZpbGU6Ly8wMDAxLVJlbW92ZS1jbHV0dGVyLnR5cGVzLWFzLWl0LWlzLWJ1aWxkLWNvbmZpZ3VyYXRpb24tc3AucGF0Y2ggXAorICAgICAgICAgICAgZmlsZTovL3J1bi1wdGVzdCIKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvY2x1dHRlci9jbHV0dGVyLWdzdC0zLjBfMy4wLjE2LmJiIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy9jbHV0dGVyL2NsdXR0ZXItZ3N0LTMuMF8zLjAuMTYuYmIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGZjZjUyNDIuLjAwMDAwMDAKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy9jbHV0dGVyL2NsdXR0ZXItZ3N0LTMuMF8zLjAuMTYuYmIKKysrIC9kZXYvbnVsbApAQCAtMSw3ICswLDAgQEAKLXJlcXVpcmUgY2x1dHRlci1nc3QtMy4wLmluYwotCi1MSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT00ZmJkNjUzODBjZGQyNTU5NTEwNzkwMDhiMzY0NTE2YyBcCi0gICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9jbHV0dGVyLWdzdC9jbHV0dGVyLWdzdC5oO2JlZ2lubGluZT0xO2VuZGxpbmU9MjQ7bWQ1PTk1YmFhY2JhMTk0ZTgxNGMxMTBlYTNiZGYyNWRkYmY0IgotCi1TUkNfVVJJW2FyY2hpdmUubWQ1c3VtXSA9ICJjYTI0ZWI5MmEwZDM0ZmM5ZTY2ZmQ2ODZhOTY1ZDUxYyIKLVNSQ19VUklbYXJjaGl2ZS5zaGEyNTZzdW1dID0gIjgwM2U4YjcyNjVlNjNlMDU4MWUyMWZkMGM2MDY0NzkyZGZlOTUxNTEyZTlmNTE1ZTllN2E5YjQ1MmNhYWY5ZjAiCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL2NsdXR0ZXIvY2x1dHRlci1nc3QtMy4wXzMuMC4xOC5iYiBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvY2x1dHRlci9jbHV0dGVyLWdzdC0zLjBfMy4wLjE4LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk2MjZjZDkKLS0tIC9kZXYvbnVsbAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL2NsdXR0ZXIvY2x1dHRlci1nc3QtMy4wXzMuMC4xOC5iYgpAQCAtMCwwICsxLDcgQEAKK3JlcXVpcmUgY2x1dHRlci1nc3QtMy4wLmluYworCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT00ZmJkNjUzODBjZGQyNTU5NTEwNzkwMDhiMzY0NTE2YyBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9jbHV0dGVyLWdzdC9jbHV0dGVyLWdzdC5oO2JlZ2lubGluZT0xO2VuZGxpbmU9MjQ7bWQ1PTk1YmFhY2JhMTk0ZTgxNGMxMTBlYTNiZGYyNWRkYmY0IgorCitTUkNfVVJJW2FyY2hpdmUubWQ1c3VtXSA9ICIzZTRmNjQ0NzdmMjZkOWNmZDJkYjA2ZDNhYWVkMjAzYSIKK1NSQ19VUklbYXJjaGl2ZS5zaGEyNTZzdW1dID0gIjBhZWMwZDBjNjAyMGNkMTlhNWJiMGRhYjExNjVhOTI3NDhmODFhOWEzYWNkZmFiYjBmOTY2ZDVmNTNiYzgwOTMiCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL2NsdXR0ZXIvY2x1dHRlci1ndGstMS4wXzEuNi42LmJiIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy9jbHV0dGVyL2NsdXR0ZXItZ3RrLTEuMF8xLjYuNi5iYgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjMyNTdiYi4uMDAwMDAwMAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL2NsdXR0ZXIvY2x1dHRlci1ndGstMS4wXzEuNi42LmJiCisrKyAvZGV2L251bGwKQEAgLTEsNiArMCwwIEBACi1yZXF1aXJlIGNsdXR0ZXItZ3RrLTEuMC5pbmMKLQotTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9N2ZiYzMzODMwOWFjMzhmZWZjZDY0YjA0YmI5MDNlMzQiCi0KLVNSQ19VUklbYXJjaGl2ZS5tZDVzdW1dID0gIjc5ZGMzZDdhODY0NWY4N2Q4M2E5Y2NjYThhMDhhYThlIgotU1JDX1VSSVthcmNoaXZlLnNoYTI1NnN1bV0gPSAiOTQ0MGE2ODYwMGY1OGQwMGZlMGFmMzUzODM3Mzg5NDNlOGVhZDk5MDdmNGNmNTA3YTEwMmQ5NjgyMjQzNGEyOCIKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvY2x1dHRlci9jbHV0dGVyLWd0ay0xLjBfMS44LjAuYmIgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL2NsdXR0ZXIvY2x1dHRlci1ndGstMS4wXzEuOC4wLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY3NTM2NWMKLS0tIC9kZXYvbnVsbAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL2NsdXR0ZXIvY2x1dHRlci1ndGstMS4wXzEuOC4wLmJiCkBAIC0wLDAgKzEsNiBAQAorcmVxdWlyZSBjbHV0dGVyLWd0ay0xLjAuaW5jCisKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PTdmYmMzMzgzMDlhYzM4ZmVmY2Q2NGIwNGJiOTAzZTM0IgorCitTUkNfVVJJW2FyY2hpdmUubWQ1c3VtXSA9ICIzNTFjZjkyMjljZjk0MWQzNmI0NDFlZGUyMjM2ZDc0MiIKK1NSQ19VUklbYXJjaGl2ZS5zaGEyNTZzdW1dID0gIjc0MmVmOWQ2OGVjZTM2Y2JiMWIyZTFhNGE2ZmJkYWQ5MzJmNjY0NTM2MGJlN2U2ZGU3NWFiYmIxNDBkZmJmMWQiCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL2NvZ2wvY29nbC0xLjAuaW5jIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy9jb2dsL2NvZ2wtMS4wLmluYwppbmRleCA2OTBlYTNiLi43YTc5YWE3IDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL2NvZ2wvY29nbC0xLjAuaW5jCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvY29nbC9jb2dsLTEuMC5pbmMKQEAgLTczLDMgKzczLDUgQEAKIFJQUk9WSURFU19saWJjb2dsID0gImNvZ2wtMS4wIgogUkNPTkZMSUNUU19saWJjb2dsID0gImNvZ2wtMS4wIgogUlJFUExBQ0VTX2xpYmNvZ2wgPSAiY29nbC0xLjAiCisKK0NPTVBBVElCTEVfSE9TVF9hcm12NCA9ICdudWxsJwpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy9kaXJlY3RmYi9kaXJlY3RmYi1leGFtcGxlcy9jb25maWd1cmUuaW4tRml4LXN0cmluZy1hcmd1bWVudC1zeW50YXgucGF0Y2ggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL2RpcmVjdGZiL2RpcmVjdGZiLWV4YW1wbGVzL2NvbmZpZ3VyZS5pbi1GaXgtc3RyaW5nLWFyZ3VtZW50LXN5bnRheC5wYXRjaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDcxN2VhNi4uMDAwMDAwMAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL2RpcmVjdGZiL2RpcmVjdGZiLWV4YW1wbGVzL2NvbmZpZ3VyZS5pbi1GaXgtc3RyaW5nLWFyZ3VtZW50LXN5bnRheC5wYXRjaAorKysgL2Rldi9udWxsCkBAIC0xLDI4ICswLDAgQEAKLUZyb20gODgwNzdlZDE1NmE3MTRmMzJiYjQwOGY0MjIyNzhkNjE2MTFmZmQ0MSBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKLUZyb206IE90YXZpbyBTYWx2YWRvciA8b3RhdmlvQG9zc3lzdGVtcy5jb20uYnI+Ci1EYXRlOiBTYXQsIDI2IEp1bCAyMDE0IDE2OjU3OjQ2IC0wMzAwCi1TdWJqZWN0OiBbUEFUQ0hdIGNvbmZpZ3VyZS5pbjogRml4IHN0cmluZyBhcmd1bWVudCBzeW50YXgKLQotVXBzdHJlYW0tU3RhdHVzOiBTdWJtaXR0ZWQKLQotU2lnbmVkLW9mZi1ieTogT3RhdmlvIFNhbHZhZG9yIDxvdGF2aW9Ab3NzeXN0ZW1zLmNvbS5icj4KLS0tLQotIGNvbmZpZ3VyZS5pbiB8ICAgIDIgKy0KLSAxIGZpbGUgY2hhbmdlZCwgMSBpbnNlcnRpb24oKyksIDEgZGVsZXRpb24oLSkKLQotZGlmZiAtLWdpdCBhL2NvbmZpZ3VyZS5pbiBiL2NvbmZpZ3VyZS5pbgotaW5kZXggYmZlMWI4Mi4uZTkzOWJiZCAxMDA2NDQKLS0tLSBhL2NvbmZpZ3VyZS5pbgotKysrIGIvY29uZmlndXJlLmluCi1AQCAtNjUsNyArNjUsNyBAQCBmaSkKLSAKLSBESVJFQ1RGQl9SRVFVSVJFRF9WRVJTSU9OPTEuNC4xNAotIAotLVBLR19DSEVDS19NT0RVTEVTKERJUkVDVEZCLCBkaXJlY3RmYiA+PSAkRElSRUNURkJfUkVRVUlSRURfVkVSU0lPTixbIFdBVEVSPWAkUEtHX0NPTkZJRyAtLXZhcmlhYmxlPXdhdGVyIGRpcmVjdGZiYCBdLAotK1BLR19DSEVDS19NT0RVTEVTKFtESVJFQ1RGQl0sIGRpcmVjdGZiID49ICRESVJFQ1RGQl9SRVFVSVJFRF9WRVJTSU9OLFsgV0FURVI9YCRQS0dfQ09ORklHIC0tdmFyaWFibGU9d2F0ZXIgZGlyZWN0ZmJgIF0sCi0gCUFDX01TR19FUlJPUihbJERJUkVDVEZCX1BLR19FUlJPUlMKLSAqKiogRGlyZWN0RkIgJERJUkVDVEZCX1JFUVVJUkVEX1ZFUlNJT04gb3IgbmV3ZXIgaXMgcmVxdWlyZWQuIFRoZSBsYXRlc3QgdmVyc2lvbgotICoqKiBvZiBEaXJlY3RGQiBpcyBhdmFpbGFibGUgZnJvbSBodHRwOi8vd3d3LmRpcmVjdGZiLm9yZy8uXSkpCi0tLSAKLTEuNy4xMC40Ci0KZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvZGlyZWN0ZmIvZGlyZWN0ZmItZXhhbXBsZXNfMS43LjAuYmIgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL2RpcmVjdGZiL2RpcmVjdGZiLWV4YW1wbGVzXzEuNy4wLmJiCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3OTA3YzVjLi4wMDAwMDAwCi0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvZGlyZWN0ZmIvZGlyZWN0ZmItZXhhbXBsZXNfMS43LjAuYmIKKysrIC9kZXYvbnVsbApAQCAtMSwyMSArMCwwIEBACi1TVU1NQVJZID0gIkV4YW1wbGUgRGlyZWN0RkIgYXBwbGljYXRpb25zIgotREVTQ1JJUFRJT04gPSAiVGhlIERpcmVjdEZCLWV4YW1wbGVzIHBhY2thZ2UgY29udGFpbnMgYSBzZXQgb2Ygc2ltcGxlIERpcmVjdEZCIFwKLSAgICAgIGFwcGxpY2F0aW9ucyB0aGF0IGNhbiBiZSB1c2VkIHRvIHRlc3QgYW5kIGRlbW9uc3RyYXRlIHZhcmlvdXMgRGlyZWN0RkIgXAotICAgICAgZmVhdHVyZXMiCi1ERVBFTkRTID0gImRpcmVjdGZiIgotU0VDVElPTiA9ICJsaWJzIgotTElDRU5TRSA9ICJNSVQiCi0KLVNSQ19VUkkgPSAiIFwKLSAgICAgICAgICAgaHR0cDovL2Rvd25sb2Fkcy55b2N0b3Byb2plY3Qub3JnL21pcnJvci9zb3VyY2VzL0RpcmVjdEZCLWV4YW1wbGVzLSR7UFZ9LnRhci5neiBcCi0gICAgICAgICAgIGZpbGU6Ly9jb25maWd1cmUuaW4tRml4LXN0cmluZy1hcmd1bWVudC1zeW50YXgucGF0Y2ggXAotICAgICAgICAgICIKLQotTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9ZWNmNmZkMmIxOTkxNWFmYzRkYTU2MDQzOTI2Y2ExOGYiCi0KLVMgPSAiJHtXT1JLRElSfS9EaXJlY3RGQi1leGFtcGxlcy0ke1BWfSIKLQotaW5oZXJpdCBhdXRvdG9vbHMgcGtnY29uZmlnCi0KLVNSQ19VUklbbWQ1c3VtXSA9ICI4YjYwYzg2N2FmMjk1NDgxYzMyYThjN2ZjNTgwMjMwNyIKLVNSQ19VUklbc2hhMjU2c3VtXSA9ICI5YTIxMDRjYzRkYTgxMjNjODM3MTgxMzU1MWI2NmI5NDMxOTg5NzlmNzQ1Y2JlYmMwMzRiYjVlMTA4NDQxMjJhIgpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy9kaXJlY3RmYi9kaXJlY3RmYi5pbmMgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL2RpcmVjdGZiL2RpcmVjdGZiLmluYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjZiN2NiZS4uMDAwMDAwMAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL2RpcmVjdGZiL2RpcmVjdGZiLmluYworKysgL2Rldi9udWxsCkBAIC0xLDc5ICswLDAgQEAKLVNVTU1BUlkgPSAiR3JhcGhpY3MgYWJzdHJhY3Rpb24gbGlicmFyeSBmb3IgdGhlIExpbnV4IEZyYW1lYnVmZmVyIERldmljZSIKLURFU0NSSVBUSU9OID0gIkRpcmVjdEZCIGlzIGEgdGhpbiBsaWJyYXJ5IHRoYXQgcHJvdmlkZXMgZGV2ZWxvcGVycyBcCi13aXRoIGhhcmR3YXJlIGdyYXBoaWNzIGFjY2VsZXJhdGlvbiwgaW5wdXQgZGV2aWNlIGhhbmRsaW5nIGFuZCBcCi1hYnN0cmFjdGlvbiwgYW4gaW50ZWdyYXRlZCB3aW5kb3dpbmcgc3lzdGVtIHdpdGggc3VwcG9ydCBmb3IgXAotdHJhbnNsdWNlbnQgd2luZG93cyBhbmQgbXVsdGlwbGUgZGlzcGxheSBsYXllcnMgb24gdG9wIG9mIHRoZSBcCi1MaW51eCBmcmFtZWJ1ZmZlciBkZXZpY2UuIgotU0VDVElPTiA9ICJsaWJzIgotTElDRU5TRSA9ICJMR1BMdjIuMSIKLUxJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PWRjZjNjODI1NjU5ZTgyNTM5NjQ1ZGE0MWE3OTA4NTg5IgotCi1IT01FUEFHRSA9ICJodHRwOi8vZGlyZWN0ZmIub3JnIgotREVQRU5EUyA9ICJqcGVnIGxpYnBuZyBmcmVldHlwZSB6bGliIHRzbGliIHN5c2ZzdXRpbHMiCi0KLVNSQ19VUkkgPSAiaHR0cDovL2Rvd25sb2Fkcy55b2N0b3Byb2plY3Qub3JnL21pcnJvci9zb3VyY2VzL0RpcmVjdEZCLSR7UFZ9LnRhci5neiBcCi0gICAgICAgICAgIGZpbGU6Ly9jb25maWd1cmVmaXgucGF0Y2ggXAotICAgICAgICAgICBmaWxlOi8vZnVzaW9uLnBhdGNoIFwKLSAgICAgICAgICAgZmlsZTovL2Jhc2hpc20ucGF0Y2ggXAotICAgICAgICAgICBmaWxlOi8vMDAwMS1nZngtZGlyZWN0LUFib2lkLXVzbmctVkxBcy1hbmQtcHJpbnRmLWZvcm1hdHMucGF0Y2ggXAotICAgICAgICAgICBmaWxlOi8vY29tcGFyX2ZuX3QucGF0Y2ggXAotICAgICAgICAgICBmaWxlOi8vdW5pb24tc2lndmFsLnBhdGNoIFwKLSAgICAgICAgICAgZmlsZTovL3VzZS1QVEhSRUFEX01VVEVYX1JFQ1VSU0lWRS5wYXRjaCBcCi0gICAgICAgICAgIgotCi1TID0gIiR7V09SS0RJUn0vRGlyZWN0RkItJHtQVn0iCi0KLUxERkxBR1NfYXBwZW5kID0iIC1sdHMgLWxtIgotCi0jIFdvcmthcm91bmQgZm9yIGxpbmtpbmcgaXNzdWVzIHNlZW4gd2l0aCBhcm12N2EgKyBnb2xkCi1MREZMQUdTX2FwcGVuZF9hcm0gPSAiJHtAYmFzZV9jb250YWlucygnRElTVFJPX0ZFQVRVUkVTJywgJ2xkLWlzLWdvbGQnLCAnIC1mdXNlLWxkPWJmZCAnLCAnJywgZCl9IgotCi1CSU5DT05GSUcgPSAiJHtiaW5kaXJ9L2RpcmVjdGZiLWNvbmZpZyIKLQotaW5oZXJpdCBhdXRvdG9vbHMgYmluY29uZmlnLWRpc2FibGVkIHBrZ2NvbmZpZwotCi1QQUNLQUdFQ09ORklHID8/PSAiIgotUEFDS0FHRUNPTkZJR1tqcGVnMjAwMF0gPSAiLS1lbmFibGUtanBlZzIwMDAsLS1kaXNhYmxlLWpwZWcyMDAwLGphc3BlciIKLVBBQ0tBR0VDT05GSUdbZHJta21zXSA9ICItLWVuYWJsZS1kcm1rbXMsLS1kaXNhYmxlLWRybWttcyxsaWJkcm0iCi1QQUNLQUdFQ09ORklHW3RpZmZdID0gIi0tZW5hYmxlLXRpZmYsLS1kaXNhYmxlLXRpZmYsdGlmZiIKLVBBQ0tBR0VDT05GSUdbd2VicF0gPSAiLS1lbmFibGUtd2VicCwtLWRpc2FibGUtd2VicCxsaWJ3ZWJwIgotCi1FWFRSQV9PRUNPTkYgPSAiXAotICAtLXdpdGgtZ2Z4ZHJpdmVycz1ub25lIFwKLSAgLS1lbmFibGUtZnJlZXR5cGU9eWVzIFwKLSAgLS1lbmFibGUtemxpYiBcCi0gIC0tZGlzYWJsZS1pbWxpYjIgXAotICAtLWRpc2FibGUtbWVzYSBcCi0gIC0tZGlzYWJsZS1zZGwgXAotICAtLWRpc2FibGUtdm5jIFwKLSAgLS1kaXNhYmxlLXgxMSBcCi0iCi0KLSNPbmNlIC1mbm8tb21pdC1mcmFtZS1wb2ludGVyIG9wdGlvbiBvZiBnY2MgaXMgYWRkZWQgaW50byBUQVJHRVRfQ0xGQUdTIGFzIGRlZmF1bHQKLSN0aGlzIHdpbGwgY2F1c2UgZGlyZWN0ZmIgYnVpbGQgZmFpbHVyZSBvbiB4ODYgYXJjaCwgc28gZmlsdGVyIG91dCBpdC4KLVRBUkdFVF9DRkxBR1NfcmVtb3ZlX3g4NiA9ICItZm5vLW9taXQtZnJhbWUtcG9pbnRlciIKLQotI1BBQ0tBR0VTX0RZTkFNSUMgKz0gIl5kaXJlY3RmYi1pbnB1dGRyaXZlcnMtLioiCi0jCi0jcHl0aG9uIHBvcHVsYXRlX3BhY2thZ2VzX3ByZXBlbmQgKCkgewotIyAgICBpbnB1dGRyaXZlcnNfbGliZGlyID0gZC5leHBhbmQoJyR7bGliZGlyfS9kaXJlY3RmYi0ke1JWfS9pbnB1dGRyaXZlcnMnKQotIyAgICBkb19zcGxpdF9wYWNrYWdlcyhkLCBpbnB1dGRyaXZlcnNfbGliZGlyLCAnKi5zbyQnLCAnZGlyZWN0ZmItaW5wdXRkcml2ZXJzLSVzJywgJ0RpcmVjdGZiIHBsdWdpbiBmb3IgJXMnKQotI30KLQotIyBOT1RFOiBtb25vbGl0aGljIHBhY2thZ2luZyBmb3Igbm93LCBzaG91bGQgaW1wcm92ZSB0aGF0IGV2ZW50dWFsbHkKLQotRklMRVNfJHtQTn0tZGV2ICs9ICJcCi0gICR7YmluZGlyfS9kaXJlY3RmYi1jb25maWcgXAotICAke2xpYmRpcn0vZGlyZWN0ZmItJHtSVn0vc3lzdGVtcy8qLmxhIFwKLSAgJHtsaWJkaXJ9L2RpcmVjdGZiLSR7UlZ9L2lucHV0ZHJpdmVycy8qLmxhIFwKLSAgJHtsaWJkaXJ9L2RpcmVjdGZiLSR7UlZ9L2ludGVyZmFjZXMvKi8qLmxhIFwKLSAgJHtsaWJkaXJ9L2RpcmVjdGZiLSR7UlZ9L3dtLyoubGEgXAotIgotCi1GSUxFU18ke1BOfSArPSAiXAotICAke2xpYmRpcn0vZGlyZWN0ZmItJHtSVn0vc3lzdGVtcy8qLnNvIFwKLSAgJHtsaWJkaXJ9L2RpcmVjdGZiLSR7UlZ9L2lucHV0ZHJpdmVycy8qLnNvIFwKLSAgJHtsaWJkaXJ9L2RpcmVjdGZiLSR7UlZ9L2ludGVyZmFjZXMvKi8qLnNvIFwKLSAgJHtsaWJkaXJ9L2RpcmVjdGZiLSR7UlZ9L3dtLyouc28gXAotICAke2RhdGFkaXJ9L2RpcmVjdGZiLSR7UFZ9IFwKLSIKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvZGlyZWN0ZmIvZGlyZWN0ZmIvMDAwMS1nZngtZGlyZWN0LUFib2lkLXVzbmctVkxBcy1hbmQtcHJpbnRmLWZvcm1hdHMucGF0Y2ggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL2RpcmVjdGZiL2RpcmVjdGZiLzAwMDEtZ2Z4LWRpcmVjdC1BYm9pZC11c25nLVZMQXMtYW5kLXByaW50Zi1mb3JtYXRzLnBhdGNoCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3NmUwZjc1Li4wMDAwMDAwCi0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvZGlyZWN0ZmIvZGlyZWN0ZmIvMDAwMS1nZngtZGlyZWN0LUFib2lkLXVzbmctVkxBcy1hbmQtcHJpbnRmLWZvcm1hdHMucGF0Y2gKKysrIC9kZXYvbnVsbApAQCAtMSw2MSArMCwwIEBACi1Gcm9tIGY0M2VmNDQ4MDZmZmI4ZTNiMzVkOTkwNzBkZGU5YjZjYzE3MTRkM2QgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCi1Gcm9tOiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgotRGF0ZTogVHVlLCA4IFNlcCAyMDE1IDIxOjMyOjIwICswMDAwCi1TdWJqZWN0OiBbUEFUQ0hdIGdmeCxkaXJlY3Q6IEFib2lkIHVzbmcgVkxBcyBhbmQgcHJpbnRmIGZvcm1hdHMKLQotVkxBcyBhcmUgZmxhZ2dlZCBieSBjbGFuZyB3aGVuIHVzaW5nIG5vbi1QT0QgdHlwZXMsIHRoZXJlZm9yZSByZXBsYWNlCi10aGUgdXNhZ2Ugd2l0aCBhbGxvY2Egd2hpY2ggaXMgZXhhY3Qgc2FtZSBhbGxvY2F0aW9uIG9uIHN0YWNrCi0KLSBfX2F0dHJpYnV0ZV9fKChfX2Zvcm1hdF9fIChfX3ByaW50Zl9fKSkpIGlzIG5vdCBwb3J0YWJsZSBhcyB1c2VkIGhlcmUKLSB0aGVyZWZvcmUgZGlzYWJsZSB0aGUgY2hlY2sgZm9yIGNsYW5nIGhlcmUsIHdlIGxvc2Ugbm8gZnVuY3Rpb25hbGl0eQotCi1TaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgotLS0tCi1VcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKLQotIGxpYi9kaXJlY3QvdXRpbC5oIHwgMiArLQotIHNyYy9nZngvdXRpbC5jcHAgIHwgOCArKysrLS0tLQotIDIgZmlsZXMgY2hhbmdlZCwgNSBpbnNlcnRpb25zKCspLCA1IGRlbGV0aW9ucygtKQotCi1kaWZmIC0tZ2l0IGEvbGliL2RpcmVjdC91dGlsLmggYi9saWIvZGlyZWN0L3V0aWwuaAotaW5kZXggNzI5NDFlOS4uOGU3ZmE0YSAxMDA2NDQKLS0tLSBhL2xpYi9kaXJlY3QvdXRpbC5oCi0rKysgYi9saWIvZGlyZWN0L3V0aWwuaAotQEAgLTk4LDcgKzk4LDcgQEAKLSAjZGVmaW5lIERfQ09OU1RfRlVOQwotICNlbmRpZgotIAotLSNpZiBfX0dOVUNfXyA+PSAzCi0rI2lmIF9fR05VQ19fID49IDMgJiYgIWRlZmluZWQgX19jbGFuZ19fCi0gI2RlZmluZSBEX0ZPUk1BVF9QUklOVEYobikgICAgICAgICBfX2F0dHJpYnV0ZV9fKChfX2Zvcm1hdF9fIChfX3ByaW50Zl9fLCBuLCBuKzEpKSkKLSAjZGVmaW5lIERfRk9STUFUX1ZQUklOVEYobikgICAgICAgIF9fYXR0cmlidXRlX18oKF9fZm9ybWF0X18gKF9fcHJpbnRmX18sIG4sIDApKSkKLSAjZWxzZQotZGlmZiAtLWdpdCBhL3NyYy9nZngvdXRpbC5jcHAgYi9zcmMvZ2Z4L3V0aWwuY3BwCi1pbmRleCA0MDAzMmJjLi5kMTAxNWQ0IDEwMDY0NAotLS0tIGEvc3JjL2dmeC91dGlsLmNwcAotKysrIGIvc3JjL2dmeC91dGlsLmNwcAotQEAgLTI5NCw4ICsyOTQsOCBAQCBkZmJfZ2Z4X2NvcHlfcmVnaW9uc19zdGVyZW8oIENvcmVTdXJmYWNlICAgICAgICAgICAqc291cmNlLAotIHsKLSAgICAgIHVuc2lnbmVkIGludCBpLCBuID0gMDsKLSAgICAgIERGQlJlY3RhbmdsZSByZWN0ID0geyAwLCAwLCBzb3VyY2UtPmNvbmZpZy5zaXplLncsIHNvdXJjZS0+Y29uZmlnLnNpemUuaCB9OwotLSAgICAgREZCUmVjdGFuZ2xlIHJlY3RzW251bV07Ci0tICAgICBERkJQb2ludCAgICAgcG9pbnRzW251bV07Ci0rICAgICBERkJSZWN0YW5nbGUgKnJlY3RzID0gIChERkJSZWN0YW5nbGUqKWFsbG9jYSggc2l6ZW9mKHN0cnVjdCBERkJSZWN0YW5nbGUpICogbnVtKTsKLSsgICAgIERGQlBvaW50ICpwb2ludHMgPSAgKERGQlBvaW50KilhbGxvY2EoIHNpemVvZihzdHJ1Y3QgREZCUG9pbnQpICogbnVtKTsKLSAKLSAgICAgIGZvciAoaT0wOyBpPG51bTsgaSsrKSB7Ci0gICAgICAgICAgIERGQl9SRUdJT05fQVNTRVJUKCAmcmVnaW9uc1tpXSApOwotQEAgLTM1MSw4ICszNTEsOCBAQCBkZmJfZ2Z4X2NvcHlfcmVnaW9uc19jbGllbnQoIENvcmVTdXJmYWNlICAgICAgICAgICAgICpzb3VyY2UsCi0gewotICAgICAgdW5zaWduZWQgaW50ICAgICAgICAgICAgIGksIG4gPSAwOwotICAgICAgREZCUmVjdGFuZ2xlICAgICAgICAgICAgIHJlY3QgPSB7IDAsIDAsIHNvdXJjZS0+Y29uZmlnLnNpemUudywgc291cmNlLT5jb25maWcuc2l6ZS5oIH07Ci0tICAgICBERkJSZWN0YW5nbGUgICAgICAgICAgICAgcmVjdHNbbnVtXTsKLS0gICAgIERGQlBvaW50ICAgICAgICAgICAgICAgICBwb2ludHNbbnVtXTsKLSsgICAgIERGQlJlY3RhbmdsZSAgICAgICAgICAgICpyZWN0cyA9ICAoREZCUmVjdGFuZ2xlKilhbGxvY2EoIHNpemVvZihzdHJ1Y3QgREZCUmVjdGFuZ2xlKSAqIG51bSk7Ci0rICAgICBERkJQb2ludCAgICAgICAgICAgICAgICAqcG9pbnRzID0gIChERkJQb2ludCopYWxsb2NhKCBzaXplb2Yoc3RydWN0IERGQlBvaW50KSAqIG51bSk7Ci0gICAgICBDb3JlR3JhcGhpY3NTdGF0ZUNsaWVudCAqY2xpZW50ID0gX2NsaWVudCA/IF9jbGllbnQgOiAmU3RhdGVDbGllbnQ6OkdldCgpLT5jbGllbnQ7Ci0gICAgICBDYXJkU3RhdGUgICAgICAgICAgICAgICAqc3RhdGUgID0gY2xpZW50LT5zdGF0ZTsKLSAgICAgIENhcmRTdGF0ZSAgICAgICAgICAgICAgICBiYWNrdXA7Ci0tLSAKLTIuNS4xCi0KZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvZGlyZWN0ZmIvZGlyZWN0ZmIvYmFzaGlzbS5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvZGlyZWN0ZmIvZGlyZWN0ZmIvYmFzaGlzbS5wYXRjaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMmVmNGU5My4uMDAwMDAwMAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL2RpcmVjdGZiL2RpcmVjdGZiL2Jhc2hpc20ucGF0Y2gKKysrIC9kZXYvbnVsbApAQCAtMSwxOCArMCwwIEBACi0ke3gvL3kvfSBpcyBhIGJhc2ggc3ludGF4LiBSZXBsYWNlIHdpdGggc29tZXRoaW5nIGRhc2ggY29tcGF0aWJsZQotCi1SUCAyMDE1LzUvMwotVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCi0KLUluZGV4OiBEaXJlY3RGQi0xLjcuNy9jb25maWd1cmUuaW4KLT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tLSBEaXJlY3RGQi0xLjcuNy5vcmlnL2NvbmZpZ3VyZS5pbgotKysrIERpcmVjdEZCLTEuNy43L2NvbmZpZ3VyZS5pbgotQEAgLTI2OTYsNyArMjY5Niw3IEBAIEFNX0NPTkRJVElPTkFMKEJVSUxEX1RPT0xTLCB0ZXN0ICIkd2l0aF8KLSBBTV9DT05ESVRJT05BTChDUk9TU19DT01QSUxJTkcsIHRlc3QgIiRjcm9zc19jb21waWxpbmciID0gInllcyIpCi0gCi0gQ0ZMQUdTPSIkQ0ZMQUdTICRERkJfSU5URVJOQUxfQ0ZMQUdTIgotLUNYWEZMQUdTPSIkQ1hYRkxBR1MgJHtDRkxBR1MvLy1XZXJyb3ItaW1wbGljaXQtZnVuY3Rpb24tZGVjbGFyYXRpb24vfSIKLStDWFhGTEFHUz0iJENYWEZMQUdTICQocHJpbnRmICclc1xuJyAiJENGTEFHUyIgfCBzZWQgJ3MvLVdlcnJvci1pbXBsaWNpdC1mdW5jdGlvbi1kZWNsYXJhdGlvbi8vZycpIgotIERGQl9MREZMQUdTPSIkTERGTEFHUyAkWkxJQl9MSUJTIgotIAotIENGTEFHUz0iJENGTEFHUyAkQ0ZMQUdTX1NURCIKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvZGlyZWN0ZmIvZGlyZWN0ZmIvY29tcGFyX2ZuX3QucGF0Y2ggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL2RpcmVjdGZiL2RpcmVjdGZiL2NvbXBhcl9mbl90LnBhdGNoCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlZTRkOTAwLi4wMDAwMDAwCi0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvZGlyZWN0ZmIvZGlyZWN0ZmIvY29tcGFyX2ZuX3QucGF0Y2gKKysrIC9kZXYvbnVsbApAQCAtMSw2MiArMCwwIEBACi10ZXN0IGZvciBfX2NvbXBhcl9mbl90IGFuZCBpZiBub3QgZGVmaW5lZCBieSBsaWJjIHRoZW4gZGVmaW5lIGl0Ci1oZWxwIG1ha2UgZGlyZWN0ZmIgY29tcGlsZSB3aXRoIG11c2wKLQotVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCi1TaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgotCi1JbmRleDogRGlyZWN0RkItMS43LjcvY29uZmlndXJlLmluCi09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLS0gRGlyZWN0RkItMS43Ljcub3JpZy9jb25maWd1cmUuaW4KLSsrKyBEaXJlY3RGQi0xLjcuNy9jb25maWd1cmUuaW4KLUBAIC0xMTIsNiArMTEyLDE3IEBAIEFDX0NIRUNLX1NJWkVPRihsb25nKQotIEFDX0NIRUNLX1NJWkVPRihsb25nIGxvbmcpCi0gQUNfQ0hFQ0tfRlVOQ1MoZm9yaykKLSAKLStBQ19DQUNIRV9DSEVDSyhbZm9yIGNvbXBhcl9mbl90IGluIHN0ZGxpYi5oXSxjY2FjaGVfY3ZfQ09NUEFSX0ZOX1QsIFsKLSsgICAgQUNfVFJZX0NPTVBJTEUoCi0rICAgICAgICBbI2luY2x1ZGUgPHN0ZGxpYi5oPl0sCi0rICAgICAgICBbdm9pZCB0ZXN0X2ZuKHZvaWQpIHsgcXNvcnQoTlVMTCwgMCwgMCwgKF9fY29tcGFyX2ZuX3QpTlVMTCk7IH1dLAotKyAgICAgICAgY2NhY2hlX2N2X0NPTVBBUl9GTl9UPXllcywKLSsgICAgICAgIGNjYWNoZV9jdl9DT01QQVJfRk5fVD1ubyldKQotK2lmIHRlc3QgeCIkY2NhY2hlX2N2X0NPTVBBUl9GTl9UIiA9IHgieWVzIjsgdGhlbgotKyAgIEFDX0RFRklORShIQVZFX0NPTVBBUl9GTl9ULCAxLAotKyAgICAgICAgICAgICBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYF9fY29tcGFyX2ZuX3QnIHR5cGVkZWYuKQotK2ZpCi0rCi0gQUNfUEFUSF9QUk9HUyhQRVJMLCBwZXJsNSBwZXJsKQotIAotIEFDX1BBVEhfUFJPRyhNQU4ySFRNTCwgbWFuMmh0bWwsIG5vKQotSW5kZXg6IERpcmVjdEZCLTEuNy43L2lucHV0ZHJpdmVycy9saXJjL2xpcmMuYwotPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0tIERpcmVjdEZCLTEuNy43Lm9yaWcvaW5wdXRkcml2ZXJzL2xpcmMvbGlyYy5jCi0rKysgRGlyZWN0RkItMS43LjcvaW5wdXRkcml2ZXJzL2xpcmMvbGlyYy5jCi1AQCAtNTksNiArNTksMTEgQEAKLSAKLSAjaW5jbHVkZSA8Y29yZS9pbnB1dF9kcml2ZXIuaD4KLSAKLSsjaWYgSEFWRV9DT01QQVJfRk5fVAotKyNkZWZpbmUgQ09NUEFSX0ZOX1QgX19jb21wYXJfZm5fdAotKyNlbHNlCi0rdHlwZWRlZiBpbnQgKCpDT01QQVJfRk5fVCkoY29uc3Qgdm9pZCAqLCBjb25zdCB2b2lkICopOwotKyNlbmRpZgotIAotIERGQl9JTlBVVF9EUklWRVIoIGxpcmMgKQotIAotQEAgLTk3LDcgKzEwMiw3IEBAIHN0YXRpYyBERkJJbnB1dERldmljZUtleVN5bWJvbCBsaXJjX3BhcnMKLSAgICAgICAgICAgcXNvcnQgKCBrZXluYW1lcywKLSAgICAgICAgICAgICAgICAgICBEX0FSUkFZX1NJWkUoIGtleW5hbWVzICksCi0gICAgICAgICAgICAgICAgICAgc2l6ZW9mKGtleW5hbWVzWzBdKSwKLS0gICAgICAgICAgICAgICAgICAoX19jb21wYXJfZm5fdCkga2V5bmFtZXNfc29ydF9jb21wYXJlICk7Ci0rICAgICAgICAgICAgICAgICAgKENPTVBBUl9GTl9UKSBrZXluYW1lc19zb3J0X2NvbXBhcmUgKTsKLSAgICAgICAgICAga2V5bmFtZXNfc29ydGVkID0gdHJ1ZTsKLSAgICAgIH0KLSAKLUBAIC0xMjQsNyArMTI5LDcgQEAgc3RhdGljIERGQklucHV0RGV2aWNlS2V5U3ltYm9sIGxpcmNfcGFycwotICAgICAgICAgICAgICAgIHN5bWJvbF9uYW1lID0gYnNlYXJjaCggbmFtZSwga2V5bmFtZXMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEX0FSUkFZX1NJWkUoIGtleW5hbWVzICksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplb2Yoa2V5bmFtZXNbMF0pLAotLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fY29tcGFyX2ZuX3QpIGtleW5hbWVzX2NvbXBhcmUgKTsKLSsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChDT01QQVJfRk5fVCkga2V5bmFtZXNfY29tcGFyZSApOwotICAgICAgICAgICAgICAgIGlmIChzeW1ib2xfbmFtZSkKLSAgICAgICAgICAgICAgICAgICAgIHJldHVybiBzeW1ib2xfbmFtZS0+c3ltYm9sOwotICAgICAgICAgICAgICAgIGJyZWFrOwpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy9kaXJlY3RmYi9kaXJlY3RmYi9jb25maWd1cmVmaXgucGF0Y2ggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL2RpcmVjdGZiL2RpcmVjdGZiL2NvbmZpZ3VyZWZpeC5wYXRjaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZGQ4YzAxOS4uMDAwMDAwMAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL2RpcmVjdGZiL2RpcmVjdGZiL2NvbmZpZ3VyZWZpeC5wYXRjaAorKysgL2Rldi9udWxsCkBAIC0xLDYwICswLDAgQEAKLUxpYnRvb2wgbmVlZHMgdGhlc2Ugc2V0IGNvcnJlY3RseSBlbHNlIHdlIGVuZCB1cCB3aXRoIHBvaW50bGVzcyBycGF0aHMKLXN1Y2ggYXMgdGhlIFFBIHdhcm5pbmdzOgotCi1XQVJOSU5HOiBRQSBJc3N1ZTogZGlyZWN0ZmI6IC93b3JrL2k1ODYtcG9reS1saW51eC9kaXJlY3RmYi0xLjQuMTUtcjEvcGFja2FnZXMtc3BsaXQvZGlyZWN0ZmIvdXNyL2Jpbi9kZmJsYXllciBjb250YWlucyBwcm9iYWJseS1yZWR1bmRhbnQgUlBBVEggL3Vzci9saWJXQVJOSU5HOiBRQSBJc3N1ZTogZGlyZWN0ZmI6IC93b3JrL2k1ODYtcG9reS1saW51eC9kaXJlY3RmYi0xLjQuMTUtcjEvcGFja2FnZXMtc3BsaXQvZGlyZWN0ZmIvdXNyL2Jpbi9kZmJtYXN0ZXIgY29udGFpbnMgcHJvYmFibHktcmVkdW5kYW50IFJQQVRIIC91c3IvbGliV0FSTklORzogUUEgSXNzdWU6IGRpcmVjdGZiOiAvd29yay9pNTg2LXBva3ktbGludXgvZGlyZWN0ZmItMS40LjE1LXIxL3BhY2thZ2VzLXNwbGl0L2RpcmVjdGZiL3Vzci9iaW4vbWtkZ2lmZnQgY29udGFpbnMgcHJvYmFibHktcmVkdW5kYW50IFJQQVRIIC91c3IvbGliV0FSTklORzogUUEgSXNzdWU6IGRpcmVjdGZiOiAvd29yay9pNTg2LXBva3ktbGludXgvZGlyZWN0ZmItMS40LjE1LXIxL3BhY2thZ2VzLXNwbGl0L2RpcmVjdGZiL3Vzci9iaW4vZGZiZHVtcCBjb250YWlucyBwcm9iYWJseS1yZWR1bmRhbnQgUlBBVEggL3Vzci9saWJXQVJOSU5HOiBRQSBJc3N1ZTogZGlyZWN0ZmI6IC93b3JrL2k1ODYtcG9reS1saW51eC9kaXJlY3RmYi0xLjQuMTUtcjEvcGFja2FnZXMtc3BsaXQvZGlyZWN0ZmIvdXNyL2Jpbi9kZmJpbnB1dCBjb250YWlucyBwcm9iYWJseS1yZWR1bmRhbnQgUlBBVEggL3Vzci9saWJXQVJOSU5HOiBRQSBJc3N1ZTogZGlyZWN0ZmI6IC93b3JrL2k1ODYtcG9reS1saW51eC9kaXJlY3RmYi0xLjQuMTUtcjEvcGFja2FnZXMtc3BsaXQvZGlyZWN0ZmIvdXNyL2Jpbi9kZmJmeCBjb250YWlucyBwcm9iYWJseS1yZWR1bmRhbnQgUlBBVEggL3Vzci9saWJXQVJOSU5HOiBRQSBJc3N1ZTogZGlyZWN0ZmI6IC93b3JrL2k1ODYtcG9reS1saW51eC9kaXJlY3RmYi0xLjQuMTUtcjEvcGFja2FnZXMtc3BsaXQvZGlyZWN0ZmIvdXNyL2Jpbi9kZmJzY3JlZW4gY29udGFpbnMgcHJvYmFibHktcmVkdW5kYW50IFJQQVRIIC91c3IvbGliV0FSTklORzogUUEgSXNzdWU6IGRpcmVjdGZiOiAvd29yay9pNTg2LXBva3ktbGludXgvZGlyZWN0ZmItMS40LjE1LXIxL3BhY2thZ2VzLXNwbGl0L2RpcmVjdGZiL3Vzci9iaW4vbWtkZ2lmZiBjb250YWlucyBwcm9iYWJseS1yZWR1bmRhbnQgUlBBVEggL3Vzci9saWJXQVJOSU5HOiBRQSBJc3N1ZTogZGlyZWN0ZmI6IC93b3JrL2k1ODYtcG9reS1saW51eC9kaXJlY3RmYi0xLjQuMTUtcjEvcGFja2FnZXMtc3BsaXQvZGlyZWN0ZmIvdXNyL2Jpbi9kZmJpbnNwZWN0b3IgY29udGFpbnMgcHJvYmFibHktcmVkdW5kYW50IFJQQVRIIC91c3IvbGliCi1XQVJOSU5HOiBRQSBJc3N1ZTogZGlyZWN0ZmI6IC93b3JrL2k1ODYtcG9reS1saW51eC9kaXJlY3RmYi0xLjQuMTUtcjEvcGFja2FnZXMtc3BsaXQvZGlyZWN0ZmIvdXNyL2Jpbi9ta2RmaWZmIGNvbnRhaW5zIHByb2JhYmx5LXJlZHVuZGFudCBSUEFUSCAvdXNyL2xpYgotV0FSTklORzogUUEgSXNzdWU6IGRpcmVjdGZiOiAvd29yay9pNTg2LXBva3ktbGludXgvZGlyZWN0ZmItMS40LjE1LXIxL3BhY2thZ2VzLXNwbGl0L2RpcmVjdGZiL3Vzci9iaW4vZGZiaW5mbyBjb250YWlucyBwcm9iYWJseS1yZWR1bmRhbnQgUlBBVEggL3Vzci9saWIKLVdBUk5JTkc6IFFBIElzc3VlOiBkaXJlY3RmYjogL3dvcmsvaTU4Ni1wb2t5LWxpbnV4L2RpcmVjdGZiLTEuNC4xNS1yMS9wYWNrYWdlcy1zcGxpdC9kaXJlY3RmYi91c3IvYmluL2RmYnBlbm1vdW50IGNvbnRhaW5zIHByb2JhYmx5LXJlZHVuZGFudCBSUEFUSCAvdXNyL2xpYgotV0FSTklORzogUUEgSXNzdWU6IGRpcmVjdGZiOiAvd29yay9pNTg2LXBva3ktbGludXgvZGlyZWN0ZmItMS40LjE1LXIxL3BhY2thZ2VzLXNwbGl0L2RpcmVjdGZiL3Vzci9iaW4vZGZiZyBjb250YWlucyBwcm9iYWJseS1yZWR1bmRhbnQgUlBBVEggL3Vzci9saWIKLVdBUk5JTkc6IFFBIElzc3VlOiBkaXJlY3RmYjogL3dvcmsvaTU4Ni1wb2t5LWxpbnV4L2RpcmVjdGZiLTEuNC4xNS1yMS9wYWNrYWdlcy1zcGxpdC9kaXJlY3RmYi91c3IvbGliL2xpYmZ1c2lvbi0xLjQuc28uNiBjb250YWlucyBwcm9iYWJseS1yZWR1bmRhbnQgUlBBVEggL3Vzci9saWIKLVdBUk5JTkc6IFFBIElzc3VlOiBkaXJlY3RmYjogL3dvcmsvaTU4Ni1wb2t5LWxpbnV4L2RpcmVjdGZiLTEuNC4xNS1yMS9wYWNrYWdlcy1zcGxpdC9kaXJlY3RmYi91c3IvbGliL2xpYmRpcmVjdGZiLTEuNC5zby42LjAuOSBjb250YWlucyBwcm9iYWJseS1yZWR1bmRhbnQgUlBBVEggL3Vzci9saWIKLVdBUk5JTkc6IFFBIElzc3VlOiBkaXJlY3RmYjogL3dvcmsvaTU4Ni1wb2t5LWxpbnV4L2RpcmVjdGZiLTEuNC4xNS1yMS9wYWNrYWdlcy1zcGxpdC9kaXJlY3RmYi91c3IvbGliL2xpYmRpcmVjdGZiLTEuNC5zby42IGNvbnRhaW5zIHByb2JhYmx5LXJlZHVuZGFudCBSUEFUSCAvdXNyL2xpYgotV0FSTklORzogUUEgSXNzdWU6IGRpcmVjdGZiOiAvd29yay9pNTg2LXBva3ktbGludXgvZGlyZWN0ZmItMS40LjE1LXIxL3BhY2thZ2VzLXNwbGl0L2RpcmVjdGZiL3Vzci9saWIvbGliZnVzaW9uLTEuNC5zby42LjAuOSBjb250YWlucyBwcm9iYWJseS1yZWR1bmRhbnQgUlBBVEggL3Vzci9saWIKLVdBUk5JTkc6IFFBIElzc3VlOiBkaXJlY3RmYjogL3dvcmsvaTU4Ni1wb2t5LWxpbnV4L2RpcmVjdGZiLTEuNC4xNS1yMS9wYWNrYWdlcy1zcGxpdC9kaXJlY3RmYi91c3IvbGliL2RpcmVjdGZiLTEuNC02L3N5c3RlbXMvbGliZGlyZWN0ZmJfZmJkZXYuc28gY29udGFpbnMgcHJvYmFibHktcmVkdW5kYW50IFJQQVRIIC91c3IvbGliCi1XQVJOSU5HOiBRQSBJc3N1ZTogZGlyZWN0ZmI6IC93b3JrL2k1ODYtcG9reS1saW51eC9kaXJlY3RmYi0xLjQuMTUtcjEvcGFja2FnZXMtc3BsaXQvZGlyZWN0ZmIvdXNyL2xpYi9kaXJlY3RmYi0xLjQtNi9zeXN0ZW1zL2xpYmRpcmVjdGZiX2Rldm1lbS5zbyBjb250YWlucyBwcm9iYWJseS1yZWR1bmRhbnQgUlBBVEggL3Vzci9saWIKLVdBUk5JTkc6IFFBIElzc3VlOiBkaXJlY3RmYjogL3dvcmsvaTU4Ni1wb2t5LWxpbnV4L2RpcmVjdGZiLTEuNC4xNS1yMS9wYWNrYWdlcy1zcGxpdC9kaXJlY3RmYi91c3IvbGliL2RpcmVjdGZiLTEuNC02L3N5c3RlbXMvbGliZGlyZWN0ZmJfZHVtbXkuc28gY29udGFpbnMgcHJvYmFibHktcmVkdW5kYW50IFJQQVRIIC91c3IvbGliCi1XQVJOSU5HOiBRQSBJc3N1ZTogZGlyZWN0ZmI6IC93b3JrL2k1ODYtcG9reS1saW51eC9kaXJlY3RmYi0xLjQuMTUtcjEvcGFja2FnZXMtc3BsaXQvZGlyZWN0ZmIvdXNyL2xpYi9kaXJlY3RmYi0xLjQtNi9pbnRlcmZhY2VzL0lEaXJlY3RGQlZpZGVvUHJvdmlkZXIvbGliaWRpcmVjdGZidmlkZW9wcm92aWRlcl92NGwuc28gY29udGFpbnMgcHJvYmFibHktcmVkdW5kYW50IFJQQVRIIC91c3IvbGliCi1XQVJOSU5HOiBRQSBJc3N1ZTogZGlyZWN0ZmI6IC93b3JrL2k1ODYtcG9reS1saW51eC9kaXJlY3RmYi0xLjQuMTUtcjEvcGFja2FnZXMtc3BsaXQvZGlyZWN0ZmIvdXNyL2xpYi9kaXJlY3RmYi0xLjQtNi9pbnRlcmZhY2VzL0lEaXJlY3RGQlZpZGVvUHJvdmlkZXIvbGliaWRpcmVjdGZidmlkZW9wcm92aWRlcl9naWYuc28gY29udGFpbnMgcHJvYmFibHktcmVkdW5kYW50IFJQQVRIIC91c3IvbGliCi1XQVJOSU5HOiBRQSBJc3N1ZTogZGlyZWN0ZmI6IC93b3JrL2k1ODYtcG9reS1saW51eC9kaXJlY3RmYi0xLjQuMTUtcjEvcGFja2FnZXMtc3BsaXQvZGlyZWN0ZmIvdXNyL2xpYi9kaXJlY3RmYi0xLjQtNi9pbnRlcmZhY2VzL0lDb3JlUmVzb3VyY2VNYW5hZ2VyL2xpYmljb3JlcmVzb3VyY2VtYW5hZ2VyX3Rlc3Quc28gY29udGFpbnMgcHJvYmFibHktcmVkdW5kYW50IFJQQVRIIC91c3IvbGliCi1XQVJOSU5HOiBRQSBJc3N1ZTogZGlyZWN0ZmI6IC93b3JrL2k1ODYtcG9reS1saW51eC9kaXJlY3RmYi0xLjQuMTUtcjEvcGFja2FnZXMtc3BsaXQvZGlyZWN0ZmIvdXNyL2xpYi9kaXJlY3RmYi0xLjQtNi9pbnRlcmZhY2VzL0lEaXJlY3RGQkltYWdlUHJvdmlkZXIvbGliaWRpcmVjdGZiaW1hZ2Vwcm92aWRlcl9qcGVnLnNvIGNvbnRhaW5zIHByb2JhYmx5LXJlZHVuZGFudCBSUEFUSCAvdXNyL2xpYgotV0FSTklORzogUUEgSXNzdWU6IGRpcmVjdGZiOiAvd29yay9pNTg2LXBva3ktbGludXgvZGlyZWN0ZmItMS40LjE1LXIxL3BhY2thZ2VzLXNwbGl0L2RpcmVjdGZiL3Vzci9saWIvZGlyZWN0ZmItMS40LTYvaW50ZXJmYWNlcy9JRGlyZWN0RkJJbWFnZVByb3ZpZGVyL2xpYmlkaXJlY3RmYmltYWdlcHJvdmlkZXJfcG5nLnNvIGNvbnRhaW5zIHByb2JhYmx5LXJlZHVuZGFudCBSUEFUSCAvdXNyL2xpYgotV0FSTklORzogUUEgSXNzdWU6IGRpcmVjdGZiOiAvd29yay9pNTg2LXBva3ktbGludXgvZGlyZWN0ZmItMS40LjE1LXIxL3BhY2thZ2VzLXNwbGl0L2RpcmVjdGZiL3Vzci9saWIvZGlyZWN0ZmItMS40LTYvaW50ZXJmYWNlcy9JRGlyZWN0RkJJbWFnZVByb3ZpZGVyL2xpYmlkaXJlY3RmYmltYWdlcHJvdmlkZXJfZGZpZmYuc28gY29udGFpbnMgcHJvYmFibHktcmVkdW5kYW50IFJQQVRIIC91c3IvbGliCi1XQVJOSU5HOiBRQSBJc3N1ZTogZGlyZWN0ZmI6IC93b3JrL2k1ODYtcG9reS1saW51eC9kaXJlY3RmYi0xLjQuMTUtcjEvcGFja2FnZXMtc3BsaXQvZGlyZWN0ZmIvdXNyL2xpYi9kaXJlY3RmYi0xLjQtNi9pbnRlcmZhY2VzL0lEaXJlY3RGQkltYWdlUHJvdmlkZXIvbGliaWRpcmVjdGZiaW1hZ2Vwcm92aWRlcl9naWYuc28gY29udGFpbnMgcHJvYmFibHktcmVkdW5kYW50IFJQQVRIIC91c3IvbGliCi1XQVJOSU5HOiBRQSBJc3N1ZTogZGlyZWN0ZmI6IC93b3JrL2k1ODYtcG9reS1saW51eC9kaXJlY3RmYi0xLjQuMTUtcjEvcGFja2FnZXMtc3BsaXQvZGlyZWN0ZmIvdXNyL2xpYi9kaXJlY3RmYi0xLjQtNi9pbnRlcmZhY2VzL0lEaXJlY3RGQkZvbnQvbGliaWRpcmVjdGZiZm9udF9mdDIuc28gY29udGFpbnMgcHJvYmFibHktcmVkdW5kYW50IFJQQVRIIC91c3IvbGliCi1XQVJOSU5HOiBRQSBJc3N1ZTogZGlyZWN0ZmI6IC93b3JrL2k1ODYtcG9reS1saW51eC9kaXJlY3RmYi0xLjQuMTUtcjEvcGFja2FnZXMtc3BsaXQvZGlyZWN0ZmIvdXNyL2xpYi9kaXJlY3RmYi0xLjQtNi9pbnRlcmZhY2VzL0lEaXJlY3RGQkZvbnQvbGliaWRpcmVjdGZiZm9udF9kZ2lmZi5zbyBjb250YWlucyBwcm9iYWJseS1yZWR1bmRhbnQgUlBBVEggL3Vzci9saWIKLVdBUk5JTkc6IFFBIElzc3VlOiBkaXJlY3RmYjogL3dvcmsvaTU4Ni1wb2t5LWxpbnV4L2RpcmVjdGZiLTEuNC4xNS1yMS9wYWNrYWdlcy1zcGxpdC9kaXJlY3RmYi91c3IvbGliL2RpcmVjdGZiLTEuNC02L3dtL2xpYmRpcmVjdGZid21fZGVmYXVsdC5zbyBjb250YWlucyBwcm9iYWJseS1yZWR1bmRhbnQgUlBBVEggL3Vzci9saWIKLVdBUk5JTkc6IFFBIElzc3VlOiBkaXJlY3RmYjogL3dvcmsvaTU4Ni1wb2t5LWxpbnV4L2RpcmVjdGZiLTEuNC4xNS1yMS9wYWNrYWdlcy1zcGxpdC9kaXJlY3RmYi91c3IvbGliL2RpcmVjdGZiLTEuNC02L2lucHV0ZHJpdmVycy9saWJkaXJlY3RmYl96eXRyb25pYy5zbyBjb250YWlucyBwcm9iYWJseS1yZWR1bmRhbnQgUlBBVEggL3Vzci9saWIKLVdBUk5JTkc6IFFBIElzc3VlOiBkaXJlY3RmYjogL3dvcmsvaTU4Ni1wb2t5LWxpbnV4L2RpcmVjdGZiLTEuNC4xNS1yMS9wYWNrYWdlcy1zcGxpdC9kaXJlY3RmYi91c3IvbGliL2RpcmVjdGZiLTEuNC02L2lucHV0ZHJpdmVycy9saWJkaXJlY3RmYl9wZW5tb3VudC5zbyBjb250YWlucyBwcm9iYWJseS1yZWR1bmRhbnQgUlBBVEggL3Vzci9saWIKLVdBUk5JTkc6IFFBIElzc3VlOiBkaXJlY3RmYjogL3dvcmsvaTU4Ni1wb2t5LWxpbnV4L2RpcmVjdGZiLTEuNC4xNS1yMS9wYWNrYWdlcy1zcGxpdC9kaXJlY3RmYi91c3IvbGliL2RpcmVjdGZiLTEuNC02L2lucHV0ZHJpdmVycy9saWJkaXJlY3RmYl9saW51eF9pbnB1dC5zbyBjb250YWlucyBwcm9iYWJseS1yZWR1bmRhbnQgUlBBVEggL3Vzci9saWIKLVdBUk5JTkc6IFFBIElzc3VlOiBkaXJlY3RmYjogL3dvcmsvaTU4Ni1wb2t5LWxpbnV4L2RpcmVjdGZiLTEuNC4xNS1yMS9wYWNrYWdlcy1zcGxpdC9kaXJlY3RmYi91c3IvbGliL2RpcmVjdGZiLTEuNC02L2lucHV0ZHJpdmVycy9saWJkaXJlY3RmYl9zZXJpYWxtb3VzZS5zbyBjb250YWlucyBwcm9iYWJseS1yZWR1bmRhbnQgUlBBVEggL3Vzci9saWIKLVdBUk5JTkc6IFFBIElzc3VlOiBkaXJlY3RmYjogL3dvcmsvaTU4Ni1wb2t5LWxpbnV4L2RpcmVjdGZiLTEuNC4xNS1yMS9wYWNrYWdlcy1zcGxpdC9kaXJlY3RmYi91c3IvbGliL2RpcmVjdGZiLTEuNC02L2lucHV0ZHJpdmVycy9saWJkaXJlY3RmYl9tdXRvdWNoLnNvIGNvbnRhaW5zIHByb2JhYmx5LXJlZHVuZGFudCBSUEFUSCAvdXNyL2xpYgotV0FSTklORzogUUEgSXNzdWU6IGRpcmVjdGZiOiAvd29yay9pNTg2LXBva3ktbGludXgvZGlyZWN0ZmItMS40LjE1LXIxL3BhY2thZ2VzLXNwbGl0L2RpcmVjdGZiL3Vzci9saWIvZGlyZWN0ZmItMS40LTYvaW5wdXRkcml2ZXJzL2xpYmRpcmVjdGZiX3RzbGliLnNvIGNvbnRhaW5zIHByb2JhYmx5LXJlZHVuZGFudCBSUEFUSCAvdXNyL2xpYgotV0FSTklORzogUUEgSXNzdWU6IGRpcmVjdGZiOiAvd29yay9pNTg2LXBva3ktbGludXgvZGlyZWN0ZmItMS40LjE1LXIxL3BhY2thZ2VzLXNwbGl0L2RpcmVjdGZiL3Vzci9saWIvZGlyZWN0ZmItMS40LTYvaW5wdXRkcml2ZXJzL2xpYmRpcmVjdGZiX2pveXN0aWNrLnNvIGNvbnRhaW5zIHByb2JhYmx5LXJlZHVuZGFudCBSUEFUSCAvdXNyL2xpYgotV0FSTklORzogUUEgSXNzdWU6IGRpcmVjdGZiOiAvd29yay9pNTg2LXBva3ktbGludXgvZGlyZWN0ZmItMS40LjE1LXIxL3BhY2thZ2VzLXNwbGl0L2RpcmVjdGZiL3Vzci9saWIvZGlyZWN0ZmItMS40LTYvaW5wdXRkcml2ZXJzL2xpYmRpcmVjdGZiX3NvbnlwaS5zbyBjb250YWlucyBwcm9iYWJseS1yZWR1bmRhbnQgUlBBVEggL3Vzci9saWIKLVdBUk5JTkc6IFFBIElzc3VlOiBkaXJlY3RmYjogL3dvcmsvaTU4Ni1wb2t5LWxpbnV4L2RpcmVjdGZiLTEuNC4xNS1yMS9wYWNrYWdlcy1zcGxpdC9kaXJlY3RmYi91c3IvbGliL2RpcmVjdGZiLTEuNC02L2lucHV0ZHJpdmVycy9saWJkaXJlY3RmYl9saXJjLnNvIGNvbnRhaW5zIHByb2JhYmx5LXJlZHVuZGFudCBSUEFUSCAvdXNyL2xpYgotV0FSTklORzogUUEgSXNzdWU6IGRpcmVjdGZiOiAvd29yay9pNTg2LXBva3ktbGludXgvZGlyZWN0ZmItMS40LjE1LXIxL3BhY2thZ2VzLXNwbGl0L2RpcmVjdGZiL3Vzci9saWIvZGlyZWN0ZmItMS40LTYvaW5wdXRkcml2ZXJzL2xpYmRpcmVjdGZiX3dtOTd4eF90cy5zbyBjb250YWlucyBwcm9iYWJseS1yZWR1bmRhbnQgUlBBVEggL3Vzci9saWIKLVdBUk5JTkc6IFFBIElzc3VlOiBkaXJlY3RmYjogL3dvcmsvaTU4Ni1wb2t5LWxpbnV4L2RpcmVjdGZiLTEuNC4xNS1yMS9wYWNrYWdlcy1zcGxpdC9kaXJlY3RmYi91c3IvbGliL2RpcmVjdGZiLTEuNC02L2lucHV0ZHJpdmVycy9saWJkaXJlY3RmYl9wczJtb3VzZS5zbyBjb250YWlucyBwcm9iYWJseS1yZWR1bmRhbnQgUlBBVEggL3Vzci9saWIKLVdBUk5JTkc6IFFBIElzc3VlOiBkaXJlY3RmYjogL3dvcmsvaTU4Ni1wb2t5LWxpbnV4L2RpcmVjdGZiLTEuNC4xNS1yMS9wYWNrYWdlcy1zcGxpdC9kaXJlY3RmYi91c3IvbGliL2RpcmVjdGZiLTEuNC02L2lucHV0ZHJpdmVycy9saWJkaXJlY3RmYl9rZXlib2FyZC5zbyBjb250YWlucyBwcm9iYWJseS1yZWR1bmRhbnQgUlBBVEggL3Vzci9saWIKLQotVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCi0KLVJQIDIwMTIvMDMvMTYKLQotSW5kZXg6IERpcmVjdEZCLTEuNC4xNS9jb25maWd1cmUuaW4KLT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tLSBEaXJlY3RGQi0xLjQuMTUub3JpZy9jb25maWd1cmUuaW4JMjAxMi0wMy0xNiAxMzozMjoyMy42OTI0MDI4NzkgKzAwMDAKLSsrKyBEaXJlY3RGQi0xLjQuMTUvY29uZmlndXJlLmluCTIwMTItMDMtMTYgMTM6MzM6MjIuMzEyNDAwOTYwICswMDAwCi1AQCAtOTcsMTMgKzk3LDYgQEAKLSBBQ19DSEVDS19TSVpFT0YobG9uZyBsb25nKQotIEFDX0NIRUNLX0ZVTkNTKGZvcmspCi0gCi0tCi0tIyMgV29yayBhcm91bmQgbGlic3R1aGwgZHVyaW5nIGNyb3NzIGJ1aWxkLi4uCi0taWYgdGVzdCAiJGhvc3QiICE9ICIkYnVpbGQiOyB0aGVuCi0tICBzeXNfbGliX2Rsc2VhcmNoX3BhdGhfc3BlYz0iIgotLSAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPSIiCi0tZmkKLS0KLSBBQ19QQVRIX1BST0dTKFBFUkwsIHBlcmw1IHBlcmwpCi0gCi0gQUNfUEFUSF9QUk9HKE1BTjJIVE1MLCBtYW4yaHRtbCwgbm8pCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL2RpcmVjdGZiL2RpcmVjdGZiL2Z1c2lvbi5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvZGlyZWN0ZmIvZGlyZWN0ZmIvZnVzaW9uLnBhdGNoCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxZjgxYTY3Li4wMDAwMDAwCi0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvZGlyZWN0ZmIvZGlyZWN0ZmIvZnVzaW9uLnBhdGNoCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotZGlyZWN0ZmI6IEZpeCBmb3IgaGFuZ3MgaW4gZGlyZWN0X3Rlc3QsIGZ1c2lvbl9za2lybWlzaCBvbiBleGl0Ci0KLVVwc3RyZWFtLVN0YXR1czogUGVuZGluZwotU2lnbmVkLW9mZi1ieTogTGF1cmVuIFBvc3QgPGxhdXJlbi5wb3N0QGZyZWVzY2FsZS5jb20+Ci0KLS0tLSBhL2xpYi9mdXNpb24vZnVzaW9uLmMJMjAxMy0wMS0xOCAyMjo1NzoxMS4wMDAwMDAwMDAgKzA4MDAKLSsrKyBiL2xpYi9mdXNpb24vZnVzaW9uLmMJMjAxMy0wNy0wNCAxMDo0Mjo1Ni41MDI2OTkxMTkgKzA4MDAKLUBAIC0yODUzLDkgKzI4NTMsMTQgQEAKLSAgICAgICAgICAgZGlyZWN0X211dGV4X2xvY2soICZ3b3JsZC0+ZXZlbnRfZGlzcGF0Y2hlcl9tdXRleCApOwotIAotICAgICAgICAgICB3aGlsZSAoMSkgewotLSAgICAgICAgICAgICAgIGlmICghd29ybGQtPmV2ZW50X2Rpc3BhdGNoZXJfYnVmZmVycykKLSsgICAgICAgICAgICAgICBpZiAoIXdvcmxkLT5ldmVudF9kaXNwYXRjaGVyX2J1ZmZlcnMpewotICAgICAgICAgICAgICAgICAgICAgZGlyZWN0X3dhaXRxdWV1ZV93YWl0KCAmd29ybGQtPmV2ZW50X2Rpc3BhdGNoZXJfY29uZCwgJndvcmxkLT5ldmVudF9kaXNwYXRjaGVyX211dGV4ICk7Ci0tCi0rICAgICAgICAgICAgICAgICAgICBpZiAod29ybGQtPmRpc3BhdGNoX3N0b3ApIHsKLSsgICAgICAgICAgICAgICAgICAgICAgICAgRF9ERUJVR19BVCggRnVzaW9uX01haW5fRGlzcGF0Y2gsICIgIC0+IElHTk9SSU5HIChkaXNwYXRjaF9zdG9wISlcbiIgKTsKLSsgICAgICAgICAgICAgICAgICAgICAgICAgZGlyZWN0X211dGV4X3VubG9jayggJndvcmxkLT5ldmVudF9kaXNwYXRjaGVyX211dGV4ICk7Ci0rICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBOVUxMOwotKyAgICAgICAgICAgICAgICAgICAgfQotKyAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBidWYgPSAoRnVzaW9uRXZlbnREaXNwYXRjaGVyQnVmZmVyICopd29ybGQtPmV2ZW50X2Rpc3BhdGNoZXJfYnVmZmVyczsKLSAgICAgICAgICAgICAgICBEX01BR0lDX0FTU0VSVCggYnVmLCBGdXNpb25FdmVudERpc3BhdGNoZXJCdWZmZXIgKTsKLSAKLUBAIC0yODcyLDYgKzI4NzcsMTEgQEAKLSAvL0RfSU5GTygid2FpdGluZy4uLlxuIik7Ci0gICAgICAgICAgICAgICAgICAgICBEX0FTU0VSVCggYnVmLT5yZWFkX3BvcyA9PSBidWYtPndyaXRlX3BvcyApOwotICAgICAgICAgICAgICAgICAgICAgZGlyZWN0X3dhaXRxdWV1ZV93YWl0KCAmd29ybGQtPmV2ZW50X2Rpc3BhdGNoZXJfY29uZCwgJndvcmxkLT5ldmVudF9kaXNwYXRjaGVyX211dGV4ICk7Ci0rCQkgICAgICBpZiAod29ybGQtPmRpc3BhdGNoX3N0b3ApIHsKLSsgICAgICAgICAgICAgICAgICAgICAgICAgRF9ERUJVR19BVCggRnVzaW9uX01haW5fRGlzcGF0Y2gsICIgIC0+IElHTk9SSU5HIChkaXNwYXRjaF9zdG9wISlcbiIgKTsKLSsgICAgICAgICAgICAgICAgICAgICAgICAgZGlyZWN0X211dGV4X3VubG9jayggJndvcmxkLT5ldmVudF9kaXNwYXRjaGVyX211dGV4ICk7Ci0rICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBOVUxMOwotKyAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0KLSAKLSAgICAgICAgICAgICAgICBidWYgPSAoRnVzaW9uRXZlbnREaXNwYXRjaGVyQnVmZmVyICopd29ybGQtPmV2ZW50X2Rpc3BhdGNoZXJfYnVmZmVyczsKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvZGlyZWN0ZmIvZGlyZWN0ZmIvdW5pb24tc2lndmFsLnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy9kaXJlY3RmYi9kaXJlY3RmYi91bmlvbi1zaWd2YWwucGF0Y2gKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDI5ZjQ1YzcuLjAwMDAwMDAKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy9kaXJlY3RmYi9kaXJlY3RmYi91bmlvbi1zaWd2YWwucGF0Y2gKKysrIC9kZXYvbnVsbApAQCAtMSwxOSArMCwwIEBACi1UaGlzIHBhdGNoIGlzIHRha2VuIGZyb20gZ2VudG9vIG11c2wgb3ZlcmxheQotc2lndmFsX3QgaXMgZ2xpYmMgb25seSBjb25zdHJ1Y3QsIHdlIHVzZSBhIHVuaW9uIG9mIHNpZ3ZhbAotd2hpY2ggcHJldHR5IG11Y2ggaXMgc2FtZSBlZmZlY3QgYXMgc2lndmFsX3QKLQotVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCi1TaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgotCi1kaWZmIC1OYXVyIERpcmVjdEZCLTEuNy42Lm9yaWcvbGliL2RpcmVjdC9vcy9saW51eC9nbGliYy9zeXN0ZW0uYyBEaXJlY3RGQi0xLjcuNi9saWIvZGlyZWN0L29zL2xpbnV4L2dsaWJjL3N5c3RlbS5jCi0tLS0gRGlyZWN0RkItMS43LjYub3JpZy9saWIvZGlyZWN0L29zL2xpbnV4L2dsaWJjL3N5c3RlbS5jCTIwMTQtMDctMTUgMDI6NTQ6NTguMDAwMDAwMDAwIC0wNDAwCi0rKysgRGlyZWN0RkItMS43LjYvbGliL2RpcmVjdC9vcy9saW51eC9nbGliYy9zeXN0ZW0uYwkyMDE1LTA3LTE4IDE2OjU1OjM1LjA3Nzk4OTE2NiAtMDQwMAotQEAgLTExMSw3ICsxMTEsNyBAQAotIHZvaWQKLSBkaXJlY3RfdHJhcCggY29uc3QgY2hhciAqZG9tYWluLCBpbnQgc2lnICkKLSB7Ci0tICAgICBzaWd2YWxfdCB2YWw7Ci0rICAgICB1bmlvbiBzaWd2YWwgdmFsOwotIAotICAgICAgaWYgKGRpcmVjdF9jb25maWctPmRlbGF5X3RyYXBfbXMpIHsKLSAgICAgICAgICAgRF9MT0coIERpcmVjdF9UcmFwLCBWRVJCT1NFLCAiTk9UIFJBSVNJTkcgc2lnbmFsICVkIGZyb20gJXMsIHdhaXRpbmcgZm9yICVkbXMuLi4gYXR0YWNoIGdkYiAtLXBpZD0lZFxuIiwgc2lnLCBkb21haW4sIGRpcmVjdF9jb25maWctPmRlbGF5X3RyYXBfbXMsIGdldHBpZCgpICk7CmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL2RpcmVjdGZiL2RpcmVjdGZiL3VzZS1QVEhSRUFEX01VVEVYX1JFQ1VSU0lWRS5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvZGlyZWN0ZmIvZGlyZWN0ZmIvdXNlLVBUSFJFQURfTVVURVhfUkVDVVJTSVZFLnBhdGNoCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhYzQ4ZjY4Li4wMDAwMDAwCi0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvZGlyZWN0ZmIvZGlyZWN0ZmIvdXNlLVBUSFJFQURfTVVURVhfUkVDVVJTSVZFLnBhdGNoCisrKyAvZGV2L251bGwKQEAgLTEsMTE2ICswLDAgQEAKLVJlbW92ZSB1c2Ugb2YgRElSRUNUX1JFQ1VSU0lWRV9NVVRFWF9JTklUSUFMSVpFUiBpdHMgbm90IHBvcnRhYmxlCi11c2UgcG9ydGFibGUgd2F5IHRvIGluaXRpYWxpemUgcmVjdXJzaXZlIG11dGV4IHVzaW5nIHB0aHJlYWRfb25jZSgpIGFuZCBkaXJlY3RfcmVjdXJzaXZlX211dGV4X2luaXQoKQotCi1VcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKLVNpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+Ci1JbmRleDogRGlyZWN0RkItMS43LjcvbGliL2RpcmVjdC9vcy9saW51eC9nbGliYy9tdXRleC5oCi09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLS0gRGlyZWN0RkItMS43Ljcub3JpZy9saWIvZGlyZWN0L29zL2xpbnV4L2dsaWJjL211dGV4LmgKLSsrKyBEaXJlY3RGQi0xLjcuNy9saWIvZGlyZWN0L29zL2xpbnV4L2dsaWJjL211dGV4LmgKLUBAIC00Niw3ICs0Niw2IEBAIHN0cnVjdCBfX0RfRGlyZWN0TXV0ZXggewotIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotIAotICNkZWZpbmUgRElSRUNUX01VVEVYX0lOSVRJQUxJWkVSKG5hbWUpICAgICAgICAgICAgeyBQVEhSRUFEX01VVEVYX0lOSVRJQUxJWkVSIH0KLS0jZGVmaW5lIERJUkVDVF9SRUNVUlNJVkVfTVVURVhfSU5JVElBTElaRVIobmFtZSkgIHsgUFRIUkVBRF9SRUNVUlNJVkVfTVVURVhfSU5JVElBTElaRVJfTlAgfQotIAotICNlbmRpZgotIAotSW5kZXg6IERpcmVjdEZCLTEuNy43L2xpYi9kaXJlY3QvdHJhY2UuYwotPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0tIERpcmVjdEZCLTEuNy43Lm9yaWcvbGliL2RpcmVjdC90cmFjZS5jCi0rKysgRGlyZWN0RkItMS43LjcvbGliL2RpcmVjdC90cmFjZS5jCi1AQCAtODksOCArODksMTUgQEAgc3RydWN0IF9fRF9EaXJlY3RUcmFjZUJ1ZmZlciB7Ci0gLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotIAotIHN0YXRpYyBEaXJlY3RMaW5rICAqYnVmZmVyczsKLS1zdGF0aWMgRGlyZWN0TXV0ZXggIGJ1ZmZlcnNfbG9jayA9IERJUkVDVF9SRUNVUlNJVkVfTVVURVhfSU5JVElBTElaRVIoYnVmZmVyc19sb2NrKTsKLSAKLStzdGF0aWMgcHRocmVhZF9vbmNlX3QgYnVmZmVyc19sb2NrX2luaXRfb25jZSA9IFBUSFJFQURfT05DRV9JTklUOwotK3N0YXRpYyBEaXJlY3RNdXRleCBidWZmZXJzX2xvY2s7Ci0rCi0rc3RhdGljIHZvaWQKLStidWZmZXJzX2xvY2tfaW5pdCggdm9pZCApCi0rewotKyAgICAgZGlyZWN0X3JlY3Vyc2l2ZV9tdXRleF9pbml0KCZidWZmZXJzX2xvY2spOwotK30KLSAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0gCi0gX19kZmJfbm9faW5zdHJ1bWVudF9mdW5jdGlvbl9fCi1AQCAtMTEzLDYgKzEyMCw3IEBAIGdldF90cmFjZV9idWZmZXIoIHZvaWQgKQotIAotICAgICAgICAgICBEX01BR0lDX1NFVCggYnVmZmVyLCBEaXJlY3RUcmFjZUJ1ZmZlciApOwotIAotKyAgICAgICAgICBwdGhyZWFkX29uY2UoJmJ1ZmZlcnNfbG9ja19pbml0X29uY2UsIGJ1ZmZlcnNfbG9ja19pbml0KTsKLSAgICAgICAgICAgZGlyZWN0X211dGV4X2xvY2soICZidWZmZXJzX2xvY2sgKTsKLSAgICAgICAgICAgZGlyZWN0X2xpc3RfYXBwZW5kKCAmYnVmZmVycywgJmJ1ZmZlci0+bGluayApOwotICAgICAgICAgICBkaXJlY3RfbXV0ZXhfdW5sb2NrKCAmYnVmZmVyc19sb2NrICk7Ci1AQCAtMTM4LDggKzE0NiwxNCBAQCB0eXBlZGVmIHN0cnVjdCB7Ci0gfSBTeW1ib2xUYWJsZTsKLSAKLSBzdGF0aWMgRGlyZWN0TGluayAgKnRhYmxlcyAgICAgID0gTlVMTDsKLS1zdGF0aWMgRGlyZWN0TXV0ZXggIHRhYmxlc19sb2NrID0gRElSRUNUX1JFQ1VSU0lWRV9NVVRFWF9JTklUSUFMSVpFUih0YWJsZXNfbG9jayk7Ci0rc3RhdGljIHB0aHJlYWRfb25jZV90IHRhYmxlc19sb2NrX2luaXRfb25jZSA9IFBUSFJFQURfT05DRV9JTklUOwotK3N0YXRpYyBEaXJlY3RNdXRleCB0YWJsZXNfbG9jazsKLSAKLStzdGF0aWMgdm9pZAotK3RhYmxlc19sb2NrX2luaXQoIHZvaWQgKQotK3sKLSsgICAgIGRpcmVjdF9yZWN1cnNpdmVfbXV0ZXhfaW5pdCgmdGFibGVzc19sb2NrKTsKLSt9Ci0gCi0gX19kZmJfbm9faW5zdHJ1bWVudF9mdW5jdGlvbl9fCi0gc3RhdGljIHZvaWQKLUBAIC0zNzAsNiArMzg0LDcgQEAgZGlyZWN0X3RyYWNlX2xvb2t1cF9zeW1ib2woIGNvbnN0IGNoYXIgKgotICAgICAgU3ltYm9sICAgICAgKnN5bWJvbDsKLSAgICAgIFN5bWJvbFRhYmxlICp0YWJsZTsKLSAKLSsgICAgIHB0aHJlYWRfb25jZSgmdGFibGVzX2xvY2tfaW5pdF9vbmNlLCB0YWJsZXNfbG9ja19pbml0KTsKLSAgICAgIGRpcmVjdF9tdXRleF9sb2NrKCAmdGFibGVzX2xvY2sgKTsKLSAKLSAgICAgIHRhYmxlID0gZmluZF90YWJsZSggZmlsZW5hbWUgKTsKLUBAIC01MTQsNiArNTI5LDcgQEAgZGlyZWN0X3RyYWNlX3ByaW50X3N0YWNrcygpCi0gICAgICBEaXJlY3RUcmFjZUJ1ZmZlciAqYjsKLSAgICAgIERpcmVjdFRyYWNlQnVmZmVyICpidWZmZXIgPSBnZXRfdHJhY2VfYnVmZmVyKCk7Ci0gCi0rICAgICBwdGhyZWFkX29uY2UoJmJ1ZmZlcnNfbG9ja19pbml0X29uY2UsIGJ1ZmZlcnNfbG9ja19pbml0KTsKLSAgICAgIGRpcmVjdF9tdXRleF9sb2NrKCAmYnVmZmVyc19sb2NrICk7Ci0gCi0gICAgICBpZiAoYnVmZmVyICYmIGJ1ZmZlci0+bGV2ZWwpCi1AQCAtNjExLDYgKzYyNyw3IEBAIGRpcmVjdF90cmFjZV9mcmVlX2J1ZmZlciggRGlyZWN0VHJhY2VCdWYKLSAgICAgIERfTUFHSUNfQVNTRVJUKCBidWZmZXIsIERpcmVjdFRyYWNlQnVmZmVyICk7Ci0gCi0gICAgICBpZiAoYnVmZmVyLT50aHJlYWQpIHsKLSsgICAgICAgICAgcHRocmVhZF9vbmNlKCZidWZmZXJzX2xvY2tfaW5pdF9vbmNlLCBidWZmZXJzX2xvY2tfaW5pdCk7Ci0gICAgICAgICAgIGRpcmVjdF9tdXRleF9sb2NrKCAmYnVmZmVyc19sb2NrICk7Ci0gICAgICAgICAgIGRpcmVjdF9saXN0X3JlbW92ZSggJmJ1ZmZlcnMsICZidWZmZXItPmxpbmsgKTsKLSAgICAgICAgICAgZGlyZWN0X211dGV4X3VubG9jayggJmJ1ZmZlcnNfbG9jayApOwotSW5kZXg6IERpcmVjdEZCLTEuNy43L3NyYy9kaXJlY3RmYi5jCi09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLS0gRGlyZWN0RkItMS43Ljcub3JpZy9zcmMvZGlyZWN0ZmIuYwotKysrIERpcmVjdEZCLTEuNy43L3NyYy9kaXJlY3RmYi5jCi1AQCAtOTksNiArOTksMTUgQEAgY29uc3QgdW5zaWduZWQgaW50IGRpcmVjdGZiX21pY3JvX3ZlcnNpbwotIGNvbnN0IHVuc2lnbmVkIGludCBkaXJlY3RmYl9iaW5hcnlfYWdlICAgID0gRElSRUNURkJfQklOQVJZX0FHRTsKLSBjb25zdCB1bnNpZ25lZCBpbnQgZGlyZWN0ZmJfaW50ZXJmYWNlX2FnZSA9IERJUkVDVEZCX0lOVEVSRkFDRV9BR0U7Ci0gCi0rc3RhdGljIHB0aHJlYWRfb25jZV90IGxvY2tfaW5pdF9vbmNlID0gUFRIUkVBRF9PTkNFX0lOSVQ7Ci0rc3RhdGljIERpcmVjdE11dGV4IGxvY2s7Ci0rCi0rc3RhdGljIHZvaWQKLStsb2NrX2luaXQoIHZvaWQgKQotK3sKLSsgICAgIGRpcmVjdF9yZWN1cnNpdmVfbXV0ZXhfaW5pdCgmbG9jayk7Ci0rfQotKwotIGNvbnN0IGNoYXIgKgotIERpcmVjdEZCQ2hlY2tWZXJzaW9uKCB1bnNpZ25lZCBpbnQgcmVxdWlyZWRfbWFqb3IsCi0gICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCByZXF1aXJlZF9taW5vciwKLUBAIC0yMTUsOCArMjI0LDcgQEAgRGlyZWN0RkJDcmVhdGUoIElEaXJlY3RGQiAqKmludGVyZmFjZV9wdAotICAgICAgaWYgKGRmYl9jb25maWctPnJlbW90ZS5ob3N0KQotICAgICAgICAgICByZXR1cm4gQ3JlYXRlUmVtb3RlKCBkZmJfY29uZmlnLT5yZW1vdGUuaG9zdCwgZGZiX2NvbmZpZy0+cmVtb3RlLnBvcnQsIGludGVyZmFjZV9wdHIgKTsKLSAKLS0gICAgIHN0YXRpYyBEaXJlY3RNdXRleCBsb2NrID0gRElSRUNUX1JFQ1VSU0lWRV9NVVRFWF9JTklUSUFMSVpFUihsb2NrKTsKLS0KLSsgICAgIHB0aHJlYWRfb25jZSgmbG9ja19pbml0X29uY2UsIGxvY2tfaW5pdCk7Ci0gICAgICBkaXJlY3RfbXV0ZXhfbG9jayggJmxvY2sgKTsKLSAKLSAgICAgIGlmICghZGZiX2NvbmZpZy0+bm9fc2luZ2xldG9uICYmIGlkaXJlY3RmYl9zaW5nbGV0b24pIHsKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvZGlyZWN0ZmIvZGlyZWN0ZmJfMS43LjcuYmIgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL2RpcmVjdGZiL2RpcmVjdGZiXzEuNy43LmJiCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjNmMwNzBlLi4wMDAwMDAwCi0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvZGlyZWN0ZmIvZGlyZWN0ZmJfMS43LjcuYmIKKysrIC9kZXYvbnVsbApAQCAtMSw4ICswLDAgQEAKLXJlcXVpcmUgZGlyZWN0ZmIuaW5jCi0KLVJWID0gIjEuNy03IgotCi1MRUFEX1NPTkFNRSA9ICJsaWJkaXJlY3RmYi0xLjcuc28uMCIKLQotU1JDX1VSSVttZDVzdW1dID0gIjE1MmNmMTg2M2IxYTNhMjhhYTEzNzBlOTA1MzQ0MGJmIgotU1JDX1VSSVtzaGEyNTZzdW1dID0gImI3ODVjNjM4ZGMzMWI4ZmUzYTdjODFiZTE0NzVjODliMjI1NWFiM2Q2N2I3NzdjNzQ3ZDNmYmM1MmY4MDI3YTMiCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL2RybS9saWJkcm0vMDAwMS1jb25maWd1cmUuYWMtQWxsb3ctZXhwbGljaXQtZW5hYmxpbmctb2YtY3VuaXQtdGVzdHMucGF0Y2ggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL2RybS9saWJkcm0vMDAwMS1jb25maWd1cmUuYWMtQWxsb3ctZXhwbGljaXQtZW5hYmxpbmctb2YtY3VuaXQtdGVzdHMucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmY1MjYzNwotLS0gL2Rldi9udWxsCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvZHJtL2xpYmRybS8wMDAxLWNvbmZpZ3VyZS5hYy1BbGxvdy1leHBsaWNpdC1lbmFibGluZy1vZi1jdW5pdC10ZXN0cy5wYXRjaApAQCAtMCwwICsxLDU2IEBACitGcm9tIGU2YmQ0MjA1YjBiNTQ2YWZlOTkxYWU2ZjcyMjU2NjQ1ZjQ0MDRhZDQgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBKdXNzaSBLdWtrb25lbiA8anVzc2kua3Vra29uZW5AaW50ZWwuY29tPgorRGF0ZTogTW9uLCA1IFNlcCAyMDE2IDE0OjQxOjM3ICswMzAwCitTdWJqZWN0OiBbUEFUQ0ggbGliZHJtXSBjb25maWd1cmUuYWM6IEFsbG93IGV4cGxpY2l0IGVuYWJsaW5nIG9mIGN1bml0IHRlc3RzCisKK0FkZCAtLXdpdGgtY3VuaXQgdG8gbWFrZSBpdCBlYXNpZXIgdG8gZG8gcmVwcm9kdWNpYmxlIGJ1aWxkcy4gRGVmYXVsdAoraXMgc3RpbGwgdG8gcHJvYmUgY3VuaXQgYW5kIGJ1aWxkIG9wcG9ydHVuaXN0aWNhbGx5LgorCitTaWduZWQtb2ZmLWJ5OiBKdXNzaSBLdWtrb25lbiA8anVzc2kua3Vra29uZW5AaW50ZWwuY29tPgorVXBzdHJlYW0tU3RhdHVzOiBTdWJtaXR0ZWQgW21haWxpbmcgbGlzdF0KKy0tLQorIGNvbmZpZ3VyZS5hYyB8IDE0ICsrKysrKysrKysrKy0tCisgMSBmaWxlIGNoYW5nZWQsIDEyIGluc2VydGlvbnMoKyksIDIgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9jb25maWd1cmUuYWMgYi9jb25maWd1cmUuYWMKK2luZGV4IGUzMDQ4YzcuLjkxOGQyMWQgMTAwNjQ0CistLS0gYS9jb25maWd1cmUuYWMKKysrKyBiL2NvbmZpZ3VyZS5hYworQEAgLTEzNyw2ICsxMzcsMTIgQEAgQUNfQVJHX0VOQUJMRShpbnN0YWxsLXRlc3QtcHJvZ3JhbXMsCisgCQkgIFtJbnN0YWxsIHRlc3QgcHJvZ3JhbXMgKGRlZmF1bHQ6IG5vKV0pLAorIAkJICBbSU5TVEFMTF9URVNUUz0kZW5hYmxldmFsXSwgW0lOU1RBTExfVEVTVFM9bm9dKQorIAorK0FDX0FSR19XSVRIKFtjdW5pdF0sCisrICAgICAgICAgICAgW0FTX0hFTFBfU1RSSU5HKFstLXdpdGgtY3VuaXRdLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBbQnVpbGQgdGVzdHMgdGhhdCB1c2UgY3VuaXQgKGRlZmF1bHQ6IGF1dG8pXSldLAorKyAgICAgICAgICAgIFtdLAorKyAgICAgICAgICAgIFt3aXRoX2N1bml0PWF1dG9dKQorKworIGRubCA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyBkbmwgY2hlY2sgY29tcGlsZXIgZmxhZ3MKKyBBQ19ERUZVTihbTElCRFJNX0NDX1RSWV9GTEFHXSwgWworQEAgLTM3Miw3ICszNzgsNyBAQCBpZiB0ZXN0ICJ4JFJBREVPTiIgPSB4eWVzOyB0aGVuCisgCUFDX0RFRklORShIQVZFX1JBREVPTiwgMSwgW0hhdmUgcmFkZW9uIHN1cHBvcnRdKQorIGZpCisgCistaWYgdGVzdCAieCRBTURHUFUiICE9IHhubzsgdGhlbgorK2lmIHRlc3QgIngkd2l0aF9jdW5pdCIgIT0geG5vIC1hICJ4JEFNREdQVSIgIT0geG5vOyB0aGVuCisgCSMgRGV0ZWN0IGN1bml0IGxpYnJhcnkKKyAJUEtHX0NIRUNLX01PRFVMRVMoW0NVTklUXSwgW2N1bml0ID49IDIuMV0sIFtoYXZlX2N1bml0PXllc10sIFtoYXZlX2N1bml0PW5vXSkKKyAJIyBJZiBwa2ctY29uZmlnIGRvZXMgbm90IGZpbmQgY3VuaXQsIGNoZWNrIGl0IHVzaW5nIEFDX0NIRUNLX0xJQi4gIFdlCitAQCAtMzk5LDcgKzQwNiwxMSBAQCBpZiB0ZXN0ICJ4JEFNREdQVSIgPSB4eWVzOyB0aGVuCisgCUFDX0RFRklORShIQVZFX0NVTklULCBbdGVzdCAieCRoYXZlX2N1bml0IiAhPSAieG5vIl0sIFtFbmFibGUgQ1VOSVQgSGF2ZSBhbWRncHUgc3VwcG9ydF0pCisgCisgCWlmIHRlc3QgIngkaGF2ZV9jdW5pdCIgPSAieG5vIjsgdGhlbgorLQkJQUNfTVNHX1dBUk4oW0NvdWxkIG5vdCBmaW5kIGN1bml0IGxpYnJhcnkuIERpc2FibGluZyBhbWRncHUgdGVzdHNdKQorKwkJaWYgdGVzdCAieCR3aXRoX2N1bml0IiA9ICJ4eWVzIjsgdGhlbgorKwkJCUFDX01TR19FUlJPUihbQ291bGQgbm90IGZpbmQgY3VuaXQgbGlicmFyeSBidXQgLS13aXRoLWN1bml0IHdhcyBnaXZlbl0pCisrCQllbGlmIHRlc3QgIngkd2l0aF9jdW5pdCIgPSAieGF1dG8iOyB0aGVuCisrCQkJQUNfTVNHX1dBUk4oW0NvdWxkIG5vdCBmaW5kIGN1bml0IGxpYnJhcnkuIERpc2FibGluZyBhbWRncHUgdGVzdHNdKQorKwkJZmkKKyAJZmkKKyBmaQorIAorLS0gCisyLjEuNAorCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL2RybS9saWJkcm0vZml4X09fQ0xPRVhFQ191bmRlY2xhcmVkLnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy9kcm0vbGliZHJtL2ZpeF9PX0NMT0VYRUNfdW5kZWNsYXJlZC5wYXRjaAppbmRleCAyODZlNTQ4Li40NzA4YmYxIDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL2RybS9saWJkcm0vZml4X09fQ0xPRVhFQ191bmRlY2xhcmVkLnBhdGNoCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvZHJtL2xpYmRybS9maXhfT19DTE9FWEVDX3VuZGVjbGFyZWQucGF0Y2gKQEAgLTE5LDYgKzE5LDYgQEAKICAgKi8KICAKICsjaW5jbHVkZSA8Y29uZmlnLmg+CisgI2luY2x1ZGUgPGVycm5vLmg+CiAgI2luY2x1ZGUgPHN0ZGlvLmg+CiAgI2luY2x1ZGUgPHN0ZGxpYi5oPgotICNpbmNsdWRlIDxzeXMvc3RhdC5oPgpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy9kcm0vbGliZHJtXzIuNC42Ny5iYiBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvZHJtL2xpYmRybV8yLjQuNjcuYmIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGRkZDY5N2YuLjAwMDAwMDAKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy9kcm0vbGliZHJtXzIuNC42Ny5iYgorKysgL2Rldi9udWxsCkBAIC0xLDQ1ICswLDAgQEAKLVNVTU1BUlkgPSAiVXNlcnNwYWNlIGludGVyZmFjZSB0byB0aGUga2VybmVsIERSTSBzZXJ2aWNlcyIKLURFU0NSSVBUSU9OID0gIlRoZSBydW50aW1lIGxpYnJhcnkgZm9yIGFjY2Vzc2luZyB0aGUga2VybmVsIERSTSBzZXJ2aWNlcy4gIERSTSBcCi1zdGFuZHMgZm9yIFwiRGlyZWN0IFJlbmRlcmluZyBNYW5hZ2VyXCIsIHdoaWNoIGlzIHRoZSBrZXJuZWwgcG9ydGlvbiBvZiB0aGUgXAotXCJEaXJlY3QgUmVuZGVyaW5nIEluZnJhc3RydWN0dXJlXCIgKERSSSkuICBEUkkgaXMgcmVxdWlyZWQgZm9yIG1hbnkgaGFyZHdhcmUgXAotYWNjZWxlcmF0ZWQgT3BlbkdMIGRyaXZlcnMuIgotSE9NRVBBR0UgPSAiaHR0cDovL2RyaS5mcmVlZGVza3RvcC5vcmciCi1TRUNUSU9OID0gIngxMS9iYXNlIgotTElDRU5TRSA9ICJNSVQiCi1MSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly94Zjg2ZHJtLmM7YmVnaW5saW5lPTk7ZW5kbGluZT0zMjttZDU9YzhhM2I5NjFhZjc2NjdjNTMwODE2NzYxZTk0OWRjNzEiCi1QUk9WSURFUyA9ICJkcm0iCi1ERVBFTkRTID0gImxpYnB0aHJlYWQtc3R1YnMgdWRldiBsaWJwY2lhY2Nlc3MiCi0KLVNSQ19VUkkgPSAiaHR0cDovL2RyaS5mcmVlZGVza3RvcC5vcmcvbGliZHJtLyR7QlB9LnRhci5iejIgXAotICAgICAgICAgICBmaWxlOi8vaW5zdGFsbHRlc3RzLnBhdGNoIFwKLSAgICAgICAgICAgZmlsZTovL2ZpeF9PX0NMT0VYRUNfdW5kZWNsYXJlZC5wYXRjaCBcCi0gICAgICAgICAgIgotCi1TUkNfVVJJW21kNXN1bV0gPSAiYjg0NGM2YWYzNGU2MTNlYmY1MmY4MGIzY2Q4ZDcwNTUiCi1TUkNfVVJJW3NoYTI1NnN1bV0gPSAiZWU1YjcxZTExMTNiZTM3NTQ0ZDA3NTI2ODFjMTJmMDQwYzAxZjc4MmUyOTMzZGY3ZDdiYzIxZmQwZDEwY2ViZSIKLQotaW5oZXJpdCBhdXRvdG9vbHMgcGtnY29uZmlnCi0KLUVYVFJBX09FQ09ORiArPSAiLS1kaXNhYmxlLWNhaXJvLXRlc3RzIFwKLSAgICAgICAgICAgICAgICAgLS1lbmFibGUtb21hcC1leHBlcmltZW50YWwtYXBpIFwKLSAgICAgICAgICAgICAgICAgLS1lbmFibGUtaW5zdGFsbC10ZXN0LXByb2dyYW1zIFwKLSAgICAgICAgICAgICAgICAgLS1kaXNhYmxlLW1hbnBhZ2VzIFwKLSAgICAgICAgICAgICAgICAgLS1kaXNhYmxlLXZhbGdyaW5kIFwKLSAgICAgICAgICAgICAgICAiCi0KLUFMTE9XX0VNUFRZXyR7UE59LWRyaXZlcnMgPSAiMSIKLVBBQ0tBR0VTID0rICIke1BOfS10ZXN0cyAke1BOfS1kcml2ZXJzICR7UE59LXJhZGVvbiAke1BOfS1ub3V2ZWF1ICR7UE59LW9tYXAgXAotICAgICAgICAgICAgICR7UE59LWludGVsICR7UE59LWV4eW5vcyAke1BOfS1rbXMgJHtQTn0tZnJlZWRyZW5vICR7UE59LWFtZGdwdSIKLQotUlJFQ09NTUVORFNfJHtQTn0tZHJpdmVycyA9ICIke1BOfS1yYWRlb24gJHtQTn0tbm91dmVhdSAke1BOfS1vbWFwICR7UE59LWludGVsIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHtQTn0tZXh5bm9zICR7UE59LWZyZWVkcmVubyAke1BOfS1hbWRncHUiCi0KLUZJTEVTXyR7UE59LXRlc3RzID0gIiR7YmluZGlyfS8qIgotRklMRVNfJHtQTn0tcmFkZW9uID0gIiR7bGliZGlyfS9saWJkcm1fcmFkZW9uLnNvLioiCi1GSUxFU18ke1BOfS1ub3V2ZWF1ID0gIiR7bGliZGlyfS9saWJkcm1fbm91dmVhdS5zby4qIgotRklMRVNfJHtQTn0tb21hcCA9ICIke2xpYmRpcn0vbGliZHJtX29tYXAuc28uKiIKLUZJTEVTXyR7UE59LWludGVsID0gIiR7bGliZGlyfS9saWJkcm1faW50ZWwuc28uKiIKLUZJTEVTXyR7UE59LWV4eW5vcyA9ICIke2xpYmRpcn0vbGliZHJtX2V4eW5vcy5zby4qIgotRklMRVNfJHtQTn0ta21zID0gIiR7bGliZGlyfS9saWJrbXMqLnNvLioiCi1GSUxFU18ke1BOfS1mcmVlZHJlbm8gPSAiJHtsaWJkaXJ9L2xpYmRybV9mcmVlZHJlbm8uc28uKiIKLUZJTEVTXyR7UE59LWFtZGdwdSA9ICIke2xpYmRpcn0vbGliZHJtX2FtZGdwdS5zby4qIgpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy9kcm0vbGliZHJtXzIuNC43MC5iYiBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvZHJtL2xpYmRybV8yLjQuNzAuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTJiNTI4MgotLS0gL2Rldi9udWxsCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvZHJtL2xpYmRybV8yLjQuNzAuYmIKQEAgLTAsMCArMSw0NyBAQAorU1VNTUFSWSA9ICJVc2Vyc3BhY2UgaW50ZXJmYWNlIHRvIHRoZSBrZXJuZWwgRFJNIHNlcnZpY2VzIgorREVTQ1JJUFRJT04gPSAiVGhlIHJ1bnRpbWUgbGlicmFyeSBmb3IgYWNjZXNzaW5nIHRoZSBrZXJuZWwgRFJNIHNlcnZpY2VzLiAgRFJNIFwKK3N0YW5kcyBmb3IgXCJEaXJlY3QgUmVuZGVyaW5nIE1hbmFnZXJcIiwgd2hpY2ggaXMgdGhlIGtlcm5lbCBwb3J0aW9uIG9mIHRoZSBcCitcIkRpcmVjdCBSZW5kZXJpbmcgSW5mcmFzdHJ1Y3R1cmVcIiAoRFJJKS4gIERSSSBpcyByZXF1aXJlZCBmb3IgbWFueSBoYXJkd2FyZSBcCithY2NlbGVyYXRlZCBPcGVuR0wgZHJpdmVycy4iCitIT01FUEFHRSA9ICJodHRwOi8vZHJpLmZyZWVkZXNrdG9wLm9yZyIKK1NFQ1RJT04gPSAieDExL2Jhc2UiCitMSUNFTlNFID0gIk1JVCIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL3hmODZkcm0uYztiZWdpbmxpbmU9OTtlbmRsaW5lPTMyO21kNT1jOGEzYjk2MWFmNzY2N2M1MzA4MTY3NjFlOTQ5ZGM3MSIKK1BST1ZJREVTID0gImRybSIKK0RFUEVORFMgPSAibGlicHRocmVhZC1zdHVicyB1ZGV2IGxpYnBjaWFjY2VzcyIKKworU1JDX1VSSSA9ICJodHRwOi8vZHJpLmZyZWVkZXNrdG9wLm9yZy9saWJkcm0vJHtCUH0udGFyLmJ6MiBcCisgICAgICAgICAgIGZpbGU6Ly9pbnN0YWxsdGVzdHMucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vZml4X09fQ0xPRVhFQ191bmRlY2xhcmVkLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovLzAwMDEtY29uZmlndXJlLmFjLUFsbG93LWV4cGxpY2l0LWVuYWJsaW5nLW9mLWN1bml0LXRlc3RzLnBhdGNoIFwKKyAgICAgICAgICAiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICI5MjA5NTdjZmUyNWE4MGVmYjAyYmU5YmQ5MGJmM2MxZSIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICJiMTdkNGIzOWVkOTdjYTBlNGNmZmEwZGIwNmZmNjA5ZTYxN2JhYzk0NjQ2ZWMzOGU4ZTA1NzlkNTMwNTQwZTdiIgorCitpbmhlcml0IGF1dG90b29scyBwa2djb25maWcKKworRVhUUkFfT0VDT05GICs9ICItLWRpc2FibGUtY2Fpcm8tdGVzdHMgXAorICAgICAgICAgICAgICAgICAtLXdpdGhvdXQtY3VuaXQgXAorICAgICAgICAgICAgICAgICAtLWVuYWJsZS1vbWFwLWV4cGVyaW1lbnRhbC1hcGkgXAorICAgICAgICAgICAgICAgICAtLWVuYWJsZS1pbnN0YWxsLXRlc3QtcHJvZ3JhbXMgXAorICAgICAgICAgICAgICAgICAtLWRpc2FibGUtbWFucGFnZXMgXAorICAgICAgICAgICAgICAgICAtLWRpc2FibGUtdmFsZ3JpbmQgXAorICAgICAgICAgICAgICAgICIKKworQUxMT1dfRU1QVFlfJHtQTn0tZHJpdmVycyA9ICIxIgorUEFDS0FHRVMgPSsgIiR7UE59LXRlc3RzICR7UE59LWRyaXZlcnMgJHtQTn0tcmFkZW9uICR7UE59LW5vdXZlYXUgJHtQTn0tb21hcCBcCisgICAgICAgICAgICAgJHtQTn0taW50ZWwgJHtQTn0tZXh5bm9zICR7UE59LWttcyAke1BOfS1mcmVlZHJlbm8gJHtQTn0tYW1kZ3B1IgorCitSUkVDT01NRU5EU18ke1BOfS1kcml2ZXJzID0gIiR7UE59LXJhZGVvbiAke1BOfS1ub3V2ZWF1ICR7UE59LW9tYXAgJHtQTn0taW50ZWwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAke1BOfS1leHlub3MgJHtQTn0tZnJlZWRyZW5vICR7UE59LWFtZGdwdSIKKworRklMRVNfJHtQTn0tdGVzdHMgPSAiJHtiaW5kaXJ9LyoiCitGSUxFU18ke1BOfS1yYWRlb24gPSAiJHtsaWJkaXJ9L2xpYmRybV9yYWRlb24uc28uKiIKK0ZJTEVTXyR7UE59LW5vdXZlYXUgPSAiJHtsaWJkaXJ9L2xpYmRybV9ub3V2ZWF1LnNvLioiCitGSUxFU18ke1BOfS1vbWFwID0gIiR7bGliZGlyfS9saWJkcm1fb21hcC5zby4qIgorRklMRVNfJHtQTn0taW50ZWwgPSAiJHtsaWJkaXJ9L2xpYmRybV9pbnRlbC5zby4qIgorRklMRVNfJHtQTn0tZXh5bm9zID0gIiR7bGliZGlyfS9saWJkcm1fZXh5bm9zLnNvLioiCitGSUxFU18ke1BOfS1rbXMgPSAiJHtsaWJkaXJ9L2xpYmttcyouc28uKiIKK0ZJTEVTXyR7UE59LWZyZWVkcmVubyA9ICIke2xpYmRpcn0vbGliZHJtX2ZyZWVkcmVuby5zby4qIgorRklMRVNfJHtQTn0tYW1kZ3B1ID0gIiR7bGliZGlyfS9saWJkcm1fYW1kZ3B1LnNvLioiCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL2ZvbnRjb25maWcvZm9udGNvbmZpZy8wMDAxLVJldmVydC1jaGFuZ2VzLW1hZGUtdG8tRmNDb25maWdBcHBGb250QWRkRGlyLXJlY2VudGwucGF0Y2ggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL2ZvbnRjb25maWcvZm9udGNvbmZpZy8wMDAxLVJldmVydC1jaGFuZ2VzLW1hZGUtdG8tRmNDb25maWdBcHBGb250QWRkRGlyLXJlY2VudGwucGF0Y2gKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGYyZmQ1ZDQuLjAwMDAwMDAKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy9mb250Y29uZmlnL2ZvbnRjb25maWcvMDAwMS1SZXZlcnQtY2hhbmdlcy1tYWRlLXRvLUZjQ29uZmlnQXBwRm9udEFkZERpci1yZWNlbnRsLnBhdGNoCisrKyAvZGV2L251bGwKQEAgLTEsMTMyICswLDAgQEAKLUZyb20gNDZlYzZhNTJkNGNjNDQ3Y2MzZmY0YTEzYjIwNjdlY2I3NmM5ZGIyZSBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKLUZyb206IEJlaGRhZCBFc2ZhaGJvZCA8YmVoZGFkQGJlaGRhZC5vcmc+Ci1EYXRlOiBGcmksIDI2IEp1biAyMDE1IDE3OjAyOjEzIC0wNzAwCi1TdWJqZWN0OiBbUEFUQ0hdIFJldmVydCBjaGFuZ2VzIG1hZGUgdG8gRmNDb25maWdBcHBGb250QWRkRGlyKCkgcmVjZW50bHkKLQotSW4gMzJhYzdjNzVlOGRiMDEzNWVmMzdjZjg2ZjkyZDhiOWJlMDAwYzhiYiB0aGUgYmVoYXZpb3Igb2YKLUZjQ29uZmlnQXBwRm9udEFkZEZpbGUvRGlyKCkgd2VyZSBjaGFuZ2VkIHRvIHJldHVybiBmYWxzZQotaWYgbm90IGZvbnRzIHdlcmUgZm91bmQuICBXaGlsZSB0aGlzIGlzIHdlbGxkZWZpbmVkIGFuZCB1c2VmdWwKLWZvciBBZGRGaWxlKCksIGl0J3MgcXVpdGUgcHJvYmxlbWF0aWMgZm9yIEFkZERpcigpLiAgRm9yIGV4YW1wbGUsCi1pZiB0aGUgZGlyZWN0b3J5IGlzIGVtcHR5LCBpcyB0aGF0IGEgZmFpbHVyZSBvciBzdWNjZXNzPyAgV29yc2UsCi10aGUgZmFsc2UgdmFsdWUgZnJvbSBBZGREaXIoKSB3YXMgYmVpbmcgcHJvcGFnYXRlZCBhbGwgdGhlIHdheQotdG8gRmNJbml0KCkgcmV0dXJuaW5nIGZhbHNlIG5vdy4gIFRoaXMgb25seSBoYXBwZW5lZCB1cG9uIG1lbW9yeQotYWxsb2NhdGlvbiBmYWlsdXJlIGJlZm9yZSwgYW5kIHNvbWUgY2xpZW50cyBhc3NlcnQgdGhhdCBGY0luaXQoKQotaXMgc3VjY2Vzc2Z1bC4KLQotV2l0aCB0aGlzIGNoYW5nZSwgQWRkRGlyKCkgaXMgcmV2ZXJ0ZWQgYmFjayB0byB3aGF0IGl0IHdhcy4KLUFkZEZvbnQoKSBjaGFuZ2UgKHdoaWNoIHdhcyBhY3R1YWxseSBpbiBmY2Rpci5jKSBmcm9tIHRoZSBvcmlnaW5hbAotY29tbWl0IGlzIGxlZnQgaW4uCi0KLVVwc3RyZWFtLVN0YXR1czogYmFja3BvcnQKLQotU2lnbmVkLW9mZi1ieTogTGkgWmhvdSA8bGkuemhvdUB3aW5kcml2ZXIuY29tPgotLS0tCi0gZG9jL2ZjY29uZmlnLmZuY3MgfCAgICAyICstCi0gc3JjL2ZjY2ZnLmMgICAgICAgfCAgIDI5ICsrKysrKysrKysrLS0tLS0tLS0tLS0tLS0tLS0tCi0gc3JjL2ZjaW50LmggICAgICAgfCAgICAzIC0tLQotIHNyYy9mY3N0ci5jICAgICAgIHwgICAgOCAtLS0tLS0tLQotIDQgZmlsZXMgY2hhbmdlZCwgMTIgaW5zZXJ0aW9ucygrKSwgMzAgZGVsZXRpb25zKC0pCi0KLUluZGV4OiBmb250Y29uZmlnLTIuMTEuOTQvZG9jL2ZjY29uZmlnLmZuY3MKLT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tLSBmb250Y29uZmlnLTIuMTEuOTQub3JpZy9kb2MvZmNjb25maWcuZm5jcwotKysrIGZvbnRjb25maWctMi4xMS45NC9kb2MvZmNjb25maWcuZm5jcwotQEAgLTIzMiw3ICsyMzIsNyBAQCB0aGUgY3VycmVudCBjb25maWd1cmF0aW9uIGlzIHVzZWQuCi0gQERFU0NACi0gU2NhbnMgdGhlIHNwZWNpZmllZCBkaXJlY3RvcnkgZm9yIGZvbnRzLCBhZGRpbmcgZWFjaCBvbmUgZm91bmQgdG8gdGhlCi0gYXBwbGljYXRpb24tc3BlY2lmaWMgc2V0IG9mIGZvbnRzLiBSZXR1cm5zIEZjRmFsc2UKLS1pZiB0aGUgZm9udHMgY2Fubm90IGJlIGFkZGVkIChkdWUgdG8gYWxsb2NhdGlvbiBmYWlsdXJlIG9yIG5vIGZvbnRzIGZvdW5kKS4KLStpZiB0aGUgZm9udHMgY2Fubm90IGJlIGFkZGVkIChkdWUgdG8gYWxsb2NhdGlvbiBmYWlsdXJlKS4KLSBPdGhlcndpc2UgcmV0dXJucyBGY1RydWUuIElmIDxwYXJhbWV0ZXI+Y29uZmlnPC9wYXJhbWV0ZXI+IGlzIE5VTEwsCi0gdGhlIGN1cnJlbnQgY29uZmlndXJhdGlvbiBpcyB1c2VkLgotIEBACi1JbmRleDogZm9udGNvbmZpZy0yLjExLjk0L3NyYy9mY2NmZy5jCi09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLS0gZm9udGNvbmZpZy0yLjExLjk0Lm9yaWcvc3JjL2ZjY2ZnLmMKLSsrKyBmb250Y29uZmlnLTIuMTEuOTQvc3JjL2ZjY2ZnLmMKLUBAIC0zNjgsNyArMzY4LDYgQEAgRmNDb25maWdBZGREaXJMaXN0IChGY0NvbmZpZyAqY29uZmlnLCBGYwotICAgICBGY1N0ckxpc3QJICAgICpkaXJsaXN0OwotICAgICBGY0NoYXI4CSAgICAqZGlyOwotICAgICBGY0NhY2hlCSAgICAqY2FjaGU7Ci0tICAgIEZjQm9vbAkgICAgIHJldCA9IEZjRmFsc2U7Ci0gCi0gICAgIGRpcmxpc3QgPSBGY1N0ckxpc3RDcmVhdGUgKGRpclNldCk7Ci0gICAgIGlmICghZGlybGlzdCkKLUBAIC0zODMsMTAgKzM4Miw5IEBAIEZjQ29uZmlnQWRkRGlyTGlzdCAoRmNDb25maWcgKmNvbmZpZywgRmMKLSAJICAgIGNvbnRpbnVlOwotIAlGY0NvbmZpZ0FkZENhY2hlIChjb25maWcsIGNhY2hlLCBzZXQsIGRpclNldCk7Ci0gCUZjRGlyQ2FjaGVVbmxvYWQgKGNhY2hlKTsKLS0JcmV0ID0gRmNUcnVlOwotICAgICB9Ci0gICAgIEZjU3RyTGlzdERvbmUgKGRpcmxpc3QpOwotLSAgICByZXR1cm4gcmV0OwotKyAgICByZXR1cm4gRmNUcnVlOwotIH0KLSAKLSAvKgotQEAgLTIxOTksNyArMjE5Nyw2IEBAIEZjQ29uZmlnQXBwRm9udEFkZEZpbGUgKEZjQ29uZmlnICAgICpjb24KLSAgICAgRmNTdHJTZXQJKnN1YmRpcnM7Ci0gICAgIEZjU3RyTGlzdAkqc3VibGlzdDsKLSAgICAgRmNDaGFyOAkqc3ViZGlyOwotLSAgICBGY0Jvb2wJIHJldCA9IEZjRmFsc2U7Ci0gCi0gICAgIGlmICghY29uZmlnKQotICAgICB7Ci1AQCAtMjIyOSwxOSArMjIyNiwxNiBAQCBGY0NvbmZpZ0FwcEZvbnRBZGRGaWxlIChGY0NvbmZpZyAgICAqY29uCi0gCUZjU3RyU2V0RGVzdHJveSAoc3ViZGlycyk7Ci0gCXJldHVybiBGY0ZhbHNlOwotICAgICB9Ci0tICAgIGlmIChzdWJkaXJzLT5udW0gPT0gMCkKLS0JcmV0ID0gRmNUcnVlOwotLSAgICBlbHNlIGlmICgoc3VibGlzdCA9IEZjU3RyTGlzdENyZWF0ZSAoc3ViZGlycykpKQotKyAgICBpZiAoKHN1Ymxpc3QgPSBGY1N0ckxpc3RDcmVhdGUgKHN1YmRpcnMpKSkKLSAgICAgewotIAl3aGlsZSAoKHN1YmRpciA9IEZjU3RyTGlzdE5leHQgKHN1Ymxpc3QpKSkKLSAJewotLQkgICAgaWYgKEZjQ29uZmlnQXBwRm9udEFkZERpciAoY29uZmlnLCBzdWJkaXIpKQotLQkJcmV0ID0gRmNUcnVlOwotKwkgICAgRmNDb25maWdBcHBGb250QWRkRGlyIChjb25maWcsIHN1YmRpcik7Ci0gCX0KLSAJRmNTdHJMaXN0RG9uZSAoc3VibGlzdCk7Ci0gICAgIH0KLSAgICAgRmNTdHJTZXREZXN0cm95IChzdWJkaXJzKTsKLS0gICAgcmV0dXJuIHJldDsKLSsgICAgcmV0dXJuIEZjVHJ1ZTsKLSB9Ci0gCi0gRmNCb29sCi1AQCAtMjI1MCw3ICsyMjQ0LDYgQEAgRmNDb25maWdBcHBGb250QWRkRGlyIChGY0NvbmZpZwkgICAgKmNvbgotIHsKLSAgICAgRmNGb250U2V0CSpzZXQ7Ci0gICAgIEZjU3RyU2V0CSpkaXJzOwotLSAgICBGY0Jvb2wJIHJldCA9IEZjVHJ1ZTsKLSAKLSAgICAgaWYgKCFjb25maWcpCi0gICAgIHsKLUBAIC0yMjY5LDggKzIyNjIsOCBAQCBGY0NvbmZpZ0FwcEZvbnRBZGREaXIgKEZjQ29uZmlnCSAgICAqY29uCi0gCXNldCA9IEZjRm9udFNldENyZWF0ZSAoKTsKLSAJaWYgKCFzZXQpCi0gCXsKLS0JICAgIHJldCA9IEZjRmFsc2U7Ci0tCSAgICBnb3RvIGJhaWw7Ci0rCSAgICBGY1N0clNldERlc3Ryb3kgKGRpcnMpOwotKwkgICAgcmV0dXJuIEZjRmFsc2U7Ci0gCX0KLSAJRmNDb25maWdTZXRGb250cyAoY29uZmlnLCBzZXQsIEZjU2V0QXBwbGljYXRpb24pOwotICAgICB9Ci1AQCAtMjI3OCwxMCArMjI3MSwxMiBAQCBGY0NvbmZpZ0FwcEZvbnRBZGREaXIgKEZjQ29uZmlnCSAgICAqY29uCi0gICAgIEZjU3RyU2V0QWRkRmlsZW5hbWUgKGRpcnMsIGRpcik7Ci0gCi0gICAgIGlmICghRmNDb25maWdBZGREaXJMaXN0IChjb25maWcsIEZjU2V0QXBwbGljYXRpb24sIGRpcnMpKQotLQlyZXQgPSBGY0ZhbHNlOwotLWJhaWw6Ci0rICAgIHsKLSsJRmNTdHJTZXREZXN0cm95IChkaXJzKTsKLSsJcmV0dXJuIEZjRmFsc2U7Ci0rICAgIH0KLSAgICAgRmNTdHJTZXREZXN0cm95IChkaXJzKTsKLS0gICAgcmV0dXJuIHJldDsKLSsgICAgcmV0dXJuIEZjVHJ1ZTsKLSB9Ci0gCi0gdm9pZApkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy9mb250Y29uZmlnL2ZvbnRjb25maWdfMi4xMS45NC5iYiBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvZm9udGNvbmZpZy9mb250Y29uZmlnXzIuMTEuOTQuYmIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGI0Mjc5NDcuLjAwMDAwMDAKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy9mb250Y29uZmlnL2ZvbnRjb25maWdfMi4xMS45NC5iYgorKysgL2Rldi9udWxsCkBAIC0xLDUwICswLDAgQEAKLVNVTU1BUlkgPSAiR2VuZXJpYyBmb250IGNvbmZpZ3VyYXRpb24gbGlicmFyeSIKLURFU0NSSVBUSU9OID0gIkZvbnRjb25maWcgaXMgYSBmb250IGNvbmZpZ3VyYXRpb24gYW5kIGN1c3RvbWl6YXRpb24gbGlicmFyeSwgd2hpY2ggXAotZG9lcyBub3QgZGVwZW5kIG9uIHRoZSBYIFdpbmRvdyBTeXN0ZW0uIEl0IGlzIGRlc2lnbmVkIHRvIGxvY2F0ZSBcCi1mb250cyB3aXRoaW4gdGhlIHN5c3RlbSBhbmQgc2VsZWN0IHRoZW0gYWNjb3JkaW5nIHRvIHJlcXVpcmVtZW50cyBcCi1zcGVjaWZpZWQgYnkgYXBwbGljYXRpb25zLiBcCi1Gb250Y29uZmlnIGlzIG5vdCBhIHJhc3Rlcml6YXRpb24gbGlicmFyeSwgbm9yIGRvZXMgaXQgaW1wb3NlIGEgXAotcGFydGljdWxhciByYXN0ZXJpemF0aW9uIGxpYnJhcnkgb24gdGhlIGFwcGxpY2F0aW9uLiBUaGUgWC1zcGVjaWZpYyBcCi1saWJyYXJ5ICdYZnQnIHVzZXMgZm9udGNvbmZpZyBhbG9uZyB3aXRoIGZyZWV0eXBlIHRvIHNwZWNpZnkgYW5kIFwKLXJhc3Rlcml6ZSBmb250cy4iCi0KLUhPTUVQQUdFID0gImh0dHA6Ly93d3cuZm9udGNvbmZpZy5vcmciCi1CVUdUUkFDS0VSID0gImh0dHBzOi8vYnVncy5mcmVlZGVza3RvcC5vcmcvZW50ZXJfYnVnLmNnaT9wcm9kdWN0PWZvbnRjb25maWciCi0KLUxJQ0VOU0UgPSAiTUlULXN0eWxlICYgTUlUICYgUEQiCi1MSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT03YTA0NDllOWJjNTM3MDQwMmE5NGMwMDIwNGJlY2EzZCBcCi0gICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9zcmMvZmNmcmVldHlwZS5jO2VuZGxpbmU9NDU7bWQ1PTVkOTUxM2UzMTk2YTFmYmZkZmE5NDA1MWMwOWRmYzg0IFwKLSAgICAgICAgICAgICAgICAgICAgZmlsZTovL3NyYy9mY2NhY2hlLmM7YmVnaW5saW5lPTExOTk7ZW5kbGluZT0xMjE0O21kNT0wMzI2Y2ZlYjRhNzMzM2RkNGRkMjVmYmJjNGI5ZjI3ZiIKLQotU0VDVElPTiA9ICJsaWJzIgotCi1ERVBFTkRTID0gImV4cGF0IGZyZWV0eXBlIHpsaWIiCi0KLVNSQ19VUkkgPSAiaHR0cDovL2ZvbnRjb25maWcub3JnL3JlbGVhc2UvZm9udGNvbmZpZy0ke1BWfS50YXIuZ3ogXAotICAgICAgICAgICBmaWxlOi8vcmV2ZXJ0LXN0YXRpYy1wa2djb25maWcucGF0Y2ggXAotICAgICAgICAgICBmaWxlOi8vMDAwMS1SZXZlcnQtY2hhbmdlcy1tYWRlLXRvLUZjQ29uZmlnQXBwRm9udEFkZERpci1yZWNlbnRsLnBhdGNoIFwKLSAgICAgICAgICAgIgotU1JDX1VSSVttZDVzdW1dID0gIjQ3OWJlODcwYzdmODNmMTVmODdiYWMwODViNjFkNjQxIgotU1JDX1VSSVtzaGEyNTZzdW1dID0gIjczZjZkMzIzYzdiY2ZiZGUyNWQ3ODM5NzY3NTE5MWQ1NWI4ZjQxMzkxMzJjNmE5NDQ0NDEwZjNhMmQ4YTlhOTUiCi0KLVBBQ0tBR0VTID0rICJmb250Y29uZmlnLXV0aWxzIgotRklMRVNfJHtQTn0gPSsgIiR7ZGF0YWRpcn0veG1sLyoiCi1GSUxFU19mb250Y29uZmlnLXV0aWxzID0gIiR7YmluZGlyfS8qIgotCi0jIFdvcmsgYXJvdW5kIHBhc3QgYnJlYWthZ2UgaW4gZGViaWFuLmJiY2xhc3MKLVJQUk9WSURFU19mb250Y29uZmlnLXV0aWxzID0gImxpYmZvbnRjb25maWctdXRpbHMiCi1SUkVQTEFDRVNfZm9udGNvbmZpZy11dGlscyA9ICJsaWJmb250Y29uZmlnLXV0aWxzIgotUkNPTkZMSUNUU19mb250Y29uZmlnLXV0aWxzID0gImxpYmZvbnRjb25maWctdXRpbHMiCi1ERUJJQU5fTk9BVVRPTkFNRV9mb250Y29uZmlnLXV0aWxzID0gIjEiCi0KLWluaGVyaXQgYXV0b3Rvb2xzIHBrZ2NvbmZpZwotCi1GT05UQ09ORklHX0NBQ0hFX0RJUiA/PSAiJHtsb2NhbHN0YXRlZGlyfS9jYWNoZS9mb250Y29uZmlnIgotCi0jIGNvbW1hIHNlcGFyYXRlZCBsaXN0IG9mIGFkZGl0aW9uYWwgZGlyZWN0b3JpZXMKLSMgL3Vzci9zaGFyZS9mb250cyBpcyBhbHJlYWR5IGluY2x1ZGVkIGJ5IGRlZmF1bHQgKHlvdSBjYW4gY2hhbmdlIGl0IHdpdGggLS13aXRoLWRlZmF1bHQtZm9udHMpCi1GT05UQ09ORklHX0ZPTlRfRElSUyA/PSAibm8iCi0KLUVYVFJBX09FQ09ORiA9ICIgLS1kaXNhYmxlLWRvY3MgLS13aXRoLWRlZmF1bHQtZm9udHM9JHtkYXRhZGlyfS9mb250cyAtLXdpdGgtY2FjaGUtZGlyPSR7Rk9OVENPTkZJR19DQUNIRV9ESVJ9IC0td2l0aC1hZGQtZm9udHM9JHtGT05UQ09ORklHX0ZPTlRfRElSU30iCi0KLUJCQ0xBU1NFWFRFTkQgPSAibmF0aXZlIgpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy9mb250Y29uZmlnL2ZvbnRjb25maWdfMi4xMi4xLmJiIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy9mb250Y29uZmlnL2ZvbnRjb25maWdfMi4xMi4xLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjExNWY1NTgKLS0tIC9kZXYvbnVsbAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL2ZvbnRjb25maWcvZm9udGNvbmZpZ18yLjEyLjEuYmIKQEAgLTAsMCArMSw0OSBAQAorU1VNTUFSWSA9ICJHZW5lcmljIGZvbnQgY29uZmlndXJhdGlvbiBsaWJyYXJ5IgorREVTQ1JJUFRJT04gPSAiRm9udGNvbmZpZyBpcyBhIGZvbnQgY29uZmlndXJhdGlvbiBhbmQgY3VzdG9taXphdGlvbiBsaWJyYXJ5LCB3aGljaCBcCitkb2VzIG5vdCBkZXBlbmQgb24gdGhlIFggV2luZG93IFN5c3RlbS4gSXQgaXMgZGVzaWduZWQgdG8gbG9jYXRlIFwKK2ZvbnRzIHdpdGhpbiB0aGUgc3lzdGVtIGFuZCBzZWxlY3QgdGhlbSBhY2NvcmRpbmcgdG8gcmVxdWlyZW1lbnRzIFwKK3NwZWNpZmllZCBieSBhcHBsaWNhdGlvbnMuIFwKK0ZvbnRjb25maWcgaXMgbm90IGEgcmFzdGVyaXphdGlvbiBsaWJyYXJ5LCBub3IgZG9lcyBpdCBpbXBvc2UgYSBcCitwYXJ0aWN1bGFyIHJhc3Rlcml6YXRpb24gbGlicmFyeSBvbiB0aGUgYXBwbGljYXRpb24uIFRoZSBYLXNwZWNpZmljIFwKK2xpYnJhcnkgJ1hmdCcgdXNlcyBmb250Y29uZmlnIGFsb25nIHdpdGggZnJlZXR5cGUgdG8gc3BlY2lmeSBhbmQgXAorcmFzdGVyaXplIGZvbnRzLiIKKworSE9NRVBBR0UgPSAiaHR0cDovL3d3dy5mb250Y29uZmlnLm9yZyIKK0JVR1RSQUNLRVIgPSAiaHR0cHM6Ly9idWdzLmZyZWVkZXNrdG9wLm9yZy9lbnRlcl9idWcuY2dpP3Byb2R1Y3Q9Zm9udGNvbmZpZyIKKworTElDRU5TRSA9ICJNSVQtc3R5bGUgJiBNSVQgJiBQRCIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PTdhMDQ0OWU5YmM1MzcwNDAyYTk0YzAwMjA0YmVjYTNkIFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL3NyYy9mY2ZyZWV0eXBlLmM7ZW5kbGluZT00NTttZDU9NWQ5NTEzZTMxOTZhMWZiZmRmYTk0MDUxYzA5ZGZjODQgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vc3JjL2ZjY2FjaGUuYztiZWdpbmxpbmU9MTM2MDtlbmRsaW5lPTEzNzU7bWQ1PTAzMjZjZmViNGE3MzMzZGQ0ZGQyNWZiYmM0YjlmMjdmIgorCitTRUNUSU9OID0gImxpYnMiCisKK0RFUEVORFMgPSAiZXhwYXQgZnJlZXR5cGUgemxpYiIKKworU1JDX1VSSSA9ICJodHRwOi8vZm9udGNvbmZpZy5vcmcvcmVsZWFzZS9mb250Y29uZmlnLSR7UFZ9LnRhci5neiBcCisgICAgICAgICAgIGZpbGU6Ly9yZXZlcnQtc3RhdGljLXBrZ2NvbmZpZy5wYXRjaCBcCisgICAgICAgICAgICIKK1NSQ19VUklbbWQ1c3VtXSA9ICJjZTU1ZTUyNWMzNzE0N2VlZTE0Y2MyZGU2Y2MwOWY2YyIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICJhOWY0MmQwMzk0OWY5NDhhM2E0Zjc2MjI4N2RiYzE2ZTUzYTkyN2M5MWEwN2VlNjQyMDdlYmQ5MGE5ZTVlMjkyIgorCitQQUNLQUdFUyA9KyAiZm9udGNvbmZpZy11dGlscyIKK0ZJTEVTXyR7UE59ID0rICIke2RhdGFkaXJ9L3htbC8qIgorRklMRVNfZm9udGNvbmZpZy11dGlscyA9ICIke2JpbmRpcn0vKiIKKworIyBXb3JrIGFyb3VuZCBwYXN0IGJyZWFrYWdlIGluIGRlYmlhbi5iYmNsYXNzCitSUFJPVklERVNfZm9udGNvbmZpZy11dGlscyA9ICJsaWJmb250Y29uZmlnLXV0aWxzIgorUlJFUExBQ0VTX2ZvbnRjb25maWctdXRpbHMgPSAibGliZm9udGNvbmZpZy11dGlscyIKK1JDT05GTElDVFNfZm9udGNvbmZpZy11dGlscyA9ICJsaWJmb250Y29uZmlnLXV0aWxzIgorREVCSUFOX05PQVVUT05BTUVfZm9udGNvbmZpZy11dGlscyA9ICIxIgorCitpbmhlcml0IGF1dG90b29scyBwa2djb25maWcKKworRk9OVENPTkZJR19DQUNIRV9ESVIgPz0gIiR7bG9jYWxzdGF0ZWRpcn0vY2FjaGUvZm9udGNvbmZpZyIKKworIyBjb21tYSBzZXBhcmF0ZWQgbGlzdCBvZiBhZGRpdGlvbmFsIGRpcmVjdG9yaWVzCisjIC91c3Ivc2hhcmUvZm9udHMgaXMgYWxyZWFkeSBpbmNsdWRlZCBieSBkZWZhdWx0ICh5b3UgY2FuIGNoYW5nZSBpdCB3aXRoIC0td2l0aC1kZWZhdWx0LWZvbnRzKQorRk9OVENPTkZJR19GT05UX0RJUlMgPz0gIm5vIgorCitFWFRSQV9PRUNPTkYgPSAiIC0tZGlzYWJsZS1kb2NzIC0td2l0aC1kZWZhdWx0LWZvbnRzPSR7ZGF0YWRpcn0vZm9udHMgLS13aXRoLWNhY2hlLWRpcj0ke0ZPTlRDT05GSUdfQ0FDSEVfRElSfSAtLXdpdGgtYWRkLWZvbnRzPSR7Rk9OVENPTkZJR19GT05UX0RJUlN9IgorCitCQkNMQVNTRVhURU5EID0gIm5hdGl2ZSIKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvZnJlZXR5cGUvZnJlZXR5cGVfMi42LjMuYmIgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL2ZyZWV0eXBlL2ZyZWV0eXBlXzIuNi4zLmJiCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzZWQ5MDcwLi4wMDAwMDAwCi0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvZnJlZXR5cGUvZnJlZXR5cGVfMi42LjMuYmIKKysrIC9kZXYvbnVsbApAQCAtMSw0NiArMCwwIEBACi1TVU1NQVJZID0gIkZyZWV0eXBlIGZvbnQgcmVuZGVyaW5nIGxpYnJhcnkiCi1ERVNDUklQVElPTiA9ICJGcmVlVHlwZSBpcyBhIHNvZnR3YXJlIGZvbnQgZW5naW5lIHRoYXQgaXMgZGVzaWduZWQgdG8gYmUgc21hbGwsIGVmZmljaWVudCwgXAotaGlnaGx5IGN1c3RvbWl6YWJsZSwgYW5kIHBvcnRhYmxlIHdoaWxlIGNhcGFibGUgb2YgcHJvZHVjaW5nIGhpZ2gtcXVhbGl0eSBvdXRwdXQgKGdseXBoIFwKLWltYWdlcykuIEl0IGNhbiBiZSB1c2VkIGluIGdyYXBoaWNzIGxpYnJhcmllcywgZGlzcGxheSBzZXJ2ZXJzLCBmb250IGNvbnZlcnNpb24gdG9vbHMsIHRleHQgXAotaW1hZ2UgZ2VuZXJhdGlvbiB0b29scywgYW5kIG1hbnkgb3RoZXIgcHJvZHVjdHMgYXMgd2VsbC4iCi1IT01FUEFHRSA9ICJodHRwOi8vd3d3LmZyZWV0eXBlLm9yZy8iCi1CVUdUUkFDS0VSID0gImh0dHBzOi8vc2F2YW5uYWgubm9uZ251Lm9yZy9idWdzLz9ncm91cD1mcmVldHlwZSIKLVNFQ1RJT04gPSAibGlicyIKLQotTElDRU5TRSA9ICJGcmVlVHlwZSB8IEdQTHYyKyIKLUxJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL2RvY3MvTElDRU5TRS5UWFQ7bWQ1PTRhZjYyMjE1MDZmMjAyNzc0ZWY3NGY2NDkzMjg3OGExIFwKLSAgICAgICAgICAgICAgICAgICAgZmlsZTovL2RvY3MvRlRMLlRYVDttZDU9ZDQ3OWU4Mzc5N2Y2OTlmZTg3M2IzOGRhZGQwZmNkNGMgXAotICAgICAgICAgICAgICAgICAgICBmaWxlOi8vZG9jcy9HUEx2Mi5UWFQ7bWQ1PThlZjM4MDQ3NmY2NDJjMjBlYmY0MGZlY2IwYWRkMmVjIgotCi1TUkNfVVJJID0gIiR7U09VUkNFRk9SR0VfTUlSUk9SfS9mcmVldHlwZS9mcmVldHlwZS0ke1BWfS50YXIuYnoyIFwKLSAgICAgICAgICAgZmlsZTovL3VzZS1yaWdodC1saWJ0b29sLnBhdGNoIgotCi1TUkNfVVJJW21kNXN1bV0gPSAiMDAzN2IyNWE4YzA5MGJjOGExMjE4ZTg2N2IzMmJlYjEiCi1TUkNfVVJJW3NoYTI1NnN1bV0gPSAiMzcxZTcwN2FhNTIyYWNmNWIxNWNlOTNmMTExODNjNzI1YjhlZDFlZTg1NDZkN2IzYWY1NDk4NjMwNDU4NjNhMiIKLQotaW5oZXJpdCBhdXRvdG9vbHMgcGtnY29uZmlnIGJpbmNvbmZpZy1kaXNhYmxlZCBtdWx0aWxpYl9oZWFkZXIKLQotIyBBZGFwdCBhdXRvdG9vbHMgdG8gd29yayB3aXRoIHRoZSBtaW5pbWFsIGF1dG9jb25mIHVzYWdlIGluIGZyZWV0eXBlCi1BVVRPVE9PTFNfU0NSSVBUX1BBVEggPSAiJHtTfS9idWlsZHMvdW5peCIKLUNPTkZJR1VSRV9TQ1JJUFQgPSAiJHtTfS9jb25maWd1cmUiCi1FWFRSQV9BVVRPUkVDT05GICs9ICItLWV4Y2x1ZGU9YXV0b2hlYWRlciAtLWV4Y2x1ZGU9YXV0b21ha2UiCi0KLVBBQ0tBR0VDT05GSUcgPz89ICJ6bGliIgotCi1QQUNLQUdFQ09ORklHW2J6aXAyXSA9ICItLXdpdGgtYnppcDIsLS13aXRob3V0LWJ6aXAyLGJ6aXAyIgotIyBoYXJmYnV6eiByZXN1bHRzIGluIGEgY2lyY3VsYXIgZGVwZW5kZW5jeSBzbyBlbmFibGluZyBpcyBub24tdHJpdmlhbAotUEFDS0FHRUNPTkZJR1toYXJmYnV6el0gPSAiLS13aXRoLWhhcmZidXp6LC0td2l0aG91dC1oYXJmYnV6eixoYXJmYnV6eiIKLVBBQ0tBR0VDT05GSUdbcGl4bWFwXSA9ICItLXdpdGgtcG5nLC0td2l0aG91dC1wbmcsbGlicG5nIgotUEFDS0FHRUNPTkZJR1t6bGliXSA9ICItLXdpdGgtemxpYiwtLXdpdGhvdXQtemxpYix6bGliIgotCi1FWFRSQV9PRUNPTkYgPSAiQ0NfQlVJTEQ9JyR7QlVJTERfQ0N9JyIKLQotVEFSR0VUX0NQUEZMQUdTICs9ICItRF9GSUxFX09GRlNFVF9CSVRTPTY0IgotCi1kb19pbnN0YWxsX2FwcGVuZCgpIHsKLQlvZV9tdWx0aWxpYl9oZWFkZXIgZnJlZXR5cGUyL2ZyZWV0eXBlL2NvbmZpZy9mdGNvbmZpZy5oCi19Ci0KLUJJTkNPTkZJRyA9ICIke2JpbmRpcn0vZnJlZXR5cGUtY29uZmlnIgotCi1CQkNMQVNTRVhURU5EID0gIm5hdGl2ZSIKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvZnJlZXR5cGUvZnJlZXR5cGVfMi42LjUuYmIgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL2ZyZWV0eXBlL2ZyZWV0eXBlXzIuNi41LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk3ZGRlM2EKLS0tIC9kZXYvbnVsbAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL2ZyZWV0eXBlL2ZyZWV0eXBlXzIuNi41LmJiCkBAIC0wLDAgKzEsNDkgQEAKK1NVTU1BUlkgPSAiRnJlZXR5cGUgZm9udCByZW5kZXJpbmcgbGlicmFyeSIKK0RFU0NSSVBUSU9OID0gIkZyZWVUeXBlIGlzIGEgc29mdHdhcmUgZm9udCBlbmdpbmUgdGhhdCBpcyBkZXNpZ25lZCB0byBiZSBzbWFsbCwgZWZmaWNpZW50LCBcCitoaWdobHkgY3VzdG9taXphYmxlLCBhbmQgcG9ydGFibGUgd2hpbGUgY2FwYWJsZSBvZiBwcm9kdWNpbmcgaGlnaC1xdWFsaXR5IG91dHB1dCAoZ2x5cGggXAoraW1hZ2VzKS4gSXQgY2FuIGJlIHVzZWQgaW4gZ3JhcGhpY3MgbGlicmFyaWVzLCBkaXNwbGF5IHNlcnZlcnMsIGZvbnQgY29udmVyc2lvbiB0b29scywgdGV4dCBcCitpbWFnZSBnZW5lcmF0aW9uIHRvb2xzLCBhbmQgbWFueSBvdGhlciBwcm9kdWN0cyBhcyB3ZWxsLiIKK0hPTUVQQUdFID0gImh0dHA6Ly93d3cuZnJlZXR5cGUub3JnLyIKK0JVR1RSQUNLRVIgPSAiaHR0cHM6Ly9zYXZhbm5haC5ub25nbnUub3JnL2J1Z3MvP2dyb3VwPWZyZWV0eXBlIgorU0VDVElPTiA9ICJsaWJzIgorCitMSUNFTlNFID0gIkZyZWVUeXBlIHwgR1BMdjIrIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vZG9jcy9MSUNFTlNFLlRYVDttZDU9NGFmNjIyMTUwNmYyMDI3NzRlZjc0ZjY0OTMyODc4YTEgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vZG9jcy9GVEwuVFhUO21kNT0xM2IyNTQxMzI3NGM5YjNiMDliNjNlNDAyODIxNmZmNCBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9kb2NzL0dQTHYyLlRYVDttZDU9OGVmMzgwNDc2ZjY0MmMyMGViZjQwZmVjYjBhZGQyZWMiCisKK1NSQ19VUkkgPSAiJHtTT1VSQ0VGT1JHRV9NSVJST1J9L2ZyZWV0eXBlL2ZyZWV0eXBlLSR7UFZ9LnRhci5iejIgXAorICAgICAgICAgICBmaWxlOi8vdXNlLXJpZ2h0LWxpYnRvb2wucGF0Y2giCisKK1VQU1RSRUFNX0NIRUNLX1VSSSA9ICJodHRwOi8vc291cmNlZm9yZ2UubmV0L3Byb2plY3RzL2ZyZWV0eXBlL2ZpbGVzL2ZyZWV0eXBlMi8iCitVUFNUUkVBTV9DSEVDS19SRUdFWCA9ICIoP1A8cHZlcj5cZCsoXC5cZCspKykiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICI2YTM4Njk2NGUxOGJhMjhjYjkzMzcwZTU3YTE5MDMxYiIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICJlMjBhNmUxNDAwNzk4ZmQ1ZTNkODMxZGQ4MjFiNjFjMzViMWY5YTY0NjVkNmIxOGE1M2E5ZGY0Y2Y0NDFhY2YwIgorCitpbmhlcml0IGF1dG90b29scyBwa2djb25maWcgYmluY29uZmlnLWRpc2FibGVkIG11bHRpbGliX2hlYWRlcgorCisjIEFkYXB0IGF1dG90b29scyB0byB3b3JrIHdpdGggdGhlIG1pbmltYWwgYXV0b2NvbmYgdXNhZ2UgaW4gZnJlZXR5cGUKK0FVVE9UT09MU19TQ1JJUFRfUEFUSCA9ICIke1N9L2J1aWxkcy91bml4IgorQ09ORklHVVJFX1NDUklQVCA9ICIke1N9L2NvbmZpZ3VyZSIKK0VYVFJBX0FVVE9SRUNPTkYgKz0gIi0tZXhjbHVkZT1hdXRvaGVhZGVyIC0tZXhjbHVkZT1hdXRvbWFrZSIKKworUEFDS0FHRUNPTkZJRyA/Pz0gInpsaWIiCisKK1BBQ0tBR0VDT05GSUdbYnppcDJdID0gIi0td2l0aC1iemlwMiwtLXdpdGhvdXQtYnppcDIsYnppcDIiCisjIGhhcmZidXp6IHJlc3VsdHMgaW4gYSBjaXJjdWxhciBkZXBlbmRlbmN5IHNvIGVuYWJsaW5nIGlzIG5vbi10cml2aWFsCitQQUNLQUdFQ09ORklHW2hhcmZidXp6XSA9ICItLXdpdGgtaGFyZmJ1enosLS13aXRob3V0LWhhcmZidXp6LGhhcmZidXp6IgorUEFDS0FHRUNPTkZJR1twaXhtYXBdID0gIi0td2l0aC1wbmcsLS13aXRob3V0LXBuZyxsaWJwbmciCitQQUNLQUdFQ09ORklHW3psaWJdID0gIi0td2l0aC16bGliLC0td2l0aG91dC16bGliLHpsaWIiCisKK0VYVFJBX09FQ09ORiA9ICJDQ19CVUlMRD0nJHtCVUlMRF9DQ30nIgorCitUQVJHRVRfQ1BQRkxBR1MgKz0gIi1EX0ZJTEVfT0ZGU0VUX0JJVFM9NjQiCisKK2RvX2luc3RhbGxfYXBwZW5kKCkgeworCW9lX211bHRpbGliX2hlYWRlciBmcmVldHlwZTIvZnJlZXR5cGUvY29uZmlnL2Z0Y29uZmlnLmgKK30KKworQklOQ09ORklHID0gIiR7YmluZGlyfS9mcmVldHlwZS1jb25maWciCisKK0JCQ0xBU1NFWFRFTkQgPSAibmF0aXZlIG5hdGl2ZXNkayIKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvZ2xldy9nbGV3XzEuMTMuMC5iYiBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvZ2xldy9nbGV3XzEuMTMuMC5iYgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTI1YzQwNS4uMDAwMDAwMAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL2dsZXcvZ2xld18xLjEzLjAuYmIKKysrIC9kZXYvbnVsbApAQCAtMSw0MCArMCwwIEBACi1TVU1NQVJZID0gIk9wZW5HTCBleHRlbnNpb24gbG9hZGluZyBsaWJyYXJ5IgotREVTQ1JJUFRJT04gPSAiVGhlIE9wZW5HTCBFeHRlbnNpb24gV3JhbmdsZXIgTGlicmFyeSAoR0xFVykgaXMgYSBjcm9zcy1wbGF0Zm9ybSBvcGVuLXNvdXJjZSBDL0MrKyBleHRlbnNpb24gbG9hZGluZyBsaWJyYXJ5LiIKLUhPTUVQQUdFID0gImh0dHA6Ly9nbGV3LnNvdXJjZWZvcmdlLm5ldC8iCi1CVUdUUkFDS0VSID0gImh0dHA6Ly9zb3VyY2Vmb3JnZS5uZXQvdHJhY2tlci8/Z3JvdXBfaWQ9Njc1ODYiCi1TRUNUSU9OID0gIngxMSIKLUxJQ0VOU0UgPSAiTUlUIgotTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vTElDRU5TRS50eHQ7bWQ1PTJhYzI1MTU1OGRlNjg1YzZiOTQ3OGQ4OWJlMzE0OWMyIgotCi1ERVBFTkRTID0gInZpcnR1YWwvbGlieDExIHZpcnR1YWwvbGliZ2wgbGliZ2x1IGxpYnhleHQgbGlieGkgbGlieG11IgotCi1TUkNfVVJJID0gIiR7U09VUkNFRk9SR0VfTUlSUk9SfS9wcm9qZWN0L2dsZXcvZ2xldy8ke1BWfS9nbGV3LSR7UFZ9LnRneiBcCi0gICAgICAgICAgIGZpbGU6Ly9uby1zdHJpcC5wYXRjaCIKLQotU1JDX1VSSVttZDVzdW1dID0gIjdjYmFkYTMxNjZkMmFhZGZjNDE2OWM0MjgzNzAxMDY2IgotU1JDX1VSSVtzaGEyNTZzdW1dID0gImFhMjVkYzQ4ZWQ4NGIwYjY0YjhkNDFjZGQ0MmM4ZjQwZjE0OWMzN2ZhMmZmYTM5Y2Q5N2Y0MmM3OGQxMjhiYzciCi0KLVVQU1RSRUFNX0NIRUNLX1VSSSA9ICJodHRwOi8vc291cmNlZm9yZ2UubmV0L3Byb2plY3RzL2dsZXcvZmlsZXMvZ2xldyIKLVVQU1RSRUFNX0NIRUNLX1JFR0VYID0gIi9nbGV3Lyg/UDxwdmVyPihcZCtbXC5cLV9dKikrKS8iCi0KLWluaGVyaXQgbGliX3BhY2thZ2UgcGtnY29uZmlnIGRpc3Ryb19mZWF0dXJlc19jaGVjawotCi1SRVFVSVJFRF9ESVNUUk9fRkVBVFVSRVMgPSAieDExIgotCi0jIE92ZXJyaWRlIFNZU1RFTSB0byBhdm9pZCBjYWxsaW5nIGNvbmZpZy5ndWVzcywgd2UncmUgY3Jvc3MtY29tcGlsaW5nLiAgUGFzcwotIyBvdXIgQ0ZMQUdTIHZpYSBQT1BUIGFzIHRoYXQncyB0aGUgb3B0aW1pc2F0aW9uIHZhcmlhYmxlIGFuZCBzYWZlbHkKLSMgb3ZlcndyaXR0ZW4uCi1FWFRSQV9PRU1BS0UgPSAiU1lTVEVNPSdsaW51eCcgXAotICAgICAgICAgICAgICAgIENDPScke0NDfScgTEQ9JyR7Q0N9JyBTVFJJUD0nJyBcCi0gICAgICAgICAgICAgICAgTERGTEFHUy5FWFRSQT0nJHtMREZMQUdTfScgXAotICAgICAgICAgICAgICAgIFBPUFQ9JyR7Q0ZMQUdTfScgXAotICAgICAgICAgICAgICAgIEdMRVdfUFJFRklYPScke3ByZWZpeH0nIEJJTkRJUj0nJHtiaW5kaXJ9JyBcCi0gICAgICAgICAgICAgICAgTElCRElSPScke2xpYmRpcn0nIElOQ0RJUj0nJHtpbmNsdWRlZGlyfS9HTCciCi0KLWRvX2NvbXBpbGUoKSB7Ci0Jb2VfcnVubWFrZQotfQotCi1kb19pbnN0YWxsKCkgewotCW9lX3J1bm1ha2UgJ0RFU1RESVI9JHtEfScgaW5zdGFsbC5hbGwKLX0KZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvZ2xldy9nbGV3XzIuMC4wLmJiIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy9nbGV3L2dsZXdfMi4wLjAuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDg5ZGQ3YwotLS0gL2Rldi9udWxsCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvZ2xldy9nbGV3XzIuMC4wLmJiCkBAIC0wLDAgKzEsNDAgQEAKK1NVTU1BUlkgPSAiT3BlbkdMIGV4dGVuc2lvbiBsb2FkaW5nIGxpYnJhcnkiCitERVNDUklQVElPTiA9ICJUaGUgT3BlbkdMIEV4dGVuc2lvbiBXcmFuZ2xlciBMaWJyYXJ5IChHTEVXKSBpcyBhIGNyb3NzLXBsYXRmb3JtIG9wZW4tc291cmNlIEMvQysrIGV4dGVuc2lvbiBsb2FkaW5nIGxpYnJhcnkuIgorSE9NRVBBR0UgPSAiaHR0cDovL2dsZXcuc291cmNlZm9yZ2UubmV0LyIKK0JVR1RSQUNLRVIgPSAiaHR0cDovL3NvdXJjZWZvcmdlLm5ldC90cmFja2VyLz9ncm91cF9pZD02NzU4NiIKK1NFQ1RJT04gPSAieDExIgorTElDRU5TRSA9ICJNSVQiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9MSUNFTlNFLnR4dDttZDU9MmFjMjUxNTU4ZGU2ODVjNmI5NDc4ZDg5YmUzMTQ5YzIiCisKK0RFUEVORFMgPSAidmlydHVhbC9saWJ4MTEgdmlydHVhbC9saWJnbCBsaWJnbHUgbGlieGV4dCBsaWJ4aSBsaWJ4bXUiCisKK1NSQ19VUkkgPSAiJHtTT1VSQ0VGT1JHRV9NSVJST1J9L3Byb2plY3QvZ2xldy9nbGV3LyR7UFZ9L2dsZXctJHtQVn0udGd6IFwKKyAgICAgICAgICAgZmlsZTovL25vLXN0cmlwLnBhdGNoIgorCitTUkNfVVJJW21kNXN1bV0gPSAiMmEyY2Q3Yzk4ZjEzODU0ZDJmY2RkYWUwZDJiMjA0MTEiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiYzU3MmMzMGE0ZTY0Njg5YzM0MmJhMTYyNDEzMGFjOTg5MzZkN2FmOTBjMzEwM2Y5Y2UxMmI4YTBjNTczNjc2NCIKKworVVBTVFJFQU1fQ0hFQ0tfVVJJID0gImh0dHA6Ly9zb3VyY2Vmb3JnZS5uZXQvcHJvamVjdHMvZ2xldy9maWxlcy9nbGV3IgorVVBTVFJFQU1fQ0hFQ0tfUkVHRVggPSAiL2dsZXcvKD9QPHB2ZXI+KFxkK1tcLlwtX10qKSspLyIKKworaW5oZXJpdCBsaWJfcGFja2FnZSBwa2djb25maWcgZGlzdHJvX2ZlYXR1cmVzX2NoZWNrCisKK1JFUVVJUkVEX0RJU1RST19GRUFUVVJFUyA9ICJ4MTEiCisKKyMgT3ZlcnJpZGUgU1lTVEVNIHRvIGF2b2lkIGNhbGxpbmcgY29uZmlnLmd1ZXNzLCB3ZSdyZSBjcm9zcy1jb21waWxpbmcuICBQYXNzCisjIG91ciBDRkxBR1MgdmlhIFBPUFQgYXMgdGhhdCdzIHRoZSBvcHRpbWlzYXRpb24gdmFyaWFibGUgYW5kIHNhZmVseQorIyBvdmVyd3JpdHRlbi4KK0VYVFJBX09FTUFLRSA9ICJTWVNURU09J2xpbnV4JyBcCisgICAgICAgICAgICAgICAgQ0M9JyR7Q0N9JyBMRD0nJHtDQ30nIFNUUklQPScnIFwKKyAgICAgICAgICAgICAgICBMREZMQUdTLkVYVFJBPScke0xERkxBR1N9JyBcCisgICAgICAgICAgICAgICAgUE9QVD0nJHtDRkxBR1N9JyBcCisgICAgICAgICAgICAgICAgR0xFV19QUkVGSVg9JyR7cHJlZml4fScgQklORElSPScke2JpbmRpcn0nIFwKKyAgICAgICAgICAgICAgICBMSUJESVI9JyR7bGliZGlyfScgSU5DRElSPScke2luY2x1ZGVkaXJ9L0dMJyBQS0dESVI9JyR7bGliZGlyfS9wa2djb25maWcnIgorCitkb19jb21waWxlKCkgeworCW9lX3J1bm1ha2UKK30KKworZG9faW5zdGFsbCgpIHsKKwlvZV9ydW5tYWtlICdERVNURElSPSR7RH0nIGluc3RhbGwuYWxsCit9CmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL2hhcmZidXp6L2hhcmZidXp6XzEuMi4zLmJiIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy9oYXJmYnV6ei9oYXJmYnV6el8xLjIuMy5iYgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggY2ZlODg1Zi4uMDAwMDAwMAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL2hhcmZidXp6L2hhcmZidXp6XzEuMi4zLmJiCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotU1VNTUFSWSA9ICJUZXh0IHNoYXBpbmcgbGlicmFyeSIKLURFU0NSSVBUSU9OID0gIkhhcmZCdXp6IGlzIGFuIE9wZW5UeXBlIHRleHQgc2hhcGluZyBlbmdpbmUuIgotSE9NRVBBR0UgPSAiaHR0cDovL3d3dy5mcmVlZGVza3RvcC5vcmcvd2lraS9Tb2Z0d2FyZS9IYXJmQnV6eiIKLUJVR1RSQUNLRVIgPSAiaHR0cHM6Ly9idWdzLmZyZWVkZXNrdG9wLm9yZy9lbnRlcl9idWcuY2dpP3Byb2R1Y3Q9SGFyZkJ1enoiCi1TRUNUSU9OID0gImxpYnMiCi1MSUNFTlNFID0gIk1JVCIKLUxJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PWUwMjFkZDZkZGE2ZmYxZTZiMTA0NDAwMmZjNjYyYjliIFwKLSAgICAgICAgICAgICAgICAgICAgZmlsZTovL3NyYy9oYi11Y2RuL0NPUFlJTkc7bWQ1PTk5NGJhMGYxMjk1ZjE1YjRiZGE0OTk5YTViYmVkZGVmIFwKLSIKLQotREVQRU5EUyA9ICJnbGliLTIuMCBjYWlybyBmb250Y29uZmlnIGZyZWV0eXBlIgotCi1TUkNfVVJJID0gImh0dHA6Ly93d3cuZnJlZWRlc2t0b3Aub3JnL3NvZnR3YXJlL2hhcmZidXp6L3JlbGVhc2UvJHtCUH0udGFyLmJ6MiIKLQotU1JDX1VSSVttZDVzdW1dID0gImRhOGQ5N2UyNjJlNmVmODI4OGUxYWU3NjM2OTQyMWJkIgotU1JDX1VSSVtzaGEyNTZzdW1dID0gIjgyMTZkMjQwNGFhYWI3ZmRlODdiZTAzNjVhOTBkNjRhYTZjNTU5MjhlMTA0NTU3Y2ZjYjM3YjU0YTA5NmNiOGMiCi0KLWluaGVyaXQgYXV0b3Rvb2xzIHBrZ2NvbmZpZyBsaWJfcGFja2FnZQotCi1QQUNLQUdFQ09ORklHID8/PSAiaWN1IgotUEFDS0FHRUNPTkZJR1tpY3VdID0gIi0td2l0aC1pY3UsLS13aXRob3V0LWljdSxpY3UiCi0KLUVYVFJBX09FQ09ORiA9ICIgXAotICAgIC0td2l0aC1jYWlybyBcCi0gICAgLS13aXRoLWZvbnRjb25maWcgXAotICAgIC0td2l0aC1mcmVldHlwZSBcCi0gICAgLS13aXRoLWdsaWIgXAotICAgIC0td2l0aG91dC1ncmFwaGl0ZTIgXAotIgotCi1QQUNLQUdFUyA9KyAiJHtQTn0taWN1ICR7UE59LWljdS1kZXYiCi0KLUZJTEVTXyR7UE59LWljdSA9ICIke2xpYmRpcn0vbGliaGFyZmJ1enotaWN1LnNvLioiCi1GSUxFU18ke1BOfS1pY3UtZGV2ID0gIiR7bGliZGlyfS9saWJoYXJmYnV6ei1pY3UubGEgXAotICAgICAgICAgICAgICAgICAgICAgICAke2xpYmRpcn0vbGliaGFyZmJ1enotaWN1LnNvIFwKLSAgICAgICAgICAgICAgICAgICAgICAgJHtsaWJkaXJ9L3BrZ2NvbmZpZy9oYXJmYnV6ei1pY3UucGMgXAotIgotCi1CQkNMQVNTRVhURU5EID0gIm5hdGl2ZSIKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvaGFyZmJ1enovaGFyZmJ1enpfMS4zLjAuYmIgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL2hhcmZidXp6L2hhcmZidXp6XzEuMy4wLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYyNGM0NDMKLS0tIC9kZXYvbnVsbAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL2hhcmZidXp6L2hhcmZidXp6XzEuMy4wLmJiCkBAIC0wLDAgKzEsMzkgQEAKK1NVTU1BUlkgPSAiVGV4dCBzaGFwaW5nIGxpYnJhcnkiCitERVNDUklQVElPTiA9ICJIYXJmQnV6eiBpcyBhbiBPcGVuVHlwZSB0ZXh0IHNoYXBpbmcgZW5naW5lLiIKK0hPTUVQQUdFID0gImh0dHA6Ly93d3cuZnJlZWRlc2t0b3Aub3JnL3dpa2kvU29mdHdhcmUvSGFyZkJ1enoiCitCVUdUUkFDS0VSID0gImh0dHBzOi8vYnVncy5mcmVlZGVza3RvcC5vcmcvZW50ZXJfYnVnLmNnaT9wcm9kdWN0PUhhcmZCdXp6IgorU0VDVElPTiA9ICJsaWJzIgorTElDRU5TRSA9ICJNSVQiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT1lMDIxZGQ2ZGRhNmZmMWU2YjEwNDQwMDJmYzY2MmI5YiBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9zcmMvaGItdWNkbi9DT1BZSU5HO21kNT05OTRiYTBmMTI5NWYxNWI0YmRhNDk5OWE1YmJlZGRlZiBcCisiCisKK0RFUEVORFMgPSAiZ2xpYi0yLjAgY2Fpcm8gZm9udGNvbmZpZyBmcmVldHlwZSIKKworU1JDX1VSSSA9ICJodHRwOi8vd3d3LmZyZWVkZXNrdG9wLm9yZy9zb2Z0d2FyZS9oYXJmYnV6ei9yZWxlYXNlLyR7QlB9LnRhci5iejIiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICJhODJkNDlmZjY3MTk3YmMzYzk2ZWEzNGI5ODg4MGM1MiIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICJiMDRiZTMxNjMzZWZlZTJjYWUxZDYyZDQ2NDM0NTg3MzAyNTU0ZmE4MzcyMjQ4NDVhNjI1NjVlYzY4YTAzMzRkIgorCitpbmhlcml0IGF1dG90b29scyBwa2djb25maWcgbGliX3BhY2thZ2UgZ3RrLWRvYworCitQQUNLQUdFQ09ORklHID8/PSAiaWN1IgorUEFDS0FHRUNPTkZJR1tpY3VdID0gIi0td2l0aC1pY3UsLS13aXRob3V0LWljdSxpY3UiCisKK0VYVFJBX09FQ09ORiA9ICIgXAorICAgIC0td2l0aC1jYWlybyBcCisgICAgLS13aXRoLWZvbnRjb25maWcgXAorICAgIC0td2l0aC1mcmVldHlwZSBcCisgICAgLS13aXRoLWdsaWIgXAorICAgIC0td2l0aG91dC1ncmFwaGl0ZTIgXAorIgorCitQQUNLQUdFUyA9KyAiJHtQTn0taWN1ICR7UE59LWljdS1kZXYiCisKK0ZJTEVTXyR7UE59LWljdSA9ICIke2xpYmRpcn0vbGliaGFyZmJ1enotaWN1LnNvLioiCitGSUxFU18ke1BOfS1pY3UtZGV2ID0gIiR7bGliZGlyfS9saWJoYXJmYnV6ei1pY3UubGEgXAorICAgICAgICAgICAgICAgICAgICAgICAke2xpYmRpcn0vbGliaGFyZmJ1enotaWN1LnNvIFwKKyAgICAgICAgICAgICAgICAgICAgICAgJHtsaWJkaXJ9L3BrZ2NvbmZpZy9oYXJmYnV6ei1pY3UucGMgXAorIgorCitCQkNMQVNTRVhURU5EID0gIm5hdGl2ZSIKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvaW1hZ2VzL2NvcmUtaW1hZ2UtZGlyZWN0ZmIuYmIgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL2ltYWdlcy9jb3JlLWltYWdlLWRpcmVjdGZiLmJiCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1NjQxMTk1Li4wMDAwMDAwCi0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvaW1hZ2VzL2NvcmUtaW1hZ2UtZGlyZWN0ZmIuYmIKKysrIC9kZXYvbnVsbApAQCAtMSwxNyArMCwwIEBACi1TVU1NQVJZID0gIkFuIGltYWdlIHRoYXQgdXNlcyBEaXJlY3RGQiBpbnN0ZWFkIG9mIFgxMSIKLUxJQ0VOU0UgPSAiTUlUIgotCi0KLUxJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovLyR7Q09SRUJBU0V9L0xJQ0VOU0U7bWQ1PTRkOTJjZDM3M2FiZGEzOTM3YzJiYzQ3ZmJjNDlkNjkwIFwKLSAgICAgICAgICAgICAgICAgICAgZmlsZTovLyR7Q09SRUJBU0V9L21ldGEvQ09QWUlORy5NSVQ7bWQ1PTNkYTljZmJjYjc4OGM4MGEwMzg0MzYxYjRkZTIwNDIwIgotCi1pbmhlcml0IGNvcmUtaW1hZ2UgZGlzdHJvX2ZlYXR1cmVzX2NoZWNrCi0KLVJFUVVJUkVEX0RJU1RST19GRUFUVVJFUyA9ICJkaXJlY3RmYiIKLUNPTkZMSUNUX0RJU1RST19GRUFUVVJFUyA9ICJ4MTEiCi0KLUlNQUdFX0lOU1RBTEwgKz0gIlwKLQkke0NPUkVfSU1BR0VfQkFTRV9JTlNUQUxMfSBcCi0JcGFja2FnZWdyb3VwLWNvcmUtZnVsbC1jbWRsaW5lIFwKLQlwYWNrYWdlZ3JvdXAtY29yZS1kaXJlY3RmYiBcCi0iCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL2ltYWdlcy9jb3JlLWltYWdlLXdlc3Rvbi5iYiBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvaW1hZ2VzL2NvcmUtaW1hZ2Utd2VzdG9uLmJiCmluZGV4IDUyZTI3MWQuLmUzNjY1NWYgMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvaW1hZ2VzL2NvcmUtaW1hZ2Utd2VzdG9uLmJiCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvaW1hZ2VzL2NvcmUtaW1hZ2Utd2VzdG9uLmJiCkBAIC05LDMgKzksNCBAQAogUkVRVUlSRURfRElTVFJPX0ZFQVRVUkVTID0gIndheWxhbmQiCiAKIENPUkVfSU1BR0VfQkFTRV9JTlNUQUxMICs9ICJ3ZXN0b24gd2VzdG9uLWluaXQgd2VzdG9uLWV4YW1wbGVzIGd0ayszLWRlbW8gY2x1dHRlci0xLjAtZXhhbXBsZXMiCitDT1JFX0lNQUdFX0JBU0VfSU5TVEFMTCArPSAiJHtAYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsICd4MTEnLCAnd2VzdG9uLXh3YXlsYW5kIG1hdGNoYm94LXRlcm1pbmFsJywgJycsIGQpfSIKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvanBlZy9saWJqcGVnLXR1cmJvXzEuNS4wLmJiIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy9qcGVnL2xpYmpwZWctdHVyYm9fMS41LjAuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzllNzBkNwotLS0gL2Rldi9udWxsCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvanBlZy9saWJqcGVnLXR1cmJvXzEuNS4wLmJiCkBAIC0wLDAgKzEsNDYgQEAKK1NVTU1BUlkgPSAiSGFyZHdhcmUgYWNjZWxlcmF0ZWQgSlBFRyBjb21wcmVzc2lvbi9kZWNvbXByZXNzaW9uIGxpYnJhcnkiCitERVNDUklQVElPTiA9ICJsaWJqcGVnLXR1cmJvIGlzIGEgZGVyaXZhdGl2ZSBvZiBsaWJqcGVnIHRoYXQgdXNlcyBTSU1EIGluc3RydWN0aW9ucyAoTU1YLCBTU0UyLCBORU9OKSB0byBhY2NlbGVyYXRlIGJhc2VsaW5lIEpQRUcgY29tcHJlc3Npb24gYW5kIGRlY29tcHJlc3Npb24iCitIT01FUEFHRSA9ICJodHRwOi8vbGlianBlZy10dXJiby5vcmcvIgorCitMSUNFTlNFID0gIkJTRC0zLUNsYXVzZSIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL2NkanBlZy5oO2VuZGxpbmU9MTM7bWQ1PTA1YmFiN2M3YWQ4OTlkODViZmJhNjBkYTFhMTI3MWYyIFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL2pwZWdsaWIuaDtlbmRsaW5lPTE2O21kNT1mNjdkNzBlNTQ3YTI2NjJjMDc5NzgxYzcyZjg3N2Y3MiBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9kanBlZy5jO2VuZGxpbmU9MTE7bWQ1PWI5MGI2ZDJiNDExOWY5ZTU4MDdjZDI3M2Y1MjVkMmFmIFwKKyIKK0RFUEVORFMgPSAibmFzbS1uYXRpdmUiCisKK1NSQ19VUkkgPSAiJHtTT1VSQ0VGT1JHRV9NSVJST1J9LyR7QlBOfS8ke0JQTn0tJHtQVn0udGFyLmd6IgorU1JDX1VSSVttZDVzdW1dID0gIjNmYzVkOWI2YThiY2U5NjE2MTY1OWFlN2E5OTM5MjU3IgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjlmMzk3YzMxYTY3ZDJiMDBlZTM3NTk3ZGEyNTg5OGIwM2ViMjgyY2NkODdiMTM1YTUwYTY5OTkzYjZhMjAzNWYiCitVUFNUUkVBTV9DSEVDS19VUkkgPSAiaHR0cDovL3NvdXJjZWZvcmdlLm5ldC9wcm9qZWN0cy9saWJqcGVnLXR1cmJvL2ZpbGVzLyIKK1VQU1RSRUFNX0NIRUNLX1JFR0VYID0gIi9saWJqcGVnLXR1cmJvL2ZpbGVzLyg/UDxwdmVyPihcZCtbXC5cLV9dKikrKS8iCisKK1BFPSAiMSIKKworIyBEcm9wLWluIHJlcGxhY2VtZW50IGZvciBqcGVnCitQUk9WSURFUyA9ICJqcGVnIgorUlBST1ZJREVTXyR7UE59ICs9ICJqcGVnIgorUlJFUExBQ0VTXyR7UE59ICs9ICJqcGVnIgorUkNPTkZMSUNUU18ke1BOfSArPSAianBlZyIKKworaW5oZXJpdCBhdXRvdG9vbHMgcGtnY29uZmlnCisKKyMgV29yayBhcm91bmQgbWlzc2luZyB4MzIgQUJJIHN1cHBvcnQKK0VYVFJBX09FQ09ORl9hcHBlbmRfY2xhc3MtdGFyZ2V0ID0gIiAke0BiYi51dGlscy5jb250YWlucygiVFVORV9GRUFUVVJFUyIsICJteDMyIiwgIi0td2l0aG91dC1zaW1kIiwgIiIsIGQpfSIKKworIyBXb3JrIGFyb3VuZCBtaXNzaW5nIG5vbi1mbG9hdGluZyBwb2ludCBBQkkgc3VwcG9ydCBpbiBNSVBTCitFWFRSQV9PRUNPTkZfYXBwZW5kX2NsYXNzLXRhcmdldCA9ICIgJHtAYmIudXRpbHMuY29udGFpbnMoIk1JUFNQS0dTRlhfRlBVIiwgIi1uZiIsICItLXdpdGhvdXQtc2ltZCIsICIiLCBkKX0iCisKKyMgUHJvdmlkZSBhIHdvcmthcm91bmQgaWYgQWx0aXZlYyB1bml0IGlzIG5vdCBwcmVzZW50IGluIFBQQworRVhUUkFfT0VDT05GX2FwcGVuZF9jbGFzcy10YXJnZXRfcG93ZXJwYyA9ICIke0BiYi51dGlscy5jb250YWlucygiVFVORV9GRUFUVVJFUyIsICJhbHRpdmVjIiwgIiIsICItLXdpdGhvdXQtc2ltZCIsIGQpfSIKK0VYVFJBX09FQ09ORl9hcHBlbmRfY2xhc3MtdGFyZ2V0X3Bvd2VycGM2NCA9ICIke0BiYi51dGlscy5jb250YWlucygiVFVORV9GRUFUVVJFUyIsICJhbHRpdmVjIiwgIiIsICItLXdpdGhvdXQtc2ltZCIsIGQpfSIKKworUEFDS0FHRVMgPSsgImpwZWctdG9vbHMgbGlidHVyYm9qcGVnIgorCitERVNDUklQVElPTl9qcGVnLXRvb2xzID0gIlRoZSBqcGVnLXRvb2xzIHBhY2thZ2UgaW5jbHVkZXMgY2xpZW50IHByb2dyYW1zIHRvIGFjY2VzcyBsaWJqcGVnIGZ1bmN0aW9uYWxpdHkuICBUaGVzZSB0b29scyBhbGxvdyBmb3IgdGhlIGNvbXByZXNzaW9uLCBkZWNvbXByZXNzaW9uLCB0cmFuc2Zvcm1hdGlvbiBhbmQgZGlzcGxheSBvZiBKUEVHIGZpbGVzIGFuZCBiZW5jaG1hcmtpbmcgb2YgdGhlIGxpYmpwZWcgbGlicmFyeS4iCitGSUxFU19qcGVnLXRvb2xzID0gIiR7YmluZGlyfS8qIgorCitERVNDUklQVElPTl9saWJ0dXJib2pwZWcgPSAiQSBTSU1ELWFjY2VsZXJhdGVkIEpQRUcgY29kZWMgd2hpY2ggcHJvdmlkZXMgb25seSBUdXJib0pQRUcgQVBJcyIKK0ZJTEVTX2xpYnR1cmJvanBlZyA9ICIke2xpYmRpcn0vbGlidHVyYm9qcGVnLnNvLioiCisKK0JCQ0xBU1NFWFRFTkQgPSAibmF0aXZlIgpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy9qcGVnL2xpYmpwZWctdHVyYm9fOGQrMS40LjIuYmIgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL2pwZWcvbGlianBlZy10dXJib184ZCsxLjQuMi5iYgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDg1OTQzMS4uMDAwMDAwMAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL2pwZWcvbGlianBlZy10dXJib184ZCsxLjQuMi5iYgorKysgL2Rldi9udWxsCkBAIC0xLDQxICswLDAgQEAKLURFU0NSSVBUSU9OID0gImxpYmpwZWctdHVyYm8gaXMgYSBkZXJpdmF0aXZlIG9mIGxpYmpwZWcgdGhhdCB1c2VzIFNJTUQgaW5zdHJ1Y3Rpb25zIChNTVgsIFNTRTIsIE5FT04pIHRvIGFjY2VsZXJhdGUgYmFzZWxpbmUgSlBFRyBjb21wcmVzc2lvbiBhbmQgZGVjb21wcmVzc2lvbiIKLUhPTUVQQUdFID0gImh0dHA6Ly9saWJqcGVnLXR1cmJvLm9yZy8iCi0KLUxJQ0VOU0UgPSAiQlNELTMtQ2xhdXNlIgotTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vY2RqcGVnLmg7ZW5kbGluZT0xMjttZDU9Y2FkOTU1ZDE1MTQ1YzNmZGNlZWM2ODU1ZTA3OGU5NTMgXAotICAgICAgICAgICAgICAgICAgICBmaWxlOi8vanBlZ2xpYi5oO2VuZGxpbmU9MTQ7bWQ1PWRmYzgwM2RjNTFhZTIxMTc4ZDEzNzZlYzczYzQ0NTRkIFwKLSAgICAgICAgICAgICAgICAgICAgZmlsZTovL2RqcGVnLmM7ZW5kbGluZT05O21kNT1lOTNhOGYyMDYxZThhMGFjNzFjN2E0ODVjMTA0ODllMiBcCi0iCi0KLURFUEVORFMgPSAibmFzbS1uYXRpdmUiCi0KLUJBU0VQViA9ICIke0BkLmdldFZhcignUFYnLFRydWUpLnNwbGl0KCcrJylbMV19IgotCi1TUkNfVVJJID0gIiR7U09VUkNFRk9SR0VfTUlSUk9SfS8ke0JQTn0vJHtCUE59LSR7QkFTRVBWfS50YXIuZ3oiCi1TUkNfVVJJW21kNXN1bV0gPSAiODZiMGQ1Zjc1MDdjMmU2YzIxYzAwMjE5MTYyYzNjNDQiCi1TUkNfVVJJW3NoYTI1NnN1bV0gPSAiNTIxYmI1ZDMwNDNlN2FjMDYzY2UzMDI2ZDlhNTljYzJhYjJlOTYzNmM2NTVhMjUxNWFmNWY0NzA2MTIyMjMzZSIKLVVQU1RSRUFNX0NIRUNLX1VSSSA9ICJodHRwOi8vc291cmNlZm9yZ2UubmV0L3Byb2plY3RzL2xpYmpwZWctdHVyYm8vZmlsZXMvIgotVVBTVFJFQU1fQ0hFQ0tfUkVHRVggPSAiL2xpYmpwZWctdHVyYm8vZmlsZXMvKD9QPHB2ZXI+KFxkK1tcLlwtX10qKSspLyIKLQotUyA9ICIke1dPUktESVJ9LyR7QlBOfS0ke0JBU0VQVn0iCi0KLSMgRHJvcC1pbiByZXBsYWNlbWVudCBmb3IganBlZwotUFJPVklERVMgPSAianBlZyIKLVJQUk9WSURFU18ke1BOfSArPSAianBlZyIKLVJSRVBMQUNFU18ke1BOfSArPSAianBlZyIKLVJDT05GTElDVFNfJHtQTn0gKz0gImpwZWciCi0KLWluaGVyaXQgYXV0b3Rvb2xzIHBrZ2NvbmZpZwotCi0jIFdvcmsgYXJvdW5kIG1pc3NpbmcgeDMyIEFCSSBzdXBwb3J0Ci1FWFRSQV9PRUNPTkZfYXBwZW5kX2NsYXNzLXRhcmdldCA9ICIgJHtAYmIudXRpbHMuY29udGFpbnMoIlRVTkVfRkVBVFVSRVMiLCAibXgzMiIsICItLXdpdGhvdXQtc2ltZCIsICIiLCBkKX0iCi0KLVBBQ0tBR0VTID0rICJqcGVnLXRvb2xzIGxpYnR1cmJvanBlZyIKLQotREVTQ1JJUFRJT05fanBlZy10b29scyA9ICJUaGUganBlZy10b29scyBwYWNrYWdlIGluY2x1ZGVzIGNsaWVudCBwcm9ncmFtcyB0byBhY2Nlc3MgbGlianBlZyBmdW5jdGlvbmFsaXR5LiAgVGhlc2UgdG9vbHMgYWxsb3cgZm9yIHRoZSBjb21wcmVzc2lvbiwgZGVjb21wcmVzc2lvbiwgdHJhbnNmb3JtYXRpb24gYW5kIGRpc3BsYXkgb2YgSlBFRyBmaWxlcyBhbmQgYmVuY2htYXJraW5nIG9mIHRoZSBsaWJqcGVnIGxpYnJhcnkuIgotRklMRVNfanBlZy10b29scyA9ICIke2JpbmRpcn0vKiIKLQotREVTQ1JJUFRJT05fbGlidHVyYm9qcGVnID0gIkEgU0lNRC1hY2NlbGVyYXRlZCBKUEVHIGNvZGVjIHdoaWNoIHByb3ZpZGVzIG9ubHkgVHVyYm9KUEVHIEFQSXMiCi1GSUxFU19saWJ0dXJib2pwZWcgPSAiJHtsaWJkaXJ9L2xpYnR1cmJvanBlZy5zby4qIgotCi1CQkNMQVNTRVhURU5EID0gIm5hdGl2ZSIKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvbGlibWF0Y2hib3gvbGlibWF0Y2hib3gvbGlicG5nLnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy9saWJtYXRjaGJveC9saWJtYXRjaGJveC9saWJwbmcucGF0Y2gKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDhjZDUwN2YuLjAwMDAwMDAKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy9saWJtYXRjaGJveC9saWJtYXRjaGJveC9saWJwbmcucGF0Y2gKKysrIC9kZXYvbnVsbApAQCAtMSw2OSArMCwwIEBACi1VcHN0cmVhbS1TdGF0dXM6IEJhY2twb3J0Ci1TaWduZWQtb2ZmLWJ5OiBSb3NzIEJ1cnRvbiA8cm9zcy5idXJ0b25AaW50ZWwuY29tPgotCi1Gcm9tIDE5YzNkMjQyMDM0NzQ4YjNjNjA3NjU2ODNlMWZmNGUyZGY5NzAyMDUgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCi1Gcm9tOiBSb3NzIEJ1cnRvbiA8cm9zcy5idXJ0b25AaW50ZWwuY29tPgotRGF0ZTogVHVlLCAxMCBEZWMgMjAxMyAxMTozNzozMiArMDAwMAotU3ViamVjdDogW1BBVENIXSBjb25maWd1cmU6IGltcHJvdmUgbGlicG5nIGRldGVjdGlvbgotCi1JbnN0ZWFkIG9mIGxvb2tpbmcgZm9yICJsaWJwbmcxMiIgZXhwbGljaXRseSB0aG91Z2ggcGtnLWNvbmZpZyBhbmQgdGhlbiBmYWxsaW5nCi1iYWNrIHRvIGxpYnJhcnkgaHVudGluZywganVzdCB1c2UgcGtnLWNvbmZpZyB0byBmaW5kICJsaWJwbmciIHdoaWNoIGlzIHByb3ZpZGVkCi1ieSBib3RoIGxpYnBuZzEyIGFuZCBsaWJwbmcxNi4KLQotVGhpcyBhbHNvIG1ha2VzIHRoZSBsaWJwbmcgZGV0ZWN0aW9uIGRldGVybWluaXN0aWMuCi0KLVNpZ25lZC1vZmYtYnk6IFJvc3MgQnVydG9uIDxyb3NzLmJ1cnRvbkBpbnRlbC5jb20+Ci0tLS0KLSBjb25maWd1cmUuYWMgfCAyOSArKysrKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotIDEgZmlsZSBjaGFuZ2VkLCA1IGluc2VydGlvbnMoKyksIDI0IGRlbGV0aW9ucygtKQotCi1kaWZmIC0tZ2l0IGEvY29uZmlndXJlLmFjIGIvY29uZmlndXJlLmFjCi1pbmRleCA4YTI4MDc2Li42NWQ3Yzc5IDEwMDY0NAotLS0tIGEvY29uZmlndXJlLmFjCi0rKysgYi9jb25maWd1cmUuYWMKLUBAIC0zNCw3ICszNCw3IEBAIEFDX0FSR19FTkFCTEUoanBlZywKLSAgIGVuYWJsZV9qcGVnPSRlbmFibGV2YWwsIGVuYWJsZV9qcGVnPW5vKQotIAotIEFDX0FSR19FTkFCTEUocG5nLAotLSAgWyAgLS1kaXNhYmxlLXBuZyAgICAgICAgICAgZGlzYWJsZSBwbmcgc3VwcG9ydCBbZGVmYXVsdD1ub11dLAotKyAgWyAgLS1kaXNhYmxlLXBuZyAgICAgICAgICAgZGlzYWJsZSBQTkcgc3VwcG9ydCBbZGVmYXVsdD1lbmFibGVkXV0sCi0gICAgICBlbmFibGVfcG5nPSRlbmFibGV2YWwsIGVuYWJsZV9wbmc9eWVzICkKLSAKLSBBQ19BUkdfRU5BQkxFKGRveHlnZW4tZG9jcywgICAgIAotQEAgLTE1NiwyOSArMTU2LDEwIEBAIGZpCi0gZG5sIC0tLS0tLSBDaGVjayBmb3IgUE5HIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotIAotIGlmIHRlc3QgeCRlbmFibGVfcG5nICE9IHhubzsgdGhlbgotLSAgQUNfTVNHX0NIRUNLSU5HKGZvciBsaWJwbmcxMikKLS0gIGlmIHRlc3QgeCRQS0dfQ09ORklHICE9IHhubyAmJiAkUEtHX0NPTkZJRyAtLWV4aXN0cyBsaWJwbmcxMjsgdGhlbiAKLS0gICAgICAgIEFDX01TR19SRVNVTFQoeWVzKQotLSAgICAgICAgUE5HX0xJQlM9YCRQS0dfQ09ORklHIC0tbGlicyBsaWJwbmcxMmAKLS0JUE5HX0NGTEFHUz1gJFBLR19DT05GSUcgLS1jZmxhZ3MgbGlicG5nMTJgCi0tICAgICAgICBBQ19ERUZJTkUoVVNFX1BORywgWzFdLCBbVXNlIFBuZ10pCi0tCVNVUFBPUlRTX1BORz0xCi0tCVBOR19SRVFVSVJFRD0ibGlicG5nMTIiCi0tICBlbHNlCi0tCUFDX01TR19SRVNVTFQobm8pCi0tICAgICAgICAjIEFDX0NIRUNLX0hFQURFUlMocG5nLmgsIFsgaGF2ZV9wbmdfaD0ieWVzIiBdLCBbIGhhdmVfcG5nX2g9Im5vIiBdICkKLS0gICAgICAgIEFDX0NIRUNLX0xJQihbcG5nXSwgW3BuZ19jcmVhdGVfcmVhZF9zdHJ1Y3RdLCBbaGF2ZV9wbmc9InllcyJdLCBbaGF2ZV9wbmc9Im5vIl0pCi0tCi0tICAgICAgICBpZiB0ZXN0IHgkaGF2ZV9wbmc9eHllcyAmJiB0ZXN0IHgkaGF2ZV9wbmdfaD14eWVzOyB0aGVuIAotLSAgICAgICAgICAgIEFDX0RFRklORShVU0VfUE5HLCBbMV0sIFtVc2UgUG5nXSkKLS0JICAgIFNVUFBPUlRTX1BORz0xCi0tICAgICAgICAgICAgUE5HX0xJQlM9Ii1scG5nIC1seiIKLS0gICAgICAgICAgICBNQl9FWFRSQV9MSUJTPSIkTUJfRVhUUkFfTElCUyAkUE5HX0xJQlMiCi0tICAgICAgICBlbHNlCi0tCSAgICBBQ19NU0dfV0FSTihbKioqIENhbm5vdCBmaW5kIFBORywgZGlzYWJsaW5nIHN1cHBvcnRdKQotLSAgICAgICAgICAgIGVuYWJsZV9wbmc9bm8KLS0JZmkKLS0gIGZpCi0rICBQS0dfQ0hFQ0tfTU9EVUxFUyhQTkcsIGxpYnBuZykKLSsgIEFDX0RFRklORShVU0VfUE5HLCBbMV0sIFtVc2UgUE5HXSkKLSsgIFNVUFBPUlRTX1BORz0xCi0rICBQTkdfUkVRVUlSRUQ9ImxpYnBuZyIKLSBmaQotIAotIAotLS0gCi0xLjguNQotCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL2xpYm1hdGNoYm94L2xpYm1hdGNoYm94XzEuMTEuYmIgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL2xpYm1hdGNoYm94L2xpYm1hdGNoYm94XzEuMTEuYmIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGYyZWI2NzUuLjAwMDAwMDAKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy9saWJtYXRjaGJveC9saWJtYXRjaGJveF8xLjExLmJiCisrKyAvZGV2L251bGwKQEAgLTEsMjggKzAsMCBAQAotU1VNTUFSWSA9ICJNYXRjaGJveCB3aW5kb3cgbWFuYWdlciBjb3JlIGxpYnJhcnkiCi1TRUNUSU9OID0gIngxMS9saWJzIgotSE9NRVBBR0UgPSAiaHR0cDovL21hdGNoYm94LXByb2plY3Qub3JnLyIKLUJVR1RSQUNLRVIgPSAiaHR0cDovL2J1Z3ppbGxhLnlvY3RvcHJvamVjdC5jb20vIgotCi1MSUNFTlNFID0gIkxHUEx2MisiCi1MSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT03ZmJjMzM4MzA5YWMzOGZlZmNkNjRiMDRiYjkwM2UzNCBcCi0gICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9saWJtYi9tYmV4cC5jO2VuZGxpbmU9MjA7bWQ1PTI4YzBhZWYzYjIzZTMwODQ2NGY1ZGFlNmExMWIwZDJmIFwKLSAgICAgICAgICAgICAgICAgICAgZmlsZTovL2xpYm1iL21iZG90ZGVza3RvcC5jO2VuZGxpbmU9MjE7bWQ1PTVhMjg3MTU2YjMyMDdlODUxYzFkNjhkMDljNDM5YjUxIgotCi1ERVBFTkRTID0gInZpcnR1YWwvbGlieDExIGxpYnhleHQiCi0KLVNSQ19VUkkgPSAiaHR0cDovL2Rvd25sb2Fkcy55b2N0b3Byb2plY3Qub3JnL3JlbGVhc2VzL21hdGNoYm94LyR7QlBOfS8ke1BWfS8ke0JQTn0tJHtQVn0udGFyLmJ6MiBcCi0gICAgICAgICAgIGZpbGU6Ly9saWJwbmcucGF0Y2giCi0KLVNSQ19VUklbbWQ1c3VtXSA9ICJmYzZjYzgwN2Y1NWEzZTdjNzUyZDgwMTMxNzY4NzVkNyIKLVNSQ19VUklbc2hhMjU2c3VtXSA9ICIyNTRjYWI1MmUzMDRhMzUxMmM4ZGY0YmU1OWQ2OTBjZjM5MjFiYmI2OGEyOGVkZTdmZTI2YjkzNTM0MjE3YjUzIgotCi1pbmhlcml0IGF1dG90b29scyBwa2djb25maWcgZGlzdHJvX2ZlYXR1cmVzX2NoZWNrCi0jIGRlcGVuZHMgb24gdmlydHVhbC9saWJ4MTEKLVJFUVVJUkVEX0RJU1RST19GRUFUVVJFUyA9ICJ4MTEiCi0KLVBBQ0tBR0VDT05GSUcgPz89ICJqcGVnIHBuZyB4ZnQgeHNldHRpbmdzIgotUEFDS0FHRUNPTkZJR1tqcGVnXSA9ICItLWVuYWJsZS1qcGVnLC0tZGlzYWJsZS1qcGVnLGpwZWciCi1QQUNLQUdFQ09ORklHW3BhbmdvXSA9ICItLWVuYWJsZS1wYW5nbywtLWRpc2FibGUtcGFuZ28scGFuZ28iCi1QQUNLQUdFQ09ORklHW3BuZ10gPSAiLS1lbmFibGUtcG5nLC0tZGlzYWJsZS1wbmcsbGlicG5nIgotUEFDS0FHRUNPTkZJR1t4ZnRdID0gIi0tZW5hYmxlLXhmdCwtLWRpc2FibGUteGZ0LGxpYnhmdCIKLVBBQ0tBR0VDT05GSUdbeHNldHRpbmdzXSA9ICItLWVuYWJsZS14c2V0dGluZ3MsLS1kaXNhYmxlLXhzZXR0aW5ncyxsaWJ4c2V0dGluZ3MtY2xpZW50IgpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy9saWJtYXRjaGJveC9saWJtYXRjaGJveF8xLjEyLmJiIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy9saWJtYXRjaGJveC9saWJtYXRjaGJveF8xLjEyLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNlNDVlNDgKLS0tIC9kZXYvbnVsbAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL2xpYm1hdGNoYm94L2xpYm1hdGNoYm94XzEuMTIuYmIKQEAgLTAsMCArMSwyOCBAQAorU1VNTUFSWSA9ICJNYXRjaGJveCB3aW5kb3cgbWFuYWdlciBjb3JlIGxpYnJhcnkiCitTRUNUSU9OID0gIngxMS9saWJzIgorSE9NRVBBR0UgPSAiaHR0cDovL21hdGNoYm94LXByb2plY3Qub3JnLyIKK0JVR1RSQUNLRVIgPSAiaHR0cDovL2J1Z3ppbGxhLnlvY3RvcHJvamVjdC5jb20vIgorCitMSUNFTlNFID0gIkxHUEx2MisgJiBNSVQiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT03ZmJjMzM4MzA5YWMzOGZlZmNkNjRiMDRiYjkwM2UzNCBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9DT1BZSU5HLk1JVDttZDU9ZjQ1ZWQ5MzMyYjRmNTBhMzVhZGYyMDY1YWRkZTRjYTcgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vbGlibWIvbWJleHAuYztlbmRsaW5lPTIwO21kNT0yOGMwYWVmM2IyM2UzMDg0NjRmNWRhZTZhMTFiMGQyZiBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9saWJtYi94c2V0dGluZ3MtY2xpZW50LmM7ZW5kbGluZT0yMDttZDU9NGIxMDZhMzg3NjAyZGI4ZDkxYTUwZDVjZGZkNjUwMzEiCisKK0RFUEVORFMgPSAidmlydHVhbC9saWJ4MTEgbGlieGV4dCIKKworI1NSQ1JFViBmb3IgMS4xMgorU1JDUkVWID0gImU4NDZlZTQzNGY4ZTIzZDlkYjM4YWYxM2M1MjNmNzkxNDk1ZTBlODciCitTUkNfVVJJID0gImdpdDovL2dpdC55b2N0b3Byb2plY3Qub3JnLyR7QlBOfSIKKworUyA9ICIke1dPUktESVJ9L2dpdCIKKworaW5oZXJpdCBhdXRvdG9vbHMgcGtnY29uZmlnIGRpc3Ryb19mZWF0dXJlc19jaGVjaworIyBkZXBlbmRzIG9uIHZpcnR1YWwvbGlieDExCitSRVFVSVJFRF9ESVNUUk9fRkVBVFVSRVMgPSAieDExIgorCitQQUNLQUdFQ09ORklHID8/PSAianBlZyBwbmcgeGZ0IgorUEFDS0FHRUNPTkZJR1tqcGVnXSA9ICItLWVuYWJsZS1qcGVnLC0tZGlzYWJsZS1qcGVnLGpwZWciCitQQUNLQUdFQ09ORklHW3BhbmdvXSA9ICItLWVuYWJsZS1wYW5nbywtLWRpc2FibGUtcGFuZ28scGFuZ28iCitQQUNLQUdFQ09ORklHW3BuZ10gPSAiLS1lbmFibGUtcG5nLC0tZGlzYWJsZS1wbmcsbGlicG5nIgorUEFDS0FHRUNPTkZJR1t4ZnRdID0gIi0tZW5hYmxlLXhmdCwtLWRpc2FibGUteGZ0LGxpYnhmdCIKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvbGlic2RsMi9saWJzZGwyLzAwMDEtc3JjLXZpZGVvLW1ha2UtaXQtY29tcGF0aWJsZS13aXRoLXdheWxhbmQtMS4xMC5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvbGlic2RsMi9saWJzZGwyLzAwMDEtc3JjLXZpZGVvLW1ha2UtaXQtY29tcGF0aWJsZS13aXRoLXdheWxhbmQtMS4xMC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NGU2ZDRkCi0tLSAvZGV2L251bGwKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy9saWJzZGwyL2xpYnNkbDIvMDAwMS1zcmMtdmlkZW8tbWFrZS1pdC1jb21wYXRpYmxlLXdpdGgtd2F5bGFuZC0xLjEwLnBhdGNoCkBAIC0wLDAgKzEsNTcgQEAKK0Zyb20gYjFlZDM1MzM0MzM1MDFlYzUyYzgyODlhNWIzYTI5NGU1N2U3Zjc5OCBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IE1hcnRpbiBKYW5zYSA8bWFydGluLmphbnNhQGdtYWlsLmNvbT4KK0RhdGU6IFRodSwgMjYgTWF5IDIwMTYgMTE6MzE6NTIgKzAwMDAKK1N1YmplY3Q6IFtQQVRDSF0gc3JjL3ZpZGVvOiBtYWtlIGl0IGNvbXBhdGlibGUgd2l0aCB3YXlsYW5kIDEuMTAKKworfCBidWlsZC8ubGlicy9TRExfd2F5bGFuZGV2ZW50cy5vOiBJbiBmdW5jdGlvbiBgd2xfcmVnaXN0cnlfYmluZCc6Cit8IC91c3IvaW5jbHVkZS93YXlsYW5kLWNsaWVudC1wcm90b2NvbC5oOjMwNTogdW5kZWZpbmVkIHJlZmVyZW5jZSB0byBgd2xfcHJveHlfbWFyc2hhbF9jb25zdHJ1Y3Rvcl92ZXJzaW9uZWQnCit8IC91c3IvaW5jbHVkZS93YXlsYW5kLWNsaWVudC1wcm90b2NvbC5oOjMwNTogdW5kZWZpbmVkIHJlZmVyZW5jZSB0byBgd2xfcHJveHlfbWFyc2hhbF9jb25zdHJ1Y3Rvcl92ZXJzaW9uZWQnCit8IGJ1aWxkLy5saWJzL1NETF93YXlsYW5ka2V5Ym9hcmQubzogSW4gZnVuY3Rpb24gYHdsX3JlZ2lzdHJ5X2JpbmQnOgorfCAvdXNyL2luY2x1ZGUvd2F5bGFuZC1jbGllbnQtcHJvdG9jb2wuaDozMDU6IHVuZGVmaW5lZCByZWZlcmVuY2UgdG8gYHdsX3Byb3h5X21hcnNoYWxfY29uc3RydWN0b3JfdmVyc2lvbmVkJworfCAvdXNyL2luY2x1ZGUvd2F5bGFuZC1jbGllbnQtcHJvdG9jb2wuaDozMDU6IHVuZGVmaW5lZCByZWZlcmVuY2UgdG8gYHdsX3Byb3h5X21hcnNoYWxfY29uc3RydWN0b3JfdmVyc2lvbmVkJworfCBidWlsZC8ubGlicy9TRExfd2F5bGFuZHZpZGVvLm86IEluIGZ1bmN0aW9uIGB3bF9yZWdpc3RyeV9iaW5kJzoKK3wgL3Vzci9pbmNsdWRlL3dheWxhbmQtY2xpZW50LXByb3RvY29sLmg6MzA1OiB1bmRlZmluZWQgcmVmZXJlbmNlIHRvIGB3bF9wcm94eV9tYXJzaGFsX2NvbnN0cnVjdG9yX3ZlcnNpb25lZCcKK3wgY29sbGVjdDI6IGVycm9yOiBsZCByZXR1cm5lZCAxIGV4aXQgc3RhdHVzCit8IG1ha2U6ICoqKiBbYnVpbGQvbGliU0RMMi5sYV0gRXJyb3IgMQorfCBFUlJPUjogb2VfcnVubWFrZSBmYWlsZWQKKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCitTaWduZWQtb2ZmLWJ5OiBNYXJ0aW4gSmFuc2EgPE1hcnRpbi5KYW5zYUBnbWFpbC5jb20+CisKKy0tLQorIHNyYy92aWRlby93YXlsYW5kL1NETF93YXlsYW5kZHluLmggfCAxICsKKyBzcmMvdmlkZW8vd2F5bGFuZC9TRExfd2F5bGFuZHN5bS5oIHwgNCArKysrCisgc3JjL3ZpZGVvL3dlYm9zL1NETF93YXlsYW5kZHluLmggICB8IDEgKworIHNyYy92aWRlby93ZWJvcy9TRExfd2F5bGFuZHN5bS5oICAgfCA0ICsrKysKKyA0IGZpbGVzIGNoYW5nZWQsIDEwIGluc2VydGlvbnMoKykKKworZGlmZiAtLWdpdCBhL3NyYy92aWRlby93YXlsYW5kL1NETF93YXlsYW5kZHluLmggYi9zcmMvdmlkZW8vd2F5bGFuZC9TRExfd2F5bGFuZGR5bi5oCitpbmRleCA4ZDkzMTNhLi5jN2IwMTU3IDEwMDY0NAorLS0tIGEvc3JjL3ZpZGVvL3dheWxhbmQvU0RMX3dheWxhbmRkeW4uaAorKysrIGIvc3JjL3ZpZGVvL3dheWxhbmQvU0RMX3dheWxhbmRkeW4uaAorQEAgLTc5LDYgKzc5LDcgQEAgdm9pZCBTRExfV0FZTEFORF9VbmxvYWRTeW1ib2xzKHZvaWQpOworICNkZWZpbmUgd2xfcHJveHlfZ2V0X3VzZXJfZGF0YSAoKldBWUxBTkRfd2xfcHJveHlfZ2V0X3VzZXJfZGF0YSkKKyAjZGVmaW5lIHdsX3Byb3h5X2FkZF9saXN0ZW5lciAoKldBWUxBTkRfd2xfcHJveHlfYWRkX2xpc3RlbmVyKQorICNkZWZpbmUgd2xfcHJveHlfbWFyc2hhbF9jb25zdHJ1Y3RvciAoKldBWUxBTkRfd2xfcHJveHlfbWFyc2hhbF9jb25zdHJ1Y3RvcikKKysjZGVmaW5lIHdsX3Byb3h5X21hcnNoYWxfY29uc3RydWN0b3JfdmVyc2lvbmVkICgqV0FZTEFORF93bF9wcm94eV9tYXJzaGFsX2NvbnN0cnVjdG9yX3ZlcnNpb25lZCkKKyAKKyAjZGVmaW5lIHdsX3NlYXRfaW50ZXJmYWNlICgqV0FZTEFORF93bF9zZWF0X2ludGVyZmFjZSkKKyAjZGVmaW5lIHdsX3N1cmZhY2VfaW50ZXJmYWNlICgqV0FZTEFORF93bF9zdXJmYWNlX2ludGVyZmFjZSkKK2RpZmYgLS1naXQgYS9zcmMvdmlkZW8vd2F5bGFuZC9TRExfd2F5bGFuZHN5bS5oIGIvc3JjL3ZpZGVvL3dheWxhbmQvU0RMX3dheWxhbmRzeW0uaAoraW5kZXggYzNiNGZhNS4uYjlhMGQ5NyAxMDA2NDQKKy0tLSBhL3NyYy92aWRlby93YXlsYW5kL1NETF93YXlsYW5kc3ltLmgKKysrKyBiL3NyYy92aWRlby93YXlsYW5kL1NETF93YXlsYW5kc3ltLmgKK0BAIC01NSw2ICs1NSwxMCBAQCBTRExfV0FZTEFORF9TWU0odm9pZCwgd2xfbGlzdF9pbnNlcnRfbGlzdCwgKHN0cnVjdCB3bF9saXN0ICosIHN0cnVjdCB3bF9saXN0ICopKQorIFNETF9XQVlMQU5EX01PRFVMRShXQVlMQU5EX0NMSUVOVF8xXzQpCisgU0RMX1dBWUxBTkRfU1lNKHN0cnVjdCB3bF9wcm94eSAqLCB3bF9wcm94eV9tYXJzaGFsX2NvbnN0cnVjdG9yLCAoc3RydWN0IHdsX3Byb3h5ICosIHVpbnQzMl90IG9wY29kZSwgY29uc3Qgc3RydWN0IHdsX2ludGVyZmFjZSAqaW50ZXJmYWNlLCAuLi4pKQorIAorKy8qIFRoZXNlIGZ1bmN0aW9ucyBhcmUgYXZhaWxhYmxlIGluIFdheWxhbmQgPj0gMS4xMCAqLworK1NETF9XQVlMQU5EX01PRFVMRShXQVlMQU5EX0NMSUVOVF8xXzEwKQorK1NETF9XQVlMQU5EX1NZTShzdHJ1Y3Qgd2xfcHJveHkgKiwgd2xfcHJveHlfbWFyc2hhbF9jb25zdHJ1Y3Rvcl92ZXJzaW9uZWQsIChzdHJ1Y3Qgd2xfcHJveHkgKnByb3h5LCB1aW50MzJfdCBvcGNvZGUsIGNvbnN0IHN0cnVjdCB3bF9pbnRlcmZhY2UgKmludGVyZmFjZSwgdWludDMyX3QgdmVyc2lvbiwgLi4uKSkKKysKKyBTRExfV0FZTEFORF9JTlRFUkZBQ0Uod2xfc2VhdF9pbnRlcmZhY2UpCisgU0RMX1dBWUxBTkRfSU5URVJGQUNFKHdsX3N1cmZhY2VfaW50ZXJmYWNlKQorIFNETF9XQVlMQU5EX0lOVEVSRkFDRSh3bF9zaG1fcG9vbF9pbnRlcmZhY2UpCistLSAKKzEuOS4xCisKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvbGlic2RsMi9saWJzZGwyXzIuMC40LmJiIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy9saWJzZGwyL2xpYnNkbDJfMi4wLjQuYmIKaW5kZXggNDI4MjMwNy4uODQ0ZmYzMyAxMDA2NDQKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy9saWJzZGwyL2xpYnNkbDJfMi4wLjQuYmIKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy9saWJzZGwyL2xpYnNkbDJfMi4wLjQuYmIKQEAgLTE1LDcgKzE1LDkgQEAKIERFUEVORFNfY2xhc3MtbmF0aXZlc2RrID0gIiR7QGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCAneDExJywgJ3ZpcnR1YWwvbmF0aXZlc2RrLWxpYngxMSBuYXRpdmVzZGstbGlieHJhbmRyIG5hdGl2ZXNkay1saWJ4cmVuZGVyIG5hdGl2ZXNkay1saWJ4ZXh0JywgJycsIGQpfSIKIAogU1JDX1VSSSA9ICJodHRwOi8vd3d3LmxpYnNkbC5vcmcvcmVsZWFzZS9TREwyLSR7UFZ9LnRhci5neiBcCi0gICAgICAgICAgIGZpbGU6Ly9saW5rYWdlLnBhdGNoIgorICAgICAgICAgICBmaWxlOi8vbGlua2FnZS5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly8wMDAxLXNyYy12aWRlby1tYWtlLWl0LWNvbXBhdGlibGUtd2l0aC13YXlsYW5kLTEuMTAucGF0Y2ggXAorIgogCiBTID0gIiR7V09SS0RJUn0vU0RMMi0ke1BWfSIKIApAQCAtNDQsNyArNDYsNyBAQAogICAgICR7QGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCAneDExJywgJ3gxMScsICcnLCBkKX0gXAogIgogUEFDS0FHRUNPTkZJR1thbHNhXSAgICAgICA9ICItLWVuYWJsZS1hbHNhIC0tZGlzYWJsZS1hbHNhdGVzdCwtLWRpc2FibGUtYWxzYSxhbHNhLWxpYiwiCi1QQUNLQUdFQ09ORklHW2RpcmVjdGZiXSAgID0gIi0tZW5hYmxlLXZpZGVvLWRpcmVjdGZiIC0tZGlzYWJsZS12aWRlby1kaXJlY3RmYixkaXJlY3RmYiIKK1BBQ0tBR0VDT05GSUdbZGlyZWN0ZmJdICAgPSAiLS1lbmFibGUtdmlkZW8tZGlyZWN0ZmIsLS1kaXNhYmxlLXZpZGVvLWRpcmVjdGZiLGRpcmVjdGZiIgogUEFDS0FHRUNPTkZJR1tnbGVzMl0gICAgICA9ICItLWVuYWJsZS12aWRlby1vcGVuZ2xlcywtLWRpc2FibGUtdmlkZW8tb3BlbmdsZXMsdmlydHVhbC9saWJnbGVzMiIKIFBBQ0tBR0VDT05GSUdbb3BlbmdsXSAgICAgPSAiLS1lbmFibGUtdmlkZW8tb3BlbmdsLC0tZGlzYWJsZS12aWRlby1vcGVuZ2wsdmlydHVhbC9saWJnbCIKIFBBQ0tBR0VDT05GSUdbcHVsc2VhdWRpb10gPSAiLS1lbmFibGUtcHVsc2VhdWRpbywtLWRpc2FibGUtcHVsc2VhdWRpbyxwdWxzZWF1ZGlvIgpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy9saWJ4c2V0dGluZ3MtY2xpZW50L2xpYnhzZXR0aW5ncy1jbGllbnQvTUlULXN0eWxlLWxpY2Vuc2UgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL2xpYnhzZXR0aW5ncy1jbGllbnQvbGlieHNldHRpbmdzLWNsaWVudC9NSVQtc3R5bGUtbGljZW5zZQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjI4ZGU5OC4uMDAwMDAwMAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL2xpYnhzZXR0aW5ncy1jbGllbnQvbGlieHNldHRpbmdzLWNsaWVudC9NSVQtc3R5bGUtbGljZW5zZQorKysgL2Rldi9udWxsCkBAIC0xLDIyICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgwqkgMjAwMSBSZWQgSGF0LCBJbmMuCi0gKgotICogUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgZGlzdHJpYnV0ZSwgYW5kIHNlbGwgdGhpcyBzb2Z0d2FyZSBhbmQgaXRzCi0gKiBkb2N1bWVudGF0aW9uIGZvciBhbnkgcHVycG9zZSBpcyBoZXJlYnkgZ3JhbnRlZCB3aXRob3V0IGZlZSwgcHJvdmlkZWQgdGhhdAotICogdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYXBwZWFyIGluIGFsbCBjb3BpZXMgYW5kIHRoYXQgYm90aCB0aGF0Ci0gKiBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIGFwcGVhciBpbiBzdXBwb3J0aW5nCi0gKiBkb2N1bWVudGF0aW9uLCBhbmQgdGhhdCB0aGUgbmFtZSBvZiBSZWQgSGF0IG5vdCBiZSB1c2VkIGluIGFkdmVydGlzaW5nIG9yCi0gKiBwdWJsaWNpdHkgcGVydGFpbmluZyB0byBkaXN0cmlidXRpb24gb2YgdGhlIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMsCi0gKiB3cml0dGVuIHByaW9yIHBlcm1pc3Npb24uICBSZWQgSGF0IG1ha2VzIG5vIHJlcHJlc2VudGF0aW9ucyBhYm91dCB0aGUKLSAqIHN1aXRhYmlsaXR5IG9mIHRoaXMgc29mdHdhcmUgZm9yIGFueSBwdXJwb3NlLiAgSXQgaXMgcHJvdmlkZWQgImFzIGlzIgotICogd2l0aG91dCBleHByZXNzIG9yIGltcGxpZWQgd2FycmFudHkuCi0gKgotICogUkVEIEhBVCBESVNDTEFJTVMgQUxMIFdBUlJBTlRJRVMgV0lUSCBSRUdBUkQgVE8gVEhJUyBTT0ZUV0FSRSwgSU5DTFVESU5HIEFMTAotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUywgSU4gTk8gRVZFTlQgU0hBTEwgUkVEIEhBVAotICogQkUgTElBQkxFIEZPUiBBTlkgU1BFQ0lBTCwgSU5ESVJFQ1QgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIE9SIEFOWSBEQU1BR0VTCi0gKiBXSEFUU09FVkVSIFJFU1VMVElORyBGUk9NIExPU1MgT0YgVVNFLCBEQVRBIE9SIFBST0ZJVFMsIFdIRVRIRVIgSU4gQU4gQUNUSU9OCi0gKiBPRiBDT05UUkFDVCwgTkVHTElHRU5DRSBPUiBPVEhFUiBUT1JUSU9VUyBBQ1RJT04sIEFSSVNJTkcgT1VUIE9GIE9SIElOIAotICogQ09OTkVDVElPTiBXSVRIIFRIRSBVU0UgT1IgUEVSRk9STUFOQ0UgT0YgVEhJUyBTT0ZUV0FSRS4KLSAqCi0gKiBBdXRob3I6ICBPd2VuIFRheWxvciwgUmVkIEhhdCwgSW5jLgotICovCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL2xpYnhzZXR0aW5ncy1jbGllbnQvbGlieHNldHRpbmdzLWNsaWVudC9saW5rLXgxMS5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvbGlieHNldHRpbmdzLWNsaWVudC9saWJ4c2V0dGluZ3MtY2xpZW50L2xpbmsteDExLnBhdGNoCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkMDhkMGQ1Li4wMDAwMDAwCi0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvbGlieHNldHRpbmdzLWNsaWVudC9saWJ4c2V0dGluZ3MtY2xpZW50L2xpbmsteDExLnBhdGNoCisrKyAvZGV2L251bGwKQEAgLTEsMTMgKzAsMCBAQAotVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtjb25maWd1cmF0aW9uXQotCi1JbmRleDogWHNldHRpbmdzLWNsaWVudC0wLjEwL01ha2VmaWxlLmFtCi09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLS0gWHNldHRpbmdzLWNsaWVudC0wLjEwLm9yaWcvTWFrZWZpbGUuYW0JMjAwOC0wMi0wNyAxNDo0OTo1NC4wMDAwMDAwMDAgKzAwMDAKLSsrKyBYc2V0dGluZ3MtY2xpZW50LTAuMTAvTWFrZWZpbGUuYW0JMjAwOC0wMi0wNyAxNDo1MDowMC4wMDAwMDAwMDAgKzAwMDAKLUBAIC05LDQgKzksNCBAQAotIAotIGxpYlhzZXR0aW5nc19jbGllbnRfbGFfU09VUkNFUz0gJChzb3VyY2VfYykgJChzb3VyY2VfaCkKLSAKLS1saWJYc2V0dGluZ3NfY2xpZW50X2xhX0xJQkFERCAgICAgID0gQFhfTElCU0AKLVwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQotK2xpYlhzZXR0aW5nc19jbGllbnRfbGFfTElCQUREICAgICAgPSBAWF9MSUJTQCAtbFgxMQpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy9saWJ4c2V0dGluZ3MtY2xpZW50L2xpYnhzZXR0aW5ncy1jbGllbnQvb2Jzb2xldGVfYXV0b21ha2VfbWFjcm9zLnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy9saWJ4c2V0dGluZ3MtY2xpZW50L2xpYnhzZXR0aW5ncy1jbGllbnQvb2Jzb2xldGVfYXV0b21ha2VfbWFjcm9zLnBhdGNoCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5MDVkMDhlLi4wMDAwMDAwCi0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvbGlieHNldHRpbmdzLWNsaWVudC9saWJ4c2V0dGluZ3MtY2xpZW50L29ic29sZXRlX2F1dG9tYWtlX21hY3Jvcy5wYXRjaAorKysgL2Rldi9udWxsCkBAIC0xLDE0ICswLDAgQEAKLVVwc3RyZWFtLVN0YXR1czogUGVuZGluZwotCi1TaWduZWQtb2ZmLWJ5OiBNYXJrbyBMaW5kcXZpc3QgPGNhemZpNzRAZ21haWwuY29tPgotZGlmZiAtTnVyZCBYc2V0dGluZ3MtY2xpZW50LTAuMTAvY29uZmlndXJlLmFjIFhzZXR0aW5ncy1jbGllbnQtMC4xMC9jb25maWd1cmUuYWMKLS0tLSBYc2V0dGluZ3MtY2xpZW50LTAuMTAvY29uZmlndXJlLmFjCTIwMDMtMDMtMjggMTI6Mzk6NTEuMDAwMDAwMDAwICswMjAwCi0rKysgWHNldHRpbmdzLWNsaWVudC0wLjEwL2NvbmZpZ3VyZS5hYwkyMDEzLTAxLTExIDA3OjM3OjIxLjQ5MTU5Nzc0MyArMDIwMAotQEAgLTEsNyArMSw3IEBACi0gIyBQcm9jZXNzIHRoaXMgZmlsZSB3aXRoIGF1dG9jb25mIHRvIHByb2R1Y2UgYSBjb25maWd1cmUgc2NyaXB0LgotIEFDX0lOSVQoeHNldHRpbmdzLWNsaWVudC5jKQotIEFNX0lOSVRfQVVUT01BS0UoWHNldHRpbmdzLWNsaWVudCwgMC4xMCkKLS1BTV9DT05GSUdfSEVBREVSKGNvbmZpZy5oKQotK0FDX0NPTkZJR19IRUFERVJTKGNvbmZpZy5oKQotCi0gQ0ZMQUdTPSItT3MgLVdhbGwiCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL2xpYnhzZXR0aW5ncy1jbGllbnQvbGlieHNldHRpbmdzLWNsaWVudF8wLjEwLmJiIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy9saWJ4c2V0dGluZ3MtY2xpZW50L2xpYnhzZXR0aW5ncy1jbGllbnRfMC4xMC5iYgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjdjNWUyNy4uMDAwMDAwMAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL2xpYnhzZXR0aW5ncy1jbGllbnQvbGlieHNldHRpbmdzLWNsaWVudF8wLjEwLmJiCisrKyAvZGV2L251bGwKQEAgLTEsNDAgKzAsMCBAQAotU1VNTUFSWSA9ICJ1dGlsaXR5IGZ1bmN0aW9ucyBmb3IgdGhlIFhzZXR0aW5ncyBwcm90b2NvbCIKLURFU0NSSVBUSU9OID0gIkxpYnJhcmllcyB1c2VkIGZvciBhcHBsaWNhdGlvbnMgbWFraW5nIHVzZSBvZiB0aGUgWHNldHRpbmdzIGNvbmZpZ3VyYXRpb24gXAotc2V0dGluZyBwcm9wYWdhdGlvbiBwcm90b2NvbC4gQ29udHJvbHMgc2V0dGluZyBvZiBkb3VibGUgY2xpY2sgdGltZW91dCwgZHJhZy1hbmQtZHJvcCBcCi10aHJlc2hvbGQsIGFuZCBkZWZhdWx0IGZvcmVncm91bmQgYW5kIGJhY2tncm91bmQgY29sb3JzIGZvciBhbGwgYXBwbGljYXRpb25zIHJ1bm5pbmcgd2l0aGluIGEgXAotZGVza3RvcC4iCi1IT01FUEFHRSA9ICJodHRwOi8vbWF0Y2hib3gtcHJvamVjdC5vcmcvc291cmNlcy9vcHRpb25hbC1kZXBlbmRlbmNpZXMvIgotQlVHVFJBQ0tFUiA9ICJodHRwOi8vYnVnemlsbGEueW9jdG9wcm9qZWN0Lm9yZy8iCi1TRUNUSU9OID0gIngvbGlicyIKLUxJQ0VOU0UgPSAiTUlULXN0eWxlIgotTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9N2NmYWM5ZDJkNGRjMzY5NGNjN2ViNjA1Y2YzMmE2OWIgXAotICAgICAgICAgICAgICAgICAgICBmaWxlOi8veHNldHRpbmdzLWNsaWVudC5oO2VuZGxpbmU9MjI7bWQ1PTdjZmFjOWQyZDRkYzM2OTRjYzdlYjYwNWNmMzJhNjliIFwKLSAgICAgICAgICAgICAgICAgICAgZmlsZTovL3hzZXR0aW5ncy1jb21tb24uaDtlbmRsaW5lPTIyO21kNT03Y2ZhYzlkMmQ0ZGMzNjk0Y2M3ZWI2MDVjZjMyYTY5YiIKLURFUEVORFMgPSAidmlydHVhbC9saWJ4MTEiCi0KLVBSID0gInI1IgotCi1oZWFkZXJzID0gInhzZXR0aW5ncy1jb21tb24uaCB4c2V0dGluZ3MtY2xpZW50LmgiCi0KLVNSQ19VUkkgPSAiaHR0cDovL2Rvd25sb2Fkcy55b2N0b3Byb2plY3Qub3JnL3JlbGVhc2VzL21hdGNoYm94L29wdGlvbmFsLWRlcGVuZGVuY2llcy9Yc2V0dGluZ3MtY2xpZW50LTAuMTAudGFyLmd6IFwKLSAgICAgICAgZmlsZTovL01JVC1zdHlsZS1saWNlbnNlIFwKLSAgICAgICAgZmlsZTovL2xpbmsteDExLnBhdGNoO2FwcGx5PXllcyBcCi0gICAgICAgIGZpbGU6Ly9vYnNvbGV0ZV9hdXRvbWFrZV9tYWNyb3MucGF0Y2ggXAotIgotCi1TUkNfVVJJW21kNXN1bV0gPSAiYzE0YWE5ZGI2YzA5N2UwMzA2ZGFjOTdmYjdkYTFhZGQiCi1TUkNfVVJJW3NoYTI1NnN1bV0gPSAiZjI3NGE0YmM5NjlhZTE5Mjk5NGE4NTZiN2Y3ODZjNmZjZTk2YmFlNzdmOTZjMWMyYjcxZGQ5NzU5OWUwNmU0MyIKLQotUyA9ICIke1dPUktESVJ9L1hzZXR0aW5ncy1jbGllbnQtMC4xMCIKLQotaW5oZXJpdCBhdXRvdG9vbHMgZ2V0dGV4dCBkaXN0cm9fZmVhdHVyZXNfY2hlY2sKLSMgZGVwZW5kcyBvbiB2aXJ0dWFsL2xpYngxMQotUkVRVUlSRURfRElTVFJPX0ZFQVRVUkVTID0gIngxMSIKLQotZG9fY29uZmlndXJlX3ByZXBlbmQoKSB7Ci0gICAgIyBUaGlzIHBhY2thZ2UgZG9lc24ndCBzaGlwIHdpdGggaXRzIG93biBDT1BZSU5HIGZpbGUgYW5kCi0gICAgIyBhdXRvdG9vbHMgd2lsbCBpbnN0YWxsIGEgR1BMdjIgb25lIGluc3RlYWQgb2YgdGhlIGFjdHVhbCBNSVQtc3R5bGUgbGljZW5zZSBoZXJlLgotICAgICMgQWRkIHRoZSBjb3JyZWN0IGxpY2Vuc2UgaGVyZSB0byBhdm9pZCBjb25mdXNpb24uCi0gICAgY3AgLWYgJHtXT1JLRElSfS9NSVQtc3R5bGUtbGljZW5zZSAke1N9L0NPUFlJTkcKLX0KLQpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy9tYXRjaGJveC13bS9tYXRjaGJveC13bV8xLjIuMS5iYiBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvbWF0Y2hib3gtd20vbWF0Y2hib3gtd21fMS4yLjEuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzNkMmQyMwotLS0gL2Rldi9udWxsCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvbWF0Y2hib3gtd20vbWF0Y2hib3gtd21fMS4yLjEuYmIKQEAgLTAsMCArMSwzOSBAQAorU1VNTUFSWSA9ICJNYXRjaGJveCBsaWdodHdlaWdodCB3aW5kb3cgbWFuYWdlciIKK0hPTUVQQUdFID0gImh0dHA6Ly9tYXRjaGJveC1wcm9qZWN0Lm9yZyIKK0JVR1RSQUNLRVIgPSAiaHR0cDovL2J1Z3ppbGxhLnlvY3RvcHJvamVjdC5vcmcvIgorCitMSUNFTlNFID0gIkdQTHYyKyIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL3NyYy93bS5oO2VuZGxpbmU9MjE7bWQ1PWE3ZTg0NDQ2NWVkYmNmNzljMjgyMzY5ZjkzY2FhODM1IFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL3NyYy9tYWluLmM7ZW5kbGluZT0yMTttZDU9M2U1ZDlmODMyYjUyN2IwZDcyZGJlOGUzYzRjNjBiOTUgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vc3JjL3dtLmM7ZW5kbGluZT0yMTttZDU9OGRjOWQyNDQ3N2Q4N2VmNWRmYmMyZTQ5MjcxNDZhYWIiCisKK1NFQ1RJT04gPSAieDExL3dtIgorREVQRU5EUyA9ICJsaWJtYXRjaGJveCB2aXJ0dWFsL2xpYngxMSBsaWJ4ZXh0IGxpYnhyZW5kZXIgc3RhcnR1cC1ub3RpZmljYXRpb24gZXhwYXQgZ2NvbmYgbGlieGN1cnNvciBsaWJ4Zml4ZXMiCisKKyMgU1JDUkVWIHRhZ2dlZCAxLjIuMQorU1JDUkVWID0gIjlmZDE4MDZkZmE3YzhmMjIwMmRiMThiN2JjODgwODU3YTMwMTlmOGMiCitTUkNfVVJJID0gImdpdDovL2dpdC55b2N0b3Byb2plY3Qub3JnL21hdGNoYm94LXdpbmRvdy1tYW5hZ2VyIFwKKyAgICAgICAgICAgZmlsZTovL2tiZGNvbmZpZyIKKworUyA9ICIke1dPUktESVJ9L2dpdCIKKworaW5oZXJpdCBhdXRvdG9vbHMgcGtnY29uZmlnIGRpc3Ryb19mZWF0dXJlc19jaGVjaworIyBkZXBlbmRzIG9uIHZpcnR1YWwvbGlieDExCitSRVFVSVJFRF9ESVNUUk9fRkVBVFVSRVMgPSAieDExIgorCitGSUxFU18ke1BOfSA9ICIke2JpbmRpcn0vKiBcCisgICAgICAgICAgICAgICAke2RhdGFkaXJ9L21hdGNoYm94IFwKKyAgICAgICAgICAgICAgICR7c3lzY29uZmRpcn0vbWF0Y2hib3ggXAorICAgICAgICAgICAgICAgJHtkYXRhZGlyfS90aGVtZXMvYmxvbmRpZS9tYXRjaGJveCBcCisgICAgICAgICAgICAgICAke2RhdGFkaXJ9L3RoZW1lcy9EZWZhdWx0L21hdGNoYm94IFwKKyAgICAgICAgICAgICAgICR7ZGF0YWRpcn0vdGhlbWVzL01CT3B1cy9tYXRjaGJveCIKKworRVhUUkFfT0VDT05GID0gIiAtLWVuYWJsZS1zdGFydHVwLW5vdGlmaWNhdGlvbiBcCisgICAgICAgICAgICAgICAgIC0tZGlzYWJsZS14cm0gXAorICAgICAgICAgICAgICAgICAtLWVuYWJsZS1leHBhdCBcCisgICAgICAgICAgICAgICAgIC0td2l0aC1leHBhdC1saWI9JHtTVEFHSU5HX0xJQkRJUn0gXAorICAgICAgICAgICAgICAgICAtLXdpdGgtZXhwYXQtaW5jbHVkZXM9JHtTVEFHSU5HX0lOQ0RJUn0iCisKK2RvX2luc3RhbGxfcHJlcGVuZCgpIHsKKwlpbnN0YWxsICR7V09SS0RJUn0va2JkY29uZmlnICR7U30vZGF0YS9rYmRjb25maWcKK30KZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvbWF0Y2hib3gtd20vbWF0Y2hib3gtd21fZ2l0LmJiIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy9tYXRjaGJveC13bS9tYXRjaGJveC13bV9naXQuYmIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGFhNzY4MjguLjAwMDAwMDAKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy9tYXRjaGJveC13bS9tYXRjaGJveC13bV9naXQuYmIKKysrIC9kZXYvbnVsbApAQCAtMSw0MCArMCwwIEBACi1TVU1NQVJZID0gIk1hdGNoYm94IGxpZ2h0d2VpZ2h0IHdpbmRvdyBtYW5hZ2VyIgotSE9NRVBBR0UgPSAiaHR0cDovL21hdGNoYm94LXByb2plY3Qub3JnIgotQlVHVFJBQ0tFUiA9ICJodHRwOi8vYnVnemlsbGEueW9jdG9wcm9qZWN0Lm9yZy8iCi0KLUxJQ0VOU0UgPSAiR1BMdjIrIgotTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vc3JjL3dtLmg7ZW5kbGluZT0yMTttZDU9YTdlODQ0NDY1ZWRiY2Y3OWMyODIzNjlmOTNjYWE4MzUgXAotICAgICAgICAgICAgICAgICAgICBmaWxlOi8vc3JjL21haW4uYztlbmRsaW5lPTIxO21kNT0zZTVkOWY4MzJiNTI3YjBkNzJkYmU4ZTNjNGM2MGI5NSBcCi0gICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9zcmMvd20uYztlbmRsaW5lPTIxO21kNT04ZGM5ZDI0NDc3ZDg3ZWY1ZGZiYzJlNDkyNzE0NmFhYiIKLQotU0VDVElPTiA9ICJ4MTEvd20iCi1ERVBFTkRTID0gImxpYm1hdGNoYm94IHZpcnR1YWwvbGlieDExIGxpYnhleHQgbGlieHJlbmRlciBzdGFydHVwLW5vdGlmaWNhdGlvbiBleHBhdCBnY29uZiBsaWJ4Y3Vyc29yIGxpYnhmaXhlcyIKLQotU1JDUkVWID0gIjgxNzhlNzBkNWM3NDJjNGNkNjNiNTFkZjIyOGNjOGFhMzU5NGQ1MTgiCi1QViA9ICIxLjIrZ2l0JHtTUkNQVn0iCi0KLVNSQ19VUkkgPSAiZ2l0Oi8vZ2l0LnlvY3RvcHJvamVjdC5vcmcvbWF0Y2hib3gtd2luZG93LW1hbmFnZXIgXAotICAgICAgICAgICBmaWxlOi8va2JkY29uZmlnIgotCi1TID0gIiR7V09SS0RJUn0vZ2l0IgotCi1pbmhlcml0IGF1dG90b29scyBwa2djb25maWcgZGlzdHJvX2ZlYXR1cmVzX2NoZWNrCi0jIGRlcGVuZHMgb24gdmlydHVhbC9saWJ4MTEKLVJFUVVJUkVEX0RJU1RST19GRUFUVVJFUyA9ICJ4MTEiCi0KLUZJTEVTXyR7UE59ID0gIiR7YmluZGlyfS8qIFwKLSAgICAgICAgICAgICAgICR7ZGF0YWRpcn0vbWF0Y2hib3ggXAotICAgICAgICAgICAgICAgJHtzeXNjb25mZGlyfS9tYXRjaGJveCBcCi0gICAgICAgICAgICAgICAke2RhdGFkaXJ9L3RoZW1lcy9ibG9uZGllL21hdGNoYm94IFwKLSAgICAgICAgICAgICAgICR7ZGF0YWRpcn0vdGhlbWVzL0RlZmF1bHQvbWF0Y2hib3ggXAotICAgICAgICAgICAgICAgJHtkYXRhZGlyfS90aGVtZXMvTUJPcHVzL21hdGNoYm94IgotCi1FWFRSQV9PRUNPTkYgPSAiIC0tZW5hYmxlLXN0YXJ0dXAtbm90aWZpY2F0aW9uIFwKLSAgICAgICAgICAgICAgICAgLS1kaXNhYmxlLXhybSBcCi0gICAgICAgICAgICAgICAgIC0tZW5hYmxlLWV4cGF0IFwKLSAgICAgICAgICAgICAgICAgLS13aXRoLWV4cGF0LWxpYj0ke1NUQUdJTkdfTElCRElSfSBcCi0gICAgICAgICAgICAgICAgIC0td2l0aC1leHBhdC1pbmNsdWRlcz0ke1NUQUdJTkdfSU5DRElSfSIKLQotZG9faW5zdGFsbF9wcmVwZW5kKCkgewotCWluc3RhbGwgJHtXT1JLRElSfS9rYmRjb25maWcgJHtTfS9kYXRhL2tiZGNvbmZpZwotfQpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy9tZW51LWNhY2hlL21lbnUtY2FjaGVfMS4wLjEuYmIgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL21lbnUtY2FjaGUvbWVudS1jYWNoZV8xLjAuMS5iYgppbmRleCBlYjgwY2QzLi5hMWE4ZTI2IDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL21lbnUtY2FjaGUvbWVudS1jYWNoZV8xLjAuMS5iYgorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL21lbnUtY2FjaGUvbWVudS1jYWNoZV8xLjAuMS5iYgpAQCAtNiw3ICs2LDcgQEAKIExJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PTA5NjRjNjg5ZmNmNGMyMWM2Nzk3ZWE4NzQwODQxNmI2IgogCiBTRUNUSU9OID0gIngxMS9saWJzIgotREVQRU5EUyA9ICJnbGliLTIuMCBpbnRsdG9vbC1uYXRpdmUgbGliZm0tZXh0cmEiCitERVBFTkRTID0gImdsaWItMi4wIGxpYmZtLWV4dHJhIgogCiBTUkNfVVJJID0gIiR7U09VUkNFRk9SR0VfTUlSUk9SfS9seGRlL21lbnUtY2FjaGUtJHtQVn0udGFyLnh6IgogCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL21lc2EvZmlsZXMvY2xhbmctY29tcGlsZS1QUjg5NTk5LnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy9tZXNhL2ZpbGVzL2NsYW5nLWNvbXBpbGUtUFI4OTU5OS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40OGJkMzI1Ci0tLSAvZGV2L251bGwKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy9tZXNhL2ZpbGVzL2NsYW5nLWNvbXBpbGUtUFI4OTU5OS5wYXRjaApAQCAtMCwwICsxLDExNiBAQAorRnJvbSA1ZWMxNDBjMTdiNTRjMjU5MjAwOTE1MDFiNjY1YjlhYTgwOWNjNWU4IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogTWF0dCBUdXJuZXIgPG1hdHRzdDg4QGdtYWlsLmNvbT4KK0RhdGU6IE1vbiwgMTEgSnVsIDIwMTYgMTA6NDQ6MjUgLTA3MDAKK1N1YmplY3Q6IG1hcGk6IE1hc3NhZ2UgY29kZSB0byBhbGxvdyBjbGFuZyB0byBjb21waWxlLgorTUlNRS1WZXJzaW9uOiAxLjAKK0NvbnRlbnQtVHlwZTogdGV4dC9wbGFpbjsgY2hhcnNldD1VVEYtOAorQ29udGVudC1UcmFuc2Zlci1FbmNvZGluZzogOGJpdAorCitBY2NvcmRpbmcgdG8gaHR0cHM6Ly9sbHZtLm9yZy9idWdzL3Nob3dfYnVnLmNnaT9pZD0xOTc3OCNjMyB0aGlzIGNvZGUKK3dhcyB2aW9sYXRpbmcgdGhlIHNwZWMsIHJlc3VsdGluZyBpbiBpdCBmYWlsaW5nIHRvIGNvbXBpbGUuCisKK0NjOiBtZXNhLXN0YWJsZUBsaXN0cy5mcmVlZGVza3RvcC5vcmcKK0NvLWF1dGhvcmVkLWJ5OiBUb21hc3ogUGF3ZcWCIEdhamMgPHRwZ3h5ekBnbWFpbC5jb20+CitCdWd6aWxsYTogaHR0cHM6Ly9idWdzLmZyZWVkZXNrdG9wLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9ODk1OTkKK1Jldmlld2VkLWJ5OiBFbWlsIFZlbGlrb3YgPGVtaWwudmVsaWtvdkBjb2xsYWJvcmEuY29tPgorCitVcHN0cmVhbS1TdGF0dXM6IEJhY2twb3J0CitTaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorCitkaWZmIC0tZ2l0IGEvY29uZmlndXJlLmFjIGIvY29uZmlndXJlLmFjCitpbmRleCAzNzk5ZDhkLi4xY2E4MzU5IDEwMDY0NAorLS0tIGEvY29uZmlndXJlLmFjCisrKysgYi9jb25maWd1cmUuYWMKK0BAIC0yMjYsNiArMjI2LDcgQEAgQVhfR0NDX0ZVTkNfQVRUUklCVVRFKFtwYWNrZWRdKQorIEFYX0dDQ19GVU5DX0FUVFJJQlVURShbcHVyZV0pCisgQVhfR0NDX0ZVTkNfQVRUUklCVVRFKFtyZXR1cm5zX25vbm51bGxdKQorIEFYX0dDQ19GVU5DX0FUVFJJQlVURShbdW51c2VkXSkKKytBWF9HQ0NfRlVOQ19BVFRSSUJVVEUoW3Zpc2liaWxpdHldKQorIEFYX0dDQ19GVU5DX0FUVFJJQlVURShbd2Fybl91bnVzZWRfcmVzdWx0XSkKKyBBWF9HQ0NfRlVOQ19BVFRSSUJVVEUoW3dlYWtdKQorIAorZGlmZiAtLWdpdCBhL3NyYy9tYXBpL2VudHJ5X3g4Ni02NF90bHMuaCBiL3NyYy9tYXBpL2VudHJ5X3g4Ni02NF90bHMuaAoraW5kZXggMzhmYWNjYy4uYzUyNjJhMSAxMDA2NDQKKy0tLSBhL3NyYy9tYXBpL2VudHJ5X3g4Ni02NF90bHMuaAorKysrIGIvc3JjL21hcGkvZW50cnlfeDg2LTY0X3Rscy5oCitAQCAtMjUsNiArMjUsMTEgQEAKKyAgKiAgICBDaGlhLUkgV3UgPG9sdkBsdW5hcmcuY29tPgorICAqLworIAorKyNpZmRlZiBIQVZFX0ZVTkNfQVRUUklCVVRFX1ZJU0lCSUlUWQorKyNkZWZpbmUgSElEREVOIF9fYXR0cmlidXRlX18oKHZpc2liaWxpdHkoImhpZGRlbiIpKSkKKysjZWxzZQorKyNkZWZpbmUgSElEREVOCisrI2VuZGlmCisgCisgX19hc21fXygiLnRleHRcbiIKKyAgICAgICAgICIuYmFsaWduIDMyXG4iCitAQCAtNTQsOCArNTksOCBAQCBlbnRyeV9wYXRjaF9wdWJsaWModm9pZCkKKyB7CisgfQorIAorLXN0YXRpYyBjaGFyCisteDg2XzY0X2VudHJ5X3N0YXJ0W107CisrZXh0ZXJuIGNoYXIKKyt4ODZfNjRfZW50cnlfc3RhcnRbXSBISURERU47CisgCisgbWFwaV9mdW5jCisgZW50cnlfZ2V0X3B1YmxpYyhpbnQgc2xvdCkKK2RpZmYgLS1naXQgYS9zcmMvbWFwaS9lbnRyeV94ODZfdGxzLmggYi9zcmMvbWFwaS9lbnRyeV94ODZfdGxzLmgKK2luZGV4IDQ2ZDJlY2UuLjIzMWI0MDkgMTAwNjQ0CistLS0gYS9zcmMvbWFwaS9lbnRyeV94ODZfdGxzLmgKKysrKyBiL3NyYy9tYXBpL2VudHJ5X3g4Nl90bHMuaAorQEAgLTI3LDYgKzI3LDEyIEBACisgCisgI2luY2x1ZGUgPHN0cmluZy5oPgorIAorKyNpZmRlZiBIQVZFX0ZVTkNfQVRUUklCVVRFX1ZJU0lCSUlUWQorKyNkZWZpbmUgSElEREVOIF9fYXR0cmlidXRlX18oKHZpc2liaWxpdHkoImhpZGRlbiIpKSkKKysjZWxzZQorKyNkZWZpbmUgSElEREVOCisrI2VuZGlmCisrCisgX19hc21fXygiLnRleHQiKTsKKyAKKyBfX2FzbV9fKCJ4ODZfY3VycmVudF90bHM6XG5cdCIKK0BAIC03MSw4ICs3Nyw4IEBAIF9fYXNtX18oIi50ZXh0Iik7CisgZXh0ZXJuIHVuc2lnbmVkIGxvbmcKKyB4ODZfY3VycmVudF90bHMoKTsKKyAKKy1zdGF0aWMgY2hhciB4ODZfZW50cnlfc3RhcnRbXTsKKy1zdGF0aWMgY2hhciB4ODZfZW50cnlfZW5kW107CisrZXh0ZXJuIGNoYXIgeDg2X2VudHJ5X3N0YXJ0W10gSElEREVOOworK2V4dGVybiBjaGFyIHg4Nl9lbnRyeV9lbmRbXSBISURERU47CisgCisgdm9pZAorIGVudHJ5X3BhdGNoX3B1YmxpYyh2b2lkKQorZGlmZiAtLWdpdCBhL3NyYy9tYXBpL2VudHJ5X3g4Nl90c2QuaCBiL3NyYy9tYXBpL2VudHJ5X3g4Nl90c2QuaAoraW5kZXggZWE3YmFjYi4uMDNkOTczNSAxMDA2NDQKKy0tLSBhL3NyYy9tYXBpL2VudHJ5X3g4Nl90c2QuaAorKysrIGIvc3JjL21hcGkvZW50cnlfeDg2X3RzZC5oCitAQCAtMjUsNiArMjUsMTEgQEAKKyAgKiAgICBDaGlhLUkgV3UgPG9sdkBsdW5hcmcuY29tPgorICAqLworIAorKyNpZmRlZiBIQVZFX0ZVTkNfQVRUUklCVVRFX1ZJU0lCSUlUWQorKyNkZWZpbmUgSElEREVOIF9fYXR0cmlidXRlX18oKHZpc2liaWxpdHkoImhpZGRlbiIpKSkKKysjZWxzZQorKyNkZWZpbmUgSElEREVOCisrI2VuZGlmCisgCisgI2RlZmluZSBYODZfRU5UUllfU0laRSAzMgorIAorQEAgLTU4LDggKzYzLDggQEAgX19hc21fXygiLmJhbGlnbiAzMlxuIgorICNpbmNsdWRlIDxzdHJpbmcuaD4KKyAjaW5jbHVkZSAidV9leGVjbWVtLmgiCisgCistc3RhdGljIGNvbnN0IGNoYXIgeDg2X2VudHJ5X3N0YXJ0W107Cistc3RhdGljIGNvbnN0IGNoYXIgeDg2X2VudHJ5X2VuZFtdOworK2V4dGVybiBjb25zdCBjaGFyIHg4Nl9lbnRyeV9zdGFydFtdIEhJRERFTjsKKytleHRlcm4gY29uc3QgY2hhciB4ODZfZW50cnlfZW5kW10gSElEREVOOworIAorIHZvaWQKKyBlbnRyeV9wYXRjaF9wdWJsaWModm9pZCkKKy0tIAorY2dpdCB2MC4xMC4yCisKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvbWVzYS9maWxlcy9kaXNhYmxlLWFzbS1vbi1ub24tZ2NjLnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy9tZXNhL2ZpbGVzL2Rpc2FibGUtYXNtLW9uLW5vbi1nY2MucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDJkNjc1NQotLS0gL2Rldi9udWxsCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvbWVzYS9maWxlcy9kaXNhYmxlLWFzbS1vbi1ub24tZ2NjLnBhdGNoCkBAIC0wLDAgKzEsMjkgQEAKK0NvbmZpZ3VyZSBjaGVja3MgZm9yIGNvbXBpbGVyIHRvIGJlIGdjYyBhbmQgdGhlbiBpdCBlbmFibGVzIGFzbV9vZmZzZXRzCitnZW5lcmF0aW9uLiBzZWUKKworaHR0cHM6Ly9jZ2l0LmZyZWVkZXNrdG9wLm9yZy9tZXNhL21lc2EvY29tbWl0Lz9pZD03M2M5YjRiMGUwNWZjNjY2MjliYTI1MDg0Njk0OGRjNTVjMGU3YTBkCisKK0hvd2V2ZXIsIHdlIG1pc3NlZCB0aGUgY2hlY2sgd2hlbiBlbmFibGluZyB0aGlzIG9uIGNyb3NzIGNvbXBpbGF0aW9uCit3aGVuIGFyY2hpdGVjdHVyZSBmb3IgYm90aCBob3N0IGFuZCB0YXJnZXQgaXMgeDg2CisKK0ZpeGVzIGVycm9ycyBsaWtlCisuL2dlbl9tYXR5cGVzID4gbWF0eXBlcy5oCisvYmluL2Jhc2g6IC4vZ2VuX21hdHlwZXM6IE5vIHN1Y2ggZmlsZSBvciBkaXJlY3RvcnkKKworLUtoZW0KKworVXBzdHJlYW0tU3RhdHVzOiBTdWJtaXR0ZWQKKworSW5kZXg6IG1lc2EtMTIuMC4xL2NvbmZpZ3VyZS5hYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIG1lc2EtMTIuMC4xLm9yaWcvY29uZmlndXJlLmFjCisrKysgbWVzYS0xMi4wLjEvY29uZmlndXJlLmFjCitAQCAtNzMyLDcgKzczMiw3IEBAIHRlc3QgIngkZW5hYmxlX2FzbSIgPSB4bm8gJiYgQUNfTVNHX1JFU1UKKyBpZiB0ZXN0ICJ4JGVuYWJsZV9hc20iID0geHllcyAtYSAieCRjcm9zc19jb21waWxpbmciID0geHllczsgdGhlbgorICAgICBjYXNlICIkaG9zdF9jcHUiIGluCisgICAgIGk/ODYgfCB4ODZfNjQgfCBhbWQ2NCkKKy0gICAgICAgIGlmIHRlc3QgIngkaG9zdF9jcHUiICE9ICJ4JHRhcmdldF9jcHUiOyB0aGVuCisrICAgICAgICBpZiB0ZXN0ICJ4JGhvc3RfY3B1IiAhPSAieCR0YXJnZXRfY3B1IiAtbyAieCRhY3ZfbWVzYV9DTEFORyIgPSB4eWVzOyB0aGVuCisgICAgICAgICAgICAgZW5hYmxlX2FzbT1ubworICAgICAgICAgICAgIEFDX01TR19SRVNVTFQoW25vLCBjcm9zcyBjb21waWxpbmddKQorICAgICAgICAgZmkKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvbWVzYS9tZXNhLWRlbW9zLzAwMDItQ29ycmVjdGx5LWltcGxlbWVudC13aXRoLUFDX1dJVEgtZ2x1dC1zby10aGF0LXdpdGhvdS5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvbWVzYS9tZXNhLWRlbW9zLzAwMDItQ29ycmVjdGx5LWltcGxlbWVudC13aXRoLUFDX1dJVEgtZ2x1dC1zby10aGF0LXdpdGhvdS5wYXRjaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDkwNTRjYi4uMDAwMDAwMAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL21lc2EvbWVzYS1kZW1vcy8wMDAyLUNvcnJlY3RseS1pbXBsZW1lbnQtd2l0aC1BQ19XSVRILWdsdXQtc28tdGhhdC13aXRob3UucGF0Y2gKKysrIC9kZXYvbnVsbApAQCAtMSw1NyArMCwwIEBACi1Gcm9tIDM2ODI5YThkN2FkMjg4ODUxNWZiZWU5NWMyYTcwYjNkNjM2ZDc1MzggTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCi1Gcm9tOiBSb3NzIEJ1cnRvbiA8cm9zcy5idXJ0b25AaW50ZWwuY29tPgotRGF0ZTogV2VkLCA5IEp1bCAyMDE0IDE0OjMwOjMzICswMjAwCi1TdWJqZWN0OiBbUEFUQ0ggMi85XSBDb3JyZWN0bHkgaW1wbGVtZW50IHdpdGggQUNfV0lUSChnbHV0KSBzbyB0aGF0Ci0gLS13aXRob3V0LWdsdXQgd29ya3MuCi0KLVNpZ25lZC1vZmYtYnk6IFJvc3MgQnVydG9uIDxyb3NzLmJ1cnRvbkBpbnRlbC5jb20+Ci1VcHN0cmVhbS1TdGF0dXM6IFN1Ym1pdHRlZCAoaHR0cHM6Ly9wYXRjaHdvcmsuZnJlZWRlc2t0b3Aub3JnL3BhdGNoLzY0NDE3LykKLQotLS0tCi0gY29uZmlndXJlLmFjIHwgMjYgKysrKysrKysrKysrKysrLS0tLS0tLS0tLS0KLSAxIGZpbGUgY2hhbmdlZCwgMTUgaW5zZXJ0aW9ucygrKSwgMTEgZGVsZXRpb25zKC0pCi0KLWRpZmYgLS1naXQgYS9jb25maWd1cmUuYWMgYi9jb25maWd1cmUuYWMKLWluZGV4IGM0ZWUxMmIuLjk0NDU0MjQgMTAwNjQ0Ci0tLS0gYS9jb25maWd1cmUuYWMKLSsrKyBiL2NvbmZpZ3VyZS5hYwotQEAgLTY3LDIxICs2NywyNSBAQCBERU1PX0NGTEFHUz0iJERFTU9fQ0ZMQUdTICRHTF9DRkxBR1MiCi0gREVNT19MSUJTPSIkREVNT19MSUJTICRHTF9MSUJTIgotIAotIGRubCBDaGVjayBmb3IgR0xVVAotLUdMVVRfQ0ZMQUdTPSIiCi0tR0xVVF9MSUJTPS1sZ2x1dAotLWdsdXRfZW5hYmxlZD15ZXMKLStnbHV0X2VuYWJsZWQ9bm8KLSBBQ19BUkdfV0lUSChbZ2x1dF0sCi0gCVtBU19IRUxQX1NUUklORyhbLS13aXRoLWdsdXQ9RElSXSwKLSAJCQlbZ2x1dCBpbnN0YWxsIGRpcmVjdG9yeV0pXSwKLSAJW0dMVVRfQ0ZMQUdTPSItSSR3aXRodmFsL2luY2x1ZGUiCi0tCSBHTFVUX0xJQlM9Ii1MJHdpdGh2YWwvbGliIC1sZ2x1dCJdKQotLUFDX0NIRUNLX0hFQURFUihbR0wvZ2x1dC5oXSwKLS0JCVtdLAotLQkJW2dsdXRfZW5hYmxlZD1ub10pCi0tQUNfQ0hFQ0tfTElCKFtnbHV0XSwKLS0JCVtnbHV0SW5pdF0sCi0tCQlbXSwKLS0JCVtnbHV0X2VuYWJsZWQ9bm9dKQotKwkgR0xVVF9MSUJTPSItTCR3aXRodmFsL2xpYiAtbGdsdXQiXSwKLSsJW0dMVVRfQ0ZMQUdTPSIiCi0rCSBHTFVUX0xJQlM9Ii1sZ2x1dCJdCi0rICAgICAgICApCi0rQVNfSUYoW3Rlc3QgIngkd2l0aF9nbHV0IiAhPSB4bm9dLAotKyAgICAgIFtBQ19DSEVDS19IRUFERVIoW0dML2dsdXQuaF0sCi0rICAgICAgICAgICAgICAgICAgICAgICBbXSwKLSsgICAgICAgICAgICAgICAgICAgICAgIFtnbHV0X2VuYWJsZWQ9bm9dKQotKyAgICAgICBBQ19DSEVDS19MSUIoW2dsdXRdLAotKyAgICAgICAgICAgICAgICAgICAgW2dsdXRJbml0XSwKLSsgICAgICAgICAgICAgICAgICAgIFtdLAotKyAgICAgICAgICAgICAgICAgICAgW2dsdXRfZW5hYmxlZD1ub10pCi0rICAgICAgIGdsdXRfZW5hYmxlZD15ZXMKLStdKQotIAotIGRubCBDaGVjayBmb3IgRnJlZUdMVVQgMi42IG9yIGxhdGVyCi0gQUNfRUdSRVBfSEVBREVSKFtnbHV0SW5pdENvbnRleHRQcm9maWxlXSwKLS0tIAotMi4wLjAKLQpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy9tZXNhL21lc2EtZGVtb3MvMDAwMy1jb25maWd1cmUtQWxsb3ctdG8tZGlzYWJsZS1kZW1vcy13aGljaC1yZXF1aXJlLUdMRVctLnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy9tZXNhL21lc2EtZGVtb3MvMDAwMy1jb25maWd1cmUtQWxsb3ctdG8tZGlzYWJsZS1kZW1vcy13aGljaC1yZXF1aXJlLUdMRVctLnBhdGNoCmluZGV4IDZiNThjMmIuLmY2YjU5YTEgMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvbWVzYS9tZXNhLWRlbW9zLzAwMDMtY29uZmlndXJlLUFsbG93LXRvLWRpc2FibGUtZGVtb3Mtd2hpY2gtcmVxdWlyZS1HTEVXLS5wYXRjaAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL21lc2EvbWVzYS1kZW1vcy8wMDAzLWNvbmZpZ3VyZS1BbGxvdy10by1kaXNhYmxlLWRlbW9zLXdoaWNoLXJlcXVpcmUtR0xFVy0ucGF0Y2gKQEAgLTEsOCArMSw3IEBACi1Gcm9tIGIyNWU5YzY3NWNmNTYwYjhiMDM3ZGM4NTVjNmIzYjFkMDk5NTc4NjcgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tIDc3OTQzODc3MGJlZGYzZDUzZTZhZDhmN2NkNjg4OWI3ZjUwZGFmM2IgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCiBGcm9tOiBNYXJ0aW4gSmFuc2EgPE1hcnRpbi5KYW5zYUBnbWFpbC5jb20+CiBEYXRlOiBXZWQsIDkgSnVsIDIwMTQgMTQ6MjM6NDEgKzAyMDAKLVN1YmplY3Q6IFtQQVRDSCAzLzldIGNvbmZpZ3VyZTogQWxsb3cgdG8gZGlzYWJsZSBkZW1vcyB3aGljaCByZXF1aXJlIEdMRVcgb3IKLSBHTFUKK1N1YmplY3Q6IFtQQVRDSF0gY29uZmlndXJlOiBBbGxvdyB0byBkaXNhYmxlIGRlbW9zIHdoaWNoIHJlcXVpcmUgR0xFVyBvciBHTFUKIAogKiBpbiBzb21lIHN5c3RlbXMgd2l0aG91dCBYMTEgc3VwcG9ydCB3ZSBkb24ndCBoYXZlIEdMRVcsIGJ1dAogICBtZXNhLWRlbW9zIGFyZSBzdGlsbCB1c2VmdWwKQEAgLTEwLDE3ICs5LDIwIEBACiBVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKIAogU2lnbmVkLW9mZi1ieTogTWFydGluIEphbnNhIDxNYXJ0aW4uSmFuc2FAZ21haWwuY29tPgorCitQb3J0IHRvIDguMy4wCitTaWduZWQtb2ZmLWJ5OiBKdXNzaSBLdWtrb25lbiA8anVzc2kua3Vra29uZW5AaW50ZWwuY29tPgogLS0tCiAgY29uZmlndXJlLmFjICAgICAgICAgICAgICAgICAgfCA0OSArKysrKysrKysrKysrKysrKysrKy0tLS0tLS0tLQotIHNyYy9NYWtlZmlsZS5hbSAgICAgICAgICAgICAgIHwgMTQgKysrKysrLS0tCisgc3JjL01ha2VmaWxlLmFtICAgICAgICAgICAgICAgfCAxOCArKysrKysrKy0tLQogIHNyYy9kZW1vcy9NYWtlZmlsZS5hbSAgICAgICAgIHwgNzMgKysrKysrKysrKysrKysrKysrKysrKysrLS0tLS0tLS0tLS0tLS0tLS0tLQogIHNyYy9lZ2wvTWFrZWZpbGUuYW0gICAgICAgICAgIHwgIDggKysrLS0KLSBzcmMvZWdsL29wZW5nbGVzMS9NYWtlZmlsZS5hbSB8IDQ0ICsrKysrKysrKysrKysrKy0tLS0tLS0tLS0tCi0gc3JjL2VnbC9vcGVuZ2xlczIvTWFrZWZpbGUuYW0gfCAzMyArKysrKysrKysrLS0tLS0tLS0tCi0gNiBmaWxlcyBjaGFuZ2VkLCAxMzUgaW5zZXJ0aW9ucygrKSwgODYgZGVsZXRpb25zKC0pCisgc3JjL2VnbC9vcGVuZ2xlczEvTWFrZWZpbGUuYW0gfCAxMCArKysrLS0KKyBzcmMvZWdsL29wZW5nbGVzMi9NYWtlZmlsZS5hbSB8IDI5ICsrKysrKysrLS0tLS0tLS0tCisgNiBmaWxlcyBjaGFuZ2VkLCAxMTcgaW5zZXJ0aW9ucygrKSwgNzAgZGVsZXRpb25zKC0pCiAKIGRpZmYgLS1naXQgYS9jb25maWd1cmUuYWMgYi9jb25maWd1cmUuYWMKLWluZGV4IDk0NDU0MjQuLmJjNGM4ZDEgMTAwNjQ0CitpbmRleCAwNTI1YjA5Li4yODgzNGNkIDEwMDY0NAogLS0tIGEvY29uZmlndXJlLmFjCiArKysgYi9jb25maWd1cmUuYWMKIEBAIC05MywyNSArOTMsNDQgQEAgQUNfRUdSRVBfSEVBREVSKFtnbHV0SW5pdENvbnRleHRQcm9maWxlXSwKQEAgLTkyLDEwICs5NCwxMSBAQAogIEFNX0NPTkRJVElPTkFMKEhBVkVfR0xFU1YxLCB0ZXN0ICJ4JGdsZXN2MV9lbmFibGVkIiA9ICJ4eWVzIikKICBBTV9DT05ESVRJT05BTChIQVZFX0dMRVNWMiwgdGVzdCAieCRnbGVzdjJfZW5hYmxlZCIgPSAieHllcyIpCiBkaWZmIC0tZ2l0IGEvc3JjL01ha2VmaWxlLmFtIGIvc3JjL01ha2VmaWxlLmFtCi1pbmRleCAxNjQ3ZDY0Li43NTRjNDdjIDEwMDY0NAoraW5kZXggMTY0N2Q2NC4uOGI4OWRlZSAxMDA2NDQKIC0tLSBhL3NyYy9NYWtlZmlsZS5hbQogKysrIGIvc3JjL01ha2VmaWxlLmFtCi1AQCAtMjMsMTQgKzIzLDE4IEBACitAQCAtMjIsMTUgKzIyLDE5IEBACisgIyBBdXRob3JzOgogICMgICAgRXJpYyBBbmhvbHQgPGVyaWNAYW5ob2x0Lm5ldD4KICAKICtpZiBIQVZFX0dMRVcKQEAgLTExNiw3ICsxMTksNyBAQAogIAlvYmp2aWV3ZXIgXAogIAlvc2RlbW9zIFwKICAJcGVyZiBcCi1AQCAtNDAsOCArMzksMTIgQEAgU1VCRElSUyA9IFwKK0BAIC00MCw4ICs0NCwxMiBAQCBTVUJESVJTID0gXAogIAlzbGFuZyBcCiAgCXRlc3RzIFwKICAJdG9vbHMgXApAQCAtMjg5LDEwICsyOTIsMTAgQEAKICsJb3BlbnZnCiArZW5kaWYKIGRpZmYgLS1naXQgYS9zcmMvZWdsL29wZW5nbGVzMS9NYWtlZmlsZS5hbSBiL3NyYy9lZ2wvb3BlbmdsZXMxL01ha2VmaWxlLmFtCi1pbmRleCA3YTk4MjhkLi4zNDU1ZTc1IDEwMDY0NAoraW5kZXggZmEzOTdjMi4uMjE4NTNlOCAxMDA2NDQKIC0tLSBhL3NyYy9lZ2wvb3BlbmdsZXMxL01ha2VmaWxlLmFtCiArKysgYi9zcmMvZWdsL29wZW5nbGVzMS9NYWtlZmlsZS5hbQotQEAgLTM2LDI4ICszNiw0MyBAQCBBTV9MREZMQUdTID0gXAorQEAgLTM2LDkgKzM2LDEyIEBAIEFNX0xERkxBR1MgPSBcCiAgCSQoRUdMX0xJQlMpIFwKICAJLWxtCiAgCkBAIC0zMDEsNDIgKzMwNCwxMyBAQAogIGlmIEhBVkVfRUdMCiAgaWYgSEFWRV9HTEVTVjEKIC1ub2luc3RfUFJPR1JBTVMgPSBcCi0tCWJpbmR0ZXggXAotLQljbGVhciBcCi0rbm9pbnN0X1BST0dSQU1TICs9IFwKLSAJZHJhd3RleF9zY3JlZW4gXAotKwlnZWFyc19zY3JlZW4gXAotKwl0b3J1c19zY3JlZW4gXAotKwl0cmlfc2NyZWVuCi0rCi0rZHJhd3RleF9zY3JlZW5fU09VUkNFUyA9IGRyYXd0ZXguYwotK2dlYXJzX3NjcmVlbl9TT1VSQ0VTID0gZ2VhcnMuYwotK3RvcnVzX3NjcmVlbl9TT1VSQ0VTID0gdG9ydXMuYwotK3RyaV9zY3JlZW5fU09VUkNFUyA9IHRyaS5jCi0rCi0rZHJhd3RleF9zY3JlZW5fTERBREQgPSAuLi9lZ2x1dC9saWJlZ2x1dF9zY3JlZW4ubGEKLStnZWFyc19zY3JlZW5fTERBREQgPSAuLi9lZ2x1dC9saWJlZ2x1dF9zY3JlZW4ubGEKLSt0b3J1c19zY3JlZW5fTERBREQgPSAuLi9lZ2x1dC9saWJlZ2x1dF9zY3JlZW4ubGEKLSt0cmlfc2NyZWVuX0xEQUREID0gLi4vZWdsdXQvbGliZWdsdXRfc2NyZWVuLmxhCi0rCiAraWYgSEFWRV9YMTEKLStub2luc3RfUFJPR1JBTVMgKz0gXAotKwljbGVhcgotKwogK2Jpbl9QUk9HUkFNUyA9IFwKLSsJYmluZHRleCBcCisgCWJpbmR0ZXggXAorIAljbGVhciBcCiAgCWRyYXd0ZXhfeDExIFwKLSAJZWdsZmJkZXYgXAotIAllczFfaW5mbyBcCi0tCWdlYXJzX3NjcmVlbiBcCi0gCWdlYXJzX3gxMSBcCi0gCW1zYWEgXAotIAlwYnVmZmVyXAotIAlyZW5kZXJfdGV4IFwKLSAJdGV4dHVyZV9mcm9tX3BpeG1hcCBcCi0tCXRvcnVzX3NjcmVlbiBcCitAQCAtNTIsOCArNTUsNiBAQCBub2luc3RfUFJPR1JBTVMgPSBcCiAgCXRvcnVzX3gxMSBcCi0tCXRyaV9zY3JlZW4gXAogIAl0cmlfeDExIFwKICAJdHdvX3dpbgogLWVuZGlmCkBAIC0zNDQsMjYgKzMxOCw3IEBACiAgCiAgYmluZHRleF9MREFERCA9ICQoWDExX0xJQlMpCiAgZXMxX2luZm9fTERBREQgPSAkKFgxMV9MSUJTKQotQEAgLTcxLDIyICs4NiwxNSBAQCB0d29fd2luX0xEQUREID0gJChYMTFfTElCUykKLSBjbGVhcl9MREFERCA9IC4uL2VnbHV0L2xpYmVnbHV0X3gxMS5sYSAkKEVHTF9MSUJTKSAkKFgxMV9MSUJTKQotIGNsZWFyX0xERkxBR1MgPQotIAotLWRyYXd0ZXhfc2NyZWVuX1NPVVJDRVMgPSBkcmF3dGV4LmMKLS1nZWFyc19zY3JlZW5fU09VUkNFUyA9IGdlYXJzLmMKLS10b3J1c19zY3JlZW5fU09VUkNFUyA9IHRvcnVzLmMKLS10cmlfc2NyZWVuX1NPVVJDRVMgPSB0cmkuYwotLQotIGRyYXd0ZXhfeDExX1NPVVJDRVMgPSBkcmF3dGV4LmMKLSBnZWFyc194MTFfU09VUkNFUyA9IGdlYXJzLmMKLSB0b3J1c194MTFfU09VUkNFUyA9IHRvcnVzLmMKLSB0cmlfeDExX1NPVVJDRVMgPSB0cmkuYwotIAotLWRyYXd0ZXhfc2NyZWVuX0xEQUREID0gLi4vZWdsdXQvbGliZWdsdXRfc2NyZWVuLmxhCi0tZ2VhcnNfc2NyZWVuX0xEQUREID0gLi4vZWdsdXQvbGliZWdsdXRfc2NyZWVuLmxhCi0tdG9ydXNfc2NyZWVuX0xEQUREID0gLi4vZWdsdXQvbGliZWdsdXRfc2NyZWVuLmxhCi0tdHJpX3NjcmVlbl9MREFERCA9IC4uL2VnbHV0L2xpYmVnbHV0X3NjcmVlbi5sYQotLQotIGRyYXd0ZXhfeDExX0xEQUREID0gLi4vZWdsdXQvbGliZWdsdXRfeDExLmxhCitAQCAtNzYsMyArNzcsNiBAQCBkcmF3dGV4X3gxMV9MREFERCA9IC4uL2VnbHV0L2xpYmVnbHV0X3gxMS5sYQogIGdlYXJzX3gxMV9MREFERCA9IC4uL2VnbHV0L2xpYmVnbHV0X3gxMS5sYQogIHRvcnVzX3gxMV9MREFERCA9IC4uL2VnbHV0L2xpYmVnbHV0X3gxMS5sYQogIHRyaV94MTFfTERBREQgPSAuLi9lZ2x1dC9saWJlZ2x1dF94MTEubGEKQEAgLTM3MSwzNSArMzI2LDM1IEBACiArZW5kaWYKICtlbmRpZgogZGlmZiAtLWdpdCBhL3NyYy9lZ2wvb3BlbmdsZXMyL01ha2VmaWxlLmFtIGIvc3JjL2VnbC9vcGVuZ2xlczIvTWFrZWZpbGUuYW0KLWluZGV4IDQxYzFiODAuLjc0YWY0NjAgMTAwNjQ0CitpbmRleCBiODBiYTUwLi4xN2Y4ZDQ5IDEwMDY0NAogLS0tIGEvc3JjL2VnbC9vcGVuZ2xlczIvTWFrZWZpbGUuYW0KICsrKyBiL3NyYy9lZ2wvb3BlbmdsZXMyL01ha2VmaWxlLmFtCi1AQCAtMzYsMjYgKzM2LDI5IEBAIEFNX0xERkxBR1MgPSBcCitAQCAtMzMsMjcgKzMzLDI4IEBAIEFNX0xERkxBR1MgPSBcCisgCSQoRUdMX0xJQlMpIFwKKyAJLWxtCisgCisrYmluX1BST0dSQU1TID0KKysKICBpZiBIQVZFX0VHTAogIGlmIEhBVkVfR0xFU1YyCi0gYmluX1BST0dSQU1TID0gXAorLWJpbl9QUk9HUkFNUyA9CistaWYgSEFWRV9YMTEKKy1iaW5fUFJPR1JBTVMgKz0gXAogLQllczJfaW5mbyBcCi0tCWVzMmdlYXJzX3NjcmVlbiBcCiAtCWVzMmdlYXJzX3gxMSBcCiAtCWVzMnRyaQotKwllczJnZWFyc19zY3JlZW4KLSsKLStlczJnZWFyc19zY3JlZW5fU09VUkNFUyA9IGVzMmdlYXJzLmMKLStlczJnZWFyc19zY3JlZW5fTERBREQgPSAuLi9lZ2x1dC9saWJlZ2x1dF9zY3JlZW4ubGEKLSsKKy1lbmRpZgogIGlmIEhBVkVfV0FZTEFORAogIGJpbl9QUk9HUkFNUyArPSBlczJnZWFyc193YXlsYW5kCiAtZW5kaWYKIC1lbmRpZgotLWVuZGlmCisrCisrZXMyZ2VhcnNfd2F5bGFuZF9TT1VSQ0VTID0gZXMyZ2VhcnMuYworK2VzMmdlYXJzX3dheWxhbmRfTERBREQgPSAuLi9lZ2x1dC9saWJlZ2x1dF93YXlsYW5kLmxhCisgZW5kaWYKICAKIC1lczJfaW5mb19MREFERCA9ICQoWDExX0xJQlMpCiAtZXMydHJpX0xEQUREID0gJChYMTFfTElCUykKLStlczJnZWFyc193YXlsYW5kX1NPVVJDRVMgPSBlczJnZWFycy5jCi0rZXMyZ2VhcnNfd2F5bGFuZF9MREFERCA9IC4uL2VnbHV0L2xpYmVnbHV0X3dheWxhbmQubGEKLStlbmRpZgotIAotLWVzMmdlYXJzX3NjcmVlbl9TT1VSQ0VTID0gZXMyZ2VhcnMuYwogK2lmIEhBVkVfWDExCiArYmluX1BST0dSQU1TICs9IFwKICsJZXMydHJpIFwKQEAgLTQwOSw4ICszNjQsNiBAQAogK2VzMl9pbmZvX0xEQUREID0gJChYMTFfTElCUykKICBlczJnZWFyc194MTFfU09VUkNFUyA9IGVzMmdlYXJzLmMKIC0KLS1lczJnZWFyc19zY3JlZW5fTERBREQgPSAuLi9lZ2x1dC9saWJlZ2x1dF9zY3JlZW4ubGEKLS0KICBlczJnZWFyc194MTFfTERBREQgPSAuLi9lZ2x1dC9saWJlZ2x1dF94MTEubGEKICtlczJ0cmlfTERBREQgPSAkKFgxMV9MSUJTKQogK2VuZGlmCkBAIC00MjAsNSArMzczLDUgQEAKIC1lczJnZWFyc193YXlsYW5kX1NPVVJDRVMgPSBlczJnZWFycy5jCiAtZXMyZ2VhcnNfd2F5bGFuZF9MREFERCA9IC4uL2VnbHV0L2xpYmVnbHV0X3dheWxhbmQubGEKIC0tIAotMi4wLjAKKzIuMS40CiAKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvbWVzYS9tZXNhLWRlbW9zLzAwMDUtRml4LWJ1aWxkLXdoZW4tRUdMX01FU0Ffc2NyZWVuX3N1cmZhY2UtZXh0ZW5zaW9uLWlzbi5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvbWVzYS9tZXNhLWRlbW9zLzAwMDUtRml4LWJ1aWxkLXdoZW4tRUdMX01FU0Ffc2NyZWVuX3N1cmZhY2UtZXh0ZW5zaW9uLWlzbi5wYXRjaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYWFjMmEzNy4uMDAwMDAwMAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL21lc2EvbWVzYS1kZW1vcy8wMDA1LUZpeC1idWlsZC13aGVuLUVHTF9NRVNBX3NjcmVlbl9zdXJmYWNlLWV4dGVuc2lvbi1pc24ucGF0Y2gKKysrIC9kZXYvbnVsbApAQCAtMSwyNjcgKzAsMCBAQAotRnJvbSA0NTMzNTNhMjIxZGU5YzY0NDc5ZjQzNzI1NjVkMmNkODU5MWIzNmNjIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQotRnJvbTogRnJhbmsgQmlubnMgPGZyYW5rLmJpbm5zQGltZ3RlYy5jb20+Ci1EYXRlOiBGcmksIDI5IEp1biAyMDEyIDExOjI2OjA0ICswMTAwCi1TdWJqZWN0OiBbUEFUQ0ggNS85XSBGaXggYnVpbGQgd2hlbiBFR0xfTUVTQV9zY3JlZW5fc3VyZmFjZSBleHRlbnNpb24gaXNuJ3QKLSBwcmVzZW50Ci0KLVRoZSBFR0wgZGVtb3Mgd29uJ3QgYnVpbGQgYWdhaW5zdCBFR0wgaW1wbGVtZW50YXRpb25zIHRoYXQgZG9uJ3Qgc3VwcG9ydAotdGhlIEVHTF9NRVNBX3NjcmVlbl9zdXJmYWNlIGV4dGVuc2lvbi4gRml4IHRoaXMsIGluIG1vc3QgY2FzZXMsIGJ5Ci13cmFwcGluZyByZWxldmFudCBiaXRzIG9mIGNvZGUgaW4gI2lmZGVmIEVHTF9NRVNBX3NjcmVlbl9zdXJmYWNlLgotCi1TaWduZWQtb2ZmLWJ5OiBGcmFuayBCaW5ucyA8ZnJhbmsuYmlubnNAaW1ndGVjLmNvbT4KLQotQXBwbGllZCBhbmQgZml4ZWQgdXAgaW4gWW9jdG8gYnkuLi4KLQotSW50ZWdyYXRlZC1ieTogVG9tIFphbnVzc2kgPHRvbS56YW51c3NpQGxpbnV4LmludGVsLmNvbT4KLQotVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCi0tLS0KLSBzcmMvZWdsL2VnbHV0L2VnbHV0LmMgICAgICAgIHwgIDkgKysrKysrKy0tCi0gc3JjL2VnbC9lZ2x1dC9lZ2x1dF9zY3JlZW4uYyB8IDE0ICsrKysrKysrKysrKysrCi0gc3JjL2VnbC9vcGVuZ2wvZGVtbzEuYyAgICAgICB8ICAyICsrCi0gc3JjL2VnbC9vcGVuZ2wvZGVtbzIuYyAgICAgICB8ICA3ICsrKysrKy0KLSBzcmMvZWdsL29wZW5nbC9kZW1vMy5jICAgICAgIHwgIDcgKysrKysrLQotIDUgZmlsZXMgY2hhbmdlZCwgMzUgaW5zZXJ0aW9ucygrKSwgNCBkZWxldGlvbnMoLSkKLQotZGlmZiAtLWdpdCBhL3NyYy9lZ2wvZWdsdXQvZWdsdXQuYyBiL3NyYy9lZ2wvZWdsdXQvZWdsdXQuYwotaW5kZXggMmVlNmYxNS4uZjZhMmFkNCAxMDA2NDQKLS0tLSBhL3NyYy9lZ2wvZWdsdXQvZWdsdXQuYwotKysrIGIvc3JjL2VnbC9lZ2x1dC9lZ2x1dC5jCi1AQCAtNzYsOCArNzYsOSBAQCBfZWdsdXROb3codm9pZCkKLSBzdGF0aWMgdm9pZAotIF9lZ2x1dERlc3Ryb3lXaW5kb3coc3RydWN0IGVnbHV0X3dpbmRvdyAqd2luKQotIHsKLS0gICBpZiAoX2VnbHV0LT5zdXJmYWNlX3R5cGUgIT0gRUdMX1BCVUZGRVJfQklUICYmCi0tICAgICAgIF9lZ2x1dC0+c3VyZmFjZV90eXBlICE9IEVHTF9TQ1JFRU5fQklUX01FU0EpCi0rCi0rICAgaWYgKF9lZ2x1dC0+c3VyZmFjZV90eXBlID09IEVHTF9XSU5ET1dfQklUIHx8Ci0rICAgICAgIF9lZ2x1dC0+c3VyZmFjZV90eXBlID09IEVHTF9QSVhNQVBfQklUKQotICAgICAgIGVnbERlc3Ryb3lTdXJmYWNlKF9lZ2x1dC0+ZHB5LCB3aW4tPnN1cmZhY2UpOwotIAotICAgIF9lZ2x1dE5hdGl2ZUZpbmlXaW5kb3cod2luKTsKLUBAIC0xNzUsNyArMTc2LDkgQEAgX2VnbHV0Q3JlYXRlV2luZG93KGNvbnN0IGNoYXIgKnRpdGxlLCBpbnQgeCwgaW50IHksIGludCB3LCBpbnQgaCkKLSAgICAgICAgICAgICB3aW4tPmNvbmZpZywgd2luLT5uYXRpdmUudS5waXhtYXAsIE5VTEwpOwotICAgICAgIGJyZWFrOwotICAgIGNhc2UgRUdMX1BCVUZGRVJfQklUOgotKyNpZmRlZiBFR0xfTUVTQV9zY3JlZW5fc3VyZmFjZQotICAgIGNhc2UgRUdMX1NDUkVFTl9CSVRfTUVTQToKLSsjZW5kaWYKLSAgICAgICB3aW4tPnN1cmZhY2UgPSB3aW4tPm5hdGl2ZS51LnN1cmZhY2U7Ci0gICAgICAgYnJlYWs7Ci0gICAgZGVmYXVsdDoKLUBAIC0yODksOCArMjkyLDEwIEBAIGVnbHV0RGVzdHJveVdpbmRvdyhpbnQgd2luKQotICAgIGlmICh3aW5kb3ctPmluZGV4ICE9IHdpbikKLSAgICAgICByZXR1cm47Ci0gCi0rI2lmZGVmIEVHTF9NRVNBX3NjcmVlbl9zdXJmYWNlCi0gICAgLyogWFhYIGl0IGNhdXNlcyBzb21lIGJ1ZyBpbiBzdC9lZ2wgS01TIGJhY2tlbmQgKi8KLSAgICBpZiAoIF9lZ2x1dC0+c3VyZmFjZV90eXBlICE9IEVHTF9TQ1JFRU5fQklUX01FU0EpCi0rI2VuZGlmCi0gICAgICAgZWdsTWFrZUN1cnJlbnQoX2VnbHV0LT5kcHksIEVHTF9OT19TVVJGQUNFLCBFR0xfTk9fU1VSRkFDRSwgRUdMX05PX0NPTlRFWFQpOwotIAotICAgIF9lZ2x1dERlc3Ryb3lXaW5kb3coX2VnbHV0LT5jdXJyZW50KTsKLWRpZmYgLS1naXQgYS9zcmMvZWdsL2VnbHV0L2VnbHV0X3NjcmVlbi5jIGIvc3JjL2VnbC9lZ2x1dC9lZ2x1dF9zY3JlZW4uYwotaW5kZXggMDIxYThmMS4uMDk0YTRlMiAxMDA2NDQKLS0tLSBhL3NyYy9lZ2wvZWdsdXQvZWdsdXRfc2NyZWVuLmMKLSsrKyBiL3NyYy9lZ2wvZWdsdXQvZWdsdXRfc2NyZWVuLmMKLUBAIC0zNSwyNiArMzUsMzMgQEAKLSAKLSAjZGVmaW5lIE1BWF9NT0RFUyAxMDAKLSAKLSsjaWZkZWYgRUdMX01FU0Ffc2NyZWVuX3N1cmZhY2UKLSBzdGF0aWMgRUdMU2NyZWVuTUVTQSBrbXNfc2NyZWVuOwotIHN0YXRpYyBFR0xNb2RlTUVTQSBrbXNfbW9kZTsKLSBzdGF0aWMgRUdMaW50IGttc193aWR0aCwga21zX2hlaWdodDsKLSsjZW5kaWYKLSAKLSB2b2lkCi0gX2VnbHV0TmF0aXZlSW5pdERpc3BsYXkodm9pZCkKLSB7Ci0rI2lmZGVmIEVHTF9NRVNBX3NjcmVlbl9zdXJmYWNlCi0gICAgX2VnbHV0LT5uYXRpdmVfZHB5ID0gRUdMX0RFRkFVTFRfRElTUExBWTsKLSAgICBfZWdsdXQtPnN1cmZhY2VfdHlwZSA9IEVHTF9TQ1JFRU5fQklUX01FU0E7Ci0rI2VuZGlmCi0gfQotIAotIHZvaWQKLSBfZWdsdXROYXRpdmVGaW5pRGlzcGxheSh2b2lkKQotIHsKLSsjaWZkZWYgRUdMX01FU0Ffc2NyZWVuX3N1cmZhY2UKLSAgICBrbXNfc2NyZWVuID0gMDsKLSAgICBrbXNfbW9kZSA9IDA7Ci0gICAga21zX3dpZHRoID0gMDsKLSAgICBrbXNfaGVpZ2h0ID0gMDsKLSsjZW5kaWYKLSB9Ci0gCi0rI2lmZGVmIEVHTF9NRVNBX3NjcmVlbl9zdXJmYWNlCi0gc3RhdGljIHZvaWQKLSBpbml0X2ttcyh2b2lkKQotIHsKLUBAIC05NCwxOSArMTAxLDIzIEBAIGluaXRfa21zKHZvaWQpCi0gICAga21zX3dpZHRoID0gd2lkdGg7Ci0gICAga21zX2hlaWdodCA9IGhlaWdodDsKLSB9Ci0rI2VuZGlmCi0gCi0gdm9pZAotIF9lZ2x1dE5hdGl2ZUluaXRXaW5kb3coc3RydWN0IGVnbHV0X3dpbmRvdyAqd2luLCBjb25zdCBjaGFyICp0aXRsZSwKLSAgICAgICAgICAgICAgICAgICAgICAgIGludCB4LCBpbnQgeSwgaW50IHcsIGludCBoKQotIHsKLSsjaWZkZWYgRUdMX01FU0Ffc2NyZWVuX3N1cmZhY2UKLSAgICBFR0xpbnQgc3VyZl9hdHRyaWJzWzE2XTsKLSAgICBFR0xpbnQgaTsKLSsjZW5kaWYKLSAgICBjb25zdCBjaGFyICpleHRzOwotIAotICAgIGV4dHMgPSBlZ2xRdWVyeVN0cmluZyhfZWdsdXQtPmRweSwgRUdMX0VYVEVOU0lPTlMpOwotICAgIGlmICghZXh0cyB8fCAhc3Ryc3RyKGV4dHMsICJFR0xfTUVTQV9zY3JlZW5fc3VyZmFjZSIpKQotICAgICAgIF9lZ2x1dEZhdGFsKCJFR0xfTUVTQV9zY3JlZW5fc3VyZmFjZSBpcyBub3Qgc3VwcG9ydGVkXG4iKTsKLSAKLSsjaWZkZWYgRUdMX01FU0Ffc2NyZWVuX3N1cmZhY2UKLSAgICBpbml0X2ttcygpOwotIAotICAgIGkgPSAwOwotQEAgLTEyOCwxNCArMTM5LDE3IEBAIF9lZ2x1dE5hdGl2ZUluaXRXaW5kb3coc3RydWN0IGVnbHV0X3dpbmRvdyAqd2luLCBjb25zdCBjaGFyICp0aXRsZSwKLSAKLSAgICB3aW4tPm5hdGl2ZS53aWR0aCA9IGttc193aWR0aDsKLSAgICB3aW4tPm5hdGl2ZS5oZWlnaHQgPSBrbXNfaGVpZ2h0OwotKyNlbmRpZgotIH0KLSAKLSB2b2lkCi0gX2VnbHV0TmF0aXZlRmluaVdpbmRvdyhzdHJ1Y3QgZWdsdXRfd2luZG93ICp3aW4pCi0gewotKyNpZmRlZiBFR0xfTUVTQV9zY3JlZW5fc3VyZmFjZQotICAgIGVnbFNob3dTY3JlZW5TdXJmYWNlTUVTQShfZWdsdXQtPmRweSwKLSAgICAgICAgICBrbXNfc2NyZWVuLCBFR0xfTk9fU1VSRkFDRSwgMCk7Ci0gICAgZWdsRGVzdHJveVN1cmZhY2UoX2VnbHV0LT5kcHksIHdpbi0+bmF0aXZlLnUuc3VyZmFjZSk7Ci0rI2VuZGlmCi0gfQotIAotIHZvaWQKLWRpZmYgLS1naXQgYS9zcmMvZWdsL29wZW5nbC9kZW1vMS5jIGIvc3JjL2VnbC9vcGVuZ2wvZGVtbzEuYwotaW5kZXggZDg5MjczNC4uM2EzNTY0YyAxMDA2NDQKLS0tLSBhL3NyYy9lZ2wvb3BlbmdsL2RlbW8xLmMKLSsrKyBiL3NyYy9lZ2wvb3BlbmdsL2RlbW8xLmMKLUBAIC0xOCw2ICsxOCw3IEBACi0gc3RhdGljIHZvaWQKLSBUZXN0U2NyZWVucyhFR0xEaXNwbGF5IGRweSkKLSB7Ci0rI2lmZGVmIEVHTF9NRVNBX3NjcmVlbl9zdXJmYWNlCi0gI2RlZmluZSBNQVggOAotICAgIEVHTFNjcmVlbk1FU0Egc2NyZWVuc1tNQVhdOwotICAgIEVHTGludCBudW1TY3JlZW5zOwotQEAgLTI4LDYgKzI5LDcgQEAgVGVzdFNjcmVlbnMoRUdMRGlzcGxheSBkcHkpCi0gICAgZm9yIChpID0gMDsgaSA8IG51bVNjcmVlbnM7IGkrKykgewotICAgICAgIHByaW50ZigiIFNjcmVlbiAlZCBoYW5kbGU6ICVkXG4iLCBpLCAoaW50KSBzY3JlZW5zW2ldKTsKLSAgICB9Ci0rI2VuZGlmCi0gfQotIAotIC8qKgotZGlmZiAtLWdpdCBhL3NyYy9lZ2wvb3BlbmdsL2RlbW8yLmMgYi9zcmMvZWdsL29wZW5nbC9kZW1vMi5jCi1pbmRleCA1MDViNDc0Li5iZmVmNTllIDEwMDY0NAotLS0tIGEvc3JjL2VnbC9vcGVuZ2wvZGVtbzIuYwotKysrIGIvc3JjL2VnbC9vcGVuZ2wvZGVtbzIuYwotQEAgLTE2LDYgKzE2LDcgQEAKLSAKLSAvKiNkZWZpbmUgRlJPTlRCVUZGRVIqLwotIAotKyNpZmRlZiBFR0xfTUVTQV9zY3JlZW5fc3VyZmFjZQotIHN0YXRpYyB2b2lkIF9zdWJzZXRfUmVjdGYoR0xmbG9hdCB4MSwgR0xmbG9hdCB5MSwgR0xmbG9hdCB4MiwgR0xmbG9hdCB5MiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIEdMZmxvYXQgciwgR0xmbG9hdCBnLCBHTGZsb2F0IGIpCi0gewotQEAgLTk1LDEyICs5NiwxMyBAQCBUZXN0U2NyZWVucyhFR0xEaXNwbGF5IGRweSkKLSAgICAgICBwcmludGYoIiBTY3JlZW4gJWQgaGFuZGxlOiAlZFxuIiwgaSwgKGludCkgc2NyZWVuc1tpXSk7Ci0gICAgfQotIH0KLS0KLSsjZW5kaWYKLSAKLSBpbnQKLSBtYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pCi0gewotICAgIGludCBtYWosIG1pbjsKLSsjaWZkZWYgRUdMX01FU0Ffc2NyZWVuX3N1cmZhY2UKLSAgICBFR0xDb250ZXh0IGN0eDsKLSAgICBFR0xTdXJmYWNlIHBidWZmZXIsIHNjcmVlbl9zdXJmOwotICAgIEVHTENvbmZpZyBjb25maWdzWzEwXTsKLUBAIC0xMTUsNiArMTE3LDcgQEAgbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKQotICAgIEVHTE1vZGVNRVNBIG1vZGU7Ci0gICAgRUdMU2NyZWVuTUVTQSBzY3JlZW47Ci0gICAgRUdMaW50IGNvdW50OwotKyNlbmRpZgotIAotICAgIEVHTERpc3BsYXkgZCA9IGVnbEdldERpc3BsYXkoRUdMX0RFRkFVTFRfRElTUExBWSk7Ci0gICAgYXNzZXJ0KGQpOwotQEAgLTEzMiw2ICsxMzUsNyBAQCBtYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pCi0gICAgICAgZXhpdCgxKTsKLSAgICB9Ci0gCi0rI2lmZGVmIEVHTF9NRVNBX3NjcmVlbl9zdXJmYWNlCi0gICAgZWdsR2V0Q29uZmlncyhkLCBjb25maWdzLCAxMCwgJm51bUNvbmZpZ3MpOwotICAgIHByaW50ZigiR290ICVkIEVHTCBjb25maWdzOlxuIiwgbnVtQ29uZmlncyk7Ci0gICAgZm9yIChpID0gMDsgaSA8IG51bUNvbmZpZ3M7IGkrKykgewotQEAgLTIxMSw2ICsyMTUsNyBAQCBtYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pCi0gICAgZWdsRGVzdHJveVN1cmZhY2UoZCwgcGJ1ZmZlcik7Ci0gICAgZWdsRGVzdHJveUNvbnRleHQoZCwgY3R4KTsKLSAgICBlZ2xUZXJtaW5hdGUoZCk7Ci0rI2VuZGlmCi0gCi0gICAgcmV0dXJuIDA7Ci0gfQotZGlmZiAtLWdpdCBhL3NyYy9lZ2wvb3BlbmdsL2RlbW8zLmMgYi9zcmMvZWdsL29wZW5nbC9kZW1vMy5jCi1pbmRleCBmODRjYTIzLi4zMWI1ZDhiIDEwMDY0NAotLS0tIGEvc3JjL2VnbC9vcGVuZ2wvZGVtbzMuYwotKysrIGIvc3JjL2VnbC9vcGVuZ2wvZGVtbzMuYwotQEAgLTQ2LDcgKzQ2LDcgQEAgR0x1Ynl0ZSBPcGVuR0xfYml0c1tdID0gewotICAgIDB4M2UsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4MGMsIDB4MDAsIAotIH07Ci0gCi0tCi0rI2lmZGVmIEVHTF9NRVNBX3NjcmVlbl9zdXJmYWNlCi0gc3RhdGljIHZvaWQgSW5pdCh2b2lkKQotIHsKLSAKLUBAIC01NTEsMTEgKzU1MSwxMyBAQCB3cml0ZV9wcG0oY29uc3QgY2hhciAqZmlsZW5hbWUsIGNvbnN0IEdMdWJ5dGUgKmJ1ZmZlciwgaW50IHdpZHRoLCBpbnQgaGVpZ2h0KQotICAgICAgIGZjbG9zZShmKTsKLSAgICB9Ci0gfQotKyNlbmRpZgotIAotIGludAotIG1haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKLSB7Ci0gICAgaW50IG1haiwgbWluOwotKyNpZmRlZiBFR0xfTUVTQV9zY3JlZW5fc3VyZmFjZQotICAgIEVHTENvbnRleHQgY3R4OwotICAgIEVHTFN1cmZhY2Ugc2NyZWVuX3N1cmY7Ci0gICAgRUdMQ29uZmlnIGNvbmZpZ3NbMTBdOwotQEAgLTU2Niw2ICs1NjgsNyBAQCBtYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pCi0gICAgY29uc3QgR0x1Ynl0ZSAqYml0bWFwOwotICAgIEVHTGludCBzY3JlZW5BdHRyaWJzWzMyXTsKLSAgICBFR0xpbnQgaTsKLSsjZW5kaWYKLSAKLSAgICBFR0xEaXNwbGF5IGQgPSBlZ2xHZXREaXNwbGF5KEVHTF9ERUZBVUxUX0RJU1BMQVkpOwotICAgIGFzc2VydChkKTsKLUBAIC01ODMsNiArNTg2LDcgQEAgbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKQotICAgICAgIGV4aXQoMSk7Ci0gICAgfQotIAotKyNpZmRlZiBFR0xfTUVTQV9zY3JlZW5fc3VyZmFjZQotICAgIGVnbEdldENvbmZpZ3MoZCwgY29uZmlncywgMTAsICZudW1Db25maWdzKTsKLSAgICBlZ2xHZXRTY3JlZW5zTUVTQShkLCAmc2NyZWVuLCAxLCAmY291bnQpOwotICAgIGVnbEdldE1vZGVzTUVTQShkLCBzY3JlZW4sICZtb2RlLCAxLCAmY291bnQpOwotQEAgLTY0Miw2ICs2NDYsNyBAQCBtYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pCi0gICAgZWdsRGVzdHJveVN1cmZhY2UoZCwgc2NyZWVuX3N1cmYpOwotICAgIGVnbERlc3Ryb3lDb250ZXh0KGQsIGN0eCk7Ci0gICAgZWdsVGVybWluYXRlKGQpOwotKyNlbmRpZgotIAotICAgIHJldHVybiAwOwotIH0KLS0tIAotMi4wLjAKLQpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy9tZXNhL21lc2EtZGVtb3MvMDAwNi1RdWVyeS1kaXNwbGF5LWZvci1FR0xfTUVTQV9zY3JlZW5fc3VyZmFjZS1leHRlbnNpb24tLnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy9tZXNhL21lc2EtZGVtb3MvMDAwNi1RdWVyeS1kaXNwbGF5LWZvci1FR0xfTUVTQV9zY3JlZW5fc3VyZmFjZS1leHRlbnNpb24tLnBhdGNoCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxMmUwODA1Li4wMDAwMDAwCi0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvbWVzYS9tZXNhLWRlbW9zLzAwMDYtUXVlcnktZGlzcGxheS1mb3ItRUdMX01FU0Ffc2NyZWVuX3N1cmZhY2UtZXh0ZW5zaW9uLS5wYXRjaAorKysgL2Rldi9udWxsCkBAIC0xLDQxICswLDAgQEAKLUZyb20gNmExOWRiYTFkMjc1NTc5YzczZTc3NjNiMDU1NDQxMGZmNGUxZTY1MCBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKLUZyb206IEZyYW5rIEJpbm5zIDxmcmFuay5iaW5uc0BpbWd0ZWMuY29tPgotRGF0ZTogRnJpLCAyOSBKdW4gMjAxMiAxMjowMDoyNiArMDEwMAotU3ViamVjdDogW1BBVENIIDYvOV0gUXVlcnkgZGlzcGxheSBmb3IgRUdMX01FU0Ffc2NyZWVuX3N1cmZhY2UgZXh0ZW5zaW9uCi0gYmVmb3JlIHVzaW5nIGl0Ci0KLVRoaXMgY29kZSBtYWtlcyBoZWF2eSB1c2Ugb2YgdGhlIEVHTF9NRVNBX3NjcmVlbl9zdXJmYWNlIGV4dGVuc2lvbiBzbwotY2hlY2sgdGhlIGRpc3BsYXkgdG8gZGV0ZXJtaW5lIGlmIGl0J3Mgc3VwcG9ydGVkIGJ5IHRoZSB1bmRlcmx5aW5nIEVHTAotaW1wbGVtZW50YXRpb24uIElmIGl0IGRvZXNuJ3QgdGhlbiBiYWlsLgotCi1TaWduZWQtb2ZmLWJ5OiBGcmFuayBCaW5ucyA8ZnJhbmsuYmlubnNAaW1ndGVjLmNvbT4KLQotQXBwbGllZCBhbmQgZml4ZWQgdXAgaW4gWW9jdG8gYnkuLi4KLQotSW50ZWdyYXRlZC1ieTogVG9tIFphbnVzc2kgPHRvbS56YW51c3NpQGxpbnV4LmludGVsLmNvbT4KLQotVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCi0tLS0KLSBzcmMvZWdsL29wZW5nbC9kZW1vMS5jIHwgNiArKysrKysKLSAxIGZpbGUgY2hhbmdlZCwgNiBpbnNlcnRpb25zKCspCi0KLWRpZmYgLS1naXQgYS9zcmMvZWdsL29wZW5nbC9kZW1vMS5jIGIvc3JjL2VnbC9vcGVuZ2wvZGVtbzEuYwotaW5kZXggM2EzNTY0Yy4uMDZlMjEzOCAxMDA2NDQKLS0tLSBhL3NyYy9lZ2wvb3BlbmdsL2RlbW8xLmMKLSsrKyBiL3NyYy9lZ2wvb3BlbmdsL2RlbW8xLmMKLUBAIC0xMTAsNiArMTEwLDEyIEBAIG1haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKLSAgICBwcmludGYoIkVHTCB2ZXJzaW9uID0gJWQuJWRcbiIsIG1haiwgbWluKTsKLSAgICBwcmludGYoIkVHTF9WRU5ET1IgPSAlc1xuIiwgZWdsUXVlcnlTdHJpbmcoZCwgRUdMX1ZFTkRPUikpOwotIAotKyAgIGlmICghc3Ryc3RyKGVnbFF1ZXJ5U3RyaW5nKGQsIEVHTF9FWFRFTlNJT05TKSwKLSsgICAgICAgICAgICAgICAiRUdMX01FU0Ffc2NyZWVuX3N1cmZhY2UiKSkgewotKyAgICAgIHByaW50ZigiRUdMX01FU0Ffc2NyZWVuX3N1cmZhY2UgaXMgbm90IHN1cHBvcnRlZFxuIik7Ci0rICAgICAgZXhpdCgxKTsKLSsgICB9Ci0rCi0gICAgZWdsR2V0Q29uZmlncyhkLCBOVUxMLCAwLCAmbnVtQ29uZmlncyk7Ci0gICAgY29uZmlncyA9IG1hbGxvYyhzaXplb2YoKmNvbmZpZ3MpICpudW1Db25maWdzKTsKLSAgICBlZ2xHZXRDb25maWdzKGQsIGNvbmZpZ3MsIG51bUNvbmZpZ3MsICZudW1Db25maWdzKTsKLS0tIAotMi4wLjAKLQpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy9tZXNhL21lc2EtZGVtb3MvMDAwNy1JbnN0YWxsLWZldy1tb3JlLXRlc3QtcHJvZ3JhbXMucGF0Y2ggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL21lc2EvbWVzYS1kZW1vcy8wMDA3LUluc3RhbGwtZmV3LW1vcmUtdGVzdC1wcm9ncmFtcy5wYXRjaAppbmRleCA4OWQyZmFjLi42YjY3NmNkIDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL21lc2EvbWVzYS1kZW1vcy8wMDA3LUluc3RhbGwtZmV3LW1vcmUtdGVzdC1wcm9ncmFtcy5wYXRjaAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL21lc2EvbWVzYS1kZW1vcy8wMDA3LUluc3RhbGwtZmV3LW1vcmUtdGVzdC1wcm9ncmFtcy5wYXRjaApAQCAtMSwxMSArMSwxMyBAQAotRnJvbSBkOTMwYjJkYTU3ZjdjOWVmYjgwYzhjZWY4ZjhhZGFkMTViYmJjMGQzIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbSBjNTllMjg2ZmE0ZTgxOGNhMDE1ZGQ0MGU0NzI1NjM2MzA5OTcwZWE4IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQogRnJvbTogTWFydGluIEphbnNhIDxNYXJ0aW4uSmFuc2FAZ21haWwuY29tPgogRGF0ZTogVGh1LCAxMCBKdWwgMjAxNCAxNDozMDo1MiArMDIwMAotU3ViamVjdDogW1BBVENIIDcvOV0gSW5zdGFsbCBmZXcgbW9yZSB0ZXN0IHByb2dyYW1zCitTdWJqZWN0OiBbUEFUQ0hdIEluc3RhbGwgZmV3IG1vcmUgdGVzdCBwcm9ncmFtcwogCiBVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKIAogU2lnbmVkLW9mZi1ieTogTWFydGluIEphbnNhIDxNYXJ0aW4uSmFuc2FAZ21haWwuY29tPgorCitTaWduZWQtb2ZmLWJ5OiBKdXNzaSBLdWtrb25lbiA8anVzc2kua3Vra29uZW5AaW50ZWwuY29tPgogLS0tCiAgc3JjL2VnbC9vcGVuZ2wvTWFrZWZpbGUuYW0gICAgfCAgMiArLQogIHNyYy9lZ2wvb3BlbmdsZXMxL01ha2VmaWxlLmFtIHwgMTAgKysrKy0tLS0tLQpAQCAtMTMsNyArMTUsNyBAQAogIDMgZmlsZXMgY2hhbmdlZCwgNiBpbnNlcnRpb25zKCspLCA4IGRlbGV0aW9ucygtKQogCiBkaWZmIC0tZ2l0IGEvc3JjL2VnbC9vcGVuZ2wvTWFrZWZpbGUuYW0gYi9zcmMvZWdsL29wZW5nbC9NYWtlZmlsZS5hbQotaW5kZXggMGM3MjI4Zi4uODdiMmYxYSAxMDA2NDQKK2luZGV4IGZlN2ZhYTkuLjNlNDgxNDEgMTAwNjQ0CiAtLS0gYS9zcmMvZWdsL29wZW5nbC9NYWtlZmlsZS5hbQogKysrIGIvc3JjL2VnbC9vcGVuZ2wvTWFrZWZpbGUuYW0KIEBAIC01MCw3ICs1MCw3IEBAIGVuZGlmCkBAIC0yMiw0MiArMjQsMTEgQEAKICBpZiBIQVZFX0VHTAogLW5vaW5zdF9QUk9HUkFNUyA9IFwKICtiaW5fUFJPR1JBTVMgPSBcCi0gCWRlbW8xIFwKLSAJZGVtbzIgXAotIAlkZW1vMyBcCi1kaWZmIC0tZ2l0IGEvc3JjL2VnbC9vcGVuZ2xlczEvTWFrZWZpbGUuYW0gYi9zcmMvZWdsL29wZW5nbGVzMS9NYWtlZmlsZS5hbQotaW5kZXggMzQ1NWU3NS4uNTE2ZTUxNiAxMDA2NDQKLS0tLSBhL3NyYy9lZ2wvb3BlbmdsZXMxL01ha2VmaWxlLmFtCi0rKysgYi9zcmMvZWdsL29wZW5nbGVzMS9NYWtlZmlsZS5hbQotQEAgLTM2LDExICszNiwxMSBAQCBBTV9MREZMQUdTID0gXAotIAkkKEVHTF9MSUJTKSBcCi0gCS1sbQotIAotLW5vaW5zdF9QUk9HUkFNUyA9Ci0rYmluX1BST0dSQU1TID0KLSAKLSBpZiBIQVZFX0VHTAotIGlmIEhBVkVfR0xFU1YxCi0tbm9pbnN0X1BST0dSQU1TICs9IFwKLStiaW5fUFJPR1JBTVMgKz0gXAotIAlkcmF3dGV4X3NjcmVlbiBcCi0gCWdlYXJzX3NjcmVlbiBcCi0gCXRvcnVzX3NjcmVlbiBcCi1AQCAtNTcsMTAgKzU3LDggQEAgdG9ydXNfc2NyZWVuX0xEQUREID0gLi4vZWdsdXQvbGliZWdsdXRfc2NyZWVuLmxhCi0gdHJpX3NjcmVlbl9MREFERCA9IC4uL2VnbHV0L2xpYmVnbHV0X3NjcmVlbi5sYQotIAotIGlmIEhBVkVfWDExCi0tbm9pbnN0X1BST0dSQU1TICs9IFwKLS0JY2xlYXIKLS0KLS1iaW5fUFJPR1JBTVMgPSBcCi0rYmluX1BST0dSQU1TICs9IFwKLSsJY2xlYXIgXAotIAliaW5kdGV4IFwKLSAJZHJhd3RleF94MTEgXAotIAllZ2xmYmRldiBcCisgCWVnbGluZm8gXAorIAlwZWdsZ2VhcnMgXAorIAkkKEVHTF9EUk1fREVNT1MpIFwKIGRpZmYgLS1naXQgYS9zcmMvZWdsL29wZW52Zy9NYWtlZmlsZS5hbSBiL3NyYy9lZ2wvb3BlbnZnL01ha2VmaWxlLmFtCi1pbmRleCA3MzE4YTQzLi5iNTQ1MjI1IDEwMDY0NAoraW5kZXggYjBmMTIxMi4uNWZkMWNmOCAxMDA2NDQKIC0tLSBhL3NyYy9lZ2wvb3BlbnZnL01ha2VmaWxlLmFtCiArKysgYi9zcmMvZWdsL29wZW52Zy9NYWtlZmlsZS5hbQogQEAgLTQ5LDcgKzQ5LDcgQEAgZW5kaWYKQEAgLTY2LDkgKzM3LDkgQEAKICBpZiBIQVZFX1ZHCiAtbm9pbnN0X1BST0dSQU1TID0gXAogK2Jpbl9QUk9HUkFNUyA9IFwKLSAJbGlvbl9zY3JlZW4gXAotIAlzcF9zY3JlZW4gXAogIAkkKEVHTF9YMTFfREVNT1MpCisgZW5kaWYKKyBlbmRpZgogLS0gCi0yLjAuMAorMi4xLjQKIApkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy9tZXNhL21lc2EtZGVtb3MvMDAxMC1zaGFyZWR0ZXhfbXQtZml4LXJlbmRlcmluZy10aHJlYWQtaGFuZy5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvbWVzYS9tZXNhLWRlbW9zLzAwMTAtc2hhcmVkdGV4X210LWZpeC1yZW5kZXJpbmctdGhyZWFkLWhhbmcucGF0Y2gKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDA0ZTFiNDQuLjAwMDAwMDAKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy9tZXNhL21lc2EtZGVtb3MvMDAxMC1zaGFyZWR0ZXhfbXQtZml4LXJlbmRlcmluZy10aHJlYWQtaGFuZy5wYXRjaAorKysgL2Rldi9udWxsCkBAIC0xLDQzICswLDAgQEAKLUZyb20gNTI1ZmE5ZGVkNzJkMjJiNTNjNWViMzY2ZjYxZTJhYzFkNDA3YTJkYiBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKLUZyb206IEF3YWlzIEJlbGFsIDxhd2Fpc19iZWxhbEBtZW50b3IuY29tPgotRGF0ZTogVGh1LCA4IE9jdCAyMDE1IDEzOjQ5OjMxICswNTAwCi1TdWJqZWN0OiBbUEFUQ0hdIHNoYXJlZHRleF9tdDogZml4IHJlbmRlcmluZyB0aHJlYWQgaGFuZwotCi1YTmV4dEV2ZW50IGlzIGEgYmxvY2tpbmcgY2FsbCB3aGljaCBsb2NrcyB1cCB0aGUgZGlzcGxheSBtdXRleAotdGhpcyBjYXVzZXMgdGhlIHJlbmRlcmluZyB0aHJlYWRzIHRvIGhhbmcgd2hlbiB0aGV5IHRyeSBjYWxsCi1nbFhTd2FwQnVmZmVycygpIGFzIHRoYXQgdHJpZXMgdG8gdGFrZSB0aGUgc2FtZSBtdXRleCBpbgotdW5kZXJseWluZyBjYWxscyB0aHJvdWdoIFhDb3B5QXJlYSgpLgotU28gd2Ugb25seSBnbyB0byBYTmV4dEV2ZW50IHdoZW4gaXQgaGFzIGF0IGxlYXN0IG9uZSBldmVudAotYW5kIHdlIHdvdWxkbid0IGxvY2sgaW5kZWZpbml0ZWx5LgotCi1TaWduZWQtb2ZmLWJ5OiBBd2FpcyBCZWxhbCA8YXdhaXNfYmVsYWxAbWVudG9yLmNvbT4KLVVwc3RyZWFtLVN0YXR1czogQmFja3BvcnQgKDJiMzA0ZTc2NTY5NWQzODVmZDNiZjQxNGU2ZTQ0NDAyMGJlZGIwYTgpCi0KLS0tLQotIHNyYy94ZGVtb3Mvc2hhcmVkdGV4X210LmMgfCA5ICsrKysrKystLQotIDEgZmlsZSBjaGFuZ2VkLCA3IGluc2VydGlvbnMoKyksIDIgZGVsZXRpb25zKC0pCi0KLWRpZmYgLS1naXQgYS9zcmMveGRlbW9zL3NoYXJlZHRleF9tdC5jIGIvc3JjL3hkZW1vcy9zaGFyZWR0ZXhfbXQuYwotaW5kZXggYTkwOTAzYS4uMWQ1MDNjNCAxMDA2NDQKLS0tLSBhL3NyYy94ZGVtb3Mvc2hhcmVkdGV4X210LmMKLSsrKyBiL3NyYy94ZGVtb3Mvc2hhcmVkdGV4X210LmMKLUBAIC00MjAsOSArNDIwLDE0IEBAIFJlc2l6ZShzdHJ1Y3Qgd2luZG93ICpoLCB1bnNpZ25lZCBpbnQgd2lkdGgsIHVuc2lnbmVkIGludCBoZWlnaHQpCi0gc3RhdGljIHZvaWQKLSBFdmVudExvb3Aodm9pZCkKLSB7Ci0rICAgaW50IGk7Ci0rICAgWEV2ZW50IGV2ZW50OwotICAgIHdoaWxlICgxKSB7Ci0tICAgICAgaW50IGk7Ci0tICAgICAgWEV2ZW50IGV2ZW50OwotKyAgICAgIC8qIERvIHdlIGhhdmUgYW4gZXZlbnQ/ICovCi0rICAgICAgaWYgKFhQZW5kaW5nKGdEcHkpID09IDApIHsKLSsgICAgICAgICB1c2xlZXAoMTAwMDApOwotKyAgICAgICAgIGNvbnRpbnVlOwotKyAgICAgIH0KLSAgICAgICBYTmV4dEV2ZW50KGdEcHksICZldmVudCk7Ci0gICAgICAgZm9yIChpID0gMDsgaSA8IE51bVdpbmRvd3M7IGkrKykgewotIAkgc3RydWN0IHdpbmRvdyAqaCA9ICZXaW5kb3dzW2ldOwotLS0gCi0xLjkuMQotCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL21lc2EvbWVzYS1kZW1vcy8wMDEyLW1lc2EtZGVtb3MtT3BlblZHLWRlbW9zLXdpdGgtc2luZ2xlLWZyYW1lLW5lZWQtZWdsU3cucGF0Y2ggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL21lc2EvbWVzYS1kZW1vcy8wMDEyLW1lc2EtZGVtb3MtT3BlblZHLWRlbW9zLXdpdGgtc2luZ2xlLWZyYW1lLW5lZWQtZWdsU3cucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzY4NzY0NwotLS0gL2Rldi9udWxsCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvbWVzYS9tZXNhLWRlbW9zLzAwMTItbWVzYS1kZW1vcy1PcGVuVkctZGVtb3Mtd2l0aC1zaW5nbGUtZnJhbWUtbmVlZC1lZ2xTdy5wYXRjaApAQCAtMCwwICsxLDQ0IEBACitGcm9tIDNhYTg0YzQ3ZTg4YTRjMzg0NDZjZTEzMjNhYmY2ZjJjNzczODkxMDQgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBQcmFiaHUgPHByYWJodS5zdW5kYXJhcmFqQGZyZWVzY2FsZS5jb20+CitEYXRlOiBNb24sIDE2IE5vdiAyMDE1IDE3OjA5OjMyIC0wNjAwCitTdWJqZWN0OiBbUEFUQ0hdIG1lc2EtZGVtb3M6IE9wZW5WRyBkZW1vcyB3aXRoIHNpbmdsZSBmcmFtZSBuZWVkIGVnbFN3YXBCdWZmZXIKKworc3AgYW5kIHRleHQgZGVtb3MgcmVuZGVyaW5nIHNpbmdsZSBmcmFtZS4gdG8gZGlzcGxheSB0aGUKK3NpbmdsZSBmcmFtZSByZW5kZXJlZCBuZWVkZWQgYSBlZ2xTd2FwQnVmZmVyIHRvIGRpcGxheSB0byB3aW5kb3cuCitIZW5jZSBhZGRlZCBlZ2x1dFBvc3RSZWRpc3BsYXkgdG8gZGlzcGxheSB0aGUgZnJhbWUKKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK1NpZ25lZC1vZmYtYnk6IFByYWJodSA8cHJhYmh1LnN1bmRhcmFyYWpAZnJlZXNjYWxlLmNvbT4KKy0tLQorIHNyYy9lZ2wvb3BlbnZnL3NwLmMgICB8IDEgKworIHNyYy9lZ2wvb3BlbnZnL3RleHQuYyB8IDEgKworIDIgZmlsZXMgY2hhbmdlZCwgMiBpbnNlcnRpb25zKCspCisKK2RpZmYgLS1naXQgYS9zcmMvZWdsL29wZW52Zy9zcC5jIGIvc3JjL2VnbC9vcGVudmcvc3AuYworaW5kZXggYTIwYzBhMy4uNDY4ZTkxZSAxMDA2NDQKKy0tLSBhL3NyYy9lZ2wvb3BlbnZnL3NwLmMKKysrKyBiL3NyYy9lZ2wvb3BlbnZnL3NwLmMKK0BAIC01MDAsNiArNTAwLDcgQEAgZHJhdyh2b2lkKQorICAgIH0KKyAKKyAgICB2Z0ZsdXNoKCk7CisrICAgZWdsdXRQb3N0UmVkaXNwbGF5KCk7CisgfQorIAorIAorZGlmZiAtLWdpdCBhL3NyYy9lZ2wvb3BlbnZnL3RleHQuYyBiL3NyYy9lZ2wvb3BlbnZnL3RleHQuYworaW5kZXggZjVjNmRlOC4uNDkyNTgxYyAxMDA2NDQKKy0tLSBhL3NyYy9lZ2wvb3BlbnZnL3RleHQuYworKysrIGIvc3JjL2VnbC9vcGVudmcvdGV4dC5jCitAQCAtMzYwLDYgKzM2MCw3IEBAIGRpc3BsYXkodm9pZCkKKyB7CisgICAgdmdDbGVhcigwLCAwLCB3aWR0aCwgaGVpZ2h0KTsKKyAgICBnbHlwaF9zdHJpbmdfZHJhdygxMC4wLCAxMC4wKTsKKysgICBlZ2x1dFBvc3RSZWRpc3BsYXkoKTsKKyB9CisgCisgCistLSAKKzIuNS4xCisKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvbWVzYS9tZXNhLWRlbW9zLzAwMTMtb25seS1idWlsZC1HTFgtZGVtb3MtaWYtbmVlZGVkLnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy9tZXNhL21lc2EtZGVtb3MvMDAxMy1vbmx5LWJ1aWxkLUdMWC1kZW1vcy1pZi1uZWVkZWQucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTdiZTRkZgotLS0gL2Rldi9udWxsCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvbWVzYS9tZXNhLWRlbW9zLzAwMTMtb25seS1idWlsZC1HTFgtZGVtb3MtaWYtbmVlZGVkLnBhdGNoCkBAIC0wLDAgKzEsNjIgQEAKK0Zyb20gMzIyYWYyOTQzOTBhN2Y0ZTE1MjRjNWE3OTMxMmJlNmNiZWJjZTk4OCBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEF3YWlzIEJlbGFsIDxhd2Fpc19iZWxhbEBtZW50b3IuY29tPgorRGF0ZTogV2VkLCAxMSBOb3YgMjAxNSAxNzoyMjoxMiArMDUwMAorU3ViamVjdDogW1BBVENIXSBvbmx5IGJ1aWxkIEdMWCBkZW1vcyBpZiBuZWVkZWQKKworVGhlcmUgYXJlIHBsYXRmb3JtcyB0aGF0IGRlZmF1bHQgdG8gRUdMIG9ubHkgY29uZmlndXJhdGlvbnMKK2luIHdoaWNoIGNhc2UgdGhlIEdMWCBhcHBsaWNhdGlvbnMgYXJlIG5vdCByZXF1aXJlZAorYXQgYWxsLiBBbGxvdyB0aGUgdXNlciB0byBjb250cm9sIGdlbmVyYXRpb24gb2YgdGhlc2UKK2RlbW9zIGFzIG5lZWRlZCB0aHJvdWdoIGEgY29uZmlndXJlIHN3aXRjaC4KKworU2lnbmVkLW9mZi1ieTogQXdhaXMgQmVsYWwgPGF3YWlzX2JlbGFsQG1lbnRvci5jb20+CitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKy0tLQorIGNvbmZpZ3VyZS5hYyAgICB8IDkgKysrKysrKysrCisgc3JjL01ha2VmaWxlLmFtIHwgNiArKysrKy0KKyAyIGZpbGVzIGNoYW5nZWQsIDE0IGluc2VydGlvbnMoKyksIDEgZGVsZXRpb24oLSkKKworZGlmZiAtLWdpdCBhL2NvbmZpZ3VyZS5hYyBiL2NvbmZpZ3VyZS5hYworaW5kZXggZjhlYzdlMy4uMWE0ZDk2ZCAxMDA2NDQKKy0tLSBhL2NvbmZpZ3VyZS5hYworKysrIGIvY29uZmlndXJlLmFjCitAQCAtMTMyLDYgKzEzMiwxMSBAQCBpZiB0ZXN0ICJ4JGVuYWJsZV9nbHUiID0geHllczsgdGhlbgorICAgICBERU1PX0xJQlM9IiRERU1PX0xJQlMgJEdMVV9MSUJTIgorIGZpCisgCisrQUNfQVJHX0VOQUJMRShbZ2x4LWRlbW9zXSwKKysgICAgW0FTX0hFTFBfU1RSSU5HKFstLWVuYWJsZS1nbHgtZGVtb3NdLAorKyAgICAgICAgW2VuYWJsZSBHTFggZGVtb3MgQDw6QGRlZmF1bHQ9YXV0b0A6PkBdKV0sCisrICAgIFtnbHhfZGVtb3NfZW5hYmxlZD0iJGVuYWJsZXZhbCJdLAorKyAgICBbZ2x4X2RlbW9zX2VuYWJsZWQ9eWVzXSkKKyBBQ19BUkdfRU5BQkxFKFtlZ2xdLAorICAgICBbQVNfSEVMUF9TVFJJTkcoWy0tZW5hYmxlLWVnbF0sCisgICAgICAgICBbZW5hYmxlIEVHTCBsaWJyYXJ5IEA8OkBkZWZhdWx0PWF1dG9AOj5AXSldLAorQEAgLTMyNSw2ICszMzMsNyBAQCBBQ19TVUJTVChbV0FZTEFORF9MSUJTXSkKKyAKKyBBTV9DT05ESVRJT05BTChIQVZFX0dMVSwgdGVzdCAieCRnbHVfZW5hYmxlZCIgPSAieHllcyIpCisgQU1fQ09ORElUSU9OQUwoSEFWRV9HTEVXLCB0ZXN0ICJ4JGdsZXdfZW5hYmxlZCIgPSAieHllcyIpCisrQU1fQ09ORElUSU9OQUwoSEFWRV9HTFgsIHRlc3QgIngkZ2x4X2RlbW9zX2VuYWJsZWQiID0gInh5ZXMiKQorIEFNX0NPTkRJVElPTkFMKEhBVkVfRUdMLCB0ZXN0ICJ4JGVnbF9lbmFibGVkIiA9ICJ4eWVzIikKKyBBTV9DT05ESVRJT05BTChIQVZFX0dMRVNWMSwgdGVzdCAieCRnbGVzdjFfZW5hYmxlZCIgPSAieHllcyIpCisgQU1fQ09ORElUSU9OQUwoSEFWRV9HTEVTVjIsIHRlc3QgIngkZ2xlc3YyX2VuYWJsZWQiID0gInh5ZXMiKQorZGlmZiAtLWdpdCBhL3NyYy9NYWtlZmlsZS5hbSBiL3NyYy9NYWtlZmlsZS5hbQoraW5kZXggOGI4OWRlZS4uYTRkN2U4ZiAxMDA2NDQKKy0tLSBhL3NyYy9NYWtlZmlsZS5hbQorKysrIGIvc3JjL01ha2VmaWxlLmFtCitAQCAtNDQsOCArNDQsMTIgQEAgU1VCRElSUyA9IFwKKyAJc2xhbmcgXAorIAl0ZXN0cyBcCisgCXRvb2xzIFwKKy0Jd2dsIFwKKysJd2dsCisrCisraWYgSEFWRV9HTFgKKytTVUJESVJTICs9IFwKKyAJeGRlbW9zCisrZW5kaWYKKyAKKyBpZiBIQVZFX0dMRVcKKyBTVUJESVJTICs9IFwKKy0tIAorMS45LjEKKwpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy9tZXNhL21lc2EtZGVtb3NfOC4yLjAuYmIgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL21lc2EvbWVzYS1kZW1vc184LjIuMC5iYgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTU3YjhjNi4uMDAwMDAwMAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL21lc2EvbWVzYS1kZW1vc184LjIuMC5iYgorKysgL2Rldi9udWxsCkBAIC0xLDYwICswLDAgQEAKLVNVTU1BUlkgPSAiTWVzYSBkZW1vIGFwcGxpY2F0aW9ucyIKLURFU0NSSVBUSU9OID0gIlRoaXMgcGFja2FnZSBpbmNsdWRlcyB0aGUgZGVtb25zdHJhdGlvbiBhcHBsaWNhdGlvbiwgc3VjaCBhcyBnbHhnZWFycy4gXAotVGhlc2UgYXBwbGljYXRpb25zIGNhbiBiZSB1c2VkIGZvciBNZXNhIHZhbGlkYXRpb24gYW5kIGJlbmNobWFya2luZy4iCi1IT01FUEFHRSA9ICJodHRwOi8vbWVzYTNkLm9yZyIKLUJVR1RSQUNLRVIgPSAiaHR0cHM6Ly9idWdzLmZyZWVkZXNrdG9wLm9yZyIKLVNFQ1RJT04gPSAieDExIgotCi1MSUNFTlNFID0gIk1JVCAmIFBEIgotTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vc3JjL3hkZW1vcy9nbHhnZWFycy5jO2JlZ2lubGluZT0xO2VuZGxpbmU9MjA7bWQ1PTkxNDIyNTc4NTQ1MGVmZjY0NGE4NmM4NzFkM2FlMDBlIFwKLSAgICAgICAgICAgICAgICAgICAgZmlsZTovL3NyYy94ZGVtb3MvZ2x4ZGVtby5jO2JlZ2lubGluZT0xO2VuZGxpbmU9ODttZDU9YjAxZDVhYjFhZWU5NGQzNWI3ZWZhYTJlZjQ4ZTFhMDYiCi0KLVNSQ19VUkkgPSAiZnRwOi8vZnRwLmZyZWVkZXNrdG9wLm9yZy9wdWIvbWVzYS9kZW1vcy8ke1BWfS8ke0JQTn0tJHtQVn0udGFyLmJ6MiBcCi0gICAgZmlsZTovLzAwMDEtbWVzYS1kZW1vcy1BZGQtbWlzc2luZy1kYXRhLWZpbGVzLnBhdGNoIFwKLSAgICBmaWxlOi8vMDAwMi1Db3JyZWN0bHktaW1wbGVtZW50LXdpdGgtQUNfV0lUSC1nbHV0LXNvLXRoYXQtd2l0aG91LnBhdGNoIFwKLSAgICBmaWxlOi8vMDAwMy1jb25maWd1cmUtQWxsb3ctdG8tZGlzYWJsZS1kZW1vcy13aGljaC1yZXF1aXJlLUdMRVctLnBhdGNoIFwKLSAgICBmaWxlOi8vMDAwNC1Vc2UtREVNT1NfREFUQV9ESVItdG8tbG9jYXRlLWRhdGEtZmlsZXMucGF0Y2ggXAotICAgIGZpbGU6Ly8wMDA1LUZpeC1idWlsZC13aGVuLUVHTF9NRVNBX3NjcmVlbl9zdXJmYWNlLWV4dGVuc2lvbi1pc24ucGF0Y2ggXAotICAgIGZpbGU6Ly8wMDA2LVF1ZXJ5LWRpc3BsYXktZm9yLUVHTF9NRVNBX3NjcmVlbl9zdXJmYWNlLWV4dGVuc2lvbi0ucGF0Y2ggXAotICAgIGZpbGU6Ly8wMDA3LUluc3RhbGwtZmV3LW1vcmUtdGVzdC1wcm9ncmFtcy5wYXRjaCBcCi0gICAgZmlsZTovLzAwMDgtZ2xzbC1wZXJmLUFkZC1mZXctbWlzc2luZy0uZ2xzbC0udmVydC0uZnJhZy1maWxlcy10by5wYXRjaCBcCi0gICAgZmlsZTovLzAwMDktZ2xzbC1wZXJmLUluc3RhbGwtLmdsc2wtLnZlcnQtLmZyYWctZmlsZXMucGF0Y2ggXAotICAgIGZpbGU6Ly8wMDEwLXNoYXJlZHRleF9tdC1maXgtcmVuZGVyaW5nLXRocmVhZC1oYW5nLnBhdGNoIFwKLSIKLVNSQ19VUklbbWQ1c3VtXSA9ICI3MjYxM2EyYzhjMDEzNzE2ZGIwMmUzZmY1OWQyOTA2MSIKLVNSQ19VUklbc2hhMjU2c3VtXSA9ICJlNGJmZWNiNTgxNmRkZDRiN2IzN2MxYmM4NzZiNjNmMWY3ZjA2ZmRhNTg3OTIyMWE5Nzc0ZDA5NTJmOTBiYTkyIgotCi1pbmhlcml0IGF1dG90b29scyBwa2djb25maWcgZGlzdHJvX2ZlYXR1cmVzX2NoZWNrCi0jIGRlcGVuZHMgb24gdmlydHVhbC9lZ2wsIHZpcnR1YWwvbGliZ2wgLi4uCi1SRVFVSVJFRF9ESVNUUk9fRkVBVFVSRVMgPSAib3BlbmdsIgotCi1QQUNLQUdFQ09ORklHID89ICJkcm0gb3NtZXNhIGZyZWV0eXBlMiBnYm0gZWdsIGdsZXMxIGdsZXMyIFwKLSAgICAgICAgICAgICAgICAgICR7QGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCAneDExJywgJ3gxMSBnbGV3IGdsdScsICcnLCBkKX0iCi0KLSMgVGhlIFdheWxhbmQgY29kZSBkb2Vzbid0IHdvcmsgd2l0aCBXYXlsYW5kIDEuMCwgc28gZGlzYWJsZSBpdCBmb3Igbm93Ci0jJHtAYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsICd3YXlsYW5kJywgJ3dheWxhbmQnLCAnJywgZCl9IgotCi1FWFRSQV9PRUNPTkYgPSAiLS13aXRoLXN5c3RlbS1kYXRhLWZpbGVzIgotCi1QQUNLQUdFQ09ORklHW2RybV0gPSAiLS1lbmFibGUtbGliZHJtLC0tZGlzYWJsZS1saWJkcm0sbGliZHJtIgotUEFDS0FHRUNPTkZJR1tlZ2xdID0gIi0tZW5hYmxlLWVnbCwtLWRpc2FibGUtZWdsLHZpcnR1YWwvZWdsIgotUEFDS0FHRUNPTkZJR1tmcmVldHlwZTJdID0gIi0tZW5hYmxlLWZyZWV0eXBlMiwtLWRpc2FibGUtZnJlZXR5cGUyLGZyZWV0eXBlIgotUEFDS0FHRUNPTkZJR1tnYm1dID0gIi0tZW5hYmxlLWdibSwtLWRpc2FibGUtZ2JtLHZpcnR1YWwvbGliZ2wiCi1QQUNLQUdFQ09ORklHW2dsZXMxXSA9ICItLWVuYWJsZS1nbGVzMSwtLWRpc2FibGUtZ2xlczEsdmlydHVhbC9saWJnbGVzMSIKLVBBQ0tBR0VDT05GSUdbZ2xlczJdID0gIi0tZW5hYmxlLWdsZXMyLC0tZGlzYWJsZS1nbGVzMix2aXJ0dWFsL2xpYmdsZXMyIgotUEFDS0FHRUNPTkZJR1tnbHV0XSA9ICItLXdpdGgtZ2x1dD0ke1NUQUdJTkdfRVhFQ1BSRUZJWERJUn0sLS13aXRob3V0LWdsdXQsIgotUEFDS0FHRUNPTkZJR1tvc21lc2FdID0gIi0tZW5hYmxlLW9zbWVzYSwtLWRpc2FibGUtb3NtZXNhLCIKLVBBQ0tBR0VDT05GSUdbdmddID0gIi0tZW5hYmxlLXZnLC0tZGlzYWJsZS12Zyx2aXJ0dWFsL2xpYm9wZW52ZyIKLVBBQ0tBR0VDT05GSUdbd2F5bGFuZF0gPSAiLS1lbmFibGUtd2F5bGFuZCwtLWRpc2FibGUtd2F5bGFuZCx2aXJ0dWFsL2xpYmdsIHdheWxhbmQiCi1QQUNLQUdFQ09ORklHW3gxMV0gPSAiLS1lbmFibGUteDExLC0tZGlzYWJsZS14MTEsdmlydHVhbC9saWJ4MTEiCi1QQUNLQUdFQ09ORklHW2dsZXddID0gIi0tZW5hYmxlLWdsZXcsLS1kaXNhYmxlLWdsZXcsZ2xldyIKLVBBQ0tBR0VDT05GSUdbZ2x1XSA9ICItLWVuYWJsZS1nbHUsLS1kaXNhYmxlLWdsdSx2aXJ0dWFsL2xpYmdsIgotCi1kb19pbnN0YWxsX2FwcGVuZCgpIHsKLQkjIGl0IGNhbiBiZSBjb21wbGV0ZWx5IGVtcHR5IHdoZW4gYWxsIFBBQ0tBR0VDT05GSUcgb3B0aW9ucyBhcmUgZGlzYWJsZWQKLQlybWRpciAtLWlnbm9yZS1mYWlsLW9uLW5vbi1lbXB0eSAke0R9JHtiaW5kaXJ9Ci0KLQlpZiBbIC1mICR7RH0ke2JpbmRpcn0vY2xlYXIgXTsgdGhlbgotICAgICAgICAJbXYgJHtEfSR7YmluZGlyfS9jbGVhciAke0R9JHtiaW5kaXJ9L2NsZWFyLm1lc2EtZGVtb3MKLQlmaQotfQpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy9tZXNhL21lc2EtZGVtb3NfOC4zLjAuYmIgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL21lc2EvbWVzYS1kZW1vc184LjMuMC5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mYWIwYmRiCi0tLSAvZGV2L251bGwKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy9tZXNhL21lc2EtZGVtb3NfOC4zLjAuYmIKQEAgLTAsMCArMSw1OSBAQAorU1VNTUFSWSA9ICJNZXNhIGRlbW8gYXBwbGljYXRpb25zIgorREVTQ1JJUFRJT04gPSAiVGhpcyBwYWNrYWdlIGluY2x1ZGVzIHRoZSBkZW1vbnN0cmF0aW9uIGFwcGxpY2F0aW9uLCBzdWNoIGFzIGdseGdlYXJzLiBcCitUaGVzZSBhcHBsaWNhdGlvbnMgY2FuIGJlIHVzZWQgZm9yIE1lc2EgdmFsaWRhdGlvbiBhbmQgYmVuY2htYXJraW5nLiIKK0hPTUVQQUdFID0gImh0dHA6Ly9tZXNhM2Qub3JnIgorQlVHVFJBQ0tFUiA9ICJodHRwczovL2J1Z3MuZnJlZWRlc2t0b3Aub3JnIgorU0VDVElPTiA9ICJ4MTEiCisKK0xJQ0VOU0UgPSAiTUlUICYgUEQiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9zcmMveGRlbW9zL2dseGdlYXJzLmM7YmVnaW5saW5lPTE7ZW5kbGluZT0yMDttZDU9OTE0MjI1Nzg1NDUwZWZmNjQ0YTg2Yzg3MWQzYWUwMGUgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vc3JjL3hkZW1vcy9nbHhkZW1vLmM7YmVnaW5saW5lPTE7ZW5kbGluZT04O21kNT1iMDFkNWFiMWFlZTk0ZDM1YjdlZmFhMmVmNDhlMWEwNiIKKworU1JDX1VSSSA9ICJmdHA6Ly9mdHAuZnJlZWRlc2t0b3Aub3JnL3B1Yi9tZXNhL2RlbW9zLyR7UFZ9LyR7QlBOfS0ke1BWfS50YXIuYnoyIFwKKyAgICAgICAgICAgZmlsZTovLzAwMDEtbWVzYS1kZW1vcy1BZGQtbWlzc2luZy1kYXRhLWZpbGVzLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovLzAwMDMtY29uZmlndXJlLUFsbG93LXRvLWRpc2FibGUtZGVtb3Mtd2hpY2gtcmVxdWlyZS1HTEVXLS5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly8wMDA0LVVzZS1ERU1PU19EQVRBX0RJUi10by1sb2NhdGUtZGF0YS1maWxlcy5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly8wMDA3LUluc3RhbGwtZmV3LW1vcmUtdGVzdC1wcm9ncmFtcy5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly8wMDA4LWdsc2wtcGVyZi1BZGQtZmV3LW1pc3NpbmctLmdsc2wtLnZlcnQtLmZyYWctZmlsZXMtdG8ucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vMDAwOS1nbHNsLXBlcmYtSW5zdGFsbC0uZ2xzbC0udmVydC0uZnJhZy1maWxlcy5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly8wMDEyLW1lc2EtZGVtb3MtT3BlblZHLWRlbW9zLXdpdGgtc2luZ2xlLWZyYW1lLW5lZWQtZWdsU3cucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vMDAxMy1vbmx5LWJ1aWxkLUdMWC1kZW1vcy1pZi1uZWVkZWQucGF0Y2ggXAorICAgICAgICAgICAiCitTUkNfVVJJW21kNXN1bV0gPSAiNjI4ZTc1YzIzYzE3Mzk0ZjExYTMxNmMzNmY4ZTQxNjQiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiYzE3MzE1NGJiZDBkNWZiNTNkNzMyNDcxOTg0ZGVmNDJmYjFiMTRhYzg1ZmNiODM0MTM4ZmI5NTE4YjNlMGJlZiIKKworaW5oZXJpdCBhdXRvdG9vbHMgcGtnY29uZmlnIGRpc3Ryb19mZWF0dXJlc19jaGVjaworIyBkZXBlbmRzIG9uIHZpcnR1YWwvZWdsLCB2aXJ0dWFsL2xpYmdsIC4uLgorUkVRVUlSRURfRElTVFJPX0ZFQVRVUkVTID0gIm9wZW5nbCB4MTEiCisKK1BBQ0tBR0VDT05GSUcgPz0gImRybSBvc21lc2EgZnJlZXR5cGUyIGdibSBlZ2wgZ2xlczEgZ2xlczIgXAorICAgICAgICAgICAgICAgICAgeDExIGdsZXcgZ2x1IGdseCIKKworIyBUaGUgV2F5bGFuZCBjb2RlIGRvZXNuJ3Qgd29yayB3aXRoIFdheWxhbmQgMS4wLCBzbyBkaXNhYmxlIGl0IGZvciBub3cKKyMke0BiYi51dGlscy5jb250YWlucygnRElTVFJPX0ZFQVRVUkVTJywgJ3dheWxhbmQnLCAnd2F5bGFuZCcsICcnLCBkKX0iCisKK0VYVFJBX09FQ09ORiA9ICItLXdpdGgtc3lzdGVtLWRhdGEtZmlsZXMiCisKK1BBQ0tBR0VDT05GSUdbZHJtXSA9ICItLWVuYWJsZS1saWJkcm0sLS1kaXNhYmxlLWxpYmRybSxsaWJkcm0iCitQQUNLQUdFQ09ORklHW2VnbF0gPSAiLS1lbmFibGUtZWdsLC0tZGlzYWJsZS1lZ2wsdmlydHVhbC9lZ2wiCitQQUNLQUdFQ09ORklHW2ZyZWV0eXBlMl0gPSAiLS1lbmFibGUtZnJlZXR5cGUyLC0tZGlzYWJsZS1mcmVldHlwZTIsZnJlZXR5cGUiCitQQUNLQUdFQ09ORklHW2dibV0gPSAiLS1lbmFibGUtZ2JtLC0tZGlzYWJsZS1nYm0sdmlydHVhbC9saWJnbCIKK1BBQ0tBR0VDT05GSUdbZ2xlczFdID0gIi0tZW5hYmxlLWdsZXMxLC0tZGlzYWJsZS1nbGVzMSx2aXJ0dWFsL2xpYmdsZXMxIgorUEFDS0FHRUNPTkZJR1tnbGVzMl0gPSAiLS1lbmFibGUtZ2xlczIsLS1kaXNhYmxlLWdsZXMyLHZpcnR1YWwvbGliZ2xlczIiCitQQUNLQUdFQ09ORklHW2dsdXRdID0gIi0td2l0aC1nbHV0PSR7U1RBR0lOR19FWEVDUFJFRklYRElSfSwtLXdpdGhvdXQtZ2x1dCwiCitQQUNLQUdFQ09ORklHW29zbWVzYV0gPSAiLS1lbmFibGUtb3NtZXNhLC0tZGlzYWJsZS1vc21lc2EsIgorUEFDS0FHRUNPTkZJR1t2Z10gPSAiLS1lbmFibGUtdmcsLS1kaXNhYmxlLXZnLHZpcnR1YWwvbGlib3BlbnZnIgorUEFDS0FHRUNPTkZJR1t3YXlsYW5kXSA9ICItLWVuYWJsZS13YXlsYW5kLC0tZGlzYWJsZS13YXlsYW5kLHZpcnR1YWwvbGliZ2wgd2F5bGFuZCIKK1BBQ0tBR0VDT05GSUdbeDExXSA9ICItLWVuYWJsZS14MTEsLS1kaXNhYmxlLXgxMSx2aXJ0dWFsL2xpYngxMSIKK1BBQ0tBR0VDT05GSUdbZ2xld10gPSAiLS1lbmFibGUtZ2xldywtLWRpc2FibGUtZ2xldyxnbGV3IgorUEFDS0FHRUNPTkZJR1tnbHVdID0gIi0tZW5hYmxlLWdsdSwtLWRpc2FibGUtZ2x1LHZpcnR1YWwvbGliZ2wiCitQQUNLQUdFQ09ORklHW2dseF0gPSAiLS1lbmFibGUtZ2x4LWRlbW9zLC0tZGlzYWJsZS1nbHgtZGVtb3MiCisKK2RvX2luc3RhbGxfYXBwZW5kKCkgeworCSMgaXQgY2FuIGJlIGNvbXBsZXRlbHkgZW1wdHkgd2hlbiBhbGwgUEFDS0FHRUNPTkZJRyBvcHRpb25zIGFyZSBkaXNhYmxlZAorCXJtZGlyIC0taWdub3JlLWZhaWwtb24tbm9uLWVtcHR5ICR7RH0ke2JpbmRpcn0KKworCWlmIFsgLWYgJHtEfSR7YmluZGlyfS9jbGVhciBdOyB0aGVuCisgICAgICAgIAltdiAke0R9JHtiaW5kaXJ9L2NsZWFyICR7RH0ke2JpbmRpcn0vY2xlYXIubWVzYS1kZW1vcworCWZpCit9CmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL21lc2EvbWVzYS1nbF8xMS4xLjEuYmIgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL21lc2EvbWVzYS1nbF8xMS4xLjEuYmIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGZjMmJjYTkuLjAwMDAwMDAKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy9tZXNhL21lc2EtZ2xfMTEuMS4xLmJiCisrKyAvZGV2L251bGwKQEAgLTEsMTMgKzAsMCBAQAotcmVxdWlyZSBtZXNhXyR7UFZ9LmJiCi0KLVNVTU1BUlkgKz0gIiAoT3BlbkdMIG9ubHksIG5vIEVHTC9HTEVTKSIKLQotRklMRVNFWFRSQVBBVEhTID0uICIke0ZJTEVfRElSTkFNRX0vbWVzYToiCi0KLVBST1ZJREVTID0gInZpcnR1YWwvbGliZ2wgdmlydHVhbC9tZXNhIgotCi1TID0gIiR7V09SS0RJUn0vbWVzYS0ke1BWfSIKLQotUEFDS0FHRUNPTkZJRyA/Pz0gImRyaSAke0BiYi51dGlscy5jb250YWlucygnRElTVFJPX0ZFQVRVUkVTJywgJ3gxMScsICd4MTEnLCAnJywgZCl9IgotCi1FWENMVURFX0ZST01fV09STEQgPSAiMSIKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvbWVzYS9tZXNhLWdsXzEyLjAuMS5iYiBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvbWVzYS9tZXNhLWdsXzEyLjAuMS5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mMDZhM2U5Ci0tLSAvZGV2L251bGwKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy9tZXNhL21lc2EtZ2xfMTIuMC4xLmJiCkBAIC0wLDAgKzEsMTMgQEAKK3JlcXVpcmUgbWVzYV8ke1BWfS5iYgorCitTVU1NQVJZICs9ICIgKE9wZW5HTCBvbmx5LCBubyBFR0wvR0xFUykiCisKK0ZJTEVTRVhUUkFQQVRIUyA9LiAiJHtGSUxFX0RJUk5BTUV9L21lc2E6IgorCitQUk9WSURFUyA9ICJ2aXJ0dWFsL2xpYmdsIHZpcnR1YWwvbWVzYSIKKworUyA9ICIke1dPUktESVJ9L21lc2EtJHtQVn0iCisKK1BBQ0tBR0VDT05GSUcgPz89ICJkcmkgJHtNRVNBX0NSWVBUT30gJHtAYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsICd4MTEnLCAneDExJywgJycsIGQpfSIKKworRVhDTFVERV9GUk9NX1dPUkxEID0gIjEiCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL21lc2EvbWVzYS5pbmMgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL21lc2EvbWVzYS5pbmMKaW5kZXggNDQyNDc5YS4uZTQ4ODBmZiAxMDA2NDQKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy9tZXNhL21lc2EuaW5jCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvbWVzYS9tZXNhLmluYwpAQCAtMTAsNyArMTAsNyBAQAogQlVHVFJBQ0tFUiA9ICJodHRwczovL2J1Z3MuZnJlZWRlc2t0b3Aub3JnIgogU0VDVElPTiA9ICJ4MTEiCiBMSUNFTlNFID0gIk1JVCIKLUxJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL2RvY3MvbGljZW5zZS5odG1sO21kNT02YTIzNDQ1OTgyYTdhOTcyYWMxOThlOTNjYzFjYjNkZSIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL2RvY3MvbGljZW5zZS5odG1sO21kNT04OTlmYmU3ZTQyZDQ5NGM3YzhjMTU5YzcwMDE2OTNkNSIKIAogUEUgPSAiMiIKIApAQCAtMjQsMTEgKzI0LDEzIEBACiAKIEVYVFJBX09FQ09ORiA9ICItLWVuYWJsZS1zaGFyZWQtZ2xhcGkiCiAKLVBBQ0tBR0VDT05GSUcgPz89ICJlZ2wgZ2xlcyBkcmkgJHtNRVNBX0NSWVBUT30gXAorUEFDS0FHRUNPTkZJRyA/Pz0gImdibSBlZ2wgZ2xlcyBkcmkgJHtNRVNBX0NSWVBUT30gXAogCQkke0BiYi51dGlscy5jb250YWlucygnRElTVFJPX0ZFQVRVUkVTJywgJ3gxMScsICd4MTEnLCAnJywgZCl9XAogCQkke0BiYi51dGlscy5jb250YWlucygnRElTVFJPX0ZFQVRVUkVTJywgJ3dheWxhbmQnLCAnd2F5bGFuZCcsICcnLCBkKX1cCiAJCSIKIAorUEFDS0FHRUNPTkZJR1tnYm1dID0gIi0tZW5hYmxlLWdibSwtLWRpc2FibGUtZ2JtIgorCiBYMTFfREVQUyA9ICJ4Zjg2ZHJpcHJvdG8gZ2xwcm90byB2aXJ0dWFsL2xpYngxMSBsaWJ4ZXh0IGxpYnh4Zjg2dm0gbGlieGRhbWFnZSBsaWJ4Zml4ZXMiCiBQQUNLQUdFQ09ORklHW3gxMV0gPSAiLS1lbmFibGUtZ2x4LXRscywtLWRpc2FibGUtZ2x4LCR7WDExX0RFUFN9IgogUEFDS0FHRUNPTkZJR1t4dm1jXSA9ICItLWVuYWJsZS14dm1jLC0tZGlzYWJsZS14dm1jLGxpYnh2bWMiCkBAIC0zNyw3ICszOSw3IEBACiBEUklEUklWRVJTID0gInN3cmFzdCIKIERSSURSSVZFUlNfYXBwZW5kX3g4NiA9ICIscmFkZW9uLHIyMDAsbm91dmVhdSxpOTY1LGk5MTUiCiBEUklEUklWRVJTX2FwcGVuZF94ODYtNjQgPSAiLHJhZGVvbixyMjAwLG5vdXZlYXUsaTk2NSxpOTE1IgotUEFDS0FHRUNPTkZJR1tkcmldID0gIi0tZW5hYmxlLWRyaSAtLXdpdGgtZHJpLWRyaXZlcnM9JHtEUklEUklWRVJTfSAtLWVuYWJsZS1nYm0sIC0tZGlzYWJsZS1kcmksIGRyaTJwcm90byBsaWJkcm0iCitQQUNLQUdFQ09ORklHW2RyaV0gPSAiLS1lbmFibGUtZHJpIC0td2l0aC1kcmktZHJpdmVycz0ke0RSSURSSVZFUlN9LCAtLWRpc2FibGUtZHJpLCBkcmkycHJvdG8gbGliZHJtIgogUEFDS0FHRUNPTkZJR1tkcmkzXSA9ICItLWVuYWJsZS1kcmkzLCAtLWRpc2FibGUtZHJpMywgZHJpM3Byb3RvIHByZXNlbnRwcm90byBsaWJ4c2htZmVuY2UiCiAKIFBBQ0tBR0VDT05GSUdbZ2xlc10gPSAiLS1lbmFibGUtZ2xlczEgLS1lbmFibGUtZ2xlczIsIC0tZGlzYWJsZS1nbGVzMSAtLWRpc2FibGUtZ2xlczIiCkBAIC0xNDAsMTYgKzE0MiwxNyBAQAogICAgICAgICBkLnNldFZhcigiUlJFUExBQ0VTXyVzIiAlIHBrZywgcGtnLnJlcGxhY2UoIm1lc2EiLCAibWVzYS1kcmkiLCAxKSkKIAogICAgIGltcG9ydCByZQotICAgIGRyaV9kcml2ZXJzX3Jvb3QgPSBvcy5wYXRoLmpvaW4oZC5nZXRWYXIoJ2xpYmRpcicsIFRydWUpLCAiZHJpIikKLSAgICBkcmlfcGtncyA9IG9zLmxpc3RkaXIoZC5nZXRWYXIoJ1BLR0QnLCBUcnVlKSArIGRyaV9kcml2ZXJzX3Jvb3QpCi0gICAgbGliX25hbWUgPSBkLmV4cGFuZCgiJHtNTFBSRUZJWH1tZXNhLW1lZ2Fkcml2ZXIiKQotICAgIGZvciBwIGluIGRyaV9wa2dzOgotICAgICAgICBtID0gcmUubWF0Y2goJ14oLiopX2RyaVwuc28kJywgcCkKLSAgICAgICAgaWYgbToKLSAgICAgICAgICAgIHBrZ19uYW1lID0gIiAke01MUFJFRklYfW1lc2EtZHJpdmVyLSVzIiAlIGxlZ2l0aW1pemVfcGFja2FnZV9uYW1lKG0uZ3JvdXAoMSkpCi0gICAgICAgICAgICBkLmFwcGVuZFZhcigiUlBST1ZJREVTXyVzIiAlIGxpYl9uYW1lLCBwa2dfbmFtZSkKLSAgICAgICAgICAgIGQuYXBwZW5kVmFyKCJSQ09ORkxJQ1RTXyVzIiAlIGxpYl9uYW1lLCBwa2dfbmFtZSkKLSAgICAgICAgICAgIGQuYXBwZW5kVmFyKCJSUkVQTEFDRVNfJXMiICUgbGliX25hbWUsIHBrZ19uYW1lKQorICAgIGRyaV9kcml2ZXJzX3Jvb3QgPSBvZS5wYXRoLmpvaW4oZC5nZXRWYXIoJ1BLR0QnLCBUcnVlKSwgZC5nZXRWYXIoJ2xpYmRpcicsIFRydWUpLCAiZHJpIikKKyAgICBpZiBvcy5wYXRoLmlzZGlyKGRyaV9kcml2ZXJzX3Jvb3QpOgorICAgICAgICBkcmlfcGtncyA9IG9zLmxpc3RkaXIoZHJpX2RyaXZlcnNfcm9vdCkKKyAgICAgICAgbGliX25hbWUgPSBkLmV4cGFuZCgiJHtNTFBSRUZJWH1tZXNhLW1lZ2Fkcml2ZXIiKQorICAgICAgICBmb3IgcCBpbiBkcmlfcGtnczoKKyAgICAgICAgICAgIG0gPSByZS5tYXRjaCgnXiguKilfZHJpXC5zbyQnLCBwKQorICAgICAgICAgICAgaWYgbToKKyAgICAgICAgICAgICAgICBwa2dfbmFtZSA9ICIgJHtNTFBSRUZJWH1tZXNhLWRyaXZlci0lcyIgJSBsZWdpdGltaXplX3BhY2thZ2VfbmFtZShtLmdyb3VwKDEpKQorICAgICAgICAgICAgICAgIGQuYXBwZW5kVmFyKCJSUFJPVklERVNfJXMiICUgbGliX25hbWUsIHBrZ19uYW1lKQorICAgICAgICAgICAgICAgIGQuYXBwZW5kVmFyKCJSQ09ORkxJQ1RTXyVzIiAlIGxpYl9uYW1lLCBwa2dfbmFtZSkKKyAgICAgICAgICAgICAgICBkLmFwcGVuZFZhcigiUlJFUExBQ0VTXyVzIiAlIGxpYl9uYW1lLCBwa2dfbmFtZSkKIAogICAgIHBpcGVfZHJpdmVyc19yb290ID0gb3MucGF0aC5qb2luKGQuZ2V0VmFyKCdsaWJkaXInLCBUcnVlKSwgImdhbGxpdW0tcGlwZSIpCiAgICAgZG9fc3BsaXRfcGFja2FnZXMoZCwgcGlwZV9kcml2ZXJzX3Jvb3QsICdecGlwZV8oLiopXC5zbyQnLCAnbWVzYS1kcml2ZXItcGlwZS0lcycsICdNZXNhICVzIHBpcGUgZHJpdmVyJywgZXh0cmFfZGVwZW5kcz0nJykKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvbWVzYS9tZXNhXzExLjEuMS5iYiBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvbWVzYS9tZXNhXzExLjEuMS5iYgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTAyYWZjZi4uMDAwMDAwMAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL21lc2EvbWVzYV8xMS4xLjEuYmIKKysrIC9kZXYvbnVsbApAQCAtMSwxNiArMCwwIEBACi1yZXF1aXJlICR7QlBOfS5pbmMKLQotU1JDX1VSSSA9ICJmdHA6Ly9mdHAuZnJlZWRlc2t0b3Aub3JnL3B1Yi9tZXNhLyR7UFZ9L21lc2EtJHtQVn0udGFyLnh6IFwKLSAgICAgICAgICAgZmlsZTovL3JlcGxhY2VfZ2xpYmNfY2hlY2tfd2l0aF9saW51eC5wYXRjaCBcCi0iCi0KLVNSQ19VUklbbWQ1c3VtXSA9ICIxMDQzZGZiOTA3YmVlY2IyYTc2MTI3MjQ1NTk2MDQyNyIKLVNSQ19VUklbc2hhMjU2c3VtXSA9ICI2NGRiMDc0ZmM1MTQxMzZiNWZiMzg5MDExMWYwZDUwNjA0ZGI1MmYwYjFlOTRiYTNmY2IwZmU4NjY4YTdmZDIwIgotCi0jYmVjYXVzZSB3ZSBjYW5ub3QgcmVseSBvbiB0aGUgZmFjdCB0aGF0IGFsbCBhcHBzIHdpbGwgdXNlIHBrZ2NvbmZpZywKLSNtYWtlIGVnbHBsYXRmb3JtLmggaW5kZXBlbmRlbnQgb2YgTUVTQV9FR0xfTk9fWDExX0hFQURFUgotZG9faW5zdGFsbF9hcHBlbmQoKSB7Ci0gICAgaWYgJHtAYmIudXRpbHMuY29udGFpbnMoJ1BBQ0tBR0VDT05GSUcnLCAnZWdsJywgJ3RydWUnLCAnZmFsc2UnLCBkKX07IHRoZW4KLSAgICAgICAgc2VkIC1pIC1lICdzL14jaWYgZGVmaW5lZChNRVNBX0VHTF9OT19YMTFfSEVBREVSUykkLyNpZiBkZWZpbmVkKE1FU0FfRUdMX05PX1gxMV9IRUFERVJTKSB8fCAke0BiYi51dGlscy5jb250YWlucygnUEFDS0FHRUNPTkZJRycsICd4MTEnLCAnMCcsICcxJywgZCl9LycgJHtEfSR7aW5jbHVkZWRpcn0vRUdML2VnbHBsYXRmb3JtLmgKLSAgICBmaQotfQpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy9tZXNhL21lc2FfMTIuMC4xLmJiIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy9tZXNhL21lc2FfMTIuMC4xLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgwMTg5ZTMKLS0tIC9kZXYvbnVsbAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL21lc2EvbWVzYV8xMi4wLjEuYmIKQEAgLTAsMCArMSwxOCBAQAorcmVxdWlyZSAke0JQTn0uaW5jCisKK1NSQ19VUkkgPSAiZnRwOi8vZnRwLmZyZWVkZXNrdG9wLm9yZy9wdWIvbWVzYS8ke1BWfS9tZXNhLSR7UFZ9LnRhci54eiBcCisgICAgICAgICAgIGZpbGU6Ly9yZXBsYWNlX2dsaWJjX2NoZWNrX3dpdGhfbGludXgucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vY2xhbmctY29tcGlsZS1QUjg5NTk5LnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL2Rpc2FibGUtYXNtLW9uLW5vbi1nY2MucGF0Y2ggXAorIgorCitTUkNfVVJJW21kNXN1bV0gPSAiOTcyZmQ1YWQ1YTYzYWVhYmYxNzNmYjlhZGVmYzY1MjIiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiYmFiMjRmYjc5Zjc4Yzg3NjA3MzUyN2Y1MTVlZDg3MWZjOWM4MWQ4MTZmNjZjOGEwYjA1MWQ4ZDY1Mzg5NjM4OSIKKworI2JlY2F1c2Ugd2UgY2Fubm90IHJlbHkgb24gdGhlIGZhY3QgdGhhdCBhbGwgYXBwcyB3aWxsIHVzZSBwa2djb25maWcsCisjbWFrZSBlZ2xwbGF0Zm9ybS5oIGluZGVwZW5kZW50IG9mIE1FU0FfRUdMX05PX1gxMV9IRUFERVIKK2RvX2luc3RhbGxfYXBwZW5kKCkgeworICAgIGlmICR7QGJiLnV0aWxzLmNvbnRhaW5zKCdQQUNLQUdFQ09ORklHJywgJ2VnbCcsICd0cnVlJywgJ2ZhbHNlJywgZCl9OyB0aGVuCisgICAgICAgIHNlZCAtaSAtZSAncy9eI2lmIGRlZmluZWQoTUVTQV9FR0xfTk9fWDExX0hFQURFUlMpJC8jaWYgZGVmaW5lZChNRVNBX0VHTF9OT19YMTFfSEVBREVSUykgfHwgJHtAYmIudXRpbHMuY29udGFpbnMoJ1BBQ0tBR0VDT05GSUcnLCAneDExJywgJzAnLCAnMScsIGQpfS8nICR7RH0ke2luY2x1ZGVkaXJ9L0VHTC9lZ2xwbGF0Zm9ybS5oCisgICAgZmkKK30KZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvbXgvbXgtMS4wL2ZpeC1idWlsZC1kaXIucGF0Y2ggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL214L214LTEuMC9maXgtYnVpbGQtZGlyLnBhdGNoCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzYzhhODMyLi4wMDAwMDAwCi0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvbXgvbXgtMS4wL2ZpeC1idWlsZC1kaXIucGF0Y2gKKysrIC9kZXYvbnVsbApAQCAtMSw0NiArMCwwIEBACi1GaXggYnVpbGQgZm9yIFMgIT0gQgotCi1UaGlzIHBhdGNoIGlzIHNwZWNpZmljIHRvIHZlcnNpb24gMS40LngKLVVwc3RyZWFtLVN0YXR1czogU3VibWl0dGVkIEAgaHR0cHM6Ly9naXRodWIuY29tL2NsdXR0ZXItcHJvamVjdC9teC9pc3N1ZXMvODEKLVNpZ25lZC1vZmYtYnk6IFRvbWFzIEZyeWRyeWNoIDx0b21hc0BzbGVlcGZpdmUuY29tPgotLS0KLUluZGV4OiBnaXQvZG9jcy9yZWZlcmVuY2UvbGlibXgtZ3RrL01ha2VmaWxlLmFtCi09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLS0gZ2l0Lm9yaWcvZG9jcy9yZWZlcmVuY2UvbGlibXgtZ3RrL01ha2VmaWxlLmFtCTIwMTMtMDUtMDggMTU6MDc6MDIuMDI3MTU0Nzg4ICswMTAwCi0rKysgZ2l0L2RvY3MvcmVmZXJlbmNlL2xpYm14LWd0ay9NYWtlZmlsZS5hbQkyMDEzLTA1LTA4IDE1OjE0OjMzLjY4NDMxODY1MCArMDEwMAotQEAgLTEsMyArMSw2IEBACi0rRVhUUkFfRElTVD0KLStDTEVBTkZJTEVTPQotKwotICMjIFByb2Nlc3MgdGhpcyBmaWxlIHdpdGggYXV0b21ha2UgdG8gcHJvZHVjZSBNYWtlZmlsZS5pbgotIAotICMgV2UgcmVxdWlyZSBhdXRvbWFrZSAxLjYgYXQgbGVhc3QuCi1AQCAtNzcsNyArODAsNyBAQAotIEdUS0RPQ19MSUJTPSQoTVhfTElCUykgJCh0b3BfYnVpbGRkaXIpL214LWd0ay9saWJteC1ndGstJChNWF9BUElfVkVSU0lPTikubGEKLSAKLSAjIFRoaXMgaW5jbHVkZXMgdGhlIHN0YW5kYXJkIGd0ay1kb2MgbWFrZSBydWxlcywgY29waWVkIGJ5IGd0a2RvY2l6ZS4KLS1pbmNsdWRlICQodG9wX3NyY2RpcikvZ3RrLWRvYy5tYWtlCi0raW5jbHVkZSAkKHRvcF9idWlsZGRpcikvZ3RrLWRvYy5tYWtlCi0gCi0gIyBPdGhlciBmaWxlcyB0byBkaXN0cmlidXRlCi0gRVhUUkFfRElTVCArPSB2ZXJzaW9uLnhtbC5pbgotSW5kZXg6IGdpdC9kb2NzL3JlZmVyZW5jZS9saWJteC9NYWtlZmlsZS5hbQotPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0tIGdpdC5vcmlnL2RvY3MvcmVmZXJlbmNlL2xpYm14L01ha2VmaWxlLmFtCTIwMTMtMDUtMDggMTU6MDc6MDIuMDI3MTU0Nzg4ICswMTAwCi0rKysgZ2l0L2RvY3MvcmVmZXJlbmNlL2xpYm14L01ha2VmaWxlLmFtCTIwMTMtMDUtMDggMTU6MTQ6MjQuNDU2Mzc4MTM1ICswMTAwCi1AQCAtMSwzICsxLDYgQEAKLStFWFRSQV9ESVNUPQotK0NMRUFORklMRVM9Ci0rCi0gIyMgUHJvY2VzcyB0aGlzIGZpbGUgd2l0aCBhdXRvbWFrZSB0byBwcm9kdWNlIE1ha2VmaWxlLmluCi0gCi0gIyBXZSByZXF1aXJlIGF1dG9tYWtlIDEuNiBhdCBsZWFzdC4KLUBAIC0xMDYsNyArMTA5LDcgQEAKLSBHVEtET0NfTElCUz0kKE1YX0xJQlMpICQodG9wX2J1aWxkZGlyKS9teC9saWJteC0kKE1YX0FQSV9WRVJTSU9OKS5sYQotIAotICMgVGhpcyBpbmNsdWRlcyB0aGUgc3RhbmRhcmQgZ3RrLWRvYyBtYWtlIHJ1bGVzLCBjb3BpZWQgYnkgZ3RrZG9jaXplLgotLWluY2x1ZGUgJCh0b3Bfc3JjZGlyKS9ndGstZG9jLm1ha2UKLStpbmNsdWRlICQodG9wX2J1aWxkZGlyKS9ndGstZG9jLm1ha2UKLSAKLSAjIE90aGVyIGZpbGVzIHRvIGRpc3RyaWJ1dGUKLSBFWFRSQV9ESVNUICs9IHZlcnNpb24ueG1sLmluCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL214L214LTEuMF8xLjQuNy5iYiBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvbXgvbXgtMS4wXzEuNC43LmJiCmluZGV4IDU1NDVjMWUuLjU4YTY5OTcgMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvbXgvbXgtMS4wXzEuNC43LmJiCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvbXgvbXgtMS4wXzEuNC43LmJiCkBAIC04LDcgKzgsNiBAQAogVVBTVFJFQU1fQ0hFQ0tfR0lUVEFHUkVHRVggPSAiKD9QPHB2ZXI+XlxkKyhcLig/ITk5KVxkKykrKSIKIAogU1JDX1VSSSA9ICJnaXQ6Ly9naXRodWIuY29tL2NsdXR0ZXItcHJvamVjdC9teC5naXQ7YnJhbmNoPW14LTEuNCBcCi0JICAgZmlsZTovL2ZpeC1idWlsZC1kaXIucGF0Y2ggXAogCSAgIGZpbGU6Ly9maXgtdGVzdC1pbmNsdWRlcy5wYXRjaCBcCiAJICAiCiBTID0gIiR7V09SS0RJUn0vZ2l0IgpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy9teC9teC5pbmMgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL214L214LmluYwppbmRleCA0ZjEwOTU3Li5kMzA0ODM3IDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL214L214LmluYworKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL214L214LmluYwpAQCAtMSwxNiArMSwxNSBAQAogU1VNTUFSWSA9ICJDbHV0dGVyIGJhc2VkIFVJIHdpZGdldCBsaWJyYXJ5IgogTElDRU5TRSA9ICJMR1BMdjIuMSIKIAotaW5oZXJpdCBjbHV0dGVyIGF1dG90b29scy1icm9rZW5zZXAgZGlzdHJvX2ZlYXR1cmVzX2NoZWNrIGdvYmplY3QtaW50cm9zcGVjdGlvbgoraW5oZXJpdCBjbHV0dGVyIGF1dG90b29scyBkaXN0cm9fZmVhdHVyZXNfY2hlY2sgZ29iamVjdC1pbnRyb3NwZWN0aW9uIGd0ay1kb2MKICMgZGVwZW5kcyBvbiBjbHV0dGVyLTEuMCB3aGljaCBkZXBlbmRzIG9uIGNvZ2wtMS4wCiBSRVFVSVJFRF9ESVNUUk9fRkVBVFVSRVMgPSAib3BlbmdsIgogCi1ERVBFTkRTID0gImNsdXR0ZXItMS4wIGRidXMtZ2xpYiBnZGstcGl4YnVmIgorREVQRU5EUyA9ICJpbnRsdG9vbC1uYXRpdmUgY2x1dHRlci0xLjAgZGJ1cy1nbGliIGdkay1waXhidWYiCiAKIFNSQ19VUkkgPSAiaHR0cDovL3NvdXJjZS5jbHV0dGVyLXByb2plY3Qub3JnL3NvdXJjZXMvbXgvJHtAZ2V0X3ZlcmRpcigiJHtQVn0iKX0vbXgtJHtQVn0udGFyLnh6IgogCi1FWFRSQV9PRUNPTkYgPSAiLS1kaXNhYmxlLWd0ay1kb2MJCVwKLQkgICAgICAgIC0tZGlzYWJsZS1ndGstd2lkZ2V0cwkJXAorRVhUUkFfT0VDT05GID0gIi0tZGlzYWJsZS1ndGstd2lkZ2V0cwkJXAogCQktLXdpdGgtZGJ1cwkJCVwKIAkJLS13aXRoLXdpbnN5cz1ub25lCQlcCiAJCS0td2l0aG91dC1jbHV0dGVyLWltY29udGV4dAlcCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3BhY2thZ2Vncm91cHMvcGFja2FnZWdyb3VwLWNvcmUtY2x1dHRlci5iYiBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvcGFja2FnZWdyb3Vwcy9wYWNrYWdlZ3JvdXAtY29yZS1jbHV0dGVyLmJiCmluZGV4IDU3MzRiMjcuLjg3YzcwMGUgMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvcGFja2FnZWdyb3Vwcy9wYWNrYWdlZ3JvdXAtY29yZS1jbHV0dGVyLmJiCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvcGFja2FnZWdyb3Vwcy9wYWNrYWdlZ3JvdXAtY29yZS1jbHV0dGVyLmJiCkBAIC0zLDcgKzMsNiBAQAogIwogCiBTVU1NQVJZID0gIkNsdXR0ZXIgcGFja2FnZSBncm91cHMiCi1MSUNFTlNFID0gIk1JVCIKIAogUFIgPSAicjYiCiAKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvcGFja2FnZWdyb3Vwcy9wYWNrYWdlZ3JvdXAtY29yZS1kaXJlY3RmYi5iYiBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvcGFja2FnZWdyb3Vwcy9wYWNrYWdlZ3JvdXAtY29yZS1kaXJlY3RmYi5iYgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTY1N2ExYS4uMDAwMDAwMAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3BhY2thZ2Vncm91cHMvcGFja2FnZWdyb3VwLWNvcmUtZGlyZWN0ZmIuYmIKKysrIC9kZXYvbnVsbApAQCAtMSwxNiArMCwwIEBACi1TVU1NQVJZID0gIkRpcmVjdEZCIHdpdGhvdXQgWDExIgotTElDRU5TRSA9ICJNSVQiCi0KLVBBQ0tBR0VfQVJDSCA9ICIke01BQ0hJTkVfQVJDSH0iCi0KLWluaGVyaXQgcGFja2FnZWdyb3VwCi0KLVRPVUNIID0gJyAke0BiYi51dGlscy5jb250YWlucygiTUFDSElORV9GRUFUVVJFUyIsICJ0b3VjaHNjcmVlbiIsICJ0c2xpYiB0c2xpYi1jYWxpYnJhdGUgdHNsaWItdGVzdHMiLCAiIixkKX0nCi0KLVJERVBFTkRTXyR7UE59ID0gIiBcCi0JCWRpcmVjdGZiIFwKLQkJZGlyZWN0ZmItZXhhbXBsZXMgXAotCQlwYW5nbyBcCi0JCWZvbnRjb25maWcgXAotCQkke1RPVUNIfSBcCi0iCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3BhY2thZ2Vncm91cHMvcGFja2FnZWdyb3VwLWNvcmUteDExLWJhc2UuYmIgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3BhY2thZ2Vncm91cHMvcGFja2FnZWdyb3VwLWNvcmUteDExLWJhc2UuYmIKaW5kZXggMTczMDFhMC4uN2VhNzJkNSAxMDA2NDQKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy9wYWNrYWdlZ3JvdXBzL3BhY2thZ2Vncm91cC1jb3JlLXgxMS1iYXNlLmJiCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvcGFja2FnZWdyb3Vwcy9wYWNrYWdlZ3JvdXAtY29yZS14MTEtYmFzZS5iYgpAQCAtMSw2ICsxLDUgQEAKIFNVTU1BUlkgPSAiQmFzaWMgWDExIHNlc3Npb24iCiBERVNDUklQVElPTiA9ICJQYWNrYWdlcyByZXF1aXJlZCB0byBzZXQgdXAgYSBiYXNpYyB3b3JraW5nIFgxMSBzZXNzaW9uIgotTElDRU5TRSA9ICJNSVQiCiBQUiA9ICJyMSIKIAogaW5oZXJpdCBwYWNrYWdlZ3JvdXAgZGlzdHJvX2ZlYXR1cmVzX2NoZWNrCkBAIC0xMSw3ICsxMCw2IEBACiAgICAgcGFja2FnZWdyb3VwLWNvcmUteDExLXhzZXJ2ZXIgXAogICAgIHBhY2thZ2Vncm91cC1jb3JlLXgxMS11dGlscyBcCiAgICAgZGJ1cyBcCi0gICAgcG9pbnRlcmNhbCBcCiAgICAgbWF0Y2hib3gtdGVybWluYWwgXAogICAgIG1hdGNoYm94LXdtIFwKICAgICBtaW5pLXgtc2Vzc2lvbiBcCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3BhY2thZ2Vncm91cHMvcGFja2FnZWdyb3VwLWNvcmUteDExLXhzZXJ2ZXIuYmIgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3BhY2thZ2Vncm91cHMvcGFja2FnZWdyb3VwLWNvcmUteDExLXhzZXJ2ZXIuYmIKaW5kZXggYzUzZjFiNy4uNmI1MDAyOCAxMDA2NDQKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy9wYWNrYWdlZ3JvdXBzL3BhY2thZ2Vncm91cC1jb3JlLXgxMS14c2VydmVyLmJiCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvcGFja2FnZWdyb3Vwcy9wYWNrYWdlZ3JvdXAtY29yZS14MTEteHNlcnZlci5iYgpAQCAtMyw3ICszLDYgQEAKICMKIAogU1VNTUFSWSA9ICJYMTEgZGlzcGxheSBzZXJ2ZXIiCi1MSUNFTlNFID0gIk1JVCIKIFBSID0gInI0MCIKIAogUEFDS0FHRV9BUkNIID0gIiR7TUFDSElORV9BUkNIfSIKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvcGFja2FnZWdyb3Vwcy9wYWNrYWdlZ3JvdXAtY29yZS14MTEuYmIgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3BhY2thZ2Vncm91cHMvcGFja2FnZWdyb3VwLWNvcmUteDExLmJiCmluZGV4IDM1MzdkOGMuLjQyOTE0MjQgMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvcGFja2FnZWdyb3Vwcy9wYWNrYWdlZ3JvdXAtY29yZS14MTEuYmIKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy9wYWNrYWdlZ3JvdXBzL3BhY2thZ2Vncm91cC1jb3JlLXgxMS5iYgpAQCAtMiw3ICsyLDYgQEAKICMgQ29weXJpZ2h0IChDKSAyMDExIEludGVsIENvcnBvcmF0aW9uCiAjCiAKLUxJQ0VOU0UgPSAiTUlUIgogUFIgPSAicjQwIgogCiBpbmhlcml0IHBhY2thZ2Vncm91cCBkaXN0cm9fZmVhdHVyZXNfY2hlY2sKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvcGFuZ28vcGFuZ28vMDAwMS1FbmZvcmNlLXJlY3JlYXRpb24tb2YtZG9jcy1wYW5nby50eXBlcy1pdC1pcy1idWlsZC1jLnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy9wYW5nby9wYW5nby8wMDAxLUVuZm9yY2UtcmVjcmVhdGlvbi1vZi1kb2NzLXBhbmdvLnR5cGVzLWl0LWlzLWJ1aWxkLWMucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjc4NGExMAotLS0gL2Rldi9udWxsCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvcGFuZ28vcGFuZ28vMDAwMS1FbmZvcmNlLXJlY3JlYXRpb24tb2YtZG9jcy1wYW5nby50eXBlcy1pdC1pcy1idWlsZC1jLnBhdGNoCkBAIC0wLDAgKzEsMTQ3IEBACitGcm9tIDUyNmE2YTlmYzlhMWNmZTc1YzUyMWM4YmIzOWI2MTc1NGZlNDJmZTggTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBBbGV4YW5kZXIgS2FuYXZpbiA8YWxleC5rYW5hdmluQGdtYWlsLmNvbT4KK0RhdGU6IEZyaSwgMiBTZXAgMjAxNiAxNDowMDoyNCArMDMwMAorU3ViamVjdDogW1BBVENIXSBFbmZvcmNlIHJlY3JlYXRpb24gb2YgZG9jcy9wYW5nby50eXBlczsgaXQgaXMgYnVpbGQKKyBjb25maWd1cmF0aW9uLXNwZWNpZmljLgorCitJbiBwYXJ0aWN1bGFyLCBpdCBuZWVkcyB0byBleGNsdWRlIHJlZmVyZW5jZXMgdG8gUGFuZ29YZnQgaWYgWGZ0IGlzIG5vdCBhdmFpbGFibGUuCisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworU2lnbmVkLW9mZi1ieTogQWxleGFuZGVyIEthbmF2aW4gPGFsZXgua2FuYXZpbkBnbWFpbC5jb20+CistLS0KKyBkb2NzL01ha2VmaWxlLmFtIHwgMTcgKysrKy0tLS0tLS0tCisgZG9jcy9wYW5nby50eXBlcyB8IDgwIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgMiBmaWxlcyBjaGFuZ2VkLCA1IGluc2VydGlvbnMoKyksIDkyIGRlbGV0aW9ucygtKQorIGRlbGV0ZSBtb2RlIDEwMDY0NCBkb2NzL3BhbmdvLnR5cGVzCisKK2RpZmYgLS1naXQgYS9kb2NzL01ha2VmaWxlLmFtIGIvZG9jcy9NYWtlZmlsZS5hbQoraW5kZXggZjVmMTMxNy4uODk0N2E5OSAxMDA2NDQKKy0tLSBhL2RvY3MvTWFrZWZpbGUuYW0KKysrKyBiL2RvY3MvTWFrZWZpbGUuYW0KK0BAIC00OSw2ICs0OSwxMCBAQCBJR05PUkVfSEZJTEVTPQkJCVwKKyAJcGFuZ29jb3JldGV4dC1wcml2YXRlLmgJCVwKKyAJcGFuZ29hdHN1aS1wcml2YXRlLmgKKyAKKytpZiAhSEFWRV9YRlQKKytJR05PUkVfSEZJTEVTICs9IHBhbmdveGZ0IHBhbmdveGZ0LXJlbmRlci5oCisrZW5kaWYKKysKKyAjIENGTEFHUyBhbmQgTERGTEFHUyBmb3IgY29tcGlsaW5nIHNjYW4gcHJvZ3JhbS4gT25seSBuZWVkZWQKKyAjIGlmICQoRE9DX01PRFVMRSkudHlwZXMgaXMgbm9uLWVtcHR5LgorIElOQ0xVREVTID0gICAgICAgICAgICAgICAJXAorQEAgLTEwMywxNiArMTA3LDYgQEAgaW5jbHVkZSAkKHRvcF9zcmNkaXIpL2d0ay1kb2MubWFrZQorICMgVGhpcyBsaW5lIHJlYWxseSBiZWxvbmdzIGluIGd0ay1kb2MubWsKKyAkKFJFUE9SVF9GSUxFUyk6IHNnbWwtYnVpbGQuc3RhbXAKKyAKKy1wYW5nby50eXBlczoKKy0JQGVjaG8gIlJlYnVpbGRpbmcgJEAiCistCUBMQU5HPUM7IExJU1Q9JCQoZ3JlcCAncGFuZ29fW19hLXpBLVowLTldKl9nZXRfdHlwZScgJChIRklMRV9HTE9CKSB8IGdyZXAgLXYgJ1wocHJpdmF0ZVx8YXRzdWlcfGNvcmVfdGV4dFx8d2luMzJcKScgfCBzZWQgJ3MvXChbXjpdKjpcKS4qXChwYW5nb1tfYS16QS1aMC05XSpfZ2V0X3R5cGVcKS4qL1wxXDIvJykgJiYgXAorLQllY2hvICIkJExJU1QiIHwgc2VkICdzLy4qXC9cKHBhbmdvXC8uKlwpOi4qLyNpbmNsdWRlIDxcMT4vJyB8IHNvcnQgLXUgPiAkQC50bXAgJiYgXAorLQllY2hvID4+ICRALnRtcCAmJiBcCistCWVjaG8gIiQkTElTVCIgfCBjdXQgLWQgOiAtZiAyIHwgc29ydCAtdSA+PiAkQC50bXAgJiYgXAorLQltdiAkQC50bXAgJEAKKy0KKy1CVUlMVF9TT1VSQ0VTID0gcGFuZ28udHlwZXMKKy0KKyAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyAKKyBNQUlOVEFJTkVSQ0xFQU5GSUxFUyA9ICQoQlVJTFRfU09VUkNFUykKK0BAIC0xMjAsOCArMTE0LDcgQEAgRVhUUkFfRElTVCArPQkJCQlcCisgCWxheW91dC5maWcJCQlcCisgCWxheW91dC5lcHMJCQlcCisgCXZlcnNpb24ueG1sLmluCQkJXAorLQljaGVjay5kb2NzCQkJXAorLQlwYW5nby50eXBlcworKwljaGVjay5kb2NzCisgCisgIyBmb3JjZSBkb2MgcmVidWxpZCBhZnRlciBjb25maWd1cmUKKyBkaXN0LWhvb2stbG9jYWw6IGRpc3QtbG9jYWwtY2hlY2stbm8tY3Jvc3MtcmVmZXJlbmNlcyBhbGwtbG9jYWwKK2RpZmYgLS1naXQgYS9kb2NzL3BhbmdvLnR5cGVzIGIvZG9jcy9wYW5nby50eXBlcworZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CitpbmRleCA3ZDkzY2RhLi4wMDAwMDAwCistLS0gYS9kb2NzL3BhbmdvLnR5cGVzCisrKysgL2Rldi9udWxsCitAQCAtMSw4MCArMCwwIEBACistI2luY2x1ZGUgPHBhbmdvL3BhbmdvLWF0dHJpYnV0ZXMuaD4KKy0jaW5jbHVkZSA8cGFuZ28vcGFuZ28tY29udGV4dC5oPgorLSNpbmNsdWRlIDxwYW5nby9wYW5nby1lbmdpbmUuaD4KKy0jaW5jbHVkZSA8cGFuZ28vcGFuZ28tZW51bS10eXBlcy5oPgorLSNpbmNsdWRlIDxwYW5nby9wYW5nby1mb250Lmg+CistI2luY2x1ZGUgPHBhbmdvL3BhbmdvLWZvbnRtYXAuaD4KKy0jaW5jbHVkZSA8cGFuZ28vcGFuZ28tZm9udHNldC5oPgorLSNpbmNsdWRlIDxwYW5nby9wYW5nby1nbHlwaC1pdGVtLmg+CistI2luY2x1ZGUgPHBhbmdvL3BhbmdvLWdseXBoLmg+CistI2luY2x1ZGUgPHBhbmdvL3BhbmdvLWl0ZW0uaD4KKy0jaW5jbHVkZSA8cGFuZ28vcGFuZ28tbGFuZ3VhZ2UuaD4KKy0jaW5jbHVkZSA8cGFuZ28vcGFuZ28tbGF5b3V0Lmg+CistI2luY2x1ZGUgPHBhbmdvL3BhbmdvLW1hdHJpeC5oPgorLSNpbmNsdWRlIDxwYW5nby9wYW5nby1vdC5oPgorLSNpbmNsdWRlIDxwYW5nby9wYW5nby1yZW5kZXJlci5oPgorLSNpbmNsdWRlIDxwYW5nby9wYW5nby10YWJzLmg+CistI2luY2x1ZGUgPHBhbmdvL3BhbmdvY2Fpcm8tZmMuaD4KKy0jaW5jbHVkZSA8cGFuZ28vcGFuZ29jYWlyby5oPgorLSNpbmNsdWRlIDxwYW5nby9wYW5nb2ZjLWRlY29kZXIuaD4KKy0jaW5jbHVkZSA8cGFuZ28vcGFuZ29mYy1mb250Lmg+CistI2luY2x1ZGUgPHBhbmdvL3BhbmdvZmMtZm9udG1hcC5oPgorLSNpbmNsdWRlIDxwYW5nby9wYW5nb2Z0Mi5oPgorLSNpbmNsdWRlIDxwYW5nby9wYW5nb3hmdC1yZW5kZXIuaD4KKy0jaW5jbHVkZSA8cGFuZ28vcGFuZ294ZnQuaD4KKy0KKy1wYW5nb19hbGlnbm1lbnRfZ2V0X3R5cGUKKy1wYW5nb19hdHRyX2xpc3RfZ2V0X3R5cGUKKy1wYW5nb19hdHRyX3R5cGVfZ2V0X3R5cGUKKy1wYW5nb19iaWRpX3R5cGVfZ2V0X3R5cGUKKy1wYW5nb19jYWlyb19mY19mb250X21hcF9nZXRfdHlwZQorLXBhbmdvX2NhaXJvX2ZvbnRfZ2V0X3R5cGUKKy1wYW5nb19jYWlyb19mb250X21hcF9nZXRfdHlwZQorLXBhbmdvX2NvbG9yX2dldF90eXBlCistcGFuZ29fY29udGV4dF9nZXRfdHlwZQorLXBhbmdvX2NvdmVyYWdlX2xldmVsX2dldF90eXBlCistcGFuZ29fZGlyZWN0aW9uX2dldF90eXBlCistcGFuZ29fZWxsaXBzaXplX21vZGVfZ2V0X3R5cGUKKy1wYW5nb19lbmdpbmVfZ2V0X3R5cGUKKy1wYW5nb19lbmdpbmVfbGFuZ19nZXRfdHlwZQorLXBhbmdvX2VuZ2luZV9zaGFwZV9nZXRfdHlwZQorLXBhbmdvX2ZjX2RlY29kZXJfZ2V0X3R5cGUKKy1wYW5nb19mY19mb250X2dldF90eXBlCistcGFuZ29fZmNfZm9udF9tYXBfZ2V0X3R5cGUKKy1wYW5nb19mb250X2Rlc2NyaXB0aW9uX2dldF90eXBlCistcGFuZ29fZm9udF9mYWNlX2dldF90eXBlCistcGFuZ29fZm9udF9mYW1pbHlfZ2V0X3R5cGUKKy1wYW5nb19mb250X2dldF90eXBlCistcGFuZ29fZm9udF9tYXBfZ2V0X3R5cGUKKy1wYW5nb19mb250X21hc2tfZ2V0X3R5cGUKKy1wYW5nb19mb250X21ldHJpY3NfZ2V0X3R5cGUKKy1wYW5nb19mb250c2V0X2dldF90eXBlCistcGFuZ29fZm9udHNldF9zaW1wbGVfZ2V0X3R5cGUKKy1wYW5nb19mdDJfZm9udF9tYXBfZ2V0X3R5cGUKKy1wYW5nb19nbHlwaF9pdGVtX2dldF90eXBlCistcGFuZ29fZ2x5cGhfaXRlbV9pdGVyX2dldF90eXBlCistcGFuZ29fZ2x5cGhfc3RyaW5nX2dldF90eXBlCistcGFuZ29fZ3Jhdml0eV9nZXRfdHlwZQorLXBhbmdvX2dyYXZpdHlfaGludF9nZXRfdHlwZQorLXBhbmdvX2l0ZW1fZ2V0X3R5cGUKKy1wYW5nb19sYW5ndWFnZV9nZXRfdHlwZQorLXBhbmdvX2xheW91dF9nZXRfdHlwZQorLXBhbmdvX2xheW91dF9pdGVyX2dldF90eXBlCistcGFuZ29fbGF5b3V0X2xpbmVfZ2V0X3R5cGUKKy1wYW5nb19tYXRyaXhfZ2V0X3R5cGUKKy1wYW5nb19vdF9pbmZvX2dldF90eXBlCistcGFuZ29fb3RfcnVsZXNldF9nZXRfdHlwZQorLXBhbmdvX3JlbmRlcl9wYXJ0X2dldF90eXBlCistcGFuZ29fcmVuZGVyZXJfZ2V0X3R5cGUKKy1wYW5nb19zY3JpcHRfZ2V0X3R5cGUKKy1wYW5nb19zdHJldGNoX2dldF90eXBlCistcGFuZ29fc3R5bGVfZ2V0X3R5cGUKKy1wYW5nb190YWJfYWxpZ25fZ2V0X3R5cGUKKy1wYW5nb190YWJfYXJyYXlfZ2V0X3R5cGUKKy1wYW5nb191bmRlcmxpbmVfZ2V0X3R5cGUKKy1wYW5nb192YXJpYW50X2dldF90eXBlCistcGFuZ29fd2VpZ2h0X2dldF90eXBlCistcGFuZ29fd3JhcF9tb2RlX2dldF90eXBlCistcGFuZ29feGZ0X2ZvbnRfZ2V0X3R5cGUKKy1wYW5nb194ZnRfZm9udF9tYXBfZ2V0X3R5cGUKKy1wYW5nb194ZnRfcmVuZGVyZXJfZ2V0X3R5cGUKKy0tIAorMi45LjMKKwpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy9wYW5nby9wYW5nb18xLjM4LjEuYmIgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3BhbmdvL3BhbmdvXzEuMzguMS5iYgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggN2ZjNjVmZC4uMDAwMDAwMAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3BhbmdvL3BhbmdvXzEuMzguMS5iYgorKysgL2Rldi9udWxsCkBAIC0xLDUyICswLDAgQEAKLVNVTU1BUlkgPSAiRnJhbWV3b3JrIGZvciBsYXlvdXQgYW5kIHJlbmRlcmluZyBvZiBpbnRlcm5hdGlvbmFsaXplZCB0ZXh0IgotREVTQ1JJUFRJT04gPSAiUGFuZ28gaXMgYSBsaWJyYXJ5IGZvciBsYXlpbmcgb3V0IGFuZCByZW5kZXJpbmcgb2YgdGV4dCwgXAotd2l0aCBhbiBlbXBoYXNpcyBvbiBpbnRlcm5hdGlvbmFsaXphdGlvbi4gUGFuZ28gY2FuIGJlIHVzZWQgYW55d2hlcmUgXAotdGhhdCB0ZXh0IGxheW91dCBpcyBuZWVkZWQsIHRob3VnaCBtb3N0IG9mIHRoZSB3b3JrIG9uIFBhbmdvIHNvIGZhciBoYXMgXAotYmVlbiBkb25lIGluIHRoZSBjb250ZXh0IG9mIHRoZSBHVEsrIHdpZGdldCB0b29sa2l0LiBQYW5nbyBmb3JtcyB0aGUgXAotY29yZSBvZiB0ZXh0IGFuZCBmb250IGhhbmRsaW5nIGZvciBHVEsrLTIueC4iCi1IT01FUEFHRSA9ICJodHRwOi8vd3d3LnBhbmdvLm9yZy8iCi1CVUdUUkFDS0VSID0gImh0dHA6Ly9idWd6aWxsYS5nbm9tZS5vcmciCi1TRUNUSU9OID0gImxpYnMiCi1MSUNFTlNFID0gIkxHUEx2Mi4wKyIKLQotTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9M2JmNTAwMDJhZWZkMDAyZjQ5ZTdiYjg1NDA2M2Y3ZTciCi0KLWluaGVyaXQgZ25vbWViYXNlIGd0ay1kb2MgcHRlc3QtZ25vbWUgdXBzdHJlYW0tdmVyc2lvbi1pcy1ldmVuIGdvYmplY3QtaW50cm9zcGVjdGlvbgotCi1TUkNfVVJJICs9ICJmaWxlOi8vcnVuLXB0ZXN0IFwKLSAgICAgICAgICAgIGZpbGU6Ly8wMDAxLURyb3AtaW50cm9zcGVjdGlvbi1tYWNyb3MtZnJvbS1hY2luY2x1ZGUubTQucGF0Y2ggXAotIgotCi1TUkNfVVJJW2FyY2hpdmUubWQ1c3VtXSA9ICI3ZmRlMzVkNGExMjdiNTVjZThiYmNlZmUxMDliYzgwZCIKLVNSQ19VUklbYXJjaGl2ZS5zaGEyNTZzdW1dID0gIjEzMjA1NjlmNmM2ZDc1ZDZiNjYxNzJiMmQyOGU1OWM1NmVlODY0ZWU5ZGYyMDJiNzY3OTljNDUwNmEyMTRlYjciCi0KLURFUEVORFMgPSAiZ2xpYi0yLjAgZ2xpYi0yLjAtbmF0aXZlIGZvbnRjb25maWcgZnJlZXR5cGUgdmlydHVhbC9saWJpY29udiBjYWlybyBoYXJmYnV6eiIKLQotUEFDS0FHRUNPTkZJRyA/Pz0gIiR7QGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCAneDExJywgJ3gxMScsICcnLCBkKX0iCi1QQUNLQUdFQ09ORklHW3gxMV0gPSAiLS13aXRoLXhmdCwtLXdpdGhvdXQteGZ0LHZpcnR1YWwvbGlieDExIGxpYnhmdCIKLQotRVhUUkFfQVVUT1JFQ09ORiA9ICIiCi0KLUVYVFJBX09FQ09ORiA9ICIgXAotCSAgICAgICAgLS1kaXNhYmxlLWRlYnVnIFwKLQkgICAgICAgICIKLQotTEVBRF9TT05BTUUgPSAibGlicGFuZ28tMS4wKiIKLUxJQlYgPSAiMS44LjAiCi0KLSMgVGhpcyBiaW5hcnkgbmVlZHMgdG8gYmUgY29tcGlsZWQgZm9yIHRoZSBob3N0IGFyY2hpdGVjdHVyZS4gIFRoaXMgaXNuJ3QgcHJldHR5IQotZG9fY29tcGlsZV9wcmVwZW5kX2NsYXNzLXRhcmdldCAoKSB7Ci0JaWYgJHtAYmFzZV9jb250YWlucygnRElTVFJPX0ZFQVRVUkVTJywgJ3B0ZXN0JywgJ3RydWUnLCAnZmFsc2UnLCBkKX07IHRoZW4KLQkJbWFrZSBDQz0iJHtCVUlMRF9DQ30iIENGTEFHUz0iIiBMREZMQUdTPSIiIEFNX0NQUEZMQUdTPSIkKHBrZy1jb25maWctbmF0aXZlIC0tY2ZsYWdzIGdsaWItMi4wKSIgZ2VuX2FsbF91bmljb2RlX0xEQUREPSIkKHBrZy1jb25maWctbmF0aXZlIC0tbGlicyBnbGliLTIuMCkiIC1DICR7Qn0vdGVzdHMgZ2VuLWFsbC11bmljb2RlCi0JZmkKLX0KLQotRklMRVNfJHtQTn0gPSAiJHtiaW5kaXJ9LyogJHtsaWJkaXJ9L2xpYnBhbmdvKiR7U09MSUJTfSIKLUZJTEVTXyR7UE59LWRldiArPSAiJHtsaWJkaXJ9L3BhbmdvLyR7TElCVn0vbW9kdWxlcy8qLmxhIgotCi1SREVQRU5EU18ke1BOfS1wdGVzdCArPSAibGliZXJhdGlvbi1mb250cyBjYW50YXJlbGwtZm9udHMiCi0KLVJQUk9WSURFU18ke1BOfSArPSAicGFuZ28tbW9kdWxlcyBwYW5nby1tb2R1bGUtaW5kaWMtbGFuZyBcCi0gICAgICAgICAgICAgICAgICAgIHBhbmdvLW1vZHVsZS1iYXNpYy1mYyBwYW5nby1tb2R1bGUtYXJhYmljLWxhbmciCi0KLUJCQ0xBU1NFWFRFTkQgPSAibmF0aXZlIgpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy9wYW5nby9wYW5nb18xLjQwLjEuYmIgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3BhbmdvL3BhbmdvXzEuNDAuMS5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mOWYzNDRhCi0tLSAvZGV2L251bGwKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy9wYW5nby9wYW5nb18xLjQwLjEuYmIKQEAgLTAsMCArMSw1MiBAQAorU1VNTUFSWSA9ICJGcmFtZXdvcmsgZm9yIGxheW91dCBhbmQgcmVuZGVyaW5nIG9mIGludGVybmF0aW9uYWxpemVkIHRleHQiCitERVNDUklQVElPTiA9ICJQYW5nbyBpcyBhIGxpYnJhcnkgZm9yIGxheWluZyBvdXQgYW5kIHJlbmRlcmluZyBvZiB0ZXh0LCBcCit3aXRoIGFuIGVtcGhhc2lzIG9uIGludGVybmF0aW9uYWxpemF0aW9uLiBQYW5nbyBjYW4gYmUgdXNlZCBhbnl3aGVyZSBcCit0aGF0IHRleHQgbGF5b3V0IGlzIG5lZWRlZCwgdGhvdWdoIG1vc3Qgb2YgdGhlIHdvcmsgb24gUGFuZ28gc28gZmFyIGhhcyBcCitiZWVuIGRvbmUgaW4gdGhlIGNvbnRleHQgb2YgdGhlIEdUSysgd2lkZ2V0IHRvb2xraXQuIFBhbmdvIGZvcm1zIHRoZSBcCitjb3JlIG9mIHRleHQgYW5kIGZvbnQgaGFuZGxpbmcgZm9yIEdUSystMi54LiIKK0hPTUVQQUdFID0gImh0dHA6Ly93d3cucGFuZ28ub3JnLyIKK0JVR1RSQUNLRVIgPSAiaHR0cDovL2J1Z3ppbGxhLmdub21lLm9yZyIKK1NFQ1RJT04gPSAibGlicyIKK0xJQ0VOU0UgPSAiTEdQTHYyLjArIgorCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT0zYmY1MDAwMmFlZmQwMDJmNDllN2JiODU0MDYzZjdlNyIKKworaW5oZXJpdCBnbm9tZWJhc2UgZ3RrLWRvYyBwdGVzdC1nbm9tZSB1cHN0cmVhbS12ZXJzaW9uLWlzLWV2ZW4gZ29iamVjdC1pbnRyb3NwZWN0aW9uCisKK1NSQ19VUkkgKz0gImZpbGU6Ly9ydW4tcHRlc3QgXAorICAgICAgICAgICAgZmlsZTovLzAwMDEtRHJvcC1pbnRyb3NwZWN0aW9uLW1hY3Jvcy1mcm9tLWFjaW5jbHVkZS5tNC5wYXRjaCBcCisgICAgICAgICAgICBmaWxlOi8vMDAwMS1FbmZvcmNlLXJlY3JlYXRpb24tb2YtZG9jcy1wYW5nby50eXBlcy1pdC1pcy1idWlsZC1jLnBhdGNoIFwKKyIKK1NSQ19VUklbYXJjaGl2ZS5tZDVzdW1dID0gIjZmYzg4YzY1Mjk4OTBkNmM4ZTAzMDc0ZDU3YTNlY2ViIgorU1JDX1VSSVthcmNoaXZlLnNoYTI1NnN1bV0gPSAiZTI3YWY1NDE3MmM3MmIzYWM2YmU1M2M5YTRjNjcwNTNlMTZjOTA1ZTAyYWRkY2YzYTYwM2NlYjIwMDVjMWE0MCIKKworREVQRU5EUyA9ICJnbGliLTIuMCBnbGliLTIuMC1uYXRpdmUgZm9udGNvbmZpZyBmcmVldHlwZSB2aXJ0dWFsL2xpYmljb252IGNhaXJvIGhhcmZidXp6IgorCitQQUNLQUdFQ09ORklHID8/PSAiJHtAYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsICd4MTEnLCAneDExJywgJycsIGQpfSIKK1BBQ0tBR0VDT05GSUdbeDExXSA9ICItLXdpdGgteGZ0LC0td2l0aG91dC14ZnQsdmlydHVhbC9saWJ4MTEgbGlieGZ0IgorCitFWFRSQV9BVVRPUkVDT05GID0gIiIKKworRVhUUkFfT0VDT05GID0gIiBcCisJICAgICAgICAtLWRpc2FibGUtZGVidWcgXAorCSAgICAgICAgIgorCitMRUFEX1NPTkFNRSA9ICJsaWJwYW5nby0xLjAqIgorTElCViA9ICIxLjguMCIKKworIyBUaGlzIGJpbmFyeSBuZWVkcyB0byBiZSBjb21waWxlZCBmb3IgdGhlIGhvc3QgYXJjaGl0ZWN0dXJlLiAgVGhpcyBpc24ndCBwcmV0dHkhCitkb19jb21waWxlX3ByZXBlbmRfY2xhc3MtdGFyZ2V0ICgpIHsKKwlpZiAke0BiYi51dGlscy5jb250YWlucygnRElTVFJPX0ZFQVRVUkVTJywgJ3B0ZXN0JywgJ3RydWUnLCAnZmFsc2UnLCBkKX07IHRoZW4KKwkJbWFrZSBDQz0iJHtCVUlMRF9DQ30iIENGTEFHUz0iIiBMREZMQUdTPSIke0JVSUxEX0xERkxBR1N9IiBBTV9DUFBGTEFHUz0iJChwa2ctY29uZmlnLW5hdGl2ZSAtLWNmbGFncyBnbGliLTIuMCkiIGdlbl9hbGxfdW5pY29kZV9MREFERD0iJChwa2ctY29uZmlnLW5hdGl2ZSAtLWxpYnMgZ2xpYi0yLjApIiAtQyAke0J9L3Rlc3RzIGdlbi1hbGwtdW5pY29kZQorCWZpCit9CisKK0ZJTEVTXyR7UE59ID0gIiR7YmluZGlyfS8qICR7bGliZGlyfS9saWJwYW5nbyoke1NPTElCU30iCitGSUxFU18ke1BOfS1kZXYgKz0gIiR7bGliZGlyfS9wYW5nby8ke0xJQlZ9L21vZHVsZXMvKi5sYSIKKworUkRFUEVORFNfJHtQTn0tcHRlc3QgKz0gImxpYmVyYXRpb24tZm9udHMgY2FudGFyZWxsLWZvbnRzIgorCitSUFJPVklERVNfJHtQTn0gKz0gInBhbmdvLW1vZHVsZXMgcGFuZ28tbW9kdWxlLWluZGljLWxhbmcgXAorICAgICAgICAgICAgICAgICAgICBwYW5nby1tb2R1bGUtYmFzaWMtZmMgcGFuZ28tbW9kdWxlLWFyYWJpYy1sYW5nIgorCitCQkNMQVNTRVhURU5EID0gIm5hdGl2ZSIKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvcGlnbGl0L3BpZ2xpdC8wMDAxLWNtYWtlLUxpbmstdGVzdC11dGlscy13aXRoLWxkbC5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvcGlnbGl0L3BpZ2xpdC8wMDAxLWNtYWtlLUxpbmstdGVzdC11dGlscy13aXRoLWxkbC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yZTFjOTQ3Ci0tLSAvZGV2L251bGwKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy9waWdsaXQvcGlnbGl0LzAwMDEtY21ha2UtTGluay10ZXN0LXV0aWxzLXdpdGgtbGRsLnBhdGNoCkBAIC0wLDAgKzEsNDEgQEAKK0JhY2twb3J0IHBhdGNoIHRvIGZpeCBidWlsZCB3aXRoIGdvbGQgbGlua2VyLgorCitTaWduZWQtb2ZmLWJ5OiBKdXNzaSBLdWtrb25lbiA8anVzc2kua3Vra29uZW5AaW50ZWwuY29tPgorVXBzdHJlYW0tU3RhdHVzOiBCYWNrcG9ydAorCisKKworRnJvbSA5M2E3MTEzNDg1Y2YxYzU1ZmQ3MDc2MTE2ZmFmNWIzYTY5MDcwNmIyIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogSnVzc2kgS3Vra29uZW4gPGp1c3NpLmt1a2tvbmVuQGludGVsLmNvbT4KK0RhdGU6IFR1ZSwgMzAgQXVnIDIwMTYgMTc6MTc6MjggKzAzMDAKK1N1YmplY3Q6IFtQQVRDSF0gY21ha2U6IExpbmsgdGVzdCB1dGlscyB3aXRoICItbGRsIgorCitXaXRob3V0IHRoaXMgbGlua2luZyBDWFggZXhlY3V0YWJsZXMgKGUuZy4gZmJvLWJsaXQtc3RyZXRjaCkgZmFpbHMKK3dpdGggZ29sZCBsaW5rZXI6CisKK3wgbGlicGlnbGl0dXRpbF9nbC5zby4wOiBlcnJvcjogdW5kZWZpbmVkIHJlZmVyZW5jZSB0byAnZGxzeW0nCit8IGxpYnBpZ2xpdHV0aWxfZ2wuc28uMDogZXJyb3I6IHVuZGVmaW5lZCByZWZlcmVuY2UgdG8gJ2RsZXJyb3InCit8IGxpYnBpZ2xpdHV0aWxfZ2wuc28uMDogZXJyb3I6IHVuZGVmaW5lZCByZWZlcmVuY2UgdG8gJ2Rsb3BlbicKKworU2lnbmVkLW9mZi1ieTogSnVzc2kgS3Vra29uZW4gPGp1c3NpLmt1a2tvbmVuQGludGVsLmNvbT4KK1Jldmlld2VkLWJ5OiBFbWlsIFZlbGlrb3YgPGVtaWwudmVsaWtvdkBjb2xsYWJvcmEuY29tPgorLS0tCisgdGVzdHMvdXRpbC9DTWFrZUxpc3RzLnR4dCB8IDIgKysKKyAxIGZpbGUgY2hhbmdlZCwgMiBpbnNlcnRpb25zKCspCisKK2RpZmYgLS1naXQgYS90ZXN0cy91dGlsL0NNYWtlTGlzdHMudHh0IGIvdGVzdHMvdXRpbC9DTWFrZUxpc3RzLnR4dAoraW5kZXggZTFmODA3My4uM2Q1YmVmNSAxMDA2NDQKKy0tLSBhL3Rlc3RzL3V0aWwvQ01ha2VMaXN0cy50eHQKKysrKyBiL3Rlc3RzL3V0aWwvQ01ha2VMaXN0cy50eHQKK0BAIC0xMSw2ICsxMSw4IEBAIHNldF9zb3VyY2VfZmlsZXNfcHJvcGVydGllcygKKyAJUFJPUEVSVElFUyBHRU5FUkFURUQgMQorIAkpCisgCisrbGlua19saWJyYXJpZXMoJHtDTUFLRV9ETF9MSUJTfSkKKysKKyBpZihIQVZFX0xJQkNBQ0EpCisgICAgIGxpbmtfbGlicmFyaWVzKGNhY2EpCisgZW5kaWYoKQorLS0gCisyLjkuMworCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3BpZ2xpdC9waWdsaXQvMDAwMS1jbWFrZS1MaW5rLXV0aWxzLXdpdGgteGNiLWV4cGxpY2l0bHkucGF0Y2ggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3BpZ2xpdC9waWdsaXQvMDAwMS1jbWFrZS1MaW5rLXV0aWxzLXdpdGgteGNiLWV4cGxpY2l0bHkucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODQ1ODA0ZAotLS0gL2Rldi9udWxsCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvcGlnbGl0L3BpZ2xpdC8wMDAxLWNtYWtlLUxpbmstdXRpbHMtd2l0aC14Y2ItZXhwbGljaXRseS5wYXRjaApAQCAtMCwwICsxLDU0IEBACitGcm9tIDczZTRmYmM1Nzc3ZWRkZDg5YmIwZmIxNmU5MDM0MzU1MWZlM2UwZWYgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBKdXNzaSBLdWtrb25lbiA8anVzc2kua3Vra29uZW5AaW50ZWwuY29tPgorRGF0ZTogVHVlLCA1IEp1bCAyMDE2IDEwOjU2OjIzICswMzAwCitTdWJqZWN0OiBbUEFUQ0hdIGNtYWtlOiBMaW5rIHV0aWxzIHdpdGggeGNiIGV4cGxpY2l0bHkKKworTGlua2luZyB3aXRoIGcrKyBjYW4gcmVwb3J0ZWRseSBsZWFkIHRvOgorCitsaWJwaWdsaXR1dGlsX2dsLnNvLjA6IGVycm9yOiB1bmRlZmluZWQgcmVmZXJlbmNlIHRvICd4Y2JfY29ubmVjdCcKK2xpYnBpZ2xpdHV0aWxfZ2wuc28uMDogZXJyb3I6IHVuZGVmaW5lZCByZWZlcmVuY2UgdG8gJ3hjYl9nZXRfc2V0dXAnCitsaWJwaWdsaXR1dGlsX2dsLnNvLjA6IGVycm9yOiB1bmRlZmluZWQgcmVmZXJlbmNlIHRvICd4Y2Jfc2V0dXBfcm9vdHNfaXRlcmF0b3InCisKK1RoaXMgbWF5IGhhdmUgYXBwZWFyZWQgbm93IGJlY2F1c2UgeGNiLWRyaTIgdXNlZCB0byBvdmVybGluayBwdWJsaWNseQorYnV0IG5vdyBkb2VzIG5vdC4KKworU2lnbmVkLW9mZi1ieTogSnVzc2kgS3Vra29uZW4gPGp1c3NpLmt1a2tvbmVuQGludGVsLmNvbT4KK1Vwc3RyZWFtLVN0YXR1czogQWNjZXB0ZWQKKy0tLQorIENNYWtlTGlzdHMudHh0ICAgICAgICAgICAgfCAxICsKKyB0ZXN0cy91dGlsL0NNYWtlTGlzdHMudHh0IHwgMiArKworIDIgZmlsZXMgY2hhbmdlZCwgMyBpbnNlcnRpb25zKCspCisKK2RpZmYgLS1naXQgYS9DTWFrZUxpc3RzLnR4dCBiL0NNYWtlTGlzdHMudHh0CitpbmRleCA4ZTJhYmJhLi4yZTFhNDczIDEwMDY0NAorLS0tIGEvQ01ha2VMaXN0cy50eHQKKysrKyBiL0NNYWtlTGlzdHMudHh0CitAQCAtMTUxLDYgKzE1MSw3IEBAIElGKCR7Q01BS0VfU1lTVEVNX05BTUV9IE1BVENIRVMgIkxpbnV4IikKKyAKKyAJcGtnX2NoZWNrX21vZHVsZXMoTElCRFJNIFFVSUVUIGxpYmRybSkKKyAJcGtnX2NoZWNrX21vZHVsZXMoTElCRFJNX0lOVEVMIFFVSUVUIGxpYmRybV9pbnRlbCkKKysJcGtnX2NoZWNrX21vZHVsZXMoWENCIFFVSUVUIHhjYikKKyAJcGtnX2NoZWNrX21vZHVsZXMoWENCX0RSSTIgUVVJRVQgeGNiLWRyaTIpCisgCXBrZ19jaGVja19tb2R1bGVzKEdMUFJPVE8gUVVJRVQgZ2xwcm90bykKKyBFTFNFSUYoJHtDTUFLRV9TWVNURU1fTkFNRX0gTUFUQ0hFUyAiV2luZG93cyIpCitkaWZmIC0tZ2l0IGEvdGVzdHMvdXRpbC9DTWFrZUxpc3RzLnR4dCBiL3Rlc3RzL3V0aWwvQ01ha2VMaXN0cy50eHQKK2luZGV4IGZiMjJmZmEuLmUxZjgwNzMgMTAwNjQ0CistLS0gYS90ZXN0cy91dGlsL0NNYWtlTGlzdHMudHh0CisrKysgYi90ZXN0cy91dGlsL0NNYWtlTGlzdHMudHh0CitAQCAtMTIxLDExICsxMjEsMTMgQEAgaWYoJHtDTUFLRV9TWVNURU1fTkFNRX0gTUFUQ0hFUyAiTGludXgiKQorIAorIAkJbGlzdChBUFBFTkQgVVRJTF9HTF9MSUJTCisgCQkJJHtMSUJEUk1fTERGTEFHU30KKysJCQkke1hDQl9MREZMQUdTfQorIAkJCSR7WENCX0RSSTJfTERGTEFHU30KKyAJCSkKKyAKKyAJCWxpc3QoQVBQRU5EIFVUSUxfR0xfSU5DTFVERVMKKyAJCQkke0xJQkRSTV9JTkNMVURFX0RJUlN9CisrCQkJJHtYQ0JfSU5DTFVERV9ESVJTfQorIAkJCSR7WENCX0RSSTJfSU5DTFVERV9ESVJTfQorIAkJKQorIAorLS0gCisyLjEuNAorCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3BpZ2xpdC9waWdsaXQvMDAwMS1jbWFrZS1pbnN0YWxsLWJhc2gtY29tcGxldGlvbnMtaW4tdGhlLXJpZ2h0LXBsYWNlLnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy9waWdsaXQvcGlnbGl0LzAwMDEtY21ha2UtaW5zdGFsbC1iYXNoLWNvbXBsZXRpb25zLWluLXRoZS1yaWdodC1wbGFjZS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMDdlODEwCi0tLSAvZGV2L251bGwKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy9waWdsaXQvcGlnbGl0LzAwMDEtY21ha2UtaW5zdGFsbC1iYXNoLWNvbXBsZXRpb25zLWluLXRoZS1yaWdodC1wbGFjZS5wYXRjaApAQCAtMCwwICsxLDM1IEBACitGcm9tIDI2ZmFhMmMxNTdhMjdhMThhOWY3Njc5NzY3MzBmZTBjMTE1ZTNhZjQgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBKdXNzaSBLdWtrb25lbiA8anVzc2kua3Vra29uZW5AaW50ZWwuY29tPgorRGF0ZTogV2VkLCAxMyBKdWwgMjAxNiAxOToxOTowMiArMDMwMAorU3ViamVjdDogW1BBVENIXSBjbWFrZTogaW5zdGFsbCBiYXNoLWNvbXBsZXRpb25zIGluIHRoZSByaWdodCBwbGFjZQorCitUaGUgY29tcGxldGlvbnNkaXIgdmFyaWFibGUgaXMgYSBmdWxsIHBhdGggYW5kIHNob3VsZCBub3QgYmUKK3ByZWZpeGVkLgorCitUaGlzIGRvZXMgbWVhbiB0aGUgZmlsZXMgbWF5IGJlIGluc3RhbGxlZCBvdXRzaWRlIG9mCitDTUFLRV9JTlNUQUxMX1BSRUZJWCAtLSB0aGUgYWx0ZXJuYXRpdmUgaXMgbW9yZSBkaWZmaWN1bHQgYW5kCittZWFucyB0aGF0IGJhc2ggY29tcGxldGlvbiBmaWxlcyBtYXkgYmUgaW5zdGFsbGVkIHdoZXJlCitiYXNoLWNvbXBsZXRpb24gY2FuJ3QgZmluZCB0aGVtLgorCitTaWduZWQtb2ZmLWJ5OiBKdXNzaSBLdWtrb25lbiA8anVzc2kua3Vra29uZW5AaW50ZWwuY29tPgorVXBzdHJlYW0tU3RhdHVzOiBTdWJtaXR0ZWQgW21haWxpbmcgbGlzdF0KKy0tLQorIENNYWtlTGlzdHMudHh0IHwgMiArLQorIDEgZmlsZSBjaGFuZ2VkLCAxIGluc2VydGlvbigrKSwgMSBkZWxldGlvbigtKQorCitkaWZmIC0tZ2l0IGEvQ01ha2VMaXN0cy50eHQgYi9DTWFrZUxpc3RzLnR4dAoraW5kZXggOGUyYWJiYS4uNzg0YThmOSAxMDA2NDQKKy0tLSBhL0NNYWtlTGlzdHMudHh0CisrKysgYi9DTWFrZUxpc3RzLnR4dAorQEAgLTUzMiw3ICs1MzIsNyBAQCBpbnN0YWxsICgKKyBpZiAoQkFTSF9DT01QTEVUSU9OX0ZPVU5EKQorIAlpbnN0YWxsKAorIAkJRklMRVMgY29tcGxldGlvbnMvYmFzaC9waWdsaXQKKy0JCURFU1RJTkFUSU9OICR7Q01BS0VfSU5TVEFMTF9QUkVGSVh9LyR7QkFTSF9DT01QTEVUSU9OX0NPTVBMRVRJT05TRElSfS8KKysJCURFU1RJTkFUSU9OICR7QkFTSF9DT01QTEVUSU9OX0NPTVBMRVRJT05TRElSfS8KKyAJKQorIGVuZGlmIChCQVNIX0NPTVBMRVRJT05fRk9VTkQpCisgCistLSAKKzIuOC4xCisKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvcGlnbGl0L3BpZ2xpdC8wMDAxLXRlc3RzLUZpeC1taXNzaW5nLWluY2x1ZGUtb2YtWHV0aWwuaC5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvcGlnbGl0L3BpZ2xpdC8wMDAxLXRlc3RzLUZpeC1taXNzaW5nLWluY2x1ZGUtb2YtWHV0aWwuaC5wYXRjaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzI3Y2MwNC4uMDAwMDAwMAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3BpZ2xpdC9waWdsaXQvMDAwMS10ZXN0cy1GaXgtbWlzc2luZy1pbmNsdWRlLW9mLVh1dGlsLmgucGF0Y2gKKysrIC9kZXYvbnVsbApAQCAtMSwyOCArMCwwIEBACi1VcHN0cmVhbS1TdGF0dXM6IEJhY2twb3J0Ci1TaWduZWQtb2ZmLWJ5OiBPdGF2aW8gU2FsdmFkb3IgPG90YXZpb0Bvc3N5c3RlbXMuY29tLmJyPgotCi1Gcm9tIGU0MGUwYTI1Zjk5NmQyZTIwNWM0YmRlYzJjOGE1Y2M3Zjc0ZTUwNjUgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCi1Gcm9tOiBPdGF2aW8gU2FsdmFkb3IgPG90YXZpb0Bvc3N5c3RlbXMuY29tLmJyPgotRGF0ZTogTW9uLCAxNSBKdW4gMjAxNSAxNjoyNTozMCAtMDMwMAotU3ViamVjdDogdGVzdHM6IEZpeCBtaXNzaW5nIGluY2x1ZGUgb2YgWHV0aWwuaAotCi1UaGUgRUdMIHRlc3RzIHJlbHkgb24gWHV0aWwuaCBiZWluZyBpbmNsdWRlZC4gU29tZSBFR0wgaW1wbGVtZW50YXRpb24KLWRvZXMgbm90IGV4cGxpdGx5IGluY2x1ZGUgaXQgYnkgZGVmYXVsdCBhbmQgdGhlbiB0aGUgYnVpbGQgZmFpbHMuCi0KLVNpZ25lZC1vZmYtYnk6IE90YXZpbyBTYWx2YWRvciA8b3RhdmlvQG9zc3lzdGVtcy5jb20uYnI+Ci1SZXZpZXdlZC1ieTogTmVpbCBSb2JlcnRzIDxuZWlsQGxpbnV4LmludGVsLmNvbT4KLQotZGlmZiAtLWdpdCBhL3Rlc3RzL2VnbC9lZ2wtY29uZmlnbGVzcy1jb250ZXh0LmMgYi90ZXN0cy9lZ2wvZWdsLWNvbmZpZ2xlc3MtY29udGV4dC5jCi1pbmRleCAwNTA0YTI2Li4xNTRiNTVjIDEwMDY0NAotLS0tIGEvdGVzdHMvZWdsL2VnbC1jb25maWdsZXNzLWNvbnRleHQuYwotKysrIGIvdGVzdHMvZWdsL2VnbC1jb25maWdsZXNzLWNvbnRleHQuYwotQEAgLTMyLDYgKzMyLDcgQEAKLSAvKiBDaHVua3Mgb2YgY29kZSBpbiB0aGlzIGZpbGUgYXJlIHRha2VuIGZyb20gZWdsLXV0aWwuYyAqLwotIAotICNpbmNsdWRlIDxYMTEvWGxpYi5oPgotKyNpbmNsdWRlIDxYMTEvWHV0aWwuaD4KLSAKLSAjaW5jbHVkZSAicGlnbGl0LXV0aWwtZ2wuaCIKLSAjaW5jbHVkZSAicGlnbGl0LXV0aWwtZWdsLmgiCi0tLSAKLWNnaXQgdjAuMTAuMgpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy9waWdsaXQvcGlnbGl0LzAwMDEtdGVzdHMtVXNlLUZFX1VQV0FSRC1vbmx5LWlmLWl0cy1kZWZpbmVkLWluLWZlbnYuaC5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvcGlnbGl0L3BpZ2xpdC8wMDAxLXRlc3RzLVVzZS1GRV9VUFdBUkQtb25seS1pZi1pdHMtZGVmaW5lZC1pbi1mZW52LmgucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjg1MWE5MgotLS0gL2Rldi9udWxsCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvcGlnbGl0L3BpZ2xpdC8wMDAxLXRlc3RzLVVzZS1GRV9VUFdBUkQtb25seS1pZi1pdHMtZGVmaW5lZC1pbi1mZW52LmgucGF0Y2gKQEAgLTAsMCArMSw1NCBAQAorRnJvbSAwZmMyYzI5MzI2OTljZmQ2OGJlOTZjODIwZmRkZmRkNzliNDhiNzg4IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KK0RhdGU6IFNhdCwgOSBKdWwgMjAxNiAwNzo1MjoxOSArMDAwMAorU3ViamVjdDogW1BBVENIXSB0ZXN0czogVXNlIEZFX1VQV0FSRCBvbmx5IGlmIGl0cyBkZWZpbmVkIGluIGZlbnYuaAorCitPbiBBUk0sIG11c2wgZG9lcyBub3QgZGVmaW5lIEZFXyogd2hlbiBhcmNoIGRvZXMgbm90IGhhdmUKK1ZGUCwgKHdoaWNoIGlzIHJpZ2h0IGludGVycHJldGF0aW9uKSwgdGhlcmVmb3JlIGNoZWNrIGlmCitpdHMgZGVmaW5lZCBiZWZvcmUgdXNpbmcgaXQKKworRml4ZXMgZXJyb3JzIGxpa2UKKwordGVzdHMvZ2VuZXJhbC9yb3VuZG1vZGUtcGl4ZWxzdG9yZS5jOjgyOjE5OiBlcnJvcjogJ0ZFX1VQV0FSRCcgdW5kZWNsYXJlZCAoZmlyc3QgdXNlIGluIHRoaXMgZnVuY3Rpb24pCisgIHJldCA9IGZlc2V0cm91bmQoRkVfVVBXQVJEKTsKKyAgICAgICAgICAgICAgICAgICBefn5+fn5+fn4KKworU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KKy0tLQorVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKKyB0ZXN0cy9nZW5lcmFsL3JvdW5kbW9kZS1nZXRpbnRlZ2Vydi5jIHwgMiArKworIHRlc3RzL2dlbmVyYWwvcm91bmRtb2RlLXBpeGVsc3RvcmUuYyAgfCAyICsrCisgMiBmaWxlcyBjaGFuZ2VkLCA0IGluc2VydGlvbnMoKykKKworZGlmZiAtLWdpdCBhL3Rlc3RzL2dlbmVyYWwvcm91bmRtb2RlLWdldGludGVnZXJ2LmMgYi90ZXN0cy9nZW5lcmFsL3JvdW5kbW9kZS1nZXRpbnRlZ2Vydi5jCitpbmRleCAyOGVjZmFmLi41YzI3NTc5IDEwMDY0NAorLS0tIGEvdGVzdHMvZ2VuZXJhbC9yb3VuZG1vZGUtZ2V0aW50ZWdlcnYuYworKysrIGIvdGVzdHMvZ2VuZXJhbC9yb3VuZG1vZGUtZ2V0aW50ZWdlcnYuYworQEAgLTgxLDcgKzgxLDkgQEAgcGlnbGl0X2luaXQoaW50IGFyZ2MsIGNoYXIgKiphcmd2KQorIHsKKyAJaW50IHJldDsKKyAJYm9vbCBwYXNzID0gdHJ1ZTsKKysjaWZkZWYgRkVfVVBXQVJECisgCXJldCA9IGZlc2V0cm91bmQoRkVfVVBXQVJEKTsKKysjZW5kaWYKKyAJaWYgKHJldCAhPSAwKSB7CisgCQlwcmludGYoIkNvdWxkbid0IHNldCByb3VuZGluZyBtb2RlXG4iKTsKKyAJCXBpZ2xpdF9yZXBvcnRfcmVzdWx0KFBJR0xJVF9TS0lQKTsKK2RpZmYgLS1naXQgYS90ZXN0cy9nZW5lcmFsL3JvdW5kbW9kZS1waXhlbHN0b3JlLmMgYi90ZXN0cy9nZW5lcmFsL3JvdW5kbW9kZS1waXhlbHN0b3JlLmMKK2luZGV4IDkyODRmNDMuLjNmY2IzOTYgMTAwNjQ0CistLS0gYS90ZXN0cy9nZW5lcmFsL3JvdW5kbW9kZS1waXhlbHN0b3JlLmMKKysrKyBiL3Rlc3RzL2dlbmVyYWwvcm91bmRtb2RlLXBpeGVsc3RvcmUuYworQEAgLTc5LDcgKzc5LDkgQEAgcGlnbGl0X2luaXQoaW50IGFyZ2MsIGNoYXIgKiphcmd2KQorIHsKKyAJaW50IHJldDsKKyAJYm9vbCBwYXNzID0gdHJ1ZTsKKysjaWZkZWYgRkVfVVBXQVJECisgCXJldCA9IGZlc2V0cm91bmQoRkVfVVBXQVJEKTsKKysjZW5kaWYKKyAJaWYgKHJldCAhPSAwKSB7CisgCQlwcmludGYoIkNvdWxkbid0IHNldCByb3VuZGluZyBtb2RlXG4iKTsKKyAJCXBpZ2xpdF9yZXBvcnRfcmVzdWx0KFBJR0xJVF9TS0lQKTsKKy0tIAorMS44LjMuMQorCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3BpZ2xpdC9waWdsaXRfZ2l0LmJiIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy9waWdsaXQvcGlnbGl0X2dpdC5iYgppbmRleCA2MDdmMjM2Li44MmFkY2RlIDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3BpZ2xpdC9waWdsaXRfZ2l0LmJiCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvcGlnbGl0L3BpZ2xpdF9naXQuYmIKQEAgLTMsMTggKzMsMjIgQEAKIExJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PWIyYmVkZWQ3MTAzYTNkOGE0NDJhMmEwMzkxZDYwN2IwIgogCiBTUkNfVVJJID0gImdpdDovL2Fub25naXQuZnJlZWRlc2t0b3Aub3JnL3BpZ2xpdCBcCi0gICAgICAgICAgIGZpbGU6Ly8wMDAxLXRlc3RzLUZpeC1taXNzaW5nLWluY2x1ZGUtb2YtWHV0aWwuaC5wYXRjaCIKKyAgICAgICAgICAgZmlsZTovLzAwMDEtY21ha2UtaW5zdGFsbC1iYXNoLWNvbXBsZXRpb25zLWluLXRoZS1yaWdodC1wbGFjZS5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly8wMDAxLXRlc3RzLVVzZS1GRV9VUFdBUkQtb25seS1pZi1pdHMtZGVmaW5lZC1pbi1mZW52LmgucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vMDAwMS1jbWFrZS1MaW5rLXV0aWxzLXdpdGgteGNiLWV4cGxpY2l0bHkucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vMDAwMS1jbWFrZS1MaW5rLXRlc3QtdXRpbHMtd2l0aC1sZGwucGF0Y2ggXAorICAgICAgICAgICAiCiAKLSMgRnJvbSAyMDE1LTAyLTE5Ci1TUkNSRVYgPSAiYzQ1ODU0Mjc5MTNlNGNiMjg5OTRiNGJmYjExZDQ5Nzc4MjczYWEyYyIKKyMgRnJvbSAyMDE2LTA3LTA3CitTUkNSRVYgPSAiYzM5ZTQxYTg2NTUxZWIzOTBiOGRhMjMyMzJkYzg1Nzc2Mzk0MDNkMCIKICMgKHdoZW4gUFYgZ29lcyBhYm92ZSAxLjAgcmVtb3ZlIHRoZSB0cmFpbGluZyByKQogUFYgPSAiMS4wK2dpdHIke1NSQ1BWfSIKIAogUyA9ICIke1dPUktESVJ9L2dpdCIKIAotREVQRU5EUyA9ICJ2aXJ0dWFsL2xpYngxMSBsaWJ4cmVuZGVyIHdhZmZsZSB2aXJ0dWFsL2xpYmdsIGxpYmdsdSBweXRob24tbWFrby1uYXRpdmUgcHl0aG9uLW51bXB5LW5hdGl2ZSIKK0RFUEVORFMgPSAibGlicG5nIHZpcnR1YWwvbGlieDExIGxpYnhyZW5kZXIgd2FmZmxlIHZpcnR1YWwvbGliZ2wgbGliZ2x1IHB5dGhvbjMtbWFrby1uYXRpdmUgcHl0aG9uMy1udW1weS1uYXRpdmUgcHl0aG9uMy1zaXgtbmF0aXZlIgogCi1pbmhlcml0IGNtYWtlIHB5dGhvbm5hdGl2ZSBkaXN0cm9fZmVhdHVyZXNfY2hlY2sKK2luaGVyaXQgY21ha2UgcHl0aG9uM25hdGl2ZSBkaXN0cm9fZmVhdHVyZXNfY2hlY2sgYmFzaC1jb21wbGV0aW9uCiAjIGRlcGVuZHMgb24gdmlydHVhbC9saWJ4MTEKIFJFUVVJUkVEX0RJU1RST19GRUFUVVJFUyA9ICJ4MTEiCiAKQEAgLTM0LDEwICszOCwxNSBAQAogICAgZmkKIH0KIAotUkRFUEVORFNfJHtQTn0gPSAid2FmZmxlIHB5dGhvbiBweXRob24tbWFrbyBweXRob24tanNvbiBweXRob24tc3VicHJvY2VzcyBcCi0JcHl0aG9uLWFyZ3BhcnNlIHB5dGhvbi1pbXBvcnRsaWIgcHl0aG9uLXVuaXhhZG1pbiBweXRob24teG1sIFwKLQlweXRob24tbXVsdGlwcm9jZXNzaW5nIHB5dGhvbi10ZXh0dXRpbHMgcHl0aG9uLW5ldHNlcnZlciBweXRob24tc2hlbGwgXAorZG9faW5zdGFsbCgpIHsKKwlvZV9ydW5tYWtlIC1DICR7Qn0gJ0RFU1RESVI9JHtEfScgaW5zdGFsbC9zdHJpcAorfQorCitSREVQRU5EU18ke1BOfSA9ICJ3YWZmbGUgcHl0aG9uMyBweXRob24zLW1ha28gcHl0aG9uMy1qc29uIFwKKwlweXRob24zLXN1YnByb2Nlc3MgcHl0aG9uMy1taXNjIHB5dGhvbjMtaW1wb3J0bGliIFwKKwlweXRob24zLXVuaXhhZG1pbiBweXRob24zLXhtbCBweXRob24zLW11bHRpcHJvY2Vzc2luZyBcCisJcHl0aG9uMy1zaXggcHl0aG9uMy1zaGVsbCBweXRob24zLWlvIHB5dGhvbjMtYXJncGFyc2UgXAogCW1lc2EtZGVtb3MgYmFzaCBcCiAJIgogCi1JTlNBTkVfU0tJUF8ke1BOfSArPSAiZGV2LXNvIgorSU5TQU5FX1NLSVBfJHtQTn0gKz0gImRldi1zbyBhbHJlYWR5LXN0cmlwcGVkIgpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy9wb25nLWNsb2NrL3BvbmctY2xvY2tfMS4wLmJiIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy9wb25nLWNsb2NrL3BvbmctY2xvY2tfMS4wLmJiCmluZGV4IDBlMWE3OTIuLjZjM2JjZDggMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvcG9uZy1jbG9jay9wb25nLWNsb2NrXzEuMC5iYgorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3BvbmctY2xvY2svcG9uZy1jbG9ja18xLjAuYmIKQEAgLTEzLDcgKzEzLDcgQEAKIFMgPSAiJHtXT1JLRElSfSIKIAogZG9fY29tcGlsZSAoKSB7Ci0JJHtDQ30gLW8gcG9uZy1jbG9jayBwb25nLWNsb2NrLW5vLWZsaWNrZXIuYyBgcGtnLWNvbmZpZyAtLWNmbGFncyAtLWxpYnMgeDExIHhhdSB4ZG1jcGAKKwkke0NDfSAke0NGTEFHU30gJHtMREZMQUdTfSAtbyBwb25nLWNsb2NrIHBvbmctY2xvY2stbm8tZmxpY2tlci5jIGBwa2ctY29uZmlnIC0tY2ZsYWdzIC0tbGlicyB4MTEgeGF1IHhkbWNwYAogfQogCiBkb19pbnN0YWxsICgpIHsKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvdHNsaWIvdHNsaWIvdHMuY29uZiBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvdHNsaWIvdHNsaWIvdHMuY29uZgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMWIwZGE5My4uMDAwMDAwMAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3RzbGliL3RzbGliL3RzLmNvbmYKKysrIC9kZXYvbnVsbApAQCAtMSwyNSArMCwwIEBACi0jIFVuY29tbWVudCBpZiB5b3Ugd2lzaCB0byB1c2UgdGhlIGxpbnV4IGlucHV0IGxheWVyIGV2ZW50IGludGVyZmFjZQotbW9kdWxlX3JhdyBpbnB1dAotCi0jIFVuY29tbWVudCBpZiB5b3UncmUgdXNpbmcgYSBTaGFycCBaYXVydXMgU0wtNTUwMC9TTC01MDAwZAotIyBtb2R1bGVfcmF3IGNvbGxpZQotCi0jIFVuY29tbWVudCBpZiB5b3UncmUgdXNpbmcgYSBTaGFycCBaYXVydXMgU0wtQzcwMC9DNzUwL0M3NjAvQzg2MAotIyBtb2R1bGVfcmF3IGNvcmdpCi0KLSMgVW5jb21tZW50IGlmIHlvdSdyZSB1c2luZyBhIGRldmljZSB3aXRoIGEgVUNCMTIwMC8xMzAwLzE0MDAgVFMgaW50ZXJmYWNlCi0jIG1vZHVsZV9yYXcgdWNiMXgwMAotCi0jIFVuY29tbWVudCBpZiB5b3UncmUgdXNpbmcgYW4gSFAgaVBhcSBoMzYwMCBvciBzaW1pbGFyCi0jIG1vZHVsZV9yYXcgaDM2MDAKLQotIyBVbmNvbW1lbnQgaWYgeW91J3JlIHVzaW5nIGEgSGl0YWNoaSBXZWJwYWQKLSMgbW9kdWxlX3JhdyBtazcxMgotCi0jIFVuY29tbWVudCBpZiB5b3UncmUgdXNpbmcgYW4gSUJNIEFyY3RpYyBJSQotIyBtb2R1bGVfcmF3IGFyY3RpYzIKLQotbW9kdWxlIHB0aHJlcyBwbWluPTEKLW1vZHVsZSB2YXJpYW5jZSBkZWx0YT0zMAotbW9kdWxlIGRlaml0dGVyIGRlbHRhPTEwMAotbW9kdWxlIGxpbmVhcgpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy90c2xpYi90c2xpYi90c2xpYi5zaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvdHNsaWIvdHNsaWIvdHNsaWIuc2gKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDcwNjhlOGQuLjAwMDAwMDAKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy90c2xpYi90c2xpYi90c2xpYi5zaAorKysgL2Rldi9udWxsCkBAIC0xLDggKzAsMCBAQAotIyEvYmluL3NoCi0KLWlmIFsgLWUgL2Rldi9pbnB1dC90b3VjaHNjcmVlbjAgXTsgdGhlbgotICAgIFRTTElCX1RTREVWSUNFPS9kZXYvaW5wdXQvdG91Y2hzY3JlZW4wCi0KLSAgICBleHBvcnQgVFNMSUJfVFNERVZJQ0UKLWZpCi0KZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvdHNsaWIvdHNsaWJfMS4xLmJiIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy90c2xpYi90c2xpYl8xLjEuYmIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGIwMjY0YzMuLjAwMDAwMDAKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy90c2xpYi90c2xpYl8xLjEuYmIKKysrIC9kZXYvbnVsbApAQCAtMSw1MyArMCwwIEBACi1TVU1NQVJZID0gIkFuIGFic3RyYWN0aW9uIGxheWVyIGZvciB0b3VjaHNjcmVlbiBwYW5lbCBldmVudHMiCi1ERVNDUklQVElPTiA9ICJUc2xpYiBpcyBhbiBhYnN0cmFjdGlvbiBsYXllciBmb3IgdG91Y2hzY3JlZW4gcGFuZWwgXAotZXZlbnRzLCBhcyB3ZWxsIGFzIGEgZmlsdGVyIHN0YWNrIGZvciB0aGUgbWFuaXB1bGF0aW9uIG9mIHRob3NlIGV2ZW50cy4gXAotVHNsaWIgaXMgZ2VuZXJhbGx5IHVzZWQgb24gZW1iZWRkZWQgZGV2aWNlcyB0byBwcm92aWRlIGEgY29tbW9uIHVzZXIgXAotc3BhY2UgaW50ZXJmYWNlIHRvIHRvdWNoc2NyZWVuIGZ1bmN0aW9uYWxpdHkuIgotSE9NRVBBR0UgPSAiaHR0cDovL3RzbGliLmJlcmxpb3MuZGUvIgotCi1BVVRIT1IgPSAiUnVzc2VsbCBLaW5nIHcvIHBsdWdpbnMgYnkgQ2hyaXMgTGFyc29uIGV0LiBhbC4iCi1TRUNUSU9OID0gImJhc2UiCi1MSUNFTlNFID0gIkxHUEx2MiIKLUxJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PWYzMGE5NzE2ZWYzNzYyZTM0NjdhMmY2MmJmNzkwZjBhIgotCi1TUkNfVVJJID0gImh0dHBzOi8vZ2l0aHViLmNvbS9rZXJnb3RoL3RzbGliL3JlbGVhc2VzL2Rvd25sb2FkLyR7UFZ9L3RzbGliLSR7UFZ9LnRhci54ejtkb3dubG9hZGZpbGVuYW1lPXRzbGliLSR7UFZ9LnRhci54eiBcCi0gICAgICAgICAgIGZpbGU6Ly90cy5jb25mIFwKLSAgICAgICAgICAgZmlsZTovL3RzbGliLnNoIFwKLSIKLQotU1JDX1VSSVttZDVzdW1dID0gIjE0NzcxZjg2MDdiMzQxYmI0YjI5NzgxOWQzN2U4MzdkIgotU1JDX1VSSVtzaGEyNTZzdW1dID0gImZlMzVlNWY3MTBlYTkzM2IxMThmNzEwZTJjZTQ0MDNhYzA3NmZlNjk5MjZiNTcwMzMzODY3ZDRkZTA4MmE1MWMiCi0KLVVQU1RSRUFNX0NIRUNLX1VSSSA9ICJodHRwczovL2dpdGh1Yi5jb20va2VyZ290aC90c2xpYi9yZWxlYXNlcyIKLQotaW5oZXJpdCBhdXRvdG9vbHMgcGtnY29uZmlnCi0KLUVYVFJBX09FQ09ORiA9ICItLWVuYWJsZS1zaGFyZWQgLS1kaXNhYmxlLWgzNjAwIC0tZW5hYmxlLWlucHV0IC0tZGlzYWJsZS1jb3JnaSAtLWRpc2FibGUtY29sbGllIC0tZGlzYWJsZS1tazcxMiAtLWRpc2FibGUtYXJjdGljMiAtLWRpc2FibGUtdWNiMXgwMCIKLQotZG9faW5zdGFsbF9wcmVwZW5kKCkgewotCWluc3RhbGwgLW0gMDY0NCAke1dPUktESVJ9L3RzLmNvbmYgJHtTfS9ldGMvdHMuY29uZgotfQotCi1kb19pbnN0YWxsX2FwcGVuZCgpIHsKLQlpbnN0YWxsIC1kICR7RH0ke3N5c2NvbmZkaXJ9L3Byb2ZpbGUuZC8KLQlpbnN0YWxsIC1tIDA3NTUgJHtXT1JLRElSfS90c2xpYi5zaCAke0R9JHtzeXNjb25mZGlyfS9wcm9maWxlLmQvCi19Ci0KLSMgUGVvcGxlIHNob3VsZCBjb25zaWRlciB1c2luZyB1ZGV2J3MgL2Rldi9pbnB1dC90b3VjaHNjcmVlbjAgc3ltbGluawotIyBpbnN0ZWFkIG9mIGRldGVjdC1zdHlsdXMKLSNSREVQRU5EU190c2xpYi1jb25mX3dlaXJkLW1hY2hpbmUgPSAiZGV0ZWN0LXN0eWx1cyIKLVJQUk9WSURFU190c2xpYi1jb25mID0gImxpYnRzLTAuMC1jb25mIgotCi1QQUNLQUdFUyA9KyAidHNsaWItY29uZiB0c2xpYi10ZXN0cyB0c2xpYi1jYWxpYnJhdGUiCi1ERUJJQU5fTk9BVVRPTkFNRV90c2xpYi1jb25mID0gIjEiCi1ERUJJQU5fTk9BVVRPTkFNRV90c2xpYi10ZXN0cyA9ICIxIgotREVCSUFOX05PQVVUT05BTUVfdHNsaWItY2FsaWJyYXRlID0gIjEiCi0KLVJERVBFTkRTXyR7UE59ID0gInRzbGliLWNvbmYiCi1SUkVDT01NRU5EU18ke1BOfSA9ICJwb2ludGVyY2FsIgotCi1GSUxFU18ke1BOfS1kZXYgKz0gIiR7bGliZGlyfS90cy8qLmxhIgotRklMRVNfdHNsaWItY29uZiA9ICIke3N5c2NvbmZkaXJ9L3RzLmNvbmYgJHtzeXNjb25mZGlyfS9wcm9maWxlLmQvdHNsaWIuc2ggJHtkYXRhZGlyfS90c2xpYiIKLUZJTEVTXyR7UE59ID0gIiR7bGliZGlyfS8qLnNvLiogJHtsaWJkaXJ9L3RzLyouc28qIgotRklMRVNfdHNsaWItY2FsaWJyYXRlICs9ICIke2JpbmRpcn0vdHNfY2FsaWJyYXRlIgotRklMRVNfdHNsaWItdGVzdHMgPSAiJHtiaW5kaXJ9L3RzX2hhcnZlc3QgJHtiaW5kaXJ9L3RzX3ByaW50ICR7YmluZGlyfS90c19wcmludF9yYXcgJHtiaW5kaXJ9L3RzX3Rlc3QiCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3dheWxhbmQvbGliaW5wdXQvdG91Y2hwYWQtc2VyaWFsLXN5bmFwdGljcy1uZWVkLXRvLWZha2UtbmV3LXRvdWNoZXMtb24tVFJJUExFVEFQLnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy93YXlsYW5kL2xpYmlucHV0L3RvdWNocGFkLXNlcmlhbC1zeW5hcHRpY3MtbmVlZC10by1mYWtlLW5ldy10b3VjaGVzLW9uLVRSSVBMRVRBUC5wYXRjaAppbmRleCA5N2M2M2JkLi5iNTJiNDk2IDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3dheWxhbmQvbGliaW5wdXQvdG91Y2hwYWQtc2VyaWFsLXN5bmFwdGljcy1uZWVkLXRvLWZha2UtbmV3LXRvdWNoZXMtb24tVFJJUExFVEFQLnBhdGNoCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3Mvd2F5bGFuZC9saWJpbnB1dC90b3VjaHBhZC1zZXJpYWwtc3luYXB0aWNzLW5lZWQtdG8tZmFrZS1uZXctdG91Y2hlcy1vbi1UUklQTEVUQVAucGF0Y2gKQEAgLTEsNyArMSw3IEBACiBUaGlzIGlzIGEgd29ya2Fyb3VuZCB1cHN0cmVhbSBzdWdnZXN0cyBmb3IgdXNlIHdpdGgga2VybmVsIDQuMS4KIAogVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFt0ZW1wb3Jhcnkgd29yay1hcm91bmRdCi1TaWduZWQtT2ZmLUJ5OiBKdXNzaSBLdWtrb25lbiA8anVzc2kua3Vra29uZW5AaW50ZWwuY29tPgorU2lnbmVkLW9mZi1ieTogSnVzc2kgS3Vra29uZW4gPGp1c3NpLmt1a2tvbmVuQGludGVsLmNvbT4KIAogCiAKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3Mvd2F5bGFuZC9saWJpbnB1dF8xLjEuNC5iYiBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3Mvd2F5bGFuZC9saWJpbnB1dF8xLjEuNC5iYgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDE2NzY3OS4uMDAwMDAwMAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3dheWxhbmQvbGliaW5wdXRfMS4xLjQuYmIKKysrIC9kZXYvbnVsbApAQCAtMSwyMiArMCwwIEBACi1TVU1NQVJZID0gIkxpYnJhcnkgdG8gaGFuZGxlIGlucHV0IGRldmljZXMgaW4gV2F5bGFuZCBjb21wb3NpdG9ycyIKLUhPTUVQQUdFID0gImh0dHA6Ly93d3cuZnJlZWRlc2t0b3Aub3JnL3dpa2kvU29mdHdhcmUvbGliaW5wdXQvIgotU0VDVElPTiA9ICJsaWJzIgotCi1MSUNFTlNFID0gIk1JVCIKLUxJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PTIxODRhZWYzOGZmMTM3ZWQzM2NlOWE2M2I5ZDFlYjhmIgotCi1ERVBFTkRTID0gImxpYmV2ZGV2IHVkZXYgbXRkZXYiCi0KLVNSQ19VUkkgPSAiaHR0cDovL3d3dy5mcmVlZGVza3RvcC5vcmcvc29mdHdhcmUvJHtCUE59LyR7QlB9LnRhci54eiBcCi0gICAgICAgICAgIGZpbGU6Ly90b3VjaHBhZC1zZXJpYWwtc3luYXB0aWNzLW5lZWQtdG8tZmFrZS1uZXctdG91Y2hlcy1vbi1UUklQTEVUQVAucGF0Y2ggXAotIgotU1JDX1VSSVttZDVzdW1dID0gIjA5NDUzMTgxNDFjMWE5ZjUyODU3YmJmNjVkMTc1ZjMyIgotU1JDX1VSSVtzaGEyNTZzdW1dID0gIjMwMmNiNzYyMDliOWM1N2E1YTMxOGUxNzhmOWJjNDQ2ZWVkZThlYTc5Mzg2MTAzYjUyOTFjYmZhYTVmYWI1YjYiCi0KLWluaGVyaXQgYXV0b3Rvb2xzIHBrZ2NvbmZpZwotCi1QQUNLQUdFQ09ORklHID8/PSAiIgotUEFDS0FHRUNPTkZJR1tsaWJ1bndpbmRdID0gIi0td2l0aC1saWJ1bndpbmQsLS13aXRob3V0LWxpYnVud2luZCxsaWJ1bndpbmQiCi1QQUNLQUdFQ09ORklHW2d1aV0gPSAiLS1lbmFibGUtZXZlbnQtZ3VpLC0tZGlzYWJsZS1ldmVudC1ndWksY2Fpcm8gZ3RrKzMiCi0KLUZJTEVTXyR7UE59ICs9ICIke2xpYmRpcn0vdWRldi8iCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3dheWxhbmQvbGliaW5wdXRfMS40LjEuYmIgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3dheWxhbmQvbGliaW5wdXRfMS40LjEuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzU4MDM5MgotLS0gL2Rldi9udWxsCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3Mvd2F5bGFuZC9saWJpbnB1dF8xLjQuMS5iYgpAQCAtMCwwICsxLDI1IEBACitTVU1NQVJZID0gIkxpYnJhcnkgdG8gaGFuZGxlIGlucHV0IGRldmljZXMgaW4gV2F5bGFuZCBjb21wb3NpdG9ycyIKK0hPTUVQQUdFID0gImh0dHA6Ly93d3cuZnJlZWRlc2t0b3Aub3JnL3dpa2kvU29mdHdhcmUvbGliaW5wdXQvIgorU0VDVElPTiA9ICJsaWJzIgorCitMSUNFTlNFID0gIk1JVCIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PTIxODRhZWYzOGZmMTM3ZWQzM2NlOWE2M2I5ZDFlYjhmIgorCitERVBFTkRTID0gImxpYmV2ZGV2IHVkZXYgbXRkZXYiCisKK1NSQ19VUkkgPSAiaHR0cDovL3d3dy5mcmVlZGVza3RvcC5vcmcvc29mdHdhcmUvJHtCUE59LyR7QlB9LnRhci54eiBcCisgICAgICAgICAgIGZpbGU6Ly90b3VjaHBhZC1zZXJpYWwtc3luYXB0aWNzLW5lZWQtdG8tZmFrZS1uZXctdG91Y2hlcy1vbi1UUklQTEVUQVAucGF0Y2ggXAorIgorU1JDX1VSSVttZDVzdW1dID0gIjJlN2JhNTc3ZWQ3NGQ4ZDFiYWViMDdkYmQ0ZmI5MTJhIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjI2ZTdiM2FiNDk5MzU4Y2FiYTQ5OTcwNTY4MGVhN2U1ODUxYWYyYmQzN2RjMzJmMmJlNjQxODE2MTBkNjM5MmEiCisKK2luaGVyaXQgYXV0b3Rvb2xzIHBrZ2NvbmZpZworCitQQUNLQUdFQ09ORklHID8/PSAiIgorUEFDS0FHRUNPTkZJR1tsaWJ1bndpbmRdID0gIi0td2l0aC1saWJ1bndpbmQsLS13aXRob3V0LWxpYnVud2luZCxsaWJ1bndpbmQiCitQQUNLQUdFQ09ORklHW2xpYndhY29tXSA9ICItLWVuYWJsZS1saWJ3YWNvbSwtLWRpc2FibGUtbGlid2Fjb20sbGlid2Fjb20iCitQQUNLQUdFQ09ORklHW2d1aV0gPSAiLS1lbmFibGUtZXZlbnQtZ3VpLC0tZGlzYWJsZS1ldmVudC1ndWksY2Fpcm8gZ3RrKzMiCisKK1VERVZESVIgPSAiYHBrZy1jb25maWcgLS12YXJpYWJsZT11ZGV2ZGlyIHVkZXZgIgorCitFWFRSQV9PRUNPTkYgKz0gIi0td2l0aC11ZGV2LWRpcj0ke1VERVZESVJ9IgpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy93YXlsYW5kL3dheWxhbmQtcHJvdG9jb2xzXzEuNy5iYiBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3Mvd2F5bGFuZC93YXlsYW5kLXByb3RvY29sc18xLjcuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWQyZjBkYgotLS0gL2Rldi9udWxsCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3Mvd2F5bGFuZC93YXlsYW5kLXByb3RvY29sc18xLjcuYmIKQEAgLTAsMCArMSwyMCBAQAorU1VNTUFSWSA9ICJDb2xsZWN0aW9uIG9mIGFkZGl0aW9uYWwgV2F5bGFuZCBwcm90b2NvbHMiCitERVNDUklQVElPTiA9ICJXYXlsYW5kIHByb3RvY29scyB0aGF0IGFkZCBmdW5jdGlvbmFsaXR5IG5vdCBcCithdmFpbGFibGUgaW4gdGhlIFdheWxhbmQgY29yZSBwcm90b2NvbC4gU3VjaCBwcm90b2NvbHMgZWl0aGVyIGFkZCBcCitjb21wbGV0ZWx5IG5ldyBmdW5jdGlvbmFsaXR5LCBvciBleHRlbmQgdGhlIGZ1bmN0aW9uYWxpdHkgb2Ygc29tZSBvdGhlciBcCitwcm90b2NvbCBlaXRoZXIgaW4gV2F5bGFuZCBjb3JlLCBvciBzb21lIG90aGVyIHByb3RvY29sIGluIFwKK3dheWxhbmQtcHJvdG9jb2xzLiIKK0hPTUVQQUdFID0gImh0dHA6Ly93YXlsYW5kLmZyZWVkZXNrdG9wLm9yZyIKK0xJQ0VOU0UgPSAiTUlUIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9YzdiMTJiNjcwMmRhMzhjYTAyOGFjZTU0YWFlM2Q0ODQgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vc3RhYmxlL3ByZXNlbnRhdGlvbi10aW1lL3ByZXNlbnRhdGlvbi10aW1lLnhtbDtlbmRsaW5lPTI2O21kNT00NjQ2Y2Q3ZDllZGM5ZmE1NWRiOTQxZjJkM2E3ZGM1MyIKKworU1JDX1VSSSA9ICJodHRwczovL3dheWxhbmQuZnJlZWRlc2t0b3Aub3JnL3JlbGVhc2VzLyR7QlBOfS0ke1BWfS50YXIueHogXAorICAgICAgICAgICAiCitTUkNfVVJJW21kNXN1bV0gPSAiOWFjZmM5NTU2ZjdjZmVkYzQ0ZDk3YWY2MGRhNjZhNWYiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiNjM1ZjJhOTM3ZDMxOGYxZmVjYjk3YjU0MDc0Y2EyMTE0ODZlMzhhZjk0Mzg2OGRkMGZhODJlYTM4ZDA5MWMxZiIKKworaW5oZXJpdCBhbGxhcmNoIGF1dG90b29scyBwa2djb25maWcKKworUEFDS0FHRVMgPSAiJHtQTn0iCitGSUxFU18ke1BOfSArPSAiJHtkYXRhZGlyfS9wa2djb25maWcvd2F5bGFuZC1wcm90b2NvbHMucGMiCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3dheWxhbmQvd2F5bGFuZC8wMDAxLXNjYW5uZXItVXNlLXVuaXQzMl90LWluc3RlYWQtb2YtdWludC5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3Mvd2F5bGFuZC93YXlsYW5kLzAwMDEtc2Nhbm5lci1Vc2UtdW5pdDMyX3QtaW5zdGVhZC1vZi11aW50LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRlY2U5NWMKLS0tIC9kZXYvbnVsbAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3dheWxhbmQvd2F5bGFuZC8wMDAxLXNjYW5uZXItVXNlLXVuaXQzMl90LWluc3RlYWQtb2YtdWludC5wYXRjaApAQCAtMCwwICsxLDMwIEBACitGcm9tIDU1MTZkMzJlNjk0YmFkY2EzNWI2YzcxYjAyYTNmMDhmNjUwMzA4YmYgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorRGF0ZTogRnJpLCAxNSBKdWwgMjAxNiAxNjoyMzo0OCAtMDcwMAorU3ViamVjdDogW1BBVENIXSBzY2FubmVyOiBVc2UgdW5pdDMyX3QgaW5zdGVhZCBvZiB1aW50CisKK3VpbnQzMl90IGlzIEM5OSBkZWZpbmVkIHN0ZGludCB0eXBlCisKK1NpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CitTaWduZWQtb2ZmLWJ5OiBKdXNzaSBLdWtrb25lbiA8anVzc2kua3Vra29uZW5AaW50ZWwuY29tPgorVXBzdHJlYW0tU3RhdHVzOiBTdWJtaXR0ZWQKKy0tLQorIHNyYy9zY2FubmVyLmMgfCAyICstCisgMSBmaWxlIGNoYW5nZWQsIDEgaW5zZXJ0aW9uKCspLCAxIGRlbGV0aW9uKC0pCisKK2RpZmYgLS1naXQgYS9zcmMvc2Nhbm5lci5jIGIvc3JjL3NjYW5uZXIuYworaW5kZXggNWYwNmU4ZS4uMTBhNDAyMyAxMDA2NDQKKy0tLSBhL3NyYy9zY2FubmVyLmMKKysrKyBiL3NyYy9zY2FubmVyLmMKK0BAIC04MDgsNyArODA4LDcgQEAgZmluZF9lbnVtZXJhdGlvbihzdHJ1Y3QgcHJvdG9jb2wgKnByb3RvY29sLAorIAlzdHJ1Y3QgaW50ZXJmYWNlICppOworIAlzdHJ1Y3QgZW51bWVyYXRpb24gKmU7CisgCWNoYXIgKmVudW1fbmFtZTsKKy0JdWludCBpZHggPSAwLCBqOworKwl1aW50MzJfdCBpZHggPSAwLCBqOworIAorIAlmb3IgKGogPSAwOyBqICsgMSA8IHN0cmxlbihlbnVtX2F0dHJpYnV0ZSk7IGorKykgeworIAkJaWYgKGVudW1fYXR0cmlidXRlW2pdID09ICcuJykgeworLS0gCisyLjEuNAorCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3dheWxhbmQvd2F5bGFuZF8xLjExLjAuYmIgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3dheWxhbmQvd2F5bGFuZF8xLjExLjAuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzQxMzQwNgotLS0gL2Rldi9udWxsCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3Mvd2F5bGFuZC93YXlsYW5kXzEuMTEuMC5iYgpAQCAtMCwwICsxLDQzIEBACitTVU1NQVJZID0gIldheWxhbmQsIGEgcHJvdG9jb2wgYmV0d2VlbiBhIGNvbXBvc2l0b3IgYW5kIGNsaWVudHMiCitERVNDUklQVElPTiA9ICJXYXlsYW5kIGlzIGEgcHJvdG9jb2wgZm9yIGEgY29tcG9zaXRvciB0byB0YWxrIHRvIGl0cyBjbGllbnRzIFwKK2FzIHdlbGwgYXMgYSBDIGxpYnJhcnkgaW1wbGVtZW50YXRpb24gb2YgdGhhdCBwcm90b2NvbC4gVGhlIGNvbXBvc2l0b3IgY2FuIGJlIFwKK2Egc3RhbmRhbG9uZSBkaXNwbGF5IHNlcnZlciBydW5uaW5nIG9uIExpbnV4IGtlcm5lbCBtb2Rlc2V0dGluZyBhbmQgZXZkZXYgXAoraW5wdXQgZGV2aWNlcywgYW4gWCBhcHBsaWNhdGlvbiwgb3IgYSB3YXlsYW5kIGNsaWVudCBpdHNlbGYuIFRoZSBjbGllbnRzIGNhbiBcCitiZSB0cmFkaXRpb25hbCBhcHBsaWNhdGlvbnMsIFggc2VydmVycyAocm9vdGxlc3Mgb3IgZnVsbHNjcmVlbikgb3Igb3RoZXIgXAorZGlzcGxheSBzZXJ2ZXJzLiIKK0hPTUVQQUdFID0gImh0dHA6Ly93YXlsYW5kLmZyZWVkZXNrdG9wLm9yZyIKK0xJQ0VOU0UgPSAiTUlUIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9YjMxZDhmNTNiNmFhZjJiNDk4NWQ3ZGQ3ODEwYTcwZDEgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vc3JjL3dheWxhbmQtc2VydmVyLmM7ZW5kbGluZT0yNDttZDU9YjhlMDQ2MTY0YTc2NmJiMWVkZThiYTM4ZTlkY2Q3Y2UiCisKK1NSQ19VUkkgPSAiaHR0cHM6Ly93YXlsYW5kLmZyZWVkZXNrdG9wLm9yZy9yZWxlYXNlcy8ke0JQTn0tJHtQVn0udGFyLnh6IFwKKyAgICAgICAgICAgZmlsZTovLzAwMDEtc2Nhbm5lci1Vc2UtdW5pdDMyX3QtaW5zdGVhZC1vZi11aW50LnBhdGNoIFwKKyAgICAgICAgICAgIgorU1JDX1VSSVttZDVzdW1dID0gImZjY2Y2ODBiZTA2NmUyMzQ3MjlkNWI2OWUwYmQwZmE5IgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjk1NDA5MjVmNzkyOGJlY2ZkZjVlM2I4NGM3MDc1N2Y2NTg5YmYxY2VlZjA5YmVhNzg3ODRkOGU0NzcyYzBkYjAiCisKK0VYVFJBX09FQ09ORl9jbGFzcy1uYXRpdmUgPSAiLS1kaXNhYmxlLWRvY3VtZW50YXRpb24gLS1kaXNhYmxlLWxpYnJhcmllcyIKKworaW5oZXJpdCBhdXRvdG9vbHMgcGtnY29uZmlnCisKK0JCQ0xBU1NFWFRFTkQgPSAibmF0aXZlIG5hdGl2ZXNkayIKKworREVQRU5EUyA9ICJleHBhdCBsaWJ4bWwyIGxpYmZmaSB3YXlsYW5kLW5hdGl2ZSIKKworRVhUUkFfT0VDT05GID0gIi0tZGlzYWJsZS1kb2N1bWVudGF0aW9uIC0td2l0aC1ob3N0LXNjYW5uZXIiCisKKyMgV2F5bGFuZCBpbnN0YWxscyBhIE00IG1hY3JvIGZvciBvdGhlciBwcm9qZWN0cyB0byB1c2UsIHdoaWNoIHVzZXMgdGhlIHRhcmdldAorIyBwa2ctY29uZmlnIHRvIGZpbmQgZmlsZXMuICBSZXBsYWNlIHBrZy1jb25maWcgd2l0aCBwa2ctY29uZmlnLW5hdGl2ZS4KK2RvX2luc3RhbGxfYXBwZW5kX2NsYXNzLW5hdGl2ZSgpIHsKKyAgc2VkIC1lICdzLFBLR19DSEVDS19NT0RVTEVTKC4qKSwsZycgXAorICAgICAgLWUgJ3MsJFBLR19DT05GSUcscGtnLWNvbmZpZy1uYXRpdmUsZycgXAorICAgICAgLWkgJHtEfS8ke2RhdGFkaXJ9L2FjbG9jYWwvd2F5bGFuZC1zY2FubmVyLm00Cit9CisKK3N5c3Jvb3Rfc3RhZ2VfYWxsX2FwcGVuZF9jbGFzcy10YXJnZXQgKCkgeworCXJtICR7U1lTUk9PVF9ERVNURElSfS8ke2RhdGFkaXJ9L2FjbG9jYWwvd2F5bGFuZC1zY2FubmVyLm00CisJY3AgJHtTVEFHSU5HX0RBVEFESVJfTkFUSVZFfS9hY2xvY2FsL3dheWxhbmQtc2Nhbm5lci5tNCAke1NZU1JPT1RfREVTVERJUn0vJHtkYXRhZGlyfS9hY2xvY2FsLworfQorCitGSUxFU18ke1BOfSA9ICIke2xpYmRpcn0vKiR7U09MSUJTfSIKK0ZJTEVTXyR7UE59LWRldiArPSAiJHtiaW5kaXJ9ICR7ZGF0YWRpcn0vd2F5bGFuZCIKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3Mvd2F5bGFuZC93YXlsYW5kXzEuOS4wLmJiIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy93YXlsYW5kL3dheWxhbmRfMS45LjAuYmIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQxMmFjMTguLjAwMDAwMDAKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy93YXlsYW5kL3dheWxhbmRfMS45LjAuYmIKKysrIC9kZXYvbnVsbApAQCAtMSw0MSArMCwwIEBACi1TVU1NQVJZID0gIldheWxhbmQsIGEgcHJvdG9jb2wgYmV0d2VlbiBhIGNvbXBvc2l0b3IgYW5kIGNsaWVudHMiCi1ERVNDUklQVElPTiA9ICJXYXlsYW5kIGlzIGEgcHJvdG9jb2wgZm9yIGEgY29tcG9zaXRvciB0byB0YWxrIHRvIGl0cyBjbGllbnRzIFwKLWFzIHdlbGwgYXMgYSBDIGxpYnJhcnkgaW1wbGVtZW50YXRpb24gb2YgdGhhdCBwcm90b2NvbC4gVGhlIGNvbXBvc2l0b3IgY2FuIGJlIFwKLWEgc3RhbmRhbG9uZSBkaXNwbGF5IHNlcnZlciBydW5uaW5nIG9uIExpbnV4IGtlcm5lbCBtb2Rlc2V0dGluZyBhbmQgZXZkZXYgXAotaW5wdXQgZGV2aWNlcywgYW4gWCBhcHBsaWNhdGlvbiwgb3IgYSB3YXlsYW5kIGNsaWVudCBpdHNlbGYuIFRoZSBjbGllbnRzIGNhbiBcCi1iZSB0cmFkaXRpb25hbCBhcHBsaWNhdGlvbnMsIFggc2VydmVycyAocm9vdGxlc3Mgb3IgZnVsbHNjcmVlbikgb3Igb3RoZXIgXAotZGlzcGxheSBzZXJ2ZXJzLiIKLUhPTUVQQUdFID0gImh0dHA6Ly93YXlsYW5kLmZyZWVkZXNrdG9wLm9yZyIKLUxJQ0VOU0UgPSAiTUlUIgotTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9YjMxZDhmNTNiNmFhZjJiNDk4NWQ3ZGQ3ODEwYTcwZDEgXAotICAgICAgICAgICAgICAgICAgICBmaWxlOi8vc3JjL3dheWxhbmQtc2VydmVyLmM7ZW5kbGluZT0yNDttZDU9YjhlMDQ2MTY0YTc2NmJiMWVkZThiYTM4ZTlkY2Q3Y2UiCi0KLVNSQ19VUkkgPSAiaHR0cDovL3dheWxhbmQuZnJlZWRlc2t0b3Aub3JnL3JlbGVhc2VzLyR7QlBOfS0ke1BWfS50YXIueHoiCi1TUkNfVVJJW21kNXN1bV0gPSAiNWUxNDFiM2YyYTcwMDVkNmM4OWQ2ZjIzM2M4N2MzMTciCi1TUkNfVVJJW3NoYTI1NnN1bV0gPSAiOWM4NzcwNzIwYWEwMDM0NDc5NzM1ZjU4YTRkYzRjYTliMTcyZWNmZWRlMjhmNTEzNDMxMmUxMzViNzMwMWVmYSIKLQotRVhUUkFfT0VDT05GX2NsYXNzLW5hdGl2ZSA9ICItLWRpc2FibGUtZG9jdW1lbnRhdGlvbiAtLWRpc2FibGUtbGlicmFyaWVzIgotCi1pbmhlcml0IGF1dG90b29scyBwa2djb25maWcKLQotQkJDTEFTU0VYVEVORCA9ICJuYXRpdmUgbmF0aXZlc2RrIgotCi1ERVBFTkRTID0gImV4cGF0IGxpYmZmaSB3YXlsYW5kLW5hdGl2ZSIKLQotRVhUUkFfT0VDT05GID0gIi0tZGlzYWJsZS1kb2N1bWVudGF0aW9uIC0td2l0aC1ob3N0LXNjYW5uZXIiCi0KLSMgV2F5bGFuZCBpbnN0YWxscyBhIE00IG1hY3JvIGZvciBvdGhlciBwcm9qZWN0cyB0byB1c2UsIHdoaWNoIHVzZXMgdGhlIHRhcmdldAotIyBwa2ctY29uZmlnIHRvIGZpbmQgZmlsZXMuICBSZXBsYWNlIHBrZy1jb25maWcgd2l0aCBwa2ctY29uZmlnLW5hdGl2ZS4KLWRvX2luc3RhbGxfYXBwZW5kX2NsYXNzLW5hdGl2ZSgpIHsKLSAgc2VkIC1lICdzLFBLR19DSEVDS19NT0RVTEVTKC4qKSwsZycgXAotICAgICAgLWUgJ3MsJFBLR19DT05GSUcscGtnLWNvbmZpZy1uYXRpdmUsZycgXAotICAgICAgLWkgJHtEfS8ke2RhdGFkaXJ9L2FjbG9jYWwvd2F5bGFuZC1zY2FubmVyLm00Ci19Ci0KLXN5c3Jvb3Rfc3RhZ2VfYWxsX2FwcGVuZF9jbGFzcy10YXJnZXQgKCkgewotCXJtICR7U1lTUk9PVF9ERVNURElSfS8ke2RhdGFkaXJ9L2FjbG9jYWwvd2F5bGFuZC1zY2FubmVyLm00Ci0JY3AgJHtTVEFHSU5HX0RBVEFESVJfTkFUSVZFfS9hY2xvY2FsL3dheWxhbmQtc2Nhbm5lci5tNCAke1NZU1JPT1RfREVTVERJUn0vJHtkYXRhZGlyfS9hY2xvY2FsLwotfQotCi1GSUxFU18ke1BOfSA9ICIke2xpYmRpcn0vKiR7U09MSUJTfSIKLUZJTEVTXyR7UE59LWRldiArPSAiJHtiaW5kaXJ9ICR7ZGF0YWRpcn0vd2F5bGFuZCIKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3Mvd2F5bGFuZC93ZXN0b24taW5pdC5iYiBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3Mvd2F5bGFuZC93ZXN0b24taW5pdC5iYgppbmRleCA2NTM1NDFlLi4yOTFjZDE2IDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3dheWxhbmQvd2VzdG9uLWluaXQuYmIKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy93YXlsYW5kL3dlc3Rvbi1pbml0LmJiCkBAIC0zLDE2ICszLDE5IEBACiBMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly8ke0NPUkVCQVNFfS9MSUNFTlNFO21kNT00ZDkyY2QzNzNhYmRhMzkzN2MyYmM0N2ZiYzQ5ZDY5MCIKIAogU1JDX1VSSSA9ICJmaWxlOi8vaW5pdCBcCi0gICAgICAgICAgIGZpbGU6Ly93ZXN0b24uc2VydmljZSIKKyAgICAgICAgICAgZmlsZTovL3dlc3Rvbi5zZXJ2aWNlIFwKKyAgICAgICAgICAgZmlsZTovL3dlc3Rvbi1zdGFydCIKIAogUyA9ICIke1dPUktESVJ9IgogCiBkb19pbnN0YWxsKCkgewotCWluc3RhbGwgLWQgJHtEfS8ke3N5c2NvbmZkaXJ9L2luaXQuZAotCWluc3RhbGwgLW03NTUgJHtXT1JLRElSfS9pbml0ICR7RH0vJHtzeXNjb25mZGlyfS9pbml0LmQvd2VzdG9uCisJaW5zdGFsbCAtRG03NTUgJHtXT1JLRElSfS9pbml0ICR7RH0vJHtzeXNjb25mZGlyfS9pbml0LmQvd2VzdG9uCisJaW5zdGFsbCAtRG0wNjQ0ICR7V09SS0RJUn0vd2VzdG9uLnNlcnZpY2UgJHtEfSR7c3lzdGVtZF9zeXN0ZW1fdW5pdGRpcn0vd2VzdG9uLnNlcnZpY2UKIAotCWluc3RhbGwgLWQgJHtEfSR7c3lzdGVtZF9zeXN0ZW1fdW5pdGRpcn0KLQlpbnN0YWxsIC1tMDY0NCAke1dPUktESVJ9L3dlc3Rvbi5zZXJ2aWNlICR7RH0ke3N5c3RlbWRfc3lzdGVtX3VuaXRkaXJ9CisJIyBJbnN0YWxsIHdlc3Rvbi1zdGFydCBzY3JpcHQKKwlpbnN0YWxsIC1EbTc1NSAke1dPUktESVJ9L3dlc3Rvbi1zdGFydCAke0R9JHtiaW5kaXJ9L3dlc3Rvbi1zdGFydAorCXNlZCAtaSAncyxAREFUQURJUkAsJHtkYXRhZGlyfSxnJyAke0R9JHtiaW5kaXJ9L3dlc3Rvbi1zdGFydAorCXNlZCAtaSAncyxATE9DQUxTVEFURURJUkAsJHtsb2NhbHN0YXRlZGlyfSxnJyAke0R9JHtiaW5kaXJ9L3dlc3Rvbi1zdGFydAogfQogCiBpbmhlcml0IGFsbGFyY2ggdXBkYXRlLXJjLmQgZGlzdHJvX2ZlYXR1cmVzX2NoZWNrIHN5c3RlbWQKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3Mvd2F5bGFuZC93ZXN0b24taW5pdC9pbml0IGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy93YXlsYW5kL3dlc3Rvbi1pbml0L2luaXQKaW5kZXggMmU5MzhmNC4uZDNlODdjNiAxMDA2NDQKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy93YXlsYW5kL3dlc3Rvbi1pbml0L2luaXQKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy93YXlsYW5kL3dlc3Rvbi1pbml0L2luaXQKQEAgLTMxLDE0ICszMSw3IEBACiAgIHN0YXJ0KQogICAgICAgICAuIC9ldGMvcHJvZmlsZQogCi0gICAgICAgICMgVGhpcyBpcyBhbGwgYSBuYXN0eSBoYWNrCi0gICAgICAgIGlmIHRlc3QgLXogIiRYREdfUlVOVElNRV9ESVIiOyB0aGVuCi0gICAgICAgICAgICAgICAgZXhwb3J0IFhER19SVU5USU1FX0RJUj0vcnVuL3VzZXIvcm9vdAotICAgICAgICAgICAgICAgIG1rZGlyIC0tcGFyZW50cyAkWERHX1JVTlRJTUVfRElSCi0gICAgICAgICAgICAgICAgY2htb2QgMDcwMCAkWERHX1JVTlRJTUVfRElSCi0gICAgICAgIGZpCi0KLSAgICAgICAgb3BlbnZ0IC1zIHdlc3RvbiAtLSAkT1BUQVJHUworICAgICAgICB3ZXN0b24tc3RhcnQgLS0gJE9QVEFSR1MKICAgOzsKIAogICBzdG9wKQpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy93YXlsYW5kL3dlc3Rvbi1pbml0L3dlc3Rvbi1zdGFydCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3Mvd2F5bGFuZC93ZXN0b24taW5pdC93ZXN0b24tc3RhcnQKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uZTcyZmJhYQotLS0gL2Rldi9udWxsCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3Mvd2F5bGFuZC93ZXN0b24taW5pdC93ZXN0b24tc3RhcnQKQEAgLTAsMCArMSw2OSBAQAorIyEvYmluL3NoCisjIENvcHlyaWdodCAoQykgMjAxNiBPLlMuIFN5c3RlbXMgU29mdHdhcmUgTFREQS4KKyMgQ29weXJpZ2h0IChDKSAyMDE2IEZyZWVzY2FsZSBTZW1pY29uZHVjdG9yCisKK2V4cG9ydCBQQVRIPSIvc2JpbjovdXNyL3NiaW46L2JpbjovdXNyL2JpbiIKKwordXNhZ2UoKSB7CisgICAgY2F0IDw8RU9GCisgICAgJDAgWzxvcGVudnQgYXJndW1lbnRzPl0gWy0tIDx3ZXN0b24gb3B0aW9ucz5dCitFT0YKK30KKworIyMgTW9kdWxlIHN1cHBvcnQKK21vZHVsZXNfZGlyPUBEQVRBRElSQC93ZXN0b24tc3RhcnQKKworIyBBZGQgd2VzdG9uIGV4dHJhIGFyZ3VtZW50CithZGRfd2VzdG9uX2FyZ3VtZW50KCkgeworCXdlc3Rvbl9hcmdzPSIkd2VzdG9uX2FyZ3MgJDEiCit9CisKKyMgQWRkIG9wZW52dCBleHRyYSBhcmd1bWVudAorYWRkX29wZW52dF9hcmd1bWVudCgpIHsKKwlvcGVudnRfYXJncz0iJG9wZW52dF9hcmdzICQxIgorfQorCitpZiBbIC1uICIkV0FZTEFORF9ESVNQTEFZIiBdOyB0aGVuCisJZWNobyAiRVJST1I6IEEgV2F5bGFuZCBjb21wb3NpdG9yIGlzIGFscmVhZHkgcnVubmluZywgbmVzdGVkIFdlc3RvbiBpbnN0YW5jZSBpcyBub3Qgc3VwcG9ydGVkIHlldC4iCisJZXhpdCAxCitmaQoraWYgWyAtbiAiJERJU1BMQVkiIF07IHRoZW4KKwlsYXVuY2hlcj0id2VzdG9uIgorZWxzZQorCWxhdW5jaGVyPSJ3ZXN0b24tbGF1bmNoIC0tIgorZmkKKworb3BlbnZ0X2FyZ3M9Ii1zIgord2hpbGUgWyAtbiAiJDEiIF07IGRvCisJaWYgWyAiJDEiID0gIi0tIiBdOyB0aGVuCisJCXNoaWZ0CisJCWJyZWFrCisJZmkKKwlvcGVudnRfYXJncz0iJG9wZW52dF9hcmdzICQxIgorCXNoaWZ0Citkb25lCisKK3dlc3Rvbl9hcmdzPSQqCisKKyMgTG9hZCBhbmQgcnVuIG1vZHVsZXMKK2lmIFsgLWQgIiRtb2R1bGVzX2RpciIgXTsgdGhlbgorCWZvciBtIGluICIkbW9kdWxlc19kaXIiLyo7IGRvCisJCSMgU2tpcCBiYWNrdXAgZmlsZXMKKwkJaWYgWyAiYGVjaG8gJG0gfCBzZWQgLWUgJ3MvXH4kLy8nYCIgIT0gIiRtIiBdOyB0aGVuCisJCQljb250aW51ZQorCQlmaQorCisJCSMgcHJvY2VzcyBtb2R1bGUKKwkJLiAkbQorCWRvbmUKK2ZpCisKK2lmIHRlc3QgLXogIiRYREdfUlVOVElNRV9ESVIiOyB0aGVuCisgICAgZXhwb3J0IFhER19SVU5USU1FX0RJUj0vcnVuL3VzZXIvYGlkIC11YAorICAgIGlmICEgdGVzdCAtZCAiJFhER19SVU5USU1FX0RJUiI7IHRoZW4KKyAgICAgICAgbWtkaXIgLS1wYXJlbnRzICRYREdfUlVOVElNRV9ESVIKKyAgICAgICAgY2htb2QgMDcwMCAkWERHX1JVTlRJTUVfRElSCisgICAgZmkKK2ZpCisKK2V4ZWMgb3BlbnZ0ICRvcGVudnRfYXJncyAtLSAkbGF1bmNoZXIgJHdlc3Rvbl9hcmdzIC0tbG9nPUBMT0NBTFNUQVRFRElSQC9sb2cvd2VzdG9uLmxvZwpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy93YXlsYW5kL3dlc3Rvbi1pbml0L3dlc3Rvbi5zZXJ2aWNlIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy93YXlsYW5kL3dlc3Rvbi1pbml0L3dlc3Rvbi5zZXJ2aWNlCmluZGV4IDRmMWY3ZmYuLjY4OWNlNDEgMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3Mvd2F5bGFuZC93ZXN0b24taW5pdC93ZXN0b24uc2VydmljZQorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3dheWxhbmQvd2VzdG9uLWluaXQvd2VzdG9uLnNlcnZpY2UKQEAgLTEsMTQgKzEsMTEgQEAKIFtVbml0XQotRGVzY3JpcHRpb249V2VzdG9uIFdheWxhbmQgY29tcG9zaXRvciBzdGFydHVwCitEZXNjcmlwdGlvbj1XZXN0b24gV2F5bGFuZCBDb21wb3NpdG9yCiBSZXF1aXJlc01vdW50c0Zvcj0vcnVuCiAKIFtTZXJ2aWNlXQogVXNlcj1yb290CiBFbnZpcm9ubWVudEZpbGU9LS9ldGMvZGVmYXVsdC93ZXN0b24KLUVudmlyb25tZW50PSJYREdfUlVOVElNRV9ESVI9L3J1bi91c2VyL3Jvb3QiCi1FeGVjU3RhcnRQcmU9L2Jpbi9ta2RpciAtcCAvcnVuL3VzZXIvcm9vdAotRXhlY1N0YXJ0UHJlPS9iaW4vY2htb2QgMDcwMCAvcnVuL3VzZXIvcm9vdAotRXhlY1N0YXJ0PS91c3IvYmluL29wZW52dCAtdiAtZSAvdXNyL2Jpbi93ZXN0b24gLS0gJE9QVEFSR1MKK0V4ZWNTdGFydD0vdXNyL2Jpbi93ZXN0b24tc3RhcnQgLXYgLWUgLS0gJE9QVEFSR1MKIAogW0luc3RhbGxdCiBXYW50ZWRCeT1tdWx0aS11c2VyLnRhcmdldApkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy93YXlsYW5kL3dlc3Rvbi8wMDAxLWNvbmZpZ3VyZS5hYy1GaXgtd2F5bGFuZC1wcm90b2NvbHMtcGF0aC5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3Mvd2F5bGFuZC93ZXN0b24vMDAwMS1jb25maWd1cmUuYWMtRml4LXdheWxhbmQtcHJvdG9jb2xzLXBhdGgucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDAxMThkNwotLS0gL2Rldi9udWxsCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3Mvd2F5bGFuZC93ZXN0b24vMDAwMS1jb25maWd1cmUuYWMtRml4LXdheWxhbmQtcHJvdG9jb2xzLXBhdGgucGF0Y2gKQEAgLTAsMCArMSwzNCBAQAorRnJvbSAxY2ZjMTQzNGE1ZDM4NWE3NGRlNTkzZWM3NjAxNjc0ZGJhMzllMmZlIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogSnVzc2kgS3Vra29uZW4gPGp1c3NpLmt1a2tvbmVuQGludGVsLmNvbT4KK0RhdGU6IFdlZCwgMTEgTWF5IDIwMTYgMTY6MTY6MzAgKzAzMDAKK1N1YmplY3Q6IFtQQVRDSF0gY29uZmlndXJlLmFjOiBGaXggd2F5bGFuZC1wcm90b2NvbHMgcGF0aAorCitUaGUgd2F5bGFuZC1wcm90b2NvbHMgZGlyZWN0b3J5IGlzIHVzZWQgZHVyaW5nIGJ1aWxkOiBGaXggdGhlIHBhdGgKK3RvIHBvaW50IHRvIHN5c3Jvb3Qgc3BlY2lmaWVkIGluIHJlY2lwZS4KKworTm9ybWFsbHkgUEtHX0NPTkZJR19TWVNST09UX0RJUiBjb3VsZCBiZSB1c2VkIGluIGNvbmZpZ3VyZS5hYyBidXQgdGhhdAorYnJlYWtzIG11bHRpbGliIHdlc3RvbiBhcyBpdCB3b3VsZCBwb2ludCB0byBtdWx0aWxpYiBzeXNyb290IHdoZW4gdGhlCisoYWxsYXJjaCkgd2F5bGFuZC1wcm90b2NvbHMgaXMgYWN0dWFsbHkgaW4gdGhlIG1hY2hpbmUgc3lzcm9vdC4KKworU2lnbmVkLW9mZi1ieTogSnVzc2kgS3Vra29uZW4gPGp1c3NpLmt1a2tvbmVuQGludGVsLmNvbT4KK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbZW1iZWRkZWQgc3BlY2lmaWNdCistLS0KKyBjb25maWd1cmUuYWMgfCAyICstCisgMSBmaWxlIGNoYW5nZWQsIDEgaW5zZXJ0aW9uKCspLCAxIGRlbGV0aW9uKC0pCisKK2RpZmYgLS1naXQgYS9jb25maWd1cmUuYWMgYi9jb25maWd1cmUuYWMKK2luZGV4IGJjN2MzMjkuLjE1YTA1ZDMgMTAwNjQ0CistLS0gYS9jb25maWd1cmUuYWMKKysrKyBiL2NvbmZpZ3VyZS5hYworQEAgLTE4Nyw3ICsxODcsNyBAQCBQS0dfQ0hFQ0tfTU9EVUxFUyhMSUJJTlBVVF9CQUNLRU5ELCBbbGliaW5wdXQgPj0gMC44LjBdKQorIFBLR19DSEVDS19NT0RVTEVTKENPTVBPU0lUT1IsIFskQ09NUE9TSVRPUl9NT0RVTEVTXSkKKyAKKyBQS0dfQ0hFQ0tfTU9EVUxFUyhXQVlMQU5EX1BST1RPQ09MUywgW3dheWxhbmQtcHJvdG9jb2xzID49IDEuMl0sCistCQkgIFthY193YXlsYW5kX3Byb3RvY29sc19wa2dkYXRhZGlyPWAkUEtHX0NPTkZJRyAtLXZhcmlhYmxlPXBrZ2RhdGFkaXIgd2F5bGFuZC1wcm90b2NvbHNgXSkKKysJCSAgW2FjX3dheWxhbmRfcHJvdG9jb2xzX3BrZ2RhdGFkaXI9JHtXQVlMQU5EX1BST1RPQ09MU19TWVNST09UX0RJUn1gJFBLR19DT05GSUcgLS12YXJpYWJsZT1wa2dkYXRhZGlyIHdheWxhbmQtcHJvdG9jb2xzYF0pCisgQUNfU1VCU1QoV0FZTEFORF9QUk9UT0NPTFNfREFUQURJUiwgJGFjX3dheWxhbmRfcHJvdG9jb2xzX3BrZ2RhdGFkaXIpCisgCisgQUNfQVJHX0VOQUJMRSh3YXlsYW5kLWNvbXBvc2l0b3IsIFsgIC0tZW5hYmxlLXdheWxhbmQtY29tcG9zaXRvcl0sLAorLS0gCisyLjEuNAorCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3dheWxhbmQvd2VzdG9uLzAwMDEtc2hhcmVkLWluY2x1ZGUtc3RkaW50LmgtZm9yLWludDMyX3QucGF0Y2ggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3dheWxhbmQvd2VzdG9uLzAwMDEtc2hhcmVkLWluY2x1ZGUtc3RkaW50LmgtZm9yLWludDMyX3QucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTFlZjcyNwotLS0gL2Rldi9udWxsCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3Mvd2F5bGFuZC93ZXN0b24vMDAwMS1zaGFyZWQtaW5jbHVkZS1zdGRpbnQuaC1mb3ItaW50MzJfdC5wYXRjaApAQCAtMCwwICsxLDI4IEBACitGcm9tIGJhMDJiOGFiZTRlMmFmYWMyYmZiZjI1NTk5NzJkNTA1OWQ3NWEwNDEgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBKdXNzaSBLdWtrb25lbiA8anVzc2kua3Vra29uZW5AaW50ZWwuY29tPgorRGF0ZTogU2F0LCAxNiBKdWwgMjAxNiAyMjo1MDoxOSArMDMwMAorU3ViamVjdDogW1BBVENIIHdlc3Rvbl0gc2hhcmVkOiBpbmNsdWRlIHN0ZGludC5oIGZvciBpbnQzMl90CisKK1RoaXMgZml4ZXMgYnVpbGQgb24gbXVzbC4KKworU2lnbmVkLW9mZi1ieTogSnVzc2kgS3Vra29uZW4gPGp1c3NpLmt1a2tvbmVuQGludGVsLmNvbT4KK1Vwc3RyZWFtLVN0YXR1czogU3VibWl0dGVkCistLS0KKyBzaGFyZWQveGFsbG9jLmggfCAxICsKKyAxIGZpbGUgY2hhbmdlZCwgMSBpbnNlcnRpb24oKykKKworZGlmZiAtLWdpdCBhL3NoYXJlZC94YWxsb2MuaCBiL3NoYXJlZC94YWxsb2MuaAoraW5kZXggODVmY2NiNC4uNDg0ZGUyZCAxMDA2NDQKKy0tLSBhL3NoYXJlZC94YWxsb2MuaAorKysrIGIvc2hhcmVkL3hhbGxvYy5oCitAQCAtMzAsNiArMzAsNyBAQAorIGV4dGVybiAiQyIgeworICNlbmRpZgorIAorKyNpbmNsdWRlIDxzdGRpbnQuaD4KKyAjaW5jbHVkZSA8c3RkbGliLmg+CisgI2luY2x1ZGUgPHN0cmluZy5oPgorIAorLS0gCisyLjEuNAorCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3dheWxhbmQvd2VzdG9uLzAwMDEtd2VzdG9uLWxhdW5jaC1Qcm92aWRlLWEtZGVmYXVsdC12ZXJzaW9uLXRoYXQtZG9lc24tdC5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3Mvd2F5bGFuZC93ZXN0b24vMDAwMS13ZXN0b24tbGF1bmNoLVByb3ZpZGUtYS1kZWZhdWx0LXZlcnNpb24tdGhhdC1kb2Vzbi10LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU1NDIwMzYKLS0tIC9kZXYvbnVsbAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3dheWxhbmQvd2VzdG9uLzAwMDEtd2VzdG9uLWxhdW5jaC1Qcm92aWRlLWEtZGVmYXVsdC12ZXJzaW9uLXRoYXQtZG9lc24tdC5wYXRjaApAQCAtMCwwICsxLDE3MyBAQAorRnJvbSBkMDIyMjZiM2Q1ODcyYjE4NGMxZDUwYzdmNDcwNmFjOTQ2N2ZmYjgxIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogVG9tIEhvY2hzdGVpbiA8dG9tLmhvY2hzdGVpbkBueHAuY29tPgorRGF0ZTogRnJpLCAxNSBKdWwgMjAxNiAxMTowMDoxNSArMDMwMAorU3ViamVjdDogW1BBVENIXSB3ZXN0b24tbGF1bmNoOiBQcm92aWRlIGEgZGVmYXVsdCB2ZXJzaW9uIHRoYXQgZG9lc24ndCByZXF1aXJlCisgUEFNCisKK3dlc3Rvbi1sYXVuY2ggcmVxdWlyZXMgUEFNIGZvciBzdGFydGluZyB3ZXN0b24gYXMgYSBub24tcm9vdCB1c2VyLgorCitTaW5jZSBzdGFydGluZyB3ZXN0b24gYXMgcm9vdCBpcyBhIHZhbGlkIHVzZSBjYXNlIGJ5IGl0c2VsZiwgaWYKK1BBTSBpcyBub3QgYXZhaWxhYmxlLCBwcm92aWRlIGEgZGVmYXVsdCB2ZXJzaW9uIG9mIHdlc3Rvbi1sYXVuY2gKK3dpdGhvdXQgbm9uLXJvb3QtdXNlciBzdXBwb3J0LgorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworU2lnbmVkLW9mZi1ieTogVG9tIEhvY2hzdGVpbiA8dG9tLmhvY2hzdGVpbkBueHAuY29tPgorLS0tCisgY29uZmlndXJlLmFjICAgICAgICB8ICA5ICsrKysrKystLQorIHNyYy93ZXN0b24tbGF1bmNoLmMgfCAyMCArKysrKysrKysrKysrKysrKysrKworIDIgZmlsZXMgY2hhbmdlZCwgMjcgaW5zZXJ0aW9ucygrKSwgMiBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL2NvbmZpZ3VyZS5hYyBiL2NvbmZpZ3VyZS5hYworaW5kZXggMzJmZGRlNy4uMjQwOTY2ZiAxMDA2NDQKKy0tLSBhL2NvbmZpZ3VyZS5hYworKysrIGIvY29uZmlndXJlLmFjCitAQCAtNDE2LDEzICs0MTYsMTcgQEAgQUNfQVJHX0VOQUJMRShyZXNpemUtb3B0aW1pemF0aW9uLAorIEFTX0lGKFt0ZXN0ICJ4JGVuYWJsZV9yZXNpemVfb3B0aW1pemF0aW9uIiA9ICJ4eWVzIl0sCisgICAgICAgW0FDX0RFRklORShbVVNFX1JFU0laRV9QT09MXSwgWzFdLCBbVXNlIHJlc2l6ZSBtZW1vcnkgcG9vbCBhcyBhIHBlcmZvcm1hbmNlIG9wdGltaXphdGlvbl0pXSkKKyAKKytBQ19BUkdfV0lUSChwYW0sCisrICAgICAgICAgICAgQVNfSEVMUF9TVFJJTkcoWy0td2l0aC1wYW1dLCBbVXNlIFBBTV0pLAorKyAgICAgICAgICAgIFt1c2VfcGFtPSR3aXRodmFsXSwgW3VzZV9wYW09eWVzXSkKKyBBQ19BUkdfRU5BQkxFKHdlc3Rvbi1sYXVuY2gsIFsgIC0tZW5hYmxlLXdlc3Rvbi1sYXVuY2hdLCwgZW5hYmxlX3dlc3Rvbl9sYXVuY2g9eWVzKQorIEFNX0NPTkRJVElPTkFMKEJVSUxEX1dFU1RPTl9MQVVOQ0gsIHRlc3QgeCRlbmFibGVfd2VzdG9uX2xhdW5jaCA9PSB4eWVzKQorLWlmIHRlc3QgeCRlbmFibGVfd2VzdG9uX2xhdW5jaCA9PSB4eWVzOyB0aGVuCisraWYgdGVzdCB4JGVuYWJsZV93ZXN0b25fbGF1bmNoID0geHllcyAtYSB4JHVzZV9wYW0gPSB4eWVzOyB0aGVuCisgICBXRVNUT05fU0VBUkNIX0xJQlMoW1BBTV0sIFtwYW1dLCBbcGFtX29wZW5fc2Vzc2lvbl0sIFtoYXZlX3BhbT15ZXNdLCBbaGF2ZV9wYW09bm9dKQorICAgaWYgdGVzdCB4JGhhdmVfcGFtID09IHhubzsgdGhlbgorLSAgICBBQ19FUlJPUihbd2VzdG9uLWxhdW5jaCByZXF1aXJlcyBwYW1dKQorKyAgICBBQ19FUlJPUihbUEFNIHN1cHBvcnQgaXMgZXhwbGljaXRseSByZXF1ZXN0ZWQsIGJ1dCBsaWJwYW0gY291bGRuJ3QgYmUgZm91bmRdKQorICAgZmkKKysgIEFDX0RFRklORShbSEFWRV9QQU1dLCBbMV0sIFtEZWZpbmUgaWYgUEFNIGlzIGF2YWlsYWJsZV0pCisgZmkKKyAKKyBBTV9DT05ESVRJT05BTChIQVZFX1BBTkdPLCB0ZXN0ICJ4JGhhdmVfcGFuZ28iID0gInh5ZXMiKQorQEAgLTY3Myw2ICs2NzcsNyBAQCBBQ19NU0dfUkVTVUxUKFsKKyAJRW5hYmxlIGRldmVsb3BlciBkb2N1bWVudGF0aW9uCSR7ZW5hYmxlX2RldmRvY3N9CisgCisgCXdlc3Rvbi1sYXVuY2ggdXRpbGl0eQkJJHtlbmFibGVfd2VzdG9uX2xhdW5jaH0KKysJUEFNIHN1cHBvcnQJCQkke3VzZV9wYW19CisgCXN5c3RlbWQtbG9naW4gc3VwcG9ydAkJJHtoYXZlX3N5c3RlbWRfbG9naW59CisgCXN5c3RlbWQgbm90aWZ5IHN1cHBvcnQJCSR7ZW5hYmxlX3N5c3RlbWRfbm90aWZ5fQorIAorZGlmZiAtLWdpdCBhL3NyYy93ZXN0b24tbGF1bmNoLmMgYi9zcmMvd2VzdG9uLWxhdW5jaC5jCitpbmRleCBiOGIyYmEwLi5hODY1MDYxIDEwMDY0NAorLS0tIGEvc3JjL3dlc3Rvbi1sYXVuY2guYworKysrIGIvc3JjL3dlc3Rvbi1sYXVuY2guYworQEAgLTUxLDcgKzUxLDkgQEAKKyAKKyAjaW5jbHVkZSA8cHdkLmg+CisgI2luY2x1ZGUgPGdycC5oPgorKyNpZmRlZiBIQVZFX1BBTQorICNpbmNsdWRlIDxzZWN1cml0eS9wYW1fYXBwbC5oPgorKyNlbmRpZgorIAorICNpZmRlZiBIQVZFX1NZU1RFTURfTE9HSU4KKyAjaW5jbHVkZSA8c3lzdGVtZC9zZC1sb2dpbi5oPgorQEAgLTkzLDggKzk1LDEwIEBAIGRybVNldE1hc3RlcihpbnQgZHJtX2ZkKQorICNlbmRpZgorIAorIHN0cnVjdCB3ZXN0b25fbGF1bmNoIHsKKysjaWZkZWYgSEFWRV9QQU0KKyAJc3RydWN0IHBhbV9jb252IHBjOworIAlwYW1faGFuZGxlX3QgKnBoOworKyNlbmRpZgorIAlpbnQgdHR5OworIAlpbnQgdHR5bnI7CisgCWludCBzb2NrWzJdOworQEAgLTE4MSw2ICsxODUsNyBAQCB3ZXN0b25fbGF1bmNoX2FsbG93ZWQoc3RydWN0IHdlc3Rvbl9sYXVuY2ggKndsKQorIAlyZXR1cm4gZmFsc2U7CisgfQorIAorKyNpZmRlZiBIQVZFX1BBTQorIHN0YXRpYyBpbnQKKyBwYW1fY29udmVyc2F0aW9uX2ZuKGludCBtc2dfY291bnQsCisgCQkgICAgY29uc3Qgc3RydWN0IHBhbV9tZXNzYWdlICoqbWVzc2FnZXMsCitAQCAtMjIxLDYgKzIyNiw3IEBAIHNldHVwX3BhbShzdHJ1Y3Qgd2VzdG9uX2xhdW5jaCAqd2wpCisgCisgCXJldHVybiAwOworIH0KKysjZW5kaWYKKyAKKyBzdGF0aWMgaW50Cisgc2V0dXBfbGF1bmNoZXJfc29ja2V0KHN0cnVjdCB3ZXN0b25fbGF1bmNoICp3bCkKK0BAIC00MTQsNiArNDIwLDcgQEAgcXVpdChzdHJ1Y3Qgd2VzdG9uX2xhdW5jaCAqd2wsIGludCBzdGF0dXMpCisgCWNsb3NlKHdsLT5zaWduYWxmZCk7CisgCWNsb3NlKHdsLT5zb2NrWzBdKTsKKyAKKysjaWZkZWYgSEFWRV9QQU0KKyAJaWYgKHdsLT5uZXdfdXNlcikgeworIAkJZXJyID0gcGFtX2Nsb3NlX3Nlc3Npb24od2wtPnBoLCAwKTsKKyAJCWlmIChlcnIpCitAQCAtNDIxLDYgKzQyOCw3IEBAIHF1aXQoc3RydWN0IHdlc3Rvbl9sYXVuY2ggKndsLCBpbnQgc3RhdHVzKQorIAkJCQllcnIsIHBhbV9zdHJlcnJvcih3bC0+cGgsIGVycikpOworIAkJcGFtX2VuZCh3bC0+cGgsIGVycik7CisgCX0KKysjZW5kaWYKKyAKKyAJaWYgKGlvY3RsKHdsLT50dHksIEtEU0tCTVVURSwgMCkgJiYKKyAJICAgIGlvY3RsKHdsLT50dHksIEtEU0tCTU9ERSwgd2wtPmtiX21vZGUpKQorQEAgLTYwMCw2ICs2MDgsNyBAQCBzZXR1cF9zZXNzaW9uKHN0cnVjdCB3ZXN0b25fbGF1bmNoICp3bCkKKyAJc2V0ZW52KCJIT01FIiwgd2wtPnB3LT5wd19kaXIsIDEpOworIAlzZXRlbnYoIlNIRUxMIiwgd2wtPnB3LT5wd19zaGVsbCwgMSk7CisgCisrI2lmZGVmIEhBVkVfUEFNCisgCWVudiA9IHBhbV9nZXRlbnZsaXN0KHdsLT5waCk7CisgCWlmIChlbnYpIHsKKyAJCWZvciAoaSA9IDA7IGVudltpXTsgKytpKSB7CitAQCAtNjA4LDYgKzYxNyw3IEBAIHNldHVwX3Nlc3Npb24oc3RydWN0IHdlc3Rvbl9sYXVuY2ggKndsKQorIAkJfQorIAkJZnJlZShlbnYpOworIAl9CisrI2VuZGlmCisgfQorIAorIHN0YXRpYyB2b2lkCitAQCAtNjY1LDcgKzY3NSw5IEBAIHN0YXRpYyB2b2lkCisgaGVscChjb25zdCBjaGFyICpuYW1lKQorIHsKKyAJZnByaW50ZihzdGRlcnIsICJVc2FnZTogJXMgW2FyZ3MuLi5dIFstLSBbd2VzdG9uIGFyZ3MuLl1dXG4iLCBuYW1lKTsKKysjaWZkZWYgSEFWRV9QQU0KKyAJZnByaW50ZihzdGRlcnIsICIgIC11LCAtLXVzZXIgICAgICBTdGFydCBzZXNzaW9uIGFzIHNwZWNpZmllZCB1c2VybmFtZVxuIik7CisrI2VuZGlmCisgCWZwcmludGYoc3RkZXJyLCAiICAtdCwgLS10dHkgICAgICAgU3RhcnQgc2Vzc2lvbiBvbiBhbHRlcm5hdGl2ZSB0dHlcbiIpOworIAlmcHJpbnRmKHN0ZGVyciwgIiAgLXYsIC0tdmVyYm9zZSAgIEJlIHZlcmJvc2VcbiIpOworIAlmcHJpbnRmKHN0ZGVyciwgIiAgLWgsIC0taGVscCAgICAgIERpc3BsYXkgdGhpcyBoZWxwIG1lc3NhZ2VcbiIpOworQEAgLTY3OCw3ICs2OTAsOSBAQCBtYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pCisgCWludCBpLCBjOworIAljaGFyICp0dHkgPSBOVUxMOworIAlzdHJ1Y3Qgb3B0aW9uIG9wdHNbXSA9IHsKKysjaWZkZWYgSEFWRV9QQU0KKyAJCXsgInVzZXIiLCAgICByZXF1aXJlZF9hcmd1bWVudCwgTlVMTCwgJ3UnIH0sCisrI2VuZGlmCisgCQl7ICJ0dHkiLCAgICAgcmVxdWlyZWRfYXJndW1lbnQsIE5VTEwsICd0JyB9LAorIAkJeyAidmVyYm9zZSIsIG5vX2FyZ3VtZW50LCAgICAgICBOVUxMLCAndicgfSwKKyAJCXsgImhlbHAiLCAgICBub19hcmd1bWVudCwgICAgICAgTlVMTCwgJ2gnIH0sCitAQCAtNjkwLDkgKzcwNCwxMyBAQCBtYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pCisgCXdoaWxlICgoYyA9IGdldG9wdF9sb25nKGFyZ2MsIGFyZ3YsICJ1OnQ6OnZoIiwgb3B0cywgJmkpKSAhPSAtMSkgeworIAkJc3dpdGNoIChjKSB7CisgCQljYXNlICd1JzoKKysjaWZkZWYgSEFWRV9QQU0KKyAJCQl3bC5uZXdfdXNlciA9IG9wdGFyZzsKKyAJCQlpZiAoZ2V0dWlkKCkgIT0gMCkKKyAJCQkJZXJyb3IoMSwgMCwgIlBlcm1pc3Npb24gZGVuaWVkLiAtdSBhbGxvd2VkIGZvciByb290IG9ubHkiKTsKKysjZWxzZQorKwkJCWVycm9yKDEsIDAsICItdSBpcyB1bnN1cHBvcnRlZCBpbiB0aGlzIHdlc3Rvbi1sYXVuY2ggYnVpbGQiKTsKKysjZW5kaWYKKyAJCQlicmVhazsKKyAJCWNhc2UgJ3QnOgorIAkJCXR0eSA9IG9wdGFyZzsKK0BAIC03MzAsOCArNzQ4LDEwIEBAIG1haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKKyAJaWYgKHNldHVwX3R0eSgmd2wsIHR0eSkgPCAwKQorIAkJZXhpdChFWElUX0ZBSUxVUkUpOworIAorKyNpZmRlZiBIQVZFX1BBTQorIAlpZiAod2wubmV3X3VzZXIgJiYgc2V0dXBfcGFtKCZ3bCkgPCAwKQorIAkJZXhpdChFWElUX0ZBSUxVUkUpOworKyNlbmRpZgorIAorIAlpZiAoc2V0dXBfbGF1bmNoZXJfc29ja2V0KCZ3bCkgPCAwKQorIAkJZXhpdChFWElUX0ZBSUxVUkUpOworLS0gCisyLjEuNAorCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3dheWxhbmQvd2VzdG9uL2V4cGxpY2l0LWVuYWJsZS1kaXNhYmxlLXN5c3RlbWQucGF0Y2ggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3dheWxhbmQvd2VzdG9uL2V4cGxpY2l0LWVuYWJsZS1kaXNhYmxlLXN5c3RlbWQucGF0Y2gKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGE0MGVhZjEuLjAwMDAwMDAKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy93YXlsYW5kL3dlc3Rvbi9leHBsaWNpdC1lbmFibGUtZGlzYWJsZS1zeXN0ZW1kLnBhdGNoCisrKyAvZGV2L251bGwKQEAgLTEsNzAgKzAsMCBAQAotRnJvbSA4ZTFlZmNkNDBiM2JhZDgxYzgzNzQ0ZTJlMTIwZDcwYzJiNTY3ZWYyIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQotRnJvbTogRnJlZGVyaWNvIENhZGV0ZSA8ZnJlZGVyaWNvQGNhZGV0ZS5ldT4KLURhdGU6IE1vbiwgMjggU2VwIDIwMTUgMDA6MzA6MTAgKzAyMDAKLVN1YmplY3Q6IGNvbmZpZ3VyZS5hYzogYWRkIGV4cGxpY2l0IGVuYWJsZS9kaXNhYmxlIGZvciBzeXN0ZW1kLWxvZ2luIHN1cHBvcnQKLQotT3RoZXJ3aXNlLCBhdXRvLWVuYWJsZSBkZXBlbmRpbmcgb24gd2hldGhlciB0aGUgc3lzdGVtIGhhcyB0aGUgbmVjZXNzYXJ5Ci1saWJyYXJpZXMuCi0KLVtVcGRhdGVkIGhlbHAgdGV4dCBhcyBwZXIgcHEgc3VnZ2VzdGlvbiAtLSBid2hdCi0KLVJldmlld2VkLWJ5OiBCcnljZSBIYXJyaW5ndG9uIDxicnljZUBvc2cuc2Ftc3VuZy5jb20+Ci1SZXZpZXdlZC1ieTogUGVra2EgUGFhbGFuZW4gPHBla2thLnBhYWxhbmVuQGNvbGxhYm9yYS5jby51az4KLVRlc3RlZC1ieTogUGVra2EgUGFhbGFuZW4gPHBla2thLnBhYWxhbmVuQGNvbGxhYm9yYS5jby51az4KLQotVXBzdHJlYW0tU3RhdHVzOiBCYWNrcG9ydAotQmFja3BvcnRlZCBmcm9tIFdlc3RvbiBnaXQ6Ci1odHRwOi8vY2dpdC5mcmVlZGVza3RvcC5vcmcvd2F5bGFuZC93ZXN0b24vY29tbWl0Lz9pZD04ZTFlZmMKLQotU2lnbmVkLW9mZi1ieTogSm9zaHVhIExvY2sgPGpvc2h1YS5sb2NrQGNvbGxhYm9yYS5jby51az4KLQotZGlmZiAtLWdpdCBhL2NvbmZpZ3VyZS5hYyBiL2NvbmZpZ3VyZS5hYwotaW5kZXggYTljZDQyOS4uNjdlODBkMCAxMDA2NDQKLS0tLSBhL2NvbmZpZ3VyZS5hYwotKysrIGIvY29uZmlndXJlLmFjCi1AQCAtMzgwLDE4ICszODAsMzAgQEAgQUNfQVJHX0VOQUJMRShyZXNpemUtb3B0aW1pemF0aW9uLAotIEFTX0lGKFt0ZXN0ICJ4JGVuYWJsZV9yZXNpemVfb3B0aW1pemF0aW9uIiA9ICJ4eWVzIl0sCi0gICAgICAgW0FDX0RFRklORShbVVNFX1JFU0laRV9QT09MXSwgWzFdLCBbVXNlIHJlc2l6ZSBtZW1vcnkgcG9vbCBhcyBhIHBlcmZvcm1hbmNlIG9wdGltaXphdGlvbl0pXSkKLSAKLS1QS0dfQ0hFQ0tfTU9EVUxFUyhTWVNURU1EX0xPR0lOLAotLSAgICAgICAgICAgICAgICAgIFtsaWJzeXN0ZW1kID49IDIwOV0sCi0tICAgICAgICAgICAgICAgICAgW2hhdmVfc3lzdGVtZF9sb2dpbl8yMDk9eWVzO2hhdmVfc3lzdGVtZF9sb2dpbj15ZXNdLAotLSAgICAgICAgICAgICAgICAgIFtoYXZlX3N5c3RlbWRfbG9naW5fMjA5PW5vO2hhdmVfc3lzdGVtZF9sb2dpbj1ub10pCi0tCi0tIyBPbGRlciB2ZXJzaW9ucyBvZiBzeXN0ZW1kIHBhY2thZ2Ugc3lzdGVtZC1sb2dpbiBzZXBhcmF0ZWx5LiBGYWxsIGJhY2sgb24gdGhhdAotLUFTX0lGKFt0ZXN0IHgkaGF2ZV9zeXN0ZW1kX2xvZ2luICE9IHh5ZXNdLFsKLS0gICAgICBQS0dfQ0hFQ0tfTU9EVUxFUyhTWVNURU1EX0xPR0lOLAotLSAgICAgICAgICAgICAgICAgICAgICAgIFtsaWJzeXN0ZW1kLWxvZ2luID49IDE5OF0sCi0tICAgICAgICAgICAgICAgICAgICAgICAgW2hhdmVfc3lzdGVtZF9sb2dpbj15ZXNdLAotLSAgICAgICAgICAgICAgICAgICAgICAgIFtoYXZlX3N5c3RlbWRfbG9naW49bm9dKQotLSAgICAgIF0pCi0rQUNfQVJHX0VOQUJMRShzeXN0ZW1kLWxvZ2luLAotKyAgICAgICAgICAgICAgQVNfSEVMUF9TVFJJTkcoWy0tZW5hYmxlLXN5c3RlbWQtbG9naW5dLAotKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW0VuYWJsZSBsb2dpbmQgc3VwcG9ydF0pLCwKLSsgICAgICAgICAgICAgIGVuYWJsZV9zeXN0ZW1kX2xvZ2luPWF1dG8pCi0raWYgdGVzdCB4JGVuYWJsZV9zeXN0ZW1kX2xvZ2luICE9IHhubzsgdGhlbgotKyAgUEtHX0NIRUNLX01PRFVMRVMoU1lTVEVNRF9MT0dJTiwKLSsgICAgICAgICAgICAgICAgICAgIFtsaWJzeXN0ZW1kID49IDIwOV0sCi0rICAgICAgICAgICAgICAgICAgICBbaGF2ZV9zeXN0ZW1kX2xvZ2luXzIwOT15ZXM7aGF2ZV9zeXN0ZW1kX2xvZ2luPXllc10sCi0rICAgICAgICAgICAgICAgICAgICBbaGF2ZV9zeXN0ZW1kX2xvZ2luXzIwOT1ubztoYXZlX3N5c3RlbWRfbG9naW49bm9dKQotKwotKyAgIyBPbGRlciB2ZXJzaW9ucyBvZiBzeXN0ZW1kIHBhY2thZ2Ugc3lzdGVtZC1sb2dpbiBzZXBhcmF0ZWx5LiBGYWxsIGJhY2sgb24gdGhhdAotKyAgQVNfSUYoW3Rlc3QgeCRoYXZlX3N5c3RlbWRfbG9naW4gIT0geHllc10sWwotKyAgICAgICAgUEtHX0NIRUNLX01PRFVMRVMoU1lTVEVNRF9MT0dJTiwKLSsgICAgICAgICAgICAgICAgICAgICAgICAgIFtsaWJzeXN0ZW1kLWxvZ2luID49IDE5OF0sCi0rICAgICAgICAgICAgICAgICAgICAgICAgICBbaGF2ZV9zeXN0ZW1kX2xvZ2luPXllc10sCi0rICAgICAgICAgICAgICAgICAgICAgICAgICBbaGF2ZV9zeXN0ZW1kX2xvZ2luPW5vXSkKLSsgICAgICAgIF0pCi0rZWxzZQotKyAgaGF2ZV9zeXN0ZW1kX2xvZ2luPW5vCi0rZmkKLSsKLStpZiB0ZXN0ICJ4JGhhdmVfc3lzdGVtZF9sb2dpbiIgPSAieG5vIiAtYSAieCRlbmFibGVfc3lzdGVtZF9sb2dpbiIgPSAieHllcyI7IHRoZW4KLSsgIEFDX01TR19FUlJPUihbc3lzdGVtZC1sb2dpbiBzdXBwb3J0IGV4cGxpY2l0bHkgZW5hYmxlZCwgYnV0IGNhbid0IGZpbmQgbGlic3lzdGVtZD49MjA5IG9yIGxpYnN5c3RlbWQtbG9naW5dKQotK2ZpCi0gCi0gQVNfSUYoW3Rlc3QgIngkaGF2ZV9zeXN0ZW1kX2xvZ2luIiA9ICJ4eWVzIl0sCi0gICAgICAgW0FDX0RFRklORShbSEFWRV9TWVNURU1EX0xPR0lOXSwgWzFdLCBbSGF2ZSBzeXN0ZW1kLWxvZ2luXSldKQotLS0gCi1jZ2l0IHYwLjEwLjIKLQpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy93YXlsYW5kL3dlc3Rvbi9saWJzeXN0ZW1kLnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy93YXlsYW5kL3dlc3Rvbi9saWJzeXN0ZW1kLnBhdGNoCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyZDI4ZDU2Li4wMDAwMDAwCi0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3Mvd2F5bGFuZC93ZXN0b24vbGlic3lzdGVtZC5wYXRjaAorKysgL2Rldi9udWxsCkBAIC0xLDUzICswLDAgQEAKLUZyb20gNWViMDI1YTg2N2I0MmY4YmM3YmM3MzI3OWVhYzhkZTU4ZTUxYTEzZSBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKLUZyb206IEZyZWRlcmljbyBDYWRldGUgPGZyZWRlcmljb0BjYWRldGUuZXU+Ci1EYXRlOiBNb24sIDI4IFNlcCAyMDE1IDAwOjMwOjA5ICswMjAwCi1TdWJqZWN0OiBjb25maWd1cmUuYWM6IGFkZCBzdXBwb3J0IGZvciBuZXcgdmVyc2lvbnMgb2Ygc3lzdGVtZAotCi1TdGFydGluZyBmcm9tIHN5c3RlbWQgdmVyc2lvbiAyMDksIGEgc2luZ2xlIGxpYnN5c3RlbWQucGMgaXMgcHJvdmlkZWQuCi1Gb3IgcHJldmlvdXMgdmVyc2lvbnMsIGZhbGwgYmFjayBvbiBsaWJzeXN0ZW1kLWxvZ2luLnBjLgotCi1TaWduZWQtb2ZmLWJ5OiBGcmVkZXJpY28gQ2FkZXRlIDxmcmVkZXJpY29AY2FkZXRlLmV1PgotUmV2aWV3ZWQtYnk6IEJyeWNlIEhhcnJpbmd0b24gPGJyeWNlQG9zZy5zYW1zdW5nLmNvbT4KLVJldmlld2VkLWJ5OiBEZXJlayBGb3JlbWFuIDxkZXJla2ZAb3NnLnNhbXN1bmcuY29tPgotCi1VcHN0cmVhbS1TdGF0dXM6IEJhY2twb3J0Ci1CYWNrcG9ydGVkIGZyb20gV2VzdG9uIGdpdDoKLWh0dHA6Ly9jZ2l0LmZyZWVkZXNrdG9wLm9yZy93YXlsYW5kL3dlc3Rvbi9jb21taXQvP2lkPTVlYjAyNQotCi1TaWduZWQtb2ZmLWJ5OiBKb3NodWEgTG9jayA8am9zaHVhLmxvY2tAY29sbGFib3JhLmNvLnVrPgotCi1kaWZmIC0tZ2l0IGEvY29uZmlndXJlLmFjIGIvY29uZmlndXJlLmFjCi1pbmRleCAwNDUyOTFjLi5hOWNkNDI5IDEwMDY0NAotLS0tIGEvY29uZmlndXJlLmFjCi0rKysgYi9jb25maWd1cmUuYWMKLUBAIC0zODAsMTQgKzM4MCwyMyBAQCBBQ19BUkdfRU5BQkxFKHJlc2l6ZS1vcHRpbWl6YXRpb24sCi0gQVNfSUYoW3Rlc3QgIngkZW5hYmxlX3Jlc2l6ZV9vcHRpbWl6YXRpb24iID0gInh5ZXMiXSwKLSAgICAgICBbQUNfREVGSU5FKFtVU0VfUkVTSVpFX1BPT0xdLCBbMV0sIFtVc2UgcmVzaXplIG1lbW9yeSBwb29sIGFzIGEgcGVyZm9ybWFuY2Ugb3B0aW1pemF0aW9uXSldKQotIAotLVBLR19DSEVDS19NT0RVTEVTKFNZU1RFTURfTE9HSU4sIFtsaWJzeXN0ZW1kLWxvZ2luID49IDE5OF0sCi0tICAgICAgICAgICAgICAgICAgW2hhdmVfc3lzdGVtZF9sb2dpbj15ZXNdLCBbaGF2ZV9zeXN0ZW1kX2xvZ2luPW5vXSkKLStQS0dfQ0hFQ0tfTU9EVUxFUyhTWVNURU1EX0xPR0lOLAotKyAgICAgICAgICAgICAgICAgIFtsaWJzeXN0ZW1kID49IDIwOV0sCi0rICAgICAgICAgICAgICAgICAgW2hhdmVfc3lzdGVtZF9sb2dpbl8yMDk9eWVzO2hhdmVfc3lzdGVtZF9sb2dpbj15ZXNdLAotKyAgICAgICAgICAgICAgICAgIFtoYXZlX3N5c3RlbWRfbG9naW5fMjA5PW5vO2hhdmVfc3lzdGVtZF9sb2dpbj1ub10pCi0rCi0rIyBPbGRlciB2ZXJzaW9ucyBvZiBzeXN0ZW1kIHBhY2thZ2Ugc3lzdGVtZC1sb2dpbiBzZXBhcmF0ZWx5LiBGYWxsIGJhY2sgb24gdGhhdAotK0FTX0lGKFt0ZXN0IHgkaGF2ZV9zeXN0ZW1kX2xvZ2luICE9IHh5ZXNdLFsKLSsgICAgICBQS0dfQ0hFQ0tfTU9EVUxFUyhTWVNURU1EX0xPR0lOLAotKyAgICAgICAgICAgICAgICAgICAgICAgIFtsaWJzeXN0ZW1kLWxvZ2luID49IDE5OF0sCi0rICAgICAgICAgICAgICAgICAgICAgICAgW2hhdmVfc3lzdGVtZF9sb2dpbj15ZXNdLAotKyAgICAgICAgICAgICAgICAgICAgICAgIFtoYXZlX3N5c3RlbWRfbG9naW49bm9dKQotKyAgICAgIF0pCi0rCi0gQVNfSUYoW3Rlc3QgIngkaGF2ZV9zeXN0ZW1kX2xvZ2luIiA9ICJ4eWVzIl0sCi0gICAgICAgW0FDX0RFRklORShbSEFWRV9TWVNURU1EX0xPR0lOXSwgWzFdLCBbSGF2ZSBzeXN0ZW1kLWxvZ2luXSldKQotIEFNX0NPTkRJVElPTkFMKEhBVkVfU1lTVEVNRF9MT0dJTiwgdGVzdCAieCRoYXZlX3N5c3RlbWRfbG9naW4iID0gInh5ZXMiKQotIAotLVBLR19DSEVDS19NT0RVTEVTKFNZU1RFTURfTE9HSU5fMjA5LCBbbGlic3lzdGVtZC1sb2dpbiA+PSAyMDldLAotLSAgICAgICAgICAgICAgICAgIFtoYXZlX3N5c3RlbWRfbG9naW5fMjA5PXllc10sIFtoYXZlX3N5c3RlbWRfbG9naW5fMjA5PW5vXSkKLSBBU19JRihbdGVzdCAieCRoYXZlX3N5c3RlbWRfbG9naW5fMjA5IiA9ICJ4eWVzIl0sCi0gICAgICAgW0FDX0RFRklORShbSEFWRV9TWVNURU1EX0xPR0lOXzIwOV0sIFsxXSwgW0hhdmUgc3lzdGVtZC1sb2dpbiA+PSAyMDldKV0pCi0gCi0tLSAKLWNnaXQgdjAuMTAuMgotCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3dheWxhbmQvd2VzdG9uL21ha2UtbGNtcy1leHBsaWNpdGx5LWNvbmZpZ3VyYWJsZS5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3Mvd2F5bGFuZC93ZXN0b24vbWFrZS1sY21zLWV4cGxpY2l0bHktY29uZmlndXJhYmxlLnBhdGNoCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzNWU2ZDZmLi4wMDAwMDAwCi0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3Mvd2F5bGFuZC93ZXN0b24vbWFrZS1sY21zLWV4cGxpY2l0bHktY29uZmlndXJhYmxlLnBhdGNoCisrKyAvZGV2L251bGwKQEAgLTEsNDMgKzAsMCBAQAotd2VzdG9uLTEuNS4wL2NvbmZpZ3VyZS5hYzogbWFrZSBsY21zIGV4cGxpY2l0bHkgY29uZmlndXJhYmxlCi0KLVRoZSBsY21zIHBhY2thZ2UgaXMgb3V0c2lkZSBvZiBvcGVuZW1iZWRkZWQtY29yZSwgc28gbWFrZSBpdAotZXhwbGljaXRseSBjb25maWd1cmFibGUuIE1ha2UgaXQgZGV0ZXJtaW5pc3RpYywgc28gdGhhdCBpZiBsY21zCi1kZXBlbmRlbmNpZXMgYXJlIG1pc3NpbmcsIGF1dG9jb25mIHRocm93cyBhIGZhdGFsIGVycm9yLiBGb2xsb3cKLXVwc3RyZWFtIHN0eWxlIHRvIG1ha2UgaXQgbW9yZSBsaWtlbHkgdG8gYmUgbWVyZ2VkLgotCi1VcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKLQotSW5kZXg6IHdlc3Rvbi0xLjUuMC9jb25maWd1cmUuYWMKLT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tLSB3ZXN0b24tMS41LjAub3JpZy9jb25maWd1cmUuYWMKLSsrKyB3ZXN0b24tMS41LjAvY29uZmlndXJlLmFjCi1AQCAtNDkxLDEyICs0OTEsMjQgQEAgQUNfQVJHX0VOQUJMRShkZW1vLWNsaWVudHMtaW5zdGFsbCwKLSAJCQkgICAgIGVuYWJsZV9kZW1vX2NsaWVudHNfaW5zdGFsbD1ubykKLSBBTV9DT05ESVRJT05BTChJTlNUQUxMX0RFTU9fQ0xJRU5UUywgW3Rlc3QgIngkZW5hYmxlX2RlbW9fY2xpZW50c19pbnN0YWxsIiA9ICJ4eWVzIl0pCi0gCi0tUEtHX0NIRUNLX01PRFVMRVMoTENNUywgbGNtczIsCi0tICAgICAgICAgICAgICAgICAgW2hhdmVfbGNtcz15ZXNdLCBbaGF2ZV9sY21zPW5vXSkKLS1pZiB0ZXN0ICJ4JGhhdmVfbGNtcyIgPSB4eWVzOyB0aGVuCi0tICAgICAgIEFDX0RFRklORShIQVZFX0xDTVMsIDEsIFtIYXZlIGxjbXMgc3VwcG9ydF0pCi0rQUNfQVJHX0VOQUJMRShsY21zLAotKyAgICAgICAgICAgICAgQVNfSEVMUF9TVFJJTkcoWy0tZGlzYWJsZS1sY21zXSwKLSsgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtEaXNhYmxlIGxjbXMgc3VwcG9ydF0pLCwKLSsgICAgICAgICAgICAgIGVuYWJsZV9sY21zPWF1dG8pCi0rQU1fQ09ORElUSU9OQUwoSEFWRV9MQ01TLCBbdGVzdCAieCRlbmFibGVfbGNtcyIgPSB4eWVzXSkKLStpZiB0ZXN0ICJ4JGVuYWJsZV9sY21zIiAhPSAieG5vIjsgdGhlbgotKyAgICAgICAgUEtHX0NIRUNLX01PRFVMRVMoTENNUywgCi0rICAgICAgICAgICAgICAgICAgICAgICAgIGxjbXMyLAotKyAgICAgICAgICAgICAgICAgICAgICAgICBbaGF2ZV9sY21zPXllc10sCi0rICAgICAgICAgICAgICAgICAgICAgICAgIFtoYXZlX2xjbXM9bm9dKQotKyAgICAgICAgaWYgdGVzdCAieCRoYXZlX2xjbXMiID0gInhubyIgLWEgIngkZW5hYmxlX2xjbXMiID0gInh5ZXMiOyB0aGVuCi0rICAgICAgICAgIEFDX01TR19FUlJPUihbbGNtcyBzdXBwb3J0IGV4cGxpY2l0bHkgcmVxdWVzdGVkLCBidXQgbGNtcyBjb3VsZG4ndCBiZSBmb3VuZF0pCi0rICAgICAgICBmaQotKyAgICAgICAgaWYgdGVzdCAieCRoYXZlX2xjbXMiID0gInh5ZXMiOyB0aGVuCi0rICAgICAgICAgICAgICAgIGVuYWJsZV9sY21zPXllcwotKyAgICAgICAgICAgICAgICBBQ19ERUZJTkUoSEFWRV9MQ01TLCAxLCBbSGF2ZSBsY21zIHN1cHBvcnRdKQotKyAgICAgICAgZmkKLSBmaQotLUFNX0NPTkRJVElPTkFMKEhBVkVfTENNUywgW3Rlc3QgIngkaGF2ZV9sY21zIiA9IHh5ZXNdKQotIAotIEFDX1BBVEhfUFJPRyhbd2F5bGFuZF9zY2FubmVyXSwgW3dheWxhbmQtc2Nhbm5lcl0pCi0gaWYgdGVzdCB4JHdheWxhbmRfc2Nhbm5lciA9IHg7IHRoZW4KZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3Mvd2F5bGFuZC93ZXN0b24vbWFrZS1saWJ3ZWJwLWV4cGxpY2l0bHktY29uZmlndXJhYmxlLnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy93YXlsYW5kL3dlc3Rvbi9tYWtlLWxpYndlYnAtZXhwbGljaXRseS1jb25maWd1cmFibGUucGF0Y2gKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGFkMDdkNGYuLjAwMDAwMDAKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy93YXlsYW5kL3dlc3Rvbi9tYWtlLWxpYndlYnAtZXhwbGljaXRseS1jb25maWd1cmFibGUucGF0Y2gKKysrIC9kZXYvbnVsbApAQCAtMSwzNyArMCwwIEBACi0KLVRoZSBsaWJ3ZWJwIHBhY2thZ2UgaXMgb3V0c2lkZSBvZiBvcGVuZW1iZWRkZWQtY29yZSwgc28gbWFrZSBpdAotZXhwbGljaXRseSBjb25maWd1cmFibGUuIE1ha2UgaXQgZGV0ZXJtaW5pc3RpYywgc28gdGhhdCBpZiBsaWJ3ZWJwIAotZGVwZW5kZW5jaWVzIGFyZSBtaXNzaW5nLCBhdXRvY29uZiB0aHJvd3MgYSBmYXRhbCBlcnJvci4KLQotVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCi0KLUluZGV4OiB3ZXN0b24tMS41LjAvY29uZmlndXJlLmFjCi09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLS0gd2VzdG9uLTEuNS4wLm9yaWcvY29uZmlndXJlLmFjCi0rKysgd2VzdG9uLTEuNS4wL2NvbmZpZ3VyZS5hYwotQEAgLTI2OCw5ICsyNjgsMjIgQEAgZmkKLSAKLSBQS0dfQ0hFQ0tfTU9EVUxFUyhQSVhNQU4sIFtwaXhtYW4tMV0pCi0gUEtHX0NIRUNLX01PRFVMRVMoUE5HLCBbbGlicG5nXSkKLS1QS0dfQ0hFQ0tfTU9EVUxFUyhXRUJQLCBbbGlid2VicF0sIFtoYXZlX3dlYnA9eWVzXSwgW2hhdmVfd2VicD1ub10pCi0tQVNfSUYoW3Rlc3QgIngkaGF2ZV93ZWJwIiA9ICJ4eWVzIl0sCi0tICAgICAgW0FDX0RFRklORShbSEFWRV9XRUJQXSwgWzFdLCBbSGF2ZSB3ZWJwXSldKQotK0FDX0FSR19FTkFCTEUod2VicCwKLSsgICAgICAgICAgICAgIEFTX0hFTFBfU1RSSU5HKFstLWRpc2FibGUtd2VicF0sCi0rICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbRGlzYWJsZSBsaWJ3ZWJwIHN1cHBvcnRdKSwsCi0rICAgICAgICAgICAgICBlbmFibGVfd2VicD1hdXRvKQotK0FNX0NPTkRJVElPTkFMKEhBVkVfV0VCUCwgW3Rlc3QgIngkZW5hYmxlX3dlYnAiID0geHllc10pCi0rQVNfSUYoW3Rlc3QgIngkZW5hYmxlX3dlYnAiICE9ICJ4bm8iXSwKLSsgICAgUEtHX0NIRUNLX01PRFVMRVMoV0VCUCwKLSsgICAgICAgICAgICAgICAgICAgICBbbGlid2VicF0sCi0rICAgICAgICAgICAgICAgICAgICAgW2hhdmVfd2VicD15ZXNdLAotKyAgICAgICAgICAgICAgICAgICAgIFtoYXZlX3dlYnA9bm9dKQotKyAgICBBU19JRihbdGVzdCAieCRoYXZlX3dlYnAiID0gInhubyIgLWEgIngkZW5hYmxlX3dlYnAiID0gInh5ZXMiXSwKLSsgICAgICAgIEFDX01TR19FUlJPUihbbGlid2VicCBzdXBwb3J0IGV4cGxpY2l0bHkgcmVxdWVzdCwgYnV0IGxpcHdlYnAgY291bGQgbm90IGJlIGZvdW5kXSkpCi0rICAgIEFTX0lGKFt0ZXN0ICJ4JGhhdmVfd2VicCIgPSAieHllcyJdLAotKyAgICAgICAgW2VuYWJsZV93ZWJwPXllc10KLSsgICAgICAgIFtBQ19ERUZJTkUoW0hBVkVfV0VCUF0sIFsxXSwgW0hhdmUgd2VicF0pXSkKLSspCi0gCi0gQUNfQVJHX0VOQUJMRSh2YWFwaS1yZWNvcmRlciwgWyAgLS1lbmFibGUtdmFhcGktcmVjb3JkZXJdLCwKLSAJICAgICAgZW5hYmxlX3ZhYXBpX3JlY29yZGVyPWF1dG8pCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3dheWxhbmQvd2VzdG9uL21ha2Utd2VzdG9uLWxhdW5jaC1leGl0LWZvci11bnJlY29nbml6ZWQtb3B0aW9uLnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy93YXlsYW5kL3dlc3Rvbi9tYWtlLXdlc3Rvbi1sYXVuY2gtZXhpdC1mb3ItdW5yZWNvZ25pemVkLW9wdGlvbi5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wYzQwOGE0Ci0tLSAvZGV2L251bGwKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy93YXlsYW5kL3dlc3Rvbi9tYWtlLXdlc3Rvbi1sYXVuY2gtZXhpdC1mb3ItdW5yZWNvZ25pemVkLW9wdGlvbi5wYXRjaApAQCAtMCwwICsxLDMzIEBACitGcm9tIGU4YjYxNTI1MGY3MDBmNzg1NGI0MjNhYWFmMGEwYWVlYTkyYzA1YTkgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBUb20gSG9jaHN0ZWluIDx0b20uaG9jaHN0ZWluQG54cC5jb20+CitEYXRlOiBTYXQsIDcgTWF5IDIwMTYgMDg6NTE6NTggLTAzMDAKK1N1YmplY3Q6IFtQQVRDSF0gd2VzdG9uLWxhdW5jaDogSGFuZGxlIGludmFsaWQgY29tbWFuZCBsaW5lIG9wdGlvbnMKK09yZ2FuaXphdGlvbjogTy5TLiBTeXN0ZW1zIFNvZnR3YXJlIExUREEuCisKK0V4aXQgdGhlIHByb2dyYW0gaWYgYW4gdW5yZWNvZ25pemVkIGNvbW1hbmQgbGluZSBvcHRpb24gaXMgZm91bmQuCisKK1Vwc3RyZWFtLVN0YXR1czogU3VibWl0dGVkCisKK1NpZ25lZC1vZmYtYnk6IFRvbSBIb2Noc3RlaW4gPHRvbS5ob2Noc3RlaW5AbnhwLmNvbT4KK1NpZ25lZC1vZmYtYnk6IE90YXZpbyBTYWx2YWRvciA8b3RhdmlvQG9zc3lzdGVtcy5jb20uYnI+CistLS0KKworIHNyYy93ZXN0b24tbGF1bmNoLmMgfCAyICsrCisgMSBmaWxlIGNoYW5nZWQsIDIgaW5zZXJ0aW9ucygrKQorCitkaWZmIC0tZ2l0IGEvc3JjL3dlc3Rvbi1sYXVuY2guYyBiL3NyYy93ZXN0b24tbGF1bmNoLmMKK2luZGV4IGI4ZGZiMTcuLjk5ODdkOGUgMTAwNjQ0CistLS0gYS9zcmMvd2VzdG9uLWxhdW5jaC5jCisrKysgYi9zcmMvd2VzdG9uLWxhdW5jaC5jCitAQCAtNzAzLDYgKzcwMyw4IEBAIG1haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKKyAJCWNhc2UgJ2gnOgorIAkJCWhlbHAoIndlc3Rvbi1sYXVuY2giKTsKKyAJCQlleGl0KEVYSVRfRkFJTFVSRSk7CisrCQlkZWZhdWx0OgorKwkJCWV4aXQoRVhJVF9GQUlMVVJFKTsKKyAJCX0KKyAJfQorIAorLS0gCisyLjguMgorCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3dheWxhbmQvd2VzdG9uL3h3YXlsYW5kLndlc3Rvbi1zdGFydCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3Mvd2F5bGFuZC93ZXN0b24veHdheWxhbmQud2VzdG9uLXN0YXJ0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI0ODNjOTcKLS0tIC9kZXYvbnVsbAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3dheWxhbmQvd2VzdG9uL3h3YXlsYW5kLndlc3Rvbi1zdGFydApAQCAtMCwwICsxLDcgQEAKKyMhL2Jpbi9zaAorCitpZiB0eXBlIFh3YXlsYW5kICA+L2Rldi9udWxsIDI+L2Rldi9udWxsOyB0aGVuCisJbWtkaXIgLXAgL3RtcC8uWDExLXVuaXgKKworCWFkZF93ZXN0b25fYXJndW1lbnQgIi0tbW9kdWxlcz14d2F5bGFuZC5zbyIKK2ZpCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3dheWxhbmQvd2VzdG9uXzEuMTEuMC5iYiBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3Mvd2F5bGFuZC93ZXN0b25fMS4xMS4wLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNhZDMwOWQKLS0tIC9kZXYvbnVsbAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3dheWxhbmQvd2VzdG9uXzEuMTEuMC5iYgpAQCAtMCwwICsxLDExNyBAQAorU1VNTUFSWSA9ICJXZXN0b24sIGEgV2F5bGFuZCBjb21wb3NpdG9yIgorREVTQ1JJUFRJT04gPSAiV2VzdG9uIGlzIHRoZSByZWZlcmVuY2UgaW1wbGVtZW50YXRpb24gb2YgYSBXYXlsYW5kIGNvbXBvc2l0b3IiCitIT01FUEFHRSA9ICJodHRwOi8vd2F5bGFuZC5mcmVlZGVza3RvcC5vcmciCitMSUNFTlNFID0gIk1JVCIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PWQ3OWVlOWU2NmJiMGY5NWQzMzg2YTdhY2FlNzgwYjcwIFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL3NyYy9jb21wb3NpdG9yLmM7ZW5kbGluZT0yMzttZDU9MWQ1MzVmZWQyNjZjZjM5ZjZkOGMwNjQ3ZjUyYWMzMzEiCisKK1NSQ19VUkkgPSAiaHR0cHM6Ly93YXlsYW5kLmZyZWVkZXNrdG9wLm9yZy9yZWxlYXNlcy8ke0JQTn0tJHtQVn0udGFyLnh6IFwKKyAgICAgICAgICAgZmlsZTovL3dlc3Rvbi5wbmcgXAorICAgICAgICAgICBmaWxlOi8vd2VzdG9uLmRlc2t0b3AgXAorICAgICAgICAgICBmaWxlOi8vMDAwMS1tYWtlLWVycm9yLXBvcnRhYmxlLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovLzAwMDEtY29uZmlndXJlLmFjLUZpeC13YXlsYW5kLXByb3RvY29scy1wYXRoLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovLzAwMDEtc2hhcmVkLWluY2x1ZGUtc3RkaW50LmgtZm9yLWludDMyX3QucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8veHdheWxhbmQud2VzdG9uLXN0YXJ0IFwKKyAgICAgICAgICAgZmlsZTovL21ha2Utd2VzdG9uLWxhdW5jaC1leGl0LWZvci11bnJlY29nbml6ZWQtb3B0aW9uLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovLzAwMDEtd2VzdG9uLWxhdW5jaC1Qcm92aWRlLWEtZGVmYXVsdC12ZXJzaW9uLXRoYXQtZG9lc24tdC5wYXRjaCBcCisiCitTUkNfVVJJW21kNXN1bV0gPSAiYmM2ZjkwYTIwMzkxNjM4MDRhZWNmYTY2M2I2OWM0YzIiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiMDVlMDg2ZTlmMTg2YTA2ODQzYjlmN2E1ZTFhYmYxOTM0N2IxYTZlNGJlMjZkN2U3NDkyN2FiYzE3YjZiNzEyNSIKKworaW5oZXJpdCBhdXRvdG9vbHMgcGtnY29uZmlnIHVzZXJhZGQgZGlzdHJvX2ZlYXR1cmVzX2NoZWNrCisjIGRlcGVuZHMgb24gdmlydHVhbC9lZ2wKK1JFUVVJUkVEX0RJU1RST19GRUFUVVJFUyA9ICJvcGVuZ2wiCisKK0RFUEVORFMgPSAibGlieGtiY29tbW9uIGdkay1waXhidWYgcGl4bWFuIGNhaXJvIGdsaWItMi4wIGpwZWciCitERVBFTkRTICs9ICJ3YXlsYW5kIHdheWxhbmQtcHJvdG9jb2xzIGxpYmlucHV0IHZpcnR1YWwvZWdsIHBhbmdvIHdheWxhbmQtbmF0aXZlIgorCitFWFRSQV9PRUNPTkYgPSAiLS1lbmFibGUtc2V0dWlkLWluc3RhbGwgXAorICAgICAgICAgICAgICAgIC0tZGlzYWJsZS1ycGktY29tcG9zaXRvciBcCisgICAgICAgICAgICAgICAgLS1kaXNhYmxlLXJkcC1jb21wb3NpdG9yIFwKKyAgICAgICAgICAgICAgICBXQVlMQU5EX1BST1RPQ09MU19TWVNST09UX0RJUj0ke1NUQUdJTkdfRElSfS8ke01BQ0hJTkV9IFwKKyAgICAgICAgICAgICAgICAiCitFWFRSQV9PRUNPTkZbdmFyZGVwc2V4Y2x1ZGVdID0gIk1BQ0hJTkUiCisKK0VYVFJBX09FQ09ORl9hcHBlbmRfcWVtdXg4NiA9ICJcCisJCVdFU1RPTl9OQVRJVkVfQkFDS0VORD1mYmRldi1iYWNrZW5kLnNvIFwKKwkJIgorRVhUUkFfT0VDT05GX2FwcGVuZF9xZW11eDg2LTY0ID0gIlwKKwkJV0VTVE9OX05BVElWRV9CQUNLRU5EPWZiZGV2LWJhY2tlbmQuc28gXAorCQkiCitQQUNLQUdFQ09ORklHID8/PSAiJHtAYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsICd3YXlsYW5kJywgJ2ttcyBmYmRldiB3YXlsYW5kIGVnbCcsICcnLCBkKX0gXAorICAgICAgICAgICAgICAgICAgICR7QGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCAneDExJywgJ3gxMScsICcnLCBkKX0gXAorICAgICAgICAgICAgICAgICAgICR7QGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCAneDExIHdheWxhbmQnLCAneHdheWxhbmQnLCAnJywgZCl9IFwKKyAgICAgICAgICAgICAgICAgICAke0BiYi51dGlscy5jb250YWlucygnRElTVFJPX0ZFQVRVUkVTJywgJ3BhbScsICdwYW0nLCAnJywgZCl9IFwKKyAgICAgICAgICAgICAgICAgICAke0BiYi51dGlscy5jb250YWlucygnRElTVFJPX0ZFQVRVUkVTJywgJ3N5c3RlbWQnLCAnc3lzdGVtZCcsICcnLCBkKX0gXAorICAgICAgICAgICAgICAgICAgIGNsaWVudHMgbGF1bmNoIgorIworIyBDb21wb3NpdG9yIGNob2ljZXMKKyMKKyMgV2VzdG9uIG9uIEtNUworUEFDS0FHRUNPTkZJR1trbXNdID0gIi0tZW5hYmxlLWRybS1jb21wb3NpdG9yLC0tZGlzYWJsZS1kcm0tY29tcG9zaXRvcixkcm0gdWRldiB2aXJ0dWFsL21lc2EgbXRkZXYiCisjIFdlc3RvbiBvbiBXYXlsYW5kIChuZXN0ZWQgV2VzdG9uKQorUEFDS0FHRUNPTkZJR1t3YXlsYW5kXSA9ICItLWVuYWJsZS13YXlsYW5kLWNvbXBvc2l0b3IsLS1kaXNhYmxlLXdheWxhbmQtY29tcG9zaXRvcix2aXJ0dWFsL21lc2EiCisjIFdlc3RvbiBvbiBYMTEKK1BBQ0tBR0VDT05GSUdbeDExXSA9ICItLWVuYWJsZS14MTEtY29tcG9zaXRvciwtLWRpc2FibGUteDExLWNvbXBvc2l0b3IsdmlydHVhbC9saWJ4MTEgbGlieGNiIGxpYnhjYiBsaWJ4Y3Vyc29yIGNhaXJvIgorIyBIZWFkbGVzcyBXZXN0b24KK1BBQ0tBR0VDT05GSUdbaGVhZGxlc3NdID0gIi0tZW5hYmxlLWhlYWRsZXNzLWNvbXBvc2l0b3IsLS1kaXNhYmxlLWhlYWRsZXNzLWNvbXBvc2l0b3IiCisjIFdlc3RvbiBvbiBmcmFtZWJ1ZmZlcgorUEFDS0FHRUNPTkZJR1tmYmRldl0gPSAiLS1lbmFibGUtZmJkZXYtY29tcG9zaXRvciwtLWRpc2FibGUtZmJkZXYtY29tcG9zaXRvcix1ZGV2IG10ZGV2IgorIyB3ZXN0b24tbGF1bmNoCitQQUNLQUdFQ09ORklHW2xhdW5jaF0gPSAiLS1lbmFibGUtd2VzdG9uLWxhdW5jaCwtLWRpc2FibGUtd2VzdG9uLWxhdW5jaCxkcm0iCisjIFZBLUFQSSBkZXNrdG9wIHJlY29yZGVyCitQQUNLQUdFQ09ORklHW3ZhYXBpXSA9ICItLWVuYWJsZS12YWFwaS1yZWNvcmRlciwtLWRpc2FibGUtdmFhcGktcmVjb3JkZXIsbGlidmEiCisjIFdlc3RvbiB3aXRoIEVHTCBzdXBwb3J0CitQQUNLQUdFQ09ORklHW2VnbF0gPSAiLS1lbmFibGUtZWdsIC0tZW5hYmxlLXNpbXBsZS1lZ2wtY2xpZW50cywtLWRpc2FibGUtZWdsIC0tZGlzYWJsZS1zaW1wbGUtZWdsLWNsaWVudHMsdmlydHVhbC9lZ2wiCisjIFdlc3RvbiB3aXRoIGNhaXJvIGdsZXN2MiBzdXBwb3J0CitQQUNLQUdFQ09ORklHW2NhaXJvLWdsZXN2Ml0gPSAiLS13aXRoLWNhaXJvLWdsZXN2MiwtLXdpdGgtY2Fpcm89aW1hZ2UsY2Fpcm8iCisjIFdlc3RvbiB3aXRoIGxjbXMgc3VwcG9ydAorUEFDS0FHRUNPTkZJR1tsY21zXSA9ICItLWVuYWJsZS1sY21zLC0tZGlzYWJsZS1sY21zLGxjbXMiCisjIFdlc3RvbiB3aXRoIHdlYnAgc3VwcG9ydAorUEFDS0FHRUNPTkZJR1t3ZWJwXSA9ICItLXdpdGgtd2VicCwtLXdpdGhvdXQtd2VicCxsaWJ3ZWJwIgorIyBXZXN0b24gd2l0aCB1bndpbmRpbmcgc3VwcG9ydAorUEFDS0FHRUNPTkZJR1tsaWJ1bndpbmRdID0gIi0tZW5hYmxlLWxpYnVud2luZCwtLWRpc2FibGUtbGlidW53aW5kLGxpYnVud2luZCIKKyMgV2VzdG9uIHdpdGggc3lzdGVtZC1sb2dpbiBzdXBwb3J0CitQQUNLQUdFQ09ORklHW3N5c3RlbWRdID0gIi0tZW5hYmxlLXN5c3RlbWQtbG9naW4sLS1kaXNhYmxlLXN5c3RlbWQtbG9naW4sc3lzdGVtZCBkYnVzIgorIyBXZXN0b24gd2l0aCBYd2F5bGFuZCBzdXBwb3J0IChyZXF1aXJlcyBYMTEgYW5kIFdheWxhbmQpCitQQUNLQUdFQ09ORklHW3h3YXlsYW5kXSA9ICItLWVuYWJsZS14d2F5bGFuZCwtLWRpc2FibGUteHdheWxhbmQiCisjIGNvbG9yZCBDTVMgc3VwcG9ydAorUEFDS0FHRUNPTkZJR1tjb2xvcmRdID0gIi0tZW5hYmxlLWNvbG9yZCwtLWRpc2FibGUtY29sb3JkLGNvbG9yZCIKKyMgQ2xpZW50cyBzdXBwb3J0CitQQUNLQUdFQ09ORklHW2NsaWVudHNdID0gIi0tZW5hYmxlLWNsaWVudHMgLS1lbmFibGUtc2ltcGxlLWNsaWVudHMgLS1lbmFibGUtZGVtby1jbGllbnRzLWluc3RhbGwsLS1kaXNhYmxlLWNsaWVudHMgLS1kaXNhYmxlLXNpbXBsZS1jbGllbnRzIgorIyBXZXN0b24gd2l0aCBQQU0gc3VwcG9ydAorUEFDS0FHRUNPTkZJR1twYW1dID0gIi0td2l0aC1wYW0sLS13aXRob3V0LXBhbSxsaWJwYW0iCisKK2RvX2luc3RhbGxfYXBwZW5kKCkgeworCSMgV2VzdG9uIGRvZXNuJ3QgbmVlZCB0aGUgLmxhIGZpbGVzIHRvIGxvYWQgbW9kdWxlcywgc28gd2lwZSB0aGVtCisJcm0gLWYgJHtEfS8ke2xpYmRpcn0vd2VzdG9uLyoubGEKKworCSMgSWYgWDExLCBzaGlwIGEgZGVza3RvcCBmaWxlIHRvIGxhdW5jaCBpdAorCWlmIFsgIiR7QGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCAneDExJywgJ3gxMScsICcnLCBkKX0iID0gIngxMSIgXTsgdGhlbgorCQlpbnN0YWxsIC1kICR7RH0ke2RhdGFkaXJ9L2FwcGxpY2F0aW9ucworCQlpbnN0YWxsICR7V09SS0RJUn0vd2VzdG9uLmRlc2t0b3AgJHtEfSR7ZGF0YWRpcn0vYXBwbGljYXRpb25zCisKKwkJaW5zdGFsbCAtZCAke0R9JHtkYXRhZGlyfS9pY29ucy9oaWNvbG9yLzQ4eDQ4L2FwcHMKKwkJaW5zdGFsbCAke1dPUktESVJ9L3dlc3Rvbi5wbmcgJHtEfSR7ZGF0YWRpcn0vaWNvbnMvaGljb2xvci80OHg0OC9hcHBzCisJZmkKKworCWlmIFsgIiR7QGJiLnV0aWxzLmNvbnRhaW5zKCdQQUNLQUdFQ09ORklHJywgJ3h3YXlsYW5kJywgJ3llcycsICdubycsIGQpfSIgPSAieWVzIiBdOyB0aGVuCisJCWluc3RhbGwgLURtIDY0NCAke1dPUktESVJ9L3h3YXlsYW5kLndlc3Rvbi1zdGFydCAke0R9JHtkYXRhZGlyfS93ZXN0b24tc3RhcnQveHdheWxhbmQKKwlmaQorfQorCitQQUNLQUdFX0JFRk9SRV9QTiArPSAiJHtAYmIudXRpbHMuY29udGFpbnMoJ1BBQ0tBR0VDT05GSUcnLCAneHdheWxhbmQnLCAnJHtQTn0teHdheWxhbmQnLCAnJywgZCl9IgorUEFDS0FHRVMgKz0gIiR7UE59LWV4YW1wbGVzIgorCitGSUxFU18ke1BOfSA9ICIke2JpbmRpcn0vd2VzdG9uICR7YmluZGlyfS93ZXN0b24tdGVybWluYWwgJHtiaW5kaXJ9L3dlc3Rvbi1pbmZvICR7YmluZGlyfS93ZXN0b24tbGF1bmNoICR7YmluZGlyfS93Y2FwLWRlY29kZSAke2xpYmV4ZWNkaXJ9ICR7bGliZGlyfS8ke0JQTn0vKi5zbyAke2RhdGFkaXJ9IgorRklMRVNfJHtQTn0tZXhhbXBsZXMgPSAiJHtiaW5kaXJ9LyoiCisKK0ZJTEVTXyR7UE59LXh3YXlsYW5kID0gIiR7bGliZGlyfS8ke0JQTn0veHdheWxhbmQuc28iCitSREVQRU5EU18ke1BOfS14d2F5bGFuZCArPSAieHNlcnZlci14b3JnLXh3YXlsYW5kIgorCitSREVQRU5EU18ke1BOfSArPSAieGtleWJvYXJkLWNvbmZpZyIKK1JSRUNPTU1FTkRTXyR7UE59ID0gImxpYmVyYXRpb24tZm9udHMiCitSUkVDT01NRU5EU18ke1BOfS1kZXYgKz0gIndheWxhbmQtcHJvdG9jb2xzIgorCitVU0VSQUREX1BBQ0tBR0VTID0gIiR7UE59IgorR1JPVVBBRERfUEFSQU1fJHtQTn0gPSAiLS1zeXN0ZW0gd2VzdG9uLWxhdW5jaCIKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3Mvd2F5bGFuZC93ZXN0b25fMS45LjAuYmIgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3dheWxhbmQvd2VzdG9uXzEuOS4wLmJiCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxNmE3ODhkLi4wMDAwMDAwCi0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3Mvd2F5bGFuZC93ZXN0b25fMS45LjAuYmIKKysrIC9kZXYvbnVsbApAQCAtMSwxMDMgKzAsMCBAQAotU1VNTUFSWSA9ICJXZXN0b24sIGEgV2F5bGFuZCBjb21wb3NpdG9yIgotREVTQ1JJUFRJT04gPSAiV2VzdG9uIGlzIHRoZSByZWZlcmVuY2UgaW1wbGVtZW50YXRpb24gb2YgYSBXYXlsYW5kIGNvbXBvc2l0b3IiCi1IT01FUEFHRSA9ICJodHRwOi8vd2F5bGFuZC5mcmVlZGVza3RvcC5vcmciCi1MSUNFTlNFID0gIk1JVCIKLUxJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PWQ3OWVlOWU2NmJiMGY5NWQzMzg2YTdhY2FlNzgwYjcwIFwKLSAgICAgICAgICAgICAgICAgICAgZmlsZTovL3NyYy9jb21wb3NpdG9yLmM7ZW5kbGluZT0yMzttZDU9MWQ1MzVmZWQyNjZjZjM5ZjZkOGMwNjQ3ZjUyYWMzMzEiCi0KLVNSQ19VUkkgPSAiaHR0cDovL3dheWxhbmQuZnJlZWRlc2t0b3Aub3JnL3JlbGVhc2VzLyR7QlBOfS0ke1BWfS50YXIueHogXAotICAgICAgICAgICBmaWxlOi8vd2VzdG9uLnBuZyBcCi0gICAgICAgICAgIGZpbGU6Ly93ZXN0b24uZGVza3RvcCBcCi0gICAgICAgICAgIGZpbGU6Ly9tYWtlLWxjbXMtZXhwbGljaXRseS1jb25maWd1cmFibGUucGF0Y2ggXAotICAgICAgICAgICBmaWxlOi8vbWFrZS1saWJ3ZWJwLWV4cGxpY2l0bHktY29uZmlndXJhYmxlLnBhdGNoIFwKLSAgICAgICAgICAgZmlsZTovLzAwMDEtbWFrZS1lcnJvci1wb3J0YWJsZS5wYXRjaCBcCi0gICAgICAgICAgIGZpbGU6Ly9saWJzeXN0ZW1kLnBhdGNoIFwKLSAgICAgICAgICAgZmlsZTovL2V4cGxpY2l0LWVuYWJsZS1kaXNhYmxlLXN5c3RlbWQucGF0Y2ggXAotIgotU1JDX1VSSVttZDVzdW1dID0gIjY2YmJiYTEyZjU0NjU3MGI0ZDk3ZjY3NmJjNzlhMjhlIgotU1JDX1VSSVtzaGEyNTZzdW1dID0gIjljMWIwM2YzMTg0ZmEwYjBkZmRmNjdlMjE1MDQ4MDg1MTU2ZTFhMmNhMzQ0YWY2NjEzZmVkMzY3OTRhYzQ4Y2YiCi0KLWluaGVyaXQgYXV0b3Rvb2xzIHBrZ2NvbmZpZyB1c2VyYWRkIGRpc3Ryb19mZWF0dXJlc19jaGVjawotIyBkZXBlbmRzIG9uIHZpcnR1YWwvZWdsCi1SRVFVSVJFRF9ESVNUUk9fRkVBVFVSRVMgPSAib3BlbmdsIgotCi1ERVBFTkRTID0gImxpYnhrYmNvbW1vbiBnZGstcGl4YnVmIHBpeG1hbiBjYWlybyBnbGliLTIuMCBqcGVnIgotREVQRU5EUyArPSAid2F5bGFuZCBsaWJpbnB1dCB2aXJ0dWFsL2VnbCBwYW5nbyB3YXlsYW5kLW5hdGl2ZSIKLQotRVhUUkFfT0VDT05GID0gIi0tZW5hYmxlLXNldHVpZC1pbnN0YWxsIFwKLSAgICAgICAgICAgICAgICAtLWVuYWJsZS1zaW1wbGUtY2xpZW50cyBcCi0gICAgICAgICAgICAgICAgLS1lbmFibGUtY2xpZW50cyBcCi0gICAgICAgICAgICAgICAgLS1lbmFibGUtZGVtby1jbGllbnRzLWluc3RhbGwgXAotICAgICAgICAgICAgICAgIC0tZGlzYWJsZS1ycGktY29tcG9zaXRvciBcCi0gICAgICAgICAgICAgICAgLS1kaXNhYmxlLXJkcC1jb21wb3NpdG9yIFwKLSAgICAgICAgICAgICAgICAiCi0KLUVYVFJBX09FQ09ORl9hcHBlbmRfcWVtdXg4NiA9ICJcCi0JCVdFU1RPTl9OQVRJVkVfQkFDS0VORD1mYmRldi1iYWNrZW5kLnNvIFwKLQkJIgotRVhUUkFfT0VDT05GX2FwcGVuZF9xZW11eDg2LTY0ID0gIlwKLQkJV0VTVE9OX05BVElWRV9CQUNLRU5EPWZiZGV2LWJhY2tlbmQuc28gXAotCQkiCi1QQUNLQUdFQ09ORklHID8/PSAiJHtAYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsICd3YXlsYW5kJywgJ2ttcyBmYmRldiB3YXlsYW5kIGVnbCcsICcnLCBkKX0gXAotICAgICAgICAgICAgICAgICAgICR7QGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCAneDExJywgJ3gxMScsICcnLCBkKX0gXAotICAgICAgICAgICAgICAgICAgICR7QGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCAncGFtJywgJ2xhdW5jaCcsICcnLCBkKX0gXAotICAgICAgICAgICAgICAgICAgICR7QGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCAnc3lzdGVtZCcsICdzeXN0ZW1kJywgJycsIGQpfSBcCi0gICAgICAgICAgICAgICAgICAiCi0jCi0jIENvbXBvc2l0b3IgY2hvaWNlcwotIwotIyBXZXN0b24gb24gS01TCi1QQUNLQUdFQ09ORklHW2ttc10gPSAiLS1lbmFibGUtZHJtLWNvbXBvc2l0b3IsLS1kaXNhYmxlLWRybS1jb21wb3NpdG9yLGRybSB1ZGV2IHZpcnR1YWwvbWVzYSBtdGRldiIKLSMgV2VzdG9uIG9uIFdheWxhbmQgKG5lc3RlZCBXZXN0b24pCi1QQUNLQUdFQ09ORklHW3dheWxhbmRdID0gIi0tZW5hYmxlLXdheWxhbmQtY29tcG9zaXRvciwtLWRpc2FibGUtd2F5bGFuZC1jb21wb3NpdG9yLHZpcnR1YWwvbWVzYSIKLSMgV2VzdG9uIG9uIFgxMQotUEFDS0FHRUNPTkZJR1t4MTFdID0gIi0tZW5hYmxlLXgxMS1jb21wb3NpdG9yLC0tZGlzYWJsZS14MTEtY29tcG9zaXRvcix2aXJ0dWFsL2xpYngxMSBsaWJ4Y2IgbGlieGNiIGxpYnhjdXJzb3IgY2Fpcm8iCi0jIEhlYWRsZXNzIFdlc3RvbgotUEFDS0FHRUNPTkZJR1toZWFkbGVzc10gPSAiLS1lbmFibGUtaGVhZGxlc3MtY29tcG9zaXRvciwtLWRpc2FibGUtaGVhZGxlc3MtY29tcG9zaXRvciIKLSMgV2VzdG9uIG9uIGZyYW1lYnVmZmVyCi1QQUNLQUdFQ09ORklHW2ZiZGV2XSA9ICItLWVuYWJsZS1mYmRldi1jb21wb3NpdG9yLC0tZGlzYWJsZS1mYmRldi1jb21wb3NpdG9yLHVkZXYgbXRkZXYiCi0jIHdlc3Rvbi1sYXVuY2gKLVBBQ0tBR0VDT05GSUdbbGF1bmNoXSA9ICItLWVuYWJsZS13ZXN0b24tbGF1bmNoLC0tZGlzYWJsZS13ZXN0b24tbGF1bmNoLGxpYnBhbSBkcm0iCi0jIFZBLUFQSSBkZXNrdG9wIHJlY29yZGVyCi1QQUNLQUdFQ09ORklHW3ZhYXBpXSA9ICItLWVuYWJsZS12YWFwaS1yZWNvcmRlciwtLWRpc2FibGUtdmFhcGktcmVjb3JkZXIsbGlidmEiCi0jIFdlc3RvbiB3aXRoIEVHTCBzdXBwb3J0Ci1QQUNLQUdFQ09ORklHW2VnbF0gPSAiLS1lbmFibGUtZWdsIC0tZW5hYmxlLXNpbXBsZS1lZ2wtY2xpZW50cywtLWRpc2FibGUtZWdsIC0tZGlzYWJsZS1zaW1wbGUtZWdsLWNsaWVudHMsdmlydHVhbC9lZ2wiCi0jIFdlc3RvbiB3aXRoIGNhaXJvIGdsZXN2MiBzdXBwb3J0Ci1QQUNLQUdFQ09ORklHW2NhaXJvLWdsZXN2Ml0gPSAiLS13aXRoLWNhaXJvLWdsZXN2MiwtLXdpdGgtY2Fpcm89aW1hZ2UsY2Fpcm8iCi0jIFdlc3RvbiB3aXRoIGxjbXMgc3VwcG9ydAotUEFDS0FHRUNPTkZJR1tsY21zXSA9ICItLWVuYWJsZS1sY21zLC0tZGlzYWJsZS1sY21zLGxjbXMiCi0jIFdlc3RvbiB3aXRoIHdlYnAgc3VwcG9ydAotUEFDS0FHRUNPTkZJR1t3ZWJwXSA9ICItLWVuYWJsZS13ZWJwLC0tZGlzYWJsZS13ZWJwLGxpYndlYnAiCi0jIFdlc3RvbiB3aXRoIHVud2luZGluZyBzdXBwb3J0Ci1QQUNLQUdFQ09ORklHW2xpYnVud2luZF0gPSAiLS1lbmFibGUtbGlidW53aW5kLC0tZGlzYWJsZS1saWJ1bndpbmQsbGlidW53aW5kIgotIyBXZXN0b24gd2l0aCBzeXN0ZW1kLWxvZ2luIHN1cHBvcnQKLVBBQ0tBR0VDT05GSUdbc3lzdGVtZF0gPSAiLS1lbmFibGUtc3lzdGVtZC1sb2dpbiwtLWRpc2FibGUtc3lzdGVtZC1sb2dpbixzeXN0ZW1kIGRidXMiCi0jIFdlc3RvbiB3aXRoIFh3YXlsYW5kIHN1cHBvcnQKLVBBQ0tBR0VDT05GSUdbeHdheWxhbmRdID0gIi0tZW5hYmxlLXh3YXlsYW5kLC0tZGlzYWJsZS14d2F5bGFuZCxsaWJ4Y2IgbGlieGN1cnNvciBjYWlybyIKLSMgY29sb3JkIENNUyBzdXBwb3J0Ci1QQUNLQUdFQ09ORklHW2NvbG9yZF0gPSAiLS1lbmFibGUtY29sb3JkLC0tZGlzYWJsZS1jb2xvcmQsY29sb3JkIgotCi1kb19pbnN0YWxsX2FwcGVuZCgpIHsKLQkjIFdlc3RvbiBkb2Vzbid0IG5lZWQgdGhlIC5sYSBmaWxlcyB0byBsb2FkIG1vZHVsZXMsIHNvIHdpcGUgdGhlbQotCXJtIC1mICR7RH0vJHtsaWJkaXJ9L3dlc3Rvbi8qLmxhCi0KLQkjIElmIFgxMSwgc2hpcCBhIGRlc2t0b3AgZmlsZSB0byBsYXVuY2ggaXQKLQlpZiBbICIke0BiYi51dGlscy5jb250YWlucygnRElTVFJPX0ZFQVRVUkVTJywgJ3gxMScsICd4MTEnLCAnJywgZCl9IiA9ICJ4MTEiIF07IHRoZW4KLQkJaW5zdGFsbCAtZCAke0R9JHtkYXRhZGlyfS9hcHBsaWNhdGlvbnMKLQkJaW5zdGFsbCAke1dPUktESVJ9L3dlc3Rvbi5kZXNrdG9wICR7RH0ke2RhdGFkaXJ9L2FwcGxpY2F0aW9ucwotCi0JCWluc3RhbGwgLWQgJHtEfSR7ZGF0YWRpcn0vaWNvbnMvaGljb2xvci80OHg0OC9hcHBzCi0JCWluc3RhbGwgJHtXT1JLRElSfS93ZXN0b24ucG5nICR7RH0ke2RhdGFkaXJ9L2ljb25zL2hpY29sb3IvNDh4NDgvYXBwcwotICAgICAgICBmaQotfQotCi1QQUNLQUdFUyArPSAiJHtQTn0tZXhhbXBsZXMiCi0KLUZJTEVTXyR7UE59ID0gIiR7YmluZGlyfS93ZXN0b24gJHtiaW5kaXJ9L3dlc3Rvbi10ZXJtaW5hbCAke2JpbmRpcn0vd2VzdG9uLWluZm8gJHtiaW5kaXJ9L3dlc3Rvbi1sYXVuY2ggJHtiaW5kaXJ9L3djYXAtZGVjb2RlICR7bGliZXhlY2Rpcn0gJHtsaWJkaXJ9LyR7QlBOfS8qLnNvICR7ZGF0YWRpcn0iCi1GSUxFU18ke1BOfS1leGFtcGxlcyA9ICIke2JpbmRpcn0vKiIKLQotUkRFUEVORFNfJHtQTn0gKz0gInhrZXlib2FyZC1jb25maWciCi1SUkVDT01NRU5EU18ke1BOfSA9ICJsaWJlcmF0aW9uLWZvbnRzIgotCi1VU0VSQUREX1BBQ0tBR0VTID0gIiR7UE59IgotR1JPVVBBRERfUEFSQU1fJHtQTn0gPSAiLS1zeXN0ZW0gd2VzdG9uLWxhdW5jaCIKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveDExLWNvbW1vbi94MTEtY29tbW9uL1hzZXJ2ZXIuaW4gYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3gxMS1jb21tb24veDExLWNvbW1vbi9Yc2VydmVyLmluCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiOGVlZDc2Li4wMDAwMDAwCi0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveDExLWNvbW1vbi94MTEtY29tbW9uL1hzZXJ2ZXIuaW4KKysrIC9kZXYvbnVsbApAQCAtMSwxMiArMCwwIEBACi0jIS9iaW4vc2gKLSMKLQotWFNFUlZFUj0vdXNyL2Jpbi9Yb3JnCi0KLS4gL2V0Yy9wcm9maWxlCi0KLUFSR1M9IiAtYnIgLXBuIEBCTEFOS19BUkdTQCIKLQotRElTUExBWT0nOjAnCi0KLWV4ZWMgeGluaXQgL2V0Yy9YMTEvWHNlc3Npb24gLS0gJFhTRVJWRVIgJERJU1BMQVkgJEFSR1MgJCoKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveDExLWNvbW1vbi94MTEtY29tbW9uL2V0Yy9YMTEvWHNlc3Npb24uZC8xM3hkZ2Jhc2VkaXJzLnNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94MTEtY29tbW9uL3gxMS1jb21tb24vZXRjL1gxMS9Yc2Vzc2lvbi5kLzEzeGRnYmFzZWRpcnMuc2gKaW5kZXggOTE1OTRiOS4uNmJkNDBiMiAxMDA2NDQKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94MTEtY29tbW9uL3gxMS1jb21tb24vZXRjL1gxMS9Yc2Vzc2lvbi5kLzEzeGRnYmFzZWRpcnMuc2gKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94MTEtY29tbW9uL3gxMS1jb21tb24vZXRjL1gxMS9Yc2Vzc2lvbi5kLzEzeGRnYmFzZWRpcnMuc2gKQEAgLTcsNyArNyw3IEBACiAjIEluIHRoZSBpZGVhbCBjYXNlIHdoZXJlIFN5c3RlbUQgaXMgYm9vdGluZyBhbmQgdXNlcnNwYWNlIGlzIGluaXRpYXRlZCBieSBhCiAjIFN5c3RlbUQgdXNlciBzZXNzaW9uIHRoaXMgd2lsbCBoYXZlIGJlZW4gc2V0IGFscmVhZHksIHNvIGRvbid0IG92ZXJ3cml0ZSBpdC4KIAotaWYgWyAteiAiJFhHRF9SVU5USU1FX0RJUiIgXTsgdGhlbgotCVhER19SVU5USU1FX0RJUj0iL3RtcCIKLSAgICAgICAgZXhwb3J0IFhER19SVU5USU1FX0RJUgoraWYgWyAteiAiJFhER19SVU5USU1FX0RJUiIgXTsgdGhlbgorICAgIFhER19SVU5USU1FX0RJUj0iL3RtcCIKKyAgICBleHBvcnQgWERHX1JVTlRJTUVfRElSCiBmaQpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94MTEtY29tbW9uL3gxMS1jb21tb25fMC4xLmJiIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94MTEtY29tbW9uL3gxMS1jb21tb25fMC4xLmJiCmluZGV4IDZkN2MzNDcuLmFiOWE5MzkgMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveDExLWNvbW1vbi94MTEtY29tbW9uXzAuMS5iYgorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3gxMS1jb21tb24veDExLWNvbW1vbl8wLjEuYmIKQEAgLTksMjIgKzksMTQgQEAKIFJFUVVJUkVEX0RJU1RST19GRUFUVVJFUyA9ICJ4MTEiCiAKIFNSQ19VUkkgPSAiZmlsZTovL2V0YyBcCi0gICAgICAgICAgIGZpbGU6Ly9Yc2VydmVyLmluIFwKICAgICAgICAgICAgZmlsZTovL2dwbHYyLWxpY2Vuc2UucGF0Y2giCiAKIFMgPSAiJHtXT1JLRElSfSIKIAotUEFDS0FHRUNPTkZJRyA/Pz0gImJsYW5rIgotIyBkcG1zIGFuZCBzY3JlZW4gc2F2ZXIgd2lsbCBiZSBvbiBvbmx5IGlmICdibGFuaycgaXMgaW4gUEFDS0FHRUNPTkZJRwotUEFDS0FHRUNPTkZJR1tibGFua10gPSAiIgotCiBkb19pbnN0YWxsKCkgewogCWNwIC1SICR7U30vZXRjICR7RH0ke3N5c2NvbmZkaXJ9Ci0Jc2VkIC1lICdzL0BCTEFOS19BUkdTQC8ke0BiYi51dGlscy5jb250YWlucygnUEFDS0FHRUNPTkZJRycsICdibGFuaycsICcnLCAnLXMgMCAtZHBtcycsIGQpfS8nIFwKLQkJJHtTfS9Yc2VydmVyLmluID4gJHtEfSR7c3lzY29uZmRpcn0vWDExL1hzZXJ2ZXIKLQogCWNobW9kIC1SIDc1NSAke0R9JHtzeXNjb25mZGlyfQogfQogCi1SREVQRU5EU18ke1BOfSA9ICJkYnVzLXgxMSB4bW9kbWFwIHhkcHlpbmZvIHh0c2NhbCB4aW5pdCBmb3JtZmFjdG9yIgorUkRFUEVORFNfJHtQTn0gPSAiZGJ1cy14MTEgeG1vZG1hcCB4ZHB5aW5mbyB4aW5wdXQtY2FsaWJyYXRvciBmb3JtZmFjdG9yIgogCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3gxMS1jb21tb24veHNlcnZlci1ub2RtLWluaXQuYmIgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3gxMS1jb21tb24veHNlcnZlci1ub2RtLWluaXQuYmIKaW5kZXggYjY4ZDQwZS4uYTZkMGQ1ZSAxMDA2NDQKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94MTEtY29tbW9uL3hzZXJ2ZXItbm9kbS1pbml0LmJiCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveDExLWNvbW1vbi94c2VydmVyLW5vZG0taW5pdC5iYgpAQCAtNSwxMCArNSwxMCBAQAogUFIgPSAicjMxIgogCiBTUkNfVVJJID0gImZpbGU6Ly94c2VydmVyLW5vZG0gXAotICAgICAgICAgICBmaWxlOi8vWHVzZXJuYW1lIFwKKyAgICAgICAgICAgZmlsZTovL1hzZXJ2ZXIgXAogICAgICAgICAgICBmaWxlOi8vZ3BsdjItbGljZW5zZS5wYXRjaCBcCi0gICAgICAgICAgIGZpbGU6Ly94c2VydmVyLW5vZG0uc2VydmljZSBcCi0gICAgICAgICAgIGZpbGU6Ly94c2VydmVyLW5vZG0uY29uZiBcCisgICAgICAgICAgIGZpbGU6Ly94c2VydmVyLW5vZG0uc2VydmljZS5pbiBcCisgICAgICAgICAgIGZpbGU6Ly94c2VydmVyLW5vZG0uY29uZi5pbiBcCiAiCiAKIFMgPSAiJHtXT1JLRElSfSIKQEAgLTE2LDM1ICsxNiw0NCBAQAogIyBTaW5jZSB3ZSByZWZlciB0byBST09UTEVTU19YIHdoaWNoIGlzIG5vcm1hbGx5IGVuYWJsZWQgcGVyLW1hY2hpbmUKIFBBQ0tBR0VfQVJDSCA9ICIke01BQ0hJTkVfQVJDSH0iCiAKLWluaGVyaXQgdXBkYXRlLXJjLmQgc3lzdGVtZAoraW5oZXJpdCB1cGRhdGUtcmMuZCBzeXN0ZW1kIGRpc3Ryb19mZWF0dXJlc19jaGVjaworCitSRVFVSVJFRF9ESVNUUk9fRkVBVFVSRVMgPSAieDExIgorCitQQUNLQUdFQ09ORklHID8/PSAiYmxhbmsiCisjIGRwbXMgYW5kIHNjcmVlbiBzYXZlciB3aWxsIGJlIG9uIG9ubHkgaWYgJ2JsYW5rJyBpcyBpbiBQQUNLQUdFQ09ORklHCitQQUNLQUdFQ09ORklHW2JsYW5rXSA9ICIiCiAKIGRvX2luc3RhbGwoKSB7Ci0gICAgaW5zdGFsbCAtZCAke0R9JHtzeXNjb25mZGlyfS9pbml0LmQKLSAgICBpbnN0YWxsIHhzZXJ2ZXItbm9kbSAke0R9JHtzeXNjb25mZGlyfS9pbml0LmQKKyAgICBpbnN0YWxsIC1kICR7RH0ke3N5c2NvbmZkaXJ9L2RlZmF1bHQKKyAgICBpbnN0YWxsIHhzZXJ2ZXItbm9kbS5jb25mLmluICR7RH0ke3N5c2NvbmZkaXJ9L2RlZmF1bHQveHNlcnZlci1ub2RtCisgICAgaW5zdGFsbCAtZCAke0R9JHtzeXNjb25mZGlyfS94c2VydmVyLW5vZG0KKyAgICBpbnN0YWxsIFhzZXJ2ZXIgJHtEfSR7c3lzY29uZmRpcn0veHNlcnZlci1ub2RtL1hzZXJ2ZXIKKworICAgIEJMQU5LX0FSR1M9IiR7QGJiLnV0aWxzLmNvbnRhaW5zKCdQQUNLQUdFQ09ORklHJywgJ2JsYW5rJywgJycsICctcyAwIC1kcG1zJywgZCl9IgorICAgIGlmIFsgIiR7Uk9PVExFU1NfWH0iID0gIjEiIF0gOyB0aGVuCisgICAgICAgIFhVU0VSX0hPTUU9Ii9ob21lL3h1c2VyIgorICAgICAgICBYVVNFUj0ieHVzZXIiCisgICAgZWxzZQorICAgICAgICBYVVNFUl9IT01FPSR7Uk9PVF9IT01FfQorICAgICAgICBYVVNFUj0icm9vdCIKKyAgICBmaQorICAgIHNlZCAtaSAiczpASE9NRUA6JHtYVVNFUl9IT01FfTo7IHM6QFVTRVJAOiR7WFVTRVJ9OjsgczpAQkxBTktfQVJHU0A6JHtCTEFOS19BUkdTfToiIFwKKyAgICAgICAgJHtEfSR7c3lzY29uZmRpcn0vZGVmYXVsdC94c2VydmVyLW5vZG0KIAogICAgIGlmICR7QGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCdzeXN0ZW1kJywndHJ1ZScsJ2ZhbHNlJyxkKX07IHRoZW4KLSAgICAgICAgaW5zdGFsbCAtZCAke0R9JHtzeXNjb25mZGlyfS9kZWZhdWx0Ci0gICAgICAgIGluc3RhbGwgeHNlcnZlci1ub2RtLmNvbmYgJHtEfSR7c3lzY29uZmRpcn0vZGVmYXVsdC94c2VydmVyLW5vZG0KICAgICAgICAgaW5zdGFsbCAtZCAke0R9JHtzeXN0ZW1kX3VuaXRkaXJ9L3N5c3RlbQotICAgICAgICBpbnN0YWxsIC1tIDA2NDQgJHtXT1JLRElSfS94c2VydmVyLW5vZG0uc2VydmljZSAke0R9JHtzeXN0ZW1kX3VuaXRkaXJ9L3N5c3RlbQotICAgICAgICBpZiBbICIke1JPT1RMRVNTX1h9IiA9ICIxIiBdIDsgdGhlbgotICAgICAgICAgICAgc2VkIC1pICdzIV5IT01FPS4qIUhPTUU9L2hvbWUveHVzZXIhJyAke0R9JHtzeXNjb25mZGlyfS9kZWZhdWx0L3hzZXJ2ZXItbm9kbQotICAgICAgICAgICAgc2VkIC1pICdzIV5Vc2VyPS4qIVVzZXI9eHVzZXIhJyAke0R9JHtzeXN0ZW1kX3VuaXRkaXJ9L3N5c3RlbS94c2VydmVyLW5vZG0uc2VydmljZQotICAgICAgICBlbHNlCi0gICAgICAgICAgICBzZWQgLWkgJ3MhXkhPTUU9LiohSE9NRT0ke1JPT1RfSE9NRX0hJyAke0R9JHtzeXNjb25mZGlyfS9kZWZhdWx0L3hzZXJ2ZXItbm9kbQotICAgICAgICAgICAgc2VkIC1pICcvXlVzZXI9L2QnICR7RH0ke3N5c3RlbWRfdW5pdGRpcn0vc3lzdGVtL3hzZXJ2ZXItbm9kbS5zZXJ2aWNlCi0gICAgICAgIGZpCisgICAgICAgIGluc3RhbGwgLW0gMDY0NCAke1dPUktESVJ9L3hzZXJ2ZXItbm9kbS5zZXJ2aWNlLmluICR7RH0ke3N5c3RlbWRfdW5pdGRpcn0vc3lzdGVtL3hzZXJ2ZXItbm9kbS5zZXJ2aWNlCisgICAgICAgIHNlZCAtaSAiczpAVVNFUkA6JHtYVVNFUn06IiAke0R9JHtzeXN0ZW1kX3VuaXRkaXJ9L3N5c3RlbS94c2VydmVyLW5vZG0uc2VydmljZQogICAgIGZpCiAKICAgICBpZiAke0BiYi51dGlscy5jb250YWlucygnRElTVFJPX0ZFQVRVUkVTJywnc3lzdmluaXQnLCd0cnVlJywnZmFsc2UnLGQpfTsgdGhlbgotICAgICAgICBpZiBbICIke1JPT1RMRVNTX1h9IiA9ICIxIiBdIDsgdGhlbgotICAgICAgICAgICAgaW5zdGFsbCAtZCAke0R9JHtzeXNjb25mZGlyfS9YMTEKLSAgICAgICAgICAgIGluc3RhbGwgWHVzZXJuYW1lICR7RH0ke3N5c2NvbmZkaXJ9L1gxMQotICAgICAgICBmaQorICAgICAgICBpbnN0YWxsIC1kICR7RH0ke3N5c2NvbmZkaXJ9L2luaXQuZAorICAgICAgICBpbnN0YWxsIHhzZXJ2ZXItbm9kbSAke0R9JHtzeXNjb25mZGlyfS9pbml0LmQKICAgICBmaQogfQogCi1SREVQRU5EU18ke1BOfSA9ICIke0BiYXNlX2NvbmRpdGlvbmFsKCdST09UTEVTU19YJywgJzEnLCAneHVzZXItYWNjb3VudCcsICcnLCBkKX0iCitSREVQRU5EU18ke1BOfSA9ICJ4aW5pdCAke0BiYXNlX2NvbmRpdGlvbmFsKCdST09UTEVTU19YJywgJzEnLCAneHVzZXItYWNjb3VudCcsICcnLCBkKX0iCiAKIElOSVRTQ1JJUFRfTkFNRSA9ICJ4c2VydmVyLW5vZG0iCiBJTklUU0NSSVBUX1BBUkFNUyA9ICJzdGFydCA5IDUgLiBzdG9wIDIwIDAgMSAyIDMgNiAuIgpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94MTEtY29tbW9uL3hzZXJ2ZXItbm9kbS1pbml0L1hzZXJ2ZXIgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3gxMS1jb21tb24veHNlcnZlci1ub2RtLWluaXQvWHNlcnZlcgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wZWRiZmJmCi0tLSAvZGV2L251bGwKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94MTEtY29tbW9uL3hzZXJ2ZXItbm9kbS1pbml0L1hzZXJ2ZXIKQEAgLTAsMCArMSwyNSBAQAorIyEvYmluL3NoCisKKyMgVGhpcyBzY3JpcHQgaXMgb25seSBuZWVkZWQgdG8gbWFrZSBzdXJlIC9ldGMvWDExL3hzZXJ2ZXItY29tbW9uCisjIGNhbiBhZmZlY3QgWFNFUlZFUiwgQVJHUyAmIERQSTogb3RoZXJ3aXNlIHN5c3RlbWQgY291bGQganVzdCB1c2UKKyMgL2V0Yy9kZWZhdWx0L3hzZXJ2ZXItbm9kbSBhcyBFbnZpcm9ubWVudEZpbGUgYW5kIHN5c3Zpbml0IGNvdWxkIGp1c3QKKyMgc291cmNlIHRoZSBzYW1lIGZpbGUKKworLiAvZXRjL3Byb2ZpbGUKKworIyBsb2FkIGRlZmF1bHQgdmFsdWVzIGZvciBYU0VSVkVSLCBBUkdTLCBESVNQTEFZLi4uCisuIC9ldGMvZGVmYXVsdC94c2VydmVyLW5vZG0KKworIyBBbGxvdyB4c2VydmVyLWNvbW1vbiB0byBvdmVycmlkZSBBUkdTLCBYU0VSVkVSLCBEUEkKK2lmIFsgLWUgL2V0Yy9YMTEveHNlcnZlci1jb21tb24gXSA7IHRoZW4KKyAgICAuIC9ldGMvWDExL3hzZXJ2ZXItY29tbW9uCisgICAgaWYgWyAhIC1lICRYU0VSVkVSIF0gOyB0aGVuCisgICAgICAgIFhTRVJWRVI9JCh3aGljaCAkWFNFUlZFUikKKyAgICBmaQorZmkKKworaWYgWyAtbiAiJERQSSIgXSA7IHRoZW4KKyAgICBBUkdTPSIkQVJHUyAtZHBpICREUEkiCitmaQorCitleGVjIHhpbml0IC9ldGMvWDExL1hzZXNzaW9uIC0tICRYU0VSVkVSICRESVNQTEFZICRBUkdTICQqCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3gxMS1jb21tb24veHNlcnZlci1ub2RtLWluaXQvWHVzZXJuYW1lIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94MTEtY29tbW9uL3hzZXJ2ZXItbm9kbS1pbml0L1h1c2VybmFtZQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzA2MGU1ZS4uMDAwMDAwMAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3gxMS1jb21tb24veHNlcnZlci1ub2RtLWluaXQvWHVzZXJuYW1lCisrKyAvZGV2L251bGwKQEAgLTEgKzAsMCBAQAoteHVzZXIKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveDExLWNvbW1vbi94c2VydmVyLW5vZG0taW5pdC94c2VydmVyLW5vZG0gYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3gxMS1jb21tb24veHNlcnZlci1ub2RtLWluaXQveHNlcnZlci1ub2RtCmluZGV4IGJmYTBhOGQuLjZjNTQ4NTUgMTAwNzU1Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveDExLWNvbW1vbi94c2VydmVyLW5vZG0taW5pdC94c2VydmVyLW5vZG0KKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94MTEtY29tbW9uL3hzZXJ2ZXItbm9kbS1pbml0L3hzZXJ2ZXItbm9kbQpAQCAtMjYsMTAgKzI2LDExIEBACiBjYXNlICIkMSIgaW4KICAgc3RhcnQpCiAgICAgICAgLiAvZXRjL3Byb2ZpbGUKLSAgICAgICB1c2VybmFtZT1yb290CisKKyAgICAgICAjZGVmYXVsdCBmb3IgVVNFUgorICAgICAgIC4gL2V0Yy9kZWZhdWx0L3hzZXJ2ZXItbm9kbQogICAgICAgIGVjaG8gIlN0YXJ0aW5nIFhzZXJ2ZXIiCi0gICAgICAgaWYgWyAtZiAvZXRjL1gxMS9YdXNlcm5hbWUgXTsgdGhlbgotICAgICAgICAgICB1c2VybmFtZT1gY2F0IC9ldGMvWDExL1h1c2VybmFtZWAKKyAgICAgICBpZiBbICIkVVNFUiIgIT0gInJvb3QiIF07IHRoZW4KICAgICAgICAgICAgIyBzZXR0aW5nIGZvciByb290bGVzcyBYCiAgICAgICAgICAgIGNobW9kIG8rdyAvdmFyL2xvZwogICAgICAgICAgICBjaG1vZCBnK3IgL2Rldi90dHlbMC0zXQpAQCAtMzgsOCArMzksOSBAQAogICAgICAgICAgICAgICAgY2htb2QgbytydyAvZGV2L2hpZHJhdyoKICAgICAgICAgICAgZmkKICAgICAgICBmaQorCiAgICAgICAgIyBVc2luZyBzdSByYXRoZXIgdGhhbiBzdWRvIGFzIGxhdGVzdCAxLjguMSBjYXVzZSBmYWlsdXJlIFtZT0NUTyAjMTIxMV0KLSAgICAgICBzdSAtbCAtYyAnL2V0Yy9YMTEvWHNlcnZlciYnICR1c2VybmFtZSAKKyAgICAgICBzdSAtbCAtYyAnL2V0Yy94c2VydmVyLW5vZG0vWHNlcnZlciAmJyAkVVNFUgogICAgICAgICMgV2FpdCBmb3IgdGhlIGRlc2t0b3AgdG8gc2F5IGl0cyBmaW5pc2hlZCBsb2FkaW5nCiAgICAgICAgIyBiZWZvcmUgbG9hZGluZyB0aGUgcmVzdCBvZiB0aGUgc3lzdGVtCiAgICAgICAgIyBkYnVzLXdhaXQgb3JnLm1hdGNoYm94X3Byb2plY3QuZGVza3RvcCBMb2FkZWQKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveDExLWNvbW1vbi94c2VydmVyLW5vZG0taW5pdC94c2VydmVyLW5vZG0uY29uZiBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveDExLWNvbW1vbi94c2VydmVyLW5vZG0taW5pdC94c2VydmVyLW5vZG0uY29uZgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggM2MwNTgyYS4uMDAwMDAwMAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3gxMS1jb21tb24veHNlcnZlci1ub2RtLWluaXQveHNlcnZlci1ub2RtLmNvbmYKKysrIC9kZXYvbnVsbApAQCAtMSArMCwwIEBACi1IT01FPS9ob21lL3Jvb3QKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveDExLWNvbW1vbi94c2VydmVyLW5vZG0taW5pdC94c2VydmVyLW5vZG0uY29uZi5pbiBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveDExLWNvbW1vbi94c2VydmVyLW5vZG0taW5pdC94c2VydmVyLW5vZG0uY29uZi5pbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43NTdjMjNkCi0tLSAvZGV2L251bGwKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94MTEtY29tbW9uL3hzZXJ2ZXItbm9kbS1pbml0L3hzZXJ2ZXItbm9kbS5jb25mLmluCkBAIC0wLDAgKzEsNyBAQAorIyBjb21tb24gZW52aXJvbm1lbnQgZmlsZSBmb3Igc3lzdmluaXQgYW5kIHN5c3RlbWQKKworWFNFUlZFUj0vdXNyL2Jpbi9Yb3JnCitESVNQTEFZPTowCitBUkdTPSIgLWJyIC1wbiBAQkxBTktfQVJHU0AgIgorSE9NRT1ASE9NRUAKK1VTRVI9QFVTRVJACmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3gxMS1jb21tb24veHNlcnZlci1ub2RtLWluaXQveHNlcnZlci1ub2RtLnNlcnZpY2UgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3gxMS1jb21tb24veHNlcnZlci1ub2RtLWluaXQveHNlcnZlci1ub2RtLnNlcnZpY2UKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDYyZDk3OWYuLjAwMDAwMDAKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94MTEtY29tbW9uL3hzZXJ2ZXItbm9kbS1pbml0L3hzZXJ2ZXItbm9kbS5zZXJ2aWNlCisrKyAvZGV2L251bGwKQEAgLTEsMTAgKzAsMCBAQAotW1VuaXRdCi1EZXNjcmlwdGlvbj1Yc2VydmVyIHN0YXJ0dXAgd2l0aG91dCBhIGRpc3BsYXkgbWFuYWdlcgotCi1bU2VydmljZV0KLVVzZXI9cm9vdAotRW52aXJvbm1lbnRGaWxlPS9ldGMvZGVmYXVsdC94c2VydmVyLW5vZG0KLUV4ZWNTdGFydD0vZXRjL1gxMS9Yc2VydmVyCi0KLVtJbnN0YWxsXQotQWxpYXM9ZGlzcGxheS1tYW5hZ2VyLnNlcnZpY2UKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveDExLWNvbW1vbi94c2VydmVyLW5vZG0taW5pdC94c2VydmVyLW5vZG0uc2VydmljZS5pbiBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveDExLWNvbW1vbi94c2VydmVyLW5vZG0taW5pdC94c2VydmVyLW5vZG0uc2VydmljZS5pbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMjRhMjZmCi0tLSAvZGV2L251bGwKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94MTEtY29tbW9uL3hzZXJ2ZXItbm9kbS1pbml0L3hzZXJ2ZXItbm9kbS5zZXJ2aWNlLmluCkBAIC0wLDAgKzEsMTAgQEAKK1tVbml0XQorRGVzY3JpcHRpb249WHNlcnZlciBzdGFydHVwIHdpdGhvdXQgYSBkaXNwbGF5IG1hbmFnZXIKKworW1NlcnZpY2VdCitFbnZpcm9ubWVudEZpbGU9L2V0Yy9kZWZhdWx0L3hzZXJ2ZXItbm9kbQorVXNlcj1AVVNFUkAKK0V4ZWNTdGFydD0vZXRjL3hzZXJ2ZXItbm9kbS9Yc2VydmVyCisKK1tJbnN0YWxsXQorQWxpYXM9ZGlzcGxheS1tYW5hZ2VyLnNlcnZpY2UKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveGlucHV0LWNhbGlicmF0b3IvcG9pbnRlcmNhbC14aW5wdXQvcWVtdWFsbC9wb2ludGVyY2FsLnhpbnB1dCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveGlucHV0LWNhbGlicmF0b3IvcG9pbnRlcmNhbC14aW5wdXQvcWVtdWFsbC9wb2ludGVyY2FsLnhpbnB1dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hODE2ZDZkCi0tLSAvZGV2L251bGwKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94aW5wdXQtY2FsaWJyYXRvci9wb2ludGVyY2FsLXhpbnB1dC9xZW11YWxsL3BvaW50ZXJjYWwueGlucHV0CkBAIC0wLDAgKzEsMiBAQAorIyBEdW1teSBwb2ludGVyY2FsLnhpbnB1dCBmaWxlIHRvIHByZXZlbnQgeGlucHV0X2NhbGlicmF0b3IKKyMgZnJvbSBydW5uaW5nIG9uIHFlbXUgc3RhcnR1cApkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94aW5wdXQtY2FsaWJyYXRvci94aW5wdXQtY2FsaWJyYXRvci9hZGQtZ2VvbWV0cnktaW5wdXQtd2hlbi1jYWxpYnJhdGluZy5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveGlucHV0LWNhbGlicmF0b3IveGlucHV0LWNhbGlicmF0b3IvYWRkLWdlb21ldHJ5LWlucHV0LXdoZW4tY2FsaWJyYXRpbmcucGF0Y2gKaW5kZXggOTM1MTMzMS4uOWRjOTRhZSAxMDA2NDQKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94aW5wdXQtY2FsaWJyYXRvci94aW5wdXQtY2FsaWJyYXRvci9hZGQtZ2VvbWV0cnktaW5wdXQtd2hlbi1jYWxpYnJhdGluZy5wYXRjaAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hpbnB1dC1jYWxpYnJhdG9yL3hpbnB1dC1jYWxpYnJhdG9yL2FkZC1nZW9tZXRyeS1pbnB1dC13aGVuLWNhbGlicmF0aW5nLnBhdGNoCkBAIC0xLDMzICsxLDM0IEBACi1VcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW25vIGxvbmdlciBtYWludGFpbmVkXQotCi1Gcm9tIDkzYWJmMjhkNjAyZGE2MzczNzZiNzhkZThjODhiN2FiNWNmMTNiNGYgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCi1Gcm9tOiBKb25hdGhhbiBEYXZpZCA8am9uYXRoYW4uZGF2aWRAbmkuY29tPgotRGF0ZTogTW9uLCAzMCBOb3YgMjAxNSAxMjoxMjoyMCAtMDYwMAorRnJvbSAxY2I4Mzc1OTYzMmJiMjE4NTU5YzRkMGQ2NWZmNzlmODY4YzAzZGM1IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogIk1heGluIEIuIEpvaG4iIDxtYXhpbi5qb2huQGludGVsLmNvbT4KK0RhdGU6IFR1ZSwgOSBBdWcgMjAxNiAxNzowMzozMSArMDMwMAogU3ViamVjdDogW1BBVENIXSBhZGQgZ2VvbWV0cnkgaW5wdXQgd2hlbiBjYWxpYnJhdGluZwogCiBTZW5kIG1vbml0b3IgZ2VvbWV0cnkgdG8geGlucHV0X2NhbGlicmF0b3Igd2hlbiBydW5uaW5nIHRoZSBzY3JpcHQKK1VwZGF0ZToKKyAgICAgICAgUmVtb3ZlIGJhc2hpc20KKworVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtubyBsb25nZXIgbWFpbnRhaW5lZF0KIAogU2lnbmVkLW9mZi1ieTogSm9uYXRoYW4gRGF2aWQgPGpvbmF0aGFuLmRhdmlkQG5pLmNvbT4KK1NpZ25lZC1vZmYtYnk6IE1heGluIEIuIEpvaG4gPG1heGluLmpvaG5AaW50ZWwuY29tPgogLS0tCi0gc2NyaXB0cy94aW5wdXRfY2FsaWJyYXRvcl9wb2ludGVyY2FsLnNoIHwgNSArKysrLQotIDEgZmlsZSBjaGFuZ2VkLCA0IGluc2VydGlvbnMoKyksIDEgZGVsZXRpb24oLSkKKyBzY3JpcHRzL3hpbnB1dF9jYWxpYnJhdG9yX3BvaW50ZXJjYWwuc2ggfCAzICsrLQorIDEgZmlsZSBjaGFuZ2VkLCAyIGluc2VydGlvbnMoKyksIDEgZGVsZXRpb24oLSkKIAogZGlmZiAtLWdpdCBhL3NjcmlwdHMveGlucHV0X2NhbGlicmF0b3JfcG9pbnRlcmNhbC5zaCBiL3NjcmlwdHMveGlucHV0X2NhbGlicmF0b3JfcG9pbnRlcmNhbC5zaAotaW5kZXggMGFkYTdkYS4uNmEzYWRlZCAxMDA3NTUKK2luZGV4IGZjY2IxOTcuLmZlYTdjMmYgMTAwNzU1CiAtLS0gYS9zY3JpcHRzL3hpbnB1dF9jYWxpYnJhdG9yX3BvaW50ZXJjYWwuc2gKICsrKyBiL3NjcmlwdHMveGlucHV0X2NhbGlicmF0b3JfcG9pbnRlcmNhbC5zaAotQEAgLTM3LDcgKzM3LDEwIEBAIGRvbmUKLSAKLSBbICIkVVNFUiIgIT0gInJvb3QiIF0gJiYgQ0FMRklMRT0kVVNFUl9DQUxGSUxFCitAQCAtMjQsNyArMjQsOCBAQCBpZiBbIC1lICRDQUxGSUxFIF0gOyB0aGVuCisgICBmaQorIGZpCiAgCiAtQ0FMREFUQT1gJEJJTkFSWSAtLW91dHB1dC10eXBlIHhpbnB1dCAtdiB8IHRlZSAkTE9HRklMRSB8IGdyZXAgJyAgICB4aW5wdXQgc2V0JyB8IHNlZCAncy9eICAgIC8vZzsgcy8kLzsvZydgCi0rcmVhZCBSRVNPTFVUSU9OIDw8PCAkKHhyYW5kciB8IGF3ayAtRiAnW1s6c3BhY2U6XStdJyAnLyBjb25uZWN0ZWQvIFwKLSsgIHsgaWYgKCQzICE9ICJwcmltYXJ5IikgcHJpbnQgJDM7IGlmICgkMyA9PSAicHJpbWFyeSIpIHByaW50ICQ0IH0nKQotKworK1JFU09MVVRJT049JCh4cmFuZHIgfCBhd2sgLUYgJ1tbOnNwYWNlOl0rXScgJy8gY29ubmVjdGVkLyB7IGlmICgkMyAhPSAicHJpbWFyeSIpIHByaW50ICQzOyBpZiAoJDMgPT0gInByaW1hcnkiKSBwcmludCAkNCB9JykKICtDQUxEQVRBPWAkQklOQVJZIC0tZ2VvbWV0cnkgJFJFU09MVVRJT04gLS1vdXRwdXQtdHlwZSB4aW5wdXQgLXYgfCB0ZWUgJExPR0ZJTEUgfCBncmVwICcgICAgeGlucHV0IHNldCcgfCBzZWQgJ3MvXiAgICAvL2c7IHMvJC87L2cnYAogIGlmIFsgISAteiAiJENBTERBVEEiIF0gOyB0aGVuCiAgICBlY2hvICRDQUxEQVRBID4gJENBTEZJTEUKICAgIGVjaG8gIkNhbGlicmF0aW9uIGRhdGEgc3RvcmVkIGluICRDQUxGSUxFIChsb2cgaW4gJExPR0ZJTEUpIgogLS0gCi0xLjkuMQorMi40LjAKIApkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94aW5wdXQtY2FsaWJyYXRvci94aW5wdXQtY2FsaWJyYXRvcl9naXQuYmIgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hpbnB1dC1jYWxpYnJhdG9yL3hpbnB1dC1jYWxpYnJhdG9yX2dpdC5iYgppbmRleCBhYzViNzBjLi41N2MzYTdhIDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hpbnB1dC1jYWxpYnJhdG9yL3hpbnB1dC1jYWxpYnJhdG9yX2dpdC5iYgorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hpbnB1dC1jYWxpYnJhdG9yL3hpbnB1dC1jYWxpYnJhdG9yX2dpdC5iYgpAQCAtMzQsNSArMzQsNSBAQAogfQogCiBGSUxFU18ke1BOfSArPSAiJHtzeXNjb25mZGlyfS94ZGcvYXV0b3N0YXJ0IgotUkRFUEVORFNfJHtQTn0gPSAieGlucHV0IGZvcm1mYWN0b3IiCitSREVQRU5EU18ke1BOfSA9ICJ4aW5wdXQgZm9ybWZhY3RvciB4cmFuZHIiCiBSUkVDT01NRU5EU18ke1BOfSA9ICJwb2ludGVyY2FsLXhpbnB1dCIKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1hcHAveGF1dGhfMS4wLjkuYmIgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctYXBwL3hhdXRoXzEuMC45LmJiCmluZGV4IGIxNzNmNGYuLjU5YjMzMjMgMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1hcHAveGF1dGhfMS4wLjkuYmIKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWFwcC94YXV0aF8xLjAuOS5iYgpAQCAtMTAsMyArMTAsNiBAQAogCiBTUkNfVVJJW21kNXN1bV0gPSAiN2Q2MDAzZjMyODM4ZDViNjg4ZTJjOGExMzEwODMyNzEiCiBTUkNfVVJJW3NoYTI1NnN1bV0gPSAiNTZjZTE1MjNlYjQ4YjFmOGE0ZjQyNDRmZTFjM2Q4ZTZhZjFhM2I3ZDRiMGU2MDYzNTgyNDIxYjBiNjhkYzI4ZiIKKworUEFDS0FHRUNPTkZJRyA/Pz0gIiR7QGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCAnaXB2NicsICdpcHY2JywgJycsIGQpfSIKK1BBQ0tBR0VDT05GSUdbaXB2Nl0gPSAiLS1lbmFibGUtaXB2NiwtLWRpc2FibGUtaXB2NiwiCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctYXBwL3hob3N0XzEuMC43LmJiIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWFwcC94aG9zdF8xLjAuNy5iYgppbmRleCA4MjU3MzdmLi5mMjNkMjU4IDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctYXBwL3hob3N0XzEuMC43LmJiCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1hcHAveGhvc3RfMS4wLjcuYmIKQEAgLTE1LDMgKzE1LDYgQEAKIAogU1JDX1VSSVttZDVzdW1dID0gImY1ZDQ5MDczOGIxNDhjYjdmMmZlNzYwZjQwZjkyNTE2IgogU1JDX1VSSVtzaGEyNTZzdW1dID0gIjkzZTYxOWVlMTU0NzFmNTc2Y2ZiMzBjNjYzZTE4ZjViYzcwYWNhNTc3YTYzZDJjMmMwM2YwMDZhNzgzN2MyOWEiCisKK1BBQ0tBR0VDT05GSUcgPz89ICIke0BiYi51dGlscy5jb250YWlucygnRElTVFJPX0ZFQVRVUkVTJywgJ2lwdjYnLCAnaXB2NicsICcnLCBkKX0iCitQQUNLQUdFQ09ORklHW2lwdjZdID0gIi0tZW5hYmxlLWlwdjYsLS1kaXNhYmxlLWlwdjYsIgpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWFwcC94cmFuZHJfMS40LjMuYmIgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctYXBwL3hyYW5kcl8xLjQuMy5iYgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDFiZDQyMC4uMDAwMDAwMAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctYXBwL3hyYW5kcl8xLjQuMy5iYgorKysgL2Rldi9udWxsCkBAIC0xLDE1ICswLDAgQEAKLXJlcXVpcmUgeG9yZy1hcHAtY29tbW9uLmluYwotCi1TVU1NQVJZID0gIlhSYW5kUjogWCBSZXNpemUsIFJvdGF0ZSBhbmQgUmVmbGVjdCBleHRlbnNpb24gY29tbWFuZCIKLQotREVTQ1JJUFRJT04gPSAiWHJhbmRyIGlzIHVzZWQgdG8gc2V0IHRoZSBzaXplLCBvcmllbnRhdGlvbiBhbmQvb3IgXAotcmVmbGVjdGlvbiBvZiB0aGUgb3V0cHV0cyBmb3IgYSBzY3JlZW4uIEl0IGNhbiBhbHNvIHNldCB0aGUgc2NyZWVuIFwKLXNpemUuIgotCi1MSUNFTlNFID0gIk1JVCIKLUxJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PWZlMTYwOGJkYjMzY2Y4YzYyYTQ0MzhmN2QzNDY3OWIzIgotREVQRU5EUyArPSAibGlieHJhbmRyIGxpYnhyZW5kZXIiCi1QRSA9ICIxIgotCi1TUkNfVVJJW21kNXN1bV0gPSAiNDQxZmRiOThkMmFiYzYwNTExMDhiNzA3NWQ5NDhmYzciCi1TUkNfVVJJW3NoYTI1NnN1bV0gPSAiNzE1NGFjMzQ4NmI4NjkyMzY5MmYyZDZjZGIyOTkxYTJlZTcyYmMzMmFmMmM0Mzc5YTZmMWMwNjhmMjA0YmUxYiIKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1hcHAveHJhbmRyXzEuNS4wLmJiIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWFwcC94cmFuZHJfMS41LjAuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWE2ODk3OQotLS0gL2Rldi9udWxsCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1hcHAveHJhbmRyXzEuNS4wLmJiCkBAIC0wLDAgKzEsMTUgQEAKK3JlcXVpcmUgeG9yZy1hcHAtY29tbW9uLmluYworCitTVU1NQVJZID0gIlhSYW5kUjogWCBSZXNpemUsIFJvdGF0ZSBhbmQgUmVmbGVjdCBleHRlbnNpb24gY29tbWFuZCIKKworREVTQ1JJUFRJT04gPSAiWHJhbmRyIGlzIHVzZWQgdG8gc2V0IHRoZSBzaXplLCBvcmllbnRhdGlvbiBhbmQvb3IgXAorcmVmbGVjdGlvbiBvZiB0aGUgb3V0cHV0cyBmb3IgYSBzY3JlZW4uIEl0IGNhbiBhbHNvIHNldCB0aGUgc2NyZWVuIFwKK3NpemUuIgorCitMSUNFTlNFID0gIk1JVCIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PWZlMTYwOGJkYjMzY2Y4YzYyYTQ0MzhmN2QzNDY3OWIzIgorREVQRU5EUyArPSAibGlieHJhbmRyIGxpYnhyZW5kZXIiCitQRSA9ICIxIgorCitTUkNfVVJJW21kNXN1bV0gPSAiZWJmZmFjOTgwMjFiOGYxZGM3MWRhMGMxOTE4ZTliNTciCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiYzFjZmQ0ZTFkNGQ3MDhjMDMxZDYwODAxZTUyN2FiYzliNmQzNGI4NWYyZmZhMmNhZGQyMWY3NWZmMzgxNTFjZCIKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1kcml2ZXIveGY4Ni1pbnB1dC1ldmRldl8yLjEwLjEuYmIgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctZHJpdmVyL3hmODYtaW5wdXQtZXZkZXZfMi4xMC4xLmJiCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjZjc3YWQyLi4wMDAwMDAwCi0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1kcml2ZXIveGY4Ni1pbnB1dC1ldmRldl8yLjEwLjEuYmIKKysrIC9kZXYvbnVsbApAQCAtMSwyMCArMCwwIEBACi1yZXF1aXJlIHhvcmctZHJpdmVyLWlucHV0LmluYwotCi1TVU1NQVJZID0gIlguT3JnIFggc2VydmVyIC0tIGV2ZW50IGRldmljZXMgKGV2ZGV2KSBpbnB1dCBkcml2ZXIiCi0KLURFU0NSSVBUSU9OID0gImV2ZGV2IGlzIGFuIFhvcmcgaW5wdXQgZHJpdmVyIGZvciBMaW51eCdzIGdlbmVyaWMgZXZlbnQgXAotZGV2aWNlcy4gSXQgdGhlcmVmb3JlIHN1cHBvcnRzIGFsbCBpbnB1dCBkZXZpY2VzIHRoYXQgdGhlIGtlcm5lbCBrbm93cyBcCi1hYm91dCwgaW5jbHVkaW5nIG1vc3QgbWljZSBhbmQga2V5Ym9hcmRzLiBcCi1cCi1UaGUgZXZkZXYgZHJpdmVyIGNhbiBzZXJ2ZSBhcyBib3RoIGEgcG9pbnRlciBhbmQgYSBrZXlib2FyZCBpbnB1dCBcCi1kZXZpY2UsIGFuZCBtYXkgYmUgdXNlZCBhcyBib3RoIHRoZSBjb3JlIGtleWJvYXJkIGFuZCB0aGUgY29yZSBwb2ludGVyLiBcCi1NdWx0aXBsZSBpbnB1dCBkZXZpY2VzIGFyZSBzdXBwb3J0ZWQgYnkgbXVsdGlwbGUgaW5zdGFuY2VzIG9mIHRoaXMgXAotZHJpdmVyLCB3aXRoIG9uZSBMb2FkIGRpcmVjdGl2ZSBmb3IgZXZkZXYgaW4gdGhlIE1vZHVsZSBzZWN0aW9uIG9mIHlvdXIgXAoteG9yZy5jb25mIGZvciBlYWNoIGlucHV0IGRldmljZSB0aGF0IHdpbGwgdXNlIHRoaXMgZHJpdmVyLiAiCi0KLUxJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PWZlZmUzM2IxY2YwY2FjYmEwZTcyZTNiMGZhMGYwZTE2IgotCi1ERVBFTkRTICs9ICJtdGRldiBsaWJldmRldiIKLQotU1JDX1VSSVttZDVzdW1dID0gIjk2ZDg5ZDk0MDZhMDJmNWUzNmJkYWE0ZWRkOWEyNDNhIgotU1JDX1VSSVtzaGEyNTZzdW1dID0gImFmOWMyYjQ3ZjViMjcyYWU1NmI0NWRhNmJkODQ2MTBmYzlhM2Q4MGE0YjMyYzgyMTU4NDJhMzlkODYyZGUwMTciCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctZHJpdmVyL3hmODYtaW5wdXQtZXZkZXZfMi4xMC4zLmJiIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWRyaXZlci94Zjg2LWlucHV0LWV2ZGV2XzIuMTAuMy5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mODFjM2VjCi0tLSAvZGV2L251bGwKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWRyaXZlci94Zjg2LWlucHV0LWV2ZGV2XzIuMTAuMy5iYgpAQCAtMCwwICsxLDIwIEBACityZXF1aXJlIHhvcmctZHJpdmVyLWlucHV0LmluYworCitTVU1NQVJZID0gIlguT3JnIFggc2VydmVyIC0tIGV2ZW50IGRldmljZXMgKGV2ZGV2KSBpbnB1dCBkcml2ZXIiCisKK0RFU0NSSVBUSU9OID0gImV2ZGV2IGlzIGFuIFhvcmcgaW5wdXQgZHJpdmVyIGZvciBMaW51eCdzIGdlbmVyaWMgZXZlbnQgXAorZGV2aWNlcy4gSXQgdGhlcmVmb3JlIHN1cHBvcnRzIGFsbCBpbnB1dCBkZXZpY2VzIHRoYXQgdGhlIGtlcm5lbCBrbm93cyBcCithYm91dCwgaW5jbHVkaW5nIG1vc3QgbWljZSBhbmQga2V5Ym9hcmRzLiBcCitcCitUaGUgZXZkZXYgZHJpdmVyIGNhbiBzZXJ2ZSBhcyBib3RoIGEgcG9pbnRlciBhbmQgYSBrZXlib2FyZCBpbnB1dCBcCitkZXZpY2UsIGFuZCBtYXkgYmUgdXNlZCBhcyBib3RoIHRoZSBjb3JlIGtleWJvYXJkIGFuZCB0aGUgY29yZSBwb2ludGVyLiBcCitNdWx0aXBsZSBpbnB1dCBkZXZpY2VzIGFyZSBzdXBwb3J0ZWQgYnkgbXVsdGlwbGUgaW5zdGFuY2VzIG9mIHRoaXMgXAorZHJpdmVyLCB3aXRoIG9uZSBMb2FkIGRpcmVjdGl2ZSBmb3IgZXZkZXYgaW4gdGhlIE1vZHVsZSBzZWN0aW9uIG9mIHlvdXIgXAoreG9yZy5jb25mIGZvciBlYWNoIGlucHV0IGRldmljZSB0aGF0IHdpbGwgdXNlIHRoaXMgZHJpdmVyLiAiCisKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PWZlZmUzM2IxY2YwY2FjYmEwZTcyZTNiMGZhMGYwZTE2IgorCitERVBFTkRTICs9ICJtdGRldiBsaWJldmRldiIKKworU1JDX1VSSVttZDVzdW1dID0gImFhMzM2M2NlNTA2MWQwYzRkMWU3ZjcwMTliOTk3MTZkIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjVhYTIxYmE0YmU4ZGY5MjdlNTY3NmE5OWM3ZjRmMDM0M2FiYzA4OWY1NDUxYjdlNzNlMzk1MzZmMjliMzMyYTIiCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctZHJpdmVyL3hmODYtaW5wdXQtbGliaW5wdXRfMC4xNi4wLmJiIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWRyaXZlci94Zjg2LWlucHV0LWxpYmlucHV0XzAuMTYuMC5iYgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDI1MmJhZi4uMDAwMDAwMAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctZHJpdmVyL3hmODYtaW5wdXQtbGliaW5wdXRfMC4xNi4wLmJiCisrKyAvZGV2L251bGwKQEAgLTEsMTEgKzAsMCBAQAotcmVxdWlyZSB4b3JnLWRyaXZlci1pbnB1dC5pbmMKLQotU1VNTUFSWSA9ICJHZW5lcmljIGlucHV0IGRyaXZlciBmb3IgdGhlIFguT3JnIHNlcnZlciBiYXNlZCBvbiBsaWJpbnB1dCIKLUxJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PTVlNmIyMGVhMmVmOTRhOTk4MTQ1ZjBlYTNmNzg4ZWUwIgotCi1ERVBFTkRTICs9ICJsaWJpbnB1dCIKLQotU1JDX1VSSVttZDVzdW1dID0gIjJjOGNiNTIwZjg4ZGE3YmFmYWNlZWJjMGIzNGVhMWQ0IgotU1JDX1VSSVtzaGEyNTZzdW1dID0gImZkYWRlNTMxZTkxZTc5YWNmNmRjZThhYzU1ZmE0ZjY1YWJlM2YxMzU4YzVkM2Q3NzdhZTQ4ZGJjNzRiNzZmNDkiCi0KLUZJTEVTXyR7UE59ICs9ICIke2RhdGFkaXJ9L1gxMS94b3JnLmNvbmYuZCIKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1kcml2ZXIveGY4Ni1pbnB1dC1saWJpbnB1dF8wLjE5LjAuYmIgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctZHJpdmVyL3hmODYtaW5wdXQtbGliaW5wdXRfMC4xOS4wLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVlNWM0NzEKLS0tIC9kZXYvbnVsbAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctZHJpdmVyL3hmODYtaW5wdXQtbGliaW5wdXRfMC4xOS4wLmJiCkBAIC0wLDAgKzEsMTEgQEAKK3JlcXVpcmUgeG9yZy1kcml2ZXItaW5wdXQuaW5jCisKK1NVTU1BUlkgPSAiR2VuZXJpYyBpbnB1dCBkcml2ZXIgZm9yIHRoZSBYLk9yZyBzZXJ2ZXIgYmFzZWQgb24gbGliaW5wdXQiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT01ZTZiMjBlYTJlZjk0YTk5ODE0NWYwZWEzZjc4OGVlMCIKKworREVQRU5EUyArPSAibGliaW5wdXQiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICI1MmMzOGIxMzY5NzY0MjQzYmZjZjZlYWQxZTRjNmQzMiIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICI2YzVkMzBkYzdjOGI4YWUzNDI2MTM0MGUxZGM5Y2JiOGVmNDM1MDc4ZTA4NGI4ZWY1MDc1MjdhOGEyMWFmNDc3IgorCitGSUxFU18ke1BOfSArPSAiJHtkYXRhZGlyfS9YMTEveG9yZy5jb25mLmQiCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctZHJpdmVyL3hmODYtaW5wdXQtdm1tb3VzZV8xMy4xLjAuYmIgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctZHJpdmVyL3hmODYtaW5wdXQtdm1tb3VzZV8xMy4xLjAuYmIKaW5kZXggODYxNWI0OC4uOTJhMWIyNSAxMDA2NDQKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWRyaXZlci94Zjg2LWlucHV0LXZtbW91c2VfMTMuMS4wLmJiCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1kcml2ZXIveGY4Ni1pbnB1dC12bW1vdXNlXzEzLjEuMC5iYgpAQCAtMjMsNCArMjMsNCBAQAogCiBFWFRSQV9PRUNPTkYgPSAiLS13aXRoLXVkZXYtcnVsZXMtZGlyPSR7bm9uYXJjaF9iYXNlX2xpYmRpcn0vdWRldi9ydWxlcy5kIgogCi1GSUxFU18ke1BOfSArPSAiJHtub25hcmNoX2Jhc2VfbGliZGlyfS91ZGV2L3J1bGVzLmQvICR7ZGF0YWRpcn0vWDExL3hvcmcuY29uZi5kIgorRklMRVNfJHtQTn0gKz0gIiR7ZGF0YWRpcn0vWDExL3hvcmcuY29uZi5kIgpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWRyaXZlci94Zjg2LXZpZGVvLWludGVsLzAwMDEtZ2VuOC1GaXgtdGhlLVlVVi1SR0Itc2hhZGVyLnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWRyaXZlci94Zjg2LXZpZGVvLWludGVsLzAwMDEtZ2VuOC1GaXgtdGhlLVlVVi1SR0Itc2hhZGVyLnBhdGNoCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzNTc2MjE5Li4wMDAwMDAwCi0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1kcml2ZXIveGY4Ni12aWRlby1pbnRlbC8wMDAxLWdlbjgtRml4LXRoZS1ZVVYtUkdCLXNoYWRlci5wYXRjaAorKysgL2Rldi9udWxsCkBAIC0xLDY1ICswLDAgQEAKLUZyb20gYzQzNjE3YjczOWUzNTgwNjQzOTY5MTJjN2E3YTgwMjhjYTkxZDIwMSBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKLUZyb206ID0/VVRGLTg/cT9WaWxsZT0yMFN5cmo9QzM9QTRsPUMzPUE0Pz0gPHZpbGxlLnN5cmphbGFAbGludXguaW50ZWwuY29tPgotRGF0ZTogVGh1LCAxNiBBcHIgMjAxNSAyMDo0MDozOSArMDMwMAotU3ViamVjdDogW1BBVENIXSBnZW44OiBGaXggdGhlIFlVVi0+UkdCIHNoYWRlcgotTUlNRS1WZXJzaW9uOiAxLjAKLUNvbnRlbnQtVHlwZTogdGV4dC9wbGFpbjsgY2hhcnNldD1VVEYtOAotQ29udGVudC1UcmFuc2Zlci1FbmNvZGluZzogOGJpdAotCi1Vc2UgdGhlIGNvcnJlY3QgcmVnaXN0ZXIgKFluXzAxKSB3aXRoIGZpcnN0IGhhbGYgb2YgdGhlCi1ZIHNhbXBsZXMgaW5zdGVhZCBvZiB1c2luZyB0aGUgcmVnaXN0ZXIgKFluXzIzKSB3aXRoIHRoZQotc2Vjb25kIGhhbGYgdHdpY2Ugd2hlbiBjb21wdXRpbmcgdGhlIGdyZWVuIGNoYW5uZWwuCi0KLUFsc28gdXNlIHRoZSBZbl8wMSByZWdpc3RlciBuYW1lIGluc3RlYWQgb2YgWW4gZm9yIHRoZSByZWQKLWNoYW5uZWwgYXMgd2VsbCwganVzdCBmb3IgYSBiaXQgb2YgZXh0cmEgY29uc2lzdGVuY3kuCi0KLUJ1Z3ppbGxhOiBodHRwczovL2J1Z3MuZnJlZWRlc2t0b3Aub3JnL3Nob3dfYnVnLmNnaT9pZD04OTgwNwotU2lnbmVkLW9mZi1ieTogVmlsbGUgU3lyasOkbMOkIDx2aWxsZS5zeXJqYWxhQGxpbnV4LmludGVsLmNvbT4KLVRlc3RlZC1ieTogQ2hyaXMgV2lsc29uIDxjaHJpc0BjaHJpcy13aWxzb24uY28udWs+Ci0KLVVwc3RyZWFtLVN0YXR1czogQmFja3BvcnQKLVNpZ25lZC1vZmYtYnk6IFNhdWwgV29sZCA8c2d3QGxpbnV4LmludGVsLmNvbT4KLQotLS0tCi0gc3JjL3JlbmRlcl9wcm9ncmFtL2V4YV93bV95dXZfcmdiLmc4YSB8IDQgKystLQotIHNyYy9yZW5kZXJfcHJvZ3JhbS9leGFfd21feXV2X3JnYi5nOGIgfCAyICstCi0gMiBmaWxlcyBjaGFuZ2VkLCAzIGluc2VydGlvbnMoKyksIDMgZGVsZXRpb25zKC0pCi0KLWRpZmYgLS1naXQgYS9zcmMvcmVuZGVyX3Byb2dyYW0vZXhhX3dtX3l1dl9yZ2IuZzhhIGIvc3JjL3JlbmRlcl9wcm9ncmFtL2V4YV93bV95dXZfcmdiLmc4YQotaW5kZXggN2RlZjA5My4uMzQ5NzNiYSAxMDA2NDQKLS0tLSBhL3NyYy9yZW5kZXJfcHJvZ3JhbS9leGFfd21feXV2X3JnYi5nOGEKLSsrKyBiL3NyYy9yZW5kZXJfcHJvZ3JhbS9leGFfd21feXV2X3JnYi5nOGEKLUBAIC03Niw3ICs3Niw3IEBAIGFkZCAoMTYpICAgIENibjwxPkYJCUNiPDgsOCwxPkYJLTAuNTAxOTYxRiAgeyBjb21wciBhbGlnbjEgfTsKLSAgICAgLyogCi0gICAgICAqIFIgPSBZICsgQ3IgKiAxLjU5NgotICAgICAgKi8KLS1tb3YgKDgpICAgIGFjYzA8MT5GCQlZbjw4LDgsMT5GCQkgICAgeyBjb21wciBhbGlnbjEgfTsKLSttb3YgKDgpICAgIGFjYzA8MT5GCQlZbl8wMTw4LDgsMT5GCQkgICAgeyBjb21wciBhbGlnbjEgfTsKLSBtYWMuc2F0KDgpIHNyY19zYW1wbGVfcl8wMTwxPkYJQ3JuXzAxPDgsOCwxPkYJMS41OTZGCSAgICB7IGNvbXByIGFsaWduMSB9OwotICAgICAgCi0gbW92ICg4KSAgICBhY2MwPDE+RgkJWW5fMjM8OCw4LDE+RgkJICAgIHsgY29tcHIgYWxpZ24xIH07Ci1AQCAtODQsNyArODQsNyBAQCBtYWMuc2F0KDgpIHNyY19zYW1wbGVfcl8yMzwxPkYJQ3JuXzIzPDgsOCwxPkYJMS41OTZGCSAgICB7IGNvbXByIGFsaWduMSB9OwotICAgICAvKgotICAgICAgKiBHID0gQ3JuICogLTAuODEzICsgQ2JuICogLTAuMzkyICsgWQotICAgICAgKi8KLS1tb3YgKDgpICAgIGFjYzA8MT5GCQlZbl8yMzw4LDgsMT5GCQkgICAgeyBjb21wciBhbGlnbjEgfTsKLSttb3YgKDgpICAgIGFjYzA8MT5GCQlZbl8wMTw4LDgsMT5GCQkgICAgeyBjb21wciBhbGlnbjEgfTsKLSBtYWMgKDgpICAgIGFjYzA8MT5GCQlDcm5fMDE8OCw4LDE+RiAgICAJLTAuODEzRgkgICAgeyBjb21wciBhbGlnbjEgfTsKLSBtYWMuc2F0KDgpIHNyY19zYW1wbGVfZ18wMTwxPkYJQ2JuXzAxPDgsOCwxPkYgICAgCS0wLjM5MkYJICAgIHsgY29tcHIgYWxpZ24xIH07Ci0gCi1kaWZmIC0tZ2l0IGEvc3JjL3JlbmRlcl9wcm9ncmFtL2V4YV93bV95dXZfcmdiLmc4YiBiL3NyYy9yZW5kZXJfcHJvZ3JhbS9leGFfd21feXV2X3JnYi5nOGIKLWluZGV4IDQ0OTQ5NTMuLjJjZDZmYzQgMTAwNjQ0Ci0tLS0gYS9zcmMvcmVuZGVyX3Byb2dyYW0vZXhhX3dtX3l1dl9yZ2IuZzhiCi0rKysgYi9zcmMvcmVuZGVyX3Byb2dyYW0vZXhhX3dtX3l1dl9yZ2IuZzhiCi1AQCAtNiw3ICs2LDcgQEAKLSAgICB7IDB4ODA2MDAwNDgsIDB4MjFjMDNhZTgsIDB4M2U4ZDAyYzAsIDB4M2ZjYzQ5YmEgfSwKLSAgICB7IDB4MDA2MDAwMDEsIDB4MjQwMDNhZTAsIDB4MDA4ZDAzMjAsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4ODA2MDAwNDgsIDB4MjFlMDNhZTgsIDB4M2U4ZDAyZTAsIDB4M2ZjYzQ5YmEgfSwKLS0gICB7IDB4MDA2MDAwMDEsIDB4MjQwMDNhZTAsIDB4MDA4ZDAzMjAsIDB4MDAwMDAwMDAgfSwKLSsgICB7IDB4MDA2MDAwMDEsIDB4MjQwMDNhZTAsIDB4MDA4ZDAzMDAsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDA2MDAwNDgsIDB4MjQwMDNhZTAsIDB4M2U4ZDAyYzAsIDB4YmY1MDIwYzUgfSwKLSAgICB7IDB4ODA2MDAwNDgsIDB4MjIwMDNhZTgsIDB4M2U4ZDAzNDAsIDB4YmVjOGI0MzkgfSwKLSAgICB7IDB4MDA2MDAwMDEsIDB4MjQwMDNhZTAsIDB4MDA4ZDAzMjAsIDB4MDAwMDAwMDAgfSwKLS0tIAotMi41LjAKLQpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWRyaXZlci94Zjg2LXZpZGVvLWludGVsLzAwMDEtdXhhLWZpeC10aGUtY2FsbC10by1QaXhtYXBTeW5jRGlydHlIZWxwZXItYnJva2VuLWJ5LS5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1kcml2ZXIveGY4Ni12aWRlby1pbnRlbC8wMDAxLXV4YS1maXgtdGhlLWNhbGwtdG8tUGl4bWFwU3luY0RpcnR5SGVscGVyLWJyb2tlbi1ieS0ucGF0Y2gKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDI5OTI0YmIuLjAwMDAwMDAKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWRyaXZlci94Zjg2LXZpZGVvLWludGVsLzAwMDEtdXhhLWZpeC10aGUtY2FsbC10by1QaXhtYXBTeW5jRGlydHlIZWxwZXItYnJva2VuLWJ5LS5wYXRjaAorKysgL2Rldi9udWxsCkBAIC0xLDMwICswLDAgQEAKLUZyb20gMmM1MDYzOTM4Y2M4MDlmNjI0ZTU2ZWZkNDY3MzA0MWZhODE0MWU4MSBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKLUZyb206IE1hcnRpbiBQZXJlcyA8bWFydGluLnBlcmVzQGxpbnV4LmludGVsLmNvbT4KLURhdGU6IFRodSwgOSBKdWwgMjAxNSAxMToyNjozOCArMDMwMAotU3ViamVjdDogW1BBVENIXSB1eGE6IGZpeCB0aGUgY2FsbCB0byBQaXhtYXBTeW5jRGlydHlIZWxwZXIsIGJyb2tlbiBieQotIHhzZXJ2ZXIncyA5MGRiNWVkCi0KLVtpY2tsZTogc3dpdGNoIHRvIEhBU19ESVJUWVRSQUNLSU5HX1JPVEFUSU9OIGFzIHN1Z2dlc3RlZCBieSBEYXZlIEFpcmxpZV0KLVNpZ25lZC1vZmYtYnk6IE1hcnRpbiBQZXJlcyA8bWFydGluLnBlcmVzQGxpbnV4LmludGVsLmNvbT4KLQotVXBzdHJlYW0tU3RhdHVzOiBCYWNrcG9ydAotU2lnbmVkLW9mZi1ieTogU2F1bCBXb2xkIDxzZ3dAbGludXguaW50ZWwuY29tPgotLS0tCi0gc3JjL2NvbXBhdC1hcGkuaCB8IDQgKysrKwotIDEgZmlsZSBjaGFuZ2VkLCA0IGluc2VydGlvbnMoKykKLQotZGlmZiAtLWdpdCBhL3NyYy9jb21wYXQtYXBpLmggYi9zcmMvY29tcGF0LWFwaS5oCi1pbmRleCBhYTkzYmVlLi4yOTNlOWQ3IDEwMDY0NAotLS0tIGEvc3JjL2NvbXBhdC1hcGkuaAotKysrIGIvc3JjL2NvbXBhdC1hcGkuaAotQEAgLTI0NywzICsyNDcsNyBAQCBzdGF0aWMgaW5saW5lIHZvaWQgRnJlZVBpeG1hcChQaXhtYXBQdHIgcGl4bWFwKQotICNlbmRpZgotIAotICNlbmRpZgotKwotKyNpZiBIQVNfRElSVFlUUkFDS0lOR19ST1RBVElPTgotKyNkZWZpbmUgUGl4bWFwU3luY0RpcnR5SGVscGVyKGQsIGRkKSBQaXhtYXBTeW5jRGlydHlIZWxwZXIoZCkKLSsjZW5kaWYKLS0tIAotMi41LjAKLQpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWRyaXZlci94Zjg2LXZpZGVvLWludGVsL2Rpc2FibGUteDExLWRyaTMucGF0Y2ggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctZHJpdmVyL3hmODYtdmlkZW8taW50ZWwvZGlzYWJsZS14MTEtZHJpMy5wYXRjaAppbmRleCBkZGE1MDhkLi4zZGRkZDMzIDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctZHJpdmVyL3hmODYtdmlkZW8taW50ZWwvZGlzYWJsZS14MTEtZHJpMy5wYXRjaAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctZHJpdmVyL3hmODYtdmlkZW8taW50ZWwvZGlzYWJsZS14MTEtZHJpMy5wYXRjaApAQCAtMTIsNiArMTIsNiBAQAogaW5kZXggYmQ2NTRmMy4uNzhhMGUwZCAxMDA2NDQKIC0tLSBhL2NvbmZpZ3VyZS5hYwogKysrIGIvY29uZmlndXJlLmFjCi1AQCAtMjUxICsyNTEgQEAgZmkKLS1QS0dfQ0hFQ0tfTU9EVUxFUyhYMTFfRFJJMywgW3hjYi1kcmkzIHhjYi1zeW5jIHhjYi1wcmVzZW50IHgxMS14Y2IgeHNobWZlbmNlIHgxMSB4cmVuZGVyIHhleHQgbGliZHJtXSwgW3gxMV9kcmkzPSJ5ZXMiXSwgW3gxMV9kcmkzPSJubyJdKQotKyNQS0dfQ0hFQ0tfTU9EVUxFUyhYMTFfRFJJMywgW3hjYi1kcmkzIHhjYi1zeW5jIHhjYi1wcmVzZW50IHgxMS14Y2IgeHNobWZlbmNlIHgxMSB4cmVuZGVyIHhleHQgbGliZHJtXSwgW3gxMV9kcmkzPSJ5ZXMiXSwgW3gxMV9kcmkzPSJubyJdKQorQEAgLTI3OSArMjc5IEBAIGZpCistUEtHX0NIRUNLX01PRFVMRVMoWDExX0RSSTMsIFt4Y2ItZHJpMyB4Y2Itc3luYyB4Y2IteGZpeGVzIHhjYi1wcmVzZW50IHgxMS14Y2IgeHNobWZlbmNlIHgxMSB4Y29tcG9zaXRlIHhkYW1hZ2UgeHJlbmRlciB4cmFuZHIgeHhmODZ2bSB4ZXh0IGxpYmRybV0sIFt4MTFfZHJpMz0ieWVzIl0sIFt4MTFfZHJpMz0ibm8iXSkKKysjUEtHX0NIRUNLX01PRFVMRVMoWDExX0RSSTMsIFt4Y2ItZHJpMyB4Y2Itc3luYyB4Y2IteGZpeGVzIHhjYi1wcmVzZW50IHgxMS14Y2IgeHNobWZlbmNlIHgxMSB4Y29tcG9zaXRlIHhkYW1hZ2UgeHJlbmRlciB4cmFuZHIgeHhmODZ2bSB4ZXh0IGxpYmRybV0sIFt4MTFfZHJpMz0ieWVzIl0sIFt4MTFfZHJpMz0ibm8iXSkKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1kcml2ZXIveGY4Ni12aWRlby1pbnRlbC9zbmEtUHJvdGVjdC1hZ2FpbnN0LUFCSS1icmVha2FnZS1pbi1yZWNlbnQtdmVyc2lvbnMtLnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWRyaXZlci94Zjg2LXZpZGVvLWludGVsL3NuYS1Qcm90ZWN0LWFnYWluc3QtQUJJLWJyZWFrYWdlLWluLXJlY2VudC12ZXJzaW9ucy0ucGF0Y2gKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDU4OWQ1MmUuLjAwMDAwMDAKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWRyaXZlci94Zjg2LXZpZGVvLWludGVsL3NuYS1Qcm90ZWN0LWFnYWluc3QtQUJJLWJyZWFrYWdlLWluLXJlY2VudC12ZXJzaW9ucy0ucGF0Y2gKKysrIC9kZXYvbnVsbApAQCAtMSw3MCArMCwwIEBACi1Gcm9tIDdmZTJiMjk0ODY1MjQ0M2ZmNDNkOTA3ODU1YmQ3YTA1MWQ1NGQzMDkgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCi1Gcm9tOiBDaHJpcyBXaWxzb24gPGNocmlzQGNocmlzLXdpbHNvbi5jby51az4KLURhdGU6IFRodSwgMTkgTWFyIDIwMTUgMjM6MTQ6MTcgKzAwMDAKLVN1YmplY3Q6IFtQQVRDSF0gc25hOiBQcm90ZWN0IGFnYWluc3QgQUJJIGJyZWFrYWdlIGluIHJlY2VudCB2ZXJzaW9ucyBvZgotIGxpYmRybQotCi1jb21taXQgN2ZlMmIyOTQ4NjUyNDQzZmY0M2Q5MDc4NTViZDdhMDUxZDU0ZDMwOSB1cHN0cmVhbS4KLQotU2lnbmVkLW9mZi1ieTogQ2hyaXMgV2lsc29uIDxjaHJpc0BjaHJpcy13aWxzb24uY28udWs+Ci1VcHN0cmVhbS1TdGF0dXM6IEJhY2twb3J0Ci1TaWduZWQtb2ZmLWJ5OiBQYXVsIEdvcnRtYWtlciA8cGF1bC5nb3J0bWFrZXJAd2luZHJpdmVyLmNvbT4KLQotZGlmZiAtLWdpdCBhL3NyYy9zbmEva2dlbS5jIGIvc3JjL3NuYS9rZ2VtLmMKLWluZGV4IDExZjA4MjhmMmJiYy4uNmYxNmNiYWM4N2YyIDEwMDY0NAotLS0tIGEvc3JjL3NuYS9rZ2VtLmMKLSsrKyBiL3NyYy9zbmEva2dlbS5jCi1AQCAtMTgyLDYgKzE4MiwxNSBAQCBzdHJ1Y3QgbG9jYWxfaTkxNV9nZW1fY2FjaGluZyB7Ci0gI2RlZmluZSBMT0NBTF9JT0NUTF9JOTE1X0dFTV9TRVRfQ0FDSElORyBEUk1fSU9XKERSTV9DT01NQU5EX0JBU0UgKyBMT0NBTF9JOTE1X0dFTV9TRVRfQ0FDSElORywgc3RydWN0IGxvY2FsX2k5MTVfZ2VtX2NhY2hpbmcpCi0gI2RlZmluZSBMT0NBTF9JT0NUTF9JOTE1X0dFTV9HRVRfQ0FDSElORyBEUk1fSU9XKERSTV9DT01NQU5EX0JBU0UgKyBMT0NBTF9JOTE1X0dFTV9HRVRfQ0FDSElORywgc3RydWN0IGxvY2FsX2k5MTVfZ2VtX2NhY2hpbmcpCi0gCi0rc3RydWN0IGxvY2FsX2k5MTVfZ2VtX21tYXAgewotKwl1aW50MzJfdCBoYW5kbGU7Ci0rCXVpbnQzMl90IHBhZDsKLSsJdWludDY0X3Qgb2Zmc2V0OwotKwl1aW50NjRfdCBzaXplOwotKwl1aW50NjRfdCBhZGRyX3B0cjsKLSt9OwotKyNkZWZpbmUgTE9DQUxfSU9DVExfSTkxNV9HRU1fTU1BUCBEUk1fSU9XUihEUk1fQ09NTUFORF9CQVNFICsgRFJNX0k5MTVfR0VNX01NQVAsIHN0cnVjdCBsb2NhbF9pOTE1X2dlbV9tbWFwKQotKwotIHN0cnVjdCBsb2NhbF9pOTE1X2dlbV9tbWFwMiB7Ci0gCXVpbnQzMl90IGhhbmRsZTsKLSAJdWludDMyX3QgcGFkOwotQEAgLTUxNCwxNSArNTIzLDE1IEBAIHJldHJ5X3djOgotIAotIHN0YXRpYyB2b2lkICpfX2tnZW1fYm9fbWFwX19jcHUoc3RydWN0IGtnZW0gKmtnZW0sIHN0cnVjdCBrZ2VtX2JvICpibykKLSB7Ci0tCXN0cnVjdCBkcm1faTkxNV9nZW1fbW1hcCBtbWFwX2FyZzsKLSsJc3RydWN0IGxvY2FsX2k5MTVfZ2VtX21tYXAgYXJnOwotIAlpbnQgZXJyOwotIAotIHJldHJ5OgotLQlWR19DTEVBUihtbWFwX2FyZyk7Ci0tCW1tYXBfYXJnLmhhbmRsZSA9IGJvLT5oYW5kbGU7Ci0tCW1tYXBfYXJnLm9mZnNldCA9IDA7Ci0tCW1tYXBfYXJnLnNpemUgPSBieXRlcyhibyk7Ci0tCWlmICgoZXJyID0gZG9faW9jdGwoa2dlbS0+ZmQsIERSTV9JT0NUTF9JOTE1X0dFTV9NTUFQLCAmbW1hcF9hcmcpKSkgewotKwlWR19DTEVBUihhcmcpOwotKwlhcmcuaGFuZGxlID0gYm8tPmhhbmRsZTsKLSsJYXJnLm9mZnNldCA9IDA7Ci0rCWFyZy5zaXplID0gYnl0ZXMoYm8pOwotKwlpZiAoKGVyciA9IGRvX2lvY3RsKGtnZW0tPmZkLCBMT0NBTF9JT0NUTF9JOTE1X0dFTV9NTUFQLCAmYXJnKSkpIHsKLSAJCWFzc2VydChlcnIgIT0gRUlOVkFMKTsKLSAKLSAJCWlmIChfX2tnZW1fdGhyb3R0bGVfcmV0aXJlKGtnZW0sIDApKQotQEAgLTUzNiwxMCArNTQ1LDEwIEBAIHJldHJ5OgotIAkJcmV0dXJuIE5VTEw7Ci0gCX0KLSAKLS0JVkcoVkFMR1JJTkRfTUFLRV9NRU1fREVGSU5FRChtbWFwX2FyZy5hZGRyX3B0ciwgYnl0ZXMoYm8pKSk7Ci0rCVZHKFZBTEdSSU5EX01BS0VfTUVNX0RFRklORUQoYXJnLmFkZHJfcHRyLCBieXRlcyhibykpKTsKLSAKLSAJREJHKCgiJXM6IGNhY2hpbmcgQ1BVIHZtYSBmb3IgJWRcbiIsIF9fRlVOQ1RJT05fXywgYm8tPmhhbmRsZSkpOwotLQlyZXR1cm4gYm8tPm1hcF9fY3B1ID0gKHZvaWQgKikodWludHB0cl90KW1tYXBfYXJnLmFkZHJfcHRyOwotKwlyZXR1cm4gYm8tPm1hcF9fY3B1ID0gKHZvaWQgKikodWludHB0cl90KWFyZy5hZGRyX3B0cjsKLSB9Ci0gCi0gc3RhdGljIGludCBnZW1fd3JpdGUoaW50IGZkLCB1aW50MzJfdCBoYW5kbGUsCi0tLSAKLTIuNC40Ci0KZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1kcml2ZXIveGY4Ni12aWRlby1pbnRlbC91ZGV2LWZzdGF0LnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWRyaXZlci94Zjg2LXZpZGVvLWludGVsL3VkZXYtZnN0YXQucGF0Y2gKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDBlNjc1ZWUuLjAwMDAwMDAKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWRyaXZlci94Zjg2LXZpZGVvLWludGVsL3VkZXYtZnN0YXQucGF0Y2gKKysrIC9kZXYvbnVsbApAQCAtMSw1OSArMCwwIEBACi1VcHN0cmVhbS1TdGF0dXM6IEJhY2twb3J0Ci1TaWduZWQtb2ZmLWJ5OiBSb3NzIEJ1cnRvbiA8cm9zcy5idXJ0b25AaW50ZWwuY29tPgotCi1Gcm9tIDEyYWY4YTU3NWQxNTE4ZDQwNDE2ZjgzMTk1MDQ5MTU3YzNhMDYyYTUgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCi1Gcm9tOiBDaHJpcyBXaWxzb24gPGNocmlzQGNocmlzLXdpbHNvbi5jby51az4KLURhdGU6IFR1ZSwgMjQgRmViIDIwMTUgMTU6MjU6NDAgKzAwMDAKLVN1YmplY3Q6IHNuYTogdWRldiBpbnRlZ3JhdGlvbiBkZXBlbmRzIG9uIGZzdGF0IGFuZCBzeXMvc3RhdC5oCi0KLXNyYy9zbmEvc25hX2RyaXZlci5jOiBJbiBmdW5jdGlvbiAnc25hX2hhbmRsZV91ZXZlbnRzJzoKLXNyYy9zbmEvc25hX2RyaXZlci5jOjc1OToyOiBlcnJvcjogaW1wbGljaXQgZGVjbGFyYXRpb24gb2YgZnVuY3Rpb24gJ2ZzdGF0JyBbLVdlcnJvcj1pbXBsaWNpdC1mdW5jdGlvbi1kZWNsYXJhdGlvbl0KLQotQWxzbyB0YWtlIHRoZSBvcHBvcnR1bml0eSB0byBpbmNsdWRlIHVkZXYgc3VwcG9ydCBpbiB0aGUgY29uZmlndXJlCi1zdW1tYXJ5LgotCi1TaWduZWQtb2ZmLWJ5OiBDaHJpcyBXaWxzb24gPGNocmlzQGNocmlzLXdpbHNvbi5jby51az4KLQotZGlmZiAtLWdpdCBhL2NvbmZpZ3VyZS5hYyBiL2NvbmZpZ3VyZS5hYwotaW5kZXggNzQ3NmUyYi4uZGUzYTRiMyAxMDA2NDQKLS0tLSBhL2NvbmZpZ3VyZS5hYwotKysrIGIvY29uZmlndXJlLmFjCi1AQCAtMTk3LDExICsxOTcsMTUgQEAgQUNfQVJHX0VOQUJMRSh1ZGV2LAotIAotIGlmIHRlc3QgIngkVURFViIgIT0gInhubyI7IHRoZW4KLSAJUEtHX0NIRUNLX01PRFVMRVMoVURFViwgW2xpYnVkZXZdLCBbdWRldj0ieWVzIl0sIFt1ZGV2PSJubyJdKQotKwlBQ19DSEVDS19IRUFERVJTKFtzeXMvc3RhdC5oXSwgW10sIFt1ZGV2PSJubyJdKQotIAlpZiB0ZXN0ICJ4JFVERVYiID0gInh5ZXMiIC1hICJ4JHVkZXYiICE9ICJ4eWVzIjsgdGhlbgotIAkJQUNfTVNHX0VSUk9SKFt1ZGV2IHN1cHBvcnQgcmVxdWVzdGVkIGJ1dCBub3QgZm91bmQgKGxpYnVkZXYpXSkKLSAJZmkKLSAJaWYgdGVzdCAieCR1ZGV2IiA9ICJ4eWVzIjsgdGhlbgotIAkJQUNfREVGSU5FKEhBVkVfVURFViwxLFtFbmFibGUgdWRldi1iYXNlZCBtb25pdG9yIGhvdHBsdWcgZGV0ZWN0aW9uXSkKLSsJCXVkZXZfbXNnPSIgeWVzIgotKwllbHNlCi0rCQl1ZGV2X21zZz0iIG5vIgotIAlmaQotIGZpCi0gCi1AQCAtOTExLDYgKzkxNSw3IEBAIGVjaG8gIiAgU3VwcG9ydCBmb3IgS2VybmVsIE1vZGUgU2V0dGluZz8gJEtNUyIKLSBlY2hvICIgIFN1cHBvcnQgZm9yIGxlZ2FjeSBVc2VyIE1vZGUgU2V0dGluZyAoZm9yIGk4MTApPyAkVU1TIgotIGVjaG8gIiAgU3VwcG9ydCBmb3IgRGlyZWN0IFJlbmRlcmluZyBJbmZyYXN0cnVjdHVyZTokZHJpX21zZyIKLSBlY2hvICIgIFN1cHBvcnQgZm9yIFh2IG1vdGlvbiBjb21wZW5zYXRpb24gKFh2TUMgYW5kIGxpYlh2TUMpOiR4dm1jX21zZyIKLStlY2hvICIgIFN1cHBvcnQgZm9yIGRpc3BsYXkgaG90cGx1ZyBub3RpZmljYXRpb25zICh1ZGV2KTokdWRldl9tc2ciCi0gZWNobyAiICBCdWlsZCBhZGRpdGlvbmFsIHRvb2xzIGFuZCB1dGlsaXRpZXM/JHRvb2xzX21zZyIKLSBpZiB0ZXN0IC1uICIkeHBfbXNnIjsgdGhlbgotIGVjaG8gIiAgRXhwZXJpbWVudGFsIHN1cHBvcnQ6JHhwX21zZyIKLWRpZmYgLS1naXQgYS9zcmMvc25hL3NuYV9kcml2ZXIuYyBiL3NyYy9zbmEvc25hX2RyaXZlci5jCi1pbmRleCA4YzBkMGI1Li5iYzIwZWYwIDEwMDY0NAotLS0tIGEvc3JjL3NuYS9zbmFfZHJpdmVyLmMKLSsrKyBiL3NyYy9zbmEvc25hX2RyaXZlci5jCi1AQCAtNzQwLDYgKzc0MCw4IEBAIHNuYV93YWtldXBfaGFuZGxlcihXQUtFVVBIQU5ETEVSX0FSR1NfREVDTCkKLSB9Ci0gCi0gI2lmIEhBVkVfVURFVgotKyNpbmNsdWRlIDxzeXMvc3RhdC5oPgotKwotIHN0YXRpYyB2b2lkCi0gc25hX2hhbmRsZV91ZXZlbnRzKGludCBmZCwgdm9pZCAqY2xvc3VyZSkKLSB7Ci0tLSAKLWNnaXQgdjAuMTAuMgpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWRyaXZlci94Zjg2LXZpZGVvLWludGVsXzIuOTkuOTE3LmJiIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWRyaXZlci94Zjg2LXZpZGVvLWludGVsXzIuOTkuOTE3LmJiCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkNzViNDRmLi4wMDAwMDAwCi0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1kcml2ZXIveGY4Ni12aWRlby1pbnRlbF8yLjk5LjkxNy5iYgorKysgL2Rldi9udWxsCkBAIC0xLDQyICswLDAgQEAKLXJlcXVpcmUgeG9yZy1kcml2ZXItdmlkZW8uaW5jCi0KLVNVTU1BUlkgPSAiWC5PcmcgWCBzZXJ2ZXIgLS0gSW50ZWwgaW50ZWdyYXRlZCBncmFwaGljcyBjaGlwc2V0cyBkcml2ZXIiCi0KLURFU0NSSVBUSU9OID0gImludGVsIGlzIGFuIFhvcmcgZHJpdmVyIGZvciBJbnRlbCBpbnRlZ3JhdGVkIGdyYXBoaWNzIFwKLWNoaXBzZXRzLiBUaGUgZHJpdmVyIHN1cHBvcnRzIGRlcHRocyA4LCAxNSwgMTYgYW5kIDI0LiBPbiBzb21lIGNoaXBzZXRzLCBcCi10aGUgZHJpdmVyIHN1cHBvcnRzIGhhcmR3YXJlIGFjY2VsZXJhdGVkIDNEIHZpYSB0aGUgRGlyZWN0IFJlbmRlcmluZyBcCi1JbmZyYXN0cnVjdHVyZSAoRFJJKS4iCi0KLUxJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PTg3MzBhZDU4ZDExYzdiYmFkOWE3MDY2ZDY5Zjc4MDhlIgotCi1TUkNfVVJJICs9ICJmaWxlOi8vZGlzYWJsZS14MTEtZHJpMy5wYXRjaCBcCi0gICAgICAgICAgICBmaWxlOi8vYWx3YXlzX2luY2x1ZGVfeG9yZ19zZXJ2ZXIuaC5wYXRjaCBcCi0gICAgICAgICAgICBmaWxlOi8vc25hLVByb3RlY3QtYWdhaW5zdC1BQkktYnJlYWthZ2UtaW4tcmVjZW50LXZlcnNpb25zLS5wYXRjaCBcCi0gICAgICAgICAgICBmaWxlOi8vdWRldi1mc3RhdC5wYXRjaCBcCi0gICAgICAgICAgICBmaWxlOi8vMDAwMS11eGEtZml4LXRoZS1jYWxsLXRvLVBpeG1hcFN5bmNEaXJ0eUhlbHBlci1icm9rZW4tYnktLnBhdGNoIFwKLSAgICAgICAgICAgIGZpbGU6Ly8wMDAxLWdlbjgtRml4LXRoZS1ZVVYtUkdCLXNoYWRlci5wYXRjaCBcCi0gICAgICAgICAgICIKLQotU1JDX1VSSVttZDVzdW1dID0gImZhMTk2YTY2ZTUyYzBjNjI0ZmU1ZDM1MGFmN2E1ZTdiIgotU1JDX1VSSVtzaGEyNTZzdW1dID0gIjAwYjc4MWVlYTA1NTU4MjgyMGExMjNjNDdiNjI0MTFiZGY2YWFiZjRmMDNkYzA1NjhmYWVjNTVmYWY5NjY3YzkiCi0KLURFUEVORFMgKz0gInZpcnR1YWwvbGlieDExIGRybSBsaWJwY2lhY2Nlc3MgcGl4bWFuIgotCi1QQUNLQUdFQ09ORklHID8/PSAieHZtYyBzbmEgdWRldiAke0BiYi51dGlscy5jb250YWlucygnRElTVFJPX0ZFQVRVUkVTJywgJ29wZW5nbCcsICdkcmkgZHJpMSBkcmkyJywgJycsIGQpfSIKLQotUEFDS0FHRUNPTkZJR1tkcmldID0gIi0tZW5hYmxlLWRyaSwtLWRpc2FibGUtZHJpIgotUEFDS0FHRUNPTkZJR1tkcmkxXSA9ICItLWVuYWJsZS1kcmkxLC0tZGlzYWJsZS1kcmkxLHhmODZkcmlwcm90byIKLVBBQ0tBR0VDT05GSUdbZHJpMl0gPSAiLS1lbmFibGUtZHJpMiwtLWRpc2FibGUtZHJpMixkcmkycHJvdG8iCi1QQUNLQUdFQ09ORklHW2RyaTNdID0gIi0tZW5hYmxlLWRyaTMsLS1kaXNhYmxlLWRyaTMsZHJpM3Byb3RvIgotUEFDS0FHRUNPTkZJR1tzbmFdID0gIi0tZW5hYmxlLXNuYSwtLWRpc2FibGUtc25hIgotUEFDS0FHRUNPTkZJR1t1eGFdID0gIi0tZW5hYmxlLXV4YSwtLWRpc2FibGUtdXhhIgotUEFDS0FHRUNPTkZJR1t1ZGV2XSA9ICItLWVuYWJsZS11ZGV2LC0tZGlzYWJsZS11ZGV2LHVkZXYiCi1QQUNLQUdFQ09ORklHW3h2bWNdID0gIi0tZW5hYmxlLXh2bWMsLS1kaXNhYmxlLXh2bWMsbGlieHZtYyB4Y2ItdXRpbCIKLVBBQ0tBR0VDT05GSUdbdG9vbHNdID0gIi0tZW5hYmxlLXRvb2xzLC0tZGlzYWJsZS10b29scyxsaWJ4aW5lcmFtYSBsaWJ4cmFuZHIgbGlieGRhbWFnZSBsaWJ4Zml4ZXMgbGlieGN1cnNvciBsaWJ4dHN0IGxpYnhleHQgbGlieHJlbmRlciIKLQotIyAtLWVuYWJsZS1rbXMtb25seSBvcHRpb24gaXMgcmVxdWlyZWQgYnkgUk9PVExFU1NfWAotRVhUUkFfT0VDT05GICs9ICcke0BiYXNlX2NvbmRpdGlvbmFsKCAiUk9PVExFU1NfWCIsICIxIiwgIiAtLWVuYWJsZS1rbXMtb25seSIsICIiLCBkICl9JwotCi1DT01QQVRJQkxFX0hPU1QgPSAnKGkuODZ8eDg2XzY0KS4qLWxpbnV4JwotCi1GSUxFU18ke1BOfSArPSAiJHtkYXRhZGlyfS9wb2xraXQtMSIKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1kcml2ZXIveGY4Ni12aWRlby1pbnRlbF9naXQuYmIgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctZHJpdmVyL3hmODYtdmlkZW8taW50ZWxfZ2l0LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA2Y2M3MzAKLS0tIC9kZXYvbnVsbAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctZHJpdmVyL3hmODYtdmlkZW8taW50ZWxfZ2l0LmJiCkBAIC0wLDAgKzEsNDMgQEAKK3JlcXVpcmUgeG9yZy1kcml2ZXItdmlkZW8uaW5jCisKK1NVTU1BUlkgPSAiWC5PcmcgWCBzZXJ2ZXIgLS0gSW50ZWwgaW50ZWdyYXRlZCBncmFwaGljcyBjaGlwc2V0cyBkcml2ZXIiCisKK0RFU0NSSVBUSU9OID0gImludGVsIGlzIGFuIFhvcmcgZHJpdmVyIGZvciBJbnRlbCBpbnRlZ3JhdGVkIGdyYXBoaWNzIFwKK2NoaXBzZXRzLiBUaGUgZHJpdmVyIHN1cHBvcnRzIGRlcHRocyA4LCAxNSwgMTYgYW5kIDI0LiBPbiBzb21lIGNoaXBzZXRzLCBcCit0aGUgZHJpdmVyIHN1cHBvcnRzIGhhcmR3YXJlIGFjY2VsZXJhdGVkIDNEIHZpYSB0aGUgRGlyZWN0IFJlbmRlcmluZyBcCitJbmZyYXN0cnVjdHVyZSAoRFJJKS4iCisKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PTg3MzBhZDU4ZDExYzdiYmFkOWE3MDY2ZDY5Zjc4MDhlIgorCitTUkNSRVYgPSAiOGYzM2Y4MDEwMDA5NmY3NzkwYzdiODE5Y2UzN2EzZWQ4Y2U4YjVmYSIKK1BWID0gIjIuOTkuOTE3K2dpdCR7U1JDUFZ9IgorUyA9ICIke1dPUktESVJ9L2dpdCIKKworU1JDX1VSSSA9ICJnaXQ6Ly9hbm9uZ2l0LmZyZWVkZXNrdG9wLm9yZy94b3JnL2RyaXZlci94Zjg2LXZpZGVvLWludGVsIFwKKyAgICAgICAgICAgZmlsZTovL2Rpc2FibGUteDExLWRyaTMucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vYWx3YXlzX2luY2x1ZGVfeG9yZ19zZXJ2ZXIuaC5wYXRjaCBcCisgICAgICAgICAgICIKKworU1JDX1VSSVttZDVzdW1dID0gImZhMTk2YTY2ZTUyYzBjNjI0ZmU1ZDM1MGFmN2E1ZTdiIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjAwYjc4MWVlYTA1NTU4MjgyMGExMjNjNDdiNjI0MTFiZGY2YWFiZjRmMDNkYzA1NjhmYWVjNTVmYWY5NjY3YzkiCisKK0RFUEVORFMgKz0gInZpcnR1YWwvbGlieDExIGRybSBsaWJwY2lhY2Nlc3MgcGl4bWFuIgorCitQQUNLQUdFQ09ORklHID8/PSAieHZtYyBzbmEgdWRldiAke0BiYi51dGlscy5jb250YWlucygnRElTVFJPX0ZFQVRVUkVTJywgJ29wZW5nbCcsICdkcmkgZHJpMSBkcmkyJywgJycsIGQpfSIKKworUEFDS0FHRUNPTkZJR1tkcmldID0gIi0tZW5hYmxlLWRyaSwtLWRpc2FibGUtZHJpIgorUEFDS0FHRUNPTkZJR1tkcmkxXSA9ICItLWVuYWJsZS1kcmkxLC0tZGlzYWJsZS1kcmkxLHhmODZkcmlwcm90byIKK1BBQ0tBR0VDT05GSUdbZHJpMl0gPSAiLS1lbmFibGUtZHJpMiwtLWRpc2FibGUtZHJpMixkcmkycHJvdG8iCitQQUNLQUdFQ09ORklHW2RyaTNdID0gIi0tZW5hYmxlLWRyaTMsLS1kaXNhYmxlLWRyaTMsZHJpM3Byb3RvIgorUEFDS0FHRUNPTkZJR1tzbmFdID0gIi0tZW5hYmxlLXNuYSwtLWRpc2FibGUtc25hIgorUEFDS0FHRUNPTkZJR1t1eGFdID0gIi0tZW5hYmxlLXV4YSwtLWRpc2FibGUtdXhhIgorUEFDS0FHRUNPTkZJR1t1ZGV2XSA9ICItLWVuYWJsZS11ZGV2LC0tZGlzYWJsZS11ZGV2LHVkZXYiCitQQUNLQUdFQ09ORklHW3h2bWNdID0gIi0tZW5hYmxlLXh2bWMsLS1kaXNhYmxlLXh2bWMsbGlieHZtYyB4Y2ItdXRpbCIKK1BBQ0tBR0VDT05GSUdbdG9vbHNdID0gIi0tZW5hYmxlLXRvb2xzLC0tZGlzYWJsZS10b29scyxsaWJ4aW5lcmFtYSBsaWJ4cmFuZHIgbGlieGRhbWFnZSBsaWJ4Zml4ZXMgbGlieGN1cnNvciBsaWJ4dHN0IGxpYnhleHQgbGlieHJlbmRlciIKKworIyAtLWVuYWJsZS1rbXMtb25seSBvcHRpb24gaXMgcmVxdWlyZWQgYnkgUk9PVExFU1NfWAorRVhUUkFfT0VDT05GICs9ICcke0BiYXNlX2NvbmRpdGlvbmFsKCAiUk9PVExFU1NfWCIsICIxIiwgIiAtLWVuYWJsZS1rbXMtb25seSIsICIiLCBkICl9JworCitDT01QQVRJQkxFX0hPU1QgPSAnKGkuODZ8eDg2XzY0KS4qLWxpbnV4JworCitGSUxFU18ke1BOfSArPSAiJHtkYXRhZGlyfS9wb2xraXQtMSIKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1mb250L2VuY29kaW5nc18xLjAuNC5iYiBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1mb250L2VuY29kaW5nc18xLjAuNC5iYgppbmRleCA5MDg0NmQ4Li4zNjc2NmYyIDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctZm9udC9lbmNvZGluZ3NfMS4wLjQuYmIKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWZvbnQvZW5jb2RpbmdzXzEuMC40LmJiCkBAIC05LDcgKzksNyBAQAogUEUgPSAiMSIKIFBSID0gIiR7SU5DX1BSfS4xIgogCi1ERVBFTkRTID0gIm1rZm9udHNjYWxlLW5hdGl2ZSBmb250LXV0aWwtbmF0aXZlIgorREVQRU5EUyA9ICJta2ZvbnRzY2FsZS1uYXRpdmUgbWtmb250ZGlyLW5hdGl2ZSBmb250LXV0aWwtbmF0aXZlIgogUkRFUEVORFNfJHtQTn0gPSAiIgogCiBTUkNfVVJJICs9ICJmaWxlOi8vbm9jb21waWxlci5wYXRjaCIKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1mb250L2ZvbnQtdXRpbF8xLjMuMS5iYiBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1mb250L2ZvbnQtdXRpbF8xLjMuMS5iYgppbmRleCAyMjg1MTI0Li4zNDY0NmZmIDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctZm9udC9mb250LXV0aWxfMS4zLjEuYmIKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWZvbnQvZm9udC11dGlsXzEuMy4xLmJiCkBAIC0xOSw3ICsxOSw0IEBACiBTUkNfVVJJW21kNXN1bV0gPSAiMjM3NTZkYWI4MDlmOWVjNTAxMWJiMjdmYjJjM2M3ZDYiCiBTUkNfVVJJW3NoYTI1NnN1bV0gPSAiYWE3ZWJkYjA3MTUxMDZkZDI1NTA4MmYyMzEwZGJhYTJjZDdlMjI1OTU3YzJhNzdkNzE5NzIwYzdjYzkyYjkyMSIKIAotU1lTUk9PVF9QUkVQUk9DRVNTX0ZVTkNTICs9ICJmb250dXRpbF9zeXNyb290X3ByZXByb2Nlc3MiCi1mb250dXRpbF9zeXNyb290X3ByZXByb2Nlc3MgKCkgewotCXN5c3Jvb3Rfc3RhZ2VfZGlyICR7RH0ke2RhdGFkaXJ9L2ZvbnRzLyAke1NZU1JPT1RfREVTVERJUn0ke2RhdGFkaXJ9L2ZvbnRzLwotfQorU1lTUk9PVF9ESVJTX0JMQUNLTElTVF9yZW1vdmUgPSAiJHtkYXRhZGlyfS9mb250cyIKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1saWIvbGliaWNlXzEuMC45LmJiIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWxpYi9saWJpY2VfMS4wLjkuYmIKaW5kZXggNTA0OWI3ZS4uYjM2MWFkNiAxMDA2NDQKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWxpYi9saWJpY2VfMS4wLjkuYmIKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWxpYi9saWJpY2VfMS4wLjkuYmIKQEAgLTIzLDUgKzIzLDYgQEAKIFNSQ19VUklbbWQ1c3VtXSA9ICJhZGRmYjFlODk3Y2E4MDc5NTMxNjY5YzdjNzcxMTcyNiIKIFNSQ19VUklbc2hhMjU2c3VtXSA9ICI4ZjcwMzJmMmMxYzY0MzUyYjU0MjNmNmI0OGE4ZWJkYzMzOWNjNjMwNjRhZjM0ZDY2YTZjOWFhNzk3NTllMjAyIgogCi1QQUNLQUdFQ09ORklHID8/PSAiIgorUEFDS0FHRUNPTkZJRyA/Pz0gIiR7QGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCAnaXB2NicsICdpcHY2JywgJycsIGQpfSIKIFBBQ0tBR0VDT05GSUdbYXJjNF0gPSAiYWNfY3ZfbGliX2JzZF9hcmM0cmFuZG9tX2J1Zj15ZXMsYWNfY3ZfbGliX2JzZF9hcmM0cmFuZG9tX2J1Zj1ubyxsaWJic2QiCitQQUNLQUdFQ09ORklHW2lwdjZdID0gIi0tZW5hYmxlLWlwdjYsLS1kaXNhYmxlLWlwdjYsIgpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWxpYi9saWJzbV8xLjIuMi5iYiBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1saWIvbGlic21fMS4yLjIuYmIKaW5kZXggMTkyNTEzNi4uZGE0ZWQ5MiAxMDA2NDQKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWxpYi9saWJzbV8xLjIuMi5iYgorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctbGliL2xpYnNtXzEuMi4yLmJiCkBAIC0yNiwzICsyNiw2IEBACiAKIFNSQ19VUklbbWQ1c3VtXSA9ICI0OTlhNzc3M2M2NWFiYTUxMzYwOWZlNjUxODUzYzVmMyIKIFNSQ19VUklbc2hhMjU2c3VtXSA9ICIwYmFjYThjOWY1ZDkzNDQ1MGE3MDg5NmM0YWQzOGQwNjQ3NTUyMTI1NWNhNjNiNzE3YTY1MTBmZGI2ZTI4N2JkIgorCitQQUNLQUdFQ09ORklHID8/PSAiJHtAYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsICdpcHY2JywgJ2lwdjYnLCAnJywgZCl9IgorUEFDS0FHRUNPTkZJR1tpcHY2XSA9ICItLWVuYWJsZS1pcHY2LC0tZGlzYWJsZS1pcHY2LCIKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1saWIvbGlieGNiL0ZpeC1pbmNvbnNpc3RlbnQtdXNlLW9mLXRhYnMtdnMuLXNwYWNlLnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWxpYi9saWJ4Y2IvRml4LWluY29uc2lzdGVudC11c2Utb2YtdGFicy12cy4tc3BhY2UucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODk5MjM4NgotLS0gL2Rldi9udWxsCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1saWIvbGlieGNiL0ZpeC1pbmNvbnNpc3RlbnQtdXNlLW9mLXRhYnMtdnMuLXNwYWNlLnBhdGNoCkBAIC0wLDAgKzEsNjIgQEAKK0Zyb20gODc0MGEyODhjYTQ2ODQzMzE0MTM0MTM0N2FhMTE1Yjk1NDQ4OTFkMyBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IFRob21hcyBLbGF1c25lciA8d2l6QE5ldEJTRC5vcmc+CitEYXRlOiBUaHUsIDE5IE1heSAyMDE2IDE3OjMxOjE4ICswMjAwCitTdWJqZWN0OiBbUEFUQ0hdIEZpeCBpbmNvbnNpc3RlbnQgdXNlIG9mIHRhYnMgdnMuIHNwYWNlLgorCitOZWVkZWQgZm9yIGF0IGxlYXN0IHB5dGhvbi0zLjUueC4KKworU2lnbmVkLW9mZi1ieTogVGhvbWFzIEtsYXVzbmVyIDx3aXpATmV0QlNELm9yZz4KK1NpZ25lZC1vZmYtYnk6IFVsaSBTY2hsYWNodGVyIDxwc3ljaG9uQHpuYy5pbj4KKworVXBzdHJlYW0tU3RhdHVzOiBCYWNrcG9ydAorCitTaWduZWQtb2ZmLWJ5OiBSb2JlcnQgWWFuZyA8bGllemhpLnlhbmdAd2luZHJpdmVyLmNvbT4KKy0tLQorIHNyYy9jX2NsaWVudC5weSB8IDE0ICsrKysrKystLS0tLS0tCisgMSBmaWxlIGNoYW5nZWQsIDcgaW5zZXJ0aW9ucygrKSwgNyBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL3NyYy9jX2NsaWVudC5weSBiL3NyYy9jX2NsaWVudC5weQoraW5kZXggNTdkZTNmYi4uMDQzMzM4ZCAxMDA2NDQKKy0tLSBhL3NyYy9jX2NsaWVudC5weQorKysrIGIvc3JjL2NfY2xpZW50LnB5CitAQCAtMTM2NCw3ICsxMzY0LDcgQEAgZGVmIF9jX3NlcmlhbGl6ZShjb250ZXh0LCBzZWxmKToKKyAgICAgICAgICAgICBfYygnICAgIHVuc2lnbmVkIGludCB4Y2JfYWxpZ25fdG8gPSAwOycpCisgICAgICAgICBpZiBzZWxmLmlzX3N3aXRjaDoKKyAgICAgICAgICAgICBfYygnICAgIHVuc2lnbmVkIGludCB4Y2JfcGFkZGluZ19vZmZzZXQgPSAlZDsnLAorLQkgICAgICAgc2VsZi5nZXRfYWxpZ25fb2Zmc2V0KCkgKQorKyAgICAgICAgICAgICAgIHNlbGYuZ2V0X2FsaWduX29mZnNldCgpICkKKyAgICAgICAgIHByZWZpeCA9IFsoJ19hdXgnLCAnLT4nLCBzZWxmKV0KKyAgICAgICAgIGF1eF9wdHIgPSAneGNiX291dCcKKyAKK0BAIC0xMzkwLDcgKzEzOTAsNyBAQCBkZWYgX2Nfc2VyaWFsaXplKGNvbnRleHQsIHNlbGYpOgorICAgICAgICAgX2MoJyAgICB1bnNpZ25lZCBpbnQgeGNiX2FsaWduX3RvID0gMDsnKQorICAgICAgICAgaWYgc2VsZi5pc19zd2l0Y2g6CisgICAgICAgICAgICAgX2MoJyAgICB1bnNpZ25lZCBpbnQgeGNiX3BhZGRpbmdfb2Zmc2V0ID0gJWQ7JywKKy0JICAgICAgIHNlbGYuZ2V0X2FsaWduX29mZnNldCgpICkKKysgICAgICAgICAgICAgICBzZWxmLmdldF9hbGlnbl9vZmZzZXQoKSApCisgCisgICAgIGVsaWYgJ3NpemVvZicgPT0gY29udGV4dDoKKyAgICAgICAgIHBhcmFtX25hbWVzID0gW3BbMl0gZm9yIHAgaW4gcGFyYW1zXQorQEAgLTE5MzAsMTQgKzE5MzAsMTQgQEAgZGVmIF9jX2FjY2Vzc29yc19saXN0KHNlbGYsIGZpZWxkKToKKyAgICAgICAgICAgICAgICAgICAgICMgZnJvbSB0aGUgcmVxdWVzdCBzaXplIGFuZCBkaXZpZGUgdGhhdCBieSB0aGUgbWVtYmVyIHNpemUKKyAgICAgICAgICAgICAgICAgICAgIHJldHVybiAnKCgoUi0+bGVuZ3RoICogNCkgLSBzaXplb2YoJysgc2VsZi5jX3R5cGUgKyAnKSkvJysnc2l6ZW9mKCcrZmllbGQudHlwZS5tZW1iZXIuY193aXJldHlwZSsnKSknCisgICAgICAgICAgICAgICAgIGVsc2U6CistCQkgICAgIyB1c2UgdGhlIGFjY2Vzc29yIHRvIGdldCB0aGUgc3RhcnQgb2YgdGhlIGxpc3QsIHRoZW4KKy0JCSAgICAjIGNvbXB1dGUgdGhlIGxlbmd0aCBvZiBpdCBieSBzdWJ0cmFjdGluZyBpdCBmcm9tCisrICAgICAgICAgICAgICAgICAgICAjIHVzZSB0aGUgYWNjZXNzb3IgdG8gZ2V0IHRoZSBzdGFydCBvZiB0aGUgbGlzdCwgdGhlbgorKyAgICAgICAgICAgICAgICAgICAgIyBjb21wdXRlIHRoZSBsZW5ndGggb2YgaXQgYnkgc3VidHJhY3RpbmcgaXQgZnJvbQorICAgICAgICAgICAgICAgICAgICAgIyB0aGUgYWRyZXNzIG9mIHRoZSBmaXJzdCBieXRlIGFmdGVyIHRoZSBlbmQgb2YgdGhlCisgICAgICAgICAgICAgICAgICAgICAjIHJlcXVlc3QKKy0JCSAgICBhZnRlcl9lbmRfb2ZfcmVxdWVzdCA9ICcoKChjaGFyKilSKSArIFItPmxlbmd0aCAqIDQpJworLQkJICAgIHN0YXJ0X29mX2xpc3QgPSAnJXMoUiknICUgKGZpZWxkLmNfYWNjZXNzb3JfbmFtZSkKKysgICAgICAgICAgICAgICAgICAgIGFmdGVyX2VuZF9vZl9yZXF1ZXN0ID0gJygoKGNoYXIqKVIpICsgUi0+bGVuZ3RoICogNCknCisrICAgICAgICAgICAgICAgICAgICBzdGFydF9vZl9saXN0ID0gJyVzKFIpJyAlIChmaWVsZC5jX2FjY2Vzc29yX25hbWUpCisgICAgICAgICAgICAgICAgICAgICBieXRlc2l6ZV9vZl9saXN0ID0gJyVzIC0gKGNoYXIqKSglcyknICUgKGFmdGVyX2VuZF9vZl9yZXF1ZXN0LCBzdGFydF9vZl9saXN0KQorLQkJICAgIHJldHVybiAnKCVzKSAvIHNpemVvZiglcyknICUgKGJ5dGVzaXplX29mX2xpc3QsIGZpZWxkLnR5cGUubWVtYmVyLmNfd2lyZXR5cGUpCisrICAgICAgICAgICAgICAgICAgICByZXR1cm4gJyglcykgLyBzaXplb2YoJXMpJyAlIChieXRlc2l6ZV9vZl9saXN0LCBmaWVsZC50eXBlLm1lbWJlci5jX3dpcmV0eXBlKQorICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgIHJhaXNlIEV4Y2VwdGlvbigKKyAgICAgICAgICAgICAgICAgICAgICJsZW5ndGhsZXNzIGxpc3RzIHdpdGggdmFyc2l6ZWQgbWVtYmVycyBhcmUgbm90IHN1cHBvcnRlZC4gRmllbGRuYW1lICclcyciCistLSAKKzIuOS4wCisKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1saWIvbGlieGNiXzEuMTEuMS5iYiBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1saWIvbGlieGNiXzEuMTEuMS5iYgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDg1NmMxOS4uMDAwMDAwMAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctbGliL2xpYnhjYl8xLjExLjEuYmIKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi1TVU1NQVJZID0gIlhDQjogVGhlIFggcHJvdG9jb2wgQyBiaW5kaW5nIGxpYnJhcnkiCi1ERVNDUklQVElPTiA9ICJUaGUgWCBwcm90b2NvbCBDLWxhbmd1YWdlIEJpbmRpbmcgKFhDQikgaXMgYSByZXBsYWNlbWVudCBcCi1mb3IgWGxpYiBmZWF0dXJpbmcgYSBzbWFsbCBmb290cHJpbnQsIGxhdGVuY3kgaGlkaW5nLCBkaXJlY3QgYWNjZXNzIHRvIFwKLXRoZSBwcm90b2NvbCwgaW1wcm92ZWQgdGhyZWFkaW5nIHN1cHBvcnQsIGFuZCBleHRlbnNpYmlsaXR5LiIKLUhPTUVQQUdFID0gImh0dHA6Ly94Y2IuZnJlZWRlc2t0b3Aub3JnIgotQlVHVFJBQ0tFUiA9ICJodHRwczovL2J1Z3MuZnJlZWRlc2t0b3Aub3JnL2VudGVyX2J1Zy5jZ2k/cHJvZHVjdD1YQ0IiCi1TRUNUSU9OID0gIngxMS9saWJzIgotCi1MSUNFTlNFID0gIk1JVCIKLUxJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PWQ3NjNiMDgxY2IxMGMyMjM0MzViMDFlMDBkYzBhYmE3IgotCi1TUkNfVVJJID0gImh0dHA6Ly94Y2IuZnJlZWRlc2t0b3Aub3JnL2Rpc3QvbGlieGNiLSR7UFZ9LnRhci5iejIgXAotICAgICAgICAgICBmaWxlOi8veGNiaW5jbHVkZWRpci5wYXRjaCBcCi0gICAgICAgICAgIGZpbGU6Ly9kaXNhYmxlLWNoZWNrLnBhdGNoIFwKLSAgICAgICAgICAgZmlsZTovL2djYy1taXBzLXByNjgzMDItbWlwcy13b3JrYXJvdW5kLnBhdGNoIFwKLSAgICAgICAgICAiCi1TUkNfVVJJW21kNXN1bV0gPSAiZjk3YTY1ZTYxNTg3NzVkZTUxOGFjMzkxOTM1NjM0YzIiCi1TUkNfVVJJW3NoYTI1NnN1bV0gPSAiYjcyMGZkNmM3ZDIwMGU1MzcxYWZmZGIzZjA0OWNjOGY4OGNmZjlhZWQ5NDJmZjFiODI0ZDk1ZWVkYmY2OWQzMCIKLQotQkJDTEFTU0VYVEVORCA9ICJuYXRpdmUgbmF0aXZlc2RrIgotCi1ERVBFTkRTID0gInhjYi1wcm90byB4cHJvdG8gbGlieGF1IGxpYnB0aHJlYWQtc3R1YnMgbGlieGRtY3AiCi0KLVBBQ0tBR0VTX0RZTkFNSUMgPSAiXmxpYnhjYi0uKiIKLQotRklMRVNfJHtQTn0gPSAiJHtsaWJkaXJ9L2xpYnhjYi5zby4qIgotCi1pbmhlcml0IGF1dG90b29scyBwa2djb25maWcgZGlzdHJvX2ZlYXR1cmVzX2NoZWNrCi0KLSMgVGhlIGxpYnhhdSBhbmQgb3RoZXJzIHJlcXVpcmVzIHgxMSBpbiBESVNUUk9fRkVBVFVSRVMKLVJFUVVJUkVEX0RJU1RST19GRUFUVVJFUyA9ICJ4MTEiCi1SRVFVSVJFRF9ESVNUUk9fRkVBVFVSRVNfY2xhc3MtbmF0aXZlID0gIiIKLQotcHl0aG9uIHBvcHVsYXRlX3BhY2thZ2VzX3ByZXBlbmQgKCkgewotICAgIGRvX3NwbGl0X3BhY2thZ2VzKGQsICcke2xpYmRpcn0nLCAnXmxpYnhjYi0oLiopXC5zb1wuLiokJywgJ2xpYnhjYi0lcycsICdYQ0IgbGlicmFyeSBtb2R1bGUgZm9yICVzJywgYWxsb3dfbGlua3M9VHJ1ZSkKLX0KZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1saWIvbGlieGNiXzEuMTIuYmIgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctbGliL2xpYnhjYl8xLjEyLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmEzOGJkZWEKLS0tIC9kZXYvbnVsbAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctbGliL2xpYnhjYl8xLjEyLmJiCkBAIC0wLDAgKzEsMzkgQEAKK1NVTU1BUlkgPSAiWENCOiBUaGUgWCBwcm90b2NvbCBDIGJpbmRpbmcgbGlicmFyeSIKK0RFU0NSSVBUSU9OID0gIlRoZSBYIHByb3RvY29sIEMtbGFuZ3VhZ2UgQmluZGluZyAoWENCKSBpcyBhIHJlcGxhY2VtZW50IFwKK2ZvciBYbGliIGZlYXR1cmluZyBhIHNtYWxsIGZvb3RwcmludCwgbGF0ZW5jeSBoaWRpbmcsIGRpcmVjdCBhY2Nlc3MgdG8gXAordGhlIHByb3RvY29sLCBpbXByb3ZlZCB0aHJlYWRpbmcgc3VwcG9ydCwgYW5kIGV4dGVuc2liaWxpdHkuIgorSE9NRVBBR0UgPSAiaHR0cDovL3hjYi5mcmVlZGVza3RvcC5vcmciCitCVUdUUkFDS0VSID0gImh0dHBzOi8vYnVncy5mcmVlZGVza3RvcC5vcmcvZW50ZXJfYnVnLmNnaT9wcm9kdWN0PVhDQiIKK1NFQ1RJT04gPSAieDExL2xpYnMiCisKK0xJQ0VOU0UgPSAiTUlUIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9ZDc2M2IwODFjYjEwYzIyMzQzNWIwMWUwMGRjMGFiYTciCisKK1NSQ19VUkkgPSAiaHR0cDovL3hjYi5mcmVlZGVza3RvcC5vcmcvZGlzdC9saWJ4Y2ItJHtQVn0udGFyLmJ6MiBcCisgICAgICAgICAgIGZpbGU6Ly94Y2JpbmNsdWRlZGlyLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL2Rpc2FibGUtY2hlY2sucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vZ2NjLW1pcHMtcHI2ODMwMi1taXBzLXdvcmthcm91bmQucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vRml4LWluY29uc2lzdGVudC11c2Utb2YtdGFicy12cy4tc3BhY2UucGF0Y2ggXAorICAgICAgICAgICIKK1NSQ19VUklbbWQ1c3VtXSA9ICIyOGU1NTJiZDc4YmMxMDUwYjZiMjZjYTFkYjBlNWJiNiIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICI0YWRmYjFiN2M2N2U5OWJjOWMyY2NiMTEwYjJmMTc1Njg2NTc2ZDJmNzkyYzhhNzFiOWM4YjE5MDE0MDU3YjViIgorCitCQkNMQVNTRVhURU5EID0gIm5hdGl2ZSBuYXRpdmVzZGsiCisKK0RFUEVORFMgPSAieGNiLXByb3RvIHhwcm90byBsaWJ4YXUgbGlicHRocmVhZC1zdHVicyBsaWJ4ZG1jcCIKKworUEFDS0FHRVNfRFlOQU1JQyA9ICJebGlieGNiLS4qIgorCitGSUxFU18ke1BOfSA9ICIke2xpYmRpcn0vbGlieGNiLnNvLioiCisKK2luaGVyaXQgYXV0b3Rvb2xzIHBrZ2NvbmZpZyBkaXN0cm9fZmVhdHVyZXNfY2hlY2sKKworIyBUaGUgbGlieGF1IGFuZCBvdGhlcnMgcmVxdWlyZXMgeDExIGluIERJU1RST19GRUFUVVJFUworUkVRVUlSRURfRElTVFJPX0ZFQVRVUkVTID0gIngxMSIKK1JFUVVJUkVEX0RJU1RST19GRUFUVVJFU19jbGFzcy1uYXRpdmUgPSAiIgorCitleHBvcnQgUFlUSE9OID0gInB5dGhvbjMiCisKK3B5dGhvbiBwb3B1bGF0ZV9wYWNrYWdlc19wcmVwZW5kICgpIHsKKyAgICBkb19zcGxpdF9wYWNrYWdlcyhkLCAnJHtsaWJkaXJ9JywgJ15saWJ4Y2ItKC4qKVwuc29cLi4qJCcsICdsaWJ4Y2ItJXMnLCAnWENCIGxpYnJhcnkgbW9kdWxlIGZvciAlcycsIGFsbG93X2xpbmtzPVRydWUpCit9CmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctbGliL2xpYnhjdXJzb3JfMS4xLjE0LmJiIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWxpYi9saWJ4Y3Vyc29yXzEuMS4xNC5iYgppbmRleCBhOGU0ZjI0Li4xNzYyOTA0IDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctbGliL2xpYnhjdXJzb3JfMS4xLjE0LmJiCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1saWIvbGlieGN1cnNvcl8xLjEuMTQuYmIKQEAgLTEyLDcgKzEyLDcgQEAKIExJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PTg5MDJlNjY0M2Y3YmNkNzc5M2IyM2RjZDVkODAzMWE0IgogCiBERVBFTkRTICs9ICJsaWJ4cmVuZGVyIGxpYnhmaXhlcyIKLUJCQ0xBU1NFWFRFTkQgPSAibmF0aXZlIgorQkJDTEFTU0VYVEVORCA9ICJuYXRpdmUgbmF0aXZlc2RrIgogCiBQRSA9ICIxIgogCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctbGliL2xpYnhleHRfMS4zLjMuYmIgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctbGliL2xpYnhleHRfMS4zLjMuYmIKaW5kZXggZWZhOGI2NS4uMDYzZTUzMSAxMDA2NDQKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWxpYi9saWJ4ZXh0XzEuMy4zLmJiCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1saWIvbGlieGV4dF8xLjMuMy5iYgpAQCAtMTMsNyArMTMsNyBAQAogTElDRU5TRSA9ICJNSVQtc3R5bGUiCiBMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT04NzljZTI2Njc4NTQxNGJkMWNiYzNiYzJmNGQ5ZDdjOCIKIAotREVQRU5EUyArPSAieHByb3RvIHZpcnR1YWwvbGlieDExIHhleHRwcm90byBsaWJ4YXUgbGlieGRtY3AiCitERVBFTkRTICs9ICJ4cHJvdG8gdmlydHVhbC9saWJ4MTEgeGV4dHByb3RvIgogUFJPVklERVMgPSAieGV4dCIKIAogUEUgPSAiMSIKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1saWIvbGlieGV4dF9naXQuYmIgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctbGliL2xpYnhleHRfZ2l0LmJiCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiNzk5MTg2Li4wMDAwMDAwCi0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1saWIvbGlieGV4dF9naXQuYmIKKysrIC9kZXYvbnVsbApAQCAtMSwyNCArMCwwIEBACi1yZXF1aXJlIHhvcmctbGliLWNvbW1vbi5pbmMKLQotU1VNTUFSWSA9ICJYRXh0OiBYIEV4dGVuc2lvbiBsaWJyYXJ5IgotCi1ERVNDUklQVElPTiA9ICJsaWJYZXh0IHByb3ZpZGVzIGFuIFggV2luZG93IFN5c3RlbSBjbGllbnQgaW50ZXJmYWNlIHRvIFwKLXNldmVyYWwgZXh0ZW5zaW9ucyB0byB0aGUgWCBwcm90b2NvbC4gIFRoZSBzdXBwb3J0ZWQgcHJvdG9jb2wgZXh0ZW5zaW9ucyBcCi1hcmUgRE9VQkxFLUJVRkZFUiwgRFBNUywgRXh0ZW5kZWQtVmlzdWFsLUluZm9ybWF0aW9uLCBMQlgsIE1JVF9TSE0sIFwKLU1JVF9TVU5EUlktTk9OU1RBTkRBUkQsIE11bHRpLUJ1ZmZlcmluZywgU0VDVVJJVFksIFNIQVBFLCBTWU5DLCBUT0ctQ1VQLCBcCi1YQy1BUFBHUk9VUCwgWEMtTUlTQywgWFRFU1QuICBsaWJYZXh0IGFsc28gcHJvdmlkZXMgYSBzbWFsbCBzZXQgb2YgXAotdXRpbGl0eSBmdW5jdGlvbnMgdG8gYWlkIGF1dGhvcnMgb2YgY2xpZW50IEFQSXMgZm9yIFggcHJvdG9jb2wgXAotZXh0ZW5zaW9ucy4iCi0KLURFUEVORFMgKz0gInhwcm90byB2aXJ0dWFsL2xpYngxMSB4ZXh0cHJvdG8gbGlieGF1IGxpYnhkbWNwIgotUFJPVklERVMgPSAieGV4dCIKLVNSQ1JFViA9ICJkMWYzYmM3N2E0OGM4ZTQyNzcxNTc5ZTNmZGYzMzcwYjM1ZDMyMDlkIgotUEUgPSAiMSIKLVBWID0gIjEuMC45OS4xK2dpdHIke1NSQ1BWfSIKLQotWE9SR19QTiA9ICJsaWJYZXh0IgotCi1TUkNfVVJJID0gImdpdDovL2Fub25naXQuZnJlZWRlc2t0b3Aub3JnL2dpdC94b3JnL2xpYi8ke1hPUkdfUE59IgotUyA9ICIke1dPUktESVJ9L2dpdC8iCi0KLUJCQ0xBU1NFWFRFTkQgPSAibmF0aXZlc2RrIgpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWxpYi9saWJ4Zml4ZXNfNS4wLjEuYmIgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctbGliL2xpYnhmaXhlc181LjAuMS5iYgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNmUyNzQwYy4uMDAwMDAwMAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctbGliL2xpYnhmaXhlc181LjAuMS5iYgorKysgL2Rldi9udWxsCkBAIC0xLDIyICswLDAgQEAKLVNVTU1BUlkgPSAiWEZpeGVzOiBYIEZpeGVzIGV4dGVuc2lvbiBsaWJyYXJ5IgotCi1ERVNDUklQVElPTiA9ICJYIGFwcGxpY2F0aW9ucyBoYXZlIG9mdGVuIG5lZWRlZCB0byB3b3JrIGFyb3VuZCB2YXJpb3VzIFwKLXNob3J0Y29taW5ncyBpbiB0aGUgY29yZSBYIHdpbmRvdyBzeXN0ZW0uICBUaGlzIGV4dGVuc2lvbiBpcyBkZXNpZ25lZCB0byBcCi1wcm92aWRlIHRoZSBtaW5pbWFsIHNlcnZlci1zaWRlIHN1cHBvcnQgbmVjZXNzYXJ5IHRvIGVsaW1pbmF0ZSBwcm9ibGVtcyBcCi1jYXVzZWQgYnkgdGhlc2Ugd29ya2Fyb3VuZHMuIgotCi1yZXF1aXJlIHhvcmctbGliLWNvbW1vbi5pbmMKLQotTElDRU5TRSA9ICJNSVQtc3R5bGUiCi1MSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT0zYzFjZTQyYzMzNGE2ZjVjY2NiMDI3NzU1NmEwNTNlMCIKLQotREVQRU5EUyArPSAidmlydHVhbC9saWJ4MTEgeHByb3RvIGZpeGVzcHJvdG8geGV4dHByb3RvIgotCi1QRSA9ICIxIgotCi1YT1JHX1BOID0gImxpYlhmaXhlcyIKLQotQkJDTEFTU0VYVEVORCA9ICJuYXRpdmUgbmF0aXZlc2RrIgotCi1TUkNfVVJJW21kNXN1bV0gPSAiYjk4NWI4NWY4YjkzODZjODVkZGNmZTEwNzM5MDZiNGQiCi1TUkNfVVJJW3NoYTI1NnN1bV0gPSAiNjNiZWMwODUwODRmYTNjYWFlZTUxODA0OTBkZDg3MWYxZWIyMDIwYmE5ZTliMzlhMzBmOTM2OTNmZmMzNDc2NyIKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1saWIvbGlieGZpeGVzXzUuMC4yLmJiIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWxpYi9saWJ4Zml4ZXNfNS4wLjIuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjA3OGFlZAotLS0gL2Rldi9udWxsCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1saWIvbGlieGZpeGVzXzUuMC4yLmJiCkBAIC0wLDAgKzEsMjIgQEAKK1NVTU1BUlkgPSAiWEZpeGVzOiBYIEZpeGVzIGV4dGVuc2lvbiBsaWJyYXJ5IgorCitERVNDUklQVElPTiA9ICJYIGFwcGxpY2F0aW9ucyBoYXZlIG9mdGVuIG5lZWRlZCB0byB3b3JrIGFyb3VuZCB2YXJpb3VzIFwKK3Nob3J0Y29taW5ncyBpbiB0aGUgY29yZSBYIHdpbmRvdyBzeXN0ZW0uICBUaGlzIGV4dGVuc2lvbiBpcyBkZXNpZ25lZCB0byBcCitwcm92aWRlIHRoZSBtaW5pbWFsIHNlcnZlci1zaWRlIHN1cHBvcnQgbmVjZXNzYXJ5IHRvIGVsaW1pbmF0ZSBwcm9ibGVtcyBcCitjYXVzZWQgYnkgdGhlc2Ugd29ya2Fyb3VuZHMuIgorCityZXF1aXJlIHhvcmctbGliLWNvbW1vbi5pbmMKKworTElDRU5TRSA9ICJNSVQtc3R5bGUiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT0zYzFjZTQyYzMzNGE2ZjVjY2NiMDI3NzU1NmEwNTNlMCIKKworREVQRU5EUyArPSAidmlydHVhbC9saWJ4MTEgeHByb3RvIGZpeGVzcHJvdG8geGV4dHByb3RvIgorCitQRSA9ICIxIgorCitYT1JHX1BOID0gImxpYlhmaXhlcyIKKworQkJDTEFTU0VYVEVORCA9ICJuYXRpdmUgbmF0aXZlc2RrIgorCitTUkNfVVJJW21kNXN1bV0gPSAiNTQ0ZDczZGY5NGU2MzhiYTdiNjQxNDdiZTQxNmU1NzYiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiOWJkMjBlZGZlYzA4NGExYmVkNDgxZDQ4ZGQ0ODE1ZGVlODgxMzlmZmZhZDA5MTQxOGNkZGEwODExMjlhOWFlYSIKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1saWIvbGlieGZvbnRfMS41LjEuYmIgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctbGliL2xpYnhmb250XzEuNS4xLmJiCmluZGV4IDFiNmUzM2MuLmUwMWYzMzEgMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1saWIvbGlieGZvbnRfMS41LjEuYmIKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWxpYi9saWJ4Zm9udF8xLjUuMS5iYgpAQCAtMjAsMyArMjAsNiBAQAogCiBTUkNfVVJJW21kNXN1bV0gPSAiOTZmNzZiYTk0YjRjOTA5MjMwYmFjMWUyZGNkNTUxYzQiCiBTUkNfVVJJW3NoYTI1NnN1bV0gPSAiYjcwODk4NTI3YzczZjk3NThmNTUxYmJhYjYxMmFmNjExYjhhMDk2MjIwMjgyOTU2OGQ5NGYzZWRmNGQ4NjA5OCIKKworUEFDS0FHRUNPTkZJRyA/Pz0gIiR7QGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCAnaXB2NicsICdpcHY2JywgJycsIGQpfSIKK1BBQ0tBR0VDT05GSUdbaXB2Nl0gPSAiLS1lbmFibGUtaXB2NiwtLWRpc2FibGUtaXB2NiwiCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctbGliL2xpYnhpbmVyYW1hXzEuMS4zLmJiIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWxpYi9saWJ4aW5lcmFtYV8xLjEuMy5iYgppbmRleCAwMjdjODA0Li5iYjAzZjQ0IDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctbGliL2xpYnhpbmVyYW1hXzEuMS4zLmJiCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1saWIvbGlieGluZXJhbWFfMS4xLjMuYmIKQEAgLTE4LDMgKzE4LDUgQEAKIAogU1JDX1VSSVttZDVzdW1dID0gIjkzMzZkYzQ2YWUzYmY1ZjgxYzI0N2Y3MTMxNDYxZWZkIgogU1JDX1VSSVtzaGEyNTZzdW1dID0gIjdhNDU2OTlmMTc3MzA5NWEzZjgyMWU0OTFjYmQ1ZTEwYzg4N2M1YTVmY2U1ZDhkM2ZjZWQxNWMyZmY3Njk4ZTIiCisKK0JCQ0xBU1NFWFRFTkQgPSAibmF0aXZlIG5hdGl2ZXNkayIKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1saWIvbGlieGtiY29tbW9uXzAuNS4wLmJiIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWxpYi9saWJ4a2Jjb21tb25fMC41LjAuYmIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGRlMjJhODEuLjAwMDAwMDAKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWxpYi9saWJ4a2Jjb21tb25fMC41LjAuYmIKKysrIC9kZXYvbnVsbApAQCAtMSwyMiArMCwwIEBACi1TVU1NQVJZID0gIkdlbmVyaWMgWEtCIGtleW1hcCBsaWJyYXJ5IgotREVTQ1JJUFRJT04gPSAibGlieGtiY29tbW9uIGlzIGEga2V5bWFwIGNvbXBpbGVyIGFuZCBzdXBwb3J0IGxpYnJhcnkgd2hpY2ggXAotcHJvY2Vzc2VzIGEgcmVkdWNlZCBzdWJzZXQgb2Yga2V5bWFwcyBhcyBkZWZpbmVkIGJ5IHRoZSBYS0Igc3BlY2lmaWNhdGlvbi4iCi1IT01FUEFHRSA9ICJodHRwOi8vd3d3LnhrYmNvbW1vbi5vcmciCi1MSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT0wOTQ1N2IxNTZlMzE1NTk3MmFiZWJjYWFhYTBjYjQzNCIKLUxJQ0VOU0UgPSAiTUlUICYgTUlULXN0eWxlIgotCi1ERVBFTkRTID0gInV0aWwtbWFjcm9zIGZsZXgtbmF0aXZlIGJpc29uLW5hdGl2ZSIKLQotU1JDX1VSSSA9ICJodHRwOi8veGtiY29tbW9uLm9yZy9kb3dubG9hZC8ke0JQTn0tJHtQVn0udGFyLnh6IgotCi1TUkNfVVJJW21kNXN1bV0gPSAiMmUxZmFlYWZjYzYwOWMzMGFmM2E1NjFhOTFlODQxNTgiCi1TUkNfVVJJW3NoYTI1NnN1bV0gPSAiOTBiZDc4MjQ3NDJiOWE2ZjUyYTZjZjgwZTJjYWRkNmY1MzQ5Y2Y2MDBhMzU4ZDA4MjYwNzcyNjE1Yjg5ZDE5YyIKLQotVVBTVFJFQU1fQ0hFQ0tfVVJJID0gImh0dHA6Ly94a2Jjb21tb24ub3JnLyIKLQotaW5oZXJpdCBhdXRvdG9vbHMgcGtnY29uZmlnCi0KLUVYVFJBX09FQ09ORiA9ICItLWRpc2FibGUtZG9jcyIKLQotUEFDS0FHRUNPTkZJRyA/PSAiJHtAYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsICd4MTEnLCAneDExJywgJycsIGQpfSIKLVBBQ0tBR0VDT05GSUdbeDExXSA9ICItLWVuYWJsZS14MTEsLS1kaXNhYmxlLXgxMSxsaWJ4Y2IgeGtleWJvYXJkLWNvbmZpZywiCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctbGliL2xpYnhrYmNvbW1vbl8wLjYuMS5iYiBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1saWIvbGlieGtiY29tbW9uXzAuNi4xLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZjMDgxMDkKLS0tIC9kZXYvbnVsbAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctbGliL2xpYnhrYmNvbW1vbl8wLjYuMS5iYgpAQCAtMCwwICsxLDIyIEBACitTVU1NQVJZID0gIkdlbmVyaWMgWEtCIGtleW1hcCBsaWJyYXJ5IgorREVTQ1JJUFRJT04gPSAibGlieGtiY29tbW9uIGlzIGEga2V5bWFwIGNvbXBpbGVyIGFuZCBzdXBwb3J0IGxpYnJhcnkgd2hpY2ggXAorcHJvY2Vzc2VzIGEgcmVkdWNlZCBzdWJzZXQgb2Yga2V5bWFwcyBhcyBkZWZpbmVkIGJ5IHRoZSBYS0Igc3BlY2lmaWNhdGlvbi4iCitIT01FUEFHRSA9ICJodHRwOi8vd3d3LnhrYmNvbW1vbi5vcmciCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9MSUNFTlNFO21kNT0wOTQ1N2IxNTZlMzE1NTk3MmFiZWJjYWFhYTBjYjQzNCIKK0xJQ0VOU0UgPSAiTUlUICYgTUlULXN0eWxlIgorCitERVBFTkRTID0gInV0aWwtbWFjcm9zIGZsZXgtbmF0aXZlIGJpc29uLW5hdGl2ZSIKKworU1JDX1VSSSA9ICJodHRwOi8veGtiY29tbW9uLm9yZy9kb3dubG9hZC8ke0JQTn0tJHtQVn0udGFyLnh6IgorCitTUkNfVVJJW21kNXN1bV0gPSAiNjdhOGYzMjJiNWZhMzIzNTIyNzJlODExYmI5MGRkNzMiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiNWIwODg3YjA4MGI0MjE2OTA5NmE2MTEwNjY2MWY4ZDM1YmFlNzgzZjhiNmM1OGY5N2ViY2QzYWY4M2VhODc2MCIKKworVVBTVFJFQU1fQ0hFQ0tfVVJJID0gImh0dHA6Ly94a2Jjb21tb24ub3JnLyIKKworaW5oZXJpdCBhdXRvdG9vbHMgcGtnY29uZmlnCisKK0VYVFJBX09FQ09ORiA9ICItLWRpc2FibGUtZG9jcyIKKworUEFDS0FHRUNPTkZJRyA/PSAiJHtAYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsICd4MTEnLCAneDExJywgJycsIGQpfSIKK1BBQ0tBR0VDT05GSUdbeDExXSA9ICItLWVuYWJsZS14MTEsLS1kaXNhYmxlLXgxMSxsaWJ4Y2IgeGtleWJvYXJkLWNvbmZpZywiCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctbGliL2xpYnhtdV8xLjEuMi5iYiBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1saWIvbGlieG11XzEuMS4yLmJiCmluZGV4IDAwM2JhZWMuLmQ1OTM1ZmYgMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1saWIvbGlieG11XzEuMS4yLmJiCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1saWIvbGlieG11XzEuMS4yLmJiCkBAIC0zMCwzICszMCw2IEBACiAKIFNSQ19VUklbbWQ1c3VtXSA9ICI0MWQ5MmFiNjI3ZGZhMDY1NjgwNzYwNDNmM2UwODllNCIKIFNSQ19VUklbc2hhMjU2c3VtXSA9ICI3NTZlZGM3YzM4MzI1NGVlZjhiNGUxYjczM2MzYmYxZGMwNjFiNTIzYzlmOTgzM2FjNzA1ODM3OGI4MzQ5ZDBiIgorCitQQUNLQUdFQ09ORklHID8/PSAiJHtAYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsICdpcHY2JywgJ2lwdjYnLCAnJywgZCl9IgorUEFDS0FHRUNPTkZJR1tpcHY2XSA9ICItLWVuYWJsZS1pcHY2LC0tZGlzYWJsZS1pcHY2LCIKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1saWIvbGlieHJlbmRlcl8wLjkuOS5iYiBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1saWIvbGlieHJlbmRlcl8wLjkuOS5iYgppbmRleCA5ZmRlMDQwLi40NGNiMmUwIDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctbGliL2xpYnhyZW5kZXJfMC45LjkuYmIKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWxpYi9saWJ4cmVuZGVyXzAuOS45LmJiCkBAIC0xMSw3ICsxMSw3IEBACiBMSUNFTlNFID0gIk1JVC1zdHlsZSIKIExJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PWQ4YmM3MTk4NmQzYjliMzYzOWY2ZGZkNmZhYzhmMTk2IgogCi1ERVBFTkRTICs9ICJ2aXJ0dWFsL2xpYngxMSByZW5kZXJwcm90byB4cHJvdG8geGRtY3AiCitERVBFTkRTICs9ICJ2aXJ0dWFsL2xpYngxMSByZW5kZXJwcm90byB4cHJvdG8iCiAKIFBFID0gIjEiCiAKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1saWIvbGlieHQvbGlieHRfZml4X2Zvcl94MzIucGF0Y2ggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctbGliL2xpYnh0L2xpYnh0X2ZpeF9mb3JfeDMyLnBhdGNoCmluZGV4IGNlNmM3NTYuLmZmYzJjMTUgMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1saWIvbGlieHQvbGlieHRfZml4X2Zvcl94MzIucGF0Y2gKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWxpYi9saWJ4dC9saWJ4dF9maXhfZm9yX3gzMi5wYXRjaApAQCAtMyw3ICszLDcgQEAKIFRoaXMgZml4ZXMgY29tcGlsYXRpb24gd2l0aCB4MzIgdG9vbGNoYWluLgogCiBSZWNlaXZlZCB0aGlzIHBhdGNoIGZyb20gSC5KLiBMdSA8aGpsLnRvb2xzQGdtYWlsLmNvbT4KLVNpZ25lZC1PZmYtQnk6IE5pdGluIEEgS2FtYmxlIDxuaXRpbi5hLmthbWJsZUBpbnRlbC5jb20+IDIwMTEvMTIvMQorU2lnbmVkLW9mZi1ieTogTml0aW4gQSBLYW1ibGUgPG5pdGluLmEua2FtYmxlQGludGVsLmNvbT4gMjAxMS8xMi8xCiAKIAogLS0tIGxpYlh0LTEuMS4xL2luY2x1ZGUvWDExL1h0b3MuaC54MzIJMjAxMS0wMi0wOCAwNzo1Njo0MC4wMDAwMDAwMDAgLTA4MDAKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1saWIvcGl4bWFuLzAwMDEtdGVzdC11dGlscy1DaGVjay1mb3ItRkVfSU5WQUxJRC1kZWZpbml0aW9uLWJlZm9yZS11cy5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1saWIvcGl4bWFuLzAwMDEtdGVzdC11dGlscy1DaGVjay1mb3ItRkVfSU5WQUxJRC1kZWZpbml0aW9uLWJlZm9yZS11cy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43ODJjMWRiCi0tLSAvZGV2L251bGwKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWxpYi9waXhtYW4vMDAwMS10ZXN0LXV0aWxzLUNoZWNrLWZvci1GRV9JTlZBTElELWRlZmluaXRpb24tYmVmb3JlLXVzLnBhdGNoCkBAIC0wLDAgKzEsMzMgQEAKK0Zyb20gMGNjZDkwNmI5MDRkMjE1MzZkNWFiNDFjNjE5Njc2MGUzZTVkNzJjYiBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CitEYXRlOiBUdWUsIDE3IE1heSAyMDE2IDE3OjMwOjAwIC0wNzAwCitTdWJqZWN0OiBbUEFUQ0hdIHRlc3QvdXRpbHM6IENoZWNrIGZvciBGRV9JTlZBTElEIGRlZmluaXRpb24gYmVmb3JlIHVzZQorCitTb21lIGFyY2hpdGVjdHVyZXMgZS5nLiBuaW9zMiBkbyBub3Qgc3VwcG9ydCBhbGwgZXhjZXB0aW9ucworCitTaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorLS0tCitVcHN0cmVhbS1TdGF0dXM6IFN1Ym1pdHRlZAorCisgdGVzdC91dGlscy5jIHwgMiArKworIDEgZmlsZSBjaGFuZ2VkLCAyIGluc2VydGlvbnMoKykKKworZGlmZiAtLWdpdCBhL3Rlc3QvdXRpbHMuYyBiL3Rlc3QvdXRpbHMuYworaW5kZXggZjhlNDJhNS4uZmUzMmIxZSAxMDA2NDQKKy0tLSBhL3Rlc3QvdXRpbHMuYworKysrIGIvdGVzdC91dGlscy5jCitAQCAtOTc4LDkgKzk3OCwxMSBAQCBlbmFibGVfaW52YWxpZF9leGNlcHRpb25zICh2b2lkKQorIHsKKyAjaWZkZWYgSEFWRV9GRU5WX0gKKyAjaWZkZWYgSEFWRV9GRUVOQUJMRUVYQ0VQVAorKyNpZmRlZiBGRV9JTlZBTElECisgICAgIGZlZW5hYmxlZXhjZXB0IChGRV9JTlZBTElEKTsKKyAjZW5kaWYKKyAjZW5kaWYKKysjZW5kaWYKKyB9CisgCisgdm9pZCAqCistLSAKKzIuOC4yCisKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1saWIvcGl4bWFuLzAwMDEtdjMtdGVzdC1hZGQtYS1jaGVjay1mb3ItRkVfRElWQllaRVJPLnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWxpYi9waXhtYW4vMDAwMS12My10ZXN0LWFkZC1hLWNoZWNrLWZvci1GRV9ESVZCWVpFUk8ucGF0Y2gKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDZiN2MxZTYuLjAwMDAwMDAKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWxpYi9waXhtYW4vMDAwMS12My10ZXN0LWFkZC1hLWNoZWNrLWZvci1GRV9ESVZCWVpFUk8ucGF0Y2gKKysrIC9kZXYvbnVsbApAQCAtMSw2NSArMCwwIEBACi1Gcm9tIGZjZDVlYjliZDBlODY3NGE2ZjQ5ODdhOGZjZTdkYzFiYThmOTMyMGMgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCi1Gcm9tOiBUaG9tYXMgUGV0YXp6b25pIDx0aG9tYXMucGV0YXp6b25pQGZyZWUtZWxlY3Ryb25zLmNvbT4KLURhdGU6IFRodSwgMTcgU2VwIDIwMTUgMDM6MDg6MzYgKzAyMDAKLVN1YmplY3Q6IFtQQVRDSF0gW3YzXSB0ZXN0OiBhZGQgYSBjaGVjayBmb3IgRkVfRElWQllaRVJPCi0KLVNvbWUgYXJjaGl0ZWN0dXJlcywgc3VjaCBhcyBNaWNyb2JsYXplIGFuZCBOaW9zMiwgY3VycmVudGx5IGRvIG5vdAotaW1wbGVtZW50IEZFX0RJVkJZWkVSTywgZXZlbiB0aG91Z2ggdGhleSBoYXZlIDxmZW52Lmg+IGFuZAotZmVlbmFibGVleGNlcHQoKS4gVGhpcyBjb21taXQgYWRkcyBhIGNvbmZpZ3VyZS5hYyBjaGVjayB0byB2ZXJpZnkKLXdoZXRoZXIgRkVfRElWQllaRVJPIGlzIGRlZmluZWQgb3Igbm90LCBhbmQgaWYgbm90LCBkaXNhYmxlcyB0aGUKLXByb2JsZW1hdGljIGNvZGUgaW4gdGVzdC91dGlscy5jLgotCi1TaWduZWQtb2ZmLWJ5OiBUaG9tYXMgUGV0YXp6b25pIDx0aG9tYXMucGV0YXp6b25pQGZyZWUtZWxlY3Ryb25zLmNvbT4KLVNpZ25lZC1vZmYtYnk6IE1hcmVrIFZhc3V0IDxtYXJleEBkZW54LmRlPgotVXBzdHJlYW0tU3RhdHVzOiBCYWNrcG9ydCBbY29tbWl0IDQyOTdlOTA1OF0KLS0tLQotQ2hhbmdlcyB2MSAtPiB2MjoKLQotICogVXNlIHRoZSBhY19jdl9oYXZlX2RlY2xfRkVfRElWQllaRVJPIHZhcmlhYmxlLCB3aGljaCBpcwotICAgYXV0b21hdGljYWxseSBzZXQgYnkgQUNfQ0hFQ0tfREVDTCwgdG8gZGVjaWRlIHdoZXRoZXIgb3Igbm90Ci0gICBIQVZFX0ZFRElWQllaRVJPIHNob3VsZCBiZSBkZWZpbmVkLgotCi1DaGFuZ2VzIHYyIC0+IHYzOgotCi0gKiBVc2UgYWN0aW9uLWlmLXllcyBvZiBBQ19DSEVDS19ERUNMIGFzIHN1Z2dlc3RlZCBpbgotICAgaHR0cDovL2xpc3RzLmZyZWVkZXNrdG9wLm9yZy9hcmNoaXZlcy9waXhtYW4vMjAxNC1GZWJydWFyeS8wMDMxNzYuaHRtbAotLS0tCi0gY29uZmlndXJlLmFjIHwgNSArKysrKwotIHRlc3QvdXRpbHMuYyB8IDIgKysKLSAyIGZpbGVzIGNoYW5nZWQsIDcgaW5zZXJ0aW9ucygrKQotCi1kaWZmIC0tZ2l0IGEvY29uZmlndXJlLmFjIGIvY29uZmlndXJlLmFjCi1pbmRleCBmOTNjYzMwLi40MjRiZmQzIDEwMDY0NAotLS0tIGEvY29uZmlndXJlLmFjCi0rKysgYi9jb25maWd1cmUuYWMKLUBAIC04OTEsNiArODkxLDExIEBAIGlmIHRlc3QgeCRoYXZlX2ZlZW5hYmxlZXhjZXB0ID0geHllczsgdGhlbgotICAgIEFDX0RFRklORShIQVZFX0ZFRU5BQkxFRVhDRVBULCAxLCBbV2hldGhlciB3ZSBoYXZlIGZlZW5hYmxlZXhjZXB0KCldKQotIGZpCi0gCi0rQUNfQ0hFQ0tfREVDTChbRkVfRElWQllaRVJPXSwKLSsJW0FDX0RFRklORShIQVZFX0ZFRElWQllaRVJPLCAxLCBbV2hldGhlciB3ZSBoYXZlIEZFX0RJVkJZWkVST10pXSwKLSsJW10sCi0rCVtbI2luY2x1ZGUgPGZlbnYuaD5dXSkKLSsKLSBBQ19DSEVDS19GVU5DKGdldHRpbWVvZmRheSwgaGF2ZV9nZXR0aW1lb2ZkYXk9eWVzLCBoYXZlX2dldHRpbWVvZmRheT1ubykKLSBBQ19DSEVDS19IRUFERVIoc3lzL3RpbWUuaCwgaGF2ZV9zeXNfdGltZV9oPXllcywgaGF2ZV9zeXNfdGltZV9oPW5vKQotIGlmIHRlc3QgeCRoYXZlX2dldHRpbWVvZmRheSA9IHh5ZXMgJiYgdGVzdCB4JGhhdmVfc3lzX3RpbWVfaCA9IHh5ZXM7IHRoZW4KLWRpZmYgLS1naXQgYS90ZXN0L3V0aWxzLmMgYi90ZXN0L3V0aWxzLmMKLWluZGV4IDIyMmQ0ZDUuLjg2NTc5NjYgMTAwNjQ0Ci0tLS0gYS90ZXN0L3V0aWxzLmMKLSsrKyBiL3Rlc3QvdXRpbHMuYwotQEAgLTk2Niw5ICs5NjYsMTEgQEAgZW5hYmxlX2RpdmJ5emVyb19leGNlcHRpb25zICh2b2lkKQotIHsKLSAjaWZkZWYgSEFWRV9GRU5WX0gKLSAjaWZkZWYgSEFWRV9GRUVOQUJMRUVYQ0VQVAotKyNpZmRlZiBIQVZFX0ZFRElWQllaRVJPCi0gICAgIGZlZW5hYmxlZXhjZXB0IChGRV9ESVZCWVpFUk8pOwotKyNlbmRpZgotICNlbmRpZgotICNlbmRpZgotIH0KLSAKLSB2b2lkCi0tLSAKLTIuMS40Ci0KZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1saWIvcGl4bWFuL21pcHMtZXhwb3J0LXJldmVydC5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1saWIvcGl4bWFuL21pcHMtZXhwb3J0LXJldmVydC5wYXRjaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTRhNWZkMi4uMDAwMDAwMAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctbGliL3BpeG1hbi9taXBzLWV4cG9ydC1yZXZlcnQucGF0Y2gKKysrIC9kZXYvbnVsbApAQCAtMSwyMiArMCwwIEBACi1SZXZlcnQgYSBjb21taXQgaW4gcGl4bWFuIDAuMzIuNiB3aGljaCBicmVha3MgY29tcGxpYXRpb24gb24gTUlQUyBtYWNoaW5lcyB3aXRoCi1lcnJvcnMgc3VjaCBhczoKLQotcGl4bWFuLTAuMzIuNi9waXhtYW4vcGl4bWFuLW1pcHMtZHNwcjItYXNtLlM6NDI2NzoKLUVycm9yOiBpbnZhbGlkIG9wZXJhbmRzIGBtZmxvICQxNCwkYWMzJwotCi1VcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKLVNpZ25lZC1vZmYtYnk6IFJvc3MgQnVydG9uIDxyb3NzLmJ1cnRvbkBpbnRlbC5jb20+Ci0KLS0tLSBiL3BpeG1hbi9waXhtYW4tbWlwcy1kc3ByMi1hc20uaAotKysrIGEvcGl4bWFuL3BpeG1hbi1taXBzLWRzcHIyLWFzbS5oCi1AQCAtNzIsMTAgKzcyLDcgQEAKLSAjZGVmaW5lIExFQUZfTUlQUzMyUjIoc3ltYm9sKSAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgICAgICAgLmdsb2JsICBzeW1ib2w7ICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgICAgICAgLmFsaWduICAyOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLS0jaWZkZWYgX19FTEZfXwotLSAgICAgICAgICAgICAgICAuaGlkZGVuIHN5bWJvbDsgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgICAgICAudHlwZSAgIHN5bWJvbCwgQGZ1bmN0aW9uOyAgICAgICAgICAgICAgXAotLSNlbmRpZgotICAgICAgICAgICAgICAgICAuZW50ICAgIHN5bWJvbCwgMDsgICAgICAgICAgICAgICAgICAgICAgXAotIHN5bWJvbDogICAgICAgICAuZnJhbWUgIHNwLCAwLCByYTsgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgICAgICAuc2V0ICAgIHB1c2g7ICAgICAgICAgICAgICAgICAgICAgICAgICAgXApkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWxpYi9waXhtYW5fMC4zMi44LmJiIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWxpYi9waXhtYW5fMC4zMi44LmJiCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1NTNjZTM2Li4wMDAwMDAwCi0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1saWIvcGl4bWFuXzAuMzIuOC5iYgorKysgL2Rldi9udWxsCkBAIC0xLDQyICswLDAgQEAKLVNVTU1BUlkgPSAiUGl4bWFuOiBQaXhlbCBNYW5pcHVsYXRpb24gbGlicmFyeSIKLQotREVTQ1JJUFRJT04gPSAiUGl4bWFuIHByb3ZpZGVzIGEgbGlicmFyeSBmb3IgbWFuaXB1bGF0aW5nIHBpeGVsIHJlZ2lvbnMgXAotLS0gYSBzZXQgb2YgWS1YIGJhbmRlZCByZWN0YW5nbGVzLCBpbWFnZSBjb21wb3NpdGluZyB1c2luZyB0aGUgXAotUG9ydGVyL0R1ZmYgbW9kZWwgYW5kIGltcGxpY2l0IG1hc2sgZ2VuZXJhdGlvbiBmb3IgZ2VvbWV0cmljIHByaW1pdGl2ZXMgXAotaW5jbHVkaW5nIHRyYXBlem9pZHMsIHRyaWFuZ2xlcywgYW5kIHJlY3RhbmdsZXMuIgotCi1yZXF1aXJlIHhvcmctbGliLWNvbW1vbi5pbmMKLQotIyBzZWUgaHR0cDovL2NhaXJvZ3JhcGhpY3Mub3JnL3JlbGVhc2VzLyAtIG9ubHkgZXZlbiBtaW5vciB2ZXJzaW9ucyBhcmUgc3RhYmxlCi1VUFNUUkVBTV9DSEVDS19SRUdFWCA9ICJwaXhtYW4tKD9QPHB2ZXI+XGQrXC4oXGQqWzAyNDY4XSkrKFwuXGQrKSspIgotCi1MSUNFTlNFID0gIk1JVCAmIE1JVC1zdHlsZSAmIFBEIgotTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9MTQwOTZjNzY5YWUwY2JiNWZjYjk0ZWM0NjhiZTExYjMgXAotICAgICAgICAgICAgICAgICAgICBmaWxlOi8vcGl4bWFuL3BpeG1hbi1tYXRyaXguYztlbmRsaW5lPTI1O21kNT1iYTZlODc2OWJmYWFlZTJjNDE2OTg3NTVhZjA0YzRiZSBcCi0gICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9waXhtYW4vcGl4bWFuLWFybS1uZW9uLWFzbS5oO2VuZGxpbmU9MjQ7bWQ1PTlhOWNjMWU1MWFiYmYxZGE1OGY0ZDk1MjhlYzlkNDliIFwKLSAgICAgICAgICAgICAgICAgICAiCi1ERVBFTkRTICs9ICJ6bGliIGxpYnBuZyIKLUJCQ0xBU1NFWFRFTkQgPSAibmF0aXZlIG5hdGl2ZXNkayIKLQotUEUgPSAiMSIKLQotSVdNTVhUID0gIi0tZGlzYWJsZS1hcm0taXdtbXh0IgotTE9PTkdTT05fTU1JID0gIi0tZGlzYWJsZS1sb29uZ3Nvbi1tbWkiCi0jIElmIHRhcmdldCBzdXBwb3J0cyBuZW9uIHRoZW4gZGlzYWJsZSB0aGUgJ3NpbWQnIChpZSBWRlB2MikgZmFsbGJhY2ssIG90aGVyd2lzZSBkaXNhYmxlIG5lb24uCi1ORU9OID0gIiR7QGJiLnV0aWxzLmNvbnRhaW5zKCJUVU5FX0ZFQVRVUkVTIiwgIm5lb24iLCAiLS1kaXNhYmxlLWFybS1zaW1kIiwgIi0tZGlzYWJsZS1hcm0tbmVvbiIgLGQpfSIKLQotRVhUUkFfT0VDT05GID0gIi0tZGlzYWJsZS1ndGsgJHtJV01NWFR9ICR7TE9PTkdTT05fTU1JfSAke05FT059IgotRVhUUkFfT0VDT05GX2NsYXNzLW5hdGl2ZSA9ICItLWRpc2FibGUtZ3RrIgotRVhUUkFfT0VDT05GX2NsYXNzLW5hdGl2ZXNkayA9ICItLWRpc2FibGUtZ3RrIgotCi1TUkNfVVJJICs9ICJcCi0gICAgICAgICAgICBmaWxlOi8vMDAwMS1BUk0tcWVtdS1yZWxhdGVkLXdvcmthcm91bmRzLWluLWNwdS1mZWF0dXJlcy1kZXRlY3RpLnBhdGNoIFwKLSAgICAgICAgICAgIGZpbGU6Ly9taXBzLWV4cG9ydC1yZXZlcnQucGF0Y2ggXAotCSAgICBmaWxlOi8vYXNtX2luY2x1ZGUucGF0Y2ggXAotCSAgICBmaWxlOi8vMDAwMS12My10ZXN0LWFkZC1hLWNoZWNrLWZvci1GRV9ESVZCWVpFUk8ucGF0Y2ggXAotIgotCi1TUkNfVVJJW21kNXN1bV0gPSAiMThkNmI2MmFiZGI3YmMwZjhlNmIwZGRmNDg5ODZiMmMiCi1TUkNfVVJJW3NoYTI1NnN1bV0gPSAiNWM2M2RiYjM1MjNmYzRkODZlZDQxODY2Nzc4MTU5MThhOTQxYjdjYjM5MGQ1ZWVjNGY1NWNiNWQ2NmI1OWZiMSIKLQotUkVRVUlSRURfRElTVFJPX0ZFQVRVUkVTID0gIiIKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1saWIvcGl4bWFuXzAuMzQuMC5iYiBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1saWIvcGl4bWFuXzAuMzQuMC5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNGNhNjIxCi0tLSAvZGV2L251bGwKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWxpYi9waXhtYW5fMC4zNC4wLmJiCkBAIC0wLDAgKzEsNDEgQEAKK1NVTU1BUlkgPSAiUGl4bWFuOiBQaXhlbCBNYW5pcHVsYXRpb24gbGlicmFyeSIKKworREVTQ1JJUFRJT04gPSAiUGl4bWFuIHByb3ZpZGVzIGEgbGlicmFyeSBmb3IgbWFuaXB1bGF0aW5nIHBpeGVsIHJlZ2lvbnMgXAorLS0gYSBzZXQgb2YgWS1YIGJhbmRlZCByZWN0YW5nbGVzLCBpbWFnZSBjb21wb3NpdGluZyB1c2luZyB0aGUgXAorUG9ydGVyL0R1ZmYgbW9kZWwgYW5kIGltcGxpY2l0IG1hc2sgZ2VuZXJhdGlvbiBmb3IgZ2VvbWV0cmljIHByaW1pdGl2ZXMgXAoraW5jbHVkaW5nIHRyYXBlem9pZHMsIHRyaWFuZ2xlcywgYW5kIHJlY3RhbmdsZXMuIgorCityZXF1aXJlIHhvcmctbGliLWNvbW1vbi5pbmMKKworIyBzZWUgaHR0cDovL2NhaXJvZ3JhcGhpY3Mub3JnL3JlbGVhc2VzLyAtIG9ubHkgZXZlbiBtaW5vciB2ZXJzaW9ucyBhcmUgc3RhYmxlCitVUFNUUkVBTV9DSEVDS19SRUdFWCA9ICJwaXhtYW4tKD9QPHB2ZXI+XGQrXC4oXGQqWzAyNDY4XSkrKFwuXGQrKSspIgorCitMSUNFTlNFID0gIk1JVCAmIE1JVC1zdHlsZSAmIFBEIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9MTQwOTZjNzY5YWUwY2JiNWZjYjk0ZWM0NjhiZTExYjMgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vcGl4bWFuL3BpeG1hbi1tYXRyaXguYztlbmRsaW5lPTI1O21kNT1iYTZlODc2OWJmYWFlZTJjNDE2OTg3NTVhZjA0YzRiZSBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9waXhtYW4vcGl4bWFuLWFybS1uZW9uLWFzbS5oO2VuZGxpbmU9MjQ7bWQ1PTlhOWNjMWU1MWFiYmYxZGE1OGY0ZDk1MjhlYzlkNDliIFwKKyAgICAgICAgICAgICAgICAgICAiCitERVBFTkRTICs9ICJ6bGliIGxpYnBuZyIKK0JCQ0xBU1NFWFRFTkQgPSAibmF0aXZlIG5hdGl2ZXNkayIKKworUEUgPSAiMSIKKworSVdNTVhUID0gIi0tZGlzYWJsZS1hcm0taXdtbXh0IgorTE9PTkdTT05fTU1JID0gIi0tZGlzYWJsZS1sb29uZ3Nvbi1tbWkiCisjIElmIHRhcmdldCBzdXBwb3J0cyBuZW9uIHRoZW4gZGlzYWJsZSB0aGUgJ3NpbWQnIChpZSBWRlB2MikgZmFsbGJhY2ssIG90aGVyd2lzZSBkaXNhYmxlIG5lb24uCitORU9OID0gIiR7QGJiLnV0aWxzLmNvbnRhaW5zKCJUVU5FX0ZFQVRVUkVTIiwgIm5lb24iLCAiLS1kaXNhYmxlLWFybS1zaW1kIiwgIi0tZGlzYWJsZS1hcm0tbmVvbiIgLGQpfSIKKworRVhUUkFfT0VDT05GID0gIi0tZGlzYWJsZS1ndGsgJHtJV01NWFR9ICR7TE9PTkdTT05fTU1JfSAke05FT059IgorRVhUUkFfT0VDT05GX2NsYXNzLW5hdGl2ZSA9ICItLWRpc2FibGUtZ3RrIgorRVhUUkFfT0VDT05GX2NsYXNzLW5hdGl2ZXNkayA9ICItLWRpc2FibGUtZ3RrIgorCitTUkNfVVJJICs9ICJcCisgICAgICAgICAgICBmaWxlOi8vMDAwMS1BUk0tcWVtdS1yZWxhdGVkLXdvcmthcm91bmRzLWluLWNwdS1mZWF0dXJlcy1kZXRlY3RpLnBhdGNoIFwKKwkgICAgZmlsZTovL2FzbV9pbmNsdWRlLnBhdGNoIFwKKwkgICAgZmlsZTovLzAwMDEtdGVzdC11dGlscy1DaGVjay1mb3ItRkVfSU5WQUxJRC1kZWZpbml0aW9uLWJlZm9yZS11cy5wYXRjaCBcCisiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICIwMDJhNGZjYjY0NGRkZmNiNGIwZTQxOTE1NzZhMGQ1OSIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICIzOWJhMzQzOGYzZDE3YzQ2NGIwY2I4YmUwMDZkYWNiY2EwYWI1YWVlOTdlYmRlNjlmZWM3ZWNkYmY4NTc5NGEwIgorCitSRVFVSVJFRF9ESVNUUk9fRkVBVFVSRVMgPSAiIgpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWxpYi94a2V5Ym9hcmQtY29uZmlnXzIuMTYuYmIgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctbGliL3hrZXlib2FyZC1jb25maWdfMi4xNi5iYgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTZhMWY0Zi4uMDAwMDAwMAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctbGliL3hrZXlib2FyZC1jb25maWdfMi4xNi5iYgorKysgL2Rldi9udWxsCkBAIC0xLDMxICswLDAgQEAKLVNVTU1BUlkgPSAiS2V5Ym9hcmQgY29uZmlndXJhdGlvbiBkYXRhYmFzZSBmb3IgWCBXaW5kb3ciCi0KLURFU0NSSVBUSU9OID0gIlRoZSBub24tYXJjaCBrZXlib2FyZCBjb25maWd1cmF0aW9uIGRhdGFiYXNlIGZvciBYIFwKLVdpbmRvdy4gIFRoZSBnb2FsIGlzIHRvIHByb3ZpZGUgdGhlIGNvbnNpc3RlbnQsIHdlbGwtc3RydWN0dXJlZCwgXAotZnJlcXVlbnRseSByZWxlYXNlZCBvcGVuIHNvdXJjZSBvZiBYIGtleWJvYXJkIGNvbmZpZ3VyYXRpb24gZGF0YSBmb3IgWCBcCi1XaW5kb3cgU3lzdGVtIGltcGxlbWVudGF0aW9ucy4gIFRoZSBwcm9qZWN0IGlzIHRhcmdldGVkIHRvIFhLQi1iYXNlZCBcCi1zeXN0ZW1zLiIKLQotSE9NRVBBR0UgPSAiaHR0cDovL2ZyZWVkZXNrdG9wLm9yZy93aWtpL1NvZnR3YXJlL1hLZXlib2FyZENvbmZpZyIKLUJVR1RSQUNLRVIgPSAiaHR0cHM6Ly9idWdzLmZyZWVkZXNrdG9wLm9yZy9lbnRlcl9idWcuY2dpP3Byb2R1Y3Q9eGtleWJvYXJkLWNvbmZpZyIKLQotTElDRU5TRSA9ICJNSVQgJiBNSVQtc3R5bGUiCi1MSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT0wZTdmMjFjYTdkYjk3NWM2MzQ2N2QyZTc2MjRhMTJmOSIKLQotU1JDX1VSSSA9ICIke1hPUkdfTUlSUk9SfS9pbmRpdmlkdWFsL2RhdGEveGtleWJvYXJkLWNvbmZpZy8ke0JQTn0tJHtQVn0udGFyLmJ6MiIKLVNSQ19VUklbbWQ1c3VtXSA9ICJiZjZhYTMxMTk1NTg0Y2ZjZTAxYjIxOTRjM2U1ZWEyNiIKLVNSQ19VUklbc2hhMjU2c3VtXSA9ICIxZThhMWYyMTJjOTZiN2Y3MWNhMGIwNWRhMzYxY2FjMTgxNmQyN2JhYWUxZDhlMDNlN2I1MzA0OWI1OGQxZDU4IgotCi1TRUNUSU9OID0gIngxMS9saWJzIgotREVQRU5EUyA9ICJpbnRsdG9vbC1uYXRpdmUgdmlydHVhbC9nZXR0ZXh0IHV0aWwtbWFjcm9zIGxpYnhzbHQtbmF0aXZlIgotCi1FWFRSQV9PRUNPTkYgPSAiLS13aXRoLXhrYi1ydWxlcy1zeW1saW5rPXhvcmcgLS1kaXNhYmxlLXJ1bnRpbWUtZGVwcyIKLQotRklMRVNfJHtQTn0gKz0gIiR7ZGF0YWRpcn0vWDExL3hrYiIKLQotaW5oZXJpdCBhdXRvdG9vbHMgcGtnY29uZmlnIGdldHRleHQKLQotZG9faW5zdGFsbF9hcHBlbmQgKCkgewotICAgIGluc3RhbGwgLWQgJHtEfSR7ZGF0YWRpcn0vWDExL3hrYi9jb21waWxlZAotICAgIGNkICR7RH0ke2RhdGFkaXJ9L1gxMS94a2IvcnVsZXMgJiYgbG4gLXNmIGJhc2UgeG9yZwotfQpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWxpYi94a2V5Ym9hcmQtY29uZmlnXzIuMTguYmIgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctbGliL3hrZXlib2FyZC1jb25maWdfMi4xOC5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43OWZjYmQ4Ci0tLSAvZGV2L251bGwKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWxpYi94a2V5Ym9hcmQtY29uZmlnXzIuMTguYmIKQEAgLTAsMCArMSwzMSBAQAorU1VNTUFSWSA9ICJLZXlib2FyZCBjb25maWd1cmF0aW9uIGRhdGFiYXNlIGZvciBYIFdpbmRvdyIKKworREVTQ1JJUFRJT04gPSAiVGhlIG5vbi1hcmNoIGtleWJvYXJkIGNvbmZpZ3VyYXRpb24gZGF0YWJhc2UgZm9yIFggXAorV2luZG93LiAgVGhlIGdvYWwgaXMgdG8gcHJvdmlkZSB0aGUgY29uc2lzdGVudCwgd2VsbC1zdHJ1Y3R1cmVkLCBcCitmcmVxdWVudGx5IHJlbGVhc2VkIG9wZW4gc291cmNlIG9mIFgga2V5Ym9hcmQgY29uZmlndXJhdGlvbiBkYXRhIGZvciBYIFwKK1dpbmRvdyBTeXN0ZW0gaW1wbGVtZW50YXRpb25zLiAgVGhlIHByb2plY3QgaXMgdGFyZ2V0ZWQgdG8gWEtCLWJhc2VkIFwKK3N5c3RlbXMuIgorCitIT01FUEFHRSA9ICJodHRwOi8vZnJlZWRlc2t0b3Aub3JnL3dpa2kvU29mdHdhcmUvWEtleWJvYXJkQ29uZmlnIgorQlVHVFJBQ0tFUiA9ICJodHRwczovL2J1Z3MuZnJlZWRlc2t0b3Aub3JnL2VudGVyX2J1Zy5jZ2k/cHJvZHVjdD14a2V5Ym9hcmQtY29uZmlnIgorCitMSUNFTlNFID0gIk1JVCAmIE1JVC1zdHlsZSIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PTBlN2YyMWNhN2RiOTc1YzYzNDY3ZDJlNzYyNGExMmY5IgorCitTUkNfVVJJID0gIiR7WE9SR19NSVJST1J9L2luZGl2aWR1YWwvZGF0YS94a2V5Ym9hcmQtY29uZmlnLyR7QlBOfS0ke1BWfS50YXIuYnoyIgorU1JDX1VSSVttZDVzdW1dID0gImMyOGNmNDU2MTZiZmVjMjc2ODc5MzYwYmMzNmM2YjI3IgorU1JDX1VSSVtzaGEyNTZzdW1dID0gImM0MWQ5MTdkNmM4YTU5ZmViN2NjYmRhNTFjNDBhNmFkYTgyNGZkZDFlOTY4NGI1MmRkNDhjOTUzMDYxN2RkZDAiCisKK1NFQ1RJT04gPSAieDExL2xpYnMiCitERVBFTkRTID0gImludGx0b29sLW5hdGl2ZSB2aXJ0dWFsL2dldHRleHQgdXRpbC1tYWNyb3MgbGlieHNsdC1uYXRpdmUiCisKK0VYVFJBX09FQ09ORiA9ICItLXdpdGgteGtiLXJ1bGVzLXN5bWxpbms9eG9yZyAtLWRpc2FibGUtcnVudGltZS1kZXBzIgorCitGSUxFU18ke1BOfSArPSAiJHtkYXRhZGlyfS9YMTEveGtiIgorCitpbmhlcml0IGF1dG90b29scyBwa2djb25maWcgZ2V0dGV4dAorCitkb19pbnN0YWxsX2FwcGVuZCAoKSB7CisgICAgaW5zdGFsbCAtZCAke0R9JHtkYXRhZGlyfS9YMTEveGtiL2NvbXBpbGVkCisgICAgY2QgJHtEfSR7ZGF0YWRpcn0vWDExL3hrYi9ydWxlcyAmJiBsbiAtc2YgYmFzZSB4b3JnCit9CmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctcHJvdG8vZHJpMnByb3RvX2dpdC5iYiBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1wcm90by9kcmkycHJvdG9fZ2l0LmJiCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5MDc0ZjQ4Li4wMDAwMDAwCi0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1wcm90by9kcmkycHJvdG9fZ2l0LmJiCisrKyAvZGV2L251bGwKQEAgLTEsMTggKzAsMCBAQAotcmVxdWlyZSB4b3JnLXByb3RvLWNvbW1vbi5pbmMKLQotU1VNTUFSWSA9ICJEUkkyOiBEaXJlY3QgUmVuZGVyaW5nIEluZnJhc3RydWN0dXJlIDIgaGVhZGVycyIKLQotREVTQ1JJUFRJT04gPSAiVGhpcyBwYWNrYWdlIHByb3ZpZGVzIHRoZSB3aXJlIHByb3RvY29sIGZvciB0aGUgRGlyZWN0IFwKLVJlbmRlcmluZyBJZm5yYXN0cnVjdHVyZSAyLiAgRElSIGlzIHJlcXVpcmVkIGZvciBtYXkgaGFyZHdhcmUgXAotYWNjZWxlcmF0ZWQgT3BlbkdMIGRyaXZlcnMuIgotCi1TUkNSRVYgPSAiNjZjNTZhYjEwZDkxN2UzZjQ3ZjkzMTc4ZDdlYWM2NDMwOTcwZDNjNCIKLVBWID0gIjEuOTkuMytnaXQke1NSQ1BWfSIKLVBSID0gInIyIgotCi1TUkNfVVJJID0gImdpdDovL2Fub25naXQuZnJlZWRlc2t0b3Aub3JnL2dpdC94b3JnL3Byb3RvL2RyaTJwcm90byIKLQotTElDX0ZJTEVTX0NIS1NVTT0iZmlsZTovL0NPUFlJTkc7bWQ1PTJlMzk2ZmE5MTgzNGY4Nzg2MDMyY2FkMmRhNTYzOGYzIgotCi1TID0gIiR7V09SS0RJUn0vZ2l0IgotCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctcHJvdG8vaW5wdXRwcm90b18yLjMuMS5iYiBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1wcm90by9pbnB1dHByb3RvXzIuMy4xLmJiCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3ZThlMGMxLi4wMDAwMDAwCi0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1wcm90by9pbnB1dHByb3RvXzIuMy4xLmJiCisrKyAvZGV2L251bGwKQEAgLTEsMjAgKzAsMCBAQAotcmVxdWlyZSB4b3JnLXByb3RvLWNvbW1vbi5pbmMKLQotU1VNTUFSWSA9ICJYSTogWCBJbnB1dCBleHRlbnNpb24gaGVhZGVycyIKLQotREVTQ1JJUFRJT04gPSAiVGhpcyBwYWNrYWdlIHByb3ZpZGVzIHRoZSB3aXJlIHByb3RvY29sIGZvciB0aGUgWCBJbnB1dCBcCi1leHRlbnNpb24uICBUaGUgZXh0ZW5zaW9uIHN1cHBvcnRzIGlucHV0IGRldmljZXMgb3RoZXIgdGhlbiB0aGUgY29yZSBYIFwKLWtleWJvYXJkIGFuZCBwb2ludGVyLiIKLQotTElDRU5TRSA9ICJNSVQgJiBNSVQtc3R5bGUiCi1MSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT1lNTYyY2MwZjY1ODdiOTYxZjAzMjIxMWQ4MTYwZjMxZSBcCi0gICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9YSTJwcm90by5oO2VuZGxpbmU9NDg7bWQ1PTFhYzE1ODFlNjExODhkYTI4ODVjYzE0ZmY0OWIyMGJlIgotCi1QRSA9ICIxIgotCi1pbmhlcml0IGdldHRleHQKLQotQkJDTEFTU0VYVEVORCA9ICJuYXRpdmUgbmF0aXZlc2RrIgotCi1TUkNfVVJJW21kNXN1bV0gPSAiNmNhZWJlYWQ0Yjc3OWJhMDMxNzI3ZjY2YTdmZmEzNTgiCi1TUkNfVVJJW3NoYTI1NnN1bV0gPSAiNWE0N2VlNjIwNTNhNmFjZWYzYTgzZjUwNjMxMjQ5NGJlMTQ2MTA2OGQwYjkyNjlkODE4ODM5NzAzYjk1YzFkMSIKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1wcm90by9pbnB1dHByb3RvXzIuMy4yLmJiIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLXByb3RvL2lucHV0cHJvdG9fMi4zLjIuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWI1ZTY2YgotLS0gL2Rldi9udWxsCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1wcm90by9pbnB1dHByb3RvXzIuMy4yLmJiCkBAIC0wLDAgKzEsMjIgQEAKK3JlcXVpcmUgeG9yZy1wcm90by1jb21tb24uaW5jCisKK1NVTU1BUlkgPSAiWEk6IFggSW5wdXQgZXh0ZW5zaW9uIGhlYWRlcnMiCisKK0RFU0NSSVBUSU9OID0gIlRoaXMgcGFja2FnZSBwcm92aWRlcyB0aGUgd2lyZSBwcm90b2NvbCBmb3IgdGhlIFggSW5wdXQgXAorZXh0ZW5zaW9uLiAgVGhlIGV4dGVuc2lvbiBzdXBwb3J0cyBpbnB1dCBkZXZpY2VzIG90aGVyIHRoZW4gdGhlIGNvcmUgWCBcCitrZXlib2FyZCBhbmQgcG9pbnRlci4iCisKK0xJQ0VOU0UgPSAiTUlUICYgTUlULXN0eWxlIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9ZTU2MmNjMGY2NTg3Yjk2MWYwMzIyMTFkODE2MGYzMWUgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vWEkycHJvdG8uaDtlbmRsaW5lPTQ4O21kNT0xYWMxNTgxZTYxMTg4ZGEyODg1Y2MxNGZmNDliMjBiZSIKKworUEUgPSAiMSIKKworaW5oZXJpdCBnZXR0ZXh0CisKK0JCQ0xBU1NFWFRFTkQgPSAibmF0aXZlIG5hdGl2ZXNkayIKKworU1JDX1VSSVttZDVzdW1dID0gImIyOTBhNDYzYWY3ZGVmNDgzZTZlMTkwZGU0NjBmMzFhIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjg5M2E2YWY1NTczMzI2MjA1OGEyN2IzOGVlYjFlZGM3MzM2NjlmMDFkNDA0ZTg1ODFiMTY3ZjAzYzAzZWYzMWQiCisKK0VYVFJBX09FQ09ORiArPSAiLS13aXRob3V0LWFzY2lpZG9jIgpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLXByb3RvL2lucHV0cHJvdG9fZ2l0LmJiIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLXByb3RvL2lucHV0cHJvdG9fZ2l0LmJiCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2NTIwZjNiLi4wMDAwMDAwCi0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1wcm90by9pbnB1dHByb3RvX2dpdC5iYgorKysgL2Rldi9udWxsCkBAIC0xLDE5ICswLDAgQEAKLXJlcXVpcmUgeG9yZy1wcm90by1jb21tb24uaW5jCi0KLVNVTU1BUlkgPSAiWEk6IFggSW5wdXQgZXh0ZW5zaW9uIGhlYWRlcnMiCi0KLURFU0NSSVBUSU9OID0gIlRoaXMgcGFja2FnZSBwcm92aWRlcyB0aGUgd2lyZSBwcm90b2NvbCBmb3IgdGhlIFggSW5wdXQgXAotZXh0ZW5zaW9uLiAgVGhlIGV4dGVuc2lvbiBzdXBwb3J0cyBpbnB1dCBkZXZpY2VzIG90aGVyIHRoZW4gdGhlIGNvcmUgWCBcCi1rZXlib2FyZCBhbmQgcG9pbnRlci4iCi0KLVBSID0gInIxIgotUEUgPSAiMSIKLVNSQ1JFViA9ICI3MjAzMDM2NTIyYmE5ZDRiMjI0ZDI4MmQ2YWZjMmQwYjk0NzcxMWVlIgotUFYgPSAiMS45Ljk5LjEyK2dpdCR7U1JDUFZ9IgotCi1TUkNfVVJJID0gImdpdDovL2Fub25naXQuZnJlZWRlc2t0b3Aub3JnL2dpdC94b3JnL3Byb3RvL2lucHV0cHJvdG8iCi1TID0gIiR7V09SS0RJUn0vZ2l0IgotCi1pbmhlcml0IGdldHRleHQKLQotQkJDTEFTU0VYVEVORCA9ICJuYXRpdmUgbmF0aXZlc2RrIgpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLXByb3RvL3ZpZGVvcHJvdG9fMi4zLjIuYmIgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctcHJvdG8vdmlkZW9wcm90b18yLjMuMi5iYgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTNhYTc1OS4uMDAwMDAwMAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctcHJvdG8vdmlkZW9wcm90b18yLjMuMi5iYgorKysgL2Rldi9udWxsCkBAIC0xLDE0ICswLDAgQEAKLXJlcXVpcmUgeG9yZy1wcm90by1jb21tb24uaW5jCi0KLVNVTU1BUlkgPSAiWHY6IFggVmlkZW8gZXh0ZW5zaW9uIGhlYWRlcnMiCi0KLURFU0NSSVBUSU9OID0gIlRoaXMgcGFja2FnZSBwcm92aWRlcyB0aGUgd2lyZSBwcm90b2NvbCBmb3IgdGhlIFggVmlkZW8gXAotZXh0ZW5zaW9uLiAgVGhpcyBleHRlbnNpb24gYWxvd3MgZm9yIGFjY2VybGF0ZWQgZHJhd2luZyBvZiB2aWRlb3MuIgotCi1MSUNFTlNFID0gIk1JVCAmIE1JVC1zdHlsZSIKLUxJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PWNlMzQ3MmExMTlhODY0MDg1ZmE0MTU1Y2IwOTc5YTdiIgotCi1QRSA9ICIxIgotCi1TUkNfVVJJW21kNXN1bV0gPSAiZTY1ODY0MTU5NTMyN2QzOTkwZWFiNzBmZGI1NWNhOGIiCi1TUkNfVVJJW3NoYTI1NnN1bV0gPSAiOGRhZTE2OGNiODIwZmNkMzJmNTY0ODc5YWZiM2YyNGQyN2MxNzYzMDBkOWFmNjY4MTlhMTgyNjU1MzliZDRiNiIKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1wcm90by92aWRlb3Byb3RvXzIuMy4zLmJiIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLXByb3RvL3ZpZGVvcHJvdG9fMi4zLjMuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmY5N2EyNgotLS0gL2Rldi9udWxsCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1wcm90by92aWRlb3Byb3RvXzIuMy4zLmJiCkBAIC0wLDAgKzEsMTQgQEAKK3JlcXVpcmUgeG9yZy1wcm90by1jb21tb24uaW5jCisKK1NVTU1BUlkgPSAiWHY6IFggVmlkZW8gZXh0ZW5zaW9uIGhlYWRlcnMiCisKK0RFU0NSSVBUSU9OID0gIlRoaXMgcGFja2FnZSBwcm92aWRlcyB0aGUgd2lyZSBwcm90b2NvbCBmb3IgdGhlIFggVmlkZW8gXAorZXh0ZW5zaW9uLiAgVGhpcyBleHRlbnNpb24gYWxvd3MgZm9yIGFjY2VybGF0ZWQgZHJhd2luZyBvZiB2aWRlb3MuIgorCitMSUNFTlNFID0gIk1JVCAmIE1JVC1zdHlsZSIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PWNlMzQ3MmExMTlhODY0MDg1ZmE0MTU1Y2IwOTc5YTdiIgorCitQRSA9ICIxIgorCitTUkNfVVJJW21kNXN1bV0gPSAiZmU4NmRlOGVhM2ViNTNiNWE4ZjUyOTU2YzVjZDMxNzQiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiYzc4MDM4ODlmZDA4ZTZmY2FmN2I2OGNjMzk0ZmIwMzhiMjMyNWQxZjMxNWU1NzFhNjk1NDU3N2UwN2NjYTcwMiIKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1wcm90by94Y2ItcHJvdG8uaW5jIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLXByb3RvL3hjYi1wcm90by5pbmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDg3MDNkNjMuLjAwMDAwMDAKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLXByb3RvL3hjYi1wcm90by5pbmMKKysrIC9kZXYvbnVsbApAQCAtMSwyNiArMCwwIEBACi1TVU1NQVJZID0gIlhDQjogVGhlIFggcHJvdG9jb2wgQyBiaW5kaW5nIGhlYWRlcnMiCi1ERVNDUklQVElPTiA9ICJGdW5jdGlvbiBwcm90b3R5cGVzIGZvciB0aGUgWCBwcm90b2NvbCBDLWxhbmd1YWdlIEJpbmRpbmcgXAotKFhDQikuICBYQ0IgaXMgYSByZXBsYWNlbWVudCBmb3IgWGxpYiBmZWF0dXJpbmcgYSBzbWFsbCBmb290cHJpbnQsIFwKLWxhdGVuY3kgaGlkaW5nLCBkaXJlY3QgYWNjZXNzIHRvIHRoZSBwcm90b2NvbCwgaW1wcm92ZWQgdGhyZWFkaW5nIFwKLXN1cHBvcnQsIGFuZCBleHRlbnNpYmlsaXR5LiIKLUhPTUVQQUdFID0gImh0dHA6Ly94Y2IuZnJlZWRlc2t0b3Aub3JnIgotQlVHVFJBQ0tFUiA9ICJodHRwczovL2J1Z3MuZnJlZWRlc2t0b3Aub3JnL2VudGVyX2J1Zy5jZ2k/cHJvZHVjdD1YQ0IiCi0KLVNFQ1RJT04gPSAieDExL2xpYnMiCi1MSUNFTlNFID0gIk1JVC1YIgotCi1TUkNfVVJJID0gImh0dHA6Ly94Y2IuZnJlZWRlc2t0b3Aub3JnL2Rpc3QveGNiLXByb3RvLSR7UFZ9LnRhci5iejIgXAotICAgICAgICAgICBmaWxlOi8vbm8tcHl0aG9uLW5hdGl2ZS5wYXRjaCIKLQotaW5oZXJpdCBhdXRvdG9vbHMgcGtnY29uZmlnCi0KLVBBQ0tBR0VTICs9ICJweXRob24teGNiZ2VuIgotCi1GSUxFU18ke1BOfSA9ICIiCi1GSUxFU18ke1BOfS1kZXYgKz0gIiR7ZGF0YWRpcn0veGNiLyoueG1sICR7ZGF0YWRpcn0veGNiLyoueHNkIgotRklMRVNfcHl0aG9uLXhjYmdlbiA9ICIke2xpYmRpcn0veGNiLXByb3RvIgotCi1SREVQRU5EU18ke1BOfS1kZXYgPSAiIgotUlJFQ09NTUVORFNfJHtQTn0tZGJnID0gIiR7UE59LWRldiAoPSAke0VYVEVORFBLR1Z9KSIKLQotQkJDTEFTU0VYVEVORCA9ICJuYXRpdmUgbmF0aXZlc2RrIgpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLXByb3RvL3hjYi1wcm90by8wMDAxLU1ha2Utd2hpdGVzcGFjZS11c2UtY29uc2lzdGVudC5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1wcm90by94Y2ItcHJvdG8vMDAwMS1NYWtlLXdoaXRlc3BhY2UtdXNlLWNvbnNpc3RlbnQucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODllYzY2NgotLS0gL2Rldi9udWxsCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1wcm90by94Y2ItcHJvdG8vMDAwMS1NYWtlLXdoaXRlc3BhY2UtdXNlLWNvbnNpc3RlbnQucGF0Y2gKQEAgLTAsMCArMSwyMTUgQEAKK0Zyb20gZWE3YTNhYzZjNjU4MTY0NjkwZTBmZWJiNTVmNDQ2N2NiOWUwYmNhYyBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IFRob21hcyBLbGF1c25lciA8d2l6QE5ldEJTRC5vcmc+CitEYXRlOiBUaHUsIDE5IE1heSAyMDE2IDE3OjMwOjA0ICswMjAwCitTdWJqZWN0OiBbUEFUQ0ggMS8yXSBNYWtlIHdoaXRlc3BhY2UgdXNlIGNvbnNpc3RlbnQuCisKK0F0IGxlYXN0IHB5dGhvbi0zLjUueCBjb21wbGFpbnMgYWJvdXQgdGhpcyBmb3JjZWZ1bGx5LgorCitTaWduZWQtb2ZmLWJ5OiBUaG9tYXMgS2xhdXNuZXIgPHdpekBOZXRCU0Qub3JnPgorU2lnbmVkLW9mZi1ieTogVWxpIFNjaGxhY2h0ZXIgPHBzeWNob25Aem5jLmluPgorCitVcHN0cmVhbS1TdGF0dXM6IEJhY2twb3J0CisKK1NpZ25lZC1vZmYtYnk6IFJvYmVydCBZYW5nIDxsaWV6aGkueWFuZ0B3aW5kcml2ZXIuY29tPgorLS0tCisgeGNiZ2VuL2FsaWduLnB5IHwgOTYgKysrKysrKysrKysrKysrKysrKysrKysrKysrKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgMSBmaWxlIGNoYW5nZWQsIDQ4IGluc2VydGlvbnMoKyksIDQ4IGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEveGNiZ2VuL2FsaWduLnB5IGIveGNiZ2VuL2FsaWduLnB5CitpbmRleCA1ZTMxODM4Li5kNGMxMmVlIDEwMDY0NAorLS0tIGEveGNiZ2VuL2FsaWduLnB5CisrKysgYi94Y2JnZW4vYWxpZ24ucHkKK0BAIC0xNiwxMiArMTYsMTIgQEAgY2xhc3MgQWxpZ25tZW50KG9iamVjdCk6CisgICAgICAgICByZXR1cm4gc2VsZi5hbGlnbiA9PSBvdGhlci5hbGlnbiBhbmQgc2VsZi5vZmZzZXQgPT0gb3RoZXIub2Zmc2V0CisgCisgICAgIGRlZiBfX3N0cl9fKHNlbGYpOgorLQlyZXR1cm4gIihhbGlnbj0lZCwgb2Zmc2V0PSVkKSIgJSAoc2VsZi5hbGlnbiwgc2VsZi5vZmZzZXQpCisrICAgICAgICByZXR1cm4gIihhbGlnbj0lZCwgb2Zmc2V0PSVkKSIgJSAoc2VsZi5hbGlnbiwgc2VsZi5vZmZzZXQpCisgCisgICAgIEBzdGF0aWNtZXRob2QKKyAgICAgZGVmIGZvcl9wcmltaXRpdmVfdHlwZShzaXplKToKKy0JIyBjb21wdXRlIHRoZSByZXF1aXJlZCBzdGFydF9hbGlnbm1lbnQgYmFzZWQgb24gdGhlIHNpemUgb2YgdGhlIHR5cGUKKy0JaWYgc2l6ZSAlIDggPT0gMDoKKysgICAgICAgICMgY29tcHV0ZSB0aGUgcmVxdWlyZWQgc3RhcnRfYWxpZ25tZW50IGJhc2VkIG9uIHRoZSBzaXplIG9mIHRoZSB0eXBlCisrICAgICAgICBpZiBzaXplICUgOCA9PSAwOgorICAgICAgICAgICAgICMgZG8gOC1ieXRlIHByaW1pdGl2ZXMgcmVxdWlyZSA4LWJ5dGUgYWxpZ25tZW50IGluIFgxMT8KKyAgICAgICAgICAgICByZXR1cm4gQWxpZ25tZW50KDgsMCkKKyAgICAgICAgIGVsaWYgc2l6ZSAlIDQgPT0gMDoKK0BAIC0zMyw3ICszMyw3IEBAIGNsYXNzIEFsaWdubWVudChvYmplY3QpOgorIAorIAorICAgICBkZWYgYWxpZ25fYWZ0ZXJfZml4ZWRfc2l6ZShzZWxmLCBzaXplKToKKy0JbmV3X29mZnNldCA9IChzZWxmLm9mZnNldCArIHNpemUpICUgc2VsZi5hbGlnbgorKyAgICAgICAgbmV3X29mZnNldCA9IChzZWxmLm9mZnNldCArIHNpemUpICUgc2VsZi5hbGlnbgorICAgICAgICAgcmV0dXJuIEFsaWdubWVudChzZWxmLmFsaWduLCBuZXdfb2Zmc2V0KQorIAorIAorQEAgLTQxLDcgKzQxLDcgQEAgY2xhc3MgQWxpZ25tZW50KG9iamVjdCk6CisgICAgICAgICAnJycKKyAgICAgICAgIEFzc3VtaW5nIHRoZSBnaXZlbiBleHRlcm5hbF9hbGlnbiwgY2hlY2tzIHdoZXRoZXIKKyAgICAgICAgIHNlbGYgaXMgZnVsZmlsbGVkIGZvciBhbGwgY2FzZXMuCistCVJldHVybnMgVHJ1ZSBpZiB5ZXMsIEZhbHNlIG90aGVyd2lzZS4KKysgICAgICAgIFJldHVybnMgVHJ1ZSBpZiB5ZXMsIEZhbHNlIG90aGVyd2lzZS4KKyAgICAgICAgICcnJworICAgICAgICAgaWYgc2VsZi5hbGlnbiA9PSAxIGFuZCBzZWxmLm9mZnNldCA9PSAwOgorICAgICAgICAgICAgICMgYWxpZ25tZW50IDEgd2l0aCBvZmZzZXQgMCBpcyBhbHdheXMgZnVsZmlsbGVkCitAQCAtNTUsOSArNTUsOSBAQCBjbGFzcyBBbGlnbm1lbnQob2JqZWN0KToKKyAgICAgICAgICAgICAjIHRoZSBleHRlcm5hbCBhbGlnbiBndWFyYW50ZWVzIGxlc3MgYWxpZ25tZW50IC0+IG5vdCBndWFyYW50ZWVkCisgICAgICAgICAgICAgcmV0dXJuIEZhbHNlCisgCistCWlmIGV4dGVybmFsX2FsaWduLmFsaWduICUgc2VsZi5hbGlnbiAhPSAwOgorKyAgICAgICAgaWYgZXh0ZXJuYWxfYWxpZ24uYWxpZ24gJSBzZWxmLmFsaWduICE9IDA6CisgICAgICAgICAgICAgIyB0aGUgZXh0ZXJuYWwgYWxpZ24gY2Fubm90IGJlIGRpdmlkZWQgYnkgb3VyIGFsaWduCistCSAgICAjIC0+IG5vdCBndWFyYW50ZWVkCisrICAgICAgICAgICAgIyAtPiBub3QgZ3VhcmFudGVlZAorICAgICAgICAgICAgICMgKHRoaXMgY2FuIG9ubHkgaGFwcGVuIGlmIHRoZXJlIGFyZSBhbGlnbm1lbnRzIHRoYXQgYXJlIG5vdAorICAgICAgICAgICAgICMgYSBwb3dlciBvZiAyLCB3aGljaCBpcyBoaWdobHkgZGlzY291cmFnZWQuIEJ1dCBiZXR0ZXIgYmUKKyAgICAgICAgICAgICAjIHNhZmUgYW5kIGNoZWNrIGZvciBpdCkKK0BAIC03Miw3ICs3Miw3IEBAIGNsYXNzIEFsaWdubWVudChvYmplY3QpOgorIAorICAgICBkZWYgY29tYmluZV93aXRoKHNlbGYsIG90aGVyKToKKyAgICAgICAgICMgcmV0dXJucyB0aGUgYWxpZ25tZW50IHRoYXQgaXMgZ3VhcmFudGVlZCB3aGVuCistCSMgYm90aCwgc2VsZiBvciBvdGhlciwgY2FuIGhhcHBlbgorKyAgICAgICAgIyBib3RoLCBzZWxmIG9yIG90aGVyLCBjYW4gaGFwcGVuCisgICAgICAgICBuZXdfYWxpZ24gPSBnY2Qoc2VsZi5hbGlnbiwgb3RoZXIuYWxpZ24pCisgICAgICAgICBuZXdfb2Zmc2V0X2NhbmRpZGF0ZTEgPSBzZWxmLm9mZnNldCAlIG5ld19hbGlnbgorICAgICAgICAgbmV3X29mZnNldF9jYW5kaWRhdGUyID0gb3RoZXIub2Zmc2V0ICUgbmV3X2FsaWduCitAQCAtODMsOCArODMsOCBAQCBjbGFzcyBBbGlnbm1lbnQob2JqZWN0KToKKyAgICAgICAgICAgICBuZXdfYWxpZ24gPSBnY2QobmV3X2FsaWduLCBvZmZzZXRfZGlmZikKKyAgICAgICAgICAgICBuZXdfb2Zmc2V0X2NhbmRpZGF0ZTEgPSBzZWxmLm9mZnNldCAlIG5ld19hbGlnbgorICAgICAgICAgICAgIG5ld19vZmZzZXRfY2FuZGlkYXRlMiA9IG90aGVyLm9mZnNldCAlIG5ld19hbGlnbgorLQkgICAgYXNzZXJ0IG5ld19vZmZzZXRfY2FuZGlkYXRlMSA9PSBuZXdfb2Zmc2V0X2NhbmRpZGF0ZTIKKy0JICAgIG5ld19vZmZzZXQgPSBuZXdfb2Zmc2V0X2NhbmRpZGF0ZTEKKysgICAgICAgICAgICBhc3NlcnQgbmV3X29mZnNldF9jYW5kaWRhdGUxID09IG5ld19vZmZzZXRfY2FuZGlkYXRlMgorKyAgICAgICAgICAgIG5ld19vZmZzZXQgPSBuZXdfb2Zmc2V0X2NhbmRpZGF0ZTEKKyAgICAgICAgICMgcmV0dXJuIHRoZSByZXN1bHQKKyAgICAgICAgIHJldHVybiBBbGlnbm1lbnQobmV3X2FsaWduLCBuZXdfb2Zmc2V0KQorIAorQEAgLTkyLDQ0ICs5Miw0NCBAQCBjbGFzcyBBbGlnbm1lbnQob2JqZWN0KToKKyBjbGFzcyBBbGlnbm1lbnRMb2cob2JqZWN0KToKKyAKKyAgICAgZGVmIF9faW5pdF9fKHNlbGYpOgorLQlzZWxmLm9rX2xpc3QgPSBbXQorLQlzZWxmLmZhaWxfbGlzdCA9IFtdCistCXNlbGYudmVyYm9zaXR5ID0gMQorKyAgICAgICAgc2VsZi5va19saXN0ID0gW10KKysgICAgICAgIHNlbGYuZmFpbF9saXN0ID0gW10KKysgICAgICAgIHNlbGYudmVyYm9zaXR5ID0gMQorIAorICAgICBkZWYgX19zdHJfXyhzZWxmKToKKy0JcmVzdWx0ID0gIiIKKysgICAgICAgIHJlc3VsdCA9ICIiCisgCistCSMgb3V0cHV0IHRoZSBPSy1saXN0CistCWZvciAoYWxpZ25fYmVmb3JlLCBmaWVsZF9uYW1lLCB0eXBlX29iaiwgY2FsbHN0YWNrLCBhbGlnbl9hZnRlcikgaW4gc2VsZi5va19saXN0OgorLQkgICAgc3RhY2tzaXplID0gbGVuKGNhbGxzdGFjaykKKysgICAgICAgICMgb3V0cHV0IHRoZSBPSy1saXN0CisrICAgICAgICBmb3IgKGFsaWduX2JlZm9yZSwgZmllbGRfbmFtZSwgdHlwZV9vYmosIGNhbGxzdGFjaywgYWxpZ25fYWZ0ZXIpIGluIHNlbGYub2tfbGlzdDoKKysgICAgICAgICAgICBzdGFja3NpemUgPSBsZW4oY2FsbHN0YWNrKQorICAgICAgICAgICAgIGluZGVudCA9ICcgICcgKiBzdGFja3NpemUKKy0JICAgIGlmIHNlbGYub2tfY2FsbHN0YWNrX2lzX3JlbGV2YW50KGNhbGxzdGFjayk6CisrICAgICAgICAgICAgaWYgc2VsZi5va19jYWxsc3RhY2tfaXNfcmVsZXZhbnQoY2FsbHN0YWNrKToKKyAgICAgICAgICAgICAgICAgaWYgZmllbGRfbmFtZSBpcyBOb25lIG9yIGZpZWxkX25hbWUgPT0gIiI6CistCSAgICAgICAgICAgIHJlc3VsdCArPSAoIiAgICAlc29rOiAlczpcblx0JXNiZWZvcmU6ICVzLCBhZnRlcjogJXNcbiIKKy0JCSAgICAgICAgJSAoaW5kZW50LCBzdHIodHlwZV9vYmopLCBpbmRlbnQsIHN0cihhbGlnbl9iZWZvcmUpLCBzdHIoYWxpZ25fYWZ0ZXIpKSkKKy0JICAgICAgICBlbHNlOgorLQkJICAgIHJlc3VsdCArPSAoIiAgICAlc29rOiBmaWVsZCBcIiVzXCIgaW4gJXM6XG5cdCVzYmVmb3JlOiAlcywgYWZ0ZXI6ICVzXG4iCistCQkgICAgICAgICUgKGluZGVudCwgc3RyKGZpZWxkX25hbWUpLCBzdHIodHlwZV9vYmopLAorLQkJICAgICAgICAgICBpbmRlbnQsIHN0cihhbGlnbl9iZWZvcmUpLCBzdHIoYWxpZ25fYWZ0ZXIpKSkKKysgICAgICAgICAgICAgICAgICAgIHJlc3VsdCArPSAoIiAgICAlc29rOiAlczpcblx0JXNiZWZvcmU6ICVzLCBhZnRlcjogJXNcbiIKKysgICAgICAgICAgICAgICAgICAgICAgICAlIChpbmRlbnQsIHN0cih0eXBlX29iaiksIGluZGVudCwgc3RyKGFsaWduX2JlZm9yZSksIHN0cihhbGlnbl9hZnRlcikpKQorKyAgICAgICAgICAgICAgICBlbHNlOgorKyAgICAgICAgICAgICAgICAgICAgcmVzdWx0ICs9ICgiICAgICVzb2s6IGZpZWxkIFwiJXNcIiBpbiAlczpcblx0JXNiZWZvcmU6ICVzLCBhZnRlcjogJXNcbiIKKysgICAgICAgICAgICAgICAgICAgICAgICAlIChpbmRlbnQsIHN0cihmaWVsZF9uYW1lKSwgc3RyKHR5cGVfb2JqKSwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICBpbmRlbnQsIHN0cihhbGlnbl9iZWZvcmUpLCBzdHIoYWxpZ25fYWZ0ZXIpKSkKKyAgICAgICAgICAgICAgICAgaWYgc2VsZi52ZXJib3NpdHkgPj0gMToKKy0JCSAgICByZXN1bHQgKz0gc2VsZi5jYWxsc3RhY2tfdG9fc3RyKGluZGVudCwgY2FsbHN0YWNrKQorKyAgICAgICAgICAgICAgICAgICAgcmVzdWx0ICs9IHNlbGYuY2FsbHN0YWNrX3RvX3N0cihpbmRlbnQsIGNhbGxzdGFjaykKKyAKKy0JIyBvdXRwdXQgdGhlIGZhaWwtbGlzdAorLQlmb3IgKGFsaWduX2JlZm9yZSwgZmllbGRfbmFtZSwgdHlwZV9vYmosIGNhbGxzdGFjaywgcmVhc29uKSBpbiBzZWxmLmZhaWxfbGlzdDoKKy0JICAgIHN0YWNrc2l6ZSA9IGxlbihjYWxsc3RhY2spCisrICAgICAgICAjIG91dHB1dCB0aGUgZmFpbC1saXN0CisrICAgICAgICBmb3IgKGFsaWduX2JlZm9yZSwgZmllbGRfbmFtZSwgdHlwZV9vYmosIGNhbGxzdGFjaywgcmVhc29uKSBpbiBzZWxmLmZhaWxfbGlzdDoKKysgICAgICAgICAgICBzdGFja3NpemUgPSBsZW4oY2FsbHN0YWNrKQorICAgICAgICAgICAgIGluZGVudCA9ICcgICcgKiBzdGFja3NpemUKKy0JICAgIGlmIGZpZWxkX25hbWUgaXMgTm9uZSBvciBmaWVsZF9uYW1lID09ICIiOgorLQkgICAgICAgIHJlc3VsdCArPSAoIiAgICAlc2ZhaWw6IGFsaWduICVzIGlzIGluY29tcGF0aWJsZSB3aXRoXG5cdCVzJXNcblx0JXNSZWFzb246ICVzXG4iCistCQkgICAgJSAoaW5kZW50LCBzdHIoYWxpZ25fYmVmb3JlKSwgaW5kZW50LCBzdHIodHlwZV9vYmopLCBpbmRlbnQsIHJlYXNvbikpCistCSAgICBlbHNlOgorLQkJcmVzdWx0ICs9ICgiICAgICVzZmFpbDogYWxpZ24gJXMgaXMgaW5jb21wYXRpYmxlIHdpdGhcblx0JXNmaWVsZCBcIiVzXCIgaW4gJXNcblx0JXNSZWFzb246ICVzXG4iCistCQkgICAgJSAoaW5kZW50LCBzdHIoYWxpZ25fYmVmb3JlKSwgaW5kZW50LCBzdHIoZmllbGRfbmFtZSksIHN0cih0eXBlX29iaiksIGluZGVudCwgcmVhc29uKSkKKysgICAgICAgICAgICBpZiBmaWVsZF9uYW1lIGlzIE5vbmUgb3IgZmllbGRfbmFtZSA9PSAiIjoKKysgICAgICAgICAgICAgICAgcmVzdWx0ICs9ICgiICAgICVzZmFpbDogYWxpZ24gJXMgaXMgaW5jb21wYXRpYmxlIHdpdGhcblx0JXMlc1xuXHQlc1JlYXNvbjogJXNcbiIKKysgICAgICAgICAgICAgICAgICAgICUgKGluZGVudCwgc3RyKGFsaWduX2JlZm9yZSksIGluZGVudCwgc3RyKHR5cGVfb2JqKSwgaW5kZW50LCByZWFzb24pKQorKyAgICAgICAgICAgIGVsc2U6CisrICAgICAgICAgICAgICAgIHJlc3VsdCArPSAoIiAgICAlc2ZhaWw6IGFsaWduICVzIGlzIGluY29tcGF0aWJsZSB3aXRoXG5cdCVzZmllbGQgXCIlc1wiIGluICVzXG5cdCVzUmVhc29uOiAlc1xuIgorKyAgICAgICAgICAgICAgICAgICAgJSAoaW5kZW50LCBzdHIoYWxpZ25fYmVmb3JlKSwgaW5kZW50LCBzdHIoZmllbGRfbmFtZSksIHN0cih0eXBlX29iaiksIGluZGVudCwgcmVhc29uKSkKKyAKKyAgICAgICAgICAgICBpZiBzZWxmLnZlcmJvc2l0eSA+PSAxOgorLQkgICAgICAgIHJlc3VsdCArPSBzZWxmLmNhbGxzdGFja190b19zdHIoaW5kZW50LCBjYWxsc3RhY2spCisrICAgICAgICAgICAgICAgIHJlc3VsdCArPSBzZWxmLmNhbGxzdGFja190b19zdHIoaW5kZW50LCBjYWxsc3RhY2spCisgCisgCistCXJldHVybiByZXN1bHQKKysgICAgICAgIHJldHVybiByZXN1bHQKKyAKKyAKKyAgICAgZGVmIGNhbGxzdGFja190b19zdHIoc2VsZiwgaW5kZW50LCBjYWxsc3RhY2spOgorQEAgLTEzNyw0MSArMTM3LDQxIEBAIGNsYXNzIEFsaWdubWVudExvZyhvYmplY3QpOgorICAgICAgICAgZm9yIHN0YWNrX2VsZW0gaW4gY2FsbHN0YWNrOgorICAgICAgICAgICAgIHJlc3VsdCArPSAiXHQgICVzJXNcbiIgJSAoaW5kZW50LCBzdHIoc3RhY2tfZWxlbSkpCisgICAgICAgICByZXN1bHQgKz0gIlx0JXNdXG4iICUgaW5kZW50CistCXJldHVybiByZXN1bHQKKysgICAgICAgIHJldHVybiByZXN1bHQKKyAKKyAKKyAgICAgZGVmIG9rX2NhbGxzdGFja19pc19yZWxldmFudChzZWxmLCBva19jYWxsc3RhY2spOgorICAgICAgICAgIyBkZXRlcm1pbmUgd2hldGhlciBhbiBvayBjYWxsc3RhY2sgaXMgcmVsZXZhbnQgZm9yIGxvZ2dpbmcKKy0JaWYgc2VsZi52ZXJib3NpdHkgPj0gMjoKKy0JICAgIHJldHVybiBUcnVlCisrICAgICAgICBpZiBzZWxmLnZlcmJvc2l0eSA+PSAyOgorKyAgICAgICAgICAgIHJldHVybiBUcnVlCisgCisgICAgICAgICAjIGVtcHR5IGNhbGxzdGFja3MgYXJlIGFsd2F5cyByZWxldmFudAorLQlpZiBsZW4ob2tfY2FsbHN0YWNrKSA9PSAwOgorKyAgICAgICAgaWYgbGVuKG9rX2NhbGxzdGFjaykgPT0gMDoKKyAgICAgICAgICAgICByZXR1cm4gVHJ1ZQorIAorLQkjIGNoZWNrIHdoZXRoZXIgdGhlIG9rX2NhbGxzdGFjayBpcyBhIHN1YnNldCBvciBlcXVhbCB0byBhIGZhaWxfY2FsbHN0YWNrCisrICAgICAgICAjIGNoZWNrIHdoZXRoZXIgdGhlIG9rX2NhbGxzdGFjayBpcyBhIHN1YnNldCBvciBlcXVhbCB0byBhIGZhaWxfY2FsbHN0YWNrCisgICAgICAgICBmb3IgKGFsaWduX2JlZm9yZSwgZmllbGRfbmFtZSwgdHlwZV9vYmosIGZhaWxfY2FsbHN0YWNrLCByZWFzb24pIGluIHNlbGYuZmFpbF9saXN0OgorICAgICAgICAgICAgIGlmIGxlbihva19jYWxsc3RhY2spIDw9IGxlbihmYWlsX2NhbGxzdGFjayk6CisgICAgICAgICAgICAgICAgIHppcHBlZCA9IHppcChva19jYWxsc3RhY2ssIGZhaWxfY2FsbHN0YWNrWzpsZW4ob2tfY2FsbHN0YWNrKV0pCistCQlpc19zdWJzZXQgPSBhbGwoW2kgPT0gaiBmb3IgaSwgaiBpbiB6aXBwZWRdKQorLQkJaWYgaXNfc3Vic2V0OgorKyAgICAgICAgICAgICAgICBpc19zdWJzZXQgPSBhbGwoW2kgPT0gaiBmb3IgaSwgaiBpbiB6aXBwZWRdKQorKyAgICAgICAgICAgICAgICBpZiBpc19zdWJzZXQ6CisgICAgICAgICAgICAgICAgICAgICByZXR1cm4gVHJ1ZQorIAorICAgICAgICAgcmV0dXJuIEZhbHNlCisgCisgCisgICAgIGRlZiBvayhzZWxmLCBhbGlnbl9iZWZvcmUsIGZpZWxkX25hbWUsIHR5cGVfb2JqLCBjYWxsc3RhY2ssIGFsaWduX2FmdGVyKToKKy0Jc2VsZi5va19saXN0LmFwcGVuZCgoYWxpZ25fYmVmb3JlLCBmaWVsZF9uYW1lLCB0eXBlX29iaiwgY2FsbHN0YWNrLCBhbGlnbl9hZnRlcikpCisrICAgICAgICBzZWxmLm9rX2xpc3QuYXBwZW5kKChhbGlnbl9iZWZvcmUsIGZpZWxkX25hbWUsIHR5cGVfb2JqLCBjYWxsc3RhY2ssIGFsaWduX2FmdGVyKSkKKyAKKyAgICAgZGVmIGZhaWwoc2VsZiwgYWxpZ25fYmVmb3JlLCBmaWVsZF9uYW1lLCB0eXBlX29iaiwgY2FsbHN0YWNrLCByZWFzb24pOgorLQlzZWxmLmZhaWxfbGlzdC5hcHBlbmQoKGFsaWduX2JlZm9yZSwgZmllbGRfbmFtZSwgdHlwZV9vYmosIGNhbGxzdGFjaywgcmVhc29uKSkKKysgICAgICAgIHNlbGYuZmFpbF9saXN0LmFwcGVuZCgoYWxpZ25fYmVmb3JlLCBmaWVsZF9uYW1lLCB0eXBlX29iaiwgY2FsbHN0YWNrLCByZWFzb24pKQorIAorICAgICBkZWYgYXBwZW5kKHNlbGYsIG90aGVyKToKKy0Jc2VsZi5va19saXN0LmV4dGVuZChvdGhlci5va19saXN0KQorLQlzZWxmLmZhaWxfbGlzdC5leHRlbmQob3RoZXIuZmFpbF9saXN0KQorKyAgICAgICAgc2VsZi5va19saXN0LmV4dGVuZChvdGhlci5va19saXN0KQorKyAgICAgICAgc2VsZi5mYWlsX2xpc3QuZXh0ZW5kKG90aGVyLmZhaWxfbGlzdCkKKyAKKyAgICAgZGVmIG9rX2NvdW50KHNlbGYpOgorLQlyZXR1cm4gbGVuKHNlbGYub2tfbGlzdCkKKysgICAgICAgIHJldHVybiBsZW4oc2VsZi5va19saXN0KQorIAorIAorIAorLS0gCisyLjkuMAorCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctcHJvdG8veGNiLXByb3RvLzAwMDItcHJpbnQtaXMtYS1mdW5jdGlvbi1hbmQtbmVlZHMtcGFyZW50aGVzZXMucGF0Y2ggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctcHJvdG8veGNiLXByb3RvLzAwMDItcHJpbnQtaXMtYS1mdW5jdGlvbi1hbmQtbmVlZHMtcGFyZW50aGVzZXMucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTQyYWNiOAotLS0gL2Rldi9udWxsCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1wcm90by94Y2ItcHJvdG8vMDAwMi1wcmludC1pcy1hLWZ1bmN0aW9uLWFuZC1uZWVkcy1wYXJlbnRoZXNlcy5wYXRjaApAQCAtMCwwICsxLDc1IEBACitGcm9tIGJlYTVlMWM4NWJkYzA5NTA5MTM3OTAzNjRlMTgyMjhmMjAzOTVhM2QgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBUaG9tYXMgS2xhdXNuZXIgPHdpekBOZXRCU0Qub3JnPgorRGF0ZTogVGh1LCAxOSBNYXkgMjAxNiAxNzozMDowNSArMDIwMAorU3ViamVjdDogW1BBVENIIDIvMl0gcHJpbnQoKSBpcyBhIGZ1bmN0aW9uIGFuZCBuZWVkcyBwYXJlbnRoZXNlcy4KKworRml4ZXMgYnVpbGQgd2l0aCBweXRob24tMy54LgorCitTaWduZWQtb2ZmLWJ5OiBUaG9tYXMgS2xhdXNuZXIgPHdpekBOZXRCU0Qub3JnPgorU2lnbmVkLW9mZi1ieTogVWxpIFNjaGxhY2h0ZXIgPHBzeWNob25Aem5jLmluPgorCitVcHN0cmVhbS1TdGF0dXM6IEJhY2twb3J0CisKK1NpZ25lZC1vZmYtYnk6IFJvYmVydCBZYW5nIDxsaWV6aGkueWFuZ0B3aW5kcml2ZXIuY29tPgorLS0tCisgeGNiZ2VuL3h0eXBlcy5weSB8IDEyICsrKysrKy0tLS0tLQorIDEgZmlsZSBjaGFuZ2VkLCA2IGluc2VydGlvbnMoKyksIDYgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS94Y2JnZW4veHR5cGVzLnB5IGIveGNiZ2VuL3h0eXBlcy5weQoraW5kZXggYzNiNTc1OC4uYjgzYjExOSAxMDA2NDQKKy0tLSBhL3hjYmdlbi94dHlwZXMucHkKKysrKyBiL3hjYmdlbi94dHlwZXMucHkKK0BAIC01MDEsNyArNTAxLDcgQEAgY2xhc3MgQ29tcGxleFR5cGUoVHlwZSk6CisgICAgICAgICAgICAgICAgIGludChyZXF1aXJlZF9zdGFydF9hbGlnbl9lbGVtZW50LmdldCgnYWxpZ24nLCAiNCIpLCAwKSwKKyAgICAgICAgICAgICAgICAgaW50KHJlcXVpcmVkX3N0YXJ0X2FsaWduX2VsZW1lbnQuZ2V0KCdvZmZzZXQnLCAiMCIpLCAwKSkKKyAgICAgICAgICAgICBpZiB2ZXJib3NlX2FsaWduX2xvZzoKKy0gICAgICAgICAgICAgICAgcHJpbnQgIkV4cGxpY2l0IHN0YXJ0LWFsaWduIGZvciAlczogJXNcbiIgJSAoc2VsZiwgc2VsZi5yZXF1aXJlZF9zdGFydF9hbGlnbikKKysgICAgICAgICAgICAgICAgcHJpbnQgKCJFeHBsaWNpdCBzdGFydC1hbGlnbiBmb3IgJXM6ICVzXG4iICUgKHNlbGYsIHNlbGYucmVxdWlyZWRfc3RhcnRfYWxpZ24pKQorIAorICAgICBkZWYgcmVzb2x2ZShzZWxmLCBtb2R1bGUpOgorICAgICAgICAgaWYgc2VsZi5yZXNvbHZlZDoKK0BAIC01OTIsNyArNTkyLDcgQEAgY2xhc3MgQ29tcGxleFR5cGUoVHlwZSk6CisgICAgICAgICAgICAgICAgIGlmIHZlcmJvc2VfYWxpZ25fbG9nOgorICAgICAgICAgICAgICAgICAgICAgcHJpbnQgKCJjYWxjX3JlcXVpcmVkX3N0YXJ0X2FsaWduOiAlcyBoYXMgc3RhcnQtYWxpZ24gJXMiCisgICAgICAgICAgICAgICAgICAgICAgICAgJSAoc3RyKHNlbGYpLCBzdHIoc2VsZi5yZXF1aXJlZF9zdGFydF9hbGlnbikpKQorLSAgICAgICAgICAgICAgICAgICAgcHJpbnQgIkRldGFpbHM6XG4iICsgc3RyKGxvZykKKysgICAgICAgICAgICAgICAgICAgIHByaW50ICgiRGV0YWlsczpcbiIgKyBzdHIobG9nKSkKKyAgICAgICAgICAgICAgICAgaWYgc2VsZi5yZXF1aXJlZF9zdGFydF9hbGlnbi5vZmZzZXQgIT0gMDoKKyAgICAgICAgICAgICAgICAgICAgIHByaW50ICgoIldBUk5JTkc6ICVzXG5cdGhhcyBzdGFydC1hbGlnbiB3aXRoIG5vbi16ZXJvIG9mZnNldDogJXMiCisgICAgICAgICAgICAgICAgICAgICAgICAgKyAiXG5cdHN1Z2dlc3QgdG8gYWRkIGV4cGxpY2l0IGRlZmluaXRpb24gd2l0aDoiCitAQCAtNjE5LDEyICs2MTksMTIgQEAgY2xhc3MgQ29tcGxleFR5cGUoVHlwZSk6CisgICAgICAgICAgICAgZm9yIG9mZnNldCBpbiByYW5nZSgwLGFsaWduKToKKyAgICAgICAgICAgICAgICAgYWxpZ25fY2FuZGlkYXRlID0gQWxpZ25tZW50KGFsaWduLCBvZmZzZXQpCisgICAgICAgICAgICAgICAgIGlmIHZlcmJvc2VfYWxpZ25fbG9nOgorLSAgICAgICAgICAgICAgICAgICAgcHJpbnQgInRyeWluZyAlcyBmb3IgJXMiICUgKHN0cihhbGlnbl9jYW5kaWRhdGUpLCBzdHIoc2VsZikpCisrICAgICAgICAgICAgICAgICAgICBwcmludCAoInRyeWluZyAlcyBmb3IgJXMiICUgKHN0cihhbGlnbl9jYW5kaWRhdGUpLCBzdHIoc2VsZikpKQorICAgICAgICAgICAgICAgICBteV9sb2cgPSBBbGlnbm1lbnRMb2coKQorICAgICAgICAgICAgICAgICBpZiBzZWxmLmlzX3Bvc3NpYmxlX3N0YXJ0X2FsaWduKGFsaWduX2NhbmRpZGF0ZSwgY2FsbHN0YWNrLCBteV9sb2cpOgorICAgICAgICAgICAgICAgICAgICAgbG9nLmFwcGVuZChteV9sb2cpCisgICAgICAgICAgICAgICAgICAgICBpZiB2ZXJib3NlX2FsaWduX2xvZzoKKy0gICAgICAgICAgICAgICAgICAgICAgICBwcmludCAiZm91bmQgc3RhcnQtYWxpZ24gJXMgZm9yICVzIiAlIChzdHIoYWxpZ25fY2FuZGlkYXRlKSwgc3RyKHNlbGYpKQorKyAgICAgICAgICAgICAgICAgICAgICAgIHByaW50ICgiZm91bmQgc3RhcnQtYWxpZ24gJXMgZm9yICVzIiAlIChzdHIoYWxpZ25fY2FuZGlkYXRlKSwgc3RyKHNlbGYpKSkKKyAgICAgICAgICAgICAgICAgICAgIHJldHVybiBhbGlnbl9jYW5kaWRhdGUKKyAgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgIG15X29rX2NvdW50ID0gbXlfbG9nLm9rX2NvdW50KCkKK0BAIC02NDEsNyArNjQxLDcgQEAgY2xhc3MgQ29tcGxleFR5cGUoVHlwZSk6CisgICAgICAgICAjIG5vbmUgb2YgdGhlIGNhbmRpZGF0ZXMgYXBwbGllcworICAgICAgICAgIyB0aGlzIHR5cGUgaGFzIGlsbGVnYWwgaW50ZXJuYWwgYWxpZ25zIGZvciBhbGwgcG9zc2libGUgc3RhcnRfYWxpZ25zCisgICAgICAgICBpZiB2ZXJib3NlX2FsaWduX2xvZzoKKy0gICAgICAgICAgICBwcmludCAiZGlkbid0IGZpbmQgc3RhcnQtYWxpZ24gZm9yICVzIiAlIHN0cihzZWxmKQorKyAgICAgICAgICAgIHByaW50ICgiZGlkbid0IGZpbmQgc3RhcnQtYWxpZ24gZm9yICVzIiAlIHN0cihzZWxmKSkKKyAgICAgICAgIGxvZy5hcHBlbmQoYmVzdF9sb2cpCisgICAgICAgICByZXR1cm4gTm9uZQorIAorQEAgLTkwMCw3ICs5MDAsNyBAQCBjbGFzcyBTd2l0Y2hUeXBlKENvbXBsZXhUeXBlKToKKyAgICAgIyBhdXggZnVuY3Rpb24gZm9yIHVuY2hlY2tlZF9nZXRfYWxpZ25tZW50X2FmdGVyCisgICAgIGRlZiBnZXRfYWxpZ25fZm9yX3NlbGVjdGVkX2Nhc2VfZmllbGQoc2VsZiwgY2FzZV9maWVsZCwgc3RhcnRfYWxpZ24sIGNhbGxzdGFjaywgbG9nKToKKyAgICAgICAgIGlmIHZlcmJvc2VfYWxpZ25fbG9nOgorLSAgICAgICAgICAgIHByaW50ICJnZXRfYWxpZ25fZm9yX3NlbGVjdGVkX2Nhc2VfZmllbGQ6ICVzLCBjYXNlX2ZpZWxkID0gJXMiICUgKHN0cihzZWxmKSwgc3RyKGNhc2VfZmllbGQpKQorKyAgICAgICAgICAgIHByaW50ICgiZ2V0X2FsaWduX2Zvcl9zZWxlY3RlZF9jYXNlX2ZpZWxkOiAlcywgY2FzZV9maWVsZCA9ICVzIiAlIChzdHIoc2VsZiksIHN0cihjYXNlX2ZpZWxkKSkpCisgICAgICAgICB0b3RhbF9hbGlnbiA9IHN0YXJ0X2FsaWduCisgICAgICAgICBmb3IgZmllbGQgaW4gc2VsZi5iaXRjYXNlczoKKyAgICAgICAgICAgICBteV9jYWxsc3RhY2sgPSBjYWxsc3RhY2tbOl0KKy0tIAorMi45LjAKKwpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLXByb3RvL3hjYi1wcm90by9uby1weXRob24tbmF0aXZlLnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLXByb3RvL3hjYi1wcm90by9uby1weXRob24tbmF0aXZlLnBhdGNoCmluZGV4IGY4MDhlMTkuLjA5YjYwODggMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1wcm90by94Y2ItcHJvdG8vbm8tcHl0aG9uLW5hdGl2ZS5wYXRjaAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctcHJvdG8veGNiLXByb3RvL25vLXB5dGhvbi1uYXRpdmUucGF0Y2gKQEAgLTIwLDcgKzIwLDcgQEAKIC1BTV9QQVRIX1BZVEhPTihbMi41XSkKICtweXRob25kaXI9IiR7bGliZGlyfS94Y2ItcHJvdG8iCiArQUNfU1VCU1QocHl0aG9uZGlyKQotK1BZVEhPTj0icHl0aG9uIgorK1BZVEhPTj0icHl0aG9uMyIKICtBQ19TVUJTVChQWVRIT04pCiAKICB4Y2JpbmNsdWRlZGlyPScke2RhdGFkaXJ9L3hjYicKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1wcm90by94Y2ItcHJvdG9fMS4xMS5iYiBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1wcm90by94Y2ItcHJvdG9fMS4xMS5iYgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNWJjNWExMS4uMDAwMDAwMAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctcHJvdG8veGNiLXByb3RvXzEuMTEuYmIKKysrIC9kZXYvbnVsbApAQCAtMSw5ICswLDAgQEAKLWluY2x1ZGUgeGNiLXByb3RvLmluYwotCi1MSUNFTlNFID0gIk1JVCIKLUxJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PWQ3NjNiMDgxY2IxMGMyMjM0MzViMDFlMDBkYzBhYmE3IFwKLSAgICAgICAgICAgICAgICAgICAgZmlsZTovL3NyYy9kcmkyLnhtbDtiZWdpbmxpbmU9MjtlbmRsaW5lPTI4O21kNT1mODc2M2IxM2ZmNDMyZTg1OTdlMGQ2MTBjZjU5OGU2NSIKLQotCi1TUkNfVVJJW21kNXN1bV0gPSAiNmJmMjc5NzQ0NWRjNmQ0M2U5ZTQ3MDdjMDgyZWZmOWMiCi1TUkNfVVJJW3NoYTI1NnN1bV0gPSAiYjRhY2VlZTY1MDJhMGNlNDVmYzM5YjMzYzU0MWEyZGY0NzE1ZDAwYjcyZTY2MGViZThjNWJiNDQ0NzcxZTMyZSIKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1wcm90by94Y2ItcHJvdG9fMS4xMi5iYiBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1wcm90by94Y2ItcHJvdG9fMS4xMi5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iYzA0YmM0Ci0tLSAvZGV2L251bGwKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLXByb3RvL3hjYi1wcm90b18xLjEyLmJiCkBAIC0wLDAgKzEsNDAgQEAKK1NVTU1BUlkgPSAiWENCOiBUaGUgWCBwcm90b2NvbCBDIGJpbmRpbmcgaGVhZGVycyIKK0RFU0NSSVBUSU9OID0gIkZ1bmN0aW9uIHByb3RvdHlwZXMgZm9yIHRoZSBYIHByb3RvY29sIEMtbGFuZ3VhZ2UgQmluZGluZyBcCisoWENCKS4gIFhDQiBpcyBhIHJlcGxhY2VtZW50IGZvciBYbGliIGZlYXR1cmluZyBhIHNtYWxsIGZvb3RwcmludCwgXAorbGF0ZW5jeSBoaWRpbmcsIGRpcmVjdCBhY2Nlc3MgdG8gdGhlIHByb3RvY29sLCBpbXByb3ZlZCB0aHJlYWRpbmcgXAorc3VwcG9ydCwgYW5kIGV4dGVuc2liaWxpdHkuIgorSE9NRVBBR0UgPSAiaHR0cDovL3hjYi5mcmVlZGVza3RvcC5vcmciCitCVUdUUkFDS0VSID0gImh0dHBzOi8vYnVncy5mcmVlZGVza3RvcC5vcmcvZW50ZXJfYnVnLmNnaT9wcm9kdWN0PVhDQiIKKworU0VDVElPTiA9ICJ4MTEvbGlicyIKK0xJQ0VOU0UgPSAiTUlUIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9ZDc2M2IwODFjYjEwYzIyMzQzNWIwMWUwMGRjMGFiYTcgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vc3JjL2RyaTIueG1sO2JlZ2lubGluZT0yO2VuZGxpbmU9Mjg7bWQ1PWY4NzYzYjEzZmY0MzJlODU5N2UwZDYxMGNmNTk4ZTY1IgorCitTUkNfVVJJID0gImh0dHA6Ly94Y2IuZnJlZWRlc2t0b3Aub3JnL2Rpc3QveGNiLXByb3RvLSR7UFZ9LnRhci5iejIgXAorICAgICAgICAgICBmaWxlOi8vbm8tcHl0aG9uLW5hdGl2ZS5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly8wMDAxLU1ha2Utd2hpdGVzcGFjZS11c2UtY29uc2lzdGVudC5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly8wMDAyLXByaW50LWlzLWEtZnVuY3Rpb24tYW5kLW5lZWRzLXBhcmVudGhlc2VzLnBhdGNoIFwKKyAgICAgICAgICAgIgorU1JDX1VSSVttZDVzdW1dID0gIjE0ZTYwOTE5Zjg1OTU2MGYyODQyNmE2ODVhNTU1OTYyIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjU5MjJhYmE0YzY2NGFiNzg5OWEyOWQ5MmVhOTFhODdhYTRjMWZjN2ViNWVlNTUwMzI1YzMyMTZjNDgwYTQ5MDYiCisKK2luaGVyaXQgYXV0b3Rvb2xzIHBrZ2NvbmZpZworCitQQUNLQUdFUyArPSAicHl0aG9uLXhjYmdlbiIKKworRklMRVNfJHtQTn0gPSAiIgorRklMRVNfJHtQTn0tZGV2ICs9ICIke2RhdGFkaXJ9L3hjYi8qLnhtbCAke2RhdGFkaXJ9L3hjYi8qLnhzZCIKK0ZJTEVTX3B5dGhvbi14Y2JnZW4gPSAiJHtsaWJkaXJ9L3hjYi1wcm90byIKKworUkRFUEVORFNfJHtQTn0tZGV2ID0gIiIKK1JSRUNPTU1FTkRTXyR7UE59LWRiZyA9ICIke1BOfS1kZXYgKD0gJHtFWFRFTkRQS0dWfSkiCisKK0JCQ0xBU1NFWFRFTkQgPSAibmF0aXZlIG5hdGl2ZXNkayIKKworZG9faW5zdGFsbF9hcHBlbmQoKSB7CisgICAgIyBNYWtlZmlsZSdzIGRvX2luc3RhbGwgY3JlYXRlcyAucHljIGZpbGVzIGZvciBweXRob24zLCBub3cgYWxzbyBjcmVhdGUKKyAgICAjIHRoZW0gZm9yIHB5dGhvbjIgc28gdGhhdCB0aGV5IHdpbGwgYmUgcmVjb3JkZWQgYnkgbWFuaWZlc3QsIGFuZCBjYW4gYmUKKyAgICAjIGNsZWFuZWQgY29ycmVjdGx5LgorICAgIHB5dGhvbiAtbSBweV9jb21waWxlICR7RH0ke2xpYmRpcn0veGNiLXByb3RvL3hjYmdlbi8qLnB5Cit9CmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctcHJvdG8veGNiLXByb3RvX2dpdC5iYiBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1wcm90by94Y2ItcHJvdG9fZ2l0LmJiCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyZWE0ZDA0Li4wMDAwMDAwCi0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1wcm90by94Y2ItcHJvdG9fZ2l0LmJiCisrKyAvZGV2L251bGwKQEAgLTEsOSArMCwwIEBACi1ERUZBVUxUX1BSRUZFUkVOQ0UgPSAiLTEiCi0KLWluY2x1ZGUgeGNiLXByb3RvLmluYwotU1JDUkVWID0gImQ4MWNhMjMzZTk4YmU4ZmE1OWU4YzkwZDI2MmMwNTE2OTQ0YzVhNjYiCi1QViA9ICIxLjIrZ2l0ciR7U1JDUFZ9IgotUFIgPSAicjQiCi0KLVNSQ19VUkkgPSAiZ2l0Oi8vYW5vbmdpdC5mcmVlZGVza3RvcC5vcmcvZ2l0L3hjYi9wcm90byIKLVMgPSAiJHtXT1JLRElSfS9naXQiCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctcHJvdG8veGluZXJhbWFwcm90b18xLjIuMS5iYiBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1wcm90by94aW5lcmFtYXByb3RvXzEuMi4xLmJiCmluZGV4IGQwMDc3NGUuLmRkZTdlOWQgMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1wcm90by94aW5lcmFtYXByb3RvXzEuMi4xLmJiCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1wcm90by94aW5lcmFtYXByb3RvXzEuMi4xLmJiCkBAIC0xNSwzICsxNSw1IEBACiAKIFNSQ19VUklbbWQ1c3VtXSA9ICI5OTU5ZmUwYmZiMjJhMGU3MjYwNDMzYjhkMTk5NTkwYSIKIFNSQ19VUklbc2hhMjU2c3VtXSA9ICI5Nzc1NzRiYjNkYzE5MmVjZDljNTVmNTlmOTkxZWMxZGZmMzQwYmUzZTMxMzkyYzk1ZGVmZjQyM2RhNTI0ODViIgorCitCQkNMQVNTRVhURU5EID0gIm5hdGl2ZSBuYXRpdmVzZGsiCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctcHJvdG8veHByb3RvL3hwcm90b19maXhfZm9yX3gzMi5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1wcm90by94cHJvdG8veHByb3RvX2ZpeF9mb3JfeDMyLnBhdGNoCmluZGV4IDU0MGFkMjcuLjhhNWZmNTggMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1wcm90by94cHJvdG8veHByb3RvX2ZpeF9mb3JfeDMyLnBhdGNoCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1wcm90by94cHJvdG8veHByb3RvX2ZpeF9mb3JfeDMyLnBhdGNoCkBAIC04LDcgKzgsNyBAQAogVGhpcyBmaXhlcyBjb21waWxhdGlvbiB3aXRoIHgzMiB0b29sY2hhaW4uCiAKIFJlY2VpdmVkIHRoaXMgcGF0Y2ggZnJvbSBILkouIEx1IDxoamwudG9vbHNAZ21haWwuY29tPgotU2lnbmVkLU9mZi1CeTogTml0aW4gQSBLYW1ibGUgPG5pdGluLmEua2FtYmxlQGludGVsLmNvbT4gMjAxMS8xMi8xCitTaWduZWQtb2ZmLWJ5OiBOaXRpbiBBIEthbWJsZSA8bml0aW4uYS5rYW1ibGVAaW50ZWwuY29tPiAyMDExLzEyLzEKIAogLS0tIHhwcm90by03LjAuMjIvWG1kLmgueDMyCTIwMDktMDctMTEgMDQ6MTk6NTAuMDAwMDAwMDAwIC0wNzAwCiArKysgeHByb3RvLTcuMC4yMi9YbWQuaAkyMDExLTExLTMwIDE3OjE0OjE5LjI5MDM5NTg5MyAtMDgwMApkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLXByb3RvL3hwcm90b183LjAuMjguYmIgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctcHJvdG8veHByb3RvXzcuMC4yOC5iYgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzQyN2E3ZC4uMDAwMDAwMAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctcHJvdG8veHByb3RvXzcuMC4yOC5iYgorKysgL2Rldi9udWxsCkBAIC0xLDIwICswLDAgQEAKLXJlcXVpcmUgeG9yZy1wcm90by1jb21tb24uaW5jCi0KLVNVTU1BUlkgPSAiWGxpYjogQyBMYW5ndWFnZSBYIGludGVyZmFjZSBoZWFkZXJzIgotCi1ERVNDUklQVElPTiA9ICJUaGlzIHBhY2thZ2UgcHJvdmlkZXMgdGhlIGJhc2ljIGhlYWRlcnMgZm9yIHRoZSBYIFdpbmRvdyBcCi1TeXN0ZW0uIgotCi1MSUNFTlNFID0gIk1JVCAmIE1JVC1zdHlsZSIKLUxJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PWI5ZTA1MTEwN2Q1NjI4OTY2NzM5YTBiMmU5YjMyNjc2IgotCi1QRSA9ICIxIgotCi1TUkNfVVJJICs9ICJmaWxlOi8veHByb3RvX2ZpeF9mb3JfeDMyLnBhdGNoIgotCi1FWFRSQV9PRUNPTkZfYXBwZW5kID0gIiAtLWVuYWJsZS1zcGVjcz1ubyIKLUJCQ0xBU1NFWFRFTkQgPSAibmF0aXZlIG5hdGl2ZXNkayIKLQotU1JDX1VSSVttZDVzdW1dID0gIjNjZTJmMjMwYzVkOGZhOTI5ZjMyNmFkMWYwZmE0MGE4IgotU1JDX1VSSVtzaGEyNTZzdW1dID0gIjI5ZTg1NTY4ZDFmNjhjZWVmOGEyYzA4MWRhZDliYzBlNTUwMGE1M2NmZmZkZTI0YjU2NGRjNDNkNDZkZGY2Y2EiCi0KZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1wcm90by94cHJvdG9fNy4wLjI5LmJiIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLXByb3RvL3hwcm90b183LjAuMjkuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDEyYjZhMgotLS0gL2Rldi9udWxsCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1wcm90by94cHJvdG9fNy4wLjI5LmJiCkBAIC0wLDAgKzEsMTkgQEAKK3JlcXVpcmUgeG9yZy1wcm90by1jb21tb24uaW5jCisKK1NVTU1BUlkgPSAiWGxpYjogQyBMYW5ndWFnZSBYIGludGVyZmFjZSBoZWFkZXJzIgorCitERVNDUklQVElPTiA9ICJUaGlzIHBhY2thZ2UgcHJvdmlkZXMgdGhlIGJhc2ljIGhlYWRlcnMgZm9yIHRoZSBYIFdpbmRvdyBcCitTeXN0ZW0uIgorCitMSUNFTlNFID0gIk1JVCAmIE1JVC1zdHlsZSIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PWI5ZTA1MTEwN2Q1NjI4OTY2NzM5YTBiMmU5YjMyNjc2IgorCitQRSA9ICIxIgorCitTUkNfVVJJICs9ICJmaWxlOi8veHByb3RvX2ZpeF9mb3JfeDMyLnBhdGNoIgorCitFWFRSQV9PRUNPTkZfYXBwZW5kID0gIiAtLWVuYWJsZS1zcGVjcz1ubyIKK0JCQ0xBU1NFWFRFTkQgPSAibmF0aXZlIG5hdGl2ZXNkayIKKworU1JDX1VSSVttZDVzdW1dID0gImVlZWFlMWY0N2Q0M2EzM2VmMGQ1YzU2NzI3NDEwMzI2IgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjZjMWE0NzcwOTJjYTczMjMzOTAyYjhkNWYzMzAxMjYzNWM0YjAyMDhmMTdlNzgzM2NjN2VmZTVjOTNiYTlmOGEiCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmcteHNlcnZlci94c2VydmVyLXhmODYtY29uZmlnLzEwLXByZWxvYWQtbW9kdWxlcy5jb25mIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLXhzZXJ2ZXIveHNlcnZlci14Zjg2LWNvbmZpZy8xMC1wcmVsb2FkLW1vZHVsZXMuY29uZgppbmRleCA3Y2ViNmZkLi43MmU0ZmJmIDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmcteHNlcnZlci94c2VydmVyLXhmODYtY29uZmlnLzEwLXByZWxvYWQtbW9kdWxlcy5jb25mCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy14c2VydmVyL3hzZXJ2ZXIteGY4Ni1jb25maWcvMTAtcHJlbG9hZC1tb2R1bGVzLmNvbmYKQEAgLTMsNyArMyw3IEBACiAgICAgTG9hZCAiZmIiCiAgICAgTG9hZCAic2hhZG93IgogICAgIExvYWQgInNoYWRvd2ZiIgorICAgIExvYWQgImludDEwIgogICAgIExvYWQgInZiZSIKICAgICBMb2FkICJ2Z2FodyIKIEVuZFNlY3Rpb24KLQpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLXhzZXJ2ZXIveHNlcnZlci14b3JnLmluYyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy14c2VydmVyL3hzZXJ2ZXIteG9yZy5pbmMKaW5kZXggZjRjNTQ2OS4uMjk1MDNiMSAxMDA2NDQKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLXhzZXJ2ZXIveHNlcnZlci14b3JnLmluYworKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmcteHNlcnZlci94c2VydmVyLXhvcmcuaW5jCkBAIC02OSw3ICs2OSw3IEBACiAgICAgICAgICAgICAgeGY4Ni12aWRlby1tb2Rlc2V0dGluZyIKIAogU1VNTUFSWV94Zjg2LXZpZGVvLW1vZGVzZXR0aW5nID0gIlguT3JnIFggc2VydmVyIC0tIG1vZGVzZXR0aW5nIGRpc3BsYXkgZHJpdmVyIgotSU5TQU5FX1NLSVBfeGY4Ni12aWRlby1tb2Rlc2V0dGluZyA9ICJ4b3JnLWRyaXZlci1hYmkiCitJTlNBTkVfU0tJUF8ke01MUFJFRklYfXhmODYtdmlkZW8tbW9kZXNldHRpbmcgPSAieG9yZy1kcml2ZXItYWJpIgogCiBYU0VSVkVSX1JSRUNPTU1FTkRTID0gInhrZXlib2FyZC1jb25maWcgcmdiIHhzZXJ2ZXIteGY4Ni1jb25maWcgeGtiY29tcCIKIFJSRUNPTU1FTkRTXyR7UE59ICs9ICIke1hTRVJWRVJfUlJFQ09NTUVORFN9IgpAQCAtMTMxLDYgKzEzMSw3IEBACiAjIERSSTMgcmVxdWlyZXMgeHNobWZlbmNlIHRvIGFsc28gYmUgZW5hYmxlZAogUEFDS0FHRUNPTkZJR1tkcmkzXSA9ICItLWVuYWJsZS1kcmkzLC0tZGlzYWJsZS1kcmkzLGRyaTNwcm90byIKIFBBQ0tBR0VDT05GSUdbZ2x4XSA9ICItLWVuYWJsZS1nbHgsLS1kaXNhYmxlLWdseCxnbHByb3RvIHZpcnR1YWwvbGliZ2wgdmlydHVhbC9saWJ4MTEiCitQQUNLQUdFQ09ORklHW2dsYW1vcl0gPSAiLS1lbmFibGUtZ2xhbW9yLC0tZGlzYWJsZS1nbGFtb3IsbGliZXBveHksbGliZWdsIgogUEFDS0FHRUNPTkZJR1t1bndpbmRdID0gIi0tZW5hYmxlLWxpYnVud2luZCwtLWRpc2FibGUtbGlidW53aW5kLGxpYnVud2luZCIKIFBBQ0tBR0VDT05GSUdbeHNobWZlbmNlXSA9ICItLWVuYWJsZS14c2htZmVuY2UsLS1kaXNhYmxlLXhzaG1mZW5jZSxsaWJ4c2htZmVuY2UiCiBQQUNLQUdFQ09ORklHW3htbHRvXSA9ICItLXdpdGgteG1sdG8sIC0td2l0aG91dC14bWx0bywgeG1sdG8tbmF0aXZlIGRvY2Jvb2steG1sLWR0ZDQtbmF0aXZlIGRvY2Jvb2steHNsLXN0eWxlc2hlZXRzLW5hdGl2ZSIKQEAgLTE2Nyw5ICsxNjgsMTAgQEAKICAgICAgICAgfQogICAgICAgICBwID0gc3VicHJvY2Vzcy5Qb3BlbihhcmdzPSJwa2ctY29uZmlnIC0tdmFyaWFibGU9JXMgeG9yZy1zZXJ2ZXIiICUgYWJpc1tuYW1lXSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2hlbGw9VHJ1ZSwgZW52PW5ld2Vudiwgc3Rkb3V0PXN1YnByb2Nlc3MuUElQRSkKLSAgICAgICAgb3V0cHV0ID0gcC5jb21tdW5pY2F0ZSgpWzBdCisgICAgICAgIHN0ZG91dCwgc3RkZXJyID0gcC5jb21tdW5pY2F0ZSgpCisgICAgICAgIG91dHB1dCA9IHN0ZG91dC5kZWNvZGUoInV0Zi04Iikuc3BsaXQoIi4iKVswXQogICAgICAgICBtbHByZWZpeCA9IGQuZ2V0VmFyKCdNTFBSRUZJWCcsIFRydWUpIG9yICcnCi0gICAgICAgIHJldHVybiAiJXN4b3JnLWFiaS0lcy0lcyIgJSAobWxwcmVmaXgsIG5hbWUsIG91dHB1dC5zcGxpdCgiLiIpWzBdKQorICAgICAgICByZXR1cm4gIiVzeG9yZy1hYmktJXMtJXMiICUgKG1scHJlZml4LCBuYW1lLCBvdXRwdXQpCiAKICAgICBwbiA9IGQuZ2V0VmFyKCJQTiIsIFRydWUpCiAgICAgZC5hcHBlbmRWYXIoIlJQUk9WSURFU18iICsgcG4sICIgIiArIGdldF9hYmkoImlucHV0IikpCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmcteHNlcnZlci94c2VydmVyLXhvcmcvY29uZmlndXJlLmFjLVVzZS1saWJzeXN0ZW1kLWluLVJFUVVJUkVEX0xJQlMtY2hlY2sucGF0Y2ggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmcteHNlcnZlci94c2VydmVyLXhvcmcvY29uZmlndXJlLmFjLVVzZS1saWJzeXN0ZW1kLWluLVJFUVVJUkVEX0xJQlMtY2hlY2sucGF0Y2gKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGNkMzA5OTkuLjAwMDAwMDAKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLXhzZXJ2ZXIveHNlcnZlci14b3JnL2NvbmZpZ3VyZS5hYy1Vc2UtbGlic3lzdGVtZC1pbi1SRVFVSVJFRF9MSUJTLWNoZWNrLnBhdGNoCisrKyAvZGV2L251bGwKQEAgLTEsNTAgKzAsMCBAQAotRnJvbSAwYzIxNTNkNDY4MjI5ZjU2ZTZmZWY3MWQyZjAwMmUwY2FlMTRhYTU1IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQotRnJvbTogSnVzc2kgS3Vra29uZW4gPGp1c3NpLmt1a2tvbmVuQGludGVsLmNvbT4KLURhdGU6IE1vbiwgMTYgTm92IDIwMTUgMTY6MTg6NDAgKzAyMDAKLVN1YmplY3Q6IFtQQVRDSF0gY29uZmlndXJlLmFjOiBVc2UgbGlic3lzdGVtZCBpbiBSRVFVSVJFRF9MSUJTIGNoZWNrCi0KLVJFUVVJUkVEX0xJQlMgbmVlZHMgdG8gYmUgc2V0IHRvIHRoZSBjb3JyZWN0IHN5c3RlbWQgbGlicmFyeSwKLW90aGVyd2lzZSB0aGUgbGF0ZXIgY2hlY2sgd2lsbCBlaXRoZXIgZmFpbCBvciB1c2UgdGhlIHdyb25nCi1wYyBmaWxlLgotCi1VcHN0cmVhbS1TdGF0dXM6IFN1Ym1pdHRlZCBbeG9yZy1kZXZlbEBsaXN0cy54Lm9yZ10KLVNpZ25lZC1vZmYtYnk6IEp1c3NpIEt1a2tvbmVuIDxqdXNzaS5rdWtrb25lbkBpbnRlbC5jb20+Ci0tLS0KLSBjb25maWd1cmUuYWMgfCAxMyArKysrKysrKysrLS0tCi0gMSBmaWxlIGNoYW5nZWQsIDEwIGluc2VydGlvbnMoKyksIDMgZGVsZXRpb25zKC0pCi0KLWRpZmYgLS1naXQgYS9jb25maWd1cmUuYWMgYi9jb25maWd1cmUuYWMKLWluZGV4IDk2YzAyNDIuLmY2M2VjYTEgMTAwNjQ0Ci0tLS0gYS9jb25maWd1cmUuYWMKLSsrKyBiL2NvbmZpZ3VyZS5hYwotQEAgLTgzNyw5ICs4MzcsMTYgQEAgQUNfQVJHX1dJVEgoW3N5c3RlbWQtZGFlbW9uXSwKLSAJCVtzdXBwb3J0IHN5c3RlbWQgc29ja2V0IGFjdGl2YXRpb24gKGRlZmF1bHQ6IGF1dG8pXSksCi0gCVtXSVRIX1NZU1RFTURfREFFTU9OPSR3aXRodmFsXSwgW1dJVEhfU1lTVEVNRF9EQUVNT049YXV0b10pCi0gUEtHX0NIRUNLX01PRFVMRVMoW1NZU1RFTURfREFFTU9OXSwgW2xpYnN5c3RlbWQtZGFlbW9uXSwKLS0gICAgICAgICAgICAgICAgICBbSEFWRV9TWVNURU1EX0RBRU1PTj15ZXNdLAotKyAgICAgICAgICAgICAgICAgIFtSRVFVSVJFRF9TWVNURU1EX0RBRU1PTj1saWJzeXN0ZW1kLWRhZW1vbl0sCi0gICAgICAgICAgICAgICAgICAgW1BLR19DSEVDS19NT0RVTEVTKFtTWVNURU1EX0RBRU1PTl0sIFtsaWJzeXN0ZW1kXSwKLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW0hBVkVfU1lTVEVNRF9EQUVNT049eWVzXSwgW0hBVkVfU1lTVEVNRF9EQUVNT049bm9dKV0pCi0rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtSRVFVSVJFRF9TWVNURU1EX0RBRU1PTj1saWJzeXN0ZW1kXSwKLSsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW1JFUVVJUkVEX1NZU1RFTURfREFFTU9OPV0pXSkKLStpZiB0ZXN0ICJ4JFJFUVVJUkVEX1NZU1RFTURfREFFTU9OIiA9IHg7IHRoZW4KLSsgICAgICAgIEhBVkVfU1lTVEVNRF9EQUVNT049bm8KLStlbHNlCi0rICAgICAgICBIQVZFX1NZU1RFTURfREFFTU9OPXllcwotK2ZpCi0rCi0gaWYgdGVzdCAieCRXSVRIX1NZU1RFTURfREFFTU9OIiA9IHhhdXRvOyB0aGVuCi0gCVdJVEhfU1lTVEVNRF9EQUVNT049IiRIQVZFX1NZU1RFTURfREFFTU9OIgotIGZpCi1AQCAtODQ4LDcgKzg1NSw3IEBAIGlmIHRlc3QgIngkV0lUSF9TWVNURU1EX0RBRU1PTiIgPSB4eWVzOyB0aGVuCi0gCQlBQ19NU0dfRVJST1IoW3N5c3RlbWQgc3VwcG9ydCByZXF1ZXN0ZWQgYnV0IG5vIGxpYnJhcnkgaGFzIGJlZW4gZm91bmRdKQotIAlmaQotIAlBQ19ERUZJTkUoSEFWRV9TWVNURU1EX0RBRU1PTiwgMSwgW0RlZmluZSB0byAxIGlmIGxpYnN5c3RlbWQtZGFlbW9uIGlzIGF2YWlsYWJsZV0pCi0tCVJFUVVJUkVEX0xJQlM9IiRSRVFVSVJFRF9MSUJTIGxpYnN5c3RlbWQtZGFlbW9uIgotKwlSRVFVSVJFRF9MSUJTPSIkUkVRVUlSRURfTElCUyAkUkVRVUlSRURfU1lTVEVNRF9EQUVNT04iCi0gZmkKLSBBTV9DT05ESVRJT05BTChbSEFWRV9TWVNURU1EX0RBRU1PTl0sIFt0ZXN0ICJ4JEhBVkVfU1lTVEVNRF9EQUVNT04iID0gInh5ZXMiXSkKLSAKLS0tIAotMi4xLjQKLQpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLXhzZXJ2ZXIveHNlcnZlci14b3JnL21vZGVzZXR0aW5nX2xpYmRybV9yZXF1aXJlbWVudHMucGF0Y2ggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmcteHNlcnZlci94c2VydmVyLXhvcmcvbW9kZXNldHRpbmdfbGliZHJtX3JlcXVpcmVtZW50cy5wYXRjaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNWYxODZjYi4uMDAwMDAwMAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmcteHNlcnZlci94c2VydmVyLXhvcmcvbW9kZXNldHRpbmdfbGliZHJtX3JlcXVpcmVtZW50cy5wYXRjaAorKysgL2Rldi9udWxsCkBAIC0xLDMwICswLDAgQEAKLUZyb20gYmYyM2RiNDJhNGU1OTQzMTI5NTAxMjIzYTQ3YjQ4ODg0Y2RlYjYyZiBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKLUZyb206IEFkYW0gSmFja3NvbiA8YWpheEByZWRoYXQuY29tPgotRGF0ZTogV2VkLCAyNyBKYW4gMjAxNiAxMTo1MDoxMyAtMDUwMAotU3ViamVjdDogbW9kZXNldHRpbmc6IFJlcXVpcmUgc3VmZmljaWVudGx5IG5ldyBsaWJkcm0KLQotQnVnemlsbGE6IGh0dHBzOi8vYnVncy5mcmVlZGVza3RvcC5vcmcvOTM4ODMKLVNpZ25lZC1vZmYtYnk6IEFkYW0gSmFja3NvbiA8YWpheEByZWRoYXQuY29tPgotUmV2aWV3ZWQtYnk6IEFsZXggRGV1Y2hlciA8YWxleGFuZGVyLmRldWNoZXJAYW1kLmNvbT4KLVJldmlld2VkLWJ5OiBKdWxpZW4gQ3Jpc3RhdSA8amNyaXN0YXVAZGViaWFuLm9yZz4KLQotVXBzdHJlYW0tU3RhdHVzOiBCYWNrcG9ydAotU2lnbmVkLW9mZi1ieTogSm9oYW5uZXMgUG9pbnRuZXIgPGpvaGFubmVzLnBvaW50bmVyQGdtYWlsLmNvbT4KLQotZGlmZiAtLWdpdCBhL2NvbmZpZ3VyZS5hYyBiL2NvbmZpZ3VyZS5hYwotaW5kZXggYWMzYmI2NC4uMzEyZmM2OSAxMDA2NDQKLS0tLSBhL2NvbmZpZ3VyZS5hYwotKysrIGIvY29uZmlndXJlLmFjCi1AQCAtMjAzNSw4ICsyMDM1LDcgQEAgaWYgdGVzdCAieCRYT1JHIiA9IHh5ZXM7IHRoZW4KLSAKLSAJaWYgdGVzdCAieCREUk0iID0geHllczsgdGhlbgotIAkJZG5sIDIuNC40NiBpcyByZXF1aXJlZCBmb3IgY3Vyc29yIGhvdHNwb3Qgc3VwcG9ydC4KLS0JCVBLR19DSEVDS19FWElTVFMobGliZHJtID49IDIuNC40NikKLS0JCVhPUkdfRFJJVkVSX01PREVTRVRUSU5HPXllcwotKwkJUEtHX0NIRUNLX0VYSVNUUyhsaWJkcm0gPj0gMi40LjQ2LCBYT1JHX0RSSVZFUl9NT0RFU0VUVElORz15ZXMsIFhPUkdfRFJJVkVSX01PREVTRVRUSU5HPW5vKQotIAlmaQotIAotIAlBQ19TVUJTVChbWE9SR19MSUJTXSkKLS0tIAotY2dpdCB2MC4xMC4yCi0KZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy14c2VydmVyL3hzZXJ2ZXIteG9yZ18xLjE4LjAuYmIgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmcteHNlcnZlci94c2VydmVyLXhvcmdfMS4xOC4wLmJiCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlYjc5YjQwLi4wMDAwMDAwCi0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy14c2VydmVyL3hzZXJ2ZXIteG9yZ18xLjE4LjAuYmIKKysrIC9kZXYvbnVsbApAQCAtMSwzMCArMCwwIEBACi1yZXF1aXJlIHhzZXJ2ZXIteG9yZy5pbmMKLQotU1JDX1VSSSArPSAiZmlsZTovL2NvbmZpZ3VyZS5hYy1Vc2UtbGlic3lzdGVtZC1pbi1SRVFVSVJFRF9MSUJTLWNoZWNrLnBhdGNoIFwKLSAgICAgICAgICAgIGZpbGU6Ly9tdXNsLWFybS1pbmItb3V0Yi5wYXRjaCBcCi0gICAgICAgICAgICBmaWxlOi8vbW9kZXNldHRpbmdfbGliZHJtX3JlcXVpcmVtZW50cy5wYXRjaCBcCi0gICAgICAgICAgICIKLVNSQ19VUklbbWQ1c3VtXSA9ICIzYzFjMTA1N2QzYWQyNzM4MGQ4ZGQ4N2ZmY2MxODJjZCIKLVNSQ19VUklbc2hhMjU2c3VtXSA9ICIxOTU2NzA4MTk2OTVkOWNlZGQ4ZGRlOTVmYmUwNjliZTBkMGY0ODhhNzc3OTdhMmQ0MDlmOWY3MDJkYWYzMTJlIgotCi0jIFRoZXNlIGV4dGVuc2lvbnMgYXJlIG5vdyBpbnRlZ3JhdGVkIGludG8gdGhlIHNlcnZlciwgc28gZGVjbGFyZSB0aGUgbWlncmF0aW9uCi0jIHBhdGggZm9yIGluLXBsYWNlIHVwZ3JhZGVzLgotCi1SUkVQTEFDRVNfJHtQTn0gPSAgIiR7UE59LWV4dGVuc2lvbi1kcmkgXAotICAgICAgICAgICAgICAgICAgICAke1BOfS1leHRlbnNpb24tZHJpMiBcCi0gICAgICAgICAgICAgICAgICAgICR7UE59LWV4dGVuc2lvbi1yZWNvcmQgXAotICAgICAgICAgICAgICAgICAgICAke1BOfS1leHRlbnNpb24tZXh0bW9kIFwKLSAgICAgICAgICAgICAgICAgICAgJHtQTn0tZXh0ZW5zaW9uLWRiZSBcCi0gICAgICAgICAgICAgICAgICAgIgotUlBST1ZJREVTXyR7UE59ID0gICIke1BOfS1leHRlbnNpb24tZHJpIFwKLSAgICAgICAgICAgICAgICAgICAgJHtQTn0tZXh0ZW5zaW9uLWRyaTIgXAotICAgICAgICAgICAgICAgICAgICAke1BOfS1leHRlbnNpb24tcmVjb3JkIFwKLSAgICAgICAgICAgICAgICAgICAgJHtQTn0tZXh0ZW5zaW9uLWV4dG1vZCBcCi0gICAgICAgICAgICAgICAgICAgICR7UE59LWV4dGVuc2lvbi1kYmUgXAotICAgICAgICAgICAgICAgICAgICIKLVJDT05GTElDVFNfJHtQTn0gPSAiJHtQTn0tZXh0ZW5zaW9uLWRyaSBcCi0gICAgICAgICAgICAgICAgICAgICR7UE59LWV4dGVuc2lvbi1kcmkyIFwKLSAgICAgICAgICAgICAgICAgICAgJHtQTn0tZXh0ZW5zaW9uLXJlY29yZCBcCi0gICAgICAgICAgICAgICAgICAgICR7UE59LWV4dGVuc2lvbi1leHRtb2QgXAotICAgICAgICAgICAgICAgICAgICAke1BOfS1leHRlbnNpb24tZGJlIFwKLSAgICAgICAgICAgICAgICAgICAiCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmcteHNlcnZlci94c2VydmVyLXhvcmdfMS4xOC40LmJiIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLXhzZXJ2ZXIveHNlcnZlci14b3JnXzEuMTguNC5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42NzAwNTY1Ci0tLSAvZGV2L251bGwKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLXhzZXJ2ZXIveHNlcnZlci14b3JnXzEuMTguNC5iYgpAQCAtMCwwICsxLDI3IEBACityZXF1aXJlIHhzZXJ2ZXIteG9yZy5pbmMKKworU1JDX1VSSSArPSAiZmlsZTovL211c2wtYXJtLWluYi1vdXRiLnBhdGNoIgorU1JDX1VSSVttZDVzdW1dID0gImQ0ODQyZGZlM2JkOWE5ZDA2MmYyZmExZGY5MTA0YTQ2IgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjI3ODQ1OWIyYzMxZDYxYTE1NjU1ZDk1YTcyZmI3OTkzMGM0ODBhNmJiOGNmOTIyNmU0OGEwN2RmOGIxZDMxYzgiCisKKyMgVGhlc2UgZXh0ZW5zaW9ucyBhcmUgbm93IGludGVncmF0ZWQgaW50byB0aGUgc2VydmVyLCBzbyBkZWNsYXJlIHRoZSBtaWdyYXRpb24KKyMgcGF0aCBmb3IgaW4tcGxhY2UgdXBncmFkZXMuCisKK1JSRVBMQUNFU18ke1BOfSA9ICAiJHtQTn0tZXh0ZW5zaW9uLWRyaSBcCisgICAgICAgICAgICAgICAgICAgICR7UE59LWV4dGVuc2lvbi1kcmkyIFwKKyAgICAgICAgICAgICAgICAgICAgJHtQTn0tZXh0ZW5zaW9uLXJlY29yZCBcCisgICAgICAgICAgICAgICAgICAgICR7UE59LWV4dGVuc2lvbi1leHRtb2QgXAorICAgICAgICAgICAgICAgICAgICAke1BOfS1leHRlbnNpb24tZGJlIFwKKyAgICAgICAgICAgICAgICAgICAiCitSUFJPVklERVNfJHtQTn0gPSAgIiR7UE59LWV4dGVuc2lvbi1kcmkgXAorICAgICAgICAgICAgICAgICAgICAke1BOfS1leHRlbnNpb24tZHJpMiBcCisgICAgICAgICAgICAgICAgICAgICR7UE59LWV4dGVuc2lvbi1yZWNvcmQgXAorICAgICAgICAgICAgICAgICAgICAke1BOfS1leHRlbnNpb24tZXh0bW9kIFwKKyAgICAgICAgICAgICAgICAgICAgJHtQTn0tZXh0ZW5zaW9uLWRiZSBcCisgICAgICAgICAgICAgICAgICAgIgorUkNPTkZMSUNUU18ke1BOfSA9ICIke1BOfS1leHRlbnNpb24tZHJpIFwKKyAgICAgICAgICAgICAgICAgICAgJHtQTn0tZXh0ZW5zaW9uLWRyaTIgXAorICAgICAgICAgICAgICAgICAgICAke1BOfS1leHRlbnNpb24tcmVjb3JkIFwKKyAgICAgICAgICAgICAgICAgICAgJHtQTn0tZXh0ZW5zaW9uLWV4dG1vZCBcCisgICAgICAgICAgICAgICAgICAgICR7UE59LWV4dGVuc2lvbi1kYmUgXAorICAgICAgICAgICAgICAgICAgICIKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveHRzY2FsL3h0c2NhbC8zMHhUc19DYWxpYnJhdGUuc2ggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3h0c2NhbC94dHNjYWwvMzB4VHNfQ2FsaWJyYXRlLnNoCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmYTQzNjE3Li4wMDAwMDAwCi0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveHRzY2FsL3h0c2NhbC8zMHhUc19DYWxpYnJhdGUuc2gKKysrIC9kZXYvbnVsbApAQCAtMSwxMyArMCwwIEBACi0jIS9iaW4vc2gKLQotLiAvZXRjL2Zvcm1mYWN0b3IvY29uZmlnCi0KLWlmIFsgIiRIQVZFX1RPVUNIU0NSRUVOIiA9ICIxIiBdOyB0aGVuCi0Jbj0xCi0Jd2hpbGUgWyAhIC16ICRUU0xJQl9UU0RFVklDRSBdICYmIFsgISAtZiAvZXRjL3BvaW50ZXJjYWwgXSAmJiBbICRuIC1sZSA1IF0KLQlkbwotCSAgIC91c3IvYmluL3h0c2NhbAotCSAgIHNsZWVwIDEKLQkgICBuPSQoKCRuKzEpKQotCWRvbmUKLWZpCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3h0c2NhbC94dHNjYWwvY2hhbmdlLWNyb3NzLnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94dHNjYWwveHRzY2FsL2NoYW5nZS1jcm9zcy5wYXRjaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMWRhNzcxNy4uMDAwMDAwMAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3h0c2NhbC94dHNjYWwvY2hhbmdlLWNyb3NzLnBhdGNoCisrKyAvZGV2L251bGwKQEAgLTEsMTggKzAsMCBAQAotVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCi0KLS0tLSB0bXAvbWFpbi5jLm9yaWcJMjAwNy0wMS0wMiAxNTozOTo1NC4wMDAwMDAwMDAgKzAwMDAKLSsrKyB0bXAvbWFpbi5jCTIwMDctMDEtMDIgMTU6Mzk6NTQuMDAwMDAwMDAwICswMDAwCi1AQCAtMTMxLDkgKzEzMSwxMCBAQAotIHsKLSAgIFhSZW5kZXJGaWxsUmVjdGFuZ2xlcyAoZHB5LCBQaWN0T3BTcmMsIHBpY3QsICZyZWN0X2NvbG9yLCByZWN0YW5nbGVzLCAyKTsKLSAKLS0gIFhGaWxsQXJjIChkcHksIGNyb3NzaGFpcl93LCBjcm9zc2hhaXJfZ2MsIChDUk9TU0hBSVJfU0laRSAvIDIpIC0gKFdJRFRIIC8gMikgLSAxLCAKLS0JICAgIChDUk9TU0hBSVJfU0laRSAvIDIpIC0gKFdJRFRIIC8gMikgLSAxLAotLQkgICAgV0lEVEggKyAxLCBXSURUSCArIDEsIDAsIDM2MCAqIDY0KTsKLSsgIFhGaWxsUmVjdGFuZ2xlIChkcHksIGNyb3NzaGFpcl93LCBjcm9zc2hhaXJfZ2MsCi0rCQkgIChDUk9TU0hBSVJfU0laRSAvIDIpIC0gKFdJRFRIIC8gMiksCi0rCQkgIChDUk9TU0hBSVJfU0laRSAvIDIpIC0gKFdJRFRIIC8gMiksCi0rCQkgIFdJRFRILCBXSURUSCk7Ci0gfQotIAotIHZvaWQKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveHRzY2FsL3h0c2NhbC9jbGVhbnVwLnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94dHNjYWwveHRzY2FsL2NsZWFudXAucGF0Y2gKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGY3YjA4NTQuLjAwMDAwMDAKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94dHNjYWwveHRzY2FsL2NsZWFudXAucGF0Y2gKKysrIC9kZXYvbnVsbApAQCAtMSw2MjEgKzAsMCBAQAotLS0tCi0gTWFrZWZpbGUuYW0gIHwgICAgOSAtLQotIGNvbmZpZ3VyZS5hYyB8ICAgIDMgCi0gZ3BlLWRpc3QuYW0gIHwgICAxMiAtLS0KLSBoMzYwMF90cy5oICAgfCAgMjE2IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gbWFpbi5jICAgICAgIHwgIDIxMCArKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSB4dHNjYWwuaW4gICAgfCAgIDE5IC0tLS0tCi0gNiBmaWxlcyBjaGFuZ2VkLCAxNCBpbnNlcnRpb25zKCspLCA0NTUgZGVsZXRpb25zKC0pCi0KLVVwc3RyZWFtLVN0YXR1czogUGVuZGluZwotCi1JbmRleDogeHRzY2FsLTAuNi4zL3h0c2NhbC5pbgotPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0tIHh0c2NhbC0wLjYuMy5vcmlnL3h0c2NhbC5pbgkyMDA0LTA5LTEwIDIwOjEwOjM2LjAwMDAwMDAwMCArMDEwMAotKysrIC9kZXYvbnVsbAkxOTcwLTAxLTAxIDAwOjAwOjAwLjAwMDAwMDAwMCArMDAwMAotQEAgLTEsMTkgKzAsMCBAQAotLSMhL2Jpbi9zaAotLQotLW1vZHVsZV9pZCgpIHsKLS0gICAgIyBHZXQgbW9kZWwgbmFtZQotLSAgICBlY2hvIGBncmVwICJeSGFyZHdhcmUiIC9wcm9jL2NwdWluZm8gfCBzZWQgLWUgInMvLio6ICovLyIgfCB0ciBhLXogQS1aYAotLX0KLS0KLS1jYXNlIGBtb2R1bGVfaWRgIGluCi0tCSJIUCBJUEFRIEgzMTAwIiB8ICJIUCBJUEFRIEgzODAwIiApCi0tCQlBUkdTPSItcm90YXRlIDkwIiA7OwotLQkiSFAgSVBBUSBIMzYwMCIgfCAiSFAgSVBBUSBIMzcwMCIgfCAiSFAgSVBBUSBIMzkwMCIgfCAqQ09MTElFIHwgKlBPT0RMRSkKLS0JCUFSR1M9Ii1yb3RhdGUgMjcwIiA7OwotLQkjIEgyMjAwOiB3b3JrcyB3aXRob3V0IHJvdGF0aW9uCi0tZXNhYwotLQotLSMgdGhlIHRoaW5ncyB3ZSBkbyBmb3IgYXV0b2NvbmYKLS1wcmVmaXg9QHByZWZpeEAKLS1leGVjX3ByZWZpeD1AZXhlY19wcmVmaXhACi0tZXhlYyBAbGliZXhlY2RpckAveHRzY2FsLmJpbiAkQVJHUyAkKgotSW5kZXg6IHh0c2NhbC0wLjYuMy9tYWluLmMKLT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tLSB4dHNjYWwtMC42LjMub3JpZy9tYWluLmMJMjAwNy0wNy0wMSAwMToxMjo1Mi4wMDAwMDAwMDAgKzAxMDAKLSsrKyB4dHNjYWwtMC42LjMvbWFpbi5jCTIwMDctMDctMDEgMDE6MTI6NTUuMDAwMDAwMDAwICswMTAwCi1AQCAtMjIsMTIgKzIyLDEwIEBACi0gI2luY2x1ZGUgPFgxMS9YbGliLmg+Ci0gCi0gI2luY2x1ZGUgPFgxMS9leHRlbnNpb25zL1hyZW5kZXIuaD4KLS0jaW5jbHVkZSA8WDExL2V4dGVuc2lvbnMvWHJhbmRyLmg+Ci0gI2luY2x1ZGUgPFgxMS9YZnQvWGZ0Lmg+Ci0gI2luY2x1ZGUgPFgxMS9leHRlbnNpb25zL3hjYWxpYnJhdGUuaD4KLSAjaW5jbHVkZSA8WDExL2tleXN5bS5oPgotIAotLSNpbmNsdWRlICJoMzYwMF90cy5oIgotICNpbmNsdWRlICJjYWxpYnJhdGUuaCIKLSAKLSBEaXNwbGF5ICpkcHk7Ci1AQCAtNDUsMTUgKzQzLDExIEBAIFhmdENvbG9yIHhmdGNvbDsKLSBYZnREcmF3ICp4ZnRkcmF3OwotIFhmdEZvbnQgKnhmdGZvbnQ7Ci0gaW50IHNjcmVlbl94LCBzY3JlZW5feTsKLS1pbnQgdHNfZmQ7Ci0gaW50IHNhbXBsZXM7Ci0gUGl4bWFwIGJnX3BpeG1hcDsKLSBpbnQgZmxhZ19kZWJ1ZzsKLS1pbnQgcm90YXRpb24gPSAwOwotIGludCBlcnJvcl9iYXNlLCBldmVudF9iYXNlOwotIAotLWludCB1c2luZ194Y2FsaWJyYXRlOwotLQotIGludCBtb3Zpbmc7Ci0gCi0gI2RlZmluZSBDUk9TU0hBSVJfU0laRQkyNQotQEAgLTYzLDcgKzU3LDYgQEAgaW50IG1vdmluZzsKLSAjZGVmaW5lIEVOT1VHSCA1Ci0gI2RlZmluZSBNQVhfU0FNUExFUyA0MAotIAotLSNkZWZpbmUgUkFXX0RFVklDRSAiL2Rldi9oMzYwMF90c3JhdyIKLSAjZGVmaW5lIEZPTlROQU1FICJzYW5zLTEwIgotIAotIHN0cnVjdCBwb2ludCAKLUBAIC0yODcsMTIgKzI4MCw4IEBAIHNvcnRfYnlfeSAoY29uc3Qgdm9pZCogYSwgY29uc3Qgdm9pZCAqYikKLSB2b2lkCi0gc2V0X2NhbGlicmF0aW9uIChjYWxpYnJhdGlvbiAqY2FsKQotIHsKLS0gIFRTX0NBTCB0YzsKLS0gIGludCB4dHJhbnMsIHl0cmFucywgeHNjYWxlLCB5c2NhbGUsIHh5c2NhbGUsIHl4c2NhbGU7Ci0gICBjYWxpYnJhdGlvbiBvY2FsID0gKmNhbDsKLSAKLS0gIGlmICh1c2luZ194Y2FsaWJyYXRlKQotLSAgICB7Ci0gICAgICAgRklMRSAqZnA7Ci0gICAgICAgaWYgKGZsYWdfZGVidWcpCi0gCXByaW50ZiAoImNvbnN0YW50cyBhcmU6ICVkICVkICVkICVkICVkICVkICVkXG4iLCBjYWwtPmFbMV0sIGNhbC0+YVsyXSwgY2FsLT5hWzBdLCBjYWwtPmFbNF0sIGNhbC0+YVs1XSwgY2FsLT5hWzNdLCBjYWwtPmFbNl0pOwotQEAgLTMwNCwyOSArMjkzLDYgQEAgc2V0X2NhbGlicmF0aW9uIChjYWxpYnJhdGlvbiAqY2FsKQotIAl9Ci0gICAgICAgZnByaW50ZiAoZnAsICIlZCAlZCAlZCAlZCAlZCAlZCAlZFxuIiwgY2FsLT5hWzFdLCBjYWwtPmFbMl0sIGNhbC0+YVswXSwgY2FsLT5hWzRdLCBjYWwtPmFbNV0sIGNhbC0+YVszXSwgY2FsLT5hWzZdKTsKLSAgICAgICBmY2xvc2UgKGZwKTsgCi0tICAgICAgcmV0dXJuOwotLSAgICB9Ci0tCi0tICB4dHJhbnMgPSBjYWwtPmFbMF0gLyBjYWwtPmFbNl07Ci0tICB5dHJhbnMgPSBjYWwtPmFbM10gLyBjYWwtPmFbNl07Ci0tICB4c2NhbGUgPSBjYWwtPmFbMV0gKiAyNTYgLyBjYWwtPmFbNl07Ci0tICB5c2NhbGUgPSBjYWwtPmFbNV0gKiAyNTYgLyBjYWwtPmFbNl07Ci0tICB4eXNjYWxlID0gY2FsLT5hWzJdICogMjU2IC8gY2FsLT5hWzZdOwotLSAgeXhzY2FsZSA9IGNhbC0+YVs0XSAqIDI1NiAvIGNhbC0+YVs2XTsKLS0gIAotLSAgdGMueHRyYW5zID0geHRyYW5zOwotLSAgdGMueXRyYW5zID0geXRyYW5zOwotLSAgdGMueHNjYWxlID0geHNjYWxlOwotLSAgdGMueXNjYWxlID0geXNjYWxlOwotLSAgdGMueHlzd2FwID0gMDsKLS0KLS0gIHByaW50ZiAoIiVkICVkICVkICVkICVkXG4iLCB0Yy54c2NhbGUsIHRjLnh0cmFucywgdGMueXNjYWxlLCB0Yy55dHJhbnMsIHRjLnh5c3dhcCk7Ci0tCi0tICBpZiAoaW9jdGwgKHRzX2ZkLCBUU19TRVRfQ0FMLCAodm9pZCAqKSZ0YykgIT0gMCkKLS0gICAgewotLSAgICAgIHBlcnJvciAoIlRTX1NFVF9DQUwiKTsKLS0gICAgICBleGl0ICgxKTsKLS0gICAgfQotIH0KLSAKLSB2b2lkCi1AQCAtMzk4LDgwICszNjQsMTMgQEAgaGFuZGxlX3RzX2V2ZW50IChpbnQgeCwgaW50IHksIGludCBwcmVzcwotIH0KLSAKLSB2b2lkCi0tcmVhZF90cyAodm9pZCkKLS17Ci0tICBUU19FVkVOVCB0c19ldjsKLS0gIGludCByOwotLQotLSAgciA9IHJlYWQgKHRzX2ZkLCAmdHNfZXYsIHNpemVvZiAodHNfZXYpKTsKLS0gIGlmIChyID09IHNpemVvZiAodHNfZXYpKQotLSAgICBoYW5kbGVfdHNfZXZlbnQgKHRzX2V2LngsIHRzX2V2LnksIHRzX2V2LnByZXNzdXJlKTsKLS19Ci0tCi0tdm9pZAotLWRvX2NhbCAoY2hhciAqKmFyZ3MpCi0tewotLSAgVFNfQ0FMIHRjOwotLQotLSAgdGMueHNjYWxlID0gYXRvaSAoYXJnc1swXSk7Ci0tICB0Yy54dHJhbnMgPSBhdG9pIChhcmdzWzFdKTsKLS0gIHRjLnlzY2FsZSA9IGF0b2kgKGFyZ3NbMl0pOwotLSAgdGMueXRyYW5zID0gYXRvaSAoYXJnc1szXSk7Ci0tICB0Yy54eXN3YXAgPSBhdG9pIChhcmdzWzRdKTsKLS0KLS0gIGlmIChmbGFnX2RlYnVnKQotLSAgICBmcHJpbnRmIChzdGRlcnIsICJzZXR0aW5nOiAlZCAlZCAlZCAlZCAlZFxuIiwgCi0tCSAgICAgdGMueHRyYW5zLCB0Yy55dHJhbnMsIHRjLnhzY2FsZSwgdGMueXNjYWxlLCB0Yy54eXN3YXApOwotLSAgICAKLS0gIGlmIChpb2N0bCAodHNfZmQsIFRTX1NFVF9DQUwsICh2b2lkICopJnRjKSAhPSAwKQotLSAgICB7Ci0tICAgICAgcGVycm9yICgiVFNfU0VUX0NBTCIpOwotLSAgICAgIGV4aXQgKDEpOwotLSAgICB9Ci0tICAKLS0gIGV4aXQgKDApOwotLX0KLS0KLS12b2lkCi0tc2hvd19jYWwgKHZvaWQpCi0tewotLSAgVFNfQ0FMIHRjOwotLQotLSAgaWYgKGlvY3RsICh0c19mZCwgVFNfR0VUX0NBTCwgKHZvaWQgKikmdGMpICE9IDApCi0tICAgIHsKLS0gICAgICBwZXJyb3IgKCJUU19HRVRfQ0FMIik7Ci0tICAgICAgZXhpdCAoMSk7Ci0tICAgIH0KLS0KLS0gIHByaW50ZiAoIiVkICVkICVkICVkICVkXG4iLCB0Yy54c2NhbGUsIHRjLnh0cmFucywgdGMueXNjYWxlLCB0Yy55dHJhbnMsIHRjLnh5c3dhcCk7Ci0tfQotLQotLXZvaWQKLSB1c2FnZSAoY29uc3QgY2hhciAqbmFtZSkKLSB7Ci0tICBmcHJpbnRmIChzdGRlcnIsICJ1c2FnZTogJXMgLXZpZXdcbiIsIG5hbWUpOwotLSAgZnByaW50ZiAoc3RkZXJyLCAiICAgICAgICVzIFstcm90YXRlIDwwIHwgOTAgfCAxODAgfCAyNzA+XVxuIiwgbmFtZSk7Ci0tICBmcHJpbnRmIChzdGRlcnIsICIgICAgICAgJXMgLWNhbCA8eHM+IDx4dD4gPHlzPiA8eXQ+IDx4eXN3YXA+XG4iLCBuYW1lKTsKLS0KLSsgIGZwcmludGYgKHN0ZGVyciwgInVzYWdlOiAlcyBbLWRlYnVnXVxuIiwgbmFtZSk7Ci0gICBleGl0ICgxKTsKLSB9Ci0gCi0gaW50Ci0teHJyX3N1cHBvcnRlZCAodm9pZCkKLS17Ci0tICBpbnQgeHJyX2V2ZW50X2Jhc2UsIHhycl9lcnJvcl9iYXNlOwotLSAgaW50IHhycl9tYWpvciwgeHJyX21pbm9yOwotLQotLSAgaWYgKFhSUlF1ZXJ5RXh0ZW5zaW9uIChkcHksICZ4cnJfZXZlbnRfYmFzZSwgJnhycl9lcnJvcl9iYXNlKSA9PSBGYWxzZQotLSAgICAgIHx8IFhSUlF1ZXJ5VmVyc2lvbiAoZHB5LCAmeHJyX21ham9yLCAmeHJyX21pbm9yKSA9PSAwCi0tICAgICAgfHwgeHJyX21ham9yICE9IDEKLS0gICAgICB8fCB4cnJfbWlub3IgPCAxKQotLSAgICByZXR1cm4gMDsKLS0KLS0gIHJldHVybiAxOwotLX0KLS0KLS1pbnQKLSBtYWluIChpbnQgYXJnYywgY2hhciAqYXJndltdKQotIHsKLSAgIFhTZXRXaW5kb3dBdHRyaWJ1dGVzIGF0dHJpYnV0ZXM7Ci1AQCAtNDgwLDMxICszNzksMTEgQEAgbWFpbiAoaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKLSAgIGludCBtYXhfZmQ7Ci0gICBHQyBiZ19nYzsKLSAgIGludCBpOwotLSAgaW50IGhhdmVfeHJhbmRyOwotIAotICAgZm9yIChpID0gMTsgaSA8IGFyZ2M7IGkrKykKLSAgICAgewotLSAgICAgIGlmICghc3RyY21wIChhcmd2W2ldLCAiLXZpZXciKSkKLS0JewotLQkgIHNob3dfY2FsICgpOwotLQkgIGV4aXQgKDApOwotLQl9Ci0tICAgICAgZWxzZSBpZiAoIXN0cmNtcCAoYXJndltpXSwgIi1kZWJ1ZyIpKQotKyAgICAgIGlmICghc3RyY21wIChhcmd2W2ldLCAiLWRlYnVnIikpCi0gCWZsYWdfZGVidWcgPSAxOwotLSAgICAgIGVsc2UgaWYgKCFzdHJjbXAgKGFyZ3ZbaV0sICItY2FsIikpCi0tCXsKLS0JICBpZiAoYXJnYyA+IChpICsgNSkpCi0tCSAgICBkb19jYWwgKGFyZ3YgKyBpICsgMSk7Ci0tCSAgZWxzZQotLQkgICAgdXNhZ2UgKGFyZ3ZbMF0pOwotLQl9Ci0tICAgICAgZWxzZSBpZiAoIXN0cmNtcCAoYXJndltpXSwgIi1yb3RhdGUiKSkKLS0JewotLQkgIGlmIChhcmdjID4gKGkgKyAxKSkKLS0JICAgIHJvdGF0aW9uID0gYXRvaSAoYXJndlsrK2ldKTsKLS0JICBlbHNlCi0tCSAgICB1c2FnZSAoYXJndlswXSk7Ci0tCX0KLSAgICAgICBlbHNlCi0gCXVzYWdlIChhcmd2WzBdKTsKLSAgICAgfQotQEAgLTUzMSw0OCArNDEwLDExIEBAIG1haW4gKGludCBhcmdjLCBjaGFyICphcmd2W10pCi0gCSAgZnByaW50ZiAoc3RkZXJyLCAiZmFpbGVkIHRvIHNldCByYXcgbW9kZTogZXJyb3IgJWRcbiIsIHIpOwotIAkgIGV4aXQgKDEpOwotIAl9Ci0tCi0tICAgICAgdXNpbmdfeGNhbGlicmF0ZSA9IDE7Ci0tICAgIH0KLS0KLS0gIGhhdmVfeHJhbmRyID0geHJyX3N1cHBvcnRlZCAoKTsKLS0gIGlmIChoYXZlX3hyYW5kcikKLS0gICAgewotLSAgICAgIFhSUlNjcmVlbkNvbmZpZ3VyYXRpb24gKnJyX3NjcmVlbjsKLS0gICAgICBSb3RhdGlvbiBjdXJyZW50X3JvdGF0aW9uOwotLQotLSAgICAgIGlmIChmbGFnX2RlYnVnKQotLQlmcHJpbnRmIChzdGRlcnIsICJYUkFORFIgaXMgc3VwcG9ydGVkXG4iKTsKLS0KLS0gICAgICBycl9zY3JlZW4gPSBYUlJHZXRTY3JlZW5JbmZvIChkcHksIFJvb3RXaW5kb3cgKGRweSwgc2NyZWVuKSk7Ci0tCi0tICAgICAgWFJSUm90YXRpb25zIChkcHksIHNjcmVlbiwgJmN1cnJlbnRfcm90YXRpb24pOwotLQotLSAgICAgIFhSUkZyZWVTY3JlZW5Db25maWdJbmZvIChycl9zY3JlZW4pOwotLQotLSAgICAgIGlmIChmbGFnX2RlYnVnKQotLQlmcHJpbnRmIChzdGRlcnIsICJDdXJyZW50IFJBTkRSIHJvdGF0aW9uIGlzICVkXG4iLCBjdXJyZW50X3JvdGF0aW9uKTsKLS0KLS0gICAgICBzd2l0Y2ggKGN1cnJlbnRfcm90YXRpb24pCi0tCXsKLS0JY2FzZSBSUl9Sb3RhdGVfMjcwOgotLQkgIHJvdGF0aW9uICs9IDkwOwotLQljYXNlIFJSX1JvdGF0ZV8xODA6Ci0tCSAgcm90YXRpb24gKz0gOTA7Ci0tCWNhc2UgUlJfUm90YXRlXzkwOgotLQkgIHJvdGF0aW9uICs9IDkwOwotLQkgIHJvdGF0aW9uICU9IDM2MDsKLS0JY2FzZSBSUl9Sb3RhdGVfMDoKLS0JICBicmVhazsKLS0JZGVmYXVsdDoKLS0JICBmcHJpbnRmIChzdGRlcnIsICJVbmtub3duIFJBTkRSIHJvdGF0aW9uOiAlZFxuIiwgY3VycmVudF9yb3RhdGlvbik7Ci0tCSAgYnJlYWs7Ci0tCX0KLSAgICAgfQotICAgZWxzZQotICAgICB7Ci0tICAgICAgaWYgKGZsYWdfZGVidWcpCi0tCWZwcmludGYgKHN0ZGVyciwgIlhSQU5EUiBub3Qgc3VwcG9ydGVkXG4iKTsKLSsgICAgICBwZXJyb3IgKCJYQ0FMSUJSQVRFIGV4dGVuc2lvbiBtaXNzaW5nIik7Ci0rICAgICAgZXhpdCAoMSk7Ci0gICAgIH0KLSAKLSAgIGF0dHJpYnV0ZXMub3ZlcnJpZGVfcmVkaXJlY3QgPSBmbGFnX2RlYnVnID8gRmFsc2UgOiBUcnVlOwotQEAgLTY2Niw0NSArNTA4LDE3IEBAIG1haW4gKGludCBhcmdjLCBjaGFyICphcmd2W10pCi0gCi0gICBmb3IgKGkgPSAwOyBpIDwgTlJfUE9JTlRTOyBpKyspCi0gICAgIHsKLS0gICAgICBzd2l0Y2ggKHJvdGF0aW9uKQotLQl7Ci0tCWNhc2UgMDoKLS0JICBjYWwueGZiW2ldID0gY2FsLnhzY3JbaV07Ci0tCSAgY2FsLnlmYltpXSA9IGNhbC55c2NyW2ldOwotLQkgIGJyZWFrOwotLQljYXNlIDkwOgotLQkgIGNhbC54ZmJbaV0gPSBjYWwueXNjcltpXTsKLS0JICBjYWwueWZiW2ldID0gc2NyZWVuX3ggLSBjYWwueHNjcltpXTsKLS0JICBicmVhazsKLS0JY2FzZSAxODA6Ci0tCSAgY2FsLnhmYltpXSA9IHNjcmVlbl94IC0gY2FsLnhzY3JbaV07Ci0tCSAgY2FsLnlmYltpXSA9IHNjcmVlbl95IC0gY2FsLnlzY3JbaV07Ci0tCSAgYnJlYWs7Ci0tCWNhc2UgMjcwOgotLQkgIGNhbC54ZmJbaV0gPSBzY3JlZW5feSAtIGNhbC55c2NyW2ldOwotLQkgIGNhbC55ZmJbaV0gPSBjYWwueHNjcltpXTsKLS0JICBicmVhazsKLS0JfQotKyAgICAgIGNhbC54ZmJbaV0gPSBjYWwueHNjcltpXTsKLSsgICAgICBjYWwueWZiW2ldID0gY2FsLnlzY3JbaV07Ci0rICAgICAgWENhbGlicmF0ZVNjcmVlblRvQ29vcmQgKGRweSwgJmNhbC54ZmJbaV0sICZjYWwueWZiW2ldKTsKLSAKLSAgICAgICBpZiAoZmxhZ19kZWJ1ZykKLS0JcHJpbnRmICgicm90YXRpb24gJWQ6ICglZCwlZCkgLT4gKCVkLCVkKVxuIiwgcm90YXRpb24sIAotKwlwcmludGYgKCJyb3RhdGlvbiBjb252ZXJzaW9uOiAoJWQsJWQpIC0+ICglZCwlZClcbiIsCi0gCQljYWwueHNjcltpXSwgY2FsLnlzY3JbaV0sIGNhbC54ZmJbaV0sIGNhbC55ZmJbaV0pOwotICAgICB9Ci0gCi0gICBuZXh0X2V2ZW50ICgpOwotIAotLSAgaWYgKCF1c2luZ194Y2FsaWJyYXRlKQotLSAgICB7Ci0tICAgICAgdHNfZmQgPSBvcGVuIChSQVdfREVWSUNFLCBPX1JET05MWSk7Ci0tICAgICAgaWYgKHRzX2ZkIDwgMCkKLS0JewotLQkgIHBlcnJvciAoUkFXX0RFVklDRSk7Ci0tCSAgZXhpdCAoMSk7Ci0tCX0KLS0gICAgfQotLQotLSAgbWF4X2ZkID0gKHhmZCA+IHRzX2ZkKSA/IHhmZCA6IHRzX2ZkOwotLQotICAgZm9yICg7OykKLSAgICAgewotICAgICAgIGZkX3NldCBmZHM7Ci1AQCAtNzEzLDEyICs1MjcsOCBAQCBtYWluIChpbnQgYXJnYywgY2hhciAqYXJndltdKQotIAotICAgICAgIEZEX1pFUk8gKCZmZHMpOwotICAgICAgIEZEX1NFVCAoeGZkLCAmZmRzKTsKLS0gICAgICBpZiAodHNfZmQgIT0gLTEpCi0tCUZEX1NFVCAodHNfZmQsICZmZHMpOwotIAotLSAgICAgIHNlbGVjdCAobWF4X2ZkICsgMSwgJmZkcywgTlVMTCwgTlVMTCwgTlVMTCk7Ci0tICAgICAgCi0tICAgICAgaWYgKHRzX2ZkICE9IC0xICYmIEZEX0lTU0VUICh0c19mZCwgJmZkcykpCi0tCXJlYWRfdHMgKCk7Ci0rICAgICAgc2VsZWN0ICh4ZmQgKyAxLCAmZmRzLCBOVUxMLCBOVUxMLCBOVUxMKTsKLSAgICAgfQotIH0KLSsKLUluZGV4OiB4dHNjYWwtMC42LjMvY29uZmlndXJlLmFjCi09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLS0geHRzY2FsLTAuNi4zLm9yaWcvY29uZmlndXJlLmFjCTIwMDQtMDktMTAgMjA6MTE6MTIuMDAwMDAwMDAwICswMTAwCi0rKysgeHRzY2FsLTAuNi4zL2NvbmZpZ3VyZS5hYwkyMDA3LTA3LTAxIDAxOjEyOjU1LjAwMDAwMDAwMCArMDEwMAotQEAgLTksOCArOSw3IEBAIEFNX0lOSVRfQVVUT01BS0UoW2ZvcmVpZ24gZGlzdC1iemlwMl0pCi0gIyBDaGVja3MgZm9yIHByb2dyYW1zLgotIEFDX1BST0dfQ0MKLSAKLS1QS0dfQ0hFQ0tfTU9EVUxFUyhYVFNDQUwsIHgxMSB4ZnQgeGV4dCB4cmFuZHIgeGNhbGlicmF0ZSkKLStQS0dfQ0hFQ0tfTU9EVUxFUyhYVFNDQUwsIHgxMSB4ZnQgeGV4dCB4Y2FsaWJyYXRlKQotIAotIEFDX0NPTkZJR19GSUxFUyhbTWFrZWZpbGVdKQotLUFDX0NPTkZJR19GSUxFUyhbeHRzY2FsXSkKLSBBQ19PVVRQVVQKLUluZGV4OiB4dHNjYWwtMC42LjMvZ3BlLWRpc3QuYW0KLT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tLSB4dHNjYWwtMC42LjMub3JpZy9ncGUtZGlzdC5hbQkyMDA0LTA2LTAyIDIzOjA3OjEzLjAwMDAwMDAwMCArMDEwMAotKysrIC9kZXYvbnVsbAkxOTcwLTAxLTAxIDAwOjAwOjAwLjAwMDAwMDAwMCArMDAwMAotQEAgLTEsMTIgKzAsMCBAQAotLUNWU1RBRyA6PSAkKHNoZWxsIGVjaG8gJChQQUNLQUdFKS0kKFZFUlNJT04pIHwgdHIgW2Etei5dIFtBLVpfXSkKLS0KLS1kaXN0LXVwbG9hZDogZGlzdAotLQlzY3AgJChQQUNLQUdFKS0kKFZFUlNJT04pLnRhci5iejIgJChVU0VSKUBoYW5kaGVsZHMub3JnOi9ob21lL2Z0cC9wdWIvcHJvamVjdHMvZ3BlL3NvdXJjZS8KLS0KLS10YWc6Ci0tCWN2cyB0YWcgJChDVlNUQUcpCi0tCi0tcmV0YWc6Ci0tCWN2cyB0YWcgLUYgJChDVlNUQUcpCi0tCi0tc291cmNlOiB0YWcgZGlzdC11cGxvYWQKLUluZGV4OiB4dHNjYWwtMC42LjMvaDM2MDBfdHMuaAotPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0tIHh0c2NhbC0wLjYuMy5vcmlnL2gzNjAwX3RzLmgJMjAwMy0wNy0wNSAxNzoyNzoxMC4wMDAwMDAwMDAgKzAxMDAKLSsrKyAvZGV2L251bGwJMTk3MC0wMS0wMSAwMDowMDowMC4wMDAwMDAwMDAgKzAwMDAKLUBAIC0xLDIxNiArMCwwIEBACi0tLyoKLS0qCi0tKiBEcml2ZXIgZm9yIHRoZSBIMzYwMCBUb3VjaCBTY3JlZW4gYW5kIG90aGVyIEF0bWVsIGNvbnRyb2xsZWQgZGV2aWNlcy4KLS0qCi0tKiBDb3B5cmlnaHQgMjAwMCBDb21wYXEgQ29tcHV0ZXIgQ29ycG9yYXRpb24uCi0tKgotLSogVXNlIGNvbnNpc3RlbnQgd2l0aCB0aGUgR05VIEdQTCBpcyBwZXJtaXR0ZWQsCi0tKiBwcm92aWRlZCB0aGF0IHRoaXMgY29weXJpZ2h0IG5vdGljZSBpcwotLSogcHJlc2VydmVkIGluIGl0cyBlbnRpcmV0eSBpbiBhbGwgY29waWVzIGFuZCBkZXJpdmVkIHdvcmtzLgotLSoKLS0qIENPTVBBUSBDT01QVVRFUiBDT1JQT1JBVElPTiBNQUtFUyBOTyBXQVJSQU5USUVTLCBFWFBSRVNTRUQgT1IgSU1QTElFRCwKLS0qIEFTIFRPIFRIRSBVU0VGVUxORVNTIE9SIENPUlJFQ1RORVNTIE9GIFRISVMgQ09ERSBPUiBJVFMKLS0qIEZJVE5FU1MgRk9SIEFOWSBQQVJUSUNVTEFSIFBVUlBPU0UuCi0tKgotLSogQXV0aG9yOiBDaGFybGVzIEZseW5uLgotLSoKLS0qLwotLQotLQotLSNpZm5kZWYgX19IMzYwMF9UU19IX18KLS0jZGVmaW5lIF9fSDM2MDBfVFNfSF9fCi0tCi0tI2luY2x1ZGUgPGxpbnV4L2lvY3RsLmg+Ci0tCi0tZW51bSBoMzYwMF90c19taW5vcl9kZXZpY2VzIHsKLS0JVFNfTUlOT1IgICAgPSAwLAotLQlUU1JBV19NSU5PUiA9IDEsCi0tCUtFWV9NSU5PUiAgID0gMgotLX07Ci0tCi0tdHlwZWRlZiBzdHJ1Y3QgaDM2MDBfdHNfY2FsaWJyYXRpb24gewotLSAgICAgICAgaW50IHhzY2FsZTsKLS0gICAgICAgIGludCB4dHJhbnM7Ci0tICAgICAgICBpbnQgeXNjYWxlOwotLSAgICAgICAgaW50IHl0cmFuczsKLS0gICAgICAgIGludCB4eXN3YXA7Ci0tfSBUU19DQUw7Ci0tCi0tdHlwZWRlZiBzdHJ1Y3QgaDM2MDBfdHNfZXZlbnQgewotLSAgICAgICAgdW5zaWduZWQgc2hvcnQgcHJlc3N1cmU7Ci0tICAgICAgICB1bnNpZ25lZCBzaG9ydCB4OwotLSAgICAgICAgdW5zaWduZWQgc2hvcnQgeTsKLS0gICAgICAgIHVuc2lnbmVkIHNob3J0IHBhZDsKLS19IFRTX0VWRU5UOwotLQotLS8qIERlcHJlY2F0ZWQgLSBkbyBub3QgdXNlICovCi0tdHlwZWRlZiBzdHJ1Y3QgaDM2MDBfdHNfcmV0dXJuIHsKLS0gICAgICAgIHVuc2lnbmVkIHNob3J0IHByZXNzdXJlOwotLSAgICAgICAgdW5zaWduZWQgc2hvcnQgeDsKLS0gICAgICAgIHVuc2lnbmVkIHNob3J0IHk7Ci0tICAgICAgICB1bnNpZ25lZCBzaG9ydCBwYWQ7Ci0tfSBUU19SRVQ7Ci0tCi0tZW51bSBwb3dlcl9idXR0b25fbW9kZSB7Ci0tICAgUEJNX1NVU1BFTkQgICAgICAgICAgID0gMCwKLS0gICBQQk1fR0VORVJBVEVfS0VZUFJFU1MgPSAxCi0tfTsKLS0KLS0KLS0vKiArKysrKysrKysrKysrKyArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrICovCi0tCi0tdHlwZWRlZiBzdHJ1Y3QgdGhlcm1fZGV2IHsKLS0Jc2hvcnQgZGF0YTsKLS19IFRIRVJNX0RFVjsKLS0KLS0jZGVmaW5lIEgzNjAwX0JBVFRfQ0hFTV9BTEtBTElORSAgICAgICAgMHgwMQotLSNkZWZpbmUgSDM2MDBfQkFUVF9DSEVNX05JQ0QgICAgICAgICAgICAweDAyCi0tI2RlZmluZSBIMzYwMF9CQVRUX0NIRU1fTklNSCAgICAgICAgICAgIDB4MDMKLS0jZGVmaW5lIEgzNjAwX0JBVFRfQ0hFTV9MSU9OICAgICAgICAgICAgMHgwNAotLSNkZWZpbmUgSDM2MDBfQkFUVF9DSEVNX0xJUE9MWSAgICAgICAgICAweDA1Ci0tI2RlZmluZSBIMzYwMF9CQVRUX0NIRU1fTk9UX0lOU1RBTExFRCAgIDB4MDYKLS0jZGVmaW5lIEgzNjAwX0JBVFRfQ0hFTV9VTktOT1dOICAgICAgICAgMHhmZgotLQotLS8qIFRoZXNlIHNob3VsZCBtYXRjaCB0aGUgYXBtX2Jpb3MuaCBkZWZpbml0aW9ucyAqLwotLSNkZWZpbmUgSDM2MDBfQUNfU1RBVFVTX0FDX09GRkxJTkUJMHgwMAotLSNkZWZpbmUgSDM2MDBfQUNfU1RBVFVTX0FDX09OTElORQkweDAxCi0tI2RlZmluZSBIMzYwMF9BQ19TVEFUVVNfQUNfQkFDS1VQCTB4MDIgICAvKiBXaGF0IGRvZXMgdGhpcyBtZWFuPyAqLwotLSNkZWZpbmUgSDM2MDBfQUNfU1RBVFVTX0FDX1VOS05PV04JMHhmZgotLQotLS8qIFRoZXNlIGJpdGZpZWxkcyBhcmUgcmFyZWx5ICJvcidkIiB0b2dldGhlciAqLwotLSNkZWZpbmUgSDM2MDBfQkFUVF9TVEFUVVNfSElHSAkJMHgwMQotLSNkZWZpbmUgSDM2MDBfQkFUVF9TVEFUVVNfTE9XCQkweDAyCi0tI2RlZmluZSBIMzYwMF9CQVRUX1NUQVRVU19DUklUSUNBTAkweDA0Ci0tI2RlZmluZSBIMzYwMF9CQVRUX1NUQVRVU19DSEFSR0lORwkweDA4Ci0tI2RlZmluZSBIMzYwMF9CQVRUX1NUQVRVU19DSEFSR0VfTUFJTiAgIDB4MTAKLS0jZGVmaW5lIEgzNjAwX0JBVFRfU1RBVFVTX0RFQUQgICAgICAgICAgMHgyMCAgIC8qIEJhdHRlcnkgd2lsbCBub3QgY2hhcmdlICovCi0tI2RlZmluZSBIMzYwMF9CQVRUX05PVF9JTlNUQUxMRUQgICAgICAgIDB4MjAgICAvKiBGb3IgZXhwYW5zaW9uIHBhY2sgYmF0dGVyaWVzICovCi0tI2RlZmluZSBIMzYwMF9CQVRUX1NUQVRVU19GVUxMICAgICAgICAgIDB4NDAgICAvKiBCYXR0ZXJ5IGZ1bGx5IGNoYXJnZWQgKGFuZCBjb25uZWN0ZWQgdG8gQUMpICovCi0tI2RlZmluZSBIMzYwMF9CQVRUX1NUQVRVU19OT0JBVFQJMHg4MAotLSNkZWZpbmUgSDM2MDBfQkFUVF9TVEFUVVNfVU5LTk9XTgkweGZmCi0tCi0tc3RydWN0IGJhdHRlcnlfZGF0YSB7Ci0tCXVuc2lnbmVkIGNoYXIgIGNoZW1pc3RyeTsKLS0JdW5zaWduZWQgY2hhciAgc3RhdHVzOwotLQl1bnNpZ25lZCBzaG9ydCB2b2x0YWdlOyAgICAvKiBWb2x0YWdlIGZvciBiYXR0ZXJ5ICMwOyB1bmtub3duIGZvciBiYXR0ZXJ5ICMxICovCi0tCXVuc2lnbmVkIHNob3J0IHBlcmNlbnRhZ2U7IC8qIFBlcmNlbnRhZ2Ugb2YgZnVsbCBjaGFyZ2UgKi8KLS0JdW5zaWduZWQgc2hvcnQgbGlmZTsgICAgICAgLyogTGlmZSByZW1haW5pbmcgaW4gbWludXRlcyAqLwotLX07Ci0tCi0tc3RydWN0IGgzNjAwX2JhdHRlcnkgewotLSAgICAgICAgdW5zaWduZWQgY2hhciAgICAgICBhY19zdGF0dXM7Ci0tCXVuc2lnbmVkIGNoYXIgICAgICAgYmF0dGVyeV9jb3VudDsgIC8qIEhvdyBtYW55IGJhdHRlcmllcyB3ZSBoYXZlICovCi0tCXN0cnVjdCBiYXR0ZXJ5X2RhdGEgYmF0dGVyeVsyXTsKLS19OwotLQotLS8qIC0tLS0tLS0tIEVFUFJPTSBhbmQgU1BJIEludGVyZmFjZXMgLS0tLS0tLS0tLS0tLS0tKi8KLS0KLS0jZGVmaW5lIEVFUFJPTV9SRF9CVUZTSVogNgkvKiBFRVBST00gcmVhZHMgYXJlIDE2IGJpdHMgKi8KLS0jZGVmaW5lIEVFUFJPTV9XUl9CVUZTSVogNQkvKiBBbGxvdyByb29tIGZvciA4Yml0ICdhZGRyJyBmaWVsZCBpbiBidWZmZXIqLyAKLS0jZGVmaW5lIFNQSV9SRF9CVUZTSVoJIDE2CS8qIFNQSSByZWFkcyBhcmUgOCBiaXRzICovCi0tI2RlZmluZSBTUElfV1JfQlVGU0laCSA3Ci0tCi0tLyogVGhlIEVFUFJPTSBpcyB3aGVyZSBpbnRlcm5hbCBwcm9ncmFtcyBhcmUgc3RvcmVkIG9uIHRoZSBBbXRlbC4KLS0gICBZb3UgcHJvYmFibHkgZG9uJ3Qgd2FudCB0byByZWFkIG9yIHdyaXRlIHRoZXNlIHZhbHVlcyAqLwotLQotLXR5cGVkZWYgc3RydWN0IGgzNjAwX2VlcHJvbV9yZWFkX3JlcXVlc3QgewotLQl1bnNpZ25lZCBjaGFyIGFkZHI7ICAgIC8qIDhiaXQgQWRkcmVzcyBPZmZzZXQgMC0yNTUgKi8KLS0JdW5zaWduZWQgY2hhciBsZW47ICAgICAvKiBOdW1iZXIgb2YgMTZiaXQgd29yZHMgdG8gcmVhZCAwLTEyOCAgKi8KLS0JdW5zaWduZWQgc2hvcnQgYnVmZltFRVBST01fUkRfQlVGU0laXTsKLS19IEVFUFJPTV9SRUFEOwotLQotLXR5cGVkZWYgc3RydWN0IGgzNjAwX2VlcHJvbV93cml0ZV9yZXF1ZXN0IHsKLS0JdW5zaWduZWQgY2hhciBsZW47CS8qIHVzZWQgb25seSB0byBjb21wdXRlIHRoZSBudW1iZXIgb2YgYnl0ZXMgdG8gc2VuZCAqLwotLQl1bnNpZ25lZCBjaGFyIGFkZHI7ICAgIC8qIDAtMTI4ICAqLwotLQl1bnNpZ25lZCBzaG9ydCBidWZmW0VFUFJPTV9XUl9CVUZTSVpdOwotLX0gRUVQUk9NX1dSSVRFOwotLQotLS8qIFRoZSBTUEkgYnVzIGNvbm5lY3RzIHRvIEVFUFJPTXMgbG9jYXRlZCBvbiBzbGVldmVzIHBsdWdnZWQgaW50bwotLSAgIHRoZSBpUEFRLiAgWW91IG1heSB3YW50IHRvIHJlYWQgdGhlc2UgdmFsdWVzICAqLwotLQotLXR5cGVkZWYgc3RydWN0IGgzNjAwX3NwaV9yZWFkX3JlcXVlc3QgewotLQl1bnNpZ25lZCBzaG9ydCBhZGRyOyAgICAvKiAxNmJpdCBBZGRyZXNzIE9mZnNldCAwLTEyOCAqLwotLQl1bnNpZ25lZCBjaGFyIGxlbjsgICAgICAvKiBOdW1iZXIgb2YgYnl0ZXMgdG8gcmVhZCAqLwotLQl1bnNpZ25lZCBjaGFyIGJ1ZmZbU1BJX1JEX0JVRlNJWl07Ci0tfSBTUElfUkVBRDsKLS0KLS0jZGVmaW5lIFNQSV9SRUFEX1NUQVRVU19CWVRFICAweGZmZmYgICAvKiBVc2UgdGhpcyBhZGRyZXNzIHRvIHJlYWQgdGhlIHN0YXR1cyBieXRlICovCi0tCi0tdHlwZWRlZiBzdHJ1Y3QgaDM2MDBfc3BpX3dyaXRlX3JlcXVlc3QgewotLQl1bnNpZ25lZCBzaG9ydCBsZW47CS8qIHVzZWQgb25seSB0byBjb21wdXRlIHRoZSBudW1iZXIgb2YgYnl0ZXMgdG8gc2VuZCAqLwotLQl1bnNpZ25lZCBzaG9ydCBhZGRyOwkvKiB0aGlzIDE2Yml0IGFkZHJlc3MgYWNjZXNzZXMgYSBzaW5nbGUgYnl0ZSAqLwotLQl1bnNpZ25lZCBjaGFyICBidWZmW1NQSV9XUl9CVUZTSVpdOwotLX0gU1BJX1dSSVRFOwotLQotLQotLS8qIC0tLS0tLS0tIGVuZCBvZiBFRVBST00gYW5kIFNQSSBJbnRlcmZhY2VzIC0tLS0tLS0tLS0tLS0tLSovCi0tCi0tLyogVXNlciBzcGFjZSBzdHJ1Y3R1cmVzIGZvciBJT0NUTCBjYWxscyAqLwotLQotLXR5cGVkZWYgc3RydWN0IGgzNjAwX3RzX3ZlcnNpb24gewotLQl1bnNpZ25lZCBjaGFyIGhvc3RfdmVyc2lvbls4XTsJLyogYXNjaWkgIngueXkiICovCi0tCXVuc2lnbmVkIGNoYXIgcGFja192ZXJzaW9uWzhdOwkvKiBhc2NpaSAieC55eSIgKi8KLS0JdW5zaWduZWQgY2hhciBib290X3R5cGU7CQkvKiBUT0RPID8/ICovCi0tfSBWRVJfUkVUOwotLQotLXR5cGVkZWYgc3RydWN0IGgzNjAwX3RzX2xlZCB7Ci0tICAgICAgICB1bnNpZ25lZCBjaGFyIE9mZk9uQmxpbms7ICAgICAgIC8qIDA9b2ZmIDE9b24gMj1CbGluayAqLwotLSAgICAgICAgdW5zaWduZWQgY2hhciBUb3RhbFRpbWU7ICAgICAgICAvKiBVbml0cyBvZiA1IHNlY29uZHMgKi8KLS0gICAgICAgIHVuc2lnbmVkIGNoYXIgT25UaW1lOyAgICAgICAgICAgLyogdW5pdHMgb2YgMTAwbS9zICovCi0tICAgICAgICB1bnNpZ25lZCBjaGFyIE9mZlRpbWU7ICAgICAgICAgIC8qIHVuaXRzIG9mIDEwMG0vcyAqLwotLX0gTEVEX0lOOwotLQotLWVudW0gZmxpdGVfbW9kZSB7Ci0tICAgICAgICBGTElURV9NT0RFMSA9IDEsCi0tCUZMSVRFX0FVVE9fTU9ERSAgID0gMSwgICAgIC8qIGZvciByZWZlcmVuY2Ugb25seSAqLwotLQlGTElURV9NQU5VQUxfTU9ERSA9IDIsICAgICAvKiBVc2UgdGhpcyBub3JtYWxseT8gKi8KLS0JRkxJVEVfR0VUX0xJR0hUX1NFTlNPUiA9IDMgLyogUmV0dXJucyBsaWdodCByZWFkaW5nIGluICJicmlnaHRuZXNzIiBmaWVsZCAqLwotLX07Ci0tZW51bSBmbGl0ZV9wd3IgewotLSAgICAgICAgRkxJVEVfUFdSX09GRiA9IDAsCi0tICAgICAgICBGTElURV9QV1JfT04gID0gMQotLX07Ci0tCi0tdHlwZWRlZiBzdHJ1Y3QgaDM2MDBfdHNfZmxpdGUgewotLSAgICAgICAgdW5zaWduZWQgY2hhciBtb2RlOwotLSAgICAgICAgdW5zaWduZWQgY2hhciBwd3I7Ci0tICAgICAgICB1bnNpZ25lZCBjaGFyIGJyaWdodG5lc3M7Ci0tfSBGTElURV9JTjsKLS0KLS0vKioqKioqKioqKioqKioqKioqKioqKioqKioqIFVwZGF0ZWQgInVuaXZlcnNhbCIgc3RydWN0dXJlcyAqKioqKioqKioqKioqKioqKioqLwotLQotLS8qIFNldHMgYmFja2xpZ2h0IGZvciBib3RoIEgzMTAwIGFuZCBIMzYwMCBtb2RlbHMgLSB0ZWNobmljYWxseSAiZnJvbnRsaWdodCIgZm9yIEgzNjAwICovCi0tc3RydWN0IGgzNjAwX3RzX2JhY2tsaWdodCB7Ci0tCWVudW0gZmxpdGVfcHdyIHBvd2VyOyAgICAgICAgICAvKiAwID0gb2ZmLCAxID0gb24gKi8KLS0JdW5zaWduZWQgY2hhciAgYnJpZ2h0bmVzczsgICAgIC8qIDAgLSAyNTUgICAgICAgICAqLwotLX07Ci0tCi0tc3RydWN0IGgzNjAwX3RzX2NvbnRyYXN0IHsgICAgICAgICAgICAvKiBPbmx5IHVzZWZ1bCBvbiBIMzEwMCBtb2RlbCAqLwotLQl1bnNpZ25lZCBjaGFyIGNvbnRyYXN0OyAgICAgICAvKiAwIC0gMjU1ICovCi0tfTsKLS0KLS0vKiBJT0NUTCBjbWRzICB1c2VyIG9yIGtlcm5lbCBzcGFjZSAqLwotLQotLS8qIFVzZSAnZicgYXMgbWFnaWMgbnVtYmVyICovCi0tI2RlZmluZSBJT0NfSDM2MDBfVFNfTUFHSUMgICdmJwotLQotLS8qIFRPRE86IFNvbWUgb2YgdGhlc2UgSU9XUiB2YWx1ZXMgYXJlIGp1c3QgcGxhaW4gd3JvbmcgKi8KLS0jZGVmaW5lIEdFVF9WRVJTSU9OCQlfSU9SKElPQ19IMzYwMF9UU19NQUdJQywgIDEsIHN0cnVjdCBoMzYwMF90c192ZXJzaW9uICkKLS0jZGVmaW5lIFJFQURfRUVQUk9NCQlfSU9XUihJT0NfSDM2MDBfVFNfTUFHSUMsIDIsIHN0cnVjdCBoMzYwMF9lZXByb21fcmVhZF9yZXF1ZXN0KQotLSNkZWZpbmUgV1JJVEVfRUVQUk9NCQlfSU9XUihJT0NfSDM2MDBfVFNfTUFHSUMsIDMsIHN0cnVjdCBoMzYwMF9lZXByb21fd3JpdGVfcmVxdWVzdCkKLS0jZGVmaW5lIEdFVF9USEVSTUFMCQlfSU9SKElPQ19IMzYwMF9UU19NQUdJQywgIDQsIHN0cnVjdCB0aGVybV9kZXYpCi0tI2RlZmluZSBMRURfT04JCQlfSU9XKElPQ19IMzYwMF9UU19NQUdJQywgIDUsIHN0cnVjdCBoMzYwMF90c19sZWQpCi0tI2RlZmluZSBHRVRfQkFUVEVSWV9TVEFUVVMJX0lPUihJT0NfSDM2MDBfVFNfTUFHSUMsICA2LCBzdHJ1Y3QgaDM2MDBfYmF0dGVyeSkKLS0jZGVmaW5lIEZMSVRFX09OCQlfSU9XKElPQ19IMzYwMF9UU19NQUdJQywgIDcsIHN0cnVjdCBoMzYwMF90c19mbGl0ZSkKLS0jZGVmaW5lIFJFQURfU1BJCQlfSU9XUihJT0NfSDM2MDBfVFNfTUFHSUMsIDgsIHN0cnVjdCBoMzYwMF9zcGlfcmVhZF9yZXF1ZXN0KQotLSNkZWZpbmUgV1JJVEVfU1BJCQlfSU9XUihJT0NfSDM2MDBfVFNfTUFHSUMsIDksIHN0cnVjdCBoMzYwMF9zcGlfd3JpdGVfcmVxdWVzdCkKLS0jZGVmaW5lIFRTX0dFVF9DQUwJCV9JT1IoSU9DX0gzNjAwX1RTX01BR0lDLCAxMCwgc3RydWN0IGgzNjAwX3RzX2NhbGlicmF0aW9uKQotLSNkZWZpbmUgVFNfU0VUX0NBTAkJX0lPVyhJT0NfSDM2MDBfVFNfTUFHSUMsIDExLCBzdHJ1Y3QgaDM2MDBfdHNfY2FsaWJyYXRpb24pCi0tCi0tLyogTmV3IElPQ1RMIGludGVyZmFjZXMgLSBkZWZpbmVkIHRvIGJlIG1vcmUgdXNlciBmcmllbmRseSAqLwotLSNkZWZpbmUgVFNfR0VUX0JBQ0tMSUdIVCAgICAgICAgX0lPUihJT0NfSDM2MDBfVFNfTUFHSUMsIDIwLCBzdHJ1Y3QgaDM2MDBfdHNfYmFja2xpZ2h0KQotLSNkZWZpbmUgVFNfU0VUX0JBQ0tMSUdIVCAgICAgICAgX0lPVyhJT0NfSDM2MDBfVFNfTUFHSUMsIDIwLCBzdHJ1Y3QgaDM2MDBfdHNfYmFja2xpZ2h0KQotLSNkZWZpbmUgVFNfR0VUX0NPTlRSQVNUICAgICAgICAgX0lPUihJT0NfSDM2MDBfVFNfTUFHSUMsIDIxLCBzdHJ1Y3QgaDM2MDBfdHNfY29udHJhc3QpCi0tI2RlZmluZSBUU19TRVRfQ09OVFJBU1QgICAgICAgICBfSU9XKElPQ19IMzYwMF9UU19NQUdJQywgMjEsIHN0cnVjdCBoMzYwMF90c19jb250cmFzdCkKLS0KLS0jZW5kaWYKLUluZGV4OiB4dHNjYWwtMC42LjMvTWFrZWZpbGUuYW0KLT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tLSB4dHNjYWwtMC42LjMub3JpZy9NYWtlZmlsZS5hbQkyMDA0LTA2LTAyIDIzOjA3OjEzLjAwMDAwMDAwMCArMDEwMAotKysrIHh0c2NhbC0wLjYuMy9NYWtlZmlsZS5hbQkyMDA3LTA3LTAyIDEyOjUxOjAyLjAwMDAwMDAwMCArMDEwMAotQEAgLTEsMTEgKzEsOCBAQAotLWxpYmV4ZWNfUFJPR1JBTVMgPSB4dHNjYWwuYmluCi0tYmluX1NDUklQVFMgPSB4dHNjYWwKLStiaW5fUFJPR1JBTVMgPSB4dHNjYWwKLSAKLS14dHNjYWxfYmluX1NPVVJDRVMgPSBtYWluLmMgY2FsaWJyYXRlLmMgY2FsaWJyYXRlLmggaDM2MDBfdHMuaAotK3h0c2NhbF9TT1VSQ0VTID0gbWFpbi5jIGNhbGlicmF0ZS5jIGNhbGlicmF0ZS5oCi0gCi0teHRzY2FsX2Jpbl9MREFERCA9IEBYVFNDQUxfTElCU0AKLSt4dHNjYWxfTERBREQgPSBAWFRTQ0FMX0xJQlNACi0gCi0gSU5DTFVERVMgPSBAWFRTQ0FMX0NGTEFHU0AgLUROUl9QT0lOVFM9NQotIAotLWluY2x1ZGUgZ3BlLWRpc3QuYW0KLS0KZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveHRzY2FsL3h0c2NhbC9kc29fbGlua2luZ19jaGFuZ2VfYnVpbGRfZml4LnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94dHNjYWwveHRzY2FsL2Rzb19saW5raW5nX2NoYW5nZV9idWlsZF9maXgucGF0Y2gKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDNlNDUzM2YuLjAwMDAwMDAKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94dHNjYWwveHRzY2FsL2Rzb19saW5raW5nX2NoYW5nZV9idWlsZF9maXgucGF0Y2gKKysrIC9kZXYvbnVsbApAQCAtMSwyNyArMCwwIEBACi1hZnRlciBnY2MgbGlua2luZyBoYXMgY2hhbmdlZCwgYWxsIHRoZSBsaWJyYXJpZXMgbXVzdCBiZSBleHBsaWNpdGVseSBzcGVjaWZpZWQgCi1UaGlzIHBhdGNoIGF2b2lkcyB0aGlzIGxpbmtpbmcgZXJyb3I6Ci0KLXwgY2NhY2hlIGk1ODYtcG9reS1saW51eC1nY2MgLW1hcmNoPWk1ODYgLS1zeXNyb290PS9kaXNrMC9wb2t5YnVpbGQvYnVpbGQxL3RtcC9zeXNyb290cy9pNTg2LXBva3ktbGludXggIC1mZXhwZW5zaXZlLW9wdGltaXphdGlvbnMgLWZvbWl0LWZyYW1lLXBvaW50ZXIgLWZyZW5hbWUtcmVnaXN0ZXJzIC1PMiAtZ2dkYiAtZmVsaW1pbmF0ZS11bnVzZWQtZGVidWctdHlwZXMgIC1XbCwtTzEgLVdsLC0taGFzaC1zdHlsZT1nbnUgLVdsLC0tYXMtbmVlZGVkIC1vIHh0c2NhbCBtYWluLm8gY2FsaWJyYXRlLm8gLWxYMTEgLWxYZnQgLWxYZXh0IC1sWGNhbGlicmF0ZV5NCi18IC9kaXNrMC9wb2t5YnVpbGQvYnVpbGQxL3RtcC9zeXNyb290cy94ODZfNjQtbGludXgvdXNyL2xpYmV4ZWMvaTU4Ni1wb2t5LWxpbnV4L2djYy9pNTg2LXBva3ktbGludXgvNC41LjEvbGQ6IF4/OiBpbnZhbGlkIERTTyBmb3Igc3ltYm9sIGBYUmVuZGVyQ2hhbmdlUGljdHVyZScgZGVmaW5pdGlvbl5NCi18IC9kaXNrMC9wb2t5YnVpbGQvYnVpbGQxL3RtcC9zeXNyb290cy9pNTg2LXBva3ktbGludXgvdXNyL2xpYi9saWJYcmVuZGVyLnNvLjE6IGNvdWxkIG5vdCByZWFkIHN5bWJvbHM6IEJhZCB2YWx1ZV5NCi18IGNvbGxlY3QyOiBsZCByZXR1cm5lZCAxIGV4aXQgc3RhdHVzXk0KLXwgbWFrZTogKioqIFt4dHNjYWxdIEVycm9yIDEKLQotTml0aW4gQSBLYW1ibGUgPG5pdGluLmEua2FtYmxlQGludGVsLmNvbT4KLURhdGU6IDIwMTEvMDEvMTEKLQotVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCi0KLUluZGV4OiB4dHNjYWwtMC42LjMvY29uZmlndXJlLmFjCi09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLS0geHRzY2FsLTAuNi4zLm9yaWcvY29uZmlndXJlLmFjCi0rKysgeHRzY2FsLTAuNi4zL2NvbmZpZ3VyZS5hYwotQEAgLTksNyArOSw3IEBAIEFNX0lOSVRfQVVUT01BS0UoW2ZvcmVpZ24gZGlzdC1iemlwMl0pCi0gIyBDaGVja3MgZm9yIHByb2dyYW1zLgotIEFDX1BST0dfQ0MKLSAKLS1QS0dfQ0hFQ0tfTU9EVUxFUyhYVFNDQUwsIHgxMSB4ZnQgeGV4dCB4Y2FsaWJyYXRlKQotK1BLR19DSEVDS19NT0RVTEVTKFhUU0NBTCwgeDExIHhmdCB4ZXh0IHhjYWxpYnJhdGUgeHJlbmRlcikKLSAKLSBBQ19DT05GSUdfRklMRVMoW01ha2VmaWxlXSkKLSBBQ19PVVRQVVQKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveHRzY2FsL3h0c2NhbF8wLjYuMy5iYiBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveHRzY2FsL3h0c2NhbF8wLjYuMy5iYgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNGJmZGRmMC4uMDAwMDAwMAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3h0c2NhbC94dHNjYWxfMC42LjMuYmIKKysrIC9kZXYvbnVsbApAQCAtMSwzMyArMCwwIEBACi1TVU1NQVJZID0gIlRvdWNoc2NyZWVuIGNhbGlicmF0aW9uIHV0aWxpdHkiCi0KLURFU0NSSVBUSU9OID0gIkJhc2ljIHRvdWNoc2NyZWVuIGNhbGlicmF0aW9uIHV0aWxpdHkiCi0KLUhPTUVQQUdFID0gImh0dHA6Ly9ncGUubGludXh0b2dvLm9yZyIKLUJVR1RSQUNLRVIgPSAiaHR0cDovL2J1Z3MubGludXh0b2dvLm9yZyIKLUxJQ0VOU0UgPSAiR1BMdjIgJiBHUEx2MisiCi1MSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT05NGQ1NWQ1MTJhOWJhMzZjYWE5YjdkZjA3OWJhZTE5ZiBcCi0gICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9tYWluLmM7ZW5kbGluZT0xMDttZDU9ODcyMWJjYjA4YWU5ZjI0ZTVmZTRjODI5NDE4NzNjODciCi0KLVNFQ1RJT04gPSAieDExL2Jhc2UiCi0KLURFUEVORFMgPSAidmlydHVhbC9saWJ4MTEgbGlieGZ0IGxpYnhjYWxpYnJhdGUiCi0KLVBSID0gInIxMyIKLQotU1JDX1VSSSA9ICIke0dQRV9NSVJST1J9L3h0c2NhbC0ke1BWfS50YXIuYnoyIFwKLSAgICAgICAgICAgZmlsZTovL2NoYW5nZS1jcm9zcy5wYXRjaCBcCi0gICAgICAgICAgIGZpbGU6Ly9jbGVhbnVwLnBhdGNoIFwKLSAgICAgICAgICAgZmlsZTovL2Rzb19saW5raW5nX2NoYW5nZV9idWlsZF9maXgucGF0Y2ggXAotICAgICAgICAgICBmaWxlOi8vMzB4VHNfQ2FsaWJyYXRlLnNoIgotCi1TUkNfVVJJW21kNXN1bV0gPSAiOWJjYWI4MGI0NzRkNTQ1NDQ3N2QxY2ExNjZhNjhjMzQiCi1TUkNfVVJJW3NoYTI1NnN1bV0gPSAiMjdiOWRjMjIwM2RlOWIxNzA2Y2EzOWZhNmNhODBlY2FiODgwNzkwOWVjOTAxYzRhMzQ1YjhlNDExNzg4MDBhMSIKLQotaW5oZXJpdCBhdXRvdG9vbHMgcGtnY29uZmlnIGRpc3Ryb19mZWF0dXJlc19jaGVjawotIyBkZXBlbmRzIG9uIHZpcnR1YWwvbGlieDExCi1SRVFVSVJFRF9ESVNUUk9fRkVBVFVSRVMgPSAieDExIgotCi1kb19pbnN0YWxsX2FwcGVuZCgpIHsKLSAgICBpbnN0YWxsIC1kICR7RH0ke3N5c2NvbmZkaXJ9L1gxMS9Yc2Vzc2lvbi5kLwotICAgIGluc3RhbGwgLW0gMDc1NSAke1dPUktESVJ9LzMweFRzX0NhbGlicmF0ZS5zaCAke0R9JHtzeXNjb25mZGlyfS9YMTEvWHNlc3Npb24uZC8KLX0KZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMta2VybmVsL2NyeXB0b2Rldi9jcnlwdG9kZXYuaW5jIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1rZXJuZWwvY3J5cHRvZGV2L2NyeXB0b2Rldi5pbmMKaW5kZXggYWRlN2VmOS4uMTYwYWIzMCAxMDA2NDQKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1rZXJuZWwvY3J5cHRvZGV2L2NyeXB0b2Rldi5pbmMKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1rZXJuZWwvY3J5cHRvZGV2L2NyeXB0b2Rldi5pbmMKQEAgLTMsNyArMyw5IEBACiBMSUNFTlNFID0gIkdQTHYyIgogTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9YjIzNGVlNGQ2OWY1ZmNlNDQ4NmE4MGZkYWY0YTQyNjMiCiAKLVNSQ19VUkkgPSAiaHR0cDovL2Rvd25sb2FkLmduYS5vcmcvY3J5cHRvZGV2LWxpbnV4L2NyeXB0b2Rldi1saW51eC0ke1BWfS50YXIuZ3oiCitTUkNfVVJJID0gImh0dHA6Ly9kb3dubG9hZC5nbmEub3JnL2NyeXB0b2Rldi1saW51eC9jcnlwdG9kZXYtbGludXgtJHtQVn0udGFyLmd6IFwKKyAgICAgICAgICAgZmlsZTovLzA2ZDZiNTYwYzZlNDVkYzMxN2RhZTQ3Yzc0NzA2ZmE0M2Y0YTMxZDgucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vY2IxODZmNjgyNjc5MzgzZThiNTgwNjI0MDkyNzkwMzczMGNlODVkOS5wYXRjaCIKIAogU1JDX1VSSVttZDVzdW1dID0gIjAyNjQ0Y2M0Y2QwMjMwMWUwYjUwM2EzMzJlYjJmMGI1IgogU1JDX1VSSVtzaGEyNTZzdW1dID0gIjY3ZmFiZGU5ZmI2N2IyODZhOTZjNGY0NWI1OTRiMGVjY2QwZjc2MWI0OTU3MDVjMThmMmFlOTQ2MWI4MzEzNzYiCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWtlcm5lbC9jcnlwdG9kZXYvZmlsZXMvMDZkNmI1NjBjNmU0NWRjMzE3ZGFlNDdjNzQ3MDZmYTQzZjRhMzFkOC5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMta2VybmVsL2NyeXB0b2Rldi9maWxlcy8wNmQ2YjU2MGM2ZTQ1ZGMzMTdkYWU0N2M3NDcwNmZhNDNmNGEzMWQ4LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNiNTU2ZTEKLS0tIC9kZXYvbnVsbAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWtlcm5lbC9jcnlwdG9kZXYvZmlsZXMvMDZkNmI1NjBjNmU0NWRjMzE3ZGFlNDdjNzQ3MDZmYTQzZjRhMzFkOC5wYXRjaApAQCAtMCwwICsxLDU0IEBACitGcm9tIGYxNGI0NzA2YjBkMDQ5ODhlN2U1YmM4YzRkMmFlZmVmOWYwMjlkOWQgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBNaWNoYWVsIFdlaXNlciA8bWljaGFlbC53ZWlzZXJAZ214LmRlPgorRGF0ZTogRnJpLCA1IEF1ZyAyMDE2IDE4OjQzOjU1ICswMjAwCitTdWJqZWN0OiBbUEFUQ0hdIEFkanVzdCB0byByZWNlbnQgdXNlciBwYWdlIEFQSSBjaGFuZ2VzCisKKzQuNi4wIGJhc2ljYWxseSByZW5hbWVkIGdldF91c2VyX3BhZ2VzKCkgdG8gZ2V0X3VzZXJfcGFnZXNfcmVtb3RlKCkgYW5kCitpbnRyb2R1Y2VkIGEgbmV3IGdldF91c2VyX3BhZ2VzKCkgdGhhdCBhbHdheXMgd29ya3Mgb24gdGhlIGN1cnJlbnQKK3Rhc2suWzFdIERpc3Rpbmd1aXNoIHRoZSB0d28gQVBJcyBiYXNlZCBvbiBrZXJuZWwgdmVyc2lvbiB3ZSdyZQorY29tcGlsaW5nIGZvci4KKworQWxzbywgdGhlcmUgc2VlbXMgdG8gaGF2ZSBiZWVuIGEgbWFzc2l2ZSBjbGVhbnNpbmcgb2YKK3BhZ2VfY2FjaGVfcmVsZWFzZShwYWdlKSBpbiBmYXZvdXIgb2YgcHV0X3BhZ2UocGFnZSlbMl0gd2hpY2ggd2FzIGFuCithbGlhcyBmb3IgcHV0X3BhZ2UocGFnZSlbM10gc2luY2UgMi42LjAuIEJlZm9yZSB0aGF0IGJlZ2lubmluZyB3aXRoCisyLjQuMCBib3RoIHBhZ2VfY2FjaGVfcmVsZWFzZShwYWdlKSBhbmQgcHV0X3BhZ2UocGFnZSkgaGF2ZSBiZWVuIGFsaWFzZXMKK2ZvciBfX2ZyZWVfcGFnZShwYWdlKS4gU28gdXNpbmcgcHV0X3BhZ2UoKSBpbnN0ZWFkIG9mCitwYWdlX2NhY2hlX3JlbGVhc2UocGFnZSkgd2lsbCBwcm9kdWNlIGlkZW50aWNhbCBjb2RlIGZvciBhbnl0aGluZyBhZnRlcgorMi40LjAuCisKK1sxXSBodHRwczovL2xrbWwub3JnL2xrbWwvMjAxNi8yLzEwLzU1NQorWzJdIGh0dHBzOi8vd3d3LnNwaW5pY3MubmV0L2xpc3RzL2xpbnV4LWZzZGV2ZWwvbXNnOTU5MjMuaHRtbAorWzNdIGh0dHBzOi8vd3d3LnNwaW5pY3MubmV0L2xpc3RzL2xpbnV4LWZzZGV2ZWwvbXNnOTU5MjIuaHRtbAorLS0tCisgemMuYyB8IDkgKysrKysrKy0tCisgMSBmaWxlIGNoYW5nZWQsIDcgaW5zZXJ0aW9ucygrKSwgMiBkZWxldGlvbnMoLSkKKworVXBzdHJlYW0tU3RhdHVzOiBCYWNrcG9ydCBbZnJvbSBtYXN0ZXIgZm9yIDQuOCBrZXJuZWxzXQorCitJbmRleDogY3J5cHRvZGV2LWxpbnV4LTEuOC96Yy5jCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gY3J5cHRvZGV2LWxpbnV4LTEuOC5vcmlnL3pjLmMKKysrKyBjcnlwdG9kZXYtbGludXgtMS44L3pjLmMKK0BAIC01OSw3ICs1OSwxMiBAQCBpbnQgX19nZXRfdXNlcmJ1Zih1aW50OF90IF9fdXNlciAqYWRkciwKKyAJfQorIAorIAlkb3duX3JlYWQoJm1tLT5tbWFwX3NlbSk7CistCXJldCA9IGdldF91c2VyX3BhZ2VzKHRhc2ssIG1tLAorKyNpZiAoTElOVVhfVkVSU0lPTl9DT0RFID49IEtFUk5FTF9WRVJTSU9OKDQsIDYsIDApKQorKwlyZXQgPSBnZXRfdXNlcl9wYWdlc19yZW1vdGUoCisrI2Vsc2UKKysJcmV0ID0gZ2V0X3VzZXJfcGFnZXMoCisrI2VuZGlmCisrCQkJdGFzaywgbW0sCisgCQkJKHVuc2lnbmVkIGxvbmcpYWRkciwgcGdjb3VudCwgd3JpdGUsIDAsIHBnLCBOVUxMKTsKKyAJdXBfcmVhZCgmbW0tPm1tYXBfc2VtKTsKKyAJaWYgKHJldCAhPSBwZ2NvdW50KQorQEAgLTExOSw3ICsxMjQsNyBAQCB2b2lkIHJlbGVhc2VfdXNlcl9wYWdlcyhzdHJ1Y3QgY3Nlc3Npb24KKyAJCWVsc2UKKyAJCQlzZXMtPnJlYWRvbmx5X3BhZ2VzLS07CisgCistCQlwYWdlX2NhY2hlX3JlbGVhc2Uoc2VzLT5wYWdlc1tpXSk7CisrCQlwdXRfcGFnZShzZXMtPnBhZ2VzW2ldKTsKKyAJfQorIAlzZXMtPnVzZWRfcGFnZXMgPSAwOworIH0KZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMta2VybmVsL2NyeXB0b2Rldi9maWxlcy9jYjE4NmY2ODI2NzkzODNlOGI1ODA2MjQwOTI3OTAzNzMwY2U4NWQ5LnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1rZXJuZWwvY3J5cHRvZGV2L2ZpbGVzL2NiMTg2ZjY4MjY3OTM4M2U4YjU4MDYyNDA5Mjc5MDM3MzBjZTg1ZDkucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWIwZWFiNgotLS0gL2Rldi9udWxsCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMta2VybmVsL2NyeXB0b2Rldi9maWxlcy9jYjE4NmY2ODI2NzkzODNlOGI1ODA2MjQwOTI3OTAzNzMwY2U4NWQ5LnBhdGNoCkBAIC0wLDAgKzEsMjc5IEBACitGcm9tIGNiMTg2ZjY4MjY3OTM4M2U4YjU4MDYyNDA5Mjc5MDM3MzBjZTg1ZDkgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBNaWNoYWVsIFdlaXNlciA8bWljaGFlbC53ZWlzZXJAZ214LmRlPgorRGF0ZTogRnJpLCA1IEF1ZyAyMDE2IDE3OjI2OjI3ICswMjAwCitTdWJqZWN0OiBbUEFUQ0hdIFN1cHBvcnQgc2tjaXBoZXIgaW4gYWRkaXRpb24gdG8gYWJsa2NpcGhlciBBUEkKKworVGhlIGFibGtjaXBoZXIgQVBJIGlzIGJlaW5nIHBoYXNlZCBvdXRbMV0uIFRoZSB1bmlmaWVkIHNrY2lwaGVyIEFQSQorc2VlbXMgdG8gaGF2ZSBtYWRlIGl0cyBlbnRyeSB3aXRoIDQuMy5bMywgNF0gQnkgd2hhdCBjYW4gYmUgc2VlbiBmcm9tCittaWdyYXRpb24gcGF0Y2hlc1sxLmZmLl0sIGl0J3MgYSBkcm9wLWluIHJlcGxhY2VtZW50LgorCitBbHNvLCBkZWFsbG9jYXRvcnMgc3VjaCBhcyBjcnlwdG9fZnJlZV9za2NpcGhlcigpIGFyZSBOVUxMLXNhZmUgbm93WzJdLgorCitBZGQgYSBuZXcgaGVhZGVyIGNpcGhlcmFwaS5oIHRvIGFpZCBtaWdyYXRpb24gZnJvbSBhYmxrY2lwaGVyIHRvIHNrY2lwaGVyIGFuZAorcmV0YWluIHN1cHBvcnQgZm9yIG9sZCBrZXJuZWxzLiBNYWtlIGl0IGRlY2lkZSB3aGljaCBBUEkgdG8gdXNlIGFuZCBwcm92aWRlCithcHByb3ByaWF0ZSBmdW5jdGlvbiBjYWxscyBhbmQgdHlwZSBkZWZpbml0aW9ucy4gU2luY2UgdGhlIGFibGtjaXBoZXIgYW5kCitza2NpcGhlciBBUElzIGFyZSBzbyBzaW1pbGFyLCB0aG9zZSBhcmUgbWFpbmx5IGRlZmluZXMgZm9yIGNvcnJlc3BvbmRpbmcKK3BzZXVkby1mdW5jdGlvbnMgaW4gbmFtZXNwYWNlIGNyeXB0b2Rldl8gZGVyaXZlZCBkaXJlY3RseSBmcm9tIHRoZWlyIEFQSQorY291bnRlcnBhcnRzLgorCitDb21waWxlcyBhbmQgd29ya3MgKGkuZS4gY2hlY2tzIHBhc3MpIHdpdGggRGViaWFuIHRlc3RpbmcgNC42LjQga2VybmVsCithcyB3ZWxsIGFzIDQuOC1yYzIrIExpbnVzIGdpdCB0cmVlIGFzIG9mIHRvZGF5LiAoQm90aCByZXF1aXJlIGEgZml4IGZvcgorY2hhbmdlZCBwYWdlIGFjY2VzcyBBUElbNV0uKQorCitbMV0gaHR0cHM6Ly93d3cuc3Bpbmljcy5uZXQvbGlzdHMvbGludXgtY3J5cHRvL21zZzE4MTMzLmh0bWwKK1syXSBodHRwczovL3d3dy5zcGluaWNzLm5ldC9saXN0cy9saW51eC1jcnlwdG8vbXNnMTgxNTQuaHRtbCwgbGluZSAxMjAKK1szXSBodHRwczovL3d3dy5zcGluaWNzLm5ldC9saXN0cy9saW51eC1jcnlwdG8vbXNnMTYzNzMuaHRtbAorWzRdIGh0dHBzOi8vd3d3LnNwaW5pY3MubmV0L2xpc3RzL2xpbnV4LWNyeXB0by9tc2cxNjI5NC5odG1sCitbNV0gaHR0cHM6Ly9naXRodWIuY29tL2NyeXB0b2Rldi1saW51eC9jcnlwdG9kZXYtbGludXgvcHVsbC8xNAorLS0tCisgY2lwaGVyYXBpLmggfCA2MCArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysKKyBjcnlwdGxpYi5jICB8IDQwICsrKysrKysrKysrKysrKysrKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBjcnlwdGxpYi5oICB8ICA2ICsrKystLQorIGlvY3RsLmMgICAgIHwgIDQgKystLQorIDQgZmlsZXMgY2hhbmdlZCwgODQgaW5zZXJ0aW9ucygrKSwgMjYgZGVsZXRpb25zKC0pCisgY3JlYXRlIG1vZGUgMTAwNjQ0IGNpcGhlcmFwaS5oCisKK1Vwc3RyZWFtLVN0YXR1czogQmFja3BvcnQgW2Zyb20gbWFzdGVyIGZvciA0Ljgga2VybmVsc10KKworSW5kZXg6IGNyeXB0b2Rldi1saW51eC0xLjgvY2lwaGVyYXBpLmgKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSAvZGV2L251bGwKKysrKyBjcnlwdG9kZXYtbGludXgtMS44L2NpcGhlcmFwaS5oCitAQCAtMCwwICsxLDYwIEBACisrI2lmbmRlZiBDSVBIRVJBUElfSAorKyMgZGVmaW5lIENJUEhFUkFQSV9ICisrCisrI2luY2x1ZGUgPGxpbnV4L3ZlcnNpb24uaD4KKysKKysjaWYgKExJTlVYX1ZFUlNJT05fQ09ERSA8IEtFUk5FTF9WRVJTSU9OKDQsIDgsIDApKQorKyMgaW5jbHVkZSA8bGludXgvY3J5cHRvLmg+CisrCisrdHlwZWRlZiBzdHJ1Y3QgYWJsa2NpcGhlcl9hbGcgY3J5cHRvZGV2X2Jsa2NpcGhlcl9hbGdfdDsKKyt0eXBlZGVmIHN0cnVjdCBjcnlwdG9fYWJsa2NpcGhlciBjcnlwdG9kZXZfY3J5cHRvX2Jsa2NpcGhlcl90OworK3R5cGVkZWYgc3RydWN0IGFibGtjaXBoZXJfcmVxdWVzdCBjcnlwdG9kZXZfYmxrY2lwaGVyX3JlcXVlc3RfdDsKKysKKysjIGRlZmluZSBjcnlwdG9kZXZfY3J5cHRvX2FsbG9jX2Jsa2NpcGhlciBjcnlwdG9fYWxsb2NfYWJsa2NpcGhlcgorKyMgZGVmaW5lIGNyeXB0b2Rldl9jcnlwdG9fYmxrY2lwaGVyX2FsZyBjcnlwdG9fYWJsa2NpcGhlcl9hbGcKKysjIGRlZmluZSBjcnlwdG9kZXZfY3J5cHRvX2Jsa2NpcGhlcl9ibG9ja3NpemUgY3J5cHRvX2FibGtjaXBoZXJfYmxvY2tzaXplCisrIyBkZWZpbmUgY3J5cHRvZGV2X2NyeXB0b19ibGtjaXBoZXJfaXZzaXplIGNyeXB0b19hYmxrY2lwaGVyX2l2c2l6ZQorKyMgZGVmaW5lIGNyeXB0b2Rldl9jcnlwdG9fYmxrY2lwaGVyX2FsaWdubWFzayBjcnlwdG9fYWJsa2NpcGhlcl9hbGlnbm1hc2sKKysjIGRlZmluZSBjcnlwdG9kZXZfY3J5cHRvX2Jsa2NpcGhlcl9zZXRrZXkgY3J5cHRvX2FibGtjaXBoZXJfc2V0a2V5CisrCisrc3RhdGljIGlubGluZSB2b2lkIGNyeXB0b2Rldl9jcnlwdG9fZnJlZV9ibGtjaXBoZXIoY3J5cHRvZGV2X2NyeXB0b19ibGtjaXBoZXJfdCAqYykgeworKwlpZiAoYykKKysJCWNyeXB0b19mcmVlX2FibGtjaXBoZXIoYyk7CisrfQorKworKyMgZGVmaW5lIGNyeXB0b2Rldl9ibGtjaXBoZXJfcmVxdWVzdF9hbGxvYyBhYmxrY2lwaGVyX3JlcXVlc3RfYWxsb2MKKysjIGRlZmluZSBjcnlwdG9kZXZfYmxrY2lwaGVyX3JlcXVlc3Rfc2V0X2NhbGxiYWNrIGFibGtjaXBoZXJfcmVxdWVzdF9zZXRfY2FsbGJhY2sKKysKKytzdGF0aWMgaW5saW5lIHZvaWQgY3J5cHRvZGV2X2Jsa2NpcGhlcl9yZXF1ZXN0X2ZyZWUoY3J5cHRvZGV2X2Jsa2NpcGhlcl9yZXF1ZXN0X3QgKnIpIHsKKysJaWYgKHIpCisrCQlhYmxrY2lwaGVyX3JlcXVlc3RfZnJlZShyKTsKKyt9CisrCisrIyBkZWZpbmUgY3J5cHRvZGV2X2Jsa2NpcGhlcl9yZXF1ZXN0X3NldF9jcnlwdCBhYmxrY2lwaGVyX3JlcXVlc3Rfc2V0X2NyeXB0CisrIyBkZWZpbmUgY3J5cHRvZGV2X2NyeXB0b19ibGtjaXBoZXJfZW5jcnlwdCBjcnlwdG9fYWJsa2NpcGhlcl9lbmNyeXB0CisrIyBkZWZpbmUgY3J5cHRvZGV2X2NyeXB0b19ibGtjaXBoZXJfZGVjcnlwdCBjcnlwdG9fYWJsa2NpcGhlcl9kZWNyeXB0CisrIyBkZWZpbmUgY3J5cHRvZGV2X2NyeXB0b19ibGtjaXBoZXJfdGZtIGNyeXB0b19hYmxrY2lwaGVyX3RmbQorKyNlbHNlCisrI2luY2x1ZGUgPGNyeXB0by9za2NpcGhlci5oPgorKworK3R5cGVkZWYgc3RydWN0IHNrY2lwaGVyX2FsZyBjcnlwdG9kZXZfYmxrY2lwaGVyX2FsZ190OworK3R5cGVkZWYgc3RydWN0IGNyeXB0b19za2NpcGhlciBjcnlwdG9kZXZfY3J5cHRvX2Jsa2NpcGhlcl90OworK3R5cGVkZWYgc3RydWN0IHNrY2lwaGVyX3JlcXVlc3QgY3J5cHRvZGV2X2Jsa2NpcGhlcl9yZXF1ZXN0X3Q7CisrCisrIyBkZWZpbmUgY3J5cHRvZGV2X2NyeXB0b19hbGxvY19ibGtjaXBoZXIgY3J5cHRvX2FsbG9jX3NrY2lwaGVyCisrIyBkZWZpbmUgY3J5cHRvZGV2X2NyeXB0b19ibGtjaXBoZXJfYWxnIGNyeXB0b19za2NpcGhlcl9hbGcKKysjIGRlZmluZSBjcnlwdG9kZXZfY3J5cHRvX2Jsa2NpcGhlcl9ibG9ja3NpemUgY3J5cHRvX3NrY2lwaGVyX2Jsb2Nrc2l6ZQorKyMgZGVmaW5lIGNyeXB0b2Rldl9jcnlwdG9fYmxrY2lwaGVyX2l2c2l6ZSBjcnlwdG9fc2tjaXBoZXJfaXZzaXplCisrIyBkZWZpbmUgY3J5cHRvZGV2X2NyeXB0b19ibGtjaXBoZXJfYWxpZ25tYXNrIGNyeXB0b19za2NpcGhlcl9hbGlnbm1hc2sKKysjIGRlZmluZSBjcnlwdG9kZXZfY3J5cHRvX2Jsa2NpcGhlcl9zZXRrZXkgY3J5cHRvX3NrY2lwaGVyX3NldGtleQorKyMgZGVmaW5lIGNyeXB0b2Rldl9jcnlwdG9fZnJlZV9ibGtjaXBoZXIgY3J5cHRvX2ZyZWVfc2tjaXBoZXIKKysjIGRlZmluZSBjcnlwdG9kZXZfYmxrY2lwaGVyX3JlcXVlc3RfYWxsb2Mgc2tjaXBoZXJfcmVxdWVzdF9hbGxvYworKyMgZGVmaW5lIGNyeXB0b2Rldl9ibGtjaXBoZXJfcmVxdWVzdF9zZXRfY2FsbGJhY2sgc2tjaXBoZXJfcmVxdWVzdF9zZXRfY2FsbGJhY2sKKysjIGRlZmluZSBjcnlwdG9kZXZfYmxrY2lwaGVyX3JlcXVlc3RfZnJlZSBza2NpcGhlcl9yZXF1ZXN0X2ZyZWUKKysjIGRlZmluZSBjcnlwdG9kZXZfYmxrY2lwaGVyX3JlcXVlc3Rfc2V0X2NyeXB0IHNrY2lwaGVyX3JlcXVlc3Rfc2V0X2NyeXB0CisrIyBkZWZpbmUgY3J5cHRvZGV2X2NyeXB0b19ibGtjaXBoZXJfZW5jcnlwdCBjcnlwdG9fc2tjaXBoZXJfZW5jcnlwdAorKyMgZGVmaW5lIGNyeXB0b2Rldl9jcnlwdG9fYmxrY2lwaGVyX2RlY3J5cHQgY3J5cHRvX3NrY2lwaGVyX2RlY3J5cHQKKysjIGRlZmluZSBjcnlwdG9kZXZfY3J5cHRvX2Jsa2NpcGhlcl90Zm0gY3J5cHRvX3NrY2lwaGVyX3RmbQorKyNlbmRpZgorKworKyNlbmRpZgorSW5kZXg6IGNyeXB0b2Rldi1saW51eC0xLjgvY3J5cHRsaWIuYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGNyeXB0b2Rldi1saW51eC0xLjgub3JpZy9jcnlwdGxpYi5jCisrKysgY3J5cHRvZGV2LWxpbnV4LTEuOC9jcnlwdGxpYi5jCitAQCAtMjMsNyArMjMsNiBAQAorICAqIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEsIFVTQS4KKyAgKi8KKyAKKy0jaW5jbHVkZSA8bGludXgvY3J5cHRvLmg+CisgI2luY2x1ZGUgPGxpbnV4L21tLmg+CisgI2luY2x1ZGUgPGxpbnV4L2hpZ2htZW0uaD4KKyAjaW5jbHVkZSA8bGludXgvaW9jdGwuaD4KK0BAIC0zNyw2ICszNiw3IEBACisgI2luY2x1ZGUgPGxpbnV4L3J0bmV0bGluay5oPgorICNpbmNsdWRlIDxjcnlwdG8vYXV0aGVuYy5oPgorICNpbmNsdWRlICJjcnlwdG9kZXZfaW50LmgiCisrI2luY2x1ZGUgImNpcGhlcmFwaS5oIgorIAorIAorIHN0cnVjdCBjcnlwdG9kZXZfcmVzdWx0IHsKK0BAIC0xMzMsMTUgKzEzMywxNSBAQCBpbnQgY3J5cHRvZGV2X2NpcGhlcl9pbml0KHN0cnVjdCBjaXBoZXJfCisgCWludCByZXQ7CisgCisgCWlmIChhZWFkID09IDApIHsKKy0JCXN0cnVjdCBhYmxrY2lwaGVyX2FsZyAqYWxnOworKwkJY3J5cHRvZGV2X2Jsa2NpcGhlcl9hbGdfdCAqYWxnOworIAorLQkJb3V0LT5hc3luYy5zID0gY3J5cHRvX2FsbG9jX2FibGtjaXBoZXIoYWxnX25hbWUsIDAsIDApOworKwkJb3V0LT5hc3luYy5zID0gY3J5cHRvZGV2X2NyeXB0b19hbGxvY19ibGtjaXBoZXIoYWxnX25hbWUsIDAsIDApOworIAkJaWYgKHVubGlrZWx5KElTX0VSUihvdXQtPmFzeW5jLnMpKSkgeworIAkJCWRkZWJ1ZygxLCAiRmFpbGVkIHRvIGxvYWQgY2lwaGVyICVzIiwgYWxnX25hbWUpOworIAkJCQlyZXR1cm4gLUVJTlZBTDsKKyAJCX0KKyAKKy0JCWFsZyA9IGNyeXB0b19hYmxrY2lwaGVyX2FsZyhvdXQtPmFzeW5jLnMpOworKwkJYWxnID0gY3J5cHRvZGV2X2NyeXB0b19ibGtjaXBoZXJfYWxnKG91dC0+YXN5bmMucyk7CisgCQlpZiAoYWxnICE9IE5VTEwpIHsKKyAJCQkvKiBXYXMgY29ycmVjdCBrZXkgbGVuZ3RoIHN1cHBsaWVkPyAqLworIAkJCWlmIChhbGctPm1heF9rZXlzaXplID4gMCAmJgorQEAgLTE1NCwxMSArMTU0LDExIEBAIGludCBjcnlwdG9kZXZfY2lwaGVyX2luaXQoc3RydWN0IGNpcGhlcl8KKyAJCQl9CisgCQl9CisgCistCQlvdXQtPmJsb2Nrc2l6ZSA9IGNyeXB0b19hYmxrY2lwaGVyX2Jsb2Nrc2l6ZShvdXQtPmFzeW5jLnMpOworLQkJb3V0LT5pdnNpemUgPSBjcnlwdG9fYWJsa2NpcGhlcl9pdnNpemUob3V0LT5hc3luYy5zKTsKKy0JCW91dC0+YWxpZ25tYXNrID0gY3J5cHRvX2FibGtjaXBoZXJfYWxpZ25tYXNrKG91dC0+YXN5bmMucyk7CisrCQlvdXQtPmJsb2Nrc2l6ZSA9IGNyeXB0b2Rldl9jcnlwdG9fYmxrY2lwaGVyX2Jsb2Nrc2l6ZShvdXQtPmFzeW5jLnMpOworKwkJb3V0LT5pdnNpemUgPSBjcnlwdG9kZXZfY3J5cHRvX2Jsa2NpcGhlcl9pdnNpemUob3V0LT5hc3luYy5zKTsKKysJCW91dC0+YWxpZ25tYXNrID0gY3J5cHRvZGV2X2NyeXB0b19ibGtjaXBoZXJfYWxpZ25tYXNrKG91dC0+YXN5bmMucyk7CisgCistCQlyZXQgPSBjcnlwdG9fYWJsa2NpcGhlcl9zZXRrZXkob3V0LT5hc3luYy5zLCBrZXlwLCBrZXlsZW4pOworKwkJcmV0ID0gY3J5cHRvZGV2X2NyeXB0b19ibGtjaXBoZXJfc2V0a2V5KG91dC0+YXN5bmMucywga2V5cCwga2V5bGVuKTsKKyAJfSBlbHNlIHsKKyAJCW91dC0+YXN5bmMuYXMgPSBjcnlwdG9fYWxsb2NfYWVhZChhbGdfbmFtZSwgMCwgMCk7CisgCQlpZiAodW5saWtlbHkoSVNfRVJSKG91dC0+YXN5bmMuYXMpKSkgeworQEAgLTE5MSwxNCArMTkxLDE0IEBAIGludCBjcnlwdG9kZXZfY2lwaGVyX2luaXQoc3RydWN0IGNpcGhlcl8KKyAJaW5pdF9jb21wbGV0aW9uKCZvdXQtPmFzeW5jLnJlc3VsdC0+Y29tcGxldGlvbik7CisgCisgCWlmIChhZWFkID09IDApIHsKKy0JCW91dC0+YXN5bmMucmVxdWVzdCA9IGFibGtjaXBoZXJfcmVxdWVzdF9hbGxvYyhvdXQtPmFzeW5jLnMsIEdGUF9LRVJORUwpOworKwkJb3V0LT5hc3luYy5yZXF1ZXN0ID0gY3J5cHRvZGV2X2Jsa2NpcGhlcl9yZXF1ZXN0X2FsbG9jKG91dC0+YXN5bmMucywgR0ZQX0tFUk5FTCk7CisgCQlpZiAodW5saWtlbHkoIW91dC0+YXN5bmMucmVxdWVzdCkpIHsKKyAJCQlkZXJyKDEsICJlcnJvciBhbGxvY2F0aW5nIGFzeW5jIGNyeXB0byByZXF1ZXN0Iik7CisgCQkJcmV0ID0gLUVOT01FTTsKKyAJCQlnb3RvIGVycm9yOworIAkJfQorIAorLQkJYWJsa2NpcGhlcl9yZXF1ZXN0X3NldF9jYWxsYmFjayhvdXQtPmFzeW5jLnJlcXVlc3QsCisrCQljcnlwdG9kZXZfYmxrY2lwaGVyX3JlcXVlc3Rfc2V0X2NhbGxiYWNrKG91dC0+YXN5bmMucmVxdWVzdCwKKyAJCQkJCUNSWVBUT19URk1fUkVRX01BWV9CQUNLTE9HLAorIAkJCQkJY3J5cHRvZGV2X2NvbXBsZXRlLCBvdXQtPmFzeW5jLnJlc3VsdCk7CisgCX0gZWxzZSB7CitAQCAtMjE4LDEwICsyMTgsOCBAQCBpbnQgY3J5cHRvZGV2X2NpcGhlcl9pbml0KHN0cnVjdCBjaXBoZXJfCisgCXJldHVybiAwOworIGVycm9yOgorIAlpZiAoYWVhZCA9PSAwKSB7CistCQlpZiAob3V0LT5hc3luYy5yZXF1ZXN0KQorLQkJCWFibGtjaXBoZXJfcmVxdWVzdF9mcmVlKG91dC0+YXN5bmMucmVxdWVzdCk7CistCQlpZiAob3V0LT5hc3luYy5zKQorLQkJCWNyeXB0b19mcmVlX2FibGtjaXBoZXIob3V0LT5hc3luYy5zKTsKKysJCWNyeXB0b2Rldl9ibGtjaXBoZXJfcmVxdWVzdF9mcmVlKG91dC0+YXN5bmMucmVxdWVzdCk7CisrCQljcnlwdG9kZXZfY3J5cHRvX2ZyZWVfYmxrY2lwaGVyKG91dC0+YXN5bmMucyk7CisgCX0gZWxzZSB7CisgCQlpZiAob3V0LT5hc3luYy5hcmVxdWVzdCkKKyAJCQlhZWFkX3JlcXVlc3RfZnJlZShvdXQtPmFzeW5jLmFyZXF1ZXN0KTsKK0BAIC0yMzcsMTAgKzIzNSw4IEBAIHZvaWQgY3J5cHRvZGV2X2NpcGhlcl9kZWluaXQoc3RydWN0IGNpcGgKKyB7CisgCWlmIChjZGF0YS0+aW5pdCkgeworIAkJaWYgKGNkYXRhLT5hZWFkID09IDApIHsKKy0JCQlpZiAoY2RhdGEtPmFzeW5jLnJlcXVlc3QpCistCQkJCWFibGtjaXBoZXJfcmVxdWVzdF9mcmVlKGNkYXRhLT5hc3luYy5yZXF1ZXN0KTsKKy0JCQlpZiAoY2RhdGEtPmFzeW5jLnMpCistCQkJCWNyeXB0b19mcmVlX2FibGtjaXBoZXIoY2RhdGEtPmFzeW5jLnMpOworKwkJCWNyeXB0b2Rldl9ibGtjaXBoZXJfcmVxdWVzdF9mcmVlKGNkYXRhLT5hc3luYy5yZXF1ZXN0KTsKKysJCQljcnlwdG9kZXZfY3J5cHRvX2ZyZWVfYmxrY2lwaGVyKGNkYXRhLT5hc3luYy5zKTsKKyAJCX0gZWxzZSB7CisgCQkJaWYgKGNkYXRhLT5hc3luYy5hcmVxdWVzdCkKKyAJCQkJYWVhZF9yZXF1ZXN0X2ZyZWUoY2RhdGEtPmFzeW5jLmFyZXF1ZXN0KTsKK0BAIC0yODksMTAgKzI4NSwxMCBAQCBzc2l6ZV90IGNyeXB0b2Rldl9jaXBoZXJfZW5jcnlwdChzdHJ1Y3QKKyAJcmVpbml0X2NvbXBsZXRpb24oJmNkYXRhLT5hc3luYy5yZXN1bHQtPmNvbXBsZXRpb24pOworIAorIAlpZiAoY2RhdGEtPmFlYWQgPT0gMCkgeworLQkJYWJsa2NpcGhlcl9yZXF1ZXN0X3NldF9jcnlwdChjZGF0YS0+YXN5bmMucmVxdWVzdCwKKysJCWNyeXB0b2Rldl9ibGtjaXBoZXJfcmVxdWVzdF9zZXRfY3J5cHQoY2RhdGEtPmFzeW5jLnJlcXVlc3QsCisgCQkJKHN0cnVjdCBzY2F0dGVybGlzdCAqKXNyYywgZHN0LAorIAkJCWxlbiwgY2RhdGEtPmFzeW5jLml2KTsKKy0JCXJldCA9IGNyeXB0b19hYmxrY2lwaGVyX2VuY3J5cHQoY2RhdGEtPmFzeW5jLnJlcXVlc3QpOworKwkJcmV0ID0gY3J5cHRvZGV2X2NyeXB0b19ibGtjaXBoZXJfZW5jcnlwdChjZGF0YS0+YXN5bmMucmVxdWVzdCk7CisgCX0gZWxzZSB7CisgCQlhZWFkX3JlcXVlc3Rfc2V0X2NyeXB0KGNkYXRhLT5hc3luYy5hcmVxdWVzdCwKKyAJCQkoc3RydWN0IHNjYXR0ZXJsaXN0ICopc3JjLCBkc3QsCitAQCAtMzExLDEwICszMDcsMTAgQEAgc3NpemVfdCBjcnlwdG9kZXZfY2lwaGVyX2RlY3J5cHQoc3RydWN0CisgCisgCXJlaW5pdF9jb21wbGV0aW9uKCZjZGF0YS0+YXN5bmMucmVzdWx0LT5jb21wbGV0aW9uKTsKKyAJaWYgKGNkYXRhLT5hZWFkID09IDApIHsKKy0JCWFibGtjaXBoZXJfcmVxdWVzdF9zZXRfY3J5cHQoY2RhdGEtPmFzeW5jLnJlcXVlc3QsCisrCQljcnlwdG9kZXZfYmxrY2lwaGVyX3JlcXVlc3Rfc2V0X2NyeXB0KGNkYXRhLT5hc3luYy5yZXF1ZXN0LAorIAkJCShzdHJ1Y3Qgc2NhdHRlcmxpc3QgKilzcmMsIGRzdCwKKyAJCQlsZW4sIGNkYXRhLT5hc3luYy5pdik7CistCQlyZXQgPSBjcnlwdG9fYWJsa2NpcGhlcl9kZWNyeXB0KGNkYXRhLT5hc3luYy5yZXF1ZXN0KTsKKysJCXJldCA9IGNyeXB0b2Rldl9jcnlwdG9fYmxrY2lwaGVyX2RlY3J5cHQoY2RhdGEtPmFzeW5jLnJlcXVlc3QpOworIAl9IGVsc2UgeworIAkJYWVhZF9yZXF1ZXN0X3NldF9jcnlwdChjZGF0YS0+YXN5bmMuYXJlcXVlc3QsCisgCQkJKHN0cnVjdCBzY2F0dGVybGlzdCAqKXNyYywgZHN0LAorSW5kZXg6IGNyeXB0b2Rldi1saW51eC0xLjgvY3J5cHRsaWIuaAorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGNyeXB0b2Rldi1saW51eC0xLjgub3JpZy9jcnlwdGxpYi5oCisrKysgY3J5cHRvZGV2LWxpbnV4LTEuOC9jcnlwdGxpYi5oCitAQCAtMyw2ICszLDggQEAKKyAKKyAjaW5jbHVkZSA8bGludXgvdmVyc2lvbi5oPgorIAorKyNpbmNsdWRlICJjaXBoZXJhcGkuaCIKKysKKyBzdHJ1Y3QgY2lwaGVyX2RhdGEgeworIAlpbnQgaW5pdDsgLyogMCB1bmluaXRpYWxpemVkICovCisgCWludCBibG9ja3NpemU7CitAQCAtMTIsOCArMTQsOCBAQCBzdHJ1Y3QgY2lwaGVyX2RhdGEgeworIAlpbnQgYWxpZ25tYXNrOworIAlzdHJ1Y3QgeworIAkJLyogYmxvY2sgY2lwaGVycyAqLworLQkJc3RydWN0IGNyeXB0b19hYmxrY2lwaGVyICpzOworLQkJc3RydWN0IGFibGtjaXBoZXJfcmVxdWVzdCAqcmVxdWVzdDsKKysJCWNyeXB0b2Rldl9jcnlwdG9fYmxrY2lwaGVyX3QgKnM7CisrCQljcnlwdG9kZXZfYmxrY2lwaGVyX3JlcXVlc3RfdCAqcmVxdWVzdDsKKyAKKyAJCS8qIEFFQUQgY2lwaGVycyAqLworIAkJc3RydWN0IGNyeXB0b19hZWFkICphczsKK0luZGV4OiBjcnlwdG9kZXYtbGludXgtMS44L2lvY3RsLmMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBjcnlwdG9kZXYtbGludXgtMS44Lm9yaWcvaW9jdGwuYworKysrIGNyeXB0b2Rldi1saW51eC0xLjgvaW9jdGwuYworQEAgLTM0LDcgKzM0LDYgQEAKKyAgKi8KKyAKKyAjaW5jbHVkZSA8Y3J5cHRvL2hhc2guaD4KKy0jaW5jbHVkZSA8bGludXgvY3J5cHRvLmg+CisgI2luY2x1ZGUgPGxpbnV4L21tLmg+CisgI2luY2x1ZGUgPGxpbnV4L2hpZ2htZW0uaD4KKyAjaW5jbHVkZSA8bGludXgvaW9jdGwuaD4KK0BAIC01Myw2ICs1Miw3IEBACisgI2luY2x1ZGUgImNyeXB0b2Rldl9pbnQuaCIKKyAjaW5jbHVkZSAiemMuaCIKKyAjaW5jbHVkZSAidmVyc2lvbi5oIgorKyNpbmNsdWRlICJjaXBoZXJhcGkuaCIKKyAKKyBNT0RVTEVfQVVUSE9SKCJOaWtvcyBNYXZyb2dpYW5ub3BvdWxvcyA8bm1hdkBnbnV0bHMub3JnPiIpOworIE1PRFVMRV9ERVNDUklQVElPTigiQ3J5cHRvRGV2IGRyaXZlciIpOworQEAgLTc2NSw3ICs3NjUsNyBAQCBzdGF0aWMgaW50IGdldF9zZXNzaW9uX2luZm8oc3RydWN0IGZjcnlwCisgCisgCWlmIChzZXNfcHRyLT5jZGF0YS5pbml0KSB7CisgCQlpZiAoc2VzX3B0ci0+Y2RhdGEuYWVhZCA9PSAwKQorLQkJCXRmbSA9IGNyeXB0b19hYmxrY2lwaGVyX3RmbShzZXNfcHRyLT5jZGF0YS5hc3luYy5zKTsKKysJCQl0Zm0gPSBjcnlwdG9kZXZfY3J5cHRvX2Jsa2NpcGhlcl90Zm0oc2VzX3B0ci0+Y2RhdGEuYXN5bmMucyk7CisgCQllbHNlCisgCQkJdGZtID0gY3J5cHRvX2FlYWRfdGZtKHNlc19wdHItPmNkYXRhLmFzeW5jLmFzKTsKKyAJCXRmbV9pbmZvX3RvX2FsZ19pbmZvKCZzaW9wLT5jaXBoZXJfaW5mbywgdGZtKTsKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMta2VybmVsL2tlcm4tdG9vbHMva2Vybi10b29scy1uYXRpdmVfZ2l0LmJiIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1rZXJuZWwva2Vybi10b29scy9rZXJuLXRvb2xzLW5hdGl2ZV9naXQuYmIKaW5kZXggNDQ1ZDAzYS4uZDgwNDFkZCAxMDA2NDQKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1rZXJuZWwva2Vybi10b29scy9rZXJuLXRvb2xzLW5hdGl2ZV9naXQuYmIKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1rZXJuZWwva2Vybi10b29scy9rZXJuLXRvb2xzLW5hdGl2ZV9naXQuYmIKQEAgLTEsMTAgKzEsMTAgQEAKIFNVTU1BUlkgPSAiVG9vbHMgZm9yIG1hbmFnaW5nIFlvY3RvIFByb2plY3Qgc3R5bGUgYnJhbmNoZWQga2VybmVscyIKIExJQ0VOU0UgPSAiR1BMdjIiCi1MSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9naXQvdG9vbHMva2dpdDtiZWdpbmxpbmU9NTtlbmRsaW5lPTk7bWQ1PWQ4ZDFkNzI5YTcwY2Q1ZjUyOTcyZjg4ODRiODA3NDNkIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vZ2l0L3Rvb2xzL2tnaXQ7YmVnaW5saW5lPTU7ZW5kbGluZT05O21kNT1hNmMyZmE4YWVmMWJkYTQwMGUyODI4ODQ1YmEwZDA2YyIKIAogREVQRU5EUyA9ICJnaXQtbmF0aXZlIgogCi1TUkNSRVYgPSAiMTdkODlkMTg2MWI1MzJiYmYxYTgxYzFmMDI0OTUzZTQ0MGRiOGRlNyIKK1NSQ1JFViA9ICI5YTM5OTVlZThkYWFiZjM3ZTkyZTFiNTFiMTMzY2Y4NTgyZDg1ODA5IgogUFIgPSAicjEyIgogUFYgPSAiMC4yK2dpdCR7U1JDUFZ9IgogCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWtlcm5lbC9rZXhlYy9rZXhlYy10b29scy5pbmMgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWtlcm5lbC9rZXhlYy9rZXhlYy10b29scy5pbmMKaW5kZXggNzU4YTNhNy4uYmRmZTAyNCAxMDA2NDQKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1rZXJuZWwva2V4ZWMva2V4ZWMtdG9vbHMuaW5jCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMta2VybmVsL2tleGVjL2tleGVjLXRvb2xzLmluYwpAQCAtMjIsNiArMjIsMTAgQEAKIElOU0FORV9TS0lQXyR7UE59ID0gImFyY2giCiAKIGRvX2NvbXBpbGVfcHJlcGVuZCgpIHsKKyAgICAjIFJlbW92ZSB0aGUgcHJlcGFja2FnZWQgY29uZmlnLmggZnJvbSB0aGUgc291cmNlIHRyZWUgYXMgaXQgb3ZlcnJpZGVzCisgICAgIyB0aGUgc2FtZSBmaWxlIGdlbmVyYXRlZCBieSBjb25maWd1cmUgYW5kIHBsYWNlZCBpbiB0aGUgYnVpbGQgdHJlZQorICAgIHJtIC1mICR7U30vaW5jbHVkZS9jb25maWcuaAorCiAgICAgIyBSZW1vdmUgdGhlICcqLmQnIGZpbGUgdG8gbWFrZSBzdXJlIHRoZSByZWNvbXBpbGUgaXMgT0sKICAgICBmb3IgZGVwIGluIGBmaW5kICR7Qn0gLXR5cGUgZiAtbmFtZSAnKi5kJ2A7IGRvCiAgICAgICAgIGRlcF9ub19kPSJgZWNobyAkZGVwIHwgc2VkICdzIy5kJCMjJ2AiCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWtlcm5lbC9rZXhlYy9rZXhlYy10b29scy9rZHVtcCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMta2VybmVsL2tleGVjL2tleGVjLXRvb2xzL2tkdW1wCmluZGV4IDNmYjEzM2YuLjIzNDcyMDUgMTAwNzU1Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMta2VybmVsL2tleGVjL2tleGVjLXRvb2xzL2tkdW1wCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMta2VybmVsL2tleGVjL2tleGVjLXRvb2xzL2tkdW1wCkBAIC04LDIzICs4LDcgQEAKICMKIAogI2RlZmF1bHQKLUtEVU1QX0tWRVI9ImB1bmFtZSAtcmAiCi1LRFVNUF9LSU1BR0U9Ii9ib290L2J6SW1hZ2UtJHtLRFVNUF9LVkVSfSIKLUtEVU1QX0NNRExJTkU9ImBjYXQgL3Byb2MvY21kbGluZWAiCi1LRFVNUF9DTURMSU5FX0FQUEVORD0ia2R1bXBfbmVlZGVkIG1heGNwdXM9MSBpcnFwb2xsIHJlc2V0X2RldmljZXMiCi1LRFVNUF9WTUNPUkVfUEFUSD0iL3Zhci9jcmFzaC9gZGF0ZSArIiVZLSVtLSVkImAiCi0KLSNnZXQgcmlnaHQga2VybmVsIGltYWdlCi1tYXJjaD0iYHVuYW1lIC1tYCIKLWNhc2UgJHttYXJjaH0gaW4KLQl4ODYqfGk/ODYpCi0JCTs7Ci0JCSopCi0JCUtEVU1QX0tJTUFHRT0iL2Jvb3QvdUltYWdlLSR7S0RVTVBfS1ZFUn0iCi0JCTs7Ci1lc2FjCi0KLUtFWEVDPXVzci9zYmluL2tleGVjCitLRVhFQz0vdXNyL3NiaW4va2V4ZWMKIEtFWEVDX0FSR1M9Ii1wIgogCiBNQUtFRFVNUEZJTEU9L3Vzci9iaW4vbWFrZWR1bXBmaWxlCkBAIC0zNCw2ICsxOCw5IEBACiAKIGlmIFsgLWYgL2V0Yy9zeXNjb25maWcva2R1bXAuY29uZiBdOyB0aGVuCiAJLiAvZXRjL3N5c2NvbmZpZy9rZHVtcC5jb25mCitlbHNlCisJZWNobyAibm8gL2V0Yy9zeXNjb25maWcva2R1bXAuY29uZiIKKwlleGl0IDE7CiBmaQogCiBkb19jaGVjaygpCkBAIC00MSwyNCArMjgsMzMgQEAKIAkjY2hlY2sgbWFrZWR1bXBmaWxlCiAJaWYgWyAhIC1lICR7TUFLRURVTVBGSUxFfSAtbyAhIC14ICR7TUFLRURVTVBGSUxFfSBdIDt0aGVuCiAJCWVjaG8gIk5vIG1ha2VkdW1wZmlsZSBmb3VuZC4iCi0JCXJldHVybiAxOworCQlleGl0IDAKIAlmaQogCiAJI2NoZWNrIGtleGVjCiAJaWYgWyAhIC1lICR7S0VYRUN9IC1vICEgLXggJHtLRVhFQ30gXSA7dGhlbgogCQllY2hvICJObyBrZXhlYyBmb3VuZC4iCi0JCXJldHVybiAxOworCQlleGl0IDAKIAlmaQogCiAJI2NoZWNrIHdoZXRoZXIga2R1bXAga2VybmVsIGltYWdlIGV4aXN0cyBvbiB0aGUgc3lzdGVtCi0JaWYgWyAhIC1mICR7S0RVTVBfS0lNQUdFfSBdOyB0aGVuCisJaWYgWyAteiAiJHtLRFVNUF9LSU1BR0V9IiAtbyAhIC1mICIke0tEVU1QX0tJTUFHRX0iIF07IHRoZW4KIAkJZWNobyAiTm8ga2R1bXAga2VybmVsIGltYWdlIGZvdW5kLiIKLQkJcmV0dXJuIDEKKwkJZXhpdCAwCisJZmkKKworCWlmIFsgIiR7S0RVTVBfQ01ETElORX0ieCA9ICJ4IiBdIDsgdGhlbgorCQllY2hvICJLRFVNUF9DTURMSU5FIGlzIG5vdCBjb25maWd1cmVkIgorCQlleGl0IDAKIAlmaQogfQogCiBkb19zYXZlX3ZtY29yZSgpCiB7CisJaWYgWyAke0tEVU1QX1ZNQ09SRV9QQVRIfXggPSB4IF07IHRoZW4KKwkJS0RVTVBfVk1DT1JFX1BBVEg9Ii92YXIvY3Jhc2gvYGRhdGUgKyIlWS0lbS0lZCJgIgorCWZpCisKIAlta2RpciAtcCAke0tEVU1QX1ZNQ09SRV9QQVRIfQogCWVjaG8gIlNhdmluZyBhIHZtY29yZSB0byAke0tEVU1QX1ZNQ09SRV9QQVRIfS4iCiAKQEAgLTEwMSwyMCArOTcsNiBAQAogCQlyZXR1cm4gMQogCWZpCiAKLQkjaGFuZGxlIGtkdW1wIGNtZGxpbmUgcGFyYW1ldGVycywgcmVtb3ZlIHNvbWUgdXNlbGVzcyBvcHRpb25zCi0Ja2NtZGxpbmU9IiIKLQlmb3IgeCBpbiBgY2F0IC9wcm9jL2NtZGxpbmVgOyBkbwotCQljYXNlICR4IGluCi0JCQljcmFzaGtlcm5lbCopCi0JCQkJOzsKLQkJCSopCi0JCQkJa2NtZGxpbmU9IiR7a2NtZGxpbmV9ICR4IgotCQkJCTs7Ci0JCWVzYWMKLQlkb25lCi0KLQlLRFVNUF9DTURMSU5FPSIke2tjbWRsaW5lfSAke0tEVU1QX0NNRExJTkVfQVBQRU5EfSIKLQogCSNMb2FkIHRoZSBrZHVtcCBrZXJuZWwgaW1hZ2UKIAkke0tFWEVDfSAke0tFWEVDX0FSR1N9ICIke0tEVU1QX0tJTUFHRX0iIC0tYXBwZW5kPSIke0tEVU1QX0NNRExJTkV9IgogCWlmIFsgJD8gIT0gMCBdOyB0aGVuCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWtlcm5lbC9rZXhlYy9rZXhlYy10b29scy9rZHVtcC5jb25mIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1rZXJuZWwva2V4ZWMva2V4ZWMtdG9vbHMva2R1bXAuY29uZgppbmRleCA0MmEyNDM1Li4zODE5MGQyIDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWtlcm5lbC9rZXhlYy9rZXhlYy10b29scy9rZHVtcC5jb25mCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMta2VybmVsL2tleGVjL2tleGVjLXRvb2xzL2tkdW1wLmNvbmYKQEAgLTEsMTMgKzEsOSBAQAogI3RoZSBrZHVtcCBrZXJuZWwgdmVyc2lvbiBzdHJpbmcuCiAjS0RVTVBfS1ZFUj0iYHVuYW1lIC1yYCIKIAotI3RoaXMgd2lsbCBiZSBwYXNzZWQgdG8gdGhlIGtkdW1wIGtlcm5lbCBhcyBrZHVtcCBrZXJuZWwgY29tbWFuZCBsaW5lLCBpdAotI3VzdWFsbHkgY29tZXMgZnJvbSAvcHJvYy9jbWRsaW5lCisjdGhpcyB3aWxsIGJlIHBhc3NlZCB0byB0aGUga2R1bXAga2VybmVsIGFzIGtkdW1wIGtlcm5lbCBjb21tYW5kIGxpbmUKICNLRFVNUF9DTURMSU5FPSJgY2F0IC9wcm9jL2NtZGxpbmVgIgogCi0jIGFwcGVuZCBhcmd1bWVudHMgdG8gdGhlIGtkdW1wIGNvbW1hbmRsaW5lCi0jS0RVTVBfQ01ETElORV9BUFBFTkQ9ImtkdW1wX25lZWRlZCBtYXhjcHVzPTEgaXJxcG9sbCByZXNldF9kZXZpY2VzIgotCiAjdGhlIGtlcm5lbCBpbWFnZSBmb3Iga2R1bXAKICNLRFVNUF9LSU1BR0U9Ii9ib290L2J6SW1hZ2UtJHtLRFVNUF9LVkVSfSIKIApkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1rZXJuZWwva2V4ZWMva2V4ZWMtdG9vbHMva2V4ZWMtdG9vbHMtUmVmaW5lLWtkdW1wLWRldmljZV90cmVlLXNvcnQucGF0Y2ggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWtlcm5lbC9rZXhlYy9rZXhlYy10b29scy9rZXhlYy10b29scy1SZWZpbmUta2R1bXAtZGV2aWNlX3RyZWUtc29ydC5wYXRjaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTE5OGViNi4uMDAwMDAwMAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWtlcm5lbC9rZXhlYy9rZXhlYy10b29scy9rZXhlYy10b29scy1SZWZpbmUta2R1bXAtZGV2aWNlX3RyZWUtc29ydC5wYXRjaAorKysgL2Rldi9udWxsCkBAIC0xLDQ4ICswLDAgQEAKLWtleGVjLXRvb2xzOiBSZWZpbmUga2R1bXAgZGV2aWNlX3RyZWUgc29ydAotCi1UaGUgY29tbWl0IGIwMmQ3MzViZiB3YXMgdG8gcmVhcnJhbmdlIHRoZSBkZXZpY2UtdHJlZSBlbnRyaWVzLCBhbmQKLWFzc3VtZWQgdGhhdCB0aGVzZSBlbnRyaWVzIGFyZSBzb3J0ZWQgaW4gdGhlIGFzY2VuZGluZyBvcmRlci4gYnV0Ci1hY2N0dWFsbHkgd2hlbiBJIHdhcyB2YWxpZGF0aW5nIGtleGVjIGFuZCBrZHVtcCwgdGhlIG9yZGVyIG9mCi1zZXJpYWwgbm9kZSBzdGlsbCBpcyBjaGFuZ2VkLiBTbyB0aGUgcGF0Y2ggaXMgdG8gc29ydCB0aGVzZSBlbnRyaWVzCi1ieSB0aGUgZGlyZWN0b3J5IG5hbWUgaW4gYXNjZW5kaW5nIG9yZGVyLgotCi1VcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKLQotU2lnbmVkLW9mZi1ieTogWWFuZyBXZWkgPFdlaS5ZYW5nQHdpbmRyaXZlci5jb20+Ci1TaWduZWQtb2ZmLWJ5OiBDaG9uZyBMdSA8Q2hvbmcuTHVAd2luZHJpdmVyLmNvbT4KLS0tLQotIGtleGVjL2FyY2gvcHBjL2ZzMmR0LmMgfCAgIDEzICsrKysrKysrKystLS0KLSBrZXhlYy9mczJkdC5jICAgICAgICAgIHwgICAxMyArKysrKysrKysrLS0tCi0gMiBmaWxlcyBjaGFuZ2VkLCAyMCBpbnNlcnRpb25zKCspLCA2IGRlbGV0aW9ucygtKQotCi1JbmRleDoga2V4ZWMtdG9vbHMtMi4wLjEwL2tleGVjL2FyY2gvcHBjL2ZzMmR0LmMKLT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tLSBrZXhlYy10b29scy0yLjAuMTAub3JpZy9rZXhlYy9hcmNoL3BwYy9mczJkdC5jCi0rKysga2V4ZWMtdG9vbHMtMi4wLjEwL2tleGVjL2FyY2gvcHBjL2ZzMmR0LmMKLUBAIC0yOTYsNiArMjk2LDkgQEAgc3RhdGljIGludCBjb21wYXJlZnVuYyhjb25zdCB2b2lkICpkZW50cgotIHsKLSAJY2hhciAqc3RyMSA9ICgqKHN0cnVjdCBkaXJlbnQgKiopZGVudHJ5MSktPmRfbmFtZTsKLSAJY2hhciAqc3RyMiA9ICgqKHN0cnVjdCBkaXJlbnQgKiopZGVudHJ5MiktPmRfbmFtZTsKLSsJY2hhciogcHRyMSA9IHN0cmNocihzdHIxLCAnQCcpOwotKwljaGFyKiBwdHIyID0gc3RyY2hyKHN0cjIsICdAJyk7Ci0rCWludCBsZW4xLCBsZW4yOwotIAotIAkvKgotIAkgKiBzdHJjbXAgc2NhbnMgZnJvbSBsZWZ0IHRvIHJpZ2h0IGFuZCBmYWlscyB0byBpZGV0aWZ5IGZvciBzb21lCi1AQCAtMzAzLDkgKzMwNiwxMyBAQCBzdGF0aWMgaW50IGNvbXBhcmVmdW5jKGNvbnN0IHZvaWQgKmRlbnRyCi0gCSAqIFRoZXJlZm9yZSwgd2UgZ2V0IHRoZSB3cm9uZyBzb3J0ZWQgb3JkZXIgbGlrZSBtZW1vcnlAMTAwMDAwMDAgYW5kCi0gCSAqIG1lbW9yeUBmMDAwMDAwLgotIAkgKi8KLS0JaWYgKHN0cmNocihzdHIxLCAnQCcpICYmIHN0cmNocihzdHIyLCAnQCcpICYmCi0tCQkoc3RybGVuKHN0cjEpID4gc3RybGVuKHN0cjIpKSkKLS0JCXJldHVybiAxOwotKwlpZiAocHRyMSAmJiBwdHIyKSB7Ci0rCQlsZW4xID0gcHRyMSAtIHN0cjE7Ci0rCQlsZW4yID0gcHRyMiAtIHN0cjI7Ci0rCQlpZiAoIXN0cm5jbXAoc3RyMSwgc3RyMiwgbGVuMSA+bGVuMiA/IGxlbjE6IGxlbjIpICYmCi0rCQkJCQkoc3RybGVuKHN0cjEpID4gc3RybGVuKHN0cjIpKSkKLSsJCQkJcmV0dXJuIDE7Ci0rCX0KLSAKLSAJcmV0dXJuIHN0cmNtcChzdHIxLCBzdHIyKTsKLSB9CmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWtlcm5lbC9rZXhlYy9rZXhlYy10b29sc18yLjAuMTEuYmIgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWtlcm5lbC9rZXhlYy9rZXhlYy10b29sc18yLjAuMTEuYmIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGMxYzk3YWYuLjAwMDAwMDAKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1rZXJuZWwva2V4ZWMva2V4ZWMtdG9vbHNfMi4wLjExLmJiCisrKyAvZGV2L251bGwKQEAgLTEsMzcgKzAsMCBAQAotcmVxdWlyZSBrZXhlYy10b29scy5pbmMKLWV4cG9ydCBMREZMQUdTID0gIi1MJHtTVEFHSU5HX0xJQkRJUn0iCi1FWFRSQV9PRUNPTkYgPSAiIC0td2l0aC16bGliPXllcyIKLQotU1JDX1VSSSArPSAiZmlsZTovL2tleGVjLXRvb2xzLVJlZmluZS1rZHVtcC1kZXZpY2VfdHJlZS1zb3J0LnBhdGNoIFwKLSAgICAgICAgICAgIGZpbGU6Ly9rZXhlYy1hYXJjaDY0LnBhdGNoIFwKLSAgICAgICAgICAgIGZpbGU6Ly9rZXhlYy14MzIucGF0Y2ggXAotICAgICAgICAgICAgZmlsZTovLzAwMDItcG93ZXJwYy1jaGFuZ2UtdGhlLW1lbW9yeS1zaXplLWxpbWl0LnBhdGNoIFwKLSAgICAgICAgICAgIGZpbGU6Ly8wMDAxLXB1cmdhdG9yeS1QYXNzLXItZGlyZWN0bHktdG8tbGlua2VyLnBhdGNoIFwKLSAgICAgICAgICAgIGZpbGU6Ly8wMDAxLXZtY29yZS1kbWVzZy1EZWZpbmUtX0dOVV9TT1VSQ0UucGF0Y2ggXAotICAgICAgICAgIgotCi1TUkNfVVJJW21kNXN1bV0gPSAiODZkZTA2Njg1OWYyODkwNDhmMWIyODZhZjZmMDNmNzgiCi1TUkNfVVJJW3NoYTI1NnN1bV0gPSAiODRmNjUyZWJmMWRlM2Y3YjlkZTc1N2E1MGNkYmY2ZDU2MzlkODhjMWQ1YjVlZjlmNTI1ZWRkZTVlZjk1OTBjMiIKLQotUEFDS0FHRVMgPSsgImtleGVjIGtkdW1wIHZtY29yZS1kbWVzZyIKLQotQUxMT1dfRU1QVFlfJHtQTn0gPSAiMSIKLVJSRUNPTU1FTkRTXyR7UE59ID0gImtleGVjIGtkdW1wIHZtY29yZS1kbWVzZyIKLQotRklMRVNfa2V4ZWMgPSAiJHtzYmluZGlyfS9rZXhlYyIKLUZJTEVTX2tkdW1wID0gIiR7c2JpbmRpcn0va2R1bXAgJHtzeXNjb25mZGlyfS9pbml0LmQva2R1bXAgXAotICAgICAgICAgICAgICAgJHtzeXNjb25mZGlyfS9zeXNjb25maWcva2R1bXAuY29uZiIKLUZJTEVTX3ZtY29yZS1kbWVzZyA9ICIke3NiaW5kaXJ9L3ZtY29yZS1kbWVzZyIKLQotaW5oZXJpdCB1cGRhdGUtcmMuZAotCi1JTklUU0NSSVBUX1BBQ0tBR0VTID0gImtkdW1wIgotSU5JVFNDUklQVF9OQU1FX2tkdW1wID0gImtkdW1wIgotSU5JVFNDUklQVF9QQVJBTVNfa2R1bXAgPSAic3RhcnQgNTYgMiAzIDQgNSAuIHN0b3AgNTYgMCAxIDYgLiIKLQotZG9faW5zdGFsbF9hcHBlbmQgKCkgewotICAgICAgICBpbnN0YWxsIC1kICR7RH0ke3N5c2NvbmZkaXJ9L2luaXQuZAotICAgICAgICBpbnN0YWxsIC1tIDA3NTUgJHtXT1JLRElSfS9rZHVtcCAke0R9JHtzeXNjb25mZGlyfS9pbml0LmQva2R1bXAKLSAgICAgICAgaW5zdGFsbCAtZCAke0R9JHtzeXNjb25mZGlyfS9zeXNjb25maWcKLSAgICAgICAgaW5zdGFsbCAtbSAwNjQ0ICR7V09SS0RJUn0va2R1bXAuY29uZiAke0R9JHtzeXNjb25mZGlyfS9zeXNjb25maWcKLX0KZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMta2VybmVsL2tleGVjL2tleGVjLXRvb2xzXzIuMC4xMi5iYiBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMta2VybmVsL2tleGVjL2tleGVjLXRvb2xzXzIuMC4xMi5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41OTM3NmM4Ci0tLSAvZGV2L251bGwKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1rZXJuZWwva2V4ZWMva2V4ZWMtdG9vbHNfMi4wLjEyLmJiCkBAIC0wLDAgKzEsMzcgQEAKK3JlcXVpcmUga2V4ZWMtdG9vbHMuaW5jCitleHBvcnQgTERGTEFHUyA9ICItTCR7U1RBR0lOR19MSUJESVJ9IgorRVhUUkFfT0VDT05GID0gIiAtLXdpdGgtemxpYj15ZXMiCisKK1NSQ19VUkkgKz0gIiBcCisgICAgICAgICAgICBmaWxlOi8va2V4ZWMtYWFyY2g2NC5wYXRjaCBcCisgICAgICAgICAgICBmaWxlOi8va2V4ZWMteDMyLnBhdGNoIFwKKyAgICAgICAgICAgIGZpbGU6Ly8wMDAyLXBvd2VycGMtY2hhbmdlLXRoZS1tZW1vcnktc2l6ZS1saW1pdC5wYXRjaCBcCisgICAgICAgICAgICBmaWxlOi8vMDAwMS1wdXJnYXRvcnktUGFzcy1yLWRpcmVjdGx5LXRvLWxpbmtlci5wYXRjaCBcCisgICAgICAgICAgICBmaWxlOi8vMDAwMS12bWNvcmUtZG1lc2ctRGVmaW5lLV9HTlVfU09VUkNFLnBhdGNoIFwKKyAgICAgICAgICIKKworU1JDX1VSSVttZDVzdW1dID0gIjEwZGRhYWUwZTg2YWY1NDQwN2IxNjRhMWY1YTM5Y2MzIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gImNjN2I2MGRhZDBkYTIwMjAwNDA0OGE2MTc5ZDhhNTM2MDY5NDMwNjJkZDYyN2EyZWRiYTQ1YThlYTNhODUxMzUiCisKK1BBQ0tBR0VTID0rICJrZXhlYyBrZHVtcCB2bWNvcmUtZG1lc2ciCisKK0FMTE9XX0VNUFRZXyR7UE59ID0gIjEiCitSUkVDT01NRU5EU18ke1BOfSA9ICJrZXhlYyBrZHVtcCB2bWNvcmUtZG1lc2ciCisKK0ZJTEVTX2tleGVjID0gIiR7c2JpbmRpcn0va2V4ZWMiCitGSUxFU19rZHVtcCA9ICIke3NiaW5kaXJ9L2tkdW1wICR7c3lzY29uZmRpcn0vaW5pdC5kL2tkdW1wIFwKKyAgICAgICAgICAgICAgICR7c3lzY29uZmRpcn0vc3lzY29uZmlnL2tkdW1wLmNvbmYiCitGSUxFU192bWNvcmUtZG1lc2cgPSAiJHtzYmluZGlyfS92bWNvcmUtZG1lc2ciCisKK2luaGVyaXQgdXBkYXRlLXJjLmQKKworSU5JVFNDUklQVF9QQUNLQUdFUyA9ICJrZHVtcCIKK0lOSVRTQ1JJUFRfTkFNRV9rZHVtcCA9ICJrZHVtcCIKK0lOSVRTQ1JJUFRfUEFSQU1TX2tkdW1wID0gInN0YXJ0IDU2IDIgMyA0IDUgLiBzdG9wIDU2IDAgMSA2IC4iCisKK2RvX2luc3RhbGxfYXBwZW5kICgpIHsKKyAgICAgICAgaW5zdGFsbCAtZCAke0R9JHtzeXNjb25mZGlyfS9pbml0LmQKKyAgICAgICAgaW5zdGFsbCAtbSAwNzU1ICR7V09SS0RJUn0va2R1bXAgJHtEfSR7c3lzY29uZmRpcn0vaW5pdC5kL2tkdW1wCisgICAgICAgIGluc3RhbGwgLWQgJHtEfSR7c3lzY29uZmRpcn0vc3lzY29uZmlnCisgICAgICAgIGluc3RhbGwgLW0gMDY0NCAke1dPUktESVJ9L2tkdW1wLmNvbmYgJHtEfSR7c3lzY29uZmRpcn0vc3lzY29uZmlnCit9CmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWtlcm5lbC9rbW9kL2RlcG1vZHdyYXBwZXItY3Jvc3NfMS4wLmJiIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1rZXJuZWwva21vZC9kZXBtb2R3cmFwcGVyLWNyb3NzXzEuMC5iYgppbmRleCBjMmMyNTg5Li41YzdkZDUyIDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWtlcm5lbC9rbW9kL2RlcG1vZHdyYXBwZXItY3Jvc3NfMS4wLmJiCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMta2VybmVsL2ttb2QvZGVwbW9kd3JhcHBlci1jcm9zc18xLjAuYmIKQEAgLTQxLDEwICs0MSw2IEBACiAJY2htb2QgK3ggJHtEfSR7YmluZGlyX2Nyb3Nzc2NyaXB0c30vZGVwbW9kd3JhcHBlcgogfQogCi1TWVNST09UX1BSRVBST0NFU1NfRlVOQ1MgKz0gImRlcG1vZHdyYXBwZXJfc3lzcm9vdF9wcmVwcm9jZXNzIgotCi1kZXBtb2R3cmFwcGVyX3N5c3Jvb3RfcHJlcHJvY2VzcyAoKSB7Ci0Jc3lzcm9vdF9zdGFnZV9kaXIgJHtEfSR7YmluZGlyX2Nyb3Nzc2NyaXB0c30gJHtTWVNST09UX0RFU1RESVJ9JHtiaW5kaXJfY3Jvc3NzY3JpcHRzfQotfQorU1lTUk9PVF9ESVJTICs9ICIke2JpbmRpcl9jcm9zc3NjcmlwdHN9IgogCiBpbmhlcml0IG5vcGFja2FnZXMKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMta2VybmVsL2ttb2Qva21vZC5pbmMgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWtlcm5lbC9rbW9kL2ttb2QuaW5jCmluZGV4IDBiY2RjZjYuLjE2NmIzZjAgMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMta2VybmVsL2ttb2Qva21vZC5pbmMKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1rZXJuZWwva21vZC9rbW9kLmluYwpAQCAtOSwxNiArOSwxNCBAQAogTElDRU5TRV9saWJrbW9kID0gIkxHUEwtMi4xKyIKIFNFQ1RJT04gPSAiYmFzZSIKIAotREVQRU5EUyArPSAicGtnY29uZmlnLW5hdGl2ZSIKLQogTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9YTZmODllMjEwMGQ5YjZjZGZmY2VhNGYzOThlMzczNDMgXAogICAgICAgICAgICAgICAgICAgICBmaWxlOi8vbGlia21vZC9DT1BZSU5HO21kNT1hNmY4OWUyMTAwZDliNmNkZmZjZWE0ZjM5OGUzNzM0MyBcCiAgICAgICAgICAgICAgICAgICAgIgotaW5oZXJpdCBhdXRvdG9vbHMgZ3RrLWRvYworaW5oZXJpdCBhdXRvdG9vbHMgZ3RrLWRvYyBwa2djb25maWcKIAotU1JDUkVWID0gIjQyZjMyYjhhZTQ1YWQ4ZTNhMWRhMjljOWIyMGFmOWI1ZTJlOWU2NzYiCitTUkNSRVYgPSAiNjVhODg1ZGY1ZjZmMTUyMjJiNDRmZDY5NWM1ZWFjYTE3ZTgzN2ExNCIKICMgTG9va291dCBmb3IgUFYgYnVtcCB0b28gd2hlbiBTUkNSRVYgaXMgY2hhbmdlZAotUFYgPSAiMjIrZ2l0JHtTUkNQVn0iCitQViA9ICIyMytnaXQke1NSQ1BWfSIKIAogU1JDX1VSSSA9ICJnaXQ6Ly9naXQua2VybmVsLm9yZy9wdWIvc2NtL3V0aWxzL2tlcm5lbC9rbW9kL2ttb2QuZ2l0IFwKICAgICAgICAgICAgZmlsZTovL2RlcG1vZC1zZWFyY2guY29uZiBcCkBAIC0zNSw3ICszMyw3IEBACiBQQUNLQUdFQ09ORklHW2xvZ2dpbmddID0gIiAtLWVuYWJsZS1sb2dnaW5nLC0tZGlzYWJsZS1sb2dnaW5nIgogCiBkb19jb25maWd1cmVfcHJlcGVuZCAoKSB7Ci0gICAgICAgIGd0a2RvY2l6ZSAtLWRvY2RpciAke1N9L2xpYmttb2QvZG9jcyB8fCB0b3VjaCAke1N9L2xpYmttb2QvZG9jcy9ndGstZG9jLm1ha2UKKyAgICAgICAgZ3RrZG9jaXplIC0tZG9jZGlyICR7U30vbGlia21vZC9kb2NzIC0tc3JjZGlyICR7U30KIH0KIAogZG9fY29uZmlndXJlX2FwcGVuZCAoKSB7CmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWtlcm5lbC9saWJwZm0vZmlsZXMvZml4LW1pc2xlYWRpbmctaW5kZW50YXRpb24tZXJyb3IucGF0Y2ggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWtlcm5lbC9saWJwZm0vZmlsZXMvZml4LW1pc2xlYWRpbmctaW5kZW50YXRpb24tZXJyb3IucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjVkNDdlZgotLS0gL2Rldi9udWxsCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMta2VybmVsL2xpYnBmbS9maWxlcy9maXgtbWlzbGVhZGluZy1pbmRlbnRhdGlvbi1lcnJvci5wYXRjaApAQCAtMCwwICsxLDM4IEBACitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworRml4IGNvbXBpbGUgZXJyb3I6CisKK3wgc3lzdF9jb3VudC5jOjM0NjozOiBlcnJvcjogdGhpcyAnZm9yJyBjbGF1c2UgZG9lcyBub3QgZ3VhcmQuLi4gWy1XZXJyb3I9bWlzbGVhZGluZy1pbmRlbnRhdGlvbl0gCit8ICAgIGZvcihjPWNtaW4gOyBjIDwgY21heDsgYysrKSAKK3wgICAgICAgXn5+IAorCitTaWduZWQtb2ZmLWJ5OiBLYWkgS2FuZyA8a2FpLmthbmdAd2luZHJpdmVyLmNvbT4KKy0tLQorZGlmZiAtLWdpdCBhL3BlcmZfZXhhbXBsZXMvc3lzdF9jb3VudC5jIGIvcGVyZl9leGFtcGxlcy9zeXN0X2NvdW50LmMKK2luZGV4IDBkNTMwNzguLjJkZmI5YjkgMTAwNjQ0CistLS0gYS9wZXJmX2V4YW1wbGVzL3N5c3RfY291bnQuYworKysrIGIvcGVyZl9leGFtcGxlcy9zeXN0X2NvdW50LmMKK0BAIC0zNDMsOCArMzQzLDkgQEAgbWVhc3VyZSh2b2lkKQorIAorIAkJZm9yIChkZWxheSA9IDEgOyBkZWxheSA8PSBvcHRpb25zLmRlbGF5OyBkZWxheSsrKSB7CisgCistCQlmb3IoYz1jbWluIDsgYyA8IGNtYXg7IGMrKykKKy0JCQlzdGFydF9jcHUoYyk7CisrCQkJZm9yKGM9Y21pbiA7IGMgPCBjbWF4OyBjKyspIHsKKysJCQkJc3RhcnRfY3B1KGMpOworKwkJCX0KKyAKKyAJCQlpZiAoMCkgeworIAkJCQl0di50dl9zZWMgPSAwOworQEAgLTM1Myw4ICszNTQsOSBAQCBtZWFzdXJlKHZvaWQpCisgCQkJfSBlbHNlCisgCQkJCXNsZWVwKDEpOworIAorLQkJZm9yKGM9Y21pbiA7IGMgPCBjbWF4OyBjKyspCistCQkJc3RvcF9jcHUoYyk7CisrCQkJZm9yKGM9Y21pbiA7IGMgPCBjbWF4OyBjKyspIHsKKysJCQkJc3RvcF9jcHUoYyk7CisrCQkJfQorIAorIAkJCWZvcihjID0gY21pbjsgYyA8IGNtYXg7IGMrKykgeworIAkJCQlwcmludGYoIiMgJSdkcyAtLS0tLVxuIiwgZGVsYXkpOwpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1rZXJuZWwvbGlicGZtL2xpYnBmbTRfNC42LjAuYmIgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWtlcm5lbC9saWJwZm0vbGlicGZtNF80LjYuMC5iYgppbmRleCAwYjAyNGFkLi40MTM2ZWFjIDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWtlcm5lbC9saWJwZm0vbGlicGZtNF80LjYuMC5iYgorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWtlcm5lbC9saWJwZm0vbGlicGZtNF80LjYuMC5iYgpAQCAtMTQsNiArMTQsNyBAQAogCiBTUkNfVVJJID0gImh0dHA6Ly9kb3dubG9hZHMuc291cmNlZm9yZ2UubmV0L3Byb2plY3QvcGVyZm1vbjIvJHtCUE59L2xpYnBmbS0ke1BWfS50YXIuZ3ogXAogICAgICAgICAgICBmaWxlOi8vMDAwMS1NYWtlZmlsZS1BZGQtTERGTEFHUy12YXJpYWJsZS10by1TTERGTEFHUy5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9maXgtbWlzbGVhZGluZy1pbmRlbnRhdGlvbi1lcnJvci5wYXRjaCBcCiAgICAgICAgICAgIgogCiBTUkNfVVJJW21kNXN1bV0gPSAiNTA3N2I5MDIyNDQwZTQ5NTFkOTZmMmQwZTczYmQ0ODciCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWtlcm5lbC9saW51eC1maXJtd2FyZS9saW51eC1maXJtd2FyZV9naXQuYmIgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWtlcm5lbC9saW51eC1maXJtd2FyZS9saW51eC1maXJtd2FyZV9naXQuYmIKaW5kZXggYTRlNjRkNS4uOGU2OGFlOCAxMDA2NDQKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1rZXJuZWwvbGludXgtZmlybXdhcmUvbGludXgtZmlybXdhcmVfZ2l0LmJiCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMta2VybmVsL2xpbnV4LWZpcm13YXJlL2xpbnV4LWZpcm13YXJlX2dpdC5iYgpAQCAtNTUsMTMgKzU1LDE0IEBACiAgICAgJiBGaXJtd2FyZS14YzQwMDAgXAogICAgICYgRmlybXdhcmUteGM1MDAwIFwKICAgICAmIEZpcm13YXJlLXhjNTAwMGMgXAorICAgICYgV0hFTkNFIFwKICIKIAogTElDX0ZJTEVTX0NIS1NVTSA9ICJcCiAgICAgZmlsZTovL0xJQ0VOQ0UuQWJpbGlzO21kNT1iNWVlM2Y0MTA3ODBlNTY3MTFhZDQ4ZWFkYzIyYjhiYyBcCiAgICAgZmlsZTovL0xJQ0VOQ0UuYWRzcF9zc3Q7bWQ1PTYxNWM0NWI5MWE1YTRhOWZlMDQ2ZDZhYjlhMmRmNzI4IFwKICAgICBmaWxlOi8vTElDRU5DRS5hZ2VyZTttZDU9YWYwMTMzZGU2YjRhOWIyNTIyZGVmZDVmMTg4YWZkMzEgXAotICAgIGZpbGU6Ly9MSUNFTlNFLmFtZGdwdTttZDU9YTg1OTJjMjRjMjY3MjA2MmUwM2M3MzkyZmM3ZmUzYmMgXAorICAgIGZpbGU6Ly9MSUNFTlNFLmFtZGdwdTttZDU9M2ZlOGEzNDMwNzAwYTUxODk5MGMzYjNkNzUyOTcyMDkgXAogICAgIGZpbGU6Ly9MSUNFTlNFLmFtZC11Y29kZTttZDU9M2EwZGU0NTEyNTNjYzFlZGJmMzBhM2M2MjFlZmZlZTMgXAogICAgIGZpbGU6Ly9MSUNFTkNFLmF0aGVyb3NfZmlybXdhcmU7bWQ1PTMwYTE0Yzc4MjNiZWVkYWM5ZmEzOWM2NGZkZDAxYTEzIFwKICAgICBmaWxlOi8vTElDRU5TRS5hdG1lbDttZDU9YWE3NGFjMGM2MDU5NWRlZTRkNGUyMzkxMDdlYTc3YTMgXApAQCAtOTcsNyArOTgsNyBAQAogICAgIGZpbGU6Ly9MSUNFTlNFLlF1YWxjb21tQXRoZXJvc19hcjNrO21kNT1iNWZlMjQ0ZmIyYjUzMjMxMWRlMTQ3MmEzYmMwNmRhNSBcCiAgICAgZmlsZTovL0xJQ0VOU0UuUXVhbGNvbW1BdGhlcm9zX2F0aDEwazttZDU9YjVmZTI0NGZiMmI1MzIzMTFkZTE0NzJhM2JjMDZkYTUgXAogICAgIGZpbGU6Ly9MSUNFTkNFLnI4YTc3OXhfdXNiMzttZDU9NGMxNjcxNjU2MTUzMDI1ZDcwNzYxMDVhNWRhN2U0OTggXAotICAgIGZpbGU6Ly9MSUNFTlNFLnJhZGVvbjttZDU9NmM3Zjk3YzZjNjJiZGQ5NTk2ZDAyMzhiYjIwNTExOGMgXAorICAgIGZpbGU6Ly9MSUNFTlNFLnJhZGVvbjttZDU9Njk2MTJmNGY3YjE0MWE5NzY1OWNiMWQ2MDlhMWJkZTIgXAogICAgIGZpbGU6Ly9MSUNFTkNFLnJhbGlua19hX21lZGlhdGVrX2NvbXBhbnlfZmlybXdhcmU7bWQ1PTcyOGYxYTg1ZmQ1M2ZkNjdmYThkN2FmYjA4MGJjNDM1IFwKICAgICBmaWxlOi8vTElDRU5DRS5yYWxpbmstZmlybXdhcmUudHh0O21kNT1hYjJjMjY5Mjc3YzQ1NDc2ZmI0NDk2NzM5MTFhMmRmZCBcCiAgICAgZmlsZTovL0xJQ0VOQ0UucnRsd2lmaV9maXJtd2FyZS50eHQ7bWQ1PTAwZDA2Y2ZkM2VkZGQ1YTI2OTg5NDhlYWQyYWQ1NGE1IFwKQEAgLTExMSw2ICsxMTIsNyBAQAogICAgIGZpbGU6Ly9MSUNFTkNFLnhjNDAwMDttZDU9MGZmNTFkMmRjNDlmY2UwNDgxNGM5MTU1MDgxMDkyZjAgXAogICAgIGZpbGU6Ly9MSUNFTkNFLnhjNTAwMDttZDU9MWUxNzBjMTMxNzUzMjNjMzJjN2Y0ZDA5OThkNTNmNjYgXAogICAgIGZpbGU6Ly9MSUNFTkNFLnhjNTAwMGM7bWQ1PTEyYjAyZWZhMzA0OWRiNjVkNTI0YWViNDE4ZGQ4N2NhIFwKKyAgICBmaWxlOi8vV0hFTkNFO21kNT1mNTE0YTBjNTNjNWQ3M2MyZmU5OGQ1ODYxMTAzZjBjNiBcCiAiCiAKICMgVGhlc2UgYXJlIG5vdCBjb21tb24gbGljZW5zZXMsIHNldCBOT19HRU5FUklDX0xJQ0VOU0UgZm9yIHRoZW0KQEAgLTE2OCwxMyArMTcwLDIwIEBACiBOT19HRU5FUklDX0xJQ0VOU0VbRmlybXdhcmUteGM0MDAwXSA9ICJMSUNFTkNFLnhjNDAwMCIKIE5PX0dFTkVSSUNfTElDRU5TRVtGaXJtd2FyZS14YzUwMDBdID0gIkxJQ0VOQ0UueGM1MDAwIgogTk9fR0VORVJJQ19MSUNFTlNFW0Zpcm13YXJlLXhjNTAwMGNdID0gIkxJQ0VOQ0UueGM1MDAwYyIKK05PX0dFTkVSSUNfTElDRU5TRVtXSEVOQ0VdID0gIldIRU5DRSIKIAotU1JDUkVWID0gIjVmOGNhMGMxZGI2MTA2YTJkNmQ3ZTg1ZWVlNzc4OTE3ZmYwM2MzZGUiCitTUkNSRVYgPSAiNDJhZDUzNjdkZDM4MzcxYjJhMWJiMjYzYjZlZmE4NWY5YjkyZmM5MyIKIFBFID0gIjEiCiBQViA9ICIwLjArZ2l0JHtTUkNQVn0iCiAKIFNSQ19VUkkgPSAiZ2l0Oi8vZ2l0Lmtlcm5lbC5vcmcvcHViL3NjbS9saW51eC9rZXJuZWwvZ2l0L2Zpcm13YXJlL2xpbnV4LWZpcm13YXJlLmdpdCIKIAorIyBTb21lIGRldmljZXMgbmVlZCBhIHNwZWNpZmljIHZlcnNpb24sIG5vdCB0aGUgbGF0ZXN0CitTUkNfVVJJICs9ICJodHRwczovL2dpdC5rZXJuZWwub3JnL2NnaXQvbGludXgva2VybmVsL2dpdC9pd2x3aWZpL2xpbnV4LWZpcm13YXJlLmdpdC9wbGFpbi9pd2x3aWZpLTgwMDBDLTE5LnVjb2RlO25hbWU9aXdsd2lmaS0xOSIKKworU1JDX1VSSVtpd2x3aWZpLTE5Lm1kNXN1bV0gPSAiMTMyZmJhZWUzNmJlZWM1ZTk4NzE0ZjBiZDY2ZjdhMWQiCitTUkNfVVJJW2l3bHdpZmktMTkuc2hhMjU2c3VtXSA9ICIyMDM0NDcwZGY2NGQzMjNiODI3YzRmMmQ0ZDBkNTViZTI4NDZiNzM2MDE3OWI1NTc0YWEyOGZmNzdiNmM5NDcxIgorCiBTID0gIiR7V09SS0RJUn0vZ2l0IgogCiBpbmhlcml0IGFsbGFyY2ggdXBkYXRlLWFsdGVybmF0aXZlcwpAQCAtMjA0LDYgKzIxMyw5IEBACiAKIAkjIGZpeHVwIHdsMTJ4eCBsb2NhdGlvbiwgYWZ0ZXIgMi42LjM3IHRoZSBrZXJuZWwgc2VhcmNoZXMgYSBkaWZmZXJlbnQgbG9jYXRpb24gZm9yIGl0CiAJKCBjZCAke0R9L2xpYi9maXJtd2FyZSA7IGxuIC1zZiB0aS1jb25uZWN0aXZpdHkvKiAuICkKKworICAgICAgICAjIENvcHkgdGhlIGl3bHdpZmkgdWNvZGUKKyAgICAgICAgY3AgJHtXT1JLRElSfS9pd2x3aWZpLTgwMDBDLTE5LnVjb2RlICR7RH0vbGliL2Zpcm13YXJlLwogfQogCiAKQEAgLTIxMywxMSArMjI1LDEyIEBACiAgICAgICAgICAgICAgJHtQTn0tdGktY29ubmVjdGl2aXR5LWxpY2Vuc2UgJHtQTn0td2wxMnh4ICR7UE59LXdsMTh4eCBcCiAgICAgICAgICAgICAgJHtQTn0tdnQ2NjU2LWxpY2Vuc2UgJHtQTn0tdnQ2NjU2IFwKICAgICAgICAgICAgICAke1BOfS1ydGwtbGljZW5zZSAke1BOfS1ydGw4MTkyY3UgJHtQTn0tcnRsODE5MmNlICR7UE59LXJ0bDgxOTJzdSBcCi0gICAgICAgICAgICAgJHtQTn0tYnJvYWRjb20tbGljZW5zZSAke1BOfS1iY200MzI5ICR7UE59LWJjbTQzMzAgJHtQTn0tYmNtNDMzNCAke1BOfS1iY200MzM0MCAke1BOfS1iY200MzM5ICR7UE59LWJjbTQzNTQgXAotICAgICAgICAgICAgICR7UE59LWF0aGVyb3MtbGljZW5zZSAke1BOfS1hcjkxNzAgJHtQTn0tYXRoNmsgJHtQTn0tYXRoOWsgXAorICAgICAgICAgICAgICR7UE59LWJyb2FkY29tLWxpY2Vuc2UgJHtQTn0tYmNtNDMyOSAke1BOfS1iY200MzMwICR7UE59LWJjbTQzMzQgJHtQTn0tYmNtNDMzNDAgJHtQTn0tYmNtNDMzOSAke1BOfS1iY200MzQzMCAke1BOfS1iY200MzU0IFwKKyAgICAgICAgICAgICAke1BOfS1hdGhlcm9zLWxpY2Vuc2UgJHtQTn0tYXI5MTcwICR7UE59LWNhcmw5MTcwICR7UE59LWF0aDZrICR7UE59LWF0aDlrIFwKICAgICAgICAgICAgICAke1BOfS1hcjNrLWxpY2Vuc2UgICR7UE59LWFyM2sgICR7UE59LWF0aDEway1saWNlbnNlICAke1BOfS1hdGgxMGsgIFwKICAgICAgICAgICAgICBcCi0gICAgICAgICAgICAgJHtQTn0taXdsd2lmaS1saWNlbnNlICR7UE59LWl3bHdpZmktMTM1LTYgXAorICAgICAgICAgICAgICR7UE59LWl3bHdpZmktbGljZW5zZSAke1BOfS1pd2x3aWZpIFwKKyAgICAgICAgICAgICAke1BOfS1pd2x3aWZpLTEzNS02IFwKICAgICAgICAgICAgICAke1BOfS1pd2x3aWZpLTMxNjAtNyAke1BOfS1pd2x3aWZpLTMxNjAtOCAke1BOfS1pd2x3aWZpLTMxNjAtOSBcCiAgICAgICAgICAgICAgJHtQTn0taXdsd2lmaS02MDAwLTQgJHtQTn0taXdsd2lmaS02MDAwZzJhLTUgJHtQTn0taXdsd2lmaS02MDAwZzJhLTYgXAogICAgICAgICAgICAgICR7UE59LWl3bHdpZmktNjAwMGcyYi01ICR7UE59LWl3bHdpZmktNjAwMGcyYi02IFwKQEAgLTIyNSw4ICsyMzgsMTEgQEAKICAgICAgICAgICAgICAke1BOfS1pd2x3aWZpLTcyNjAgXAogICAgICAgICAgICAgICR7UE59LWl3bHdpZmktNzI2NSBcCiAgICAgICAgICAgICAgJHtQTn0taXdsd2lmaS03MjY1ZCAke1BOfS1pd2x3aWZpLTgwMDBjICR7UE59LWl3bHdpZmktODI2NSBcCisgICAgICAgICAgICAgJHtQTn0taXdsd2lmaS1taXNjIFwKICAgICAgICAgICAgICAke1BOfS1pOTE1LWxpY2Vuc2UgJHtQTn0taTkxNSBcCiAgICAgICAgICAgICAgJHtQTn0tYWRzcC1zc3QtbGljZW5zZSAke1BOfS1hZHNwLXNzdCBcCisgICAgICAgICAgICAgJHtQTn0tYm54Mi1taXBzIFwKKyAgICAgICAgICAgICAke1BOfS13aGVuY2UtbGljZW5zZSBcCiAgICAgICAgICAgICAgJHtQTn0tbGljZW5zZSBcCiAgICAgICAgICAgICAgIgogCkBAIC0yMzQsMTEgKzI1MCwxNSBAQAogTElDRU5TRV8ke1BOfS1hcjkxNzAgPSAiRmlybXdhcmUtYXRoZXJvc19maXJtd2FyZSIKIExJQ0VOU0VfJHtQTn0tYXRoNmsgPSAiRmlybXdhcmUtYXRoZXJvc19maXJtd2FyZSIKIExJQ0VOU0VfJHtQTn0tYXRoOWsgPSAiRmlybXdhcmUtYXRoZXJvc19maXJtd2FyZSIKK0xJQ0VOU0VfJHtQTn0tYXRoZXJvcy1saWNlbnNlID0gIkZpcm13YXJlLWF0aGVyb3NfZmlybXdhcmUiCiAKIEZJTEVTXyR7UE59LWF0aGVyb3MtbGljZW5zZSA9ICIvbGliL2Zpcm13YXJlL0xJQ0VOQ0UuYXRoZXJvc19maXJtd2FyZSIKIEZJTEVTXyR7UE59LWFyOTE3MCA9ICIgXAogICAvbGliL2Zpcm13YXJlL2FyOTE3MCouZncgXAogIgorRklMRVNfJHtQTn0tY2FybDkxNzAgPSAiIFwKKyAgL2xpYi9maXJtd2FyZS9jYXJsOTE3MCouZncgXAorIgogRklMRVNfJHtQTn0tYXRoNmsgPSAiIFwKICAgL2xpYi9maXJtd2FyZS9hdGg2ayBcCiAiCkBAIC0yNTAsMTIgKzI3MCwxNSBAQAogIgogCiBSREVQRU5EU18ke1BOfS1hcjkxNzAgKz0gIiR7UE59LWF0aGVyb3MtbGljZW5zZSIKK1JERVBFTkRTXyR7UE59LWNhcmw5MTcwICs9ICIke1BOfS1hdGhlcm9zLWxpY2Vuc2UiCiBSREVQRU5EU18ke1BOfS1hdGg2ayArPSAiJHtQTn0tYXRoZXJvcy1saWNlbnNlIgogUkRFUEVORFNfJHtQTn0tYXRoOWsgKz0gIiR7UE59LWF0aGVyb3MtbGljZW5zZSIKIAogIyBGb3IgUXVhbENvbW1BdGhvcwogTElDRU5TRV8ke1BOfS1hcjNrID0gIkZpcm13YXJlLXF1YWxjb21tQXRob3NfYXIzayIKK0xJQ0VOU0VfJHtQTn0tYXIzay1saWNlbnNlID0gIkZpcm13YXJlLXF1YWxjb21tQXRob3NfYXIzayIKIExJQ0VOU0VfJHtQTn0tYXRoMTBrID0gIkZpcm13YXJlLXF1YWxjb21tQXRob3NfYXRoMTBrIgorTElDRU5TRV8ke1BOfS1hdGgxMGstbGljZW5zZSA9ICJGaXJtd2FyZS1xdWFsY29tbUF0aG9zX2F0aDEwayIKIAogRklMRVNfJHtQTn0tYXIzay1saWNlbnNlID0gIi9saWIvZmlybXdhcmUvTElDRU5TRS5RdWFsY29tbUF0aGVyb3NfYXIzayIKIEZJTEVTXyR7UE59LWFyM2sgPSAiIFwKQEAgLTI3Miw2ICsyOTUsNyBAQAogCiAjIEZvciByYWxpbmsKIExJQ0VOU0VfJHtQTn0tcmFsaW5rID0gIkZpcm13YXJlLXJhbGluay1maXJtd2FyZSIKK0xJQ0VOU0VfJHtQTn0tcmFsaW5rLWxpY2Vuc2UgPSAiRmlybXdhcmUtcmFsaW5rLWZpcm13YXJlIgogCiBGSUxFU18ke1BOfS1yYWxpbmstbGljZW5zZSA9ICIvbGliL2Zpcm13YXJlL0xJQ0VOQ0UucmFsaW5rLWZpcm13YXJlLnR4dCIKIEZJTEVTXyR7UE59LXJhbGluayA9ICIgXApAQCAtMjgyLDYgKzMwNiw3IEBACiAKICMgRm9yIHJhZGVvbgogTElDRU5TRV8ke1BOfS1yYWRlb24gPSAiRmlybXdhcmUtcmFkZW9uIgorTElDRU5TRV8ke1BOfS1yYWRlb24tbGljZW5zZSA9ICJGaXJtd2FyZS1yYWRlb24iCiAKIEZJTEVTXyR7UE59LXJhZGVvbi1saWNlbnNlID0gIi9saWIvZmlybXdhcmUvTElDRU5TRS5yYWRlb24iCiBGSUxFU18ke1BOfS1yYWRlb24gPSAiIFwKQEAgLTI5NSw2ICszMjAsNyBAQAogTElDRU5TRV8ke1BOfS1zZDg2ODggPSAiRmlybXdhcmUtTWFydmVsbCIKIExJQ0VOU0VfJHtQTn0tc2Q4Nzg3ID0gIkZpcm13YXJlLU1hcnZlbGwiCiBMSUNFTlNFXyR7UE59LXNkODc5NyA9ICJGaXJtd2FyZS1NYXJ2ZWxsIgorTElDRU5TRV8ke1BOfS1tYXJ2ZWxsLWxpY2Vuc2UgPSAiRmlybXdhcmUtTWFydmVsbCIKIAogRklMRVNfJHtQTn0tbWFydmVsbC1saWNlbnNlID0gIi9saWIvZmlybXdhcmUvTElDRU5DRS5NYXJ2ZWxsIgogRklMRVNfJHtQTn0tc2Q4Njg2ID0gIiBcCkBAIC0zMjEsNiArMzQ3LDcgQEAKIExJQ0VOU0VfJHtQTn0tcnRsODE5MmN1ID0gIkZpcm13YXJlLXJ0bHdpZmlfZmlybXdhcmUiCiBMSUNFTlNFXyR7UE59LXJ0bDgxOTJjZSA9ICJGaXJtd2FyZS1ydGx3aWZpX2Zpcm13YXJlIgogTElDRU5TRV8ke1BOfS1ydGw4MTkyc3UgPSAiRmlybXdhcmUtcnRsd2lmaV9maXJtd2FyZSIKK0xJQ0VOU0VfJHtQTn0tcnRsLWxpY2Vuc2UgPSAiRmlybXdhcmUtcnRsd2lmaV9maXJtd2FyZSIKIAogRklMRVNfJHtQTn0tcnRsLWxpY2Vuc2UgPSAiIFwKICAgL2xpYi9maXJtd2FyZS9MSUNFTkNFLnJ0bHdpZmlfZmlybXdhcmUudHh0IFwKQEAgLTM0Miw2ICszNjksNyBAQAogIyBGb3IgdGktY29ubmVjdGl2aXR5CiBMSUNFTlNFXyR7UE59LXdsMTJ4eCA9ICJGaXJtd2FyZS10aS1jb25uZWN0aXZpdHkiCiBMSUNFTlNFXyR7UE59LXdsMTh4eCA9ICJGaXJtd2FyZS10aS1jb25uZWN0aXZpdHkiCitMSUNFTlNFXyR7UE59LXRpLWNvbm5lY3Rpdml0eS1saWNlbnNlID0gIkZpcm13YXJlLXRpLWNvbm5lY3Rpdml0eSIKIAogRklMRVNfJHtQTn0tdGktY29ubmVjdGl2aXR5LWxpY2Vuc2UgPSAiL2xpYi9maXJtd2FyZS9MSUNFTkNFLnRpLWNvbm5lY3Rpdml0eSIKIEZJTEVTXyR7UE59LXdsMTJ4eCA9ICIgXApAQCAtMzYwLDYgKzM4OCw3IEBACiAKICMgRm9yIHZ0NjY1NgogTElDRU5TRV8ke1BOfS12dDY2NTYgPSAiRmlybXdhcmUtdmlhX3Z0NjY1NiIKK0xJQ0VOU0VfJHtQTn0tdnQ2NjU2LWxpY2Vuc2UgPSAiRmlybXdhcmUtdmlhX3Z0NjY1NiIKIAogRklMRVNfJHtQTn0tdnQ2NjU2LWxpY2Vuc2UgPSAiL2xpYi9maXJtd2FyZS9MSUNFTkNFLnZpYV92dDY2NTYiCiBGSUxFU18ke1BOfS12dDY2NTYgPSAiIFwKQEAgLTM3OSw3ICs0MDgsOSBAQAogTElDRU5TRV8ke1BOfS1iY200MzM0ID0gIkZpcm13YXJlLWJyb2FkY29tX2JjbTQzeHgiCiBMSUNFTlNFXyR7UE59LWJjbTQzMzQwID0gIkZpcm13YXJlLWJyb2FkY29tX2JjbTQzeHgiCiBMSUNFTlNFXyR7UE59LWJjbTQzMzkgPSAiRmlybXdhcmUtYnJvYWRjb21fYmNtNDN4eCIKK0xJQ0VOU0VfJHtQTn0tYmNtNDM0MzAgPSAiRmlybXdhcmUtYnJvYWRjb21fYmNtNDN4eCIKIExJQ0VOU0VfJHtQTn0tYmNtNDM1NCA9ICJGaXJtd2FyZS1icm9hZGNvbV9iY200M3h4IgorTElDRU5TRV8ke1BOfS1icm9hZGNvbS1saWNlbnNlID0gIkZpcm13YXJlLWJyb2FkY29tX2JjbTQzeHgiCiAKIEZJTEVTXyR7UE59LWJyb2FkY29tLWxpY2Vuc2UgPSAiIFwKICAgL2xpYi9maXJtd2FyZS9MSUNFTkNFLmJyb2FkY29tX2JjbTQzeHggXApAQCAtMzk5LDYgKzQzMCw5IEBACiBGSUxFU18ke1BOfS1iY200MzM5ID0gIiBcCiAgIC9saWIvZmlybXdhcmUvYnJjbS9icmNtZm1hYzQzMzktc2Rpby5iaW4gXAogIgorRklMRVNfJHtQTn0tYmNtNDM0MzAgPSAiIFwKKyAgL2xpYi9maXJtd2FyZS9icmNtL2JyY21mbWFjNDM0MzAtc2Rpby5iaW4gXAorIgogRklMRVNfJHtQTn0tYmNtNDM1NCA9ICIgXAogICAvbGliL2Zpcm13YXJlL2JyY20vYnJjbWZtYWM0MzU0LXNkaW8uYmluIFwKICIKQEAgLTQxNywxNSArNDUxLDMzIEBACiBBTFRFUk5BVElWRV9UQVJHRVRfbGludXgtZmlybXdhcmUtYmNtNDMzMFticmNtZm1hYy1zZGlvLmJpbl0gPSAiL2xpYi9maXJtd2FyZS9icmNtL2JyY21mbWFjNDMzMC1zZGlvLmJpbiIKIEFMVEVSTkFUSVZFX2xpbnV4LWZpcm13YXJlLWJjbTQzMzkgPSAiYnJjbWZtYWMtc2Rpby5iaW4iCiBBTFRFUk5BVElWRV9UQVJHRVRfbGludXgtZmlybXdhcmUtYmNtNDMzOVticmNtZm1hYy1zZGlvLmJpbl0gPSAiL2xpYi9maXJtd2FyZS9icmNtL2JyY21mbWFjNDMzOS1zZGlvLmJpbiIKK0FMVEVSTkFUSVZFX1BSSU9SSVRZX2xpbnV4LWZpcm13YXJlLWJjbTQzMzlbYnJjbWZtYWMtc2Rpby5iaW5dID0gIjIwIgorQUxURVJOQVRJVkVfbGludXgtZmlybXdhcmUtYmNtNDM0MzAgPSAiYnJjbWZtYWMtc2Rpby5iaW4iCitBTFRFUk5BVElWRV9UQVJHRVRfbGludXgtZmlybXdhcmUtYmNtNDM0MzBbYnJjbWZtYWMtc2Rpby5iaW5dID0gIi9saWIvZmlybXdhcmUvYnJjbS9icmNtZm1hYzQzNDMwLXNkaW8uYmluIgogCiBSREVQRU5EU18ke1BOfS1iY200MzI5ICs9ICIke1BOfS1icm9hZGNvbS1saWNlbnNlIgogUkRFUEVORFNfJHtQTn0tYmNtNDMzMCArPSAiJHtQTn0tYnJvYWRjb20tbGljZW5zZSIKIFJERVBFTkRTXyR7UE59LWJjbTQzMzQgKz0gIiR7UE59LWJyb2FkY29tLWxpY2Vuc2UiCiBSREVQRU5EU18ke1BOfS1iY200MzM0MCArPSAiJHtQTn0tYnJvYWRjb20tbGljZW5zZSIKIFJERVBFTkRTXyR7UE59LWJjbTQzMzkgKz0gIiR7UE59LWJyb2FkY29tLWxpY2Vuc2UiCitSREVQRU5EU18ke1BOfS1iY200MzQzMCArPSAiJHtQTn0tYnJvYWRjb20tbGljZW5zZSIKIFJERVBFTkRTXyR7UE59LWJjbTQzNTQgKz0gIiR7UE59LWJyb2FkY29tLWxpY2Vuc2UiCiAKKyMgRm9yIEJyb2FkY29tIGJueDItbWlwcworIworIyB3aGljaCBpcyBhIHNlcGFyYXRlIGNhc2UgdG8gdGhlIG90aGVyIEJyb2FkY29tIGZpcm13YXJlcyBzaW5jZSBpdHMKKyMgbGljZW5zZSBpcyBjb250YWluZWQgaW4gdGhlIHNoYXJlZCBXSEVOQ0UgZmlsZS4KKworTElDRU5TRV8ke1BOfS1ibngyLW1pcHMgPSAiV0hFTkNFIgorTElDRU5TRV8ke1BOfS13aGVuY2UtbGljZW5zZSA9ICJXSEVOQ0UiCisKK0ZJTEVTXyR7UE59LWJueDItbWlwcyA9ICIvbGliL2Zpcm13YXJlL2JueDIvYm54Mi1taXBzLTA5LTYuMi4xYi5mdyIKK0ZJTEVTXyR7UE59LXdoZW5jZS1saWNlbnNlID0gIi9saWIvZmlybXdhcmUvV0hFTkNFIgorCitSREVQRU5EU18ke1BOfS1ibngyLW1pcHMgKz0gIiR7UE59LXdoZW5jZS1saWNlbnNlIgorCiAjIEZvciBpd2x3aWZpCitMSUNFTlNFXyR7UE59LWl3bHdpZmkgICAgICAgICAgID0gIkZpcm13YXJlLWl3bHdpZmlfZmlybXdhcmUiCiBMSUNFTlNFXyR7UE59LWl3bHdpZmktMTM1LTYgICAgID0gIkZpcm13YXJlLWl3bHdpZmlfZmlybXdhcmUiCiBMSUNFTlNFXyR7UE59LWl3bHdpZmktMzE2MC03ICAgID0gIkZpcm13YXJlLWl3bHdpZmlfZmlybXdhcmUiCiBMSUNFTlNFXyR7UE59LWl3bHdpZmktMzE2MC04ICAgID0gIkZpcm13YXJlLWl3bHdpZmlfZmlybXdhcmUiCkBAIC00MzMsNyArNDg1LDcgQEAKIExJQ0VOU0VfJHtQTn0taXdsd2lmaS02MDAwLTQgICAgPSAiRmlybXdhcmUtaXdsd2lmaV9maXJtd2FyZSIKIExJQ0VOU0VfJHtQTn0taXdsd2lmaS02MDAwZzJhLTUgPSAiRmlybXdhcmUtaXdsd2lmaV9maXJtd2FyZSIKIExJQ0VOU0VfJHtQTn0taXdsd2lmaS02MDAwZzJhLTYgPSAiRmlybXdhcmUtaXdsd2lmaV9maXJtd2FyZSIKLUxJQ0VOU0VfJHtQTn0taXdsd2lmaS02MDAwZzJhLTUgPSAiRmlybXdhcmUtaXdsd2lmaV9maXJtd2FyZSIKK0xJQ0VOU0VfJHtQTn0taXdsd2lmaS02MDAwZzJiLTUgPSAiRmlybXdhcmUtaXdsd2lmaV9maXJtd2FyZSIKIExJQ0VOU0VfJHtQTn0taXdsd2lmaS02MDAwZzJiLTYgPSAiRmlybXdhcmUtaXdsd2lmaV9maXJtd2FyZSIKIExJQ0VOU0VfJHtQTn0taXdsd2lmaS02MDUwLTQgICAgPSAiRmlybXdhcmUtaXdsd2lmaV9maXJtd2FyZSIKIExJQ0VOU0VfJHtQTn0taXdsd2lmaS02MDUwLTUgICAgPSAiRmlybXdhcmUtaXdsd2lmaV9maXJtd2FyZSIKQEAgLTQ0Miw2ICs0OTQsOCBAQAogTElDRU5TRV8ke1BOfS1pd2x3aWZpLTcyNjVkICAgICA9ICJGaXJtd2FyZS1pd2x3aWZpX2Zpcm13YXJlIgogTElDRU5TRV8ke1BOfS1pd2x3aWZpLTgwMDBjICAgICA9ICJGaXJtd2FyZS1pd2x3aWZpX2Zpcm13YXJlIgogTElDRU5TRV8ke1BOfS1pd2x3aWZpLTgyNjUgICAgICA9ICJGaXJtd2FyZS1pd2x3aWZpX2Zpcm13YXJlIgorTElDRU5TRV8ke1BOfS1pd2x3aWZpLW1pc2MgICAgICA9ICJGaXJtd2FyZS1pd2x3aWZpX2Zpcm13YXJlIgorTElDRU5TRV8ke1BOfS1pd2x3aWZpLWxpY2Vuc2UgICA9ICJGaXJtd2FyZS1pd2x3aWZpX2Zpcm13YXJlIgogCiAKIEZJTEVTXyR7UE59LWl3bHdpZmktbGljZW5zZSA9ICIvbGliL2Zpcm13YXJlL0xJQ0VOQ0UuaXdsd2lmaV9maXJtd2FyZSIKQEAgLTQ2MSw2ICs1MTUsNyBAQAogRklMRVNfJHtQTn0taXdsd2lmaS03MjY1ZCAgID0gIi9saWIvZmlybXdhcmUvaXdsd2lmaS03MjY1RC0qLnVjb2RlIgogRklMRVNfJHtQTn0taXdsd2lmaS04MDAwYyAgID0gIi9saWIvZmlybXdhcmUvaXdsd2lmaS04MDAwQy0qLnVjb2RlIgogRklMRVNfJHtQTn0taXdsd2lmaS04MjY1ICAgPSAiL2xpYi9maXJtd2FyZS9pd2x3aWZpLTgyNjUtKi51Y29kZSIKK0ZJTEVTXyR7UE59LWl3bHdpZmktbWlzYyAgID0gIi9saWIvZmlybXdhcmUvaXdsd2lmaS0qLnVjb2RlIgogCiBSREVQRU5EU18ke1BOfS1pd2x3aWZpLTEzNS02ICAgICA9ICIke1BOfS1pd2x3aWZpLWxpY2Vuc2UiCiBSREVQRU5EU18ke1BOfS1pd2x3aWZpLTMxNjAtNyAgICA9ICIke1BOfS1pd2x3aWZpLWxpY2Vuc2UiCkBAIC00NjksNyArNTI0LDcgQEAKIFJERVBFTkRTXyR7UE59LWl3bHdpZmktNjAwMC00ICAgID0gIiR7UE59LWl3bHdpZmktbGljZW5zZSIKIFJERVBFTkRTXyR7UE59LWl3bHdpZmktNjAwMGcyYS01ID0gIiR7UE59LWl3bHdpZmktbGljZW5zZSIKIFJERVBFTkRTXyR7UE59LWl3bHdpZmktNjAwMGcyYS02ID0gIiR7UE59LWl3bHdpZmktbGljZW5zZSIKLVJERVBFTkRTXyR7UE59LWl3bHdpZmktNjAwMGcyYS01ID0gIiR7UE59LWl3bHdpZmktbGljZW5zZSIKK1JERVBFTkRTXyR7UE59LWl3bHdpZmktNjAwMGcyYi01ID0gIiR7UE59LWl3bHdpZmktbGljZW5zZSIKIFJERVBFTkRTXyR7UE59LWl3bHdpZmktNjAwMGcyYi02ID0gIiR7UE59LWl3bHdpZmktbGljZW5zZSIKIFJERVBFTkRTXyR7UE59LWl3bHdpZmktNjA1MC00ICAgID0gIiR7UE59LWl3bHdpZmktbGljZW5zZSIKIFJERVBFTkRTXyR7UE59LWl3bHdpZmktNjA1MC01ICAgID0gIiR7UE59LWl3bHdpZmktbGljZW5zZSIKQEAgLTQ3OCw2ICs1MzMsMTUgQEAKIFJERVBFTkRTXyR7UE59LWl3bHdpZmktNzI2NWQgICAgID0gIiR7UE59LWl3bHdpZmktbGljZW5zZSIKIFJERVBFTkRTXyR7UE59LWl3bHdpZmktODAwMGMgICAgID0gIiR7UE59LWl3bHdpZmktbGljZW5zZSIKIFJERVBFTkRTXyR7UE59LWl3bHdpZmktODI2NSAgICAgID0gIiR7UE59LWl3bHdpZmktbGljZW5zZSIKK1JERVBFTkRTXyR7UE59LWl3bHdpZmktbWlzYyAgICAgID0gIiR7UE59LWl3bHdpZmktbGljZW5zZSIKKworIyAtaXdsd2lmaS1taXNjIGlzIGEgImNhdGNoIGFsbCIgcGFja2FnZSB0aGF0IGluY2x1ZGVzIGFsbCB0aGUgaXdsd2lmaQorIyBmaXJtd2FyZXMgdGhhdCBhcmUgbm90IGFscmVhZHkgaW5jbHVkZWQgaW4gb3RoZXIgLWl3bHdpZmktIHBhY2thZ2VzLgorIyAtaXdsd2lmaSBpcyBhIHZpcnR1YWwgcGFja2FnZSB0aGF0IGRlcGVuZHMgdXBvbiBhbGwgaXdsd2lmaSBwYWNrYWdlcy4KKyMgVGhlc2UgYXJlIGRpc3RpbmN0IGluIG9yZGVyIHRvIGFsbG93IHRoZSAtbWlzYyBmaXJtd2FyZXMgdG8gYmUgaW5zdGFsbGVkCisjIHdpdGhvdXQgcHVsbGluZyBpbiBldmVyeSBvdGhlciBpd2x3aWZpIHBhY2thZ2UuCitBTExPV19FTVBUWV8ke1BOfS1pd2x3aWZpID0gIjEiCitBTExPV19FTVBUWV8ke1BOfS1pd2x3aWZpLW1pc2MgPSAiMSIKIAogIyBIYW5kbGUgcGFja2FnZSB1cGRhdGluZyBmb3IgdGhlIG5ld2x5IG1lcmdlZCBpd2x3aWZpIGdyb3VwaW5ncwogUlBST1ZJREVTXyR7UE59LWl3bHdpZmktNzI2NSA9ICIke1BOfS1pd2x3aWZpLTcyNjUtOCAke1BOfS1pd2x3aWZpLTcyNjUtOSIKQEAgLTQ4OSwxMiArNTUzLDE0IEBACiBSQ09ORkxJQ1RTXyR7UE59LWl3bHdpZmktNzI2MCA9ICIke1BOfS1pd2x3aWZpLTcyNjAtNyAke1BOfS1pd2x3aWZpLTcyNjAtOCAke1BOfS1pd2x3aWZpLTcyNjAtOSIKIAogTElDRU5TRV8ke1BOfS1pOTE1ICAgICAgID0gIkZpcm13YXJlLWk5MTUiCitMSUNFTlNFXyR7UE59LWk5MTUtbGljZW5zZSA9ICJGaXJtd2FyZS1pOTE1IgogRklMRVNfJHtQTn0taTkxNS1saWNlbnNlID0gIi9saWIvZmlybXdhcmUvTElDRU5TRS5pOTE1IgogRklMRVNfJHtQTn0taTkxNSAgICAgICAgID0gIi9saWIvZmlybXdhcmUvaTkxNSIKIFJERVBFTkRTXyR7UE59LWk5MTUgICAgICA9ICIke1BOfS1pOTE1LWxpY2Vuc2UiCiAKIEZJTEVTXyR7UE59LWFkc3Atc3N0LWxpY2Vuc2UgICAgICA9ICIvbGliL2Zpcm13YXJlL0xJQ0VOQ0UuYWRzcF9zc3QiCiBMSUNFTlNFXyR7UE59LWFkc3Atc3N0ICAgICAgICAgICAgPSAiRmlybXdhcmUtYWRzcF9zc3QiCitMSUNFTlNFXyR7UE59LWFkc3Atc3N0LWxpY2Vuc2UgICAgPSAiRmlybXdhcmUtYWRzcF9zc3QiCiBGSUxFU18ke1BOfS1hZHNwLXNzdCAgICAgICAgICAgICAgPSAiL2xpYi9maXJtd2FyZS9pbnRlbC9kc3BfZncqIgogUkRFUEVORFNfJHtQTn0tYWRzcC1zc3QgICAgICAgICAgID0gIiR7UE59LWFkc3Atc3N0LWxpY2Vuc2UiCiAKQEAgLTUzNCw2ICs2MDAsNyBAQAogICAgICYgRmlybXdhcmUtcjhhNzc5eF91c2IzIFwKICAgICAmIEZpcm13YXJlLXJhZGVvbiBcCiAgICAgJiBGaXJtd2FyZS1yYWxpbmtfYV9tZWRpYXRla19jb21wYW55X2Zpcm13YXJlIFwKKyAgICAmIEZpcm13YXJlLXJhbGluay1maXJtd2FyZSBcCiAgICAgJiBGaXJtd2FyZS1zaWFubyBcCiAgICAgJiBGaXJtd2FyZS10ZGE3NzA2LWZpcm13YXJlIFwKICAgICAmIEZpcm13YXJlLXRpLWNvbm5lY3Rpdml0eSBcCkBAIC01NDMsMTQgKzYxMCwyMCBAQAogICAgICYgRmlybXdhcmUteGM0MDAwIFwKICAgICAmIEZpcm13YXJlLXhjNTAwMCBcCiAgICAgJiBGaXJtd2FyZS14YzUwMDBjIFwKKyAgICAmIFdIRU5DRSBcCiAiCiAKIEZJTEVTXyR7UE59LWxpY2Vuc2UgKz0gIi9saWIvZmlybXdhcmUvTElDRU4qIgogRklMRVNfJHtQTn0gKz0gIi9saWIvZmlybXdhcmUvKiIKIFJERVBFTkRTXyR7UE59ICs9ICIke1BOfS1saWNlbnNlIgorUkRFUEVORFNfJHtQTn0gKz0gIiR7UE59LXdoZW5jZS1saWNlbnNlIgogCiAjIE1ha2UgbGludXgtZmlybXdhcmUgZGVwZW5kIG9uIGFsbCBvZiB0aGUgc3BsaXQtb3V0IHBhY2thZ2VzLgorIyBNYWtlIGxpbnV4LWZpcm13YXJlLWl3bHdpZmkgZGVwZW5kIG9uIGFsbCBvZiB0aGUgc3BsaXQtb3V0IGl3bHdpZmkgcGFja2FnZXMuCiBweXRob24gcG9wdWxhdGVfcGFja2FnZXNfcHJlcGVuZCAoKSB7CiAgICAgZmlybXdhcmVfcGtncyA9IG9lLnV0aWxzLnBhY2thZ2VzX2ZpbHRlcl9vdXRfc3lzdGVtKGQpCiAgICAgZC5hcHBlbmRWYXIoJ1JERVBFTkRTX2xpbnV4LWZpcm13YXJlJywgJyAnICsgJyAnLmpvaW4oZmlybXdhcmVfcGtncykpCisKKyAgICBpd2x3aWZpX3BrZ3MgPSBmaWx0ZXIobGFtYmRhIHg6IHguZmluZCgnLWl3bHdpZmktJykgIT0gLTEsIGZpcm13YXJlX3BrZ3MpCisgICAgZC5hcHBlbmRWYXIoJ1JERVBFTkRTX2xpbnV4LWZpcm13YXJlLWl3bHdpZmknLCAnICcgKyAnICcuam9pbihpd2x3aWZpX3BrZ3MpKQogfQpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1rZXJuZWwvbGludXgtbGliYy1oZWFkZXJzL2xpbnV4LWxpYmMtaGVhZGVycy5pbmMgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWtlcm5lbC9saW51eC1saWJjLWhlYWRlcnMvbGludXgtbGliYy1oZWFkZXJzLmluYwppbmRleCAyYmE2ZWQ1Li4wNzhkNzUyIDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWtlcm5lbC9saW51eC1saWJjLWhlYWRlcnMvbGludXgtbGliYy1oZWFkZXJzLmluYworKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWtlcm5lbC9saW51eC1saWJjLWhlYWRlcnMvbGludXgtbGliYy1oZWFkZXJzLmluYwpAQCAtMTgsOSArMTgsMTAgQEAKICMgQnV0IHlvdSBoYXZlIHNvbWUga2VybmVsIGhlYWRlcnMgeW91IG5lZWQgZm9yIHNvbWUgZHJpdmVyPyBUaGF0IGlzIGZpbmUKICMgYnV0IGdldCB0aGVtIGZyb20gU1RBR0lOR19LRVJORUxfRElSIHdoZXJlIHRoZSBrZXJuZWwgaW5zdGFsbHMgaXRzZWxmLgogIyBUaGlzIHdpbGwgbWFrZSB0aGUgcGFja2FnZSB1c2luZyB0aGVtIG1hY2hpbmUgc3BlY2lmaWMgYnV0IHRoaXMgaXMgbXVjaAotIyBiZXR0ZXIgdGhhbiBoYXZpbmcgYSBtYWNoaW5lIHNwZWNpZmljIEMgbGlicmFyeS4gVGhpcyBkb2VzIG1lYW4geW91ciAKLSMgcmVjaXBlIG5lZWRzIGEgREVQRU5EUyArPSAidmlydHVhbC9rZXJuZWwiIGJ1dCBhZ2FpbiwgdGhhdCBpcyBmaW5lIGFuZAotIyBtYWtlcyB0b3RhbCBzZW5zZS4KKyMgYmV0dGVyIHRoYW4gaGF2aW5nIGEgbWFjaGluZSBzcGVjaWZpYyBDIGxpYnJhcnkuIFRoaXMgZG9lcyBtZWFuIHlvdXIKKyMgcmVjaXBlIG5lZWRzIGEKKyMgICAgZG9fY29uZmlndXJlW2RlcGVuZHNdICs9ICJ2aXJ0dWFsL2tlcm5lbDpkb19zaGFyZWRfd29ya2RpciIKKyMgYnV0IGFnYWluLCB0aGF0IGlzIGZpbmUgYW5kIG1ha2VzIHRvdGFsIHNlbnNlLgogIwogIyBUaGVyZSBjYW4gYWxzbyBiZSBhIGNhc2Ugd2hlcmUgeW91ciBrZXJuZWwgZXh0cmVtZWx5IG9sZCBhbmQgeW91IHdhbnQKICMgYW4gb2xkZXIgbGliYyBBQkkgZm9yIHRoYXQgb2xkIGtlcm5lbC4gVGhlIGhlYWRlcnMgaW5zdGFsbGVkIGJ5IHRoaXMKQEAgLTQ5LDggKzUwLDcgQEAKIAogUyA9ICIke1dPUktESVJ9L2xpbnV4LSR7UFZ9IgogCi0jIEZvciB0aGUga2VybmVsLCB3ZSBkb24ndCB3YW50IHRoZSAnLWUgTUFLRUZMQUdTPScgaW4gRVhUUkFfT0VNQUtFLgotRVhUUkFfT0VNQUtFID0gIiIKK0VYVFJBX09FTUFLRSA9ICIgSE9TVENDPSIke0JVSUxEX0NDfSIgSE9TVENQUD0iJHtCVUlMRF9DUFB9IiIKIAogZG9fY29uZmlndXJlKCkgewogCW9lX3J1bm1ha2UgYWxsbm9jb25maWcKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMta2VybmVsL2xpbnV4LWxpYmMtaGVhZGVycy9saW51eC1saWJjLWhlYWRlcnMvMDAwMS1saWJjLWNvbXBhdC5oLWZpeC1zb21lLWlzc3Vlcy1hcmlzaW5nLWZyb20taW42LmgucGF0Y2ggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWtlcm5lbC9saW51eC1saWJjLWhlYWRlcnMvbGludXgtbGliYy1oZWFkZXJzLzAwMDEtbGliYy1jb21wYXQuaC1maXgtc29tZS1pc3N1ZXMtYXJpc2luZy1mcm9tLWluNi5oLnBhdGNoCmluZGV4IDZhZDQ3OTguLjhiYjc3NWMgMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMta2VybmVsL2xpbnV4LWxpYmMtaGVhZGVycy9saW51eC1saWJjLWhlYWRlcnMvMDAwMS1saWJjLWNvbXBhdC5oLWZpeC1zb21lLWlzc3Vlcy1hcmlzaW5nLWZyb20taW42LmgucGF0Y2gKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1rZXJuZWwvbGludXgtbGliYy1oZWFkZXJzL2xpbnV4LWxpYmMtaGVhZGVycy8wMDAxLWxpYmMtY29tcGF0LmgtZml4LXNvbWUtaXNzdWVzLWFyaXNpbmctZnJvbS1pbjYuaC5wYXRjaApAQCAtMTEsMTAgKzExLDEwIEBACiAgaW5jbHVkZS91YXBpL2xpbnV4L2xpYmMtY29tcGF0LmggfCAyNSArKysrKysrKy0tLS0tLS0tLS0tLS0tLS0tCiAgMSBmaWxlIGNoYW5nZWQsIDggaW5zZXJ0aW9ucygrKSwgMTcgZGVsZXRpb25zKC0pCiAKLUluZGV4OiBsaW51eC00LjQvaW5jbHVkZS91YXBpL2xpbnV4L2xpYmMtY29tcGF0LmgKK0luZGV4OiBsaW51eC00LjgtcmM0L2luY2x1ZGUvdWFwaS9saW51eC9saWJjLWNvbXBhdC5oCiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLS0gbGludXgtNC40Lm9yaWcvaW5jbHVkZS91YXBpL2xpbnV4L2xpYmMtY29tcGF0LmgKLSsrKyBsaW51eC00LjQvaW5jbHVkZS91YXBpL2xpbnV4L2xpYmMtY29tcGF0LmgKKy0tLSBsaW51eC00LjgtcmM0Lm9yaWcvaW5jbHVkZS91YXBpL2xpbnV4L2xpYmMtY29tcGF0LmgKKysrKyBsaW51eC00LjgtcmM0L2luY2x1ZGUvdWFwaS9saW51eC9saWJjLWNvbXBhdC5oCiBAQCAtNDgsMTMgKzQ4LDEyIEBACiAgI2lmbmRlZiBfVUFQSV9MSUJDX0NPTVBBVF9ICiAgI2RlZmluZSBfVUFQSV9MSUJDX0NPTVBBVF9ICkBAIC0yMywxNiArMjMsMTcgQEAKIC0jaWYgZGVmaW5lZChfX0dMSUJDX18pCiArI2lmbmRlZiBfX0tFUk5FTF9fIC8qIHdlJ3JlIHVzZWQgZnJvbSB1c2Vyc3BhY2UgKi8KICAKLS0vKiBDb29yZGluYXRlIHdpdGggZ2xpYmMgbmV0aW5ldC9pbi5oIGhlYWRlci4gKi8KLSsvKiBDb29yZGluYXRlIHdpdGggbGliYyBuZXRpbmV0L2luLmggaGVhZGVyLiAqLwotICNpZiBkZWZpbmVkKF9ORVRJTkVUX0lOX0gpCistLyogQ29vcmRpbmF0ZSB3aXRoIGdsaWJjIG5ldC9pZi5oIGhlYWRlci4gKi8KKy0jaWYgZGVmaW5lZChfTkVUX0lGX0gpICYmIGRlZmluZWQoX19VU0VfTUlTQykKKysvKiBDb29yZGluYXRlIHdpdGggbGliYyBuZXQvaWYuaCBoZWFkZXIuICovCisrI2lmIGRlZmluZWQoX05FVF9JRl9IKQogIAogLS8qIEdMSUJDIGhlYWRlcnMgaW5jbHVkZWQgZmlyc3Qgc28gZG9uJ3QgZGVmaW5lIGFueXRoaW5nCiArLyogTElCQyBoZWFkZXJzIGluY2x1ZGVkIGZpcnN0IHNvIGRvbid0IGRlZmluZSBhbnl0aGluZwogICAqIHRoYXQgd291bGQgYWxyZWFkeSBiZSBkZWZpbmVkLiAqLwotICNkZWZpbmUgX19VQVBJX0RFRl9JTl9BRERSCQkwCi0gI2RlZmluZSBfX1VBUElfREVGX0lOX0lQUFJPVE8JCTAKLUBAIC02NCwxNSArNjMsNyBAQAorIAorICNkZWZpbmUgX19VQVBJX0RFRl9JRl9JRkNPTkYgMAorQEAgLTk4LDE1ICs5Nyw3IEBACiAgI2RlZmluZSBfX1VBUElfREVGX0lOX0NMQVNTCQkwCiAgCiAgI2RlZmluZSBfX1VBUElfREVGX0lONl9BRERSCQkwCkBAIC00OCw3ICs0OSw3IEBACiAgI2RlZmluZSBfX1VBUElfREVGX1NPQ0tBRERSX0lONgkJMAogICNkZWZpbmUgX19VQVBJX0RFRl9JUFY2X01SRVEJCTAKICAjZGVmaW5lIF9fVUFQSV9ERUZfSVBQUk9UT19WNgkJMAotQEAgLTgwLDEwICs3MSwxMCBAQAorQEAgLTExNCwxMCArMTA1LDEwIEBACiAgI2RlZmluZSBfX1VBUElfREVGX0lONl9QS1RJTkZPCQkwCiAgI2RlZmluZSBfX1VBUElfREVGX0lQNl9NVFVJTkZPCQkwCiAgCkBAIC02MSw3ICs2Miw3IEBACiAgICogX19VQVBJX0RFRl8qIGRlZmluZXMgYW5kIGFkanVzdCBhcHByb3ByaWF0ZWx5LiAqLwogICNkZWZpbmUgX19VQVBJX0RFRl9JTl9BRERSCQkxCiAgI2RlZmluZSBfX1VBUElfREVGX0lOX0lQUFJPVE8JCTEKLUBAIC05Myw3ICs4NCw3IEBACitAQCAtMTI3LDcgKzExOCw3IEBACiAgI2RlZmluZSBfX1VBUElfREVGX0lOX0NMQVNTCQkxCiAgCiAgI2RlZmluZSBfX1VBUElfREVGX0lONl9BRERSCQkxCkBAIC03MCwxNiArNzEsMTYgQEAKICAgKiBjb29yZGluYXRlLiAqLwogICNkZWZpbmUgX19VQVBJX0RFRl9JTjZfQUREUl9BTFQJCTEKICAjZGVmaW5lIF9fVUFQSV9ERUZfU09DS0FERFJfSU42CQkxCi1AQCAtMTE1LDcgKzEwNiw3IEBACitAQCAtMTQ5LDcgKzE0MCw3IEBACiAgLyogSWYgd2UgZGlkIG5vdCBzZWUgYW55IGhlYWRlcnMgZnJvbSBhbnkgc3VwcG9ydGVkIEMgbGlicmFyaWVzLAogICAqIG9yIHdlIGFyZSBiZWluZyBpbmNsdWRlZCBpbiB0aGUga2VybmVsLCB0aGVuIGRlZmluZSBldmVyeXRoaW5nCiAgICogdGhhdCB3ZSBuZWVkLiAqLwogLSNlbHNlIC8qICFkZWZpbmVkKF9fR0xJQkNfXykgKi8KICsjZWxzZSAvKiBfX0tFUk5FTF9fICovCiAgCi0gLyogRGVmaW5pdGlvbnMgZm9yIGluLmggKi8KLSAjZGVmaW5lIF9fVUFQSV9ERUZfSU5fQUREUgkJMQotQEAgLTEzOCw2ICsxMjksNiBAQAorIC8qIERlZmluaXRpb25zIGZvciBpZi5oICovCisgI2RlZmluZSBfX1VBUElfREVGX0lGX0lGQ09ORiAxCitAQCAtMTgyLDYgKzE3Myw2IEBACiAgLyogRGVmaW5pdGlvbnMgZm9yIHhhdHRyLmggKi8KICAjZGVmaW5lIF9fVUFQSV9ERUZfWEFUVFIJCTEKICAKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMta2VybmVsL2xpbnV4LWxpYmMtaGVhZGVycy9saW51eC1saWJjLWhlYWRlcnMvMDAwMi1saWJjLWNvbXBhdC5oLXByZXZlbnQtcmVkZWZpbml0aW9uLW9mLXN0cnVjdC1ldGhoZHIucGF0Y2ggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWtlcm5lbC9saW51eC1saWJjLWhlYWRlcnMvbGludXgtbGliYy1oZWFkZXJzLzAwMDItbGliYy1jb21wYXQuaC1wcmV2ZW50LXJlZGVmaW5pdGlvbi1vZi1zdHJ1Y3QtZXRoaGRyLnBhdGNoCmluZGV4IGM2MTcwOTMuLjhkYzFlZGMgMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMta2VybmVsL2xpbnV4LWxpYmMtaGVhZGVycy9saW51eC1saWJjLWhlYWRlcnMvMDAwMi1saWJjLWNvbXBhdC5oLXByZXZlbnQtcmVkZWZpbml0aW9uLW9mLXN0cnVjdC1ldGhoZHIucGF0Y2gKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1rZXJuZWwvbGludXgtbGliYy1oZWFkZXJzL2xpbnV4LWxpYmMtaGVhZGVycy8wMDAyLWxpYmMtY29tcGF0LmgtcHJldmVudC1yZWRlZmluaXRpb24tb2Ytc3RydWN0LWV0aGhkci5wYXRjaApAQCAtMTEsMTAgKzExLDEwIEBACiAgaW5jbHVkZS91YXBpL2xpbnV4L2xpYmMtY29tcGF0LmggfCA2ICsrKysrKwogIDIgZmlsZXMgY2hhbmdlZCwgOSBpbnNlcnRpb25zKCspLCAxIGRlbGV0aW9uKC0pCiAKLWRpZmYgLS1naXQgYS9pbmNsdWRlL3VhcGkvbGludXgvaWZfZXRoZXIuaCBiL2luY2x1ZGUvdWFwaS9saW51eC9pZl9ldGhlci5oCi1pbmRleCBhYTYzZWQwLi5lOTRkYTU3IDEwMDY0NAotLS0tIGEvaW5jbHVkZS91YXBpL2xpbnV4L2lmX2V0aGVyLmgKLSsrKyBiL2luY2x1ZGUvdWFwaS9saW51eC9pZl9ldGhlci5oCitJbmRleDogbGludXgtNC44LXJjNC9pbmNsdWRlL3VhcGkvbGludXgvaWZfZXRoZXIuaAorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGxpbnV4LTQuOC1yYzQub3JpZy9pbmNsdWRlL3VhcGkvbGludXgvaWZfZXRoZXIuaAorKysrIGxpbnV4LTQuOC1yYzQvaW5jbHVkZS91YXBpL2xpbnV4L2lmX2V0aGVyLmgKIEBAIC0yMiw2ICsyMiw3IEBACiAgI2RlZmluZSBfVUFQSV9MSU5VWF9JRl9FVEhFUl9ICiAgCkBAIC0yMyw3ICsyMyw3IEBACiAgCiAgLyoKICAgKglJRUVFIDgwMi4zIEV0aGVybmV0IG1hZ2ljIGNvbnN0YW50cy4gIFRoZSBmcmFtZSBzaXplcyBvbWl0IHRoZSBwcmVhbWJsZQotQEAgLTEzNCwxMSArMTM1LDEyIEBACitAQCAtMTM4LDExICsxMzksMTIgQEAKICAgKglUaGlzIGlzIGFuIEV0aGVybmV0IGZyYW1lIGhlYWRlci4KICAgKi8KICAKQEAgLTM3LDEwICszNywxMCBAQAogKyNlbmRpZgogIAogICNlbmRpZiAvKiBfVUFQSV9MSU5VWF9JRl9FVEhFUl9IICovCi1kaWZmIC0tZ2l0IGEvaW5jbHVkZS91YXBpL2xpbnV4L2xpYmMtY29tcGF0LmggYi9pbmNsdWRlL3VhcGkvbGludXgvbGliYy1jb21wYXQuaAotaW5kZXggYWZlMTVjMi4uN2QwYzc4YSAxMDA2NDQKLS0tLSBhL2luY2x1ZGUvdWFwaS9saW51eC9saWJjLWNvbXBhdC5oCi0rKysgYi9pbmNsdWRlL3VhcGkvbGludXgvbGliYy1jb21wYXQuaAorSW5kZXg6IGxpbnV4LTQuOC1yYzQvaW5jbHVkZS91YXBpL2xpbnV4L2xpYmMtY29tcGF0LmgKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBsaW51eC00LjgtcmM0Lm9yaWcvaW5jbHVkZS91YXBpL2xpbnV4L2xpYmMtY29tcGF0LmgKKysrKyBsaW51eC00LjgtcmM0L2luY2x1ZGUvdWFwaS9saW51eC9saWJjLWNvbXBhdC5oCiBAQCAtNTAsNiArNTAsMTIgQEAKICAKICAjaWZuZGVmIF9fS0VSTkVMX18gLyogd2UncmUgdXNlZCBmcm9tIHVzZXJzcGFjZSAqLwpAQCAtNTEsOSArNTEsNiBAQAogKyNkZWZpbmUgX19VQVBJX0RFRl9FVEhIRFIgMQogKyNlbmRpZgogKwotIC8qIENvb3JkaW5hdGUgd2l0aCBsaWJjIG5ldGluZXQvaW4uaCBoZWFkZXIuICovCi0gI2lmIGRlZmluZWQoX05FVElORVRfSU5fSCkKKyAvKiBDb29yZGluYXRlIHdpdGggbGliYyBuZXQvaWYuaCBoZWFkZXIuICovCisgI2lmIGRlZmluZWQoX05FVF9JRl9IKSAmJiBkZWZpbmVkKF9fVVNFX01JU0MpCiAgCi0tLSAKLTIuNi40Ci0KZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMta2VybmVsL2xpbnV4LWxpYmMtaGVhZGVycy9saW51eC1saWJjLWhlYWRlcnMvMDAwMy1yZW1vdmUtaW5jbHVzaW9uLW9mLXN5c2luZm8uaC1pbi1rZXJuZWwuaC5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMta2VybmVsL2xpbnV4LWxpYmMtaGVhZGVycy9saW51eC1saWJjLWhlYWRlcnMvMDAwMy1yZW1vdmUtaW5jbHVzaW9uLW9mLXN5c2luZm8uaC1pbi1rZXJuZWwuaC5wYXRjaAppbmRleCA2ZDllOGQ4Li5iNWM0ZTE3IDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWtlcm5lbC9saW51eC1saWJjLWhlYWRlcnMvbGludXgtbGliYy1oZWFkZXJzLzAwMDMtcmVtb3ZlLWluY2x1c2lvbi1vZi1zeXNpbmZvLmgtaW4ta2VybmVsLmgucGF0Y2gKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1rZXJuZWwvbGludXgtbGliYy1oZWFkZXJzL2xpbnV4LWxpYmMtaGVhZGVycy8wMDAzLXJlbW92ZS1pbmNsdXNpb24tb2Ytc3lzaW5mby5oLWluLWtlcm5lbC5oLnBhdGNoCkBAIC0xMywxMCArMTMsMTAgQEAKICBpbmNsdWRlL3VhcGkvbGludXgva2VybmVsLmggfCAyICsrCiAgMSBmaWxlIGNoYW5nZWQsIDIgaW5zZXJ0aW9ucygrKQogCi1kaWZmIC0tZ2l0IGEvaW5jbHVkZS91YXBpL2xpbnV4L2tlcm5lbC5oIGIvaW5jbHVkZS91YXBpL2xpbnV4L2tlcm5lbC5oCi1pbmRleCAzMjFlMzk5Li5lOGZmODIxIDEwMDY0NAotLS0tIGEvaW5jbHVkZS91YXBpL2xpbnV4L2tlcm5lbC5oCi0rKysgYi9pbmNsdWRlL3VhcGkvbGludXgva2VybmVsLmgKK0luZGV4OiBsaW51eC00LjgtcmM0L2luY2x1ZGUvdWFwaS9saW51eC9rZXJuZWwuaAorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGxpbnV4LTQuOC1yYzQub3JpZy9pbmNsdWRlL3VhcGkvbGludXgva2VybmVsLmgKKysrKyBsaW51eC00LjgtcmM0L2luY2x1ZGUvdWFwaS9saW51eC9rZXJuZWwuaAogQEAgLTEsNyArMSw5IEBACiAgI2lmbmRlZiBfVUFQSV9MSU5VWF9LRVJORUxfSAogICNkZWZpbmUgX1VBUElfTElOVVhfS0VSTkVMX0gKQEAgLTI3LDYgKzI3LDMgQEAKICAKICAvKgogICAqICdrZXJuZWwuaCcgY29udGFpbnMgc29tZSBvZnRlbi11c2VkIGZ1bmN0aW9uIHByb3RvdHlwZXMgZXRjCi0tLSAKLTIuNi40Ci0KZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMta2VybmVsL2xpbnV4LWxpYmMtaGVhZGVycy9saW51eC1saWJjLWhlYWRlcnNfNC44LmJiIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1rZXJuZWwvbGludXgtbGliYy1oZWFkZXJzL2xpbnV4LWxpYmMtaGVhZGVyc180LjguYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzdlMDg3MAotLS0gL2Rldi9udWxsCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMta2VybmVsL2xpbnV4LWxpYmMtaGVhZGVycy9saW51eC1saWJjLWhlYWRlcnNfNC44LmJiCkBAIC0wLDAgKzEsMTIgQEAKK3JlcXVpcmUgbGludXgtbGliYy1oZWFkZXJzLmluYworCitQViA9ICI0LjgiCisKK1NSQ19VUklfYXBwZW5kX2xpYmMtbXVzbCA9ICJcCisgICAgZmlsZTovLzAwMDEtbGliYy1jb21wYXQuaC1maXgtc29tZS1pc3N1ZXMtYXJpc2luZy1mcm9tLWluNi5oLnBhdGNoIFwKKyAgICBmaWxlOi8vMDAwMi1saWJjLWNvbXBhdC5oLXByZXZlbnQtcmVkZWZpbml0aW9uLW9mLXN0cnVjdC1ldGhoZHIucGF0Y2ggXAorICAgIGZpbGU6Ly8wMDAzLXJlbW92ZS1pbmNsdXNpb24tb2Ytc3lzaW5mby5oLWluLWtlcm5lbC5oLnBhdGNoIFwKKyAgICIKKworU1JDX1VSSVttZDVzdW1dID0gImMxYWYwYWZiZDNkZjM1YzFjY2RjN2E1MTE4Y2QyZDA3IgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjNlOTE1MDA2NWYxOTNkM2Q5NGJjZjQ2YTFmZTlmMDMzYzdlZjcxMjJhYjcxZDc1YTdmYjVhMmYwYzlhN2UxMWEiCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWtlcm5lbC9saW51eC9rZXJuZWwtZGV2c3JjLmJiIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1rZXJuZWwvbGludXgva2VybmVsLWRldnNyYy5iYgppbmRleCAxOTZjOGM3Li4wZmRkMGFkIDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWtlcm5lbC9saW51eC9rZXJuZWwtZGV2c3JjLmJiCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMta2VybmVsL2xpbnV4L2tlcm5lbC1kZXZzcmMuYmIKQEAgLTI4LDkgKzI4LDYgQEAKIGRvX2NvbXBpbGVbbm9leGVjXSA9ICIxIgogZG9fcG9wdWxhdGVfc3lzcm9vdFtub2V4ZWNdID0gIjEiCiAKLSMgRGVmaW5lIHdoZXJlIHRoZSBrZXJuZWwgaGVhZGVycyBhcmUgaW5zdGFsbGVkIG9uIHRoZSB0YXJnZXQgYXMgd2VsbCBhcyB3aGVyZQotIyB0aGV5IGFyZSBzdGFnZWQuCi1LRVJORUxfU1JDX1BBVEggPSAiL3Vzci9zcmMva2VybmVsIgogUyA9ICIke1NUQUdJTkdfS0VSTkVMX0RJUn0iCiBCID0gIiR7U1RBR0lOR19LRVJORUxfQlVJTERESVJ9IgogCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1kdGIuaW5jIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtZHRiLmluYwppbmRleCA3NGY1ZWY4Li44NTI4ZDY0IDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1kdGIuaW5jCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LWR0Yi5pbmMKQEAgLTMzLDEyICszMywxMyBAQAogZG9faW5zdGFsbF9hcHBlbmQoKSB7CiAJZm9yIERUQiBpbiAke0tFUk5FTF9ERVZJQ0VUUkVFfTsgZG8KIAkJRFRCPWBub3JtYWxpemVfZHRiICIke0RUQn0iYAotCQlEVEJfQkFTRV9OQU1FPWBiYXNlbmFtZSAke0RUQn0gLmR0YmAKKwkJRFRCX0VYVD0ke0RUQiMjKi59CisJCURUQl9CQVNFX05BTUU9YGJhc2VuYW1lICR7RFRCfSAuIiR7RFRCX0VYVH0iYAogCQlmb3IgdHlwZSBpbiAke0tFUk5FTF9JTUFHRVRZUEVfRk9SX01BS0V9OyBkbwogCQkJc3ltbGlua19uYW1lPSR7dHlwZX0iLSIke0tFUk5FTF9JTUFHRV9TWU1MSU5LX05BTUV9CiAJCQlEVEJfU1lNTElOS19OQU1FPWBlY2hvICR7c3ltbGlua19uYW1lfSB8IHNlZCAicy8ke01BQ0hJTkV9LyR7RFRCX0JBU0VfTkFNRX0vZyJgCiAJCQlEVEJfUEFUSD1gZ2V0X3JlYWxfZHRiX3BhdGhfaW5fa2VybmVsICIke0RUQn0iYAotCQkJaW5zdGFsbCAtbSAwNjQ0ICR7RFRCX1BBVEh9ICR7RH0vJHtLRVJORUxfSU1BR0VERVNUfS9kZXZpY2V0cmVlLSR7RFRCX1NZTUxJTktfTkFNRX0uZHRiCisJCQlpbnN0YWxsIC1tIDA2NDQgJHtEVEJfUEFUSH0gJHtEfS8ke0tFUk5FTF9JTUFHRURFU1R9L2RldmljZXRyZWUtJHtEVEJfU1lNTElOS19OQU1FfS4ke0RUQl9FWFR9CiAJCWRvbmUKIAlkb25lCiB9CkBAIC00Niw3ICs0Nyw4IEBACiBkb19kZXBsb3lfYXBwZW5kKCkgewogCWZvciBEVEIgaW4gJHtLRVJORUxfREVWSUNFVFJFRX07IGRvCiAJCURUQj1gbm9ybWFsaXplX2R0YiAiJHtEVEJ9ImAKLQkJRFRCX0JBU0VfTkFNRT1gYmFzZW5hbWUgJHtEVEJ9IC5kdGJgCisJCURUQl9FWFQ9JHtEVEIjIyoufQorCQlEVEJfQkFTRV9OQU1FPWBiYXNlbmFtZSAke0RUQn0gLiIke0RUQl9FWFR9ImAKIAkJZm9yIHR5cGUgaW4gJHtLRVJORUxfSU1BR0VUWVBFX0ZPUl9NQUtFfTsgZG8KIAkJCWJhc2VfbmFtZT0ke3R5cGV9Ii0iJHtLRVJORUxfSU1BR0VfQkFTRV9OQU1FfQogCQkJc3ltbGlua19uYW1lPSR7dHlwZX0iLSIke0tFUk5FTF9JTUFHRV9TWU1MSU5LX05BTUV9CkBAIC01NCw4ICs1Niw4IEBACiAJCQlEVEJfU1lNTElOS19OQU1FPWBlY2hvICR7c3ltbGlua19uYW1lfSB8IHNlZCAicy8ke01BQ0hJTkV9LyR7RFRCX0JBU0VfTkFNRX0vZyJgCiAJCQlEVEJfUEFUSD1gZ2V0X3JlYWxfZHRiX3BhdGhfaW5fa2VybmVsICIke0RUQn0iYAogCQkJaW5zdGFsbCAtZCAke0RFUExPWURJUn0KLQkJCWluc3RhbGwgLW0gMDY0NCAke0RUQl9QQVRIfSAke0RFUExPWURJUn0vJHtEVEJfTkFNRX0uZHRiCi0JCQlsbiAtc2YgJHtEVEJfTkFNRX0uZHRiICR7REVQTE9ZRElSfS8ke0RUQl9TWU1MSU5LX05BTUV9LmR0YgorCQkJaW5zdGFsbCAtbSAwNjQ0ICR7RFRCX1BBVEh9ICR7REVQTE9ZRElSfS8ke0RUQl9OQU1FfS4ke0RUQl9FWFR9CisJCQlsbiAtc2YgJHtEVEJfTkFNRX0uJHtEVEJfRVhUfSAke0RFUExPWURJUn0vJHtEVEJfU1lNTElOS19OQU1FfS4ke0RUQl9FWFR9CiAJCWRvbmUKIAlkb25lCiB9CkBAIC02NSw5ICs2NywxMCBAQAogCWZvciBEVEIgaW4gJHtLRVJORUxfREVWSUNFVFJFRX07IGRvCiAJCWZvciB0eXBlIGluICR7S0VSTkVMX0lNQUdFVFlQRV9GT1JfTUFLRX07IGRvCiAJCQlzeW1saW5rX25hbWU9JHt0eXBlfSItIiR7S0VSTkVMX0lNQUdFX1NZTUxJTktfTkFNRX0KKwkJCURUQl9FWFQ9JHtEVEIjIyoufQogCQkJRFRCX0JBU0VfTkFNRT1gYmFzZW5hbWUgJHtEVEJ9IHwgYXdrIC1GICIuIiAne3ByaW50ICQxfSdgCiAJCQlEVEJfU1lNTElOS19OQU1FPWBlY2hvICR7c3ltbGlua19uYW1lfSB8IHNlZCAicy8ke01BQ0hJTkV9LyR7RFRCX0JBU0VfTkFNRX0vZyJgCi0JCQl1cGRhdGUtYWx0ZXJuYXRpdmVzIC0taW5zdGFsbCAvJHtLRVJORUxfSU1BR0VERVNUfS8ke0RUQl9CQVNFX05BTUV9LmR0YiAke0RUQl9CQVNFX05BTUV9LmR0YiAvYm9vdC9kZXZpY2V0cmVlLSR7RFRCX1NZTUxJTktfTkFNRX0uZHRiICR7S0VSTkVMX1BSSU9SSVRZfSB8fCB0cnVlCisJCQl1cGRhdGUtYWx0ZXJuYXRpdmVzIC0taW5zdGFsbCAvJHtLRVJORUxfSU1BR0VERVNUfS8ke0RUQl9CQVNFX05BTUV9LiR7RFRCX0VYVH0gJHtEVEJfQkFTRV9OQU1FfS4ke0RUQl9FWFR9IC9ib290L2RldmljZXRyZWUtJHtEVEJfU1lNTElOS19OQU1FfS4ke0RUQl9FWFR9ICR7S0VSTkVMX1BSSU9SSVRZfSB8fCB0cnVlCiAJCWRvbmUKIAlkb25lCiB9CkBAIC03Nyw5ICs4MCwxMCBAQAogCWZvciBEVEIgaW4gJHtLRVJORUxfREVWSUNFVFJFRX07IGRvCiAJCWZvciB0eXBlIGluICR7S0VSTkVMX0lNQUdFVFlQRV9GT1JfTUFLRX07IGRvCiAJCQlzeW1saW5rX25hbWU9JHt0eXBlfSItIiR7S0VSTkVMX0lNQUdFX1NZTUxJTktfTkFNRX0KKwkJCURUQl9FWFQ9JHtEVEIjIyoufQogCQkJRFRCX0JBU0VfTkFNRT1gYmFzZW5hbWUgJHtEVEJ9IHwgYXdrIC1GICIuIiAne3ByaW50ICQxfSdgCiAJCQlEVEJfU1lNTElOS19OQU1FPWBlY2hvICR7c3ltbGlua19uYW1lfSB8IHNlZCAicy8ke01BQ0hJTkV9LyR7RFRCX0JBU0VfTkFNRX0vZyJgCi0JCQl1cGRhdGUtYWx0ZXJuYXRpdmVzIC0tcmVtb3ZlICR7RFRCX0JBU0VfTkFNRX0uZHRiIC9ib290L2RldmljZXRyZWUtJHtEVEJfU1lNTElOS19OQU1FfS5kdGIgJHtLRVJORUxfUFJJT1JJVFl9IHx8IHRydWUKKwkJCXVwZGF0ZS1hbHRlcm5hdGl2ZXMgLS1yZW1vdmUgJHtEVEJfQkFTRV9OQU1FfS4ke0RUQl9FWFR9IC9ib290L2RldmljZXRyZWUtJHtEVEJfU1lNTElOS19OQU1FfS4ke0RUQl9FWFR9ICR7S0VSTkVMX1BSSU9SSVRZfSB8fCB0cnVlCiAJCWRvbmUKIAlkb25lCiB9CmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1kdW1teS5iYiBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LWR1bW15LmJiCmluZGV4IGNjMGU0ZTYuLjk5NGFjNzQgMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LWR1bW15LmJiCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LWR1bW15LmJiCkBAIC0xOCw2ICsxOCw4IEBACiBBTExPV19FTVBUWV9rZXJuZWwtbW9kdWxlcyA9ICIxIgogREVTQ1JJUFRJT05fa2VybmVsLW1vZHVsZXMgPSAiS2VybmVsIG1vZHVsZXMgbWV0YSBwYWNrYWdlIgogCitJTkhJQklUX0RFRkFVTFRfREVQUyA9ICIxIgorCiAjQ09NUEFUSUJMRV9NQUNISU5FID0gInlvdXJfbWFjaGluZSIKIAogUFIgPSAicjEiCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC15b2N0by1kZXYuYmIgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC15b2N0by1kZXYuYmIKaW5kZXggMzA4NTI2My4uOTE1NGJiNyAxMDA2NDQKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgteW9jdG8tZGV2LmJiCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LXlvY3RvLWRldi5iYgpAQCAtMTQsMTQgKzE0LDYgQEAKICMgcHJvdmlkZSB0aGlzIC5pbmMgdG8gc2V0IHNwZWNpZmljIHJldmlzaW9ucwogaW5jbHVkZSByZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC15b2N0by1kZXYtcmV2aXNpb25zLmluYwogCi0jIFNraXAgcHJvY2Vzc2luZyBvZiB0aGlzIHJlY2lwZSBpZiBpdCBpcyBub3QgZXhwbGljaXRseSBzcGVjaWZpZWQgYXMgdGhlCi0jIFBSRUZFUlJFRF9QUk9WSURFUiBmb3IgdmlydHVhbC9rZXJuZWwuIFRoaXMgYXZvaWRzIG5ldHdvcmsgYWNjZXNzIHJlcXVpcmVkCi0jIGJ5IHRoZSB1c2Ugb2YgQVVUT1JFViBTUkNSRVZzLCB3aGljaCBhcmUgdGhlIGRlZmF1bHQgZm9yIHRoaXMgcmVjaXBlLgotcHl0aG9uICgpIHsKLSAgICBpZiBkLmdldFZhcigiUFJFRkVSUkVEX1BST1ZJREVSX3ZpcnR1YWwva2VybmVsIiwgVHJ1ZSkgIT0gImxpbnV4LXlvY3RvLWRldiI6Ci0gICAgICAgIHJhaXNlIGJiLnBhcnNlLlNraXBQYWNrYWdlKCJTZXQgUFJFRkVSUkVEX1BST1ZJREVSX3ZpcnR1YWwva2VybmVsIHRvIGxpbnV4LXlvY3RvLWRldiB0byBlbmFibGUgaXQiKQotfQotCiBLQlJBTkNIID0gInN0YW5kYXJkL2Jhc2UiCiBLTUVUQSA9ICJrZXJuZWwtbWV0YSIKIApAQCAtMzYsMTIgKzI4LDE0IEBACiBTUkNSRVZfbWFjaGluZSA/PSAnJHtAb2UudXRpbHMuY29uZGl0aW9uYWwoIlBSRUZFUlJFRF9QUk9WSURFUl92aXJ0dWFsL2tlcm5lbCIsICJsaW51eC15b2N0by1kZXYiLCAiJHtBVVRPUkVWfSIsICIyOTU5NDQwNGQ3ZmU3M2NkODBlYWE0ZWU4YzQzZGNjNTM5NzBjNjBlIiwgZCl9JwogU1JDUkVWX21ldGEgPz0gJyR7QG9lLnV0aWxzLmNvbmRpdGlvbmFsKCJQUkVGRVJSRURfUFJPVklERVJfdmlydHVhbC9rZXJuZWwiLCAibGludXgteW9jdG8tZGV2IiwgIiR7QVVUT1JFVn0iLCAiMjk1OTQ0MDRkN2ZlNzNjZDgwZWFhNGVlOGM0M2RjYzUzOTcwYzYwZSIsIGQpfScKIAotTElOVVhfVkVSU0lPTiA/PSAiNC42LXJjKyIKK0xJTlVYX1ZFUlNJT04gPz0gIjQuOC1yYysiCiBMSU5VWF9WRVJTSU9OX0VYVEVOU0lPTiA/PSAiLXlvY3RvZGV2LSR7TElOVVhfS0VSTkVMX1RZUEV9IgogUFYgPSAiJHtMSU5VWF9WRVJTSU9OfStnaXQke1NSQ1BWfSIKIAogQ09NUEFUSUJMRV9NQUNISU5FID0gIihxZW11YXJtfHFlbXV4ODZ8cWVtdXBwY3xxZW11bWlwc3xxZW11bWlwczY0fHFlbXV4ODYtNjQpIgogCitLRVJORUxfREVWSUNFVFJFRV9xZW11YXJtID0gInZlcnNhdGlsZS1wYi5kdGIiCisKICMgRnVuY3Rpb25hbGl0eSBmbGFncwogS0VSTkVMX0VYVFJBX0ZFQVRVUkVTID89ICJmZWF0dXJlcy9uZXRmaWx0ZXIvbmV0ZmlsdGVyLnNjYyBmZWF0dXJlcy90YXNrc3RhdHMvdGFza3N0YXRzLnNjYyIKIEtFUk5FTF9GRUFUVVJFU19hcHBlbmQgPSAiICR7S0VSTkVMX0VYVFJBX0ZFQVRVUkVTfSIKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LXlvY3RvLXJ0XzQuMS5iYiBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LXlvY3RvLXJ0XzQuMS5iYgppbmRleCBhMTM4OTU3Li5iOTVmYjU4IDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC15b2N0by1ydF80LjEuYmIKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgteW9jdG8tcnRfNC4xLmJiCkBAIC0yLDEzICsyLDIyIEBACiAKIHJlcXVpcmUgcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgteW9jdG8uaW5jCiAKLVNSQ1JFVl9tYWNoaW5lID89ICIyOGQ4Y2ZkYmNiMThhNmVlZjIwMjA5OWNjYTY2NDMwZmQzYjZlYWUwIgotU1JDUkVWX21ldGEgPz0gImE0Zjg4YzNmYWQ4ODdlMWM1NTlkMDNhZTFiNTMxY2EyNjcxMzdiNjkiCisjIFNraXAgcHJvY2Vzc2luZyBvZiB0aGlzIHJlY2lwZSBpZiBpdCBpcyBub3QgZXhwbGljaXRseSBzcGVjaWZpZWQgYXMgdGhlCisjIFBSRUZFUlJFRF9QUk9WSURFUiBmb3IgdmlydHVhbC9rZXJuZWwuIFRoaXMgYXZvaWRzIGVycm9ycyB3aGVuIHRyeWluZworIyB0byBidWlsZCBtdWx0aXBsZSB2aXJ0dWFsL2tlcm5lbCBwcm92aWRlcnMsIGUuZy4gYXMgZGVwZW5kZW5jeSBvZgorIyBjb3JlLWltYWdlLXJ0LXNkaywgY29yZS1pbWFnZS1ydC4KK3B5dGhvbiAoKSB7CisgICAgaWYgZC5nZXRWYXIoIlBSRUZFUlJFRF9QUk9WSURFUl92aXJ0dWFsL2tlcm5lbCIsIFRydWUpICE9ICJsaW51eC15b2N0by1ydCI6CisgICAgICAgIHJhaXNlIGJiLnBhcnNlLlNraXBQYWNrYWdlKCJTZXQgUFJFRkVSUkVEX1BST1ZJREVSX3ZpcnR1YWwva2VybmVsIHRvIGxpbnV4LXlvY3RvLXJ0IHRvIGVuYWJsZSBpdCIpCit9CisKK1NSQ1JFVl9tYWNoaW5lID89ICI5NjZkZGRlNDkwMDMwMTY2MDEwYzU3NzBmOGY4NmNkZDBlOTYxYzc2IgorU1JDUkVWX21ldGEgPz0gIjNjMzE5N2U2NWI2ZjJmNTUxNDg1M2MxZmU3OGFlOGZmYzEzMWIwMmMiCiAKIFNSQ19VUkkgPSAiZ2l0Oi8vZ2l0LnlvY3RvcHJvamVjdC5vcmcvbGludXgteW9jdG8tNC4xLmdpdDticmFuY2g9JHtLQlJBTkNIfTtuYW1lPW1hY2hpbmUgXAogICAgICAgICAgICBnaXQ6Ly9naXQueW9jdG9wcm9qZWN0Lm9yZy95b2N0by1rZXJuZWwtY2FjaGU7dHlwZT1rbWV0YTtuYW1lPW1ldGE7YnJhbmNoPXlvY3RvLTQuMTtkZXN0c3VmZml4PSR7S01FVEF9IgogCi1MSU5VWF9WRVJTSU9OID89ICI0LjEuMTgiCitMSU5VWF9WRVJTSU9OID89ICI0LjEuMzMiCiAKIFBWID0gIiR7TElOVVhfVkVSU0lPTn0rZ2l0JHtTUkNQVn0iCiAKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LXlvY3RvLXJ0XzQuNC5iYiBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LXlvY3RvLXJ0XzQuNC5iYgppbmRleCBkODFjYTEzLi42YzExMzgyIDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC15b2N0by1ydF80LjQuYmIKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgteW9jdG8tcnRfNC40LmJiCkBAIC0xLDE0ICsxLDIzIEBACi1LQlJBTkNIID89ICJzdGFuZGFyZC9wcmVlbXB0LXJ0IgorS0JSQU5DSCA/PSAic3RhbmRhcmQvcHJlZW1wdC1ydC9iYXNlIgogCiByZXF1aXJlIHJlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LXlvY3RvLmluYwogCi1TUkNSRVZfbWFjaGluZSA/PSAiMmJjMTEyYTZjY2QxNjgwMGE0YzQ1ZTQ3Y2NiMzAxOGExMDQyYWJkZiIKLVNSQ1JFVl9tZXRhID89ICJiY2M2NTA5MDg0MGY1MWE2YWM5MzcyOTdiZTVjMjJmZTI2OGQwMWFiIgorIyBTa2lwIHByb2Nlc3Npbmcgb2YgdGhpcyByZWNpcGUgaWYgaXQgaXMgbm90IGV4cGxpY2l0bHkgc3BlY2lmaWVkIGFzIHRoZQorIyBQUkVGRVJSRURfUFJPVklERVIgZm9yIHZpcnR1YWwva2VybmVsLiBUaGlzIGF2b2lkcyBlcnJvcnMgd2hlbiB0cnlpbmcKKyMgdG8gYnVpbGQgbXVsdGlwbGUgdmlydHVhbC9rZXJuZWwgcHJvdmlkZXJzLCBlLmcuIGFzIGRlcGVuZGVuY3kgb2YKKyMgY29yZS1pbWFnZS1ydC1zZGssIGNvcmUtaW1hZ2UtcnQuCitweXRob24gKCkgeworICAgIGlmIGQuZ2V0VmFyKCJQUkVGRVJSRURfUFJPVklERVJfdmlydHVhbC9rZXJuZWwiLCBUcnVlKSAhPSAibGludXgteW9jdG8tcnQiOgorICAgICAgICByYWlzZSBiYi5wYXJzZS5Ta2lwUGFja2FnZSgiU2V0IFBSRUZFUlJFRF9QUk9WSURFUl92aXJ0dWFsL2tlcm5lbCB0byBsaW51eC15b2N0by1ydCB0byBlbmFibGUgaXQiKQorfQorCitTUkNSRVZfbWFjaGluZSA/PSAiNjUyYjU2NDk4NWRiNTU1YjU0OWVmNzM0MDVhZWE2YzM4OTE5ZWVmYyIKK1NSQ1JFVl9tZXRhID89ICIzMDMwMzMwYjA2NmEzM2NlMjExNjRhOGIzMGQwNTAzY2Y5ZjY4ZTViIgogCiBTUkNfVVJJID0gImdpdDovL2dpdC55b2N0b3Byb2plY3Qub3JnL2xpbnV4LXlvY3RvLTQuNC5naXQ7YnJhbmNoPSR7S0JSQU5DSH07bmFtZT1tYWNoaW5lIFwKICAgICAgICAgICAgZ2l0Oi8vZ2l0LnlvY3RvcHJvamVjdC5vcmcveW9jdG8ta2VybmVsLWNhY2hlO3R5cGU9a21ldGE7bmFtZT1tZXRhO2JyYW5jaD15b2N0by00LjQ7ZGVzdHN1ZmZpeD0ke0tNRVRBfSIKIAotTElOVVhfVkVSU0lPTiA/PSAiNC40LjMiCitMSU5VWF9WRVJTSU9OID89ICI0LjQuMjYiCiAKIFBWID0gIiR7TElOVVhfVkVSU0lPTn0rZ2l0JHtTUkNQVn0iCiAKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LXlvY3RvLXJ0XzQuOC5iYiBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LXlvY3RvLXJ0XzQuOC5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNTFjOWNkCi0tLSAvZGV2L251bGwKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgteW9jdG8tcnRfNC44LmJiCkBAIC0wLDAgKzEsMzggQEAKK0tCUkFOQ0ggPz0gInN0YW5kYXJkL3ByZWVtcHQtcnQvYmFzZSIKKworcmVxdWlyZSByZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC15b2N0by5pbmMKKworIyBTa2lwIHByb2Nlc3Npbmcgb2YgdGhpcyByZWNpcGUgaWYgaXQgaXMgbm90IGV4cGxpY2l0bHkgc3BlY2lmaWVkIGFzIHRoZQorIyBQUkVGRVJSRURfUFJPVklERVIgZm9yIHZpcnR1YWwva2VybmVsLiBUaGlzIGF2b2lkcyBlcnJvcnMgd2hlbiB0cnlpbmcKKyMgdG8gYnVpbGQgbXVsdGlwbGUgdmlydHVhbC9rZXJuZWwgcHJvdmlkZXJzLCBlLmcuIGFzIGRlcGVuZGVuY3kgb2YKKyMgY29yZS1pbWFnZS1ydC1zZGssIGNvcmUtaW1hZ2UtcnQuCitweXRob24gKCkgeworICAgIGlmIGQuZ2V0VmFyKCJQUkVGRVJSRURfUFJPVklERVJfdmlydHVhbC9rZXJuZWwiLCBUcnVlKSAhPSAibGludXgteW9jdG8tcnQiOgorICAgICAgICByYWlzZSBiYi5wYXJzZS5Ta2lwUGFja2FnZSgiU2V0IFBSRUZFUlJFRF9QUk9WSURFUl92aXJ0dWFsL2tlcm5lbCB0byBsaW51eC15b2N0by1ydCB0byBlbmFibGUgaXQiKQorfQorCitTUkNSRVZfbWFjaGluZSA/PSAiNDA1NzU1NmMwNDFmNmFhYzBkMjlhYTM0MjU1ODdkNDE0YzlhMDA5MCIKK1NSQ1JFVl9tZXRhID89ICI4MzExMGQ5NGVkZWI4NTZhMzY2N2I2MjkwM2VkNGFlOTFjMjQxMTdkIgorCitTUkNfVVJJID0gImdpdDovL2dpdC55b2N0b3Byb2plY3Qub3JnL2xpbnV4LXlvY3RvLTQuOC5naXQ7YnJhbmNoPSR7S0JSQU5DSH07bmFtZT1tYWNoaW5lIFwKKyAgICAgICAgICAgZ2l0Oi8vZ2l0LnlvY3RvcHJvamVjdC5vcmcveW9jdG8ta2VybmVsLWNhY2hlO3R5cGU9a21ldGE7bmFtZT1tZXRhO2JyYW5jaD15b2N0by00Ljg7ZGVzdHN1ZmZpeD0ke0tNRVRBfSIKKworTElOVVhfVkVSU0lPTiA/PSAiNC44LjMiCisKK1BWID0gIiR7TElOVVhfVkVSU0lPTn0rZ2l0JHtTUkNQVn0iCisKK0tNRVRBID0gImtlcm5lbC1tZXRhIgorS0NPTkZfQlNQX0FVRElUX0xFVkVMID0gIjIiCisKK0xJTlVYX0tFUk5FTF9UWVBFID0gInByZWVtcHQtcnQiCisKK0NPTVBBVElCTEVfTUFDSElORSA9ICIocWVtdXg4NnxxZW11eDg2LTY0fHFlbXVhcm18cWVtdXBwY3xxZW11bWlwcykiCisKK0tFUk5FTF9ERVZJQ0VUUkVFX3FlbXVhcm0gPSAidmVyc2F0aWxlLXBiLmR0YiIKKworIyBGdW5jdGlvbmFsaXR5IGZsYWdzCitLRVJORUxfRVhUUkFfRkVBVFVSRVMgPz0gImZlYXR1cmVzL25ldGZpbHRlci9uZXRmaWx0ZXIuc2NjIGZlYXR1cmVzL3Rhc2tzdGF0cy90YXNrc3RhdHMuc2NjIgorS0VSTkVMX0ZFQVRVUkVTX2FwcGVuZCA9ICIgJHtLRVJORUxfRVhUUkFfRkVBVFVSRVN9IgorS0VSTkVMX0ZFQVRVUkVTX2FwcGVuZF9xZW11YWxsPSIgY2ZnL3ZpcnRpby5zY2MiCitLRVJORUxfRkVBVFVSRVNfYXBwZW5kX3FlbXV4ODY9IiBjZmcvc291bmQuc2NjIGNmZy9wYXJhdmlydF9rdm0uc2NjIgorS0VSTkVMX0ZFQVRVUkVTX2FwcGVuZF9xZW11eDg2LTY0PSIgY2ZnL3NvdW5kLnNjYyIKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LXlvY3RvLXRpbnlfNC4xLmJiIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgteW9jdG8tdGlueV80LjEuYmIKaW5kZXggMjhjNzIxMy4uYmEwMTcwMiAxMDA2NDQKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgteW9jdG8tdGlueV80LjEuYmIKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgteW9jdG8tdGlueV80LjEuYmIKQEAgLTQsMTMgKzQsMTMgQEAKIAogcmVxdWlyZSByZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC15b2N0by5pbmMKIAotTElOVVhfVkVSU0lPTiA/PSAiNC4xLjE4IgorTElOVVhfVkVSU0lPTiA/PSAiNC4xLjMzIgogCiBLTUVUQSA9ICJrZXJuZWwtbWV0YSIKIEtDT05GX0JTUF9BVURJVF9MRVZFTCA9ICIyIgogCi1TUkNSRVZfbWFjaGluZSA/PSAiOTFmNjJkNGEwYTMxOTE5ZDliMmNjZGFmODgxMTMwZjk5YjYxZmM1ZSIKLVNSQ1JFVl9tZXRhID89ICJhNGY4OGMzZmFkODg3ZTFjNTU5ZDAzYWUxYjUzMWNhMjY3MTM3YjY5IgorU1JDUkVWX21hY2hpbmUgPz0gImY0ZDA5MDBiMjg1MWU4MjllOTkwZTBmNjRiMDllZDNiOGUzNTVmYWUiCitTUkNSRVZfbWV0YSA/PSAiM2MzMTk3ZTY1YjZmMmY1NTE0ODUzYzFmZTc4YWU4ZmZjMTMxYjAyYyIKIAogUFYgPSAiJHtMSU5VWF9WRVJTSU9OfStnaXQke1NSQ1BWfSIKIApkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgteW9jdG8tdGlueV80LjQuYmIgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC15b2N0by10aW55XzQuNC5iYgppbmRleCA2ODRlODgwLi43NmM0MTYzIDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC15b2N0by10aW55XzQuNC5iYgorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC15b2N0by10aW55XzQuNC5iYgpAQCAtNCwxMyArNCwxMyBAQAogCiByZXF1aXJlIHJlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LXlvY3RvLmluYwogCi1MSU5VWF9WRVJTSU9OID89ICI0LjQuMyIKK0xJTlVYX1ZFUlNJT04gPz0gIjQuNC4yNiIKIAogS01FVEEgPSAia2VybmVsLW1ldGEiCiBLQ09ORl9CU1BfQVVESVRfTEVWRUwgPSAiMiIKIAotU1JDUkVWX21hY2hpbmUgPz0gIjFhNzJjZWM4MzRkZTJjODBiNTU2M2Y4YWZiZWVhNzY2NGZkNWVlMDUiCi1TUkNSRVZfbWV0YSA/PSAiYmNjNjUwOTA4NDBmNTFhNmFjOTM3Mjk3YmU1YzIyZmUyNjhkMDFhYiIKK1NSQ1JFVl9tYWNoaW5lID89ICJjYTZhMDhiZDdmODZlYmVmMTFmNzYzZDI2Zjc4N2Y3ZDY1MjcwNDczIgorU1JDUkVWX21ldGEgPz0gIjMwMzAzMzBiMDY2YTMzY2UyMTE2NGE4YjMwZDA1MDNjZjlmNjhlNWIiCiAKIFBWID0gIiR7TElOVVhfVkVSU0lPTn0rZ2l0JHtTUkNQVn0iCiAKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LXlvY3RvLXRpbnlfNC44LmJiIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgteW9jdG8tdGlueV80LjguYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzhkZGJkOQotLS0gL2Rldi9udWxsCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LXlvY3RvLXRpbnlfNC44LmJiCkBAIC0wLDAgKzEsMjUgQEAKK0tCUkFOQ0ggPz0gInN0YW5kYXJkL3RpbnkvY29tbW9uLXBjIgorTElOVVhfS0VSTkVMX1RZUEUgPSAidGlueSIKK0tDT05GSUdfTU9ERSA9ICItLWFsbG5vY29uZmlnIgorCityZXF1aXJlIHJlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LXlvY3RvLmluYworCitMSU5VWF9WRVJTSU9OID89ICI0LjguMyIKKworS01FVEEgPSAia2VybmVsLW1ldGEiCitLQ09ORl9CU1BfQVVESVRfTEVWRUwgPSAiMiIKKworU1JDUkVWX21hY2hpbmUgPz0gIjFhZGY5ZDM2MzM4ZGMzYzYzY2RiZjZmOThiY2JkYzdiYmE0MmE3OTQiCitTUkNSRVZfbWV0YSA/PSAiODMxMTBkOTRlZGViODU2YTM2NjdiNjI5MDNlZDRhZTkxYzI0MTE3ZCIKKworUFYgPSAiJHtMSU5VWF9WRVJTSU9OfStnaXQke1NSQ1BWfSIKKworU1JDX1VSSSA9ICJnaXQ6Ly9naXQueW9jdG9wcm9qZWN0Lm9yZy9saW51eC15b2N0by00LjguZ2l0O2JyYW5jaD0ke0tCUkFOQ0h9O25hbWU9bWFjaGluZSBcCisgICAgICAgICAgIGdpdDovL2dpdC55b2N0b3Byb2plY3Qub3JnL3lvY3RvLWtlcm5lbC1jYWNoZTt0eXBlPWttZXRhO25hbWU9bWV0YTticmFuY2g9eW9jdG8tNC44O2Rlc3RzdWZmaXg9JHtLTUVUQX0iCisKK0NPTVBBVElCTEVfTUFDSElORSA9ICIocWVtdXg4NiQpIgorCisjIEZ1bmN0aW9uYWxpdHkgZmxhZ3MKK0tFUk5FTF9GRUFUVVJFUyA9ICIiCisKK0tFUk5FTF9ERVZJQ0VUUkVFX3FlbXVhcm0gPSAidmVyc2F0aWxlLXBiLmR0YiIKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LXlvY3RvLmluYyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LXlvY3RvLmluYwppbmRleCA2YjE2MWZjLi4wOWNkMWYxIDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC15b2N0by5pbmMKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgteW9jdG8uaW5jCkBAIC04LDYgKzgsMTUgQEAKIAogSU5DX1BSID0gInI0IgogCisjIFNraXAgcHJvY2Vzc2luZyBvZiB0aGlzIHJlY2lwZSBpZiBpdCBpcyBub3QgZXhwbGljaXRseSBzcGVjaWZpZWQgYXMgdGhlCisjIFBSRUZFUlJFRF9QUk9WSURFUiBmb3IgdmlydHVhbC9rZXJuZWwuIFRoaXMgYXZvaWRzIG5ldHdvcmsgYWNjZXNzIHJlcXVpcmVkCisjIGJ5IHRoZSB1c2Ugb2YgQVVUT1JFViBTUkNSRVZzLCB3aGljaCBhcmUgdGhlIGRlZmF1bHQgZm9yIHRoaXMgcmVjaXBlLgorcHl0aG9uICgpIHsKKyAgICBpZiBkLmdldFZhcigiUFJFRkVSUkVEX1BST1ZJREVSX3ZpcnR1YWwva2VybmVsIiwgVHJ1ZSkgIT0gZC5nZXRWYXIoIlBOIiwgVHJ1ZSk6CisgICAgICAgIGQuZGVsVmFyKCJCQl9ET05UX0NBQ0hFIikKKyAgICAgICAgcmFpc2UgYmIucGFyc2UuU2tpcFBhY2thZ2UoIlNldCBQUkVGRVJSRURfUFJPVklERVJfdmlydHVhbC9rZXJuZWwgdG8gJXMgdG8gZW5hYmxlIGl0IiAlIChkLmdldFZhcigiUE4iLCBUcnVlKSkpCit9CisKIERFUEVORFMgKz0gInh6LW5hdGl2ZSBiYy1uYXRpdmUiCiBERVBFTkRTX2FwcGVuZF9hYXJjaDY0ID0gIiBsaWJnY2MiCiBLRVJORUxfQ0NfYXBwZW5kX2FhcmNoNjQgPSAiICR7VE9PTENIQUlOX09QVElPTlN9IgpAQCAtMTcsNiArMjYsOCBAQAogS0VSTkVMX0NDX2FwcGVuZF9uaW9zMiA9ICIgJHtUT09MQ0hBSU5fT1BUSU9OU30iCiBLRVJORUxfTERfYXBwZW5kX25pb3MyID0gIiAke1RPT0xDSEFJTl9PUFRJT05TfSIKIAorS0VSTkVMX0ZFQVRVUkVTX2FwcGVuZF9xZW11YWxsPSIgZmVhdHVyZXMvZGVidWcvcHJpbnRrLnNjYyIKKwogIyBBIEtNQUNISU5FIGlzIHRoZSBtYXBwaW5nIG9mIGEgeW9jdG8gJE1BQ0hJTkUgdG8gd2hhdCBpcyBidWlsdAogIyBieSB0aGUga2VybmVsLiBUaGlzIGlzIHR5cGljYWxseSB0aGUgYnJhbmNoIHRoYXQgc2hvdWxkIGJlIGJ1aWx0LAogIyBhbmQgaXQgY2FuIGJlIHNwZWNpZmljIHRvIHRoZSBtYWNoaW5lIG9yIHNoYXJlZApAQCAtMzUsNiArNDYsNyBAQAogIyAgIDI6IHJlcG9ydCBvcHRpb25zIHRoYXQgYXJlIG5vdCBoYXJkd2FyZSByZWxhdGVkLCBidXQgc2V0IGJ5IGEgQlNQCiBLQ09ORl9BVURJVF9MRVZFTCA/PSAiMSIKIEtDT05GX0JTUF9BVURJVF9MRVZFTCA/PSAiMCIKK0tNRVRBX0FVRElUID89ICJ5ZXMiCiAKIExJTlVYX1ZFUlNJT05fRVhURU5TSU9OID89ICIteW9jdG8tJHtMSU5VWF9LRVJORUxfVFlQRX0iCiAKQEAgLTUyLDYgKzY0LDcgQEAKIH0KIAogIyBleHRyYSB0YXNrcwotYWRkdGFzayBrZXJuZWxfbGlua192bWxpbnV4IGFmdGVyIGRvX2NvbXBpbGUgYmVmb3JlIGRvX2luc3RhbGwKK2FkZHRhc2sga2VybmVsX3ZlcnNpb25fc2FuaXR5X2NoZWNrIGFmdGVyIGRvX2tlcm5lbF9tZXRhZGF0YSBkb19rZXJuZWxfY2hlY2tvdXQgYmVmb3JlIGRvX2NvbXBpbGUKK2FkZHRhc2sga2VybmVsX2xpbmtfaW1hZ2VzIGFmdGVyIGRvX2NvbXBpbGUgYmVmb3JlIGRvX3N0cmlwCiBhZGR0YXNrIHZhbGlkYXRlX2JyYW5jaGVzIGJlZm9yZSBkb19wYXRjaCBhZnRlciBkb19rZXJuZWxfY2hlY2tvdXQKIGFkZHRhc2sga2VybmVsX2NvbmZpZ2NoZWNrIGFmdGVyIGRvX2NvbmZpZ3VyZSBiZWZvcmUgZG9fY29tcGlsZQpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgteW9jdG9fNC4xLmJiIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgteW9jdG9fNC4xLmJiCmluZGV4IGFlY2I1MTcuLjc4OGE4ZWEgMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LXlvY3RvXzQuMS5iYgorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC15b2N0b180LjEuYmIKQEAgLTExLDIwICsxMSwyMCBAQAogS0JSQU5DSF9xZW11eDg2LTY0ID89ICJzdGFuZGFyZC9iYXNlIgogS0JSQU5DSF9xZW11bWlwczY0ID89ICJzdGFuZGFyZC9tdGktbWFsdGE2NCIKIAotU1JDUkVWX21hY2hpbmVfcWVtdWFybSA/PSAiMjMyZTJkODg4NDFjN2UyMDg1NzM1MDI3NWQ4MGY1NTg1ZWQ5MzczNCIKLVNSQ1JFVl9tYWNoaW5lX3FlbXVhcm02NCA/PSAiOTFmNjJkNGEwYTMxOTE5ZDliMmNjZGFmODgxMTMwZjk5YjYxZmM1ZSIKLVNSQ1JFVl9tYWNoaW5lX3FlbXVtaXBzID89ICI3ZDM2OTBjMDc2MmYxMWUwMzhmMTQzMTBhNTBjYTFjZGM4MTNjYzIyIgotU1JDUkVWX21hY2hpbmVfcWVtdXBwYyA/PSAiOTFmNjJkNGEwYTMxOTE5ZDliMmNjZGFmODgxMTMwZjk5YjYxZmM1ZSIKLVNSQ1JFVl9tYWNoaW5lX3FlbXV4ODYgPz0gIjkxZjYyZDRhMGEzMTkxOWQ5YjJjY2RhZjg4MTEzMGY5OWI2MWZjNWUiCi1TUkNSRVZfbWFjaGluZV9xZW11eDg2LTY0ID89ICI5MWY2MmQ0YTBhMzE5MTlkOWIyY2NkYWY4ODExMzBmOTliNjFmYzVlIgotU1JDUkVWX21hY2hpbmVfcWVtdW1pcHM2NCA/PSAiYjcxZTRjZDdkNDVmMDMwNDhhZDMxZTJhMzZkZmU1YTQzZjAyMWI1MSIKLVNSQ1JFVl9tYWNoaW5lID89ICI5MWY2MmQ0YTBhMzE5MTlkOWIyY2NkYWY4ODExMzBmOTliNjFmYzVlIgotU1JDUkVWX21ldGEgPz0gImE0Zjg4YzNmYWQ4ODdlMWM1NTlkMDNhZTFiNTMxY2EyNjcxMzdiNjkiCitTUkNSRVZfbWFjaGluZV9xZW11YXJtID89ICJkNjdlZjQ4NWNlMTQyMGRmMTFiZGEyZDlmNmZiNzhlZjUwYzFhZGZmIgorU1JDUkVWX21hY2hpbmVfcWVtdWFybTY0ID89ICJmNGQwOTAwYjI4NTFlODI5ZTk5MGUwZjY0YjA5ZWQzYjhlMzU1ZmFlIgorU1JDUkVWX21hY2hpbmVfcWVtdW1pcHMgPz0gIjY1MTE2MzM5Y2ZkMjEwOTkwYzljNDcxMGNkZmVjM2ViZDU5YWJiMGUiCitTUkNSRVZfbWFjaGluZV9xZW11cHBjID89ICIzMDgxNjkwNzY1M2I1N2YxZjNkNWY5YTdhMmY2MzM5YmFiMTRhNjgwIgorU1JDUkVWX21hY2hpbmVfcWVtdXg4NiA/PSAiZjRkMDkwMGIyODUxZTgyOWU5OTBlMGY2NGIwOWVkM2I4ZTM1NWZhZSIKK1NSQ1JFVl9tYWNoaW5lX3FlbXV4ODYtNjQgPz0gImY0ZDA5MDBiMjg1MWU4MjllOTkwZTBmNjRiMDllZDNiOGUzNTVmYWUiCitTUkNSRVZfbWFjaGluZV9xZW11bWlwczY0ID89ICJmN2EwYjUzMmI2YWM4MTc1N2Q4NWIwYzlhOTI4ZjQ1YTg3YzllMzY0IgorU1JDUkVWX21hY2hpbmUgPz0gImY0ZDA5MDBiMjg1MWU4MjllOTkwZTBmNjRiMDllZDNiOGUzNTVmYWUiCitTUkNSRVZfbWV0YSA/PSAiM2MzMTk3ZTY1YjZmMmY1NTE0ODUzYzFmZTc4YWU4ZmZjMTMxYjAyYyIKIAogU1JDX1VSSSA9ICJnaXQ6Ly9naXQueW9jdG9wcm9qZWN0Lm9yZy9saW51eC15b2N0by00LjEuZ2l0O25hbWU9bWFjaGluZTticmFuY2g9JHtLQlJBTkNIfTsgXAogICAgICAgICAgICBnaXQ6Ly9naXQueW9jdG9wcm9qZWN0Lm9yZy95b2N0by1rZXJuZWwtY2FjaGU7dHlwZT1rbWV0YTtuYW1lPW1ldGE7YnJhbmNoPXlvY3RvLTQuMTtkZXN0c3VmZml4PSR7S01FVEF9IgogCi1MSU5VWF9WRVJTSU9OID89ICI0LjEuMTgiCitMSU5VWF9WRVJTSU9OID89ICI0LjEuMzMiCiAKIFBWID0gIiR7TElOVVhfVkVSU0lPTn0rZ2l0JHtTUkNQVn0iCiAKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LXlvY3RvXzQuNC5iYiBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LXlvY3RvXzQuNC5iYgppbmRleCAzYzVlZTFiLi5lM2EzZDkwIDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC15b2N0b180LjQuYmIKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgteW9jdG9fNC40LmJiCkBAIC0xMSwyMCArMTEsMjAgQEAKIEtCUkFOQ0hfcWVtdXg4Ni02NCA/PSAic3RhbmRhcmQvYmFzZSIKIEtCUkFOQ0hfcWVtdW1pcHM2NCA/PSAic3RhbmRhcmQvbXRpLW1hbHRhNjQiCiAKLVNSQ1JFVl9tYWNoaW5lX3FlbXVhcm0gPz0gImVjOTE2N2JjYjBjY2Q0ODk3MTc3YzVlMjM1YWY2OGI1ODkwYWEzMjYiCi1TUkNSRVZfbWFjaGluZV9xZW11YXJtNjQgPz0gIjFhNzJjZWM4MzRkZTJjODBiNTU2M2Y4YWZiZWVhNzY2NGZkNWVlMDUiCi1TUkNSRVZfbWFjaGluZV9xZW11bWlwcyA/PSAiOTAwZjk4ZDNhYjY0OThiYzdmNGZmNmI3YTQ4OWRiM2JjYTRlNjQxNyIKLVNSQ1JFVl9tYWNoaW5lX3FlbXVwcGMgPz0gIjFhNzJjZWM4MzRkZTJjODBiNTU2M2Y4YWZiZWVhNzY2NGZkNWVlMDUiCi1TUkNSRVZfbWFjaGluZV9xZW11eDg2ID89ICIxYTcyY2VjODM0ZGUyYzgwYjU1NjNmOGFmYmVlYTc2NjRmZDVlZTA1IgotU1JDUkVWX21hY2hpbmVfcWVtdXg4Ni02NCA/PSAiMWE3MmNlYzgzNGRlMmM4MGI1NTYzZjhhZmJlZWE3NjY0ZmQ1ZWUwNSIKLVNSQ1JFVl9tYWNoaW5lX3FlbXVtaXBzNjQgPz0gIjRiMDhkZmIxZmIzYmM3NjU5ZThmM2UxMzY2NTU5N2Q5YTlmMDgxNmQiCi1TUkNSRVZfbWFjaGluZSA/PSAiMWE3MmNlYzgzNGRlMmM4MGI1NTYzZjhhZmJlZWE3NjY0ZmQ1ZWUwNSIKLVNSQ1JFVl9tZXRhID89ICJiY2M2NTA5MDg0MGY1MWE2YWM5MzcyOTdiZTVjMjJmZTI2OGQwMWFiIgorU1JDUkVWX21hY2hpbmVfcWVtdWFybSA/PSAiMTg3YmNjMTNmMzAyM2MzYWUwYTNiYTVjNjlhZTg1YzRlNWU2OTNhYyIKK1NSQ1JFVl9tYWNoaW5lX3FlbXVhcm02NCA/PSAiY2E2YTA4YmQ3Zjg2ZWJlZjExZjc2M2QyNmY3ODdmN2Q2NTI3MDQ3MyIKK1NSQ1JFVl9tYWNoaW5lX3FlbXVtaXBzID89ICIyZjI3MzU1NjQ5NWRkMjg3MWYwOGM3M2ZjM2Y0MGQxYWQ1NDZjNjM4IgorU1JDUkVWX21hY2hpbmVfcWVtdXBwYyA/PSAiY2E2YTA4YmQ3Zjg2ZWJlZjExZjc2M2QyNmY3ODdmN2Q2NTI3MDQ3MyIKK1NSQ1JFVl9tYWNoaW5lX3FlbXV4ODYgPz0gImNhNmEwOGJkN2Y4NmViZWYxMWY3NjNkMjZmNzg3ZjdkNjUyNzA0NzMiCitTUkNSRVZfbWFjaGluZV9xZW11eDg2LTY0ID89ICJjYTZhMDhiZDdmODZlYmVmMTFmNzYzZDI2Zjc4N2Y3ZDY1MjcwNDczIgorU1JDUkVWX21hY2hpbmVfcWVtdW1pcHM2NCA/PSAiMGExOWNhY2Y1NzM4ODc2NjY2YTRiNTMwYTlmYTE0ZjA1YjM1NTI5OSIKK1NSQ1JFVl9tYWNoaW5lID89ICJjYTZhMDhiZDdmODZlYmVmMTFmNzYzZDI2Zjc4N2Y3ZDY1MjcwNDczIgorU1JDUkVWX21ldGEgPz0gIjMwMzAzMzBiMDY2YTMzY2UyMTE2NGE4YjMwZDA1MDNjZjlmNjhlNWIiCiAKIFNSQ19VUkkgPSAiZ2l0Oi8vZ2l0LnlvY3RvcHJvamVjdC5vcmcvbGludXgteW9jdG8tNC40LmdpdDtuYW1lPW1hY2hpbmU7YnJhbmNoPSR7S0JSQU5DSH07IFwKICAgICAgICAgICAgZ2l0Oi8vZ2l0LnlvY3RvcHJvamVjdC5vcmcveW9jdG8ta2VybmVsLWNhY2hlO3R5cGU9a21ldGE7bmFtZT1tZXRhO2JyYW5jaD15b2N0by00LjQ7ZGVzdHN1ZmZpeD0ke0tNRVRBfSIKIAotTElOVVhfVkVSU0lPTiA/PSAiNC40LjMiCitMSU5VWF9WRVJTSU9OID89ICI0LjQuMjYiCiAKIFBWID0gIiR7TElOVVhfVkVSU0lPTn0rZ2l0JHtTUkNQVn0iCiAKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LXlvY3RvXzQuOC5iYiBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LXlvY3RvXzQuOC5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMzc3OGI5Ci0tLSAvZGV2L251bGwKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgteW9jdG9fNC44LmJiCkBAIC0wLDAgKzEsNDQgQEAKK0tCUkFOQ0ggPz0gInN0YW5kYXJkL2Jhc2UiCisKK3JlcXVpcmUgcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgteW9jdG8uaW5jCisKKyMgYm9hcmQgc3BlY2lmaWMgYnJhbmNoZXMKK0tCUkFOQ0hfcWVtdWFybSAgPz0gInN0YW5kYXJkL2FybS12ZXJzYXRpbGUtOTI2ZWpzIgorS0JSQU5DSF9xZW11YXJtNjQgPz0gInN0YW5kYXJkL3FlbXVhcm02NCIKK0tCUkFOQ0hfcWVtdW1pcHMgPz0gInN0YW5kYXJkL210aS1tYWx0YTMyIgorS0JSQU5DSF9xZW11cHBjICA/PSAic3RhbmRhcmQvcWVtdXBwYyIKK0tCUkFOQ0hfcWVtdXg4NiAgPz0gInN0YW5kYXJkL2Jhc2UiCitLQlJBTkNIX3FlbXV4ODYtNjQgPz0gInN0YW5kYXJkL2Jhc2UiCitLQlJBTkNIX3FlbXVtaXBzNjQgPz0gInN0YW5kYXJkL210aS1tYWx0YTY0IgorCitTUkNSRVZfbWFjaGluZV9xZW11YXJtID89ICI0Y2M1NDRhZDA5YWQ3MDQzMjJjYjY2ZmU0YmExOTdhNmEwNWRjNzFmIgorU1JDUkVWX21hY2hpbmVfcWVtdWFybTY0ID89ICIxYWRmOWQzNjMzOGRjM2M2M2NkYmY2Zjk4YmNiZGM3YmJhNDJhNzk0IgorU1JDUkVWX21hY2hpbmVfcWVtdW1pcHMgPz0gImMyODU5NjlkNGY5Mzc2YTY3MTE2N2VjZjM5NzU3OGM4YWQzZTZhNzUiCitTUkNSRVZfbWFjaGluZV9xZW11cHBjID89ICIxYWRmOWQzNjMzOGRjM2M2M2NkYmY2Zjk4YmNiZGM3YmJhNDJhNzk0IgorU1JDUkVWX21hY2hpbmVfcWVtdXg4NiA/PSAiMWFkZjlkMzYzMzhkYzNjNjNjZGJmNmY5OGJjYmRjN2JiYTQyYTc5NCIKK1NSQ1JFVl9tYWNoaW5lX3FlbXV4ODYtNjQgPz0gIjFhZGY5ZDM2MzM4ZGMzYzYzY2RiZjZmOThiY2JkYzdiYmE0MmE3OTQiCitTUkNSRVZfbWFjaGluZV9xZW11bWlwczY0ID89ICI2NGY5NmJhNTMwZTU4NDU2MDcwZjI2YjBmM2ZjY2UzZjY0OTg4YjcyIgorU1JDUkVWX21hY2hpbmUgPz0gIjFhZGY5ZDM2MzM4ZGMzYzYzY2RiZjZmOThiY2JkYzdiYmE0MmE3OTQiCitTUkNSRVZfbWV0YSA/PSAiODMxMTBkOTRlZGViODU2YTM2NjdiNjI5MDNlZDRhZTkxYzI0MTE3ZCIKKworU1JDX1VSSSA9ICJnaXQ6Ly9naXQueW9jdG9wcm9qZWN0Lm9yZy9saW51eC15b2N0by00LjguZ2l0O25hbWU9bWFjaGluZTticmFuY2g9JHtLQlJBTkNIfTsgXAorICAgICAgICAgICBnaXQ6Ly9naXQueW9jdG9wcm9qZWN0Lm9yZy95b2N0by1rZXJuZWwtY2FjaGU7dHlwZT1rbWV0YTtuYW1lPW1ldGE7YnJhbmNoPXlvY3RvLTQuODtkZXN0c3VmZml4PSR7S01FVEF9IgorCitMSU5VWF9WRVJTSU9OID89ICI0LjguMyIKKworUFYgPSAiJHtMSU5VWF9WRVJTSU9OfStnaXQke1NSQ1BWfSIKKworS01FVEEgPSAia2VybmVsLW1ldGEiCitLQ09ORl9CU1BfQVVESVRfTEVWRUwgPSAiMiIKKworS0VSTkVMX0RFVklDRVRSRUVfcWVtdWFybSA9ICJ2ZXJzYXRpbGUtcGIuZHRiIgorCitDT01QQVRJQkxFX01BQ0hJTkUgPSAicWVtdWFybXxxZW11YXJtNjR8cWVtdXg4NnxxZW11cHBjfHFlbXVtaXBzfHFlbXVtaXBzNjR8cWVtdXg4Ni02NCIKKworIyBGdW5jdGlvbmFsaXR5IGZsYWdzCitLRVJORUxfRVhUUkFfRkVBVFVSRVMgPz0gImZlYXR1cmVzL25ldGZpbHRlci9uZXRmaWx0ZXIuc2NjIgorS0VSTkVMX0ZFQVRVUkVTX2FwcGVuZCA9ICIgJHtLRVJORUxfRVhUUkFfRkVBVFVSRVN9IgorS0VSTkVMX0ZFQVRVUkVTX2FwcGVuZF9xZW11YWxsPSIgY2ZnL3ZpcnRpby5zY2MiCitLRVJORUxfRkVBVFVSRVNfYXBwZW5kX3FlbXV4ODY9IiBjZmcvc291bmQuc2NjIGNmZy9wYXJhdmlydF9rdm0uc2NjIgorS0VSTkVMX0ZFQVRVUkVTX2FwcGVuZF9xZW11eDg2LTY0PSIgY2ZnL3NvdW5kLnNjYyBjZmcvcGFyYXZpcnRfa3ZtLnNjYyIKK0tFUk5FTF9GRUFUVVJFU19hcHBlbmQgPSAiICR7QGJiLnV0aWxzLmNvbnRhaW5zKCJUVU5FX0ZFQVRVUkVTIiwgIm14MzIiLCAiIGNmZy94MzIuc2NjIiwgIiIgLGQpfSIKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMta2VybmVsL2x0dG5nL2JhYmVsdHJhY2UvMDAwMS1GaXgtaW52YWxpZC1wb2ludGVyLWZyZWUtd2l0aC10cmFjZS1jb2xsZWN0aW9uLnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1rZXJuZWwvbHR0bmcvYmFiZWx0cmFjZS8wMDAxLUZpeC1pbnZhbGlkLXBvaW50ZXItZnJlZS13aXRoLXRyYWNlLWNvbGxlY3Rpb24ucGF0Y2gKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDNlMmM0ZTEuLjAwMDAwMDAKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1rZXJuZWwvbHR0bmcvYmFiZWx0cmFjZS8wMDAxLUZpeC1pbnZhbGlkLXBvaW50ZXItZnJlZS13aXRoLXRyYWNlLWNvbGxlY3Rpb24ucGF0Y2gKKysrIC9kZXYvbnVsbApAQCAtMSw0NCArMCwwIEBACi1Gcm9tIGU0Y2FkOTAwOTk0Y2YyODZkOTcxNzk2YTk0N2ZlYTc4MmRmYzY2NTEgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCi1Gcm9tOiBGcmFuY2lzIEdpcmFsZGVhdSA8ZnJhbmNpcy5naXJhbGRlYXVAZ21haWwuY29tPgotRGF0ZTogTW9uLCAxNSBKdW4gMjAxNSAxMTo0MzowMiAtMDQwMAotU3ViamVjdDogW1BBVENIXSBGaXggaW52YWxpZCBwb2ludGVyIGZyZWUgd2l0aCB0cmFjZSBjb2xsZWN0aW9uCi0KLVVwc3RyZWFtLVN0YXR1czogU3VibWl0dGVkCi0KLVBhdGNoIHByb3Bvc2VkIGJ5IExpIFJvbmdRaW5nIHJlbGF0ZWQgdG8gYnVnIyA3OTAKLQotU2lnbmVkLW9mZi1ieTogTWlrYWVsIEJlY2tpdXMgPG1pa2FlbC5iZWNraXVzQHdpbmRyaXZlci5jb20+Ci1TaWduZWQtb2ZmLWJ5OiBGcmFuY2lzIEdpcmFsZGVhdSA8ZnJhbmNpcy5naXJhbGRlYXVAZ21haWwuY29tPgotLS0tCi0gbGliL2NvbnRleHQuYyB8IDggKysrLS0tLS0KLSAxIGZpbGUgY2hhbmdlZCwgMyBpbnNlcnRpb25zKCspLCA1IGRlbGV0aW9ucygtKQotCi1kaWZmIC0tZ2l0IGEvbGliL2NvbnRleHQuYyBiL2xpYi9jb250ZXh0LmMKLWluZGV4IDQ1YWFiMzQuLjhkMzc3MGYgMTAwNjQ0Ci0tLS0gYS9saWIvY29udGV4dC5jCi0rKysgYi9saWIvY29udGV4dC5jCi1AQCAtNzksNyArNzksNyBAQCBpbnQgYnRfY29udGV4dF9hZGRfdHJhY2Uoc3RydWN0IGJ0X2NvbnRleHQgKmN0eCwgY29uc3QgY2hhciAqcGF0aCwKLSAJc3RydWN0IGJ0X3RyYWNlX2Rlc2NyaXB0b3IgKnRkOwotIAlzdHJ1Y3QgYnRfZm9ybWF0ICpmbXQ7Ci0gCXN0cnVjdCBidF90cmFjZV9oYW5kbGUgKmhhbmRsZTsKLS0JaW50IHJldCwgY2xvc2VyZXQ7Ci0rCWludCByZXQ7Ci0gCi0gCWlmICghY3R4IHx8ICFmb3JtYXRfbmFtZSB8fCAoIXBhdGggJiYgIXN0cmVhbV9saXN0KSkKLSAJCXJldHVybiAtRUlOVkFMOwotQEAgLTE1OSwxMCArMTU5LDggQEAgaW50IGJ0X2NvbnRleHRfYWRkX3RyYWNlKHN0cnVjdCBidF9jb250ZXh0ICpjdHgsIGNvbnN0IGNoYXIgKnBhdGgsCi0gCXJldHVybiBoYW5kbGUtPmlkOwotIAotIGVycm9yOgotLQljbG9zZXJldCA9IGZtdC0+Y2xvc2VfdHJhY2UodGQpOwotLQlpZiAoY2xvc2VyZXQpIHsKLS0JCWZwcmludGYoc3RkZXJyLCAiRXJyb3IgaW4gY2xvc2VfdHJhY2UgY2FsbGJhY2tcbiIpOwotLQl9Ci0rCWlmIChoYW5kbGUpCi0rCQlidF9jb250ZXh0X3JlbW92ZV90cmFjZShjdHgsIGhhbmRsZS0+aWQpOwotIGVuZDoKLSAJcmV0dXJuIHJldDsKLSB9Ci0tLSAKLTEuOS4xCi0KZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMta2VybmVsL2x0dG5nL2JhYmVsdHJhY2UvMDAwMS1sdHRuZy1saXZlLUluY2x1ZGUtc3lzLXBhcmFtLmgtZm9yLU1BWE5BTUxFTi1kZWZpbnRpLnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1rZXJuZWwvbHR0bmcvYmFiZWx0cmFjZS8wMDAxLWx0dG5nLWxpdmUtSW5jbHVkZS1zeXMtcGFyYW0uaC1mb3ItTUFYTkFNTEVOLWRlZmludGkucGF0Y2gKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGViMTZjZDEuLjAwMDAwMDAKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1rZXJuZWwvbHR0bmcvYmFiZWx0cmFjZS8wMDAxLWx0dG5nLWxpdmUtSW5jbHVkZS1zeXMtcGFyYW0uaC1mb3ItTUFYTkFNTEVOLWRlZmludGkucGF0Y2gKKysrIC9kZXYvbnVsbApAQCAtMSwyOSArMCwwIEBACi1Gcm9tIDgzMzFiODc4NDVjYWZkZGE0MGU1OWE2ODJmMmNhODEyMGVkMGM0NzIgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCi1Gcm9tOiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgotRGF0ZTogVGh1LCAzMSBEZWMgMjAxNSAwODoxNzo0MCArMDAwMAotU3ViamVjdDogW1BBVENIXSBsdHRuZy1saXZlOiBJbmNsdWRlIHN5cy9wYXJhbS5oIGZvciBNQVhOQU1MRU4gZGVmaW50aW9uCi0KLWV4cG9zZWQgb24gbXVzbCBiYXNlZCBzeXN0ZW1zCi0KLVNpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+Ci0tLS0KLVVwc3RyZWFtLVN0YXR1czogcGVuZGluZwotCi0gZm9ybWF0cy9sdHRuZy1saXZlL2x0dG5nLWxpdmUuaCB8IDEgKwotIDEgZmlsZSBjaGFuZ2VkLCAxIGluc2VydGlvbigrKQotCi1kaWZmIC0tZ2l0IGEvZm9ybWF0cy9sdHRuZy1saXZlL2x0dG5nLWxpdmUuaCBiL2Zvcm1hdHMvbHR0bmctbGl2ZS9sdHRuZy1saXZlLmgKLWluZGV4IDRhYjY0MWQuLjgwOGVkMmIgMTAwNjQ0Ci0tLS0gYS9mb3JtYXRzL2x0dG5nLWxpdmUvbHR0bmctbGl2ZS5oCi0rKysgYi9mb3JtYXRzL2x0dG5nLWxpdmUvbHR0bmctbGl2ZS5oCi1AQCAtMjUsNiArMjUsNyBAQAotICAqLwotIAotICNpbmNsdWRlIDxzdGRpbnQuaD4KLSsjaW5jbHVkZSA8c3lzL3BhcmFtLmg+Ci0gI2luY2x1ZGUgImx0dG5nLXZpZXdlci1hYmkuaCIKLSAKLSAjZGVmaW5lIExUVE5HX0RFRkFVTFRfTkVUV09SS19WSUVXRVJfUE9SVAk1MzQ0Ci0tLSAKLTIuNi40Ci0KZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMta2VybmVsL2x0dG5nL2JhYmVsdHJhY2VfMS4zLjEuYmIgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWtlcm5lbC9sdHRuZy9iYWJlbHRyYWNlXzEuMy4xLmJiCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxNzY2MDI2Li4wMDAwMDAwCi0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMta2VybmVsL2x0dG5nL2JhYmVsdHJhY2VfMS4zLjEuYmIKKysrIC9kZXYvbnVsbApAQCAtMSwyNCArMCwwIEBACi1TVU1NQVJZID0gIkJhYmVsdHJhY2UgLSBUcmFjZSBGb3JtYXQgQmFiZWwgVG93ZXIiCi1ERVNDUklQVElPTiA9ICJCYWJlbHRyYWNlIHByb3ZpZGVzIHRyYWNlIHJlYWQgYW5kIHdyaXRlIGxpYnJhcmllcyBpbiBob3N0IHNpZGUsIGFzIHdlbGwgYXMgYSB0cmFjZSBjb252ZXJ0ZXIsIHdoaWNoIHVzZWQgdG8gY29udmVydCBMVFRuZyAyLjAgdHJhY2VzIGludG8gaHVtYW4tcmVhZGFibGUgbG9nLiIKLUhPTUVQQUdFID0gImh0dHA6Ly93d3cuZWZmaWNpb3MuY29tL2JhYmVsdHJhY2UvIgotQlVHVFJBQ0tFUiA9ICJodHRwczovL2J1Z3MubHR0bmcub3JnL3Byb2plY3RzL2JhYmVsdHJhY2UiCi0KLUxJQ0VOU0UgPSAiTUlUICYgR1BMdjIiCi1MSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9MSUNFTlNFO21kNT03NmJhMTVkZDc2YTI0OGUxZGQ1MjZiY2EwZTIxMjVmYSIKLQotREVQRU5EUyA9ICJnbGliLTIuMCB1dGlsLWxpbnV4IHBvcHQgYmlzb24tbmF0aXZlIGZsZXgtbmF0aXZlIgotCi1pbmhlcml0IGF1dG90b29scyBwa2djb25maWcKLQotU1JDUkVWID0gIjZlMmI5MDk2Yzc3MTM4NTkzMDk3MzM1YjliMjcyMDJkOTg5MTgwODkiCi0KLVNSQ19VUkkgPSAiZ2l0Oi8vZ2l0LmVmZmljaW9zLmNvbS9iYWJlbHRyYWNlLmdpdDticmFuY2g9c3RhYmxlLTEuMyBcCi0gICAgICAgICAgIGZpbGU6Ly8wMDAxLUZpeC1pbnZhbGlkLXBvaW50ZXItZnJlZS13aXRoLXRyYWNlLWNvbGxlY3Rpb24ucGF0Y2ggXAotICAgICAgICAgICBmaWxlOi8vMDAwMS1sdHRuZy1saXZlLUluY2x1ZGUtc3lzLXBhcmFtLmgtZm9yLU1BWE5BTUxFTi1kZWZpbnRpLnBhdGNoIFwKLSIKLQotUyA9ICIke1dPUktESVJ9L2dpdCIKLQotZG9fY29uZmlndXJlX3ByZXBlbmQgKCkgewotCSggY2QgJHtTfTsgJHtTfS9ib290c3RyYXAgKQotfQpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1rZXJuZWwvbHR0bmcvYmFiZWx0cmFjZV8xLjQuMC5iYiBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMta2VybmVsL2x0dG5nL2JhYmVsdHJhY2VfMS40LjAuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGZhZGViMAotLS0gL2Rldi9udWxsCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMta2VybmVsL2x0dG5nL2JhYmVsdHJhY2VfMS40LjAuYmIKQEAgLTAsMCArMSwyMCBAQAorU1VNTUFSWSA9ICJCYWJlbHRyYWNlIC0gVHJhY2UgRm9ybWF0IEJhYmVsIFRvd2VyIgorREVTQ1JJUFRJT04gPSAiQmFiZWx0cmFjZSBwcm92aWRlcyB0cmFjZSByZWFkIGFuZCB3cml0ZSBsaWJyYXJpZXMgaW4gaG9zdCBzaWRlLCBhcyB3ZWxsIGFzIGEgdHJhY2UgY29udmVydGVyLCB3aGljaCB1c2VkIHRvIGNvbnZlcnQgTFRUbmcgMi4wIHRyYWNlcyBpbnRvIGh1bWFuLXJlYWRhYmxlIGxvZy4iCitIT01FUEFHRSA9ICJodHRwOi8vd3d3LmVmZmljaW9zLmNvbS9iYWJlbHRyYWNlLyIKK0JVR1RSQUNLRVIgPSAiaHR0cHM6Ly9idWdzLmx0dG5nLm9yZy9wcm9qZWN0cy9iYWJlbHRyYWNlIgorCitMSUNFTlNFID0gIk1JVCAmIEdQTHYyIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vTElDRU5TRTttZDU9NzZiYTE1ZGQ3NmEyNDhlMWRkNTI2YmNhMGUyMTI1ZmEiCisKK0RFUEVORFMgPSAiZ2xpYi0yLjAgdXRpbC1saW51eCBwb3B0IGJpc29uLW5hdGl2ZSBmbGV4LW5hdGl2ZSIKKworaW5oZXJpdCBhdXRvdG9vbHMgcGtnY29uZmlnCisKK1NSQ19VUkkgPSAiaHR0cDovL3d3dy5lZmZpY2lvcy5jb20vZmlsZXMvYmFiZWx0cmFjZS9iYWJlbHRyYWNlLSR7UFZ9LnRhci5iejIgXAorIgorCitFWFRSQV9PRUNPTkYgPSAiLS1kaXNhYmxlLWRlYnVnLWluZm8iCisKK1NSQ19VUklbbWQ1c3VtXSA9ICJmYTk5MDY0MDQ4YWY1YzljNmZmMDBlNDg5YWM4MDljMiIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICI5NDY5ZWViMjI2MTdjZDEyNjY4NjgzYjA0YzI3MDAzZTUzMzdlOWFjNjZhZGU5MTQ5ODhkZjM2NDJmYzBkMGU0IgorCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWtlcm5lbC9sdHRuZy9sdHRuZy1tb2R1bGVzL01ha2VmaWxlLURvLW5vdC1mYWlsLWlmLUNPTkZJR19UUkFDRVBPSU5UUy1pcy1ub3QtZW4ucGF0Y2ggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWtlcm5lbC9sdHRuZy9sdHRuZy1tb2R1bGVzL01ha2VmaWxlLURvLW5vdC1mYWlsLWlmLUNPTkZJR19UUkFDRVBPSU5UUy1pcy1ub3QtZW4ucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmE5MWYzMgotLS0gL2Rldi9udWxsCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMta2VybmVsL2x0dG5nL2x0dG5nLW1vZHVsZXMvTWFrZWZpbGUtRG8tbm90LWZhaWwtaWYtQ09ORklHX1RSQUNFUE9JTlRTLWlzLW5vdC1lbi5wYXRjaApAQCAtMCwwICsxLDQ5IEBACitGcm9tIDFiMGU1NzRkNjgwMTAxMTA1YTZjMWU4OTMxYzc4ODI0ZjVhOTdhNDIgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBPdGF2aW8gU2FsdmFkb3IgPG90YXZpb0Bvc3N5c3RlbXMuY29tLmJyPgorRGF0ZTogTW9uLCA1IFNlcCAyMDE2IDE3OjA4OjU2ICswMDAwCitTdWJqZWN0OiBbUEFUQ0hdIE1ha2VmaWxlOiBEbyBub3QgZmFpbCBpZiBDT05GSUdfVFJBQ0VQT0lOVFMgaXMgbm90IGVuYWJsZWQKK09yZ2FuaXphdGlvbjogTy5TLiBTeXN0ZW1zIFNvZnR3YXJlIExUREEuCisKK1RoZSBsdHRuZy1tb2R1bGVzIGFyZSBiZWluZyBwdWxsZWQgYnkgdGhlIHRvb2xzLXByb2ZpbGUgaW1hZ2UgZmVhdHVyZSwKK2hvd2V2ZXIsIG5vdCBldmVyeSBrZXJuZWwgaGFzIHRoZSBDT05GSUdfVFJBQ0VQT0lOVFMgZmVhdHVyZSBlbmFibGVkLgorCitUaGlzIGNoYW5nZSBtYWtlcyB0aGUgYnVpbGQgZG8gbm90IGZhaWwgd2hlbiBDT05GSUdfVFJBQ0VQT0lOVFMgaXMgbm90CithdmFpbGFibGUsIGFsbG93aW5nIGl0IHRvIGJlIGtlcHQgYmVpbmcgcHVsbGVkIGJ5IGRlZmF1bHQuCisKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHJvcHJpYXRlIFtlbWJlZGRlZCBzcGVjaWZpY10KKworU2lnbmVkLW9mZi1ieTogT3RhdmlvIFNhbHZhZG9yIDxvdGF2aW9Ab3NzeXN0ZW1zLmNvbS5icj4KKy0tLQorIE1ha2VmaWxlIHwgOSArKysrKy0tLS0KKyAxIGZpbGUgY2hhbmdlZCwgNSBpbnNlcnRpb25zKCspLCA0IGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvTWFrZWZpbGUgYi9NYWtlZmlsZQoraW5kZXggODYwMjY0OS4uNzU1NTBjYyAxMDA2NDQKKy0tLSBhL01ha2VmaWxlCisrKysgYi9NYWtlZmlsZQorQEAgLTgsMTAgKzgsNyBAQCBpZm5lcSAoJChLRVJORUxSRUxFQVNFKSwpCisgICAjIGFuZCBkZWZpbmVzIHRoZSBtb2R1bGVzIHRvIGJlIGJ1aWx0LgorIAorICAgaWZkZWYgQ09ORklHX0xPQ0FMVkVSU0lPTgkjIENoZWNrIGlmIGRvdC1jb25maWcgaXMgaW5jbHVkZWQuCistICAgIGlmZXEgKCQoQ09ORklHX1RSQUNFUE9JTlRTKSwpCistICAgICAgJChlcnJvciBUaGUgb3B0aW9uIENPTkZJR19UUkFDRVBPSU5UUyBuZWVkcyB0byBiZSBlbmFibGVkIGluIHlvdXIga2VybmVsIGNvbmZpZ3VyYXRpb24pCistICAgIGVuZGlmICMgQ09ORklHX1RSQUNFUE9JTlRTCistICBlbmRpZiAjIGlmZGVmIENPTkZJR19MT0NBTFZFUlNJT04KKysgICAgaWZuZXEgKCQoQ09ORklHX1RSQUNFUE9JTlRTKSwpCisgCisgICBUT1BfTFRUTkdfTU9EVUxFU19ESVIgOj0gJChzaGVsbCBkaXJuYW1lICQobGFzdHdvcmQgJChNQUtFRklMRV9MSVNUKSkpCisgCitAQCAtOTQsNiArOTEsMTAgQEAgaWZuZXEgKCQoS0VSTkVMUkVMRUFTRSksKQorICAgb2JqLSQoQ09ORklHX0xUVE5HKSArPSBsaWIvCisgICBvYmotJChDT05GSUdfTFRUTkcpICs9IHRlc3RzLworIAorKyAgICBlbHNlCisrICAgICAgJCh3YXJuaW5nIFRoZSBvcHRpb24gQ09ORklHX1RSQUNFUE9JTlRTIG5lZWRzIHRvIGJlIGVuYWJsZWQgaW4geW91ciBrZXJuZWwgY29uZmlndXJhdGlvbikKKysgICAgZW5kaWYgIyBDT05GSUdfVFJBQ0VQT0lOVFMKKysgIGVuZGlmICMgaWZkZWYgQ09ORklHX0xPQ0FMVkVSU0lPTgorIGVsc2UgIyBLRVJORUxSRUxFQVNFCisgCisgIyBUaGlzIHBhcnQgb2YgdGhlIE1ha2VmaWxlIGlzIHVzZWQgd2hlbiB0aGUgJ21ha2UnIGNvbW1hbmQgaXMgcnVubmVkIGluIHRoZQorLS0gCisyLjEuNAorCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWtlcm5lbC9sdHRuZy9sdHRuZy1tb2R1bGVzX2dpdC5iYiBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMta2VybmVsL2x0dG5nL2x0dG5nLW1vZHVsZXNfZ2l0LmJiCmluZGV4IDJlYjFhNTEuLjcwMTQ1NDEgMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMta2VybmVsL2x0dG5nL2x0dG5nLW1vZHVsZXNfZ2l0LmJiCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMta2VybmVsL2x0dG5nL2x0dG5nLW1vZHVsZXNfZ2l0LmJiCkBAIC04LDEyICs4LDEzIEBACiAKIGluaGVyaXQgbW9kdWxlCiAKLVNSQ1JFViA9ICI0NWUwZWJkOTFmOTk1Y2M3M2MyYjBkNWM2MGNmOWQxMmU4YzgzOGJmIgotUFYgPSAiMi43LjErZ2l0JHtTUkNQVn0iCitTUkNSRVYgPSAiNmU0ZmM2ZjM2ZDY4ZmIzYzhkNDAxMTNmODY3MGViNmU5YzhmZmQ3NiIKK1BWID0gIjIuOC4wK2dpdCR7U1JDUFZ9IgogCiBDT01QQVRJQkxFX0hPU1QgPSAnKHg4Nl82NHxpLjg2fHBvd2VycGN8YWFyY2g2NHxtaXBzfG5pb3MyfGFybSkuKi1saW51eCcKIAotU1JDX1VSSSA9ICJnaXQ6Ly9naXQubHR0bmcub3JnL2x0dG5nLW1vZHVsZXMuZ2l0O2JyYW5jaD1zdGFibGUtMi43IgorU1JDX1VSSSA9ICJnaXQ6Ly9naXQubHR0bmcub3JnL2x0dG5nLW1vZHVsZXMuZ2l0O2JyYW5jaD1zdGFibGUtMi44IFwKKyAgICAgICAgICAgZmlsZTovL01ha2VmaWxlLURvLW5vdC1mYWlsLWlmLUNPTkZJR19UUkFDRVBPSU5UUy1pcy1ub3QtZW4ucGF0Y2giCiAKIGV4cG9ydCBJTlNUQUxMX01PRF9ESVI9Imtlcm5lbC9sdHRuZy1tb2R1bGVzIgogCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWtlcm5lbC9sdHRuZy9sdHRuZy10b29scy8wMDAxLUZpeC1lcnJvci5oLWNvbW1vbi1lcnJvci5oLnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1rZXJuZWwvbHR0bmcvbHR0bmctdG9vbHMvMDAwMS1GaXgtZXJyb3IuaC1jb21tb24tZXJyb3IuaC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42YzhhOWIyCi0tLSAvZGV2L251bGwKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1rZXJuZWwvbHR0bmcvbHR0bmctdG9vbHMvMDAwMS1GaXgtZXJyb3IuaC1jb21tb24tZXJyb3IuaC5wYXRjaApAQCAtMCwwICsxLDMzIEBACitGcm9tIDY3MTJkYjYxN2ZlOTE1NWVhMjM2ZjY4NDBjMmJkMThkYmVjNGM4NzEgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBNaWNoYWVsIEplYW5zb24gPG1qZWFuc29uQGVmZmljaW9zLmNvbT4KK0RhdGU6IFdlZCwgMTUgSnVuIDIwMTYgMTc6MTg6MDMgLTA0MDAKK1N1YmplY3Q6IFtQQVRDSF0gRml4OiBlcnJvci5oIC0+IGNvbW1vbi9lcnJvci5oCitNSU1FLVZlcnNpb246IDEuMAorQ29udGVudC1UeXBlOiB0ZXh0L3BsYWluOyBjaGFyc2V0PVVURi04CitDb250ZW50LVRyYW5zZmVyLUVuY29kaW5nOiA4Yml0CisKK1Vwc3RyZWFtLVN0YXR1czogQmFja3BvcnQKKworU2lnbmVkLW9mZi1ieTogTWljaGFlbCBKZWFuc29uIDxtamVhbnNvbkBlZmZpY2lvcy5jb20+CitTaWduZWQtb2ZmLWJ5OiBKw6lyw6ltaWUgR2FsYXJuZWF1IDxqZXJlbWllLmdhbGFybmVhdUBlZmZpY2lvcy5jb20+CitTaWduZWQtb2ZmLWJ5OiBQZXRlciBMaXUgPHBldGVyLngubGl1QGV4dGVybmFsLmF0bGFzY29wY28uY29tPgorLS0tCisgc3JjL2Jpbi9sdHRuZy1zZXNzaW9uZC9hZ2VudC5jIHwgMiArLQorIDEgZmlsZSBjaGFuZ2VkLCAxIGluc2VydGlvbigrKSwgMSBkZWxldGlvbigtKQorCitkaWZmIC0tZ2l0IGEvc3JjL2Jpbi9sdHRuZy1zZXNzaW9uZC9hZ2VudC5jIGIvc3JjL2Jpbi9sdHRuZy1zZXNzaW9uZC9hZ2VudC5jCitpbmRleCA3Y2JiYmRlLi4zMTBhN2U4IDEwMDY0NAorLS0tIGEvc3JjL2Jpbi9sdHRuZy1zZXNzaW9uZC9hZ2VudC5jCisrKysgYi9zcmMvYmluL2x0dG5nLXNlc3Npb25kL2FnZW50LmMKK0BAIC0yOSw3ICsyOSw3IEBACisgI2luY2x1ZGUgImFnZW50LmgiCisgI2luY2x1ZGUgInVzdC1hcHAuaCIKKyAjaW5jbHVkZSAidXRpbHMuaCIKKy0jaW5jbHVkZSAiZXJyb3IuaCIKKysjaW5jbHVkZSAiY29tbW9uL2Vycm9yLmgiCisgCisgI2RlZmluZSBBR0VOVF9SRVRfQ09ERV9JTkRFWChjb2RlKSAoY29kZSAtIEFHRU5UX1JFVF9DT0RFX1NVQ0NFU1MpCisgCistLSAKKzEuOS4xCisKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMta2VybmVsL2x0dG5nL2x0dG5nLXRvb2xzL1JldmVydC1CdWlsZC1sb29rLWZvci1weXRob24tMy4wLXdoZW4tYnVpbGRpbmctcHl0aG8ucGF0Y2ggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWtlcm5lbC9sdHRuZy9sdHRuZy10b29scy9SZXZlcnQtQnVpbGQtbG9vay1mb3ItcHl0aG9uLTMuMC13aGVuLWJ1aWxkaW5nLXB5dGhvLnBhdGNoCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkMDVjMDRjLi4wMDAwMDAwCi0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMta2VybmVsL2x0dG5nL2x0dG5nLXRvb2xzL1JldmVydC1CdWlsZC1sb29rLWZvci1weXRob24tMy4wLXdoZW4tYnVpbGRpbmctcHl0aG8ucGF0Y2gKKysrIC9kZXYvbnVsbApAQCAtMSwzMCArMCwwIEBACi1Gcm9tOiBPdGF2aW8gU2FsdmFkb3IgPG90YXZpb0Bvc3N5c3RlbXMuY29tLmJyPgotRGF0ZTogRnJpLCA0IERlYyAyMDE1IDE2OjExOjQxICswMDAwCi1TdWJqZWN0OiBbUEFUQ0hdIFJldmVydCAiQnVpbGQ6IGxvb2sgZm9yIHB5dGhvbiA+PSAzLjAgd2hlbiBidWlsZGluZyBweXRob24gYmluZGluZ3MiCi1Pcmdhbml6YXRpb246IE8uUy4gU3lzdGVtcyBTb2Z0d2FyZSBMVERBLgotCi1UaGlzIHJldmVydHMgY29tbWl0IDIyNzcwM2EyY2VhZGEzYzEwNGVkZDU2NzU2ZDQ4NDU1Y2E0YzI3MWEuCi0KLVVwc3RyZWFtLVN0YXR1czogUGVuZGluZwotCi1TaWduZWQtb2ZmLWJ5OiBPdGF2aW8gU2FsdmFkb3IgPG90YXZpb0Bvc3N5c3RlbXMuY29tLmJyPgotLS0tCi0gY29uZmlndXJlLmFjIHwgMiArLQotIDEgZmlsZSBjaGFuZ2VkLCAxIGluc2VydGlvbigrKSwgMSBkZWxldGlvbigtKQotCi1kaWZmIC0tZ2l0IGEvY29uZmlndXJlLmFjIGIvY29uZmlndXJlLmFjCi1pbmRleCA0ZGVlNGI0Li42NjA4YmNkIDEwMDY0NAotLS0tIGEvY29uZmlndXJlLmFjCi0rKysgYi9jb25maWd1cmUuYWMKLUBAIC0zMzksNyArMzM5LDcgQEAgQU1fQ09ORElUSU9OQUwoW1BZVEhPTl9CSU5ESU5HXSwgW3Rlc3QgIngke2VuYWJsZV9weXRob25fYmluZGluZzoteWVzfSIgPSB4eWVzXSkKLSAKLSBpZiB0ZXN0ICJ4JHtlbmFibGVfcHl0aG9uX2JpbmRpbmc6LXllc30iID0geHllczsgdGhlbgotICAgQVhfUEtHX1NXSUcoJHN3aWdfdmVyc2lvbiwgW10sIFsgQUNfTVNHX0VSUk9SKFtTV0lHICRzd2lnX3ZlcnNpb24gb3IgbmV3ZXIgaXMgbmVlZGVkXSkgXSkKLS0gIEFNX1BBVEhfUFlUSE9OKFszLjBdKQotKyAgQU1fUEFUSF9QWVRIT04KLSAKLSAgIEFDX0FSR19WQVIoW1BZVEhPTl9JTkNMVURFXSwgW0luY2x1ZGUgZmxhZ3MgZm9yIHB5dGhvbiwgYnlwYXNzaW5nIHB5dGhvbi1jb25maWddKQotICAgQUNfQVJHX1ZBUihbUFlUSE9OX0NPTkZJR10sIFtQYXRoIHRvIHB5dGhvbi1jb25maWddKQotLS0gCi0yLjEuNAotCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWtlcm5lbC9sdHRuZy9sdHRuZy10b29scy9ydW4tcHRlc3QgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWtlcm5lbC9sdHRuZy9sdHRuZy10b29scy9ydW4tcHRlc3QKaW5kZXggZTc1ODgxNS4uNjIzMDA2MyAxMDA3NTUKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1rZXJuZWwvbHR0bmcvbHR0bmctdG9vbHMvcnVuLXB0ZXN0CisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMta2VybmVsL2x0dG5nL2x0dG5nLXRvb2xzL3J1bi1wdGVzdApAQCAtMSw0ICsxLDUgQEAKICMhL2Jpbi9zaAotCi1tYWtlIC1DIHRlc3RzIGluc3RhbGxjaGVjawotCisjIFdpdGhvdXQgLS1pZ25vcmUtZXhpdCwgdGhlIHRhcCBoYXJuZXNzIGNhdXNlcyBhbnkgRkFJTHMgd2l0aGluIGEKKyMgdGVzdCBwbGFuIHRvIHJhaXNlIEVSUk9SczsgdGhpcyBpcyBqdXN0IG5vaXNlLgorbWFrZWFyZ3M9IkxPR19EUklWRVJfRkxBR1M9LS1pZ25vcmUtZXhpdCIKK21ha2UgLXQgYWxsID4vZGV2L251bGwgMj4mMSAmJiBleGVjIG1ha2UgLXMgJG1ha2VhcmdzIGNoZWNrIDI+L2Rldi9udWxsCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWtlcm5lbC9sdHRuZy9sdHRuZy10b29scy9ydW50ZXN0LTIuNC4wLnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1rZXJuZWwvbHR0bmcvbHR0bmctdG9vbHMvcnVudGVzdC0yLjQuMC5wYXRjaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTU4YmNlNC4uMDAwMDAwMAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWtlcm5lbC9sdHRuZy9sdHRuZy10b29scy9ydW50ZXN0LTIuNC4wLnBhdGNoCisrKyAvZGV2L251bGwKQEAgLTEsMjcgKzAsMCBAQAotZGlmZiAtLWdpdCBhL01ha2VmaWxlLmFtIGIvTWFrZWZpbGUuYW0KLWluZGV4IDU4NGY1OWIuLmMyYmNhYmQgMTAwNjQ0Ci0tLS0gYS9NYWtlZmlsZS5hbQotKysrIGIvTWFrZWZpbGUuYW0KLUBAIC0xMiwzICsxMiw5IEBAIGRpc3RfZG9jX0RBVEEgPSBMSUNFTlNFIFwKLSBkaXN0X25vaW5zdF9EQVRBID0gQ29kaW5nU3R5bGUKLSAKLSBFWFRSQV9ESVNUID0gZXh0cmFzL2x0dG5nLWJhc2hfY29tcGxldGlvbiBncGwtMi4wLnR4dCBsZ3BsLTIuMS50eHQKLSsKLStpbnN0YWxsLXB0ZXN0OgotKwljcCAtciAkKHNyY2RpcikvdGVzdHMgJChERVNURElSKQotKwlmb3IgbSBpbiAkJChmaW5kICQoREVTVERJUikvdGVzdHMgLW5hbWUgTWFrZWZpbGUpOyBkbyBcCi0rICAgICAgICAgIHNlZCAtaSAtZSAnc3xeTWFrZWZpbGU6fF9NYWtlZmlsZTp8JyAkJG07IFwKLSsgICAgICAgIGRvbmUKLWRpZmYgLS1naXQgYS90ZXN0cy9ydW4uc2ggYi90ZXN0cy9ydW4uc2gKLWluZGV4IGM2YzUwZmQuLjY0NTUzNTkgMTAwNzU1Ci0tLS0gYS90ZXN0cy9ydW4uc2gKLSsrKyBiL3Rlc3RzL3J1bi5zaAotQEAgLTE5LDQgKzE5LDcgQEAKLSAKLSBbIC16ICIkMSIgXSAmJiBlY2hvICJFcnJvcjogTm8gdGVzdGxpc3QuIFBsZWFzZSBzcGVjaWZ5IGEgdGVzdGxpc3QgdG8gcnVuLiIgJiYgZXhpdCAxCi0gCi0tcHJvdmUgLS1tZXJnZSAtLWV4ZWMgJycgLSA8ICQxCi0rcHJvdmUgLS1tZXJnZSAtdiAtLWV4ZWMgJycgLSA8ICQxIHwgc2VkIFwKLSsgIC1lICdzfF5vayBcKC4qXCl8UEFTUzogXDF8JyBcCi0rICAtZSAnc3xebm90IG9rIFwoLipcKXxGQUlMOiBcMXwnIFwKLSsgIHwgZWdyZXAgLWggJ1BBU1N8RkFJTCcKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMta2VybmVsL2x0dG5nL2x0dG5nLXRvb2xzL3N0b3AtdXNpbmctU0lHVU5VU0VELnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1rZXJuZWwvbHR0bmcvbHR0bmctdG9vbHMvc3RvcC11c2luZy1TSUdVTlVTRUQucGF0Y2gKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGJkNGY3ZDEuLjAwMDAwMDAKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1rZXJuZWwvbHR0bmcvbHR0bmctdG9vbHMvc3RvcC11c2luZy1TSUdVTlVTRUQucGF0Y2gKKysrIC9kZXYvbnVsbApAQCAtMSw1MSArMCwwIEBACi1Gcm9tIDFmNTQxODFjMmRmMWZiOTJjMzMyM2E2ZGJmODI3M2ZiNjZiODgzYjYgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCi1Gcm9tOiA9P1VURi04P3E/Sj1DMz1BOXI9QzM9QTltaWU9MjBHYWxhcm5lYXU/PQotIDxqZXJlbWllLmdhbGFybmVhdUBlZmZpY2lvcy5jb20+Ci1EYXRlOiBTYXQsIDE3IE9jdCAyMDE1IDE5OjQxOjQ3IC0wNDAwCi1TdWJqZWN0OiBbUEFUQ0hdIFBvcnQ6IERvbid0IHVzZSBTSUdVTlVTRUQgd2hpY2ggaXMgbm90IGRlZmluZWQgb24gU29sYXJpcwotTUlNRS1WZXJzaW9uOiAxLjAKLUNvbnRlbnQtVHlwZTogdGV4dC9wbGFpbjsgY2hhcnNldD1VVEYtOAotQ29udGVudC1UcmFuc2Zlci1FbmNvZGluZzogOGJpdAotT3JnYW5pemF0aW9uOiBPLlMuIFN5c3RlbXMgU29mdHdhcmUgTFREQS4KLQotVXBzdHJlYW0tU3RhdHVzOiBCYWNrcG9ydCBbMi44LjBdCi0KLVNpZ25lZC1vZmYtYnk6IErDqXLDqW1pZSBHYWxhcm5lYXUgPGplcmVtaWUuZ2FsYXJuZWF1QGVmZmljaW9zLmNvbT4KLS0tLQotIHNyYy9jb21tb24vcnVuYXMuYyB8IDE4ICsrKysrLS0tLS0tLS0tLS0tLQotIDEgZmlsZSBjaGFuZ2VkLCA1IGluc2VydGlvbnMoKyksIDEzIGRlbGV0aW9ucygtKQotCi1kaWZmIC0tZ2l0IGEvc3JjL2NvbW1vbi9ydW5hcy5jIGIvc3JjL2NvbW1vbi9ydW5hcy5jCi1pbmRleCA1N2Y3MzgyLi4wODI1NDcwIDEwMDY0NAotLS0tIGEvc3JjL2NvbW1vbi9ydW5hcy5jCi0rKysgYi9zcmMvY29tbW9uL3J1bmFzLmMKLUBAIC01MzAsMjEgKzUzMCwxMyBAQCBpbnQgcnVuX2FzX3JtZGlyX3JlY3Vyc2l2ZShjb25zdCBjaGFyICpwYXRoLCB1aWRfdCB1aWQsIGdpZF90IGdpZCkKLSBzdGF0aWMKLSBpbnQgcmVzZXRfc2lnaGFuZGxlcih2b2lkKQotIHsKLS0JaW50IHNpZywgcmV0ID0gMDsKLSsJaW50IHNpZzsKLSAKLS0JZm9yIChzaWcgPSBTSUdIVVA7IHNpZyA8PSBTSUdVTlVTRUQ7IHNpZysrKSB7Ci0tCQkvKiBTa2lwIHVuYmxvY2thYmxlIHNpZ25hbHMuICovCi0tCQlpZiAoc2lnID09IFNJR0tJTEwgfHwgc2lnID09IFNJR1NUT1ApIHsKLS0JCQljb250aW51ZTsKLS0JCX0KLS0JCWlmIChzaWduYWwoc2lnLCBTSUdfREZMKSA9PSBTSUdfRVJSKSB7Ci0tCQkJUEVSUk9SKCJyZXNldCBzaWduYWwgJWQiLCBzaWcpOwotLQkJCXJldCA9IC0xOwotLQkJCWdvdG8gZW5kOwotLQkJfQotKwlEQkcoIlJlc2V0dGluZyBydW5fYXMgd29ya2VyIHNpZ25hbCBoYW5kbGVycyB0byBkZWZhdWx0Iik7Ci0rCWZvciAoc2lnID0gMTsgc2lnIDw9IDMxOyBzaWcrKykgewotKwkJKHZvaWQpIHNpZ25hbChzaWcsIFNJR19ERkwpOwotIAl9Ci0tZW5kOgotLQlyZXR1cm4gcmV0OwotKwlyZXR1cm4gMDsKLSB9Ci0gCi0gc3RhdGljCi0tLSAKLTIuNi4yCi0KZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMta2VybmVsL2x0dG5nL2x0dG5nLXRvb2xzX2dpdC5iYiBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMta2VybmVsL2x0dG5nL2x0dG5nLXRvb2xzX2dpdC5iYgppbmRleCA4YmQwOTg5Li5iZmM2NTdiIDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWtlcm5lbC9sdHRuZy9sdHRuZy10b29sc19naXQuYmIKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1rZXJuZWwvbHR0bmcvbHR0bmctdG9vbHNfZ2l0LmJiCkBAIC05LDQwICs5LDQxIEBACiAgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9ncGwtMi4wLnR4dDttZDU9YjIzNGVlNGQ2OWY1ZmNlNDQ4NmE4MGZkYWY0YTQyNjMgXAogICAgICAgICAgICAgICAgICAgICBmaWxlOi8vbGdwbC0yLjEudHh0O21kNT0wZjBkNzE1MDBlNmE1N2ZkMjRkODI1ZjMzMjQyYjljYSIKIAotREVQRU5EUyA9ICJsaWJ1cmN1IHBvcHQgbGlieG1sMiIKK0RFUEVORFMgPSAibGlidXJjdSBwb3B0IGxpYnhtbDIgdXRpbC1saW51eCIKIFJERVBFTkRTXyR7UE59ID0gImxpYmdjYyIKLVJERVBFTkRTXyR7UE59LXB0ZXN0ICs9ICJtYWtlIHBlcmwgYmFzaCIKK1JERVBFTkRTXyR7UE59LXB0ZXN0ICs9ICJtYWtlIHBlcmwgYmFzaCBnYXdrICR7UE59IGJhYmVsdHJhY2UgcHJvY3BzIgorIyBiYWJlbHN0YXRzLnBsIHdhbnRzIGdldG9wdC1sb25nCitSREVQRU5EU18ke1BOfS1wdGVzdCArPSAicGVybC1tb2R1bGUtZ2V0b3B0LWxvbmciCiAKLVNSQ1JFViA9ICJhOTBmMmMxZTEwYjc1OTc4MjY1M2E4MTgxNTYyNWU5ZDFiYmI3NWNhIgotUFYgPSAiMi43LjErZ2l0JHtTUkNQVn0iCitTUkNSRVYgPSAiZDExZTBkYmEwZGY5MDI0Yjg2MTNjNTFlMTY3YTM3OWI5MWU4YjIwYiIKK1BWID0gIjIuOC4xK2dpdCR7U1JDUFZ9IgogCi1QWVRIT05fT1BUSU9OID0gImFtX2N2X3B5dGhvbl9weWV4ZWNkaXI9JyR7bGliZGlyfS9weXRob24ke1BZVEhPTl9CQVNFVkVSU0lPTn0vc2l0ZS1wYWNrYWdlcycgXAotICAgICAgICAgICAgICAgICBhbV9jdl9weXRob25fcHl0aG9uZGlyPScke2xpYmRpcn0vcHl0aG9uJHtQWVRIT05fQkFTRVZFUlNJT059L3NpdGUtcGFja2FnZXMnIFwKLSAgICAgICAgICAgICAgICAgUFlUSE9OX0lOQ0xVREU9Jy1JJHtTVEFHSU5HX0lOQ0RJUn0vcHl0aG9uJHtQWVRIT05fQkFTRVZFUlNJT059JyBcCitQWVRIT05fT1BUSU9OID0gImFtX2N2X3B5dGhvbl9weWV4ZWNkaXI9JyR7UFlUSE9OX1NJVEVQQUNLQUdFU19ESVJ9JyBcCisgICAgICAgICAgICAgICAgIGFtX2N2X3B5dGhvbl9weXRob25kaXI9JyR7UFlUSE9OX1NJVEVQQUNLQUdFU19ESVJ9JyBcCisgICAgICAgICAgICAgICAgIFBZVEhPTl9JTkNMVURFPSctSSR7U1RBR0lOR19JTkNESVJ9L3B5dGhvbiR7UFlUSE9OX0JBU0VWRVJTSU9OfSR7UFlUSE9OX0FCSX0nIFwKICIKIFBBQ0tBR0VDT05GSUcgPz89ICJsdHRuZy11c3QiCi1QQUNLQUdFQ09ORklHW3B5dGhvbl0gPSAiLS1lbmFibGUtcHl0aG9uLWJpbmRpbmdzICR7UFlUSE9OX09QVElPTn0sLHB5dGhvbiBzd2lnLW5hdGl2ZSIKLVBBQ0tBR0VDT05GSUdbbHR0bmctdXN0XSA9ICItLWVuYWJsZS1sdHRuZy11c3QsIC0tZGlzYWJsZS1sdHRuZy11c3QsIGx0dG5nLXVzdCIKK1BBQ0tBR0VDT05GSUdbcHl0aG9uXSA9ICItLWVuYWJsZS1weXRob24tYmluZGluZ3MgJHtQWVRIT05fT1BUSU9OfSwscHl0aG9uMyBzd2lnLW5hdGl2ZSIKK1BBQ0tBR0VDT05GSUdbbHR0bmctdXN0XSA9ICItLXdpdGgtbHR0bmctdXN0LCAtLXdpdGhvdXQtbHR0bmctdXN0LCBsdHRuZy11c3QiCiBQQUNLQUdFQ09ORklHW2ttb2RdID0gIi0tZW5hYmxlLWttb2QsIC0tZGlzYWJsZS1rbW9kLCBrbW9kIgorUEFDS0FHRUNPTkZJR1ttYW5wYWdlc10gPSAiLS1lbmFibGUtbWFuLXBhZ2VzLCAtLWRpc2FibGUtbWFuLXBhZ2VzLCBhc2NpaWRvYy1uYXRpdmUiCiBQQUNLQUdFQ09ORklHX3JlbW92ZV9saWJjLW11c2wgPSAibHR0bmctdXN0IgogCi1TUkNfVVJJID0gImdpdDovL2dpdC5sdHRuZy5vcmcvbHR0bmctdG9vbHMuZ2l0O2JyYW5jaD1zdGFibGUtMi43IFwKLSAgICAgICAgICAgZmlsZTovL1JldmVydC1CdWlsZC1sb29rLWZvci1weXRob24tMy4wLXdoZW4tYnVpbGRpbmctcHl0aG8ucGF0Y2ggXAotICAgICAgICAgICBmaWxlOi8vc3RvcC11c2luZy1TSUdVTlVTRUQucGF0Y2ggXAotICAgICAgICAgICBmaWxlOi8vcnVudGVzdC0yLjQuMC5wYXRjaCBcCitTUkNfVVJJID0gImdpdDovL2dpdC5sdHRuZy5vcmcvbHR0bmctdG9vbHMuZ2l0O2JyYW5jaD1zdGFibGUtMi44IFwKKyAgICAgICAgICAgZmlsZTovLzAwMDEtRml4LWVycm9yLmgtY29tbW9uLWVycm9yLmgucGF0Y2ggXAogICAgICAgICAgICBmaWxlOi8vcnVuLXB0ZXN0IgogCiBTID0gIiR7V09SS0RJUn0vZ2l0IgogCi1pbmhlcml0IGF1dG90b29scy1icm9rZW5zZXAgcHRlc3QgcGtnY29uZmlnIHVzZXJhZGQKK2luaGVyaXQgYXV0b3Rvb2xzLWJyb2tlbnNlcCBwdGVzdCBwa2djb25maWcgdXNlcmFkZCBweXRob24zLWRpcgogCiBVU0VSQUREX1BBQ0tBR0VTID0gIiR7UE59IgogR1JPVVBBRERfUEFSQU1fJHtQTn0gPSAidHJhY2luZyIKIAogRklMRVNfJHtQTn0gKz0gIiR7bGliZGlyfS9sdHRuZy9saWJleGVjLyogJHtkYXRhZGlyfS94bWwvbHR0bmcgXAotICAgICAgICAgICAgICAgICR7bGliZGlyfS9weXRob24ke1BZVEhPTl9CQVNFVkVSU0lPTn0vc2l0ZS1wYWNrYWdlcy8qIgotRklMRVNfJHtQTn0tc3RhdGljZGV2ICs9ICIke2xpYmRpcn0vcHl0aG9uJHtQWVRIT05fQkFTRVZFUlNJT059L3NpdGUtcGFja2FnZXMvKi5hIgotRklMRVNfJHtQTn0tZGV2ICs9ICIke2xpYmRpcn0vcHl0aG9uJHtQWVRIT05fQkFTRVZFUlNJT059L3NpdGUtcGFja2FnZXMvKi5sYSIKKyAgICAgICAgICAgICAgICAke1BZVEhPTl9TSVRFUEFDS0FHRVNfRElSfS8qIgorRklMRVNfJHtQTn0tc3RhdGljZGV2ICs9ICIke1BZVEhPTl9TSVRFUEFDS0FHRVNfRElSfS8qLmEiCitGSUxFU18ke1BOfS1kZXYgKz0gIiR7UFlUSE9OX1NJVEVQQUNLQUdFU19ESVJ9LyoubGEiCiAKICMgU2luY2UgZmlsZXMgYXJlIGluc3RhbGxlZCBpbnRvICR7bGliZGlyfS9sdHRuZy9saWJleGVjIHdlIG1hdGNoIAogIyB0aGUgbGliZXhlYyBpbnNhbmUgdGVzdCBzbyBza2lwIGl0LgpAQCAtNTIsMzEgKzUzLDY0IEBACiAKIGRvX2NvbmZpZ3VyZV9wcmVwZW5kICgpIHsKIAkjIERlbGV0ZSBhIHNoaXBwZWQgbTQgZmlsZSB0aGF0IG92ZXJyaWRlcyBvdXIgcGF0Y2hlZCBvbmUKLQlybSAtZiAke1N9L2NvbmZpZy9saWJ4bWwubTQKKwlybSAtZiAke1N9L200L2xpYnhtbC5tNAogfQogCiBkb19pbnN0YWxsX3B0ZXN0ICgpIHsKLQljaG1vZCAreCAke0R9JHtQVEVTVF9QQVRIfS90ZXN0cy91dGlscy91dGlscy5zaAotCWZvciBpIGluIGBmaW5kICR7RH0ke1BURVNUX1BBVEh9IC1wZXJtIC91K3ggLXR5cGUgZmA7IGRvCi0JCXNlZCAtZSAiczpcJFRFU1RESVIuKi9zcmMvYmluL2x0dG5nL1wkTFRUTkdfQklOOlwkTFRUTkdfQklOOmciIFwKLQkJICAtZSAiczpcJFRFU1RESVIvLi4vc3JjL2Jpbi9sdHRuZy1zZXNzaW9uZC9cJFNFU1NJT05EX0JJTjpcJFNFU1NJT05EX0JJTjpnIiBcCi0JCSAgLWUgInM6XCRESVIvLi4vc3JjL2Jpbi9sdHRuZy1zZXNzaW9uZC9cJFNFU1NJT05EX0JJTjpcJFNFU1NJT05EX0JJTjpnIiBcCi0JCSAgLWUgInM6XCRURVNURElSLy4uL3NyYy9iaW4vbHR0bmctY29uc3VtZXJkLzoke2xpYmRpcn0vbHR0bmcvbGliZXhlYy86ZyIgXAotCQkgIC1lICJzOlwkRElSLy4uL3NyYy9iaW4vbHR0bmctY29uc3VtZXJkLzoke2xpYmRpcn0vbHR0bmcvbGliZXhlYy86ZyIgXAotCQkgIC1lICJzOlwkVEVTVERJUi8uLi9zcmMvYmluL2x0dG5nLXJlbGF5ZC9cJFJFTEFZRF9CSU46XCRSRUxBWURfQklOOmciIFwKLQkJICAtZSAiczpcJERJUi8uLi9zcmMvYmluL2x0dG5nLXNlc3Npb25kL2x0dG5nLXNlc3Npb25kOlwkU0VTU0lPTkRfQklOOmciIFwKLQkJICAtZSAiczpcJERJUi8uLi9zcmMvYmluL2x0dG5nLXJlbGF5ZC9cJFJFTEFZRF9CSU46XCRSRUxBWURfQklOOmciIFwKLQkJICAtZSAiczpcJERJUi8uLi9iaW4vbHR0bmctcmVsYXlkL1wkUkVMQVlEX0JJTjpcJFJFTEFZRF9CSU46ZyIgXAotCQkgIC1pICRpCisJbWtkaXIgLXAgJHtEfSR7UFRFU1RfUEFUSH0KKworCWNwIC1hIC1UICR7Qn0gJHtEfSR7UFRFU1RfUEFUSH0KKworCSMgUHJldmVudCBhdHRlbXB0cyB0byB1cGRhdGUgTWFrZWZpbGVzIGR1cmluZyB0ZXN0IHJ1bnMsIGFuZAorCSMgc2lsZW5jZSAiTWFraW5nIGNoZWNrIGluICRTVUJESVIiIG1lc3NhZ2VzLgorCWZpbmQgJHtEfSR7UFRFU1RfUEFUSH0gLW5hbWUgTWFrZWZpbGUgLXR5cGUgZiAtZXhlYyBcCisJCXNlZCAtaSAtZSAncyFeTWFrZWZpbGU6IV9NYWtlZmlsZTohJyBcCisJCS1lICcvZWNobyAiTWFraW5nICQkdGFyZ2V0IGluICQkc3ViZGlyIjsgXFwvZCcge30gKworCisJIyBQcmV2ZW50IGF0dGVtcHRzIHRvIHVwZGF0ZSB2ZXJzaW9uLmggZHVyaW5nIHRlc3QgcnVucy4KKwlzZWQgLWkgLWUgJy9eXC5QSE9OWTogdmVyc2lvblwuaCQvZCcgJHtEfSR7UFRFU1RfUEFUSH0vaW5jbHVkZS9NYWtlZmlsZQorCisJIyBTaWxlbmNlICJNYWtpbmcgY2hlY2sgaW4gJFNVQkRJUiIgbWVzc2FnZXMuCisJZmluZCAke0R9JHtQVEVTVF9QQVRIfSAtbmFtZSBNYWtlZmlsZSAtdHlwZSBmIC1leGVjIFwKKwkJc2VkIC1pIC1lICcvZWNobyAiTWFraW5nICQkdGFyZ2V0IGluICQkc3ViZGlyIjsgXFwvZCcge30gKworCisJIyBTdWJzdGl0dXRlIGxpbmtzIHRvIGluc3RhbGxlZCBiaW5hcmllcy4KKwlmb3IgcHJvZyBpbiBsdHRuZyBsdHRuZy1yZWxheWQgbHR0bmctc2Vzc2lvbmQgbHR0bmctY29uc3VtZXJkIDsgZG8KKwkJb3JpZz0iJHtEfSR7UFRFU1RfUEFUSH0vc3JjL2Jpbi8ke3Byb2d9LyR7cHJvZ30iCisJCXJtICIkb3JpZyIKKwkJY2FzZSAiJHByb2ciIGluCisJCQlsdHRuZy1jb25zdW1lcmQpCisJCQkJbG4gLXMgIiR7bGliZGlyfS9sdHRuZy9saWJleGVjLyRwcm9nIiAiJG9yaWciCisJCQkJOzsKKwkJCSopCisJCQkJbG4gLXMgIiR7YmluZGlyfS8kcHJvZyIgIiRvcmlnIgorCQkJCTs7CisJCWVzYWMKIAlkb25lCiAKLQkjIFVwZGF0ZSBsaWJkaXIgcmVmZXJlbmNlcyBpbiBjb3BpZWQgLmxhIGZpbGVzCi0JZm9yIGkgaW4gYGZpbmQgJHtEfSR7UFRFU1RfUEFUSH0gLXR5cGUgZiAtbmFtZSAqLmxhYDsgZG8KLQkJc2VkIC1pIC1lICdzIyR7U30vdGVzdHMvIyR7U1RBR0lOR19ESVJ9JHtQVEVTVF9QQVRIfSNnJyAkaQorCSMgUmVtb3ZlIGxpYnRvb2wgYXJ0aWZhY3RzLgorCWZpbmQgJHtEfSR7UFRFU1RfUEFUSH0gXCggLW5hbWUgJyoubFthb10nIC1vIC1uYW1lICcqLmxhaScgXCkgLWRlbGV0ZQorCisJIyBSZW1vdmUgb2JqZWN0IGZpbGVzIGFuZCBhcmNoaXZlcy4KKwlmaW5kICR7RH0ke1BURVNUX1BBVEh9IC1uYW1lICcqLltvYV0nIC10eXBlIGYgLWRlbGV0ZQorCisJIyBSZW1vdmUgTWFrZWZpbGUuYW0gYW5kIE1ha2VmaWxlLmluLgorCWZpbmQgJHtEfSR7UFRFU1RfUEFUSH0gLW5hbWUgJ01ha2VmaWxlLionIC10eXBlIGYgLWRlbGV0ZQorCisJIyBSZW1vdmUgYXV0b200dGUuY2FjaGUuCisJcm0gLXJmICR7RH0ke1BURVNUX1BBVEh9L2F1dG9tNHRlLmNhY2hlCisKKwkjIFJlcGxhY2UgbGlidG9vbCB3cmFwcGVyIHNjcmlwdHMgKHdoaWNoIHdvbid0IHdvcmsgb24gdGhlCisJIyB0YXJnZXQpIHdpdGggdGhlaXIgY29ycmVzcG9uZGluZyBiaW5hcmllcy4KKwlmb3IgcHJvZyBpbiB1bml0L2luaV9jb25maWcvaW5pX2NvbmZpZyBcCisJCXJlZ3Jlc3Npb24vdG9vbHMvbGl2ZS9saXZlX3Rlc3QgXAorCQlyZWdyZXNzaW9uL3Rvb2xzL2hlYWx0aC9oZWFsdGhfY2hlY2sgOyBkbworCQliYXNlbmFtZT0ke3Byb2cjIyovfQorCQlsZGlyPSR7RH0ke1BURVNUX1BBVEh9L3Rlc3RzLyR7cHJvZyUvKn0KKwkJbXYgLWYgJHtsZGlyfS8ubGlicy8ke2Jhc2VuYW1lfSAke2xkaXJ9CiAJZG9uZQogCi0Jc2VkIC1lICJzOnNyYy9iaW46YmluOmciIC1lICJzOmx0LTo6ZyIgXAotCS1pICR7RH0ke1BURVNUX1BBVEh9L3Rlc3RzL3V0aWxzL3V0aWxzLnNoCi0Jc2VkIC1lICJzOmluaV9jb25maWc6XC5saWJzXC9pbmlfY29uZmlnOiIgXAotCS1pICR7RH0ke1BURVNUX1BBVEh9L3Rlc3RzL3VuaXQvaW5pX2NvbmZpZy90ZXN0X2luaV9jb25maWcKKwkjIGNoZWNrcGF0Y2gucGwgaXMgdW5uZWVkZWQgb24gdGFyZ2V0IGFuZCBjYXVzZXMgZmlsZS1yZGVwcyBRQQorCSMgd2FybmluZ3MuCisJcm0gLWYgJHtEfSR7UFRFU1RfUEFUSH0vZXh0cmFzL2NoZWNrcGF0Y2gucGwKIH0KZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMta2VybmVsL2x0dG5nL2x0dG5nLXVzdC9sdHRuZy11c3QtYWRkLXN1cHBvcnQtZm9yLWFhcmNoNjRfYmUucGF0Y2ggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWtlcm5lbC9sdHRuZy9sdHRuZy11c3QvbHR0bmctdXN0LWFkZC1zdXBwb3J0LWZvci1hYXJjaDY0X2JlLnBhdGNoCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5YjM3YTRhLi4wMDAwMDAwCi0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMta2VybmVsL2x0dG5nL2x0dG5nLXVzdC9sdHRuZy11c3QtYWRkLXN1cHBvcnQtZm9yLWFhcmNoNjRfYmUucGF0Y2gKKysrIC9kZXYvbnVsbApAQCAtMSwxNyArMCwwIEBACi1sdHRuZy11c3Q6IGFkZCBzdXBwb3J0IGZvciBhYXJjaDY0X2JlCi0KLVVwc3RyZWFtLVN0YXR1czogUGVuZGluZwotCi1TaWduZWQtb2ZmLWJ5OiBUdWRvciBGbG9yZWEgPHR1ZG9yLmZsb3JlYUBlbmVhLmNvbT4KLQotZGlmZiAtLXJ1TiBhL2NvbmZpZ3VyZS5hYyBiL2NvbmZpZ3VyZS5hYwotLS0tIGEvY29uZmlndXJlLmFjCTIwMTYtMDItMTggMTQ6NTQ6NTQuNjUxNzEzNjQ3ICswMTAwCi0rKysgYi9jb25maWd1cmUuYWMJMjAxNi0wMi0xOCAxNDo1NjoxMS4wNTc4NjUyOTcgKzAxMDAKLUBAIC0yNDAsNiArMjQwLDcgQEAKLSAJczM5MHgpIE5PX1VOQUxJR05FRF9BQ0NFU1M9MSA7OwotICAgICAgICAgYXJtKikgTk9fVU5BTElHTkVEX0FDQ0VTUz0xIDs7Ci0gCWFhcmNoNjQpIE5PX1VOQUxJR05FRF9BQ0NFU1M9MSA7OwotKyAgICAgICAgYWFyY2g2NF9iZSkgTk9fVU5BTElHTkVEX0FDQ0VTUz0xIDs7Ci0gCW1pcHMqKSBOT19VTkFMSUdORURfQUNDRVNTPTEgOzsKLSAJdGlsZSopIE5PX1VOQUxJR05FRF9BQ0NFU1M9MSA7OwotIAkqKQpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1rZXJuZWwvbHR0bmcvbHR0bmctdXN0L2x0dG5nLXVzdC1kb2MtZXhhbXBsZXMtZGlzYWJsZS5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMta2VybmVsL2x0dG5nL2x0dG5nLXVzdC9sdHRuZy11c3QtZG9jLWV4YW1wbGVzLWRpc2FibGUucGF0Y2gKaW5kZXggYjY4YTk4OS4uY2FmMGI4YiAxMDA2NDQKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1rZXJuZWwvbHR0bmcvbHR0bmctdXN0L2x0dG5nLXVzdC1kb2MtZXhhbXBsZXMtZGlzYWJsZS5wYXRjaAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWtlcm5lbC9sdHRuZy9sdHRuZy11c3QvbHR0bmctdXN0LWRvYy1leGFtcGxlcy1kaXNhYmxlLnBhdGNoCkBAIC0xMSw3ICsxMSw3IEBACiAtLS0gYS9kb2MvTWFrZWZpbGUuYW0KICsrKyBiL2RvYy9NYWtlZmlsZS5hbQogQEAgLTEsNCArMSw0IEBACi0tU1VCRElSUyA9IC4gZXhhbXBsZXMKKy1TVUJESVJTID0gLiBtYW4gZXhhbXBsZXMKICtTVUJESVJTID0gLgogIAogIGRpc3RfbWFuX01BTlMgPSBtYW4vbHR0bmctZ2VuLXRwLjEgXApkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1rZXJuZWwvbHR0bmcvbHR0bmctdXN0X2dpdC5iYiBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMta2VybmVsL2x0dG5nL2x0dG5nLXVzdF9naXQuYmIKaW5kZXggMTVkOTI1ZC4uYmFmZjcxZiAxMDA2NDQKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1rZXJuZWwvbHR0bmcvbHR0bmctdXN0X2dpdC5iYgorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWtlcm5lbC9sdHRuZy9sdHRuZy11c3RfZ2l0LmJiCkBAIC0xMSwyMiArMTEsMzAgQEAKIGluaGVyaXQgYXV0b3Rvb2xzIGxpYl9wYWNrYWdlCiAKIERFUEVORFMgPSAibGlidXJjdSB1dGlsLWxpbnV4IgotUkRFUEVORFNfJHtQTn0tYmluID0gInB5dGhvbi1jb3JlIgorUkRFUEVORFNfJHtQTn0tYmluID0gInB5dGhvbjMtY29yZSIKIAogIyBGb3IgYmFja3dhcmRzIGNvbXBhdGliaWxpdHkgYWZ0ZXIgcmVuYW1lCiBSUFJPVklERVNfJHtQTn0gPSAibHR0bmcyLXVzdCIKIFJSRVBMQUNFU18ke1BOfSA9ICJsdHRuZzItdXN0IgogUkNPTkZMSUNUU18ke1BOfSA9ICJsdHRuZzItdXN0IgogCi1TUkNSRVYgPSAiZjg5YzFhM2NmMmIwNmE0OTcwYjkxNTRjMDBmZjY0MDk4NzBhZWZiNSIKK1NSQ1JFViA9ICI1MTRhODdmM2I2NDE4MWUzODQzOTk5MzVhNTcwOGE4Zjg1YjBjYzgzIgogUEUgPSAiMiIKLVBWID0gIjIuNy4xK2dpdCR7U1JDUFZ9IgorUFYgPSAiMi44LjErZ2l0JHtTUkNQVn0iCiAKLVNSQ19VUkkgPSAiZ2l0Oi8vZ2l0Lmx0dG5nLm9yZy9sdHRuZy11c3QuZ2l0O2JyYW5jaD1zdGFibGUtMi43IFwKK1NSQ19VUkkgPSAiZ2l0Oi8vZ2l0Lmx0dG5nLm9yZy9sdHRuZy11c3QuZ2l0O2JyYW5jaD1zdGFibGUtMi44IFwKICAgICAgICAgICAgZmlsZTovL2x0dG5nLXVzdC1kb2MtZXhhbXBsZXMtZGlzYWJsZS5wYXRjaCBcCi0gICAgICAgICAgIGZpbGU6Ly9sdHRuZy11c3QtYWRkLXN1cHBvcnQtZm9yLWFhcmNoNjRfYmUucGF0Y2ggXAogICAgICAgICAgICIKIAorRVhUUkFfT0VDT05GICs9ICItLWRpc2FibGUtbWFuLXBhZ2VzIgorCitkb19pbnN0YWxsX2FwcGVuZCgpIHsKKyAgICAgICAgIyBQYXRjaCBweXRob24gdG9vbHMgdG8gdXNlIFB5dGhvbiAzOyB0aGV5IHNob3VsZCBiZSBzb3VyY2UgY29tcGF0aWJsZSwgYnV0CisgICAgICAgICMgc3RpbGwgcmVmZXIgdG8gUHl0aG9uIDIgaW4gdGhlIHNoZWJhbmcKKyAgICAgICAgc2VkIC1pIC1lICcxcywjIS4qcHl0aG9uLiosIyEke2JpbmRpcn0vcHl0aG9uMywnICR7RH0ke2JpbmRpcn0vbHR0bmctZ2VuLXRwCit9CisKKwogUyA9ICIke1dPUktESVJ9L2dpdCIKIAogZG9fY29uZmlndXJlX3ByZXBlbmQgKCkgewpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1rZXJuZWwvb3Byb2ZpbGUvb3Byb2ZpbGUuaW5jIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1rZXJuZWwvb3Byb2ZpbGUvb3Byb2ZpbGUuaW5jCmluZGV4IGNmM2FkNDMuLjk2ZWY0M2QgMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMta2VybmVsL29wcm9maWxlL29wcm9maWxlLmluYworKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWtlcm5lbC9vcHJvZmlsZS9vcHJvZmlsZS5pbmMKQEAgLTI0LDcgKzI0LDkgQEAKICAgICAgICAgICAgZmlsZTovL29wcm9maWxlLWNyb3NzLWNvbXBpbGUtdGVzdHMucGF0Y2ggXAogICAgICAgICAgICBmaWxlOi8vcnVuLXB0ZXN0IFwKICAgICAgICAgICAgZmlsZTovL3Jvb3QtaG9tZS1kaXIucGF0Y2ggXAotICAgICAgICAgICBmaWxlOi8vMDAwMS1BZGQtcm1iLWRlZmluaXRpb24tZm9yLU5JT1MyLWFyY2hpdGVjdHVyZS5wYXRjaCIKKyAgICAgICAgICAgZmlsZTovLzAwMDEtQWRkLXJtYi1kZWZpbml0aW9uLWZvci1OSU9TMi1hcmNoaXRlY3R1cmUucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vMDAwMS1GaXgtRlRCRlMtcHJvYmxlbS13aXRoLUdDQy02LnBhdGNoIFwKKyIKIAogU1JDX1VSSV9hcHBlbmRfbGliYy1tdXNsID0gIiBmaWxlOi8vbXVzbC5wYXRjaCIKIApkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1rZXJuZWwvb3Byb2ZpbGUvb3Byb2ZpbGUvMDAwMS1GaXgtRlRCRlMtcHJvYmxlbS13aXRoLUdDQy02LnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1rZXJuZWwvb3Byb2ZpbGUvb3Byb2ZpbGUvMDAwMS1GaXgtRlRCRlMtcHJvYmxlbS13aXRoLUdDQy02LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQzNzJmZDUKLS0tIC9kZXYvbnVsbAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWtlcm5lbC9vcHJvZmlsZS9vcHJvZmlsZS8wMDAxLUZpeC1GVEJGUy1wcm9ibGVtLXdpdGgtR0NDLTYucGF0Y2gKQEAgLTAsMCArMSw1MSBAQAorRnJvbSAzOWQ0ZDQ2YTBiZDUwNGFjNzA4ZmZlNzJkZjg3YmY3NGNkMTJhZDMwIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogV2lsbGlhbSBDb2hlbiA8d2NvaGVuQHJlZGhhdC5jb20+CitEYXRlOiBGcmksIDUgRmViIDIwMTYgMTc6MzA6MTkgLTA1MDAKK1N1YmplY3Q6IFtQQVRDSF0gRml4IEZUQkZTIHByb2JsZW0gd2l0aCBHQ0MtNgorCitHQ0MtNiBpcyBwaWNraWVyIGFib3V0IHNvbWUgb2YgdGhlIHR5cGUgY29udmVyc2lvbnMgY2F1c2luZyB0aGUgRmVkb3JhCisyNCBtYXNzIHJlYnVpbGQgdGhlIGJ1aWxkIG9mIG9wcm9maWxlIGZhaWxlZCB3aXRoOgorCittYWtlWzNdOiBFbnRlcmluZyBkaXJlY3RvcnkgJy9idWlsZGRpci9idWlsZC9CVUlMRC9vcHJvZmlsZS0xLjEuMC9saWJ1dGlsKysnCitnKysgLURIQVZFX0NPTkZJR19IIC1JLiAtSS4uICAtSSAuLi9saWJ1dGlsIC1JIC4uL2xpYm9wIC1JIC4uL2xpYnBwICAgLVcgLVdhbGwgLWZuby1jb21tb24gLWZ0ZW1wbGF0ZS1kZXB0aC01MCAtTzIgLWcgLXBpcGUgLVdhbGwgLVdlcnJvcj1mb3JtYXQtc2VjdXJpdHkgLVdwLC1EX0ZPUlRJRllfU09VUkNFPTIgLWZleGNlcHRpb25zIC1mc3RhY2stcHJvdGVjdG9yLXN0cm9uZyAtLXBhcmFtPXNzcC1idWZmZXItc2l6ZT00IC1ncmVjb3JkLWdjYy1zd2l0Y2hlcyAtc3BlY3M9L3Vzci9saWIvcnBtL3JlZGhhdC9yZWRoYXQtaGFyZGVuZWQtY2MxIC1tMzIgLW1hcmNoPWk2ODYgLW10dW5lPWF0b20gLWZhc3luY2hyb25vdXMtdW53aW5kLXRhYmxlcyAtYyAtbyBvcF9iZmQubyBvcF9iZmQuY3BwCitvcF9iZmQuY3BwOiBJbiBtZW1iZXIgZnVuY3Rpb24gJ3ZvaWQgb3BfYmZkOjpnZXRfc3ltYm9sX3JhbmdlKHN5bWJvbF9pbmRleF90LCBsb25nIGxvbmcgdW5zaWduZWQgaW50JiwgbG9uZyBsb25nIHVuc2lnbmVkIGludCYpIGNvbnN0JzoKK29wX2JmZC5jcHA6NTM4OjQ3OiBlcnJvcjogY2Fubm90IGNvbnZlcnQgJ3N0ZDo6b3N0cmVhbSB7YWthIHN0ZDo6YmFzaWNfb3N0cmVhbTxjaGFyPn0nIHRvICdjb25zdCBib29sJyBpbiBpbml0aWFsaXphdGlvbgorICBib29sIGNvbnN0IHZlcmJvc2UgPSBjdmVyYiA8PCAodmJmZCAmIHZsZXZlbDEpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBeCitvcF9iZmQuY3BwOjU0Njo3OiBlcnJvcjogaW4gYXJndW1lbnQgdG8gdW5hcnkgIQorICBpZiAoIXZlcmJvc2UpCisgICAgICAgXn5+fn5+fgorCitBdm9pZCB0aGUgaW50ZXJtZWRpYXRlIGJvb2wgdHlwZSB0byBtYWtlIEdDQy02IGhhcHB5LgorCitTaWduZWQtb2ZmLWJ5OiBXaWxsaWFtIENvaGVuIDx3Y29oZW5AcmVkaGF0LmNvbT4KKy0tLQorVXBzdHJlYW0tU3RhdHVzOiBCYWNrcG9ydAorCisgbGlidXRpbCsrL29wX2JmZC5jcHAgfCA0ICstLS0KKyAxIGZpbGUgY2hhbmdlZCwgMSBpbnNlcnRpb24oKyksIDMgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9saWJ1dGlsKysvb3BfYmZkLmNwcCBiL2xpYnV0aWwrKy9vcF9iZmQuY3BwCitpbmRleCAzODljOTIwLi5mMmViNDJiIDEwMDY0NAorLS0tIGEvbGlidXRpbCsrL29wX2JmZC5jcHAKKysrKyBiL2xpYnV0aWwrKy9vcF9iZmQuY3BwCitAQCAtNTM1LDE1ICs1MzUsMTMgQEAgdm9pZCBvcF9iZmQ6OmdldF9zeW1ib2xfcmFuZ2Uoc3ltYm9sX2luZGV4X3Qgc3ltX2lkeCwKKyB7CisgCW9wX2JmZF9zeW1ib2wgY29uc3QgJiBzeW0gPSBzeW1zW3N5bV9pZHhdOworIAorLQlib29sIGNvbnN0IHZlcmJvc2UgPSBjdmVyYiA8PCAodmJmZCAmIHZsZXZlbDEpOworLQorIAlpZiAoYW5vbl9vYmopCisgCQlzdGFydCA9IHN5bS52bWEoKTsKKyAJZWxzZQorIAkJc3RhcnQgPSBzeW0uZmlsZXBvcygpOworIAllbmQgPSBzdGFydCArIHN5bS5zaXplKCk7CisgCistCWlmICghdmVyYm9zZSkKKysJaWYgKCEoY3ZlcmIgPDwgKHZiZmQgJiB2bGV2ZWwxKSkpCisgCQlyZXR1cm47CisgCisgCWlvX3N0YXRlIHN0YXRlKGN2ZXJiIDw8ICh2YmZkICYgdmxldmVsMSkpOworLS0gCisxLjkuMQorCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWtlcm5lbC9vcHJvZmlsZS9vcHJvZmlsZXVpLXNlcnZlci9pbml0IGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1rZXJuZWwvb3Byb2ZpbGUvb3Byb2ZpbGV1aS1zZXJ2ZXIvaW5pdApkZWxldGVkIGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMjU0NGVhNC4uMDAwMDAwMAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWtlcm5lbC9vcHJvZmlsZS9vcHJvZmlsZXVpLXNlcnZlci9pbml0CisrKyAvZGV2L251bGwKQEAgLTEsMzcgKzAsMCBAQAotIyEvYmluL3NoCi0jIyMgQkVHSU4gSU5JVCBJTkZPCi0jIFByb3ZpZGVzOiAgICAgICAgICBvcHJvZmlsZS1zZXJ2ZXIKLSMgUmVxdWlyZWQtU3RhcnQ6ICAgICRuZXR3b3JrCi0jIFJlcXVpcmVkLVN0b3A6ICAgICAkbmV0d29yawotIyBEZWZhdWx0LVN0YXJ0OiAgICAgMiAzIDQgNQotIyBEZWZhdWx0LVN0b3A6ICAgICAgMCAxIDYKLSMgU2hvcnQtRGVzY3JpcHRpb246IE9Qcm9maWxlVUkgc2VydmVyCi0jIERlc2NyaXB0aW9uOiAgICAgICAKLSMjIyBFTkQgSU5JVCBJTkZPCi0KLS4gL2V0Yy9pbml0LmQvZnVuY3Rpb25zCi0KLWNhc2UgIiQxIiBpbgotICBzdGFydCkKLSAgICAgICAgZWNobyAiU3RhcnRpbmcgT1Byb2ZpbGVVSSBzZXJ2ZXIiCi0JLiAvZXRjL3Byb2ZpbGUKLQkvdXNyL2Jpbi9vcHJvZmlsZS1zZXJ2ZXIgJgotICA7OwotCi0gIHN0b3ApCi0gICAgICAgIGVjaG8gIlN0b3BwaW5nIE9Qcm9maWxlVUkgc2VydmVyIgotICAgICAgICBraWxscHJvYyBvcHJvZmlsZS1zZXJ2ZXIKLSAgOzsKLQotICByZXN0YXJ0KQotCSQwIHN0b3AKLSAgICAgICAgc2xlZXAgMQotICAgICAgICAkMCBzdGFydAotICA7OwotCi0gICopCi0gICAgICAgIGVjaG8gInVzYWdlOiAkMCB7IHN0YXJ0IHwgc3RvcCB8IHJlc3RhcnQgfSIKLSAgOzsKLWVzYWMKLQotZXhpdCAwCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWtlcm5lbC9vcHJvZmlsZS9vcHJvZmlsZXVpLXNlcnZlci9vcHJvZmlsZXVpLXNlcnZlci5zZXJ2aWNlIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1rZXJuZWwvb3Byb2ZpbGUvb3Byb2ZpbGV1aS1zZXJ2ZXIvb3Byb2ZpbGV1aS1zZXJ2ZXIuc2VydmljZQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMWEyY2JlNi4uMDAwMDAwMAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWtlcm5lbC9vcHJvZmlsZS9vcHJvZmlsZXVpLXNlcnZlci9vcHJvZmlsZXVpLXNlcnZlci5zZXJ2aWNlCisrKyAvZGV2L251bGwKQEAgLTEsNiArMCwwIEBACi1bVW5pdF0KLURlc2NyaXB0aW9uPU9Qcm9maWxlVUkgU2VydmVyCi1BZnRlcj1uZXR3b3JrLnRhcmdldAotCi1bU2VydmljZV0KLUV4ZWNTdGFydD0vYmluL3NoIC1jICIuIEBTWVNDT05GRElSQC9wcm9maWxlOyBAQklORElSQC9vcHJvZmlsZS1zZXJ2ZXIiCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWtlcm5lbC9vcHJvZmlsZS9vcHJvZmlsZXVpLXNlcnZlcl9naXQuYmIgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWtlcm5lbC9vcHJvZmlsZS9vcHJvZmlsZXVpLXNlcnZlcl9naXQuYmIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGNjMzQ3N2IuLjAwMDAwMDAKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1rZXJuZWwvb3Byb2ZpbGUvb3Byb2ZpbGV1aS1zZXJ2ZXJfZ2l0LmJiCisrKyAvZGV2L251bGwKQEAgLTEsMzQgKzAsMCBAQAotcmVxdWlyZSBvcHJvZmlsZXVpLmluYwotCi1TUkNSRVYgPSAiMzg5ZTE4NzVhZjQ3MjFkNTJjN2U2NWNmOWNmZmZiNjliMGVkNmE1OSIKLVBWID0gIjAuMCtnaXQke1NSQ1BWfSIKLQotUyA9ICIke1dPUktESVJ9L2dpdCIKLQotU1JDX1VSSSA9ICJnaXQ6Ly9naXQueW9jdG9wcm9qZWN0Lm9yZy9vcHJvZmlsZXVpIFwKLSAgICAgICAgICAgZmlsZTovL2luaXQgXAotICAgICAgICAgICBmaWxlOi8vb3Byb2ZpbGV1aS1zZXJ2ZXIuc2VydmljZSAiCi0KLURFUEVORFMgKz0gImludGx0b29sLW5hdGl2ZSBnZXR0ZXh0LW5hdGl2ZSIKLQotRVhUUkFfT0VDT05GICs9ICItLWRpc2FibGUtY2xpZW50IC0tZW5hYmxlLXNlcnZlciIKLQotUkRFUEVORFNfJHtQTn0gPSAib3Byb2ZpbGUgYXZhaGktZGFlbW9uIgotCi1kb19pbnN0YWxsX2FwcGVuZCgpIHsKLQlpbnN0YWxsIC1kICR7RH0ke3N5c2NvbmZkaXJ9L2luaXQuZAotCWluc3RhbGwgLW0gMDc1NSAke1dPUktESVJ9L2luaXQgJHtEfSR7c3lzY29uZmRpcn0vaW5pdC5kL29wcm9maWxldWktc2VydmVyCi0KLQlpbnN0YWxsIC1kICR7RH0ke3N5c3RlbWRfdW5pdGRpcn0vc3lzdGVtCi0JaW5zdGFsbCAtbSAwNjQ0ICR7V09SS0RJUn0vb3Byb2ZpbGV1aS1zZXJ2ZXIuc2VydmljZSAke0R9JHtzeXN0ZW1kX3VuaXRkaXJ9L3N5c3RlbS8KLQlzZWQgLWkgLWUgJ3MsQFNZU0NPTkZESVJALCR7c3lzY29uZmRpcn0sZycgXAotCQktZSAncyxAQklORElSQCwke2JpbmRpcn0sZycgJHtEfSR7c3lzdGVtZF91bml0ZGlyfS9zeXN0ZW0vb3Byb2ZpbGV1aS1zZXJ2ZXIuc2VydmljZQotfQotCi1pbmhlcml0IHVwZGF0ZS1yYy5kIHN5c3RlbWQKLQotSU5JVFNDUklQVF9OQU1FID0gIm9wcm9maWxldWktc2VydmVyIgotSU5JVFNDUklQVF9QQVJBTVMgPSAic3RhcnQgOTkgNSAyIC4gc3RvcCAyMCAwIDEgNiAuIgotCi1TWVNURU1EX1NFUlZJQ0VfJHtQTn0gPSAib3Byb2ZpbGV1aS1zZXJ2ZXIuc2VydmljZSIKLVNZU1RFTURfQVVUT19FTkFCTEUgPSAiZGlzYWJsZSIKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMta2VybmVsL29wcm9maWxlL29wcm9maWxldWkuaW5jIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1rZXJuZWwvb3Byb2ZpbGUvb3Byb2ZpbGV1aS5pbmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDhmY2YwMTQuLjAwMDAwMDAKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1rZXJuZWwvb3Byb2ZpbGUvb3Byb2ZpbGV1aS5pbmMKKysrIC9kZXYvbnVsbApAQCAtMSwxNiArMCwwIEBACi1TVU1NQVJZID0gIlVzZXIgSW50ZXJmYWNlIGZvciB0aGUgU3lzdGVtLVdpZGUgUHJvZmlsZXIiCi1ERVNDUklQVElPTiA9ICJVc2VyIGludGVyZmFjZSBmb3IgdGhlIE9Qcm9maWxlIHRvb2wiCi1IT01FUEFHRSA9ICJodHRwOi8vbGFicy5vLWhhbmQuY29tL29wcm9maWxldWkvIgotQlVHVFJBQ0tFUiA9ICJodHRwOi8vYnVnemlsbGEueW9jdG9wcm9qZWN0Lm9yZy8iCi0KLVNFQ1RJT04gPSAieDExIgotCi1MSUNFTlNFID0gIkdQTHYyIgotTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9OTRkNTVkNTEyYTliYTM2Y2FhOWI3ZGYwNzliYWUxOWYiCi0KLURFUEVORFMgPSAiZ2xpYi0yLjAgYXZhaGkgaW50bHRvb2wtbmF0aXZlIgotCi1pbmhlcml0IGF1dG90b29scyBwa2djb25maWcgZ2V0dGV4dAotCi1FWFRSQV9PRUNPTkYgPSAiLS13aXRoLWF2YWhpIgotCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWtlcm5lbC9vcHJvZmlsZS9vcHJvZmlsZXVpX2dpdC5iYiBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMta2VybmVsL29wcm9maWxlL29wcm9maWxldWlfZ2l0LmJiCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4NmYzZDhlLi4wMDAwMDAwCi0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMta2VybmVsL29wcm9maWxlL29wcm9maWxldWlfZ2l0LmJiCisrKyAvZGV2L251bGwKQEAgLTEsMjAgKzAsMCBAQAotcmVxdWlyZSBvcHJvZmlsZXVpLmluYwotCi1ERVBFTkRTICs9ICJndGsrIGxpYmdsYWRlIGxpYnhtbDIgYXZhaGktdWkgZ2NvbmYgZ2V0dGV4dC1uYXRpdmUiCi0KLWluaGVyaXQgZGlzdHJvX2ZlYXR1cmVzX2NoZWNrCi1BTllfT0ZfRElTVFJPX0ZFQVRVUkVTID0gIiR7R1RLMkRJU1RST0ZFQVRVUkVTfSIKLQotU1JDUkVWID0gIjM4OWUxODc1YWY0NzIxZDUyYzdlNjVjZjljZmZmYjY5YjBlZDZhNTkiCi1QViA9ICIwLjArZ2l0JHtTUkNQVn0iCi0KLVMgPSAiJHtXT1JLRElSfS9naXQiCi0KLVNSQ19VUkkgPSAiZ2l0Oi8vZ2l0LnlvY3RvcHJvamVjdC5vcmcvb3Byb2ZpbGV1aSIKLQotRVhUUkFfT0VDT05GICs9ICItLWVuYWJsZS1jbGllbnQgLS1kaXNhYmxlLXNlcnZlciIKLQotUEFDS0FHRVMgPSsgIm9wcm9maWxldWktdmlld2VyIgotCi1GSUxFU19vcHJvZmlsZXVpLXZpZXdlciA9ICIke2JpbmRpcn0vb3BhcmNoY29udiAke2JpbmRpcn0vb3Byb2ZpbGUtdmlld2VyICR7ZGF0YWRpcn0vYXBwbGljYXRpb25zLyAke2RhdGFkaXJ9L29wcm9maWxldWkvICR7ZGF0YWRpcn0vaWNvbnMiCi1SREVQRU5EU19vcHJvZmlsZXVpLXZpZXdlciA9ICJvcHJvZmlsZSIKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMta2VybmVsL3BlcmYvcGVyZi5iYiBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMta2VybmVsL3BlcmYvcGVyZi5iYgppbmRleCAzZDZmZmIzLi40NzEwMjNkIDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWtlcm5lbC9wZXJmL3BlcmYuYmIKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1rZXJuZWwvcGVyZi9wZXJmLmJiCkBAIC0zMCw2ICszMCw4IEBACiAgICAgJHtTQ1JJUFRJTkdfREVQRU5EU30gXAogICAgICR7TElCVU5XSU5EX0RFUEVORFN9IFwKICAgICBiaXNvbiBmbGV4IHh6IFwKKyAgICB4bWx0by1uYXRpdmUgXAorICAgIGFzY2lpZG9jLW5hdGl2ZSBcCiAiCiAKIGRvX2NvbmZpZ3VyZVtkZXBlbmRzXSArPSAidmlydHVhbC9rZXJuZWw6ZG9fc2hhcmVkX3dvcmtkaXIiCkBAIC00MCwxMCArNDIsNiBAQAogCiAjIG5lZWRlZCBmb3IgYnVpbGRpbmcgdGhlIHRvb2xzL3BlcmYgUHl0aG9uIGJpbmRpbmdzCiBpbmhlcml0IHB5dGhvbi1kaXIKLWV4cG9ydCBTVEFHSU5HX0lOQ0RJUgotZXhwb3J0IFNUQUdJTkdfTElCRElSCi1leHBvcnQgQlVJTERfU1lTCi1leHBvcnQgSE9TVF9TWVMKIGV4cG9ydCBQWVRIT05fU0lURVBBQ0tBR0VTX0RJUgogCiAja2VybmVsIDMuMSsgc3VwcG9ydHMgV0VSUk9SIHRvIGRpc2FibGUgd2FybmluZ3MgYXMgZXJyb3JzCkBAIC04MSw2ICs3OSw3IEBACiAgICAgQVJDSD0ke0FSQ0h9IFwKICAgICBDQz0iJHtDQ30iIFwKICAgICBBUj0iJHtBUn0iIFwKKyAgICBMRD0iJHtMRH0iIFwKICAgICBFWFRSQV9DRkxBR1M9Ii1sZHciIFwKICAgICBwZXJmZXhlY2Rpcj0ke2xpYmV4ZWNkaXJ9IFwKICAgICBOT19HVEsyPTEgJHtUVUlfREVGSU5FU30gTk9fRFdBUkY9MSAke0xJQlVOV0lORF9ERUZJTkVTfSBcCkBAIC05NCwxNCArOTMsMTIgQEAKICAgICAnc2hhcmVkaXI9JHtkYXRhZGlyfScgXAogICAgICdzeXNjb25mZGlyPSR7c3lzY29uZmRpcn0nIFwKICAgICAncGVyZmV4ZWNkaXI9JHtsaWJleGVjZGlyfS9wZXJmLWNvcmUnIFwKLSAgICBcCiAgICAgJ0VUQ19QRVJGQ09ORklHPSR7QG9zLnBhdGgucmVscGF0aChzeXNjb25mZGlyLCBwcmVmaXgpfScgXAogICAgICdzaGFyZWRpcj0ke0Bvcy5wYXRoLnJlbHBhdGgoZGF0YWRpciwgcHJlZml4KX0nIFwKICAgICAnbWFuZGlyPSR7QG9zLnBhdGgucmVscGF0aChtYW5kaXIsIHByZWZpeCl9JyBcCiAgICAgJ2luZm9kaXI9JHtAb3MucGF0aC5yZWxwYXRoKGluZm9kaXIsIHByZWZpeCl9JyBcCiAiCiAKLQogZG9fY29tcGlsZSgpIHsKIAkjIExpbnV4IGtlcm5lbCBidWlsZCBzeXN0ZW0gaXMgZXhwZWN0ZWQgdG8gZG8gdGhlIHJpZ2h0IHRoaW5nCiAJdW5zZXQgQ0ZMQUdTCkBAIC0xMzYsMTEgKzEzMywyNCBAQAogICAgICMgd2l0aCBlYWNoIG90aGVyIGlmIGl0cyBpbiB0aGUgc2hhcmVkIHNvdXJjZSBkaXJlY3RvcnkKICAgICAjCiAgICAgaWYgWyAtZSAiJHtTfS90b29scy9wZXJmL2NvbmZpZy9NYWtlZmlsZSIgXTsgdGhlbgorICAgICAgICBwZXJmY29uZmlnPSIke1N9L3Rvb2xzL3BlcmYvY29uZmlnL01ha2VmaWxlIgorICAgIGZpCisgICAgaWYgWyAtZSAiJHtTfS90b29scy9wZXJmL01ha2VmaWxlLmNvbmZpZyIgXTsgdGhlbgorICAgICAgICBwZXJmY29uZmlnPSIke1N9L3Rvb2xzL3BlcmYvTWFrZWZpbGUuY29uZmlnIgorICAgIGZpCisgICAgaWYgWyAtbiAiJHtwZXJmY29uZmlnfSIgXTsgdGhlbgogICAgICAgICAjIE1hdGNoICQocHJlZml4KS8kKGxpYikgYW5kICQocHJlZml4KS9saWIKICAgICAgICAgc2VkIC1pIC1lICdzLF5saWJkaXIgPSBcKCQocHJlZml4KS8uKmxpYlwpLGxpYmRpciA/PSBcMSwnIFwKICAgICAgICAgICAgICAgIC1lICdzLF5wZXJmZXhlY2RpciA9IFwoLipcKSxwZXJmZXhlY2RpciA/PSBcMSwnIFwKICAgICAgICAgICAgICAgIC1lICdzLFwgLmNvbmZpZy1kZXRlY3RlZCwgJChPVVRQVVQpL2NvbmZpZy1kZXRlY3RlZCxnJyBcCi0gICAgICAgICAgICAke1N9L3Rvb2xzL3BlcmYvY29uZmlnL01ha2VmaWxlCisgICAgICAgICAgICAke3BlcmZjb25maWd9CisgICAgZmkKKyAgICAjIFRoZSBtYW4gcGFnZXMgaW5zdGFsbGF0aW9uIGlzICIkKElOU1RBTEwpIC1kIC1tIDc1NSAkKERFU1RESVIpJChtYW4xZGlyKSIKKyAgICAjIGluICR7U30vdG9vbHMvcGVyZi9Eb2N1bWVudGF0aW9uL01ha2VmaWxlLCBpZiB0aGUgbWFuZGlyIHNldCB0byAnPz0nLCBpdAorICAgICMgd2lsbCB1c2UgdGhlIHJlbGF0aXZlIHBhdGggJ3NoYXJlL21hbicsIGluIHRoZSB3YXkgaXQgd2lsbCByZXN1bHRpbmcgaW4KKyAgICAjIGluY29ycmVjdCBpbnN0YWxsYXRpb24gZm9yIG1hbiBwYWdlcy4KKyAgICBpZiBbIC1lICIke1N9L3Rvb2xzL3BlcmYvRG9jdW1lbnRhdGlvbi9NYWtlZmlsZSIgXTsgdGhlbgorCXNlZCAtaSAncyxebWFuZGlyPz0sbWFuZGlyOj0sJyAke1N9L3Rvb2xzL3BlcmYvRG9jdW1lbnRhdGlvbi9NYWtlZmlsZQogICAgIGZpCiAgICAgaWYgWyAtZSAiJHtTfS90b29scy9wZXJmL01ha2VmaWxlLnBlcmYiIF07IHRoZW4KICAgICAgICAgc2VkIC1pIC1lICdzLFwgLmNvbmZpZy1kZXRlY3RlZCwgJChPVVRQVVQpL2NvbmZpZy1kZXRlY3RlZCxnJyBcCkBAIC0xNjAsMTAgKzE3MCwxMiBAQAogICAgIGlmIFsgLWUgIiR7U30vdG9vbHMvcGVyZi9NYWtlZmlsZS5wZXJmIiBdOyB0aGVuCiAgICAgICAgIHNlZCAtaSAncyxDQyA9ICQoQ1JPU1NfQ09NUElMRSlnY2MsI0NDLCcgJHtTfS90b29scy9wZXJmL01ha2VmaWxlLnBlcmYKICAgICAgICAgc2VkIC1pICdzLEFSID0gJChDUk9TU19DT01QSUxFKWFyLCNBUiwnICR7U30vdG9vbHMvcGVyZi9NYWtlZmlsZS5wZXJmCisgICAgICAgIHNlZCAtaSAncyxMRCA9ICQoQ1JPU1NfQ09NUElMRSlsZCwjTEQsJyAke1N9L3Rvb2xzL3BlcmYvTWFrZWZpbGUucGVyZgogICAgIGZpCiAgICAgaWYgWyAtZSAiJHtTfS90b29scy9saWIvYXBpL01ha2VmaWxlIiBdOyB0aGVuCiAgICAgICAgIHNlZCAtaSAncyxDQyA9ICQoQ1JPU1NfQ09NUElMRSlnY2MsI0NDLCcgJHtTfS90b29scy9saWIvYXBpL01ha2VmaWxlCiAgICAgICAgIHNlZCAtaSAncyxBUiA9ICQoQ1JPU1NfQ09NUElMRSlhciwjQVIsJyAke1N9L3Rvb2xzL2xpYi9hcGkvTWFrZWZpbGUKKyAgICAgICAgc2VkIC1pICdzLExEID0gJChDUk9TU19DT01QSUxFKWxkLCNMRCwnICR7U30vdG9vbHMvbGliL2FwaS9NYWtlZmlsZQogICAgIGZpCiAgICAgaWYgWyAtZSAiJHtTfS90b29scy9saWIvc3ViY21kL01ha2VmaWxlIiBdOyB0aGVuCiAgICAgICAgIHNlZCAtaSAncyxDQyA9ICQoQ1JPU1NfQ09NUElMRSlnY2MsI0NDLCcgJHtTfS90b29scy9saWIvc3ViY21kL01ha2VmaWxlCkBAIC0yMDEsNiArMjEzLDcgQEAKIFBBQ0tBR0VTID0rICIke1BOfS1hcmNoaXZlICR7UE59LXRlc3RzICR7UE59LXBlcmwgJHtQTn0tcHl0aG9uIgogCiBSREVQRU5EU18ke1BOfSArPSAiZWxmdXRpbHMgYmFzaCIKK1JERVBFTkRTXyR7UE59LWRvYyArPSAibWFuIgogUkRFUEVORFNfJHtQTn0tYXJjaGl2ZSA9KyAiYmFzaCIKIFJERVBFTkRTXyR7UE59LXB5dGhvbiA9KyAiYmFzaCBweXRob24gcHl0aG9uLW1vZHVsZXMiCiBSREVQRU5EU18ke1BOfS1wZXJsID0rICJiYXNoIHBlcmwgcGVybC1tb2R1bGVzIgpAQCAtMjA5LDEwICsyMjIsMTEgQEAKIFJTVUdHRVNUU19TQ1JJUFRJTkcgPSAiJHtAcGVyZl9mZWF0dXJlX2VuYWJsZWQoJ3BlcmYtc2NyaXB0aW5nJywgJyR7UE59LXBlcmwgJHtQTn0tcHl0aG9uJywgJycsZCl9IgogUlNVR0dFU1RTXyR7UE59ICs9ICIke1BOfS1hcmNoaXZlICR7UE59LXRlc3RzICR7UlNVR0dFU1RTX1NDUklQVElOR30iCiAKKyNGSUxFU18ke1BOfSArPSAiJHtsaWJleGVjZGlyfS9wZXJmLWNvcmUgJHtleGVjX3ByZWZpeH0vbGliZXhlYy9wZXJmLWNvcmUgL3Vzci9saWI2NC90cmFjZWV2ZW50ICR7bGliZGlyfS90cmFjZWV2ZW50IgogRklMRVNfJHtQTn0gKz0gIiR7bGliZXhlY2Rpcn0vcGVyZi1jb3JlICR7ZXhlY19wcmVmaXh9L2xpYmV4ZWMvcGVyZi1jb3JlICR7bGliZGlyfS90cmFjZWV2ZW50IgogRklMRVNfJHtQTn0tYXJjaGl2ZSA9ICIke2xpYmRpcn0vcGVyZi9wZXJmLWNvcmUvcGVyZi1hcmNoaXZlIgogRklMRVNfJHtQTn0tdGVzdHMgPSAiJHtsaWJkaXJ9L3BlcmYvcGVyZi1jb3JlL3Rlc3RzICR7bGliZXhlY2Rpcn0vcGVyZi1jb3JlL3Rlc3RzIgotRklMRVNfJHtQTn0tcHl0aG9uID0gIiR7bGliZGlyfS9weXRob24qL3NpdGUtcGFja2FnZXMgJHtsaWJkaXJ9L3BlcmYvcGVyZi1jb3JlL3NjcmlwdHMvcHl0aG9uIgorRklMRVNfJHtQTn0tcHl0aG9uID0gIiR7bGliZGlyfS9wZXJmL3BlcmYtY29yZS9zY3JpcHRzL3B5dGhvbiAke1BZVEhPTl9TSVRFUEFDS0FHRVNfRElSfSIKIEZJTEVTXyR7UE59LXB5dGhvbiArPSAiJHtsaWJleGVjZGlyfS9wZXJmLWNvcmUvc2NyaXB0cy9weXRob24vKiIKIEZJTEVTXyR7UE59LXBlcmwgPSAiJHtsaWJkaXJ9L3BlcmYvcGVyZi1jb3JlL3NjcmlwdHMvcGVybCIKIApkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1rZXJuZWwvc3lzcHJvZi9maWxlcy8wMDAxLUF2b2lkLWJ1aWxkaW5nLWRvY3MucGF0Y2ggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWtlcm5lbC9zeXNwcm9mL2ZpbGVzLzAwMDEtQXZvaWQtYnVpbGRpbmctZG9jcy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMDJmMzU0Ci0tLSAvZGV2L251bGwKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1rZXJuZWwvc3lzcHJvZi9maWxlcy8wMDAxLUF2b2lkLWJ1aWxkaW5nLWRvY3MucGF0Y2gKQEAgLTAsMCArMSw0MiBAQAorRnJvbSAyN2RmNTIxYzY4ZTdjOGI1YjA1MGRhYjE1ZjQwYWExNWZkMDM2MjNhIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogSnVzc2kgS3Vra29uZW4gPGp1c3NpLmt1a2tvbmVuQGludGVsLmNvbT4KK0RhdGU6IFdlZCwgNCBNYXkgMjAxNiAxNDo1ODoyNCArMDMwMAorU3ViamVjdDogW1BBVENIXSBBdm9pZCBidWlsZGluZyBkb2NzCisKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZQorU2lnbmVkLW9mZi1ieTogSnVzc2kgS3Vra29uZW4gPGp1c3NpLmt1a2tvbmVuQGludGVsLmNvbT4KKy0tLQorIE1ha2VmaWxlLmFtIHwgMiArLQorIG00L3llbHAubTQgIHwgNiAtLS0tLS0KKyAyIGZpbGVzIGNoYW5nZWQsIDEgaW5zZXJ0aW9uKCspLCA3IGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvTWFrZWZpbGUuYW0gYi9NYWtlZmlsZS5hbQoraW5kZXggYjkxOWEzZi4uM2EzODUxZCAxMDA2NDQKKy0tLSBhL01ha2VmaWxlLmFtCisrKysgYi9NYWtlZmlsZS5hbQorQEAgLTEsNCArMSw0IEBACistU1VCRElSUyA9IGRhZW1vbiBkYXRhIGhlbHAgbGliIHBvIHNyYyB0b29scyB0ZXN0cworK1NVQkRJUlMgPSBkYWVtb24gZGF0YSBsaWIgcG8gc3JjIHRvb2xzIHRlc3RzCisgCisgRVhUUkFfRElTVCA9IEFVVEhPUlMgdGFwLXRlc3QgQ09QWUlORy5ncGwtMgorIAorZGlmZiAtLWdpdCBhL200L3llbHAubTQgYi9tNC95ZWxwLm00CitpbmRleCA1ZGI4NDdmLi4xYjZlZGU0IDEwMDY0NAorLS0tIGEvbTQveWVscC5tNAorKysrIGIvbTQveWVscC5tNAorQEAgLTI3LDEyICsyNyw2IEBAIEFDX0FSR19XSVRIKFtoZWxwLWRpcl0sCisgSEVMUF9ESVI9IiR3aXRoX2hlbHBfZGlyIgorIEFDX1NVQlNUKEhFTFBfRElSKQorIAorLUFDX0FSR19WQVIoW0lUU1RPT0xdLCBbUGF0aCB0byB0aGUgYGl0c3Rvb2xgIGNvbW1hbmRdKQorLUFDX0NIRUNLX1BST0coW0lUU1RPT0xdLCBbaXRzdG9vbF0sIFtpdHN0b29sXSkKKy1pZiB0ZXN0IHgiJElUU1RPT0wiID0geDsgdGhlbgorLSAgQUNfTVNHX0VSUk9SKFtpdHN0b29sIG5vdCBmb3VuZF0pCistZmkKKy0KKyBBQ19BUkdfVkFSKFtYTUxMSU5UXSwgW1BhdGggdG8gdGhlIGB4bWxsaW50YCBjb21tYW5kXSkKKyBBQ19DSEVDS19QUk9HKFtYTUxMSU5UXSwgW3htbGxpbnRdLCBbeG1sbGludF0pCisgaWYgdGVzdCB4IiRYTUxMSU5UIiA9IHg7IHRoZW4KKy0tIAorMi4xLjQKKwpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1rZXJuZWwvc3lzcHJvZi9maWxlcy8wMDAxLURpc2FibGUtY2hlY2stZm9yLXBvbGtpdC1mb3ItVUkucGF0Y2ggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWtlcm5lbC9zeXNwcm9mL2ZpbGVzLzAwMDEtRGlzYWJsZS1jaGVjay1mb3ItcG9sa2l0LWZvci1VSS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MDg1MjMyCi0tLSAvZGV2L251bGwKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1rZXJuZWwvc3lzcHJvZi9maWxlcy8wMDAxLURpc2FibGUtY2hlY2stZm9yLXBvbGtpdC1mb3ItVUkucGF0Y2gKQEAgLTAsMCArMSwzMiBAQAorRnJvbSA3NjVkNTc4MTQ1ZTMxZGRjOTQ5NWFkZmFiODAzN2FkZTMzYzZhOWNjIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogSnVzc2kgS3Vra29uZW4gPGp1c3NpLmt1a2tvbmVuQGludGVsLmNvbT4KK0RhdGU6IFdlZCwgNCBNYXkgMjAxNiAxMDo1OTozNiArMDMwMAorU3ViamVjdDogW1BBVENIXSBEaXNhYmxlIGNoZWNrIGZvciBwb2xraXQgZm9yIFVJCisKK1RoZSBjaGVjayBpcyBub3QgdGVjaG5pY2FsbHkgcmVxdWlyZWQ6IHN5c3Byb2YganVzdCBuZWVkcwordG8gYmUgYWJsZSB0byBhY2Nlc3Mgc3lzdGVtIHBlcmYgY291bnRlcnMgYXQgcnVudGltZS4KKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCitTaWduZWQtb2ZmLWJ5OiBKdXNzaSBLdWtrb25lbiA8anVzc2kua3Vra29uZW5AaW50ZWwuY29tPgorLS0tCisgY29uZmlndXJlLmFjIHwgNCArKy0tCisgMSBmaWxlIGNoYW5nZWQsIDIgaW5zZXJ0aW9ucygrKSwgMiBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL2NvbmZpZ3VyZS5hYyBiL2NvbmZpZ3VyZS5hYworaW5kZXggODU1OTU5Ny4uZWNmOTNhZCAxMDA2NDQKKy0tLSBhL2NvbmZpZ3VyZS5hYworKysrIGIvY29uZmlndXJlLmFjCitAQCAtMTMxLDggKzEzMSw4IEBAIEFTX0lGKFt0ZXN0ICIkZW5hYmxlX2d0ayIgPSBhdXRvXSxbCisgCUFTX0lGKFt0ZXN0ICIkaGF2ZV9ndGsiID0gInllcyIgJiYgdGVzdCAiJGhhdmVfcG9sa2l0IiA9ICJ5ZXMiXSxbZW5hYmxlX2d0az15ZXNdLFtlbmFibGVfZ3RrPW5vXSkKKyBdKQorIEFTX0lGKFt0ZXN0ICIkZW5hYmxlX2d0ayIgPSAieWVzIl0sWworLQlBU19JRihbdGVzdCAiJGhhdmVfZ3RrIiA9ICJ5ZXMiICYmIHRlc3QgIiRoYXZlX3BvbGtpdCIgPSAieWVzIl0sW10sWworLQkJQUNfTVNHX0VSUk9SKFstLWVuYWJsZS1ndGsgcmVxdWlyZXMgZ3RrKy0zLjAgPj0gZ3RrX3JlcXVpcmVkX3ZlcnNpb24gYW5kIHBvbGtpdC1nb2JqZWN0LTFdKQorKwlBU19JRihbdGVzdCAiJGhhdmVfZ3RrIiA9ICJ5ZXMiXSxbXSxbCisrCQlBQ19NU0dfRVJST1IoWy0tZW5hYmxlLWd0ayByZXF1aXJlcyBndGsrLTMuMCA+PSBndGtfcmVxdWlyZWRfdmVyc2lvbl0pCisgCV0pCisgXSkKKyBBTV9DT05ESVRJT05BTChFTkFCTEVfR1RLLCB0ZXN0ICIkZW5hYmxlX2d0ayIgPSAieWVzIikKKy0tIAorMi44LjEKKwpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1rZXJuZWwvc3lzcHJvZi9maWxlcy8wMDAxLUZvcndhcmQtcG9ydC1taXBzLWFybS1tZW1vcnktYmFycmllci1wYXRjaGVzLnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1rZXJuZWwvc3lzcHJvZi9maWxlcy8wMDAxLUZvcndhcmQtcG9ydC1taXBzLWFybS1tZW1vcnktYmFycmllci1wYXRjaGVzLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkyZTgwNGYKLS0tIC9kZXYvbnVsbAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWtlcm5lbC9zeXNwcm9mL2ZpbGVzLzAwMDEtRm9yd2FyZC1wb3J0LW1pcHMtYXJtLW1lbW9yeS1iYXJyaWVyLXBhdGNoZXMucGF0Y2gKQEAgLTAsMCArMSwzOCBAQAorRnJvbSBhMmQzODVlNTA0MzIzNjQxYjExMjc4MjE4MzNjNjFlNzczMDFjOTBiIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogSnVzc2kgS3Vra29uZW4gPGp1c3NpLmt1a2tvbmVuQGludGVsLmNvbT4KK0RhdGU6IFNhdCwgMTEgSnVuIDIwMTYgMjI6NDU6MzcgKzAzMDAKK1N1YmplY3Q6IFtQQVRDSF0gRm9yd2FyZCBwb3J0IG1pcHMgJiBhcm0gbWVtb3J5IGJhcnJpZXIgcGF0Y2hlcworCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKK1NpZ25lZC1vZmYtYnk6IEp1c3NpIEt1a2tvbmVuIDxqdXNzaS5rdWtrb25lbkBpbnRlbC5jb20+CistLS0KKyBsaWIvdXRpbC91dGlsLmggfCAxNSArKysrKysrKysrKysrKysKKyAxIGZpbGUgY2hhbmdlZCwgMTUgaW5zZXJ0aW9ucygrKQorCitkaWZmIC0tZ2l0IGEvbGliL3V0aWwvdXRpbC5oIGIvbGliL3V0aWwvdXRpbC5oCitpbmRleCA1OTE3MjJkLi4wNzY4MDU2IDEwMDY0NAorLS0tIGEvbGliL3V0aWwvdXRpbC5oCisrKysgYi9saWIvdXRpbC91dGlsLmgKK0BAIC0yOSw0ICsyOSwxOSBAQAorICNkZWZpbmUgcmVhZF9iYXJyaWVyKCkgICAgICAgICAgIGFzbSB2b2xhdGlsZSgiIiA6OjogIm1lbW9yeSIpCisgI2VuZGlmCisgCisrI2lmZGVmIF9fYXJtX18KKysvKgorKyAqIFVzZSB0aGUgX19rdXNlcl9tZW1vcnlfYmFycmllciBoZWxwZXIgaW4gdGhlIENQVSBoZWxwZXIgcGFnZS4gU2VlCisrICogYXJjaC9hcm0va2VybmVsL2VudHJ5LWFybXYuUyBpbiB0aGUga2VybmVsIHNvdXJjZSBmb3IgZGV0YWlscy4KKysgKi8KKysjZGVmaW5lIHJlYWRfYmFycmllcigpICAgICAgICAgKCh2b2lkKCopKHZvaWQpKTB4ZmZmZjBmYTApKCkKKysjZW5kaWYKKysKKysjaWZkZWYgX19taXBzX18KKysjZGVmaW5lIHJlYWRfYmFycmllcigpICAgICAgICAgYXNtIHZvbGF0aWxlKCIuc2V0ICAgbWlwczJcblx0IiBcCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAic3luY1xuXHQiIFwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIuc2V0ICAgbWlwczAiIDo6OiAibWVtb3J5IikKKysjZW5kaWYKKysKKysKKyAjZW5kaWYgLyogU1BfVVRJTF9IICovCistLSAKKzIuMS40CisKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMta2VybmVsL3N5c3Byb2YvZmlsZXMvMDAwMS1jYWxsZ3JhcGgtVXNlLVU2NF9UT19QT0lOVEVSLnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1rZXJuZWwvc3lzcHJvZi9maWxlcy8wMDAxLWNhbGxncmFwaC1Vc2UtVTY0X1RPX1BPSU5URVIucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWMxMzg0YwotLS0gL2Rldi9udWxsCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMta2VybmVsL3N5c3Byb2YvZmlsZXMvMDAwMS1jYWxsZ3JhcGgtVXNlLVU2NF9UT19QT0lOVEVSLnBhdGNoCkBAIC0wLDAgKzEsMjkgQEAKK0Zyb20gMDU4MTZlNmY5Y2Q2NWIyNjI0YmIwNGRlNjVmZGY2MTAzMWM3MDE3ZiBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEp1c3NpIEt1a2tvbmVuIDxqdXNzaS5rdWtrb25lbkBpbnRlbC5jb20+CitEYXRlOiBGcmksIDEwIEp1biAyMDE2IDE0OjAxOjU0ICswMzAwCitTdWJqZWN0OiBbUEFUQ0hdIGNhbGxncmFwaDogVXNlIFU2NF9UT19QT0lOVEVSCisKK1RoaXMgZml4ZXMgYSAiY2FzdCB0byBwb2ludGVyIGZyb20gaW50ZWdlciBvZiBkaWZmZXJlbnQgc2l6ZSIgb24gaTU4Ni4KKworU2lnbmVkLW9mZi1ieTogSnVzc2kgS3Vra29uZW4gPGp1c3NpLmt1a2tvbmVuQGludGVsLmNvbT4KK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworLS0tCisgbGliL3NwLWNhbGxncmFwaC12aWV3LmMgfCAyICstCisgMSBmaWxlIGNoYW5nZWQsIDEgaW5zZXJ0aW9uKCspLCAxIGRlbGV0aW9uKC0pCisKK2RpZmYgLS1naXQgYS9saWIvc3AtY2FsbGdyYXBoLXZpZXcuYyBiL2xpYi9zcC1jYWxsZ3JhcGgtdmlldy5jCitpbmRleCAwMmNjMTdiLi41ODMxNWIwIDEwMDY0NAorLS0tIGEvbGliL3NwLWNhbGxncmFwaC12aWV3LmMKKysrKyBiL2xpYi9zcC1jYWxsZ3JhcGgtdmlldy5jCitAQCAtMTM1LDcgKzEzNSw3IEBAIGJ1aWxkX2Z1bmN0aW9uc19zdG9yZSAoU3RhY2tOb2RlICpub2RlLAorIAorICAgZ3RrX2xpc3Rfc3RvcmVfYXBwZW5kIChzdGF0ZS0+c3RvcmUsICZpdGVyKTsKKyAgIGd0a19saXN0X3N0b3JlX3NldCAoc3RhdGUtPnN0b3JlLCAmaXRlciwKKy0gICAgICAgICAgICAgICAgICAgICAgQ09MVU1OX05BTUUsIChjb25zdCBnY2hhciAqKW5vZGUtPmRhdGEsCisrICAgICAgICAgICAgICAgICAgICAgIENPTFVNTl9OQU1FLCBVNjRfVE9fUE9JTlRFUihub2RlLT5kYXRhKSwKKyAgICAgICAgICAgICAgICAgICAgICAgQ09MVU1OX1NFTEYsIDEwMC4wICogc2l6ZSAvIHN0YXRlLT5wcm9maWxlX3NpemUsCisgICAgICAgICAgICAgICAgICAgICAgIENPTFVNTl9UT1RBTCwgMTAwLjAgKiB0b3RhbCAvIHN0YXRlLT5wcm9maWxlX3NpemUsCisgICAgICAgICAgICAgICAgICAgICAgIENPTFVNTl9QT0lOVEVSLCBub2RlLAorLS0gCisyLjEuNAorCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWtlcm5lbC9zeXNwcm9mL2ZpbGVzLzAwMDEtY29uZmlndXJlLUFkZC1vcHRpb24tdG8tZW5hYmxlLWRpc2FibGUtcG9sa2l0LnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1rZXJuZWwvc3lzcHJvZi9maWxlcy8wMDAxLWNvbmZpZ3VyZS1BZGQtb3B0aW9uLXRvLWVuYWJsZS1kaXNhYmxlLXBvbGtpdC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNThkOTk3Ci0tLSAvZGV2L251bGwKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1rZXJuZWwvc3lzcHJvZi9maWxlcy8wMDAxLWNvbmZpZ3VyZS1BZGQtb3B0aW9uLXRvLWVuYWJsZS1kaXNhYmxlLXBvbGtpdC5wYXRjaApAQCAtMCwwICsxLDQxIEBACitGcm9tIDJiNDAwNWQ3MmQzMzkzOTMzYTc5MTRiZTEwMmVhNjU1MDVjNTM2Y2MgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiAiTWF4aW4gQi4gSm9obiIgPG1heGluLmpvaG5AaW50ZWwuY29tPgorRGF0ZTogVGh1LCAyMSBKdWwgMjAxNiAxMTo1MzozMSArMDMwMAorU3ViamVjdDogW1BBVENIXSBjb25maWd1cmU6IEFkZCBvcHRpb24gdG8gZW5hYmxlL2Rpc2FibGUgcG9sa2l0CisKK0NoYW5nZXMgdGhlIGNvbmZpZ3VyZSBiZWhhdmlvdXIgZnJvbSBhdXRvZGV0ZWN0aW5nIHRoZSBwb2xraXQgYnkgZGVmYXVsdAordG8gaGF2aW5nIGFuIG9wdGlvbiB0byBkaXNhYmxlIGl0IGV4cGxpY2l0bHkKKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK1NpZ25lZC1vZmYtYnk6IE1heGluIEIuIEpvaG4gPG1heGluLmpvaG5AaW50ZWwuY29tPgorLS0tCisgY29uZmlndXJlLmFjIHwgOCArKysrKysrKworIDEgZmlsZSBjaGFuZ2VkLCA4IGluc2VydGlvbnMoKykKKworZGlmZiAtLWdpdCBhL2NvbmZpZ3VyZS5hYyBiL2NvbmZpZ3VyZS5hYworaW5kZXggMjI0NmQ1YS4uM2QzZmUwZiAxMDA2NDQKKy0tLSBhL2NvbmZpZ3VyZS5hYworKysrIGIvY29uZmlndXJlLmFjCitAQCAtMTA0LDEwICsxMDQsMTggQEAgUEtHX0NIRUNLX01PRFVMRVMoR1RLLAorICAgICAgICAgICAgICAgICAgIFtndGsrLTMuMCA+PSBndGtfcmVxdWlyZWRfdmVyc2lvbl0sCisgICAgICAgICAgICAgICAgICAgW2hhdmVfZ3RrPXllc10sCisgICAgICAgICAgICAgICAgICAgW2hhdmVfZ3RrPW5vXSkKKytBQ19BUkdfRU5BQkxFKFtwb2xraXRdLAorKyAgICAgICAgICAgICAgICAgICBBU19IRUxQX1NUUklORyhbLS1kaXNhYmxlLXBvbGtpdF0sIFtEbyBub3QgdXNlIFBvbGtpdF0pLAorKyAgICAgICAgICAgICAgICAgICBbZW5hYmxlX3BvbGtpdD0iJGVuYWJsZXZhbCJdLCBbZW5hYmxlX3BvbGtpdD0ieWVzIl0pCisrCisrQVNfSUYoW3Rlc3QgIngkZW5hYmxlX3BvbGtpdCIgPSAieHllcyJdLCBbCisgUEtHX0NIRUNLX01PRFVMRVMoUE9MS0lULAorICAgICAgICAgICAgICAgICAgIFtwb2xraXQtZ29iamVjdC0xXSwKKyAgICAgICAgICAgICAgICAgICBbaGF2ZV9wb2xraXQ9eWVzXSwKKyAgICAgICAgICAgICAgICAgICBbaGF2ZV9wb2xraXQ9bm9dKQorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXSkKKytBTV9DT05ESVRJT05BTChbSEFWRV9QT0xLSVRdLCBbdGVzdCAieCRlbmFibGVfcG9sa2l0IiA9ICJ4eWVzIl0pCisrCisgUEtHX0NIRUNLX01PRFVMRVMoU1lTVEVNRCwKKyAgICAgICAgICAgICAgICAgICBbbGlic3lzdGVtZCA+PSBzeXN0ZW1kX3JlcXVpcmVkX3ZlcnNpb25dLAorICAgICAgICAgICAgICAgICAgIFtoYXZlX3N5c3RlbWQ9eWVzXSwKKy0tIAorMi40LjAKKwpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1rZXJuZWwvc3lzcHJvZi9maWxlcy9kZWZpbmUtTlRfR05VX0JVSUxEX0lELnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1rZXJuZWwvc3lzcHJvZi9maWxlcy9kZWZpbmUtTlRfR05VX0JVSUxEX0lELnBhdGNoCmluZGV4IGRjYzJjYmUuLmY3NWRkYWQgMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMta2VybmVsL3N5c3Byb2YvZmlsZXMvZGVmaW5lLU5UX0dOVV9CVUlMRF9JRC5wYXRjaAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWtlcm5lbC9zeXNwcm9mL2ZpbGVzL2RlZmluZS1OVF9HTlVfQlVJTERfSUQucGF0Y2gKQEAgLTcsOCArNyw4IEBACiAKIEluZGV4OiBnaXQvZWxmcGFyc2VyLmgKID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tLSBnaXQub3JpZy9lbGZwYXJzZXIuaAkyMDExLTA3LTE2IDE4OjU3OjQxLjAwMDAwMDAwMCAtMDcwMAotKysrIGdpdC9lbGZwYXJzZXIuaAkyMDExLTA3LTE2IDIwOjI4OjU0LjczMzgyOTg5NSAtMDcwMAorLS0tIGdpdC5vcmlnL2xpYi91dGlsL2VsZnBhcnNlci5oCTIwMTEtMDctMTYgMTg6NTc6NDEuMDAwMDAwMDAwIC0wNzAwCisrKysgZ2l0L2xpYi91dGlsL2VsZnBhcnNlci5oCTIwMTEtMDctMTYgMjA6Mjg6NTQuNzMzODI5ODk1IC0wNzAwCiBAQCAtMTcsNiArMTcsMTAgQEAKICAgKi8KICAjaW5jbHVkZSA8Z2xpYi5oPgpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1rZXJuZWwvc3lzcHJvZi9maWxlcy9ndWktYXJndW1lbnQucGF0Y2ggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWtlcm5lbC9zeXNwcm9mL2ZpbGVzL2d1aS1hcmd1bWVudC5wYXRjaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDJjMDUzZS4uMDAwMDAwMAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWtlcm5lbC9zeXNwcm9mL2ZpbGVzL2d1aS1hcmd1bWVudC5wYXRjaAorKysgL2Rldi9udWxsCkBAIC0xLDM1ICswLDAgQEAKLUFkZCB0aGUgYWJpbGl0eSB0byBleHBsaWNpdGx5IGVuYWJsZS9kaXNhYmxlIEdVSSBzdXBwb3J0Ci0KLVNpZ25lZC1vZmYtYnk6IENocmlzdG9waGVyIExhcnNvbiA8Y2hyaXNfbGFyc29uQG1lbnRvci5jb20+Ci1VcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKLQotLS0tIGdpdC5vcmlnL2NvbmZpZ3VyZS5hYwotKysrIGdpdC9jb25maWd1cmUuYWMKLUBAIC02MiwxMiArNjIsMjQgQEAgS01JQ1JPPWB1bmFtZSAtciB8IGN1dCAtZCIuIiAtZiAzIHwgY3V0Ci0gIyBQa2djb25maWcgZGVwZW5kZW5jaWVzCi0gCi0gY29yZV9kZXA9ImdsaWItMi4wID49IDIuNi4wIgotLWd1aV9kZXA9Imd0aystMi4wID4gMi42LjAgZ2RrLXBpeGJ1Zi0yLjAgcGFuZ29mdDIgbGliZ2xhZGUtMi4wIgotIAotIFBLR19DSEVDS19NT0RVTEVTKENPUkVfREVQLCAkY29yZV9kZXAsIFtdLCBBQ19NU0dfRVJST1IoW3N5c3Byb2YgZGVwZW5kZW5jaWVzIG5vdCBzYXRpc2ZpZWRdKSkKLSAKLS1idWlsZF9ndWk9eWVzCi0tUEtHX0NIRUNLX01PRFVMRVMoR1VJX0RFUCwgJGd1aV9kZXAsIFtdLCBidWlsZF9ndWk9bm8pCi0rZ3VpX2RlcD0iZ3RrKy0yLjAgPiAyLjYuMCBnZGstcGl4YnVmLTIuMCBwYW5nb2Z0MiBsaWJnbGFkZS0yLjAiCi0rCi0rQUNfQVJHX0VOQUJMRShbZ3VpXSwKLSsgIFtBU19IRUxQX1NUUklORyhbLS1kaXNhYmxlLWd1aV0sCi0rICAgIFtEaXNhYmxlIEdVSSBmdW5jdGlvbmFsaXR5IChyZXF1aXJlcyBndGsrLCBnZGstcGl4YnVmLCBwYW5nb2Z0MiwgbGliZ2xhZGUpIEA8OkBkZWZhdWx0PWF1dG9AOj5AXSldLAotKyAgW10sCi0rICBbZW5hYmxlX2d1aT1hdXRvXSkKLSsKLStidWlsZF9ndWk9bm8KLStBU19JRihbdGVzdCAieCRlbmFibGVfZ3VpIiAhPSB4bm9dLAotKyAgW1BLR19DSEVDS19NT0RVTEVTKEdVSV9ERVAsICRndWlfZGVwLCBidWlsZF9ndWk9eWVzLAotKyAgICBbaWYgdGVzdCAieCRlbmFibGVfZ3VpIiAhPSB4YXV0bzsgdGhlbgotKyAgICAgICBBQ19NU0dfRkFJTFVSRSgKLSsgICAgICAgICBbLS1lbmFibGUtZ3VpIHdhcyBnaXZlbiwgYnV0IGd1aSBkZXBlbmRlbmNpZXMgd2VyZSBub3Qgc2F0aXNmaWVkXSkKLSsgICAgIGZpXSldKQotIAotIEFNX0NPTkRJVElPTkFMKFtCVUlMRF9HVUldLCBbdGVzdCAiJGJ1aWxkX2d1aSIgPSB5ZXNdKQotIApkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1rZXJuZWwvc3lzcHJvZi9maWxlcy9ybWItYXJtLnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1rZXJuZWwvc3lzcHJvZi9maWxlcy9ybWItYXJtLnBhdGNoCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjNTNhYzY0Li4wMDAwMDAwCi0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMta2VybmVsL3N5c3Byb2YvZmlsZXMvcm1iLWFybS5wYXRjaAorKysgL2Rldi9udWxsCkBAIC0xLDIxICswLDAgQEAKLQotVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCi0KLUluZGV4OiBnaXQvdXRpbC5oCi09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLS0gZ2l0Lm9yaWcvdXRpbC5oCTIwMTAtMTItMDcgMjI6NDE6NTcuMTU2MjQzMDAxIC0wNjAwCi0rKysgZ2l0L3V0aWwuaAkyMDEwLTEyLTA3IDIyOjQzOjQ3LjYxNjI0MzAwMiAtMDYwMAotQEAgLTM3LDQgKzM3LDEzIEBACi0gI2RlZmluZSBjcHVfcmVsYXgoKSAgICAgYXNtIHZvbGF0aWxlKCIiIDo6OiAibWVtb3J5Iik7Ci0gI2VuZGlmCi0gCi0rI2lmZGVmIF9fYXJtX18KLSsvKgotKyAqIFVzZSB0aGUgX19rdXNlcl9tZW1vcnlfYmFycmllciBoZWxwZXIgaW4gdGhlIENQVSBoZWxwZXIgcGFnZS4gU2VlCi0rICogYXJjaC9hcm0va2VybmVsL2VudHJ5LWFybXYuUyBpbiB0aGUga2VybmVsIHNvdXJjZSBmb3IgZGV0YWlscy4KLSsgKi8KLSsjZGVmaW5lIHJtYigpCQkoKHZvaWQoKikodm9pZCkpMHhmZmZmMGZhMCkoKQotKyNkZWZpbmUgY3B1X3JlbGF4KCkJYXNtIHZvbGF0aWxlKCIiOjo6Im1lbW9yeSIpCi0rI2VuZGlmCi0rCi0gI2VuZGlmCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWtlcm5lbC9zeXNwcm9mL2ZpbGVzL3JtYi1taXBzLnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1rZXJuZWwvc3lzcHJvZi9maWxlcy9ybWItbWlwcy5wYXRjaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTA1NWI4YS4uMDAwMDAwMAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWtlcm5lbC9zeXNwcm9mL2ZpbGVzL3JtYi1taXBzLnBhdGNoCisrKyAvZGV2L251bGwKQEAgLTEsMjIgKzAsMCBAQAotVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCi0KLUluZGV4OiBnaXQvdXRpbC5oCi09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLS0gZ2l0Lm9yaWcvdXRpbC5oCTIwMTAtMTItMDggMDE6MjI6NDQuNDg2MjQzMDAxIC0wNjAwCi0rKysgZ2l0L3V0aWwuaAkyMDEwLTEyLTA4IDAxOjIzOjI3LjgzNjI0MzAwMSAtMDYwMAotQEAgLTM3LDQgKzM3LDE1IEBACi0gI2RlZmluZSBjcHVfcmVsYXgoKSAgICAgYXNtIHZvbGF0aWxlKCIiIDo6OiAibWVtb3J5Iik7Ci0gI2VuZGlmCi0gCi0rI2lmZGVmIF9fbWlwc19fCi0rI2RlZmluZSBybWIoKQkJYXNtIHZvbGF0aWxlKAkJCQkJXAotKwkJCQkiLnNldAltaXBzMlxuXHQiCQkJXAotKwkJCQkic3luY1xuXHQiCQkJCVwKLSsJCQkJIi5zZXQJbWlwczAiCQkJCVwKLSsJCQkJOiAvKiBubyBvdXRwdXQgKi8JCQlcCi0rCQkJCTogLyogbm8gaW5wdXQgKi8JCQlcCi0rCQkJCTogIm1lbW9yeSIpCi0rI2RlZmluZSBjcHVfcmVsYXgoKQlhc20gdm9sYXRpbGUoIiIgOjo6ICJtZW1vcnkiKQotKyNlbmRpZgotKwotICNlbmRpZgpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1rZXJuZWwvc3lzcHJvZi9zeXNwcm9mX2dpdC5iYiBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMta2VybmVsL3N5c3Byb2Yvc3lzcHJvZl9naXQuYmIKaW5kZXggODRjNmFhZC4uOGQ4YjYyNiAxMDA2NDQKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1rZXJuZWwvc3lzcHJvZi9zeXNwcm9mX2dpdC5iYgorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWtlcm5lbC9zeXNwcm9mL3N5c3Byb2ZfZ2l0LmJiCkBAIC0xLDMxICsxLDQwIEBACiBTVU1NQVJZID0gIlN5c3RlbS13aWRlIFBlcmZvcm1hbmNlIFByb2ZpbGVyIGZvciBMaW51eCIKLUxJQ0VOU0UgPSAiR1BMdjIiCi1MSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT05NGQ1NWQ1MTJhOWJhMzZjYWE5YjdkZjA3OWJhZTE5ZiIKK0xJQ0VOU0UgPSAiR1BMdjMrIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9ZDMyMjM5YmNiNjczNDYzYWI4NzRlODBkNDdmYWU1MDQgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vc3JjL3NwLWFwcGxpY2F0aW9uLmM7ZW5kbGluZT0xNzttZDU9NDBlNTU1NzdlZjEyMmM4OGZlMjAwNTJhY2RhNjQ4NzUiCisKK2luaGVyaXQgZ25vbWViYXNlIGdldHRleHQgc3lzdGVtZAogCiBERVBFTkRTID0gImdsaWItMi4wIgogCi1TUkNSRVYgPSAiY2Q0NGVlNjY0NGMzNjQxNTA3ZmI1M2I4YTJhNjkxMzdmMjk3MTIxOSIKLVBWID0gIjEuMi4wK2dpdCR7U1JDUFZ9IgorUyA9ICIke1dPUktESVJ9L2dpdCIKK1NSQ1JFViA9ICI5YzZjZWM5YjQ5NzY2YmY3N2MxNzEzYmM1YTdjNmQ2NTFlNjI4MDY4IgorUFYgPSAiMy4yMC4wK2dpdCR7U1JDUFZ9IgogCiBTUkNfVVJJID0gImdpdDovL2dpdC5nbm9tZS5vcmcvc3lzcHJvZiBcCiAgICAgICAgICAgIGZpbGU6Ly9kZWZpbmUtTlRfR05VX0JVSUxEX0lELnBhdGNoIFwKLSAgICAgICAgICAgZmlsZTovL2d1aS1hcmd1bWVudC5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly8wMDAxLWNvbmZpZ3VyZS1BZGQtb3B0aW9uLXRvLWVuYWJsZS1kaXNhYmxlLXBvbGtpdC5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly8wMDAxLURpc2FibGUtY2hlY2stZm9yLXBvbGtpdC1mb3ItVUkucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vMDAwMS1Bdm9pZC1idWlsZGluZy1kb2NzLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovLzAwMDEtY2FsbGdyYXBoLVVzZS1VNjRfVE9fUE9JTlRFUi5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly8wMDAxLUZvcndhcmQtcG9ydC1taXBzLWFybS1tZW1vcnktYmFycmllci1wYXRjaGVzLnBhdGNoIFwKICAgICAgICAgICAiCitTUkNfVVJJW2FyY2hpdmUubWQ1c3VtXSA9ICJkNTZlODQ5MjAzM2I2MGUyNDc2MzQ3MzFlN2Y3NjBiOSIKK1NSQ19VUklbYXJjaGl2ZS5zaGEyNTZzdW1dID0gIjRhMzM4YWQ0MWJmZmZhZTg3ZWYyODFmNmU3NWM5NjYwYjNlMGM2NjcxYmY1MjMzYmUwYzNmNTVhNWU1YjFjZTUiCiAKLVNSQ19VUklfYXBwZW5kX2FybSAgPSAiIGZpbGU6Ly9ybWItYXJtLnBhdGNoIgotU1JDX1VSSV9hcHBlbmRfYXJtZWIgID0gIiBmaWxlOi8vcm1iLWFybS5wYXRjaCIKLVNSQ19VUklfYXBwZW5kX21pcHMgPSAiIGZpbGU6Ly9ybWItbWlwcy5wYXRjaCIKLVNSQ19VUklfYXBwZW5kX21pcHM2NCA9ICIgZmlsZTovL3JtYi1taXBzLnBhdGNoIgotU1JDX1VSSV9hcHBlbmRfbWlwczY0bjMyID0gIiBmaWxlOi8vcm1iLW1pcHMucGF0Y2giCitBVVRPVE9PTFNfQVVYRElSID0gIiR7U30vYnVpbGQtYXV4IgogCi1TID0gIiR7V09SS0RJUn0vZ2l0IgorRVhUUkFfT0VDT05GID0gIi0tZW5hYmxlLWNvbXBpbGUtd2FybmluZ3MiCiAKLWluaGVyaXQgYXV0b3Rvb2xzIHBrZ2NvbmZpZworUEFDS0FHRUNPTkZJRyA/PSAiJHtAYmIudXRpbHMuY29udGFpbnNfYW55KCdESVNUUk9fRkVBVFVSRVMnLCAnJHtHVEszRElTVFJPRkVBVFVSRVN9JywgJ2d0aycsICcnLCBkKX0iCitQQUNLQUdFQ09ORklHW2d0a10gPSAiLS1lbmFibGUtZ3RrLC0tZGlzYWJsZS1ndGssZ3RrKzMiCitQQUNLQUdFQ09ORklHW3BvbGtpdF0gPSAiLS1lbmFibGUtcG9sa2l0LC0tZGlzYWJsZS1wb2xraXQscG9sa2l0IGRidXMiCiAKLVBBQ0tBR0VDT05GSUcgPz0gIiR7QGJiLnV0aWxzLmNvbnRhaW5zX2FueSgnRElTVFJPX0ZFQVRVUkVTJywgJyR7R1RLMkRJU1RST0ZFQVRVUkVTfScsICdndWknLCAnJywgZCl9IgotUEFDS0FHRUNPTkZJR1tndWldID0gIi0tZW5hYmxlLWd1aSwtLWRpc2FibGUtZ3VpLGd0aysgZ2RrLXBpeGJ1ZiBwYW5nbyBsaWJnbGFkZSIKK1NPTElCUyA9ICIuc28iCitGSUxFU19TT0xJQlNERVYgPSAiIgorRklMRVNfJHtQTn0gKz0gIiR7ZGF0YWRpcn0vaWNvbnMvIgorCitTWVNURU1EX1NFUlZJQ0VfJHtQTn0gPSAiJHtAYmIudXRpbHMuY29udGFpbnMoJ1BBQ0tBR0VDT05GSUcnLCAncG9sa2l0JywgJ3N5c3Byb2YyLnNlcnZpY2UnLCAnJywgZCl9IgogCiAjIFdlIGRvIG5vdCB5ZXQgd29yayBmb3IgYWFyY2g2NC4KLSMKIENPTVBBVElCTEVfSE9TVCA9ICJeKD8hYWFyY2g2NCkuKiIKLQpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1rZXJuZWwvc3lzdGVtdGFwL3N5c3RlbXRhcC11cHJvYmVzX2dpdC5iYiBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMta2VybmVsL3N5c3RlbXRhcC9zeXN0ZW10YXAtdXByb2Jlc19naXQuYmIKaW5kZXggMzY4NmMyZi4uNDY4MjBlZiAxMDA2NDQKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1rZXJuZWwvc3lzdGVtdGFwL3N5c3RlbXRhcC11cHJvYmVzX2dpdC5iYgorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWtlcm5lbC9zeXN0ZW10YXAvc3lzdGVtdGFwLXVwcm9iZXNfZ2l0LmJiCkBAIC0xMyw4ICsxMyw2IEBACiAKIEZJTEVTXyR7UE59ICs9ICIke2RhdGFkaXJ9L3N5c3RlbXRhcC9ydW50aW1lL3Vwcm9iZXMiCiAKLUVYVFJBX09FTUFLRSA9ICIiCi0KICMgQ29tcGlsZSBhbmQgaW5zdGFsbCB0aGUgdXByb2JlcyBrZXJuZWwgbW9kdWxlIG9uIG1hY2hpbmVzIHdpdGggdXRyYWNlCiAjIHN1cHBvcnQuICBOb3RlIHRoYXQgc3RhcHJ1biBleHBlY3RzIGl0IGluIHRoZSBzeXN0ZW10YXAvcnVudGltZSBkaXJlY3RvcnksCiAjIG5vdCBpbiAvbGliL21vZHVsZXMuCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWtlcm5lbC9zeXN0ZW10YXAvc3lzdGVtdGFwL2RvY3Byb2MtYnVpbGQtZml4LnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1rZXJuZWwvc3lzdGVtdGFwL3N5c3RlbXRhcC9kb2Nwcm9jLWJ1aWxkLWZpeC5wYXRjaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzNhODk5NC4uMDAwMDAwMAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWtlcm5lbC9zeXN0ZW10YXAvc3lzdGVtdGFwL2RvY3Byb2MtYnVpbGQtZml4LnBhdGNoCisrKyAvZGV2L251bGwKQEAgLTEsMTkgKzAsMCBAQAotVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtjb25maWd1cmF0aW9uXQotCi1TaWduZWQtb2ZmLWJ5OiBUb20gWmFudXNzaSA8dG9tLnphbnVzc2lAaW50ZWwuY29tPgotCi1JbmRleDogZ2l0L2RvYy9TeXN0ZW1UYXBfVGFwc2V0X1JlZmVyZW5jZS9NYWtlZmlsZS5hbQotPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0tIGdpdC5vcmlnL2RvYy9TeXN0ZW1UYXBfVGFwc2V0X1JlZmVyZW5jZS9NYWtlZmlsZS5hbQkyMDEyLTA0LTEzIDA4OjQzOjQ2LjI2MzMzOTAwMyAtMDUwMAotKysrIGdpdC9kb2MvU3lzdGVtVGFwX1RhcHNldF9SZWZlcmVuY2UvTWFrZWZpbGUuYW0JMjAxMi0wNC0xMyAwOTozMToyMi40NzAwODM5MTUgLTA1MDAKLUBAIC0yNyw2ICsyNywxMCBAQAotIG5vaW5zdF9QUk9HUkFNUyA9IGRvY3Byb2MKLSBTUkNUUkVFPSQoYWJzX3RvcF9zcmNkaXIpLwotIERPQ1BST0M9JChhYnNfYnVpbGRkaXIpL2RvY3Byb2MKLStkb2Nwcm9jX0xJTksgPSAkKENDX0ZPUl9CVUlMRCkgJChMREZMQUdTX0ZPUl9CVUlMRCkgLW8gJEAKLSsKLStkb2Nwcm9jLm86ICQoc3JjZGlyKS9kb2Nwcm9jLmMKLSsJJChDQ19GT1JfQlVJTEQpIC1jICQoQ0ZMQUdTX0ZPUl9CVUlMRCkgLW8gJEAgJChzcmNkaXIpL2RvY3Byb2MuYwotIAotIGFsbDogJChQREZET0NTKSBzdGFtcC1odG1sZG9jcyBzdGFtcC1tYW5kb2NzCi0gdGFwc2V0cy54bWw6IGRvY3Byb2MgJChzaGVsbCBmaW5kICQoU1JDVFJFRSkvdGFwc2V0IC1uYW1lICcqLnN0cCcpCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWtlcm5lbC9zeXN0ZW10YXAvc3lzdGVtdGFwL21vbml0b3Itb3B0aW9uLnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1rZXJuZWwvc3lzdGVtdGFwL3N5c3RlbXRhcC9tb25pdG9yLW9wdGlvbi5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43ZDQzYTc5Ci0tLSAvZGV2L251bGwKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1rZXJuZWwvc3lzdGVtdGFwL3N5c3RlbXRhcC9tb25pdG9yLW9wdGlvbi5wYXRjaApAQCAtMCwwICsxLDI4IEBACitBZGQgYW4gb3B0aW9uIHRvIGV4cGxpY2l0bHkgZGlzYWJsZSB0aGUgbW9uaXRvciAoYW5kIHRoZXJlZm9yZSB0aGUgZGVwZW5kZW5jeSBvbgoranNvbi1jIGFuZCBuY3Vyc2VzKS4KKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCitTaWduZWQtb2ZmLWJ5OiBSb3NzIEJ1cnRvbiA8cm9zcy5idXJ0b25AaW50ZWwuY29tPgorCitkaWZmIC0tZ2l0IGEvY29uZmlndXJlLmFjIGIvY29uZmlndXJlLmFjCitpbmRleCBjZDc4MWEyLi5lNTYwNzlhIDEwMDY0NAorLS0tIGEvY29uZmlndXJlLmFjCisrKysgYi9jb25maWd1cmUuYWMKK0BAIC01NzAsMTMgKzU3NCwxNiBAQCBkbmwgU2VlIGlmIHdlIGhhdmUgZW5vdWdoIGxpYnJhcmllcyBhbmQgdG9vbHMgdG8gYnVpbGQgdGhlIHZpcnQgc2VydmVyCisgZmkKKyBBTV9DT05ESVRJT05BTChbQlVJTERfVklSVF0sIFt0ZXN0ICIke2hhdmVfbGlidmlydH0iID09ICJ5ZXMiIC1hICIke2hhdmVfbGlieG1sMn0iID09ICJ5ZXMiIC1hICIkZW5hYmxlX3ZpcnQiICE9ICJubyJdKQorCisrQUNfQVJHX0VOQUJMRShbbW9uaXRvcl0sIEFTX0hFTFBfU1RSSU5HKFstLWRpc2FibGUtbW9uaXRvcl0sW0Rpc2FibGUgbW9uaXRvcl0pKQorK2lmIHRlc3QgIiRlbmFibGVfbW9uaXRvciIgIT0gIm5vIjsgdGhlbgorIGRubCBDaGVjayBmb3IgcHJlc2VuY2Ugb2YganNvbi1jIGFuZCBuY3Vyc2VzIGZvciB1c2UgaW4gbW9uaXRvciBtb2RlCisgUEtHX0NIRUNLX01PRFVMRVMoW2pzb25jXSwgW2pzb24tY10sIFtoYXZlX2pzb25jPXllc10sIFtoYXZlX2pzb25jPW5vXSkKKyBQS0dfQ0hFQ0tfTU9EVUxFUyhbbmN1cnNlc10sIFtuY3Vyc2VzXSwgW2hhdmVfbmN1cnNlcz15ZXNdLCBbaGF2ZV9uY3Vyc2VzPW5vXSkKKy1BTV9DT05ESVRJT05BTChbSEFWRV9NT05JVE9SX0xJQlNdLCBbdGVzdCAiJHtoYXZlX2pzb25jfSIgPT0gInllcyIgLWEgIiR7aGF2ZV9uY3Vyc2VzfSIgPT0gInllcyJdKQorIGlmIHRlc3QgIiR7aGF2ZV9qc29uY30iID09ICJ5ZXMiIC1hICIke2hhdmVfbmN1cnNlc30iID09IHllczsgdGhlbgorICAgQUNfREVGSU5FKFtIQVZFX01PTklUT1JfTElCU10sWzFdLFtEZWZpbmUgdG8gMSBpZiBqc29uLWMgYW5kIG5jdXJzZXMgbGlicmFyaWVzIGFyZSBpbnN0YWxsZWRdKQorIGZpCisrZmkKKytBTV9DT05ESVRJT05BTChbSEFWRV9NT05JVE9SX0xJQlNdLCBbdGVzdCAiJHtoYXZlX2pzb25jfSIgPT0gInllcyIgLWEgIiR7aGF2ZV9uY3Vyc2VzfSIgPT0gInllcyIgLWEgIiRlbmFibGVfbW9uaXRvciIgIT0gIm5vIl0pCisKKyBBQ19DQUNIRV9DSEVDSyhbZm9yIGFzc2VtYmxlciAuc2VjdGlvbiAiPyIgZmxhZ3Mgc3VwcG9ydF0sIHN0YXBfY3Zfc2VjdGlvbnEsIFsKKyBvbGRfQ0ZMQUdTPSIkQ0ZMQUdTIgpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1rZXJuZWwvc3lzdGVtdGFwL3N5c3RlbXRhcF9naXQuYmIgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWtlcm5lbC9zeXN0ZW10YXAvc3lzdGVtdGFwX2dpdC5iYgppbmRleCA5NzA2NGI4Li40M2JmNjllIDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWtlcm5lbC9zeXN0ZW10YXAvc3lzdGVtdGFwX2dpdC5iYgorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWtlcm5lbC9zeXN0ZW10YXAvc3lzdGVtdGFwX2dpdC5iYgpAQCAtMiwxNyArMiwxNCBAQAogCiByZXF1aXJlIHN5c3RlbXRhcF9naXQuaW5jCiAKLURFUEVORFMgPSAiZWxmdXRpbHMgc3FsaXRlMyBzeXN0ZW10YXAtbmF0aXZlIgotREVQRU5EU19jbGFzcy1uYXRpdmUgPSAiZWxmdXRpbHMtbmF0aXZlIHNxbGl0ZTMtbmF0aXZlIGdldHRleHQtbmF0aXZlIgotREVQRU5EU19jbGFzcy1uYXRpdmVzZGsgPSAibmF0aXZlc2RrLWVsZnV0aWxzIG5hdGl2ZXNkay1zcWxpdGUzIG5hdGl2ZXNkay1nZXR0ZXh0IgorREVQRU5EUyA9ICJib29zdCBlbGZ1dGlscyIKIAotUkRFUEVORFNfJHtQTn0gKz0gInB5dGhvbiBiYXNoIgotUkRFUEVORFNfJHtQTn1fY2xhc3MtbmF0aXZlICs9ICJweXRob24tbmF0aXZlIgotUkRFUEVORFNfJHtQTn1fY2xhc3MtbmF0aXZlc2RrICs9ICJweXRob24tbmF0aXZlIgorUkRFUEVORFNfJHtQTn0gKz0gInB5dGhvbjMtY29yZSBiYXNoIgogCiBFWFRSQV9PRUNPTkYgKz0gIi0td2l0aC1saWJlbGY9JHtTVEFHSU5HX0RJUl9UQVJHRVR9IC0td2l0aG91dC1ycG0gXAogICAgICAgICAgICAgLS13aXRob3V0LW5zcyAtLXdpdGhvdXQtYXZhaGkgLS13aXRob3V0LWR5bmluc3QgXAogICAgICAgICAgICAgLS1kaXNhYmxlLXNlcnZlciAtLWRpc2FibGUtZ3JhcGhlciAtLWVuYWJsZS1wcm9sb2d1ZXMgXAorICAgICAgICAgICAgLS13aXRoLXB5dGhvbjMgXAogICAgICAgICAgICAgYWNfY3ZfcHJvZ19oYXZlX2phdmFjPW5vIFwKICAgICAgICAgICAgIGFjX2N2X3Byb2dfaGF2ZV9qYXI9bm8gIgogCkBAIC0yMCw4ICsxNywxMCBAQAogCiBFWFRSQV9PRUNPTkYgKz0gIiR7U1RBUF9ET0NTfSAiCiAKLVBBQ0tBR0VDT05GSUcgPz89ICIiCitQQUNLQUdFQ09ORklHID8/PSAic3FsaXRlIG1vbml0b3IiCiBQQUNLQUdFQ09ORklHW2xpYnZpcnRdID0gIi0tZW5hYmxlLWxpYnZpcnQsLS1kaXNhYmxlLWxpYnZpcnQsbGlidmlydCIKK1BBQ0tBR0VDT05GSUdbc3FsaXRlXSA9ICItLWVuYWJsZS1zcWxpdGUsLS1kaXNhYmxlLXNxbGl0ZSxzcWxpdGUzIgorUEFDS0FHRUNPTkZJR1ttb25pdG9yXSA9ICItLWVuYWJsZS1tb25pdG9yLC0tZGlzYWJsZS1tb25pdG9yLG5jdXJzZXMganNvbi1jIgogCiBpbmhlcml0IGF1dG90b29scyBnZXR0ZXh0IHBrZ2NvbmZpZwogCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWtlcm5lbC9zeXN0ZW10YXAvc3lzdGVtdGFwX2dpdC5pbmMgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWtlcm5lbC9zeXN0ZW10YXAvc3lzdGVtdGFwX2dpdC5pbmMKaW5kZXggNjU2ZjE1Zi4uMzA0ZWI5OSAxMDA2NDQKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1rZXJuZWwvc3lzdGVtdGFwL3N5c3RlbXRhcF9naXQuaW5jCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMta2VybmVsL3N5c3RlbXRhcC9zeXN0ZW10YXBfZ2l0LmluYwpAQCAtMSwxNCArMSwxNCBAQAogTElDRU5TRSA9ICJHUEx2MiIKIExJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PWIyMzRlZTRkNjlmNWZjZTQ0ODZhODBmZGFmNGE0MjYzIgotU1JDUkVWID0gIjcwMDlmMmY3ODJlNTJkNjEwNWZlNjhkNmVhMmE5ODIwYTEwOTljMDYiCi1QViA9ICIyLjkiCitTUkNSRVYgPSAiNjE2ZWM3YTBiOTE2ZGY3Nzg1ZDkxMWI4MjRjM2RmNmViMDIyYjIxMyIKK1BWID0gIjMuMCIKIAogU1JDX1VSSSA9ICJnaXQ6Ly9zb3VyY2V3YXJlLm9yZy9naXQvc3lzdGVtdGFwLmdpdCBcCi0gICAgICAgICAgIGZpbGU6Ly9kb2Nwcm9jLWJ1aWxkLWZpeC5wYXRjaCBcCiAgICAgICAgICAgIGZpbGU6Ly9vYnNvbGV0ZV9hdXRvbWFrZV9tYWNyb3MucGF0Y2ggXAogICAgICAgICAgICBmaWxlOi8vc3lzdGVtX21hcF9sb2NhdGlvbi5wYXRjaCBcCiAgICAgICAgICAgIGZpbGU6Ly9jb25maWd1cmUtYWxsb3ctdG8tZGlzYWJsZS1saWJ2aXJ0LnBhdGNoIFwKICAgICAgICAgICAgZmlsZTovL3gzMl9hYmlfdGltZS5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9tb25pdG9yLW9wdGlvbi5wYXRjaCBcCiAgICAgICAgICAgIgogCiAjIHN5c3RlbXRhcCBkb2Vzbid0IHN1cHBvcnQgbWlwcwpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2Fsc2EvYWxzYS1saWIvMDAwMS10b3BvbG9neS1BZGQtbWlzc2luZy1pbmNsdWRlLXN5cy1zdGF0LmgucGF0Y2ggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvYWxzYS9hbHNhLWxpYi8wMDAxLXRvcG9sb2d5LUFkZC1taXNzaW5nLWluY2x1ZGUtc3lzLXN0YXQuaC5wYXRjaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMGVhZDBjZC4uMDAwMDAwMAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvYWxzYS9hbHNhLWxpYi8wMDAxLXRvcG9sb2d5LUFkZC1taXNzaW5nLWluY2x1ZGUtc3lzLXN0YXQuaC5wYXRjaAorKysgL2Rldi9udWxsCkBAIC0xLDM1ICswLDAgQEAKLUZyb20gM2YxZGJhOWE4MjFiNTNiNDIwMDE2MDVmOWExMjZhOTU4ODA0ODg0ZiBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKLUZyb206IFRha2FzaGkgSXdhaSA8dGl3YWlAc3VzZS5kZT4KLURhdGU6IE1vbiwgOSBOb3YgMjAxNSAxMzozNzoyNiArMDEwMAotU3ViamVjdDogW1BBVENIXSB0b3BvbG9neTogQWRkIG1pc3NpbmcgaW5jbHVkZSBzeXMvc3RhdC5oCi0KLU5lY2Vzc2FyeSBmb3IgcHJvcGVyIGRlZmluaXRpb25zIG9mIFNfSVJVU1IgJiBjby4gT3RoZXJ3aXNlIGl0Ci1yZXN1bHRzIGluIGNvbXBpbGUgZXJyb3JzIHdpdGggb2xkIGdsaWJjIGFuZCB1Y2xpYmM6Ci0gIHBhcnNlci5jOiBJbiBmdW5jdGlvbiAnc25kX3RwbGdfYnVpbGRfZmlsZSc6Ci0gIHBhcnNlci5jOjI2MjogZXJyb3I6ICdTX0lSVVNSJyB1bmRlY2xhcmVkIChmaXJzdCB1c2UgaW4gdGhpcyBmdW5jdGlvbikKLSAgcGFyc2VyLmM6MjYyOiBlcnJvcjogKEVhY2ggdW5kZWNsYXJlZCBpZGVudGlmaWVyIGlzIHJlcG9ydGVkIG9ubHkgb25jZQotICBwYXJzZXIuYzoyNjI6IGVycm9yOiBmb3IgZWFjaCBmdW5jdGlvbiBpdCBhcHBlYXJzIGluLikKLQotVXBzdHJlYW0tU3RhdHVzOiBCYWNrcG9ydAotCi1TaWduZWQtb2ZmLWJ5OiBUYWthc2hpIEl3YWkgPHRpd2FpQHN1c2UuZGU+Ci1TaWduZWQtb2ZmLWJ5OiBNYXhpbiBCLiBKb2huIDxtYXhpbi5qb2huQGludGVsLmNvbT4KLS0tLQotIHNyYy90b3BvbG9neS9wYXJzZXIuYyB8IDEgKwotIDEgZmlsZSBjaGFuZ2VkLCAxIGluc2VydGlvbigrKQotCi1kaWZmIC0tZ2l0IGEvc3JjL3RvcG9sb2d5L3BhcnNlci5jIGIvc3JjL3RvcG9sb2d5L3BhcnNlci5jCi1pbmRleCA4MGEwYWUwLi4xOGJiOWM3IDEwMDY0NAotLS0tIGEvc3JjL3RvcG9sb2d5L3BhcnNlci5jCi0rKysgYi9zcmMvdG9wb2xvZ3kvcGFyc2VyLmMKLUBAIC0xNiw2ICsxNiw3IEBACi0gICAgICAgICAgICBMaWFtIEdpcmR3b29kIDxsaWFtLnIuZ2lyZHdvb2RAbGludXguaW50ZWwuY29tPgotICovCi0gCi0rI2luY2x1ZGUgPHN5cy9zdGF0Lmg+Ci0gI2luY2x1ZGUgImxpc3QuaCIKLSAjaW5jbHVkZSAidHBsZ19sb2NhbC5oIgotIAotLS0gCi0yLjQuMAotCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvYWxzYS9hbHNhLWxpYi9hdm9pZC1pbmNsdWRpbmctc3lzLXBvbGwuaC1kaXJlY3RseS5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9hbHNhL2Fsc2EtbGliL2F2b2lkLWluY2x1ZGluZy1zeXMtcG9sbC5oLWRpcmVjdGx5LnBhdGNoCmluZGV4IDE2MTYxOWIuLjNkNDQ1ODUgMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9hbHNhL2Fsc2EtbGliL2F2b2lkLWluY2x1ZGluZy1zeXMtcG9sbC5oLWRpcmVjdGx5LnBhdGNoCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9hbHNhL2Fsc2EtbGliL2F2b2lkLWluY2x1ZGluZy1zeXMtcG9sbC5oLWRpcmVjdGx5LnBhdGNoCkBAIC0xLDQgKzEsNCBAQAotRnJvbSA3ZGNmNDY5NjllODVjODgxYzkwMWRmNGI0OTMwOWU5MDkxY2FkMTZhIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbSBjMmMxM2NmMGM0Njk4NjJjZDM5YjJhNjk4NjIwMDIzMzFhYjdjOGNiIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQogRnJvbTogQW5kcmUgTWNDdXJkeSA8YXJtY2N1cmR5QGdtYWlsLmNvbT4KIERhdGU6IFR1ZSwgOSBGZWIgMjAxNiAxNDowMToxOCAtMDgwMAogU3ViamVjdDogW1BBVENIXSBhdm9pZCBpbmNsdWRpbmcgPHN5cy9wb2xsLmg+IGRpcmVjdGx5CkBAIC0yNCw3ICsyNCw3IEBACiAgMTIgZmlsZXMgY2hhbmdlZCwgMTIgaW5zZXJ0aW9ucygrKSwgMTIgZGVsZXRpb25zKC0pCiAKIGRpZmYgLS1naXQgYS9hc2VydmVyL2FzZXJ2ZXIuYyBiL2FzZXJ2ZXIvYXNlcnZlci5jCi1pbmRleCAxNTc5ZGE3Li5lZjY0MjQ4IDEwMDY0NAoraW5kZXggYWMyMDcwNi4uNDZmNzMxYSAxMDA2NDQKIC0tLSBhL2FzZXJ2ZXIvYXNlcnZlci5jCiArKysgYi9hc2VydmVyL2FzZXJ2ZXIuYwogQEAgLTIwLDcgKzIwLDcgQEAKQEAgLTYyLDcgKzYyLDcgQEAKICAjaW5jbHVkZSA8c3RkYXJnLmg+CiAgI2luY2x1ZGUgPGVuZGlhbi5oPgogZGlmZiAtLWdpdCBhL2luY2x1ZGUvbG9jYWwuaCBiL2luY2x1ZGUvbG9jYWwuaAotaW5kZXggYjQyOWY1ZC4uZTA1ODk4ZiAxMDA2NDQKK2luZGV4IDMxN2YyZTMuLjZhNDNhNDcgMTAwNjQ0CiAtLS0gYS9pbmNsdWRlL2xvY2FsLmgKICsrKyBiL2luY2x1ZGUvbG9jYWwuaAogQEAgLTQ3LDcgKzQ3LDcgQEAKQEAgLTczLDIwICs3MywyMCBAQAogKyNpbmNsdWRlIDxwb2xsLmg+CiAgI2luY2x1ZGUgPHN5cy90eXBlcy5oPgogICNpbmNsdWRlIDxlcnJuby5oPgotICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorICNpZiBkZWZpbmVkKF9fbGludXhfXykKIGRpZmYgLS1naXQgYS9zcmMvY29udHJvbC9jb250cm9sLmMgYi9zcmMvY29udHJvbC9jb250cm9sLmMKLWluZGV4IDRhMjhjZjYuLjA3MWM1ZGIgMTAwNjQ0CitpbmRleCA2YzAwYjhlLi5mZDBjMzAzIDEwMDY0NAogLS0tIGEvc3JjL2NvbnRyb2wvY29udHJvbC5jCiArKysgYi9zcmMvY29udHJvbC9jb250cm9sLmMKLUBAIC00OCw3ICs0OCw3IEBAIGFuZCBJRUM5NTggc3RydWN0dXJlLgorQEAgLTkwLDcgKzkwLDcgQEAgSS9PIG9wZXJhdGlvbnMuCiAgI2luY2x1ZGUgPHN0cmluZy5oPgogICNpbmNsdWRlIDxmY250bC5oPgogICNpbmNsdWRlIDxzaWduYWwuaD4KIC0jaW5jbHVkZSA8c3lzL3BvbGwuaD4KICsjaW5jbHVkZSA8cG9sbC5oPgorICNpbmNsdWRlIDxzdGRib29sLmg+CiAgI2luY2x1ZGUgImNvbnRyb2xfbG9jYWwuaCIKICAKLSAvKioKIGRpZmYgLS1naXQgYS9zcmMvY29udHJvbC9jb250cm9sX3NobS5jIGIvc3JjL2NvbnRyb2wvY29udHJvbF9zaG0uYwogaW5kZXggYmQwN2Q0YS4uOWEyZTI2OCAxMDA2NDQKIC0tLSBhL3NyYy9jb250cm9sL2NvbnRyb2xfc2htLmMKQEAgLTEwMSw3ICsxMDEsNyBAQAogICNpbmNsdWRlIDxzeXMvdWlvLmg+CiAgI2luY2x1ZGUgPHN5cy9tbWFuLmg+CiBkaWZmIC0tZ2l0IGEvc3JjL3BjbS9wY21fZGlyZWN0LmMgYi9zcmMvcGNtL3BjbV9kaXJlY3QuYwotaW5kZXggZmQzODc3Yy4uNTJhYzA5MyAxMDA2NDQKK2luZGV4IGMzOTI1Y2MuLjE4ZjFkZDUgMTAwNjQ0CiAtLS0gYS9zcmMvcGNtL3BjbV9kaXJlY3QuYwogKysrIGIvc3JjL3BjbS9wY21fZGlyZWN0LmMKIEBAIC0zMCw3ICszMCw3IEBACkBAIC0xMTQsNyArMTE0LDcgQEAKICAjaW5jbHVkZSA8c3lzL3NlbS5oPgogICNpbmNsdWRlIDxzeXMvd2FpdC5oPgogZGlmZiAtLWdpdCBhL3NyYy9wY20vcGNtX21tYXAuYyBiL3NyYy9wY20vcGNtX21tYXAuYwotaW5kZXggNWM0ZmJlMS4uMmNmYTdkYiAxMDA2NDQKK2luZGV4IDE5NDgyODkuLjRjZjIyMGEgMTAwNjQ0CiAtLS0gYS9zcmMvcGNtL3BjbV9tbWFwLmMKICsrKyBiL3NyYy9wY20vcGNtX21tYXAuYwogQEAgLTIyLDcgKzIyLDcgQEAKQEAgLTE1Myw3ICsxNTMsNyBAQAogICNpbmNsdWRlIDxzeXMvbW1hbi5oPgogICNpbmNsdWRlIDxuZXRpbmV0L2luLmg+CiBkaWZmIC0tZ2l0IGEvc3JjL3NlcS9zZXEuYyBiL3NyYy9zZXEvc2VxLmMKLWluZGV4IDYyMGNhM2YuLjY4MWNlZjEgMTAwNjQ0CitpbmRleCA5Mjc5ODMwLi5kMjAyN2NiIDEwMDY0NAogLS0tIGEvc3JjL3NlcS9zZXEuYwogKysrIGIvc3JjL3NlcS9zZXEuYwogQEAgLTc3Nyw3ICs3NzcsNyBAQCB2b2lkIGV2ZW50X2ZpbHRlcihzbmRfc2VxX3QgKnNlcSwgc25kX3NlcV9ldmVudF90ICpldikKQEAgLTE3OSw1ICsxNzksNSBAQAogICNpbmNsdWRlIDxzeXMvc2htLmg+CiAgI2luY2x1ZGUgImxpc3QuaCIKIC0tIAotMS45LjEKKzIuOC4xCiAKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9hbHNhL2Fsc2EtbGliXzEuMS4wLmJiIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2Fsc2EvYWxzYS1saWJfMS4xLjAuYmIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGE3M2RhMjguLjAwMDAwMDAKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2Fsc2EvYWxzYS1saWJfMS4xLjAuYmIKKysrIC9kZXYvbnVsbApAQCAtMSw1MSArMCwwIEBACi1TVU1NQVJZID0gIkFMU0Egc291bmQgbGlicmFyeSIKLUhPTUVQQUdFID0gImh0dHA6Ly93d3cuYWxzYS1wcm9qZWN0Lm9yZyIKLUJVR1RSQUNLRVIgPSAiaHR0cHM6Ly9idWd0cmFjay5hbHNhLXByb2plY3Qub3JnL2Fsc2EtYnVnL2xvZ2luX3BhZ2UucGhwIgotU0VDVElPTiA9ICJsaWJzL211bHRpbWVkaWEiCi1MSUNFTlNFID0gIkxHUEx2Mi4xICYgR1BMdjIrIgotTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9N2ZiYzMzODMwOWFjMzhmZWZjZDY0YjA0YmI5MDNlMzQgXAotICAgICAgICAgICAgICAgICAgICBmaWxlOi8vc3JjL3NvY2tldC5jO2JlZ2lubGluZT0xO2VuZGxpbmU9MjY7bWQ1PTExZmY4OWE4YTdhNGE2OTBhNWM3OGVmZmU4MTU5NTQ1IgotCi1CQkNMQVNTRVhURU5EID0gIm5hdGl2ZSBuYXRpdmVzZGsiCi0KLSMgY29uZmlndXJlLmluIHNldHMgLURfX2FybV9fIG9uIHRoZSBjb21tYW5kIGxpbmUgZm9yIGFueSBhcm0gc3lzdGVtCi0jIChub3QganVzdCB0aG9zZSB3aXRoIHRoZSBBUk0gaW5zdHJ1Y3Rpb24gc2V0KSwgdGhpcyBzaG91bGQgYmUgcmVtb3ZlZCwKLSMgKG9yIHJlcGxhY2VkIGJ5IGEgcGVybWl0dGVkICNkZWZpbmUpLgotI0ZJWE1FOiByZW1vdmUgdGhlIGZvbGxvd2luZwotQVJNX0lOU1RSVUNUSU9OX1NFVCA9ICJhcm0iCi0KLVNSQ19VUkkgPSAiZnRwOi8vZnRwLmFsc2EtcHJvamVjdC5vcmcvcHViL2xpYi8ke0JQfS50YXIuYnoyIFwKLSAgICAgICAgICAgZmlsZTovL0NoZWNrLWlmLXdvcmRleHAtZnVuY3Rpb24taXMtc3VwcG9ydGVkLnBhdGNoIFwKLSAgICAgICAgICAgZmlsZTovL2F2b2lkLWluY2x1ZGluZy1zeXMtcG9sbC5oLWRpcmVjdGx5LnBhdGNoIFwKLSAgICAgICAgICAgZmlsZTovLzAwMDEtdG9wb2xvZ3ktQWRkLW1pc3NpbmctaW5jbHVkZS1zeXMtc3RhdC5oLnBhdGNoIFwKLSIKLVNSQ19VUklbbWQ1c3VtXSA9ICI2OTUxNWNhNzNjM2M0YTIxMmVmNDUxNjBkZWE4NDZjMSIKLVNSQ19VUklbc2hhMjU2c3VtXSA9ICJkZmRlNjVkMTFlODJiNjhmODJlNTYyYWI2MjI4YzFmYjdjNzg4NTQzNDVkM2M1N2UyYzY4YTlkZDNkYWUxZjE1IgotCi1pbmhlcml0IGF1dG90b29scyBwa2djb25maWcKLQotcmVxdWlyZSBhbHNhLWZwdS5pbmMKLUVYVFJBX09FQ09ORiArPSAiJHtAZ2V0X2Fsc2FfZnB1X3NldHRpbmcoYmIsIGQpfSAiCi0KLUVYVFJBX09FQ09ORiA9ICItLWRpc2FibGUtcHl0aG9uIgotCi1FWFRSQV9PRUNPTkZfYXBwZW5kX2xpYmMtdWNsaWJjID0gIiAtLXdpdGgtdmVyc2lvbmVkPW5vICIKLQotUEFDS0FHRVMgPSsgImFsc2Etc2VydmVyIGxpYmFzb3VuZCBhbHNhLWNvbmYtYmFzZSBhbHNhLWNvbmYgYWxzYS1kb2MiCi1GSUxFU18ke1BOfSArPSAiJHtsaWJkaXJ9LyR7QlBOfS9zbWl4ZXIvKi5zbyIKLUZJTEVTXyR7UE59LWRldiArPSAiJHtsaWJkaXJ9LyR7QlBOfS9zbWl4ZXIvKi5sYSIKLUZJTEVTX2xpYmFzb3VuZCA9ICIke2xpYmRpcn0vbGliYXNvdW5kLnNvLioiCi1GSUxFU19hbHNhLXNlcnZlciA9ICIke2JpbmRpcn0vKiIKLUZJTEVTX2Fsc2EtY29uZiA9ICIke2RhdGFkaXJ9L2Fsc2EvIgotRklMRVNfYWxzYS1jb25mLWJhc2UgPSAiXAotJHtkYXRhZGlyfS9hbHNhL2Fsc2EuY29uZiBcCi0ke2RhdGFkaXJ9L2Fsc2EvY2FyZHMvYWxpYXNlcy5jb25mIFwKLSR7ZGF0YWRpcn0vYWxzYS9wY20vZGVmYXVsdC5jb25mIFwKLSR7ZGF0YWRpcn0vYWxzYS9wY20vZG1peC5jb25mIFwKLSR7ZGF0YWRpcn0vYWxzYS9wY20vZHNub29wLmNvbmYiCi0KLVJERVBFTkRTX2xpYmFzb3VuZCA9ICJhbHNhLWNvbmYtYmFzZSBhbHNhLWNvbmYiCi0jIHVwZ3JhZGUgcGF0aAotUlBST1ZJREVTXyR7UE59LWRldiA9ICJhbHNhLWRldiIKLVJSRVBMQUNFU18ke1BOfS1kZXYgPSAiYWxzYS1kZXYiCi1SQ09ORkxJQ1RTXyR7UE59LWRldiA9ICJhbHNhLWRldiIKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9hbHNhL2Fsc2EtbGliXzEuMS4yLmJiIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2Fsc2EvYWxzYS1saWJfMS4xLjIuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTMxM2RhNwotLS0gL2Rldi9udWxsCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9hbHNhL2Fsc2EtbGliXzEuMS4yLmJiCkBAIC0wLDAgKzEsNDQgQEAKK1NVTU1BUlkgPSAiQUxTQSBzb3VuZCBsaWJyYXJ5IgorSE9NRVBBR0UgPSAiaHR0cDovL3d3dy5hbHNhLXByb2plY3Qub3JnIgorQlVHVFJBQ0tFUiA9ICJodHRwOi8vYWxzYS1wcm9qZWN0Lm9yZy9tYWluL2luZGV4LnBocC9CdWdfVHJhY2tpbmciCitTRUNUSU9OID0gImxpYnMvbXVsdGltZWRpYSIKK0xJQ0VOU0UgPSAiTEdQTHYyLjEgJiBHUEx2MisiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT03ZmJjMzM4MzA5YWMzOGZlZmNkNjRiMDRiYjkwM2UzNCBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9zcmMvc29ja2V0LmM7YmVnaW5saW5lPTE7ZW5kbGluZT0yNjttZDU9MTFmZjg5YThhN2E0YTY5MGE1Yzc4ZWZmZTgxNTk1NDUiCisKK0JCQ0xBU1NFWFRFTkQgPSAibmF0aXZlIG5hdGl2ZXNkayIKKworU1JDX1VSSSA9ICJmdHA6Ly9mdHAuYWxzYS1wcm9qZWN0Lm9yZy9wdWIvbGliLyR7QlB9LnRhci5iejIgXAorICAgICAgICAgICBmaWxlOi8vQ2hlY2staWYtd29yZGV4cC1mdW5jdGlvbi1pcy1zdXBwb3J0ZWQucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vYXZvaWQtaW5jbHVkaW5nLXN5cy1wb2xsLmgtZGlyZWN0bHkucGF0Y2ggXAorIgorU1JDX1VSSVttZDVzdW1dID0gIjE5NDZlNjQzOGI4MjYyYTdiOGZkYWRhY2QwZTA2YmE3IgorU1JDX1VSSVtzaGEyNTZzdW1dID0gImQzOGRhY2Q5ODkyYjA2YjhiZmYwNDkyM2MzODBiMzhmYjJlMzc5ZWU1NTM4OTM1ZmYzN2U0NWIzOTVkODYxZDYiCisKK2luaGVyaXQgYXV0b3Rvb2xzIHBrZ2NvbmZpZworCityZXF1aXJlIGFsc2EtZnB1LmluYworRVhUUkFfT0VDT05GICs9ICIke0BnZXRfYWxzYV9mcHVfc2V0dGluZyhiYiwgZCl9ICIKKworRVhUUkFfT0VDT05GID0gIi0tZGlzYWJsZS1weXRob24iCisKK0VYVFJBX09FQ09ORl9hcHBlbmRfbGliYy11Y2xpYmMgPSAiIC0td2l0aC12ZXJzaW9uZWQ9bm8gIgorCitQQUNLQUdFUyA9KyAiYWxzYS1zZXJ2ZXIgbGliYXNvdW5kIGFsc2EtY29uZi1iYXNlIGFsc2EtY29uZiBhbHNhLWRvYyIKK0ZJTEVTXyR7UE59ICs9ICIke2xpYmRpcn0vJHtCUE59L3NtaXhlci8qLnNvIgorRklMRVNfJHtQTn0tZGV2ICs9ICIke2xpYmRpcn0vJHtCUE59L3NtaXhlci8qLmxhIgorRklMRVNfbGliYXNvdW5kID0gIiR7bGliZGlyfS9saWJhc291bmQuc28uKiIKK0ZJTEVTX2Fsc2Etc2VydmVyID0gIiR7YmluZGlyfS8qIgorRklMRVNfYWxzYS1jb25mID0gIiR7ZGF0YWRpcn0vYWxzYS8iCitGSUxFU19hbHNhLWNvbmYtYmFzZSA9ICJcCiske2RhdGFkaXJ9L2Fsc2EvYWxzYS5jb25mIFwKKyR7ZGF0YWRpcn0vYWxzYS9jYXJkcy9hbGlhc2VzLmNvbmYgXAorJHtkYXRhZGlyfS9hbHNhL3BjbS9kZWZhdWx0LmNvbmYgXAorJHtkYXRhZGlyfS9hbHNhL3BjbS9kbWl4LmNvbmYgXAorJHtkYXRhZGlyfS9hbHNhL3BjbS9kc25vb3AuY29uZiIKKworUkRFUEVORFNfbGliYXNvdW5kID0gImFsc2EtY29uZi1iYXNlIGFsc2EtY29uZiIKKyMgdXBncmFkZSBwYXRoCitSUFJPVklERVNfJHtQTn0tZGV2ID0gImFsc2EtZGV2IgorUlJFUExBQ0VTXyR7UE59LWRldiA9ICJhbHNhLWRldiIKK1JDT05GTElDVFNfJHtQTn0tZGV2ID0gImFsc2EtZGV2IgpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2Fsc2EvYWxzYS1wbHVnaW5zLzAwMDEtcHBoLWluY2x1ZGUtY29uZmlnLmgtZnJvbS1yYXRlX3NwZWV4cmF0ZS5jLnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2Fsc2EvYWxzYS1wbHVnaW5zLzAwMDEtcHBoLWluY2x1ZGUtY29uZmlnLmgtZnJvbS1yYXRlX3NwZWV4cmF0ZS5jLnBhdGNoCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4ZTViNmEyLi4wMDAwMDAwCi0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9hbHNhL2Fsc2EtcGx1Z2lucy8wMDAxLXBwaC1pbmNsdWRlLWNvbmZpZy5oLWZyb20tcmF0ZV9zcGVleHJhdGUuYy5wYXRjaAorKysgL2Rldi9udWxsCkBAIC0xLDM1ICswLDAgQEAKLUZyb20gNDM1MDMxNGM5NDE0ODk4MzNhOGJhYTkzMGUxNjUxMmU1NWY3MmExMyBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKLUZyb206IFRhbnUgS2Fza2luZW4gPHRhbnVrQGlraS5maT4KLURhdGU6IFdlZCwgMjcgSmFuIDIwMTYgMTM6MjI6MzggKzAyMDAKLVN1YmplY3Q6IFtQQVRDSF0gcHBoOiBpbmNsdWRlIGNvbmZpZy5oIGZyb20gcmF0ZV9zcGVleHJhdGUuYwotCi1GaXhlcyBjb21waWxhdGlvbiBhZ2FpbnN0IGxpYnNwZWV4ZHNwIDEuMnJjMy4KLQotcmF0ZV9zcGVleHJhdGUuYyBpbmNsdWRlcyBzcGVleF9yZXNhbXBsZXIuaCwgd2hpY2ggZGVwZW5kcyBvbiBjb25maWcuaAotYnkgcmVmZXJlbmNpbmcgdGhlIEhBVkVfU1BFRVhfU1BFRVhEU1BfVFlQRVNfSCBtYWNyby4gQUZBSUsgaXQncyBub3QKLWEgZ29vZCBpZGVhIHRvIGluY2x1ZGUgY29uZmlnLmggZnJvbSBoZWFkZXJzIChJIGRvbid0IGtub3cvcmVtZW1iZXIKLXdoeSwgdGhvdWdoKSwgd2hpY2ggaXMgd2h5IEkgaW5jbHVkZSBjb25maWcuaCBmcm9tIHJhdGVfc3BlZXhyYXRlLmMKLWluc3RlYWQgb2Ygc3BlZXhfcmVzYW1wbGVyLmguCi0KLVVwc3RyZWFtLVN0YXR1czogQWNjZXB0ZWQgW2V4cGVjdGVkIGluIDEuMS4xXQotCi1TaWduZWQtb2ZmLWJ5OiBUYW51IEthc2tpbmVuIDx0YW51a0Bpa2kuZmk+Ci0tLS0KLSBwcGgvcmF0ZV9zcGVleHJhdGUuYyB8IDEgKwotIDEgZmlsZSBjaGFuZ2VkLCAxIGluc2VydGlvbigrKQotCi1kaWZmIC0tZ2l0IGEvcHBoL3JhdGVfc3BlZXhyYXRlLmMgYi9wcGgvcmF0ZV9zcGVleHJhdGUuYwotaW5kZXggMGExMzI1Yy4uOGZjNGNlZiAxMDA2NDQKLS0tLSBhL3BwaC9yYXRlX3NwZWV4cmF0ZS5jCi0rKysgYi9wcGgvcmF0ZV9zcGVleHJhdGUuYwotQEAgLTI4LDYgKzI4LDcgQEAKLSAgICBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotIAotKyNpbmNsdWRlICJjb25maWcuaCIKLSAjaW5jbHVkZSA8c3RkaW8uaD4KLSAjaW5jbHVkZSA8YWxzYS9hc291bmRsaWIuaD4KLSAjaW5jbHVkZSA8YWxzYS9wY21fcmF0ZS5oPgotLS0gCi0yLjcuMC5yYzMKLQpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2Fsc2EvYWxzYS1wbHVnaW5zXzEuMS4wLmJiIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2Fsc2EvYWxzYS1wbHVnaW5zXzEuMS4wLmJiCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmZWM2NTc1Li4wMDAwMDAwCi0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9hbHNhL2Fsc2EtcGx1Z2luc18xLjEuMC5iYgorKysgL2Rldi9udWxsCkBAIC0xLDEwNSArMCwwIEBACi1TVU1NQVJZID0gIkFMU0EgUGx1Z2lucyIKLUhPTUVQQUdFID0gImh0dHA6Ly9hbHNhLXByb2plY3Qub3JnIgotU0VDVElPTiA9ICJtdWx0aW1lZGlhIgotCi0jIFRoZSBwcmltYXJ5IGxpY2Vuc2Ugb2YgYWxzYS1wbHVnaW5zIGlzIExHUEx2Mi4xLgotIwotIyBtNC9hdHRyaWJ1dGVzLm00IGlzIGxpY2Vuc2VkIHVuZGVyIEdQTHYyKy4gbTQvYXR0cmlidXRlcy5tNCBpcyBwYXJ0IG9mIHRoZQotIyBidWlsZCBzeXN0ZW0sIGFuZCBkb2Vzbid0IGFmZmVjdCB0aGUgbGljZW5zaW5nIG9mIHRoZSBidWlsZCByZXN1bHQuCi0jCi0jIFRoZSBzYW1wbGVyYXRlIHBsdWdpbiBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciBHUEx2MisgdG8gYmUgY29uc2lzdGVudAotIyB3aXRoIHRoZSBsaWJzYW1wbGVyYXRlIGxpY2Vuc2UuIEhvd2V2ZXIsIGlmIHRoZSBsaWNlbnNlZSBoYXMgYSBjb21tZXJjaWFsCi0jIGxpY2Vuc2UgZm9yIGxpYnNhbXBsZXJhdGUsIHRoZSBzYW1wbGVyYXRlIHBsdWdpbiBtYXkgYmUgdXNlZCB1bmRlciB0aGUgdGVybXMKLSMgb2YgTEdQTHYyLjEgbGlrZSB0aGUgcmVzdCBvZiB0aGUgcGx1Z2lucy4KLUxJQ0VOU0UgPSAiTEdQTHYyLjEgJiBHUEx2MisiCi1MSUNfRklMRVNfQ0hLU1VNID0gIlwKLSAgICAgICAgZmlsZTovL0NPUFlJTkc7bWQ1PTdmYmMzMzgzMDlhYzM4ZmVmY2Q2NGIwNGJiOTAzZTM0IFwKLSAgICAgICAgZmlsZTovL0NPUFlJTkcuR1BMO21kNT05NGQ1NWQ1MTJhOWJhMzZjYWE5YjdkZjA3OWJhZTE5ZiBcCi0gICAgICAgIGZpbGU6Ly9tNC9hdHRyaWJ1dGVzLm00O2VuZGxpbmU9MzM7bWQ1PWIyNTk1OGRhNDRjMDIyMzFlMzY0MWYxYmNjZWY1M2ViIFwKLSAgICAgICAgZmlsZTovL3JhdGUvcmF0ZV9zYW1wbGVyYXRlLmM7ZW5kbGluZT0zNTttZDU9ZmQ3N2JjZTg1ZjRhMzM4YzBlOGFiMTg0MzBiNjlmYWUgXAotIgotCi1TUkNfVVJJID0gIlwKLSAgICAgICAgZnRwOi8vZnRwLmFsc2EtcHJvamVjdC5vcmcvcHViL3BsdWdpbnMvJHtCUH0udGFyLmJ6MiBcCi0gICAgICAgIGZpbGU6Ly8wMDAxLXBwaC1pbmNsdWRlLWNvbmZpZy5oLWZyb20tcmF0ZV9zcGVleHJhdGUuYy5wYXRjaCBcCi0iCi1TUkNfVVJJW21kNXN1bV0gPSAiYjEyM2U0MmVkODgxYjlhZGJjOTllNDA0MGYyNTdjMzkiCi1TUkNfVVJJW3NoYTI1NnN1bV0gPSAiM2I4M2MzMjk5NTNiZWY5OWY1ZmUyNWFlMDRlYzRhNDU1ZmU2NTE0OTM5ZjNiNDVhNTMyMTk2NjY1MmIyYzllZSIKLQotREVQRU5EUyArPSAiYWxzYS1saWIiCi0KLWluaGVyaXQgYXV0b3Rvb2xzIHBrZ2NvbmZpZwotCi1QQUNLQUdFQ09ORklHID8/PSAiXAotICAgICAgICBzYW1wbGVyYXRlIFwKLSAgICAgICAgc3BlZXhkc3AgXAotICAgICAgICAke0BiYi51dGlscy5jb250YWlucygnRElTVFJPX0ZFQVRVUkVTJywgJ3B1bHNlYXVkaW8nLCAncHVsc2VhdWRpbycsICcnLCBkKX0gXAotIgotUEFDS0FHRUNPTkZJR1thdmNvZGVjXSA9ICItLWVuYWJsZS1hdmNvZGVjLC0tZGlzYWJsZS1hdmNvZGVjLGxpYmF2IgotUEFDS0FHRUNPTkZJR1tqYWNrXSA9ICItLWVuYWJsZS1qYWNrLC0tZGlzYWJsZS1qYWNrLGphY2siCi1QQUNLQUdFQ09ORklHW21hZW1vLXBsdWdpbl0gPSAiLS1lbmFibGUtbWFlbW8tcGx1Z2luLC0tZGlzYWJsZS1tYWVtby1wbHVnaW4iCi1QQUNLQUdFQ09ORklHW21hZW1vLXJlc291cmNlLW1hbmFnZXJdID0gIi0tZW5hYmxlLW1hZW1vLXJlc291cmNlLW1hbmFnZXIsLS1kaXNhYmxlLW1hZW1vLXJlc291cmNlLW1hbmFnZXIsZGJ1cyIKLVBBQ0tBR0VDT05GSUdbcHVsc2VhdWRpb10gPSAiLS1lbmFibGUtcHVsc2VhdWRpbywtLWRpc2FibGUtcHVsc2VhdWRpbyxwdWxzZWF1ZGlvIgotUEFDS0FHRUNPTkZJR1tzYW1wbGVyYXRlXSA9ICItLWVuYWJsZS1zYW1wbGVyYXRlLC0tZGlzYWJsZS1zYW1wbGVyYXRlLGxpYnNhbXBsZXJhdGUwIgotUEFDS0FHRUNPTkZJR1tzcGVleGRzcF0gPSAiLS13aXRoLXNwZWV4PWxpYiwtLXdpdGgtc3BlZXg9bm8sc3BlZXhkc3AiCi0KLVBBQ0tBR0VTICs9ICIke0BiYi51dGlscy5jb250YWlucygnUEFDS0FHRUNPTkZJRycsICdwdWxzZWF1ZGlvJywgJ2Fsc2EtcGx1Z2lucy1wdWxzZWF1ZGlvLWNvbmYnLCAnJywgZCl9IgotCi1QQUNLQUdFU19EWU5BTUlDID0gIl5saWJhc291bmQtbW9kdWxlLS4qIgotCi0jIFRoZSBhbHNhLXBsdWdpbnMgcGFja2FnZSBkb2Vzbid0IGl0c2VsZiBjb250YWluIGFueXRoaW5nLCBpdCBqdXN0IGRlcGVuZHMgb24KLSMgYWxsIGJ1aWx0IHBsdWdpbnMuCi1BTExPV19FTVBUWV8ke1BOfSA9ICIxIgotCi1kb19pbnN0YWxsX2FwcGVuZCgpIHsKLQlybSAke0R9JHtsaWJkaXJ9L2Fsc2EtbGliLyoubGEKLQotCSMgV2UgdXNlIHRoZSBleGFtcGxlIGFzIGlzLCBzbyBqdXN0IGRyb3AgdGhlIC5leGFtcGxlIHN1ZmZpeC4KLQlpZiBbICIke0BiYi51dGlscy5jb250YWlucygnUEFDS0FHRUNPTkZJRycsICdwdWxzZWF1ZGlvJywgJ3llcycsICdubycsIGQpfSIgPSAieWVzIiBdOyB0aGVuCi0JCW12ICR7RH0ke2RhdGFkaXJ9L2Fsc2EvYWxzYS5jb25mLmQvOTktcHVsc2VhdWRpby1kZWZhdWx0LmNvbmYuZXhhbXBsZSAke0R9JHtkYXRhZGlyfS9hbHNhL2Fsc2EuY29uZi5kLzk5LXB1bHNlYXVkaW8tZGVmYXVsdC5jb25mCi0JZmkKLX0KLQotcHl0aG9uIHBvcHVsYXRlX3BhY2thZ2VzX3ByZXBlbmQoKSB7Ci0gICAgcGx1Z2luZGlyID0gYmIuZGF0YS5leHBhbmQoJyR7bGliZGlyfS9hbHNhLWxpYi8nLCBkKQotICAgIHBhY2thZ2VzID0gIiAiLmpvaW4oZG9fc3BsaXRfcGFja2FnZXMoZCwgcGx1Z2luZGlyLCAnXmxpYmFzb3VuZF9tb2R1bGVfKC4qKVwuc28kJywgJ2xpYmFzb3VuZC1tb2R1bGUtJXMnLCAnQWxzYSBwbHVnaW4gZm9yICVzJywgZXh0cmFfZGVwZW5kcz0nJykpCi0gICAgZC5zZXRWYXIoIlJERVBFTkRTX2Fsc2EtcGx1Z2lucyIsIHBhY2thZ2VzKQotfQotCi0jIFRoZSByYXRlIHBsdWdpbnMgY3JlYXRlIHNvbWUgc3ltbGlua3MuIEZvciBleGFtcGxlLCB0aGUgc2FtcGxlcmF0ZSBwbHVnaW4KLSMgY3JlYXRlcyB0aGVzZSBsaW5rcyB0byB0aGUgbWFpbiBwbHVnaW4gZmlsZToKLSMKLSMgICBsaWJhc291bmRfbW9kdWxlX3JhdGVfc2FtcGxlcmF0ZV9iZXN0LnNvCi0jICAgbGliYXNvdW5kX21vZHVsZV9yYXRlX3NhbXBsZXJhdGVfbGluZWFyLnNvCi0jICAgbGliYXNvdW5kX21vZHVsZV9yYXRlX3NhbXBsZXJhdGVfbWVkaXVtLnNvCi0jICAgbGliYXNvdW5kX21vZHVsZV9yYXRlX3NhbXBsZXJhdGVfb3JkZXIuc28KLSMKLSMgVGhlIG90aGVyIHJhdGUgcGx1Z2lucyBjcmVhdGUgc2ltaWxhciBsaW5rcy4gV2UgaGF2ZSB0byBhZGQgdGhlIGxpbmtzIHRvCi0jIEZJTEVTIG1hbnVhbGx5LCBiZWNhdXNlIGRvX3NwbGl0X3BhY2thZ2VzKCkgc2tpcHMgdGhlIGxpbmtzICh3aGljaCBpcyBnb29kLAotIyBiZWNhdXNlIHdlIHdvdWxkbid0IHdhbnQgZG9fc3BsaXRfcGFja2FnZXMoKSB0byBjcmVhdGUgc2VwYXJhdGUgcGFja2FnZXMgZm9yCi0jIHRoZSBzeW1saW5rcykuCi0jCi0jIFRoZSBzeW1saW5rcyBjYXVzZSBRQSBlcnJvcnMsIGJlY2F1c2UgdXN1YWxseSBpdCdzIGEgYnVnIGlmIGEgbm9uCi0jIC1kZXYvLWRiZy8tbmF0aXZlc2RrIHBhY2thZ2UgY29udGFpbnMgbGlua3MgdG8gLnNvIGZpbGVzLCBidXQgaW4gdGhpcyBjYXNlCi0jIHRoZSBlcnJvcnMgYXJlIGZhbHNlIHBvc2l0aXZlcywgc28gd2UgZGlzYWJsZSB0aGUgUUEgY2hlY2tzLgotRklMRVNfJHtNTFBSRUZJWH1saWJhc291bmQtbW9kdWxlLXJhdGUtbGF2Y3JhdGUgKz0gIiR7bGliZGlyfS9hbHNhLWxpYi8qcmF0ZV9sYXZjcmF0ZV8qLnNvIgotRklMRVNfJHtNTFBSRUZJWH1saWJhc291bmQtbW9kdWxlLXJhdGUtc2FtcGxlcmF0ZSArPSAiJHtsaWJkaXJ9L2Fsc2EtbGliLypyYXRlX3NhbXBsZXJhdGVfKi5zbyIKLUZJTEVTXyR7TUxQUkVGSVh9bGliYXNvdW5kLW1vZHVsZS1yYXRlLXNwZWV4cmF0ZSArPSAiJHtsaWJkaXJ9L2Fsc2EtbGliLypyYXRlX3NwZWV4cmF0ZV8qLnNvIgotSU5TQU5FX1NLSVBfJHtNTFBSRUZJWH1saWJhc291bmQtbW9kdWxlLXJhdGUtbGF2Y3JhdGUgPSAiZGV2LXNvIgotSU5TQU5FX1NLSVBfJHtNTFBSRUZJWH1saWJhc291bmQtbW9kdWxlLXJhdGUtc2FtcGxlcmF0ZSA9ICJkZXYtc28iCi1JTlNBTkVfU0tJUF8ke01MUFJFRklYfWxpYmFzb3VuZC1tb2R1bGUtcmF0ZS1zcGVleHJhdGUgPSAiZGV2LXNvIgotCi0jIDUwLXB1bHNlYXVkaW8uY29uZiBkZWZpbmVzIGEgZGV2aWNlIG5hbWVkICJwdWxzZSIgdGhhdCBhcHBsaWNhdGlvbnMgY2FuIHVzZQotIyBpZiB0aGV5IGV4cGxpY2l0bHkgd2FudCB0byB1c2UgdGhlIFB1bHNlQXVkaW8gcGx1Z2luLgotIyA5OS1wdWxzZWF1ZGlvLWRlZmF1bHQuY29uZiBjb25maWd1cmVzIHRoZSAiZGVmYXVsdCIgZGV2aWNlIHRvIHVzZSB0aGUKLSMgUHVsc2VBdWRpbyBwbHVnaW4uCi1GSUxFU18ke1BOfS1wdWxzZWF1ZGlvLWNvbmYgKz0gIlwKLSAgICAgICAgJHtkYXRhZGlyfS9hbHNhL2Fsc2EuY29uZi5kLzUwLXB1bHNlYXVkaW8uY29uZiBcCi0gICAgICAgICR7ZGF0YWRpcn0vYWxzYS9hbHNhLmNvbmYuZC85OS1wdWxzZWF1ZGlvLWRlZmF1bHQuY29uZiBcCi0iCi0KLVJERVBFTkRTXyR7UE59LXB1bHNlYXVkaW8tY29uZiArPSAiXAotICAgICAgICBsaWJhc291bmQtbW9kdWxlLWNvbmYtcHVsc2UgXAotICAgICAgICBsaWJhc291bmQtbW9kdWxlLWN0bC1wdWxzZSBcCi0gICAgICAgIGxpYmFzb3VuZC1tb2R1bGUtcGNtLXB1bHNlIFwKLSIKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9hbHNhL2Fsc2EtcGx1Z2luc18xLjEuMS5iYiBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9hbHNhL2Fsc2EtcGx1Z2luc18xLjEuMS5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jOTVlYTU0Ci0tLSAvZGV2L251bGwKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2Fsc2EvYWxzYS1wbHVnaW5zXzEuMS4xLmJiCkBAIC0wLDAgKzEsMTAzIEBACitTVU1NQVJZID0gIkFMU0EgUGx1Z2lucyIKK0hPTUVQQUdFID0gImh0dHA6Ly9hbHNhLXByb2plY3Qub3JnIgorQlVHVFJBQ0tFUiA9ICJodHRwOi8vYWxzYS1wcm9qZWN0Lm9yZy9tYWluL2luZGV4LnBocC9CdWdfVHJhY2tpbmciCitTRUNUSU9OID0gIm11bHRpbWVkaWEiCisKKyMgVGhlIHByaW1hcnkgbGljZW5zZSBvZiBhbHNhLXBsdWdpbnMgaXMgTEdQTHYyLjEuCisjCisjIG00L2F0dHJpYnV0ZXMubTQgaXMgbGljZW5zZWQgdW5kZXIgR1BMdjIrLiBtNC9hdHRyaWJ1dGVzLm00IGlzIHBhcnQgb2YgdGhlCisjIGJ1aWxkIHN5c3RlbSwgYW5kIGRvZXNuJ3QgYWZmZWN0IHRoZSBsaWNlbnNpbmcgb2YgdGhlIGJ1aWxkIHJlc3VsdC4KKyMKKyMgVGhlIHNhbXBsZXJhdGUgcGx1Z2luIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIEdQTHYyKyB0byBiZSBjb25zaXN0ZW50CisjIHdpdGggdGhlIGxpYnNhbXBsZXJhdGUgbGljZW5zZS4gSG93ZXZlciwgaWYgdGhlIGxpY2Vuc2VlIGhhcyBhIGNvbW1lcmNpYWwKKyMgbGljZW5zZSBmb3IgbGlic2FtcGxlcmF0ZSwgdGhlIHNhbXBsZXJhdGUgcGx1Z2luIG1heSBiZSB1c2VkIHVuZGVyIHRoZSB0ZXJtcworIyBvZiBMR1BMdjIuMSBsaWtlIHRoZSByZXN0IG9mIHRoZSBwbHVnaW5zLgorTElDRU5TRSA9ICJMR1BMdjIuMSAmIEdQTHYyKyIKK0xJQ19GSUxFU19DSEtTVU0gPSAiXAorICAgICAgICBmaWxlOi8vQ09QWUlORzttZDU9N2ZiYzMzODMwOWFjMzhmZWZjZDY0YjA0YmI5MDNlMzQgXAorICAgICAgICBmaWxlOi8vQ09QWUlORy5HUEw7bWQ1PTk0ZDU1ZDUxMmE5YmEzNmNhYTliN2RmMDc5YmFlMTlmIFwKKyAgICAgICAgZmlsZTovL200L2F0dHJpYnV0ZXMubTQ7ZW5kbGluZT0zMzttZDU9YjI1OTU4ZGE0NGMwMjIzMWUzNjQxZjFiY2NlZjUzZWIgXAorICAgICAgICBmaWxlOi8vcmF0ZS9yYXRlX3NhbXBsZXJhdGUuYztlbmRsaW5lPTM1O21kNT1mZDc3YmNlODVmNGEzMzhjMGU4YWIxODQzMGI2OWZhZSBcCisiCisKK1NSQ19VUkkgPSAiZnRwOi8vZnRwLmFsc2EtcHJvamVjdC5vcmcvcHViL3BsdWdpbnMvJHtCUH0udGFyLmJ6MiIKK1NSQ19VUklbbWQ1c3VtXSA9ICI2OWY5ZjNlMmRlM2M5N2ZjNzFkNDk2ZTkxZTI3MWZlNSIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICI4ZWE0ZDFlMDgyYzM2NTI4YTg5NmEyNTgxZTVlYjYyZDRkYzI2ODMyMzhlMzUzMDUwZDBkNjI0ZTY1ZjkwMWYxIgorCitERVBFTkRTICs9ICJhbHNhLWxpYiIKKworaW5oZXJpdCBhdXRvdG9vbHMgcGtnY29uZmlnCisKK1BBQ0tBR0VDT05GSUcgPz89ICJcCisgICAgICAgIHNhbXBsZXJhdGUgXAorICAgICAgICBzcGVleGRzcCBcCisgICAgICAgICR7QGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCAncHVsc2VhdWRpbycsICdwdWxzZWF1ZGlvJywgJycsIGQpfSBcCisiCitQQUNLQUdFQ09ORklHW2F2Y29kZWNdID0gIi0tZW5hYmxlLWF2Y29kZWMsLS1kaXNhYmxlLWF2Y29kZWMsbGliYXYiCitQQUNLQUdFQ09ORklHW2phY2tdID0gIi0tZW5hYmxlLWphY2ssLS1kaXNhYmxlLWphY2ssamFjayIKK1BBQ0tBR0VDT05GSUdbbWFlbW8tcGx1Z2luXSA9ICItLWVuYWJsZS1tYWVtby1wbHVnaW4sLS1kaXNhYmxlLW1hZW1vLXBsdWdpbiIKK1BBQ0tBR0VDT05GSUdbbWFlbW8tcmVzb3VyY2UtbWFuYWdlcl0gPSAiLS1lbmFibGUtbWFlbW8tcmVzb3VyY2UtbWFuYWdlciwtLWRpc2FibGUtbWFlbW8tcmVzb3VyY2UtbWFuYWdlcixkYnVzIgorUEFDS0FHRUNPTkZJR1twdWxzZWF1ZGlvXSA9ICItLWVuYWJsZS1wdWxzZWF1ZGlvLC0tZGlzYWJsZS1wdWxzZWF1ZGlvLHB1bHNlYXVkaW8iCitQQUNLQUdFQ09ORklHW3NhbXBsZXJhdGVdID0gIi0tZW5hYmxlLXNhbXBsZXJhdGUsLS1kaXNhYmxlLXNhbXBsZXJhdGUsbGlic2FtcGxlcmF0ZTAiCitQQUNLQUdFQ09ORklHW3NwZWV4ZHNwXSA9ICItLXdpdGgtc3BlZXg9bGliLC0td2l0aC1zcGVleD1ubyxzcGVleGRzcCIKKworUEFDS0FHRVMgKz0gIiR7QGJiLnV0aWxzLmNvbnRhaW5zKCdQQUNLQUdFQ09ORklHJywgJ3B1bHNlYXVkaW8nLCAnYWxzYS1wbHVnaW5zLXB1bHNlYXVkaW8tY29uZicsICcnLCBkKX0iCisKK1BBQ0tBR0VTX0RZTkFNSUMgPSAiXmxpYmFzb3VuZC1tb2R1bGUtLioiCisKKyMgVGhlIGFsc2EtcGx1Z2lucyBwYWNrYWdlIGRvZXNuJ3QgaXRzZWxmIGNvbnRhaW4gYW55dGhpbmcsIGl0IGp1c3QgZGVwZW5kcyBvbgorIyBhbGwgYnVpbHQgcGx1Z2lucy4KK0FMTE9XX0VNUFRZXyR7UE59ID0gIjEiCisKK2RvX2luc3RhbGxfYXBwZW5kKCkgeworCXJtICR7RH0ke2xpYmRpcn0vYWxzYS1saWIvKi5sYQorCisJIyBXZSB1c2UgdGhlIGV4YW1wbGUgYXMgaXMsIHNvIGp1c3QgZHJvcCB0aGUgLmV4YW1wbGUgc3VmZml4LgorCWlmIFsgIiR7QGJiLnV0aWxzLmNvbnRhaW5zKCdQQUNLQUdFQ09ORklHJywgJ3B1bHNlYXVkaW8nLCAneWVzJywgJ25vJywgZCl9IiA9ICJ5ZXMiIF07IHRoZW4KKwkJbXYgJHtEfSR7ZGF0YWRpcn0vYWxzYS9hbHNhLmNvbmYuZC85OS1wdWxzZWF1ZGlvLWRlZmF1bHQuY29uZi5leGFtcGxlICR7RH0ke2RhdGFkaXJ9L2Fsc2EvYWxzYS5jb25mLmQvOTktcHVsc2VhdWRpby1kZWZhdWx0LmNvbmYKKwlmaQorfQorCitweXRob24gcG9wdWxhdGVfcGFja2FnZXNfcHJlcGVuZCgpIHsKKyAgICBwbHVnaW5kaXIgPSBiYi5kYXRhLmV4cGFuZCgnJHtsaWJkaXJ9L2Fsc2EtbGliLycsIGQpCisgICAgcGFja2FnZXMgPSAiICIuam9pbihkb19zcGxpdF9wYWNrYWdlcyhkLCBwbHVnaW5kaXIsICdebGliYXNvdW5kX21vZHVsZV8oLiopXC5zbyQnLCAnbGliYXNvdW5kLW1vZHVsZS0lcycsICdBbHNhIHBsdWdpbiBmb3IgJXMnLCBleHRyYV9kZXBlbmRzPScnKSkKKyAgICBkLnNldFZhcigiUkRFUEVORFNfYWxzYS1wbHVnaW5zIiwgcGFja2FnZXMpCit9CisKKyMgVGhlIHJhdGUgcGx1Z2lucyBjcmVhdGUgc29tZSBzeW1saW5rcy4gRm9yIGV4YW1wbGUsIHRoZSBzYW1wbGVyYXRlIHBsdWdpbgorIyBjcmVhdGVzIHRoZXNlIGxpbmtzIHRvIHRoZSBtYWluIHBsdWdpbiBmaWxlOgorIworIyAgIGxpYmFzb3VuZF9tb2R1bGVfcmF0ZV9zYW1wbGVyYXRlX2Jlc3Quc28KKyMgICBsaWJhc291bmRfbW9kdWxlX3JhdGVfc2FtcGxlcmF0ZV9saW5lYXIuc28KKyMgICBsaWJhc291bmRfbW9kdWxlX3JhdGVfc2FtcGxlcmF0ZV9tZWRpdW0uc28KKyMgICBsaWJhc291bmRfbW9kdWxlX3JhdGVfc2FtcGxlcmF0ZV9vcmRlci5zbworIworIyBUaGUgb3RoZXIgcmF0ZSBwbHVnaW5zIGNyZWF0ZSBzaW1pbGFyIGxpbmtzLiBXZSBoYXZlIHRvIGFkZCB0aGUgbGlua3MgdG8KKyMgRklMRVMgbWFudWFsbHksIGJlY2F1c2UgZG9fc3BsaXRfcGFja2FnZXMoKSBza2lwcyB0aGUgbGlua3MgKHdoaWNoIGlzIGdvb2QsCisjIGJlY2F1c2Ugd2Ugd291bGRuJ3Qgd2FudCBkb19zcGxpdF9wYWNrYWdlcygpIHRvIGNyZWF0ZSBzZXBhcmF0ZSBwYWNrYWdlcyBmb3IKKyMgdGhlIHN5bWxpbmtzKS4KKyMKKyMgVGhlIHN5bWxpbmtzIGNhdXNlIFFBIGVycm9ycywgYmVjYXVzZSB1c3VhbGx5IGl0J3MgYSBidWcgaWYgYSBub24KKyMgLWRldi8tZGJnLy1uYXRpdmVzZGsgcGFja2FnZSBjb250YWlucyBsaW5rcyB0byAuc28gZmlsZXMsIGJ1dCBpbiB0aGlzIGNhc2UKKyMgdGhlIGVycm9ycyBhcmUgZmFsc2UgcG9zaXRpdmVzLCBzbyB3ZSBkaXNhYmxlIHRoZSBRQSBjaGVja3MuCitGSUxFU18ke01MUFJFRklYfWxpYmFzb3VuZC1tb2R1bGUtcmF0ZS1sYXZjcmF0ZSArPSAiJHtsaWJkaXJ9L2Fsc2EtbGliLypyYXRlX2xhdmNyYXRlXyouc28iCitGSUxFU18ke01MUFJFRklYfWxpYmFzb3VuZC1tb2R1bGUtcmF0ZS1zYW1wbGVyYXRlICs9ICIke2xpYmRpcn0vYWxzYS1saWIvKnJhdGVfc2FtcGxlcmF0ZV8qLnNvIgorRklMRVNfJHtNTFBSRUZJWH1saWJhc291bmQtbW9kdWxlLXJhdGUtc3BlZXhyYXRlICs9ICIke2xpYmRpcn0vYWxzYS1saWIvKnJhdGVfc3BlZXhyYXRlXyouc28iCitJTlNBTkVfU0tJUF8ke01MUFJFRklYfWxpYmFzb3VuZC1tb2R1bGUtcmF0ZS1sYXZjcmF0ZSA9ICJkZXYtc28iCitJTlNBTkVfU0tJUF8ke01MUFJFRklYfWxpYmFzb3VuZC1tb2R1bGUtcmF0ZS1zYW1wbGVyYXRlID0gImRldi1zbyIKK0lOU0FORV9TS0lQXyR7TUxQUkVGSVh9bGliYXNvdW5kLW1vZHVsZS1yYXRlLXNwZWV4cmF0ZSA9ICJkZXYtc28iCisKKyMgNTAtcHVsc2VhdWRpby5jb25mIGRlZmluZXMgYSBkZXZpY2UgbmFtZWQgInB1bHNlIiB0aGF0IGFwcGxpY2F0aW9ucyBjYW4gdXNlCisjIGlmIHRoZXkgZXhwbGljaXRseSB3YW50IHRvIHVzZSB0aGUgUHVsc2VBdWRpbyBwbHVnaW4uCisjIDk5LXB1bHNlYXVkaW8tZGVmYXVsdC5jb25mIGNvbmZpZ3VyZXMgdGhlICJkZWZhdWx0IiBkZXZpY2UgdG8gdXNlIHRoZQorIyBQdWxzZUF1ZGlvIHBsdWdpbi4KK0ZJTEVTXyR7UE59LXB1bHNlYXVkaW8tY29uZiArPSAiXAorICAgICAgICAke2RhdGFkaXJ9L2Fsc2EvYWxzYS5jb25mLmQvNTAtcHVsc2VhdWRpby5jb25mIFwKKyAgICAgICAgJHtkYXRhZGlyfS9hbHNhL2Fsc2EuY29uZi5kLzk5LXB1bHNlYXVkaW8tZGVmYXVsdC5jb25mIFwKKyIKKworUkRFUEVORFNfJHtQTn0tcHVsc2VhdWRpby1jb25mICs9ICJcCisgICAgICAgIGxpYmFzb3VuZC1tb2R1bGUtY29uZi1wdWxzZSBcCisgICAgICAgIGxpYmFzb3VuZC1tb2R1bGUtY3RsLXB1bHNlIFwKKyAgICAgICAgbGliYXNvdW5kLW1vZHVsZS1wY20tcHVsc2UgXAorIgpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2Fsc2EvYWxzYS10b29scy8wMDAxLUN1czQyOE1pZGktRXhwbGljaXRseS1jYXN0LWNvbnN0YW50LXRvLWNoYXItdHlwZS5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9hbHNhL2Fsc2EtdG9vbHMvMDAwMS1DdXM0MjhNaWRpLUV4cGxpY2l0bHktY2FzdC1jb25zdGFudC10by1jaGFyLXR5cGUucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmY5NWNhYwotLS0gL2Rldi9udWxsCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9hbHNhL2Fsc2EtdG9vbHMvMDAwMS1DdXM0MjhNaWRpLUV4cGxpY2l0bHktY2FzdC1jb25zdGFudC10by1jaGFyLXR5cGUucGF0Y2gKQEAgLTAsMCArMSw3NSBAQAorRnJvbSAxY2MwYWE0ZGJkM2M3ZjEyNjc4MDllMGUxY2E1N2Q0NmY0ODAzYmZkIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KK0RhdGU6IFN1biwgMTcgQXByIDIwMTYgMjM6MjU6MTggKzAwMDAKK1N1YmplY3Q6IFtQQVRDSF0gQ3VzNDI4TWlkaTogRXhwbGljaXRseSBjYXN0IGNvbnN0YW50IHRvIGNoYXIgdHlwZQorCitUaGlzIGlzIGZsYWdnZWQgYnkgZ2NjNgorQ3VzNDI4TWlkaS5jYzo4MzoxOiBlcnJvcjogbmFycm93aW5nIGNvbnZlcnNpb24gb2YgJy0xJyBmcm9tICdpbnQnIHRvICdjaGFyJyBpbnNpZGUgeyB9IFstV25hcnJvd2luZ10KKworU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KKy0tLQorVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKKyB1czQyOGNvbnRyb2wvQ3VzNDI4TWlkaS5jYyB8IDMwICsrKysrKysrKysrKysrKy0tLS0tLS0tLS0tLS0tLQorIDEgZmlsZSBjaGFuZ2VkLCAxNSBpbnNlcnRpb25zKCspLCAxNSBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL3VzNDI4Y29udHJvbC9DdXM0MjhNaWRpLmNjIGIvdXM0Mjhjb250cm9sL0N1czQyOE1pZGkuY2MKK2luZGV4IGI5ZTY3ODMuLmJlZjdiYjEgMTAwNjQ0CistLS0gYS91czQyOGNvbnRyb2wvQ3VzNDI4TWlkaS5jYworKysrIGIvdXM0Mjhjb250cm9sL0N1czQyOE1pZGkuY2MKK0BAIC0zMiwyMiArMzIsMjIgQEAgY2hhciBDdXM0MjhNaWRpOjpLbm9iUGFyYW1bXSA9IHsKKyAJMHgyQSwKKyAJMHgyOSwKKyAJMHgyOCwKKy0JLTEsCisrCXN0YXRpY19jYXN0PGNoYXI+KC0xKSwKKyAJMHgxMCwKKyAJMHgxMSwKKyAJMHgxOCwKKyAJMHgxOSwKKyAJMHgxQSwKKy0JLTEsCistCS0xLAorLQktMSwKKy0JLTEsCisrCXN0YXRpY19jYXN0PGNoYXI+KC0xKSwKKysJc3RhdGljX2Nhc3Q8Y2hhcj4oLTEpLAorKwlzdGF0aWNfY2FzdDxjaGFyPigtMSksCisrCXN0YXRpY19jYXN0PGNoYXI+KC0xKSwKKyAJMHgyQywKKyAJMHgyRCwKKyAJMHgyRSwKKyAJMHgyRiwKKy0JLTEsCistCS0xLAorKwlzdGF0aWNfY2FzdDxjaGFyPigtMSksCisrCXN0YXRpY19jYXN0PGNoYXI+KC0xKSwKKyAJMHgyMCwKKyAJMHgyMSwKKyAJMHgyMiwKK0BAIC02NCwxNCArNjQsMTQgQEAgY2hhciBDdXM0MjhNaWRpOjpLbm9iUGFyYW1bXSA9IHsKKyAJNSwKKyAJNiwKKyAJNywKKy0JLTEsCistCS0xLAorLQktMSwKKy0JLTEsCistCS0xLAorLQktMSwKKy0JLTEsCistCS0xLAorKwlzdGF0aWNfY2FzdDxjaGFyPigtMSksCisrCXN0YXRpY19jYXN0PGNoYXI+KC0xKSwKKysJc3RhdGljX2Nhc3Q8Y2hhcj4oLTEpLAorKwlzdGF0aWNfY2FzdDxjaGFyPigtMSksCisrCXN0YXRpY19jYXN0PGNoYXI+KC0xKSwKKysJc3RhdGljX2Nhc3Q8Y2hhcj4oLTEpLAorKwlzdGF0aWNfY2FzdDxjaGFyPigtMSksCisrCXN0YXRpY19jYXN0PGNoYXI+KC0xKSwKKyAJMHgzMCwKKyAJMHgzMSwKKyAJMHgzMiwKKy0tIAorMS45LjEKKwpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2Fsc2EvYWxzYS10b29sc18xLjEuMC5iYiBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9hbHNhL2Fsc2EtdG9vbHNfMS4xLjAuYmIKaW5kZXggOWU2MzNmMS4uOGQ0YTE0NiAxMDA2NDQKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2Fsc2EvYWxzYS10b29sc18xLjEuMC5iYgorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvYWxzYS9hbHNhLXRvb2xzXzEuMS4wLmJiCkBAIC0xLDYgKzEsNiBAQAogU1VNTUFSWSA9ICJBZHZhbmNlZCB0b29scyBmb3IgY2VydGFpbiBBTFNBIHNvdW5kIGNhcmQgZHJpdmVycyIKIEhPTUVQQUdFID0gImh0dHA6Ly93d3cuYWxzYS1wcm9qZWN0Lm9yZyIKLUJVR1RSQUNLRVIgPSAiaHR0cHM6Ly9idWd0cmFjay5hbHNhLXByb2plY3Qub3JnL2Fsc2EtYnVnL2xvZ2luX3BhZ2UucGhwIgorQlVHVFJBQ0tFUiA9ICJodHRwOi8vYWxzYS1wcm9qZWN0Lm9yZy9tYWluL2luZGV4LnBocC9CdWdfVHJhY2tpbmciCiBTRUNUSU9OID0gImNvbnNvbGUvdXRpbHMiCiBMSUNFTlNFID0gIkdQTHYyICYgTEdQTHYyKyIKIERFUEVORFMgPSAiYWxzYS1saWIgbmN1cnNlcyBnbGliLTIuMCIKQEAgLTEwLDExICsxMCwxMSBAQAogCiBTUkNfVVJJID0gImZ0cDovL2Z0cC5hbHNhLXByb2plY3Qub3JnL3B1Yi90b29scy8ke0JQfS50YXIuYnoyIFwKICAgICAgICAgICAgZmlsZTovL2F1dG90b29scy5wYXRjaCBcCi0gICAgICAgICAgICR7QGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCAneDExJywgJycsIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2ZpbGU6Ly9tYWtlZmlsZV9ub19ndGsucGF0Y2gnLCBkKX0gXAorICAgICAgICAgICAke0BiYi51dGlscy5jb250YWlucygnRElTVFJPX0ZFQVRVUkVTJywgJ3gxMScsICcnLCAnZmlsZTovL21ha2VmaWxlX25vX2d0ay5wYXRjaCcsIGQpfSBcCiAgICAgICAgICAgIGZpbGU6Ly9naXRjb21waWxlX2hkYWphY2tzZW5zZXRlc3QgXAogICAgICAgICAgICBmaWxlOi8vMDAwMS1hczEwazEtTWFrZS1vdXRwdXRfdHJhbV9saW5lLXN0YXRpYy1pbmxpbmUucGF0Y2ggXAotICAgICAgICAgICIKKyAgICAgICAgICAgZmlsZTovLzAwMDEtQ3VzNDI4TWlkaS1FeHBsaWNpdGx5LWNhc3QtY29uc3RhbnQtdG8tY2hhci10eXBlLnBhdGNoIFwKKyAgICAgICAgICAgIgogCiBTUkNfVVJJW21kNXN1bV0gPSAiYjQ3NmE1YWZhYTNlYTMyMzA4NTU1NTNhZDU5ZDI1OWQiCiBTUkNfVVJJW3NoYTI1NnN1bV0gPSAiN2QzNDU1OGM1OTBhNTAyOTRiMzY1NzZkMjU3MzE2YTFhYzVjZDk1MWViOGNkN2QzMzBlMDlmOGNjNzU3YWI1MSIKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9hbHNhL2Fsc2EtdXRpbHMtc2NyaXB0c18xLjEuMC5iYiBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9hbHNhL2Fsc2EtdXRpbHMtc2NyaXB0c18xLjEuMC5iYgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTk4ZjliOS4uMDAwMDAwMAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvYWxzYS9hbHNhLXV0aWxzLXNjcmlwdHNfMS4xLjAuYmIKKysrIC9kZXYvbnVsbApAQCAtMSwyMSArMCwwIEBACi1yZXF1aXJlIGFsc2EtdXRpbHNfJHtQVn0uYmIKLQotU1VNTUFSWSA9ICJTaGVsbCBzY3JpcHRzIHRoYXQgc2hvdyBoZWxwIGluZm8gYW5kIGNyZWF0ZSBBTFNBIGNvbmZpZ3VyYXRpb24gZmlsZXMiCi1QUk9WSURFUyA9ICJhbHNhLXV0aWxzLWFsc2Fjb25mIgotCi1GSUxFU0VYVFJBUEFUSFNfcHJlcGVuZCA6PSAiJHtUSElTRElSfS9hbHNhLXV0aWxzOiIKLQotUEFDS0FHRVMgPSAiJHtQTn0iCi1SREVQRU5EU18ke1BOfSArPSAiYmFzaCIKLQotRklMRVNfJHtQTn0gPSAiJHtzYmluZGlyfS9hbHNhY29uZiBcCi0gICAgICAgICAgICAgICAke3NiaW5kaXJ9L2Fsc2EtaW5mby5zaCBcCi0gICAgICAgICAgICAgICIKLQotUyA9ICIke1dPUktESVJ9L2Fsc2EtdXRpbHMtJHtQVn0iCi0KLWRvX2luc3RhbGwoKSB7Ci0JaW5zdGFsbCAtZCAke0R9JHtzYmluZGlyfQotCWluc3RhbGwgLW0gMDc1NSAke0J9L2Fsc2Fjb25mL2Fsc2Fjb25mICR7RH0ke3NiaW5kaXJ9LwotCWluc3RhbGwgLW0gMDc1NSAke1N9L2Fsc2EtaW5mby9hbHNhLWluZm8uc2ggJHtEfSR7c2JpbmRpcn0vCi19CmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvYWxzYS9hbHNhLXV0aWxzLXNjcmlwdHNfMS4xLjIuYmIgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvYWxzYS9hbHNhLXV0aWxzLXNjcmlwdHNfMS4xLjIuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmVmNzlkOQotLS0gL2Rldi9udWxsCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9hbHNhL2Fsc2EtdXRpbHMtc2NyaXB0c18xLjEuMi5iYgpAQCAtMCwwICsxLDI1IEBACityZXF1aXJlIGFsc2EtdXRpbHNfJHtQVn0uYmIKKworU1VNTUFSWSA9ICJTaGVsbCBzY3JpcHRzIHRoYXQgc2hvdyBoZWxwIGluZm8gYW5kIGNyZWF0ZSBBTFNBIGNvbmZpZ3VyYXRpb24gZmlsZXMiCitQUk9WSURFUyA9ICJhbHNhLXV0aWxzLWFsc2Fjb25mIgorCitGSUxFU0VYVFJBUEFUSFNfcHJlcGVuZCA6PSAiJHtUSElTRElSfS9hbHNhLXV0aWxzOiIKKworUEFDS0FHRVMgPSAiJHtQTn0iCitSREVQRU5EU18ke1BOfSArPSAiYmFzaCIKKworRklMRVNfJHtQTn0gPSAiJHtzYmluZGlyfS9hbHNhY29uZiBcCisgICAgICAgICAgICAgICAke3NiaW5kaXJ9L2Fsc2EtaW5mby5zaCBcCisgICAgICAgICAgICAgICAke3NiaW5kaXJ9L2Fsc2FiYXQtdGVzdC5zaCBcCisgICAgICAgICAgICAgICIKKworUyA9ICIke1dPUktESVJ9L2Fsc2EtdXRpbHMtJHtQVn0iCisKK2RvX2luc3RhbGwoKSB7CisJaW5zdGFsbCAtZCAke0R9JHtzYmluZGlyfQorCWluc3RhbGwgLW0gMDc1NSAke0J9L2Fsc2Fjb25mL2Fsc2Fjb25mICR7RH0ke3NiaW5kaXJ9LworCWluc3RhbGwgLW0gMDc1NSAke1N9L2Fsc2EtaW5mby9hbHNhLWluZm8uc2ggJHtEfSR7c2JpbmRpcn0vCisJaWYgJHtAYmIudXRpbHMuY29udGFpbnMoJ1BBQ0tBR0VDT05GSUcnLCAnYmF0JywgJ3RydWUnLCAnZmFsc2UnLCBkKX07IHRoZW4KKwkJaW5zdGFsbCAtbSAwNzU1ICR7U30vYmF0L2Fsc2FiYXQtdGVzdC5zaCAke0R9JHtzYmluZGlyfS8KKwlmaQorfQpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2Fsc2EvYWxzYS11dGlscy8wMDAxLWFsc2FiYXQtcmVuYW1lLXRvLWF2b2lkLW5hbWluZy1jb25mbGljdC5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9hbHNhL2Fsc2EtdXRpbHMvMDAwMS1hbHNhYmF0LXJlbmFtZS10by1hdm9pZC1uYW1pbmctY29uZmxpY3QucGF0Y2gKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGI2ZDdkNGYuLjAwMDAwMDAKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2Fsc2EvYWxzYS11dGlscy8wMDAxLWFsc2FiYXQtcmVuYW1lLXRvLWF2b2lkLW5hbWluZy1jb25mbGljdC5wYXRjaAorKysgL2Rldi9udWxsCkBAIC0xLDE1MyArMCwwIEBACi1Gcm9tIDI4YzI5ZGVjZTZjNDM0ZTdkM2QwMWU4MDU1NTViYTdkZGY2ZmJhNjUgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCi1Gcm9tOiAiTHUsIEhhbiIgPGhhbi5sdUBpbnRlbC5jb20+Ci1EYXRlOiBXZWQsIDMgRmViIDIwMTYgMTQ6MjA6MzMgKzA4MDAKLVN1YmplY3Q6IFtQQVRDSF0gYWxzYWJhdDogcmVuYW1lIHRvIGF2b2lkIG5hbWluZyBjb25mbGljdAotCi1hbHNhLXV0aWxzIGFzIHdlbGwgYXMgYmFyZW9zLWJhdCAoYXMgd2VsbCBhIHNvbWUgQmFjdWxhIHBhY2thZ2VzKQotYWxsIGNvbnRhaW4gYSBwcm9ncmFtIGNhbGxlZCAvdXNyL2Jpbi9iYXQsIHdoaWNoIGNhdXNlcyBjb25mbGljdHMgb24KLXZhcmlvdXMgZGlzdHJpYnV0aW9ucyAoImJhc2ljIGF1ZGlvIHRlc3RlciIgdnMgImJhcmVvcyBhZG1pbmlzdHJhdGlvbgotdG9vbCIoImJhY3VsYSBhZG1pbmlzdHJhdGlvbiB0b29sIikpLgotUmVuYW1lIHRvIGF2b2lkIGNvbmZsaWN0LgotCi1TaWduZWQtb2ZmLWJ5OiBMdSwgSGFuIDxoYW4ubHVAaW50ZWwuY29tPgotU2lnbmVkLW9mZi1ieTogVGFrYXNoaSBJd2FpIDx0aXdhaUBzdXNlLmRlPgotCi1VcHN0cmVhbS1TdGF0dXM6IEFjY2VwdGVkIFtleHBlY3RlZCBpbiB2ZXJzaW9uIDEuMS4xXQotCi1TaWduZWQtb2ZmLWJ5OiBUYW51IEthc2tpbmVuIDx0YW51a0Bpa2kuZmk+Ci0tLS0KLSBiYXQvTWFrZWZpbGUuYW0gICAgICAgICAgfCAxMCArKysrKy0tLS0tCi0gYmF0L3tiYXQuMSA9PiBhbHNhYmF0LjF9IHwgNDMgKysrKysrKysrKysrKysrKysrKysrKy0tLS0tLS0tLS0tLS0tLS0tLS0tLQotIGJhdC9iYXQuYyAgICAgICAgICAgICAgICB8ICAyICstCi0gMyBmaWxlcyBjaGFuZ2VkLCAyOCBpbnNlcnRpb25zKCspLCAyNyBkZWxldGlvbnMoLSkKLSByZW5hbWUgYmF0L3tiYXQuMSA9PiBhbHNhYmF0LjF9ICg3MiUpCi0KLWRpZmYgLS1naXQgYS9iYXQvTWFrZWZpbGUuYW0gYi9iYXQvTWFrZWZpbGUuYW0KLWluZGV4IDg0MmFlNmIuLjk4NWYwMGMgMTAwNjQ0Ci0tLS0gYS9iYXQvTWFrZWZpbGUuYW0KLSsrKyBiL2JhdC9NYWtlZmlsZS5hbQotQEAgLTEsOSArMSw5IEBACi0tYmluX1BST0dSQU1TID0gYmF0Ci0tbWFuX01BTlMgPSBiYXQuMQotK2Jpbl9QUk9HUkFNUyA9IGFsc2FiYXQKLSttYW5fTUFOUyA9IGFsc2FiYXQuMQotIAotLUVYVFJBX0RJU1QgPSBiYXQuMQotK0VYVFJBX0RJU1QgPSBhbHNhYmF0LjEKLSAKLS1iYXRfU09VUkNFUyA9IFwKLSthbHNhYmF0X1NPVVJDRVMgPSBcCi0gCWJhdC5jIFwKLSAJY29tbW9uLmMgXAotIAlhbmFseXplLmMgXAotQEAgLTIxLDQgKzIxLDQgQEAgbm9pbnN0X0hFQURFUlMgPSBcCi0gQU1fQ1BQRkxBR1MgPSBcCi0gCSAgICAgIC1XYWxsIC1JJCh0b3Bfc3JjZGlyKS9pbmNsdWRlCi0gCi0tYmF0X0xEQUREID0gQEZGVFdfTElCQAotK2Fsc2FiYXRfTERBREQgPSBARkZUV19MSUJACi1kaWZmIC0tZ2l0IGEvYmF0L2JhdC4xIGIvYmF0L2Fsc2FiYXQuMQotc2ltaWxhcml0eSBpbmRleCA3MiUKLXJlbmFtZSBmcm9tIGJhdC9iYXQuMQotcmVuYW1lIHRvIGJhdC9hbHNhYmF0LjEKLWluZGV4IGUwMGZjMjcuLjhkMGI5YzAgMTAwNjQ0Ci0tLS0gYS9iYXQvYmF0LjEKLSsrKyBiL2JhdC9hbHNhYmF0LjEKLUBAIC0xLDIzICsxLDIzIEBACi0tLlRIIEJBVCAxICIyMHRoIE9jdG9iZXIgMjAxNSIKLSsuVEggQUxTQUJBVCAxICIyMHRoIE9jdG9iZXIgMjAxNSIKLSAuU0ggTkFNRQotLWJhdCBcLSBjb21tYW5kXC1saW5lIHNvdW5kIHRlc3RlciBmb3IgQUxTQSBzb3VuZCBjYXJkIGRyaXZlcgotK2Fsc2FiYXQgXC0gY29tbWFuZFwtbGluZSBzb3VuZCB0ZXN0ZXIgZm9yIEFMU0Egc291bmQgY2FyZCBkcml2ZXIKLSAKLSAuU0ggU1lOT1BTSVMKLS1cZkJiYXRcZlAgW1xmSWZsYWdzXGZQXQotK1xmQmFsc2FiYXRcZlAgW1xmSWZsYWdzXGZQXQotIAotIC5TSCBERVNDUklQVElPTgotLVxmQkJBVChCYXNpYyBBdWRpbyBUZXN0ZXIpXGZQIGlzIGEgc2ltcGxlIGNvbW1hbmRcLWxpbmUgdXRpbGl0eSBpbnRlbmRlZAotLXRvIGhlbHAgYXV0b21hdGUgYXVkaW8gZHJpdmVyIGFuZCBzb3VuZCBzZXJ2ZXIgdGVzdGluZyB3aXRoIGxpdHRsZSBodW1hbgotLWludGVyYWN0aW9uLiBCQVQgY2FuIGJlIHVzZWQgdG8gdGVzdCBhdWRpbyBxdWFsaXR5LCBzdHJlc3MgdGVzdCBmZWF0dXJlcwotLWFuZCB0ZXN0IGF1ZGlvIGJlZm9yZSBhbmQgYWZ0ZXIgUE0gc3RhdGUgY2hhbmdlcy4KLStcZkJBTFNBQkFUKEFMU0EgQmFzaWMgQXVkaW8gVGVzdGVyKVxmUCBpcyBhIHNpbXBsZSBjb21tYW5kXC1saW5lIHV0aWxpdHkKLStpbnRlbmRlZCB0byBoZWxwIGF1dG9tYXRlIGF1ZGlvIGRyaXZlciBhbmQgc291bmQgc2VydmVyIHRlc3Rpbmcgd2l0aCBsaXR0bGUKLStodW1hbiBpbnRlcmFjdGlvbi4gQUxTQUJBVCBjYW4gYmUgdXNlZCB0byB0ZXN0IGF1ZGlvIHF1YWxpdHksIHN0cmVzcyB0ZXN0Ci0rZmVhdHVyZXMgYW5kIHRlc3QgYXVkaW8gYmVmb3JlIGFuZCBhZnRlciBQTSBzdGF0ZSBjaGFuZ2VzLgotIAotLUJBVCdzIGRlc2lnbiBpcyByZWxhdGl2ZWx5IHNpbXBsZS4gQkFUIHBsYXlzIGFuIGF1ZGlvIHN0cmVhbSBhbmQgY2FwdHVyZXMKLS10aGUgc2FtZSBzdHJlYW0gaW4gZWl0aGVyIGEgZGlnaXRhbCBvciBhbmFsb2cgbG9vcCBiYWNrLiBJdCB0aGVuIGNvbXBhcmVzCi0tdGhlIGNhcHR1cmVkIHN0cmVhbSB1c2luZyBhIEZGVCB0byB0aGUgb3JpZ2luYWwgdG8gZGV0ZXJtaW5lIGlmIHRoZSB0ZXN0Ci0tY2FzZSBwYXNzZXMgb3IgZmFpbHMuCi0rQUxTQUJBVCdzIGRlc2lnbiBpcyByZWxhdGl2ZWx5IHNpbXBsZS4gQUxTQUJBVCBwbGF5cyBhbiBhdWRpbyBzdHJlYW0gYW5kCi0rY2FwdHVyZXMgdGhlIHNhbWUgc3RyZWFtIGluIGVpdGhlciBhIGRpZ2l0YWwgb3IgYW5hbG9nIGxvb3AgYmFjay4gSXQgdGhlbgotK2NvbXBhcmVzIHRoZSBjYXB0dXJlZCBzdHJlYW0gdXNpbmcgYSBGRlQgdG8gdGhlIG9yaWdpbmFsIHRvIGRldGVybWluZSBpZgotK3RoZSB0ZXN0IGNhc2UgcGFzc2VzIG9yIGZhaWxzLgotIAotLUJBVCBjYW4gZWl0aGVyIHJ1biB3aG9sbHkgb24gdGhlIHRhcmdldCBtYWNoaW5lIGJlaW5nIHRlc3RlZCAoc3RhbmRhbG9uZQotLW1vZGUpIG9yIGNhbiBydW4gYXMgYSBjbGllbnQvc2VydmVyIG1vZGUgd2hlcmUgYnkgYmF0IGNsaWVudCBydW5zIG9uIHRoZQotK0FMU0FCQVQgY2FuIGVpdGhlciBydW4gd2hvbGx5IG9uIHRoZSB0YXJnZXQgbWFjaGluZSBiZWluZyB0ZXN0ZWQgKHN0YW5kYWxvbmUKLSttb2RlKSBvciBjYW4gcnVuIGFzIGEgY2xpZW50L3NlcnZlciBtb2RlIHdoZXJlIGJ5IGFsc2FiYXQgY2xpZW50IHJ1bnMgb24gdGhlCi0gdGFyZ2V0IGFuZCBydW5zIGFzIGEgc2VydmVyIG9uIGEgc2VwYXJhdGUgdGVzdGVyIG1hY2hpbmUuIFRoZSBjbGllbnQvc2VydmVyCi0gbW9kZSBzdGlsbCByZXF1aXJlcyBzb21lIG1hbnVhbCBpbnRlcmFjdGlvbiBmb3Igc3luY2hyb25pemF0aW9uLCBidXQgdGhpcwotIGlzIGFjdGl2ZWx5IGJlaW5nIGRldmVsb3BlZCBmb3IgZnV0dXJlIHJlbGVhc2VzLgotQEAgLTkzLDggKzkzLDggQEAgRnJlcXVlbmNpZXMgd2l0aCBhbXBsaXR1ZGUgbGFyZ2VyIHRoYW4gdGhyZXNob2xkIHdpbGwgYmUgcmVjb2duaXplZCBhcyBhCi0gcGVhaywgYW5kIHRoZSBmcmVxdWVuY3kgd2l0aCBsYXJnZXN0IHBlYWsgdmFsdWUgd2lsbCBiZSByZWNvZ25pemVkIGFzIGEKLSBkZXRlY3RlZCBmcmVxdWVuY3kuCi0gLmJyCi0tQkFUIHRoZW4gY29tcGFyZXMgdGhlIGRldGVjdGVkIGZyZXF1ZW5jeSB0byB0YXJnZXQgZnJlcXVlbmN5LCB0byBkZWNpZGUKLS1pZiB0aGUgZGV0ZWN0aW5nIHBhc3NlcyBvciBmYWlscy4KLStBTFNBQkFUIHRoZW4gY29tcGFyZXMgdGhlIGRldGVjdGVkIGZyZXF1ZW5jeSB0byB0YXJnZXQgZnJlcXVlbmN5LCB0bwotK2RlY2lkZSBpZiB0aGUgZGV0ZWN0aW5nIHBhc3NlcyBvciBmYWlscy4KLSAuYnIKLSBUaGUgZGVmYXVsdCB2YWx1ZSBpcyAzLjAuCi0gLlRQCi1AQCAtMTE3LDE4ICsxMTcsMTkgQEAgVGFyZ2V0IFdBViBmaWxlIHRvIHNhdmUgY2FwdHVyZSB0ZXN0IGNvbnRlbnQuCi0gLlRQCi0gXGZJXC1cLWxvY2FsXGZQCi0gSW50ZXJuYWwgbG9vcGJhY2sgbW9kZS4KLS1QbGF5YmFjaywgY2FwdHVyZSBhbmQgYW5hbHlzaXMgaW50ZXJuYWwgdG8gQkFUIG9ubHkuIFRoaXMgaXMgaW50ZW5kZWQgZm9yCi0tZGV2ZWxvcGVycyB0byB0ZXN0IG5ldyBCQVQgZmVhdHVyZXMgYXMgbm8gYXVkaW8gaXMgcm91dGVkIG91dHNpZGUgb2YgQkFULgotK1BsYXliYWNrLCBjYXB0dXJlIGFuZCBhbmFseXNpcyBpbnRlcm5hbCB0byBBTFNBQkFUIG9ubHkuIFRoaXMgaXMgaW50ZW5kZWQKLStmb3IgZGV2ZWxvcGVycyB0byB0ZXN0IG5ldyBBTFNBQkFUIGZlYXR1cmVzIGFzIG5vIGF1ZGlvIGlzIHJvdXRlZCBvdXRzaWRlCi0rb2YgQUxTQUJBVC4KLSAKLSAuU0ggRVhBTVBMRVMKLSAKLSAuVFAKLS1cZkJiYXQgXC1QIHBsdWdodzowLDAgXC1DIHBsdWdodzowLDAgXC1jIDIgXC1mIFMzMl9MRSBcLUYgMjUwXGZSCi0rXGZCYWxzYWJhdCBcLVAgcGx1Z2h3OjAsMCBcLUMgcGx1Z2h3OjAsMCBcLWMgMiBcLWYgUzMyX0xFIFwtRiAyNTBcZlIKLSBHZW5lcmF0ZSBhbmQgcGxheSBhIHNpbmUgd2F2ZSBvZiAyNTAgSGVydHogd2l0aCAyIGNoYW5uZWwgYW5kIFMzMl9MRSBmb3JtYXQsCi0gYW5kIHRoZW4gY2FwdHVyZSBhbmQgYW5hbHl6ZS4KLSAKLSAuVFAKLS1cZkJiYXQgXC1QIHBsdWdodzowLDAgXC1DIHBsdWdodzowLDAgXC1cLWZpbGUgNTAwSHoud2F2XGZSCi0rXGZCYWxzYWJhdCBcLVAgcGx1Z2h3OjAsMCBcLUMgcGx1Z2h3OjAsMCBcLVwtZmlsZSA1MDBIei53YXZcZlIKLSBQbGF5IHRoZSBSSUZGIFdBViBmaWxlICI1MDBIei53YXYiIHdoaWNoIGNvbnRhaW5zIDUwMCBIZXJ0eiB3YXZlZm9ybSBMUENNCi0gZGF0YSwgYW5kIHRoZW4gY2FwdHVyZSBhbmQgYW5hbHl6ZS4KLSAKLUBAIC0xNTIsNyArMTUzLDcgQEAgQ3VycmVudGx5IG9ubHkgc3VwcG9ydCBSSUZGIFdBViBmb3JtYXQgd2l0aCBQQ00gZGF0YS4gUGxlYXNlIHJlcG9ydCBhbnkgYnVncyB0bwotIHRoZSBhbHNhLWRldmVsIG1haWxpbmcgbGlzdC4KLSAKLSAuU0ggQVVUSE9SCi0tXGZCYmF0XGZQIGlzIGJ5IExpYW0gR2lyZHdvb2QgPGxpYW0uci5naXJkd29vZEBsaW51eC5pbnRlbC5jb20+LCBCZXJuYXJkIEdhdXRpZXIKLS08YmVybmFyZC5nYXV0aWVyQGludGVsLmNvbT4gYW5kIEhhbiBMdSA8aGFuLmx1QGludGVsLmNvbT4uCi0rXGZCYWxzYWJhdFxmUCBpcyBieSBMaWFtIEdpcmR3b29kIDxsaWFtLnIuZ2lyZHdvb2RAbGludXguaW50ZWwuY29tPiwgQmVybmFyZAotK0dhdXRpZXIgPGJlcm5hcmQuZ2F1dGllckBpbnRlbC5jb20+IGFuZCBIYW4gTHUgPGhhbi5sdUBpbnRlbC5jb20+LgotIFRoaXMgZG9jdW1lbnQgaXMgYnkgTGlhbSBHaXJkd29vZCA8bGlhbS5yLmdpcmR3b29kQGxpbnV4LmludGVsLmNvbT4gYW5kIEhhbiBMdQotIDxoYW4ubHVAaW50ZWwuY29tPi4KLWRpZmYgLS1naXQgYS9iYXQvYmF0LmMgYi9iYXQvYmF0LmMKLWluZGV4IDA4NmI5ZmEuLmRkYjYwYjcgMTAwNjQ0Ci0tLS0gYS9iYXQvYmF0LmMKLSsrKyBiL2JhdC9iYXQuYwotQEAgLTI3Miw3ICsyNzIsNyBAQCBzdGF0aWMgdm9pZCB0ZXN0X2NhcHR1cmUoc3RydWN0IGJhdCAqYmF0KQotIHN0YXRpYyB2b2lkIHVzYWdlKHN0cnVjdCBiYXQgKmJhdCkKLSB7Ci0gCWZwcmludGYoYmF0LT5sb2csCi0tXygiVXNhZ2U6IGJhdCBbLW9wdGlvbnNdLi4uXG4iCi0rXygiVXNhZ2U6IGFsc2FiYXQgWy1vcHRpb25zXS4uLlxuIgotICJcbiIKLSAiICAtaCwgLS1oZWxwICAgICAgICAgICAgIHRoaXMgaGVscFxuIgotICIgIC1EICAgICAgICAgICAgICAgICAgICAgcGNtIGRldmljZSBmb3IgYm90aCBwbGF5YmFjayBhbmQgY2FwdHVyZVxuIgotLS0gCi0yLjcuMAotCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvYWxzYS9hbHNhLXV0aWxzXzEuMS4wLmJiIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2Fsc2EvYWxzYS11dGlsc18xLjEuMC5iYgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYWY0MDQ4OC4uMDAwMDAwMAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvYWxzYS9hbHNhLXV0aWxzXzEuMS4wLmJiCisrKyAvZGV2L251bGwKQEAgLTEsMTAyICswLDAgQEAKLVNVTU1BUlkgPSAiQUxTQSBzb3VuZCB1dGlsaXRpZXMiCi1IT01FUEFHRSA9ICJodHRwOi8vd3d3LmFsc2EtcHJvamVjdC5vcmciCi1CVUdUUkFDS0VSID0gImh0dHBzOi8vYnVndHJhY2suYWxzYS1wcm9qZWN0Lm9yZy9hbHNhLWJ1Zy9sb2dpbl9wYWdlLnBocCIKLVNFQ1RJT04gPSAiY29uc29sZS91dGlscyIKLUxJQ0VOU0UgPSAiR1BMdjIrIgotTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9NTk1MzBiZGYzMzY1OWIyOWU3M2Q0YWRiOWY5ZjY1NTIgXAotICAgICAgICAgICAgICAgICAgICBmaWxlOi8vYWxzYWN0bC91dGlscy5jO2JlZ2lubGluZT0xO2VuZGxpbmU9MjA7bWQ1PWZlOTUyNmIwNTVlMjQ2YjU1NTg4MDlhNWFlMjVjMGI5IgotREVQRU5EUyA9ICJhbHNhLWxpYiBuY3Vyc2VzIGxpYnNhbXBsZXJhdGUwIgotCi1QQUNLQUdFQ09ORklHID8/PSAidWRldiIKLVBBQ0tBR0VDT05GSUdbYmF0XSA9ICItLWVuYWJsZS1iYXQsLS1kaXNhYmxlLWJhdCxmZnR3IgotUEFDS0FHRUNPTkZJR1t1ZGV2XSA9ICItLXdpdGgtdWRldi1ydWxlcy1kaXI9YHBrZy1jb25maWcgLS12YXJpYWJsZT11ZGV2ZGlyIHVkZXZgL3J1bGVzLmQsLHVkZXYiCi1QQUNLQUdFQ09ORklHW3htbHRvXSA9ICItLWVuYWJsZS14bWx0bywgLS1kaXNhYmxlLXhtbHRvLCB4bWx0by1uYXRpdmUgZG9jYm9vay14bWwtZHRkNC1uYXRpdmUgZG9jYm9vay14c2wtc3R5bGVzaGVldHMtbmF0aXZlIgotCi1TUkNfVVJJID0gImZ0cDovL2Z0cC5hbHNhLXByb2plY3Qub3JnL3B1Yi91dGlscy9hbHNhLXV0aWxzLSR7UFZ9LnRhci5iejIgXAotICAgICAgICAgICBmaWxlOi8vMDAwMS1hbHNhY3RsLWRvbi10LWxldC1zeXN0ZW1kLXVuaXQtcmVzdG9yZS10aGUtdm9sdW1lLXdoLnBhdGNoIFwKLSAgICAgICAgICAgZmlsZTovLzAwMDEtYWxzYWJhdC1yZW5hbWUtdG8tYXZvaWQtbmFtaW5nLWNvbmZsaWN0LnBhdGNoIFwKLSAgICAgICAgICAiCi0KLVNSQ19VUklbbWQ1c3VtXSA9ICJiOWQ2MTAyZmJiZDBiNjgwNDBiYjc3MDIzZWQzMGMwYyIKLVNSQ19VUklbc2hhMjU2c3VtXSA9ICIzYjFjMzEzNWI3NmUxNDUzMmQzZGQyM2ZiMTU3NTlkZGQ3ZGFmOWZmYmMxODNmN2E5YTBhM2E4NjM3NDc0OGYxIgotCi0jIGxhenkgaGFjay4gbmVlZHMgcHJvcGVyIGZpeGluZyBpbiBnZXR0ZXh0Lm00LCBzZWUKLSMgaHR0cDovL2J1Z3Mub3BlbmVtYmVkZGVkLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjM0OAotIyBwbGVhc2UgY2xvc2UgYnVnIGFuZCByZW1vdmUgdGhpcyBjb21tZW50IHdoZW4gcHJvcGVybHkgZml4ZWQKLSMKLUVYVFJBX09FQ09ORl9hcHBlbmRfbGliYy11Y2xpYmMgPSAiIC0tZGlzYWJsZS1ubHMiCi0KLWluaGVyaXQgYXV0b3Rvb2xzIGdldHRleHQgcGtnY29uZmlnCi0KLSMgVGhpcyBhcmUgYWxsIHBhY2thZ2VzIHRoYXQgd2UgbmVlZCB0byBtYWtlLiBBbHNvLCB0aGUgbm93IGVtcHR5IGFsc2EtdXRpbHMKLSMgaXBrIGRlcGVuZHMgb24gdGhlbS4KLQotQUxTQV9VVElMU19QS0dTID0gIlwKLSAgICAgICAgICAgICAke0BiYi51dGlscy5jb250YWlucygnUEFDS0FHRUNPTkZJRycsICdiYXQnLCAnYWxzYS11dGlscy1hbHNhYmF0JywgJycsIGQpfSBcCi0gICAgICAgICAgICAgYWxzYS11dGlscy1hbHNhbWl4ZXIgXAotICAgICAgICAgICAgIGFsc2EtdXRpbHMtYWxzYXRwbGcgXAotICAgICAgICAgICAgIGFsc2EtdXRpbHMtbWlkaSBcCi0gICAgICAgICAgICAgYWxzYS11dGlscy1hcGxheSBcCi0gICAgICAgICAgICAgYWxzYS11dGlscy1hbWl4ZXIgXAotICAgICAgICAgICAgIGFsc2EtdXRpbHMtYWNvbm5lY3QgXAotICAgICAgICAgICAgIGFsc2EtdXRpbHMtaWVjc2V0IFwKLSAgICAgICAgICAgICBhbHNhLXV0aWxzLXNwZWFrZXJ0ZXN0IFwKLSAgICAgICAgICAgICBhbHNhLXV0aWxzLWFzZXFuZXQgXAotICAgICAgICAgICAgIGFsc2EtdXRpbHMtYXNlcWR1bXAgXAotICAgICAgICAgICAgIGFsc2EtdXRpbHMtYWxzYWN0bCBcCi0gICAgICAgICAgICAgYWxzYS11dGlscy1hbHNhbG9vcCBcCi0gICAgICAgICAgICAgYWxzYS11dGlscy1hbHNhdWNtIFwKLSAgICAgICAgICAgICIKLQotUEFDS0FHRVMgKz0gIiR7QUxTQV9VVElMU19QS0dTfSIKLVJERVBFTkRTXyR7UE59ICs9ICIke0FMU0FfVVRJTFNfUEtHU30iCi0KLUZJTEVTXyR7UE59ID0gIiIKLUZJTEVTX2Fsc2EtdXRpbHMtYWxzYWJhdCAgICAgPSAiJHtiaW5kaXJ9L2Fsc2FiYXQiCi1GSUxFU19hbHNhLXV0aWxzLWFsc2F0cGxnICAgID0gIiR7YmluZGlyfS9hbHNhdHBsZyIKLUZJTEVTX2Fsc2EtdXRpbHMtYXBsYXkgICAgICAgPSAiJHtiaW5kaXJ9L2FwbGF5ICR7YmluZGlyfS9hcmVjb3JkIgotRklMRVNfYWxzYS11dGlscy1hbWl4ZXIgICAgICA9ICIke2JpbmRpcn0vYW1peGVyIgotRklMRVNfYWxzYS11dGlscy1hbHNhbWl4ZXIgICA9ICIke2JpbmRpcn0vYWxzYW1peGVyIgotRklMRVNfYWxzYS11dGlscy1zcGVha2VydGVzdCA9ICIke2JpbmRpcn0vc3BlYWtlci10ZXN0ICR7ZGF0YWRpcn0vc291bmRzL2Fsc2EvICR7ZGF0YWRpcn0vYWxzYS9zcGVha2VyLXRlc3QvIgotRklMRVNfYWxzYS11dGlscy1taWRpICAgICAgICA9ICIke2JpbmRpcn0vYXBsYXltaWRpICR7YmluZGlyfS9hcmVjb3JkbWlkaSAke2JpbmRpcn0vYW1pZGkiCi1GSUxFU19hbHNhLXV0aWxzLWFjb25uZWN0ICAgID0gIiR7YmluZGlyfS9hY29ubmVjdCIKLUZJTEVTX2Fsc2EtdXRpbHMtYXNlcW5ldCAgICAgPSAiJHtiaW5kaXJ9L2FzZXFuZXQiCi1GSUxFU19hbHNhLXV0aWxzLWllY3NldCAgICAgID0gIiR7YmluZGlyfS9pZWNzZXQiCi1GSUxFU19hbHNhLXV0aWxzLWFsc2FjdGwgICAgID0gIiR7c2JpbmRpcn0vYWxzYWN0bCAqL3VkZXYvcnVsZXMuZCAqLyovdWRldi9ydWxlcy5kICR7c3lzdGVtZF91bml0ZGlyfSAke2xvY2Fsc3RhdGVkaXJ9L2xpYi9hbHNhICR7ZGF0YWRpcn0vYWxzYS9pbml0LyIKLUZJTEVTX2Fsc2EtdXRpbHMtYXNlcWR1bXAgICAgPSAiJHtiaW5kaXJ9L2FzZXFkdW1wIgotRklMRVNfYWxzYS11dGlscy1hbHNhbG9vcCAgICA9ICIke2JpbmRpcn0vYWxzYWxvb3AiCi1GSUxFU19hbHNhLXV0aWxzLWFsc2F1Y20gICAgID0gIiR7YmluZGlyfS9hbHNhdWNtIgotCi1TVU1NQVJZX2Fsc2EtdXRpbHMtYWxzYWJhdCAgICAgID0gIkNvbW1hbmQtbGluZSBzb3VuZCB0ZXN0ZXIgZm9yIEFMU0Egc291bmQgY2FyZCBkcml2ZXIiCi1TVU1NQVJZX2Fsc2EtdXRpbHMtYWxzYXRwbGcgICAgID0gIkNvbnZlcnRzIHRvcG9sb2d5IHRleHQgZmlsZXMgaW50byBiaW5hcnkgZm9ybWF0IGZvciBrZXJuZWwiCi1TVU1NQVJZX2Fsc2EtdXRpbHMtYXBsYXkgICAgICAgID0gIlBsYXkgKGFuZCByZWNvcmQpIHNvdW5kIGZpbGVzIHVzaW5nIEFMU0EiCi1TVU1NQVJZX2Fsc2EtdXRpbHMtYW1peGVyICAgICAgID0gIkNvbW1hbmQtbGluZSBjb250cm9sIGZvciBBTFNBIG1peGVyIGFuZCBzZXR0aW5ncyIKLVNVTU1BUllfYWxzYS11dGlscy1hbHNhbWl4ZXIgICAgPSAibmN1cnNlcy1iYXNlZCBjb250cm9sIGZvciBBTFNBIG1peGVyIGFuZCBzZXR0aW5ncyIKLVNVTU1BUllfYWxzYS11dGlscy1zcGVha2VydGVzdCAgPSAiQUxTQSBzdXJyb3VuZCBzcGVha2VyIHRlc3QgdXRpbGl0eSIKLVNVTU1BUllfYWxzYS11dGlscy1taWRpICAgICAgICAgPSAiTWlzY2VsbGFuZW91cyBNSURJIHV0aWxpdGllcyBmb3IgQUxTQSIKLVNVTU1BUllfYWxzYS11dGlscy1hY29ubmVjdCAgICAgPSAiQUxTQSBzZXF1ZW5jZXIgY29ubmVjdGlvbiBtYW5hZ2VyIgotU1VNTUFSWV9hbHNhLXV0aWxzLWFzZXFuZXQgICAgICA9ICJOZXR3b3JrIGNsaWVudC9zZXJ2ZXIgZm9yIEFMU0Egc2VxdWVuY2VyIgotU1VNTUFSWV9hbHNhLXV0aWxzLWllY3NldCAgICAgICA9ICJBTFNBIHV0aWxpdHkgZm9yIHNldHRpbmcvc2hvd2luZyBJRUM5NTggKFMvUERJRikgc3RhdHVzIGJpdHMiCi1TVU1NQVJZX2Fsc2EtdXRpbHMtYWxzYWN0bCAgICAgID0gIlNhdmVzL3Jlc3RvcmVzIEFMU0Etc2V0dGluZ3MgaW4gL2V0Yy9hc291bmQuc3RhdGUiCi1TVU1NQVJZX2Fsc2EtdXRpbHMtYXNlcWR1bXAgICAgID0gIlNob3dzIHRoZSBldmVudHMgcmVjZWl2ZWQgYXQgYW4gQUxTQSBzZXF1ZW5jZXIgcG9ydCIKLVNVTU1BUllfYWxzYS11dGlscy1hbHNhbG9vcCAgICAgPSAiQUxTQSBQQ00gbG9vcGJhY2sgdXRpbGl0eSIKLVNVTU1BUllfYWxzYS11dGlscy1hbHNhdWNtICAgICAgPSAiQUxTQSBVc2UgQ2FzZSBNYW5hZ2VyIgotCi1SUkVDT01NRU5EU19hbHNhLXV0aWxzLWFsc2FjdGwgPSAiYWxzYS1zdGF0ZXMiCi0KLUFMTE9XX0VNUFRZX2Fsc2EtdXRpbHMgPSAiMSIKLQotZG9faW5zdGFsbCgpIHsKLQlhdXRvdG9vbHNfZG9faW5zdGFsbAotCi0JIyBXZSBkb24ndCBzaGlwIHRoaXMgaGVyZSBiZWNhdXNlIGl0IHJlcXVpcmVzIGEgZGVwZW5kZW5jeSBvbiBiYXNoLgotCSMgU2VlIGFsc2EtdXRpbHMtc2NyaXB0c18ke1BWfS5iYgotCXJtICR7RH0ke3NiaW5kaXJ9L2Fsc2Fjb25mCi0Jcm0gJHtEfSR7c2JpbmRpcn0vYWxzYS1pbmZvLnNoCi0KLQlpZiAke0BiYi51dGlscy5jb250YWlucygnUEFDS0FHRUNPTkZJRycsICd1ZGV2JywgJ2ZhbHNlJywgJ3RydWUnLCBkKX07IHRoZW4KLQkgICAjIFRoaXMgaXMgd2hlcmUgYWxzYS11dGlscyB3aWxsIGluc3RhbGwgaXRzIHJ1bGVzIGlmIHdlIGRvbid0IHRlbGwgaXQgYW55dGhpbmcgZWxzZS4KLQkgICBybSAtcmYgJHtEfS9saWIvdWRldgotCSAgIHJtZGlyIC0taWdub3JlLWZhaWwtb24tbm9uLWVtcHR5ICR7RH0vbGliCi0JZmkKLX0KZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9hbHNhL2Fsc2EtdXRpbHNfMS4xLjIuYmIgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvYWxzYS9hbHNhLXV0aWxzXzEuMS4yLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmEyMmQ5OTkKLS0tIC9kZXYvbnVsbAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvYWxzYS9hbHNhLXV0aWxzXzEuMS4yLmJiCkBAIC0wLDAgKzEsMTA5IEBACitTVU1NQVJZID0gIkFMU0Egc291bmQgdXRpbGl0aWVzIgorSE9NRVBBR0UgPSAiaHR0cDovL3d3dy5hbHNhLXByb2plY3Qub3JnIgorQlVHVFJBQ0tFUiA9ICJodHRwOi8vYWxzYS1wcm9qZWN0Lm9yZy9tYWluL2luZGV4LnBocC9CdWdfVHJhY2tpbmciCitTRUNUSU9OID0gImNvbnNvbGUvdXRpbHMiCitMSUNFTlNFID0gIkdQTHYyKyIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PTU5NTMwYmRmMzM2NTliMjllNzNkNGFkYjlmOWY2NTUyIFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL2Fsc2FjdGwvdXRpbHMuYztiZWdpbmxpbmU9MTtlbmRsaW5lPTIwO21kNT1mZTk1MjZiMDU1ZTI0NmI1NTU4ODA5YTVhZTI1YzBiOSIKK0RFUEVORFMgPSAiYWxzYS1saWIgbmN1cnNlcyBsaWJzYW1wbGVyYXRlMCIKKworUEFDS0FHRUNPTkZJRyA/Pz0gInVkZXYiCisKKyMgYWxzYWJhdCBjYW4gYmUgYnVpbHQgYWxzbyB3aXRob3V0IGZmdHcgc3VwcG9ydCAod2l0aCByZWR1Y2VkIGZ1bmN0aW9uYWxpdHkpLgorIyBJdCB3b3VsZCBiZSBiZXR0ZXIgdG8gYWx3YXlzIGVuYWJsZSBhbHNhYmF0LCBidXQgcHJvdmlkZSBhbiBvcHRpb24gZm9yCisjIGVuYWJsaW5nL2Rpc2FibGluZyBmZnR3LiBUaGUgY29uZmlndXJlIHNjcmlwdCBkb2Vzbid0IHN1cHBvcnQgdGhhdCwgaG93ZXZlcgorIyAoYXQgbGVhc3QgaW4gYW55IG9idmlvdXMgd2F5KSwgc28gZm9yIG5vdyB3ZSBvbmx5IHN1cHBvcnQgYWxzYWJhdCB3aXRoIGZmdHcKKyMgb3Igbm8gYWxzYWJhdCBhdCBhbGwuCitQQUNLQUdFQ09ORklHW2JhdF0gPSAiLS1lbmFibGUtYmF0LC0tZGlzYWJsZS1iYXQsZmZ0d2YiCisKK1BBQ0tBR0VDT05GSUdbdWRldl0gPSAiLS13aXRoLXVkZXYtcnVsZXMtZGlyPWBwa2ctY29uZmlnIC0tdmFyaWFibGU9dWRldmRpciB1ZGV2YC9ydWxlcy5kLCx1ZGV2IgorUEFDS0FHRUNPTkZJR1t4bWx0b10gPSAiLS1lbmFibGUteG1sdG8sIC0tZGlzYWJsZS14bWx0bywgeG1sdG8tbmF0aXZlIGRvY2Jvb2steG1sLWR0ZDQtbmF0aXZlIGRvY2Jvb2steHNsLXN0eWxlc2hlZXRzLW5hdGl2ZSIKKworU1JDX1VSSSA9ICJmdHA6Ly9mdHAuYWxzYS1wcm9qZWN0Lm9yZy9wdWIvdXRpbHMvYWxzYS11dGlscy0ke1BWfS50YXIuYnoyIFwKKyAgICAgICAgICAgZmlsZTovLzAwMDEtYWxzYWN0bC1kb24tdC1sZXQtc3lzdGVtZC11bml0LXJlc3RvcmUtdGhlLXZvbHVtZS13aC5wYXRjaCBcCisgICAgICAgICAgIgorCitTUkNfVVJJW21kNXN1bV0gPSAiMzhhYzdjNzgxZjgwYzQxYzAyYjQ2NjRkOGNiYWZhODciCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiN2FmNjAzYzA4NzdkMTI1MTU5OWQ2NWI0ZmJjMzcyZTYzYTU0MzcxYjg4OGY1YzI2YzZhODZhYzFkMDUxOTA3MSIKKworIyBsYXp5IGhhY2suIG5lZWRzIHByb3BlciBmaXhpbmcgaW4gZ2V0dGV4dC5tNCwgc2VlCisjIGh0dHA6Ly9idWdzLm9wZW5lbWJlZGRlZC5vcmcvc2hvd19idWcuY2dpP2lkPTIzNDgKKyMgcGxlYXNlIGNsb3NlIGJ1ZyBhbmQgcmVtb3ZlIHRoaXMgY29tbWVudCB3aGVuIHByb3Blcmx5IGZpeGVkCisjCitFWFRSQV9PRUNPTkZfYXBwZW5kX2xpYmMtdWNsaWJjID0gIiAtLWRpc2FibGUtbmxzIgorCitpbmhlcml0IGF1dG90b29scyBnZXR0ZXh0IHBrZ2NvbmZpZworCisjIFRoaXMgYXJlIGFsbCBwYWNrYWdlcyB0aGF0IHdlIG5lZWQgdG8gbWFrZS4gQWxzbywgdGhlIG5vdyBlbXB0eSBhbHNhLXV0aWxzCisjIGlwayBkZXBlbmRzIG9uIHRoZW0uCisKK0FMU0FfVVRJTFNfUEtHUyA9ICJcCisgICAgICAgICAgICAgJHtAYmIudXRpbHMuY29udGFpbnMoJ1BBQ0tBR0VDT05GSUcnLCAnYmF0JywgJ2Fsc2EtdXRpbHMtYWxzYWJhdCcsICcnLCBkKX0gXAorICAgICAgICAgICAgIGFsc2EtdXRpbHMtYWxzYW1peGVyIFwKKyAgICAgICAgICAgICBhbHNhLXV0aWxzLWFsc2F0cGxnIFwKKyAgICAgICAgICAgICBhbHNhLXV0aWxzLW1pZGkgXAorICAgICAgICAgICAgIGFsc2EtdXRpbHMtYXBsYXkgXAorICAgICAgICAgICAgIGFsc2EtdXRpbHMtYW1peGVyIFwKKyAgICAgICAgICAgICBhbHNhLXV0aWxzLWFjb25uZWN0IFwKKyAgICAgICAgICAgICBhbHNhLXV0aWxzLWllY3NldCBcCisgICAgICAgICAgICAgYWxzYS11dGlscy1zcGVha2VydGVzdCBcCisgICAgICAgICAgICAgYWxzYS11dGlscy1hc2VxbmV0IFwKKyAgICAgICAgICAgICBhbHNhLXV0aWxzLWFzZXFkdW1wIFwKKyAgICAgICAgICAgICBhbHNhLXV0aWxzLWFsc2FjdGwgXAorICAgICAgICAgICAgIGFsc2EtdXRpbHMtYWxzYWxvb3AgXAorICAgICAgICAgICAgIGFsc2EtdXRpbHMtYWxzYXVjbSBcCisgICAgICAgICAgICAiCisKK1BBQ0tBR0VTICs9ICIke0FMU0FfVVRJTFNfUEtHU30iCitSREVQRU5EU18ke1BOfSArPSAiJHtBTFNBX1VUSUxTX1BLR1N9IgorCitGSUxFU18ke1BOfSA9ICIiCitGSUxFU19hbHNhLXV0aWxzLWFsc2FiYXQgICAgID0gIiR7YmluZGlyfS9hbHNhYmF0IgorRklMRVNfYWxzYS11dGlscy1hbHNhdHBsZyAgICA9ICIke2JpbmRpcn0vYWxzYXRwbGciCitGSUxFU19hbHNhLXV0aWxzLWFwbGF5ICAgICAgID0gIiR7YmluZGlyfS9hcGxheSAke2JpbmRpcn0vYXJlY29yZCIKK0ZJTEVTX2Fsc2EtdXRpbHMtYW1peGVyICAgICAgPSAiJHtiaW5kaXJ9L2FtaXhlciIKK0ZJTEVTX2Fsc2EtdXRpbHMtYWxzYW1peGVyICAgPSAiJHtiaW5kaXJ9L2Fsc2FtaXhlciIKK0ZJTEVTX2Fsc2EtdXRpbHMtc3BlYWtlcnRlc3QgPSAiJHtiaW5kaXJ9L3NwZWFrZXItdGVzdCAke2RhdGFkaXJ9L3NvdW5kcy9hbHNhLyAke2RhdGFkaXJ9L2Fsc2Evc3BlYWtlci10ZXN0LyIKK0ZJTEVTX2Fsc2EtdXRpbHMtbWlkaSAgICAgICAgPSAiJHtiaW5kaXJ9L2FwbGF5bWlkaSAke2JpbmRpcn0vYXJlY29yZG1pZGkgJHtiaW5kaXJ9L2FtaWRpIgorRklMRVNfYWxzYS11dGlscy1hY29ubmVjdCAgICA9ICIke2JpbmRpcn0vYWNvbm5lY3QiCitGSUxFU19hbHNhLXV0aWxzLWFzZXFuZXQgICAgID0gIiR7YmluZGlyfS9hc2VxbmV0IgorRklMRVNfYWxzYS11dGlscy1pZWNzZXQgICAgICA9ICIke2JpbmRpcn0vaWVjc2V0IgorRklMRVNfYWxzYS11dGlscy1hbHNhY3RsICAgICA9ICIke3NiaW5kaXJ9L2Fsc2FjdGwgKi91ZGV2L3J1bGVzLmQgKi8qL3VkZXYvcnVsZXMuZCAke3N5c3RlbWRfdW5pdGRpcn0gJHtsb2NhbHN0YXRlZGlyfS9saWIvYWxzYSAke2RhdGFkaXJ9L2Fsc2EvaW5pdC8iCitGSUxFU19hbHNhLXV0aWxzLWFzZXFkdW1wICAgID0gIiR7YmluZGlyfS9hc2VxZHVtcCIKK0ZJTEVTX2Fsc2EtdXRpbHMtYWxzYWxvb3AgICAgPSAiJHtiaW5kaXJ9L2Fsc2Fsb29wIgorRklMRVNfYWxzYS11dGlscy1hbHNhdWNtICAgICA9ICIke2JpbmRpcn0vYWxzYXVjbSIKKworU1VNTUFSWV9hbHNhLXV0aWxzLWFsc2FiYXQgICAgICA9ICJDb21tYW5kLWxpbmUgc291bmQgdGVzdGVyIGZvciBBTFNBIHNvdW5kIGNhcmQgZHJpdmVyIgorU1VNTUFSWV9hbHNhLXV0aWxzLWFsc2F0cGxnICAgICA9ICJDb252ZXJ0cyB0b3BvbG9neSB0ZXh0IGZpbGVzIGludG8gYmluYXJ5IGZvcm1hdCBmb3Iga2VybmVsIgorU1VNTUFSWV9hbHNhLXV0aWxzLWFwbGF5ICAgICAgICA9ICJQbGF5IChhbmQgcmVjb3JkKSBzb3VuZCBmaWxlcyB1c2luZyBBTFNBIgorU1VNTUFSWV9hbHNhLXV0aWxzLWFtaXhlciAgICAgICA9ICJDb21tYW5kLWxpbmUgY29udHJvbCBmb3IgQUxTQSBtaXhlciBhbmQgc2V0dGluZ3MiCitTVU1NQVJZX2Fsc2EtdXRpbHMtYWxzYW1peGVyICAgID0gIm5jdXJzZXMtYmFzZWQgY29udHJvbCBmb3IgQUxTQSBtaXhlciBhbmQgc2V0dGluZ3MiCitTVU1NQVJZX2Fsc2EtdXRpbHMtc3BlYWtlcnRlc3QgID0gIkFMU0Egc3Vycm91bmQgc3BlYWtlciB0ZXN0IHV0aWxpdHkiCitTVU1NQVJZX2Fsc2EtdXRpbHMtbWlkaSAgICAgICAgID0gIk1pc2NlbGxhbmVvdXMgTUlESSB1dGlsaXRpZXMgZm9yIEFMU0EiCitTVU1NQVJZX2Fsc2EtdXRpbHMtYWNvbm5lY3QgICAgID0gIkFMU0Egc2VxdWVuY2VyIGNvbm5lY3Rpb24gbWFuYWdlciIKK1NVTU1BUllfYWxzYS11dGlscy1hc2VxbmV0ICAgICAgPSAiTmV0d29yayBjbGllbnQvc2VydmVyIGZvciBBTFNBIHNlcXVlbmNlciIKK1NVTU1BUllfYWxzYS11dGlscy1pZWNzZXQgICAgICAgPSAiQUxTQSB1dGlsaXR5IGZvciBzZXR0aW5nL3Nob3dpbmcgSUVDOTU4IChTL1BESUYpIHN0YXR1cyBiaXRzIgorU1VNTUFSWV9hbHNhLXV0aWxzLWFsc2FjdGwgICAgICA9ICJTYXZlcy9yZXN0b3JlcyBBTFNBLXNldHRpbmdzIGluIC9ldGMvYXNvdW5kLnN0YXRlIgorU1VNTUFSWV9hbHNhLXV0aWxzLWFzZXFkdW1wICAgICA9ICJTaG93cyB0aGUgZXZlbnRzIHJlY2VpdmVkIGF0IGFuIEFMU0Egc2VxdWVuY2VyIHBvcnQiCitTVU1NQVJZX2Fsc2EtdXRpbHMtYWxzYWxvb3AgICAgID0gIkFMU0EgUENNIGxvb3BiYWNrIHV0aWxpdHkiCitTVU1NQVJZX2Fsc2EtdXRpbHMtYWxzYXVjbSAgICAgID0gIkFMU0EgVXNlIENhc2UgTWFuYWdlciIKKworUlJFQ09NTUVORFNfYWxzYS11dGlscy1hbHNhY3RsID0gImFsc2Etc3RhdGVzIgorCitBTExPV19FTVBUWV9hbHNhLXV0aWxzID0gIjEiCisKK2RvX2luc3RhbGwoKSB7CisJYXV0b3Rvb2xzX2RvX2luc3RhbGwKKworCSMgV2UgZG9uJ3Qgc2hpcCB0aGlzIGhlcmUgYmVjYXVzZSBpdCByZXF1aXJlcyBhIGRlcGVuZGVuY3kgb24gYmFzaC4KKwkjIFNlZSBhbHNhLXV0aWxzLXNjcmlwdHNfJHtQVn0uYmIKKwlybSAke0R9JHtzYmluZGlyfS9hbHNhY29uZgorCXJtICR7RH0ke3NiaW5kaXJ9L2Fsc2EtaW5mby5zaAorCXJtIC1mICR7RH0ke3NiaW5kaXJ9L2Fsc2FiYXQtdGVzdC5zaAorCisJaWYgJHtAYmIudXRpbHMuY29udGFpbnMoJ1BBQ0tBR0VDT05GSUcnLCAndWRldicsICdmYWxzZScsICd0cnVlJywgZCl9OyB0aGVuCisJCSMgVGhpcyBpcyB3aGVyZSBhbHNhLXV0aWxzIHdpbGwgaW5zdGFsbCBpdHMgcnVsZXMgaWYgd2UgZG9uJ3QgdGVsbCBpdCBhbnl0aGluZyBlbHNlLgorCQlybSAtcmYgJHtEfS9saWIvdWRldgorCQlybWRpciAtLWlnbm9yZS1mYWlsLW9uLW5vbi1lbXB0eSAke0R9L2xpYgorCWZpCit9CmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvZmZtcGVnL2ZmbXBlZy9taXBzNjRfY3B1X2RldGVjdGlvbi5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9mZm1wZWcvZmZtcGVnL21pcHM2NF9jcHVfZGV0ZWN0aW9uLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY5NDI5YWYKLS0tIC9kZXYvbnVsbAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvZmZtcGVnL2ZmbXBlZy9taXBzNjRfY3B1X2RldGVjdGlvbi5wYXRjaApAQCAtMCwwICsxLDMyIEBACitJdCB3aWxsIGFkZCAtbWlwczY0cjYgYW5kIC1taXBzNjRyMiB0byBjbWRsaW5lIHdoaWNoIHdpbGwKK2NhdXNlIGNvbmZsaWN0cworCitpbiBPRSB3ZSB1c2VyIG1pcHMzMnIyIGFuZCBtaXBzNjRyMiBmb3IgbWlwcyBhcmNoIHZlcnNpb25zCitzbyB0aGVyZSBpcyBubyBiZW5lZml0IG9mIGRldGVjdGluZyBpdCBhdXRvbWF0aWNhbGx5IGJ5Citwb2tpbmcgYXQgdG9vbHMgZXNwZWNpYWxseSBpbiBjcm9zcyBlbnYKKworRml4ZXMgZXJyb3JzIGxpa2UKKworbGlua2luZyAtbW5hbj0yMDA4IG1vZHVsZSB3aXRoIHByZXZpb3VzIC1tbmFuPWxlZ2FjeSBtb2R1bGVzCitmYWlsZWQgdG8gbWVyZ2UgdGFyZ2V0IHNwZWNpZmljIGRhdGEgb2YgZmlsZQorCistS2hlbQorVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtPRS1TcGVjaWZpY10KKworSW5kZXg6IGZmbXBlZy0zLjEuMS9jb25maWd1cmUKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBmZm1wZWctMy4xLjEub3JpZy9jb25maWd1cmUKKysrKyBmZm1wZWctMy4xLjEvY29uZmlndXJlCitAQCAtNTIyMCwxMiArNTIyMCw5IEBAIGVsaWYgZW5hYmxlZCBtaXBzOyB0aGVuCisgCisgICAgICMgRW5hYmxlIG1pbmltdW0gSVNBIGJhc2VkIG9uIHNlbGVjdGVkIG9wdGlvbnMKKyAgICAgaWYgZW5hYmxlZCBtaXBzNjQ7IHRoZW4KKy0gICAgICAgIGVuYWJsZWQgbWlwczY0cjYgJiYgY2hlY2tfaW5saW5lX2FzbV9mbGFncyBtaXBzNjRyNiAnImRsc2EgJDAsICQwLCAkMCwgMSInICctbWlwczY0cjYnCisgICAgICAgICBlbmFibGVkIG1pcHM2NHIyICYmIGNoZWNrX2lubGluZV9hc21fZmxhZ3MgbWlwczY0cjIgJyJkZXh0ICQwLCAkMCwgMCwgMSInICctbWlwczY0cjInCisgICAgICAgICBkaXNhYmxlZCBtaXBzNjRyNiAmJiBkaXNhYmxlZCBtaXBzNjRyMiAmJiBjaGVja19pbmxpbmVfYXNtX2ZsYWdzIG1pcHM2NHIxICciZGFkZGkgJDAsICQwLCAwIicgJy1taXBzNjQnCisgICAgIGVsc2UKKy0gICAgICAgIGVuYWJsZWQgbWlwczMycjYgJiYgY2hlY2tfaW5saW5lX2FzbV9mbGFncyBtaXBzMzJyNiAnImF1aSAkMCwgJDAsIDAiJyAnLW1pcHMzMnI2JworLSAgICAgICAgZW5hYmxlZCBtaXBzMzJyNSAmJiBjaGVja19pbmxpbmVfYXNtX2ZsYWdzIG1pcHMzMnI1ICciZXJldG5jIicgJy1taXBzMzJyNScKKyAgICAgICAgIGVuYWJsZWQgbWlwczMycjIgJiYgY2hlY2tfaW5saW5lX2FzbV9mbGFncyBtaXBzMzJyMiAnImV4dCAkMCwgJDAsIDAsIDEiJyAnLW1pcHMzMnIyJworICAgICAgICAgZGlzYWJsZWQgbWlwczMycjYgJiYgZGlzYWJsZWQgbWlwczMycjUgJiYgZGlzYWJsZWQgbWlwczMycjIgJiYgY2hlY2tfaW5saW5lX2FzbV9mbGFncyBtaXBzMzJyMSAnImFkZGkgJDAsICQwLCAwIicgJy1taXBzMzInCisgICAgIGZpCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvZmZtcGVnL2ZmbXBlZ18zLjAuYmIgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvZmZtcGVnL2ZmbXBlZ18zLjAuYmIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDFkZmJiOWIuLjAwMDAwMDAKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2ZmbXBlZy9mZm1wZWdfMy4wLmJiCisrKyAvZGV2L251bGwKQEAgLTEsMTM5ICswLDAgQEAKLVNVTU1BUlkgPSAiQSBjb21wbGV0ZSwgY3Jvc3MtcGxhdGZvcm0gc29sdXRpb24gdG8gcmVjb3JkLCBjb252ZXJ0IGFuZCBzdHJlYW0gYXVkaW8gYW5kIHZpZGVvLiIKLURFU0NSSVBUSU9OID0gIkZGbXBlZyBpcyB0aGUgbGVhZGluZyBtdWx0aW1lZGlhIGZyYW1ld29yaywgYWJsZSB0byBkZWNvZGUsIGVuY29kZSwgdHJhbnNjb2RlLCBcCi0gICAgICAgICAgICAgICBtdXgsIGRlbXV4LCBzdHJlYW0sIGZpbHRlciBhbmQgcGxheSBwcmV0dHkgbXVjaCBhbnl0aGluZyB0aGF0IGh1bWFucyBhbmQgbWFjaGluZXMgXAotICAgICAgICAgICAgICAgaGF2ZSBjcmVhdGVkLiBJdCBzdXBwb3J0cyB0aGUgbW9zdCBvYnNjdXJlIGFuY2llbnQgZm9ybWF0cyB1cCB0byB0aGUgY3V0dGluZyBlZGdlLiIKLUhPTUVQQUdFID0gImh0dHBzOi8vd3d3LmZmbXBlZy5vcmcvIgotU0VDVElPTiA9ICJsaWJzIgotCi1MSUNFTlNFID0gIkdQTHYyKyIKLUxJQ0VOU0VfRkxBR1MgPSAiY29tbWVyY2lhbCIKLQotTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORy5HUEx2MjttZDU9YjIzNGVlNGQ2OWY1ZmNlNDQ4NmE4MGZkYWY0YTQyNjMgXAotICAgICAgICAgICAgICAgICAgICBmaWxlOi8vQ09QWUlORy5HUEx2MzttZDU9ZDMyMjM5YmNiNjczNDYzYWI4NzRlODBkNDdmYWU1MDQgXAotICAgICAgICAgICAgICAgICAgICBmaWxlOi8vQ09QWUlORy5MR1BMdjIuMTttZDU9YmQ3YTQ0MzMyMGFmOGM4MTJlNGMxOGQxYjc5ZGYwMDQgXAotICAgICAgICAgICAgICAgICAgICBmaWxlOi8vQ09QWUlORy5MR1BMdjM7bWQ1PWU2YTYwMGZkNWUxZDljYmRlMmQ5ODM2ODAyMzNhZDAyIgotCi1TUkNfVVJJID0gImh0dHBzOi8vd3d3LmZmbXBlZy5vcmcvcmVsZWFzZXMvJHtCUH0udGFyLnh6IgotCi1TUkNfVVJJW21kNXN1bV0gPSAiZWY5YjY2MzRiYjdjOTIwZWZjOTQwYjRkNTVhZGY3YjIiCi1TUkNfVVJJW3NoYTI1NnN1bV0gPSAiMTJmMzJjZWU0MWM3NDQzNWY2MDhjMzA3OTNmZDYxNmJkZjUzNDY3YmI1MTMyNzhlMjczZTEzNWE0YzU4ZTQ3MCIKLQotIyBCdWlsZCBmYWlscyB3aGVuIHRodW1iIGlzIGVuYWJsZWQ6IGh0dHBzOi8vYnVnemlsbGEueW9jdG9wcm9qZWN0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzcxNwotQVJNX0lOU1RSVUNUSU9OX1NFVCA9ICJhcm0iCi0KLSMgU2hvdWxkIGJlIEFQSSBjb21wYXRpYmxlIHdpdGggbGliYXYgKHdoaWNoIHdhcyBhIGZvcmsgb2YgZmZtcGVnKQotIyBsaWJwb3N0cHJvYyB3YXMgcHJldmlvdXNseSBwYWNrYWdlZCBmcm9tIGEgc2VwYXJhdGUgcmVjaXBlCi1QUk9WSURFUyA9ICJsaWJhdiBsaWJwb3N0cHJvYyIKLQotREVQRU5EUyA9ICJhbHNhLWxpYiB6bGliIGxpYm9nZyB5YXNtLW5hdGl2ZSIKLQotaW5oZXJpdCBhdXRvdG9vbHMgcGtnY29uZmlnCi0KLVBBQ0tBR0VDT05GSUcgPz89ICJhdmRldmljZSBhdmZpbHRlciBhdmNvZGVjIGF2Zm9ybWF0IHN3cmVzYW1wbGUgc3dzY2FsZSBwb3N0cHJvYyBcCi0gICAgICAgICAgICAgICAgICAgYnpsaWIgZ3BsIGx6bWEgdGhlb3JhIHgyNjQgXAotICAgICAgICAgICAgICAgICAgICR7QGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCAneDExJywgJ3gxMSB4dicsICcnLCBkKX0iCi0KLSMgbGlicmFyaWVzIHRvIGJ1aWxkIGluIGFkZGl0aW9uIHRvIGF2dXRpbAotUEFDS0FHRUNPTkZJR1thdmRldmljZV0gPSAiLS1lbmFibGUtYXZkZXZpY2UsLS1kaXNhYmxlLWF2ZGV2aWNlIgotUEFDS0FHRUNPTkZJR1thdmZpbHRlcl0gPSAiLS1lbmFibGUtYXZmaWx0ZXIsLS1kaXNhYmxlLWF2ZmlsdGVyIgotUEFDS0FHRUNPTkZJR1thdmNvZGVjXSA9ICItLWVuYWJsZS1hdmNvZGVjLC0tZGlzYWJsZS1hdmNvZGVjIgotUEFDS0FHRUNPTkZJR1thdmZvcm1hdF0gPSAiLS1lbmFibGUtYXZmb3JtYXQsLS1kaXNhYmxlLWF2Zm9ybWF0IgotUEFDS0FHRUNPTkZJR1tzd3Jlc2FtcGxlXSA9ICItLWVuYWJsZS1zd3Jlc2FtcGxlLC0tZGlzYWJsZS1zd3Jlc2FtcGxlIgotUEFDS0FHRUNPTkZJR1tzd3NjYWxlXSA9ICItLWVuYWJsZS1zd3NjYWxlLC0tZGlzYWJsZS1zd3NjYWxlIgotUEFDS0FHRUNPTkZJR1twb3N0cHJvY10gPSAiLS1lbmFibGUtcG9zdHByb2MsLS1kaXNhYmxlLXBvc3Rwcm9jIgotUEFDS0FHRUNPTkZJR1thdnJlc2FtcGxlXSA9ICItLWVuYWJsZS1hdnJlc2FtcGxlLC0tZGlzYWJsZS1hdnJlc2FtcGxlIgotCi0jIGZlYXR1cmVzIHRvIHN1cHBvcnQKLVBBQ0tBR0VDT05GSUdbYnpsaWJdID0gIi0tZW5hYmxlLWJ6bGliLC0tZGlzYWJsZS1iemxpYixiemlwMiIKLVBBQ0tBR0VDT05GSUdbZmFhY10gPSAiLS1lbmFibGUtbGliZmFhYywtLWRpc2FibGUtbGliZmFhYyxmYWFjIgotUEFDS0FHRUNPTkZJR1tncGxdID0gIi0tZW5hYmxlLWdwbCwtLWRpc2FibGUtZ3BsIgotUEFDS0FHRUNPTkZJR1tnc21dID0gIi0tZW5hYmxlLWxpYmdzbSwtLWRpc2FibGUtbGliZ3NtLGxpYmdzbSIKLVBBQ0tBR0VDT05GSUdbamFja10gPSAiLS1lbmFibGUtaW5kZXY9amFjaywtLWRpc2FibGUtaW5kZXY9amFjayxqYWNrIgotUEFDS0FHRUNPTkZJR1tsaWJ2b3JiaXNdID0gIi0tZW5hYmxlLWxpYnZvcmJpcywtLWRpc2FibGUtbGlidm9yYmlzLGxpYnZvcmJpcyIKLVBBQ0tBR0VDT05GSUdbbHptYV0gPSAiLS1lbmFibGUtbHptYSwtLWRpc2FibGUtbHptYSx4eiIKLVBBQ0tBR0VDT05GSUdbbXAzbGFtZV0gPSAiLS1lbmFibGUtbGlibXAzbGFtZSwtLWRpc2FibGUtbGlibXAzbGFtZSxsYW1lIgotUEFDS0FHRUNPTkZJR1tvcGVuc3NsXSA9ICItLWVuYWJsZS1vcGVuc3NsLC0tZGlzYWJsZS1vcGVuc3NsLG9wZW5zc2wiCi1QQUNLQUdFQ09ORklHW3NjaHJvZWRpbmdlcl0gPSAiLS1lbmFibGUtbGlic2Nocm9lZGluZ2VyLC0tZGlzYWJsZS1saWJzY2hyb2VkaW5nZXIsc2Nocm9lZGluZ2VyIgotUEFDS0FHRUNPTkZJR1tzcGVleF0gPSAiLS1lbmFibGUtbGlic3BlZXgsLS1kaXNhYmxlLWxpYnNwZWV4LHNwZWV4IgotUEFDS0FHRUNPTkZJR1t0aGVvcmFdID0gIi0tZW5hYmxlLWxpYnRoZW9yYSwtLWRpc2FibGUtbGlidGhlb3JhLGxpYnRoZW9yYSIKLVBBQ0tBR0VDT05GSUdbdmFhcGldID0gIi0tZW5hYmxlLXZhYXBpLC0tZGlzYWJsZS12YWFwaSxsaWJ2YSIKLVBBQ0tBR0VDT05GSUdbdnB4XSA9ICItLWVuYWJsZS1saWJ2cHgsLS1kaXNhYmxlLWxpYnZweCxsaWJ2cHgiCi1QQUNLQUdFQ09ORklHW3gxMV0gPSAiLS1lbmFibGUteDExZ3JhYiwtLWRpc2FibGUteDExZ3JhYix2aXJ0dWFsL2xpYngxMSBsaWJ4Zml4ZXMgbGlieGV4dCB4cHJvdG8gdmlydHVhbC9saWJzZGwiCi1QQUNLQUdFQ09ORklHW3gyNjRdID0gIi0tZW5hYmxlLWxpYngyNjQsLS1kaXNhYmxlLWxpYngyNjQseDI2NCIKLVBBQ0tBR0VDT05GSUdbeHZdID0gIi0tZW5hYmxlLW91dGRldj14diwtLWRpc2FibGUtb3V0ZGV2PXh2LGxpYnh2IgotCi0jIENoZWNrIGNvZGVjcyB0aGF0IHJlcXVpcmUgLS1lbmFibGUtbm9uZnJlZQotVVNFX05PTkZSRUUgPSAiJHtAYmIudXRpbHMuY29udGFpbnNfYW55KCdQQUNLQUdFQ09ORklHJywgWyAnZmFhYycsICdvcGVuc3NsJyBdLCAneWVzJywgJycsIGQpfSIKLQotRVhUUkFfT0VDT05GID0gIiBcCi0gICAgLS1kaXNhYmxlLXN0cmlwcGluZyBcCi0gICAgLS1lbmFibGUtcGljIFwKLSAgICAtLWVuYWJsZS1zaGFyZWQgXAotICAgIC0tZW5hYmxlLXB0aHJlYWRzIFwKLSAgICAke0BiYi51dGlscy5jb250YWlucygnVVNFX05PTkZSRUUnLCAneWVzJywgJy0tZW5hYmxlLW5vbmZyZWUnLCAnJywgZCl9IFwKLSAgICBcCi0gICAgLS1jcm9zcy1wcmVmaXg9JHtUQVJHRVRfUFJFRklYfSBcCi0gICAgXAotICAgIC0tbGQ9IiR7Q0NMRH0iIFwKLSAgICAtLWFyY2g9JHtUQVJHRVRfQVJDSH0gXAotICAgIC0tdGFyZ2V0LW9zPSJsaW51eCIgXAotICAgIC0tZW5hYmxlLWNyb3NzLWNvbXBpbGUgXAotICAgIC0tZXh0cmEtY2ZsYWdzPSIke1RBUkdFVF9DRkxBR1N9ICR7SE9TVF9DQ19BUkNIfSR7VE9PTENIQUlOX09QVElPTlN9IiBcCi0gICAgLS1leHRyYS1sZGZsYWdzPSIke1RBUkdFVF9MREZMQUdTfSIgXAotICAgIC0tc3lzcm9vdD0iJHtTVEFHSU5HX0RJUl9UQVJHRVR9IiBcCi0gICAgLS1lbmFibGUtaGFyZGNvZGVkLXRhYmxlcyBcCi0gICAgJHtFWFRSQV9GRkNPTkZ9IFwKLSAgICAtLWxpYmRpcj0ke2xpYmRpcn0gXAotICAgIC0tc2hsaWJkaXI9JHtsaWJkaXJ9IFwKLSAgICAtLWRhdGFkaXI9JHtkYXRhZGlyfS9mZm1wZWcgXAotIgotCi1kb19jb25maWd1cmUoKSB7Ci0gICAgJHtTfS9jb25maWd1cmUgJHtFWFRSQV9PRUNPTkZ9Ci19Ci0KLVBBQ0tBR0VTX0RZTkFNSUMgKz0gIl5saWIoYXYoY29kZWN8ZGV2aWNlfGZpbHRlcnxmb3JtYXR8dXRpbHxyZXNhbXBsZSl8c3dzY2FsZXxzd3Jlc2FtcGxlfHBvc3Rwcm9jKS4qIgotCi0jIGZmbXBlZyBkaXNhYmxlcyBQSUMgb24gc29tZSBwbGF0Zm9ybXMgKGUuZy4geDg2LTMyKQotSU5TQU5FX1NLSVBfJHtNTFBSRUZJWH1saWJhdmNvZGVjID0gInRleHRyZWwiCi1JTlNBTkVfU0tJUF8ke01MUFJFRklYfWxpYmF2ZGV2aWNlID0gInRleHRyZWwiCi1JTlNBTkVfU0tJUF8ke01MUFJFRklYfWxpYmF2ZmlsdGVyID0gInRleHRyZWwiCi1JTlNBTkVfU0tJUF8ke01MUFJFRklYfWxpYmF2Zm9ybWF0ID0gInRleHRyZWwiCi1JTlNBTkVfU0tJUF8ke01MUFJFRklYfWxpYmF2dXRpbCA9ICJ0ZXh0cmVsIgotSU5TQU5FX1NLSVBfJHtNTFBSRUZJWH1saWJhdnJlc2FtcGxlID0gInRleHRyZWwiCi1JTlNBTkVfU0tJUF8ke01MUFJFRklYfWxpYnN3c2NhbGUgPSAidGV4dHJlbCIKLUlOU0FORV9TS0lQXyR7TUxQUkVGSVh9bGlic3dyZXNhbXBsZSA9ICJ0ZXh0cmVsIgotSU5TQU5FX1NLSVBfJHtNTFBSRUZJWH1saWJwb3N0cHJvYyA9ICJ0ZXh0cmVsIgotCi1weXRob24gcG9wdWxhdGVfcGFja2FnZXNfcHJlcGVuZCgpIHsKLSAgICBhdl9saWJkaXIgPSBkLmV4cGFuZCgnJHtsaWJkaXJ9JykKLSAgICBhdl9wa2djb25maWcgPSBkLmV4cGFuZCgnJHtsaWJkaXJ9L3BrZ2NvbmZpZycpCi0KLSAgICAjIFJ1bnRpbWUgcGFja2FnZQotICAgIGRvX3NwbGl0X3BhY2thZ2VzKGQsIGF2X2xpYmRpciwgJ15saWIoLiopXC5zb1wuLionLAotICAgICAgICAgICAgICAgICAgICAgIG91dHB1dF9wYXR0ZXJuPSdsaWIlcycsCi0gICAgICAgICAgICAgICAgICAgICAgZGVzY3JpcHRpb249J2xpYmF2ICVzIGxpYnJhcnknLAotICAgICAgICAgICAgICAgICAgICAgIGV4dHJhX2RlcGVuZHM9JycsCi0gICAgICAgICAgICAgICAgICAgICAgcHJlcGVuZD1UcnVlLAotICAgICAgICAgICAgICAgICAgICAgIGFsbG93X2xpbmtzPVRydWUpCi0KLSAgICAjIERldmVsb3BtZW50IHBhY2thZ2VzICgtZGV2LCAtc3RhdGljZGV2KQotICAgIGRvX3NwbGl0X3BhY2thZ2VzKGQsIGF2X2xpYmRpciwgJ15saWIoLiopXC5zbyQnLAotICAgICAgICAgICAgICAgICAgICAgIG91dHB1dF9wYXR0ZXJuPSdsaWIlcy1kZXYnLAotICAgICAgICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uPSdsaWJhdiAlcyBkZXZlbG9wbWVudCBwYWNrYWdlJywKLSAgICAgICAgICAgICAgICAgICAgICBleHRyYV9kZXBlbmRzPScke1BOfS1kZXYnLAotICAgICAgICAgICAgICAgICAgICAgIHByZXBlbmQ9VHJ1ZSwKLSAgICAgICAgICAgICAgICAgICAgICBhbGxvd19saW5rcz1UcnVlKQotICAgIGRvX3NwbGl0X3BhY2thZ2VzKGQsIGF2X3BrZ2NvbmZpZywgJ15saWIoLiopXC5wYyQnLAotICAgICAgICAgICAgICAgICAgICAgIG91dHB1dF9wYXR0ZXJuPSdsaWIlcy1kZXYnLAotICAgICAgICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uPSdsaWJhdiAlcyBkZXZlbG9wbWVudCBwYWNrYWdlJywKLSAgICAgICAgICAgICAgICAgICAgICBleHRyYV9kZXBlbmRzPScke1BOfS1kZXYnLAotICAgICAgICAgICAgICAgICAgICAgIHByZXBlbmQ9VHJ1ZSkKLSAgICBkb19zcGxpdF9wYWNrYWdlcyhkLCBhdl9saWJkaXIsICdebGliKC4qKVwuYSQnLAotICAgICAgICAgICAgICAgICAgICAgIG91dHB1dF9wYXR0ZXJuPSdsaWIlcy1zdGF0aWNkZXYnLAotICAgICAgICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uPSdsaWJhdiAlcyBkZXZlbG9wbWVudCBwYWNrYWdlIC0gc3RhdGljIGxpYnJhcnknLAotICAgICAgICAgICAgICAgICAgICAgIGV4dHJhX2RlcGVuZHM9JyR7UE59LWRldicsCi0gICAgICAgICAgICAgICAgICAgICAgcHJlcGVuZD1UcnVlLAotICAgICAgICAgICAgICAgICAgICAgIGFsbG93X2xpbmtzPVRydWUpCi0KLX0KZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9mZm1wZWcvZmZtcGVnXzMuMS4zLmJiIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2ZmbXBlZy9mZm1wZWdfMy4xLjMuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDUwZjFlZQotLS0gL2Rldi9udWxsCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9mZm1wZWcvZmZtcGVnXzMuMS4zLmJiCkBAIC0wLDAgKzEsMTQyIEBACitTVU1NQVJZID0gIkEgY29tcGxldGUsIGNyb3NzLXBsYXRmb3JtIHNvbHV0aW9uIHRvIHJlY29yZCwgY29udmVydCBhbmQgc3RyZWFtIGF1ZGlvIGFuZCB2aWRlby4iCitERVNDUklQVElPTiA9ICJGRm1wZWcgaXMgdGhlIGxlYWRpbmcgbXVsdGltZWRpYSBmcmFtZXdvcmssIGFibGUgdG8gZGVjb2RlLCBlbmNvZGUsIHRyYW5zY29kZSwgXAorICAgICAgICAgICAgICAgbXV4LCBkZW11eCwgc3RyZWFtLCBmaWx0ZXIgYW5kIHBsYXkgcHJldHR5IG11Y2ggYW55dGhpbmcgdGhhdCBodW1hbnMgYW5kIG1hY2hpbmVzIFwKKyAgICAgICAgICAgICAgIGhhdmUgY3JlYXRlZC4gSXQgc3VwcG9ydHMgdGhlIG1vc3Qgb2JzY3VyZSBhbmNpZW50IGZvcm1hdHMgdXAgdG8gdGhlIGN1dHRpbmcgZWRnZS4iCitIT01FUEFHRSA9ICJodHRwczovL3d3dy5mZm1wZWcub3JnLyIKK1NFQ1RJT04gPSAibGlicyIKKworTElDRU5TRSA9ICJHUEx2MisiCitMSUNFTlNFX0ZMQUdTID0gImNvbW1lcmNpYWwiCisKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkcuR1BMdjI7bWQ1PWIyMzRlZTRkNjlmNWZjZTQ0ODZhODBmZGFmNGE0MjYzIFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL0NPUFlJTkcuR1BMdjM7bWQ1PWQzMjIzOWJjYjY3MzQ2M2FiODc0ZTgwZDQ3ZmFlNTA0IFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL0NPUFlJTkcuTEdQTHYyLjE7bWQ1PWJkN2E0NDMzMjBhZjhjODEyZTRjMThkMWI3OWRmMDA0IFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL0NPUFlJTkcuTEdQTHYzO21kNT1lNmE2MDBmZDVlMWQ5Y2JkZTJkOTgzNjgwMjMzYWQwMiIKKworU1JDX1VSSSA9ICJodHRwczovL3d3dy5mZm1wZWcub3JnL3JlbGVhc2VzLyR7QlB9LnRhci54eiBcCisgICAgICAgICAgIGZpbGU6Ly9taXBzNjRfY3B1X2RldGVjdGlvbi5wYXRjaCBcCisgICAgICAgICAgIgorU1JDX1VSSVttZDVzdW1dID0gIjcyNzY5MzE2YTRiMmI4ODA5YzdmNmQ1YThiNjc2NmY0IgorU1JDX1VSSVtzaGEyNTZzdW1dID0gImY4NTc1YzA3MWUyYTY0NDM3YWViNzBjOGMwMzBiMzg1Y2RkYmUwYjVjZGUyMGM5YjE4YTZkZWY4NDAxMjg4MjIiCisKKyMgQnVpbGQgZmFpbHMgd2hlbiB0aHVtYiBpcyBlbmFibGVkOiBodHRwczovL2J1Z3ppbGxhLnlvY3RvcHJvamVjdC5vcmcvc2hvd19idWcuY2dpP2lkPTc3MTcKK0FSTV9JTlNUUlVDVElPTl9TRVQgPSAiYXJtIgorCisjIFNob3VsZCBiZSBBUEkgY29tcGF0aWJsZSB3aXRoIGxpYmF2ICh3aGljaCB3YXMgYSBmb3JrIG9mIGZmbXBlZykKKyMgbGlicG9zdHByb2Mgd2FzIHByZXZpb3VzbHkgcGFja2FnZWQgZnJvbSBhIHNlcGFyYXRlIHJlY2lwZQorUFJPVklERVMgPSAibGliYXYgbGlicG9zdHByb2MiCisKK0RFUEVORFMgPSAiYWxzYS1saWIgemxpYiBsaWJvZ2cgeWFzbS1uYXRpdmUiCisKK2luaGVyaXQgYXV0b3Rvb2xzIHBrZ2NvbmZpZworCitQQUNLQUdFQ09ORklHID8/PSAiYXZkZXZpY2UgYXZmaWx0ZXIgYXZjb2RlYyBhdmZvcm1hdCBzd3Jlc2FtcGxlIHN3c2NhbGUgcG9zdHByb2MgXAorICAgICAgICAgICAgICAgICAgIGJ6bGliIGdwbCBsem1hIHRoZW9yYSB4MjY0IFwKKyAgICAgICAgICAgICAgICAgICAke0BiYi51dGlscy5jb250YWlucygnRElTVFJPX0ZFQVRVUkVTJywgJ3gxMScsICd4MTEgeHYnLCAnJywgZCl9IgorCisjIGxpYnJhcmllcyB0byBidWlsZCBpbiBhZGRpdGlvbiB0byBhdnV0aWwKK1BBQ0tBR0VDT05GSUdbYXZkZXZpY2VdID0gIi0tZW5hYmxlLWF2ZGV2aWNlLC0tZGlzYWJsZS1hdmRldmljZSIKK1BBQ0tBR0VDT05GSUdbYXZmaWx0ZXJdID0gIi0tZW5hYmxlLWF2ZmlsdGVyLC0tZGlzYWJsZS1hdmZpbHRlciIKK1BBQ0tBR0VDT05GSUdbYXZjb2RlY10gPSAiLS1lbmFibGUtYXZjb2RlYywtLWRpc2FibGUtYXZjb2RlYyIKK1BBQ0tBR0VDT05GSUdbYXZmb3JtYXRdID0gIi0tZW5hYmxlLWF2Zm9ybWF0LC0tZGlzYWJsZS1hdmZvcm1hdCIKK1BBQ0tBR0VDT05GSUdbc3dyZXNhbXBsZV0gPSAiLS1lbmFibGUtc3dyZXNhbXBsZSwtLWRpc2FibGUtc3dyZXNhbXBsZSIKK1BBQ0tBR0VDT05GSUdbc3dzY2FsZV0gPSAiLS1lbmFibGUtc3dzY2FsZSwtLWRpc2FibGUtc3dzY2FsZSIKK1BBQ0tBR0VDT05GSUdbcG9zdHByb2NdID0gIi0tZW5hYmxlLXBvc3Rwcm9jLC0tZGlzYWJsZS1wb3N0cHJvYyIKK1BBQ0tBR0VDT05GSUdbYXZyZXNhbXBsZV0gPSAiLS1lbmFibGUtYXZyZXNhbXBsZSwtLWRpc2FibGUtYXZyZXNhbXBsZSIKKworIyBmZWF0dXJlcyB0byBzdXBwb3J0CitQQUNLQUdFQ09ORklHW2J6bGliXSA9ICItLWVuYWJsZS1iemxpYiwtLWRpc2FibGUtYnpsaWIsYnppcDIiCitQQUNLQUdFQ09ORklHW2ZhYWNdID0gIi0tZW5hYmxlLWxpYmZhYWMsLS1kaXNhYmxlLWxpYmZhYWMsZmFhYyIKK1BBQ0tBR0VDT05GSUdbZ3BsXSA9ICItLWVuYWJsZS1ncGwsLS1kaXNhYmxlLWdwbCIKK1BBQ0tBR0VDT05GSUdbZ3NtXSA9ICItLWVuYWJsZS1saWJnc20sLS1kaXNhYmxlLWxpYmdzbSxsaWJnc20iCitQQUNLQUdFQ09ORklHW2phY2tdID0gIi0tZW5hYmxlLWluZGV2PWphY2ssLS1kaXNhYmxlLWluZGV2PWphY2ssamFjayIKK1BBQ0tBR0VDT05GSUdbbGlidm9yYmlzXSA9ICItLWVuYWJsZS1saWJ2b3JiaXMsLS1kaXNhYmxlLWxpYnZvcmJpcyxsaWJ2b3JiaXMiCitQQUNLQUdFQ09ORklHW2x6bWFdID0gIi0tZW5hYmxlLWx6bWEsLS1kaXNhYmxlLWx6bWEseHoiCitQQUNLQUdFQ09ORklHW21wM2xhbWVdID0gIi0tZW5hYmxlLWxpYm1wM2xhbWUsLS1kaXNhYmxlLWxpYm1wM2xhbWUsbGFtZSIKK1BBQ0tBR0VDT05GSUdbb3BlbnNzbF0gPSAiLS1lbmFibGUtb3BlbnNzbCwtLWRpc2FibGUtb3BlbnNzbCxvcGVuc3NsIgorUEFDS0FHRUNPTkZJR1tzY2hyb2VkaW5nZXJdID0gIi0tZW5hYmxlLWxpYnNjaHJvZWRpbmdlciwtLWRpc2FibGUtbGlic2Nocm9lZGluZ2VyLHNjaHJvZWRpbmdlciIKK1BBQ0tBR0VDT05GSUdbc3BlZXhdID0gIi0tZW5hYmxlLWxpYnNwZWV4LC0tZGlzYWJsZS1saWJzcGVleCxzcGVleCIKK1BBQ0tBR0VDT05GSUdbdGhlb3JhXSA9ICItLWVuYWJsZS1saWJ0aGVvcmEsLS1kaXNhYmxlLWxpYnRoZW9yYSxsaWJ0aGVvcmEiCitQQUNLQUdFQ09ORklHW3ZhYXBpXSA9ICItLWVuYWJsZS12YWFwaSwtLWRpc2FibGUtdmFhcGksbGlidmEiCitQQUNLQUdFQ09ORklHW3ZweF0gPSAiLS1lbmFibGUtbGlidnB4LC0tZGlzYWJsZS1saWJ2cHgsbGlidnB4IgorUEFDS0FHRUNPTkZJR1t4MTFdID0gIi0tZW5hYmxlLXgxMWdyYWIsLS1kaXNhYmxlLXgxMWdyYWIsdmlydHVhbC9saWJ4MTEgbGlieGZpeGVzIGxpYnhleHQgeHByb3RvIHZpcnR1YWwvbGlic2RsIgorUEFDS0FHRUNPTkZJR1t4MjY0XSA9ICItLWVuYWJsZS1saWJ4MjY0LC0tZGlzYWJsZS1saWJ4MjY0LHgyNjQiCitQQUNLQUdFQ09ORklHW3h2XSA9ICItLWVuYWJsZS1vdXRkZXY9eHYsLS1kaXNhYmxlLW91dGRldj14dixsaWJ4diIKKworIyBDaGVjayBjb2RlY3MgdGhhdCByZXF1aXJlIC0tZW5hYmxlLW5vbmZyZWUKK1VTRV9OT05GUkVFID0gIiR7QGJiLnV0aWxzLmNvbnRhaW5zX2FueSgnUEFDS0FHRUNPTkZJRycsIFsgJ2ZhYWMnLCAnb3BlbnNzbCcgXSwgJ3llcycsICcnLCBkKX0iCisKK0VYVFJBX09FQ09ORiA9ICIgXAorICAgIC0tZGlzYWJsZS1zdHJpcHBpbmcgXAorICAgIC0tZW5hYmxlLXBpYyBcCisgICAgLS1lbmFibGUtc2hhcmVkIFwKKyAgICAtLWVuYWJsZS1wdGhyZWFkcyBcCisgICAgJHtAYmIudXRpbHMuY29udGFpbnMoJ1VTRV9OT05GUkVFJywgJ3llcycsICctLWVuYWJsZS1ub25mcmVlJywgJycsIGQpfSBcCisgICAgXAorICAgIC0tY3Jvc3MtcHJlZml4PSR7VEFSR0VUX1BSRUZJWH0gXAorICAgIFwKKyAgICAtLWxkPSIke0NDTER9IiBcCisgICAgLS1jYz0iJHtDQ30iIFwKKyAgICAtLWN4eD0iJHtDWFh9IiBcCisgICAgLS1hcmNoPSR7VEFSR0VUX0FSQ0h9IFwKKyAgICAtLXRhcmdldC1vcz0ibGludXgiIFwKKyAgICAtLWVuYWJsZS1jcm9zcy1jb21waWxlIFwKKyAgICAtLWV4dHJhLWNmbGFncz0iJHtUQVJHRVRfQ0ZMQUdTfSAke0hPU1RfQ0NfQVJDSH0ke1RPT0xDSEFJTl9PUFRJT05TfSIgXAorICAgIC0tZXh0cmEtbGRmbGFncz0iJHtUQVJHRVRfTERGTEFHU30iIFwKKyAgICAtLXN5c3Jvb3Q9IiR7U1RBR0lOR19ESVJfVEFSR0VUfSIgXAorICAgIC0tZW5hYmxlLWhhcmRjb2RlZC10YWJsZXMgXAorICAgICR7RVhUUkFfRkZDT05GfSBcCisgICAgLS1saWJkaXI9JHtsaWJkaXJ9IFwKKyAgICAtLXNobGliZGlyPSR7bGliZGlyfSBcCisgICAgLS1kYXRhZGlyPSR7ZGF0YWRpcn0vZmZtcGVnIFwKKyIKKworZG9fY29uZmlndXJlKCkgeworICAgICR7U30vY29uZmlndXJlICR7RVhUUkFfT0VDT05GfQorfQorCitQQUNLQUdFU19EWU5BTUlDICs9ICJebGliKGF2KGNvZGVjfGRldmljZXxmaWx0ZXJ8Zm9ybWF0fHV0aWx8cmVzYW1wbGUpfHN3c2NhbGV8c3dyZXNhbXBsZXxwb3N0cHJvYykuKiIKKworIyBmZm1wZWcgZGlzYWJsZXMgUElDIG9uIHNvbWUgcGxhdGZvcm1zIChlLmcuIHg4Ni0zMikKK0lOU0FORV9TS0lQXyR7TUxQUkVGSVh9bGliYXZjb2RlYyA9ICJ0ZXh0cmVsIgorSU5TQU5FX1NLSVBfJHtNTFBSRUZJWH1saWJhdmRldmljZSA9ICJ0ZXh0cmVsIgorSU5TQU5FX1NLSVBfJHtNTFBSRUZJWH1saWJhdmZpbHRlciA9ICJ0ZXh0cmVsIgorSU5TQU5FX1NLSVBfJHtNTFBSRUZJWH1saWJhdmZvcm1hdCA9ICJ0ZXh0cmVsIgorSU5TQU5FX1NLSVBfJHtNTFBSRUZJWH1saWJhdnV0aWwgPSAidGV4dHJlbCIKK0lOU0FORV9TS0lQXyR7TUxQUkVGSVh9bGliYXZyZXNhbXBsZSA9ICJ0ZXh0cmVsIgorSU5TQU5FX1NLSVBfJHtNTFBSRUZJWH1saWJzd3NjYWxlID0gInRleHRyZWwiCitJTlNBTkVfU0tJUF8ke01MUFJFRklYfWxpYnN3cmVzYW1wbGUgPSAidGV4dHJlbCIKK0lOU0FORV9TS0lQXyR7TUxQUkVGSVh9bGlicG9zdHByb2MgPSAidGV4dHJlbCIKKworcHl0aG9uIHBvcHVsYXRlX3BhY2thZ2VzX3ByZXBlbmQoKSB7CisgICAgYXZfbGliZGlyID0gZC5leHBhbmQoJyR7bGliZGlyfScpCisgICAgYXZfcGtnY29uZmlnID0gZC5leHBhbmQoJyR7bGliZGlyfS9wa2djb25maWcnKQorCisgICAgIyBSdW50aW1lIHBhY2thZ2UKKyAgICBkb19zcGxpdF9wYWNrYWdlcyhkLCBhdl9saWJkaXIsICdebGliKC4qKVwuc29cLi4qJywKKyAgICAgICAgICAgICAgICAgICAgICBvdXRwdXRfcGF0dGVybj0nbGliJXMnLAorICAgICAgICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uPSdsaWJhdiAlcyBsaWJyYXJ5JywKKyAgICAgICAgICAgICAgICAgICAgICBleHRyYV9kZXBlbmRzPScnLAorICAgICAgICAgICAgICAgICAgICAgIHByZXBlbmQ9VHJ1ZSwKKyAgICAgICAgICAgICAgICAgICAgICBhbGxvd19saW5rcz1UcnVlKQorCisgICAgIyBEZXZlbG9wbWVudCBwYWNrYWdlcyAoLWRldiwgLXN0YXRpY2RldikKKyAgICBkb19zcGxpdF9wYWNrYWdlcyhkLCBhdl9saWJkaXIsICdebGliKC4qKVwuc28kJywKKyAgICAgICAgICAgICAgICAgICAgICBvdXRwdXRfcGF0dGVybj0nbGliJXMtZGV2JywKKyAgICAgICAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbj0nbGliYXYgJXMgZGV2ZWxvcG1lbnQgcGFja2FnZScsCisgICAgICAgICAgICAgICAgICAgICAgZXh0cmFfZGVwZW5kcz0nJHtQTn0tZGV2JywKKyAgICAgICAgICAgICAgICAgICAgICBwcmVwZW5kPVRydWUsCisgICAgICAgICAgICAgICAgICAgICAgYWxsb3dfbGlua3M9VHJ1ZSkKKyAgICBkb19zcGxpdF9wYWNrYWdlcyhkLCBhdl9wa2djb25maWcsICdebGliKC4qKVwucGMkJywKKyAgICAgICAgICAgICAgICAgICAgICBvdXRwdXRfcGF0dGVybj0nbGliJXMtZGV2JywKKyAgICAgICAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbj0nbGliYXYgJXMgZGV2ZWxvcG1lbnQgcGFja2FnZScsCisgICAgICAgICAgICAgICAgICAgICAgZXh0cmFfZGVwZW5kcz0nJHtQTn0tZGV2JywKKyAgICAgICAgICAgICAgICAgICAgICBwcmVwZW5kPVRydWUpCisgICAgZG9fc3BsaXRfcGFja2FnZXMoZCwgYXZfbGliZGlyLCAnXmxpYiguKilcLmEkJywKKyAgICAgICAgICAgICAgICAgICAgICBvdXRwdXRfcGF0dGVybj0nbGliJXMtc3RhdGljZGV2JywKKyAgICAgICAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbj0nbGliYXYgJXMgZGV2ZWxvcG1lbnQgcGFja2FnZSAtIHN0YXRpYyBsaWJyYXJ5JywKKyAgICAgICAgICAgICAgICAgICAgICBleHRyYV9kZXBlbmRzPScke1BOfS1kZXYnLAorICAgICAgICAgICAgICAgICAgICAgIHByZXBlbmQ9VHJ1ZSwKKyAgICAgICAgICAgICAgICAgICAgICBhbGxvd19saW5rcz1UcnVlKQorCit9CmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvZ3N0cmVhbWVyL2dzdC1wbGF5ZXIvMDAwMS1ndGstcGxheS1wcm92aWRlLXNpbWlsYXItYmVoYXZpb3VyLWZvci1xdWl0LWFuZC1jbG9zLnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2dzdHJlYW1lci9nc3QtcGxheWVyLzAwMDEtZ3RrLXBsYXktcHJvdmlkZS1zaW1pbGFyLWJlaGF2aW91ci1mb3ItcXVpdC1hbmQtY2xvcy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lM2YxYzRmCi0tLSAvZGV2L251bGwKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2dzdHJlYW1lci9nc3QtcGxheWVyLzAwMDEtZ3RrLXBsYXktcHJvdmlkZS1zaW1pbGFyLWJlaGF2aW91ci1mb3ItcXVpdC1hbmQtY2xvcy5wYXRjaApAQCAtMCwwICsxLDMyIEBACitGcm9tIDIyMGMyNjU5YTQ1ZGQzNTQyNzBhNDY1YzQ1MTk3OTcwZGFlNWY1NDggTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiAiTWF4aW4gQi4gSm9obiIgPG1heGluLmpvaG5AaW50ZWwuY29tPgorRGF0ZTogRnJpLCA1IEF1ZyAyMDE2IDE3OjUyOjE4ICswMzAwCitTdWJqZWN0OiBbUEFUQ0hdIGd0ay1wbGF5OiBwcm92aWRlIHNpbWlsYXIgYmVoYXZpb3VyIGZvciBxdWl0IGFuZCBjbG9zZQorCitJbiB4ODYgdGFyZ2V0cywgZ3RrLXBsYXkganVzdCBwYXVzZSByYXRoZXIgdGhhbiBxdWl0dGluZyB0aGUgYXBwbGljYXRpb24KK3doZW4gd2UgY2xpY2sgdGhlIGNsb3NlIGJ1dHRvbiAoZGVsZXRlLWV2ZW50KS4gQ2hhbmdlIHRoZSBjYWxsYmFjayBmdW5jdGlvbgordG8gZ2V0IHNpbWlsYXIgYmVoYXZpb3VyIHdoZW4gd2UgY2xpY2sgb24gIlF1aXQiIG1lbnUgb3B0aW9uLgorCitVcHN0cmVhbS1TdGF0dXM6IEFjY2VwdGVkCisKK1NpZ25lZC1vZmYtYnk6IE1heGluIEIuIEpvaG4gPG1heGluLmpvaG5AaW50ZWwuY29tPgorLS0tCisgZ3RrL2d0ay1wbGF5LmMgfCAyICstCisgMSBmaWxlIGNoYW5nZWQsIDEgaW5zZXJ0aW9uKCspLCAxIGRlbGV0aW9uKC0pCisKK2RpZmYgLS1naXQgYS9ndGsvZ3RrLXBsYXkuYyBiL2d0ay9ndGstcGxheS5jCitpbmRleCBhNTIwYmVmLi4xNmFmYzZiIDEwMDY0NAorLS0tIGEvZ3RrL2d0ay1wbGF5LmMKKysrKyBiL2d0ay9ndGstcGxheS5jCitAQCAtMTc3LDcgKzE3Nyw3IEBAIGxvYWRfZnJvbV9idWlsZGVyIChjb25zdCBnY2hhciAqIGZpbGVuYW1lLCBnYm9vbGVhbiByZWdpc3Rlcl9zaWdfaGFuZGxlciwKKyBzdGF0aWMgdm9pZAorIGRlbGV0ZV9ldmVudF9jYiAoR3RrV2lkZ2V0ICogd2lkZ2V0LCBHZGtFdmVudCAqIGV2ZW50LCBHdGtQbGF5ICogcGxheSkKKyB7CistICBnc3RfcGxheWVyX3N0b3AgKHBsYXktPnBsYXllcik7CisrICBndGtfd2lkZ2V0X2Rlc3Ryb3kgKEdUS19XSURHRVQgKHBsYXkpKTsKKyB9CisgCisgc3RhdGljIHZvaWQKKy0tIAorMi40LjAKKwpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2dzdHJlYW1lci9nc3QtcGxheWVyL2dzdC1wbGF5ZXIuZGVza3RvcCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9nc3RyZWFtZXIvZ3N0LXBsYXllci9nc3QtcGxheWVyLmRlc2t0b3AKaW5kZXggOWZkMjA3Yi4uN2RkZDQ1NiAxMDA2NDQKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2dzdHJlYW1lci9nc3QtcGxheWVyL2dzdC1wbGF5ZXIuZGVza3RvcAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvZ3N0cmVhbWVyL2dzdC1wbGF5ZXIvZ3N0LXBsYXllci5kZXNrdG9wCkBAIC0xLDcgKzEsNyBAQAogW0Rlc2t0b3AgRW50cnldCiBOYW1lPU1lZGlhIFBsYXllcgogQ29tbWVudD1CYXNpYyBtZWRpYSBwbGF5ZXIKLUljb249YXVkaW8tcGxheWVyCitJY29uPW11bHRpbWVkaWEtcGxheWVyCiBUcnlFeGVjPWd0ay1wbGF5CiBFeGVjPWd0ay1wbGF5CiBTdGFydHVwTm90aWZ5PXRydWUKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9nc3RyZWFtZXIvZ3N0LXBsYXllci9ndGsyLnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2dzdHJlYW1lci9nc3QtcGxheWVyL2d0azIucGF0Y2gKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDJjZDE4YmIuLjAwMDAwMDAKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2dzdHJlYW1lci9nc3QtcGxheWVyL2d0azIucGF0Y2gKKysrIC9kZXYvbnVsbApAQCAtMSw3MSArMCwwIEBACi1BcyB0aGUgcmVzdCBvZiBTYXRvIGlzIEdUSysgMiwgcGF0Y2ggZ3RrLXBsYXkgdG8gdXNlIEdUSysgMi4gIFdoZW4gdGhlIHJlc3Qgb2YKLVNhdG8gaGFzIGJlZW4gcG9ydGVkIHRvIEdUSysgMyB0aGlzIHBhdGNoIGNhbiBiZSBkcm9wcGVkLgotCi1VcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUKLVNpZ25lZC1vZmYtYnk6IFJvc3MgQnVydG9uIDxyb3NzLmJ1cnRvbkBpbnRlbC5jb20+Ci0KLQotZGlmZiAtLWdpdCBhL2NvbmZpZ3VyZS5hYyBiL2NvbmZpZ3VyZS5hYwotaW5kZXggYjhhZjEzYi4uOTBhYjc0YyAxMDA2NDQKLS0tLSBhL2NvbmZpZ3VyZS5hYwotKysrIGIvY29uZmlndXJlLmFjCi1AQCAtNjAsNyArNjAsNyBAQCBBQ19TVUJTVChHTElCX1BSRUZJWCkKLSBHU1RfUFJFRklYPSJgJFBLR19DT05GSUcgLS12YXJpYWJsZT1wcmVmaXggZ3N0cmVhbWVyLTEuMGAiCi0gQUNfU1VCU1QoR1NUX1BSRUZJWCkKLSAKLS1QS0dfQ0hFQ0tfTU9EVUxFUyhHVEssIFtndGsrLTMuMF0sIFtoYXZlX2d0az0ieWVzIl0sIFtoYXZlX2d0az0ibm8iXSkKLStQS0dfQ0hFQ0tfTU9EVUxFUyhHVEssIFtndGsrLTIuMF0sIFtoYXZlX2d0az0ieWVzIl0sIFtoYXZlX2d0az0ibm8iXSkKLSBBTV9DT05ESVRJT05BTChIQVZFX0dUSywgdGVzdCAieCRoYXZlX2d0ayIgIT0gInhubyIpCi0gCi0gR09CSkVDVF9JTlRST1NQRUNUSU9OX0NIRUNLKFsxLjMxLjFdKQotZGlmZiAtLWdpdCBhL2d0ay9ndGstcGxheS5jIGIvZ3RrL2d0ay1wbGF5LmMKLWluZGV4IGYwMTUwNzcuLjk1NGQ2ZmIgMTAwNjQ0Ci0tLS0gYS9ndGsvZ3RrLXBsYXkuYwotKysrIGIvZ3RrL2d0ay1wbGF5LmMKLUBAIC0zNCw2ICszNCw0NiBAQCB0eXBlZGVmIHN0cnVjdAotICAgZ3Vsb25nIHNlZWtiYXJfdmFsdWVfY2hhbmdlZF9zaWduYWxfaWQ7Ci0gfSBHdGtQbGF5OwotIAotKy8qIENvbXBhdCBzdHVicyAqLwotK0d0a1dpZGdldCAqCi0rZ3RrX2JveF9uZXcgKEd0a09yaWVudGF0aW9uIG9yaWVudGF0aW9uLAotKyAgICAgICAgICAgICBnaW50IHNwYWNpbmcpCi0rewotKyAgc3dpdGNoIChvcmllbnRhdGlvbikgewotKyAgY2FzZSBHVEtfT1JJRU5UQVRJT05fSE9SSVpPTlRBTDoKLSsgICAgcmV0dXJuIGd0a19oYm94X25ldyAoRkFMU0UsIHNwYWNpbmcpOwotKyAgY2FzZSBHVEtfT1JJRU5UQVRJT05fVkVSVElDQUw6Ci0rICAgIHJldHVybiBndGtfdmJveF9uZXcgKEZBTFNFLCBzcGFjaW5nKTsKLSsgIH0KLSt9Ci0rCi0rR3RrV2lkZ2V0KgotK2d0a19idXR0b25fbmV3X2Zyb21faWNvbl9uYW1lIChjb25zdCBnY2hhciAqaWNvbl9uYW1lLAotKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHdGtJY29uU2l6ZSAgc2l6ZSkKLSt7Ci0rICBHdGtXaWRnZXQgKmJ1dHRvbjsKLSsgIEd0a1dpZGdldCAqaW1hZ2U7Ci0rCi0rICBpbWFnZSA9IGd0a19pbWFnZV9uZXdfZnJvbV9pY29uX25hbWUgKGljb25fbmFtZSwgc2l6ZSk7Ci0rICBidXR0b24gPSAgZ19vYmplY3RfbmV3IChHVEtfVFlQRV9CVVRUT04sCi0rICAgICAgICAgICAgICAgICAgICAgICAgICJpbWFnZSIsIGltYWdlLAotKyAgICAgICAgICAgICAgICAgICAgICAgICBOVUxMKTsKLSsgIHJldHVybiBidXR0b247Ci0rfQotKwotK0d0a1dpZGdldCAqCi0rZ3RrX3NjYWxlX25ld193aXRoX3JhbmdlIChHdGtPcmllbnRhdGlvbiBvcmllbnRhdGlvbiwKLSsgICAgICAgICAgICAgICAgICAgICAgICAgIGdkb3VibGUgbWluLAotKyAgICAgICAgICAgICAgICAgICAgICAgICAgZ2RvdWJsZSBtYXgsCi0rICAgICAgICAgICAgICAgICAgICAgICAgICBnZG91YmxlIHN0ZXApCi0rewotKyAgc3dpdGNoIChvcmllbnRhdGlvbikgewotKyAgY2FzZSBHVEtfT1JJRU5UQVRJT05fSE9SSVpPTlRBTDoKLSsgICAgcmV0dXJuIGd0a19oc2NhbGVfbmV3X3dpdGhfcmFuZ2UgKG1pbiwgbWF4LCBzdGVwKTsKLSsgIGNhc2UgR1RLX09SSUVOVEFUSU9OX1ZFUlRJQ0FMOgotKyAgICByZXR1cm4gZ3RrX3ZzY2FsZV9uZXdfd2l0aF9yYW5nZSAobWluLCBtYXgsIHN0ZXApOwotKyAgfQotK30KLSAKLSBzdGF0aWMgdm9pZAotIHNldF90aXRsZSAoR3RrUGxheSAqIHBsYXksIGNvbnN0IGdjaGFyICogdGl0bGUpCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvZ3N0cmVhbWVyL2dzdC1wbGF5ZXJfZ2l0LmJiIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2dzdHJlYW1lci9nc3QtcGxheWVyX2dpdC5iYgppbmRleCA4MTI5MTY5Li4yYTRjOWRjIDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvZ3N0cmVhbWVyL2dzdC1wbGF5ZXJfZ2l0LmJiCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9nc3RyZWFtZXIvZ3N0LXBsYXllcl9naXQuYmIKQEAgLTEsMzkgKzEsMzcgQEAKIFNVTU1BUlkgPSAiR1N0cmVhbWVyIHBsYXliYWNrIGhlbHBlciBsaWJyYXJ5IGFuZCBleGFtcGxlcyIKIExJQ0VOU0UgPSAiTEdQTC0yLjArIgotTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vbGliL2dzdC9wbGF5ZXIvZ3N0cGxheWVyLmM7YmVnaW5saW5lPTE7ZW5kbGluZT0xOTttZDU9MDNhZWNhOWQ4Mjk1ZjgxMTgxNzkwOTA3NWExNWZmNjUiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9ndGsvZ3RrLXBsYXkuYztiZWdpbmxpbmU9MTtlbmRsaW5lPTIwO21kNT1mOGM3MmRhZTNkMzY4MjNlYzcxNmE5ZWJjYWU1OTNiOSIKIAotREVQRU5EUyA9ICJnbGliLTIuMCBnc3RyZWFtZXIxLjAgZ3N0cmVhbWVyMS4wLXBsdWdpbnMtYmFzZSBndGsrIgorREVQRU5EUyA9ICJnbGliLTIuMCBnc3RyZWFtZXIxLjAgZ3N0cmVhbWVyMS4wLXBsdWdpbnMtYmFzZSBnc3RyZWFtZXIxLjAtcGx1Z2lucy1iYWQgZ3RrKzMiCiAKIFNSQ19VUkkgPSAiZ2l0Oi8vZ2l0aHViLmNvbS9zZHJvZWdlL2dzdC1wbGF5ZXIuZ2l0IFwKLSAgICAgICAgICAgZmlsZTovL2ZpbGVjaG9vc2VyLnBhdGNoIFwKLSAgICAgICAgICAgZmlsZTovL2d0azIucGF0Y2ggXAotICAgICAgICAgICBmaWxlOi8vRml4LXBhdXNlLXBsYXkucGF0Y2ggXAotICAgICAgICAgICBmaWxlOi8vQWRkLWVycm9yLXNpZ25hbC1lbWlzc2lvbi1mb3ItbWlzc2luZy1wbHVnaW5zLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL2ZpbGVjaG9vc2VyLnBhdGNoO2FwcGx5PTAgXAorICAgICAgICAgICBmaWxlOi8vRml4LXBhdXNlLXBsYXkucGF0Y2g7YXBwbHk9MCBcCisgICAgICAgICAgIGZpbGU6Ly9BZGQtZXJyb3Itc2lnbmFsLWVtaXNzaW9uLWZvci1taXNzaW5nLXBsdWdpbnMucGF0Y2g7YXBwbHk9MCBcCisgICAgICAgICAgIGZpbGU6Ly8wMDAxLWd0ay1wbGF5LXByb3ZpZGUtc2ltaWxhci1iZWhhdmlvdXItZm9yLXF1aXQtYW5kLWNsb3MucGF0Y2ggXAogICAgICAgICAgICBmaWxlOi8vZ3N0LXBsYXllci5kZXNrdG9wIgogCi1TUkNSRVYgPSAiNTM4NmM1Yjk4NGQ0MGVmNTQzNDY3M2VkNjIyMDRlNjlhYWY1MjY0NSIKK1NSQ1JFViA9ICJlYTkwZTYzYzEwNjQ1MDNmOWJhNWQ1OWFhNGNhNjA0ZjEzY2E1ZGVmIgorUFYgPSAiMC4wLjErZ2l0JHtTUkNQVn0iCiAKIFMgPSAiJHtXT1JLRElSfS9naXQiCiAKLWluaGVyaXQgYXV0b3Rvb2xzIGd0ay1kb2MgbGliX3BhY2thZ2UgcGtnY29uZmlnIGRpc3Ryb19mZWF0dXJlc19jaGVjayBnb2JqZWN0LWludHJvc3BlY3Rpb24KK2luaGVyaXQgYXV0b3Rvb2xzIHBrZ2NvbmZpZyBkaXN0cm9fZmVhdHVyZXNfY2hlY2sKIAotQU5ZX09GX0RJU1RST19GRUFUVVJFUyA9ICIke0dUSzJESVNUUk9GRUFUVVJFU30iCitBTllfT0ZfRElTVFJPX0ZFQVRVUkVTID0gIiR7R1RLM0RJU1RST0ZFQVRVUkVTfSIKIAogZG9fY29uZmlndXJlX3ByZXBlbmQoKSB7CiAJdG91Y2ggJHtTfS9DaGFuZ2VMb2cKIH0KIAotRVhUUkFfT0VDT05GICs9ICJhY19jdl9wYXRoX1ZBTEdSSU5EPW5vIGFjX2N2X3BhdGhfR0RCPW5vIgotCiBkb19pbnN0YWxsX2FwcGVuZCgpIHsKIAlpbnN0YWxsIC1tIDA2NDQgLUQgJHtXT1JLRElSfS9nc3QtcGxheWVyLmRlc2t0b3AgJHtEfSR7ZGF0YWRpcn0vYXBwbGljYXRpb25zL2dzdC1wbGF5ZXIuZGVza3RvcAogfQogCi1GSUxFU18ke1BOfS1iaW4gKz0gIiR7ZGF0YWRpcn0vYXBwbGljYXRpb25zLyouZGVza3RvcCIKLQotUkRFUEVORFNfJHtQTn0tYmluID0gImdzdHJlYW1lcjEuMC1wbHVnaW5zLWJhc2UtcGxheWJhY2siCi1SUkVDT01NRU5EU18ke1BOfS1iaW4gPSAiZ3N0cmVhbWVyMS4wLXBsdWdpbnMtYmFzZS1tZXRhIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICBnc3RyZWFtZXIxLjAtcGx1Z2lucy1nb29kLW1ldGEgXAotICAgICAgICAgICAgICAgICAgICAgICAgIGdzdHJlYW1lcjEuMC1wbHVnaW5zLWJhZC1tZXRhIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAke0BiYi51dGlscy5jb250YWlucygiTElDRU5TRV9GTEFHU19XSElURUxJU1QiLCAiY29tbWVyY2lhbCIsICJnc3RyZWFtZXIxLjAtbGliYXYiLCAiIiwgZCl9IFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAke0BiYi51dGlscy5jb250YWlucygiTElDRU5TRV9GTEFHU19XSElURUxJU1QiLCAiY29tbWVyY2lhbCIsICJnc3RyZWFtZXIxLjAtcGx1Z2lucy11Z2x5LW1ldGEiLCAiIiwgZCl9IgorUkRFUEVORFNfJHtQTn0gPSAiZ3N0cmVhbWVyMS4wLXBsdWdpbnMtYmFzZS1wbGF5YmFjayIKK1JSRUNPTU1FTkRTXyR7UE59ID0gImdzdHJlYW1lcjEuMC1wbHVnaW5zLWJhc2UtbWV0YSBcCisgICAgICAgICAgICAgICAgICAgICBnc3RyZWFtZXIxLjAtcGx1Z2lucy1nb29kLW1ldGEgXAorICAgICAgICAgICAgICAgICAgICAgZ3N0cmVhbWVyMS4wLXBsdWdpbnMtYmFkLW1ldGEgXAorICAgICAgICAgICAgICAgICAgICAgICR7QGJiLnV0aWxzLmNvbnRhaW5zKCJMSUNFTlNFX0ZMQUdTX1dISVRFTElTVCIsICJjb21tZXJjaWFsIiwgImdzdHJlYW1lcjEuMC1saWJhdiIsICIiLCBkKX0gXAorICAgICAgICAgICAgICAgICAgICAgJHtAYmIudXRpbHMuY29udGFpbnMoIkxJQ0VOU0VfRkxBR1NfV0hJVEVMSVNUIiwgImNvbW1lcmNpYWwiLCAiZ3N0cmVhbWVyMS4wLXBsdWdpbnMtdWdseS1tZXRhIiwgIiIsIGQpfSIKK1JQUk9WSURFU18ke1BOfSArPSAiJHtQTn0tYmluIgpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2dzdHJlYW1lci9nc3RyZWFtZXIxLjAtbGliYXYuaW5jIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2dzdHJlYW1lci9nc3RyZWFtZXIxLjAtbGliYXYuaW5jCmluZGV4IDM2MzEwMWUuLmVhMDExNjMgMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9nc3RyZWFtZXIvZ3N0cmVhbWVyMS4wLWxpYmF2LmluYworKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvZ3N0cmVhbWVyL2dzdHJlYW1lcjEuMC1saWJhdi5pbmMKQEAgLTcsNyArNyw3IEBACiAKIERFUEVORFMgPSAiZ3N0cmVhbWVyMS4wIGdzdHJlYW1lcjEuMC1wbHVnaW5zLWJhc2UgemxpYiBiemlwMiB4eiIKIAotaW5oZXJpdCBhdXRvdG9vbHMgcGtnY29uZmlnIHVwc3RyZWFtLXZlcnNpb24taXMtZXZlbgoraW5oZXJpdCBhdXRvdG9vbHMgcGtnY29uZmlnIHVwc3RyZWFtLXZlcnNpb24taXMtZXZlbiBndGstZG9jCiAKICMgQ0FVVElPTjogVXNpbmcgdGhlIHN5c3RlbSBsaWJhdiBpcyBub3QgcmVjb21tZW5kZWQuIFNpbmNlIHRoZSBsaWJhdiBBUEkgaXMgY2hhbmdpbmcgYWxsIHRoZSB0aW1lLAogIyBjb21waWxhdGlvbiBlcnJvcnMgKGFuZCBvdGhlciwgbW9yZSBzdWJ0bGUgYnVncykgY2FuIGhhcHBlbi4gSXQgaXMgdXN1YWxseSBiZXR0ZXIgdG8gcmVseSBvbiB0aGUKQEAgLTE4LDYgKzE4LDcgQEAKIFBBQ0tBR0VDT05GSUdbbGliYXZdID0gIi0td2l0aC1zeXN0ZW0tbGliYXYsLGxpYmF2IgogUEFDS0FHRUNPTkZJR1tvcmNdID0gIi0tZW5hYmxlLW9yYywtLWRpc2FibGUtb3JjLG9yYyIKIFBBQ0tBR0VDT05GSUdbeWFzbV0gPSAiLS1lbmFibGUteWFzbSwtLWRpc2FibGUteWFzbSx5YXNtLW5hdGl2ZSIKK1BBQ0tBR0VDT05GSUdbdmFsZ3JpbmRdID0gIi0tZW5hYmxlLXZhbGdyaW5kLC0tZGlzYWJsZS12YWxncmluZCx2YWxncmluZCIKIAogR1NUUkVBTUVSXzFfMF9ERUJVRyA/PSAiLS1kaXNhYmxlLWRlYnVnIgogCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvZ3N0cmVhbWVyL2dzdHJlYW1lcjEuMC1saWJhdl8xLjYuMy5iYiBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9nc3RyZWFtZXIvZ3N0cmVhbWVyMS4wLWxpYmF2XzEuNi4zLmJiCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2ODcyMzBhLi4wMDAwMDAwCi0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9nc3RyZWFtZXIvZ3N0cmVhbWVyMS4wLWxpYmF2XzEuNi4zLmJiCisrKyAvZGV2L251bGwKQEAgLTEsMjAgKzAsMCBAQAotaW5jbHVkZSBnc3RyZWFtZXIxLjAtbGliYXYuaW5jCi0KLUxJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PWIyMzRlZTRkNjlmNWZjZTQ0ODZhODBmZGFmNGE0MjYzIFwKLSAgICAgICAgICAgICAgICAgICAgZmlsZTovL0NPUFlJTkcuTElCO21kNT02NzYyZWQ0NDJiMzgyMjM4N2E1MWM5MmQ5MjhlYWQwZCBcCi0gICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9leHQvbGliYXYvZ3N0YXYuaDtiZWdpbmxpbmU9MTtlbmRsaW5lPTE4O21kNT1hNzUyYzM1MjY3ZDgyNzZmZDljYTNkYjY5OTRmY2E5YyBcCi0gICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9nc3QtbGlicy9leHQvbGliYXYvQ09QWUlORy5HUEx2MjttZDU9YjIzNGVlNGQ2OWY1ZmNlNDQ4NmE4MGZkYWY0YTQyNjMgXAotICAgICAgICAgICAgICAgICAgICBmaWxlOi8vZ3N0LWxpYnMvZXh0L2xpYmF2L0NPUFlJTkcuR1BMdjM7bWQ1PWQzMjIzOWJjYjY3MzQ2M2FiODc0ZTgwZDQ3ZmFlNTA0IFwKLSAgICAgICAgICAgICAgICAgICAgZmlsZTovL2dzdC1saWJzL2V4dC9saWJhdi9DT1BZSU5HLkxHUEx2Mi4xO21kNT1iZDdhNDQzMzIwYWY4YzgxMmU0YzE4ZDFiNzlkZjAwNCBcCi0gICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9nc3QtbGlicy9leHQvbGliYXYvQ09QWUlORy5MR1BMdjM7bWQ1PWU2YTYwMGZkNWUxZDljYmRlMmQ5ODM2ODAyMzNhZDAyIgotCi1TUkNfVVJJID0gIiBcCi0gICAgaHR0cDovL2dzdHJlYW1lci5mcmVlZGVza3RvcC5vcmcvc3JjL2dzdC1saWJhdi9nc3QtbGliYXYtJHtQVn0udGFyLnh6IFwKLSAgICBmaWxlOi8vMDAwMS1EaXNhYmxlLXlhc20tZm9yLWxpYmF2LXdoZW4tZGlzYWJsZS15YXNtLnBhdGNoIFwKLSAgICBmaWxlOi8vd29ya2Fyb3VuZC10by1idWlsZC1nc3QtbGliYXYtZm9yLWk1ODYtd2l0aC1nY2MucGF0Y2ggXAotIgotCi1TUkNfVVJJW21kNXN1bV0gPSAiY2ZlOWEwNjkxM2Q0ZmQ0MDY3ZTllNDdmNmUwNWZhYzIiCi1TUkNfVVJJW3NoYTI1NnN1bV0gPSAiODU3YjljMDYwYTAzMzdkZTM4YzZkMjYyMzhjNDczNTI0MzNjMDJlYWJmMjZjMmY4NjBjODU0ZGJjMzViZDRhYiIKLQotUyA9ICIke1dPUktESVJ9L2dzdC1saWJhdi0ke1BWfSIKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9nc3RyZWFtZXIvZ3N0cmVhbWVyMS4wLWxpYmF2XzEuOC4zLmJiIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2dzdHJlYW1lci9nc3RyZWFtZXIxLjAtbGliYXZfMS44LjMuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2Q4NjIyMQotLS0gL2Rldi9udWxsCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9nc3RyZWFtZXIvZ3N0cmVhbWVyMS4wLWxpYmF2XzEuOC4zLmJiCkBAIC0wLDAgKzEsMjAgQEAKK2luY2x1ZGUgZ3N0cmVhbWVyMS4wLWxpYmF2LmluYworCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT1iMjM0ZWU0ZDY5ZjVmY2U0NDg2YTgwZmRhZjRhNDI2MyBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9DT1BZSU5HLkxJQjttZDU9Njc2MmVkNDQyYjM4MjIzODdhNTFjOTJkOTI4ZWFkMGQgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vZXh0L2xpYmF2L2dzdGF2Lmg7YmVnaW5saW5lPTE7ZW5kbGluZT0xODttZDU9YTc1MmMzNTI2N2Q4Mjc2ZmQ5Y2EzZGI2OTk0ZmNhOWMgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vZ3N0LWxpYnMvZXh0L2xpYmF2L0NPUFlJTkcuR1BMdjI7bWQ1PWIyMzRlZTRkNjlmNWZjZTQ0ODZhODBmZGFmNGE0MjYzIFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL2dzdC1saWJzL2V4dC9saWJhdi9DT1BZSU5HLkdQTHYzO21kNT1kMzIyMzliY2I2NzM0NjNhYjg3NGU4MGQ0N2ZhZTUwNCBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9nc3QtbGlicy9leHQvbGliYXYvQ09QWUlORy5MR1BMdjIuMTttZDU9YmQ3YTQ0MzMyMGFmOGM4MTJlNGMxOGQxYjc5ZGYwMDQgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vZ3N0LWxpYnMvZXh0L2xpYmF2L0NPUFlJTkcuTEdQTHYzO21kNT1lNmE2MDBmZDVlMWQ5Y2JkZTJkOTgzNjgwMjMzYWQwMiIKKworU1JDX1VSSSA9ICIgXAorICAgIGh0dHA6Ly9nc3RyZWFtZXIuZnJlZWRlc2t0b3Aub3JnL3NyYy9nc3QtbGliYXYvZ3N0LWxpYmF2LSR7UFZ9LnRhci54eiBcCisgICAgZmlsZTovLzAwMDEtRGlzYWJsZS15YXNtLWZvci1saWJhdi13aGVuLWRpc2FibGUteWFzbS5wYXRjaCBcCisgICAgZmlsZTovL3dvcmthcm91bmQtdG8tYnVpbGQtZ3N0LWxpYmF2LWZvci1pNTg2LXdpdGgtZ2NjLnBhdGNoIFwKKyIKKworU1JDX1VSSVttZDVzdW1dID0gImI1MWE3MzYxNDdiYWNiNDBmODU4MjdhNGUwYWUwZDJjIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjkwMDZhMDU5OTAwODlmNzE1NWVlMGU4NDgwNDJmNmJiMjRlNTJhYjFkMGE1OWZmOGQxYjVkN2UzMzAwMWE0OTUiCisKK1MgPSAiJHtXT1JLRElSfS9nc3QtbGliYXYtJHtQVn0iCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvZ3N0cmVhbWVyL2dzdHJlYW1lcjEuMC1saWJhdl9naXQuYmIgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvZ3N0cmVhbWVyL2dzdHJlYW1lcjEuMC1saWJhdl9naXQuYmIKaW5kZXggZWJjOGE1ZS4uZjQ2MDRhMyAxMDA2NDQKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2dzdHJlYW1lci9nc3RyZWFtZXIxLjAtbGliYXZfZ2l0LmJiCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9nc3RyZWFtZXIvZ3N0cmVhbWVyMS4wLWxpYmF2X2dpdC5iYgpAQCAtMTUsMjAgKzE1LDIwIEBACiAjIGFuZCByZW1vdmUgdGhlIGZmbXBlZyBzb3VyY2VzIGZyb20gU1JDX1VSSSBiZWxvdy4gSG93ZXZlciwgZmlyc3Qgbm90ZSB0aGUKICMgd2FybmluZ3MgaW4gZ3N0cmVhbWVyMS4wLWxpYmF2LmluYwogU1JDX1VSSSA9ICIgXAotICAgIGdpdDovL2Fub25naXQuZnJlZWRlc2t0b3Aub3JnL2dzdHJlYW1lci9nc3QtbGliYXY7bmFtZT1iYXNlIFwKKyAgICBnaXQ6Ly9hbm9uZ2l0LmZyZWVkZXNrdG9wLm9yZy9nc3RyZWFtZXIvZ3N0LWxpYmF2O2JyYW5jaD0xLjg7bmFtZT1iYXNlIFwKICAgICBnaXQ6Ly9hbm9uZ2l0LmZyZWVkZXNrdG9wLm9yZy9nc3RyZWFtZXIvY29tbW9uO2Rlc3RzdWZmaXg9Z2l0L2NvbW1vbjtuYW1lPWNvbW1vbiBcCiAgICAgZ2l0Oi8vc291cmNlLmZmbXBlZy5vcmcvZmZtcGVnO2Rlc3RzdWZmaXg9Z2l0L2dzdC1saWJzL2V4dC9saWJhdjtuYW1lPWZmbXBlZzticmFuY2g9cmVsZWFzZS8zLjAgXAogICAgIGZpbGU6Ly8wMDAxLURpc2FibGUteWFzbS1mb3ItbGliYXYtd2hlbi1kaXNhYmxlLXlhc20ucGF0Y2ggXAogICAgIGZpbGU6Ly93b3JrYXJvdW5kLXRvLWJ1aWxkLWdzdC1saWJhdi1mb3ItaTU4Ni13aXRoLWdjYy5wYXRjaCBcCiAiCiAKLVBWID0gIjEuNy4yK2dpdCR7U1JDUFZ9IgorUFYgPSAiMS44LjIrZ2l0JHtTUkNQVn0iCiAKIFVQU1RSRUFNX0NIRUNLX0dJVFRBR1JFR0VYID0gIig/UDxwdmVyPihcZCsoXC5cZCspKykpIgogCi1TUkNSRVZfYmFzZSA9ICI2YzQ4NzhiNmFiYzkxNmI3ZjZmMjViODkyNmM0ODU5MTE5YWNmMWVjIgotU1JDUkVWX2NvbW1vbiA9ICJiNjRmMDNmNjA5MDI0NTYyNDYwOGJlYjVkMmZmZjMzNWUyM2EwMWMwIgotU1JDUkVWX2ZmbXBlZyA9ICJjNDA5ODNhNmY2MzFkMjJmZWRlNzEzZDUzNWJiOWMzMWQ1Yzk3NDBjIgorU1JDUkVWX2Jhc2UgPSAiZjI4NWNmMGZkNzk5Y2MzYjQ2YjVjZWNhYWE0MzlkNWEyYTM4YTliNyIKK1NSQ1JFVl9jb21tb24gPSAiZjM2M2IzMjA1NjU4YTM4ZTg0ZmE3N2YxOWRlZTIxOGNkNDQ0NTI3NSIKK1NSQ1JFVl9mZm1wZWcgPSAiYzY2ZjRkMWFlNjRkZmZhZjQ1NmQwNWNiZGFkZTAyMDU0NDQ2ZjQ5OSIKIFNSQ1JFVl9GT1JNQVQgPSAiYmFzZSIKIAogUyA9ICIke1dPUktESVJ9L2dpdCIKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9nc3RyZWFtZXIvZ3N0cmVhbWVyMS4wLW9teC5pbmMgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvZ3N0cmVhbWVyL2dzdHJlYW1lcjEuMC1vbXguaW5jCmluZGV4IDBmZmY2MTIuLjA3ZTViN2QgMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9nc3RyZWFtZXIvZ3N0cmVhbWVyMS4wLW9teC5pbmMKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2dzdHJlYW1lci9nc3RyZWFtZXIxLjAtb214LmluYwpAQCAtNywxMSArNywxMCBAQAogCiBERVBFTkRTID0gImdzdHJlYW1lcjEuMCBnc3RyZWFtZXIxLjAtcGx1Z2lucy1iYXNlIGdzdHJlYW1lcjEuMC1wbHVnaW5zLWJhZCIKIAotaW5oZXJpdCBhdXRvdG9vbHMgcGtnY29uZmlnIGdldHRleHQKK2luaGVyaXQgYXV0b3Rvb2xzIHBrZ2NvbmZpZyBnZXR0ZXh0IGd0ay1kb2MgdXBzdHJlYW0tdmVyc2lvbi1pcy1ldmVuCiAKIGFjcGF0aHMgPSAiLUkgJHtTfS9jb21tb24vbTQgLUkgJHtTfS9tNCIKIAotUFIgPSAicjEiCiAKIEdTVFJFQU1FUl8xXzBfT01YX1RBUkdFVCA/PSAiYmVsbGFnaW8iCiBHU1RSRUFNRVJfMV8wX09NWF9DT1JFX05BTUUgPz0gIiR7bGliZGlyfS9saWJvbXhpbC1iZWxsYWdpby5zby4wIgpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2dzdHJlYW1lci9nc3RyZWFtZXIxLjAtcGx1Z2lucy1iYWQuaW5jIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2dzdHJlYW1lci9nc3RyZWFtZXIxLjAtcGx1Z2lucy1iYWQuaW5jCmluZGV4IDllMmI5NGUuLjBmZTU1NjQgMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9nc3RyZWFtZXIvZ3N0cmVhbWVyMS4wLXBsdWdpbnMtYmFkLmluYworKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvZ3N0cmVhbWVyL2dzdHJlYW1lcjEuMC1wbHVnaW5zLWJhZC5pbmMKQEAgLTIxLDcgKzIxLDcgQEAKICAgICAke1BBQ0tBR0VDT05GSUdfR0x9IFwKICAgICAke0BiYi51dGlscy5jb250YWlucygnRElTVFJPX0ZFQVRVUkVTJywgJ2JsdWV0b290aCcsICdibHVleicsICcnLCBkKX0gXAogICAgICR7QGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCAnZGlyZWN0ZmInLCAnZGlyZWN0ZmInLCAnJywgZCl9IFwKLSAgICAke0BiYi51dGlscy5jb250YWlucygnRElTVFJPX0ZFQVRVUkVTJywgJ3dheWxhbmQnLCAnd2F5bGFuZCcsICcnLCBkKX0gXAorICAgICR7QGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCAnd2F5bGFuZCcsICd3YXlsYW5kIGVnbCcsICcnLCBkKX0gXAogICAgIGJ6MiBjdXJsIGRhc2ggZHRscyBobHMgbmVvbiByc3ZnIHNiYyBzbW9vdGhzdHJlYW1pbmcgc25kZmlsZSB1dmNoMjY0IHdlYnAgXAogIgogCkBAIC0zMiwxMyArMzIsMTYgQEAKIFBBQ0tBR0VDT05GSUdbZGFzaF0gICAgICAgICAgICA9ICItLWVuYWJsZS1kYXNoLC0tZGlzYWJsZS1kYXNoLGxpYnhtbDIiCiBQQUNLQUdFQ09ORklHW2RpcmVjdGZiXSAgICAgICAgPSAiLS1lbmFibGUtZGlyZWN0ZmIsLS1kaXNhYmxlLWRpcmVjdGZiLGRpcmVjdGZiIgogUEFDS0FHRUNPTkZJR1tkdGxzXSAgICAgICAgICAgID0gIi0tZW5hYmxlLWR0bHMsLS1kaXNhYmxlLWR0bHMsb3BlbnNzbCIKK1BBQ0tBR0VDT05GSUdbZWdsXSAgICAgICAgICAgICA9ICItLWVuYWJsZS1lZ2wsLS1kaXNhYmxlLWVnbCx2aXJ0dWFsL2VnbCIKIFBBQ0tBR0VDT05GSUdbZmFhY10gICAgICAgICAgICA9ICItLWVuYWJsZS1mYWFjLC0tZGlzYWJsZS1mYWFjLGZhYWMiCiBQQUNLQUdFQ09ORklHW2ZhYWRdICAgICAgICAgICAgPSAiLS1lbmFibGUtZmFhZCwtLWRpc2FibGUtZmFhZCxmYWFkMiIKIFBBQ0tBR0VDT05GSUdbZmxpdGVdICAgICAgICAgICA9ICItLWVuYWJsZS1mbGl0ZSwtLWRpc2FibGUtZmxpdGUsZmxpdGUtYWxzYSIKIFBBQ0tBR0VDT05GSUdbZmx1aWRzeW50aF0gICAgICA9ICItLWVuYWJsZS1mbHVpZHN5bnRoLC0tZGlzYWJsZS1mbHVpZHN5bnRoLGZsdWlkc3ludGgiCiBQQUNLQUdFQ09ORklHW2dsZXMyXSAgICAgICAgICAgPSAiLS1lbmFibGUtZ2xlczIsLS1kaXNhYmxlLWdsZXMyLHZpcnR1YWwvbGliZ2xlczIiCiBQQUNLQUdFQ09ORklHW2d0a10gICAgICAgICAgICAgPSAiLS1lbmFibGUtZ3RrMywtLWRpc2FibGUtZ3RrMyxndGsrMyIKLVBBQ0tBR0VDT05GSUdbaGxzXSAgICAgICAgICAgICA9ICItLWVuYWJsZS1obHMsLS1kaXNhYmxlLWhscyxuZXR0bGUiCisjIGVuc3VyZSBPcGVuU1NMIGlzIHVzZWQgZm9yIEhMUyBBRVMgZGVzY3JpcHRpb24gaW5zdGVhZCBvZiBuZXR0bGUKKyMgKE9wZW5TU0wgaXMgYSBzaGFyZWQgZGVwZW5kZW5jeSB3aXRoIGR0bHMpCitQQUNLQUdFQ09ORklHW2hsc10gICAgICAgICAgICAgPSAiLS1lbmFibGUtaGxzIC0td2l0aC1obHMtY3J5cHRvPW9wZW5zc2wsLS1kaXNhYmxlLWhscyxvcGVuc3NsIgogUEFDS0FHRUNPTkZJR1tsaWJtbXNdICAgICAgICAgID0gIi0tZW5hYmxlLWxpYm1tcywtLWRpc2FibGUtbGlibW1zLGxpYm1tcyIKIFBBQ0tBR0VDT05GSUdbbGlic3NoMl0gICAgICAgICA9ICItLWVuYWJsZS1saWJzc2gyLC0tZGlzYWJsZS1saWJzc2gyLGxpYnNzaDIiCiBQQUNLQUdFQ09ORklHW21vZHBsdWddICAgICAgICAgPSAiLS1lbmFibGUtbW9kcGx1ZywtLWRpc2FibGUtbW9kcGx1ZyxsaWJtb2RwbHVnIgpAQCAtNDYsNyArNDksOSBAQAogUEFDS0FHRUNPTkZJR1tvcGVuYWxdICAgICAgICAgID0gIi0tZW5hYmxlLW9wZW5hbCwtLWRpc2FibGUtb3BlbmFsLG9wZW5hbC1zb2Z0IgogUEFDS0FHRUNPTkZJR1tvcGVuY3ZdICAgICAgICAgID0gIi0tZW5hYmxlLW9wZW5jdiwtLWRpc2FibGUtb3BlbmN2LG9wZW5jdiIKIFBBQ0tBR0VDT05GSUdbb3BlbmdsXSAgICAgICAgICA9ICItLWVuYWJsZS1vcGVuZ2wsLS1kaXNhYmxlLW9wZW5nbCx2aXJ0dWFsL2xpYmdsIGxpYmdsdSIKLVBBQ0tBR0VDT05GSUdbb3B1c10gICAgICAgICAgICA9ICItLWVuYWJsZS1vcHVzLC0tZGlzYWJsZS1vcHVzLGxpYm9wdXMiCisjIHRoZSBvcHVzIGVuY29kZXIvZGVjb2RlciBlbGVtZW50cyBhcmUgbm93IGluIHRoZSAtYmFzZSBwYWNrYWdlLAorIyBidXQgdGhlIG9wdXMgcGFyc2VyIHJlbWFpbnMgaW4gLWJhZAorUEFDS0FHRUNPTkZJR1tvcHVzcGFyc2VdICAgICAgID0gIi0tZW5hYmxlLW9wdXMsLS1kaXNhYmxlLW9wdXMsbGlib3B1cyIKIFBBQ0tBR0VDT05GSUdbcmVzaW5kdmRdICAgICAgICA9ICItLWVuYWJsZS1yZXNpbmR2ZCwtLWRpc2FibGUtcmVzaW5kdmQsbGliZHZkcmVhZCBsaWJkdmRuYXYiCiBQQUNLQUdFQ09ORklHW3JzdmddICAgICAgICAgICAgPSAiLS1lbmFibGUtcnN2ZywtLWRpc2FibGUtcnN2ZyxsaWJyc3ZnIgogUEFDS0FHRUNPTkZJR1tydG1wXSAgICAgICAgICAgID0gIi0tZW5hYmxlLXJ0bXAsLS1kaXNhYmxlLXJ0bXAscnRtcGR1bXAiCkBAIC01OCwxOSArNjMsMTkgQEAKIFBBQ0tBR0VDT05GSUdbdXZjaDI2NF0gICAgICAgICA9ICItLWVuYWJsZS11dmNoMjY0LC0tZGlzYWJsZS11dmNoMjY0LGxpYnVzYjEgbGliZ3VkZXYiCiBQQUNLQUdFQ09ORklHW3ZvYWFjZW5jXSAgICAgICAgPSAiLS1lbmFibGUtdm9hYWNlbmMsLS1kaXNhYmxlLXZvYWFjZW5jLHZvLWFhY2VuYyIKIFBBQ0tBR0VDT05GSUdbdm9hbXJ3YmVuY10gICAgICA9ICItLWVuYWJsZS12b2FtcndiZW5jLC0tZGlzYWJsZS12b2FtcndiZW5jLHZvLWFtcndiZW5jIgotUEFDS0FHRUNPTkZJR1t3YXlsYW5kXSAgICAgICAgID0gIi0tZW5hYmxlLXdheWxhbmQgLS1lbmFibGUtZWdsLC0tZGlzYWJsZS13YXlsYW5kIC0tZGlzYWJsZS1lZ2wsd2F5bGFuZCB2aXJ0dWFsL2VnbCIKK1BBQ0tBR0VDT05GSUdbd2F5bGFuZF0gICAgICAgICA9ICItLWVuYWJsZS13YXlsYW5kLC0tZGlzYWJsZS13YXlsYW5kLHdheWxhbmQtbmF0aXZlIHdheWxhbmQiCiBQQUNLQUdFQ09ORklHW3dlYnBdICAgICAgICAgICAgPSAiLS1lbmFibGUtd2VicCwtLWRpc2FibGUtd2VicCxsaWJ3ZWJwIgogCiAjIHRoZXNlIHBsdWdpbnMgaGF2ZSBub3QgYmVlbiBwb3J0ZWQgdG8gMS4wICh5ZXQpOgotIyAgIGFwZXhzaW5rIGRjMTM5NCBsdjIgbGluc3lzIG11c2VwYWNrIG5hcyB0aW1pZGl0eSB0ZWxldGV4dGRlYyBzZGwgeHZpZCB3aW5pbmV0Ci0jICAgYWNtIGdzZXR0aW5ncyBzbmRpbyBjZHhhcGFyc2UgZGNjcCBmYWNlb3ZlcmxheSBoZHZwYXJzZSB0dGEgbXZlIG51dmRlbXV4Ci0jICAgcGF0Y2hkZXRlY3QgcmVhbCBzZGkgdmlkZW9tZWFzdXJlIGdzZXR0aW5ncworIyAgIGFwZXhzaW5rIGRjMTM5NCBsdjIgbGluc3lzIG11c2VwYWNrIG5hcyB0aW1pZGl0eSBzZGwgeHZpZCB3aW5pbmV0CisjICAgc25kaW8gY2R4YXBhcnNlIGRjY3AgZmFjZW92ZXJsYXkgaGR2cGFyc2UgdHRhIG12ZSBudXZkZW11eAorIyAgIHBhdGNoZGV0ZWN0IHNkaSB2aWRlb21lYXN1cmUKIAogIyB0aGVzZSBwbHVnaW5zIGhhdmUgbm8gY29ycmVzcG9uZGluZyBsaWJyYXJ5IGluIE9FLWNvcmUgb3IgbWV0YS1vcGVuZW1iZWRkZWQ6Ci0jICAgb3Blbm5pMiB3aW5rcyBkaXJlY3QzZCBkaXJlY3Rzb3VuZCB3aW5zY3JlZW5jYXAKKyMgICBvcGVubmkyIHdpbmtzIGRpcmVjdDNkIGRpcmVjdHNvdW5kIHdpbnNjcmVlbmNhcCBhY20KICMgICBhcHBsZV9tZWRpYSBhbmRyb2lkX21lZGlhIGF2YyBiczJiIGNocm9tYXByaW50IGRhYWxhIGR0cyBnbWUgZ3NtIGthdGUgbGFkc3BhCi0jICAgbGliZGUyNjUgbWltaWMgbXBlZzJlbmMgbXBsZXggb2ZhIG9wZW5oMjY0IG9wZW5zbGVzIHB2ciBzb3VuZHRvdWNoIHNwYW5kc3AKLSMgICBzcGMgdmRwYXUgd2FzYXBpIHgyNjUgemJhcgorIyAgIGxpYmRlMjY1IG1pbWljIG1wZWcyZW5jIG1wbGV4IG52ZW5jIG9mYSBvcGVuaDI2NCBvcGVuc2xlcyBwdnIgc291bmR0b3VjaCBzcGFuZHNwCisjICAgc3BjIHRlbGV0ZXh0ZGVjIHRpbnlhbHNhIHZkcGF1IHZ1bGthbiB3YXNhcGkgeDI2NSB6YmFyCiAKICMgcXQ1IHN1cHBvcnQgaXMgZGlzYWJsZWQsIGJlY2F1c2UgaXQgaXMgbm90IHByZXNlbnQgaW4gT0UgY29yZSwgYW5kIHJlcXVpcmVzIG1vcmUgd29yayB0aGFuCiAjIGp1c3QgYWRkaW5nIGEgcGFja2FnZWNvbmZpZyAoaXQgcmVxdWlyZXMgYWNjZXNzIHRvIG1vYywgdWljLCByY2MsIGFuZCBxbWFrZSBwYXRocykuCkBAIC04MSw2ICs4Niw3IEBACiAgICAgLS1lbmFibGUtZGVja2xpbmsgXAogICAgIC0tZW5hYmxlLWR2YiBcCiAgICAgLS1lbmFibGUtZmJkZXYgXAorICAgIC0tZW5hYmxlLW5ldHNpbSBcCiAgICAgLS1lbmFibGUtc2htIFwKICAgICAtLWVuYWJsZS12Y2QgXAogICAgIC0tZGlzYWJsZS1hY20gXApAQCAtMTA5LDYgKzExNSw3IEBACiAgICAgLS1kaXNhYmxlLW1wbGV4IFwKICAgICAtLWRpc2FibGUtbXVzZXBhY2sgXAogICAgIC0tZGlzYWJsZS1uYXMgXAorICAgIC0tZGlzYWJsZS1udmVuYyBcCiAgICAgLS1kaXNhYmxlLW9mYSBcCiAgICAgLS1kaXNhYmxlLW9wZW5leHIgXAogICAgIC0tZGlzYWJsZS1vcGVuaDI2NCBcCkBAIC0xMjUsNyArMTMyLDkgQEAKICAgICAtLWRpc2FibGUtc3BjIFwKICAgICAtLWRpc2FibGUtdGVsZXRleHRkZWMgXAogICAgIC0tZGlzYWJsZS10aW1pZGl0eSBcCisgICAgLS1kaXNhYmxlLXRpbnlhbHNhIFwKICAgICAtLWRpc2FibGUtdmRwYXUgXAorICAgIC0tZGlzYWJsZS12dWxrYW4gXAogICAgIC0tZGlzYWJsZS13YXNhcGkgXAogICAgIC0tZGlzYWJsZS13aWxkbWlkaSBcCiAgICAgLS1kaXNhYmxlLXdpbmluZXQgXApkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2dzdHJlYW1lci9nc3RyZWFtZXIxLjAtcGx1Z2lucy1iYWQvMDAwMS1NYWtlZmlsZS5hbS1kb24tdC1oYXJkY29kZS1saWJ0b29sLW5hbWUtd2hlbi1ydW5uaW5nLnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2dzdHJlYW1lci9nc3RyZWFtZXIxLjAtcGx1Z2lucy1iYWQvMDAwMS1NYWtlZmlsZS5hbS1kb24tdC1oYXJkY29kZS1saWJ0b29sLW5hbWUtd2hlbi1ydW5uaW5nLnBhdGNoCmluZGV4IDE1NGQzNDAuLjMzZWZjNTAgMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9nc3RyZWFtZXIvZ3N0cmVhbWVyMS4wLXBsdWdpbnMtYmFkLzAwMDEtTWFrZWZpbGUuYW0tZG9uLXQtaGFyZGNvZGUtbGlidG9vbC1uYW1lLXdoZW4tcnVubmluZy5wYXRjaAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvZ3N0cmVhbWVyL2dzdHJlYW1lcjEuMC1wbHVnaW5zLWJhZC8wMDAxLU1ha2VmaWxlLmFtLWRvbi10LWhhcmRjb2RlLWxpYnRvb2wtbmFtZS13aGVuLXJ1bm5pbmcucGF0Y2gKQEAgLTE3LDcgKzE3LDcgQEAKIGluZGV4IGY5NjgzNTcuLjdjYzJjN2EgMTAwNjQ0CiAtLS0gYS9nc3QtbGlicy9nc3QvZ2wvTWFrZWZpbGUuYW0KICsrKyBiL2dzdC1saWJzL2dzdC9nbC9NYWtlZmlsZS5hbQotQEAgLTE0OSw3ICsxNDksNyBAQCBHc3RHTC1AR1NUX0FQSV9WRVJTSU9OQC5naXI6ICQoSU5UUk9TUEVDVElPTl9TQ0FOTkVSKSBsaWJnc3RnbC1AR1NUX0FQSV9WRVJTSU9OQAorQEAgLTE2Nyw3ICsxNjcsNyBAQCBHc3RHTC1AR1NUX0FQSV9WRVJTSU9OQC5naXI6ICQoSU5UUk9TUEVDVElPTl9TQ0FOTkVSKSBsaWJnc3RnbC1AR1NUX0FQSV9WRVJTSU9OQAogIAkJLS1saWJyYXJ5PWxpYmdzdGdsLUBHU1RfQVBJX1ZFUlNJT05ALmxhIFwKICAJCS0taW5jbHVkZT1Hc3QtQEdTVF9BUElfVkVSU0lPTkAgXAogIAkJLS1pbmNsdWRlPUdzdEJhc2UtQEdTVF9BUElfVkVSU0lPTkAgXApAQCAtMzAsNyArMzAsNyBAQAogaW5kZXggMDllYjk3Yy4uYjc0Njg4NSAxMDA2NDQKIC0tLSBhL2dzdC1saWJzL2dzdC9pbnNlcnRiaW4vTWFrZWZpbGUuYW0KICsrKyBiL2dzdC1saWJzL2dzdC9pbnNlcnRiaW4vTWFrZWZpbGUuYW0KLUBAIC00Myw3ICs0Myw3IEBAIEdzdEluc2VydEJpbi1AR1NUX0FQSV9WRVJTSU9OQC5naXI6ICQoSU5UUk9TUEVDVElPTl9TQ0FOTkVSKSBsaWJnc3RpbnNlcnRiaW4tQEdTCitAQCAtNDQsNyArNDQsNyBAQCBHc3RJbnNlcnRCaW4tQEdTVF9BUElfVkVSU0lPTkAuZ2lyOiAkKElOVFJPU1BFQ1RJT05fU0NBTk5FUikgbGliZ3N0aW5zZXJ0YmluLUBHUwogIAkJLS1saWJyYXJ5PWxpYmdzdGluc2VydGJpbi1AR1NUX0FQSV9WRVJTSU9OQC5sYSBcCiAgCQktLWluY2x1ZGU9R3N0LUBHU1RfQVBJX1ZFUlNJT05AIFwKICAJCS0taW5jbHVkZT1Hc3RCYXNlLUBHU1RfQVBJX1ZFUlNJT05AIFwKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9nc3RyZWFtZXIvZ3N0cmVhbWVyMS4wLXBsdWdpbnMtYmFkLzAwMDEtZ2xpbWFnZXNpbmstRG93bnJhbmstdG8tbWFyZ2luYWwucGF0Y2ggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvZ3N0cmVhbWVyL2dzdHJlYW1lcjEuMC1wbHVnaW5zLWJhZC8wMDAxLWdsaW1hZ2VzaW5rLURvd25yYW5rLXRvLW1hcmdpbmFsLnBhdGNoCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxMDg1ZTk1Li4wMDAwMDAwCi0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9nc3RyZWFtZXIvZ3N0cmVhbWVyMS4wLXBsdWdpbnMtYmFkLzAwMDEtZ2xpbWFnZXNpbmstRG93bnJhbmstdG8tbWFyZ2luYWwucGF0Y2gKKysrIC9kZXYvbnVsbApAQCAtMSwzMiArMCwwIEBACi1Gcm9tIGM2YjM3YTgwODA2ZjkxMjhkZTQ3ZjFjY2MzZjIzNTRmOGQ0MzZiYjYgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCi1Gcm9tOiBBbGV4YW5kZXIgS2FuYXZpbiA8YWxleC5rYW5hdmluQGdtYWlsLmNvbT4KLURhdGU6IFRodSwgMjQgU2VwIDIwMTUgMTk6NDc6MzIgKzAzMDAKLVN1YmplY3Q6IFtQQVRDSF0gZ2xpbWFnZXNpbms6IERvd25yYW5rIHRvIG1hcmdpbmFsCi0KLU9uIGRlc2t0b3AsIHdoZXJlIHRoZXJlIGlzIGdvb2QgT3BlbkdMLCB4dmltYWdlc2luayB3aWxsIGNvbWUgdXAgZmlyc3QsCi1vbiBvdGhlciBwbGF0Zm9ybXMsIE9wZW5HTCBjYW4ndCBiZSB0cnVzdGVkIGJlY2F1c2UgaXQncyBlaXRoZXIgc29mdHdhcmUgKGxpa2UKLWluIGEgVk0pIG9yIGJyb2tlbiAobGlrZSBvbiBlbWJlZGRlZCkuLCBzbyBsZXQgeGltYWdlc2luayBjb21lIGFib3ZlLgotCi1VcHN0cmVhbS1TdGF0dXM6IFN1Ym1pdHRlZCBbaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTc1MTY4NF0KLQotU2lnbmVkLW9mZi1ieTogQWxleGFuZGVyIEthbmF2aW4gPGFsZXgua2FuYXZpbkBnbWFpbC5jb20+Ci0tLS0KLSBleHQvZ2wvZ3N0b3BlbmdsLmMgfCAyICstCi0gMSBmaWxlIGNoYW5nZWQsIDEgaW5zZXJ0aW9uKCspLCAxIGRlbGV0aW9uKC0pCi0KLWRpZmYgLS1naXQgYS9leHQvZ2wvZ3N0b3BlbmdsLmMgYi9leHQvZ2wvZ3N0b3BlbmdsLmMKLWluZGV4IGE0YjI1NDAuLjBjY2FhY2QgMTAwNjQ0Ci0tLS0gYS9leHQvZ2wvZ3N0b3BlbmdsLmMKLSsrKyBiL2V4dC9nbC9nc3RvcGVuZ2wuYwotQEAgLTEwMSw3ICsxMDEsNyBAQCBwbHVnaW5faW5pdCAoR3N0UGx1Z2luICogcGx1Z2luKQotICNlbmRpZgotIAotICAgaWYgKCFnc3RfZWxlbWVudF9yZWdpc3RlciAocGx1Z2luLCAiZ2xpbWFnZXNpbmsiLAotLSAgICAgICAgICBHU1RfUkFOS19TRUNPTkRBUlksIGdzdF9nbF9pbWFnZV9zaW5rX2Jpbl9nZXRfdHlwZSAoKSkpIHsKLSsgICAgICAgICAgR1NUX1JBTktfTUFSR0lOQUwsIGdzdF9nbF9pbWFnZV9zaW5rX2Jpbl9nZXRfdHlwZSAoKSkpIHsKLSAgICAgcmV0dXJuIEZBTFNFOwotICAgfQotIAotLS0gCi0yLjEuNAotCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvZ3N0cmVhbWVyL2dzdHJlYW1lcjEuMC1wbHVnaW5zLWJhZC8wMDAyLWdscGx1Z2luLWVuYWJsZS1nbGRlaW50ZXJsYWNlLW9uLU9wZW5HTC1FUy5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9nc3RyZWFtZXIvZ3N0cmVhbWVyMS4wLXBsdWdpbnMtYmFkLzAwMDItZ2xwbHVnaW4tZW5hYmxlLWdsZGVpbnRlcmxhY2Utb24tT3BlbkdMLUVTLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjUxZjRlYjQKLS0tIC9kZXYvbnVsbAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvZ3N0cmVhbWVyL2dzdHJlYW1lcjEuMC1wbHVnaW5zLWJhZC8wMDAyLWdscGx1Z2luLWVuYWJsZS1nbGRlaW50ZXJsYWNlLW9uLU9wZW5HTC1FUy5wYXRjaApAQCAtMCwwICsxLDYzNCBAQAorRnJvbSA4YTBlOTdmN2U2NzIzMDFjYzc2ZTM5NDg1NWU4YzdhMzQ0OGIwMjQ5IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogSGFpaHVhIEh1IDxqYXJlZC5odUBueHAuY29tPgorRGF0ZTogRnJpLCA4IEFwciAyMDE2IDE2OjQ3OjE1ICswODAwCitTdWJqZWN0OiBbUEFUQ0ggNC82XSBbZ2xwbHVnaW5dIGVuYWJsZSBnbGRlaW50ZXJsYWNlIG9uIE9wZW5HTCBFUworTUlNRS1WZXJzaW9uOiAxLjAKK0NvbnRlbnQtVHlwZTogdGV4dC9wbGFpbjsgY2hhcnNldD1VVEYtOAorQ29udGVudC1UcmFuc2Zlci1FbmNvZGluZzogOGJpdAorCisxLlBvcnRpbmcgdGhlIGV4aXN0IGRlaW50ZXJsYWNlIHNoYWRlciBhbmQgT3BlbkdMIGNhbGxiYWNrCisgIHRvIGJlIGNvbXBhdGlibGUgd2l0aCBPcGVuR0wgRVMuCisyLkFkZCBhIG91ciBibHVyIHZlcnRpY2FsIHNoYWRlciB0byBnbGRlaW50ZXJsYWNlLgorMy5BZGQgYSBwcm9wZXJ0eSBuYW1lZCDigJxtZXRob2TigJ0gdG8gbGV0IHVzZXIgY2hvb3NlIHdoaWNoCisgIGRlaW50ZXJsYWNlIGZ1bmN0aW9uIHRvIHVzZS4gRGVmYXVsdCB0byBjaG9vc2UgYmx1ciB2ZXJ0aWNhbAorICBtZXRob2QgZm9yIGJldHRlciBwZXJmb3JtYW5jZS4KKworVXBzdHJlYW0tU3RhdHVzOiBCYWNrcG9ydCBbMS45LjFdCisKK2h0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03NjQ4NzMKKworU2lnbmVkLW9mZi1ieTogSGFpaHVhIEh1IDxqYXJlZC5odUBueHAuY29tPgorLS0tCisgZXh0L2dsL01ha2VmaWxlLmFtICAgICAgICB8ICAgNCArLQorIGV4dC9nbC9nc3RnbGRlaW50ZXJsYWNlLmMgfCAzNDQgKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKystLS0tLS0tLS0tLQorIGV4dC9nbC9nc3RnbGRlaW50ZXJsYWNlLmggfCAgIDYgKy0KKyBleHQvZ2wvZ3N0b3BlbmdsLmMgICAgICAgIHwgIDEzICstCisgNCBmaWxlcyBjaGFuZ2VkLCAyNzUgaW5zZXJ0aW9ucygrKSwgOTIgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9leHQvZ2wvTWFrZWZpbGUuYW0gYi9leHQvZ2wvTWFrZWZpbGUuYW0KK2luZGV4IDVkNTVmNTQuLjQ2NDE5YTcgMTAwNjQ0CistLS0gYS9leHQvZ2wvTWFrZWZpbGUuYW0KKysrKyBiL2V4dC9nbC9NYWtlZmlsZS5hbQorQEAgLTQwLDYgKzQwLDcgQEAgbGliZ3N0b3BlbmdsX2xhX1NPVVJDRVMgPSBcCisgCWdzdGdsZmlsdGVyYXBwLmMgXAorIAlnc3RnbHZpZXdjb252ZXJ0LmMgXAorIAlnc3RnbHN0ZXJlb3NwbGl0LmMgXAorKwlnc3RnbGRlaW50ZXJsYWNlLmMgXAorIAlnc3RnbHN0ZXJlb21peC5jCisgCisgbm9pbnN0X0hFQURFUlMgPSBcCitAQCAtNjMsMjAgKzY0LDE5IEBAIG5vaW5zdF9IRUFERVJTID0gXAorIAlnc3RnbGZpbHRlcmFwcC5oIFwKKyAJZ3N0Z2xzdGVyZW9zcGxpdC5oIFwKKyAJZ3N0Z2xzdGVyZW9taXguaCBcCisrCWdzdGdsZGVpbnRlcmxhY2UuaCBcCisgCWdzdGdsdmlld2NvbnZlcnQuaAorIAorICMgZnVsbCBvcGVuZ2wgcmVxdWlyZWQKKyBpZiBVU0VfT1BFTkdMCisgbGliZ3N0b3BlbmdsX2xhX1NPVVJDRVMgKz0gXAorIAlnc3RnbGZpbHRlcmdsYXNzLmMgXAorLQlnc3RnbGRlaW50ZXJsYWNlLmMgXAorIAlnbHRlc3RzcmMuYyBcCisgCWdzdGdsdGVzdHNyYy5jIFwKKyAJZ3N0Z2xtb3NhaWMuYworIAorIG5vaW5zdF9IRUFERVJTICs9IFwKKyAJZ3N0Z2xmaWx0ZXJnbGFzcy5oIFwKKy0JZ3N0Z2xkZWludGVybGFjZS5oIFwKKyAJZ2x0ZXN0c3JjLmggXAorIAlnc3RnbHRlc3RzcmMuaCBcCisgCWdzdGdsbW9zYWljLmggXAorZGlmZiAtLWdpdCBhL2V4dC9nbC9nc3RnbGRlaW50ZXJsYWNlLmMgYi9leHQvZ2wvZ3N0Z2xkZWludGVybGFjZS5jCitpbmRleCBiZDBlZmYwLi5jMTI1MGRjIDEwMDY0NAorLS0tIGEvZXh0L2dsL2dzdGdsZGVpbnRlcmxhY2UuYworKysrIGIvZXh0L2dsL2dzdGdsZGVpbnRlcmxhY2UuYworQEAgLTQzLDcgKzQzLDggQEAgR1NUX0RFQlVHX0NBVEVHT1JZX1NUQVRJQyAoR1NUX0NBVF9ERUZBVUxUKTsKKyAKKyBlbnVtCisgeworLSAgUFJPUF8wCisrICBQUk9QXzAsCisrICBQUk9QX01FVEhPRAorIH07CisgCisgI2RlZmluZSBERUJVR19JTklUIFwKK0BAIC01NywxNyArNTgsMjMgQEAgc3RhdGljIHZvaWQgZ3N0X2dsX2RlaW50ZXJsYWNlX3NldF9wcm9wZXJ0eSAoR09iamVjdCAqIG9iamVjdCwKKyBzdGF0aWMgdm9pZCBnc3RfZ2xfZGVpbnRlcmxhY2VfZ2V0X3Byb3BlcnR5IChHT2JqZWN0ICogb2JqZWN0LAorICAgICBndWludCBwcm9wX2lkLCBHVmFsdWUgKiB2YWx1ZSwgR1BhcmFtU3BlYyAqIHBzcGVjKTsKKyAKKytzdGF0aWMgZ2Jvb2xlYW4gZ3N0X2dsX2RlaW50ZXJsYWNlX3N0YXJ0IChHc3RCYXNlVHJhbnNmb3JtICogdHJhbnMpOworIHN0YXRpYyBnYm9vbGVhbiBnc3RfZ2xfZGVpbnRlcmxhY2VfcmVzZXQgKEdzdEJhc2VUcmFuc2Zvcm0gKiB0cmFucyk7Cistc3RhdGljIGdib29sZWFuIGdzdF9nbF9kZWludGVybGFjZV9pbml0X3NoYWRlciAoR3N0R0xGaWx0ZXIgKiBmaWx0ZXIpOworK3N0YXRpYyBnYm9vbGVhbiBnc3RfZ2xfZGVpbnRlcmxhY2VfaW5pdF9mYm8gKEdzdEdMRmlsdGVyICogZmlsdGVyKTsKKyBzdGF0aWMgZ2Jvb2xlYW4gZ3N0X2dsX2RlaW50ZXJsYWNlX2ZpbHRlciAoR3N0R0xGaWx0ZXIgKiBmaWx0ZXIsCisgICAgIEdzdEJ1ZmZlciAqIGluYnVmLCBHc3RCdWZmZXIgKiBvdXRidWYpOworIHN0YXRpYyBnYm9vbGVhbiBnc3RfZ2xfZGVpbnRlcmxhY2VfZmlsdGVyX3RleHR1cmUgKEdzdEdMRmlsdGVyICogZmlsdGVyLAorICAgICBndWludCBpbl90ZXgsIGd1aW50IG91dF90ZXgpOworLXN0YXRpYyB2b2lkIGdzdF9nbF9kZWludGVybGFjZV9jYWxsYmFjayAoZ2ludCB3aWR0aCwgZ2ludCBoZWlnaHQsCisrc3RhdGljIHZvaWQgZ3N0X2dsX2RlaW50ZXJsYWNlX3ZmaXJfY2FsbGJhY2sgKGdpbnQgd2lkdGgsIGdpbnQgaGVpZ2h0LAorKyAgICBndWludCB0ZXh0dXJlLCBncG9pbnRlciBzdHVmZik7Cisrc3RhdGljIHZvaWQgZ3N0X2dsX2RlaW50ZXJsYWNlX2dyZWVkeWhfY2FsbGJhY2sgKGdpbnQgd2lkdGgsIGdpbnQgaGVpZ2h0LAorICAgICBndWludCB0ZXh0dXJlLCBncG9pbnRlciBzdHVmZik7CisgCisgLyogKklOREVOVC1PRkYqICovCisgc3RhdGljIGNvbnN0IGdjaGFyICpncmVlZHloX2ZyYWdtZW50X3NvdXJjZSA9CisrICAiI2lmZGVmIEdMX0VTXG4iCisrICAicHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7XG4iCisrICAiI2VuZGlmXG4iCisgICAidW5pZm9ybSBzYW1wbGVyMkQgdGV4O1xuIgorICAgInVuaWZvcm0gc2FtcGxlcjJEIHRleF9wcmV2O1xuIgorICAgInVuaWZvcm0gZmxvYXQgbWF4X2NvbWI7XG4iCitAQCAtNzUsMzUgKzgyLDM1IEBAIHN0YXRpYyBjb25zdCBnY2hhciAqZ3JlZWR5aF9mcmFnbWVudF9zb3VyY2UgPQorICAgInVuaWZvcm0gZmxvYXQgbW90aW9uX3NlbnNlO1xuIgorICAgInVuaWZvcm0gZmxvYXQgd2lkdGg7XG4iCisgICAidW5pZm9ybSBmbG9hdCBoZWlnaHQ7XG4iCisrICAidmFyeWluZyB2ZWMyIHZfdGV4Y29vcmQ7XG4iCisgCisgICAidm9pZCBtYWluICgpIHtcbiIKKy0gICIgIHZlYzIgdGV4Y29vcmQgPSBnbF9UZXhDb29yZFswXS54eTtcbiIKKy0gICIgIGlmIChpbnQobW9kKHRleGNvb3JkLnkgKiBoZWlnaHQsIDIuMCkpID09IDApIHtcbiIKKy0gICIgICAgZ2xfRnJhZ0NvbG9yID0gdmVjNCh0ZXh0dXJlMkQodGV4X3ByZXYsIHRleGNvb3JkKS5yZ2IsIDEuMCk7XG4iCisrICAiICBpZiAoaW50KG1vZCh2X3RleGNvb3JkLnkgKiBoZWlnaHQsIDIuMCkpID09IDApIHtcbiIKKysgICIgICAgZ2xfRnJhZ0NvbG9yID0gdmVjNCh0ZXh0dXJlMkQodGV4X3ByZXYsIHZfdGV4Y29vcmQpLnJnYiwgMS4wKTtcbiIKKyAgICIgIH0gZWxzZSB7XG4iCisgICAiICAgIHZlYzIgdGV4Y29vcmRfTDFfYTEsIHRleGNvb3JkX0wzX2ExLCB0ZXhjb29yZF9MMSwgdGV4Y29vcmRfTDMsIHRleGNvb3JkX0wxXzEsIHRleGNvb3JkX0wzXzE7XG4iCisgICAiICAgIHZlYzMgTDFfYTEsIEwzX2ExLCBMMSwgTDMsIEwxXzEsIEwzXzE7XG4iCisgCistICAiICAgIHRleGNvb3JkX0wxID0gdmVjMih0ZXhjb29yZC54LCB0ZXhjb29yZC55IC0gMS4wIC8gaGVpZ2h0KTtcbiIKKy0gICIgICAgdGV4Y29vcmRfTDMgPSB2ZWMyKHRleGNvb3JkLngsIHRleGNvb3JkLnkgKyAxLjAgLyBoZWlnaHQpO1xuIgorKyAgIiAgICB0ZXhjb29yZF9MMSA9IHZlYzIodl90ZXhjb29yZC54LCB2X3RleGNvb3JkLnkgLSAxLjAgLyBoZWlnaHQpO1xuIgorKyAgIiAgICB0ZXhjb29yZF9MMyA9IHZlYzIodl90ZXhjb29yZC54LCB2X3RleGNvb3JkLnkgKyAxLjAgLyBoZWlnaHQpO1xuIgorICAgIiAgICBMMSA9IHRleHR1cmUyRCh0ZXhfcHJldiwgdGV4Y29vcmRfTDEpLnJnYjtcbiIKKyAgICIgICAgTDMgPSB0ZXh0dXJlMkQodGV4X3ByZXYsIHRleGNvb3JkX0wzKS5yZ2I7XG4iCistICAiICAgIGlmICh0ZXhjb29yZC54ID09IDEuMCAmJiB0ZXhjb29yZC55ID09IDEuMCkge1xuIgorKyAgIiAgICBpZiAodl90ZXhjb29yZC54ID09IDEuMCAmJiB2X3RleGNvb3JkLnkgPT0gMS4wKSB7XG4iCisgICAiICAgICAgTDFfMSA9IEwxO1xuIgorICAgIiAgICAgIEwzXzEgPSBMMztcbiIKKyAgICIgICAgfSBlbHNlIHtcbiIKKy0gICIgICAgICB0ZXhjb29yZF9MMV8xID0gdmVjMih0ZXhjb29yZC54ICsgMS4wIC8gd2lkdGgsIHRleGNvb3JkLnkgLSAxLjAgLyBoZWlnaHQpO1xuIgorLSAgIiAgICAgIHRleGNvb3JkX0wzXzEgPSB2ZWMyKHRleGNvb3JkLnggKyAxLjAgLyB3aWR0aCwgdGV4Y29vcmQueSArIDEuMCAvIGhlaWdodCk7XG4iCisrICAiICAgICAgdGV4Y29vcmRfTDFfMSA9IHZlYzIodl90ZXhjb29yZC54ICsgMS4wIC8gd2lkdGgsIHZfdGV4Y29vcmQueSAtIDEuMCAvIGhlaWdodCk7XG4iCisrICAiICAgICAgdGV4Y29vcmRfTDNfMSA9IHZlYzIodl90ZXhjb29yZC54ICsgMS4wIC8gd2lkdGgsIHZfdGV4Y29vcmQueSArIDEuMCAvIGhlaWdodCk7XG4iCisgICAiICAgICAgTDFfMSA9IHRleHR1cmUyRCh0ZXhfcHJldiwgdGV4Y29vcmRfTDFfMSkucmdiO1xuIgorICAgIiAgICAgIEwzXzEgPSB0ZXh0dXJlMkQodGV4X3ByZXYsIHRleGNvb3JkX0wzXzEpLnJnYjtcbiIKKyAgICIgICAgfVxuIgorIAorLSAgIiAgICBpZiAoaW50KGNlaWwodGV4Y29vcmQueCArIHRleGNvb3JkLnkpKSA9PSAwKSB7XG4iCisrICAiICAgIGlmIChpbnQoY2VpbCh2X3RleGNvb3JkLnggKyB2X3RleGNvb3JkLnkpKSA9PSAwKSB7XG4iCisgICAiICAgICAgTDFfYTEgPSBMMTtcbiIKKyAgICIgICAgICBMM19hMSA9IEwzO1xuIgorICAgIiAgICB9IGVsc2Uge1xuIgorLSAgIiAgICAgIHRleGNvb3JkX0wxX2ExID0gdmVjMih0ZXhjb29yZC54IC0gMS4wIC8gd2lkdGgsIHRleGNvb3JkLnkgLSAxLjAgLyBoZWlnaHQpO1xuIgorLSAgIiAgICAgIHRleGNvb3JkX0wzX2ExID0gdmVjMih0ZXhjb29yZC54IC0gMS4wIC8gd2lkdGgsIHRleGNvb3JkLnkgKyAxLjAgLyBoZWlnaHQpO1xuIgorKyAgIiAgICAgIHRleGNvb3JkX0wxX2ExID0gdmVjMih2X3RleGNvb3JkLnggLSAxLjAgLyB3aWR0aCwgdl90ZXhjb29yZC55IC0gMS4wIC8gaGVpZ2h0KTtcbiIKKysgICIgICAgICB0ZXhjb29yZF9MM19hMSA9IHZlYzIodl90ZXhjb29yZC54IC0gMS4wIC8gd2lkdGgsIHZfdGV4Y29vcmQueSArIDEuMCAvIGhlaWdodCk7XG4iCisgICAiICAgICAgTDFfYTEgPSB0ZXh0dXJlMkQodGV4X3ByZXYsIHRleGNvb3JkX0wxX2ExKS5yZ2I7XG4iCisgICAiICAgICAgTDNfYTEgPSB0ZXh0dXJlMkQodGV4X3ByZXYsIHRleGNvb3JkX0wzX2ExKS5yZ2I7XG4iCisgICAiICAgIH1cbiIKK0BAIC0xMTMsOCArMTIwLDggQEAgc3RhdGljIGNvbnN0IGdjaGFyICpncmVlZHloX2ZyYWdtZW50X3NvdXJjZSA9CisgICAiICAgIHZlYzMgYXZnXzEgPSAoTDFfMSArIEwzXzEpIC8gMi4wO1xuIgorICAgIiAgICB2ZWMzIGF2Z19zID0gKGF2Z19hMSArIGF2Z18xKSAvIDIuMDtcbiIKKyAgICIgICAgdmVjMyBhdmdfc2MgPSAoYXZnX3MgKyBhdmcpIC8gMi4wO1xuIgorLSAgIiAgICB2ZWMzIEwyID0gdGV4dHVyZTJEKHRleCwgdGV4Y29vcmQpLnJnYjtcbiIKKy0gICIgICAgdmVjMyBMUDIgPSB0ZXh0dXJlMkQodGV4X3ByZXYsIHRleGNvb3JkKS5yZ2I7XG4iCisrICAiICAgIHZlYzMgTDIgPSB0ZXh0dXJlMkQodGV4LCB2X3RleGNvb3JkKS5yZ2I7XG4iCisrICAiICAgIHZlYzMgTFAyID0gdGV4dHVyZTJEKHRleF9wcmV2LCB2X3RleGNvb3JkKS5yZ2I7XG4iCisgICAiICAgIHZlYzMgYmVzdDtcbiIKKyAgICIgICAgaWYgKGFicyhMMi5yIC0gYXZnX3NjLnIpIDwgYWJzKExQMi5yIC0gYXZnX3NjLnIpKSB7XG4iCisgICAiICAgICAgYmVzdC5yID0gTDIucjtcbiIgIiAgICB9IGVsc2Uge1xuIgorQEAgLTE0NCw4ICsxNTEsODcgQEAgc3RhdGljIGNvbnN0IGdjaGFyICpncmVlZHloX2ZyYWdtZW50X3NvdXJjZSA9CisgICAiICAgIGdsX0ZyYWdDb2xvciA9IHZlYzQobGFzdCwgMS4wKTtcbiIKKyAgICIgIH1cbiIKKyAgICJ9XG4iOworKworK2NvbnN0IGdjaGFyICp2ZmlyX2ZyYWdtZW50X3NvdXJjZSA9CisrICAiI2lmZGVmIEdMX0VTXG4iCisrICAicHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7XG4iCisrICAiI2VuZGlmXG4iCisrICAidW5pZm9ybSBzYW1wbGVyMkQgdGV4O1xuIgorKyAgInVuaWZvcm0gZmxvYXQgd2lkdGg7XG4iCisrICAidW5pZm9ybSBmbG9hdCBoZWlnaHQ7XG4iCisrICAidmFyeWluZyB2ZWMyIHZfdGV4Y29vcmQ7XG4iCisrICAidm9pZCBtYWluKClcbiIKKysgICJ7XG4iCisrICAiICB2ZWMyIHRvcGNvb3JkLCBib3Rjb29yZDtcbiIKKysgICIgIHZlYzQgY3VyX2NvbG9yLCB0b3BfY29sb3IsIGJvdF9jb2xvcjtcbiIKKysgICIgIHRvcGNvb3JkLnggPSB2X3RleGNvb3JkLng7XG4iCisrICAiICBib3Rjb29yZC54ID0gdl90ZXhjb29yZC54O1xuIgorKyAgIiAgaWYgKHZfdGV4Y29vcmQueSA9PSAwLjAgfHwgdl90ZXhjb29yZC55ID09IDEuMCkge1xuIgorKyAgIiAgICB0b3Bjb29yZC55ID0gdl90ZXhjb29yZC55IDtcbiIKKysgICIgICAgYm90Y29vcmQueSA9IHZfdGV4Y29vcmQueSA7XG4iCisrICAiICB9XG4iCisrICAiICBlbHNlIHtcbiIKKysgICIgICAgdG9wY29vcmQueSA9IHZfdGV4Y29vcmQueSAtIDEuMC9oZWlnaHQ7XG4iCisrICAiICAgIGJvdGNvb3JkLnkgPSB2X3RleGNvb3JkLnkgKyAxLjAvaGVpZ2h0O1xuIgorKyAgIiAgfVxuIgorKyAgIiAgY3VyX2NvbG9yID0gdGV4dHVyZTJEKHRleCwgdl90ZXhjb29yZCk7XG4iCisrICAiICB0b3BfY29sb3IgPSB0ZXh0dXJlMkQodGV4LCB0b3Bjb29yZCk7XG4iCisrICAiICBib3RfY29sb3IgPSB0ZXh0dXJlMkQodGV4LCBib3Rjb29yZCk7XG4iCisrICAiICBnbF9GcmFnQ29sb3IgPSAwLjUqY3VyX2NvbG9yICsgMC4yNSp0b3BfY29sb3IgKyAwLjI1KmJvdF9jb2xvcjtcbiIKKysgICJ9IjsKKyAvKiAqSU5ERU5ULU9OKiAqLworIAorKy8qIGRvbnQnIGZvcmdldCB0byBlZGl0IHRoZSBmb2xsb3dpbmcgd2hlbiBhIG5ldyBtZXRob2QgaXMgYWRkZWQgKi8KKyt0eXBlZGVmIGVudW0KKyt7CisrICBHU1RfR0xfREVJTlRFUkxBQ0VfVkZJUiwKKysgIEdTVF9HTF9ERUlOVEVSTEFDRV9HUkVFRFlICisrfSBHc3RHTERlaW50ZXJsYWNlTWV0aG9kOworKworK3N0YXRpYyBjb25zdCBHRW51bVZhbHVlICoKKytnc3RfZ2xfZGVpbnRlcmxhY2VfZ2V0X21ldGhvZHMgKHZvaWQpCisreworKyAgc3RhdGljIGNvbnN0IEdFbnVtVmFsdWUgbWV0aG9kX3R5cGVzW10gPSB7CisrICAgIHtHU1RfR0xfREVJTlRFUkxBQ0VfVkZJUiwgIkJsdXIgVmVydGljYWwiLCAidmZpciJ9LAorKyAgICB7R1NUX0dMX0RFSU5URVJMQUNFX0dSRUVEWUgsICJNb3Rpb24gQWRhcHRpdmU6IEFkdmFuY2VkIERldGVjdGlvbiIsCisrICAgICAgICAgICJncmVlZGh5In0sCisrICAgIHswLCBOVUxMLCBOVUxMfQorKyAgfTsKKysgIHJldHVybiBtZXRob2RfdHlwZXM7CisrfQorKworKyNkZWZpbmUgR1NUX1RZUEVfR0xfREVJTlRFUkxBQ0VfTUVUSE9EUyAoZ3N0X2dsX2RlaW50ZXJsYWNlX21ldGhvZF9nZXRfdHlwZSAoKSkKKytzdGF0aWMgR1R5cGUKKytnc3RfZ2xfZGVpbnRlcmxhY2VfbWV0aG9kX2dldF90eXBlICh2b2lkKQorK3sKKysgIHN0YXRpYyBHVHlwZSBnbF9kZWludGVybGFjZV9tZXRob2RfdHlwZSA9IDA7CisrICBpZiAoIWdsX2RlaW50ZXJsYWNlX21ldGhvZF90eXBlKSB7CisrICAgIGdsX2RlaW50ZXJsYWNlX21ldGhvZF90eXBlID0KKysgICAgICAgIGdfZW51bV9yZWdpc3Rlcl9zdGF0aWMgKCJHc3RHTERlaW50ZXJsYWNlTWV0aG9kIiwKKysgICAgICAgIGdzdF9nbF9kZWludGVybGFjZV9nZXRfbWV0aG9kcyAoKSk7CisrICB9CisrICByZXR1cm4gZ2xfZGVpbnRlcmxhY2VfbWV0aG9kX3R5cGU7CisrfQorKworK3N0YXRpYyB2b2lkCisrZ3N0X2dsX2RlaW50ZXJsYWNlX3NldF9tZXRob2QgKEdzdEdMRGVpbnRlcmxhY2UgKiBkZWludGVybGFjZSwKKysgICAgZ3VpbnQgbWV0aG9kX3R5cGVzKQorK3sKKysgIHN3aXRjaCAobWV0aG9kX3R5cGVzKSB7CisrICAgIGNhc2UgR1NUX0dMX0RFSU5URVJMQUNFX1ZGSVI6CisrICAgICAgZGVpbnRlcmxhY2UtPmRlaW50ZXJsYWNlZnVuYyA9IGdzdF9nbF9kZWludGVybGFjZV92ZmlyX2NhbGxiYWNrOworKyAgICAgIGRlaW50ZXJsYWNlLT5jdXJyZW50X21ldGhvZCA9IG1ldGhvZF90eXBlczsKKysgICAgICBicmVhazsKKysgICAgY2FzZSBHU1RfR0xfREVJTlRFUkxBQ0VfR1JFRURZSDoKKysgICAgICBkZWludGVybGFjZS0+ZGVpbnRlcmxhY2VmdW5jID0gZ3N0X2dsX2RlaW50ZXJsYWNlX2dyZWVkeWhfY2FsbGJhY2s7CisrICAgICAgZGVpbnRlcmxhY2UtPmN1cnJlbnRfbWV0aG9kID0gbWV0aG9kX3R5cGVzOworKyAgICAgIGJyZWFrOworKyAgICBkZWZhdWx0OgorKyAgICAgIGdfYXNzZXJ0X25vdF9yZWFjaGVkICgpOworKyAgICAgIGJyZWFrOworKyAgfQorK30KKysKKyBzdGF0aWMgdm9pZAorIGdzdF9nbF9kZWludGVybGFjZV9jbGFzc19pbml0IChHc3RHTERlaW50ZXJsYWNlQ2xhc3MgKiBrbGFzcykKKyB7CitAQCAtMTYzLDI1ICsyNDksNjAgQEAgZ3N0X2dsX2RlaW50ZXJsYWNlX2NsYXNzX2luaXQgKEdzdEdMRGVpbnRlcmxhY2VDbGFzcyAqIGtsYXNzKQorICAgICAgICJEZWludGVybGFjaW5nIGJhc2VkIG9uIGZyYWdtZW50IHNoYWRlcnMiLAorICAgICAgICJKdWxpZW4gSXNvcmNlIDxqdWxpZW4uaXNvcmNlQG1haWwuY29tPiIpOworIAorKyAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSAoZ29iamVjdF9jbGFzcywKKysgICAgICBQUk9QX01FVEhPRCwKKysgICAgICBnX3BhcmFtX3NwZWNfZW51bSAoIm1ldGhvZCIsCisrICAgICAgICAgICJEZWludGVybGFjZSBNZXRob2QiLAorKyAgICAgICAgICAiU2VsZWN0IHdoaWNoIGRlaW50ZXJsYWNlIG1ldGhvZCBhcHBseSB0byBHTCB2aWRlbyB0ZXh0dXJlIiwKKysgICAgICAgICAgR1NUX1RZUEVfR0xfREVJTlRFUkxBQ0VfTUVUSE9EUywKKysgICAgICAgICAgR1NUX0dMX0RFSU5URVJMQUNFX1ZGSVIsIEdfUEFSQU1fUkVBRFdSSVRFIHwgR19QQVJBTV9TVEFUSUNfU1RSSU5HUykpOworKworKyAgR1NUX0JBU0VfVFJBTlNGT1JNX0NMQVNTIChrbGFzcyktPnN0YXJ0ID0gZ3N0X2dsX2RlaW50ZXJsYWNlX3N0YXJ0OworICAgR1NUX0JBU0VfVFJBTlNGT1JNX0NMQVNTIChrbGFzcyktPnN0b3AgPSBnc3RfZ2xfZGVpbnRlcmxhY2VfcmVzZXQ7CisgCisgICBHU1RfR0xfRklMVEVSX0NMQVNTIChrbGFzcyktPmZpbHRlciA9IGdzdF9nbF9kZWludGVybGFjZV9maWx0ZXI7CisgICBHU1RfR0xfRklMVEVSX0NMQVNTIChrbGFzcyktPmZpbHRlcl90ZXh0dXJlID0KKyAgICAgICBnc3RfZ2xfZGVpbnRlcmxhY2VfZmlsdGVyX3RleHR1cmU7CistICBHU1RfR0xfRklMVEVSX0NMQVNTIChrbGFzcyktPmluaXRfZmJvID0gZ3N0X2dsX2RlaW50ZXJsYWNlX2luaXRfc2hhZGVyOworKyAgR1NUX0dMX0ZJTFRFUl9DTEFTUyAoa2xhc3MpLT5pbml0X2ZibyA9IGdzdF9nbF9kZWludGVybGFjZV9pbml0X2ZibzsKKyAKKy0gIEdTVF9HTF9CQVNFX0ZJTFRFUl9DTEFTUyAoa2xhc3MpLT5zdXBwb3J0ZWRfZ2xfYXBpID0gR1NUX0dMX0FQSV9PUEVOR0w7CisrICBHU1RfR0xfQkFTRV9GSUxURVJfQ0xBU1MgKGtsYXNzKS0+c3VwcG9ydGVkX2dsX2FwaSA9CisrICAgICAgR1NUX0dMX0FQSV9PUEVOR0wgfCBHU1RfR0xfQVBJX0dMRVMyIHwgR1NUX0dMX0FQSV9PUEVOR0wzOworIH0KKyAKKyBzdGF0aWMgdm9pZAorIGdzdF9nbF9kZWludGVybGFjZV9pbml0IChHc3RHTERlaW50ZXJsYWNlICogZmlsdGVyKQorIHsKKy0gIGZpbHRlci0+c2hhZGVyID0gTlVMTDsKKysgIGZpbHRlci0+c2hhZGVyc3RhYmxlID0gTlVMTDsKKysgIGZpbHRlci0+ZGVpbnRlcmxhY2VmdW5jID0gZ3N0X2dsX2RlaW50ZXJsYWNlX3ZmaXJfY2FsbGJhY2s7CisrICBmaWx0ZXItPmN1cnJlbnRfbWV0aG9kID0gR1NUX0dMX0RFSU5URVJMQUNFX1ZGSVI7CisgICBmaWx0ZXItPnByZXZfYnVmZmVyID0gTlVMTDsKKyAgIGZpbHRlci0+cHJldl90ZXggPSAwOworIH0KKyAKKyBzdGF0aWMgZ2Jvb2xlYW4KKytnc3RfZ2xfZGVpbnRlcmxhY2Vfc3RhcnQgKEdzdEJhc2VUcmFuc2Zvcm0gKiB0cmFucykKKyt7CisrICBHc3RHTERlaW50ZXJsYWNlICpkZWludGVybGFjZV9maWx0ZXIgPSBHU1RfR0xfREVJTlRFUkxBQ0UgKHRyYW5zKTsKKysKKysgIGRlaW50ZXJsYWNlX2ZpbHRlci0+c2hhZGVyc3RhYmxlID0gZ19oYXNoX3RhYmxlX25ldyAoZ19zdHJfaGFzaCwgZ19zdHJfZXF1YWwpOworKworKyAgcmV0dXJuIEdTVF9CQVNFX1RSQU5TRk9STV9DTEFTUyAocGFyZW50X2NsYXNzKS0+c3RhcnQgKHRyYW5zKTsKKyt9CisrCisrc3RhdGljIHZvaWQKKytnc3RfZ2xfZGVpbnRlcmxhY2VfZ2hhc2hfZnVuY19jbGVhbiAoZ3BvaW50ZXIga2V5LCBncG9pbnRlciB2YWx1ZSwKKysgICAgZ3BvaW50ZXIgZGF0YSkKKyt7CisrICBHc3RHTFNoYWRlciAqc2hhZGVyID0gKEdzdEdMU2hhZGVyICopIHZhbHVlOworKyAgR3N0R0xGaWx0ZXIgKmZpbHRlciA9IChHc3RHTEZpbHRlciAqKSBkYXRhOworKworKyAgLy9ibG9ja2luZyBjYWxsLCB3YWl0IHRoZSBvcGVuZ2wgdGhyZWFkIGhhcyBkZXN0cm95ZWQgdGhlIHNoYWRlcgorKyAgZ3N0X2dsX2NvbnRleHRfZGVsX3NoYWRlciAoR1NUX0dMX0JBU0VfRklMVEVSIChmaWx0ZXIpLT5jb250ZXh0LCBzaGFkZXIpOworKworKyAgdmFsdWUgPSBOVUxMOworK30KKysKKytzdGF0aWMgZ2Jvb2xlYW4KKyBnc3RfZ2xfZGVpbnRlcmxhY2VfcmVzZXQgKEdzdEJhc2VUcmFuc2Zvcm0gKiB0cmFucykKKyB7CisgICBHc3RHTERlaW50ZXJsYWNlICpkZWludGVybGFjZV9maWx0ZXIgPSBHU1RfR0xfREVJTlRFUkxBQ0UgKHRyYW5zKTsKK0BAIC0xODksMTAgKzMxMCwxNyBAQCBnc3RfZ2xfZGVpbnRlcmxhY2VfcmVzZXQgKEdzdEJhc2VUcmFuc2Zvcm0gKiB0cmFucykKKyAgIGdzdF9idWZmZXJfcmVwbGFjZSAoJmRlaW50ZXJsYWNlX2ZpbHRlci0+cHJldl9idWZmZXIsIE5VTEwpOworIAorICAgLy9ibG9ja2luZyBjYWxsLCB3YWl0IHRoZSBvcGVuZ2wgdGhyZWFkIGhhcyBkZXN0cm95ZWQgdGhlIHNoYWRlcgorLSAgaWYgKGRlaW50ZXJsYWNlX2ZpbHRlci0+c2hhZGVyKQorLSAgICBnc3RfZ2xfY29udGV4dF9kZWxfc2hhZGVyIChHU1RfR0xfQkFTRV9GSUxURVIgKHRyYW5zKS0+Y29udGV4dCwKKy0gICAgICAgIGRlaW50ZXJsYWNlX2ZpbHRlci0+c2hhZGVyKTsKKy0gIGRlaW50ZXJsYWNlX2ZpbHRlci0+c2hhZGVyID0gTlVMTDsKKysgIGlmIChkZWludGVybGFjZV9maWx0ZXItPnNoYWRlcnN0YWJsZSkgeworKyAgICAvKiByZWxlYXNlIHNoYWRlcnMgaW4gdGhlIGdsIHRocmVhZCAqLworKyAgICBnX2hhc2hfdGFibGVfZm9yZWFjaCAoZGVpbnRlcmxhY2VfZmlsdGVyLT5zaGFkZXJzdGFibGUsCisrICAgICAgICBnc3RfZ2xfZGVpbnRlcmxhY2VfZ2hhc2hfZnVuY19jbGVhbiwgZGVpbnRlcmxhY2VfZmlsdGVyKTsKKysKKysgICAgLyogY2xlYW4gdGhlIGh0YWJsZSB3aXRob3V0IGNhbGxpbmcgdmFsdWVzIGRlc3RydWN0b3JzCisrICAgICAqIGJlY2F1c2Ugc2hhZGVycyBoYXZlIGJlZW4gcmVsZWFzZWQgaW4gdGhlIGdsdGhyZWFkCisrICAgICAqIHRocm91Z2ggdGhlIGZvcmVhY2ggZnVuYyAqLworKyAgICBnX2hhc2hfdGFibGVfdW5yZWYgKGRlaW50ZXJsYWNlX2ZpbHRlci0+c2hhZGVyc3RhYmxlKTsKKysgICAgZGVpbnRlcmxhY2VfZmlsdGVyLT5zaGFkZXJzdGFibGUgPSBOVUxMOworKyAgfQorIAorICAgcmV0dXJuIEdTVF9CQVNFX1RSQU5TRk9STV9DTEFTUyAocGFyZW50X2NsYXNzKS0+c3RvcCAodHJhbnMpOworIH0KK0BAIC0yMDEsOSArMzI5LDEyIEBAIHN0YXRpYyB2b2lkCisgZ3N0X2dsX2RlaW50ZXJsYWNlX3NldF9wcm9wZXJ0eSAoR09iamVjdCAqIG9iamVjdCwgZ3VpbnQgcHJvcF9pZCwKKyAgICAgY29uc3QgR1ZhbHVlICogdmFsdWUsIEdQYXJhbVNwZWMgKiBwc3BlYykKKyB7CistICAvL0dzdEdMRGVpbnRlcmxhY2UgKmZpbHRlciA9IEdTVF9HTF9ERUlOVEVSTEFDRSAob2JqZWN0KTsKKysgIEdzdEdMRGVpbnRlcmxhY2UgKmZpbHRlciA9IEdTVF9HTF9ERUlOVEVSTEFDRSAob2JqZWN0KTsKKyAKKyAgIHN3aXRjaCAocHJvcF9pZCkgeworKyAgICBjYXNlIFBST1BfTUVUSE9EOgorKyAgICAgIGdzdF9nbF9kZWludGVybGFjZV9zZXRfbWV0aG9kIChmaWx0ZXIsIGdfdmFsdWVfZ2V0X2VudW0gKHZhbHVlKSk7CisrICAgICAgYnJlYWs7CisgICAgIGRlZmF1bHQ6CisgICAgICAgR19PQkpFQ1RfV0FSTl9JTlZBTElEX1BST1BFUlRZX0lEIChvYmplY3QsIHByb3BfaWQsIHBzcGVjKTsKKyAgICAgICBicmVhazsKK0BAIC0yMTQsOSArMzQ1LDEyIEBAIHN0YXRpYyB2b2lkCisgZ3N0X2dsX2RlaW50ZXJsYWNlX2dldF9wcm9wZXJ0eSAoR09iamVjdCAqIG9iamVjdCwgZ3VpbnQgcHJvcF9pZCwKKyAgICAgR1ZhbHVlICogdmFsdWUsIEdQYXJhbVNwZWMgKiBwc3BlYykKKyB7CistICAvL0dzdEdMRGVpbnRlcmxhY2UgKmZpbHRlciA9IEdTVF9HTF9ERUlOVEVSTEFDRSAob2JqZWN0KTsKKysgIEdzdEdMRGVpbnRlcmxhY2UgKmZpbHRlciA9IEdTVF9HTF9ERUlOVEVSTEFDRSAob2JqZWN0KTsKKyAKKyAgIHN3aXRjaCAocHJvcF9pZCkgeworKyAgICBjYXNlIFBST1BfTUVUSE9EOgorKyAgICAgIGdfdmFsdWVfc2V0X2VudW0gKHZhbHVlLCBmaWx0ZXItPmN1cnJlbnRfbWV0aG9kKTsKKysgICAgICBicmVhazsKKyAgICAgZGVmYXVsdDoKKyAgICAgICBHX09CSkVDVF9XQVJOX0lOVkFMSURfUFJPUEVSVFlfSUQgKG9iamVjdCwgcHJvcF9pZCwgcHNwZWMpOworICAgICAgIGJyZWFrOworQEAgLTIyNCwxMyArMzU4LDkgQEAgZ3N0X2dsX2RlaW50ZXJsYWNlX2dldF9wcm9wZXJ0eSAoR09iamVjdCAqIG9iamVjdCwgZ3VpbnQgcHJvcF9pZCwKKyB9CisgCisgc3RhdGljIGdib29sZWFuCistZ3N0X2dsX2RlaW50ZXJsYWNlX2luaXRfc2hhZGVyIChHc3RHTEZpbHRlciAqIGZpbHRlcikKKytnc3RfZ2xfZGVpbnRlcmxhY2VfaW5pdF9mYm8gKEdzdEdMRmlsdGVyICogZmlsdGVyKQorIHsKKy0gIEdzdEdMRGVpbnRlcmxhY2UgKmRlaW50ZXJsYWNlX2ZpbHRlciA9IEdTVF9HTF9ERUlOVEVSTEFDRSAoZmlsdGVyKTsKKy0KKy0gIC8vYmxvY2tpbmcgY2FsbCwgd2FpdCB0aGUgb3BlbmdsIHRocmVhZCBoYXMgY29tcGlsZWQgdGhlIHNoYWRlcgorLSAgcmV0dXJuIGdzdF9nbF9jb250ZXh0X2dlbl9zaGFkZXIgKEdTVF9HTF9CQVNFX0ZJTFRFUiAoZmlsdGVyKS0+Y29udGV4dCwgMCwKKy0gICAgICBncmVlZHloX2ZyYWdtZW50X3NvdXJjZSwgJmRlaW50ZXJsYWNlX2ZpbHRlci0+c2hhZGVyKTsKKysgIHJldHVybiBUUlVFOworIH0KKyAKKyBzdGF0aWMgZ2Jvb2xlYW4KK0BAIC0yNDEsNyArMzcxLDcgQEAgZ3N0X2dsX2RlaW50ZXJsYWNlX2ZpbHRlcl90ZXh0dXJlIChHc3RHTEZpbHRlciAqIGZpbHRlciwgZ3VpbnQgaW5fdGV4LAorIAorICAgLy9ibG9ja2luZyBjYWxsLCB1c2UgYSBGQk8KKyAgIGdzdF9nbF9maWx0ZXJfcmVuZGVyX3RvX3RhcmdldCAoZmlsdGVyLCBUUlVFLCBpbl90ZXgsIG91dF90ZXgsCistICAgICAgZ3N0X2dsX2RlaW50ZXJsYWNlX2NhbGxiYWNrLCBkZWludGVybGFjZV9maWx0ZXIpOworKyAgICAgIGRlaW50ZXJsYWNlX2ZpbHRlci0+ZGVpbnRlcmxhY2VmdW5jLCBkZWludGVybGFjZV9maWx0ZXIpOworIAorICAgcmV0dXJuIFRSVUU7CisgfQorQEAgLTI1OSwzNiArMzg5LDEwNCBAQCBnc3RfZ2xfZGVpbnRlcmxhY2VfZmlsdGVyIChHc3RHTEZpbHRlciAqIGZpbHRlciwgR3N0QnVmZmVyICogaW5idWYsCisgICByZXR1cm4gVFJVRTsKKyB9CisgCistLy9vcGVuZ2wgc2NlbmUsIHBhcmFtczogaW5wdXQgdGV4dHVyZSAobm90IHRoZSBvdXRwdXQgZmlsdGVyLT50ZXh0dXJlKQorK3N0YXRpYyBHc3RHTFNoYWRlciAqCisrZ3N0X2dsX2RlaW50ZXJsYWNlX2dldF9mcmFnbWVudF9zaGFkZXIgKEdzdEdMRmlsdGVyICogZmlsdGVyLAorKyAgICBjb25zdCBnY2hhciAqIHNoYWRlcl9uYW1lLCBjb25zdCBnY2hhciAqIHNoYWRlcl9zb3VyY2UpCisreworKyAgR3N0R0xTaGFkZXIgKnNoYWRlciA9IE5VTEw7CisrICBHc3RHTERlaW50ZXJsYWNlICpkZWludGVybGFjZV9maWx0ZXIgPSBHU1RfR0xfREVJTlRFUkxBQ0UgKGZpbHRlcik7CisrICBHc3RHTENvbnRleHQgKmNvbnRleHQgPSBHU1RfR0xfQkFTRV9GSUxURVIgKGZpbHRlciktPmNvbnRleHQ7CisrCisrICBzaGFkZXIgPSBnX2hhc2hfdGFibGVfbG9va3VwIChkZWludGVybGFjZV9maWx0ZXItPnNoYWRlcnN0YWJsZSwgc2hhZGVyX25hbWUpOworKworKyAgaWYgKCFzaGFkZXIpIHsKKysgICAgR0Vycm9yICplcnJvciA9IE5VTEw7CisrCisrICAgIGlmICghKHNoYWRlciA9IGdzdF9nbF9zaGFkZXJfbmV3X2xpbmtfd2l0aF9zdGFnZXMgKGNvbnRleHQsICZlcnJvciwKKysgICAgICAgICAgICAgICAgZ3N0X2dsc2xfc3RhZ2VfbmV3X2RlZmF1bHRfdmVydGV4IChjb250ZXh0KSwKKysgICAgICAgICAgICAgICAgZ3N0X2dsc2xfc3RhZ2VfbmV3X3dpdGhfc3RyaW5nIChjb250ZXh0LCBHTF9GUkFHTUVOVF9TSEFERVIsCisrICAgICAgICAgICAgICAgICAgICBHU1RfR0xTTF9WRVJTSU9OX05PTkUsCisrICAgICAgICAgICAgICAgICAgICBHU1RfR0xTTF9QUk9GSUxFX0VTIHwgR1NUX0dMU0xfUFJPRklMRV9DT01QQVRJQklMSVRZLAorKyAgICAgICAgICAgICAgICAgICAgc2hhZGVyX3NvdXJjZSksIE5VTEwpKSkgeworKyAgICAgIEdTVF9FTEVNRU5UX0VSUk9SIChkZWludGVybGFjZV9maWx0ZXIsIFJFU09VUkNFLCBOT1RfRk9VTkQsCisrICAgICAgICAgICgiRmFpbGVkIHRvIGluaXRpYWxpemUgJXMgc2hhZGVyIiwgc2hhZGVyX25hbWUpLCAoTlVMTCkpOworKyAgICB9CisrCisrICAgIGZpbHRlci0+ZHJhd19hdHRyX3Bvc2l0aW9uX2xvYyA9CisrICAgICAgICBnc3RfZ2xfc2hhZGVyX2dldF9hdHRyaWJ1dGVfbG9jYXRpb24gKHNoYWRlciwgImFfcG9zaXRpb24iKTsKKysgICAgZmlsdGVyLT5kcmF3X2F0dHJfdGV4dHVyZV9sb2MgPQorKyAgICAgICAgZ3N0X2dsX3NoYWRlcl9nZXRfYXR0cmlidXRlX2xvY2F0aW9uIChzaGFkZXIsICJhX3RleGNvb3JkIik7CisrICB9CisrCisrICBnX2hhc2hfdGFibGVfaW5zZXJ0IChkZWludGVybGFjZV9maWx0ZXItPnNoYWRlcnN0YWJsZSwgKGdjaGFyICopIHNoYWRlcl9uYW1lLAorKyAgICAgIHNoYWRlcik7CisrCisrICByZXR1cm4gc2hhZGVyOworK30KKysKKyBzdGF0aWMgdm9pZAorLWdzdF9nbF9kZWludGVybGFjZV9jYWxsYmFjayAoZ2ludCB3aWR0aCwgZ2ludCBoZWlnaHQsIGd1aW50IHRleHR1cmUsCisrZ3N0X2dsX2RlaW50ZXJsYWNlX3ZmaXJfY2FsbGJhY2sgKGdpbnQgd2lkdGgsIGdpbnQgaGVpZ2h0LCBndWludCB0ZXh0dXJlLAorICAgICBncG9pbnRlciBzdHVmZikKKyB7CistICBHc3RHTERlaW50ZXJsYWNlICpkZWludGVybGFjZV9maWx0ZXIgPSBHU1RfR0xfREVJTlRFUkxBQ0UgKHN0dWZmKTsKKysgIEdzdEdMU2hhZGVyICpzaGFkZXI7CisgICBHc3RHTEZpbHRlciAqZmlsdGVyID0gR1NUX0dMX0ZJTFRFUiAoc3R1ZmYpOworLSAgR3N0R0xGdW5jcyAqZ2wgPSBHU1RfR0xfQkFTRV9GSUxURVIgKGZpbHRlciktPmNvbnRleHQtPmdsX3Z0YWJsZTsKKysgIEdzdEdMRGVpbnRlcmxhY2UgKmRlaW50ZXJsYWNlX2ZpbHRlciA9IEdTVF9HTF9ERUlOVEVSTEFDRSAoZmlsdGVyKTsKKysgIEdzdEdMQ29udGV4dCAqY29udGV4dCA9IEdTVF9HTF9CQVNFX0ZJTFRFUiAoZmlsdGVyKS0+Y29udGV4dDsKKysgIEdzdEdMRnVuY3MgKmdsID0gY29udGV4dC0+Z2xfdnRhYmxlOworKworKyAgc2hhZGVyID0gZ3N0X2dsX2RlaW50ZXJsYWNlX2dldF9mcmFnbWVudF9zaGFkZXIgKGRlaW50ZXJsYWNlX2ZpbHRlciwgInZmaXIiLAorKyAgICAgIHZmaXJfZnJhZ21lbnRfc291cmNlKTsKKysKKysgIGlmICghc2hhZGVyKQorKyAgICByZXR1cm47CisrCisrI2lmIEdTVF9HTF9IQVZFX09QRU5HTAorKyAgaWYgKFVTSU5HX09QRU5HTCAoY29udGV4dCkpIHsKKysgICAgZ2wtPk1hdHJpeE1vZGUgKEdMX1BST0pFQ1RJT04pOworKyAgICBnbC0+TG9hZElkZW50aXR5ICgpOworKyAgfQorKyNlbmRpZgorKworKyAgZ3N0X2dsX3NoYWRlcl91c2UgKHNoYWRlcik7CisrCisrICBnbC0+QWN0aXZlVGV4dHVyZSAoR0xfVEVYVFVSRTApOworKyAgZ2wtPkJpbmRUZXh0dXJlIChHTF9URVhUVVJFXzJELCB0ZXh0dXJlKTsKKysKKysgIGdzdF9nbF9zaGFkZXJfc2V0X3VuaWZvcm1fMWkgKHNoYWRlciwgInRleCIsIDApOworKyAgZ3N0X2dsX3NoYWRlcl9zZXRfdW5pZm9ybV8xZiAoc2hhZGVyLCAid2lkdGgiLAorKyAgICAgIEdTVF9WSURFT19JTkZPX1dJRFRIICgmZmlsdGVyLT5vdXRfaW5mbykpOworKyAgZ3N0X2dsX3NoYWRlcl9zZXRfdW5pZm9ybV8xZiAoc2hhZGVyLCAiaGVpZ2h0IiwKKysgICAgICBHU1RfVklERU9fSU5GT19IRUlHSFQgKCZmaWx0ZXItPm91dF9pbmZvKSk7CisrCisrICBnc3RfZ2xfZmlsdGVyX2RyYXdfdGV4dHVyZSAoZmlsdGVyLCB0ZXh0dXJlLCB3aWR0aCwgaGVpZ2h0KTsKKyt9CisrCisrc3RhdGljIHZvaWQKKytnc3RfZ2xfZGVpbnRlcmxhY2VfZ3JlZWR5aF9jYWxsYmFjayAoZ2ludCB3aWR0aCwgZ2ludCBoZWlnaHQsIGd1aW50IHRleHR1cmUsCisrICAgIGdwb2ludGVyIHN0dWZmKQorK3sKKysgIEdzdEdMU2hhZGVyICpzaGFkZXI7CisrICBHc3RHTEZpbHRlciAqZmlsdGVyID0gR1NUX0dMX0ZJTFRFUiAoc3R1ZmYpOworKyAgR3N0R0xEZWludGVybGFjZSAqZGVpbnRlcmxhY2VfZmlsdGVyID0gR1NUX0dMX0RFSU5URVJMQUNFIChmaWx0ZXIpOworKyAgR3N0R0xDb250ZXh0ICpjb250ZXh0ID0gR1NUX0dMX0JBU0VfRklMVEVSIChmaWx0ZXIpLT5jb250ZXh0OworKyAgR3N0R0xGdW5jcyAqZ2wgPSBjb250ZXh0LT5nbF92dGFibGU7CisgICBndWludCB0ZW1wOworIAorLSAgR0xmbG9hdCB2ZXJ0c1tdID0geyAtMS4wLCAtMS4wLAorLSAgICAxLjAsIC0xLjAsCistICAgIDEuMCwgMS4wLAorLSAgICAtMS4wLCAxLjAKKy0gIH07CistICBHTGZsb2F0IHRleGNvb3JkczBbXSA9IHsgMC4wZiwgMC4wZiwKKy0gICAgMS4wZiwgMC4wZiwKKy0gICAgMS4wZiwgMS4wZiwKKy0gICAgMC4wZiwgMS4wZgorLSAgfTsKKy0gIEdMZmxvYXQgdGV4Y29vcmRzMVtdID0geyAwLjBmLCAwLjBmLAorLSAgICAxLjBmLCAwLjBmLAorLSAgICAxLjBmLCAxLjBmLAorLSAgICAwLjBmLCAxLjBmCistICB9OworKyAgc2hhZGVyID0KKysgICAgICBnc3RfZ2xfZGVpbnRlcmxhY2VfZ2V0X2ZyYWdtZW50X3NoYWRlciAoZGVpbnRlcmxhY2VfZmlsdGVyLCAiZ3JlZWRoeSIsCisrICAgICAgZ3JlZWR5aF9mcmFnbWVudF9zb3VyY2UpOworIAorLSAgZ2wtPk1hdHJpeE1vZGUgKEdMX1BST0pFQ1RJT04pOworLSAgZ2wtPkxvYWRJZGVudGl0eSAoKTsKKysgIGlmICghc2hhZGVyKQorKyAgICByZXR1cm47CisgCistICBnc3RfZ2xfc2hhZGVyX3VzZSAoZGVpbnRlcmxhY2VfZmlsdGVyLT5zaGFkZXIpOworKyNpZiBHU1RfR0xfSEFWRV9PUEVOR0wKKysgIGlmIChVU0lOR19PUEVOR0wgKGNvbnRleHQpKSB7CisrICAgIGdsLT5NYXRyaXhNb2RlIChHTF9QUk9KRUNUSU9OKTsKKysgICAgZ2wtPkxvYWRJZGVudGl0eSAoKTsKKysgIH0KKysjZW5kaWYKKysKKysgIGdzdF9nbF9zaGFkZXJfdXNlIChzaGFkZXIpOworIAorICAgaWYgKEdfVU5MSUtFTFkgKGRlaW50ZXJsYWNlX2ZpbHRlci0+cHJldl90ZXggPT0gMCkpIHsKKyAgICAgZ3N0X2dsX2NvbnRleHRfZ2VuX3RleHR1cmUgKEdTVF9HTF9CQVNFX0ZJTFRFUiAoZmlsdGVyKS0+Y29udGV4dCwKK0BAIC0yOTgsNDQgKzQ5NiwyNCBAQCBnc3RfZ2xfZGVpbnRlcmxhY2VfY2FsbGJhY2sgKGdpbnQgd2lkdGgsIGdpbnQgaGVpZ2h0LCBndWludCB0ZXh0dXJlLAorICAgICAgICAgR1NUX1ZJREVPX0lORk9fSEVJR0hUICgmZmlsdGVyLT5vdXRfaW5mbykpOworICAgfSBlbHNlIHsKKyAgICAgZ2wtPkFjdGl2ZVRleHR1cmUgKEdMX1RFWFRVUkUxKTsKKy0gICAgZ3N0X2dsX3NoYWRlcl9zZXRfdW5pZm9ybV8xaSAoZGVpbnRlcmxhY2VfZmlsdGVyLT5zaGFkZXIsICJ0ZXhfcHJldiIsIDEpOworKyAgICBnc3RfZ2xfc2hhZGVyX3NldF91bmlmb3JtXzFpIChzaGFkZXIsICJ0ZXhfcHJldiIsIDEpOworICAgICBnbC0+QmluZFRleHR1cmUgKEdMX1RFWFRVUkVfMkQsIGRlaW50ZXJsYWNlX2ZpbHRlci0+cHJldl90ZXgpOworICAgfQorIAorICAgZ2wtPkFjdGl2ZVRleHR1cmUgKEdMX1RFWFRVUkUwKTsKKy0gIGdzdF9nbF9zaGFkZXJfc2V0X3VuaWZvcm1fMWkgKGRlaW50ZXJsYWNlX2ZpbHRlci0+c2hhZGVyLCAidGV4IiwgMCk7CisrICBnbC0+QmluZFRleHR1cmUgKEdMX1RFWFRVUkVfMkQsIHRleHR1cmUpOworIAorLSAgZ3N0X2dsX3NoYWRlcl9zZXRfdW5pZm9ybV8xZiAoZGVpbnRlcmxhY2VfZmlsdGVyLT5zaGFkZXIsICJtYXhfY29tYiIsCistICAgICAgNS4wZiAvIDI1NS4wZik7CistICBnc3RfZ2xfc2hhZGVyX3NldF91bmlmb3JtXzFmIChkZWludGVybGFjZV9maWx0ZXItPnNoYWRlciwgIm1vdGlvbl90aHJlc2hvbGQiLAorLSAgICAgIDI1LjBmIC8gMjU1LjBmKTsKKy0gIGdzdF9nbF9zaGFkZXJfc2V0X3VuaWZvcm1fMWYgKGRlaW50ZXJsYWNlX2ZpbHRlci0+c2hhZGVyLCAibW90aW9uX3NlbnNlIiwKKy0gICAgICAzMC4wZiAvIDI1NS4wZik7CisrICBnc3RfZ2xfc2hhZGVyX3NldF91bmlmb3JtXzFpIChzaGFkZXIsICJ0ZXgiLCAwKTsKKysgIGdzdF9nbF9zaGFkZXJfc2V0X3VuaWZvcm1fMWYgKHNoYWRlciwgIm1heF9jb21iIiwgNS4wZiAvIDI1NS4wZik7CisrICBnc3RfZ2xfc2hhZGVyX3NldF91bmlmb3JtXzFmIChzaGFkZXIsICJtb3Rpb25fdGhyZXNob2xkIiwgMjUuMGYgLyAyNTUuMGYpOworKyAgZ3N0X2dsX3NoYWRlcl9zZXRfdW5pZm9ybV8xZiAoc2hhZGVyLCAibW90aW9uX3NlbnNlIiwgMzAuMGYgLyAyNTUuMGYpOworIAorLSAgZ3N0X2dsX3NoYWRlcl9zZXRfdW5pZm9ybV8xZiAoZGVpbnRlcmxhY2VfZmlsdGVyLT5zaGFkZXIsICJ3aWR0aCIsCisrICBnc3RfZ2xfc2hhZGVyX3NldF91bmlmb3JtXzFmIChzaGFkZXIsICJ3aWR0aCIsCisgICAgICAgR1NUX1ZJREVPX0lORk9fV0lEVEggKCZmaWx0ZXItPm91dF9pbmZvKSk7CistICBnc3RfZ2xfc2hhZGVyX3NldF91bmlmb3JtXzFmIChkZWludGVybGFjZV9maWx0ZXItPnNoYWRlciwgImhlaWdodCIsCisrICBnc3RfZ2xfc2hhZGVyX3NldF91bmlmb3JtXzFmIChzaGFkZXIsICJoZWlnaHQiLAorICAgICAgIEdTVF9WSURFT19JTkZPX0hFSUdIVCAoJmZpbHRlci0+b3V0X2luZm8pKTsKKyAKKy0gIGdsLT5DbGllbnRBY3RpdmVUZXh0dXJlIChHTF9URVhUVVJFMCk7CistCistICBnbC0+RW5hYmxlQ2xpZW50U3RhdGUgKEdMX1RFWFRVUkVfQ09PUkRfQVJSQVkpOworLSAgZ2wtPkVuYWJsZUNsaWVudFN0YXRlIChHTF9WRVJURVhfQVJSQVkpOworLQorLSAgZ2wtPlZlcnRleFBvaW50ZXIgKDIsIEdMX0ZMT0FULCAwLCAmdmVydHMpOworLSAgZ2wtPlRleENvb3JkUG9pbnRlciAoMiwgR0xfRkxPQVQsIDAsICZ0ZXhjb29yZHMwKTsKKy0KKy0gIGdsLT5DbGllbnRBY3RpdmVUZXh0dXJlIChHTF9URVhUVVJFMSk7CistICBnbC0+RW5hYmxlQ2xpZW50U3RhdGUgKEdMX1RFWFRVUkVfQ09PUkRfQVJSQVkpOworLSAgZ2wtPlRleENvb3JkUG9pbnRlciAoMiwgR0xfRkxPQVQsIDAsICZ0ZXhjb29yZHMxKTsKKy0KKy0gIGdsLT5EcmF3QXJyYXlzIChHTF9UUklBTkdMRV9GQU4sIDAsIDQpOworLQorLSAgZ2wtPkRpc2FibGVDbGllbnRTdGF0ZSAoR0xfVkVSVEVYX0FSUkFZKTsKKy0gIGdsLT5EaXNhYmxlQ2xpZW50U3RhdGUgKEdMX1RFWFRVUkVfQ09PUkRfQVJSQVkpOworLQorLSAgZ2wtPkNsaWVudEFjdGl2ZVRleHR1cmUgKEdMX1RFWFRVUkUwKTsKKy0gIGdsLT5EaXNhYmxlQ2xpZW50U3RhdGUgKEdMX1RFWFRVUkVfQ09PUkRfQVJSQVkpOworKyAgZ3N0X2dsX2ZpbHRlcl9kcmF3X3RleHR1cmUgKGZpbHRlciwgdGV4dHVyZSwgd2lkdGgsIGhlaWdodCk7CisgCisgICBpZiAodGV4dHVyZSA9PSBmaWx0ZXItPmluX3RleF9pZCkgeworICAgICB0ZW1wID0gZmlsdGVyLT5pbl90ZXhfaWQ7CitkaWZmIC0tZ2l0IGEvZXh0L2dsL2dzdGdsZGVpbnRlcmxhY2UuaCBiL2V4dC9nbC9nc3RnbGRlaW50ZXJsYWNlLmgKK2luZGV4IGE4MWEyZTcuLjU4YTljMGMgMTAwNjQ0CistLS0gYS9leHQvZ2wvZ3N0Z2xkZWludGVybGFjZS5oCisrKysgYi9leHQvZ2wvZ3N0Z2xkZWludGVybGFjZS5oCitAQCAtMzgsOSArMzgsMTMgQEAgdHlwZWRlZiBzdHJ1Y3QgX0dzdEdMRGVpbnRlcmxhY2VDbGFzcyBHc3RHTERlaW50ZXJsYWNlQ2xhc3M7Cisgc3RydWN0IF9Hc3RHTERlaW50ZXJsYWNlCisgeworICAgR3N0R0xGaWx0ZXIgIGZpbHRlcjsKKy0gIEdzdEdMU2hhZGVyICAqc2hhZGVyOworKworKyAgR0xDQgkgICAgICAgZGVpbnRlcmxhY2VmdW5jOyAKKysgIEdIYXNoVGFibGUgICAqc2hhZGVyc3RhYmxlOworICAgR3N0QnVmZmVyICAgICpwcmV2X2J1ZmZlcjsKKyAgIGd1aW50ICAgICAgICAgcHJldl90ZXg7CisrCisrICBnaW50CSAgICAgICBjdXJyZW50X21ldGhvZDsKKyB9OworIAorIHN0cnVjdCBfR3N0R0xEZWludGVybGFjZUNsYXNzCitkaWZmIC0tZ2l0IGEvZXh0L2dsL2dzdG9wZW5nbC5jIGIvZXh0L2dsL2dzdG9wZW5nbC5jCitpbmRleCA1MDY3NmM0Li4xMzU4NjJhIDEwMDY0NAorLS0tIGEvZXh0L2dsL2dzdG9wZW5nbC5jCisrKysgYi9leHQvZ2wvZ3N0b3BlbmdsLmMKK0BAIC02Miw2ICs2Miw3IEBACisgI2luY2x1ZGUgImdzdGdsc3RlcmVvc3BsaXQuaCIKKyAjaW5jbHVkZSAiZ3N0Z2xzdGVyZW9taXguaCIKKyAjaW5jbHVkZSAiZ3N0Z2x2aWV3Y29udmVydC5oIgorKyNpbmNsdWRlICJnc3RnbGRlaW50ZXJsYWNlLmgiCisgCisgI2lmIEhBVkVfR1JBUEhFTkUKKyAjaW5jbHVkZSAiZ3N0Z2x0cmFuc2Zvcm1hdGlvbi5oIgorQEAgLTc3LDcgKzc4LDYgQEAKKyAjaW5jbHVkZSAiZ3N0Z2x0ZXN0c3JjLmgiCisgI2luY2x1ZGUgImdzdGdsZmlsdGVyZ2xhc3MuaCIKKyAvKiAjaW5jbHVkZSAiZ3N0Z2xmaWx0ZXJyZWZsZWN0ZWRzY3JlZW4uaCIgKi8KKy0jaW5jbHVkZSAiZ3N0Z2xkZWludGVybGFjZS5oIgorICNpbmNsdWRlICJnc3RnbG1vc2FpYy5oIgorICNpZiBIQVZFX1BORworICNpbmNsdWRlICJnc3RnbGRpZmZlcmVuY2VtYXR0ZS5oIgorQEAgLTIyNiw2ICsyMjYsMTIgQEAgcGx1Z2luX2luaXQgKEdzdFBsdWdpbiAqIHBsdWdpbikKKyAgICAgICAgICAgR1NUX1JBTktfTk9ORSwgR1NUX1RZUEVfR0xfU1RFUkVPX01JWCkpIHsKKyAgICAgcmV0dXJuIEZBTFNFOworICAgfQorKworKyAgaWYgKCFnc3RfZWxlbWVudF9yZWdpc3RlciAocGx1Z2luLCAiZ2xkZWludGVybGFjZSIsCisrICAgICAgICAgIEdTVF9SQU5LX05PTkUsIEdTVF9UWVBFX0dMX0RFSU5URVJMQUNFKSkgeworKyAgICByZXR1cm4gRkFMU0U7CisrICB9CisrCisgI2lmIEhBVkVfSlBFRworICNpZiBIQVZFX1BORworICAgaWYgKCFnc3RfZWxlbWVudF9yZWdpc3RlciAocGx1Z2luLCAiZ2xvdmVybGF5IiwKK0BAIC0yNTAsMTEgKzI1Niw2IEBAIHBsdWdpbl9pbml0IChHc3RQbHVnaW4gKiBwbHVnaW4pCisgICAgIHJldHVybiBGQUxTRTsKKyAgIH0KKyAjZW5kaWYKKy0gIGlmICghZ3N0X2VsZW1lbnRfcmVnaXN0ZXIgKHBsdWdpbiwgImdsZGVpbnRlcmxhY2UiLAorLSAgICAgICAgICBHU1RfUkFOS19OT05FLCBHU1RfVFlQRV9HTF9ERUlOVEVSTEFDRSkpIHsKKy0gICAgcmV0dXJuIEZBTFNFOworLSAgfQorLQorICAgaWYgKCFnc3RfZWxlbWVudF9yZWdpc3RlciAocGx1Z2luLCAiZ2xtb3NhaWMiLAorICAgICAgICAgICBHU1RfUkFOS19OT05FLCBHU1RfVFlQRV9HTF9NT1NBSUMpKSB7CisgICAgIHJldHVybiBGQUxTRTsKKy0tIAorMS45LjEKKwpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2dzdHJlYW1lci9nc3RyZWFtZXIxLjAtcGx1Z2lucy1iYWQvMDAwMi1nbHBsdWdpbi1nbHdpbmRvdy1maXgtbWVtb3J5LWxlYWstb2YtbmF2aWdhdGlvbi10aHJlLnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2dzdHJlYW1lci9nc3RyZWFtZXIxLjAtcGx1Z2lucy1iYWQvMDAwMi1nbHBsdWdpbi1nbHdpbmRvdy1maXgtbWVtb3J5LWxlYWstb2YtbmF2aWdhdGlvbi10aHJlLnBhdGNoCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAzNDkxYTE1Li4wMDAwMDAwCi0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9nc3RyZWFtZXIvZ3N0cmVhbWVyMS4wLXBsdWdpbnMtYmFkLzAwMDItZ2xwbHVnaW4tZ2x3aW5kb3ctZml4LW1lbW9yeS1sZWFrLW9mLW5hdmlnYXRpb24tdGhyZS5wYXRjaAorKysgL2Rldi9udWxsCkBAIC0xLDM1ICswLDAgQEAKLUZyb20gOTVjZGE3ZmJjZjFhODEyODlkOTMxNWM4MDFjOGUyYjNkODk2ZjRjYiBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKLUZyb206IEhhaWh1YSBIdSA8YjU1NTk3QGZyZWVzY2FsZS5jb20+Ci1EYXRlOiBNb24sIDMwIE5vdiAyMDE1IDA5OjM2OjA5ICswODAwCi1TdWJqZWN0OiBbUEFUQ0ggMi81XSBbZ2xwbHVnaW5dIGdsd2luZG93OiBmaXggbWVtb3J5IGxlYWsgb2YgbmF2aWdhdGlvbgotIHRocmVhZAotCi1XaGVuIGV4aXQgbmF2aWdhdGlvbiB0aHJlYWQsIGNhbGwgZ190aHJlYWRfam9pbigpIHRvIHJlbGVhc2UKLXRoZSByZXNvdXJjZSBob2xkIGJ5IGl0LgotCi1VcHN0cmVhbS1TdGF0dXM6IEJhY2twb3J0IFsxLjcuMV0KLQotYnVnemlsbGEgVVJMOiBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzU4ODIwCi0KLVNpZ25lZC1vZmYtYnk6IEhhaWh1YSBIdSA8YjU1NTk3QGZyZWVzY2FsZS5jb20+Ci0tLS0KLSBnc3QtbGlicy9nc3QvZ2wvZ3N0Z2x3aW5kb3cuYyB8ICAgIDMgKysrCi0gMSBmaWxlIGNoYW5nZWQsIDMgaW5zZXJ0aW9ucygrKQotCi1kaWZmIC0tZ2l0IGEvZ3N0LWxpYnMvZ3N0L2dsL2dzdGdsd2luZG93LmMgYi9nc3QtbGlicy9nc3QvZ2wvZ3N0Z2x3aW5kb3cuYwotaW5kZXggNDRiNzRjYS4uNDJlZjI5NiAxMDA2NDQKLS0tLSBhL2dzdC1saWJzL2dzdC9nbC9nc3RnbHdpbmRvdy5jCi0rKysgYi9nc3QtbGlicy9nc3QvZ2wvZ3N0Z2x3aW5kb3cuYwotQEAgLTM0Myw2ICszNDMsOSBAQCBnc3RfZ2xfd2luZG93X2ZpbmFsaXplIChHT2JqZWN0ICogb2JqZWN0KQotICAgICB3aGlsZSAod2luZG93LT5uYXZfYWxpdmUpIHsKLSAgICAgICBnX2NvbmRfd2FpdCAoJndpbmRvdy0+bmF2X2Rlc3Ryb3lfY29uZCwgJndpbmRvdy0+bmF2X2xvY2spOwotICAgICB9Ci0rICAgIC8qIHJlbGVhc2UgcmVzb3VyY2UgaG9sZCBieSBuYXZpZ2F0aW9uIHRocmVhZCAqLwotKyAgICBnX3RocmVhZF9qb2luKHdpbmRvdy0+cHJpdi0+bmF2aWdhdGlvbl90aHJlYWQpOwotKyAgICB3aW5kb3ctPnByaXYtPm5hdmlnYXRpb25fdGhyZWFkID0gTlVMTDsKLSAgICAgZ19tdXRleF91bmxvY2sgKCZ3aW5kb3ctPm5hdl9sb2NrKTsKLSAgIH0KLSAKLS0tIAotMS43LjkuNQotCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvZ3N0cmVhbWVyL2dzdHJlYW1lcjEuMC1wbHVnaW5zLWJhZC8wMDAzLWdsY29sb3Jjb252ZXJ0LWltcGxlbWVudC1tdWx0aXBsZS1yZW5kZXItdGFyZ2V0cy1mb3IucGF0Y2ggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvZ3N0cmVhbWVyL2dzdHJlYW1lcjEuMC1wbHVnaW5zLWJhZC8wMDAzLWdsY29sb3Jjb252ZXJ0LWltcGxlbWVudC1tdWx0aXBsZS1yZW5kZXItdGFyZ2V0cy1mb3IucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uMzFkOGUwNQotLS0gL2Rldi9udWxsCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9nc3RyZWFtZXIvZ3N0cmVhbWVyMS4wLXBsdWdpbnMtYmFkLzAwMDMtZ2xjb2xvcmNvbnZlcnQtaW1wbGVtZW50LW11bHRpcGxlLXJlbmRlci10YXJnZXRzLWZvci5wYXRjaApAQCAtMCwwICsxLDI0NCBAQAorRnJvbSAxMjdlNTE3NTY4NDkwZmMxNDcyMTFkOGIyZmI0ZGEwMWNlY2JiZWI1IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogTWF0dGhldyBXYXRlcnMgPG1hdHRoZXdAY2VudHJpY3VsYXIuY29tPgorRGF0ZTogVGh1LCAzMSBNYXIgMjAxNiAxOTo1MDoyOCArMTEwMAorU3ViamVjdDogW1BBVENIIDUvNl0gZ2xjb2xvcmNvbnZlcnQ6IGltcGxlbWVudCBtdWx0aXBsZSByZW5kZXIgdGFyZ2V0cyBmb3IKKyBHTEVTMworCitUaGVyZSBhcmUgbnVtZXJvdXMgc2xpZ2h0IGRpZmZlcmVuY2VzIHJlcXVpcmVkIGJldHdlZW4gRGVza3RvcCBHTCBhbmQgR0xFUzMgZm9yCittdWx0aXBsZSByZW5kZXIgdGFyZ2V0cy4KKworMS4gZ2xfRnJhZ0RhdGEgZG9lc24ndCBleGlzdCBhdCBhbGwgYW5kIG9uZSBpcyByZXF1aXJlZCB0byB1c2UKKyAgICdsYXlvdXQgKGxvY2F0aW9uID0gPykgb3V0IC4uLicgaW5zdGVhZC4KKzIuIGdsX0ZyYWdDb2xvciBkb2Vzbid0IGV4aXN0LCBzYW1lIGFzIDEKKzMuIHRleHR1cmUyRCgpIGhhcyBiZWVuIGRlcHJlY2F0ZWQKKworRm9ydHVuYXRlbHkgbW9zdCBvZiB0aGVzZSBoYXZlIGJlZW4gdGFrZW4gY2FyZSBvZiB3aXRoIEdMMyBhbmQgdGhlIHNoYWRlcgorbWFuZ2xpbmcgYWxyZWFkeSBleGlzdHMgc28ganVzdCBleHBhbmQgdGhlIGNvbmRpdGlvbnMgdGhleSBhcmUgdXNlZCBpbi4gIFRoZQorZ2xfRnJhZ0RhdGEgaXNzdWUgcmVxdWlyZXMgYSBuZXcgbWFuZ2xlIHBhc3MgdGhvdWdoLiAgV2UgYWxzbyB1c2UgdGhpcyBuZXcKK3Bhc3Mgb24gZGVza3RvcCBHTCBmb3IgY29uc2lzdGVuY3kuCisKK1Vwc3RyZWFtLVN0YXR1czogQmFja3BvcnQgWzEuOS4xXQorCistLS0KKyBnc3QtbGlicy9nc3QvZ2wvZ3N0Z2xjb2xvcmNvbnZlcnQuYyB8IDEyNSArKysrKysrKysrKysrKysrKysrKysrKysrKysrLS0tLS0tLS0KKyAxIGZpbGUgY2hhbmdlZCwgOTkgaW5zZXJ0aW9ucygrKSwgMjYgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9nc3QtbGlicy9nc3QvZ2wvZ3N0Z2xjb2xvcmNvbnZlcnQuYyBiL2dzdC1saWJzL2dzdC9nbC9nc3RnbGNvbG9yY29udmVydC5jCitpbmRleCA0OTBlYzU0Li5mNDc4ZmFhIDEwMDY0NAorLS0tIGEvZ3N0LWxpYnMvZ3N0L2dsL2dzdGdsY29sb3Jjb252ZXJ0LmMKKysrKyBiL2dzdC1saWJzL2dzdC9nbC9nc3RnbGNvbG9yY29udmVydC5jCitAQCAtMTgwMiwxMCArMTgwMiwxMSBAQCBfbWFuZ2xlX3NhbXBsZXJfdHlwZSAoY29uc3QgZ2NoYXIgKiBzdHIsIEdzdEdMVGV4dHVyZVRhcmdldCBmcm9tLAorIAorIHN0YXRpYyBnY2hhciAqCisgX21hbmdsZV92YXJ5aW5nX2F0dHJpYnV0ZSAoY29uc3QgZ2NoYXIgKiBzdHIsIGd1aW50IHNoYWRlcl90eXBlLAorLSAgICBHc3RHTEFQSSBnbF9hcGkpCisrICAgIEdzdEdMQVBJIGdsX2FwaSwgZ3VpbnQgZ2xfbWFqb3IsIGd1aW50IGdsX21pbm9yKQorIHsKKy0gIGlmIChnbF9hcGkgJiBHU1RfR0xfQVBJX09QRU5HTDMpIHsKKy0gICAgaWYgKHNoYWRlcl90eXBlID09IEdMX1ZFUlRFWF9TSEFERVIpIHsKKysgIGlmIChzaGFkZXJfdHlwZSA9PSBHTF9WRVJURVhfU0hBREVSKSB7CisrICAgIGlmICgoZ2xfYXBpICYgR1NUX0dMX0FQSV9PUEVOR0wzKSB8fCAoZ2xfYXBpICYgR1NUX0dMX0FQSV9HTEVTMgorKyAgICAgICAgICAgICYmIGdsX21ham9yID49IDMpKSB7CisgICAgICAgZ2NoYXIgKnRtcCwgKnRtcDI7CisgICAgICAgR1JlZ2V4ICpyZWdleDsKKyAKK0BAIC0xODIxLDcgKzE4MjIsMTAgQEAgX21hbmdsZV92YXJ5aW5nX2F0dHJpYnV0ZSAoY29uc3QgZ2NoYXIgKiBzdHIsIGd1aW50IHNoYWRlcl90eXBlLAorIAorICAgICAgIGdfZnJlZSAodG1wKTsKKyAgICAgICByZXR1cm4gdG1wMjsKKy0gICAgfSBlbHNlIGlmIChzaGFkZXJfdHlwZSA9PSBHTF9GUkFHTUVOVF9TSEFERVIpIHsKKysgICAgfQorKyAgfSBlbHNlIGlmIChzaGFkZXJfdHlwZSA9PSBHTF9GUkFHTUVOVF9TSEFERVIpIHsKKysgICAgaWYgKChnbF9hcGkgJiBHU1RfR0xfQVBJX09QRU5HTDMpIHx8IChnbF9hcGkgJiBHU1RfR0xfQVBJX0dMRVMyCisrICAgICAgICAgICAgJiYgZ2xfbWFqb3IgPiAzKSkgeworICAgICAgIGdjaGFyICp0bXA7CisgICAgICAgR1JlZ2V4ICpyZWdleDsKKyAKK0BAIC0xODM3LDI4ICsxODQxLDQ4IEBAIF9tYW5nbGVfdmFyeWluZ19hdHRyaWJ1dGUgKGNvbnN0IGdjaGFyICogc3RyLCBndWludCBzaGFkZXJfdHlwZSwKKyB9CisgCisgc3RhdGljIGdjaGFyICoKKy1fbWFuZ2xlX2ZyYWdfY29sb3IgKGNvbnN0IGdjaGFyICogc3RyKQorK19tYW5nbGVfZnJhZ19jb2xvcl9kYXRhIChjb25zdCBnY2hhciAqIHN0cikKKyB7CisgICBHUmVnZXggKnJlZ2V4OworLSAgZ2NoYXIgKnJldDsKKysgIGdjaGFyICpyZXQsICp0bXA7CisgCisgICByZWdleCA9IGdfcmVnZXhfbmV3ICgiZ2xfRnJhZ0NvbG9yIiwgMCwgMCwgTlVMTCk7CisgICByZXQgPSBnX3JlZ2V4X3JlcGxhY2VfbGl0ZXJhbCAocmVnZXgsIHN0ciwgLTEsIDAsICJmcmFnQ29sb3IiLCAwLCBOVUxMKTsKKyAgIGdfcmVnZXhfdW5yZWYgKHJlZ2V4KTsKKyAKKysgIHRtcCA9IHJldDsKKysgIC8qIHNlYXJjaCBhbmQgcmVwbGFjZSAnZ2xfRnJhZ0RhdGFbTlVNXScgaW50byBmcmFnQ29sb3JfTlVNICovCisrICByZWdleCA9IGdfcmVnZXhfbmV3ICgiZ2xfRnJhZ0RhdGFcXFsoXFxkKylcXF0iLCAwLCAwLCBOVUxMKTsKKysgIHJldCA9IGdfcmVnZXhfcmVwbGFjZSAocmVnZXgsIHRtcCwgLTEsIDAsICJmcmFnQ29sb3JfXFwxIiwgMCwgTlVMTCk7CisrICBnX3JlZ2V4X3VucmVmIChyZWdleCk7CisrICBnX2ZyZWUgKHRtcCk7CisrCisgICByZXR1cm4gcmV0OworIH0KKyAKKyBzdGF0aWMgdm9pZAorLV9tYW5nbGVfdmVyc2lvbl9wcm9maWxlX2Zyb21fZ2xfYXBpIChHc3RHTEFQSSBnbF9hcGksIEdzdEdMU0xWZXJzaW9uICogdmVyc2lvbiwKKy0gICAgR3N0R0xTTFByb2ZpbGUgKiBwcm9maWxlKQorK19tYW5nbGVfdmVyc2lvbl9wcm9maWxlX2Zyb21fZ2xfYXBpIChHc3RHTEFQSSBnbF9hcGksIGdpbnQgZ2xfbWFqb3IsCisrICAgIGdpbnQgZ2xfbWlub3IsIEdzdEdMU0xWZXJzaW9uICogdmVyc2lvbiwgR3N0R0xTTFByb2ZpbGUgKiBwcm9maWxlKQorIHsKKysgICp2ZXJzaW9uID0gR1NUX0dMU0xfVkVSU0lPTl9OT05FOworKyAgKnByb2ZpbGUgPSBHU1RfR0xTTF9QUk9GSUxFX05PTkU7CisrCisgICBpZiAoZ2xfYXBpICYgR1NUX0dMX0FQSV9PUEVOR0wzKSB7CistICAgICp2ZXJzaW9uID0gR1NUX0dMU0xfVkVSU0lPTl8xNTA7CistICAgICpwcm9maWxlID0gR1NUX0dMU0xfUFJPRklMRV9OT05FOworKyAgICBpZiAoZ2xfbWFqb3IgPiAzIHx8IGdsX21pbm9yID49IDMpIHsKKysgICAgICAqdmVyc2lvbiA9IEdTVF9HTFNMX1ZFUlNJT05fMzMwOworKyAgICAgICpwcm9maWxlID0gR1NUX0dMU0xfUFJPRklMRV9DT1JFOworKyAgICB9IGVsc2UgeworKyAgICAgICp2ZXJzaW9uID0gR1NUX0dMU0xfVkVSU0lPTl8xNTA7CisrICAgICAgKnByb2ZpbGUgPSBHU1RfR0xTTF9QUk9GSUxFX05PTkU7CisrICAgIH0KKyAgIH0gZWxzZSBpZiAoZ2xfYXBpICYgR1NUX0dMX0FQSV9HTEVTMikgeworLSAgICAqdmVyc2lvbiA9IEdTVF9HTFNMX1ZFUlNJT05fMTAwOworLSAgICAqcHJvZmlsZSA9IEdTVF9HTFNMX1BST0ZJTEVfRVM7CisrICAgIGlmIChnbF9tYWpvciA+PSAzKSB7CisrICAgICAgKnZlcnNpb24gPSBHU1RfR0xTTF9WRVJTSU9OXzMwMDsKKysgICAgICAqcHJvZmlsZSA9IEdTVF9HTFNMX1BST0ZJTEVfRVM7CisrICAgIH0gZWxzZSBpZiAoZ2xfbWFqb3IgPj0gMikgeworKyAgICAgICp2ZXJzaW9uID0gR1NUX0dMU0xfVkVSU0lPTl8xMDA7CisrICAgICAgKnByb2ZpbGUgPSBHU1RfR0xTTF9QUk9GSUxFX0VTOworKyAgICB9CisgICB9IGVsc2UgaWYgKGdsX2FwaSAmIEdTVF9HTF9BUElfT1BFTkdMKSB7CisgICAgICp2ZXJzaW9uID0gR1NUX0dMU0xfVkVSU0lPTl8xMTA7CisgICAgICpwcm9maWxlID0gR1NUX0dMU0xfUFJPRklMRV9DT01QQVRJQklMSVRZOworQEAgLTE4NjcsMjIgKzE4OTEsMjggQEAgX21hbmdsZV92ZXJzaW9uX3Byb2ZpbGVfZnJvbV9nbF9hcGkgKEdzdEdMQVBJIGdsX2FwaSwgR3N0R0xTTFZlcnNpb24gKiB2ZXJzaW9uLAorIAorIHN0YXRpYyBnY2hhciAqCisgX21hbmdsZV9zaGFkZXIgKGNvbnN0IGdjaGFyICogc3RyLCBndWludCBzaGFkZXJfdHlwZSwgR3N0R0xUZXh0dXJlVGFyZ2V0IGZyb20sCistICAgIEdzdEdMVGV4dHVyZVRhcmdldCB0bywgR3N0R0xBUEkgZ2xfYXBpLCBHc3RHTFNMVmVyc2lvbiAqIHZlcnNpb24sCistICAgIEdzdEdMU0xQcm9maWxlICogcHJvZmlsZSkKKysgICAgR3N0R0xUZXh0dXJlVGFyZ2V0IHRvLCBHc3RHTEFQSSBnbF9hcGksIGdpbnQgZ2xfbWFqb3IsIGdpbnQgZ2xfbWlub3IsCisrICAgIEdzdEdMU0xWZXJzaW9uICogdmVyc2lvbiwgR3N0R0xTTFByb2ZpbGUgKiBwcm9maWxlKQorIHsKKyAgIGdjaGFyICp0bXAsICp0bXAyOworIAorKyAgX21hbmdsZV92ZXJzaW9uX3Byb2ZpbGVfZnJvbV9nbF9hcGkgKGdsX2FwaSwgZ2xfbWFqb3IsIGdsX21pbm9yLCB2ZXJzaW9uLAorKyAgICAgIHByb2ZpbGUpOworICAgdG1wID0gX21hbmdsZV90ZXh0dXJlX2FjY2VzcyAoc3RyLCBmcm9tLCB0bywgZ2xfYXBpKTsKKyAgIHRtcDIgPSBfbWFuZ2xlX3NhbXBsZXJfdHlwZSAodG1wLCBmcm9tLCB0byk7CisgICBnX2ZyZWUgKHRtcCk7CistICB0bXAgPSBfbWFuZ2xlX3ZhcnlpbmdfYXR0cmlidXRlICh0bXAyLCBzaGFkZXJfdHlwZSwgZ2xfYXBpKTsKKysgIHRtcCA9CisrICAgICAgX21hbmdsZV92YXJ5aW5nX2F0dHJpYnV0ZSAodG1wMiwgc2hhZGVyX3R5cGUsIGdsX2FwaSwgZ2xfbWFqb3IsIGdsX21pbm9yKTsKKyAgIGdfZnJlZSAodG1wMik7CistICBpZiAoc2hhZGVyX3R5cGUgPT0gR0xfRlJBR01FTlRfU0hBREVSICYmIGdsX2FwaSAmIEdTVF9HTF9BUElfT1BFTkdMMykgeworLSAgICB0bXAyID0gX21hbmdsZV9mcmFnX2NvbG9yICh0bXApOworLSAgICBnX2ZyZWUgKHRtcCk7CistICAgIHRtcCA9IHRtcDI7CisrICBpZiAoc2hhZGVyX3R5cGUgPT0gR0xfRlJBR01FTlRfU0hBREVSKSB7CisrICAgIGlmICgoKnByb2ZpbGUgPT0gR1NUX0dMU0xfUFJPRklMRV9FUyAmJiAqdmVyc2lvbiA+PSBHU1RfR0xTTF9WRVJTSU9OXzMwMCkKKysgICAgICAgIHx8ICgqcHJvZmlsZSA9PSBHU1RfR0xTTF9QUk9GSUxFX0NPUkUKKysgICAgICAgICAgICAmJiAqdmVyc2lvbiA+PSBHU1RfR0xTTF9WRVJTSU9OXzE1MCkpIHsKKysgICAgICB0bXAyID0gX21hbmdsZV9mcmFnX2NvbG9yX2RhdGEgKHRtcCk7CisrICAgICAgZ19mcmVlICh0bXApOworKyAgICAgIHRtcCA9IHRtcDI7CisrICAgIH0KKyAgIH0KKy0gIF9tYW5nbGVfdmVyc2lvbl9wcm9maWxlX2Zyb21fZ2xfYXBpIChnbF9hcGksIHZlcnNpb24sIHByb2ZpbGUpOworICAgcmV0dXJuIHRtcDsKKyB9CisgCitAQCAtMTg5OSwxNSArMTkyOSwxOCBAQCBfY3JlYXRlX3NoYWRlciAoR3N0R0xDb2xvckNvbnZlcnQgKiBjb252ZXJ0KQorICAgY29uc3QgZ2NoYXIgKnN0cmluZ3NbMl07CisgICBHRXJyb3IgKmVycm9yID0gTlVMTDsKKyAgIEdzdEdMQVBJIGdsX2FwaTsKKysgIGdpbnQgZ2xfbWFqb3IsIGdsX21pbm9yOworICAgaW50IGk7CisgCisgICBnbF9hcGkgPSBnc3RfZ2xfY29udGV4dF9nZXRfZ2xfYXBpIChjb252ZXJ0LT5jb250ZXh0KTsKKysgIGdzdF9nbF9jb250ZXh0X2dldF9nbF92ZXJzaW9uIChjb252ZXJ0LT5jb250ZXh0LCAmZ2xfbWFqb3IsICZnbF9taW5vcik7CisgCisgICByZXQgPSBnc3RfZ2xfc2hhZGVyX25ldyAoY29udmVydC0+Y29udGV4dCk7CisgCisgICB0bXAgPQorICAgICAgIF9tYW5nbGVfc2hhZGVyICh0ZXh0X3ZlcnRleF9zaGFkZXIsIEdMX1ZFUlRFWF9TSEFERVIsIGluZm8tPnRlbXBsLT50YXJnZXQsCistICAgICAgY29udmVydC0+cHJpdi0+ZnJvbV90ZXh0dXJlX3RhcmdldCwgZ2xfYXBpLCAmdmVyc2lvbiwgJnByb2ZpbGUpOworKyAgICAgIGNvbnZlcnQtPnByaXYtPmZyb21fdGV4dHVyZV90YXJnZXQsIGdsX2FwaSwgZ2xfbWFqb3IsIGdsX21pbm9yLCAmdmVyc2lvbiwKKysgICAgICAmcHJvZmlsZSk7CisgCisgICB0bXAxID0gZ3N0X2dsc2xfdmVyc2lvbl9wcm9maWxlX3RvX3N0cmluZyAodmVyc2lvbiwgcHJvZmlsZSk7CisgICB2ZXJzaW9uX3N0ciA9IGdfc3RyZHVwX3ByaW50ZiAoIiN2ZXJzaW9uICVzXG4iLCB0bXAxKTsKK0BAIC0xOTQ1LDkgKzE5NzgsMzcgQEAgX2NyZWF0ZV9zaGFkZXIgKEdzdEdMQ29sb3JDb252ZXJ0ICogY29udmVydCkKKyAgIGlmIChpbmZvLT50ZW1wbC0+dW5pZm9ybXMpCisgICAgIGdfc3RyaW5nX2FwcGVuZCAoc3RyLCBpbmZvLT50ZW1wbC0+dW5pZm9ybXMpOworIAorLSAgaWYgKGdsX2FwaSAmIEdTVF9HTF9BUElfT1BFTkdMMykgeworLSAgICBnX3N0cmluZ19hcHBlbmRfYyAoc3RyLCAnXG4nKTsKKy0gICAgZ19zdHJpbmdfYXBwZW5kIChzdHIsICJvdXQgdmVjNCBmcmFnQ29sb3I7XG4iKTsKKysgIGdfc3RyaW5nX2FwcGVuZF9jIChzdHIsICdcbicpOworKworKyAgLyogR0wgMy4zKyBhbmQgR0wgRVMgMy54ICovCisrICBpZiAoKHByb2ZpbGUgPT0gR1NUX0dMU0xfUFJPRklMRV9DT1JFICYmIHZlcnNpb24gPj0gR1NUX0dMU0xfVkVSU0lPTl8zMzApCisrICAgICAgfHwgKHByb2ZpbGUgPT0gR1NUX0dMU0xfUFJPRklMRV9FUyAmJiB2ZXJzaW9uID49IEdTVF9HTFNMX1ZFUlNJT05fMzAwKSkgeworKyAgICBpZiAoaW5mby0+b3V0X25fdGV4dHVyZXMgPiAxKSB7CisrICAgICAgZ2ludCBpOworKworKyAgICAgIGZvciAoaSA9IDA7IGkgPCBpbmZvLT5vdXRfbl90ZXh0dXJlczsgaSsrKSB7CisrICAgICAgICBnX3N0cmluZ19hcHBlbmRfcHJpbnRmIChzdHIsCisrICAgICAgICAgICAgImxheW91dChsb2NhdGlvbiA9ICVkKSBvdXQgdmVjNCBmcmFnQ29sb3JfJWQ7XG4iLCBpLCBpKTsKKysgICAgICB9CisrICAgIH0gZWxzZSB7CisrICAgICAgZ19zdHJpbmdfYXBwZW5kIChzdHIsICJsYXlvdXQgKGxvY2F0aW9uID0gMCkgb3V0IHZlYzQgZnJhZ0NvbG9yO1xuIik7CisrICAgIH0KKysgIH0gZWxzZSBpZiAocHJvZmlsZSA9PSBHU1RfR0xTTF9QUk9GSUxFX0NPUkUKKysgICAgICAmJiB2ZXJzaW9uID49IEdTVF9HTFNMX1ZFUlNJT05fMTUwKSB7CisrICAgIC8qIG5vIGxheW91dCBzcGVjaWZpZXJzLCB1c2UgZ2xCaW5kRnJhZ0RhdGFMb2NhdGlvbiBpbnN0ZWFkICovCisrICAgIGlmIChpbmZvLT5vdXRfbl90ZXh0dXJlcyA+IDEpIHsKKysgICAgICBnaW50IGk7CisrCisrICAgICAgZm9yIChpID0gMDsgaSA8IGluZm8tPm91dF9uX3RleHR1cmVzOyBpKyspIHsKKysgICAgICAgIGdjaGFyICp2YXJfbmFtZSA9IGdfc3RyZHVwX3ByaW50ZiAoImZyYWdDb2xvcl8lZCIsIGkpOworKyAgICAgICAgZ19zdHJpbmdfYXBwZW5kX3ByaW50ZiAoc3RyLCAib3V0IHZlYzQgJXM7XG4iLCB2YXJfbmFtZSk7CisrICAgICAgICBnc3RfZ2xfc2hhZGVyX2JpbmRfZnJhZ19kYXRhX2xvY2F0aW9uIChyZXQsIGksIHZhcl9uYW1lKTsKKysgICAgICAgIGdfZnJlZSAodmFyX25hbWUpOworKyAgICAgIH0KKysgICAgfSBlbHNlIHsKKysgICAgICBnX3N0cmluZ19hcHBlbmQgKHN0ciwgIm91dCB2ZWM0IGZyYWdDb2xvcjtcbiIpOworKyAgICAgIGdzdF9nbF9zaGFkZXJfYmluZF9mcmFnX2RhdGFfbG9jYXRpb24gKHJldCwgMCwgImZyYWdDb2xvciIpOworKyAgICB9CisgICB9CisgCisgICBmb3IgKGkgPSAwOyBpIDwgTUFYX0ZVTkNUSU9OUzsgaSsrKSB7CitAQCAtMTk1OSw3ICsyMDIwLDE5IEBAIF9jcmVhdGVfc2hhZGVyIChHc3RHTENvbG9yQ29udmVydCAqIGNvbnZlcnQpCisgICAgIGdfc3RyaW5nX2FwcGVuZF9jIChzdHIsICdcbicpOworICAgfQorIAorLSAgZ19zdHJpbmdfYXBwZW5kIChzdHIsICJcbnZhcnlpbmcgdmVjMiB2X3RleGNvb3JkO1xudm9pZCBtYWluICh2b2lkKSB7XG4iKTsKKysgIHsKKysgICAgY29uc3QgZ2NoYXIgKnZhcnlpbmcgPSBOVUxMOworKworKyAgICBpZiAoKHByb2ZpbGUgPT0gR1NUX0dMU0xfUFJPRklMRV9FUyAmJiB2ZXJzaW9uID49IEdTVF9HTFNMX1ZFUlNJT05fMzAwKQorKyAgICAgICAgfHwgKHByb2ZpbGUgPT0gR1NUX0dMU0xfUFJPRklMRV9DT1JFCisrICAgICAgICAgICAgJiYgdmVyc2lvbiA+PSBHU1RfR0xTTF9WRVJTSU9OXzE1MCkpIHsKKysgICAgICB2YXJ5aW5nID0gImluIjsKKysgICAgfSBlbHNlIHsKKysgICAgICB2YXJ5aW5nID0gInZhcnlpbmciOworKyAgICB9CisrICAgIGdfc3RyaW5nX2FwcGVuZF9wcmludGYgKHN0ciwgIlxuJXMgdmVjMiB2X3RleGNvb3JkO1xudm9pZCBtYWluICh2b2lkKSB7XG4iLAorKyAgICAgICAgdmFyeWluZyk7CisrICB9CisgICBpZiAoaW5mby0+ZnJhZ19ib2R5KSB7CisgICAgIGdfc3RyaW5nX2FwcGVuZCAoc3RyLCAidmVjMiB0ZXhjb29yZDtcbiIpOworICAgICBpZiAoY29udmVydC0+cHJpdi0+ZnJvbV90ZXh0dXJlX3RhcmdldCA9PSBHU1RfR0xfVEVYVFVSRV9UQVJHRVRfUkVDVEFOR0xFCitAQCAtMTk3NSw3ICsyMDQ4LDcgQEAgX2NyZWF0ZV9zaGFkZXIgKEdzdEdMQ29sb3JDb252ZXJ0ICogY29udmVydCkKKyAgIHRtcCA9IGdfc3RyaW5nX2ZyZWUgKHN0ciwgRkFMU0UpOworICAgaW5mby0+ZnJhZ19wcm9nID0gX21hbmdsZV9zaGFkZXIgKHRtcCwgR0xfRlJBR01FTlRfU0hBREVSLAorICAgICAgIGluZm8tPnRlbXBsLT50YXJnZXQsIGNvbnZlcnQtPnByaXYtPmZyb21fdGV4dHVyZV90YXJnZXQsIGdsX2FwaSwKKy0gICAgICAmdmVyc2lvbiwgJnByb2ZpbGUpOworKyAgICAgIGdsX21ham9yLCBnbF9taW5vciwgJnZlcnNpb24sICZwcm9maWxlKTsKKyAgIGdfZnJlZSAodG1wKTsKKyAKKyAgIHN0cmluZ3NbMV0gPSBpbmZvLT5mcmFnX3Byb2c7CistLSAKKzEuOS4xCisKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9nc3RyZWFtZXIvZ3N0cmVhbWVyMS4wLXBsdWdpbnMtYmFkLzAwMDQtZ2xjb2xvcmNvbnZlcnQtZG9uLXQtdXNlLXRoZS1wcmVkZWZpbmVkLXZhcmlhYmxlLW5hbS5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9nc3RyZWFtZXIvZ3N0cmVhbWVyMS4wLXBsdWdpbnMtYmFkLzAwMDQtZ2xjb2xvcmNvbnZlcnQtZG9uLXQtdXNlLXRoZS1wcmVkZWZpbmVkLXZhcmlhYmxlLW5hbS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5iNzVmNDAyCi0tLSAvZGV2L251bGwKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2dzdHJlYW1lci9nc3RyZWFtZXIxLjAtcGx1Z2lucy1iYWQvMDAwNC1nbGNvbG9yY29udmVydC1kb24tdC11c2UtdGhlLXByZWRlZmluZWQtdmFyaWFibGUtbmFtLnBhdGNoCkBAIC0wLDAgKzEsMzIgQEAKK0Zyb20gYjA2OTY3MmFjZTJiNzYyZjQwMGNhNmQzMTg1NzFjYmVkZjUxNDFmMiBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IE1hdHRoZXcgV2F0ZXJzIDxtYXR0aGV3QGNlbnRyaWN1bGFyLmNvbT4KK0RhdGU6IFRodSwgMzEgTWFyIDIwMTYgMjA6MDA6MzcgKzExMDAKK1N1YmplY3Q6IFtQQVRDSCAxLzNdIGdsY29sb3Jjb252ZXJ0OiBkb24ndCB1c2UgdGhlIHByZWRlZmluZWQgdmFyaWFibGUgbmFtZQorIHNhbXBsZQorCitVc2luZyAnc2FtcGxlJyBhcyBhIHZhcmlhYmxlIG5hbWUgaXMgYW4gZXJyb3IgaW4gR0xFUzMKKworVXBzdHJlYW0tU3RhdHVzOiBCYWNrcG9ydCBbMS45LjFdCistLS0KKyBnc3QtbGlicy9nc3QvZ2wvZ3N0Z2xjb2xvcmNvbnZlcnQuYyB8IDQgKystLQorIDEgZmlsZSBjaGFuZ2VkLCAyIGluc2VydGlvbnMoKyksIDIgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9nc3QtbGlicy9nc3QvZ2wvZ3N0Z2xjb2xvcmNvbnZlcnQuYyBiL2dzdC1saWJzL2dzdC9nbC9nc3RnbGNvbG9yY29udmVydC5jCitpbmRleCBmNDc4ZmFhLi5jMjM2MjRmIDEwMDY0NAorLS0tIGEvZ3N0LWxpYnMvZ3N0L2dsL2dzdGdsY29sb3Jjb252ZXJ0LmMKKysrKyBiL2dzdC1saWJzL2dzdC9nbC9nc3RnbGNvbG9yY29udmVydC5jCitAQCAtMjYxLDkgKzI2MSw5IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3Qgc2hhZGVyX3RlbXBsIHRlbXBsX1JHQl90b19QTEFOQVJfWVVWID0KKyAgICAgIiAgICBmb3IgKGludCBqID0gMDsgaiA8IGludChjaHJvbWFfc2FtcGxpbmcueSk7IGorKykge1xuIgorICAgICAiICAgICAgaW50IG4gPSAoaSsxKSooaisxKTtcbiIKKyAgICAgIiAgICAgIGRlbHRhLnkgPSBmbG9hdChqKTtcbiIKKy0gICAgIiAgICAgIHZlYzQgc2FtcGxlID0gdGV4dHVyZTJEKHRleCwgKGNocm9tYV9wb3MgKyBkZWx0YSkgLyB1bm5vcm1hbGl6YXRpb24pLiVjJWMlYyVjO1xuIgorKyAgICAiICAgICAgdmVjNCBzID0gdGV4dHVyZTJEKHRleCwgKGNocm9tYV9wb3MgKyBkZWx0YSkgLyB1bm5vcm1hbGl6YXRpb24pLiVjJWMlYyVjO1xuIgorICAgICAgICAgICAgLyogcm9sbGluZyBhdmVyYWdlICovCistICAgICIgICAgICB1dl90ZXhlbCA9IChmbG9hdChuLTEpICogdXZfdGV4ZWwgKyBzYW1wbGUpIC8gZmxvYXQobik7XG4iCisrICAgICIgICAgICB1dl90ZXhlbCA9IChmbG9hdChuLTEpICogdXZfdGV4ZWwgKyBzKSAvIGZsb2F0KG4pO1xuIgorICAgICAiICAgIH1cbiIKKyAgICAgIiAgfVxuIgorICAgICAifVxuIgorLS0gCisxLjkuMQorCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvZ3N0cmVhbWVyL2dzdHJlYW1lcjEuMC1wbHVnaW5zLWJhZC8wMDA1LWdsc2hhZGVyLWFkZC1nbEJpbmRGcmFnRGF0YUxvY2F0aW9uLnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2dzdHJlYW1lci9nc3RyZWFtZXIxLjAtcGx1Z2lucy1iYWQvMDAwNS1nbHNoYWRlci1hZGQtZ2xCaW5kRnJhZ0RhdGFMb2NhdGlvbi5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi41N2U5ZDFhCi0tLSAvZGV2L251bGwKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2dzdHJlYW1lci9nc3RyZWFtZXIxLjAtcGx1Z2lucy1iYWQvMDAwNS1nbHNoYWRlci1hZGQtZ2xCaW5kRnJhZ0RhdGFMb2NhdGlvbi5wYXRjaApAQCAtMCwwICsxLDc3IEBACitGcm9tIDM4MjIxMDgwMTgxMjI5ZDUyMDUyMmEyMGJjYjE2NjNjYTE5ZjdhZmYgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBNYXR0aGV3IFdhdGVycyA8bWF0dGhld0BjZW50cmljdWxhci5jb20+CitEYXRlOiBUaHUsIDMxIE1hciAyMDE2IDE5OjI1OjMyICsxMTAwCitTdWJqZWN0OiBbUEFUQ0ggMi8zXSBnbHNoYWRlcjogYWRkIGdsQmluZEZyYWdEYXRhTG9jYXRpb24KKworVGhlcmUgYXJlIHNvbWUgY2FzZXMgd2hlcmUgaXQncyBuZWVkZWQgZm9yIGJpbmRpbmcgaW4vb3V0IHZhcmlhYmxlcyBpbiBzaGFkZXJzLgorZS5nLiBnbHNsIDE1MCAoZ2wgMy4yKSBkb2Vzbid0IHN1cHBvcnQgdGhlICdsYXlvdXQgKGxvY2F0aW9uID0gPyknIHNwZWNpZmllcnMgaW4KK3RoZSBzaGFkZXIgc291cmNlIHNvIHdlIGhhdmUgdG8gYmluZCB0aGVtIG91cnNlbHZlcy4KKworVXBzdHJlYW0tU3RhdHVzOiBCYWNrcG9ydCBbMS45LjFdCistLS0KKyBnc3QtbGlicy9nc3QvZ2wvZ2xwcm90b3R5cGVzL3NoYWRlcnMuaCB8IDEwICsrKysrKysrKysKKyBnc3QtbGlicy9nc3QvZ2wvZ3N0Z2xzaGFkZXIuYyAgICAgICAgICB8IDIwICsrKysrKysrKysrKysrKysrKysrCisgZ3N0LWxpYnMvZ3N0L2dsL2dzdGdsc2hhZGVyLmggICAgICAgICAgfCAgMSArCisgMyBmaWxlcyBjaGFuZ2VkLCAzMSBpbnNlcnRpb25zKCspCisKK2RpZmYgLS1naXQgYS9nc3QtbGlicy9nc3QvZ2wvZ2xwcm90b3R5cGVzL3NoYWRlcnMuaCBiL2dzdC1saWJzL2dzdC9nbC9nbHByb3RvdHlwZXMvc2hhZGVycy5oCitpbmRleCA4MTdlNDc5Li42ZDgyOGRiIDEwMDY0NAorLS0tIGEvZ3N0LWxpYnMvZ3N0L2dsL2dscHJvdG90eXBlcy9zaGFkZXJzLmgKKysrKyBiL2dzdC1saWJzL2dzdC9nbC9nbHByb3RvdHlwZXMvc2hhZGVycy5oCitAQCAtMzYyLDMgKzM2MiwxMyBAQCBHU1RfR0xfRVhUX0ZVTkNUSU9OICh2b2lkLCBVbmlmb3JtTWF0cml4M3g0ZnYsCisgR1NUX0dMX0VYVF9GVU5DVElPTiAodm9pZCwgVW5pZm9ybU1hdHJpeDR4M2Z2LAorICAgICAgICAgICAgICAgICAgICAgIChHTGludCBsb2NhdGlvbiwgR0xzaXplaSBjb3VudCwgR0xib29sZWFuIHRyYW5zcG9zZSwgY29uc3QgR0xmbG9hdCAqdmFsdWUpKQorIEdTVF9HTF9FWFRfRU5EICgpCisrCisrR1NUX0dMX0VYVF9CRUdJTiAoYmluZF9mcmFnX2RhdGEsCisrICAgICAgICAgICAgICAgICAgR1NUX0dMX0FQSV9PUEVOR0wgfCBHU1RfR0xfQVBJX09QRU5HTDMsCisrICAgICAgICAgICAgICAgICAgMywgMCwKKysgICAgICAgICAgICAgICAgICAyNTUsIDI1NSwKKysgICAgICAgICAgICAgICAgICAiXDAiLAorKyAgICAgICAgICAgICAgICAgICJcMCIpCisrR1NUX0dMX0VYVF9GVU5DVElPTiAodm9pZCwgQmluZEZyYWdEYXRhTG9jYXRpb24sCisrICAgICAgICAgICAgICAgICAgICAgKEdMdWludCBwcm9ncmFtLCBHTHVpbnQgaW5kZXgsIGNvbnN0IEdMY2hhciAqIG5hbWUpKQorK0dTVF9HTF9FWFRfRU5EICgpCitkaWZmIC0tZ2l0IGEvZ3N0LWxpYnMvZ3N0L2dsL2dzdGdsc2hhZGVyLmMgYi9nc3QtbGlicy9nc3QvZ2wvZ3N0Z2xzaGFkZXIuYworaW5kZXggOWQ5Njc4NC4uOWYwOTIzNiAxMDA2NDQKKy0tLSBhL2dzdC1saWJzL2dzdC9nbC9nc3RnbHNoYWRlci5jCisrKysgYi9nc3QtbGlicy9nc3QvZ2wvZ3N0Z2xzaGFkZXIuYworQEAgLTEzMDYsMyArMTMwNiwyMyBAQCBnc3RfZ2xfc2hhZGVyX2JpbmRfYXR0cmlidXRlX2xvY2F0aW9uIChHc3RHTFNoYWRlciAqIHNoYWRlciwgR0x1aW50IGluZGV4LAorIAorICAgZ2wtPkJpbmRBdHRyaWJMb2NhdGlvbiAocHJpdi0+cHJvZ3JhbV9oYW5kbGUsIGluZGV4LCBuYW1lKTsKKyB9CisrCisrdm9pZAorK2dzdF9nbF9zaGFkZXJfYmluZF9mcmFnX2RhdGFfbG9jYXRpb24gKEdzdEdMU2hhZGVyICogc2hhZGVyLAorKyAgICBndWludCBpbmRleCwgY29uc3QgZ2NoYXIgKiBuYW1lKQorK3sKKysgIEdzdEdMU2hhZGVyUHJpdmF0ZSAqcHJpdjsKKysgIEdzdEdMRnVuY3MgKmdsOworKworKyAgZ19yZXR1cm5faWZfZmFpbCAoc2hhZGVyICE9IE5VTEwpOworKyAgaWYgKCFfZW5zdXJlX3Byb2dyYW0gKHNoYWRlcikpCisrICAgIGdfcmV0dXJuX2lmX2ZhaWwgKHNoYWRlci0+cHJpdi0+cHJvZ3JhbV9oYW5kbGUpOworKyAgcHJpdiA9IHNoYWRlci0+cHJpdjsKKysgIGdsID0gc2hhZGVyLT5jb250ZXh0LT5nbF92dGFibGU7CisrICBnX3JldHVybl9pZl9mYWlsIChnbC0+QmluZEZyYWdEYXRhTG9jYXRpb24pOworKworKyAgR1NUX1RSQUNFX09CSkVDVCAoc2hhZGVyLCAiYmluZGluZyBwcm9ncmFtICVpIGZyYWcgZGF0YSBcJyVzXCcgbG9jYXRpb24gJWkiLAorKyAgICAgIChpbnQpIHByaXYtPnByb2dyYW1faGFuZGxlLCBuYW1lLCBpbmRleCk7CisrCisrICBnbC0+QmluZEZyYWdEYXRhTG9jYXRpb24gKHByaXYtPnByb2dyYW1faGFuZGxlLCBpbmRleCwgbmFtZSk7CisrfQorZGlmZiAtLWdpdCBhL2dzdC1saWJzL2dzdC9nbC9nc3RnbHNoYWRlci5oIGIvZ3N0LWxpYnMvZ3N0L2dsL2dzdGdsc2hhZGVyLmgKK2luZGV4IDIxNDEwZTIuLjIyMDBiODkgMTAwNjQ0CistLS0gYS9nc3QtbGlicy9nc3QvZ2wvZ3N0Z2xzaGFkZXIuaAorKysrIGIvZ3N0LWxpYnMvZ3N0L2dsL2dzdGdsc2hhZGVyLmgKK0BAIC0xMDQsNiArMTA0LDcgQEAgdm9pZCBnc3RfZ2xfc2hhZGVyX3NldF91bmlmb3JtX21hdHJpeF80eDNmdiAoR3N0R0xTaGFkZXIgKnNoYWRlciwgY29uc3QgZ2NoYXIgKm4KKyAKKyBnaW50IGdzdF9nbF9zaGFkZXJfZ2V0X2F0dHJpYnV0ZV9sb2NhdGlvbiAgKEdzdEdMU2hhZGVyICpzaGFkZXIsIGNvbnN0IGdjaGFyICpuYW1lKTsKKyB2b2lkIGdzdF9nbF9zaGFkZXJfYmluZF9hdHRyaWJ1dGVfbG9jYXRpb24gKEdzdEdMU2hhZGVyICogc2hhZGVyLCBndWludCBpbmRleCwgY29uc3QgZ2NoYXIgKiBuYW1lKTsKKyt2b2lkIGdzdF9nbF9zaGFkZXJfYmluZF9mcmFnX2RhdGFfbG9jYXRpb24gKEdzdEdMU2hhZGVyICogc2hhZGVyLCBndWludCBpbmRleCwgY29uc3QgZ2NoYXIgKiBuYW1lKTsKKyAKKyBHX0VORF9ERUNMUworIAorLS0gCisxLjkuMQorCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvZ3N0cmVhbWVyL2dzdHJlYW1lcjEuMC1wbHVnaW5zLWJhZC8wMDA2LWdsY29sb3Jjb252ZXJ0LUdMRVMzLWRlcHJlY2F0ZXMtdGV4dHVyZTJELWFuZC1pdC1kb2UucGF0Y2ggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvZ3N0cmVhbWVyL2dzdHJlYW1lcjEuMC1wbHVnaW5zLWJhZC8wMDA2LWdsY29sb3Jjb252ZXJ0LUdMRVMzLWRlcHJlY2F0ZXMtdGV4dHVyZTJELWFuZC1pdC1kb2UucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uNzllZjRjOAotLS0gL2Rldi9udWxsCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9nc3RyZWFtZXIvZ3N0cmVhbWVyMS4wLXBsdWdpbnMtYmFkLzAwMDYtZ2xjb2xvcmNvbnZlcnQtR0xFUzMtZGVwcmVjYXRlcy10ZXh0dXJlMkQtYW5kLWl0LWRvZS5wYXRjaApAQCAtMCwwICsxLDUxIEBACitGcm9tIDc2NGZkNjlmODQ4MmVjYTlmOTI1Y2VmZTcyZWJhZTA5MGFlNTlkNDMgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiA9P1VURi04P3E/U2ViYXN0aWFuPTIwRHI9QzM9QjZnZT89IDxzZWJhc3RpYW5AY2VudHJpY3VsYXIuY29tPgorRGF0ZTogVHVlLCAxOSBBcHIgMjAxNiAxOToyNzozMyArMDMwMAorU3ViamVjdDogW1BBVENIIDMvM10gZ2xjb2xvcmNvbnZlcnQ6IEdMRVMzIGRlcHJlY2F0ZXMgdGV4dHVyZTJEKCkgYW5kIGl0IGRvZXMKKyBub3Qgd29yayBhdCBhbGwgaW4gbmV3ZXIgdmVyc2lvbnMgdGhhbiAzLjMKKworVXNlIHRoZSBuZXdlciB0ZXh0dXJlKCkgZnVuY3Rpb24gaW5zdGVhZC4gVGhpcyBmaXhlcyBnbGltYWdlc2luayBhbmQgb3RoZXIKK3RoaW5ncyBvbiB2YXJpb3VzIEFuZHJvaWQgZGV2aWNlcy4KKworVXBzdHJlYW0tU3RhdHVzOiBCYWNrcG9ydCBbMS45LjFdCisKK2h0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03NjUyNjYKKy0tLQorIGdzdC1saWJzL2dzdC9nbC9nc3RnbGNvbG9yY29udmVydC5jIHwgNyArKysrLS0tCisgMSBmaWxlIGNoYW5nZWQsIDQgaW5zZXJ0aW9ucygrKSwgMyBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL2dzdC1saWJzL2dzdC9nbC9nc3RnbGNvbG9yY29udmVydC5jIGIvZ3N0LWxpYnMvZ3N0L2dsL2dzdGdsY29sb3Jjb252ZXJ0LmMKK2luZGV4IGMyMzYyNGYuLmY0NzJkNWQgMTAwNjQ0CistLS0gYS9nc3QtbGlicy9nc3QvZ2wvZ3N0Z2xjb2xvcmNvbnZlcnQuYworKysrIGIvZ3N0LWxpYnMvZ3N0L2dsL2dzdGdsY29sb3Jjb252ZXJ0LmMKK0BAIC0xNzE2LDcgKzE3MTYsNyBAQCBfdW5iaW5kX2J1ZmZlciAoR3N0R0xDb2xvckNvbnZlcnQgKiBjb252ZXJ0KQorIAorIHN0YXRpYyBnY2hhciAqCisgX21hbmdsZV90ZXh0dXJlX2FjY2VzcyAoY29uc3QgZ2NoYXIgKiBzdHIsIEdzdEdMVGV4dHVyZVRhcmdldCBmcm9tLAorLSAgICBHc3RHTFRleHR1cmVUYXJnZXQgdG8sIEdzdEdMQVBJIGdsX2FwaSkKKysgICAgR3N0R0xUZXh0dXJlVGFyZ2V0IHRvLCBHc3RHTEFQSSBnbF9hcGksIGd1aW50IGdsX21ham9yLCBndWludCBnbF9taW5vcikKKyB7CisgICBjb25zdCBnY2hhciAqZnJvbV9zdHIgPSBOVUxMLCAqdG9fc3RyID0gTlVMTDsKKyAgIGdjaGFyICpyZXQsICp0bXA7CitAQCAtMTczMCw3ICsxNzMwLDggQEAgX21hbmdsZV90ZXh0dXJlX2FjY2VzcyAoY29uc3QgZ2NoYXIgKiBzdHIsIEdzdEdMVGV4dHVyZVRhcmdldCBmcm9tLAorICAgaWYgKGZyb20gPT0gR1NUX0dMX1RFWFRVUkVfVEFSR0VUX0VYVEVSTkFMX09FUykKKyAgICAgZnJvbV9zdHIgPSAidGV4dHVyZTJEIjsKKyAKKy0gIGlmIChnbF9hcGkgJiBHU1RfR0xfQVBJX09QRU5HTDMpIHsKKysgIGlmICgoZ2xfYXBpICYgR1NUX0dMX0FQSV9PUEVOR0wzKSB8fCAoZ2xfYXBpICYgR1NUX0dMX0FQSV9HTEVTMgorKyAgICAgICAgICAmJiBnbF9tYWpvciA+PSAzKSkgeworICAgICB0b19zdHIgPSAidGV4dHVyZSI7CisgICB9IGVsc2UgeworICAgICBpZiAodG8gPT0gR1NUX0dMX1RFWFRVUkVfVEFSR0VUXzJEKQorQEAgLTE4OTgsNyArMTg5OSw3IEBAIF9tYW5nbGVfc2hhZGVyIChjb25zdCBnY2hhciAqIHN0ciwgZ3VpbnQgc2hhZGVyX3R5cGUsIEdzdEdMVGV4dHVyZVRhcmdldCBmcm9tLAorIAorICAgX21hbmdsZV92ZXJzaW9uX3Byb2ZpbGVfZnJvbV9nbF9hcGkgKGdsX2FwaSwgZ2xfbWFqb3IsIGdsX21pbm9yLCB2ZXJzaW9uLAorICAgICAgIHByb2ZpbGUpOworLSAgdG1wID0gX21hbmdsZV90ZXh0dXJlX2FjY2VzcyAoc3RyLCBmcm9tLCB0bywgZ2xfYXBpKTsKKysgIHRtcCA9IF9tYW5nbGVfdGV4dHVyZV9hY2Nlc3MgKHN0ciwgZnJvbSwgdG8sIGdsX2FwaSwgZ2xfbWFqb3IsIGdsX21pbm9yKTsKKyAgIHRtcDIgPSBfbWFuZ2xlX3NhbXBsZXJfdHlwZSAodG1wLCBmcm9tLCB0byk7CisgICBnX2ZyZWUgKHRtcCk7CisgICB0bXAgPQorLS0gCisxLjkuMQorCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvZ3N0cmVhbWVyL2dzdHJlYW1lcjEuMC1wbHVnaW5zLWJhZC8wMDA4LWdsLWltcGxlbWVudC1Hc3RHTE1lbW9yeUVHTC5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9nc3RyZWFtZXIvZ3N0cmVhbWVyMS4wLXBsdWdpbnMtYmFkLzAwMDgtZ2wtaW1wbGVtZW50LUdzdEdMTWVtb3J5RUdMLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE2NzM4MWMKLS0tIC9kZXYvbnVsbAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvZ3N0cmVhbWVyL2dzdHJlYW1lcjEuMC1wbHVnaW5zLWJhZC8wMDA4LWdsLWltcGxlbWVudC1Hc3RHTE1lbW9yeUVHTC5wYXRjaApAQCAtMCwwICsxLDQ5NSBAQAorRnJvbSA4MDZiYmU3NWIwYjY5NDdmNTg5YmNlMzk2MGMyOGZlZTUxYjVjNmMyIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogR3dhbmcgWW9vbiBId2FuZyA8eW9vbkBpZ2FsaWEuY29tPgorRGF0ZTogVGh1LCAyMSBKYW4gMjAxNiAyMjoxODoxNyArMDkwMAorU3ViamVjdDogW1BBVENIXSBnbDogaW1wbGVtZW50IEdzdEdMTWVtb3J5RUdMCisKK0JlY2F1c2UgY3VycmVudCBHc3RFR0xJbWFnZU1lbW9yeSBkb2VzIG5vdCBpbmhlcml0IEdzdEdMTWVtb3J5LCBHTFVwbG9hZAorYWxsb2NhdGVzIGFkZGl0aW9uYWwgR0xNZW1vcnkgYW5kIHVwbG9hZCB0aGUgZGVjb2RlZCBjb250ZW50cyBmcm9tIHRoZSBkZWNvZGVyCit3aGljaCB1c2VzIEVHTEltYWdlIChlLmcuIGdzdC1vbXggaW4gUlBpKS4KKworVGhpcyB3b3JrIGFkZHMgR3N0R0xNZW1vcnlFR0wgdG8gYXZvaWQgdGhpcyBvdmVyaGVhZC4gRGVjb2RlcnMgYWxsb2NhdGUKK0dzdEdMTWVtb3J5RUdMIGFuZCBkZWNvZGUgaXRzIGNvbnRlbnRzIHRvIHRoZSBFR0xJbWFnZSBvZiBHc3RHTE1lbW9yeUVHTC4gIEFuZAorR0xVcGxvYWQgdXNlcyB0aGlzIG1lbW9yeSB3aXRob3V0IGFsbG9jYXRpb24gb2YgYWRkaXRpb25hbCB0ZXh0dXJlcyBhbmQgYmxpdAorb3BlcmF0aW9ucy4KKworaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTc2MDkxNgorLS0tCitVcHN0cmVhbS1TdGF0dXM6IEJhY2twb3J0CitTaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorCisgZ3N0LWxpYnMvZ3N0L2dsL2VnbC9NYWtlZmlsZS5hbSAgICAgICAgfCAgIDIgKworIGdzdC1saWJzL2dzdC9nbC9lZ2wvZ3N0Z2xkaXNwbGF5X2VnbC5jIHwgICAyICsKKyBnc3QtbGlicy9nc3QvZ2wvZWdsL2dzdGdsbWVtb3J5ZWdsLmMgICB8IDI0MSArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysKKyBnc3QtbGlicy9nc3QvZ2wvZWdsL2dzdGdsbWVtb3J5ZWdsLmggICB8IDEwOCArKysrKysrKysrKysrKysKKyBnc3QtbGlicy9nc3QvZ2wvZ3N0Z2xfZndkLmggICAgICAgICAgICB8ICAgNCArCisgZ3N0LWxpYnMvZ3N0L2dsL2dzdGdsZGlzcGxheS5jICAgICAgICAgfCAgIDIgKworIGdzdC1saWJzL2dzdC9nbC9nc3RnbHVwbG9hZC5jICAgICAgICAgIHwgICA4ICsrCisgNyBmaWxlcyBjaGFuZ2VkLCAzNjcgaW5zZXJ0aW9ucygrKQorIGNyZWF0ZSBtb2RlIDEwMDY0NCBnc3QtbGlicy9nc3QvZ2wvZWdsL2dzdGdsbWVtb3J5ZWdsLmMKKyBjcmVhdGUgbW9kZSAxMDA2NDQgZ3N0LWxpYnMvZ3N0L2dsL2VnbC9nc3RnbG1lbW9yeWVnbC5oCisKK2RpZmYgLS1naXQgYS9nc3QtbGlicy9nc3QvZ2wvZWdsL01ha2VmaWxlLmFtIGIvZ3N0LWxpYnMvZ3N0L2dsL2VnbC9NYWtlZmlsZS5hbQoraW5kZXggYjgwODE3OC4uODc4ZjE2YyAxMDA2NDQKKy0tLSBhL2dzdC1saWJzL2dzdC9nbC9lZ2wvTWFrZWZpbGUuYW0KKysrKyBiL2dzdC1saWJzL2dzdC9nbC9lZ2wvTWFrZWZpbGUuYW0KK0BAIC01LDYgKzUsNyBAQCBub2luc3RfTFRMSUJSQVJJRVMgPSBsaWJnc3RnbC1lZ2wubGEKKyBsaWJnc3RnbF9lZ2xfbGFfU09VUkNFUyA9IFwKKyAJZ3N0Z2xkaXNwbGF5X2VnbC5jIFwKKyAJZ3N0Z2xjb250ZXh0X2VnbC5jIFwKKysJZ3N0Z2xtZW1vcnllZ2wuYyBcCisgCWdzdGVnbGltYWdlbWVtb3J5LmMKKyAKKyBub2luc3RfSEVBREVSUyA9CitAQCAtMTMsNiArMTQsNyBAQCBsaWJnc3RnbF9lZ2xpbmNsdWRlZGlyID0gJChpbmNsdWRlZGlyKS9nc3RyZWFtZXItQEdTVF9BUElfVkVSU0lPTkAvZ3N0L2dsL2VnbAorIGxpYmdzdGdsX2VnbGluY2x1ZGVfSEVBREVSUyA9IFwKKyAJZ3N0Z2xkaXNwbGF5X2VnbC5oIFwKKyAJZ3N0Z2xjb250ZXh0X2VnbC5oIFwKKysJZ3N0Z2xtZW1vcnllZ2wuaCBcCisgCWdzdGVnbGltYWdlbWVtb3J5LmggXAorIAlnc3RlZ2wuaAorIAorZGlmZiAtLWdpdCBhL2dzdC1saWJzL2dzdC9nbC9lZ2wvZ3N0Z2xkaXNwbGF5X2VnbC5jIGIvZ3N0LWxpYnMvZ3N0L2dsL2VnbC9nc3RnbGRpc3BsYXlfZWdsLmMKK2luZGV4IDlhY2Y0ZjAuLjIwODE2YzIgMTAwNjQ0CistLS0gYS9nc3QtbGlicy9nc3QvZ2wvZWdsL2dzdGdsZGlzcGxheV9lZ2wuYworKysrIGIvZ3N0LWxpYnMvZ3N0L2dsL2VnbC9nc3RnbGRpc3BsYXlfZWdsLmMKK0BAIC0yNCw2ICsyNCw3IEBACisgCisgI2luY2x1ZGUgPGdzdC9nbC9lZ2wvZ3N0Z2xkaXNwbGF5X2VnbC5oPgorICNpbmNsdWRlIDxnc3QvZ2wvZWdsL2dzdGVnbGltYWdlbWVtb3J5Lmg+CisrI2luY2x1ZGUgPGdzdC9nbC9lZ2wvZ3N0Z2xtZW1vcnllZ2wuaD4KKyAKKyBHU1RfREVCVUdfQ0FURUdPUllfU1RBVElDIChnc3RfZ2xfZGlzcGxheV9kZWJ1Zyk7CisgI2RlZmluZSBHU1RfQ0FUX0RFRkFVTFQgZ3N0X2dsX2Rpc3BsYXlfZGVidWcKK0BAIC01MSw2ICs1Miw3IEBAIGdzdF9nbF9kaXNwbGF5X2VnbF9pbml0IChHc3RHTERpc3BsYXlFR0wgKiBkaXNwbGF5X2VnbCkKKyAgIGRpc3BsYXlfZWdsLT5mb3JlaWduX2Rpc3BsYXkgPSBGQUxTRTsKKyAKKyAgIGdzdF9lZ2xfaW1hZ2VfbWVtb3J5X2luaXQgKCk7CisrICBnc3RfZ2xfbWVtb3J5X2VnbF9pbml0X29uY2UgKCk7CisgfQorIAorIHN0YXRpYyB2b2lkCitkaWZmIC0tZ2l0IGEvZ3N0LWxpYnMvZ3N0L2dsL2VnbC9nc3RnbG1lbW9yeWVnbC5jIGIvZ3N0LWxpYnMvZ3N0L2dsL2VnbC9nc3RnbG1lbW9yeWVnbC5jCituZXcgZmlsZSBtb2RlIDEwMDY0NAoraW5kZXggMDAwMDAwMC4uMDNjZjQzMgorLS0tIC9kZXYvbnVsbAorKysrIGIvZ3N0LWxpYnMvZ3N0L2dsL2VnbC9nc3RnbG1lbW9yeWVnbC5jCitAQCAtMCwwICsxLDI0MSBAQAorKy8qCisrICogR1N0cmVhbWVyCisrICogQ29weXJpZ2h0IChDKSAyMDEyIENvbGxhYm9yYSBMdGQuCisrICogICBAYXV0aG9yOiBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW4uZHJvZWdlQGNvbGxhYm9yYS5jby51az4KKysgKiBDb3B5cmlnaHQgKEMpIDIwMTQgSnVsaWVuIElzb3JjZSA8anVsaWVuLmlzb3JjZUBnbWFpbC5jb20+CisrICogQ29weXJpZ2h0IChDKSAyMDE1IElnYWxpYQorKyAqICAgIEF1dGhvcjogR3dhbmcgWW9vbiBId2FuZyA8eW9vbkBpZ2FsaWEuY29tPgorKyAqCisrICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisrICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisrICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorKyAqCisrICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisrICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKysgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorKyAqCisrICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKysgKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZQorKyAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLAorKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorKyAqLworKworKyNpZmRlZiBIQVZFX0NPTkZJR19ICisrI2luY2x1ZGUgImNvbmZpZy5oIgorKyNlbmRpZgorKworKyNpbmNsdWRlIDxzdHJpbmcuaD4KKysKKysjaW5jbHVkZSA8Z3N0L2dsL2VnbC9nc3RnbG1lbW9yeWVnbC5oPgorKworK3N0YXRpYyBHc3RBbGxvY2F0b3IgKl9nbF9tZW1vcnlfZWdsX2FsbG9jYXRvcjsKKysKKytHU1RfREVCVUdfQ0FURUdPUllfU1RBVElDIChHU1RfQ0FUX0dMX01FTU9SWSk7CisrI2RlZmluZSBHU1RfQ0FUX0RFRkFVTFQgR1NUX0NBVF9HTF9NRU1PUlkKKysKKysjZGVmaW5lIHBhcmVudF9jbGFzcyBnc3RfZ2xfbWVtb3J5X2VnbF9hbGxvY2F0b3JfcGFyZW50X2NsYXNzCisrR19ERUZJTkVfVFlQRSAoR3N0R0xNZW1vcnlFR0xBbGxvY2F0b3IsIGdzdF9nbF9tZW1vcnlfZWdsX2FsbG9jYXRvciwKKysgICAgR1NUX1RZUEVfR0xfTUVNT1JZX0FMTE9DQVRPUik7CisrCisrZ2Jvb2xlYW4KKytnc3RfaXNfZ2xfbWVtb3J5X2VnbCAoR3N0TWVtb3J5ICogbWVtKQorK3sKKysgIHJldHVybiBtZW0gIT0gTlVMTCAmJiBtZW0tPmFsbG9jYXRvciAhPSBOVUxMCisrICAgICAgJiYgZ190eXBlX2lzX2EgKEdfT0JKRUNUX1RZUEUgKG1lbS0+YWxsb2NhdG9yKSwKKysgICAgICBHU1RfVFlQRV9HTF9NRU1PUllfRUdMX0FMTE9DQVRPUik7CisrfQorKworK3N0YXRpYyBHc3RHTE1lbW9yeUVHTCAqCisrX2dsX21lbV9nZXRfcGFyZW50IChHc3RHTE1lbW9yeUVHTCAqIGdsX21lbSkKKyt7CisrICBHc3RHTE1lbW9yeUVHTCAqcGFyZW50ID0gKEdzdEdMTWVtb3J5RUdMICopZ2xfbWVtLT5tZW0ubWVtLm1lbS5wYXJlbnQ7CisrICByZXR1cm4gcGFyZW50ID8gcGFyZW50IDogZ2xfbWVtOworK30KKysKKytFR0xJbWFnZUtIUgorK2dzdF9nbF9tZW1vcnlfZWdsX2dldF9pbWFnZSAoR3N0R0xNZW1vcnlFR0wgKiBtZW0pCisreworKyAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKGdzdF9pc19nbF9tZW1vcnlfZWdsIChHU1RfTUVNT1JZX0NBU1QgKG1lbSkpLAorKyAgICAgICAgICAgICAgICAgICAgICAgIEVHTF9OT19JTUFHRV9LSFIpOworKyAgcmV0dXJuIF9nbF9tZW1fZ2V0X3BhcmVudChtZW0pLT5pbWFnZTsKKyt9CisrCisrRUdMRGlzcGxheQorK2dzdF9nbF9tZW1vcnlfZWdsX2dldF9kaXNwbGF5IChHc3RHTE1lbW9yeUVHTCAqIG1lbSkKKyt7CisrICBnX3JldHVybl92YWxfaWZfZmFpbCAoZ3N0X2lzX2dsX21lbW9yeV9lZ2wgKEdTVF9NRU1PUllfQ0FTVCAobWVtKSksIE5VTEwpOworKyAgcmV0dXJuIEdTVF9HTF9DT05URVhUX0VHTChfZ2xfbWVtX2dldF9wYXJlbnQobWVtKSktPmVnbF9kaXNwbGF5OworK30KKysKKytHc3RWaWRlb0dMVGV4dHVyZU9yaWVudGF0aW9uCisrZ3N0X2dsX21lbW9yeV9lZ2xfZ2V0X29yaWVudGF0aW9uIChHc3RHTE1lbW9yeUVHTCAqIG1lbSkKKyt7CisrICBnX3JldHVybl92YWxfaWZfZmFpbCAoZ3N0X2lzX2dsX21lbW9yeV9lZ2wgKEdTVF9NRU1PUllfQ0FTVCAobWVtKSksCisrICAgICAgR1NUX1ZJREVPX0dMX1RFWFRVUkVfT1JJRU5UQVRJT05fWF9OT1JNQUxfWV9OT1JNQUwpOworKworKyAgcmV0dXJuIF9nbF9tZW1fZ2V0X3BhcmVudChtZW0pLT5vcmllbnRhdGlvbjsKKyt9CisrCisrdm9pZAorK2dzdF9nbF9tZW1vcnlfZWdsX3NldF9vcmllbnRhdGlvbiAoR3N0R0xNZW1vcnlFR0wgKiBtZW0sCisrICAgIEdzdFZpZGVvR0xUZXh0dXJlT3JpZW50YXRpb24gb3JpZW50YXRpb24pCisreworKyAgZ19yZXR1cm5faWZfZmFpbCAoZ3N0X2lzX2dsX21lbW9yeV9lZ2wgKEdTVF9NRU1PUllfQ0FTVCAobWVtKSkpOworKworKyAgX2dsX21lbV9nZXRfcGFyZW50KG1lbSktPm9yaWVudGF0aW9uID0gb3JpZW50YXRpb247CisrfQorKworK3N0YXRpYyBHc3RNZW1vcnkgKgorK19nbF9tZW1fYWxsb2MgKEdzdEFsbG9jYXRvciAqIGFsbG9jYXRvciwgZ3NpemUgc2l6ZSwKKysgICAgICAgICAgICAgICBHc3RBbGxvY2F0aW9uUGFyYW1zICogcGFyYW1zKQorK3sKKysgIGdfd2FybmluZyAoIlVzZSBnc3RfZ2xfYmFzZV9tZW1vcnlfYWxsb2NhdG9yX2FsbG9jKCkgdG8gYWxsb2NhdGUgZnJvbSB0aGlzICIKKysgICAgICAiR3N0R0xNZW1vcnlFR0wgYWxsb2NhdG9yIik7CisrCisrICByZXR1cm4gTlVMTDsKKyt9CisrCisrc3RhdGljIHZvaWQKKytfZ2xfbWVtX2Rlc3Ryb3kgKEdzdEdMTWVtb3J5RUdMICogbWVtKQorK3sKKysgIC8qIFNoYXJlZCBtZW1vcnkgc2hvdWxkIG5vdCBkZXN0cm95IGFsbCB0aGUgZGF0YSAqLworKyAgaWYgKCFtZW0tPm1lbS5tZW0ubWVtLnBhcmVudCkgeworKyAgICBHc3RHTENvbnRleHRFR0wgKmNvbnRleHQgPSBHU1RfR0xfQ09OVEVYVF9FR0wobWVtLT5tZW0ubWVtLmNvbnRleHQpOworKyAgICBjb250ZXh0LT5lZ2xEZXN0cm95SW1hZ2UgKGNvbnRleHQtPmVnbF9kaXNwbGF5LCBtZW0tPmltYWdlKTsKKysgIH0KKysKKysgIEdTVF9HTF9CQVNFX01FTU9SWV9BTExPQ0FUT1JfQ0xBU1MgKHBhcmVudF9jbGFzcyktPmRlc3Ryb3kgKChHc3RHTEJhc2VNZW1vcnkKKysgICAgICAgICAgKikgbWVtKTsKKyt9CisrCisrc3RhdGljIHZvaWQKKytfZ2xfbWVtX2luaXQgKEdzdEdMTWVtb3J5RUdMICogbWVtLCBHc3RBbGxvY2F0b3IgKiBhbGxvY2F0b3IsCisrICAgIEdzdE1lbW9yeSAqIHBhcmVudCwgR3N0R0xDb250ZXh0ICogY29udGV4dCwgR3N0R0xUZXh0dXJlVGFyZ2V0IHRhcmdldCwKKysgICAgR3N0QWxsb2NhdGlvblBhcmFtcyAqIHBhcmFtcywgR3N0VmlkZW9JbmZvICogaW5mbywKKysgICAgZ3VpbnQgcGxhbmUsIEdzdFZpZGVvQWxpZ25tZW50ICogdmFsaWduLCBncG9pbnRlciB1c2VyX2RhdGEsCisrICAgIEdEZXN0cm95Tm90aWZ5IG5vdGlmeSkKKyt7CisrICBnc3RfZ2xfbWVtb3J5X2luaXQgKChHc3RHTE1lbW9yeSAqKSBtZW0sIGFsbG9jYXRvciwgcGFyZW50LAorKyAgICAgIGNvbnRleHQsIHRhcmdldCwgcGFyYW1zLCBpbmZvLCBwbGFuZSwgdmFsaWduLCB1c2VyX2RhdGEsIG5vdGlmeSk7CisrfQorKworK3N0YXRpYyBHc3RHTE1lbW9yeUVHTCAqCisrX2dsX21lbV9lZ2xfYWxsb2MgKEdzdEdMQmFzZU1lbW9yeUFsbG9jYXRvciAqIGFsbG9jYXRvciwKKysgICAgR3N0R0xWaWRlb0FsbG9jYXRpb25QYXJhbXMgKiBwYXJhbXMpCisreworKyAgZ3VpbnQgYWxsb2NfZmxhZ3MgPSBwYXJhbXMtPnBhcmVudC5hbGxvY19mbGFnczsKKysgIEdzdEdMTWVtb3J5RUdMICptZW07CisrCisrICBnX3JldHVybl92YWxfaWZfZmFpbCAoYWxsb2NfZmxhZ3MgJiBHU1RfR0xfQUxMT0NBVElPTl9QQVJBTVNfQUxMT0NfRkxBR19WSURFTywKKysgICAgICBOVUxMKTsKKysgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsICgoYWxsb2NfZmxhZ3MgJgorKyAgICAgIEdTVF9HTF9BTExPQ0FUSU9OX1BBUkFNU19BTExPQ19GTEFHX1dSQVBfR1BVX0hBTkRMRSkgPT0gMCwgTlVMTCk7CisrICBnX3JldHVybl92YWxfaWZfZmFpbCAoKGFsbG9jX2ZsYWdzICYKKysgICAgICBHU1RfR0xfQUxMT0NBVElPTl9QQVJBTVNfQUxMT0NfRkxBR19XUkFQX1NZU01FTSkgPT0gMCwgTlVMTCk7CisrCisrICBtZW0gPSBnX25ldzAgKEdzdEdMTWVtb3J5RUdMLCAxKTsKKysgIG1lbS0+aW1hZ2UgPSBFR0xfTk9fSU1BR0VfS0hSOworKworKyAgX2dsX21lbV9pbml0IChtZW0sIEdTVF9BTExPQ0FUT1JfQ0FTVCAoYWxsb2NhdG9yKSwgTlVMTCwKKysgICAgICBwYXJhbXMtPnBhcmVudC5jb250ZXh0LCBwYXJhbXMtPnRhcmdldCwgcGFyYW1zLT5wYXJlbnQuYWxsb2NfcGFyYW1zLAorKyAgICAgIHBhcmFtcy0+dl9pbmZvLCBwYXJhbXMtPnBsYW5lLCBwYXJhbXMtPnZhbGlnbiwgcGFyYW1zLT5wYXJlbnQudXNlcl9kYXRhLAorKyAgICAgIHBhcmFtcy0+cGFyZW50Lm5vdGlmeSk7CisrCisrICByZXR1cm4gbWVtOworK30KKysKKytzdGF0aWMgZ2Jvb2xlYW4KKytfZ2xfbWVtX2NyZWF0ZSAoR3N0R0xNZW1vcnlFR0wgKiBnbF9tZW0sIEdFcnJvciAqKiBlcnJvcikKKyt7CisrICBHc3RHTENvbnRleHRFR0wgKmNvbnRleHQgPSBHU1RfR0xfQ09OVEVYVF9FR0wgKGdsX21lbS0+bWVtLm1lbS5jb250ZXh0KTsKKysgIEdzdEdMQmFzZU1lbW9yeUFsbG9jYXRvckNsYXNzICphbGxvY19jbGFzczsKKysKKysgIGlmICghZ3N0X2dsX2NvbnRleHRfY2hlY2tfZmVhdHVyZSAoR1NUX0dMX0NPTlRFWFQgKGNvbnRleHQpLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiRUdMX0tIUl9pbWFnZV9iYXNlIikpIHsKKysgICAgZ19zZXRfZXJyb3IgKGVycm9yLCBHU1RfR0xfQ09OVEVYVF9FUlJPUiwgR1NUX0dMX0NPTlRFWFRfRVJST1JfV1JPTkdfQVBJLAorKyAgICAgICAgICAgICAgICAgIkVHTF9LSFJfaW1hZ2VfYmFzZSBpcyBub3Qgc3VwcG9ydGVkIik7CisrICAgIHJldHVybiBGQUxTRTsKKysgIH0KKysKKysgIGFsbG9jX2NsYXNzID0gR1NUX0dMX0JBU0VfTUVNT1JZX0FMTE9DQVRPUl9DTEFTUyAocGFyZW50X2NsYXNzKTsKKysgIGlmICghYWxsb2NfY2xhc3MtPmNyZWF0ZSAoKEdzdEdMQmFzZU1lbW9yeSAqKSBnbF9tZW0sIGVycm9yKSkKKysgICAgcmV0dXJuIEZBTFNFOworKworKyAgZ2xfbWVtLT5pbWFnZSA9IGNvbnRleHQtPmVnbENyZWF0ZUltYWdlIChjb250ZXh0LT5lZ2xfZGlzcGxheSwKKysgICAgICBjb250ZXh0LT5lZ2xfY29udGV4dCwgRUdMX0dMX1RFWFRVUkVfMkRfS0hSLAorKyAgICAgIChFR0xDbGllbnRCdWZmZXIpIEdTSVpFX1RPX1BPSU5URVIgKGdsX21lbS0+bWVtLnRleF9pZCksIE5VTEwpOworKworKyAgR1NUX1RSQUNFICgiR2VuZXJhdGluZyBFR0xJbWFnZSBoYW5kbGU6JXAgZnJvbSBhIHRleHR1cmU6JXUiLAorKyAgICAgICAgICAgICAgZ2xfbWVtLT5pbWFnZSwgZ2xfbWVtLT5tZW0udGV4X2lkKTsKKysKKysgIGlmIChlZ2xHZXRFcnJvciAoKSAhPSBFR0xfU1VDQ0VTUykgeworKyAgICBnX3NldF9lcnJvciAoZXJyb3IsIEdTVF9HTF9DT05URVhUX0VSUk9SLCBHU1RfR0xfQ09OVEVYVF9FUlJPUl9GQUlMRUQsCisrICAgICAgICAgICAgICAgICAiRmFpbGVkIHRvIGNyZWF0ZSBFR0xJbWFnZSIpOworKyAgICByZXR1cm4gRkFMU0U7CisrICB9CisrCisrICByZXR1cm4gVFJVRTsKKyt9CisrCisrc3RhdGljIEdzdE1lbW9yeSAqCisrX2dsX21lbV9jb3B5IChHc3RHTE1lbW9yeUVHTCAqIHNyYywgZ3NzaXplIG9mZnNldCwgZ3NzaXplIHNpemUpCisreworKyAgR1NUX0NBVF9FUlJPUiAoR1NUX0NBVF9HTF9NRU1PUlksICJHc3RHTE1lbW9yeUVHTCBkb2VzIG5vdCBzdXBwb3J0IGNvcHkiKTsKKysgIHJldHVybiBOVUxMOworK30KKysKKytzdGF0aWMgdm9pZAorK2dzdF9nbF9tZW1vcnlfZWdsX2FsbG9jYXRvcl9jbGFzc19pbml0IChHc3RHTE1lbW9yeUVHTEFsbG9jYXRvckNsYXNzICoga2xhc3MpCisreworKyAgR3N0R0xCYXNlTWVtb3J5QWxsb2NhdG9yQ2xhc3MgKmdsX2Jhc2U7CisrICBHc3RHTE1lbW9yeUFsbG9jYXRvckNsYXNzICpnbF90ZXg7CisrICBHc3RBbGxvY2F0b3JDbGFzcyAqYWxsb2NhdG9yX2NsYXNzOworKworKyAgZ2xfdGV4ID0gKEdzdEdMTWVtb3J5QWxsb2NhdG9yQ2xhc3MgKikga2xhc3M7CisrICBnbF9iYXNlID0gKEdzdEdMQmFzZU1lbW9yeUFsbG9jYXRvckNsYXNzICopIGtsYXNzOworKyAgYWxsb2NhdG9yX2NsYXNzID0gKEdzdEFsbG9jYXRvckNsYXNzICopIGtsYXNzOworKworKyAgZ2xfYmFzZS0+YWxsb2MgPSAoR3N0R0xCYXNlTWVtb3J5QWxsb2NhdG9yQWxsb2NGdW5jdGlvbikgX2dsX21lbV9lZ2xfYWxsb2M7CisrICBnbF9iYXNlLT5jcmVhdGUgPSAoR3N0R0xCYXNlTWVtb3J5QWxsb2NhdG9yQ3JlYXRlRnVuY3Rpb24pIF9nbF9tZW1fY3JlYXRlOworKyAgZ2xfYmFzZS0+ZGVzdHJveSA9IChHc3RHTEJhc2VNZW1vcnlBbGxvY2F0b3JEZXN0cm95RnVuY3Rpb24pIF9nbF9tZW1fZGVzdHJveTsKKysgIGdsX3RleC0+Y29weSA9IChHc3RHTEJhc2VNZW1vcnlBbGxvY2F0b3JDb3B5RnVuY3Rpb24pIF9nbF9tZW1fY29weTsKKysKKysgIGFsbG9jYXRvcl9jbGFzcy0+YWxsb2MgPSBfZ2xfbWVtX2FsbG9jOworK30KKysKKytzdGF0aWMgdm9pZAorK2dzdF9nbF9tZW1vcnlfZWdsX2FsbG9jYXRvcl9pbml0IChHc3RHTE1lbW9yeUVHTEFsbG9jYXRvciAqIGFsbG9jYXRvcikKKyt7CisrICBHc3RBbGxvY2F0b3IgKmFsbG9jID0gR1NUX0FMTE9DQVRPUl9DQVNUIChhbGxvY2F0b3IpOworKworKyAgYWxsb2MtPm1lbV90eXBlID0gR1NUX0dMX01FTU9SWV9FR0xfQUxMT0NBVE9SX05BTUU7CisrCisrICBHU1RfT0JKRUNUX0ZMQUdfU0VUIChhbGxvY2F0b3IsIEdTVF9BTExPQ0FUT1JfRkxBR19DVVNUT01fQUxMT0MpOworK30KKysKKysvKioKKysgKiBnc3RfZ2xfbWVtb3J5X2VnbF9pbml0X29uY2U6CisrICoKKysgKiBJbml0aWFsaXplcyB0aGUgR0wgTWVtb3J5IGFsbG9jYXRvci4gSXQgaXMgc2FmZSB0byBjYWxsIHRoaXMgZnVuY3Rpb24KKysgKiBtdWx0aXBsZSB0aW1lcy4gIFRoaXMgbXVzdCBiZSBjYWxsZWQgYmVmb3JlIGFueSBvdGhlciBHc3RHTE1lbW9yeUVHTCBvcGVyYXRpb24uCisrICovCisrdm9pZAorK2dzdF9nbF9tZW1vcnlfZWdsX2luaXRfb25jZSAodm9pZCkKKyt7CisrICBzdGF0aWMgdm9sYXRpbGUgZ3NpemUgX2luaXQgPSAwOworKworKyAgaWYgKGdfb25jZV9pbml0X2VudGVyICgmX2luaXQpKSB7CisrICAgIGdzdF9nbF9tZW1vcnlfaW5pdF9vbmNlICgpOworKworKyAgICBHU1RfREVCVUdfQ0FURUdPUllfSU5JVCAoR1NUX0NBVF9HTF9NRU1PUlksICJnbG1lbW9yeSIsIDAsCisrICAgICAgICAiT3BlbkdMIFRleHR1cmUgd2l0aCBFR0xJbWFnZSBtZW1vcnkiKTsKKysKKysgICAgX2dsX21lbW9yeV9lZ2xfYWxsb2NhdG9yID0gZ19vYmplY3RfbmV3IChHU1RfVFlQRV9HTF9NRU1PUllfRUdMX0FMTE9DQVRPUiwgTlVMTCk7CisrCisrICAgIGdzdF9hbGxvY2F0b3JfcmVnaXN0ZXIgKEdTVF9HTF9NRU1PUllfRUdMX0FMTE9DQVRPUl9OQU1FLAorKyAgICAgICAgZ3N0X29iamVjdF9yZWYgKF9nbF9tZW1vcnlfZWdsX2FsbG9jYXRvcikpOworKyAgICBnX29uY2VfaW5pdF9sZWF2ZSAoJl9pbml0LCAxKTsKKysgIH0KKyt9CitkaWZmIC0tZ2l0IGEvZ3N0LWxpYnMvZ3N0L2dsL2VnbC9nc3RnbG1lbW9yeWVnbC5oIGIvZ3N0LWxpYnMvZ3N0L2dsL2VnbC9nc3RnbG1lbW9yeWVnbC5oCituZXcgZmlsZSBtb2RlIDEwMDY0NAoraW5kZXggMDAwMDAwMC4uNzI1NmQzMworLS0tIC9kZXYvbnVsbAorKysrIGIvZ3N0LWxpYnMvZ3N0L2dsL2VnbC9nc3RnbG1lbW9yeWVnbC5oCitAQCAtMCwwICsxLDEwOCBAQAorKy8qCisrICogR1N0cmVhbWVyCisrICogQ29weXJpZ2h0IChDKSAyMDEyIENvbGxhYm9yYSBMdGQuCisrICogICBAYXV0aG9yOiBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW4uZHJvZWdlQGNvbGxhYm9yYS5jby51az4KKysgKiBDb3B5cmlnaHQgKEMpIDIwMTQgSnVsaWVuIElzb3JjZSA8anVsaWVuLmlzb3JjZUBnbWFpbC5jb20+CisrICoKKysgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisrICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKysgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKysgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisrICoKKysgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKysgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisrICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisrICoKKysgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworKyAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlCisrICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsCisrICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisrICovCisrCisrI2lmbmRlZiBfR1NUX0dMX01FTU9SWV9FR0xfSF8KKysjZGVmaW5lIF9HU1RfR0xfTUVNT1JZX0VHTF9IXworKworKyNpbmNsdWRlIDxnc3QvZ3N0Lmg+CisrI2luY2x1ZGUgPGdzdC9nc3RhbGxvY2F0b3IuaD4KKysjaW5jbHVkZSA8Z3N0L2dzdG1lbW9yeS5oPgorKyNpbmNsdWRlIDxnc3QvdmlkZW8vdmlkZW8uaD4KKysKKysjaW5jbHVkZSA8Z3N0L2dsL2dsLmg+CisrI2luY2x1ZGUgImdzdGdsY29udGV4dF9lZ2wuaCIKKysKKysjaW5jbHVkZSA8Z3N0L2dsL2dzdGdsbWVtb3J5Lmg+CisrCisrR19CRUdJTl9ERUNMUworKworKyNkZWZpbmUgR1NUX1RZUEVfR0xfTUVNT1JZX0VHTF9BTExPQ0FUT1IgKGdzdF9nbF9tZW1vcnlfZWdsX2FsbG9jYXRvcl9nZXRfdHlwZSgpKQorK0dUeXBlIGdzdF9nbF9tZW1vcnlfZWdsX2FsbG9jYXRvcl9nZXRfdHlwZSh2b2lkKTsKKysKKysjZGVmaW5lIEdTVF9JU19HTF9NRU1PUllfRUdMX0FMTE9DQVRPUihvYmopICAgICAgICAgICAgICAoR19UWVBFX0NIRUNLX0lOU1RBTkNFX1RZUEUgKChvYmopLCBHU1RfVFlQRV9HTF9NRU1PUllfRUdMX0FMTE9DQVRPUikpCisrI2RlZmluZSBHU1RfSVNfR0xfTUVNT1JZX0VHTF9BTExPQ0FUT1JfQ0xBU1Moa2xhc3MpICAgICAgKEdfVFlQRV9DSEVDS19DTEFTU19UWVBFICgoa2xhc3MpLCBHU1RfVFlQRV9HTF9NRU1PUllfRUdMX0FMTE9DQVRPUikpCisrI2RlZmluZSBHU1RfR0xfTUVNT1JZX0VHTF9BTExPQ0FUT1JfR0VUX0NMQVNTKG9iaikgICAgICAgKEdfVFlQRV9JTlNUQU5DRV9HRVRfQ0xBU1MgKChvYmopLCBHU1RfVFlQRV9HTF9NRU1PUllfRUdMX0FMTE9DQVRPUiwgR3N0R0xNZW1vcnlFR0xBbGxvY2F0b3JDbGFzcykpCisrI2RlZmluZSBHU1RfR0xfTUVNT1JZX0VHTF9BTExPQ0FUT1Iob2JqKSAgICAgICAgICAgICAgICAgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9DQVNUICgob2JqKSwgR1NUX1RZUEVfR0xfTUVNT1JZX0VHTF9BTExPQ0FUT1IsIEdzdEdMTWVtb3J5RUdMQWxsb2NhdG9yKSkKKysjZGVmaW5lIEdTVF9HTF9NRU1PUllfRUdMX0FMTE9DQVRPUl9DTEFTUyhrbGFzcykgICAgICAgICAoR19UWVBFX0NIRUNLX0NMQVNTX0NBU1QgKChrbGFzcyksIEdTVF9UWVBFX0dMX01FTU9SWV9FR0xfQUxMT0NBVE9SLCBHc3RHTEFsbG9jYXRvckNsYXNzKSkKKysjZGVmaW5lIEdTVF9HTF9NRU1PUllfRUdMX0FMTE9DQVRPUl9DQVNUKG9iaikgICAgICAgICAgICAoKEdzdEdMTWVtb3J5RUdMQWxsb2NhdG9yICopKG9iaikpCisrCisrdHlwZWRlZiB2b2lkICgqR3N0RUdMSW1hZ2VEZXN0cm95Tm90aWZ5KSAoR3N0R0xDb250ZXh0RUdMICogY29udGV4dCwKKysgICAgZ3BvaW50ZXIgZGF0YSk7CisrCisrdHlwZWRlZiBzdHJ1Y3QgX0dzdEVHTEltYWdlTWVtb3J5IEdzdEVHTEltYWdlTWVtb3J5OworKworKworKy8qKgorKyAqIEdzdEdMTWVtb3J5RUdMOgorKyAqCisrICogUHJpdmF0ZSBpbnN0YW5jZQorKyAqLworK3N0cnVjdCBfR3N0R0xNZW1vcnlFR0wKKyt7CisrICBHc3RHTE1lbW9yeSBtZW07CisrCisrICBFR0xJbWFnZUtIUiBpbWFnZTsKKysgIEdzdFZpZGVvR0xUZXh0dXJlT3JpZW50YXRpb24gb3JpZW50YXRpb247CisrfTsKKysKKysvKioKKysgKiBHU1RfR0xfTUVNT1JZX0VHTF9BTExPQ0FUT1I6CisrICoKKysgKiBUaGUgbmFtZSBvZiB0aGUgR0wgTWVtb3J5IEVHTCBhbGxvY2F0b3IKKysgKi8KKysjZGVmaW5lIEdTVF9HTF9NRU1PUllfRUdMX0FMTE9DQVRPUl9OQU1FICJHTE1lbW9yeUVHTCIKKysKKyt2b2lkICAgICAgICAgIGdzdF9nbF9tZW1vcnlfZWdsX2luaXRfb25jZSAgICAgICAgICAgICAgICh2b2lkKTsKKytnYm9vbGVhbiAgICAgIGdzdF9pc19nbF9tZW1vcnlfZWdsICAgICAgICAgICAgICAgICAgICAgIChHc3RNZW1vcnkgKiBtZW0pOworKworK0VHTEltYWdlS0hSICAgZ3N0X2dsX21lbW9yeV9lZ2xfZ2V0X2ltYWdlICAgICAgICAgICAgICAgKEdzdEdMTWVtb3J5RUdMICogbWVtKTsKKytFR0xEaXNwbGF5ICAgIGdzdF9nbF9tZW1vcnlfZWdsX2dldF9kaXNwbGF5ICAgICAgICAgICAgIChHc3RHTE1lbW9yeUVHTCAqIG1lbSk7CisrCisrR3N0VmlkZW9HTFRleHR1cmVPcmllbnRhdGlvbiBnc3RfZ2xfbWVtb3J5X2VnbF9nZXRfb3JpZW50YXRpb24KKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChHc3RHTE1lbW9yeUVHTCAqIG1lbSk7CisrCisrdm9pZCAgICAgICAgICBnc3RfZ2xfbWVtb3J5X2VnbF9zZXRfb3JpZW50YXRpb24gICAgICAgICAoR3N0R0xNZW1vcnlFR0wgKiBtZW0sCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHc3RWaWRlb0dMVGV4dHVyZU9yaWVudGF0aW9uIG9yaWVudGF0aW9uKTsKKysKKysvKioKKysgKiBHc3RHTEFsbG9jYXRvcgorKyAqCisrICogT3BhcXVlICNHc3RHTEFsbG9jYXRvciBzdHJ1Y3QKKysgKi8KKytzdHJ1Y3QgX0dzdEdMTWVtb3J5RUdMQWxsb2NhdG9yCisreworKyAgR3N0R0xNZW1vcnlBbGxvY2F0b3IgcGFyZW50OworK307CisrCisrLyoqCisrICogR3N0R0xBbGxvY2F0b3JDbGFzczoKKysgKgorKyAqIFRoZSAjR3N0R0xBbGxvY2F0b3JDbGFzcyBvbmx5IGNvbnRhaW5zIHByaXZhdGUgZGF0YQorKyAqLworK3N0cnVjdCBfR3N0R0xNZW1vcnlFR0xBbGxvY2F0b3JDbGFzcworK3sKKysgIEdzdEdMTWVtb3J5QWxsb2NhdG9yQ2xhc3MgcGFyZW50X2NsYXNzOworK307CisrCisrR19FTkRfREVDTFMKKysKKysjZW5kaWYgLyogX0dTVF9HTF9NRU1PUllfRUdMX0hfICovCitkaWZmIC0tZ2l0IGEvZ3N0LWxpYnMvZ3N0L2dsL2dzdGdsX2Z3ZC5oIGIvZ3N0LWxpYnMvZ3N0L2dsL2dzdGdsX2Z3ZC5oCitpbmRleCBmYjY0ZmY2Li43M2UxN2JkIDEwMDY0NAorLS0tIGEvZ3N0LWxpYnMvZ3N0L2dsL2dzdGdsX2Z3ZC5oCisrKysgYi9nc3QtbGlicy9nc3QvZ2wvZ3N0Z2xfZndkLmgKK0BAIC01NSw2ICs1NSwxMCBAQCB0eXBlZGVmIHN0cnVjdCBfR3N0R0xNZW1vcnlQQk8gR3N0R0xNZW1vcnlQQk87CisgdHlwZWRlZiBzdHJ1Y3QgX0dzdEdMTWVtb3J5UEJPQWxsb2NhdG9yIEdzdEdMTWVtb3J5UEJPQWxsb2NhdG9yOworIHR5cGVkZWYgc3RydWN0IF9Hc3RHTE1lbW9yeVBCT0FsbG9jYXRvckNsYXNzIEdzdEdMTWVtb3J5UEJPQWxsb2NhdG9yQ2xhc3M7CisgCisrdHlwZWRlZiBzdHJ1Y3QgX0dzdEdMTWVtb3J5RUdMIEdzdEdMTWVtb3J5RUdMOworK3R5cGVkZWYgc3RydWN0IF9Hc3RHTE1lbW9yeUVHTEFsbG9jYXRvciBHc3RHTE1lbW9yeUVHTEFsbG9jYXRvcjsKKyt0eXBlZGVmIHN0cnVjdCBfR3N0R0xNZW1vcnlFR0xBbGxvY2F0b3JDbGFzcyBHc3RHTE1lbW9yeUVHTEFsbG9jYXRvckNsYXNzOworKworIHR5cGVkZWYgc3RydWN0IF9Hc3RHTFNMU3RhZ2UgICAgICAgIEdzdEdMU0xTdGFnZTsKKyB0eXBlZGVmIHN0cnVjdCBfR3N0R0xTTFN0YWdlUHJpdmF0ZSBHc3RHTFNMU3RhZ2VQcml2YXRlOworIHR5cGVkZWYgc3RydWN0IF9Hc3RHTFNMU3RhZ2VDbGFzcyAgIEdzdEdMU0xTdGFnZUNsYXNzOworZGlmZiAtLWdpdCBhL2dzdC1saWJzL2dzdC9nbC9nc3RnbGRpc3BsYXkuYyBiL2dzdC1saWJzL2dzdC9nbC9nc3RnbGRpc3BsYXkuYworaW5kZXggNjBkZWM2YS4uMzQ3NzBkMCAxMDA2NDQKKy0tLSBhL2dzdC1saWJzL2dzdC9nbC9nc3RnbGRpc3BsYXkuYworKysrIGIvZ3N0LWxpYnMvZ3N0L2dsL2dzdGdsZGlzcGxheS5jCitAQCAtNjgsNiArNjgsNyBAQAorICNpZiBHU1RfR0xfSEFWRV9QTEFURk9STV9FR0wKKyAjaW5jbHVkZSA8Z3N0L2dsL2VnbC9nc3RnbGRpc3BsYXlfZWdsLmg+CisgI2luY2x1ZGUgPGdzdC9nbC9lZ2wvZ3N0ZWdsaW1hZ2VtZW1vcnkuaD4KKysjaW5jbHVkZSA8Z3N0L2dsL2VnbC9nc3RnbG1lbW9yeWVnbC5oPgorICNlbmRpZgorIAorIEdTVF9ERUJVR19DQVRFR09SWV9TVEFUSUMgKGdzdF9jb250ZXh0KTsKK0BAIC0xNDQsNiArMTQ1LDcgQEAgZ3N0X2dsX2Rpc3BsYXlfaW5pdCAoR3N0R0xEaXNwbGF5ICogZGlzcGxheSkKKyAKKyAjaWYgR1NUX0dMX0hBVkVfUExBVEZPUk1fRUdMCisgICBnc3RfZWdsX2ltYWdlX21lbW9yeV9pbml0ICgpOworKyAgZ3N0X2dsX21lbW9yeV9lZ2xfaW5pdF9vbmNlICgpOworICNlbmRpZgorIH0KKyAKK2RpZmYgLS1naXQgYS9nc3QtbGlicy9nc3QvZ2wvZ3N0Z2x1cGxvYWQuYyBiL2dzdC1saWJzL2dzdC9nbC9nc3RnbHVwbG9hZC5jCitpbmRleCAxNmVkNWVhLi43M2E5MDI5IDEwMDY0NAorLS0tIGEvZ3N0LWxpYnMvZ3N0L2dsL2dzdGdsdXBsb2FkLmMKKysrKyBiL2dzdC1saWJzL2dzdC9nbC9nc3RnbHVwbG9hZC5jCitAQCAtMjksNiArMjksNyBAQAorIAorICNpZiBHU1RfR0xfSEFWRV9QTEFURk9STV9FR0wKKyAjaW5jbHVkZSAiZWdsL2dzdGVnbGltYWdlbWVtb3J5LmgiCisrI2luY2x1ZGUgImVnbC9nc3RnbG1lbW9yeWVnbC5oIgorICNlbmRpZgorIAorICNpZiBHU1RfR0xfSEFWRV9ETUFCVUYKK0BAIC0zMDEsNiArMzAyLDEzIEBAIF9nbF9tZW1vcnlfdXBsb2FkX3Byb3Bvc2VfYWxsb2NhdGlvbiAoZ3BvaW50ZXIgaW1wbCwgR3N0UXVlcnkgKiBkZWNpZGVfcXVlcnksCisgICAgICAgICAgICAgY29udGV4dCkpOworICAgICBnc3RfcXVlcnlfYWRkX2FsbG9jYXRpb25fcGFyYW0gKHF1ZXJ5LCBhbGxvY2F0b3IsICZwYXJhbXMpOworICAgICBnc3Rfb2JqZWN0X3VucmVmIChhbGxvY2F0b3IpOworKworKyNpZiBHU1RfR0xfSEFWRV9QTEFURk9STV9FR0wKKysgICAgYWxsb2NhdG9yID0KKysgICAgICAgIEdTVF9BTExPQ0FUT1IgKGdzdF9hbGxvY2F0b3JfZmluZCAoR1NUX0dMX01FTU9SWV9FR0xfQUxMT0NBVE9SX05BTUUpKTsKKysgICAgZ3N0X3F1ZXJ5X2FkZF9hbGxvY2F0aW9uX3BhcmFtIChxdWVyeSwgYWxsb2NhdG9yLCAmcGFyYW1zKTsKKysgICAgZ3N0X29iamVjdF91bnJlZiAoYWxsb2NhdG9yKTsKKysjZW5kaWYKKyAgIH0KKyAKKyAgIG5fcG9vbHMgPSBnc3RfcXVlcnlfZ2V0X25fYWxsb2NhdGlvbl9wb29scyAocXVlcnkpOworLS0gCisyLjUuMAorCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvZ3N0cmVhbWVyL2dzdHJlYW1lcjEuMC1wbHVnaW5zLWJhZC8wMDA5LWdsaW1hZ2VzaW5rLURvd25yYW5rLXRvLW1hcmdpbmFsLnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2dzdHJlYW1lci9nc3RyZWFtZXIxLjAtcGx1Z2lucy1iYWQvMDAwOS1nbGltYWdlc2luay1Eb3ducmFuay10by1tYXJnaW5hbC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jODFmYjBmCi0tLSAvZGV2L251bGwKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2dzdHJlYW1lci9nc3RyZWFtZXIxLjAtcGx1Z2lucy1iYWQvMDAwOS1nbGltYWdlc2luay1Eb3ducmFuay10by1tYXJnaW5hbC5wYXRjaApAQCAtMCwwICsxLDMyIEBACitGcm9tIGM2YjM3YTgwODA2ZjkxMjhkZTQ3ZjFjY2MzZjIzNTRmOGQ0MzZiYjYgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBBbGV4YW5kZXIgS2FuYXZpbiA8YWxleC5rYW5hdmluQGdtYWlsLmNvbT4KK0RhdGU6IFRodSwgMjQgU2VwIDIwMTUgMTk6NDc6MzIgKzAzMDAKK1N1YmplY3Q6IFtQQVRDSF0gZ2xpbWFnZXNpbms6IERvd25yYW5rIHRvIG1hcmdpbmFsCisKK09uIGRlc2t0b3AsIHdoZXJlIHRoZXJlIGlzIGdvb2QgT3BlbkdMLCB4dmltYWdlc2luayB3aWxsIGNvbWUgdXAgZmlyc3QsCitvbiBvdGhlciBwbGF0Zm9ybXMsIE9wZW5HTCBjYW4ndCBiZSB0cnVzdGVkIGJlY2F1c2UgaXQncyBlaXRoZXIgc29mdHdhcmUgKGxpa2UKK2luIGEgVk0pIG9yIGJyb2tlbiAobGlrZSBvbiBlbWJlZGRlZCkuLCBzbyBsZXQgeGltYWdlc2luayBjb21lIGFib3ZlLgorCitVcHN0cmVhbS1TdGF0dXM6IFN1Ym1pdHRlZCBbaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTc1MTY4NF0KKworU2lnbmVkLW9mZi1ieTogQWxleGFuZGVyIEthbmF2aW4gPGFsZXgua2FuYXZpbkBnbWFpbC5jb20+CistLS0KKyBleHQvZ2wvZ3N0b3BlbmdsLmMgfCAyICstCisgMSBmaWxlIGNoYW5nZWQsIDEgaW5zZXJ0aW9uKCspLCAxIGRlbGV0aW9uKC0pCisKK2RpZmYgLS1naXQgYS9leHQvZ2wvZ3N0b3BlbmdsLmMgYi9leHQvZ2wvZ3N0b3BlbmdsLmMKK2luZGV4IGE0YjI1NDAuLjBjY2FhY2QgMTAwNjQ0CistLS0gYS9leHQvZ2wvZ3N0b3BlbmdsLmMKKysrKyBiL2V4dC9nbC9nc3RvcGVuZ2wuYworQEAgLTExOCw3ICsxMTgsNyBAQCBwbHVnaW5faW5pdCAoR3N0UGx1Z2luICogcGx1Z2luKQorICNlbmRpZgorIAorICAgaWYgKCFnc3RfZWxlbWVudF9yZWdpc3RlciAocGx1Z2luLCAiZ2xpbWFnZXNpbmsiLAorLSAgICAgICAgICBHU1RfUkFOS19TRUNPTkRBUlksIGdzdF9nbF9pbWFnZV9zaW5rX2Jpbl9nZXRfdHlwZSAoKSkpIHsKKysgICAgICAgICAgR1NUX1JBTktfTUFSR0lOQUwsIGdzdF9nbF9pbWFnZV9zaW5rX2Jpbl9nZXRfdHlwZSAoKSkpIHsKKyAgICAgcmV0dXJuIEZBTFNFOworICAgfQorIAorLS0gCisyLjEuNAorCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvZ3N0cmVhbWVyL2dzdHJlYW1lcjEuMC1wbHVnaW5zLWJhZF8xLjYuMy5iYiBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9nc3RyZWFtZXIvZ3N0cmVhbWVyMS4wLXBsdWdpbnMtYmFkXzEuNi4zLmJiCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4ZWI0N2MyLi4wMDAwMDAwCi0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9nc3RyZWFtZXIvZ3N0cmVhbWVyMS4wLXBsdWdpbnMtYmFkXzEuNi4zLmJiCisrKyAvZGV2L251bGwKQEAgLTEsMjggKzAsMCBAQAotaW5jbHVkZSBnc3RyZWFtZXIxLjAtcGx1Z2lucy1iYWQuaW5jCi0KLUxJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PTczYTU4NTVhODExOWRlYjAxN2Y1ZjEzY2YzMjcwOTVkIFwKLSAgICAgICAgICAgICAgICAgICAgZmlsZTovL0NPUFlJTkcuTElCO21kNT0yMTY4MmU0ZThmZWE1MjQxM2ZkMjZjNjBhY2I5MDdlNSBcCi0gICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9nc3QvdHRhL2NyYzMyLmg7YmVnaW5saW5lPTEyO2VuZGxpbmU9Mjk7bWQ1PTI3ZGIyNjljNTc1ZDFlNTMxN2ZmZmNhMmQzM2IzYjUwIFwKLSAgICAgICAgICAgICAgICAgICAgZmlsZTovL2dzdC90dGEvZmlsdGVycy5oO2JlZ2lubGluZT0xMjtlbmRsaW5lPTI5O21kNT04YTA4MjcwNjU2ZjJmOGFkN2JiMzY1NWI4MzEzOGU1YSIKLQotIyBOb3RlOiBUaGUgbXBnMTIzIHBsdWdpbiB3YXMgbW92ZWQgdG8gZ3N0LXBsdWdpbnMtdWdseSBwcmlvciB0byB0aGUgMS43LjIKLSMgcmVsZWFzZSwgc28gdGhpcyBsaW5lIHNob3VsZCBiZSByZW1vdmVkIGR1cmluZyB0aGUgdXBkYXRlIHRvIDEuOC54Ci0jIGh0dHBzOi8vY2dpdC5mcmVlZGVza3RvcC5vcmcvZ3N0cmVhbWVyL2dzdC1wbHVnaW5zLWJhZC9jb21taXQvP2lkPTA4ZDhhZWZjZGFhZjg5ZWNiNmRkNTNlYzFlNGY5NWNkNDJkMDE2NjQKLVBBQ0tBR0VDT05GSUdbbXBnMTIzXSA9ICItLWVuYWJsZS1tcGcxMjMsLS1kaXNhYmxlLW1wZzEyMyxtcGcxMjMiCi0KLSMgTm90ZTogVGhlIGdzZXR0aW5ncyBwbHVnLWluIHdhcyBkcm9wcGVkIHByaW9yIHRvIHRoZSAxLjcuMiByZWxlYXNlLAotIyBzbyB0aGlzIGxpbmUgc2hvdWxkIGJlIHJlbW92ZWQgZHVyaW5nIHRoZSB1cGRhdGUgdG8gMS44LngKLSMgaHR0cHM6Ly9jZ2l0LmZyZWVkZXNrdG9wLm9yZy9nc3RyZWFtZXIvZ3N0LXBsdWdpbnMtYmFkL2NvbW1pdC8/aWQ9OTE0MjkxODA4YWQxMDYyMWQ2YTc0MDMxZjNkNDZkNDVlZWY1YTNhMwotRVhUUkFfT0VDT05GICs9ICItLWRpc2FibGUtZ3NldHRpbmdzIgotCi1TUkNfVVJJID0gIiBcCi0gICAgaHR0cDovL2dzdHJlYW1lci5mcmVlZGVza3RvcC5vcmcvc3JjL2dzdC1wbHVnaW5zLWJhZC9nc3QtcGx1Z2lucy1iYWQtJHtQVn0udGFyLnh6IFwKLSAgICBmaWxlOi8vY29uZmlndXJlLWFsbG93LXRvLWRpc2FibGUtbGlic3NoMi5wYXRjaCBcCi0gICAgZmlsZTovLzAwMDEtZ2xpbWFnZXNpbmstRG93bnJhbmstdG8tbWFyZ2luYWwucGF0Y2ggXAotICAgIGZpbGU6Ly8wMDAyLWdscGx1Z2luLWdsd2luZG93LWZpeC1tZW1vcnktbGVhay1vZi1uYXZpZ2F0aW9uLXRocmUucGF0Y2ggXAotIgotCi1TUkNfVVJJW21kNXN1bV0gPSAiNDg1N2FkY2FmZTQxZTRiOWI4ODA1Y2Y4ODMwM2JkNTUiCi1TUkNfVVJJW3NoYTI1NnN1bV0gPSAiOTcxYjI5MTAxZDZhOWM1ZTNmZTk0ZDk5ZDk3N2EyMjdmNThmMGIyZDI5YjZjYTJjN2YyOTIwNTI1NDJiM2E2MSIKLQotUyA9ICIke1dPUktESVJ9L2dzdC1wbHVnaW5zLWJhZC0ke1BWfSIKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9nc3RyZWFtZXIvZ3N0cmVhbWVyMS4wLXBsdWdpbnMtYmFkXzEuOC4zLmJiIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2dzdHJlYW1lci9nc3RyZWFtZXIxLjAtcGx1Z2lucy1iYWRfMS44LjMuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTA4ZjRkYgotLS0gL2Rldi9udWxsCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9nc3RyZWFtZXIvZ3N0cmVhbWVyMS4wLXBsdWdpbnMtYmFkXzEuOC4zLmJiCkBAIC0wLDAgKzEsMjYgQEAKK2luY2x1ZGUgZ3N0cmVhbWVyMS4wLXBsdWdpbnMtYmFkLmluYworCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT03M2E1ODU1YTgxMTlkZWIwMTdmNWYxM2NmMzI3MDk1ZCBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9DT1BZSU5HLkxJQjttZDU9MjE2ODJlNGU4ZmVhNTI0MTNmZDI2YzYwYWNiOTA3ZTUgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vZ3N0L3R0YS9jcmMzMi5oO2JlZ2lubGluZT0xMjtlbmRsaW5lPTI5O21kNT0yN2RiMjY5YzU3NWQxZTUzMTdmZmZjYTJkMzNiM2I1MCBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9nc3QvdHRhL2ZpbHRlcnMuaDtiZWdpbmxpbmU9MTI7ZW5kbGluZT0yOTttZDU9OGEwODI3MDY1NmYyZjhhZDdiYjM2NTViODMxMzhlNWEiCisKK1NSQ19VUkkgPSAiIFwKKyAgICBodHRwOi8vZ3N0cmVhbWVyLmZyZWVkZXNrdG9wLm9yZy9zcmMvZ3N0LXBsdWdpbnMtYmFkL2dzdC1wbHVnaW5zLWJhZC0ke1BWfS50YXIueHogXAorICAgIGZpbGU6Ly9jb25maWd1cmUtYWxsb3ctdG8tZGlzYWJsZS1saWJzc2gyLnBhdGNoIFwKKyAgICBmaWxlOi8vZml4LW1heWJlLXVuaW5pdGlhbGl6ZWQtd2FybmluZ3Mtd2hlbi1jb21waWxpbmctd2l0aC1Pcy5wYXRjaCBcCisgICAgZmlsZTovL2F2b2lkLWluY2x1ZGluZy1zeXMtcG9sbC5oLWRpcmVjdGx5LnBhdGNoIFwKKyAgICBmaWxlOi8vZW5zdXJlLXZhbGlkLXNlbnRpbmVscy1mb3ItZ3N0X3N0cnVjdHVyZV9nZXQtZXRjLnBhdGNoIFwKKyAgICBmaWxlOi8vMDAwMS1nc3RyZWFtZXItZ2wucGMuaW4tZG9uLXQtYXBwZW5kLUdMX0NGTEFHUy10by1DRkxBR1MucGF0Y2ggXAorICAgIGZpbGU6Ly8wMDAyLWdscGx1Z2luLWVuYWJsZS1nbGRlaW50ZXJsYWNlLW9uLU9wZW5HTC1FUy5wYXRjaCBcCisgICAgZmlsZTovLzAwMDMtZ2xjb2xvcmNvbnZlcnQtaW1wbGVtZW50LW11bHRpcGxlLXJlbmRlci10YXJnZXRzLWZvci5wYXRjaCBcCisgICAgZmlsZTovLzAwMDQtZ2xjb2xvcmNvbnZlcnQtZG9uLXQtdXNlLXRoZS1wcmVkZWZpbmVkLXZhcmlhYmxlLW5hbS5wYXRjaCBcCisgICAgZmlsZTovLzAwMDUtZ2xzaGFkZXItYWRkLWdsQmluZEZyYWdEYXRhTG9jYXRpb24ucGF0Y2ggXAorICAgIGZpbGU6Ly8wMDA2LWdsY29sb3Jjb252ZXJ0LUdMRVMzLWRlcHJlY2F0ZXMtdGV4dHVyZTJELWFuZC1pdC1kb2UucGF0Y2ggXAorICAgIGZpbGU6Ly8wMDA4LWdsLWltcGxlbWVudC1Hc3RHTE1lbW9yeUVHTC5wYXRjaCBcCisgICAgZmlsZTovLzAwMDktZ2xpbWFnZXNpbmstRG93bnJhbmstdG8tbWFyZ2luYWwucGF0Y2ggXAorIgorU1JDX1VSSVttZDVzdW1dID0gIjk1NTI4MWE0M2U5OGM1NDY0NTYzZmEwNDllMGEwOTExIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjc4OTlmY2IxOGU2YTFhZjI4ODhiMTljOTAyMTNhZjAxOGE1N2Q3NDFjNmU3MmVjNTZiMTMzYmM3M2VjODUwOWIiCisKK1MgPSAiJHtXT1JLRElSfS9nc3QtcGx1Z2lucy1iYWQtJHtQVn0iCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvZ3N0cmVhbWVyL2dzdHJlYW1lcjEuMC1wbHVnaW5zLWJhZF9naXQuYmIgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvZ3N0cmVhbWVyL2dzdHJlYW1lcjEuMC1wbHVnaW5zLWJhZF9naXQuYmIKaW5kZXggZWY2NTgxYi4uMTM3MDM4MCAxMDA2NDQKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2dzdHJlYW1lci9nc3RyZWFtZXIxLjAtcGx1Z2lucy1iYWRfZ2l0LmJiCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9nc3RyZWFtZXIvZ3N0cmVhbWVyMS4wLXBsdWdpbnMtYmFkX2dpdC5iYgpAQCAtOCw3ICs4LDcgQEAKICAgICAgICAgICAgICAgICAgICAgZmlsZTovL2dzdC90dGEvZmlsdGVycy5oO2JlZ2lubGluZT0xMjtlbmRsaW5lPTI5O21kNT04YTA4MjcwNjU2ZjJmOGFkN2JiMzY1NWI4MzEzOGU1YSIKIAogU1JDX1VSSSA9ICIgXAotICAgIGdpdDovL2Fub25naXQuZnJlZWRlc2t0b3Aub3JnL2dzdHJlYW1lci9nc3QtcGx1Z2lucy1iYWQ7bmFtZT1iYXNlIFwKKyAgICBnaXQ6Ly9hbm9uZ2l0LmZyZWVkZXNrdG9wLm9yZy9nc3RyZWFtZXIvZ3N0LXBsdWdpbnMtYmFkO2JyYW5jaD0xLjg7bmFtZT1iYXNlIFwKICAgICBnaXQ6Ly9hbm9uZ2l0LmZyZWVkZXNrdG9wLm9yZy9nc3RyZWFtZXIvY29tbW9uO2Rlc3RzdWZmaXg9Z2l0L2NvbW1vbjtuYW1lPWNvbW1vbiBcCiAgICAgZmlsZTovL2NvbmZpZ3VyZS1hbGxvdy10by1kaXNhYmxlLWxpYnNzaDIucGF0Y2ggXAogICAgIGZpbGU6Ly9maXgtbWF5YmUtdW5pbml0aWFsaXplZC13YXJuaW5ncy13aGVuLWNvbXBpbGluZy13aXRoLU9zLnBhdGNoIFwKQEAgLTE3LDM2ICsxNywxNiBAQAogICAgIGZpbGU6Ly8wMDAxLWdzdHJlYW1lci1nbC5wYy5pbi1kb24tdC1hcHBlbmQtR0xfQ0ZMQUdTLXRvLUNGTEFHUy5wYXRjaCBcCiAiCiAKLVBWID0gIjEuNy4yK2dpdCR7U1JDUFZ9IgorUFYgPSAiMS44LjIrZ2l0JHtTUkNQVn0iCiAKIFVQU1RSRUFNX0NIRUNLX0dJVFRBR1JFR0VYID0gIig/UDxwdmVyPihcZCsoXC5cZCspKykpIgogCi1TUkNSRVZfYmFzZSA9ICI1MGFlNDZjYzBmODgyN2JmOTY2OTIwZDljMjIxZTVjZjg2ZTgxMWJhIgotU1JDUkVWX2NvbW1vbiA9ICJhMjUzOTc0NDg5NDIwNzkwMDI2MjJiZTIzMWU5ZWM0OWI5ODU3NDVhIgorU1JDUkVWX2Jhc2UgPSAiNWU3M2I1YTQ4NDNkOTY3NTI0NmY0ZWZlYzE1ODYyNDQ3NWVkOTU4NiIKK1NSQ1JFVl9jb21tb24gPSAiZjM2M2IzMjA1NjU4YTM4ZTg0ZmE3N2YxOWRlZTIxOGNkNDQ0NTI3NSIKIFNSQ1JFVl9GT1JNQVQgPSAiYmFzZSIKIAogUyA9ICIke1dPUktESVJ9L2dpdCIKIAotIyBvdmVyLXJpZGUgdGhlIGRlZmF1bHQgaGxzIFBBQ0tBR0VDT05GSUcgaW4gZ3N0cmVhbWVyMS4wLXBsdWdpbnMtYmFkLmluYyB0bwotIyBwYXNzIGFuIGFkZGl0aW9uYWwgLS13aXRoLWhscy1jcnlwdG89WFhYIG9wdGlvbiAobmV3IGluIDEuNy54KSBhbmQgc3dpdGNoIEhMUwotIyBBRVMgZGVjcnlwdGlvbiBmcm9tIG5ldHRsZSB0byBvcGVuc3NsIChpZSBhIHNoYXJlZCBkZXBlbmRlbmN5IHdpdGggZHRscykuCi0jIFRoaXMgc2hvdWxkIG1vdmUgYmFjayB0byB0aGUgY29tbW9uIC5pbmMgb25jZSB0aGUgbWFpbiByZWNpcGUgdXBkYXRlcyB0byAxLjgueAotUEFDS0FHRUNPTkZJR1tobHNdID0gIi0tZW5hYmxlLWhscyAtLXdpdGgtaGxzLWNyeXB0bz1vcGVuc3NsLC0tZGlzYWJsZS1obHMsb3BlbnNzbCIKLQotIyBUaGUgdGlueWFsc2EgcGx1Z2luIHdhcyBhZGRlZCBwcmlvciB0byB0aGUgMS43LjIgcmVsZWFzZQotIyBodHRwczovL2NnaXQuZnJlZWRlc2t0b3Aub3JnL2dzdHJlYW1lci9nc3QtcGx1Z2lucy1iYWQvY29tbWl0Lz9pZD1jOGJkNzRmYTlhODEzOThmNTdkOTc2YzQ3OGQyMDQzZjMwMTg4Njg0Ci1QQUNLQUdFQ09ORklHW3RpbnlhbHNhXSA9ICItLWVuYWJsZS10aW55YWxzYSwtLWRpc2FibGUtdGlueWFsc2EsdGlueWFsc2EiCi0KLSMgVGhlIHZ1bGthbiBiYXNlZCB2aWRlbyBzaW5rIHBsdWdpbiB3YXMgYWRkZWQgcHJpb3IgdG8gdGhlIDEuNy4yIHJlbGVhc2UKLSMgaHR0cHM6Ly9jZ2l0LmZyZWVkZXNrdG9wLm9yZy9nc3RyZWFtZXIvZ3N0LXBsdWdpbnMtYmFkL2NvbW1pdC8/aWQ9NWRlNmRkOWY0MDYyOTU2MmFjZjkwZTM1ZTFmYTU4NDY0ZDY2NjE3ZAotUEFDS0FHRUNPTkZJR1t2dWxrYW5dID0gIi0tZW5hYmxlLXZ1bGthbiwtLWRpc2FibGUtdnVsa2FuLGxpYnhjYiIKLQotIyBUaGUgZGVwZW5kZW5jeS1sZXNzIG5ldHNpbSBwbHVnaW4gd2FzIGFkZGVkIHByaW9yIHRvIHRoZSAxLjcuMiByZWxlYXNlCi0jIGh0dHBzOi8vY2dpdC5mcmVlZGVza3RvcC5vcmcvZ3N0cmVhbWVyL2dzdC1wbHVnaW5zLWJhZC9jb21taXQvP2lkPWUzZjllODU0ZjA4ZTgyYmZhYjExMTgyYzVhMmFhNmY5YTBjNzNjZDUKLUVYVFJBX09FQ09ORiArPSAiIFwKLSAgICAtLWVuYWJsZS1uZXRzaW0gXAotIgotCiBkb19jb25maWd1cmVfcHJlcGVuZCgpIHsKIAkke1N9L2F1dG9nZW4uc2ggLS1ub2NvbmZpZ3VyZQogfQpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2dzdHJlYW1lci9nc3RyZWFtZXIxLjAtcGx1Z2lucy1iYXNlLmluYyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9nc3RyZWFtZXIvZ3N0cmVhbWVyMS4wLXBsdWdpbnMtYmFzZS5pbmMKaW5kZXggNzM4MTQ1OC4uYTA0ZjE1NSAxMDA2NDQKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2dzdHJlYW1lci9nc3RyZWFtZXIxLjAtcGx1Z2lucy1iYXNlLmluYworKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvZ3N0cmVhbWVyL2dzdHJlYW1lcjEuMC1wbHVnaW5zLWJhc2UuaW5jCkBAIC0zMSw2ICszMSw3IEBACiBQQUNLQUdFQ09ORklHW2dpby11bml4LTIuMF0gPSAiLS1lbmFibGUtZ2lvX3VuaXhfMl8wLC0tZGlzYWJsZS1naW9fdW5peF8yXzAsZ2xpYi0yLjAiCiBQQUNLQUdFQ09ORklHW2l2b3JiaXNdICAgICAgPSAiLS1lbmFibGUtaXZvcmJpcywtLWRpc2FibGUtaXZvcmJpcyx0cmVtb3IiCiBQQUNLQUdFQ09ORklHW29nZ10gICAgICAgICAgPSAiLS1lbmFibGUtb2dnLC0tZGlzYWJsZS1vZ2csbGlib2dnIgorUEFDS0FHRUNPTkZJR1tvcHVzXSAgICAgICAgID0gIi0tZW5hYmxlLW9wdXMsLS1kaXNhYmxlLW9wdXMsbGlib3B1cyIKIFBBQ0tBR0VDT05GSUdbcGFuZ29dICAgICAgICA9ICItLWVuYWJsZS1wYW5nbywtLWRpc2FibGUtcGFuZ28scGFuZ28iCiBQQUNLQUdFQ09ORklHW3RoZW9yYV0gICAgICAgPSAiLS1lbmFibGUtdGhlb3JhLC0tZGlzYWJsZS10aGVvcmEsbGlidGhlb3JhIgogUEFDS0FHRUNPTkZJR1t2aXN1YWxdICAgICAgID0gIi0tZW5hYmxlLWxpYnZpc3VhbCwtLWRpc2FibGUtbGlidmlzdWFsLGxpYnZpc3VhbCIKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9nc3RyZWFtZXIvZ3N0cmVhbWVyMS4wLXBsdWdpbnMtYmFzZS8wMDAxLU1ha2VmaWxlLmFtLWRvbi10LWhhcmRjb2RlLWxpYnRvb2wtbmFtZS13aGVuLXJ1bm5pbmcucGF0Y2ggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvZ3N0cmVhbWVyL2dzdHJlYW1lcjEuMC1wbHVnaW5zLWJhc2UvMDAwMS1NYWtlZmlsZS5hbS1kb24tdC1oYXJkY29kZS1saWJ0b29sLW5hbWUtd2hlbi1ydW5uaW5nLnBhdGNoCmluZGV4IDc4MWU0ZDguLjA5NGJkYWMgMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9nc3RyZWFtZXIvZ3N0cmVhbWVyMS4wLXBsdWdpbnMtYmFzZS8wMDAxLU1ha2VmaWxlLmFtLWRvbi10LWhhcmRjb2RlLWxpYnRvb2wtbmFtZS13aGVuLXJ1bm5pbmcucGF0Y2gKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2dzdHJlYW1lci9nc3RyZWFtZXIxLjAtcGx1Z2lucy1iYXNlLzAwMDEtTWFrZWZpbGUuYW0tZG9uLXQtaGFyZGNvZGUtbGlidG9vbC1uYW1lLXdoZW4tcnVubmluZy5wYXRjaApAQCAtMjQsNyArMjQsNyBAQAogaW5kZXggOTM2MWJmOS4uYmM3ZjUzYSAxMDA2NDQKIC0tLSBhL2dzdC1saWJzL2dzdC9hbGxvY2F0b3JzL01ha2VmaWxlLmFtCiArKysgYi9nc3QtbGlicy9nc3QvYWxsb2NhdG9ycy9NYWtlZmlsZS5hbQotQEAgLTM3LDcgKzM3LDcgQEAgR3N0QWxsb2NhdG9ycy1AR1NUX0FQSV9WRVJTSU9OQC5naXI6ICQoSU5UUk9TUEVDVElPTl9TQ0FOTkVSKSBsaWJnc3RhbGxvY2F0b3JzLUAKK0BAIC0zOCw3ICszOCw3IEBAIEdzdEFsbG9jYXRvcnMtQEdTVF9BUElfVkVSU0lPTkAuZ2lyOiAkKElOVFJPU1BFQ1RJT05fU0NBTk5FUikgbGliZ3N0YWxsb2NhdG9ycy1ACiAgCQktLWFkZC1pbmNsdWRlLXBhdGg9YFBLR19DT05GSUdfUEFUSD0iJChHU1RfUEtHX0NPTkZJR19QQVRIKSIgJChQS0dfQ09ORklHKSAtLXZhcmlhYmxlPWdpcmRpciBnc3RyZWFtZXItQEdTVF9BUElfVkVSU0lPTkBgIFwKICAJCS0tbGlicmFyeT1saWJnc3RhbGxvY2F0b3JzLUBHU1RfQVBJX1ZFUlNJT05ALmxhIFwKICAJCS0taW5jbHVkZT1Hc3QtQEdTVF9BUElfVkVSU0lPTkAgXApAQCAtMzcsNyArMzcsNyBAQAogaW5kZXggNmQ2ZGU4ZC4uZGNjMmZlMCAxMDA2NDQKIC0tLSBhL2dzdC1saWJzL2dzdC9hcHAvTWFrZWZpbGUuYW0KICsrKyBiL2dzdC1saWJzL2dzdC9hcHAvTWFrZWZpbGUuYW0KLUBAIC01Miw3ICs1Miw3IEBAIEdzdEFwcC1AR1NUX0FQSV9WRVJTSU9OQC5naXI6ICQoSU5UUk9TUEVDVElPTl9TQ0FOTkVSKSBsaWJnc3RhcHAtQEdTVF9BUElfVkVSU0lPCitAQCAtNTMsNyArNTMsNyBAQCBHc3RBcHAtQEdTVF9BUElfVkVSU0lPTkAuZ2lyOiAkKElOVFJPU1BFQ1RJT05fU0NBTk5FUikgbGliZ3N0YXBwLUBHU1RfQVBJX1ZFUlNJTwogIAkJLS1saWJyYXJ5PWxpYmdzdGFwcC1AR1NUX0FQSV9WRVJTSU9OQC5sYSBcCiAgCQktLWluY2x1ZGU9R3N0LUBHU1RfQVBJX1ZFUlNJT05AIFwKICAJCS0taW5jbHVkZT1Hc3RCYXNlLUBHU1RfQVBJX1ZFUlNJT05AIFwKQEAgLTUwLDcgKzUwLDcgQEAKIGluZGV4IDI3NWQyMjIuLjIzNzQxOTYgMTAwNjQ0CiAtLS0gYS9nc3QtbGlicy9nc3QvYXVkaW8vTWFrZWZpbGUuYW0KICsrKyBiL2dzdC1saWJzL2dzdC9hdWRpby9NYWtlZmlsZS5hbQotQEAgLTEwNiw3ICsxMDYsNyBAQCBHc3RBdWRpby1AR1NUX0FQSV9WRVJTSU9OQC5naXI6ICQoSU5UUk9TUEVDVElPTl9TQ0FOTkVSKSBsaWJnc3RhdWRpby1AR1NUX0FQSV9WRQorQEAgLTExNiw3ICsxMTYsNyBAQCBHc3RBdWRpby1AR1NUX0FQSV9WRVJTSU9OQC5naXI6ICQoSU5UUk9TUEVDVElPTl9TQ0FOTkVSKSBsaWJnc3RhdWRpby1AR1NUX0FQSV9WRQogIAkJLS1pbmNsdWRlPUdzdC1AR1NUX0FQSV9WRVJTSU9OQCBcCiAgCQktLWluY2x1ZGU9R3N0QmFzZS1AR1NUX0FQSV9WRVJTSU9OQCBcCiAgCQktLWluY2x1ZGU9R3N0VGFnLUBHU1RfQVBJX1ZFUlNJT05AIFwKQEAgLTYzLDcgKzYzLDcgQEAKIGluZGV4IDA5YjNkNjguLmY1NDUzNTQgMTAwNjQ0CiAtLS0gYS9nc3QtbGlicy9nc3QvZmZ0L01ha2VmaWxlLmFtCiArKysgYi9nc3QtbGlicy9nc3QvZmZ0L01ha2VmaWxlLmFtCi1AQCAtNjQsNyArNjQsNyBAQCBHc3RGZnQtQEdTVF9BUElfVkVSU0lPTkAuZ2lyOiAkKElOVFJPU1BFQ1RJT05fU0NBTk5FUikgbGliZ3N0ZmZ0LUBHU1RfQVBJX1ZFUlNJTworQEAgLTY1LDcgKzY1LDcgQEAgR3N0RmZ0LUBHU1RfQVBJX1ZFUlNJT05ALmdpcjogJChJTlRST1NQRUNUSU9OX1NDQU5ORVIpIGxpYmdzdGZmdC1AR1NUX0FQSV9WRVJTSU8KICAJCS0tYWRkLWluY2x1ZGUtcGF0aD1gUEtHX0NPTkZJR19QQVRIPSIkKEdTVF9QS0dfQ09ORklHX1BBVEgpIiAkKFBLR19DT05GSUcpIC0tdmFyaWFibGU9Z2lyZGlyIGdzdHJlYW1lci1AR1NUX0FQSV9WRVJTSU9OQGAgXAogIAkJLS1saWJyYXJ5PWxpYmdzdGZmdC1AR1NUX0FQSV9WRVJTSU9OQC5sYSBcCiAgCQktLWluY2x1ZGU9R3N0LUBHU1RfQVBJX1ZFUlNJT05AIFwKQEAgLTc2LDcgKzc2LDcgQEAKIGluZGV4IDY0ZDVlYjAuLjkxZGMyMTQgMTAwNjQ0CiAtLS0gYS9nc3QtbGlicy9nc3QvcGJ1dGlscy9NYWtlZmlsZS5hbQogKysrIGIvZ3N0LWxpYnMvZ3N0L3BidXRpbHMvTWFrZWZpbGUuYW0KLUBAIC05NCw3ICs5NCw3IEBAIEdzdFBidXRpbHMtQEdTVF9BUElfVkVSU0lPTkAuZ2lyOiAkKElOVFJPU1BFQ1RJT05fU0NBTk5FUikgbGliZ3N0cGJ1dGlscy1AR1NUX0FQCitAQCAtOTksNyArOTksNyBAQCBHc3RQYnV0aWxzLUBHU1RfQVBJX1ZFUlNJT05ALmdpcjogJChJTlRST1NQRUNUSU9OX1NDQU5ORVIpIGxpYmdzdHBidXRpbHMtQEdTVF9BUAogIAkJLS1pbmNsdWRlPUdzdFRhZy1AR1NUX0FQSV9WRVJTSU9OQCBcCiAgCQktLWluY2x1ZGU9R3N0VmlkZW8tQEdTVF9BUElfVkVSU0lPTkAgXAogIAkJLS1pbmNsdWRlPUdzdEF1ZGlvLUBHU1RfQVBJX1ZFUlNJT05AIFwKQEAgLTEwMiw3ICsxMDIsNyBAQAogaW5kZXggZmRkMDFjMS4uZjU0NDVjMSAxMDA2NDQKIC0tLSBhL2dzdC1saWJzL2dzdC9ydHAvTWFrZWZpbGUuYW0KICsrKyBiL2dzdC1saWJzL2dzdC9ydHAvTWFrZWZpbGUuYW0KLUBAIC02NCw3ICs2NCw3IEBAIEdzdFJ0cC1AR1NUX0FQSV9WRVJTSU9OQC5naXI6ICQoSU5UUk9TUEVDVElPTl9TQ0FOTkVSKSBsaWJnc3RydHAtQEdTVF9BUElfVkVSU0lPCitAQCAtNjUsNyArNjUsNyBAQCBHc3RSdHAtQEdTVF9BUElfVkVSU0lPTkAuZ2lyOiAkKElOVFJPU1BFQ1RJT05fU0NBTk5FUikgbGliZ3N0cnRwLUBHU1RfQVBJX1ZFUlNJTwogIAkJLS1saWJyYXJ5PWxpYmdzdHJ0cC1AR1NUX0FQSV9WRVJTSU9OQC5sYSBcCiAgCQktLWluY2x1ZGU9R3N0LUBHU1RfQVBJX1ZFUlNJT05AIFwKICAJCS0taW5jbHVkZT1Hc3RCYXNlLUBHU1RfQVBJX1ZFUlNJT05AIFwKQEAgLTExNSw3ICsxMTUsNyBAQAogaW5kZXggZWRlNTcwNi4uOWIwYjI1OCAxMDA2NDQKIC0tLSBhL2dzdC1saWJzL2dzdC9ydHNwL01ha2VmaWxlLmFtCiArKysgYi9nc3QtbGlicy9nc3QvcnRzcC9NYWtlZmlsZS5hbQotQEAgLTcxLDcgKzcxLDcgQEAgR3N0UnRzcC1AR1NUX0FQSV9WRVJTSU9OQC5naXI6ICQoSU5UUk9TUEVDVElPTl9TQ0FOTkVSKSBsaWJnc3RydHNwLUBHU1RfQVBJX1ZFUlMKK0BAIC03Miw3ICs3Miw3IEBAIEdzdFJ0c3AtQEdTVF9BUElfVkVSU0lPTkAuZ2lyOiAkKElOVFJPU1BFQ1RJT05fU0NBTk5FUikgbGliZ3N0cnRzcC1AR1NUX0FQSV9WRVJTCiAgCQktLWluY2x1ZGU9R2lvLTIuMCBcCiAgCQktLWluY2x1ZGU9R3N0LUBHU1RfQVBJX1ZFUlNJT05AIFwKICAJCS0taW5jbHVkZT1Hc3RTZHAtQEdTVF9BUElfVkVSU0lPTkAgXApAQCAtMTI4LDcgKzEyOCw3IEBACiBpbmRleCBhOTBmMzBiLi4wZTE0OWI4IDEwMDY0NAogLS0tIGEvZ3N0LWxpYnMvZ3N0L3NkcC9NYWtlZmlsZS5hbQogKysrIGIvZ3N0LWxpYnMvZ3N0L3NkcC9NYWtlZmlsZS5hbQotQEAgLTMxLDcgKzMxLDcgQEAgR3N0U2RwLUBHU1RfQVBJX1ZFUlNJT05ALmdpcjogJChJTlRST1NQRUNUSU9OX1NDQU5ORVIpIGxpYmdzdHNkcC1AR1NUX0FQSV9WRVJTSU8KK0BAIC0zMiw3ICszMiw3IEBAIEdzdFNkcC1AR1NUX0FQSV9WRVJTSU9OQC5naXI6ICQoSU5UUk9TUEVDVElPTl9TQ0FOTkVSKSBsaWJnc3RzZHAtQEdTVF9BUElfVkVSU0lPCiAgCQktLWFkZC1pbmNsdWRlLXBhdGg9YFBLR19DT05GSUdfUEFUSD0iJChHU1RfUEtHX0NPTkZJR19QQVRIKSIgJChQS0dfQ09ORklHKSAtLXZhcmlhYmxlPWdpcmRpciBnc3RyZWFtZXItQEdTVF9BUElfVkVSU0lPTkBgIFwKICAJCS0tbGlicmFyeT1saWJnc3RzZHAtQEdTVF9BUElfVkVSU0lPTkAubGEgXAogIAkJLS1pbmNsdWRlPUdzdC1AR1NUX0FQSV9WRVJTSU9OQCBcCkBAIC0xNDEsNyArMTQxLDcgQEAKIGluZGV4IGM1MzRhNGQuLmNhZmFmZDMgMTAwNjQ0CiAtLS0gYS9nc3QtbGlicy9nc3QvdGFnL01ha2VmaWxlLmFtCiArKysgYi9nc3QtbGlicy9nc3QvdGFnL01ha2VmaWxlLmFtCi1AQCAtNDQsNyArNDQsNyBAQCBHc3RUYWctQEdTVF9BUElfVkVSU0lPTkAuZ2lyOiAkKElOVFJPU1BFQ1RJT05fU0NBTk5FUikgbGliZ3N0dGFnLUBHU1RfQVBJX1ZFUlNJTworQEAgLTQ1LDcgKzQ1LDcgQEAgR3N0VGFnLUBHU1RfQVBJX1ZFUlNJT05ALmdpcjogJChJTlRST1NQRUNUSU9OX1NDQU5ORVIpIGxpYmdzdHRhZy1AR1NUX0FQSV9WRVJTSU8KICAJCS0tbGlicmFyeT1saWJnc3R0YWctQEdTVF9BUElfVkVSU0lPTkAubGEgXAogIAkJLS1pbmNsdWRlPUdzdC1AR1NUX0FQSV9WRVJTSU9OQCBcCiAgCQktLWluY2x1ZGU9R3N0QmFzZS1AR1NUX0FQSV9WRVJTSU9OQCBcCkBAIC0xNTQsNyArMTU0LDcgQEAKIGluZGV4IDVkMzFmYTEuLmFjNjRlYjMgMTAwNjQ0CiAtLS0gYS9nc3QtbGlicy9nc3QvdmlkZW8vTWFrZWZpbGUuYW0KICsrKyBiL2dzdC1saWJzL2dzdC92aWRlby9NYWtlZmlsZS5hbQotQEAgLTExMyw3ICsxMTMsNyBAQCBHc3RWaWRlby1AR1NUX0FQSV9WRVJTSU9OQC5naXI6ICQoSU5UUk9TUEVDVElPTl9TQ0FOTkVSKSBsaWJnc3R2aWRlby1AR1NUX0FQSV9WRQorQEAgLTExNiw3ICsxMTYsNyBAQCBHc3RWaWRlby1AR1NUX0FQSV9WRVJTSU9OQC5naXI6ICQoSU5UUk9TUEVDVElPTl9TQ0FOTkVSKSBsaWJnc3R2aWRlby1AR1NUX0FQSV9WRQogIAkJLS1saWJyYXJ5PWxpYmdzdHZpZGVvLUBHU1RfQVBJX1ZFUlNJT05ALmxhIFwKICAJCS0taW5jbHVkZT1Hc3QtQEdTVF9BUElfVkVSU0lPTkAgXAogIAkJLS1pbmNsdWRlPUdzdEJhc2UtQEdTVF9BUElfVkVSU0lPTkAgXApkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2dzdHJlYW1lci9nc3RyZWFtZXIxLjAtcGx1Z2lucy1iYXNlLzAwMDItTWFrZWZpbGUuYW0tcHJlZml4LWNhbGxzLXRvLXBrZy1jb25maWctd2l0aC1QS0dfQ09ORi5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9nc3RyZWFtZXIvZ3N0cmVhbWVyMS4wLXBsdWdpbnMtYmFzZS8wMDAyLU1ha2VmaWxlLmFtLXByZWZpeC1jYWxscy10by1wa2ctY29uZmlnLXdpdGgtUEtHX0NPTkYucGF0Y2gKaW5kZXggODVmY2FjYi4uMGE4YmM5YiAxMDA2NDQKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2dzdHJlYW1lci9nc3RyZWFtZXIxLjAtcGx1Z2lucy1iYXNlLzAwMDItTWFrZWZpbGUuYW0tcHJlZml4LWNhbGxzLXRvLXBrZy1jb25maWctd2l0aC1QS0dfQ09ORi5wYXRjaAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvZ3N0cmVhbWVyL2dzdHJlYW1lcjEuMC1wbHVnaW5zLWJhc2UvMDAwMi1NYWtlZmlsZS5hbS1wcmVmaXgtY2FsbHMtdG8tcGtnLWNvbmZpZy13aXRoLVBLR19DT05GLnBhdGNoCkBAIC0yNCw3ICsyNCw3IEBACiBpbmRleCBiYzdmNTNhLi4wZWY1Zjg2IDEwMDY0NAogLS0tIGEvZ3N0LWxpYnMvZ3N0L2FsbG9jYXRvcnMvTWFrZWZpbGUuYW0KICsrKyBiL2dzdC1saWJzL2dzdC9hbGxvY2F0b3JzL01ha2VmaWxlLmFtCi1AQCAtMzQsNyArMzQsNyBAQCBHc3RBbGxvY2F0b3JzLUBHU1RfQVBJX1ZFUlNJT05ALmdpcjogJChJTlRST1NQRUNUSU9OX1NDQU5ORVIpIGxpYmdzdGFsbG9jYXRvcnMtQAorQEAgLTM1LDcgKzM1LDcgQEAgR3N0QWxsb2NhdG9ycy1AR1NUX0FQSV9WRVJTSU9OQC5naXI6ICQoSU5UUk9TUEVDVElPTl9TQ0FOTkVSKSBsaWJnc3RhbGxvY2F0b3JzLUAKICAJCS0tYy1pbmNsdWRlICJnc3QvYWxsb2NhdG9ycy9hbGxvY2F0b3JzLmgiIFwKICAJCS1JJCh0b3Bfc3JjZGlyKS9nc3QtbGlicyBcCiAgCQktSSQodG9wX2J1aWxkZGlyKS9nc3QtbGlicyBcCkBAIC0zMyw3ICszMyw3IEBACiAgCQktLWxpYnJhcnk9bGliZ3N0YWxsb2NhdG9ycy1AR1NUX0FQSV9WRVJTSU9OQC5sYSBcCiAgCQktLWluY2x1ZGU9R3N0LUBHU1RfQVBJX1ZFUlNJT05AIFwKICAJCS0tbGlidG9vbD0iJChMSUJUT09MKSIgXAotQEAgLTU4LDcgKzU4LDcgQEAgdHlwZWxpYnNfREFUQSA9ICQoQlVJTFRfR0lSU09VUkNFUzouZ2lyPS50eXBlbGliKQorQEAgLTU5LDcgKzU5LDcgQEAgdHlwZWxpYnNfREFUQSA9ICQoQlVJTFRfR0lSU09VUkNFUzouZ2lyPS50eXBlbGliKQogIAkJJChJTlRST1NQRUNUSU9OX0NPTVBJTEVSKSBcCiAgCQktLWluY2x1ZGVkaXI9JChzcmNkaXIpIFwKICAJCS0taW5jbHVkZWRpcj0kKGJ1aWxkZGlyKSBcCkBAIC00Niw3ICs0Niw3IEBACiBpbmRleCBkY2MyZmUwLi5kYzA3NmNiIDEwMDY0NAogLS0tIGEvZ3N0LWxpYnMvZ3N0L2FwcC9NYWtlZmlsZS5hbQogKysrIGIvZ3N0LWxpYnMvZ3N0L2FwcC9NYWtlZmlsZS5hbQotQEAgLTQ3LDggKzQ3LDggQEAgR3N0QXBwLUBHU1RfQVBJX1ZFUlNJT05ALmdpcjogJChJTlRST1NQRUNUSU9OX1NDQU5ORVIpIGxpYmdzdGFwcC1AR1NUX0FQSV9WRVJTSU8KK0BAIC00OCw4ICs0OCw4IEBAIEdzdEFwcC1AR1NUX0FQSV9WRVJTSU9OQC5naXI6ICQoSU5UUk9TUEVDVElPTl9TQ0FOTkVSKSBsaWJnc3RhcHAtQEdTVF9BUElfVkVSU0lPCiAgCQktLWMtaW5jbHVkZSAiZ3N0L2FwcC9hcHAuaCIgXAogIAkJLUkkKHRvcF9zcmNkaXIpL2dzdC1saWJzIFwKICAJCS1JJCh0b3BfYnVpbGRkaXIpL2dzdC1saWJzIFwKQEAgLTYxLDcgKzYxLDcgQEAKIGluZGV4IDIzNzQxOTYuLjI5NWViNDIgMTAwNjQ0CiAtLS0gYS9nc3QtbGlicy9nc3QvYXVkaW8vTWFrZWZpbGUuYW0KICsrKyBiL2dzdC1saWJzL2dzdC9hdWRpby9NYWtlZmlsZS5hbQotQEAgLTk2LDEyICs5NiwxMiBAQCBHc3RBdWRpby1AR1NUX0FQSV9WRVJTSU9OQC5naXI6ICQoSU5UUk9TUEVDVElPTl9TQ0FOTkVSKSBsaWJnc3RhdWRpby1AR1NUX0FQSV9WRQorQEAgLTEwNiwxMiArMTA2LDEyIEBAIEdzdEF1ZGlvLUBHU1RfQVBJX1ZFUlNJT05ALmdpcjogJChJTlRST1NQRUNUSU9OX1NDQU5ORVIpIGxpYmdzdGF1ZGlvLUBHU1RfQVBJX1ZFCiAgCQktSSQodG9wX3NyY2RpcikvZ3N0LWxpYnMgXAogIAkJLUkkKHRvcF9idWlsZGRpcikvZ3N0LWxpYnMgXAogIAkJLS1jLWluY2x1ZGUgImdzdC9hdWRpby9hdWRpby5oIiBcCkBAIC03OCw3ICs3OCw3IEBACiAgCQktLWxpYnJhcnktcGF0aD0iJCh0b3BfYnVpbGRkaXIpL2dzdC1saWJzL2dzdC90YWcvIiBcCiAgCQktLWluY2x1ZGU9R3N0LUBHU1RfQVBJX1ZFUlNJT05AIFwKICAJCS0taW5jbHVkZT1Hc3RCYXNlLUBHU1RfQVBJX1ZFUlNJT05AIFwKLUBAIC0xMzAsOCArMTMwLDggQEAgdHlwZWxpYnNfREFUQSA9ICQoQlVJTFRfR0lSU09VUkNFUzouZ2lyPS50eXBlbGliKQorQEAgLTE0MCw4ICsxNDAsOCBAQCB0eXBlbGlic19EQVRBID0gJChCVUlMVF9HSVJTT1VSQ0VTOi5naXI9LnR5cGVsaWIpCiAgCQktLWluY2x1ZGVkaXI9JChzcmNkaXIpIFwKICAJCS0taW5jbHVkZWRpcj0kKGJ1aWxkZGlyKSBcCiAgCQktLWluY2x1ZGVkaXI9IiQodG9wX2J1aWxkZGlyKS9nc3QtbGlicy9nc3QvdGFnLyIgXApAQCAtOTMsNyArOTMsNyBAQAogaW5kZXggZjU0NTM1NC4uMWJiNjI0MyAxMDA2NDQKIC0tLSBhL2dzdC1saWJzL2dzdC9mZnQvTWFrZWZpbGUuYW0KICsrKyBiL2dzdC1saWJzL2dzdC9mZnQvTWFrZWZpbGUuYW0KLUBAIC02MSw3ICs2MSw3IEBAIEdzdEZmdC1AR1NUX0FQSV9WRVJTSU9OQC5naXI6ICQoSU5UUk9TUEVDVElPTl9TQ0FOTkVSKSBsaWJnc3RmZnQtQEdTVF9BUElfVkVSU0lPCitAQCAtNjIsNyArNjIsNyBAQCBHc3RGZnQtQEdTVF9BUElfVkVSU0lPTkAuZ2lyOiAkKElOVFJPU1BFQ1RJT05fU0NBTk5FUikgbGliZ3N0ZmZ0LUBHU1RfQVBJX1ZFUlNJTwogIAkJLS1jLWluY2x1ZGUgImdzdC9mZnQvZmZ0LmgiIFwKICAJCS1JJCh0b3Bfc3JjZGlyKS9nc3QtbGlicyBcCiAgCQktSSQodG9wX2J1aWxkZGlyKS9nc3QtbGlicyBcCkBAIC0xMDIsNyArMTAyLDcgQEAKICAJCS0tbGlicmFyeT1saWJnc3RmZnQtQEdTVF9BUElfVkVSU0lPTkAubGEgXAogIAkJLS1pbmNsdWRlPUdzdC1AR1NUX0FQSV9WRVJTSU9OQCBcCiAgCQktLWxpYnRvb2w9IiQoTElCVE9PTCkiIFwKLUBAIC04NSw3ICs4NSw3IEBAIHR5cGVsaWJzX0RBVEEgPSAkKEJVSUxUX0dJUlNPVVJDRVM6Lmdpcj0udHlwZWxpYikKK0BAIC04Niw3ICs4Niw3IEBAIHR5cGVsaWJzX0RBVEEgPSAkKEJVSUxUX0dJUlNPVVJDRVM6Lmdpcj0udHlwZWxpYikKICAJCSQoSU5UUk9TUEVDVElPTl9DT01QSUxFUikgXAogIAkJLS1pbmNsdWRlZGlyPSQoc3JjZGlyKSBcCiAgCQktLWluY2x1ZGVkaXI9JChidWlsZGRpcikgXApAQCAtMTE1LDcgKzExNSw3IEBACiBpbmRleCA5MWRjMjE0Li5kYzhlMWQzIDEwMDY0NAogLS0tIGEvZ3N0LWxpYnMvZ3N0L3BidXRpbHMvTWFrZWZpbGUuYW0KICsrKyBiL2dzdC1saWJzL2dzdC9wYnV0aWxzL01ha2VmaWxlLmFtCi1AQCAtNzksMTQgKzc5LDE0IEBAIEdzdFBidXRpbHMtQEdTVF9BUElfVkVSU0lPTkAuZ2lyOiAkKElOVFJPU1BFQ1RJT05fU0NBTk5FUikgbGliZ3N0cGJ1dGlscy1AR1NUX0FQCitAQCAtODQsMTQgKzg0LDE0IEBAIEdzdFBidXRpbHMtQEdTVF9BUElfVkVSU0lPTkAuZ2lyOiAkKElOVFJPU1BFQ1RJT05fU0NBTk5FUikgbGliZ3N0cGJ1dGlscy1AR1NUX0FQCiAgCQktLWMtaW5jbHVkZSAiZ3N0L3BidXRpbHMvcGJ1dGlscy5oIiBcCiAgCQktSSQodG9wX3NyY2RpcikvZ3N0LWxpYnMgXAogIAkJLUkkKHRvcF9idWlsZGRpcikvZ3N0LWxpYnMgXApAQCAtMTM0LDcgKzEzNCw3IEBACiAgCQktLWxpYnJhcnktcGF0aD0iJCh0b3BfYnVpbGRkaXIpL2dzdC1saWJzL2dzdC90YWcvIiBcCiAgCQktLWxpYnJhcnktcGF0aD0iJCh0b3BfYnVpbGRkaXIpL2dzdC1saWJzL2dzdC92aWRlby8iIFwKICAJCS0tbGlicmFyeS1wYXRoPSIkKHRvcF9idWlsZGRpcikvZ3N0LWxpYnMvZ3N0L2F1ZGlvLyIgXAotQEAgLTExOSw4ICsxMTksOCBAQCB0eXBlbGlic19EQVRBID0gJChCVUlMVF9HSVJTT1VSQ0VTOi5naXI9LnR5cGVsaWIpCitAQCAtMTI0LDggKzEyNCw4IEBAIHR5cGVsaWJzX0RBVEEgPSAkKEJVSUxUX0dJUlNPVVJDRVM6Lmdpcj0udHlwZWxpYikKICAJCSQoSU5UUk9TUEVDVElPTl9DT01QSUxFUikgXAogIAkJLS1pbmNsdWRlZGlyPSQoc3JjZGlyKSBcCiAgCQktLWluY2x1ZGVkaXI9JChidWlsZGRpcikgXApAQCAtMTc1LDcgKzE3NSw3IEBACiBpbmRleCBmNTQ0NWMxLi41MjdjMGI0IDEwMDY0NAogLS0tIGEvZ3N0LWxpYnMvZ3N0L3J0cC9NYWtlZmlsZS5hbQogKysrIGIvZ3N0LWxpYnMvZ3N0L3J0cC9NYWtlZmlsZS5hbQotQEAgLTU5LDggKzU5LDggQEAgR3N0UnRwLUBHU1RfQVBJX1ZFUlNJT05ALmdpcjogJChJTlRST1NQRUNUSU9OX1NDQU5ORVIpIGxpYmdzdHJ0cC1AR1NUX0FQSV9WRVJTSU8KK0BAIC02MCw4ICs2MCw4IEBAIEdzdFJ0cC1AR1NUX0FQSV9WRVJTSU9OQC5naXI6ICQoSU5UUk9TUEVDVElPTl9TQ0FOTkVSKSBsaWJnc3RydHAtQEdTVF9BUElfVkVSU0lPCiAgCQktLWMtaW5jbHVkZSAiZ3N0L3J0cC9ydHAuaCIgXAogIAkJLUkkKHRvcF9idWlsZGRpcikvZ3N0LWxpYnMgXAogIAkJLUkkKHRvcF9zcmNkaXIpL2dzdC1saWJzIFwKQEAgLTE4Niw3ICsxODYsNyBAQAogIAkJLS1saWJyYXJ5PWxpYmdzdHJ0cC1AR1NUX0FQSV9WRVJTSU9OQC5sYSBcCiAgCQktLWluY2x1ZGU9R3N0LUBHU1RfQVBJX1ZFUlNJT05AIFwKICAJCS0taW5jbHVkZT1Hc3RCYXNlLUBHU1RfQVBJX1ZFUlNJT05AIFwKLUBAIC04Nyw4ICs4Nyw4IEBAIHR5cGVsaWJzX0RBVEEgPSAkKEJVSUxUX0dJUlNPVVJDRVM6Lmdpcj0udHlwZWxpYikKK0BAIC04OCw4ICs4OCw4IEBAIHR5cGVsaWJzX0RBVEEgPSAkKEJVSUxUX0dJUlNPVVJDRVM6Lmdpcj0udHlwZWxpYikKICAJCSQoSU5UUk9TUEVDVElPTl9DT01QSUxFUikgXAogIAkJLS1pbmNsdWRlZGlyPSQoc3JjZGlyKSBcCiAgCQktLWluY2x1ZGVkaXI9JChidWlsZGRpcikgXApAQCAtMjAxLDcgKzIwMSw3IEBACiBpbmRleCA5YjBiMjU4Li40ZjZkOWY4IDEwMDY0NAogLS0tIGEvZ3N0LWxpYnMvZ3N0L3J0c3AvTWFrZWZpbGUuYW0KICsrKyBiL2dzdC1saWJzL2dzdC9ydHNwL01ha2VmaWxlLmFtCi1AQCAtNjYsNyArNjYsNyBAQCBHc3RSdHNwLUBHU1RfQVBJX1ZFUlNJT05ALmdpcjogJChJTlRST1NQRUNUSU9OX1NDQU5ORVIpIGxpYmdzdHJ0c3AtQEdTVF9BUElfVkVSUworQEAgLTY3LDcgKzY3LDcgQEAgR3N0UnRzcC1AR1NUX0FQSV9WRVJTSU9OQC5naXI6ICQoSU5UUk9TUEVDVElPTl9TQ0FOTkVSKSBsaWJnc3RydHNwLUBHU1RfQVBJX1ZFUlMKICAJCS1JJCh0b3BfYnVpbGRkaXIpL2dzdC1saWJzIFwKICAJCS1JJCh0b3Bfc3JjZGlyKS9nc3QtbGlicyBcCiAgCQktLWFkZC1pbmNsdWRlLXBhdGg9JChidWlsZGRpcikvLi4vc2RwIFwKQEAgLTIxMCw3ICsyMTAsNyBAQAogIAkJLS1saWJyYXJ5PWxpYmdzdHJ0c3AtQEdTVF9BUElfVkVSU0lPTkAubGEgXAogIAkJLS1pbmNsdWRlPUdpby0yLjAgXAogIAkJLS1pbmNsdWRlPUdzdC1AR1NUX0FQSV9WRVJTSU9OQCBcCi1AQCAtOTYsNyArOTYsNyBAQCB0eXBlbGlic19EQVRBID0gJChCVUlMVF9HSVJTT1VSQ0VTOi5naXI9LnR5cGVsaWIpCitAQCAtOTcsNyArOTcsNyBAQCB0eXBlbGlic19EQVRBID0gJChCVUlMVF9HSVJTT1VSQ0VTOi5naXI9LnR5cGVsaWIpCiAgCQktLWluY2x1ZGVkaXI9JChzcmNkaXIpIFwKICAJCS0taW5jbHVkZWRpcj0kKGJ1aWxkZGlyKSBcCiAgCQktLWluY2x1ZGVkaXI9JChidWlsZGRpcikvLi4vc2RwIFwKQEAgLTIyMyw3ICsyMjMsNyBAQAogaW5kZXggMGUxNDliOC4uOWFhMDUxMiAxMDA2NDQKIC0tLSBhL2dzdC1saWJzL2dzdC9zZHAvTWFrZWZpbGUuYW0KICsrKyBiL2dzdC1saWJzL2dzdC9zZHAvTWFrZWZpbGUuYW0KLUBAIC0yOCw3ICsyOCw3IEBAIEdzdFNkcC1AR1NUX0FQSV9WRVJTSU9OQC5naXI6ICQoSU5UUk9TUEVDVElPTl9TQ0FOTkVSKSBsaWJnc3RzZHAtQEdTVF9BUElfVkVSU0lPCitAQCAtMjksNyArMjksNyBAQCBHc3RTZHAtQEdTVF9BUElfVkVSU0lPTkAuZ2lyOiAkKElOVFJPU1BFQ1RJT05fU0NBTk5FUikgbGliZ3N0c2RwLUBHU1RfQVBJX1ZFUlNJTwogIAkJLS13YXJuLWFsbCBcCiAgCQktLWMtaW5jbHVkZSAiZ3N0L3NkcC9zZHAuaCIgXAogIAkJLUkkKHRvcF9zcmNkaXIpL2dzdC1saWJzIFwKQEAgLTIzMiw3ICsyMzIsNyBAQAogIAkJLS1saWJyYXJ5PWxpYmdzdHNkcC1AR1NUX0FQSV9WRVJTSU9OQC5sYSBcCiAgCQktLWluY2x1ZGU9R3N0LUBHU1RfQVBJX1ZFUlNJT05AIFwKICAJCS0tbGlidG9vbD0iJChMSUJUT09MKSIgXAotQEAgLTUyLDcgKzUyLDcgQEAgdHlwZWxpYnNfREFUQSA9ICQoQlVJTFRfR0lSU09VUkNFUzouZ2lyPS50eXBlbGliKQorQEAgLTUzLDcgKzUzLDcgQEAgdHlwZWxpYnNfREFUQSA9ICQoQlVJTFRfR0lSU09VUkNFUzouZ2lyPS50eXBlbGliKQogIAkJJChJTlRST1NQRUNUSU9OX0NPTVBJTEVSKSBcCiAgCQktLWluY2x1ZGVkaXI9JChzcmNkaXIpIFwKICAJCS0taW5jbHVkZWRpcj0kKGJ1aWxkZGlyKSBcCkBAIC0yNDUsNyArMjQ1LDcgQEAKIGluZGV4IGNhZmFmZDMuLmJhOTkyNzkgMTAwNjQ0CiAtLS0gYS9nc3QtbGlicy9nc3QvdGFnL01ha2VmaWxlLmFtCiArKysgYi9nc3QtbGlicy9nc3QvdGFnL01ha2VmaWxlLmFtCi1AQCAtMzksOCArMzksOCBAQCBHc3RUYWctQEdTVF9BUElfVkVSU0lPTkAuZ2lyOiAkKElOVFJPU1BFQ1RJT05fU0NBTk5FUikgbGliZ3N0dGFnLUBHU1RfQVBJX1ZFUlNJTworQEAgLTQwLDggKzQwLDggQEAgR3N0VGFnLUBHU1RfQVBJX1ZFUlNJT05ALmdpcjogJChJTlRST1NQRUNUSU9OX1NDQU5ORVIpIGxpYmdzdHRhZy1AR1NUX0FQSV9WRVJTSU8KICAJCS0tYy1pbmNsdWRlICJnc3QvdGFnL3RhZy5oIiBcCiAgCQktSSQodG9wX3NyY2RpcikvZ3N0LWxpYnMgXAogIAkJLUkkKHRvcF9idWlsZGRpcikvZ3N0LWxpYnMgXApAQCAtMjU2LDcgKzI1Niw3IEBACiAgCQktLWxpYnJhcnk9bGliZ3N0dGFnLUBHU1RfQVBJX1ZFUlNJT05ALmxhIFwKICAJCS0taW5jbHVkZT1Hc3QtQEdTVF9BUElfVkVSU0lPTkAgXAogIAkJLS1pbmNsdWRlPUdzdEJhc2UtQEdTVF9BUElfVkVSU0lPTkAgXAotQEAgLTY3LDggKzY3LDggQEAgdHlwZWxpYnNfREFUQSA9ICQoQlVJTFRfR0lSU09VUkNFUzouZ2lyPS50eXBlbGliKQorQEAgLTY4LDggKzY4LDggQEAgdHlwZWxpYnNfREFUQSA9ICQoQlVJTFRfR0lSU09VUkNFUzouZ2lyPS50eXBlbGliKQogIAkJJChJTlRST1NQRUNUSU9OX0NPTVBJTEVSKSBcCiAgCQktLWluY2x1ZGVkaXI9JChzcmNkaXIpIFwKICAJCS0taW5jbHVkZWRpcj0kKGJ1aWxkZGlyKSBcCkBAIC0yNzEsNyArMjcxLDcgQEAKIGluZGV4IGFjNjRlYjMuLjM0MmM4YzYgMTAwNjQ0CiAtLS0gYS9nc3QtbGlicy9nc3QvdmlkZW8vTWFrZWZpbGUuYW0KICsrKyBiL2dzdC1saWJzL2dzdC92aWRlby9NYWtlZmlsZS5hbQotQEAgLTEwOCw4ICsxMDgsOCBAQCBHc3RWaWRlby1AR1NUX0FQSV9WRVJTSU9OQC5naXI6ICQoSU5UUk9TUEVDVElPTl9TQ0FOTkVSKSBsaWJnc3R2aWRlby1AR1NUX0FQSV9WRQorQEAgLTExMSw4ICsxMTEsOCBAQCBHc3RWaWRlby1AR1NUX0FQSV9WRVJTSU9OQC5naXI6ICQoSU5UUk9TUEVDVElPTl9TQ0FOTkVSKSBsaWJnc3R2aWRlby1AR1NUX0FQSV9WRQogIAkJLS1jLWluY2x1ZGUgImdzdC92aWRlby92aWRlby5oIiBcCiAgCQktSSQodG9wX3NyY2RpcikvZ3N0LWxpYnMgXAogIAkJLUkkKHRvcF9idWlsZGRpcikvZ3N0LWxpYnMgXApAQCAtMjgyLDcgKzI4Miw3IEBACiAgCQktLWxpYnJhcnk9bGliZ3N0dmlkZW8tQEdTVF9BUElfVkVSU0lPTkAubGEgXAogIAkJLS1pbmNsdWRlPUdzdC1AR1NUX0FQSV9WRVJTSU9OQCBcCiAgCQktLWluY2x1ZGU9R3N0QmFzZS1AR1NUX0FQSV9WRVJTSU9OQCBcCi1AQCAtMTM2LDggKzEzNiw4IEBAIHR5cGVsaWJzX0RBVEEgPSAkKEJVSUxUX0dJUlNPVVJDRVM6Lmdpcj0udHlwZWxpYikKK0BAIC0xMzksOCArMTM5LDggQEAgdHlwZWxpYnNfREFUQSA9ICQoQlVJTFRfR0lSU09VUkNFUzouZ2lyPS50eXBlbGliKQogIAkJJChJTlRST1NQRUNUSU9OX0NPTVBJTEVSKSBcCiAgCQktLWluY2x1ZGVkaXI9JChzcmNkaXIpIFwKICAJCS0taW5jbHVkZWRpcj0kKGJ1aWxkZGlyKSBcCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvZ3N0cmVhbWVyL2dzdHJlYW1lcjEuMC1wbHVnaW5zLWJhc2UvMDAwNC1ydHNwLWRyb3AtaW5jb3JyZWN0LXJlZmVyZW5jZS10by1nc3RyZWFtZXItc2RwLWluLU1hLnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2dzdHJlYW1lci9nc3RyZWFtZXIxLjAtcGx1Z2lucy1iYXNlLzAwMDQtcnRzcC1kcm9wLWluY29ycmVjdC1yZWZlcmVuY2UtdG8tZ3N0cmVhbWVyLXNkcC1pbi1NYS5wYXRjaAppbmRleCA0MmQ5OWMxLi40YWRmNjA1IDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvZ3N0cmVhbWVyL2dzdHJlYW1lcjEuMC1wbHVnaW5zLWJhc2UvMDAwNC1ydHNwLWRyb3AtaW5jb3JyZWN0LXJlZmVyZW5jZS10by1nc3RyZWFtZXItc2RwLWluLU1hLnBhdGNoCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9nc3RyZWFtZXIvZ3N0cmVhbWVyMS4wLXBsdWdpbnMtYmFzZS8wMDA0LXJ0c3AtZHJvcC1pbmNvcnJlY3QtcmVmZXJlbmNlLXRvLWdzdHJlYW1lci1zZHAtaW4tTWEucGF0Y2gKQEAgLTE0LDcgKzE0LDcgQEAKIGluZGV4IDRmNmQ5ZjguLjBhZmEzNzAgMTAwNjQ0CiAtLS0gYS9nc3QtbGlicy9nc3QvcnRzcC9NYWtlZmlsZS5hbQogKysrIGIvZ3N0LWxpYnMvZ3N0L3J0c3AvTWFrZWZpbGUuYW0KLUBAIC03NCw3ICs3NCw2IEBAIEdzdFJ0c3AtQEdTVF9BUElfVkVSU0lPTkAuZ2lyOiAkKElOVFJPU1BFQ1RJT05fU0NBTk5FUikgbGliZ3N0cnRzcC1AR1NUX0FQSV9WRVJTCitAQCAtNzUsNyArNzUsNiBAQCBHc3RSdHNwLUBHU1RfQVBJX1ZFUlNJT05ALmdpcjogJChJTlRST1NQRUNUSU9OX1NDQU5ORVIpIGxpYmdzdHJ0c3AtQEdTVF9BUElfVkVSUwogIAkJLS1saWJ0b29sPSIkKExJQlRPT0wpIiBcCiAgCQktLXBrZyBnaW8tMi4wIFwKICAJCS0tcGtnIGdzdHJlYW1lci1AR1NUX0FQSV9WRVJTSU9OQCBcCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvZ3N0cmVhbWVyL2dzdHJlYW1lcjEuMC1wbHVnaW5zLWJhc2UvMDAwNC1zdWJwYXJzZS1zZXQtbmVlZF9zZWdtZW50LWFmdGVyLXNpbmstcGFkLXJlY2VpdmVkLUdTLnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2dzdHJlYW1lci9nc3RyZWFtZXIxLjAtcGx1Z2lucy1iYXNlLzAwMDQtc3VicGFyc2Utc2V0LW5lZWRfc2VnbWVudC1hZnRlci1zaW5rLXBhZC1yZWNlaXZlZC1HUy5wYXRjaAppbmRleCA3ODEzOTE1Li5iOTI0ZTM4IDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvZ3N0cmVhbWVyL2dzdHJlYW1lcjEuMC1wbHVnaW5zLWJhc2UvMDAwNC1zdWJwYXJzZS1zZXQtbmVlZF9zZWdtZW50LWFmdGVyLXNpbmstcGFkLXJlY2VpdmVkLUdTLnBhdGNoCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9nc3RyZWFtZXIvZ3N0cmVhbWVyMS4wLXBsdWdpbnMtYmFzZS8wMDA0LXN1YnBhcnNlLXNldC1uZWVkX3NlZ21lbnQtYWZ0ZXItc2luay1wYWQtcmVjZWl2ZWQtR1MucGF0Y2gKQEAgLTUxLDcgKzUxLDcgQEAKICAgICAgICAgIEdTVF9XQVJOSU5HX09CSkVDVCAoc2VsZiwgInNlZWsgdG8gMCBieXRlcyBmYWlsZWQiKTsKICAgICAgICB9CiAgCi1AQCAtMTYzMiw4ICsxNjMwLDEwIEBAIGdzdF9zdWJfcGFyc2Vfc2lua19ldmVudCAoR3N0UGFkICogcGFkLCBHc3RPYmplY3QgKiBwYXJlbnQsIEdzdEV2ZW50ICogZXZlbnQpCitAQCAtMTY0MSw4ICsxNjM5LDEwIEBAIGdzdF9zdWJfcGFyc2Vfc2lua19ldmVudCAoR3N0UGFkICogcGFkLCBHc3RPYmplY3QgKiBwYXJlbnQsIEdzdEV2ZW50ICogZXZlbnQpCiAgICAgICAgZ3N0X2V2ZW50X3BhcnNlX3NlZ21lbnQgKGV2ZW50LCAmcyk7CiAgICAgICAgaWYgKHMtPmZvcm1hdCA9PSBHU1RfRk9STUFUX1RJTUUpCiAgICAgICAgICBnc3RfZXZlbnRfY29weV9zZWdtZW50IChldmVudCwgJnNlbGYtPnNlZ21lbnQpOwpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2dzdHJlYW1lci9nc3RyZWFtZXIxLjAtcGx1Z2lucy1iYXNlLzAwMDUtY29udmVydGZyYW1lLVN1cHBvcnQtdmlkZW8tY3JvcC13aGVuLWNvbnZlcnQtZnJhbWUucGF0Y2ggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvZ3N0cmVhbWVyL2dzdHJlYW1lcjEuMC1wbHVnaW5zLWJhc2UvMDAwNS1jb252ZXJ0ZnJhbWUtU3VwcG9ydC12aWRlby1jcm9wLXdoZW4tY29udmVydC1mcmFtZS5wYXRjaApkZWxldGVkIGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDk2YTZmNC4uMDAwMDAwMAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvZ3N0cmVhbWVyL2dzdHJlYW1lcjEuMC1wbHVnaW5zLWJhc2UvMDAwNS1jb252ZXJ0ZnJhbWUtU3VwcG9ydC12aWRlby1jcm9wLXdoZW4tY29udmVydC1mcmFtZS5wYXRjaAorKysgL2Rldi9udWxsCkBAIC0xLDE0MyArMCwwIEBACi1Gcm9tIDViZTZlZDAwYWFkMDI4ZDljYmI0ZTBjNjNhZjBiZTY5ZDMzNWM3MWUgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCi1Gcm9tOiBTb25nIEJpbmcgPGIwNjQ5OEBmcmVlc2NhbGUuY29tPgotRGF0ZTogRnJpLCAxMSBEZWMgMjAxNSAyMTo0MjowMCArMDgwMAotU3ViamVjdDogW1BBVENIXSBjb252ZXJ0ZnJhbWU6IFN1cHBvcnQgdmlkZW8gY3JvcCB3aGVuIGNvbnZlcnQgZnJhbWUKLQotR2V0IHRodW1ibmFpbCB3aWxsIHVzZXIgY29udmVydGZyYW1lIHRvIGNvbnZlcnQgdmlkZW8gZnJhbWUgdG8KLWRlc2lyZWQgdmlkZW8gZm9ybWF0IGFuZCBzaXplLiBCdXQgaGF2ZW4ndCBwcm9jZXNzIGNyb3AgbWV0YSBvbgotdGhlIHZpZGVvIGJ1ZmZlci4gQWRkIHN1cHBvcnQgdmlkZW8gY3JvcC4KLQotaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTc1OTMyOQotCi1VcHN0cmVhbS1TdGF0dXM6IEJhY2twb3J0IFsxLjcuMV0KLQotLS0tCi0gZ3N0LWxpYnMvZ3N0L3ZpZGVvL2NvbnZlcnRmcmFtZS5jIHwgNjUgKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrLS0tLS0tCi0gMSBmaWxlIGNoYW5nZWQsIDU2IGluc2VydGlvbnMoKyksIDkgZGVsZXRpb25zKC0pCi0KLWRpZmYgLS1naXQgYS9nc3QtbGlicy9nc3QvdmlkZW8vY29udmVydGZyYW1lLmMgYi9nc3QtbGlicy9nc3QvdmlkZW8vY29udmVydGZyYW1lLmMKLWluZGV4IGFhOWMzZDMuLjk0MmE1MWUgMTAwNjQ0Ci0tLS0gYS9nc3QtbGlicy9nc3QvdmlkZW8vY29udmVydGZyYW1lLmMKLSsrKyBiL2dzdC1saWJzL2dzdC92aWRlby9jb252ZXJ0ZnJhbWUuYwotQEAgLTExMCwxMiArMTEwLDIzIEBAIGZhaWw6Ci0gc3RhdGljIEdzdEVsZW1lbnQgKgotIGJ1aWxkX2NvbnZlcnRfZnJhbWVfcGlwZWxpbmUgKEdzdEVsZW1lbnQgKiogc3JjX2VsZW1lbnQsCi0gICAgIEdzdEVsZW1lbnQgKiogc2lua19lbGVtZW50LCBjb25zdCBHc3RDYXBzICogZnJvbV9jYXBzLAotLSAgICBjb25zdCBHc3RDYXBzICogdG9fY2FwcywgR0Vycm9yICoqIGVycikKLSsgICAgR3N0VmlkZW9Dcm9wTWV0YSAqIGNtZXRhLCBjb25zdCBHc3RDYXBzICogdG9fY2FwcywgR0Vycm9yICoqIGVycikKLSB7Ci0tICBHc3RFbGVtZW50ICpzcmMgPSBOVUxMLCAqY3NwID0gTlVMTCwgKnZzY2FsZSA9IE5VTEw7Ci0tICBHc3RFbGVtZW50ICpzaW5rID0gTlVMTCwgKmVuY29kZXIgPSBOVUxMLCAqcGlwZWxpbmU7Ci0rICBHc3RFbGVtZW50ICp2Y3JvcCA9IE5VTEwsICpjc3AgPSBOVUxMLCAqY3NwMiA9IE5VTEwsICp2c2NhbGUgPSBOVUxMOwotKyAgR3N0RWxlbWVudCAqc3JjID0gTlVMTCwgKnNpbmsgPSBOVUxMLCAqZW5jb2RlciA9IE5VTEwsICpwaXBlbGluZTsKLSsgIEdzdFZpZGVvSW5mbyBpbmZvOwotICAgR0Vycm9yICplcnJvciA9IE5VTEw7Ci0gCi0rICBpZiAoY21ldGEpIHsKLSsgICAgaWYgKCFjcmVhdGVfZWxlbWVudCAoInZpZGVvY3JvcCIsICZ2Y3JvcCwgJmVycm9yKSkgewotKyAgICAgIGdfd2FybmluZwotKyAgICAgICAgICAoImJ1aWxkX2NvbnZlcnRfZnJhbWVfcGlwZWxpbmU6IEJ1ZmZlciBoYXMgY3JvcCBtZXRhZGF0YSBidXQgdmlkZW9jcm9wIGVsZW1lbnQgaXMgbm90IGZvdW5kLiBDcm9wcGluZyB3aWxsIGJlIGRpc2FibGVkIik7Ci0rICAgIH0gZWxzZSB7Ci0rICAgICAgaWYgKCFjcmVhdGVfZWxlbWVudCAoInZpZGVvY29udmVydCIsICZjc3AyLCAmZXJyb3IpKQotKyAgICAgICAgZ290byBub19lbGVtZW50czsKLSsgICAgfQotKyAgfQotKwotICAgLyogdmlkZW9zY2FsZSBpcyBoZXJlIHRvIGNvcnJlY3QgZm9yIHRoZSBwaXhlbC1hc3BlY3QtcmF0aW8gZm9yIHVzICovCi0gICBHU1RfREVCVUcgKCJjcmVhdGluZyBlbGVtZW50cyIpOwotICAgaWYgKCFjcmVhdGVfZWxlbWVudCAoImFwcHNyYyIsICZzcmMsICZlcnJvcikgfHwKLUBAIC0xMzMsMTUgKzE0NCw0MiBAQCBidWlsZF9jb252ZXJ0X2ZyYW1lX3BpcGVsaW5lIChHc3RFbGVtZW50ICoqIHNyY19lbGVtZW50LAotIAotICAgR1NUX0RFQlVHICgiYWRkaW5nIGVsZW1lbnRzIik7Ci0gICBnc3RfYmluX2FkZF9tYW55IChHU1RfQklOIChwaXBlbGluZSksIHNyYywgY3NwLCB2c2NhbGUsIHNpbmssIE5VTEwpOwotKyAgaWYgKHZjcm9wKQotKyAgICBnc3RfYmluX2FkZF9tYW55IChHU1RfQklOIChwaXBlbGluZSksIHZjcm9wLCBjc3AyLCBOVUxMKTsKLSAKLSAgIC8qIHNldCBjYXBzICovCi0gICBnX29iamVjdF9zZXQgKHNyYywgImNhcHMiLCBmcm9tX2NhcHMsIE5VTEwpOwotKyAgaWYgKHZjcm9wKSB7Ci0rICAgIGdzdF92aWRlb19pbmZvX2Zyb21fY2FwcyAoJmluZm8sIGZyb21fY2Fwcyk7Ci0rICAgIGdfb2JqZWN0X3NldCAodmNyb3AsICJsZWZ0IiwgY21ldGEtPngsIE5VTEwpOwotKyAgICBnX29iamVjdF9zZXQgKHZjcm9wLCAidG9wIiwgY21ldGEtPnksIE5VTEwpOwotKyAgICBnX29iamVjdF9zZXQgKHZjcm9wLCAicmlnaHQiLCBHU1RfVklERU9fSU5GT19XSURUSCAoJmluZm8pIC0gY21ldGEtPndpZHRoLAotKyAgICAgICAgTlVMTCk7Ci0rICAgIGdfb2JqZWN0X3NldCAodmNyb3AsICJib3R0b20iLAotKyAgICAgICAgR1NUX1ZJREVPX0lORk9fSEVJR0hUICgmaW5mbykgLSBjbWV0YS0+aGVpZ2h0LCBOVUxMKTsKLSsgICAgR1NUX0RFQlVHICgiY3JvcCBtZXRhIFt4LHksd2lkdGgsaGVpZ2h0XTogJWQgJWQgJWQgJWQiLCBjbWV0YS0+eCwgY21ldGEtPnksCi0rICAgICAgICBjbWV0YS0+d2lkdGgsIGNtZXRhLT5oZWlnaHQpOwotKyAgfQotICAgZ19vYmplY3Rfc2V0IChzaW5rLCAiY2FwcyIsIHRvX2NhcHMsIE5VTEwpOwotIAotICAgLyogRklYTUU6IGxpbmtpbmcgaXMgc3RpbGwgd2F5IHRvbyBleHBlbnNpdmUsIHByb2ZpbGUgdGhpcyBwcm9wZXJseSAqLwotLSAgR1NUX0RFQlVHICgibGlua2luZyBzcmMtPmNzcCIpOwotLSAgaWYgKCFnc3RfZWxlbWVudF9saW5rX3BhZHMgKHNyYywgInNyYyIsIGNzcCwgInNpbmsiKSkKLS0gICAgZ290byBsaW5rX2ZhaWxlZDsKLSsgIGlmICh2Y3JvcCkgewotKyAgICBHU1RfREVCVUcgKCJsaW5raW5nIHNyYy0+Y3NwMiIpOwotKyAgICBpZiAoIWdzdF9lbGVtZW50X2xpbmtfcGFkcyAoc3JjLCAic3JjIiwgY3NwMiwgInNpbmsiKSkKLSsgICAgICBnb3RvIGxpbmtfZmFpbGVkOwotKwotKyAgICBHU1RfREVCVUcgKCJsaW5raW5nIGNzcDItPnZjcm9wIik7Ci0rICAgIGlmICghZ3N0X2VsZW1lbnRfbGlua19wYWRzIChjc3AyLCAic3JjIiwgdmNyb3AsICJzaW5rIikpCi0rICAgICAgZ290byBsaW5rX2ZhaWxlZDsKLSsKLSsgICAgR1NUX0RFQlVHICgibGlua2luZyB2Y3JvcC0+Y3NwIik7Ci0rICAgIGlmICghZ3N0X2VsZW1lbnRfbGlua19wYWRzICh2Y3JvcCwgInNyYyIsIGNzcCwgInNpbmsiKSkKLSsgICAgICBnb3RvIGxpbmtfZmFpbGVkOwotKyAgfSBlbHNlIHsKLSsgICAgR1NUX0RFQlVHICgibGlua2luZyBzcmMtPmNzcCIpOwotKyAgICBpZiAoIWdzdF9lbGVtZW50X2xpbmtfcGFkcyAoc3JjLCAic3JjIiwgY3NwLCAic2luayIpKQotKyAgICAgIGdvdG8gbGlua19mYWlsZWQ7Ci0rICB9Ci0gCi0gICBHU1RfREVCVUcgKCJsaW5raW5nIGNzcC0+dnNjYWxlIik7Ci0gICBpZiAoIWdzdF9lbGVtZW50X2xpbmtfcGFkc19mdWxsIChjc3AsICJzcmMiLCB2c2NhbGUsICJzaW5rIiwKLUBAIC0xOTMsOCArMjMxLDEyIEBAIG5vX2VsZW1lbnRzOgotICAgewotICAgICBpZiAoc3JjKQotICAgICAgIGdzdF9vYmplY3RfdW5yZWYgKHNyYyk7Ci0rICAgIGlmICh2Y3JvcCkKLSsgICAgICBnc3Rfb2JqZWN0X3VucmVmICh2Y3JvcCk7Ci0gICAgIGlmIChjc3ApCi0gICAgICAgZ3N0X29iamVjdF91bnJlZiAoY3NwKTsKLSsgICAgaWYgKGNzcDIpCi0rICAgICAgZ3N0X29iamVjdF91bnJlZiAoY3NwMik7Ci0gICAgIGlmICh2c2NhbGUpCi0gICAgICAgZ3N0X29iamVjdF91bnJlZiAodnNjYWxlKTsKLSAgICAgaWYgKHNpbmspCi1AQCAtMjA5LDcgKzI1MSwxMSBAQCBub19lbGVtZW50czoKLSBub19waXBlbGluZToKLSAgIHsKLSAgICAgZ3N0X29iamVjdF91bnJlZiAoc3JjKTsKLSsgICAgaWYgKHZjcm9wKQotKyAgICAgIGdzdF9vYmplY3RfdW5yZWYgKHZjcm9wKTsKLSAgICAgZ3N0X29iamVjdF91bnJlZiAoY3NwKTsKLSsgICAgaWYgKGNzcDIpCi0rICAgICAgZ3N0X29iamVjdF91bnJlZiAoY3NwMik7Ci0gICAgIGdzdF9vYmplY3RfdW5yZWYgKHZzY2FsZSk7Ci0gICAgIGdzdF9vYmplY3RfdW5yZWYgKHNpbmspOwotIAotQEAgLTI4Miw3ICszMjgsOCBAQCBnc3RfdmlkZW9fY29udmVydF9zYW1wbGUgKEdzdFNhbXBsZSAqIHNhbXBsZSwgY29uc3QgR3N0Q2FwcyAqIHRvX2NhcHMsCi0gICB9Ci0gCi0gICBwaXBlbGluZSA9Ci0tICAgICAgYnVpbGRfY29udmVydF9mcmFtZV9waXBlbGluZSAoJnNyYywgJnNpbmssIGZyb21fY2FwcywgdG9fY2Fwc19jb3B5LCAmZXJyKTsKLSsgICAgICBidWlsZF9jb252ZXJ0X2ZyYW1lX3BpcGVsaW5lICgmc3JjLCAmc2luaywgZnJvbV9jYXBzLAotKyAgICAgIGdzdF9idWZmZXJfZ2V0X3ZpZGVvX2Nyb3BfbWV0YSAoYnVmKSwgdG9fY2Fwc19jb3B5LCAmZXJyKTsKLSAgIGlmICghcGlwZWxpbmUpCi0gICAgIGdvdG8gbm9fcGlwZWxpbmU7Ci0gCi1AQCAtNjQ2LDggKzY5Myw4IEBAIGdzdF92aWRlb19jb252ZXJ0X3NhbXBsZV9hc3luYyAoR3N0U2FtcGxlICogc2FtcGxlLAotICAgfQotIAotICAgcGlwZWxpbmUgPQotLSAgICAgIGJ1aWxkX2NvbnZlcnRfZnJhbWVfcGlwZWxpbmUgKCZzcmMsICZzaW5rLCBmcm9tX2NhcHMsIHRvX2NhcHNfY29weSwKLS0gICAgICAmZXJyb3IpOwotKyAgICAgIGJ1aWxkX2NvbnZlcnRfZnJhbWVfcGlwZWxpbmUgKCZzcmMsICZzaW5rLCBmcm9tX2NhcHMsCi0rICAgICAgZ3N0X2J1ZmZlcl9nZXRfdmlkZW9fY3JvcF9tZXRhIChidWYpLCB0b19jYXBzX2NvcHksICZlcnJvcik7Ci0gICBpZiAoIXBpcGVsaW5lKQotICAgICBnb3RvIG5vX3BpcGVsaW5lOwotIAotLS0gCi0yLjUuMAotCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvZ3N0cmVhbWVyL2dzdHJlYW1lcjEuMC1wbHVnaW5zLWJhc2UvZW5jb2RlYmluLU5lZWQtbW9yZS1idWZmZXJzLWluLW91dHB1dC1xdWV1ZS1mb3ItYmV0dC5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9nc3RyZWFtZXIvZ3N0cmVhbWVyMS4wLXBsdWdpbnMtYmFzZS9lbmNvZGViaW4tTmVlZC1tb3JlLWJ1ZmZlcnMtaW4tb3V0cHV0LXF1ZXVlLWZvci1iZXR0LnBhdGNoCmluZGV4IDMyNTY3MTcuLjUzNDFlM2MgMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9nc3RyZWFtZXIvZ3N0cmVhbWVyMS4wLXBsdWdpbnMtYmFzZS9lbmNvZGViaW4tTmVlZC1tb3JlLWJ1ZmZlcnMtaW4tb3V0cHV0LXF1ZXVlLWZvci1iZXR0LnBhdGNoCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9nc3RyZWFtZXIvZ3N0cmVhbWVyMS4wLXBsdWdpbnMtYmFzZS9lbmNvZGViaW4tTmVlZC1tb3JlLWJ1ZmZlcnMtaW4tb3V0cHV0LXF1ZXVlLWZvci1iZXR0LnBhdGNoCkBAIC0xNyw3ICsxNyw3IEBACiBpbmRleCA2NzI4ZTU4Li4zMmRhYWU0IDEwMDY0NAogLS0tIGEvZ3N0L2VuY29kaW5nL2dzdGVuY29kZWJpbi5jCiArKysgYi9nc3QvZW5jb2RpbmcvZ3N0ZW5jb2RlYmluLmMKLUBAIC0xMTM4LDggKzExMzgsNyBAQCBfY3JlYXRlX3N0cmVhbV9ncm91cCAoR3N0RW5jb2RlQmluICogZWJpbiwgR3N0RW5jb2RpbmdQcm9maWxlICogc3Byb2YsCitAQCAtMTIyOCw4ICsxMjI4LDcgQEAgX2NyZWF0ZV9zdHJlYW1fZ3JvdXAgKEdzdEVuY29kZUJpbiAqIGViaW4sIEdzdEVuY29kaW5nUHJvZmlsZSAqIHNwcm9mLAogICAgICogV2Ugb25seSB1c2UgYSAxYnVmZmVyIGxvbmcgcXVldWUgaGVyZSwgdGhlIGFjdHVhbCBxdWV1ZWluZyB3aWxsIGJlIGRvbmUKICAgICAqIGluIHRoZSBpbnB1dCBxdWV1ZSAqLwogICAgbGFzdCA9IHNncm91cC0+b3V0cXVldWUgPSBnc3RfZWxlbWVudF9mYWN0b3J5X21ha2UgKCJxdWV1ZSIsIE5VTEwpOwpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2dzdHJlYW1lci9nc3RyZWFtZXIxLjAtcGx1Z2lucy1iYXNlL2dldC1jYXBzLWZyb20tc3JjLXBhZC13aGVuLXF1ZXJ5LWNhcHMucGF0Y2ggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvZ3N0cmVhbWVyL2dzdHJlYW1lcjEuMC1wbHVnaW5zLWJhc2UvZ2V0LWNhcHMtZnJvbS1zcmMtcGFkLXdoZW4tcXVlcnktY2Fwcy5wYXRjaAppbmRleCAyODRhYmJlLi5jOGU2Mjg3IDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvZ3N0cmVhbWVyL2dzdHJlYW1lcjEuMC1wbHVnaW5zLWJhc2UvZ2V0LWNhcHMtZnJvbS1zcmMtcGFkLXdoZW4tcXVlcnktY2Fwcy5wYXRjaAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvZ3N0cmVhbWVyL2dzdHJlYW1lcjEuMC1wbHVnaW5zLWJhc2UvZ2V0LWNhcHMtZnJvbS1zcmMtcGFkLXdoZW4tcXVlcnktY2Fwcy5wYXRjaApAQCAtMTksNyArMTksNyBAQAogaW5kZXggOWI2YzQ3OC4uYWUyMjk0YQogLS0tIGEvZ3N0LWxpYnMvZ3N0L3RhZy9nc3R0YWdkZW11eC5jCiArKysgYi9nc3QtbGlicy9nc3QvdGFnL2dzdHRhZ2RlbXV4LmMKLUBAIC0xNzA4LDYgKzE3MDgsMTkgQEAgZ3N0X3RhZ19kZW11eF9wYWRfcXVlcnkgKEdzdFBhZCAqIHBhZCwgR3N0T2JqZWN0ICogcGFyZW50LCBHc3RRdWVyeSAqIHF1ZXJ5KQorQEAgLTE3NjksNiArMTc2OSwxOSBAQCBnc3RfdGFnX2RlbXV4X3BhZF9xdWVyeSAoR3N0UGFkICogcGFkLCBHc3RPYmplY3QgKiBwYXJlbnQsIEdzdFF1ZXJ5ICogcXVlcnkpCiAgICAgICAgfQogICAgICAgIGJyZWFrOwogICAgICB9CmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvZ3N0cmVhbWVyL2dzdHJlYW1lcjEuMC1wbHVnaW5zLWJhc2UvbWFrZS1naW9fdW5peF8yXzAtZGVwZW5kZW5jeS1jb25maWd1cmFibGUucGF0Y2ggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvZ3N0cmVhbWVyL2dzdHJlYW1lcjEuMC1wbHVnaW5zLWJhc2UvbWFrZS1naW9fdW5peF8yXzAtZGVwZW5kZW5jeS1jb25maWd1cmFibGUucGF0Y2gKaW5kZXggMDFlOTQ0ZC4uNDEzZWZmMCAxMDA2NDQKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2dzdHJlYW1lci9nc3RyZWFtZXIxLjAtcGx1Z2lucy1iYXNlL21ha2UtZ2lvX3VuaXhfMl8wLWRlcGVuZGVuY3ktY29uZmlndXJhYmxlLnBhdGNoCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9nc3RyZWFtZXIvZ3N0cmVhbWVyMS4wLXBsdWdpbnMtYmFzZS9tYWtlLWdpb191bml4XzJfMC1kZXBlbmRlbmN5LWNvbmZpZ3VyYWJsZS5wYXRjaApAQCAtMjUsOCArMjUsOCBAQAogaW5kZXggOWM1MmFlYi4uMjZjYWNkNiAxMDA2NDQKIC0tLSBhL2NvbmZpZ3VyZS5hYwogKysrIGIvY29uZmlndXJlLmFjCi1AQCAtNzQ3LDkgKzc0NywxNiBAQCBBQ19TVUJTVChGVDJfQ0ZMQUdTKQotIEFDX1NVQlNUKEZUMl9MSUJTKQorQEAgLTc1Miw5ICs3NTIsMTYgQEAgQUNfU1VCU1QoRlQyX0NGTEFHUykKKyBmaSBkbmwgb2YgRVhUIHBsdWdpbnMKICAKICBkbmwgKioqIGdpby11bml4LTIuMCBmb3IgdGVzdHMvY2hlY2svcGlwZWxpbmVzL3RjcC5jICoqKgogK0FDX0FSR19FTkFCTEUoW2dpb191bml4XzJfMF0sCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvZ3N0cmVhbWVyL2dzdHJlYW1lcjEuMC1wbHVnaW5zLWJhc2VfMS42LjMuYmIgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvZ3N0cmVhbWVyL2dzdHJlYW1lcjEuMC1wbHVnaW5zLWJhc2VfMS42LjMuYmIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQyOWRjOTMuLjAwMDAwMDAKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2dzdHJlYW1lci9nc3RyZWFtZXIxLjAtcGx1Z2lucy1iYXNlXzEuNi4zLmJiCisrKyAvZGV2L251bGwKQEAgLTEsMjUgKzAsMCBAQAotaW5jbHVkZSBnc3RyZWFtZXIxLjAtcGx1Z2lucy1iYXNlLmluYwotCi1MSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT1jNTRjZTkzNDU3MjcxNzVmZjY2ZDE3YjY3ZmY1MWY1OCBcCi0gICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9DT1BZSU5HLkxJQjttZDU9Njc2MmVkNDQyYjM4MjIzODdhNTFjOTJkOTI4ZWFkMGQgXAotICAgICAgICAgICAgICAgICAgICBmaWxlOi8vY29tbW9uL2NvdmVyYWdlL2NvdmVyYWdlLXJlcG9ydC5wbDtiZWdpbmxpbmU9MjtlbmRsaW5lPTE3O21kNT1hNGUxODMwZmNlMDc4MDI4YzhmMDk3NDE2MTI3MjYwNyIKLQotIyBOb3RlOiBUaGUgZGVwZW5kZW5jeSBvbiBmcmVldHlwZSB3YXMgZHJvcHBlZCBzaG9ydGx5IGFmdGVyIHRoZSAxLjcuMSByZWxlYXNlCi0jIHNvIHRoZXNlIGxpbmVzIHNob3VsZCBiZSByZW1vdmVkIGR1cmluZyB0aGUgdXBkYXRlIHRvIDEuOC54Ci0jIGh0dHA6Ly9jZ2l0LmZyZWVkZXNrdG9wLm9yZy9nc3RyZWFtZXIvZ3N0LXBsdWdpbnMtYmFzZS9jb21taXQvP2lkPTE4MzYxMGMwMzVkZDY5NTVjOWIzNTQwYjk0MGFlYzUwNDc0YWYwMzEKLURFUEVORFMgKz0gImZyZWV0eXBlIgotRVhUUkFfT0VDT05GICs9ICItLWRpc2FibGUtZnJlZXR5cGV0ZXN0IgotCi1TUkNfVVJJID0gIiBcCi0gICAgaHR0cDovL2dzdHJlYW1lci5mcmVlZGVza3RvcC5vcmcvc3JjL2dzdC1wbHVnaW5zLWJhc2UvZ3N0LXBsdWdpbnMtYmFzZS0ke1BWfS50YXIueHogXAotICAgIGZpbGU6Ly9nZXQtY2Fwcy1mcm9tLXNyYy1wYWQtd2hlbi1xdWVyeS1jYXBzLnBhdGNoIFwKLSAgICBmaWxlOi8vMDAwMy1zc2FwYXJzZS1lbmhhbmNlLVNTQS10ZXh0LWxpbmVzLXBhcnNpbmcucGF0Y2ggXAotICAgIGZpbGU6Ly8wMDA0LXN1YnBhcnNlLXNldC1uZWVkX3NlZ21lbnQtYWZ0ZXItc2luay1wYWQtcmVjZWl2ZWQtR1MucGF0Y2ggXAotICAgIGZpbGU6Ly9lbmNvZGViaW4tTmVlZC1tb3JlLWJ1ZmZlcnMtaW4tb3V0cHV0LXF1ZXVlLWZvci1iZXR0LnBhdGNoIFwKLSAgICBmaWxlOi8vMDAwNS1jb252ZXJ0ZnJhbWUtU3VwcG9ydC12aWRlby1jcm9wLXdoZW4tY29udmVydC1mcmFtZS5wYXRjaCBcCi0iCi0KLVNSQ19VUklbbWQ1c3VtXSA9ICIzZGRkZTBhZDU5OGVmNjlmNThkNmEyZTg3ZjhiNDYwZiIKLVNSQ19VUklbc2hhMjU2c3VtXSA9ICJiNjE1NGY4ZmRiYTQ4NzdlOTVlZmQ5NDYxMGVmMGFkYTRmMDE3MWNkMTJlYjgyOWEzYzNjOTczNDVkOWM3YTc1IgotCi1TID0gIiR7V09SS0RJUn0vZ3N0LXBsdWdpbnMtYmFzZS0ke1BWfSIKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9nc3RyZWFtZXIvZ3N0cmVhbWVyMS4wLXBsdWdpbnMtYmFzZV8xLjguMy5iYiBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9nc3RyZWFtZXIvZ3N0cmVhbWVyMS4wLXBsdWdpbnMtYmFzZV8xLjguMy5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45ODZiNWFjCi0tLSAvZGV2L251bGwKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2dzdHJlYW1lci9nc3RyZWFtZXIxLjAtcGx1Z2lucy1iYXNlXzEuOC4zLmJiCkBAIC0wLDAgKzEsMTkgQEAKK2luY2x1ZGUgZ3N0cmVhbWVyMS4wLXBsdWdpbnMtYmFzZS5pbmMKKworTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9YzU0Y2U5MzQ1NzI3MTc1ZmY2NmQxN2I2N2ZmNTFmNTggXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vQ09QWUlORy5MSUI7bWQ1PTY3NjJlZDQ0MmIzODIyMzg3YTUxYzkyZDkyOGVhZDBkIFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL2NvbW1vbi9jb3ZlcmFnZS9jb3ZlcmFnZS1yZXBvcnQucGw7YmVnaW5saW5lPTI7ZW5kbGluZT0xNzttZDU9YTRlMTgzMGZjZTA3ODAyOGM4ZjA5NzQxNjEyNzI2MDciCisKK1NSQ19VUkkgPSAiIFwKKyAgICBodHRwOi8vZ3N0cmVhbWVyLmZyZWVkZXNrdG9wLm9yZy9zcmMvZ3N0LXBsdWdpbnMtYmFzZS9nc3QtcGx1Z2lucy1iYXNlLSR7UFZ9LnRhci54eiBcCisgICAgZmlsZTovL2dldC1jYXBzLWZyb20tc3JjLXBhZC13aGVuLXF1ZXJ5LWNhcHMucGF0Y2ggXAorICAgIGZpbGU6Ly8wMDAzLXNzYXBhcnNlLWVuaGFuY2UtU1NBLXRleHQtbGluZXMtcGFyc2luZy5wYXRjaCBcCisgICAgZmlsZTovLzAwMDQtc3VicGFyc2Utc2V0LW5lZWRfc2VnbWVudC1hZnRlci1zaW5rLXBhZC1yZWNlaXZlZC1HUy5wYXRjaCBcCisgICAgZmlsZTovL2VuY29kZWJpbi1OZWVkLW1vcmUtYnVmZmVycy1pbi1vdXRwdXQtcXVldWUtZm9yLWJldHQucGF0Y2ggXAorICAgIGZpbGU6Ly9tYWtlLWdpb191bml4XzJfMC1kZXBlbmRlbmN5LWNvbmZpZ3VyYWJsZS5wYXRjaCBcCisiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICI0ZDAzZGQ4MTgyOGVhNmI5OGE0NGM4ZjFhYjdmNDk3NiIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICIxMTQ4NzFkNGQ2MzYwNmI0YWY0MjRhODQzM2NkOTIzZTRmZjY2ODk2YjI0NGJiN2FjOTdiOWRhNDdmNzFlNzllIgorCitTID0gIiR7V09SS0RJUn0vZ3N0LXBsdWdpbnMtYmFzZS0ke1BWfSIKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9nc3RyZWFtZXIvZ3N0cmVhbWVyMS4wLXBsdWdpbnMtYmFzZV9naXQuYmIgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvZ3N0cmVhbWVyL2dzdHJlYW1lcjEuMC1wbHVnaW5zLWJhc2VfZ2l0LmJiCmluZGV4IDM4YTlmY2MuLjNjMmI1MDQgMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9nc3RyZWFtZXIvZ3N0cmVhbWVyMS4wLXBsdWdpbnMtYmFzZV9naXQuYmIKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2dzdHJlYW1lci9nc3RyZWFtZXIxLjAtcGx1Z2lucy1iYXNlX2dpdC5iYgpAQCAtNywxNyArNywyMSBAQAogICAgICAgICAgICAgICAgICAgICBmaWxlOi8vY29tbW9uL2NvdmVyYWdlL2NvdmVyYWdlLXJlcG9ydC5wbDtiZWdpbmxpbmU9MjtlbmRsaW5lPTE3O21kNT1hNGUxODMwZmNlMDc4MDI4YzhmMDk3NDE2MTI3MjYwNyIKIAogU1JDX1VSSSA9ICIgXAotICAgIGdpdDovL2Fub25naXQuZnJlZWRlc2t0b3Aub3JnL2dzdHJlYW1lci9nc3QtcGx1Z2lucy1iYXNlO25hbWU9YmFzZSBcCisgICAgZ2l0Oi8vYW5vbmdpdC5mcmVlZGVza3RvcC5vcmcvZ3N0cmVhbWVyL2dzdC1wbHVnaW5zLWJhc2U7YnJhbmNoPTEuODtuYW1lPWJhc2UgXAogICAgIGdpdDovL2Fub25naXQuZnJlZWRlc2t0b3Aub3JnL2dzdHJlYW1lci9jb21tb247ZGVzdHN1ZmZpeD1naXQvY29tbW9uO25hbWU9Y29tbW9uIFwKKyAgICBmaWxlOi8vZ2V0LWNhcHMtZnJvbS1zcmMtcGFkLXdoZW4tcXVlcnktY2Fwcy5wYXRjaCBcCisgICAgZmlsZTovLzAwMDMtc3NhcGFyc2UtZW5oYW5jZS1TU0EtdGV4dC1saW5lcy1wYXJzaW5nLnBhdGNoIFwKKyAgICBmaWxlOi8vMDAwNC1zdWJwYXJzZS1zZXQtbmVlZF9zZWdtZW50LWFmdGVyLXNpbmstcGFkLXJlY2VpdmVkLUdTLnBhdGNoIFwKKyAgICBmaWxlOi8vZW5jb2RlYmluLU5lZWQtbW9yZS1idWZmZXJzLWluLW91dHB1dC1xdWV1ZS1mb3ItYmV0dC5wYXRjaCBcCiAgICAgZmlsZTovL21ha2UtZ2lvX3VuaXhfMl8wLWRlcGVuZGVuY3ktY29uZmlndXJhYmxlLnBhdGNoIFwKICIKIAotUFYgPSAiMS43LjIrZ2l0JHtTUkNQVn0iCitQViA9ICIxLjguMitnaXQke1NSQ1BWfSIKIAogVVBTVFJFQU1fQ0hFQ0tfR0lUVEFHUkVHRVggPSAiKD9QPHB2ZXI+KFxkKyhcLlxkKykrKSkiCiAKLVNSQ1JFVl9iYXNlID0gIjk3ZTEwOGJlYmFhNTg4MjFmNDU2NmE3NGNiZjAxMzVlOTM0MDdjMDEiCi1TUkNSRVZfY29tbW9uID0gImI2NGYwM2Y2MDkwMjQ1NjI0NjA4YmViNWQyZmZmMzM1ZTIzYTAxYzAiCitTUkNSRVZfYmFzZSA9ICI3MGYzNzUwNzczYmY1ZGJhNDA5OGY2ZDcyZDYzYWE2Yzg0ZjFmNTM5IgorU1JDUkVWX2NvbW1vbiA9ICJmMzYzYjMyMDU2NThhMzhlODRmYTc3ZjE5ZGVlMjE4Y2Q0NDQ1Mjc1IgogU1JDUkVWX0ZPUk1BVCA9ICJiYXNlIgogCiBTID0gIiR7V09SS0RJUn0vZ2l0IgpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2dzdHJlYW1lci9nc3RyZWFtZXIxLjAtcGx1Z2lucy1nb29kLmluYyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9nc3RyZWFtZXIvZ3N0cmVhbWVyMS4wLXBsdWdpbnMtZ29vZC5pbmMKaW5kZXggNDYyMWJmOC4uZjFlMzBhYiAxMDA2NDQKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2dzdHJlYW1lci9nc3RyZWFtZXIxLjAtcGx1Z2lucy1nb29kLmluYworKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvZ3N0cmVhbWVyL2dzdHJlYW1lcjEuMC1wbHVnaW5zLWdvb2QuaW5jCkBAIC0yMywxMiArMjMsMTIgQEAKIFBBQ0tBR0VDT05GSUdbamFja10gICAgICAgPSAiLS1lbmFibGUtamFjaywtLWRpc2FibGUtamFjayxqYWNrIgogUEFDS0FHRUNPTkZJR1tqcGVnXSAgICAgICA9ICItLWVuYWJsZS1qcGVnLC0tZGlzYWJsZS1qcGVnLGpwZWciCiBQQUNLQUdFQ09ORklHW2xpYnBuZ10gICAgID0gIi0tZW5hYmxlLWxpYnBuZywtLWRpc2FibGUtbGlicG5nLGxpYnBuZyIKLVBBQ0tBR0VDT05GSUdbbGlidjRsMl0gICAgPSAiLS13aXRoLWxpYnY0bDIsLS13aXRob3V0LWxpYnY0bDIsbGlidjRsMiIKK1BBQ0tBR0VDT05GSUdbbGlidjRsMl0gICAgPSAiLS13aXRoLWxpYnY0bDIsLS13aXRob3V0LWxpYnY0bDIsdjRsLXV0aWxzIgogUEFDS0FHRUNPTkZJR1twdWxzZWF1ZGlvXSA9ICItLWVuYWJsZS1wdWxzZSwtLWRpc2FibGUtcHVsc2UscHVsc2VhdWRpbyIKIFBBQ0tBR0VDT05GSUdbc291cF0gICAgICAgPSAiLS1lbmFibGUtc291cCwtLWRpc2FibGUtc291cCxsaWJzb3VwLTIuNCIKIFBBQ0tBR0VDT05GSUdbc3BlZXhdICAgICAgPSAiLS1lbmFibGUtc3BlZXgsLS1kaXNhYmxlLXNwZWV4LHNwZWV4IgogUEFDS0FHRUNPTkZJR1t0YWdsaWJdICAgICA9ICItLWVuYWJsZS10YWdsaWIsLS1kaXNhYmxlLXRhZ2xpYix0YWdsaWIiCi1QQUNLQUdFQ09ORklHW3Y0bDJdICAgICAgID0gIi0tZW5hYmxlLWdzdF92NGwyLC0tZGlzYWJsZS1nc3RfdjRsMiIKK1BBQ0tBR0VDT05GSUdbdjRsMl0gICAgICAgPSAiLS1lbmFibGUtZ3N0X3Y0bDIgLS1lbmFibGUtdjRsMi1wcm9iZSwtLWRpc2FibGUtZ3N0X3Y0bDIiCiBQQUNLQUdFQ09ORklHW3ZweF0gICAgICAgID0gIi0tZW5hYmxlLXZweCwtLWRpc2FibGUtdnB4LGxpYnZweCIKIFBBQ0tBR0VDT05GSUdbd2F2cGFja10gICAgPSAiLS1lbmFibGUtd2F2cGFjaywtLWRpc2FibGUtd2F2cGFjayx3YXZwYWNrIgogUEFDS0FHRUNPTkZJR1t4MTFdICAgICAgICA9ICItLWVuYWJsZS14LC0tZGlzYWJsZS14LCR7WDExREVQRU5EU30iCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvZ3N0cmVhbWVyL2dzdHJlYW1lcjEuMC1wbHVnaW5zLWdvb2QvMDAwMS1nc3RydHBtcDRncGF5LXNldC1kYWZhdWx0LXZhbHVlLWZvci1NUEVHNC13aXRob3V0LWNvLnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2dzdHJlYW1lci9nc3RyZWFtZXIxLjAtcGx1Z2lucy1nb29kLzAwMDEtZ3N0cnRwbXA0Z3BheS1zZXQtZGFmYXVsdC12YWx1ZS1mb3ItTVBFRzQtd2l0aG91dC1jby5wYXRjaApvbGQgbW9kZSAxMDA3NTUKbmV3IG1vZGUgMTAwNjQ0CmluZGV4IGQxOTczZDQuLmEyY2JiNzAKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2dzdHJlYW1lci9nc3RyZWFtZXIxLjAtcGx1Z2lucy1nb29kLzAwMDEtZ3N0cnRwbXA0Z3BheS1zZXQtZGFmYXVsdC12YWx1ZS1mb3ItTVBFRzQtd2l0aG91dC1jby5wYXRjaAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvZ3N0cmVhbWVyL2dzdHJlYW1lcjEuMC1wbHVnaW5zLWdvb2QvMDAwMS1nc3RydHBtcDRncGF5LXNldC1kYWZhdWx0LXZhbHVlLWZvci1NUEVHNC13aXRob3V0LWNvLnBhdGNoCkBAIC0xNyw3ICsxNyw3IEBACiBpbmRleCA3OTEzZDlhLi4xNzQ5ZDM5IDEwMDY0NAogLS0tIGEvZ3N0L3J0cC9nc3RydHBtcDRncGF5LmMKICsrKyBiL2dzdC9ydHAvZ3N0cnRwbXA0Z3BheS5jCi1AQCAtMzkwLDYgKzM5MCw3IEBAIGdzdF9ydHBfbXA0Z19wYXlfc2V0Y2FwcyAoR3N0UlRQQmFzZVBheWxvYWQgKiBwYXlsb2FkLCBHc3RDYXBzICogY2FwcykKK0BAIC0zOTEsNiArMzkxLDcgQEAgZ3N0X3J0cF9tcDRnX3BheV9zZXRjYXBzIChHc3RSVFBCYXNlUGF5bG9hZCAqIHBheWxvYWQsIEdzdENhcHMgKiBjYXBzKQogICAgY29uc3QgR1ZhbHVlICpjb2RlY19kYXRhOwogICAgY29uc3QgZ2NoYXIgKm1lZGlhX3R5cGUgPSBOVUxMOwogICAgZ2Jvb2xlYW4gcmVzOwpAQCAtMjUsNyArMjUsNyBAQAogIAogICAgcnRwbXA0Z3BheSA9IEdTVF9SVFBfTVA0R19QQVkgKHBheWxvYWQpOwogIAotQEAgLTQwMCw3ICs0MDEsNiBAQCBnc3RfcnRwX21wNGdfcGF5X3NldGNhcHMgKEdzdFJUUEJhc2VQYXlsb2FkICogcGF5bG9hZCwgR3N0Q2FwcyAqIGNhcHMpCitAQCAtNDAxLDcgKzQwMiw2IEBAIGdzdF9ydHBfbXA0Z19wYXlfc2V0Y2FwcyAoR3N0UlRQQmFzZVBheWxvYWQgKiBwYXlsb2FkLCBHc3RDYXBzICogY2FwcykKICAgICAgR1NUX0xPR19PQkpFQ1QgKHJ0cG1wNGdwYXksICJnb3QgY29kZWNfZGF0YSIpOwogICAgICBpZiAoR19WQUxVRV9UWVBFIChjb2RlY19kYXRhKSA9PSBHU1RfVFlQRV9CVUZGRVIpIHsKICAgICAgICBHc3RCdWZmZXIgKmJ1ZmZlcjsKQEAgLTMzLDcgKzMzLDcgQEAKICAKICAgICAgICBidWZmZXIgPSBnc3RfdmFsdWVfZ2V0X2J1ZmZlciAoY29kZWNfZGF0YSk7CiAgICAgICAgR1NUX0xPR19PQkpFQ1QgKHJ0cG1wNGdwYXksICJjb25maWd1cmluZyBjb2RlY19kYXRhIik7Ci1AQCAtNDI2LDYgKzQyNiwyMyBAQCBnc3RfcnRwX21wNGdfcGF5X3NldGNhcHMgKEdzdFJUUEJhc2VQYXlsb2FkICogcGF5bG9hZCwgR3N0Q2FwcyAqIGNhcHMpCitAQCAtNDI3LDYgKzQyNywyMyBAQCBnc3RfcnRwX21wNGdfcGF5X3NldGNhcHMgKEdzdFJUUEJhc2VQYXlsb2FkICogcGF5bG9hZCwgR3N0Q2FwcyAqIGNhcHMpCiAgCiAgICAgICAgcnRwbXA0Z3BheS0+Y29uZmlnID0gZ3N0X2J1ZmZlcl9jb3B5IChidWZmZXIpOwogICAgICB9CmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvZ3N0cmVhbWVyL2dzdHJlYW1lcjEuMC1wbHVnaW5zLWdvb2RfMS42LjMuYmIgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvZ3N0cmVhbWVyL2dzdHJlYW1lcjEuMC1wbHVnaW5zLWdvb2RfMS42LjMuYmIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDBiNGY0MzYuLjAwMDAwMDAKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2dzdHJlYW1lci9nc3RyZWFtZXIxLjAtcGx1Z2lucy1nb29kXzEuNi4zLmJiCisrKyAvZGV2L251bGwKQEAgLTEsMTUgKzAsMCBAQAotaW5jbHVkZSBnc3RyZWFtZXIxLjAtcGx1Z2lucy1nb29kLmluYwotCi1MSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT1hNmY4OWUyMTAwZDliNmNkZmZjZWE0ZjM5OGUzNzM0MyBcCi0gICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9jb21tb24vY292ZXJhZ2UvY292ZXJhZ2UtcmVwb3J0LnBsO2JlZ2lubGluZT0yO2VuZGxpbmU9MTc7bWQ1PWE0ZTE4MzBmY2UwNzgwMjhjOGYwOTc0MTYxMjcyNjA3IFwKLSAgICAgICAgICAgICAgICAgICAgZmlsZTovL2dzdC9yZXBsYXlnYWluL3JnYW5hbHlzaXMuYztiZWdpbmxpbmU9MTtlbmRsaW5lPTIzO21kNT1iNjBlYmVmZDViMmY1YThlMGNhYjZiZmVlMzkxYTVmZSIKLQotU1JDX1VSSSA9ICIgXAotICAgIGh0dHA6Ly9nc3RyZWFtZXIuZnJlZWRlc2t0b3Aub3JnL3NyYy9nc3QtcGx1Z2lucy1nb29kL2dzdC1wbHVnaW5zLWdvb2QtJHtQVn0udGFyLnh6IFwKLSAgICBmaWxlOi8vMDAwMS1nc3RydHBtcDRncGF5LXNldC1kYWZhdWx0LXZhbHVlLWZvci1NUEVHNC13aXRob3V0LWNvLnBhdGNoIFwKLSIKLQotU1JDX1VSSVttZDVzdW1dID0gImExOTU4ZGY3YWE0OThiNDI3OTNlMmYyMDQ4NjczODE1IgotU1JDX1VSSVtzaGEyNTZzdW1dID0gIjI0YjE5ZGI3MGIyYTgzNDYxZWJkZGZlMjAwMzNkYjQzMmRhZGZkYjVkNGI1NGZmYjFkZmEwZDgzMDEzNGExNzciCi0KLVMgPSAiJHtXT1JLRElSfS9nc3QtcGx1Z2lucy1nb29kLSR7UFZ9IgpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2dzdHJlYW1lci9nc3RyZWFtZXIxLjAtcGx1Z2lucy1nb29kXzEuOC4zLmJiIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2dzdHJlYW1lci9nc3RyZWFtZXIxLjAtcGx1Z2lucy1nb29kXzEuOC4zLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVjYzY1NzgKLS0tIC9kZXYvbnVsbAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvZ3N0cmVhbWVyL2dzdHJlYW1lcjEuMC1wbHVnaW5zLWdvb2RfMS44LjMuYmIKQEAgLTAsMCArMSwxNyBAQAoraW5jbHVkZSBnc3RyZWFtZXIxLjAtcGx1Z2lucy1nb29kLmluYworCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT1hNmY4OWUyMTAwZDliNmNkZmZjZWE0ZjM5OGUzNzM0MyBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9jb21tb24vY292ZXJhZ2UvY292ZXJhZ2UtcmVwb3J0LnBsO2JlZ2lubGluZT0yO2VuZGxpbmU9MTc7bWQ1PWE0ZTE4MzBmY2UwNzgwMjhjOGYwOTc0MTYxMjcyNjA3IFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL2dzdC9yZXBsYXlnYWluL3JnYW5hbHlzaXMuYztiZWdpbmxpbmU9MTtlbmRsaW5lPTIzO21kNT1iNjBlYmVmZDViMmY1YThlMGNhYjZiZmVlMzkxYTVmZSIKKworU1JDX1VSSSA9ICIgXAorICAgIGh0dHA6Ly9nc3RyZWFtZXIuZnJlZWRlc2t0b3Aub3JnL3NyYy9nc3QtcGx1Z2lucy1nb29kL2dzdC1wbHVnaW5zLWdvb2QtJHtQVn0udGFyLnh6IFwKKyAgICBmaWxlOi8vMDAwMS1nc3RydHBtcDRncGF5LXNldC1kYWZhdWx0LXZhbHVlLWZvci1NUEVHNC13aXRob3V0LWNvLnBhdGNoIFwKKyAgICBmaWxlOi8vYXZvaWQtaW5jbHVkaW5nLXN5cy1wb2xsLmgtZGlyZWN0bHkucGF0Y2ggXAorICAgIGZpbGU6Ly9lbnN1cmUtdmFsaWQtc2VudGluZWwtZm9yLWdzdF9zdHJ1Y3R1cmVfZ2V0LnBhdGNoIFwKKyIKKworU1JDX1VSSVttZDVzdW1dID0gIjQ3M2ViYjFmMTVjNjdkZTk5ZGRiNmU0ZDAyN2MwODc2IgorU1JDX1VSSVtzaGEyNTZzdW1dID0gImExZDY1NzliYTIwM2E3NzM0OTI3YzI0YjkwYmY2NTkwZDg0NmM1YTVmY2VjMDFhNDgyMDEwMThjOGFkMjgyN2EiCisKK1MgPSAiJHtXT1JLRElSfS9nc3QtcGx1Z2lucy1nb29kLSR7UFZ9IgpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2dzdHJlYW1lci9nc3RyZWFtZXIxLjAtcGx1Z2lucy1nb29kX2dpdC5iYiBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9nc3RyZWFtZXIvZ3N0cmVhbWVyMS4wLXBsdWdpbnMtZ29vZF9naXQuYmIKaW5kZXggOWNhZGM5YS4uOWI3OWFmMiAxMDA2NDQKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2dzdHJlYW1lci9nc3RyZWFtZXIxLjAtcGx1Z2lucy1nb29kX2dpdC5iYgorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvZ3N0cmVhbWVyL2dzdHJlYW1lcjEuMC1wbHVnaW5zLWdvb2RfZ2l0LmJiCkBAIC03LDE4ICs3LDE5IEBACiAgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9nc3QvcmVwbGF5Z2Fpbi9yZ2FuYWx5c2lzLmM7YmVnaW5saW5lPTE7ZW5kbGluZT0yMzttZDU9YjYwZWJlZmQ1YjJmNWE4ZTBjYWI2YmZlZTM5MWE1ZmUiCiAKIFNSQ19VUkkgPSAiIFwKLSAgICBnaXQ6Ly9hbm9uZ2l0LmZyZWVkZXNrdG9wLm9yZy9nc3RyZWFtZXIvZ3N0LXBsdWdpbnMtZ29vZDtuYW1lPWJhc2UgXAorICAgIGdpdDovL2Fub25naXQuZnJlZWRlc2t0b3Aub3JnL2dzdHJlYW1lci9nc3QtcGx1Z2lucy1nb29kO2JyYW5jaD0xLjg7bmFtZT1iYXNlIFwKICAgICBnaXQ6Ly9hbm9uZ2l0LmZyZWVkZXNrdG9wLm9yZy9nc3RyZWFtZXIvY29tbW9uO2Rlc3RzdWZmaXg9Z2l0L2NvbW1vbjtuYW1lPWNvbW1vbiBcCiAgICAgZmlsZTovL2F2b2lkLWluY2x1ZGluZy1zeXMtcG9sbC5oLWRpcmVjdGx5LnBhdGNoIFwKICAgICBmaWxlOi8vZW5zdXJlLXZhbGlkLXNlbnRpbmVsLWZvci1nc3Rfc3RydWN0dXJlX2dldC5wYXRjaCBcCisgICAgZmlsZTovLzAwMDEtZ3N0cnRwbXA0Z3BheS1zZXQtZGFmYXVsdC12YWx1ZS1mb3ItTVBFRzQtd2l0aG91dC1jby5wYXRjaCBcCiAiCiAKLVBWID0gIjEuNy4yK2dpdCR7U1JDUFZ9IgorUFYgPSAiMS44LjIrZ2l0JHtTUkNQVn0iCiAKIFVQU1RSRUFNX0NIRUNLX0dJVFRBR1JFR0VYID0gIig/UDxwdmVyPihcZCsoXC5cZCspKykpIgogCi1TUkNSRVZfYmFzZSA9ICIxYjZmZGNlNjdjMTVkNTk5NTdlMzk1YjE5NTdhYTYyNTMyMjA5MmQ0IgotU1JDUkVWX2NvbW1vbiA9ICJiNjRmMDNmNjA5MDI0NTYyNDYwOGJlYjVkMmZmZjMzNWUyM2EwMWMwIgorU1JDUkVWX2Jhc2UgPSAiOWY3M2I1ODE4Zjk4Y2QwNDVlNzA0OWJiMzEzZGExYzk0MzYzNTEwOSIKK1NSQ1JFVl9jb21tb24gPSAiZjM2M2IzMjA1NjU4YTM4ZTg0ZmE3N2YxOWRlZTIxOGNkNDQ0NTI3NSIKIFNSQ1JFVl9GT1JNQVQgPSAiYmFzZSIKIAogUyA9ICIke1dPUktESVJ9L2dpdCIKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9nc3RyZWFtZXIvZ3N0cmVhbWVyMS4wLXBsdWdpbnMtdWdseS5pbmMgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvZ3N0cmVhbWVyL2dzdHJlYW1lcjEuMC1wbHVnaW5zLXVnbHkuaW5jCmluZGV4IGFmZjIyMzAuLjcwOGFkN2EgMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9nc3RyZWFtZXIvZ3N0cmVhbWVyMS4wLXBsdWdpbnMtdWdseS5pbmMKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2dzdHJlYW1lci9nc3RyZWFtZXIxLjAtcGx1Z2lucy11Z2x5LmluYwpAQCAtOSw3ICs5LDcgQEAKIAogUEFDS0FHRUNPTkZJRyA/Pz0gIiBcCiAgICAgJHtHU1RSRUFNRVJfT1JDfSBcCi0gICAgYTUyZGVjIGxhbWUgbWFkIG1wZWcyZGVjIFwKKyAgICBhNTJkZWMgbGFtZSBtcGcxMjMgbXBlZzJkZWMgXAogIgogCiBQQUNLQUdFQ09ORklHW2E1MmRlY10gICA9ICItLWVuYWJsZS1hNTJkZWMsLS1kaXNhYmxlLWE1MmRlYyxsaWJhNTIiCkBAIC0yMCw2ICsyMCw3IEBACiBQQUNLQUdFQ09ORklHW2xhbWVdICAgICA9ICItLWVuYWJsZS1sYW1lLC0tZGlzYWJsZS1sYW1lLGxhbWUiCiBQQUNLQUdFQ09ORklHW21hZF0gICAgICA9ICItLWVuYWJsZS1tYWQsLS1kaXNhYmxlLW1hZCxsaWJtYWQiCiBQQUNLQUdFQ09ORklHW21wZWcyZGVjXSA9ICItLWVuYWJsZS1tcGVnMmRlYywtLWRpc2FibGUtbXBlZzJkZWMsbXBlZzJkZWMiCitQQUNLQUdFQ09ORklHW21wZzEyM10gICA9ICItLWVuYWJsZS1tcGcxMjMsLS1kaXNhYmxlLW1wZzEyMyxtcGcxMjMiCiBQQUNLQUdFQ09ORklHW3gyNjRdICAgICA9ICItLWVuYWJsZS14MjY0LC0tZGlzYWJsZS14MjY0LHgyNjQiCiAKIEVYVFJBX09FQ09ORiArPSAiIFwKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9nc3RyZWFtZXIvZ3N0cmVhbWVyMS4wLXBsdWdpbnMtdWdseV8xLjYuMy5iYiBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9nc3RyZWFtZXIvZ3N0cmVhbWVyMS4wLXBsdWdpbnMtdWdseV8xLjYuMy5iYgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggN2VkZmI4MS4uMDAwMDAwMAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvZ3N0cmVhbWVyL2dzdHJlYW1lcjEuMC1wbHVnaW5zLXVnbHlfMS42LjMuYmIKKysrIC9kZXYvbnVsbApAQCAtMSwxMyArMCwwIEBACi1pbmNsdWRlIGdzdHJlYW1lcjEuMC1wbHVnaW5zLXVnbHkuaW5jCi0KLUxJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PWE2Zjg5ZTIxMDBkOWI2Y2RmZmNlYTRmMzk4ZTM3MzQzIFwKLSAgICAgICAgICAgICAgICAgICAgZmlsZTovL3Rlc3RzL2NoZWNrL2VsZW1lbnRzL3hpbmdtdXguYztiZWdpbmxpbmU9MTtlbmRsaW5lPTIxO21kNT00Yzc3MWI4YWYxODg3MjQ4NTVjYjk5Y2FkZDM5MDA2OCIKLQotU1JDX1VSSSA9ICIgXAotICAgIGh0dHA6Ly9nc3RyZWFtZXIuZnJlZWRlc2t0b3Aub3JnL3NyYy9nc3QtcGx1Z2lucy11Z2x5L2dzdC1wbHVnaW5zLXVnbHktJHtQVn0udGFyLnh6IFwKLSIKLQotU1JDX1VSSVttZDVzdW1dID0gImRiZDkyYWZiMzgxNmNiZmE5MGFiMWYxOTcxNDRhMmUyIgotU1JDX1VSSVtzaGEyNTZzdW1dID0gIjJmZWNmN2I3Yzc4ODJmOGY2MmYxOTAwMDQ4ZjQwMTNmOThjMjE0ZmIzZDMzMDNkOGQ4MTIyNDViYjQxZmQwNjQiCi0KLVMgPSAiJHtXT1JLRElSfS9nc3QtcGx1Z2lucy11Z2x5LSR7UFZ9IgpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2dzdHJlYW1lci9nc3RyZWFtZXIxLjAtcGx1Z2lucy11Z2x5XzEuOC4zLmJiIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2dzdHJlYW1lci9nc3RyZWFtZXIxLjAtcGx1Z2lucy11Z2x5XzEuOC4zLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI3NDU5MzcKLS0tIC9kZXYvbnVsbAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvZ3N0cmVhbWVyL2dzdHJlYW1lcjEuMC1wbHVnaW5zLXVnbHlfMS44LjMuYmIKQEAgLTAsMCArMSwxMyBAQAoraW5jbHVkZSBnc3RyZWFtZXIxLjAtcGx1Z2lucy11Z2x5LmluYworCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT1hNmY4OWUyMTAwZDliNmNkZmZjZWE0ZjM5OGUzNzM0MyBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly90ZXN0cy9jaGVjay9lbGVtZW50cy94aW5nbXV4LmM7YmVnaW5saW5lPTE7ZW5kbGluZT0yMTttZDU9NGM3NzFiOGFmMTg4NzI0ODU1Y2I5OWNhZGQzOTAwNjgiCisKK1NSQ19VUkkgPSAiIFwKKyAgICBodHRwOi8vZ3N0cmVhbWVyLmZyZWVkZXNrdG9wLm9yZy9zcmMvZ3N0LXBsdWdpbnMtdWdseS9nc3QtcGx1Z2lucy11Z2x5LSR7UFZ9LnRhci54eiBcCisiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICI0ZmM2NmM3NzI1M2IwYWQ1Y2UyMjRiZGE2NTRiMmU3ZCIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICI2ZmEyNTk5ZmRkMDcyZDMxZmJhZjUwYzM0YWY0MDZlMmJlOTQ0YTAxMGIxZjRlYWI2N2E1ZmUzMmEwMzEwNjkzIgorCitTID0gIiR7V09SS0RJUn0vZ3N0LXBsdWdpbnMtdWdseS0ke1BWfSIKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9nc3RyZWFtZXIvZ3N0cmVhbWVyMS4wLXBsdWdpbnMtdWdseV9naXQuYmIgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvZ3N0cmVhbWVyL2dzdHJlYW1lcjEuMC1wbHVnaW5zLXVnbHlfZ2l0LmJiCmluZGV4IDY5YWZlNGMuLjIyY2NhM2EgMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9nc3RyZWFtZXIvZ3N0cmVhbWVyMS4wLXBsdWdpbnMtdWdseV9naXQuYmIKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2dzdHJlYW1lci9nc3RyZWFtZXIxLjAtcGx1Z2lucy11Z2x5X2dpdC5iYgpAQCAtNiwyNCArNiwyMCBAQAogICAgICAgICAgICAgICAgICAgICBmaWxlOi8vdGVzdHMvY2hlY2svZWxlbWVudHMveGluZ211eC5jO2JlZ2lubGluZT0xO2VuZGxpbmU9MjE7bWQ1PTRjNzcxYjhhZjE4ODcyNDg1NWNiOTljYWRkMzkwMDY4IgogCiBTUkNfVVJJID0gIiBcCi0gICAgZ2l0Oi8vYW5vbmdpdC5mcmVlZGVza3RvcC5vcmcvZ3N0cmVhbWVyL2dzdC1wbHVnaW5zLXVnbHk7bmFtZT1iYXNlIFwKKyAgICBnaXQ6Ly9hbm9uZ2l0LmZyZWVkZXNrdG9wLm9yZy9nc3RyZWFtZXIvZ3N0LXBsdWdpbnMtdWdseTticmFuY2g9MS44O25hbWU9YmFzZSBcCiAgICAgZ2l0Oi8vYW5vbmdpdC5mcmVlZGVza3RvcC5vcmcvZ3N0cmVhbWVyL2NvbW1vbjtkZXN0c3VmZml4PWdpdC9jb21tb247bmFtZT1jb21tb24gXAogIgogCi1QViA9ICIxLjcuMitnaXQke1NSQ1BWfSIKK1BWID0gIjEuOC4yK2dpdCR7U1JDUFZ9IgogCiBVUFNUUkVBTV9DSEVDS19HSVRUQUdSRUdFWCA9ICIoP1A8cHZlcj4oXGQrKFwuXGQrKSspKSIKIAotU1JDUkVWX2Jhc2UgPSAiOGJkYjY4ZWRiYzYwNWUyMTMxNGI2MDhlN2EzOWJkYmFhYjczMDJiOCIKLVNSQ1JFVl9jb21tb24gPSAiYjY0ZjAzZjYwOTAyNDU2MjQ2MDhiZWI1ZDJmZmYzMzVlMjNhMDFjMCIKK1NSQ1JFVl9iYXNlID0gIjc5ZmU0M2MwMDkyNTQ1NWEzN2ZhYjZmYzQyOGU3ZjA4NjU1YTliYmQiCitTUkNSRVZfY29tbW9uID0gImYzNjNiMzIwNTY1OGEzOGU4NGZhNzdmMTlkZWUyMThjZDQ0NDUyNzUiCiBTUkNSRVZfRk9STUFUID0gImJhc2UiCiAKIFMgPSAiJHtXT1JLRElSfS9naXQiCiAKLSMgVGhlIG1wZzEyMyBwbHVnaW4gd2FzIGFkZGVkIHByaW9yIHRvIHRoZSAxLjcuMiByZWxlYXNlCi0jIGh0dHBzOi8vY2dpdC5mcmVlZGVza3RvcC5vcmcvZ3N0cmVhbWVyL2dzdC1wbHVnaW5zLXVnbHkvY29tbWl0Lz9pZD00M2JkNDViYTk5MWVmMzI0Nzk1N2NhMzdjZGNiNTJmNGI4YzBhY2IxCi1QQUNLQUdFQ09ORklHW21wZzEyM10gPSAiLS1lbmFibGUtbXBnMTIzLC0tZGlzYWJsZS1tcGcxMjMsbXBnMTIzIgotCiBkb19jb25maWd1cmVfcHJlcGVuZCgpIHsKIAkke1N9L2F1dG9nZW4uc2ggLS1ub2NvbmZpZ3VyZQogfQpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2dzdHJlYW1lci9nc3RyZWFtZXIxLjAtcGx1Z2lucy5pbmMgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvZ3N0cmVhbWVyL2dzdHJlYW1lcjEuMC1wbHVnaW5zLmluYwppbmRleCAyZGNlYzUwLi45Y2ZjZWMzIDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvZ3N0cmVhbWVyL2dzdHJlYW1lcjEuMC1wbHVnaW5zLmluYworKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvZ3N0cmVhbWVyL2dzdHJlYW1lcjEuMC1wbHVnaW5zLmluYwpAQCAtNSw3ICs1LDcgQEAKIAogREVQRU5EUyA9ICJnc3RyZWFtZXIxLjAgZ2xpYi0yLjAtbmF0aXZlIgogCi1pbmhlcml0IGF1dG90b29scyBwa2djb25maWcgdXBzdHJlYW0tdmVyc2lvbi1pcy1ldmVuIGdvYmplY3QtaW50cm9zcGVjdGlvbgoraW5oZXJpdCBhdXRvdG9vbHMgcGtnY29uZmlnIHVwc3RyZWFtLXZlcnNpb24taXMtZXZlbiBnb2JqZWN0LWludHJvc3BlY3Rpb24gZ3RrLWRvYwogCiBhY3BhdGhzID0gIi1JICR7U30vY29tbW9uL200IC1JICR7U30vbTQiCiAKQEAgLTMzLDggKzMzLDIxIEBACiBkZWxldGVfcGtnX200X2ZpbGUoKSB7CiAJIyBUaGlzIG00IGZpbGUgaXMgb3V0IG9mIGRhdGUgYW5kIGlzIG1pc3NpbmcgUEtHX0NPTkZJR19TWVNST09UX1BBVEggdHdlYWtzIHdoaWNoIHdlIG5lZWQgZm9yIGludHJvc3BlY3Rpb24KIAlybSAiJHtTfS9jb21tb24vbTQvcGtnLm00IiB8fCB0cnVlCisJcm0gLWYgIiR7U30vY29tbW9uL200L2d0ay1kb2MubTQiCiB9CiAKLWRvX2NvbmZpZ3VyZVtwcmVmdW5jc10gKz0gIiBkZWxldGVfcGtnX200X2ZpbGUiCisjIGdzdHJlYW1lciBpcyBub3QgdXNpbmcgc3lzdGVtLXdpZGUgbWFrZWZpbGVzICh3aGljaCB3ZSBwYXRjaCBpbiBndGtkb2MgcmVjaXBlLAorIyBidXQgaXRzIG93biBjdXN0b20gb25lcywgd2hpY2ggd2UgaGF2ZSB0byBwYXRjaCBoZXJlCitwYXRjaF9ndGtfZG9jX21ha2VmaWxlcygpIHsKKyAgICAgICAgIyBQYXRjaCB0aGUgZ3RrLWRvYyBtYWtlZmlsZXMgc28gdGhhdCB0aGUgcWVtdSB3cmFwcGVyIGlzIHVzZWQgdG8gcnVuIHRyYW5zaWVudCBiaW5hcmllcworICAgICAgICAjIGluc3RlYWQgb2YgbGlidG9vbCB3cmFwcGVyIG9yIHJ1bm5pbmcgdGhlbSBkaXJlY3RseQorICAgICAgICAjIEFsc28gc3Vic3RpdHV0ZSBhIGJvZ3VzIHBsdWdpbiBzY2FubmVyLCBhcyB0cnlpbmcgdG8gcnVuIHRoZSByZWFsIG9uZSBpcyBjYXVzaW5nIGlzc3VlcyBkdXJpbmcgYnVpbGQgb24geDg2XzY0LgorICAgICAgICBzZWQgLWkgXAorICAgICAgICAgICAtZSAic3xHVEtET0NfUlVOID0uKnxHVEtET0NfUlVOID0gXCQodG9wX2J1aWxkZGlyKS9ndGtkb2MtcWVtdXdyYXBwZXJ8IiBcCisgICAgICAgICAgIC1lICJzfFwkKEdUS0RPQ19FWFRSQV9FTlZJUk9OTUVOVCl8XCQoR1RLRE9DX0VYVFJBX0VOVklST05NRU5UKSBHU1RfUExVR0lOX1NDQU5ORVJfMV8wPVwkKHRvcF9idWlsZGRpcikvbGlicy9nc3QvaGVscGVycy9nc3QtcGx1Z2luLXNjYW5uZXItZHVtbXl8IiBcCisgICAgICAgICAgICR7U30vY29tbW9uL2d0ay1kb2MqbWFrCit9CisKK2RvX2NvbmZpZ3VyZVtwcmVmdW5jc10gKz0gIiBkZWxldGVfcGtnX200X2ZpbGUgcGF0Y2hfZ3RrX2RvY19tYWtlZmlsZXMiCiAKIFBBQ0tBR0VTX0RZTkFNSUMgPSAiXiR7UE59LS4qIgpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2dzdHJlYW1lci9nc3RyZWFtZXIxLjAtcnRzcC1zZXJ2ZXIuaW5jIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2dzdHJlYW1lci9nc3RyZWFtZXIxLjAtcnRzcC1zZXJ2ZXIuaW5jCmluZGV4IGFlNmQzNjQuLjEzYmE0MGQgMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9nc3RyZWFtZXIvZ3N0cmVhbWVyMS4wLXJ0c3Atc2VydmVyLmluYworKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvZ3N0cmVhbWVyL2dzdHJlYW1lcjEuMC1ydHNwLXNlcnZlci5pbmMKQEAgLTEzLDEyICsxMywyNiBAQAogCiBTID0gIiR7V09SS0RJUn0vJHtQTlJFQUx9LSR7UFZ9IgogCi1pbmhlcml0IGF1dG90b29scyBwa2djb25maWcgdXBzdHJlYW0tdmVyc2lvbi1pcy1ldmVuIGdvYmplY3QtaW50cm9zcGVjdGlvbgoraW5oZXJpdCBhdXRvdG9vbHMgcGtnY29uZmlnIHVwc3RyZWFtLXZlcnNpb24taXMtZXZlbiBnb2JqZWN0LWludHJvc3BlY3Rpb24gZ3RrLWRvYworCisjIFN0YXJ0aW5nIHdpdGggMS44LjAgZ3N0LXJ0c3Atc2VydmVyIGluY2x1ZGVzIGRlcGVuZGVuY3ktbGVzcyBwbHVnaW5zIGFzIHdlbGwKK0xJQlYgPSAiMS4wIgorcmVxdWlyZSBnc3QtcGx1Z2lucy1wYWNrYWdlLmluYwogCiBkZWxldGVfcGtnX200X2ZpbGUoKSB7CiAgICAgICAgICMgVGhpcyBtNCBmaWxlIGlzIG91dCBvZiBkYXRlIGFuZCBpcyBtaXNzaW5nIFBLR19DT05GSUdfU1lTUk9PVF9QQVRIIHR3ZWFrcyB3aGljaCB3ZSBuZWVkIGZvciBpbnRyb3NwZWN0aW9uCiAgICAgICAgIHJtICIke1N9L2NvbW1vbi9tNC9wa2cubTQiIHx8IHRydWUKIH0KIAotZG9fY29uZmlndXJlW3ByZWZ1bmNzXSArPSAiIGRlbGV0ZV9wa2dfbTRfZmlsZSIKKyMgZ3N0cmVhbWVyIGlzIG5vdCB1c2luZyBzeXN0ZW0td2lkZSBtYWtlZmlsZXMgKHdoaWNoIHdlIHBhdGNoIGluIGd0a2RvYyByZWNpcGUsCisjIGJ1dCBpdHMgb3duIGN1c3RvbSBvbmVzLCB3aGljaCB3ZSBoYXZlIHRvIHBhdGNoIGhlcmUKK3BhdGNoX2d0a19kb2NfbWFrZWZpbGVzKCkgeworICAgICAgICAjIFBhdGNoIHRoZSBndGstZG9jIG1ha2VmaWxlcyBzbyB0aGF0IHRoZSBxZW11IHdyYXBwZXIgaXMgdXNlZCB0byBydW4gdHJhbnNpZW50IGJpbmFyaWVzCisgICAgICAgICMgaW5zdGVhZCBvZiBsaWJ0b29sIHdyYXBwZXIgb3IgcnVubmluZyB0aGVtIGRpcmVjdGx5CisgICAgICAgIHNlZCAtaSBcCisgICAgICAgICAgIC1lICJzfEdUS0RPQ19SVU4gPS4qfEdUS0RPQ19SVU4gPSBcJCh0b3BfYnVpbGRkaXIpL2d0a2RvYy1xZW11d3JhcHBlcnwiIFwKKyAgICAgICAgICAgJHtTfS9jb21tb24vZ3RrLWRvYyptYWsKK30KKworZG9fY29uZmlndXJlW3ByZWZ1bmNzXSArPSAiIGRlbGV0ZV9wa2dfbTRfZmlsZSBwYXRjaF9ndGtfZG9jX21ha2VmaWxlcyIKIApkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2dzdHJlYW1lci9nc3RyZWFtZXIxLjAtcnRzcC1zZXJ2ZXJfMS42LjIuYmIgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvZ3N0cmVhbWVyL2dzdHJlYW1lcjEuMC1ydHNwLXNlcnZlcl8xLjYuMi5iYgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNWJkYWU2Yy4uMDAwMDAwMAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvZ3N0cmVhbWVyL2dzdHJlYW1lcjEuMC1ydHNwLXNlcnZlcl8xLjYuMi5iYgorKysgL2Rldi9udWxsCkBAIC0xLDYgKzAsMCBAQAotaW5jbHVkZSBnc3RyZWFtZXIxLjAtcnRzcC1zZXJ2ZXIuaW5jCi0KLUxJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PTY3NjJlZDQ0MmIzODIyMzg3YTUxYzkyZDkyOGVhZDBkIgotCi1TUkNfVVJJW21kNXN1bV0gPSAiYTFjYWZlZmI1ZmMxNGFjNWQ3ZTdkOGNkYmRmYTk2OTQiCi1TUkNfVVJJW3NoYTI1NnN1bV0gPSAiMGY1MWY5ODc5NTU2YzA5NTAyMDNjNzY2YjA5YTFiNjJmMWYyNWIxN2Y5YTdkNTE2ZTAxYjEzZWNmOTNjODg1OCIKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9nc3RyZWFtZXIvZ3N0cmVhbWVyMS4wLXJ0c3Atc2VydmVyXzEuOC4zLmJiIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2dzdHJlYW1lci9nc3RyZWFtZXIxLjAtcnRzcC1zZXJ2ZXJfMS44LjMuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTcwNTlkMAotLS0gL2Rldi9udWxsCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9nc3RyZWFtZXIvZ3N0cmVhbWVyMS4wLXJ0c3Atc2VydmVyXzEuOC4zLmJiCkBAIC0wLDAgKzEsNiBAQAoraW5jbHVkZSBnc3RyZWFtZXIxLjAtcnRzcC1zZXJ2ZXIuaW5jCisKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PTY3NjJlZDQ0MmIzODIyMzg3YTUxYzkyZDkyOGVhZDBkIgorCitTUkNfVVJJW21kNXN1bV0gPSAiZTRiMDdiMTBkZDY1YjZjMjZjOWNhNWY3MmU1OTI5N2IiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiMDEwZjA2ODAwYzFjOTU3ODUxZDEzNTJlNWVjN2E4YmEzY2U2YTg1N2ZlYzFiOGFmYzdkMWE5ZTVmNTMyODhiZiIKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9nc3RyZWFtZXIvZ3N0cmVhbWVyMS4wLmluYyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9nc3RyZWFtZXIvZ3N0cmVhbWVyMS4wLmluYwppbmRleCAxMGI0NjY4Li5jYjBiZDgyIDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvZ3N0cmVhbWVyL2dzdHJlYW1lcjEuMC5pbmMKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2dzdHJlYW1lci9nc3RyZWFtZXIxLjAuaW5jCkBAIC04LDcgKzgsNyBAQAogCiBERVBFTkRTID0gImdsaWItMi4wIGdsaWItMi4wLW5hdGl2ZSBsaWJjYXAgbGlieG1sMiBiaXNvbi1uYXRpdmUgZmxleC1uYXRpdmUiCiAKLWluaGVyaXQgYXV0b3Rvb2xzIHBrZ2NvbmZpZyBnZXR0ZXh0IHVwc3RyZWFtLXZlcnNpb24taXMtZXZlbiBnb2JqZWN0LWludHJvc3BlY3Rpb24KK2luaGVyaXQgYXV0b3Rvb2xzIHBrZ2NvbmZpZyBnZXR0ZXh0IHVwc3RyZWFtLXZlcnNpb24taXMtZXZlbiBnb2JqZWN0LWludHJvc3BlY3Rpb24gZ3RrLWRvYwogCiAjIFRoaXMgd2F5IGNvbW1vbi9tNC9pbnRyb3NwZWN0aW9uLm00IHdpbGwgY29tZSBmaXJzdAogIyAoaXQgaGFzIGEgY3VzdG9tIElOVFJPU1BFQ1RJT05fSU5JVCBtYWNybywgYW5kIHNvIG11c3QgYmUgdXNlZCBpbnN0ZWFkIG9mIG91ciBjb21tb24gaW50cm9zcGVjdGlvbi5tNCBmaWxlKQpAQCAtMjAsMTYgKzIwLDE2IEBACiAKIFBBQ0tBR0VDT05GSUcgPz89ICIiCiAKLVBBQ0tBR0VDT05GSUdbY2hlY2tdID0gIi0tZW5hYmxlLWNoZWNrLC0tZGlzYWJsZS1jaGVjayIKIFBBQ0tBR0VDT05GSUdbZGVidWddID0gIi0tZW5hYmxlLWRlYnVnLC0tZGlzYWJsZS1kZWJ1ZyIKIFBBQ0tBR0VDT05GSUdbdGVzdHNdID0gIi0tZW5hYmxlLXRlc3RzLC0tZGlzYWJsZS10ZXN0cyIKIFBBQ0tBR0VDT05GSUdbdmFsZ3JpbmRdID0gIi0tZW5hYmxlLXZhbGdyaW5kLC0tZGlzYWJsZS12YWxncmluZCx2YWxncmluZCwiCitQQUNLQUdFQ09ORklHW2dzdC10cmFjZXItaG9va3NdID0gIi0tZW5hYmxlLWdzdC10cmFjZXItaG9va3MsLS1kaXNhYmxlLWdzdC10cmFjZXItaG9va3MsIgorUEFDS0FHRUNPTkZJR1t0cmFjZS1oaXN0b3JpY10gPSAiLS1lbmFibGUtdHJhY2UsLS1kaXNhYmxlLXRyYWNlLCIKIAogRVhUUkFfT0VDT05GID0gIiBcCiAgICAgLS1kaXNhYmxlLWRlcGVuZGVuY3ktdHJhY2tpbmcgXAogICAgIC0tZGlzYWJsZS1kb2Nib29rIFwKICAgICAtLWRpc2FibGUtZXhhbXBsZXMgXAotICAgIC0tZGlzYWJsZS1ndGstZG9jIFwKICIKIAogQ0FDSEVEX0NPTkZJR1VSRVZBUlMgKz0gImFjX2N2X2hlYWRlcl92YWxncmluZF92YWxncmluZF9oPW5vIgpAQCAtNDksOSArNDksMjIgQEAKIGRlbGV0ZV9wa2dfbTRfZmlsZSgpIHsKICAgICAgICAgIyBUaGlzIG00IGZpbGUgaXMgb3V0IG9mIGRhdGUgYW5kIGlzIG1pc3NpbmcgUEtHX0NPTkZJR19TWVNST09UX1BBVEggdHdlYWtzIHdoaWNoIHdlIG5lZWQgZm9yIGludHJvc3BlY3Rpb24KICAgICAgICAgcm0gIiR7U30vY29tbW9uL200L3BrZy5tNCIgfHwgdHJ1ZQorICAgICAgICBybSAtZiAiJHtTfS9jb21tb24vbTQvZ3RrLWRvYy5tNCIKIH0KIAotZG9fY29uZmlndXJlW3ByZWZ1bmNzXSArPSAiIGRlbGV0ZV9wa2dfbTRfZmlsZSIKKyMgZ3N0cmVhbWVyIGlzIG5vdCB1c2luZyBzeXN0ZW0td2lkZSBtYWtlZmlsZXMgKHdoaWNoIHdlIHBhdGNoIGluIGd0a2RvYyByZWNpcGUsCisjIGJ1dCBpdHMgb3duIGN1c3RvbSBvbmVzLCB3aGljaCB3ZSBoYXZlIHRvIHBhdGNoIGhlcmUKK3BhdGNoX2d0a19kb2NfbWFrZWZpbGVzKCkgeworICAgICAgICAjIFBhdGNoIHRoZSBndGstZG9jIG1ha2VmaWxlcyBzbyB0aGF0IHRoZSBxZW11IHdyYXBwZXIgaXMgdXNlZCB0byBydW4gdHJhbnNpZW50IGJpbmFyaWVzCisgICAgICAgICMgaW5zdGVhZCBvZiBsaWJ0b29sIHdyYXBwZXIgb3IgcnVubmluZyB0aGVtIGRpcmVjdGx5CisgICAgICAgICMgQWxzbyBzdWJzdGl0dXRlIGEgYm9ndXMgcGx1Z2luIHNjYW5uZXIsIGFzIHRyeWluZyB0byBydW4gdGhlIHJlYWwgb25lIGlzIGNhdXNpbmcgaXNzdWVzIGR1cmluZyBidWlsZCBvbiB4ODZfNjQuCisgICAgICAgIHNlZCAtaSBcCisgICAgICAgICAgIC1lICJzfEdUS0RPQ19SVU4gPS4qfEdUS0RPQ19SVU4gPSBcJCh0b3BfYnVpbGRkaXIpL2d0a2RvYy1xZW11d3JhcHBlcnwiIFwKKyAgICAgICAgICAgLWUgInN8XCQoR1RLRE9DX0VYVFJBX0VOVklST05NRU5UKXxcJChHVEtET0NfRVhUUkFfRU5WSVJPTk1FTlQpIEdTVF9QTFVHSU5fU0NBTk5FUl8xXzA9XCQodG9wX2J1aWxkZGlyKS9saWJzL2dzdC9oZWxwZXJzL2dzdC1wbHVnaW4tc2Nhbm5lci1kdW1teXwiIFwKKyAgICAgICAgICAgJHtTfS9jb21tb24vZ3RrLWRvYyptYWsKK30KKworZG9fY29uZmlndXJlW3ByZWZ1bmNzXSArPSAiIGRlbGV0ZV9wa2dfbTRfZmlsZSBwYXRjaF9ndGtfZG9jX21ha2VmaWxlcyIKIAogZG9fY29tcGlsZV9wcmVwZW5kKCkgewogICAgICAgICBleHBvcnQgR0lSX0VYVFJBX0xJQlNfUEFUSD0iJHtCfS9nc3QvLmxpYnM6JHtCfS9saWJzL2dzdC9iYXNlLy5saWJzIgpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2dzdHJlYW1lci9nc3RyZWFtZXIxLjAvMDAwMS1GaXgtY3Jhc2gtd2l0aC1nc3QtaW5zcGVjdC5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9nc3RyZWFtZXIvZ3N0cmVhbWVyMS4wLzAwMDEtRml4LWNyYXNoLXdpdGgtZ3N0LWluc3BlY3QucGF0Y2gKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDk0ZjVjYzUuLjAwMDAwMDAKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2dzdHJlYW1lci9nc3RyZWFtZXIxLjAvMDAwMS1GaXgtY3Jhc2gtd2l0aC1nc3QtaW5zcGVjdC5wYXRjaAorKysgL2Rldi9udWxsCkBAIC0xLDI4ICswLDAgQEAKLUZyb20gNmIyNmYzZGJmOWJmNTc3ZDcxNTM0YWI3NDEwZGU2NmQwNmU0NmJhMiBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKLUZyb206IENhcmxvcyBSYWZhZWwgR2lhbmkgPGR2QHBzZXVkb3Rlcm1pbmFsLm9yZz4KLURhdGU6IFNhdCwgNiBBcHIgMjAxMyAyMzo1MjoxMSArMDIwMAotU3ViamVjdDogW1BBVENIXSBGaXggY3Jhc2ggd2l0aCBnc3QtaW5zcGVjdCBDaHJpcyBMb3JkIDxjaHJpc0BvcGVuZWRoYW5kLmNvbT4KLQotVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCi0KLVNpZ25lZC1vZmYtYnk6IENhcmxvcyBSYWZhZWwgR2lhbmkgPGR2QHBzZXVkb3Rlcm1pbmFsLm9yZz4KLS0tLQotIHRvb2xzL2dzdC1pbnNwZWN0LmMgfCAyICstCi0gMSBmaWxlIGNoYW5nZWQsIDEgaW5zZXJ0aW9uKCspLCAxIGRlbGV0aW9uKC0pCi0KLWRpZmYgLS1naXQgYS90b29scy9nc3QtaW5zcGVjdC5jIGIvdG9vbHMvZ3N0LWluc3BlY3QuYwotaW5kZXggMjNiN2M0NC4uYjc5YjAyZSAxMDA2NDQKLS0tLSBhL3Rvb2xzL2dzdC1pbnNwZWN0LmMKLSsrKyBiL3Rvb2xzL2dzdC1pbnNwZWN0LmMKLUBAIC0xNTU2LDcgKzE1NTYsNyBAQCBtYWluIChpbnQgYXJnYywgY2hhciAqYXJndltdKQotICAgZ19vcHRpb25fY29udGV4dF9hZGRfbWFpbl9lbnRyaWVzIChjdHgsIG9wdGlvbnMsIEdFVFRFWFRfUEFDS0FHRSk7Ci0gICBnX29wdGlvbl9jb250ZXh0X2FkZF9ncm91cCAoY3R4LCBnc3RfaW5pdF9nZXRfb3B0aW9uX2dyb3VwICgpKTsKLSAgIGlmICghZ19vcHRpb25fY29udGV4dF9wYXJzZSAoY3R4LCAmYXJnYywgJmFyZ3YsICZlcnIpKSB7Ci0tICAgIGdfcHJpbnRlcnIgKCJFcnJvciBpbml0aWFsaXppbmc6ICVzXG4iLCBlcnItPm1lc3NhZ2UpOwotKyAgICBnX3ByaW50ZXJyICgiRXJyb3IgaW5pdGlhbGl6aW5nOiAlc1xuIiwgZXJyID8gZXJyLT5tZXNzYWdlIDogIihudWxsKSIpOwotICAgICByZXR1cm4gLTE7Ci0gICB9Ci0gICBnX29wdGlvbl9jb250ZXh0X2ZyZWUgKGN0eCk7Ci0tLSAKLTEuOC4yCi0KZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9nc3RyZWFtZXIvZ3N0cmVhbWVyMS4wXzEuNi4zLmJiIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2dzdHJlYW1lci9nc3RyZWFtZXIxLjBfMS42LjMuYmIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGJhMWI4M2IuLjAwMDAwMDAKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2dzdHJlYW1lci9nc3RyZWFtZXIxLjBfMS42LjMuYmIKKysrIC9kZXYvbnVsbApAQCAtMSwxNCArMCwwIEBACi1pbmNsdWRlIGdzdHJlYW1lcjEuMC5pbmMKLQotTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9Njc2MmVkNDQyYjM4MjIzODdhNTFjOTJkOTI4ZWFkMGQgXAotICAgICAgICAgICAgICAgICAgICBmaWxlOi8vZ3N0L2dzdC5oO2JlZ2lubGluZT0xO2VuZGxpbmU9MjE7bWQ1PWUwNTkxMzg0ODEyMDVlZTJjNmZjMWMwNzljMDE2ZDBkIgotCi1TUkNfVVJJID0gIiBcCi0gICAgaHR0cDovL2dzdHJlYW1lci5mcmVlZGVza3RvcC5vcmcvc3JjL2dzdHJlYW1lci9nc3RyZWFtZXItJHtQVn0udGFyLnh6IFwKLSAgICBmaWxlOi8vMDAwMS1GaXgtY3Jhc2gtd2l0aC1nc3QtaW5zcGVjdC5wYXRjaCBcCi0iCi0KLVNSQ19VUklbbWQ1c3VtXSA9ICJiNGNkZWIyYjljYjIwZGQ2YWMwMjJhNGY0MTdlYWUwZCIKLVNSQ19VUklbc2hhMjU2c3VtXSA9ICIyMmY5NTY4ZDY3Yjg3Y2Y3MDBhMTExZjM4MTE0NGJkMzdjYjkzNzkwYTc3ZTRlMzMxZGIwMWZlODU0YTM3ZjI0IgotCi1TID0gIiR7V09SS0RJUn0vZ3N0cmVhbWVyLSR7UFZ9IgpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2dzdHJlYW1lci9nc3RyZWFtZXIxLjBfMS44LjMuYmIgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvZ3N0cmVhbWVyL2dzdHJlYW1lcjEuMF8xLjguMy5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kMzU2MWViCi0tLSAvZGV2L251bGwKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2dzdHJlYW1lci9nc3RyZWFtZXIxLjBfMS44LjMuYmIKQEAgLTAsMCArMSwxMyBAQAoraW5jbHVkZSBnc3RyZWFtZXIxLjAuaW5jCisKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PTY3NjJlZDQ0MmIzODIyMzg3YTUxYzkyZDkyOGVhZDBkIFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL2dzdC9nc3QuaDtiZWdpbmxpbmU9MTtlbmRsaW5lPTIxO21kNT1lMDU5MTM4NDgxMjA1ZWUyYzZmYzFjMDc5YzAxNmQwZCIKKworU1JDX1VSSSA9ICIgXAorICAgIGh0dHA6Ly9nc3RyZWFtZXIuZnJlZWRlc2t0b3Aub3JnL3NyYy9nc3RyZWFtZXIvZ3N0cmVhbWVyLSR7UFZ9LnRhci54eiBcCisiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICJlODhkYWQ1NDJkZjlkOTg2ODIyZTk4MjEwNWQyYjUzMCIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICI2NmIzNzc2MmQ0ZmRjZDYzYmNlNWEyYmVjNTdlMDU1ZjkyNDIwZTk1MDM3MzYxNjA5OTAwMjc4YzBkYjdjNTNmIgorCitTID0gIiR7V09SS0RJUn0vZ3N0cmVhbWVyLSR7UFZ9IgpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2dzdHJlYW1lci9nc3RyZWFtZXIxLjBfZ2l0LmJiIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2dzdHJlYW1lci9nc3RyZWFtZXIxLjBfZ2l0LmJiCmluZGV4IDc3MTViYjIuLjYxMTJmMmEgMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9nc3RyZWFtZXIvZ3N0cmVhbWVyMS4wX2dpdC5iYgorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvZ3N0cmVhbWVyL2dzdHJlYW1lcjEuMF9naXQuYmIKQEAgLTYsMjUgKzYsMjAgQEAKICAgICAgICAgICAgICAgICAgICAgZmlsZTovL2dzdC9nc3QuaDtiZWdpbmxpbmU9MTtlbmRsaW5lPTIxO21kNT1lMDU5MTM4NDgxMjA1ZWUyYzZmYzFjMDc5YzAxNmQwZCIKIAogU1JDX1VSSSA9ICIgXAotICAgIGdpdDovL2Fub25naXQuZnJlZWRlc2t0b3Aub3JnL2dzdHJlYW1lci9nc3RyZWFtZXI7bmFtZT1iYXNlIFwKKyAgICBnaXQ6Ly9hbm9uZ2l0LmZyZWVkZXNrdG9wLm9yZy9nc3RyZWFtZXIvZ3N0cmVhbWVyO2JyYW5jaD0xLjg7bmFtZT1iYXNlIFwKICAgICBnaXQ6Ly9hbm9uZ2l0LmZyZWVkZXNrdG9wLm9yZy9nc3RyZWFtZXIvY29tbW9uO2Rlc3RzdWZmaXg9Z2l0L2NvbW1vbjtuYW1lPWNvbW1vbiBcCiAiCiAKLVBWID0gIjEuNy4yK2dpdCR7U1JDUFZ9IgorUFYgPSAiMS44LjIrZ2l0JHtTUkNQVn0iCiAKIFVQU1RSRUFNX0NIRUNLX0dJVFRBR1JFR0VYID0gIig/UDxwdmVyPihcZCsoXC5cZCspKykpIgogCi1TUkNSRVZfYmFzZSA9ICI5ZTMzYmZhMmM3YTVmNDNkYTJjNDliMGE4MjM1ZmQ0M2NiYTlmZWFmIgotU1JDUkVWX2NvbW1vbiA9ICJiNjRmMDNmNjA5MDI0NTYyNDYwOGJlYjVkMmZmZjMzNWUyM2EwMWMwIgorU1JDUkVWX2Jhc2UgPSAiM2RlOGE0ZjcyOGE3MTk0YTEyYjc4NGVjNDA4NWY2YThlN2Q5YjViZCIKK1NSQ1JFVl9jb21tb24gPSAiZjM2M2IzMjA1NjU4YTM4ZTg0ZmE3N2YxOWRlZTIxOGNkNDQ0NTI3NSIKIFNSQ1JFVl9GT1JNQVQgPSAiYmFzZSIKIAogUyA9ICIke1dPUktESVJ9L2dpdCIKIAotIyBUaGUgb3B0aW9uIHRvIGNvbmZpZ3VyZSB0cmFjZXIgaG9va3Mgd2FzIGFkZGVkIHByaW9yIHRvIHRoZSAxLjcuMiByZWxlYXNlCi0jIGh0dHBzOi8vY2dpdC5mcmVlZGVza3RvcC5vcmcvZ3N0cmVhbWVyL2dzdHJlYW1lci9jb21taXQvP2lkPWU1Y2E0NzIzNmU0ZGY0NjgzNzA3ZjBiY2Y5OTE4MWE5MzdkMzU4ZDUKLVBBQ0tBR0VDT05GSUdbZ3N0LXRyYWNlci1ob29rc10gPSAiLS1lbmFibGUtZ3N0LXRyYWNlci1ob29rcywtLWRpc2FibGUtZ3N0LXRyYWNlci1ob29rcywiCi1QQUNLQUdFQ09ORklHW3RyYWNlLWhpc3RvcmljXSA9ICItLWVuYWJsZS10cmFjZSwtLWRpc2FibGUtdHJhY2UsIgotCiBkb19jb25maWd1cmVfcHJlcGVuZCgpIHsKIAkke1N9L2F1dG9nZW4uc2ggLS1ub2NvbmZpZ3VyZQogfQpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2xhbWUvbGFtZS9sYW1lLTMuOTkuNV9maXhfZm9yX2F1dG9tYWtlLTEuMTIueC5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9sYW1lL2xhbWUvbGFtZS0zLjk5LjVfZml4X2Zvcl9hdXRvbWFrZS0xLjEyLngucGF0Y2gKaW5kZXggNTcxYTFkMC4uNTFiYWVmMiAxMDA2NDQKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2xhbWUvbGFtZS9sYW1lLTMuOTkuNV9maXhfZm9yX2F1dG9tYWtlLTEuMTIueC5wYXRjaAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvbGFtZS9sYW1lL2xhbWUtMy45OS41X2ZpeF9mb3JfYXV0b21ha2UtMS4xMi54LnBhdGNoCkBAIC00LDcgKzQsNyBAQAogfCBkb2MvbWFuL01ha2VmaWxlLmFtOjM6IGVycm9yOiBhdXRvbWF0aWMgZGUtQU5TSS1maWNhdGlvbiBzdXBwb3J0IGhhcyBiZWVuIHJlbW92ZWQKIHwgYXV0b3JlY29uZjogYXV0b21ha2UgZmFpbGVkIHdpdGggZXhpdCBzdGF0dXM6IDEKIAotU2lnbmVkLU9mZi1ieTogTml0aW4gQSBLYW1ibGUgPG5pdGluLmEua2FtYmxlQGludGVsLmNvbT4KK1NpZ25lZC1vZmYtYnk6IE5pdGluIEEgS2FtYmxlIDxuaXRpbi5hLmthbWJsZUBpbnRlbC5jb20+CiAyMDEyLzA3LzEzCiAKIEluZGV4OiBsYW1lLTMuOTkuNS9jb25maWd1cmUuaW4KZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9saWJtYWQvbGlibWFkL2FkZC1wa2djb25maWcucGF0Y2ggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvbGlibWFkL2xpYm1hZC9hZGQtcGtnY29uZmlnLnBhdGNoCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiNDlkYzhjLi4wMDAwMDAwCi0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9saWJtYWQvbGlibWFkL2FkZC1wa2djb25maWcucGF0Y2gKKysrIC9kZXYvbnVsbApAQCAtMSw3MCArMCwwIEBACi1IZXJlIGlzIGEgcGF0Y2ggZm9yIGFkZGluZyBwa2ctY29uZmlnIHN1cHBvcnQgdG8gbGlibWFkLgotSXQgd291bGQgbWFrZSBsaWZlIGEgYml0IGVhc2llciBmb3IgZGlzdHJvIG1haW50YWluZXJzIGlmIHRoaXMgd2FzIGFwcGxpZWQuCi1JbiBjYXNlIHlvdSBkaWRuJ3Qga25vdywgcGtnLWNvbmZpZyBpcyBhIHRvb2wgZm9yIHByb3ZpZGluZyBMREZMQUdTIGFuZAotQ0ZMQUdTIGZvciBwYWNrYWdlcyB1c2luZyBzaGFyZWQgbGlicmFyaWVzLiBJdCdzIG9uIGZyZWVkZXNrdG9wLm9yZy4KLURlYmlhbiBoYXMgYWxyZWFkeSBiZWVuIGRpc3RyaWJ1dGluZyB0aGUgcGtnLWNvbmZpZyBmaWxlIG1hZC5wYyB3aXRoCi1saWJtYWQgZm9yIHNvbWUgdGltZSwgYW5kIHBlb3BsZSBkZXZlbG9waW5nIG9uIGRlYmlhbiAobm90YWJseSB4bW1zMiAKLWRldmVsb3BlcnMpIGhhdmUgc3RhcnRlZCByZWx5aW5nIG9uIHRoaXMgc3VwcG9ydCBiZWluZyBwcmVzZW50LCBjYXVzaW5nCi1zb21lIGNvbmZ1c2lvbiBmb3IgcGVvcGxlIGluc3RhbGxpbmcgZnJvbSBzb3VyY2UgYW5kIG9uIHNvbWUgQlNEcyB3aGljaAotZG8gbm90IHByb3ZpZGUgbWFkLnBjIChnb29nbGU6IHBrZ2NvbmZpZyBsaWJtYWQpLgotCi1FTUgKLQotVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtjb25maWd1cmF0aW9uXQotCi0tLWgzMWd6WkV0TkxUcU9qbEYKLUNvbnRlbnQtVHlwZTogdGV4dC9wbGFpbjsgY2hhcnNldD11cy1hc2NpaQotQ29udGVudC1EaXNwb3NpdGlvbjogYXR0YWNobWVudDsgZmlsZW5hbWU9JnF1b3Q7bGlibWFkLTAuMTUuMWItcGtnY29uZmlnLnBhdGNoJnF1b3Q7Ci0KLWRpZmYgLU5hdXIgbGlibWFkLTAuMTUuMWIub2xkL2NvbmZpZ3VyZS5hYyBsaWJtYWQtMC4xNS4xYi9jb25maWd1cmUuYWMKLS0tLSBsaWJtYWQtMC4xNS4xYi5vbGQvY29uZmlndXJlLmFjCTIwMDQtMDEtMjMgMTA6NDE6MzIuMDAwMDAwMDAwICswMTAwCi0rKysgbGlibWFkLTAuMTUuMWIvY29uZmlndXJlLmFjCTIwMDQtMDgtMDcgMDI6MjU6MjQuNjMzNDYyMTY4ICswMjAwCi1AQCAtNDI5LDUgKzQyOSw1IEBACi0gZG5sIEFDX1NVQlNUKExUTElCT0JKUykKLSAKLSBBQ19DT05GSUdfRklMRVMoW01ha2VmaWxlIG1zdmMrKy9NYWtlZmlsZSAgXAotLQlsaWJtYWQubGlzdF0pCi0rCWxpYm1hZC5saXN0IG1hZC5wY10pCi0gQUNfT1VUUFVUCi1kaWZmIC1OYXVyIGxpYm1hZC0wLjE1LjFiLm9sZC9tYWQucGMuaW4gbGlibWFkLTAuMTUuMWIvbWFkLnBjLmluCi0tLS0gbGlibWFkLTAuMTUuMWIub2xkL21hZC5wYy5pbgkxOTcwLTAxLTAxIDAxOjAwOjAwLjAwMDAwMDAwMCArMDEwMAotKysrIGxpYm1hZC0wLjE1LjFiL21hZC5wYy5pbgkyMDA0LTA4LTA3IDAyOjA0OjU5LjYxNzY5Mjg3MiArMDIwMAotQEAgLTAsMCArMSwxNCBAQAotKyMgbGlibWFkIHBrZy1jb25maWcgc291cmNlIGZpbGUKLSsKLStwcmVmaXg9QHByZWZpeEAKLStleGVjX3ByZWZpeD1AZXhlY19wcmVmaXhACi0rbGliZGlyPUBsaWJkaXJACi0raW5jbHVkZWRpcj1AaW5jbHVkZWRpckAKLSsKLStOYW1lOiBtYWQKLStEZXNjcmlwdGlvbjogTVBFRyBBdWRpbyBEZWNvZGVyCi0rVmVyc2lvbjogQFZFUlNJT05ACi0rUmVxdWlyZXM6Ci0rQ29uZmxpY3RzOgotK0xpYnM6IC1MJHtsaWJkaXJ9IC1sbWFkIC1sbQotK0NmbGFnczogLUkke2luY2x1ZGVkaXJ9Ci1kaWZmIC1OYXVyIGxpYm1hZC0wLjE1LjFiLm9sZC9NYWtlZmlsZS5hbSBsaWJtYWQtMC4xNS4xYi9NYWtlZmlsZS5hbQotLS0tIGxpYm1hZC0wLjE1LjFiLm9sZC9NYWtlZmlsZS5hbQkyMDA0LTAyLTE3IDAzOjAyOjAzLjAwMDAwMDAwMCArMDEwMAotKysrIGxpYm1hZC0wLjE1LjFiL01ha2VmaWxlLmFtCTIwMDQtMDgtMDcgMDI6MDM6MTkuODU5ODU4MzY4ICswMjAwCi1AQCAtMjQsNiArMjQsOSBAQAotIFNVQkRJUlMgPQkJCi0gRElTVF9TVUJESVJTID0JCW1zdmMrKwotIAotK3BrZ2NvbmZpZ2RpciA9CQkkKGxpYmRpcikvcGtnY29uZmlnCi0rcGtnY29uZmlnX0RBVEEgPQltYWQucGMKLSsKLSBsaWJfTFRMSUJSQVJJRVMgPQlsaWJtYWQubGEKLSBpbmNsdWRlX0hFQURFUlMgPQltYWQuaAotIAotQEAgLTM0LDcgKzM3LDggQEAKLSBtaW5pbWFkX0xEQUREID0JCWxpYm1hZC5sYQotIAotIEVYVFJBX0RJU1QgPQkJbWFkLmguc2VkICBcCi0tCQkJQ0hBTkdFUyBDT1BZUklHSFQgQ1JFRElUUyBSRUFETUUgVE9ETyBWRVJTSU9OCi0rCQkJQ0hBTkdFUyBDT1BZUklHSFQgQ1JFRElUUyBSRUFETUUgVE9ETyBWRVJTSU9OIFwKLSsJCQltYWQucGMuaW4KLSAKLSBleHBvcnRlZF9oZWFkZXJzID0JdmVyc2lvbi5oIGZpeGVkLmggYml0LmggdGltZXIuaCBzdHJlYW0uaCBmcmFtZS5oICBcCi0gCQkJc3ludGguaCBkZWNvZGVyLmgKLQpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2xpYm1hZC9saWJtYWQvYXV0b21ha2UtZm9yZWlnbi5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9saWJtYWQvbGlibWFkL2F1dG9tYWtlLWZvcmVpZ24ucGF0Y2gKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDNlNTQ0MjQuLjAwMDAwMDAKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2xpYm1hZC9saWJtYWQvYXV0b21ha2UtZm9yZWlnbi5wYXRjaAorKysgL2Rldi9udWxsCkBAIC0xLDEyICswLDAgQEAKLVBhc3MgZm9yZWlnbiB0byBBTV9JTklUX0FVVE9NQUtFIHNvIGl0IGRvZXNuJ3QgZW5mb3JjZSBHTlUgc3RyaWN0bmVzcy4KLQotVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCi1TaWduZWQtb2ZmLWJ5OiBSb3NzIEJ1cnRvbiA8cm9zcy5idXJ0b25AaW50ZWwuY29tPgotCi1kaWZmIC0tZ2l0IGEvY29uZmlndXJlLmFjIGIvY29uZmlndXJlLmFjCi1pbmRleCBlNjAyZmQzLi5lMDc1Yjg2IDEwMDY0NAotLS0tIGEvY29uZmlndXJlLmFjCi0rKysgYi9jb25maWd1cmUuYWMKLUBAIC0yOSArMjkgQEAgQUNfQ09ORklHX1NSQ0RJUihbZGVjb2Rlci5oXSkKLS1BTV9JTklUX0FVVE9NQUtFCi0rQU1fSU5JVF9BVVRPTUFLRShbZm9yZWlnbl0pCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvbGlibWFkL2xpYm1hZC9maXhfZm9yX21pcHNfd2l0aF9nY2MtNC41LjAucGF0Y2ggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvbGlibWFkL2xpYm1hZC9maXhfZm9yX21pcHNfd2l0aF9nY2MtNC41LjAucGF0Y2gKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAxYzdhYTMuLjAwMDAwMDAKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2xpYm1hZC9saWJtYWQvZml4X2Zvcl9taXBzX3dpdGhfZ2NjLTQuNS4wLnBhdGNoCisrKyAvZGV2L251bGwKQEAgLTEsMzMgKzAsMCBAQAotZ2NjIDQuNCBkaWQgdGhpczogVGhlIE1JUFMgcG9ydCBubyBsb25nZXIgcmVjb2duaXplcyB0aGUgaCAgYXNtIGNvbnN0cmFpbnQuIEl0IHdhcyBuZWNlc3NhcnkgdG8gcmVtb3ZlIHRoaXMgY29uc3RyYWludCBpbiBvcmRlciB0byBhdm9pZCBnZW5lcmF0aW5nIHVucHJlZGljdGFibGUgY29kZSBzZXF1ZW5jZXMuIAotCi1zbyB0aGUgbGlibWFkIGJ1aWxkIHdpdGggZ2NjLTQuNS4wIHdhcyBmYWlsaW5nLgotCi1Gb3VuZCBhIHNvbHV0aW9uIGhlcmU6Ci0KLWh0dHA6Ly91cy5nZW5lcmF0aW9uLW50LmNvbS9hbnN3ZXIvYnVnLTU2ODQxOC1saWJtYWQwLWRldi1tcGczMjEtY29tcGlsYXRpb24tZXJyb3JzLW1pcHMtbWlwc2VsLWFyY2hpdGVjdHVyZXMtaGVscC0xNjkwMzM0NTEuaHRtbAotCi1VcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKLQotMjAxMC8wNy8yOQotTml0aW4gQSBLYW1ibGUgPG5pdGluLmEua2FtYmxlQGludGVsLmNvbT4KLQotSW5kZXg6IGxpYm1hZC0wLjE1LjFiL2ZpeGVkLmgKLT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tLSBsaWJtYWQtMC4xNS4xYi5vcmlnL2ZpeGVkLmgKLSsrKyBsaWJtYWQtMC4xNS4xYi9maXhlZC5oCi1AQCAtMjk3LDYgKzI5NywxNSBAQCBtYWRfZml4ZWRfdCBtYWRfZl9tdWxfaW5saW5lKG1hZF9maXhlZF90Ci0gCi0gLyogLS0tIE1JUFMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwotIAotKyMgZWxpZiBkZWZpbmVkKEZQTV9NSVBTKSAmJiAoX19HTlVDX18gPiA0IHx8IChfX0dOVUNfXyA9PSA0ICYmIF9fR05VQ19NSU5PUl9fID49IDQpKQotKyAgICB0eXBlZGVmIHVuc2lnbmVkIGludCB1NjRfZGlfdCBfX2F0dHJpYnV0ZV9fICgobW9kZSAoREkpKSk7Ci0rIyAgIGRlZmluZSBNQURfRl9NTFgoaGksIGxvLCB4LCB5KSBcCi0rICAgIGRvIHsgXAotKyAgICAgICAgdTY0X2RpX3QgX19sbCA9ICh1NjRfZGlfdCkgKHgpICogKHkpOyBcCi0rICAgICAgICBoaSA9IF9fbGwgPj4gMzI7IFwKLSsgICAgICAgIGxvID0gX19sbDsgXAotKyAgICAgfSB3aGlsZSAoMCkKLSsKLSAjIGVsaWYgZGVmaW5lZChGUE1fTUlQUykKLSAKLSAvKgpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2xpYm1hZC9saWJtYWQvbm8tZm9yY2UtbWVtLnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2xpYm1hZC9saWJtYWQvbm8tZm9yY2UtbWVtLnBhdGNoCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkNWU2ZDIwLi4wMDAwMDAwCi0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9saWJtYWQvbGlibWFkL25vLWZvcmNlLW1lbS5wYXRjaAorKysgL2Rldi9udWxsCkBAIC0xLDE4ICswLDAgQEAKLVRoaXMgb3B0aW9uIG5vIGxvbmdlciBleGlzdHMgaW4gZ2NjIDMuNC4xCi0KLVJQIC0gMTgvMDcvMjAwOAotCi1VcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW2NvbmZpZ3VyYXRpb25dCi0KLUluZGV4OiBsaWJtYWQtMC4xNS4xYi9jb25maWd1cmUuYWMKLT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tLSBsaWJtYWQtMC4xNS4xYi5vcmlnL2NvbmZpZ3VyZS5hYwkyMDA4LTA3LTE4IDE1OjQ1OjMwLjAwMDAwMDAwMCArMDEwMAotKysrIGxpYm1hZC0wLjE1LjFiL2NvbmZpZ3VyZS5hYwkyMDA4LTA3LTE4IDE1OjQ1OjM3LjAwMDAwMDAwMCArMDEwMAotQEAgLTE0MCw3ICsxNDAsNiBAQAotICAgICBjYXNlICIkb3B0aW1pemUiIGluCi0gCS1PfCItTyAiKikKLSAJICAgIG9wdGltaXplPSItTyIKLS0JICAgIG9wdGltaXplPSIkb3B0aW1pemUgLWZmb3JjZS1tZW0iCi0gCSAgICBvcHRpbWl6ZT0iJG9wdGltaXplIC1mZm9yY2UtYWRkciIKLSAJICAgIDogI3ggb3B0aW1pemU9IiRvcHRpbWl6ZSAtZmlubGluZS1mdW5jdGlvbnMiCi0gCSAgICA6ICMtIG9wdGltaXplPSIkb3B0aW1pemUgLWZzdHJlbmd0aC1yZWR1Y2UiCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvbGlibWFkL2xpYm1hZC9vYnNvbGV0ZV9hdXRvbWFrZV9tYWNyb3MucGF0Y2ggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvbGlibWFkL2xpYm1hZC9vYnNvbGV0ZV9hdXRvbWFrZV9tYWNyb3MucGF0Y2gKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGNjODdkMjkuLjAwMDAwMDAKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2xpYm1hZC9saWJtYWQvb2Jzb2xldGVfYXV0b21ha2VfbWFjcm9zLnBhdGNoCisrKyAvZGV2L251bGwKQEAgLTEsMTQgKzAsMCBAQAotVXBzdHJlYW0tU3RhdHVzOiBTdWJtaXR0ZWQgW2h0dHBzOi8vc291cmNlZm9yZ2UubmV0L3RyYWNrZXIvP2dyb3VwX2lkPTEyMzQ5JmF0aWQ9MTEyMzQ5XQotCi1TaWduZWQtb2ZmLWJ5OiBNYXJrbyBMaW5kcXZpc3QgPGNhemZpNzRAZ21haWwuY29tPgotZGlmZiAtTnVyZCBsaWJtYWQtMC4xNS4xYi9jb25maWd1cmUuYWMgbGlibWFkLTAuMTUuMWIvY29uZmlndXJlLmFjCi0tLS0gbGlibWFkLTAuMTUuMWIvY29uZmlndXJlLmFjCTIwMDQtMDEtMjMgMTE6NDE6MzIuMDAwMDAwMDAwICswMjAwCi0rKysgbGlibWFkLTAuMTUuMWIvY29uZmlndXJlLmFjCTIwMTMtMDEtMDMgMDg6Mjg6MjMuNzE4NjkzNjk3ICswMjAwCi1AQCAtMjgsNyArMjgsNyBAQAotCi0gQU1fSU5JVF9BVVRPTUFLRQotCi0tQU1fQ09ORklHX0hFQURFUihbY29uZmlnLmhdKQotK0FDX0NPTkZJR19IRUFERVJTKFtjb25maWcuaF0pCi0KLSBkbmwgU3lzdGVtIHR5cGUuCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvbGlibWFkL2xpYm1hZF8wLjE1LjFiLmJiIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2xpYm1hZC9saWJtYWRfMC4xNS4xYi5iYgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDQzMWFiZC4uMDAwMDAwMAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvbGlibWFkL2xpYm1hZF8wLjE1LjFiLmJiCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotU1VNTUFSWSA9ICJNUEVHIEF1ZGlvIERlY29kZXIgbGlicmFyeSIKLUhPTUVQQUdFID0gImh0dHA6Ly9zb3VyY2Vmb3JnZS5uZXQvcHJvamVjdHMvbWFkLyIKLUJVR1RSQUNLRVIgPSAiaHR0cDovL3NvdXJjZWZvcmdlLm5ldC90cmFja2VyLz9ncm91cF9pZD0xMjM0OSZhdGlkPTExMjM0OSIKLUxJQ0VOU0UgPSAiR1BMdjIrIgotTElDRU5TRV9GTEFHUyA9ICJjb21tZXJjaWFsIgotTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9OTRkNTVkNTEyYTliYTM2Y2FhOWI3ZGYwNzliYWUxOWYgXAotCQkJZmlsZTovL0NPUFlSSUdIVDttZDU9OGU1NWViMTQ4OTRlNzgyYjg0NDg4ZDVhMjM5YmMyM2QgXAotCQkJZmlsZTovL3ZlcnNpb24uaDtiZWdpbmxpbmU9MTtlbmRsaW5lPTg7bWQ1PWFhMDczMTFkZDM5Mjg4ZDQzNDlmMjhlMWRlNTE2NDU0IgotU0VDVElPTiA9ICJsaWJzIgotREVQRU5EUyA9ICJsaWJpZDN0YWciCi1QUiA9ICJyMyIKLQotU1JDX1VSSSA9ICJmdHA6Ly9mdHAubWFycy5vcmcvcHViL21wZWcvbGlibWFkLSR7UFZ9LnRhci5neiBcCi0gICAgICAgICAgIGZpbGU6Ly9uby1mb3JjZS1tZW0ucGF0Y2ggXAotICAgICAgICAgICBmaWxlOi8vYWRkLXBrZ2NvbmZpZy5wYXRjaCBcCi0gICAgICAgICAgIGZpbGU6Ly9maXhfZm9yX21pcHNfd2l0aF9nY2MtNC41LjAucGF0Y2ggXAotICAgICAgICAgICBmaWxlOi8vb2Jzb2xldGVfYXV0b21ha2VfbWFjcm9zLnBhdGNoIFwKLSAgICAgICAgICAgZmlsZTovL2F1dG9tYWtlLWZvcmVpZ24ucGF0Y2ggXAotIgotCi1TUkNfVVJJW21kNXN1bV0gPSAiMWJlNTQzYmMzMGM1NmZiNmJlYTFkN2JmNmE2NGU2NmMiCi1TUkNfVVJJW3NoYTI1NnN1bV0gPSAiYmJmYWMzZWQ2YmZiYzI4MjNkMzc3NWViYjkzMTA4NzM3MWUxNDJiYjBlOWJiMWJlZTUxYTc2YTZlMDA3ODY5MCIgCi0KLVMgPSAiJHtXT1JLRElSfS9saWJtYWQtJHtQVn0iCi0KLWluaGVyaXQgYXV0b3Rvb2xzIHBrZ2NvbmZpZwotCi1FWFRSQV9PRUNPTkYgPSAiLWVuYWJsZS1zcGVlZCAtLWVuYWJsZS1zaGFyZWQiCi1FWFRSQV9PRUNPTkZfYXBwZW5kX2FybSA9ICIgLS1lbmFibGUtZnBtPWFybSIKLQotZG9fY29uZmlndXJlX3ByZXBlbmQgKCkgewotIwlkYW1uIHBpY2t5IGF1dG9tYWtlLi4uCi0JdG91Y2ggTkVXUyBBVVRIT1JTIENoYW5nZUxvZwotfQotCi1BUk1fSU5TVFJVQ1RJT05fU0VUID0gImFybSIKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9saWJwbmcvbGlicG5nXzEuNi4yMS5iYiBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9saWJwbmcvbGlicG5nXzEuNi4yMS5iYgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNThjZWYxZi4uMDAwMDAwMAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvbGlicG5nL2xpYnBuZ18xLjYuMjEuYmIKKysrIC9kZXYvbnVsbApAQCAtMSwyNSArMCwwIEBACi1TVU1NQVJZID0gIlBORyBpbWFnZSBmb3JtYXQgZGVjb2RpbmcgbGlicmFyeSIKLUhPTUVQQUdFID0gImh0dHA6Ly93d3cubGlicG5nLm9yZy8iCi1TRUNUSU9OID0gImxpYnMiCi1MSUNFTlNFID0gIkxpYnBuZyIKLUxJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0xJQ0VOU0U7bWQ1PTA2YTFiNmZkZTZkOTMxNzBiYjcyMjAxYzgwMDBiZjNkIFwKLSAgICAgICAgICAgICAgICAgICAgZmlsZTovL3BuZy5oO2VuZGxpbmU9MTEyO21kNT05YThiNWY4M2UxZTgwNDZkZjY3MmRlYWI4N2YyMzViZSIKLURFUEVORFMgPSAiemxpYiIKLQotU1JDX1VSSSA9ICIke0dFTlRPT19NSVJST1J9L2xpYnBuZy0ke1BWfS50YXIueHogXAotICAgICAgICAgICIKLVNSQ19VUklbbWQ1c3VtXSA9ICIzYmFjYjQ3MjhmNjY5NGE2NGFkOTA1Mjc2OWQ2YTRjZSIKLVNSQ19VUklbc2hhMjU2c3VtXSA9ICI2YzhmMTg0OWViOTI2NDIxOWJmNWQ3MDM2MDFlNWFiZTkyYTU4NjUxZWNhZTkyN2EwM2QxYTFhYTE1ZWUyMDgzIgotCi1CSU5DT05GSUcgPSAiJHtiaW5kaXJ9L2xpYnBuZy1jb25maWcgJHtiaW5kaXJ9L2xpYnBuZzE2LWNvbmZpZyIKLQotaW5oZXJpdCBhdXRvdG9vbHMgYmluY29uZmlnLWRpc2FibGVkIHBrZ2NvbmZpZwotCi0jIFdvcmsgYXJvdW5kIG1pc3Npbmcgc3ltYm9scwotRVhUUkFfT0VDT05GX2FwcGVuZF9jbGFzcy10YXJnZXQgPSAiICR7QGJiLnV0aWxzLmNvbnRhaW5zKCJUVU5FX0ZFQVRVUkVTIiwgIm5lb24iLCAiLS1lbmFibGUtYXJtLW5lb249b24iLCAiLS1lbmFibGUtYXJtLW5lb249b2ZmIiAsZCl9IgotCi1QQUNLQUdFUyA9KyAiJHtQTn0tdG9vbHMiCi0KLUZJTEVTXyR7UE59LXRvb2xzID0gIiR7YmluZGlyfS9wbmctZml4LWl0eHQgJHtiaW5kaXJ9L3BuZ2ZpeCIKLQotQkJDTEFTU0VYVEVORCA9ICJuYXRpdmUgbmF0aXZlc2RrIgpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2xpYnBuZy9saWJwbmdfMS42LjI0LmJiIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2xpYnBuZy9saWJwbmdfMS42LjI0LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY5MWFiN2YKLS0tIC9kZXYvbnVsbAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvbGlicG5nL2xpYnBuZ18xLjYuMjQuYmIKQEAgLTAsMCArMSwyNSBAQAorU1VNTUFSWSA9ICJQTkcgaW1hZ2UgZm9ybWF0IGRlY29kaW5nIGxpYnJhcnkiCitIT01FUEFHRSA9ICJodHRwOi8vd3d3LmxpYnBuZy5vcmcvIgorU0VDVElPTiA9ICJsaWJzIgorTElDRU5TRSA9ICJMaWJwbmciCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9MSUNFTlNFO21kNT01MDg5MjE0ODMzNTg2YmE0NDQwNDhmZDFkYmJjNzZhNCBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9wbmcuaDtlbmRsaW5lPTE0OTttZDU9Mzc2ZDhmZjdmNjliN2M0YWQzYTA5ZjQ2NzJjZWM2OTYiCitERVBFTkRTID0gInpsaWIiCisKK1NSQ19VUkkgPSAiJHtHRU5UT09fTUlSUk9SfS9saWJwbmctJHtQVn0udGFyLnh6IFwKKyAgICAgICAgICAiCitTUkNfVVJJW21kNXN1bV0gPSAiZmZjZGJkNTQ5ODE0Nzg3ZmE4MDEwYzM3MmUzNWZmMjUiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiNzkzMmRjOWU1ZTQ1ZDU1ZWNlOWQyMDRlOTAxOTZiYmI1ZjJjODI3NDFjY2IwZjdlMTBkMDdkMzY0YTZmZDZkZCIKKworQklOQ09ORklHID0gIiR7YmluZGlyfS9saWJwbmctY29uZmlnICR7YmluZGlyfS9saWJwbmcxNi1jb25maWciCisKK2luaGVyaXQgYXV0b3Rvb2xzIGJpbmNvbmZpZy1kaXNhYmxlZCBwa2djb25maWcKKworIyBXb3JrIGFyb3VuZCBtaXNzaW5nIHN5bWJvbHMKK0VYVFJBX09FQ09ORl9hcHBlbmRfY2xhc3MtdGFyZ2V0ID0gIiAke0BiYi51dGlscy5jb250YWlucygiVFVORV9GRUFUVVJFUyIsICJuZW9uIiwgIi0tZW5hYmxlLWFybS1uZW9uPW9uIiwgIi0tZW5hYmxlLWFybS1uZW9uPW9mZiIgLGQpfSIKKworUEFDS0FHRVMgPSsgIiR7UE59LXRvb2xzIgorCitGSUxFU18ke1BOfS10b29scyA9ICIke2JpbmRpcn0vcG5nLWZpeC1pdHh0ICR7YmluZGlyfS9wbmdmaXggJHtiaW5kaXJ9L3BuZ2NwIgorCitCQkNMQVNTRVhURU5EID0gIm5hdGl2ZSBuYXRpdmVzZGsiCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvbGlic25kZmlsZS9saWJzbmRmaWxlMV8xLjAuMjYuYmIgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvbGlic25kZmlsZS9saWJzbmRmaWxlMV8xLjAuMjYuYmIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDgwNDM1ZDQuLjAwMDAwMDAKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2xpYnNuZGZpbGUvbGlic25kZmlsZTFfMS4wLjI2LmJiCisrKyAvZGV2L251bGwKQEAgLTEsMjYgKzAsMCBAQAotU1VNTUFSWSA9ICJBdWRpbyBmb3JtYXQgQ29udmVyc2lvbiBsaWJyYXJ5IgotSE9NRVBBR0UgPSAiaHR0cDovL3d3dy5tZWdhLW5lcmQuY29tL2xpYnNuZGZpbGUiCi1BVVRIT1IgPSAiRXJpayBkZSBDYXN0cm8gTG9wbyIKLURFUEVORFMgPSAiZmxhYyBsaWJvZ2cgbGlidm9yYmlzIHNxbGl0ZTMiCi1TRUNUSU9OID0gImxpYnMvbXVsdGltZWRpYSIKLUxJQ0VOU0UgPSAiTEdQTHYyLjEiCi0KLVNSQ19VUkkgPSAiaHR0cDovL3d3dy5tZWdhLW5lcmQuY29tL2xpYnNuZGZpbGUvZmlsZXMvbGlic25kZmlsZS0ke1BWfS50YXIuZ3oiCi0KLVNSQ19VUklbbWQ1c3VtXSA9ICJlYzgxMGEwYzYwYzA4NzcyYThhNTU1MjcwNGI2MzM5MyIKLVNSQ19VUklbc2hhMjU2c3VtXSA9ICJjZDY1MjBlYzc2M2QxYTQ1NTczODg1ZWNiMWY4ZTRlNDI1MDVhYzEyMTgwMjY4NDgyYTQ0YjI4NDg0YTI1MDkyIgotCi1MSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT1lNzdmZTkzMjAyNzM2YjQ3YzA3MDM1OTEwZjQ3OTc0YSIKLQotUyA9ICIke1dPUktESVJ9L2xpYnNuZGZpbGUtJHtQVn0iCi0KLVBBQ0tBR0VDT05GSUcgPz89ICIke0BiYi51dGlscy5jb250YWlucygnRElTVFJPX0ZFQVRVUkVTJywgJ2Fsc2EnLCAnYWxzYScsICcnLCBkKX0iCi1QQUNLQUdFQ09ORklHW2Fsc2FdID0gIi0tZW5hYmxlLWFsc2EsLS1kaXNhYmxlLWFsc2EsYWxzYS1saWIiCi0KLWluaGVyaXQgYXV0b3Rvb2xzIGxpYl9wYWNrYWdlIHBrZ2NvbmZpZwotCi1kb19jb25maWd1cmVfcHJlcGVuZF9hcm0oKSB7Ci0JZXhwb3J0IGFjX2N2X3N5c19sYXJnZWZpbGVfc291cmNlPTEKLQlleHBvcnQgYWNfY3Zfc3lzX2ZpbGVfb2Zmc2V0X2JpdHM9NjQKLX0KLQpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2xpYnNuZGZpbGUvbGlic25kZmlsZTFfMS4wLjI3LmJiIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2xpYnNuZGZpbGUvbGlic25kZmlsZTFfMS4wLjI3LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVjNDE3MTkKLS0tIC9kZXYvbnVsbAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvbGlic25kZmlsZS9saWJzbmRmaWxlMV8xLjAuMjcuYmIKQEAgLTAsMCArMSwyNiBAQAorU1VNTUFSWSA9ICJBdWRpbyBmb3JtYXQgQ29udmVyc2lvbiBsaWJyYXJ5IgorSE9NRVBBR0UgPSAiaHR0cDovL3d3dy5tZWdhLW5lcmQuY29tL2xpYnNuZGZpbGUiCitBVVRIT1IgPSAiRXJpayBkZSBDYXN0cm8gTG9wbyIKK0RFUEVORFMgPSAiZmxhYyBsaWJvZ2cgbGlidm9yYmlzIHNxbGl0ZTMiCitTRUNUSU9OID0gImxpYnMvbXVsdGltZWRpYSIKK0xJQ0VOU0UgPSAiTEdQTHYyLjEiCisKK1NSQ19VUkkgPSAiaHR0cDovL3d3dy5tZWdhLW5lcmQuY29tL2xpYnNuZGZpbGUvZmlsZXMvbGlic25kZmlsZS0ke1BWfS50YXIuZ3oiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICJmZDFkOTdjNjA3N2YwM2I1ZDk4NGQ3OTU2ZmZlZGI3YSIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICJhMzkxOTUyZjI3ZjRhOTJjZWIyYjRjMDY0OTNhYzEwNzg5NmVkNmM3NmJlOWE2MTNhNDczMWYwNzZkMzBmYWMwIgorCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT1lNzdmZTkzMjAyNzM2YjQ3YzA3MDM1OTEwZjQ3OTc0YSIKKworUyA9ICIke1dPUktESVJ9L2xpYnNuZGZpbGUtJHtQVn0iCisKK1BBQ0tBR0VDT05GSUcgPz89ICIke0BiYi51dGlscy5jb250YWlucygnRElTVFJPX0ZFQVRVUkVTJywgJ2Fsc2EnLCAnYWxzYScsICcnLCBkKX0iCitQQUNLQUdFQ09ORklHW2Fsc2FdID0gIi0tZW5hYmxlLWFsc2EsLS1kaXNhYmxlLWFsc2EsYWxzYS1saWIiCisKK2luaGVyaXQgYXV0b3Rvb2xzIGxpYl9wYWNrYWdlIHBrZ2NvbmZpZworCitkb19jb25maWd1cmVfcHJlcGVuZF9hcm0oKSB7CisJZXhwb3J0IGFjX2N2X3N5c19sYXJnZWZpbGVfc291cmNlPTEKKwlleHBvcnQgYWNfY3Zfc3lzX2ZpbGVfb2Zmc2V0X2JpdHM9NjQKK30KKwpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2xpYnRpZmYvZmlsZXMvQ1ZFLTIwMTUtODY2NV84NjgzLnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2xpYnRpZmYvZmlsZXMvQ1ZFLTIwMTUtODY2NV84NjgzLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM5YzUwNTkKLS0tIC9kZXYvbnVsbAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvbGlidGlmZi9maWxlcy9DVkUtMjAxNS04NjY1Xzg2ODMucGF0Y2gKQEAgLTAsMCArMSwxMzcgQEAKK0Zyb20gZjk0YTI5YTgyMmY1NTI4ZDIzMzQ1OTI3NjBmYmI3OTM4ZjE1ZWI1NSBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IGVyb3VhdWx0IDxlcm91YXVsdD4KK0RhdGU6IFNhdCwgMjYgRGVjIDIwMTUgMTc6MzI6MDMgKzAwMDAKK1N1YmplY3Q6IFtQQVRDSF0gKiBsaWJ0aWZmL3RpZl9nZXRpbWFnZS5jOiBmaXggb3V0LW9mLWJvdW5kIHJlYWRzIGluCisgVElGRlJHQkFJbWFnZSBpbnRlcmZhY2UgaW4gY2FzZSBvZiB1bnN1cHBvcnRlZCB2YWx1ZXMgb2YKKyBTYW1wbGVzUGVyUGl4ZWwvRXh0cmFTYW1wbGVzIGZvciBMb2dMVVYgLyBDSUVMYWIuIEFkZCBleHBsaWNpdCBjYWxsIHRvCisgVElGRlJHQkFJbWFnZU9LKCkgaW4gVElGRlJHQkFJbWFnZUJlZ2luKCkuIEZpeCBDVkUtMjAxNS04NjY1IHJlcG9ydGVkIGJ5CisgbGltaW5neGluZyBhbmQgQ1ZFLTIwMTUtODY4MyByZXBvcnRlZCBieSB6emYgb2YgQWxpYmFiYS4KKworVXBzdHJlYW0tU3RhdHVzOiBCYWNrcG9ydAorQ1ZFOiBDVkUtMjAxNS04NjY1CitDVkU6IENWRS0yMDE1LTg2ODMKK2h0dHBzOi8vZ2l0aHViLmNvbS92YWR6L2xpYnRpZmYvY29tbWl0L2Y5NGEyOWE4MjJmNTUyOGQyMzM0NTkyNzYwZmJiNzkzOGYxNWViNTUKKworU2lnbmVkLW9mZi1ieTogQXJtaW4gS3VzdGVyIDxha3VzdGVyQG12aXN0YS5jb20+CisKKy0tLQorIENoYW5nZUxvZyAgICAgICAgICAgICAgfCAgOCArKysrKysrKworIGxpYnRpZmYvdGlmX2dldGltYWdlLmMgfCAzNSArKysrKysrKysrKysrKysrKysrKysrLS0tLS0tLS0tLS0tLQorIDIgZmlsZXMgY2hhbmdlZCwgMzAgaW5zZXJ0aW9ucygrKSwgMTMgZGVsZXRpb25zKC0pCisKK0luZGV4OiB0aWZmLTQuMC42L2xpYnRpZmYvdGlmX2dldGltYWdlLmMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSB0aWZmLTQuMC42Lm9yaWcvbGlidGlmZi90aWZfZ2V0aW1hZ2UuYworKysrIHRpZmYtNC4wLjYvbGlidGlmZi90aWZfZ2V0aW1hZ2UuYworQEAgLTE4MiwyMCArMTgyLDIyIEBAIFRJRkZSR0JBSW1hZ2VPSyhUSUZGKiB0aWYsIGNoYXIgZW1zZ1sxMDIKKyAJCQkJICAgICJQbGFuYXJjb25maWd1cmF0aW9uIiwgdGQtPnRkX3BsYW5hcmNvbmZpZyk7CisgCQkJCXJldHVybiAoMCk7CisgCQkJfQorLQkJCWlmKCB0ZC0+dGRfc2FtcGxlc3BlcnBpeGVsICE9IDMgKQorKwkJCWlmKCB0ZC0+dGRfc2FtcGxlc3BlcnBpeGVsICE9IDMgfHwgY29sb3JjaGFubmVscyAhPSAzICkKKyAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIHNwcmludGYoZW1zZywKKy0gICAgICAgICAgICAgICAgICAgICAgICAiU29ycnksIGNhbiBub3QgaGFuZGxlIGltYWdlIHdpdGggJXM9JWQiLAorLSAgICAgICAgICAgICAgICAgICAgICAgICJTYW1wbGVzL3BpeGVsIiwgdGQtPnRkX3NhbXBsZXNwZXJwaXhlbCk7CisrICAgICAgICAgICAgICAgICAgICAgICAgIlNvcnJ5LCBjYW4gbm90IGhhbmRsZSBpbWFnZSB3aXRoICVzPSVkLCAlcz0lZCIsCisrICAgICAgICAgICAgICAgICAgICAgICAgIlNhbXBsZXMvcGl4ZWwiLCB0ZC0+dGRfc2FtcGxlc3BlcnBpeGVsLAorKyAgICAgICAgICAgICAgICAgICAgICAgICJjb2xvcmNoYW5uZWxzIiwgY29sb3JjaGFubmVscyk7CisgICAgICAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICAgICAgIH0KKyAJCQlicmVhazsKKyAJCWNhc2UgUEhPVE9NRVRSSUNfQ0lFTEFCOgorLSAgICAgICAgICAgIGlmKCB0ZC0+dGRfc2FtcGxlc3BlcnBpeGVsICE9IDMgfHwgdGQtPnRkX2JpdHNwZXJzYW1wbGUgIT0gOCApCisrICAgICAgICAgICAgaWYoIHRkLT50ZF9zYW1wbGVzcGVycGl4ZWwgIT0gMyB8fCBjb2xvcmNoYW5uZWxzICE9IDMgfHwgdGQtPnRkX2JpdHNwZXJzYW1wbGUgIT0gOCApCisgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICBzcHJpbnRmKGVtc2csCistICAgICAgICAgICAgICAgICAgICAgICAgIlNvcnJ5LCBjYW4gbm90IGhhbmRsZSBpbWFnZSB3aXRoICVzPSVkIGFuZCAlcz0lZCIsCisrICAgICAgICAgICAgICAgICAgICAgICAgIlNvcnJ5LCBjYW4gbm90IGhhbmRsZSBpbWFnZSB3aXRoICVzPSVkLCAlcz0lZCBhbmQgJXM9JWQiLAorICAgICAgICAgICAgICAgICAgICAgICAgICJTYW1wbGVzL3BpeGVsIiwgdGQtPnRkX3NhbXBsZXNwZXJwaXhlbCwKKysgICAgICAgICAgICAgICAgICAgICAgICAiY29sb3JjaGFubmVscyIsIGNvbG9yY2hhbm5lbHMsCisgICAgICAgICAgICAgICAgICAgICAgICAgIkJpdHMvc2FtcGxlIiwgdGQtPnRkX2JpdHNwZXJzYW1wbGUpOworICAgICAgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgICAgICB9CitAQCAtMjU1LDYgKzI1Nyw5IEBAIFRJRkZSR0JBSW1hZ2VCZWdpbihUSUZGUkdCQUltYWdlKiBpbWcsIFQKKyAJaW50IGNvbG9yY2hhbm5lbHM7CisgCXVpbnQxNiAqcmVkX29yaWcsICpncmVlbl9vcmlnLCAqYmx1ZV9vcmlnOworIAlpbnQgbl9jb2xvcjsKKysJCisrCWlmKCAhVElGRlJHQkFJbWFnZU9LKHRpZiwgZW1zZykgKQorKwkJcmV0dXJuIDA7CisgCisgCS8qIEluaXRpYWxpemUgdG8gbm9ybWFsIHZhbHVlcyAqLworIAlpbWctPnJvd19vZmZzZXQgPSAwOworQEAgLTI1MDgsMjkgKzI1MTMsMzMgQEAgUGlja0NvbnRpZ0Nhc2UoVElGRlJHQkFJbWFnZSogaW1nKQorIAkJY2FzZSBQSE9UT01FVFJJQ19SR0I6CisgCQkJc3dpdGNoIChpbWctPmJpdHNwZXJzYW1wbGUpIHsKKyAJCQkJY2FzZSA4OgorLQkJCQkJaWYgKGltZy0+YWxwaGEgPT0gRVhUUkFTQU1QTEVfQVNTT0NBTFBIQSkKKysJCQkJCWlmIChpbWctPmFscGhhID09IEVYVFJBU0FNUExFX0FTU09DQUxQSEEgJiYKKysJCQkJCQlpbWctPnNhbXBsZXNwZXJwaXhlbCA+PSA0KQorIAkJCQkJCWltZy0+cHV0LmNvbnRpZyA9IHB1dFJHQkFBY29udGlnOGJpdHRpbGU7CistCQkJCQllbHNlIGlmIChpbWctPmFscGhhID09IEVYVFJBU0FNUExFX1VOQVNTQUxQSEEpCisrCQkJCQllbHNlIGlmIChpbWctPmFscGhhID09IEVYVFJBU0FNUExFX1VOQVNTQUxQSEEgJiYKKysJCQkJCQkJIGltZy0+c2FtcGxlc3BlcnBpeGVsID49IDQpCisgCQkJCQl7CisgCQkJCQkJaWYgKEJ1aWxkTWFwVWFUb0FhKGltZykpCisgCQkJCQkJCWltZy0+cHV0LmNvbnRpZyA9IHB1dFJHQlVBY29udGlnOGJpdHRpbGU7CisgCQkJCQl9CistCQkJCQllbHNlCisrCQkJCQllbHNlIGlmKCBpbWctPnNhbXBsZXNwZXJwaXhlbCA+PSAzICkKKyAJCQkJCQlpbWctPnB1dC5jb250aWcgPSBwdXRSR0Jjb250aWc4Yml0dGlsZTsKKyAJCQkJCWJyZWFrOworIAkJCQljYXNlIDE2OgorLQkJCQkJaWYgKGltZy0+YWxwaGEgPT0gRVhUUkFTQU1QTEVfQVNTT0NBTFBIQSkKKysJCQkJCWlmIChpbWctPmFscGhhID09IEVYVFJBU0FNUExFX0FTU09DQUxQSEEgJiYKKysJCQkJCQlpbWctPnNhbXBsZXNwZXJwaXhlbCA+PTQgKQorIAkJCQkJeworIAkJCQkJCWlmIChCdWlsZE1hcEJpdGRlcHRoMTZUbzgoaW1nKSkKKyAJCQkJCQkJaW1nLT5wdXQuY29udGlnID0gcHV0UkdCQUFjb250aWcxNmJpdHRpbGU7CisgCQkJCQl9CistCQkJCQllbHNlIGlmIChpbWctPmFscGhhID09IEVYVFJBU0FNUExFX1VOQVNTQUxQSEEpCisrCQkJCQllbHNlIGlmIChpbWctPmFscGhhID09IEVYVFJBU0FNUExFX1VOQVNTQUxQSEEgJiYKKysJCQkJCQkJIGltZy0+c2FtcGxlc3BlcnBpeGVsID49NCApCisgCQkJCQl7CisgCQkJCQkJaWYgKEJ1aWxkTWFwQml0ZGVwdGgxNlRvOChpbWcpICYmCisgCQkJCQkJICAgIEJ1aWxkTWFwVWFUb0FhKGltZykpCisgCQkJCQkJCWltZy0+cHV0LmNvbnRpZyA9IHB1dFJHQlVBY29udGlnMTZiaXR0aWxlOworIAkJCQkJfQorLQkJCQkJZWxzZQorKwkJCQkJZWxzZSBpZiggaW1nLT5zYW1wbGVzcGVycGl4ZWwgPj0zICkKKyAJCQkJCXsKKyAJCQkJCQlpZiAoQnVpbGRNYXBCaXRkZXB0aDE2VG84KGltZykpCisgCQkJCQkJCWltZy0+cHV0LmNvbnRpZyA9IHB1dFJHQmNvbnRpZzE2Yml0dGlsZTsKK0BAIC0yNTM5LDcgKzI1NDgsNyBAQCBQaWNrQ29udGlnQ2FzZShUSUZGUkdCQUltYWdlKiBpbWcpCisgCQkJfQorIAkJCWJyZWFrOworIAkJY2FzZSBQSE9UT01FVFJJQ19TRVBBUkFURUQ6CistCQkJaWYgKGJ1aWxkTWFwKGltZykpIHsKKysJCQlpZiAoaW1nLT5zYW1wbGVzcGVycGl4ZWwgPj00ICYmIGJ1aWxkTWFwKGltZykpIHsKKyAJCQkJaWYgKGltZy0+Yml0c3BlcnNhbXBsZSA9PSA4KSB7CisgCQkJCQlpZiAoIWltZy0+TWFwKQorIAkJCQkJCWltZy0+cHV0LmNvbnRpZyA9IHB1dFJHQmNvbnRpZzhiaXRDTVlLdGlsZTsKK0BAIC0yNjM1LDcgKzI2NDQsNyBAQCBQaWNrQ29udGlnQ2FzZShUSUZGUkdCQUltYWdlKiBpbWcpCisgCQkJfQorIAkJCWJyZWFrOworIAkJY2FzZSBQSE9UT01FVFJJQ19DSUVMQUI6CistCQkJaWYgKGJ1aWxkTWFwKGltZykpIHsKKysJCQlpZiAoaW1nLT5zYW1wbGVzcGVycGl4ZWwgPT0gMyAmJiBidWlsZE1hcChpbWcpKSB7CisgCQkJCWlmIChpbWctPmJpdHNwZXJzYW1wbGUgPT0gOCkKKyAJCQkJCWltZy0+cHV0LmNvbnRpZyA9IGluaXRDSUVMYWJDb252ZXJzaW9uKGltZyk7CisgCQkJCWJyZWFrOworSW5kZXg6IHRpZmYtNC4wLjYvQ2hhbmdlTG9nCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gdGlmZi00LjAuNi5vcmlnL0NoYW5nZUxvZworKysrIHRpZmYtNC4wLjYvQ2hhbmdlTG9nCitAQCAtMSwzICsxLDExIEBACisrMjAxNS0xMi0yNiAgRXZlbiBSb3VhdWx0IDxldmVuLnJvdWF1bHQgYXQgc3BhdGlhbHlzLmNvbT4KKysKKysgICAqIGxpYnRpZmYvdGlmX2dldGltYWdlLmM6IGZpeCBvdXQtb2YtYm91bmQgcmVhZHMgaW4gVElGRlJHQkFJbWFnZQorKyAgIGludGVyZmFjZSBpbiBjYXNlIG9mIHVuc3VwcG9ydGVkIHZhbHVlcyBvZiBTYW1wbGVzUGVyUGl4ZWwvRXh0cmFTYW1wbGVzCisrICAgZm9yIExvZ0xVViAvIENJRUxhYi4gQWRkIGV4cGxpY2l0IGNhbGwgdG8gVElGRlJHQkFJbWFnZU9LKCkgaW4KKysgICBUSUZGUkdCQUltYWdlQmVnaW4oKS4gRml4IENWRS0yMDE1LTg2NjUgcmVwb3J0ZWQgYnkgbGltaW5neGluZyBhbmQKKysgICBDVkUtMjAxNS04NjgzIHJlcG9ydGVkIGJ5IHp6ZiBvZiBBbGliYWJhLgorKworIDIwMTUtMDktMTIgIEJvYiBGcmllc2VuaGFobiAgPGJmcmllc2VuQHNpbXBsZS5kYWxsYXMudHgudXM+CisgCisgCSogbGlidGlmZiA0LjAuNiByZWxlYXNlZC4KZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9saWJ0aWZmL2ZpbGVzL0NWRS0yMDE1LTg3ODEucGF0Y2ggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvbGlidGlmZi9maWxlcy9DVkUtMjAxNS04NzgxLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA4NDZmMGYKLS0tIC9kZXYvbnVsbAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvbGlidGlmZi9maWxlcy9DVkUtMjAxNS04NzgxLnBhdGNoCkBAIC0wLDAgKzEsMTk1IEBACitGcm9tIGFhYWI1YzNjOWQyYTJjNjk4NGYyM2NjYmM3OTcwMjYxMDQzOWJjNjUgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBlcm91YXVsdCA8ZXJvdWF1bHQ+CitEYXRlOiBTdW4sIDI3IERlYyAyMDE1IDE2OjI1OjExICswMDAwCitTdWJqZWN0OiBbUEFUQ0hdICogbGlidGlmZi90aWZfbHV2LmM6IGZpeCBwb3RlbnRpYWwgb3V0LW9mLWJvdW5kIHdyaXRlcyBpbgorIGRlY29kZSBmdW5jdGlvbnMgaW4gbm9uIGRlYnVnIGJ1aWxkcyBieSByZXBsYWNpbmcgYXNzZXJ0KClzIGJ5IHJlZ3VsYXIgaWYKKyBjaGVja3MgKGJ1Z3ppbGxhICMyNTIyKS4gRml4IHBvdGVudGlhbCBvdXQtb2YtYm91bmQgcmVhZHMgaW4gY2FzZSBvZiBzaG9ydAorIGlucHV0IGRhdGEuCisKK1Vwc3RyZWFtLVN0YXR1czogQmFja3BvcnQKKworaHR0cHM6Ly9naXRodWIuY29tL3ZhZHovbGlidGlmZi9jb21taXQvYWFhYjVjM2M5ZDJhMmM2OTg0ZjIzY2NiYzc5NzAyNjEwNDM5YmM2NQoraGFuZCBhcHBsaWVkIENoYW5nZWxvZyBjaGFuZ2VzCisKK0NWRTogQ1ZFLTIwMTUtODc4MQorCitTaWduZWQtb2ZmLWJ5OiBBcm1pbiBLdXN0ZXIgPGFrdXN0ZXJAbXZpc3RhLmNvbT4KKy0tLQorIENoYW5nZUxvZyAgICAgICAgIHwgIDcgKysrKysrKworIGxpYnRpZmYvdGlmX2x1di5jIHwgNTUgKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKystLS0tLS0tLS0tLQorIDIgZmlsZXMgY2hhbmdlZCwgNTEgaW5zZXJ0aW9ucygrKSwgMTEgZGVsZXRpb25zKC0pCisKK0luZGV4OiB0aWZmLTQuMC40L0NoYW5nZUxvZworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIHRpZmYtNC4wLjQub3JpZy9DaGFuZ2VMb2cKKysrKyB0aWZmLTQuMC40L0NoYW5nZUxvZworQEAgLTEsMyArMSwxMCBAQAorKzIwMTUtMTItMjcgIEV2ZW4gUm91YXVsdCA8ZXZlbi5yb3VhdWx0IGF0IHNwYXRpYWx5cy5jb20+CisrCisrCSogbGlidGlmZi90aWZfbHV2LmM6IGZpeCBwb3RlbnRpYWwgb3V0LW9mLWJvdW5kIHdyaXRlcyBpbiBkZWNvZGUKKysJZnVuY3Rpb25zIGluIG5vbiBkZWJ1ZyBidWlsZHMgYnkgcmVwbGFjaW5nIGFzc2VydCgpcyBieSByZWd1bGFyIGlmCisrCWNoZWNrcyAoYnVnemlsbGEgIzI1MjIpLgorKwlGaXggcG90ZW50aWFsIG91dC1vZi1ib3VuZCByZWFkcyBpbiBjYXNlIG9mIHNob3J0IGlucHV0IGRhdGEuCisrCisgMjAxNS0xMi0yNiAgRXZlbiBSb3VhdWx0IDxldmVuLnJvdWF1bHQgYXQgc3BhdGlhbHlzLmNvbT4KKyAKKyAJKiBsaWJ0aWZmL3RpZl9nZXRpbWFnZS5jOiBmaXggb3V0LW9mLWJvdW5kIHJlYWRzIGluIFRJRkZSR0JBSW1hZ2UKK0luZGV4OiB0aWZmLTQuMC40L2xpYnRpZmYvdGlmX2x1di5jCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gdGlmZi00LjAuNC5vcmlnL2xpYnRpZmYvdGlmX2x1di5jCisrKysgdGlmZi00LjAuNC9saWJ0aWZmL3RpZl9sdXYuYworQEAgLTIwMiw3ICsyMDIsMTEgQEAgTG9nTDE2RGVjb2RlKFRJRkYqIHRpZiwgdWludDgqIG9wLCB0bXNpegorIAlpZiAoc3AtPnVzZXJfZGF0YWZtdCA9PSBTR0lMT0dEQVRBRk1UXzE2QklUKQorIAkJdHAgPSAoaW50MTYqKSBvcDsKKyAJZWxzZSB7CistCQlhc3NlcnQoc3AtPnRidWZsZW4gPj0gbnBpeGVscyk7CisrCQlpZihzcC0+dGJ1ZmxlbiA8IG5waXhlbHMpIHsKKysJCQlUSUZGRXJyb3JFeHQodGlmLT50aWZfY2xpZW50ZGF0YSwgbW9kdWxlLAorKwkJCQkJCSAiVHJhbnNsYXRpb24gYnVmZmVyIHRvbyBzaG9ydCIpOworKwkJCXJldHVybiAoMCk7CisrCQl9CisgCQl0cCA9IChpbnQxNiopIHNwLT50YnVmOworIAl9CisgCV9USUZGbWVtc2V0KCh2b2lkKikgdHAsIDAsIG5waXhlbHMqc2l6ZW9mICh0cFswXSkpOworQEAgLTIxMSw5ICsyMTUsMTEgQEAgTG9nTDE2RGVjb2RlKFRJRkYqIHRpZiwgdWludDgqIG9wLCB0bXNpegorIAljYyA9IHRpZi0+dGlmX3Jhd2NjOworIAkvKiBnZXQgZWFjaCBieXRlIHN0cmluZyAqLworIAlmb3IgKHNoZnQgPSAyKjg7IChzaGZ0IC09IDgpID49IDA7ICkgeworLQkJZm9yIChpID0gMDsgaSA8IG5waXhlbHMgJiYgY2MgPiAwOyApCisrCQlmb3IgKGkgPSAwOyBpIDwgbnBpeGVscyAmJiBjYyA+IDA7ICkgeworIAkJCWlmICgqYnAgPj0gMTI4KSB7CQkvKiBydW4gKi8KKy0JCQkJcmMgPSAqYnArKyArICgyLTEyOCk7ICAgLyogVE9ETzogcG90ZW50aWFsIGlucHV0IGJ1ZmZlciBvdmVycnVuIHdoZW4gZGVjb2RpbmcgY29ycnVwdCBvciB0cnVuY2F0ZWQgZGF0YSAqLworKwkJCQlpZiggY2MgPCAyICkKKysJCQkJCWJyZWFrOworKwkJCQlyYyA9ICpicCsrICsgKDItMTI4KTsKKyAJCQkJYiA9IChpbnQxNikoKmJwKysgPDwgc2hmdCk7CisgCQkJCWNjIC09IDI7CisgCQkJCXdoaWxlIChyYy0tICYmIGkgPCBucGl4ZWxzKQorQEAgLTIyMyw2ICsyMjksNyBAQCBMb2dMMTZEZWNvZGUoVElGRiogdGlmLCB1aW50OCogb3AsIHRtc2l6CisgCQkJCXdoaWxlICgtLWNjICYmIHJjLS0gJiYgaSA8IG5waXhlbHMpCisgCQkJCQl0cFtpKytdIHw9IChpbnQxNikqYnArKyA8PCBzaGZ0OworIAkJCX0KKysJCX0KKyAJCWlmIChpICE9IG5waXhlbHMpIHsKKyAjaWYgZGVmaW5lZChfX1dJTjMyX18pICYmIChkZWZpbmVkKF9NU0NfVkVSKSB8fCBkZWZpbmVkKF9fTUlOR1czMl9fKSkKKyAJCQlUSUZGRXJyb3JFeHQodGlmLT50aWZfY2xpZW50ZGF0YSwgbW9kdWxlLAorQEAgLTI2OCwxMyArMjc1LDE3IEBAIExvZ0x1dkRlY29kZTI0KFRJRkYqIHRpZiwgdWludDgqIG9wLCB0bXMKKyAJaWYgKHNwLT51c2VyX2RhdGFmbXQgPT0gU0dJTE9HREFUQUZNVF9SQVcpCisgCQl0cCA9ICh1aW50MzIgKilvcDsKKyAJZWxzZSB7CistCQlhc3NlcnQoc3AtPnRidWZsZW4gPj0gbnBpeGVscyk7CisrCQlpZihzcC0+dGJ1ZmxlbiA8IG5waXhlbHMpIHsKKysJCQlUSUZGRXJyb3JFeHQodGlmLT50aWZfY2xpZW50ZGF0YSwgbW9kdWxlLAorKwkJCQkJCSAiVHJhbnNsYXRpb24gYnVmZmVyIHRvbyBzaG9ydCIpOworKwkJCXJldHVybiAoMCk7CisrCQl9CisgCQl0cCA9ICh1aW50MzIgKikgc3AtPnRidWY7CisgCX0KKyAJLyogY29weSB0byBhcnJheSBvZiB1aW50MzIgKi8KKyAJYnAgPSAodW5zaWduZWQgY2hhciopIHRpZi0+dGlmX3Jhd2NwOworIAljYyA9IHRpZi0+dGlmX3Jhd2NjOworLQlmb3IgKGkgPSAwOyBpIDwgbnBpeGVscyAmJiBjYyA+IDA7IGkrKykgeworKwlmb3IgKGkgPSAwOyBpIDwgbnBpeGVscyAmJiBjYyA+PSAzOyBpKyspIHsKKyAJCXRwW2ldID0gYnBbMF0gPDwgMTYgfCBicFsxXSA8PCA4IHwgYnBbMl07CisgCQlicCArPSAzOworIAkJY2MgLT0gMzsKK0BAIC0zMjUsNyArMzM2LDExIEBAIExvZ0x1dkRlY29kZTMyKFRJRkYqIHRpZiwgdWludDgqIG9wLCB0bXMKKyAJaWYgKHNwLT51c2VyX2RhdGFmbXQgPT0gU0dJTE9HREFUQUZNVF9SQVcpCisgCQl0cCA9ICh1aW50MzIqKSBvcDsKKyAJZWxzZSB7CistCQlhc3NlcnQoc3AtPnRidWZsZW4gPj0gbnBpeGVscyk7CisrCQlpZihzcC0+dGJ1ZmxlbiA8IG5waXhlbHMpIHsKKysJCQlUSUZGRXJyb3JFeHQodGlmLT50aWZfY2xpZW50ZGF0YSwgbW9kdWxlLAorKwkJCQkJCSAiVHJhbnNsYXRpb24gYnVmZmVyIHRvbyBzaG9ydCIpOworKwkJCXJldHVybiAoMCk7CisrCQl9CisgCQl0cCA9ICh1aW50MzIqKSBzcC0+dGJ1ZjsKKyAJfQorIAlfVElGRm1lbXNldCgodm9pZCopIHRwLCAwLCBucGl4ZWxzKnNpemVvZiAodHBbMF0pKTsKK0BAIC0zMzQsMTEgKzM0OSwxMyBAQCBMb2dMdXZEZWNvZGUzMihUSUZGKiB0aWYsIHVpbnQ4KiBvcCwgdG1zCisgCWNjID0gdGlmLT50aWZfcmF3Y2M7CisgCS8qIGdldCBlYWNoIGJ5dGUgc3RyaW5nICovCisgCWZvciAoc2hmdCA9IDQqODsgKHNoZnQgLT0gOCkgPj0gMDsgKSB7CistCQlmb3IgKGkgPSAwOyBpIDwgbnBpeGVscyAmJiBjYyA+IDA7ICkKKysJCWZvciAoaSA9IDA7IGkgPCBucGl4ZWxzICYmIGNjID4gMDsgKSB7CisgCQkJaWYgKCpicCA+PSAxMjgpIHsJCS8qIHJ1biAqLworKwkJCQlpZiggY2MgPCAyICkKKysJCQkJCWJyZWFrOworIAkJCQlyYyA9ICpicCsrICsgKDItMTI4KTsKKyAJCQkJYiA9ICh1aW50MzIpKmJwKysgPDwgc2hmdDsKKy0JCQkJY2MgLT0gMjsgICAgICAgICAgICAgICAgLyogVE9ETzogcG90ZW50aWFsIGlucHV0IGJ1ZmZlciBvdmVycnVuIHdoZW4gZGVjb2RpbmcgY29ycnVwdCBvciB0cnVuY2F0ZWQgZGF0YSAqLworKwkJCQljYyAtPSAyOworIAkJCQl3aGlsZSAocmMtLSAmJiBpIDwgbnBpeGVscykKKyAJCQkJCXRwW2krK10gfD0gYjsKKyAJCQl9IGVsc2UgewkJCS8qIG5vbi1ydW4gKi8KK0BAIC0zNDYsNiArMzYzLDcgQEAgTG9nTHV2RGVjb2RlMzIoVElGRiogdGlmLCB1aW50OCogb3AsIHRtcworIAkJCQl3aGlsZSAoLS1jYyAmJiByYy0tICYmIGkgPCBucGl4ZWxzKQorIAkJCQkJdHBbaSsrXSB8PSAodWludDMyKSpicCsrIDw8IHNoZnQ7CisgCQkJfQorKwkJfQorIAkJaWYgKGkgIT0gbnBpeGVscykgeworICNpZiBkZWZpbmVkKF9fV0lOMzJfXykgJiYgKGRlZmluZWQoX01TQ19WRVIpIHx8IGRlZmluZWQoX19NSU5HVzMyX18pKQorIAkJCVRJRkZFcnJvckV4dCh0aWYtPnRpZl9jbGllbnRkYXRhLCBtb2R1bGUsCitAQCAtNDEzLDYgKzQzMSw3IEBAIExvZ0x1dkRlY29kZVRpbGUoVElGRiogdGlmLCB1aW50OCogYnAsIHQKKyBzdGF0aWMgaW50CisgTG9nTDE2RW5jb2RlKFRJRkYqIHRpZiwgdWludDgqIGJwLCB0bXNpemVfdCBjYywgdWludDE2IHMpCisgeworKwlzdGF0aWMgY29uc3QgY2hhciBtb2R1bGVbXSA9ICJMb2dMMTZFbmNvZGUiOworIAlMb2dMdXZTdGF0ZSogc3AgPSBFbmNvZGVyU3RhdGUodGlmKTsKKyAJaW50IHNoZnQ7CisgCXRtc2l6ZV90IGk7CitAQCAtNDMzLDcgKzQ1MiwxMSBAQCBMb2dMMTZFbmNvZGUoVElGRiogdGlmLCB1aW50OCogYnAsIHRtc2l6CisgCQl0cCA9IChpbnQxNiopIGJwOworIAllbHNlIHsKKyAJCXRwID0gKGludDE2Kikgc3AtPnRidWY7CistCQlhc3NlcnQoc3AtPnRidWZsZW4gPj0gbnBpeGVscyk7CisrCQlpZihzcC0+dGJ1ZmxlbiA8IG5waXhlbHMpIHsKKysJCQlUSUZGRXJyb3JFeHQodGlmLT50aWZfY2xpZW50ZGF0YSwgbW9kdWxlLAorKwkJCQkJCSAiVHJhbnNsYXRpb24gYnVmZmVyIHRvbyBzaG9ydCIpOworKwkJCXJldHVybiAoMCk7CisrCQl9CisgCQkoKnNwLT50ZnVuYykoc3AsIGJwLCBucGl4ZWxzKTsKKyAJfQorIAkvKiBjb21wcmVzcyBlYWNoIGJ5dGUgc3RyaW5nICovCitAQCAtNTA2LDYgKzUyOSw3IEBAIExvZ0wxNkVuY29kZShUSUZGKiB0aWYsIHVpbnQ4KiBicCwgdG1zaXoKKyBzdGF0aWMgaW50CisgTG9nTHV2RW5jb2RlMjQoVElGRiogdGlmLCB1aW50OCogYnAsIHRtc2l6ZV90IGNjLCB1aW50MTYgcykKKyB7CisrCXN0YXRpYyBjb25zdCBjaGFyIG1vZHVsZVtdID0gIkxvZ0x1dkVuY29kZTI0IjsKKyAJTG9nTHV2U3RhdGUqIHNwID0gRW5jb2RlclN0YXRlKHRpZik7CisgCXRtc2l6ZV90IGk7CisgCXRtc2l6ZV90IG5waXhlbHM7CitAQCAtNTIxLDcgKzU0NSwxMSBAQCBMb2dMdXZFbmNvZGUyNChUSUZGKiB0aWYsIHVpbnQ4KiBicCwgdG1zCisgCQl0cCA9ICh1aW50MzIqKSBicDsKKyAJZWxzZSB7CisgCQl0cCA9ICh1aW50MzIqKSBzcC0+dGJ1ZjsKKy0JCWFzc2VydChzcC0+dGJ1ZmxlbiA+PSBucGl4ZWxzKTsKKysJCWlmKHNwLT50YnVmbGVuIDwgbnBpeGVscykgeworKwkJCVRJRkZFcnJvckV4dCh0aWYtPnRpZl9jbGllbnRkYXRhLCBtb2R1bGUsCisrCQkJCQkJICJUcmFuc2xhdGlvbiBidWZmZXIgdG9vIHNob3J0Iik7CisrCQkJcmV0dXJuICgwKTsKKysJCX0KKyAJCSgqc3AtPnRmdW5jKShzcCwgYnAsIG5waXhlbHMpOworIAl9CisgCS8qIHdyaXRlIG91dCBlbmNvZGVkIHBpeGVscyAqLworQEAgLTU1Myw2ICs1ODEsNyBAQCBMb2dMdXZFbmNvZGUyNChUSUZGKiB0aWYsIHVpbnQ4KiBicCwgdG1zCisgc3RhdGljIGludAorIExvZ0x1dkVuY29kZTMyKFRJRkYqIHRpZiwgdWludDgqIGJwLCB0bXNpemVfdCBjYywgdWludDE2IHMpCisgeworKwlzdGF0aWMgY29uc3QgY2hhciBtb2R1bGVbXSA9ICJMb2dMdXZFbmNvZGUzMiI7CisgCUxvZ0x1dlN0YXRlKiBzcCA9IEVuY29kZXJTdGF0ZSh0aWYpOworIAlpbnQgc2hmdDsKKyAJdG1zaXplX3QgaTsKK0BAIC01NzQsNyArNjAzLDExIEBAIExvZ0x1dkVuY29kZTMyKFRJRkYqIHRpZiwgdWludDgqIGJwLCB0bXMKKyAJCXRwID0gKHVpbnQzMiopIGJwOworIAllbHNlIHsKKyAJCXRwID0gKHVpbnQzMiopIHNwLT50YnVmOworLQkJYXNzZXJ0KHNwLT50YnVmbGVuID49IG5waXhlbHMpOworKwkJaWYoc3AtPnRidWZsZW4gPCBucGl4ZWxzKSB7CisrCQkJVElGRkVycm9yRXh0KHRpZi0+dGlmX2NsaWVudGRhdGEsIG1vZHVsZSwKKysJCQkJCQkgIlRyYW5zbGF0aW9uIGJ1ZmZlciB0b28gc2hvcnQiKTsKKysJCQlyZXR1cm4gKDApOworKwkJfQorIAkJKCpzcC0+dGZ1bmMpKHNwLCBicCwgbnBpeGVscyk7CisgCX0KKyAJLyogY29tcHJlc3MgZWFjaCBieXRlIHN0cmluZyAqLwpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2xpYnRpZmYvZmlsZXMvQ1ZFLTIwMTUtODc4NC5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9saWJ0aWZmL2ZpbGVzL0NWRS0yMDE1LTg3ODQucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGNhZjgwMAotLS0gL2Rldi9udWxsCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9saWJ0aWZmL2ZpbGVzL0NWRS0yMDE1LTg3ODQucGF0Y2gKQEAgLTAsMCArMSw3MyBAQAorRnJvbSBiMTgwMTJkYWU1NTJmODVkY2M1YzU3ZDNiZjRlOTk3YTE1YjFjYzFjIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogZXJvdWF1bHQgPGVyb3VhdWx0PgorRGF0ZTogU3VuLCAyNyBEZWMgMjAxNSAxNjo1NToyMCArMDAwMAorU3ViamVjdDogW1BBVENIXSAqIGxpYnRpZmYvdGlmX25leHQuYzogZml4IHBvdGVudGlhbCBvdXQtb2YtYm91bmQgd3JpdGUgaW4KKyBOZVhURGVjb2RlKCkgdHJpZ2dlcmVkIGJ5IGh0dHA6Ly9sY2FtdHVmLmNvcmVkdW1wLmN4L2FmbC92dWxucy9saWJ0aWZmNS50aWYKKyAoYnVnemlsbGEgIzI1MDgpCisKK1Vwc3RyZWFtLVN0YXR1czogQmFja3BvcnQKK2h0dHBzOi8vZ2l0aHViLmNvbS92YWR6L2xpYnRpZmYvY29tbWl0L2IxODAxMmRhZTU1MmY4NWRjYzVjNTdkM2JmNGU5OTdhMTViMWNjMWMKK2hhbmQgYXBwbGllZCBDaGFuZ2Vsb2cgY2hhbmdlcworCitDVkU6ICBDVkUtMjAxNS04Nzg0CitTaWduZWQtb2ZmLWJ5OiBBcm1pbiBLdXN0ZXIgPGFrdXN0ZXJAbXZpc3RhLmNvbT4KKworLS0tCisgQ2hhbmdlTG9nICAgICAgICAgIHwgIDYgKysrKysrCisgbGlidGlmZi90aWZfbmV4dC5jIHwgMTAgKysrKysrKystLQorIDIgZmlsZXMgY2hhbmdlZCwgMTQgaW5zZXJ0aW9ucygrKSwgMiBkZWxldGlvbnMoLSkKKworSW5kZXg6IHRpZmYtNC4wLjQvQ2hhbmdlTG9nCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gdGlmZi00LjAuNC5vcmlnL0NoYW5nZUxvZworKysrIHRpZmYtNC4wLjQvQ2hhbmdlTG9nCitAQCAtMSw1ICsxLDExIEBACisgMjAxNS0xMi0yNyAgRXZlbiBSb3VhdWx0IDxldmVuLnJvdWF1bHQgYXQgc3BhdGlhbHlzLmNvbT4KKyAKKysJKiBsaWJ0aWZmL3RpZl9uZXh0LmM6IGZpeCBwb3RlbnRpYWwgb3V0LW9mLWJvdW5kIHdyaXRlIGluIE5lWFREZWNvZGUoKQorKwl0cmlnZ2VyZWQgYnkgaHR0cDovL2xjYW10dWYuY29yZWR1bXAuY3gvYWZsL3Z1bG5zL2xpYnRpZmY1LnRpZgorKwkoYnVnemlsbGEgIzI1MDgpCisrCisrMjAxNS0xMi0yNyAgRXZlbiBSb3VhdWx0IDxldmVuLnJvdWF1bHQgYXQgc3BhdGlhbHlzLmNvbT4KKysKKyAJKiBsaWJ0aWZmL3RpZl9sdXYuYzogZml4IHBvdGVudGlhbCBvdXQtb2YtYm91bmQgd3JpdGVzIGluIGRlY29kZQorIAlmdW5jdGlvbnMgaW4gbm9uIGRlYnVnIGJ1aWxkcyBieSByZXBsYWNpbmcgYXNzZXJ0KClzIGJ5IHJlZ3VsYXIgaWYKKyAJY2hlY2tzIChidWd6aWxsYSAjMjUyMikuCitJbmRleDogdGlmZi00LjAuNC9saWJ0aWZmL3RpZl9uZXh0LmMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSB0aWZmLTQuMC40Lm9yaWcvbGlidGlmZi90aWZfbmV4dC5jCisrKysgdGlmZi00LjAuNC9saWJ0aWZmL3RpZl9uZXh0LmMKK0BAIC0zNyw3ICszNyw3IEBACisgCWNhc2UgMDoJb3BbMF0gID0gKHVuc2lnbmVkIGNoYXIpICgodikgPDwgNik7IGJyZWFrOwlcCisgCWNhc2UgMToJb3BbMF0gfD0gKHYpIDw8IDQ7IGJyZWFrOwlcCisgCWNhc2UgMjoJb3BbMF0gfD0gKHYpIDw8IDI7IGJyZWFrOwlcCistCWNhc2UgMzoJKm9wKysgfD0gKHYpOwkgICBicmVhazsJXAorKwljYXNlIDM6CSpvcCsrIHw9ICh2KTsJICAgb3Bfb2Zmc2V0Kys7IGJyZWFrOwlcCisgCX0JCQkJCVwKKyB9CisgCitAQCAtMTA2LDYgKzEwNiw3IEBAIE5lWFREZWNvZGUoVElGRiogdGlmLCB1aW50OCogYnVmLCB0bXNpemUKKyAJCQl1aW50MzIgaW1hZ2V3aWR0aCA9IHRpZi0+dGlmX2Rpci50ZF9pbWFnZXdpZHRoOworICAgICAgICAgICAgIGlmKCBpc1RpbGVkKHRpZikgKQorICAgICAgICAgICAgICAgICBpbWFnZXdpZHRoID0gdGlmLT50aWZfZGlyLnRkX3RpbGV3aWR0aDsKKysgICAgICAgICAgICB0bXNpemVfdCBvcF9vZmZzZXQgPSAwOworIAorIAkJCS8qCisgCQkJICogVGhlIHNjYW5saW5lIGlzIGNvbXBvc2VkIG9mIGEgc2VxdWVuY2Ugb2YgY29uc3RhbnQKK0BAIC0xMjIsMTAgKzEyMywxNSBAQCBOZVhURGVjb2RlKFRJRkYqIHRpZiwgdWludDgqIGJ1ZiwgdG1zaXplCisgCQkJCSAqIGJvdW5kcywgcG90ZW50aWFsbHkgcmVzdWx0aW5nIGluIGEgc2VjdXJpdHkKKyAJCQkJICogaXNzdWUuCisgCQkJCSAqLworLQkJCQl3aGlsZSAobi0tID4gMCAmJiBucGl4ZWxzIDwgaW1hZ2V3aWR0aCkKKysJCQkJd2hpbGUgKG4tLSA+IDAgJiYgbnBpeGVscyA8IGltYWdld2lkdGggJiYgb3Bfb2Zmc2V0IDwgc2NhbmxpbmUpCisgCQkJCQlTRVRQSVhFTChvcCwgZ3JleSk7CisgCQkJCWlmIChucGl4ZWxzID49IGltYWdld2lkdGgpCisgCQkJCQlicmVhazsKKysgICAgICAgICAgICAgICAgaWYgKG9wX29mZnNldCA+PSBzY2FubGluZSApIHsKKysgICAgICAgICAgICAgICAgICAgIFRJRkZFcnJvckV4dCh0aWYtPnRpZl9jbGllbnRkYXRhLCBtb2R1bGUsICJJbnZhbGlkIGRhdGEgZm9yIHNjYW5saW5lICVsZCIsCisrICAgICAgICAgICAgICAgICAgICAgICAgKGxvbmcpIHRpZi0+dGlmX3Jvdyk7CisrICAgICAgICAgICAgICAgICAgICByZXR1cm4gKDApOworKyAgICAgICAgICAgICAgICB9CisgCQkJCWlmIChjYyA9PSAwKQorIAkJCQkJZ290byBiYWQ7CisgCQkJCW4gPSAqYnArKywgY2MtLTsKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9saWJ0aWZmL2ZpbGVzL0NWRS0yMDE2LTMxODYucGF0Y2ggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvbGlidGlmZi9maWxlcy9DVkUtMjAxNi0zMTg2LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRhMDhhYmEKLS0tIC9kZXYvbnVsbAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvbGlidGlmZi9maWxlcy9DVkUtMjAxNi0zMTg2LnBhdGNoCkBAIC0wLDAgKzEsMjQgQEAKK0J1ZmZlciBvdmVyZmxvdyBpbiB0aGUgcmVhZGV4dGVuc2lvbiBmdW5jdGlvbiBpbiBnaWYydGlmZi5jCithbGxvd3MgcmVtb3RlIGF0dGFja2VycyB0byBjYXVzZSBhIGRlbmlhbCBvZiBzZXJ2aWNlIHZpYSBhIGNyYWZ0ZWQgR0lGIGZpbGUuCisKK0V4dGVybmFsIFJlZmVyZW5jZXM6CitodHRwczovL3dlYi5udmQubmlzdC5nb3Yvdmlldy92dWxuL2RldGFpbD92dWxuSWQ9Q1ZFLTIwMTYtMzE4NgoraHR0cHM6Ly9idWd6aWxsYS5yZWRoYXQuY29tL3Nob3dfYnVnLmNnaT9pZD0xMzE5NTAzCisKK0NWRTogQ1ZFLTIwMTYtMzE4NgorVXBzdHJlYW0tU3RhdHVzOiBCYWNrcG9ydCAoUmVkSGF0KQoraHR0cHM6Ly9idWd6aWxsYS5yZWRoYXQuY29tL2F0dGFjaG1lbnQuY2dpP2lkPTExNDQyMzUmYWN0aW9uPWRpZmYKKworU2lnbmVkLW9mZi1ieTogWWkgWmhhbyA8eWkuemhhb0B3aW5kaXJ2ZXIuY29tPgorCistLS0gdGlmZi00LjAuNi90b29scy9naWYydGlmZi5jCTIwMTYtMDQtMDYgMTU6NDM6MDEuNTg2MDQ4MzQxICswMjAwCisrKysgdGlmZi00LjAuNi90b29scy9naWYydGlmZi5jCTIwMTYtMDQtMDYgMTU6NDg6MDUuNTIzMjA3NzEwICswMjAwCitAQCAtMzQ5LDcgKzM0OSw3IEBACisgICAgIGludCBzdGF0dXMgPSAxOworIAorICAgICAodm9pZCkgZ2V0YyhpbmZpbGUpOworLSAgICB3aGlsZSAoKGNvdW50ID0gZ2V0YyhpbmZpbGUpKSAmJiBjb3VudCA8PSAyNTUpCisrICAgIHdoaWxlICgoY291bnQgPSBnZXRjKGluZmlsZSkpICYmIGNvdW50ID49IDAgJiYgY291bnQgPD0gMjU1KQorICAgICAgICAgaWYgKGZyZWFkKGJ1ZiwgMSwgY291bnQsIGluZmlsZSkgIT0gKHNpemVfdCkgY291bnQpIHsKKyAgICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgInNob3J0IHJlYWQgZnJvbSBmaWxlICVzICglcylcbiIsCisgICAgICAgICAgICAgICAgICAgICBmaWxlbmFtZSwgc3RyZXJyb3IoZXJybm8pKTsKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9saWJ0aWZmL2ZpbGVzL0NWRS0yMDE2LTUzMjEucGF0Y2ggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvbGlidGlmZi9maWxlcy9DVkUtMjAxNi01MzIxLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYzYzY2NTAKLS0tIC9kZXYvbnVsbAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvbGlidGlmZi9maWxlcy9DVkUtMjAxNi01MzIxLnBhdGNoCkBAIC0wLDAgKzEsNDkgQEAKK0Zyb20gZDk3ODNlNGExNDc2YjY3ODdhNTFjNWFlOWU5YjMxNTY1Mjc1ODlmMCBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IGVyb3VhdWx0IDxlcm91YXVsdD4KK0RhdGU6IE1vbiwgMTEgSnVsIDIwMTYgMjE6MjY6MDMgKzAwMDAKK1N1YmplY3Q6IFtQQVRDSCAxLzJdICogdG9vbHMvdGlmZmNyb3AuYzogQXZvaWQgYWNjZXNzIG91dHNpZGUgb2Ygc3RhY2sKKyBhbGxvY2F0ZWQgYXJyYXkgb24gYSB0aWxlZCBzZXBhcmF0ZSBUSUZGIHdpdGggbW9yZSB0aGFuIDggc2FtcGxlcyBwZXIgcGl4ZWwuCisgUmVwb3J0ZWQgYnkgS2FpeGlhbmcgWmhhbmcgb2YgdGhlIENsb3VkIFNlY3VyaXR5IFRlYW0sIFFpaG9vIDM2MAorIChDVkUtMjAxNi01MzIxLCBidWd6aWxsYSAjMjU1OCkKKworQ1ZFOiBDVkUtMjAxNi01MzIxCitVcHN0cmVhbS1TdGF0dXM6IEJhY2twb3J0CitodHRwczovL2dpdGh1Yi5jb20vdmFkei9saWJ0aWZmL2NvbW1pdC9kOTc4M2U0YTE0NzZiNjc4N2E1MWM1YWU5ZTliMzE1NjUyNzU4OWYwCisKK1NpZ25lZC1vZmYtYnk6IFlpIFpoYW8gPHlpLnpoYW9Ad2luZGlydmVyLmNvbT4KKy0tLQorIENoYW5nZUxvZyAgICAgICAgfCA3ICsrKysrKysKKyB0b29scy90aWZmY3JvcC5jIHwgMiArLQorIDIgZmlsZXMgY2hhbmdlZCwgOCBpbnNlcnRpb25zKCspLCAxIGRlbGV0aW9uKC0pCisKK2RpZmYgLS1naXQgYS9DaGFuZ2VMb2cgYi9DaGFuZ2VMb2cKK2luZGV4IGU5OGQ1NGQuLjRlMDMwMmYgMTAwNjQ0CistLS0gYS9DaGFuZ2VMb2cKKysrKyBiL0NoYW5nZUxvZworQEAgLTEsMyArMSwxMCBAQAorKzIwMTYtMDctMTEgRXZlbiBSb3VhdWx0IDxldmVuLnJvdWF1bHQgYXQgc3BhdGlhbHlzLmNvbT4KKysKKysJKiB0b29scy90aWZmY3JvcC5jOiBBdm9pZCBhY2Nlc3Mgb3V0c2lkZSBvZiBzdGFjayBhbGxvY2F0ZWQgYXJyYXkKKysJb24gYSB0aWxlZCBzZXBhcmF0ZSBUSUZGIHdpdGggbW9yZSB0aGFuIDggc2FtcGxlcyBwZXIgcGl4ZWwuCisrCVJlcG9ydGVkIGJ5IEthaXhpYW5nIFpoYW5nIG9mIHRoZSBDbG91ZCBTZWN1cml0eSBUZWFtLCBRaWhvbyAzNjAKKysJKENWRS0yMDE2LTUzMjEsIGJ1Z3ppbGxhICMyNTU4KQorKworIDIwMTUtMTItMjcgIEV2ZW4gUm91YXVsdCA8ZXZlbi5yb3VhdWx0IGF0IHNwYXRpYWx5cy5jb20+CisKKwkqIGxpYnRpZmYvdGlmX25leHQuYzogZml4IHBvdGVudGlhbCBvdXQtb2YtYm91bmQgd3JpdGUgaW4gTmVYVERlY29kZSgpCitkaWZmIC0tZ2l0IGEvdG9vbHMvdGlmZmNyb3AuYyBiL3Rvb2xzL3RpZmZjcm9wLmMKK2luZGV4IGQ5NTlhZTMuLjZmYzhmYzEgMTAwNjQ0CistLS0gYS90b29scy90aWZmY3JvcC5jCisrKysgYi90b29scy90aWZmY3JvcC5jCitAQCAtOTg5LDcgKzk4OSw3IEBAIHN0YXRpYyBpbnQgIHJlYWRTZXBhcmF0ZVRpbGVzSW50b0J1ZmZlciAoVElGRiogaW4sIHVpbnQ4ICpvYnVmLAorICAgICBucm93ID0gKHJvdyArIHRsID4gaW1hZ2VsZW5ndGgpID8gaW1hZ2VsZW5ndGggLSByb3cgOiB0bDsKKyAgICAgZm9yIChjb2wgPSAwOyBjb2wgPCBpbWFnZXdpZHRoOyBjb2wgKz0gdHcpCisgICAgICAgeworLSAgICAgIGZvciAocyA9IDA7IHMgPCBzcHA7IHMrKykKKysgICAgICBmb3IgKHMgPSAwOyBzIDwgc3BwICYmIHMgPCBNQVhfU0FNUExFUzsgcysrKQorICAgICAgICAgeyAgLyogUmVhZCBlYWNoIHBsYW5lIG9mIGEgdGlsZSBzZXQgaW50byBzcmNidWZmc1tzXSAqLworIAl0Ynl0ZXMgPSBUSUZGUmVhZFRpbGUoaW4sIHNyY2J1ZmZzW3NdLCBjb2wsIHJvdywgMCwgcyk7CisgICAgICAgICBpZiAodGJ5dGVzIDwgMCAgJiYgIWlnbm9yZSkKKy0tIAorMi43LjQKKwpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2xpYnRpZmYvZmlsZXMvQ1ZFLTIwMTYtNTMyMy5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9saWJ0aWZmL2ZpbGVzL0NWRS0yMDE2LTUzMjMucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDFlYWI5MQotLS0gL2Rldi9udWxsCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9saWJ0aWZmL2ZpbGVzL0NWRS0yMDE2LTUzMjMucGF0Y2gKQEAgLTAsMCArMSwxMDcgQEAKK0Zyb20gMmY3OTg1NjA5N2Y0MjNlYjMzNzk2YTE1ZmNmNzAwZDJlYTQxYmYzMSBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IGVyb3VhdWx0IDxlcm91YXVsdD4KK0RhdGU6IE1vbiwgMTEgSnVsIDIwMTYgMjE6Mzg6MzEgKzAwMDAKK1N1YmplY3Q6IFtQQVRDSCAyLzJdIChDVkUtMjAxNi01MzIxIC8gQ1ZFLTIwMTYtNTMyMyAsIGJ1Z3ppbGxhICMyNTU4IC8gIzI1NTkpCisKK0NWRTogQ1ZFLTIwMTYtNTMyMworVXBzdHJlYW0tU3RhdHVzOiBCYWNrcG9ydAoraHR0cHM6Ly9naXRodWIuY29tL3ZhZHovbGlidGlmZi9jb21taXQvMmY3OTg1NjA5N2Y0MjNlYjMzNzk2YTE1ZmNmNzAwZDJlYTQxYmYzMQorCitTaWduZWQtb2ZmLWJ5OiBZaSBaaGFvIDx5aS56aGFvQHdpbmRpcnZlci5jb20+CistLS0KKyBDaGFuZ2VMb2cgICAgICAgIHwgIDIgKy0KKyB0b29scy90aWZmY3JvcC5jIHwgMTYgKysrKysrKystLS0tLS0tLQorIDIgZmlsZXMgY2hhbmdlZCwgOSBpbnNlcnRpb25zKCspLCA5IGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvQ2hhbmdlTG9nIGIvQ2hhbmdlTG9nCitpbmRleCA0ZTAzMDJmLi42MmRjMWI1IDEwMDY0NAorLS0tIGEvQ2hhbmdlTG9nCisrKysgYi9DaGFuZ2VMb2cKK0BAIC0zLDcgKzMsNyBAQAorIAkqIHRvb2xzL3RpZmZjcm9wLmM6IEF2b2lkIGFjY2VzcyBvdXRzaWRlIG9mIHN0YWNrIGFsbG9jYXRlZCBhcnJheQorIAlvbiBhIHRpbGVkIHNlcGFyYXRlIFRJRkYgd2l0aCBtb3JlIHRoYW4gOCBzYW1wbGVzIHBlciBwaXhlbC4KKyAJUmVwb3J0ZWQgYnkgS2FpeGlhbmcgWmhhbmcgb2YgdGhlIENsb3VkIFNlY3VyaXR5IFRlYW0sIFFpaG9vIDM2MAorLQkoQ1ZFLTIwMTYtNTMyMSwgYnVnemlsbGEgIzI1NTgpCisrCShDVkUtMjAxNi01MzIxIC8gQ1ZFLTIwMTYtNTMyMyAsIGJ1Z3ppbGxhICMyNTU4IC8gIzI1NTkpCisgCisgMjAxNi0wNy0xMCBFdmVuIFJvdWF1bHQgPGV2ZW4ucm91YXVsdCBhdCBzcGF0aWFseXMuY29tPgorIAorZGlmZiAtLWdpdCBhL3Rvb2xzL3RpZmZjcm9wLmMgYi90b29scy90aWZmY3JvcC5jCitpbmRleCA2ZmM4ZmMxLi4yN2FiYzBiIDEwMDY0NAorLS0tIGEvdG9vbHMvdGlmZmNyb3AuYworKysrIGIvdG9vbHMvdGlmZmNyb3AuYworQEAgLTM3MzgsNyArMzczOCw3IEBAIGNvbWJpbmVTZXBhcmF0ZVNhbXBsZXM4Yml0cyAodWludDggKmluW10sIHVpbnQ4ICpvdXQsIHVpbnQzMiBjb2xzLAorIAorICAgICAgIG1hdGNoYml0cyA9IG1hc2tiaXRzIDw8ICg4IC0gc3JjX2JpdCAtIGJwcyk7IAorICAgICAgIC8qIGxvYWQgdXAgbmV4dCBzYW1wbGUgZnJvbSBlYWNoIHBsYW5lICovCistICAgICAgZm9yIChzID0gMDsgcyA8IHNwcDsgcysrKQorKyAgICAgIGZvciAocyA9IDA7IChzIDwgc3BwKSAmJiAocyA8IE1BWF9TQU1QTEVTKTsgcysrKQorICAgICAgICAgeworIAlzcmMgPSBpbltzXSArIHNyY19vZmZzZXQgKyBzcmNfYnl0ZTsKKyAgICAgICAgIGJ1ZmYxID0gKCgqc3JjKSAmIG1hdGNoYml0cykgPDwgKHNyY19iaXQpOworQEAgLTM4MzcsNyArMzgzNyw3IEBAIGNvbWJpbmVTZXBhcmF0ZVNhbXBsZXMxNmJpdHMgKHVpbnQ4ICppbltdLCB1aW50OCAqb3V0LCB1aW50MzIgY29scywKKyAgICAgICBzcmNfYml0ICA9IGJpdF9vZmZzZXQgJSA4OworIAorICAgICAgIG1hdGNoYml0cyA9IG1hc2tiaXRzIDw8ICgxNiAtIHNyY19iaXQgLSBicHMpOyAKKy0gICAgICBmb3IgKHMgPSAwOyBzIDwgc3BwOyBzKyspCisrICAgICAgZm9yIChzID0gMDsgKHMgPCBzcHApICYmIChzIDwgTUFYX1NBTVBMRVMpOyBzKyspCisgICAgICAgICB7CisgCXNyYyA9IGluW3NdICsgc3JjX29mZnNldCArIHNyY19ieXRlOworICAgICAgICAgaWYgKGxpdHRsZV9lbmRpYW4pCitAQCAtMzk0Nyw3ICszOTQ3LDcgQEAgY29tYmluZVNlcGFyYXRlU2FtcGxlczI0Yml0cyAodWludDggKmluW10sIHVpbnQ4ICpvdXQsIHVpbnQzMiBjb2xzLAorICAgICAgIHNyY19iaXQgID0gYml0X29mZnNldCAlIDg7CisgCisgICAgICAgbWF0Y2hiaXRzID0gbWFza2JpdHMgPDwgKDMyIC0gc3JjX2JpdCAtIGJwcyk7IAorLSAgICAgIGZvciAocyA9IDA7IHMgPCBzcHA7IHMrKykKKysgICAgICBmb3IgKHMgPSAwOyAocyA8IHNwcCkgJiYgKHMgPCBNQVhfU0FNUExFUyk7IHMrKykKKyAgICAgICAgIHsKKyAJc3JjID0gaW5bc10gKyBzcmNfb2Zmc2V0ICsgc3JjX2J5dGU7CisgICAgICAgICBpZiAobGl0dGxlX2VuZGlhbikKK0BAIC00MDczLDcgKzQwNzMsNyBAQCBjb21iaW5lU2VwYXJhdGVTYW1wbGVzMzJiaXRzICh1aW50OCAqaW5bXSwgdWludDggKm91dCwgdWludDMyIGNvbHMsCisgICAgICAgc3JjX2JpdCAgPSBiaXRfb2Zmc2V0ICUgODsKKyAKKyAgICAgICBtYXRjaGJpdHMgPSBtYXNrYml0cyA8PCAoNjQgLSBzcmNfYml0IC0gYnBzKTsgCistICAgICAgZm9yIChzID0gMDsgcyA8IHNwcDsgcysrKQorKyAgICAgIGZvciAocyA9IDA7IChzIDwgc3BwKSAmJiAocyA8IE1BWF9TQU1QTEVTKTsgcysrKQorIAl7CisgCXNyYyA9IGluW3NdICsgc3JjX29mZnNldCArIHNyY19ieXRlOworIAlpZiAobGl0dGxlX2VuZGlhbikKK0BAIC00MjYzLDcgKzQyNjMsNyBAQCBjb21iaW5lU2VwYXJhdGVUaWxlU2FtcGxlczhiaXRzICh1aW50OCAqaW5bXSwgdWludDggKm91dCwgdWludDMyIGNvbHMsCisgCisgICAgICAgbWF0Y2hiaXRzID0gbWFza2JpdHMgPDwgKDggLSBzcmNfYml0IC0gYnBzKTsgCisgICAgICAgLyogbG9hZCB1cCBuZXh0IHNhbXBsZSBmcm9tIGVhY2ggcGxhbmUgKi8KKy0gICAgICBmb3IgKHMgPSAwOyBzIDwgc3BwOyBzKyspCisrICAgICAgZm9yIChzID0gMDsgKHMgPCBzcHApICYmIChzIDwgTUFYX1NBTVBMRVMpOyBzKyspCisgICAgICAgICB7CisgCXNyYyA9IGluW3NdICsgc3JjX29mZnNldCArIHNyY19ieXRlOworICAgICAgICAgYnVmZjEgPSAoKCpzcmMpICYgbWF0Y2hiaXRzKSA8PCAoc3JjX2JpdCk7CitAQCAtNDM2Miw3ICs0MzYyLDcgQEAgY29tYmluZVNlcGFyYXRlVGlsZVNhbXBsZXMxNmJpdHMgKHVpbnQ4ICppbltdLCB1aW50OCAqb3V0LCB1aW50MzIgY29scywKKyAgICAgICBzcmNfYml0ICA9IGJpdF9vZmZzZXQgJSA4OworIAorICAgICAgIG1hdGNoYml0cyA9IG1hc2tiaXRzIDw8ICgxNiAtIHNyY19iaXQgLSBicHMpOyAKKy0gICAgICBmb3IgKHMgPSAwOyBzIDwgc3BwOyBzKyspCisrICAgICAgZm9yIChzID0gMDsgKHMgPCBzcHApICYmIChzIDwgTUFYX1NBTVBMRVMpOyBzKyspCisgICAgICAgICB7CisgCXNyYyA9IGluW3NdICsgc3JjX29mZnNldCArIHNyY19ieXRlOworICAgICAgICAgaWYgKGxpdHRsZV9lbmRpYW4pCitAQCAtNDQ3MSw3ICs0NDcxLDcgQEAgY29tYmluZVNlcGFyYXRlVGlsZVNhbXBsZXMyNGJpdHMgKHVpbnQ4ICppbltdLCB1aW50OCAqb3V0LCB1aW50MzIgY29scywKKyAgICAgICBzcmNfYml0ICA9IGJpdF9vZmZzZXQgJSA4OworIAorICAgICAgIG1hdGNoYml0cyA9IG1hc2tiaXRzIDw8ICgzMiAtIHNyY19iaXQgLSBicHMpOyAKKy0gICAgICBmb3IgKHMgPSAwOyBzIDwgc3BwOyBzKyspCisrICAgICAgZm9yIChzID0gMDsgKHMgPCBzcHApICYmIChzIDwgTUFYX1NBTVBMRVMpOyBzKyspCisgICAgICAgICB7CisgCXNyYyA9IGluW3NdICsgc3JjX29mZnNldCArIHNyY19ieXRlOworICAgICAgICAgaWYgKGxpdHRsZV9lbmRpYW4pCitAQCAtNDU5Nyw3ICs0NTk3LDcgQEAgY29tYmluZVNlcGFyYXRlVGlsZVNhbXBsZXMzMmJpdHMgKHVpbnQ4ICppbltdLCB1aW50OCAqb3V0LCB1aW50MzIgY29scywKKyAgICAgICBzcmNfYml0ICA9IGJpdF9vZmZzZXQgJSA4OworIAorICAgICAgIG1hdGNoYml0cyA9IG1hc2tiaXRzIDw8ICg2NCAtIHNyY19iaXQgLSBicHMpOyAKKy0gICAgICBmb3IgKHMgPSAwOyBzIDwgc3BwOyBzKyspCisrICAgICAgZm9yIChzID0gMDsgKHMgPCBzcHApICYmIChzIDwgTUFYX1NBTVBMRVMpOyBzKyspCisgCXsKKyAJc3JjID0gaW5bc10gKyBzcmNfb2Zmc2V0ICsgc3JjX2J5dGU7CisgCWlmIChsaXR0bGVfZW5kaWFuKQorLS0gCisyLjcuNAorCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvbGlidGlmZi90aWZmXzQuMC42LmJiIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2xpYnRpZmYvdGlmZl80LjAuNi5iYgppbmRleCBlMmUyNGUwLi44MTQ3YmM0IDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvbGlidGlmZi90aWZmXzQuMC42LmJiCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9saWJ0aWZmL3RpZmZfNC4wLjYuYmIKQEAgLTEsMTAgKzEsMTUgQEAKIFNVTU1BUlkgPSAiUHJvdmlkZXMgc3VwcG9ydCBmb3IgdGhlIFRhZyBJbWFnZSBGaWxlIEZvcm1hdCAoVElGRikiCiBMSUNFTlNFID0gIkJTRC0yLUNsYXVzZSIKIExJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlSSUdIVDttZDU9MzRkYTNkYjQ2ZmFiNzUwMTk5MmY5NjE1ZDdlMTU4Y2YiCi1IT01FUEFHRSA9ICJodHRwOi8vd3d3LnJlbW90ZXNlbnNpbmcub3JnL2xpYnRpZmYvIgogCi1TUkNfVVJJID0gImZ0cDovL2Z0cC5yZW1vdGVzZW5zaW5nLm9yZy9wdWIvbGlidGlmZi90aWZmLSR7UFZ9LnRhci5neiBcCitTUkNfVVJJID0gImh0dHA6Ly9kb3dubG9hZC5vc2dlby5vcmcvbGlidGlmZi90aWZmLSR7UFZ9LnRhci5neiBcCiAgICAgICAgICAgIGZpbGU6Ly9saWJ0b29sMi5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9DVkUtMjAxNS04NjY1Xzg2ODMucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vQ1ZFLTIwMTUtODc4MS5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9DVkUtMjAxNS04Nzg0LnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL0NWRS0yMDE2LTMxODYucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vQ1ZFLTIwMTYtNTMyMS5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9DVkUtMjAxNi01MzIzLnBhdGNoIFwKICAgICAgICAgICAiCiAKIFNSQ19VUklbbWQ1c3VtXSA9ICJkMWQyZTk0MGRlYTBiNWFkNDM1ZjIxZjAzZDk2ZGQ3MiIKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9tcGcxMjMvbXBnMTIzXzEuMjMuNi5iYiBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9tcGcxMjMvbXBnMTIzXzEuMjMuNi5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42ZWU0NTdkCi0tLSAvZGV2L251bGwKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL21wZzEyMy9tcGcxMjNfMS4yMy42LmJiCkBAIC0wLDAgKzEsNjMgQEAKK1NVTU1BUlkgPSAiQXVkaW8gZGVjb2RlciBmb3IgTVBFRy0xIExheWVyIDEvMi8zIgorREVTQ1JJUFRJT04gPSAiVGhlIGNvcmUgb2YgbXBnMTIzIGlzIGFuIE1QRUctMSBMYXllciAxLzIvMyBkZWNvZGluZyBsaWJyYXJ5LCB3aGljaCBjYW4gYmUgdXNlZCBieSBvdGhlciBwcm9ncmFtcy4gXAorbXBnMTIzIGFsc28gY29tZXMgd2l0aCBhIGNvbW1hbmQtbGluZSB0b29sIHdoaWNoIGNhbiBwbGF5YmFjayB1c2luZyBBTFNBLCBQdWxzZUF1ZGlvLCBPU1MsIGFuZCBzZXZlcmFsIG90aGVyIEFQSXMsIFwKK2FuZCBhbHNvIGNhbiB3cml0ZSB0aGUgZGVjb2RlZCBhdWRpbyB0byBXQVYuIgorSE9NRVBBR0UgPSAiaHR0cDovL21wZzEyMy5kZS8iCitCVUdUUkFDS0VSID0gImh0dHA6Ly9zb3VyY2Vmb3JnZS5uZXQvcC9tcGcxMjMvYnVncy8iCitTRUNUSU9OID0gIm11bHRpbWVkaWEiCisKK0xJQ0VOU0UgPSAiTEdQTHYyLjEiCitMSUNFTlNFX0ZMQUdTID0gImNvbW1lcmNpYWwiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT0xZTg2NzUzNjM4ZDNjZjI1MTI1MjhiOTkwNzliYzRmMyIKKworU1JDX1VSSSA9ICJodHRwczovL3d3dy5tcGcxMjMuZGUvZG93bmxvYWQvJHtCUH0udGFyLmJ6MiIKKworU1JDX1VSSVttZDVzdW1dID0gImVkMjJhM2U2NjRmMDc2ZmEwNTEzMWEzNDU0ZWY4MTY2IgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjQwNzNkOWM2MGE0Mzg3MmY2ZjVhM2EzMjJmNWVhMjFhYjdmMDg2OWQyZWQyNWU3OWMzZWI4NTIxZmEzYzMyZDQiCisKK2luaGVyaXQgYXV0b3Rvb2xzIHBrZ2NvbmZpZworCisjIFRoZSBvcHRpb25zIHNob3VsZCBiZSBtdXR1YWxseSBleGNsdXNpdmUgZm9yIGNvbmZpZ3VyYXRpb24gc2NyaXB0LgorIyBJZiBib3RoIGFsc2EgYW5kIHB1bHNlYXVkaW8gYXJlIHNwZWNpZmllZCAoYXMgaW4gdGhlIGRlZmF1bHQgZGlzdHJvIGZlYXR1cmVzKQorIyBwdWxzZWF1ZGlvIHRha2VzIHByZWNlZGVuY2UuCitQQUNLQUdFQ09ORklHX0FMU0EgPSAiJHtAYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsICdhbHNhJywgJ2Fsc2EnLCAnJywgZCl9IgorUEFDS0FHRUNPTkZJRyA/Pz0gIiR7QGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCAncHVsc2VhdWRpbycsICdwdWxzZWF1ZGlvJywgJyR7UEFDS0FHRUNPTkZJR19BTFNBfScsIGQpfSIKKworUEFDS0FHRUNPTkZJR1thbHNhXSA9ICItLXdpdGgtZGVmYXVsdC1hdWRpbz1hbHNhLCxhbHNhLWxpYiIKK1BBQ0tBR0VDT05GSUdbZXNkXSA9ICIsLGVzb3VuZCIKK1BBQ0tBR0VDT05GSUdbamFja10gPSAiLCxqYWNrIgorUEFDS0FHRUNPTkZJR1tvcGVuYWxdID0gIiwsb3BlbmFsLXNvZnQiCitQQUNLQUdFQ09ORklHW3BvcnRhdWRpb10gPSAiLCxwb3J0YXVkaW8tdjE5IgorUEFDS0FHRUNPTkZJR1twdWxzZWF1ZGlvXSA9ICItLXdpdGgtZGVmYXVsdC1hdWRpbz1wdWxzZSwscHVsc2VhdWRpbyIKK1BBQ0tBR0VDT05GSUdbc2RsXSA9ICIsLGxpYnNkbCIKKworIyBGb2xsb3dpbmcgYXJlIHBvc3NpYmxlIHNvdW5kIG91dHB1dCBtb2R1bGVzOgorIyBhbHNhIGFydHMgY29yZWF1ZGlvIGR1bW15IGVzZCBqYWNrIG5hcyBvcGVuYWwgb3MyIG9zcyBwb3J0YXVkaW8gcHVsc2Ugc2RsIHNuZGlvIHN1biB0aW55YWxzYSB3aW4zMiB3aW4zMl93YXNhcGkKK0FVRElPTU9EUyArPSAiJHtAYmIudXRpbHMuY29udGFpbnMoJ1BBQ0tBR0VDT05GSUcnLCAnYWxzYScsICdhbHNhJywgJycsIGQpfSIKK0FVRElPTU9EUyArPSAiJHtAYmIudXRpbHMuY29udGFpbnMoJ1BBQ0tBR0VDT05GSUcnLCAnZXNkJywgJ2VzZCcsICcnLCBkKX0iCitBVURJT01PRFMgKz0gIiR7QGJiLnV0aWxzLmNvbnRhaW5zKCdQQUNLQUdFQ09ORklHJywgJ2phY2snLCAnamFjaycsICcnLCBkKX0iCitBVURJT01PRFMgKz0gIiR7QGJiLnV0aWxzLmNvbnRhaW5zKCdQQUNLQUdFQ09ORklHJywgJ29wZW5hbCcsICdvcGVuYWwnLCAnJywgZCl9IgorQVVESU9NT0RTICs9ICIke0BiYi51dGlscy5jb250YWlucygnUEFDS0FHRUNPTkZJRycsICdwb3J0YXVkaW8nLCAncG9ydGF1ZGlvJywgJycsIGQpfSIKK0FVRElPTU9EUyArPSAiJHtAYmIudXRpbHMuY29udGFpbnMoJ1BBQ0tBR0VDT05GSUcnLCAncHVsc2VhdWRpbycsICdwdWxzZScsICcnLCBkKX0iCitBVURJT01PRFMgKz0gIiR7QGJiLnV0aWxzLmNvbnRhaW5zKCdQQUNLQUdFQ09ORklHJywgJ3NkbCcsICdzZGwnLCAnJywgZCl9IgorCitFWFRSQV9PRUNPTkYgPSAiIFwKKyAgICAtLWVuYWJsZS1zaGFyZWQgXAorICAgIC0td2l0aC1hdWRpbz0nJHtBVURJT01PRFN9JyBcCisgICAgLS13aXRoLW1vZHVsZS1zdWZmaXg9LnNvIFwKKyAgICAke0BiYi51dGlscy5jb250YWlucygnVFVORV9GRUFUVVJFUycsICduZW9uJywgJy0td2l0aC1jcHU9bmVvbicsICcnLCBkKX0gXAorICAgICR7QGJiLnV0aWxzLmNvbnRhaW5zKCdUVU5FX0ZFQVRVUkVTJywgJ2FsdGl2ZWMnLCAnLS13aXRoLWNwdT1hbHRpdmVjJywgJycsIGQpfSBcCisiCisKKyMgVGhlIHg4NiBhc3NlbWJsZXIgb3B0aW1pc2F0aW9ucyBjb250YWlucyB0ZXh0IHJlbG9jYXRpb25zIGFuZCB0aGVyZSBhcmUgbm8KKyMgdXBzdHJlYW0gcGxhbnMgdG8gZml4IHRoZW06IGh0dHA6Ly9zb3VyY2Vmb3JnZS5uZXQvcC9tcGcxMjMvYnVncy8xNjgvCitJTlNBTkVfU0tJUF8ke1BOfV9hcHBlbmRfeDg2ID0gIiB0ZXh0cmVsIgorCisjIEZhaWxzIHRvIGJ1aWxkIHdpdGggdGh1bWItMSAocWVtdWFybSkKKyN8IHtzdGFuZGFyZCBpbnB1dH06IEFzc2VtYmxlciBtZXNzYWdlczoKKyN8IHtzdGFuZGFyZCBpbnB1dH06NDc6IEVycm9yOiBzZWxlY3RlZCBwcm9jZXNzb3IgZG9lcyBub3Qgc3VwcG9ydCBUaHVtYiBtb2RlIGBzbXVsbCByNSxyNixyNyxyNCcKKyN8IHtzdGFuZGFyZCBpbnB1dH06NDg6IEVycm9yOiBzaGlmdHMgaW4gQ01QL01PViBpbnN0cnVjdGlvbnMgYXJlIG9ubHkgc3VwcG9ydGVkIGluIHVuaWZpZWQgc3ludGF4IC0tIGBtb3YgcjUscjUsbHNyIzI0JworIy4uLgorI3wgbWFrZVszXTogKioqIFtlcXVhbGl6ZXIubG9dIEVycm9yIDEKK0FSTV9JTlNUUlVDVElPTl9TRVRfYXJtdjQgPSAiYXJtIgorQVJNX0lOU1RSVUNUSU9OX1NFVF9hcm12NSA9ICJhcm0iCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvcHVsc2VhdWRpby9wdWxzZWF1ZGlvLmluYyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9wdWxzZWF1ZGlvL3B1bHNlYXVkaW8uaW5jCmluZGV4IDBiMDVjZTQuLjdlNTRhZDQgMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9wdWxzZWF1ZGlvL3B1bHNlYXVkaW8uaW5jCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9wdWxzZWF1ZGlvL3B1bHNlYXVkaW8uaW5jCkBAIC0zLDExICszLDEyIEBACiBBVVRIT1IgPSAiTGVubmFydCBQb2V0dGVyaW5nIgogU0VDVElPTiA9ICJsaWJzL211bHRpbWVkaWEiCiBMSUNFTlNFID0gIkdQTHYyKyAmIExHUEx2Mi4xIgotTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vR1BMO21kNT00MzI1YWZkMzk2ZmViY2I2NTljMzZiNDk1MzMxMzVkNCBcCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9MSUNFTlNFO21kNT1kOWFlMDg5YzhkYzUzMzlmOGFjOWQ4NTYzMDM4YTI5ZiBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9HUEw7bWQ1PTQzMjVhZmQzOTZmZWJjYjY1OWMzNmI0OTUzMzEzNWQ0IFwKICAgICAgICAgICAgICAgICAgICAgZmlsZTovL0xHUEw7bWQ1PTJkNTAyNWQ0YWEzNDk1YmVmZWY4ZjE3MjA2YTViMGExIFwKICAgICAgICAgICAgICAgICAgICAgZmlsZTovL3NyYy9wdWxzZWNvcmUvcmVzYW1wbGVyLmg7YmVnaW5saW5lPTQ7ZW5kbGluZT0yMTttZDU9MDk3OTQwMTJhZTE2OTEyYzAyNzBmMzI4MGNjOGZmODQiCiAKLURFUEVORFMgPSAibGliYXRvbWljLW9wcyBsaWJzbmRmaWxlMSBsaWJ0b29sIgorREVQRU5EUyA9ICJsaWJhdG9taWMtb3BzIGxpYnNuZGZpbGUxIGxpYnRvb2wgaW50bHRvb2wtbmF0aXZlIgogIyBvcHRpb25hbAogREVQRU5EUyArPSAidWRldiBhbHNhLWxpYiBnbGliLTIuMCBnY29uZiIKIERFUEVORFMgKz0gImpzb24tYyBnZGJtIHNwZWV4ZHNwIGxpYnhtbC1wYXJzZXItcGVybC1uYXRpdmUgbGliY2FwIgpAQCAtMzAsNiArMzEsNyBAQAogCQktLXdpdGhvdXQtenNoLWNvbXBsZXRpb24tZGlyIFwKIAkJLS13aXRoLXVkZXYtcnVsZXMtZGlyPWBwa2ctY29uZmlnIC0tdmFyaWFibGU9dWRldmRpciB1ZGV2YC9ydWxlcy5kIFwKICAgICAgICAgICAgICAgICBhY19jdl9oZWFkZXJfdmFsZ3JpbmRfbWVtY2hlY2tfaD1ubyBcCisgICAgICAgICAgICAgICAgLS1kaXNhYmxlLXRlc3RzIFwKICIKIAogIyBzb3hyICh0aGUgU29YIFJlc2FtcGxlciBsaWJyYXJ5KSBkb2Vzbid0IHNlZW0gdG8gYmUgY3VycmVudGx5IHBhY2thZ2VkIGluCkBAIC00MSw2ICs0Myw3IEBACiAgICAgICAgICAgICAgICAgICAgJHtAYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsICd4MTEnLCAneDExJywgJycsIGQpfSBcCiAgICAgICAgICAgICAgICAgICAgJHtAYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsICczZycsICdvZm9ubycsICcnLCBkKX0gXAogICAgICAgICAgICAgICAgICAgICR7QGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCAnc3lzdGVtZCcsICdzeXN0ZW1kJywgJycsIGQpfSBcCisgICAgICAgICAgICAgICAgICAgJHtAYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsICdpcHY2JywgJ2lwdjYnLCAnJywgZCl9IFwKICAgICAgICAgICAgICAgICAgICBkYnVzIFwKICAgICAgICAgICAgICAgICAgICAiCiAKQEAgLTU3LDYgKzYwLDggQEAKICMgYWJsZSB0byB1c2UgcHVsc2VhdWRpbyBhdXRvc3Bhd24gZm9yIHJvb3QgYXMgd2VsbC4KIFBBQ0tBR0VDT05GSUdbYXV0b3NwYXduLWZvci1yb290XSA9ICIsLCwiCiBQQUNLQUdFQ09ORklHW2xpcmNdID0gIi0tZW5hYmxlLWxpcmMsLS1kaXNhYmxlLWxpcmMsbGlyYyIKK1BBQ0tBR0VDT05GSUdbd2VicnRjXSA9ICItLWVuYWJsZS13ZWJydGMtYWVjLC0tZGlzYWJsZS13ZWJydGMtYWVjLHdlYnJ0Yy1hdWRpby1wcm9jZXNzaW5nIgorUEFDS0FHRUNPTkZJR1tpcHY2XSA9ICItLWVuYWJsZS1pcHY2LC0tZGlzYWJsZS1pcHY2LCIKIAogRVhUUkFfT0VDT05GX2FwcGVuZF9hcm0gPSAiJHtAYmIudXRpbHMuY29udGFpbnMoIlRVTkVfRkVBVFVSRVMiLCAibmVvbiIsICIiLCAiIC0tZW5hYmxlLW5lb24tb3B0PW5vIiwgZCl9IgogRVhUUkFfT0VDT05GX2FwcGVuZF9hcm1lYiA9ICIke0BiYi51dGlscy5jb250YWlucygiVFVORV9GRUFUVVJFUyIsICJuZW9uIiwgIiIsICIgLS1lbmFibGUtbmVvbi1vcHQ9bm8iLCBkKX0iCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvcHVsc2VhdWRpby9wdWxzZWF1ZGlvLzAwMDEtUmV2ZXJ0LW1vZHVsZS1zd2l0Y2gtb24tcG9ydC1hdmFpbGFibGUtUm91dGUtdG8tcHJlZi5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9wdWxzZWF1ZGlvL3B1bHNlYXVkaW8vMDAwMS1SZXZlcnQtbW9kdWxlLXN3aXRjaC1vbi1wb3J0LWF2YWlsYWJsZS1Sb3V0ZS10by1wcmVmLnBhdGNoCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxYzFlMmZiLi4wMDAwMDAwCi0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9wdWxzZWF1ZGlvL3B1bHNlYXVkaW8vMDAwMS1SZXZlcnQtbW9kdWxlLXN3aXRjaC1vbi1wb3J0LWF2YWlsYWJsZS1Sb3V0ZS10by1wcmVmLnBhdGNoCisrKyAvZGV2L251bGwKQEAgLTEsMjY4ICswLDAgQEAKLUZyb20gYjhiOWIzZGE5NGEwYzI3MDkwY2ViYTI0M2ZkZjU0ZmI1MThjNTQ4OSBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKLUZyb206IFRhbnUgS2Fza2luZW4gPHRhbnVrQGlraS5maT4KLURhdGU6IE1vbiwgMSBGZWIgMjAxNiAxNTozNDo1OSArMDIwMAotU3ViamVjdDogW1BBVENIXSBSZXZlcnQgIm1vZHVsZS1zd2l0Y2gtb24tcG9ydC1hdmFpbGFibGU6IFJvdXRlIHRvIHByZWZlcnJlZAotIHByb2ZpbGUiCi0KLVRoaXMgcmV2ZXJ0cyBjb21taXQgZTg3MTAwZDQxZWY2ZDE0ZjhkYzdmODAzNTgyMTkxZDlmOGQ4ZjE4My4KLQotVGhlIHJldmVydGVkIGNvbW1pdCBoYWQgc29tZSB1bndhbnRlZCBjb25zZXF1ZW5jZXM6Ci1odHRwczovL2J1Z3MuZnJlZWRlc2t0b3Aub3JnL3Nob3dfYnVnLmNnaT9pZD05MzkwMwotaHR0cHM6Ly9idWdzLmZyZWVkZXNrdG9wLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9OTM5NDYKLQotVGhlIGZpcnN0IHJlZ3Jlc3Npb24gaGFzIGEgZml4IGhlcmU6Ci1odHRwczovL3BhdGNod29yay5mcmVlZGVza3RvcC5vcmcvcGF0Y2gvNzIwNTMvCi0KLVRoZSBzZWNvbmQgcmVncmVzc2lvbiwgaG93ZXZlciwgZG9lc24ndCBoYXZlIGEgZml4IHlldC4gVGhlcmVmb3JlLAotaXQncyBiZXN0IHRvIHJldmVydCB0aGUgb2ZmZW5kaW5nIHBhdGNoIGZvciBub3cuCi0KLVVwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbVXBzdHJlYW0gcGxhbnMgdG8gZml4IHRoZSBpc3N1ZXMKLXByb3Blcmx5Ll0KLQotU2lnbmVkLW9mZi1ieTogVGFudSBLYXNraW5lbiA8dGFudWtAaWtpLmZpPgotLS0tCi0gc3JjL21vZHVsZXMvbW9kdWxlLXN3aXRjaC1vbi1wb3J0LWF2YWlsYWJsZS5jIHwgMTcyICsrKysrKysrKystLS0tLS0tLS0tLS0tLS0tCi0gMSBmaWxlIGNoYW5nZWQsIDY3IGluc2VydGlvbnMoKyksIDEwNSBkZWxldGlvbnMoLSkKLQotZGlmZiAtLWdpdCBhL3NyYy9tb2R1bGVzL21vZHVsZS1zd2l0Y2gtb24tcG9ydC1hdmFpbGFibGUuYyBiL3NyYy9tb2R1bGVzL21vZHVsZS1zd2l0Y2gtb24tcG9ydC1hdmFpbGFibGUuYwotaW5kZXggNWRkOTc4Ni4uOGRlNjhhMyAxMDA2NDQKLS0tLSBhL3NyYy9tb2R1bGVzL21vZHVsZS1zd2l0Y2gtb24tcG9ydC1hdmFpbGFibGUuYwotKysrIGIvc3JjL21vZHVsZXMvbW9kdWxlLXN3aXRjaC1vbi1wb3J0LWF2YWlsYWJsZS5jCi1AQCAtNzQsMjUgKzc0LDIyIEBAIHN0YXRpYyBib29sIHByb2ZpbGVfZ29vZF9mb3JfaW5wdXQocGFfY2FyZF9wcm9maWxlICpwcm9maWxlKSB7Ci0gc3RhdGljIGludCB0cnlfdG9fc3dpdGNoX3Byb2ZpbGUocGFfZGV2aWNlX3BvcnQgKnBvcnQpIHsKLSAgICAgcGFfY2FyZF9wcm9maWxlICpiZXN0X3Byb2ZpbGUgPSBOVUxMLCAqcHJvZmlsZTsKLSAgICAgdm9pZCAqc3RhdGU7Ci0tICAgIHVuc2lnbmVkIGJlc3RfcHJpbyA9IDA7Ci0gCi0tICAgIHBhX2xvZ19kZWJ1ZygiRmluZGluZyBiZXN0IHByb2ZpbGUgZm9yIHBvcnQgJXMsIHByZWZlcnJlZCA9ICVzIiwKLS0gICAgICAgICAgICAgICAgIHBvcnQtPm5hbWUsIHBhX3N0cm51bGwocG9ydC0+cHJlZmVycmVkX3Byb2ZpbGUpKTsKLSsgICAgcGFfbG9nX2RlYnVnKCJGaW5kaW5nIGJlc3QgcHJvZmlsZSIpOwotIAotICAgICBQQV9IQVNITUFQX0ZPUkVBQ0gocHJvZmlsZSwgcG9ydC0+cHJvZmlsZXMsIHN0YXRlKSB7Ci0gICAgICAgICBib29sIGdvb2QgPSBmYWxzZTsKLS0gICAgICAgIGNvbnN0IGNoYXIgKm5hbWU7Ci0tICAgICAgICB1bnNpZ25lZCBwcmlvID0gcHJvZmlsZS0+cHJpb3JpdHk7Ci0rCi0rICAgICAgICBpZiAoYmVzdF9wcm9maWxlICYmIGJlc3RfcHJvZmlsZS0+cHJpb3JpdHkgPj0gcHJvZmlsZS0+cHJpb3JpdHkpCi0rICAgICAgICAgICAgY29udGludWU7Ci0gCi0gICAgICAgICAvKiBXZSBtYWtlIGEgYmVzdCBlZmZvcnQgdG8ga2VlcCBvdGhlciBkaXJlY3Rpb24gdW5jaGFuZ2VkICovCi0gICAgICAgICBzd2l0Y2ggKHBvcnQtPmRpcmVjdGlvbikgewotICAgICAgICAgICAgIGNhc2UgUEFfRElSRUNUSU9OX09VVFBVVDoKLS0gICAgICAgICAgICAgICAgbmFtZSA9IHByb2ZpbGUtPm91dHB1dF9uYW1lOwotICAgICAgICAgICAgICAgICBnb29kID0gcHJvZmlsZV9nb29kX2Zvcl9vdXRwdXQocHJvZmlsZSk7Ci0gICAgICAgICAgICAgICAgIGJyZWFrOwotIAotICAgICAgICAgICAgIGNhc2UgUEFfRElSRUNUSU9OX0lOUFVUOgotLSAgICAgICAgICAgICAgICBuYW1lID0gcHJvZmlsZS0+aW5wdXRfbmFtZTsKLSAgICAgICAgICAgICAgICAgZ29vZCA9IHByb2ZpbGVfZ29vZF9mb3JfaW5wdXQocHJvZmlsZSk7Ci0gICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgfQotQEAgLTEwMCwxNSArOTcsNyBAQCBzdGF0aWMgaW50IHRyeV90b19zd2l0Y2hfcHJvZmlsZShwYV9kZXZpY2VfcG9ydCAqcG9ydCkgewotICAgICAgICAgaWYgKCFnb29kKQotICAgICAgICAgICAgIGNvbnRpbnVlOwotIAotLSAgICAgICAgLyogR2l2ZSBhIGhpZ2ggYm9udXMgaW4gY2FzZSB0aGlzIGlzIHRoZSBwcmVmZXJyZWQgcHJvZmlsZSAqLwotLSAgICAgICAgaWYgKHBvcnQtPnByZWZlcnJlZF9wcm9maWxlICYmIHBhX3N0cmVxKG5hbWUgPyBuYW1lIDogcHJvZmlsZS0+bmFtZSwgcG9ydC0+cHJlZmVycmVkX3Byb2ZpbGUpKQotLSAgICAgICAgICAgIHByaW8gKz0gMTAwMDAwMDsKLS0KLS0gICAgICAgIGlmIChiZXN0X3Byb2ZpbGUgJiYgYmVzdF9wcmlvID49IHByaW8pCi0tICAgICAgICAgICAgY29udGludWU7Ci0tCi0gICAgICAgICBiZXN0X3Byb2ZpbGUgPSBwcm9maWxlOwotLSAgICAgICAgYmVzdF9wcmlvID0gcHJpbzsKLSAgICAgfQotIAotICAgICBpZiAoIWJlc3RfcHJvZmlsZSkgewotQEAgLTEyNCwxMjUgKzExMyw5OCBAQCBzdGF0aWMgaW50IHRyeV90b19zd2l0Y2hfcHJvZmlsZShwYV9kZXZpY2VfcG9ydCAqcG9ydCkgewotICAgICByZXR1cm4gMDsKLSB9Ci0gCi0tc3RydWN0IHBvcnRfcG9pbnRlcnMgewotLSAgICBwYV9kZXZpY2VfcG9ydCAqcG9ydDsKLS0gICAgcGFfc2luayAqc2luazsKLS0gICAgcGFfc291cmNlICpzb3VyY2U7Ci0tICAgIGJvb2wgaXNfcG9zc2libGVfcHJvZmlsZV9hY3RpdmU7Ci0tICAgIGJvb2wgaXNfcHJlZmVycmVkX3Byb2ZpbGVfYWN0aXZlOwotLSAgICBib29sIGlzX3BvcnRfYWN0aXZlOwotLX07Ci0tCi0tc3RhdGljIGNvbnN0IGNoYXIqIHByb2ZpbGVfbmFtZV9mb3JfZGlyKHBhX2NhcmRfcHJvZmlsZSAqY3AsIHBhX2RpcmVjdGlvbl90IGRpcikgewotLSAgICBpZiAoZGlyID09IFBBX0RJUkVDVElPTl9PVVRQVVQgJiYgY3AtPm91dHB1dF9uYW1lKQotLSAgICAgICAgcmV0dXJuIGNwLT5vdXRwdXRfbmFtZTsKLS0gICAgaWYgKGRpciA9PSBQQV9ESVJFQ1RJT05fSU5QVVQgJiYgY3AtPmlucHV0X25hbWUpCi0tICAgICAgICByZXR1cm4gY3AtPmlucHV0X25hbWU7Ci0tICAgIHJldHVybiBjcC0+bmFtZTsKLS19Ci0tCi0tc3RhdGljIHN0cnVjdCBwb3J0X3BvaW50ZXJzIGZpbmRfcG9ydF9wb2ludGVycyhwYV9kZXZpY2VfcG9ydCAqcG9ydCkgewotLSAgICBzdHJ1Y3QgcG9ydF9wb2ludGVycyBwcCA9IHsgLnBvcnQgPSBwb3J0IH07Ci0rc3RhdGljIHZvaWQgZmluZF9zaW5rX2FuZF9zb3VyY2UocGFfY2FyZCAqY2FyZCwgcGFfZGV2aWNlX3BvcnQgKnBvcnQsIHBhX3NpbmsgKipzaSwgcGFfc291cmNlICoqc28pIHsKLSsgICAgcGFfc2luayAqc2luayA9IE5VTEw7Ci0rICAgIHBhX3NvdXJjZSAqc291cmNlID0gTlVMTDsKLSAgICAgdWludDMyX3Qgc3RhdGU7Ci0tICAgIHBhX2NhcmQgKmNhcmQ7Ci0tCi0tICAgIHBhX2Fzc2VydChwb3J0KTsKLS0gICAgcGFfYXNzZXJ0X3NlKGNhcmQgPSBwb3J0LT5jYXJkKTsKLSAKLSAgICAgc3dpdGNoIChwb3J0LT5kaXJlY3Rpb24pIHsKLSAgICAgICAgIGNhc2UgUEFfRElSRUNUSU9OX09VVFBVVDoKLS0gICAgICAgICAgICBQQV9JRFhTRVRfRk9SRUFDSChwcC5zaW5rLCBjYXJkLT5zaW5rcywgc3RhdGUpCi0tICAgICAgICAgICAgICAgIGlmIChwb3J0ID09IHBhX2hhc2htYXBfZ2V0KHBwLnNpbmstPnBvcnRzLCBwb3J0LT5uYW1lKSkKLSsgICAgICAgICAgICBQQV9JRFhTRVRfRk9SRUFDSChzaW5rLCBjYXJkLT5zaW5rcywgc3RhdGUpCi0rICAgICAgICAgICAgICAgIGlmIChwb3J0ID09IHBhX2hhc2htYXBfZ2V0KHNpbmstPnBvcnRzLCBwb3J0LT5uYW1lKSkKLSAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgIGJyZWFrOwotIAotICAgICAgICAgY2FzZSBQQV9ESVJFQ1RJT05fSU5QVVQ6Ci0tICAgICAgICAgICAgUEFfSURYU0VUX0ZPUkVBQ0gocHAuc291cmNlLCBjYXJkLT5zb3VyY2VzLCBzdGF0ZSkKLS0gICAgICAgICAgICAgICAgaWYgKHBvcnQgPT0gcGFfaGFzaG1hcF9nZXQocHAuc291cmNlLT5wb3J0cywgcG9ydC0+bmFtZSkpCi0rICAgICAgICAgICAgUEFfSURYU0VUX0ZPUkVBQ0goc291cmNlLCBjYXJkLT5zb3VyY2VzLCBzdGF0ZSkKLSsgICAgICAgICAgICAgICAgaWYgKHBvcnQgPT0gcGFfaGFzaG1hcF9nZXQoc291cmNlLT5wb3J0cywgcG9ydC0+bmFtZSkpCi0gICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICBicmVhazsKLSAgICAgfQotIAotLSAgICBwcC5pc19wb3NzaWJsZV9wcm9maWxlX2FjdGl2ZSA9Ci0tICAgICAgICBjYXJkLT5hY3RpdmVfcHJvZmlsZSA9PSBwYV9oYXNobWFwX2dldChwb3J0LT5wcm9maWxlcywgY2FyZC0+YWN0aXZlX3Byb2ZpbGUtPm5hbWUpOwotLSAgICBwcC5pc19wcmVmZXJyZWRfcHJvZmlsZV9hY3RpdmUgPSBwcC5pc19wb3NzaWJsZV9wcm9maWxlX2FjdGl2ZSAmJiAoIXBvcnQtPnByZWZlcnJlZF9wcm9maWxlIHx8Ci0tICAgICAgICBwYV9zYWZlX3N0cmVxKHBvcnQtPnByZWZlcnJlZF9wcm9maWxlLCBwcm9maWxlX25hbWVfZm9yX2RpcihjYXJkLT5hY3RpdmVfcHJvZmlsZSwgcG9ydC0+ZGlyZWN0aW9uKSkpOwotLSAgICBwcC5pc19wb3J0X2FjdGl2ZSA9IChwcC5zaW5rICYmIHBwLnNpbmstPmFjdGl2ZV9wb3J0ID09IHBvcnQpIHx8IChwcC5zb3VyY2UgJiYgcHAuc291cmNlLT5hY3RpdmVfcG9ydCA9PSBwb3J0KTsKLS0KLS0gICAgcmV0dXJuIHBwOwotKyAgICAqc2kgPSBzaW5rOwotKyAgICAqc28gPSBzb3VyY2U7Ci0gfQotIAotLS8qIFN3aXRjaGVzIHRvIGEgcG9ydCwgc3dpdGNoaW5nIHByb2ZpbGVzIGlmIG5lY2Vzc2FyeSBvciBwcmVmZXJyZWQgKi8KLS1zdGF0aWMgYm9vbCBzd2l0Y2hfdG9fcG9ydChwYV9kZXZpY2VfcG9ydCAqcG9ydCkgewotLSAgICBzdHJ1Y3QgcG9ydF9wb2ludGVycyBwcCA9IGZpbmRfcG9ydF9wb2ludGVycyhwb3J0KTsKLStzdGF0aWMgcGFfaG9va19yZXN1bHRfdCBwb3J0X2F2YWlsYWJsZV9ob29rX2NhbGxiYWNrKHBhX2NvcmUgKmMsIHBhX2RldmljZV9wb3J0ICpwb3J0LCB2b2lkKiB1c2VyZGF0YSkgewotKyAgICBwYV9jYXJkKiBjYXJkOwotKyAgICBwYV9zaW5rICpzaW5rOwotKyAgICBwYV9zb3VyY2UgKnNvdXJjZTsKLSsgICAgYm9vbCBpc19hY3RpdmVfcHJvZmlsZSwgaXNfYWN0aXZlX3BvcnQ7Ci0gCi0tICAgIGlmIChwcC5pc19wb3J0X2FjdGl2ZSkKLS0gICAgICAgIHJldHVybiB0cnVlOyAvKiBBbHJlYWR5IHNlbGVjdGVkICovCi0rICAgIGlmIChwb3J0LT5hdmFpbGFibGUgPT0gUEFfQVZBSUxBQkxFX1VOS05PV04pCi0rICAgICAgICByZXR1cm4gUEFfSE9PS19PSzsKLSAKLS0gICAgcGFfbG9nX2RlYnVnKCJUcnlpbmcgdG8gc3dpdGNoIHRvIHBvcnQgJXMiLCBwb3J0LT5uYW1lKTsKLS0gICAgaWYgKCFwcC5pc19wcmVmZXJyZWRfcHJvZmlsZV9hY3RpdmUpIHsKLS0gICAgICAgIGlmICh0cnlfdG9fc3dpdGNoX3Byb2ZpbGUocG9ydCkgPCAwKSB7Ci0tICAgICAgICAgICAgaWYgKHBwLmlzX3Bvc3NpYmxlX3Byb2ZpbGVfYWN0aXZlKQotLSAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0tICAgICAgICB9Ci0tICAgICAgICBlbHNlCi0tICAgICAgICAgICAgLyogTm93IHRoYXQgcHJvZmlsZSBoYXMgY2hhbmdlZCwgb3VyIHNpbmsgYW5kIHNvdXJjZSBwb2ludGVycyBtdXN0IGJlIHVwZGF0ZWQgKi8KLS0gICAgICAgICAgICBwcCA9IGZpbmRfcG9ydF9wb2ludGVycyhwb3J0KTsKLS0gICAgfQotKyAgICBjYXJkID0gcG9ydC0+Y2FyZDsKLSAKLS0gICAgaWYgKHBwLnNvdXJjZSkKLS0gICAgICAgIHBhX3NvdXJjZV9zZXRfcG9ydChwcC5zb3VyY2UsIHBvcnQtPm5hbWUsIGZhbHNlKTsKLS0gICAgaWYgKHBwLnNpbmspCi0tICAgICAgICBwYV9zaW5rX3NldF9wb3J0KHBwLnNpbmssIHBvcnQtPm5hbWUsIGZhbHNlKTsKLS0gICAgcmV0dXJuIHRydWU7Ci0tfQotKyAgICBpZiAoIWNhcmQpIHsKLSsgICAgICAgIHBhX2xvZ193YXJuKCJQb3J0ICVzIGRvZXMgbm90IGhhdmUgYSBjYXJkIiwgcG9ydC0+bmFtZSk7Ci0rICAgICAgICByZXR1cm4gUEFfSE9PS19PSzsKLSsgICAgfQotIAotLS8qIFN3aXRjaGVzIGF3YXkgZnJvbSBhIHBvcnQsIHN3aXRjaGluZyBwcm9maWxlcyBpZiBuZWNlc3Nhcnkgb3IgcHJlZmVycmVkICovCi0tc3RhdGljIGJvb2wgc3dpdGNoX2Zyb21fcG9ydChwYV9kZXZpY2VfcG9ydCAqcG9ydCkgewotLSAgICBzdHJ1Y3QgcG9ydF9wb2ludGVycyBwcCA9IGZpbmRfcG9ydF9wb2ludGVycyhwb3J0KTsKLS0gICAgcGFfZGV2aWNlX3BvcnQgKnAsICpiZXN0X3BvcnQgPSBOVUxMOwotLSAgICB2b2lkICpzdGF0ZTsKLSsgICAgaWYgKHBhX2lkeHNldF9zaXplKGNhcmQtPnNpbmtzKSA9PSAwICYmIHBhX2lkeHNldF9zaXplKGNhcmQtPnNvdXJjZXMpID09IDApCi0rICAgICAgICAvKiBUaGlzIGNhcmQgaXMgbm90IGluaXRpYWxpemVkIHlldC4gV2UnbGwgaGFuZGxlIGl0IGluCi0rICAgICAgICAgICBzaW5rX25ldyAvIHNvdXJjZV9uZXcgY2FsbGJhY2tzIGxhdGVyLiAqLwotKyAgICAgICAgcmV0dXJuIFBBX0hPT0tfT0s7Ci0gCi0tICAgIGlmICghcHAuaXNfcG9ydF9hY3RpdmUpCi0tICAgICAgICByZXR1cm4gdHJ1ZTsgLyogQWxyZWFkeSBkZXNlbGVjdGVkICovCi0rICAgIGZpbmRfc2lua19hbmRfc291cmNlKGNhcmQsIHBvcnQsICZzaW5rLCAmc291cmNlKTsKLSAKLS0gICAgLyogVHJ5IHRvIGZpbmQgYSBnb29kIGVub3VnaCBwb3J0IHRvIHN3aXRjaCB0byAqLwotLSAgICBQQV9IQVNITUFQX0ZPUkVBQ0gocCwgcG9ydC0+Y2FyZC0+cG9ydHMsIHN0YXRlKQotLSAgICAgICAgaWYgKHAtPmRpcmVjdGlvbiA9PSBwb3J0LT5kaXJlY3Rpb24gJiYgcCAhPSBwb3J0ICYmIHAtPmF2YWlsYWJsZSAhPSBQQV9BVkFJTEFCTEVfTk8gJiYKLS0gICAgICAgICAgICghYmVzdF9wb3J0IHx8IGJlc3RfcG9ydC0+cHJpb3JpdHkgPCBwLT5wcmlvcml0eSkpCi0tICAgICAgICAgICBiZXN0X3BvcnQgPSBwOwotKyAgICBpc19hY3RpdmVfcHJvZmlsZSA9IGNhcmQtPmFjdGl2ZV9wcm9maWxlID09IHBhX2hhc2htYXBfZ2V0KHBvcnQtPnByb2ZpbGVzLCBjYXJkLT5hY3RpdmVfcHJvZmlsZS0+bmFtZSk7Ci0rICAgIGlzX2FjdGl2ZV9wb3J0ID0gKHNpbmsgJiYgc2luay0+YWN0aXZlX3BvcnQgPT0gcG9ydCkgfHwgKHNvdXJjZSAmJiBzb3VyY2UtPmFjdGl2ZV9wb3J0ID09IHBvcnQpOwotIAotLSAgICBwYV9sb2dfZGVidWcoIlRyeWluZyB0byBzd2l0Y2ggYXdheSBmcm9tIHBvcnQgJXMsIGZvdW5kICVzIiwgcG9ydC0+bmFtZSwgYmVzdF9wb3J0ID8gYmVzdF9wb3J0LT5uYW1lIDogIm5vIGJldHRlciBvcHRpb24iKTsKLSsgICAgaWYgKHBvcnQtPmF2YWlsYWJsZSA9PSBQQV9BVkFJTEFCTEVfTk8gJiYgIWlzX2FjdGl2ZV9wb3J0KQotKyAgICAgICAgcmV0dXJuIFBBX0hPT0tfT0s7Ci0gCi0tICAgIGlmIChiZXN0X3BvcnQpCi0tICAgICAgICByZXR1cm4gc3dpdGNoX3RvX3BvcnQoYmVzdF9wb3J0KTsKLSsgICAgaWYgKHBvcnQtPmF2YWlsYWJsZSA9PSBQQV9BVkFJTEFCTEVfWUVTKSB7Ci0rICAgICAgICBpZiAoaXNfYWN0aXZlX3BvcnQpCi0rICAgICAgICAgICAgcmV0dXJuIFBBX0hPT0tfT0s7Ci0gCi0tICAgIHJldHVybiBmYWxzZTsKLS19Ci0rICAgICAgICBpZiAoIWlzX2FjdGl2ZV9wcm9maWxlKSB7Ci0rICAgICAgICAgICAgaWYgKHRyeV90b19zd2l0Y2hfcHJvZmlsZShwb3J0KSA8IDApCi0rICAgICAgICAgICAgICAgIHJldHVybiBQQV9IT09LX09LOwotIAotKyAgICAgICAgICAgIHBhX2Fzc2VydChjYXJkLT5hY3RpdmVfcHJvZmlsZSA9PSBwYV9oYXNobWFwX2dldChwb3J0LT5wcm9maWxlcywgY2FyZC0+YWN0aXZlX3Byb2ZpbGUtPm5hbWUpKTsKLSAKLS1zdGF0aWMgcGFfaG9va19yZXN1bHRfdCBwb3J0X2F2YWlsYWJsZV9ob29rX2NhbGxiYWNrKHBhX2NvcmUgKmMsIHBhX2RldmljZV9wb3J0ICpwb3J0LCB2b2lkKiB1c2VyZGF0YSkgewotLSAgICBwYV9hc3NlcnQocG9ydCk7Ci0rICAgICAgICAgICAgLyogTm93IHRoYXQgcHJvZmlsZSBoYXMgY2hhbmdlZCwgb3VyIHNpbmsgYW5kIHNvdXJjZSBwb2ludGVycyBtdXN0IGJlIHVwZGF0ZWQgKi8KLSsgICAgICAgICAgICBmaW5kX3NpbmtfYW5kX3NvdXJjZShjYXJkLCBwb3J0LCAmc2luaywgJnNvdXJjZSk7Ci0rICAgICAgICB9Ci0gCi0tICAgIGlmICghcG9ydC0+Y2FyZCkgewotLSAgICAgICAgcGFfbG9nX3dhcm4oIlBvcnQgJXMgZG9lcyBub3QgaGF2ZSBhIGNhcmQiLCBwb3J0LT5uYW1lKTsKLS0gICAgICAgIHJldHVybiBQQV9IT09LX09LOwotKyAgICAgICAgaWYgKHNvdXJjZSkKLSsgICAgICAgICAgICBwYV9zb3VyY2Vfc2V0X3BvcnQoc291cmNlLCBwb3J0LT5uYW1lLCBmYWxzZSk7Ci0rICAgICAgICBpZiAoc2luaykKLSsgICAgICAgICAgICBwYV9zaW5rX3NldF9wb3J0KHNpbmssIHBvcnQtPm5hbWUsIGZhbHNlKTsKLSAgICAgfQotIAotLSAgICBpZiAocGFfaWR4c2V0X3NpemUocG9ydC0+Y2FyZC0+c2lua3MpID09IDAgJiYgcGFfaWR4c2V0X3NpemUocG9ydC0+Y2FyZC0+c291cmNlcykgPT0gMCkKLS0gICAgICAgIC8qIFRoaXMgY2FyZCBpcyBub3QgaW5pdGlhbGl6ZWQgeWV0LiBXZSdsbCBoYW5kbGUgaXQgaW4KLS0gICAgICAgICAgIHNpbmtfbmV3IC8gc291cmNlX25ldyBjYWxsYmFja3MgbGF0ZXIuICovCi0tICAgICAgICByZXR1cm4gUEFfSE9PS19PSzsKLSsgICAgaWYgKHBvcnQtPmF2YWlsYWJsZSA9PSBQQV9BVkFJTEFCTEVfTk8pIHsKLSsgICAgICAgIGlmIChzaW5rKSB7Ci0rICAgICAgICAgICAgcGFfZGV2aWNlX3BvcnQgKnAyID0gcGFfZGV2aWNlX3BvcnRfZmluZF9iZXN0KHNpbmstPnBvcnRzKTsKLSsKLSsgICAgICAgICAgICBpZiAocDIgJiYgcDItPmF2YWlsYWJsZSAhPSBQQV9BVkFJTEFCTEVfTk8pCi0rICAgICAgICAgICAgICAgIHBhX3Npbmtfc2V0X3BvcnQoc2luaywgcDItPm5hbWUsIGZhbHNlKTsKLSsgICAgICAgICAgICBlbHNlIHsKLSsgICAgICAgICAgICAgICAgLyogTWF5YmUgdHJ5IHRvIHN3aXRjaCB0byBhbm90aGVyIHByb2ZpbGU/ICovCi0rICAgICAgICAgICAgfQotKyAgICAgICAgfQotIAotLSAgICBzd2l0Y2ggKHBvcnQtPmF2YWlsYWJsZSkgewotLSAgICBjYXNlIFBBX0FWQUlMQUJMRV9ZRVM6Ci0tICAgICAgICBzd2l0Y2hfdG9fcG9ydChwb3J0KTsKLS0gICAgICAgIGJyZWFrOwotLSAgICBjYXNlIFBBX0FWQUlMQUJMRV9OTzoKLS0gICAgICAgIHN3aXRjaF9mcm9tX3BvcnQocG9ydCk7Ci0tICAgICAgICBicmVhazsKLS0gICAgZGVmYXVsdDoKLS0gICAgICAgIGJyZWFrOwotKyAgICAgICAgaWYgKHNvdXJjZSkgewotKyAgICAgICAgICAgIHBhX2RldmljZV9wb3J0ICpwMiA9IHBhX2RldmljZV9wb3J0X2ZpbmRfYmVzdChzb3VyY2UtPnBvcnRzKTsKLSsKLSsgICAgICAgICAgICBpZiAocDIgJiYgcDItPmF2YWlsYWJsZSAhPSBQQV9BVkFJTEFCTEVfTk8pCi0rICAgICAgICAgICAgICAgIHBhX3NvdXJjZV9zZXRfcG9ydChzb3VyY2UsIHAyLT5uYW1lLCBmYWxzZSk7Ci0rICAgICAgICAgICAgZWxzZSB7Ci0rICAgICAgICAgICAgICAgIC8qIE1heWJlIHRyeSB0byBzd2l0Y2ggdG8gYW5vdGhlciBwcm9maWxlPyAqLwotKyAgICAgICAgICAgIH0KLSsgICAgICAgIH0KLSAgICAgfQotIAotICAgICByZXR1cm4gUEFfSE9PS19PSzsKLS0tIAotMi43LjAKLQpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL3B1bHNlYXVkaW8vcHVsc2VhdWRpby8wMDAxLWFsc2EtYmx1ZXRvb3RoLWZhaWwtaWYtdXNlci1yZXF1ZXN0ZWQtcHJvZmlsZS1kb2Vzbi0ucGF0Y2ggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvcHVsc2VhdWRpby9wdWxzZWF1ZGlvLzAwMDEtYWxzYS1ibHVldG9vdGgtZmFpbC1pZi11c2VyLXJlcXVlc3RlZC1wcm9maWxlLWRvZXNuLS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yZjcyY2ViCi0tLSAvZGV2L251bGwKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL3B1bHNlYXVkaW8vcHVsc2VhdWRpby8wMDAxLWFsc2EtYmx1ZXRvb3RoLWZhaWwtaWYtdXNlci1yZXF1ZXN0ZWQtcHJvZmlsZS1kb2Vzbi0ucGF0Y2gKQEAgLTAsMCArMSw2MSBAQAorRnJvbSA5YzNjZGZjZDE5OGVmOTcyN2VhNTQyZjI4NGFjNmQ4YzFiY2Q3YTNhIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogVGFudSBLYXNraW5lbiA8dGFudWtAaWtpLmZpPgorRGF0ZTogRnJpLCAyMyBPY3QgMjAxNSAxMjozNjozNCArMDMwMAorU3ViamVjdDogW1BBVENIIDEvNV0gYWxzYSwgYmx1ZXRvb3RoOiBmYWlsIGlmIHVzZXItcmVxdWVzdGVkIHByb2ZpbGUgZG9lc24ndAorIGV4aXN0CisKK0lmIHdlIGNhbid0IGZ1bGZpbGwgdGhlIHVzZXIgcmVxdWVzdCBmdWxseSwgSSB0aGluayB3ZSBzaG91bGRuJ3QKK2Z1bGZpbGwgaXQgYXQgYWxsLCB0byBtYWtlIGl0IGNsZWFyIHRoYXQgdGhlIHJlcXVlc3RlZCBvcGVyYXRpb24KK2RpZG4ndCBzdWNjZWVkLgorCitVcHN0cmVhbS1TdGF0dXM6IEFjY2VwdGVkIFtleHBlY3RlZCBpbiAxMC4wXQorCitTaWduZWQtb2ZmLWJ5OiBUYW51IEthc2tpbmVuIDx0YW51a0Bpa2kuZmk+CistLS0KKyBzcmMvbW9kdWxlcy9hbHNhL21vZHVsZS1hbHNhLWNhcmQuYyAgICAgICAgICB8IDExICsrKysrKysrKy0tCisgc3JjL21vZHVsZXMvYmx1ZXRvb3RoL21vZHVsZS1ibHVlejQtZGV2aWNlLmMgfCAgNyArKysrKy0tCisgMiBmaWxlcyBjaGFuZ2VkLCAxNCBpbnNlcnRpb25zKCspLCA0IGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvc3JjL21vZHVsZXMvYWxzYS9tb2R1bGUtYWxzYS1jYXJkLmMgYi9zcmMvbW9kdWxlcy9hbHNhL21vZHVsZS1hbHNhLWNhcmQuYworaW5kZXggZTVjYzRhZS4uZDc2MTY4MyAxMDA2NDQKKy0tLSBhL3NyYy9tb2R1bGVzL2Fsc2EvbW9kdWxlLWFsc2EtY2FyZC5jCisrKysgYi9zcmMvbW9kdWxlcy9hbHNhL21vZHVsZS1hbHNhLWNhcmQuYworQEAgLTc5OSw4ICs3OTksMTUgQEAgaW50IHBhX19pbml0KHBhX21vZHVsZSAqbSkgeworICAgICAgICAgZ290byBmYWlsOworICAgICB9CisgCistICAgIGlmICgocHJvZmlsZSA9IHBhX21vZGFyZ3NfZ2V0X3ZhbHVlKHUtPm1vZGFyZ3MsICJwcm9maWxlIiwgTlVMTCkpKQorLSAgICAgICAgcGFfY2FyZF9uZXdfZGF0YV9zZXRfcHJvZmlsZSgmZGF0YSwgcHJvZmlsZSk7CisrICAgIGlmICgocHJvZmlsZSA9IHBhX21vZGFyZ3NfZ2V0X3ZhbHVlKHUtPm1vZGFyZ3MsICJwcm9maWxlIiwgTlVMTCkpKSB7CisrICAgICAgICBpZiAocGFfaGFzaG1hcF9nZXQoZGF0YS5wcm9maWxlcywgcHJvZmlsZSkpCisrICAgICAgICAgICAgcGFfY2FyZF9uZXdfZGF0YV9zZXRfcHJvZmlsZSgmZGF0YSwgcHJvZmlsZSk7CisrICAgICAgICBlbHNlIHsKKysgICAgICAgICAgICBwYV9sb2coIk5vIHN1Y2ggcHJvZmlsZTogJXMiLCBwcm9maWxlKTsKKysgICAgICAgICAgICBwYV9jYXJkX25ld19kYXRhX2RvbmUoJmRhdGEpOworKyAgICAgICAgICAgIGdvdG8gZmFpbDsKKysgICAgICAgIH0KKysgICAgfQorIAorICAgICB1LT5jYXJkID0gcGFfY2FyZF9uZXcobS0+Y29yZSwgJmRhdGEpOworICAgICBwYV9jYXJkX25ld19kYXRhX2RvbmUoJmRhdGEpOworZGlmZiAtLWdpdCBhL3NyYy9tb2R1bGVzL2JsdWV0b290aC9tb2R1bGUtYmx1ZXo0LWRldmljZS5jIGIvc3JjL21vZHVsZXMvYmx1ZXRvb3RoL21vZHVsZS1ibHVlejQtZGV2aWNlLmMKK2luZGV4IDlhOTIxYTUuLmEyZGU1MjUgMTAwNjQ0CistLS0gYS9zcmMvbW9kdWxlcy9ibHVldG9vdGgvbW9kdWxlLWJsdWV6NC1kZXZpY2UuYworKysrIGIvc3JjL21vZHVsZXMvYmx1ZXRvb3RoL21vZHVsZS1ibHVlejQtZGV2aWNlLmMKK0BAIC0yMzAxLDggKzIzMDEsMTEgQEAgc3RhdGljIGludCBhZGRfY2FyZChzdHJ1Y3QgdXNlcmRhdGEgKnUpIHsKKyAgICAgaWYgKChkZWZhdWx0X3Byb2ZpbGUgPSBwYV9tb2RhcmdzX2dldF92YWx1ZSh1LT5tb2RhcmdzLCAicHJvZmlsZSIsIE5VTEwpKSkgeworICAgICAgICAgaWYgKHBhX2hhc2htYXBfZ2V0KGRhdGEucHJvZmlsZXMsIGRlZmF1bHRfcHJvZmlsZSkpCisgICAgICAgICAgICAgcGFfY2FyZF9uZXdfZGF0YV9zZXRfcHJvZmlsZSgmZGF0YSwgZGVmYXVsdF9wcm9maWxlKTsKKy0gICAgICAgIGVsc2UKKy0gICAgICAgICAgICBwYV9sb2dfd2FybigiUHJvZmlsZSAnJXMnIG5vdCB2YWxpZCBvciBub3Qgc3VwcG9ydGVkIGJ5IGRldmljZS4iLCBkZWZhdWx0X3Byb2ZpbGUpOworKyAgICAgICAgZWxzZSB7CisrICAgICAgICAgICAgcGFfbG9nKCJQcm9maWxlICclcycgbm90IHZhbGlkIG9yIG5vdCBzdXBwb3J0ZWQgYnkgZGV2aWNlLiIsIGRlZmF1bHRfcHJvZmlsZSk7CisrICAgICAgICAgICAgcGFfY2FyZF9uZXdfZGF0YV9kb25lKCZkYXRhKTsKKysgICAgICAgICAgICByZXR1cm4gLTE7CisrICAgICAgICB9CisgICAgIH0KKyAKKyAgICAgdS0+Y2FyZCA9IHBhX2NhcmRfbmV3KHUtPmNvcmUsICZkYXRhKTsKKy0tIAorMi44LjEKKwpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL3B1bHNlYXVkaW8vcHVsc2VhdWRpby8wMDAxLWNhcmQtYWRkLXBhX2NhcmRfcHJvZmlsZS5wb3J0cy5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9wdWxzZWF1ZGlvL3B1bHNlYXVkaW8vMDAwMS1jYXJkLWFkZC1wYV9jYXJkX3Byb2ZpbGUucG9ydHMucGF0Y2gKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDg0Yzk1MTkuLjAwMDAwMDAKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL3B1bHNlYXVkaW8vcHVsc2VhdWRpby8wMDAxLWNhcmQtYWRkLXBhX2NhcmRfcHJvZmlsZS5wb3J0cy5wYXRjaAorKysgL2Rldi9udWxsCkBAIC0xLDIxOCArMCwwIEBACi1Gcm9tIGQxYzAyOTcxODY3YmVhMTBhZmNhZmM4MmM5NjU0MTQwMTJjNGQ2YmQgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCi1Gcm9tOiBUYW51IEthc2tpbmVuIDx0YW51a0Bpa2kuZmk+Ci1EYXRlOiBGcmksIDIzIE9jdCAyMDE1IDEyOjIzOjEzICswMzAwCi1TdWJqZWN0OiBbUEFUQ0ggMS80XSBjYXJkOiBhZGQgcGFfY2FyZF9wcm9maWxlLnBvcnRzCi0KLUhhdmluZyBwb3J0cyBhY2Nlc3NpYmxlIGZyb20gcGFfY2FyZF9wcm9maWxlIGFsbG93cyBjaGVja2luZyB3aGV0aGVyIGFsbCBwb3J0cwotb2YgYSBwcm9maWxlIGFyZSB1bmF2YWlsYWJsZSwgYW5kIHRoZXJlZm9yZSBoZWxwcyB3aXRoIG1hbmFnaW5nIHRoZSBwcm9maWxlCi1hdmFpbGFiaWxpdHkgKGltcGxlbWVudGVkIGluIGEgbGF0ZXIgcGF0Y2gpLgotCi1odHRwOi8vYnVnemlsbGEueW9jdG9wcm9qZWN0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9ODQ0OAotCi1TaWduZWQtb2ZmLWJ5OiBKdXNzaSBLdWtrb25lbiA8anVzc2kua3Vra29uZW5AaW50ZWwuY29tPgotCi1SZWJhc2VkIG9uIDguMC4KLQotVXBzdHJlYW0tU3RhdHVzOiBEZW5pZWQgW1RoZSBwYXRjaCBzZXQgbmVlZHMgc29tZSB3b3JrIHRvIGJlIGFjY2VwdGVkLgotVGhlIHJldmlldyB0aHJlYWQ6Ci1odHRwOi8vdGhyZWFkLmdtYW5lLm9yZy9nbWFuZS5jb21wLmF1ZGlvLnB1bHNlYXVkaW8uZ2VuZXJhbC8yNDMwMV0KLQotU2lnbmVkLW9mZi1ieTogVGFudSBLYXNraW5lbiA8dGFudWtAaWtpLmZpPgotLS0tCi0gc3JjL21vZHVsZXMvYWxzYS9hbHNhLW1peGVyLmMgICAgICAgICAgICAgICAgfCAgNCArKystCi0gc3JjL21vZHVsZXMvYWxzYS9hbHNhLXVjbS5jICAgICAgICAgICAgICAgICAgfCAgMSArCi0gc3JjL21vZHVsZXMvYmx1ZXRvb3RoL21vZHVsZS1ibHVlejQtZGV2aWNlLmMgfCAgNiArKysrKysKLSBzcmMvbW9kdWxlcy9ibHVldG9vdGgvbW9kdWxlLWJsdWV6NS1kZXZpY2UuYyB8ICA2ICsrKysrKwotIHNyYy9wdWxzZWNvcmUvY2FyZC5jICAgICAgICAgICAgICAgICAgICAgICAgIHwgMTUgKysrKysrKysrKysrKysrCi0gc3JjL3B1bHNlY29yZS9jYXJkLmggICAgICAgICAgICAgICAgICAgICAgICAgfCAgNCArKysrCi0gc3JjL3B1bHNlY29yZS9kZXZpY2UtcG9ydC5jICAgICAgICAgICAgICAgICAgfCAgNyArKysrKystCi0gNyBmaWxlcyBjaGFuZ2VkLCA0MSBpbnNlcnRpb25zKCspLCAyIGRlbGV0aW9ucygtKQotCi1kaWZmIC0tZ2l0IGEvc3JjL21vZHVsZXMvYWxzYS9hbHNhLW1peGVyLmMgYi9zcmMvbW9kdWxlcy9hbHNhL2Fsc2EtbWl4ZXIuYwotaW5kZXggMWZlMmEwMi4uNWI3NmIwNiAxMDA2NDQKLS0tLSBhL3NyYy9tb2R1bGVzL2Fsc2EvYWxzYS1taXhlci5jCi0rKysgYi9zcmMvbW9kdWxlcy9hbHNhL2Fsc2EtbWl4ZXIuYwotQEAgLTQ3ODMsOCArNDc4MywxMCBAQCBzdGF0aWMgcGFfZGV2aWNlX3BvcnQqIGRldmljZV9wb3J0X2Fsc2FfaW5pdChwYV9oYXNobWFwICpwb3J0cywgLyogY2FyZCBwb3J0cyAqLwotICAgICAgICAgcGF0aC0+cG9ydCA9IHA7Ci0gICAgIH0KLSAKLS0gICAgaWYgKGNwKQotKyAgICBpZiAoY3ApIHsKLSAgICAgICAgIHBhX2hhc2htYXBfcHV0KHAtPnByb2ZpbGVzLCBjcC0+bmFtZSwgY3ApOwotKyAgICAgICAgcGFfY2FyZF9wcm9maWxlX2FkZF9wb3J0KGNwLCBwKTsKLSsgICAgfQotIAotICAgICBpZiAoZXh0cmEpIHsKLSAgICAgICAgIHBhX2hhc2htYXBfcHV0KGV4dHJhLCBwLT5uYW1lLCBwKTsKLWRpZmYgLS1naXQgYS9zcmMvbW9kdWxlcy9hbHNhL2Fsc2EtdWNtLmMgYi9zcmMvbW9kdWxlcy9hbHNhL2Fsc2EtdWNtLmMKLWluZGV4IDQyZjMyNDIuLjY4ZmNjMjYgMTAwNjQ0Ci0tLS0gYS9zcmMvbW9kdWxlcy9hbHNhL2Fsc2EtdWNtLmMKLSsrKyBiL3NyYy9tb2R1bGVzL2Fsc2EvYWxzYS11Y20uYwotQEAgLTc5MSw2ICs3OTEsNyBAQCBzdGF0aWMgdm9pZCB1Y21fYWRkX3BvcnRfY29tYmluYXRpb24oCi0gICAgIGlmIChjcCkgewotICAgICAgICAgcGFfbG9nX2RlYnVnKCJBZGRpbmcgcHJvZmlsZSAlcyB0byBwb3J0ICVzLiIsIGNwLT5uYW1lLCBwb3J0LT5uYW1lKTsKLSAgICAgICAgIHBhX2hhc2htYXBfcHV0KHBvcnQtPnByb2ZpbGVzLCBjcC0+bmFtZSwgY3ApOwotKyAgICAgICAgcGFfY2FyZF9wcm9maWxlX2FkZF9wb3J0KGNwLCBwb3J0KTsKLSAgICAgfQotIAotICAgICBpZiAoaGFzaCkgewotZGlmZiAtLWdpdCBhL3NyYy9tb2R1bGVzL2JsdWV0b290aC9tb2R1bGUtYmx1ZXo0LWRldmljZS5jIGIvc3JjL21vZHVsZXMvYmx1ZXRvb3RoL21vZHVsZS1ibHVlejQtZGV2aWNlLmMKLWluZGV4IDlhOTIxYTUuLmFkZWNiMzIgMTAwNjQ0Ci0tLS0gYS9zcmMvbW9kdWxlcy9ibHVldG9vdGgvbW9kdWxlLWJsdWV6NC1kZXZpY2UuYwotKysrIGIvc3JjL21vZHVsZXMvYmx1ZXRvb3RoL21vZHVsZS1ibHVlejQtZGV2aWNlLmMKLUBAIC0yMTgwLDYgKzIxODAsNyBAQCBzdGF0aWMgcGFfY2FyZF9wcm9maWxlICpjcmVhdGVfY2FyZF9wcm9maWxlKHN0cnVjdCB1c2VyZGF0YSAqdSwgY29uc3QgY2hhciAqdXVpZAotICAgICAgICAgcC0+bWF4X3NpbmtfY2hhbm5lbHMgPSAyOwotICAgICAgICAgcC0+bWF4X3NvdXJjZV9jaGFubmVscyA9IDA7Ci0gICAgICAgICBwYV9oYXNobWFwX3B1dChvdXRwdXRfcG9ydC0+cHJvZmlsZXMsIHAtPm5hbWUsIHApOwotKyAgICAgICAgcGFfY2FyZF9wcm9maWxlX2FkZF9wb3J0KHAsIG91dHB1dF9wb3J0KTsKLSAKLSAgICAgICAgIGQgPSBQQV9DQVJEX1BST0ZJTEVfREFUQShwKTsKLSAgICAgICAgICpkID0gUEFfQkxVRVo0X1BST0ZJTEVfQTJEUDsKLUBAIC0yMTkxLDYgKzIxOTIsNyBAQCBzdGF0aWMgcGFfY2FyZF9wcm9maWxlICpjcmVhdGVfY2FyZF9wcm9maWxlKHN0cnVjdCB1c2VyZGF0YSAqdSwgY29uc3QgY2hhciAqdXVpZAotICAgICAgICAgcC0+bWF4X3NpbmtfY2hhbm5lbHMgPSAwOwotICAgICAgICAgcC0+bWF4X3NvdXJjZV9jaGFubmVscyA9IDI7Ci0gICAgICAgICBwYV9oYXNobWFwX3B1dChpbnB1dF9wb3J0LT5wcm9maWxlcywgcC0+bmFtZSwgcCk7Ci0rICAgICAgICBwYV9jYXJkX3Byb2ZpbGVfYWRkX3BvcnQocCwgaW5wdXRfcG9ydCk7Ci0gCi0gICAgICAgICBkID0gUEFfQ0FSRF9QUk9GSUxFX0RBVEEocCk7Ci0gICAgICAgICAqZCA9IFBBX0JMVUVaNF9QUk9GSUxFX0EyRFBfU09VUkNFOwotQEAgLTIyMDMsNiArMjIwNSw4IEBAIHN0YXRpYyBwYV9jYXJkX3Byb2ZpbGUgKmNyZWF0ZV9jYXJkX3Byb2ZpbGUoc3RydWN0IHVzZXJkYXRhICp1LCBjb25zdCBjaGFyICp1dWlkCi0gICAgICAgICBwLT5tYXhfc291cmNlX2NoYW5uZWxzID0gMTsKLSAgICAgICAgIHBhX2hhc2htYXBfcHV0KGlucHV0X3BvcnQtPnByb2ZpbGVzLCBwLT5uYW1lLCBwKTsKLSAgICAgICAgIHBhX2hhc2htYXBfcHV0KG91dHB1dF9wb3J0LT5wcm9maWxlcywgcC0+bmFtZSwgcCk7Ci0rICAgICAgICBwYV9jYXJkX3Byb2ZpbGVfYWRkX3BvcnQocCwgaW5wdXRfcG9ydCk7Ci0rICAgICAgICBwYV9jYXJkX3Byb2ZpbGVfYWRkX3BvcnQocCwgb3V0cHV0X3BvcnQpOwotIAotICAgICAgICAgZCA9IFBBX0NBUkRfUFJPRklMRV9EQVRBKHApOwotICAgICAgICAgKmQgPSBQQV9CTFVFWjRfUFJPRklMRV9IU1A7Ci1AQCAtMjIxNSw2ICsyMjE5LDggQEAgc3RhdGljIHBhX2NhcmRfcHJvZmlsZSAqY3JlYXRlX2NhcmRfcHJvZmlsZShzdHJ1Y3QgdXNlcmRhdGEgKnUsIGNvbnN0IGNoYXIgKnV1aWQKLSAgICAgICAgIHAtPm1heF9zb3VyY2VfY2hhbm5lbHMgPSAxOwotICAgICAgICAgcGFfaGFzaG1hcF9wdXQoaW5wdXRfcG9ydC0+cHJvZmlsZXMsIHAtPm5hbWUsIHApOwotICAgICAgICAgcGFfaGFzaG1hcF9wdXQob3V0cHV0X3BvcnQtPnByb2ZpbGVzLCBwLT5uYW1lLCBwKTsKLSsgICAgICAgIHBhX2NhcmRfcHJvZmlsZV9hZGRfcG9ydChwLCBpbnB1dF9wb3J0KTsKLSsgICAgICAgIHBhX2NhcmRfcHJvZmlsZV9hZGRfcG9ydChwLCBvdXRwdXRfcG9ydCk7Ci0gCi0gICAgICAgICBkID0gUEFfQ0FSRF9QUk9GSUxFX0RBVEEocCk7Ci0gICAgICAgICAqZCA9IFBBX0JMVUVaNF9QUk9GSUxFX0hGR1c7Ci1kaWZmIC0tZ2l0IGEvc3JjL21vZHVsZXMvYmx1ZXRvb3RoL21vZHVsZS1ibHVlejUtZGV2aWNlLmMgYi9zcmMvbW9kdWxlcy9ibHVldG9vdGgvbW9kdWxlLWJsdWV6NS1kZXZpY2UuYwotaW5kZXggODRlNmQ1NS4uYjAxNWM2NyAxMDA2NDQKLS0tLSBhL3NyYy9tb2R1bGVzL2JsdWV0b290aC9tb2R1bGUtYmx1ZXo1LWRldmljZS5jCi0rKysgYi9zcmMvbW9kdWxlcy9ibHVldG9vdGgvbW9kdWxlLWJsdWV6NS1kZXZpY2UuYwotQEAgLTE3OTAsNiArMTc5MCw3IEBAIHN0YXRpYyBwYV9jYXJkX3Byb2ZpbGUgKmNyZWF0ZV9jYXJkX3Byb2ZpbGUoc3RydWN0IHVzZXJkYXRhICp1LCBjb25zdCBjaGFyICp1dWlkCi0gICAgICAgICBjcC0+bWF4X3NpbmtfY2hhbm5lbHMgPSAyOwotICAgICAgICAgY3AtPm1heF9zb3VyY2VfY2hhbm5lbHMgPSAwOwotICAgICAgICAgcGFfaGFzaG1hcF9wdXQob3V0cHV0X3BvcnQtPnByb2ZpbGVzLCBjcC0+bmFtZSwgY3ApOwotKyAgICAgICAgcGFfY2FyZF9wcm9maWxlX2FkZF9wb3J0KGNwLCBvdXRwdXRfcG9ydCk7Ci0gCi0gICAgICAgICBwID0gUEFfQ0FSRF9QUk9GSUxFX0RBVEEoY3ApOwotICAgICAgICAgKnAgPSBQQV9CTFVFVE9PVEhfUFJPRklMRV9BMkRQX1NJTks7Ci1AQCAtMTgwMSw2ICsxODAyLDcgQEAgc3RhdGljIHBhX2NhcmRfcHJvZmlsZSAqY3JlYXRlX2NhcmRfcHJvZmlsZShzdHJ1Y3QgdXNlcmRhdGEgKnUsIGNvbnN0IGNoYXIgKnV1aWQKLSAgICAgICAgIGNwLT5tYXhfc2lua19jaGFubmVscyA9IDA7Ci0gICAgICAgICBjcC0+bWF4X3NvdXJjZV9jaGFubmVscyA9IDI7Ci0gICAgICAgICBwYV9oYXNobWFwX3B1dChpbnB1dF9wb3J0LT5wcm9maWxlcywgY3AtPm5hbWUsIGNwKTsKLSsgICAgICAgIHBhX2NhcmRfcHJvZmlsZV9hZGRfcG9ydChjcCwgaW5wdXRfcG9ydCk7Ci0gCi0gICAgICAgICBwID0gUEFfQ0FSRF9QUk9GSUxFX0RBVEEoY3ApOwotICAgICAgICAgKnAgPSBQQV9CTFVFVE9PVEhfUFJPRklMRV9BMkRQX1NPVVJDRTsKLUBAIC0xODEzLDYgKzE4MTUsOCBAQCBzdGF0aWMgcGFfY2FyZF9wcm9maWxlICpjcmVhdGVfY2FyZF9wcm9maWxlKHN0cnVjdCB1c2VyZGF0YSAqdSwgY29uc3QgY2hhciAqdXVpZAotICAgICAgICAgY3AtPm1heF9zb3VyY2VfY2hhbm5lbHMgPSAxOwotICAgICAgICAgcGFfaGFzaG1hcF9wdXQoaW5wdXRfcG9ydC0+cHJvZmlsZXMsIGNwLT5uYW1lLCBjcCk7Ci0gICAgICAgICBwYV9oYXNobWFwX3B1dChvdXRwdXRfcG9ydC0+cHJvZmlsZXMsIGNwLT5uYW1lLCBjcCk7Ci0rICAgICAgICBwYV9jYXJkX3Byb2ZpbGVfYWRkX3BvcnQoY3AsIGlucHV0X3BvcnQpOwotKyAgICAgICAgcGFfY2FyZF9wcm9maWxlX2FkZF9wb3J0KGNwLCBvdXRwdXRfcG9ydCk7Ci0gCi0gICAgICAgICBwID0gUEFfQ0FSRF9QUk9GSUxFX0RBVEEoY3ApOwotICAgICAgICAgKnAgPSBQQV9CTFVFVE9PVEhfUFJPRklMRV9IRUFEU0VUX0hFQURfVU5JVDsKLUBAIC0xODI1LDYgKzE4MjksOCBAQCBzdGF0aWMgcGFfY2FyZF9wcm9maWxlICpjcmVhdGVfY2FyZF9wcm9maWxlKHN0cnVjdCB1c2VyZGF0YSAqdSwgY29uc3QgY2hhciAqdXVpZAotICAgICAgICAgY3AtPm1heF9zb3VyY2VfY2hhbm5lbHMgPSAxOwotICAgICAgICAgcGFfaGFzaG1hcF9wdXQoaW5wdXRfcG9ydC0+cHJvZmlsZXMsIGNwLT5uYW1lLCBjcCk7Ci0gICAgICAgICBwYV9oYXNobWFwX3B1dChvdXRwdXRfcG9ydC0+cHJvZmlsZXMsIGNwLT5uYW1lLCBjcCk7Ci0rICAgICAgICBwYV9jYXJkX3Byb2ZpbGVfYWRkX3BvcnQoY3AsIGlucHV0X3BvcnQpOwotKyAgICAgICAgcGFfY2FyZF9wcm9maWxlX2FkZF9wb3J0KGNwLCBvdXRwdXRfcG9ydCk7Ci0gCi0gICAgICAgICBwID0gUEFfQ0FSRF9QUk9GSUxFX0RBVEEoY3ApOwotICAgICAgICAgKnAgPSBQQV9CTFVFVE9PVEhfUFJPRklMRV9IRUFEU0VUX0FVRElPX0dBVEVXQVk7Ci1kaWZmIC0tZ2l0IGEvc3JjL3B1bHNlY29yZS9jYXJkLmMgYi9zcmMvcHVsc2Vjb3JlL2NhcmQuYwotaW5kZXggYjZjYmJmNy4uZjkyYWM4NyAxMDA2NDQKLS0tLSBhL3NyYy9wdWxzZWNvcmUvY2FyZC5jCi0rKysgYi9zcmMvcHVsc2Vjb3JlL2NhcmQuYwotQEAgLTQ1LDYgKzQ1LDcgQEAgcGFfY2FyZF9wcm9maWxlICpwYV9jYXJkX3Byb2ZpbGVfbmV3KGNvbnN0IGNoYXIgKm5hbWUsIGNvbnN0IGNoYXIgKmRlc2NyaXB0aW9uLAotICAgICBjLT5uYW1lID0gcGFfeHN0cmR1cChuYW1lKTsKLSAgICAgYy0+ZGVzY3JpcHRpb24gPSBwYV94c3RyZHVwKGRlc2NyaXB0aW9uKTsKLSAgICAgYy0+YXZhaWxhYmxlID0gUEFfQVZBSUxBQkxFX1VOS05PV047Ci0rICAgIGMtPnBvcnRzID0gcGFfaGFzaG1hcF9uZXcocGFfaWR4c2V0X3N0cmluZ19oYXNoX2Z1bmMsIHBhX2lkeHNldF9zdHJpbmdfY29tcGFyZV9mdW5jKTsKLSAKLSAgICAgcmV0dXJuIGM7Ci0gfQotQEAgLTUyLDYgKzUzLDE0IEBAIHBhX2NhcmRfcHJvZmlsZSAqcGFfY2FyZF9wcm9maWxlX25ldyhjb25zdCBjaGFyICpuYW1lLCBjb25zdCBjaGFyICpkZXNjcmlwdGlvbiwKLSB2b2lkIHBhX2NhcmRfcHJvZmlsZV9mcmVlKHBhX2NhcmRfcHJvZmlsZSAqYykgewotICAgICBwYV9hc3NlcnQoYyk7Ci0gCi0rICAgIGlmIChjLT5wb3J0cykgewotKyAgICAgICAgcGFfZGV2aWNlX3BvcnQgKnBvcnQ7Ci0rICAgICAgICB2b2lkICpzdGF0ZTsKLSsgICAgICAgIFBBX0hBU0hNQVBfRk9SRUFDSChwb3J0LCBjLT5wb3J0cywgc3RhdGUpCi0rICAgICAgICAgICAgcGFfaGFzaG1hcF9yZW1vdmUgKHBvcnQtPnByb2ZpbGVzLCBjLT5uYW1lKTsKLSsgICAgICAgIHBhX2hhc2htYXBfZnJlZShjLT5wb3J0cyk7Ci0rICAgIH0KLSsKLSAgICAgcGFfeGZyZWUoYy0+aW5wdXRfbmFtZSk7Ci0gICAgIHBhX3hmcmVlKGMtPm91dHB1dF9uYW1lKTsKLSAgICAgcGFfeGZyZWUoYy0+bmFtZSk7Ci1AQCAtNTksNiArNjgsMTIgQEAgdm9pZCBwYV9jYXJkX3Byb2ZpbGVfZnJlZShwYV9jYXJkX3Byb2ZpbGUgKmMpIHsKLSAgICAgcGFfeGZyZWUoYyk7Ci0gfQotIAotK3ZvaWQgcGFfY2FyZF9wcm9maWxlX2FkZF9wb3J0KHBhX2NhcmRfcHJvZmlsZSAqcHJvZmlsZSwgcGFfZGV2aWNlX3BvcnQgKnBvcnQpIHsKLSsgICAgcGFfYXNzZXJ0KHByb2ZpbGUpOwotKwotKyAgICBwYV9oYXNobWFwX3B1dChwcm9maWxlLT5wb3J0cywgcG9ydC0+bmFtZSwgcG9ydCk7Ci0rfQotKwotIHZvaWQgcGFfY2FyZF9wcm9maWxlX3NldF9hdmFpbGFibGUocGFfY2FyZF9wcm9maWxlICpjLCBwYV9hdmFpbGFibGVfdCBhdmFpbGFibGUpIHsKLSAgICAgcGFfY29yZSAqY29yZTsKLSAKLWRpZmYgLS1naXQgYS9zcmMvcHVsc2Vjb3JlL2NhcmQuaCBiL3NyYy9wdWxzZWNvcmUvY2FyZC5oCi1pbmRleCAzMGJmYzBlLi5mZmY5MDU3IDEwMDY0NAotLS0tIGEvc3JjL3B1bHNlY29yZS9jYXJkLmgKLSsrKyBiL3NyYy9wdWxzZWNvcmUvY2FyZC5oCi1AQCAtNTAsNiArNTAsOCBAQCBzdHJ1Y3QgcGFfY2FyZF9wcm9maWxlIHsKLSAgICAgdW5zaWduZWQgcHJpb3JpdHk7Ci0gICAgIHBhX2F2YWlsYWJsZV90IGF2YWlsYWJsZTsgLyogUEFfQVZBSUxBQkxFX1VOS05PV04sIFBBX0FWQUlMQUJMRV9OTyBvciBQQV9BVkFJTEFCTEVfWUVTICovCi0gCi0rICAgIHBhX2hhc2htYXAgKnBvcnRzOyAvKiBwb3J0IG5hbWUgLT4gcGFfZGV2aWNlX3BvcnQgKi8KLSsKLSAgICAgLyogV2UgcHJvYmFibHkgd2FudCB0byBoYXZlIGRpZmZlcmVudCBwcm9wZXJ0aWVzIGxhdGVyIG9uIGhlcmUgKi8KLSAgICAgdW5zaWduZWQgbl9zaW5rczsKLSAgICAgdW5zaWduZWQgbl9zb3VyY2VzOwotQEAgLTEwNyw2ICsxMDksOCBAQCB0eXBlZGVmIHN0cnVjdCBwYV9jYXJkX25ld19kYXRhIHsKLSBwYV9jYXJkX3Byb2ZpbGUgKnBhX2NhcmRfcHJvZmlsZV9uZXcoY29uc3QgY2hhciAqbmFtZSwgY29uc3QgY2hhciAqZGVzY3JpcHRpb24sIHNpemVfdCBleHRyYSk7Ci0gdm9pZCBwYV9jYXJkX3Byb2ZpbGVfZnJlZShwYV9jYXJkX3Byb2ZpbGUgKmMpOwotIAotK3ZvaWQgcGFfY2FyZF9wcm9maWxlX2FkZF9wb3J0KHBhX2NhcmRfcHJvZmlsZSAqcHJvZmlsZSwgcGFfZGV2aWNlX3BvcnQgKnBvcnQpOwotKwotIC8qIFRoZSBwcm9maWxlJ3MgYXZhaWxhYmxlIHN0YXR1cyBoYXMgY2hhbmdlZCAqLwotIHZvaWQgcGFfY2FyZF9wcm9maWxlX3NldF9hdmFpbGFibGUocGFfY2FyZF9wcm9maWxlICpjLCBwYV9hdmFpbGFibGVfdCBhdmFpbGFibGUpOwotIAotZGlmZiAtLWdpdCBhL3NyYy9wdWxzZWNvcmUvZGV2aWNlLXBvcnQuYyBiL3NyYy9wdWxzZWNvcmUvZGV2aWNlLXBvcnQuYwotaW5kZXggNTgwN2QzZS4uZDEyZGZiYyAxMDA2NDQKLS0tLSBhL3NyYy9wdWxzZWNvcmUvZGV2aWNlLXBvcnQuYwotKysrIGIvc3JjL3B1bHNlY29yZS9kZXZpY2UtcG9ydC5jCi1AQCAtMTA3LDggKzEwNywxMyBAQCBzdGF0aWMgdm9pZCBkZXZpY2VfcG9ydF9mcmVlKHBhX29iamVjdCAqbykgewotICAgICBpZiAocC0+cHJvcGxpc3QpCi0gICAgICAgICBwYV9wcm9wbGlzdF9mcmVlKHAtPnByb3BsaXN0KTsKLSAKLS0gICAgaWYgKHAtPnByb2ZpbGVzKQotKyAgICBpZiAocC0+cHJvZmlsZXMpIHsKLSsgICAgICAgIHBhX2NhcmRfcHJvZmlsZSAqcHJvZmlsZTsKLSsgICAgICAgIHZvaWQgKnN0YXRlOwotKyAgICAgICAgUEFfSEFTSE1BUF9GT1JFQUNIKHByb2ZpbGUsIHAtPnByb2ZpbGVzLCBzdGF0ZSkKLSsgICAgICAgICAgICBwYV9oYXNobWFwX3JlbW92ZSAocHJvZmlsZS0+cG9ydHMsIHAtPm5hbWUpOwotICAgICAgICAgcGFfaGFzaG1hcF9mcmVlKHAtPnByb2ZpbGVzKTsKLSsgICAgfQotIAotICAgICBwYV94ZnJlZShwLT5wcmVmZXJyZWRfcHJvZmlsZSk7Ci0gICAgIHBhX3hmcmVlKHAtPm5hbWUpOwotLS0gCi0yLjcuMAotCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvcHVsc2VhdWRpby9wdWxzZWF1ZGlvLzAwMDEtY2xpZW50LWNvbmYtQWRkLWFsbG93LWF1dG9zcGF3bi1mb3Itcm9vdC5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9wdWxzZWF1ZGlvL3B1bHNlYXVkaW8vMDAwMS1jbGllbnQtY29uZi1BZGQtYWxsb3ctYXV0b3NwYXduLWZvci1yb290LnBhdGNoCmluZGV4IGJjMzI3NzUuLjMzZjc3MDkgMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9wdWxzZWF1ZGlvL3B1bHNlYXVkaW8vMDAwMS1jbGllbnQtY29uZi1BZGQtYWxsb3ctYXV0b3NwYXduLWZvci1yb290LnBhdGNoCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9wdWxzZWF1ZGlvL3B1bHNlYXVkaW8vMDAwMS1jbGllbnQtY29uZi1BZGQtYWxsb3ctYXV0b3NwYXduLWZvci1yb290LnBhdGNoCkBAIC0xLDQgKzEsNCBAQAotRnJvbSAxY2I1NjQ3Zjc2ZGM4Y2Q3YmFjYmNlMmE2NGZhYzllNmMyZGMzYjE2IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbSBiYWJlYzNhNTBkZDcxMGQyNmI3MmY2YzZkNDNiZDc5YjA0ZTk1NGE2IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQogRnJvbTogVGFudSBLYXNraW5lbiA8dGFudS5rYXNraW5lbkBsaW51eC5pbnRlbC5jb20+CiBEYXRlOiBUdWUsIDI4IEFwciAyMDE1IDE0OjMyOjQzICswMzAwCiBTdWJqZWN0OiBbUEFUQ0hdIGNsaWVudC1jb25mOiBBZGQgYWxsb3ctYXV0b3NwYXduLWZvci1yb290CkBAIC0yNCwxMCArMjQsMTAgQEAKICA1IGZpbGVzIGNoYW5nZWQsIDEzIGluc2VydGlvbnMoKyksIDEgZGVsZXRpb24oLSkKIAogZGlmZiAtLWdpdCBhL21hbi9wdWxzZS1jbGllbnQuY29uZi41LnhtbC5pbiBiL21hbi9wdWxzZS1jbGllbnQuY29uZi41LnhtbC5pbgotaW5kZXggMTAwMmRiZS4uMDA1ODQ5MCAxMDA2NDQKK2luZGV4IGI4ODg5OGMuLmU3MzdjOTYgMTAwNjQ0CiAtLS0gYS9tYW4vcHVsc2UtY2xpZW50LmNvbmYuNS54bWwuaW4KICsrKyBiL21hbi9wdWxzZS1jbGllbnQuY29uZi41LnhtbC5pbgotQEAgLTcxLDYgKzcxLDE1IEBAIExpY2Vuc2UgYWxvbmcgd2l0aCBQdWxzZUF1ZGlvOyBpZiBub3QsIHNlZSA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCitAQCAtODIsNiArODIsMTUgQEAgTGljZW5zZSBhbG9uZyB3aXRoIFB1bHNlQXVkaW87IGlmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KICAgICAgPC9vcHRpb24+CiAgCiAgICAgIDxvcHRpb24+CkBAIC00NCw3ICs0NCw3IEBACiAgICAgICAgcnVuIHdoZW4gYXV0b3NwYXduaW5nLiBEZWZhdWx0cyB0byBhIHBhdGggY29uZmlndXJlZCBhdCBjb21waWxlCiAgICAgICAgdGltZS48L3A+CiBkaWZmIC0tZ2l0IGEvc3JjL3B1bHNlL2NsaWVudC1jb25mLmMgYi9zcmMvcHVsc2UvY2xpZW50LWNvbmYuYwotaW5kZXggODMzMzFmOC4uMDQ3NDU4MyAxMDA2NDQKK2luZGV4IGEzYzk0ODYuLjlmNjhlZTUgMTAwNjQ0CiAtLS0gYS9zcmMvcHVsc2UvY2xpZW50LWNvbmYuYwogKysrIGIvc3JjL3B1bHNlL2NsaWVudC1jb25mLmMKIEBAIC0xMzgsNiArMTM4LDcgQEAgdm9pZCBwYV9jbGllbnRfY29uZl9sb2FkKHBhX2NsaWVudF9jb25mICpjLCBib29sIGxvYWRfZnJvbV94MTEsIGJvb2wgbG9hZF9mcm9tX2UKQEAgLTU2LDEzICs1NiwxMyBAQAogICAgICAgICAgeyAiZGlzYWJsZS1zaG0iLCAgICAgICAgICAgIHBhX2NvbmZpZ19wYXJzZV9ib29sLCAgICAgJmMtPmRpc2FibGVfc2htLCBOVUxMIH0sCiAgICAgICAgICB7ICJlbmFibGUtc2htIiwgICAgICAgICAgICAgcGFfY29uZmlnX3BhcnNlX25vdF9ib29sLCAmYy0+ZGlzYWJsZV9zaG0sIE5VTEwgfSwKIGRpZmYgLS1naXQgYS9zcmMvcHVsc2UvY2xpZW50LWNvbmYuaCBiL3NyYy9wdWxzZS9jbGllbnQtY29uZi5oCi1pbmRleCBlYWM3MDVhLi4xMzEzOTNhIDEwMDY0NAoraW5kZXggNzY5MWVjNy4uMTlkYjdlZCAxMDA2NDQKIC0tLSBhL3NyYy9wdWxzZS9jbGllbnQtY29uZi5oCiArKysgYi9zcmMvcHVsc2UvY2xpZW50LWNvbmYuaAogQEAgLTM4LDYgKzM4LDcgQEAgdHlwZWRlZiBzdHJ1Y3QgcGFfY2xpZW50X2NvbmYgewogICAgICBjaGFyICpjb29raWVfZmlsZV9mcm9tX2FwcGxpY2F0aW9uOwogICAgICBjaGFyICpjb29raWVfZmlsZV9mcm9tX2NsaWVudF9jb25mOwotICAgICBib29sIGF1dG9zcGF3biwgZGlzYWJsZV9zaG0sIGF1dG9fY29ubmVjdF9sb2NhbGhvc3QsIGF1dG9fY29ubmVjdF9kaXNwbGF5OworICAgICBib29sIGF1dG9zcGF3biwgZGlzYWJsZV9zaG0sIGRpc2FibGVfbWVtZmQsIGF1dG9fY29ubmVjdF9sb2NhbGhvc3QsIGF1dG9fY29ubmVjdF9kaXNwbGF5OwogKyAgICBib29sIGFsbG93X2F1dG9zcGF3bl9mb3Jfcm9vdDsKICAgICAgc2l6ZV90IHNobV9zaXplOwogIH0gcGFfY2xpZW50X2NvbmY7CkBAIC04MCwxMCArODAsMTAgQEAKICA7IGV4dHJhLWFyZ3VtZW50cyA9IC0tbG9nLXRhcmdldD1zeXNsb2cKICAKIGRpZmYgLS1naXQgYS9zcmMvcHVsc2UvY29udGV4dC5jIGIvc3JjL3B1bHNlL2NvbnRleHQuYwotaW5kZXggNGJjNDQ1Zi4uZDZjM2Y2ZCAxMDA2NDQKK2luZGV4IDY5YmU1ZjQuLmQ2ZTEzZTggMTAwNjQ0CiAtLS0gYS9zcmMvcHVsc2UvY29udGV4dC5jCiArKysgYi9zcmMvcHVsc2UvY29udGV4dC5jCi1AQCAtOTc2LDcgKzk3Niw3IEBAIGludCBwYV9jb250ZXh0X2Nvbm5lY3QoCitAQCAtMTAyNyw3ICsxMDI3LDcgQEAgaW50IHBhX2NvbnRleHRfY29ubmVjdCgKICAgICAgaWYgKCEoZmxhZ3MgJiBQQV9DT05URVhUX05PQVVUT1NQQVdOKSAmJiBjLT5jb25mLT5hdXRvc3Bhd24pIHsKICAKICAjaWZkZWYgSEFWRV9HRVRVSUQKQEAgLTkzLDUgKzkzLDUgQEAKICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgIGMtPmRvX2F1dG9zcGF3biA9IHRydWU7CiAtLSAKLTEuOS4zCisyLjguMQogCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvcHVsc2VhdWRpby9wdWxzZWF1ZGlvLzAwMDItYWxzYS1ibHVldG9vdGgtZmFpbC1pZi11c2VyLXJlcXVlc3RlZC1wcm9maWxlLWRvZXNuLS5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9wdWxzZWF1ZGlvL3B1bHNlYXVkaW8vMDAwMi1hbHNhLWJsdWV0b290aC1mYWlsLWlmLXVzZXItcmVxdWVzdGVkLXByb2ZpbGUtZG9lc24tLnBhdGNoCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiZTM2NTViLi4wMDAwMDAwCi0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9wdWxzZWF1ZGlvL3B1bHNlYXVkaW8vMDAwMi1hbHNhLWJsdWV0b290aC1mYWlsLWlmLXVzZXItcmVxdWVzdGVkLXByb2ZpbGUtZG9lc24tLnBhdGNoCisrKyAvZGV2L251bGwKQEAgLTEsNjUgKzAsMCBAQAotRnJvbSAzMzllYjE3OWJhYTc4MTAxMTNmNjQ1NmFjY2MwNWIzYTMyYzFjZGJhIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQotRnJvbTogVGFudSBLYXNraW5lbiA8dGFudWtAaWtpLmZpPgotRGF0ZTogRnJpLCAyMyBPY3QgMjAxNSAxMjozNjozNCArMDMwMAotU3ViamVjdDogW1BBVENIIDIvNF0gYWxzYSwgYmx1ZXRvb3RoOiBmYWlsIGlmIHVzZXItcmVxdWVzdGVkIHByb2ZpbGUgZG9lc24ndAotIGV4aXN0Ci0KLUlmIHdlIGNhbid0IGZ1bGZpbGwgdGhlIHVzZXIgcmVxdWVzdCBmdWxseSwgSSB0aGluayB3ZSBzaG91bGRuJ3QKLWZ1bGZpbGwgaXQgYXQgYWxsLCB0byBtYWtlIGl0IGNsZWFyIHRoYXQgdGhlIHJlcXVlc3RlZCBvcGVyYXRpb24KLWRpZG4ndCBzdWNjZWVkLgotCi1odHRwOi8vYnVnemlsbGEueW9jdG9wcm9qZWN0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9ODQ0OAotCi1TaWduZWQtb2ZmLWJ5OiBKdXNzaSBLdWtrb25lbiA8anVzc2kua3Vra29uZW5AaW50ZWwuY29tPgotCi1VcHN0cmVhbS1TdGF0dXM6IERlbmllZCBbVGhlIHBhdGNoIHNldCBuZWVkcyBzb21lIHdvcmsgdG8gYmUgYWNjZXB0ZWQuCi1UaGUgcmV2aWV3IHRocmVhZDoKLWh0dHA6Ly90aHJlYWQuZ21hbmUub3JnL2dtYW5lLmNvbXAuYXVkaW8ucHVsc2VhdWRpby5nZW5lcmFsLzI0MzAxXQotCi1TaWduZWQtb2ZmLWJ5OiBUYW51IEthc2tpbmVuIDx0YW51a0Bpa2kuZmk+Ci0tLS0KLSBzcmMvbW9kdWxlcy9hbHNhL21vZHVsZS1hbHNhLWNhcmQuYyAgICAgICAgICB8IDEwICsrKysrKysrLS0KLSBzcmMvbW9kdWxlcy9ibHVldG9vdGgvbW9kdWxlLWJsdWV6NC1kZXZpY2UuYyB8ICA2ICsrKystLQotIDIgZmlsZXMgY2hhbmdlZCwgMTIgaW5zZXJ0aW9ucygrKSwgNCBkZWxldGlvbnMoLSkKLQotZGlmZiAtLWdpdCBhL3NyYy9tb2R1bGVzL2Fsc2EvbW9kdWxlLWFsc2EtY2FyZC5jIGIvc3JjL21vZHVsZXMvYWxzYS9tb2R1bGUtYWxzYS1jYXJkLmMKLWluZGV4IGE3ZmVjMDQuLjMyZjUxN2UgMTAwNjQ0Ci0tLS0gYS9zcmMvbW9kdWxlcy9hbHNhL21vZHVsZS1hbHNhLWNhcmQuYwotKysrIGIvc3JjL21vZHVsZXMvYWxzYS9tb2R1bGUtYWxzYS1jYXJkLmMKLUBAIC03NTQsOCArNzU0LDE0IEBAIGludCBwYV9faW5pdChwYV9tb2R1bGUgKm0pIHsKLSAgICAgICAgIGdvdG8gZmFpbDsKLSAgICAgfQotIAotLSAgICBpZiAoKHByb2ZpbGUgPSBwYV9tb2RhcmdzX2dldF92YWx1ZSh1LT5tb2RhcmdzLCAicHJvZmlsZSIsIE5VTEwpKSkKLS0gICAgICAgIHBhX2NhcmRfbmV3X2RhdGFfc2V0X3Byb2ZpbGUoJmRhdGEsIHByb2ZpbGUpOwotKyAgICBpZiAoKHByb2ZpbGUgPSBwYV9tb2RhcmdzX2dldF92YWx1ZSh1LT5tb2RhcmdzLCAicHJvZmlsZSIsIE5VTEwpKSkgewotKyAgICAgICAgaWYgKHBhX2hhc2htYXBfZ2V0KGRhdGEucHJvZmlsZXMsIHByb2ZpbGUpKQotKyAgICAgICAgICAgIHBhX2NhcmRfbmV3X2RhdGFfc2V0X3Byb2ZpbGUoJmRhdGEsIHByb2ZpbGUpOwotKyAgICAgICAgZWxzZSB7Ci0rICAgICAgICAgICAgcGFfbG9nKCJObyBzdWNoIHByb2ZpbGU6ICVzIiwgcHJvZmlsZSk7Ci0rICAgICAgICAgICAgZ290byBmYWlsOwotKyAgICAgICAgfQotKyAgICB9Ci0gCi0gICAgIHUtPmNhcmQgPSBwYV9jYXJkX25ldyhtLT5jb3JlLCAmZGF0YSk7Ci0gICAgIHBhX2NhcmRfbmV3X2RhdGFfZG9uZSgmZGF0YSk7Ci1kaWZmIC0tZ2l0IGEvc3JjL21vZHVsZXMvYmx1ZXRvb3RoL21vZHVsZS1ibHVlejQtZGV2aWNlLmMgYi9zcmMvbW9kdWxlcy9ibHVldG9vdGgvbW9kdWxlLWJsdWV6NC1kZXZpY2UuYwotaW5kZXggYjQwYzZhMC4uOTRlNjk4OCAxMDA2NDQKLS0tLSBhL3NyYy9tb2R1bGVzL2JsdWV0b290aC9tb2R1bGUtYmx1ZXo0LWRldmljZS5jCi0rKysgYi9zcmMvbW9kdWxlcy9ibHVldG9vdGgvbW9kdWxlLWJsdWV6NC1kZXZpY2UuYwotQEAgLTIzMTAsOCArMjMxMCwxMCBAQCBzdGF0aWMgaW50IGFkZF9jYXJkKHN0cnVjdCB1c2VyZGF0YSAqdSkgewotICAgICBpZiAoKGRlZmF1bHRfcHJvZmlsZSA9IHBhX21vZGFyZ3NfZ2V0X3ZhbHVlKHUtPm1vZGFyZ3MsICJwcm9maWxlIiwgTlVMTCkpKSB7Ci0gICAgICAgICBpZiAocGFfaGFzaG1hcF9nZXQoZGF0YS5wcm9maWxlcywgZGVmYXVsdF9wcm9maWxlKSkKLSAgICAgICAgICAgICBwYV9jYXJkX25ld19kYXRhX3NldF9wcm9maWxlKCZkYXRhLCBkZWZhdWx0X3Byb2ZpbGUpOwotLSAgICAgICAgZWxzZQotLSAgICAgICAgICAgIHBhX2xvZ193YXJuKCJQcm9maWxlICclcycgbm90IHZhbGlkIG9yIG5vdCBzdXBwb3J0ZWQgYnkgZGV2aWNlLiIsIGRlZmF1bHRfcHJvZmlsZSk7Ci0rICAgICAgICBlbHNlIHsKLSsgICAgICAgICAgICBwYV9sb2coIlByb2ZpbGUgJyVzJyBub3QgdmFsaWQgb3Igbm90IHN1cHBvcnRlZCBieSBkZXZpY2UuIiwgZGVmYXVsdF9wcm9maWxlKTsKLSsgICAgICAgICAgICByZXR1cm4gLTE7Ci0rICAgICAgICB9Ci0gICAgIH0KLSAKLSAgICAgdS0+Y2FyZCA9IHBhX2NhcmRfbmV3KHUtPmNvcmUsICZkYXRhKTsKLS0tIAotMi4xLjQKLQpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL3B1bHNlYXVkaW8vcHVsc2VhdWRpby8wMDAyLWNhcmQtZG9uLXQtYWxsb3ctdGhlLUNBUkRfTkVXLWhvb2stdG8tZmFpbC5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9wdWxzZWF1ZGlvL3B1bHNlYXVkaW8vMDAwMi1jYXJkLWRvbi10LWFsbG93LXRoZS1DQVJEX05FVy1ob29rLXRvLWZhaWwucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODBjMjkxZgotLS0gL2Rldi9udWxsCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9wdWxzZWF1ZGlvL3B1bHNlYXVkaW8vMDAwMi1jYXJkLWRvbi10LWFsbG93LXRoZS1DQVJEX05FVy1ob29rLXRvLWZhaWwucGF0Y2gKQEAgLTAsMCArMSwzNyBAQAorRnJvbSBkNGU2ZDA3ZmVmMjhkMWJkOGJmYmNlYWI0Y2MxOTZlZjU0YzIzZGQ4IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogVGFudSBLYXNraW5lbiA8dGFudWtAaWtpLmZpPgorRGF0ZTogVHVlLCA3IEp1biAyMDE2IDE2OjUxOjAwICswMzAwCitTdWJqZWN0OiBbUEFUQ0ggMi81XSBjYXJkOiBkb24ndCBhbGxvdyB0aGUgQ0FSRF9ORVcgaG9vayB0byBmYWlsCisKK1RoZXJlIGlzIGN1cnJlbnRseSBubyB1c2UgZm9yIGFsbG93aW5nIG1vZHVsZXMgdG8gY2FuY2VsIGNhcmQgY3JlYXRpb24sCithbmQgSSBkb24ndCBzZWUgbmVlZCBmb3IgdGhhdCBpbiB0aGUgZnV0dXJlIGVpdGhlci4gTGV0J3Mgc2ltcGxpZnkKK3RoaW5ncyBieSByZW1vdmluZyB0aGUgZmFpbHVyZSBoYW5kbGluZyBjb2RlLgorCitVcHN0cmVhbS1TdGF0dXM6IEFjY2VwdGVkIFtleHBlY3RlZCBpbiAxMC4wXQorCitTaWduZWQtb2ZmLWJ5OiBUYW51IEthc2tpbmVuIDx0YW51a0Bpa2kuZmk+CistLS0KKyBzcmMvcHVsc2Vjb3JlL2NhcmQuYyB8IDcgKy0tLS0tLQorIDEgZmlsZSBjaGFuZ2VkLCAxIGluc2VydGlvbigrKSwgNiBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL3NyYy9wdWxzZWNvcmUvY2FyZC5jIGIvc3JjL3B1bHNlY29yZS9jYXJkLmMKK2luZGV4IDQxMDc0NmIuLjBhYzcwYjkgMTAwNjQ0CistLS0gYS9zcmMvcHVsc2Vjb3JlL2NhcmQuYworKysrIGIvc3JjL3B1bHNlY29yZS9jYXJkLmMKK0BAIC0xNDksMTIgKzE0OSw3IEBAIHBhX2NhcmQgKnBhX2NhcmRfbmV3KHBhX2NvcmUgKmNvcmUsIHBhX2NhcmRfbmV3X2RhdGEgKmRhdGEpIHsKKyAgICAgfQorIAorICAgICBwYV9jYXJkX25ld19kYXRhX3NldF9uYW1lKGRhdGEsIG5hbWUpOworLQorLSAgICBpZiAocGFfaG9va19maXJlKCZjb3JlLT5ob29rc1tQQV9DT1JFX0hPT0tfQ0FSRF9ORVddLCBkYXRhKSA8IDApIHsKKy0gICAgICAgIHBhX3hmcmVlKGMpOworLSAgICAgICAgcGFfbmFtZXJlZ191bnJlZ2lzdGVyKGNvcmUsIG5hbWUpOworLSAgICAgICAgcmV0dXJuIE5VTEw7CistICAgIH0KKysgICAgcGFfaG9va19maXJlKCZjb3JlLT5ob29rc1tQQV9DT1JFX0hPT0tfQ0FSRF9ORVddLCBkYXRhKTsKKyAKKyAgICAgYy0+Y29yZSA9IGNvcmU7CisgICAgIGMtPm5hbWUgPSBwYV94c3RyZHVwKGRhdGEtPm5hbWUpOworLS0gCisyLjguMQorCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvcHVsc2VhdWRpby9wdWxzZWF1ZGlvLzAwMDMtY2FyZC1tb3ZlLXByb2ZpbGUtc2VsZWN0aW9uLWFmdGVyLXBhX2NhcmRfbmV3LnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL3B1bHNlYXVkaW8vcHVsc2VhdWRpby8wMDAzLWNhcmQtbW92ZS1wcm9maWxlLXNlbGVjdGlvbi1hZnRlci1wYV9jYXJkX25ldy5wYXRjaAppbmRleCAwZTc3ODAxLi5lMGY0MjRiIDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvcHVsc2VhdWRpby9wdWxzZWF1ZGlvLzAwMDMtY2FyZC1tb3ZlLXByb2ZpbGUtc2VsZWN0aW9uLWFmdGVyLXBhX2NhcmRfbmV3LnBhdGNoCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9wdWxzZWF1ZGlvL3B1bHNlYXVkaW8vMDAwMy1jYXJkLW1vdmUtcHJvZmlsZS1zZWxlY3Rpb24tYWZ0ZXItcGFfY2FyZF9uZXcucGF0Y2gKQEAgLTEsNjEgKzEsNjIgQEAKLUZyb20gMTNlODVkZDE3NjNlOTlkMjFhNjAzMjM2NzFiOWE1ZGYwOGJkYWU3NSBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb20gMGI5ODMwOWZkYmNkMzZmYTkyYWI1M2UzM2M1MWI0ODViOTA1ZTI5NCBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKIEZyb206IFRhbnUgS2Fza2luZW4gPHRhbnVrQGlraS5maT4KIERhdGU6IEZyaSwgMjMgT2N0IDIwMTUgMTI6NTk6NTMgKzAzMDAKLVN1YmplY3Q6IFtQQVRDSCAzLzRdIGNhcmQ6IG1vdmUgcHJvZmlsZSBzZWxlY3Rpb24gYWZ0ZXIgcGFfY2FyZF9uZXcoKQorU3ViamVjdDogW1BBVENIIDMvNV0gY2FyZDogbW92ZSBwcm9maWxlIHNlbGVjdGlvbiBhZnRlciBwYV9jYXJkX25ldygpCiAKIEkgd2FudCBtb2R1bGUtYWxzYS1jYXJkIHRvIHNldCB0aGUgYXZhaWxhYmlsaXR5IG9mIHVuYXZhaWxhYmxlCiBwcm9maWxlcyBiZWZvcmUgdGhlIGluaXRpYWwgY2FyZCBwcm9maWxlIGdldHMgc2VsZWN0ZWQsIHNvIHRoYXQgdGhlCiBzZWxlY3Rpb24gbG9naWMgY2FuIHVzZSBjb3JyZWN0IGF2YWlsYWJpbGl0eSBpbmZvcm1hdGlvbi4KIG1vZHVsZS1hbHNhLWNhcmQgaW5pdGlhbGl6ZXMgdGhlIGphY2sgc3RhdGUgYWZ0ZXIgY2FsbGluZwogcGFfY2FyZF9uZXcoKSwgaG93ZXZlciwgYW5kIHRoZSBwcm9maWxlIHNlbGVjdGlvbiBoYXBwZW5zIGluCi1wYV9jYXJkX25ldygpLiBUaGlzIHBhdGNoIHNvbHZlcyB0aGF0IGJ5IGludHJvZHVjaW5nIHBhX2NhcmRfcHV0KCkgYW5kCi1tb3ZpbmcgdGhlIHByb2ZpbGUgc2VsZWN0aW9uIGNvZGUgdGhlcmUuCitwYV9jYXJkX25ldygpLiBUaGlzIHBhdGNoIHNvbHZlcyB0aGF0IGJ5IG1vdmluZyBwYXJ0cyBvZiBwYV9jYXJkX25ldygpCit0byBwYV9jYXJkX2Nob29zZV9pbml0aWFsX3Byb2ZpbGUoKSBhbmQgcGFfY2FyZF9wdXQoKS4KKworcGFfY2FyZF9jaG9vc2VfaW5pdGlhbF9wcm9maWxlKCkgYXBwbGllcyB0aGUgcHJvZmlsZSBzZWxlY3Rpb24gcG9saWN5LAorc28gbW9kdWxlLWFsc2EtY2FyZCBjYW4gZmlyc3QgY2FsbCBwYV9jYXJkX25ldygpLCB0aGVuIGluaXRpYWxpemUgdGhlCitqYWNrIHN0YXRlLCBhbmQgdGhlbiBjYWxsIHBhX2NhcmRfY2hvb3NlX2luaXRpYWxfcHJvZmlsZSgpLiBBZnRlciB0aGF0Cittb2R1bGUtYWxzYS1jYXJkIGNhbiBzdGlsbCBvdmVycmlkZSB0aGUgcHJvZmlsZSBzZWxlY3Rpb24gcG9saWN5LCBpbgorY2FzZSBtb2R1bGUtYWxzYS1jYXJkIHdhcyBsb2FkZWQgd2l0aCB0aGUgInByb2ZpbGUiIGFyZ3VtZW50LiBGaW5hbGx5LAorcGFfY2FyZF9wdXQoKSBmaW5hbGl6ZXMgdGhlIGNhcmQgY3JlYXRpb24uCiAKIEFuIGFsdGVybmF0aXZlIHNvbHV0aW9uIHdvdWxkIGhhdmUgYmVlbiB0byBtb3ZlIHRoZSBqYWNrCiBpbml0aWFsaXphdGlvbiB0byBoYXBwZW4gYmVmb3JlIHBhX2NhcmRfbmV3KCkgYW5kIHVzZSBwYV9jYXJkX25ld19kYXRhCiBpbnN0ZWFkIG9mIHBhX2NhcmQgaW4gdGhlIGphY2sgaW5pdGlhbGl6YXRpb24gY29kZSwgYnV0IEkgZGlzbGlrZWQKIHRoYXQgaWRlYSAoSSB3YW50IHRvIGdldCByaWQgb2YgdGhlICJuZXcgZGF0YSIgcGF0dGVybiBldmVudHVhbGx5KS4KIAotVGhlIENBUkRfTkVXIGhvb2sgaXMgdXNlZCB3aGVuIGFwcGx5aW5nIHRoZSBpbml0aWFsIHByb2ZpbGUgcG9saWN5LCBzbwotdGhhdCB3YXMgbW92ZWQgdG8gcGFfY2FyZF9wdXQoKS4gVGhhdCByZXF1aXJlZCBjaGFuZ2luZyB0aGUgaG9vayBkYXRhCi1mcm9tIHBhX2NhcmRfbmV3X2RhdGEgdG8gcGFfY2FyZC4gbW9kdWxlLWNhcmQtcmVzdG9yZSBub3cgdXNlcwotcGFfY2FyZF9zZXRfcHJvZmlsZSgpIGluc3RlYWQgb2YgcGFfY2FyZF9uZXdfZGF0YV9zZXRfcHJvZmlsZSgpLiBUaGF0Ci1yZXF1aXJlZCBhZGRpbmcgYSBzdGF0ZSB2YXJpYWJsZSB0byBwYV9jYXJkLCBiZWNhdXNlCi1wYV9jYXJkX3NldF9wcm9maWxlKCkgbmVlZHMgdG8gZGlzdGluZ3Vpc2ggYmV0d2VlbiBzZXR0aW5nIHRoZSBpbml0aWFsCi1wcm9maWxlIGFuZCBzZXR0aW5nIHRoZSBwcm9maWxlIGluIG90aGVyIHNpdHVhdGlvbnMuCi0KIFRoZSBvcmRlciBpbiB3aGljaCB0aGUgaW5pdGlhbCBwcm9maWxlIHBvbGljeSBpcyBhcHBsaWVkIGlzIHJldmVyc2VkCiBpbiB0aGlzIHBhdGNoLiBQcmV2aW91c2x5IHRoZSBmaXJzdCBvbmUgdG8gc2V0IGl0IHdvbiwgbm93IHRoZSBsYXN0CiBvbmUgdG8gc2V0IGl0IHdpbnMuIEkgdGhpbmsgdGhpcyBpcyBiZXR0ZXIsIGJlY2F1c2UgaWYgeW91IGhhdmUgTgogcGFydGllcyB0aGF0IHdhbnQgdG8gc2V0IHRoZSBwcm9maWxlLCB3ZSBhdm9pZCBjaGVja2luZyBOIHRpbWVzCiB3aGV0aGVyIHNvbWVvbmUgZWxzZSBoYXMgYWxyZWFkeSBzZXQgdGhlIHByb2ZpbGUuCiAKLWh0dHA6Ly9idWd6aWxsYS55b2N0b3Byb2plY3Qub3JnL3Nob3dfYnVnLmNnaT9pZD04NDQ4Ci0KLVNpZ25lZC1vZmYtYnk6IEp1c3NpIEt1a2tvbmVuIDxqdXNzaS5rdWtrb25lbkBpbnRlbC5jb20+Ci0KLVJlYmFzZWQgb24gOC4wLgotCi1VcHN0cmVhbS1TdGF0dXM6IERlbmllZCBbVGhlIHBhdGNoIHNldCBuZWVkcyBzb21lIHdvcmsgdG8gYmUgYWNjZXB0ZWQuCi1UaGUgcmV2aWV3IHRocmVhZDoKLWh0dHA6Ly90aHJlYWQuZ21hbmUub3JnL2dtYW5lLmNvbXAuYXVkaW8ucHVsc2VhdWRpby5nZW5lcmFsLzI0MzAxXQorVXBzdHJlYW0tU3RhdHVzOiBBY2NlcHRlZCBbZXhwZWN0ZWQgaW4gMTAuMF0KIAogU2lnbmVkLW9mZi1ieTogVGFudSBLYXNraW5lbiA8dGFudWtAaWtpLmZpPgogLS0tCi0gc3JjL21vZHVsZXMvYWxzYS9tb2R1bGUtYWxzYS1jYXJkLmMgICAgICAgICAgfCAxOSArKystLS0tCi0gc3JjL21vZHVsZXMvYmx1ZXRvb3RoL21vZHVsZS1ibHVlejQtZGV2aWNlLmMgfCAxOCArKystLS0tCi0gc3JjL21vZHVsZXMvYmx1ZXRvb3RoL21vZHVsZS1ibHVlejUtZGV2aWNlLmMgfCAgMSArCi0gc3JjL21vZHVsZXMvbWFjb3N4L21vZHVsZS1jb3JlYXVkaW8tZGV2aWNlLmMgfCAgMSArCi0gc3JjL21vZHVsZXMvbW9kdWxlLWNhcmQtcmVzdG9yZS5jICAgICAgICAgICAgfCAyNCArKysrKy0tLS0KLSBzcmMvcHVsc2Vjb3JlL2NhcmQuYyAgICAgICAgICAgICAgICAgICAgICAgICB8IDgxICsrKysrKysrKysrKysrKy0tLS0tLS0tLS0tLS0KLSBzcmMvcHVsc2Vjb3JlL2NhcmQuaCAgICAgICAgICAgICAgICAgICAgICAgICB8ICA3ICsrKwotIDcgZmlsZXMgY2hhbmdlZCwgODYgaW5zZXJ0aW9ucygrKSwgNjUgZGVsZXRpb25zKC0pCisgc3JjL21vZHVsZXMvYWxzYS9tb2R1bGUtYWxzYS1jYXJkLmMgICAgICAgICAgfCAzMiArKysrKy0tLS0KKyBzcmMvbW9kdWxlcy9ibHVldG9vdGgvbW9kdWxlLWJsdWV6NC1kZXZpY2UuYyB8IDMxICsrKysrLS0tLQorIHNyYy9tb2R1bGVzL2JsdWV0b290aC9tb2R1bGUtYmx1ZXo1LWRldmljZS5jIHwgIDIgKworIHNyYy9tb2R1bGVzL21hY29zeC9tb2R1bGUtY29yZWF1ZGlvLWRldmljZS5jIHwgIDIgKworIHNyYy9tb2R1bGVzL21vZHVsZS1jYXJkLXJlc3RvcmUuYyAgICAgICAgICAgIHwgMzYgKysrKysrKy0tLQorIHNyYy9wdWxzZWNvcmUvY2FyZC5jICAgICAgICAgICAgICAgICAgICAgICAgIHwgOTkgKysrKysrKysrKysrKysrKystLS0tLS0tLS0tLQorIHNyYy9wdWxzZWNvcmUvY2FyZC5oICAgICAgICAgICAgICAgICAgICAgICAgIHwgIDkgKysrCisgc3JjL3B1bHNlY29yZS9jb3JlLmggICAgICAgICAgICAgICAgICAgICAgICAgfCAgMSArCisgOCBmaWxlcyBjaGFuZ2VkLCAxNDMgaW5zZXJ0aW9ucygrKSwgNjkgZGVsZXRpb25zKC0pCiAKIGRpZmYgLS1naXQgYS9zcmMvbW9kdWxlcy9hbHNhL21vZHVsZS1hbHNhLWNhcmQuYyBiL3NyYy9tb2R1bGVzL2Fsc2EvbW9kdWxlLWFsc2EtY2FyZC5jCi1pbmRleCA5ZThjZGUyLi5mZTI0MGYwIDEwMDY0NAoraW5kZXggZDc2MTY4My4uMTk3NjIzMCAxMDA2NDQKIC0tLSBhL3NyYy9tb2R1bGVzL2Fsc2EvbW9kdWxlLWFsc2EtY2FyZC5jCiArKysgYi9zcmMvbW9kdWxlcy9hbHNhL21vZHVsZS1hbHNhLWNhcmQuYwotQEAgLTc3MCwxNSArNzcwLDYgQEAgaW50IHBhX19pbml0KHBhX21vZHVsZSAqbSkgeworQEAgLTY3MSw3ICs2NzEsNyBAQCBpbnQgcGFfX2luaXQocGFfbW9kdWxlICptKSB7CisgICAgIHN0cnVjdCB1c2VyZGF0YSAqdTsKKyAgICAgcGFfcmVzZXJ2ZV93cmFwcGVyICpyZXNlcnZlID0gTlVMTDsKKyAgICAgY29uc3QgY2hhciAqZGVzY3JpcHRpb247CistICAgIGNvbnN0IGNoYXIgKnByb2ZpbGUgPSBOVUxMOworKyAgICBjb25zdCBjaGFyICpwcm9maWxlX3N0ciA9IE5VTEw7CisgICAgIGNoYXIgKmZuID0gTlVMTDsKKyAgICAgYm9vbCBuYW1lcmVnX2ZhaWwgPSBmYWxzZTsKKyAKK0BAIC03OTksMTYgKzc5OSw2IEBAIGludCBwYV9faW5pdChwYV9tb2R1bGUgKm0pIHsKICAgICAgICAgIGdvdG8gZmFpbDsKICAgICAgfQogIApAQCAtNjQsNiArNjUsNyBAQAogLSAgICAgICAgICAgIHBhX2NhcmRfbmV3X2RhdGFfc2V0X3Byb2ZpbGUoJmRhdGEsIHByb2ZpbGUpOwogLSAgICAgICAgZWxzZSB7CiAtICAgICAgICAgICAgcGFfbG9nKCJObyBzdWNoIHByb2ZpbGU6ICVzIiwgcHJvZmlsZSk7CistICAgICAgICAgICAgcGFfY2FyZF9uZXdfZGF0YV9kb25lKCZkYXRhKTsKIC0gICAgICAgICAgICBnb3RvIGZhaWw7CiAtICAgICAgICB9CiAtICAgIH0KQEAgLTcxLDI4ICs3Myw0NyBAQAogICAgICB1LT5jYXJkID0gcGFfY2FyZF9uZXcobS0+Y29yZSwgJmRhdGEpOwogICAgICBwYV9jYXJkX25ld19kYXRhX2RvbmUoJmRhdGEpOwogIAotQEAgLTc4OSw2ICs3ODAsMTYgQEAgaW50IHBhX19pbml0KHBhX21vZHVsZSAqbSkgewotICAgICB1LT5jYXJkLT5zZXRfcHJvZmlsZSA9IGNhcmRfc2V0X3Byb2ZpbGU7CitAQCAtODIyLDYgKzgxMiwyNiBAQCBpbnQgcGFfX2luaXQocGFfbW9kdWxlICptKSB7CisgICAgICAgICAgICAgKHBhX2hvb2tfY2JfdCkgY2FyZF9zdXNwZW5kX2NoYW5nZWQsIHUpOwogIAogICAgICBpbml0X2phY2tzKHUpOwotKyAgICBwYV9jYXJkX3B1dCh1LT5jYXJkKTsKICsKLSsgICAgaWYgKChwcm9maWxlID0gcGFfbW9kYXJnc19nZXRfdmFsdWUodS0+bW9kYXJncywgInByb2ZpbGUiLCBOVUxMKSkpIHsKLSsgICAgICAgIHUtPmNhcmQtPmFjdGl2ZV9wcm9maWxlID0gcGFfaGFzaG1hcF9nZXQodS0+Y2FyZC0+cHJvZmlsZXMsIHByb2ZpbGUpOwotKyAgICAgICAgaWYgKCF1LT5jYXJkLT5hY3RpdmVfcHJvZmlsZSkgewotKyAgICAgICAgICAgIHBhX2xvZygiTm8gc3VjaCBwcm9maWxlOiAlcyIsIHByb2ZpbGUpOworKyAgICBwYV9jYXJkX2Nob29zZV9pbml0aWFsX3Byb2ZpbGUodS0+Y2FyZCk7CisrCisrICAgIC8qIElmIHRoZSAicHJvZmlsZSIgbW9kYXJnIGlzIGdpdmVuLCB3ZSBoYXZlIHRvIG92ZXJyaWRlIHdoYXRldmVyIHRoZSB1c3VhbAorKyAgICAgKiBwb2xpY3kgY2hvc2UgaW4gcGFfY2FyZF9jaG9vc2VfaW5pdGlhbF9wcm9maWxlKCkuICovCisrICAgIHByb2ZpbGVfc3RyID0gcGFfbW9kYXJnc19nZXRfdmFsdWUodS0+bW9kYXJncywgInByb2ZpbGUiLCBOVUxMKTsKKysgICAgaWYgKHByb2ZpbGVfc3RyKSB7CisrICAgICAgICBwYV9jYXJkX3Byb2ZpbGUgKnByb2ZpbGU7CisrCisrICAgICAgICBwcm9maWxlID0gcGFfaGFzaG1hcF9nZXQodS0+Y2FyZC0+cHJvZmlsZXMsIHByb2ZpbGVfc3RyKTsKKysgICAgICAgIGlmICghcHJvZmlsZSkgeworKyAgICAgICAgICAgIHBhX2xvZygiTm8gc3VjaCBwcm9maWxlOiAlcyIsIHByb2ZpbGVfc3RyKTsKICsgICAgICAgICAgICBnb3RvIGZhaWw7CiArICAgICAgICB9CisrCisrICAgICAgICBwYV9jYXJkX3NldF9wcm9maWxlKHUtPmNhcmQsIHByb2ZpbGUsIGZhbHNlKTsKICsgICAgfQogKworKyAgICBwYV9jYXJkX3B1dCh1LT5jYXJkKTsKKysKICAgICAgaW5pdF9wcm9maWxlKHUpOwogICAgICBpbml0X2VsZF9jdGxzKHUpOwogIAogZGlmZiAtLWdpdCBhL3NyYy9tb2R1bGVzL2JsdWV0b290aC9tb2R1bGUtYmx1ZXo0LWRldmljZS5jIGIvc3JjL21vZHVsZXMvYmx1ZXRvb3RoL21vZHVsZS1ibHVlejQtZGV2aWNlLmMKLWluZGV4IGRkMTgyMTcuLjVkMGQzZGIgMTAwNjQ0CitpbmRleCBhMmRlNTI1Li4xM2ZiN2FiIDEwMDY0NAogLS0tIGEvc3JjL21vZHVsZXMvYmx1ZXRvb3RoL21vZHVsZS1ibHVlejQtZGV2aWNlLmMKICsrKyBiL3NyYy9tb2R1bGVzL2JsdWV0b290aC9tb2R1bGUtYmx1ZXo0LWRldmljZS5jCi1AQCAtMjMwNCwxNSArMjMwNCw2IEBAIHN0YXRpYyBpbnQgYWRkX2NhcmQoc3RydWN0IHVzZXJkYXRhICp1KSB7CitAQCAtMjIzOCw3ICsyMjM4LDcgQEAgc3RhdGljIGludCBhZGRfY2FyZChzdHJ1Y3QgdXNlcmRhdGEgKnUpIHsKKyAgICAgcGFfYmx1ZXo0X3Byb2ZpbGVfdCAqZDsKKyAgICAgcGFfYmx1ZXo0X2Zvcm1fZmFjdG9yX3QgZmY7CisgICAgIGNoYXIgKm47CistICAgIGNvbnN0IGNoYXIgKmRlZmF1bHRfcHJvZmlsZTsKKysgICAgY29uc3QgY2hhciAqcHJvZmlsZV9zdHI7CisgICAgIGNvbnN0IHBhX2JsdWV6NF9kZXZpY2UgKmRldmljZTsKKyAgICAgY29uc3QgcGFfYmx1ZXo0X3V1aWQgKnV1aWQ7CisgCitAQCAtMjI5OCwxNiArMjI5OCw2IEBAIHN0YXRpYyBpbnQgYWRkX2NhcmQoc3RydWN0IHVzZXJkYXRhICp1KSB7CiAgICAgICpkID0gUEFfQkxVRVo0X1BST0ZJTEVfT0ZGOwogICAgICBwYV9oYXNobWFwX3B1dChkYXRhLnByb2ZpbGVzLCBwLT5uYW1lLCBwKTsKICAKQEAgLTEwMSw2ICsxMjIsNyBAQAogLSAgICAgICAgICAgIHBhX2NhcmRfbmV3X2RhdGFfc2V0X3Byb2ZpbGUoJmRhdGEsIGRlZmF1bHRfcHJvZmlsZSk7CiAtICAgICAgICBlbHNlIHsKIC0gICAgICAgICAgICBwYV9sb2coIlByb2ZpbGUgJyVzJyBub3QgdmFsaWQgb3Igbm90IHN1cHBvcnRlZCBieSBkZXZpY2UuIiwgZGVmYXVsdF9wcm9maWxlKTsKKy0gICAgICAgICAgICBwYV9jYXJkX25ld19kYXRhX2RvbmUoJmRhdGEpOwogLSAgICAgICAgICAgIHJldHVybiAtMTsKIC0gICAgICAgIH0KIC0gICAgfQpAQCAtMTA4LDEyNyArMTMwLDEyNiBAQAogICAgICB1LT5jYXJkID0gcGFfY2FyZF9uZXcodS0+Y29yZSwgJmRhdGEpOwogICAgICBwYV9jYXJkX25ld19kYXRhX2RvbmUoJmRhdGEpOwogIAotQEAgLTIzMjMsNiArMjMxNCwxNSBAQCBzdGF0aWMgaW50IGFkZF9jYXJkKHN0cnVjdCB1c2VyZGF0YSAqdSkgewotIAorQEAgLTIzMTksNiArMjMwOSwyNSBAQCBzdGF0aWMgaW50IGFkZF9jYXJkKHN0cnVjdCB1c2VyZGF0YSAqdSkgewogICAgICB1LT5jYXJkLT51c2VyZGF0YSA9IHU7CiAgICAgIHUtPmNhcmQtPnNldF9wcm9maWxlID0gY2FyZF9zZXRfcHJvZmlsZTsKLSsgICAgcGFfY2FyZF9wdXQodS0+Y2FyZCk7CisgCisrICAgIHBhX2NhcmRfY2hvb3NlX2luaXRpYWxfcHJvZmlsZSh1LT5jYXJkKTsKICsKLSsgICAgaWYgKChkZWZhdWx0X3Byb2ZpbGUgPSBwYV9tb2RhcmdzX2dldF92YWx1ZSh1LT5tb2RhcmdzLCAicHJvZmlsZSIsIE5VTEwpKSkgewotKyAgICAgICAgdS0+Y2FyZC0+YWN0aXZlX3Byb2ZpbGUgPSBwYV9oYXNobWFwX2dldCh1LT5jYXJkLT5wcm9maWxlcywgZGVmYXVsdF9wcm9maWxlKTsKLSsgICAgICAgIGlmICghdS0+Y2FyZC0+YWN0aXZlX3Byb2ZpbGUpIHsKLSsgICAgICAgICAgICBwYV9sb2coIlByb2ZpbGUgJyVzJyBub3QgdmFsaWQgb3Igbm90IHN1cHBvcnRlZCBieSBkZXZpY2UuIiwgZGVmYXVsdF9wcm9maWxlKTsKKysgICAgLyogSWYgdGhlICJwcm9maWxlIiBtb2RhcmcgaXMgZ2l2ZW4sIHdlIGhhdmUgdG8gb3ZlcnJpZGUgd2hhdGV2ZXIgdGhlIHVzdWFsCisrICAgICAqIHBvbGljeSBjaG9zZSBpbiBwYV9jYXJkX2Nob29zZV9pbml0aWFsX3Byb2ZpbGUoKS4gKi8KKysgICAgcHJvZmlsZV9zdHIgPSBwYV9tb2RhcmdzX2dldF92YWx1ZSh1LT5tb2RhcmdzLCAicHJvZmlsZSIsIE5VTEwpOworKyAgICBpZiAocHJvZmlsZV9zdHIpIHsKKysgICAgICAgIHBhX2NhcmRfcHJvZmlsZSAqcHJvZmlsZTsKKysKKysgICAgICAgIHByb2ZpbGUgPSBwYV9oYXNobWFwX2dldCh1LT5jYXJkLT5wcm9maWxlcywgcHJvZmlsZV9zdHIpOworKyAgICAgICAgaWYgKCFwcm9maWxlKSB7CisrICAgICAgICAgICAgcGFfbG9nKCJObyBzdWNoIHByb2ZpbGU6ICVzIiwgcHJvZmlsZV9zdHIpOwogKyAgICAgICAgICAgIHJldHVybiAtMTsKICsgICAgICAgIH0KKysKKysgICAgICAgIHBhX2NhcmRfc2V0X3Byb2ZpbGUodS0+Y2FyZCwgcHJvZmlsZSwgZmFsc2UpOwogKyAgICB9Ci0gCisrCisrICAgIHBhX2NhcmRfcHV0KHUtPmNhcmQpOworKwogICAgICBkID0gUEFfQ0FSRF9QUk9GSUxFX0RBVEEodS0+Y2FyZC0+YWN0aXZlX3Byb2ZpbGUpOwogIAorICAgICBpZiAoKmQgIT0gUEFfQkxVRVo0X1BST0ZJTEVfT0ZGICYmICghZGV2aWNlLT50cmFuc3BvcnRzWypkXSB8fAogZGlmZiAtLWdpdCBhL3NyYy9tb2R1bGVzL2JsdWV0b290aC9tb2R1bGUtYmx1ZXo1LWRldmljZS5jIGIvc3JjL21vZHVsZXMvYmx1ZXRvb3RoL21vZHVsZS1ibHVlejUtZGV2aWNlLmMKLWluZGV4IGIwMTVjNjcuLjdiOTBhMzEgMTAwNjQ0CitpbmRleCA4NGU2ZDU1Li40OThkMGUxIDEwMDY0NAogLS0tIGEvc3JjL21vZHVsZXMvYmx1ZXRvb3RoL21vZHVsZS1ibHVlejUtZGV2aWNlLmMKICsrKyBiL3NyYy9tb2R1bGVzL2JsdWV0b290aC9tb2R1bGUtYmx1ZXo1LWRldmljZS5jCi1AQCAtMTk1OSw2ICsxOTU5LDcgQEAgc3RhdGljIGludCBhZGRfY2FyZChzdHJ1Y3QgdXNlcmRhdGEgKnUpIHsKK0BAIC0xOTUzLDYgKzE5NTMsOCBAQCBzdGF0aWMgaW50IGFkZF9jYXJkKHN0cnVjdCB1c2VyZGF0YSAqdSkgewogIAogICAgICB1LT5jYXJkLT51c2VyZGF0YSA9IHU7CiAgICAgIHUtPmNhcmQtPnNldF9wcm9maWxlID0gc2V0X3Byb2ZpbGVfY2I7CisrICAgIHBhX2NhcmRfY2hvb3NlX2luaXRpYWxfcHJvZmlsZSh1LT5jYXJkKTsKICsgICAgcGFfY2FyZF9wdXQodS0+Y2FyZCk7CiAgCiAgICAgIHAgPSBQQV9DQVJEX1BST0ZJTEVfREFUQSh1LT5jYXJkLT5hY3RpdmVfcHJvZmlsZSk7CiAgICAgIHUtPnByb2ZpbGUgPSAqcDsKIGRpZmYgLS1naXQgYS9zcmMvbW9kdWxlcy9tYWNvc3gvbW9kdWxlLWNvcmVhdWRpby1kZXZpY2UuYyBiL3NyYy9tb2R1bGVzL21hY29zeC9tb2R1bGUtY29yZWF1ZGlvLWRldmljZS5jCi1pbmRleCAwYzkyZDQyLi43MTkwZWU5IDEwMDY0NAoraW5kZXggNmM5ZTU1ZC4uZDkxYzY1NiAxMDA2NDQKIC0tLSBhL3NyYy9tb2R1bGVzL21hY29zeC9tb2R1bGUtY29yZWF1ZGlvLWRldmljZS5jCiArKysgYi9zcmMvbW9kdWxlcy9tYWNvc3gvbW9kdWxlLWNvcmVhdWRpby1kZXZpY2UuYwotQEAgLTgwNyw2ICs4MDcsNyBAQCBpbnQgcGFfX2luaXQocGFfbW9kdWxlICptKSB7CitAQCAtODIxLDYgKzgyMSw4IEBAIGludCBwYV9faW5pdChwYV9tb2R1bGUgKm0pIHsKICAgICAgcGFfY2FyZF9uZXdfZGF0YV9kb25lKCZjYXJkX25ld19kYXRhKTsKICAgICAgdS0+Y2FyZC0+dXNlcmRhdGEgPSB1OwogICAgICB1LT5jYXJkLT5zZXRfcHJvZmlsZSA9IGNhcmRfc2V0X3Byb2ZpbGU7CisrICAgIHBhX2NhcmRfY2hvb3NlX2luaXRpYWxfcHJvZmlsZSh1LT5jYXJkKTsKICsgICAgcGFfY2FyZF9wdXQodS0+Y2FyZCk7CiAgCiAgICAgIHUtPnJ0cG9sbCA9IHBhX3J0cG9sbF9uZXcoKTsKICAgICAgcGFfdGhyZWFkX21xX2luaXQoJnUtPnRocmVhZF9tcSwgbS0+Y29yZS0+bWFpbmxvb3AsIHUtPnJ0cG9sbCk7CiBkaWZmIC0tZ2l0IGEvc3JjL21vZHVsZXMvbW9kdWxlLWNhcmQtcmVzdG9yZS5jIGIvc3JjL21vZHVsZXMvbW9kdWxlLWNhcmQtcmVzdG9yZS5jCi1pbmRleCBmOTA2ODQzLi5kY2U2Njc0IDEwMDY0NAoraW5kZXggNzU0NWFhNS4uNzE4YTBkZCAxMDA2NDQKIC0tLSBhL3NyYy9tb2R1bGVzL21vZHVsZS1jYXJkLXJlc3RvcmUuYwogKysrIGIvc3JjL21vZHVsZXMvbW9kdWxlLWNhcmQtcmVzdG9yZS5jCi1AQCAtNTE1LDM0ICs1MTUsMzggQEAgc3RhdGljIHBhX2hvb2tfcmVzdWx0X3QgcG9ydF9vZmZzZXRfY2hhbmdlX2NhbGxiYWNrKHBhX2NvcmUgKmMsIHBhX2RldmljZV9wb3J0ICoKLSAgICAgcmV0dXJuIFBBX0hPT0tfT0s7Ci0gfQotIAotLXN0YXRpYyBwYV9ob29rX3Jlc3VsdF90IGNhcmRfbmV3X2hvb2tfY2FsbGJhY2socGFfY29yZSAqYywgcGFfY2FyZF9uZXdfZGF0YSAqbmV3X2RhdGEsIHN0cnVjdCB1c2VyZGF0YSAqdSkgewotK3N0YXRpYyBwYV9ob29rX3Jlc3VsdF90IGNhcmRfbmV3X2hvb2tfY2FsbGJhY2socGFfY29yZSAqYywgcGFfY2FyZCAqY2FyZCwgc3RydWN0IHVzZXJkYXRhICp1KSB7Ci0gICAgIHN0cnVjdCBlbnRyeSAqZTsKLSAgICAgdm9pZCAqc3RhdGU7Ci0gICAgIHBhX2RldmljZV9wb3J0ICpwOwotICAgICBzdHJ1Y3QgcG9ydF9pbmZvICpwX2luZm87Ci0gCi0tICAgIHBhX2Fzc2VydChuZXdfZGF0YSk7Ci0rICAgIHBhX2Fzc2VydChjKTsKLSsgICAgcGFfYXNzZXJ0KGNhcmQpOwotKyAgICBwYV9hc3NlcnQodSk7Ci0gCi0tICAgIGlmICghKGUgPSBlbnRyeV9yZWFkKHUsIG5ld19kYXRhLT5uYW1lKSkpCi0rICAgIGlmICghKGUgPSBlbnRyeV9yZWFkKHUsIGNhcmQtPm5hbWUpKSkKK0BAIC01NTEsMTYgKzU1MSw2IEBAIHN0YXRpYyBwYV9ob29rX3Jlc3VsdF90IGNhcmRfbmV3X2hvb2tfY2FsbGJhY2socGFfY29yZSAqYywgcGFfY2FyZF9uZXdfZGF0YSAqbmV3CisgICAgIGlmICghKGUgPSBlbnRyeV9yZWFkKHUsIG5ld19kYXRhLT5uYW1lKSkpCiAgICAgICAgICByZXR1cm4gUEFfSE9PS19PSzsKICAKLSAgICAgaWYgKGUtPnByb2ZpbGVbMF0pIHsKKy0gICAgaWYgKGUtPnByb2ZpbGVbMF0pIHsKIC0gICAgICAgIGlmICghbmV3X2RhdGEtPmFjdGl2ZV9wcm9maWxlKSB7CiAtICAgICAgICAgICAgcGFfY2FyZF9uZXdfZGF0YV9zZXRfcHJvZmlsZShuZXdfZGF0YSwgZS0+cHJvZmlsZSk7CiAtICAgICAgICAgICAgcGFfbG9nX2luZm8oIlJlc3RvcmVkIHByb2ZpbGUgJyVzJyBmb3IgY2FyZCAlcy4iLCBuZXdfZGF0YS0+YWN0aXZlX3Byb2ZpbGUsIG5ld19kYXRhLT5uYW1lKTsKIC0gICAgICAgICAgICBuZXdfZGF0YS0+c2F2ZV9wcm9maWxlID0gdHJ1ZTsKLSsgICAgICAgIHBhX2NhcmRfcHJvZmlsZSAqcHJvZmlsZTsKLSAKLSsgICAgICAgIHByb2ZpbGUgPSBwYV9oYXNobWFwX2dldChjYXJkLT5wcm9maWxlcywgZS0+cHJvZmlsZSk7Ci0rICAgICAgICBpZiAocHJvZmlsZSkgewotKyAgICAgICAgICAgIHBhX2NhcmRfc2V0X3Byb2ZpbGUoY2FyZCwgcHJvZmlsZSwgdHJ1ZSk7Ci0rICAgICAgICAgICAgcGFfbG9nX2luZm8oIlJlc3RvcmVkIHByb2ZpbGUgJyVzJyBmb3IgY2FyZCAlcy4iLCBjYXJkLT5hY3RpdmVfcHJvZmlsZS0+bmFtZSwgY2FyZC0+bmFtZSk7Ci0gICAgICAgICB9IGVsc2UKKy0KKy0gICAgICAgIH0gZWxzZQogLSAgICAgICAgICAgIHBhX2xvZ19kZWJ1ZygiTm90IHJlc3RvcmluZyBwcm9maWxlIGZvciBjYXJkICVzLCBiZWNhdXNlIGFscmVhZHkgc2V0LiIsIG5ld19kYXRhLT5uYW1lKTsKLSsgICAgICAgICAgICBwYV9sb2dfZGVidWcoIlRyaWVkIHRvIHJlc3RvcmUgcHJvZmlsZSAlcyBmb3IgY2FyZCAlcywgYnV0IHRoZSBjYXJkIGRvZXNuJ3QgaGF2ZSBzdWNoIHByb2ZpbGUuIiwKLSsgICAgICAgICAgICAgICAgICAgICAgICAgZS0+cHJvZmlsZSwgY2FyZC0+bmFtZSk7Ci0gICAgIH0KLSAKKy0gICAgfQorLQogICAgICAvKiBBbHdheXMgcmVzdG9yZSB0aGUgbGF0ZW5jeSBvZmZzZXRzIGJlY2F1c2UgdGhlaXIKICAgICAgICogaW5pdGlhbCB2YWx1ZSBpcyBhbHdheXMgMCAqLwogIAotLSAgICBwYV9sb2dfaW5mbygiUmVzdG9yaW5nIHBvcnQgbGF0ZW5jeSBvZmZzZXRzIGZvciBjYXJkICVzLiIsIG5ld19kYXRhLT5uYW1lKTsKLSsgICAgcGFfbG9nX2luZm8oIlJlc3RvcmluZyBwb3J0IGxhdGVuY3kgb2Zmc2V0cyBmb3IgY2FyZCAlcy4iLCBjYXJkLT5uYW1lKTsKK0BAIC01OTAsNiArNTgwLDMwIEBAIHN0YXRpYyBwYV9ob29rX3Jlc3VsdF90IGNhcmRfbmV3X2hvb2tfY2FsbGJhY2socGFfY29yZSAqYywgcGFfY2FyZF9uZXdfZGF0YSAqbmV3CisgICAgIHJldHVybiBQQV9IT09LX09LOworIH0KICAKLSAgICAgUEFfSEFTSE1BUF9GT1JFQUNIKHBfaW5mbywgZS0+cG9ydHMsIHN0YXRlKQotLSAgICAgICAgaWYgKChwID0gcGFfaGFzaG1hcF9nZXQobmV3X2RhdGEtPnBvcnRzLCBwX2luZm8tPm5hbWUpKSkgewotKyAgICAgICAgaWYgKChwID0gcGFfaGFzaG1hcF9nZXQoY2FyZC0+cG9ydHMsIHBfaW5mby0+bmFtZSkpKSB7Ci0gICAgICAgICAgICAgcC0+bGF0ZW5jeV9vZmZzZXQgPSBwX2luZm8tPm9mZnNldDsKLSAgICAgICAgICAgICBpZiAoIXAtPnByZWZlcnJlZF9wcm9maWxlICYmIHBfaW5mby0+cHJvZmlsZSkKLSAgICAgICAgICAgICAgICAgcGFfZGV2aWNlX3BvcnRfc2V0X3ByZWZlcnJlZF9wcm9maWxlKHAsIHBfaW5mby0+cHJvZmlsZSk7Cisrc3RhdGljIHBhX2hvb2tfcmVzdWx0X3QgY2FyZF9jaG9vc2VfaW5pdGlhbF9wcm9maWxlX2NhbGxiYWNrKHBhX2NvcmUgKmNvcmUsIHBhX2NhcmQgKmNhcmQsIHN0cnVjdCB1c2VyZGF0YSAqdSkgeworKyAgICBzdHJ1Y3QgZW50cnkgKmU7CisrCisrICAgIGlmICghKGUgPSBlbnRyeV9yZWFkKHUsIGNhcmQtPm5hbWUpKSkKKysgICAgICAgIHJldHVybiBQQV9IT09LX09LOworKworKyAgICBpZiAoZS0+cHJvZmlsZVswXSkgeworKyAgICAgICAgcGFfY2FyZF9wcm9maWxlICpwcm9maWxlOworKworKyAgICAgICAgcHJvZmlsZSA9IHBhX2hhc2htYXBfZ2V0KGNhcmQtPnByb2ZpbGVzLCBlLT5wcm9maWxlKTsKKysgICAgICAgIGlmIChwcm9maWxlKSB7CisrICAgICAgICAgICAgcGFfbG9nX2luZm8oIlJlc3RvcmluZyBwcm9maWxlICclcycgZm9yIGNhcmQgJXMuIiwgY2FyZC0+YWN0aXZlX3Byb2ZpbGUtPm5hbWUsIGNhcmQtPm5hbWUpOworKyAgICAgICAgICAgIHBhX2NhcmRfc2V0X3Byb2ZpbGUoY2FyZCwgcHJvZmlsZSwgdHJ1ZSk7CisrICAgICAgICB9IGVsc2UgeworKyAgICAgICAgICAgIHBhX2xvZ19kZWJ1ZygiVHJpZWQgdG8gcmVzdG9yZSBwcm9maWxlICVzIGZvciBjYXJkICVzLCBidXQgdGhlIGNhcmQgZG9lc24ndCBoYXZlIHN1Y2ggcHJvZmlsZS4iLAorKyAgICAgICAgICAgICAgICAgICAgICAgICBlLT5wcm9maWxlLCBjYXJkLT5uYW1lKTsKKysgICAgICAgIH0KKysgICAgfQorKworKyAgICBlbnRyeV9mcmVlKGUpOworKworKyAgICByZXR1cm4gUEFfSE9PS19PSzsKKyt9CisrCisgc3RhdGljIHBhX2hvb2tfcmVzdWx0X3QgY2FyZF9wcmVmZXJyZWRfcG9ydF9jaGFuZ2VkX2NhbGxiYWNrKHBhX2NvcmUgKmNvcmUsIHBhX2NhcmRfcHJlZmVycmVkX3BvcnRfY2hhbmdlZF9ob29rX2RhdGEgKmRhdGEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCB1c2VyZGF0YSAqdSkgeworICAgICBzdHJ1Y3QgZW50cnkgKmU7CitAQCAtNjM0LDYgKzY0OCw4IEBAIGludCBwYV9faW5pdChwYV9tb2R1bGUqbSkgeworICAgICB1LT5tb2R1bGUgPSBtOworIAorICAgICBwYV9tb2R1bGVfaG9va19jb25uZWN0KG0sICZtLT5jb3JlLT5ob29rc1tQQV9DT1JFX0hPT0tfQ0FSRF9ORVddLCBQQV9IT09LX0VBUkxZLCAocGFfaG9va19jYl90KSBjYXJkX25ld19ob29rX2NhbGxiYWNrLCB1KTsKKysgICAgcGFfbW9kdWxlX2hvb2tfY29ubmVjdChtLCAmbS0+Y29yZS0+aG9va3NbUEFfQ09SRV9IT09LX0NBUkRfQ0hPT1NFX0lOSVRJQUxfUFJPRklMRV0sIFBBX0hPT0tfTk9STUFMLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgIChwYV9ob29rX2NiX3QpIGNhcmRfY2hvb3NlX2luaXRpYWxfcHJvZmlsZV9jYWxsYmFjaywgdSk7CisgICAgIHBhX21vZHVsZV9ob29rX2Nvbm5lY3QobSwgJm0tPmNvcmUtPmhvb2tzW1BBX0NPUkVfSE9PS19DQVJEX1BVVF0sIFBBX0hPT0tfTk9STUFMLCAocGFfaG9va19jYl90KSBjYXJkX3B1dF9ob29rX2NhbGxiYWNrLCB1KTsKKyAgICAgcGFfbW9kdWxlX2hvb2tfY29ubmVjdChtLCAmbS0+Y29yZS0+aG9va3NbUEFfQ09SRV9IT09LX0NBUkRfUFJFRkVSUkVEX1BPUlRfQ0hBTkdFRF0sIFBBX0hPT0tfTk9STUFMLCAocGFfaG9va19jYl90KSBjYXJkX3ByZWZlcnJlZF9wb3J0X2NoYW5nZWRfY2FsbGJhY2ssIHUpOworICAgICBwYV9tb2R1bGVfaG9va19jb25uZWN0KG0sICZtLT5jb3JlLT5ob29rc1tQQV9DT1JFX0hPT0tfQ0FSRF9QUk9GSUxFX0NIQU5HRURdLCBQQV9IT09LX05PUk1BTCwgKHBhX2hvb2tfY2JfdCkgY2FyZF9wcm9maWxlX2NoYW5nZWRfY2FsbGJhY2ssIHUpOwogZGlmZiAtLWdpdCBhL3NyYy9wdWxzZWNvcmUvY2FyZC5jIGIvc3JjL3B1bHNlY29yZS9jYXJkLmMKLWluZGV4IGY5MmFjODcuLjFhNmU3MDUgMTAwNjQ0CitpbmRleCAwYWM3MGI5Li5hMGMzZDkzIDEwMDY0NAogLS0tIGEvc3JjL3B1bHNlY29yZS9jYXJkLmMKICsrKyBiL3NyYy9wdWxzZWNvcmUvY2FyZC5jCi1AQCAtMTQ4LDYgKzE0OCw3IEBAIHBhX2NhcmQgKnBhX2NhcmRfbmV3KHBhX2NvcmUgKmNvcmUsIHBhX2NhcmRfbmV3X2RhdGEgKmRhdGEpIHsKLSAgICAgcGFfYXNzZXJ0KCFwYV9oYXNobWFwX2lzZW1wdHkoZGF0YS0+cHJvZmlsZXMpKTsKLSAKLSAgICAgYyA9IHBhX3huZXcwKHBhX2NhcmQsIDEpOwotKyAgICBjLT5zdGF0ZSA9IFBBX0NBUkRfU1RBVEVfSU5JVDsKLSAKLSAgICAgaWYgKCEobmFtZSA9IHBhX25hbWVyZWdfcmVnaXN0ZXIoY29yZSwgZGF0YS0+bmFtZSwgUEFfTkFNRVJFR19DQVJELCBjLCBkYXRhLT5uYW1lcmVnX2ZhaWwpKSkgewotICAgICAgICAgcGFfeGZyZWUoYyk7Ci1AQCAtMTU2LDEyICsxNTcsNiBAQCBwYV9jYXJkICpwYV9jYXJkX25ldyhwYV9jb3JlICpjb3JlLCBwYV9jYXJkX25ld19kYXRhICpkYXRhKSB7Ci0gCi0gICAgIHBhX2NhcmRfbmV3X2RhdGFfc2V0X25hbWUoZGF0YSwgbmFtZSk7Ci0gCi0tICAgIGlmIChwYV9ob29rX2ZpcmUoJmNvcmUtPmhvb2tzW1BBX0NPUkVfSE9PS19DQVJEX05FV10sIGRhdGEpIDwgMCkgewotLSAgICAgICAgcGFfeGZyZWUoYyk7Ci0tICAgICAgICBwYV9uYW1lcmVnX3VucmVnaXN0ZXIoY29yZSwgbmFtZSk7Ci0tICAgICAgICByZXR1cm4gTlVMTDsKLS0gICAgfQotLQotICAgICBjLT5jb3JlID0gY29yZTsKLSAgICAgYy0+bmFtZSA9IHBhX3hzdHJkdXAoZGF0YS0+bmFtZSk7Ci0gICAgIGMtPnByb3BsaXN0ID0gcGFfcHJvcGxpc3RfY29weShkYXRhLT5wcm9wbGlzdCk7Ci1AQCAtMTg0LDM4ICsxNzksNDMgQEAgcGFfY2FyZCAqcGFfY2FyZF9uZXcocGFfY29yZSAqY29yZSwgcGFfY2FyZF9uZXdfZGF0YSAqZGF0YSkgewotICAgICBQQV9IQVNITUFQX0ZPUkVBQ0gocG9ydCwgYy0+cG9ydHMsIHN0YXRlKQotICAgICAgICAgcG9ydC0+Y2FyZCA9IGM7CitAQCAtMTc2LDM4ICsxNzYsNTYgQEAgcGFfY2FyZCAqcGFfY2FyZF9uZXcocGFfY29yZSAqY29yZSwgcGFfY2FyZF9uZXdfZGF0YSAqZGF0YSkgeworICAgICBjLT5wcmVmZXJyZWRfaW5wdXRfcG9ydCA9IGRhdGEtPnByZWZlcnJlZF9pbnB1dF9wb3J0OworICAgICBjLT5wcmVmZXJyZWRfb3V0cHV0X3BvcnQgPSBkYXRhLT5wcmVmZXJyZWRfb3V0cHV0X3BvcnQ7CiAgCiAtICAgIGlmIChkYXRhLT5hY3RpdmVfcHJvZmlsZSkKIC0gICAgICAgIGlmICgoYy0+YWN0aXZlX3Byb2ZpbGUgPSBwYV9oYXNobWFwX2dldChjLT5wcm9maWxlcywgZGF0YS0+YWN0aXZlX3Byb2ZpbGUpKSkKQEAgLTI1Miw1MCArMjczLDg1IEBACiAtICAgICAgICAgICAgUEFfSEFTSE1BUF9GT1JFQUNIKHByb2ZpbGUsIGMtPnByb2ZpbGVzLCBzdGF0ZSkKIC0gICAgICAgICAgICAgICAgaWYgKCFjLT5hY3RpdmVfcHJvZmlsZSB8fCBwcm9maWxlLT5wcmlvcml0eSA+IGMtPmFjdGl2ZV9wcm9maWxlLT5wcmlvcml0eSkKIC0gICAgICAgICAgICAgICAgICAgIGMtPmFjdGl2ZV9wcm9maWxlID0gcHJvZmlsZTsKLS0gICAgICAgIH0KLS0gICAgICAgIHBhX2Fzc2VydChjLT5hY3RpdmVfcHJvZmlsZSk7Ci0rdm9pZCBwYV9jYXJkX3B1dChwYV9jYXJkICpjYXJkKSB7Cisrdm9pZCBwYV9jYXJkX2Nob29zZV9pbml0aWFsX3Byb2ZpbGUocGFfY2FyZCAqY2FyZCkgewogKyAgICBwYV9jYXJkX3Byb2ZpbGUgKnByb2ZpbGU7CiArICAgIHZvaWQgKnN0YXRlOworKyAgICBwYV9jYXJkX3Byb2ZpbGUgKmJlc3QgPSBOVUxMOwogKwogKyAgICBwYV9hc3NlcnQoY2FyZCk7CiArCisrICAgIC8qIEJ5IGRlZmF1bHQsIHBpY2sgdGhlIGhpZ2hlc3QgcHJpb3JpdHkgcHJvZmlsZSB0aGF0IGlzIG5vdCB1bmF2YWlsYWJsZSwKKysgICAgICogb3IgaWYgYWxsIHByb2ZpbGVzIGFyZSB1bmF2YWlsYWJsZSwgcGljayB0aGUgcHJvZmlsZSB3aXRoIHRoZSBoaWdoZXN0CisrICAgICAqIHByaW9yaXR5IHJlZ2FyZGxlc3Mgb2YgaXRzIGF2YWlsYWJpbGl0eS4gKi8KKysKICsgICAgUEFfSEFTSE1BUF9GT1JFQUNIKHByb2ZpbGUsIGNhcmQtPnByb2ZpbGVzLCBzdGF0ZSkgewogKyAgICAgICAgaWYgKHByb2ZpbGUtPmF2YWlsYWJsZSA9PSBQQV9BVkFJTEFCTEVfTk8pCiArICAgICAgICAgICAgY29udGludWU7CiArCi0rICAgICAgICBpZiAoIWNhcmQtPmFjdGl2ZV9wcm9maWxlIHx8IHByb2ZpbGUtPnByaW9yaXR5ID4gY2FyZC0+YWN0aXZlX3Byb2ZpbGUtPnByaW9yaXR5KQotKyAgICAgICAgICAgIGNhcmQtPmFjdGl2ZV9wcm9maWxlID0gcHJvZmlsZTsKKysgICAgICAgIGlmICghYmVzdCB8fCBwcm9maWxlLT5wcmlvcml0eSA+IGJlc3QtPnByaW9yaXR5KQorKyAgICAgICAgICAgIGJlc3QgPSBwcm9maWxlOworKyAgICB9CisrCisrICAgIGlmICghYmVzdCkgeworKyAgICAgICAgUEFfSEFTSE1BUF9GT1JFQUNIKHByb2ZpbGUsIGNhcmQtPnByb2ZpbGVzLCBzdGF0ZSkgeworKyAgICAgICAgICAgIGlmICghYmVzdCB8fCBwcm9maWxlLT5wcmlvcml0eSA+IGJlc3QtPnByaW9yaXR5KQorKyAgICAgICAgICAgICAgICBiZXN0ID0gcHJvZmlsZTsKKyAgICAgICAgIH0KKy0gICAgICAgIHBhX2Fzc2VydChjLT5hY3RpdmVfcHJvZmlsZSk7CiAgICAgIH0KKysgICAgcGFfYXNzZXJ0KGJlc3QpOwogIAogLSAgICBwYV9kZXZpY2VfaW5pdF9kZXNjcmlwdGlvbihjLT5wcm9wbGlzdCwgYyk7CiAtICAgIHBhX2RldmljZV9pbml0X2ljb24oYy0+cHJvcGxpc3QsIHRydWUpOwogLSAgICBwYV9kZXZpY2VfaW5pdF9pbnRlbmRlZF9yb2xlcyhjLT5wcm9wbGlzdCk7Ci0rICAgIC8qIElmIGFsbCBwcm9maWxlcyBhcmUgdW5hdmFpbGFibGUsIHRoZW4gd2Ugc3RpbGwgbmVlZCB0byBwaWNrIG9uZSAqLwotKyAgICBpZiAoIWNhcmQtPmFjdGl2ZV9wcm9maWxlKSB7Ci0rICAgICAgICBQQV9IQVNITUFQX0ZPUkVBQ0gocHJvZmlsZSwgY2FyZC0+cHJvZmlsZXMsIHN0YXRlKQotKyAgICAgICAgICAgIGlmICghY2FyZC0+YWN0aXZlX3Byb2ZpbGUgfHwgcHJvZmlsZS0+cHJpb3JpdHkgPiBjYXJkLT5hY3RpdmVfcHJvZmlsZS0+cHJpb3JpdHkpCi0rICAgICAgICAgICAgICAgIGNhcmQtPmFjdGl2ZV9wcm9maWxlID0gcHJvZmlsZTsKLSsgICAgfQotKyAgICBwYV9hc3NlcnQoY2FyZC0+YWN0aXZlX3Byb2ZpbGUpOworKyAgICBjYXJkLT5hY3RpdmVfcHJvZmlsZSA9IGJlc3Q7CisrICAgIGNhcmQtPnNhdmVfcHJvZmlsZSA9IGZhbHNlOwogIAogLSAgICBwYV9hc3NlcnRfc2UocGFfaWR4c2V0X3B1dChjb3JlLT5jYXJkcywgYywgJmMtPmluZGV4KSA+PSAwKTsKLSsgICAgcGFfaG9va19maXJlKCZjYXJkLT5jb3JlLT5ob29rc1tQQV9DT1JFX0hPT0tfQ0FSRF9ORVddLCBjYXJkKTsKKysgICAgLyogTGV0IHBvbGljeSBtb2R1bGVzIG92ZXJyaWRlIHRoZSBkZWZhdWx0LiAqLworKyAgICBwYV9ob29rX2ZpcmUoJmNhcmQtPmNvcmUtPmhvb2tzW1BBX0NPUkVfSE9PS19DQVJEX0NIT09TRV9JTklUSUFMX1BST0ZJTEVdLCBjYXJkKTsKKyt9CiAgCiAtICAgIHBhX2xvZ19pbmZvKCJDcmVhdGVkICV1IFwiJXNcIiIsIGMtPmluZGV4LCBjLT5uYW1lKTsKIC0gICAgcGFfc3Vic2NyaXB0aW9uX3Bvc3QoY29yZSwgUEFfU1VCU0NSSVBUSU9OX0VWRU5UX0NBUkR8UEFfU1VCU0NSSVBUSU9OX0VWRU5UX05FVywgYy0+aW5kZXgpOwotKyAgICBwYV9hc3NlcnRfc2UocGFfaWR4c2V0X3B1dChjYXJkLT5jb3JlLT5jYXJkcywgY2FyZCwgJmNhcmQtPmluZGV4KSA+PSAwKTsKLSsgICAgY2FyZC0+c3RhdGUgPSBQQV9DQVJEX1NUQVRFX0xJTktFRDsKKyt2b2lkIHBhX2NhcmRfcHV0KHBhX2NhcmQgKmNhcmQpIHsKKysgICAgcGFfYXNzZXJ0KGNhcmQpOwogIAogLSAgICBwYV9ob29rX2ZpcmUoJmNvcmUtPmhvb2tzW1BBX0NPUkVfSE9PS19DQVJEX1BVVF0sIGMpOwogLSAgICByZXR1cm4gYzsKKysgICAgcGFfYXNzZXJ0X3NlKHBhX2lkeHNldF9wdXQoY2FyZC0+Y29yZS0+Y2FyZHMsIGNhcmQsICZjYXJkLT5pbmRleCkgPj0gMCk7CisrICAgIGNhcmQtPmxpbmtlZCA9IHRydWU7CisrCiArICAgIHBhX2xvZ19pbmZvKCJDcmVhdGVkICV1IFwiJXNcIiIsIGNhcmQtPmluZGV4LCBjYXJkLT5uYW1lKTsKICsgICAgcGFfaG9va19maXJlKCZjYXJkLT5jb3JlLT5ob29rc1tQQV9DT1JFX0hPT0tfQ0FSRF9QVVRdLCBjYXJkKTsKICsgICAgcGFfc3Vic2NyaXB0aW9uX3Bvc3QoY2FyZC0+Y29yZSwgUEFfU1VCU0NSSVBUSU9OX0VWRU5UX0NBUkR8UEFfU1VCU0NSSVBUSU9OX0VWRU5UX05FVywgY2FyZC0+aW5kZXgpOwogIH0KICAKICB2b2lkIHBhX2NhcmRfZnJlZShwYV9jYXJkICpjKSB7Ci1AQCAtMzA2LDIwICszMDYsMjcgQEAgaW50IHBhX2NhcmRfc2V0X3Byb2ZpbGUocGFfY2FyZCAqYywgcGFfY2FyZF9wcm9maWxlICpwcm9maWxlLCBib29sIHNhdmUpIHsKK0BAIC0yMTgsMTUgKzIzNiwxNSBAQCB2b2lkIHBhX2NhcmRfZnJlZShwYV9jYXJkICpjKSB7CisgCisgICAgIGNvcmUgPSBjLT5jb3JlOworIAorLSAgICBwYV9ob29rX2ZpcmUoJmNvcmUtPmhvb2tzW1BBX0NPUkVfSE9PS19DQVJEX1VOTElOS10sIGMpOworLQorLSAgICBwYV9uYW1lcmVnX3VucmVnaXN0ZXIoY29yZSwgYy0+bmFtZSk7CistCistICAgIHBhX2lkeHNldF9yZW1vdmVfYnlfZGF0YShjLT5jb3JlLT5jYXJkcywgYywgTlVMTCk7CisrICAgIGlmIChjLT5saW5rZWQpIHsKKysgICAgICAgIHBhX2hvb2tfZmlyZSgmY29yZS0+aG9va3NbUEFfQ09SRV9IT09LX0NBUkRfVU5MSU5LXSwgYyk7CisgCistICAgIHBhX2xvZ19pbmZvKCJGcmVlZCAldSBcIiVzXCIiLCBjLT5pbmRleCwgYy0+bmFtZSk7CisrICAgICAgICBwYV9pZHhzZXRfcmVtb3ZlX2J5X2RhdGEoYy0+Y29yZS0+Y2FyZHMsIGMsIE5VTEwpOworKyAgICAgICAgcGFfbG9nX2luZm8oIkZyZWVkICV1IFwiJXNcIiIsIGMtPmluZGV4LCBjLT5uYW1lKTsKKysgICAgICAgIHBhX3N1YnNjcmlwdGlvbl9wb3N0KGMtPmNvcmUsIFBBX1NVQlNDUklQVElPTl9FVkVOVF9DQVJEfFBBX1NVQlNDUklQVElPTl9FVkVOVF9SRU1PVkUsIGMtPmluZGV4KTsKKysgICAgfQorIAorLSAgICBwYV9zdWJzY3JpcHRpb25fcG9zdChjLT5jb3JlLCBQQV9TVUJTQ1JJUFRJT05fRVZFTlRfQ0FSRHxQQV9TVUJTQ1JJUFRJT05fRVZFTlRfUkVNT1ZFLCBjLT5pbmRleCk7CisrICAgIHBhX25hbWVyZWdfdW5yZWdpc3Rlcihjb3JlLCBjLT5uYW1lKTsKKyAKKyAgICAgcGFfYXNzZXJ0KHBhX2lkeHNldF9pc2VtcHR5KGMtPnNpbmtzKSk7CisgICAgIHBhX2lkeHNldF9mcmVlKGMtPnNpbmtzLCBOVUxMKTsKK0BAIC0yOTgsMjAgKzMxNiwyNyBAQCBpbnQgcGFfY2FyZF9zZXRfcHJvZmlsZShwYV9jYXJkICpjLCBwYV9jYXJkX3Byb2ZpbGUgKnByb2ZpbGUsIGJvb2wgc2F2ZSkgewogICAgICAgICAgcmV0dXJuIDA7CiAgICAgIH0KICAKQEAgLTMwNyw3ICszNjMsNyBAQAogKyAgICAgKiBiZSBwcm9iYWJseSBnb29kIHRvIGNoYW5nZSB0aGlzIHNvIHRoYXQgYWxzbyB0aGUgaW5pdGlhbCBwcm9maWxlIGNhbiBiZQogKyAgICAgKiBzZXQgdXAgaW4gc2V0X3Byb2ZpbGUoKSwgYnV0IGlmIHNldF9wcm9maWxlKCkgZmFpbHMsIHRoYXQgd291bGQgbmVlZAogKyAgICAgKiBzb21lIGJldHRlciBoYW5kbGluZyB0aGFuIHdoYXQgd2UgZG8gaGVyZSBjdXJyZW50bHkuICovCi0rICAgIGlmIChjLT5zdGF0ZSAhPSBQQV9DQVJEX1NUQVRFX0lOSVQgJiYgKHIgPSBjLT5zZXRfcHJvZmlsZShjLCBwcm9maWxlKSkgPCAwKQorKyAgICBpZiAoYy0+bGlua2VkICYmIChyID0gYy0+c2V0X3Byb2ZpbGUoYywgcHJvZmlsZSkpIDwgMCkKICAgICAgICAgIHJldHVybiByOwogIAogLSAgICBwYV9zdWJzY3JpcHRpb25fcG9zdChjLT5jb3JlLCBQQV9TVUJTQ1JJUFRJT05fRVZFTlRfQ0FSRHxQQV9TVUJTQ1JJUFRJT05fRVZFTlRfQ0hBTkdFLCBjLT5pbmRleCk7CkBAIC0zMjEsNyArMzc3LDcgQEAKICAgICAgICAgIHVwZGF0ZV9wb3J0X3ByZWZlcnJlZF9wcm9maWxlKGMpOwogIAogLSAgICBwYV9ob29rX2ZpcmUoJmMtPmNvcmUtPmhvb2tzW1BBX0NPUkVfSE9PS19DQVJEX1BST0ZJTEVfQ0hBTkdFRF0sIGMpOwotKyAgICBpZiAoYy0+c3RhdGUgIT0gUEFfQ0FSRF9TVEFURV9JTklUKSB7CisrICAgIGlmIChjLT5saW5rZWQpIHsKICsgICAgICAgIHBhX2xvZ19pbmZvKCJDaGFuZ2VkIHByb2ZpbGUgb2YgY2FyZCAldSBcIiVzXCIgdG8gJXMiLCBjLT5pbmRleCwgYy0+bmFtZSwgcHJvZmlsZS0+bmFtZSk7CiArICAgICAgICBwYV9ob29rX2ZpcmUoJmMtPmNvcmUtPmhvb2tzW1BBX0NPUkVfSE9PS19DQVJEX1BST0ZJTEVfQ0hBTkdFRF0sIGMpOwogKyAgICAgICAgcGFfc3Vic2NyaXB0aW9uX3Bvc3QoYy0+Y29yZSwgUEFfU1VCU0NSSVBUSU9OX0VWRU5UX0NBUkR8UEFfU1VCU0NSSVBUSU9OX0VWRU5UX0NIQU5HRSwgYy0+aW5kZXgpOwpAQCAtMzMwLDM3ICszODYsNDQgQEAKICAgICAgcmV0dXJuIDA7CiAgfQogZGlmZiAtLWdpdCBhL3NyYy9wdWxzZWNvcmUvY2FyZC5oIGIvc3JjL3B1bHNlY29yZS9jYXJkLmgKLWluZGV4IGZmZjkwNTcuLmE5NDQzMDEgMTAwNjQ0CitpbmRleCBkNDk3MGUzLi5mZDFmZTBhIDEwMDY0NAogLS0tIGEvc3JjL3B1bHNlY29yZS9jYXJkLmgKICsrKyBiL3NyYy9wdWxzZWNvcmUvY2FyZC5oCi1AQCAtMzQsNiArMzQsMTEgQEAgdHlwZWRlZiBlbnVtIHBhX2F2YWlsYWJsZSB7Ci0gICAgIFBBX0FWQUlMQUJMRV9ZRVMgPSAyLAotIH0gcGFfYXZhaWxhYmxlX3Q7CitAQCAtODYsNiArODYsOCBAQCBzdHJ1Y3QgcGFfY2FyZCB7CiAgCi0rdHlwZWRlZiBlbnVtIHBhX2NhcmRfc3RhdGUgewotKyAgICBQQV9DQVJEX1NUQVRFX0lOSVQsCi0rICAgIFBBX0NBUkRfU1RBVEVfTElOS0VELAotK30gcGFfY2FyZF9zdGF0ZV90OworICAgICBwYV9zdXNwZW5kX2NhdXNlX3Qgc3VzcGVuZF9jYXVzZTsKKyAKKysgICAgYm9vbCBsaW5rZWQ7CiArCi0gc3RydWN0IHBhX2NhcmRfcHJvZmlsZSB7Ci0gICAgIHBhX2NhcmQgKmNhcmQ7Ci0gICAgIGNoYXIgKm5hbWU7Ci1AQCAtNjYsNiArNzEsNyBAQCBzdHJ1Y3QgcGFfY2FyZF9wcm9maWxlIHsKKyAgICAgdm9pZCAqdXNlcmRhdGE7CiAgCi0gc3RydWN0IHBhX2NhcmQgewotICAgICB1aW50MzJfdCBpbmRleDsKLSsgICAgcGFfY2FyZF9zdGF0ZV90IHN0YXRlOwotICAgICBwYV9jb3JlICpjb3JlOwotIAotICAgICBjaGFyICpuYW1lOwotQEAgLTEyMCw2ICsxMjYsNyBAQCB2b2lkIHBhX2NhcmRfbmV3X2RhdGFfc2V0X3Byb2ZpbGUocGFfY2FyZF9uZXdfZGF0YSAqZGF0YSwgY29uc3QgY2hhciAqcHJvZmlsZSk7CisgICAgIGludCAoKnNldF9wcm9maWxlKShwYV9jYXJkICpjLCBwYV9jYXJkX3Byb2ZpbGUgKnByb2ZpbGUpOworQEAgLTEyOCw2ICsxMzAsMTMgQEAgdm9pZCBwYV9jYXJkX25ld19kYXRhX3NldF9wcmVmZXJyZWRfcG9ydChwYV9jYXJkX25ld19kYXRhICpkYXRhLCBwYV9kaXJlY3Rpb25fdAogIHZvaWQgcGFfY2FyZF9uZXdfZGF0YV9kb25lKHBhX2NhcmRfbmV3X2RhdGEgKmRhdGEpOwogIAogIHBhX2NhcmQgKnBhX2NhcmRfbmV3KHBhX2NvcmUgKmMsIHBhX2NhcmRfbmV3X2RhdGEgKmRhdGEpOworKworKy8qIFNlbGVjdCB0aGUgaW5pdGlhbCBjYXJkIHByb2ZpbGUgYWNjb3JkaW5nIHRvIHRoZSBjb25maWd1cmVkIHBvbGljaWVzLiBUaGlzCisrICogbXVzdCBiZSBjYWxsZWQgYmV0d2VlbiBwYV9jYXJkX25ldygpIGFuZCBwYV9jYXJkX3B1dCgpLCBhZnRlciB0aGUgcG9ydCBhbmQKKysgKiBwcm9maWxlIGF2YWlsYWJsaXRpZXMgaGF2ZSBiZWVuIGluaXRpYWxpemVkLiAqLworK3ZvaWQgcGFfY2FyZF9jaG9vc2VfaW5pdGlhbF9wcm9maWxlKHBhX2NhcmQgKmNhcmQpOworKwogK3ZvaWQgcGFfY2FyZF9wdXQocGFfY2FyZCAqYyk7CiAgdm9pZCBwYV9jYXJkX2ZyZWUocGFfY2FyZCAqYyk7CiAgCiAgdm9pZCBwYV9jYXJkX2FkZF9wcm9maWxlKHBhX2NhcmQgKmMsIHBhX2NhcmRfcHJvZmlsZSAqcHJvZmlsZSk7CitkaWZmIC0tZ2l0IGEvc3JjL3B1bHNlY29yZS9jb3JlLmggYi9zcmMvcHVsc2Vjb3JlL2NvcmUuaAoraW5kZXggMDBkN2YyZi4uODAyMTExYiAxMDA2NDQKKy0tLSBhL3NyYy9wdWxzZWNvcmUvY29yZS5oCisrKysgYi9zcmMvcHVsc2Vjb3JlL2NvcmUuaAorQEAgLTExOCw2ICsxMTgsNyBAQCB0eXBlZGVmIGVudW0gcGFfY29yZV9ob29rIHsKKyAgICAgUEFfQ09SRV9IT09LX0NMSUVOVF9QUk9QTElTVF9DSEFOR0VELAorICAgICBQQV9DT1JFX0hPT0tfQ0xJRU5UX1NFTkRfRVZFTlQsCisgICAgIFBBX0NPUkVfSE9PS19DQVJEX05FVywKKysgICAgUEFfQ09SRV9IT09LX0NBUkRfQ0hPT1NFX0lOSVRJQUxfUFJPRklMRSwKKyAgICAgUEFfQ09SRV9IT09LX0NBUkRfUFVULAorICAgICBQQV9DT1JFX0hPT0tfQ0FSRF9VTkxJTkssCisgICAgIFBBX0NPUkVfSE9PS19DQVJEX1BSRUZFUlJFRF9QT1JUX0NIQU5HRUQsCiAtLSAKLTIuNy4wCisyLjguMQogCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvcHVsc2VhdWRpby9wdWxzZWF1ZGlvLzAwMDQtYWxzYS1zZXQtYXZhaWxhYmlsaXR5LWZvci1zb21lLXVuYXZhaWxhYmxlLXByb2ZpbGVzLnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL3B1bHNlYXVkaW8vcHVsc2VhdWRpby8wMDA0LWFsc2Etc2V0LWF2YWlsYWJpbGl0eS1mb3Itc29tZS11bmF2YWlsYWJsZS1wcm9maWxlcy5wYXRjaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTBlZmE3MC4uMDAwMDAwMAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvcHVsc2VhdWRpby9wdWxzZWF1ZGlvLzAwMDQtYWxzYS1zZXQtYXZhaWxhYmlsaXR5LWZvci1zb21lLXVuYXZhaWxhYmxlLXByb2ZpbGVzLnBhdGNoCisrKyAvZGV2L251bGwKQEAgLTEsODMgKzAsMCBAQAotRnJvbSA2OTBkNTY3ZTI5OGY2Njg3YjYxYzgyNjYwYjA1MWRmNWIyNTQ4MmVlIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQotRnJvbTogVGFudSBLYXNraW5lbiA8dGFudWtAaWtpLmZpPgotRGF0ZTogRnJpLCAyMyBPY3QgMjAxNSAxMzozNzoxMSArMDMwMAotU3ViamVjdDogW1BBVENIIDQvNF0gYWxzYTogc2V0IGF2YWlsYWJpbGl0eSBmb3IgKHNvbWUpIHVuYXZhaWxhYmxlIHByb2ZpbGVzCi0KLVRoZSBhbHNhIGNhcmQgaGFzbid0IHNvIGZhciBzZXQgYW55IGF2YWlsYWJpbGl0eSBmb3IgcHJvZmlsZXMuIFRoYXQKLWNhdXNlZCBhbiBpc3N1ZSB3aXRoIHNvbWUgSERNSSBoYXJkd2FyZTogdGhlIHNvdW5kIGNhcmQgaGFzIHR3byBIRE1JCi1vdXRwdXRzLCBidXQgb25seSB0aGUgc2Vjb25kIG9mIHRoZW0gaXMgYWN0dWFsbHkgdXNhYmxlLiBUaGUKLXVuYXZhaWxhYmxlIHBvcnQgaXMgbWFya2VkIGFzIHVuYXZhaWxhYmxlIGFuZCB0aGUgYXZhaWxhYmxlIHBvcnQgaXMKLW1hcmtlZCBhcyBhdmFpbGFibGUsIGJ1dCB0aGlzIGluZm9ybWF0aW9uIGlzbid0IHByb3BhZ2F0ZWQgdG8gdGhlCi1wcm9maWxlIGF2YWlsYWJpbGl0eS4gV2l0aG91dCBwcm9maWxlIGF2YWlsYWJpbGl0eSBpbmZvcm1hdGlvbiwgdGhlCi1pbml0aWFsIHByb2ZpbGUgcG9saWN5IHBpY2tzIHRoZSB1bmF2YWlsYWJsZSBvbmUsIHNpbmNlIGl0IGhhcyBhCi1oaWdoZXIgcHJpb3JpdHkgdmFsdWUuCi0KLVRoaXMgcGF0Y2ggYWRkcyBzaW1wbGUgbG9naWMgZm9yIG1hcmtpbmcgc29tZSBwcm9maWxlcyB1bmF2YWlsYWJsZToKLWlmIHRoZSBwcm9maWxlIG9ubHkgY29udGFpbnMgdW5hdmFpbGFibGUgcG9ydHMsIHRoZSBwcm9maWxlIGlzCi11bmF2YWlsYWJsZSB0b28uIFRoaXMgY2FuIGJlIGltcHJvdmVkIGluIHRoZSBmdXR1cmUgc28gdGhhdCBpZiBhCi1wcm9maWxlIGNvbnRhaW5zIHNpbmtzIG9yIHNvdXJjZXMgdGhhdCBvbmx5IGNvbnRhaW4gdW5hdmFpbGFibGUgcG9ydHMsCi10aGUgcHJvZmlsZSBzaG91bGQgYmUgbWFya2VkIGFzIHVuYXZhaWxhYmxlLiBJbXBsZW1lbnRpbmcgdGhhdAotcmVxdWlyZXMgYWRkaW5nIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgdGhlIHNpbmtzIGFuZCBzb3VyY2VzIHRvCi1wYV9jYXJkX3Byb2ZpbGUsIGhvd2V2ZXIuCi0KLUJ1Z0xpbms6IGh0dHBzOi8vYnVnemlsbGEueW9jdG9wcm9qZWN0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9ODQ0OAotCi1TaWduZWQtb2ZmLWJ5OiBKdXNzaSBLdWtrb25lbiA8anVzc2kua3Vra29uZW5AaW50ZWwuY29tPgotCi1SZWJhc2VkIG9uIDguMC4KLQotVXBzdHJlYW0tU3RhdHVzOiBEZW5pZWQgW1RoZSBwYXRjaCBzZXQgbmVlZHMgc29tZSB3b3JrIHRvIGJlIGFjY2VwdGVkLgotVGhlIHJldmlldyB0aHJlYWQ6Ci1odHRwOi8vdGhyZWFkLmdtYW5lLm9yZy9nbWFuZS5jb21wLmF1ZGlvLnB1bHNlYXVkaW8uZ2VuZXJhbC8yNDMwMV0KLQotU2lnbmVkLW9mZi1ieTogVGFudSBLYXNraW5lbiA8dGFudWtAaWtpLmZpPgotLS0tCi0gc3JjL21vZHVsZXMvYWxzYS9tb2R1bGUtYWxzYS1jYXJkLmMgfCAyNSArKysrKysrKysrKysrKysrKysrKysrKysrCi0gMSBmaWxlIGNoYW5nZWQsIDI1IGluc2VydGlvbnMoKykKLQotZGlmZiAtLWdpdCBhL3NyYy9tb2R1bGVzL2Fsc2EvbW9kdWxlLWFsc2EtY2FyZC5jIGIvc3JjL21vZHVsZXMvYWxzYS9tb2R1bGUtYWxzYS1jYXJkLmMKLWluZGV4IGZlMjQwZjAuLmJkYmRjMTIgMTAwNjQ0Ci0tLS0gYS9zcmMvbW9kdWxlcy9hbHNhL21vZHVsZS1hbHNhLWNhcmQuYwotKysrIGIvc3JjL21vZHVsZXMvYWxzYS9tb2R1bGUtYWxzYS1jYXJkLmMKLUBAIC0zNjYsNiArMzY2LDggQEAgc3RhdGljIGludCByZXBvcnRfamFja19zdGF0ZShzbmRfbWl4ZXJfZWxlbV90ICptZWxlbSwgdW5zaWduZWQgaW50IG1hc2spIHsKLSAgICAgdm9pZCAqc3RhdGU7Ci0gICAgIHBhX2Fsc2FfamFjayAqamFjazsKLSAgICAgc3RydWN0IHRlbXBfcG9ydF9hdmFpbCAqdHAsICp0cG9ydHM7Ci0rICAgIHBhX2RldmljZV9wb3J0ICpwb3J0OwotKyAgICBwYV9jYXJkX3Byb2ZpbGUgKnByb2ZpbGU7Ci0gCi0gICAgIHBhX2Fzc2VydCh1KTsKLSAKLUBAIC00MTIsNiArNDE0LDI5IEBAIHN0YXRpYyBpbnQgcmVwb3J0X2phY2tfc3RhdGUoc25kX21peGVyX2VsZW1fdCAqbWVsZW0sIHVuc2lnbmVkIGludCBtYXNrKSB7Ci0gICAgICAgICAgICBwYV9kZXZpY2VfcG9ydF9zZXRfYXZhaWxhYmxlKHRwLT5wb3J0LCB0cC0+YXZhaWwpOwotIAotICAgICBwYV94ZnJlZSh0cG9ydHMpOwotKwotKyAgICAvKiBVcGRhdGUgcHJvZmlsZSBhdmFpbGFiaWxpdGllcy4gVGhlIGxvZ2ljIGNvdWxkIGJlIGltcHJvdmVkOyBmb3Igbm93IHdlCi0rICAgICAqIG9ubHkgc2V0IG9idmlvdXNseSB1bmF2YWlsYWJsZSBwcm9maWxlcyAodGhvc2UgdGhhdCBjb250YWluIG9ubHkKLSsgICAgICogdW5hdmFpbGFibGUgcG9ydHMpIHRvIFBBX0FWQUlMQUJMRV9OTyBhbmQgYWxsIG90aGVycyB0bwotKyAgICAgKiBQQV9BVkFJTEFCTEVfVU5LTk9XTi4gKi8KLSsgICAgUEFfSEFTSE1BUF9GT1JFQUNIKHByb2ZpbGUsIHUtPmNhcmQtPnByb2ZpbGVzLCBzdGF0ZSkgewotKyAgICAgICAgdm9pZCAqc3RhdGUyOwotKyAgICAgICAgcGFfYXZhaWxhYmxlX3QgYXZhaWxhYmxlID0gUEFfQVZBSUxBQkxFX05POwotKwotKyAgICAgICAgLyogRG9uJ3QgdG91Y2ggdGhlICJvZmYiIHByb2ZpbGUuICovCi0rICAgICAgICBpZiAocGFfaGFzaG1hcF9zaXplKHByb2ZpbGUtPnBvcnRzKSA9PSAwKQotKyAgICAgICAgICAgIGNvbnRpbnVlOwotKwotKyAgICAgICAgUEFfSEFTSE1BUF9GT1JFQUNIKHBvcnQsIHByb2ZpbGUtPnBvcnRzLCBzdGF0ZTIpIHsKLSsgICAgICAgICAgICBpZiAocG9ydC0+YXZhaWxhYmxlICE9IFBBX0FWQUlMQUJMRV9OTykgewotKyAgICAgICAgICAgICAgICBhdmFpbGFibGUgPSBQQV9BVkFJTEFCTEVfVU5LTk9XTjsKLSsgICAgICAgICAgICAgICAgYnJlYWs7Ci0rICAgICAgICAgICAgfQotKyAgICAgICAgfQotKwotKyAgICAgICAgcGFfY2FyZF9wcm9maWxlX3NldF9hdmFpbGFibGUocHJvZmlsZSwgYXZhaWxhYmxlKTsKLSsgICAgfQotKwotICAgICByZXR1cm4gMDsKLSB9Ci0gCi0tLSAKLTIuNy4wCi0KZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9wdWxzZWF1ZGlvL3B1bHNlYXVkaW8vMDAwNC1jYXJkLXJlbW92ZS1wYV9jYXJkX25ld19kYXRhLmFjdGl2ZV9wcm9maWxlLnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL3B1bHNlYXVkaW8vcHVsc2VhdWRpby8wMDA0LWNhcmQtcmVtb3ZlLXBhX2NhcmRfbmV3X2RhdGEuYWN0aXZlX3Byb2ZpbGUucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDgwZjJjZQotLS0gL2Rldi9udWxsCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9wdWxzZWF1ZGlvL3B1bHNlYXVkaW8vMDAwNC1jYXJkLXJlbW92ZS1wYV9jYXJkX25ld19kYXRhLmFjdGl2ZV9wcm9maWxlLnBhdGNoCkBAIC0wLDAgKzEsNzIgQEAKK0Zyb20gMzc1YmM1NmZkM2Q2NmY0MGE5NjUwMjI0ZTViZmVhNDAwMjQ5NGFkZSBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IFRhbnUgS2Fza2luZW4gPHRhbnVrQGlraS5maT4KK0RhdGU6IEZyaSwgMjMgT2N0IDIwMTUgMTM6NTA6MzUgKzAzMDAKK1N1YmplY3Q6IFtQQVRDSCA0LzVdIGNhcmQ6IHJlbW92ZSBwYV9jYXJkX25ld19kYXRhLmFjdGl2ZV9wcm9maWxlCisKK0l0J3Mgbm90IGJlaW5nIHVzZWQgYW55IG1vcmUuCisKK1Vwc3RyZWFtLVN0YXR1czogQWNjZXB0ZWQgW2V4cGVjdGVkIGluIDEwLjBdCisKK1NpZ25lZC1vZmYtYnk6IFRhbnUgS2Fza2luZW4gPHRhbnVrQGlraS5maT4KKy0tLQorIHNyYy9wdWxzZWNvcmUvY2FyZC5jIHwgOCAtLS0tLS0tLQorIHNyYy9wdWxzZWNvcmUvY2FyZC5oIHwgNSAtLS0tLQorIDIgZmlsZXMgY2hhbmdlZCwgMTMgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9zcmMvcHVsc2Vjb3JlL2NhcmQuYyBiL3NyYy9wdWxzZWNvcmUvY2FyZC5jCitpbmRleCBhMGMzZDkzLi5iYzViNzViIDEwMDY0NAorLS0tIGEvc3JjL3B1bHNlY29yZS9jYXJkLmMKKysrKyBiL3NyYy9wdWxzZWNvcmUvY2FyZC5jCitAQCAtOTYsMTMgKzk2LDYgQEAgdm9pZCBwYV9jYXJkX25ld19kYXRhX3NldF9uYW1lKHBhX2NhcmRfbmV3X2RhdGEgKmRhdGEsIGNvbnN0IGNoYXIgKm5hbWUpIHsKKyAgICAgZGF0YS0+bmFtZSA9IHBhX3hzdHJkdXAobmFtZSk7CisgfQorIAorLXZvaWQgcGFfY2FyZF9uZXdfZGF0YV9zZXRfcHJvZmlsZShwYV9jYXJkX25ld19kYXRhICpkYXRhLCBjb25zdCBjaGFyICpwcm9maWxlKSB7CistICAgIHBhX2Fzc2VydChkYXRhKTsKKy0KKy0gICAgcGFfeGZyZWUoZGF0YS0+YWN0aXZlX3Byb2ZpbGUpOworLSAgICBkYXRhLT5hY3RpdmVfcHJvZmlsZSA9IHBhX3hzdHJkdXAocHJvZmlsZSk7CistfQorLQorIHZvaWQgcGFfY2FyZF9uZXdfZGF0YV9zZXRfcHJlZmVycmVkX3BvcnQocGFfY2FyZF9uZXdfZGF0YSAqZGF0YSwgcGFfZGlyZWN0aW9uX3QgZGlyZWN0aW9uLCBwYV9kZXZpY2VfcG9ydCAqcG9ydCkgeworICAgICBwYV9hc3NlcnQoZGF0YSk7CisgCitAQCAtMTI1LDcgKzExOCw2IEBAIHZvaWQgcGFfY2FyZF9uZXdfZGF0YV9kb25lKHBhX2NhcmRfbmV3X2RhdGEgKmRhdGEpIHsKKyAgICAgICAgIHBhX2hhc2htYXBfZnJlZShkYXRhLT5wb3J0cyk7CisgCisgICAgIHBhX3hmcmVlKGRhdGEtPm5hbWUpOworLSAgICBwYV94ZnJlZShkYXRhLT5hY3RpdmVfcHJvZmlsZSk7CisgfQorIAorIHBhX2NhcmQgKnBhX2NhcmRfbmV3KHBhX2NvcmUgKmNvcmUsIHBhX2NhcmRfbmV3X2RhdGEgKmRhdGEpIHsKK2RpZmYgLS1naXQgYS9zcmMvcHVsc2Vjb3JlL2NhcmQuaCBiL3NyYy9wdWxzZWNvcmUvY2FyZC5oCitpbmRleCBmZDFmZTBhLi41Njk5NDc1IDEwMDY0NAorLS0tIGEvc3JjL3B1bHNlY29yZS9jYXJkLmgKKysrKyBiL3NyYy9wdWxzZWNvcmUvY2FyZC5oCitAQCAtMTAxLDE1ICsxMDEsMTEgQEAgdHlwZWRlZiBzdHJ1Y3QgcGFfY2FyZF9uZXdfZGF0YSB7CisgICAgIHBhX21vZHVsZSAqbW9kdWxlOworIAorICAgICBwYV9oYXNobWFwICpwcm9maWxlczsKKy0gICAgY2hhciAqYWN0aXZlX3Byb2ZpbGU7CistCisgICAgIHBhX2hhc2htYXAgKnBvcnRzOworICAgICBwYV9kZXZpY2VfcG9ydCAqcHJlZmVycmVkX2lucHV0X3BvcnQ7CisgICAgIHBhX2RldmljZV9wb3J0ICpwcmVmZXJyZWRfb3V0cHV0X3BvcnQ7CisgCisgICAgIGJvb2wgbmFtZXJlZ19mYWlsOjE7CistCistICAgIGJvb2wgc2F2ZV9wcm9maWxlOjE7CisgfSBwYV9jYXJkX25ld19kYXRhOworIAorIHR5cGVkZWYgc3RydWN0IHsKK0BAIC0xMjUsNyArMTIxLDYgQEAgdm9pZCBwYV9jYXJkX3Byb2ZpbGVfc2V0X2F2YWlsYWJsZShwYV9jYXJkX3Byb2ZpbGUgKmMsIHBhX2F2YWlsYWJsZV90IGF2YWlsYWJsZSkKKyAKKyBwYV9jYXJkX25ld19kYXRhICpwYV9jYXJkX25ld19kYXRhX2luaXQocGFfY2FyZF9uZXdfZGF0YSAqZGF0YSk7Cisgdm9pZCBwYV9jYXJkX25ld19kYXRhX3NldF9uYW1lKHBhX2NhcmRfbmV3X2RhdGEgKmRhdGEsIGNvbnN0IGNoYXIgKm5hbWUpOworLXZvaWQgcGFfY2FyZF9uZXdfZGF0YV9zZXRfcHJvZmlsZShwYV9jYXJkX25ld19kYXRhICpkYXRhLCBjb25zdCBjaGFyICpwcm9maWxlKTsKKyB2b2lkIHBhX2NhcmRfbmV3X2RhdGFfc2V0X3ByZWZlcnJlZF9wb3J0KHBhX2NhcmRfbmV3X2RhdGEgKmRhdGEsIHBhX2RpcmVjdGlvbl90IGRpcmVjdGlvbiwgcGFfZGV2aWNlX3BvcnQgKnBvcnQpOworIHZvaWQgcGFfY2FyZF9uZXdfZGF0YV9kb25lKHBhX2NhcmRfbmV3X2RhdGEgKmRhdGEpOworIAorLS0gCisyLjguMQorCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvcHVsc2VhdWRpby9wdWxzZWF1ZGlvLzAwMDUtYWxzYS1zZXQtYXZhaWxhYmlsaXR5LWZvci1zb21lLXVuYXZhaWxhYmxlLXByb2ZpbGVzLnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL3B1bHNlYXVkaW8vcHVsc2VhdWRpby8wMDA1LWFsc2Etc2V0LWF2YWlsYWJpbGl0eS1mb3Itc29tZS11bmF2YWlsYWJsZS1wcm9maWxlcy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NTYzZDJjCi0tLSAvZGV2L251bGwKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL3B1bHNlYXVkaW8vcHVsc2VhdWRpby8wMDA1LWFsc2Etc2V0LWF2YWlsYWJpbGl0eS1mb3Itc29tZS11bmF2YWlsYWJsZS1wcm9maWxlcy5wYXRjaApAQCAtMCwwICsxLDc5IEBACitGcm9tIGFlNmEwMWJhMjA0YjQ4MGJkYTZhNWI0NDMxYmUzZDIyZTUzYTcwMDYgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBUYW51IEthc2tpbmVuIDx0YW51a0Bpa2kuZmk+CitEYXRlOiBGcmksIDIzIE9jdCAyMDE1IDEzOjM3OjExICswMzAwCitTdWJqZWN0OiBbUEFUQ0ggNS81XSBhbHNhOiBzZXQgYXZhaWxhYmlsaXR5IGZvciAoc29tZSkgdW5hdmFpbGFibGUgcHJvZmlsZXMKKworVGhlIGFsc2EgY2FyZCBoYXNuJ3Qgc28gZmFyIHNldCBhbnkgYXZhaWxhYmlsaXR5IGZvciBwcm9maWxlcy4gVGhhdAorY2F1c2VkIGFuIGlzc3VlIHdpdGggc29tZSBIRE1JIGhhcmR3YXJlOiB0aGUgc291bmQgY2FyZCBoYXMgdHdvIEhETUkKK291dHB1dHMsIGJ1dCBvbmx5IHRoZSBzZWNvbmQgb2YgdGhlbSBpcyBhY3R1YWxseSB1c2FibGUuIFRoZQordW5hdmFpbGFibGUgcG9ydCBpcyBtYXJrZWQgYXMgdW5hdmFpbGFibGUgYW5kIHRoZSBhdmFpbGFibGUgcG9ydCBpcworbWFya2VkIGFzIGF2YWlsYWJsZSwgYnV0IHRoaXMgaW5mb3JtYXRpb24gaXNuJ3QgcHJvcGFnYXRlZCB0byB0aGUKK3Byb2ZpbGUgYXZhaWxhYmlsaXR5LiBXaXRob3V0IHByb2ZpbGUgYXZhaWxhYmlsaXR5IGluZm9ybWF0aW9uLCB0aGUKK2luaXRpYWwgcHJvZmlsZSBwb2xpY3kgcGlja3MgdGhlIHVuYXZhaWxhYmxlIG9uZSwgc2luY2UgaXQgaGFzIGEKK2hpZ2hlciBwcmlvcml0eSB2YWx1ZS4KKworVGhpcyBwYXRjaCBhZGRzIHNpbXBsZSBsb2dpYyBmb3IgbWFya2luZyBzb21lIHByb2ZpbGVzIHVuYXZhaWxhYmxlOgoraWYgdGhlIHByb2ZpbGUgb25seSBjb250YWlucyB1bmF2YWlsYWJsZSBwb3J0cywgdGhlIHByb2ZpbGUgaXMKK3VuYXZhaWxhYmxlIHRvby4gVGhpcyBjYW4gYmUgaW1wcm92ZWQgaW4gdGhlIGZ1dHVyZSBzbyB0aGF0IGlmIGEKK3Byb2ZpbGUgY29udGFpbnMgc2lua3Mgb3Igc291cmNlcyB0aGF0IG9ubHkgY29udGFpbiB1bmF2YWlsYWJsZSBwb3J0cywKK3RoZSBwcm9maWxlIHNob3VsZCBiZSBtYXJrZWQgYXMgdW5hdmFpbGFibGUuIEltcGxlbWVudGluZyB0aGF0CityZXF1aXJlcyBhZGRpbmcgbW9yZSBpbmZvcm1hdGlvbiBhYm91dCB0aGUgc2lua3MgYW5kIHNvdXJjZXMgdG8KK3BhX2NhcmRfcHJvZmlsZSwgaG93ZXZlci4KKworQnVnTGluazogaHR0cHM6Ly9idWd6aWxsYS55b2N0b3Byb2plY3Qub3JnL3Nob3dfYnVnLmNnaT9pZD04NDQ4CisKK1Vwc3RyZWFtLVN0YXR1czogQWNjZXB0ZWQgW2V4cGVjdGVkIGluIDEwLjBdCisKK1NpZ25lZC1vZmYtYnk6IFRhbnUgS2Fza2luZW4gPHRhbnVrQGlraS5maT4KKy0tLQorIHNyYy9tb2R1bGVzL2Fsc2EvbW9kdWxlLWFsc2EtY2FyZC5jIHwgMjcgKysrKysrKysrKysrKysrKysrKysrKysrKysrCisgMSBmaWxlIGNoYW5nZWQsIDI3IGluc2VydGlvbnMoKykKKworZGlmZiAtLWdpdCBhL3NyYy9tb2R1bGVzL2Fsc2EvbW9kdWxlLWFsc2EtY2FyZC5jIGIvc3JjL21vZHVsZXMvYWxzYS9tb2R1bGUtYWxzYS1jYXJkLmMKK2luZGV4IDE5NzYyMzAuLjMyM2UwOGEgMTAwNjQ0CistLS0gYS9zcmMvbW9kdWxlcy9hbHNhL21vZHVsZS1hbHNhLWNhcmQuYworKysrIGIvc3JjL21vZHVsZXMvYWxzYS9tb2R1bGUtYWxzYS1jYXJkLmMKK0BAIC0zNjYsNiArMzY2LDcgQEAgc3RhdGljIGludCByZXBvcnRfamFja19zdGF0ZShzbmRfbWl4ZXJfZWxlbV90ICptZWxlbSwgdW5zaWduZWQgaW50IG1hc2spIHsKKyAgICAgdm9pZCAqc3RhdGU7CisgICAgIHBhX2Fsc2FfamFjayAqamFjazsKKyAgICAgc3RydWN0IHRlbXBfcG9ydF9hdmFpbCAqdHAsICp0cG9ydHM7CisrICAgIHBhX2NhcmRfcHJvZmlsZSAqcHJvZmlsZTsKKyAKKyAgICAgcGFfYXNzZXJ0KHUpOworIAorQEAgLTQyNiw2ICs0MjcsMzIgQEAgc3RhdGljIGludCByZXBvcnRfamFja19zdGF0ZShzbmRfbWl4ZXJfZWxlbV90ICptZWxlbSwgdW5zaWduZWQgaW50IG1hc2spIHsKKyAgICAgICAgIGlmICh0cC0+YXZhaWwgPT0gUEFfQVZBSUxBQkxFX05PKQorICAgICAgICAgICAgcGFfZGV2aWNlX3BvcnRfc2V0X2F2YWlsYWJsZSh0cC0+cG9ydCwgdHAtPmF2YWlsKTsKKyAKKysgICAgLyogVXBkYXRlIHByb2ZpbGUgYXZhaWxhYmlsaXRpZXMuIFRoZSBsb2dpYyBjb3VsZCBiZSBpbXByb3ZlZDsgZm9yIG5vdyB3ZQorKyAgICAgKiBvbmx5IHNldCBvYnZpb3VzbHkgdW5hdmFpbGFibGUgcHJvZmlsZXMgKHRob3NlIHRoYXQgY29udGFpbiBvbmx5CisrICAgICAqIHVuYXZhaWxhYmxlIHBvcnRzKSB0byBQQV9BVkFJTEFCTEVfTk8gYW5kIGFsbCBvdGhlcnMgdG8KKysgICAgICogUEFfQVZBSUxBQkxFX1VOS05PV04uICovCisrICAgIFBBX0hBU0hNQVBfRk9SRUFDSChwcm9maWxlLCB1LT5jYXJkLT5wcm9maWxlcywgc3RhdGUpIHsKKysgICAgICAgIHBhX2RldmljZV9wb3J0ICpwb3J0OworKyAgICAgICAgdm9pZCAqc3RhdGUyOworKyAgICAgICAgcGFfYXZhaWxhYmxlX3QgYXZhaWxhYmxlID0gUEFfQVZBSUxBQkxFX05POworKworKyAgICAgICAgLyogRG9uJ3QgdG91Y2ggdGhlICJvZmYiIHByb2ZpbGUuICovCisrICAgICAgICBpZiAocHJvZmlsZS0+bl9zb3VyY2VzID09IDAgJiYgcHJvZmlsZS0+bl9zaW5rcyA9PSAwKQorKyAgICAgICAgICAgIGNvbnRpbnVlOworKworKyAgICAgICAgUEFfSEFTSE1BUF9GT1JFQUNIKHBvcnQsIHUtPmNhcmQtPnBvcnRzLCBzdGF0ZTIpIHsKKysgICAgICAgICAgICBpZiAoIXBhX2hhc2htYXBfZ2V0KHBvcnQtPnByb2ZpbGVzLCBwcm9maWxlLT5uYW1lKSkKKysgICAgICAgICAgICAgICAgY29udGludWU7CisrCisrICAgICAgICAgICAgaWYgKHBvcnQtPmF2YWlsYWJsZSAhPSBQQV9BVkFJTEFCTEVfTk8pIHsKKysgICAgICAgICAgICAgICAgYXZhaWxhYmxlID0gUEFfQVZBSUxBQkxFX1VOS05PV047CisrICAgICAgICAgICAgICAgIGJyZWFrOworKyAgICAgICAgICAgIH0KKysgICAgICAgIH0KKysKKysgICAgICAgIHBhX2NhcmRfcHJvZmlsZV9zZXRfYXZhaWxhYmxlKHByb2ZpbGUsIGF2YWlsYWJsZSk7CisrICAgIH0KKysKKyAgICAgcGFfeGZyZWUodHBvcnRzKTsKKyAgICAgcmV0dXJuIDA7CisgfQorLS0gCisyLjguMQorCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvcHVsc2VhdWRpby9wdWxzZWF1ZGlvXzguMC5iYiBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9wdWxzZWF1ZGlvL3B1bHNlYXVkaW9fOC4wLmJiCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiMDFiYThmLi4wMDAwMDAwCi0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9wdWxzZWF1ZGlvL3B1bHNlYXVkaW9fOC4wLmJiCisrKyAvZGV2L251bGwKQEAgLTEsMTkgKzAsMCBAQAotcmVxdWlyZSBwdWxzZWF1ZGlvLmluYwotCi1TUkNfVVJJID0gImh0dHA6Ly9mcmVlZGVza3RvcC5vcmcvc29mdHdhcmUvcHVsc2VhdWRpby9yZWxlYXNlcy8ke0JQfS50YXIueHogXAotICAgICAgICAgICBmaWxlOi8vMDAwMS1wYWRzcC1NYWtlLWl0LWNvbXBpbGUtb24tbXVzbC5wYXRjaCBcCi0gICAgICAgICAgIGZpbGU6Ly8wMDAxLWNsaWVudC1jb25mLUFkZC1hbGxvdy1hdXRvc3Bhd24tZm9yLXJvb3QucGF0Y2ggXAotICAgICAgICAgICBmaWxlOi8vdm9sYXRpbGVzLjA0X3B1bHNlIFwKLSAgICAgICAgICAgZmlsZTovLzAwMDEtY2FyZC1hZGQtcGFfY2FyZF9wcm9maWxlLnBvcnRzLnBhdGNoIFwKLSAgICAgICAgICAgZmlsZTovLzAwMDItYWxzYS1ibHVldG9vdGgtZmFpbC1pZi11c2VyLXJlcXVlc3RlZC1wcm9maWxlLWRvZXNuLS5wYXRjaCBcCi0gICAgICAgICAgIGZpbGU6Ly8wMDAzLWNhcmQtbW92ZS1wcm9maWxlLXNlbGVjdGlvbi1hZnRlci1wYV9jYXJkX25ldy5wYXRjaCBcCi0gICAgICAgICAgIGZpbGU6Ly8wMDA0LWFsc2Etc2V0LWF2YWlsYWJpbGl0eS1mb3Itc29tZS11bmF2YWlsYWJsZS1wcm9maWxlcy5wYXRjaCBcCi0gICAgICAgICAgIGZpbGU6Ly8wMDAxLVJldmVydC1tb2R1bGUtc3dpdGNoLW9uLXBvcnQtYXZhaWxhYmxlLVJvdXRlLXRvLXByZWYucGF0Y2ggXAotIgotU1JDX1VSSVttZDVzdW1dID0gIjg2Nzg0NDJiYTBiYjRiNGMzM2FjNmY2MjU0Mjk2MmRmIgotU1JDX1VSSVtzaGEyNTZzdW1dID0gIjY5MGVlZmUyODYzMzQ2NmNmZDFhYjlkODVlYmZhOTM3NmY2YjYyMmRlZWM2YmZlZTUwOTFhYzk3MzdjZDE5ODkiCi0KLWRvX2NvbXBpbGVfcHJlcGVuZCgpIHsKLSAgICBta2RpciAtcCAke1N9L2xpYmx0ZGwKLSAgICBjcCAke1NUQUdJTkdfTElCRElSfS9saWJsdGRsKiAke1N9L2xpYmx0ZGwKLX0KZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9wdWxzZWF1ZGlvL3B1bHNlYXVkaW9fOS4wLmJiIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL3B1bHNlYXVkaW8vcHVsc2VhdWRpb185LjAuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDBmNTQ0MgotLS0gL2Rldi9udWxsCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9wdWxzZWF1ZGlvL3B1bHNlYXVkaW9fOS4wLmJiCkBAIC0wLDAgKzEsMTkgQEAKK3JlcXVpcmUgcHVsc2VhdWRpby5pbmMKKworU1JDX1VSSSA9ICJodHRwOi8vZnJlZWRlc2t0b3Aub3JnL3NvZnR3YXJlL3B1bHNlYXVkaW8vcmVsZWFzZXMvJHtCUH0udGFyLnh6IFwKKyAgICAgICAgICAgZmlsZTovLzAwMDEtcGFkc3AtTWFrZS1pdC1jb21waWxlLW9uLW11c2wucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vMDAwMS1jbGllbnQtY29uZi1BZGQtYWxsb3ctYXV0b3NwYXduLWZvci1yb290LnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovLzAwMDEtYWxzYS1ibHVldG9vdGgtZmFpbC1pZi11c2VyLXJlcXVlc3RlZC1wcm9maWxlLWRvZXNuLS5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly8wMDAyLWNhcmQtZG9uLXQtYWxsb3ctdGhlLUNBUkRfTkVXLWhvb2stdG8tZmFpbC5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly8wMDAzLWNhcmQtbW92ZS1wcm9maWxlLXNlbGVjdGlvbi1hZnRlci1wYV9jYXJkX25ldy5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly8wMDA0LWNhcmQtcmVtb3ZlLXBhX2NhcmRfbmV3X2RhdGEuYWN0aXZlX3Byb2ZpbGUucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vMDAwNS1hbHNhLXNldC1hdmFpbGFiaWxpdHktZm9yLXNvbWUtdW5hdmFpbGFibGUtcHJvZmlsZXMucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vdm9sYXRpbGVzLjA0X3B1bHNlIFwKKyIKK1NSQ19VUklbbWQ1c3VtXSA9ICJkYTcxNjI1NDFiM2E5YmMyMDU3NmRiZDBkN2QxNDg5YSIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICJjM2QzZDY2YjgyN2YxOGZiZTkwM2ZlM2RmNjQ3MDEzZjA5ZmMxZTIxOTFjMDM1YmUxZWUyZDgyYTllNDA0Njg2IgorCitkb19jb21waWxlX3ByZXBlbmQoKSB7CisgICAgbWtkaXIgLXAgJHtTfS9saWJsdGRsCisgICAgY3AgJHtTVEFHSU5HX0xJQkRJUn0vbGlibHRkbCogJHtTfS9saWJsdGRsCit9CmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvd2VicC9saWJ3ZWJwXzAuNS4wLmJiIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL3dlYnAvbGlid2VicF8wLjUuMC5iYgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzg5YWRhYy4uMDAwMDAwMAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvd2VicC9saWJ3ZWJwXzAuNS4wLmJiCisrKyAvZGV2L251bGwKQEAgLTEsNDkgKzAsMCBAQAotU1VNTUFSWSA9ICJXZWJQIGlzIGFuIGltYWdlIGZvcm1hdCBkZXNpZ25lZCBmb3IgdGhlIFdlYiIKLURFU0NSSVBUSU9OID0gIldlYlAgaXMgYSBtZXRob2Qgb2YgbG9zc3kgYW5kIGxvc3NsZXNzIGNvbXByZXNzaW9uIHRoYXQgY2FuIGJlIFwKLSAgICAgICAgICAgICAgIHVzZWQgb24gYSBsYXJnZSB2YXJpZXR5IG9mIHBob3RvZ3JhcGhpYywgdHJhbnNsdWNlbnQgYW5kIFwKLSAgICAgICAgICAgICAgIGdyYXBoaWNhbCBpbWFnZXMgZm91bmQgb24gdGhlIHdlYi4gVGhlIGRlZ3JlZSBvZiBsb3NzeSBcCi0gICAgICAgICAgICAgICBjb21wcmVzc2lvbiBpcyBhZGp1c3RhYmxlIHNvIGEgdXNlciBjYW4gY2hvb3NlIHRoZSB0cmFkZS1vZmYgXAotICAgICAgICAgICAgICAgYmV0d2VlbiBmaWxlIHNpemUgYW5kIGltYWdlIHF1YWxpdHkuIFdlYlAgdHlwaWNhbGx5IGFjaGlldmVzIFwKLSAgICAgICAgICAgICAgIGFuIGF2ZXJhZ2Ugb2YgMzAlIG1vcmUgY29tcHJlc3Npb24gdGhhbiBKUEVHIGFuZCBKUEVHIDIwMDAsIFwKLSAgICAgICAgICAgICAgIHdpdGhvdXQgbG9zcyBvZiBpbWFnZSBxdWFsaXR5LiIKLUhPTUVQQUdFID0gImh0dHBzOi8vZGV2ZWxvcGVycy5nb29nbGUuY29tL3NwZWVkL3dlYnAvIgotU0VDVElPTiA9ICJsaWJzIgotCi1MSUNFTlNFID0gIkJTRCIKLUxJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PTZlOGRlZTkzMmMyNmYyZGFiNTAzYWJmNzBjOTZkOGJiIFwKLSAgICAgICAgICAgICAgICAgICAgZmlsZTovL1BBVEVOVFM7bWQ1PWM2OTI2ZDBjYjA3ZDI5NmY4ODZhYjZlMGNjNWE4NWI3IgotCi1TUkNfVVJJID0gImh0dHA6Ly9kb3dubG9hZHMud2VibXByb2plY3Qub3JnL3JlbGVhc2VzL3dlYnAvJHtCUH0udGFyLmd6IgotU1JDX1VSSVttZDVzdW1dID0gImJhODFlYjliZjIzZTNjNjlhMmY1Y2M4ZGNkYjU5MzhmIgotU1JDX1VSSVtzaGEyNTZzdW1dID0gIjVjZDNiYjdiNjIzYWZmMWY0ZTcwYmQ2MTFkYzhkYmFiYmY3Njg4ZmQ1ZWIyMjViMzJlMDJlMDllMzdkZmIyNzQiCi0KLVVQU1RSRUFNX0NIRUNLX1VSSSA9ICJodHRwOi8vZG93bmxvYWRzLndlYm1wcm9qZWN0Lm9yZy9yZWxlYXNlcy93ZWJwL2luZGV4Lmh0bWwiCi0KLUVYVFJBX09FQ09ORiA9ICIgXAotICAgIC0tZGlzYWJsZS1leHBlcmltZW50YWwgXAotICAgIC0tZGlzYWJsZS13aWMgXAotICAgIC0tZW5hYmxlLWxpYndlYnBtdXggXAotICAgIC0tZW5hYmxlLWxpYndlYnBkZW11eCBcCi0gICAgLS1lbmFibGUtdGhyZWFkaW5nIFwKLSIKLQotaW5oZXJpdCBhdXRvdG9vbHMgbGliX3BhY2thZ2UKLQotUEFDS0FHRUNPTkZJRyA/Pz0gIiIKLQotIyBsaWJ3ZWJwZGVjb2RlciBpcyBhIHN1YnNldCBvZiBsaWJ3ZWJwLCBkb24ndCBidWlsZCBpdCB1bmxlc3MgcmVxdWVzdGVkCi1QQUNLQUdFQ09ORklHW2RlY29kZXJdID0gIi0tZW5hYmxlLWxpYndlYnBkZWNvZGVyLC0tZGlzYWJsZS1saWJ3ZWJwZGVjb2RlciIKLQotIyBBcHBseSBmb3IgZXhhbXBsZXMgcHJvZ3JhbXM6IGN3ZWJwIGFuZCBkd2VicAotUEFDS0FHRUNPTkZJR1tnaWZdID0gIi0tZW5hYmxlLWdpZiwtLWRpc2FibGUtZ2lmLGdpZmxpYiIKLVBBQ0tBR0VDT05GSUdbanBlZ10gPSAiLS1lbmFibGUtanBlZywtLWRpc2FibGUtanBlZyxqcGVnIgotUEFDS0FHRUNPTkZJR1twbmddID0gIi0tZW5hYmxlLXBuZywtLWRpc2FibGUtcG5nLCxsaWJwbmciCi1QQUNLQUdFQ09ORklHW3RpZmZdID0gIi0tZW5hYmxlLXRpZmYsLS1kaXNhYmxlLXRpZmYsdGlmZiIKLQotIyBBcHBseSBvbmx5IGZvciBleGFtcGxlIHByb2dyYW0gdndlYnAKLVBBQ0tBR0VDT05GSUdbZ2xdID0gIi0tZW5hYmxlLWdsLC0tZGlzYWJsZS1nbCxtZXNhLWdsdXQiCi0KLVBBQ0tBR0VTID0rICIke1BOfS1naWYyd2VicCIKLQotREVTQ1JJUFRJT05fJHtQTn0tZ2lmMndlYnAgPSAiU2ltcGxlIHRvb2wgdG8gY29udmVydCBhbmltYXRlZCBHSUZzIHRvIFdlYlAiCi1GSUxFU18ke1BOfS1naWYyd2VicCA9ICIke2JpbmRpcn0vZ2lmMndlYnAiCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvd2VicC9saWJ3ZWJwXzAuNS4xLmJiIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL3dlYnAvbGlid2VicF8wLjUuMS5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iODgyZGI3Ci0tLSAvZGV2L251bGwKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL3dlYnAvbGlid2VicF8wLjUuMS5iYgpAQCAtMCwwICsxLDU0IEBACitTVU1NQVJZID0gIldlYlAgaXMgYW4gaW1hZ2UgZm9ybWF0IGRlc2lnbmVkIGZvciB0aGUgV2ViIgorREVTQ1JJUFRJT04gPSAiV2ViUCBpcyBhIG1ldGhvZCBvZiBsb3NzeSBhbmQgbG9zc2xlc3MgY29tcHJlc3Npb24gdGhhdCBjYW4gYmUgXAorICAgICAgICAgICAgICAgdXNlZCBvbiBhIGxhcmdlIHZhcmlldHkgb2YgcGhvdG9ncmFwaGljLCB0cmFuc2x1Y2VudCBhbmQgXAorICAgICAgICAgICAgICAgZ3JhcGhpY2FsIGltYWdlcyBmb3VuZCBvbiB0aGUgd2ViLiBUaGUgZGVncmVlIG9mIGxvc3N5IFwKKyAgICAgICAgICAgICAgIGNvbXByZXNzaW9uIGlzIGFkanVzdGFibGUgc28gYSB1c2VyIGNhbiBjaG9vc2UgdGhlIHRyYWRlLW9mZiBcCisgICAgICAgICAgICAgICBiZXR3ZWVuIGZpbGUgc2l6ZSBhbmQgaW1hZ2UgcXVhbGl0eS4gV2ViUCB0eXBpY2FsbHkgYWNoaWV2ZXMgXAorICAgICAgICAgICAgICAgYW4gYXZlcmFnZSBvZiAzMCUgbW9yZSBjb21wcmVzc2lvbiB0aGFuIEpQRUcgYW5kIEpQRUcgMjAwMCwgXAorICAgICAgICAgICAgICAgd2l0aG91dCBsb3NzIG9mIGltYWdlIHF1YWxpdHkuIgorSE9NRVBBR0UgPSAiaHR0cHM6Ly9kZXZlbG9wZXJzLmdvb2dsZS5jb20vc3BlZWQvd2VicC8iCitTRUNUSU9OID0gImxpYnMiCisKK0xJQ0VOU0UgPSAiQlNEIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9NmU4ZGVlOTMyYzI2ZjJkYWI1MDNhYmY3MGM5NmQ4YmIgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vUEFURU5UUzttZDU9YzY5MjZkMGNiMDdkMjk2Zjg4NmFiNmUwY2M1YTg1YjciCisKK1NSQ19VUkkgPSAiaHR0cDovL2Rvd25sb2Fkcy53ZWJtcHJvamVjdC5vcmcvcmVsZWFzZXMvd2VicC8ke0JQfS50YXIuZ3oiCitTUkNfVVJJW21kNXN1bV0gPSAiM2Q3ZGI5MmViYmE1YjRmNjc5NDEzZDI1YzYwNDA4ODEiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiNmFkNjZjNmZjZDYwYTAyM2RlMjBiNjg1NmIwM2RhOGM3ZDM0NzI2OWQ3NmIxZmQ5YzMyODdlOGI1ZTg4MTNkZiIKKworVVBTVFJFQU1fQ0hFQ0tfVVJJID0gImh0dHA6Ly9kb3dubG9hZHMud2VibXByb2plY3Qub3JnL3JlbGVhc2VzL3dlYnAvaW5kZXguaHRtbCIKKworRVhUUkFfT0VDT05GID0gIiBcCisgICAgLS1kaXNhYmxlLWV4cGVyaW1lbnRhbCBcCisgICAgLS1kaXNhYmxlLXdpYyBcCisgICAgLS1lbmFibGUtbGlid2VicG11eCBcCisgICAgLS1lbmFibGUtbGlid2VicGRlbXV4IFwKKyAgICAtLWVuYWJsZS10aHJlYWRpbmcgXAorIgorIyBEbyBub3QgdHJ1c3QgY29uZmlndXJlIHRvIGRldGVybWluZSBpZiBuZW9uIGlzIGF2YWlsYWJsZS4KKyMKK0VYVFJBX09FQ09ORl9hcHBlbmRfYXJtID0gIiBcCisgICAgJHtAYmIudXRpbHMuY29udGFpbnMoIlRVTkVfRkVBVFVSRVMiLCJuZW9uIiwiLS1lbmFibGUtbmVvbiIsIi0tZGlzYWJsZS1uZW9uIixkKX0gXAorIgorCitpbmhlcml0IGF1dG90b29scyBsaWJfcGFja2FnZQorCitQQUNLQUdFQ09ORklHID8/PSAiIgorCisjIGxpYndlYnBkZWNvZGVyIGlzIGEgc3Vic2V0IG9mIGxpYndlYnAsIGRvbid0IGJ1aWxkIGl0IHVubGVzcyByZXF1ZXN0ZWQKK1BBQ0tBR0VDT05GSUdbZGVjb2Rlcl0gPSAiLS1lbmFibGUtbGlid2VicGRlY29kZXIsLS1kaXNhYmxlLWxpYndlYnBkZWNvZGVyIgorCisjIEFwcGx5IGZvciBleGFtcGxlcyBwcm9ncmFtczogY3dlYnAgYW5kIGR3ZWJwCitQQUNLQUdFQ09ORklHW2dpZl0gPSAiLS1lbmFibGUtZ2lmLC0tZGlzYWJsZS1naWYsZ2lmbGliIgorUEFDS0FHRUNPTkZJR1tqcGVnXSA9ICItLWVuYWJsZS1qcGVnLC0tZGlzYWJsZS1qcGVnLGpwZWciCitQQUNLQUdFQ09ORklHW3BuZ10gPSAiLS1lbmFibGUtcG5nLC0tZGlzYWJsZS1wbmcsLGxpYnBuZyIKK1BBQ0tBR0VDT05GSUdbdGlmZl0gPSAiLS1lbmFibGUtdGlmZiwtLWRpc2FibGUtdGlmZix0aWZmIgorCisjIEFwcGx5IG9ubHkgZm9yIGV4YW1wbGUgcHJvZ3JhbSB2d2VicAorUEFDS0FHRUNPTkZJR1tnbF0gPSAiLS1lbmFibGUtZ2wsLS1kaXNhYmxlLWdsLG1lc2EtZ2x1dCIKKworUEFDS0FHRVMgPSsgIiR7UE59LWdpZjJ3ZWJwIgorCitERVNDUklQVElPTl8ke1BOfS1naWYyd2VicCA9ICJTaW1wbGUgdG9vbCB0byBjb252ZXJ0IGFuaW1hdGVkIEdJRnMgdG8gV2ViUCIKK0ZJTEVTXyR7UE59LWdpZjJ3ZWJwID0gIiR7YmluZGlyfS9naWYyd2VicCIKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS94MjY0L3gyNjRfZ2l0LmJiIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL3gyNjQveDI2NF9naXQuYmIKaW5kZXggMGE2OTkwOS4uMzkzMzEwZiAxMDA2NDQKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL3gyNjQveDI2NF9naXQuYmIKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL3gyNjQveDI2NF9naXQuYmIKQEAgLTQyLDE0ICs0MiwxMiBAQAogICAgIC4vY29uZmlndXJlICR7RVhUUkFfT0VDT05GfQogfQogCi0jIEdldCByaWQgb2YgLWUKLUVYVFJBX09FTUFLRSA9ICIiCiBBUyA9ICIke1RBUkdFVF9QUkVGSVh9Z2NjIgogCiBkb19pbnN0YWxsKCkgewogICAgIG9lX3J1bm1ha2UgaW5zdGFsbCBERVNURElSPSR7RH0KIH0KIAotIyBQSUMgY2FuJ3QgYmUgZW5hYmxlZCBmb3IgMzItYml0IHg4NgotSU5TQU5FX1NLSVBfJHtQTn1fYXBwZW5kX3g4NiA9ICIgdGV4dHJlbCIKKyMgUElDIGNhbid0IGJlIGVuYWJsZWQgZm9yIGZldyBCU1AncworSU5TQU5FX1NLSVBfJHtQTn1fYXBwZW5kID0gIiB0ZXh0cmVsIgogCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXJ0L2ltYWdlcy9jb3JlLWltYWdlLXJ0LXNkay5iYiBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtcnQvaW1hZ2VzL2NvcmUtaW1hZ2UtcnQtc2RrLmJiCmluZGV4IGRiN2Q1ODEuLjdkZGY2NzEgMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtcnQvaW1hZ2VzL2NvcmUtaW1hZ2UtcnQtc2RrLmJiCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtcnQvaW1hZ2VzL2NvcmUtaW1hZ2UtcnQtc2RrLmJiCkBAIC0xLDUgKzEsMTMgQEAKIHJlcXVpcmUgcmVjaXBlcy1jb3JlL2ltYWdlcy9jb3JlLWltYWdlLW1pbmltYWwuYmIKIAorIyBTa2lwIHByb2Nlc3Npbmcgb2YgdGhpcyByZWNpcGUgaWYgbGludXgteW9jdG8tcnQgaXMgbm90IGV4cGxpY2l0bHkgc3BlY2lmaWVkIGFzIHRoZQorIyBQUkVGRVJSRURfUFJPVklERVIgZm9yIHZpcnR1YWwva2VybmVsLiBUaGlzIGF2b2lkcyBlcnJvcnMgd2hlbiB0cnlpbmcKKyMgdG8gYnVpbGQgbXVsdGlwbGUgdmlydHVhbC9rZXJuZWwgcHJvdmlkZXJzLgorcHl0aG9uICgpIHsKKyAgICBpZiBkLmdldFZhcigiUFJFRkVSUkVEX1BST1ZJREVSX3ZpcnR1YWwva2VybmVsIiwgVHJ1ZSkgIT0gImxpbnV4LXlvY3RvLXJ0IjoKKyAgICAgICAgcmFpc2UgYmIucGFyc2UuU2tpcFBhY2thZ2UoIlNldCBQUkVGRVJSRURfUFJPVklERVJfdmlydHVhbC9rZXJuZWwgdG8gbGludXgteW9jdG8tcnQgdG8gZW5hYmxlIGl0IikKK30KKwogREVTQ1JJUFRJT04gPSAiU21hbGwgaW1hZ2UgY2FwYWJsZSBvZiBib290aW5nIGEgZGV2aWNlIHdpdGggYSB0ZXN0IHN1aXRlIGFuZCBcCiB0b29scyBmb3IgcmVhbC10aW1lIHVzZS4gSXQgaW5jbHVkZXMgdGhlIGZ1bGwgbWV0YS10b29sY2hhaW4sIGRldmVsb3BtZW50IFwKIGhlYWRlcnMgYW5kIGxpYnJhcmllcyB0byBmb3JtIGEgc3RhbmRhbG9uZSBTREsuIgpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ydC9pbWFnZXMvY29yZS1pbWFnZS1ydC5iYiBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtcnQvaW1hZ2VzL2NvcmUtaW1hZ2UtcnQuYmIKaW5kZXggY2FiNmY4Yi4uOWM4NmYyNSAxMDA2NDQKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ydC9pbWFnZXMvY29yZS1pbWFnZS1ydC5iYgorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXJ0L2ltYWdlcy9jb3JlLWltYWdlLXJ0LmJiCkBAIC0xLDUgKzEsMTMgQEAKIHJlcXVpcmUgcmVjaXBlcy1jb3JlL2ltYWdlcy9jb3JlLWltYWdlLW1pbmltYWwuYmIKIAorIyBTa2lwIHByb2Nlc3Npbmcgb2YgdGhpcyByZWNpcGUgaWYgbGludXgteW9jdG8tcnQgaXMgbm90IGV4cGxpY2l0bHkgc3BlY2lmaWVkIGFzIHRoZQorIyBQUkVGRVJSRURfUFJPVklERVIgZm9yIHZpcnR1YWwva2VybmVsLiBUaGlzIGF2b2lkcyBlcnJvcnMgd2hlbiB0cnlpbmcKKyMgdG8gYnVpbGQgbXVsdGlwbGUgdmlydHVhbC9rZXJuZWwgcHJvdmlkZXJzLgorcHl0aG9uICgpIHsKKyAgICBpZiBkLmdldFZhcigiUFJFRkVSUkVEX1BST1ZJREVSX3ZpcnR1YWwva2VybmVsIiwgVHJ1ZSkgIT0gImxpbnV4LXlvY3RvLXJ0IjoKKyAgICAgICAgcmFpc2UgYmIucGFyc2UuU2tpcFBhY2thZ2UoIlNldCBQUkVGRVJSRURfUFJPVklERVJfdmlydHVhbC9rZXJuZWwgdG8gbGludXgteW9jdG8tcnQgdG8gZW5hYmxlIGl0IikKK30KKwogREVTQ1JJUFRJT04gPSAiQSBzbWFsbCBpbWFnZSBqdXN0IGNhcGFibGUgb2YgYWxsb3dpbmcgYSBkZXZpY2UgdG8gYm9vdCBwbHVzIGEgXAogcmVhbC10aW1lIHRlc3Qgc3VpdGUgYW5kIHRvb2xzIGFwcHJvcHJpYXRlIGZvciByZWFsLXRpbWUgdXNlLiIKIERFUEVORFMgPSAibGludXgteW9jdG8tcnQiCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXJ0L3J0LXRlc3RzL2ZpbGVzLzAwMDEtTWFrZWZpbGUtU2V0LUNDLUFSLXZhcmlhYmxlLW9ubHktaWYtaXQtZG9lc24tdC1oYXZlLS5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtcnQvcnQtdGVzdHMvZmlsZXMvMDAwMS1NYWtlZmlsZS1TZXQtQ0MtQVItdmFyaWFibGUtb25seS1pZi1pdC1kb2Vzbi10LWhhdmUtLnBhdGNoCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMGZjYzdkLi4wMDAwMDAwCi0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtcnQvcnQtdGVzdHMvZmlsZXMvMDAwMS1NYWtlZmlsZS1TZXQtQ0MtQVItdmFyaWFibGUtb25seS1pZi1pdC1kb2Vzbi10LWhhdmUtLnBhdGNoCisrKyAvZGV2L251bGwKQEAgLTEsMzAgKzAsMCBAQAotRnJvbSA5NjQwZGRlNDI0MWUxMzE0YjhlOGVhMzViMGM4ZGFiMGIzMGFlNTFmIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQotRnJvbTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KLURhdGU6IFN1biwgMyBKYW4gMjAxNiAxMDo1MDo1NiAtMDgwMAotU3ViamVjdDogW1BBVENIXSBNYWtlZmlsZTogU2V0IENDL0FSIHZhcmlhYmxlIG9ubHkgaWYgaXQgZG9lc24ndCBoYXZlIGEgdmFsdWUKLQotVGhpcyBoZWxwcyBpdCBjb21waWxlIHdpdGggY2xhbmcgb3IgYW55IG90aGVyIGNvbXBpbGVycyBiZXNpZGVzIGdjYwotCi1TaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgotLS0tCi1VcHN0cmVhbS1TdGF0dXM6IFN1Ym1pdHRlZAotCi0gTWFrZWZpbGUgfCA0ICsrLS0KLSAxIGZpbGUgY2hhbmdlZCwgMiBpbnNlcnRpb25zKCspLCAyIGRlbGV0aW9ucygtKQotCi1kaWZmIC0tZ2l0IGEvTWFrZWZpbGUgYi9NYWtlZmlsZQotaW5kZXggMWU0YjdkMS4uMmMyZDM5NiAxMDA2NDQKLS0tLSBhL01ha2VmaWxlCi0rKysgYi9NYWtlZmlsZQotQEAgLTEsNiArMSw2IEBACi0gVkVSU0lPTiA9IDAuOTYKLS1DQz0kKENST1NTX0NPTVBJTEUpZ2NjCi0tQVI9JChDUk9TU19DT01QSUxFKWFyCi0rQ0M/PSQoQ1JPU1NfQ09NUElMRSlnY2MKLStBUj89JChDUk9TU19DT01QSUxFKWFyCi0gCi0gT0JKRElSID0gYmxkCi0gCi0tLSAKLTIuNi40Ci0KZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtcnQvcnQtdGVzdHMvZmlsZXMvcnRfYm1hcmsucHkgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXJ0L3J0LXRlc3RzL2ZpbGVzL3J0X2JtYXJrLnB5CmluZGV4IGUyMjgwZTQuLjA4MGE2NTUgMTAwNzU1Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtcnQvcnQtdGVzdHMvZmlsZXMvcnRfYm1hcmsucHkKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ydC9ydC10ZXN0cy9maWxlcy9ydF9ibWFyay5weQpAQCAtMSw0ICsxLDQgQEAKLSMhL3Vzci9iaW4vcHl0aG9uCisjIS91c3IvYmluL2VudiBweXRob24zCiAjIC0qLSBjb2Rpbmc6IHV0Zi04IC0qLQogCiAjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiAgICAgQlNELTMtQ2xhdXNlCkBAIC0xMDYsOCArMTA2LDggQEAKIAogZGVmIGxvZygqbXNnKToKICAgICAgICAgdG1wID0gIiIuam9pbihtYXAoc3RyLCBtc2cpKSAjICdtYXAoc3RyLCAuLi4nIGFsbG93cyBudW1iZXJzCi0gICAgICAgIGZvciBsaW5lIGluIHRtcC5zcGxpdCgiXG4iKToKLSAgICAgICAgICAgICAgICBwcmludCAiIyIsIGxpbmUKKyAgICAgICAgZm9yIGxpbmUgaW4gdG1wLnNwbGl0bGluZXMoKToKKyAgICAgICAgICAgICAgICBwcmludCgiIyIsIGxpbmUpCiAKICMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAjIExpa2UgbG9nKCksIGJ1dCB3aXRoIGEgdGltZXN0YW1wIGFkZGVkCkBAIC0yNjUsNyArMjY1LDcgQEAKICAgICAgICAiLWQiLCBzdHIoaW50ZXJ2YWxfZGVsdGEpLAogICAgICAgICItbCIsIHN0cihsb29wX2NvdW50KQogICAgICAgICkKLXJleCA9IHJlLmNvbXBpbGUoIkM6XHMqKFxkKykuKk1pbjpccyooXGQrKS4qQXZnOlxzKihcZCspLipNYXg6XHMqKFxkKykiKQorcmV4ID0gcmUuY29tcGlsZShiIkM6XHMqKFxkKykuKk1pbjpccyooXGQrKS4qQXZnOlxzKihcZCspLipNYXg6XHMqKFxkKykiKQogCiBkZWYgcnVuX2N5Y2xpY3Rlc3Rfb25jZSgpOgogICAgICAgICByZXMgPSBzdWJwcm9jZXNzLmNoZWNrX291dHB1dChjbWQpCkBAIC0yODMsNyArMjgzLDcgQEAKICAgICAgICAgYXZnX3N1bSA9IDAKICAgICAgICAgYXZnX2NudCA9IDAKIAotICAgICAgICBmb3IgbGluZSBpbiByZXMuc3BsaXQoIlxuIik6CisgICAgICAgIGZvciBsaW5lIGluIHJlcy5zcGxpdGxpbmVzKCk6CiAgICAgICAgICAgICAgICAgbSA9IHJleC5zZWFyY2gobGluZSkKICAgICAgICAgICAgICAgICBpZiBtIGlzIG5vdCBOb25lOgogICAgICAgICAgICAgICAgICAgICAgICAgbWlubGlzdC5hcHBlbmQoaW50KG0uZ3JvdXAoMikpKQpAQCAtMzI0LDcgKzMyNCw3IEBACiAgICAgICAgIHQgPSB0aW1lLnRpbWUoKQogICAgICAgICBtYXhfbGlzdCA9IFtdCiAKLSAgICAgICAgZm9yIGkgaW4geHJhbmdlKDAsIHN1aXRlX3NpemUpOgorICAgICAgICBmb3IgaSBpbiByYW5nZSgwLCBzdWl0ZV9zaXplKToKICAgICAgICAgICAgICAgICB0bXBfbWluLCB0bXBfYXZnLCB0bXBfbWF4ID0gcnVuX2N5Y2xpY3Rlc3Rfb25jZSgpCiAKICAgICAgICAgICAgICAgICBtc2cgPSAiJTJkLyUyZDoiICUgKGkrMSwgc3VpdGVfc2l6ZSkKQEAgLTM3NiwxMSArMzc2LDExIEBACiAgICAgICAgICAgICAgICAgICAgICAgICBsb2coKQogICAgICAgICAgICAgICAgICAgICAgICAgbG9nKCJQQVNTIikKIAotICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnQKLSAgICAgICAgICAgICAgICAgICAgICAgIHByaW50IHRjX25hbWUobmFtZSksICJbTWluL3VzLEF2Zy91cyxNYXgvdXNdOiIsCi0gICAgICAgICAgICAgICAgICAgICAgICBwcmludCAiJWQsJS4xZiwlZCIgJSAoYm1fbWluLGJtX2F2ZywgYm1fbWF4KQotICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnQgIlBBU1M6IiwgdGNfbmFtZShuYW1lKQotICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnQKKyAgICAgICAgICAgICAgICAgICAgICAgIHByaW50KCkKKyAgICAgICAgICAgICAgICAgICAgICAgIHByaW50KHRjX25hbWUobmFtZSksICJbTWluL3VzLEF2Zy91cyxNYXgvdXNdOiIsKQorICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnQoIiVkLCUuMWYsJWQiICUgKGJtX21pbixibV9hdmcsIGJtX21heCkpCisgICAgICAgICAgICAgICAgICAgICAgICBwcmludCgiUEFTUzoiLCB0Y19uYW1lKG5hbWUpKQorICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnQoKQogCiAgICAgICAgICAgICAgICAgZXhjZXB0IEV4Y2VwdGlvbjoKICAgICAgICAgICAgICAgICAgICAgICAgIGxvZygpCkBAIC0zOTEsOSArMzkxLDkgQEAKICAgICAgICAgICAgICAgICAgICAgICAgIGxvZygiV0Q6ICIsIG9zLmdldGN3ZCgpKQogICAgICAgICAgICAgICAgICAgICAgICAgbG9nKCkKICAgICAgICAgICAgICAgICAgICAgICAgIGxvZygiRkFJTCIpCi0gICAgICAgICAgICAgICAgICAgICAgICBwcmludAotICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnQgIkZBSUw6IiwgdGNfbmFtZShuYW1lKQotICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnQKKyAgICAgICAgICAgICAgICAgICAgICAgIHByaW50KCkKKyAgICAgICAgICAgICAgICAgICAgICAgIHByaW50KCJGQUlMOiIsIHRjX25hbWUobmFtZSkpCisgICAgICAgICAgICAgICAgICAgICAgICBwcmludCgpCiAKICMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtcnQvcnQtdGVzdHMvZmlsZXMvcnVuLXB0ZXN0IGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ydC9ydC10ZXN0cy9maWxlcy9ydW4tcHRlc3QKaW5kZXggOGU2ZDNlMy4uYjdjNWUyOSAxMDA2NDQKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ydC9ydC10ZXN0cy9maWxlcy9ydW4tcHRlc3QKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ydC9ydC10ZXN0cy9maWxlcy9ydW4tcHRlc3QKQEAgLTEsMyArMSwzIEBACiAjIS9iaW4vc2gKIAotcHl0aG9uIC4vcnRfYm1hcmsucHkKK3B5dGhvbjMgLi9ydF9ibWFyay5weQpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ydC9ydC10ZXN0cy9od2xhdGRldGVjdF8wLjk2LmJiIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ydC9ydC10ZXN0cy9od2xhdGRldGVjdF8wLjk2LmJiCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5NjIwNjllLi4wMDAwMDAwCi0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtcnQvcnQtdGVzdHMvaHdsYXRkZXRlY3RfMC45Ni5iYgorKysgL2Rldi9udWxsCkBAIC0xLDIzICswLDAgQEAKLVNVTU1BUlkgPSAiSGFyZHdhcmUgbGF0ZW5jeSBkZXRlY3RvciIKLURFU0NSSVBUSU9OID0gIlB5dGhvbiB1dGlsaXR5IGZvciBjb250cm9sbGluZyB0aGUga2VybmVsIGhhcmR3YXJlIGxhdGVuY3kgZGV0ZWN0aW9uIG1vZHVsZSAoaHdsYXRfZGV0ZWN0b3Iua28pLiIKLUhPTUVQQUdFID0gImh0dHBzOi8vcnQud2lraS5rZXJuZWwub3JnL2luZGV4LnBocC9DeWNsaWN0ZXN0IgotU0VDVElPTiA9ICJ0ZXN0cyIKLUxJQ0VOU0UgPSAiR1BMdjIiCi1MSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT03NTE0MTkyNjBhYTk1NDQ5OWY3YWJhYWJhYTg4MmJiZSIKLQotcmVxdWlyZSBydC10ZXN0cy5pbmMKLQotRVhUUkFfT0VNQUtFICs9ICJQWUxJQj0ke2xpYmRpcn0vcHl0aG9uJHtQWVRIT05fQkFTRVZFUlNJT059L2Rpc3QtcGFja2FnZXMiCi0KLWRvX2NvbXBpbGUoKSB7Ci0Jb2VfcnVubWFrZSBod2xhdGRldGVjdAotfQotCi1kb19pbnN0YWxsKCkgewotICAgICAgICBvZV9ydW5tYWtlIGluc3RhbGxfaHdsYXRkZXRlY3QgREVTVERJUj0ke0R9IFNCSU5ESVI9JHtzYmluZGlyfSBcCi0JICAgICAgICAgICBNQU5ESVI9JHttYW5kaXJ9IElOQ0xVREVESVI9JHtpbmNsdWRlZGlyfQotfQotCi1GSUxFU18ke1BOfSArPSAiJHtsaWJkaXJ9L3B5dGhvbiR7UFlUSE9OX0JBU0VWRVJTSU9OfS9kaXN0LXBhY2thZ2VzL2h3bGF0ZGV0ZWN0LnB5IgotUkRFUEVORFNfJHtQTn0gPSAicHl0aG9uIHB5dGhvbi1zdWJwcm9jZXNzIHB5dGhvbi10ZXh0dXRpbHMiCi1SUkVDT01NRU5EU18ke1BOfSA9ICJrZXJuZWwtbW9kdWxlLWh3bGF0LWRldGVjdG9yIgpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ydC9ydC10ZXN0cy9od2xhdGRldGVjdF8yLjAuYmIgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXJ0L3J0LXRlc3RzL2h3bGF0ZGV0ZWN0XzIuMC5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMTJiMmRkCi0tLSAvZGV2L251bGwKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ydC9ydC10ZXN0cy9od2xhdGRldGVjdF8yLjAuYmIKQEAgLTAsMCArMSwyNiBAQAorU1VNTUFSWSA9ICJIYXJkd2FyZSBsYXRlbmN5IGRldGVjdG9yIgorREVTQ1JJUFRJT04gPSAiUHl0aG9uIHV0aWxpdHkgZm9yIGNvbnRyb2xsaW5nIHRoZSBrZXJuZWwgaGFyZHdhcmUgbGF0ZW5jeSBkZXRlY3Rpb24gbW9kdWxlIChod2xhdF9kZXRlY3Rvci5rbykuIgorSE9NRVBBR0UgPSAiaHR0cHM6Ly9ydC53aWtpLmtlcm5lbC5vcmcvaW5kZXgucGhwL0N5Y2xpY3Rlc3QiCitTRUNUSU9OID0gInRlc3RzIgorTElDRU5TRSA9ICJHUEx2MiIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PTc1MTQxOTI2MGFhOTU0NDk5ZjdhYmFhYmFhODgyYmJlIgorCityZXF1aXJlIHJ0LXRlc3RzLmluYworaW5oZXJpdCBweXRob24zLWRpcgorCitFWFRSQV9PRU1BS0UgKz0gIlBZTElCPSR7bGliZGlyfS9weXRob24ke1BZVEhPTl9CQVNFVkVSU0lPTn0vZGlzdC1wYWNrYWdlcyIKKworZG9fY29tcGlsZSgpIHsKKwlvZV9ydW5tYWtlIGh3bGF0ZGV0ZWN0Cit9CisKK2RvX2luc3RhbGwoKSB7CisgICAgICAgIG9lX3J1bm1ha2UgaW5zdGFsbF9od2xhdGRldGVjdCBERVNURElSPSR7RH0gU0JJTkRJUj0ke3NiaW5kaXJ9IFwKKwkgICAgICAgICAgIE1BTkRJUj0ke21hbmRpcn0gSU5DTFVERURJUj0ke2luY2x1ZGVkaXJ9CisKKyAgICAgICAgc2VkIC1pIC1lICcxcywjIS4qcHl0aG9uLiosIyEke2JpbmRpcn0vcHl0aG9uMywnICR7RH0ke2xpYmRpcn0vcHl0aG9uJHtQWVRIT05fQkFTRVZFUlNJT059L2Rpc3QtcGFja2FnZXMvaHdsYXRkZXRlY3QucHkKK30KKworRklMRVNfJHtQTn0gKz0gIiR7bGliZGlyfS9weXRob24ke1BZVEhPTl9CQVNFVkVSU0lPTn0vZGlzdC1wYWNrYWdlcy9od2xhdGRldGVjdC5weSIKK1JERVBFTkRTXyR7UE59ID0gInB5dGhvbjMgcHl0aG9uMy1zdWJwcm9jZXNzIHB5dGhvbjMtdGV4dHV0aWxzIgorUlJFQ09NTUVORFNfJHtQTn0gPSAia2VybmVsLW1vZHVsZS1od2xhdC1kZXRlY3RvciIKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtcnQvcnQtdGVzdHMvcnQtdGVzdHMuaW5jIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ydC9ydC10ZXN0cy9ydC10ZXN0cy5pbmMKaW5kZXggNzZmOWIzYS4uZDgzMjgyOCAxMDA2NDQKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ydC9ydC10ZXN0cy9ydC10ZXN0cy5pbmMKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ydC9ydC10ZXN0cy9ydC10ZXN0cy5pbmMKQEAgLTEsMTMgKzEsOSBAQAogIyBWZXJzaW9uIHYwLjk2Ci1QViA9ICIwLjk2IgotU1JDUkVWID0gIjI0ZjhjMDE3NWUwNGJhYjc4ZTc1NTU2OThlMzRkNzAwMmIwMWM4N2YiCitTUkNSRVYgPSAiZTFiMTUzN2EyMGIzNWFmNzVhNDliZjU1ZGNmNzAyOTZmOGE2MjQ2NyIKIAogU1JDX1VSSSA9ICJnaXQ6Ly9naXQua2VybmVsLm9yZy9wdWIvc2NtL3V0aWxzL3J0LXRlc3RzL3J0LXRlc3RzLmdpdCIKIAogUyA9ICIke1dPUktESVJ9L2dpdCIKIAotIyBuZWVkIHRvIGFwcGVuZCBydC10ZXN0cycgZGVmYXVsdCBDRkxBR1MgdG8gb3VycwotQ0ZMQUdTICs9ICItSSR7U30vc3JjL2luY2x1ZGUgLURfR05VX1NPVVJDRSAtV2FsbCAtV25vLW5vbm51bGwiCi0KICMgY2FsbGluZyAndW5hbWUgLW0nIGlzIGJyb2tlbiBvbiBjcm9zc2J1aWxkcwogRVhUUkFfT0VNQUtFID0gIk5VTUE9MCIKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtcnQvcnQtdGVzdHMvcnQtdGVzdHNfMC45Ni5iYiBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtcnQvcnQtdGVzdHMvcnQtdGVzdHNfMC45Ni5iYgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMmY5NmZlYS4uMDAwMDAwMAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXJ0L3J0LXRlc3RzL3J0LXRlc3RzXzAuOTYuYmIKKysrIC9kZXYvbnVsbApAQCAtMSwzMyArMCwwIEBACi1TVU1NQVJZID0gIlJlYWwtVGltZSBwcmVlbXB0aW9uIHRlc3RjYXNlcyIKLUhPTUVQQUdFID0gImh0dHBzOi8vcnQud2lraS5rZXJuZWwub3JnL2luZGV4LnBocC9DeWNsaWN0ZXN0IgotU0VDVElPTiA9ICJ0ZXN0cyIKLURFUEVORFMgPSAibGludXgtbGliYy1oZWFkZXJzIHZpcnR1YWwvbGliYyIKLUxJQ0VOU0UgPSAiR1BMdjIgJiBHUEx2MisiCi1MSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT03NTE0MTkyNjBhYTk1NDQ5OWY3YWJhYWJhYTg4MmJiZSBcCi0gICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9zcmMvY3ljbGljdGVzdC9jeWNsaWN0ZXN0LmM7YmVnaW5saW5lPTc7ZW5kbGluZT05O21kNT1lNzY4YjhkYTQ0NTU1ZmU2M2Y2NWU1YzQ5Nzg0NGNiNSBcCi0gICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9zcmMvcGlfdGVzdHMvcGlfc3RyZXNzLmM7YmVnaW5saW5lPTY7ZW5kbGluZT0xOTttZDU9YmQ0MjZhNjM0YTQzZWM2MTJlOWZiZjEyNWRmY2M5NDkiCi0KLXJlcXVpcmUgcnQtdGVzdHMuaW5jCi1pbmhlcml0IHB0ZXN0Ci0KLVNSQ19VUkkgKz0gImZpbGU6Ly8wMDAxLU1ha2VmaWxlLVNldC1DQy1BUi12YXJpYWJsZS1vbmx5LWlmLWl0LWRvZXNuLXQtaGF2ZS0ucGF0Y2ggXAotICAgICAgICAgICAgZmlsZTovL3J1bi1wdGVzdCBcCi0gICAgICAgICAgICBmaWxlOi8vcnRfYm1hcmsucHkgXAotICAgICAgICAgICAiCi0jIERvIG5vdCBpbnN0YWxsIGh3bGF0ZGV0ZWN0Ci1FWFRSQV9PRU1BS0UgKz0gIlBZTElCPScnIENST1NTX0NPTVBJTEU9JHtUQVJHRVRfUFJFRklYfSIKLQotQ0ZMQUdTX3ByZXBlbmQgPSAiJHtIT1NUX0NDX0FSQ0h9JHtUT09MQ0hBSU5fT1BUSU9OU30iCi0KLWRvX2luc3RhbGwoKSB7Ci0gICAgICAgIG9lX3J1bm1ha2UgaW5zdGFsbCBERVNURElSPSR7RH0gU0JJTkRJUj0ke3NiaW5kaXJ9IE1BTkRJUj0ke21hbmRpcn0gXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgSU5DTFVERURJUj0ke2luY2x1ZGVkaXJ9Ci19Ci0KLWRvX2luc3RhbGxfcHRlc3QoKSB7Ci0gICAgICAgIGNwICR7V09SS0RJUn0vcnRfYm1hcmsucHkgJHtEfSR7UFRFU1RfUEFUSH0KLX0KLQotUkRFUEVORFNfJHtQTn0tcHRlc3QgKz0gIiBzdHJlc3MgcHl0aG9uIHB5dGhvbi1zdWJwcm9jZXNzIHB5dGhvbi1tdWx0aXByb2Nlc3NpbmcgcHl0aG9uLWRhdGV0aW1lIHB5dGhvbi1yZSBweXRob24tbGFuZyIKLQotRklMRVNfJHtQTn0gKz0gIiR7cHJlZml4fS9zcmMvYmFja2ZpcmUiCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXJ0L3J0LXRlc3RzL3J0LXRlc3RzXzIuMC5iYiBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtcnQvcnQtdGVzdHMvcnQtdGVzdHNfMi4wLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQzMzZjNTAKLS0tIC9kZXYvbnVsbAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXJ0L3J0LXRlc3RzL3J0LXRlc3RzXzIuMC5iYgpAQCAtMCwwICsxLDMxIEBACitTVU1NQVJZID0gIlJlYWwtVGltZSBwcmVlbXB0aW9uIHRlc3RjYXNlcyIKK0hPTUVQQUdFID0gImh0dHBzOi8vcnQud2lraS5rZXJuZWwub3JnL2luZGV4LnBocC9DeWNsaWN0ZXN0IgorU0VDVElPTiA9ICJ0ZXN0cyIKK0RFUEVORFMgPSAibGludXgtbGliYy1oZWFkZXJzIHZpcnR1YWwvbGliYyIKK0xJQ0VOU0UgPSAiR1BMdjIgJiBHUEx2MisiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT03NTE0MTkyNjBhYTk1NDQ5OWY3YWJhYWJhYTg4MmJiZSBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9zcmMvY3ljbGljdGVzdC9jeWNsaWN0ZXN0LmM7YmVnaW5saW5lPTc7ZW5kbGluZT05O21kNT1lNzY4YjhkYTQ0NTU1ZmU2M2Y2NWU1YzQ5Nzg0NGNiNSBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9zcmMvcGlfdGVzdHMvcGlfc3RyZXNzLmM7YmVnaW5saW5lPTY7ZW5kbGluZT0xOTttZDU9YmQ0MjZhNjM0YTQzZWM2MTJlOWZiZjEyNWRmY2M5NDkiCisKK3JlcXVpcmUgcnQtdGVzdHMuaW5jCitpbmhlcml0IHB0ZXN0CisKK1NSQ19VUkkgKz0gIiBcCisgICAgICAgICAgICBmaWxlOi8vcnVuLXB0ZXN0IFwKKyAgICAgICAgICAgIGZpbGU6Ly9ydF9ibWFyay5weSBcCisgICAgICAgICAgICIKKyMgRG8gbm90IGluc3RhbGwgaHdsYXRkZXRlY3QKK0VYVFJBX09FTUFLRSArPSAiUFlMSUI9JyciCisKK2RvX2luc3RhbGwoKSB7CisgICAgICAgIG9lX3J1bm1ha2UgaW5zdGFsbCBERVNURElSPSR7RH0gU0JJTkRJUj0ke3NiaW5kaXJ9IE1BTkRJUj0ke21hbmRpcn0gXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgSU5DTFVERURJUj0ke2luY2x1ZGVkaXJ9Cit9CisKK2RvX2luc3RhbGxfcHRlc3QoKSB7CisgICAgICAgIGNwICR7V09SS0RJUn0vcnRfYm1hcmsucHkgJHtEfSR7UFRFU1RfUEFUSH0KK30KKworUkRFUEVORFNfJHtQTn0tcHRlc3QgKz0gIiBzdHJlc3MgcHl0aG9uMyBweXRob24zLXN1YnByb2Nlc3MgcHl0aG9uMy1tdWx0aXByb2Nlc3NpbmcgcHl0aG9uMy1kYXRldGltZSBweXRob24zLXJlIHB5dGhvbjMtbGFuZyBweXRob24zLW1pc2MiCisKK0ZJTEVTXyR7UE59ICs9ICIke3ByZWZpeH0vc3JjL2JhY2tmaXJlIgpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zYXRvL2d0ay1lbmdpbmVzL2d0ay1zYXRvLWVuZ2luZS5pbmMgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXNhdG8vZ3RrLWVuZ2luZXMvZ3RrLXNhdG8tZW5naW5lLmluYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTM1MzhlZC4uMDAwMDAwMAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXNhdG8vZ3RrLWVuZ2luZXMvZ3RrLXNhdG8tZW5naW5lLmluYworKysgL2Rldi9udWxsCkBAIC0xLDI1ICswLDAgQEAKLVNVTU1BUlkgPSAiU2F0byB0aGVtZSBlbmdpbmUgZm9yIEdUSysiCi1IT01FUEFHRSA9ICJodHRwOi8vd3d3Lm8taGFuZC5jb20iCi1CVUdUUkFDS0VSID0gImh0dHA6Ly9idWd6aWxsYS55b2N0b3Byb2plY3Qub3JnLyIKLQotTElDRU5TRSA9ICJMR1BMdjIuMSAmIExHUEx2MisiCi0KLVNFQ1RJT04gPSAieDExL2Jhc2UiCi1ERVBFTkRTID0gImd0aysiCi1SREVQRU5EU19ndGstdGhlbWUtc2F0byA9ICJndGstc2F0by1lbmdpbmUiCi0KLWluaGVyaXQgZGlzdHJvX2ZlYXR1cmVzX2NoZWNrCi1BTllfT0ZfRElTVFJPX0ZFQVRVUkVTID0gIiR7R1RLMkRJU1RST0ZFQVRVUkVTfSIKLQotUEFDS0FHRVMgKz0gImd0ay10aGVtZS1zYXRvIgotRklMRVNfJHtQTn0gPSAiJHtsaWJkaXJ9L2d0ay0yLjAvKi9lbmdpbmVzLyouc28gIgotRklMRVNfJHtQTn0tZGV2ID0gIiR7bGliZGlyfS9ndGstMi4wLyovZW5naW5lcy8qLmxhIgotRklMRVNfZ3RrLXRoZW1lLXNhdG8gPSAiJHtkYXRhZGlyfS9pY29ucyAke2RhdGFkaXJ9L3RoZW1lcyIKLQotaW5oZXJpdCBhdXRvdG9vbHMtYnJva2Vuc2VwIHBrZ2NvbmZpZwotCi1kb19jb25maWd1cmVfcHJlcGVuZCgpIHsKLQlmb3IgaSBpbiBgbHMgZ3RrLWNvbW1vbmA7IGRvCi0JCWxuIC1zZiAuLi9ndGstY29tbW9uLyRpIGd0azItZW5naW5lLyRpCi0JZG9uZQotfQpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zYXRvL2d0ay1lbmdpbmVzL2d0ay1zYXRvLWVuZ2luZV9naXQuYmIgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXNhdG8vZ3RrLWVuZ2luZXMvZ3RrLXNhdG8tZW5naW5lX2dpdC5iYgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZGE0ZDk4YS4uMDAwMDAwMAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXNhdG8vZ3RrLWVuZ2luZXMvZ3RrLXNhdG8tZW5naW5lX2dpdC5iYgorKysgL2Rldi9udWxsCkBAIC0xLDE0ICswLDAgQEAKLXJlcXVpcmUgZ3RrLXNhdG8tZW5naW5lLmluYwotCi1MSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HLkxJQjttZDU9MmQ1MDI1ZDRhYTM0OTViZWZlZjhmMTcyMDZhNWIwYTEgXAotICAgICAgICAgICAgICAgICAgICBmaWxlOi8vc3JjL3NhdG8tdXRpbHMuaDtlbmRsaW5lPTI0O21kNT03MDhmMjhjZmU3ZmUwMjhkNDk3YWFmNDM4OWI4MGI2MiBcCi0gICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9zcmMvc2F0by1tYWluLmM7ZW5kbGluZT0yNDttZDU9YjVlNWRkZGViY2E1NzAyNzViZWNiNTFiNTI2ZTRjNWEiCi0KLVNSQ1JFViA9ICI0NzQwYWQ4ZDUzYWJhNDM2OGNlM2UwM2IwNmNmZGM2OWViODZkY2RjIgotUFYgPSAiMC4zLjMrZ2l0JHtTUkNQVn0iCi0KLVNSQ19VUkkgPSAiZ2l0Oi8vZ2l0LnlvY3RvcHJvamVjdC5vcmcvJHtCUE59IgotCi1TID0gIiR7V09SS0RJUn0vZ2l0IgotCi1FWFRSQV9PRUNPTkYgKz0gIiR7QGJiLnV0aWxzLmNvbnRhaW5zKCdNQUNISU5FX0ZFQVRVUkVTJywgJ3F2Z2EnLCAnLS13aXRoLW1vZGU9cXZnYScsICcnLGQpfSIKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc2F0by9sM2FmcGFkL2wzYWZwYWRfZ2l0LmJiIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zYXRvL2wzYWZwYWQvbDNhZnBhZF9naXQuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2NmZGEyNgotLS0gL2Rldi9udWxsCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc2F0by9sM2FmcGFkL2wzYWZwYWRfZ2l0LmJiCkBAIC0wLDAgKzEsMjUgQEAKK1NVTU1BUlkgPSAiU2ltcGxlIEdUSysgVGV4dCBFZGl0b3IiCitIT01FUEFHRSA9ICJodHRwczovL2dpdGh1Yi5jb20vc3RldmVuaG9uZXltYW4vbDNhZnBhZCIKKworIyBOb3RlIHRoYXQgQ09QWUlORyBzZWVtcyB0byBtaXN0YWtlbmx5IGNvbnRhaW4gTEdQTHYyLjEuCisjIFRoZSBzb3VyY2UgY29kZSBpcyBtYXJrZWQgR1BMdjIrIGFuZCBDT1BZSU5HIHVzZWQgdG8gY29udGFpbgorIyB0aGF0IGFzIHdlbGwuCitMSUNFTlNFID0gIkdQTHYyKyIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PTRmYmQ2NTM4MGNkZDI1NTk1MTA3OTAwOGIzNjQ1MTZjIFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL3NyYy9sM2FmcGFkLmg7ZW5kbGluZT0yMDttZDU9ODg0OGZkNjQ1Y2Q0NTExNWQ4Y2I0N2NhNWM0MmE1MGUgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vc3JjL3V0aWxzLmM7ZW5kbGluZT0yMDttZDU9YWU0NzkyZjY5ZDNiYjdiN2JhOTFkNTgyYmE5YjFhMDUiCisKK0RFUEVORFMgPSAiZ3RrKzMgaW50bHRvb2wtbmF0aXZlIGdldHRleHQtbmF0aXZlIgorCitQViA9ICIwLjguMTguMS4xMStnaXQke1NSQ1BWfSIKK1NSQ19VUkkgPSAiZ2l0Oi8vZ2l0aHViLmNvbS9zdGV2ZW5ob25leW1hbi9sM2FmcGFkLmdpdCIKK1NSQ1JFViA9IjNjZGNjZGM5NTA1NjQzZTUwZjgyMDgxNzFkOWVlZTVkZTExYTQyZmYiCisKK1MgPSAiJHtXT1JLRElSfS9naXQiCisKK2luaGVyaXQgYXV0b3Rvb2xzIHBrZ2NvbmZpZyBkaXN0cm9fZmVhdHVyZXNfY2hlY2sKKworQU5ZX09GX0RJU1RST19GRUFUVVJFUyA9ICIke0dUSzNESVNUUk9GRUFUVVJFU30iCisKK0VYVFJBX09FQ09ORiA9ICItLWRpc2FibGUtZW1hY3MgLS1kaXNhYmxlLXByaW50IgorRklMRVNfJHtQTn0gKz0gIiR7ZGF0YWRpcn0vaWNvbnMiCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXNhdG8vbGVhZnBhZC9maWxlcy9sZWFmcGFkLmRlc2t0b3AgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXNhdG8vbGVhZnBhZC9maWxlcy9sZWFmcGFkLmRlc2t0b3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGM3ZTJkNWIuLjAwMDAwMDAKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zYXRvL2xlYWZwYWQvZmlsZXMvbGVhZnBhZC5kZXNrdG9wCisrKyAvZGV2L251bGwKQEAgLTEsMTAgKzAsMCBAQAotW0Rlc2t0b3AgRW50cnldCi1OYW1lPU5vdGVzCi1FeGVjPS91c3IvYmluL2xlYWZwYWQKLUNvbW1lbnQ9VGV4dCBFZGl0b3IKLUljb249YWNjZXNzb3JpZXMtdGV4dC1lZGl0b3IKLVRlcm1pbmFsPWZhbHNlCi1UeXBlPUFwcGxpY2F0aW9uCi1DYXRlZ29yaWVzPUdUSztVdGlsaXR5O1RleHRFZGl0b3I7Ci1YLU1CLVNpbmdsZUluc3RhbmNlPXRydWUKLVN0YXJ0dXBOb3RpZnk9dHJ1ZQpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zYXRvL2xlYWZwYWQvZmlsZXMvb3dsLW1lbnUucGF0Y2ggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXNhdG8vbGVhZnBhZC9maWxlcy9vd2wtbWVudS5wYXRjaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMmViZjc0YS4uMDAwMDAwMAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXNhdG8vbGVhZnBhZC9maWxlcy9vd2wtbWVudS5wYXRjaAorKysgL2Rldi9udWxsCkBAIC0xLDYzICswLDAgQEAKLVVwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbZW5hYmxlIGZlYXR1cmVdCi0KLS0tLSB0bXAvc3JjL21lbnUuYy5vcmlnCTIwMDctMDQtMjMgMTI6MDg6NDEuMDAwMDAwMDAwICswMTAwCi0rKysgdG1wL3NyYy9tZW51LmMJMjAwNy0wNC0yMyAxMjowODo0MS4wMDAwMDAwMDAgKzAxMDAKLUBAIC0xNTIsNyArMTUyLDcgQEAKLSAJfQotIAkKLSAJYWNjZWxfZ3JvdXAgPSBndGtfYWNjZWxfZ3JvdXBfbmV3KCk7Ci0tCWlmYWN0b3J5ID0gZ3RrX2l0ZW1fZmFjdG9yeV9uZXcoR1RLX1RZUEVfTUVOVV9CQVIsICI8bWFpbj4iLCBhY2NlbF9ncm91cCk7Ci0rCWlmYWN0b3J5ID0gZ3RrX2l0ZW1fZmFjdG9yeV9uZXcoR1RLX1RZUEVfTUVOVSwgIjxtYWluPiIsIGFjY2VsX2dyb3VwKTsKLSAJZ3RrX2l0ZW1fZmFjdG9yeV9zZXRfdHJhbnNsYXRlX2Z1bmMoaWZhY3RvcnksIG1lbnVfdHJhbnNsYXRlLCBOVUxMLCBOVUxMKTsKLSAJZ3RrX2l0ZW1fZmFjdG9yeV9jcmVhdGVfaXRlbXMoaWZhY3RvcnksIG5tZW51X2l0ZW1zLCBtZW51X2l0ZW1zLCBOVUxMKTsKLSAJZ3RrX3dpbmRvd19hZGRfYWNjZWxfZ3JvdXAoR1RLX1dJTkRPVyh3aW5kb3cpLCBhY2NlbF9ncm91cCk7Ci0KLS0tLSB0bXAvc3JjL3dpbmRvdy5jLm9yaWcJMjAwNy0wNC0yMyAxMjoxNDowNy4wMDAwMDAwMDAgKzAxMDAKLSsrKyB0bXAvc3JjL3dpbmRvdy5jCTIwMDctMDQtMjMgMTI6MTQ6MDcuMDAwMDAwMDAwICswMTAwCi1AQCAtMTgsNiArMTgsOCBAQAotICAqLwotIAotICNpbmNsdWRlICJsZWFmcGFkLmgiCi0rI2luY2x1ZGUgPGxpYm93bC9vd2x3aW5kb3dtZW51Lmg+Ci0rCi0gLyoKLSBzdGF0aWMgdm9pZCBjYl9zY3JvbGxfZXZlbnQoR3RrQWRqdXN0bWVudCAqYWRqLCBHdGtXaWRnZXQgKnZpZXcpCi0gewotQEAgLTUyLDcgKzU0LDYgQEAKLSAJZ3RrX2NvbnRhaW5lcl9hZGQoR1RLX0NPTlRBSU5FUih3aW5kb3cpLCB2Ym94KTsKLSAJCi0gCW1lbnViYXIgPSBjcmVhdGVfbWVudV9iYXIod2luZG93KTsKLS0JZ3RrX2JveF9wYWNrX3N0YXJ0KEdUS19CT1godmJveCksIG1lbnViYXIsIEZBTFNFLCBGQUxTRSwgMCk7Ci0gCQotIAlzdyA9IGd0a19zY3JvbGxlZF93aW5kb3dfbmV3KE5VTEwsIE5VTEwpOwotIAlndGtfc2Nyb2xsZWRfd2luZG93X3NldF9wb2xpY3koR1RLX1NDUk9MTEVEX1dJTkRPVyhzdyksCi0KLS0tLSB0bXAvc3JjL21haW4uYy5vcmlnCTIwMDctMDQtMjMgMTI6MTU6MDMuMDAwMDAwMDAwICswMTAwCi0rKysgdG1wL3NyYy9tYWluLmMJMjAwNy0wNC0yMyAxMjoxNTowMy4wMDAwMDAwMDAgKzAxMDAKLUBAIC0yNDQsNiArMjQ0LDcgQEAKLSAJQ29uZiAqY29uZjsKLSAJR3RrSXRlbUZhY3RvcnkgKmlmYWN0b3J5OwotIAlnY2hhciAqc3RkaW5fZGF0YSA9IE5VTEw7Ci0rCUd0a1dpZGdldCAqbWVudTsKLSAJCi0gCWJpbmR0ZXh0ZG9tYWluKFBBQ0tBR0UsIExPQ0FMRURJUik7Ci0gCWJpbmRfdGV4dGRvbWFpbl9jb2Rlc2V0KFBBQ0tBR0UsICJVVEYtOCIpOwotQEAgLTI5Myw3ICsyOTQsMTAgQEAKLSAJCWNvbmYtPmF1dG9pbmRlbnQpOwotIAkKLSAJZ3RrX3dpZGdldF9zaG93X2FsbChwdWItPm13LT53aW5kb3cpOwotKwlvd2xfc2V0X3dpbmRvd19tZW51IChHVEtfV0lORE9XKHB1Yi0+bXctPndpbmRvdyksCi0rCQkJICAgICBHVEtfTUVOVShwdWItPm13LT5tZW51YmFyKSk7Ci0rCQotIAlnX2ZyZWUoY29uZi0+Zm9udG5hbWUpOwotIAlnX2ZyZWUoY29uZik7Ci0gCQotCi0tLS0gdG1wL3NyYy9NYWtlZmlsZS5hbS5vcmlnCTIwMDctMDQtMjMgMTI6MTc6NTQuMDAwMDAwMDAwICswMTAwCi0rKysgdG1wL3NyYy9NYWtlZmlsZS5hbQkyMDA3LTA0LTIzIDEyOjE3OjU0LjAwMDAwMDAwMCArMDEwMAotQEAgLTI3LDQgKzI3LDQgQEAKLSAJaTE4bi5oCi0gCi0gbGVhZnBhZF9DRkxBR1MgID0gJChHVEtfQ0ZMQUdTKSAkKEdOT01FUFJJTlRfQ0ZMQUdTKQotLWxlYWZwYWRfTERBREQgICA9ICQoR1RLX0xJQlMpICQoSU5UTExJQlMpICQoR05PTUVQUklOVF9MSUJTKQotK2xlYWZwYWRfTERBREQgICA9ICQoR1RLX0xJQlMpICQoSU5UTExJQlMpICQoR05PTUVQUklOVF9MSUJTKSAtbG93bApkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zYXRvL2xlYWZwYWQvbGVhZnBhZF8wLjguMTguMS5iYiBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc2F0by9sZWFmcGFkL2xlYWZwYWRfMC44LjE4LjEuYmIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDA5M2I4OWYuLjAwMDAwMDAKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zYXRvL2xlYWZwYWQvbGVhZnBhZF8wLjguMTguMS5iYgorKysgL2Rldi9udWxsCkBAIC0xLDM1ICswLDAgQEAKLVNVTU1BUlkgPSAiU2ltcGxlIEdUSysgVGV4dCBFZGl0b3IiCi1IT01FUEFHRSA9ICJodHRwOi8vdGFyb3QuZnJlZXNoZWxsLm9yZy9sZWFmcGFkLyIKLQotTElDRU5TRSA9ICJHUEx2MiAmIEdQTHYyKyIKLUxJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PTk0ZDU1ZDUxMmE5YmEzNmNhYTliN2RmMDc5YmFlMTlmIFwKLSAgICAgICAgICAgICAgICAgICAgZmlsZTovL3NyYy9sZWFmcGFkLmg7ZW5kbGluZT0yMDttZDU9ZDNkNmE4OWY1ZTYxZThiMTNiZGVhNTM3NTExYmExZmEgXAotICAgICAgICAgICAgICAgICAgICBmaWxlOi8vc3JjL3V0aWxzLmM7ZW5kbGluZT0yMDttZDU9MGQyY2M2NTg0YmEzMjAyNDQ4YmIyNzRmNjI3Mzk1NzEiCi0KLURFUEVORFMgPSAiZ3RrKyBpbnRsdG9vbC1uYXRpdmUgbGlib3dsIGdldHRleHQtbmF0aXZlIgotIyBUaGUgbGlib3dsIHJlcXVpcmVzIHgxMSBpbiBESVNUUk9fRkVBVFVSRVMKLVJFUVVJUkVEX0RJU1RST19GRUFUVVJFUyA9ICJ4MTEiCi0KLVNSQ19VUkkgPSAiJHtTQVZBTk5BSF9OT05HTlVfTUlSUk9SfS8ke0JQTn0vJHtCUE59LSR7UFZ9LnRhci5neiBcCi0JICAgZmlsZTovL2xlYWZwYWQuZGVza3RvcCIKLQotU1JDX1VSSVttZDVzdW1dID0gIjI1NGE3MmZjNjc1MDVlM2FhNTI4ODRjNzI5Y2Q3Yjk3IgotU1JDX1VSSVtzaGEyNTZzdW1dID0gIjk1OWQyMmFlMDdmMjI4MDNiYzY2ZmY0MGQzNzNhODU0NTMyYTZlNDczMjY4MGJmOGE5NmEzZmJjYjlmODBhMmMiCi1QUiA9ICJyMiIKLQotU1JDX1VSSV9hcHBlbmRfcG9reSA9ICIgZmlsZTovL293bC1tZW51LnBhdGNoO2FwcGx5PXllcyAiCi0KLWluaGVyaXQgYXV0b3Rvb2xzIHBrZ2NvbmZpZyBkaXN0cm9fZmVhdHVyZXNfY2hlY2sKLQotRVhUUkFfT0VDT05GID0gIiAtLWVuYWJsZS1jaG9vc2VyIC0tZGlzYWJsZS1lbWFjcyAtLWRpc2FibGUtcHJpbnQiCi0KLWRvX2luc3RhbGxfYXBwZW5kICgpIHsKLSAgICAgICAgaW5zdGFsbCAtZCAke0R9LyR7ZGF0YWRpcn0KLSAgICAgICAgaW5zdGFsbCAtZCAke0R9LyR7ZGF0YWRpcn0vYXBwbGljYXRpb25zCi0gICAgICAgIGluc3RhbGwgLW0gMDY0NCAke1dPUktESVJ9L2xlYWZwYWQuZGVza3RvcCAke0R9LyR7ZGF0YWRpcn0vYXBwbGljYXRpb25zCi19Ci0KLUZJTEVTXyR7UE59ICs9ICIke2RhdGFkaXJ9L2FwcGxpY2F0aW9ucy9sZWFmcGFkLmRlc2t0b3AiCi0KLVBBQ0tBR0VTICs9ICJsZWFmcGFkLXN0b2NrLWljb25zIgotRklMRVNfbGVhZnBhZC1zdG9jay1pY29ucyA9ICIke2RhdGFkaXJ9L2ljb25zL2hpY29sb3IvIgpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zYXRvL2xpYm93bC9saWJvd2xfZ2l0LmJiIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zYXRvL2xpYm93bC9saWJvd2xfZ2l0LmJiCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5Y2M0N2RiLi4wMDAwMDAwCi0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc2F0by9saWJvd2wvbGlib3dsX2dpdC5iYgorKysgL2Rldi9udWxsCkBAIC0xLDIzICswLDAgQEAKLVNVTU1BUlkgPSAiT3BlbmVkSGFuZCBXaWRnZXQgTGlicmFyeSIKLUhPTUVQQUdFID0gImh0dHA6Ly93d3cuby1oYW5kLmNvbSIKLUJVR1RSQUNLRVIgPSAiaHR0cDovL2J1Z3ppbGxhLnlvY3RvcHJvamVjdC5vcmcvIgotCi1MSUNFTlNFID0gIkdQTHYyICYgTEdQTHYyKyIKLUxJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PTk0ZDU1ZDUxMmE5YmEzNmNhYTliN2RmMDc5YmFlMTlmIFwKLSAgICAgICAgICAgICAgICAgICAgZmlsZTovL2xpYm93bC9vd2xwYW5lZC5oO2VuZGxpbmU9MjA7bWQ1PTdmZWY4NDRjNGNjMDFiMTA1NDFhN2FiNmFiNTk3MWFmIFwKLSAgICAgICAgICAgICAgICAgICAgZmlsZTovL2xpYm93bC9vd2x0cmVlbW9kZWxzbGljZS5oO2VuZGxpbmU9MjA7bWQ1PWE1NDIxZjJjZGFlOGRlYmU1ZTRjNDhjMDlhMDJiZWI5IFwKLSAgICAgICAgICAgICAgICAgICAgZmlsZTovL2xpYm93bC9vd2xjb2xvdXJzd2F0Y2guaDtlbmRsaW5lPTI0O21kNT0wNjNjNDE1YzU4NzE5ZDUzNjk5MGNhOGY2MDZiNTczMCIKLQotU0VDVElPTiA9ICJsaWJzIgotREVQRU5EUyA9ICJndGsrIgotU1JDUkVWID0gIjZlYmM4YWM4Zjg1NzUyNzhkZDQwYTUzNWNhZGVmYTI2Mzc0ZTQ0YjEiCi1QViA9ICIwLjErZ2l0JHtTUkNQVn0iCi0KLVNSQ19VUkkgPSAiZ2l0Oi8vZ2l0LnlvY3RvcHJvamVjdC5vcmcvJHtCUE59IgotCi1TID0gIiR7V09SS0RJUn0vZ2l0IgotCi1pbmhlcml0IGF1dG90b29scyBwa2djb25maWcgZGlzdHJvX2ZlYXR1cmVzX2NoZWNrCi0KLSMgUmVxdWlyZXMgZ2RrL2dka3guaCB3aGljaCBpcyBwcm92aWRlZCBieSBndGsgd2hlbiB4MTEgaW4gRElTVFJPX0ZFQVRVUkVTCi1SRVFVSVJFRF9ESVNUUk9fRkVBVFVSRVMgPSAieDExIgpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zYXRvL21hdGNoYm94LWNvbmZpZy1ndGsvZmlsZXMvbm8taGFuZGVkLnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zYXRvL21hdGNoYm94LWNvbmZpZy1ndGsvZmlsZXMvbm8taGFuZGVkLnBhdGNoCmluZGV4IDgyNTY5NDkuLjFjYjE4NGYgMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc2F0by9tYXRjaGJveC1jb25maWctZ3RrL2ZpbGVzL25vLWhhbmRlZC5wYXRjaAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXNhdG8vbWF0Y2hib3gtY29uZmlnLWd0ay9maWxlcy9uby1oYW5kZWQucGF0Y2gKQEAgLTEsMTAgKzEsMTMgQEAKIFVwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbY29uZmlndXJhdGlvbl0KKy0tLQorIGFwcGVhcmFuY2UvbWItYXBwZWFyYW5jZS5jIHwgNCArKysrCisgMSBmaWxlIGNoYW5nZWQsIDQgaW5zZXJ0aW9ucygrKQogCi1JbmRleDogYXBwZWFyYW5jZS9tYi1hcHBlYXJhbmNlLmMKLT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tLSBhcHBlYXJhbmNlL21iLWFwcGVhcmFuY2UuYwkocmV2aXNpb24gMTYxNCkKLSsrKyBhcHBlYXJhbmNlL21iLWFwcGVhcmFuY2UuYwkod29ya2luZyBjb3B5KQotQEAgLTMwMCwxMSArMzAwLDEzIEBACitkaWZmIC0tZ2l0IGEvYXBwZWFyYW5jZS9tYi1hcHBlYXJhbmNlLmMgYi9hcHBlYXJhbmNlL21iLWFwcGVhcmFuY2UuYworaW5kZXggNmFmODM3Ni4uNzFmZDU3YiAxMDA2NDQKKy0tLSBhL2FwcGVhcmFuY2UvbWItYXBwZWFyYW5jZS5jCisrKysgYi9hcHBlYXJhbmNlL21iLWFwcGVhcmFuY2UuYworQEAgLTMxNywxMSArMzE3LDEzIEBAIG9uX2djb25mX3ZhbHVlX2NoYW5nZWQgKEdDb25mQ2xpZW50KiBjbGllbnQsIGNvbnN0IGdjaGFyKiBrZXksIEdDb25mVmFsdWUqIHZhbHVlCiAgICAgIGd0a19mb250X2J1dHRvbl9zZXRfZm9udF9uYW1lIChHVEtfRk9OVF9CVVRUT04gKGZvbnRfYnV0dG9uKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdjb25mX3ZhbHVlX2dldF9zdHJpbmcgKHZhbHVlKSk7CiAgICB9IGVsc2UgaWYgKHN0cmNtcCAoa2V5LCBIQU5ERURfS0VZKSA9PSAwKSB7CkBAIC0xOCwxOCArMjEsMTkgQEAKICAgIH0KICB9CiAgCi1AQCAtMzk1LDEyICszOTcsMTMgQEAKLSAgIGd0a19jb250YWluZXJfYWRkIChHVEtfQ09OVEFJTkVSIChhbGlnbiksIGZvbnRfYnV0dG9uKTsKK0BAIC00MDgsMTAgKzQxMCwxMiBAQCBtYWluIChpbnQgYXJnYywgY2hhciAqKmFyZ3YpIHsKICAKICAgIC8qIExlZnQvUmlnaHQgSGFuZGVkICovCi0tICAKKyAgIAogKyNpZiAwCi0gICBmcmFtZSA9IG5ld19mcmFtZSAoXygiT3JpZW50YXRpb24iKSwgJmFsaWduKTsKLSAgIGd0a19ib3hfcGFja19zdGFydCAoR1RLX0JPWCAoYm94KSwgZnJhbWUsIFRSVUUsIFRSVUUsIDApOwogICAgaGFuZGVkX2NoZWNrID0gZ3RrX2NoZWNrX2J1dHRvbl9uZXdfd2l0aF9tbmVtb25pYyAoXygiX0xlZnQtaGFuZGVkIikpOworICAgZnJhbWUgPSBuZXdfZnJhbWUgKF8oIk9yaWVudGF0aW9uIiksaGFuZGVkX2NoZWNrKTsKKyAgIGd0a19ib3hfcGFja19zdGFydCAoR1RLX0JPWCAoYm94KSwgZnJhbWUsIFRSVUUsIFRSVUUsIDApOwogICAgZ19zaWduYWxfY29ubmVjdCAoaGFuZGVkX2NoZWNrLCAidG9nZ2xlZCIsIEdfQ0FMTEJBQ0sgKG9uX2hhbmRlZF9zZXQpLCBOVUxMKTsKLSAgIGd0a19jb250YWluZXJfYWRkIChHVEtfQ09OVEFJTkVSIChhbGlnbiksIGhhbmRlZF9jaGVjayk7CiArI2VuZGlmCiAgCiAgICBnY29uZl9jbGllbnRfYWRkX2RpciAoZ2NvbmYsIElOVEVSRkFDRV9ESVIsIEdDT05GX0NMSUVOVF9QUkVMT0FEX09ORUxFVkVMLCBOVUxMKTsKICAgIGdfc2lnbmFsX2Nvbm5lY3QgKGdjb25mLCAidmFsdWUtY2hhbmdlZCIsIEdfQ0FMTEJBQ0sgKG9uX2djb25mX3ZhbHVlX2NoYW5nZWQpLCBOVUxMKTsKKy0tIAorMi44LjEKKwpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zYXRvL21hdGNoYm94LWNvbmZpZy1ndGsvbWF0Y2hib3gtY29uZmlnLWd0a18wLjIuYmIgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXNhdG8vbWF0Y2hib3gtY29uZmlnLWd0ay9tYXRjaGJveC1jb25maWctZ3RrXzAuMi5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iOTkzYTk0Ci0tLSAvZGV2L251bGwKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zYXRvL21hdGNoYm94LWNvbmZpZy1ndGsvbWF0Y2hib3gtY29uZmlnLWd0a18wLjIuYmIKQEAgLTAsMCArMSwyMyBAQAorU1VNTUFSWSA9ICJNYXRjaGJveCBHVEsrIHRoZW1lIGNvbmZpZ3VyYXRpb24gYXBwbGljYXRpb24iCitIT01FUEFHRSA9ICJodHRwOi8vbWF0Y2hib3gtcHJvamVjdC5vcmciCitCVUdUUkFDS0VSID0gImh0dHA6Ly9idWd6aWxsYS55b2N0b3Byb2plY3Qub3JnLyIKKworTElDRU5TRSA9ICJHUEx2MisiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT05NGQ1NWQ1MTJhOWJhMzZjYWE5YjdkZjA3OWJhZTE5ZiBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9hcHBlYXJhbmNlL21iLWFwcGVhcmFuY2UuYztlbmRsaW5lPTI1O21kNT1lYTkyMzMzY2Y4YTY4MDI2MzlkNjJkODc0YzExNGEyOCIKKworREVQRU5EUyA9ICJnY29uZiBndGsrMyIKK1JERVBFTkRTXyR7UE59ID0gInNldHRpbmdzLWRhZW1vbiIKKworIyBTUkNSRVYgdGFnZ2VkIDAuMgorU1JDUkVWID0gImVmMjE5MmNlOThkOTM3NGZmZGFkNWY3ODU0NGMzZjhmMzUzYzE2YWEiCitTUkNfVVJJID0gImdpdDovL2dpdC55b2N0b3Byb2plY3Qub3JnLyR7QlBOfSBcCisgICAgICAgICAgIGZpbGU6Ly9uby1oYW5kZWQucGF0Y2giCitVUFNUUkVBTV9DSEVDS19HSVRUQUdSRUdFWCA9ICIoP1A8cHZlcj4oXGQrKFwuXGQrKSspKSIKKworUyA9ICIke1dPUktESVJ9L2dpdCIKKworaW5oZXJpdCBhdXRvdG9vbHMgcGtnY29uZmlnIGRpc3Ryb19mZWF0dXJlc19jaGVjaworCisjIFRoZSBzZXR0aW5ncy1kYWVtb24gcmVxdWlyZXMgeDExIGluIERJU1RST19GRUFUVVJFUworUkVRVUlSRURfRElTVFJPX0ZFQVRVUkVTID0gIngxMSIKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc2F0by9tYXRjaGJveC1jb25maWctZ3RrL21hdGNoYm94LWNvbmZpZy1ndGtfZ2l0LmJiIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zYXRvL21hdGNoYm94LWNvbmZpZy1ndGsvbWF0Y2hib3gtY29uZmlnLWd0a19naXQuYmIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDVmNzNhNGMuLjAwMDAwMDAKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zYXRvL21hdGNoYm94LWNvbmZpZy1ndGsvbWF0Y2hib3gtY29uZmlnLWd0a19naXQuYmIKKysrIC9kZXYvbnVsbApAQCAtMSwyMyArMCwwIEBACi1TVU1NQVJZID0gIk1hdGNoYm94IEdUSysgdGhlbWUgY29uZmlndXJhdGlvbiBhcHBsaWNhdGlvbiIKLUhPTUVQQUdFID0gImh0dHA6Ly9tYXRjaGJveC1wcm9qZWN0Lm9yZyIKLUJVR1RSQUNLRVIgPSAiaHR0cDovL2J1Z3ppbGxhLnlvY3RvcHJvamVjdC5vcmcvIgotCi1MSUNFTlNFID0gIkdQTHYyKyIKLUxJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PTk0ZDU1ZDUxMmE5YmEzNmNhYTliN2RmMDc5YmFlMTlmIFwKLSAgICAgICAgICAgICAgICAgICAgZmlsZTovL2FwcGVhcmFuY2UvbWItYXBwZWFyYW5jZS5jO2VuZGxpbmU9MjU7bWQ1PWVhOTIzMzNjZjhhNjgwMjYzOWQ2MmQ4NzRjMTE0YTI4IgotCi1ERVBFTkRTID0gImdjb25mIGd0aysiCi1SREVQRU5EU18ke1BOfSA9ICJzZXR0aW5ncy1kYWVtb24iCi0KLVNSQ1JFViA9ICIzZWQ3NGRmYjdjNTdiZTA4OGE1YWIzNmU0NDZjMGNjZGU5ZmExMDI4IgotUFYgPSAiMC4wK2dpdCR7U1JDUFZ9IgotCi1TID0gIiR7V09SS0RJUn0vZ2l0IgotCi1TUkNfVVJJID0gImdpdDovL2dpdC55b2N0b3Byb2plY3Qub3JnLyR7QlBOfSBcCi0gICAgICAgIGZpbGU6Ly9uby1oYW5kZWQucGF0Y2g7c3RyaXBsZXZlbD0wIgotCi1pbmhlcml0IGF1dG90b29scyBwa2djb25maWcgZGlzdHJvX2ZlYXR1cmVzX2NoZWNrCi0KLSMgVGhlIHNldHRpbmdzLWRhZW1vbiByZXF1aXJlcyB4MTEgaW4gRElTVFJPX0ZFQVRVUkVTCi1SRVFVSVJFRF9ESVNUUk9fRkVBVFVSRVMgPSAieDExIgpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zYXRvL21hdGNoYm94LWRlc2t0b3Atc2F0by9tYXRjaGJveC1kZXNrdG9wLXNhdG9fZ2l0LmJiIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zYXRvL21hdGNoYm94LWRlc2t0b3Atc2F0by9tYXRjaGJveC1kZXNrdG9wLXNhdG9fZ2l0LmJiCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxOTc5Y2JiLi4wMDAwMDAwCi0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc2F0by9tYXRjaGJveC1kZXNrdG9wLXNhdG8vbWF0Y2hib3gtZGVza3RvcC1zYXRvX2dpdC5iYgorKysgL2Rldi9udWxsCkBAIC0xLDIyICswLDAgQEAKLVNVTU1BUlkgPSAiTWF0Y2hib3ggZGVza3RvcCBmb2xkZXJzIGZvciB0aGUgU2F0byBlbnZpcm9ubWVudCIKLUhPTUVQQUdFID0gImh0dHA6Ly9tYXRjaGJveC1wcm9qZWN0Lm9yZyIKLUJVR1RSQUNLRVIgPSAiaHR0cDovL2J1Z3ppbGxhLnlvY3RvcHJvamVjdC5vcmcvIgotCi1MSUNFTlNFID0gIkdQTHYyIgotTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9NTk1MzBiZGYzMzY1OWIyOWU3M2Q0YWRiOWY5ZjY1NTIiCi0KLVNFQ1RJT04gPSAieDExIgotREVQRU5EUyA9ICIiCi1SQ09ORkxJQ1RTXyR7UE59ID0gIm1hdGNoYm94LWNvbW1vbiIKLQotU1JDUkVWID0gIjgxMGIwYjA4ZWI3OWU0Njg1MjAyZGEyZWMzNDdiOTkwYmI0NjdlMDciCi1QViA9ICIwLjErZ2l0JHtTUkNQVn0iCi1QUiA9ICJyMSIKLQotU1JDX1VSSSA9ICJnaXQ6Ly9naXQueW9jdG9wcm9qZWN0Lm9yZy8ke0JQTn0iCi0KLVMgPSAiJHtXT1JLRElSfS9naXQiCi0KLWluaGVyaXQgYXV0b3Rvb2xzIHBrZ2NvbmZpZwotCi1GSUxFU18ke1BOfSArPSAiJHtkYXRhZGlyfSIKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc2F0by9tYXRjaGJveC1kZXNrdG9wL2ZpbGVzLzAwMDEtRG8tbm90aGluZy1vbi1kZWxldGUtZXZlbnQtd2hlbi1ub3QtU1RBTkRBTE9ORS5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc2F0by9tYXRjaGJveC1kZXNrdG9wL2ZpbGVzLzAwMDEtRG8tbm90aGluZy1vbi1kZWxldGUtZXZlbnQtd2hlbi1ub3QtU1RBTkRBTE9ORS5wYXRjaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDYzOTdkYy4uMDAwMDAwMAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXNhdG8vbWF0Y2hib3gtZGVza3RvcC9maWxlcy8wMDAxLURvLW5vdGhpbmctb24tZGVsZXRlLWV2ZW50LXdoZW4tbm90LVNUQU5EQUxPTkUucGF0Y2gKKysrIC9kZXYvbnVsbApAQCAtMSw2MCArMCwwIEBACi1Gcm9tIDVmZTM3ZWYzODUwMGY4NThhMjJlY2RmOWJmNjliZjA2ZTIxM2JmNjggTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCi1Gcm9tOiBKdXNzaSBLdWtrb25lbiA8anVzc2kua3Vra29uZW5AaW50ZWwuY29tPgotRGF0ZTogVHVlLCAyMiBNYXIgMjAxNiAxMjo0MTozNSArMDIwMAotU3ViamVjdDogW1BBVENIXSBEbyBub3RoaW5nIG9uIGRlbGV0ZS1ldmVudCB3aGVuIG5vdCBTVEFOREFMT05FCi0KLVRoaXMgcHJldmVudHMgYW4gb3Bwb3J0dW5pc3RpYyBhbHQtRjQgZnJvbSBjbG9zaW5nIHRoZSBkZXNrdG9wLgotCi1TaWduZWQtb2ZmLWJ5OiBKdXNzaSBLdWtrb25lbiA8anVzc2kua3Vra29uZW5AaW50ZWwuY29tPgotU2lnbmVkLW9mZi1ieTogUm9zcyBCdXJ0b24gPHJvc3MuYnVydG9uQGludGVsLmNvbT4KLQotCi1VcHN0cmVhbS1TdGF0dXM6IEJhY2twb3J0Ci0tLS0KLSBzcmMvZGVza3RvcC5jIHwgMTIgKysrKysrKysrKystCi0gMSBmaWxlIGNoYW5nZWQsIDExIGluc2VydGlvbnMoKyksIDEgZGVsZXRpb24oLSkKLQotZGlmZiAtLWdpdCBhL3NyYy9kZXNrdG9wLmMgYi9zcmMvZGVza3RvcC5jCi1pbmRleCBkNGZjMmZiLi45NGI0ZGRmIDEwMDY0NAotLS0tIGEvc3JjL2Rlc2t0b3AuYwotKysrIGIvc3JjL2Rlc2t0b3AuYwotQEAgLTEyMiw2ICsxMjIsMTUgQEAgbG9hZF9pdGVtcyAoVGFrdU1lbnUgKm1lbnUpCi0gCi0gfQotIAotKyNpZm5kZWYgU1RBTkRBTE9ORQotK3N0YXRpYyBnYm9vbGVhbgotK2RlbGV0ZV9ldmVudF9jYiAoR3RrV2lkZ2V0ICp3aWRnZXQsIEdka0V2ZW50ICpldmVudCwgZ3BvaW50ZXIgdXNlcl9kYXRhKQotK3sKLSsgIC8qIHByZXZlbnQgZGVmYXVsdCBoYW5kbGVyIGZyb20gZGVzdHJveWluZyB0aGUgd2luZG93ICovCi0rICByZXR1cm4gVFJVRTsKLSt9Ci0rI2VuZGlmCi0rCi0gc3RhdGljIHZvaWQKLSB3b3JrYXJlYV9jaGFuZ2VkIChpbnQgeCwgaW50IHksIGludCB3LCBpbnQgaCkKLSB7Ci1AQCAtMTQ0LDExICsxNTMsMTEgQEAgY3JlYXRlX2Rlc2t0b3AgKHZvaWQpCi0gICBndGtfaWNvbl9zaXplX3JlZ2lzdGVyICgidGFrdS1pY29uIiwgNjQsIDY0KTsKLSAKLSAgIHdpbmRvdyA9IGd0a193aW5kb3dfbmV3IChHVEtfV0lORE9XX1RPUExFVkVMKTsKLS0gIGdfc2lnbmFsX2Nvbm5lY3QgKHdpbmRvdywgImRlbGV0ZS1ldmVudCIsIEdfQ0FMTEJBQ0sgKGd0a19tYWluX3F1aXQpLCBOVUxMKTsKLSAgIGd0a193aWRnZXRfc2V0X25hbWUgKHdpbmRvdywgIlRha3VXaW5kb3ciKTsKLSAgIGd0a193aW5kb3dfc2V0X3RpdGxlIChHVEtfV0lORE9XICh3aW5kb3cpLCBfKCJEZXNrdG9wIikpOwotIAotICNpZm5kZWYgU1RBTkRBTE9ORQotKyAgZ19zaWduYWxfY29ubmVjdCAod2luZG93LCAiZGVsZXRlLWV2ZW50IiwgR19DQUxMQkFDSyAoZGVsZXRlX2V2ZW50X2NiKSwgTlVMTCk7Ci0gICBndGtfd2luZG93X3NldF90eXBlX2hpbnQgKEdUS19XSU5ET1cgKHdpbmRvdyksIEdES19XSU5ET1dfVFlQRV9ISU5UX0RFU0tUT1ApOwotICAgZ3RrX3dpbmRvd19zZXRfc2tpcF90YXNrYmFyX2hpbnQgKEdUS19XSU5ET1cgKHdpbmRvdyksIFRSVUUpOwotIAotQEAgLTE1Niw2ICsxNjUsNyBAQCBjcmVhdGVfZGVza3RvcCAodm9pZCkKLSAgIHNjcmVlbl93ID0gZ2RrX3NjcmVlbl9nZXRfd2lkdGggKHNjcmVlbik7Ci0gICBzY3JlZW5faCA9IGdka19zY3JlZW5fZ2V0X2hlaWdodCAoc2NyZWVuKTsKLSAjZWxzZQotKyAgZ19zaWduYWxfY29ubmVjdCAod2luZG93LCAiZGVsZXRlLWV2ZW50IiwgR19DQUxMQkFDSyAoZ3RrX21haW5fcXVpdCksIE5VTEwpOwotICAgc2NyZWVuX3cgPSA2NDA7Ci0gICBzY3JlZW5faCA9IDQ4MDsKLSAjZW5kaWYKLS0tIAotMi43LjAKLQpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zYXRvL21hdGNoYm94LWRlc2t0b3AvZmlsZXMvdmZvbGRlcnMvQWxsLmRpcmVjdG9yeSBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc2F0by9tYXRjaGJveC1kZXNrdG9wL2ZpbGVzL3Zmb2xkZXJzL0FsbC5kaXJlY3RvcnkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGZhNDFlMwotLS0gL2Rldi9udWxsCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc2F0by9tYXRjaGJveC1kZXNrdG9wL2ZpbGVzL3Zmb2xkZXJzL0FsbC5kaXJlY3RvcnkKQEAgLTAsMCArMSw1IEBACitbRGVza3RvcCBFbnRyeV0KK05hbWU9QWxsCitJY29uPW1iZm9sZGVyLnBuZworVHlwZT1EaXJlY3RvcnkKK01hdGNoPW1ldGEtYWxsCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXNhdG8vbWF0Y2hib3gtZGVza3RvcC9maWxlcy92Zm9sZGVycy9BcHBsaWNhdGlvbnMuZGlyZWN0b3J5IGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zYXRvL21hdGNoYm94LWRlc2t0b3AvZmlsZXMvdmZvbGRlcnMvQXBwbGljYXRpb25zLmRpcmVjdG9yeQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hN2UzNTAxCi0tLSAvZGV2L251bGwKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zYXRvL21hdGNoYm94LWRlc2t0b3AvZmlsZXMvdmZvbGRlcnMvQXBwbGljYXRpb25zLmRpcmVjdG9yeQpAQCAtMCwwICsxLDYgQEAKK1tEZXNrdG9wIEVudHJ5XQorTmFtZT1BcHBsaWNhdGlvbnMKK0NvbW1lbnQ9QXBwbGljYXRpb25zCitJY29uPWdub21lLWFwcGxpY2F0aW9ucy5wbmcKK1R5cGU9RGlyZWN0b3J5CitNYXRjaD1BdWRpb1ZpZGVvO0F1ZGlvO1ZpZGVvO0dyYXBoaWNzO05ldHdvcms7T2ZmaWNlO1V0aWxpdHk7U3lzdGVtO0RldmVsb3BtZW50O21ldGEtZmFsbGJhY2s7CmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXNhdG8vbWF0Y2hib3gtZGVza3RvcC9maWxlcy92Zm9sZGVycy9HYW1lcy5kaXJlY3RvcnkgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXNhdG8vbWF0Y2hib3gtZGVza3RvcC9maWxlcy92Zm9sZGVycy9HYW1lcy5kaXJlY3RvcnkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWIwOTI4YwotLS0gL2Rldi9udWxsCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc2F0by9tYXRjaGJveC1kZXNrdG9wL2ZpbGVzL3Zmb2xkZXJzL0dhbWVzLmRpcmVjdG9yeQpAQCAtMCwwICsxLDkgQEAKK1tEZXNrdG9wIEVudHJ5XQorTmFtZT1HYW1lcworTmFtZVtkZV09U3BpZWxlCitDb21tZW50PUdhbWVzIG9mIGFsbCBraW5kCitDb21tZW50W2RlXT1TcGllbGUgYWxsZXIgQXJ0CitJY29uPW1iZm9sZGVyLnBuZworVHlwZT1EaXJlY3RvcnkKK01hdGNoPUdhbWUKKwpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zYXRvL21hdGNoYm94LWRlc2t0b3AvZmlsZXMvdmZvbGRlcnMvUm9vdC5vcmRlciBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc2F0by9tYXRjaGJveC1kZXNrdG9wL2ZpbGVzL3Zmb2xkZXJzL1Jvb3Qub3JkZXIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDFhODZkMgotLS0gL2Rldi9udWxsCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc2F0by9tYXRjaGJveC1kZXNrdG9wL2ZpbGVzL3Zmb2xkZXJzL1Jvb3Qub3JkZXIKQEAgLTAsMCArMSw0IEBACitBcHBsaWNhdGlvbnMKK0dhbWVzCitTZXR0aW5ncworQWxsCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXNhdG8vbWF0Y2hib3gtZGVza3RvcC9maWxlcy92Zm9sZGVycy9TZXR0aW5ncy5kaXJlY3RvcnkgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXNhdG8vbWF0Y2hib3gtZGVza3RvcC9maWxlcy92Zm9sZGVycy9TZXR0aW5ncy5kaXJlY3RvcnkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWRkZTM2NQotLS0gL2Rldi9udWxsCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc2F0by9tYXRjaGJveC1kZXNrdG9wL2ZpbGVzL3Zmb2xkZXJzL1NldHRpbmdzLmRpcmVjdG9yeQpAQCAtMCwwICsxLDggQEAKK1tEZXNrdG9wIEVudHJ5XQorTmFtZT1TZXR0aW5ncworTmFtZVtkZV09RWluc3RlbGx1bmdlbgorQ29tbWVudD1TZXR0aW5ncyBmb3IgeW91ciBoYW5kaGVsZCBjb21wdXRlcgorQ29tbWVudFtkZV09RWluc3RlbGx1bmdlbiBmw7xyIElocmVuIEhhbmRoZWxkLUNvbXB1dGVyCitJY29uPW1iZm9sZGVyLnBuZworVHlwZT1EaXJlY3RvcnkKK01hdGNoPVNldHRpbmdzCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXNhdG8vbWF0Y2hib3gtZGVza3RvcC9tYXRjaGJveC1kZXNrdG9wXzIuMS5iYiBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc2F0by9tYXRjaGJveC1kZXNrdG9wL21hdGNoYm94LWRlc2t0b3BfMi4xLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ5YTJmMjIKLS0tIC9kZXYvbnVsbAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXNhdG8vbWF0Y2hib3gtZGVza3RvcC9tYXRjaGJveC1kZXNrdG9wXzIuMS5iYgpAQCAtMCwwICsxLDMzIEBACitTVU1NQVJZID0gIk1hdGNoYm94IFdpbmRvdyBNYW5hZ2VyIERlc2t0b3AiCitIT01FUEFHRSA9ICJodHRwOi8vbWF0Y2hib3gtcHJvamVjdC5vcmcvIgorQlVHVFJBQ0tFUiA9ICJodHRwOi8vYnVnemlsbGEueW9jdG9wcm9qZWN0Lm9yZy8iCisKK0xJQ0VOU0UgPSAiR1BMdjIrICYgTEdQTHYyKyIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PTk0ZDU1ZDUxMmE5YmEzNmNhYTliN2RmMDc5YmFlMTlmIFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL3NyYy9kZXNrdG9wLmM7ZW5kbGluZT0yMDttZDU9MzZjOWJmMjk1ZTYwMDdmMzQyMzA5NWY0MDVhZjVhMmQgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vc3JjL21haW4uYztlbmRsaW5lPTE5O21kNT0yMDQ0MjQ0Zjk3YTE5NWMyNWI3ZGM2MDJhYzdlOWEwMCIKKworREVQRU5EUyA9ICJndGsrMyBzdGFydHVwLW5vdGlmaWNhdGlvbiBkYnVzIgorU0VDVElPTiA9ICJ4MTEvd20iCisKKyMgU1JDUkVWIHRhZ2dlZCAyLjEKK1NSQ1JFViA9ICJjODQ3MzUxOWEwZjM3NDg4YjhiM2U4MzllMjc1YjAwMGNkZGUwYjgwIgorU1JDX1VSSSA9ICJnaXQ6Ly9naXQueW9jdG9wcm9qZWN0Lm9yZy8ke0JQTn0tMiBcCisgICAgICAgICAgIGZpbGU6Ly92Zm9sZGVycy8qIFwKKyAgICAgICAgICAgIgorCitFWFRSQV9PRUNPTkYgPSAiLS1lbmFibGUtc3RhcnR1cC1ub3RpZmljYXRpb24gLS13aXRoLWRidXMiCisKK1MgPSAiJHtXT1JLRElSfS9naXQiCisKK2luaGVyaXQgYXV0b3Rvb2xzIHBrZ2NvbmZpZyBkaXN0cm9fZmVhdHVyZXNfY2hlY2sKKworIyBUaGUgc3RhcnR1cC1ub3RpZmljYXRpb24gcmVxdWlyZXMgeDExIGluIERJU1RST19GRUFUVVJFUworUkVRVUlSRURfRElTVFJPX0ZFQVRVUkVTID0gIngxMSIKKworZG9faW5zdGFsbF9hcHBlbmQoKSB7CisgICAgaW5zdGFsbCAtZCAke0R9JHtkYXRhZGlyfS9tYXRjaGJveC92Zm9sZGVycy8KKyAgICBpbnN0YWxsIC1tIDA2NDQgJHtXT1JLRElSfS92Zm9sZGVycy8qICR7RH0ke2RhdGFkaXJ9L21hdGNoYm94L3Zmb2xkZXJzLworfQorCitGSUxFU18ke1BOfSArPSAiJHtkYXRhZGlyfS9tYXRjaGJveC92Zm9sZGVycy8iCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXNhdG8vbWF0Y2hib3gtZGVza3RvcC9tYXRjaGJveC1kZXNrdG9wX2dpdC5iYiBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc2F0by9tYXRjaGJveC1kZXNrdG9wL21hdGNoYm94LWRlc2t0b3BfZ2l0LmJiCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkYmU4YzExLi4wMDAwMDAwCi0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc2F0by9tYXRjaGJveC1kZXNrdG9wL21hdGNoYm94LWRlc2t0b3BfZ2l0LmJiCisrKyAvZGV2L251bGwKQEAgLTEsMjcgKzAsMCBAQAotU1VNTUFSWSA9ICJNYXRjaGJveCBXaW5kb3cgTWFuYWdlciBEZXNrdG9wIgotSE9NRVBBR0UgPSAiaHR0cDovL21hdGNoYm94LXByb2plY3Qub3JnLyIKLUJVR1RSQUNLRVIgPSAiaHR0cDovL2J1Z3ppbGxhLnlvY3RvcHJvamVjdC5vcmcvIgotCi1MSUNFTlNFID0gIkdQTHYyKyAmIExHUEx2MisiCi1MSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT05NGQ1NWQ1MTJhOWJhMzZjYWE5YjdkZjA3OWJhZTE5ZiBcCi0gICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9saWJ0YWt1L2VnZ3NlcXVlbmNlLmg7ZW5kbGluZT0yMDttZDU9YjkxZjY4Zjc2NDJhMTQ1OWZhMWY0YzlkZjk0YThmMTUgXAotICAgICAgICAgICAgICAgICAgICBmaWxlOi8vc3JjL2Rlc2t0b3AuYztlbmRsaW5lPTIwO21kNT0zNmM5YmYyOTVlNjAwN2YzNDIzMDk1ZjQwNWFmNWEyZCBcCi0gICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9zcmMvbWFpbi5jO2VuZGxpbmU9MTk7bWQ1PTIwNDQyNDRmOTdhMTk1YzI1YjdkYzYwMmFjN2U5YTAwIgotCi1ERVBFTkRTID0gImd0aysgc3RhcnR1cC1ub3RpZmljYXRpb24gZGJ1cyIKLVNFQ1RJT04gPSAieDExL3dtIgotU1JDUkVWID0gIjcxZTNlNmUwNDI3MWU5ZDVhMTRmMWMyMzFlZjEwMGM3ZjMyMDEzNGQiCi1QViA9ICIyLjArZ2l0JHtTUkNQVn0iCi0KLVNSQ19VUkkgPSAiZ2l0Oi8vZ2l0LnlvY3RvcHJvamVjdC5vcmcvJHtCUE59LTIgXAotICAgICAgICAgICBmaWxlOi8vMDAwMS1Eby1ub3RoaW5nLW9uLWRlbGV0ZS1ldmVudC13aGVuLW5vdC1TVEFOREFMT05FLnBhdGNoIFwKLSAgICAgICAgICAgIgotCi1FWFRSQV9PRUNPTkYgPSAiLS1lbmFibGUtc3RhcnR1cC1ub3RpZmljYXRpb24gLS13aXRoLWRidXMiCi0KLVMgPSAiJHtXT1JLRElSfS9naXQiCi0KLWluaGVyaXQgYXV0b3Rvb2xzIHBrZ2NvbmZpZyBkaXN0cm9fZmVhdHVyZXNfY2hlY2sKLQotIyBUaGUgc3RhcnR1cC1ub3RpZmljYXRpb24gcmVxdWlyZXMgeDExIGluIERJU1RST19GRUFUVVJFUwotUkVRVUlSRURfRElTVFJPX0ZFQVRVUkVTID0gIngxMSIKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc2F0by9tYXRjaGJveC1rZXlib2FyZC9tYXRjaGJveC1rZXlib2FyZF8wLjEuMS5iYiBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc2F0by9tYXRjaGJveC1rZXlib2FyZC9tYXRjaGJveC1rZXlib2FyZF8wLjEuMS5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NjVmMTM0Ci0tLSAvZGV2L251bGwKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zYXRvL21hdGNoYm94LWtleWJvYXJkL21hdGNoYm94LWtleWJvYXJkXzAuMS4xLmJiCkBAIC0wLDAgKzEsNTkgQEAKK1NVTU1BUlkgPSAiTWF0Y2hib3ggdmlydHVhbCBrZXlib2FyZCBmb3IgWDExIgorSE9NRVBBR0UgPSAiaHR0cDovL21hdGNoYm94LXByb2plY3Qub3JnIgorQlVHVFJBQ0tFUiA9ICJodHRwOi8vYnVnemlsbGEueW9jdG9wcm9qZWN0Lm9yZy8iCitTRUNUSU9OID0gIngxMSIKKworTElDRU5TRSA9ICJMR1BMdjIuMSIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PTRmYmQ2NTM4MGNkZDI1NTk1MTA3OTAwOGIzNjQ1MTZjIFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL3NyYy9tYXRjaGJveC1rZXlib2FyZC5oO2VuZGxpbmU9MTc7bWQ1PTlkNjU4NmM2OWU0YTkyNmYzY2IwYjQ0MjVmMjRiYTNjIFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL2FwcGxldC9hcHBsZXQuYztlbmRsaW5lPTE4O21kNT00YTBmNzIxNzI0NzQ2YjE0ZDk1YjUxZGRkNDJiOTVlNyIKKworREVQRU5EUyA9ICJsaWJmYWtla2V5IGV4cGF0IGxpYnhmdCIKKworI1NSQ1JFViBmb3IgMC4xLjEKK1NSQ1JFViA9ICI2MzBkODkwNjhkYzBhMWU5MTk5MzA2ZDQwNWNiMzJmODkyZGZhNGQzIgorU1JDX1VSSSA9ICJnaXQ6Ly9naXQueW9jdG9wcm9qZWN0Lm9yZy8ke0JQTn07YnJhbmNoPW1hdGNoYm94LWtleWJvYXJkLTAtMSBcCisgICAgICAgICAgIGZpbGU6Ly8wMDAxLWRlc2t0b3AtZmlsZS1IaWRlLXRoZS1rZXlib2FyZC1mcm9tLWFwcC1saXN0LnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovLzgwbWF0Y2hib3hrZXlib2FyZC5zaCIKKworUyA9ICIke1dPUktESVJ9L2dpdCIKKworaW5oZXJpdCBhdXRvdG9vbHMgcGtnY29uZmlnIGdldHRleHQgZ3RrLWltbW9kdWxlcy1jYWNoZSBkaXN0cm9fZmVhdHVyZXNfY2hlY2sKKworIyBUaGUgbGlieGZ0LCBsaWJmYWtla2V5IGFuZCBtYXRjaGJveC1wYW5lbC0yIHJlcXVpcmVzIHgxMSBpbiBESVNUUk9fRkVBVFVSRVMKK1JFUVVJUkVEX0RJU1RST19GRUFUVVJFUyA9ICJ4MTEiCisKK0VYVFJBX09FQ09ORiA9ICItLWRpc2FibGUtY2Fpcm8iCisKK1BBQ0tBR0VDT05GSUcgPz89ICJndGszLWltIGFwcGxldCIKK1BBQ0tBR0VDT05GSUdbYXBwbGV0XSA9ICItLWVuYWJsZS1hcHBsZXQsLS1kaXNhYmxlLWFwcGxldCxtYXRjaGJveC1wYW5lbC0yIgorUEFDS0FHRUNPTkZJR1tndGsyLWltXSA9ICItLWVuYWJsZS1ndGstaW0sLS1kaXNhYmxlLWd0ay1pbSxndGsrIgorUEFDS0FHRUNPTkZJR1tndGszLWltXSA9ICItLWVuYWJsZS1ndGszLWltLC0tZGlzYWJsZS1ndGszLWltLGd0ayszIgorCitQQUNLQUdFUyArPSAiJHtQTn0taW0gJHtQTn0tYXBwbGV0IgorCitGSUxFU18ke1BOfSA9ICIke2JpbmRpcn0vIFwKKwkgICAgICAgJHtzeXNjb25mZGlyfSBcCisJICAgICAgICR7ZGF0YWRpcn0vYXBwbGljYXRpb25zIFwKKwkgICAgICAgJHtkYXRhZGlyfS9waXhtYXBzIFwKKwkgICAgICAgJHtkYXRhZGlyfS9tYXRjaGJveC1rZXlib2FyZCIKKworRklMRVNfJHtQTn0taW0gPSAiJHtsaWJkaXJ9L2d0ay0yLjAvKi9pbW1vZHVsZXMvKi5zbyBcCisgICAgICAgICAgICAgICAgICAke2xpYmRpcn0vZ3RrLTMuMC8qL2ltbW9kdWxlcy8qLnNvIgorCitGSUxFU18ke1BOfS1hcHBsZXQgPSAiJHtsaWJkaXJ9L21hdGNoYm94LXBhbmVsLyouc28iCisKKworZG9faW5zdGFsbF9hcHBlbmQgKCkgeworCWluc3RhbGwgLWQgJHtEfS8ke3N5c2NvbmZkaXJ9L1gxMS9Yc2Vzc2lvbi5kLworCWluc3RhbGwgLW0gNzU1ICR7V09SS0RJUn0vODBtYXRjaGJveGtleWJvYXJkLnNoICR7RH0vJHtzeXNjb25mZGlyfS9YMTEvWHNlc3Npb24uZC8KKworCXJtIC1mICR7RH0ke2xpYmRpcn0vZ3RrLTIuMC8qL2ltbW9kdWxlcy8qLmxhCisJcm0gLWYgJHtEfSR7bGliZGlyfS9ndGstMy4wLyovaW1tb2R1bGVzLyoubGEKKwlybSAtZiAke0R9JHtsaWJkaXJ9L21hdGNoYm94LXBhbmVsLyoubGEKK30KKworR1RLSU1NT0RVTEVTX1BBQ0tBR0VTID0gIiR7UE59LWltIgorCitSREVQRU5EU18ke1BOfSA9ICJmb3JtZmFjdG9yIGRidXMtd2FpdCIKK1JSRUNPTU1FTkRTXyR7UE59ID0gIiR7UE59LWFwcGxldCIKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc2F0by9tYXRjaGJveC1rZXlib2FyZC9tYXRjaGJveC1rZXlib2FyZF9naXQuYmIgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXNhdG8vbWF0Y2hib3gta2V5Ym9hcmQvbWF0Y2hib3gta2V5Ym9hcmRfZ2l0LmJiCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlYmExOTcwLi4wMDAwMDAwCi0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc2F0by9tYXRjaGJveC1rZXlib2FyZC9tYXRjaGJveC1rZXlib2FyZF9naXQuYmIKKysrIC9kZXYvbnVsbApAQCAtMSw1NCArMCwwIEBACi1TVU1NQVJZID0gIk1hdGNoYm94IHZpcnR1YWwga2V5Ym9hcmQgZm9yIFgxMSIKLUhPTUVQQUdFID0gImh0dHA6Ly9tYXRjaGJveC1wcm9qZWN0Lm9yZyIKLUJVR1RSQUNLRVIgPSAiaHR0cDovL2J1Z3ppbGxhLnlvY3RvcHJvamVjdC5vcmcvIgotU0VDVElPTiA9ICJ4MTEiCi0KLUxJQ0VOU0UgPSAiTEdQTHYyLjEiCi1MSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT00ZmJkNjUzODBjZGQyNTU5NTEwNzkwMDhiMzY0NTE2YyBcCi0gICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9zcmMvbWF0Y2hib3gta2V5Ym9hcmQuaDtlbmRsaW5lPTE3O21kNT05ZDY1ODZjNjllNGE5MjZmM2NiMGI0NDI1ZjI0YmEzYyBcCi0gICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9hcHBsZXQvYXBwbGV0LmM7ZW5kbGluZT0xODttZDU9NGEwZjcyMTcyNDc0NmIxNGQ5NWI1MWRkZDQyYjk1ZTciCi0KLURFUEVORFMgPSAibGliZmFrZWtleSBleHBhdCBsaWJ4ZnQgZ3RrKyBtYXRjaGJveC1wYW5lbC0yIgotCi1TUkNSRVYgPSAiZWJjMzMwZWFjOGI5ZDM4ZTlhZWY5ZjAxZTcyNDFjOTA0YmQwMTA3MyIKLVBWID0gIjAuMCtnaXQke1NSQ1BWfSIKLVBSID0gInI0IgotCi1TUkNfVVJJID0gImdpdDovL2dpdC55b2N0b3Byb2plY3Qub3JnLyR7QlBOfTticmFuY2g9bWF0Y2hib3gta2V5Ym9hcmQtMC0xIFwKLSAgICAgICAgICAgZmlsZTovLzAwMDEtZGVza3RvcC1maWxlLUhpZGUtdGhlLWtleWJvYXJkLWZyb20tYXBwLWxpc3QucGF0Y2ggXAotICAgICAgICAgICBmaWxlOi8vODBtYXRjaGJveGtleWJvYXJkLnNoIgotCi1TID0gIiR7V09SS0RJUn0vZ2l0IgotCi1pbmhlcml0IGF1dG90b29scyBwa2djb25maWcgZ2V0dGV4dCBndGstaW1tb2R1bGVzLWNhY2hlIGRpc3Ryb19mZWF0dXJlc19jaGVjawotCi0jIFRoZSBsaWJ4ZnQsIGxpYmZha2VrZXkgYW5kIG1hdGNoYm94LXBhbmVsLTIgcmVxdWlyZXMgeDExIGluIERJU1RST19GRUFUVVJFUwotUkVRVUlSRURfRElTVFJPX0ZFQVRVUkVTID0gIngxMSIKLQotRVhUUkFfT0VDT05GID0gIi0tZGlzYWJsZS1jYWlybyAtLWVuYWJsZS1ndGstaW0gLS1lbmFibGUtYXBwbGV0IgotCi1QQUNLQUdFUyArPSAiJHtQTn0taW0gJHtQTn0tYXBwbGV0IgotCi1GSUxFU18ke1BOfSA9ICIke2JpbmRpcn0vIFwKLQkgICAgICAgJHtzeXNjb25mZGlyfSBcCi0JICAgICAgICR7ZGF0YWRpcn0vYXBwbGljYXRpb25zIFwKLQkgICAgICAgJHtkYXRhZGlyfS9waXhtYXBzIFwKLQkgICAgICAgJHtkYXRhZGlyfS9tYXRjaGJveC1rZXlib2FyZCIKLQotRklMRVNfJHtQTn0taW0gPSAiJHtsaWJkaXJ9L2d0ay0yLjAvKi9pbW1vZHVsZXMvKi5zbyIKLQotRklMRVNfJHtQTn0tYXBwbGV0ID0gIiR7bGliZGlyfS9tYXRjaGJveC1wYW5lbC8qLnNvIgotCi0KLWRvX2luc3RhbGxfYXBwZW5kICgpIHsKLQlpbnN0YWxsIC1kICR7RH0vJHtzeXNjb25mZGlyfS9YMTEvWHNlc3Npb24uZC8KLQlpbnN0YWxsIC1tIDc1NSAke1dPUktESVJ9LzgwbWF0Y2hib3hrZXlib2FyZC5zaCAke0R9LyR7c3lzY29uZmRpcn0vWDExL1hzZXNzaW9uLmQvCi0KLQlybSAtZiAke0R9JHtsaWJkaXJ9L2d0ay0yLjAvKi9pbW1vZHVsZXMvKi5sYQotCXJtIC1mICR7RH0ke2xpYmRpcn0vbWF0Y2hib3gtcGFuZWwvKi5sYQotfQotCi1HVEtJTU1PRFVMRVNfUEFDS0FHRVMgPSAiJHtQTn0taW0iCi0KLVJERVBFTkRTXyR7UE59ID0gImZvcm1mYWN0b3IgZGJ1cy13YWl0IgotUlJFQ09NTUVORFNfJHtQTn0gPSAiJHtQTn0tYXBwbGV0IgpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zYXRvL21hdGNoYm94LXBhbmVsLTIvZmlsZXMvMDAwMS1hcHBsZXRzLXN5c3RyYXktQWxsb3ctaWNvbnMtdG8tYmUtc21hbGxlci5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc2F0by9tYXRjaGJveC1wYW5lbC0yL2ZpbGVzLzAwMDEtYXBwbGV0cy1zeXN0cmF5LUFsbG93LWljb25zLXRvLWJlLXNtYWxsZXIucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDEzZGQzZAotLS0gL2Rldi9udWxsCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc2F0by9tYXRjaGJveC1wYW5lbC0yL2ZpbGVzLzAwMDEtYXBwbGV0cy1zeXN0cmF5LUFsbG93LWljb25zLXRvLWJlLXNtYWxsZXIucGF0Y2gKQEAgLTAsMCArMSwzNCBAQAorRnJvbSBmODNhOTE3OTY5NmIyZDA2MGVlNDg2MDczM2RhZmJmMzhiYmQ0Yjg3IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogSnVzc2kgS3Vra29uZW4gPGp1c3NpLmt1a2tvbmVuQGludGVsLmNvbT4KK0RhdGU6IFdlZCwgMjggU2VwIDIwMTYgMTU6MDU6NDEgKzAzMDAKK1N1YmplY3Q6IFtQQVRDSF0gYXBwbGV0cy9zeXN0cmF5OiBBbGxvdyBpY29ucyB0byBiZSBzbWFsbGVyCisKK0Rvbid0IGV4cGFuZC9maWxsIHRoZSBzeXN0cmF5IGl0ZW1zLCBhbGlnbiB0aGVtIGluIHRoZSBjZW50ZXIgb2YgdGhlCitzeXN0cmF5IHBhbmVsLiBUaGlzIG1ha2VzIHN1cmUgdGhlIGljb25zIGFyZSBkcmF3biBhdCB0aGUgc2l6ZSB0aGV5CitleHBlY3QuCisKK1NpZ25lZC1vZmYtYnk6IEp1c3NpIEt1a2tvbmVuIDxqdXNzaS5rdWtrb25lbkBpbnRlbC5jb20+CitVcHN0cmVhbS1TdGF0dXM6IFN1Ym1pdHRlZAorLS0tCisgYXBwbGV0cy9zeXN0cmF5L3N5c3RyYXkuYyB8IDUgKysrLS0KKyAxIGZpbGUgY2hhbmdlZCwgMyBpbnNlcnRpb25zKCspLCAyIGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvYXBwbGV0cy9zeXN0cmF5L3N5c3RyYXkuYyBiL2FwcGxldHMvc3lzdHJheS9zeXN0cmF5LmMKK2luZGV4IDM5Njk4YTguLjk0YTU3NTMgMTAwNjQ0CistLS0gYS9hcHBsZXRzL3N5c3RyYXkvc3lzdHJheS5jCisrKysgYi9hcHBsZXRzL3N5c3RyYXkvc3lzdHJheS5jCitAQCAtMjksOCArMjksOSBAQCBvbl9yZWFsaXplIChHdGtXaWRnZXQgKndpZGdldCwgZ3BvaW50ZXIgdXNlcl9kYXRhKQorICAgdHJheSA9IChHdGtXaWRnZXQgKiluYV90cmF5X25ld19mb3Jfc2NyZWVuIChzY3JlZW4sIG9yaWVudGF0aW9uKTsKKyAKKyAgIGd0a193aWRnZXRfc2hvdyAodHJheSk7CistCistICBndGtfY29udGFpbmVyX2FkZCAoR1RLX0NPTlRBSU5FUiAod2lkZ2V0KSwgdHJheSk7CisrICBndGtfd2lkZ2V0X3NldF92YWxpZ24gKHRyYXksIEdUS19BTElHTl9DRU5URVIpOworKyAgZ3RrX3dpZGdldF9zZXRfaGFsaWduICh0cmF5LCBHVEtfQUxJR05fQ0VOVEVSKTsKKysgIGd0a19ib3hfcGFja19zdGFydCAoR1RLX0JPWCAod2lkZ2V0KSwgdHJheSwgRkFMU0UsIEZBTFNFLCAwKTsKKyB9CisgCisgR19NT0RVTEVfRVhQT1JUIEd0a1dpZGdldCAqCistLSAKKzIuMS40CisKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc2F0by9tYXRjaGJveC1wYW5lbC0yL2ZpbGVzLzAwMDEtc2hvd2Rlc2t0b3AtTWFrZS1zdXJlLWFjdGl2ZS1zdGF0ZS1pcy1pbml0aWFsaXplZC5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc2F0by9tYXRjaGJveC1wYW5lbC0yL2ZpbGVzLzAwMDEtc2hvd2Rlc2t0b3AtTWFrZS1zdXJlLWFjdGl2ZS1zdGF0ZS1pcy1pbml0aWFsaXplZC5wYXRjaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggM2JhYjZkMi4uMDAwMDAwMAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXNhdG8vbWF0Y2hib3gtcGFuZWwtMi9maWxlcy8wMDAxLXNob3dkZXNrdG9wLU1ha2Utc3VyZS1hY3RpdmUtc3RhdGUtaXMtaW5pdGlhbGl6ZWQucGF0Y2gKKysrIC9kZXYvbnVsbApAQCAtMSw1MCArMCwwIEBACi1Gcm9tIGEwYjVmY2EwNGRhMjA4OTkwZjNjNDBlNjVkYmIwNDVkYTRjZGIzNWUgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCi1Gcm9tOiBKdXNzaSBLdWtrb25lbiA8anVzc2kua3Vra29uZW5AaW50ZWwuY29tPgotRGF0ZTogU3VuLCAyMCBNYXIgMjAxNiAxMzoyNDozNyArMDIwMAotU3ViamVjdDogW1BBVENIXSBzaG93ZGVza3RvcDogTWFrZSBzdXJlIGFjdGl2ZSBzdGF0ZSBpcyBpbml0aWFsaXplZAotCi1UaGVyZSBhcmUgY2FzZXMgKGluIHFlbXUgYXQgbGVhc3QpIHdoZXJlIHNldF9hY3RpdmUoKQotaXMgbmV2ZXIgY2FsbGVkIG9uIHN0YXJ0dXAuIE1ha2Ugc3VyZSB3ZSBpbml0aWFsaXplIHRoZSBhY3RpdmUKLXN0YXRlIHNvIHRoZSBpY29uIGdldHMgbG9hZGVkIGFuZCB0aGUgYXBwbGV0IGlzIG5vdCBjb25mdXNlZAotYWJvdXQgdGhlIGN1cnJlbnQgc3RhdGUuCi0KLVNpZ25lZC1vZmYtYnk6IEp1c3NpIEt1a2tvbmVuIDxqdXNzaS5rdWtrb25lbkBpbnRlbC5jb20+Ci1TaWduZWQtb2ZmLWJ5OiBSb3NzIEJ1cnRvbiA8cm9zcy5idXJ0b25AaW50ZWwuY29tPgotCi0KLVVwc3RyZWFtLVN0YXR1czogQmFja3BvcnQKLS0tLQotIGFwcGxldHMvc2hvd2Rlc2t0b3Avc2hvd2Rlc2t0b3AuYyB8IDEwICsrKysrKysrKysKLSAxIGZpbGUgY2hhbmdlZCwgMTAgaW5zZXJ0aW9ucygrKQotCi1kaWZmIC0tZ2l0IGEvYXBwbGV0cy9zaG93ZGVza3RvcC9zaG93ZGVza3RvcC5jIGIvYXBwbGV0cy9zaG93ZGVza3RvcC9zaG93ZGVza3RvcC5jCi1pbmRleCA2MWRkNWMyLi4zM2MxM2UxIDEwMDY0NAotLS0tIGEvYXBwbGV0cy9zaG93ZGVza3RvcC9zaG93ZGVza3RvcC5jCi0rKysgYi9hcHBsZXRzL3Nob3dkZXNrdG9wL3Nob3dkZXNrdG9wLmMKLUBAIC0xODEsNiArMTgxLDEyIEBAIGJ1dHRvbl9jbGlja2VkX2NiIChHdGtCdXR0b24gICAgICAgICAqYnV0dG9uLAotIAkgICAgICAgICAgICAmeGV2KTsKLSB9Ci0gCi0rc3RhdGljIHZvaWQKLStyZWFsaXplX2NiIChHdGtXaWRnZXQgKmJ1dHRvbiwgU2hvd0Rlc2t0b3BBcHBsZXQgKmFwcGxldCkKLSt7Ci0rICAgICAgICBzeW5jX2FwcGxldCAoYXBwbGV0KTsKLSt9Ci0rCi0gR19NT0RVTEVfRVhQT1JUIEd0a1dpZGdldCAqCi0gbWJfcGFuZWxfYXBwbGV0X2NyZWF0ZSAoY29uc3QgY2hhciAgICAqaWQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgR3RrT3JpZW50YXRpb24gb3JpZW50YXRpb24pCi1AQCAtMjE2LDYgKzIyMiwxMCBAQCBtYl9wYW5lbF9hcHBsZXRfY3JlYXRlIChjb25zdCBjaGFyICAgICppZCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICJjbGlja2VkIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIEdfQ0FMTEJBQ0sgKGJ1dHRvbl9jbGlja2VkX2NiKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIGFwcGxldCk7Ci0rICAgICAgICBnX3NpZ25hbF9jb25uZWN0IChidXR0b24sCi0rICAgICAgICAgICAgICAgICAgICAgICAgICAicmVhbGl6ZSIsCi0rICAgICAgICAgICAgICAgICAgICAgICAgICBHX0NBTExCQUNLIChyZWFsaXplX2NiKSwKLSsgICAgICAgICAgICAgICAgICAgICAgICAgIGFwcGxldCk7Ci0gCi0gICAgICAgICBnX29iamVjdF93ZWFrX3JlZiAoR19PQkpFQ1QgKGJ1dHRvbiksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgKEdXZWFrTm90aWZ5KSBzaG93X2Rlc2t0b3BfYXBwbGV0X2ZyZWUsCi0tLSAKLTIuNy4wCi0KZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc2F0by9tYXRjaGJveC1wYW5lbC0yL2ZpbGVzL3NpbGVuY2Utd2FybmluZ3MucGF0Y2ggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXNhdG8vbWF0Y2hib3gtcGFuZWwtMi9maWxlcy9zaWxlbmNlLXdhcm5pbmdzLnBhdGNoCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0NWJhOWEwLi4wMDAwMDAwCi0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc2F0by9tYXRjaGJveC1wYW5lbC0yL2ZpbGVzL3NpbGVuY2Utd2FybmluZ3MucGF0Y2gKKysrIC9kZXYvbnVsbApAQCAtMSw2NCArMCwwIEBACi1Eb24ndCB3YXJuIGlmIHRoZSBtYWNoaW5lIGRvZXNuJ3QgYWN0dWFsbHkgaGF2ZSBhIGJhdHRlcnksIG9yIGlmIHRoZSBhcHBsZXRzCi1zdHJpbmcgY29udGFpbnMgY29uc2VjdXRpdmUgc2VwYXJhdG9ycy4KLQotVXBzdHJlYW0tU3RhdHVzOiBCYWNrcG9ydAotU2lnbmVkLW9mZi1ieTogUm9zcyBCdXJ0b24gPHJvc3MuYnVydG9uQGludGVsLmNvbT4KLQotZGlmZiAtLWdpdCBhL2FwcGxldHMvYmF0dGVyeS9iYXR0ZXJ5LWFjcGkuYyBiL2FwcGxldHMvYmF0dGVyeS9iYXR0ZXJ5LWFjcGkuYwotaW5kZXggNjUxNWNiMC4uYzQ0ZGQxMiAxMDA2NDQKLS0tLSBhL2FwcGxldHMvYmF0dGVyeS9iYXR0ZXJ5LWFjcGkuYwotKysrIGIvYXBwbGV0cy9iYXR0ZXJ5L2JhdHRlcnktYWNwaS5jCi1AQCAtMTQsOCArMTQsNiBAQCBpbnQgYmF0dF9zdGF0ZSwgYWNfc3RhdGU7Ci0gaW50IHBtX3N1cHBvcnQodm9pZCkKLSB7Ci0gCWlmKGNoZWNrX2FjcGlfc3VwcG9ydCgpID09IE5PVF9TVVBQT1JURUQpewotLQkJZ193YXJuaW5nKCJObyBBQ1BJIHN1cHBvcnRcbiIpOwotLQotIAkJcmV0dXJuIDA7Ci0gCX0KLSAKLUBAIC0zMiw4ICszMCw5IEBAIGNvbnN0IGNoYXIqIHBtX2JhdHRlcnlfaWNvbih2b2lkKQotIAljb25zdCBjaGFyICppY29uOwotIAliYXR0ZXJ5X3QgKmJpbmZvOwotIAotKyAgICAgICAgLyogTm8gYmF0dGVyeSBhdmFpbGFibGUgKG5vdCBwcmVzZW50LCBkaXNhYmxlZCwgb3Igc29tZXRoaW5nCi0rICAgICAgICAgICBlbHNlLiBTaWxlbnRseSBkbyBub3RoaW5nLiAqLwotIAlpZiAoYmF0dF9zdGF0ZSAhPSBTVUNDRVNTKSB7Ci0tCQlnX3dhcm5pbmcoIkNvdWxkbnQgaW5pdGlhbGl6ZSBBQ1BJIGJhdHRlcnlcbiIpOwotIAkJcmV0dXJuIE5VTEw7Ci0gCX0KLSAKLWRpZmYgLS1naXQgYS9hcHBsZXRzL2JhdHRlcnkvYmF0dGVyeS1hcG0uYyBiL2FwcGxldHMvYmF0dGVyeS9iYXR0ZXJ5LWFwbS5jCi1pbmRleCA1NDY3NDM4Li4yZjM5Y2I2IDEwMDY0NAotLS0tIGEvYXBwbGV0cy9iYXR0ZXJ5L2JhdHRlcnktYXBtLmMKLSsrKyBiL2FwcGxldHMvYmF0dGVyeS9iYXR0ZXJ5LWFwbS5jCi1AQCAtMTAsOCArMTAsNiBAQAotIGludCBwbV9zdXBwb3J0KHZvaWQpCi0gewotIAlpZiAoMSA9PSBhcG1fZXhpc3RzICgpKSB7Ci0tICAgICAgICAgICAgICAgIGdfd2FybmluZyAoIk5vIEFQTSBzdXBwb3J0Iik7Ci0tCi0gICAgICAgICAgICAgICAgIHJldHVybiAwOwotICAgICAgICAgfQotIAotZGlmZiAtLWdpdCBhL21hdGNoYm94LXBhbmVsL21iLXBhbmVsLmMgYi9tYXRjaGJveC1wYW5lbC9tYi1wYW5lbC5jCi1pbmRleCAyZDhjYWZkLi44MjhhMzZkIDEwMDY0NAotLS0tIGEvbWF0Y2hib3gtcGFuZWwvbWItcGFuZWwuYwotKysrIGIvbWF0Y2hib3gtcGFuZWwvbWItcGFuZWwuYwotQEAgLTExMCwxMCArMTEwLDE1IEBAIGxvYWRfYXBwbGV0cyAoY29uc3QgY2hhciAgICAqYXBwbGV0c19kZXNjLAotICAgICAgICAgYXBwbGV0cyA9IGdfc3Ryc3BsaXQgKGFwcGxldHNfZGVzYywgIiwiLCAtMSk7Ci0gCi0gICAgICAgICBmb3IgKGkgPSAwOyBhcHBsZXRzW2ldOyBpKyspIHsKLSsgICAgICAgICAgICAgICAgY2hhciAqczsKLSAgICAgICAgICAgICAgICAgY2hhciAqKmJpdHM7Ci0gICAgICAgICAgICAgICAgIEd0a1dpZGdldCAqYXBwbGV0OwotIAotLSAgICAgICAgICAgICAgICBiaXRzID0gZ19zdHJzcGxpdCAoYXBwbGV0c1tpXSwgIjoiLCAyKTsKLSsgICAgICAgICAgICAgICAgcyA9IGFwcGxldHNbaV07Ci0rICAgICAgICAgICAgICAgIGlmIChzID09IE5VTEwgfHwgc1swXSA9PSAnXDAnKQotKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotKwotKyAgICAgICAgICAgICAgICBiaXRzID0gZ19zdHJzcGxpdCAocywgIjoiLCAyKTsKLSAKLSAgICAgICAgICAgICAgICAgYXBwbGV0ID0gbG9hZF9hcHBsZXQgKGJpdHNbMF0sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiaXRzWzFdLApkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zYXRvL21hdGNoYm94LXBhbmVsLTIvbWF0Y2hib3gtcGFuZWwtMl8yLjExLmJiIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zYXRvL21hdGNoYm94LXBhbmVsLTIvbWF0Y2hib3gtcGFuZWwtMl8yLjExLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQzOGU3ZjYKLS0tIC9kZXYvbnVsbAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXNhdG8vbWF0Y2hib3gtcGFuZWwtMi9tYXRjaGJveC1wYW5lbC0yXzIuMTEuYmIKQEAgLTAsMCArMSw0MCBAQAorU1VNTUFSWSA9ICJTaW1wbGUgR1RLKyBiYXNlZCBwYW5lbCBmb3IgaGFuZGhlbGQgZGV2aWNlcyIKK0hPTUVQQUdFID0gImh0dHA6Ly9tYXRjaGJveC1wcm9qZWN0Lm9yZyIKK0JVR1RSQUNLRVIgPSAiaHR0cDovL2J1Z3ppbGxhLnlvY3RvcHJvamVjdC5vcmcvIgorCitMSUNFTlNFID0gIkdQTHYyKyIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PTk0ZDU1ZDUxMmE5YmEzNmNhYTliN2RmMDc5YmFlMTlmIFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL21hdGNoYm94LXBhbmVsL21iLXBhbmVsLmg7ZW5kbGluZT0xMDttZDU9MGI3ZGIyOGY0YjY4NjNmYjg1M2QwNDY3ZTU5MDAxOWEgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vYXBwbGV0cy9zdGFydHVwL3N0YXJ0dXAuYztlbmRsaW5lPTIyO21kNT03Y2JjZWE2MGI2NjdmNjA5NDk1MjIyZmFmM2UwNzkxNyIKKworREVQRU5EUyA9ICJnbm9tZS1jb21tb24gZ3RrKzMgc3RhcnR1cC1ub3RpZmljYXRpb24gZGJ1cyBkYnVzLWdsaWIgZGJ1cy1nbGliLW5hdGl2ZSIKK0RFUEVORFMgKz0gIiAke0BiYi51dGlscy5jb250YWlucygiTUFDSElORV9GRUFUVVJFUyIsICJhY3BpIiwgImxpYmFjcGkiLCAiIixkKX0iCitERVBFTkRTICs9ICIgJHtAYmIudXRpbHMuY29udGFpbnMoIk1BQ0hJTkVfRkVBVFVSRVMiLCAiYXBtIiwgImFwbWQiLCAiIixkKX0iCisKKyMgVGhlIHN0YXJ0dXAtbm90aWZpY2F0aW9uIHJlcXVpcmVzIHgxMSBpbiBESVNUUk9fRkVBVFVSRVMKK1JFUVVJUkVEX0RJU1RST19GRUFUVVJFUyA9ICJ4MTEiCisKKyMgU1JDUkVWIHRhZ2dlZCAyLjExCitTUkNSRVYgPSAiODUwZDVmZmZkZTdkYmZiMzIwMTU5MTY1MjRkODgwMTRjYzJjZmIzMCIKKworUlBST1ZJREVTXyR7UE59ID0gIm1hdGNoYm94LXBhbmVsIgorUlJFUExBQ0VTXyR7UE59ID0gIm1hdGNoYm94LXBhbmVsIgorUkNPTkZMSUNUU18ke1BOfSA9ICJtYXRjaGJveC1wYW5lbCIKKworU1JDX1VSSSA9ICJnaXQ6Ly9naXQueW9jdG9wcm9qZWN0Lm9yZy8ke0JQTn0gXAorICAgICAgICAgICBmaWxlOi8vMDAwMS1hcHBsZXRzLXN5c3RyYXktQWxsb3ctaWNvbnMtdG8tYmUtc21hbGxlci5wYXRjaCBcCisgICAgICAgICAgICIKKworRVhUUkFfT0VDT05GID0gIi0tZW5hYmxlLXN0YXJ0dXAtbm90aWZpY2F0aW9uIC0tZW5hYmxlLWRidXMiCitFWFRSQV9PRUNPTkYgKz0gIiAke0BiYi51dGlscy5jb250YWlucygiTUFDSElORV9GRUFUVVJFUyIsICJhY3BpIiwgIi0td2l0aC1iYXR0ZXJ5PWFjcGkiLCAiIixkKX0iCitFWFRSQV9PRUNPTkYgKz0gIiAke0BiYi51dGlscy5jb250YWlucygiTUFDSElORV9GRUFUVVJFUyIsICJhcG0iLCAiLS13aXRoLWJhdHRlcnk9YXBtIiwgIiIsZCl9IgorCitTID0gIiR7V09SS0RJUn0vZ2l0IgorCitGSUxFU18ke1BOfSArPSAiJHtsaWJkaXJ9L21hdGNoYm94LXBhbmVsLyouc28gXAorICAgICAgICAgICAgICAgICR7ZGF0YWRpcn0vbWF0Y2hib3gtcGFuZWwvYnJpZ2h0bmVzcy8qLnBuZyBcCisgICAgICAgICAgICAgICAgJHtkYXRhZGlyfS9tYXRjaGJveC1wYW5lbC9zdGFydHVwLyoucG5nIFwKKyAgICAgICAgICAgICAgICAke2RhdGFkaXJ9L2ljb25zLyIKK0ZJTEVTXyR7UE59LWRldiArPSAiJHtsaWJkaXJ9L21hdGNoYm94LXBhbmVsLyoubGEiCisKK2luaGVyaXQgYXV0b3Rvb2xzIHBrZ2NvbmZpZyBkaXN0cm9fZmVhdHVyZXNfY2hlY2sKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc2F0by9tYXRjaGJveC1wYW5lbC0yL21hdGNoYm94LXBhbmVsLTJfZ2l0LmJiIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zYXRvL21hdGNoYm94LXBhbmVsLTIvbWF0Y2hib3gtcGFuZWwtMl9naXQuYmIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDk4YzNhZTQuLjAwMDAwMDAKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zYXRvL21hdGNoYm94LXBhbmVsLTIvbWF0Y2hib3gtcGFuZWwtMl9naXQuYmIKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi1TVU1NQVJZID0gIlNpbXBsZSBHVEsrIGJhc2VkIHBhbmVsIGZvciBoYW5kaGVsZCBkZXZpY2VzIgotSE9NRVBBR0UgPSAiaHR0cDovL21hdGNoYm94LXByb2plY3Qub3JnIgotQlVHVFJBQ0tFUiA9ICJodHRwOi8vYnVnemlsbGEueW9jdG9wcm9qZWN0Lm9yZy8iCi0KLUxJQ0VOU0UgPSAiR1BMdjIrIgotTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9OTRkNTVkNTEyYTliYTM2Y2FhOWI3ZGYwNzliYWUxOWYgXAotICAgICAgICAgICAgICAgICAgICBmaWxlOi8vbWF0Y2hib3gtcGFuZWwvbWItcGFuZWwuaDtlbmRsaW5lPTEwO21kNT0wYjdkYjI4ZjRiNjg2M2ZiODUzZDA0NjdlNTkwMDE5YSBcCi0gICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9hcHBsZXRzL3N0YXJ0dXAvc3RhcnR1cC5jO2VuZGxpbmU9MjI7bWQ1PWIwYTY0ZmJlZjMwOTdkNzlmODI2NGU2OTA3YTk4ZjAzIgotCi1ERVBFTkRTID0gImdub21lLWNvbW1vbiBndGsrIHN0YXJ0dXAtbm90aWZpY2F0aW9uIGRidXMgZGJ1cy1nbGliIgotREVQRU5EUyArPSAiICR7QGJiLnV0aWxzLmNvbnRhaW5zKCJNQUNISU5FX0ZFQVRVUkVTIiwgImFjcGkiLCAibGliYWNwaSIsICIiLGQpfSIKLURFUEVORFMgKz0gIiAke0BiYi51dGlscy5jb250YWlucygiTUFDSElORV9GRUFUVVJFUyIsICJhcG0iLCAiYXBtZCIsICIiLGQpfSIKLQotIyBUaGUgc3RhcnR1cC1ub3RpZmljYXRpb24gcmVxdWlyZXMgeDExIGluIERJU1RST19GRUFUVVJFUwotUkVRVUlSRURfRElTVFJPX0ZFQVRVUkVTID0gIngxMSIKLQotU1JDUkVWID0gIjI2YTNhNjdiNDFjNTBlMGFlMTYzZDhmZTg2Y2NmN2EwZjBhNjcxYWUiCi1QViA9ICIyLjArZ2l0JHtTUkNQVn0iCi0KLVJQUk9WSURFU18ke1BOfSA9ICJtYXRjaGJveC1wYW5lbCIKLVJSRVBMQUNFU18ke1BOfSA9ICJtYXRjaGJveC1wYW5lbCIKLVJDT05GTElDVFNfJHtQTn0gPSAibWF0Y2hib3gtcGFuZWwiCi0KLVNSQ19VUkkgPSAiZ2l0Oi8vZ2l0LnlvY3RvcHJvamVjdC5vcmcvJHtCUE59IFwKLSAgICAgICAgICAgZmlsZTovLzAwMDEtc2hvd2Rlc2t0b3AtTWFrZS1zdXJlLWFjdGl2ZS1zdGF0ZS1pcy1pbml0aWFsaXplZC5wYXRjaCBcCi0gICAgICAgICAgIGZpbGU6Ly9zaWxlbmNlLXdhcm5pbmdzLnBhdGNoIgotCi1FWFRSQV9PRUNPTkYgPSAiLS1lbmFibGUtc3RhcnR1cC1ub3RpZmljYXRpb24gLS1lbmFibGUtZGJ1cyIKLUVYVFJBX09FQ09ORiArPSAiICR7QGJiLnV0aWxzLmNvbnRhaW5zKCJNQUNISU5FX0ZFQVRVUkVTIiwgImFjcGkiLCAiLS13aXRoLWJhdHRlcnk9YWNwaSIsICIiLGQpfSIKLUVYVFJBX09FQ09ORiArPSAiICR7QGJiLnV0aWxzLmNvbnRhaW5zKCJNQUNISU5FX0ZFQVRVUkVTIiwgImFwbSIsICItLXdpdGgtYmF0dGVyeT1hcG0iLCAiIixkKX0iCi0KLVMgPSAiJHtXT1JLRElSfS9naXQiCi0KLUZJTEVTXyR7UE59ICs9ICIke2xpYmRpcn0vbWF0Y2hib3gtcGFuZWwvKi5zbyBcCi0gICAgICAgICAgICAgICAgJHtkYXRhZGlyfS9tYXRjaGJveC1wYW5lbC9icmlnaHRuZXNzLyoucG5nIFwKLSAgICAgICAgICAgICAgICAke2RhdGFkaXJ9L21hdGNoYm94LXBhbmVsL3N0YXJ0dXAvKi5wbmcgIgotRklMRVNfJHtQTn0tZGV2ICs9ICIke2xpYmRpcn0vbWF0Y2hib3gtcGFuZWwvKi5sYSIKLQotaW5oZXJpdCBhdXRvdG9vbHMgcGtnY29uZmlnIGRpc3Ryb19mZWF0dXJlc19jaGVjawpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zYXRvL21hdGNoYm94LXNhdG8vbWF0Y2hib3gtc2Vzc2lvbi1zYXRvL2luZGV4LnRoZW1lIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zYXRvL21hdGNoYm94LXNhdG8vbWF0Y2hib3gtc2Vzc2lvbi1zYXRvL2luZGV4LnRoZW1lCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM5MjYwY2YKLS0tIC9kZXYvbnVsbAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXNhdG8vbWF0Y2hib3gtc2F0by9tYXRjaGJveC1zZXNzaW9uLXNhdG8vaW5kZXgudGhlbWUKQEAgLTAsMCArMSw3IEBACitbWC1HTk9NRS1NZXRhdGhlbWVdCitFbmNvZGluZz1VVEYtOAorVHlwZT1YLUdOT01FLU1ldGF0aGVtZQorTmFtZT1TYXRvCitHdGtUaGVtZT1BZHdhaXRhCitJY29uVGhlbWU9U2F0bworTWF0Y2hib3hUaGVtZT1TYXRvCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXNhdG8vbWF0Y2hib3gtc2F0by9tYXRjaGJveC1zZXNzaW9uLXNhdG8vc2Vzc2lvbiBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc2F0by9tYXRjaGJveC1zYXRvL21hdGNoYm94LXNlc3Npb24tc2F0by9zZXNzaW9uCmluZGV4IDQyY2U0ODMuLmY2MzEzYmQgMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc2F0by9tYXRjaGJveC1zYXRvL21hdGNoYm94LXNlc3Npb24tc2F0by9zZXNzaW9uCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc2F0by9tYXRjaGJveC1zYXRvL21hdGNoYm94LXNlc3Npb24tc2F0by9zZXNzaW9uCkBAIC0xNCwxMSArMTQsNiBAQAogICAgIEtFWUJPQVJEX0FQUExFVD0ia2V5Ym9hcmQiCiBmaQogCi0jIFRlbGwgR1RLKzMgd2UgcmVhbGx5IHdhbnQgc2VydmVyIHNpZGUgZGVjb3JhdGlvbnMsIGV2ZW4gd2l0aAotIyBHdGtIZWFkZXJCYXIgdXNpbmcgYXBwbGljYXRpb25zOiBXaXRob3V0IHRoYXQgbWItcGFuZWwgd2lsbCByZW5kZXIKLSMgb24gdG9wIG9mIHRoZSBjbGllbnQgc2lkZSBkZWNvcmF0aW9ucy4KLWV4cG9ydCBHVEtfQ1NEPTAKLQogbWF0Y2hib3gtZGVza3RvcCAmCiAKICMgTGluZXMgY29udGFpbmluZyBmZWF0dXJlLVtmb29dIGFyZSByZW1vdmVkIGF0IGJ1aWxkIHRpbWUgaWYgdGhlIG1hY2hpbmUKQEAgLTI4LDYgKzIzLDYgQEAKIEVORF9BUFBMRVRTPWNsb2NrLGJhdHRlcnksJEtFWUJPQVJEX0FQUExFVCxzeXN0cmF5LHN0YXJ0dXAtbm90aWZ5LG5vdGlmeQogRU5EX0FQUExFVFM9b3Blbm1va28tcGFuZWwtZ3NtLCRFTkRfQVBQTEVUUyAjIGZlYXR1cmUtcGhvbmUKIAotbWF0Y2hib3gtcGFuZWwgLS10aXRsZWJhciAtLXN0YXJ0LWFwcGxldHMgJFNUQVJUX0FQUExFVFMgLS1lbmQtYXBwbGV0cyAkRU5EX0FQUExFVFMgJgorbWF0Y2hib3gtcGFuZWwgLS1zdGFydC1hcHBsZXRzICRTVEFSVF9BUFBMRVRTIC0tZW5kLWFwcGxldHMgJEVORF9BUFBMRVRTICYKIAotZXhlYyBtYXRjaGJveC13aW5kb3ctbWFuYWdlciAtdGhlbWUgU2F0byAtdXNlX2Rlc2t0b3BfbW9kZSBkZWNvcmF0ZWQgLXVzZV9jdXJzb3IgJFNIT1dDVVJTT1IgJEAKK2V4ZWMgbWF0Y2hib3gtd2luZG93LW1hbmFnZXIgLXRoZW1lIFNhdG8gLXVzZV9jdXJzb3IgJFNIT1dDVVJTT1IgJEAKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc2F0by9tYXRjaGJveC1zYXRvL21hdGNoYm94LXNlc3Npb24tc2F0b18wLjEuYmIgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXNhdG8vbWF0Y2hib3gtc2F0by9tYXRjaGJveC1zZXNzaW9uLXNhdG9fMC4xLmJiCmluZGV4IDc2ZGUxOGEuLjQyYzc0MmYgMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc2F0by9tYXRjaGJveC1zYXRvL21hdGNoYm94LXNlc3Npb24tc2F0b18wLjEuYmIKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zYXRvL21hdGNoYm94LXNhdG8vbWF0Y2hib3gtc2Vzc2lvbi1zYXRvXzAuMS5iYgpAQCAtNyw3ICs3LDcgQEAKIAogU0VDVElPTiA9ICJ4MTEiCiBERVBFTkRTID0gImdjb25mLW5hdGl2ZSIKLVJERVBFTkRTXyR7UE59ID0gImZvcm1mYWN0b3IgZ3RrLXNhdG8tZW5naW5lIG1hdGNoYm94LXRoZW1lLXNhdG8gZ3RrLXRoZW1lLXNhdG8gbWF0Y2hib3gtcGFuZWwtMiBtYXRjaGJveC1kZXNrdG9wLXNhdG8gbWF0Y2hib3gtc2Vzc2lvbiBnY29uZiIKK1JERVBFTkRTXyR7UE59ID0gImZvcm1mYWN0b3IgbWF0Y2hib3gtdGhlbWUtc2F0byBtYXRjaGJveC1wYW5lbC0yIG1hdGNoYm94LWRlc2t0b3AgbWF0Y2hib3gtc2Vzc2lvbiBnY29uZiIKIFBSID0gInIzMCIKIAogIyBUaGlzIHBhY2thZ2UgaXMgYXJjaGl0ZWN0dXJlIHNwZWNpZmljIGJlY2F1c2UgdGhlIHNlc3Npb24gc2NyaXB0IGlzIG1vZGlmaWVkCkBAIC0xOSw5ICsxOSwxMiBAQAogIyBUaGUgbWF0Y2hib3gtdGhlbWUtc2F0byByZXF1aXJlcyB4MTEgaW4gRElTVFJPX0ZFQVRVUkVTCiBSRVFVSVJFRF9ESVNUUk9fRkVBVFVSRVMgPSAieDExIgogCi1TUkNfVVJJID0gImZpbGU6Ly9zZXNzaW9uIgorU1JDX1VSSSA9ICJmaWxlOi8vc2Vzc2lvbiBcCisgICAgICAgICAgIGZpbGU6Ly9pbmRleC50aGVtZSIKIFMgPSAiJHtXT1JLRElSfSIKIAorRklMRVNfJHtQTn0gKz0gIiR7ZGF0YWRpcn0vdGhlbWVzL1NhdG8vaW5kZXgudGhlbWUiCisKIGRvX2luc3RhbGwoKSB7CiAJIyBUaGlzIGlzIHRoZSBzZXQgb2YgbWFjaGluZSBmZWF0dXJlcyB0aGF0IHRoZSBzY3JpcHQgaGFzIG1hcmtlcnMgZm9yCiAJRkVBVFVSRVM9InBob25lIgpAQCAtMzQsNiArMzcsNyBAQAogCQlmaQogCWRvbmUKIAorCWluc3RhbGwgLUQgJHtTfS9pbmRleC50aGVtZSAke0R9LyR7ZGF0YWRpcn0vdGhlbWVzL1NhdG8vaW5kZXgudGhlbWUKIAlpbnN0YWxsIC1kICR7RH0vJHtzeXNjb25mZGlyfS9tYXRjaGJveAogCXNlZCAtZiAiJFNDUklQVCIgJHtTfS9zZXNzaW9uID4gJHtEfS8ke3N5c2NvbmZkaXJ9L21hdGNoYm94L3Nlc3Npb24KICAgICAgICAgY2htb2QgK3ggJHtEfS8ke3N5c2NvbmZkaXJ9L21hdGNoYm94L3Nlc3Npb24KQEAgLTQ0LDcgKzQ4LDggQEAKIAkJI3R5cGUsIG5hbWUsIHZhbHVlCiAJCWdjb25mdG9vbC0yIC0tY29uZmlnLXNvdXJjZT14bWw6OiREJHtzeXNjb25mZGlyfS9nY29uZi9nY29uZi54bWwuZGVmYXVsdHMgLS1kaXJlY3QgLS10eXBlICQxIC0tc2V0IC9kZXNrdG9wL3Bva3kvaW50ZXJmYWNlLyQyICIkMyIKIAl9Ci0Jc2V0X3ZhbHVlIHN0cmluZyB0aGVtZSBTYXRvCisJc2V0X3ZhbHVlIHN0cmluZyB0aGVtZSBBZHdhaXRhCisJc2V0X3ZhbHVlIHN0cmluZyBtYXRjaGJveF90aGVtZSBTYXRvCiAJc2V0X3ZhbHVlIHN0cmluZyBpY29uX3RoZW1lIFNhdG8KIAlzZXRfdmFsdWUgYm9vbCB0b3VjaHNjcmVlbiB0cnVlCiAJc2V0X3ZhbHVlIHN0cmluZyBmb250X25hbWUgIlNhbnMgOSIKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc2F0by9tYXRjaGJveC10ZXJtaW5hbC9tYXRjaGJveC10ZXJtaW5hbF8wLjEuYmIgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXNhdG8vbWF0Y2hib3gtdGVybWluYWwvbWF0Y2hib3gtdGVybWluYWxfMC4xLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ0ODgxOTEKLS0tIC9kZXYvbnVsbAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXNhdG8vbWF0Y2hib3gtdGVybWluYWwvbWF0Y2hib3gtdGVybWluYWxfMC4xLmJiCkBAIC0wLDAgKzEsMjEgQEAKK1NVTU1BUlkgPSAiTGlnaHR3ZWlnaHQgR1RLKyB0ZXJtaW5hbCBhcHBsaWNhdGlvbiIKK0hPTUVQQUdFID0gImh0dHA6Ly93d3cubWF0Y2hib3gtcHJvamVjdC5vcmcvIgorQlVHVFJBQ0tFUiA9ICJodHRwOi8vYnVnemlsbGEueW9jdG9wcm9qZWN0Lm9yZy8iCisKK0xJQ0VOU0UgPSAiR1BMdjIrIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9OTRkNTVkNTEyYTliYTM2Y2FhOWI3ZGYwNzliYWUxOWYgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vbWFpbi5jO2VuZGxpbmU9MjA7bWQ1PTk2ZTM5MTc2ZDllMzU1NjM5YTBiOGIxYzdhODQwODIwIgorCitERVBFTkRTID0gImd0ayszIHZ0ZSIKK1NFQ1RJT04gPSAieDExL3V0aWxzIgorCisjU1JDUkVWIHRhZ2dlZCAwLjEKK1NSQ1JFViA9ICIzYWQzNTdkYjIzMDI3NjBiOGE4ODE3YjVmNDQ3OGRkODc0Nzk0NDJmIgorU1JDX1VSSSA9ICJnaXQ6Ly9naXQueW9jdG9wcm9qZWN0Lm9yZy8ke0JQTn0iCitVUFNUUkVBTV9DSEVDS19HSVRUQUdSRUdFWCA9ICIoP1A8cHZlcj4oXGQrKFwuXGQrKSspKSIKKworUyA9ICIke1dPUktESVJ9L2dpdCIKKworaW5oZXJpdCBhdXRvdG9vbHMgcGtnY29uZmlnIGRpc3Ryb19mZWF0dXJlc19jaGVjaworCitBTllfT0ZfRElTVFJPX0ZFQVRVUkVTID0gIiR7R1RLM0RJU1RST0ZFQVRVUkVTfSIKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc2F0by9tYXRjaGJveC10ZXJtaW5hbC9tYXRjaGJveC10ZXJtaW5hbF9naXQuYmIgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXNhdG8vbWF0Y2hib3gtdGVybWluYWwvbWF0Y2hib3gtdGVybWluYWxfZ2l0LmJiCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjOGNiZDU3Li4wMDAwMDAwCi0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc2F0by9tYXRjaGJveC10ZXJtaW5hbC9tYXRjaGJveC10ZXJtaW5hbF9naXQuYmIKKysrIC9kZXYvbnVsbApAQCAtMSwyMCArMCwwIEBACi1TVU1NQVJZID0gIkxpZ2h0d2VpZ2h0IEdUSysgdGVybWluYWwgYXBwbGljYXRpb24iCi1IT01FUEFHRSA9ICJodHRwOi8vd3d3Lm1hdGNoYm94LXByb2plY3Qub3JnLyIKLUJVR1RSQUNLRVIgPSAiaHR0cDovL2J1Z3ppbGxhLnlvY3RvcHJvamVjdC5vcmcvIgotCi1MSUNFTlNFID0gIkdQTHYyKyIKLUxJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PTk0ZDU1ZDUxMmE5YmEzNmNhYTliN2RmMDc5YmFlMTlmIFwKLSAgICAgICAgICAgICAgICAgICAgZmlsZTovL21haW4uYztlbmRsaW5lPTIwO21kNT05NmUzOTE3NmQ5ZTM1NTYzOWEwYjhiMWM3YTg0MDgyMCIKLQotREVQRU5EUyA9ICJndGsrIHZ0ZSIKLVNFQ1RJT04gPSAieDExL3V0aWxzIgotU1JDUkVWID0gIjQ1MmJjYTI1MzQ5MmE5N2E1ODdmNDQwMjg5YjlhYjI3ZDIxNzM1M2UiCi1QViA9ICIwLjArZ2l0JHtTUkNQVn0iCi0KLVNSQ19VUkkgPSAiZ2l0Oi8vZ2l0LnlvY3RvcHJvamVjdC5vcmcvJHtCUE59IgotCi1TID0gIiR7V09SS0RJUn0vZ2l0IgotCi1pbmhlcml0IGF1dG90b29scyBwa2djb25maWcgZGlzdHJvX2ZlYXR1cmVzX2NoZWNrCi0KLUFOWV9PRl9ESVNUUk9fRkVBVFVSRVMgPSAiJHtHVEsyRElTVFJPRkVBVFVSRVN9IgpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zYXRvL21hdGNoYm94LXRoZW1lLXNhdG8vbWF0Y2hib3gtdGhlbWUtc2F0b18wLjEuYmIgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXNhdG8vbWF0Y2hib3gtdGhlbWUtc2F0by9tYXRjaGJveC10aGVtZS1zYXRvXzAuMS5iYgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjY3ODZkZC4uMDAwMDAwMAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXNhdG8vbWF0Y2hib3gtdGhlbWUtc2F0by9tYXRjaGJveC10aGVtZS1zYXRvXzAuMS5iYgorKysgL2Rldi9udWxsCkBAIC0xLDggKzAsMCBAQAotcmVxdWlyZSBtYXRjaGJveC10aGVtZS1zYXRvLmluYwotCi1QUiA9ICJyMSIKLQotU1JDX1VSSSA9ICJodHRwOi8vcG9reWxpbnV4Lm9yZy9yZWxlYXNlcy9zYXRvL21hdGNoYm94LXRoZW1lLXNhdG8tMC4xLnRhci5neiIKLQotU1JDX1VSSVttZDVzdW1dID0gIjcyYWUyNzJlZjc4MDMxNDFhM2RjYjY5ZTY3MGNmZjk3IgotU1JDX1VSSVtzaGEyNTZzdW1dID0gIjViNTlmOTY0NmVkYmZiOTA3YTMwOTMzMmRiM2JkNmZhNzA4MGRjMWZlMjRkZjU0OTQ4MGNmYWU3ZDk3NGEzZmIiCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXNhdG8vbWF0Y2hib3gtdGhlbWUtc2F0by9tYXRjaGJveC10aGVtZS1zYXRvXzAuMi5iYiBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc2F0by9tYXRjaGJveC10aGVtZS1zYXRvL21hdGNoYm94LXRoZW1lLXNhdG9fMC4yLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdhMDQzZDMKLS0tIC9kZXYvbnVsbAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXNhdG8vbWF0Y2hib3gtdGhlbWUtc2F0by9tYXRjaGJveC10aGVtZS1zYXRvXzAuMi5iYgpAQCAtMCwwICsxLDggQEAKK3JlcXVpcmUgbWF0Y2hib3gtdGhlbWUtc2F0by5pbmMKKworIyBTUkNSRVYgdGFnZ2VkIDAuMgorU1JDUkVWID0gImRmMDg1YmE5Y2RhZWFmMjk1Njg5MGIwZTI5ZDdlYTE3NzliZjZjNzgiCitTUkNfVVJJID0gImdpdDovL2dpdC55b2N0b3Byb2plY3Qub3JnL21hdGNoYm94LXNhdG8iCitVUFNUUkVBTV9DSEVDS19HSVRUQUdSRUdFWCA9ICIoP1A8cHZlcj4oXGQrKFwuXGQrKSspKSIKKworUyA9ICIke1dPUktESVJ9L2dpdCIKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc2F0by9tYXRjaGJveC10aGVtZS1zYXRvL21hdGNoYm94LXRoZW1lLXNhdG9fZ2l0LmJiIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zYXRvL21hdGNoYm94LXRoZW1lLXNhdG8vbWF0Y2hib3gtdGhlbWUtc2F0b19naXQuYmIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDBkMzU2OWQuLjAwMDAwMDAKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zYXRvL21hdGNoYm94LXRoZW1lLXNhdG8vbWF0Y2hib3gtdGhlbWUtc2F0b19naXQuYmIKKysrIC9kZXYvbnVsbApAQCAtMSwxMiArMCwwIEBACi1yZXF1aXJlIG1hdGNoYm94LXRoZW1lLXNhdG8uaW5jCi0KLVNSQ1JFViA9ICJmNzJjZjRlZDdkNzFhZDllNDdiMGYyZDNkYmM1OTNiYzJmM2U3NmY4IgotUFYgPSAiMC4yK2dpdCR7U1JDUFZ9IgotCi1ERUZBVUxUX1BSRUZFUkVOQ0UgPSAiLTEiCi0KLVNSQ19VUkkgPSAiZ2l0Oi8vZ2l0LnlvY3RvcHJvamVjdC5vcmcvbWF0Y2hib3gtc2F0byIKLQotRVhUUkFfT0VDT05GICs9ICIke0BiYi51dGlscy5jb250YWlucygnTUFDSElORV9GRUFUVVJFUycsICdxdmdhJywgJy0td2l0aC1tb2RlPXF2Z2EnLCAnJyxkKX0iCi0KLVMgPSAiJHtXT1JLRElSfS9naXQiCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXNhdG8vcGFja2FnZWdyb3Vwcy9wYWNrYWdlZ3JvdXAtY29yZS14MTEtc2F0by5iYiBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc2F0by9wYWNrYWdlZ3JvdXBzL3BhY2thZ2Vncm91cC1jb3JlLXgxMS1zYXRvLmJiCmluZGV4IDhiYTQ5MjMuLjZmYjFiNjcgMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc2F0by9wYWNrYWdlZ3JvdXBzL3BhY2thZ2Vncm91cC1jb3JlLXgxMS1zYXRvLmJiCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc2F0by9wYWNrYWdlZ3JvdXBzL3BhY2thZ2Vncm91cC1jb3JlLXgxMS1zYXRvLmJiCkBAIC0zLDcgKzMsNiBAQAogIwogCiBTVU1NQVJZID0gIlNhdG8gZGVza3RvcCIKLUxJQ0VOU0UgPSAiTUlUIgogUFIgPSAicjMzIgogCiBQQUNLQUdFX0FSQ0ggPSAiJHtNQUNISU5FX0FSQ0h9IgpAQCAtMzEsOSArMzAsOCBAQAogICAgIG1hdGNoYm94LWtleWJvYXJkLWltIFwKICAgICBtYXRjaGJveC1jb25maWctZ3RrIFwKICAgICB4Y3Vyc29yLXRyYW5zcGFyZW50LXRoZW1lIFwKLSAgICBzYXRvLWljb24tdGhlbWUgXAorICAgIGFkd2FpdGEtaWNvbi10aGVtZSBcCiAgICAgc2V0dGluZ3MtZGFlbW9uIFwKLSAgICBndGstc2F0by1lbmdpbmUgXAogICAgIHNodXRkb3duLWRlc2t0b3AgXAogICAgIGxpYnNkbCBcCiAgICAgJHtORVRXT1JLX01BTkFHRVJ9IFwKQEAgLTQ4LDggKzQ2LDggQEAKIAogU1VNTUFSWV8ke1BOfS1hcHBzID0gIlNhdG8gZGVza3RvcCAtIGFwcGxpY2F0aW9ucyIKIFJERVBFTkRTXyR7UE59LWFwcHMgPSAiXAotICAgIGxlYWZwYWQgXAotICAgIGdzdC1wbGF5ZXItYmluIFwKKyAgICBsM2FmcGFkIFwKKyAgICBnc3QtcGxheWVyIFwKICAgICBtYXRjaGJveC10ZXJtaW5hbCBcCiAgICAgc2F0by1zY3JlZW5zaG90IFwKICAgICAke0ZJTEVNQU5BR0VSfSBcCkBAIC01OCw1ICs1Niw1IEBACiAKIFNVTU1BUllfJHtQTn0tZ2FtZXMgPSAiU2F0byBkZXNrdG9wIC0gZ2FtZXMiCiBSREVQRU5EU18ke1BOfS1nYW1lcyA9ICJcCi0gICAgb2gtcHV6emxlcyBcCisgICAgcHV6emxlcyBcCiAgICAgIgpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zYXRvL3BjbWFuZm0vcGNtYW5mbV8xLjIuNC5iYiBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc2F0by9wY21hbmZtL3BjbWFuZm1fMS4yLjQuYmIKaW5kZXggYTZiMGFhYy4uYTZiZjIxMyAxMDA2NDQKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zYXRvL3BjbWFuZm0vcGNtYW5mbV8xLjIuNC5iYgorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXNhdG8vcGNtYW5mbS9wY21hbmZtXzEuMi40LmJiCkBAIC03LDggKzcsNyBAQAogICAgICAgICAgICAgICAgICAgICBmaWxlOi8vc3JjL2dzZWFsLWd0ay1jb21wYXQuaDtlbmRsaW5lPTIxO21kNT00NjkyMmM4NjkxZjU4ZDEyNGY5NDIwZmUxNjE0OWNlMiIKIAogU0VDVElPTiA9ICJ4MTEiCi1ERVBFTkRTID0gImd0aysgc3RhcnR1cC1ub3RpZmljYXRpb24gbGliZm0gaW50bHRvb2wtbmF0aXZlIGdldHRleHQtbmF0aXZlIgotREVQRU5EU19hcHBlbmRfcG9reSA9ICIgbGlib3dsIgorREVQRU5EUyA9ICJndGsrMyBzdGFydHVwLW5vdGlmaWNhdGlvbiBsaWJmbSBpbnRsdG9vbC1uYXRpdmUgZ2V0dGV4dC1uYXRpdmUiCiAKIAogQ09NUEFUSUJMRV9IT1NUID0gJyh4ODZfNjQuKnxpLjg2Lip8YWFyY2g2NC4qfGFybS4qfG1pcHMuKnxwb3dlcnBjLip8c2guKiktKGxpbnV4fGZyZWVic2QuKiknCkBAIC0zMCw2ICsyOSw4IEBACiAjIFRoZSBzdGFydHVwLW5vdGlmaWNhdGlvbiByZXF1aXJlcyB4MTEgaW4gRElTVFJPX0ZFQVRVUkVTCiBSRVFVSVJFRF9ESVNUUk9fRkVBVFVSRVMgPSAieDExIgogCitFWFRSQV9PRUNPTkYgPSAiLS13aXRoLWd0az0zIgorCiBkb19pbnN0YWxsX2FwcGVuZCAoKSB7CiAJaW5zdGFsbCAtZCAke0R9LyR7ZGF0YWRpcn0KIAlpbnN0YWxsIC1kICR7RH0vJHtkYXRhZGlyfS9waXhtYXBzLwpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zYXRvL3B1enpsZXMvZmlsZXMvb2gtcHV6emxlcy1vd2wtbWVudS5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc2F0by9wdXp6bGVzL2ZpbGVzL29oLXB1enpsZXMtb3dsLW1lbnUucGF0Y2gKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDdlMmMzYWIuLjAwMDAwMDAKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zYXRvL3B1enpsZXMvZmlsZXMvb2gtcHV6emxlcy1vd2wtbWVudS5wYXRjaAorKysgL2Rldi9udWxsCkBAIC0xLDIwMyArMCwwIEBACi1UaGlzIHBhdGNoIGVuYWJsZSBvd2wgbWVudSwgd2hpY2ggaXMgaGlkZGVuIGluIHRoZSB0aXRsZSBiYXIgdG8gc2F2ZSBzcGFjZSBvbgotc21hbGwgc2NyZWVuLiBJdCBoYXMgbm90IGJlZW4gdXNlZCBmb3IgYSBsb25nIHRpbWUsIHJlYmFzZSBuZWVkZWQuCi0KLVVwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbZW5hYmxlIGZlYXR1cmVdCi0KLUluZGV4OiBzcmMvZ3RrLmMKLT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tLSBzcmMvZ3RrLmMJKHJldmlzaW9uIDIyKQotKysrIHNyYy9ndGsuYwkod29ya2luZyBjb3B5KQotQEAgLTI4LDYgKzI4LDggQEAKLSAjaW5jbHVkZSA8Z2RrL2dka3guaD4KLSAjaW5jbHVkZSA8Z2RrLXBpeGJ1Zi9nZGstcGl4YnVmLmg+Ci0gCi0rI2luY2x1ZGUgPGxpYm93bC9vd2x3aW5kb3dtZW51Lmg+Ci0rCi0gI2luY2x1ZGUgPGxpYnJzdmcvcnN2Zy5oPgotIAotICNpbmNsdWRlIDxYMTEvWGxpYi5oPgotQEAgLTEyMzcsNiArMTIzOSw3IEBACi0gICAgIH0KLSB9Ci0gCi0rI2lmIDAKLSBzdGF0aWMgdm9pZAotIGFkZF93aWRnZXQgKEd0a1VJTWFuYWdlciAqbWVyZ2UsCi0gCSAgICBHdGtXaWRnZXQgKndpZGdldCwKLUBAIC0xMjQ3LDEwICsxMjUwLDExIEBACi0gICAgIGd0a19ib3hfcGFja19zdGFydCAoYm94LCB3aWRnZXQsIEZBTFNFLCBGQUxTRSwgMCk7Ci0gCi0gICAgIHRvcGxldmVsID0gZ3RrX3dpZGdldF9nZXRfdG9wbGV2ZWwgKEdUS19XSURHRVQgKGJveCkpOwotLSAgICBndGtfd2lkZ2V0X3Nob3dfYWxsICh0b3BsZXZlbCk7Ci0gfQotKyNlbmRpZgotIAotIHN0YXRpYyBHdGtBY3Rpb25FbnRyeSB0b3BsZXZlbF9hY3Rpb25zW10gPSB7Ci0rICAgIHsgIlRvcCIsIE5VTEwsICIiIH0sCi0gICAgIHsgIkdhbWUiLCBOVUxMLCBOXygiR2FtZSIpIH0sCi0gICAgIHsgIlNldHRpbmdzIiwgTlVMTCwgTl8oIlNldHRpbmdzIikgfSwKLSAgICAgeyAiSGVscCIsIE5VTEwsIE5fKCJIZWxwIikgfSwKLUBAIC0xMzAzLDExICsxMzA3LDEzIEBACi0gCQkJZnJvbnRlbmQgKmZlKQotIHsKLSAgICAgR1N0cmluZyAqeG1sOwotKyAgICBHRXJyb3IgKmVycm9yID0gTlVMTDsKLSAgICAgZ2Jvb2xlYW4gcHJlc2V0cyA9IEZBTFNFOwotICAgICBHU0xpc3QgKnJhZGlvX2dyb3VwID0gTlVMTDsKLSAgICAgaW50IGk7Ci0gCi0tICAgIHhtbCA9IGdfc3RyaW5nX25ldyAoIjx1aT48bWVudWJhcj48cGxhY2Vob2xkZXIgbmFtZT1cIlR5cGVQbGFjZWhvbGRlclwiPiIKLSsgICAgeG1sID0gZ19zdHJpbmdfbmV3ICgiPHVpPjxtZW51YmFyPjxtZW51IG5hbWU9XCJUb3BNZW51XCIgYWN0aW9uPVwiVG9wXCI+IgotKwkJCSI8cGxhY2Vob2xkZXIgbmFtZT1cIlR5cGVQbGFjZWhvbGRlclwiPiIKLSAJCQkiPG1lbnUgbmFtZT1cIlNldHRpbmdzTWVudVwiIGFjdGlvbj1cIlNldHRpbmdzXCI+Iik7Ci0gCi0gICAgIGZvciAoaSA9IDA7IGkgPCBtaWRlbmRfbnVtX3ByZXNldHMoZmUtPm1lKTsgaSsrKSB7Ci1AQCAtMTM1OSw4ICsxMzY1LDE0IEBACi0gCQkJICI8bWVudWl0ZW0gbmFtZT1cIkN1c3RvbU1lbnVcIiBhY3Rpb249XCJDdXN0b21cIi8+Iik7Ci0gICAgIH0KLSAgICAgCi0tICAgIGdfc3RyaW5nX2FwcGVuZCAoeG1sLCAiPC9tZW51PjwvcGxhY2Vob2xkZXI+PC9tZW51YmFyPjwvdWk+Iik7Ci0tICAgIGd0a191aV9tYW5hZ2VyX2FkZF91aV9mcm9tX3N0cmluZyAobWVyZ2UsIHhtbC0+c3RyLCAtMSwgTlVMTCk7Ci0rICAgIGdfc3RyaW5nX2FwcGVuZCAoeG1sLCAiPC9tZW51PjwvcGxhY2Vob2xkZXI+PC9tZW51PjwvbWVudWJhcj48L3VpPiIpOwotKwotKyAgICBndGtfdWlfbWFuYWdlcl9hZGRfdWlfZnJvbV9zdHJpbmcgKG1lcmdlLCB4bWwtPnN0ciwgLTEsICZlcnJvcik7Ci0rICAgIGlmIChlcnJvciAhPSBOVUxMKSB7Ci0rCWdfd2FybmluZyAoIkVycm9yIGFkZGluZyBjdXN0b206ICVzIiwgZXJyb3ItPm1lc3NhZ2UpOwotKwlnX2Vycm9yX2ZyZWUgKGVycm9yKTsKLSsgICAgfQotKwotICAgICBnX3N0cmluZ19mcmVlICh4bWwsIFRSVUUpOwotIH0KLSAKLUBAIC0xNDM0LDYgKzE0NDYsNyBAQAotIG5ld193aW5kb3coY2hhciAqYXJnLCBjaGFyICoqZXJyb3IpCi0gewotICAgICBmcm9udGVuZCAqZmU7Ci0rICAgIEdFcnJvciAqZXJyID0gTlVMTDsKLSAgICAgR3RrQm94ICp2Ym94OwotICAgICBHdGtVSU1hbmFnZXIgKm1lcmdlOwotICAgICBHdGtBY3Rpb25Hcm91cCAqYWN0aW9uczsKLUBAIC0xNDk2LDggKzE1MDksNiBAQAotICAgICBndGtfd2luZG93X2FkZF9hY2NlbF9ncm91cChHVEtfV0lORE9XKGZlLT53aW5kb3cpLCBmZS0+YWNjZWxncm91cCk7Ci0gCi0gICAgIG1lcmdlID0gZ3RrX3VpX21hbmFnZXJfbmV3ICgpOwotLSAgICBnX3NpZ25hbF9jb25uZWN0IChHX09CSkVDVCAobWVyZ2UpLCAiYWRkX3dpZGdldCIsCi0tCQkgICAgICBHX0NBTExCQUNLIChhZGRfd2lkZ2V0KSwgdmJveCk7Ci0gCi0gICAgIGFjdGlvbnMgPSBndGtfYWN0aW9uX2dyb3VwX25ldyAoIlB1enpsZUFjdGlvbnMiKTsKLSAgICAgZ3RrX2FjdGlvbl9ncm91cF9hZGRfYWN0aW9ucyAoYWN0aW9ucywgdG9wbGV2ZWxfYWN0aW9ucywKLUBAIC0xNTA5LDIyICsxNTIwLDM5IEBACi0gCi0gICAgIGd0a191aV9tYW5hZ2VyX2luc2VydF9hY3Rpb25fZ3JvdXAgKG1lcmdlLCBhY3Rpb25zLCAwKTsKLSAgICAgCi0tICAgIGd0a191aV9tYW5hZ2VyX2FkZF91aV9mcm9tX2ZpbGUgKG1lcmdlLCBEQVRBRElSICIvb2gtcHV6emxlcy91aS9tZW51LnhtbCIsIE5VTEwpOwotKyAgICBndGtfdWlfbWFuYWdlcl9hZGRfdWlfZnJvbV9maWxlIChtZXJnZSwgREFUQURJUiAiL29oLXB1enpsZXMvdWkvbWVudS54bWwiLCAKLSsJCQkJICAgICAmZXJyKTsKLSsgICAgaWYgKGVyciAhPSBOVUxMKSB7Ci0rCWdfd2FybmluZyAoIkVycm9yIG1ha2luZyBVSTogJXMiLCBlcnItPm1lc3NhZ2UpOwotKwlnX2Vycm9yX2ZyZWUgKGVycik7Ci0rCWVyciA9IE5VTEw7Ci0rICAgIH0KLSAKLSAgICAgaWYgKHRoZWdhbWUuY2FuX3NvbHZlKSB7Ci0tCSAgICBjaGFyICpzdHIgPSAiPHVpPjxtZW51YmFyPjxtZW51IG5hbWU9XCJHYW1lTWVudVwiIGFjdGlvbj1cIkdhbWVcIj4iCi0rCWNoYXIgKnN0ciA9ICI8dWk+PG1lbnViYXI+PG1lbnUgbmFtZT1cIlRvcE1lbnVcIiBhY3Rpb249XCJUb3BcIj4iCi0rCSAgICAiPG1lbnUgbmFtZT1cIkdhbWVNZW51XCIgYWN0aW9uPVwiR2FtZVwiPiIKLSAJICAgICI8cGxhY2Vob2xkZXIgbmFtZT1cIlNvbHZlUGxhY2Vob2xkZXJcIj4iCi0gCSAgICAiPHNlcGFyYXRvciBuYW1lPVwiU29sdmVTZXBcIi8+IgotIAkgICAgIjxtZW51aXRlbSBuYW1lPVwiU29sdmVNZW51XCIgYWN0aW9uPVwiU29sdmVcIi8+IgotLQkgICAgIjwvcGxhY2Vob2xkZXI+PC9tZW51PjwvbWVudWJhcj48L3VpPiI7Ci0rCSAgICAiPC9wbGFjZWhvbGRlcj48L21lbnU+PC9tZW51PjwvbWVudWJhcj48L3VpPiI7Ci0gCi0tCWd0a191aV9tYW5hZ2VyX2FkZF91aV9mcm9tX3N0cmluZyAobWVyZ2UsIHN0ciwgLTEsIE5VTEwpOwotKwlndGtfdWlfbWFuYWdlcl9hZGRfdWlfZnJvbV9zdHJpbmcgKG1lcmdlLCBzdHIsIC0xLCAmZXJyKTsKLSsJaWYgKGVyciAhPSBOVUxMKSB7Ci0rCSAgICBnX3dhcm5pbmcgKCJFcnJvciBhZGRpbmcgc29sdmUuICVzIiwgZXJyLT5tZXNzYWdlKTsKLSsJICAgIGdfZXJyb3JfZnJlZSAoZXJyKTsKLSsJfQotICAgICB9Ci0gCi0gICAgIGlmICgobiA9IG1pZGVuZF9udW1fcHJlc2V0cyhmZS0+bWUpKSA+IDAgfHwgdGhlZ2FtZS5jYW5fY29uZmlndXJlKSB7Ci0gCWdlbmVyYXRlX3NldHRpbmdzX21lbnUgKG1lcmdlLCBhY3Rpb25zLCBmZSk7Ci0gICAgIH0KLSAKLSsgICAgLyogRG8gdGhpcyBzbyB0aGF0IHRoZSBtZW51IGlzIHBhY2tlZCBub3cgaW5zdGVhZCBvZiBpbiB0aGUgaWRsZSBsb29wICovCi0rICAgIGd0a191aV9tYW5hZ2VyX2Vuc3VyZV91cGRhdGUgKG1lcmdlKTsKLSsKLSsgICAgb3dsX3NldF93aW5kb3dfbWVudV9pdGVtIChHVEtfV0lORE9XIChmZS0+d2luZG93KSwKLSsJCQkgICAgICBHVEtfTUVOVV9JVEVNIChndGtfdWlfbWFuYWdlcl9nZXRfd2lkZ2V0IChtZXJnZSwgIi9tZW51YmFyL1RvcE1lbnUiKSkpOwotKyAgICAKLSAgICAgc2V0dXBfY29sb3VycyAoZmUpOwotICAgICBzZXR1cF9waXhidWZzIChmZSk7Ci0gCi1AQCAtMTU3Miw3ICsxNjAwLDcgQEAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIEdES19CVVRUT05fUkVMRUFTRV9NQVNLIHwKLSAJCQkgIEdES19CVVRUT05fTU9USU9OX01BU0spOwotIAotLSAgICAvKiBUaGUgd2luZG93IGlzIHNob3duIG9uY2UgdGhlIG1lbnViYXIgaGFzIGJlZW4gYWRkZWQgKi8KLSsgICAgZ3RrX3dpZGdldF9zaG93X2FsbCAoZmUtPndpbmRvdyk7Ci0gICAgIHJldHVybiBmZTsKLSB9Ci0gCi1JbmRleDogc3JjL21lbnUueG1sCi09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLS0gc3JjL21lbnUueG1sCShyZXZpc2lvbiAyMikKLSsrKyBzcmMvbWVudS54bWwJKHdvcmtpbmcgY29weSkKLUBAIC0xLDI2ICsxLDI1IEBACi0gPHVpPgotIDxtZW51YmFyPgotLTxtZW51IG5hbWU9IkdhbWVNZW51IiBhY3Rpb249IkdhbWUiPgotLQk8bWVudWl0ZW0gbmFtZT0iTmV3TWVudSIgYWN0aW9uPSJOZXciLz4KLS0JPG1lbnVpdGVtIG5hbWU9IlJlc3RhcnRNZW51IiBhY3Rpb249IlJlc3RhcnQiLz4KLS08IS0tCTxtZW51aXRlbSBuYW1lPSJTcGVjaWZpY01lbnUiIGFjdGlvbj0iU3BlY2lmaWMiLz4gLS0+Ci0tCTxtZW51aXRlbSBuYW1lPSJSYW5kb21NZW51IiBhY3Rpb249IlJhbmRvbSIvPgotLQk8c2VwYXJhdG9yIG5hbWU9IkdhbWVTZXAxIi8+Ci0tCTxtZW51aXRlbSBuYW1lPSJMb2FkTWVudSIgYWN0aW9uPSJMb2FkIi8+Ci0tCTxtZW51aXRlbSBuYW1lPSJTYXZlTWVudSIgYWN0aW9uPSJTYXZlIi8+Ci0tCTxzZXBhcmF0b3IgbmFtZT0iR2FtZVNlcDIiLz4KLS0JPG1lbnVpdGVtIG5hbWU9IlVuZG9NZW51IiBhY3Rpb249IlVuZG8iLz4KLS0JPG1lbnVpdGVtIG5hbWU9IlJlZG9NZW51IiBhY3Rpb249IlJlZG8iLz4KLS0JPHBsYWNlaG9sZGVyIG5hbWU9IkNvcHlQbGFjZWhvbGRlciIvPgotLQk8cGxhY2Vob2xkZXIgbmFtZT0iU29sdmVQbGFjZWhvbGRlciIvPgotLQk8c2VwYXJhdG9yIG5hbWU9IkdhbWVTZXAzIi8+Ci0tCTxtZW51aXRlbSBuYW1lPSJRdWl0TWVudSIgYWN0aW9uPSJRdWl0Ii8+Ci0tPC9tZW51PgotKzxtZW51IG5hbWU9IlRvcE1lbnUiIGFjdGlvbj0iVG9wIj4KLSsJPG1lbnUgbmFtZT0iR2FtZU1lbnUiIGFjdGlvbj0iR2FtZSI+Ci0rCQk8bWVudWl0ZW0gbmFtZT0iTmV3TWVudSIgYWN0aW9uPSJOZXciLz4KLSsJCTxtZW51aXRlbSBuYW1lPSJSZXN0YXJ0TWVudSIgYWN0aW9uPSJSZXN0YXJ0Ii8+Ci0rCTwhLS0JPG1lbnVpdGVtIG5hbWU9IlNwZWNpZmljTWVudSIgYWN0aW9uPSJTcGVjaWZpYyIvPiAtLT4KLSsJCTxtZW51aXRlbSBuYW1lPSJSYW5kb21NZW51IiBhY3Rpb249IlJhbmRvbSIvPgotKwkJPHNlcGFyYXRvciBuYW1lPSJHYW1lU2VwMSIvPgotKwkJPG1lbnVpdGVtIG5hbWU9IkxvYWRNZW51IiBhY3Rpb249IkxvYWQiLz4KLSsJCTxtZW51aXRlbSBuYW1lPSJTYXZlTWVudSIgYWN0aW9uPSJTYXZlIi8+Ci0rCQk8c2VwYXJhdG9yIG5hbWU9IkdhbWVTZXAyIi8+Ci0rCQk8bWVudWl0ZW0gbmFtZT0iVW5kb01lbnUiIGFjdGlvbj0iVW5kbyIvPgotKwkJPG1lbnVpdGVtIG5hbWU9IlJlZG9NZW51IiBhY3Rpb249IlJlZG8iLz4KLSsJCTxwbGFjZWhvbGRlciBuYW1lPSJDb3B5UGxhY2Vob2xkZXIiLz4KLSsJCTxwbGFjZWhvbGRlciBuYW1lPSJTb2x2ZVBsYWNlaG9sZGVyIi8+Ci0rCTwvbWVudT4KLSAKLS08cGxhY2Vob2xkZXIgbmFtZT0iVHlwZVBsYWNlaG9sZGVyIi8+Ci0tCi0tPG1lbnUgbmFtZT0iSGVscE1lbnUiIGFjdGlvbj0iSGVscCI+Ci0rCTxwbGFjZWhvbGRlciBuYW1lPSJUeXBlUGxhY2Vob2xkZXIiLz4KLSAJPG1lbnVpdGVtIG5hbWU9IkFib3V0TWVudSIgYWN0aW9uPSJBYm91dCIvPgotKwk8bWVudWl0ZW0gbmFtZT0iUXVpdE1lbnUiIGFjdGlvbj0iUXVpdCIvPgotKwotIDwvbWVudT4KLSA8L21lbnViYXI+Ci0gPC91aT4KLUluZGV4OiBzcmMvTWFrZWZpbGUuYW0KLT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tLSBzcmMvTWFrZWZpbGUuYW0JKHJldmlzaW9uIDIyKQotKysrIHNyYy9NYWtlZmlsZS5hbQkod29ya2luZyBjb3B5KQotQEAgLTEwLDcgKzEwLDcgQEAKLSAJbGlnaHR1cCBsb29weSBtYXAgbWluZXMgbmV0IG5ldHNsaWRlIHBhdHRlcm4gcGVncyByZWN0IHNhbWVnYW1lIFwKLSAJc2l4dGVlbiBzbGFudCBzb2xvIHRlbnRzIHR3aWRkbGUgdW50YW5nbGUKLSAKLS1saWJwdXp6bGVzX2xhX0xJQkFERCA9ICQoUFVaWkxFU19MSUJTKQotK2xpYnB1enpsZXNfbGFfTElCQUREID0gJChQVVpaTEVTX0xJQlMpIC1sb3dsCi0gbGlicHV6emxlc19sYV9TT1VSQ0VTID0gY29tYmkuYyBcCi0gCQkJY29uZmlndXJhdGlvbi5jIFwKLSAJCQlkcmF3aW5nLmMgXApkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zYXRvL3B1enpsZXMvb2gtcHV6emxlc19naXQuYmIgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXNhdG8vcHV6emxlcy9vaC1wdXp6bGVzX2dpdC5iYgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZGZhNjhhNi4uMDAwMDAwMAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXNhdG8vcHV6emxlcy9vaC1wdXp6bGVzX2dpdC5iYgorKysgL2Rldi9udWxsCkBAIC0xLDczICswLDAgQEAKLVNVTU1BUlkgPSAiUG9ydGFibGUgUHV6emxlIENvbGxlY3Rpb24iCi1IT01FUEFHRSA9ICJodHRwOi8vby1oYW5kLmNvbS8iCi1CVUdUUkFDS0VSID0gImh0dHA6Ly9idWd6aWxsYS55b2N0b3Byb2plY3Qub3JnLyIKLQotTElDRU5TRSA9ICJNSVQiCi1MSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9MSUNFTkNFO21kNT1mNTZlYzY3NzJkZDFjN2MzNjcwNjdiYmVhOGVhMTY3NSBcCi0gICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9zcmMvdHJlZTIzNC5oO2VuZGxpbmU9Mjg7bWQ1PWExODhlNmQyNTA0MzBjYTA5NGE1NGE4MmY0ODQ3MmE3IFwKLSAgICAgICAgICAgICAgICAgICAgZmlsZTovL3NyYy90cmVlMjM0LmM7ZW5kbGluZT0yODttZDU9YjRmZWIxOTc2ZmVlYmY4ZjEzNzkwOTNlZDUyZjI5NDUiCi0KLVNFQ1RJT04gPSAieDExIgotREVQRU5EUyA9ICJndGsrIGdjb25mIGludGx0b29sLW5hdGl2ZSBsaWJyc3ZnIGdldHRleHQtbmF0aXZlIgotCi0jIGxpYm93bCByZXF1aXJlcyB4MTEgaW4gRElTVFJPX0ZFQVRVUkVTCi1ERVBFTkRTX2FwcGVuZF9wb2t5ID0gIiAke0BiYi51dGlscy5jb250YWlucygnRElTVFJPX0ZFQVRVUkVTJywgJ3gxMScsICdsaWJvd2wnLCAnJywgZCl9IgotCi0jIFJlcXVpcmVzIGdkay9nZGt4Lmggd2hpY2ggaXMgcHJvdmlkZWQgYnkgZ3RrIHdoZW4geDExIGluIERJU1RST19GRUFUVVJFUwotUkVRVUlSRURfRElTVFJPX0ZFQVRVUkVTID0gIngxMSIKLQotU1JDUkVWID0gIjkyZjFhMjBlNGI3MmVlZDdhMzViMDA5ODRkOTc5M2I1MWRjMmZiM2IiCi1QViA9ICIwLjIrZ2l0JHtTUkNQVn0iCi1QUiA9ICJyMTAiCi0KLVNSQ19VUkkgPSAiZ2l0Oi8vZ2l0LnlvY3RvcHJvamVjdC5vcmcvJHtCUE59IgotU1JDX1VSSV9hcHBlbmRfcG9reSA9ICIgZmlsZTovL29oLXB1enpsZXMtb3dsLW1lbnUucGF0Y2g7c3RyaXBsZXZlbD0wICIKLQotUyA9ICIke1dPUktESVJ9L2dpdCIKLQotaW5oZXJpdCBhdXRvdG9vbHMgcGtnY29uZmlnIGRpc3Ryb19mZWF0dXJlc19jaGVjawotCi1iaW5kaXIgPSAiL3Vzci9nYW1lcyIKLQotRVhUUkFfT0VNQUtFICs9ICJHQ09ORl9ESVNBQkxFX01BS0VGSUxFX1NDSEVNQV9JTlNUQUxMPTEiCi0KLWRvX2luc3RhbGxfYXBwZW5kICgpIHsKLSAgICBpbnN0YWxsIC1kICR7RH0vJHtkYXRhZGlyfS9hcHBsaWNhdGlvbnMvCi0KLSAgICBjZCAke0R9LyR7cHJlZml4fS9nYW1lcwotICAgIGZvciBwcm9nIGluICo7IGRvCi0JaWYgWyAteCAkcHJvZyBdOyB0aGVuCi0gICAgICAgICAgICAjIENvbnZlcnQgcHJvZyB0byBUaXRsZSBDYXNlCi0gICAgICAgICAgICB0aXRsZT0kKGVjaG8gJHByb2cgfCBzZWQgJ3MvXCheXHwgXCkuL1xVJi9nJykKLQkgICAgZWNobyAibWFraW5nICR7RH0vJHtkYXRhZGlyfS9hcHBsaWNhdGlvbnMvJHByb2cuZGVza3RvcCIKLQkgICAgY2F0IDw8U1RPUCA+ICR7RH0vJHtkYXRhZGlyfS9hcHBsaWNhdGlvbnMvJHByb2cuZGVza3RvcAotW0Rlc2t0b3AgRW50cnldCi1OYW1lPSR0aXRsZQotRXhlYz0ke3ByZWZpeH0vZ2FtZXMvJHByb2cKLUljb249YXBwbGljYXRpb25zLWdhbWVzCi1UZXJtaW5hbD1mYWxzZQotVHlwZT1BcHBsaWNhdGlvbgotQ2F0ZWdvcmllcz1HYW1lOwotU3RhcnR1cE5vdGlmeT10cnVlCi1YLU1CLVNpbmdsZUluc3RhbmNlPXRydWUKLUNvbW1lbnQ9UGxheSAkdGl0bGUuCi1TVE9QCi0gICAgICAgIGZpCi0gICAgZG9uZQotfQotCi1QQUNLQUdFUyArPSAiJHtQTn0tZXh0cmEiCi1SREVQRU5EU18ke1BOfS1leHRyYSArPSAib2gtcHV6emxlcyIKLQotRklMRVNfJHtQTn0gPSAiL3Vzci9zaGFyZS9waXhtYXBzIC91c3Ivc2hhcmUvb2gtcHV6emxlcy8iCi1GSUxFU18ke1BOfS1leHRyYSA9ICIvdXNyL2dhbWVzLyAvdXNyL3NoYXJlL2FwcGxpY2F0aW9ucyAvZXRjL2djb25mL3NjaGVtYXMiCi0KLXB5dGhvbiBfX2Fub255bW91cyAoKSB7Ci0gICAgdmFyID0gYmIuZGF0YS5leHBhbmQoIkZJTEVTXyR7UE59IiwgZCwgMSkKLSAgICBkYXRhID0gZC5nZXRWYXIodmFyLCBUcnVlKQotICAgIGZvciBuYW1lIGluICgiYnJpZGdlcyIsICJmaWZ0ZWVuIiwgImluZXJ0aWEiLCAibWFwIiwgInNhbWVnYW1lIiwgInNsYW50Iik6Ci0gICAgICAgIGRhdGEgPSBkYXRhICsgIiAvdXNyL2dhbWVzLyVzIiAlIG5hbWUKLSAgICAgICAgZGF0YSA9IGRhdGEgKyAiIC91c3Ivc2hhcmUvYXBwbGljYXRpb25zLyVzLmRlc2t0b3AiICUgbmFtZQotICAgICAgICBkYXRhID0gZGF0YSArICIgL2V0Yy9nY29uZi9zY2hlbWFzLyVzLnNjaGVtYXMiICUgbmFtZQotICAgIGQuc2V0VmFyKHZhciwgZGF0YSkKLX0KZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc2F0by9wdXp6bGVzL3B1enpsZXNfZ2l0LmJiIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zYXRvL3B1enpsZXMvcHV6emxlc19naXQuYmIKaW5kZXggMzQ2ZjQzYi4uMjBiOTg4OSAxMDA2NDQKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zYXRvL3B1enpsZXMvcHV6emxlc19naXQuYmIKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zYXRvL3B1enpsZXMvcHV6emxlc19naXQuYmIKQEAgLTIxLDQ1ICsyMSw1NCBAQAogCiBTID0gIiR7V09SS0RJUn0vZ2l0IgogCi1pbmhlcml0IGF1dG90b29scy1icm9rZW5zZXAgZGlzdHJvX2ZlYXR1cmVzX2NoZWNrIHBrZ2NvbmZpZworaW5oZXJpdCBhdXRvdG9vbHMgZGlzdHJvX2ZlYXR1cmVzX2NoZWNrIHBrZ2NvbmZpZwogCi1QQUNLQUdFQ09ORklHID8/PSAiZ3RrMiIKK0NGTEFHU19hcHBlbmQgPSAiIC1Xbm8tZGVwcmVjYXRlZC1kZWNsYXJhdGlvbnMiCisKK1BBQ0tBR0VDT05GSUcgPz89ICJndGszIgogUEFDS0FHRUNPTkZJR1tndGsyXSA9ICItLXdpdGgtZ3RrPTIsLGd0ayssIgogUEFDS0FHRUNPTkZJR1tndGszXSA9ICItLXdpdGgtZ3RrPTMsLGd0ayszLCIKIAotZG9fY29uZmlndXJlX3ByZXBlbmQgKCkgewotICAgIC4vbWtmaWxlcy5wbAorUEFDS0FHRVMgKz0gIiR7UE59LWV4dHJhIgorRklMRVNfJHtQTn0gPSAiIgorRklMRVNfJHtQTn0tZXh0cmEgPSAiJHtwcmVmaXh9L2JpbiAke2RhdGFkaXJ9L2FwcGxpY2F0aW9ucyIKKworcHl0aG9uIF9fYW5vbnltb3VzICgpIHsKKyAgICB2YXIgPSBkLmV4cGFuZCgiRklMRVNfJHtQTn0iKQorICAgIGRhdGEgPSBkLmdldFZhcih2YXIsIEZhbHNlKQorICAgIGZvciBuYW1lIGluICgiYnJpZGdlcyIsICJmaWZ0ZWVuIiwgImluZXJ0aWEiLCAibWFwIiwgInNhbWVnYW1lIiwgInNsYW50Iik6CisgICAgICAgIGRhdGEgPSBkYXRhICsgIiAke2JpbmRpcn0vJXMiICUgbmFtZQorICAgICAgICBkYXRhID0gZGF0YSArICIgJHtkYXRhZGlyfS9hcHBsaWNhdGlvbnMvJXMuZGVza3RvcCIgJSBuYW1lCisgICAgZC5zZXRWYXIodmFyLCBkYXRhKQogfQogCi1GSUxFU18ke1BOfSA9ICIke3ByZWZpeH0vYmluLyogJHtkYXRhZGlyfS9hcHBsaWNhdGlvbnMvKiIKK2RvX2NvbmZpZ3VyZV9wcmVwZW5kICgpIHsKKyAgICBjZCAke1N9CisgICAgLi9ta2ZpbGVzLnBsCisgICAgY2QgJHtCfQorfQogCi1kb19pbnN0YWxsICgpIHsKLSAgICBybSAtcmYgJHtEfS8qCi0gICAgZXhwb3J0IHByZWZpeD0ke0R9Ci0gICAgZXhwb3J0IERFU1RESVI9JHtEfQotICAgIGluc3RhbGwgLWQgJHtEfS8ke3ByZWZpeH0vYmluLwotICAgIG9lX3J1bm1ha2UgaW5zdGFsbAotCi0KLSAgICBpbnN0YWxsIC1kICR7RH0vJHtkYXRhZGlyfS9hcHBsaWNhdGlvbnMvCitkb19pbnN0YWxsX2FwcGVuZCAoKSB7CisgICAgIyBuZXQgY29uZmxpY3RzIHdpdGggU2FtYmEsIHNvIHJlbmFtZSBpdAorICAgIG12ICR7RH0ke2JpbmRpcn0vbmV0ICR7RH0ke2JpbmRpcn0vcHV6emxlcy1uZXQKIAogICAgICMgQ3JlYXRlIGRlc2t0b3Agc2hvcnRjdXRzCisgICAgaW5zdGFsbCAtZCAke0R9LyR7ZGF0YWRpcn0vYXBwbGljYXRpb25zLwogICAgIGNkICR7RH0vJHtwcmVmaXh9L2JpbgogICAgIGZvciBwcm9nIGluICo7IGRvCiAJaWYgWyAteCAkcHJvZyBdOyB0aGVuCiAgICAgICAgICAgICAjIENvbnZlcnQgcHJvZyB0byBUaXRsZSBDYXNlCi0gICAgICAgICAgICB0aXRsZT0kKGVjaG8gJHByb2cgfCBzZWQgJ3MvXCheXHwgXCkuL1xVJi9nJykKKyAgICAgICAgICAgIHRpdGxlPSQoZWNobyAkcHJvZyB8IHNlZCAncy9wdXp6bGVzLS8vJyB8IHNlZCAncy9cKF5cfCBcKS4vXFUmL2cnKQogCSAgICBlY2hvICJtYWtpbmcgJHtEfS8ke2RhdGFkaXJ9L2FwcGxpY2F0aW9ucy8kcHJvZy5kZXNrdG9wIgogCSAgICBjYXQgPDxTVE9QID4gJHtEfS8ke2RhdGFkaXJ9L2FwcGxpY2F0aW9ucy8kcHJvZy5kZXNrdG9wCiBbRGVza3RvcCBFbnRyeV0KIE5hbWU9JHRpdGxlCi1FeGVjPSR7cHJlZml4fS9iaW4vJHByb2cKK0V4ZWM9JHtiaW5kaXJ9LyRwcm9nCiBJY29uPWFwcGxpY2F0aW9ucy1nYW1lcwogVGVybWluYWw9ZmFsc2UKIFR5cGU9QXBwbGljYXRpb24KIENhdGVnb3JpZXM9R2FtZTsKIFN0YXJ0dXBOb3RpZnk9dHJ1ZQotWC1NQi1TaW5nbGVJbnN0YW5jZT10cnVlCiBTVE9QCiAgICAgICAgIGZpCiAgICAgZG9uZQpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zYXRvL3NhdG8taWNvbi10aGVtZS9zYXRvLWljb24tdGhlbWUvMDAwMS1Jbmhlcml0LXRoZS1HTk9NRS1pY29uLXRoZW1lLnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zYXRvL3NhdG8taWNvbi10aGVtZS9zYXRvLWljb24tdGhlbWUvMDAwMS1Jbmhlcml0LXRoZS1HTk9NRS1pY29uLXRoZW1lLnBhdGNoCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyYzE3NmVlLi4wMDAwMDAwCi0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc2F0by9zYXRvLWljb24tdGhlbWUvc2F0by1pY29uLXRoZW1lLzAwMDEtSW5oZXJpdC10aGUtR05PTUUtaWNvbi10aGVtZS5wYXRjaAorKysgL2Rldi9udWxsCkBAIC0xLDMxICswLDAgQEAKLUZyb20gYjlmMDI5ODkzMTBhM2M5MjA1ODlmMWFhNjQ2YmNiZjE2YjI1NzJhMCBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKLUZyb206IFJvc3MgQnVydG9uIDxyb3NzLmJ1cnRvbkBpbnRlbC5jb20+Ci1EYXRlOiBXZWQsIDEzIEp1biAyMDEyIDExOjA3OjMzICswMTAwCi1TdWJqZWN0OiBbUEFUQ0hdIEluaGVyaXQgdGhlIEdOT01FIGljb24gdGhlbWUKLQotSWYgdGhlIEdOT01FIGljb24gdGhlbWUgaXNuJ3QgaW5zdGFsbGVkIHRoaXMgaXMgYSBuby1vcCwgYnV0IGlmIGl0IGlzIHRoZW4KLXlvdSdsbCBnZXQgZmFsbGJhY2sgZnJvbSBTYXRvIHRvIEdOT01FIGZvciBpY29ucyB0aGF0IGFyZSBub3QgaW4gU2F0by4KLQotQXMgYXBwbGljYXRpb25zIHRoYXQgdXNlIHRoZSBmdWxsIEdOT01FIGljb24gdGhlbWUgZGVwZW5kIG9uIGdub21lLWljb24tdGhlbWUsCi10aGlzIGp1c3Qgd29ya3MuCi0KLVVwc3RyZWFtLVN0YXR1czogQmFja3BvcnQKLS0tLQotIGluZGV4LnRoZW1lIHwgICAgMSArCi0gMSBmaWxlIGNoYW5nZWQsIDEgaW5zZXJ0aW9uKCspCi0KLWRpZmYgLS1naXQgYS9pbmRleC50aGVtZSBiL2luZGV4LnRoZW1lCi1pbmRleCBjNGIwM2E3Li42ODhmYmJmIDEwMDY0NAotLS0tIGEvaW5kZXgudGhlbWUKLSsrKyBiL2luZGV4LnRoZW1lCi1AQCAtMSw2ICsxLDcgQEAKLSBbSWNvbiBUaGVtZV0KLSBOYW1lPVNhdG8KLSBDb21tZW50PVNhdG8gaWNvbiB0aGVtZQotK0luaGVyaXRzPUFkd2FpdGEKLSAKLSBEaXJlY3Rvcmllcz0xNngxNi9hcHBzLDE2eDE2L3N0YXR1cywxNngxNi9zdG9jaywxNngxNi9wbGFjZXMsMTZ4MTYvbWltZXR5cGVzLDE2eDE2L2RldmljZXMsMTZ4MTYvYWN0aW9ucywyMngyMi9hcHBzLDIyeDIyL3N0YXR1cywyMngyMi9zdG9jaywyMngyMi9wbGFjZXMsMjJ4MjIvbWltZXR5cGVzLDIyeDIyL2RldmljZXMsMjJ4MjIvYWN0aW9ucywzMngzMi9hcHBzLDMyeDMyL3N0YXR1cywzMngzMi9zdG9jaywzMngzMi9wbGFjZXMsMzJ4MzIvbWltZXR5cGVzLDMyeDMyL2RldmljZXMsMzJ4MzIvYWN0aW9ucyw0OHg0OC9hcHBzLDQ4eDQ4L3N0YXR1cyw0OHg0OC9zdG9jayw0OHg0OC9wbGFjZXMsNDh4NDgvbWltZXR5cGVzLDQ4eDQ4L2RldmljZXMsNDh4NDgvYWN0aW9ucyw2NHg2NC9hcHBzLDY0eDY0L3N0YXR1cyw2NHg2NC9zdG9jayw2NHg2NC9wbGFjZXMsNjR4NjQvbWltZXR5cGVzLDY0eDY0L2RldmljZXMsNjR4NjQvYWN0aW9ucywKLSAKLS0tIAotMS43LjEwCi0KZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc2F0by9zYXRvLWljb24tdGhlbWUvc2F0by1pY29uLXRoZW1lXzAuNC4xLmJiIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zYXRvL3NhdG8taWNvbi10aGVtZS9zYXRvLWljb24tdGhlbWVfMC40LjEuYmIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGNlZDczNWYuLjAwMDAwMDAKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zYXRvL3NhdG8taWNvbi10aGVtZS9zYXRvLWljb24tdGhlbWVfMC40LjEuYmIKKysrIC9kZXYvbnVsbApAQCAtMSw0MCArMCwwIEBACi1TVU1NQVJZID0gIlNhdG8gaWNvbiB0aGVtZSIKLUhPTUVQQUdFID0gImh0dHA6Ly93d3cuby1oYW5kLmNvbSIKLUJVR1RSQUNLRVIgPSAiaHR0cDovL2J1Z3ppbGxhLnlvY3RvcHJvamVjdC5vcmcvIgotCi1MSUNFTlNFID0gIkNDLUJZLVNBLTMuMCIKLUxJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PTU2YTgzMGJiZTZlNDY5N2ZlNmNiYmFlMDFiYjdjMmIyIgotU0VDVElPTiA9ICJ4MTEiCi0KLVBSID0gInI2IgotCi1ERVBFTkRTID0gImljb24tbmFtaW5nLXV0aWxzLW5hdGl2ZSBsaWJ4bWwtc2ltcGxlLXBlcmwtbmF0aXZlIgotCi1TUkNfVVJJID0gImh0dHA6Ly9wb2t5bGludXgub3JnL3JlbGVhc2VzL3NhdG8vJHtCUE59LSR7UFZ9LnRhci5neiBcCi0gICAgICAgICAgIGZpbGU6Ly8wMDAxLUluaGVyaXQtdGhlLUdOT01FLWljb24tdGhlbWUucGF0Y2giCi0KLVNSQ19VUklbbWQ1c3VtXSA9ICI4NmE4NDdmMzEyOGE0M2E5Y2YyM2I3MDI5YTY1NmY1MCIKLVNSQ19VUklbc2hhMjU2c3VtXSA9ICIwYjBhMjgwN2E2YTk2OTE4YWM3OTlhODYwOTRlYzNlOGUyYzg5MmJlMGZkNjc5YTQyMzJjMmE3N2YyZjYxNzMyIgotCi1pbmhlcml0IGF1dG90b29scyBwa2djb25maWcgYWxsYXJjaCBndGstaWNvbi1jYWNoZSBwZXJsbmF0aXZlCi0KLSMgVGhlIGNvbmZpZ3VyZSBzY3JpcHQgdXNlcyBwa2ctY29uZmlnIHRvIGZpbmQgbmF0aXZlIGJpbmFyaWVzIHRvIGV4ZWN1dGUsIHNvCi0jIHRlbGwgaXQgdG8gdXNlIG91ciBwa2ctY29uZmlnLW5hdGl2ZSB3cmFwcGVyLgotZXhwb3J0IFBLR19DT05GSUcgPSAicGtnLWNvbmZpZy1uYXRpdmUiCi0KLUZJTEVTXyR7UE59ICs9ICIke2RhdGFkaXJ9L2ljb25zL1NhdG8iCi0KLWRvX2luc3RhbGxfYXBwZW5kKCkgewotCWZpbmQgJHtEfSR7ZGF0YWRpcn0vaWNvbnMvU2F0by8gLW1heGRlcHRoIDEgLXR5cGUgZCAtZXhlYyBsbiAtcyBwcmVmZXJlbmNlcy1zeXN0ZW0ucG5nIHt9L2FwcHMvcHJlZmVyZW5jZXMtZGVza3RvcC5wbmcgXDsKLQlmaW5kICR7RH0ke2RhdGFkaXJ9L2ljb25zL1NhdG8vIC1tYXhkZXB0aCAxIC10eXBlIGQgLWV4ZWMgbG4gLXMgZmlsZS1tYW5hZ2VyLnBuZyB7fS9hcHBzL3N5c3RlbS1maWxlLW1hbmFnZXIucG5nIFw7Ci0JZmluZCAke0R9JHtkYXRhZGlyfS9pY29ucy9TYXRvLyAtbWF4ZGVwdGggMSAtdHlwZSBkIC1leGVjIGxuIC1zIC4uL2FwcHMvdGVybWluYWwucG5nIHt9L3BsYWNlcy9jb21wdXRlci5wbmcgXDsKLX0KLQotIyBFeHBsaWN0bHkgc2V0dGluZyAiU2F0byIgYXMgdGhlIGRlZmF1bHQgaWNvbiB0aGVtZSB0byBhdm9pZCBmbGlja2VyaW5nIGZyb20KLSMgdGhlIGRlc2t0b3AgYW5kIHNldHRpbmdzIGRhZW1vbiByYWNpbmcuICBUaGlzIHNob3VsZG4ndCBiZSBkb25lIGhlcmUgYnV0IGluIHRoZSBzYXRvIGltYWdlCi1wa2dfcG9zdGluc3RfJHtQTn0gKCkgewotICAgIG1rZGlyIC1wICREL2V0Yy9ndGstMi4wCi0KLSAgICBncmVwIC1zIC1xIC1lIF5ndGstaWNvbi10aGVtZS1uYW1lLipcIlNhdG9cIiAkRC9ldGMvZ3RrLTIuMC9ndGtyYyB8fCBcCi0gICAgICAgIGVjaG8gJ2d0ay1pY29uLXRoZW1lLW5hbWUgPSAiU2F0byInID4+ICREL2V0Yy9ndGstMi4wL2d0a3JjCi19CmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXNhdG8vc2F0by1zY3JlZW5zaG90L3NhdG8tc2NyZWVuc2hvdF8wLjMuYmIgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXNhdG8vc2F0by1zY3JlZW5zaG90L3NhdG8tc2NyZWVuc2hvdF8wLjMuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjMzMDVhZQotLS0gL2Rldi9udWxsCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc2F0by9zYXRvLXNjcmVlbnNob3Qvc2F0by1zY3JlZW5zaG90XzAuMy5iYgpAQCAtMCwwICsxLDI4IEBACitTVU1NQVJZID0gIlVsdHJhLXNpbXBsZSBzY3JlZW4gY2FwdHVyZSB1dGlsaXR5LCBhaW1lZCBhdCBoYW5kaGVsZCBkZXZpY2VzIgorSE9NRVBBR0UgPSAiaHR0cDovL3d3dy5vLWhhbmQuY29tIgorQlVHVFJBQ0tFUiA9ICJodHRwOi8vYnVnemlsbGEueW9jdG9wcm9qZWN0Lm9yZy8iCisKK0xJQ0VOU0UgPSAiR1BMdjIgJiBHUEx2MisiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT05NGQ1NWQ1MTJhOWJhMzZjYWE5YjdkZjA3OWJhZTE5ZiBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9tYWluLmM7ZW5kbGluZT05O21kNT0wMjNlMTRkNjQwNGQwYTk2MWViOTdjYmQwMTFmYzE0MSBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9zY3JlZW5zaG90LXVpLmg7ZW5kbGluZT05O21kNT02MzhkOWZmYTgzZTkzMjVhMzZkZjIyNDE2NmVkNmFkMCIKKworREVQRU5EUyA9ICJtYXRjaGJveC1wYW5lbC0yIGd0ayszIgorCisjIFNSQ1JFViB0YWdnZWQgMC4zCitTUkNSRVYgPSAiOTI1MGZhNWEwMTJkODRmZjQ1OTg0ZThjNDM0NWVlNzYzNTIyNzc1NiIKK1NSQ19VUkkgPSAiZ2l0Oi8vZ2l0LnlvY3RvcHJvamVjdC5vcmcvc2NyZWVuc2hvdCIKK1VQU1RSRUFNX0NIRUNLX0dJVFRBR1JFR0VYID0gIig/UDxwdmVyPihcZCsoXC5cZCspKykpIgorCitTID0gIiR7V09SS0RJUn0vZ2l0IgorCitpbmhlcml0IGF1dG90b29scyBwa2djb25maWcgZGlzdHJvX2ZlYXR1cmVzX2NoZWNrCisKK0ZJTEVTXyR7UE59ICs9ICIke2xpYmRpcn0vbWF0Y2hib3gtcGFuZWwvKi5zbyIKKworZG9faW5zdGFsbF9hcHBlbmQgKCkgeworCXJtICR7RH0ke2xpYmRpcn0vbWF0Y2hib3gtcGFuZWwvKi5sYQorfQorCisjIFRoZSBtYXRjaGJveC1wYW5lbC0yIHJlcXVpcmVzIHgxMSBpbiBESVNUUk9fRkVBVFVSRVMKK1JFUVVJUkVEX0RJU1RST19GRUFUVVJFUyA9ICJ4MTEiCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXNhdG8vc2F0by1zY3JlZW5zaG90L3NhdG8tc2NyZWVuc2hvdF9naXQuYmIgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXNhdG8vc2F0by1zY3JlZW5zaG90L3NhdG8tc2NyZWVuc2hvdF9naXQuYmIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDFiMmI2NWQuLjAwMDAwMDAKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zYXRvL3NhdG8tc2NyZWVuc2hvdC9zYXRvLXNjcmVlbnNob3RfZ2l0LmJiCisrKyAvZGV2L251bGwKQEAgLTEsMjggKzAsMCBAQAotU1VNTUFSWSA9ICJVbHRyYS1zaW1wbGUgc2NyZWVuIGNhcHR1cmUgdXRpbGl0eSwgYWltZWQgYXQgaGFuZGhlbGQgZGV2aWNlcyIKLUhPTUVQQUdFID0gImh0dHA6Ly93d3cuby1oYW5kLmNvbSIKLUJVR1RSQUNLRVIgPSAiaHR0cDovL2J1Z3ppbGxhLnlvY3RvcHJvamVjdC5vcmcvIgotCi1MSUNFTlNFID0gIkdQTHYyICYgR1BMdjIrIgotTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9OTRkNTVkNTEyYTliYTM2Y2FhOWI3ZGYwNzliYWUxOWYgXAotICAgICAgICAgICAgICAgICAgICBmaWxlOi8vbWFpbi5jO2VuZGxpbmU9OTttZDU9MDIzZTE0ZDY0MDRkMGE5NjFlYjk3Y2JkMDExZmMxNDEgXAotICAgICAgICAgICAgICAgICAgICBmaWxlOi8vc2NyZWVuc2hvdC11aS5oO2VuZGxpbmU9OTttZDU9NjM4ZDlmZmE4M2U5MzI1YTM2ZGYyMjQxNjZlZDZhZDAiCi0KLURFUEVORFMgPSAibWF0Y2hib3gtcGFuZWwtMiIKLVNSQ1JFViA9ICIzYTk2ODhlOGEwMWI2M2E3OGY0MDJiNGU3YzBiOGIwMDVmY2RmYTI5IgotUFYgPSAiMC4xK2dpdCR7U1JDUFZ9IgotUFIgPSAicjIiCi0KLVNSQ19VUkkgPSAiZ2l0Oi8vZ2l0LnlvY3RvcHJvamVjdC5vcmcvc2NyZWVuc2hvdCIKLQotUyA9ICIke1dPUktESVJ9L2dpdCIKLQotaW5oZXJpdCBhdXRvdG9vbHMgcGtnY29uZmlnIGRpc3Ryb19mZWF0dXJlc19jaGVjawotCi1GSUxFU18ke1BOfSArPSAiJHtsaWJkaXJ9L21hdGNoYm94LXBhbmVsLyouc28iCi0KLWRvX2luc3RhbGxfYXBwZW5kICgpIHsKLQlybSAke0R9JHtsaWJkaXJ9L21hdGNoYm94LXBhbmVsLyoubGEKLX0KLQotIyBUaGUgbWF0Y2hib3gtcGFuZWwtMiByZXF1aXJlcyB4MTEgaW4gRElTVFJPX0ZFQVRVUkVTCi1SRVFVSVJFRF9ESVNUUk9fRkVBVFVSRVMgPSAieDExIgpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zYXRvL3NldHRpbmdzLWRhZW1vbi9maWxlcy9kc29fbGlua2luZ19jaGFuZ2VfYnVpbGRfZml4LnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zYXRvL3NldHRpbmdzLWRhZW1vbi9maWxlcy9kc29fbGlua2luZ19jaGFuZ2VfYnVpbGRfZml4LnBhdGNoCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1OTQzNzQ0Li4wMDAwMDAwCi0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc2F0by9zZXR0aW5ncy1kYWVtb24vZmlsZXMvZHNvX2xpbmtpbmdfY2hhbmdlX2J1aWxkX2ZpeC5wYXRjaAorKysgL2Rldi9udWxsCkBAIC0xLDMxICswLDAgQEAKLVVwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbY29uZmlndXJhdGlvbl0KLQotYWZ0ZXIgZ2NjIGxpbmtpbmcgaGFzIGNoYW5nZWQsIGFsbCB0aGUgbGlicmFyaWVzIG11c3QgYmUgZXhwbGljaXRlbHkgc3BlY2lmaWVkIHRvIGZvciBsaW5raW5nLiAKLVRoaXMgcGF0Y2ggYXZvaWRzIHRoaXMgbGlua2luZyBlcnJvcjoKLQotfCBtYWtlICBhbGwtYW1eTQotfCBtYWtlWzFdOiBFbnRlcmluZyBkaXJlY3RvcnkgYC9kaXNrMC9wb2t5YnVpbGQvYnVpbGQxL3RtcC93b3JrL2k1ODYtcG9reS1saW51eC9zZXR0aW5ncy1kYWVtb24tMC4wK3N2bnIyMDU5LXIzL3NldHRpbmdzLWRhZW1vbideTQotfCBjY2FjaGUgaTU4Ni1wb2t5LWxpbnV4LWdjYyAtbWFyY2g9aTU4NiAtLXN5c3Jvb3Q9L2Rpc2swL3Bva3lidWlsZC9idWlsZDEvdG1wL3N5c3Jvb3RzL2k1ODYtcG9reS1saW51eCAtV2FsbCAtZmV4cGVuc2l2ZS1vcHRpbWl6YXRpb25zIC1mb21pdC1mcmFtZS1wb2ludGVyIC1mcmVuYW1lLXJlZ2lzdGVycyAtTzIgLWdnZGIgLWZlbGltaW5hdGUtdW51c2VkLWRlYnVnLXR5cGVzICAtV2wsLU8xIC1XbCwtLWhhc2gtc3R5bGU9Z251IC1XbCwtLWFzLW5lZWRlZCAtbyBzZXR0aW5ncy1kYWVtb24gc2V0dGluZ3NfZGFlbW9uLXhzZXR0aW5ncy1jb21tb24ubyBzZXR0aW5nc19kYWVtb24teHNldHRpbmdzLW1hbmFnZXIubyBzZXR0aW5nc19kYWVtb24tc2V0dGluZ3MtZGFlbW9uLm8gLXB0aHJlYWQgLWxnY29uZi0yIC1sZGJ1cy1nbGliLTEgLWxkYnVzLTEgLWxwdGhyZWFkIC1sZ2RrLXgxMS0yLjAgLWxnZGtfcGl4YnVmLTIuMCAtbHBhbmdvY2Fpcm8tMS4wIC1scGFuZ28tMS4wIC1sY2Fpcm8gLWxnb2JqZWN0LTIuMCAtbGdtb2R1bGUtMi4wIC1sZ3RocmVhZC0yLjAgLWxydCAtbGdsaWItMi4wXk0KLXwgL2Rpc2swL3Bva3lidWlsZC9idWlsZDEvdG1wL3N5c3Jvb3RzL3g4Nl82NC1saW51eC91c3IvbGliZXhlYy9pNTg2LXBva3ktbGludXgvZ2NjL2k1ODYtcG9reS1saW51eC80LjUuMS9sZDogKl5BOiBpbnZhbGlkIERTTyBmb3Igc3ltYm9sIGBYQ3JlYXRlU2ltcGxlV2luZG93JyBkZWZpbml0aW9uXk0KLXwgL2Rpc2swL3Bva3lidWlsZC9idWlsZDEvdG1wL3N5c3Jvb3RzL2k1ODYtcG9reS1saW51eC91c3IvbGliL2xpYlgxMS5zby42OiBjb3VsZCBub3QgcmVhZCBzeW1ib2xzOiBCYWQgdmFsdWVeTQotfCBjb2xsZWN0MjogbGQgcmV0dXJuZWQgMSBleGl0IHN0YXR1c15NCi18IG1ha2VbMV06ICoqKiBbc2V0dGluZ3MtZGFlbW9uXSBFcnJvciAxXk0KLXwgbWFrZVsxXTogTGVhdmluZyBkaXJlY3RvcnkgYC9kaXNrMC9wb2t5YnVpbGQvYnVpbGQxL3RtcC93b3JrL2k1ODYtcG9reS1saW51eC9zZXR0aW5ncy1kYWVtb24tMC4wK3N2bnIyMDU5LXIzL3NldHRpbmdzLWRhZW1vbideTQotfCBtYWtlOiAqKiogW2FsbF0gRXJyb3IgMl5NCi0KLU5pdGluIEEgS2FtYmxlIDxuaXRpbi5hLmthbWJsZUBpbnRlbC5jb20+Ci1EYXRlOiAyMDExLzAxLzExCi0KLUluZGV4OiBzZXR0aW5ncy1kYWVtb24vY29uZmlndXJlLmFjCi09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLS0gc2V0dGluZ3MtZGFlbW9uLm9yaWcvY29uZmlndXJlLmFjCi0rKysgc2V0dGluZ3MtZGFlbW9uL2NvbmZpZ3VyZS5hYwotQEAgLTE0LDcgKzE0LDcgQEAgQUNfUFJPR19DQwotIAotIAotIGRubCBUT0RPOiBtYWtlIGdjb25mIG9wdGlvbmFsCi0tUEtHX0NIRUNLX01PRFVMRVMoQVBQLCBbZ2NvbmYtMi4wIGdkay14MTEtMi4wXSkKLStQS0dfQ0hFQ0tfTU9EVUxFUyhBUFAsIFtnY29uZi0yLjAgZ2RrLXgxMS0yLjAgeDExXSkKLSAKLSAKLSBBQ19TVUJTVChBUFBfQ0ZMQUdTKQpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zYXRvL3NldHRpbmdzLWRhZW1vbi9zZXR0aW5ncy1kYWVtb25fMC4wLjIuYmIgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXNhdG8vc2V0dGluZ3MtZGFlbW9uL3NldHRpbmdzLWRhZW1vbl8wLjAuMi5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jZWFlY2NhCi0tLSAvZGV2L251bGwKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zYXRvL3NldHRpbmdzLWRhZW1vbi9zZXR0aW5ncy1kYWVtb25fMC4wLjIuYmIKQEAgLTAsMCArMSwzMCBAQAorU1VNTUFSWSA9ICJQcm92aWRlcyBhIGJyaWRnZSBiZXR3ZWVuIGdjb25mIGFuZCB4c2V0dGluZ3MiCitIT01FUEFHRSA9ICJodHRwOi8vc3ZuLm8taGFuZC5jb20vdmlldy9tYXRjaGJveC90cnVuay9zZXR0aW5ncy1kYWVtb24vIgorQlVHVFJBQ0tFUiA9ICJodHRwOi8vYnVnemlsbGEueW9jdG9wcm9qZWN0Lm9yZy8iCitMSUNFTlNFID0gIk1JVC1zdHlsZSIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL3hzZXR0aW5ncy1tYW5hZ2VyLmg7ZW5kbGluZT0yMjttZDU9N2NmYWM5ZDJkNGRjMzY5NGNjN2ViNjA1Y2YzMmE2OWIgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8veHNldHRpbmdzLWNvbW1vbi5oO2VuZGxpbmU9MjI7bWQ1PTdjZmFjOWQyZDRkYzM2OTRjYzdlYjYwNWNmMzJhNjliIgorREVQRU5EUyA9ICJnY29uZiBnbGliLTIuMCBndGsrMyIKK1NFQ1RJT04gPSAieDExIgorCisjIFNSQ1JFViB0YWdnZWQgMC4wLjIKK1NSQ1JFViA9ICJiMmU1ZGE1MDJmOGM1ZmY3NWU5ZTZkYTc3MTM3MmVmOGU0MGZkOWEyIgorU1JDX1VSSSA9ICJnaXQ6Ly9naXQueW9jdG9wcm9qZWN0Lm9yZy94c2V0dGluZ3MtZGFlbW9uIFwKKyAgICAgICAgICAgZmlsZTovL2FkZHNvdW5ka2V5cy5wYXRjaDthcHBseT15ZXMgXAorICAgICAgICAgICBmaWxlOi8vNzBzZXR0aW5ncy1kYWVtb24uc2ggXAorICAgICAgICAgICAiCitVUFNUUkVBTV9DSEVDS19HSVRUQUdSRUdFWCA9ICIoP1A8cHZlcj4oXGQrKFwuXGQrKSspKSIKKworUyA9ICIke1dPUktESVJ9L2dpdCIKKworaW5oZXJpdCBhdXRvdG9vbHMgcGtnY29uZmlnIGdjb25mIGRpc3Ryb19mZWF0dXJlc19jaGVjaworCitGSUxFU18ke1BOfSA9IAkiJHtiaW5kaXJ9LyogJHtzeXNjb25mZGlyfSIKKworIyBSZXF1aXJlcyBnZGsteDExLTIuMCB3aGljaCBpcyBwcm92aWRlZCBieSBndGsgd2hlbiB4MTEgaW4gRElTVFJPX0ZFQVRVUkVTCitSRVFVSVJFRF9ESVNUUk9fRkVBVFVSRVMgPSAieDExIgorCitkb19pbnN0YWxsX2FwcGVuZCAoKSB7CisJaW5zdGFsbCAtZCAke0R9LyR7c3lzY29uZmRpcn0vWDExL1hzZXNzaW9uLmQKKwlpbnN0YWxsIC1tIDc1NSAke1dPUktESVJ9Lzcwc2V0dGluZ3MtZGFlbW9uLnNoICR7RH0vJHtzeXNjb25mZGlyfS9YMTEvWHNlc3Npb24uZC8KK30KZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc2F0by9zZXR0aW5ncy1kYWVtb24vc2V0dGluZ3MtZGFlbW9uX2dpdC5iYiBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc2F0by9zZXR0aW5ncy1kYWVtb24vc2V0dGluZ3MtZGFlbW9uX2dpdC5iYgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzA2MTU1My4uMDAwMDAwMAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXNhdG8vc2V0dGluZ3MtZGFlbW9uL3NldHRpbmdzLWRhZW1vbl9naXQuYmIKKysrIC9kZXYvbnVsbApAQCAtMSwzMCArMCwwIEBACi1TVU1NQVJZID0gIlByb3ZpZGVzIGEgYnJpZGdlIGJldHdlZW4gZ2NvbmYgYW5kIHhzZXR0aW5ncyIKLUhPTUVQQUdFID0gImh0dHA6Ly9zdm4uby1oYW5kLmNvbS92aWV3L21hdGNoYm94L3RydW5rL3NldHRpbmdzLWRhZW1vbi8iCi1CVUdUUkFDS0VSID0gImh0dHA6Ly9idWd6aWxsYS55b2N0b3Byb2plY3Qub3JnLyIKLUxJQ0VOU0UgPSAiTUlULXN0eWxlIgotTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8veHNldHRpbmdzLW1hbmFnZXIuaDtlbmRsaW5lPTIyO21kNT03Y2ZhYzlkMmQ0ZGMzNjk0Y2M3ZWI2MDVjZjMyYTY5YiBcCi0gICAgICAgICAgICAgICAgICAgIGZpbGU6Ly94c2V0dGluZ3MtY29tbW9uLmg7ZW5kbGluZT0yMjttZDU9N2NmYWM5ZDJkNGRjMzY5NGNjN2ViNjA1Y2YzMmE2OWIiCi1ERVBFTkRTID0gImdjb25mIGdsaWItMi4wIGd0aysiCi1TRUNUSU9OID0gIngxMSIKLVNSQ1JFViA9ICI5YTk5NTI4YjAyMjU1NDUwZGI4MTE3NmFiZDliYmNjMWRhYjlhNGMxIgotUFYgPSAiMC4wK2dpdCR7U1JDUFZ9IgotCi0KLVNSQ19VUkkgPSAiZ2l0Oi8vZ2l0LnlvY3RvcHJvamVjdC5vcmcveHNldHRpbmdzLWRhZW1vbiBcCi0gICAgICAgICAgIGZpbGU6Ly9hZGRzb3VuZGtleXMucGF0Y2g7YXBwbHk9eWVzIFwKLSAgICAgICAgICAgZmlsZTovLzcwc2V0dGluZ3MtZGFlbW9uLnNoIFwKLSAgICAgICAgICAgZmlsZTovL2Rzb19saW5raW5nX2NoYW5nZV9idWlsZF9maXgucGF0Y2giCi0KLVMgPSAiJHtXT1JLRElSfS9naXQiCi0KLWluaGVyaXQgYXV0b3Rvb2xzIHBrZ2NvbmZpZyBnY29uZiBkaXN0cm9fZmVhdHVyZXNfY2hlY2sKLQotRklMRVNfJHtQTn0gPSAJIiR7YmluZGlyfS8qICR7c3lzY29uZmRpcn0iCi0KLSMgUmVxdWlyZXMgZ2RrLXgxMS0yLjAgd2hpY2ggaXMgcHJvdmlkZWQgYnkgZ3RrIHdoZW4geDExIGluIERJU1RST19GRUFUVVJFUwotUkVRVUlSRURfRElTVFJPX0ZFQVRVUkVTID0gIngxMSIKLQotZG9faW5zdGFsbF9hcHBlbmQgKCkgewotCWluc3RhbGwgLWQgJHtEfS8ke3N5c2NvbmZkaXJ9L1gxMS9Yc2Vzc2lvbi5kCi0JaW5zdGFsbCAtbSA3NTUgJHtXT1JLRElSfS83MHNldHRpbmdzLWRhZW1vbi5zaCAke0R9LyR7c3lzY29uZmRpcn0vWDExL1hzZXNzaW9uLmQvCi19CmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXNhdG8vd2Via2l0L2ZpbGVzLzAwMDEtRml4LXJhY3ktcGFyYWxsZWwtYnVpbGQtb2YtV2ViS2l0Mi00LjAuZ2lyLnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zYXRvL3dlYmtpdC9maWxlcy8wMDAxLUZpeC1yYWN5LXBhcmFsbGVsLWJ1aWxkLW9mLVdlYktpdDItNC4wLmdpci5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MTVmZTRmCi0tLSAvZGV2L251bGwKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zYXRvL3dlYmtpdC9maWxlcy8wMDAxLUZpeC1yYWN5LXBhcmFsbGVsLWJ1aWxkLW9mLVdlYktpdDItNC4wLmdpci5wYXRjaApAQCAtMCwwICsxLDQ4IEBACitGcm9tIDU3NjBkMzQ2YjQyODA3YjU5NmY0NzljODFmN2E2YjQyZWIzNjA2NWUgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBBbGV4YW5kZXIgS2FuYXZpbiA8YWxleC5rYW5hdmluQGdtYWlsLmNvbT4KK0RhdGU6IE1vbiwgMjkgQXVnIDIwMTYgMTY6Mzg6MTEgKzAzMDAKK1N1YmplY3Q6IFtQQVRDSF0gRml4IHJhY3kgcGFyYWxsZWwgYnVpbGQgb2YgV2ViS2l0Mi00LjAuZ2lyCisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworU2lnbmVkLW9mZi1ieTogQWxleGFuZGVyIEthbmF2aW4gPGFsZXgua2FuYXZpbkBnbWFpbC5jb20+CistLS0KKyBTb3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybUdUSy5jbWFrZSB8IDkgKysrKystLS0tCisgMSBmaWxlIGNoYW5nZWQsIDUgaW5zZXJ0aW9ucygrKSwgNCBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1BsYXRmb3JtR1RLLmNtYWtlIGIvU291cmNlL1dlYktpdDIvUGxhdGZvcm1HVEsuY21ha2UKK2luZGV4IGFkYWEwMTAuLmYxOGNmOGEgMTAwNjQ0CistLS0gYS9Tb3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybUdUSy5jbWFrZQorKysrIGIvU291cmNlL1dlYktpdDIvUGxhdGZvcm1HVEsuY21ha2UKK0BAIC05MDYsOCArOTA2LDkgQEAgZW5kaWYgKCkKKyBzdHJpbmcoUkVHRVggTUFUQ0hBTEwgIi1MW14gXSoiCisgICAgIElOVFJPU1BFQ1RJT05fQURESVRJT05BTF9MSU5LRVJfRkxBR1MgIiR7Q01BS0VfU0hBUkVEX0xJTktFUl9GTEFHU30iKQorIAorLWFkZF9jdXN0b21fY29tbWFuZCgKKy0gICAgT1VUUFVUICR7Q01BS0VfQklOQVJZX0RJUn0vV2ViS2l0Mi0ke1dFQktJVEdUS19BUElfVkVSU0lPTn0uZ2lyCisrIyBUaGlzIGlzIGEgdGFyZ2V0IGFuZCBub3QgYSBjb21tYW5kIGJlY2F1c2UgaXQncyB1c2VkIHRvIGJ1aWxkIGFub3RoZXIgLmdpcgorKyMgYW5kIGEgLnR5cGVsaWIsIHdoaWNoIHdvdWxkIHRyaWdnZXIgdHdvIHJhY3kgcGFyYWxsZWwgYnVpbGRzIHdoZW4gdXNpbmcgY29tbWFuZAorK2FkZF9jdXN0b21fdGFyZ2V0KFdlYktpdDItJHtXRUJLSVRHVEtfQVBJX1ZFUlNJT059LWdpcgorICAgICBERVBFTkRTIFdlYktpdDIKKyAgICAgREVQRU5EUyAke0NNQUtFX0JJTkFSWV9ESVJ9L0phdmFTY3JpcHRDb3JlLSR7V0VCS0lUR1RLX0FQSV9WRVJTSU9OfS5naXIKKyAgICAgQ09NTUFORCBDQz0ke0NNQUtFX0NfQ09NUElMRVJ9IENGTEFHUz0tV25vLWRlcHJlY2F0ZWQtZGVjbGFyYXRpb25zXCAke0NNQUtFX0NfRkxBR1N9IExERkxBR1M9CitAQCAtOTUwLDcgKzk1MSw3IEBAIGFkZF9jdXN0b21fY29tbWFuZCgKKyBhZGRfY3VzdG9tX2NvbW1hbmQoCisgICAgIE9VVFBVVCAke0NNQUtFX0JJTkFSWV9ESVJ9L1dlYktpdDJXZWJFeHRlbnNpb24tJHtXRUJLSVRHVEtfQVBJX1ZFUlNJT059LmdpcgorICAgICBERVBFTkRTICR7Q01BS0VfQklOQVJZX0RJUn0vSmF2YVNjcmlwdENvcmUtJHtXRUJLSVRHVEtfQVBJX1ZFUlNJT059LmdpcgorLSAgICBERVBFTkRTICR7Q01BS0VfQklOQVJZX0RJUn0vV2ViS2l0Mi0ke1dFQktJVEdUS19BUElfVkVSU0lPTn0uZ2lyCisrICAgIERFUEVORFMgV2ViS2l0Mi0ke1dFQktJVEdUS19BUElfVkVSU0lPTn0tZ2lyCisgICAgIENPTU1BTkQgQ0M9JHtDTUFLRV9DX0NPTVBJTEVSfSBDRkxBR1M9LVduby1kZXByZWNhdGVkLWRlY2xhcmF0aW9uc1wgJHtDTUFLRV9DX0ZMQUdTfQorICAgICAgICAgTERGTEFHUz0iJHtJTlRST1NQRUNUSU9OX0FERElUSU9OQUxfTERGTEFHU30iCisgICAgICAgICAke0xPQURFUl9MSUJSQVJZX1BBVEhfVkFSfT0iJHtJTlRST1NQRUNUSU9OX0FERElUSU9OQUxfTElCUkFSWV9QQVRIfSIKK0BAIC0xMDA0LDcgKzEwMDUsNyBAQCBhZGRfY3VzdG9tX2NvbW1hbmQoCisgCisgYWRkX2N1c3RvbV9jb21tYW5kKAorICAgICBPVVRQVVQgJHtDTUFLRV9CSU5BUllfRElSfS9XZWJLaXQyLSR7V0VCS0lUR1RLX0FQSV9WRVJTSU9OfS50eXBlbGliCistICAgIERFUEVORFMgJHtDTUFLRV9CSU5BUllfRElSfS9XZWJLaXQyLSR7V0VCS0lUR1RLX0FQSV9WRVJTSU9OfS5naXIKKysgICAgREVQRU5EUyBXZWJLaXQyLSR7V0VCS0lUR1RLX0FQSV9WRVJTSU9OfS1naXIKKyAgICAgQ09NTUFORCAke0lOVFJPU1BFQ1RJT05fQ09NUElMRVJ9IC0taW5jbHVkZWRpcj0ke0NNQUtFX0JJTkFSWV9ESVJ9ICR7Q01BS0VfQklOQVJZX0RJUn0vV2ViS2l0Mi0ke1dFQktJVEdUS19BUElfVkVSU0lPTn0uZ2lyIC1vICR7Q01BS0VfQklOQVJZX0RJUn0vV2ViS2l0Mi0ke1dFQktJVEdUS19BUElfVkVSU0lPTn0udHlwZWxpYgorICkKKyAKKy0tIAorMi45LjMKKwpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zYXRvL3dlYmtpdC9maWxlcy8wMDAxLU9wdGlvbnNHVEsuY21ha2UtZHJvcC10aGUtaGFyZGNvZGVkLWludHJvc3BlY3Rpb24tZ3QucGF0Y2ggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXNhdG8vd2Via2l0L2ZpbGVzLzAwMDEtT3B0aW9uc0dUSy5jbWFrZS1kcm9wLXRoZS1oYXJkY29kZWQtaW50cm9zcGVjdGlvbi1ndC5wYXRjaAppbmRleCAzZDAwNGRiLi45M2E2OWMwIDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXNhdG8vd2Via2l0L2ZpbGVzLzAwMDEtT3B0aW9uc0dUSy5jbWFrZS1kcm9wLXRoZS1oYXJkY29kZWQtaW50cm9zcGVjdGlvbi1ndC5wYXRjaAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXNhdG8vd2Via2l0L2ZpbGVzLzAwMDEtT3B0aW9uc0dUSy5jbWFrZS1kcm9wLXRoZS1oYXJkY29kZWQtaW50cm9zcGVjdGlvbi1ndC5wYXRjaApAQCAtMTMsMTEgKzEzLDExIEBACiAgU291cmNlL2NtYWtlL09wdGlvbnNHVEsuY21ha2UgfCA2IC0tLS0tLQogIDEgZmlsZSBjaGFuZ2VkLCA2IGRlbGV0aW9ucygtKQogCi1kaWZmIC0tZ2l0IGEvU291cmNlL2NtYWtlL09wdGlvbnNHVEsuY21ha2UgYi9Tb3VyY2UvY21ha2UvT3B0aW9uc0dUSy5jbWFrZQotaW5kZXggZTVmMWY1Yi4uNDY5ODAzNiAxMDA2NDQKLS0tLSBhL1NvdXJjZS9jbWFrZS9PcHRpb25zR1RLLmNtYWtlCi0rKysgYi9Tb3VyY2UvY21ha2UvT3B0aW9uc0dUSy5jbWFrZQotQEAgLTQ0MywxMiArNDQzLDYgQEAgaWYgKFVTRV9MSUJIWVBIRU4pCitJbmRleDogd2Via2l0Z3RrLTIuMTIuMS9Tb3VyY2UvY21ha2UvT3B0aW9uc0dUSy5jbWFrZQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIHdlYmtpdGd0ay0yLjEyLjEub3JpZy9Tb3VyY2UvY21ha2UvT3B0aW9uc0dUSy5jbWFrZQorKysrIHdlYmtpdGd0ay0yLjEyLjEvU291cmNlL2NtYWtlL09wdGlvbnNHVEsuY21ha2UKK0BAIC00MjQsMTIgKzQyNCw2IEBAIGlmIChVU0VfTElCSFlQSEVOKQogICAgICBlbmRpZiAoKQogIGVuZGlmICgpCiAgCkBAIC0yNyw5ICsyNyw2IEBACiAtICAgIHNldChFTkFCTEVfSU5UUk9TUEVDVElPTiBPRkYpCiAtZW5kaWYgKCkKIC0KLSBzZXQoREVSSVZFRF9TT1VSQ0VTX0dPQkpFQ1RfRE9NX0JJTkRJTkdTX0RJUiAke0RFUklWRURfU09VUkNFU19ESVJ9L3dlYmtpdGRvbSkKLSBzZXQoREVSSVZFRF9TT1VSQ0VTX1dFQktJVEdUS19ESVIgJHtERVJJVkVEX1NPVVJDRVNfRElSfS93ZWJraXRndGspCi0gc2V0KERFUklWRURfU09VUkNFU19XRUJLSVRHVEtfQVBJX0RJUiAke0RFUklWRURfU09VUkNFU19XRUJLSVRHVEtfRElSfS93ZWJraXQpCi0tLSAKLTIuNy4wCi0KKyAjIE92ZXJyaWRlIHRoZSBjYWNoZWQgdmFyaWFibGUsIGd0ay1kb2MgZG9lcyBub3QgcmVhbGx5IHdvcmsgd2hlbiBidWlsZGluZyBvbiBNYWMuCisgaWYgKEFQUExFKQorICAgICBzZXQoRU5BQkxFX0dUS0RPQyBPRkYpCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXNhdG8vd2Via2l0L2ZpbGVzLzAwMDEtVHdlYWstZ3RrZG9jLXNldHRpbmdzLXNvLXRoYXQtZ3RrZG9jLWdlbmVyYXRpb24td29yay5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc2F0by93ZWJraXQvZmlsZXMvMDAwMS1Ud2Vhay1ndGtkb2Mtc2V0dGluZ3Mtc28tdGhhdC1ndGtkb2MtZ2VuZXJhdGlvbi13b3JrLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU4NmRkMjMKLS0tIC9kZXYvbnVsbAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXNhdG8vd2Via2l0L2ZpbGVzLzAwMDEtVHdlYWstZ3RrZG9jLXNldHRpbmdzLXNvLXRoYXQtZ3RrZG9jLWdlbmVyYXRpb24td29yay5wYXRjaApAQCAtMCwwICsxLDQ5IEBACitGcm9tIDRlZWVhZWM3NzVlMTkwY2YzZjU4ODVkN2M2NzE3YWNlYmQwMjAxYTggTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBBbGV4YW5kZXIgS2FuYXZpbiA8YWxleC5rYW5hdmluQGdtYWlsLmNvbT4KK0RhdGU6IFRodSwgMTEgQXVnIDIwMTYgMTc6MTM6NTEgKzAzMDAKK1N1YmplY3Q6IFtQQVRDSF0gVHdlYWsgZ3RrZG9jIHNldHRpbmdzIHNvIHRoYXQgZ3RrZG9jIGdlbmVyYXRpb24gd29ya3MgdW5kZXIKKyBPcGVuRW1iZWRkZWQgYnVpbGQgc3lzdGVtCisKK1RoaXMgcmVxdWlyZXMgc2V0dGluZyBhIGZldyBlbnZpcm9ubWVudCB2YXJpYWJsZXMgc28gdGhhdCB0aGUgdHJhbnNpZW50CitiaW5hcnkgaXMgYnVpbGQgYW5kIGxpbmtlZCBjb3JyZWN0bHksIGFuZCBkaXNhYmxpbmcgdGhlIHR3ZWFrcyB0byBSVU4KK3ZhcmlhYmxlIGZyb20gZ3RrZG9jLnB5IHNjcmlwdCBzbyB0aGF0IG91ciBxZW11IHdyYXBwZXIgaXMgdGFrZW4gaW50byB1c2UuCisKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbb2Utc3BlY2lmaWNdCitTaWduZWQtb2ZmLWJ5OiBBbGV4YW5kZXIgS2FuYXZpbiA8YWxleC5rYW5hdmluQGdtYWlsLmNvbT4KKy0tLQorIFNvdXJjZS9QbGF0Zm9ybUdUSy5jbWFrZSB8IDIgKy0KKyBUb29scy9ndGsvZ3RrZG9jLnB5ICAgICAgfCA0ICsrLS0KKyAyIGZpbGVzIGNoYW5nZWQsIDMgaW5zZXJ0aW9ucygrKSwgMyBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL1NvdXJjZS9QbGF0Zm9ybUdUSy5jbWFrZSBiL1NvdXJjZS9QbGF0Zm9ybUdUSy5jbWFrZQoraW5kZXggYWY0ZDJlMy4uYjdiOTNjNyAxMDA2NDQKKy0tLSBhL1NvdXJjZS9QbGF0Zm9ybUdUSy5jbWFrZQorKysrIGIvU291cmNlL1BsYXRmb3JtR1RLLmNtYWtlCitAQCAtMjUsNyArMjUsNyBAQCBtYWNybyhBRERfR1RLRE9DX0dFTkVSQVRPUiBfc3RhbXBfbmFtZSBfZXh0cmFfYXJncykKKyAgICAgYWRkX2N1c3RvbV9jb21tYW5kKAorICAgICAgICAgT1VUUFVUICIke0NNQUtFX0JJTkFSWV9ESVJ9LyR7X3N0YW1wX25hbWV9IgorICAgICAgICAgREVQRU5EUyAke0RvY3VtZW50YXRpb25EZXBlbmRlbmNpZXN9CistICAgICAgICBDT01NQU5EIENDPSR7Q01BS0VfQ19DT01QSUxFUn0gQ0ZMQUdTPSR7Q01BS0VfQ19GTEFHU30gJHtDTUFLRV9TT1VSQ0VfRElSfS9Ub29scy9ndGsvZ2VuZXJhdGUtZ3RrZG9jICR7X2V4dHJhX2FyZ3N9CisrICAgICAgICBDT01NQU5EIENDPSR7Q01BS0VfQ19DT01QSUxFUn0gQ0ZMQUdTPSR7Q01BS0VfQ19GTEFHU30gTEQ9JHtDTUFLRV9DX0NPTVBJTEVSfSBMREZMQUdTPSR7Q01BS0VfQ19MSU5LX0ZMQUdTfSBSVU49JHtDTUFLRV9CSU5BUllfRElSfS9ndGtkb2MtcWVtdXdyYXBwZXIgR0lSX0VYVFJBX0xJQlNfUEFUSD0ke0NNQUtFX0JJTkFSWV9ESVJ9L2xpYiAke0NNQUtFX1NPVVJDRV9ESVJ9L1Rvb2xzL2d0ay9nZW5lcmF0ZS1ndGtkb2MgJHtfZXh0cmFfYXJnc30KKyAgICAgICAgIENPTU1BTkQgdG91Y2ggJHtfc3RhbXBfbmFtZX0KKyAgICAgICAgIFdPUktJTkdfRElSRUNUT1JZICIke0NNQUtFX0JJTkFSWV9ESVJ9IgorICAgICApCitkaWZmIC0tZ2l0IGEvVG9vbHMvZ3RrL2d0a2RvYy5weSBiL1Rvb2xzL2d0ay9ndGtkb2MucHkKK2luZGV4IDRjODIzN2IuLmMwMjA1ZjAgMTAwNjQ0CistLS0gYS9Ub29scy9ndGsvZ3RrZG9jLnB5CisrKysgYi9Ub29scy9ndGsvZ3RrZG9jLnB5CitAQCAtMzE4LDkgKzMxOCw5IEBAIGNsYXNzIEdUS0RvYyhvYmplY3QpOgorICAgICAgICAgICAgICAgICAgICAgYWRkaXRpb25hbF9sZGZsYWdzID0gJyVzICVzJyAlIChhZGRpdGlvbmFsX2xkZmxhZ3MsIGFyZykKKyAgICAgICAgICAgICBsZGZsYWdzID0gJyAiLUwlcyIgJXMgJyAlIChzZWxmLmxpYnJhcnlfcGF0aCwgYWRkaXRpb25hbF9sZGZsYWdzKSArIGxkZmxhZ3MKKyAgICAgICAgICAgICBjdXJyZW50X2xkX2xpYnJhcnlfcGF0aCA9IGVudi5nZXQoJ0xEX0xJQlJBUllfUEFUSCcpCistICAgICAgICAgICAgaWYgY3VycmVudF9sZF9saWJyYXJ5X3BhdGg6CisrICAgICAgICAgICAgaWYgY3VycmVudF9sZF9saWJyYXJ5X3BhdGggYW5kICdSVU4nIG5vdCBpbiBlbnY6CisgICAgICAgICAgICAgICAgIGVudlsnUlVOJ10gPSAnTERfTElCUkFSWV9QQVRIPSIlczolcyIgJyAlIChzZWxmLmxpYnJhcnlfcGF0aCwgY3VycmVudF9sZF9saWJyYXJ5X3BhdGgpCistICAgICAgICAgICAgZWxzZToKKysgICAgICAgICAgICBlbGlmICdSVU4nIG5vdCBpbiBlbnY6CisgICAgICAgICAgICAgICAgIGVudlsnUlVOJ10gPSAnTERfTElCUkFSWV9QQVRIPSIlcyIgJyAlIHNlbGYubGlicmFyeV9wYXRoCisgCisgICAgICAgICBpZiBsZGZsYWdzOgorLS0gCisyLjguMQorCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXNhdG8vd2Via2l0L2ZpbGVzLzAwMDEtV2ViS2l0TWFjcm9zLUFwcGVuZC10by1JLWFuZC1ub3QtdG8taXN5c3RlbS5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc2F0by93ZWJraXQvZmlsZXMvMDAwMS1XZWJLaXRNYWNyb3MtQXBwZW5kLXRvLUktYW5kLW5vdC10by1pc3lzdGVtLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI1YjNjOWYKLS0tIC9kZXYvbnVsbAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXNhdG8vd2Via2l0L2ZpbGVzLzAwMDEtV2ViS2l0TWFjcm9zLUFwcGVuZC10by1JLWFuZC1ub3QtdG8taXN5c3RlbS5wYXRjaApAQCAtMCwwICsxLDIyMyBAQAorRnJvbSA1M2EwMDA1ODE4NGNkNzEwYzZmNDM3NWY0ZGFhYjQ5ZDdlODg1YTMwIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KK0RhdGU6IFN1biwgMTcgQXByIDIwMTYgMTI6MzU6NDEgLTA3MDAKK1N1YmplY3Q6IFtQQVRDSF0gV2ViS2l0TWFjcm9zOiBBcHBlbmQgdG8gLUkgYW5kIG5vdCB0byAtaXN5c3RlbQorCitnY2MtNiBoYXMgbm93IGludHJvZHVjZWQgc3RkbGliLmggaW4gbGlic3RkYysrIGZvciBiZXR0ZXIKK2NvbXBsaWFuY2UgYW5kIGl0cyBpbmNsdWRpbmcgdGhlIEMgbGlicmFyeSBzdGRsaWIuaCB1c2luZworaW5jbHVkZV9uZXh0IHdoaWNoIGlzIHNlbnNpdGl2ZSB0byBvcmRlciBvZiBzeXN0ZW0gaGVhZGVyCitpbmNsdWRlIHBhdGhzLiBJdHMgaW5mYWN0IGJldHRlciB0byBub3QgdGlua2VyIHdpdGggdGhlCitzeXN0ZW0gaGVhZGVyIGluY2x1ZGUgcGF0aHMgYXQgYWxsLiBTaW5jZSBhZGRpbmcgL3Vzci9pbmNsdWRlCit0byAtc3lzdGVtIGlzIHJlZHVuZGFudCBhbmQgY29tcGlsZXIga25vd3MgYWJvdXQgaXQgbW9yZW92ZXIKK25vdyB3aXRoIGdjYzYgaXQgaW50ZXJmZXJlcyB3aXRoIGNvbXBpbGVyJ3MgZnVuY3Rpb25pbmcKK2FuZCBlbmRzIHVwIHdpdGggY29tcGlsZSBlcnJvcnMgZS5nLgorCisvdXNyL2luY2x1ZGUvYysrLzYuMC4wL2NzdGRsaWI6NzU6MjU6IGZhdGFsIGVycm9yOiBzdGRsaWIuaDogTm8gc3VjaCBmaWxlIG9yIGRpcmVjdG9yeQorCitTaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorLS0tCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworIFNvdXJjZS9jbWFrZS9XZWJLaXRNYWNyb3MuY21ha2UgfCAyICstCisgMSBmaWxlIGNoYW5nZWQsIDEgaW5zZXJ0aW9uKCspLCAxIGRlbGV0aW9uKC0pCisKK0luZGV4OiB3ZWJraXRndGstMi4xMi4xL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dAorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIHdlYmtpdGd0ay0yLjEyLjEub3JpZy9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQ01ha2VMaXN0cy50eHQKKysrKyB3ZWJraXRndGstMi4xMi4xL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dAorQEAgLTEzMTEsNyArMTMxMSw3IEBAIGFkZF9zdWJkaXJlY3Rvcnkoc2hlbGwpCisgCisgV0VCS0lUX1dSQVBfU09VUkNFTElTVCgke0phdmFTY3JpcHRDb3JlX1NPVVJDRVN9KQorIGluY2x1ZGVfZGlyZWN0b3JpZXMoJHtKYXZhU2NyaXB0Q29yZV9JTkNMVURFX0RJUkVDVE9SSUVTfSkKKy1pbmNsdWRlX2RpcmVjdG9yaWVzKFNZU1RFTSAke0phdmFTY3JpcHRDb3JlX1NZU1RFTV9JTkNMVURFX0RJUkVDVE9SSUVTfSkKKytpbmNsdWRlX2RpcmVjdG9yaWVzKCR7SmF2YVNjcmlwdENvcmVfU1lTVEVNX0lOQ0xVREVfRElSRUNUT1JJRVN9KQorIGFkZF9saWJyYXJ5KEphdmFTY3JpcHRDb3JlICR7SmF2YVNjcmlwdENvcmVfTElCUkFSWV9UWVBFfSAke0phdmFTY3JpcHRDb3JlX0hFQURFUlN9ICR7SmF2YVNjcmlwdENvcmVfU09VUkNFU30pCisgdGFyZ2V0X2xpbmtfbGlicmFyaWVzKEphdmFTY3JpcHRDb3JlICR7SmF2YVNjcmlwdENvcmVfTElCUkFSSUVTfSkKKyBzZXRfdGFyZ2V0X3Byb3BlcnRpZXMoSmF2YVNjcmlwdENvcmUgUFJPUEVSVElFUyBDT01QSUxFX0RFRklOSVRJT05TICJCVUlMRElOR19KYXZhU2NyaXB0Q29yZSIpCitJbmRleDogd2Via2l0Z3RrLTIuMTIuMS9Tb3VyY2UvV1RGL3d0Zi9DTWFrZUxpc3RzLnR4dAorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIHdlYmtpdGd0ay0yLjEyLjEub3JpZy9Tb3VyY2UvV1RGL3d0Zi9DTWFrZUxpc3RzLnR4dAorKysrIHdlYmtpdGd0ay0yLjEyLjEvU291cmNlL1dURi93dGYvQ01ha2VMaXN0cy50eHQKK0BAIC0yODYsNyArMjg2LDcgQEAgV0VCS0lUX0lOQ0xVREVfQ09ORklHX0ZJTEVTX0lGX0VYSVNUUygpCisgCisgV0VCS0lUX1dSQVBfU09VUkNFTElTVCgke1dURl9TT1VSQ0VTfSkKKyBpbmNsdWRlX2RpcmVjdG9yaWVzKCR7V1RGX0lOQ0xVREVfRElSRUNUT1JJRVN9KQorLWluY2x1ZGVfZGlyZWN0b3JpZXMoU1lTVEVNICR7V1RGX1NZU1RFTV9JTkNMVURFX0RJUkVDVE9SSUVTfSkKKytpbmNsdWRlX2RpcmVjdG9yaWVzKCR7V1RGX1NZU1RFTV9JTkNMVURFX0RJUkVDVE9SSUVTfSkKKyBhZGRfbGlicmFyeShXVEYgJHtXVEZfTElCUkFSWV9UWVBFfSAke1dURl9IRUFERVJTfSAke1dURl9TT1VSQ0VTfSkKKyB0YXJnZXRfbGlua19saWJyYXJpZXMoV1RGICR7V1RGX0xJQlJBUklFU30pCisgc2V0X3RhcmdldF9wcm9wZXJ0aWVzKFdURiBQUk9QRVJUSUVTIENPTVBJTEVfREVGSU5JVElPTlMgIkJVSUxESU5HX1dURiIpCitJbmRleDogd2Via2l0Z3RrLTIuMTIuMS9Tb3VyY2UvV2ViQ29yZS9DTWFrZUxpc3RzLnR4dAorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIHdlYmtpdGd0ay0yLjEyLjEub3JpZy9Tb3VyY2UvV2ViQ29yZS9DTWFrZUxpc3RzLnR4dAorKysrIHdlYmtpdGd0ay0yLjEyLjEvU291cmNlL1dlYkNvcmUvQ01ha2VMaXN0cy50eHQKK0BAIC0zNzQ4LDcgKzM3NDgsNyBAQCBXRUJLSVRfV1JBUF9TT1VSQ0VMSVNUKCR7V2ViQ29yZV9JRExfRklMCisgV0VCS0lUX1dSQVBfU09VUkNFTElTVCgke1dlYkNvcmVUZXN0U3VwcG9ydF9JRExfRklMRVN9ICR7V2ViQ29yZVRlc3RTdXBwb3J0X1NPVVJDRVN9KQorIAorIGluY2x1ZGVfZGlyZWN0b3JpZXMoJHtXZWJDb3JlX0lOQ0xVREVfRElSRUNUT1JJRVN9ICR7V2ViQ29yZVRlc3RTdXBwb3J0X0lOQ0xVREVfRElSRUNUT1JJRVN9KQorLWluY2x1ZGVfZGlyZWN0b3JpZXMoU1lTVEVNICR7V2ViQ29yZV9TWVNURU1fSU5DTFVERV9ESVJFQ1RPUklFU30pCisraW5jbHVkZV9kaXJlY3Rvcmllcygke1dlYkNvcmVfU1lTVEVNX0lOQ0xVREVfRElSRUNUT1JJRVN9KQorIAorIGlmIChNU1ZDKQorICAgICBBRERfUFJFQ09NUElMRURfSEVBREVSKCJXZWJDb3JlUHJlZml4LmgiICJXZWJDb3JlUHJlZml4LmNwcCIgV2ViQ29yZV9TT1VSQ0VTKQorSW5kZXg6IHdlYmtpdGd0ay0yLjEyLjEvU291cmNlL1dlYktpdC9DTWFrZUxpc3RzLnR4dAorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIHdlYmtpdGd0ay0yLjEyLjEub3JpZy9Tb3VyY2UvV2ViS2l0L0NNYWtlTGlzdHMudHh0CisrKysgd2Via2l0Z3RrLTIuMTIuMS9Tb3VyY2UvV2ViS2l0L0NNYWtlTGlzdHMudHh0CitAQCAtMjgsNyArMjgsNyBAQCBzZXQoV2ViS2l0X0xJQlJBUklFUworIFdFQktJVF9JTkNMVURFX0NPTkZJR19GSUxFU19JRl9FWElTVFMoKQorIAorIGluY2x1ZGVfZGlyZWN0b3JpZXMoJHtXZWJLaXRfSU5DTFVERV9ESVJFQ1RPUklFU30pCistaW5jbHVkZV9kaXJlY3RvcmllcyhTWVNURU0gJHtXZWJLaXRfU1lTVEVNX0lOQ0xVREVfRElSRUNUT1JJRVN9KQorK2luY2x1ZGVfZGlyZWN0b3JpZXMoJHtXZWJLaXRfU1lTVEVNX0lOQ0xVREVfRElSRUNUT1JJRVN9KQorIAorIGlmIChNU1ZDKQorICAgICBBRERfUFJFQ09NUElMRURfSEVBREVSKCJXZWJLaXRQcmVmaXguaCIgIndpbi9XZWJLaXRQcmVmaXguY3BwIiBXZWJLaXRfU09VUkNFUykKK0luZGV4OiB3ZWJraXRndGstMi4xMi4xL1NvdXJjZS9XZWJLaXQyL0NNYWtlTGlzdHMudHh0Cis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gd2Via2l0Z3RrLTIuMTIuMS5vcmlnL1NvdXJjZS9XZWJLaXQyL0NNYWtlTGlzdHMudHh0CisrKysgd2Via2l0Z3RrLTIuMTIuMS9Tb3VyY2UvV2ViS2l0Mi9DTWFrZUxpc3RzLnR4dAorQEAgLTc1Niw3ICs3NTYsNyBAQCBXRUJLSVRfSU5DTFVERV9DT05GSUdfRklMRVNfSUZfRVhJU1RTKCkKKyBHRU5FUkFURV9XRUJLSVQyX01FU1NBR0VfU09VUkNFUyhXZWJLaXQyX0RFUklWRURfU09VUkNFUyAiJHtXZWJLaXQyX01FU1NBR0VTX0lOX0ZJTEVTfSIpCisgCisgaW5jbHVkZV9kaXJlY3Rvcmllcygke1dlYktpdDJfSU5DTFVERV9ESVJFQ1RPUklFU30pCistaW5jbHVkZV9kaXJlY3RvcmllcyhTWVNURU0gJHtXZWJLaXQyX1NZU1RFTV9JTkNMVURFX0RJUkVDVE9SSUVTfSkKKytpbmNsdWRlX2RpcmVjdG9yaWVzKCR7V2ViS2l0Ml9TWVNURU1fSU5DTFVERV9ESVJFQ1RPUklFU30pCisgYWRkX2xpYnJhcnkoV2ViS2l0MiAke1dlYktpdDJfTElCUkFSWV9UWVBFfSAke1dlYktpdDJfU09VUkNFU30gJHtXZWJLaXQyX0RFUklWRURfU09VUkNFU30pCisgCisgYWRkX2RlcGVuZGVuY2llcyhXZWJLaXQyIFdlYkNvcmUgJHtXRUJLSVQyX0VYVFJBX0RFUEVOREVOQ0lFU30pCitJbmRleDogd2Via2l0Z3RrLTIuMTIuMS9Ub29scy9EdW1wUmVuZGVyVHJlZS9UZXN0TmV0c2NhcGVQbHVnSW4vQ01ha2VMaXN0cy50eHQKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSB3ZWJraXRndGstMi4xMi4xLm9yaWcvVG9vbHMvRHVtcFJlbmRlclRyZWUvVGVzdE5ldHNjYXBlUGx1Z0luL0NNYWtlTGlzdHMudHh0CisrKysgd2Via2l0Z3RrLTIuMTIuMS9Ub29scy9EdW1wUmVuZGVyVHJlZS9UZXN0TmV0c2NhcGVQbHVnSW4vQ01ha2VMaXN0cy50eHQKK0BAIC00Miw3ICs0Miw3IEBAIHNldChXZWJLaXRUZXN0TmV0c2NhcGVQbHVnaW5fU1lTVEVNX0lOQ0wKKyApCisgCisgaW5jbHVkZV9kaXJlY3Rvcmllcygke1dlYktpdFRlc3ROZXRzY2FwZVBsdWdpbl9JTkNMVURFX0RJUkVDVE9SSUVTfSkKKy1pbmNsdWRlX2RpcmVjdG9yaWVzKFNZU1RFTSAke1dlYktpdFRlc3ROZXRzY2FwZVBsdWdpbl9TWVNURU1fSU5DTFVERV9ESVJFQ1RPUklFU30pCisraW5jbHVkZV9kaXJlY3Rvcmllcygke1dlYktpdFRlc3ROZXRzY2FwZVBsdWdpbl9TWVNURU1fSU5DTFVERV9ESVJFQ1RPUklFU30pCisgCisgc2V0KFdlYktpdFRlc3ROZXRzY2FwZVBsdWdpbl9MSUJSQVJJRVMKKyAgICAgJHtYMTFfTElCUkFSSUVTfQorSW5kZXg6IHdlYmtpdGd0ay0yLjEyLjEvVG9vbHMvSW1hZ2VEaWZmL0NNYWtlTGlzdHMudHh0Cis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gd2Via2l0Z3RrLTIuMTIuMS5vcmlnL1Rvb2xzL0ltYWdlRGlmZi9DTWFrZUxpc3RzLnR4dAorKysrIHdlYmtpdGd0ay0yLjEyLjEvVG9vbHMvSW1hZ2VEaWZmL0NNYWtlTGlzdHMudHh0CitAQCAtMTQsNyArMTQsNyBAQCBzZXQoSU1BR0VfRElGRl9MSUJSQVJJRVMKKyBXRUJLSVRfSU5DTFVERV9DT05GSUdfRklMRVNfSUZfRVhJU1RTKCkKKyAKKyBpbmNsdWRlX2RpcmVjdG9yaWVzKCR7SU1BR0VfRElGRl9JTkNMVURFX0RJUkVDVE9SSUVTfSkKKy1pbmNsdWRlX2RpcmVjdG9yaWVzKFNZU1RFTSAke0lNQUdFX0RJRkZfU1lTVEVNX0lOQ0xVREVfRElSRUNUT1JJRVN9KQorK2luY2x1ZGVfZGlyZWN0b3JpZXMoJHtJTUFHRV9ESUZGX1NZU1RFTV9JTkNMVURFX0RJUkVDVE9SSUVTfSkKKyBhZGRfZXhlY3V0YWJsZShJbWFnZURpZmYgJHtJTUFHRV9ESUZGX1NPVVJDRVN9KQorIHRhcmdldF9saW5rX2xpYnJhcmllcyhJbWFnZURpZmYgJHtJTUFHRV9ESUZGX0xJQlJBUklFU30pCisgc2V0X3RhcmdldF9wcm9wZXJ0aWVzKEltYWdlRGlmZiBQUk9QRVJUSUVTIEZPTERFUiAiVG9vbHMiKQorSW5kZXg6IHdlYmtpdGd0ay0yLjEyLjEvVG9vbHMvTWluaUJyb3dzZXIvZ3RrL0NNYWtlTGlzdHMudHh0Cis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gd2Via2l0Z3RrLTIuMTIuMS5vcmlnL1Rvb2xzL01pbmlCcm93c2VyL2d0ay9DTWFrZUxpc3RzLnR4dAorKysrIHdlYmtpdGd0ay0yLjEyLjEvVG9vbHMvTWluaUJyb3dzZXIvZ3RrL0NNYWtlTGlzdHMudHh0CitAQCAtNTUsNyArNTUsNyBAQCBlbmRpZiAoKQorIGFkZF9kZWZpbml0aW9ucygtREdES19WRVJTSU9OX01JTl9SRVFVSVJFRD1HREtfVkVSU0lPTl8zXzYpCisgCisgaW5jbHVkZV9kaXJlY3Rvcmllcygke01pbmlCcm93c2VyX0lOQ0xVREVfRElSRUNUT1JJRVN9KQorLWluY2x1ZGVfZGlyZWN0b3JpZXMoU1lTVEVNICR7TWluaUJyb3dzZXJfU1lTVEVNX0lOQ0xVREVfRElSRUNUT1JJRVN9KQorK2luY2x1ZGVfZGlyZWN0b3JpZXMoJHtNaW5pQnJvd3Nlcl9TWVNURU1fSU5DTFVERV9ESVJFQ1RPUklFU30pCisgYWRkX2V4ZWN1dGFibGUoTWluaUJyb3dzZXIgJHtNaW5pQnJvd3Nlcl9TT1VSQ0VTfSkKKyB0YXJnZXRfbGlua19saWJyYXJpZXMoTWluaUJyb3dzZXIgJHtNaW5pQnJvd3Nlcl9MSUJSQVJJRVN9KQorIHNldF90YXJnZXRfcHJvcGVydGllcyhNaW5pQnJvd3NlciBQUk9QRVJUSUVTIEZPTERFUiAiVG9vbHMiKQorSW5kZXg6IHdlYmtpdGd0ay0yLjEyLjEvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9DTWFrZUxpc3RzLnR4dAorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIHdlYmtpdGd0ay0yLjEyLjEub3JpZy9Ub29scy9XZWJLaXRUZXN0UnVubmVyL0NNYWtlTGlzdHMudHh0CisrKysgd2Via2l0Z3RrLTIuMTIuMS9Ub29scy9XZWJLaXRUZXN0UnVubmVyL0NNYWtlTGlzdHMudHh0CitAQCAtMTE1LDcgKzExNSw3IEBAIEdFTkVSQVRFX0JJTkRJTkdTKFdlYktpdFRlc3RSdW5uZXJfU09VUkMKKyBXRUJLSVRfSU5DTFVERV9DT05GSUdfRklMRVNfSUZfRVhJU1RTKCkKKyAKKyBpbmNsdWRlX2RpcmVjdG9yaWVzKCR7V2ViS2l0VGVzdFJ1bm5lcl9JTkNMVURFX0RJUkVDVE9SSUVTfSkKKy1pbmNsdWRlX2RpcmVjdG9yaWVzKFNZU1RFTSAke1dlYktpdFRlc3RSdW5uZXJfU1lTVEVNX0lOQ0xVREVfRElSRUNUT1JJRVN9KQorK2luY2x1ZGVfZGlyZWN0b3JpZXMoJHtXZWJLaXRUZXN0UnVubmVyX1NZU1RFTV9JTkNMVURFX0RJUkVDVE9SSUVTfSkKKyAKKyBhZGRfbGlicmFyeShUZXN0UnVubmVySW5qZWN0ZWRCdW5kbGUgU0hBUkVEICR7V2ViS2l0VGVzdFJ1bm5lckluamVjdGVkQnVuZGxlX1NPVVJDRVN9KQorIHRhcmdldF9saW5rX2xpYnJhcmllcyhUZXN0UnVubmVySW5qZWN0ZWRCdW5kbGUgJHtXZWJLaXRUZXN0UnVubmVyX0xJQlJBUklFU30pCitJbmRleDogd2Via2l0Z3RrLTIuMTIuMS9Tb3VyY2UvV2ViQ29yZS9QbGF0Zm9ybUdUSy5jbWFrZQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIHdlYmtpdGd0ay0yLjEyLjEub3JpZy9Tb3VyY2UvV2ViQ29yZS9QbGF0Zm9ybUdUSy5jbWFrZQorKysrIHdlYmtpdGd0ay0yLjEyLjEvU291cmNlL1dlYkNvcmUvUGxhdGZvcm1HVEsuY21ha2UKK0BAIC0zMjQsNyArMzI0LDcgQEAgaWYgKEVOQUJMRV9QTFVHSU5fUFJPQ0VTU19HVEsyKQorICAgICAgICAgJHtHVEsyX0lOQ0xVREVfRElSU30KKyAgICAgICAgICR7R0RLMl9JTkNMVURFX0RJUlN9CisgICAgICkKKy0gICAgdGFyZ2V0X2luY2x1ZGVfZGlyZWN0b3JpZXMoV2ViQ29yZVBsYXRmb3JtR1RLMiBTWVNURU0gUFJJVkFURQorKyAgICB0YXJnZXRfaW5jbHVkZV9kaXJlY3RvcmllcyhXZWJDb3JlUGxhdGZvcm1HVEsyIFBSSVZBVEUKKyAgICAgICAgICR7V2ViQ29yZV9TWVNURU1fSU5DTFVERV9ESVJFQ1RPUklFU30KKyAgICAgKQorICAgICB0YXJnZXRfbGlua19saWJyYXJpZXMoV2ViQ29yZVBsYXRmb3JtR1RLMgorQEAgLTM2Niw3ICszNjYsNyBAQCBXRUJLSVRfU0VUX0VYVFJBX0NPTVBJTEVSX0ZMQUdTKFdlYkNvcmVQCisgdGFyZ2V0X2luY2x1ZGVfZGlyZWN0b3JpZXMoV2ViQ29yZVBsYXRmb3JtR1RLIFBSSVZBVEUKKyAgICAgJHtXZWJDb3JlX0lOQ0xVREVfRElSRUNUT1JJRVN9CisgKQorLXRhcmdldF9pbmNsdWRlX2RpcmVjdG9yaWVzKFdlYkNvcmVQbGF0Zm9ybUdUSyBTWVNURU0gUFJJVkFURQorK3RhcmdldF9pbmNsdWRlX2RpcmVjdG9yaWVzKFdlYkNvcmVQbGF0Zm9ybUdUSyBQUklWQVRFCisgICAgICR7V2ViQ29yZV9TWVNURU1fSU5DTFVERV9ESVJFQ1RPUklFU30KKyAgICAgJHtHVEtfSU5DTFVERV9ESVJTfQorICAgICAke0dES19JTkNMVURFX0RJUlN9CitAQCAtMzg0LDcgKzM4NCw3IEBAIGluY2x1ZGVfZGlyZWN0b3JpZXMoCisgICAgICIke0RFUklWRURfU09VUkNFU19HT0JKRUNUX0RPTV9CSU5ESU5HU19ESVJ9IgorICkKKyAKKy1pbmNsdWRlX2RpcmVjdG9yaWVzKFNZU1RFTQorK2luY2x1ZGVfZGlyZWN0b3JpZXMoCisgICAgICR7V2ViQ29yZV9TWVNURU1fSU5DTFVERV9ESVJFQ1RPUklFU30KKyApCisgCitJbmRleDogd2Via2l0Z3RrLTIuMTIuMS9Ub29scy9UZXN0V2ViS2l0QVBJL1BsYXRmb3JtR1RLLmNtYWtlCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gd2Via2l0Z3RrLTIuMTIuMS5vcmlnL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvUGxhdGZvcm1HVEsuY21ha2UKKysrKyB3ZWJraXRndGstMi4xMi4xL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvUGxhdGZvcm1HVEsuY21ha2UKK0BAIC0yMCw3ICsyMCw3IEBAIGluY2x1ZGVfZGlyZWN0b3JpZXMoCisgICAgICR7V0VCS0lUMl9ESVJ9L1VJUHJvY2Vzcy9BUEkvZ3RrCisgKQorIAorLWluY2x1ZGVfZGlyZWN0b3JpZXMoU1lTVEVNCisraW5jbHVkZV9kaXJlY3RvcmllcygKKyAgICAgJHtHREszX0lOQ0xVREVfRElSU30KKyAgICAgJHtHTElCX0lOQ0xVREVfRElSU30KKyAgICAgJHtHVEszX0lOQ0xVREVfRElSU30KK0luZGV4OiB3ZWJraXRndGstMi4xMi4xL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Mkd0ay9DTWFrZUxpc3RzLnR4dAorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIHdlYmtpdGd0ay0yLjEyLjEub3JpZy9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdDJHdGsvQ01ha2VMaXN0cy50eHQKKysrKyB3ZWJraXRndGstMi4xMi4xL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Mkd0ay9DTWFrZUxpc3RzLnR4dAorQEAgLTIzLDcgKzIzLDcgQEAgaW5jbHVkZV9kaXJlY3RvcmllcygKKyAgICAgJHtUT09MU19ESVJ9L1Rlc3RXZWJLaXRBUEkvZ3RrL1dlYktpdDJHdGsKKyApCisgCistaW5jbHVkZV9kaXJlY3RvcmllcyhTWVNURU0KKytpbmNsdWRlX2RpcmVjdG9yaWVzKAorICAgICAke0FUU1BJX0lOQ0xVREVfRElSU30KKyAgICAgJHtHTElCX0lOQ0xVREVfRElSU30KKyAgICAgJHtHU1RSRUFNRVJfSU5DTFVERV9ESVJTfQorSW5kZXg6IHdlYmtpdGd0ay0yLjEyLjEvU291cmNlL1dlYktpdDIvUGxhdGZvcm1HVEsuY21ha2UKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSB3ZWJraXRndGstMi4xMi4xLm9yaWcvU291cmNlL1dlYktpdDIvUGxhdGZvcm1HVEsuY21ha2UKKysrKyB3ZWJraXRndGstMi4xMi4xL1NvdXJjZS9XZWJLaXQyL1BsYXRmb3JtR1RLLmNtYWtlCitAQCAtODE2LDcgKzgxNiw3IEBAIGlmIChFTkFCTEVfUExVR0lOX1BST0NFU1NfR1RLMikKKyAgICAgdGFyZ2V0X2luY2x1ZGVfZGlyZWN0b3JpZXMoV2ViS2l0UGx1Z2luUHJvY2VzczIgUFJJVkFURQorICAgICAgICAgJHtXZWJLaXQyQ29tbW9uSW5jbHVkZURpcmVjdG9yaWVzfQorICAgICApCistICAgIHRhcmdldF9pbmNsdWRlX2RpcmVjdG9yaWVzKFdlYktpdFBsdWdpblByb2Nlc3MyIFNZU1RFTSBQUklWQVRFCisrICAgIHRhcmdldF9pbmNsdWRlX2RpcmVjdG9yaWVzKFdlYktpdFBsdWdpblByb2Nlc3MyIFBSSVZBVEUKKyAgICAgICAgICAke1dlYktpdDJDb21tb25TeXN0ZW1JbmNsdWRlRGlyZWN0b3JpZXN9CisgICAgICAgICAgJHtHVEsyX0lOQ0xVREVfRElSU30KKyAgICAgICAgICAke0dESzJfSU5DTFVERV9ESVJTfQorSW5kZXg6IHdlYmtpdGd0ay0yLjEyLjEvU291cmNlL0phdmFTY3JpcHRDb3JlL3NoZWxsL0NNYWtlTGlzdHMudHh0Cis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gd2Via2l0Z3RrLTIuMTIuMS5vcmlnL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9zaGVsbC9DTWFrZUxpc3RzLnR4dAorKysrIHdlYmtpdGd0ay0yLjEyLjEvU291cmNlL0phdmFTY3JpcHRDb3JlL3NoZWxsL0NNYWtlTGlzdHMudHh0CitAQCAtMjAsNyArMjAsNyBAQCBXRUJLSVRfSU5DTFVERV9DT05GSUdfRklMRVNfSUZfRVhJU1RTKCkKKyAKKyBXRUJLSVRfV1JBUF9TT1VSQ0VMSVNUKCR7SlNDX1NPVVJDRVN9KQorIGluY2x1ZGVfZGlyZWN0b3JpZXMoLi8gJHtKYXZhU2NyaXB0Q29yZV9JTkNMVURFX0RJUkVDVE9SSUVTfSkKKy1pbmNsdWRlX2RpcmVjdG9yaWVzKFNZU1RFTSAke0phdmFTY3JpcHRDb3JlX1NZU1RFTV9JTkNMVURFX0RJUkVDVE9SSUVTfSkKKytpbmNsdWRlX2RpcmVjdG9yaWVzKCR7SmF2YVNjcmlwdENvcmVfU1lTVEVNX0lOQ0xVREVfRElSRUNUT1JJRVN9KQorIGFkZF9leGVjdXRhYmxlKGpzYyAke0pTQ19TT1VSQ0VTfSkKKyB0YXJnZXRfbGlua19saWJyYXJpZXMoanNjICR7SlNDX0xJQlJBUklFU30pCisgc2V0X3RhcmdldF9wcm9wZXJ0aWVzKGpzYyBQUk9QRVJUSUVTIEZPTERFUiAiSmF2YVNjcmlwdENvcmUiKQpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zYXRvL3dlYmtpdC9maWxlcy8wMDAxLVdoZW4tYnVpbGRpbmctaW50cm9zcGVjdGlvbi1maWxlcy1hZGQtQ01BS0VfQ19GTEFHUy0ucGF0Y2ggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXNhdG8vd2Via2l0L2ZpbGVzLzAwMDEtV2hlbi1idWlsZGluZy1pbnRyb3NwZWN0aW9uLWZpbGVzLWFkZC1DTUFLRV9DX0ZMQUdTLS5wYXRjaAppbmRleCA0NGI0M2NkLi4zZjcxMjk3IDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXNhdG8vd2Via2l0L2ZpbGVzLzAwMDEtV2hlbi1idWlsZGluZy1pbnRyb3NwZWN0aW9uLWZpbGVzLWFkZC1DTUFLRV9DX0ZMQUdTLS5wYXRjaAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXNhdG8vd2Via2l0L2ZpbGVzLzAwMDEtV2hlbi1idWlsZGluZy1pbnRyb3NwZWN0aW9uLWZpbGVzLWFkZC1DTUFLRV9DX0ZMQUdTLS5wYXRjaApAQCAtMTMsMjggKzEzLDI1IEBACiAgU291cmNlL1dlYktpdDIvUGxhdGZvcm1HVEsuY21ha2UgfCA0ICsrLS0KICAxIGZpbGUgY2hhbmdlZCwgMiBpbnNlcnRpb25zKCspLCAyIGRlbGV0aW9ucygtKQogCi1kaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvUGxhdGZvcm1HVEsuY21ha2UgYi9Tb3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybUdUSy5jbWFrZQotaW5kZXggNzA2ZjFlOC4uMTRhMWMzYiAxMDA2NDQKLS0tLSBhL1NvdXJjZS9XZWJLaXQyL1BsYXRmb3JtR1RLLmNtYWtlCi0rKysgYi9Tb3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybUdUSy5jbWFrZQotQEAgLTg4NCw3ICs4ODQsNyBAQCBhZGRfY3VzdG9tX2NvbW1hbmQoCitJbmRleDogd2Via2l0Z3RrLTIuMTIuMS9Tb3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybUdUSy5jbWFrZQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIHdlYmtpdGd0ay0yLjEyLjEub3JpZy9Tb3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybUdUSy5jbWFrZQorKysrIHdlYmtpdGd0ay0yLjEyLjEvU291cmNlL1dlYktpdDIvUGxhdGZvcm1HVEsuY21ha2UKK0BAIC05MTAsNyArOTEwLDcgQEAgYWRkX2N1c3RvbV9jb21tYW5kKAogICAgICBPVVRQVVQgJHtDTUFLRV9CSU5BUllfRElSfS9XZWJLaXQyLSR7V0VCS0lUR1RLX0FQSV9WRVJTSU9OfS5naXIKICAgICAgREVQRU5EUyBXZWJLaXQyCiAgICAgIERFUEVORFMgJHtDTUFLRV9CSU5BUllfRElSfS9KYXZhU2NyaXB0Q29yZS0ke1dFQktJVEdUS19BUElfVkVSU0lPTn0uZ2lyCiAtICAgIENPTU1BTkQgQ0M9JHtDTUFLRV9DX0NPTVBJTEVSfSBDRkxBR1M9LVduby1kZXByZWNhdGVkLWRlY2xhcmF0aW9ucyBMREZMQUdTPQogKyAgICBDT01NQU5EIENDPSR7Q01BS0VfQ19DT01QSUxFUn0gQ0ZMQUdTPS1Xbm8tZGVwcmVjYXRlZC1kZWNsYXJhdGlvbnNcICR7Q01BS0VfQ19GTEFHU30gTERGTEFHUz0KLSAgICAgICAgIExEX0xJQlJBUllfUEFUSD0iJHtJTlRST1NQRUNUSU9OX0FERElUSU9OQUxfTElCUkFSWV9QQVRIfSIKKyAgICAgICAgICR7TE9BREVSX0xJQlJBUllfUEFUSF9WQVJ9PSIke0lOVFJPU1BFQ1RJT05fQURESVRJT05BTF9MSUJSQVJZX1BBVEh9IgogICAgICAgICAgJHtJTlRST1NQRUNUSU9OX1NDQU5ORVJ9CiAgICAgICAgICAtLXF1aWV0Ci1AQCAtOTMwLDcgKzkzMCw3IEBAIGFkZF9jdXN0b21fY29tbWFuZCgKK0BAIC05NTEsNyArOTUxLDcgQEAgYWRkX2N1c3RvbV9jb21tYW5kKAogICAgICBPVVRQVVQgJHtDTUFLRV9CSU5BUllfRElSfS9XZWJLaXQyV2ViRXh0ZW5zaW9uLSR7V0VCS0lUR1RLX0FQSV9WRVJTSU9OfS5naXIKICAgICAgREVQRU5EUyAke0NNQUtFX0JJTkFSWV9ESVJ9L0phdmFTY3JpcHRDb3JlLSR7V0VCS0lUR1RLX0FQSV9WRVJTSU9OfS5naXIKICAgICAgREVQRU5EUyAke0NNQUtFX0JJTkFSWV9ESVJ9L1dlYktpdDItJHtXRUJLSVRHVEtfQVBJX1ZFUlNJT059LmdpcgogLSAgICBDT01NQU5EIENDPSR7Q01BS0VfQ19DT01QSUxFUn0gQ0ZMQUdTPS1Xbm8tZGVwcmVjYXRlZC1kZWNsYXJhdGlvbnMKICsgICAgQ09NTUFORCBDQz0ke0NNQUtFX0NfQ09NUElMRVJ9IENGTEFHUz0tV25vLWRlcHJlY2F0ZWQtZGVjbGFyYXRpb25zXCAke0NNQUtFX0NfRkxBR1N9CiAgICAgICAgICBMREZMQUdTPSIke0lOVFJPU1BFQ1RJT05fQURESVRJT05BTF9MREZMQUdTfSIKLSAgICAgICAgIExEX0xJQlJBUllfUEFUSD0iJHtJTlRST1NQRUNUSU9OX0FERElUSU9OQUxfTElCUkFSWV9QQVRIfSIKKyAgICAgICAgICR7TE9BREVSX0xJQlJBUllfUEFUSF9WQVJ9PSIke0lOVFJPU1BFQ1RJT05fQURESVRJT05BTF9MSUJSQVJZX1BBVEh9IgogICAgICAgICAgJHtJTlRST1NQRUNUSU9OX1NDQU5ORVJ9Ci0tLSAKLTIuNi40Ci0KZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc2F0by93ZWJraXQvZmlsZXMvbXVzbC1maXhlcy5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc2F0by93ZWJraXQvZmlsZXMvbXVzbC1maXhlcy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40ZmRkNTZmCi0tLSAvZGV2L251bGwKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zYXRvL3dlYmtpdC9maWxlcy9tdXNsLWZpeGVzLnBhdGNoCkBAIC0wLDAgKzEsNDggQEAKK1JlcGxhY2UgX19HTElCQ19fIHdpdGggX19saW51eF9fIHNpbmNlIG11c2wgYWxzbyBzdXBwb3J0cyBpdAorc28gY2hlY2tpbmcgX19saW51eF9fIGlzIG1vcmUgYWNjb21vZGF0aW5nCisKK1NlZSBodHRwOi8vZ2l0LmFscGluZWxpbnV4Lm9yZy9jZ2l0L2Fwb3J0cy90cmVlL2NvbW11bml0eS93ZWJraXQyZ3RrL211c2wtZml4ZXMucGF0Y2g/aWQ9MjE5NDM1ZDg2ZDdlOGZhYzk0NzQzNDRhNzQzMWM2MmJkMjUyNTE4NAorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKK1NpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CisKK0luZGV4OiB3ZWJraXRndGstMi4xMi4xL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hY2hpbmVTdGFja01hcmtlci5jcHAKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSB3ZWJraXRndGstMi4xMi4xLm9yaWcvU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFjaGluZVN0YWNrTWFya2VyLmNwcAorKysrIHdlYmtpdGd0ay0yLjEyLjEvU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFjaGluZVN0YWNrTWFya2VyLmNwcAorQEAgLTU2Niw3ICs1NjYsNyBAQCB2b2lkKiBNYWNoaW5lVGhyZWFkczo6VGhyZWFkOjpSZWdpc3RlcnM6CisgI2Vycm9yIFVua25vd24gQXJjaGl0ZWN0dXJlCisgI2VuZGlmCisgCistI2VsaWYgZGVmaW5lZChfX0dMSUJDX18pICYmIEVOQUJMRShKSVQpCisrI2VsaWYgZGVmaW5lZChfX2xpbnV4X18pICYmIEVOQUJMRShKSVQpCisgCisgI2lmIENQVShYODYpCisgICAgIHJldHVybiByZWludGVycHJldF9jYXN0PHZvaWQqPigodWludHB0cl90KSByZWdzLm1hY2hpbmVDb250ZXh0LmdyZWdzW1JFR19FU1BdKTsKK0BAIC02NjUsNyArNjY1LDcgQEAgdm9pZCogTWFjaGluZVRocmVhZHM6OlRocmVhZDo6UmVnaXN0ZXJzOgorICNlcnJvciBVbmtub3duIEFyY2hpdGVjdHVyZQorICNlbmRpZgorIAorLSNlbGlmIGRlZmluZWQoX19HTElCQ19fKQorKyNlbGlmIGRlZmluZWQoX19saW51eF9fKSAvLyBnbGliYyBhbmQgbXVzbAorIAorIC8vIFRoZSBmb2xsb3dpbmcgc2VxdWVuY2UgZGVwZW5kcyBvbiBnbGliYydzIHN5cy91Y29udGV4dC5oLgorICNpZiBDUFUoWDg2KQorQEAgLTc0Nyw3ICs3NDcsNyBAQCB2b2lkKiBNYWNoaW5lVGhyZWFkczo6VGhyZWFkOjpSZWdpc3RlcnM6CisgI2Vycm9yIFVua25vd24gQXJjaGl0ZWN0dXJlCisgI2VuZGlmCisgCistI2VsaWYgZGVmaW5lZChfX0dMSUJDX18pCisrI2VsaWYgZGVmaW5lZChfX2xpbnV4X18pIC8vIGdsaWJjIGFuZCBtdXNsCisgCisgLy8gVGhlIGZvbGxvd2luZyBzZXF1ZW5jZSBkZXBlbmRzIG9uIGdsaWJjJ3Mgc3lzL3Vjb250ZXh0LmguCisgI2lmIENQVShYODYpCitAQCAtODM4LDcgKzgzOCw3IEBAIHZvaWQqIE1hY2hpbmVUaHJlYWRzOjpUaHJlYWQ6OlJlZ2lzdGVyczoKKyAjZXJyb3IgVW5rbm93biBBcmNoaXRlY3R1cmUKKyAjZW5kaWYKKyAKKy0jZWxpZiBkZWZpbmVkKF9fR0xJQkNfXykKKysjZWxpZiBkZWZpbmVkKF9fbGludXhfXykgLy8gZ2xpYmMgYW5kIG11c2wKKyAKKyAvLyBUaGUgZm9sbG93aW5nIHNlcXVlbmNlIGRlcGVuZHMgb24gZ2xpYmMncyBzeXMvdWNvbnRleHQuaC4KKyAjaWYgQ1BVKFg4NikKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc2F0by93ZWJraXQvZmlsZXMvcHBjLW11c2wtZml4LnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zYXRvL3dlYmtpdC9maWxlcy9wcGMtbXVzbC1maXgucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWY1OGU0OQotLS0gL2Rldi9udWxsCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc2F0by93ZWJraXQvZmlsZXMvcHBjLW11c2wtZml4LnBhdGNoCkBAIC0wLDAgKzEsMjYgQEAKK3Vjb250ZXh0IHN0cnVjdHVyZSBpcyBkaWZmZXJlbnQgYmV0d2VlbiBtdXNsIGFuZCBnbGliYyBmb3IgcHBjCit0aGVyZWZvcmUgaXRzIG5vdCBlbm91Z2gganVzdCB0byBjaGVjayBmb3IgYXJjaCBhbG9uZSwgd2UgYWxzbworbmVlZCB0byBjaGVjayBmb3IgbGliYyB0eXBlLgorCitGaXhlcyBlcnJvcnMgbGlrZQorCitTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYWNoaW5lU3RhY2tNYXJrZXIuY3BwOjkwOjY1OiBlcnJvcjogJ3N0cnVjdCBtY29udGV4dF90JyBoYXMgbm8gbWVtYmVyIG5hbWVkICd1Y19yZWdzJzsgZGlkIHlvdSBtZWFuICdncmVncyc/CisgICAgIHRocmVhZC0+c3VzcGVuZGVkTWFjaGluZUNvbnRleHQgPSAqdXNlckNvbnRleHQtPnVjX21jb250ZXh0LnVjX3JlZ3M7CisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitTaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorCitJbmRleDogd2Via2l0Z3RrLTIuMTIuMy9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYWNoaW5lU3RhY2tNYXJrZXIuY3BwCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gd2Via2l0Z3RrLTIuMTIuMy5vcmlnL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hY2hpbmVTdGFja01hcmtlci5jcHAKKysrKyB3ZWJraXRndGstMi4xMi4zL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hY2hpbmVTdGFja01hcmtlci5jcHAKK0BAIC04Niw3ICs4Niw3IEBAIHN0YXRpYyB2b2lkIHB0aHJlYWRTaWduYWxIYW5kbGVyU3VzcGVuZFIKKyAgICAgfQorIAorICAgICB1Y29udGV4dF90KiB1c2VyQ29udGV4dCA9IHN0YXRpY19jYXN0PHVjb250ZXh0X3QqPih1Y29udGV4dCk7CistI2lmIENQVShQUEMpCisrI2lmIENQVShQUEMpICYmIGRlZmluZWQoX19HTElCQ19fKQorICAgICB0aHJlYWQtPnN1c3BlbmRlZE1hY2hpbmVDb250ZXh0ID0gKnVzZXJDb250ZXh0LT51Y19tY29udGV4dC51Y19yZWdzOworICNlbHNlCisgICAgIHRocmVhZC0+c3VzcGVuZGVkTWFjaGluZUNvbnRleHQgPSB1c2VyQ29udGV4dC0+dWNfbWNvbnRleHQ7CmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXNhdG8vd2Via2l0L3dlYmtpdGd0ay8wMDAxLUVuYWJsZS1iYWNrdHJhY2Utb24tbGludXgtd2hlbi11c2luZy1nbGliYy5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc2F0by93ZWJraXQvd2Via2l0Z3RrLzAwMDEtRW5hYmxlLWJhY2t0cmFjZS1vbi1saW51eC13aGVuLXVzaW5nLWdsaWJjLnBhdGNoCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkN2U0ZWY2Li4wMDAwMDAwCi0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc2F0by93ZWJraXQvd2Via2l0Z3RrLzAwMDEtRW5hYmxlLWJhY2t0cmFjZS1vbi1saW51eC13aGVuLXVzaW5nLWdsaWJjLnBhdGNoCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotRnJvbSAwYjY4YWQyMDZkMmQ5MGRmNzhkOTFjYWQ0ZGExOTE1MjA4NDAxNGNmIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQotRnJvbTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KLURhdGU6IFdlZCwgMTYgU2VwIDIwMTUgMDU6MTU6MDQgKzAwMDAKLVN1YmplY3Q6IFtQQVRDSF0gRW5hYmxlIGJhY2t0cmFjZSBvbiBsaW51eCB3aGVuIHVzaW5nIGdsaWJjCi0KLVdlIGRvbnQgaGF2ZSBiYWNrdHJhY2UoKSBpbXBsZW1lbnRlZCBvbiBub24tZ2xpYmMgbGliYydzIG9uIGxpbnV4Ci0KLVNpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+Ci0tLS0KLVVwc3RyZWFtLVN0YXR1czogQWNjZXB0ZWQKLQotIFNvdXJjZS9XVEYvd3RmL0Fzc2VydGlvbnMuY3BwIHwgNCArKy0tCi0gMSBmaWxlIGNoYW5nZWQsIDIgaW5zZXJ0aW9ucygrKSwgMiBkZWxldGlvbnMoLSkKLQotZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL0Fzc2VydGlvbnMuY3BwIGIvU291cmNlL1dURi93dGYvQXNzZXJ0aW9ucy5jcHAKLWluZGV4IDE5MWQ1M2YuLmE0ZDg2YjUgMTAwNjQ0Ci0tLS0gYS9Tb3VyY2UvV1RGL3d0Zi9Bc3NlcnRpb25zLmNwcAotKysrIGIvU291cmNlL1dURi93dGYvQXNzZXJ0aW9ucy5jcHAKLUBAIC02OCw3ICs2OCw3IEBACi0gI2luY2x1ZGUgPHVuaXN0ZC5oPgotICNlbmRpZgotIAotLSNpZiBPUyhEQVJXSU4pIHx8IChPUyhMSU5VWCkgJiYgIWRlZmluZWQoX19VQ0xJQkNfXykpCi0rI2lmIE9TKERBUldJTikgfHwgKE9TKExJTlVYKSAmJiBkZWZpbmVkKF9fR0xJQkNfXykgJiYgIWRlZmluZWQoX19VQ0xJQkNfXykpCi0gI2luY2x1ZGUgPGN4eGFiaS5oPgotICNpbmNsdWRlIDxkbGZjbi5oPgotICNpbmNsdWRlIDxleGVjaW5mby5oPgotQEAgLTIyNSw3ICsyMjUsNyBAQCB2b2lkIFdURlJlcG9ydEFyZ3VtZW50QXNzZXJ0aW9uRmFpbHVyZShjb25zdCBjaGFyKiBmaWxlLCBpbnQgbGluZSwgY29uc3QgY2hhciogZgotIAotIHZvaWQgV1RGR2V0QmFja3RyYWNlKHZvaWQqKiBzdGFjaywgaW50KiBzaXplKQotIHsKLS0jaWYgT1MoREFSV0lOKSB8fCAoT1MoTElOVVgpICYmICFkZWZpbmVkKF9fVUNMSUJDX18pKQotKyNpZiBPUyhEQVJXSU4pIHx8IChPUyhMSU5VWCkgJiYgZGVmaW5lZChfX0dMSUJDX18pICYmICFkZWZpbmVkKF9fVUNMSUJDX18pKQotICAgICAqc2l6ZSA9IGJhY2t0cmFjZShzdGFjaywgKnNpemUpOwotICNlbGlmIE9TKFdJTkRPV1MpCi0gICAgIC8vIFRoZSBDYXB0dXJlU3RhY2tCYWNrVHJhY2UgZnVuY3Rpb24gaXMgYXZhaWxhYmxlIGluIFhQLCBidXQgaXQgaXMgbm90IGRlZmluZWQKLS0tIAotMi41LjIKLQpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zYXRvL3dlYmtpdC93ZWJraXRndGsvMDAwMS1GaXgtYnVpbGQtd2l0aC1ub24tZ2xpYmMtbGlicmFyaWVzLW9uLWxpbnV4LnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zYXRvL3dlYmtpdC93ZWJraXRndGsvMDAwMS1GaXgtYnVpbGQtd2l0aC1ub24tZ2xpYmMtbGlicmFyaWVzLW9uLWxpbnV4LnBhdGNoCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3N2ViZjM3Li4wMDAwMDAwCi0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc2F0by93ZWJraXQvd2Via2l0Z3RrLzAwMDEtRml4LWJ1aWxkLXdpdGgtbm9uLWdsaWJjLWxpYnJhcmllcy1vbi1saW51eC5wYXRjaAorKysgL2Rldi9udWxsCkBAIC0xLDYxICswLDAgQEAKLUZyb20gMzBlMmVmMzAyYTMyOTg1MGJhNTVjN2M0NThjOThjYmYzOTYxODZlYyBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKLUZyb206IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+Ci1EYXRlOiBUaHUsIDMxIERlYyAyMDE1IDIxOjQ3OjM0ICswMDAwCi1TdWJqZWN0OiBbUEFUQ0hdIEZpeCBidWlsZCB3aXRoIG5vbi1nbGliYyBsaWJyYXJpZXMgb24gbGludXgKLQotcXVhbGlmeSBpc25hbigpIGNhbGxzIHdpdGggc3RkIG5hbWVzcGFjZQotbWFsbG9jX3RyaW0gaXMgZ2xpYmMgc3BlY2lmaWMgQVBJIHNvIGd1YXJkIGl0IHdpdGggX19HTElCQ19fCi1sZXQgY3R5cGUgYmUgdXNlZCBvbiBub24tZ2xpYmMgKCBtdXNsICkgQyBsaWJyYXJ5Ci0KLVNpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+Ci0tLS0KLVVwc3RyZWFtLVN0YXR1czogQWNjZXB0ZWQKLQotIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09wdGlvbnMuY3BwICAgICAgICAgICAgICAgICAgICB8IDIgKy0KLSBTb3VyY2UvV1RGL3d0Zi9EaXNhbGxvd0NUeXBlLmggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAyICstCi0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbGludXgvTWVtb3J5UHJlc3N1cmVIYW5kbGVyTGludXguY3BwIHwgMiArKwotIDMgZmlsZXMgY2hhbmdlZCwgNCBpbnNlcnRpb25zKCspLCAyIGRlbGV0aW9ucygtKQotCi1kaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3B0aW9ucy5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PcHRpb25zLmNwcAotaW5kZXggZmU4MzBiNC4uYzQ5YWFkZSAxMDA2NDQKLS0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09wdGlvbnMuY3BwCi0rKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PcHRpb25zLmNwcAotQEAgLTYxMCw3ICs2MTAsNyBAQCBib29sIE9wdGlvbjo6b3BlcmF0b3I9PShjb25zdCBPcHRpb24mIG90aGVyKSBjb25zdAotICAgICBjYXNlIE9wdGlvbnM6OlR5cGU6OnVuc2lnbmVkVHlwZToKLSAgICAgICAgIHJldHVybiBtX2VudHJ5LnVuc2lnbmVkVmFsID09IG90aGVyLm1fZW50cnkudW5zaWduZWRWYWw7Ci0gICAgIGNhc2UgT3B0aW9uczo6VHlwZTo6ZG91YmxlVHlwZToKLS0gICAgICAgIHJldHVybiAobV9lbnRyeS5kb3VibGVWYWwgPT0gb3RoZXIubV9lbnRyeS5kb3VibGVWYWwpIHx8IChpc25hbihtX2VudHJ5LmRvdWJsZVZhbCkgJiYgaXNuYW4ob3RoZXIubV9lbnRyeS5kb3VibGVWYWwpKTsKLSsgICAgICAgIHJldHVybiAobV9lbnRyeS5kb3VibGVWYWwgPT0gb3RoZXIubV9lbnRyeS5kb3VibGVWYWwpIHx8IChzdGQ6OmlzbmFuKG1fZW50cnkuZG91YmxlVmFsKSAmJiBzdGQ6OmlzbmFuKG90aGVyLm1fZW50cnkuZG91YmxlVmFsKSk7Ci0gICAgIGNhc2UgT3B0aW9uczo6VHlwZTo6aW50MzJUeXBlOgotICAgICAgICAgcmV0dXJuIG1fZW50cnkuaW50MzJWYWwgPT0gb3RoZXIubV9lbnRyeS5pbnQzMlZhbDsKLSAgICAgY2FzZSBPcHRpb25zOjpUeXBlOjpvcHRpb25SYW5nZVR5cGU6Ci1kaWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYvRGlzYWxsb3dDVHlwZS5oIGIvU291cmNlL1dURi93dGYvRGlzYWxsb3dDVHlwZS5oCi1pbmRleCBkODVlNzY3Li5kYzZiY2FiIDEwMDY0NAotLS0tIGEvU291cmNlL1dURi93dGYvRGlzYWxsb3dDVHlwZS5oCi0rKysgYi9Tb3VyY2UvV1RGL3d0Zi9EaXNhbGxvd0NUeXBlLmgKLUBAIC00MCw3ICs0MCw3IEBACi0gLy8gYXJlIHVzZWQgZnJvbSB3eCBoZWFkZXJzLiBPbiBHVEsrIGZvciBNYWMgbWFueSBHVEsrIGZpbGVzIGluY2x1ZGUgPGxpYmludGwuaD4KLSAvLyBvciA8Z2xpYi9naTE4bi1saWIuaD4sIHdoaWNoIGluIHR1cm4gaW5jbHVkZSA8eGxvY2FsZS9fY3R5cGUuaD4gd2hpY2ggdXNlcwotIC8vIGlzYWNpaSgpLiAKLS0jaWYgIShPUyhEQVJXSU4pICYmIFBMQVRGT1JNKEdUSykpICYmICFQTEFURk9STShFRkwpICYmICFkZWZpbmVkKF9MSUJDUFBfVkVSU0lPTikKLSsjaWYgIShPUyhEQVJXSU4pICYmIFBMQVRGT1JNKEdUSykpICYmICFQTEFURk9STShFRkwpICYmICFkZWZpbmVkKF9MSUJDUFBfVkVSU0lPTikgJiYgZGVmaW5lZChfX0dMSUJDX18pCi0gCi0gI2luY2x1ZGUgPGN0eXBlLmg+Ci0gCi1kaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbGludXgvTWVtb3J5UHJlc3N1cmVIYW5kbGVyTGludXguY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbGludXgvTWVtb3J5UHJlc3N1cmVIYW5kbGVyTGludXguY3BwCi1pbmRleCBlYTYxOTA5Li4xNDk1NjQyIDEwMDY0NAotLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbGludXgvTWVtb3J5UHJlc3N1cmVIYW5kbGVyTGludXguY3BwCi0rKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9saW51eC9NZW1vcnlQcmVzc3VyZUhhbmRsZXJMaW51eC5jcHAKLUBAIC0yMDIsNyArMjAyLDkgQEAgdm9pZCBNZW1vcnlQcmVzc3VyZUhhbmRsZXI6OnJlc3BvbmRUb01lbW9yeVByZXNzdXJlKENyaXRpY2FsIGNyaXRpY2FsLCBTeW5jaHJvbm8KLSB2b2lkIE1lbW9yeVByZXNzdXJlSGFuZGxlcjo6cGxhdGZvcm1SZWxlYXNlTWVtb3J5KENyaXRpY2FsKQotIHsKLSAgICAgUmVsaWVmTG9nZ2VyIGxvZygiUnVuIG1hbGxvY190cmltIik7Ci0rI2lmZGVmIF9fR0xJQkNfXwotICAgICBtYWxsb2NfdHJpbSgwKTsKLSsjZW5kaWYKLSB9Ci0gCi0gdm9pZCBNZW1vcnlQcmVzc3VyZUhhbmRsZXI6OlJlbGllZkxvZ2dlcjo6cGxhdGZvcm1Mb2coKQotLS0gCi0yLjYuNAotCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXNhdG8vd2Via2l0L3dlYmtpdGd0ay9jbGFuZy5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc2F0by93ZWJraXQvd2Via2l0Z3RrL2NsYW5nLnBhdGNoCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlNTI2NzEzLi4wMDAwMDAwCi0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc2F0by93ZWJraXQvd2Via2l0Z3RrL2NsYW5nLnBhdGNoCisrKyAvZGV2L251bGwKQEAgLTEsMjUgKzAsMCBAQAotQ2xhbmcncyBidWlsdGluIGZvciBjbGVhcl9jYWNoZSBhY2NlcHRzIGNoYXIqIGFuZCBlcnJvcnMgb3V0IHdoZW4gdXNpbmcgdm9pZCosCi11c2luZyBjaGFyKiB3b3JrIG9uIGJvdGggZ2NjIGFuZCBjbGFuZyBzaW5jZSBjaGFyKiBpcyBhdXRvLWNvbnZlcnRlZCB0byB2b2lkKiBpbiBnY2MgY2FzZQotCi1Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL0FSTTY0QXNzZW1ibGVyLmg6Mjg1NzozMzogZXJyb3I6IGNhbm5vdCBpbml0aWFsaXplIGEgcGFyYW1ldGVyIG9mIHR5cGUgJ2NoYXIgKicgd2l0aCBhbiBydmFsdWUgb2YgdHlwZSAndm9pZCAqJwotICAgICAgICBfX2J1aWx0aW5fX19jbGVhcl9jYWNoZShyZWludGVycHJldF9jYXN0PHZvaWQqPihiZWdpbiksIHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KGVuZCkpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBefn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn4KLTEgZXJyb3IgZ2VuZXJhdGVkLgotCi1TaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgotCi1VcHN0cmVhbS1TdGF0dXM6IEFjY2VwdGVkCi0KLUluZGV4OiB3ZWJraXRndGstMi44LjUvU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9BUk02NEFzc2VtYmxlci5oCi09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLS0gd2Via2l0Z3RrLTIuOC41Lm9yaWcvU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9BUk02NEFzc2VtYmxlci5oCi0rKysgd2Via2l0Z3RrLTIuOC41L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvQVJNNjRBc3NlbWJsZXIuaAotQEAgLTI4NTQsNyArMjg1NCw3IEBAIHB1YmxpYzoKLSAjaWYgT1MoTElOVVgpICYmIENPTVBJTEVSKEdDQykKLSAgICAgc3RhdGljIGlubGluZSB2b2lkIGxpbnV4UGFnZUZsdXNoKHVpbnRwdHJfdCBiZWdpbiwgdWludHB0cl90IGVuZCkKLSAgICAgewotLSAgICAgICAgX19idWlsdGluX19fY2xlYXJfY2FjaGUocmVpbnRlcnByZXRfY2FzdDx2b2lkKj4oYmVnaW4pLCByZWludGVycHJldF9jYXN0PHZvaWQqPihlbmQpKTsKLSsgICAgICAgIF9fYnVpbHRpbl9fX2NsZWFyX2NhY2hlKHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KGJlZ2luKSwgcmVpbnRlcnByZXRfY2FzdDxjaGFyKj4oZW5kKSk7Ci0gICAgIH0KLSAjZW5kaWYKLSAKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc2F0by93ZWJraXQvd2Via2l0Z3RrXzIuMTAuNy5iYiBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc2F0by93ZWJraXQvd2Via2l0Z3RrXzIuMTAuNy5iYgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOGViNmI5Zi4uMDAwMDAwMAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXNhdG8vd2Via2l0L3dlYmtpdGd0a18yLjEwLjcuYmIKKysrIC9kZXYvbnVsbApAQCAtMSw4OCArMCwwIEBACi1TVU1NQVJZID0gIldlYktpdCB3ZWIgcmVuZGVyaW5nIGVuZ2luZSBmb3IgdGhlIEdUSysgcGxhdGZvcm0iCi1IT01FUEFHRSA9ICJodHRwOi8vd3d3LndlYmtpdGd0ay5vcmcvIgotQlVHVFJBQ0tFUiA9ICJodHRwOi8vYnVncy53ZWJraXQub3JnLyIKLQotTElDRU5TRSA9ICJCU0QgJiBMR1BMdjIrIgotTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vU291cmNlL0phdmFTY3JpcHRDb3JlL0NPUFlJTkcuTElCO21kNT1kMGM2ZDYzOTdhNWQ4NDI4NmRkYTc1OGRhNTdiZDY5MSBcCi0gICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9Tb3VyY2UvV2ViS2l0L0xJQ0VOU0U7bWQ1PTQ2NDZmOTAwODJjNDBiY2YyOThjMjg1ZjhiYWIwYjEyIFwKLSAgICAgICAgICAgICAgICAgICAgZmlsZTovL1NvdXJjZS9XZWJDb3JlL0xJQ0VOU0UtQVBQTEU7bWQ1PTQ2NDZmOTAwODJjNDBiY2YyOThjMjg1ZjhiYWIwYjEyIFwKLQkJICAgIGZpbGU6Ly9Tb3VyY2UvV2ViQ29yZS9MSUNFTlNFLUxHUEwtMjttZDU9MzYzNTdmZmRlMmI2NGFlMTc3YjI0OTQ0NDViNzlkMjEgXAotCQkgICAgZmlsZTovL1NvdXJjZS9XZWJDb3JlL0xJQ0VOU0UtTEdQTC0yLjE7bWQ1PWE3NzhhMzNlZjMzOGFiYmFmOGI4YTdjMzZiNmVlYzgwIFwKLQkJICAgIgotCi1TUkNfVVJJID0gIlwKLSAgaHR0cDovL3d3dy53ZWJraXRndGsub3JnL3JlbGVhc2VzLyR7QlBOfS0ke1BWfS50YXIueHogXAotICBmaWxlOi8vY2xhbmcucGF0Y2ggXAotICBmaWxlOi8vMDAwMS1FbmFibGUtYmFja3RyYWNlLW9uLWxpbnV4LXdoZW4tdXNpbmctZ2xpYmMucGF0Y2ggXAotICBmaWxlOi8vMDAwMS1GaXgtYnVpbGQtd2l0aC1ub24tZ2xpYmMtbGlicmFyaWVzLW9uLWxpbnV4LnBhdGNoIFwKLSAgZmlsZTovLzAwMDEtRmluZEdPYmplY3RJbnRyb3NwZWN0aW9uLmNtYWtlLXByZWZpeC12YXJpYWJsZXMtb2J0YS5wYXRjaCBcCi0gIGZpbGU6Ly8wMDAxLVdoZW4tYnVpbGRpbmctaW50cm9zcGVjdGlvbi1maWxlcy1hZGQtQ01BS0VfQ19GTEFHUy0ucGF0Y2ggXAotICBmaWxlOi8vMDAwMS1PcHRpb25zR1RLLmNtYWtlLWRyb3AtdGhlLWhhcmRjb2RlZC1pbnRyb3NwZWN0aW9uLWd0LnBhdGNoIFwKLSAgIgotU1JDX1VSSVttZDVzdW1dID0gIjg0ODMyYjlkODMyOTQxM2I0ZjFkODdkZjVmN2U4ZWZlIgotU1JDX1VSSVtzaGEyNTZzdW1dID0gIjk5MGQ2MmM4MmVkNmRlZGUzMWE2ZmYwYTgyZDg0N2YxNmI4MTI4NDJmZjNlMTA5M2QxNzExMzYyNzY1Mjg2NGUiCi0KLWluaGVyaXQgY21ha2UgbGliX3BhY2thZ2UgcGtnY29uZmlnIHBlcmxuYXRpdmUgcHl0aG9ubmF0aXZlIGRpc3Ryb19mZWF0dXJlc19jaGVjayB1cHN0cmVhbS12ZXJzaW9uLWlzLWV2ZW4gZ29iamVjdC1pbnRyb3NwZWN0aW9uCi0KLSMgZGVwZW5kcyBvbiBsaWJ4dAotUkVRVUlSRURfRElTVFJPX0ZFQVRVUkVTID0gIngxMSIKLQotREVQRU5EUyA9ICJ6bGliIGxpYnNvdXAtMi40IGN1cmwgbGlieG1sMiBjYWlybyBsaWJ4c2x0IGxpYnh0IGxpYmlkbiBnbnV0bHMgXAotICAgICAgICAgICBndGsrMyBnc3RyZWFtZXIxLjAgZ3N0cmVhbWVyMS4wLXBsdWdpbnMtYmFzZSBmbGV4LW5hdGl2ZSBncGVyZi1uYXRpdmUgc3FsaXRlMyBcCi0JICAgcGFuZ28gaWN1IGJpc29uLW5hdGl2ZSBnbm9tZS1jb21tb24gZ2F3ayBpbnRsdG9vbC1uYXRpdmUgbGlid2VicCBcCi0JICAgYXRrIHVkZXYgaGFyZmJ1enoganBlZyBsaWJwbmcgcHVsc2VhdWRpbyBsaWJyc3ZnIGxpYnRoZW9yYSBsaWJ2b3JiaXMgbGlieGNvbXBvc2l0ZSBsaWJ4dHN0IFwKLQkgICBydWJ5LW5hdGl2ZSBsaWJub3RpZnkgZ3N0cmVhbWVyMS4wLXBsdWdpbnMtYmFkIFwKLSAgICAgICAgICAiCi0KLVBBQ0tBR0VDT05GSUcgPz89ICIke0BiYXNlX2NvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCAneDExJywgJ3gxMScsICd3YXlsYW5kJyAsZCl9IFwKLSAgICAgICAgICAgICAgICAgICAke0BiYXNlX2NvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCAnb3BlbmdsJywgJ3dlYmdsJywgJycgLGQpfSBcCi0gICAgICAgICAgICAgICAgICAgZW5jaGFudCBcCi0gICAgICAgICAgICAgICAgICAgZ3RrMiBcCi0gICAgICAgICAgICAgICAgICAgbGlic2VjcmV0IFwKLSAgICAgICAgICAgICAgICAgICIKLQotUEFDS0FHRUNPTkZJR1t3YXlsYW5kXSA9ICItREVOQUJMRV9XQVlMQU5EX1RBUkdFVD1PTiwtREVOQUJMRV9XQVlMQU5EX1RBUkdFVD1PRkYsd2F5bGFuZCIKLVBBQ0tBR0VDT05GSUdbeDExXSA9ICItREVOQUJMRV9YMTFfVEFSR0VUPU9OLC1ERU5BQkxFX1gxMV9UQVJHRVQ9T0ZGLHZpcnR1YWwvbGlieDExIgotUEFDS0FHRUNPTkZJR1tnZW9jbHVlXSA9ICItREVOQUJMRV9HRU9MT0NBVElPTj1PTiwtREVOQUJMRV9HRU9MT0NBVElPTj1PRkYsZ2VvY2x1ZSIKLVBBQ0tBR0VDT05GSUdbZW5jaGFudF0gPSAiLURFTkFCTEVfU1BFTExDSEVDSz1PTiwtREVOQUJMRV9TUEVMTENIRUNLPU9GRixlbmNoYW50IgotUEFDS0FHRUNPTkZJR1tndGsyXSA9ICItREVOQUJMRV9QTFVHSU5fUFJPQ0VTU19HVEsyPU9OLC1ERU5BQkxFX1BMVUdJTl9QUk9DRVNTX0dUSzI9T0ZGLGd0aysiCi1QQUNLQUdFQ09ORklHW2dsZXMyXSA9ICItREVOQUJMRV9HTEVTMj1PTiwtREVOQUJMRV9HTEVTMj1PRkYsdmlydHVhbC9saWJnbGVzMiIKLVBBQ0tBR0VDT05GSUdbd2ViZ2xdID0gIi1ERU5BQkxFX1dFQkdMPU9OLC1ERU5BQkxFX1dFQkdMPU9GRix2aXJ0dWFsL2xpYmdsIgotUEFDS0FHRUNPTkZJR1tsaWJzZWNyZXRdID0gIi1ERU5BQkxFX0NSRURFTlRJQUxfU1RPUkFHRT1PTiwtREVOQUJMRV9DUkVERU5USUFMX1NUT1JBR0U9T0ZGLGxpYnNlY3JldCIKLVBBQ0tBR0VDT05GSUdbbGliaHlwaGVuXSA9ICItRFVTRV9MSUJIWVBIRU49T04sLURVU0VfTElCSFlQSEVOPU9GRixsaWJoeXBoZW4iCi0KLUVYVFJBX09FQ01BS0UgPSAiIFwKLQkJLURQT1JUPUdUSyBcCi0JCS1EQ01BS0VfQlVJTERfVFlQRT1SZWxlYXNlIFwKLQkJJHtAYmIudXRpbHMuY29udGFpbnMoJ0dJX0RBVEFfRU5BQkxFRCcsICdUcnVlJywgJy1ERU5BQkxFX0lOVFJPU1BFQ1RJT049T04nLCAnLURFTkFCTEVfSU5UUk9TUEVDVElPTj1PRkYnLCBkKX0gXAotCQktREVOQUJMRV9HVEtET0M9T0ZGIFwKLQkJLURFTkFCTEVfTUlOSUJST1dTRVI9T04gXAotCQkiCi0KLSMgSmF2YXNjcmlwdCBKSVQgaXMgbm90IHN1cHBvcnRlZCBvbiBwb3dlcnBjCi1FWFRSQV9PRUNNQUtFX2FwcGVuZF9wb3dlcnBjID0gIiAtREVOQUJMRV9KSVQ9T0ZGICIKLUVYVFJBX09FQ01BS0VfYXBwZW5kX3Bvd2VycGM2NCA9ICIgLURFTkFCTEVfSklUPU9GRiAiCi0KLSMgQVJNIEpJVCBjb2RlIGRvZXMgbm90IGJ1aWxkIG9uIEFSTXY1LzYgYW55bW9yZSwgYXBwYXJlbnRseSB0aGV5IHRlc3Qgb25seSBvbiB2NyBvbndhcmRzCi1FWFRSQV9PRUNNQUtFX2FwcGVuZF9hcm12NSA9ICIgLURFTkFCTEVfSklUPU9GRiAiCi1FWFRSQV9PRUNNQUtFX2FwcGVuZF9hcm12NiA9ICIgLURFTkFCTEVfSklUPU9GRiAiCi0KLSMgYmludXRpbHMgMi4yNS4xIGhhcyBhIGJ1ZyBvbiBhYXJjaDY0OgotIyBodHRwczovL3NvdXJjZXdhcmUub3JnL2J1Z3ppbGxhL3Nob3dfYnVnLmNnaT9pZD0xODQzMAotRVhUUkFfT0VDTUFLRV9hcHBlbmRfYWFyY2g2NCA9ICIgLURVU0VfTERfR09MRD1PRkYgIgotCi0jIEpJVCBub3Qgc3VwcG9ydGVkIG9uIE1JUFMgZWl0aGVyCi1FWFRSQV9PRUNNQUtFX2FwcGVuZF9taXBzID0gIiAtREVOQUJMRV9KSVQ9T0ZGICIKLUVYVFJBX09FQ01BS0VfYXBwZW5kX21pcHM2NCA9ICIgLURFTkFCTEVfSklUPU9GRiAiCi0KLUZJTEVTXyR7UE59ICs9ICIke2xpYmRpcn0vd2Via2l0Mmd0ay00LjAvaW5qZWN0ZWQtYnVuZGxlL2xpYndlYmtpdDJndGtpbmplY3RlZGJ1bmRsZS5zbyIKLQotIyBodHRwOi8vZXJyb3JzLnlvY3RvcHJvamVjdC5vcmcvRXJyb3JzL0RldGFpbHMvMjAzNzAvCi1BUk1fSU5TVFJVQ1RJT05fU0VUID0gImFybSIKLQotIyBJbnZhbGlkIGRhdGEgbWVtb3J5IGFjY2VzczogMHgwMDAwMDAwMAotIyAuLi4KLSMgcWVtdTogdW5jYXVnaHQgdGFyZ2V0IHNpZ25hbCAxMSAoU2VnbWVudGF0aW9uIGZhdWx0KSAtIGNvcmUgZHVtcGVkCi0jIFNlZ21lbnRhdGlvbiBmYXVsdAotRVhUUkFfT0VDTUFLRV9hcHBlbmRfcG93ZXJwYyA9ICIgLURFTkFCTEVfSU5UUk9TUEVDVElPTj1PRkYgIgotCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXNhdG8vd2Via2l0L3dlYmtpdGd0a18yLjEyLjUuYmIgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXNhdG8vd2Via2l0L3dlYmtpdGd0a18yLjEyLjUuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTQxZDBlMgotLS0gL2Rldi9udWxsCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc2F0by93ZWJraXQvd2Via2l0Z3RrXzIuMTIuNS5iYgpAQCAtMCwwICsxLDEwOCBAQAorU1VNTUFSWSA9ICJXZWJLaXQgd2ViIHJlbmRlcmluZyBlbmdpbmUgZm9yIHRoZSBHVEsrIHBsYXRmb3JtIgorSE9NRVBBR0UgPSAiaHR0cDovL3d3dy53ZWJraXRndGsub3JnLyIKK0JVR1RSQUNLRVIgPSAiaHR0cDovL2J1Z3Mud2Via2l0Lm9yZy8iCisKK0xJQ0VOU0UgPSAiQlNEICYgTEdQTHYyKyIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DT1BZSU5HLkxJQjttZDU9ZDBjNmQ2Mzk3YTVkODQyODZkZGE3NThkYTU3YmQ2OTEgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vU291cmNlL1dlYktpdC9MSUNFTlNFO21kNT00NjQ2ZjkwMDgyYzQwYmNmMjk4YzI4NWY4YmFiMGIxMiBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9Tb3VyY2UvV2ViQ29yZS9MSUNFTlNFLUFQUExFO21kNT00NjQ2ZjkwMDgyYzQwYmNmMjk4YzI4NWY4YmFiMGIxMiBcCisJCSAgICBmaWxlOi8vU291cmNlL1dlYkNvcmUvTElDRU5TRS1MR1BMLTI7bWQ1PTM2MzU3ZmZkZTJiNjRhZTE3N2IyNDk0NDQ1Yjc5ZDIxIFwKKwkJICAgIGZpbGU6Ly9Tb3VyY2UvV2ViQ29yZS9MSUNFTlNFLUxHUEwtMi4xO21kNT1hNzc4YTMzZWYzMzhhYmJhZjhiOGE3YzM2YjZlZWM4MCBcCisJCSAgICIKKworU1JDX1VSSSA9ICJcCisgIGh0dHA6Ly93d3cud2Via2l0Z3RrLm9yZy9yZWxlYXNlcy8ke0JQTn0tJHtQVn0udGFyLnh6IFwKKyAgZmlsZTovLzAwMDEtRmluZEdPYmplY3RJbnRyb3NwZWN0aW9uLmNtYWtlLXByZWZpeC12YXJpYWJsZXMtb2J0YS5wYXRjaCBcCisgIGZpbGU6Ly8wMDAxLVdoZW4tYnVpbGRpbmctaW50cm9zcGVjdGlvbi1maWxlcy1hZGQtQ01BS0VfQ19GTEFHUy0ucGF0Y2ggXAorICBmaWxlOi8vMDAwMS1PcHRpb25zR1RLLmNtYWtlLWRyb3AtdGhlLWhhcmRjb2RlZC1pbnRyb3NwZWN0aW9uLWd0LnBhdGNoIFwKKyAgZmlsZTovLzAwMDEtV2ViS2l0TWFjcm9zLUFwcGVuZC10by1JLWFuZC1ub3QtdG8taXN5c3RlbS5wYXRjaCBcCisgIGZpbGU6Ly9tdXNsLWZpeGVzLnBhdGNoIFwKKyAgZmlsZTovL3BwYy1tdXNsLWZpeC5wYXRjaCBcCisgIGZpbGU6Ly8wMDAxLUZpeC1yYWN5LXBhcmFsbGVsLWJ1aWxkLW9mLVdlYktpdDItNC4wLmdpci5wYXRjaCBcCisgIGZpbGU6Ly8wMDAxLVR3ZWFrLWd0a2RvYy1zZXR0aW5ncy1zby10aGF0LWd0a2RvYy1nZW5lcmF0aW9uLXdvcmsucGF0Y2ggXAorICAiCitTUkNfVVJJW21kNXN1bV0gPSAiN2E5ZWEwMGVjMTk1NDg4ZGI5MGZkZWIyZDE3NGRkYWYiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiNmIxNDc4NTRiODY0YTVmMTE1ZmFkYjk3YjJiNjIwMGIyZjY5NmRiMDE1MjE2YTM0ZTcyOThkMTFjODhiMWM0MCIKKworaW5oZXJpdCBjbWFrZSBsaWJfcGFja2FnZSBwa2djb25maWcgZ29iamVjdC1pbnRyb3NwZWN0aW9uIHBlcmxuYXRpdmUgZGlzdHJvX2ZlYXR1cmVzX2NoZWNrIHVwc3RyZWFtLXZlcnNpb24taXMtZXZlbiBndGstZG9jCisKKyMgV2UgY2Fubm90IGluaGVyaXQgcHl0aG9ubmF0aXZlIGJlY2F1c2UgdGhhdCB3b3VsZCBjb25mbGljdCB3aXRoIGluaGVyaXRpbmcgcHl0aG9uM25hdGl2ZQorIyAod2hpY2ggaXMgZG9uZSBieSBnb2JqZWN0LWludHJvc3BlY3Rpb24pLiBCdXQgd2Via2l0IG9ubHkgbmVlZHMgdGhlIHBhdGggdG8gbmF0aXZlIFB5dGhvbiAyLnggYmluYXJ5CisjIHNvIHdlIHNpbXBseSBzZXQgaXQgZXhwbGljaXRseSBoZXJlLgorRVhUUkFOQVRJVkVQQVRIICs9ICJweXRob24tbmF0aXZlIgorCisjIGRlcGVuZHMgb24gbGlieHQKK1JFUVVJUkVEX0RJU1RST19GRUFUVVJFUyA9ICJ4MTEiCisKK0RFUEVORFMgPSAiemxpYiBsaWJzb3VwLTIuNCBjdXJsIGxpYnhtbDIgY2Fpcm8gbGlieHNsdCBsaWJ4dCBsaWJpZG4gZ251dGxzIFwKKyAgICAgICAgICAgZ3RrKzMgZ3N0cmVhbWVyMS4wIGdzdHJlYW1lcjEuMC1wbHVnaW5zLWJhc2UgZmxleC1uYXRpdmUgZ3BlcmYtbmF0aXZlIHNxbGl0ZTMgXAorCSAgIHBhbmdvIGljdSBiaXNvbi1uYXRpdmUgZ2F3ayBpbnRsdG9vbC1uYXRpdmUgbGlid2VicCBcCisJICAgYXRrIHVkZXYgaGFyZmJ1enoganBlZyBsaWJwbmcgcHVsc2VhdWRpbyBsaWJyc3ZnIGxpYnRoZW9yYSBsaWJ2b3JiaXMgbGlieGNvbXBvc2l0ZSBsaWJ4dHN0IFwKKwkgICBydWJ5LW5hdGl2ZSBsaWJub3RpZnkgZ3N0cmVhbWVyMS4wLXBsdWdpbnMtYmFkIFwKKyAgICAgICAgICAiCisKK1BBQ0tBR0VDT05GSUcgPz89ICIke0BiYi51dGlscy5jb250YWlucygnRElTVFJPX0ZFQVRVUkVTJywgJ3gxMScsICd4MTEnLCAnd2F5bGFuZCcgLGQpfSBcCisgICAgICAgICAgICAgICAgICAgJHtAYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsICdvcGVuZ2wnLCAnd2ViZ2wnLCAnJyAsZCl9IFwKKyAgICAgICAgICAgICAgICAgICBlbmNoYW50IFwKKyAgICAgICAgICAgICAgICAgICBsaWJzZWNyZXQgXAorICAgICAgICAgICAgICAgICAgIgorCitQQUNLQUdFQ09ORklHW3dheWxhbmRdID0gIi1ERU5BQkxFX1dBWUxBTkRfVEFSR0VUPU9OLC1ERU5BQkxFX1dBWUxBTkRfVEFSR0VUPU9GRix3YXlsYW5kIgorUEFDS0FHRUNPTkZJR1t4MTFdID0gIi1ERU5BQkxFX1gxMV9UQVJHRVQ9T04sLURFTkFCTEVfWDExX1RBUkdFVD1PRkYsdmlydHVhbC9saWJ4MTEiCitQQUNLQUdFQ09ORklHW2dlb2NsdWVdID0gIi1ERU5BQkxFX0dFT0xPQ0FUSU9OPU9OLC1ERU5BQkxFX0dFT0xPQ0FUSU9OPU9GRixnZW9jbHVlIgorUEFDS0FHRUNPTkZJR1tlbmNoYW50XSA9ICItREVOQUJMRV9TUEVMTENIRUNLPU9OLC1ERU5BQkxFX1NQRUxMQ0hFQ0s9T0ZGLGVuY2hhbnQiCitQQUNLQUdFQ09ORklHW2d0azJdID0gIi1ERU5BQkxFX1BMVUdJTl9QUk9DRVNTX0dUSzI9T04sLURFTkFCTEVfUExVR0lOX1BST0NFU1NfR1RLMj1PRkYsZ3RrKyIKK1BBQ0tBR0VDT05GSUdbZ2xlczJdID0gIi1ERU5BQkxFX0dMRVMyPU9OLC1ERU5BQkxFX0dMRVMyPU9GRix2aXJ0dWFsL2xpYmdsZXMyIgorUEFDS0FHRUNPTkZJR1t3ZWJnbF0gPSAiLURFTkFCTEVfV0VCR0w9T04sLURFTkFCTEVfV0VCR0w9T0ZGLHZpcnR1YWwvbGliZ2wiCitQQUNLQUdFQ09ORklHW2xpYnNlY3JldF0gPSAiLURFTkFCTEVfQ1JFREVOVElBTF9TVE9SQUdFPU9OLC1ERU5BQkxFX0NSRURFTlRJQUxfU1RPUkFHRT1PRkYsbGlic2VjcmV0IgorUEFDS0FHRUNPTkZJR1tsaWJoeXBoZW5dID0gIi1EVVNFX0xJQkhZUEhFTj1PTiwtRFVTRV9MSUJIWVBIRU49T0ZGLGxpYmh5cGhlbiIKKworRVhUUkFfT0VDTUFLRSA9ICIgXAorCQktRFBPUlQ9R1RLIFwKKwkJLURDTUFLRV9CVUlMRF9UWVBFPVJlbGVhc2UgXAorCQkke0BiYi51dGlscy5jb250YWlucygnR0lfREFUQV9FTkFCTEVEJywgJ1RydWUnLCAnLURFTkFCTEVfSU5UUk9TUEVDVElPTj1PTicsICctREVOQUJMRV9JTlRST1NQRUNUSU9OPU9GRicsIGQpfSBcCisJCSR7QGJiLnV0aWxzLmNvbnRhaW5zKCdHVEtET0NfRU5BQkxFRCcsICdUcnVlJywgJy1ERU5BQkxFX0dUS0RPQz1PTicsICctREVOQUJMRV9HVEtET0M9T0ZGJywgZCl9IFwKKwkJLURFTkFCTEVfTUlOSUJST1dTRVI9T04gXAorCQkiCisKKyMgSmF2YXNjcmlwdCBKSVQgaXMgbm90IHN1cHBvcnRlZCBvbiBwb3dlcnBjCitFWFRSQV9PRUNNQUtFX2FwcGVuZF9wb3dlcnBjID0gIiAtREVOQUJMRV9KSVQ9T0ZGICIKK0VYVFJBX09FQ01BS0VfYXBwZW5kX3Bvd2VycGM2NCA9ICIgLURFTkFCTEVfSklUPU9GRiAiCisKKyMgQVJNIEpJVCBjb2RlIGRvZXMgbm90IGJ1aWxkIG9uIEFSTXY0LzUvNiBhbnltb3JlCitFWFRSQV9PRUNNQUtFX2FwcGVuZF9hcm12NSA9ICIgLURFTkFCTEVfSklUPU9GRiAiCitFWFRSQV9PRUNNQUtFX2FwcGVuZF9hcm12NiA9ICIgLURFTkFCTEVfSklUPU9GRiAiCitFWFRSQV9PRUNNQUtFX2FwcGVuZF9hcm12NCA9ICIgLURFTkFCTEVfSklUPU9GRiAiCisKKyMgYmludXRpbHMgMi4yNS4xIGhhcyBhIGJ1ZyBvbiBhYXJjaDY0OgorIyBodHRwczovL3NvdXJjZXdhcmUub3JnL2J1Z3ppbGxhL3Nob3dfYnVnLmNnaT9pZD0xODQzMAorRVhUUkFfT0VDTUFLRV9hcHBlbmRfYWFyY2g2NCA9ICIgLURVU0VfTERfR09MRD1PRkYgIgorRVhUUkFfT0VDTUFLRV9hcHBlbmRfbWlwcyA9ICIgLURVU0VfTERfR09MRD1PRkYgIgorRVhUUkFfT0VDTUFLRV9hcHBlbmRfbWlwczY0ID0gIiAtRFVTRV9MRF9HT0xEPU9GRiAiCitFWFRSQV9PRUNNQUtFX2FwcGVuZF90b29sY2hhaW4tY2xhbmcgPSAiIC1EVVNFX0xEX0dPTEQ9T0ZGICIKKworIyBKSVQgbm90IHN1cHBvcnRlZCBvbiBNSVBTIGVpdGhlcgorRVhUUkFfT0VDTUFLRV9hcHBlbmRfbWlwcyA9ICIgLURFTkFCTEVfSklUPU9GRiAiCitFWFRSQV9PRUNNQUtFX2FwcGVuZF9taXBzNjQgPSAiIC1ERU5BQkxFX0pJVD1PRkYgIgorCitTRUNVUklUWV9DRkxBR1NfcmVtb3ZlX2FhcmNoNjQgPSAiLWZwaWUiCitTRUNVUklUWV9DRkxBR1NfYXBwZW5kX2FhcmNoNjQgPSAiIC1mUElFIgorCitGSUxFU18ke1BOfSArPSAiJHtsaWJkaXJ9L3dlYmtpdDJndGstNC4wL2luamVjdGVkLWJ1bmRsZS9saWJ3ZWJraXQyZ3RraW5qZWN0ZWRidW5kbGUuc28iCisKKyMgaHR0cDovL2Vycm9ycy55b2N0b3Byb2plY3Qub3JnL0Vycm9ycy9EZXRhaWxzLzIwMzcwLworQVJNX0lOU1RSVUNUSU9OX1NFVF9hcm12NCA9ICJhcm0iCitBUk1fSU5TVFJVQ1RJT05fU0VUX2FybXY1ID0gImFybSIKK0FSTV9JTlNUUlVDVElPTl9TRVRfYXJtdjYgPSAiYXJtIgorCisjIGh0dHBzOi8vYnVnemlsbGEueW9jdG9wcm9qZWN0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9OTQ3NAorIyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTU5ODgwCisjIEpTQyBKSVQgY2FuIGJ1aWxkIG9uIEFSTXY3IHdpdGggLW1hcm0sIGJ1dCBkb2Vzbid0IHdvcmsgb24gcnVudGltZS4KKyMgVXBzdHJlYW0gb25seSB0ZXN0cyByZWd1bGFybHkgdGhlIEpTQyBKSVQgb24gQVJNdjcgd2l0aCBUaHVtYjIgKC1tdGh1bWIpLgorQVJNX0lOU1RSVUNUSU9OX1NFVF9hcm12N2EgPSAidGh1bWIiCitBUk1fSU5TVFJVQ1RJT05fU0VUX2FybXY3ciA9ICJ0aHVtYiIKK0FSTV9JTlNUUlVDVElPTl9TRVRfYXJtdjd2ZSA9ICJ0aHVtYiIKKworIyBXZWJLaXQyLTQuMDogLi4vLi4vbGliZ3BnLWVycm9yLTEuMjEvc3JjL3Bvc2l4LWxvY2suYzoxMTk6IGdldF9sb2NrX29iamVjdDogQXNzZXJ0aW9uIGAhInNpemVvZiBsb2NrIG9iaiInIGZhaWxlZC4KKyMgcWVtdTogdW5jYXVnaHQgdGFyZ2V0IHNpZ25hbCA2IChBYm9ydGVkKSAtIGNvcmUgZHVtcGVkCitFWFRSQV9PRUNNQUtFX2FwcGVuZF9taXBzNjQgPSAiIC1ERU5BQkxFX0lOVFJPU1BFQ1RJT049T0ZGIC1ERU5BQkxFX0dUS0RPQz1PRkYiCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvYXByL2Fwcl8xLjUuMi5iYiBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9hcHIvYXByXzEuNS4yLmJiCmluZGV4IGRiMTUzMDUuLjMwMmM5MzUgMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9hcHIvYXByXzEuNS4yLmJiCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9hcHIvYXByXzEuNS4yLmJiCkBAIC0zOCw2ICszOCw5IEBACiAjIHg4Nl82NC1saW51eC1saWJ0b29sOiAgIGVycm9yOiBzcGVjaWZ5IGEgdGFnIHdpdGggJy0tdGFnJwogQ0NBQ0hFID0gIiIKIAorUEFDS0FHRUNPTkZJRyA/Pz0gIiR7QGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCAnaXB2NicsICdpcHY2JywgJycsIGQpfSIKK1BBQ0tBR0VDT05GSUdbaXB2Nl0gPSAiLS1lbmFibGUtaXB2NiwtLWRpc2FibGUtaXB2NiwiCisKIGRvX2NvbmZpZ3VyZV9wcmVwZW5kKCkgewogCSMgQXZvaWQgYWJzb2x1dGUgcGF0aHMgZm9yIGdyZXAgc2luY2UgaXQgY2F1c2VzIGZhaWx1cmVzCiAJIyB3aGVuIHVzaW5nIHNzdGF0ZSBiZXR3ZWVuIGRpZmZlcmVudCBob3N0cyB3aXRoIGRpZmZlcmVudApkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2FyZ3Atc3RhbmRhbG9uZS9hcmdwLXN0YW5kYWxvbmVfMS4zLmJiIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2FyZ3Atc3RhbmRhbG9uZS9hcmdwLXN0YW5kYWxvbmVfMS4zLmJiCmluZGV4IGQ2MWM4YmUuLmJkMGNmZGYgMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9hcmdwLXN0YW5kYWxvbmUvYXJncC1zdGFuZGFsb25lXzEuMy5iYgorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvYXJncC1zdGFuZGFsb25lL2FyZ3Atc3RhbmRhbG9uZV8xLjMuYmIKQEAgLTEsNyArMSw3IEBACiAjIENvcHlyaWdodCAoQykgMjAxNSBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgogIyBSZWxlYXNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UgKHNlZSBDT1BZSU5HLk1JVCBmb3IgdGhlIHRlcm1zKQogCi1ERVNDUklQVElPTiA9ICJHbGliYyBoaWVyYXJjaGljYWwgYXJndW1lbnQgcGFyc2luZyBzdGFuZGFsb25lIGxpYnJhcnkiCitTVU1NQVJZID0gIkdsaWJjIGhpZXJhcmNoaWNhbCBhcmd1bWVudCBwYXJzaW5nIHN0YW5kYWxvbmUgbGlicmFyeSIKIEhPTUVQQUdFID0gImh0dHA6Ly93d3cubHlzYXRvci5saXUuc2Uvfm5pc3NlL21pc2MvIgogTElDRU5TRSA9ICJMR1BMLTIuMSIKIExJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL2FyZ3AuaDtiZWdpbmxpbmU9MTtlbmRsaW5lPTIwO21kNT0wMDhiN2U1M2RlYTZmOWUxZDlmZGVmMGQ5Y2YzMTg0YSIKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9hdGsvYXQtc3BpMi1hdGtfMi4xOC4xLmJiIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2F0ay9hdC1zcGkyLWF0a18yLjE4LjEuYmIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGI4YTkzZjMuLjAwMDAwMDAKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2F0ay9hdC1zcGkyLWF0a18yLjE4LjEuYmIKKysrIC9kZXYvbnVsbApAQCAtMSwyMSArMCwwIEBACi1TVU1NQVJZID0gIkFULVNQSSAyIFRvb2xraXQgQnJpZGdlIgotTElDRU5TRSA9ICJMR1BMdjIiCi1MSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT1lOWYyODhiYTk4MmQ2MDUxOGYzNzViNTg5ODI4Mzg4NiIKLQotTUFKX1ZFUiA9ICIke0BvZS51dGlscy50cmltX3ZlcnNpb24oIiR7UFZ9IiwgMil9IgotCi1TUkNfVVJJID0gIiR7R05PTUVfTUlSUk9SfS8ke0JQTn0vJHtNQUpfVkVSfS8ke0JQTn0tJHtQVn0udGFyLnh6IgotU1JDX1VSSVttZDVzdW1dID0gImQ3MDQwYTU1ZGY5NzU4NjVhYjBkNzRhNGIzMjVhZmI1IgotU1JDX1VSSVtzaGEyNTZzdW1dID0gImM0YjE1ZjkzODZkMzRkNDY0ZGRhZDVmNmNjODU2Njk3NDJjMDE2ZGY4NzE0MWNlZWU5MzUxMzI0NTk3OWMxMmQiCi0KLURFUEVORFMgPSAiZGJ1cyBnbGliLTIuMCBhdGsgYXQtc3BpMi1jb3JlIgotCi1pbmhlcml0IGF1dG90b29scyBwa2djb25maWcgZGlzdHJvX2ZlYXR1cmVzX2NoZWNrIHVwc3RyZWFtLXZlcnNpb24taXMtZXZlbgotCi0jIFRoZSBhdC1zcGkyLWNvcmUgcmVxdWlyZXMgeDExIGluIERJU1RST19GRUFUVVJFUwotUkVRVUlSRURfRElTVFJPX0ZFQVRVUkVTID0gIngxMSIKLQotUEFDS0FHRVMgPSsgIiR7UE59LWdub21lICR7UE59LWd0azIiCi0KLUZJTEVTXyR7UE59LWdub21lID0gIiR7bGliZGlyfS9nbm9tZS1zZXR0aW5ncy1kYWVtb24tMy4wL2d0ay1tb2R1bGVzIgotRklMRVNfJHtQTn0tZ3RrMiA9ICIke2xpYmRpcn0vZ3RrLTIuMC9tb2R1bGVzL2xpYmF0ay1icmlkZ2UuKiIKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9hdGsvYXQtc3BpMi1hdGtfMi4yMC4xLmJiIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2F0ay9hdC1zcGkyLWF0a18yLjIwLjEuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDQxMjBiNgotLS0gL2Rldi9udWxsCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9hdGsvYXQtc3BpMi1hdGtfMi4yMC4xLmJiCkBAIC0wLDAgKzEsMjEgQEAKK1NVTU1BUlkgPSAiQVQtU1BJIDIgVG9vbGtpdCBCcmlkZ2UiCitMSUNFTlNFID0gIkxHUEx2MiIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PWU5ZjI4OGJhOTgyZDYwNTE4ZjM3NWI1ODk4MjgzODg2IgorCitNQUpfVkVSID0gIiR7QG9lLnV0aWxzLnRyaW1fdmVyc2lvbigiJHtQVn0iLCAyKX0iCisKK1NSQ19VUkkgPSAiJHtHTk9NRV9NSVJST1J9LyR7QlBOfS8ke01BSl9WRVJ9LyR7QlBOfS0ke1BWfS50YXIueHoiCitTUkNfVVJJW21kNXN1bV0gPSAiMjMzMDliNmY4ZTE2MjM4NzFhY2U2MzQ3ZmI3MzRkY2UiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiMjM1OGE3OTRlOTE4ZThmNDdjZTBjNzM3MGVlZThmYzhhNjIwN2ZmMWFmZTk3NmVjOWZmNTQ3YTAzMjc3YmY4ZSIKKworREVQRU5EUyA9ICJkYnVzIGdsaWItMi4wIGF0ayBhdC1zcGkyLWNvcmUiCisKK2luaGVyaXQgYXV0b3Rvb2xzIHBrZ2NvbmZpZyBkaXN0cm9fZmVhdHVyZXNfY2hlY2sgdXBzdHJlYW0tdmVyc2lvbi1pcy1ldmVuCisKKyMgVGhlIGF0LXNwaTItY29yZSByZXF1aXJlcyB4MTEgaW4gRElTVFJPX0ZFQVRVUkVTCitSRVFVSVJFRF9ESVNUUk9fRkVBVFVSRVMgPSAieDExIgorCitQQUNLQUdFUyA9KyAiJHtQTn0tZ25vbWUgJHtQTn0tZ3RrMiIKKworRklMRVNfJHtQTn0tZ25vbWUgPSAiJHtsaWJkaXJ9L2dub21lLXNldHRpbmdzLWRhZW1vbi0zLjAvZ3RrLW1vZHVsZXMiCitGSUxFU18ke1BOfS1ndGsyID0gIiR7bGliZGlyfS9ndGstMi4wL21vZHVsZXMvbGliYXRrLWJyaWRnZS4qIgpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2F0ay9hdC1zcGkyLWNvcmUvMDAwMS1idWlsZC1BZGQtd2l0aC1zeXN0ZW1kdXNlcnVuaXRkaXIucGF0Y2ggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvYXRrL2F0LXNwaTItY29yZS8wMDAxLWJ1aWxkLUFkZC13aXRoLXN5c3RlbWR1c2VydW5pdGRpci5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MTAzZWFhCi0tLSAvZGV2L251bGwKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2F0ay9hdC1zcGkyLWNvcmUvMDAwMS1idWlsZC1BZGQtd2l0aC1zeXN0ZW1kdXNlcnVuaXRkaXIucGF0Y2gKQEAgLTAsMCArMSw0OSBAQAorRnJvbSAyZjQ3Yzk3NWViZTUyYjY5MTZhNDVhZGUwMjNhZTNiYWMyMWJiMGUwIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogSnVzc2kgS3Vra29uZW4gPGp1c3NpLmt1a2tvbmVuQGludGVsLmNvbT4KK0RhdGU6IFR1ZSwgMjEgSnVuIDIwMTYgMTY6MDA6MDIgKzAzMDAKK1N1YmplY3Q6IFtQQVRDSF0gYnVpbGQ6IEFkZCAtLXdpdGgtc3lzdGVtZHVzZXJ1bml0ZGlyCisKK0RlZmF1bHQgdG8gInBrZy1jb25maWcgLS12YXJpYWJsZT1zeXN0ZW1kdXNlcnVuaXRkaXIgc3lzdGVtZCIgYnV0CithbGxvdyBvdmVycmlkaW5nIHRoZSB2YWx1ZS4KKworVXBzdHJlYW0tU3RhdHVzOiBTdWJtaXR0ZWQgW2h0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03Njc5MTFdCitTaWduZWQtb2ZmLWJ5OiBKdXNzaSBLdWtrb25lbiA8anVzc2kua3Vra29uZW5AaW50ZWwuY29tPgorLS0tCisgYnVzL01ha2VmaWxlLmFtIHwgMiArLQorIGNvbmZpZ3VyZS5hYyAgICB8IDcgKysrKysrKworIDIgZmlsZXMgY2hhbmdlZCwgOCBpbnNlcnRpb25zKCspLCAxIGRlbGV0aW9uKC0pCisKK2RpZmYgLS1naXQgYS9idXMvTWFrZWZpbGUuYW0gYi9idXMvTWFrZWZpbGUuYW0KK2luZGV4IGIxODllMDIuLjUyZmJiMGIgMTAwNjQ0CistLS0gYS9idXMvTWFrZWZpbGUuYW0KKysrKyBiL2J1cy9NYWtlZmlsZS5hbQorQEAgLTI2LDcgKzI2LDcgQEAgZGJ1c3NlcnZpY2VfREFUQSA9IG9yZy5hMTF5LkJ1cy5zZXJ2aWNlCisgb3JnLmExMXkuQnVzLnNlcnZpY2U6IG9yZy5hMTF5LkJ1cy5zZXJ2aWNlLmluCisgCXNlZCAtZSAkKHN1YnN0aXR1dGlvbnMpICQ8ID4gJEAudG1wICYmIG12ICRALnRtcCAkQAorIAorLXN5c3RlbWRfdXNlcmRpciA9ICQocHJlZml4KS9saWIvc3lzdGVtZC91c2VyCisrc3lzdGVtZF91c2VyZGlyID0gJChzeXN0ZW1kdXNlcnVuaXRkaXIpCisgc3lzdGVtZF91c2VyX0RBVEEgPSBhdC1zcGktZGJ1cy1idXMuc2VydmljZQorIGF0LXNwaS1kYnVzLWJ1cy5zZXJ2aWNlOiBhdC1zcGktZGJ1cy1idXMuc2VydmljZS5pbiBNYWtlZmlsZQorIAlzZWQgLWUgJChzdWJzdGl0dXRpb25zKSAkPCA+ICRALnRtcCAmJiBtdiAkQC50bXAgJEAKK2RpZmYgLS1naXQgYS9jb25maWd1cmUuYWMgYi9jb25maWd1cmUuYWMKK2luZGV4IGY5MDYxYzIuLjJiOGVlZWQgMTAwNjQ0CistLS0gYS9jb25maWd1cmUuYWMKKysrKyBiL2NvbmZpZ3VyZS5hYworQEAgLTE4Myw2ICsxODMsMTMgQEAgZWxzZQorIGZpCisgQUNfU1VCU1QoREJVU19TRVJWSUNFU19ESVIpCisgCisrQUNfQVJHX1dJVEgoW3N5c3RlbWR1c2VydW5pdGRpcl0sCisrICAgICAgICAgICAgQVNfSEVMUF9TVFJJTkcoWy0td2l0aC1zeXN0ZW1kdXNlcnVuaXRkaXI9RElSXSwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICBbRGlyZWN0b3J5IGZvciBzeXN0ZW1kIHNlcnZpY2UgZmlsZXNdKSwKKysgICAgICAgICAgICBbXSwKKysgICAgICAgICAgICBbd2l0aF9zeXN0ZW1kdXNlcnVuaXRkaXI9JCgkUEtHX0NPTkZJRyAtLXZhcmlhYmxlPXN5c3RlbWR1c2VydW5pdGRpciBzeXN0ZW1kKV0pCisrQUNfU1VCU1QoW3N5c3RlbWR1c2VydW5pdGRpcl0sIFskd2l0aF9zeXN0ZW1kdXNlcnVuaXRkaXJdKQorKworIEFDX1BBVEhfUFJPRyhHTElCX01LRU5VTVMsIGdsaWItbWtlbnVtcykKKyAKKyBHT0JKRUNUX0lOVFJPU1BFQ1RJT05fQ0hFQ0soWzAuOS42XSkKKy0tIAorMi4xLjQKKwpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2F0ay9hdC1zcGkyLWNvcmVfMi4xOC4zLmJiIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2F0ay9hdC1zcGkyLWNvcmVfMi4xOC4zLmJiCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlY2VkNTk3Li4wMDAwMDAwCi0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9hdGsvYXQtc3BpMi1jb3JlXzIuMTguMy5iYgorKysgL2Rldi9udWxsCkBAIC0xLDIzICswLDAgQEAKLVNVTU1BUlkgPSAiQXNzaXN0aXZlIFRlY2hub2xvZ3kgU2VydmljZSBQcm92aWRlciBJbnRlcmZhY2UgKGRidXMgY29yZSkiCi1MSUNFTlNFID0gIkxHUEx2MiIKLUxJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PWU5ZjI4OGJhOTgyZDYwNTE4ZjM3NWI1ODk4MjgzODg2IgotCi1NQUpfVkVSID0gIiR7QG9lLnV0aWxzLnRyaW1fdmVyc2lvbigiJHtQVn0iLCAyKX0iCi0KLVNSQ19VUkkgPSAiJHtHTk9NRV9NSVJST1J9LyR7QlBOfS8ke01BSl9WRVJ9LyR7QlBOfS0ke1BWfS50YXIueHogXAotICAgICAgICAgICBmaWxlOi8vMDAwMS1ubHMubTQtVGFrZS1pdC1mcm9tLWdldHRleHQtMC4xNS5wYXRjaCBcCi0gICAgICAgICAgIgotCi1TUkNfVVJJW21kNXN1bV0gPSAiZmMxODgwMWU1NmY2Y2U2OTE0MTI2ZjgzN2Q0MmY1NTYiCi1TUkNfVVJJW3NoYTI1NnN1bV0gPSAiYWRhMjZhZGQ5NDE1NWY5N2QwZjYwMWEyMGNiN2EwZTNmZDNiYTE1ODhjMzUyMGI3Mjg4MzE2NDk0MDI3ZDYyOSIKLQotREVQRU5EUyA9ICJkYnVzIGdsaWItMi4wIHZpcnR1YWwvbGlieDExIGxpYnhpIGxpYnh0c3QgaW50bHRvb2wtbmF0aXZlIGdldHRleHQtbmF0aXZlIgotCi1pbmhlcml0IGF1dG90b29scyBndGstZG9jIHBrZ2NvbmZpZyBkaXN0cm9fZmVhdHVyZXNfY2hlY2sgdXBzdHJlYW0tdmVyc2lvbi1pcy1ldmVuIGdvYmplY3QtaW50cm9zcGVjdGlvbgotIyBkZXBlbmRzIG9uIHZpcnR1YWwvbGlieDExCi1SRVFVSVJFRF9ESVNUUk9fRkVBVFVSRVMgPSAieDExIgotCi1FWFRSQV9PRUNPTkYgPSAiLS1kaXNhYmxlLXhldmllIC0td2l0aC1kYnVzLWRhZW1vbmRpcj0ke2JpbmRpcn0iCi0KLUZJTEVTXyR7UE59ICs9ICIke2RhdGFkaXJ9L2RidXMtMS9zZXJ2aWNlcy8qLnNlcnZpY2UgXAotICAgICAgICAgICAgICAgICR7ZGF0YWRpcn0vZGJ1cy0xL2FjY2Vzc2liaWxpdHktc2VydmljZXMvKi5zZXJ2aWNlIgpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2F0ay9hdC1zcGkyLWNvcmVfMi4yMC4yLmJiIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2F0ay9hdC1zcGkyLWNvcmVfMi4yMC4yLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE5OTI0M2EKLS0tIC9kZXYvbnVsbAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvYXRrL2F0LXNwaTItY29yZV8yLjIwLjIuYmIKQEAgLTAsMCArMSwyOSBAQAorU1VNTUFSWSA9ICJBc3Npc3RpdmUgVGVjaG5vbG9neSBTZXJ2aWNlIFByb3ZpZGVyIEludGVyZmFjZSAoZGJ1cyBjb3JlKSIKK0xJQ0VOU0UgPSAiTEdQTHYyIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9ZTlmMjg4YmE5ODJkNjA1MThmMzc1YjU4OTgyODM4ODYiCisKK01BSl9WRVIgPSAiJHtAb2UudXRpbHMudHJpbV92ZXJzaW9uKCIke1BWfSIsIDIpfSIKKworU1JDX1VSSSA9ICIke0dOT01FX01JUlJPUn0vJHtCUE59LyR7TUFKX1ZFUn0vJHtCUE59LSR7UFZ9LnRhci54eiBcCisgICAgICAgICAgIGZpbGU6Ly8wMDAxLW5scy5tNC1UYWtlLWl0LWZyb20tZ2V0dGV4dC0wLjE1LnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovLzAwMDEtYnVpbGQtQWRkLXdpdGgtc3lzdGVtZHVzZXJ1bml0ZGlyLnBhdGNoIFwKKyAgICAgICAgICAiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICJmNmY2MzAzZGEyZTcyMzE3Zjg4MTcwM2Y0MGJmMGM2MiIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICI4OGE0ZGU5ZDQzMTM5ZjEzY2NhNTMxYjQ3YjkwMWJjMWI1NmUwYWIwNmJhODk5MTI2NjQ0YWJkNGFjMTZhMTQzIgorCitERVBFTkRTID0gImRidXMgZ2xpYi0yLjAgdmlydHVhbC9saWJ4MTEgbGlieGkgbGlieHRzdCBpbnRsdG9vbC1uYXRpdmUiCisKK2luaGVyaXQgYXV0b3Rvb2xzIGd0ay1kb2MgZ2V0dGV4dCBzeXN0ZW1kIHBrZ2NvbmZpZyBkaXN0cm9fZmVhdHVyZXNfY2hlY2sgdXBzdHJlYW0tdmVyc2lvbi1pcy1ldmVuIGdvYmplY3QtaW50cm9zcGVjdGlvbgorIyBkZXBlbmRzIG9uIHZpcnR1YWwvbGlieDExCitSRVFVSVJFRF9ESVNUUk9fRkVBVFVSRVMgPSAieDExIgorCitFWFRSQV9PRUNPTkYgPSAiLS1kaXNhYmxlLXhldmllIFwKKyAgICAgICAgICAgICAgICAtLXdpdGgtc3lzdGVtZHVzZXJ1bml0ZGlyPSR7c3lzdGVtZF91c2VyX3VuaXRkaXJ9IFwKKyAgICAgICAgICAgICAgICAtLXdpdGgtZGJ1cy1kYWVtb25kaXI9JHtiaW5kaXJ9IgorCitGSUxFU18ke1BOfSArPSAiJHtkYXRhZGlyfS9kYnVzLTEvc2VydmljZXMvKi5zZXJ2aWNlIFwKKyAgICAgICAgICAgICAgICAke2RhdGFkaXJ9L2RidXMtMS9hY2Nlc3NpYmlsaXR5LXNlcnZpY2VzLyouc2VydmljZSBcCisgICAgICAgICAgICAgICAgJHtkYXRhZGlyfS9kZWZhdWx0cy9hdC1zcGkyIFwKKyAgICAgICAgICAgICAgICAke3N5c3RlbWRfdXNlcl91bml0ZGlyfS9hdC1zcGktZGJ1cy1idXMuc2VydmljZcKgXAorICAgICAgICAgICAgICAgICIKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9hdGsvYXRrXzIuMTguMC5iYiBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9hdGsvYXRrXzIuMTguMC5iYgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggM2MwZTgyZC4uMDAwMDAwMAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvYXRrL2F0a18yLjE4LjAuYmIKKysrIC9kZXYvbnVsbApAQCAtMSwyMSArMCwwIEBACi1TVU1NQVJZID0gIkFjY2Vzc2liaWxpdHkgdG9vbGtpdCBmb3IgR05PTUUiCi1IT01FUEFHRSA9ICJodHRwOi8vbGl2ZS5nbm9tZS5vcmcvR0FQLyIKLUJVR1RSQUNLRVIgPSAiaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvIgotU0VDVElPTiA9ICJ4MTEvbGlicyIKLQotTElDRU5TRSA9ICJHUEx2MisgJiBMR1BMdjIrIgotTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9M2JmNTAwMDJhZWZkMDAyZjQ5ZTdiYjg1NDA2M2Y3ZTcgXAotICAgICAgICAgICAgICAgICAgICBmaWxlOi8vYXRrL2F0a3V0aWwuYztlbmRsaW5lPTE4O21kNT02ZmQzMWNkMmZkYzliMzBmNjE5Y2E4ZDgxOWJjMTJkMyBcCi0gICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9hdGsvYXRrLmg7ZW5kbGluZT0xODttZDU9ZmNkNzcxMDE4N2UwZWFlNDg1ZTM1NmMzMGQxYjBjM2IiCi0KLURFUEVORFMgPSAiZ2xpYi0yLjAiCi0KLWluaGVyaXQgZ25vbWViYXNlIGd0ay1kb2MgdXBzdHJlYW0tdmVyc2lvbi1pcy1ldmVuIGdvYmplY3QtaW50cm9zcGVjdGlvbgotCi1TUkNfVVJJW2FyY2hpdmUubWQ1c3VtXSA9ICJmZDM2NzhmMzUwMDRiNGM5MmUzZGEzOTM1Njk5NjA1NCIKLVNSQ19VUklbYXJjaGl2ZS5zaGEyNTZzdW1dID0gImNlNmM0OGQ3N2JmOTUxMDgzMDI5ZDVhMzk2ZGQ1NTJkODM2ZmZmM2MxNzE1ZDNhNzAyMmU5MTdlNDZkMGM5MmIiCi0KLUJCQ0xBU1NFWFRFTkQgPSAibmF0aXZlIgotCi1FWFRSQV9PRUNPTkYgPSAiLS1kaXNhYmxlLWdsaWJ0ZXN0IFwKLSAgICAgICAgICAgICAgICIKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9hdGsvYXRrXzIuMjAuMC5iYiBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9hdGsvYXRrXzIuMjAuMC5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNDIyMzU0Ci0tLSAvZGV2L251bGwKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2F0ay9hdGtfMi4yMC4wLmJiCkBAIC0wLDAgKzEsMjEgQEAKK1NVTU1BUlkgPSAiQWNjZXNzaWJpbGl0eSB0b29sa2l0IGZvciBHTk9NRSIKK0hPTUVQQUdFID0gImh0dHA6Ly9saXZlLmdub21lLm9yZy9HQVAvIgorQlVHVFJBQ0tFUiA9ICJodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy8iCitTRUNUSU9OID0gIngxMS9saWJzIgorCitMSUNFTlNFID0gIkdQTHYyKyAmIExHUEx2MisiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT0zYmY1MDAwMmFlZmQwMDJmNDllN2JiODU0MDYzZjdlNyBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9hdGsvYXRrdXRpbC5jO2VuZGxpbmU9MTg7bWQ1PTZmZDMxY2QyZmRjOWIzMGY2MTljYThkODE5YmMxMmQzIFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL2F0ay9hdGsuaDtlbmRsaW5lPTE4O21kNT1mY2Q3NzEwMTg3ZTBlYWU0ODVlMzU2YzMwZDFiMGMzYiIKKworREVQRU5EUyA9ICJnbGliLTIuMCIKKworaW5oZXJpdCBnbm9tZWJhc2UgZ3RrLWRvYyBnZXR0ZXh0IHVwc3RyZWFtLXZlcnNpb24taXMtZXZlbiBnb2JqZWN0LWludHJvc3BlY3Rpb24KKworU1JDX1VSSVthcmNoaXZlLm1kNXN1bV0gPSAiNTE4N2IwOTcyZjRkMzkwNWYyODU1NDBiMzEzOTVlMjAiCitTUkNfVVJJW2FyY2hpdmUuc2hhMjU2c3VtXSA9ICI0OTNhNTBmNmM0YTAyNWY1ODhkMzgwYTU1MWVjMjc3ZTA3MGIyOGE4MmU2M2VmOGUzYzA2YjNlZTdjMTIzOGYwIgorCitCQkNMQVNTRVhURU5EID0gIm5hdGl2ZSIKKworRVhUUkFfT0VDT05GID0gIi0tZGlzYWJsZS1nbGlidGVzdCBcCisgICAgICAgICAgICAgICAiCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvYXR0ci9hY2wuaW5jIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2F0dHIvYWNsLmluYwppbmRleCAxOThmYjRmLi4zN2EwMjE4IDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvYXR0ci9hY2wuaW5jCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9hdHRyL2FjbC5pbmMKQEAgLTE0LDYgKzE0LDcgQEAKICAgICAgICAgICAgZmlsZTovL2FjbC1maXgtdGhlLW9yZGVyLW9mLWV4cGVjdGVkLW91dHB1dC1vZi1nZXRmYWNsLnBhdGNoIFwKICAgICAgICAgICAgZmlsZTovL3Rlc3QtZml4LWluc3VmZmljaWVudC1xdW90aW5nLW9mLnBhdGNoIFwKICAgICAgICAgICAgZmlsZTovL3Rlc3QtZml4dXBzLW9uLVNFTGludXgtbWFjaGluZXMtZm9yLXJvb3QtdGVzdGNhc2VzLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL3Rlc3QtZml4LWRpcmVjdG9yeS1wZXJtaXNzaW9ucy5wYXRjaCBcCiAiCiAKIHJlcXVpcmUgZWEtYWNsLmluYwpAQCAtMzMsNyArMzQsNyBAQAogaW5oZXJpdCBwdGVzdAogCiBkb19pbnN0YWxsX3B0ZXN0KCkgewotCXRhciAtY2YgLSB0ZXN0LyAtLWV4Y2x1ZGUgbmZzIHwgKCBjZCAke0R9JHtQVEVTVF9QQVRIfSAmJiB0YXIgLXhmIC0gKQorCXRhciAtYyAtLWV4Y2x1ZGU9bmZzIHRlc3QvIHwgKCBjZCAke0R9JHtQVEVTVF9QQVRIfSAmJiB0YXIgLXhmIC0gKQogCW1rZGlyICR7RH0ke1BURVNUX1BBVEh9L2luY2x1ZGUKIAljcCAke1N9L2luY2x1ZGUvYnVpbGRkZWZzICR7U30vaW5jbHVkZS9idWlsZG1hY3JvcyAke1N9L2luY2x1ZGUvYnVpbGRydWxlcyAke0R9JHtQVEVTVF9QQVRIfS9pbmNsdWRlLwogfQpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2F0dHIvYWNsL3J1bi1wdGVzdCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9hdHRyL2FjbC9ydW4tcHRlc3QKaW5kZXggM2IzMWNjOS4uYTU2OTQ2ZCAxMDA2NDQKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2F0dHIvYWNsL3J1bi1wdGVzdAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvYXR0ci9hY2wvcnVuLXB0ZXN0CkBAIC0xLDcgKzEsNjQgQEAKICMhL2Jpbi9zaAorIworI1RoaXMgc2NyaXB0IGlzIHVzZWQgdG8gcnVuIGFjbCB0ZXN0IHN1aXRlcwogCi1ncGFzc3dkIC1hIGRhZW1vbiBiaW4KLW1ha2UgLUMgdGVzdCAtayB0ZXN0cyByb290LXRlc3RzIHxzZWQgXAotIC1lICdzfF5cWy4qXF0gXCguKlwpIC0tIG9rJHxQQVNTOiBcMXwnIFwKLSAtZSAnc3xeXFsuKlxdIFwoLipcKSAtLSBmYWlsZWR8RkFJTDogXDF8JwotZ3Bhc3N3ZCAtZCBkYWVtb24gYmluCisjdW1hc2sgMDc3CisKK0VYVDNfSU1BR0U9ZXh0My5pbWcKK0VYVDNfTU9VTlRfUE9JTlQ9L21udC9leHQzCisKK3RyYXAgJ3JtIC1mICR7RVhUM19JTUFHRX0nIEVYSVQKKworZGQgaWY9L2Rldi96ZXJvIG9mPSR7RVhUM19JTUFHRX0gYnM9MU0gY291bnQ9MQoraWYgWyAiJD8iIC1lcSAwIF07IHRoZW4KKwllY2hvICJQQVNTOiBkdW1wIGV4dDMuaW1nIgorZWxzZQorCWVjaG8gIkZBSUw6IGR1bXAgZXh0My5pbWciCisJZXhpdCAxCitmaQorCitta2ZzLmV4dDMgLUYgJHtFWFQzX0lNQUdFfQoraWYgWyAiJD8iIC1lcSAwIF07IHRoZW4KKwllY2hvICJQQVNTOiBta2ZzLmV4dDMgLUYgZXh0My5pbWciCitlbHNlCisJZWNobyAiRkFJTDogbWtmcy5leHQzIC1GIGV4dDMuaW1nIgorCWV4aXQgMQorZmkKKworaWYgWyAtZCAkRVhUM19NT1VOVF9QT0lOVCBdOyB0aGVuCisJZWNobyAibW91bnQgcG9pbnQgZXhpc3QiCitlbHNlCisJbWtkaXIgLXAgJEVYVDNfTU9VTlRfUE9JTlQKK2ZpCisKKworbW91bnQgLW8gbG9vcCxydyxhY2wgICR7RVhUM19JTUFHRX0gJEVYVDNfTU9VTlRfUE9JTlQKK2lmIFsgIiQ/IiAtZXEgMCBdOyB0aGVuCisJZWNobyAiUEFTUzogbW91bnQgZXh0My5pbWciCitlbHNlCisJZWNobyAiRkFJTDogbW91bnQgZXh0My5pbWciCisJZXhpdCAxCitmaQorCitjcCAtcmYgLi90ZXN0LyAkRVhUM19NT1VOVF9QT0lOVAorCitjZCAkRVhUM19NT1VOVF9QT0lOVC90ZXN0LworCitpZglzZWQgLWUgJ3MhXmJpbjp4OjI6JCFiaW46eDoyOmRhZW1vbiEnIDwgL2V0Yy9ncm91cCA+IGd0bXAKK3RoZW4JaWYJY3AgL2V0Yy9ncm91cCBncm91cC5vcmlnOworCXRoZW4JY3AgZ3RtcCAvZXRjL2dyb3VwCisJCW1ha2UgIC1rIHRlc3RzIHJvb3QtdGVzdHMgfCBzZWQgXAorCQkJLWUgJ3N8XlxbLipcXSBcKC4qXCkgLS0gb2skfFBBU1M6IFwxfCcgXAorCSAgCQktZSAnc3xeXFsuKlxdIFwoLipcKSAtLSBmYWlsZWR8RkFJTDogXDF8JworCQljcCBncm91cC5vcmlnIC9ldGMvZ3JvdXAKKwllbHNlCWVjaG8gIkZBSUw6IGNvdWxkbid0IHNhdmUgb3JpZ2luYWwgZ3JvdXAgZmlsZS4iCisJCWV4aXQgMQorCWZpCitlbHNlCWVjaG8gIkZBSUw6IGNvdWxkbid0IGNyZWF0ZSBtb2RpZmllZCBncm91cCBmaWxlLiIKKwlleGl0IDEKK2ZpCisKK2NkIC0KK3Vtb3VudCAkRVhUM19NT1VOVF9QT0lOVAorcm0gLXJmICRFWFQzX01PVU5UX1BPSU5UCitybSAkRVhUM19JTUFHRQpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2F0dHIvYWNsL3Rlc3QtZml4LWRpcmVjdG9yeS1wZXJtaXNzaW9ucy5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9hdHRyL2FjbC90ZXN0LWZpeC1kaXJlY3RvcnktcGVybWlzc2lvbnMucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2Q0NTEwYwotLS0gL2Rldi9udWxsCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9hdHRyL2FjbC90ZXN0LWZpeC1kaXJlY3RvcnktcGVybWlzc2lvbnMucGF0Y2gKQEAgLTAsMCArMSwyNCBAQAorY29tbWl0IGM0NWJhZTg0ODE3YTcwZmVmNmMyYjY2MWEwN2E0OTJhMGQyM2FlODUKK0F1dGhvcjogUGV0ZXIgU2VlYmFjaCA8cGV0ZXIuc2VlYmFjaEB3aW5kcml2ZXIuY29tPgorRGF0ZTogICBXZWQgTWF5IDExIDE1OjE2OjA2IDIwMTYgLTA1MDAKKworICAgIEZpeCBwZXJtaXNzaW9ucyBvbiB0ZW1wb3JhcnkgZGlyZWN0b3J5CisKKyAgICBUaGUgdGVtcG9yYXJ5IGRpcmVjdG9yeSdzIHBlcm1pc3Npb25zIGhhdmUgdG8gYWxsb3cgb3RoZXIgdXNlcnMgdG8KKyAgICB2aWV3IHRoZSBkaXJlY3RvcnkuIEEgZGVmYXVsdCB1bWFzayBvZiAwMjIgaXMgY29tbW9uLCBidXQgbm90IG1hbmRhdG9yeSwKKyAgICBhbmQgc2VjdXJlIHN5c3RlbXMgbWF5IGhhdmUgbW9yZSByZXN0cmljdGl2ZSBkZWZhdWx0cy4KKworICAgIFNpZ25lZC1vZmYtYnk6IFBldGVyIFNlZWJhY2ggPHBldGVyLnNlZWJhY2hAd2luZHJpdmVyLmNvbT4KKworZGlmZiAtLWdpdCBhL3Rlc3Qvcm9vdC9wZXJtaXNzaW9ucy50ZXN0IGIvdGVzdC9yb290L3Blcm1pc3Npb25zLnRlc3QKK2luZGV4IDQyNjE1ZjUuLjA5OGI1MmEgMTAwNjQ0CistLS0gYS90ZXN0L3Jvb3QvcGVybWlzc2lvbnMudGVzdAorKysrIGIvdGVzdC9yb290L3Blcm1pc3Npb25zLnRlc3QKK0BAIC0xNiw2ICsxNiw3IEBAIENyeSBpbW1lZGlhdGVseSBpZiB3ZSBhcmUgbm90IHJ1bm5pbmcgYXMgcm9vdC4KKyBGaXJzdCwgc2V0IHVwIGEgdGVtcG9yYXJ5IGRpcmVjdG9yeSBhbmQgY3JlYXRlIGEgcmVndWxhciBmaWxlIHdpdGgKKyBkZWZpbmVkIHBlcm1pc3Npb25zLgorIAorKwkkIHVtYXNrIDAyMgorIAkkIG1rZGlyIGQKKyAJJCBjZCBkCisgCSQgdW1hc2sgMDI3CmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvYXR0ci9hdHRyLmluYyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9hdHRyL2F0dHIuaW5jCmluZGV4IDY4NjA5NzguLmU4YjVkMDUgMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9hdHRyL2F0dHIuaW5jCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9hdHRyL2F0dHIuaW5jCkBAIC0yLDcgKzIsNyBAQAogSE9NRVBBR0UgPSAiaHR0cDovL3NhdmFubmFoLm5vbmdudS5vcmcvcHJvamVjdHMvYXR0ci8iCiBTRUNUSU9OID0gImxpYnMiCiAKLURFUEVORFMgPSAibmN1cnNlcyB2aXJ0dWFsL2xpYmludGwiCitERVBFTkRTID0gInZpcnR1YWwvbGliaW50bCIKIAogTElDRU5TRSA9ICJMR1BMdjIuMSsgJiBHUEx2MisiCiBMSUNFTlNFXyR7UE59ID0gIkdQTHYyKyIKQEAgLTI2LDcgKzI2LDcgQEAKIGluaGVyaXQgcHRlc3QKIAogZG9faW5zdGFsbF9wdGVzdCgpIHsKLQl0YXIgLWNmIC0gdGVzdC8gLS1leGNsdWRlIGV4dCB8ICggY2QgJHtEfSR7UFRFU1RfUEFUSH0gJiYgdGFyIC14ZiAtICkKKwl0YXIgLWMgLS1leGNsdWRlPWV4dCB0ZXN0LyB8ICggY2QgJHtEfSR7UFRFU1RfUEFUSH0gJiYgdGFyIC14ZiAtICkKIAlta2RpciAke0R9JHtQVEVTVF9QQVRIfS9pbmNsdWRlCiAJZm9yIGkgaW4gYnVpbGRkZWZzIGJ1aWxkbWFjcm9zIGJ1aWxkcnVsZXM7IFwKIAkgIGRvIGNwICR7U30vaW5jbHVkZS8kaSAke0R9JHtQVEVTVF9QQVRIfS9pbmNsdWRlLzsgXApkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2F0dHIvYXR0cl8yLjQuNDcuYmIgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvYXR0ci9hdHRyXzIuNC40Ny5iYgppbmRleCA0NGVlZTM5Li41NTZjOGU0IDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvYXR0ci9hdHRyXzIuNC40Ny5iYgorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvYXR0ci9hdHRyXzIuNC40Ny5iYgpAQCAtMiw5ICsyLDkgQEAKIAogIyBjb25maWd1cmUuYWMgd2FzIG1pc3NpbmcgZnJvbSB0aGUgcmVsZWFzZSB0YXJiYWxsLiBUaGlzIHNob3VsZCBiZSBmaXhlZCBpbgogIyBmdXR1cmUgcmVsZWFzZXMgb2YgYXR0ciwgcmVtb3ZlIHRoaXMgd2hlbiB1cGRhdGluZyB0aGUgcmVjaXBlLgotU1JDX1VSSV9hcHBlbmQgKz0gImZpbGU6Ly9hdHRyLU1pc3NpbmctY29uZmlndXJlLmFjLnBhdGNoIFwKLSAgICAgICAgICAgICAgICAgICBmaWxlOi8vZG9udC11c2UtZGVjbC1tYWNyb3MucGF0Y2ggXAotICAgICAgICAgICAgICAgICAgIgorU1JDX1VSSSArPSAiZmlsZTovL2F0dHItTWlzc2luZy1jb25maWd1cmUuYWMucGF0Y2ggXAorICAgICAgICAgICAgZmlsZTovL2RvbnQtdXNlLWRlY2wtbWFjcm9zLnBhdGNoIFwKKyAgICAgICAgICAgIgogCiBTUkNfVVJJW21kNXN1bV0gPSAiODRmNThkZWMwMGI2MGYyZGM4ZmQxYzk3MDkyOTFjYzciCiBTUkNfVVJJW3NoYTI1NnN1bV0gPSAiMjU3NzJmNjUzYWM1YjJlM2NlZWI4OWRmNTBlNDY4ODg5MWUyMWY3MjNjNDYwNjM2NTQ4OTcxNjUyYWYwYTg1OSIKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9iYXNoLWNvbXBsZXRpb24vYmFzaC1jb21wbGV0aW9uXzIuMS5iYiBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9iYXNoLWNvbXBsZXRpb24vYmFzaC1jb21wbGV0aW9uXzIuMS5iYgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOGIyNTdkMi4uMDAwMDAwMAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvYmFzaC1jb21wbGV0aW9uL2Jhc2gtY29tcGxldGlvbl8yLjEuYmIKKysrIC9kZXYvbnVsbApAQCAtMSw0MiArMCwwIEBACi1TVU1NQVJZID0gIlByb2dyYW1tYWJsZSBDb21wbGV0aW9uIGZvciBCYXNoIDQiCi1IT01FUEFHRSA9ICJodHRwOi8vYmFzaC1jb21wbGV0aW9uLmFsaW90aC5kZWJpYW4ub3JnLyIKLUJVR1RSQUNLRVIgPSAiaHR0cHM6Ly9hbGlvdGguZGViaWFuLm9yZy9wcm9qZWN0cy9iYXNoLWNvbXBsZXRpb24vIgotCi1MSUNFTlNFID0gIkdQTHYyIgotTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9NzUxNDE5MjYwYWE5NTQ0OTlmN2FiYWFiYWE4ODJiYmUiCi0KLVNFQ1RJT04gPSAiY29uc29sZS91dGlscyIKLQotU1JDX1VSST0iaHR0cDovL2Jhc2gtY29tcGxldGlvbi5hbGlvdGguZGViaWFuLm9yZy9maWxlcy8ke0JQTn0tJHtQVn0udGFyLmJ6MiIKLQotU1JDX1VSSVttZDVzdW1dID0gIjRlMmE5ZjExYTQwNDJhMzhlZTc5ZGRjZDA0OGU4YjllIgotU1JDX1VSSVtzaGEyNTZzdW1dID0gIjJiNjA2ODA0YTdkNWY4MjMzODBhODgyZTBmN2I2YzhhMzdiMGU3NjhlNzJjM2Q0MTA3YzUxZmJlOGE0NmFlNGYiCi1VUFNUUkVBTV9DSEVDS19SRUdFWCA9ICJiYXNoLWNvbXBsZXRpb24tKD9QPHB2ZXI+KD8hMjAwOCkuKylcLnRhciIKLQotUEFSQUxMRUxfTUFLRSA9ICIiCi0KLWluaGVyaXQgYXV0b3Rvb2xzCi0KLWRvX2luc3RhbGxfYXBwZW5kKCkgewotCSMgY29tcGF0ZGlyCi0JaW5zdGFsbCAtZCAke0R9JHtzeXNjb25mZGlyfS9iYXNoX2NvbXBsZXRpb24uZC8KLQllY2hvICcuICR7ZGF0YWRpcn0vJHtCUE59L2Jhc2hfY29tcGxldGlvbicgPiR7RH0ke3N5c2NvbmZkaXJ9L2Jhc2hfY29tcGxldGlvbgotCi0JIyBEZWxldGUgZmlsZXMgYWxyZWFkeSBwcm92aWRlZCBieSB1dGlsLWxpbnV4Ci0JbG9jYWwgaQotCWZvciBpIGluIGNhbCBkbWVzZyBlamVjdCBoZXhkdW1wIGh3Y2xvY2sgaW9uaWNlIGxvb2sgcmVuaWNlIHJ0Y3dha2Ugc3U7IGRvCi0JCXJtICR7RH0ke2RhdGFkaXJ9LyR7QlBOfS9jb21wbGV0aW9ucy8kaQotCWRvbmUKLQotCSMgRGVsZXRlIGZpbGVzIGZvciBuZXR3b3JrbWFuYWdlcgotCXJtICR7RH0ke2RhdGFkaXJ9LyR7QlBOfS9jb21wbGV0aW9ucy9ubWNsaQotfQotCi1SREVQRU5EU18ke1BOfSA9ICJiYXNoIgotCi0jIFNvbWUgcmVjaXBlcyBhcmUgcHJvdmlkaW5nICR7UE59LWJhc2gtY29tcGxldGlvbiBwYWNrYWdlcwotUEFDS0FHRVMgPSsgIiR7UE59LWV4dHJhIgotRklMRVNfJHtQTn0tZXh0cmEgPSAiJHtkYXRhZGlyfS8ke0JQTn0vY29tcGxldGlvbnMvIFwKLSAgICAke2RhdGFkaXJ9LyR7QlBOfS9oZWxwZXJzLyIKLQotQkJDTEFTU0VYVEVORCA9ICJuYXRpdmVzZGsiCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvYmFzaC1jb21wbGV0aW9uL2Jhc2gtY29tcGxldGlvbl8yLjQuYmIgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvYmFzaC1jb21wbGV0aW9uL2Jhc2gtY29tcGxldGlvbl8yLjQuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDI3MTlmMQotLS0gL2Rldi9udWxsCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9iYXNoLWNvbXBsZXRpb24vYmFzaC1jb21wbGV0aW9uXzIuNC5iYgpAQCAtMCwwICsxLDQyIEBACitTVU1NQVJZID0gIlByb2dyYW1tYWJsZSBDb21wbGV0aW9uIGZvciBCYXNoIDQiCitIT01FUEFHRSA9ICJodHRwOi8vYmFzaC1jb21wbGV0aW9uLmFsaW90aC5kZWJpYW4ub3JnLyIKK0JVR1RSQUNLRVIgPSAiaHR0cHM6Ly9hbGlvdGguZGViaWFuLm9yZy9wcm9qZWN0cy9iYXNoLWNvbXBsZXRpb24vIgorCitMSUNFTlNFID0gIkdQTHYyIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9NzUxNDE5MjYwYWE5NTQ0OTlmN2FiYWFiYWE4ODJiYmUiCisKK1NFQ1RJT04gPSAiY29uc29sZS91dGlscyIKKworU1JDX1VSSSA9ICJodHRwczovL2dpdGh1Yi5jb20vc2NvcC9iYXNoLWNvbXBsZXRpb24vcmVsZWFzZXMvZG93bmxvYWQvJHtQVn0vJHtCUE59LSR7UFZ9LnRhci54eiIKKworU1JDX1VSSVttZDVzdW1dID0gIjFlYTk0ODY0ZmIyYjI0NDZmYmJkZjgyZjEwYmQyNWRmIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gImMwZjc2YjUyMDJmZWM5ZWY4ZmZiYTgyZjU2MDUwMjVjYTAwM2YyN2NmZDdhODUxMTVmODM4YmE1MTM2ODkwZjYiCitVUFNUUkVBTV9DSEVDS19SRUdFWCA9ICJiYXNoLWNvbXBsZXRpb24tKD9QPHB2ZXI+KD8hMjAwOCkuKylcLnRhciIKK1VQU1RSRUFNX0NIRUNLX1VSSSA9ICJodHRwczovL2dpdGh1Yi5jb20vc2NvcC9iYXNoLWNvbXBsZXRpb24vcmVsZWFzZXMiCisKK1BBUkFMTEVMX01BS0UgPSAiIgorCitpbmhlcml0IGF1dG90b29scworCitkb19pbnN0YWxsX2FwcGVuZCgpIHsKKwkjIGNvbXBhdGRpcgorCWluc3RhbGwgLWQgJHtEfSR7c3lzY29uZmRpcn0vYmFzaF9jb21wbGV0aW9uLmQvCisJZWNobyAnLiAke2RhdGFkaXJ9LyR7QlBOfS9iYXNoX2NvbXBsZXRpb24nID4ke0R9JHtzeXNjb25mZGlyfS9iYXNoX2NvbXBsZXRpb24KKworCSMgRGVsZXRlIGZpbGVzIGFscmVhZHkgcHJvdmlkZWQgYnkgdXRpbC1saW51eAorCWxvY2FsIGkKKwlmb3IgaSBpbiBtb3VudCB1bW91bnQ7IGRvCisJCXJtICR7RH0ke2RhdGFkaXJ9LyR7QlBOfS9jb21wbGV0aW9ucy8kaQorCWRvbmUKK30KKworUkRFUEVORFNfJHtQTn0gPSAiYmFzaCIKKworIyBTb21lIHJlY2lwZXMgYXJlIHByb3ZpZGluZyAke1BOfS1iYXNoLWNvbXBsZXRpb24gcGFja2FnZXMKK1BBQ0tBR0VTID0rICIke1BOfS1leHRyYSIKK0ZJTEVTXyR7UE59LWV4dHJhID0gIiR7ZGF0YWRpcn0vJHtCUE59L2NvbXBsZXRpb25zLyBcCisgICAgJHtkYXRhZGlyfS8ke0JQTn0vaGVscGVycy8iCisKK0ZJTEVTXyR7UE59LWRldiArPSAiJHtkYXRhZGlyfS9jbWFrZSIKKworQkJDTEFTU0VYVEVORCA9ICJuYXRpdmVzZGsiCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvYmR3Z2MvYmR3Z2MvMDAwMS1maXgtYnVpbGQtd2l0aC1tdXNsLnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2Jkd2djL2Jkd2djLzAwMDEtZml4LWJ1aWxkLXdpdGgtbXVzbC5wYXRjaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYWI5MDdmYy4uMDAwMDAwMAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvYmR3Z2MvYmR3Z2MvMDAwMS1maXgtYnVpbGQtd2l0aC1tdXNsLnBhdGNoCisrKyAvZGV2L251bGwKQEAgLTEsMzUgKzAsMCBAQAotRnJvbSA4MjlhODllN2Y1Nzg1MjM5YTkzODRlM2FmZDQ2YzkwMGY5ZDc2YWRhIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQotRnJvbTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KLURhdGU6IE1vbiwgMzEgQXVnIDIwMTUgMTk6NTU6MzIgKzAwMDAKLVN1YmplY3Q6IFtQQVRDSF0gZml4IGJ1aWxkIHdpdGggbXVzbAotCi1zaWduYWwuaCBhbHJlYWR5IGluY2x1ZGVzIGJpdHMvc2lnY29udGV4dC5oCi1Eb2N1bWVudGF0aW9uIHNlZW1zIHRvIGluZGljYXRlIHRoYXQgaWYgeW91IG5lZWQgdGhlIGRlZmluaXRpb25zIGluCi1zaWdjb250ZXh0LmgsIHlvdSBhcmUgc3VwcG9zZWQgdG8gaW5jbHVkZSBzaWduYWwuaCBhbmQgbm90IHNpZ2NvbnRleHQuaC4KLQotYSBnb29kIGZpeCBzaG91bGQgYmUgdG8gcmVtb3ZlIGdsaWJjCi1zcGVjaWZpYyB1bmRlcnN0YW5kaW5nLCBpbiB0aG9zZSBpZmRlZidzCi0KLVNpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+Ci0tLS0KLVVwc3RyZWFtLVN0YXR1czogUGVuZGluZwotCi0gb3NfZGVwLmMgfCAyICstCi0gMSBmaWxlIGNoYW5nZWQsIDEgaW5zZXJ0aW9uKCspLCAxIGRlbGV0aW9uKC0pCi0KLWRpZmYgLS1naXQgYS9vc19kZXAuYyBiL29zX2RlcC5jCi1pbmRleCAwOGM1MDFkLi41Y2I3ODczIDEwMDY0NAotLS0tIGEvb3NfZGVwLmMKLSsrKyBiL29zX2RlcC5jCi1AQCAtNDEsNyArNDEsNyBAQAotICMgICBlbHNlIC8qIF9fR0xJQkNfXyA8IDIgKi8KLSAgICAgICAvKiBsaWJjNSBkb2Vzbid0IGhhdmUgPHNpZ2NvbnRleHQuaD46IGdvIGRpcmVjdGx5IHdpdGggdGhlIGtlcm5lbCAgICovCi0gICAgICAgLyogb25lLiAgQ2hlY2sgTElOVVhfVkVSU0lPTl9DT0RFIHRvIHNlZSB3aGljaCB3ZSBzaG91bGQgcmVmZXJlbmNlLiAqLwotLSMgICAgIGluY2x1ZGUgPGFzbS9zaWdjb250ZXh0Lmg+Ci0rIyAgICAgaW5jbHVkZSA8c2lnbmFsLmg+Ci0gIyAgIGVuZGlmIC8qIF9fR0xJQkNfXyA8IDIgKi8KLSAjIGVuZGlmCi0gI2VuZGlmIC8qIExJTlVYICYmICFQT1dFUlBDICovCi0tLSAKLTIuNS4xCi0KZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9iZHdnYy9iZHdnYy8wMDAyLUFsdGVyYS1OSU9TMi1zdXBwb3J0LnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2Jkd2djL2Jkd2djLzAwMDItQWx0ZXJhLU5JT1MyLXN1cHBvcnQucGF0Y2gKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGM3M2M1NDAuLjAwMDAwMDAKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2Jkd2djL2Jkd2djLzAwMDItQWx0ZXJhLU5JT1MyLXN1cHBvcnQucGF0Y2gKKysrIC9kZXYvbnVsbApAQCAtMSw3MSArMCwwIEBACi1Gcm9tIDI1NzFkZjBlMzBiNDk3NmQ3YTEyZGJjNmZiZWM0ZjFjNDAyNzkyNGQgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCi1Gcm9tOiBNYXJlayBWYXN1dCA8bWFyZXhAZGVueC5kZT4KLURhdGU6IFRodSwgMjggSmFuIDIwMTYgMDQ6MTM6MTMgKzAxMDAKLVN1YmplY3Q6IFtQQVRDSF0gQWx0ZXJhIE5JT1MyIHN1cHBvcnQKLQotQWRkIHNpbXBsZSBuaW9zMiBjb25maWd1cmF0aW9uIHN1cHBvcnQuCi0KLSogaW5jbHVkZS9wcml2YXRlL2djY29uZmlnLmggKE5JT1MyKTogTmV3IG1hY3JvLgotKiBpbmNsdWRlL3ByaXZhdGUvZ2Njb25maWcuaCAobWFjaF90eXBlX2tub3duLCBDUFBfV09SRFNaLCBNQUNIX1RZUEUsCi1PU19UWVBFLCBEWU5BTUlDX0xPQURJTkcsIF9lbmQsIF9fZGF0YV9zdGFydCwgREFUQVNUQVJULCBEQVRBRU5ELAotQUxJR05NRU5ULCBIQkxLU0laRSwgSEJMS1NJWkUsIExJTlVYX1NUQUNLQk9UVE9NLCBOT19HRVRDT05URVhUKToKLURlZmluZSBmb3IgTklPUzIuCi0KLVNpZ25lZC1vZmYtYnk6IE1hcmVrIFZhc3V0IDxtYXJleEBkZW54LmRlPgotVXBzdHJlYW0tU3RhdHVzOiBCYWNrcG9ydCBbIGh0dHBzOi8vZ2l0aHViLmNvbS9pdm1haS9iZHdnYy5naXQgMjU3MWRmMGUzMGI0OTc2ZDdhMTJkYmM2ZmJlYzRmMWM0MDI3OTI0ZCBdCi0tLS0KLSBpbmNsdWRlL3ByaXZhdGUvZ2Njb25maWcuaCB8IDI0ICsrKysrKysrKysrKysrKysrKysrKysrLQotIDEgZmlsZSBjaGFuZ2VkLCAyMyBpbnNlcnRpb25zKCspLCAxIGRlbGV0aW9uKC0pCi0KLWRpZmYgLS1naXQgYS9pbmNsdWRlL3ByaXZhdGUvZ2Njb25maWcuaCBiL2luY2x1ZGUvcHJpdmF0ZS9nY2NvbmZpZy5oCi1pbmRleCBjNDY3YzI2Li45MmQ0NzI3IDEwMDY0NAotLS0tIGEvaW5jbHVkZS9wcml2YXRlL2djY29uZmlnLmgKLSsrKyBiL2luY2x1ZGUvcHJpdmF0ZS9nY2NvbmZpZy5oCi1AQCAtMTgxLDYgKzE4MSwxMCBAQAotICMgICAgZW5kaWYKLSAjICAgIGRlZmluZSBtYWNoX3R5cGVfa25vd24KLSAjIGVuZGlmCi0rIyBpZiBkZWZpbmVkKF9fTklPUzJfXykgfHwgZGVmaW5lZChfX05JT1MyKSB8fCBkZWZpbmVkKF9fbmlvczJfXykKLSsjICAgZGVmaW5lIE5JT1MyIC8qIEFsdGVyYSBOSU9TMiAqLwotKyMgICBkZWZpbmUgbWFjaF90eXBlX2tub3duCi0rIyBlbmRpZgotICMgaWYgZGVmaW5lZChER1VYKSAmJiAoZGVmaW5lZChpMzg2KSB8fCBkZWZpbmVkKF9faTM4Nl9fKSkKLSAjICAgIGRlZmluZSBJMzg2Ci0gIyAgICBpZm5kZWYgX1VTSU5HX0RHVVgKLUBAIC0xNjU4LDYgKzE2NjIsMjQgQEAKLSAjICAgZW5kaWYKLSAjIGVuZGlmCi0gCi0rIyBpZmRlZiBOSU9TMgotKyMgIGRlZmluZSBDUFBfV09SRFNaIDMyCi0rIyAgZGVmaW5lIE1BQ0hfVFlQRSAiTklPUzIiCi0rIyAgaWZkZWYgTElOVVgKLSsjICAgIGRlZmluZSBPU19UWVBFICJMSU5VWCIKLSsjICAgIGRlZmluZSBEWU5BTUlDX0xPQURJTkcKLSsgICAgIGV4dGVybiBpbnQgX2VuZFtdOwotKyAgICAgZXh0ZXJuIGludCBfX2RhdGFfc3RhcnRbXTsKLSsjICAgIGRlZmluZSBEQVRBU1RBUlQgKChwdHJfdCkoX19kYXRhX3N0YXJ0KSkKLSsjICAgIGRlZmluZSBEQVRBRU5EICgocHRyX3QpKF9lbmQpKQotKyMgICAgZGVmaW5lIEFMSUdOTUVOVCA0Ci0rIyAgICBpZm5kZWYgSEJMS1NJWkUKLSsjICAgICAgZGVmaW5lIEhCTEtTSVpFIDQwOTYKLSsjICAgIGVuZGlmCi0rIyAgICBkZWZpbmUgTElOVVhfU1RBQ0tCT1RUT00KLSsjICBlbmRpZiAvKiBMaW51eCAqLwotKyMgZW5kaWYKLSsKLSAjIGlmZGVmIEhQX1BBCi0gIyAgIGRlZmluZSBNQUNIX1RZUEUgIkhQX1BBIgotICMgICBpZmRlZiBfX0xQNjRfXwotQEAgLTI2MjIsNiArMjY0NCw3IEBACi0gI2lmICgoZGVmaW5lZChVTklYX0xJS0UpICYmIChkZWZpbmVkKERBUldJTikgfHwgZGVmaW5lZChIVVJEKSBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8fCBkZWZpbmVkKE9QRU5CU0QpIHx8IGRlZmluZWQoQVJNMzIpIFwKLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIHx8IGRlZmluZWQoTUlQUykgfHwgZGVmaW5lZChBVlIzMikpKSBcCi0rICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8fCBkZWZpbmVkKE1JUFMpIHx8IGRlZmluZWQoQVZSMzIpIFwKLSsgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHx8IGRlZmluZWQoTklPUzIpKSkgXAotICAgICAgfHwgKGRlZmluZWQoTElOVVgpICYmIChkZWZpbmVkKFNQQVJDKSB8fCBkZWZpbmVkKE02OEspKSkgXAotICAgICAgfHwgKChkZWZpbmVkKFJURU1TKSB8fCBkZWZpbmVkKFBMQVRGT1JNX0FORFJPSUQpKSAmJiBkZWZpbmVkKEkzODYpKSkgXAotICAgICAmJiAhZGVmaW5lZChOT19HRVRDT05URVhUKQotLS0gCi0yLjcuMAotCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvYmR3Z2MvYmR3Z2MvbXVzbF9oZWFkZXJfZml4LnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2Jkd2djL2Jkd2djL211c2xfaGVhZGVyX2ZpeC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40YTE4NDk2Ci0tLSAvZGV2L251bGwKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2Jkd2djL2Jkd2djL211c2xfaGVhZGVyX2ZpeC5wYXRjaApAQCAtMCwwICsxLDI3IEBACitBZGQgbWlzc2luZyBoZWFkZXIgdG8gYXZvaWQ6CisKK3wgMTQ3MjY1OTYxMC4wMTYzNTU6IC4uL2dpdC9wdGhyZWFkX3N0b3Bfd29ybGQuYzogSW4gZnVuY3Rpb24gJ0dDX2JyaWVmX2FzeW5jX3NpZ25hbF9zYWZlX3NsZWVwJzoKK3wgMTQ3MjY1OTYxMC4wNTQwMjUyOiAuLi9naXQvcHRocmVhZF9zdG9wX3dvcmxkLmM6Mzk3OjIyOiBlcnJvcjogc3RvcmFnZSBzaXplIG9mICd0dicgaXNuJ3Qga25vd24KK3wgMTQ3MjY1OTYxMC4wNTQwMjUyOiAgICAgICAgc3RydWN0IHRpbWV2YWwgdHY7Cit8IDE0NzI2NTk2MTAuMDU0MDI1MjogICAgICAgICAgICAgICAgICAgICAgIF5+Cit8IDE0NzI2NTk2MTAuMDU0MDk5OiAuLi9naXQvcHRocmVhZF9zdG9wX3dvcmxkLmM6Mzk3OjIyOiB3YXJuaW5nOiB1bnVzZWQgdmFyaWFibGUgJ3R2JyBbLVd1bnVzZWQtdmFyaWFibGVdCit8IDE0NzI2NTk2MTAuMDU0MDk5OiAgICAgICAgc3RydWN0IHRpbWV2YWwgdHY7Cit8IDE0NzI2NTk2MTAuMDU0MDk5OiAgICAgICAgICAgICAgICAgICAgICAgXn4KK3wgMTQ3MjY1OTYxMC4wNTQwOTk6IE1ha2VmaWxlOjE1MzA6IHJlY2lwZSBmb3IgdGFyZ2V0ICdwdGhyZWFkX3N0b3Bfd29ybGQubG8nIGZhaWxlZAorCitpbiBtdXNsIGJ1aWxkcy4KKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK0luZGV4OiBnaXQvcHRocmVhZF9zdG9wX3dvcmxkLmMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBnaXQub3JpZy9wdGhyZWFkX3N0b3Bfd29ybGQuYworKysrIGdpdC9wdGhyZWFkX3N0b3Bfd29ybGQuYworQEAgLTQ1LDYgKzQ1LDcgQEAKKyAjaW5jbHVkZSA8c2VtYXBob3JlLmg+CisgI2luY2x1ZGUgPGVycm5vLmg+CisgI2luY2x1ZGUgPHVuaXN0ZC5oPgorKyNpbmNsdWRlIDxzeXMvdGltZS5oPgorICNpbmNsdWRlICJhdG9taWNfb3BzLmgiCisgCisgLyogSXQncyBzYWZlIHRvIGNhbGwgb3JpZ2luYWwgcHRocmVhZF9zaWdtYXNrKCkgaGVyZS4gICAqLwpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2Jkd2djL2Jkd2djXzcuNC4yLmJiIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2Jkd2djL2Jkd2djXzcuNC4yLmJiCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4ZDRkYWIzLi4wMDAwMDAwCi0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9iZHdnYy9iZHdnY183LjQuMi5iYgorKysgL2Rldi9udWxsCkBAIC0xLDQzICswLDAgQEAKLVNVTU1BUlkgPSAiQSBnYXJiYWdlIGNvbGxlY3RvciBmb3IgQyBhbmQgQysrIgotCi1ERVNDUklQVElPTiA9ICJUaGUgQm9laG0tRGVtZXJzLVdlaXNlciBjb25zZXJ2YXRpdmUgZ2FyYmFnZSBjb2xsZWN0b3IgY2FuIGJlXAotIHVzZWQgYXMgYSBnYXJiYWdlIGNvbGxlY3RpbmcgcmVwbGFjZW1lbnQgZm9yIEMgbWFsbG9jIG9yIEMrKyBuZXcuIEl0IGFsbG93c1wKLSB5b3UgdG8gYWxsb2NhdGUgbWVtb3J5IGJhc2ljYWxseSBhcyB5b3Ugbm9ybWFsbHkgd291bGQsIHdpdGhvdXQgZXhwbGljaXRseVwKLSBkZWFsbG9jYXRpbmcgbWVtb3J5IHRoYXQgaXMgbm8gbG9uZ2VyIHVzZWZ1bC4gVGhlIGNvbGxlY3RvciBhdXRvbWF0aWNhbGx5XAotIHJlY3ljbGVzIG1lbW9yeSB3aGVuIGl0IGRldGVybWluZXMgdGhhdCBpdCBjYW4gbm8gbG9uZ2VyIGJlIG90aGVyd2lzZVwKLSBhY2Nlc3NlZC5cCi0gIFRoZSBjb2xsZWN0b3IgaXMgYWxzbyB1c2VkIGJ5IGEgbnVtYmVyIG9mIHByb2dyYW1taW5nIGxhbmd1YWdlXAotIGltcGxlbWVudGF0aW9ucyB0aGF0IGVpdGhlciB1c2UgQyBhcyBpbnRlcm1lZGlhdGUgY29kZSwgd2FudCB0byBmYWNpbGl0YXRlXAotIGVhc2llciBpbnRlcm9wZXJhdGlvbiB3aXRoIEMgbGlicmFyaWVzLCBvciBqdXN0IHByZWZlciB0aGUgc2ltcGxlIGNvbGxlY3RvclwKLSBpbnRlcmZhY2UuXAotICBBbHRlcm5hdGl2ZWx5LCB0aGUgZ2FyYmFnZSBjb2xsZWN0b3IgbWF5IGJlIHVzZWQgYXMgYSBsZWFrIGRldGVjdG9yIGZvciBDXAotIG9yIEMrKyBwcm9ncmFtcywgdGhvdWdoIHRoYXQgaXMgbm90IGl0cyBwcmltYXJ5IGdvYWwuXAotICBFbXBpcmljYWxseSwgdGhpcyBjb2xsZWN0b3Igd29ya3Mgd2l0aCBtb3N0IHVubW9kaWZpZWQgQyBwcm9ncmFtcywgc2ltcGx5XAotIGJ5IHJlcGxhY2luZyBtYWxsb2Mgd2l0aCBHQ19tYWxsb2MgY2FsbHMsIHJlcGxhY2luZyByZWFsbG9jIHdpdGggR0NfcmVhbGxvY1wKLSBjYWxscywgYW5kIHJlbW92aW5nIGZyZWUgY2FsbHMuIgotCi1IT01FUEFHRSA9ICJodHRwOi8vd3d3Lmhib2VobS5pbmZvL2djLyIKLVNFQ1RJT04gPSAiZGV2ZWwiCi1MSUNFTlNFID0gIk1JVCIKLUxJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL1JFQURNRS5RVUlDSzttZDU9NTVmNTA4OGY5MGE5ODJmZWQ3YWY5YTQ4OTcwNDdlZjciCi0KLVNSQ1JFViA9ICJlMzFjZGMyODhmZmJlZTViZjI1Zjk0OGUxOWRlYjVhN2NlODQ2OTcxIgotU1JDX1VSSSA9ICJnaXQ6Ly9naXRodWIuY29tL2l2bWFpL2Jkd2djLmdpdDticmFuY2g9cmVsZWFzZS03XzQgXAotICAgICAgICAgICBmaWxlOi8vMDAwMS1maXgtYnVpbGQtd2l0aC1tdXNsLnBhdGNoIFwKLSAgICAgICAgICAgZmlsZTovLzAwMDEtY29uZmlndXJlLmFjLWFkZC1jaGVjay1mb3ItTk9fR0VUQ09OVEVYVC1kZWZpbml0aW9uLnBhdGNoIFwKLSAgICAgICAgICAgZmlsZTovLzAwMDItQWx0ZXJhLU5JT1MyLXN1cHBvcnQucGF0Y2ggXAotICAgICAgICAgICIKLQotRklMRVNfJHtQTn0tZG9jID0gIiR7ZGF0YWRpcn0iCi0KLVMgPSAiJHtXT1JLRElSfS9naXQiCi0KLUFSTV9JTlNUUlVDVElPTl9TRVQgPSAiYXJtIgotCi1pbmhlcml0IGF1dG90b29scyBwa2djb25maWcKLQotIyBieSBkZWZhdWx0IHVzZSBleHRlcm5hbCBsaWJhdG9taWMtb3BzCi1QQUNLQUdFQ09ORklHID8/PSAibGliYXRvbWljLW9wcyIKLVBBQ0tBR0VDT05GSUdbbGliYXRvbWljLW9wc10gPSAiLS13aXRoLWxpYmF0b21pYy1vcHM9eWVzLC0td2l0aC1saWJhdG9taWMtb3BzPW5vLGxpYmF0b21pYy1vcHMiCi0KLUJCQ0xBU1NFWFRFTkQgPSAibmF0aXZlIG5hdGl2ZXNkayIKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9iZHdnYy9iZHdnY183LjYuMC5iYiBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9iZHdnYy9iZHdnY183LjYuMC5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kY2I2OGYwCi0tLSAvZGV2L251bGwKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2Jkd2djL2Jkd2djXzcuNi4wLmJiCkBAIC0wLDAgKzEsNDIgQEAKK1NVTU1BUlkgPSAiQSBnYXJiYWdlIGNvbGxlY3RvciBmb3IgQyBhbmQgQysrIgorCitERVNDUklQVElPTiA9ICJUaGUgQm9laG0tRGVtZXJzLVdlaXNlciBjb25zZXJ2YXRpdmUgZ2FyYmFnZSBjb2xsZWN0b3IgY2FuIGJlXAorIHVzZWQgYXMgYSBnYXJiYWdlIGNvbGxlY3RpbmcgcmVwbGFjZW1lbnQgZm9yIEMgbWFsbG9jIG9yIEMrKyBuZXcuIEl0IGFsbG93c1wKKyB5b3UgdG8gYWxsb2NhdGUgbWVtb3J5IGJhc2ljYWxseSBhcyB5b3Ugbm9ybWFsbHkgd291bGQsIHdpdGhvdXQgZXhwbGljaXRseVwKKyBkZWFsbG9jYXRpbmcgbWVtb3J5IHRoYXQgaXMgbm8gbG9uZ2VyIHVzZWZ1bC4gVGhlIGNvbGxlY3RvciBhdXRvbWF0aWNhbGx5XAorIHJlY3ljbGVzIG1lbW9yeSB3aGVuIGl0IGRldGVybWluZXMgdGhhdCBpdCBjYW4gbm8gbG9uZ2VyIGJlIG90aGVyd2lzZVwKKyBhY2Nlc3NlZC5cCisgIFRoZSBjb2xsZWN0b3IgaXMgYWxzbyB1c2VkIGJ5IGEgbnVtYmVyIG9mIHByb2dyYW1taW5nIGxhbmd1YWdlXAorIGltcGxlbWVudGF0aW9ucyB0aGF0IGVpdGhlciB1c2UgQyBhcyBpbnRlcm1lZGlhdGUgY29kZSwgd2FudCB0byBmYWNpbGl0YXRlXAorIGVhc2llciBpbnRlcm9wZXJhdGlvbiB3aXRoIEMgbGlicmFyaWVzLCBvciBqdXN0IHByZWZlciB0aGUgc2ltcGxlIGNvbGxlY3RvclwKKyBpbnRlcmZhY2UuXAorICBBbHRlcm5hdGl2ZWx5LCB0aGUgZ2FyYmFnZSBjb2xsZWN0b3IgbWF5IGJlIHVzZWQgYXMgYSBsZWFrIGRldGVjdG9yIGZvciBDXAorIG9yIEMrKyBwcm9ncmFtcywgdGhvdWdoIHRoYXQgaXMgbm90IGl0cyBwcmltYXJ5IGdvYWwuXAorICBFbXBpcmljYWxseSwgdGhpcyBjb2xsZWN0b3Igd29ya3Mgd2l0aCBtb3N0IHVubW9kaWZpZWQgQyBwcm9ncmFtcywgc2ltcGx5XAorIGJ5IHJlcGxhY2luZyBtYWxsb2Mgd2l0aCBHQ19tYWxsb2MgY2FsbHMsIHJlcGxhY2luZyByZWFsbG9jIHdpdGggR0NfcmVhbGxvY1wKKyBjYWxscywgYW5kIHJlbW92aW5nIGZyZWUgY2FsbHMuIgorCitIT01FUEFHRSA9ICJodHRwOi8vd3d3Lmhib2VobS5pbmZvL2djLyIKK1NFQ1RJT04gPSAiZGV2ZWwiCitMSUNFTlNFID0gIk1JVCIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL1JFQURNRS5RVUlDSzttZDU9NGY4MWYyNGVjNjk3MjZjMzEyNDg3YzJhYzc0MGU5ZTMiCisKK1NSQ1JFViA9ICI4YWMxZDg0YTQwZWI3YTQzMWZlYzFiODA5N2UzZjI0YjQ4ZmIyM2ZhIgorU1JDX1VSSSA9ICJnaXQ6Ly9naXRodWIuY29tL2l2bWFpL2Jkd2djLmdpdCBcCisgICAgICAgICAgIGZpbGU6Ly8wMDAxLWNvbmZpZ3VyZS5hYy1hZGQtY2hlY2stZm9yLU5PX0dFVENPTlRFWFQtZGVmaW5pdGlvbi5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9tdXNsX2hlYWRlcl9maXgucGF0Y2ggXAorICAgICAgICAgICIKKworRklMRVNfJHtQTn0tZG9jID0gIiR7ZGF0YWRpcn0iCisKK1MgPSAiJHtXT1JLRElSfS9naXQiCisKK0FSTV9JTlNUUlVDVElPTl9TRVQgPSAiYXJtIgorCitpbmhlcml0IGF1dG90b29scyBwa2djb25maWcKKworIyBieSBkZWZhdWx0IHVzZSBleHRlcm5hbCBsaWJhdG9taWMtb3BzCitQQUNLQUdFQ09ORklHID8/PSAibGliYXRvbWljLW9wcyIKK1BBQ0tBR0VDT05GSUdbbGliYXRvbWljLW9wc10gPSAiLS13aXRoLWxpYmF0b21pYy1vcHM9eWVzLC0td2l0aC1saWJhdG9taWMtb3BzPW5vLGxpYmF0b21pYy1vcHMiCisKK0JCQ0xBU1NFWFRFTkQgPSAibmF0aXZlIG5hdGl2ZXNkayIKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9ibWFwLXRvb2xzL2JtYXAtdG9vbHNfMy4yLmJiIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2JtYXAtdG9vbHMvYm1hcC10b29sc18zLjIuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTEwZjVmZAotLS0gL2Rldi9udWxsCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9ibWFwLXRvb2xzL2JtYXAtdG9vbHNfMy4yLmJiCkBAIC0wLDAgKzEsMjQgQEAKK1NVTU1BUlkgPSAiVG9vbHMgdG8gZ2VuZXJhdGUgYmxvY2sgbWFwIChBS0EgYm1hcCkgYW5kIGZsYXNoIGltYWdlcyB1c2luZyBibWFwIgorREVTQ1JJUFRJT04gPSAiQm1hcC10b29scyAtIHRvb2xzIHRvIGdlbmVyYXRlIGJsb2NrIG1hcCAoQUtBIGJtYXApIGFuZCBmbGFzaCBpbWFnZXMgdXNpbmcgXAorYm1hcC4gQm1hcHRvb2wgaXMgYSBnZW5lcmljIHRvb2wgZm9yIGNyZWF0aW5nIHRoZSBibG9jayBtYXAgKGJtYXApIGZvciBhIGZpbGUsIFwKK2FuZCBjb3B5aW5nIGZpbGVzIHVzaW5nIHRoZSBibG9jayBtYXAuIFRoZSBpZGVhIGlzIHRoYXQgbGFyZ2UgZmlsZSBjb250YWluaW5nIFwKK3VudXNlZCBibG9ja3MsIGxpa2UgcmF3IHN5c3RlbSBpbWFnZSBmaWxlcywgY2FuIGJlIGNvcGllZCBvciBmbGFzaGVkIGEgbG90IFwKK2Zhc3RlciB3aXRoIGJtYXB0b29sIHRoYW4gd2l0aCB0cmFkaXRpb25hbCB0b29scyBsaWtlICJkZCIgb3IgImNwIi4iCitIT01FUEFHRSA9ICJodHRwOi8vZ2l0LmluZnJhZGVhZC5vcmcvdXNlcnMvZGVkZWtpbmQvYm1hcC10b29scy5naXQiCitTRUNUSU9OID0gImNvbnNvbGUvdXRpbHMiCitMSUNFTlNFID0gIkdQTHYyIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9YjIzNGVlNGQ2OWY1ZmNlNDQ4NmE4MGZkYWY0YTQyNjMiCisKK1NSQ19VUkkgPSAiZnRwOi8vZnRwLmluZnJhZGVhZC5vcmcvcHViLyR7QlBOfS8ke0JQTn0tJHtQVn0udGd6IgorU1JDX1VSSVttZDVzdW1dID0gIjkyY2RhZDFjYjRkZmEwY2NhNzE3NmM4ZTIyNzUyNjE2IgorU1JDX1VSSVtzaGEyNTZzdW1dID0gImNjNmM3ZjdkYzBhMzdlMmEzMmRlYjEyNzMwOGUyNGU2YzRiODBiZmI1NGYzODAzYzMwOGVmYWIwMmJmMmQ0MzQiCisKK1JERVBFTkRTXyR7UE59ID0gInB5dGhvbi1jb3JlIHB5dGhvbi1jb21wcmVzc2lvbiIKKworaW5oZXJpdCBzZXR1cHRvb2xzCisKK0JCQ0xBU1NFWFRFTkQgPSAibmF0aXZlIgorCitkb19pbnN0YWxsX2FwcGVuZF9jbGFzcy1uYXRpdmUoKSB7CisgICAgc2VkIC1pIC1lICdzfF4jIS4qL3Vzci9iaW4vZW52IHB5dGhvbnwjISAvdXNyL2Jpbi9lbnYgbmF0aXZlcHl0aG9ufCcgJHtEfSR7YmluZGlyfS9ibWFwdG9vbAorfQpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2Jvb3N0L2JqYW0tbmF0aXZlXzEuNjAuMC5iYiBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9ib29zdC9iamFtLW5hdGl2ZV8xLjYxLjAuYmIKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9ib29zdC9iamFtLW5hdGl2ZV8xLjYwLjAuYmIKcmVuYW1lIHRvIGltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9ib29zdC9iamFtLW5hdGl2ZV8xLjYxLjAuYmIKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9ib29zdC9ib29zdC0xLjYwLjAuaW5jIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2Jvb3N0L2Jvb3N0LTEuNjAuMC5pbmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGEzODY5M2UuLjAwMDAwMDAKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2Jvb3N0L2Jvb3N0LTEuNjAuMC5pbmMKKysrIC9kZXYvbnVsbApAQCAtMSwxOSArMCwwIEBACi0jIFRoZSBCb29zdCB3ZWIgc2l0ZSBwcm92aWRlcyBmcmVlIHBlZXItcmV2aWV3ZWQgcG9ydGFibGUKLSMgQysrIHNvdXJjZSBsaWJyYXJpZXMuIFRoZSBlbXBoYXNpcyBpcyBvbiBsaWJyYXJpZXMgd2hpY2gKLSMgd29yayB3ZWxsIHdpdGggdGhlIEMrKyBTdGFuZGFyZCBMaWJyYXJ5LiBUaGUgbGlicmFyaWVzIGFyZQotIyBpbnRlbmRlZCB0byBiZSB3aWRlbHkgdXNlZnVsLCBhbmQgYXJlIGluIHJlZ3VsYXIgdXNlIGJ5Ci0jIHRob3VzYW5kcyBvZiBwcm9ncmFtbWVycyBhY3Jvc3MgYSBicm9hZCBzcGVjdHJ1bSBvZiBhcHBsaWNhdGlvbnMuCi1IT01FUEFHRSA9ICJodHRwOi8vd3d3LmJvb3N0Lm9yZy8iCi1MSUNFTlNFID0gIkJTTC0xLjAgJiBNSVQgJiBQeXRob24tMi4wIgotTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vTElDRU5TRV8xXzAudHh0O21kNT1lNDIyNGNjYWVjYjE0ZDk0MmM3MWQzMWJlZjIwZDc4YyIKLQotQk9PU1RfVkVSID0gIiR7QCJfIi5qb2luKGQuZ2V0VmFyKCJQViIsMSkuc3BsaXQoIi4iKSl9IgotQk9PU1RfTUFKID0gIiR7QCJfIi5qb2luKGQuZ2V0VmFyKCJQViIsMSkuc3BsaXQoIi4iKVswOjJdKX0iCi1CT09TVF9QID0gImJvb3N0XyR7Qk9PU1RfVkVSfSIKLQotU1JDX1VSSSA9ICIke1NPVVJDRUZPUkdFX01JUlJPUn0vYm9vc3QvJHtCT09TVF9QfS50YXIuYnoyIgotCi1TUkNfVVJJW21kNXN1bV0gPSAiNjVhODQwZTFhMGIxM2E1NThmZjE5ZWViMmM0ZjBjYmUiCi1TUkNfVVJJW3NoYTI1NnN1bV0gPSAiNjg2YWZmZmY5ODlhYzI0ODhmNzlhOTdiOTQ3OWVmYjlmMmFiYWUwMzViNWVkNGQ4MjI2ZGU2ODU3OTMzZmQzYiIKLQotUyA9ICIke1dPUktESVJ9LyR7Qk9PU1RfUH0iCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvYm9vc3QvYm9vc3QtMS42MS4wLmluYyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9ib29zdC9ib29zdC0xLjYxLjAuaW5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNkOWQ4YTQKLS0tIC9kZXYvbnVsbAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvYm9vc3QvYm9vc3QtMS42MS4wLmluYwpAQCAtMCwwICsxLDE5IEBACisjIFRoZSBCb29zdCB3ZWIgc2l0ZSBwcm92aWRlcyBmcmVlIHBlZXItcmV2aWV3ZWQgcG9ydGFibGUKKyMgQysrIHNvdXJjZSBsaWJyYXJpZXMuIFRoZSBlbXBoYXNpcyBpcyBvbiBsaWJyYXJpZXMgd2hpY2gKKyMgd29yayB3ZWxsIHdpdGggdGhlIEMrKyBTdGFuZGFyZCBMaWJyYXJ5LiBUaGUgbGlicmFyaWVzIGFyZQorIyBpbnRlbmRlZCB0byBiZSB3aWRlbHkgdXNlZnVsLCBhbmQgYXJlIGluIHJlZ3VsYXIgdXNlIGJ5CisjIHRob3VzYW5kcyBvZiBwcm9ncmFtbWVycyBhY3Jvc3MgYSBicm9hZCBzcGVjdHJ1bSBvZiBhcHBsaWNhdGlvbnMuCitIT01FUEFHRSA9ICJodHRwOi8vd3d3LmJvb3N0Lm9yZy8iCitMSUNFTlNFID0gIkJTTC0xLjAgJiBNSVQgJiBQeXRob24tMi4wIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vTElDRU5TRV8xXzAudHh0O21kNT1lNDIyNGNjYWVjYjE0ZDk0MmM3MWQzMWJlZjIwZDc4YyIKKworQk9PU1RfVkVSID0gIiR7QCJfIi5qb2luKGQuZ2V0VmFyKCJQViIsIFRydWUpLnNwbGl0KCIuIikpfSIKK0JPT1NUX01BSiA9ICIke0AiXyIuam9pbihkLmdldFZhcigiUFYiLCBUcnVlKS5zcGxpdCgiLiIpWzA6Ml0pfSIKK0JPT1NUX1AgPSAiYm9vc3RfJHtCT09TVF9WRVJ9IgorCitTUkNfVVJJID0gIiR7U09VUkNFRk9SR0VfTUlSUk9SfS9ib29zdC8ke0JPT1NUX1B9LnRhci5iejIiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICI2MDk1ODc2MzQxOTU2ZjY1ZjlkMzU5MzljY2VhMWE5ZiIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICJhNTQ3YmQwNmMyZmQ5YTcxYmExZDE2OWQ5Y2YwMzM5ZGE3ZWJmNDc1Mzg0OWE4ZjdkNmZkYjhmZWVlOTliNjQwIgorCitTID0gIiR7V09SS0RJUn0vJHtCT09TVF9QfSIKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9ib29zdC9ib29zdC5pbmMgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvYm9vc3QvYm9vc3QuaW5jCmluZGV4IDk4MjQ0NmMuLmVmMTY1MzMgMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9ib29zdC9ib29zdC5pbmMKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2Jvb3N0L2Jvb3N0LmluYwpAQCAtOCwxMSArOCwxNCBAQAogQk9PU1RfTElCUyA9ICJcCiAJYXRvbWljIFwKIAljaHJvbm8gXAorCWNvbnRhaW5lciBcCiAJZGF0ZV90aW1lIFwKKwlleGNlcHRpb24gXAogCWZpbGVzeXN0ZW0gXAogCWdyYXBoIFwKIAlpb3N0cmVhbXMgXAogCWxvZyBcCisJbWF0aCBcCiAJcHJvZ3JhbV9vcHRpb25zIFwKIAlyYW5kb20gXAogCXJlZ2V4IFwKQEAgLTIyLDEyICsyNSwzMCBAQAogCXRpbWVyIFwKIAl0ZXN0IFwKIAl0aHJlYWQgXAorCXdhdmUgXAogCSIKIAotIyBvcHRpb25hbCBib29zdC1weXRob24gbGlicmFyeQotUEFDS0FHRUNPTkZJRyA/Pz0gIiIKKyMgb25seSBzdXBwb3J0ZWQgYnkgeDg2IGFuZCBwb3dlcnBjCitCT09TVF9MSUJTX2FwcGVuZF94ODYgPSAiIGNvbnRleHQgY29yb3V0aW5lIgorQk9PU1RfTElCU19hcHBlbmRfeDg2LTY0ID0gIiBjb250ZXh0IGNvcm91dGluZSIKK0JPT1NUX0xJQlNfYXBwZW5kX3Bvd2VycGMgPSAiIGNvbnRleHQgY29yb3V0aW5lIgorIyBuZWVkIGNvbnNpc3RlbnQgc2V0dGluZ3MgZm9yIG5hdGl2ZSBidWlsZHMgKHg4NiBvdmVycmlkZSBub3QgYXBwbGllZCBmb3IgbmF0aXZlKQorQk9PU1RfTElCU19yZW1vdmVfY2xhc3MtbmF0aXZlID0gIiBjb250ZXh0IGNvcm91dGluZSIKKworIyBvcHRpb25hbCBsaWJyYXJpZXMKK1BBQ0tBR0VDT05GSUcgPz89ICJsb2NhbGUiCitQQUNLQUdFQ09ORklHW2xvY2FsZV0gPSAiLCxpY3UiCitQQUNLQUdFQ09ORklHW2dyYXBoX3BhcmFsbGVsXSA9ICIsLCxib29zdC1tcGkgbXBpY2giCitQQUNLQUdFQ09ORklHW21waV0gPSAiLCxtcGljaCIKIFBBQ0tBR0VDT05GSUdbcHl0aG9uXSA9ICIsLHB5dGhvbiBweXRob24zIgotQk9PU1RfTElCUyArPSAiJHtAYmIudXRpbHMuY29udGFpbnMoJ1BBQ0tBR0VDT05GSUcnLCAncHl0aG9uJywgJ3B5dGhvbiBweXRob24zJywgJycsIGQpfSIKKworQk9PU1RfTElCUyArPSAiXAorICAgICR7QGJiLnV0aWxzLmNvbnRhaW5zKCdQQUNLQUdFQ09ORklHJywgJ2xvY2FsZScsICdsb2NhbGUnLCAnJywgZCl9IFwKKyAgICAke0BiYi51dGlscy5jb250YWlucygnUEFDS0FHRUNPTkZJRycsICdncmFwaF9wYXJhbGxlbCcsICdncmFwaF9wYXJhbGxlbCBtcGknLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgYmIudXRpbHMuY29udGFpbnMoJ1BBQ0tBR0VDT05GSUcnLCAnbXBpJywgJ21waScsICcnLCBkKSwgZCl9IFwKKyAgICAke0BiYi51dGlscy5jb250YWlucygnUEFDS0FHRUNPTkZJRycsICdweXRob24nLCAncHl0aG9uIHB5dGhvbjMnLCAnJywgZCl9IFwKKyIKKwogaW5oZXJpdCBweXRob24tZGlyCiBQWVRIT05fUk9PVCA9ICIke1NUQUdJTkdfRElSX0hPU1R9LyR7cHJlZml4fSIKIApAQCAtNTQsNiArNzUsMTAgQEAKIH0KIAogIyBPdmVycmlkZSB0aGUgY29udGVudHMgb2Ygc3BlY2lmaWMgcGFja2FnZXMKK0ZJTEVTXyR7UE59LWdyYXBoID0gIiR7bGliZGlyfS9saWJib29zdF9ncmFwaC5zby4qIgorRklMRVNfJHtQTn0tZ3JhcGhfcGFyYWxsZWwgPSAiJHtsaWJkaXJ9L2xpYmJvb3N0X2dyYXBoX3BhcmFsbGVsLnNvLioiCitGSUxFU18ke1BOfS1sb2NhbGUgPSAiJHtsaWJkaXJ9L2xpYmJvb3N0X2xvY2FsZS5zby4qIgorRklMRVNfJHtQTn0tbXBpID0gIiR7bGliZGlyfS9tcGkuc28gJHtsaWJkaXJ9L2xpYmJvb3N0X21waSouc28uKiIKIEZJTEVTX2Jvb3N0LXNlcmlhbGl6YXRpb24gPSAiJHtsaWJkaXJ9L2xpYmJvb3N0X3NlcmlhbGl6YXRpb24qLnNvLiogXAogCSR7bGliZGlyfS9saWJib29zdF93c2VyaWFsaXphdGlvbiouc28uKiIKIEZJTEVTX2Jvb3N0LXRlc3QgPSAiJHtsaWJkaXJ9L2xpYmJvb3N0X3ByZ19leGVjX21vbml0b3IqLnNvLiogXApAQCAtMTQyLDcgKzE2Nyw3IEBACiBCT09TVF9QQVJBTExFTF9NQUtFID0gIiR7QGdldF9ib29zdF9wYXJhbGxlbF9tYWtlKGQpfSIKIEJKQU1fT1BUUyAgICA9ICcke0JPT1NUX1BBUkFMTEVMX01BS0V9IC1kKzIgLXEgXAogCQkke0JKQU1fVE9PTFN9IFwKLQkJLXNCT09TVF9CVUlMRF9VU0VSX0NPTkZJRz0ke1N9L3Rvb2xzL2J1aWxkL2V4YW1wbGUvdXNlci1jb25maWcuamFtIFwKKwkJLXNCT09TVF9CVUlMRF9VU0VSX0NPTkZJRz0ke1dPUktESVJ9L3VzZXItY29uZmlnLmphbSBcCiAJCS0tYnVpbGQtZGlyPSR7U30vJHtUQVJHRVRfU1lTfSBcCiAJCS0tZGlzYWJsZS1pY3UgXAogCQkke0JKQU1fRVhUUkF9JwpAQCAtMTUwLDI1ICsxNzUsMjYgQEAKICMgTmF0aXZlIGNvbXBpbGF0aW9uIG9mIGJ6aXAyIGlzbid0IHdvcmtpbmcKIEJKQU1fT1BUU19hcHBlbmRfY2xhc3MtbmF0aXZlID0gJyAtc05PX0JaSVAyPTEnCiAKLWRvX2Jvb3N0Y29uZmlnKCkgewotCWNwIC1mIGJvb3N0L2NvbmZpZy9wbGF0Zm9ybS9saW51eC5ocHAgYm9vc3QvY29uZmlnL3BsYXRmb3JtL2xpbnV4LWdudWVhYmkuaHBwCitkb19jb25maWd1cmUoKSB7CisJY3AgLWYgJHtTfS9ib29zdC9jb25maWcvcGxhdGZvcm0vbGludXguaHBwICR7U30vYm9vc3QvY29uZmlnL3BsYXRmb3JtL2xpbnV4LWdudWVhYmkuaHBwCiAKIAkjIEQyMTk0OkZpeGluZyB0aGUgZmFpbHVyZSBvZiAiZXJyb3I6IGR1cGxpY2F0ZSBpbml0aWFsaXphdGlvbiBvZiBnY2Mgd2l0aCB0aGUgZm9sbG93aW5nIHBhcmFtZXRlcnMiIGR1cmluZyBjb21waWxhdGlvbi4KLQlzZWQgLWkgIi9edXNpbmcgZ2NjIDogNC4zLjEvZCIgJHtTfS90b29scy9idWlsZC9leGFtcGxlL3VzZXItY29uZmlnLmphbQotCXNlZCAtaSAiL151c2luZyBweXRob24gOiAke1BZVEhPTl9CQVNFVkVSU0lPTn0iL2QgJHtTfS90b29scy9idWlsZC9leGFtcGxlL3VzZXItY29uZmlnLmphbQotCWVjaG8gJ3VzaW5nIGdjYyA6IDQuMy4xIDogJHtDWFh9IDogPGNmbGFncz4iJHtDRkxBR1N9IiA8Y3h4ZmxhZ3M+IiR7Q1hYRkxBR1N9IiA8bGlua2ZsYWdzPiIke0xERkxBR1N9IiA7JyA+PiAke1N9L3Rvb2xzL2J1aWxkL2V4YW1wbGUvdXNlci1jb25maWcuamFtCi0JZWNobyAidXNpbmcgcHl0aG9uIDogJHtQWVRIT05fQkFTRVZFUlNJT059IDogOiAke1NUQUdJTkdfSU5DRElSfS9weXRob24ke1BZVEhPTl9CQVNFVkVSU0lPTn0gOyIgPj4gJHtTfS90b29scy9idWlsZC9leGFtcGxlL3VzZXItY29uZmlnLmphbQotCWVjaG8gInVzaW5nIHB5dGhvbiA6IDMuNSA6IDogJHtTVEFHSU5HX0lOQ0RJUn0vcHl0aG9uMy41bSA7IiA+PiAke1N9L3Rvb2xzL2J1aWxkL2V4YW1wbGUvdXNlci1jb25maWcuamFtCisJcm0gLWYgJHtXT1JLRElSfS91c2VyLWNvbmZpZy5qYW0KKwllY2hvICd1c2luZyBnY2MgOiA0LjMuMSA6ICR7Q1hYfSA6IDxjZmxhZ3M+IiR7Q0ZMQUdTfSIgPGN4eGZsYWdzPiIke0NYWEZMQUdTfSIgPGxpbmtmbGFncz4iJHtMREZMQUdTfSIgOycgPj4gJHtXT1JLRElSfS91c2VyLWNvbmZpZy5qYW0KKwllY2hvICJ1c2luZyBweXRob24gOiAke1BZVEhPTl9CQVNFVkVSU0lPTn0gOiA6ICR7U1RBR0lOR19JTkNESVJ9L3B5dGhvbiR7UFlUSE9OX0JBU0VWRVJTSU9OfSA7IiA+PiAke1dPUktESVJ9L3VzZXItY29uZmlnLmphbQorCWVjaG8gInVzaW5nIHB5dGhvbiA6IDMuNSA6IDogJHtTVEFHSU5HX0lOQ0RJUn0vcHl0aG9uMy41bSA7IiA+PiAke1dPUktESVJ9L3VzZXItY29uZmlnLmphbQorCisJaWYgJHtAYmIudXRpbHMuY29udGFpbnMoJ0JPT1NUX0xJQlMnLCAnbXBpJywgJ3RydWUnLCAnZmFsc2UnLCBkKX07IHRoZW4KKwkJZWNobyAidXNpbmcgbXBpIDogOiA8ZmluZC1zaGFyZWQtbGlicmFyeT5tcGkgOyIgPj4gJHtXT1JLRElSfS91c2VyLWNvbmZpZy5qYW0KKwlmaQogCiAJQ0M9IiR7QlVJTERfQ0N9IiBDRkxBR1M9IiR7QlVJTERfQ0ZMQUdTfSIgLi9ib290c3RyYXAuc2ggLS13aXRoLWJqYW09YmphbSAtLXdpdGgtdG9vbHNldD1nY2MgLS13aXRoLXB5dGhvbi1yb290PSR7UFlUSE9OX1JPT1R9Ci0Jc2VkIC1pICcvXnVzaW5nIHB5dGhvbi9kJyBwcm9qZWN0LWNvbmZpZy5qYW0KKwlzZWQgLWkgJy9edXNpbmcgcHl0aG9uL2QnICR7U30vcHJvamVjdC1jb25maWcuamFtCiB9CiAKLWRvX2Jvb3N0Y29uZmlnW2RpcnNdID0gIiR7U30iCi1hZGR0YXNrIGRvX2Jvb3N0Y29uZmlnIGFmdGVyIGRvX3BhdGNoIGJlZm9yZSBkb19jb25maWd1cmUKLQogZG9fY29tcGlsZSgpIHsKIAlzZXQgLWV4CisJcm0gLXJmICR7U30vJHtUQVJHRVRfU1lTfQogCWJqYW0gJHtCSkFNX09QVFN9IC0tcHJlZml4PSR7cHJlZml4fSBcCiAJCS0tZXhlYy1wcmVmaXg9JHtleGVjX3ByZWZpeH0gXAogCQktLWxpYmRpcj0ke2xpYmRpcn0gXApkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2Jvb3N0L2Jvb3N0LzAwMDEtRG8tbm90LXF1YWxpZnktZmVudi5oLW5hbWVzLXRoYXQtbWlnaHQtYmUtbWFjcm9zLnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2Jvb3N0L2Jvb3N0LzAwMDEtRG8tbm90LXF1YWxpZnktZmVudi5oLW5hbWVzLXRoYXQtbWlnaHQtYmUtbWFjcm9zLnBhdGNoCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkZjdlNzFmLi4wMDAwMDAwCi0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9ib29zdC9ib29zdC8wMDAxLURvLW5vdC1xdWFsaWZ5LWZlbnYuaC1uYW1lcy10aGF0LW1pZ2h0LWJlLW1hY3Jvcy5wYXRjaAorKysgL2Rldi9udWxsCkBAIC0xLDQ1ICswLDAgQEAKLUZyb20gZjUwZTdiYzlmZWQzMjNjNTcwNWMwZWQ5OTJjMDNlODBlZWVjMWRkNiBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKLUZyb206IEpvbmF0aGFuIFdha2VseSA8andha2VseUByZWRoYXQuY29tPgotRGF0ZTogTW9uLCAxNCBTZXAgMjAxNSAxNTowNToyNCArMDEwMAotU3ViamVjdDogW1BBVENIXSBEbyBub3QgcXVhbGlmeSA8ZmVudi5oPiBuYW1lcyB0aGF0IG1pZ2h0IGJlIG1hY3Jvcy4KLQotVGhlIHBhdGNoIHdhcyBpbXBvcnRlZCBmcm9tIHRoZSBib29zdC10ZXN0IGdpdCByZXBvc2l0b3J5Ci0oaHR0cHM6Ly9naXRodWIuY29tL2Jvb3N0b3JnL3Rlc3QpIGFzIG9mIGNvbW1pdCBpZAotZjUwZTdiYzlmZWQzMjNjNTcwNWMwZWQ5OTJjMDNlODBlZWVjMWRkNi4KLSAgCi1VcHN0cmVhbS1TdGF0dXM6IEFjY2VwdGVkIFtjb21taXQgZjUwZTdiYzlmZWQgaW4gZGV2ZWxvcCBicmFuY2hdCi0KLVNpZ25lZC1vZmYtYnk6IEx1a2FzIEJ1bHdhaG4gPGx1a2FzLmJ1bHdhaG5Ab3NzLmJtdy1jYXJpdC5kZT4KLS0tLQotIGluY2x1ZGUvYm9vc3QvdGVzdC9pbXBsL2V4ZWN1dGlvbl9tb25pdG9yLmlwcCB8IDggKysrKy0tLS0KLSAxIGZpbGUgY2hhbmdlZCwgNCBpbnNlcnRpb25zKCspLCA0IGRlbGV0aW9ucygtKQotCi1kaWZmIC0tZ2l0IGEvaW5jbHVkZS9ib29zdC90ZXN0L2ltcGwvZXhlY3V0aW9uX21vbml0b3IuaXBwIGIvaW5jbHVkZS9ib29zdC90ZXN0L2ltcGwvZXhlY3V0aW9uX21vbml0b3IuaXBwCi1pbmRleCBiM2U4NzNlLi5hN2JkY2UyIDEwMDY0NAotLS0tIGEvaW5jbHVkZS9ib29zdC90ZXN0L2ltcGwvZXhlY3V0aW9uX21vbml0b3IuaXBwCi0rKysgYi9pbmNsdWRlL2Jvb3N0L3Rlc3QvaW1wbC9leGVjdXRpb25fbW9uaXRvci5pcHAKLUBAIC0xMzgwLDggKzEzODAsOCBAQCBlbmFibGUoIHVuc2lnbmVkIG1hc2sgKQotIAotICAgICByZXR1cm4gfm9sZF9jdyAmIEJPT1NUX0ZQRV9BTEw7Ci0gI2VsaWYgZGVmaW5lZChfX0dMSUJDX18pICYmIGRlZmluZWQoX19VU0VfR05VKSAmJiAhZGVmaW5lZChCT09TVF9DTEFORykgJiYgIWRlZmluZWQoQk9PU1RfTk9fRkVOVl9IKQotLSAgICA6OmZlY2xlYXJleGNlcHQoQk9PU1RfRlBFX0FMTCk7Ci0tICAgIGludCByZXMgPSA6OmZlZW5hYmxlZXhjZXB0KCBtYXNrICk7Ci0rICAgIGZlY2xlYXJleGNlcHQoQk9PU1RfRlBFX0FMTCk7Ci0rICAgIGludCByZXMgPSBmZWVuYWJsZWV4Y2VwdCggbWFzayApOwotICAgICByZXR1cm4gcmVzID09IC0xID8gKHVuc2lnbmVkKUJPT1NUX0ZQRV9JTlYgOiAodW5zaWduZWQpcmVzOwotICNlbHNlCi0gICAgIC8qIE5vdCBJbXBsZW1lbnRlZCAgKi8KLUBAIC0xNDE3LDggKzE0MTcsOCBAQCBkaXNhYmxlKCB1bnNpZ25lZCBtYXNrICkKLSAKLSAgICAgcmV0dXJuIH5vbGRfY3cgJiBCT09TVF9GUEVfQUxMOwotICNlbGlmIGRlZmluZWQoX19HTElCQ19fKSAmJiBkZWZpbmVkKF9fVVNFX0dOVSkgJiYgIWRlZmluZWQoQk9PU1RfQ0xBTkcpICYmICFkZWZpbmVkKEJPT1NUX05PX0ZFTlZfSCkKLS0gICAgOjpmZWNsZWFyZXhjZXB0KEJPT1NUX0ZQRV9BTEwpOwotLSAgICBpbnQgcmVzID0gOjpmZWRpc2FibGVleGNlcHQoIG1hc2sgKTsKLSsgICAgZmVjbGVhcmV4Y2VwdChCT09TVF9GUEVfQUxMKTsKLSsgICAgaW50IHJlcyA9IGZlZGlzYWJsZWV4Y2VwdCggbWFzayApOwotICAgICByZXR1cm4gcmVzID09IC0xID8gKHVuc2lnbmVkKUJPT1NUX0ZQRV9JTlYgOiAodW5zaWduZWQpcmVzOwotICNlbHNlCi0gICAgIC8qIE5vdCBJbXBsZW1lbnRlZCAqLwotLS0gCi0xLjkuMQotCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvYm9vc3QvYm9vc3QvMDAwMS1ib29zdC1hc2lvLWRldGFpbC1zb2NrZXRfdHlwZXMuaHBwLWZpeC1wb2xsLmgtaW5jbHVkLnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2Jvb3N0L2Jvb3N0LzAwMDEtYm9vc3QtYXNpby1kZXRhaWwtc29ja2V0X3R5cGVzLmhwcC1maXgtcG9sbC5oLWluY2x1ZC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44YTg1YWFjCi0tLSAvZGV2L251bGwKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2Jvb3N0L2Jvb3N0LzAwMDEtYm9vc3QtYXNpby1kZXRhaWwtc29ja2V0X3R5cGVzLmhwcC1maXgtcG9sbC5oLWluY2x1ZC5wYXRjaApAQCAtMCwwICsxLDQ5IEBACitGcm9tIDQwMTkyMzAxMTMwZGNkOTEzYWE2ZDljYjlkYmE5ZTVmOGRiZDlkMTYgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiA9P1VURi04P3E/QW5kcj1DMz1BOT0yMERyYXN6aWs/PSA8YWRyYXN6aWtAdHljb2ludC5jb20+CitEYXRlOiBXZWQsIDI0IEF1ZyAyMDE2IDIxOjAxOjQzICswMTAwCitTdWJqZWN0OiBbUEFUQ0ggMS80XSB1c2UgUE9TSVggcG9sbC5oIGluc3RlYWQgb2Ygc3lzL3BvbGwuaAorTUlNRS1WZXJzaW9uOiAxLjAKK0NvbnRlbnQtVHlwZTogdGV4dC9wbGFpbjsgY2hhcnNldD1VVEYtOAorQ29udGVudC1UcmFuc2Zlci1FbmNvZGluZzogOGJpdAorCitQT1NJWCBzcGVjaWZpZXMgdGhhdCA8cG9sbC5oPiBpcyB0aGUgY29ycmVjdCBoZWFkZXIgdG8KK2luY2x1ZGUgZm9yIHBvbGwoKQorICBodHRwOi8vcHVicy5vcGVuZ3JvdXAub3JnL29ubGluZXB1YnMvMDA5Njk1Mzk5L2Z1bmN0aW9ucy9wb2xsLmh0bWwKK3doZXJlYXMgPHN5cy9wb2xsLmg+IGlzIG9ubHkgbmVlZGVkIGZvciBhbmNpZW50IGdsaWJjICg8Mi4zKSwKK3NvIGxldCdzIGZvbGxvdyBQT1NJWCBpbnN0ZWFkLgorCitBcyBhIHNpZGUtZWZmZWN0LCB0aGlzIHNpbGVuY2VzIGEgd2FybmluZyB3aGVuIGNvbXBpbGluZworYWdhaW5zdCB0aGUgbXVzbCBDLWxpYnJhcnk6CisKK0luIGZpbGUgaW5jbHVkZWQgZnJvbSAuL2Jvb3N0L2FzaW8vZGV0YWlsL3NvY2tldF90eXBlcy5ocHA6NjE6MCwKKyAgICAgICAgICAgICAgICAgZnJvbSAuL2Jvb3N0L2FzaW8vaXAvYWRkcmVzc192NC5ocHA6MjEsCisgICAgICAgICAgICAgICAgIGZyb20gLi9ib29zdC9hc2lvL2lwL2FkZHJlc3MuaHBwOjIxLAorICAgICAgICAgICAgICAgICBmcm9tIGxpYnMvbG9nL3NyYy9pbml0X2Zyb21fc2V0dGluZ3MuY3BwOjY1OgorPHN5c3Jvb3Q+L3Vzci9pbmNsdWRlL3N5cy9wb2xsLmg6MToyOiB3YXJuaW5nOiAjd2FybmluZyByZWRpcmVjdGluZyBpbmNvcnJlY3QgI2luY2x1ZGUgPHN5cy9wb2xsLmg+IHRvIDxwb2xsLmg+IFstV2NwcF0KKyAjd2FybmluZyByZWRpcmVjdGluZyBpbmNvcnJlY3QgI2luY2x1ZGUgPHN5cy9wb2xsLmg+IHRvIDxwb2xsLmg+CisgIF5+fn5+fn4KKworZXRjLgorCitTaWduZWQtb2ZmLWJ5OiBBbmRyw6kgRHJhc3ppayA8YWRyYXN6aWtAdHljb2ludC5jb20+CistLS0KK1Vwc3RyZWFtLVN0YXR1czogU3VibWl0dGVkIGh0dHBzOi8vc3ZuLmJvb3N0Lm9yZy90cmFjL2Jvb3N0L3RpY2tldC8xMjQxOQorIGJvb3N0L2FzaW8vZGV0YWlsL3NvY2tldF90eXBlcy5ocHAgfCAyICstCisgMSBmaWxlIGNoYW5nZWQsIDEgaW5zZXJ0aW9uKCspLCAxIGRlbGV0aW9uKC0pCisKK2RpZmYgLS1naXQgYS9ib29zdC9hc2lvL2RldGFpbC9zb2NrZXRfdHlwZXMuaHBwIGIvYm9vc3QvYXNpby9kZXRhaWwvc29ja2V0X3R5cGVzLmhwcAoraW5kZXggZThjNzEwOS4uN2U2NWQzYyAxMDA2NDQKKy0tLSBhL2Jvb3N0L2FzaW8vZGV0YWlsL3NvY2tldF90eXBlcy5ocHAKKysrKyBiL2Jvb3N0L2FzaW8vZGV0YWlsL3NvY2tldF90eXBlcy5ocHAKK0BAIC01OCw3ICs1OCw3IEBACisgI2Vsc2UKKyAjIGluY2x1ZGUgPHN5cy9pb2N0bC5oPgorICMgaWYgIWRlZmluZWQoX19TWU1CSUFOMzJfXykKKy0jICBpbmNsdWRlIDxzeXMvcG9sbC5oPgorKyMgIGluY2x1ZGUgPHBvbGwuaD4KKyAjIGVuZGlmCisgIyBpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyAjIGluY2x1ZGUgPHN5cy9zdGF0Lmg+CistLSAKKzIuOS4zCisKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9ib29zdC9ib29zdC8wMDAyLWJvb3N0LXRlc3QtZXhlY3V0aW9uX21vbml0b3IuaHBwLWZpeC1taXBzLXNvZnQtZmxvYXQucGF0Y2ggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvYm9vc3QvYm9vc3QvMDAwMi1ib29zdC10ZXN0LWV4ZWN1dGlvbl9tb25pdG9yLmhwcC1maXgtbWlwcy1zb2Z0LWZsb2F0LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU2OWM5ODcKLS0tIC9kZXYvbnVsbAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvYm9vc3QvYm9vc3QvMDAwMi1ib29zdC10ZXN0LWV4ZWN1dGlvbl9tb25pdG9yLmhwcC1maXgtbWlwcy1zb2Z0LWZsb2F0LnBhdGNoCkBAIC0wLDAgKzEsMTQ1IEBACitGcm9tIDVjMzQ5YTFjMzkxYzljZTE3MWExYzgwZjUxNjRmYWU3NjRmMjdkYmEgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiA9P1VURi04P3E/QW5kcj1DMz1BOT0yMERyYXN6aWs/PSA8YWRyYXN6aWtAdHljb2ludC5jb20+CitEYXRlOiBXZWQsIDI0IEF1ZyAyMDE2IDIwOjU4OjU5ICswMTAwCitTdWJqZWN0OiBbUEFUQ0ggMi80XSBib29zdC90ZXN0L2V4ZWN1dGlvbl9tb25pdG9yLmhwcDogZml4IG1pcHMgc29mdCBmbG9hdAorTUlNRS1WZXJzaW9uOiAxLjAKK0NvbnRlbnQtVHlwZTogdGV4dC9wbGFpbjsgY2hhcnNldD1VVEYtOAorQ29udGVudC1UcmFuc2Zlci1FbmNvZGluZzogOGJpdAorCitnY2MuY29tcGlsZS5jKysgPGJ1aWxkZGlyPi9ib29zdC9iaW4udjIvbGlicy90ZXN0L2J1aWxkL2djYy00LjMuMS9yZWxlYXNlL3RocmVhZGluZy1tdWx0aS9leGVjdXRpb25fbW9uaXRvci5vCisKKyAgICAibWlwc2VsLXBva3ktbGludXgtbXVzbC1nKysiICItbWVsIiAiLW1hYmk9MzIiICItbXNvZnQtZmxvYXQiICItbWFyY2g9bWlwczMycjIiICItbWlwczE2IiAiLW1pbnRlcmxpbmstY29tcHJlc3NlZCIgIi1tdHVuZT0yNGtlYyIgIi1tZHNwIiAiLVdsLC1PMSIgIi1XbCwtLWFzLW5lZWRlZCIgIi1mc3RhY2stcHJvdGVjdG9yLXN0cm9uZyIgIi1XbCwteixyZWxybywteixub3ciICItLXN5c3Jvb3Q9PHN5c3Jvb3Q+IiAgLWZ0ZW1wbGF0ZS1kZXB0aC0xMjggLU8yIC1waXBlIC1nIC1mZWxpbWluYXRlLXVudXNlZC1kZWJ1Zy10eXBlcyAtZmRlYnVnLXByZWZpeC1tYXA9PHNyY2Rpcj49L3Vzci9zcmMvZGVidWcvYm9vc3QvMS42MS4wLXIwIC1mZGVidWctcHJlZml4LW1hcD08c3lzcm9vdF9ob3N0Pj0gLWZkZWJ1Zy1wcmVmaXgtbWFwPTxzeXNyb290Pj0gLWZzdGFjay1wcm90ZWN0b3Itc3Ryb25nIC1waWUgLWZwaWUgLURfRk9SVElGWV9TT1VSQ0U9MiAtV2Zvcm1hdCAtV2Zvcm1hdC1zZWN1cml0eSAtV2Vycm9yPWZvcm1hdC1zZWN1cml0eSAtZnZpc2liaWxpdHktaW5saW5lcy1oaWRkZW4gLU8zIC1maW5saW5lLWZ1bmN0aW9ucyAtV25vLWlubGluZSAtV2FsbCAtcGVkYW50aWMgLXB0aHJlYWQgLWZQSUMgLVduby12YXJpYWRpYy1tYWNyb3MgLURCT09TVF9BTExfTk9fTElCPTEgLURCT09TVF9DSFJPTk9fRFlOX0xJTks9MSAtREJPT1NUX1NZU1RFTV9EWU5fTElOSz0xIC1EQk9PU1RfU1lTVEVNX05PX0RFUFJFQ0FURUQgLURCT09TVF9URVNUX0RZTl9MSU5LPTEgLURCT09TVF9USU1FUl9EWU5fTElOSz0xIC1ETkRFQlVHICAtSSIuIiAtYyAtbyAiPGJ1aWxkZGlyPi9ib29zdC9iaW4udjIvbGlicy90ZXN0L2J1aWxkL2djYy00LjMuMS9yZWxlYXNlL3RocmVhZGluZy1tdWx0aS9leGVjdXRpb25fbW9uaXRvci5vIiAibGlicy90ZXN0L3NyYy9leGVjdXRpb25fbW9uaXRvci5jcHAiCisKK0luIGZpbGUgaW5jbHVkZWQgZnJvbSAuL2Jvb3N0L3Rlc3QvaW1wbC9leGVjdXRpb25fbW9uaXRvci5pcHA6MzE6MCwKKyAgICAgICAgICAgICAgICAgZnJvbSBsaWJzL3Rlc3Qvc3JjL2V4ZWN1dGlvbl9tb25pdG9yLmNwcDoxNjoKKy4vYm9vc3QvdGVzdC9leGVjdXRpb25fbW9uaXRvci5ocHA6NDkxOjI3OiBlcnJvcjogJ0ZFX0RJVkJZWkVSTycgd2FzIG5vdCBkZWNsYXJlZCBpbiB0aGlzIHNjb3BlCisgICAgIEJPT1NUX0ZQRV9ESVZCWVpFUk8gPSBGRV9ESVZCWVpFUk8sCisgICAgICAgICAgICAgICAgICAgICAgICAgICBefn5+fn5+fn5+fn4KKy4vYm9vc3QvdGVzdC9leGVjdXRpb25fbW9uaXRvci5ocHA6NDkyOjI3OiBlcnJvcjogJ0ZFX0lORVhBQ1QnIHdhcyBub3QgZGVjbGFyZWQgaW4gdGhpcyBzY29wZQorICAgICBCT09TVF9GUEVfSU5FWEFDVCAgID0gRkVfSU5FWEFDVCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIF5+fn5+fn5+fn4KKy4vYm9vc3QvdGVzdC9leGVjdXRpb25fbW9uaXRvci5ocHA6NDkzOjI3OiBlcnJvcjogJ0ZFX0lOVkFMSUQnIHdhcyBub3QgZGVjbGFyZWQgaW4gdGhpcyBzY29wZQorICAgICBCT09TVF9GUEVfSU5WQUxJRCAgID0gRkVfSU5WQUxJRCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIF5+fn5+fn5+fn4KKy4vYm9vc3QvdGVzdC9leGVjdXRpb25fbW9uaXRvci5ocHA6NDk0OjI3OiBlcnJvcjogJ0ZFX09WRVJGTE9XJyB3YXMgbm90IGRlY2xhcmVkIGluIHRoaXMgc2NvcGUKKyAgICAgQk9PU1RfRlBFX09WRVJGTE9XICA9IEZFX09WRVJGTE9XLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgXn5+fn5+fn5+fn4KKy4vYm9vc3QvdGVzdC9leGVjdXRpb25fbW9uaXRvci5ocHA6NDk1OjI3OiBlcnJvcjogJ0ZFX1VOREVSRkxPVycgd2FzIG5vdCBkZWNsYXJlZCBpbiB0aGlzIHNjb3BlCisgICAgIEJPT1NUX0ZQRV9VTkRFUkZMT1cgPSBGRV9VTkRFUkZMT1csCisgICAgICAgICAgICAgICAgICAgICAgICAgICBefn5+fn5+fn5+fn4KKworVGhlIHJlYXNvbiBpcyB0aGF0IHNvbWUgKG5vdGFibHkgRlBVLWxlc3MpIGFyY2hpdGVjdHVyZXMsCitpbmNsdWRpbmcgbWlwcyotbmYsIGRvbid0IGRlZmluZS9pbXBsZW1lbnQgc29tZSBvZiB0aGUKK2Zsb2F0aW5nIHBvaW50IGNvbnN0YW50cywgZXZlbiB0aG91Z2ggZmVudi5oIGlzCithdmFpbGFibGUuCisKK1RoZSBrZXkgcG9pbnQgaXM6CisgIEEgZnVsbHkgc3RhbmRhcmRzIGNvbmZvcm1pbmcgZmVudi5oIGRvZXMgbm90IGhhdmUgdG8KKyAgZGVmaW5lIGFueSBGRV8qIG1hY3JvcywgYW5kIGlmIGl0IGRvZXMgZGVmaW5lIHRoZW0sCisgIHRoZW4gaXQgZGVmaW5lcyBtYWNyb3Mgb25seSBmb3IgdGhlIEZQIGV4Y2VwdGlvbnMgaXQKKyAgYWN0dWFsbHkgc3VwcG9ydHMuCisKK1NvIGNvcnJlY3QgdXNhZ2UgcmVxdWlyZXMgYSB0cmlwbGUgY2hlY2s6CisxKSBDaGVjayBCT09TVF9OT19GRU5WX0ggdG8gc2VlIGlmIHRoZSBoZWFkZXIgaXMgc3VwcG9ydGVkLgorMikgSW5jbHVkZSB0aGUgaGVhZGVyIGFuZCB0aGVuIGNoZWNrIEZFX0FMTF9FWENFUFQgdG8gc2VlCisgICBpZiBhbnkgRlAgZXhjZXB0aW9ucyBhcmUgc3VwcG9ydGVkLgorMykgQmVmb3JlIHVzaW5nIHRoZSBpbmRpdmlkdWFsIEZFXyogbWFjcm9zLCB5b3UgbmVlZCB0bworICAgY2hlY2sgZm9yIHRoZWlyIGV4aXN0ZW5jZSB0b28gYXMgbm90IGFsbCBtYXkgYmUKKyAgIHN1cHBvcnRlZC4KKworaHR0cHM6Ly9zdm4uYm9vc3Qub3JnL3RyYWMvYm9vc3QvdGlja2V0LzExNzU2CisKK090aGVyIHByb2plY3RzIGhhdmUgc2ltaWxhciBpc3N1ZXMsIGUuZy4gcGl4bWFuLCBhbmQKK2FwcGx5IHNpbWlsYXIgd29yay1hcm91bmRzOgorICBodHRwczovL2xpc3RzLmZyZWVkZXNrdG9wLm9yZy9hcmNoaXZlcy9waXhtYW4vMjAxNC1GZWJydWFyeS8wMDMxNzIuaHRtbAorCitBcmNoaXRlY3R1cmVzIGFyZSBub3RhYmx5IGFsc28gYWxsb3dlZCB0byBkZWZpbmUgRkVfQUxMX0VYQ0VQVCB0byAwIQorS2VlcGluZyB0aGlzIGluIG1pbmQsIGFuZCBrbm93aW5nIHRoYXQgdGhlIGNvbXBpbGVyIHdpbGwgZWxpbWluYXRlCitjb2RlIHRoYXQgY2FuJ3QgYmUgZXhlY3V0ZWQsIHdlIGNhbiBjaGFuZ2UgQk9PU1RfRlBFX0FMTCB0byBiZSAwIGZvcgordGhlIGNhc2Ugb2YgY29tcGlsaW5nIHVzaW5nIENsYW5nIGFuZC9vciBmZW52LmggYmVpbmcgdW5hdmFpbGFibGUKK2FzIHdlbGwsIHdoaWNoIGFsbG93cyBzaW1wbGlmaWNhdGlvbiBvZiB0aGUgI2lmZGVmJ3MgaW4KK2V4ZWN1dGlvbl9tb25pdG9yLmlwcCBhIGJpdC4KKworU2lnbmVkLW9mZi1ieTogQW5kcsOpIERyYXN6aWsgPGFkcmFzemlrQHR5Y29pbnQuY29tPgorLS0tCitVcHN0cmVhbS1TdGF0dXM6IFN1Ym1pdHRlZCBodHRwczovL3N2bi5ib29zdC5vcmcvdHJhYy9ib29zdC90aWNrZXQvMTE3NTYKKyBib29zdC90ZXN0L2V4ZWN1dGlvbl9tb25pdG9yLmhwcCAgICAgIHwgMjYgKysrKysrKysrKysrKysrKysrKysrKysrKy0KKyBib29zdC90ZXN0L2ltcGwvZXhlY3V0aW9uX21vbml0b3IuaXBwIHwgMTAgKysrKysrKystLQorIDIgZmlsZXMgY2hhbmdlZCwgMzMgaW5zZXJ0aW9ucygrKSwgMyBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL2Jvb3N0L3Rlc3QvZXhlY3V0aW9uX21vbml0b3IuaHBwIGIvYm9vc3QvdGVzdC9leGVjdXRpb25fbW9uaXRvci5ocHAKK2luZGV4IDBlZWU0OTcuLjQ0ZmU1OWQgMTAwNjQ0CistLS0gYS9ib29zdC90ZXN0L2V4ZWN1dGlvbl9tb25pdG9yLmhwcAorKysrIGIvYm9vc3QvdGVzdC9leGVjdXRpb25fbW9uaXRvci5ocHAKK0BAIC00ODYsMTUgKzQ4NiwzOSBAQCBlbnVtIG1hc2tzIHsKKyAgICAgQk9PU1RfRlBFX0FMTCAgICAgICA9IE1DV19FTSwKKyAjZWxpZiBkZWZpbmVkKEJPT1NUX05PX0ZFTlZfSCkgfHwgZGVmaW5lZChCT09TVF9DTEFORykgXAorICAgICB8fCBkZWZpbmVkKF9fQVJNX1BDUykKKy0gICAgQk9PU1RfRlBFX0FMTCAgICAgICA9IDEsCisrICAgIEJPT1NUX0ZQRV9BTEwgICAgICAgPSAwLAorICNlbHNlCisrI2lmIGRlZmluZWQoRkVfRElWQllaRVJPKQorICAgICBCT09TVF9GUEVfRElWQllaRVJPID0gRkVfRElWQllaRVJPLAorKyNlbHNlCisrICAgIEJPT1NUX0ZQRV9ESVZCWVpFUk8gPSAwLAorKyNlbmRpZgorKyNpZiBkZWZpbmVkKEZFX0lORVhBQ1QpCisgICAgIEJPT1NUX0ZQRV9JTkVYQUNUICAgPSBGRV9JTkVYQUNULAorKyNlbHNlCisrICAgIEJPT1NUX0ZQRV9JTkVYQUNUICAgPSAwLAorKyNlbmRpZgorKyNpZiBkZWZpbmVkKEZFX0lOVkFMSUQpCisgICAgIEJPT1NUX0ZQRV9JTlZBTElEICAgPSBGRV9JTlZBTElELAorKyNlbHNlCisrICAgIEJPT1NUX0ZQRV9JTlZBTElEICAgPSAwLAorKyNlbmRpZgorKyNpZiBkZWZpbmVkKEZFX09WRVJGTE9XKQorICAgICBCT09TVF9GUEVfT1ZFUkZMT1cgID0gRkVfT1ZFUkZMT1csCisrI2Vsc2UKKysgICAgQk9PU1RfRlBFX09WRVJGTE9XICA9IDAsCisrI2VuZGlmCisrI2lmIGRlZmluZWQoRkVfVU5ERVJGTE9XKQorICAgICBCT09TVF9GUEVfVU5ERVJGTE9XID0gRkVfVU5ERVJGTE9XLAorKyNlbHNlCisrICAgIEJPT1NUX0ZQRV9VTkRFUkZMT1cgPSAwLAorKyNlbmRpZgorIAorKyNpZiBkZWZpbmVkKEZFX0FMTF9FWENFUFQpCisgICAgIEJPT1NUX0ZQRV9BTEwgICAgICAgPSBGRV9BTExfRVhDRVBULAorKyNlbHNlCisrICAgIEJPT1NUX0ZQRV9BTEwgICAgICAgPSAwLAorKyNlbmRpZgorICNlbmRpZgorICAgICBCT09TVF9GUEVfSU5WICAgICAgID0gQk9PU1RfRlBFX0FMTCsxCisgfTsKK2RpZmYgLS1naXQgYS9ib29zdC90ZXN0L2ltcGwvZXhlY3V0aW9uX21vbml0b3IuaXBwIGIvYm9vc3QvdGVzdC9pbXBsL2V4ZWN1dGlvbl9tb25pdG9yLmlwcAoraW5kZXggZjdmYzhlYS4uZDEwODhiOSAxMDA2NDQKKy0tLSBhL2Jvb3N0L3Rlc3QvaW1wbC9leGVjdXRpb25fbW9uaXRvci5pcHAKKysrKyBiL2Jvb3N0L3Rlc3QvaW1wbC9leGVjdXRpb25fbW9uaXRvci5pcHAKK0BAIC0xMzgxLDcgKzEzODEsMTAgQEAgZW5hYmxlKCB1bnNpZ25lZCBtYXNrICkKKyAjZW5kaWYKKyAKKyAgICAgcmV0dXJuIH5vbGRfY3cgJiBCT09TVF9GUEVfQUxMOworLSNlbGlmIGRlZmluZWQoX19HTElCQ19fKSAmJiBkZWZpbmVkKF9fVVNFX0dOVSkgJiYgIWRlZmluZWQoQk9PU1RfQ0xBTkcpICYmICFkZWZpbmVkKEJPT1NUX05PX0ZFTlZfSCkKKysjZWxpZiBkZWZpbmVkKF9fR0xJQkNfXykgJiYgZGVmaW5lZChfX1VTRV9HTlUpCisrICAgIGlmIChCT09TVF9GUEVfQUxMID09IDApCisrICAgICAgICAvKiBOb3QgSW1wbGVtZW50ZWQgKi8KKysgICAgICAgIHJldHVybiAwOworICAgICBmZWNsZWFyZXhjZXB0KEJPT1NUX0ZQRV9BTEwpOworICAgICBpbnQgcmVzID0gZmVlbmFibGVleGNlcHQoIG1hc2sgKTsKKyAgICAgcmV0dXJuIHJlcyA9PSAtMSA/ICh1bnNpZ25lZClCT09TVF9GUEVfSU5WIDogKHVuc2lnbmVkKXJlczsKK0BAIC0xNDE4LDcgKzE0MjEsMTAgQEAgZGlzYWJsZSggdW5zaWduZWQgbWFzayApCisgI2VuZGlmCisgCisgICAgIHJldHVybiB+b2xkX2N3ICYgQk9PU1RfRlBFX0FMTDsKKy0jZWxpZiBkZWZpbmVkKF9fR0xJQkNfXykgJiYgZGVmaW5lZChfX1VTRV9HTlUpICYmICFkZWZpbmVkKEJPT1NUX0NMQU5HKSAmJiAhZGVmaW5lZChCT09TVF9OT19GRU5WX0gpCisrI2VsaWYgZGVmaW5lZChfX0dMSUJDX18pICYmIGRlZmluZWQoX19VU0VfR05VKQorKyAgICBpZiAoQk9PU1RfRlBFX0FMTCA9PSAwKQorKyAgICAgICAgLyogTm90IEltcGxlbWVudGVkICovCisrICAgICAgICByZXR1cm4gQk9PU1RfRlBFX0lOVjsKKyAgICAgZmVjbGVhcmV4Y2VwdChCT09TVF9GUEVfQUxMKTsKKyAgICAgaW50IHJlcyA9IGZlZGlzYWJsZWV4Y2VwdCggbWFzayApOworICAgICByZXR1cm4gcmVzID09IC0xID8gKHVuc2lnbmVkKUJPT1NUX0ZQRV9JTlYgOiAodW5zaWduZWQpcmVzOworLS0gCisyLjkuMworCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvYm9vc3QvYm9vc3QvMDAwMy1zbWFydF9wdHItbWlwcy1hc3NlbWJseS1kb2Vzbi10LWNvbXBpbGUtaW4tbWlwczE2ZS1tLnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2Jvb3N0L2Jvb3N0LzAwMDMtc21hcnRfcHRyLW1pcHMtYXNzZW1ibHktZG9lc24tdC1jb21waWxlLWluLW1pcHMxNmUtbS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yYjQ4ZDBkCi0tLSAvZGV2L251bGwKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2Jvb3N0L2Jvb3N0LzAwMDMtc21hcnRfcHRyLW1pcHMtYXNzZW1ibHktZG9lc24tdC1jb21waWxlLWluLW1pcHMxNmUtbS5wYXRjaApAQCAtMCwwICsxLDYwIEBACitGcm9tIDRmMTlkNzJjYTk0NDE4NDMxZTA2OGNmZDRmZmI5NmVkOWIyODlmNmMgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiA9P1VURi04P3E/QW5kcj1DMz1BOT0yMERyYXN6aWs/PSA8YWRyYXN6aWtAdHljb2ludC5jb20+CitEYXRlOiBXZWQsIDI0IEF1ZyAyMDE2IDE3OjM0OjU5ICswMTAwCitTdWJqZWN0OiBbUEFUQ0ggMy80XSBzbWFydF9wdHI6IG1pcHMgYXNzZW1ibHkgZG9lc24ndCBjb21waWxlIGluIG1pcHMxNmUgbW9kZQorTUlNRS1WZXJzaW9uOiAxLjAKK0NvbnRlbnQtVHlwZTogdGV4dC9wbGFpbjsgY2hhcnNldD1VVEYtOAorQ29udGVudC1UcmFuc2Zlci1FbmNvZGluZzogOGJpdAorCitnY2MuY29tcGlsZS5jKysgPGJ1aWxkZGlyPi9ib29zdC9iaW4udjIvbGlicy9kYXRlX3RpbWUvYnVpbGQvZ2NjLTQuMy4xL3JlbGVhc2UvdGhyZWFkaW5nLW11bHRpL2dyZWdvcmlhbi9ncmVnX21vbnRoLm8KKworICAgICJtaXBzZWwtcG9reS1saW51eC1tdXNsLWcrKyIgIi1tZWwiICItbWFiaT0zMiIgIi1tc29mdC1mbG9hdCIgIi1tYXJjaD1taXBzMzJyMiIgIi1taXBzMTYiICItbWludGVybGluay1jb21wcmVzc2VkIiAiLW10dW5lPTI0a2VjIiAiLW1kc3AiICItV2wsLU8xIiAiLVdsLC0tYXMtbmVlZGVkIiAiLWZzdGFjay1wcm90ZWN0b3Itc3Ryb25nIiAiLVdsLC16LHJlbHJvLC16LG5vdyIgIi0tc3lzcm9vdD08c3lzcm9vdD4iICAtZnRlbXBsYXRlLWRlcHRoLTEyOCAtTzIgLXBpcGUgLWcgLWZlbGltaW5hdGUtdW51c2VkLWRlYnVnLXR5cGVzIC1mZGVidWctcHJlZml4LW1hcD08c3JjZGlyPj0vdXNyL3NyYy9kZWJ1Zy9ib29zdC8xLjYxLjAtcjAgLWZkZWJ1Zy1wcmVmaXgtbWFwPTxzeXNyb290X2hvc3Q+PSAtZmRlYnVnLXByZWZpeC1tYXA9PHN5c3Jvb3Q+PSAtZnN0YWNrLXByb3RlY3Rvci1zdHJvbmcgLXBpZSAtZnBpZSAtRF9GT1JUSUZZX1NPVVJDRT0yIC1XZm9ybWF0IC1XZm9ybWF0LXNlY3VyaXR5IC1XZXJyb3I9Zm9ybWF0LXNlY3VyaXR5IC1mdmlzaWJpbGl0eS1pbmxpbmVzLWhpZGRlbiAtTzMgLWZpbmxpbmUtZnVuY3Rpb25zIC1Xbm8taW5saW5lIC1XYWxsIC1wdGhyZWFkIC1mUElDICAtREJPT1NUX0FMTF9EWU5fTElOSz0xIC1EQk9PU1RfQUxMX05PX0xJQj0xIC1EREFURV9USU1FX0lOTElORSAtRE5ERUJVRyAgLUkiLiIgLWMgLW8gIjxidWlsZGRpcj4vYm9vc3QvYmluLnYyL2xpYnMvZGF0ZV90aW1lL2J1aWxkL2djYy00LjMuMS9yZWxlYXNlL3RocmVhZGluZy1tdWx0aS9ncmVnb3JpYW4vZ3JlZ19tb250aC5vIiAibGlicy9kYXRlX3RpbWUvc3JjL2dyZWdvcmlhbi9ncmVnX21vbnRoLmNwcCIKKwore3N0YW5kYXJkIGlucHV0fTogQXNzZW1ibGVyIG1lc3NhZ2VzOgore3N0YW5kYXJkIGlucHV0fToxNzYwMzogV2FybmluZzogdGhlIGBkc3AnIGV4dGVuc2lvbiByZXF1aXJlcyBNSVBTMzIgcmV2aXNpb24gMiBvciBncmVhdGVyCit7c3RhbmRhcmQgaW5wdXR9OjE3NjA0OiBFcnJvcjogdW5yZWNvZ25pemVkIG9wY29kZSBgbGwgJDMsNCgkMTYpJwore3N0YW5kYXJkIGlucHV0fToxNzYwNjogRXJyb3I6IHVucmVjb2duaXplZCBvcGNvZGUgYHNjICQyLDQoJDE2KScKK3tzdGFuZGFyZCBpbnB1dH06MTc3MzQ6IEVycm9yOiB1bnJlY29nbml6ZWQgb3Bjb2RlIGBsbCAkMyw4KCQxNiknCit7c3RhbmRhcmQgaW5wdXR9OjE3NzM2OiBFcnJvcjogdW5yZWNvZ25pemVkIG9wY29kZSBgc2MgJDIsOCgkMTYpJwore3N0YW5kYXJkIGlucHV0fToxODA4NDogRXJyb3I6IHVucmVjb2duaXplZCBvcGNvZGUgYGxsICQzLDQoJDQpJwore3N0YW5kYXJkIGlucHV0fToxODA4NjogRXJyb3I6IHVucmVjb2duaXplZCBvcGNvZGUgYHNjICQyLDQoJDQpJwore3N0YW5kYXJkIGlucHV0fToxODMxODogRXJyb3I6IHVucmVjb2duaXplZCBvcGNvZGUgYGxsICQzLDgoJDQpJwore3N0YW5kYXJkIGlucHV0fToxODMyMDogRXJyb3I6IHVucmVjb2duaXplZCBvcGNvZGUgYHNjICQyLDgoJDQpJwore3N0YW5kYXJkIGlucHV0fToxOTkyMTogRXJyb3I6IHVucmVjb2duaXplZCBvcGNvZGUgYGxsICQzLDQoJDIpJwore3N0YW5kYXJkIGlucHV0fToxOTkyMzogRXJyb3I6IHVucmVjb2duaXplZCBvcGNvZGUgYHNjICQzLDQoJDIpJwore3N0YW5kYXJkIGlucHV0fToyMDE5OTogRXJyb3I6IHVucmVjb2duaXplZCBvcGNvZGUgYGxsICQ0LDQoJDE2KScKK3tzdGFuZGFyZCBpbnB1dH06MjAyMDE6IEVycm9yOiB1bnJlY29nbml6ZWQgb3Bjb2RlIGBzYyAkMiw0KCQxNiknCit7c3RhbmRhcmQgaW5wdXR9OjIzMzkyOiBFcnJvcjogdW5yZWNvZ25pemVkIG9wY29kZSBgbGwgJDQsOCgkMTYpJwore3N0YW5kYXJkIGlucHV0fToyMzM5NDogRXJyb3I6IHVucmVjb2duaXplZCBvcGNvZGUgYHNjICQyLDgoJDE2KScKKy4uLmZhaWxlZCB1cGRhdGluZyAxIHRhcmdldC4uLgorCitib29zdC9zbWFydF9wdHIvZGV0YWlsL3NwX2NvdW50ZWRfYmFzZV9nY2NfbWlwcy5ocHAKK2NvbnRhaW5zIGhhbmQtd3JpdHRlbiBNSVBTIGFzc2VtYmx5LCB3aGljaCBpcyBub3QgY29tcGF0aWJsZQord2l0aCB0aGUgTUlQUzE2ZSBpbnN0cnVjdGlvbiBzZXQuCisKK0J5IG5vdCB1c2luZyB0aGlzIGZpbGUgaW4gTUlQUzE2ZSBtb2RlLCB3ZSBmYWxsYmFjayB0byB1c2luZworZysrIDQuMSsgX19zeW5jIGludHJpbnNpY3MgKF9fc3luY19mZXRjaF9hbmRfYWRkKCkgYW5kCitfX3N5bmNfdmFsX2NvbXBhcmVfYW5kX3N3YXAoKSkgd2hpY2ggYXJlIHdvcmtpbmcgZmluZS4KKworU2lnbmVkLW9mZi1ieTogQW5kcsOpIERyYXN6aWsgPGFkcmFzemlrQHR5Y29pbnQuY29tPgorLS0tCitVcHN0cmVhbS1TdGF0dXM6IEJhY2twb3J0IGh0dHBzOi8vc3ZuLmJvb3N0Lm9yZy90cmFjL2Jvb3N0L3RpY2tldC8xMjQxOAorIGJvb3N0L3NtYXJ0X3B0ci9kZXRhaWwvc3BfY291bnRlZF9iYXNlLmhwcCB8IDIgKy0KKyAxIGZpbGUgY2hhbmdlZCwgMSBpbnNlcnRpb24oKyksIDEgZGVsZXRpb24oLSkKKworZGlmZiAtLWdpdCBhL2Jvb3N0L3NtYXJ0X3B0ci9kZXRhaWwvc3BfY291bnRlZF9iYXNlLmhwcCBiL2Jvb3N0L3NtYXJ0X3B0ci9kZXRhaWwvc3BfY291bnRlZF9iYXNlLmhwcAoraW5kZXggMGFkZGYwNy4uMDk5NWNhOCAxMDA2NDQKKy0tLSBhL2Jvb3N0L3NtYXJ0X3B0ci9kZXRhaWwvc3BfY291bnRlZF9iYXNlLmhwcAorKysrIGIvYm9vc3Qvc21hcnRfcHRyL2RldGFpbC9zcF9jb3VudGVkX2Jhc2UuaHBwCitAQCAtNjUsNyArNjUsNyBAQAorICNlbGlmIGRlZmluZWQoIF9fR05VQ19fICkgJiYgKCBkZWZpbmVkKCBfX3Bvd2VycGNfXyApIHx8IGRlZmluZWQoIF9fcHBjX18gKSB8fCBkZWZpbmVkKCBfX3BwYyApICkgJiYgIWRlZmluZWQoX19QQVRIU0NBTEVfXykgJiYgIWRlZmluZWQoIF9BSVggKQorICMgaW5jbHVkZSA8Ym9vc3Qvc21hcnRfcHRyL2RldGFpbC9zcF9jb3VudGVkX2Jhc2VfZ2NjX3BwYy5ocHA+CisgCistI2VsaWYgZGVmaW5lZCggX19HTlVDX18gKSAmJiAoIGRlZmluZWQoIF9fbWlwc19fICkgfHwgZGVmaW5lZCggX21pcHMgKSApICYmICFkZWZpbmVkKF9fUEFUSFNDQUxFX18pCisrI2VsaWYgZGVmaW5lZCggX19HTlVDX18gKSAmJiAoIGRlZmluZWQoIF9fbWlwc19fICkgfHwgZGVmaW5lZCggX21pcHMgKSApICYmICFkZWZpbmVkKF9fUEFUSFNDQUxFX18pICYmICFkZWZpbmVkKCBfX21pcHMxNiApCisgIyBpbmNsdWRlIDxib29zdC9zbWFydF9wdHIvZGV0YWlsL3NwX2NvdW50ZWRfYmFzZV9nY2NfbWlwcy5ocHA+CisgCisgI2VsaWYgZGVmaW5lZCggQk9PU1RfU1BfSEFTX1NZTkMgKQorLS0gCisyLjkuMworCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvYm9vc3QvYm9vc3QvMDAwNC1Vc2UtYXRvbWljLWJ5LWRlZmF1bHQtd2hlbi1CT09TVF9OT19DWFgxMV9IRFJfQVRPTUlDLnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2Jvb3N0L2Jvb3N0LzAwMDQtVXNlLWF0b21pYy1ieS1kZWZhdWx0LXdoZW4tQk9PU1RfTk9fQ1hYMTFfSERSX0FUT01JQy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hYjc4MjZiCi0tLSAvZGV2L251bGwKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2Jvb3N0L2Jvb3N0LzAwMDQtVXNlLWF0b21pYy1ieS1kZWZhdWx0LXdoZW4tQk9PU1RfTk9fQ1hYMTFfSERSX0FUT01JQy5wYXRjaApAQCAtMCwwICsxLDU5IEBACitGcm9tIGMyMzRjYzU1N2Y2MDcyOWUwNzFkNmRhNTk3NDdjMWE5Mjg5NTU1YzUgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBQZXRlciBEaW1vdiA8cGRpbW92QHBkaW1vdi5jb20+CitEYXRlOiBTdW4sIDI4IEF1ZyAyMDE2IDIxOjI4OjIxICswMzAwCitTdWJqZWN0OiBbUEFUQ0ggNC80XSBVc2UgPGF0b21pYz4gYnkgZGVmYXVsdCB3aGVuIEJPT1NUX05PX0NYWDExX0hEUl9BVE9NSUMgaXMKKyBub3QgZGVmaW5lZAorCistLS0KK1Vwc3RyZWFtLVN0YXR1czogQmFja3BvcnQgW2h0dHBzOi8vZ2l0aHViLmNvbS9ib29zdG9yZy9zbWFydF9wdHIvY29tbWl0LzIwZmVkY2ZmMmNhMzE0MzUwM2VjNGU4NzZkNDc3NDVhYjBlYzdiMGNdCitTaWduZWQtb2ZmLWJ5OiBBbmRyw6kgRHJhc3ppayA8Z2l0QGFuZHJlZC5uZXQ+CisgYm9vc3Qvc21hcnRfcHRyL2RldGFpbC9hdG9taWNfY291bnQuaHBwICAgIHwgMyArKysKKyBib29zdC9zbWFydF9wdHIvZGV0YWlsL3NwX2NvdW50ZWRfYmFzZS5ocHAgfCAzICsrKworIGJvb3N0L3NtYXJ0X3B0ci9kZXRhaWwvc3BpbmxvY2suaHBwICAgICAgICB8IDMgKysrCisgMyBmaWxlcyBjaGFuZ2VkLCA5IGluc2VydGlvbnMoKykKKworZGlmZiAtLWdpdCBhL2Jvb3N0L3NtYXJ0X3B0ci9kZXRhaWwvYXRvbWljX2NvdW50LmhwcCBiL2Jvb3N0L3NtYXJ0X3B0ci9kZXRhaWwvYXRvbWljX2NvdW50LmhwcAoraW5kZXggOGFlZmQ0NC4uNmU0ZjcxYSAxMDA2NDQKKy0tLSBhL2Jvb3N0L3NtYXJ0X3B0ci9kZXRhaWwvYXRvbWljX2NvdW50LmhwcAorKysrIGIvYm9vc3Qvc21hcnRfcHRyL2RldGFpbC9hdG9taWNfY291bnQuaHBwCitAQCAtNzMsNiArNzMsOSBAQAorICNlbGlmIGRlZmluZWQoIEJPT1NUX0RJU0FCTEVfVEhSRUFEUyApICYmICFkZWZpbmVkKCBCT09TVF9TUF9FTkFCTEVfVEhSRUFEUyApICYmICFkZWZpbmVkKCBCT09TVF9ESVNBQkxFX1dJTjMyICkKKyAjIGluY2x1ZGUgPGJvb3N0L3NtYXJ0X3B0ci9kZXRhaWwvYXRvbWljX2NvdW50X250LmhwcD4KKyAKKysjZWxpZiAhZGVmaW5lZCggQk9PU1RfTk9fQ1hYMTFfSERSX0FUT01JQyApCisrIyBpbmNsdWRlIDxib29zdC9zbWFydF9wdHIvZGV0YWlsL2F0b21pY19jb3VudF9zdGRfYXRvbWljLmhwcD4KKysKKyAjZWxpZiBkZWZpbmVkKCBfX0dOVUNfXyApICYmICggZGVmaW5lZCggX19pMzg2X18gKSB8fCBkZWZpbmVkKCBfX3g4Nl82NF9fICkgKSAmJiAhZGVmaW5lZCggX19QQVRIU0NBTEVfXyApCisgIyBpbmNsdWRlIDxib29zdC9zbWFydF9wdHIvZGV0YWlsL2F0b21pY19jb3VudF9nY2NfeDg2LmhwcD4KKyAKK2RpZmYgLS1naXQgYS9ib29zdC9zbWFydF9wdHIvZGV0YWlsL3NwX2NvdW50ZWRfYmFzZS5ocHAgYi9ib29zdC9zbWFydF9wdHIvZGV0YWlsL3NwX2NvdW50ZWRfYmFzZS5ocHAKK2luZGV4IDA5OTVjYTguLjgzZWRlMjMgMTAwNjQ0CistLS0gYS9ib29zdC9zbWFydF9wdHIvZGV0YWlsL3NwX2NvdW50ZWRfYmFzZS5ocHAKKysrKyBiL2Jvb3N0L3NtYXJ0X3B0ci9kZXRhaWwvc3BfY291bnRlZF9iYXNlLmhwcAorQEAgLTQ0LDYgKzQ0LDkgQEAKKyAjZWxpZiBkZWZpbmVkKCBCT09TVF9TUF9IQVNfQ0xBTkdfQzExX0FUT01JQ1MgKQorICMgaW5jbHVkZSA8Ym9vc3Qvc21hcnRfcHRyL2RldGFpbC9zcF9jb3VudGVkX2Jhc2VfY2xhbmcuaHBwPgorIAorKyNlbGlmICFkZWZpbmVkKCBCT09TVF9OT19DWFgxMV9IRFJfQVRPTUlDICkKKysjIGluY2x1ZGUgPGJvb3N0L3NtYXJ0X3B0ci9kZXRhaWwvc3BfY291bnRlZF9iYXNlX3N0ZF9hdG9taWMuaHBwPgorKworICNlbGlmIGRlZmluZWQoIF9fU05DX18gKQorICMgaW5jbHVkZSA8Ym9vc3Qvc21hcnRfcHRyL2RldGFpbC9zcF9jb3VudGVkX2Jhc2Vfc25jX3BzMy5ocHA+CisgCitkaWZmIC0tZ2l0IGEvYm9vc3Qvc21hcnRfcHRyL2RldGFpbC9zcGlubG9jay5ocHAgYi9ib29zdC9zbWFydF9wdHIvZGV0YWlsL3NwaW5sb2NrLmhwcAoraW5kZXggMTlmOTNkNy4uMGI2MThkZiAxMDA2NDQKKy0tLSBhL2Jvb3N0L3NtYXJ0X3B0ci9kZXRhaWwvc3BpbmxvY2suaHBwCisrKysgYi9ib29zdC9zbWFydF9wdHIvZGV0YWlsL3NwaW5sb2NrLmhwcAorQEAgLTQzLDYgKzQzLDkgQEAKKyAjZWxpZiBkZWZpbmVkKCBCT09TVF9TUF9VU0VfUFRIUkVBRFMgKQorICMgIGluY2x1ZGUgPGJvb3N0L3NtYXJ0X3B0ci9kZXRhaWwvc3BpbmxvY2tfcHQuaHBwPgorIAorKyNlbGlmICFkZWZpbmVkKCBCT09TVF9OT19DWFgxMV9IRFJfQVRPTUlDICkKKysjICBpbmNsdWRlIDxib29zdC9zbWFydF9wdHIvZGV0YWlsL3NwaW5sb2NrX3N0ZF9hdG9taWMuaHBwPgorKworICNlbGlmIGRlZmluZWQoX19HTlVDX18pICYmIGRlZmluZWQoIF9fYXJtX18gKSAmJiAhZGVmaW5lZCggX190aHVtYl9fICkKKyAjICBpbmNsdWRlIDxib29zdC9zbWFydF9wdHIvZGV0YWlsL3NwaW5sb2NrX2djY19hcm0uaHBwPgorIAorLS0gCisyLjkuMworCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvYm9vc3QvYm9vc3QvYm9vc3QtQ1ZFLTIwMTItMjY3Ny5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9ib29zdC9ib29zdC9ib29zdC1DVkUtMjAxMi0yNjc3LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkxNzYxN2EKLS0tIC9kZXYvbnVsbAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvYm9vc3QvYm9vc3QvYm9vc3QtQ1ZFLTIwMTItMjY3Ny5wYXRjaApAQCAtMCwwICsxLDExMiBAQAorUmVmZXJlbmNlCisKK2h0dHBzOi8vc3ZuLmJvb3N0Lm9yZy90cmFjL2Jvb3N0L2NoYW5nZXNldC83ODMyNgorCitVcHN0cmVhbS1TdGF0dXM6IEJhY2twb3J0CitDVkU6IENWRS0yMDEyLTI2NzcKK1NpZ25lZC1vZmYtYnk6IFl1ZSBUYW8gPHl1ZS50YW9Ad2luZHJpdmVyLmNvbT4KKworZGlmZiAtLWdpdCBhL2Jvb3N0L3Bvb2wvcG9vbC5ocHAub2xkIGIvYm9vc3QvcG9vbC9wb29sLmhwcAoraW5kZXggYzQ3YjExZi4uNDE3YTFlMCAxMDA2NDQKKy0tLSBhL2Jvb3N0L3Bvb2wvcG9vbC5ocHAub2xkCisrKysgYi9ib29zdC9wb29sL3Bvb2wuaHBwCitAQCAtMjYsNiArMjYsOCBAQAorIAorICNpbmNsdWRlIDxib29zdC9wb29sL3Bvb2xmd2QuaHBwPgorIAorKy8vIHN0ZDo6bnVtZXJpY19saW1pdHMKKysjaW5jbHVkZSA8Ym9vc3QvbGltaXRzLmhwcD4KKyAvLyBib29zdDo6aW50ZWdlcjo6c3RhdGljX2xjbQorICNpbmNsdWRlIDxib29zdC9pbnRlZ2VyL2NvbW1vbl9mYWN0b3JfY3QuaHBwPgorIC8vIGJvb3N0OjpzaW1wbGVfc2VncmVnYXRlZF9zdG9yYWdlCitAQCAtMzU1LDYgKzM1NywxNSBAQCBjbGFzcyBwb29sOiBwcm90ZWN0ZWQgc2ltcGxlX3NlZ3JlZ2F0ZWRfc3RvcmFnZSA8IHR5cGVuYW1lIFVzZXJBbGxvY2F0b3I6OnNpemVfdAorICAgICAgIHJldHVybiBzOworICAgICB9CisgCisrICAgIHNpemVfdHlwZSBtYXhfY2h1bmtzKCkgY29uc3QKKysgICAgeyAvLyEgQ2FsY3VsYXRlZCBtYXhpbXVtIG51bWJlciBvZiBtZW1vcnkgY2h1bmtzIHRoYXQgY2FuIGJlIGFsbG9jYXRlZCBpbiBhIHNpbmdsZSBjYWxsIGJ5IHRoaXMgUG9vbC4KKysgICAgICBzaXplX3R5cGUgcGFydGl0aW9uX3NpemUgPSBhbGxvY19zaXplKCk7CisrICAgICAgc2l6ZV90eXBlIFBPRF9zaXplID0gaW50ZWdlcjo6c3RhdGljX2xjbTxzaXplb2Yoc2l6ZV90eXBlKSwgc2l6ZW9mKHZvaWQgKik+Ojp2YWx1ZSArIHNpemVvZihzaXplX3R5cGUpOworKyAgICAgIHNpemVfdHlwZSBtYXhfY2h1bmtzID0gKHN0ZDo6bnVtZXJpY19saW1pdHM8c2l6ZV90eXBlPjo6bWF4KCkgLSBQT0Rfc2l6ZSkgLyBhbGxvY19zaXplKCk7CisrCisrICAgICAgcmV0dXJuIG1heF9jaHVua3M7CisrICAgIH0KKysKKyAgICAgc3RhdGljIHZvaWQgKiAmIG5leHRvZih2b2lkICogY29uc3QgcHRyKQorICAgICB7IC8vISBccmV0dXJucyBQb2ludGVyIGRlcmVmZXJlbmNlZC4KKyAgICAgICAvLyEgKFByb3ZpZGVkIGFuZCB1c2VkIGZvciB0aGUgc2FrZSBvZiBjb2RlIHJlYWRhYmlsaXR5IDopCitAQCAtMzc1LDYgKzM4Niw4IEBAIGNsYXNzIHBvb2w6IHByb3RlY3RlZCBzaW1wbGVfc2VncmVnYXRlZF9zdG9yYWdlIDwgdHlwZW5hbWUgVXNlckFsbG9jYXRvcjo6c2l6ZV90CisgICAgICAgLy8hICAgdGhlIGZpcnN0IHRpbWUgdGhhdCBvYmplY3QgbmVlZHMgdG8gYWxsb2NhdGUgc3lzdGVtIG1lbW9yeS4KKyAgICAgICAvLyEgICBUaGUgZGVmYXVsdCBpcyAzMi4gVGhpcyBwYXJhbWV0ZXIgbWF5IG5vdCBiZSAwLgorICAgICAgIC8vISBccGFyYW0gbm1heF9zaXplIGlzIHRoZSBtYXhpbXVtIG51bWJlciBvZiBjaHVua3MgdG8gYWxsb2NhdGUgaW4gb25lIGJsb2NrLgorKyAgICAgIHNldF9uZXh0X3NpemUobm5leHRfc2l6ZSk7CisrICAgICAgc2V0X21heF9zaXplKG5tYXhfc2l6ZSk7CisgICAgIH0KKyAKKyAgICAgfnBvb2woKQorQEAgLTM5OCw4ICs0MTEsOCBAQCBjbGFzcyBwb29sOiBwcm90ZWN0ZWQgc2ltcGxlX3NlZ3JlZ2F0ZWRfc3RvcmFnZSA8IHR5cGVuYW1lIFVzZXJBbGxvY2F0b3I6OnNpemVfdAorICAgICB9CisgICAgIHZvaWQgc2V0X25leHRfc2l6ZShjb25zdCBzaXplX3R5cGUgbm5leHRfc2l6ZSkKKyAgICAgeyAvLyEgU2V0IG51bWJlciBvZiBjaHVua3MgdG8gcmVxdWVzdCBmcm9tIHRoZSBzeXN0ZW0gdGhlIG5leHQgdGltZSB0aGF0IG9iamVjdCBuZWVkcyB0byBhbGxvY2F0ZSBzeXN0ZW0gbWVtb3J5LiBUaGlzIHZhbHVlIHNob3VsZCBuZXZlciBiZSBzZXQgdG8gMC4KKy0gICAgICAvLyEgXHJldHVybnMgbm5leHRfc2l6ZS4KKy0gICAgICBuZXh0X3NpemUgPSBzdGFydF9zaXplID0gbm5leHRfc2l6ZTsKKysgICAgICBCT09TVF9VU0lOR19TVERfTUlOKCk7CisrICAgICAgbmV4dF9zaXplID0gc3RhcnRfc2l6ZSA9IG1pbiBCT09TVF9QUkVWRU5UX01BQ1JPX1NVQlNUSVRVVElPTihubmV4dF9zaXplLCBtYXhfY2h1bmtzKCkpOworICAgICB9CisgICAgIHNpemVfdHlwZSBnZXRfbWF4X3NpemUoKSBjb25zdAorICAgICB7IC8vISBccmV0dXJucyBtYXhfc2l6ZS4KK0BAIC00MDcsNyArNDIwLDggQEAgY2xhc3MgcG9vbDogcHJvdGVjdGVkIHNpbXBsZV9zZWdyZWdhdGVkX3N0b3JhZ2UgPCB0eXBlbmFtZSBVc2VyQWxsb2NhdG9yOjpzaXplX3QKKyAgICAgfQorICAgICB2b2lkIHNldF9tYXhfc2l6ZShjb25zdCBzaXplX3R5cGUgbm1heF9zaXplKQorICAgICB7IC8vISBTZXQgbWF4X3NpemUuCistICAgICAgbWF4X3NpemUgPSBubWF4X3NpemU7CisrICAgICAgQk9PU1RfVVNJTkdfU1REX01JTigpOworKyAgICAgIG1heF9zaXplID0gbWluIEJPT1NUX1BSRVZFTlRfTUFDUk9fU1VCU1RJVFVUSU9OKG5tYXhfc2l6ZSwgbWF4X2NodW5rcygpKTsKKyAgICAgfQorICAgICBzaXplX3R5cGUgZ2V0X3JlcXVlc3RlZF9zaXplKCkgY29uc3QKKyAgICAgeyAvLyEgICBccmV0dXJucyB0aGUgcmVxdWVzdGVkIHNpemUgcGFzc2VkIGludG8gdGhlIGNvbnN0cnVjdG9yLgorQEAgLTcwOCw5ICs3MjIsOSBAQCB2b2lkICogcG9vbDxVc2VyQWxsb2NhdG9yPjo6bWFsbG9jX25lZWRfcmVzaXplKCkKKyAKKyAgIEJPT1NUX1VTSU5HX1NURF9NSU4oKTsKKyAgIGlmKCFtYXhfc2l6ZSkKKy0gICAgbmV4dF9zaXplIDw8PSAxOworKyAgICBzZXRfbmV4dF9zaXplKG5leHRfc2l6ZSA8PCAxKTsKKyAgIGVsc2UgaWYoIG5leHRfc2l6ZSpwYXJ0aXRpb25fc2l6ZS9yZXF1ZXN0ZWRfc2l6ZSA8IG1heF9zaXplKQorLSAgICBuZXh0X3NpemUgPSBtaW4gQk9PU1RfUFJFVkVOVF9NQUNST19TVUJTVElUVVRJT04obmV4dF9zaXplIDw8IDEsIG1heF9zaXplKnJlcXVlc3RlZF9zaXplLyBwYXJ0aXRpb25fc2l6ZSk7CisrICAgIHNldF9uZXh0X3NpemUobWluIEJPT1NUX1BSRVZFTlRfTUFDUk9fU1VCU1RJVFVUSU9OKG5leHRfc2l6ZSA8PCAxLCBtYXhfc2l6ZSAqIHJlcXVlc3RlZF9zaXplIC8gcGFydGl0aW9uX3NpemUpKTsKKyAKKyAgIC8vICBpbml0aWFsaXplIGl0LAorICAgc3RvcmUoKS5hZGRfYmxvY2sobm9kZS5iZWdpbigpLCBub2RlLmVsZW1lbnRfc2l6ZSgpLCBwYXJ0aXRpb25fc2l6ZSk7CitAQCAtNzQ4LDkgKzc2Miw5IEBAIHZvaWQgKiBwb29sPFVzZXJBbGxvY2F0b3I+OjpvcmRlcmVkX21hbGxvY19uZWVkX3Jlc2l6ZSgpCisgCisgICBCT09TVF9VU0lOR19TVERfTUlOKCk7CisgICBpZighbWF4X3NpemUpCistICAgIG5leHRfc2l6ZSA8PD0gMTsKKysgICAgc2V0X25leHRfc2l6ZShuZXh0X3NpemUgPDwgMSk7CisgICBlbHNlIGlmKCBuZXh0X3NpemUqcGFydGl0aW9uX3NpemUvcmVxdWVzdGVkX3NpemUgPCBtYXhfc2l6ZSkKKy0gICAgbmV4dF9zaXplID0gbWluIEJPT1NUX1BSRVZFTlRfTUFDUk9fU1VCU1RJVFVUSU9OKG5leHRfc2l6ZSA8PCAxLCBtYXhfc2l6ZSpyZXF1ZXN0ZWRfc2l6ZS8gcGFydGl0aW9uX3NpemUpOworKyAgICBzZXRfbmV4dF9zaXplKG1pbiBCT09TVF9QUkVWRU5UX01BQ1JPX1NVQlNUSVRVVElPTihuZXh0X3NpemUgPDwgMSwgbWF4X3NpemUgKiByZXF1ZXN0ZWRfc2l6ZSAvIHBhcnRpdGlvbl9zaXplKSk7CisgCisgICAvLyAgaW5pdGlhbGl6ZSBpdCwKKyAgIC8vICAod2UgY2FuIHVzZSAiYWRkX2Jsb2NrIiBoZXJlIGJlY2F1c2Ugd2Uga25vdyB0aGF0CitAQCAtNzkyLDYgKzgwNiw4IEBAIHZvaWQgKiBwb29sPFVzZXJBbGxvY2F0b3I+OjpvcmRlcmVkX21hbGxvYyhjb25zdCBzaXplX3R5cGUgbikKKyB7IC8vISBHZXRzIGFkZHJlc3Mgb2YgYSBjaHVuayBuLCBhbGxvY2F0aW5nIG5ldyBtZW1vcnkgaWYgbm90IGFscmVhZHkgYXZhaWxhYmxlLgorICAgLy8hIFxyZXR1cm5zIEFkZHJlc3Mgb2YgY2h1bmsgbiBpZiBhbGxvY2F0ZWQgb2suCisgICAvLyEgXHJldHVybnMgMCBpZiBub3QgZW5vdWdoIG1lbW9yeSBmb3IgbiBjaHVua3MuCisrICBpZiAobiA+IG1heF9jaHVua3MoKSkKKysgICAgcmV0dXJuIDA7CisgCisgICBjb25zdCBzaXplX3R5cGUgcGFydGl0aW9uX3NpemUgPSBhbGxvY19zaXplKCk7CisgICBjb25zdCBzaXplX3R5cGUgdG90YWxfcmVxX3NpemUgPSBuICogcmVxdWVzdGVkX3NpemU7CitAQCAtODQwLDkgKzg1Niw5IEBAIHZvaWQgKiBwb29sPFVzZXJBbGxvY2F0b3I+OjpvcmRlcmVkX21hbGxvYyhjb25zdCBzaXplX3R5cGUgbikKKyAKKyAgIEJPT1NUX1VTSU5HX1NURF9NSU4oKTsKKyAgIGlmKCFtYXhfc2l6ZSkKKy0gICAgbmV4dF9zaXplIDw8PSAxOworKyAgICBzZXRfbmV4dF9zaXplKG5leHRfc2l6ZSA8PCAxKTsKKyAgIGVsc2UgaWYoIG5leHRfc2l6ZSpwYXJ0aXRpb25fc2l6ZS9yZXF1ZXN0ZWRfc2l6ZSA8IG1heF9zaXplKQorLSAgICBuZXh0X3NpemUgPSBtaW4gQk9PU1RfUFJFVkVOVF9NQUNST19TVUJTVElUVVRJT04obmV4dF9zaXplIDw8IDEsIG1heF9zaXplKnJlcXVlc3RlZF9zaXplLyBwYXJ0aXRpb25fc2l6ZSk7CisrICAgIHNldF9uZXh0X3NpemUobWluIEJPT1NUX1BSRVZFTlRfTUFDUk9fU1VCU1RJVFVUSU9OKG5leHRfc2l6ZSA8PCAxLCBtYXhfc2l6ZSAqIHJlcXVlc3RlZF9zaXplIC8gcGFydGl0aW9uX3NpemUpKTsKKyAKKyAgIC8vICBpbnNlcnQgaXQgaW50byB0aGUgbGlzdCwKKyAgIC8vICAgaGFuZGxlIGJvcmRlciBjYXNlLgpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2Jvb3N0L2Jvb3N0L2Jvb3N0LW1hdGgtZGlzYWJsZS1wY2gtZm9yLWdjYy5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9ib29zdC9ib29zdC9ib29zdC1tYXRoLWRpc2FibGUtcGNoLWZvci1nY2MucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTk1YmExNwotLS0gL2Rldi9udWxsCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9ib29zdC9ib29zdC9ib29zdC1tYXRoLWRpc2FibGUtcGNoLWZvci1nY2MucGF0Y2gKQEAgLTAsMCArMSwzMSBAQAorRnJvbSBjYWJmY2JhMWZmNzUxMWZmZDZiOTFjYTI0NDI4OGQ0NGY1ODVhYWQyIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogSmFja2llIEh1YW5nIDxqYWNraWUuaHVhbmdAd2luZHJpdmVyLmNvbT4KK0RhdGU6IEZyaSwgMjMgU2VwIDIwMTYgMDE6MDQ6NTAgLTA3MDAKK1N1YmplY3Q6IFtQQVRDSF0gYm9vc3QtbWF0aDogZGlzYWJsZSBwY2ggZm9yIGdjYworCitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgWypdCisKKyogSXQncyBhIHdvcmsgYXJvdW5kIGZvciBhIGRlZmVjdCB3aGVuIGJ1aWxkIGluIHBhcmFsbGVsOgoraHR0cHM6Ly9zdm4uYm9vc3Qub3JnL3RyYWMvYm9vc3QvdGlja2V0LzEyNDc3CisKK1NpZ25lZC1vZmYtYnk6IEphY2tpZSBIdWFuZyA8amFja2llLmh1YW5nQHdpbmRyaXZlci5jb20+CistLS0KKyBsaWJzL21hdGgvYnVpbGQvSmFtZmlsZS52MiB8IDIgKy0KKyAxIGZpbGUgY2hhbmdlZCwgMSBpbnNlcnRpb24oKyksIDEgZGVsZXRpb24oLSkKKworZGlmZiAtLWdpdCBhL2xpYnMvbWF0aC9idWlsZC9KYW1maWxlLnYyIGIvbGlicy9tYXRoL2J1aWxkL0phbWZpbGUudjIKK2luZGV4IGUxOWZiMmUuLjgyNDcyYTcgMTAwNjQ0CistLS0gYS9saWJzL21hdGgvYnVpbGQvSmFtZmlsZS52MgorKysrIGIvbGlicy9tYXRoL2J1aWxkL0phbWZpbGUudjIKK0BAIC0xMyw3ICsxMyw3IEBAIHByb2plY3QKKyAgICAgICAjPHRvb2xzZXQ+aW50ZWwtbGludXg6PHBjaD5vZmYKKyAgICAgICA8dG9vbHNldD5pbnRlbC1kYXJ3aW46PHBjaD5vZmYKKyAgICAgICA8dG9vbHNldD5tc3ZjLTcuMTo8cGNoPm9mZgorLSAgICAgIDx0b29sc2V0PmdjYyw8dGFyZ2V0LW9zPndpbmRvd3M6PHBjaD5vZmYKKysgICAgICA8dG9vbHNldD5nY2M6PHBjaD5vZmYKKyAgICAgICAjPHRvb2xzZXQ+Z2NjOjxjeHhmbGFncz4tZnZpc2liaWxpdHk9aGlkZGVuCisgICAgICAgPHRvb2xzZXQ+aW50ZWwtbGludXg6PGN4eGZsYWdzPi1mdmlzaWJpbGl0eT1oaWRkZW4KKyAgICAgICAjPHRvb2xzZXQ+c3VuOjxjeHhmbGFncz4teGxkc2NvcGU9aGlkZGVuCistLSAKKzIuNy40CisKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9ib29zdC9ib29zdF8xLjYwLjAuYmIgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvYm9vc3QvYm9vc3RfMS42MC4wLmJiCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0ZDgyNGM4Li4wMDAwMDAwCi0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9ib29zdC9ib29zdF8xLjYwLjAuYmIKKysrIC9kZXYvbnVsbApAQCAtMSw4ICswLDAgQEAKLWluY2x1ZGUgYm9vc3QtJHtQVn0uaW5jCi1pbmNsdWRlIGJvb3N0LmluYwotCi1TUkNfVVJJICs9ICJcCi0gICAgZmlsZTovL2FybS1pbnRyaW5zaWNzLnBhdGNoIFwKLSAgICBmaWxlOi8vMDAwMS1Eby1ub3QtcXVhbGlmeS1mZW52LmgtbmFtZXMtdGhhdC1taWdodC1iZS1tYWNyb3MucGF0Y2g7c3RyaXBsZXZlbD0yIFwKLSAgICBmaWxlOi8vY29uc2lkZXItaGFyZGZwLnBhdGNoIFwKLSIKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9ib29zdC9ib29zdF8xLjYxLjAuYmIgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvYm9vc3QvYm9vc3RfMS42MS4wLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQwZTM4NzAKLS0tIC9kZXYvbnVsbAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvYm9vc3QvYm9vc3RfMS42MS4wLmJiCkBAIC0wLDAgKzEsMTMgQEAKK2luY2x1ZGUgYm9vc3QtJHtQVn0uaW5jCitpbmNsdWRlIGJvb3N0LmluYworCitTUkNfVVJJICs9ICJcCisgICAgZmlsZTovL2FybS1pbnRyaW5zaWNzLnBhdGNoIFwKKyAgICBmaWxlOi8vY29uc2lkZXItaGFyZGZwLnBhdGNoIFwKKyAgICBmaWxlOi8vYm9vc3QtQ1ZFLTIwMTItMjY3Ny5wYXRjaCBcCisgICAgZmlsZTovLzAwMDEtYm9vc3QtYXNpby1kZXRhaWwtc29ja2V0X3R5cGVzLmhwcC1maXgtcG9sbC5oLWluY2x1ZC5wYXRjaCBcCisgICAgZmlsZTovLzAwMDItYm9vc3QtdGVzdC1leGVjdXRpb25fbW9uaXRvci5ocHAtZml4LW1pcHMtc29mdC1mbG9hdC5wYXRjaCBcCisgICAgZmlsZTovLzAwMDMtc21hcnRfcHRyLW1pcHMtYXNzZW1ibHktZG9lc24tdC1jb21waWxlLWluLW1pcHMxNmUtbS5wYXRjaCBcCisgICAgZmlsZTovLzAwMDQtVXNlLWF0b21pYy1ieS1kZWZhdWx0LXdoZW4tQk9PU1RfTk9fQ1hYMTFfSERSX0FUT01JQy5wYXRjaCBcCisgICAgZmlsZTovL2Jvb3N0LW1hdGgtZGlzYWJsZS1wY2gtZm9yLWdjYy5wYXRjaCBcCisiCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvY2EtY2VydGlmaWNhdGVzL2NhLWNlcnRpZmljYXRlcy8wMDAxLXVwZGF0ZS1jYS1jZXJ0aWZpY2F0ZXMtZG9uLXQtdXNlLURlYmlhbmlzbXMtaW4tcnVuLXAucGF0Y2ggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvY2EtY2VydGlmaWNhdGVzL2NhLWNlcnRpZmljYXRlcy8wMDAxLXVwZGF0ZS1jYS1jZXJ0aWZpY2F0ZXMtZG9uLXQtdXNlLURlYmlhbmlzbXMtaW4tcnVuLXAucGF0Y2gKaW5kZXggNGI0YjI4Ny4uNGE4YWU1ZiAxMDA2NDQKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2NhLWNlcnRpZmljYXRlcy9jYS1jZXJ0aWZpY2F0ZXMvMDAwMS11cGRhdGUtY2EtY2VydGlmaWNhdGVzLWRvbi10LXVzZS1EZWJpYW5pc21zLWluLXJ1bi1wLnBhdGNoCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9jYS1jZXJ0aWZpY2F0ZXMvY2EtY2VydGlmaWNhdGVzLzAwMDEtdXBkYXRlLWNhLWNlcnRpZmljYXRlcy1kb24tdC11c2UtRGViaWFuaXNtcy1pbi1ydW4tcC5wYXRjaApAQCAtNiw5ICs2LDEzIEBACiAKIHwgUnVubmluZyBob29rcyBpbiBbLi4uXS9yb290ZnMvZXRjL2NhLWNlcnRpZmljYXRlcy91cGRhdGUuZC4uLgogfCBbLi4uXS91c3Ivc2Jpbi91cGRhdGUtY2EtY2VydGlmaWNhdGVzOiBsaW5lIDE5NDogTm90OiBjb21tYW5kIG5vdCBmb3VuZAorfCBbLi4uXS91c3Ivc2Jpbi91cGRhdGUtY2EtY2VydGlmaWNhdGVzOiBsaW5lIDIzMDogTm90IGEgZGlyZWN0b3J5OiAtLTogY29tbWFuZCBub3QgZm91bmQKK3wgRTogTm90IGEgZGlyZWN0b3J5OiAtLSBleGl0ZWQgd2l0aCBjb2RlIDEyNy4KKwogCiBVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUKIFNpZ25lZC1vZmYtYnk6IFJvc3MgQnVydG9uIDxyb3NzLmJ1cnRvbkBpbnRlbC5jb20+CitTaWduZWQtb2ZmLWJ5OiBNYWNpZWogQm9yemVja2kgPG1hY2llai5ib3J6ZWNraUBybmRpdHkuY29tPgogLS0tCiAgc2Jpbi91cGRhdGUtY2EtY2VydGlmaWNhdGVzIHwgNCArLS0tCiAgMSBmaWxlIGNoYW5nZWQsIDEgaW5zZXJ0aW9uKCspLCAzIGRlbGV0aW9ucygtKQpAQCAtMjQsNyArMjgsNyBAQAogLSAgVkVSQk9TRV9BUkc9CiAtICBbICIkdmVyYm9zZSIgPSAwIF0gfHwgVkVSQk9TRV9BUkc9Ii0tdmVyYm9zZSIKIC0gIGV2YWwgcnVuLXBhcnRzICIkVkVSQk9TRV9BUkciIC0tdGVzdCAtLSAiJEhPT0tTRElSIiB8IHdoaWxlIHJlYWQgaG9vawotKyAgZXZhbCBydW4tcGFydHMgLS10ZXN0IC0tICIkSE9PS1NESVIiIHwgd2hpbGUgcmVhZCBob29rCisrICBldmFsIHJ1bi1wYXJ0cyAtLXRlc3QgIiRIT09LU0RJUiIgfCB3aGlsZSByZWFkIGhvb2sKICAgIGRvCiAgICAgICggY2F0ICIkQURERUQiCiAgICAgICAgY2F0ICIkUkVNT1ZFRCIgKSB8ICIkaG9vayIgfHwgZWNobyAiRTogJGhvb2sgZXhpdGVkIHdpdGggY29kZSAkPy4iCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvY2EtY2VydGlmaWNhdGVzL2NhLWNlcnRpZmljYXRlcy8wMDAxLXVwZGF0ZS1jYS1jZXJ0aWZpY2F0ZXMtcmVtb3ZlLWMtcmVoYXNoLnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2NhLWNlcnRpZmljYXRlcy9jYS1jZXJ0aWZpY2F0ZXMvMDAwMS11cGRhdGUtY2EtY2VydGlmaWNhdGVzLXJlbW92ZS1jLXJlaGFzaC5wYXRjaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYmYwMjcyMy4uMDAwMDAwMAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvY2EtY2VydGlmaWNhdGVzL2NhLWNlcnRpZmljYXRlcy8wMDAxLXVwZGF0ZS1jYS1jZXJ0aWZpY2F0ZXMtcmVtb3ZlLWMtcmVoYXNoLnBhdGNoCisrKyAvZGV2L251bGwKQEAgLTEsNDYgKzAsMCBAQAotVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCi0KLUZyb20gMTExZTkwNWZlOTMxZGExYTM4MDBhY2NmYzY3NWNjMDFjOGVlMDgwYyBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKLUZyb206IFVsZiBTYW11ZWxzc29uIDx1bGZAZW1hZ2lpLmNvbT4KLURhdGU6IFR1ZSwgMjggRmViIDIwMTIgMDY6NDI6NTggKzAxMDAKLVN1YmplY3Q6IFtQQVRDSF0gdXBkYXRlLWNhLWNlcnRpZmljYXRlczogcmVtb3ZlIGMgcmVoYXNoCi0KLVVwZGF0ZWQgZWFybGllciBwYXRjaCB0byBhcHBseSBjbGVhbiBvbiAyMDEyLTAyLTEyCi1TaWduZWQtb2ZmLWJ5OiBVbGYgU2FtdWVsc3NvbiA8dWxmQGVtYWdpaS5jb20+Ci0tLS0KLSBzYmluL3VwZGF0ZS1jYS1jZXJ0aWZpY2F0ZXMgfCAgIDIwICsrKysrKysrKystLS0tLS0tLS0tCi0gMSBmaWxlcyBjaGFuZ2VkLCAxMCBpbnNlcnRpb25zKCspLCAxMCBkZWxldGlvbnMoLSkKLQotZGlmZiAtLWdpdCBhL3NiaW4vdXBkYXRlLWNhLWNlcnRpZmljYXRlcyBiL3NiaW4vdXBkYXRlLWNhLWNlcnRpZmljYXRlcwotaW5kZXggNTM3NTk1MC4uYzU2N2UzZCAxMDA3NTUKLS0tLSBhL3NiaW4vdXBkYXRlLWNhLWNlcnRpZmljYXRlcwotKysrIGIvc2Jpbi91cGRhdGUtY2EtY2VydGlmaWNhdGVzCi1AQCAtMTMyLDE2ICsxMzIsMTYgQEAgcm0gLWYgIiRDRVJUQlVORExFIgotIEFEREVEX0NOVD0kKHdjIC1sIDwgIiRBRERFRCIpCi0gUkVNT1ZFRF9DTlQ9JCh3YyAtbCA8ICIkUkVNT1ZFRCIpCi0KLS1pZiBbICIkQURERURfQ05UIiAtZ3QgMCBdIHx8IFsgIiRSRU1PVkVEX0NOVCIgLWd0IDAgXQotLXRoZW4KLS0gICMgb25seSBydW4gaWYgc2V0IG9mIGZpbGVzIGhhcyBjaGFuZ2VkCi0tICBpZiBbICIkdmVyYm9zZSIgPSAwIF0KLS0gIHRoZW4KLS0gICAgY19yZWhhc2ggLiA+IC9kZXYvbnVsbAotLSAgZWxzZQotLSAgICBjX3JlaGFzaCAuCi0tICBmaQotLWZpCi0rI2lmIFsgIiRBRERFRF9DTlQiIC1ndCAwIF0gfHwgWyAiJFJFTU9WRURfQ05UIiAtZ3QgMCBdCi0rI3RoZW4KLSsjICAjIG9ubHkgcnVuIGlmIHNldCBvZiBmaWxlcyBoYXMgY2hhbmdlZAotKyMgIGlmIFsgIiR2ZXJib3NlIiA9IDAgXQotKyMgIHRoZW4KLSsjICAgIGNfcmVoYXNoIC4gPiAvZGV2L251bGwKLSsjICBlbHNlCi0rIyAgICBjX3JlaGFzaCAuCi0rIyAgZmkKLSsjZmkKLQotIGNobW9kIDA2NDQgIiRURU1QQlVORExFIgotIG12IC1mICIkVEVNUEJVTkRMRSIgIiRDRVJUQlVORExFIgotLS0KLTEuNy40LjEKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9jYS1jZXJ0aWZpY2F0ZXMvY2EtY2VydGlmaWNhdGVzXzIwMTYwMTA0LmJiIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2NhLWNlcnRpZmljYXRlcy9jYS1jZXJ0aWZpY2F0ZXNfMjAxNjAxMDQuYmIKaW5kZXggZTBmMTkzOS4uMWJlYTA2NyAxMDA2NDQKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2NhLWNlcnRpZmljYXRlcy9jYS1jZXJ0aWZpY2F0ZXNfMjAxNjAxMDQuYmIKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2NhLWNlcnRpZmljYXRlcy9jYS1jZXJ0aWZpY2F0ZXNfMjAxNjAxMDQuYmIKQEAgLTksMTIgKzksMTIgQEAKIAogIyBUaGlzIGlzIG5lZWRlZCB0byBlbnN1cmUgd2UgY2FuIHJ1biB0aGUgcG9zdGluc3QgYXQgaW1hZ2UgY3JlYXRpb24gdGltZQogREVQRU5EUyA9ICJjYS1jZXJ0aWZpY2F0ZXMtbmF0aXZlIgotREVQRU5EU19jbGFzcy1uYXRpdmUgPSAiIgorREVQRU5EU19jbGFzcy1uYXRpdmUgPSAib3BlbnNzbC1uYXRpdmUiCitERVBFTkRTX2NsYXNzLW5hdGl2ZXNkayA9ICJjYS1jZXJ0aWZpY2F0ZXMtbmF0aXZlIG9wZW5zc2wtbmF0aXZlIgogCiBTUkNSRVYgPSAiZjU0NzE1NzAyYzVjMDU4MWM5NDYxZjc4ZmQ4NGUyYzhkMmVjMjQzYyIKIAogU1JDX1VSSSA9ICJnaXQ6Ly9hbm9uc2NtLmRlYmlhbi5vcmcvY29sbGFiLW1haW50L2NhLWNlcnRpZmljYXRlcy5naXQgXAotICAgICAgICAgICBmaWxlOi8vMDAwMS11cGRhdGUtY2EtY2VydGlmaWNhdGVzLXJlbW92ZS1jLXJlaGFzaC5wYXRjaCBcCiAgICAgICAgICAgIGZpbGU6Ly8wMDAyLXVwZGF0ZS1jYS1jZXJ0aWZpY2F0ZXMtdXNlLVNZU1JPT1QucGF0Y2ggXAogICAgICAgICAgICBmaWxlOi8vMDAwMS11cGRhdGUtY2EtY2VydGlmaWNhdGVzLWRvbi10LXVzZS1EZWJpYW5pc21zLWluLXJ1bi1wLnBhdGNoIFwKICAgICAgICAgICAgZmlsZTovL3VwZGF0ZS1jYS1jZXJ0aWZpY2F0ZXMtc3VwcG9ydC1Ub3lib3gucGF0Y2ggXApAQCAtNzcsNCArNzcsNiBAQAogICAgIFNZU1JPT1Q9IiR7RH0ke2Jhc2VfcHJlZml4fSIgJHtEfSR7c2JpbmRpcn0vdXBkYXRlLWNhLWNlcnRpZmljYXRlcwogfQogCitSREVQRU5EU18ke1BOfSArPSAib3BlbnNzbCIKKwogQkJDTEFTU0VYVEVORCArPSAibmF0aXZlIG5hdGl2ZXNkayIKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9jb25zb2xla2l0L2NvbnNvbGVraXRfMC40LjYuYmIgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvY29uc29sZWtpdC9jb25zb2xla2l0XzAuNC42LmJiCmluZGV4IDI5NzRlMzYuLmNlYWMwZmUgMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9jb25zb2xla2l0L2NvbnNvbGVraXRfMC40LjYuYmIKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2NvbnNvbGVraXQvY29uc29sZWtpdF8wLjQuNi5iYgpAQCAtMzAsNyArMzAsNyBAQAogUEFDS0FHRUNPTkZJR1twb2xpY3lraXRdID0gIi0td2l0aC1wb2xraXQsLS13aXRob3V0LXBvbGtpdCxwb2xraXQiCiBQQUNLQUdFQ09ORklHW3N5c3RlbWRdID0gIi0td2l0aC1zeXN0ZW1kc3lzdGVtdW5pdGRpcj0ke3N5c3RlbWRfdW5pdGRpcn0vc3lzdGVtLywtLXdpdGgtc3lzdGVtZHN5c3RlbXVuaXRkaXI9IgogCi1GSUxFU18ke1BOfSArPSAiJHtsb2NhbHN0YXRlZGlyfS9sb2cvQ29uc29sZUtpdCAke2V4ZWNfcHJlZml4fS9saWIvQ29uc29sZUtpdCBcCitGSUxFU18ke1BOfSArPSAiJHtleGVjX3ByZWZpeH0vbGliL0NvbnNvbGVLaXQgXAogICAgICAgICAgICAgICAgICR7bGliZGlyfS9Db25zb2xlS2l0ICAke3N5c3RlbWRfdW5pdGRpcn0gJHtiYXNlX2xpYmRpcn0gXAogICAgICAgICAgICAgICAgICR7ZGF0YWRpcn0vZGJ1cy0xICR7ZGF0YWRpcn0vUG9saWN5S2l0ICR7ZGF0YWRpcn0vcG9sa2l0KiIKIApAQCAtNDUsNiArNDUsNiBAQAogCQkJPiAke0R9JHtzeXNjb25mZGlyfS90bXBmaWxlcy5kL2NvbnNvbGVraXQuY29uZgogCWZpCiAKLQkjIFJlbW92ZSAvdmFyL3J1biBmcm9tIHBhY2thZ2UgYXMgY29uc29sZS1raXQtZGFlbW9uIHdpbGwgcG9wdWxhdGUgaXQgb24gc3RhcnR1cAotCXJtIC1mciAiJHtEfSR7bG9jYWxzdGF0ZWRpcn0vcnVuIgorCSMgUmVtb3ZlIC92YXIvIGRpcmVjdG9yaWVzIGFzIHRoZSBkYWVtb24gY3JlYXRlcyB0aGVtIGFzIHJlcXVpcmVkCisJcm0gLXJmICR7RH0ke2xvY2Fsc3RhdGVkaXJ9CiB9CmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvY3VybC9jdXJsLzAwMDEtcmVwbGFjZS1rcmI1LWNvbmZpZy13aXRoLXBrZy1jb25maWcucGF0Y2ggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvY3VybC9jdXJsLzAwMDEtcmVwbGFjZS1rcmI1LWNvbmZpZy13aXRoLXBrZy1jb25maWcucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzRlNWQ5OQotLS0gL2Rldi9udWxsCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9jdXJsL2N1cmwvMDAwMS1yZXBsYWNlLWtyYjUtY29uZmlnLXdpdGgtcGtnLWNvbmZpZy5wYXRjaApAQCAtMCwwICsxLDQzIEBACitbUEFUQ0hdIHJlcGxhY2Uga3JiNS1jb25maWcgd2l0aCBwa2ctY29uZmlnCisKK1Vwc3RyZWFtLVN0YXR1czogIFBlbmRpbmcKKworU2lnbmVkLW9mZi1ieTogUm95IExpIDxyb25ncWluZy5saUB3aW5kcml2ZXIuY29tPgorLS0tCisgY29uZmlndXJlLmFjIHwgNiArKystLS0KKyAxIGZpbGUgY2hhbmdlZCwgMyBpbnNlcnRpb25zKCspLCAzIGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvY29uZmlndXJlLmFjIGIvY29uZmlndXJlLmFjCitpbmRleCBlOTliMzAzLi5kYzkzZjM5IDEwMDY0NAorLS0tIGEvY29uZmlndXJlLmFjCisrKysgYi9jb25maWd1cmUuYWMKK0BAIC0xMTk2LDcgKzExOTYsNyBAQCBBQ19BUkdfV0lUSChnc3NhcGksCisgICBmaQorIF0pCisgCistOiAke0tSQjVDT05GSUc6PSIkR1NTQVBJX1JPT1QvYmluL2tyYjUtY29uZmlnIn0KKytLUkI1Q09ORklHPWB3aGljaCBwa2ctY29uZmlnYAorIAorIHNhdmVfQ1BQRkxBR1M9IiRDUFBGTEFHUyIKKyBBQ19NU0dfQ0hFQ0tJTkcoW2lmIEdTUy1BUEkgc3VwcG9ydCBpcyByZXF1ZXN0ZWRdKQorQEAgLTEyMDcsNyArMTIwNyw3IEBAIGlmIHRlc3QgeCIkd2FudF9nc3MiID0geHllczsgdGhlbgorICAgICAgaWYgdGVzdCAtbiAiJGhvc3RfYWxpYXMiIC1hIC1mICIkR1NTQVBJX1JPT1QvYmluLyRob3N0X2FsaWFzLWtyYjUtY29uZmlnIjsgdGhlbgorICAgICAgICAgR1NTQVBJX0lOQ1M9YCRHU1NBUElfUk9PVC9iaW4vJGhvc3RfYWxpYXMta3JiNS1jb25maWcgLS1jZmxhZ3MgZ3NzYXBpYAorICAgICAgZWxpZiB0ZXN0IC1mICIkS1JCNUNPTkZJRyI7IHRoZW4KKy0gICAgICAgIEdTU0FQSV9JTkNTPWAkS1JCNUNPTkZJRyAtLWNmbGFncyBnc3NhcGlgCisrICAgICAgICBHU1NBUElfSU5DUz1gJEtSQjVDT05GSUcgLS1jZmxhZ3MgbWl0LWtyYjUtZ3NzYXBpYAorICAgICAgZWxpZiB0ZXN0ICIkR1NTQVBJX1JPT1QiICE9ICJ5ZXMiOyB0aGVuCisgICAgICAgICBHU1NBUElfSU5DUz0iLUkkR1NTQVBJX1JPT1QvaW5jbHVkZSIKKyAgICAgIGZpCitAQCAtMTMwMCw3ICsxMzAwLDcgQEAgaWYgdGVzdCB4IiR3YW50X2dzcyIgPSB4eWVzOyB0aGVuCisgICAgICAgICBlbGlmIHRlc3QgLWYgIiRLUkI1Q09ORklHIjsgdGhlbgorICAgICAgICAgICAgZG5sIGtyYjUtY29uZmlnIGRvZXNuJ3QgaGF2ZSAtLWxpYnMtb25seS1MIG9yIHNpbWlsYXIsIHB1dCBldmVyeXRoaW5nCisgICAgICAgICAgICBkbmwgaW50byBMSUJTCistICAgICAgICAgICBnc3NfbGlicz1gJEtSQjVDT05GSUcgLS1saWJzIGdzc2FwaWAKKysgICAgICAgICAgIGdzc19saWJzPWAkS1JCNUNPTkZJRyAtLWxpYnMgbWl0LWtyYjUtZ3NzYXBpYAorICAgICAgICAgICAgTElCUz0iJGdzc19saWJzICRMSUJTIgorICAgICAgICAgZWxzZQorICAgICAgICAgICAgY2FzZSAkaG9zdCBpbgorLS0gCisxLjkuMQorCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvY3VybC9jdXJsXzcuNDcuMS5iYiBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9jdXJsL2N1cmxfNy40Ny4xLmJiCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjMjE3M2Q4Li4wMDAwMDAwCi0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9jdXJsL2N1cmxfNy40Ny4xLmJiCisrKyAvZGV2L251bGwKQEAgLTEsNjggKzAsMCBAQAotU1VNTUFSWSA9ICJDb21tYW5kIGxpbmUgdG9vbCBhbmQgbGlicmFyeSBmb3IgY2xpZW50LXNpZGUgVVJMIHRyYW5zZmVycyIKLUhPTUVQQUdFID0gImh0dHA6Ly9jdXJsLmhheHguc2UvIgotQlVHVFJBQ0tFUiA9ICJodHRwOi8vY3VybC5oYXh4LnNlL21haWwvbGlzdC5jZ2k/bGlzdD1jdXJsLXRyYWNrZXIiCi1TRUNUSU9OID0gImNvbnNvbGUvbmV0d29yayIKLUxJQ0VOU0UgPSAiTUlUIgotTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORztiZWdpbmxpbmU9ODttZDU9M2EzNDk0MmY0YWUzZmJmMWEzMDMxNjA3MTRlNjY0YWMiCi0KLVNSQ19VUkkgPSAiaHR0cDovL2N1cmwuaGF4eC5zZS9kb3dubG9hZC9jdXJsLSR7UFZ9LnRhci5iejIiCi0KLSMgY3VybCBsaWtlcyB0byBzZXQgLWcwIGluIENGTEFHUywgc28gd2Ugc3RvcCBpdAotIyBmcm9tIG11Y2tpbmcgYXJvdW5kIHdpdGggZGVidWcgb3B0aW9ucwotIwotU1JDX1VSSSArPSAiIGZpbGU6Ly9jb25maWd1cmVfYWMucGF0Y2giCi0KLVNSQ19VUklbbWQ1c3VtXSA9ICI5ZWEzMTIzNDQ5NDM5YmJkOTYwY2QyNWNmOTg3OTZmYiIKLVNSQ19VUklbc2hhMjU2c3VtXSA9ICJkZGM2NDNhYjkzODJlMjRiYmU0NzQ3ZDQzZGYxODlhMGE2Y2UzOGZjYjMzZGYwNDFiOWNiMGIzY2Q0N2FlOThmIgotCi1pbmhlcml0IGF1dG90b29scyBwa2djb25maWcgYmluY29uZmlnIG11bHRpbGliX2hlYWRlcgotCi1QQUNLQUdFQ09ORklHID8/PSAiJHtAYmIudXRpbHMuY29udGFpbnMoIkRJU1RST19GRUFUVVJFUyIsICJpcHY2IiwgImlwdjYiLCAiIiwgZCl9IGdudXRscyBwcm94eSB6bGliIgotUEFDS0FHRUNPTkZJR19jbGFzcy1uYXRpdmUgPSAiaXB2NiBwcm94eSBzc2wgemxpYiIKLVBBQ0tBR0VDT05GSUdfY2xhc3MtbmF0aXZlc2RrID0gImlwdjYgcHJveHkgc3NsIHpsaWIiCi0KLVBBQ0tBR0VDT05GSUdbZGljdF0gPSAiLS1lbmFibGUtZGljdCwtLWRpc2FibGUtZGljdCwiCi1QQUNLQUdFQ09ORklHW2dudXRsc10gPSAiLS13aXRoLWdudXRscywtLXdpdGhvdXQtZ251dGxzLGdudXRscyIKLVBBQ0tBR0VDT05GSUdbZ29waGVyXSA9ICItLWVuYWJsZS1nb3BoZXIsLS1kaXNhYmxlLWdvcGhlciwiCi1QQUNLQUdFQ09ORklHW2ltYXBdID0gIi0tZW5hYmxlLWltYXAsLS1kaXNhYmxlLWltYXAsIgotUEFDS0FHRUNPTkZJR1tpcHY2XSA9ICItLWVuYWJsZS1pcHY2LC0tZGlzYWJsZS1pcHY2LCIKLVBBQ0tBR0VDT05GSUdbbGRhcF0gPSAiLS1lbmFibGUtbGRhcCwtLWRpc2FibGUtbGRhcCwiCi1QQUNLQUdFQ09ORklHW2xkYXBzXSA9ICItLWVuYWJsZS1sZGFwcywtLWRpc2FibGUtbGRhcHMsIgotUEFDS0FHRUNPTkZJR1tsaWJpZG5dID0gIi0td2l0aC1saWJpZG4sLS13aXRob3V0LWxpYmlkbixsaWJpZG4iCi1QQUNLQUdFQ09ORklHW2xpYnNzaDJdID0gIi0td2l0aC1saWJzc2gyLC0td2l0aG91dC1saWJzc2gyLGxpYnNzaDIiCi1QQUNLQUdFQ09ORklHW3BvcDNdID0gIi0tZW5hYmxlLXBvcDMsLS1kaXNhYmxlLXBvcDMsIgotUEFDS0FHRUNPTkZJR1twcm94eV0gPSAiLS1lbmFibGUtcHJveHksLS1kaXNhYmxlLXByb3h5LCIKLVBBQ0tBR0VDT05GSUdbcnRtcGR1bXBdID0gIi0td2l0aC1saWJydG1wLC0td2l0aG91dC1saWJydG1wLHJ0bXBkdW1wIgotUEFDS0FHRUNPTkZJR1tydHNwXSA9ICItLWVuYWJsZS1ydHNwLC0tZGlzYWJsZS1ydHNwLCIKLVBBQ0tBR0VDT05GSUdbc21iXSA9ICItLWVuYWJsZS1zbWIsLS1kaXNhYmxlLXNtYiwiCi1QQUNLQUdFQ09ORklHW3NtdHBdID0gIi0tZW5hYmxlLXNtdHAsLS1kaXNhYmxlLXNtdHAsIgotUEFDS0FHRUNPTkZJR1tzc2xdID0gIi0td2l0aC1zc2wgLS13aXRoLXJhbmRvbT0vZGV2L3VyYW5kb20sLS13aXRob3V0LXNzbCxvcGVuc3NsIgotUEFDS0FHRUNPTkZJR1t0ZWxuZXRdID0gIi0tZW5hYmxlLXRlbG5ldCwtLWRpc2FibGUtdGVsbmV0LCIKLVBBQ0tBR0VDT05GSUdbdGZ0cF0gPSAiLS1lbmFibGUtdGZ0cCwtLWRpc2FibGUtdGZ0cCwiCi1QQUNLQUdFQ09ORklHW3psaWJdID0gIi0td2l0aC16bGliPSR7U1RBR0lOR19MSUJESVJ9Ly4uLywtLXdpdGhvdXQtemxpYix6bGliIgotCi1FWFRSQV9PRUNPTkYgPSAiIFwKLSAgICAtLWVuYWJsZS1jcnlwdG8tYXV0aCBcCi0gICAgLS13aXRoLWNhLWJ1bmRsZT0ke3N5c2NvbmZkaXJ9L3NzbC9jZXJ0cy9jYS1jZXJ0aWZpY2F0ZXMuY3J0IFwKLSAgICAtLXdpdGhvdXQtbGlibWV0YWxpbmsgXAotICAgIC0td2l0aG91dC1saWJwc2wgXAotICAgIC0td2l0aG91dC1uZ2h0dHAyIFwKLSIKLQotZG9faW5zdGFsbF9hcHBlbmQoKSB7Ci0Jb2VfbXVsdGlsaWJfaGVhZGVyIGN1cmwvY3VybGJ1aWxkLmgKLX0KLQotZG9faW5zdGFsbF9hcHBlbmRfY2xhc3MtdGFyZ2V0KCkgewotCSMgY2xlYW51cCBidWlsZHBhdGhzIGZyb20gY3VybC1jb25maWcKLQlzZWQgLWkgLWUgJ3MsJHtTVEFHSU5HX0RJUl9IT1NUfSwsZycgJHtEfSR7YmluZGlyfS9jdXJsLWNvbmZpZwotfQotCi1QQUNLQUdFUyA9KyAibGliJHtCUE59IgotCi1GSUxFU19saWIke0JQTn0gPSAiJHtsaWJkaXJ9L2xpYiouc28uKiIKLVJSRUNPTU1FTkRTX2xpYiR7QlBOfSArPSAiY2EtY2VydGlmaWNhdGVzIgotCi1GSUxFU18ke1BOfSArPSAiJHtkYXRhZGlyfS96c2giCi0KLUJCQ0xBU1NFWFRFTkQgPSAibmF0aXZlIG5hdGl2ZXNkayIKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9jdXJsL2N1cmxfNy41MC4xLmJiIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2N1cmwvY3VybF83LjUwLjEuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTIxNDE5YQotLS0gL2Rldi9udWxsCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9jdXJsL2N1cmxfNy41MC4xLmJiCkBAIC0wLDAgKzEsNzEgQEAKK1NVTU1BUlkgPSAiQ29tbWFuZCBsaW5lIHRvb2wgYW5kIGxpYnJhcnkgZm9yIGNsaWVudC1zaWRlIFVSTCB0cmFuc2ZlcnMiCitIT01FUEFHRSA9ICJodHRwOi8vY3VybC5oYXh4LnNlLyIKK0JVR1RSQUNLRVIgPSAiaHR0cDovL2N1cmwuaGF4eC5zZS9tYWlsL2xpc3QuY2dpP2xpc3Q9Y3VybC10cmFja2VyIgorU0VDVElPTiA9ICJjb25zb2xlL25ldHdvcmsiCitMSUNFTlNFID0gIk1JVCIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7YmVnaW5saW5lPTg7bWQ1PTNhMzQ5NDJmNGFlM2ZiZjFhMzAzMTYwNzE0ZTY2NGFjIgorCitTUkNfVVJJID0gImh0dHA6Ly9jdXJsLmhheHguc2UvZG93bmxvYWQvY3VybC0ke1BWfS50YXIuYnoyIFwKKyAgICAgICAgICAgZmlsZTovLzAwMDEtcmVwbGFjZS1rcmI1LWNvbmZpZy13aXRoLXBrZy1jb25maWcucGF0Y2ggXAorIgorCisjIGN1cmwgbGlrZXMgdG8gc2V0IC1nMCBpbiBDRkxBR1MsIHNvIHdlIHN0b3AgaXQKKyMgZnJvbSBtdWNraW5nIGFyb3VuZCB3aXRoIGRlYnVnIG9wdGlvbnMKKyMKK1NSQ19VUkkgKz0gIiBmaWxlOi8vY29uZmlndXJlX2FjLnBhdGNoIgorCitTUkNfVVJJW21kNXN1bV0gPSAiMDE1ZjZhMDIxN2NhNmYyYzU0NDJjYTQwNjQ3NjkyMGIiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiM2MxMmM1ZjU0Y2NhYTFkNDBhYmM2NWQ2NzIxMDdkY2M3NWQzZTFmY2IzOGMyNjc0ODQzMzQyODAwOTZlNTE1NiIKKworaW5oZXJpdCBhdXRvdG9vbHMgcGtnY29uZmlnIGJpbmNvbmZpZyBtdWx0aWxpYl9oZWFkZXIKKworUEFDS0FHRUNPTkZJRyA/Pz0gIiR7QGJiLnV0aWxzLmNvbnRhaW5zKCJESVNUUk9fRkVBVFVSRVMiLCAiaXB2NiIsICJpcHY2IiwgIiIsIGQpfSBnbnV0bHMgcHJveHkgemxpYiIKK1BBQ0tBR0VDT05GSUdfY2xhc3MtbmF0aXZlID0gImlwdjYgcHJveHkgc3NsIHpsaWIiCitQQUNLQUdFQ09ORklHX2NsYXNzLW5hdGl2ZXNkayA9ICJpcHY2IHByb3h5IHNzbCB6bGliIgorCitQQUNLQUdFQ09ORklHW2RpY3RdID0gIi0tZW5hYmxlLWRpY3QsLS1kaXNhYmxlLWRpY3QsIgorUEFDS0FHRUNPTkZJR1tnbnV0bHNdID0gIi0td2l0aC1nbnV0bHMsLS13aXRob3V0LWdudXRscyxnbnV0bHMiCitQQUNLQUdFQ09ORklHW2dvcGhlcl0gPSAiLS1lbmFibGUtZ29waGVyLC0tZGlzYWJsZS1nb3BoZXIsIgorUEFDS0FHRUNPTkZJR1tpbWFwXSA9ICItLWVuYWJsZS1pbWFwLC0tZGlzYWJsZS1pbWFwLCIKK1BBQ0tBR0VDT05GSUdbaXB2Nl0gPSAiLS1lbmFibGUtaXB2NiwtLWRpc2FibGUtaXB2NiwiCitQQUNLQUdFQ09ORklHW2xkYXBdID0gIi0tZW5hYmxlLWxkYXAsLS1kaXNhYmxlLWxkYXAsIgorUEFDS0FHRUNPTkZJR1tsZGFwc10gPSAiLS1lbmFibGUtbGRhcHMsLS1kaXNhYmxlLWxkYXBzLCIKK1BBQ0tBR0VDT05GSUdbbGliaWRuXSA9ICItLXdpdGgtbGliaWRuLC0td2l0aG91dC1saWJpZG4sbGliaWRuIgorUEFDS0FHRUNPTkZJR1tsaWJzc2gyXSA9ICItLXdpdGgtbGlic3NoMiwtLXdpdGhvdXQtbGlic3NoMixsaWJzc2gyIgorUEFDS0FHRUNPTkZJR1twb3AzXSA9ICItLWVuYWJsZS1wb3AzLC0tZGlzYWJsZS1wb3AzLCIKK1BBQ0tBR0VDT05GSUdbcHJveHldID0gIi0tZW5hYmxlLXByb3h5LC0tZGlzYWJsZS1wcm94eSwiCitQQUNLQUdFQ09ORklHW3J0bXBkdW1wXSA9ICItLXdpdGgtbGlicnRtcCwtLXdpdGhvdXQtbGlicnRtcCxydG1wZHVtcCIKK1BBQ0tBR0VDT05GSUdbcnRzcF0gPSAiLS1lbmFibGUtcnRzcCwtLWRpc2FibGUtcnRzcCwiCitQQUNLQUdFQ09ORklHW3NtYl0gPSAiLS1lbmFibGUtc21iLC0tZGlzYWJsZS1zbWIsIgorUEFDS0FHRUNPTkZJR1tzbXRwXSA9ICItLWVuYWJsZS1zbXRwLC0tZGlzYWJsZS1zbXRwLCIKK1BBQ0tBR0VDT05GSUdbc3NsXSA9ICItLXdpdGgtc3NsIC0td2l0aC1yYW5kb209L2Rldi91cmFuZG9tLC0td2l0aG91dC1zc2wsb3BlbnNzbCIKK1BBQ0tBR0VDT05GSUdbdGVsbmV0XSA9ICItLWVuYWJsZS10ZWxuZXQsLS1kaXNhYmxlLXRlbG5ldCwiCitQQUNLQUdFQ09ORklHW3RmdHBdID0gIi0tZW5hYmxlLXRmdHAsLS1kaXNhYmxlLXRmdHAsIgorUEFDS0FHRUNPTkZJR1t6bGliXSA9ICItLXdpdGgtemxpYj0ke1NUQUdJTkdfTElCRElSfS8uLi8sLS13aXRob3V0LXpsaWIsemxpYiIKK1BBQ0tBR0VDT05GSUdba3JiNV0gPSAiLS13aXRoLWdzc2FwaSwtLXdpdGhvdXQtZ3NzYXBpLGtyYjUiCisKK0VYVFJBX09FQ09ORiA9ICIgXAorICAgIC0tZW5hYmxlLWNyeXB0by1hdXRoIFwKKyAgICAtLXdpdGgtY2EtYnVuZGxlPSR7c3lzY29uZmRpcn0vc3NsL2NlcnRzL2NhLWNlcnRpZmljYXRlcy5jcnQgXAorICAgIC0td2l0aG91dC1saWJtZXRhbGluayBcCisgICAgLS13aXRob3V0LWxpYnBzbCBcCisgICAgLS13aXRob3V0LW5naHR0cDIgXAorIgorCitkb19pbnN0YWxsX2FwcGVuZCgpIHsKKwlvZV9tdWx0aWxpYl9oZWFkZXIgY3VybC9jdXJsYnVpbGQuaAorfQorCitkb19pbnN0YWxsX2FwcGVuZF9jbGFzcy10YXJnZXQoKSB7CisJIyBjbGVhbnVwIGJ1aWxkcGF0aHMgZnJvbSBjdXJsLWNvbmZpZworCXNlZCAtaSAtZSAncywke1NUQUdJTkdfRElSX0hPU1R9LCxnJyAke0R9JHtiaW5kaXJ9L2N1cmwtY29uZmlnCit9CisKK1BBQ0tBR0VTID0rICJsaWIke0JQTn0iCisKK0ZJTEVTX2xpYiR7QlBOfSA9ICIke2xpYmRpcn0vbGliKi5zby4qIgorUlJFQ09NTUVORFNfbGliJHtCUE59ICs9ICJjYS1jZXJ0aWZpY2F0ZXMiCisKK0ZJTEVTXyR7UE59ICs9ICIke2RhdGFkaXJ9L3pzaCIKKworQkJDTEFTU0VYVEVORCA9ICJuYXRpdmUgbmF0aXZlc2RrIgpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2RiL2RiL01ha2VmaWxlLWxldC1saWJkYi02LjAubGEtZGVwZW5kLW9zX21hcC5sLnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2RiL2RiL01ha2VmaWxlLWxldC1saWJkYi02LjAubGEtZGVwZW5kLW9zX21hcC5sLnBhdGNoCmluZGV4IGQ0YzZiYjguLjY4YTIxMzEgMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9kYi9kYi9NYWtlZmlsZS1sZXQtbGliZGItNi4wLmxhLWRlcGVuZC1vc19tYXAubC5wYXRjaAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvZGIvZGIvTWFrZWZpbGUtbGV0LWxpYmRiLTYuMC5sYS1kZXBlbmQtb3NfbWFwLmwucGF0Y2gKQEAgLTE0LDEwICsxNCwxMCBAQAogIGRpc3QvTWFrZWZpbGUuaW4gfCAgICAyICstCiAgMSBmaWxlIGNoYW5nZWQsIDEgaW5zZXJ0aW9uKCspLCAxIGRlbGV0aW9uKC0pCiAKLWRpZmYgLS1naXQgYS9kaXN0L01ha2VmaWxlLmluIGIvZGlzdC9NYWtlZmlsZS5pbgotaW5kZXggMGE0MjM3NS4uZDllMDViOSAxMDA2NDQKLS0tLSBhL2Rpc3QvTWFrZWZpbGUuaW4KLSsrKyBiL2Rpc3QvTWFrZWZpbGUuaW4KK0luZGV4OiBkYi02LjAuMzAvZGlzdC9NYWtlZmlsZS5pbgorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGRiLTYuMC4zMC5vcmlnL2Rpc3QvTWFrZWZpbGUuaW4KKysrKyBkYi02LjAuMzAvZGlzdC9NYWtlZmlsZS5pbgogQEAgLTg2Myw3ICs4NjMsNyBAQCAkKGxpYmRiX3ZlcnNpb24pOiAkKENfT0JKUykKICAJJChMTikgLXMgJChsaWJkYl92ZXJzaW9uKSAkKGxpYmRiKQogIApAQCAtMjcsNiArMjcsMyBAQAogIAkkKFNPTElOSykgJChTT0ZMQUdTKSAkKExERkxBR1MpIC1vICRAICQoQ19PQkpTKSBcCiAgCQkkKExJQkNTT19MSUJTKQogIAkkKFJNKSAkKGxpYmRiKQotLS0gCi0xLjcuOS41Ci0KZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9kYi9kYi9NYWtlZmlsZS1sZXQtbGlic29fdGFyZ2V0LWRlcGVuZC1vbi1idF9yZWMucGF0Y2ggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvZGIvZGIvTWFrZWZpbGUtbGV0LWxpYnNvX3RhcmdldC1kZXBlbmQtb24tYnRfcmVjLnBhdGNoCmluZGV4IDMyOWJmZjUuLjg2ODA0MDggMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9kYi9kYi9NYWtlZmlsZS1sZXQtbGlic29fdGFyZ2V0LWRlcGVuZC1vbi1idF9yZWMucGF0Y2gKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2RiL2RiL01ha2VmaWxlLWxldC1saWJzb190YXJnZXQtZGVwZW5kLW9uLWJ0X3JlYy5wYXRjaApAQCAtMTUsMTAgKzE1LDEwIEBACiAgTWFrZWZpbGUuaW4gfCAgICAyICstCiAgMSBmaWxlIGNoYW5nZWQsIDEgaW5zZXJ0aW9uKCspLCAxIGRlbGV0aW9uKC0pCiAKLWRpZmYgLS1naXQgYS9NYWtlZmlsZS5pbiBiL01ha2VmaWxlLmluCi1pbmRleCBlNDUxZjcwLi4wYTQyMzc1IDEwMDY0NAotLS0tIGEvTWFrZWZpbGUuaW4KLSsrKyBiL01ha2VmaWxlLmluCitJbmRleDogZGItNi4wLjMwL2Rpc3QvTWFrZWZpbGUuaW4KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBkYi02LjAuMzAub3JpZy9kaXN0L01ha2VmaWxlLmluCisrKysgZGItNi4wLjMwL2Rpc3QvTWFrZWZpbGUuaW4KIEBAIC04NjMsNyArODYzLDcgQEAgJChsaWJkYl92ZXJzaW9uKTogJChDX09CSlMpCiAgCSQoTE4pIC1zICQobGliZGJfdmVyc2lvbikgJChsaWJkYikKICAKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9kYi9kYi9hcm0tdGh1bWItbXV0ZXhfZGI1LnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2RiL2RiL2FybS10aHVtYi1tdXRleF9kYjUucGF0Y2gKaW5kZXggMzRlOGRiOC4uNmE4ZWFkYSAxMDA2NDQKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2RiL2RiL2FybS10aHVtYi1tdXRleF9kYjUucGF0Y2gKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2RiL2RiL2FybS10aHVtYi1tdXRleF9kYjUucGF0Y2gKQEAgLTEwLDkgKzEwLDExIEBACiAKIEF1dGhvcjogamJvd2xlckBuc2x1Mi1saW51eC5vcmcKIAotLS0tIGRiLTUuMS4xOS9zcmMvZGJpbmMvbXV0ZXhfaW50Lmgub3JpZwkyMDExLTAxLTA1IDE5OjIxOjQyLjE4MTgwNTM2NiAtMDYwMAotKysrIGRiLTUuMS4xOS9zcmMvZGJpbmMvbXV0ZXhfaW50LmgJMjAxMS0wMS0wNSAxOToyNDo1My4xNDE4NTMxMTcgLTA2MDAKLUBAIC00NzQsNiArNDc0LDI1IEBACitJbmRleDogZGItNi4wLjMwL3NyYy9kYmluYy9tdXRleF9pbnQuaAorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGRiLTYuMC4zMC5vcmlnL3NyYy9kYmluYy9tdXRleF9pbnQuaAorKysrIGRiLTYuMC4zMC9zcmMvZGJpbmMvbXV0ZXhfaW50LmgKK0BAIC00NzQsNiArNDc0LDI1IEBAIHR5cGVkZWYgdW5zaWduZWQgY2hhciB0c2xfdDsKICAKICAjaWZkZWYgTE9BRF9BQ1RVQUxfTVVURVhfQ09ERQogIC8qIGdjYy9hcm06IDAgaXMgY2xlYXIsIDEgaXMgc2V0LiAqLwpAQCAtMzgsNyArNDAsNyBAQAogICNkZWZpbmUJTVVURVhfU0VUKHRzbCkgKHsJCQkJCQlcCiAgCWludCBfX3I7CQkJCQkJCVwKICAJX19hc21fXyB2b2xhdGlsZSgJCQkJCQlcCi1AQCAtNDg0LDYgKzUwMyw3IEBACitAQCAtNDg0LDYgKzUwMyw3IEBAIHR5cGVkZWYgdW5zaWduZWQgY2hhciB0c2xfdDsKICAJICAgICk7CQkJCQkJCQlcCiAgCV9fciAmIDE7CQkJCQkJCVwKICB9KQpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2RiL2RiL2ZpeC1wYXJhbGxlbC1idWlsZC5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9kYi9kYi9maXgtcGFyYWxsZWwtYnVpbGQucGF0Y2gKaW5kZXggMmM3ZjFlMS4uMjc2MzJlMSAxMDA2NDQKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2RiL2RiL2ZpeC1wYXJhbGxlbC1idWlsZC5wYXRjaAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvZGIvZGIvZml4LXBhcmFsbGVsLWJ1aWxkLnBhdGNoCkBAIC02LDkgKzYsMTEgQEAKIAogU2lnbmVkLW9mZi1ieTogTWFydGluIEphbnNhIDxNYXJ0aW4uSmFuc2FAZ21haWwuY29tPgogCi0tLS0gZGlzdC5vcmlnL01ha2VmaWxlLmluCTIwMTItMDUtMTEgMTk6NTc6NDguMDAwMDAwMDAwICswMjAwCi0rKysgZGlzdC9NYWtlZmlsZS5pbgkyMDEzLTEwLTMxIDE4OjE3OjExLjg3NTUzMjUyMiArMDEwMAotQEAgLTEwMzQsNyArMTAzNCw3IEBACitJbmRleDogZGItNi4wLjMwL2Rpc3QvTWFrZWZpbGUuaW4KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBkYi02LjAuMzAub3JpZy9kaXN0L01ha2VmaWxlLmluCisrKysgZGItNi4wLjMwL2Rpc3QvTWFrZWZpbGUuaW4KK0BAIC0xMDQxLDcgKzEwNDEsNyBAQCBkYl9yZWNvdmVyOiBkYl9yZWNvdmVyQG9AIHV0aWxfc2lnQG9AICQoCiAgCSAgICBkYl9yZWNvdmVyQG9AIHV0aWxfc2lnQG9AICQoREVGX0xJQikgJChMSUJTKQogIAkkKFBPU1RMSU5LKSAkQAogIApkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2RiL2RiXzUuMy4yOC5iYiBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9kYi9kYl81LjMuMjguYmIKaW5kZXggYzcyNGYwNC4uMGI1MWExZCAxMDA2NDQKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2RiL2RiXzUuMy4yOC5iYgorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvZGIvZGJfNS4zLjI4LmJiCkBAIC0xNSwxNSArMTUsMTcgQEAKIFZJUlRVQUxfTkFNRSA/PSAidmlydHVhbC9kYiIKIFJDT05GTElDVFNfJHtQTn0gPSAiZGIzIgogCitQUiA9ICJyMSIKKwogU1JDX1VSSSA9ICJodHRwOi8vZG93bmxvYWQub3JhY2xlLmNvbS9iZXJrZWxleS1kYi9kYi0ke1BWfS50YXIuZ3oiCi1TUkNfVVJJICs9ICJmaWxlOi8vYXJtLXRodW1iLW11dGV4X2RiNS5wYXRjaDtwYXRjaGRpcj0uLiBcCitTUkNfVVJJICs9ICJmaWxlOi8vYXJtLXRodW1iLW11dGV4X2RiNS5wYXRjaCBcCiAgICAgICAgICAgICBmaWxlOi8vZml4LXBhcmFsbGVsLWJ1aWxkLnBhdGNoIFwKICAgICAgICAgICAgIgogCiBTUkNfVVJJW21kNXN1bV0gPSAiYjk5NDU0NTY0ZDViNDQ3OTc1MDU2NzAzMWQ2NmZlMjQiCiBTUkNfVVJJW3NoYTI1NnN1bV0gPSAiZTBhOTkyZDc0MDcwOTg5MmU4MWY5ZDkzZjA2ZGFmMzA1Y2Y3M2ZiODFiNTQ1YWZlNzI0NzgwNDMxNzJjMzYyOCIKIAotTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vLi4vTElDRU5TRTttZDU9ZWQxMTU4ZTMxNDM3ZjRmODdjZGQ0YWIyYjg2MTM5NTUiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9MSUNFTlNFO21kNT1lZDExNThlMzE0MzdmNGY4N2NkZDRhYjJiODYxMzk1NSIKIAogaW5oZXJpdCBhdXRvdG9vbHMKIApAQCAtMzYsMTQgKzM4LDYgQEAKICMgdG8gc2VsZWN0IHRoZSBjb3JyZWN0IGRiIGluIHRoZSBidWlsZCAoZGlzdHJvKSAuY29uZgogUFJPVklERVMgKz0gIiR7VklSVFVBTF9OQU1FfSIKIAotIyBiaXRiYWtlIGlzbid0IHF1aXRlIGNsZXZlciBlbm91Z2ggdG8gZGVhbCB3aXRoIHNsZWVweWNhdCwKLSMgdGhlIGRpc3RyaWJ1dGlvbiBzaXRzIGluIHRoZSBleHBlY3RlZCBkaXJlY3RvcnksIGJ1dCBhbGwKLSMgdGhlIGJ1aWxkcyBtdXN0IG9jY3VyIGZyb20gYSBzdWItZGlyZWN0b3J5LiAgVGhlIGZvbGxvd2luZwotIyBwZXJzdWFkZXMgYml0YmFrZSB0byBnbyB0byB0aGUgcmlnaHQgcGxhY2UKLVMgPSAiJHtXT1JLRElSfS9kYi0ke1BWfS9kaXN0IgotQiA9ICIke1dPUktESVJ9L2RiLSR7UFZ9L2J1aWxkX3VuaXgiCi1TUERYX1MgPSAiJHtXT1JLRElSfS9kYi0ke1BWfSIKLQogIyBUaGUgZXhlY3V0YWJsZXMgZ28gaW4gYSBzZXBhcmF0ZSBwYWNrYWdlIC0gdHlwaWNhbGx5IHRoZXJlCiAjIGlzIG5vIG5lZWQgdG8gaW5zdGFsbCB0aGVzZSB1bmxlc3MgZG9pbmcgcmVhbCBkYXRhYmFzZQogIyBtYW5hZ2VtZW50IG9uIHRoZSBzeXN0ZW0uCkBAIC03NSwyMSArNjksMjMgQEAKIE1VVEVYID0gIiIKIE1VVEVYX2FybSA9ICIke0FSTV9NVVRFWH0iCiBNVVRFWF9hcm1lYiA9ICIke0FSTV9NVVRFWH0iCi1FWFRSQV9PRUNPTkYgKz0gIiR7TVVURVh9IgotRVhUUkFfT0VNQUtFX2NsYXNzLXRhcmdldCA9ICJMSUJUT09MPSR7U1RBR0lOR19CSU5ESVJfQ1JPU1N9LyR7SE9TVF9TWVN9LWxpYnRvb2wiCitFWFRSQV9PRUNPTkYgKz0gIiR7TVVURVh9IFNUUklQPXRydWUiCitFWFRSQV9PRU1BS0VfYXBwZW5kX2NsYXNzLXRhcmdldCA9ICIgTElCVE9PTD0ke1NUQUdJTkdfQklORElSX0NST1NTfS8ke0hPU1RfU1lTfS1saWJ0b29sIgorCitBVVRPVE9PTFNfU0NSSVBUX1BBVEggPSAiJHtTfS9kaXN0IgogCiAjIENhbmNlbCB0aGUgc2l0ZSBzdHVmZiAtIGl0J3Mgc2V0IGZvciBkYjMgYW5kIGRlc3Ryb3lzIHRoZQogIyBjb25maWd1cmUuCiBDT05GSUdfU0lURSA9ICIiCiBkb19jb25maWd1cmUoKSB7Ci0JZ251LWNvbmZpZ2l6ZSAtLWZvcmNlICR7U30KLQlleHBvcnQgU1RSSVA9InRydWUiCisgICAgY2QgJHtCfQorCWdudS1jb25maWdpemUgLS1mb3JjZSAke0FVVE9UT09MU19TQ1JJUFRfUEFUSH0KIAlvZV9ydW5jb25mCiB9CiAKIGRvX2NvbXBpbGVfcHJlcGVuZCgpIHsKLQlzZWQgLWkgLWUgJ3N8aGFyZGNvZGVfaW50b19saWJzPXllc3xoYXJkY29kZV9pbnRvX2xpYnM9bm98JyBcCi0JCSR7Qn0vbGlidG9vbAorICAgICMgU3RvcCBsaWJ0b29sIGFkZGluZyBSUEFUSHMKKyAgICBzZWQgLWkgLWUgJ3N8aGFyZGNvZGVfaW50b19saWJzPXllc3xoYXJkY29kZV9pbnRvX2xpYnM9bm98JyAke0J9L2xpYnRvb2wKIH0KIAogZG9faW5zdGFsbF9hcHBlbmQoKSB7CkBAIC0xMTQsNCArMTEwLDMgQEAKIElOU0FORV9TS0lQXyR7UE59LWN4eCA9ICJkZXYtc28iCiAKIEJCQ0xBU1NFWFRFTkQgPSAibmF0aXZlIG5hdGl2ZXNkayIKLQpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2RiL2RiXzYuMC4zMC5iYiBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9kYi9kYl82LjAuMzAuYmIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDUwYTQ2OWIuLjAwMDAwMDAKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2RiL2RiXzYuMC4zMC5iYgorKysgL2Rldi9udWxsCkBAIC0xLDEyNCArMCwwIEBACi0jIFZlcnNpb24gNiBvZiB0aGUgQmVya2VsZXkgREIgZnJvbSBPcmFjbGUgKGZvcm1lcmx5IFNsZWVweWNhdCkKLSMKLSMgQXQgcHJlc2VudCB0aGlzIHBhY2thZ2Ugb25seSBpbnN0YWxscyB0aGUgREIgY29kZQotIyBpdHNlbGYgKHNoYXJlZCBsaWJyYXJpZXMsIC5hIGluIHRoZSBkZXYgcGFja2FnZSksCi0jIGRvY3VtZW50YXRpb24gYW5kIGhlYWRlcnMuCi0jCi0jIFRoZSBoZWFkZXJzIGhhdmUgdGhlIHNhbWUgbmFtZXMgYXMgdGhvc2UgYXMgdjMKLSMgb2YgdGhlIERCLCBvbmx5IG9uZSB2ZXJzaW9uIGNhbiBiZSB1c2VkICpmb3IgZGV2KgotIyBhdCBvbmNlIC0gREIzIGFuZCBEQjYgY2FuIGJvdGggYmUgaW5zdGFsbGVkIG9uIHRoZQotIyBzYW1lIHN5c3RlbSBhdCB0aGUgc2FtZSB0aW1lIGlmIHJlYWxseSBuZWNlc3NhcnkuCi1TRUNUSU9OID0gImxpYnMiCi1TVU1NQVJZID0gIkJlcmtlbGV5IERhdGFiYXNlIHY2IgotSE9NRVBBR0UgPSAiaHR0cDovL3d3dy5vcmFjbGUuY29tL3RlY2huZXR3b3JrL2RhdGFiYXNlL2RhdGFiYXNlLXRlY2hub2xvZ2llcy9iZXJrZWxleWRiL292ZXJ2aWV3L2luZGV4Lmh0bWwiCi1MSUNFTlNFID0gIkFHUEwtMy4wIgotVklSVFVBTF9OQU1FID89ICJ2aXJ0dWFsL2RiIgotUkNPTkZMSUNUU18ke1BOfSA9ICJkYjMiCi0KLSMgTm90ZSwgd2hlbiB1cGdyYWRlZCB0byA2LjEueCwgYSBwYXRjaCBpbiBSUE0gd2lsbCBuZWVkIHRvIGJlIHJlbW92ZWQgdG8gYWN0aXZhdGUgZGIgNi4xIHN1cHBvcnQuCi0KLVNSQ19VUkkgPSAiaHR0cDovL2Rvd25sb2FkLm9yYWNsZS5jb20vYmVya2VsZXktZGIvZGItJHtQVn0udGFyLmd6IgotU1JDX1VSSSArPSAiZmlsZTovL2FybS10aHVtYi1tdXRleF9kYjUucGF0Y2g7cGF0Y2hkaXI9Li4gXAotICAgICAgICAgICAgZmlsZTovL2ZpeC1wYXJhbGxlbC1idWlsZC5wYXRjaCBcCi0gICAgICAgICAgICBmaWxlOi8vTWFrZWZpbGUtbGV0LWxpYnNvX3RhcmdldC1kZXBlbmQtb24tYnRfcmVjLnBhdGNoIFwKLSAgICAgICAgICAgIGZpbGU6Ly9NYWtlZmlsZS1sZXQtbGliZGItNi4wLmxhLWRlcGVuZC1vc19tYXAubC5wYXRjaDtwYXRjaGRpcj0uLiBcCi0gICAgICAgICAgICIKLQotU1JDX1VSSVttZDVzdW1dID0gImFkMjhlYjg2YWQzMjAzYjU0MjI4NDRkYjE3OWM1ODViIgotU1JDX1VSSVtzaGEyNTZzdW1dID0gIjYwOGU0YjFjZjM5MGU5YmY1NGMwZWYwMGM1YmQ5Y2E3NmQzNmUyMjYxYjlmNGQzM2Q1NDUxNmYzZjZhMjBmZDIiCi0KLSMgRXhjbHVkZSBOQyB2ZXJzaW9ucyB3aGljaCBsYWNrIEFFUyBlbmNyeXB0aW9uCi1VUFNUUkVBTV9DSEVDS19SRUdFWCA9ICJkYi0oP1A8cHZlcj5cZCtcLlxkKyhcLlxkKyk/KS50YXIiCi1VUFNUUkVBTV9DSEVDS19VUkkgPSAiaHR0cDovL3d3dy5vcmFjbGUuY29tL3RlY2huZXR3b3JrL3Byb2R1Y3RzL2JlcmtlbGV5ZGIvZG93bmxvYWRzL2luZGV4LTA4Mjk0NC5odG1sIgotCi1MSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly8uLi9MSUNFTlNFO21kNT0xZWM4YjBiMTdjYzMxNTEzZmUzNWFiMTA3MTZmODQ5MCIKLQotaW5oZXJpdCBhdXRvdG9vbHMKLQotIyBQdXQgdmlydHVhbC9kYiBpbiBhbnkgYXBwcm9wcmlhdGUgcHJvdmlkZXIgb2YgYQotIyByZWxhdGlvbmFsIGRhdGFiYXNlLCB1c2UgaXQgYXMgYSBkZXBlbmRlbmN5IGluCi0jIHBsYWNlIG9mIGEgc3BlY2lmaWMgZGIgYW5kIHVzZToKLSMKLSMgUFJFRkVSUkVEX1BST1ZJREVSX3ZpcnR1YWwvZGIKLSMKLSMgdG8gc2VsZWN0IHRoZSBjb3JyZWN0IGRiIGluIHRoZSBidWlsZCAoZGlzdHJvKSAuY29uZgotUFJPVklERVMgKz0gIiR7VklSVFVBTF9OQU1FfSIKLQotIyBiaXRiYWtlIGlzbid0IHF1aXRlIGNsZXZlciBlbm91Z2ggdG8gZGVhbCB3aXRoIHNsZWVweWNhdCwKLSMgdGhlIGRpc3RyaWJ1dGlvbiBzaXRzIGluIHRoZSBleHBlY3RlZCBkaXJlY3RvcnksIGJ1dCBhbGwKLSMgdGhlIGJ1aWxkcyBtdXN0IG9jY3VyIGZyb20gYSBzdWItZGlyZWN0b3J5LiAgVGhlIGZvbGxvd2luZwotIyBwZXJzdWFkZXMgYml0YmFrZSB0byBnbyB0byB0aGUgcmlnaHQgcGxhY2UKLVMgPSAiJHtXT1JLRElSfS9kYi0ke1BWfS9kaXN0IgotQiA9ICIke1dPUktESVJ9L2RiLSR7UFZ9L2J1aWxkX3VuaXgiCi1TUERYX1MgPSAiJHtXT1JLRElSfS9kYi0ke1BWfSIKLQotIyBUaGUgZXhlY3V0YWJsZXMgZ28gaW4gYSBzZXBhcmF0ZSBwYWNrYWdlIC0gdHlwaWNhbGx5IHRoZXJlCi0jIGlzIG5vIG5lZWQgdG8gaW5zdGFsbCB0aGVzZSB1bmxlc3MgZG9pbmcgcmVhbCBkYXRhYmFzZQotIyBtYW5hZ2VtZW50IG9uIHRoZSBzeXN0ZW0uCi1pbmhlcml0IGxpYl9wYWNrYWdlCi0KLVBBQ0tBR0VTID0rICIke1BOfS1jeHgiCi1GSUxFU18ke1BOfS1jeHggPSAiJHtsaWJkaXJ9LypjeHgqc28iCi0KLQotIyBUaGUgZGV2IHBhY2thZ2UgaGFzIHRoZSAuc28gbGluayAoYXMgaW4gZGIzKSBhbmQgdGhlIC5hJ3MgLQotIyBpdCBpcyB0aGVyZWZvcmUgaW5jb21wYXRpYmxlIChjYW5ub3QgYmUgaW5zdGFsbGVkIGF0IHRoZQotIyBzYW1lIHRpbWUpIGFzIHRoZSBkYjMgcGFja2FnZQotIyBzb3J0IG91dCB0aGUgLnNvIHNpbmNlIHRoZXkgZG8gdmVyc2lvbiBwcmlvciB0byB0aGUgLnNvCi1TT0xJQlMgPSAiLTYqLnNvIgotRklMRVNfU09MSUJTREVWID0gIiR7bGliZGlyfS9saWJkYi5zbyAke2xpYmRpcn0vbGliZGJfY3h4LnNvIgotCi0jY29uZmlndXJhdGlvbiAtIHNldCBpbiBsb2NhbC5jb25mIHRvIG92ZXJyaWRlCi0jIEFsbCB0aGUgLS1kaXNhYmxlLSogb3B0aW9ucyByZXBsYWNlIC0tZW5hYmxlLXNtYWxsYnVpbGQsIHdoaWNoIGJyZWFrcyBhIGJ1bmNoIG9mIHN0dWZmIChlZy4gcG9zdGZpeCkKLURCNl9DT05GSUcgPz0gIi0tZW5hYmxlLW9fZGlyZWN0IC0tZGlzYWJsZS1jcnlwdG9ncmFwaHkgLS1kaXNhYmxlLXF1ZXVlIC0tZGlzYWJsZS1yZXBsaWNhdGlvbiAtLWRpc2FibGUtdmVyaWZ5IC0tZGlzYWJsZS1jb21wYXQxODUgLS1kaXNhYmxlLXNxbCIKLQotRVhUUkFfT0VDT05GID0gIiR7REI2X0NPTkZJR30gLS1lbmFibGUtc2hhcmVkIC0tZW5hYmxlLWN4eCAtLXdpdGgtc3lzcm9vdCIKLQotIyBPdmVycmlkZSB0aGUgTVVURVggc2V0dGluZyBoZXJlLCB0aGUgUE9TSVggbGlicmFyeSBpcwotIyB0aGUgZGVmYXVsdCAtICJQT1NJWC9wdGhyZWFkcy9saWJyYXJ5Ii4KLSMgRG9uJ3QgaWdub3JlIHRoZSBuaWNlIFNXUCBpbnN0cnVjdGlvbiBvbiB0aGUgQVJNOgotIyBUaGVzZSBlbmFibGUgdGhlIEFSTSBhc3NlbWJsZXIgbXV0ZXggY29kZQotQVJNX01VVEVYID0gIi0td2l0aC1tdXRleD1BUk0vZ2NjLWFzc2VtYmx5IgotTVVURVggPSAiIgotTVVURVhfYXJtID0gIiR7QVJNX01VVEVYfSIKLU1VVEVYX2FybWViID0gIiR7QVJNX01VVEVYfSIKLUVYVFJBX09FQ09ORiArPSAiJHtNVVRFWH0iCi1FWFRSQV9PRU1BS0VfY2xhc3MtdGFyZ2V0ID0gIkxJQlRPT0w9JHtTVEFHSU5HX0JJTkRJUl9DUk9TU30vJHtIT1NUX1NZU30tbGlidG9vbCIKLQotIyBDYW5jZWwgdGhlIHNpdGUgc3R1ZmYgLSBpdCdzIHNldCBmb3IgZGIzIGFuZCBkZXN0cm95cyB0aGUKLSMgY29uZmlndXJlLgotQ09ORklHX1NJVEUgPSAiIgotZG9fY29uZmlndXJlKCkgewotCWdudS1jb25maWdpemUgLS1mb3JjZSAke1N9Ci0JZXhwb3J0IFNUUklQPSJ0cnVlIgotCW9lX3J1bmNvbmYKLX0KLQotZG9fY29tcGlsZV9wcmVwZW5kKCkgewotCXNlZCAtaSAtZSAnc3xoYXJkY29kZV9pbnRvX2xpYnM9eWVzfGhhcmRjb2RlX2ludG9fbGlicz1ub3wnIFwKLQkJJHtCfS9saWJ0b29sCi19Ci0KLWRvX2luc3RhbGxfYXBwZW5kKCkgewotCW1rZGlyIC1wICR7RH0vJHtpbmNsdWRlZGlyfS9kYjYwCi0JbXYgJHtEfS8ke2luY2x1ZGVkaXJ9L2RiLmggJHtEfS8ke2luY2x1ZGVkaXJ9L2RiNjAvLgotCW12ICR7RH0vJHtpbmNsdWRlZGlyfS9kYl9jeHguaCAke0R9LyR7aW5jbHVkZWRpcn0vZGI2MC8uCi0JbG4gLXMgZGI2MC9kYi5oICR7RH0vJHtpbmNsdWRlZGlyfS9kYi5oCi0JbG4gLXMgZGI2MC9kYl9jeHguaCAke0R9LyR7aW5jbHVkZWRpcn0vZGJfY3h4LmgKLQotCSMgVGhlIGRvY3MgZW5kIHVwIGluIC91c3IvZG9jcyAtIG5vdCByaWdodC4KLQlpZiB0ZXN0IC1kICIke0R9LyR7cHJlZml4fS9kb2NzIgotCXRoZW4KLQkJbWtkaXIgLXAgIiR7RH0vJHtkYXRhZGlyfSIKLQkJdGVzdCAhIC1kICIke0R9LyR7ZG9jZGlyfSIgfHwgcm0gLXJmICIke0R9LyR7ZG9jZGlyfSIKLQkJbXYgIiR7RH0vJHtwcmVmaXh9L2RvY3MiICIke0R9LyR7ZG9jZGlyfSIKLQlmaQotCi0JY2hvd24gLVIgcm9vdDpyb290ICR7RH0KLX0KLQotSU5TQU5FX1NLSVBfJHtQTn0gPSAiZGV2LXNvIgotSU5TQU5FX1NLSVBfJHtQTn0tY3h4ID0gImRldi1zbyIKLQotQkJDTEFTU0VYVEVORCA9ICJuYXRpdmUgbmF0aXZlc2RrIgotCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvZGIvZGJfNi4wLjM1LmJiIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2RiL2RiXzYuMC4zNS5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMmFmYmU4Ci0tLSAvZGV2L251bGwKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2RiL2RiXzYuMC4zNS5iYgpAQCAtMCwwICsxLDEyMiBAQAorIyBWZXJzaW9uIDYgb2YgdGhlIEJlcmtlbGV5IERCIGZyb20gT3JhY2xlIChmb3JtZXJseSBTbGVlcHljYXQpCisjCisjIEF0IHByZXNlbnQgdGhpcyBwYWNrYWdlIG9ubHkgaW5zdGFsbHMgdGhlIERCIGNvZGUKKyMgaXRzZWxmIChzaGFyZWQgbGlicmFyaWVzLCAuYSBpbiB0aGUgZGV2IHBhY2thZ2UpLAorIyBkb2N1bWVudGF0aW9uIGFuZCBoZWFkZXJzLgorIworIyBUaGUgaGVhZGVycyBoYXZlIHRoZSBzYW1lIG5hbWVzIGFzIHRob3NlIGFzIHYzCisjIG9mIHRoZSBEQiwgb25seSBvbmUgdmVyc2lvbiBjYW4gYmUgdXNlZCAqZm9yIGRldioKKyMgYXQgb25jZSAtIERCMyBhbmQgREI2IGNhbiBib3RoIGJlIGluc3RhbGxlZCBvbiB0aGUKKyMgc2FtZSBzeXN0ZW0gYXQgdGhlIHNhbWUgdGltZSBpZiByZWFsbHkgbmVjZXNzYXJ5LgorU0VDVElPTiA9ICJsaWJzIgorU1VNTUFSWSA9ICJCZXJrZWxleSBEYXRhYmFzZSB2NiIKK0hPTUVQQUdFID0gImh0dHA6Ly93d3cub3JhY2xlLmNvbS90ZWNobmV0d29yay9kYXRhYmFzZS9kYXRhYmFzZS10ZWNobm9sb2dpZXMvYmVya2VsZXlkYi9vdmVydmlldy9pbmRleC5odG1sIgorTElDRU5TRSA9ICJBR1BMLTMuMCIKK1ZJUlRVQUxfTkFNRSA/PSAidmlydHVhbC9kYiIKK1JDT05GTElDVFNfJHtQTn0gPSAiZGIzIgorCitQUiA9ICJyMSIKKworIyBOb3RlLCB3aGVuIHVwZ3JhZGVkIHRvIDYuMS54LCBhIHBhdGNoIGluIFJQTSB3aWxsIG5lZWQgdG8gYmUgcmVtb3ZlZCB0byBhY3RpdmF0ZSBkYiA2LjEgc3VwcG9ydC4KK1NSQ19VUkkgPSAiaHR0cDovL2Rpc3RmaWxlcy5nZW50b28ub3JnL2Rpc3RmaWxlcy9kYi0ke1BWfS50YXIuZ3ogXAorICAgICAgICAgICBmaWxlOi8vYXJtLXRodW1iLW11dGV4X2RiNS5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9maXgtcGFyYWxsZWwtYnVpbGQucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vTWFrZWZpbGUtbGV0LWxpYnNvX3RhcmdldC1kZXBlbmQtb24tYnRfcmVjLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL01ha2VmaWxlLWxldC1saWJkYi02LjAubGEtZGVwZW5kLW9zX21hcC5sLnBhdGNoIFwKKyAgICAgICAgICAgIgorCitTUkNfVVJJW21kNXN1bV0gPSAiYzY1YTRkM2U5MzBhMTE2YWJhYWY2OWVkZmM2OTdmMjUiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiMjQ0MjFhZmZhOGFlNDM2ZmU0MjdhZTRmNWYyZDE2MzRkYTgzZDNkNTVhNWFkNjM1NGE5OGVlZWRiODI1ZGU1NSIKKworIyBFeGNsdWRlIE5DIHZlcnNpb25zIHdoaWNoIGxhY2sgQUVTIGVuY3J5cHRpb24KK1VQU1RSRUFNX0NIRUNLX1JFR0VYID0gImRiLSg/UDxwdmVyPlxkK1wuXGQrKFwuXGQrKT8pLnRhciIKK1VQU1RSRUFNX0NIRUNLX1VSSSA9ICJodHRwOi8vd3d3Lm9yYWNsZS5jb20vdGVjaG5ldHdvcmsvcHJvZHVjdHMvYmVya2VsZXlkYi9kb3dubG9hZHMvaW5kZXgtMDgyOTQ0Lmh0bWwiCisKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0xJQ0VOU0U7bWQ1PTFlYzhiMGIxN2NjMzE1MTNmZTM1YWIxMDcxNmY4NDkwIgorCisjIFB1dCB2aXJ0dWFsL2RiIGluIGFueSBhcHByb3ByaWF0ZSBwcm92aWRlciBvZiBhCisjIHJlbGF0aW9uYWwgZGF0YWJhc2UsIHVzZSBpdCBhcyBhIGRlcGVuZGVuY3kgaW4KKyMgcGxhY2Ugb2YgYSBzcGVjaWZpYyBkYiBhbmQgdXNlOgorIworIyBQUkVGRVJSRURfUFJPVklERVJfdmlydHVhbC9kYgorIworIyB0byBzZWxlY3QgdGhlIGNvcnJlY3QgZGIgaW4gdGhlIGJ1aWxkIChkaXN0cm8pIC5jb25mCitQUk9WSURFUyArPSAiJHtWSVJUVUFMX05BTUV9IgorCitpbmhlcml0IGF1dG90b29scworCisjIFRoZSBleGVjdXRhYmxlcyBnbyBpbiBhIHNlcGFyYXRlIHBhY2thZ2UgLSB0eXBpY2FsbHkgdGhlcmUKKyMgaXMgbm8gbmVlZCB0byBpbnN0YWxsIHRoZXNlIHVubGVzcyBkb2luZyByZWFsIGRhdGFiYXNlCisjIG1hbmFnZW1lbnQgb24gdGhlIHN5c3RlbS4KK2luaGVyaXQgbGliX3BhY2thZ2UKKworUEFDS0FHRVMgPSsgIiR7UE59LWN4eCIKK0ZJTEVTXyR7UE59LWN4eCA9ICIke2xpYmRpcn0vKmN4eCpzbyIKKworIyBUaGUgZGV2IHBhY2thZ2UgaGFzIHRoZSAuc28gbGluayAoYXMgaW4gZGIzKSBhbmQgdGhlIC5hJ3MgLQorIyBpdCBpcyB0aGVyZWZvcmUgaW5jb21wYXRpYmxlIChjYW5ub3QgYmUgaW5zdGFsbGVkIGF0IHRoZQorIyBzYW1lIHRpbWUpIGFzIHRoZSBkYjMgcGFja2FnZQorIyBzb3J0IG91dCB0aGUgLnNvIHNpbmNlIHRoZXkgZG8gdmVyc2lvbiBwcmlvciB0byB0aGUgLnNvCitTT0xJQlMgPSAiLTYqLnNvIgorRklMRVNfU09MSUJTREVWID0gIiR7bGliZGlyfS9saWJkYi5zbyAke2xpYmRpcn0vbGliZGJfY3h4LnNvIgorCisjY29uZmlndXJhdGlvbiAtIHNldCBpbiBsb2NhbC5jb25mIHRvIG92ZXJyaWRlCisjIEFsbCB0aGUgLS1kaXNhYmxlLSogb3B0aW9ucyByZXBsYWNlIC0tZW5hYmxlLXNtYWxsYnVpbGQsIHdoaWNoIGJyZWFrcyBhIGJ1bmNoIG9mIHN0dWZmIChlZy4gcG9zdGZpeCkKK0RCNl9DT05GSUcgPz0gIi0tZW5hYmxlLW9fZGlyZWN0IC0tZGlzYWJsZS1jcnlwdG9ncmFwaHkgLS1kaXNhYmxlLXF1ZXVlIC0tZGlzYWJsZS1yZXBsaWNhdGlvbiAtLWRpc2FibGUtdmVyaWZ5IC0tZGlzYWJsZS1jb21wYXQxODUgLS1kaXNhYmxlLXNxbCIKKworRVhUUkFfT0VDT05GID0gIiR7REI2X0NPTkZJR30gLS1lbmFibGUtc2hhcmVkIC0tZW5hYmxlLWN4eCAtLXdpdGgtc3lzcm9vdCIKKworIyBDYW5jZWwgdGhlIHNpdGUgc3R1ZmYgLSBpdCdzIHNldCBmb3IgZGIzIGFuZCBkZXN0cm95cyB0aGUgY29uZmlndXJlLgorQ09ORklHX1NJVEUgPSAiIgorCitBVVRPVE9PTFNfU0NSSVBUX1BBVEggPSAiJHtTfS9kaXN0IgorCitkb19jb25maWd1cmUoKSB7CisJY2QgJHtCfQorCWdudS1jb25maWdpemUgLS1mb3JjZSAke0FVVE9UT09MU19TQ1JJUFRfUEFUSH0KKwlvZV9ydW5jb25mCit9CisKKyMgT3ZlcnJpZGUgdGhlIE1VVEVYIHNldHRpbmcgaGVyZSwgdGhlIFBPU0lYIGxpYnJhcnkgaXMKKyMgdGhlIGRlZmF1bHQgLSAiUE9TSVgvcHRocmVhZHMvbGlicmFyeSIuCisjIERvbid0IGlnbm9yZSB0aGUgbmljZSBTV1AgaW5zdHJ1Y3Rpb24gb24gdGhlIEFSTToKKyMgVGhlc2UgZW5hYmxlIHRoZSBBUk0gYXNzZW1ibGVyIG11dGV4IGNvZGUKK0FSTV9NVVRFWCA9ICItLXdpdGgtbXV0ZXg9QVJNL2djYy1hc3NlbWJseSIKK01VVEVYID0gIiIKK01VVEVYX2FybSA9ICIke0FSTV9NVVRFWH0iCitNVVRFWF9hcm1lYiA9ICIke0FSTV9NVVRFWH0iCitFWFRSQV9PRUNPTkYgKz0gIiR7TVVURVh9IgorRVhUUkFfT0VNQUtFX2FwcGVuZF9jbGFzcy10YXJnZXQgPSAiIExJQlRPT0w9JHtTVEFHSU5HX0JJTkRJUl9DUk9TU30vJHtIT1NUX1NZU30tbGlidG9vbCIKK0VYVFJBX09FTUFLRSArPSAiU1RSSVA9dHJ1ZSIKKworZG9fY29tcGlsZV9wcmVwZW5kKCkgeworCSMgU3RvcCBsaWJ0b29sIGFkZGluZyBSUEFUSHMKKwlzZWQgLWkgLWUgJ3N8aGFyZGNvZGVfaW50b19saWJzPXllc3xoYXJkY29kZV9pbnRvX2xpYnM9bm98JyAke0J9L2xpYnRvb2wKK30KKworZG9faW5zdGFsbF9hcHBlbmQoKSB7CisJbWtkaXIgLXAgJHtEfS8ke2luY2x1ZGVkaXJ9L2RiNjAKKwltdiAke0R9LyR7aW5jbHVkZWRpcn0vZGIuaCAke0R9LyR7aW5jbHVkZWRpcn0vZGI2MC8uCisJbXYgJHtEfS8ke2luY2x1ZGVkaXJ9L2RiX2N4eC5oICR7RH0vJHtpbmNsdWRlZGlyfS9kYjYwLy4KKwlsbiAtcyBkYjYwL2RiLmggJHtEfS8ke2luY2x1ZGVkaXJ9L2RiLmgKKwlsbiAtcyBkYjYwL2RiX2N4eC5oICR7RH0vJHtpbmNsdWRlZGlyfS9kYl9jeHguaAorCisJIyBUaGUgZG9jcyBlbmQgdXAgaW4gL3Vzci9kb2NzIC0gbm90IHJpZ2h0LgorCWlmIHRlc3QgLWQgIiR7RH0vJHtwcmVmaXh9L2RvY3MiCisJdGhlbgorCQlta2RpciAtcCAiJHtEfS8ke2RhdGFkaXJ9IgorCQl0ZXN0ICEgLWQgIiR7RH0vJHtkb2NkaXJ9IiB8fCBybSAtcmYgIiR7RH0vJHtkb2NkaXJ9IgorCQltdiAiJHtEfS8ke3ByZWZpeH0vZG9jcyIgIiR7RH0vJHtkb2NkaXJ9IgorCWZpCisKKwljaG93biAtUiByb290OnJvb3QgJHtEfQorfQorCisjIGxpYmRiIGlzbid0IHZlcnNpb25lZCBpbiB0aGUgdHlwaWNhbCBtYW5uZXIgKGxpYmRiLTYuMC5zbyBpcyB0aGUgZnVsbCBsaWJyYXJ5CisjIG5hbWUpIHNvIHNraXAgdGhlc2UgY2hlY2tzLgorSU5TQU5FX1NLSVBfJHtQTn0gPSAiZGV2LXNvIgorSU5TQU5FX1NLSVBfJHtQTn0tY3h4ID0gImRldi1zbyIKKworQkJDTEFTU0VYVEVORCA9ICJuYXRpdmUgbmF0aXZlc2RrIgorCitSRUNJUEVfTk9fVVBEQVRFX1JFQVNPTiA9ICJsYXRlc3QgZGIgZG9lcyBub3Qgd29yayB3aXRoIFJQTS01LnggZHVlIHRvIGNoYW5nZXMgaW4gbG9ja2luZyBzZW1hbnRpY3MiCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvZGViaWFudXRpbHMvZGViaWFudXRpbHNfNC43LmJiIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2RlYmlhbnV0aWxzL2RlYmlhbnV0aWxzXzQuNy5iYgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNmExZDViZi4uMDAwMDAwMAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvZGViaWFudXRpbHMvZGViaWFudXRpbHNfNC43LmJiCisrKyAvZGV2L251bGwKQEAgLTEsNDggKzAsMCBAQAotU1VNTUFSWSA9ICJNaXNjZWxsYW5lb3VzIHV0aWxpdGllcyBzcGVjaWZpYyB0byBEZWJpYW4iCi1TRUNUSU9OID0gImJhc2UiCi1MSUNFTlNFID0gIkdQTHYyICYgU01BSUxfR1BMIgotTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vZGViaWFuL2NvcHlyaWdodDttZDU9ZjAxYTUyMDNkNTA1MTJmYzQ4MzBiNDMzMmI2OTZhOWYiCi0KLVNSQ19VUkkgPSAiaHR0cDovL3NuYXBzaG90LmRlYmlhbi5vcmcvYXJjaGl2ZS9kZWJpYW4vMjAxNjAyMDRUMDQwNTAxWi9wb29sL21haW4vZC8ke0JQTn0vJHtCUE59XyR7UFZ9LnRhci54eiIKLSMgdGhlIHBhY2thZ2UgaXMgdGFrZW4gZnJvbSBzbmFwc2hvdHMuZGViaWFuLm9yZzsgdGhhdCBzb3VyY2UgaXMgc3RhdGljIGFuZCBnb2VzIHN0YWxlCi0jIHNvIHdlIGNoZWNrIHRoZSBsYXRlc3QgdXBzdHJlYW0gZnJvbSBhIGRpcmVjdG9yeSB0aGF0IGRvZXMgZ2V0IHVwZGF0ZWQKLVVQU1RSRUFNX0NIRUNLX1VSSSA9ICIke0RFQklBTl9NSVJST1J9L21haW4vZC8ke0JQTn0vIgotCi1TUkNfVVJJW21kNXN1bV0gPSAiMDAxODZmNTI3YjM1ZTJjZWNkNGRiNTkzYzZkNTEyZDAiCi1TUkNfVVJJW3NoYTI1NnN1bV0gPSAiYTI2OWNhY2Q0MGY1MmYyZmE1ZDU2MzYzNTc3MTRhNDllODUzODQ1OWMxNmQ3Nzc3MmVmYWEyMzcxMWZlNTNkOSIKLQotaW5oZXJpdCBhdXRvdG9vbHMgdXBkYXRlLWFsdGVybmF0aXZlcwotCi1kb19jb25maWd1cmVfcHJlcGVuZCgpIHsKLSAgICBzZWQgLWkgLWUgJ3M6dGVtcGZpbGUuMSB3aGljaC4xOndoaWNoLjE6ZycgJHtTfS9NYWtlZmlsZS5hbQotfQotCi1kb19pbnN0YWxsX2FwcGVuZCgpIHsKLSAgICBpZiBbICIke2Jhc2VfYmluZGlyfSIgIT0gIiR7YmluZGlyfSIgXTsgdGhlbgotICAgICAgICAjIERlYmlhbiBwbGFjZXMgc29tZSB1dGlscyBpbnRvICR7YmFzZV9iaW5kaXJ9IGFzIGRvZXMgYnVzeWJveAotICAgICAgICBpbnN0YWxsIC1kICR7RH0ke2Jhc2VfYmluZGlyfQotICAgICAgICBmb3IgYXBwIGluIHJ1bi1wYXJ0cyB0ZW1wZmlsZTsgZG8KLSAgICAgICAgICAgIG12ICR7RH0ke2JpbmRpcn0vJGFwcCAke0R9JHtiYXNlX2JpbmRpcn0vJGFwcAotICAgICAgICBkb25lCi0gICAgZmkKLX0KLQotIyBOb3RlIHRoYXQgd2UgcGFja2FnZSB0aGUgdXBkYXRlLWFsdGVybmF0aXZlcyBuYW1lLgotIwotUEFDS0FHRVMgPSsgIiR7UE59LXJ1bi1wYXJ0cyIKLUZJTEVTXyR7UE59LXJ1bi1wYXJ0cyA9ICIke2Jhc2VfYmluZGlyfS9ydW4tcGFydHMuZGViaWFudXRpbHMiCi0KLVJERVBFTkRTXyR7UE59ICs9ICIke1BOfS1ydW4tcGFydHMiCi0KLQotQUxURVJOQVRJVkVfUFJJT1JJVFk9IjMwIgotQUxURVJOQVRJVkVfJHtQTn0gPSAiYWRkLXNoZWxsIGluc3RhbGxrZXJuZWwgcmVtb3ZlLXNoZWxsIHNhdmVsb2cgdGVtcGZpbGUgd2hpY2giCi1BTFRFUk5BVElWRV8ke1BOfS1ydW4tcGFydHMgPSAicnVuLXBhcnRzIgotCi1BTFRFUk5BVElWRV9MSU5LX05BTUVbYWRkLXNoZWxsXT0iJHtzYmluZGlyfS9hZGQtc2hlbGwiCi1BTFRFUk5BVElWRV9MSU5LX05BTUVbaW5zdGFsbGtlcm5lbF09IiR7c2JpbmRpcn0vaW5zdGFsbGtlcm5lbCIKLUFMVEVSTkFUSVZFX0xJTktfTkFNRVtyZW1vdmUtc2hlbGxdPSIke3NiaW5kaXJ9L3JlbW92ZS1zaGVsbCIKLUFMVEVSTkFUSVZFX0xJTktfTkFNRVtydW4tcGFydHNdPSIke2Jhc2VfYmluZGlyfS9ydW4tcGFydHMiCi1BTFRFUk5BVElWRV9MSU5LX05BTUVbc2F2ZWxvZ109IiR7YmluZGlyfS9zYXZlbG9nIgotQUxURVJOQVRJVkVfTElOS19OQU1FW3RlbXBmaWxlXT0iJHtiYXNlX2JpbmRpcn0vdGVtcGZpbGUiCi1BTFRFUk5BVElWRV9MSU5LX05BTUVbd2hpY2hdPSIke2JpbmRpcn0vd2hpY2giCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvZGViaWFudXRpbHMvZGViaWFudXRpbHNfNC44LmJiIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2RlYmlhbnV0aWxzL2RlYmlhbnV0aWxzXzQuOC5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kOTY5ZmQzCi0tLSAvZGV2L251bGwKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2RlYmlhbnV0aWxzL2RlYmlhbnV0aWxzXzQuOC5iYgpAQCAtMCwwICsxLDQ4IEBACitTVU1NQVJZID0gIk1pc2NlbGxhbmVvdXMgdXRpbGl0aWVzIHNwZWNpZmljIHRvIERlYmlhbiIKK1NFQ1RJT04gPSAiYmFzZSIKK0xJQ0VOU0UgPSAiR1BMdjIgJiBTTUFJTF9HUEwiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9kZWJpYW4vY29weXJpZ2h0O21kNT1mMDFhNTIwM2Q1MDUxMmZjNDgzMGI0MzMyYjY5NmE5ZiIKKworU1JDX1VSSSA9ICJodHRwOi8vc25hcHNob3QuZGViaWFuLm9yZy9hcmNoaXZlL2RlYmlhbi8yMDE2MDYyOVQyMjQ0MDhaL3Bvb2wvbWFpbi9kLyR7QlBOfS8ke0JQTn1fJHtQVn0udGFyLnh6IgorIyB0aGUgcGFja2FnZSBpcyB0YWtlbiBmcm9tIHNuYXBzaG90cy5kZWJpYW4ub3JnOyB0aGF0IHNvdXJjZSBpcyBzdGF0aWMgYW5kIGdvZXMgc3RhbGUKKyMgc28gd2UgY2hlY2sgdGhlIGxhdGVzdCB1cHN0cmVhbSBmcm9tIGEgZGlyZWN0b3J5IHRoYXQgZG9lcyBnZXQgdXBkYXRlZAorVVBTVFJFQU1fQ0hFQ0tfVVJJID0gIiR7REVCSUFOX01JUlJPUn0vbWFpbi9kLyR7QlBOfS8iCisKK1NSQ19VUklbbWQ1c3VtXSA9ICI2NmEzN2U1ZmYxN2JlNDMxMzE5YmQwYjQzZTlhNDZiNSIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICJhZmE5NWJiZTZiNmZkM2VmM2MwYzgzOGIyZDcyMzJmMDlmYWJlZmY1OTNjYTRiNTU4M2NmZmE2NzQ4NTY3ZWUyIgorCitpbmhlcml0IGF1dG90b29scyB1cGRhdGUtYWx0ZXJuYXRpdmVzCisKK2RvX2NvbmZpZ3VyZV9wcmVwZW5kKCkgeworICAgIHNlZCAtaSAtZSAnczp0ZW1wZmlsZS4xIHdoaWNoLjE6d2hpY2guMTpnJyAke1N9L01ha2VmaWxlLmFtCit9CisKK2RvX2luc3RhbGxfYXBwZW5kKCkgeworICAgIGlmIFsgIiR7YmFzZV9iaW5kaXJ9IiAhPSAiJHtiaW5kaXJ9IiBdOyB0aGVuCisgICAgICAgICMgRGViaWFuIHBsYWNlcyBzb21lIHV0aWxzIGludG8gJHtiYXNlX2JpbmRpcn0gYXMgZG9lcyBidXN5Ym94CisgICAgICAgIGluc3RhbGwgLWQgJHtEfSR7YmFzZV9iaW5kaXJ9CisgICAgICAgIGZvciBhcHAgaW4gcnVuLXBhcnRzIHRlbXBmaWxlOyBkbworICAgICAgICAgICAgbXYgJHtEfSR7YmluZGlyfS8kYXBwICR7RH0ke2Jhc2VfYmluZGlyfS8kYXBwCisgICAgICAgIGRvbmUKKyAgICBmaQorfQorCisjIE5vdGUgdGhhdCB3ZSBwYWNrYWdlIHRoZSB1cGRhdGUtYWx0ZXJuYXRpdmVzIG5hbWUuCisjCitQQUNLQUdFUyA9KyAiJHtQTn0tcnVuLXBhcnRzIgorRklMRVNfJHtQTn0tcnVuLXBhcnRzID0gIiR7YmFzZV9iaW5kaXJ9L3J1bi1wYXJ0cy5kZWJpYW51dGlscyIKKworUkRFUEVORFNfJHtQTn0gKz0gIiR7UE59LXJ1bi1wYXJ0cyIKKworCitBTFRFUk5BVElWRV9QUklPUklUWT0iMzAiCitBTFRFUk5BVElWRV8ke1BOfSA9ICJhZGQtc2hlbGwgaW5zdGFsbGtlcm5lbCByZW1vdmUtc2hlbGwgc2F2ZWxvZyB0ZW1wZmlsZSB3aGljaCIKK0FMVEVSTkFUSVZFXyR7UE59LXJ1bi1wYXJ0cyA9ICJydW4tcGFydHMiCisKK0FMVEVSTkFUSVZFX0xJTktfTkFNRVthZGQtc2hlbGxdPSIke3NiaW5kaXJ9L2FkZC1zaGVsbCIKK0FMVEVSTkFUSVZFX0xJTktfTkFNRVtpbnN0YWxsa2VybmVsXT0iJHtzYmluZGlyfS9pbnN0YWxsa2VybmVsIgorQUxURVJOQVRJVkVfTElOS19OQU1FW3JlbW92ZS1zaGVsbF09IiR7c2JpbmRpcn0vcmVtb3ZlLXNoZWxsIgorQUxURVJOQVRJVkVfTElOS19OQU1FW3J1bi1wYXJ0c109IiR7YmFzZV9iaW5kaXJ9L3J1bi1wYXJ0cyIKK0FMVEVSTkFUSVZFX0xJTktfTkFNRVtzYXZlbG9nXT0iJHtiaW5kaXJ9L3NhdmVsb2ciCitBTFRFUk5BVElWRV9MSU5LX05BTUVbdGVtcGZpbGVdPSIke2Jhc2VfYmluZGlyfS90ZW1wZmlsZSIKK0FMVEVSTkFUSVZFX0xJTktfTkFNRVt3aGljaF09IiR7YmluZGlyfS93aGljaCIKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9lbmNoYW50L2VuY2hhbnRfMS42LjAuYmIgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvZW5jaGFudC9lbmNoYW50XzEuNi4wLmJiCmluZGV4IDk3YTQ3NjEuLjQ0ZWIyZTMgMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9lbmNoYW50L2VuY2hhbnRfMS42LjAuYmIKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2VuY2hhbnQvZW5jaGFudF8xLjYuMC5iYgpAQCAtNyw3ICs3LDcgQEAKIExJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkcuTElCO21kNT1kZmNiYWJmOTEzMWRjOWE5NWZlYmVmNjc1M2EyOTU4YiBcCiAgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9zcmMvZW5jaGFudC5oO2JlZ2lubGluZT0xO2VuZGxpbmU9Mjk7bWQ1PThkODgxY2FhMWQzNzUyMzU2N2UxZDhmNzI2Njc1YTE4IgogCi1ERVBFTkRTID0gImFzcGVsbCBnbGliLTIuMCIKK0RFUEVORFMgPSAiZ2xpYi0yLjAiCiAKIGluaGVyaXQgYXV0b3Rvb2xzIHBrZ2NvbmZpZwogCkBAIC0xOCwxNSArMTgsMTcgQEAKIFNSQ19VUklbbWQ1c3VtXSA9ICJkZTExMDExYWZmODAxZGM2MTA0MjgyODA0MWZiNTljNyIKIFNSQ19VUklbc2hhMjU2c3VtXSA9ICIyZmFjOWU3YmU3ZTk0MjRiMmM1NTcwZDhhZmZlNTY4ZGIzOWY3NTcyYzEwZWQ0OGQ0ZTEzY2RkZjAzZjcwOTdmIgogCi1FWFRSQV9PRUNPTkYgPSAiLS13aXRoLWFzcGVsbC1wcmVmaXg9JHtTVEFHSU5HX0RJUl9IT1NUfSR7cHJlZml4fSBcCi0JCS0tZW5hYmxlLWFzcGVsbCBicl9jdl9iaW5yZWxvYz1ubyBcCi0JCSIKK1BBQ0tBR0VDT05GSUcgPz89ICJhc3BlbGwiCitQQUNLQUdFQ09ORklHW2FzcGVsbF0gID0gIiAtLXdpdGgtYXNwZWxsLXByZWZpeD0ke1NUQUdJTkdfRElSX0hPU1R9JHtwcmVmaXh9ICAtLWVuYWJsZS1hc3BlbGwsICAtLWRpc2FibGUtYXNwZWxsLCAgYXNwZWxsLCAgYXNwZWxsIgorUEFDS0FHRUNPTkZJR1tpc3BlbGxdICA9ICIgLS13aXRoLWlzcGVsbC1wcmVmaXg9JHtTVEFHSU5HX0RJUl9IT1NUfSR7cHJlZml4fSAgLS1lbmFibGUtaXNwZWxsLCAgLS1kaXNhYmxlLWlzcGVsbCwgIGlzcGVsbCwgIGlzcGVsbCIKK1BBQ0tBR0VDT05GSUdbdXNwZWxsXSAgPSAiIC0td2l0aC11c3BlbGwtcHJlZml4PSR7U1RBR0lOR19ESVJfSE9TVH0ke3ByZWZpeH0gIC0tZW5hYmxlLXVzcGVsbCwgIC0tZGlzYWJsZS11c3BlbGwsICB1c3BlbGwsICB1c3BlbGwiCitQQUNLQUdFQ09ORklHW2hzcGVsbF0gID0gIiAtLXdpdGgtaHNwZWxsLXByZWZpeD0ke1NUQUdJTkdfRElSX0hPU1R9JHtwcmVmaXh9ICAtLWVuYWJsZS1oc3BlbGwsICAtLWRpc2FibGUtaHNwZWxsLCAgaHNwZWxsLCAgaHNwZWxsIgorUEFDS0FHRUNPTkZJR1tteXNwZWxsXSA9ICItLXdpdGgtbXlzcGVsbC1wcmVmaXg9JHtTVEFHSU5HX0RJUl9IT1NUfSR7cHJlZml4fSAtLWVuYWJsZS1teXNwZWxsLCAtLWRpc2FibGUtbXlzcGVsbCwgbXlzcGVsbCwgbXlzcGVsbCIKKworRVhUUkFfT0VDT05GID0gImJyX2N2X2JpbnJlbG9jPW5vIgogCiBleHBvcnQgQ1hYRkxBR1MgKz0gIiAtTCR7U1RBR0lOR19MSUJESVJ9IC1sc3RkYysrICIKIAogRklMRVNfJHtQTn0gPSAiJHtiaW5kaXJ9ICR7bGliZGlyfS8qJHtTT0xJQlN9ICR7ZGF0YWRpcn0vJHtCUE59ICR7bGliZGlyfS8ke0JQTn0vKi5zbyIKIEZJTEVTXyR7UE59LWRldiArPSAiJHtsaWJkaXJ9LyR7QlBOfS8qe1NPTElCU0RFVn0gJHtsaWJkaXJ9LyR7QlBOfS8qLmxhIgogRklMRVNfJHtQTn0tc3RhdGljZGV2ICs9ICIke2xpYmRpcn0vJHtCUE59LyouYSIKLQotUkRFUEVORFNfJHtQTn0gKz0gImFzcGVsbCIKLQpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2dkYm0vZ2RibV8xLjExLmJiIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2dkYm0vZ2RibV8xLjExLmJiCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhZGY4YzViLi4wMDAwMDAwCi0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9nZGJtL2dkYm1fMS4xMS5iYgorKysgL2Rldi9udWxsCkBAIC0xLDQzICswLDAgQEAKLVNVTU1BUlkgPSAiS2V5L3ZhbHVlIGRhdGFiYXNlIGxpYnJhcnkgd2l0aCBleHRlbnNpYmxlIGhhc2hpbmciCi1IT01FUEFHRSA9ICJodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvZ2RibS8iCi1TRUNUSU9OID0gImxpYnMiCi1MSUNFTlNFID0gIkdQTHYzIgotTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9MjQxZGExYjlmZTQyZTY0MmNiYjJjMjRkNWUwYzRkMjQiCi0KLQotU1JDX1VSSSA9ICIke0dOVV9NSVJST1J9L2dkYm0vZ2RibS0ke1BWfS50YXIuZ3ogXAotICAgICAgICAgICBmaWxlOi8vcnVuLXB0ZXN0IFwKLSAgICAgICAgICAgZmlsZTovL3B0ZXN0LnBhdGNoIFwKLSAgICAgICAgICAiCi0KLVNSQ19VUklbbWQ1c3VtXSA9ICI3MmM4MzI2ODBjZjA5OTljYWVkYmU1YjI2NWM4YzFiZCIKLVNSQ19VUklbc2hhMjU2c3VtXSA9ICI4ZDkxMmY0NGYwNWQwYjE1YTRhNWQ5NmE3NmY4NTJlOTA1ZDA1MWJiODgwMjJmY2RmZDk4YjQzYmUwOTNlM2MzIgotCi1pbmhlcml0IGF1dG90b29scyBnZXR0ZXh0IHRleGluZm8gbGliX3BhY2thZ2UgcHRlc3QKLQotIyBOZWVkZWQgZm9yIGRibSBweXRob24gbW9kdWxlCi1FWFRSQV9PRUNPTkYgPSAiLWVuYWJsZS1saWJnZGJtLWNvbXBhdCIKLQotIyBTdG9wIHByZXNlbmNlIG9mIGRibS9uYmRtIG9uIHRoZSBob3N0IGNvbnRhbWluYXRpbmcgYnVpbGRzCi1DQUNIRURfQ09ORklHVVJFVkFSUyArPSAiYWNfY3ZfbGliX25kYm1fbWFpbj1ubyBhY19jdl9saWJfZGJtX21haW49bm8iCi0KLUJCQ0xBU1NFWFRFTkQgPSAibmF0aXZlIG5hdGl2ZXNkayIKLQotZG9faW5zdGFsbF9hcHBlbmQgKCkgewotICAgICMgQ3JlYXRlIGEgc3ltbGluayB0byBuZGJtLmggYW5kIGdkYm0uaCBpbiBpbmNsdWRlL2dkYm0gdG8gbGV0IG90aGVyIHBhY2thZ2VzIHRvIGZpbmQKLSAgICAjIHRoZXNlIGhlYWRlcnMKLSAgICBpbnN0YWxsIC1kICR7RH0ke2luY2x1ZGVkaXJ9L2dkYm0KLSAgICBsbiAtc2YgLi4vbmRibS5oICR7RH0vJHtpbmNsdWRlZGlyfS9nZGJtL25kYm0uaAotICAgIGxuIC1zZiAuLi9nZGJtLmggJHtEfS8ke2luY2x1ZGVkaXJ9L2dkYm0vZ2RibS5oCi19Ci0KLVJERVBFTkRTXyR7UE59LXB0ZXN0ICs9ICJkaWZmdXRpbHMiCi0KLWRvX2NvbXBpbGVfcHRlc3QoKSB7Ci0gICAgb2VfcnVubWFrZSAtQyB0ZXN0cyBidWlsZHRlc3RzCi19Ci0KLVBBQ0tBR0VTID0rICIke1BOfS1jb21wYXQgXAotICAgICAgICAgICAgIgotRklMRVNfJHtQTn0tY29tcGF0ID0gIiR7bGliZGlyfS9saWJnZGJtX2NvbXBhdCR7U09MSUJTfSBcCi0gICAgICAgICAgICAgICAgICAgICAiCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvZ2RibS9nZGJtXzEuMTIuYmIgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvZ2RibS9nZGJtXzEuMTIuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzM4MDA3MwotLS0gL2Rldi9udWxsCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9nZGJtL2dkYm1fMS4xMi5iYgpAQCAtMCwwICsxLDQzIEBACitTVU1NQVJZID0gIktleS92YWx1ZSBkYXRhYmFzZSBsaWJyYXJ5IHdpdGggZXh0ZW5zaWJsZSBoYXNoaW5nIgorSE9NRVBBR0UgPSAiaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL2dkYm0vIgorU0VDVElPTiA9ICJsaWJzIgorTElDRU5TRSA9ICJHUEx2MyIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PTI0MWRhMWI5ZmU0MmU2NDJjYmIyYzI0ZDVlMGM0ZDI0IgorCisKK1NSQ19VUkkgPSAiJHtHTlVfTUlSUk9SfS9nZGJtL2dkYm0tJHtQVn0udGFyLmd6IFwKKyAgICAgICAgICAgZmlsZTovL3J1bi1wdGVzdCBcCisgICAgICAgICAgIGZpbGU6Ly9wdGVzdC5wYXRjaCBcCisgICAgICAgICAgIgorCitTUkNfVVJJW21kNXN1bV0gPSAiOWNlOTZmZjRjOTllNzQyOTVlYTE5MDQwOTMxYzhmYjkiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiZDk3YjIxNjZlZTg2N2ZkNmNhNWMwMjJlZmVlODA3MDJkNmYzMGRkNjZhZjBlMDNlZDA5MjI4NWMzYWY5YmNlYSIKKworaW5oZXJpdCBhdXRvdG9vbHMgZ2V0dGV4dCB0ZXhpbmZvIGxpYl9wYWNrYWdlIHB0ZXN0CisKKyMgTmVlZGVkIGZvciBkYm0gcHl0aG9uIG1vZHVsZQorRVhUUkFfT0VDT05GID0gIi1lbmFibGUtbGliZ2RibS1jb21wYXQiCisKKyMgU3RvcCBwcmVzZW5jZSBvZiBkYm0vbmJkbSBvbiB0aGUgaG9zdCBjb250YW1pbmF0aW5nIGJ1aWxkcworQ0FDSEVEX0NPTkZJR1VSRVZBUlMgKz0gImFjX2N2X2xpYl9uZGJtX21haW49bm8gYWNfY3ZfbGliX2RibV9tYWluPW5vIgorCitCQkNMQVNTRVhURU5EID0gIm5hdGl2ZSBuYXRpdmVzZGsiCisKK2RvX2luc3RhbGxfYXBwZW5kICgpIHsKKyAgICAjIENyZWF0ZSBhIHN5bWxpbmsgdG8gbmRibS5oIGFuZCBnZGJtLmggaW4gaW5jbHVkZS9nZGJtIHRvIGxldCBvdGhlciBwYWNrYWdlcyB0byBmaW5kCisgICAgIyB0aGVzZSBoZWFkZXJzCisgICAgaW5zdGFsbCAtZCAke0R9JHtpbmNsdWRlZGlyfS9nZGJtCisgICAgbG4gLXNmIC4uL25kYm0uaCAke0R9LyR7aW5jbHVkZWRpcn0vZ2RibS9uZGJtLmgKKyAgICBsbiAtc2YgLi4vZ2RibS5oICR7RH0vJHtpbmNsdWRlZGlyfS9nZGJtL2dkYm0uaAorfQorCitSREVQRU5EU18ke1BOfS1wdGVzdCArPSAiZGlmZnV0aWxzIgorCitkb19jb21waWxlX3B0ZXN0KCkgeworICAgIG9lX3J1bm1ha2UgLUMgdGVzdHMgYnVpbGR0ZXN0cworfQorCitQQUNLQUdFUyA9KyAiJHtQTn0tY29tcGF0IFwKKyAgICAgICAgICAgICIKK0ZJTEVTXyR7UE59LWNvbXBhdCA9ICIke2xpYmRpcn0vbGliZ2RibV9jb21wYXQke1NPTElCU30gXAorICAgICAgICAgICAgICAgICAgICAgIgpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2dtcC9nbXAtNC4yLjEvZ21wX2ZpeF9mb3JfYXV0b21ha2UtMS4xMi5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9nbXAvZ21wLTQuMi4xL2dtcF9maXhfZm9yX2F1dG9tYWtlLTEuMTIucGF0Y2gKaW5kZXggNjNhZWQwNS4uMjZmZDhlZiAxMDA2NDQKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2dtcC9nbXAtNC4yLjEvZ21wX2ZpeF9mb3JfYXV0b21ha2UtMS4xMi5wYXRjaAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvZ21wL2dtcC00LjIuMS9nbXBfZml4X2Zvcl9hdXRvbWFrZS0xLjEyLnBhdGNoCkBAIC01LDcgKzUsNyBAQAogfCBjb25maWd1cmUuaW46MjI0MDogZXJyb3I6IGF1dG9tYXRpYyBkZS1BTlNJLWZpY2F0aW9uIHN1cHBvcnQgaGFzIGJlZW4gcmVtb3ZlZAogfCBNYWtlZmlsZS5hbToyODogZXJyb3I6IGF1dG9tYXRpYyBkZS1BTlNJLWZpY2F0aW9uIHN1cHBvcnQgaGFzIGJlZW4gcmVtb3ZlZAogCi1TaWduZWQtT2ZmLUJ5OiBOaXRpbiBBIEthbWJsZSA8bml0aW4uYS5rYW1ibGVAaW50ZWwuY29tPgorU2lnbmVkLW9mZi1ieTogTml0aW4gQSBLYW1ibGUgPG5pdGluLmEua2FtYmxlQGludGVsLmNvbT4KIDIwMTIvMDUvMDIKIAogCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvZ21wL2dtcC02LjEuMC8wMDAxLUFwcGVuZC10aGUtdXNlci1wcm92aWRlZC1mbGFncy10by10aGUtYXV0by1kZXRlY3RlZC0ucGF0Y2ggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvZ21wL2dtcC02LjEuMS8wMDAxLUFwcGVuZC10aGUtdXNlci1wcm92aWRlZC1mbGFncy10by10aGUtYXV0by1kZXRlY3RlZC0ucGF0Y2gKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9nbXAvZ21wLTYuMS4wLzAwMDEtQXBwZW5kLXRoZS11c2VyLXByb3ZpZGVkLWZsYWdzLXRvLXRoZS1hdXRvLWRldGVjdGVkLS5wYXRjaApyZW5hbWUgdG8gaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2dtcC9nbXAtNi4xLjEvMDAwMS1BcHBlbmQtdGhlLXVzZXItcHJvdmlkZWQtZmxhZ3MtdG8tdGhlLWF1dG8tZGV0ZWN0ZWQtLnBhdGNoCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvZ21wL2dtcC02LjEuMS8wMDAxLWNvbmZpdXJlLmFjLUJlbGlldmUtdGhlLWNmbGFncy1mcm9tLWVudmlyb25tZW50LnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2dtcC9nbXAtNi4xLjEvMDAwMS1jb25maXVyZS5hYy1CZWxpZXZlLXRoZS1jZmxhZ3MtZnJvbS1lbnZpcm9ubWVudC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42NjUzNjc2Ci0tLSAvZGV2L251bGwKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2dtcC9nbXAtNi4xLjEvMDAwMS1jb25maXVyZS5hYy1CZWxpZXZlLXRoZS1jZmxhZ3MtZnJvbS1lbnZpcm9ubWVudC5wYXRjaApAQCAtMCwwICsxLDUyIEBACitGcm9tIGFlMWE0YzM3NDE3YTNiYmJmOGVhMWNhYjE5ODk4MmIwY2FkNDdlMjkgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorRGF0ZTogRnJpLCAxMiBBdWcgMjAxNiAxNzowODoxMyArMDAwMAorU3ViamVjdDogW1BBVENIXSBjb25maXVyZS5hYzogQmVsaWV2ZSB0aGUgY2ZsYWdzIGZyb20gZW52aXJvbm1lbnQKKworSW4gc29tZSB0b29sY2hhaW5zIGUuZy4gT3BlbkVtYmVkZGVkIC1tYXJjaCBvcHRpb25zCithcmUgcGFzc2VkIG9uIGNvbXBpbGVyIGNtZGxpbmUsIGl0IGRvZXMgbm90IHVzZQordGhlIGV4cGVjdGVkIHRhcmdldCB0cmlwbGV0cyB0byBtYWtlIHRoZXNlIGRlY2lzaW9uCitkdXJpbmcgY29uZmlndXJlLgorCitTZWNvbmRseSwgZG9udCBzZXQgYXJtdjQgZm9yIG1hcmNoIHdoZW4gbm8gc2VsZWN0aW9uCitpcyBtYWRlLCBzaW5jZSBpdCBpcyBwYXNzZWQgZnJvbSBjbWRsaW5lCisKK1NpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CistLS0KK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZVtPRS1TcGVjaWZpY10KKworIGNvbmZpZ3VyZS5hYyB8IDExIC0tLS0tLS0tLS0tCisgMSBmaWxlIGNoYW5nZWQsIDExIGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvY29uZmlndXJlLmFjIGIvY29uZmlndXJlLmFjCitpbmRleCA4NTdlYTNiLi4zNTllOTE5IDEwMDY0NAorLS0tIGEvY29uZmlndXJlLmFjCisrKysgYi9jb25maWd1cmUuYWMKK0BAIC02MDcsMTUgKzYwNyw2IEBAIGNhc2UgJGhvc3QgaW4KKyAgICAgR01QX0lOQ0xVREVfTVBOKGFybS9hcm0tZGVmcy5tNCkKKyAgICAgQ0FMTElOR19DT05WRU5USU9OU19PQkpTPSdhcm0zMmNhbGwubG8gYXJtMzJjaGVjay5sbycKKyAKKy0gICAgIyBUaGlzIGlzIG5lZWRlZCBmb3IgY2xhbmcsIHdoaWNoIGlzIG5vdCBjb250ZW50IHdpdGggZmxhZ3MgbGlrZSAtbWZwdT1uZW9uCistICAgICMgYWxvbmUuCistICAgIGNhc2UgJGhvc3QgaW4KKy0gICAgICAqLSotKmVhYmkpCistICAgICAgICBnY2NfY2ZsYWdzX2ZwbW9kZT0iLW1mbG9hdC1hYmk9c29mdGZwIiA7OworLSAgICAgICotKi0qZWFiaWhmKQorLSAgICAgICAgZ2NjX2NmbGFnc19mcG1vZGU9Ii1tZmxvYXQtYWJpPWhhcmQiIDs7CistICAgIGVzYWMKKy0KKyAgICAgIyBGSVhNRTogV2UgbWFrZSBtYW5kYXRvcnkgY29tcGlsZXIgb3B0aW9ucyBvcHRpb25hbCBoZXJlLiAgV2Ugc2hvdWxkCisgICAgICMgZWl0aGVyIGVuZm9yY2UgdGhlbSwgb3Igb3JnYW5pc2UgdG8gc3RyaXAgcGF0aHMgYXMgdGhlIGNvcnJlc3BvbmRpbmcKKyAgICAgIyBvcHRpb25zIGZhaWwuCitAQCAtNjg2LDggKzY3Nyw2IEBAIGNhc2UgJGhvc3QgaW4KKyAJOzsKKyAgICAgICAqKQorIAlwYXRoPSJhcm0iCistCWdjY19jZmxhZ3NfYXJjaD0iLW1hcmNoPWFybXY0IgorLQlHTVBfREVGSU5FX1JBVyhbImRlZmluZSg8Tk9USFVNQj4sMSkiXSkKKyAJOzsKKyAgICAgZXNhYworICAgICA7OworLS0gCisxLjkuMQorCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvZ21wL2dtcC02LjEuMC9hbWQ2NC5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9nbXAvZ21wLTYuMS4xL2FtZDY0LnBhdGNoCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvZ21wL2dtcC02LjEuMC9hbWQ2NC5wYXRjaApyZW5hbWUgdG8gaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2dtcC9nbXAtNi4xLjEvYW1kNjQucGF0Y2gKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9nbXAvZ21wLTYuMS4wL3VzZS1pbmNsdWRlZGlyLnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2dtcC9nbXAtNi4xLjEvdXNlLWluY2x1ZGVkaXIucGF0Y2gKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9nbXAvZ21wLTYuMS4wL3VzZS1pbmNsdWRlZGlyLnBhdGNoCnJlbmFtZSB0byBpbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvZ21wL2dtcC02LjEuMS91c2UtaW5jbHVkZWRpci5wYXRjaApkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2dtcC9nbXBfNi4xLjAuYmIgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvZ21wL2dtcF82LjEuMC5iYgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZGU4MjdmNS4uMDAwMDAwMAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvZ21wL2dtcF82LjEuMC5iYgorKysgL2Rldi9udWxsCkBAIC0xLDMzICswLDAgQEAKLXJlcXVpcmUgZ21wLmluYwotCi1MSUNFTlNFID0gIkdQTHYyKyB8IExHUEx2MysiCi0KLUxJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PWQzMjIzOWJjYjY3MzQ2M2FiODc0ZTgwZDQ3ZmFlNTA0IFwKLSAgICAgICAgICAgICAgICAgICBmaWxlOi8vQ09QWUlORy5MRVNTRVJ2MzttZDU9NmE2YThlMDIwODM4YjIzNDA2YzgxYjE5YzFkNDZkZjYgXAotICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9DT1BZSU5HdjI7bWQ1PWIyMzRlZTRkNjlmNWZjZTQ0ODZhODBmZGFmNGE0MjYzIFwKLSIKLQotUkVWSVNJT04gPSAiIgotU1JDX1VSSSA9ICJodHRwczovL2dtcGxpYi5vcmcvZG93bmxvYWQvJHtCUE59LyR7QlB9JHtSRVZJU0lPTn0udGFyLmJ6MiBcCi0gICAgICAgICAgIGZpbGU6Ly9hbWQ2NC5wYXRjaCBcCi0gICAgICAgICAgIGZpbGU6Ly91c2UtaW5jbHVkZWRpci5wYXRjaCBcCi0gICAgICAgICAgIGZpbGU6Ly8wMDAxLUFwcGVuZC10aGUtdXNlci1wcm92aWRlZC1mbGFncy10by10aGUtYXV0by1kZXRlY3RlZC0ucGF0Y2ggXAotICAgICAgICAgICAiCi0KLVNSQ19VUklbbWQ1c3VtXSA9ICI4NmVlNmU1NGViZmM0YTkwYjY0M2E2NWU0MDJjNDA0OCIKLVNSQ19VUklbc2hhMjU2c3VtXSA9ICI0OTg0NDlhOTk0ZWZlYmE1Mjc4ODVjMTA0MDU5OTM0Mjc5OTVkM2Y4NmI4NzY4ZDhjZGY4ZDlkZDdjNmI3M2U4IgotCi1hY3BhdGhzID0gIiIKLQotRVhUUkFfT0VDT05GICs9ICIgLS1lbmFibGUtY3h4PWRldGVjdCIKLQotUEFDS0FHRVMgPSsgImxpYmdtcHh4IgotRklMRVNfbGliZ21weHggPSAiJHtsaWJkaXJ9L2xpYmdtcHh4JHtTT0xJQlN9IgotCi1kb19pbnN0YWxsX2FwcGVuZF9jbGFzcy10YXJnZXQoKSB7Ci0gICAgICAgIHNlZCAtaSAic3wtLXN5c3Jvb3Q9JHtTVEFHSU5HX0RJUl9IT1NUfXx8ZyIgJHtEfSR7aW5jbHVkZWRpcn0vZ21wLmgKLX0KLQotU1NUQVRFX1NDQU5fRklMRVMgKz0gImdtcC5oIgotCi1CQkNMQVNTRVhURU5EID0gIm5hdGl2ZSBuYXRpdmVzZGsiCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvZ21wL2dtcF82LjEuMS5iYiBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9nbXAvZ21wXzYuMS4xLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMwM2MzZWYKLS0tIC9kZXYvbnVsbAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvZ21wL2dtcF82LjEuMS5iYgpAQCAtMCwwICsxLDM4IEBACityZXF1aXJlIGdtcC5pbmMKKworTElDRU5TRSA9ICJHUEx2MisgfCBMR1BMdjMrIgorCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT1kMzIyMzliY2I2NzM0NjNhYjg3NGU4MGQ0N2ZhZTUwNCBcCisgICAgICAgICAgICAgICAgICAgZmlsZTovL0NPUFlJTkcuTEVTU0VSdjM7bWQ1PTZhNmE4ZTAyMDgzOGIyMzQwNmM4MWIxOWMxZDQ2ZGY2IFwKKyAgICAgICAgICAgICAgICAgICBmaWxlOi8vQ09QWUlOR3YyO21kNT1iMjM0ZWU0ZDY5ZjVmY2U0NDg2YTgwZmRhZjRhNDI2MyBcCisiCisKK1JFVklTSU9OID0gIiIKK1NSQ19VUkkgPSAiaHR0cHM6Ly9nbXBsaWIub3JnL2Rvd25sb2FkLyR7QlBOfS8ke0JQfSR7UkVWSVNJT059LnRhci5iejIgXAorICAgICAgICAgICBmaWxlOi8vYW1kNjQucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vdXNlLWluY2x1ZGVkaXIucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vMDAwMS1BcHBlbmQtdGhlLXVzZXItcHJvdmlkZWQtZmxhZ3MtdG8tdGhlLWF1dG8tZGV0ZWN0ZWQtLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovLzAwMDEtY29uZml1cmUuYWMtQmVsaWV2ZS10aGUtY2ZsYWdzLWZyb20tZW52aXJvbm1lbnQucGF0Y2ggXAorICAgICAgICAgICAiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICI0YzE3NWY4NmUxMWViMzJkOGJmOTg3MmNhM2E4ZTExZCIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICJhODEwOTg2NWYyODkzZjEzNzNiMGE4ZWQ1ZmY3NDI5ZGU4ZGI2OTZmYzQ1MWIxMDM2YmQ3YmRmOTViYmVmZmQ2IgorCithY3BhdGhzID0gIiIKKworRVhUUkFfT0VDT05GICs9ICIgLS1lbmFibGUtY3h4PWRldGVjdCIKKworUEFDS0FHRVMgPSsgImxpYmdtcHh4IgorRklMRVNfbGliZ21weHggPSAiJHtsaWJkaXJ9L2xpYmdtcHh4JHtTT0xJQlN9IgorCitkb19pbnN0YWxsX2FwcGVuZF9jbGFzcy10YXJnZXQoKSB7CisgICAgICAgIHNlZCAtaSAic3wtLXN5c3Jvb3Q9JHtTVEFHSU5HX0RJUl9IT1NUfXx8ZyIgJHtEfSR7aW5jbHVkZWRpcn0vZ21wLmgKK30KKworU1NUQVRFX1NDQU5fRklMRVMgKz0gImdtcC5oIgorCisjIERvZXNuJ3QgY29tcGlsZSBpbiBNSVBTMTZlIG1vZGUgZHVlIHRvIHVzZSBvZiBoYW5kLXdyaXR0ZW4KKyMgYXNzZW1ibHkKK01JUFNfSU5TVFJVQ1RJT05fU0VUID0gIm1pcHMiCisKK0JCQ0xBU1NFWFRFTkQgPSAibmF0aXZlIG5hdGl2ZXNkayIKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9nbnVwZy9nbnVwZ18xLjQuNy5iYiBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9nbnVwZy9nbnVwZ18xLjQuNy5iYgppbmRleCBiNGNjYmZlLi42Y2NmZmQ1IDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvZ251cGcvZ251cGdfMS40LjcuYmIKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2dudXBnL2dudXBnXzEuNC43LmJiCkBAIC05LDcgKzksNyBAQAogCiBQUiA9ICJyOSIKIAotU1JDX1VSSSA9ICJmdHA6Ly9mdHAuZ251cGcub3JnL2djcnlwdC9nbnVwZy9nbnVwZy0ke1BWfS50YXIuYnoyIFwKK1NSQ19VUkkgPSAiJHtHTlVQR19NSVJST1J9L2dudXBnL2dudXBnLSR7UFZ9LnRhci5iejIgXAogICAgICAgICAgICBmaWxlOi8vbG9uZy1sb25nLXRodW1iLnBhdGNoIFwKICAgICAgICAgICAgZmlsZTovL2NvbmZpZ3VyZS5wYXRjaCBcCiAgICAgICAgICAgIGZpbGU6Ly9taXBzX2djYzQuNC5wYXRjaCBcCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvZ251cGcvZ251cGdfMi4xLjExLmJiIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2dudXBnL2dudXBnXzIuMS4xMS5iYgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOGUyMTg5Yi4uMDAwMDAwMAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvZ251cGcvZ251cGdfMi4xLjExLmJiCisrKyAvZGV2L251bGwKQEAgLTEsNDUgKzAsMCBAQAotU1VNTUFSWSA9ICJHTlUgUHJpdmFjeSBHdWFyZCAtIGVuY3J5cHRpb24gYW5kIHNpZ25pbmcgdG9vbHMgKDIueCkiCi1IT01FUEFHRSA9ICJodHRwOi8vd3d3LmdudXBnLm9yZy8iCi1MSUNFTlNFID0gIkdQTHYzICYgTEdQTHYzIgotTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9ZjI3ZGVmZTFlOTZjMmUxZWNkNGUwYzliZTg5Njc5NDkgXAotICAgICAgICAgICAgICAgICAgICBmaWxlOi8vQ09QWUlORy5MSUI7bWQ1PTZhNmE4ZTAyMDgzOGIyMzQwNmM4MWIxOWMxZDQ2ZGY2IgotCi1ERVBFTkRTID0gIm5wdGggbGliYXNzdWFuIGxpYmtzYmEgemxpYiBiemlwMiByZWFkbGluZSBsaWJnY3J5cHQiCi0KLWluaGVyaXQgYXV0b3Rvb2xzIGdldHRleHQgdGV4aW5mbyBwa2djb25maWcKLQotU1JDX1VSSSA9ICJmdHA6Ly9mdHAuZ251cGcub3JnL2djcnlwdC8ke0JQTn0vJHtCUE59LSR7UFZ9LnRhci5iejIgXAotICAgICAgICAgICBmaWxlOi8vcGtnY29uZmlnLnBhdGNoIFwKLSAgICAgICAgICAgZmlsZTovL3VzZS1wa2djb25maWctaW5zdGVhZC1vZi1ucHRoLWNvbmZpZy5wYXRjaCBcCi0gICAgICAgICAgIGZpbGU6Ly9kaXJtbmdyLXVzZXMtbGliZ3BnLWVycm9yLnBhdGNoIFwKLSAgICAgICAgICAgZmlsZTovL2F1dG9nZW4uc2gtZml4LWZpbmQtdmVyc2lvbi1mb3ItYmV0YS1jaGVja2luZy5wYXRjaCBcCi0gICAgICAgICAgIgotCi1TUkNfVVJJW21kNXN1bV0gPSAiODczMzAyYzQ3NWM0YzkwYmFkYjY3ZGFhYzkwZWJkNWQiCi1TUkNfVVJJW3NoYTI1NnN1bV0gPSAiYjdiMGZiMmM4YzVkNDdkN2VjOTE2ZDRhMTA5N2MwZGRjYjk0YTEyYmIxYzBhYzQyNGFkODZiMWVlMzE2YjYxYSIKLQotRVhUUkFfT0VDT05GID0gIi0tZGlzYWJsZS1sZGFwIFwKLQkJLS1kaXNhYmxlLWNjaWQtZHJpdmVyIFwKLQkJLS13aXRoLXpsaWI9JHtTVEFHSU5HX0xJQkRJUn0vLi4gXAotCQktLXdpdGgtYnppcDI9JHtTVEFHSU5HX0xJQkRJUn0vLi4gXAotICAgICAgICAgICAgICAgIC0td2l0aC1yZWFkbGluZT0ke1NUQUdJTkdfTElCRElSfS8uLiBcCi0gICAgICAgICAgICAgICAiCi1SUkVDT01NRU5EU18ke1BOfSA9ICJwaW5lbnRyeSIKLQotZG9fY29uZmlndXJlX3ByZXBlbmQgKCkgewotCSMgRWxzZSB0aGVzZSBjb3VsZCBiZSB1c2VkIGluIHByZWZlcm5jZSB0byB0aG9zZSBpbiBhY2xvY2FsLWNvcHkKLQlybSAtZiAke1N9L200L2dwZy1lcnJvci5tNAotCXJtIC1mICR7U30vbTQvbGliYXNzdWFuLm00Ci0Jcm0gLWYgJHtTfS9tNC9rc2JhLm00Ci0Jcm0gLWYgJHtTfS9tNC9saWJnY3J5cHQubTQKLX0KLQotZG9faW5zdGFsbF9hcHBlbmQoKSB7Ci0JbG4gLXNmIGdwZzIgJHtEfSR7YmluZGlyfS9ncGcKLQlsbiAtc2YgZ3BndjIgJHtEfSR7YmluZGlyfS9ncGd2Ci19Ci0KLVJERVBFTkRTXyR7UE59ID0gImdudXRscyIKLQotUEFDS0FHRUNPTkZJRyA/Pz0gIiIKLVBBQ0tBR0VDT05GSUdbc3FsaXRlM10gPSAiLS1lbmFibGUtc3FsaXRlLCAtLWRpc2FibGUtc3FsaXRlLCBzcWxpdGUzIgpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2dudXBnL2dudXBnXzIuMS4xNC5iYiBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9nbnVwZy9nbnVwZ18yLjEuMTQuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWVhOWI5NgotLS0gL2Rldi9udWxsCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9nbnVwZy9nbnVwZ18yLjEuMTQuYmIKQEAgLTAsMCArMSw0NiBAQAorU1VNTUFSWSA9ICJHTlUgUHJpdmFjeSBHdWFyZCAtIGVuY3J5cHRpb24gYW5kIHNpZ25pbmcgdG9vbHMgKDIueCkiCitIT01FUEFHRSA9ICJodHRwOi8vd3d3LmdudXBnLm9yZy8iCitMSUNFTlNFID0gIkdQTHYzICYgTEdQTHYzIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9ZjI3ZGVmZTFlOTZjMmUxZWNkNGUwYzliZTg5Njc5NDkgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vQ09QWUlORy5MSUI7bWQ1PTZhNmE4ZTAyMDgzOGIyMzQwNmM4MWIxOWMxZDQ2ZGY2IgorCitERVBFTkRTID0gIm5wdGggbGliYXNzdWFuIGxpYmtzYmEgemxpYiBiemlwMiByZWFkbGluZSBsaWJnY3J5cHQiCisKK2luaGVyaXQgYXV0b3Rvb2xzIGdldHRleHQgdGV4aW5mbyBwa2djb25maWcKKworVVBTVFJFQU1fQ0hFQ0tfVVJJID0gImh0dHBzOi8vZ251cGcub3JnL2Rvd25sb2FkL2luZGV4Lmh0bWwiCitTUkNfVVJJID0gIiR7R05VUEdfTUlSUk9SfS8ke0JQTn0vJHtCUE59LSR7UFZ9LnRhci5iejIgXAorICAgICAgICAgICBmaWxlOi8vcGtnY29uZmlnLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL3VzZS1wa2djb25maWctaW5zdGVhZC1vZi1ucHRoLWNvbmZpZy5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9kaXJtbmdyLXVzZXMtbGliZ3BnLWVycm9yLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL2F1dG9nZW4uc2gtZml4LWZpbmQtdmVyc2lvbi1mb3ItYmV0YS1jaGVja2luZy5wYXRjaCBcCisgICAgICAgICAgIgorCitTUkNfVVJJW21kNXN1bV0gPSAiNDZjZjBhNDJmZmFkNmMyNjE1Y2FmZDYzMzU4MGIyZGUiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiOTQ1MGRlZTk2OTNiNmExMmJmMGMzNzRkYWU3N2I2NmMzMGY2OWZmOGYzNWZjOTI2NmFiOGRkNzY5OThlYmE0MiIKKworRVhUUkFfT0VDT05GID0gIi0tZGlzYWJsZS1sZGFwIFwKKwkJLS1kaXNhYmxlLWNjaWQtZHJpdmVyIFwKKwkJLS13aXRoLXpsaWI9JHtTVEFHSU5HX0xJQkRJUn0vLi4gXAorCQktLXdpdGgtYnppcDI9JHtTVEFHSU5HX0xJQkRJUn0vLi4gXAorICAgICAgICAgICAgICAgIC0td2l0aC1yZWFkbGluZT0ke1NUQUdJTkdfTElCRElSfS8uLiBcCisgICAgICAgICAgICAgICAiCitSUkVDT01NRU5EU18ke1BOfSA9ICJwaW5lbnRyeSIKKworZG9fY29uZmlndXJlX3ByZXBlbmQgKCkgeworCSMgRWxzZSB0aGVzZSBjb3VsZCBiZSB1c2VkIGluIHByZWZlcm5jZSB0byB0aG9zZSBpbiBhY2xvY2FsLWNvcHkKKwlybSAtZiAke1N9L200L2dwZy1lcnJvci5tNAorCXJtIC1mICR7U30vbTQvbGliYXNzdWFuLm00CisJcm0gLWYgJHtTfS9tNC9rc2JhLm00CisJcm0gLWYgJHtTfS9tNC9saWJnY3J5cHQubTQKK30KKworZG9faW5zdGFsbF9hcHBlbmQoKSB7CisJbG4gLXNmIGdwZzIgJHtEfSR7YmluZGlyfS9ncGcKKwlsbiAtc2YgZ3BndjIgJHtEfSR7YmluZGlyfS9ncGd2Cit9CisKK1JERVBFTkRTXyR7UE59ID0gImdudXRscyIKKworUEFDS0FHRUNPTkZJRyA/Pz0gIiIKK1BBQ0tBR0VDT05GSUdbc3FsaXRlM10gPSAiLS1lbmFibGUtc3FsaXRlLCAtLWRpc2FibGUtc3FsaXRlLCBzcWxpdGUzIgpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2dudXRscy9nbnV0bHMuaW5jIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2dudXRscy9nbnV0bHMuaW5jCmluZGV4IGU3YzkxZWIuLjUxYjlkMmIgMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9nbnV0bHMvZ251dGxzLmluYworKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvZ251dGxzL2dudXRscy5pbmMKQEAgLTgsOCArOCw5IEBACiBMSUNFTlNFXyR7UE59LWJpbiA9ICJHUEx2MysiCiBMSUNFTlNFXyR7UE59LW9wZW5zc2wgPSAiR1BMdjMrIgogCi1MSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT1kMzIyMzliY2I2NzM0NjNhYjg3NGU4MGQ0N2ZhZTUwNCBcCi0gICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9DT1BZSU5HLkxFU1NFUjttZDU9YTZmODllMjEwMGQ5YjZjZGZmY2VhNGYzOThlMzczNDMiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9MSUNFTlNFO21kNT03MTM5MWM4ZTBjMWNmZTY4MDc3ZTdmY2UzYjU4NjI4MyBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9kb2MvQ09QWUlORzttZDU9ZDMyMjM5YmNiNjczNDYzYWI4NzRlODBkNDdmYWU1MDQgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vZG9jL0NPUFlJTkcuTEVTU0VSO21kNT1hNmY4OWUyMTAwZDliNmNkZmZjZWE0ZjM5OGUzNzM0MyIKIAogREVQRU5EUyA9ICJuZXR0bGUgZ21wIHZpcnR1YWwvbGliaWNvbnYiCiBERVBFTkRTX2FwcGVuZF9saWJjLW11c2wgPSAiIGFyZ3Atc3RhbmRhbG9uZSIKQEAgLTE4LDExICsxOSwxMCBAQAogCiBTUkNfVVJJID0gImZ0cDovL2Z0cC5nbnV0bHMub3JnL2djcnlwdC9nbnV0bHMvdiR7U0hSVF9WRVJ9L2dudXRscy0ke1BWfS50YXIueHoiCiAKLWluaGVyaXQgYXV0b3Rvb2xzIHRleGluZm8gYmluY29uZmlnIHBrZ2NvbmZpZyBnZXR0ZXh0IGxpYl9wYWNrYWdlCitpbmhlcml0IGF1dG90b29scyB0ZXhpbmZvIGJpbmNvbmZpZyBwa2djb25maWcgZ2V0dGV4dCBsaWJfcGFja2FnZSBndGstZG9jCiAKIFBBQ0tBR0VDT05GSUcgPz89ICJsaWJpZG4gemxpYiIKIAotUEFDS0FHRUNPTkZJR1tkb2NzXSA9ICItLWVuYWJsZS1kb2MsLS1kaXNhYmxlLWRvYyIKIFBBQ0tBR0VDT05GSUdbbGliaWRuXSA9ICItLXdpdGgtaWRuLC0td2l0aG91dC1pZG4sbGliaWRuIgogUEFDS0FHRUNPTkZJR1tsaWJ0YXNuMV0gPSAiLS13aXRoLWluY2x1ZGVkLWxpYnRhc24xPW5vLC0td2l0aC1pbmNsdWRlZC1saWJ0YXNuMSxsaWJ0YXNuMSIKIFBBQ0tBR0VDT05GSUdbcDExLWtpdF0gPSAiLS13aXRoLXAxMS1raXQsLS13aXRob3V0LXAxMS1raXQscDExLWtpdCIKQEAgLTMwLDcgKzMwLDcgQEAKIFBBQ0tBR0VDT05GSUdbemxpYl0gPSAiLS13aXRoLXpsaWIsLS13aXRob3V0LXpsaWIsemxpYiIKIAogRVhUUkFfT0VDT05GID0gIiBcCi0gICAgLS1kaXNhYmxlLWNyeXdyYXAgXAorICAgIC0tZW5hYmxlLWRvYyBcCiAgICAgLS1kaXNhYmxlLWxpYmRhbmUgXAogICAgIC0tZGlzYWJsZS1ndWlsZSBcCiAgICAgLS1kaXNhYmxlLXJwYXRoIFwKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9nbnV0bHMvZ251dGxzLzAwMDEtVXNlLWNvcnJlY3QtaW5jbHVkZS1kaXItd2l0aC1taW5pdGFzbi5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9nbnV0bHMvZ251dGxzLzAwMDEtVXNlLWNvcnJlY3QtaW5jbHVkZS1kaXItd2l0aC1taW5pdGFzbi5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kN2RkN2NmCi0tLSAvZGV2L251bGwKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2dudXRscy9nbnV0bHMvMDAwMS1Vc2UtY29ycmVjdC1pbmNsdWRlLWRpci13aXRoLW1pbml0YXNuLnBhdGNoCkBAIC0wLDAgKzEsMzEgQEAKK0Zyb20gMjY1MWIwODQ3N2Y0MmRkN2EwNWVhN2Q2ZGY0MTBmYjJjNDZkZTRmYiBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEp1c3NpIEt1a2tvbmVuIDxqdXNzaS5rdWtrb25lbkBpbnRlbC5jb20+CitEYXRlOiBXZWQsIDMxIEF1ZyAyMDE2IDExOjA0OjA2ICswMzAwCitTdWJqZWN0OiBbUEFUQ0hdIFVzZSBjb3JyZWN0IGluY2x1ZGUgZGlyIHdpdGggbWluaXRhc24KK01JTUUtVmVyc2lvbjogMS4wCitDb250ZW50LVR5cGU6IHRleHQvcGxhaW47IGNoYXJzZXQ9VVRGLTgKK0NvbnRlbnQtVHJhbnNmZXItRW5jb2Rpbmc6IDhiaXQKKworVGhpcyBhbGxvd3MgY29tcGlsaW5nwqBjZXJ0dG9vbC1jZmcgd2l0aG91dCBsaWJ0YXNuIGhlYWRlcnMuCisKK1Vwc3RyZWFtLVN0YXR1czogU3VibWl0dGVkIFtodHRwczovL2dpdGxhYi5jb20vZ251dGxzL2dudXRscy9tZXJnZV9yZXF1ZXN0cy81NF0KK1NpZ25lZC1vZmYtYnk6IEp1c3NpIEt1a2tvbmVuIDxqdXNzaS5rdWtrb25lbkBpbnRlbC5jb20+CistLS0KKyBzcmMvTWFrZWZpbGUuYW0gfCAxICsKKyAxIGZpbGUgY2hhbmdlZCwgMSBpbnNlcnRpb24oKykKKworZGlmZiAtLWdpdCBhL3NyYy9NYWtlZmlsZS5hbSBiL3NyYy9NYWtlZmlsZS5hbQoraW5kZXggMTgyZjNhNS4uY2Y2NTM4OCAxMDA2NDQKKy0tLSBhL3NyYy9NYWtlZmlsZS5hbQorKysrIGIvc3JjL01ha2VmaWxlLmFtCitAQCAtMTQ2LDYgKzE0Niw3IEBAIGxpYmNtZF9jbGlfZGVidWdfbGFfU09VUkNFUyA9IGNsaS1kZWJ1Zy1hcmdzLmRlZiBjbGktZGVidWctYXJncy5jIGNsaS1kZWJ1Zy1hcmdzCisgQ09NTU9OX0xJQlMgPSAkKExJQk9QVFMpICQoTFRMSUJJTlRMKQorIGlmIEVOQUJMRV9NSU5JVEFTTjEKKyBDT01NT05fTElCUyArPSAuLi9saWIvbWluaXRhc24xL2xpYm1pbml0YXNuMS5sYSAuLi9nbC9saWJnbnUubGEgCisrQU1fQ1BQRkxBR1MgKz0gLUkkKHRvcF9zcmNkaXIpL2xpYi9taW5pdGFzbjEKKyBlbHNlCisgQ09NTU9OX0xJQlMgKz0gJChMSUJUQVNOMV9MSUJTKQorIGVuZGlmCistLSAKKzIuOS4zCisKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9nbnV0bHMvZ251dGxzL0NWRS0yMDE2LTc0NDQucGF0Y2ggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvZ251dGxzL2dudXRscy9DVkUtMjAxNi03NDQ0LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIxNWJlNWEKLS0tIC9kZXYvbnVsbAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvZ251dGxzL2dudXRscy9DVkUtMjAxNi03NDQ0LnBhdGNoCkBAIC0wLDAgKzEsMzUgQEAKK0NWRTogQ1ZFLTIwMTYtNzQ0NAorVXBzdHJlYW0tU3RhdHVzOiBCYWNrcG9ydAorU2lnbmVkLW9mZi1ieTogSnVzc2kgS3Vra29uZW4gPGp1c3NpLmt1a2tvbmVuQGludGVsLmNvbT4KKworVXBzdHJlYW0gY29tbWl0IGZvbGxvd3M6CisKKworRnJvbSA5NjQ2MzJmMzdkZmRmYjkxNGViYzVlNDlkYjRmYTI5YWYzNWIxZGU5IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogTmlrb3MgTWF2cm9naWFubm9wb3Vsb3MgPG5tYXZAZ251dGxzLm9yZz4KK0RhdGU6IFNhdCwgMjcgQXVnIDIwMTYgMTc6MDA6MjIgKzAyMDAKK1N1YmplY3Q6IFtQQVRDSF0gb2NzcDogY29ycmVjdGVkIHRoZSBjb21wYXJpc29uIG9mIHRoZSBzZXJpYWwgc2l6ZSBpbiBPQ1NQIHJlc3BvbnNlCisKK1ByZXZpb3VzbHkgdGhlIE9DU1AgY2VydGlmaWNhdGUgY2hlY2sgd291bGRuJ3QgdmVyaWZ5IHRoZSBzZXJpYWwgbGVuZ3RoCithbmQgY291bGQgc3VjY2VlZCBpbiBjYXNlcyBpdCBzaG91bGRuJ3QuCisKK1JlcG9ydGVkIGJ5IFN0ZWZhbiBCdWVobGVyLgorLS0tCisgbGliL3g1MDkvb2NzcC5jIHwgMSArCisgMSBmaWxlIGNoYW5nZWQsIDEgaW5zZXJ0aW9uKCspLCAwIGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvbGliL3g1MDkvb2NzcC5jIGIvbGliL3g1MDkvb2NzcC5jCitpbmRleCA5MmRiOWI2Li44MTgxZjJlIDEwMDY0NAorLS0tIGEvbGliL3g1MDkvb2NzcC5jCisrKysgYi9saWIveDUwOS9vY3NwLmMKK0BAIC0xMzE4LDYgKzEzMTgsNyBAQCBnbnV0bHNfb2NzcF9yZXNwX2NoZWNrX2NydChnbnV0bHNfb2NzcF9yZXNwX3QgcmVzcCwKKyAJCWdudXRsc19hc3NlcnQoKTsKKyAJCWdvdG8gY2xlYW51cDsKKyAJfQorKwljc2VyaWFsLnNpemUgPSB0OworIAorIAlpZiAocnNlcmlhbC5zaXplICE9IGNzZXJpYWwuc2l6ZQorIAkgICAgfHwgbWVtY21wKGNzZXJpYWwuZGF0YSwgcnNlcmlhbC5kYXRhLCByc2VyaWFsLnNpemUpICE9IDApIHsKKy0tCitsaWJnaXQyIDAuMjQuMAorCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvZ251dGxzL2dudXRsc18zLjQuOS5iYiBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9nbnV0bHMvZ251dGxzXzMuNC45LmJiCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiNjUyZjZmLi4wMDAwMDAwCi0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9nbnV0bHMvZ251dGxzXzMuNC45LmJiCisrKyAvZGV2L251bGwKQEAgLTEsOCArMCwwIEBACi1yZXF1aXJlIGdudXRscy5pbmMKLQotU1JDX1VSSSArPSAiZmlsZTovL2NvcnJlY3RfcnBsX2dldHRpbWVvZmRheV9zaWduYXR1cmUucGF0Y2ggXAotICAgICAgICAgICAgZmlsZTovLzAwMDEtY29uZmlndXJlLmFjLWZpeC1zZWQtY29tbWFuZC5wYXRjaCBcCi0gICAgICAgICAgICBmaWxlOi8vdXNlLXBrZy1jb25maWctdG8tbG9jYXRlLXpsaWIucGF0Y2ggXAotICAgICAgICAgICAiCi1TUkNfVVJJW21kNXN1bV0gPSAiMWIzYjZkNTVkMGUyYjZkMDFhNTRmNTMxMjlmMWRhOWIiCi1TUkNfVVJJW3NoYTI1NnN1bV0gPSAiNDg1OTRmYWRiYTMzZDQ1MGY3OTZlYzY5NTI2Y2YyYmNlNmZmOWJjM2RjOTBmYmQ3YmYzOGRjMzYwMWY1N2MzZiIKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9nbnV0bHMvZ251dGxzXzMuNS4zLmJiIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2dudXRscy9nbnV0bHNfMy41LjMuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjJkYmIwNwotLS0gL2Rldi9udWxsCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9nbnV0bHMvZ251dGxzXzMuNS4zLmJiCkBAIC0wLDAgKzEsMTMgQEAKK3JlcXVpcmUgZ251dGxzLmluYworCitTUkNfVVJJICs9ICJmaWxlOi8vY29ycmVjdF9ycGxfZ2V0dGltZW9mZGF5X3NpZ25hdHVyZS5wYXRjaCBcCisgICAgICAgICAgICBmaWxlOi8vMDAwMS1jb25maWd1cmUuYWMtZml4LXNlZC1jb21tYW5kLnBhdGNoIFwKKyAgICAgICAgICAgIGZpbGU6Ly91c2UtcGtnLWNvbmZpZy10by1sb2NhdGUtemxpYi5wYXRjaCBcCisgICAgICAgICAgICBmaWxlOi8vMDAwMS1Vc2UtY29ycmVjdC1pbmNsdWRlLWRpci13aXRoLW1pbml0YXNuLnBhdGNoIFwKKyAgICAgICAgICAgIGZpbGU6Ly9DVkUtMjAxNi03NDQ0LnBhdGNoIFwKKyAgICAgICAgICAgIgorU1JDX1VSSVttZDVzdW1dID0gIjZjMmM3ZjQwZGRmNTI5MzNlZTNjYTQ3NGNiOGNiNjNjIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjkyYzRiYzk5OWExMGExYjk1Mjk5ZWJlZmFlZWE4MzMzZjE5ZDhhOThkOTU3YTM1YjVlYWU3NDg4MWJkYjFmZWYiCisKKyMgeDg2IC50ZXh0IHJlbG9jYXRpb25zIHNob3VsZCBiZSBmaXhlZCBmcm9tIDMuNS41IG9ud2FyZHMKK0lOU0FORV9TS0lQXyR7UE59X2FwcGVuZF94ODYgPSAiIHRleHRyZWwiCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvZ251dGxzL2xpYnRhc24xLzAwMDEtY29uZmlndXJlLWRvbi10LWFkZC1XZXJyb3ItdG8tYnVpbGQtZmxhZ3MucGF0Y2ggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvZ251dGxzL2xpYnRhc24xLzAwMDEtY29uZmlndXJlLWRvbi10LWFkZC1XZXJyb3ItdG8tYnVpbGQtZmxhZ3MucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWU2NDM5NAotLS0gL2Rldi9udWxsCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9nbnV0bHMvbGlidGFzbjEvMDAwMS1jb25maWd1cmUtZG9uLXQtYWRkLVdlcnJvci10by1idWlsZC1mbGFncy5wYXRjaApAQCAtMCwwICsxLDI4IEBACitGcm9tIDkwOGU5ZmE0YzExNzJmMDllMGU0NTQyMGE0MDNkYzI1ZWQwYTQ2NmMgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBOaWtvcyBNYXZyb2dpYW5ub3BvdWxvcyA8bm1hdkByZWRoYXQuY29tPgorRGF0ZTogVHVlLCAyNiBKdWwgMjAxNiAwODo0NTozMyArMDIwMAorU3ViamVjdDogW1BBVENIIDEvNF0gY29uZmlndXJlOiBkb24ndCBhZGQgLVdlcnJvciB0byBidWlsZCBmbGFncworCistLS0KK1Vwc3RyZWFtLVN0YXR1czogQmFja3BvcnQKK1NpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CisKKyBjb25maWd1cmUuYWMgfCAyIC0tCisgMSBmaWxlIGNoYW5nZWQsIDIgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9jb25maWd1cmUuYWMgYi9jb25maWd1cmUuYWMKK2luZGV4IDdhMTRlMDQuLjA2NmY1ZmUgMTAwNjQ0CistLS0gYS9jb25maWd1cmUuYWMKKysrKyBiL2NvbmZpZ3VyZS5hYworQEAgLTcwLDggKzcwLDYgQEAgQUNfQVJHX0VOQUJMRShbZ2NjLXdhcm5pbmdzXSwKKyApCisgCisgaWYgdGVzdCAiJGdsX2djY193YXJuaW5ncyIgPSB5ZXM7IHRoZW4KKy0gIGdsX1dBUk5fQUREKFstV2Vycm9yXSwgW1dFUlJPUl9DRkxBR1NdKQorLQorICAgbnc9IiRudyAtV3N5c3RlbS1oZWFkZXJzIiAgICAgICAgICMgRG9uJ3QgbGV0IHN5c3RlbSBoZWFkZXJzIHRyaWdnZXIgd2FybmluZ3MKKyAgIG53PSIkbncgLVdjKystY29tcGF0IiAgICAgICAgICAgICAjIFdlIGRvbid0IGNhcmUgc3Ryb25nbHkgYWJvdXQgQysrIGNvbXBpbGVycworICAgbnc9IiRudyAtV3RyYWRpdGlvbmFsIiAgICAgICAgICAgICMgV2FybnMgb24gI2VsaWYgd2hpY2ggd2UgdXNlIG9mdGVuCistLSAKKzEuOS4xCisKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9nbnV0bHMvbGlidGFzbjEvMDAwMi1BU04ueS1jb3JyZWN0ZWQtY29tcGlsZXItd2FybmluZy5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9nbnV0bHMvbGlidGFzbjEvMDAwMi1BU04ueS1jb3JyZWN0ZWQtY29tcGlsZXItd2FybmluZy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kZDM2NDIyCi0tLSAvZGV2L251bGwKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2dudXRscy9saWJ0YXNuMS8wMDAyLUFTTi55LWNvcnJlY3RlZC1jb21waWxlci13YXJuaW5nLnBhdGNoCkBAIC0wLDAgKzEsMjggQEAKK0Zyb20gMzU0MmMwMTYxOGZjZGU4M2IyOTY0MGVhMmM2MGJmZDI2MjlhZTBiNyBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IE5pa29zIE1hdnJvZ2lhbm5vcG91bG9zIDxubWF2QHJlZGhhdC5jb20+CitEYXRlOiBUdWUsIDI2IEp1bCAyMDE2IDA4OjQ3OjQ5ICswMjAwCitTdWJqZWN0OiBbUEFUQ0ggMi80XSBBU04ueTogY29ycmVjdGVkIGNvbXBpbGVyIHdhcm5pbmcKKworLS0tCitVcHN0cmVhbS1TdGF0dXM6IEJhY2twb3J0CitTaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorCisgbGliL0FTTjEueSB8IDIgKy0KKyAxIGZpbGUgY2hhbmdlZCwgMSBpbnNlcnRpb24oKyksIDEgZGVsZXRpb24oLSkKKworZGlmZiAtLWdpdCBhL2xpYi9BU04xLnkgYi9saWIvQVNOMS55CitpbmRleCA3MzE0MTVkLi42ZGI2MzhmIDEwMDY0NAorLS0tIGEvbGliL0FTTjEueQorKysrIGIvbGliL0FTTjEueQorQEAgLTYyMSw3ICs2MjEsNyBAQCBfYXNuMV9jcmVhdGVfZXJyb3JEZXNjcmlwdGlvbiAoaW50IGVycm9yLCBjaGFyICplcnJvcl9kZXNjKQorICAgICBjYXNlIEFTTjFfTkFNRV9UT09fTE9ORzoKKyAgICAgICBzbnByaW50ZiAoZXJyb3JfZGVzYywgQVNOMV9NQVhfRVJST1JfREVTQ1JJUFRJT05fU0laRSwKKyAgICAgICAgICAgICAgICAgIiVzOiV1OiBuYW1lIHRvbyBsb25nIChtb3JlIHRoYW4gJXUgY2hhcmFjdGVycykiLCBmaWxlX25hbWUsCistICAgICAgICAgICAgICAgIGxpbmVfbnVtYmVyLCBBU04xX01BWF9OQU1FX1NJWkUpOworKyAgICAgICAgICAgICAgICBsaW5lX251bWJlciwgKHVuc2lnbmVkKUFTTjFfTUFYX05BTUVfU0laRSk7CisgICAgICAgYnJlYWs7CisgICAgIGNhc2UgQVNOMV9JREVOVElGSUVSX05PVF9GT1VORDoKKyAgICAgICBzbnByaW50ZiAoZXJyb3JfZGVzYywgQVNOMV9NQVhfRVJST1JfREVTQ1JJUFRJT05fU0laRSwKKy0tIAorMS45LjEKKwpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2dudXRscy9saWJ0YXNuMS8wMDAzLXBhcnNlcl9hdXgtY29ycmVjdGVkLXBvdGVudGlhbC1udWxsLXBvaW50ZXItZGVyZWZlcmUucGF0Y2ggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvZ251dGxzL2xpYnRhc24xLzAwMDMtcGFyc2VyX2F1eC1jb3JyZWN0ZWQtcG90ZW50aWFsLW51bGwtcG9pbnRlci1kZXJlZmVyZS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yNDIwMTQzCi0tLSAvZGV2L251bGwKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2dudXRscy9saWJ0YXNuMS8wMDAzLXBhcnNlcl9hdXgtY29ycmVjdGVkLXBvdGVudGlhbC1udWxsLXBvaW50ZXItZGVyZWZlcmUucGF0Y2gKQEAgLTAsMCArMSw3MyBAQAorRnJvbSBjODkwM2FhMjdkYzlkZTFkOWVmZWVkOWQxZjc4OTRmMTAxOTU0OGY3IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogTmlrb3MgTWF2cm9naWFubm9wb3Vsb3MgPG5tYXZAcmVkaGF0LmNvbT4KK0RhdGU6IFR1ZSwgMjYgSnVsIDIwMTYgMDg6NDk6MTUgKzAyMDAKK1N1YmplY3Q6IFtQQVRDSCAzLzRdIHBhcnNlcl9hdXg6IGNvcnJlY3RlZCBwb3RlbnRpYWwgbnVsbCBwb2ludGVyIGRlcmVmZXJlbmNlcworCistLS0KK1Vwc3RyZWFtLVN0YXR1czogQmFja3BvcnQKK1NpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CisKKyBsaWIvcGFyc2VyX2F1eC5jIHwgMTIgKysrKysrLS0tLS0tCisgMSBmaWxlIGNoYW5nZWQsIDYgaW5zZXJ0aW9ucygrKSwgNiBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL2xpYi9wYXJzZXJfYXV4LmMgYi9saWIvcGFyc2VyX2F1eC5jCitpbmRleCAyMjg1YjIwLi4xMmVlMTZmIDEwMDY0NAorLS0tIGEvbGliL3BhcnNlcl9hdXguYworKysrIGIvbGliL3BhcnNlcl9hdXguYworQEAgLTYzNyw3ICs2MzcsNyBAQCBfYXNuMV9jaGFuZ2VfaW50ZWdlcl92YWx1ZSAoYXNuMV9ub2RlIG5vZGUpCisgCQkgICAgICBwID0gTlVMTDsKKyAJCSAgICAgIGJyZWFrOworIAkJICAgIH0KKy0JCSAgaWYgKHAtPnJpZ2h0KQorKwkJICBpZiAocCAmJiBwLT5yaWdodCkKKyAJCSAgICB7CisgCQkgICAgICBwID0gcC0+cmlnaHQ7CisgCQkgICAgICBicmVhazsKK0BAIC03NTMsNyArNzUzLDcgQEAgX2FzbjFfZXhwYW5kX29iamVjdF9pZCAoYXNuMV9ub2RlIG5vZGUpCisgCisgICAgICAgaWYgKG1vdmUgPT0gUklHSFQpCisgCXsKKy0JICBpZiAocC0+cmlnaHQpCisrCSAgaWYgKHAgJiYgcC0+cmlnaHQpCisgCSAgICBwID0gcC0+cmlnaHQ7CisgCSAgZWxzZQorIAkgICAgbW92ZSA9IFVQOworQEAgLTgyOCw3ICs4MjgsNyBAQCBfYXNuMV9leHBhbmRfb2JqZWN0X2lkIChhc24xX25vZGUgbm9kZSkKKyAKKyAgICAgICBpZiAobW92ZSA9PSBSSUdIVCkKKyAJeworLQkgIGlmIChwLT5yaWdodCkKKysJICBpZiAocCAmJiBwLT5yaWdodCkKKyAJICAgIHAgPSBwLT5yaWdodDsKKyAJICBlbHNlCisgCSAgICBtb3ZlID0gVVA7CitAQCAtODk4LDcgKzg5OCw3IEBAIF9hc24xX3R5cGVfc2V0X2NvbmZpZyAoYXNuMV9ub2RlIG5vZGUpCisgCisgICAgICAgaWYgKG1vdmUgPT0gUklHSFQpCisgCXsKKy0JICBpZiAocC0+cmlnaHQpCisrCSAgaWYgKHAgJiYgcC0+cmlnaHQpCisgCSAgICBwID0gcC0+cmlnaHQ7CisgCSAgZWxzZQorIAkgICAgbW92ZSA9IFVQOworQEAgLTEwMDcsNyArMTAwNyw3IEBAIF9hc24xX2NoZWNrX2lkZW50aWZpZXIgKGFzbjFfbm9kZSBub2RlKQorIAkJICBwID0gTlVMTDsKKyAJCSAgYnJlYWs7CisgCQl9CistCSAgICAgIGlmIChwLT5yaWdodCkKKysJICAgICAgaWYgKHAgJiYgcC0+cmlnaHQpCisgCQl7CisgCQkgIHAgPSBwLT5yaWdodDsKKyAJCSAgYnJlYWs7CitAQCAtMTA2Nyw3ICsxMDY3LDcgQEAgX2FzbjFfc2V0X2RlZmF1bHRfdGFnIChhc24xX25vZGUgbm9kZSkKKyAJCSAgcCA9IE5VTEw7CisgCQkgIGJyZWFrOworIAkJfQorLQkgICAgICBpZiAocC0+cmlnaHQpCisrCSAgICAgIGlmIChwICYmIHAtPnJpZ2h0KQorIAkJeworIAkJICBwID0gcC0+cmlnaHQ7CisgCQkgIGJyZWFrOworLS0gCisxLjkuMQorCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvZ251dGxzL2xpYnRhc24xLzAwMDQtdG9vbHMtZWxpbWluYXRlZC1jb21waWxlci13YXJuaW5ncy5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9nbnV0bHMvbGlidGFzbjEvMDAwNC10b29scy1lbGltaW5hdGVkLWNvbXBpbGVyLXdhcm5pbmdzLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdiZGEwZTYKLS0tIC9kZXYvbnVsbAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvZ251dGxzL2xpYnRhc24xLzAwMDQtdG9vbHMtZWxpbWluYXRlZC1jb21waWxlci13YXJuaW5ncy5wYXRjaApAQCAtMCwwICsxLDU2IEBACitGcm9tIGQ2NDdiYjJmYTFiZDI4OGE2YWMwMmMxODMxOGYzY2JhMmEzNGMzYTAgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBOaWtvcyBNYXZyb2dpYW5ub3BvdWxvcyA8bm1hdkByZWRoYXQuY29tPgorRGF0ZTogVHVlLCAyNiBKdWwgMjAxNiAwODo1MDoyNCArMDIwMAorU3ViamVjdDogW1BBVENIIDQvNF0gdG9vbHM6IGVsaW1pbmF0ZWQgY29tcGlsZXIgd2FybmluZ3MKKworLS0tCitVcHN0cmVhbS1TdGF0dXM6IEJhY2twb3J0CitTaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorCisgc3JjL2FzbjFDb2RpbmcuYyAgIHwgMiArLQorIHNyYy9hc24xRGVjb2RpbmcuYyB8IDIgKy0KKyBzcmMvYXNuMVBhcnNlci5jICAgfCAyICstCisgMyBmaWxlcyBjaGFuZ2VkLCAzIGluc2VydGlvbnMoKyksIDMgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9zcmMvYXNuMUNvZGluZy5jIGIvc3JjL2FzbjFDb2RpbmcuYworaW5kZXggZDRkZjU5My4uYjUxNmJmZSAxMDA2NDQKKy0tLSBhL3NyYy9hc24xQ29kaW5nLmMKKysrKyBiL3NyYy9hc24xQ29kaW5nLmMKK0BAIC0xODgsNyArMTg4LDcgQEAgbWFpbiAoaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKKyAJZGVmYXVsdDoKKyAJICBmcHJpbnRmIChzdGRlcnIsCisgCQkgICAiYXNuMUNvZGluZzogPz8gZ2V0b3B0IHJldHVybmVkIGNoYXJhY3RlciBjb2RlIE94JXggPz9cbiIsCistCQkgICBvcHRpb25fcmVzdWx0KTsKKysJCSAgICh1bnNpZ25lZClvcHRpb25fcmVzdWx0KTsKKyAJfQorICAgICB9CisgCitkaWZmIC0tZ2l0IGEvc3JjL2FzbjFEZWNvZGluZy5jIGIvc3JjL2FzbjFEZWNvZGluZy5jCitpbmRleCAwNzg5NjNlLi4yMGY5MWFjIDEwMDY0NAorLS0tIGEvc3JjL2FzbjFEZWNvZGluZy5jCisrKysgYi9zcmMvYXNuMURlY29kaW5nLmMKK0BAIC0xMzEsNyArMTMxLDcgQEAgbWFpbiAoaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKKyAJZGVmYXVsdDoKKyAJICBmcHJpbnRmIChzdGRlcnIsCisgCQkgICAiYXNuMURlY29kaW5nOiA/PyBnZXRvcHQgcmV0dXJuZWQgY2hhcmFjdGVyIGNvZGUgT3gleCA/P1xuIiwKKy0JCSAgIG9wdGlvbl9yZXN1bHQpOworKwkJICAgKHVuc2lnbmVkKW9wdGlvbl9yZXN1bHQpOworIAl9CisgICAgIH0KKyAKK2RpZmYgLS1naXQgYS9zcmMvYXNuMVBhcnNlci5jIGIvc3JjL2FzbjFQYXJzZXIuYworaW5kZXggN2EzYWU2Ny4uNDc1YmZjOSAxMDA2NDQKKy0tLSBhL3NyYy9hc24xUGFyc2VyLmMKKysrKyBiL3NyYy9hc24xUGFyc2VyLmMKK0BAIC0xMzksNyArMTM5LDcgQEAgbWFpbiAoaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKKyAJZGVmYXVsdDoKKyAJICBmcHJpbnRmIChzdGRlcnIsCisgCQkgICAiYXNuMVBhcnNlcjogPz8gZ2V0b3B0IHJldHVybmVkIGNoYXJhY3RlciBjb2RlIE94JXggPz9cbiIsCistCQkgICBvcHRpb25fcmVzdWx0KTsKKysJCSAgICh1bnNpZ25lZClvcHRpb25fcmVzdWx0KTsKKyAJfQorIAorICAgICB9CistLSAKKzEuOS4xCisKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9nbnV0bHMvbGlidGFzbjFfNC43LmJiIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2dudXRscy9saWJ0YXNuMV80LjcuYmIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDdmMDg1NjkuLjAwMDAwMDAKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2dudXRscy9saWJ0YXNuMV80LjcuYmIKKysrIC9kZXYvbnVsbApAQCAtMSwyMCArMCwwIEBACi1TVU1NQVJZID0gIkxpYnJhcnkgZm9yIEFTTi4xIGFuZCBERVIgbWFuaXB1bGF0aW9uIgotSE9NRVBBR0UgPSAiaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL2xpYnRhc24xLyIKLQotTElDRU5TRSA9ICJHUEx2MysgJiBMR1BMdjIuMSsiCi1MSUNFTlNFXyR7UE59LWJpbiA9ICJHUEx2MysiCi1MSUNFTlNFXyR7UE59ID0gIkxHUEx2Mi4xKyIKLUxJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PWQzMjIzOWJjYjY3MzQ2M2FiODc0ZTgwZDQ3ZmFlNTA0IFwKLSAgICAgICAgICAgICAgICAgICAgZmlsZTovL0NPUFlJTkcuTElCO21kNT00ZmJkNjUzODBjZGQyNTU5NTEwNzkwMDhiMzY0NTE2YyBcCi0gICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9SRUFETUU7ZW5kbGluZT04O21kNT1jMzgwM2EzZThjYTVhYjVlYjFlNTkxMmZhYTQwNTM1MSIKLQotU1JDX1VSSSA9ICIke0dOVV9NSVJST1J9L2xpYnRhc24xL2xpYnRhc24xLSR7UFZ9LnRhci5neiBcCi0gICAgICAgICAgIGZpbGU6Ly9kb250LWRlcGVuZC1vbi1oZWxwMm1hbi5wYXRjaCBcCi0gICAgICAgICAgICIKLQotU1JDX1VSSVttZDVzdW1dID0gIjEyZDEwY2E0YWUwYTNiOTVmN2FhMDZhMDc2ZGEzOWVjIgotU1JDX1VSSVtzaGEyNTZzdW1dID0gImE0MDc4MGRjOTNmYzZkODE5MTcwMjQwZThlY2UyNTM1MjA1OGE4NWZkMWQyMzQ3Y2UwZjE0MzY2N2Q4ZjExYzkiCi0KLWluaGVyaXQgYXV0b3Rvb2xzIHRleGluZm8gYmluY29uZmlnIGxpYl9wYWNrYWdlCi0KLUJCQ0xBU1NFWFRFTkQgPSAibmF0aXZlIgpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2dudXRscy9saWJ0YXNuMV80LjkuYmIgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvZ251dGxzL2xpYnRhc24xXzQuOS5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iOGZmOWVhCi0tLSAvZGV2L251bGwKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2dudXRscy9saWJ0YXNuMV80LjkuYmIKQEAgLTAsMCArMSwyNCBAQAorU1VNTUFSWSA9ICJMaWJyYXJ5IGZvciBBU04uMSBhbmQgREVSIG1hbmlwdWxhdGlvbiIKK0hPTUVQQUdFID0gImh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS9saWJ0YXNuMS8iCisKK0xJQ0VOU0UgPSAiR1BMdjMrICYgTEdQTHYyLjErIgorTElDRU5TRV8ke1BOfS1iaW4gPSAiR1BMdjMrIgorTElDRU5TRV8ke1BOfSA9ICJMR1BMdjIuMSsiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT1kMzIyMzliY2I2NzM0NjNhYjg3NGU4MGQ0N2ZhZTUwNCBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9DT1BZSU5HLkxJQjttZDU9NGZiZDY1MzgwY2RkMjU1OTUxMDc5MDA4YjM2NDUxNmMgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vUkVBRE1FO2VuZGxpbmU9ODttZDU9YzM4MDNhM2U4Y2E1YWI1ZWIxZTU5MTJmYWE0MDUzNTEiCisKK1NSQ19VUkkgPSAiJHtHTlVfTUlSUk9SfS9saWJ0YXNuMS9saWJ0YXNuMS0ke1BWfS50YXIuZ3ogXAorICAgICAgICAgICBmaWxlOi8vZG9udC1kZXBlbmQtb24taGVscDJtYW4ucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vMDAwMS1jb25maWd1cmUtZG9uLXQtYWRkLVdlcnJvci10by1idWlsZC1mbGFncy5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly8wMDAyLUFTTi55LWNvcnJlY3RlZC1jb21waWxlci13YXJuaW5nLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovLzAwMDMtcGFyc2VyX2F1eC1jb3JyZWN0ZWQtcG90ZW50aWFsLW51bGwtcG9pbnRlci1kZXJlZmVyZS5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly8wMDA0LXRvb2xzLWVsaW1pbmF0ZWQtY29tcGlsZXItd2FybmluZ3MucGF0Y2ggXAorICAgICAgICAgICAiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICIzMDE4ZDBmNDY2YTMyYjY2ZGRlNDFiYjEyMmU2Y2FiNiIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICI0ZjZmN2E4ZmQ2OTFhYzJiODMwN2M4Y2EzNjViYWQ3MTFkYjYwN2Q0YWQ1OTY2ZjY5MzhhOWQyZWNkNjVjOTIwIgorCitpbmhlcml0IGF1dG90b29scyB0ZXhpbmZvIGJpbmNvbmZpZyBsaWJfcGFja2FnZSBndGstZG9jCisKK0JCQ0xBU1NFWFRFTkQgPSAibmF0aXZlIgpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2dwZ21lL2dwZ21lXzEuNi4wLmJiIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2dwZ21lL2dwZ21lXzEuNi4wLmJiCmluZGV4IDg2ZWRhMjMuLmEyZDA1ODcgMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9ncGdtZS9ncGdtZV8xLjYuMC5iYgorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvZ3BnbWUvZ3BnbWVfMS42LjAuYmIKQEAgLTksNyArOSw4IEBACiAgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9zcmMvZ3BnbWUuaC5pbjtlbmRsaW5lPTIzO21kNT01MDI3ZWVjOTNhOTk2MjcyYTlhMGE2YTg2Y2YzNTc3NSBcCiAgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9zcmMvZW5naW5lLmg7ZW5kbGluZT0yMjttZDU9NGI2ZDhiYTMxM2Q5YjU2NGNjNGQ0Y2ZiMTY0MGFmOWQiCiAKLVNSQ19VUkkgPSAiZnRwOi8vZnRwLmdudXBnLm9yZy9nY3J5cHQvZ3BnbWUvJHtCUH0udGFyLmJ6MiBcCitVUFNUUkVBTV9DSEVDS19VUkkgPSAiaHR0cHM6Ly9nbnVwZy5vcmcvZG93bmxvYWQvaW5kZXguaHRtbCIKK1NSQ19VUkkgPSAiJHtHTlVQR19NSVJST1J9L2dwZ21lLyR7QlB9LnRhci5iejIgXAogICAgICAgICAgICBmaWxlOi8vZ3BnbWUucGMgXAogICAgICAgICAgICBmaWxlOi8vcGtnY29uZmlnLnBhdGNoIFwKICAgICAgICAgICAiCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvaWN1L2ljdS9pY3UtcmVsZWFzZS01Ni0xLWZsYWdwYXJzZXItZml4LnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2ljdS9pY3UvaWN1LXJlbGVhc2UtNTYtMS1mbGFncGFyc2VyLWZpeC5wYXRjaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTUxOWQ4NC4uMDAwMDAwMAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvaWN1L2ljdS9pY3UtcmVsZWFzZS01Ni0xLWZsYWdwYXJzZXItZml4LnBhdGNoCisrKyAvZGV2L251bGwKQEAgLTEsMjQgKzAsMCBAQAotaWN1OiBUaWNrZXQgIzExOTU5OiBwa2dkYXRhIGRpZXMgd2hlbiBjb21waWxlZCB3aXRoIGxvdHMnbydmbGFncwotCi1TZWU6IGh0dHA6Ly9idWdzLmljdS1wcm9qZWN0Lm9yZy90cmFjL3RpY2tldC8xMTk1OQotCi1UaGUgcGF0Y2ggYXZvaWRzIHByZW1hdHVyZSBmYWlsdXJlIHdoaWNoIHJlc3VsdHMgaW4gYSBzZWdmYXVsdC4KLQotVXBzdHJlYW0tU3RhdHVzOiBCYWNrcG9ydCBvZiByMzgwODEKLVNpZ25lZC1vZmYtYnk6IE1pa2UgQ3Jvd2UgPG1hY0BtY3Jvd2UuY29tPgotCi1JbmRleDogc291cmNlL3Rvb2xzL3Rvb2x1dGlsL2ZsYWdwYXJzZXIuYwotPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0tIHNvdXJjZS90b29scy90b29sdXRpbC9mbGFncGFyc2VyLmMJKHJldmlzaW9uIDM4MDQ2KQotKysrIHNvdXJjZS90b29scy90b29sdXRpbC9mbGFncGFyc2VyLmMJKHdvcmtpbmcgY29weSkKLUBAIC05Niw4ICs5Niw4IEBACi0gICAgIHVwcnZfZnJlZShidWZmZXIpOwotIAotICAgICBUX0ZpbGVTdHJlYW1fY2xvc2UoZik7Ci0tICAgIAotLSAgICBpZiAoVV9GQUlMVVJFKCpzdGF0dXMpKSB7Ci0rCi0rICAgIGlmIChVX0ZBSUxVUkUoKnN0YXR1cykgJiYgKnN0YXR1cyAhPSBVX0JVRkZFUl9PVkVSRkxPV19FUlJPUikgewotICAgICAgICAgcmV0dXJuIC0xOwotICAgICB9Ci0gCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvaWN1L2ljdV81Ni4xLmJiIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2ljdS9pY3VfNTYuMS5iYgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZGIwZGUxMC4uMDAwMDAwMAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvaWN1L2ljdV81Ni4xLmJiCisrKyAvZGV2L251bGwKQEAgLTEsMjkgKzAsMCBAQAotcmVxdWlyZSBpY3UuaW5jCi0KLUxJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovLy4uL2xpY2Vuc2UuaHRtbDttZDU9NjRlZmY0YWFkZmY0ZDEwNGQ2ZDQzN2M0ZmRlMGU2ZDciCi0KLWRlZiBpY3VfZG93bmxvYWRfdmVyc2lvbihkKToKLSAgICBwdnNwbGl0ID0gZC5nZXRWYXIoJ1BWJywgVHJ1ZSkuc3BsaXQoJy4nKQotICAgIHJldHVybiBwdnNwbGl0WzBdICsgIl8iICsgcHZzcGxpdFsxXQotCi1JQ1VfUFYgPSAiJHtAaWN1X2Rvd25sb2FkX3ZlcnNpb24oZCl9IgotCi0jIGh0dHA6Ly9lcnJvcnMueW9jdG9wcm9qZWN0Lm9yZy9FcnJvcnMvRGV0YWlscy8yMDQ4Ni8KLUFSTV9JTlNUUlVDVElPTl9TRVRfYXJtdjQgPSAiYXJtIgotQVJNX0lOU1RSVUNUSU9OX1NFVF9hcm12NSA9ICJhcm0iCi0KLUJBU0VfU1JDX1VSSSA9ICJodHRwOi8vZG93bmxvYWQuaWN1LXByb2plY3Qub3JnL2ZpbGVzL2ljdTRjLyR7UFZ9L2ljdTRjLSR7SUNVX1BWfS1zcmMudGd6IgotU1JDX1VSSSA9ICIke0JBU0VfU1JDX1VSSX0gXAotICAgICAgICAgICBmaWxlOi8vaWN1LXBrZ2RhdGEtbGFyZ2UtY21kLnBhdGNoIFwKLSAgICAgICAgICAgZmlsZTovL2ZpeC1pbnN0YWxsLW1hbngucGF0Y2ggXAotICAgICAgICAgICBmaWxlOi8vaWN1LXJlbGVhc2UtNTYtMS1mbGFncGFyc2VyLWZpeC5wYXRjaCBcCi0gICAgICAgICAgIgotCi1TUkNfVVJJX2FwcGVuZF9jbGFzcy10YXJnZXQgPSAiXAotICAgICAgICAgICBmaWxlOi8vMDAwMS1EaXNhYmxlLUxERkxBR1NJQ1VEVC1mb3ItTGludXgucGF0Y2ggXAotICAgICAgICAgICIKLVNSQ19VUklbbWQ1c3VtXSA9ICJjNGEyZDcxZmY1NmFlYzVlYmZhYjJhM2YwNTliZTk5ZCIKLVNSQ19VUklbc2hhMjU2c3VtXSA9ICIzYTY0ZTkxMDVjNzM0ZGNmNjMxYzBiM2VkNjA0MDQ1MzFiY2U2YzBmNWE2NGJmZTFhNjQwMmE0Y2MyMzE0ODE2IgotCi1VUFNUUkVBTV9DSEVDS19SRUdFWCA9ICIoP1A8cHZlcj5cZCsoXC5cZCspKykvIgotVVBTVFJFQU1fQ0hFQ0tfVVJJID0gImh0dHA6Ly9kb3dubG9hZC5pY3UtcHJvamVjdC5vcmcvZmlsZXMvaWN1NGMvIgpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2ljdS9pY3VfNTcuMS5iYiBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9pY3UvaWN1XzU3LjEuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTBjMmI4MgotLS0gL2Rldi9udWxsCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9pY3UvaWN1XzU3LjEuYmIKQEAgLTAsMCArMSwyOCBAQAorcmVxdWlyZSBpY3UuaW5jCisKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovLy4uL0xJQ0VOU0U7bWQ1PTc4N2QzYjM3ODY3NDQ1YzFjZGQ2ZjYxNjdiZDBlMzQ3IgorCitkZWYgaWN1X2Rvd25sb2FkX3ZlcnNpb24oZCk6CisgICAgcHZzcGxpdCA9IGQuZ2V0VmFyKCdQVicsIFRydWUpLnNwbGl0KCcuJykKKyAgICByZXR1cm4gcHZzcGxpdFswXSArICJfIiArIHB2c3BsaXRbMV0KKworSUNVX1BWID0gIiR7QGljdV9kb3dubG9hZF92ZXJzaW9uKGQpfSIKKworIyBodHRwOi8vZXJyb3JzLnlvY3RvcHJvamVjdC5vcmcvRXJyb3JzL0RldGFpbHMvMjA0ODYvCitBUk1fSU5TVFJVQ1RJT05fU0VUX2FybXY0ID0gImFybSIKK0FSTV9JTlNUUlVDVElPTl9TRVRfYXJtdjUgPSAiYXJtIgorCitCQVNFX1NSQ19VUkkgPSAiaHR0cDovL2Rvd25sb2FkLmljdS1wcm9qZWN0Lm9yZy9maWxlcy9pY3U0Yy8ke1BWfS9pY3U0Yy0ke0lDVV9QVn0tc3JjLnRneiIKK1NSQ19VUkkgPSAiJHtCQVNFX1NSQ19VUkl9IFwKKyAgICAgICAgICAgZmlsZTovL2ljdS1wa2dkYXRhLWxhcmdlLWNtZC5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9maXgtaW5zdGFsbC1tYW54LnBhdGNoIFwKKyAgICAgICAgICAiCisKK1NSQ19VUklfYXBwZW5kX2NsYXNzLXRhcmdldCA9ICJcCisgICAgICAgICAgIGZpbGU6Ly8wMDAxLURpc2FibGUtTERGTEFHU0lDVURULWZvci1MaW51eC5wYXRjaCBcCisgICAgICAgICAgIgorU1JDX1VSSVttZDVzdW1dID0gIjk3NjczNDgwNjAyNmE0ZWY4YmRkMTc5MzdjODg5OGI5IgorU1JDX1VSSVtzaGEyNTZzdW1dID0gImZmOGM2N2NiNjU5NDliMWU3ODA4ZjIzNTlmMmI4MGY3MjI2OTcwNDhlOTBlN2NmYzM4MmVjMWZlMjI5ZTk1ODEiCisKK1VQU1RSRUFNX0NIRUNLX1JFR0VYID0gIig/UDxwdmVyPlxkKyhcLlxkKykrKS8iCitVUFNUUkVBTV9DSEVDS19VUkkgPSAiaHR0cDovL2Rvd25sb2FkLmljdS1wcm9qZWN0Lm9yZy9maWxlcy9pY3U0Yy8iCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvaXNvLWNvZGVzL2lzby1jb2Rlc18zLjY1LmJiIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2lzby1jb2Rlcy9pc28tY29kZXNfMy42NS5iYgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMGI3OGRjNC4uMDAwMDAwMAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvaXNvLWNvZGVzL2lzby1jb2Rlc18zLjY1LmJiCisrKyAvZGV2L251bGwKQEAgLTEsMTUgKzAsMCBAQAotU1VNTUFSWSA9ICJJU08gbGFuZ3VhZ2UsIHRlcnJpdG9yeSwgY3VycmVuY3ksIHNjcmlwdCBjb2RlcyBhbmQgdGhlaXIgdHJhbnNsYXRpb25zIgotTElDRU5TRSA9ICJMR1BMdjIuMSIKLUxJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0xJQ0VOU0U7bWQ1PWZiYzA5MzkwMTg1N2ZjZDExOGYwNjVmOTAwOTgyYzI0IgotCi1TUkNfVVJJID0gImh0dHBzOi8vcGtnLWlzb2NvZGVzLmFsaW90aC5kZWJpYW4ub3JnL2Rvd25sb2Fkcy9pc28tY29kZXMtJHtQVn0udGFyLnh6IgotU1JDX1VSSVttZDVzdW1dID0gIjg5MGEwOGQ0Zjk2Mjc0OGUwYTA3NThhOGFhNDcxODk2IgotU1JDX1VSSVtzaGEyNTZzdW1dID0gIjgzNGRlNTE5M2M4NDg5ZWVkZWFmNjUwOTQ1N2E5YjEzNDc2NzAyMzg2YWUxZjNlZDRmMzkxYTM0OWQ2MzAzMjAiCi0KLSMgaW5oZXJpdCBnZXR0ZXh0IGNhbm5vdCBiZSB1c2VkLCBiZWNhdXNlIGl0IGFkZHMgZ2V0dGV4dC1uYXRpdmUgdG8gQkFTRURFUEVORFMgd2hpY2gKLSMgYXJlIGluaGliaXRlZCBieSBhbGxhcmNoCi1ERVBFTkRTID0gImdldHRleHQtbmF0aXZlIgotCi1pbmhlcml0IGFsbGFyY2ggYXV0b3Rvb2xzCi0KLUZJTEVTXyR7UE59ICs9ICIke2RhdGFkaXJ9L3htbC8iCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvaXNvLWNvZGVzL2lzby1jb2Rlc18zLjcwLmJiIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2lzby1jb2Rlcy9pc28tY29kZXNfMy43MC5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43ZWRkOGI3Ci0tLSAvZGV2L251bGwKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2lzby1jb2Rlcy9pc28tY29kZXNfMy43MC5iYgpAQCAtMCwwICsxLDE1IEBACitTVU1NQVJZID0gIklTTyBsYW5ndWFnZSwgdGVycml0b3J5LCBjdXJyZW5jeSwgc2NyaXB0IGNvZGVzIGFuZCB0aGVpciB0cmFuc2xhdGlvbnMiCitMSUNFTlNFID0gIkxHUEx2Mi4xIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9NGZiZDY1MzgwY2RkMjU1OTUxMDc5MDA4YjM2NDUxNmMiCisKK1NSQ19VUkkgPSAiaHR0cHM6Ly9wa2ctaXNvY29kZXMuYWxpb3RoLmRlYmlhbi5vcmcvZG93bmxvYWRzL2lzby1jb2Rlcy0ke1BWfS50YXIueHoiCitTUkNfVVJJW21kNXN1bV0gPSAiYzYxZjhmMDJlZWNmOTc4ZDM3MTBmZjU5NGU0M2NhN2UiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiNDFlMmZiYWVjMmVkNTdlNzY3Yjk0ZjE3NWQwZGNkMzFiNjI3YWViMjNiNzVjZDYwNDYwNWE2ZmI2MTA5ZDYxZiIKKworIyBpbmhlcml0IGdldHRleHQgY2Fubm90IGJlIHVzZWQsIGJlY2F1c2UgaXQgYWRkcyBnZXR0ZXh0LW5hdGl2ZSB0byBCQVNFREVQRU5EUyB3aGljaAorIyBhcmUgaW5oaWJpdGVkIGJ5IGFsbGFyY2gKK0RFUEVORFMgPSAiZ2V0dGV4dC1uYXRpdmUiCisKK2luaGVyaXQgYWxsYXJjaCBhdXRvdG9vbHMKKworRklMRVNfJHtQTn0gKz0gIiR7ZGF0YWRpcn0veG1sLyIKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9saWJhc3N1YW4vbGliYXNzdWFuXzIuNC4yLmJiIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2xpYmFzc3Vhbi9saWJhc3N1YW5fMi40LjIuYmIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGYzNzZkNjMuLjAwMDAwMDAKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2xpYmFzc3Vhbi9saWJhc3N1YW5fMi40LjIuYmIKKysrIC9kZXYvbnVsbApAQCAtMSwzMCArMCwwIEBACi1TVU1NQVJZID0gIklQQyBsaWJyYXJ5IHVzZWQgYnkgR251UEcgYW5kIEdQR01FIgotSE9NRVBBR0UgPSAiaHR0cDovL3d3dy5nbnVwZy5vcmcvcmVsYXRlZF9zb2Z0d2FyZS9saWJhc3N1YW4vIgotQlVHVFJBQ0tFUiA9ICJodHRwczovL2J1Z3MuZzEwY29kZS5jb20vZ251cGcvaW5kZXgiCi0KLUxJQ0VOU0UgPSAiR1BMdjMrICYgTEdQTHYyLjErIgotTElDRU5TRV8ke1BOfSA9ICJMR1BMdjIuMSsiCi1MSUNFTlNFXyR7UE59LWRvYyA9ICJHUEx2MysiCi1MSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT1mMjdkZWZlMWU5NmMyZTFlY2Q0ZTBjOWJlODk2Nzk0OSBcCi0gICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9DT1BZSU5HLkxJQjttZDU9MmQ1MDI1ZDRhYTM0OTViZWZlZjhmMTcyMDZhNWIwYTEgXAotICAgICAgICAgICAgICAgICAgICBmaWxlOi8vc3JjL2Fzc3Vhbi5jO2VuZGxpbmU9MjA7bWQ1PTBmNDY1NTQ0MTgzNDA1MDU1ZWMxNzk4NjlmYzViNWJhIFwKLSAgICAgICAgICAgICAgICAgICAgZmlsZTovL3NyYy9hc3N1YW4tZGVmcy5oO2VuZGxpbmU9MjA7bWQ1PTIwY2Q1NTUzNTI2MGNhMTc3OWVkYWU1YzdiODBiMjFlIgotCi1ERVBFTkRTID0gImxpYmdwZy1lcnJvciIKLQotU1JDX1VSSSA9ICJmdHA6Ly9mdHAuZ251cGcub3JnL2djcnlwdC9saWJhc3N1YW4vbGliYXNzdWFuLSR7UFZ9LnRhci5iejIgXAotCSAgIGZpbGU6Ly9saWJhc3N1YW4tYWRkLXBrZ2NvbmZpZy1zdXBwb3J0LnBhdGNoIgotCi1TUkNfVVJJW21kNXN1bV0gPSAiNzAxNTE5OTVjMjMzMGFlMTI2MWMwYTdjYTM0Y2Y0NzgiCi1TUkNfVVJJW3NoYTI1NnN1bV0gPSAiYmIwNmRjODEzODBiNzRiZjFiNjRkNTg0OWJlNWMwNDA5YTMzNmYzYjRjNDVmMjBhYzY4OGU4NmQxYjViY2IyMCIKLQotQklOQ09ORklHID0gIiR7YmluZGlyfS9saWJhc3N1YW4tY29uZmlnIgotCi1pbmhlcml0IGF1dG90b29scyB0ZXhpbmZvIGJpbmNvbmZpZy1kaXNhYmxlZCBwa2djb25maWcKLQotZG9fY29uZmlndXJlX3ByZXBlbmQgKCkgewotCSMgRWxzZSB0aGVzZSBjb3VsZCBiZSB1c2VkIGluIHByZWZlcmVuY2UgdG8gdGhvc2UgaW4gYWNsb2NhbC1jb3B5Ci0Jcm0gLWYgJHtTfS9tNC8qLm00Ci19Ci0KLUJCQ0xBU1NFWFRFTkQgPSAibmF0aXZlIgpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2xpYmFzc3Vhbi9saWJhc3N1YW5fMi40LjMuYmIgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbGliYXNzdWFuL2xpYmFzc3Vhbl8yLjQuMy5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xYjM5MTZkCi0tLSAvZGV2L251bGwKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2xpYmFzc3Vhbi9saWJhc3N1YW5fMi40LjMuYmIKQEAgLTAsMCArMSwzMSBAQAorU1VNTUFSWSA9ICJJUEMgbGlicmFyeSB1c2VkIGJ5IEdudVBHIGFuZCBHUEdNRSIKK0hPTUVQQUdFID0gImh0dHA6Ly93d3cuZ251cGcub3JnL3JlbGF0ZWRfc29mdHdhcmUvbGliYXNzdWFuLyIKK0JVR1RSQUNLRVIgPSAiaHR0cHM6Ly9idWdzLmcxMGNvZGUuY29tL2dudXBnL2luZGV4IgorCitMSUNFTlNFID0gIkdQTHYzKyAmIExHUEx2Mi4xKyIKK0xJQ0VOU0VfJHtQTn0gPSAiTEdQTHYyLjErIgorTElDRU5TRV8ke1BOfS1kb2MgPSAiR1BMdjMrIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9ZjI3ZGVmZTFlOTZjMmUxZWNkNGUwYzliZTg5Njc5NDkgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vQ09QWUlORy5MSUI7bWQ1PTJkNTAyNWQ0YWEzNDk1YmVmZWY4ZjE3MjA2YTViMGExIFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL3NyYy9hc3N1YW4uYztlbmRsaW5lPTIwO21kNT0wZjQ2NTU0NDE4MzQwNTA1NWVjMTc5ODY5ZmM1YjViYSBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9zcmMvYXNzdWFuLWRlZnMuaDtlbmRsaW5lPTIwO21kNT0yMGNkNTU1MzUyNjBjYTE3NzllZGFlNWM3YjgwYjIxZSIKKworREVQRU5EUyA9ICJsaWJncGctZXJyb3IiCisKK1VQU1RSRUFNX0NIRUNLX1VSSSA9ICJodHRwczovL2dudXBnLm9yZy9kb3dubG9hZC9pbmRleC5odG1sIgorU1JDX1VSSSA9ICIke0dOVVBHX01JUlJPUn0vbGliYXNzdWFuL2xpYmFzc3Vhbi0ke1BWfS50YXIuYnoyIFwKKwkgICBmaWxlOi8vbGliYXNzdWFuLWFkZC1wa2djb25maWctc3VwcG9ydC5wYXRjaCIKKworU1JDX1VSSVttZDVzdW1dID0gIjhlMDFhN2M3MmQzZTVkMTU0NDgxMjMwNjY4ZTZlYjVhIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjIyODQzYTNiZGIyNTZmNTliZTQ5ODQyYWJmMjRkYTc2NzAwMzU0MjkzYTA2NmQ4MmFkZTgxMzRiYjVhYTJiNzEiCisKK0JJTkNPTkZJRyA9ICIke2JpbmRpcn0vbGliYXNzdWFuLWNvbmZpZyIKKworaW5oZXJpdCBhdXRvdG9vbHMgdGV4aW5mbyBiaW5jb25maWctZGlzYWJsZWQgcGtnY29uZmlnCisKK2RvX2NvbmZpZ3VyZV9wcmVwZW5kICgpIHsKKwkjIEVsc2UgdGhlc2UgY291bGQgYmUgdXNlZCBpbiBwcmVmZXJlbmNlIHRvIHRob3NlIGluIGFjbG9jYWwtY29weQorCXJtIC1mICR7U30vbTQvKi5tNAorfQorCitCQkNMQVNTRVhURU5EID0gIm5hdGl2ZSIKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9saWJhdG9taWMtb3BzL2xpYmF0b21pYy1vcHNfNy40LjIuYmIgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbGliYXRvbWljLW9wcy9saWJhdG9taWMtb3BzXzcuNC4yLmJiCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmZGI3MGQ4Li4wMDAwMDAwCi0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9saWJhdG9taWMtb3BzL2xpYmF0b21pYy1vcHNfNy40LjIuYmIKKysrIC9kZXYvbnVsbApAQCAtMSwzMiArMCwwIEBACi1TVU1NQVJZID0gIkEgbGlicmFyeSBmb3IgYXRvbWljIGludGVnZXIgb3BlcmF0aW9ucyIKLUhPTUVQQUdFID0gImh0dHBzOi8vZ2l0aHViLmNvbS9pdm1haS9saWJhdG9taWNfb3BzLyIKLVNFQ1RJT04gPSAib3B0aW9uYWwiCi1QUk9WSURFUyArPSAibGliYXRvbWljcy1vcHMiCi1MSUNFTlNFID0gIkdQTHYyICYgTUlUIgotTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9OTRkNTVkNTEyYTliYTM2Y2FhOWI3ZGYwNzliYWUxOWYgXAotICAgICAgICAgICAgICAgICAgICBmaWxlOi8vZG9jL0xJQ0VOU0lORy50eHQ7bWQ1PWUwMGRkNWM4YWMwM2ExNGM1YWU1MjI1YTQ1MjVmYTJkIFwKLQkJICAgIgotCi1TUkNfVVJJID0gIlwKLQlodHRwOi8vd3d3Lml2bWFpc29mdC5jb20vX2Jpbi9hdG9taWNfb3BzL2xpYmF0b21pY19vcHMtJHtQVn0udGFyLmd6IFwKLQlmaWxlOi8vMDAwMS1BZGQtaW5pdGlhbC1uaW9zMi1hcmNoaXRlY3R1cmUtc3VwcG9ydC5wYXRjaCBcCi0JIgotCi1TUkNfVVJJW21kNXN1bV0gPSAiMWQ2NTM4NjA0YjMxNGQyZmNjZGY4NjkxNWU1YzA4NTciCi1TUkNfVVJJW3NoYTI1NnN1bV0gPSAiMDRmYTYxNWY2Mjk5MjU0N2JjYmRhNTYyMjYwZTI4YjUwNGJjNGMwNmUyZjk4NWYyNjdmM2FkZTMwMzA0YjVkZCIKLQotUyA9ICIke1dPUktESVJ9L2xpYmF0b21pY19vcHMtJHtQVn0iCi0KLUFMTE9XX0VNUFRZXyR7UE59ID0gIjEiCi0KLUFSTV9JTlNUUlVDVElPTl9TRVQgPSAiYXJtIgotCi1pbmhlcml0IGF1dG90b29scyBwa2djb25maWcKLQotZG9faW5zdGFsbF9hcHBlbmQoKSB7Ci0JIyB0aG9zZSBjb250YWluIG9ubHkgZG9jcywgbm90IG5lY2Vzc2FyeSBmb3Igbm93LgotCWluc3RhbGwgLW0gMDc1NSAtZCAke0R9JHtkb2NkaXJ9Ci0JbXYgJHtEfSR7ZGF0YWRpcn0vbGliYXRvbWljX29wcyAke0R9JHtkb2NkaXJ9LyR7QlBOfQotfQotCi1CQkNMQVNTRVhURU5EID0gIm5hdGl2ZSBuYXRpdmVzZGsiCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbGliYXRvbWljLW9wcy9saWJhdG9taWMtb3BzXzcuNC40LmJiIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2xpYmF0b21pYy1vcHMvbGliYXRvbWljLW9wc183LjQuNC5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45MzBjMWI4Ci0tLSAvZGV2L251bGwKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2xpYmF0b21pYy1vcHMvbGliYXRvbWljLW9wc183LjQuNC5iYgpAQCAtMCwwICsxLDMyIEBACitTVU1NQVJZID0gIkEgbGlicmFyeSBmb3IgYXRvbWljIGludGVnZXIgb3BlcmF0aW9ucyIKK0hPTUVQQUdFID0gImh0dHBzOi8vZ2l0aHViLmNvbS9pdm1haS9saWJhdG9taWNfb3BzLyIKK1NFQ1RJT04gPSAib3B0aW9uYWwiCitQUk9WSURFUyArPSAibGliYXRvbWljcy1vcHMiCitMSUNFTlNFID0gIkdQTHYyICYgTUlUIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9OTRkNTVkNTEyYTliYTM2Y2FhOWI3ZGYwNzliYWUxOWYgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vZG9jL0xJQ0VOU0lORy50eHQ7bWQ1PWUwMGRkNWM4YWMwM2ExNGM1YWU1MjI1YTQ1MjVmYTJkIFwKKwkJICAgIgorCitTUkNfVVJJID0gIlwKKwlodHRwOi8vd3d3Lml2bWFpc29mdC5jb20vX2Jpbi9hdG9taWNfb3BzL2xpYmF0b21pY19vcHMtJHtQVn0udGFyLmd6IFwKKwlmaWxlOi8vMDAwMS1BZGQtaW5pdGlhbC1uaW9zMi1hcmNoaXRlY3R1cmUtc3VwcG9ydC5wYXRjaCBcCisJIgorCitTUkNfVVJJW21kNXN1bV0gPSAiNDI2ZDgwNGJhYWUxMmMzNzI5NjdhNmQxODNlMjVhZjIiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiYmYyMTBhNjAwZGQxYmVjYmY3OTM2ZGQyOTE0Y2Y1ZjVkMzM1NjA0NjkwNDg0OGRjZmQyN2QwYzhiMTJiNmY4ZiIKKworUyA9ICIke1dPUktESVJ9L2xpYmF0b21pY19vcHMtJHtQVn0iCisKK0FMTE9XX0VNUFRZXyR7UE59ID0gIjEiCisKK0FSTV9JTlNUUlVDVElPTl9TRVQgPSAiYXJtIgorCitpbmhlcml0IGF1dG90b29scyBwa2djb25maWcKKworZG9faW5zdGFsbF9hcHBlbmQoKSB7CisJIyB0aG9zZSBjb250YWluIG9ubHkgZG9jcywgbm90IG5lY2Vzc2FyeSBmb3Igbm93LgorCWluc3RhbGwgLW0gMDc1NSAtZCAke0R9JHtkb2NkaXJ9CisJbXYgJHtEfSR7ZGF0YWRpcn0vbGliYXRvbWljX29wcyAke0R9JHtkb2NkaXJ9LyR7QlBOfQorfQorCitCQkNMQVNTRVhURU5EID0gIm5hdGl2ZSBuYXRpdmVzZGsiCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbGliYnNkL2xpYmJzZF8wLjguMi5iYiBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9saWJic2QvbGliYnNkXzAuOC4yLmJiCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzMzM1Mzg2Li4wMDAwMDAwCi0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9saWJic2QvbGliYnNkXzAuOC4yLmJiCisrKyAvZGV2L251bGwKQEAgLTEsNDMgKzAsMCBAQAotIyBDb3B5cmlnaHQgKEMpIDIwMTMgS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KLSMgUmVsZWFzZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlIChzZWUgQ09QWUlORy5NSVQgZm9yIHRoZSB0ZXJtcykKLQotU1VNTUFSWSA9ICJMaWJyYXJ5IG9mIHV0aWxpdHkgZnVuY3Rpb25zIGZyb20gQlNEIHN5c3RlbXMiCi1ERVNDUklQVElPTiA9ICJUaGlzIGxpYnJhcnkgcHJvdmlkZXMgdXNlZnVsIGZ1bmN0aW9ucyBjb21tb25seSBmb3VuZCBvbiBCU0Qgc3lzdGVtcywgXAotICAgICAgICAgICAgICAgYW5kIGxhY2tpbmcgb24gb3RoZXJzIGxpa2UgR05VIHN5c3RlbXMsIHRodXMgbWFraW5nIGl0IGVhc2llciB0byBwb3J0IFwKLSAgICAgICAgICAgICAgIHByb2plY3RzIHdpdGggc3Ryb25nIEJTRCBvcmlnaW5zLCB3aXRob3V0IG5lZWRpbmcgdG8gZW1iZWQgdGhlIHNhbWUgXAotICAgICAgICAgICAgICAgY29kZSBvdmVyIGFuZCBvdmVyIGFnYWluIG9uIGVhY2ggcHJvamVjdC4iCi0KLUhPTUVQQUdFID0gImh0dHA6Ly9saWJic2QuZnJlZWRlc2t0b3Aub3JnL3dpa2kvIgotIyBUaGVyZSBzZWVtcyB0byBiZSBtb3JlIGxpY2Vuc2VzIHVzZWQgaW4gdGhlIGNvZGUsIEkgZG9uJ3QgdGhpbmsgd2Ugd2FudCB0byBsaXN0IHRoZW0gYWxsIGhlcmUsIGNvbXBsZXRlIGxpc3Q6Ci0jIE9FIEAgfi9wcm9qZWN0cy9saWJic2QgJCBncmVwIF5MaWNlbnNlOiBDT1BZSU5HICB8IHNvcnQKLSMgTGljZW5zZTogQlNELTItY2xhdXNlCi0jIExpY2Vuc2U6IEJTRC0yLWNsYXVzZQotIyBMaWNlbnNlOiBCU0QtMi1jbGF1c2UtTmV0QlNECi0jIExpY2Vuc2U6IEJTRC0yLWNsYXVzZS1hdXRob3IKLSMgTGljZW5zZTogQlNELTItY2xhdXNlLXZlcmJhdGltCi0jIExpY2Vuc2U6IEJTRC0zLWNsYXVzZQotIyBMaWNlbnNlOiBCU0QtMy1jbGF1c2UKLSMgTGljZW5zZTogQlNELTMtY2xhdXNlCi0jIExpY2Vuc2U6IEJTRC0zLWNsYXVzZS1QZXRlci1XZW1tCi0jIExpY2Vuc2U6IEJTRC0zLWNsYXVzZS1SZWdlbnRzCi0jIExpY2Vuc2U6IEJTRC00LWNsYXVzZS1DaHJpc3RvcGhlci1HLURlbWV0cmlvdQotIyBMaWNlbnNlOiBCU0QtNC1jbGF1c2UtTmllbHMtUHJvdm9zCi0jIExpY2Vuc2U6IEJTRC01LWNsYXVzZS1QZXRlci1XZW1tCi0jIExpY2Vuc2U6IEJlZXJ3YXJlCi0jIExpY2Vuc2U6IEV4cGF0Ci0jIExpY2Vuc2U6IElTQwotIyBMaWNlbnNlOiBJU0MtT3JpZ2luYWwKLSMgTGljZW5zZTogcHVibGljLWRvbWFpbgotIyBMaWNlbnNlOiBwdWJsaWMtZG9tYWluLUNvbGluLVBsdW1iCi1MSUNFTlNFID0gIkJTRC00LUNsYXVzZSAmIElTQyAmIFBEIgotTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9MTQ1ZWMwNWEyMTdkOGY4NzlmMjljZmM1ZjgzMDg0YmUiCi1TRUNUSU9OID0gImxpYnMiCi0KLVNSQ19VUkkgPSAiIFwKLSAgICBodHRwOi8vbGliYnNkLmZyZWVkZXNrdG9wLm9yZy9yZWxlYXNlcy8ke0JQTn0tJHtQVn0udGFyLnh6IFwKLSIKLQotU1JDX1VSSVttZDVzdW1dID0gImNkZWUyNTJjY2ZmOTc4YjUwYWQyMzM2Mjc4YzUwNmM5IgotU1JDX1VSSVtzaGEyNTZzdW1dID0gImIyZjY0NGNhZTk0YTZlMmZlMTA5NDQ5YzIwYWQ3OWEwZjZlZTRmYWVjMjIwNWIwN2VlZmEwMDIwNTY1ZTI1MGEiCi0KLWluaGVyaXQgYXV0b3Rvb2xzIHBrZ2NvbmZpZwpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2xpYmJzZC9saWJic2RfMC44LjMuYmIgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbGliYnNkL2xpYmJzZF8wLjguMy5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45MjEyMWVmCi0tLSAvZGV2L251bGwKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2xpYmJzZC9saWJic2RfMC44LjMuYmIKQEAgLTAsMCArMSw0MyBAQAorIyBDb3B5cmlnaHQgKEMpIDIwMTMgS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KKyMgUmVsZWFzZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlIChzZWUgQ09QWUlORy5NSVQgZm9yIHRoZSB0ZXJtcykKKworU1VNTUFSWSA9ICJMaWJyYXJ5IG9mIHV0aWxpdHkgZnVuY3Rpb25zIGZyb20gQlNEIHN5c3RlbXMiCitERVNDUklQVElPTiA9ICJUaGlzIGxpYnJhcnkgcHJvdmlkZXMgdXNlZnVsIGZ1bmN0aW9ucyBjb21tb25seSBmb3VuZCBvbiBCU0Qgc3lzdGVtcywgXAorICAgICAgICAgICAgICAgYW5kIGxhY2tpbmcgb24gb3RoZXJzIGxpa2UgR05VIHN5c3RlbXMsIHRodXMgbWFraW5nIGl0IGVhc2llciB0byBwb3J0IFwKKyAgICAgICAgICAgICAgIHByb2plY3RzIHdpdGggc3Ryb25nIEJTRCBvcmlnaW5zLCB3aXRob3V0IG5lZWRpbmcgdG8gZW1iZWQgdGhlIHNhbWUgXAorICAgICAgICAgICAgICAgY29kZSBvdmVyIGFuZCBvdmVyIGFnYWluIG9uIGVhY2ggcHJvamVjdC4iCisKK0hPTUVQQUdFID0gImh0dHA6Ly9saWJic2QuZnJlZWRlc2t0b3Aub3JnL3dpa2kvIgorIyBUaGVyZSBzZWVtcyB0byBiZSBtb3JlIGxpY2Vuc2VzIHVzZWQgaW4gdGhlIGNvZGUsIEkgZG9uJ3QgdGhpbmsgd2Ugd2FudCB0byBsaXN0IHRoZW0gYWxsIGhlcmUsIGNvbXBsZXRlIGxpc3Q6CisjIE9FIEAgfi9wcm9qZWN0cy9saWJic2QgJCBncmVwIF5MaWNlbnNlOiBDT1BZSU5HICB8IHNvcnQKKyMgTGljZW5zZTogQlNELTItY2xhdXNlCisjIExpY2Vuc2U6IEJTRC0yLWNsYXVzZQorIyBMaWNlbnNlOiBCU0QtMi1jbGF1c2UtTmV0QlNECisjIExpY2Vuc2U6IEJTRC0yLWNsYXVzZS1hdXRob3IKKyMgTGljZW5zZTogQlNELTItY2xhdXNlLXZlcmJhdGltCisjIExpY2Vuc2U6IEJTRC0zLWNsYXVzZQorIyBMaWNlbnNlOiBCU0QtMy1jbGF1c2UKKyMgTGljZW5zZTogQlNELTMtY2xhdXNlCisjIExpY2Vuc2U6IEJTRC0zLWNsYXVzZS1QZXRlci1XZW1tCisjIExpY2Vuc2U6IEJTRC0zLWNsYXVzZS1SZWdlbnRzCisjIExpY2Vuc2U6IEJTRC00LWNsYXVzZS1DaHJpc3RvcGhlci1HLURlbWV0cmlvdQorIyBMaWNlbnNlOiBCU0QtNC1jbGF1c2UtTmllbHMtUHJvdm9zCisjIExpY2Vuc2U6IEJTRC01LWNsYXVzZS1QZXRlci1XZW1tCisjIExpY2Vuc2U6IEJlZXJ3YXJlCisjIExpY2Vuc2U6IEV4cGF0CisjIExpY2Vuc2U6IElTQworIyBMaWNlbnNlOiBJU0MtT3JpZ2luYWwKKyMgTGljZW5zZTogcHVibGljLWRvbWFpbgorIyBMaWNlbnNlOiBwdWJsaWMtZG9tYWluLUNvbGluLVBsdW1iCitMSUNFTlNFID0gIkJTRC00LUNsYXVzZSAmIElTQyAmIFBEIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9MGI5Yzg5ZDg2MTkxNWI4NjY1NWI5NmU1ZTMyZmEyYWEiCitTRUNUSU9OID0gImxpYnMiCisKK1NSQ19VUkkgPSAiIFwKKyAgICBodHRwOi8vbGliYnNkLmZyZWVkZXNrdG9wLm9yZy9yZWxlYXNlcy8ke0JQTn0tJHtQVn0udGFyLnh6IFwKKyIKKworU1JDX1VSSVttZDVzdW1dID0gImU5MzVjMWJiNmNjOThhNGE0M2NiMWRhMjI3OTU0OTNhIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjkzNGI2MzRmNGRmZDg2NWI2NDgyNjUwYjhmNTIyYzcwYWU2NWM0NjM1MjlkZThiZTkwN2I1M2M4OWMzYTM0YTgiCisKK2luaGVyaXQgYXV0b3Rvb2xzIHBrZ2NvbmZpZwpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2xpYmNhcC1uZy9saWJjYXAtbmdfMC43LjcuYmIgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbGliY2FwLW5nL2xpYmNhcC1uZ18wLjcuNy5iYgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTcxNTQ2Ny4uMDAwMDAwMAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbGliY2FwLW5nL2xpYmNhcC1uZ18wLjcuNy5iYgorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLVNVTU1BUlkgPSAiQW4gYWx0ZXJuYXRlIHBvc2l4IGNhcGFiaWxpdGllcyBsaWJyYXJ5IgotREVTQ1JJUFRJT04gPSAiVGhlIGxpYmNhcC1uZyBsaWJyYXJ5IGlzIGludGVuZGVkIHRvIG1ha2UgcHJvZ3JhbW1pbmcgXAotd2l0aCBQT1NJWCBjYXBhYmlsaXRpZXMgbXVjaCBlYXNpZXIgdGhhbiB0aGUgdHJhZGl0aW9uYWwgbGliY2FwIGxpYnJhcnkuIgotSE9NRVBBR0UgPSAiaHR0cDovL2ZyZWVjb2RlLmNvbS9wcm9qZWN0cy9saWJjYXAtbmciCi1TRUNUSU9OID0gImJhc2UiCi1MSUNFTlNFID0gIkdQTHYyKyAmIExHUEx2Mi4xKyIKLUxJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PTk0ZDU1ZDUxMmE5YmEzNmNhYTliN2RmMDc5YmFlMTlmIFwKLQkJICAgIGZpbGU6Ly9DT1BZSU5HLkxJQjttZDU9ZTNlZGEwMWQ5ODE1ZjhkMjRhYWUyZGJkODliNjhiMDYiCi0KLVNSQ19VUkkgPSAiaHR0cDovL3Blb3BsZS5yZWRoYXQuY29tL3NncnViYi9saWJjYXAtbmcvbGliY2FwLW5nLSR7UFZ9LnRhci5neiBcCi0gICAgICAgICAgIGZpbGU6Ly9weXRob24ucGF0Y2giCi0KLWluaGVyaXQgbGliX3BhY2thZ2UgYXV0b3Rvb2xzIHB5dGhvbm5hdGl2ZQotCi1TUkNfVVJJW21kNXN1bV0gPSAiM2Q3ZDEyNmIyOWUyODY5YTAyNTdjMTdjOGIwZDliMmUiCi1TUkNfVVJJW3NoYTI1NnN1bV0gPSAiNjE1NTQ5Y2UzOWIzMzNmNmI3OGJhZWUwYzBiNGVmMThiYzcyNmM2YmYxY2NhMTIzZGZkODlkZDk2M2Y2ZDA2YiIKLQotREVQRU5EUyArPSAic3dpZy1uYXRpdmUgcHl0aG9uIgotCi1FWFRSQV9PRUNPTkYgKz0gIi0td2l0aG91dC1weXRob24zIgotCi1FWFRSQV9PRU1BS0UgKz0gIlBZTElCVkVSPSdweXRob24ke1BZVEhPTl9CQVNFVkVSU0lPTn0nIFBZSU5DPScke1NUQUdJTkdfSU5DRElSfS8ke1BZTElCVkVSfSciCi0KLVBBQ0tBR0VTICs9ICIke1BOfS1weXRob24iCi0KLUZJTEVTXyR7UE59LXB5dGhvbiA9ICIke2xpYmRpcn0vcHl0aG9uJHtQWVRIT05fQkFTRVZFUlNJT059IgotCi1CQkNMQVNTRVhURU5EID0gIm5hdGl2ZSIKLQotZG9faW5zdGFsbF9hcHBlbmQoKSB7Ci0JIyBNb3ZpbmcgbGliY2FwLW5nIHRvIGJhc2VfbGliZGlyCi0JaWYgWyAhICR7RH0ke2xpYmRpcn0gLWVmICR7RH0ke2Jhc2VfbGliZGlyfSBdOyB0aGVuCi0JCW1rZGlyIC1wICR7RH0vJHtiYXNlX2xpYmRpcn0vCi0JCW12IC1mICR7RH0ke2xpYmRpcn0vbGliY2FwLW5nLnNvLiogJHtEfSR7YmFzZV9saWJkaXJ9LwotCQlyZWxwYXRoPSR7QG9zLnBhdGgucmVscGF0aCgiJHtiYXNlX2xpYmRpcn0iLCAiJHtsaWJkaXJ9Iil9Ci0JCWxuIC1zZiAke3JlbHBhdGh9L2xpYmNhcC1uZy5zby4wLjAuMCAke0R9JHtsaWJkaXJ9L2xpYmNhcC1uZy5zbwotCWZpCi19CmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbGliY2FwLW5nL2xpYmNhcC1uZ18wLjcuOC5iYiBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9saWJjYXAtbmcvbGliY2FwLW5nXzAuNy44LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM1ODMxOTQKLS0tIC9kZXYvbnVsbAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbGliY2FwLW5nL2xpYmNhcC1uZ18wLjcuOC5iYgpAQCAtMCwwICsxLDM3IEBACitTVU1NQVJZID0gIkFuIGFsdGVybmF0ZSBwb3NpeCBjYXBhYmlsaXRpZXMgbGlicmFyeSIKK0RFU0NSSVBUSU9OID0gIlRoZSBsaWJjYXAtbmcgbGlicmFyeSBpcyBpbnRlbmRlZCB0byBtYWtlIHByb2dyYW1taW5nIFwKK3dpdGggUE9TSVggY2FwYWJpbGl0aWVzIG11Y2ggZWFzaWVyIHRoYW4gdGhlIHRyYWRpdGlvbmFsIGxpYmNhcCBsaWJyYXJ5LiIKK0hPTUVQQUdFID0gImh0dHA6Ly9mcmVlY29kZS5jb20vcHJvamVjdHMvbGliY2FwLW5nIgorU0VDVElPTiA9ICJiYXNlIgorTElDRU5TRSA9ICJHUEx2MisgJiBMR1BMdjIuMSsiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT05NGQ1NWQ1MTJhOWJhMzZjYWE5YjdkZjA3OWJhZTE5ZiBcCisJCSAgICBmaWxlOi8vQ09QWUlORy5MSUI7bWQ1PWUzZWRhMDFkOTgxNWY4ZDI0YWFlMmRiZDg5YjY4YjA2IgorCitTUkNfVVJJID0gImh0dHA6Ly9wZW9wbGUucmVkaGF0LmNvbS9zZ3J1YmIvbGliY2FwLW5nL2xpYmNhcC1uZy0ke1BWfS50YXIuZ3ogXAorICAgICAgICAgICBmaWxlOi8vcHl0aG9uLnBhdGNoIgorCitpbmhlcml0IGxpYl9wYWNrYWdlIGF1dG90b29scyBweXRob24zbmF0aXZlCisKK1NSQ19VUklbbWQ1c3VtXSA9ICIwZGVjZTk2NjQ0YmQ3OTgwMjBlMTcwZmJmNzY2MzgwMiIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICJjMjFhZjk5NzQ0NWNkNDEwN2E1NWQzODZmOTU1YzVlYTZmNmU5NmVhZDY5M2U5MTUxMjc3YzBhYjVmOTdkMDVmIgorCitERVBFTkRTICs9ICJzd2lnLW5hdGl2ZSBweXRob24zIgorCitFWFRSQV9PRUNPTkYgKz0gIi0td2l0aC1weXRob24gLS13aXRoLXB5dGhvbjMiCitFWFRSQV9PRU1BS0UgKz0gIlBZTElCVkVSPSdweXRob24ke1BZVEhPTl9CQVNFVkVSU0lPTn0ke1BZVEhPTl9BQkl9JyBQWUlOQz0nJHtTVEFHSU5HX0lOQ0RJUn0vJHtQWUxJQlZFUn0nIgorCitQQUNLQUdFUyArPSAiJHtQTn0tcHl0aG9uIgorCitGSUxFU18ke1BOfS1weXRob24gPSAiJHtsaWJkaXJ9L3B5dGhvbiR7UFlUSE9OX0JBU0VWRVJTSU9OfSIKKworQkJDTEFTU0VYVEVORCA9ICJuYXRpdmUiCisKK2RvX2luc3RhbGxfYXBwZW5kKCkgeworCSMgTW92aW5nIGxpYmNhcC1uZyB0byBiYXNlX2xpYmRpcgorCWlmIFsgISAke0R9JHtsaWJkaXJ9IC1lZiAke0R9JHtiYXNlX2xpYmRpcn0gXTsgdGhlbgorCQlta2RpciAtcCAke0R9LyR7YmFzZV9saWJkaXJ9LworCQltdiAtZiAke0R9JHtsaWJkaXJ9L2xpYmNhcC1uZy5zby4qICR7RH0ke2Jhc2VfbGliZGlyfS8KKwkJcmVscGF0aD0ke0Bvcy5wYXRoLnJlbHBhdGgoIiR7YmFzZV9saWJkaXJ9IiwgIiR7bGliZGlyfSIpfQorCQlsbiAtc2YgJHtyZWxwYXRofS9saWJjYXAtbmcuc28uMC4wLjAgJHtEfSR7bGliZGlyfS9saWJjYXAtbmcuc28KKwlmaQorfQpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2xpYmNhcC9maWxlcy8wMDAxLWVuc3VyZS10aGUtWEFUVFJfTkFNRV9DQVBTLWlzLWRlZmluZWQtd2hlbi1pdC1pcy11c2UucGF0Y2ggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbGliY2FwL2ZpbGVzLzAwMDEtZW5zdXJlLXRoZS1YQVRUUl9OQU1FX0NBUFMtaXMtZGVmaW5lZC13aGVuLWl0LWlzLXVzZS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNWM3NzFhCi0tLSAvZGV2L251bGwKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2xpYmNhcC9maWxlcy8wMDAxLWVuc3VyZS10aGUtWEFUVFJfTkFNRV9DQVBTLWlzLWRlZmluZWQtd2hlbi1pdC1pcy11c2UucGF0Y2gKQEAgLTAsMCArMSwzMiBAQAorRW5zdXJlIHRoZSBYQVRUUl9OQU1FX0NBUFMgaXMgZGVmaW5lZCB3aGVuIGl0IGlzIHVzZWQKKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK1ZGU19DQVBfVTMyIGNhbiBub3QgZW5zdXJlIHRoYXQgWEFUVFJfTkFNRV9DQVBTIGlzIGRlZmluZWQsIGFuZCBmYWlsZWQgdG8gYnVpbGQKK2xpYmNhcC1uYXRpdmUgaW4gb2xkIHJlbGVhc2UsIGxpa2UgQ2VudE9TIHJlbGVhc2UgNi43IChGaW5hbCksIHdpdGggdGhlIGJsb3cKK2Vycm9yOgorICAgICBjYXBfZmlsZS5jOiBJbiBmdW5jdGlvbiDigJhjYXBfZ2V0X2Zk4oCZOgorICAgICBjYXBfZmlsZS5jOjE5OTogZXJyb3I6IOKAmFhBVFRSX05BTUVfQ0FQU+KAmSB1bmRlY2xhcmVkIChmaXJzdCB1c2UgaW4gdGhpcyBmdW5jdGlvbikKKyAgICAgY2FwX2ZpbGUuYzoxOTk6IGVycm9yOiAoRWFjaCB1bmRlY2xhcmVkIGlkZW50aWZpZXIgaXMgcmVwb3J0ZWQgb25seSBvbmNlCisKK1NpZ25lZC1vZmYtYnk6IFJveSBMaSA8cm9uZ3FpbmcubGlAd2luZHJpdmVyLmNvbT4KKy0tLQorIGxpYmNhcC9jYXBfZmlsZS5jIHwgMiArLQorIDEgZmlsZSBjaGFuZ2VkLCAxIGluc2VydGlvbigrKSwgMSBkZWxldGlvbigtKQorCitkaWZmIC0tZ2l0IGEvbGliY2FwL2NhcF9maWxlLmMgYi9saWJjYXAvY2FwX2ZpbGUuYworaW5kZXggNDA3NTZlYS4uZTI3Y2E4MCAxMDA2NDQKKy0tLSBhL2xpYmNhcC9jYXBfZmlsZS5jCisrKysgYi9saWJjYXAvY2FwX2ZpbGUuYworQEAgLTI1LDcgKzI1LDcgQEAgZXh0ZXJuIGludCBmcmVtb3ZleGF0dHIoaW50LCBjb25zdCBjaGFyICopOworIAorICNpbmNsdWRlICJsaWJjYXAuaCIKKyAKKy0jaWZkZWYgVkZTX0NBUF9VMzIKKysjaWYgZGVmaW5lZCAoVkZTX0NBUF9VMzIpICYmIGRlZmluZWQgKFhBVFRSX05BTUVfQ0FQUykKKyAKKyAjaWYgVkZTX0NBUF9VMzIgIT0gX19DQVBfQkxLUworICMgZXJyb3IgVkZTIHJlcHJlc2VudGF0aW9uIG9mIGNhcGFiaWxpdGllcyBpcyBub3QgdGhlIHNhbWUgc2l6ZSBhcyBrZXJuZWwKKy0tIAorMi44LjEKKwpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2xpYmNhcC9saWJjYXBfMi4yNC5iYiBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9saWJjYXAvbGliY2FwXzIuMjQuYmIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGE3MDEwMTkuLjAwMDAwMDAKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2xpYmNhcC9saWJjYXBfMi4yNC5iYgorKysgL2Rldi9udWxsCkBAIC0xLDc2ICswLDAgQEAKLVNVTU1BUlkgPSAiTGlicmFyeSBmb3IgZ2V0dGluZy9zZXR0aW5nIFBPU0lYLjFlIGNhcGFiaWxpdGllcyIKLUhPTUVQQUdFID0gImh0dHA6Ly9zaXRlcy5nb29nbGUuY29tL3NpdGUvZnVsbHljYXBhYmxlLyIKLQotIyBubyBzcGVjaWZpYyBHUEwgdmVyc2lvbiByZXF1aXJlZAotTElDRU5TRSA9ICJCU0QgfCBHUEx2MiIKLUxJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0xpY2Vuc2U7bWQ1PTNmODRmZDZmMjlkNDUzYTU2NTE0Y2I3ZTRlYWQyNWYxIgotCi1ERVBFTkRTID0gImhvc3RwZXJsLXJ1bnRpbWUtbmF0aXZlIgotCi1TUkNfVVJJID0gIiR7S0VSTkVMT1JHX01JUlJPUn0vbGludXgvbGlicy9zZWN1cml0eS9saW51eC1wcml2cy8ke0JQTn0yLyR7QlBOfS0ke1BWfS50YXIueHoiCi0KLVNSQ19VUklbbWQ1c3VtXSA9ICJkNDNhYjlmNjgwNDM1YTdmZmYzNWI0YWNlOGQ0NWI4MCIKLVNSQ19VUklbc2hhMjU2c3VtXSA9ICJjZWU0NTY4Zjc4ZGM4NTFkNzI2ZmM5M2YyNWY0ZWQ5MWNjMjIzYjFmZTgyNTlkYWE0YTc3MTU4ZDE3NGU2YzY1IgotCi1pbmhlcml0IGxpYl9wYWNrYWdlCi0KLSMgZG8gTk9UIHBhc3MgdGFyZ2V0IGNmbGFncyB0byBob3N0IGNvbXBpbGF0aW9ucwotIwotZG9fY29uZmlndXJlKCkgewotCSMgbGliY2FwIHVzZXMgOj0gZm9yIGNvbXBpbGVycywgZm9ydHVuYXRlbHksIGl0IGdpdmVzIHVzIGEgaGludAotCSMgb24gd2hhdCBzaG91bGQgYmUgcmVwbGFjZWQgd2l0aCA/PQotCXNlZCAtZSAncyw6PSw/PSxnJyAtaSBNYWtlLlJ1bGVzCi0Jc2VkIC1lICdzLF5CVUlMRF9DRkxBR1MgPz0gJCguKkNGTEFHUyksQlVJTERfQ0ZMQUdTIDo9ICQoQlVJTERfQ0ZMQUdTKSwnIC1pIE1ha2UuUnVsZXMKLQotCSMgZGlzYWJsZSBncGVyZiBkZXRlY3Rpb24KLQlzZWQgLWUgJy9zaGVsbCBncGVyZi9jaWZlcSAoLHllcyknIC1pIGxpYmNhcC9NYWtlZmlsZQotfQotCi1QQUNLQUdFQ09ORklHID8/PSAiJHtAYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsICdwYW0nLCAncGFtJywgJycsIGQpfSBcCi0gICAgICAgICAgICAgICAgICAgJHtAYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsICd4YXR0cicsICdhdHRyJywgJycsIGQpfSIKLVBBQ0tBR0VDT05GSUdfY2xhc3MtbmF0aXZlID8/PSAiIgotCi1QQUNLQUdFQ09ORklHW2F0dHJdID0gIkxJQkFUVFI9eWVzLExJQkFUVFI9bm8sYXR0ciIKLVBBQ0tBR0VDT05GSUdbcGFtXSA9ICJQQU1fQ0FQPXllcyxQQU1fQ0FQPW5vLGxpYnBhbSIKLQotRVhUUkFfT0VNQUtFID0gIiBcCi0gIElOREVOVD0gIFwKLSAgbGliPSR7QG9zLnBhdGguYmFzZW5hbWUoJyR7bGliZGlyfScpfSBcCi0gIFJBSVNFX1NFVEZDQVA9bm8gXAotICBEWU5BTUlDPXllcyBcCi0iCi0KLUVYVFJBX09FTUFLRV9hcHBlbmRfY2xhc3MtdGFyZ2V0ID0gIiBTWVNURU1fSEVBREVSUz0ke1NUQUdJTkdfSU5DRElSfSIKLQotIyB0aGVzZSBhcmUgcHJlc2VudCBpbiB0aGUgbGliY2FwIGRlZmF1bHRzLCBzbyBpbmNsdWRlIGluIG91ciBDRkxBR1MgdG9vCi1DRkxBR1MgKz0gIi1EX0xBUkdFRklMRTY0X1NPVVJDRSAtRF9GSUxFX09GRlNFVF9CSVRTPTY0IgotCi1kb19jb21waWxlKCkgewotCW9lX3J1bm1ha2UgJHtFWFRSQV9PRUNPTkZ9Ci19Ci0KLWRvX2luc3RhbGwoKSB7Ci0Jb2VfcnVubWFrZSBpbnN0YWxsIFwKLQkJJHtFWFRSQV9PRUNPTkZ9IFwKLQkJREVTVERJUj0iJHtEfSIgXAotCQlwcmVmaXg9IiR7cHJlZml4fSIgXAotCQlTQklORElSPSIke0R9JHtzYmluZGlyfSIKLX0KLQotZG9faW5zdGFsbF9hcHBlbmQoKSB7Ci0JIyBNb3ZlIHRoZSBsaWJyYXJ5IHRvIGJhc2VfbGliZGlyCi0JaW5zdGFsbCAtZCAke0R9JHtiYXNlX2xpYmRpcn0KLQlpZiBbICEgJHtEfSR7bGliZGlyfSAtZWYgJHtEfSR7YmFzZV9saWJkaXJ9IF07IHRoZW4KLQkJbXYgJHtEfSR7bGliZGlyfS9saWJjYXAqICR7RH0ke2Jhc2VfbGliZGlyfQotICAgICAgICAgICAgICAgIGlmIFsgLWQgJHtEfSR7bGliZGlyfS9zZWN1cml0eSBdOyB0aGVuCi0JCQltdiAke0R9JHtsaWJkaXJ9L3NlY3VyaXR5ICR7RH0ke2Jhc2VfbGliZGlyfQotCQlmaQotCWZpCi19Ci0KLUZJTEVTXyR7UE59LWRldiArPSAiJHtiYXNlX2xpYmRpcn0vKi5zbyIKLQotIyBwYW0gZmlsZXMKLUZJTEVTXyR7UE59ICs9ICIke2Jhc2VfbGliZGlyfS9zZWN1cml0eS8qLnNvIgotCi1CQkNMQVNTRVhURU5EID0gIm5hdGl2ZSBuYXRpdmVzZGsiCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbGliY2FwL2xpYmNhcF8yLjI1LmJiIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2xpYmNhcC9saWJjYXBfMi4yNS5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43Y2VkNGJlCi0tLSAvZGV2L251bGwKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2xpYmNhcC9saWJjYXBfMi4yNS5iYgpAQCAtMCwwICsxLDc3IEBACitTVU1NQVJZID0gIkxpYnJhcnkgZm9yIGdldHRpbmcvc2V0dGluZyBQT1NJWC4xZSBjYXBhYmlsaXRpZXMiCitIT01FUEFHRSA9ICJodHRwOi8vc2l0ZXMuZ29vZ2xlLmNvbS9zaXRlL2Z1bGx5Y2FwYWJsZS8iCisKKyMgbm8gc3BlY2lmaWMgR1BMIHZlcnNpb24gcmVxdWlyZWQKK0xJQ0VOU0UgPSAiQlNEIHwgR1BMdjIiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9MaWNlbnNlO21kNT0zZjg0ZmQ2ZjI5ZDQ1M2E1NjUxNGNiN2U0ZWFkMjVmMSIKKworREVQRU5EUyA9ICJob3N0cGVybC1ydW50aW1lLW5hdGl2ZSIKKworU1JDX1VSSSA9ICIke0tFUk5FTE9SR19NSVJST1J9L2xpbnV4L2xpYnMvc2VjdXJpdHkvbGludXgtcHJpdnMvJHtCUE59Mi8ke0JQTn0tJHtQVn0udGFyLnh6IFwKKyAgICAgICAgICAgZmlsZTovLzAwMDEtZW5zdXJlLXRoZS1YQVRUUl9OQU1FX0NBUFMtaXMtZGVmaW5lZC13aGVuLWl0LWlzLXVzZS5wYXRjaCBcCisiCitTUkNfVVJJW21kNXN1bV0gPSAiNjY2NmI4MzllNWQ0NmMyYWQzM2ZjOGFhMmNlYjVmNzciCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiNjkzYzhhYzUxZTk4M2VlNjc4MjA1NTcxZWYyNzI0MzlkODNhZmU2MmRkOGU0MjRlYTE0YWQ5NzkwYmMzNTE2MiIKKworaW5oZXJpdCBsaWJfcGFja2FnZQorCisjIGRvIE5PVCBwYXNzIHRhcmdldCBjZmxhZ3MgdG8gaG9zdCBjb21waWxhdGlvbnMKKyMKK2RvX2NvbmZpZ3VyZSgpIHsKKwkjIGxpYmNhcCB1c2VzIDo9IGZvciBjb21waWxlcnMsIGZvcnR1bmF0ZWx5LCBpdCBnaXZlcyB1cyBhIGhpbnQKKwkjIG9uIHdoYXQgc2hvdWxkIGJlIHJlcGxhY2VkIHdpdGggPz0KKwlzZWQgLWUgJ3MsOj0sPz0sZycgLWkgTWFrZS5SdWxlcworCXNlZCAtZSAncyxeQlVJTERfQ0ZMQUdTID89ICQoLipDRkxBR1MpLEJVSUxEX0NGTEFHUyA6PSAkKEJVSUxEX0NGTEFHUyksJyAtaSBNYWtlLlJ1bGVzCisKKwkjIGRpc2FibGUgZ3BlcmYgZGV0ZWN0aW9uCisJc2VkIC1lICcvc2hlbGwgZ3BlcmYvY2lmZXEgKCx5ZXMpJyAtaSBsaWJjYXAvTWFrZWZpbGUKK30KKworUEFDS0FHRUNPTkZJRyA/Pz0gIiR7QGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCAncGFtJywgJ3BhbScsICcnLCBkKX0gXAorICAgICAgICAgICAgICAgICAgICR7QGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCAneGF0dHInLCAnYXR0cicsICcnLCBkKX0iCitQQUNLQUdFQ09ORklHX2NsYXNzLW5hdGl2ZSA/Pz0gIiIKKworUEFDS0FHRUNPTkZJR1thdHRyXSA9ICJMSUJBVFRSPXllcyxMSUJBVFRSPW5vLGF0dHIiCitQQUNLQUdFQ09ORklHW3BhbV0gPSAiUEFNX0NBUD15ZXMsUEFNX0NBUD1ubyxsaWJwYW0iCisKK0VYVFJBX09FTUFLRSA9ICIgXAorICBJTkRFTlQ9ICBcCisgIGxpYj0ke0Bvcy5wYXRoLmJhc2VuYW1lKCcke2xpYmRpcn0nKX0gXAorICBSQUlTRV9TRVRGQ0FQPW5vIFwKKyAgRFlOQU1JQz15ZXMgXAorIgorCitFWFRSQV9PRU1BS0VfYXBwZW5kX2NsYXNzLXRhcmdldCA9ICIgU1lTVEVNX0hFQURFUlM9JHtTVEFHSU5HX0lOQ0RJUn0iCisKKyMgdGhlc2UgYXJlIHByZXNlbnQgaW4gdGhlIGxpYmNhcCBkZWZhdWx0cywgc28gaW5jbHVkZSBpbiBvdXIgQ0ZMQUdTIHRvbworQ0ZMQUdTICs9ICItRF9MQVJHRUZJTEU2NF9TT1VSQ0UgLURfRklMRV9PRkZTRVRfQklUUz02NCIKKworZG9fY29tcGlsZSgpIHsKKwlvZV9ydW5tYWtlICR7UEFDS0FHRUNPTkZJR19DT05GQVJHU30KK30KKworZG9faW5zdGFsbCgpIHsKKwlvZV9ydW5tYWtlIGluc3RhbGwgXAorCQkke1BBQ0tBR0VDT05GSUdfQ09ORkFSR1N9IFwKKwkJREVTVERJUj0iJHtEfSIgXAorCQlwcmVmaXg9IiR7cHJlZml4fSIgXAorCQlTQklORElSPSIke3NiaW5kaXJ9IgorfQorCitkb19pbnN0YWxsX2FwcGVuZCgpIHsKKwkjIE1vdmUgdGhlIGxpYnJhcnkgdG8gYmFzZV9saWJkaXIKKwlpbnN0YWxsIC1kICR7RH0ke2Jhc2VfbGliZGlyfQorCWlmIFsgISAke0R9JHtsaWJkaXJ9IC1lZiAke0R9JHtiYXNlX2xpYmRpcn0gXTsgdGhlbgorCQltdiAke0R9JHtsaWJkaXJ9L2xpYmNhcCogJHtEfSR7YmFzZV9saWJkaXJ9CisgICAgICAgICAgICAgICAgaWYgWyAtZCAke0R9JHtsaWJkaXJ9L3NlY3VyaXR5IF07IHRoZW4KKwkJCW12ICR7RH0ke2xpYmRpcn0vc2VjdXJpdHkgJHtEfSR7YmFzZV9saWJkaXJ9CisJCWZpCisJZmkKK30KKworRklMRVNfJHtQTn0tZGV2ICs9ICIke2Jhc2VfbGliZGlyfS8qLnNvIgorCisjIHBhbSBmaWxlcworRklMRVNfJHtQTn0gKz0gIiR7YmFzZV9saWJkaXJ9L3NlY3VyaXR5Lyouc28iCisKK0JCQ0xBU1NFWFRFTkQgPSAibmF0aXZlIG5hdGl2ZXNkayIKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9saWJldmRldi9saWJldmRldl8xLjQuNi5iYiBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9saWJldmRldi9saWJldmRldl8xLjQuNi5iYgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzgxNjNlMy4uMDAwMDAwMAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbGliZXZkZXYvbGliZXZkZXZfMS40LjYuYmIKKysrIC9kZXYvbnVsbApAQCAtMSwxNCArMCwwIEBACi1TVU1NQVJZID0gIldyYXBwZXIgbGlicmFyeSBmb3IgZXZkZXYgZGV2aWNlcyIKLUhPTUVQQUdFID0gImh0dHA6Ly93d3cuZnJlZWRlc2t0b3Aub3JnL3dpa2kvU29mdHdhcmUvbGliZXZkZXYvIgotU0VDVElPTiA9ICJsaWJzIgotCi1MSUNFTlNFID0gIk1JVC1YIgotTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9NzVhYWUwZDM4ZmVlYTZmZGE5N2NhMzgxY2I5MTMyZWIgXAotICAgICAgICAgICAgICAgICAgICBmaWxlOi8vbGliZXZkZXYvbGliZXZkZXYuaDtlbmRsaW5lPTIxO21kNT03ZmY0ZjBiNTExMzI1MmMyZjFhODI4ZTBiYmFkOThkMSIKLQotU1JDX1VSSSA9ICJodHRwOi8vd3d3LmZyZWVkZXNrdG9wLm9yZy9zb2Z0d2FyZS9saWJldmRldi8ke0JQfS50YXIueHoiCi0KLVNSQ19VUklbbWQ1c3VtXSA9ICI5YjNmMjViZDhmYjBmOGVmYTQ5NDRkMzQ2NjhkZGRjMCIKLVNSQ19VUklbc2hhMjU2c3VtXSA9ICI3YjJhZTFhMGM3ZjlmN2E5NjE5OGRkYzhmZDE2N2YwOTBmMjMzZDZjYmQ4MTY4Yjg0N2U0Zjk2ODQ0NTEzMmQzIgotCi1pbmhlcml0IGF1dG90b29scyBwa2djb25maWcKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9saWJldmRldi9saWJldmRldl8xLjUuMi5iYiBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9saWJldmRldi9saWJldmRldl8xLjUuMi5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNzZlMWQ3Ci0tLSAvZGV2L251bGwKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2xpYmV2ZGV2L2xpYmV2ZGV2XzEuNS4yLmJiCkBAIC0wLDAgKzEsMTQgQEAKK1NVTU1BUlkgPSAiV3JhcHBlciBsaWJyYXJ5IGZvciBldmRldiBkZXZpY2VzIgorSE9NRVBBR0UgPSAiaHR0cDovL3d3dy5mcmVlZGVza3RvcC5vcmcvd2lraS9Tb2Z0d2FyZS9saWJldmRldi8iCitTRUNUSU9OID0gImxpYnMiCisKK0xJQ0VOU0UgPSAiTUlULVgiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT03NWFhZTBkMzhmZWVhNmZkYTk3Y2EzODFjYjkxMzJlYiBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9saWJldmRldi9saWJldmRldi5oO2VuZGxpbmU9MjE7bWQ1PTdmZjRmMGI1MTEzMjUyYzJmMWE4MjhlMGJiYWQ5OGQxIgorCitTUkNfVVJJID0gImh0dHA6Ly93d3cuZnJlZWRlc2t0b3Aub3JnL3NvZnR3YXJlL2xpYmV2ZGV2LyR7QlB9LnRhci54eiIKKworU1JDX1VSSVttZDVzdW1dID0gIjk2YWQ2ZWRiNWNlNWM0NDI4ZjFiMTgzY2MxODBmZjhjIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjVlZTIxNjM2NTZhNjFmNTcwM2NiNWMwOGEwNWM5NDcxZmZiN2I2NDBiZmJlMmM1NTE5NGVhNTBkOTA4ZjYyOWIiCisKK2luaGVyaXQgYXV0b3Rvb2xzIHBrZ2NvbmZpZwpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2xpYmV2ZW50L2xpYmV2ZW50L3J1bi1wdGVzdCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9saWJldmVudC9saWJldmVudC9ydW4tcHRlc3QKaW5kZXggZDUyMTY4OC4uMDI0MTg1MSAxMDA2NDQKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2xpYmV2ZW50L2xpYmV2ZW50L3J1bi1wdGVzdAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbGliZXZlbnQvbGliZXZlbnQvcnVuLXB0ZXN0CkBAIC00LDcgKzQsNyBAQAogZm9yIHRlc3QgaW4gLi90ZXN0LyoKIGRvCiAJJHRlc3QKLQlpZiBbICQ/IC1lcSAwIF0KKwlpZiBbICQ/IC1uZSAwIF0KIAl0aGVuCiAJCWZhaWw9MQogCWZpCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbGliZmZpL2xpYmZmaS8wMDAxLW1pcHMtZml4LU1JUFMtc29mdGZsb2F0LWJ1aWxkLWlzc3VlLnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2xpYmZmaS9saWJmZmkvMDAwMS1taXBzLWZpeC1NSVBTLXNvZnRmbG9hdC1idWlsZC1pc3N1ZS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MWM5ZWIzCi0tLSAvZGV2L251bGwKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2xpYmZmaS9saWJmZmkvMDAwMS1taXBzLWZpeC1NSVBTLXNvZnRmbG9hdC1idWlsZC1pc3N1ZS5wYXRjaApAQCAtMCwwICsxLDE3NyBAQAorRnJvbSA2NTVlODJjOTJkNWMzODc1YWVlMDQzMjJmMTk5M2Q2YjA3NzRhN2JmIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogWW91c29uZyBaaG91IDx5c3pob3U0dGVjaEBnbWFpbC5jb20+CitEYXRlOiBNb24sIDE1IEF1ZyAyMDE2IDE1OjAwOjEzICswODAwCitTdWJqZWN0OiBbUEFUQ0hdIG1pcHM6IGZpeCBNSVBTIHNvZnRmbG9hdCBidWlsZCBpc3N1ZQorCitUaGUgcGF0Y2ggZm9yIG8zMi5TIGlzIHRha2VuIGZyb20gT3BlbldydCBwYWNrYWdlcyByZXBvIDNhN2E0YmYgImxpYmZmaToKK2ZpeCBNSVBTIHNvZnRmbG9hdCBidWlsZCBpc3N1ZSB3aXRoIGN1cnJlbnQgYmludXRpbHMiCisKK1NpZ25lZC1vZmYtYnk6IEZlbGl4IEZpZXRrYXUgPG5iZEBvcGVud3J0Lm9yZz4KK1NpZ25lZC1vZmYtYnk6IFlvdXNvbmcgWmhvdSA8eXN6aG91NHRlY2hAZ21haWwuY29tPgorLS0tCitVcHN0cmVhbS1TdGF0dXM6IEJhY2twb3J0IFtodHRwczovL2dpdGh1Yi5jb20vbGliZmZpL2xpYmZmaS9jb21taXQvMmRlZDJhNGY0OTQxNjVjOTMyOTNhZmMxNGFiMGJlMTI0M2NmOGM0OV0KKyBzcmMvbWlwcy9uMzIuUyB8IDE3ICsrKysrKysrKysrKysrKysrCisgc3JjL21pcHMvbzMyLlMgfCAxNyArKysrKysrKysrKysrKysrKworIDIgZmlsZXMgY2hhbmdlZCwgMzQgaW5zZXJ0aW9ucygrKQorCitkaWZmIC0tZ2l0IGEvc3JjL21pcHMvbjMyLlMgYi9zcmMvbWlwcy9uMzIuUworaW5kZXggYzY5ODVkMy4uOGYyNTk5NCAxMDA2NDQKKy0tLSBhL3NyYy9taXBzL24zMi5TCisrKysgYi9zcmMvbWlwcy9uMzIuUworQEAgLTEwNyw2ICsxMDcsMTYgQEAgbG9hZHJlZ3M6CisgCisgCVJFR19MCXQ2LCAzKkZGSV9TSVpFT0ZfQVJHKCRmcCkgICMgbG9hZCB0aGUgZmxhZ3Mgd29yZCBpbnRvIHQ2LgorIAorKyNpZmRlZiBfX21pcHNfc29mdF9mbG9hdAorKwlSRUdfTAlhMCwgMCpGRklfU0laRU9GX0FSRyh0OSkKKysJUkVHX0wJYTEsIDEqRkZJX1NJWkVPRl9BUkcodDkpCisrCVJFR19MCWEyLCAyKkZGSV9TSVpFT0ZfQVJHKHQ5KQorKwlSRUdfTAlhMywgMypGRklfU0laRU9GX0FSRyh0OSkKKysJUkVHX0wJYTQsIDQqRkZJX1NJWkVPRl9BUkcodDkpCisrCVJFR19MCWE1LCA1KkZGSV9TSVpFT0ZfQVJHKHQ5KQorKwlSRUdfTAlhNiwgNipGRklfU0laRU9GX0FSRyh0OSkKKysJUkVHX0wJYTcsIDcqRkZJX1NJWkVPRl9BUkcodDkpCisrI2Vsc2UKKyAJYW5kCXQ0LCB0NiwgKCgxPDxGRklfRkxBR19CSVRTKS0xKQorIAlSRUdfTAlhMCwgMCpGRklfU0laRU9GX0FSRyh0OSkKKyAJYmVxegl0NCwgYXJnMV9uZXh0CitAQCAtMTkzLDYgKzIwMyw3IEBAIGFyZzdfbmV4dDoKKyBhcmc4X2RvdWJsZXA6CQorICAJbC5kCSRmMTksIDcqRkZJX1NJWkVPRl9BUkcodDkpCQorIGFyZzhfbmV4dDoJCisrI2VuZGlmCisgCisgY2FsbGl0OgkJCisgCSMgTG9hZCB0aGUgZnVuY3Rpb24gcG9pbnRlcgorQEAgLTIxNCw2ICsyMjUsNyBAQCByZXRpbnQ6CisgCWIJZXBpbG9ndWUKKyAKKyByZXRmbG9hdDoKKysjaWZuZGVmIF9fbWlwc19zb2Z0X2Zsb2F0CisgCWJuZSAgICAgdDYsIEZGSV9UWVBFX0ZMT0FULCByZXRkb3VibGUKKyAJamFsCXQ5CisgCVJFR19MCXQ0LCA0KkZGSV9TSVpFT0ZfQVJHKCRmcCkKK0BAIC0yNzIsNiArMjg0LDcgQEAgcmV0c3RydWN0X2ZfZDoKKyAJcy5zCSRmMCwgMCh0NCkKKyAJcy5kCSRmMiwgOCh0NCkKKyAJYgllcGlsb2d1ZQorKyNlbmRpZgorIAorIHJldHN0cnVjdF9kX3NvZnQ6CisgCWJuZQl0NiwgRkZJX1RZUEVfU1RSVUNUX0RfU09GVCwgcmV0c3RydWN0X2Zfc29mdAorQEAgLTQyOSw2ICs0NDIsNyBAQCBmZmlfY2xvc3VyZV9OMzI6CisgCVJFR19TCWE2LCBBNl9PRkYyKCRzcCkKKyAJUkVHX1MJYTcsIEE3X09GRjIoJHNwKQorIAorKyNpZm5kZWYgX19taXBzX3NvZnRfZmxvYXQKKyAJIyBTdG9yZSBhbGwgcG9zc2libGUgZmxvYXQvZG91YmxlIHJlZ2lzdGVycy4KKyAJcy5kCSRmMTIsIEYxMl9PRkYyKCRzcCkKKyAJcy5kCSRmMTMsIEYxM19PRkYyKCRzcCkKK0BAIC00MzgsNiArNDUyLDcgQEAgZmZpX2Nsb3N1cmVfTjMyOgorIAlzLmQJJGYxNywgRjE3X09GRjIoJHNwKQorIAlzLmQJJGYxOCwgRjE4X09GRjIoJHNwKQorIAlzLmQJJGYxOSwgRjE5X09GRjIoJHNwKQorKyNlbmRpZgorIAorIAkjIENhbGwgZmZpX2Nsb3N1cmVfbWlwc19pbm5lcl9OMzIgdG8gZG8gdGhlIHJlYWwgd29yay4KKyAJTEEJdDksIGZmaV9jbG9zdXJlX21pcHNfaW5uZXJfTjMyCitAQCAtNDU4LDYgKzQ3Myw3IEBAIGNsc19yZXRpbnQ6CisgCWIJY2xzX2VwaWxvZ3VlCisgCisgY2xzX3JldGZsb2F0OgorKyNpZm5kZWYgX19taXBzX3NvZnRfZmxvYXQKKyAJYm5lICAgICB2MCwgRkZJX1RZUEVfRkxPQVQsIGNsc19yZXRkb3VibGUKKyAJbC5zCSRmMCwgVjBfT0ZGMigkc3ApCisgCWIJY2xzX2VwaWxvZ3VlCitAQCAtNTAwLDYgKzUxNiw3IEBAIGNsc19yZXRzdHJ1Y3RfZl9kOgorIAlsLnMJJGYwLCBWMF9PRkYyKCRzcCkKKyAJbC5kCSRmMiwgVjFfT0ZGMigkc3ApCisgCWIJY2xzX2VwaWxvZ3VlCisrI2VuZGlmCisgCQorIGNsc19yZXRzdHJ1Y3Rfc21hbGwyOgkKKyAJUkVHX0wJdjAsIFYwX09GRjIoJHNwKQorZGlmZiAtLWdpdCBhL3NyYy9taXBzL28zMi5TIGIvc3JjL21pcHMvbzMyLlMKK2luZGV4IGViMjc5ODEuLjQyOWRkMGEgMTAwNjQ0CistLS0gYS9zcmMvbWlwcy9vMzIuUworKysrIGIvc3JjL21pcHMvbzMyLlMKK0BAIC04MiwxMyArODIsMTYgQEAgc2l4dGVlbjoKKyAJCQorIAlBRERVCSRzcCwgNCAqIEZGSV9TSVpFT0ZfQVJHCQkjIGFkanVzdCAkc3AgdG8gbmV3IGFyZ3MKKyAKKysjaWZuZGVmIF9fbWlwc19zb2Z0X2Zsb2F0CisgCWJuZXoJdDAsIHBhc3NfZAkJCSMgbWFrZSBpdCBxdWljayBmb3IgaW50CisrI2VuZGlmCisgCVJFR19MCWEwLCAwKkZGSV9TSVpFT0ZfQVJHKCRzcCkJIyBqdXN0IGdvIGFoZWFkIGFuZCBsb2FkIHRoZQorIAlSRUdfTAlhMSwgMSpGRklfU0laRU9GX0FSRygkc3ApCSMgZm91ciByZWdzLgorIAlSRUdfTAlhMiwgMipGRklfU0laRU9GX0FSRygkc3ApCisgCVJFR19MCWEzLCAzKkZGSV9TSVpFT0ZfQVJHKCRzcCkKKyAJYgljYWxsX2l0CisgCisrI2lmbmRlZiBfX21pcHNfc29mdF9mbG9hdAorIHBhc3NfZDoKKyAJYm5lCXQwLCBGRklfQVJHU19ELCBwYXNzX2YKKyAJbC5kCSRmMTIsIDAqRkZJX1NJWkVPRl9BUkcoJHNwKQkjIGxvYWQgJGZwIHJlZ3MgZnJvbSBhcmdzCitAQCAtMTMwLDYgKzEzMyw3IEBAIHBhc3NfZl9kOgorICAjCWJuZQl0MCwgRkZJX0FSR1NfRl9ELCBjYWxsX2l0CisgCWwucwkkZjEyLCAwKkZGSV9TSVpFT0ZfQVJHKCRzcCkJIyBsb2FkICRmcCByZWdzIGZyb20gYXJncworIAlsLmQJJGYxNCwgMipGRklfU0laRU9GX0FSRygkc3ApCSMgcGFzc2luZyBkb3VibGUgYW5kIGZsb2F0CisrI2VuZGlmCisgCisgY2FsbF9pdDoJCisgCSMgTG9hZCB0aGUgZnVuY3Rpb24gcG9pbnRlcgorQEAgLTE1OCwxNCArMTYyLDIzIEBAIHJldGZsb2F0OgorIAlibmUgICAgIHQyLCBGRklfVFlQRV9GTE9BVCwgcmV0ZG91YmxlCisgCWphbHIJdDkKKyAJUkVHX0wJdDAsIFNJWkVPRl9GUkFNRSArIDQqRkZJX1NJWkVPRl9BUkcoJGZwKQorKyNpZm5kZWYgX19taXBzX3NvZnRfZmxvYXQKKyAJcy5zCSRmMCwgMCh0MCkKKysjZWxzZQorKwlSRUdfUwl2MCwgMCh0MCkKKysjZW5kaWYKKyAJYgllcGlsb2d1ZQorIAorIHJldGRvdWJsZToJCisgCWJuZQl0MiwgRkZJX1RZUEVfRE9VQkxFLCBub3JldHZhbAorIAlqYWxyCXQ5CisgCVJFR19MCXQwLCBTSVpFT0ZfRlJBTUUgKyA0KkZGSV9TSVpFT0ZfQVJHKCRmcCkKKysjaWZuZGVmIF9fbWlwc19zb2Z0X2Zsb2F0CisgCXMuZAkkZjAsIDAodDApCisrI2Vsc2UKKysJUkVHX1MJdjEsIDQodDApCisrCVJFR19TCXYwLCAwKHQwKQorKyNlbmRpZgorIAliCWVwaWxvZ3VlCisgCQorIG5vcmV0dmFsOgkKK0BAIC0yNjEsOSArMjc0LDExIEBAICRMQ0ZJNzoKKyAJbGkJJDEzLCAxCQkjIEZGSV9PMzIKKyAJYm5lCSQxNiwgJDEzLCAxZgkjIFNraXAgZnAgc2F2ZSBpZiBGRklfTzMyX1NPRlRfRkxPQVQKKyAJCisrI2lmbmRlZiBfX21pcHNfc29mdF9mbG9hdAorIAkjIFN0b3JlIGFsbCBwb3NzaWJsZSBmbG9hdC9kb3VibGUgcmVnaXN0ZXJzLgorIAlzLmQJJGYxMiwgRkFfMF8wX09GRjIoJGZwKQorIAlzLmQJJGYxNCwgRkFfMV8wX09GRjIoJGZwKQorKyNlbmRpZgorIDE6CQorIAkjIENhbGwgZmZpX2Nsb3N1cmVfbWlwc19pbm5lcl9PMzIgdG8gZG8gdGhlIHdvcmsuCisgCWxhCXQ5LCBmZmlfY2xvc3VyZV9taXBzX2lubmVyX08zMgorQEAgLTI4MSw2ICsyOTYsNyBAQCAkTENGSTc6CisgCWxpCSQxMywgMQkJIyBGRklfTzMyCisgCWJuZQkkMTYsICQxMywgMWYJIyBTa2lwIGZwIHJlc3RvcmUgaWYgRkZJX08zMl9TT0ZUX0ZMT0FUCisgCisrI2lmbmRlZiBfX21pcHNfc29mdF9mbG9hdAorIAlsaQkkOSwgRkZJX1RZUEVfRkxPQVQKKyAJbC5zCSRmMCwgVjBfT0ZGMigkZnApCisgCWJlcQkkOCwgJDksIGNsb3N1cmVfZG9uZQorQEAgLTI4OCw2ICszMDQsNyBAQCAkTENGSTc6CisgCWxpCSQ5LCBGRklfVFlQRV9ET1VCTEUKKyAJbC5kCSRmMCwgVjBfT0ZGMigkZnApCisgCWJlcQkkOCwgJDksIGNsb3N1cmVfZG9uZQorKyNlbmRpZgorIDE6CQorIAlSRUdfTAkkMywgVjFfT0ZGMigkZnApCisgCVJFR19MCSQyLCBWMF9PRkYyKCRmcCkKKy0tIAorMi45LjMKKwpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2xpYmZmaS9saWJmZmlfMy4yLjEuYmIgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbGliZmZpL2xpYmZmaV8zLjIuMS5iYgppbmRleCA3MmUyNWZiLi40M2VlZThlIDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbGliZmZpL2xpYmZmaV8zLjIuMS5iYgorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbGliZmZpL2xpYmZmaV8zLjIuMS5iYgpAQCAtMTIsNiArMTIsNyBAQAogU1JDX1VSSSA9ICJmdHA6Ly9zb3VyY2V3YXJlLm9yZy9wdWIvbGliZmZpLyR7QlB9LnRhci5neiBcCiAgICAgICAgICAgIGZpbGU6Ly9ub3Qtd2luMzIucGF0Y2ggXAogCSAgIGZpbGU6Ly8wMDAxLW1pcHMtVXNlLWNvbXBpbGVyLWludGVybmFsLWRlZmluZS1mb3ItbGludXgucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vMDAwMS1taXBzLWZpeC1NSVBTLXNvZnRmbG9hdC1idWlsZC1pc3N1ZS5wYXRjaCBcCiAJICAgIgogCiBTUkNfVVJJW21kNXN1bV0gPSAiODNiODk1ODc2MDdlM2ViNjVjNzBkMzYxZjEzYmFiNDMiCkBAIC0yMyw0ICsyNCw4IEBACiAKIEZJTEVTXyR7UE59LWRldiArPSAiJHtsaWJkaXJ9L2xpYmZmaS0ke1BWfSIKIAorIyBEb2Vzbid0IGNvbXBpbGUgaW4gTUlQUzE2ZSBtb2RlIGR1ZSB0byB1c2Ugb2YgaGFuZC13cml0dGVuCisjIGFzc2VtYmx5CitNSVBTX0lOU1RSVUNUSU9OX1NFVCA9ICJtaXBzIgorCiBCQkNMQVNTRVhURU5EID0gIm5hdGl2ZSBuYXRpdmVzZGsiCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbGliZm0vbGliZm1fMS4yLjQuYmIgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbGliZm0vbGliZm1fMS4yLjQuYmIKaW5kZXggODY2YjExYS4uMjIxOGY5YyAxMDA2NDQKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2xpYmZtL2xpYmZtXzEuMi40LmJiCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9saWJmbS9saWJmbV8xLjIuNC5iYgpAQCAtOSw3ICs5LDcgQEAKIAogCiBTRUNUSU9OID0gIngxMS9saWJzIgotREVQRU5EUyA9ICJnbGliLTIuMCBwYW5nbyBndGsrIG1lbnUtY2FjaGUgaW50bHRvb2wtbmF0aXZlIGxpYmV4aWYgbGliZm0tZXh0cmEgZ2V0dGV4dC1uYXRpdmUiCitERVBFTkRTID0gImdsaWItMi4wIHBhbmdvIGd0ayszIG1lbnUtY2FjaGUgaW50bHRvb2wtbmF0aXZlIGxpYmV4aWYgbGliZm0tZXh0cmEgZ2V0dGV4dC1uYXRpdmUiCiAKIFNSQ19VUkkgPSAiJHtTT1VSQ0VGT1JHRV9NSVJST1J9L3BjbWFuZm0vbGliZm0tJHtQVn0udGFyLnh6IgogCkBAIC0xNyw3ICsxNyw5IEBACiBTUkNfVVJJW3NoYTI1NnN1bV0gPSAiNzgwNGY2ZjI4Y2IzZDFiYzhmZmIzMTUxYWI3ZmYwYzA2M2IyN2M1ZjliMDZjNjgyZWI5MDNlMDFjZjI1NTAyZiIKIAogaW5oZXJpdCBhdXRvdG9vbHMgcGtnY29uZmlnIGd0ay1kb2MgZGlzdHJvX2ZlYXR1cmVzX2NoZWNrCi1BTllfT0ZfRElTVFJPX0ZFQVRVUkVTID0gIiR7R1RLMkRJU1RST0ZFQVRVUkVTfSIKK0FOWV9PRl9ESVNUUk9fRkVBVFVSRVMgPSAiJHtHVEszRElTVFJPRkVBVFVSRVN9IgorCitFWFRSQV9PRUNPTkYgPSAiLS13aXRoLWd0az0zIgogCiBkb19jb25maWd1cmVbZGlyc10gPSsgIiR7U30vbTQiCiAKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9saWJnY3J5cHQvZmlsZXMvYWRkLXBrZ2NvbmZpZy1zdXBwb3J0LnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2xpYmdjcnlwdC9maWxlcy9hZGQtcGtnY29uZmlnLXN1cHBvcnQucGF0Y2gKaW5kZXggNjdkZGZjNi4uNjk1ODlmNSAxMDA2NDQKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2xpYmdjcnlwdC9maWxlcy9hZGQtcGtnY29uZmlnLXN1cHBvcnQucGF0Y2gKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2xpYmdjcnlwdC9maWxlcy9hZGQtcGtnY29uZmlnLXN1cHBvcnQucGF0Y2gKQEAgLTQsNjEgKzQsMzIgQEAKIAogUlAgMjAxNC81LzIyCiAKLUluZGV4OiBsaWJnY3J5cHQtMS4yLjQvY29uZmlndXJlLmFjCi09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLS0gbGliZ2NyeXB0LTEuMi40Lm9yaWcvY29uZmlndXJlLmFjCTIwMDgtMDMtMTkgMjI6MTQ6NTAuMDAwMDAwMDAwICswMDAwCi0rKysgbGliZ2NyeXB0LTEuMi40L2NvbmZpZ3VyZS5hYwkyMDA4LTAzLTE5IDIyOjE0OjU4LjAwMDAwMDAwMCArMDAwMAotQEAgLTgwNyw2ICs4MDcsNyBAQAorUmViYXNlIHRvIDEuNy4wCitTaWduZWQtb2ZmLWJ5OiBIb25neHUgSmlhIDxob25neHUuamlhQHdpbmRyaXZlci5jb20+CistLS0KKyBjb25maWd1cmUuYWMgICAgICAgIHwgIDEgKworIHNyYy9saWJnY3J5cHQubTQgICAgfCA3MSArKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIHNyYy9saWJnY3J5cHQucGMuaW4gfCAzMyArKysrKysrKysrKysrKysrKysrKysrKysrCisgMyBmaWxlcyBjaGFuZ2VkLCAzOCBpbnNlcnRpb25zKCspLCA2NyBkZWxldGlvbnMoLSkKKyBjcmVhdGUgbW9kZSAxMDA2NDQgc3JjL2xpYmdjcnlwdC5wYy5pbgorCitkaWZmIC0tZ2l0IGEvY29uZmlndXJlLmFjIGIvY29uZmlndXJlLmFjCitpbmRleCBmNjgzZTIxLi41NjZlMWM4IDEwMDY0NAorLS0tIGEvY29uZmlndXJlLmFjCisrKysgYi9jb25maWd1cmUuYWMKK0BAIC0yMzE0LDYgKzIzMTQsNyBAQCByYW5kb20vTWFrZWZpbGUKICBkb2MvTWFrZWZpbGUKICBzcmMvTWFrZWZpbGUKICBzcmMvZ2NyeXB0LmgKICtzcmMvbGliZ2NyeXB0LnBjCiAgc3JjL2xpYmdjcnlwdC1jb25maWcKKyBzcmMvdmVyc2lvbmluZm8ucmMKICB0ZXN0cy9NYWtlZmlsZQotIHczMi1kbGwvTWFrZWZpbGUKLUluZGV4OiBsaWJnY3J5cHQtMS4yLjQvc3JjL2xpYmdjcnlwdC5wYy5pbgotPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0tIC9kZXYvbnVsbAkxOTcwLTAxLTAxIDAwOjAwOjAwLjAwMDAwMDAwMCArMDAwMAotKysrIGxpYmdjcnlwdC0xLjIuNC9zcmMvbGliZ2NyeXB0LnBjLmluCTIwMDgtMDMtMTkgMjI6MTQ6NTguMDAwMDAwMDAwICswMDAwCi1AQCAtMCwwICsxLDMzIEBACi0rIyBQcm9jZXNzIHRoaXMgZmlsZSB3aXRoIGF1dG9jb25mIHRvIHByb2R1Y2UgYSBwa2ctY29uZmlnIG1ldGFkYXRhIGZpbGUuCi0rIyBDb3B5cmlnaHQgKEMpIDIwMDIsIDIwMDMsIDIwMDQsIDIwMDUsIDIwMDYgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCi0rIyBBdXRob3I6IFNpbW9uIEpvc2Vmc3NvbgotKyMKLSsjIFRoaXMgZmlsZSBpcyBmcmVlIHNvZnR3YXJlOyBhcyBhIHNwZWNpYWwgZXhjZXB0aW9uIHRoZSBhdXRob3IgZ2l2ZXMKLSsjIHVubGltaXRlZCBwZXJtaXNzaW9uIHRvIGNvcHkgYW5kL29yIGRpc3RyaWJ1dGUgaXQsIHdpdGggb3Igd2l0aG91dAotKyMgbW9kaWZpY2F0aW9ucywgYXMgbG9uZyBhcyB0aGlzIG5vdGljZSBpcyBwcmVzZXJ2ZWQuCi0rIwotKyMgVGhpcyBmaWxlIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAotKyMgV0lUSE9VVCBBTlkgV0FSUkFOVFksIHRvIHRoZSBleHRlbnQgcGVybWl0dGVkIGJ5IGxhdzsgd2l0aG91dCBldmVuIHRoZQotKyMgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuCi0rCi0rcHJlZml4PUBwcmVmaXhACi0rZXhlY19wcmVmaXg9QGV4ZWNfcHJlZml4QAotK2xpYmRpcj1AbGliZGlyQAotK2luY2x1ZGVkaXI9QGluY2x1ZGVkaXJACi0rCi0rIyBBUEkgaW5mbwotK2FwaV92ZXJzaW9uPUBMSUJHQ1JZUFRfQ09ORklHX0FQSV9WRVJTSU9OQAotK2hvc3Q9QExJQkdDUllQVF9DT05GSUdfSE9TVEAKLSsKLSsjIE1pc2MgaW5mb3JtYXRpb24uCi0rc3ltbWV0cmljX2NpcGhlcnM9QExJQkdDUllQVF9DSVBIRVJTQAotK2FzeW1tZXRyaWNfY2lwaGVycz1ATElCR0NSWVBUX1BVQktFWV9DSVBIRVJTQAotK2RpZ2VzdHM9QExJQkdDUllQVF9ESUdFU1RTQAotKwotK05hbWU6IGxpYmdjcnlwdAotK0Rlc2NyaXB0aW9uOiBHTlUgY3J5cHRvIGxpYnJhcnkKLStVUkw6IGh0dHA6Ly93d3cuZ251cGcub3JnCi0rVmVyc2lvbjogQFZFUlNJT05ACi0rTGliczogLUwke2xpYmRpcn0gLWxnY3J5cHQKLStMaWJzLnByaXZhdGU6IC1MJHtsaWJkaXJ9IC1sZ3BnLWVycm9yCi0rQ2ZsYWdzOiAtSSR7aW5jbHVkZWRpcn0gCi1JbmRleDogbGliZ2NyeXB0LTEuNi4xL3NyYy9saWJnY3J5cHQubTQKLT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tLSBsaWJnY3J5cHQtMS42LjEub3JpZy9zcmMvbGliZ2NyeXB0Lm00CTIwMTMtMTItMTYgMTc6NDQ6MzIuMDAwMDAwMDAwICswMDAwCi0rKysgbGliZ2NyeXB0LTEuNi4xL3NyYy9saWJnY3J5cHQubTQJMjAxNC0wNS0xMyAyMToyNTozNy40NzgzODk4MzMgKzAwMDAKLUBAIC0yMiwxNyArMjIsNyBAQAorZGlmZiAtLWdpdCBhL3NyYy9saWJnY3J5cHQubTQgYi9zcmMvbGliZ2NyeXB0Lm00CitpbmRleCBjNjdjZmVjLi40ZWE1ZjJjIDEwMDY0NAorLS0tIGEvc3JjL2xpYmdjcnlwdC5tNAorKysrIGIvc3JjL2xpYmdjcnlwdC5tNAorQEAgLTI5LDMwICsyOSw2IEBAIGRubCBpcyBhZGRlZCB0byB0aGUgZ3BnX2NvbmZpZ19zY3JpcHRfd2FybiB2YXJpYWJsZS4KICBkbmwKICBBQ19ERUZVTihbQU1fUEFUSF9MSUJHQ1JZUFRdLAogIFsgQUNfUkVRVUlSRShbQUNfQ0FOT05JQ0FMX0hPU1RdKQpAQCAtNjYsMTcgKzM3LDMwIEBACiAtICAgICAgICAgICAgQUNfSEVMUF9TVFJJTkcoWy0td2l0aC1saWJnY3J5cHQtcHJlZml4PVBGWF0sCiAtICAgICAgICAgICAgICAgICAgICAgICAgICAgW3ByZWZpeCB3aGVyZSBMSUJHQ1JZUFQgaXMgaW5zdGFsbGVkIChvcHRpb25hbCldKSwKIC0gICAgIGxpYmdjcnlwdF9jb25maWdfcHJlZml4PSIkd2l0aHZhbCIsIGxpYmdjcnlwdF9jb25maWdfcHJlZml4PSIiKQotLSAgaWYgdGVzdCB4JGxpYmdjcnlwdF9jb25maWdfcHJlZml4ICE9IHggOyB0aGVuCi0tICAgICBpZiB0ZXN0IHgke0xJQkdDUllQVF9DT05GSUcrc2V0fSAhPSB4c2V0IDsgdGhlbgotLSAgICAgICAgTElCR0NSWVBUX0NPTkZJRz0kbGliZ2NyeXB0X2NvbmZpZ19wcmVmaXgvYmluL2xpYmdjcnlwdC1jb25maWcKKy0gIGlmIHRlc3QgeCIke0xJQkdDUllQVF9DT05GSUd9IiA9IHggOyB0aGVuCistICAgICBpZiB0ZXN0IHgiJHtsaWJnY3J5cHRfY29uZmlnX3ByZWZpeH0iICE9IHggOyB0aGVuCistICAgICAgICBMSUJHQ1JZUFRfQ09ORklHPSIke2xpYmdjcnlwdF9jb25maWdfcHJlZml4fS9iaW4vbGliZ2NyeXB0LWNvbmZpZyIKKy0gICAgIGVsc2UKKy0gICAgICAgY2FzZSAiJHtTWVNST09UfSIgaW4KKy0gICAgICAgICAvKikKKy0gICAgICAgICAgIGlmIHRlc3QgLXggIiR7U1lTUk9PVH0vYmluL2xpYmdjcnlwdC1jb25maWciIDsgdGhlbgorLSAgICAgICAgICAgICBMSUJHQ1JZUFRfQ09ORklHPSIke1NZU1JPT1R9L2Jpbi9saWJnY3J5cHQtY29uZmlnIgorLSAgICAgICAgICAgZmkKKy0gICAgICAgICAgIDs7CistICAgICAgICAgJycpCistICAgICAgICAgICA7OworLSAgICAgICAgICAqKQorLSAgICAgICAgICAgQUNfTVNHX1dBUk4oW0lnbm9yaW5nIFwkU1lTUk9PVCBhcyBpdCBpcyBub3QgYW4gYWJzb2x1dGUgcGF0aC5dKQorLSAgICAgICAgICAgOzsKKy0gICAgICAgZXNhYwogLSAgICAgZmkKIC0gIGZpCi0gCi0tICBBQ19QQVRIX1RPT0woTElCR0NSWVBUX0NPTkZJRywgbGliZ2NyeXB0LWNvbmZpZywgbm8pCistCistICBBQ19QQVRIX1BST0coTElCR0NSWVBUX0NPTkZJRywgbGliZ2NyeXB0LWNvbmZpZywgbm8pCiAgICB0bXA9aWZlbHNlKFskMV0sICwxOjEuMi4wLCQxKQogICAgaWYgZWNobyAiJHRtcCIgfCBncmVwICc6JyA+L2Rldi9udWxsIDI+L2Rldi9udWxsIDsgdGhlbgogICAgICAgcmVxX2xpYmdjcnlwdF9hcGk9YGVjaG8gIiR0bXAiICAgICB8IHNlZCAncy9cKC4qXCk6XCguKlwpL1wxLydgCi1AQCAtNDIsNDggKzMyLDEzIEBACitAQCAtNjIsNDggKzM4LDEzIEBAIEFDX0RFRlVOKFtBTV9QQVRIX0xJQkdDUllQVF0sCiAgICAgICBtaW5fbGliZ2NyeXB0X3ZlcnNpb249IiR0bXAiCiAgICBmaQogIApAQCAtMTI4LDcgKzExMiw3IEBACiAgICAgICAgICBpZiB0ZXN0ICIkdG1wIiAtZ3QgMCA7IHRoZW4KICAgICAgICAgICAgIEFDX01TR19DSEVDS0lORyhbTElCR0NSWVBUIEFQSSB2ZXJzaW9uXSkKICAgICAgICAgICAgIGlmIHRlc3QgIiRyZXFfbGliZ2NyeXB0X2FwaSIgLWVxICIkdG1wIiA7IHRoZW4KLUBAIC05NiwxMCArNTEsOCBAQAorQEAgLTExNiwxMCArNTcsOCBAQCBBQ19ERUZVTihbQU1fUEFUSF9MSUJHQ1JZUFRdLAogICAgICAgZmkKICAgIGZpCiAgICBpZiB0ZXN0ICRvayA9IHllczsgdGhlbgpAQCAtMTQwLDcgKzEyNCw3IEBACiAgICAgIGlmIHRlc3QgeCIkbGliZ2NyeXB0X2NvbmZpZ19ob3N0IiAhPSB4bm9uZSA7IHRoZW4KICAgICAgICBpZiB0ZXN0IHgiJGxpYmdjcnlwdF9jb25maWdfaG9zdCIgIT0geCIkaG9zdCIgOyB0aGVuCiAgICBBQ19NU0dfV0FSTihbWwotQEAgLTExMyw4ICs2Niw2IEBACitAQCAtMTM0LDggKzczLDYgQEAgQUNfREVGVU4oW0FNX1BBVEhfTElCR0NSWVBUXSwKICAgICAgICBmaQogICAgICBmaQogICAgZWxzZQpAQCAtMTQ5LDMgKzEzMyw0NSBAQAogICAgICBpZmVsc2UoWyQzXSwgLCA6LCBbJDNdKQogICAgZmkKICAgIEFDX1NVQlNUKExJQkdDUllQVF9DRkxBR1MpCitkaWZmIC0tZ2l0IGEvc3JjL2xpYmdjcnlwdC5wYy5pbiBiL3NyYy9saWJnY3J5cHQucGMuaW4KK25ldyBmaWxlIG1vZGUgMTAwNjQ0CitpbmRleCAwMDAwMDAwLi4yZmM4ZjUzCistLS0gL2Rldi9udWxsCisrKysgYi9zcmMvbGliZ2NyeXB0LnBjLmluCitAQCAtMCwwICsxLDMzIEBACisrIyBQcm9jZXNzIHRoaXMgZmlsZSB3aXRoIGF1dG9jb25mIHRvIHByb2R1Y2UgYSBwa2ctY29uZmlnIG1ldGFkYXRhIGZpbGUuCisrIyBDb3B5cmlnaHQgKEMpIDIwMDIsIDIwMDMsIDIwMDQsIDIwMDUsIDIwMDYgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCisrIyBBdXRob3I6IFNpbW9uIEpvc2Vmc3NvbgorKyMKKysjIFRoaXMgZmlsZSBpcyBmcmVlIHNvZnR3YXJlOyBhcyBhIHNwZWNpYWwgZXhjZXB0aW9uIHRoZSBhdXRob3IgZ2l2ZXMKKysjIHVubGltaXRlZCBwZXJtaXNzaW9uIHRvIGNvcHkgYW5kL29yIGRpc3RyaWJ1dGUgaXQsIHdpdGggb3Igd2l0aG91dAorKyMgbW9kaWZpY2F0aW9ucywgYXMgbG9uZyBhcyB0aGlzIG5vdGljZSBpcyBwcmVzZXJ2ZWQuCisrIworKyMgVGhpcyBmaWxlIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorKyMgV0lUSE9VVCBBTlkgV0FSUkFOVFksIHRvIHRoZSBleHRlbnQgcGVybWl0dGVkIGJ5IGxhdzsgd2l0aG91dCBldmVuIHRoZQorKyMgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuCisrCisrcHJlZml4PUBwcmVmaXhACisrZXhlY19wcmVmaXg9QGV4ZWNfcHJlZml4QAorK2xpYmRpcj1AbGliZGlyQAorK2luY2x1ZGVkaXI9QGluY2x1ZGVkaXJACisrCisrIyBBUEkgaW5mbworK2FwaV92ZXJzaW9uPUBMSUJHQ1JZUFRfQ09ORklHX0FQSV9WRVJTSU9OQAorK2hvc3Q9QExJQkdDUllQVF9DT05GSUdfSE9TVEAKKysKKysjIE1pc2MgaW5mb3JtYXRpb24uCisrc3ltbWV0cmljX2NpcGhlcnM9QExJQkdDUllQVF9DSVBIRVJTQAorK2FzeW1tZXRyaWNfY2lwaGVycz1ATElCR0NSWVBUX1BVQktFWV9DSVBIRVJTQAorK2RpZ2VzdHM9QExJQkdDUllQVF9ESUdFU1RTQAorKworK05hbWU6IGxpYmdjcnlwdAorK0Rlc2NyaXB0aW9uOiBHTlUgY3J5cHRvIGxpYnJhcnkKKytVUkw6IGh0dHA6Ly93d3cuZ251cGcub3JnCisrVmVyc2lvbjogQFZFUlNJT05ACisrTGliczogLUwke2xpYmRpcn0gLWxnY3J5cHQKKytMaWJzLnByaXZhdGU6IC1MJHtsaWJkaXJ9IC1sZ3BnLWVycm9yCisrQ2ZsYWdzOiAtSSR7aW5jbHVkZWRpcn0gCistLSAKKzIuOC4xCisKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9saWJnY3J5cHQvZmlsZXMvZml4LXVuZGVmaW5lZC1yZWZlcmVuY2UtdG8tcHRocmVhZC5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9saWJnY3J5cHQvZmlsZXMvZml4LXVuZGVmaW5lZC1yZWZlcmVuY2UtdG8tcHRocmVhZC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lN2RlOGJhCi0tLSAvZGV2L251bGwKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2xpYmdjcnlwdC9maWxlcy9maXgtdW5kZWZpbmVkLXJlZmVyZW5jZS10by1wdGhyZWFkLnBhdGNoCkBAIC0wLDAgKzEsMjcgQEAKK0Zyb20gY2MwZTJiNDAzZDMzODkyOTYzNTEzYTNiYTk4ZTRhZTVhMDVhNGQzYyBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEhvbmd4dSBKaWEgPGhvbmd4dS5qaWFAd2luZHJpdmVyLmNvbT4KK0RhdGU6IFN1biwgMTIgSnVuIDIwMTYgMDQ6NDQ6MjkgLTA0MDAKK1N1YmplY3Q6IFtQQVRDSF0gdGVzdHMvTWFrZWZpbGUuYW06IGZpeCB1bmRlZmluZWQgcmVmZXJlbmNlIHRvIGBwdGhyZWFkX2NyZWF0ZScKKworQWRkIG1pc3NpbmcgJy1scHRocmVhZCcgdG8gQ0ZMQUdTCisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitTaWduZWQtb2ZmLWJ5OiBIb25neHUgSmlhIDxob25neHUuamlhQHdpbmRyaXZlci5jb20+CistLS0KKyB0ZXN0cy9NYWtlZmlsZS5hbSB8IDIgKy0KKyAxIGZpbGUgY2hhbmdlZCwgMSBpbnNlcnRpb24oKyksIDEgZGVsZXRpb24oLSkKKworZGlmZiAtLWdpdCBhL3Rlc3RzL01ha2VmaWxlLmFtIGIvdGVzdHMvTWFrZWZpbGUuYW0KK2luZGV4IGQ0NjJmMzAuLmJlZjZkZDcgMTAwNjQ0CistLS0gYS90ZXN0cy9NYWtlZmlsZS5hbQorKysrIGIvdGVzdHMvTWFrZWZpbGUuYW0KK0BAIC02Miw0ICs2Miw0IEBAIEVYVFJBX0RJU1QgPSBSRUFETUUgcnNhLTE2ay5rZXkgY2F2c190ZXN0cy5zaCBjYXZzX2RyaXZlci5wbCBcCisgCisgTERBREQgPSAkKHN0YW5kYXJkX2xkYWRkKSAkKEdQR19FUlJPUl9MSUJTKQorIHRfbG9ja19MREFERCA9ICQoc3RhbmRhcmRfbGRhZGQpICQoR1BHX0VSUk9SX01UX0xJQlMpCistdF9sb2NrX0NGTEFHUyA9ICQoR1BHX0VSUk9SX01UX0NGTEFHUykKKyt0X2xvY2tfQ0ZMQUdTID0gJChHUEdfRVJST1JfTVRfQ0ZMQUdTKSAtbHB0aHJlYWQKKy0tIAorMi44LjEKKwpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2xpYmdjcnlwdC9saWJnY3J5cHQuaW5jIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2xpYmdjcnlwdC9saWJnY3J5cHQuaW5jCmluZGV4IDU0NzgyNTMuLjE1ODA1Y2QgMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9saWJnY3J5cHQvbGliZ2NyeXB0LmluYworKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbGliZ2NyeXB0L2xpYmdjcnlwdC5pbmMKQEAgLTE0LDEwICsxNCwxMiBAQAogCiBERVBFTkRTID0gImxpYmdwZy1lcnJvciBsaWJjYXAiCiAKLVNSQ19VUkkgPSAiZnRwOi8vZnRwLmdudXBnLm9yZy9nY3J5cHQvbGliZ2NyeXB0L2xpYmdjcnlwdC0ke1BWfS50YXIuZ3ogXAorVVBTVFJFQU1fQ0hFQ0tfVVJJID0gImh0dHBzOi8vZ251cGcub3JnL2Rvd25sb2FkL2luZGV4Lmh0bWwiCitTUkNfVVJJID0gIiR7R05VUEdfTUlSUk9SfS9saWJnY3J5cHQvbGliZ2NyeXB0LSR7UFZ9LnRhci5neiBcCiAgICAgICAgICAgIGZpbGU6Ly9hZGQtcGtnY29uZmlnLXN1cHBvcnQucGF0Y2ggXAogICAgICAgICAgICBmaWxlOi8vbGliZ2NyeXB0LWZpeC1idWlsZGluZy1lcnJvci13aXRoLU8yLWluLXN5c3Jvb3QtcGF0aC5wYXRjaCBcCiAgICAgICAgICAgIGZpbGU6Ly9maXgtSUNFLWZhaWx1cmUtb24tbWlwcy13aXRoLW9wdGlvbi1PLWFuZC1nLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL2ZpeC11bmRlZmluZWQtcmVmZXJlbmNlLXRvLXB0aHJlYWQucGF0Y2ggXAogIgogCiBCSU5DT05GSUcgPSAiJHtiaW5kaXJ9L2xpYmdjcnlwdC1jb25maWciCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbGliZ2NyeXB0L2xpYmdjcnlwdF8xLjYuNS5iYiBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9saWJnY3J5cHQvbGliZ2NyeXB0XzEuNi41LmJiCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3MTdhMjNmLi4wMDAwMDAwCi0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9saWJnY3J5cHQvbGliZ2NyeXB0XzEuNi41LmJiCisrKyAvZGV2L251bGwKQEAgLTEsNCArMCwwIEBACi1yZXF1aXJlIGxpYmdjcnlwdC5pbmMKLQotU1JDX1VSSVttZDVzdW1dID0gImYyNGZjYjY4NDkzMmQ0YjVlZDg1ZjJmMDVjYjFkOWY4IgotU1JDX1VSSVtzaGEyNTZzdW1dID0gIjIwMmJmMTA5Y2NmMmQ2MTQ1NjVjODQ5ZjNlNTY4N2I5NGNkZTk3MjE2N2IzNTI2MWUwOTQyNTIzNjc2MjdiYzYiCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbGliZ2NyeXB0L2xpYmdjcnlwdF8xLjcuMy5iYiBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9saWJnY3J5cHQvbGliZ2NyeXB0XzEuNy4zLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRkZDdjNTMKLS0tIC9kZXYvbnVsbAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbGliZ2NyeXB0L2xpYmdjcnlwdF8xLjcuMy5iYgpAQCAtMCwwICsxLDQgQEAKK3JlcXVpcmUgbGliZ2NyeXB0LmluYworCitTUkNfVVJJW21kNXN1bV0gPSAiYmI1YjAwY2I3MGIxMjE1ODMzODU3ZmQ2OTAwODBmYmIiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiYzk4NDcwY2Y2YTc4MWYyYWY0YmRmZGE3MTBhZDM5ZjBmNTRiNTA0NGU4YzQzYjg3OGQ0MDA1NzM3ZDZjMjEzZiIKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9saWJncGctZXJyb3IvbGliZ3BnLWVycm9yLzAwMDEtbGliZ3BnLWVycm9yLUFkZC1uaW9zMi1zdXBwb3J0LnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2xpYmdwZy1lcnJvci9saWJncGctZXJyb3IvMDAwMS1saWJncGctZXJyb3ItQWRkLW5pb3MyLXN1cHBvcnQucGF0Y2gKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGRhYjFjMTMuLjAwMDAwMDAKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2xpYmdwZy1lcnJvci9saWJncGctZXJyb3IvMDAwMS1saWJncGctZXJyb3ItQWRkLW5pb3MyLXN1cHBvcnQucGF0Y2gKKysrIC9kZXYvbnVsbApAQCAtMSw0NiArMCwwIEBACi1Gcm9tIGIyYWY2NTJmNDM5OTFlNGNlNjI5NzkxN2RhNTQyYTllYjUxMzU5MzkgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCi1Gcm9tOiBNYXJlayBWYXN1dCA8bWFyZXhAZGVueC5kZT4KLURhdGU6IFRodSwgMTcgU2VwIDIwMTUgMDM6Mjg6MDYgKzAyMDAKLVN1YmplY3Q6IFtQQVRDSF0gbGliZ3BnLWVycm9yOiBBZGQgbmlvczIgc3VwcG9ydAotCi1BZGQgY29uZmlndXJhdGlvbiBmb3IgdGhlIE5JT1MyIHByb2Nlc3Nvci4KLQotU2lnbmVkLW9mZi1ieTogTWFyZWsgVmFzdXQgPG1hcmV4QGRlbnguZGU+Ci1VcHN0cmVhbS1TdGF0dXM6IFN1Ym1pdHRlZAotLS0tCi0gc3JjL3N5c2NmZy9sb2NrLW9iai1wdWIubmlvczItdW5rbm93bi1saW51eC1nbnUuaCB8IDIzICsrKysrKysrKysrKysrKysrKysrKysrCi0gMSBmaWxlIGNoYW5nZWQsIDIzIGluc2VydGlvbnMoKykKLSBjcmVhdGUgbW9kZSAxMDA2NDQgc3JjL3N5c2NmZy9sb2NrLW9iai1wdWIubmlvczItdW5rbm93bi1saW51eC1nbnUuaAotCi1kaWZmIC0tZ2l0IGEvc3JjL3N5c2NmZy9sb2NrLW9iai1wdWIubmlvczItdW5rbm93bi1saW51eC1nbnUuaCBiL3NyYy9zeXNjZmcvbG9jay1vYmotcHViLm5pb3MyLXVua25vd24tbGludXgtZ251LmgKLW5ldyBmaWxlIG1vZGUgMTAwNjQ0Ci1pbmRleCAwMDAwMDAwLi4zYTI0NTcxCi0tLS0gL2Rldi9udWxsCi0rKysgYi9zcmMvc3lzY2ZnL2xvY2stb2JqLXB1Yi5uaW9zMi11bmtub3duLWxpbnV4LWdudS5oCi1AQCAtMCwwICsxLDIzIEBACi0rIyMgbG9jay1vYmotcHViLm5pb3MyLXVua25vd24tbGludXgtZ251LmgKLSsjIyBGaWxlIGNyZWF0ZWQgYnkgZ2VuLXBvc2l4LWxvY2stb2JqIC0gRE8gTk9UIEVESVQKLSsjIyBUbyBiZSBpbmNsdWRlZCBieSBta2hlYWRlciBpbnRvIGdwZy1lcnJvci5oCi0rCi0rdHlwZWRlZiBzdHJ1Y3QKLSt7Ci0rICBsb25nIF92ZXJzOwotKyAgdW5pb24gewotKyAgICB2b2xhdGlsZSBjaGFyIF9wcml2WzI0XTsKLSsgICAgbG9uZyBfeF9hbGlnbjsKLSsgICAgbG9uZyAqX3hwX2FsaWduOwotKyAgfSB1OwotK30gZ3BncnRfbG9ja190OwotKwotKyNkZWZpbmUgR1BHUlRfTE9DS19JTklUSUFMSVpFUiB7MSx7ezAsMCwwLDAsMCwwLDAsMCwgXAotKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAsMCwwLDAsMCwwLDAsMCwgXAotKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAsMCwwLDAsMCwwLDAsMH19fQotKyMjCi0rIyMgTG9jYWwgVmFyaWFibGVzOgotKyMjIG1vZGU6IGMKLSsjIyBidWZmZXItcmVhZC1vbmx5OiB0Ci0rIyMgRW5kOgotKyMjCi0tLSAKLTIuNS4xCi0KZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9saWJncGctZXJyb3IvbGliZ3BnLWVycm9yXzEuMjEuYmIgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbGliZ3BnLWVycm9yL2xpYmdwZy1lcnJvcl8xLjIxLmJiCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwZGQxNjAyLi4wMDAwMDAwCi0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9saWJncGctZXJyb3IvbGliZ3BnLWVycm9yXzEuMjEuYmIKKysrIC9kZXYvbnVsbApAQCAtMSw1MyArMCwwIEBACi1TVU1NQVJZID0gIlNtYWxsIGxpYnJhcnkgdGhhdCBkZWZpbmVzIGNvbW1vbiBlcnJvciB2YWx1ZXMgZm9yIGFsbCBHbnVQRyBjb21wb25lbnRzIgotSE9NRVBBR0UgPSAiaHR0cDovL3d3dy5nbnVwZy5vcmcvcmVsYXRlZF9zb2Z0d2FyZS9saWJncGctZXJyb3IvIgotQlVHVFJBQ0tFUiA9ICJodHRwczovL2J1Z3MuZzEwY29kZS5jb20vZ251cGcvaW5kZXgiCi0KLUxJQ0VOU0UgPSAiR1BMdjIrICYgTEdQTHYyLjErIgotTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9NTk1MzBiZGYzMzY1OWIyOWU3M2Q0YWRiOWY5ZjY1NTIgXAotICAgICAgICAgICAgICAgICAgICBmaWxlOi8vQ09QWUlORy5MSUI7bWQ1PTJkNTAyNWQ0YWEzNDk1YmVmZWY4ZjE3MjA2YTViMGExIFwKLSAgICAgICAgICAgICAgICAgICAgZmlsZTovL3NyYy9ncGctZXJyb3IuaC5pbjtlbmRsaW5lPTIzO21kNT05M2QzMTU1YWYxNDFhZTNiMzY5YTVkMDljYTlkNjIzNCBcCi0gICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9zcmMvaW5pdC5jO2VuZGxpbmU9MjA7bWQ1PThmNWE5YjU5NjM0ZjRhZWJjZDBlYzlkM2ViZDUzYmZlIgotCi0KLVNFQ1RJT04gPSAibGlicyIKLQotU1JDX1VSSSA9ICJmdHA6Ly9mdHAuZ251cGcub3JnL2djcnlwdC9saWJncGctZXJyb3IvbGliZ3BnLWVycm9yLSR7UFZ9LnRhci5iejIgXAotICAgICAgICAgICBmaWxlOi8vcGtnY29uZmlnLnBhdGNoIFwKLQkgICBmaWxlOi8vMDAwMS1saWJncGctZXJyb3ItQWRkLW5pb3MyLXN1cHBvcnQucGF0Y2ggXAotCSAgIgotU1JDX1VSSVttZDVzdW1dID0gImFiMGI1YWJhNmQwYTE4NWI0MWQwN2JkYTgwNGZkOGIyIgotU1JDX1VSSVtzaGEyNTZzdW1dID0gImI3ZGJkYjNjYWQ2M2E3NDBlOWYwYzYzMmExZGEzMmQ0YWZkYjY5NGVjODZjODYyNWM5OGVhMDY5MTcxM2I4NGQiCi0KLUJJTkNPTkZJRyA9ICIke2JpbmRpcn0vZ3BnLWVycm9yLWNvbmZpZyIKLQotaW5oZXJpdCBhdXRvdG9vbHMgYmluY29uZmlnLWRpc2FibGVkIHBrZ2NvbmZpZyBnZXR0ZXh0Ci1DUFBGTEFHUyArPSAiLVAiCi1kb19jb21waWxlX3ByZXBlbmQoKSB7Ci0JVEFSR0VUX0ZJTEU9bGludXgtZ251Ci0JaWYgWyAke1RBUkdFVF9PU30gIT0gImxpbnV4IiBdOyB0aGVuCi0JCVRBUkdFVF9GSUxFPSR7VEFSR0VUX09TfQotCWZpCi0KLQljYXNlICR7VEFSR0VUX0FSQ0h9IGluCi0JICBhYXJjaDY0X2JlKSBUVVBMRT1hYXJjaDY0LXVua25vd24tbGludXgtZ251IDs7Ci0JICBhcm0pCSAgICAgIFRVUExFPWFybS11bmtub3duLWxpbnV4LWdudWVhYmkgOzsKLQkgIGFybWViKSAgICAgIFRVUExFPWFybS11bmtub3duLWxpbnV4LWdudWVhYmkgOzsKLQkgIGk1ODZ8aTY4NikgIFRVUExFPWk2ODYtcGMtbGludXgtZ251IDs7Ci0JICBtaXBzNjRlbCkgICBUVVBMRT1taXBzZWwtdW5rbm93bi1saW51eC1nbnUgOzsKLQkgIG1pcHM2NCkgICAgIFRVUExFPW1pcHMtdW5rbm93bi1saW51eC1nbnUgOzsKLQkgIHg4Nl82NCkgICAgIFRVUExFPXg4Nl82NC1wYy1saW51eC1nbnUgOzsKLQkgICopICAgICAgICAgIFRVUExFPSR7VEFSR0VUX0FSQ0h9LXVua25vd24tbGludXgtZ251IDs7IAotCWVzYWMKLQotCWNwICR7U30vc3JjL3N5c2NmZy9sb2NrLW9iai1wdWIuJFRVUExFLmggXAotCSAgJHtTfS9zcmMvc3lzY2ZnL2xvY2stb2JqLXB1Yi4kVEFSR0VUX0ZJTEUuaAotfQotCi1kb19pbnN0YWxsX2FwcGVuZCgpIHsKLQkjIHdlIGRvbid0IGhhdmUgY29tbW9uIGxpc3AgaW4gT0UKLQlybSAtcmYgIiR7RH0ke2RhdGFkaXJ9L2NvbW1vbi1saXNwLyIKLX0KLQotRklMRVNfJHtQTn0tZGV2ICs9ICIke2JpbmRpcn0vZ3BnLWVycm9yIgotCi1CQkNMQVNTRVhURU5EID0gIm5hdGl2ZSIKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9saWJncGctZXJyb3IvbGliZ3BnLWVycm9yXzEuMjQuYmIgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbGliZ3BnLWVycm9yL2xpYmdwZy1lcnJvcl8xLjI0LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg0YTg4MmEKLS0tIC9kZXYvbnVsbAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbGliZ3BnLWVycm9yL2xpYmdwZy1lcnJvcl8xLjI0LmJiCkBAIC0wLDAgKzEsNTMgQEAKK1NVTU1BUlkgPSAiU21hbGwgbGlicmFyeSB0aGF0IGRlZmluZXMgY29tbW9uIGVycm9yIHZhbHVlcyBmb3IgYWxsIEdudVBHIGNvbXBvbmVudHMiCitIT01FUEFHRSA9ICJodHRwOi8vd3d3LmdudXBnLm9yZy9yZWxhdGVkX3NvZnR3YXJlL2xpYmdwZy1lcnJvci8iCitCVUdUUkFDS0VSID0gImh0dHBzOi8vYnVncy5nMTBjb2RlLmNvbS9nbnVwZy9pbmRleCIKKworTElDRU5TRSA9ICJHUEx2MisgJiBMR1BMdjIuMSsiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT01OTUzMGJkZjMzNjU5YjI5ZTczZDRhZGI5ZjlmNjU1MiBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9DT1BZSU5HLkxJQjttZDU9MmQ1MDI1ZDRhYTM0OTViZWZlZjhmMTcyMDZhNWIwYTEgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vc3JjL2dwZy1lcnJvci5oLmluO2VuZGxpbmU9MjM7bWQ1PWNmNTYyZjYwYjlkYmE3ZGYyMGQ2ZWUzZjk3ZWExZDVhIFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL3NyYy9pbml0LmM7ZW5kbGluZT0yMDttZDU9ODcyYjIzODlmZTliYWU3ZmZiODBkMmI5MTIyNWFmYmMiCisKKworU0VDVElPTiA9ICJsaWJzIgorCitVUFNUUkVBTV9DSEVDS19VUkkgPSAiaHR0cHM6Ly9nbnVwZy5vcmcvZG93bmxvYWQvaW5kZXguaHRtbCIKK1NSQ19VUkkgPSAiJHtHTlVQR19NSVJST1J9L2xpYmdwZy1lcnJvci9saWJncGctZXJyb3ItJHtQVn0udGFyLmJ6MiBcCisgICAgICAgICAgIGZpbGU6Ly9wa2djb25maWcucGF0Y2ggXAorCSAgIgorU1JDX1VSSVttZDVzdW1dID0gImZlYjQyMTk4YzBhYWYzYjI4ZWFiZThmNDFhMzRiOTgzIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjkyNjhlMWNjNDg3ZGU1ZTZlNDQ2MGZjYTYxMmEwNmU0ZjM4MzA3MmFjNDNhZTkwNjAzZTVlNDY3ODNkM2U1NDAiCisKK0JJTkNPTkZJRyA9ICIke2JpbmRpcn0vZ3BnLWVycm9yLWNvbmZpZyIKKworaW5oZXJpdCBhdXRvdG9vbHMgYmluY29uZmlnLWRpc2FibGVkIHBrZ2NvbmZpZyBnZXR0ZXh0CitDUFBGTEFHUyArPSAiLVAiCitkb19jb21waWxlX3ByZXBlbmQoKSB7CisJVEFSR0VUX0ZJTEU9bGludXgtZ251CisJaWYgWyAke1RBUkdFVF9PU30gIT0gImxpbnV4IiBdOyB0aGVuCisJCVRBUkdFVF9GSUxFPSR7VEFSR0VUX09TfQorCWZpCisKKwljYXNlICR7VEFSR0VUX0FSQ0h9IGluCisJICBhYXJjaDY0X2JlKSBUVVBMRT1hYXJjaDY0LXVua25vd24tbGludXgtZ251IDs7CisJICBhcm0pCSAgICAgIFRVUExFPWFybS11bmtub3duLWxpbnV4LWdudWVhYmkgOzsKKwkgIGFybWViKSAgICAgIFRVUExFPWFybS11bmtub3duLWxpbnV4LWdudWVhYmkgOzsKKwkgIGk1ODZ8aTY4NikgIFRVUExFPWk2ODYtcGMtbGludXgtZ251IDs7CisJICBtaXBzKmVsKSAgICBUVVBMRT1taXBzZWwtdW5rbm93bi1saW51eC1nbnUgOzsKKwkgIG1pcHMqKSAgICAgIFRVUExFPW1pcHMtdW5rbm93bi1saW51eC1nbnUgOzsKKwkgIHg4Nl82NCkgICAgIFRVUExFPXg4Nl82NC1wYy1saW51eC1nbnUgOzsKKwkgICopICAgICAgICAgIFRVUExFPSR7VEFSR0VUX0FSQ0h9LXVua25vd24tbGludXgtZ251IDs7IAorCWVzYWMKKworCWNwICR7U30vc3JjL3N5c2NmZy9sb2NrLW9iai1wdWIuJFRVUExFLmggXAorCSAgJHtTfS9zcmMvc3lzY2ZnL2xvY2stb2JqLXB1Yi4kVEFSR0VUX0ZJTEUuaAorfQorCitkb19pbnN0YWxsX2FwcGVuZCgpIHsKKwkjIHdlIGRvbid0IGhhdmUgY29tbW9uIGxpc3AgaW4gT0UKKwlybSAtcmYgIiR7RH0ke2RhdGFkaXJ9L2NvbW1vbi1saXNwLyIKK30KKworRklMRVNfJHtQTn0tZGV2ICs9ICIke2JpbmRpcn0vZ3BnLWVycm9yIgorCitCQkNMQVNTRVhURU5EID0gIm5hdGl2ZSIKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9saWJpY2FsL2xpYmljYWwvMDAwMS1DTWFrZUxpc3RzLnR4dC1saWJpY2FsLnBjLmluLWZpeC1pY3VsaWJzLXJlbW92ZS1mdWxsLnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2xpYmljYWwvbGliaWNhbC8wMDAxLUNNYWtlTGlzdHMudHh0LWxpYmljYWwucGMuaW4tZml4LWljdWxpYnMtcmVtb3ZlLWZ1bGwucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmRiNzVmNQotLS0gL2Rldi9udWxsCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9saWJpY2FsL2xpYmljYWwvMDAwMS1DTWFrZUxpc3RzLnR4dC1saWJpY2FsLnBjLmluLWZpeC1pY3VsaWJzLXJlbW92ZS1mdWxsLnBhdGNoCkBAIC0wLDAgKzEsNDQgQEAKK0Zyb20gMWE0MTA2OWMwZGMwNTRlNTljZDc2ZmMzZDhjZjdjYzJhNzhiNWU4ZCBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEFsbGVuIFdpbnRlciA8YWxsZW4ud2ludGVyQGtkYWIuY29tPgorRGF0ZTogU2F0LCAzIFNlcCAyMDE2IDE2OjU2OjI5IC0wNDAwCitTdWJqZWN0OiBbUEFUQ0hdIENNYWtlTGlzdHMudHh0LCBsaWJpY2FsLnBjLmluIC0gZml4IGljdWxpYnMgKHJlbW92ZSBmdWxsIHBhdGgpIElTU1VFOiAyMjcKKworVXBzdHJlYW0tU3RhdHVzOiBCYWNrcG9ydAorCitTaWduZWQtb2ZmLWJ5OiBNYXhpbiBCLiBKb2huIDxtYXhpbi5qb2huQGludGVsLmNvbT4KKy0tLS0KK2RpZmYgLU5hdXIgbGliaWNhbC0yLjAuMC1vcmlnL0NNYWtlTGlzdHMudHh0IGxpYmljYWwtMi4wLjAvQ01ha2VMaXN0cy50eHQKKy0tLSBsaWJpY2FsLTIuMC4wLW9yaWcvQ01ha2VMaXN0cy50eHQJMjAxNi0wOS0wOCAxODowNTowNi4xNjYwNDkzNDUgKzAzMDAKKysrKyBsaWJpY2FsLTIuMC4wL0NNYWtlTGlzdHMudHh0CTIwMTYtMDktMDggMTg6MDU6NDUuMjAxNTYxMzM0ICswMzAwCitAQCAtMTI4LDYgKzEyOCw3IEBACisgIyAgUlNDQUxFIGluZm8gYXQgaHR0cDovL3Rvb2xzLmlldGYub3JnL2h0bWwvcmZjNzUyOQorIGZpbmRfcGFja2FnZShJQ1UpCisgaWYoSUNVX0ZPVU5EKQorKyAgc2V0KElDVVVDX0xJQlMgIi1saWN1dWMiKSAjZm9yIGxpYmljYWwucGMKKyAgIHNldChIQVZFX0xJQklDVSAxKQorICAgaWYoSUNVX01BSk9SX1ZFUlNJT04gVkVSU0lPTl9HUkVBVEVSIDUwKQorICAgICBzZXQoSEFWRV9JQ1VfREFOR0kgVFJVRSkKK0BAIC0xMzcsNiArMTM4LDcgQEAKKyBlbmRpZigpCisgaWYoSUNVX0kxOE5fRk9VTkQpCisgICBzZXQoSEFWRV9MSUJJQ1VfSTE4TiAxKQorKyAgc2V0KElDVUkxOE5fTElCUyAiLWxpY3VpMThuIikgI2ZvciBsaWJpY2FsLnBjCisgZW5kaWYoKQorIAorICMgTVNWQyBzcGVjaWZpYyBkZWZpbml0aW9ucworZGlmZiAtTmF1ciBsaWJpY2FsLTIuMC4wLW9yaWcvbGliaWNhbC5wYy5pbiBsaWJpY2FsLTIuMC4wL2xpYmljYWwucGMuaW4KKy0tLSBsaWJpY2FsLTIuMC4wLW9yaWcvbGliaWNhbC5wYy5pbgkyMDE1LTEyLTI4IDIzOjQ0OjUzLjAwMDAwMDAwMCArMDIwMAorKysrIGxpYmljYWwtMi4wLjAvbGliaWNhbC5wYy5pbgkyMDE2LTA5LTA4IDE4OjA5OjEyLjk5MTk2MzU5NyArMDMwMAorQEAgLTMsMTAgKzMsMTAgQEAKKyBsaWJkaXI9QGxpYmRpckAKKyBpbmNsdWRlZGlyPUBpbmNsdWRlZGlyQAorIHRocmVhZHNsaWI9QFBUSFJFQURfTElCU0AKKy1pY3VsaWI9QElDVV9MSUJSQVJJRVNAIEBJQ1VfSTE4Tl9MSUJSQVJJRVNACisraWN1bGlicz1ASUNVVUNfTElCU0AgQElDVUkxOE5fTElCU0AKKyAKKyBOYW1lOiBsaWJpY2FsCisgRGVzY3JpcHRpb246IEFuIGltcGxlbWVudGF0aW9uIG9mIGJhc2ljIGlDQUwgcHJvdG9jb2xzCisgVmVyc2lvbjogQFZFUlNJT05ACistTGliczogLUwke2xpYmRpcn0gLWxpY2FsIC1saWNhbHNzIC1saWNhbHZjYWwgJHt0aHJlYWRzbGlifSAke2ljdWxpYn0KKytMaWJzOiAtTCR7bGliZGlyfSAtbGljYWwgLWxpY2Fsc3MgLWxpY2FsdmNhbCAke3RocmVhZHNsaWJ9ICR7aWN1bGlic30KKyBDZmxhZ3M6IC1JJHtpbmNsdWRlZGlyfQpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2xpYmljYWwvbGliaWNhbF8yLjAuMC5iYiBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9saWJpY2FsL2xpYmljYWxfMi4wLjAuYmIKaW5kZXggMTA0MmU2Zi4uZDRmZTg2OCAxMDA2NDQKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2xpYmljYWwvbGliaWNhbF8yLjAuMC5iYgorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbGliaWNhbC9saWJpY2FsXzIuMC4wLmJiCkBAIC04LDYgKzgsNyBAQAogCiBTUkNfVVJJID0gImh0dHBzOi8vZ2l0aHViLmNvbS8ke0JQTn0vJHtCUE59L3JlbGVhc2VzL2Rvd25sb2FkL3Yke1BWfS8ke0JQfS50YXIuZ3ogXAogICAgICAgICAgICBmaWxlOi8vUmVtb3ZlLWNtYWtlLWNoZWNrLWZvci1QZXJsLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovLzAwMDEtQ01ha2VMaXN0cy50eHQtbGliaWNhbC5wYy5pbi1maXgtaWN1bGlicy1yZW1vdmUtZnVsbC5wYXRjaCBcCiAgICAgICAgICAgICIKIERFUEVORFMgPSAiaWN1IgogCkBAIC0xNSwxMyArMTYsNiBAQAogU1JDX1VSSVtzaGEyNTZzdW1dID0gIjY1NGMxMWY3NTljMTkyMzdiZTM5ZjZhZDQwMWQ5MTdlNWEwNWYzNmYxNzM2Mzg1ZWQ5NThlNjBjZjIxNDU2ZGEiCiBVUFNUUkVBTV9DSEVDS19VUkkgPSAiaHR0cHM6Ly9naXRodWIuY29tL2xpYmljYWwvbGliaWNhbC9yZWxlYXNlcyIKIAotaW5oZXJpdCBjbWFrZQoraW5oZXJpdCBjbWFrZSBwa2djb25maWcKIAogRklMRVNfJHtQTn0tZGV2ICs9ICIke2xpYmRpcn0vY21ha2UvKiIKLQotIwotIyBUdXJuIHNwZWNpZmljIGxpYnJhcnkgcGF0aHMgaW4gdGhlIHBrZ2NvbmZpZyBmaWxlIGludG8gc3RhbmRhcmQgbGlicmFyeSBlbnRyaWVzCi0jCi1kb19pbnN0YWxsX2FwcGVuZCAoKSB7Ci0Jc2VkIC1pIC1lICJzIyR7U1RBR0lOR19MSUJESVJ9L2xpYlwoW2EtejAtOV0qXClcLnNvIy1sXDEjZyIgJHtEfSR7bGliZGlyfS9wa2djb25maWcvbGliaWNhbC5wYwotfQpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2xpYmtzYmEvbGlia3NiYV8xLjMuMy5iYiBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9saWJrc2JhL2xpYmtzYmFfMS4zLjMuYmIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGJjMjExNjQuLjAwMDAwMDAKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2xpYmtzYmEvbGlia3NiYV8xLjMuMy5iYgorKysgL2Rldi9udWxsCkBAIC0xLDI1ICswLDAgQEAKLVNVTU1BUlkgPSAiRWFzeSBBUEkgdG8gY3JlYXRlIGFuZCBwYXJzZSBYLjUwOSBhbmQgQ01TIHJlbGF0ZWQgb2JqZWN0cyIKLUhPTUVQQUdFID0gImh0dHA6Ly93d3cuZ251cGcub3JnL3JlbGF0ZWRfc29mdHdhcmUvbGlia3NiYS8iCi1MSUNFTlNFID0gIkdQTHYyKyB8IExHUEx2MysgfCBHUEx2MysiCi1MSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT1mZDU0MWQ4M2Y3NWQwMzhjNGUwNjE3YjY3MmVkOGJkYSBcCi0gICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9DT1BZSU5HLkdQTHYyO21kNT1iMjM0ZWU0ZDY5ZjVmY2U0NDg2YTgwZmRhZjRhNDI2MyBcCi0gICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9DT1BZSU5HLkdQTHYzO21kNT0yZjMxYjI2NmQzNDQwZGQ3ZWU1MGY5MmNmNjdkOGU2YyBcCi0gICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9DT1BZSU5HLkxHUEx2MzttZDU9ZTZhNjAwZmQ1ZTFkOWNiZGUyZDk4MzY4MDIzM2FkMDIgXAotICAgICAgICAgICAgICAgICAgICIKLQotREVQRU5EUyA9ICJsaWJncGctZXJyb3IiCi0KLUJJTkNPTkZJRyA9ICIke2JpbmRpcn0va3NiYS1jb25maWciCi0KLWluaGVyaXQgYXV0b3Rvb2xzIGJpbmNvbmZpZy1kaXNhYmxlZCBwa2djb25maWcgdGV4aW5mbwotCi1TUkNfVVJJID0gImZ0cDovL2Z0cC5nbnVwZy5vcmcvZ2NyeXB0LyR7QlBOfS8ke0JQTn0tJHtQVn0udGFyLmJ6MiBcCi0gICAgICAgICAgIGZpbGU6Ly9rc2JhLWFkZC1wa2djb25maWctc3VwcG9ydC5wYXRjaCIKLQotU1JDX1VSSVttZDVzdW1dID0gImE1ZGQzYzU3ZmNhMjU0OTM1ZjVjZjhkYjI2ZTM5MDY1IgotU1JDX1VSSVtzaGEyNTZzdW1dID0gIjBjN2Y1ZmZlMzRkMDQxNGY2OTUxZDk4ODBhNDZmY2MyOTg1YzQ4N2Y3YzM2MzY5YjlmMTFhZDQxMTMxYzc3ODYiCi0KLWRvX2NvbmZpZ3VyZV9wcmVwZW5kICgpIHsKLQkjIEVsc2UgdGhlc2UgY291bGQgYmUgdXNlZCBpbiBwcmVmZXJlbmNlIHRvIHRob3NlIGluIGFjbG9jYWwtY29weQotCXJtIC1mICR7U30vbTQvZ3BnLWVycm9yLm00Ci19CmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbGlia3NiYS9saWJrc2JhXzEuMy40LmJiIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2xpYmtzYmEvbGlia3NiYV8xLjMuNC5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNjgyNTVjCi0tLSAvZGV2L251bGwKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2xpYmtzYmEvbGlia3NiYV8xLjMuNC5iYgpAQCAtMCwwICsxLDI2IEBACitTVU1NQVJZID0gIkVhc3kgQVBJIHRvIGNyZWF0ZSBhbmQgcGFyc2UgWC41MDkgYW5kIENNUyByZWxhdGVkIG9iamVjdHMiCitIT01FUEFHRSA9ICJodHRwOi8vd3d3LmdudXBnLm9yZy9yZWxhdGVkX3NvZnR3YXJlL2xpYmtzYmEvIgorTElDRU5TRSA9ICJHUEx2MisgfCBMR1BMdjMrIHwgR1BMdjMrIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9ZmQ1NDFkODNmNzVkMDM4YzRlMDYxN2I2NzJlZDhiZGEgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vQ09QWUlORy5HUEx2MjttZDU9YjIzNGVlNGQ2OWY1ZmNlNDQ4NmE4MGZkYWY0YTQyNjMgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vQ09QWUlORy5HUEx2MzttZDU9MmYzMWIyNjZkMzQ0MGRkN2VlNTBmOTJjZjY3ZDhlNmMgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vQ09QWUlORy5MR1BMdjM7bWQ1PWU2YTYwMGZkNWUxZDljYmRlMmQ5ODM2ODAyMzNhZDAyIFwKKyAgICAgICAgICAgICAgICAgICAiCisKK0RFUEVORFMgPSAibGliZ3BnLWVycm9yIgorCitCSU5DT05GSUcgPSAiJHtiaW5kaXJ9L2tzYmEtY29uZmlnIgorCitpbmhlcml0IGF1dG90b29scyBiaW5jb25maWctZGlzYWJsZWQgcGtnY29uZmlnIHRleGluZm8KKworVVBTVFJFQU1fQ0hFQ0tfVVJJID0gImh0dHBzOi8vZ251cGcub3JnL2Rvd25sb2FkL2luZGV4Lmh0bWwiCitTUkNfVVJJID0gIiR7R05VUEdfTUlSUk9SfS8ke0JQTn0vJHtCUE59LSR7UFZ9LnRhci5iejIgXAorICAgICAgICAgICBmaWxlOi8va3NiYS1hZGQtcGtnY29uZmlnLXN1cHBvcnQucGF0Y2giCisKK1NSQ19VUklbbWQ1c3VtXSA9ICIyYmZjM2Q2OTA1M2RiN2I2OTgzYjU2Mjc3MDYwMzNmNCIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICJmNmMyODgzY2ViZWM1NjA4NjkyZDg3MzA4NDNkODdmMjM3YzA5NjRkOTIzYmJlN2FhODljMDVmMjA1NThhZDRmIgorCitkb19jb25maWd1cmVfcHJlcGVuZCAoKSB7CisJIyBFbHNlIHRoZXNlIGNvdWxkIGJlIHVzZWQgaW4gcHJlZmVyZW5jZSB0byB0aG9zZSBpbiBhY2xvY2FsLWNvcHkKKwlybSAtZiAke1N9L200L2dwZy1lcnJvci5tNAorfQpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2xpYm5sL2xpYm5sLzAwMDEtbGliLWFkZC11dGlsaXR5LWZ1bmN0aW9uLW5sX3N0cmVycm9yX2wucGF0Y2ggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbGlibmwvbGlibmwvMDAwMS1saWItYWRkLXV0aWxpdHktZnVuY3Rpb24tbmxfc3RyZXJyb3JfbC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNzM0MDI4Ci0tLSAvZGV2L251bGwKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2xpYm5sL2xpYm5sLzAwMDEtbGliLWFkZC11dGlsaXR5LWZ1bmN0aW9uLW5sX3N0cmVycm9yX2wucGF0Y2gKQEAgLTAsMCArMSwxNDYgQEAKK0Zyb20gNjgzZjI3ZmJiNjhjYTIwMjhhN2IzNDY4ZjE3MTY0ZDQ4NGRmMjc1OSBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206ID0/VVRGLTg/cT9BbmRyPUMzPUE5PTIwRHJhc3ppaz89IDxhZHJhc3ppa0B0eWNvaW50LmNvbT4KK0RhdGU6IFRodSwgMjUgQXVnIDIwMTYgMTM6MTQ6NTkgKzAxMDAKK1N1YmplY3Q6IFtQQVRDSCAxLzNdIGxpYjogYWRkIHV0aWxpdHkgZnVuY3Rpb24gbmxfc3RyZXJyb3JfbCgpCitNSU1FLVZlcnNpb246IDEuMAorQ29udGVudC1UeXBlOiB0ZXh0L3BsYWluOyBjaGFyc2V0PVVURi04CitDb250ZW50LVRyYW5zZmVyLUVuY29kaW5nOiA4Yml0CisKK2xpYm5sIGN1cnJlbnRseSB1c2VzIHN0cmVycm9yX3IoKSB0aHJvdWdob3V0LCBidXQgdGhpcyBpcworcHJvYmxlbWF0aWMgYmVjYXVzZSB0aGVyZSBpcyBhIG5vbi1zdGFuZGFyZCBHTlUgdmVyc2lvbgoraW1wbGVtZW50ZWQgaW4gZ2xpYmMsIGFuZCB0aGUgc3RhbmRhcmQgUE9TSVggdmVyc2lvbiwgd2hpY2gKK2RpZmZlciBpbiBzaWduYXR1cmUuIFdoZW4gdXNpbmcgZ2xpYmMsIG9uZSBjYW4gY2hvb3NlCitiZXR3ZWVuIHRoZSB0d28gdmVyc2lvbnMgdXNpbmcgZmVhdHVyZSB0ZXN0IG1hY3JvcworX0dOVV9TT1VSQ0UgYW5kIF9QT1NJWF9DX1NPVVJDRS4KKworR2l2ZW4gbGlibmwgaXMgYnVpbHQgdXNpbmcgdGhlIGZvcm1lciwgd2UgYWx3YXlzIGdldCB0aGUKK2dsaWJjIHNwZWNpYWwgdmVyc2lvbiwgYW5kIGFsbCBjb2RlIHNvIGZhciBoYXMgYmVlbiB3cml0dGVuCitmb3IgdGhhdCBub24tc3RhbmRhcmQgdmVyc2lvbi4KKworT3RoZXIgQyBsaWJyYXJpZXMgbGlrZSBtdXNsIG9uIHRoZSBvdGhlciBoYW5kIG9ubHkgdHJ5Cit0byBiZSBwb3NpeCBjb21wbGlhbnQsIGFuZCBvbmx5IGV2ZXIgcHJvdmlkZSB0aGUgcG9zaXgKK3ZlcnNpb24gb2Ygc3RyZXJyb3JfcigpLCB3aGljaCBoYXMgYSBkaWZmZXJlbnQgc2lnbmF0dXJlLgorCitUaGUgYWx0ZXJuYXRpdmUgaXMgdG8gdXNlIHN0cmVycm9yX2woKSByYXRoZXIgdGhhbgorc3RyZXJyb3JfcigpIGh0dHA6Ly9hdXN0aW5ncm91cGJ1Z3MubmV0L3ZpZXcucGhwP2lkPTY1NQorLSB0aGlzIHdpbGwgYXZvaWQgdGhlIG5vbi1jb25maXJtaW5nIHZlcnNpb25zIGlzc3VlCistIHN0cmVycm9yX2woKSBpcyBub3cgcmVjb21tZW5kZWQgYnkgUE9TSVggdG8gcmVwbGFjZQorICBzdHJlcnJvcl9yKCkgdXNhZ2UKKworU28gcmF0aGVyIHRoYW4gY2hhbmdpbmcgYWxsIHVzZXMgb2Ygc3RyZXJyb3JfcigpIHRvIGJlIGluCitsaW5lIHdpdGggcG9zaXgsIHdlIGFyZSBnb2luZyB0byBzd2l0Y2ggdG8gdGhlIHJlY29tbWVuZGVkCitpbnRlcmZhY2Ugc3RyZXJyb3JfbCgpLgorCitTaW5jZSBzdHJlcnJvcl9sKCkgaXMgc2xpZ2h0bHkgbW9yZSBkaWZmaWN1bHkgdG8gdXNlLCB3ZQorYWRkIGEgbGl0dGxlIChwcml2YXRlKSB3cmFwcGVyIHRoYXQgd2UgY2FuIHVzZSBmcm9tIGFsbAorY3VycmVudCBjYWxsc2l0ZXMgb2Ygc3RyZXJyb3JfcigpLgorCitTaWduZWQtb2ZmLWJ5OiBBbmRyw6kgRHJhc3ppayA8YWRyYXN6aWtAdHljb2ludC5jb20+CitSZXZpZXdlZC1ieTogU3RlcGhhbmUgQXlvdHRlIDxzYXlvdHRlQHR5Y29pbnQuY29tPgorU2lnbmVkLW9mZi1ieTogVGhvbWFzIEhhbGxlciA8dGhhbGxlckByZWRoYXQuY29tPgorLS0tCitVcHN0cmVhbS1TdGF0dXM6IEJhY2twb3J0IGh0dHBzOi8vZ2l0aHViLmNvbS90aG9tMzExL2xpYm5sL2NvbW1pdC82ODNmMjdmYmI2OGNhMjAyOGE3YjM0NjhmMTcxNjRkNDg0ZGYyNzU5CisgaW5jbHVkZS9NYWtlZmlsZS5hbSAgICAgICAgICAgICB8ICAxICsKKyBpbmNsdWRlL25ldGxpbmstcHJpdmF0ZS91dGlscy5oIHwgMTcgKysrKysrKysrKysrKysrKysKKyBsaWIvdXRpbHMuYyAgICAgICAgICAgICAgICAgICAgIHwgMjQgKysrKysrKysrKysrKysrKysrKysrKysrCisgbGlibmwtMy5zeW0gICAgICAgICAgICAgICAgICAgICB8ICA1ICsrKysrCisgNCBmaWxlcyBjaGFuZ2VkLCA0NyBpbnNlcnRpb25zKCspCisgY3JlYXRlIG1vZGUgMTAwNjQ0IGluY2x1ZGUvbmV0bGluay1wcml2YXRlL3V0aWxzLmgKKworZGlmZiAtLWdpdCBhL2luY2x1ZGUvTWFrZWZpbGUuYW0gYi9pbmNsdWRlL01ha2VmaWxlLmFtCitpbmRleCA4MDRlOTg0Li5mOGI5NzdhIDEwMDY0NAorLS0tIGEvaW5jbHVkZS9NYWtlZmlsZS5hbQorKysrIGIvaW5jbHVkZS9NYWtlZmlsZS5hbQorQEAgLTE2Niw2ICsxNjYsNyBAQCBub2luc3RfSEVBREVSUyA9IFwKKyAJbmV0bGluay1wcml2YXRlL3NvY2tldC5oIFwKKyAJbmV0bGluay1wcml2YXRlL3RjLmggXAorIAluZXRsaW5rLXByaXZhdGUvdHlwZXMuaCBcCisrCW5ldGxpbmstcHJpdmF0ZS91dGlscy5oIFwKKyAJbmV0bGluay1wcml2YXRlL2NhY2hlLWFwaS5oIFwKKyAJbmV0bGluay1wcml2YXRlL29iamVjdC1hcGkuaCBcCisgCW5ldGxpbmstcHJpdmF0ZS9yb3V0ZS9saW5rL2FwaS5oIFwKK2RpZmYgLS1naXQgYS9pbmNsdWRlL25ldGxpbmstcHJpdmF0ZS91dGlscy5oIGIvaW5jbHVkZS9uZXRsaW5rLXByaXZhdGUvdXRpbHMuaAorbmV3IGZpbGUgbW9kZSAxMDA2NDQKK2luZGV4IDAwMDAwMDAuLjc3YWFkYjMKKy0tLSAvZGV2L251bGwKKysrKyBiL2luY2x1ZGUvbmV0bGluay1wcml2YXRlL3V0aWxzLmgKK0BAIC0wLDAgKzEsMTcgQEAKKysvKgorKyAqIG5ldGxpbmstcHJpdmF0ZS91dGlscy5oCUxvY2FsIFV0aWxpdHkgRnVuY3Rpb25zCisrICoKKysgKglUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisrICoJbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworKyAqCUxpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24gdmVyc2lvbiAyLjEKKysgKglvZiB0aGUgTGljZW5zZS4KKysgKgorKyAqIENvcHlyaWdodCAoYykgMjAwMy0yMDEyIFRob21hcyBHcmFmIDx0Z3JhZkBzdXVnLmNoPgorKyAqLworKworKyNpZm5kZWYgTkVUTElOS19VVElMU19QUklWX0hfCisrI2RlZmluZSBORVRMSU5LX1VUSUxTX1BSSVZfSF8KKysKKytleHRlcm4gY29uc3QgY2hhciAqCW5sX3N0cmVycm9yX2woaW50IGVycik7CisrCisrI2VuZGlmCitkaWZmIC0tZ2l0IGEvbGliL3V0aWxzLmMgYi9saWIvdXRpbHMuYworaW5kZXggNjFjM2Q5NS4uYzFjMWI3MiAxMDA2NDQKKy0tLSBhL2xpYi91dGlscy5jCisrKysgYi9saWIvdXRpbHMuYworQEAgLTI1LDEwICsyNSwxMiBAQAorICAqLworIAorICNpbmNsdWRlIDxuZXRsaW5rLXByaXZhdGUvbmV0bGluay5oPgorKyNpbmNsdWRlIDxuZXRsaW5rLXByaXZhdGUvdXRpbHMuaD4KKyAjaW5jbHVkZSA8bmV0bGluay9uZXRsaW5rLmg+CisgI2luY2x1ZGUgPG5ldGxpbmsvdXRpbHMuaD4KKyAjaW5jbHVkZSA8bGludXgvc29ja2V0Lmg+CisgI2luY2x1ZGUgPHN0ZGxpYi5oPiAvKiBleGl0KCkgKi8KKysjaW5jbHVkZSA8bG9jYWxlLmg+CisgCisgLyoqCisgICogR2xvYmFsIHZhcmlhYmxlIGluZGljYXRpbmcgdGhlIGRlc2lyZWQgbGV2ZWwgb2YgZGVidWdnaW5nIG91dHB1dC4KK0BAIC0xMTgsNiArMTIwLDI4IEBAIGludCBfX25sX3JlYWRfbnVtX3N0cl9maWxlKGNvbnN0IGNoYXIgKnBhdGgsIGludCAoKmNiKShsb25nLCBjb25zdCBjaGFyICopKQorIAorIAlyZXR1cm4gMDsKKyB9CisrCisrY29uc3QgY2hhciAqbmxfc3RyZXJyb3JfbChpbnQgZXJyKQorK3sKKysJaW50IGVycm5vX3NhdmUgPSBlcnJubzsKKysJbG9jYWxlX3QgbG9jID0gbmV3bG9jYWxlKExDX01FU1NBR0VTX01BU0ssICIiLCAobG9jYWxlX3QpMCk7CisrCWNvbnN0IGNoYXIgKmJ1ZjsKKysKKysJaWYgKGxvYyA9PSAobG9jYWxlX3QpMCkgeworKwkJaWYgKGVycm5vID09IEVOT0VOVCkKKysJCQlsb2MgPSBuZXdsb2NhbGUoTENfTUVTU0FHRVNfTUFTSywKKysJCQkJCSJQT1NJWCIsIChsb2NhbGVfdCkwKTsKKysJfQorKwlpZiAobG9jICE9IChsb2NhbGVfdCkwKSB7CisrCQlidWYgPSBzdHJlcnJvcl9sKGVyciwgbG9jKTsKKysJCWZyZWVsb2NhbGUobG9jKTsKKysJfSBlbHNlIHsKKysJCWJ1ZiA9ICJuZXdsb2NhbGUoKSBmYWlsZWQiOworKwl9CisrCisrCWVycm5vID0gZXJybm9fc2F2ZTsKKysJcmV0dXJuIGJ1ZjsKKyt9CisgLyoqIEBlbmRjb25kICovCisgCisgLyoqCitkaWZmIC0tZ2l0IGEvbGlibmwtMy5zeW0gYi9saWJubC0zLnN5bQoraW5kZXggNGUwOWJkZC4uOTExOWU2NiAxMDA2NDQKKy0tLSBhL2xpYm5sLTMuc3ltCisrKysgYi9saWJubC0zLnN5bQorQEAgLTM1MSwzICszNTEsOCBAQCBsaWJubF8zXzJfMjggeworIGdsb2JhbDoKKyAJbmxfb2JqZWN0X2RpZmY2NDsKKyB9IGxpYm5sXzNfMl8yNzsKKysKKytsaWJubF8zXzJfMjkgeworK2dsb2JhbDoKKysJbmxfc3RyZXJyb3JfbDsKKyt9IGxpYm5sXzNfMl8yODsKKy0tIAorMi45LjMKKwpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2xpYm5sL2xpYm5sLzAwMDItbGliLXN3aXRjaC10by11c2luZy1zdHJlcnJvcl9sLWluc3RlYWQtb2Ytc3RyZXJyb3Jfci5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9saWJubC9saWJubC8wMDAyLWxpYi1zd2l0Y2gtdG8tdXNpbmctc3RyZXJyb3JfbC1pbnN0ZWFkLW9mLXN0cmVycm9yX3IucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjM0N2VjMAotLS0gL2Rldi9udWxsCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9saWJubC9saWJubC8wMDAyLWxpYi1zd2l0Y2gtdG8tdXNpbmctc3RyZXJyb3JfbC1pbnN0ZWFkLW9mLXN0cmVycm9yX3IucGF0Y2gKQEAgLTAsMCArMSw0MDMgQEAKK0Zyb20gYzE5NDhlYzI5YjhkY2RjNThkMmQ5MjcwMGMzMjVhYmRlYWIxMTFhNiBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206ID0/VVRGLTg/cT9BbmRyPUMzPUE5PTIwRHJhc3ppaz89IDxhZHJhc3ppa0B0eWNvaW50LmNvbT4KK0RhdGU6IFRodSwgMjUgQXVnIDIwMTYgMTM6MTU6MDAgKzAxMDAKK1N1YmplY3Q6IFtQQVRDSCAyLzNdIGxpYjogc3dpdGNoIHRvIHVzaW5nIHN0cmVycm9yX2woKSBpbnN0ZWFkIG9mIHN0cmVycm9yX3IoKQorTUlNRS1WZXJzaW9uOiAxLjAKK0NvbnRlbnQtVHlwZTogdGV4dC9wbGFpbjsgY2hhcnNldD1VVEYtOAorQ29udGVudC1UcmFuc2Zlci1FbmNvZGluZzogOGJpdAorCitnbGliYyBwcm92aWRlcyB0d28gdmVyc2lvbnMgb2Ygc3RyZXJyb3JfcigpLCB3aGljaAorY2FuIGJlIGNob3NlbiBiZXR3ZWVuIHVzaW5nIGZlYXR1cmUgdGVzdCBtYWNyb3MKK19HTlVfU09VUkNFIGFuZCBfUE9TSVhfQ19TT1VSQ0UuIGxpYm5sIGlzIGJ1aWx0IHVzaW5nCit0aGUgZm9ybWVyLCBoZW5jZSB3ZSBnZXQgdGhlIGdsaWJjIHNwZWNpYWwgdmVyc2lvbiwKK2FuZCBhbGwgY29kZSBzbyBmYXIgaGFzIGJlZW4gd3JpdHRlbiBmb3IgdGhpcy4KKworT3RoZXIgQyBsaWJyYXJpZXMgbGlrZSBtdXNsIG9uIHRoZSBvdGhlciBoYW5kIG9ubHkgdHJ5Cit0byBiZSBwb3NpeCBjb21wbGlhbnQsIGFuZCBvbmx5IGV2ZXIgcHJvdmlkZSB0aGUgcG9zaXgKK3ZlcnNpb24gb2Ygc3RyZXJyb3JfcigpLCB3aGljaCBoYXMgYSBkaWZmZXJlbnQgc2lnbmF0dXJlLgorCitVc2VzIGluIGxpYm5sIGhlbmNlIGdlbmVyYWxseSBjYXVzZSBwcmludGYoKSBvZiBhbiAqaW50Kgord2l0aCBhICpzdHJpbmcgZm9ybWF0KiBzcGVjaWZpZXIgZm9yIHRoYXQgcmVhc29uLgorCitBZGRpdGlvbmFsbHksIHN0cmVycm9yX3IoKSBoYXMgYmVlbiBkZXByZWNhdGVkOgorICBodHRwOi8vYXVzdGluZ3JvdXBidWdzLm5ldC92aWV3LnBocD9pZD02NTUKKworU3dpdGNoIHRvIHVzaW5nIHN0cmVycm9yX2woKSAodmlhIG91ciB3cmFwcGVyIGp1c3QKK2ludHJvZHVjZWQpLgorCitTaWduZWQtb2ZmLWJ5OiBBbmRyw6kgRHJhc3ppayA8YWRyYXN6aWtAdHljb2ludC5jb20+CitSZXZpZXdlZC1ieTogU3RlcGhhbmUgQXlvdHRlIDxzYXlvdHRlQHR5Y29pbnQuY29tPgorU2lnbmVkLW9mZi1ieTogVGhvbWFzIEhhbGxlciA8dGhhbGxlckByZWRoYXQuY29tPgorLS0tCitVcHN0cmVhbS1TdGF0dXM6IEJhY2twb3J0IGh0dHBzOi8vZ2l0aHViLmNvbS90aG9tMzExL2xpYm5sL2NvbW1pdC9jMTk0OGVjMjliOGRjZGM1OGQyZDkyNzAwYzMyNWFiZGVhYjExMWE2CisgbGliL2NhY2hlX21uZ3IuYyAgICAgICAgfCAgNSArKy0tLQorIGxpYi9maWJfbG9va3VwL2xvb2t1cC5jIHwgIDMgKystCisgbGliL2hhbmRsZXJzLmMgICAgICAgICAgfCAgNCArKy0tCisgbGliL21zZy5jICAgICAgICAgICAgICAgfCAgNCArKy0tCisgbGliL25sLmMgICAgICAgICAgICAgICAgfCAyNiArKysrKysrKystLS0tLS0tLS0tLS0tLS0tLQorIGxpYi9yb3V0ZS9yb3V0ZV9vYmouYyAgIHwgIDMgKystCisgbGliL3NvY2tldC5jICAgICAgICAgICAgfCAzMyArKysrKysrKysrKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyA3IGZpbGVzIGNoYW5nZWQsIDMwIGluc2VydGlvbnMoKyksIDQ4IGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvbGliL2NhY2hlX21uZ3IuYyBiL2xpYi9jYWNoZV9tbmdyLmMKK2luZGV4IGI5ZWIzNDUuLjFmMjNlYjEgMTAwNjQ0CistLS0gYS9saWIvY2FjaGVfbW5nci5jCisrKysgYi9saWIvY2FjaGVfbW5nci5jCitAQCAtMzMsNiArMzMsNyBAQAorICAqLworIAorICNpbmNsdWRlIDxuZXRsaW5rLXByaXZhdGUvbmV0bGluay5oPgorKyNpbmNsdWRlIDxuZXRsaW5rLXByaXZhdGUvdXRpbHMuaD4KKyAjaW5jbHVkZSA8bmV0bGluay9uZXRsaW5rLmg+CisgI2luY2x1ZGUgPG5ldGxpbmsvY2FjaGUuaD4KKyAjaW5jbHVkZSA8bmV0bGluay91dGlscy5oPgorQEAgLTM5MiwxMCArMzkzLDggQEAgaW50IG5sX2NhY2hlX21uZ3JfcG9sbChzdHJ1Y3QgbmxfY2FjaGVfbW5nciAqbW5nciwgaW50IHRpbWVvdXQpCisgCXJldCA9IHBvbGwoJmZkcywgMSwgdGltZW91dCk7CisgCU5MX0RCRygzLCAiQ2FjaGUgbWFuYWdlciAlcCwgcG9sbCgpIHJldHVybmVkICVkXG4iLCBtbmdyLCByZXQpOworIAlpZiAocmV0IDwgMCkgeworLQkJY2hhciBidWZbNjRdOworLQorIAkJTkxfREJHKDQsICJubF9jYWNoZV9tbmdyX3BvbGwoJXApOiBwb2xsKCkgZmFpbGVkIHdpdGggJWQgKCVzKVxuIiwKKy0JCQltbmdyLCBlcnJubywgc3RyZXJyb3JfcihlcnJubywgYnVmLCBzaXplb2YoYnVmKSkpOworKwkJCW1uZ3IsIGVycm5vLCBubF9zdHJlcnJvcl9sKGVycm5vKSk7CisgCQlyZXR1cm4gLW5sX3N5c2VycjJubGVycihlcnJubyk7CisgCX0KKyAKK2RpZmYgLS1naXQgYS9saWIvZmliX2xvb2t1cC9sb29rdXAuYyBiL2xpYi9maWJfbG9va3VwL2xvb2t1cC5jCitpbmRleCA0M2I2MTI2Li5lZmM4NjJiIDEwMDY0NAorLS0tIGEvbGliL2ZpYl9sb29rdXAvbG9va3VwLmMKKysrKyBiL2xpYi9maWJfbG9va3VwL2xvb2t1cC5jCitAQCAtMTcsNiArMTcsNyBAQAorICAqLworIAorICNpbmNsdWRlIDxuZXRsaW5rLXByaXZhdGUvbmV0bGluay5oPgorKyNpbmNsdWRlIDxuZXRsaW5rLXByaXZhdGUvdXRpbHMuaD4KKyAjaW5jbHVkZSA8bmV0bGluay9uZXRsaW5rLmg+CisgI2luY2x1ZGUgPG5ldGxpbmsvYXR0ci5oPgorICNpbmNsdWRlIDxuZXRsaW5rL3V0aWxzLmg+CitAQCAtMTMzLDcgKzEzNCw3IEBAIHN0YXRpYyB2b2lkIHJlc3VsdF9kdW1wX2xpbmUoc3RydWN0IG5sX29iamVjdCAqb2JqLCBzdHJ1Y3QgbmxfZHVtcF9wYXJhbXMgKnApCisgCQkgICAgIG5sX3J0bnR5cGUyc3RyKHJlcy0+ZnJfdHlwZSwgYnVmLCBzaXplb2YoYnVmKSkpOworIAlubF9kdW1wKHAsICJzY29wZSAlcyBlcnJvciAlcyAoJWQpXG4iLAorIAkJcnRubF9zY29wZTJzdHIocmVzLT5mcl9zY29wZSwgYnVmLCBzaXplb2YoYnVmKSksCistCQlzdHJlcnJvcl9yKC1yZXMtPmZyX2Vycm9yLCBidWYsIHNpemVvZihidWYpKSwgcmVzLT5mcl9lcnJvcik7CisrCQlubF9zdHJlcnJvcl9sKC1yZXMtPmZyX2Vycm9yKSwgcmVzLT5mcl9lcnJvcik7CisgfQorIAorIHN0YXRpYyB2b2lkIHJlc3VsdF9kdW1wX2RldGFpbHMoc3RydWN0IG5sX29iamVjdCAqb2JqLCBzdHJ1Y3QgbmxfZHVtcF9wYXJhbXMgKnApCitkaWZmIC0tZ2l0IGEvbGliL2hhbmRsZXJzLmMgYi9saWIvaGFuZGxlcnMuYworaW5kZXggOTdhMGQ5Yy4uNGE0OGI5OSAxMDA2NDQKKy0tLSBhL2xpYi9oYW5kbGVycy5jCisrKysgYi9saWIvaGFuZGxlcnMuYworQEAgLTI2LDYgKzI2LDcgQEAKKyAgKi8KKyAKKyAjaW5jbHVkZSA8bmV0bGluay1wcml2YXRlL25ldGxpbmsuaD4KKysjaW5jbHVkZSA8bmV0bGluay1wcml2YXRlL3V0aWxzLmg+CisgI2luY2x1ZGUgPG5ldGxpbmsvbmV0bGluay5oPgorICNpbmNsdWRlIDxuZXRsaW5rL3V0aWxzLmg+CisgI2luY2x1ZGUgPG5ldGxpbmsvbXNnLmg+CitAQCAtNzksMTAgKzgwLDkgQEAgc3RhdGljIGludCBubF9lcnJvcl9oYW5kbGVyX3ZlcmJvc2Uoc3RydWN0IHNvY2thZGRyX25sICp3aG8sCisgCQkJCSAgICBzdHJ1Y3Qgbmxtc2dlcnIgKmUsIHZvaWQgKmFyZykKKyB7CisgCUZJTEUgKm9mZCA9IGFyZyA/IGFyZyA6IHN0ZGVycjsKKy0JY2hhciBidWZbMjU2XTsKKyAKKyAJZnByaW50ZihvZmQsICItLSBFcnJvciByZWNlaXZlZDogJXNcbi0tIE9yaWdpbmFsIG1lc3NhZ2U6ICIsCistCQlzdHJlcnJvcl9yKC1lLT5lcnJvciwgYnVmLCBzaXplb2YoYnVmKSkpOworKwkJbmxfc3RyZXJyb3JfbCgtZS0+ZXJyb3IpKTsKKyAJcHJpbnRfaGVhZGVyX2NvbnRlbnQob2ZkLCAmZS0+bXNnKTsKKyAJZnByaW50ZihvZmQsICJcbiIpOworIAorZGlmZiAtLWdpdCBhL2xpYi9tc2cuYyBiL2xpYi9tc2cuYworaW5kZXggZThhN2U5OS4uOWFmM2YzYSAxMDA2NDQKKy0tLSBhL2xpYi9tc2cuYworKysrIGIvbGliL21zZy5jCitAQCAtMjcsNiArMjcsNyBAQAorICAqLworIAorICNpbmNsdWRlIDxuZXRsaW5rLXByaXZhdGUvbmV0bGluay5oPgorKyNpbmNsdWRlIDxuZXRsaW5rLXByaXZhdGUvdXRpbHMuaD4KKyAjaW5jbHVkZSA8bmV0bGluay9uZXRsaW5rLmg+CisgI2luY2x1ZGUgPG5ldGxpbmsvdXRpbHMuaD4KKyAjaW5jbHVkZSA8bmV0bGluay9jYWNoZS5oPgorQEAgLTkxMywxMSArOTE0LDEwIEBAIHN0YXRpYyB2b2lkIGR1bXBfZXJyb3JfbXNnKHN0cnVjdCBubF9tc2cgKm1zZywgRklMRSAqb2ZkKQorIAlmcHJpbnRmKG9mZCwgIiAgW0VSUk9STVNHXSAlenUgb2N0ZXRzXG4iLCBzaXplb2YoKmVycikpOworIAorIAlpZiAobmxtc2dfbGVuKGhkcikgPj0gc2l6ZW9mKCplcnIpKSB7CistCQljaGFyIGJ1ZlsyNTZdOworIAkJc3RydWN0IG5sX21zZyAqZXJybXNnOworIAorIAkJZnByaW50ZihvZmQsICIgICAgLmVycm9yID0gJWQgXCIlc1wiXG4iLCBlcnItPmVycm9yLAorLQkJCXN0cmVycm9yX3IoLWVyci0+ZXJyb3IsIGJ1Ziwgc2l6ZW9mKGJ1ZikpKTsKKysJCQlubF9zdHJlcnJvcl9sKC1lcnItPmVycm9yKSk7CisgCQlmcHJpbnRmKG9mZCwgIiAgW09SSUdJTkFMIE1FU1NBR0VdICV6dSBvY3RldHNcbiIsIHNpemVvZigqaGRyKSk7CisgCisgCQllcnJtc2cgPSBubG1zZ19pbmhlcml0KCZlcnItPm1zZyk7CitkaWZmIC0tZ2l0IGEvbGliL25sLmMgYi9saWIvbmwuYworaW5kZXggMTIzZjY1Ny4uYTQ1YzNlYSAxMDA2NDQKKy0tLSBhL2xpYi9ubC5jCisrKysgYi9saWIvbmwuYworQEAgLTI3LDYgKzI3LDcgQEAKKyAKKyAjaW5jbHVkZSA8bmV0bGluay1wcml2YXRlL25ldGxpbmsuaD4KKyAjaW5jbHVkZSA8bmV0bGluay1wcml2YXRlL3NvY2tldC5oPgorKyNpbmNsdWRlIDxuZXRsaW5rLXByaXZhdGUvdXRpbHMuaD4KKyAjaW5jbHVkZSA8bmV0bGluay9uZXRsaW5rLmg+CisgI2luY2x1ZGUgPG5ldGxpbmsvdXRpbHMuaD4KKyAjaW5jbHVkZSA8bmV0bGluay9oYW5kbGVycy5oPgorQEAgLTEwNSw3ICsxMDYsNiBAQCBpbnQgbmxfY29ubmVjdChzdHJ1Y3Qgbmxfc29jayAqc2ssIGludCBwcm90b2NvbCkKKyAJaW50IGVycnN2OworIAlzb2NrbGVuX3QgYWRkcmxlbjsKKyAJc3RydWN0IHNvY2thZGRyX25sIGxvY2FsID0geyAwIH07CistCWNoYXIgYnVmWzY0XTsKKyAJaW50IHRyeV9iaW5kID0gMTsKKyAKKyAjaWZkZWYgU09DS19DTE9FWEVDCitAQCAtMTE5LDcgKzExOSw3IEBAIGludCBubF9jb25uZWN0KHN0cnVjdCBubF9zb2NrICpzaywgaW50IHByb3RvY29sKQorIAlpZiAoc2stPnNfZmQgPCAwKSB7CisgCQllcnJzdiA9IGVycm5vOworIAkJTkxfREJHKDQsICJubF9jb25uZWN0KCVwKTogc29ja2V0KCkgZmFpbGVkIHdpdGggJWQgKCVzKVxuIiwgc2ssIGVycnN2LAorLQkJCXN0cmVycm9yX3IoZXJyc3YsIGJ1Ziwgc2l6ZW9mKGJ1ZikpKTsKKysJCQlubF9zdHJlcnJvcl9sKGVycnN2KSk7CisgCQllcnIgPSAtbmxfc3lzZXJyMm5sZXJyKGVycnN2KTsKKyAJCWdvdG8gZXJyb3V0OworIAl9CitAQCAtMTU4LDcgKzE1OCw3IEBAIGludCBubF9jb25uZWN0KHN0cnVjdCBubF9zb2NrICpzaywgaW50IHByb3RvY29sKQorIAkJCQlfbmxfc29ja2V0X3VzZWRfcG9ydHNfc2V0KHVzZWRfcG9ydHMsIHBvcnQpOworIAkJCX0gZWxzZSB7CisgCQkJCU5MX0RCRyg0LCAibmxfY29ubmVjdCglcCk6IGJpbmQoKSBmb3IgcG9ydCAldSBmYWlsZWQgd2l0aCAlZCAoJXMpXG4iLAorLQkJCQkJc2ssICh1bnNpZ25lZCkgcG9ydCwgZXJyc3YsIHN0cmVycm9yX3IoZXJyc3YsIGJ1Ziwgc2l6ZW9mKGJ1ZikpKTsKKysJCQkJCXNrLCAodW5zaWduZWQpIHBvcnQsIGVycnN2LCBubF9zdHJlcnJvcl9sKGVycnN2KSk7CisgCQkJCV9ubF9zb2NrZXRfdXNlZF9wb3J0c19yZWxlYXNlX2FsbCh1c2VkX3BvcnRzKTsKKyAJCQkJZXJyID0gLW5sX3N5c2VycjJubGVycihlcnJzdik7CisgCQkJCWdvdG8gZXJyb3V0OworQEAgLTE3Miw3ICsxNzIsNyBAQCBpbnQgbmxfY29ubmVjdChzdHJ1Y3Qgbmxfc29jayAqc2ssIGludCBwcm90b2NvbCkKKyAJCWlmIChlcnIgIT0gMCkgeworIAkJCWVycnN2ID0gZXJybm87CisgCQkJTkxfREJHKDQsICJubF9jb25uZWN0KCVwKTogYmluZCgpIGZhaWxlZCB3aXRoICVkICglcylcbiIsCistCQkJCXNrLCBlcnJzdiwgc3RyZXJyb3JfcihlcnJzdiwgYnVmLCBzaXplb2YoYnVmKSkpOworKwkJCQlzaywgZXJyc3YsIG5sX3N0cmVycm9yX2woZXJyc3YpKTsKKyAJCQllcnIgPSAtbmxfc3lzZXJyMm5sZXJyKGVycnN2KTsKKyAJCQlnb3RvIGVycm91dDsKKyAJCX0KK0BAIC0xODMsNyArMTgzLDcgQEAgaW50IG5sX2Nvbm5lY3Qoc3RydWN0IG5sX3NvY2sgKnNrLCBpbnQgcHJvdG9jb2wpCisgCQkJICAmYWRkcmxlbik7CisgCWlmIChlcnIgPCAwKSB7CisgCQlOTF9EQkcoNCwgIm5sX2Nvbm5lY3QoJXApOiBnZXRzb2NrbmFtZSgpIGZhaWxlZCB3aXRoICVkICglcylcbiIsCistCQkJc2ssIGVycm5vLCBzdHJlcnJvcl9yKGVycm5vLCBidWYsIHNpemVvZihidWYpKSk7CisrCQkJc2ssIGVycm5vLCBubF9zdHJlcnJvcl9sKGVycm5vKSk7CisgCQllcnIgPSAtbmxfc3lzZXJyMm5sZXJyKGVycm5vKTsKKyAJCWdvdG8gZXJyb3V0OworIAl9CitAQCAtMjgwLDEwICsyODAsOCBAQCBpbnQgbmxfc2VuZHRvKHN0cnVjdCBubF9zb2NrICpzaywgdm9pZCAqYnVmLCBzaXplX3Qgc2l6ZSkKKyAJcmV0ID0gc2VuZHRvKHNrLT5zX2ZkLCBidWYsIHNpemUsIDAsIChzdHJ1Y3Qgc29ja2FkZHIgKikKKyAJCSAgICAgJnNrLT5zX3BlZXIsIHNpemVvZihzay0+c19wZWVyKSk7CisgCWlmIChyZXQgPCAwKSB7CistCQljaGFyIGVycmJ1Zls2NF07CistCisgCQlOTF9EQkcoNCwgIm5sX3NlbmR0byglcCk6IHNlbmR0bygpIGZhaWxlZCB3aXRoICVkICglcylcbiIsCistCQkJc2ssIGVycm5vLCBzdHJlcnJvcl9yKGVycm5vLCBlcnJidWYsIHNpemVvZihlcnJidWYpKSk7CisrCQkJc2ssIGVycm5vLCBubF9zdHJlcnJvcl9sKGVycm5vKSk7CisgCQlyZXR1cm4gLW5sX3N5c2VycjJubGVycihlcnJubyk7CisgCX0KKyAKK0BAIC0zNDMsMTAgKzM0MSw4IEBAIGludCBubF9zZW5kbXNnKHN0cnVjdCBubF9zb2NrICpzaywgc3RydWN0IG5sX21zZyAqbXNnLCBzdHJ1Y3QgbXNnaGRyICpoZHIpCisgCisgCXJldCA9IHNlbmRtc2coc2stPnNfZmQsIGhkciwgMCk7CisgCWlmIChyZXQgPCAwKSB7CistCQljaGFyIGVycmJ1Zls2NF07CistCisgCQlOTF9EQkcoNCwgIm5sX3NlbmRtc2coJXApOiBzZW5kbXNnKCkgZmFpbGVkIHdpdGggJWQgKCVzKVxuIiwKKy0JCQlzaywgZXJybm8sIHN0cmVycm9yX3IoZXJybm8sIGVycmJ1Ziwgc2l6ZW9mKGVycmJ1ZikpKTsKKysJCQlzaywgZXJybm8sIG5sX3N0cmVycm9yX2woZXJybm8pKTsKKyAJCXJldHVybiAtbmxfc3lzZXJyMm5sZXJyKGVycm5vKTsKKyAJfQorIAorQEAgLTcwNiwxNSArNzAyLDEzIEBAIHJldHJ5OgorIAkJZ290byBhYm9ydDsKKyAJfQorIAlpZiAobiA8IDApIHsKKy0JCWNoYXIgZXJyYnVmWzY0XTsKKy0KKyAJCWlmIChlcnJubyA9PSBFSU5UUikgeworIAkJCU5MX0RCRygzLCAicmVjdm1zZygpIHJldHVybmVkIEVJTlRSLCByZXRyeWluZ1xuIik7CisgCQkJZ290byByZXRyeTsKKyAJCX0KKyAKKyAJCU5MX0RCRyg0LCAibmxfc2VuZG1zZyglcCk6IG5sX3JlY3YoKSBmYWlsZWQgd2l0aCAlZCAoJXMpXG4iLAorLQkJCXNrLCBlcnJubywgc3RyZXJyb3JfcihlcnJubywgZXJyYnVmLCBzaXplb2YoZXJyYnVmKSkpOworKwkJCXNrLCBlcnJubywgbmxfc3RyZXJyb3JfbChlcnJubykpOworIAkJcmV0dmFsID0gLW5sX3N5c2VycjJubGVycihlcnJubyk7CisgCQlnb3RvIGFib3J0OworIAl9CitAQCAtOTgwLDEwICs5NzQsOCBAQCBjb250aW51ZV9yZWFkaW5nOgorIAkJCQkJZ290byBvdXQ7CisgCQkJCX0KKyAJCQl9IGVsc2UgaWYgKGUtPmVycm9yKSB7CistCQkJCWNoYXIgYnVmWzY0XTsKKy0KKyAJCQkJTkxfREJHKDQsICJyZWN2bXNncyglcCk6IFJUTkVUTElOSyByZXNwb25kZWQgd2l0aCAlZCAoJXMpXG4iLAorLQkJCQkJc2ssIC1lLT5lcnJvciwgc3RyZXJyb3JfcigtZS0+ZXJyb3IsIGJ1Ziwgc2l6ZW9mKGJ1ZikpKTsKKysJCQkJCXNrLCAtZS0+ZXJyb3IsIG5sX3N0cmVycm9yX2woLWUtPmVycm9yKSk7CisgCisgCQkJCS8qIEVycm9yIG1lc3NhZ2UgcmVwb3J0ZWQgYmFjayBmcm9tIGtlcm5lbC4gKi8KKyAJCQkJaWYgKGNiLT5jYl9lcnIpIHsKK2RpZmYgLS1naXQgYS9saWIvcm91dGUvcm91dGVfb2JqLmMgYi9saWIvcm91dGUvcm91dGVfb2JqLmMKK2luZGV4IDczNDdlZDIuLjIxYjY3YjEgMTAwNjQ0CistLS0gYS9saWIvcm91dGUvcm91dGVfb2JqLmMKKysrKyBiL2xpYi9yb3V0ZS9yb3V0ZV9vYmouYworQEAgLTMxLDYgKzMxLDcgQEAKKyAgKi8KKyAKKyAjaW5jbHVkZSA8bmV0bGluay1wcml2YXRlL25ldGxpbmsuaD4KKysjaW5jbHVkZSA8bmV0bGluay1wcml2YXRlL3V0aWxzLmg+CisgI2luY2x1ZGUgPG5ldGxpbmsvbmV0bGluay5oPgorICNpbmNsdWRlIDxuZXRsaW5rL2NhY2hlLmg+CisgI2luY2x1ZGUgPG5ldGxpbmsvdXRpbHMuaD4KK0BAIC0yNTksNyArMjYwLDcgQEAgc3RhdGljIHZvaWQgcm91dGVfZHVtcF9kZXRhaWxzKHN0cnVjdCBubF9vYmplY3QgKmEsIHN0cnVjdCBubF9kdW1wX3BhcmFtcyAqcCkKKyAJaWYgKChyLT5jZV9tYXNrICYgUk9VVEVfQVRUUl9DQUNIRUlORk8pICYmIHItPnJ0X2NhY2hlaW5mby5ydGNpX2Vycm9yKSB7CisgCQlubF9kdW1wX2xpbmUocCwgIiAgICBjYWNoZWluZm8gZXJyb3IgJWQgKCVzKVxuIiwKKyAJCQlyLT5ydF9jYWNoZWluZm8ucnRjaV9lcnJvciwKKy0JCQlzdHJlcnJvcl9yKC1yLT5ydF9jYWNoZWluZm8ucnRjaV9lcnJvciwgYnVmLCBzaXplb2YoYnVmKSkpOworKwkJCW5sX3N0cmVycm9yX2woLXItPnJ0X2NhY2hlaW5mby5ydGNpX2Vycm9yKSk7CisgCX0KKyAKKyAJaWYgKHItPmNlX21hc2sgJiBST1VURV9BVFRSX01FVFJJQ1MpIHsKK2RpZmYgLS1naXQgYS9saWIvc29ja2V0LmMgYi9saWIvc29ja2V0LmMKK2luZGV4IDk3YjJmNjkuLjU1MTUzYjQgMTAwNjQ0CistLS0gYS9saWIvc29ja2V0LmMKKysrKyBiL2xpYi9zb2NrZXQuYworQEAgLTMzLDYgKzMzLDcgQEAKKyAKKyAjaW5jbHVkZSA8bmV0bGluay1wcml2YXRlL25ldGxpbmsuaD4KKyAjaW5jbHVkZSA8bmV0bGluay1wcml2YXRlL3NvY2tldC5oPgorKyNpbmNsdWRlIDxuZXRsaW5rLXByaXZhdGUvdXRpbHMuaD4KKyAjaW5jbHVkZSA8bmV0bGluay9uZXRsaW5rLmg+CisgI2luY2x1ZGUgPG5ldGxpbmsvdXRpbHMuaD4KKyAjaW5jbHVkZSA8bmV0bGluay9oYW5kbGVycy5oPgorQEAgLTQ0OSwxMSArNDUwLDkgQEAgaW50IG5sX3NvY2tldF9hZGRfbWVtYmVyc2hpcHMoc3RydWN0IG5sX3NvY2sgKnNrLCBpbnQgZ3JvdXAsIC4uLikKKyAJCWVyciA9IHNldHNvY2tvcHQoc2stPnNfZmQsIFNPTF9ORVRMSU5LLCBORVRMSU5LX0FERF9NRU1CRVJTSElQLAorIAkJCQkJCSAmZ3JvdXAsIHNpemVvZihncm91cCkpOworIAkJaWYgKGVyciA8IDApIHsKKy0JCQljaGFyIGJ1Zls2NF07CistCisgCQkJdmFfZW5kKGFwKTsKKyAJCQlOTF9EQkcoNCwgIm5sX3NvY2tldF9hZGRfbWVtYmVyc2hpcHMoJXApOiBzZXRzb2Nrb3B0KCkgZmFpbGVkIHdpdGggJWQgKCVzKVxuIiwKKy0JCQkJc2ssIGVycm5vLCBzdHJlcnJvcl9yKGVycm5vLCBidWYsIHNpemVvZihidWYpKSk7CisrCQkJCXNrLCBlcnJubywgbmxfc3RyZXJyb3JfbChlcnJubykpOworIAkJCXJldHVybiAtbmxfc3lzZXJyMm5sZXJyKGVycm5vKTsKKyAJCX0KKyAKK0BAIC01MDEsMTEgKzUwMCw5IEBAIGludCBubF9zb2NrZXRfZHJvcF9tZW1iZXJzaGlwcyhzdHJ1Y3Qgbmxfc29jayAqc2ssIGludCBncm91cCwgLi4uKQorIAkJZXJyID0gc2V0c29ja29wdChzay0+c19mZCwgU09MX05FVExJTkssIE5FVExJTktfRFJPUF9NRU1CRVJTSElQLAorIAkJCQkJCSAmZ3JvdXAsIHNpemVvZihncm91cCkpOworIAkJaWYgKGVyciA8IDApIHsKKy0JCQljaGFyIGJ1Zls2NF07CistCisgCQkJdmFfZW5kKGFwKTsKKyAJCQlOTF9EQkcoNCwgIm5sX3NvY2tldF9kcm9wX21lbWJlcnNoaXBzKCVwKTogc2V0c29ja29wdCgpIGZhaWxlZCB3aXRoICVkICglcylcbiIsCistCQkJCXNrLCBlcnJubywgc3RyZXJyb3JfcihlcnJubywgYnVmLCBzaXplb2YoYnVmKSkpOworKwkJCQlzaywgZXJybm8sIG5sX3N0cmVycm9yX2woZXJybm8pKTsKKyAJCQlyZXR1cm4gLW5sX3N5c2VycjJubGVycihlcnJubyk7CisgCQl9CisgCitAQCAtNjE5LDcgKzYxNiw2IEBAIGludCBubF9zb2NrZXRfc2V0X2ZkKHN0cnVjdCBubF9zb2NrICpzaywgaW50IHByb3RvY29sLCBpbnQgZmQpCisgeworIAlpbnQgZXJyID0gMDsKKyAJc29ja2xlbl90IGFkZHJsZW47CistCWNoYXIgYnVmWzY0XTsKKyAJc3RydWN0IHNvY2thZGRyX25sIGxvY2FsID0geyAwIH07CisgCWludCBzb190eXBlID0gLTEsIHNvX3Byb3RvY29sID0gLTE7CisgCitAQCAtNjMzLDcgKzYyOSw3IEBAIGludCBubF9zb2NrZXRfc2V0X2ZkKHN0cnVjdCBubF9zb2NrICpzaywgaW50IHByb3RvY29sLCBpbnQgZmQpCisgCSAgICAgICAgICAgICAgICAgICZhZGRybGVuKTsKKyAJaWYgKGVyciA8IDApIHsKKyAJCU5MX0RCRyg0LCAibmxfc29ja2V0X3NldF9mZCglcCwlZCk6IGdldHNvY2tuYW1lKCkgZmFpbGVkIHdpdGggJWQgKCVzKVxuIiwKKy0JCSAgICAgICBzaywgZmQsIGVycm5vLCBzdHJlcnJvcl9yKGVycm5vLCBidWYsIHNpemVvZihidWYpKSk7CisrCQkgICAgICAgc2ssIGZkLCBlcnJubywgbmxfc3RyZXJyb3JfbChlcnJubykpOworIAkJcmV0dXJuIC1ubF9zeXNlcnIybmxlcnIoZXJybm8pOworIAl9CisgCWlmIChhZGRybGVuICE9IHNpemVvZihsb2NhbCkpCitAQCAtNjQ4LDcgKzY0NCw3IEBAIGludCBubF9zb2NrZXRfc2V0X2ZkKHN0cnVjdCBubF9zb2NrICpzaywgaW50IHByb3RvY29sLCBpbnQgZmQpCisgCWVyciA9IGdldHNvY2tvcHQoZmQsIFNPTF9TT0NLRVQsIFNPX1RZUEUsICZzb190eXBlLCAmYWRkcmxlbik7CisgCWlmIChlcnIgPCAwKSB7CisgCQlOTF9EQkcoNCwgIm5sX3NvY2tldF9zZXRfZmQoJXAsJWQpOiBnZXRzb2Nrb3B0KCkgZm9yIFNPX1RZUEUgZmFpbGVkIHdpdGggJWQgKCVzKVxuIiwKKy0JCSAgICAgICBzaywgZmQsIGVycm5vLCBzdHJlcnJvcl9yKGVycm5vLCBidWYsIHNpemVvZihidWYpKSk7CisrCQkgICAgICAgc2ssIGZkLCBlcnJubywgbmxfc3RyZXJyb3JfbChlcnJubykpOworIAkJcmV0dXJuIC1ubF9zeXNlcnIybmxlcnIoZXJybm8pOworIAl9CisgCWlmIChhZGRybGVuICE9IHNpemVvZihzb190eXBlKSkKK0BAIC02NjYsNyArNjYyLDcgQEAgaW50IG5sX3NvY2tldF9zZXRfZmQoc3RydWN0IG5sX3NvY2sgKnNrLCBpbnQgcHJvdG9jb2wsIGludCBmZCkKKyAJCWlmIChlcnJubyA9PSBFTk9QUk9UT09QVCkKKyAJCQlnb3RvIG5vX3NvX3Byb3RvY29sOworIAkJTkxfREJHKDQsICJubF9zb2NrZXRfc2V0X2ZkKCVwLCVkKTogZ2V0c29ja29wdCgpIGZvciBTT19QUk9UT0NPTCBmYWlsZWQgd2l0aCAlZCAoJXMpXG4iLAorLQkJICAgICAgIHNrLCBmZCwgZXJybm8sIHN0cmVycm9yX3IoZXJybm8sIGJ1Ziwgc2l6ZW9mKGJ1ZikpKTsKKysJCSAgICAgICBzaywgZmQsIGVycm5vLCBubF9zdHJlcnJvcl9sKGVycm5vKSk7CisgCQlyZXR1cm4gLW5sX3N5c2VycjJubGVycihlcnJubyk7CisgCX0KKyAJaWYgKGFkZHJsZW4gIT0gc2l6ZW9mKHNvX3Byb3RvY29sKSkKK0BAIC03MDksMTAgKzcwNSw4IEBAIGludCBubF9zb2NrZXRfc2V0X25vbmJsb2NraW5nKGNvbnN0IHN0cnVjdCBubF9zb2NrICpzaykKKyAJCXJldHVybiAtTkxFX0JBRF9TT0NLOworIAorIAlpZiAoZmNudGwoc2stPnNfZmQsIEZfU0VURkwsIE9fTk9OQkxPQ0spIDwgMCkgeworLQkJY2hhciBidWZbNjRdOworLQorIAkJTkxfREJHKDQsICJubF9zb2NrZXRfc2V0X25vbmJsb2NraW5nKCVwKTogZmNudGwoKSBmYWlsZWQgd2l0aCAlZCAoJXMpXG4iLAorLQkJCXNrLCBlcnJubywgc3RyZXJyb3JfcihlcnJubywgYnVmLCBzaXplb2YoYnVmKSkpOworKwkJCXNrLCBlcnJubywgbmxfc3RyZXJyb3JfbChlcnJubykpOworIAkJcmV0dXJuIC1ubF9zeXNlcnIybmxlcnIoZXJybm8pOworIAl9CisgCitAQCAtODEzLDcgKzgwNyw2IEBAIGludCBubF9zb2NrZXRfbW9kaWZ5X2Vycl9jYihzdHJ1Y3Qgbmxfc29jayAqc2ssIGVudW0gbmxfY2Jfa2luZCBraW5kLAorIGludCBubF9zb2NrZXRfc2V0X2J1ZmZlcl9zaXplKHN0cnVjdCBubF9zb2NrICpzaywgaW50IHJ4YnVmLCBpbnQgdHhidWYpCisgeworIAlpbnQgZXJyOworLQljaGFyIGJ1Zls2NF07CisgCisgCWlmIChyeGJ1ZiA8PSAwKQorIAkJcnhidWYgPSAzMjc2ODsKK0BAIC04MjgsNyArODIxLDcgQEAgaW50IG5sX3NvY2tldF9zZXRfYnVmZmVyX3NpemUoc3RydWN0IG5sX3NvY2sgKnNrLCBpbnQgcnhidWYsIGludCB0eGJ1ZikKKyAJCQkgJnR4YnVmLCBzaXplb2YodHhidWYpKTsKKyAJaWYgKGVyciA8IDApIHsKKyAJCU5MX0RCRyg0LCAibmxfc29ja2V0X3NldF9idWZmZXJfc2l6ZSglcCk6IHNldHNvY2tvcHQoKSBmYWlsZWQgd2l0aCAlZCAoJXMpXG4iLAorLQkJCXNrLCBlcnJubywgc3RyZXJyb3JfcihlcnJubywgYnVmLCBzaXplb2YoYnVmKSkpOworKwkJCXNrLCBlcnJubywgbmxfc3RyZXJyb3JfbChlcnJubykpOworIAkJcmV0dXJuIC1ubF9zeXNlcnIybmxlcnIoZXJybm8pOworIAl9CisgCitAQCAtODM2LDcgKzgyOSw3IEBAIGludCBubF9zb2NrZXRfc2V0X2J1ZmZlcl9zaXplKHN0cnVjdCBubF9zb2NrICpzaywgaW50IHJ4YnVmLCBpbnQgdHhidWYpCisgCQkJICZyeGJ1Ziwgc2l6ZW9mKHJ4YnVmKSk7CisgCWlmIChlcnIgPCAwKSB7CisgCQlOTF9EQkcoNCwgIm5sX3NvY2tldF9zZXRfYnVmZmVyX3NpemUoJXApOiBzZXRzb2Nrb3B0KCkgZmFpbGVkIHdpdGggJWQgKCVzKVxuIiwKKy0JCQlzaywgZXJybm8sIHN0cmVycm9yX3IoZXJybm8sIGJ1Ziwgc2l6ZW9mKGJ1ZikpKTsKKysJCQlzaywgZXJybm8sIG5sX3N0cmVycm9yX2woZXJybm8pKTsKKyAJCXJldHVybiAtbmxfc3lzZXJyMm5sZXJyKGVycm5vKTsKKyAJfQorIAorQEAgLTg5MCwxMCArODgzLDggQEAgaW50IG5sX3NvY2tldF9zZXRfcGFzc2NyZWQoc3RydWN0IG5sX3NvY2sgKnNrLCBpbnQgc3RhdGUpCisgCWVyciA9IHNldHNvY2tvcHQoc2stPnNfZmQsIFNPTF9TT0NLRVQsIFNPX1BBU1NDUkVELAorIAkJCSAmc3RhdGUsIHNpemVvZihzdGF0ZSkpOworIAlpZiAoZXJyIDwgMCkgeworLQkJY2hhciBidWZbNjRdOworLQorIAkJTkxfREJHKDQsICJubF9zb2NrZXRfc2V0X3Bhc3NjcmVkKCVwKTogc2V0c29ja29wdCgpIGZhaWxlZCB3aXRoICVkICglcylcbiIsCistCQkJc2ssIGVycm5vLCBzdHJlcnJvcl9yKGVycm5vLCBidWYsIHNpemVvZihidWYpKSk7CisrCQkJc2ssIGVycm5vLCBubF9zdHJlcnJvcl9sKGVycm5vKSk7CisgCQlyZXR1cm4gLW5sX3N5c2VycjJubGVycihlcnJubyk7CisgCX0KKyAKK0BAIC05MjIsMTAgKzkxMyw4IEBAIGludCBubF9zb2NrZXRfcmVjdl9wa3RpbmZvKHN0cnVjdCBubF9zb2NrICpzaywgaW50IHN0YXRlKQorIAllcnIgPSBzZXRzb2Nrb3B0KHNrLT5zX2ZkLCBTT0xfTkVUTElOSywgTkVUTElOS19QS1RJTkZPLAorIAkJCSAmc3RhdGUsIHNpemVvZihzdGF0ZSkpOworIAlpZiAoZXJyIDwgMCkgeworLQkJY2hhciBidWZbNjRdOworLQorIAkJTkxfREJHKDQsICJubF9zb2NrZXRfcmVjdl9wa3RpbmZvKCVwKTogc2V0c29ja29wdCgpIGZhaWxlZCB3aXRoICVkICglcylcbiIsCistCQkJc2ssIGVycm5vLCBzdHJlcnJvcl9yKGVycm5vLCBidWYsIHNpemVvZihidWYpKSk7CisrCQkJc2ssIGVycm5vLCBubF9zdHJlcnJvcl9sKGVycm5vKSk7CisgCQlyZXR1cm4gLW5sX3N5c2VycjJubGVycihlcnJubyk7CisgCX0KKyAKKy0tIAorMi45LjMKKwpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2xpYm5sL2xpYm5sLzAwMDMtc3JjLXN3aXRjaC10by11c2luZy1zdHJlcnJvcl9sLWluc3RlYWQtb2Ytc3RyZXJyb3Jfci5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9saWJubC9saWJubC8wMDAzLXNyYy1zd2l0Y2gtdG8tdXNpbmctc3RyZXJyb3JfbC1pbnN0ZWFkLW9mLXN0cmVycm9yX3IucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTBmNWE3OAotLS0gL2Rldi9udWxsCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9saWJubC9saWJubC8wMDAzLXNyYy1zd2l0Y2gtdG8tdXNpbmctc3RyZXJyb3JfbC1pbnN0ZWFkLW9mLXN0cmVycm9yX3IucGF0Y2gKQEAgLTAsMCArMSw4MiBAQAorRnJvbSA2YzJkMTExMTc3ZTkxMTg0MDczYzQ0ZjgzZDRhNjE4MmFhYmEwNmQ3IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogPT9VVEYtOD9xP0FuZHI9QzM9QTk9MjBEcmFzemlrPz0gPGFkcmFzemlrQHR5Y29pbnQuY29tPgorRGF0ZTogVGh1LCAyNSBBdWcgMjAxNiAxMzoxNTowMSArMDEwMAorU3ViamVjdDogW1BBVENIIDMvM10gc3JjOiBzd2l0Y2ggdG8gdXNpbmcgc3RyZXJyb3JfbCgpIGluc3RlYWQgb2Ygc3RyZXJyb3JfcigpCitNSU1FLVZlcnNpb246IDEuMAorQ29udGVudC1UeXBlOiB0ZXh0L3BsYWluOyBjaGFyc2V0PVVURi04CitDb250ZW50LVRyYW5zZmVyLUVuY29kaW5nOiA4Yml0CisKK2dsaWJjIHByb3ZpZGVzIHR3byB2ZXJzaW9ucyBvZiBzdHJlcnJvcl9yKCksIHdoaWNoCitjYW4gYmUgY2hvc2VuIGJldHdlZW4gdXNpbmcgZmVhdHVyZSB0ZXN0IG1hY3JvcworX0dOVV9TT1VSQ0UgYW5kIF9QT1NJWF9DX1NPVVJDRS4gbGlibmwgaXMgYnVpbHQgdXNpbmcKK3RoZSBmb3JtZXIsIGhlbmNlIHdlIGdldCB0aGUgZ2xpYmMgc3BlY2lhbCB2ZXJzaW9uLAorYW5kIGFsbCBjb2RlIHNvIGZhciBoYXMgYmVlbiB3cml0dGVuIGZvciB0aGlzLgorCitPdGhlciBDIGxpYnJhcmllcyBsaWtlIG11c2wgb24gdGhlIG90aGVyIGhhbmQgb25seSB0cnkKK3RvIGJlIHBvc2l4IGNvbXBsaWFudCwgYW5kIG9ubHkgZXZlciBwcm92aWRlIHRoZSBwb3NpeAordmVyc2lvbiBvZiBzdHJlcnJvcl9yKCksIHdoaWNoIGhhcyBhIGRpZmZlcmVudCBzaWduYXR1cmUuCisKK1VzZXMgaW4gbGlibmwgaGVuY2UgZ2VuZXJhbGx5IGNhdXNlIHByaW50ZigpIG9mIGFuICppbnQqCit3aXRoIGEgKnN0cmluZyBmb3JtYXQqIHNwZWNpZmllciBmb3IgdGhhdCByZWFzb24uCisKK0FkZGl0aW9uYWxseSwgc3RyZXJyb3JfcigpIGhhcyBiZWVuIGRlcHJlY2F0ZWQ6CisgIGh0dHA6Ly9hdXN0aW5ncm91cGJ1Z3MubmV0L3ZpZXcucGhwP2lkPTY1NQorCitTd2l0Y2ggdG8gdXNpbmcgc3RyZXJyb3JfbCgpLgorCitTaWduZWQtb2ZmLWJ5OiBBbmRyw6kgRHJhc3ppayA8YWRyYXN6aWtAdHljb2ludC5jb20+CitSZXZpZXdlZC1ieTogU3RlcGhhbmUgQXlvdHRlIDxzYXlvdHRlQHR5Y29pbnQuY29tPgorU2lnbmVkLW9mZi1ieTogVGhvbWFzIEhhbGxlciA8dGhhbGxlckByZWRoYXQuY29tPgorLS0tCitVcHN0cmVhbS1TdGF0dXM6IEJhY2twb3J0IGh0dHBzOi8vZ2l0aHViLmNvbS90aG9tMzExL2xpYm5sL2NvbW1pdC82YzJkMTExMTc3ZTkxMTg0MDczYzQ0ZjgzZDRhNjE4MmFhYmEwNmQ3Cisgc3JjL2xpYi91dGlscy5jIHwgMjAgKysrKysrKysrKysrKysrKystLS0KKyAxIGZpbGUgY2hhbmdlZCwgMTcgaW5zZXJ0aW9ucygrKSwgMyBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL3NyYy9saWIvdXRpbHMuYyBiL3NyYy9saWIvdXRpbHMuYworaW5kZXggNDY3YWFlZC4uNTg3OGYyNyAxMDA2NDQKKy0tLSBhL3NyYy9saWIvdXRpbHMuYworKysrIGIvc3JjL2xpYi91dGlscy5jCitAQCAtMjIsNiArMjIsNyBAQAorICAqLworIAorICNpbmNsdWRlIDxuZXRsaW5rL2NsaS91dGlscy5oPgorKyNpbmNsdWRlIDxsb2NhbGUuaD4KKyAKKyAvKioKKyAgKiBQYXJzZSBhIHRleHQgYmFzZWQgMzIgYml0IHVuc2lnbmVkIGludGVnZXIgYXJndW1lbnQKK0BAIC03MCw3ICs3MSw2IEBAIHZvaWQgbmxfY2xpX3ByaW50X3ZlcnNpb24odm9pZCkKKyB2b2lkIG5sX2NsaV9mYXRhbChpbnQgZXJyLCBjb25zdCBjaGFyICpmbXQsIC4uLikKKyB7CisgCXZhX2xpc3QgYXA7CistCWNoYXIgYnVmWzI1Nl07CisgCisgCWZwcmludGYoc3RkZXJyLCAiRXJyb3I6ICIpOworIAorQEAgLTc5LDggKzc5LDIyIEBAIHZvaWQgbmxfY2xpX2ZhdGFsKGludCBlcnIsIGNvbnN0IGNoYXIgKmZtdCwgLi4uKQorIAkJdmZwcmludGYoc3RkZXJyLCBmbXQsIGFwKTsKKyAJCXZhX2VuZChhcCk7CisgCQlmcHJpbnRmKHN0ZGVyciwgIlxuIik7CistCX0gZWxzZQorLQkJZnByaW50ZihzdGRlcnIsICIlc1xuIiwgc3RyZXJyb3JfcihlcnIsIGJ1Ziwgc2l6ZW9mKGJ1ZikpKTsKKysJfSBlbHNlIHsKKysJCWNoYXIgKmJ1ZjsKKysJCWxvY2FsZV90IGxvYyA9IG5ld2xvY2FsZShMQ19NRVNTQUdFU19NQVNLLCAiIiwgKGxvY2FsZV90KTApOworKwkJaWYgKGxvYyA9PSAobG9jYWxlX3QpMCkgeworKwkJCWlmIChlcnJubyA9PSBFTk9FTlQpCisrCQkJCWxvYyA9IG5ld2xvY2FsZShMQ19NRVNTQUdFU19NQVNLLAorKwkJCQkJCSJQT1NJWCIsIChsb2NhbGVfdCkwKTsKKysJCQlpZiAobG9jID09IChsb2NhbGVfdCkwKQorKwkJCQlidWYgPSAibmV3bG9jYWxlKCkgZmFpbGVkIjsKKysJCX0KKysJCWlmIChsb2MgIT0gKGxvY2FsZV90KTApCisrCQkJYnVmID0gc3RyZXJyb3JfbChlcnIsIGxvYyk7CisrCQlmcHJpbnRmKHN0ZGVyciwgIiVzXG4iLCBidWYpOworKwkJaWYgKGxvYyAhPSAobG9jYWxlX3QpMCkKKysJCQlmcmVlbG9jYWxlKGxvYyk7CisrCX0KKyAKKyAJZXhpdChhYnMoZXJyKSk7CisgfQorLS0gCisyLjkuMworCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbGlibmwvbGlibmxfMy4yLjI1LmJiIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2xpYm5sL2xpYm5sXzMuMi4yNS5iYgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggY2FiZTg0MS4uMDAwMDAwMAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbGlibmwvbGlibmxfMy4yLjI1LmJiCisrKyAvZGV2L251bGwKQEAgLTEsNDIgKzAsMCBAQAotU1VNTUFSWSA9ICJBIGxpYnJhcnkgZm9yIGFwcGxpY2F0aW9ucyBkZWFsaW5nIHdpdGggbmV0bGluayBzb2NrZXRzIgotSE9NRVBBR0UgPSAiaHR0cDovL3d3dy5pbmZyYWRlYWQub3JnL350Z3IvbGlibmwvIgotU0VDVElPTiA9ICJsaWJzL25ldHdvcmsiCi0KLVBFID0gIjEiCi1QUiA9ICJyMSIKLQotTElDRU5TRSA9ICJMR1BMdjIuMSIKLUxJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PTRmYmQ2NTM4MGNkZDI1NTk1MTA3OTAwOGIzNjQ1MTZjIgotCi1ERVBFTkRTID0gImZsZXgtbmF0aXZlIGJpc29uLW5hdGl2ZSIKLQotU1JDX1VSSSA9ICJodHRwOi8vd3d3LmluZnJhZGVhZC5vcmcvfnRnci8ke0JQTn0vZmlsZXMvJHtCUH0udGFyLmd6IFwKLSAgICAgICAgICAgZmlsZTovL2ZpeC1wa3Rsb2Nfc3ludGF4X2gtcmFjZS5wYXRjaCBcCi0gICAgICAgICAgIGZpbGU6Ly9maXgtcGMtZmlsZS5wYXRjaCBcCi0gICAgICAgICAgIgotCi1TUkNfVVJJW21kNXN1bV0gPSAiMDNmNzRkMGNkNTAzN2NhZGM4Y2RmYTMxM2JiZDE5NWMiCi1TUkNfVVJJW3NoYTI1NnN1bV0gPSAiOGJlYjc1OTA2NzQ5NTdiOTMxZGU2YjdmODFjNTMwYjg1ZGM3YzFhZDhmYmRhMDE1Mzk4YmMxZThkMWNlOGVjNSIKLQotaW5oZXJpdCBhdXRvdG9vbHMgcGtnY29uZmlnCi0KLUZJTEVTXyR7UE59ID0gIiR7bGliZGlyfS9saWJubC0zLnNvLiogXAotICAgICAgICAgICAgICAgJHtsaWJkaXJ9L2xpYm5sLnNvLiogXAotICAgICAgICAgICAgICAgJHtzeXNjb25mZGlyfSIKLVJSRVBMQUNFU18ke1BOfSA9ICJsaWJubDIiCi1SQ09ORkxJQ1RTXyR7UE59ID0gImxpYm5sMiIKLUZJTEVTXyR7UE59LXN0YXRpY2RldiArPSAiJHtsaWJkaXJ9L2xpYm5sL2NsaS8qLyouYSIKLQotUEFDS0FHRVMgKz0gIiR7UE59LWNsaSAke1BOfS1yb3V0ZSAke1BOfS1uZiAke1BOfS1nZW5sICR7UE59LWlkaWFnIgotRklMRVNfJHtQTn0tY2xpICAgPSAiJHtsaWJkaXJ9L2xpYm5sLWNsaS0zLnNvLiogXAotICAgICAgICAgICAgICAgICAgICAgJHtsaWJkaXJ9L2xpYm5sL2NsaS8qLyouc28gXAotICAgICAgICAgICAgICAgICAgICAgJHtsaWJkaXJ9L2xpYm5sL2NsaS8qLyoubGEgXAotICAgICAgICAgICAgICAgICAgICAgJHtzYmluZGlyfS9ubC0qIgotRklMRVNfJHtQTn0tcm91dGUgPSAiJHtsaWJkaXJ9L2xpYm5sLXJvdXRlLTMuc28uKiIKLUZJTEVTXyR7UE59LWlkaWFnID0gIiR7bGliZGlyfS9saWJubC1pZGlhZy0zLnNvLioiCi1GSUxFU18ke1BOfS1uZiAgICA9ICIke2xpYmRpcn0vbGlibmwtbmYtMy5zby4qIgotRklMRVNfJHtQTn0tZ2VubCAgPSAiJHtsaWJkaXJ9L2xpYm5sLWdlbmwtMy5zby4qIFwKLSAgICAgICAgICAgICAgICAgICAgICR7bGliZGlyfS9saWJubC1nZW5sLnNvLiogXAotICAgICAgICAgICAgICAgICAgICAgJHtzYmluZGlyfS9nZW5sLWN0cmwtbGlzdCIKLVJSRVBMQUNFU18ke1BOfS1nZW5sID0gImxpYm5sLWdlbmwyIGxpYm5sLWdlbmwtMy0yMDAiCi1SQ09ORkxJQ1RTXyR7UE59LWdlbmwgPSAibGlibmwtZ2VubDIgbGlibmwtZ2VubC0zLTIwMCIKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9saWJubC9saWJubF8zLjIuMjguYmIgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbGlibmwvbGlibmxfMy4yLjI4LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI2OTgyZjMKLS0tIC9kZXYvbnVsbAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbGlibmwvbGlibmxfMy4yLjI4LmJiCkBAIC0wLDAgKzEsNDggQEAKK1NVTU1BUlkgPSAiQSBsaWJyYXJ5IGZvciBhcHBsaWNhdGlvbnMgZGVhbGluZyB3aXRoIG5ldGxpbmsgc29ja2V0cyIKK0hPTUVQQUdFID0gImh0dHA6Ly93d3cuaW5mcmFkZWFkLm9yZy9+dGdyL2xpYm5sLyIKK1NFQ1RJT04gPSAibGlicy9uZXR3b3JrIgorCitQRSA9ICIxIgorCitMSUNFTlNFID0gIkxHUEx2Mi4xIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9NGZiZDY1MzgwY2RkMjU1OTUxMDc5MDA4YjM2NDUxNmMiCisKK0RFUEVORFMgPSAiZmxleC1uYXRpdmUgYmlzb24tbmF0aXZlIgorCitTUkNfVVJJID0gImh0dHBzOi8vZ2l0aHViLmNvbS90aG9tMzExLyR7QlBOfS9yZWxlYXNlcy9kb3dubG9hZC8ke0JQTn0ke0BkLmdldFZhcignUFYnLCBUcnVlKS5yZXBsYWNlKCcuJywnXycpfS8ke0JQfS50YXIuZ3ogXAorICAgICAgICAgICBmaWxlOi8vZml4LXBrdGxvY19zeW50YXhfaC1yYWNlLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL2ZpeC1wYy1maWxlLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovLzAwMDEtbGliLWFkZC11dGlsaXR5LWZ1bmN0aW9uLW5sX3N0cmVycm9yX2wucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vMDAwMi1saWItc3dpdGNoLXRvLXVzaW5nLXN0cmVycm9yX2wtaW5zdGVhZC1vZi1zdHJlcnJvcl9yLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovLzAwMDMtc3JjLXN3aXRjaC10by11c2luZy1zdHJlcnJvcl9sLWluc3RlYWQtb2Ytc3RyZXJyb3Jfci5wYXRjaCBcCisiCitVUFNUUkVBTV9DSEVDS19VUkkgPSAiaHR0cHM6Ly9naXRodWIuY29tL3Rob20zMTEvJHtCUE59L3JlbGVhc2VzIgorCitTUkNfVVJJW21kNXN1bV0gPSAiYmFiMTJkYjFlYjk0YTQyMTI5ZjcxMmE0NGJlOTFhNjciCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiY2Q2MDg5OTJjNjU2ZThmNmUzYWI2YzEzOTFiMTYyYTVhNTFjNDkzMzZiOTIxOWY3ZjM5MGU2MWZjNTQzN2M0MSIKKworaW5oZXJpdCBhdXRvdG9vbHMgcGtnY29uZmlnCisKK0ZJTEVTXyR7UE59ID0gIiR7bGliZGlyfS9saWJubC0zLnNvLiogXAorICAgICAgICAgICAgICAgJHtsaWJkaXJ9L2xpYm5sLnNvLiogXAorICAgICAgICAgICAgICAgJHtzeXNjb25mZGlyfSIKK1JSRVBMQUNFU18ke1BOfSA9ICJsaWJubDIiCitSQ09ORkxJQ1RTXyR7UE59ID0gImxpYm5sMiIKK0ZJTEVTXyR7UE59LWRldiArPSAiJHtsaWJkaXJ9L2xpYm5sL2NsaS8qLyoubGEiCitGSUxFU18ke1BOfS1zdGF0aWNkZXYgKz0gIiR7bGliZGlyfS9saWJubC9jbGkvKi8qLmEiCisKK1BBQ0tBR0VTICs9ICIke1BOfS1jbGkgJHtQTn0tZ2VubCAke1BOfS1pZGlhZyAke1BOfS1uZiAke1BOfS1yb3V0ZSAke1BOfS14ZnJtIgorRklMRVNfJHtQTn0tY2xpICAgPSAiJHtsaWJkaXJ9L2xpYm5sLWNsaS0zLnNvLiogXAorICAgICAgICAgICAgICAgICAgICAgJHtsaWJkaXJ9L2xpYm5sL2NsaS8qLyouc28gXAorICAgICAgICAgICAgICAgICAgICAgJHtiaW5kaXJ9L2dlbmwtY3RybC1saXN0IFwKKyAgICAgICAgICAgICAgICAgICAgICR7YmluZGlyfS9pZGlhZy1zb2NrZXQtZGV0YWlscyBcCisgICAgICAgICAgICAgICAgICAgICAke2JpbmRpcn0vbmYtKiBcCisgICAgICAgICAgICAgICAgICAgICAke2JpbmRpcn0vbmwtKiIKK0ZJTEVTXyR7UE59LWdlbmwgID0gIiR7bGliZGlyfS9saWJubC1nZW5sLTMuc28uKiBcCisgICAgICAgICAgICAgICAgICAgICAke2xpYmRpcn0vbGlibmwtZ2VubC5zby4qIgorRklMRVNfJHtQTn0taWRpYWcgPSAiJHtsaWJkaXJ9L2xpYm5sLWlkaWFnLTMuc28uKiIKK0ZJTEVTXyR7UE59LW5mICAgID0gIiR7bGliZGlyfS9saWJubC1uZi0zLnNvLioiCitGSUxFU18ke1BOfS1yb3V0ZSA9ICIke2xpYmRpcn0vbGlibmwtcm91dGUtMy5zby4qIgorRklMRVNfJHtQTn0teGZybSAgPSAiJHtsaWJkaXJ9L2xpYm5sLXhmcm0tMy5zby4qIgorUlJFUExBQ0VTXyR7UE59LWdlbmwgPSAibGlibmwtZ2VubDIiCitSQ09ORkxJQ1RTXyR7UE59LWdlbmwgPSAibGlibmwtZ2VubDIiCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbGlicGNyZS9saWJwY3JlXzguMzguYmIgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbGlicGNyZS9saWJwY3JlXzguMzguYmIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDM4NGMyZmUuLjAwMDAwMDAKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2xpYnBjcmUvbGlicGNyZV84LjM4LmJiCisrKyAvZGV2L251bGwKQEAgLTEsNzkgKzAsMCBAQAotREVTQ1JJUFRJT04gPSAiVGhlIFBDUkUgbGlicmFyeSBpcyBhIHNldCBvZiBmdW5jdGlvbnMgdGhhdCBpbXBsZW1lbnQgcmVndWxhciBcCi1leHByZXNzaW9uIHBhdHRlcm4gbWF0Y2hpbmcgdXNpbmcgdGhlIHNhbWUgc3ludGF4IGFuZCBzZW1hbnRpY3MgYXMgUGVybCA1LiBQQ1JFIFwKLWhhcyBpdHMgb3duIG5hdGl2ZSBBUEksIGFzIHdlbGwgYXMgYSBzZXQgb2Ygd3JhcHBlciBmdW5jdGlvbnMgdGhhdCBjb3JyZXNwb25kIFwKLXRvIHRoZSBQT1NJWCByZWd1bGFyIGV4cHJlc3Npb24gQVBJLiIKLVNVTU1BUlkgPSAiUGVybCBDb21wYXRpYmxlIFJlZ3VsYXIgRXhwcmVzc2lvbnMiCi1IT01FUEFHRSA9ICJodHRwOi8vd3d3LnBjcmUub3JnIgotU0VDVElPTiA9ICJkZXZlbCIKLUxJQ0VOU0UgPSAiQlNEIgotTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vTElDRU5DRTttZDU9N2U0OTM3ODE0YWVlMTQ3NThjMWM5NWI1OWM4MGM0NGQiCi1TUkNfVVJJID0gImZ0cDovL2Z0cC5jc3guY2FtLmFjLnVrL3B1Yi9zb2Z0d2FyZS9wcm9ncmFtbWluZy9wY3JlL3BjcmUtJHtQVn0udGFyLmJ6MiBcCi0gICAgICAgICAgIGZpbGU6Ly9wY3JlLWNyb3NzLnBhdGNoIFwKLSAgICAgICAgICAgZmlsZTovL2ZpeC1wY3JlLW5hbWUtY29sbGlzaW9uLnBhdGNoIFwKLSAgICAgICAgICAgZmlsZTovL3J1bi1wdGVzdCBcCi0gICAgICAgICAgIGZpbGU6Ly9NYWtlZmlsZSBcCi0iCi0KLVNSQ19VUklbbWQ1c3VtXSA9ICIwMGFhYmJmZTU2ZDVhNDhiMjcwZjk5OWI1MDhjNWFkMiIKLVNSQ19VUklbc2hhMjU2c3VtXSA9ICJiOWUwMmQzNmUyMzAyNGQ2YzAyYTJlNWIyNTIwNGIzYTRmYTZhZGU0M2UwYTVmODY5ZjI1NGY0OTUzNTA3OWRmIgotCi1TID0gIiR7V09SS0RJUn0vcGNyZS0ke1BWfSIKLQotUFJPVklERVMgKz0gInBjcmUiCi1ERVBFTkRTICs9ICJiemlwMiB6bGliIgotCi1QQUNLQUdFQ09ORklHID8/PSAicGNyZTggdW5pY29kZS1wcm9wZXJ0aWVzIgotCi1QQUNLQUdFQ09ORklHW3BjcmU4XSA9ICItLWVuYWJsZS1wY3JlOCwtLWRpc2FibGUtcGNyZTgiCi1QQUNLQUdFQ09ORklHW3BjcmUxNl0gPSAiLS1lbmFibGUtcGNyZTE2LC0tZGlzYWJsZS1wY3JlMTYiCi1QQUNLQUdFQ09ORklHW3BjcmUzMl0gPSAiLS1lbmFibGUtcGNyZTMyLC0tZGlzYWJsZS1wY3JlMzIiCi1QQUNLQUdFQ09ORklHW3BjcmV0ZXN0LXJlYWRsaW5lXSA9ICItLWVuYWJsZS1wY3JldGVzdC1saWJyZWFkbGluZSwtLWRpc2FibGUtcGNyZXRlc3QtbGlicmVhZGxpbmUscmVhZGxpbmUsIgotUEFDS0FHRUNPTkZJR1t1bmljb2RlLXByb3BlcnRpZXNdID0gIi0tZW5hYmxlLXVuaWNvZGUtcHJvcGVydGllcywtLWRpc2FibGUtdW5pY29kZS1wcm9wZXJ0aWVzIgotCi1CSU5DT05GSUcgPSAiJHtiaW5kaXJ9L3BjcmUtY29uZmlnIgotCi1pbmhlcml0IGF1dG90b29scyBiaW5jb25maWctZGlzYWJsZWQgcHRlc3QKLQotRVhUUkFfT0VDT05GID0gIlwKLSAgICAtLWVuYWJsZS1uZXdsaW5lLWlzLWxmIFwKLSAgICAtLWVuYWJsZS1yZWJ1aWxkLWNoYXJ0YWJsZXMgXAotICAgIC0tZW5hYmxlLXV0ZiBcCi0gICAgLS13aXRoLWxpbmstc2l6ZT0yIFwKLSAgICAtLXdpdGgtbWF0Y2gtbGltaXQ9MTAwMDAwMDAgXAotIgotCi0jIFNldCBMSU5LX1NJWkUgaW4gQlVJTERfQ0ZMQUdTIGdpdmVuIHRoYXQgdGhlIGF1dG90b29scyBiYmNsYXNzIHVzZSBpdCB0bwotIyBzZXQgQ0ZMQUdTX0ZPUl9CVUlMRCwgcmVxdWlyZWQgZm9yIHRoZSBsaWJwY3JlIGJ1aWxkLgotQlVJTERfQ0ZMQUdTID0rICItRExJTktfU0laRT0yIC1JJHtCfSIKLUNGTEFHUyArPSAiLURfUkVFTlRSQU5UIgotQ1hYRkxBR1NfYXBwZW5kX3Bvd2VycGMgPSAiIC1sc3RkYysrIgotCi1QQUNLQUdFUyA9KyAibGlicGNyZWNwcCBsaWJwY3JlcG9zaXggcGNyZWdyZXAgcGNyZWdyZXAtZG9jIHBjcmV0ZXN0IHBjcmV0ZXN0LWRvYyIKLQotU1VNTUFSWV9saWJwY3JlY3BwID0gIiR7U1VNTUFSWX0gLSBDKysgd3JhcHBlciBmdW5jdGlvbnMiCi1TVU1NQVJZX2xpYnBjcmVwb3NpeCA9ICIke1NVTU1BUll9IC0gQyB3cmFwcGVyIGZ1bmN0aW9ucyBiYXNlZCBvbiB0aGUgUE9TSVggcmVnZXggQVBJIgotU1VNTUFSWV9wY3JlZ3JlcCA9ICJncmVwIHV0aWxpdHkgdGhhdCB1c2VzIHBlcmwgNSBjb21wYXRpYmxlIHJlZ2V4ZXMiCi1TVU1NQVJZX3BjcmVncmVwLWRvYyA9ICJncmVwIHV0aWxpdHkgdGhhdCB1c2VzIHBlcmwgNSBjb21wYXRpYmxlIHJlZ2V4ZXMgLSBkb2NzIgotU1VNTUFSWV9wY3JldGVzdCA9ICJwcm9ncmFtIGZvciB0ZXN0aW5nIFBlcmwtY29tYXRpYmxlIHJlZ3VsYXIgZXhwcmVzc2lvbnMiCi1TVU1NQVJZX3BjcmV0ZXN0LWRvYyA9ICJwcm9ncmFtIGZvciB0ZXN0aW5nIFBlcmwtY29tYXRpYmxlIHJlZ3VsYXIgZXhwcmVzc2lvbnMgLSBkb2NzIgotCi1GSUxFU19saWJwY3JlY3BwID0gIiR7bGliZGlyfS9saWJwY3JlY3BwLnNvLioiCi1GSUxFU19saWJwY3JlcG9zaXggPSAiJHtsaWJkaXJ9L2xpYnBjcmVwb3NpeC5zby4qIgotRklMRVNfcGNyZWdyZXAgPSAiJHtiaW5kaXJ9L3BjcmVncmVwIgotRklMRVNfcGNyZWdyZXAtZG9jID0gIiR7bWFuZGlyfS9tYW4xL3BjcmVncmVwLjEiCi1GSUxFU19wY3JldGVzdCA9ICIke2JpbmRpcn0vcGNyZXRlc3QiCi1GSUxFU19wY3JldGVzdC1kb2MgPSAiJHttYW5kaXJ9L21hbjEvcGNyZXRlc3QuMSIKLQotQkJDTEFTU0VYVEVORCA9ICJuYXRpdmUgbmF0aXZlc2RrIgotCi1kb19pbnN0YWxsX3B0ZXN0KCkgewotCXQ9JHtEfSR7UFRFU1RfUEFUSH0KLQljcCAke1dPUktESVJ9L01ha2VmaWxlICR0Ci0JY3AgLXIgJHtTfS90ZXN0ZGF0YSAkdAotCWZvciBpIGluIHBjcmVfc3RyaW5ncGllY2VfdW5pdHRlc3QgcGNyZWdyZXAgcGNyZXRlc3Q7IFwKLQkgIGRvIGNwICR7Qn0vLmxpYnMvJGkgJHQ7IFwKLQlkb25lCi0JZm9yIGkgaW4gUnVuVGVzdCBSdW5HcmVwVGVzdCB0ZXN0LWRyaXZlcjsgXAotCSAgZG8gY3AgJHtTfS8kaSAkdDsgXAotCWRvbmUKLX0KZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9saWJwY3JlL2xpYnBjcmVfOC4zOS5iYiBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9saWJwY3JlL2xpYnBjcmVfOC4zOS5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yZDQ2NjhiCi0tLSAvZGV2L251bGwKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2xpYnBjcmUvbGlicGNyZV84LjM5LmJiCkBAIC0wLDAgKzEsODEgQEAKK0RFU0NSSVBUSU9OID0gIlRoZSBQQ1JFIGxpYnJhcnkgaXMgYSBzZXQgb2YgZnVuY3Rpb25zIHRoYXQgaW1wbGVtZW50IHJlZ3VsYXIgXAorZXhwcmVzc2lvbiBwYXR0ZXJuIG1hdGNoaW5nIHVzaW5nIHRoZSBzYW1lIHN5bnRheCBhbmQgc2VtYW50aWNzIGFzIFBlcmwgNS4gUENSRSBcCitoYXMgaXRzIG93biBuYXRpdmUgQVBJLCBhcyB3ZWxsIGFzIGEgc2V0IG9mIHdyYXBwZXIgZnVuY3Rpb25zIHRoYXQgY29ycmVzcG9uZCBcCit0byB0aGUgUE9TSVggcmVndWxhciBleHByZXNzaW9uIEFQSS4iCitTVU1NQVJZID0gIlBlcmwgQ29tcGF0aWJsZSBSZWd1bGFyIEV4cHJlc3Npb25zIgorSE9NRVBBR0UgPSAiaHR0cDovL3d3dy5wY3JlLm9yZyIKK1NFQ1RJT04gPSAiZGV2ZWwiCitMSUNFTlNFID0gIkJTRCIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0xJQ0VOQ0U7bWQ1PWI4MjIxY2JmNDNjNTU4N2Y5MGNjZjIyOGYxMTg1Y2MyIgorU1JDX1VSSSA9ICJmdHA6Ly9mdHAuY3N4LmNhbS5hYy51ay9wdWIvc29mdHdhcmUvcHJvZ3JhbW1pbmcvcGNyZS9wY3JlLSR7UFZ9LnRhci5iejIgXAorICAgICAgICAgICBmaWxlOi8vcGNyZS1jcm9zcy5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9maXgtcGNyZS1uYW1lLWNvbGxpc2lvbi5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9ydW4tcHRlc3QgXAorICAgICAgICAgICBmaWxlOi8vTWFrZWZpbGUgXAorIgorCitTUkNfVVJJW21kNXN1bV0gPSAiZTNmY2E3NjUwYTA1NTZhMjY0NzgyMTY3OWQ4MWY1ODUiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiYjg1ODA5OWY4MjQ4MzAzMWVlMDIwOTI3MTE2ODllNzI0NTU4NmFkYTQ5ZTUzNGEwNmU2NzhiOGVhOTU0OWU4YiIKKworUyA9ICIke1dPUktESVJ9L3BjcmUtJHtQVn0iCisKK1BST1ZJREVTICs9ICJwY3JlIgorREVQRU5EUyArPSAiYnppcDIgemxpYiIKKworUEFDS0FHRUNPTkZJRyA/Pz0gInBjcmU4IHVuaWNvZGUtcHJvcGVydGllcyIKKworUEFDS0FHRUNPTkZJR1twY3JlOF0gPSAiLS1lbmFibGUtcGNyZTgsLS1kaXNhYmxlLXBjcmU4IgorUEFDS0FHRUNPTkZJR1twY3JlMTZdID0gIi0tZW5hYmxlLXBjcmUxNiwtLWRpc2FibGUtcGNyZTE2IgorUEFDS0FHRUNPTkZJR1twY3JlMzJdID0gIi0tZW5hYmxlLXBjcmUzMiwtLWRpc2FibGUtcGNyZTMyIgorUEFDS0FHRUNPTkZJR1twY3JldGVzdC1yZWFkbGluZV0gPSAiLS1lbmFibGUtcGNyZXRlc3QtbGlicmVhZGxpbmUsLS1kaXNhYmxlLXBjcmV0ZXN0LWxpYnJlYWRsaW5lLHJlYWRsaW5lLCIKK1BBQ0tBR0VDT05GSUdbdW5pY29kZS1wcm9wZXJ0aWVzXSA9ICItLWVuYWJsZS11bmljb2RlLXByb3BlcnRpZXMsLS1kaXNhYmxlLXVuaWNvZGUtcHJvcGVydGllcyIKKworQklOQ09ORklHID0gIiR7YmluZGlyfS9wY3JlLWNvbmZpZyIKKworaW5oZXJpdCBhdXRvdG9vbHMgYmluY29uZmlnLWRpc2FibGVkIHB0ZXN0CisKK0VYVFJBX09FQ09ORiA9ICJcCisgICAgLS1lbmFibGUtbmV3bGluZS1pcy1sZiBcCisgICAgLS1lbmFibGUtcmVidWlsZC1jaGFydGFibGVzIFwKKyAgICAtLWVuYWJsZS11dGYgXAorICAgIC0td2l0aC1saW5rLXNpemU9MiBcCisgICAgLS13aXRoLW1hdGNoLWxpbWl0PTEwMDAwMDAwIFwKKyIKKworIyBTZXQgTElOS19TSVpFIGluIEJVSUxEX0NGTEFHUyBnaXZlbiB0aGF0IHRoZSBhdXRvdG9vbHMgYmJjbGFzcyB1c2UgaXQgdG8KKyMgc2V0IENGTEFHU19GT1JfQlVJTEQsIHJlcXVpcmVkIGZvciB0aGUgbGlicGNyZSBidWlsZC4KK0JVSUxEX0NGTEFHUyA9KyAiLURMSU5LX1NJWkU9MiAtSSR7Qn0iCitDRkxBR1MgKz0gIi1EX1JFRU5UUkFOVCIKK0NYWEZMQUdTX2FwcGVuZF9wb3dlcnBjID0gIiAtbHN0ZGMrKyIKKworZXhwb3J0IENDTERfRk9SX0JVSUxEID0iJHtCVUlMRF9DQ0xEfSIKKworUEFDS0FHRVMgPSsgImxpYnBjcmVjcHAgbGlicGNyZXBvc2l4IHBjcmVncmVwIHBjcmVncmVwLWRvYyBwY3JldGVzdCBwY3JldGVzdC1kb2MiCisKK1NVTU1BUllfbGlicGNyZWNwcCA9ICIke1NVTU1BUll9IC0gQysrIHdyYXBwZXIgZnVuY3Rpb25zIgorU1VNTUFSWV9saWJwY3JlcG9zaXggPSAiJHtTVU1NQVJZfSAtIEMgd3JhcHBlciBmdW5jdGlvbnMgYmFzZWQgb24gdGhlIFBPU0lYIHJlZ2V4IEFQSSIKK1NVTU1BUllfcGNyZWdyZXAgPSAiZ3JlcCB1dGlsaXR5IHRoYXQgdXNlcyBwZXJsIDUgY29tcGF0aWJsZSByZWdleGVzIgorU1VNTUFSWV9wY3JlZ3JlcC1kb2MgPSAiZ3JlcCB1dGlsaXR5IHRoYXQgdXNlcyBwZXJsIDUgY29tcGF0aWJsZSByZWdleGVzIC0gZG9jcyIKK1NVTU1BUllfcGNyZXRlc3QgPSAicHJvZ3JhbSBmb3IgdGVzdGluZyBQZXJsLWNvbWF0aWJsZSByZWd1bGFyIGV4cHJlc3Npb25zIgorU1VNTUFSWV9wY3JldGVzdC1kb2MgPSAicHJvZ3JhbSBmb3IgdGVzdGluZyBQZXJsLWNvbWF0aWJsZSByZWd1bGFyIGV4cHJlc3Npb25zIC0gZG9jcyIKKworRklMRVNfbGlicGNyZWNwcCA9ICIke2xpYmRpcn0vbGlicGNyZWNwcC5zby4qIgorRklMRVNfbGlicGNyZXBvc2l4ID0gIiR7bGliZGlyfS9saWJwY3JlcG9zaXguc28uKiIKK0ZJTEVTX3BjcmVncmVwID0gIiR7YmluZGlyfS9wY3JlZ3JlcCIKK0ZJTEVTX3BjcmVncmVwLWRvYyA9ICIke21hbmRpcn0vbWFuMS9wY3JlZ3JlcC4xIgorRklMRVNfcGNyZXRlc3QgPSAiJHtiaW5kaXJ9L3BjcmV0ZXN0IgorRklMRVNfcGNyZXRlc3QtZG9jID0gIiR7bWFuZGlyfS9tYW4xL3BjcmV0ZXN0LjEiCisKK0JCQ0xBU1NFWFRFTkQgPSAibmF0aXZlIG5hdGl2ZXNkayIKKworZG9faW5zdGFsbF9wdGVzdCgpIHsKKwl0PSR7RH0ke1BURVNUX1BBVEh9CisJY3AgJHtXT1JLRElSfS9NYWtlZmlsZSAkdAorCWNwIC1yICR7U30vdGVzdGRhdGEgJHQKKwlmb3IgaSBpbiBwY3JlX3N0cmluZ3BpZWNlX3VuaXR0ZXN0IHBjcmVncmVwIHBjcmV0ZXN0OyBcCisJICBkbyBjcCAke0J9Ly5saWJzLyRpICR0OyBcCisJZG9uZQorCWZvciBpIGluIFJ1blRlc3QgUnVuR3JlcFRlc3QgdGVzdC1kcml2ZXI7IFwKKwkgIGRvIGNwICR7U30vJGkgJHQ7IFwKKwlkb25lCit9CmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbGlicHJveHkvbGlicHJveHkvMDAwMS10ZXN0LUluY2x1ZGUtc3lzLXNlbGVjdC5oLWZvci1zZWxlY3QucGF0Y2ggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbGlicHJveHkvbGlicHJveHkvMDAwMS10ZXN0LUluY2x1ZGUtc3lzLXNlbGVjdC5oLWZvci1zZWxlY3QucGF0Y2gKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDVhZTUyZjIuLjAwMDAwMDAKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2xpYnByb3h5L2xpYnByb3h5LzAwMDEtdGVzdC1JbmNsdWRlLXN5cy1zZWxlY3QuaC1mb3Itc2VsZWN0LnBhdGNoCisrKyAvZGV2L251bGwKQEAgLTEsMzcgKzAsMCBAQAotRnJvbSBmNWYyYzIyODllYjM1ZWI4MDRjMWMzNWU0NmNhNDFiNThlNGNhZTAxIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQotRnJvbTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KLURhdGU6IE1vbiwgNiBBcHIgMjAxNSAxNDoxMzo0OSAtMDcwMAotU3ViamVjdDogW1BBVENIXSB0ZXN0OiBJbmNsdWRlIDxzeXMvc2VsZWN0Lmg+IGZvciBzZWxlY3QoKQotCi1BcyBwZXIgcG9zaXggd2UgbmVlZCB0byBpbmNsdWRlIHRoaXMgZmlsZSBvdGhlcndpc2Ugd2UgZW5kIHVwIHdpdGggZXJyb3JzIGxpa2UKLQotL2hvbWUva3Jhai93b3JrL2JsZWVkaW5nL29wZW5lbWJlZGRlZC1jb3JlL2J1aWxkL3RtcC1tdXNsL3dvcmsvbWlwczMycjItb2UtbGludXgtbXVzbC9saWJwcm94eS8wLjQuMTEtcjAvbGlicHJveHktMC40LjExL2xpYnByb3h5L3Rlc3QvZ2V0LXBhYy10ZXN0LmNwcDogSW4gbWVtYmVyIGZ1bmN0aW9uICdib29sIFRlc3RTZXJ2ZXI6Omxvb3AoKSc6Ci0vaG9tZS9rcmFqL3dvcmsvYmxlZWRpbmcvb3BlbmVtYmVkZGVkLWNvcmUvYnVpbGQvdG1wLW11c2wvd29yay9taXBzMzJyMi1vZS1saW51eC1tdXNsL2xpYnByb3h5LzAuNC4xMS1yMC9saWJwcm94eS0wLjQuMTEvbGlicHJveHkvdGVzdC9nZXQtcGFjLXRlc3QuY3BwOjgwOjQ6IGVycm9yOiAnZmRfc2V0JyB3YXMgbm90IGRlY2xhcmVkIGluIHRoaXMgc2NvcGUKLSAgICBmZF9zZXQgZmRzOwotICAgIF4KLS9ob21lL2tyYWovd29yay9ibGVlZGluZy9vcGVuZW1iZWRkZWQtY29yZS9idWlsZC90bXAtbXVzbC93b3JrL21pcHMzMnIyLW9lLWxpbnV4LW11c2wvbGlicHJveHkvMC40LjExLXIwL2xpYnByb3h5LTAuNC4xMS9saWJwcm94eS90ZXN0L2dldC1wYWMtdGVzdC5jcHA6ODk6MTQ6IGVycm9yOiAnZmRzJyB3YXMgbm90IGRlY2xhcmVkIGluIHRoaXMgc2NvcGUKLSAgICBGRF9aRVJPICgmZmRzKTsKLTxKSVJBIFRJQ0tFVCAjMT4sIDxKSVJBIFRJQ0tFVCAjMj4sIDxKSVJBIFRJQ0tFVCAjbj4gOiA8b25lIGxpbmUgc3VtbWFyeSBvZiBjaGFuZ2U+Ci0KLVVwc3RyZWFtLVN0YXR1czogUGVuZGluZwotCi1TaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgotLS0tCi0gbGlicHJveHkvdGVzdC9nZXQtcGFjLXRlc3QuY3BwIHwgMSArCi0gMSBmaWxlIGNoYW5nZWQsIDEgaW5zZXJ0aW9uKCspCi0KLWRpZmYgLS1naXQgYS9saWJwcm94eS90ZXN0L2dldC1wYWMtdGVzdC5jcHAgYi9saWJwcm94eS90ZXN0L2dldC1wYWMtdGVzdC5jcHAKLWluZGV4IGE2MWZjNGIuLmJkYTQ2NDYgMTAwNjQ0Ci0tLS0gYS9saWJwcm94eS90ZXN0L2dldC1wYWMtdGVzdC5jcHAKLSsrKyBiL2xpYnByb3h5L3Rlc3QvZ2V0LXBhYy10ZXN0LmNwcAotQEAgLTMsNiArMyw3IEBACi0gI2luY2x1ZGUgPHNzdHJlYW0+Ci0gI2luY2x1ZGUgPHN0cmluZz4KLSAKLSsjaW5jbHVkZSA8c3lzL3NlbGVjdC5oPgotICNpbmNsdWRlIDxzeXMvc29ja2V0Lmg+Ci0gI2luY2x1ZGUgPG5ldGluZXQvaW4uaD4KLSAjaW5jbHVkZSA8YXJwYS9pbmV0Lmg+Ci0tLSAKLTIuMS40Ci0KZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9saWJwcm94eS9saWJwcm94eV8wLjQuMTEuYmIgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbGlicHJveHkvbGlicHJveHlfMC40LjExLmJiCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4Y2M5MGJiLi4wMDAwMDAwCi0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9saWJwcm94eS9saWJwcm94eV8wLjQuMTEuYmIKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi1TVU1NQVJZID0gIkxpYnJhcnkgcHJvdmlkaW5nIGF1dG9tYXRpYyBwcm94eSBjb25maWd1cmF0aW9uIG1hbmFnZW1lbnQiCi1IT01FUEFHRSA9ICJodHRwOi8vY29kZS5nb29nbGUuY29tL3AvbGlicHJveHkvIgotQlVHVFJBQ0tFUiA9ICJodHRwOi8vY29kZS5nb29nbGUuY29tL3AvbGlicHJveHkvaXNzdWVzL2xpc3QiCi1TRUNUSU9OID0gImxpYnMiCi1MSUNFTlNFID0gIkxHUEx2Mi4xKyIKLUxJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PTRmYmQ2NTM4MGNkZDI1NTk1MTA3OTAwOGIzNjQ1MTZjIFwKLSAgICAgICAgICAgICAgICAgICAgZmlsZTovL3V0aWxzL3Byb3h5LmM7YmVnaW5saW5lPTE7ZW5kbGluZT0xODttZDU9NTUxNTJhMTAwNmQ3ZGFmYmVmMzJiYWY5YzMwYTk5YzAiCi0KLURFUEVORFMgPSAiZ2xpYi0yLjAiCi0KLVNSQ19VUkkgPSAiJHtERUJJQU5fTUlSUk9SfS9tYWluL2xpYnAvJHtCUE59LyR7QlBOfV8ke1BWfS5vcmlnLnRhci5neiBcCi0gICAgICAgICAgIGZpbGU6Ly8wMDAxLXRlc3QtSW5jbHVkZS1zeXMtc2VsZWN0LmgtZm9yLXNlbGVjdC5wYXRjaCBcCi0gICAgICAgICAgIgotCi1TUkNfVVJJW21kNXN1bV0gPSAiM2NkMWFlMmE0YWJlY2Y0NGIzZjI0ZDY2MzlkMmNkODQiCi1TUkNfVVJJW3NoYTI1NnN1bV0gPSAiZGMzZjMzZGU1NDE2MzcxOGY4MmIzZTdjNDk2YTdkZTk3Zjg4NjI1Nzg0MTRiOGVjYWFkM2NiZmU0ODIxODY0YiIKLQotaW5oZXJpdCBjbWFrZSBwa2djb25maWcKLQotUEFDS0FHRUNPTkZJRyA/PSAiJHtAYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsICd4MTEnLCAnZ25vbWUnLCAnJywgZCl9IGdub21lMyIKLVBBQ0tBR0VDT05GSUdbZ25vbWVdID0gIi1EV0lUSF9HTk9NRT15ZXMsLURXSVRIX0dOT01FPW5vLGdjb25mIgotUEFDS0FHRUNPTkZJR1tnbm9tZTNdID0gIi1EV0lUSF9HTk9NRTM9eWVzLC1EV0lUSF9HTk9NRTM9bm8iCi0KLUVYVFJBX09FQ01BS0UgKz0gIiBcCi0gICAgLURXSVRIX0tERTQ9bm8gXAotICAgIC1EV0lUSF9NT1pKUz1ubyBcCi0gICAgLURXSVRIX05NPW5vIFwKLSAgICAtRFdJVEhfUEVSTD1ubyBcCi0gICAgLURXSVRIX1BZVEhPTj1ubyBcCi0gICAgLURXSVRIX1dFQktJVD1ubyBcCi0gICAgLURMSUJfSU5TVEFMTF9ESVI9JHtsaWJkaXJ9IFwKLSAgICAtRExJQkVYRUNfSU5TVEFMTF9ESVI9JHtsaWJleGVjZGlyfSBcCi0iCi0KLUZJTEVTXyR7UE59ICs9ICIke2xpYmRpcn0vJHtCUE59LyR7UFZ9L21vZHVsZXMiCi1GSUxFU18ke1BOfS1kZXYgKz0gIiR7ZGF0YWRpcn0vY21ha2UiCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbGlicHJveHkvbGlicHJveHlfMC40LjEzLmJiIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2xpYnByb3h5L2xpYnByb3h5XzAuNC4xMy5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zOTQwZTIyCi0tLSAvZGV2L251bGwKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2xpYnByb3h5L2xpYnByb3h5XzAuNC4xMy5iYgpAQCAtMCwwICsxLDM2IEBACitTVU1NQVJZID0gIkxpYnJhcnkgcHJvdmlkaW5nIGF1dG9tYXRpYyBwcm94eSBjb25maWd1cmF0aW9uIG1hbmFnZW1lbnQiCitIT01FUEFHRSA9ICJodHRwczovL2dpdGh1Yi5jb20vbGlicHJveHkvbGlicHJveHkiCitCVUdUUkFDS0VSID0gImh0dHBzOi8vZ2l0aHViLmNvbS9saWJwcm94eS9saWJwcm94eS9pc3N1ZXMiCitTRUNUSU9OID0gImxpYnMiCitMSUNFTlNFID0gIkxHUEx2Mi4xKyIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PTRmYmQ2NTM4MGNkZDI1NTk1MTA3OTAwOGIzNjQ1MTZjIFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL3V0aWxzL3Byb3h5LmM7YmVnaW5saW5lPTE7ZW5kbGluZT0xODttZDU9NTUxNTJhMTAwNmQ3ZGFmYmVmMzJiYWY5YzMwYTk5YzAiCisKK0RFUEVORFMgPSAiZ2xpYi0yLjAiCisKK1NSQ19VUkkgPSAiaHR0cHM6Ly9naXRodWIuY29tLyR7QlBOfS8ke0JQTn0vYXJjaGl2ZS8ke1BWfS50YXIuZ3oiCisKK1VQU1RSRUFNX0NIRUNLX1VSSSA9ICJodHRwczovL2dpdGh1Yi5jb20vbGlicHJveHkvbGlicHJveHkvcmVsZWFzZXMiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICJkZTI5M2JiMzExZjE4NWEyZmZhMzQ5MjcwMGE2OTRjMiIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICJkNjEwYmMwZWY4MWExOGJhNDE4ZDc1OWM1ZjRmODdiZjcxMDIyMjlhOTE1M2ZiMzk3ZDdkNDkwOTg3MzMwZmZkIgorCitpbmhlcml0IGNtYWtlIHBrZ2NvbmZpZworCitQQUNLQUdFQ09ORklHID89ICIke0BiYi51dGlscy5jb250YWlucygnRElTVFJPX0ZFQVRVUkVTJywgJ3gxMScsICdnbm9tZScsICcnLCBkKX0gZ25vbWUzIgorUEFDS0FHRUNPTkZJR1tnbm9tZV0gPSAiLURXSVRIX0dOT01FPXllcywtRFdJVEhfR05PTUU9bm8sZ2NvbmYiCitQQUNLQUdFQ09ORklHW2dub21lM10gPSAiLURXSVRIX0dOT01FMz15ZXMsLURXSVRIX0dOT01FMz1ubyIKKworRVhUUkFfT0VDTUFLRSArPSAiIFwKKyAgICAtRFdJVEhfS0RFND1ubyBcCisgICAgLURXSVRIX01PWkpTPW5vIFwKKyAgICAtRFdJVEhfTk09bm8gXAorICAgIC1EV0lUSF9QRVJMPW5vIFwKKyAgICAtRFdJVEhfUFlUSE9OPW5vIFwKKyAgICAtRFdJVEhfV0VCS0lUPW5vIFwKKyAgICAtRExJQl9JTlNUQUxMX0RJUj0ke2xpYmRpcn0gXAorICAgIC1ETElCRVhFQ19JTlNUQUxMX0RJUj0ke2xpYmV4ZWNkaXJ9IFwKKyIKKworRklMRVNfJHtQTn0gKz0gIiR7bGliZGlyfS8ke0JQTn0vJHtQVn0vbW9kdWxlcyIKK0ZJTEVTXyR7UE59LWRldiArPSAiJHtkYXRhZGlyfS9jbWFrZSIKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9saWJzb3VwL2xpYnNvdXAtMi40XzIuNTIuMi5iYiBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9saWJzb3VwL2xpYnNvdXAtMi40XzIuNTIuMi5iYgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjZlM2RiMi4uMDAwMDAwMAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbGlic291cC9saWJzb3VwLTIuNF8yLjUyLjIuYmIKKysrIC9kZXYvbnVsbApAQCAtMSwzNCArMCwwIEBACi1TVU1NQVJZID0gIkFuIEhUVFAgbGlicmFyeSBpbXBsZW1lbnRhdGlvbiBpbiBDIgotSE9NRVBBR0UgPSAiaHR0cHM6Ly93aWtpLmdub21lLm9yZy9Qcm9qZWN0cy9saWJzb3VwIgotQlVHVFJBQ0tFUiA9ICJodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy8iCi1TRUNUSU9OID0gIngxMS9nbm9tZS9saWJzIgotTElDRU5TRSA9ICJMR1BMdjIiCi1MSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT01ZjMwZjA3MTZkZmRkMGQ5MWViNDM5ZWJlYzUyMmVjMiIKLQotREVQRU5EUyA9ICJnbGliLTIuMCBnbGliLTIuMC1uYXRpdmUgbGlieG1sMiBzcWxpdGUzIGludGx0b29sLW5hdGl2ZSIKLQotU0hSVF9WRVIgPSAiJHtAZC5nZXRWYXIoJ1BWJywgVHJ1ZSkuc3BsaXQoJy4nKVswXX0uJHtAZC5nZXRWYXIoJ1BWJywgVHJ1ZSkuc3BsaXQoJy4nKVsxXX0iCi0KLVNSQ19VUkkgPSAiJHtHTk9NRV9NSVJST1J9L2xpYnNvdXAvJHtTSFJUX1ZFUn0vbGlic291cC0ke1BWfS50YXIueHoiCi0KLVNSQ19VUklbbWQ1c3VtXSA9ICJlNDc1N2QwOTAxMmVkOTM4MjJiMWVlNDE0MzVmZWMyNCIKLVNSQ19VUklbc2hhMjU2c3VtXSA9ICJkYjU1NjI4YjVjN2Q5NTI5NDViYjcxYjIzNjQ2OTA1N2M4ZGZiOGRlYTBjMjcxNTEzNTc5YzYyNzNjMjA5M2RjIgotCi1TID0gIiR7V09SS0RJUn0vbGlic291cC0ke1BWfSIKLQotaW5oZXJpdCBhdXRvdG9vbHMgZ2V0dGV4dCBwa2djb25maWcgdXBzdHJlYW0tdmVyc2lvbi1pcy1ldmVuIGdvYmplY3QtaW50cm9zcGVjdGlvbgotCi0jIGxpYnNvdXAtZ25vbWUgaXMgZW50aXJlbHkgZGVwcmVjYXRlZCBhbmQganVzdCBzdHVicyBpbiAyLjQyIG9ud2FyZHMuIERpc2FibGUgYnkgZGVmYXVsdC4KLVBBQ0tBR0VDT05GSUcgPz89ICIiCi1QQUNLQUdFQ09ORklHW2dub21lXSA9ICItLXdpdGgtZ25vbWUsLS13aXRob3V0LWdub21lIgotCi1FWFRSQV9PRUNPTkYgPSAiLS1kaXNhYmxlLXZhbGEiCi0KLSMgV2hlbiBidWlsdCB3aXRob3V0IGdub21lIHN1cHBvcnQsIGxpYnNvdXAtMi40IHdpbGwgY29udGFpbiBvbmx5IG9uZSBzaGFyZWQgbGliCi0jIGFuZCB3aWxsIHRoZXJlZm9yZSBiZWNvbWUgc3ViamVjdCB0byByZW5hbWluZyBieSBkZWJpYW4uYmJjbGFzcy4gUHJldmVudAotIyByZW5hbWluZyBpbiBvcmRlciB0byBrZWVwIHRoZSBwYWNrYWdlIG5hbWUgY29uc2lzdGVudCByZWdhcmRsZXNzIG9mIHdoZXRoZXIKLSMgZ25vbWUgc3VwcG9ydCBpcyBlbmFibGVkIG9yIGRpc2FibGVkLgotREVCSUFOX05PQVVUT05BTUVfJHtQTn0gPSAiMSIKLQotIyBnbGliLW5ldHdvcmtpbmcgaXMgbmVlZGVkIGZvciBTU0wsIHByb3hpZXMsIGV0Yy4KLVJSRUNPTU1FTkRTXyR7UE59ID0gImdsaWItbmV0d29ya2luZyIKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9saWJzb3VwL2xpYnNvdXAtMi40XzIuNTQuMS5iYiBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9saWJzb3VwL2xpYnNvdXAtMi40XzIuNTQuMS5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iOTNhOWZkCi0tLSAvZGV2L251bGwKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2xpYnNvdXAvbGlic291cC0yLjRfMi41NC4xLmJiCkBAIC0wLDAgKzEsMzUgQEAKK1NVTU1BUlkgPSAiQW4gSFRUUCBsaWJyYXJ5IGltcGxlbWVudGF0aW9uIGluIEMiCitIT01FUEFHRSA9ICJodHRwczovL3dpa2kuZ25vbWUub3JnL1Byb2plY3RzL2xpYnNvdXAiCitCVUdUUkFDS0VSID0gImh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnLyIKK1NFQ1RJT04gPSAieDExL2dub21lL2xpYnMiCitMSUNFTlNFID0gIkxHUEx2MiIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PTVmMzBmMDcxNmRmZGQwZDkxZWI0MzllYmVjNTIyZWMyIgorCitERVBFTkRTID0gImdsaWItMi4wIGdsaWItMi4wLW5hdGl2ZSBsaWJ4bWwyIHNxbGl0ZTMgaW50bHRvb2wtbmF0aXZlIgorCitTSFJUX1ZFUiA9ICIke0BkLmdldFZhcignUFYnLCBUcnVlKS5zcGxpdCgnLicpWzBdfS4ke0BkLmdldFZhcignUFYnLCBUcnVlKS5zcGxpdCgnLicpWzFdfSIKKworU1JDX1VSSSA9ICIke0dOT01FX01JUlJPUn0vbGlic291cC8ke1NIUlRfVkVSfS9saWJzb3VwLSR7UFZ9LnRhci54eiIKKworU1JDX1VSSVttZDVzdW1dID0gIjczYjFmYjc3NGRlMTZjMjliMzgwZjg3MDE2ZjlmOWRkIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjQ3YjQyYzIzMjAzNDczNGQ2NmU1ZjA5MzAyNTg0M2E1ZDhjYzRiMjM1N2MwMTEwODVhMmZkMDRlZjAyZGQ2MzMiCisKK1MgPSAiJHtXT1JLRElSfS9saWJzb3VwLSR7UFZ9IgorCitpbmhlcml0IGF1dG90b29scyBnZXR0ZXh0IHBrZ2NvbmZpZyB1cHN0cmVhbS12ZXJzaW9uLWlzLWV2ZW4gZ29iamVjdC1pbnRyb3NwZWN0aW9uIGd0ay1kb2MKKworIyBsaWJzb3VwLWdub21lIGlzIGVudGlyZWx5IGRlcHJlY2F0ZWQgYW5kIGp1c3Qgc3R1YnMgaW4gMi40MiBvbndhcmRzLiBEaXNhYmxlIGJ5IGRlZmF1bHQuCitQQUNLQUdFQ09ORklHID8/PSAiIgorUEFDS0FHRUNPTkZJR1tnbm9tZV0gPSAiLS13aXRoLWdub21lLC0td2l0aG91dC1nbm9tZSIKK1BBQ0tBR0VDT05GSUdbZ3NzYXBpXSA9ICItLXdpdGgtZ3NzYXBpLC0td2l0aG91dC1nc3NhcGksa3JiNSIKKworRVhUUkFfT0VDT05GID0gIi0tZGlzYWJsZS12YWxhIgorCisjIFdoZW4gYnVpbHQgd2l0aG91dCBnbm9tZSBzdXBwb3J0LCBsaWJzb3VwLTIuNCB3aWxsIGNvbnRhaW4gb25seSBvbmUgc2hhcmVkIGxpYgorIyBhbmQgd2lsbCB0aGVyZWZvcmUgYmVjb21lIHN1YmplY3QgdG8gcmVuYW1pbmcgYnkgZGViaWFuLmJiY2xhc3MuIFByZXZlbnQKKyMgcmVuYW1pbmcgaW4gb3JkZXIgdG8ga2VlcCB0aGUgcGFja2FnZSBuYW1lIGNvbnNpc3RlbnQgcmVnYXJkbGVzcyBvZiB3aGV0aGVyCisjIGdub21lIHN1cHBvcnQgaXMgZW5hYmxlZCBvciBkaXNhYmxlZC4KK0RFQklBTl9OT0FVVE9OQU1FXyR7UE59ID0gIjEiCisKKyMgZ2xpYi1uZXR3b3JraW5nIGlzIG5lZWRlZCBmb3IgU1NMLCBwcm94aWVzLCBldGMuCitSUkVDT01NRU5EU18ke1BOfSA9ICJnbGliLW5ldHdvcmtpbmciCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbGlidW53aW5kL2xpYnVud2luZC0xLjEvMDAwMS1GaXgtYnVpbGQtb24tbWlwcy1tdXNsLnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2xpYnVud2luZC9saWJ1bndpbmQtMS4xLzAwMDEtRml4LWJ1aWxkLW9uLW1pcHMtbXVzbC5wYXRjaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTQyNmZjYy4uMDAwMDAwMAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbGlidW53aW5kL2xpYnVud2luZC0xLjEvMDAwMS1GaXgtYnVpbGQtb24tbWlwcy1tdXNsLnBhdGNoCisrKyAvZGV2L251bGwKQEAgLTEsOTAgKzAsMCBAQAotRnJvbSBlNjIzYzc3MDM5NDVhNWViNmM5YTMwNTg2ZWM1ZTIzYjJmNzM5NmY2IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQotRnJvbTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KLURhdGU6IFdlZCwgMjMgTWFyIDIwMTYgMDY6MDg6NTkgKzAwMDAKLVN1YmplY3Q6IFtQQVRDSF0gRml4IGJ1aWxkIG9uIG1pcHMvbXVzbAotCi1EbyBub3QgaW5jbHVkZSBlbmRpYW4uaCBvbiBtdXNsIGl0IGluY2x1ZGVzCi1mdXJ0aGVyIGhlYWRlcnMgd2hpY2ggY2FuIG5vdCBiZSBjb21waWxlZCBpbiBfX0FTU0VNQkxFUl9fCi0gbW9kZQotCi1TaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgotLS0tCi1VcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKLQotIHNyYy9jb3JlZHVtcC9fVUNEX2ludGVybmFsLmggfCAzNCArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrCi0gc3JjL21pcHMvZ2V0Y29udGV4dC5TICAgICAgICB8ICAzICstLQotIDIgZmlsZXMgY2hhbmdlZCwgMzUgaW5zZXJ0aW9ucygrKSwgMiBkZWxldGlvbnMoLSkKLQotZGlmZiAtLWdpdCBhL3NyYy9jb3JlZHVtcC9fVUNEX2ludGVybmFsLmggYi9zcmMvY29yZWR1bXAvX1VDRF9pbnRlcm5hbC5oCi1pbmRleCAzYzk1YTJhLi44MGFjYzE1IDEwMDY0NAotLS0tIGEvc3JjL2NvcmVkdW1wL19VQ0RfaW50ZXJuYWwuaAotKysrIGIvc3JjL2NvcmVkdW1wL19VQ0RfaW50ZXJuYWwuaAotQEAgLTM0LDYgKzM0LDcgQEAgV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuICAqLwotICNpZmRlZiBIQVZFX1NZU19QUk9DRlNfSAotICNpbmNsdWRlIDxzeXMvcHJvY2ZzLmg+IC8qIHN0cnVjdCBlbGZfcHJzdGF0dXMgKi8KLSAjZW5kaWYKLSsjaW5jbHVkZSA8c3lzL3JlZy5oPgotICNpbmNsdWRlIDxlcnJuby5oPgotICNpbmNsdWRlIDxzdHJpbmcuaD4KLSAjaW5jbHVkZSA8bGltaXRzLmg+Ci1AQCAtNDQsNiArNDUsMzkgQEAgV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuICAqLwotIAotICNpbmNsdWRlICJsaWJ1bndpbmRfaS5oIgotIAotKyNpZm5kZWYgX19HTElCQ19fCi0rI2RlZmluZSBFRl9SRUcwCQkJNgotKyNkZWZpbmUgRUZfUkVHMQkJCTcKLSsjZGVmaW5lIEVGX1JFRzIJCQk4Ci0rI2RlZmluZSBFRl9SRUczCQkJOQotKyNkZWZpbmUgRUZfUkVHNAkJCTEwCi0rI2RlZmluZSBFRl9SRUc1CQkJMTEKLSsjZGVmaW5lIEVGX1JFRzYJCQkxMgotKyNkZWZpbmUgRUZfUkVHNwkJCTEzCi0rI2RlZmluZSBFRl9SRUc4CQkJMTQKLSsjZGVmaW5lIEVGX1JFRzkJCQkxNQotKyNkZWZpbmUgRUZfUkVHMTAJCTE2Ci0rI2RlZmluZSBFRl9SRUcxMQkJMTcKLSsjZGVmaW5lIEVGX1JFRzEyCQkxOAotKyNkZWZpbmUgRUZfUkVHMTMJCTE5Ci0rI2RlZmluZSBFRl9SRUcxNAkJMjAKLSsjZGVmaW5lIEVGX1JFRzE1CQkyMQotKyNkZWZpbmUgRUZfUkVHMTYJCTIyCi0rI2RlZmluZSBFRl9SRUcxNwkJMjMKLSsjZGVmaW5lIEVGX1JFRzE4CQkyNAotKyNkZWZpbmUgRUZfUkVHMTkJCTI1Ci0rI2RlZmluZSBFRl9SRUcyMAkJMjYKLSsjZGVmaW5lIEVGX1JFRzIxCQkyNwotKyNkZWZpbmUgRUZfUkVHMjIJCTI4Ci0rI2RlZmluZSBFRl9SRUcyMwkJMjkKLSsjZGVmaW5lIEVGX1JFRzI0CQkzMAotKyNkZWZpbmUgRUZfUkVHMjUJCTMxCi0rI2RlZmluZSBFRl9SRUcyOAkJMzQKLSsjZGVmaW5lIEVGX1JFRzI5CQkzNQotKyNkZWZpbmUgRUZfUkVHMzAJCTM2Ci0rI2RlZmluZSBFRl9SRUczMQkJMzcKLSsjZW5kaWYKLSsKLSAKLSAjaWYgU0laRU9GX09GRl9UID09IDQKLSB0eXBlZGVmIHVpbnQzMl90IHVvZmZfdDsKLWRpZmYgLS1naXQgYS9zcmMvbWlwcy9nZXRjb250ZXh0LlMgYi9zcmMvbWlwcy9nZXRjb250ZXh0LlMKLWluZGV4IGQxZGJkNTcuLmRlOWI2ODEgMTAwNjQ0Ci0tLS0gYS9zcmMvbWlwcy9nZXRjb250ZXh0LlMKLSsrKyBiL3NyYy9taXBzL2dldGNvbnRleHQuUwotQEAgLTI0LDEyICsyNCwxMSBAQCBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04KLSBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4gICovCi0gCi0gI2luY2x1ZGUgIm9mZnNldHMuaCIKLS0jaW5jbHVkZSA8ZW5kaWFuLmg+Ci0gCi0gCS50ZXh0Ci0gCi0gI2lmIF9NSVBTX1NJTSA9PSBfQUJJTzMyCi0tIyBpZiBfX0JZVEVfT1JERVIgPT0gX19CSUdfRU5ESUFOCi0rIyBpZiBfX0JZVEVfT1JERVJfXyA9PSBfX09SREVSX0JJR19FTkRJQU5fXwotICMgIGRlZmluZSBPRkZTRVQgNAotICMgZWxzZQotICMgIGRlZmluZSBPRkZTRVQgMAotLS0gCi0xLjguMy4xCi0KZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9saWJ1bndpbmQvbGlidW53aW5kLTEuMS8wMDAxLUludmFsaWQtZHdhcmYtb3Bjb2Rlcy1jYW4tY2F1c2UtcmVmZXJlbmNlcy1iZXlvbmQtdGgucGF0Y2ggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbGlidW53aW5kL2xpYnVud2luZC0xLjEvMDAwMS1JbnZhbGlkLWR3YXJmLW9wY29kZXMtY2FuLWNhdXNlLXJlZmVyZW5jZXMtYmV5b25kLXRoLnBhdGNoCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhZjk3MmY4Li4wMDAwMDAwCi0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9saWJ1bndpbmQvbGlidW53aW5kLTEuMS8wMDAxLUludmFsaWQtZHdhcmYtb3Bjb2Rlcy1jYW4tY2F1c2UtcmVmZXJlbmNlcy1iZXlvbmQtdGgucGF0Y2gKKysrIC9kZXYvbnVsbApAQCAtMSwyOSArMCwwIEBACi1Gcm9tIDM5NmI2YzdhYjczN2UyYmZmMjQ0ZDY0MDYwMWM0MzZhMjYyNjBjYTEgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCi1Gcm9tOiBBcnVuIFNoYXJtYSA8YXJ1bkBzaGFybWEtaG9tZS5uZXQ+Ci1EYXRlOiBGcmksIDE5IEp1biAyMDE1IDE5OjQ3OjIyIC0wNzAwCi1TdWJqZWN0OiBbUEFUQ0hdIEludmFsaWQgZHdhcmYgb3Bjb2RlcyBjYW4gY2F1c2UgcmVmZXJlbmNlcyBiZXlvbmQgdGhlIGVuZCBvZgotIHRoZSBhcnJheS4KLQotVXBzdHJlYW0tU3RhdHVzOiBiYWNrcG9ydAotCi1TaWduZWQtb2ZmLWJ5OiBMaSBaaG91IDxsaS56aG91QHdpbmRyaXZlci5jb20+Ci0tLS0KLSBpbmNsdWRlL2R3YXJmX2kuaCB8ICAgIDIgKy0KLSAxIGZpbGUgY2hhbmdlZCwgMSBpbnNlcnRpb24oKyksIDEgZGVsZXRpb24oLSkKLQotZGlmZiAtLWdpdCBhL2luY2x1ZGUvZHdhcmZfaS5oIGIvaW5jbHVkZS9kd2FyZl9pLmgKLWluZGV4IDFlNjIzMWUuLjRhMDJhN2QgMTAwNjQ0Ci0tLS0gYS9pbmNsdWRlL2R3YXJmX2kuaAotKysrIGIvaW5jbHVkZS9kd2FyZl9pLmgKLUBAIC0yMCw3ICsyMCw3IEBACi0gZXh0ZXJuIGNvbnN0IHVpbnQ4X3QgZHdhcmZfdG9fdW53X3JlZ251bV9tYXBbRFdBUkZfUkVHTlVNX01BUF9MRU5HVEhdOwotIC8qIFJFRyBpcyBldmFsdWF0ZWQgbXVsdGlwbGUgdGltZXM7IGl0IGJldHRlciBiZSBzaWRlLWVmZmVjdHMgZnJlZSEgICovCi0gIyBkZWZpbmUgZHdhcmZfdG9fdW53X3JlZ251bShyZWcpCQkJCQkgIFwKLS0gICgoKHJlZykgPD0gRFdBUkZfUkVHTlVNX01BUF9MRU5HVEgpID8gZHdhcmZfdG9fdW53X3JlZ251bV9tYXBbcmVnXSA6IDApCi0rICAoKChyZWcpIDwgRFdBUkZfUkVHTlVNX01BUF9MRU5HVEgpID8gZHdhcmZfdG9fdW53X3JlZ251bV9tYXBbcmVnXSA6IDApCi0gI2VuZGlmCi0gCi0gI2lmZGVmIFVOV19MT0NBTF9PTkxZCi0tLSAKLTEuNy45LjUKLQpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2xpYnVud2luZC9saWJ1bndpbmQtMS4xLzAwMDEtZGlzYWJsZS10ZXN0cy5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9saWJ1bndpbmQvbGlidW53aW5kLTEuMS8wMDAxLWRpc2FibGUtdGVzdHMucGF0Y2gKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDczMDlmZmQuLjAwMDAwMDAKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2xpYnVud2luZC9saWJ1bndpbmQtMS4xLzAwMDEtZGlzYWJsZS10ZXN0cy5wYXRjaAorKysgL2Rldi9udWxsCkBAIC0xLDMxICswLDAgQEAKLUZyb20gYjA3NDM1YTkwYmQ2MzZlZTcxOGUyMjM4ZmI0NmM3NGE2ZGQ1ZTA2OSBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKLUZyb206IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+Ci1EYXRlOiBUdWUsIDIyIE1hciAyMDE2IDE2OjQxOjEzICswMDAwCi1TdWJqZWN0OiBbUEFUQ0hdIGRpc2FibGUgdGVzdHMKLQotVGVzdHMgdXNlIGdldGNvbnRleHQoKSBBUEkgd2hpY2ggaXMKLW5vdCB0aGVyZSBvbiBtdXNsCi0KLVNpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+Ci0tLS0KLVVwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbTVVTTC1vbmx5XQotCi0gTWFrZWZpbGUuYW0gfCAyICstCi0gMSBmaWxlIGNoYW5nZWQsIDEgaW5zZXJ0aW9uKCspLCAxIGRlbGV0aW9uKC0pCi0KLWRpZmYgLS1naXQgYS9NYWtlZmlsZS5hbSBiL01ha2VmaWxlLmFtCi1pbmRleCBlMjRmZTFlLi4xNTM4MGU0IDEwMDY0NAotLS0tIGEvTWFrZWZpbGUuYW0KLSsrKyBiL01ha2VmaWxlLmFtCi1AQCAtMzksNyArMzksNyBAQCBlbmRpZgotIAotIG5vZGlzdF9pbmNsdWRlX0hFQURFUlMgPSBpbmNsdWRlL2xpYnVud2luZC1jb21tb24uaAotIAotLVNVQkRJUlMgPSBzcmMgdGVzdHMgZG9jCi0rU1VCRElSUyA9IHNyYyBkb2MKLSAKLSBub2luc3RfSEVBREVSUyA9IGluY2x1ZGUvZHdhcmYuaCBpbmNsdWRlL2R3YXJmX2kuaCBpbmNsdWRlL2R3YXJmLWVoLmgJXAotIAlpbmNsdWRlL2NvbXBpbGVyLmggaW5jbHVkZS9saWJ1bndpbmRfaS5oIGluY2x1ZGUvbWVtcG9vbC5oCVwKLS0tIAotMS44LjMuMQotCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbGlidW53aW5kL2xpYnVud2luZC0xLjEvQUFyY2g2NC1wb3J0LnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2xpYnVud2luZC9saWJ1bndpbmQtMS4xL0FBcmNoNjQtcG9ydC5wYXRjaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjI4ZWMzMi4uMDAwMDAwMAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbGlidW53aW5kL2xpYnVud2luZC0xLjEvQUFyY2g2NC1wb3J0LnBhdGNoCisrKyAvZGV2L251bGwKQEAgLTEsMjUyOSArMCwwIEBACi1Gcm9tIGFjNmMwYTY1MzU5NzVmMWRjMmRhNmU0ZTI3NjY2MTRiYWFjMmExNGEgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCi1Gcm9tOiBZdmFuIFJvdXggPHl2YW4ucm91eEBsaW5hcm8ub3JnPgotRGF0ZTogU2F0LCAxMSBNYXkgMjAxMyAwOToxODoyMyAtMDYwMAotU3ViamVjdDogW1BBVENIXSBBQXJjaDY0IHBvcnQuCi0KLVVwc3RyZWFtLVN0YXR1czogQmFja3BvcnQKLQotLS0tCi0gTWFrZWZpbGUuYW0gICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgNiAKLSBSRUFETUUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAxIAotIGNvbmZpZ3VyZS5hYyAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgIDYgCi0gaW5jbHVkZS9saWJ1bndpbmQtYWFyY2g2NC5oICAgICAgICAgIHwgIDE4NyArKysrKysrKysrKysrKysrKysrKysrCi0gaW5jbHVkZS9saWJ1bndpbmQuaC5pbiAgICAgICAgICAgICAgIHwgICAgNCAKLSBpbmNsdWRlL3RkZXAtYWFyY2g2NC9kd2FyZi1jb25maWcuaCAgfCAgIDUyICsrKysrKwotIGluY2x1ZGUvdGRlcC1hYXJjaDY0L2ptcGJ1Zi5oICAgICAgICB8ICAgMzMgKysrCi0gaW5jbHVkZS90ZGVwLWFhcmNoNjQvbGlidW53aW5kX2kuaCAgIHwgIDI5NCArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKwotIGluY2x1ZGUvdGRlcC9kd2FyZi1jb25maWcuaCAgICAgICAgICB8ICAgIDQgCi0gaW5jbHVkZS90ZGVwL2ptcGJ1Zi5oICAgICAgICAgICAgICAgIHwgICAgMiAKLSBpbmNsdWRlL3RkZXAvbGlidW53aW5kX2kuaC5pbiAgICAgICAgfCAgICA0IAotIHNyYy9NYWtlZmlsZS5hbSAgICAgICAgICAgICAgICAgICAgICB8ICAgMzkgKysrKwotIHNyYy9hYXJjaDY0L0djcmVhdGVfYWRkcl9zcGFjZS5jICAgICB8ICAgNjAgKysrKysrKwotIHNyYy9hYXJjaDY0L0dnZXRfcHJvY19pbmZvLmMgICAgICAgICB8ICAgMzkgKysrKwotIHNyYy9hYXJjaDY0L0dnZXRfc2F2ZV9sb2MuYyAgICAgICAgICB8ICAxMDAgKysrKysrKysrKysKLSBzcmMvYWFyY2g2NC9HZ2xvYmFsLmMgICAgICAgICAgICAgICAgfCAgIDU3ICsrKysrKwotIHNyYy9hYXJjaDY0L0dpbml0LmMgICAgICAgICAgICAgICAgICB8ICAxODcgKysrKysrKysrKysrKysrKysrKysrKwotIHNyYy9hYXJjaDY0L0dpbml0X2xvY2FsLmMgICAgICAgICAgICB8ICAgNTUgKysrKysrCi0gc3JjL2FhcmNoNjQvR2luaXRfcmVtb3RlLmMgICAgICAgICAgIHwgICA0NSArKysrKwotIHNyYy9hYXJjaDY0L0dpc19zaWduYWxfZnJhbWUuYyAgICAgICB8ICAgNjQgKysrKysrKwotIHNyYy9hYXJjaDY0L0dyZWdzLmMgICAgICAgICAgICAgICAgICB8ICAxMTMgKysrKysrKysrKysrKwotIHNyYy9hYXJjaDY0L0dyZXN1bWUuYyAgICAgICAgICAgICAgICB8ICAxNzcgKysrKysrKysrKysrKysrKysrKysrCi0gc3JjL2FhcmNoNjQvR3N0ZXAuYyAgICAgICAgICAgICAgICAgIHwgIDEyOSArKysrKysrKysrKysrKysKLSBzcmMvYWFyY2g2NC9MY3JlYXRlX2FkZHJfc3BhY2UuYyAgICAgfCAgICA1IAotIHNyYy9hYXJjaDY0L0xnZXRfcHJvY19pbmZvLmMgICAgICAgICB8ICAgIDUgCi0gc3JjL2FhcmNoNjQvTGdldF9zYXZlX2xvYy5jICAgICAgICAgIHwgICAgNSAKLSBzcmMvYWFyY2g2NC9MZ2xvYmFsLmMgICAgICAgICAgICAgICAgfCAgICA1IAotIHNyYy9hYXJjaDY0L0xpbml0LmMgICAgICAgICAgICAgICAgICB8ICAgIDUgCi0gc3JjL2FhcmNoNjQvTGluaXRfbG9jYWwuYyAgICAgICAgICAgIHwgICAgNSAKLSBzcmMvYWFyY2g2NC9MaW5pdF9yZW1vdGUuYyAgICAgICAgICAgfCAgICA1IAotIHNyYy9hYXJjaDY0L0xpc19zaWduYWxfZnJhbWUuYyAgICAgICB8ICAgIDUgCi0gc3JjL2FhcmNoNjQvTHJlZ3MuYyAgICAgICAgICAgICAgICAgIHwgICAgNSAKLSBzcmMvYWFyY2g2NC9McmVzdW1lLmMgICAgICAgICAgICAgICAgfCAgICA1IAotIHNyYy9hYXJjaDY0L0xzdGVwLmMgICAgICAgICAgICAgICAgICB8ICAgIDUgCi0gc3JjL2FhcmNoNjQvZ2VuLW9mZnNldHMuYyAgICAgICAgICAgIHwgICA2OCArKysrKysrKwotIHNyYy9hYXJjaDY0L2luaXQuaCAgICAgICAgICAgICAgICAgICB8ICAxMjcgKysrKysrKysrKysrKysrCi0gc3JjL2FhcmNoNjQvaXNfZnByZWcuYyAgICAgICAgICAgICAgIHwgICAzMiArKysKLSBzcmMvYWFyY2g2NC9vZmZzZXRzLmggICAgICAgICAgICAgICAgfCAgIDQ5ICsrKysrCi0gc3JjL2FhcmNoNjQvcmVnbmFtZS5jICAgICAgICAgICAgICAgIHwgIDEwNiArKysrKysrKysrKysKLSBzcmMvYWFyY2g2NC9zaWdsb25nam1wLlMgICAgICAgICAgICAgfCAgIDEyICsKLSBzcmMvYWFyY2g2NC91bndpbmRfaS5oICAgICAgICAgICAgICAgfCAgIDQzICsrKysrCi0gc3JjL2NvcmVkdW1wL19VQ0RfYWNjZXNzX3JlZ19saW51eC5jIHwgICAgNSAKLSBzcmMvcHRyYWNlL19VUFRfcmVnX29mZnNldC5jICAgICAgICAgfCAgIDM2ICsrKysKLSA0MyBmaWxlcyBjaGFuZ2VkLCAyMTg0IGluc2VydGlvbnMoKyksIDcgZGVsZXRpb25zKC0pCi0gY3JlYXRlIG1vZGUgMTAwNjQ0IGluY2x1ZGUvbGlidW53aW5kLWFhcmNoNjQuaAotIGNyZWF0ZSBtb2RlIDEwMDY0NCBpbmNsdWRlL3RkZXAtYWFyY2g2NC9kd2FyZi1jb25maWcuaAotIGNyZWF0ZSBtb2RlIDEwMDY0NCBpbmNsdWRlL3RkZXAtYWFyY2g2NC9qbXBidWYuaAotIGNyZWF0ZSBtb2RlIDEwMDY0NCBpbmNsdWRlL3RkZXAtYWFyY2g2NC9saWJ1bndpbmRfaS5oCi0gY3JlYXRlIG1vZGUgMTAwNjQ0IHNyYy9hYXJjaDY0L0djcmVhdGVfYWRkcl9zcGFjZS5jCi0gY3JlYXRlIG1vZGUgMTAwNjQ0IHNyYy9hYXJjaDY0L0dnZXRfcHJvY19pbmZvLmMKLSBjcmVhdGUgbW9kZSAxMDA2NDQgc3JjL2FhcmNoNjQvR2dldF9zYXZlX2xvYy5jCi0gY3JlYXRlIG1vZGUgMTAwNjQ0IHNyYy9hYXJjaDY0L0dnbG9iYWwuYwotIGNyZWF0ZSBtb2RlIDEwMDY0NCBzcmMvYWFyY2g2NC9HaW5pdC5jCi0gY3JlYXRlIG1vZGUgMTAwNjQ0IHNyYy9hYXJjaDY0L0dpbml0X2xvY2FsLmMKLSBjcmVhdGUgbW9kZSAxMDA2NDQgc3JjL2FhcmNoNjQvR2luaXRfcmVtb3RlLmMKLSBjcmVhdGUgbW9kZSAxMDA2NDQgc3JjL2FhcmNoNjQvR2lzX3NpZ25hbF9mcmFtZS5jCi0gY3JlYXRlIG1vZGUgMTAwNjQ0IHNyYy9hYXJjaDY0L0dyZWdzLmMKLSBjcmVhdGUgbW9kZSAxMDA2NDQgc3JjL2FhcmNoNjQvR3Jlc3VtZS5jCi0gY3JlYXRlIG1vZGUgMTAwNjQ0IHNyYy9hYXJjaDY0L0dzdGVwLmMKLSBjcmVhdGUgbW9kZSAxMDA2NDQgc3JjL2FhcmNoNjQvTGNyZWF0ZV9hZGRyX3NwYWNlLmMKLSBjcmVhdGUgbW9kZSAxMDA2NDQgc3JjL2FhcmNoNjQvTGdldF9wcm9jX2luZm8uYwotIGNyZWF0ZSBtb2RlIDEwMDY0NCBzcmMvYWFyY2g2NC9MZ2V0X3NhdmVfbG9jLmMKLSBjcmVhdGUgbW9kZSAxMDA2NDQgc3JjL2FhcmNoNjQvTGdsb2JhbC5jCi0gY3JlYXRlIG1vZGUgMTAwNjQ0IHNyYy9hYXJjaDY0L0xpbml0LmMKLSBjcmVhdGUgbW9kZSAxMDA2NDQgc3JjL2FhcmNoNjQvTGluaXRfbG9jYWwuYwotIGNyZWF0ZSBtb2RlIDEwMDY0NCBzcmMvYWFyY2g2NC9MaW5pdF9yZW1vdGUuYwotIGNyZWF0ZSBtb2RlIDEwMDY0NCBzcmMvYWFyY2g2NC9MaXNfc2lnbmFsX2ZyYW1lLmMKLSBjcmVhdGUgbW9kZSAxMDA2NDQgc3JjL2FhcmNoNjQvTHJlZ3MuYwotIGNyZWF0ZSBtb2RlIDEwMDY0NCBzcmMvYWFyY2g2NC9McmVzdW1lLmMKLSBjcmVhdGUgbW9kZSAxMDA2NDQgc3JjL2FhcmNoNjQvTHN0ZXAuYwotIGNyZWF0ZSBtb2RlIDEwMDY0NCBzcmMvYWFyY2g2NC9nZW4tb2Zmc2V0cy5jCi0gY3JlYXRlIG1vZGUgMTAwNjQ0IHNyYy9hYXJjaDY0L2luaXQuaAotIGNyZWF0ZSBtb2RlIDEwMDY0NCBzcmMvYWFyY2g2NC9pc19mcHJlZy5jCi0gY3JlYXRlIG1vZGUgMTAwNjQ0IHNyYy9hYXJjaDY0L29mZnNldHMuaAotIGNyZWF0ZSBtb2RlIDEwMDY0NCBzcmMvYWFyY2g2NC9yZWduYW1lLmMKLSBjcmVhdGUgbW9kZSAxMDA2NDQgc3JjL2FhcmNoNjQvc2lnbG9uZ2ptcC5TCi0gY3JlYXRlIG1vZGUgMTAwNjQ0IHNyYy9hYXJjaDY0L3Vud2luZF9pLmgKLQotLS0tIGEvTWFrZWZpbGUuYW0KLSsrKyBiL01ha2VmaWxlLmFtCi1AQCAtMiw2ICsyLDkgQEAgaW5jbHVkZV9IRUFERVJTID0gaW5jbHVkZS9saWJ1bndpbmQtZHluYQotICAgICBpbmNsdWRlL2xpYnVud2luZC1wdHJhY2UuaCBcCi0gICAgIGluY2x1ZGUvbGlidW53aW5kLWNvcmVkdW1wLmgKLSAKLStpZiBBUkNIX0FBUkNINjQKLStpbmNsdWRlX0hFQURFUlMgKz0gaW5jbHVkZS9saWJ1bndpbmQtYWFyY2g2NC5oCi0rZW5kaWYKLSBpZiBBUkNIX0FSTQotIGluY2x1ZGVfSEVBREVSUyArPSBpbmNsdWRlL2xpYnVud2luZC1hcm0uaAotIGVuZGlmCi1AQCAtNDEsNiArNDQsOSBAQCBTVUJESVJTID0gc3JjIHRlc3RzIGRvYwotIG5vaW5zdF9IRUFERVJTID0gaW5jbHVkZS9kd2FyZi5oIGluY2x1ZGUvZHdhcmZfaS5oIGluY2x1ZGUvZHdhcmYtZWguaAlcCi0gCWluY2x1ZGUvY29tcGlsZXIuaCBpbmNsdWRlL2xpYnVud2luZF9pLmggaW5jbHVkZS9tZW1wb29sLmgJXAotIAlpbmNsdWRlL3JlbW90ZS5oCQkJCQkJXAotKwlpbmNsdWRlL3RkZXAtYWFyY2g2NC9kd2FyZi1jb25maWcuaAkJCQlcCi0rCWluY2x1ZGUvdGRlcC1hYXJjaDY0L2ptcGJ1Zi5oCQkJCQlcCi0rCWluY2x1ZGUvdGRlcC1hYXJjaDY0L2xpYnVud2luZF9pLmgJCQkJXAotIAlpbmNsdWRlL3RkZXAtYXJtL2R3YXJmLWNvbmZpZy5oCWluY2x1ZGUvdGRlcC1hcm0vZXhfdGFibGVzLmgJXAotIAlpbmNsdWRlL3RkZXAtYXJtL2ptcGJ1Zi5oIGluY2x1ZGUvdGRlcC1hcm0vbGlidW53aW5kX2kuaAlcCi0gCWluY2x1ZGUvdGRlcC1pYTY0L2ptcGJ1Zi5oIGluY2x1ZGUvdGRlcC1pYTY0L3JzZS5oIAkJXAotLS0tIGEvUkVBRE1FCi0rKysgYi9SRUFETUUKLUBAIC05LDYgKzksNyBAQCBzZXZlcmFsIGFyY2hpdGVjdHVyZS9vcGVyYXRpbmctc3lzdGVtIGNvCi0gIExpbnV4L0lBLTY0OglGdWxseSB0ZXN0ZWQgYW5kIHN1cHBvcnRlZC4KLSAgTGludXgvUEFSSVNDOglXb3JrcyB3ZWxsLCBidXQgQyBsaWJyYXJ5IG1pc3NpbmcgdW53aW5kLWluZm8uCi0gIEhQLVVYL0lBLTY0OglNb3N0bHkgd29ya3MgYnV0IGtub3duIHRvIGhhdmUgc29tZSBzZXJpb3VzIGxpbWl0YXRpb25zLgotKyBMaW51eC9BQXJjaDY0OglOZXdseSBhZGRlZC4KLSAgTGludXgvUFBDNjQ6CU5ld2x5IGFkZGVkLgotICBMaW51eC9TdXBlckg6CU5ld2x5IGFkZGVkLgotICBGcmVlQlNEL2kzODY6CU5ld2x5IGFkZGVkLgotLS0tIGEvY29uZmlndXJlLmFjCi0rKysgYi9jb25maWd1cmUuYWMKLUBAIC0xMDQsNyArMTA0LDcgQEAgU0VUX0FSQ0goWyR0YXJnZXRfY3B1XSxbdGFyZ2V0X2FyY2hdKQotIAotIEFDX0FSR19FTkFCTEUoY29yZWR1bXAsCi0gCUFTX0hFTFBfU1RSSU5HKFstLWVuYWJsZS1jb3JlZHVtcF0sW2J1aWxkaW5nIGxpYnVud2luZC1jb3JlZHVtcCBsaWJyYXJ5XSksLAotLSAgICAgICAgW0FTX0NBU0UoWyRob3N0X2FyY2hdLCBbYXJtKnxtaXBzKnxzaCp8eDg2Kl0sIFtlbmFibGVfY29yZWR1bXA9eWVzXSwgW2VuYWJsZV9jb3JlZHVtcD1ub10pXQotKyAgICAgICAgW0FTX0NBU0UoWyRob3N0X2FyY2hdLCBbYWFyY2g2NCp8YXJtKnxtaXBzKnxzaCp8eDg2Kl0sIFtlbmFibGVfY29yZWR1bXA9eWVzXSwgW2VuYWJsZV9jb3JlZHVtcD1ub10pXQotICkKLSAKLSBBQ19NU0dfQ0hFQ0tJTkcoW2lmIHdlIHNob3VsZCBidWlsZCBsaWJ1bndpbmQtY29yZWR1bXBdKQotQEAgLTEyMSw2ICsxMjEsNyBAQCBBQ19NU0dfUkVTVUxUKFskdGFyZ2V0X29zXSkKLSAKLSBBTV9DT05ESVRJT05BTChCVUlMRF9DT1JFRFVNUCwgdGVzdCB4JGVuYWJsZV9jb3JlZHVtcCA9IHh5ZXMpCi0gQU1fQ09ORElUSU9OQUwoUkVNT1RFX09OTFksIHRlc3QgeCR0YXJnZXRfYXJjaCAhPSB4JGhvc3RfYXJjaCkKLStBTV9DT05ESVRJT05BTChBUkNIX0FBUkNINjQsIHRlc3QgeCR0YXJnZXRfYXJjaCA9IHhhYXJjaDY0KQotIEFNX0NPTkRJVElPTkFMKEFSQ0hfQVJNLCB0ZXN0IHgkdGFyZ2V0X2FyY2ggPSB4YXJtKQotIEFNX0NPTkRJVElPTkFMKEFSQ0hfSUE2NCwgdGVzdCB4JHRhcmdldF9hcmNoID0geGlhNjQpCi0gQU1fQ09ORElUSU9OQUwoQVJDSF9IUFBBLCB0ZXN0IHgkdGFyZ2V0X2FyY2ggPSB4aHBwYSkKLUBAIC0xMzcsNyArMTM4LDcgQEAgQU1fQ09ORElUSU9OQUwoT1NfRlJFRUJTRCwgZXhwciB4JHRhcmdldAotIEFDX01TR19DSEVDS0lORyhbZm9yIEVMRiBoZWxwZXIgd2lkdGhdKQotIGNhc2UgIiR7dGFyZ2V0X2FyY2h9IiBpbgotIChhcm18aHBwYXxwcGMzMnx4ODZ8c2gpIHVzZV9lbGYzMj15ZXM7IEFDX01TR19SRVNVTFQoWzMyXSk7OwotLShpYTY0fHBwYzY0fHg4Nl82NCkgICAgdXNlX2VsZjY0PXllczsgQUNfTVNHX1JFU1VMVChbNjRdKTs7Ci0rKGFhcmNoNjR8aWE2NHxwcGM2NHx4ODZfNjQpICAgIHVzZV9lbGY2ND15ZXM7IEFDX01TR19SRVNVTFQoWzY0XSk7OwotIChtaXBzKSAgICAgICAgICAgICAgICAgdXNlX2VsZnh4PXllczsgQUNfTVNHX1JFU1VMVChbeHhdKTs7Ci0gKikgICAgICAgICAgICAgICAgICAgICBBQ19NU0dfRVJST1IoW1Vua25vd24gRUxGIHRhcmdldDogJHt0YXJnZXRfYXJjaH1dKQotIGVzYWMKLUBAIC0xODYsNiArMTg3LDcgQEAgQVNfSEVMUF9TVFJJTkcoWy0tZW5hYmxlLWN4eC1leGNlcHRpb25zXQotICMgQysrIGV4Y2VwdGlvbiBoYW5kbGluZyBkb2Vzbid0IHdvcmsgdG9vIHdlbGwgb24geDg2Ci0gY2FzZSAkdGFyZ2V0X2FyY2ggaW4KLSAgIHg4NiopIGVuYWJsZV9jeHhfZXhjZXB0aW9ucz1ubzs7Ci0rICBhYXJjaDY0KikgZW5hYmxlX2N4eF9leGNlcHRpb25zPW5vOzsKLSAgIGFybSopIGVuYWJsZV9jeHhfZXhjZXB0aW9ucz1ubzs7Ci0gICBtaXBzKikgZW5hYmxlX2N4eF9leGNlcHRpb25zPW5vOzsKLSAgICopIGVuYWJsZV9jeHhfZXhjZXB0aW9ucz15ZXM7OwotLS0tIC9kZXYvbnVsbAotKysrIGIvaW5jbHVkZS9saWJ1bndpbmQtYWFyY2g2NC5oCi1AQCAtMCwwICsxLDE4NyBAQAotKy8qIGxpYnVud2luZCAtIGEgcGxhdGZvcm0taW5kZXBlbmRlbnQgdW53aW5kIGxpYnJhcnkKLSsgICBDb3B5cmlnaHQgKEMpIDIwMDEtMjAwNCBIZXdsZXR0LVBhY2thcmQgQ28KLSsJQ29udHJpYnV0ZWQgYnkgRGF2aWQgTW9zYmVyZ2VyLVRhbmcgPGRhdmlkbUBocGwuaHAuY29tPgotKyAgIENvcHlyaWdodCAoQykgMjAxMyBMaW5hcm8gTGltaXRlZAotKwotK1RoaXMgZmlsZSBpcyBwYXJ0IG9mIGxpYnVud2luZC4KLSsKLStQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcKLSthIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUKLSsiU29mdHdhcmUiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nCi0rd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLAotK2Rpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0bwotK3Blcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0bwotK3RoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKLSsKLStUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZQotK2luY2x1ZGVkIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLgotKwotK1RIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELAotK0VYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRgotK01FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5ECi0rTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRQotK0xJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04KLStPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04KLStXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4gICovCi0rCi0rI2lmbmRlZiBMSUJVTldJTkRfSAotKyNkZWZpbmUgTElCVU5XSU5EX0gKLSsKLSsjaWYgZGVmaW5lZChfX2NwbHVzcGx1cykgfHwgZGVmaW5lZChjX3BsdXNwbHVzKQotK2V4dGVybiAiQyIgewotKyNlbmRpZgotKwotKyNpbmNsdWRlIDxpbnR0eXBlcy5oPgotKyNpbmNsdWRlIDxzdGRkZWYuaD4KLSsjaW5jbHVkZSA8dWNvbnRleHQuaD4KLSsKLSsjZGVmaW5lIFVOV19UQVJHRVQJYWFyY2g2NAotKyNkZWZpbmUgVU5XX1RBUkdFVF9BQVJDSDY0CTEKLSsKLSsjZGVmaW5lIF9VX1RERVBfUVBfVFJVRQkwCS8qIHNlZSBsaWJ1bndpbmQtZHluYW1pYy5oICAqLwotKwotKy8qIFRoaXMgbmVlZHMgdG8gYmUgYmlnIGVub3VnaCB0byBhY2NvbW1vZGF0ZSAic3RydWN0IGN1cnNvciIsIHdoaWxlCi0rICAgbGVhdmluZyBzb21lIHNsYWNrIGZvciBmdXR1cmUgZXhwYW5zaW9uLiAgQ2hhbmdpbmcgdGhpcyB2YWx1ZSB3aWxsCi0rICAgcmVxdWlyZSByZWNvbXBpbGluZyBhbGwgdXNlcnMgb2YgdGhpcyBsaWJyYXJ5LiAgU3RhY2sgYWxsb2NhdGlvbiBpcwotKyAgIHJlbGF0aXZlbHkgY2hlYXAgYW5kIHVud2luZC1zdGF0ZSBjb3B5aW5nIGlzIHJlbGF0aXZlbHkgcmFyZSwgc28gd2UKLSsgICB3YW50IHRvIGVyciBvbiBtYWtpbmcgaXQgcmF0aGVyIHRvbyBiaWcgdGhhbiB0b28gc21hbGwuICAqLwotKwotKyNkZWZpbmUgVU5XX1RERVBfQ1VSU09SX0xFTgk0MDk2Ci0rCi0rdHlwZWRlZiB1aW50NjRfdCB1bndfd29yZF90OwotK3R5cGVkZWYgaW50NjRfdCB1bndfc3dvcmRfdDsKLSsKLSt0eXBlZGVmIGxvbmcgZG91YmxlIHVud190ZGVwX2ZwcmVnX3Q7Ci0rCi0rdHlwZWRlZiBzdHJ1Y3QKLSsgIHsKLSsgICAgLyogbm8gYWFyY2g2NC1zcGVjaWZpYyBhdXhpbGlhcnkgcHJvYy1pbmZvICovCi0rICB9Ci0rdW53X3RkZXBfcHJvY19pbmZvX3Q7Ci0rCi0rdHlwZWRlZiBlbnVtCi0rICB7Ci0rICAgIC8qIDY0LWJpdCBnZW5lcmFsIHJlZ2lzdGVycy4gICovCi0rICAgIFVOV19BQVJDSDY0X1gwLAotKyAgICBVTldfQUFSQ0g2NF9YMSwKLSsgICAgVU5XX0FBUkNINjRfWDIsCi0rICAgIFVOV19BQVJDSDY0X1gzLAotKyAgICBVTldfQUFSQ0g2NF9YNCwKLSsgICAgVU5XX0FBUkNINjRfWDUsCi0rICAgIFVOV19BQVJDSDY0X1g2LAotKyAgICBVTldfQUFSQ0g2NF9YNywKLSsgICAgVU5XX0FBUkNINjRfWDgsCi0rCi0rICAgIC8qIFRlbXBvcmFyeSByZWdpc3RlcnMuICAqLwotKyAgICBVTldfQUFSQ0g2NF9YOSwKLSsgICAgVU5XX0FBUkNINjRfWDEwLAotKyAgICBVTldfQUFSQ0g2NF9YMTEsCi0rICAgIFVOV19BQVJDSDY0X1gxMiwKLSsgICAgVU5XX0FBUkNINjRfWDEzLAotKyAgICBVTldfQUFSQ0g2NF9YMTQsCi0rICAgIFVOV19BQVJDSDY0X1gxNSwKLSsKLSsgICAgLyogSW50cmEtcHJvY2VkdXJlLWNhbGwgdGVtcG9yYXJ5IHJlZ2lzdGVycy4gICovCi0rICAgIFVOV19BQVJDSDY0X1gxNiwKLSsgICAgVU5XX0FBUkNINjRfWDE3LAotKwotKyAgICAvKiBDYWxsZWUtc2F2ZWQgcmVnaXN0ZXJzLiAgKi8KLSsgICAgVU5XX0FBUkNINjRfWDE4LAotKyAgICBVTldfQUFSQ0g2NF9YMTksCi0rICAgIFVOV19BQVJDSDY0X1gyMCwKLSsgICAgVU5XX0FBUkNINjRfWDIxLAotKyAgICBVTldfQUFSQ0g2NF9YMjIsCi0rICAgIFVOV19BQVJDSDY0X1gyMywKLSsgICAgVU5XX0FBUkNINjRfWDI0LAotKyAgICBVTldfQUFSQ0g2NF9YMjUsCi0rICAgIFVOV19BQVJDSDY0X1gyNiwKLSsgICAgVU5XX0FBUkNINjRfWDI3LAotKyAgICBVTldfQUFSQ0g2NF9YMjgsCi0rCi0rICAgIC8qIDY0LWJpdCBmcmFtZSBwb2ludGVyLiAgKi8KLSsgICAgVU5XX0FBUkNINjRfWDI5LAotKwotKyAgICAvKiA2NC1iaXQgbGluayByZWdpc3Rlci4gICovCi0rICAgIFVOV19BQVJDSDY0X1gzMCwKLSsKLSsgICAgLyogNjQtYml0IHN0YWNrIHBvaW50ZXIuICAqLwotKyAgICBVTldfQUFSQ0g2NF9TUCA9ICAzMSwKLSsgICAgVU5XX0FBUkNINjRfUEMsCi0rICAgIFVOV19BQVJDSDY0X1BTVEFURSwKLSsKLSsgICAgLyogMTI4LWJpdCBGUC9BZHZhbmNlZCBTSU1EIHJlZ2lzdGVycy4gICovCi0rICAgIFVOV19BQVJDSDY0X1YwID0gNjQsCi0rICAgIFVOV19BQVJDSDY0X1YxLAotKyAgICBVTldfQUFSQ0g2NF9WMiwKLSsgICAgVU5XX0FBUkNINjRfVjMsCi0rICAgIFVOV19BQVJDSDY0X1Y0LAotKyAgICBVTldfQUFSQ0g2NF9WNSwKLSsgICAgVU5XX0FBUkNINjRfVjYsCi0rICAgIFVOV19BQVJDSDY0X1Y3LAotKyAgICBVTldfQUFSQ0g2NF9WOCwKLSsgICAgVU5XX0FBUkNINjRfVjksCi0rICAgIFVOV19BQVJDSDY0X1YxMCwKLSsgICAgVU5XX0FBUkNINjRfVjExLAotKyAgICBVTldfQUFSQ0g2NF9WMTIsCi0rICAgIFVOV19BQVJDSDY0X1YxMywKLSsgICAgVU5XX0FBUkNINjRfVjE0LAotKyAgICBVTldfQUFSQ0g2NF9WMTUsCi0rICAgIFVOV19BQVJDSDY0X1YxNiwKLSsgICAgVU5XX0FBUkNINjRfVjE3LAotKyAgICBVTldfQUFSQ0g2NF9WMTgsCi0rICAgIFVOV19BQVJDSDY0X1YxOSwKLSsgICAgVU5XX0FBUkNINjRfVjIwLAotKyAgICBVTldfQUFSQ0g2NF9WMjEsCi0rICAgIFVOV19BQVJDSDY0X1YyMiwKLSsgICAgVU5XX0FBUkNINjRfVjIzLAotKyAgICBVTldfQUFSQ0g2NF9WMjQsCi0rICAgIFVOV19BQVJDSDY0X1YyNSwKLSsgICAgVU5XX0FBUkNINjRfVjI2LAotKyAgICBVTldfQUFSQ0g2NF9WMjcsCi0rICAgIFVOV19BQVJDSDY0X1YyOCwKLSsgICAgVU5XX0FBUkNINjRfVjI5LAotKyAgICBVTldfQUFSQ0g2NF9WMzAsCi0rICAgIFVOV19BQVJDSDY0X1YzMSwKLSsKLSsgICAgVU5XX0FBUkNINjRfRlBTUiwKLSsgICAgVU5XX0FBUkNINjRfRlBDUiwKLSsKLSsgICAgLyogRm9yIEFBcmNoNjQsIHRoZSBDRkEgaXMgdGhlIHZhbHVlIG9mIFNQICh4MzEpIGF0IHRoZSBjYWxsIHNpdGUgb2YgdGhlCi0rICAgICAgIHByZXZpb3VzIGZyYW1lLiAgKi8KLSsgICAgVU5XX0FBUkNINjRfQ0ZBID0gVU5XX0FBUkNINjRfU1AsCi0rCi0rICAgIFVOV19UREVQX0xBU1RfUkVHID0gVU5XX0FBUkNINjRfRlBDUiwKLSsKLSsgICAgVU5XX1RERVBfSVAgPSBVTldfQUFSQ0g2NF9YMzAsCi0rICAgIFVOV19UREVQX1NQID0gVU5XX0FBUkNINjRfU1AsCi0rICAgIFVOV19UREVQX0VIID0gVU5XX0FBUkNINjRfWDAsCi0rCi0rICB9Ci0rYWFyY2g2NF9yZWdudW1fdDsKLSsKLSsvKiBVc2UgUjAgdGhyb3VnaCBSMyB0byBwYXNzIGV4Y2VwdGlvbiBoYW5kbGluZyBpbmZvcm1hdGlvbi4gICovCi0rI2RlZmluZSBVTldfVERFUF9OVU1fRUhfUkVHUwk0Ci0rCi0rdHlwZWRlZiBzdHJ1Y3QgdW53X3RkZXBfc2F2ZV9sb2MKLSsgIHsKLSsgICAgLyogQWRkaXRpb25hbCB0YXJnZXQtZGVwZW5kZW50IGluZm8gb24gYSBzYXZlIGxvY2F0aW9uLiAgKi8KLSsgIH0KLSt1bndfdGRlcF9zYXZlX2xvY190OwotKwotKwotKy8qIE9uIEFBcmNoNjQsIHdlIGNhbiBkaXJlY3RseSB1c2UgdWNvbnRleHRfdCBhcyB0aGUgdW53aW5kIGNvbnRleHQuICAqLwotK3R5cGVkZWYgdWNvbnRleHRfdCB1bndfdGRlcF9jb250ZXh0X3Q7Ci0rCi0rI2luY2x1ZGUgImxpYnVud2luZC1jb21tb24uaCIKLSsjaW5jbHVkZSAibGlidW53aW5kLWR5bmFtaWMuaCIKLSsKLSsjZGVmaW5lIHVud190ZGVwX2dldGNvbnRleHQodWMpICAgICAgICAgKGdldGNvbnRleHQgKHVjKSwgMCkKLSsjZGVmaW5lIHVud190ZGVwX2lzX2ZwcmVnCQlVTldfQVJDSF9PQkooaXNfZnByZWcpCi0rCi0rZXh0ZXJuIGludCB1bndfdGRlcF9pc19mcHJlZyAoaW50KTsKLSsKLSsjaWYgZGVmaW5lZChfX2NwbHVzcGx1cykgfHwgZGVmaW5lZChjX3BsdXNwbHVzKQotK30KLSsjZW5kaWYKLSsKLSsjZW5kaWYgLyogTElCVU5XSU5EX0ggKi8KLS0tLSBhL2luY2x1ZGUvbGlidW53aW5kLmguaW4KLSsrKyBiL2luY2x1ZGUvbGlidW53aW5kLmguaW4KLUBAIC0zLDcgKzMsOSBAQAotIAotICNpZm5kZWYgVU5XX1JFTU9URV9PTkxZCi0gCi0tI2lmIGRlZmluZWQgX19hcm1fXwotKyNpZiBkZWZpbmVkIF9fYWFyY2g2NF9fCi0rI2luY2x1ZGUgImxpYnVud2luZC1hYXJjaDY0LmgiCi0rI2VsaWYgZGVmaW5lZCBfX2FybV9fCi0gIyBpbmNsdWRlICJsaWJ1bndpbmQtYXJtLmgiCi0gI2VsaWYgZGVmaW5lZCBfX2hwcGFfXwotICMgaW5jbHVkZSAibGlidW53aW5kLWhwcGEuaCIKLS0tLSAvZGV2L251bGwKLSsrKyBiL2luY2x1ZGUvdGRlcC1hYXJjaDY0L2R3YXJmLWNvbmZpZy5oCi1AQCAtMCwwICsxLDUyIEBACi0rLyogbGlidW53aW5kIC0gYSBwbGF0Zm9ybS1pbmRlcGVuZGVudCB1bndpbmQgbGlicmFyeQotKyAgIENvcHlyaWdodCAoQykgMjAwOCBDb2RlU291cmNlcnkKLSsgICBDb3B5cmlnaHQgKEMpIDIwMTIgVG9tbWkgUmFudGFsYSA8dHQucmFudGFsYUBnbWFpbC5jb20+Ci0rICAgQ29weXJpZ2h0IChDKSAyMDEzIExpbmFybyBMaW1pdGVkCi0rCi0rVGhpcyBmaWxlIGlzIHBhcnQgb2YgbGlidW53aW5kLgotKwotK1Blcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZwotK2EgY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZQotKyJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcKLSt3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsCi0rZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvCi0rcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvCi0rdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgotKwotK1RoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlCi0raW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuCi0rCi0rVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsCi0rRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GCi0rTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQKLStOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFCi0rTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTgotK09GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTgotK1dJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLiAgKi8KLSsKLSsjaWZuZGVmIGR3YXJmX2NvbmZpZ19oCi0rI2RlZmluZSBkd2FyZl9jb25maWdfaAotKwotKy8qIFRoaXMgbWF0Y2hlcyB0aGUgdmFsdWUgdWRlcyBieSBHQ0MgKHNlZQotKyAgIGdjYy9jb25maWcvYWFyY2g2NC9hYXJjaDY0Lmg6RFdBUkZfRlJBTUVfUkVHSVNURVJTLiAgKi8KLSsjZGVmaW5lIERXQVJGX05VTV9QUkVTRVJWRURfUkVHUwk5NwotKwotKy8qIFJldHVybiBUUlVFIGlmIHRoZSBBRERSX1NQQUNFIHVzZXMgYmlnLWVuZGlhbiBieXRlLW9yZGVyLiAgKi8KLSsjZGVmaW5lIGR3YXJmX2lzX2JpZ19lbmRpYW4oYWRkcl9zcGFjZSkJMAotKwotKyNkZWZpbmUgZHdhcmZfdG9fdW53X3JlZ251bShyZWcpICgoKHJlZykgPD0gVU5XX0FBUkNINjRfVjMxKSA/IChyZWcpIDogMCkKLSsKLSsvKiBDb252ZXJ0IGEgcG9pbnRlciB0byBhIGR3YXJmX2N1cnNvciBzdHJ1Y3R1cmUgdG8gYSBwb2ludGVyIHRvCi0rICAgdW53X2N1cnNvcl90LiAgKi8KLSsjZGVmaW5lIGR3YXJmX3RvX2N1cnNvcihjKQkoKHVud19jdXJzb3JfdCAqKSAoYykpCi0rCi0rdHlwZWRlZiBzdHJ1Y3QgZHdhcmZfbG9jCi0rICB7Ci0rICAgIHVud193b3JkX3QgdmFsOwotKyNpZm5kZWYgVU5XX0xPQ0FMX09OTFkKLSsgICAgdW53X3dvcmRfdCB0eXBlOwkJLyogc2VlIERXQVJGX0xPQ19UWVBFXyogbWFjcm9zLiAgKi8KLSsjZW5kaWYKLSsgIH0KLStkd2FyZl9sb2NfdDsKLSsKLSsjZW5kaWYgLyogZHdhcmZfY29uZmlnX2ggKi8KLS0tLSAvZGV2L251bGwKLSsrKyBiL2luY2x1ZGUvdGRlcC1hYXJjaDY0L2ptcGJ1Zi5oCi1AQCAtMCwwICsxLDMzIEBACi0rLyogbGlidW53aW5kIC0gYSBwbGF0Zm9ybS1pbmRlcGVuZGVudCB1bndpbmQgbGlicmFyeQotKyAgIENvcHlyaWdodCAoQykgMjAwOCBDb2RlU291cmNlcnkKLSsgICBDb3B5cmlnaHQgKEMpIDIwMTMgTGluYXJvIExpbWl0ZWQKLSsKLStUaGlzIGZpbGUgaXMgcGFydCBvZiBsaWJ1bndpbmQuCi0rCi0rUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nCi0rYSBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlCi0rIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZwotK3dpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwKLStkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8KLStwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8KLSt0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6Ci0rCi0rVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUKLStpbmNsdWRlZCBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4KLSsKLStUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwKLStFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YKLStNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORAotK05PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUKLStMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OCi0rT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OCi0rV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuICAqLwotKwotKy8qIFVzZSBnbGliYydzIGp1bXAtYnVmZmVyIGluZGljZXM7IE5QVEwgcGVla3MgYXQgU1A6ICovCi0rCi0rLyogRklYTUUgZm9yIEFBcmNoNjQgICovCi0rCi0rI2RlZmluZSBKQl9TUAkJMTMKLSsjZGVmaW5lIEpCX1JQCQkxNAotKyNkZWZpbmUgSkJfTUFTS19TQVZFRAkxNQotKyNkZWZpbmUgSkJfTUFTSwkJMTYKLS0tLSAvZGV2L251bGwKLSsrKyBiL2luY2x1ZGUvdGRlcC1hYXJjaDY0L2xpYnVud2luZF9pLmgKLUBAIC0wLDAgKzEsMjk0IEBACi0rLyogbGlidW53aW5kIC0gYSBwbGF0Zm9ybS1pbmRlcGVuZGVudCB1bndpbmQgbGlicmFyeQotKyAgIENvcHlyaWdodCAoQykgMjAwMS0yMDA1IEhld2xldHQtUGFja2FyZCBDbwotKwlDb250cmlidXRlZCBieSBEYXZpZCBNb3NiZXJnZXItVGFuZyA8ZGF2aWRtQGhwbC5ocC5jb20+Ci0rICAgQ29weXJpZ2h0IChDKSAyMDEzIExpbmFybyBMaW1pdGVkCi0rCi0rVGhpcyBmaWxlIGlzIHBhcnQgb2YgbGlidW53aW5kLgotKwotK1Blcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZwotK2EgY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZQotKyJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcKLSt3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsCi0rZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvCi0rcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvCi0rdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgotKwotK1RoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlCi0raW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuCi0rCi0rVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsCi0rRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GCi0rTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQKLStOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFCi0rTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTgotK09GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTgotK1dJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLiAgKi8KLSsKLSsjaWZuZGVmIEFBUkNINjRfTElCVU5XSU5EX0lfSAotKyNkZWZpbmUgQUFSQ0g2NF9MSUJVTldJTkRfSV9ICi0rCi0rLyogVGFyZ2V0LWRlcGVuZGVudCBkZWZpbml0aW9ucyB0aGF0IGFyZSBpbnRlcm5hbCB0byBsaWJ1bndpbmQgYnV0IG5lZWQKLSsgICB0byBiZSBzaGFyZWQgd2l0aCB0YXJnZXQtaW5kZXBlbmRlbnQgY29kZS4gICovCi0rCi0rI2luY2x1ZGUgPHN0ZGxpYi5oPgotKyNpbmNsdWRlIDxsaWJ1bndpbmQuaD4KLSsKLSsjaW5jbHVkZSAiZWxmNjQuaCIKLSsjaW5jbHVkZSAibWVtcG9vbC5oIgotKyNpbmNsdWRlICJkd2FyZi5oIgotKwotK3R5cGVkZWYgc3RydWN0Ci0rICB7Ci0rICAgIC8qIG5vIGFhcmNoNjQtc3BlY2lmaWMgZmFzdCB0cmFjZSAqLwotKyAgfQotK3Vud190ZGVwX2ZyYW1lX3Q7Ci0rCi0rI2lmZGVmIFVOV19MT0NBTF9PTkxZCi0rCi0rdHlwZWRlZiB1bndfd29yZF90IGFhcmNoNjRfbG9jX3Q7Ci0rCi0rI2Vsc2UgLyogIVVOV19MT0NBTF9PTkxZICovCi0rCi0rdHlwZWRlZiBzdHJ1Y3QgYWFyY2g2NF9sb2MKLSsgIHsKLSsgICAgdW53X3dvcmRfdCB3MCwgdzE7Ci0rICB9Ci0rYWFyY2g2NF9sb2NfdDsKLSsKLSsjZW5kaWYgLyogIVVOV19MT0NBTF9PTkxZICovCi0rCi0rc3RydWN0IHVud19hZGRyX3NwYWNlCi0rICB7Ci0rICAgIHN0cnVjdCB1bndfYWNjZXNzb3JzIGFjYzsKLSsgICAgaW50IGJpZ19lbmRpYW47Ci0rICAgIHVud19jYWNoaW5nX3BvbGljeV90IGNhY2hpbmdfcG9saWN5OwotKyNpZmRlZiBIQVZFX0FUT01JQ19PUFNfSAotKyAgICBBT190IGNhY2hlX2dlbmVyYXRpb247Ci0rI2Vsc2UKLSsgICAgdWludDMyX3QgY2FjaGVfZ2VuZXJhdGlvbjsKLSsjZW5kaWYKLSsgICAgdW53X3dvcmRfdCBkeW5fZ2VuZXJhdGlvbjsgICAgICAgICAgLyogc2VlIGR5bi1jb21tb24uaCAqLwotKyAgICB1bndfd29yZF90IGR5bl9pbmZvX2xpc3RfYWRkcjsJLyogKGNhY2hlZCkgZHluX2luZm9fbGlzdF9hZGRyICovCi0rICAgIHN0cnVjdCBkd2FyZl9yc19jYWNoZSBnbG9iYWxfY2FjaGU7Ci0rICAgIHN0cnVjdCB1bndfZGVidWdfZnJhbWVfbGlzdCAqZGVidWdfZnJhbWVzOwotKyAgIH07Ci0rCi0rc3RydWN0IGN1cnNvcgotKyAgewotKyAgICBzdHJ1Y3QgZHdhcmZfY3Vyc29yIGR3YXJmOyAgICAgICAgICAvKiBtdXN0IGJlIGZpcnN0ICovCi0rICAgIGVudW0KLSsgICAgICB7Ci0rICAgICAgICBBQVJDSDY0X1NDRl9OT05FLAotKyAgICAgICAgQUFSQ0g2NF9TQ0ZfTElOVVhfUlRfU0lHRlJBTUUsCi0rICAgICAgfQotKyAgICBzaWdjb250ZXh0X2Zvcm1hdDsKLSsgICAgdW53X3dvcmRfdCBzaWdjb250ZXh0X2FkZHI7Ci0rICAgIHVud193b3JkX3Qgc2lnY29udGV4dF9zcDsKLSsgICAgdW53X3dvcmRfdCBzaWdjb250ZXh0X3BjOwotKyAgfTsKLSsKLSsjZGVmaW5lIERXQVJGX0dFVF9MT0MobCkgICAgICAgICgobCkudmFsKQotKwotKyNpZmRlZiBVTldfTE9DQUxfT05MWQotKyMgZGVmaW5lIERXQVJGX05VTExfTE9DICAgICAgICAgRFdBUkZfTE9DICgwLCAwKQotKyMgZGVmaW5lIERXQVJGX0lTX05VTExfTE9DKGwpICAgKERXQVJGX0dFVF9MT0MgKGwpID09IDApCi0rIyBkZWZpbmUgRFdBUkZfTE9DKHIsIHQpICAgICAgICAoKGR3YXJmX2xvY190KSB7IC52YWwgPSAocikgfSkKLSsjIGRlZmluZSBEV0FSRl9JU19SRUdfTE9DKGwpICAgIDAKLSsjIGRlZmluZSBEV0FSRl9SRUdfTE9DKGMscikgICAgIChEV0FSRl9MT0MoKHVud193b3JkX3QpICAgICAgICAgICAgICAgICAgICAgIFwKLSsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZGVwX3VjX2FkZHIoKGMpLT5hc19hcmcsIChyKSksIDApKQotKyMgZGVmaW5lIERXQVJGX01FTV9MT0MoYyxtKSAgICAgRFdBUkZfTE9DICgobSksIDApCi0rIyBkZWZpbmUgRFdBUkZfRlBSRUdfTE9DKGMscikgICAoRFdBUkZfTE9DKCh1bndfd29yZF90KSAgICAgICAgICAgICAgICAgICAgICBcCi0rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGRlcF91Y19hZGRyKChjKS0+YXNfYXJnLCAocikpLCAwKSkKLSsKLStzdGF0aWMgaW5saW5lIGludAotK2R3YXJmX2dldGZwIChzdHJ1Y3QgZHdhcmZfY3Vyc29yICpjLCBkd2FyZl9sb2NfdCBsb2MsIHVud19mcHJlZ190ICp2YWwpCi0rewotKyAgaWYgKCFEV0FSRl9HRVRfTE9DIChsb2MpKQotKyAgICByZXR1cm4gLTE7Ci0rICAqdmFsID0gKih1bndfZnByZWdfdCAqKSBEV0FSRl9HRVRfTE9DIChsb2MpOwotKyAgcmV0dXJuIDA7Ci0rfQotKwotK3N0YXRpYyBpbmxpbmUgaW50Ci0rZHdhcmZfcHV0ZnAgKHN0cnVjdCBkd2FyZl9jdXJzb3IgKmMsIGR3YXJmX2xvY190IGxvYywgdW53X2ZwcmVnX3QgdmFsKQotK3sKLSsgIGlmICghRFdBUkZfR0VUX0xPQyAobG9jKSkKLSsgICAgcmV0dXJuIC0xOwotKyAgKih1bndfZnByZWdfdCAqKSBEV0FSRl9HRVRfTE9DIChsb2MpID0gdmFsOwotKyAgcmV0dXJuIDA7Ci0rfQotKwotK3N0YXRpYyBpbmxpbmUgaW50Ci0rZHdhcmZfZ2V0IChzdHJ1Y3QgZHdhcmZfY3Vyc29yICpjLCBkd2FyZl9sb2NfdCBsb2MsIHVud193b3JkX3QgKnZhbCkKLSt7Ci0rICBpZiAoIURXQVJGX0dFVF9MT0MgKGxvYykpCi0rICAgIHJldHVybiAtMTsKLSsgICp2YWwgPSAqKHVud193b3JkX3QgKikgRFdBUkZfR0VUX0xPQyAobG9jKTsKLSsgIHJldHVybiAwOwotK30KLSsKLStzdGF0aWMgaW5saW5lIGludAotK2R3YXJmX3B1dCAoc3RydWN0IGR3YXJmX2N1cnNvciAqYywgZHdhcmZfbG9jX3QgbG9jLCB1bndfd29yZF90IHZhbCkKLSt7Ci0rICBpZiAoIURXQVJGX0dFVF9MT0MgKGxvYykpCi0rICAgIHJldHVybiAtMTsKLSsgICoodW53X3dvcmRfdCAqKSBEV0FSRl9HRVRfTE9DIChsb2MpID0gdmFsOwotKyAgcmV0dXJuIDA7Ci0rfQotKwotKyNlbHNlIC8qICFVTldfTE9DQUxfT05MWSAqLwotKyMgZGVmaW5lIERXQVJGX0xPQ19UWVBFX0ZQICAgICAgKDEgPDwgMCkKLSsjIGRlZmluZSBEV0FSRl9MT0NfVFlQRV9SRUcgICAgICgxIDw8IDEpCi0rIyBkZWZpbmUgRFdBUkZfTlVMTF9MT0MgICAgICAgICBEV0FSRl9MT0MgKDAsIDApCi0rIyBkZWZpbmUgRFdBUkZfSVNfTlVMTF9MT0MobCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotKyAgICAgICAgICAgICAgICAoeyBkd2FyZl9sb2NfdCBfbCA9IChsKTsgX2wudmFsID09IDAgJiYgX2wudHlwZSA9PSAwOyB9KQotKyMgZGVmaW5lIERXQVJGX0xPQyhyLCB0KSAgICAgICAgKChkd2FyZl9sb2NfdCkgeyAudmFsID0gKHIpLCAudHlwZSA9ICh0KSB9KQotKyMgZGVmaW5lIERXQVJGX0lTX1JFR19MT0MobCkgICAgKCgobCkudHlwZSAmIERXQVJGX0xPQ19UWVBFX1JFRykgIT0gMCkKLSsjIGRlZmluZSBEV0FSRl9JU19GUF9MT0MobCkgICAgICgoKGwpLnR5cGUgJiBEV0FSRl9MT0NfVFlQRV9GUCkgIT0gMCkKLSsjIGRlZmluZSBEV0FSRl9SRUdfTE9DKGMscikgICAgIERXQVJGX0xPQygociksIERXQVJGX0xPQ19UWVBFX1JFRykKLSsjIGRlZmluZSBEV0FSRl9NRU1fTE9DKGMsbSkgICAgIERXQVJGX0xPQyAoKG0pLCAwKQotKyMgZGVmaW5lIERXQVJGX0ZQUkVHX0xPQyhjLHIpICAgRFdBUkZfTE9DKChyKSwgKERXQVJGX0xPQ19UWVBFX1JFRyAgICAgIFwKLSsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IERXQVJGX0xPQ19UWVBFX0ZQKSkKLSsKLStzdGF0aWMgaW5saW5lIGludAotK2R3YXJmX2dldGZwIChzdHJ1Y3QgZHdhcmZfY3Vyc29yICpjLCBkd2FyZl9sb2NfdCBsb2MsIHVud19mcHJlZ190ICp2YWwpCi0rewotKyAgY2hhciAqdmFscCA9IChjaGFyICopICZ2YWw7Ci0rICB1bndfd29yZF90IGFkZHI7Ci0rICBpbnQgcmV0OwotKwotKyAgaWYgKERXQVJGX0lTX05VTExfTE9DIChsb2MpKQotKyAgICByZXR1cm4gLVVOV19FQkFEUkVHOwotKwotKyAgaWYgKERXQVJGX0lTX1JFR19MT0MgKGxvYykpCi0rICAgIHJldHVybiAoKmMtPmFzLT5hY2MuYWNjZXNzX2ZwcmVnKSAoYy0+YXMsIERXQVJGX0dFVF9MT0MgKGxvYyksCi0rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsLCAwLCBjLT5hc19hcmcpOwotKwotKyAgYWRkciA9IERXQVJGX0dFVF9MT0MgKGxvYyk7Ci0rICBpZiAoKHJldCA9ICgqYy0+YXMtPmFjYy5hY2Nlc3NfbWVtKSAoYy0+YXMsIGFkZHIgKyAwLCAodW53X3dvcmRfdCAqKSB2YWxwLAotKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAsIGMtPmFzX2FyZykpIDwgMCkKLSsgICAgcmV0dXJuIHJldDsKLSsKLSsgIHJldHVybiAoKmMtPmFzLT5hY2MuYWNjZXNzX21lbSkgKGMtPmFzLCBhZGRyICsgNCwgKHVud193b3JkX3QgKikgdmFscCArIDEsIDAsCi0rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjLT5hc19hcmcpOwotK30KLSsKLStzdGF0aWMgaW5saW5lIGludAotK2R3YXJmX3B1dGZwIChzdHJ1Y3QgZHdhcmZfY3Vyc29yICpjLCBkd2FyZl9sb2NfdCBsb2MsIHVud19mcHJlZ190IHZhbCkKLSt7Ci0rICBjaGFyICp2YWxwID0gKGNoYXIgKikgJnZhbDsKLSsgIHVud193b3JkX3QgYWRkcjsKLSsgIGludCByZXQ7Ci0rCi0rICBpZiAoRFdBUkZfSVNfTlVMTF9MT0MgKGxvYykpCi0rICAgIHJldHVybiAtVU5XX0VCQURSRUc7Ci0rCi0rICBpZiAoRFdBUkZfSVNfUkVHX0xPQyAobG9jKSkKLSsgICAgcmV0dXJuICgqYy0+YXMtPmFjYy5hY2Nlc3NfZnByZWcpIChjLT5hcywgRFdBUkZfR0VUX0xPQyAobG9jKSwKLSsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmdmFsLCAxLCBjLT5hc19hcmcpOwotKwotKyAgYWRkciA9IERXQVJGX0dFVF9MT0MgKGxvYyk7Ci0rICBpZiAoKHJldCA9ICgqYy0+YXMtPmFjYy5hY2Nlc3NfbWVtKSAoYy0+YXMsIGFkZHIgKyAwLCAodW53X3dvcmRfdCAqKSB2YWxwLAotKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEsIGMtPmFzX2FyZykpIDwgMCkKLSsgICAgcmV0dXJuIHJldDsKLSsKLSsgIHJldHVybiAoKmMtPmFzLT5hY2MuYWNjZXNzX21lbSkgKGMtPmFzLCBhZGRyICsgNCwgKHVud193b3JkX3QgKikgdmFscCArIDEsCi0rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxLCBjLT5hc19hcmcpOwotK30KLSsKLStzdGF0aWMgaW5saW5lIGludAotK2R3YXJmX2dldCAoc3RydWN0IGR3YXJmX2N1cnNvciAqYywgZHdhcmZfbG9jX3QgbG9jLCB1bndfd29yZF90ICp2YWwpCi0rewotKyAgaWYgKERXQVJGX0lTX05VTExfTE9DIChsb2MpKQotKyAgICByZXR1cm4gLVVOV19FQkFEUkVHOwotKwotKyAgLyogSWYgYSBjb2RlLWdlbmVyYXRvciB3ZXJlIHRvIHNhdmUgYSB2YWx1ZSBvZiB0eXBlIHVud193b3JkX3QgaW4gYQotKyAgICAgZmxvYXRpbmctcG9pbnQgcmVnaXN0ZXIsIHdlIHdvdWxkIGhhdmUgdG8gc3VwcG9ydCB0aGlzIGNhc2UuICBJCi0rICAgICBzdXBwb3NlIGl0IGNvdWxkIGhhcHBlbiB3aXRoIE1NWCByZWdpc3RlcnMsIGJ1dCBkb2VzIGl0IHJlYWxseQotKyAgICAgaGFwcGVuPyAgKi8KLSsgIGFzc2VydCAoIURXQVJGX0lTX0ZQX0xPQyAobG9jKSk7Ci0rCi0rICBpZiAoRFdBUkZfSVNfUkVHX0xPQyAobG9jKSkKLSsgICAgcmV0dXJuICgqYy0+YXMtPmFjYy5hY2Nlc3NfcmVnKSAoYy0+YXMsIERXQVJGX0dFVF9MT0MgKGxvYyksIHZhbCwKLSsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCwgYy0+YXNfYXJnKTsKLSsgIGVsc2UKLSsgICAgcmV0dXJuICgqYy0+YXMtPmFjYy5hY2Nlc3NfbWVtKSAoYy0+YXMsIERXQVJGX0dFVF9MT0MgKGxvYyksIHZhbCwKLSsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCwgYy0+YXNfYXJnKTsKLSt9Ci0rCi0rc3RhdGljIGlubGluZSBpbnQKLStkd2FyZl9wdXQgKHN0cnVjdCBkd2FyZl9jdXJzb3IgKmMsIGR3YXJmX2xvY190IGxvYywgdW53X3dvcmRfdCB2YWwpCi0rewotKyAgaWYgKERXQVJGX0lTX05VTExfTE9DIChsb2MpKQotKyAgICByZXR1cm4gLVVOV19FQkFEUkVHOwotKwotKyAgLyogSWYgYSBjb2RlLWdlbmVyYXRvciB3ZXJlIHRvIHNhdmUgYSB2YWx1ZSBvZiB0eXBlIHVud193b3JkX3QgaW4gYQotKyAgICAgZmxvYXRpbmctcG9pbnQgcmVnaXN0ZXIsIHdlIHdvdWxkIGhhdmUgdG8gc3VwcG9ydCB0aGlzIGNhc2UuICBJCi0rICAgICBzdXBwb3NlIGl0IGNvdWxkIGhhcHBlbiB3aXRoIE1NWCByZWdpc3RlcnMsIGJ1dCBkb2VzIGl0IHJlYWxseQotKyAgICAgaGFwcGVuPyAgKi8KLSsgIGFzc2VydCAoIURXQVJGX0lTX0ZQX0xPQyAobG9jKSk7Ci0rCi0rICBpZiAoRFdBUkZfSVNfUkVHX0xPQyAobG9jKSkKLSsgICAgcmV0dXJuICgqYy0+YXMtPmFjYy5hY2Nlc3NfcmVnKSAoYy0+YXMsIERXQVJGX0dFVF9MT0MgKGxvYyksICZ2YWwsCi0rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEsIGMtPmFzX2FyZyk7Ci0rICBlbHNlCi0rICAgIHJldHVybiAoKmMtPmFzLT5hY2MuYWNjZXNzX21lbSkgKGMtPmFzLCBEV0FSRl9HRVRfTE9DIChsb2MpLCAmdmFsLAotKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxLCBjLT5hc19hcmcpOwotK30KLSsKLSsjZW5kaWYgLyogIVVOV19MT0NBTF9PTkxZICovCi0rCi0rCi0rCi0rI2RlZmluZSB0ZGVwX2dldGNvbnRleHRfdHJhY2UgICAgICAgICAgIHVud19nZXRjb250ZXh0Ci0rI2RlZmluZSB0ZGVwX2luaXRfZG9uZQkJCVVOV19PQkooaW5pdF9kb25lKQotKyNkZWZpbmUgdGRlcF9pbml0CQkJVU5XX09CSihpbml0KQotKy8qIFBsYXRmb3JtcyB0aGF0IHN1cHBvcnQgVU5XX0lORk9fRk9STUFUX1RBQkxFIG5lZWQgdG8gZGVmaW5lCi0rICAgdGRlcF9zZWFyY2hfdW53aW5kX3RhYmxlLiAgKi8KLSsjZGVmaW5lIHRkZXBfc2VhcmNoX3Vud2luZF90YWJsZQlkd2FyZl9zZWFyY2hfdW53aW5kX3RhYmxlCi0rI2RlZmluZSB0ZGVwX2ZpbmRfdW53aW5kX3RhYmxlCSAgICAgICAgZHdhcmZfZmluZF91bndpbmRfdGFibGUKLSsjZGVmaW5lIHRkZXBfdWNfYWRkcgkJCVVOV19PQkoodWNfYWRkcikKLSsjZGVmaW5lIHRkZXBfZ2V0X2VsZl9pbWFnZQkJVU5XX0FSQ0hfT0JKKGdldF9lbGZfaW1hZ2UpCi0rI2RlZmluZSB0ZGVwX2FjY2Vzc19yZWcJCQlVTldfT0JKKGFjY2Vzc19yZWcpCi0rI2RlZmluZSB0ZGVwX2FjY2Vzc19mcHJlZwkJVU5XX09CSihhY2Nlc3NfZnByZWcpCi0rI2RlZmluZSB0ZGVwX2ZldGNoX2ZyYW1lKGMsaXAsbikJZG8ge30gd2hpbGUoMCkKLSsjZGVmaW5lIHRkZXBfY2FjaGVfZnJhbWUoYyxycykJCWRvIHt9IHdoaWxlKDApCi0rI2RlZmluZSB0ZGVwX3JldXNlX2ZyYW1lKGMscnMpCQlkbyB7fSB3aGlsZSgwKQotKyNkZWZpbmUgdGRlcF9zdGFzaF9mcmFtZShjLHJzKQkJZG8ge30gd2hpbGUoMCkKLSsjZGVmaW5lIHRkZXBfdHJhY2UoY3VyLGFkZHIsbikJCSgtVU5XX0VOT0lORk8pCi0rCi0rI2lmZGVmIFVOV19MT0NBTF9PTkxZCi0rIyBkZWZpbmUgdGRlcF9maW5kX3Byb2NfaW5mbyhjLGlwLG4pICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSsgICAgICAgIGR3YXJmX2ZpbmRfcHJvY19pbmZvKChjKS0+YXMsIChpcCksICYoYyktPnBpLCAobiksICAgICAgXAotKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjKS0+YXNfYXJnKQotKyMgZGVmaW5lIHRkZXBfcHV0X3Vud2luZF9pbmZvKGFzLHBpLGFyZykgICAgICAgICAgICAgICAgXAotKyAgICAgICAgZHdhcmZfcHV0X3Vud2luZF9pbmZvKChhcyksIChwaSksIChhcmcpKQotKyNlbHNlCi0rIyBkZWZpbmUgdGRlcF9maW5kX3Byb2NfaW5mbyhjLGlwLG4pICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotKyAgICAgICAgKCooYyktPmFzLT5hY2MuZmluZF9wcm9jX2luZm8pKChjKS0+YXMsIChpcCksICYoYyktPnBpLCAobiksICAgIFwKLSsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoYyktPmFzX2FyZykKLSsjIGRlZmluZSB0ZGVwX3B1dF91bndpbmRfaW5mbyhhcyxwaSxhcmcpICAgICAgICAgICAgICAgIFwKLSsgICAgICAgICgqKGFzKS0+YWNjLnB1dF91bndpbmRfaW5mbykoKGFzKSwgKHBpKSwgKGFyZykpCi0rI2VuZGlmCi0rCi0rI2RlZmluZSB0ZGVwX2dldF9hcyhjKSAgICAgICAgICAgICAgICAgICgoYyktPmR3YXJmLmFzKQotKyNkZWZpbmUgdGRlcF9nZXRfYXNfYXJnKGMpICAgICAgICAgICAgICAoKGMpLT5kd2FyZi5hc19hcmcpCi0rI2RlZmluZSB0ZGVwX2dldF9pcChjKSAgICAgICAgICAgICAgICAgICgoYyktPmR3YXJmLmlwKQotKyNkZWZpbmUgdGRlcF9iaWdfZW5kaWFuKGFzKSAgICAgICAgICAgICAoKGFzKS0+YmlnX2VuZGlhbikKLSsKLStleHRlcm4gaW50IHRkZXBfaW5pdF9kb25lOwotKwotK2V4dGVybiB2b2lkIHRkZXBfaW5pdCAodm9pZCk7Ci0rZXh0ZXJuIGludCB0ZGVwX3NlYXJjaF91bndpbmRfdGFibGUgKHVud19hZGRyX3NwYWNlX3QgYXMsIHVud193b3JkX3QgaXAsCi0rCQkJCSAgICAgdW53X2R5bl9pbmZvX3QgKmRpLCB1bndfcHJvY19pbmZvX3QgKnBpLAotKwkJCQkgICAgIGludCBuZWVkX3Vud2luZF9pbmZvLCB2b2lkICphcmcpOwotK2V4dGVybiB2b2lkICp0ZGVwX3VjX2FkZHIgKHVud190ZGVwX2NvbnRleHRfdCAqdWMsIGludCByZWcpOwotK2V4dGVybiBpbnQgdGRlcF9nZXRfZWxmX2ltYWdlIChzdHJ1Y3QgZWxmX2ltYWdlICplaSwgcGlkX3QgcGlkLCB1bndfd29yZF90IGlwLAotKwkJCSAgICAgICB1bnNpZ25lZCBsb25nICpzZWdiYXNlLCB1bnNpZ25lZCBsb25nICptYXBvZmYsCi0rCQkJICAgICAgIGNoYXIgKnBhdGgsIHNpemVfdCBwYXRobGVuKTsKLStleHRlcm4gaW50IHRkZXBfYWNjZXNzX3JlZyAoc3RydWN0IGN1cnNvciAqYywgdW53X3JlZ251bV90IHJlZywKLSsJCQkgICAgdW53X3dvcmRfdCAqdmFscCwgaW50IHdyaXRlKTsKLStleHRlcm4gaW50IHRkZXBfYWNjZXNzX2ZwcmVnIChzdHJ1Y3QgY3Vyc29yICpjLCB1bndfcmVnbnVtX3QgcmVnLAotKwkJCSAgICAgIHVud19mcHJlZ190ICp2YWxwLCBpbnQgd3JpdGUpOwotKwotKyNlbmRpZiAvKiBBQVJDSDY0X0xJQlVOV0lORF9JX0ggKi8KLS0tLSBhL2luY2x1ZGUvdGRlcC9kd2FyZi1jb25maWcuaAotKysrIGIvaW5jbHVkZS90ZGVwL2R3YXJmLWNvbmZpZy5oCi1AQCAtMSw3ICsxLDkgQEAKLSAvKiBQcm92aWRlIGEgcmVhbCBmaWxlIC0gbm90IGEgc3ltbGluayAtIGFzIGl0IHdvdWxkIGNhdXNlIG11bHRpYXJjaCBjb25mbGljdHMKLSAgICB3aGVuIG11bHRpcGxlIGRpZmZlcmVudCBhcmNoIHJlbGVhc2VzIGFyZSBpbnN0YWxsZWQgc2ltdWx0YW5lb3VzbHkuICAqLwotIAotLSNpZiBkZWZpbmVkIF9fYXJtX18KLSsjaWYgZGVmaW5lZCBfX2FhcmNoNjRfXwotKyMgaW5jbHVkZSAidGRlcC1hYXJjaDY0L2R3YXJmLWNvbmZpZy5oIgotKyNlbGlmIGRlZmluZWQgX19hcm1fXwotICMgaW5jbHVkZSAidGRlcC1hcm0vZHdhcmYtY29uZmlnLmgiCi0gI2VsaWYgZGVmaW5lZCBfX2hwcGFfXwotICMgaW5jbHVkZSAidGRlcC1ocHBhL2R3YXJmLWNvbmZpZy5oIgotLS0tIGEvaW5jbHVkZS90ZGVwL2ptcGJ1Zi5oCi0rKysgYi9pbmNsdWRlL3RkZXAvam1wYnVmLmgKLUBAIC0zLDYgKzMsOCBAQAotIAotICNpZm5kZWYgVU5XX1JFTU9URV9PTkxZCi0gCi0rI2lmIGRlZmluZWQgX19hYXJjaDY0X18KLSsjIGluY2x1ZGUgInRkZXAtYWFyY2g2NC9qbXBidWYuaCIKLSAjaWYgZGVmaW5lZCBfX2FybV9fCi0gIyBpbmNsdWRlICJ0ZGVwLWFybS9qbXBidWYuaCIKLSAjZWxpZiBkZWZpbmVkIF9faHBwYV9fCi0tLS0gYS9pbmNsdWRlL3RkZXAvbGlidW53aW5kX2kuaC5pbgotKysrIGIvaW5jbHVkZS90ZGVwL2xpYnVud2luZF9pLmguaW4KLUBAIC0zLDcgKzMsOSBAQAotIAotICNpZm5kZWYgVU5XX1JFTU9URV9PTkxZCi0gCi0tI2lmIGRlZmluZWQgX19hcm1fXwotKyNpZiBkZWZpbmVkIF9fYWFyY2g2NF9fCi0rIyBpbmNsdWRlICJ0ZGVwLWFhcmNoNjQvbGlidW53aW5kX2kuaCIKLSsjZWxpZiBkZWZpbmVkIF9fYXJtX18KLSAjIGluY2x1ZGUgInRkZXAtYXJtL2xpYnVud2luZF9pLmgiCi0gI2VsaWYgZGVmaW5lZCBfX2hwcGFfXwotICMgaW5jbHVkZSAidGRlcC1ocHBhL2xpYnVud2luZF9pLmgiCi0tLS0gYS9zcmMvTWFrZWZpbGUuYW0KLSsrKyBiL3NyYy9NYWtlZmlsZS5hbQotQEAgLTE3MCw2ICsxNzAsMjggQEAgbGlidW53aW5kX2VsZnh4X2xhX1NPVVJDRVMgPSBlbGZ4eC5jCi0gbm9pbnN0X0xUTElCUkFSSUVTICs9ICQoTElCVU5XSU5EX0VMRikKLSBsaWJ1bndpbmRfbGFfTElCQUREICs9ICQoTElCVU5XSU5EX0VMRikKLSAKLSsjIFRoZSBsaXN0IG9mIGZpbGVzIHRoYXQgZ28gaW50byBsaWJ1bndpbmQgYW5kIGxpYnVud2luZC1hYXJjaDY0OgotK25vaW5zdF9IRUFERVJTICs9IGFhcmNoNjQvaW5pdC5oIGFhcmNoNjQvb2Zmc2V0cy5oIGFhcmNoNjQvdW53aW5kX2kuaAotK2xpYnVud2luZF9sYV9TT1VSQ0VTX2FhcmNoNjRfY29tbW9uID0gJChsaWJ1bndpbmRfbGFfU09VUkNFU19jb21tb24pCSAgICBcCi0rCWFhcmNoNjQvaXNfZnByZWcuYyBhYXJjaDY0L3JlZ25hbWUuYwotKwotKyMgVGhlIGxpc3Qgb2YgZmlsZXMgdGhhdCBnbyBpbnRvIGxpYnVud2luZDoKLStsaWJ1bndpbmRfbGFfU09VUkNFU19hYXJjaDY0ID0gJChsaWJ1bndpbmRfbGFfU09VUkNFU19hYXJjaDY0X2NvbW1vbikJICAgIFwKLSsJJChsaWJ1bndpbmRfbGFfU09VUkNFU19sb2NhbCkJCQkJCSAgICBcCi0rCWFhcmNoNjQvTGNyZWF0ZV9hZGRyX3NwYWNlLmMgYWFyY2g2NC9MZ2V0X3Byb2NfaW5mby5jIAkJICAgIFwKLSsJYWFyY2g2NC9MZ2V0X3NhdmVfbG9jLmMgYWFyY2g2NC9MZ2xvYmFsLmMgYWFyY2g2NC9MaW5pdC5jCSAgICBcCi0rCWFhcmNoNjQvTGluaXRfbG9jYWwuYyBhYXJjaDY0L0xpbml0X3JlbW90ZS5jIAkJCSAgICBcCi0rCWFhcmNoNjQvTGlzX3NpZ25hbF9mcmFtZS5jIGFhcmNoNjQvTHJlZ3MuYyBhYXJjaDY0L0xyZXN1bWUuYyAJICAgIFwKLSsJYWFyY2g2NC9Mc3RlcC5jCi0rCi0rbGlidW53aW5kX2FhcmNoNjRfbGFfU09VUkNFU19hYXJjaDY0ID0gJChsaWJ1bndpbmRfbGFfU09VUkNFU19hYXJjaDY0X2NvbW1vbikgXAotKwkkKGxpYnVud2luZF9sYV9TT1VSQ0VTX2dlbmVyaWMpCQkJCQkgICAgICBcCi0rCWFhcmNoNjQvR2NyZWF0ZV9hZGRyX3NwYWNlLmMgYWFyY2g2NC9HZ2V0X3Byb2NfaW5mby5jIAkJICAgICAgXAotKwlhYXJjaDY0L0dnZXRfc2F2ZV9sb2MuYyBhYXJjaDY0L0dnbG9iYWwuYyBhYXJjaDY0L0dpbml0LmMgCSAgICAgIFwKLSsJYWFyY2g2NC9HaW5pdF9sb2NhbC5jIGFhcmNoNjQvR2luaXRfcmVtb3RlLmMJCQkgICAgICBcCi0rCWFhcmNoNjQvR2lzX3NpZ25hbF9mcmFtZS5jIGFhcmNoNjQvR3JlZ3MuYyBhYXJjaDY0L0dyZXN1bWUuYwkgICAgICBcCi0rCWFhcmNoNjQvR3N0ZXAuYwotKwotICMgVGhlIGxpc3Qgb2YgZmlsZXMgdGhhdCBnbyBpbnRvIGxpYnVud2luZCBhbmQgbGlidW53aW5kLWFybToKLSBub2luc3RfSEVBREVSUyArPSBhcm0vaW5pdC5oIGFybS9vZmZzZXRzLmggYXJtL3Vud2luZF9pLmgKLSBsaWJ1bndpbmRfbGFfU09VUkNFU19hcm1fY29tbW9uID0gJChsaWJ1bndpbmRfbGFfU09VUkNFU19jb21tb24pCSAgICBcCi1AQCAtNDE4LDYgKzQ0MCwxOCBAQCBpZiBPU19GUkVFQlNECi0gIGxpYnVud2luZF9jb3JlZHVtcF9sYV9TT1VSQ0VTICs9IGNvcmVkdW1wL19VQ0RfYWNjZXNzX3JlZ19mcmVlYnNkLmMKLSBlbmRpZgotIAotK2lmIEFSQ0hfQUFSQ0g2NAotKyBsaWJfTFRMSUJSQVJJRVMgKz0gbGlidW53aW5kLWFhcmNoNjQubGEKLSsgbGlidW53aW5kX2xhX1NPVVJDRVMgPSAkKGxpYnVud2luZF9sYV9TT1VSQ0VTX2FhcmNoNjQpCi0rIGxpYnVud2luZF9hYXJjaDY0X2xhX1NPVVJDRVMgPSAkKGxpYnVud2luZF9hYXJjaDY0X2xhX1NPVVJDRVNfYWFyY2g2NCkKLSsgbGlidW53aW5kX2FhcmNoNjRfbGFfTERGTEFHUyA9ICQoQ09NTU9OX1NPX0xERkxBR1MpIC12ZXJzaW9uLWluZm8gJChTT1ZFUlNJT04pCi0rIGxpYnVud2luZF9hYXJjaDY0X2xhX0xJQkFERCA9IGxpYnVud2luZC1kd2FyZi1nZW5lcmljLmxhCi0rIGxpYnVud2luZF9hYXJjaDY0X2xhX0xJQkFERCArPSBsaWJ1bndpbmQtZWxmNjQubGEKLStpZiAhUkVNT1RFX09OTFkKLSsgbGlidW53aW5kX2FhcmNoNjRfbGFfTElCQUREICs9IGxpYnVud2luZC5sYSAtbGMKLStlbmRpZgotKyBsaWJ1bndpbmRfc2V0am1wX2xhX1NPVVJDRVMgKz0gYWFyY2g2NC9zaWdsb25nam1wLlMKLStlbHNlCi0gaWYgQVJDSF9BUk0KLSAgbGliX0xUTElCUkFSSUVTICs9IGxpYnVud2luZC1hcm0ubGEKLSAgbGlidW53aW5kX2xhX1NPVVJDRVMgPSAkKGxpYnVud2luZF9sYV9TT1VSQ0VTX2FybSkKLUBAIC01NDUsNiArNTc5LDcgQEAgZW5kaWYgIyBBUkNIX01JUFMKLSBlbmRpZiAjIEFSQ0hfSFBQQQotIGVuZGlmICMgQVJDSF9JQTY0Ci0gZW5kaWYgIyBBUkNIX0FSTQotK2VuZGlmICMgQVJDSF9BQVJDSDY0Ci0gCi0gIyBsaWJ1bndpbmQtc2V0am1wIGRlcGVuZHMgb24gbGlidW53aW5kLSQoYXJjaCkuIFRoZXJlZm9yZSBtdXN0IGJlIGFkZGVkCi0gIyBhdCB0aGUgZW5kLgotQEAgLTU2Nyw3ICs2MDIsOCBAQCBBTV9DUFBGTEFHUyA9IC1JJCh0b3Bfc3JjZGlyKS9pbmNsdWRlIC1JCi0gQU1fQ0NBU0ZMQUdTID0gJChBTV9DUFBGTEFHUykKLSBub2luc3RfSEVBREVSUyArPSB1bndpbmQvdW53aW5kLWludGVybmFsLmgKLSAKLS1FWFRSQV9ESVNUID0JJChsaWJ1bndpbmRfbGFfU09VUkNFU19hcm0pCQkJXAotK0VYVFJBX0RJU1QgPQkkKGxpYnVud2luZF9sYV9TT1VSQ0VTX2FhcmNoNjQpCQkJXAotKwkJJChsaWJ1bndpbmRfbGFfU09VUkNFU19hcm0pCQkJXAotIAkJJChsaWJ1bndpbmRfbGFfU09VUkNFU19ocHBhKQkJCVwKLSAJCSQobGlidW53aW5kX2xhX1NPVVJDRVNfaWE2NCkJCQlcCi0gCQkkKGxpYnVud2luZF9sYV9TT1VSQ0VTX21pcHMpCQkJXAotQEAgLTU3OSw2ICs2MTUsNyBAQCBFWFRSQV9ESVNUID0JJChsaWJ1bndpbmRfbGFfU09VUkNFU19hcm0pCi0gCQkkKGxpYnVud2luZF9sYV9TT1VSQ0VTX2NvbW1vbikJCQlcCi0gCQkkKGxpYnVud2luZF9sYV9TT1VSQ0VTX2xvY2FsKQkJCVwKLSAJCSQobGlidW53aW5kX2xhX1NPVVJDRVNfZ2VuZXJpYykJCQlcCi0rCQkkKGxpYnVud2luZF9hYXJjaDY0X2xhX1NPVVJDRVNfYWFyY2g2NCkJCVwKLSAJCSQobGlidW53aW5kX2FybV9sYV9TT1VSQ0VTX2FybSkJCQlcCi0gCQkkKGxpYnVud2luZF9ocHBhX2xhX1NPVVJDRVNfaHBwYSkJCVwKLSAJCSQobGlidW53aW5kX2lhNjRfbGFfU09VUkNFU19pYTY0KQkJXAotLS0tIC9kZXYvbnVsbAotKysrIGIvc3JjL2FhcmNoNjQvR2NyZWF0ZV9hZGRyX3NwYWNlLmMKLUBAIC0wLDAgKzEsNjAgQEAKLSsvKiBsaWJ1bndpbmQgLSBhIHBsYXRmb3JtLWluZGVwZW5kZW50IHVud2luZCBsaWJyYXJ5Ci0rICAgQ29weXJpZ2h0IChDKSAyMDEyIFRvbW1pIFJhbnRhbGEgPHR0LnJhbnRhbGFAZ21haWwuY29tPgotKyAgIENvcHlyaWdodCAoQykgMjAxMyBMaW5hcm8gTGltaXRlZAotKwotK1RoaXMgZmlsZSBpcyBwYXJ0IG9mIGxpYnVud2luZC4KLSsKLStQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcKLSthIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUKLSsiU29mdHdhcmUiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nCi0rd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLAotK2Rpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0bwotK3Blcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0bwotK3RoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKLSsKLStUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZQotK2luY2x1ZGVkIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLgotKwotK1RIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELAotK0VYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRgotK01FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5ECi0rTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRQotK0xJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04KLStPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04KLStXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4gICovCi0rCi0rI2luY2x1ZGUgPHN0cmluZy5oPgotKyNpbmNsdWRlIDxzdGRsaWIuaD4KLSsKLSsjaW5jbHVkZSAidW53aW5kX2kuaCIKLSsKLStQUk9URUNURUQgdW53X2FkZHJfc3BhY2VfdAotK3Vud19jcmVhdGVfYWRkcl9zcGFjZSAodW53X2FjY2Vzc29yc190ICphLCBpbnQgYnl0ZV9vcmRlcikKLSt7Ci0rI2lmZGVmIFVOV19MT0NBTF9PTkxZCi0rICByZXR1cm4gTlVMTDsKLSsjZWxzZQotKyAgdW53X2FkZHJfc3BhY2VfdCBhczsKLSsKLSsgIC8qIEFBcmNoNjQgc3VwcG9ydHMgbGl0dGxlLWVuZGlhbiBhbmQgYmlnLWVuZGlhbi4gKi8KLSsgIGlmIChieXRlX29yZGVyICE9IDAgJiYgYnl0ZV9vcmRlciAhPSBfX0xJVFRMRV9FTkRJQU4KLSsgICAgICAmJiBieXRlX29yZGVyICE9IF9fQklHX0VORElBTikKLSsgICAgcmV0dXJuIE5VTEw7Ci0rCi0rICBhcyA9IG1hbGxvYyAoc2l6ZW9mICgqYXMpKTsKLSsgIGlmICghYXMpCi0rICAgIHJldHVybiBOVUxMOwotKwotKyAgbWVtc2V0IChhcywgMCwgc2l6ZW9mICgqYXMpKTsKLSsKLSsgIGFzLT5hY2MgPSAqYTsKLSsKLSsgIC8qIERlZmF1bHQgdG8gbGl0dGxlLWVuZGlhbiBmb3IgQUFyY2g2NC4gKi8KLSsgIGlmIChieXRlX29yZGVyID09IDAgfHwgYnl0ZV9vcmRlciA9PSBfX0xJVFRMRV9FTkRJQU4pCi0rICAgIGFzLT5iaWdfZW5kaWFuID0gMDsKLSsgIGVsc2UKLSsgICAgYXMtPmJpZ19lbmRpYW4gPSAxOwotKwotKyAgcmV0dXJuIGFzOwotKyNlbmRpZgotK30KLS0tLSAvZGV2L251bGwKLSsrKyBiL3NyYy9hYXJjaDY0L0dnZXRfcHJvY19pbmZvLmMKLUBAIC0wLDAgKzEsMzkgQEAKLSsvKiBsaWJ1bndpbmQgLSBhIHBsYXRmb3JtLWluZGVwZW5kZW50IHVud2luZCBsaWJyYXJ5Ci0rICAgQ29weXJpZ2h0IChDKSAyMDA4IENvZGVTb3VyY2VyeQotKwotK1RoaXMgZmlsZSBpcyBwYXJ0IG9mIGxpYnVud2luZC4KLSsKLStQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcKLSthIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUKLSsiU29mdHdhcmUiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nCi0rd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLAotK2Rpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0bwotK3Blcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0bwotK3RoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKLSsKLStUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZQotK2luY2x1ZGVkIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLgotKwotK1RIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELAotK0VYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRgotK01FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5ECi0rTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRQotK0xJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04KLStPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04KLStXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4gICovCi0rCi0rI2luY2x1ZGUgInVud2luZF9pLmgiCi0rCi0rUFJPVEVDVEVEIGludAotK3Vud19nZXRfcHJvY19pbmZvICh1bndfY3Vyc29yX3QgKmN1cnNvciwgdW53X3Byb2NfaW5mb190ICpwaSkKLSt7Ci0rICBzdHJ1Y3QgY3Vyc29yICpjID0gKHN0cnVjdCBjdXJzb3IgKikgY3Vyc29yOwotKyAgaW50IHJldDsKLSsKLSsgIHJldCA9IGR3YXJmX21ha2VfcHJvY19pbmZvICgmYy0+ZHdhcmYpOwotKyAgaWYgKHJldCA8IDApCi0rICAgIHJldHVybiByZXQ7Ci0rCi0rICAqcGkgPSBjLT5kd2FyZi5waTsKLSsgIHJldHVybiAwOwotK30KLS0tLSAvZGV2L251bGwKLSsrKyBiL3NyYy9hYXJjaDY0L0dnZXRfc2F2ZV9sb2MuYwotQEAgLTAsMCArMSwxMDAgQEAKLSsvKiBsaWJ1bndpbmQgLSBhIHBsYXRmb3JtLWluZGVwZW5kZW50IHVud2luZCBsaWJyYXJ5Ci0rICAgQ29weXJpZ2h0IChDKSAyMDA4IENvZGVTb3VyY2VyeQotKyAgIENvcHlyaWdodCAoQykgMjAxMiBUb21taSBSYW50YWxhIDx0dC5yYW50YWxhQGdtYWlsLmNvbT4KLSsgICBDb3B5cmlnaHQgKEMpIDIwMTMgTGluYXJvIExpbWl0ZWQKLSsKLStUaGlzIGZpbGUgaXMgcGFydCBvZiBsaWJ1bndpbmQuCi0rCi0rUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nCi0rYSBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlCi0rIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZwotK3dpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwKLStkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8KLStwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8KLSt0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6Ci0rCi0rVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUKLStpbmNsdWRlZCBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4KLSsKLStUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwKLStFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YKLStNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORAotK05PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUKLStMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OCi0rT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OCi0rV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuICAqLwotKwotKyNpbmNsdWRlICJ1bndpbmRfaS5oIgotKwotK1BST1RFQ1RFRCBpbnQKLSt1bndfZ2V0X3NhdmVfbG9jICh1bndfY3Vyc29yX3QgKmN1cnNvciwgaW50IHJlZywgdW53X3NhdmVfbG9jX3QgKnNsb2MpCi0rewotKyAgc3RydWN0IGN1cnNvciAqYyA9IChzdHJ1Y3QgY3Vyc29yICopIGN1cnNvcjsKLSsgIGR3YXJmX2xvY190IGxvYzsKLSsKLSsgIHN3aXRjaCAocmVnKQotKyAgICB7Ci0rICAgIGNhc2UgVU5XX0FBUkNINjRfWDA6Ci0rICAgIGNhc2UgVU5XX0FBUkNINjRfWDE6Ci0rICAgIGNhc2UgVU5XX0FBUkNINjRfWDI6Ci0rICAgIGNhc2UgVU5XX0FBUkNINjRfWDM6Ci0rICAgIGNhc2UgVU5XX0FBUkNINjRfWDQ6Ci0rICAgIGNhc2UgVU5XX0FBUkNINjRfWDU6Ci0rICAgIGNhc2UgVU5XX0FBUkNINjRfWDY6Ci0rICAgIGNhc2UgVU5XX0FBUkNINjRfWDc6Ci0rICAgIGNhc2UgVU5XX0FBUkNINjRfWDg6Ci0rICAgIGNhc2UgVU5XX0FBUkNINjRfWDk6Ci0rICAgIGNhc2UgVU5XX0FBUkNINjRfWDEwOgotKyAgICBjYXNlIFVOV19BQVJDSDY0X1gxMToKLSsgICAgY2FzZSBVTldfQUFSQ0g2NF9YMTI6Ci0rICAgIGNhc2UgVU5XX0FBUkNINjRfWDEzOgotKyAgICBjYXNlIFVOV19BQVJDSDY0X1gxNDoKLSsgICAgY2FzZSBVTldfQUFSQ0g2NF9YMTU6Ci0rICAgIGNhc2UgVU5XX0FBUkNINjRfWDE2OgotKyAgICBjYXNlIFVOV19BQVJDSDY0X1gxNzoKLSsgICAgY2FzZSBVTldfQUFSQ0g2NF9YMTg6Ci0rICAgIGNhc2UgVU5XX0FBUkNINjRfWDE5OgotKyAgICBjYXNlIFVOV19BQVJDSDY0X1gyMDoKLSsgICAgY2FzZSBVTldfQUFSQ0g2NF9YMjE6Ci0rICAgIGNhc2UgVU5XX0FBUkNINjRfWDIyOgotKyAgICBjYXNlIFVOV19BQVJDSDY0X1gyMzoKLSsgICAgY2FzZSBVTldfQUFSQ0g2NF9YMjQ6Ci0rICAgIGNhc2UgVU5XX0FBUkNINjRfWDI1OgotKyAgICBjYXNlIFVOV19BQVJDSDY0X1gyNjoKLSsgICAgY2FzZSBVTldfQUFSQ0g2NF9YMjc6Ci0rICAgIGNhc2UgVU5XX0FBUkNINjRfWDI4OgotKyAgICBjYXNlIFVOV19BQVJDSDY0X1gyOToKLSsgICAgY2FzZSBVTldfQUFSQ0g2NF9YMzA6Ci0rICAgIGNhc2UgVU5XX0FBUkNINjRfU1A6Ci0rICAgIGNhc2UgVU5XX0FBUkNINjRfUEM6Ci0rICAgIGNhc2UgVU5XX0FBUkNINjRfUFNUQVRFOgotKyAgICAgIGxvYyA9IGMtPmR3YXJmLmxvY1tyZWddOwotKyAgICAgIGJyZWFrOwotKwotKyAgICBkZWZhdWx0OgotKyAgICAgIGxvYyA9IERXQVJGX05VTExfTE9DOwkvKiBkZWZhdWx0IHRvICJub3Qgc2F2ZWQiICovCi0rICAgICAgYnJlYWs7Ci0rICAgIH0KLSsKLSsgIG1lbXNldCAoc2xvYywgMCwgc2l6ZW9mICgqc2xvYykpOwotKwotKyAgaWYgKERXQVJGX0lTX05VTExfTE9DIChsb2MpKQotKyAgICB7Ci0rICAgICAgc2xvYy0+dHlwZSA9IFVOV19TTFRfTk9ORTsKLSsgICAgICByZXR1cm4gMDsKLSsgICAgfQotKwotKyNpZiAhZGVmaW5lZChVTldfTE9DQUxfT05MWSkKLSsgIGlmIChEV0FSRl9JU19SRUdfTE9DIChsb2MpKQotKyAgICB7Ci0rICAgICAgc2xvYy0+dHlwZSA9IFVOV19TTFRfUkVHOwotKyAgICAgIHNsb2MtPnUucmVnbnVtID0gRFdBUkZfR0VUX0xPQyAobG9jKTsKLSsgICAgfQotKyAgZWxzZQotKyNlbmRpZgotKyAgICB7Ci0rICAgICAgc2xvYy0+dHlwZSA9IFVOV19TTFRfTUVNT1JZOwotKyAgICAgIHNsb2MtPnUuYWRkciA9IERXQVJGX0dFVF9MT0MgKGxvYyk7Ci0rICAgIH0KLSsgIHJldHVybiAwOwotK30KLS0tLSAvZGV2L251bGwKLSsrKyBiL3NyYy9hYXJjaDY0L0dnbG9iYWwuYwotQEAgLTAsMCArMSw1NyBAQAotKy8qIGxpYnVud2luZCAtIGEgcGxhdGZvcm0taW5kZXBlbmRlbnQgdW53aW5kIGxpYnJhcnkKLSsgICBDb3B5cmlnaHQgKEMpIDIwMDggQ29kZVNvdXJjZXJ5Ci0rICAgQ29weXJpZ2h0IChDKSAyMDEyIFRvbW1pIFJhbnRhbGEgPHR0LnJhbnRhbGFAZ21haWwuY29tPgotKyAgIENvcHlyaWdodCAoQykgMjAxMyBMaW5hcm8gTGltaXRlZAotKwotK1RoaXMgZmlsZSBpcyBwYXJ0IG9mIGxpYnVud2luZC4KLSsKLStQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcKLSthIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUKLSsiU29mdHdhcmUiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nCi0rd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLAotK2Rpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0bwotK3Blcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0bwotK3RoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKLSsKLStUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZQotK2luY2x1ZGVkIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLgotKwotK1RIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELAotK0VYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRgotK01FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5ECi0rTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRQotK0xJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04KLStPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04KLStXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4gICovCi0rCi0rI2luY2x1ZGUgInVud2luZF9pLmgiCi0rI2luY2x1ZGUgImR3YXJmX2kuaCIKLSsKLStISURERU4gZGVmaW5lX2xvY2sgKGFhcmNoNjRfbG9jayk7Ci0rSElEREVOIGludCB0ZGVwX2luaXRfZG9uZTsKLSsKLStISURERU4gdm9pZAotK3RkZXBfaW5pdCAodm9pZCkKLSt7Ci0rICBpbnRybWFza190IHNhdmVkX21hc2s7Ci0rCi0rICBzaWdmaWxsc2V0ICgmdW53aV9mdWxsX21hc2spOwotKwotKyAgbG9ja19hY3F1aXJlICgmYWFyY2g2NF9sb2NrLCBzYXZlZF9tYXNrKTsKLSsgIHsKLSsgICAgaWYgKHRkZXBfaW5pdF9kb25lKQotKyAgICAgIC8qIGFub3RoZXIgdGhyZWFkIGVsc2UgYmVhdCB1cyB0byBpdC4uLiAqLwotKyAgICAgIGdvdG8gb3V0OwotKwotKyAgICBtaV9pbml0ICgpOwotKwotKyAgICBkd2FyZl9pbml0ICgpOwotKwotKyNpZm5kZWYgVU5XX1JFTU9URV9PTkxZCi0rICAgIGFhcmNoNjRfbG9jYWxfYWRkcl9zcGFjZV9pbml0ICgpOwotKyNlbmRpZgotKyAgICB0ZGVwX2luaXRfZG9uZSA9IDE7CS8qIHNpZ25hbCB0aGF0IHdlJ3JlIGluaXRpYWxpemVkLi4uICovCi0rICB9Ci0rIG91dDoKLSsgIGxvY2tfcmVsZWFzZSAoJmFhcmNoNjRfbG9jaywgc2F2ZWRfbWFzayk7Ci0rfQotLS0tIC9kZXYvbnVsbAotKysrIGIvc3JjL2FhcmNoNjQvR2luaXQuYwotQEAgLTAsMCArMSwxODcgQEAKLSsvKiBsaWJ1bndpbmQgLSBhIHBsYXRmb3JtLWluZGVwZW5kZW50IHVud2luZCBsaWJyYXJ5Ci0rICAgQ29weXJpZ2h0IChDKSAyMDA4IENvZGVTb3VyY2VyeQotKyAgIENvcHlyaWdodCAoQykgMjAxMiBUb21taSBSYW50YWxhIDx0dC5yYW50YWxhQGdtYWlsLmNvbT4KLSsgICBDb3B5cmlnaHQgKEMpIDIwMTMgTGluYXJvIExpbWl0ZWQKLSsKLStUaGlzIGZpbGUgaXMgcGFydCBvZiBsaWJ1bndpbmQuCi0rCi0rUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nCi0rYSBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlCi0rIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZwotK3dpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwKLStkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8KLStwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8KLSt0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6Ci0rCi0rVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUKLStpbmNsdWRlZCBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4KLSsKLStUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwKLStFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YKLStNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORAotK05PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUKLStMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OCi0rT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OCi0rV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuICAqLwotKwotKyNpbmNsdWRlIDxzdGRsaWIuaD4KLSsjaW5jbHVkZSA8c3RyaW5nLmg+Ci0rCi0rI2luY2x1ZGUgInVud2luZF9pLmgiCi0rCi0rI2lmZGVmIFVOV19SRU1PVEVfT05MWQotKwotKy8qIHVud19sb2NhbF9hZGRyX3NwYWNlIGlzIGEgTlVMTCBwb2ludGVyIGluIHRoaXMgY2FzZS4gICovCi0rUFJPVEVDVEVEIHVud19hZGRyX3NwYWNlX3QgdW53X2xvY2FsX2FkZHJfc3BhY2U7Ci0rCi0rI2Vsc2UgLyogIVVOV19SRU1PVEVfT05MWSAqLwotKwotK3N0YXRpYyBzdHJ1Y3QgdW53X2FkZHJfc3BhY2UgbG9jYWxfYWRkcl9zcGFjZTsKLSsKLStQUk9URUNURUQgdW53X2FkZHJfc3BhY2VfdCB1bndfbG9jYWxfYWRkcl9zcGFjZSA9ICZsb2NhbF9hZGRyX3NwYWNlOwotKwotK3N0YXRpYyBpbmxpbmUgdm9pZCAqCi0rdWNfYWRkciAodWNvbnRleHRfdCAqdWMsIGludCByZWcpCi0rewotKyAgaWYgKHJlZyA+PSBVTldfQUFSQ0g2NF9YMCAmJiByZWcgPD0gVU5XX0FBUkNINjRfVjMxKQotKyAgICByZXR1cm4gJnVjLT51Y19tY29udGV4dC5yZWdzW3JlZ107Ci0rICBlbHNlCi0rICAgIHJldHVybiBOVUxMOwotK30KLSsKLSsjIGlmZGVmIFVOV19MT0NBTF9PTkxZCi0rCi0rSElEREVOIHZvaWQgKgotK3RkZXBfdWNfYWRkciAodWNvbnRleHRfdCAqdWMsIGludCByZWcpCi0rewotKyAgcmV0dXJuIHVjX2FkZHIgKHVjLCByZWcpOwotK30KLSsKLSsjIGVuZGlmIC8qIFVOV19MT0NBTF9PTkxZICovCi0rCi0rSElEREVOIHVud19keW5faW5mb19saXN0X3QgX1VfZHluX2luZm9fbGlzdDsKLSsKLSsvKiBYWFggZml4IG1lOiB0aGVyZSBpcyBjdXJyZW50bHkgbm8gd2F5IHRvIGxvY2F0ZSB0aGUgZHluLWluZm8gbGlzdAotKyAgICAgICBieSBhIHJlbW90ZSB1bndpbmRlci4gIE9uIGlhNjQsIHRoaXMgaXMgZG9uZSB2aWEgYSBzcGVjaWFsCi0rICAgICAgIHVud2luZC10YWJsZSBlbnRyeS4gIFBlcmhhcHMgc29tZXRoaW5nIHNpbWlsYXIgY2FuIGJlIGRvbmUgd2l0aAotKyAgICAgICBEV0FSRjIgdW53aW5kIGluZm8uICAqLwotKwotK3N0YXRpYyB2b2lkCi0rcHV0X3Vud2luZF9pbmZvICh1bndfYWRkcl9zcGFjZV90IGFzLCB1bndfcHJvY19pbmZvX3QgKnByb2NfaW5mbywgdm9pZCAqYXJnKQotK3sKLSsgIC8qIGl0J3MgYSBuby1vcCAqLwotK30KLSsKLStzdGF0aWMgaW50Ci0rZ2V0X2R5bl9pbmZvX2xpc3RfYWRkciAodW53X2FkZHJfc3BhY2VfdCBhcywgdW53X3dvcmRfdCAqZHluX2luZm9fbGlzdF9hZGRyLAotKwkJCXZvaWQgKmFyZykKLSt7Ci0rICAqZHluX2luZm9fbGlzdF9hZGRyID0gKHVud193b3JkX3QpICZfVV9keW5faW5mb19saXN0OwotKyAgcmV0dXJuIDA7Ci0rfQotKwotK3N0YXRpYyBpbnQKLSthY2Nlc3NfbWVtICh1bndfYWRkcl9zcGFjZV90IGFzLCB1bndfd29yZF90IGFkZHIsIHVud193b3JkX3QgKnZhbCwgaW50IHdyaXRlLAotKwkgICAgdm9pZCAqYXJnKQotK3sKLSsgIGlmICh3cml0ZSkKLSsgICAgewotKyAgICAgIERlYnVnICgxNiwgIm1lbVslbHhdIDwtICVseFxuIiwgYWRkciwgKnZhbCk7Ci0rICAgICAgKih1bndfd29yZF90ICopIGFkZHIgPSAqdmFsOwotKyAgICB9Ci0rICBlbHNlCi0rICAgIHsKLSsgICAgICAqdmFsID0gKih1bndfd29yZF90ICopIGFkZHI7Ci0rICAgICAgRGVidWcgKDE2LCAibWVtWyVseF0gLT4gJWx4XG4iLCBhZGRyLCAqdmFsKTsKLSsgICAgfQotKyAgcmV0dXJuIDA7Ci0rfQotKwotK3N0YXRpYyBpbnQKLSthY2Nlc3NfcmVnICh1bndfYWRkcl9zcGFjZV90IGFzLCB1bndfcmVnbnVtX3QgcmVnLCB1bndfd29yZF90ICp2YWwsIGludCB3cml0ZSwKLSsJICAgIHZvaWQgKmFyZykKLSt7Ci0rICB1bndfd29yZF90ICphZGRyOwotKyAgdWNvbnRleHRfdCAqdWMgPSBhcmc7Ci0rCi0rICBpZiAodW53X2lzX2ZwcmVnIChyZWcpKQotKyAgICBnb3RvIGJhZHJlZzsKLSsKLSsgIGlmICghKGFkZHIgPSB1Y19hZGRyICh1YywgcmVnKSkpCi0rICAgIGdvdG8gYmFkcmVnOwotKwotKyAgaWYgKHdyaXRlKQotKyAgICB7Ci0rICAgICAgKih1bndfd29yZF90ICopIGFkZHIgPSAqdmFsOwotKyAgICAgIERlYnVnICgxMiwgIiVzIDwtICVseFxuIiwgdW53X3JlZ25hbWUgKHJlZyksICp2YWwpOwotKyAgICB9Ci0rICBlbHNlCi0rICAgIHsKLSsgICAgICAqdmFsID0gKih1bndfd29yZF90ICopIGFkZHI7Ci0rICAgICAgRGVidWcgKDEyLCAiJXMgLT4gJWx4XG4iLCB1bndfcmVnbmFtZSAocmVnKSwgKnZhbCk7Ci0rICAgIH0KLSsgIHJldHVybiAwOwotKwotKyBiYWRyZWc6Ci0rICBEZWJ1ZyAoMSwgImJhZCByZWdpc3RlciBudW1iZXIgJXVcbiIsIHJlZyk7Ci0rICByZXR1cm4gLVVOV19FQkFEUkVHOwotK30KLSsKLStzdGF0aWMgaW50Ci0rYWNjZXNzX2ZwcmVnICh1bndfYWRkcl9zcGFjZV90IGFzLCB1bndfcmVnbnVtX3QgcmVnLCB1bndfZnByZWdfdCAqdmFsLAotKwkgICAgICBpbnQgd3JpdGUsIHZvaWQgKmFyZykKLSt7Ci0rICB1Y29udGV4dF90ICp1YyA9IGFyZzsKLSsgIHVud19mcHJlZ190ICphZGRyOwotKwotKyAgaWYgKCF1bndfaXNfZnByZWcgKHJlZykpCi0rICAgIGdvdG8gYmFkcmVnOwotKwotKyAgaWYgKCEoYWRkciA9IHVjX2FkZHIgKHVjLCByZWcpKSkKLSsgICAgZ290byBiYWRyZWc7Ci0rCi0rICBpZiAod3JpdGUpCi0rICAgIHsKLSsgICAgICBEZWJ1ZyAoMTIsICIlcyA8LSAlMDhseC4lMDhseC4lMDhseFxuIiwgdW53X3JlZ25hbWUgKHJlZyksCi0rCSAgICAgKChsb25nICopdmFsKVswXSwgKChsb25nICopdmFsKVsxXSwgKChsb25nICopdmFsKVsyXSk7Ci0rICAgICAgKih1bndfZnByZWdfdCAqKSBhZGRyID0gKnZhbDsKLSsgICAgfQotKyAgZWxzZQotKyAgICB7Ci0rICAgICAgKnZhbCA9ICoodW53X2ZwcmVnX3QgKikgYWRkcjsKLSsgICAgICBEZWJ1ZyAoMTIsICIlcyAtPiAlMDhseC4lMDhseC4lMDhseFxuIiwgdW53X3JlZ25hbWUgKHJlZyksCi0rCSAgICAgKChsb25nICopdmFsKVswXSwgKChsb25nICopdmFsKVsxXSwgKChsb25nICopdmFsKVsyXSk7Ci0rICAgIH0KLSsgIHJldHVybiAwOwotKwotKyBiYWRyZWc6Ci0rICBEZWJ1ZyAoMSwgImJhZCByZWdpc3RlciBudW1iZXIgJXVcbiIsIHJlZyk7Ci0rICAvKiBhdHRlbXB0IHRvIGFjY2VzcyBhIG5vbi1wcmVzZXJ2ZWQgcmVnaXN0ZXIgKi8KLSsgIHJldHVybiAtVU5XX0VCQURSRUc7Ci0rfQotKwotK3N0YXRpYyBpbnQKLStnZXRfc3RhdGljX3Byb2NfbmFtZSAodW53X2FkZHJfc3BhY2VfdCBhcywgdW53X3dvcmRfdCBpcCwKLSsJCSAgICAgIGNoYXIgKmJ1Ziwgc2l6ZV90IGJ1Zl9sZW4sIHVud193b3JkX3QgKm9mZnAsCi0rCQkgICAgICB2b2lkICphcmcpCi0rewotKyAgcmV0dXJuIF9VZWxmNjRfZ2V0X3Byb2NfbmFtZSAoYXMsIGdldHBpZCAoKSwgaXAsIGJ1ZiwgYnVmX2xlbiwgb2ZmcCk7Ci0rfQotKwotK0hJRERFTiB2b2lkCi0rYWFyY2g2NF9sb2NhbF9hZGRyX3NwYWNlX2luaXQgKHZvaWQpCi0rewotKyAgbWVtc2V0ICgmbG9jYWxfYWRkcl9zcGFjZSwgMCwgc2l6ZW9mIChsb2NhbF9hZGRyX3NwYWNlKSk7Ci0rICBsb2NhbF9hZGRyX3NwYWNlLmNhY2hpbmdfcG9saWN5ID0gVU5XX0NBQ0hFX0dMT0JBTDsKLSsgIGxvY2FsX2FkZHJfc3BhY2UuYWNjLmZpbmRfcHJvY19pbmZvID0gZHdhcmZfZmluZF9wcm9jX2luZm87Ci0rICBsb2NhbF9hZGRyX3NwYWNlLmFjYy5wdXRfdW53aW5kX2luZm8gPSBwdXRfdW53aW5kX2luZm87Ci0rICBsb2NhbF9hZGRyX3NwYWNlLmFjYy5nZXRfZHluX2luZm9fbGlzdF9hZGRyID0gZ2V0X2R5bl9pbmZvX2xpc3RfYWRkcjsKLSsgIGxvY2FsX2FkZHJfc3BhY2UuYWNjLmFjY2Vzc19tZW0gPSBhY2Nlc3NfbWVtOwotKyAgbG9jYWxfYWRkcl9zcGFjZS5hY2MuYWNjZXNzX3JlZyA9IGFjY2Vzc19yZWc7Ci0rICBsb2NhbF9hZGRyX3NwYWNlLmFjYy5hY2Nlc3NfZnByZWcgPSBhY2Nlc3NfZnByZWc7Ci0rICBsb2NhbF9hZGRyX3NwYWNlLmFjYy5yZXN1bWUgPSBhYXJjaDY0X2xvY2FsX3Jlc3VtZTsKLSsgIGxvY2FsX2FkZHJfc3BhY2UuYWNjLmdldF9wcm9jX25hbWUgPSBnZXRfc3RhdGljX3Byb2NfbmFtZTsKLSsgIHVud19mbHVzaF9jYWNoZSAoJmxvY2FsX2FkZHJfc3BhY2UsIDAsIDApOwotK30KLSsKLSsjZW5kaWYgLyogIVVOV19SRU1PVEVfT05MWSAqLwotLS0tIC9kZXYvbnVsbAotKysrIGIvc3JjL2FhcmNoNjQvR2luaXRfbG9jYWwuYwotQEAgLTAsMCArMSw1NSBAQAotKy8qIGxpYnVud2luZCAtIGEgcGxhdGZvcm0taW5kZXBlbmRlbnQgdW53aW5kIGxpYnJhcnkKLSsgICBDb3B5cmlnaHQgKEMpIDIwMDggQ29kZVNvdXJjZXJ5Ci0rICAgQ29weXJpZ2h0IChDKSAyMDExLTIwMTMgTGluYXJvIExpbWl0ZWQKLSsKLStUaGlzIGZpbGUgaXMgcGFydCBvZiBsaWJ1bndpbmQuCi0rCi0rUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nCi0rYSBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlCi0rIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZwotK3dpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwKLStkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8KLStwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8KLSt0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6Ci0rCi0rVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUKLStpbmNsdWRlZCBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4KLSsKLStUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwKLStFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YKLStNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORAotK05PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUKLStMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OCi0rT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OCi0rV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuICAqLwotKwotKyNpbmNsdWRlICJ1bndpbmRfaS5oIgotKyNpbmNsdWRlICJpbml0LmgiCi0rCi0rI2lmZGVmIFVOV19SRU1PVEVfT05MWQotKwotK1BST1RFQ1RFRCBpbnQKLSt1bndfaW5pdF9sb2NhbCAodW53X2N1cnNvcl90ICpjdXJzb3IsIHVud19jb250ZXh0X3QgKnVjKQotK3sKLSsgIHJldHVybiAtVU5XX0VJTlZBTDsKLSt9Ci0rCi0rI2Vsc2UgLyogIVVOV19SRU1PVEVfT05MWSAqLwotKwotK1BST1RFQ1RFRCBpbnQKLSt1bndfaW5pdF9sb2NhbCAodW53X2N1cnNvcl90ICpjdXJzb3IsIHVud19jb250ZXh0X3QgKnVjKQotK3sKLSsgIHN0cnVjdCBjdXJzb3IgKmMgPSAoc3RydWN0IGN1cnNvciAqKSBjdXJzb3I7Ci0rCi0rICBpZiAoIXRkZXBfaW5pdF9kb25lKQotKyAgICB0ZGVwX2luaXQgKCk7Ci0rCi0rICBEZWJ1ZyAoMSwgIihjdXJzb3I9JXApXG4iLCBjKTsKLSsKLSsgIGMtPmR3YXJmLmFzID0gdW53X2xvY2FsX2FkZHJfc3BhY2U7Ci0rICBjLT5kd2FyZi5hc19hcmcgPSB1YzsKLSsKLSsgIHJldHVybiBjb21tb25faW5pdCAoYywgMSk7Ci0rfQotKwotKyNlbmRpZiAvKiAhVU5XX1JFTU9URV9PTkxZICovCi0tLS0gL2Rldi9udWxsCi0rKysgYi9zcmMvYWFyY2g2NC9HaW5pdF9yZW1vdGUuYwotQEAgLTAsMCArMSw0NSBAQAotKy8qIGxpYnVud2luZCAtIGEgcGxhdGZvcm0taW5kZXBlbmRlbnQgdW53aW5kIGxpYnJhcnkKLSsgICBDb3B5cmlnaHQgKEMpIDIwMDggQ29kZVNvdXJjZXJ5Ci0rCi0rVGhpcyBmaWxlIGlzIHBhcnQgb2YgbGlidW53aW5kLgotKwotK1Blcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZwotK2EgY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZQotKyJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcKLSt3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsCi0rZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvCi0rcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvCi0rdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgotKwotK1RoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlCi0raW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuCi0rCi0rVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsCi0rRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GCi0rTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQKLStOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFCi0rTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTgotK09GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTgotK1dJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLiAgKi8KLSsKLSsjaW5jbHVkZSAiaW5pdC5oIgotKyNpbmNsdWRlICJ1bndpbmRfaS5oIgotKwotK1BST1RFQ1RFRCBpbnQKLSt1bndfaW5pdF9yZW1vdGUgKHVud19jdXJzb3JfdCAqY3Vyc29yLCB1bndfYWRkcl9zcGFjZV90IGFzLCB2b2lkICphc19hcmcpCi0rewotKyNpZmRlZiBVTldfTE9DQUxfT05MWQotKyAgcmV0dXJuIC1VTldfRUlOVkFMOwotKyNlbHNlIC8qICFVTldfTE9DQUxfT05MWSAqLwotKyAgc3RydWN0IGN1cnNvciAqYyA9IChzdHJ1Y3QgY3Vyc29yICopIGN1cnNvcjsKLSsKLSsgIGlmICghdGRlcF9pbml0X2RvbmUpCi0rICAgIHRkZXBfaW5pdCAoKTsKLSsKLSsgIERlYnVnICgxLCAiKGN1cnNvcj0lcClcbiIsIGMpOwotKwotKyAgYy0+ZHdhcmYuYXMgPSBhczsKLSsgIGMtPmR3YXJmLmFzX2FyZyA9IGFzX2FyZzsKLSsgIHJldHVybiBjb21tb25faW5pdCAoYywgMCk7Ci0rI2VuZGlmIC8qICFVTldfTE9DQUxfT05MWSAqLwotK30KLS0tLSAvZGV2L251bGwKLSsrKyBiL3NyYy9hYXJjaDY0L0dpc19zaWduYWxfZnJhbWUuYwotQEAgLTAsMCArMSw2NCBAQAotKy8qIGxpYnVud2luZCAtIGEgcGxhdGZvcm0taW5kZXBlbmRlbnQgdW53aW5kIGxpYnJhcnkKLSsgICBDb3B5cmlnaHQgKEMpIDIwMTIgVG9tbWkgUmFudGFsYSA8dHQucmFudGFsYUBnbWFpbC5jb20+Ci0rICAgQ29weXJpZ2h0IChDKSAyMDEzIExpbmFybyBMaW1pdGVkCi0rCi0rVGhpcyBmaWxlIGlzIHBhcnQgb2YgbGlidW53aW5kLgotKwotK1Blcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZwotK2EgY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZQotKyJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcKLSt3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsCi0rZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvCi0rcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvCi0rdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgotKwotK1RoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlCi0raW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuCi0rCi0rVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsCi0rRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GCi0rTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQKLStOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFCi0rTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTgotK09GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTgotK1dJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLiAgKi8KLSsKLSsjaW5jbHVkZSAidW53aW5kX2kuaCIKLSsKLSsvKiBUaGUgcmVzdG9yZXIgc3R1YiB3aWxsIGFsd2F5cyBoYXZlIHRoZSBmb3JtOgotKwotKyAgIGQyODAxMTY4ICAgICAgICBtb3Z6ICAgIHg4LCAjMHg4YgotKyAgIGQ0MDAwMDAxICAgICAgICBzdmMgICAgICMweDAKLSsqLwotKwotK1BST1RFQ1RFRCBpbnQKLSt1bndfaXNfc2lnbmFsX2ZyYW1lICh1bndfY3Vyc29yX3QgKmN1cnNvcikKLSt7Ci0rI2lmZGVmIF9fbGludXhfXwotKyAgc3RydWN0IGN1cnNvciAqYyA9IChzdHJ1Y3QgY3Vyc29yICopIGN1cnNvcjsKLSsgIHVud193b3JkX3QgdzAsIGlwOwotKyAgdW53X2FkZHJfc3BhY2VfdCBhczsKLSsgIHVud19hY2Nlc3NvcnNfdCAqYTsKLSsgIHZvaWQgKmFyZzsKLSsgIGludCByZXQ7Ci0rCi0rICBhcyA9IGMtPmR3YXJmLmFzOwotKyAgYSA9IHVud19nZXRfYWNjZXNzb3JzIChhcyk7Ci0rICBhcmcgPSBjLT5kd2FyZi5hc19hcmc7Ci0rCi0rICBpcCA9IGMtPmR3YXJmLmlwOwotKwotKyAgcmV0ID0gKCphLT5hY2Nlc3NfbWVtKSAoYXMsIGlwLCAmdzAsIDAsIGFyZyk7Ci0rICBpZiAocmV0IDwgMCkKLSsgICAgcmV0dXJuIHJldDsKLSsKLSsgIC8qIEZJWE1FOiBkaXN0aW5ndWlzaCAzMmJpdCBpbnNuIHZzIDY0Yml0IHJlZ2lzdGVycy4gICovCi0rICBpZiAodzAgIT0gMHhkNDAwMDAwMWQyODAxMTY4KQotKyAgICByZXR1cm4gMDsKLSsKLSsgIHJldHVybiAxOwotKwotKyNlbHNlCi0rICByZXR1cm4gLVVOV19FTk9JTkZPOwotKyNlbmRpZgotK30KLS0tLSAvZGV2L251bGwKLSsrKyBiL3NyYy9hYXJjaDY0L0dyZWdzLmMKLUBAIC0wLDAgKzEsMTEzIEBACi0rLyogbGlidW53aW5kIC0gYSBwbGF0Zm9ybS1pbmRlcGVuZGVudCB1bndpbmQgbGlicmFyeQotKyAgIENvcHlyaWdodCAoQykgMjAwOCBDb2RlU291cmNlcnkKLSsgICBDb3B5cmlnaHQgKEMpIDIwMTIgVG9tbWkgUmFudGFsYSA8dHQucmFudGFsYUBnbWFpbC5jb20+Ci0rICAgQ29weXJpZ2h0IChDKSAyMDEzIExpbmFybyBMaW1pdGVkCi0rCi0rVGhpcyBmaWxlIGlzIHBhcnQgb2YgbGlidW53aW5kLgotKwotK1Blcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZwotK2EgY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZQotKyJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcKLSt3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsCi0rZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvCi0rcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvCi0rdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgotKwotK1RoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlCi0raW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuCi0rCi0rVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsCi0rRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GCi0rTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQKLStOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFCi0rTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTgotK09GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTgotK1dJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLiAgKi8KLSsKLSsjaW5jbHVkZSAidW53aW5kX2kuaCIKLSsKLStISURERU4gaW50Ci0rdGRlcF9hY2Nlc3NfcmVnIChzdHJ1Y3QgY3Vyc29yICpjLCB1bndfcmVnbnVtX3QgcmVnLCB1bndfd29yZF90ICp2YWxwLAotKwkJIGludCB3cml0ZSkKLSt7Ci0rICBkd2FyZl9sb2NfdCBsb2MgPSBEV0FSRl9OVUxMX0xPQzsKLSsgIHVuc2lnbmVkIGludCBtYXNrOwotKwotKyAgc3dpdGNoIChyZWcpCi0rICAgIHsKLSsgICAgY2FzZSBVTldfQUFSQ0g2NF9YMDoKLSsgICAgY2FzZSBVTldfQUFSQ0g2NF9YMToKLSsgICAgY2FzZSBVTldfQUFSQ0g2NF9YMjoKLSsgICAgY2FzZSBVTldfQUFSQ0g2NF9YMzoKLSsgICAgICBtYXNrID0gMSA8PCByZWc7Ci0rICAgICAgaWYgKHdyaXRlKQotKyAgICAgICAgewotKyAgICAgICAgICBjLT5kd2FyZi5laF9hcmdzW3JlZ10gPSAqdmFscDsKLSsgICAgICAgICAgYy0+ZHdhcmYuZWhfdmFsaWRfbWFzayB8PSBtYXNrOwotKyAgICAgICAgICByZXR1cm4gMDsKLSsgICAgICAgIH0KLSsgICAgICBlbHNlIGlmICgoYy0+ZHdhcmYuZWhfdmFsaWRfbWFzayAmIG1hc2spICE9IDApCi0rICAgICAgICB7Ci0rICAgICAgICAgICp2YWxwID0gYy0+ZHdhcmYuZWhfYXJnc1tyZWddOwotKyAgICAgICAgICByZXR1cm4gMDsKLSsgICAgICAgIH0KLSsgICAgICBlbHNlCi0rICAgICAgICBsb2MgPSBjLT5kd2FyZi5sb2NbcmVnXTsKLSsgICAgICBicmVhazsKLSsKLSsgICAgY2FzZSBVTldfQUFSQ0g2NF9YNDoKLSsgICAgY2FzZSBVTldfQUFSQ0g2NF9YNToKLSsgICAgY2FzZSBVTldfQUFSQ0g2NF9YNjoKLSsgICAgY2FzZSBVTldfQUFSQ0g2NF9YNzoKLSsgICAgY2FzZSBVTldfQUFSQ0g2NF9YODoKLSsgICAgY2FzZSBVTldfQUFSQ0g2NF9YOToKLSsgICAgY2FzZSBVTldfQUFSQ0g2NF9YMTA6Ci0rICAgIGNhc2UgVU5XX0FBUkNINjRfWDExOgotKyAgICBjYXNlIFVOV19BQVJDSDY0X1gxMjoKLSsgICAgY2FzZSBVTldfQUFSQ0g2NF9YMTM6Ci0rICAgIGNhc2UgVU5XX0FBUkNINjRfWDE0OgotKyAgICBjYXNlIFVOV19BQVJDSDY0X1gxNToKLSsgICAgY2FzZSBVTldfQUFSQ0g2NF9YMTY6Ci0rICAgIGNhc2UgVU5XX0FBUkNINjRfWDE3OgotKyAgICBjYXNlIFVOV19BQVJDSDY0X1gxODoKLSsgICAgY2FzZSBVTldfQUFSQ0g2NF9YMTk6Ci0rICAgIGNhc2UgVU5XX0FBUkNINjRfWDIwOgotKyAgICBjYXNlIFVOV19BQVJDSDY0X1gyMToKLSsgICAgY2FzZSBVTldfQUFSQ0g2NF9YMjI6Ci0rICAgIGNhc2UgVU5XX0FBUkNINjRfWDIzOgotKyAgICBjYXNlIFVOV19BQVJDSDY0X1gyNDoKLSsgICAgY2FzZSBVTldfQUFSQ0g2NF9YMjU6Ci0rICAgIGNhc2UgVU5XX0FBUkNINjRfWDI2OgotKyAgICBjYXNlIFVOV19BQVJDSDY0X1gyNzoKLSsgICAgY2FzZSBVTldfQUFSQ0g2NF9YMjg6Ci0rICAgIGNhc2UgVU5XX0FBUkNINjRfWDI5OgotKyAgICBjYXNlIFVOV19BQVJDSDY0X1gzMDoKLSsgICAgY2FzZSBVTldfQUFSQ0g2NF9QQzoKLSsgICAgY2FzZSBVTldfQUFSQ0g2NF9QU1RBVEU6Ci0rICAgICAgbG9jID0gYy0+ZHdhcmYubG9jW3JlZ107Ci0rICAgICAgYnJlYWs7Ci0rCi0rICAgIGNhc2UgVU5XX0FBUkNINjRfU1A6Ci0rICAgICAgaWYgKHdyaXRlKQotKyAgICAgICAgcmV0dXJuIC1VTldfRVJFQURPTkxZUkVHOwotKyAgICAgICp2YWxwID0gYy0+ZHdhcmYuY2ZhOwotKyAgICAgIHJldHVybiAwOwotKwotKyAgICBkZWZhdWx0OgotKyAgICAgIERlYnVnICgxLCAiYmFkIHJlZ2lzdGVyIG51bWJlciAldVxuIiwgcmVnKTsKLSsgICAgICByZXR1cm4gLVVOV19FQkFEUkVHOwotKyAgICB9Ci0rCi0rICBpZiAod3JpdGUpCi0rICAgIHJldHVybiBkd2FyZl9wdXQgKCZjLT5kd2FyZiwgbG9jLCAqdmFscCk7Ci0rICBlbHNlCi0rICAgIHJldHVybiBkd2FyZl9nZXQgKCZjLT5kd2FyZiwgbG9jLCB2YWxwKTsKLSt9Ci0rCi0rSElEREVOIGludAotK3RkZXBfYWNjZXNzX2ZwcmVnIChzdHJ1Y3QgY3Vyc29yICpjLCB1bndfcmVnbnVtX3QgcmVnLCB1bndfZnByZWdfdCAqdmFscCwKLSsJCSAgIGludCB3cml0ZSkKLSt7Ci0rICBEZWJ1ZyAoMSwgImJhZCByZWdpc3RlciBudW1iZXIgJXVcbiIsIHJlZyk7Ci0rICByZXR1cm4gLVVOV19FQkFEUkVHOwotK30KLS0tLSAvZGV2L251bGwKLSsrKyBiL3NyYy9hYXJjaDY0L0dyZXN1bWUuYwotQEAgLTAsMCArMSwxNzcgQEAKLSsvKiBsaWJ1bndpbmQgLSBhIHBsYXRmb3JtLWluZGVwZW5kZW50IHVud2luZCBsaWJyYXJ5Ci0rICAgQ29weXJpZ2h0IChDKSAyMDA4IENvZGVTb3VyY2VyeQotKyAgIENvcHlyaWdodCAoQykgMjAxMS0yMDEzIExpbmFybyBMaW1pdGVkCi0rICAgQ29weXJpZ2h0IChDKSAyMDEyIFRvbW1pIFJhbnRhbGEgPHR0LnJhbnRhbGFAZ21haWwuY29tPgotKwotK1RoaXMgZmlsZSBpcyBwYXJ0IG9mIGxpYnVud2luZC4KLSsKLStQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcKLSthIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUKLSsiU29mdHdhcmUiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nCi0rd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLAotK2Rpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0bwotK3Blcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0bwotK3RoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKLSsKLStUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZQotK2luY2x1ZGVkIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLgotKwotK1RIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELAotK0VYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRgotK01FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5ECi0rTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRQotK0xJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04KLStPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04KLStXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4gICovCi0rCi0rI2luY2x1ZGUgInVud2luZF9pLmgiCi0rI2luY2x1ZGUgIm9mZnNldHMuaCIKLSsKLSsjaWZuZGVmIFVOV19SRU1PVEVfT05MWQotKwotK0hJRERFTiBpbmxpbmUgaW50Ci0rYWFyY2g2NF9sb2NhbF9yZXN1bWUgKHVud19hZGRyX3NwYWNlX3QgYXMsIHVud19jdXJzb3JfdCAqY3Vyc29yLCB2b2lkICphcmcpCi0rewotKyNpZmRlZiBfX2xpbnV4X18KLSsgIHN0cnVjdCBjdXJzb3IgKmMgPSAoc3RydWN0IGN1cnNvciAqKSBjdXJzb3I7Ci0rICB1bndfdGRlcF9jb250ZXh0X3QgKnVjID0gYy0+ZHdhcmYuYXNfYXJnOwotKwotKyAgaWYgKGMtPnNpZ2NvbnRleHRfZm9ybWF0ID09IEFBUkNINjRfU0NGX05PTkUpCi0rICAgIHsKLSsgICAgICAvKiBTaW5jZSB0aGVyZSBhcmUgbm8gc2lnbmFscyBpbnZvbHZlZCBoZXJlIHdlIHJlc3RvcmUgdGhlIG5vbiBzY3JhdGNoCi0rCSByZWdpc3RlcnMgb25seS4gICovCi0rICAgICAgdW5zaWduZWQgbG9uZyByZWdzWzExXTsKLSsgICAgICByZWdzWzBdID0gdWMtPnVjX21jb250ZXh0LnJlZ3NbMTldOwotKyAgICAgIHJlZ3NbMV0gPSB1Yy0+dWNfbWNvbnRleHQucmVnc1syMF07Ci0rICAgICAgcmVnc1syXSA9IHVjLT51Y19tY29udGV4dC5yZWdzWzIxXTsKLSsgICAgICByZWdzWzNdID0gdWMtPnVjX21jb250ZXh0LnJlZ3NbMjJdOwotKyAgICAgIHJlZ3NbNF0gPSB1Yy0+dWNfbWNvbnRleHQucmVnc1syM107Ci0rICAgICAgcmVnc1s1XSA9IHVjLT51Y19tY29udGV4dC5yZWdzWzI0XTsKLSsgICAgICByZWdzWzZdID0gdWMtPnVjX21jb250ZXh0LnJlZ3NbMjVdOwotKyAgICAgIHJlZ3NbN10gPSB1Yy0+dWNfbWNvbnRleHQucmVnc1syNl07Ci0rICAgICAgcmVnc1s4XSA9IHVjLT51Y19tY29udGV4dC5yZWdzWzI3XTsKLSsgICAgICByZWdzWzldID0gdWMtPnVjX21jb250ZXh0LnJlZ3NbMjhdOwotKyAgICAgIHJlZ3NbMTBdID0gdWMtPnVjX21jb250ZXh0LnJlZ3NbMzBdOyAvKiBMUiAqLwotKyAgICAgIHVuc2lnbmVkIGxvbmcgc3AgPSB1Yy0+dWNfbWNvbnRleHQuc3A7Ci0rCi0rICAgICAgc3RydWN0IHJlZ3Nfb3ZlcmxheSB7Ci0rICAgICAgICBjaGFyIHhbc2l6ZW9mKHJlZ3MpXTsKLSsgICAgICB9OwotKwotKyAgICAgIGFzbSB2b2xhdGlsZSAoCi0rICAgICAgICAibGRwIHgxOSwgeDIwLCBbJTBdXG4iCi0rICAgICAgICAibGRwIHgyMSwgeDIyLCBbJTAsMTZdXG4iCi0rICAgICAgICAibGRwIHgyMywgeDI0LCBbJTAsMzJdXG4iCi0rICAgICAgICAibGRwIHgyNSwgeDI2LCBbJTAsNDhdXG4iCi0rICAgICAgICAibGRwIHgyNywgeDI4LCBbJTAsNjRdXG4iCi0rICAgICAgICAibGRyIHgzMCwgWyUwLDgwXVxuIgotKyAgICAgICAgIm1vdiBzcCwgJTFcbiIKLSsgICAgICAgICJyZXQgXG4iCi0rICAgICAgICA6Ci0rICAgICAgICA6ICJyIiAocmVncyksCi0rICAgICAgICAgICJyIiAoc3ApLAotKyAgICAgICAgICAibSIgKCooc3RydWN0IHJlZ3Nfb3ZlcmxheSAqKXJlZ3MpCi0rICAgICAgKTsKLSsgICAgfQotKyAgZWxzZQotKyAgICB7Ci0rICAgICAgc3RydWN0IHNpZ2NvbnRleHQgKnNjID0gKHN0cnVjdCBzaWdjb250ZXh0ICopIGMtPnNpZ2NvbnRleHRfYWRkcjsKLSsKLSsgICAgICBpZiAoYy0+ZHdhcmYuZWhfdmFsaWRfbWFzayAmIDB4MSkgc2MtPnJlZ3NbMF0gPSBjLT5kd2FyZi5laF9hcmdzWzBdOwotKyAgICAgIGlmIChjLT5kd2FyZi5laF92YWxpZF9tYXNrICYgMHgyKSBzYy0+cmVnc1sxXSA9IGMtPmR3YXJmLmVoX2FyZ3NbMV07Ci0rICAgICAgaWYgKGMtPmR3YXJmLmVoX3ZhbGlkX21hc2sgJiAweDQpIHNjLT5yZWdzWzJdID0gYy0+ZHdhcmYuZWhfYXJnc1syXTsKLSsgICAgICBpZiAoYy0+ZHdhcmYuZWhfdmFsaWRfbWFzayAmIDB4OCkgc2MtPnJlZ3NbM10gPSBjLT5kd2FyZi5laF9hcmdzWzNdOwotKwotKyAgICAgIHNjLT5yZWdzWzRdID0gdWMtPnVjX21jb250ZXh0LnJlZ3NbNF07Ci0rICAgICAgc2MtPnJlZ3NbNV0gPSB1Yy0+dWNfbWNvbnRleHQucmVnc1s1XTsKLSsgICAgICBzYy0+cmVnc1s2XSA9IHVjLT51Y19tY29udGV4dC5yZWdzWzZdOwotKyAgICAgIHNjLT5yZWdzWzddID0gdWMtPnVjX21jb250ZXh0LnJlZ3NbN107Ci0rICAgICAgc2MtPnJlZ3NbOF0gPSB1Yy0+dWNfbWNvbnRleHQucmVnc1s4XTsKLSsgICAgICBzYy0+cmVnc1s5XSA9IHVjLT51Y19tY29udGV4dC5yZWdzWzldOwotKyAgICAgIHNjLT5yZWdzWzEwXSA9IHVjLT51Y19tY29udGV4dC5yZWdzWzEwXTsKLSsgICAgICBzYy0+cmVnc1sxMV0gPSB1Yy0+dWNfbWNvbnRleHQucmVnc1sxMV07Ci0rICAgICAgc2MtPnJlZ3NbMTJdID0gdWMtPnVjX21jb250ZXh0LnJlZ3NbMTJdOwotKyAgICAgIHNjLT5yZWdzWzEzXSA9IHVjLT51Y19tY29udGV4dC5yZWdzWzEzXTsKLSsgICAgICBzYy0+cmVnc1sxNF0gPSB1Yy0+dWNfbWNvbnRleHQucmVnc1sxNF07Ci0rICAgICAgc2MtPnJlZ3NbMTVdID0gdWMtPnVjX21jb250ZXh0LnJlZ3NbMTVdOwotKyAgICAgIHNjLT5yZWdzWzE2XSA9IHVjLT51Y19tY29udGV4dC5yZWdzWzE2XTsKLSsgICAgICBzYy0+cmVnc1sxN10gPSB1Yy0+dWNfbWNvbnRleHQucmVnc1sxN107Ci0rICAgICAgc2MtPnJlZ3NbMThdID0gdWMtPnVjX21jb250ZXh0LnJlZ3NbMThdOwotKyAgICAgIHNjLT5yZWdzWzE5XSA9IHVjLT51Y19tY29udGV4dC5yZWdzWzE5XTsKLSsgICAgICBzYy0+cmVnc1syMF0gPSB1Yy0+dWNfbWNvbnRleHQucmVnc1syMF07Ci0rICAgICAgc2MtPnJlZ3NbMjFdID0gdWMtPnVjX21jb250ZXh0LnJlZ3NbMjFdOwotKyAgICAgIHNjLT5yZWdzWzIyXSA9IHVjLT51Y19tY29udGV4dC5yZWdzWzIyXTsKLSsgICAgICBzYy0+cmVnc1syM10gPSB1Yy0+dWNfbWNvbnRleHQucmVnc1syM107Ci0rICAgICAgc2MtPnJlZ3NbMjRdID0gdWMtPnVjX21jb250ZXh0LnJlZ3NbMjRdOwotKyAgICAgIHNjLT5yZWdzWzI1XSA9IHVjLT51Y19tY29udGV4dC5yZWdzWzI1XTsKLSsgICAgICBzYy0+cmVnc1syNl0gPSB1Yy0+dWNfbWNvbnRleHQucmVnc1syNl07Ci0rICAgICAgc2MtPnJlZ3NbMjddID0gdWMtPnVjX21jb250ZXh0LnJlZ3NbMjddOwotKyAgICAgIHNjLT5yZWdzWzI4XSA9IHVjLT51Y19tY29udGV4dC5yZWdzWzI4XTsKLSsgICAgICBzYy0+cmVnc1syOV0gPSB1Yy0+dWNfbWNvbnRleHQucmVnc1syOV07Ci0rICAgICAgc2MtPnJlZ3NbMzBdID0gdWMtPnVjX21jb250ZXh0LnJlZ3NbMzBdOwotKyAgICAgIHNjLT5zcCA9IHVjLT51Y19tY29udGV4dC5zcDsKLSsgICAgICBzYy0+cGMgPSB1Yy0+dWNfbWNvbnRleHQucGM7Ci0rICAgICAgc2MtPnBzdGF0ZSA9IHVjLT51Y19tY29udGV4dC5wc3RhdGU7Ci0rCi0rICAgICAgYXNtIHZvbGF0aWxlICgKLSsgICAgICAgICJtb3Ygc3AsICUwXG4iCi0rICAgICAgICAicmV0ICUxXG4iCi0rICAgICAgICA6IDogInIiIChjLT5zaWdjb250ZXh0X3NwKSwgInIiIChjLT5zaWdjb250ZXh0X3BjKQotKyAgICAgICk7Ci0rICAgfQotKyAgdW5yZWFjaGFibGUoKTsKLSsjZWxzZQotKyAgcHJpbnRmICgiJXM6IGltcGxlbWVudCBtZVxuIiwgX19GVU5DVElPTl9fKTsKLSsjZW5kaWYKLSsgIHJldHVybiAtVU5XX0VJTlZBTDsKLSt9Ci0rCi0rI2VuZGlmIC8qICFVTldfUkVNT1RFX09OTFkgKi8KLSsKLStzdGF0aWMgaW5saW5lIHZvaWQKLStlc3RhYmxpc2hfbWFjaGluZV9zdGF0ZSAoc3RydWN0IGN1cnNvciAqYykKLSt7Ci0rICB1bndfYWRkcl9zcGFjZV90IGFzID0gYy0+ZHdhcmYuYXM7Ci0rICB2b2lkICphcmcgPSBjLT5kd2FyZi5hc19hcmc7Ci0rICB1bndfZnByZWdfdCBmcHZhbDsKLSsgIHVud193b3JkX3QgdmFsOwotKyAgaW50IHJlZzsKLSsKLSsgIERlYnVnICg4LCAiY29weWluZyBvdXQgY3Vyc29yIHN0YXRlXG4iKTsKLSsKLSsgIGZvciAocmVnID0gMDsgcmVnIDw9IFVOV19BQVJDSDY0X1BTVEFURTsgKytyZWcpCi0rICAgIHsKLSsgICAgICBEZWJ1ZyAoMTYsICJjb3B5aW5nICVzICVkXG4iLCB1bndfcmVnbmFtZSAocmVnKSwgcmVnKTsKLSsgICAgICBpZiAodW53X2lzX2ZwcmVnIChyZWcpKQotKwl7Ci0rCSAgaWYgKHRkZXBfYWNjZXNzX2ZwcmVnIChjLCByZWcsICZmcHZhbCwgMCkgPj0gMCkKLSsJICAgIGFzLT5hY2MuYWNjZXNzX2ZwcmVnIChhcywgcmVnLCAmZnB2YWwsIDEsIGFyZyk7Ci0rCX0KLSsgICAgICBlbHNlCi0rCXsKLSsJICBpZiAodGRlcF9hY2Nlc3NfcmVnIChjLCByZWcsICZ2YWwsIDApID49IDApCi0rCSAgICBhcy0+YWNjLmFjY2Vzc19yZWcgKGFzLCByZWcsICZ2YWwsIDEsIGFyZyk7Ci0rCX0KLSsgICAgfQotK30KLSsKLStQUk9URUNURUQgaW50Ci0rdW53X3Jlc3VtZSAodW53X2N1cnNvcl90ICpjdXJzb3IpCi0rewotKyAgc3RydWN0IGN1cnNvciAqYyA9IChzdHJ1Y3QgY3Vyc29yICopIGN1cnNvcjsKLSsKLSsgIERlYnVnICgxLCAiKGN1cnNvcj0lcClcbiIsIGMpOwotKwotKyAgaWYgKCFjLT5kd2FyZi5pcCkKLSsgICAgewotKyAgICAgIC8qIFRoaXMgY2FuIGhhcHBlbiBlYXNpbHkgd2hlbiB0aGUgZnJhbWUtY2hhaW4gZ2V0cyB0cnVuY2F0ZWQKLSsJIGR1ZSB0byBiYWQgb3IgbWlzc2luZyB1bndpbmQtaW5mby4gICovCi0rICAgICAgRGVidWcgKDEsICJyZWZ1c2luZyB0byByZXN1bWUgZXhlY3V0aW9uIGF0IGFkZHJlc3MgMFxuIik7Ci0rICAgICAgcmV0dXJuIC1VTldfRUlOVkFMOwotKyAgICB9Ci0rCi0rICBlc3RhYmxpc2hfbWFjaGluZV9zdGF0ZSAoYyk7Ci0rCi0rICByZXR1cm4gKCpjLT5kd2FyZi5hcy0+YWNjLnJlc3VtZSkgKGMtPmR3YXJmLmFzLCAodW53X2N1cnNvcl90ICopIGMsCi0rCQkJCSAgICAgYy0+ZHdhcmYuYXNfYXJnKTsKLSt9Ci0tLS0gL2Rldi9udWxsCi0rKysgYi9zcmMvYWFyY2g2NC9Hc3RlcC5jCi1AQCAtMCwwICsxLDEyOSBAQAotKy8qIGxpYnVud2luZCAtIGEgcGxhdGZvcm0taW5kZXBlbmRlbnQgdW53aW5kIGxpYnJhcnkKLSsgICBDb3B5cmlnaHQgKEMpIDIwMDggQ29kZVNvdXJjZXJ5Ci0rICAgQ29weXJpZ2h0IChDKSAyMDExLTIwMTMgTGluYXJvIExpbWl0ZWQKLSsgICBDb3B5cmlnaHQgKEMpIDIwMTIgVG9tbWkgUmFudGFsYSA8dHQucmFudGFsYUBnbWFpbC5jb20+Ci0rCi0rVGhpcyBmaWxlIGlzIHBhcnQgb2YgbGlidW53aW5kLgotKwotK1Blcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZwotK2EgY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZQotKyJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcKLSt3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsCi0rZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvCi0rcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvCi0rdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgotKwotK1RoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlCi0raW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuCi0rCi0rVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsCi0rRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GCi0rTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQKLStOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFCi0rTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTgotK09GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTgotK1dJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLiAgKi8KLSsKLSsjaW5jbHVkZSAidW53aW5kX2kuaCIKLSsjaW5jbHVkZSAib2Zmc2V0cy5oIgotKwotK1BST1RFQ1RFRCBpbnQKLSt1bndfaGFuZGxlX3NpZ25hbF9mcmFtZSAodW53X2N1cnNvcl90ICpjdXJzb3IpCi0rewotKyAgc3RydWN0IGN1cnNvciAqYyA9IChzdHJ1Y3QgY3Vyc29yICopIGN1cnNvcjsKLSsgIGludCByZXQ7Ci0rICB1bndfd29yZF90IHNjX2FkZHIsIHNwLCBzcF9hZGRyID0gYy0+ZHdhcmYuY2ZhOwotKyAgc3RydWN0IGR3YXJmX2xvYyBzcF9sb2MgPSBEV0FSRl9MT0MgKHNwX2FkZHIsIDApOwotKwotKyAgaWYgKChyZXQgPSBkd2FyZl9nZXQgKCZjLT5kd2FyZiwgc3BfbG9jLCAmc3ApKSA8IDApCi0rICAgIHJldHVybiAtVU5XX0VVTlNQRUM7Ci0rCi0rICByZXQgPSB1bndfaXNfc2lnbmFsX2ZyYW1lIChjdXJzb3IpOwotKyAgRGVidWcoMSwgInVud19pc19zaWduYWxfZnJhbWUoKT0lZFxuIiwgcmV0KTsKLSsKLSsgIC8qIFNhdmUgdGhlIFNQIGFuZCBQQyB0byBiZSBhYmxlIHRvIHJldHVybiBleGVjdXRpb24gYXQgdGhpcyBwb2ludAotKyAgICAgbGF0ZXIgaW4gdGltZSAodW53X3Jlc3VtZSkuICAqLwotKyAgYy0+c2lnY29udGV4dF9zcCA9IGMtPmR3YXJmLmNmYTsKLSsgIGMtPnNpZ2NvbnRleHRfcGMgPSBjLT5kd2FyZi5pcDsKLSsKLSsgIGlmIChyZXQpCi0rICAgIHsKLSsgICAgICBjLT5zaWdjb250ZXh0X2Zvcm1hdCA9IEFBUkNINjRfU0NGX0xJTlVYX1JUX1NJR0ZSQU1FOwotKyAgICAgIHNjX2FkZHIgPSBzcF9hZGRyICsgc2l6ZW9mIChzaWdpbmZvX3QpICsgTElOVVhfVUNfTUNPTlRFWFRfT0ZGOwotKyAgICB9Ci0rICBlbHNlCi0rICAgIHJldHVybiAtVU5XX0VVTlNQRUM7Ci0rCi0rICBjLT5zaWdjb250ZXh0X2FkZHIgPSBzY19hZGRyOwotKwotKyAgLyogVXBkYXRlIHRoZSBkd2FyZiBjdXJzb3IuCi0rICAgICBTZXQgdGhlIGxvY2F0aW9uIG9mIHRoZSByZWdpc3RlcnMgdG8gdGhlIGNvcnJlc3BvbmRpbmcgYWRkcmVzc2VzIG9mIHRoZQotKyAgICAgdWNfbWNvbnRleHQgLyBzaWdjb250ZXh0IHN0cnVjdHVyZSBjb250ZW50cy4gICovCi0rICBjLT5kd2FyZi5sb2NbVU5XX0FBUkNINjRfWDBdICA9IERXQVJGX0xPQyAoc2NfYWRkciArIExJTlVYX1NDX1gwX09GRiwgMCk7Ci0rICBjLT5kd2FyZi5sb2NbVU5XX0FBUkNINjRfWDFdICA9IERXQVJGX0xPQyAoc2NfYWRkciArIExJTlVYX1NDX1gxX09GRiwgMCk7Ci0rICBjLT5kd2FyZi5sb2NbVU5XX0FBUkNINjRfWDJdICA9IERXQVJGX0xPQyAoc2NfYWRkciArIExJTlVYX1NDX1gyX09GRiwgMCk7Ci0rICBjLT5kd2FyZi5sb2NbVU5XX0FBUkNINjRfWDNdICA9IERXQVJGX0xPQyAoc2NfYWRkciArIExJTlVYX1NDX1gzX09GRiwgMCk7Ci0rICBjLT5kd2FyZi5sb2NbVU5XX0FBUkNINjRfWDRdICA9IERXQVJGX0xPQyAoc2NfYWRkciArIExJTlVYX1NDX1g0X09GRiwgMCk7Ci0rICBjLT5kd2FyZi5sb2NbVU5XX0FBUkNINjRfWDVdICA9IERXQVJGX0xPQyAoc2NfYWRkciArIExJTlVYX1NDX1g1X09GRiwgMCk7Ci0rICBjLT5kd2FyZi5sb2NbVU5XX0FBUkNINjRfWDZdICA9IERXQVJGX0xPQyAoc2NfYWRkciArIExJTlVYX1NDX1g2X09GRiwgMCk7Ci0rICBjLT5kd2FyZi5sb2NbVU5XX0FBUkNINjRfWDddICA9IERXQVJGX0xPQyAoc2NfYWRkciArIExJTlVYX1NDX1g3X09GRiwgMCk7Ci0rICBjLT5kd2FyZi5sb2NbVU5XX0FBUkNINjRfWDhdICA9IERXQVJGX0xPQyAoc2NfYWRkciArIExJTlVYX1NDX1g4X09GRiwgMCk7Ci0rICBjLT5kd2FyZi5sb2NbVU5XX0FBUkNINjRfWDldICA9IERXQVJGX0xPQyAoc2NfYWRkciArIExJTlVYX1NDX1g5X09GRiwgMCk7Ci0rICBjLT5kd2FyZi5sb2NbVU5XX0FBUkNINjRfWDEwXSA9IERXQVJGX0xPQyAoc2NfYWRkciArIExJTlVYX1NDX1gxMF9PRkYsIDApOwotKyAgYy0+ZHdhcmYubG9jW1VOV19BQVJDSDY0X1gxMV0gPSBEV0FSRl9MT0MgKHNjX2FkZHIgKyBMSU5VWF9TQ19YMTFfT0ZGLCAwKTsKLSsgIGMtPmR3YXJmLmxvY1tVTldfQUFSQ0g2NF9YMTJdID0gRFdBUkZfTE9DIChzY19hZGRyICsgTElOVVhfU0NfWDEyX09GRiwgMCk7Ci0rICBjLT5kd2FyZi5sb2NbVU5XX0FBUkNINjRfWDEzXSA9IERXQVJGX0xPQyAoc2NfYWRkciArIExJTlVYX1NDX1gxM19PRkYsIDApOwotKyAgYy0+ZHdhcmYubG9jW1VOV19BQVJDSDY0X1gxNF0gPSBEV0FSRl9MT0MgKHNjX2FkZHIgKyBMSU5VWF9TQ19YMTRfT0ZGLCAwKTsKLSsgIGMtPmR3YXJmLmxvY1tVTldfQUFSQ0g2NF9YMTVdID0gRFdBUkZfTE9DIChzY19hZGRyICsgTElOVVhfU0NfWDE1X09GRiwgMCk7Ci0rICBjLT5kd2FyZi5sb2NbVU5XX0FBUkNINjRfWDE2XSA9IERXQVJGX0xPQyAoc2NfYWRkciArIExJTlVYX1NDX1gxNl9PRkYsIDApOwotKyAgYy0+ZHdhcmYubG9jW1VOV19BQVJDSDY0X1gxN10gPSBEV0FSRl9MT0MgKHNjX2FkZHIgKyBMSU5VWF9TQ19YMTdfT0ZGLCAwKTsKLSsgIGMtPmR3YXJmLmxvY1tVTldfQUFSQ0g2NF9YMThdID0gRFdBUkZfTE9DIChzY19hZGRyICsgTElOVVhfU0NfWDE4X09GRiwgMCk7Ci0rICBjLT5kd2FyZi5sb2NbVU5XX0FBUkNINjRfWDE5XSA9IERXQVJGX0xPQyAoc2NfYWRkciArIExJTlVYX1NDX1gxOV9PRkYsIDApOwotKyAgYy0+ZHdhcmYubG9jW1VOV19BQVJDSDY0X1gyMF0gPSBEV0FSRl9MT0MgKHNjX2FkZHIgKyBMSU5VWF9TQ19YMjBfT0ZGLCAwKTsKLSsgIGMtPmR3YXJmLmxvY1tVTldfQUFSQ0g2NF9YMjFdID0gRFdBUkZfTE9DIChzY19hZGRyICsgTElOVVhfU0NfWDIxX09GRiwgMCk7Ci0rICBjLT5kd2FyZi5sb2NbVU5XX0FBUkNINjRfWDIyXSA9IERXQVJGX0xPQyAoc2NfYWRkciArIExJTlVYX1NDX1gyMl9PRkYsIDApOwotKyAgYy0+ZHdhcmYubG9jW1VOV19BQVJDSDY0X1gyM10gPSBEV0FSRl9MT0MgKHNjX2FkZHIgKyBMSU5VWF9TQ19YMjNfT0ZGLCAwKTsKLSsgIGMtPmR3YXJmLmxvY1tVTldfQUFSQ0g2NF9YMjRdID0gRFdBUkZfTE9DIChzY19hZGRyICsgTElOVVhfU0NfWDI0X09GRiwgMCk7Ci0rICBjLT5kd2FyZi5sb2NbVU5XX0FBUkNINjRfWDI1XSA9IERXQVJGX0xPQyAoc2NfYWRkciArIExJTlVYX1NDX1gyNV9PRkYsIDApOwotKyAgYy0+ZHdhcmYubG9jW1VOV19BQVJDSDY0X1gyNl0gPSBEV0FSRl9MT0MgKHNjX2FkZHIgKyBMSU5VWF9TQ19YMjZfT0ZGLCAwKTsKLSsgIGMtPmR3YXJmLmxvY1tVTldfQUFSQ0g2NF9YMjddID0gRFdBUkZfTE9DIChzY19hZGRyICsgTElOVVhfU0NfWDI3X09GRiwgMCk7Ci0rICBjLT5kd2FyZi5sb2NbVU5XX0FBUkNINjRfWDI4XSA9IERXQVJGX0xPQyAoc2NfYWRkciArIExJTlVYX1NDX1gyOF9PRkYsIDApOwotKyAgYy0+ZHdhcmYubG9jW1VOV19BQVJDSDY0X1gyOV0gPSBEV0FSRl9MT0MgKHNjX2FkZHIgKyBMSU5VWF9TQ19YMjlfT0ZGLCAwKTsKLSsgIGMtPmR3YXJmLmxvY1tVTldfQUFSQ0g2NF9YMzBdID0gRFdBUkZfTE9DIChzY19hZGRyICsgTElOVVhfU0NfWDMwX09GRiwgMCk7Ci0rICBjLT5kd2FyZi5sb2NbVU5XX0FBUkNINjRfU1BdICA9IERXQVJGX0xPQyAoc2NfYWRkciArIExJTlVYX1NDX1NQX09GRiwgMCk7Ci0rICBjLT5kd2FyZi5sb2NbVU5XX0FBUkNINjRfUENdICA9IERXQVJGX0xPQyAoc2NfYWRkciArIExJTlVYX1NDX1BDX09GRiwgMCk7Ci0rICBjLT5kd2FyZi5sb2NbVU5XX0FBUkNINjRfUFNUQVRFXSAgPSBEV0FSRl9MT0MgKHNjX2FkZHIgKyBMSU5VWF9TQ19QU1RBVEVfT0ZGLCAwKTsKLSsKLSsgIC8qIFNldCBTUC9DRkEgYW5kIFBDL0lQLiAgKi8KLSsgIGR3YXJmX2dldCAoJmMtPmR3YXJmLCBjLT5kd2FyZi5sb2NbVU5XX0FBUkNINjRfU1BdLCAmYy0+ZHdhcmYuY2ZhKTsKLSsgIGR3YXJmX2dldCAoJmMtPmR3YXJmLCBjLT5kd2FyZi5sb2NbVU5XX0FBUkNINjRfUENdLCAmYy0+ZHdhcmYuaXApOwotKwotKyAgYy0+ZHdhcmYucGlfdmFsaWQgPSAwOwotKwotKyAgcmV0dXJuIDE7Ci0rfQotKwotK1BST1RFQ1RFRCBpbnQKLSt1bndfc3RlcCAodW53X2N1cnNvcl90ICpjdXJzb3IpCi0rewotKyAgc3RydWN0IGN1cnNvciAqYyA9IChzdHJ1Y3QgY3Vyc29yICopIGN1cnNvcjsKLSsgIGludCByZXQ7Ci0rCi0rICBEZWJ1ZyAoMSwgIihjdXJzb3I9JXAsIGlwPTB4JTAxNmx4LCBjZmE9MHglMDE2bHgpKVxuIiwKLSsJIGMsIGMtPmR3YXJmLmlwLCBjLT5kd2FyZi5jZmEpOwotKwotKyAgLyogQ2hlY2sgaWYgdGhpcyBpcyBhIHNpZ25hbCBmcmFtZS4gKi8KLSsgIGlmICh1bndfaXNfc2lnbmFsX2ZyYW1lIChjdXJzb3IpKQotKyAgICByZXR1cm4gdW53X2hhbmRsZV9zaWduYWxfZnJhbWUgKGN1cnNvcik7Ci0rCi0rICByZXQgPSBkd2FyZl9zdGVwICgmYy0+ZHdhcmYpOwotKyAgRGVidWcoMSwgImR3YXJmX3N0ZXAoKT0lZFxuIiwgcmV0KTsKLSsKLSsgIGlmICh1bmxpa2VseSAocmV0ID09IC1VTldfRVNUT1BVTldJTkQpKQotKyAgICByZXR1cm4gcmV0OwotKwotKyAgaWYgKHVubGlrZWx5IChyZXQgPCAwKSkKLSsgICAgcmV0dXJuIDA7Ci0rCi0rICByZXR1cm4gKGMtPmR3YXJmLmlwID09IDApID8gMCA6IDE7Ci0rfQotLS0tIC9kZXYvbnVsbAotKysrIGIvc3JjL2FhcmNoNjQvTGNyZWF0ZV9hZGRyX3NwYWNlLmMKLUBAIC0wLDAgKzEsNSBAQAotKyNkZWZpbmUgVU5XX0xPQ0FMX09OTFkKLSsjaW5jbHVkZSA8bGlidW53aW5kLmg+Ci0rI2lmIGRlZmluZWQoVU5XX0xPQ0FMX09OTFkpICYmICFkZWZpbmVkKFVOV19SRU1PVEVfT05MWSkKLSsjaW5jbHVkZSAiR2NyZWF0ZV9hZGRyX3NwYWNlLmMiCi0rI2VuZGlmCi0tLS0gL2Rldi9udWxsCi0rKysgYi9zcmMvYWFyY2g2NC9MZ2V0X3Byb2NfaW5mby5jCi1AQCAtMCwwICsxLDUgQEAKLSsjZGVmaW5lIFVOV19MT0NBTF9PTkxZCi0rI2luY2x1ZGUgPGxpYnVud2luZC5oPgotKyNpZiBkZWZpbmVkKFVOV19MT0NBTF9PTkxZKSAmJiAhZGVmaW5lZChVTldfUkVNT1RFX09OTFkpCi0rI2luY2x1ZGUgIkdnZXRfcHJvY19pbmZvLmMiCi0rI2VuZGlmCi0tLS0gL2Rldi9udWxsCi0rKysgYi9zcmMvYWFyY2g2NC9MZ2V0X3NhdmVfbG9jLmMKLUBAIC0wLDAgKzEsNSBAQAotKyNkZWZpbmUgVU5XX0xPQ0FMX09OTFkKLSsjaW5jbHVkZSA8bGlidW53aW5kLmg+Ci0rI2lmIGRlZmluZWQoVU5XX0xPQ0FMX09OTFkpICYmICFkZWZpbmVkKFVOV19SRU1PVEVfT05MWSkKLSsjaW5jbHVkZSAiR2dldF9zYXZlX2xvYy5jIgotKyNlbmRpZgotLS0tIC9kZXYvbnVsbAotKysrIGIvc3JjL2FhcmNoNjQvTGdsb2JhbC5jCi1AQCAtMCwwICsxLDUgQEAKLSsjZGVmaW5lIFVOV19MT0NBTF9PTkxZCi0rI2luY2x1ZGUgPGxpYnVud2luZC5oPgotKyNpZiBkZWZpbmVkKFVOV19MT0NBTF9PTkxZKSAmJiAhZGVmaW5lZChVTldfUkVNT1RFX09OTFkpCi0rI2luY2x1ZGUgIkdnbG9iYWwuYyIKLSsjZW5kaWYKLS0tLSAvZGV2L251bGwKLSsrKyBiL3NyYy9hYXJjaDY0L0xpbml0LmMKLUBAIC0wLDAgKzEsNSBAQAotKyNkZWZpbmUgVU5XX0xPQ0FMX09OTFkKLSsjaW5jbHVkZSA8bGlidW53aW5kLmg+Ci0rI2lmIGRlZmluZWQoVU5XX0xPQ0FMX09OTFkpICYmICFkZWZpbmVkKFVOV19SRU1PVEVfT05MWSkKLSsjaW5jbHVkZSAiR2luaXQuYyIKLSsjZW5kaWYKLS0tLSAvZGV2L251bGwKLSsrKyBiL3NyYy9hYXJjaDY0L0xpbml0X2xvY2FsLmMKLUBAIC0wLDAgKzEsNSBAQAotKyNkZWZpbmUgVU5XX0xPQ0FMX09OTFkKLSsjaW5jbHVkZSA8bGlidW53aW5kLmg+Ci0rI2lmIGRlZmluZWQoVU5XX0xPQ0FMX09OTFkpICYmICFkZWZpbmVkKFVOV19SRU1PVEVfT05MWSkKLSsjaW5jbHVkZSAiR2luaXRfbG9jYWwuYyIKLSsjZW5kaWYKLS0tLSAvZGV2L251bGwKLSsrKyBiL3NyYy9hYXJjaDY0L0xpbml0X3JlbW90ZS5jCi1AQCAtMCwwICsxLDUgQEAKLSsjZGVmaW5lIFVOV19MT0NBTF9PTkxZCi0rI2luY2x1ZGUgPGxpYnVud2luZC5oPgotKyNpZiBkZWZpbmVkKFVOV19MT0NBTF9PTkxZKSAmJiAhZGVmaW5lZChVTldfUkVNT1RFX09OTFkpCi0rI2luY2x1ZGUgIkdpbml0X3JlbW90ZS5jIgotKyNlbmRpZgotLS0tIC9kZXYvbnVsbAotKysrIGIvc3JjL2FhcmNoNjQvTGlzX3NpZ25hbF9mcmFtZS5jCi1AQCAtMCwwICsxLDUgQEAKLSsjZGVmaW5lIFVOV19MT0NBTF9PTkxZCi0rI2luY2x1ZGUgPGxpYnVud2luZC5oPgotKyNpZiBkZWZpbmVkKFVOV19MT0NBTF9PTkxZKSAmJiAhZGVmaW5lZChVTldfUkVNT1RFX09OTFkpCi0rI2luY2x1ZGUgIkdpc19zaWduYWxfZnJhbWUuYyIKLSsjZW5kaWYKLS0tLSAvZGV2L251bGwKLSsrKyBiL3NyYy9hYXJjaDY0L0xyZWdzLmMKLUBAIC0wLDAgKzEsNSBAQAotKyNkZWZpbmUgVU5XX0xPQ0FMX09OTFkKLSsjaW5jbHVkZSA8bGlidW53aW5kLmg+Ci0rI2lmIGRlZmluZWQoVU5XX0xPQ0FMX09OTFkpICYmICFkZWZpbmVkKFVOV19SRU1PVEVfT05MWSkKLSsjaW5jbHVkZSAiR3JlZ3MuYyIKLSsjZW5kaWYKLS0tLSAvZGV2L251bGwKLSsrKyBiL3NyYy9hYXJjaDY0L0xyZXN1bWUuYwotQEAgLTAsMCArMSw1IEBACi0rI2RlZmluZSBVTldfTE9DQUxfT05MWQotKyNpbmNsdWRlIDxsaWJ1bndpbmQuaD4KLSsjaWYgZGVmaW5lZChVTldfTE9DQUxfT05MWSkgJiYgIWRlZmluZWQoVU5XX1JFTU9URV9PTkxZKQotKyNpbmNsdWRlICJHcmVzdW1lLmMiCi0rI2VuZGlmCi0tLS0gL2Rldi9udWxsCi0rKysgYi9zcmMvYWFyY2g2NC9Mc3RlcC5jCi1AQCAtMCwwICsxLDUgQEAKLSsjZGVmaW5lIFVOV19MT0NBTF9PTkxZCi0rI2luY2x1ZGUgPGxpYnVud2luZC5oPgotKyNpZiBkZWZpbmVkKFVOV19MT0NBTF9PTkxZKSAmJiAhZGVmaW5lZChVTldfUkVNT1RFX09OTFkpCi0rI2luY2x1ZGUgIkdzdGVwLmMiCi0rI2VuZGlmCi0tLS0gL2Rldi9udWxsCi0rKysgYi9zcmMvYWFyY2g2NC9nZW4tb2Zmc2V0cy5jCi1AQCAtMCwwICsxLDY4IEBACi0rI2luY2x1ZGUgPHN0ZGlvLmg+Ci0rI2luY2x1ZGUgPHN0ZGRlZi5oPgotKyNpbmNsdWRlIDx1Y29udGV4dC5oPgotKyNpbmNsdWRlIDxhc20vc2lnY29udGV4dC5oPgotKwotKyNkZWZpbmUgVUMoTixYKSBcCi0rICBwcmludGYgKCIjZGVmaW5lIExJTlVYX1VDXyIgTiAiX09GRlx0MHglWFxuIiwgb2Zmc2V0b2YgKHVjb250ZXh0X3QsIFgpKQotKwotKyNkZWZpbmUgU0MoTixYKSBcCi0rICBwcmludGYgKCIjZGVmaW5lIExJTlVYX1NDXyIgTiAiX09GRlx0MHglWFxuIiwgb2Zmc2V0b2YgKHN0cnVjdCBzaWdjb250ZXh0LCBYKSkKLSsKLStpbnQKLSttYWluICh2b2lkKQotK3sKLSsgIHByaW50ZiAoCi0rIi8qIExpbnV4LXNwZWNpZmljIGRlZmluaXRpb25zOiAqL1xuXG4iCi0rCi0rIi8qIERlZmluZSB2YXJpb3VzIHN0cnVjdHVyZSBvZmZzZXRzIHRvIHNpbXBsaWZ5IGNyb3NzLWNvbXBpbGF0aW9uLiAgKi9cblxuIgotKwotKyIvKiBPZmZzZXRzIGZvciBBQXJjaDY0IExpbnV4IFwidWNvbnRleHRfdFwiOiAgKi9cblxuIik7Ci0rCi0rICBVQyAoIkZMQUdTIiwgdWNfZmxhZ3MpOwotKyAgVUMgKCJMSU5LIiwgdWNfbGluayk7Ci0rICBVQyAoIlNUQUNLIiwgdWNfc3RhY2spOwotKyAgVUMgKCJNQ09OVEVYVCIsIHVjX21jb250ZXh0KTsKLSsgIFVDICgiU0lHTUFTSyIsIHVjX3NpZ21hc2spOwotKwotKyAgcHJpbnRmICgiXG4vKiBPZmZzZXRzIGZvciBBQXJjaDY0IExpbnV4IFwic3RydWN0IHNpZ2NvbnRleHRcIjogICovXG5cbiIpOwotKwotKyAgU0MgKCJSMCIsICByZWdzWzBdKTsKLSsgIFNDICgiUjEiLCAgcmVnc1sxXSk7Ci0rICBTQyAoIlIyIiwgIHJlZ3NbMl0pOwotKyAgU0MgKCJSMyIsICByZWdzWzNdKTsKLSsgIFNDICgiUjQiLCAgcmVnc1s0XSk7Ci0rICBTQyAoIlI1IiwgIHJlZ3NbNV0pOwotKyAgU0MgKCJSNiIsICByZWdzWzZdKTsKLSsgIFNDICgiUjciLCAgcmVnc1s3XSk7Ci0rICBTQyAoIlI4IiwgIHJlZ3NbOF0pOwotKyAgU0MgKCJSOSIsICByZWdzWzldKTsKLSsgIFNDICgiUjEwIiwgcmVnc1sxMF0pOwotKyAgU0MgKCJSMTEiLCByZWdzWzExXSk7Ci0rICBTQyAoIlIxMiIsIHJlZ3NbMTJdKTsKLSsgIFNDICgiUjEzIiwgcmVnc1sxM10pOwotKyAgU0MgKCJSMTQiLCByZWdzWzE0XSk7Ci0rICBTQyAoIlIxNSIsIHJlZ3NbMTVdKTsKLSsgIFNDICgiUjE2IiwgcmVnc1sxNl0pOwotKyAgU0MgKCJSMTciLCByZWdzWzE3XSk7Ci0rICBTQyAoIlIxOCIsIHJlZ3NbMThdKTsKLSsgIFNDICgiUjE5IiwgcmVnc1sxOV0pOwotKyAgU0MgKCJSMjAiLCByZWdzWzIwXSk7Ci0rICBTQyAoIlIyMSIsIHJlZ3NbMjFdKTsKLSsgIFNDICgiUjIyIiwgcmVnc1syMl0pOwotKyAgU0MgKCJSMjMiLCByZWdzWzIzXSk7Ci0rICBTQyAoIlIyNCIsIHJlZ3NbMjRdKTsKLSsgIFNDICgiUjI1IiwgcmVnc1syNV0pOwotKyAgU0MgKCJSMjYiLCByZWdzWzI2XSk7Ci0rICBTQyAoIlIyNyIsIHJlZ3NbMjddKTsKLSsgIFNDICgiUjI4IiwgcmVnc1syOF0pOwotKyAgU0MgKCJSMjkiLCByZWdzWzI5XSk7Ci0rICBTQyAoIlIzMCIsIHJlZ3NbMzBdKTsKLSsgIFNDICgiUjMxIiwgcmVnc1szMV0pOwotKwotKyAgU0MgKCJQQyIsIHBjKTsKLSsgIFNDICgiU1AiLCBzcCk7Ci0rICBTQyAoIkZhdWx0IiwgZmF1bHRfYWRkcmVzcyk7Ci0rICBTQyAoInN0YXRlIiwgcHN0YXRlKTsKLSsgIHJldHVybiAwOwotK30KLS0tLSAvZGV2L251bGwKLSsrKyBiL3NyYy9hYXJjaDY0L2luaXQuaAotQEAgLTAsMCArMSwxMjcgQEAKLSsvKiBsaWJ1bndpbmQgLSBhIHBsYXRmb3JtLWluZGVwZW5kZW50IHVud2luZCBsaWJyYXJ5Ci0rICAgQ29weXJpZ2h0IChDKSAyMDEyIFRvbW1pIFJhbnRhbGEgPHR0LnJhbnRhbGFAZ21haWwuY29tPgotKyAgIENvcHlyaWdodCAoQykgMjAxMyBMaW5hcm8gTGltaXRlZAotKwotK1RoaXMgZmlsZSBpcyBwYXJ0IG9mIGxpYnVud2luZC4KLSsKLStQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcKLSthIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUKLSsiU29mdHdhcmUiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nCi0rd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLAotK2Rpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0bwotK3Blcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0bwotK3RoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKLSsKLStUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZQotK2luY2x1ZGVkIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLgotKwotK1RIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELAotK0VYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRgotK01FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5ECi0rTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRQotK0xJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04KLStPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04KLStXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4gICovCi0rCi0rI2luY2x1ZGUgInVud2luZF9pLmgiCi0rCi0rc3RhdGljIGlubGluZSBpbnQKLStjb21tb25faW5pdCAoc3RydWN0IGN1cnNvciAqYywgdW5zaWduZWQgdXNlX3ByZXZfaW5zdHIpCi0rewotKyAgaW50IHJldCwgaTsKLSsKLSsgIGMtPmR3YXJmLmxvY1tVTldfQUFSQ0g2NF9YMF0gID0gRFdBUkZfUkVHX0xPQyAoJmMtPmR3YXJmLCBVTldfQUFSQ0g2NF9YMCk7Ci0rICBjLT5kd2FyZi5sb2NbVU5XX0FBUkNINjRfWDFdICA9IERXQVJGX1JFR19MT0MgKCZjLT5kd2FyZiwgVU5XX0FBUkNINjRfWDEpOwotKyAgYy0+ZHdhcmYubG9jW1VOV19BQVJDSDY0X1gyXSAgPSBEV0FSRl9SRUdfTE9DICgmYy0+ZHdhcmYsIFVOV19BQVJDSDY0X1gyKTsKLSsgIGMtPmR3YXJmLmxvY1tVTldfQUFSQ0g2NF9YM10gID0gRFdBUkZfUkVHX0xPQyAoJmMtPmR3YXJmLCBVTldfQUFSQ0g2NF9YMyk7Ci0rICBjLT5kd2FyZi5sb2NbVU5XX0FBUkNINjRfWDRdICA9IERXQVJGX1JFR19MT0MgKCZjLT5kd2FyZiwgVU5XX0FBUkNINjRfWDQpOwotKyAgYy0+ZHdhcmYubG9jW1VOV19BQVJDSDY0X1g1XSAgPSBEV0FSRl9SRUdfTE9DICgmYy0+ZHdhcmYsIFVOV19BQVJDSDY0X1g1KTsKLSsgIGMtPmR3YXJmLmxvY1tVTldfQUFSQ0g2NF9YNl0gID0gRFdBUkZfUkVHX0xPQyAoJmMtPmR3YXJmLCBVTldfQUFSQ0g2NF9YNik7Ci0rICBjLT5kd2FyZi5sb2NbVU5XX0FBUkNINjRfWDddICA9IERXQVJGX1JFR19MT0MgKCZjLT5kd2FyZiwgVU5XX0FBUkNINjRfWDcpOwotKyAgYy0+ZHdhcmYubG9jW1VOV19BQVJDSDY0X1g4XSAgPSBEV0FSRl9SRUdfTE9DICgmYy0+ZHdhcmYsIFVOV19BQVJDSDY0X1g4KTsKLSsgIGMtPmR3YXJmLmxvY1tVTldfQUFSQ0g2NF9YOV0gID0gRFdBUkZfUkVHX0xPQyAoJmMtPmR3YXJmLCBVTldfQUFSQ0g2NF9YOSk7Ci0rICBjLT5kd2FyZi5sb2NbVU5XX0FBUkNINjRfWDEwXSA9IERXQVJGX1JFR19MT0MgKCZjLT5kd2FyZiwgVU5XX0FBUkNINjRfWDEwKTsKLSsgIGMtPmR3YXJmLmxvY1tVTldfQUFSQ0g2NF9YMTFdID0gRFdBUkZfUkVHX0xPQyAoJmMtPmR3YXJmLCBVTldfQUFSQ0g2NF9YMTEpOwotKyAgYy0+ZHdhcmYubG9jW1VOV19BQVJDSDY0X1gxMl0gPSBEV0FSRl9SRUdfTE9DICgmYy0+ZHdhcmYsIFVOV19BQVJDSDY0X1gxMik7Ci0rICBjLT5kd2FyZi5sb2NbVU5XX0FBUkNINjRfWDEzXSA9IERXQVJGX1JFR19MT0MgKCZjLT5kd2FyZiwgVU5XX0FBUkNINjRfWDEzKTsKLSsgIGMtPmR3YXJmLmxvY1tVTldfQUFSQ0g2NF9YMTRdID0gRFdBUkZfUkVHX0xPQyAoJmMtPmR3YXJmLCBVTldfQUFSQ0g2NF9YMTQpOwotKyAgYy0+ZHdhcmYubG9jW1VOV19BQVJDSDY0X1gxNV0gPSBEV0FSRl9SRUdfTE9DICgmYy0+ZHdhcmYsIFVOV19BQVJDSDY0X1gxNSk7Ci0rICBjLT5kd2FyZi5sb2NbVU5XX0FBUkNINjRfWDE2XSA9IERXQVJGX1JFR19MT0MgKCZjLT5kd2FyZiwgVU5XX0FBUkNINjRfWDE2KTsKLSsgIGMtPmR3YXJmLmxvY1tVTldfQUFSQ0g2NF9YMTddID0gRFdBUkZfUkVHX0xPQyAoJmMtPmR3YXJmLCBVTldfQUFSQ0g2NF9YMTcpOwotKyAgYy0+ZHdhcmYubG9jW1VOV19BQVJDSDY0X1gxOF0gPSBEV0FSRl9SRUdfTE9DICgmYy0+ZHdhcmYsIFVOV19BQVJDSDY0X1gxOCk7Ci0rICBjLT5kd2FyZi5sb2NbVU5XX0FBUkNINjRfWDE5XSA9IERXQVJGX1JFR19MT0MgKCZjLT5kd2FyZiwgVU5XX0FBUkNINjRfWDE5KTsKLSsgIGMtPmR3YXJmLmxvY1tVTldfQUFSQ0g2NF9YMjBdID0gRFdBUkZfUkVHX0xPQyAoJmMtPmR3YXJmLCBVTldfQUFSQ0g2NF9YMjApOwotKyAgYy0+ZHdhcmYubG9jW1VOV19BQVJDSDY0X1gyMV0gPSBEV0FSRl9SRUdfTE9DICgmYy0+ZHdhcmYsIFVOV19BQVJDSDY0X1gyMSk7Ci0rICBjLT5kd2FyZi5sb2NbVU5XX0FBUkNINjRfWDIyXSA9IERXQVJGX1JFR19MT0MgKCZjLT5kd2FyZiwgVU5XX0FBUkNINjRfWDIyKTsKLSsgIGMtPmR3YXJmLmxvY1tVTldfQUFSQ0g2NF9YMjNdID0gRFdBUkZfUkVHX0xPQyAoJmMtPmR3YXJmLCBVTldfQUFSQ0g2NF9YMjMpOwotKyAgYy0+ZHdhcmYubG9jW1VOV19BQVJDSDY0X1gyNF0gPSBEV0FSRl9SRUdfTE9DICgmYy0+ZHdhcmYsIFVOV19BQVJDSDY0X1gyNCk7Ci0rICBjLT5kd2FyZi5sb2NbVU5XX0FBUkNINjRfWDI1XSA9IERXQVJGX1JFR19MT0MgKCZjLT5kd2FyZiwgVU5XX0FBUkNINjRfWDI1KTsKLSsgIGMtPmR3YXJmLmxvY1tVTldfQUFSQ0g2NF9YMjZdID0gRFdBUkZfUkVHX0xPQyAoJmMtPmR3YXJmLCBVTldfQUFSQ0g2NF9YMjYpOwotKyAgYy0+ZHdhcmYubG9jW1VOV19BQVJDSDY0X1gyN10gPSBEV0FSRl9SRUdfTE9DICgmYy0+ZHdhcmYsIFVOV19BQVJDSDY0X1gyNyk7Ci0rICBjLT5kd2FyZi5sb2NbVU5XX0FBUkNINjRfWDI4XSA9IERXQVJGX1JFR19MT0MgKCZjLT5kd2FyZiwgVU5XX0FBUkNINjRfWDI4KTsKLSsgIGMtPmR3YXJmLmxvY1tVTldfQUFSQ0g2NF9YMjldID0gRFdBUkZfUkVHX0xPQyAoJmMtPmR3YXJmLCBVTldfQUFSQ0g2NF9YMjkpOwotKyAgYy0+ZHdhcmYubG9jW1VOV19BQVJDSDY0X1gzMF0gPSBEV0FSRl9SRUdfTE9DICgmYy0+ZHdhcmYsIFVOV19BQVJDSDY0X1gzMCk7Ci0rICBjLT5kd2FyZi5sb2NbVU5XX0FBUkNINjRfU1BdICA9IERXQVJGX1JFR19MT0MgKCZjLT5kd2FyZiwgVU5XX0FBUkNINjRfU1ApOwotKyAgYy0+ZHdhcmYubG9jW1VOV19BQVJDSDY0X1BDXSAgPSBEV0FSRl9SRUdfTE9DICgmYy0+ZHdhcmYsIFVOV19BQVJDSDY0X1BDKTsKLSsgIGMtPmR3YXJmLmxvY1tVTldfQUFSQ0g2NF9QU1RBVEVdID0gRFdBUkZfUkVHX0xPQyAoJmMtPmR3YXJmLAotKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBVTldfQUFSQ0g2NF9QU1RBVEUpOwotKyAgYy0+ZHdhcmYubG9jW1VOV19BQVJDSDY0X1YwXSAgPSBEV0FSRl9SRUdfTE9DICgmYy0+ZHdhcmYsIFVOV19BQVJDSDY0X1YwKTsKLSsgIGMtPmR3YXJmLmxvY1tVTldfQUFSQ0g2NF9WMV0gID0gRFdBUkZfUkVHX0xPQyAoJmMtPmR3YXJmLCBVTldfQUFSQ0g2NF9WMSk7Ci0rICBjLT5kd2FyZi5sb2NbVU5XX0FBUkNINjRfVjJdICA9IERXQVJGX1JFR19MT0MgKCZjLT5kd2FyZiwgVU5XX0FBUkNINjRfVjIpOwotKyAgYy0+ZHdhcmYubG9jW1VOV19BQVJDSDY0X1YzXSAgPSBEV0FSRl9SRUdfTE9DICgmYy0+ZHdhcmYsIFVOV19BQVJDSDY0X1YzKTsKLSsgIGMtPmR3YXJmLmxvY1tVTldfQUFSQ0g2NF9WNF0gID0gRFdBUkZfUkVHX0xPQyAoJmMtPmR3YXJmLCBVTldfQUFSQ0g2NF9WNCk7Ci0rICBjLT5kd2FyZi5sb2NbVU5XX0FBUkNINjRfVjVdICA9IERXQVJGX1JFR19MT0MgKCZjLT5kd2FyZiwgVU5XX0FBUkNINjRfVjUpOwotKyAgYy0+ZHdhcmYubG9jW1VOV19BQVJDSDY0X1Y2XSAgPSBEV0FSRl9SRUdfTE9DICgmYy0+ZHdhcmYsIFVOV19BQVJDSDY0X1Y2KTsKLSsgIGMtPmR3YXJmLmxvY1tVTldfQUFSQ0g2NF9WN10gID0gRFdBUkZfUkVHX0xPQyAoJmMtPmR3YXJmLCBVTldfQUFSQ0g2NF9WNyk7Ci0rICBjLT5kd2FyZi5sb2NbVU5XX0FBUkNINjRfVjhdICA9IERXQVJGX1JFR19MT0MgKCZjLT5kd2FyZiwgVU5XX0FBUkNINjRfVjgpOwotKyAgYy0+ZHdhcmYubG9jW1VOV19BQVJDSDY0X1Y5XSAgPSBEV0FSRl9SRUdfTE9DICgmYy0+ZHdhcmYsIFVOV19BQVJDSDY0X1Y5KTsKLSsgIGMtPmR3YXJmLmxvY1tVTldfQUFSQ0g2NF9WMTBdID0gRFdBUkZfUkVHX0xPQyAoJmMtPmR3YXJmLCBVTldfQUFSQ0g2NF9WMTApOwotKyAgYy0+ZHdhcmYubG9jW1VOV19BQVJDSDY0X1YxMV0gPSBEV0FSRl9SRUdfTE9DICgmYy0+ZHdhcmYsIFVOV19BQVJDSDY0X1YxMSk7Ci0rICBjLT5kd2FyZi5sb2NbVU5XX0FBUkNINjRfVjEyXSA9IERXQVJGX1JFR19MT0MgKCZjLT5kd2FyZiwgVU5XX0FBUkNINjRfVjEyKTsKLSsgIGMtPmR3YXJmLmxvY1tVTldfQUFSQ0g2NF9WMTNdID0gRFdBUkZfUkVHX0xPQyAoJmMtPmR3YXJmLCBVTldfQUFSQ0g2NF9WMTMpOwotKyAgYy0+ZHdhcmYubG9jW1VOV19BQVJDSDY0X1YxNF0gPSBEV0FSRl9SRUdfTE9DICgmYy0+ZHdhcmYsIFVOV19BQVJDSDY0X1YxNCk7Ci0rICBjLT5kd2FyZi5sb2NbVU5XX0FBUkNINjRfVjE1XSA9IERXQVJGX1JFR19MT0MgKCZjLT5kd2FyZiwgVU5XX0FBUkNINjRfVjE1KTsKLSsgIGMtPmR3YXJmLmxvY1tVTldfQUFSQ0g2NF9WMTZdID0gRFdBUkZfUkVHX0xPQyAoJmMtPmR3YXJmLCBVTldfQUFSQ0g2NF9WMTYpOwotKyAgYy0+ZHdhcmYubG9jW1VOV19BQVJDSDY0X1YxN10gPSBEV0FSRl9SRUdfTE9DICgmYy0+ZHdhcmYsIFVOV19BQVJDSDY0X1YxNyk7Ci0rICBjLT5kd2FyZi5sb2NbVU5XX0FBUkNINjRfVjE4XSA9IERXQVJGX1JFR19MT0MgKCZjLT5kd2FyZiwgVU5XX0FBUkNINjRfVjE4KTsKLSsgIGMtPmR3YXJmLmxvY1tVTldfQUFSQ0g2NF9WMTldID0gRFdBUkZfUkVHX0xPQyAoJmMtPmR3YXJmLCBVTldfQUFSQ0g2NF9WMTkpOwotKyAgYy0+ZHdhcmYubG9jW1VOV19BQVJDSDY0X1YyMF0gPSBEV0FSRl9SRUdfTE9DICgmYy0+ZHdhcmYsIFVOV19BQVJDSDY0X1YyMCk7Ci0rICBjLT5kd2FyZi5sb2NbVU5XX0FBUkNINjRfVjIxXSA9IERXQVJGX1JFR19MT0MgKCZjLT5kd2FyZiwgVU5XX0FBUkNINjRfVjIxKTsKLSsgIGMtPmR3YXJmLmxvY1tVTldfQUFSQ0g2NF9WMjJdID0gRFdBUkZfUkVHX0xPQyAoJmMtPmR3YXJmLCBVTldfQUFSQ0g2NF9WMjIpOwotKyAgYy0+ZHdhcmYubG9jW1VOV19BQVJDSDY0X1YyM10gPSBEV0FSRl9SRUdfTE9DICgmYy0+ZHdhcmYsIFVOV19BQVJDSDY0X1YyMyk7Ci0rICBjLT5kd2FyZi5sb2NbVU5XX0FBUkNINjRfVjI0XSA9IERXQVJGX1JFR19MT0MgKCZjLT5kd2FyZiwgVU5XX0FBUkNINjRfVjI0KTsKLSsgIGMtPmR3YXJmLmxvY1tVTldfQUFSQ0g2NF9WMjVdID0gRFdBUkZfUkVHX0xPQyAoJmMtPmR3YXJmLCBVTldfQUFSQ0g2NF9WMjUpOwotKyAgYy0+ZHdhcmYubG9jW1VOV19BQVJDSDY0X1YyNl0gPSBEV0FSRl9SRUdfTE9DICgmYy0+ZHdhcmYsIFVOV19BQVJDSDY0X1YyNik7Ci0rICBjLT5kd2FyZi5sb2NbVU5XX0FBUkNINjRfVjI3XSA9IERXQVJGX1JFR19MT0MgKCZjLT5kd2FyZiwgVU5XX0FBUkNINjRfVjI3KTsKLSsgIGMtPmR3YXJmLmxvY1tVTldfQUFSQ0g2NF9WMjhdID0gRFdBUkZfUkVHX0xPQyAoJmMtPmR3YXJmLCBVTldfQUFSQ0g2NF9WMjgpOwotKyAgYy0+ZHdhcmYubG9jW1VOV19BQVJDSDY0X1YyOV0gPSBEV0FSRl9SRUdfTE9DICgmYy0+ZHdhcmYsIFVOV19BQVJDSDY0X1YyOSk7Ci0rICBjLT5kd2FyZi5sb2NbVU5XX0FBUkNINjRfVjMwXSA9IERXQVJGX1JFR19MT0MgKCZjLT5kd2FyZiwgVU5XX0FBUkNINjRfVjMwKTsKLSsgIGMtPmR3YXJmLmxvY1tVTldfQUFSQ0g2NF9WMzFdID0gRFdBUkZfUkVHX0xPQyAoJmMtPmR3YXJmLCBVTldfQUFSQ0g2NF9WMzEpOwotKwotKyAgZm9yIChpID0gVU5XX0FBUkNINjRfUFNUQVRFICsgMTsgaSA8IFVOV19BQVJDSDY0X1YwOyArK2kpCi0rICAgIGMtPmR3YXJmLmxvY1tpXSA9IERXQVJGX05VTExfTE9DOwotKwotKyAgcmV0ID0gZHdhcmZfZ2V0ICgmYy0+ZHdhcmYsIGMtPmR3YXJmLmxvY1tVTldfQUFSQ0g2NF9QQ10sICZjLT5kd2FyZi5pcCk7Ci0rICBpZiAocmV0IDwgMCkKLSsgICAgcmV0dXJuIHJldDsKLSsKLSsgIHJldCA9IGR3YXJmX2dldCAoJmMtPmR3YXJmLCBjLT5kd2FyZi5sb2NbVU5XX0FBUkNINjRfU1BdLCAmYy0+ZHdhcmYuY2ZhKTsKLSsgIGlmIChyZXQgPCAwKQotKyAgICByZXR1cm4gcmV0OwotKwotKyAgYy0+c2lnY29udGV4dF9mb3JtYXQgPSBBQVJDSDY0X1NDRl9OT05FOwotKyAgYy0+c2lnY29udGV4dF9hZGRyID0gMDsKLSsgIGMtPnNpZ2NvbnRleHRfc3AgPSAwOwotKyAgYy0+c2lnY29udGV4dF9wYyA9IDA7Ci0rCi0rICBjLT5kd2FyZi5hcmdzX3NpemUgPSAwOwotKyAgYy0+ZHdhcmYucmV0X2FkZHJfY29sdW1uID0gMDsKLSsgIGMtPmR3YXJmLnN0YXNoX2ZyYW1lcyA9IDA7Ci0rICBjLT5kd2FyZi51c2VfcHJldl9pbnN0ciA9IHVzZV9wcmV2X2luc3RyOwotKyAgYy0+ZHdhcmYucGlfdmFsaWQgPSAwOwotKyAgYy0+ZHdhcmYucGlfaXNfZHluYW1pYyA9IDA7Ci0rICBjLT5kd2FyZi5oaW50ID0gMDsKLSsgIGMtPmR3YXJmLnByZXZfcnMgPSAwOwotKwotKyAgcmV0dXJuIDA7Ci0rfQotLS0tIC9kZXYvbnVsbAotKysrIGIvc3JjL2FhcmNoNjQvaXNfZnByZWcuYwotQEAgLTAsMCArMSwzMiBAQAotKy8qIGxpYnVud2luZCAtIGEgcGxhdGZvcm0taW5kZXBlbmRlbnQgdW53aW5kIGxpYnJhcnkKLSsgICBDb3B5cmlnaHQgKEMpIDIwMDggQ29kZVNvdXJjZXJ5Ci0rICAgQ29weXJpZ2h0IChDKSAyMDEzIExpbmFybyBMaW1pdGVkCi0rCi0rVGhpcyBmaWxlIGlzIHBhcnQgb2YgbGlidW53aW5kLgotKwotK1Blcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZwotK2EgY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZQotKyJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcKLSt3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsCi0rZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvCi0rcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvCi0rdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgotKwotK1RoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlCi0raW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuCi0rCi0rVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsCi0rRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GCi0rTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQKLStOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFCi0rTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTgotK09GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTgotK1dJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLiAgKi8KLSsKLSsjaW5jbHVkZSAibGlidW53aW5kX2kuaCIKLSsKLStQUk9URUNURUQgaW50Ci0rdW53X2lzX2ZwcmVnIChpbnQgcmVnbnVtKQotK3sKLSsgIHJldHVybiAocmVnbnVtID49IFVOV19BQVJDSDY0X1YwICYmIHJlZ251bSA8PSBVTldfQUFSQ0g2NF9WMzEpOwotK30KLS0tLSAvZGV2L251bGwKLSsrKyBiL3NyYy9hYXJjaDY0L29mZnNldHMuaAotQEAgLTAsMCArMSw0OSBAQAotKy8qIExpbnV4LXNwZWNpZmljIGRlZmluaXRpb25zOiAqLwotKwotKy8qIERlZmluZSB2YXJpb3VzIHN0cnVjdHVyZSBvZmZzZXRzIHRvIHNpbXBsaWZ5IGNyb3NzLWNvbXBpbGF0aW9uLiAgKi8KLSsKLSsvKiBPZmZzZXRzIGZvciBBQXJjaDY0IExpbnV4ICJ1Y29udGV4dF90IjogICovCi0rCi0rI2RlZmluZSBMSU5VWF9VQ19GTEFHU19PRkYJMHgwCi0rI2RlZmluZSBMSU5VWF9VQ19MSU5LX09GRgkweDgKLSsjZGVmaW5lIExJTlVYX1VDX1NUQUNLX09GRgkweDEwCi0rI2RlZmluZSBMSU5VWF9VQ19TSUdNQVNLX09GRgkweDI4Ci0rI2RlZmluZSBMSU5VWF9VQ19NQ09OVEVYVF9PRkYJMHhiMAotKwotKy8qIE9mZnNldHMgZm9yIEFBcmNoNjQgTGludXggInN0cnVjdCBzaWdjb250ZXh0IjogICovCi0rCi0rI2RlZmluZSBMSU5VWF9TQ19GQVVMVEFERFJFU1NfT0ZGCTB4MDAKLSsjZGVmaW5lIExJTlVYX1NDX1gwX09GRgkJMHgwMDgKLSsjZGVmaW5lIExJTlVYX1NDX1gxX09GRgkJMHgwMTAKLSsjZGVmaW5lIExJTlVYX1NDX1gyX09GRgkJMHgwMTgKLSsjZGVmaW5lIExJTlVYX1NDX1gzX09GRgkJMHgwMjAKLSsjZGVmaW5lIExJTlVYX1NDX1g0X09GRgkJMHgwMjgKLSsjZGVmaW5lIExJTlVYX1NDX1g1X09GRgkJMHgwMzAKLSsjZGVmaW5lIExJTlVYX1NDX1g2X09GRgkJMHgwMzgKLSsjZGVmaW5lIExJTlVYX1NDX1g3X09GRgkJMHgwNDAKLSsjZGVmaW5lIExJTlVYX1NDX1g4X09GRgkJMHgwNDgKLSsjZGVmaW5lIExJTlVYX1NDX1g5X09GRgkJMHgwNTAKLSsjZGVmaW5lIExJTlVYX1NDX1gxMF9PRkYJMHgwNTgKLSsjZGVmaW5lIExJTlVYX1NDX1gxMV9PRkYJMHgwNjAKLSsjZGVmaW5lIExJTlVYX1NDX1gxMl9PRkYJMHgwNjgKLSsjZGVmaW5lIExJTlVYX1NDX1gxM19PRkYJMHgwNzAKLSsjZGVmaW5lIExJTlVYX1NDX1gxNF9PRkYJMHgwNzgKLSsjZGVmaW5lIExJTlVYX1NDX1gxNV9PRkYJMHgwODAKLSsjZGVmaW5lIExJTlVYX1NDX1gxNl9PRkYJMHgwODgKLSsjZGVmaW5lIExJTlVYX1NDX1gxN19PRkYJMHgwOTAKLSsjZGVmaW5lIExJTlVYX1NDX1gxOF9PRkYJMHgwOTgKLSsjZGVmaW5lIExJTlVYX1NDX1gxOV9PRkYJMHgwYTAKLSsjZGVmaW5lIExJTlVYX1NDX1gyMF9PRkYJMHgwYTgKLSsjZGVmaW5lIExJTlVYX1NDX1gyMV9PRkYJMHgwYjAKLSsjZGVmaW5lIExJTlVYX1NDX1gyMl9PRkYJMHgwYjgKLSsjZGVmaW5lIExJTlVYX1NDX1gyM19PRkYJMHgwYzAKLSsjZGVmaW5lIExJTlVYX1NDX1gyNF9PRkYJMHgwYzgKLSsjZGVmaW5lIExJTlVYX1NDX1gyNV9PRkYJMHgwZDAKLSsjZGVmaW5lIExJTlVYX1NDX1gyNl9PRkYJMHgwZDgKLSsjZGVmaW5lIExJTlVYX1NDX1gyN19PRkYJMHgwZTAKLSsjZGVmaW5lIExJTlVYX1NDX1gyOF9PRkYJMHgwZTgKLSsjZGVmaW5lIExJTlVYX1NDX1gyOV9PRkYJMHgwZjAKLSsjZGVmaW5lIExJTlVYX1NDX1gzMF9PRkYJMHgwZjgKLSsjZGVmaW5lIExJTlVYX1NDX1NQX09GRgkJMHgxMDAKLSsjZGVmaW5lIExJTlVYX1NDX1BDX09GRgkJMHgxMDgKLSsjZGVmaW5lIExJTlVYX1NDX1BTVEFURV9PRkYJMHgxMTAKLS0tLSAvZGV2L251bGwKLSsrKyBiL3NyYy9hYXJjaDY0L3JlZ25hbWUuYwotQEAgLTAsMCArMSwxMDYgQEAKLSsvKiBsaWJ1bndpbmQgLSBhIHBsYXRmb3JtLWluZGVwZW5kZW50IHVud2luZCBsaWJyYXJ5Ci0rICAgQ29weXJpZ2h0IChDKSAyMDEyIFRvbW1pIFJhbnRhbGEgPHR0LnJhbnRhbGFAZ21haWwuY29tPgotKyAgIENvcHlyaWdodCAoQykgMjAxMyBMaW5hcm8gTGltaXRlZAotKwotK1RoaXMgZmlsZSBpcyBwYXJ0IG9mIGxpYnVud2luZC4KLSsKLStQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcKLSthIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUKLSsiU29mdHdhcmUiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nCi0rd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLAotK2Rpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0bwotK3Blcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0bwotK3RoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKLSsKLStUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZQotK2luY2x1ZGVkIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLgotKwotK1RIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELAotK0VYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRgotK01FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5ECi0rTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRQotK0xJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04KLStPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04KLStXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4gICovCi0rCi0rI2luY2x1ZGUgInVud2luZF9pLmgiCi0rCi0rc3RhdGljIGNvbnN0IGNoYXIgKmNvbnN0IHJlZ25hbWVbXSA9Ci0rICB7Ci0rICAgIFtVTldfQUFSQ0g2NF9YMF0gPSAieDAiLAotKyAgICBbVU5XX0FBUkNINjRfWDFdID0gIngxIiwKLSsgICAgW1VOV19BQVJDSDY0X1gyXSA9ICJ4MiIsCi0rICAgIFtVTldfQUFSQ0g2NF9YM10gPSAieDMiLAotKyAgICBbVU5XX0FBUkNINjRfWDRdID0gIng0IiwKLSsgICAgW1VOV19BQVJDSDY0X1g1XSA9ICJ4NSIsCi0rICAgIFtVTldfQUFSQ0g2NF9YNl0gPSAieDYiLAotKyAgICBbVU5XX0FBUkNINjRfWDddID0gIng3IiwKLSsgICAgW1VOV19BQVJDSDY0X1g4XSA9ICJ4OCIsCi0rICAgIFtVTldfQUFSQ0g2NF9YOV0gPSAieDkiLAotKyAgICBbVU5XX0FBUkNINjRfWDEwXSA9ICJ4MTAiLAotKyAgICBbVU5XX0FBUkNINjRfWDExXSA9ICJ4MTEiLAotKyAgICBbVU5XX0FBUkNINjRfWDEyXSA9ICJ4MTIiLAotKyAgICBbVU5XX0FBUkNINjRfWDEzXSA9ICJ4MTMiLAotKyAgICBbVU5XX0FBUkNINjRfWDE0XSA9ICJ4MTQiLAotKyAgICBbVU5XX0FBUkNINjRfWDE1XSA9ICJ4MTUiLAotKyAgICBbVU5XX0FBUkNINjRfWDE2XSA9ICJpcDAiLAotKyAgICBbVU5XX0FBUkNINjRfWDE3XSA9ICJpcDEiLAotKyAgICBbVU5XX0FBUkNINjRfWDE4XSA9ICJ4MTgiLAotKyAgICBbVU5XX0FBUkNINjRfWDE5XSA9ICJ4MTkiLAotKyAgICBbVU5XX0FBUkNINjRfWDIwXSA9ICJ4MjAiLAotKyAgICBbVU5XX0FBUkNINjRfWDIxXSA9ICJ4MjEiLAotKyAgICBbVU5XX0FBUkNINjRfWDIyXSA9ICJ4MjIiLAotKyAgICBbVU5XX0FBUkNINjRfWDIzXSA9ICJ4MjMiLAotKyAgICBbVU5XX0FBUkNINjRfWDI0XSA9ICJ4MjQiLAotKyAgICBbVU5XX0FBUkNINjRfWDI1XSA9ICJ4MjUiLAotKyAgICBbVU5XX0FBUkNINjRfWDI2XSA9ICJ4MjYiLAotKyAgICBbVU5XX0FBUkNINjRfWDI3XSA9ICJ4MjciLAotKyAgICBbVU5XX0FBUkNINjRfWDI4XSA9ICJ4MjgiLAotKyAgICBbVU5XX0FBUkNINjRfWDI5XSA9ICJmcCIsCi0rICAgIFtVTldfQUFSQ0g2NF9YMzBdID0gImxyIiwKLSsgICAgW1VOV19BQVJDSDY0X1NQXSA9ICJzcCIsCi0rICAgIFtVTldfQUFSQ0g2NF9QQ10gPSAicGMiLAotKyAgICBbVU5XX0FBUkNINjRfVjBdID0gInYwIiwKLSsgICAgW1VOV19BQVJDSDY0X1YxXSA9ICJ2MSIsCi0rICAgIFtVTldfQUFSQ0g2NF9WMl0gPSAidjIiLAotKyAgICBbVU5XX0FBUkNINjRfVjNdID0gInYzIiwKLSsgICAgW1VOV19BQVJDSDY0X1Y0XSA9ICJ2NCIsCi0rICAgIFtVTldfQUFSQ0g2NF9WNV0gPSAidjUiLAotKyAgICBbVU5XX0FBUkNINjRfVjZdID0gInY2IiwKLSsgICAgW1VOV19BQVJDSDY0X1Y3XSA9ICJ2NyIsCi0rICAgIFtVTldfQUFSQ0g2NF9WOF0gPSAidjgiLAotKyAgICBbVU5XX0FBUkNINjRfVjldID0gInY5IiwKLSsgICAgW1VOV19BQVJDSDY0X1YxMF0gPSAidjEwIiwKLSsgICAgW1VOV19BQVJDSDY0X1YxMV0gPSAidjExIiwKLSsgICAgW1VOV19BQVJDSDY0X1YxMl0gPSAidjEyIiwKLSsgICAgW1VOV19BQVJDSDY0X1YxM10gPSAidjEzIiwKLSsgICAgW1VOV19BQVJDSDY0X1YxNF0gPSAidjE0IiwKLSsgICAgW1VOV19BQVJDSDY0X1YxNV0gPSAidjE1IiwKLSsgICAgW1VOV19BQVJDSDY0X1YxNl0gPSAidjE2IiwKLSsgICAgW1VOV19BQVJDSDY0X1YxN10gPSAidjE3IiwKLSsgICAgW1VOV19BQVJDSDY0X1YxOF0gPSAidjE4IiwKLSsgICAgW1VOV19BQVJDSDY0X1YxOV0gPSAidjE5IiwKLSsgICAgW1VOV19BQVJDSDY0X1YyMF0gPSAidjIwIiwKLSsgICAgW1VOV19BQVJDSDY0X1YyMV0gPSAidjIxIiwKLSsgICAgW1VOV19BQVJDSDY0X1YyMl0gPSAidjIyIiwKLSsgICAgW1VOV19BQVJDSDY0X1YyM10gPSAidjIzIiwKLSsgICAgW1VOV19BQVJDSDY0X1YyNF0gPSAidjI0IiwKLSsgICAgW1VOV19BQVJDSDY0X1YyNV0gPSAidjI1IiwKLSsgICAgW1VOV19BQVJDSDY0X1YyNl0gPSAidjI2IiwKLSsgICAgW1VOV19BQVJDSDY0X1YyN10gPSAidjI3IiwKLSsgICAgW1VOV19BQVJDSDY0X1YyOF0gPSAidjI4IiwKLSsgICAgW1VOV19BQVJDSDY0X1YyOV0gPSAidjI5IiwKLSsgICAgW1VOV19BQVJDSDY0X1YzMF0gPSAidjMwIiwKLSsgICAgW1VOV19BQVJDSDY0X1YzMV0gPSAidjMxIiwKLSsgICAgW1VOV19BQVJDSDY0X0ZQU1JdID0gImZwc3IiLAotKyAgICBbVU5XX0FBUkNINjRfRlBDUl0gPSAiZnBjciIsCi0rICB9OwotKwotK1BST1RFQ1RFRCBjb25zdCBjaGFyICoKLSt1bndfcmVnbmFtZSAodW53X3JlZ251bV90IHJlZykKLSt7Ci0rICBpZiAocmVnIDwgKHVud19yZWdudW1fdCkgQVJSQVlfU0laRSAocmVnbmFtZSkgJiYgcmVnbmFtZVtyZWddICE9IE5VTEwpCi0rICAgIHJldHVybiByZWduYW1lW3JlZ107Ci0rICBlbHNlCi0rICAgIHJldHVybiAiPz8/IjsKLSt9Ci0tLS0gL2Rldi9udWxsCi0rKysgYi9zcmMvYWFyY2g2NC9zaWdsb25nam1wLlMKLUBAIC0wLDAgKzEsMTIgQEAKLSsJLyogRHVtbXkgaW1wbGVtZW50YXRpb24gZm9yIG5vdy4gICovCi0rCi0rCS5nbG9iYWwgX1VJX3NpZ2xvbmdqbXBfY29udAotKwkuZ2xvYmFsIF9VSV9sb25nam1wX2NvbnQKLSsKLStfVUlfc2lnbG9uZ2ptcF9jb250OgotK19VSV9sb25nam1wX2NvbnQ6Ci0rCXJldAotKyNpZmRlZiBfX2xpbnV4X18KLSsgLyogV2UgZG8gbm90IG5lZWQgZXhlY3V0YWJsZSBzdGFjay4gICovCi0rIC5zZWN0aW9uICAubm90ZS5HTlUtc3RhY2ssIiIsJXByb2diaXRzCi0rI2VuZGlmCi0tLS0gL2Rldi9udWxsCi0rKysgYi9zcmMvYWFyY2g2NC91bndpbmRfaS5oCi1AQCAtMCwwICsxLDQzIEBACi0rLyogbGlidW53aW5kIC0gYSBwbGF0Zm9ybS1pbmRlcGVuZGVudCB1bndpbmQgbGlicmFyeQotKyAgIENvcHlyaWdodCAoQykgMjAwOCBDb2RlU291cmNlcnkKLSsgICBDb3B5cmlnaHQgKEMpIDIwMTMgTGluYXJvIExpbWl0ZWQKLSsKLStUaGlzIGZpbGUgaXMgcGFydCBvZiBsaWJ1bndpbmQuCi0rCi0rUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nCi0rYSBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlCi0rIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZwotK3dpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwKLStkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8KLStwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8KLSt0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6Ci0rCi0rVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUKLStpbmNsdWRlZCBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4KLSsKLStUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwKLStFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YKLStNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORAotK05PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUKLStMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OCi0rT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OCi0rV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuICAqLwotKwotKyNpZm5kZWYgdW53aW5kX2lfaAotKyNkZWZpbmUgdW53aW5kX2lfaAotKwotKyNpbmNsdWRlIDxzdGRpbnQuaD4KLSsKLSsjaW5jbHVkZSA8bGlidW53aW5kLWFhcmNoNjQuaD4KLSsKLSsjaW5jbHVkZSAibGlidW53aW5kX2kuaCIKLSsKLSsjZGVmaW5lIGFhcmNoNjRfbG9jawkJCVVOV19PQkoobG9jaykKLSsjZGVmaW5lIGFhcmNoNjRfbG9jYWxfcmVzdW1lCQlVTldfT0JKKGxvY2FsX3Jlc3VtZSkKLSsjZGVmaW5lIGFhcmNoNjRfbG9jYWxfYWRkcl9zcGFjZV9pbml0CVVOV19PQkoobG9jYWxfYWRkcl9zcGFjZV9pbml0KQotKwotK2V4dGVybiB2b2lkIGFhcmNoNjRfbG9jYWxfYWRkcl9zcGFjZV9pbml0ICh2b2lkKTsKLStleHRlcm4gaW50IGFhcmNoNjRfbG9jYWxfcmVzdW1lICh1bndfYWRkcl9zcGFjZV90IGFzLCB1bndfY3Vyc29yX3QgKmN1cnNvciwKLSsJCQkgICAgIHZvaWQgKmFyZyk7Ci0rCi0rI2VuZGlmIC8qIHVud2luZF9pX2ggKi8KLS0tLSBhL3NyYy9jb3JlZHVtcC9fVUNEX2FjY2Vzc19yZWdfbGludXguYwotKysrIGIvc3JjL2NvcmVkdW1wL19VQ0RfYWNjZXNzX3JlZ19saW51eC5jCi1AQCAtMzksNyArMzksMTAgQEAgX1VDRF9hY2Nlc3NfcmVnICh1bndfYWRkcl9zcGFjZV90IGFzLAotICAgICAgIHJldHVybiAtVU5XX0VJTlZBTDsKLSAgICAgfQotIAotLSNpZiBkZWZpbmVkKFVOV19UQVJHRVRfQVJNKQotKyNpZiBkZWZpbmVkKFVOV19UQVJHRVRfQUFSQ0g2NCkKLSsgIGlmIChyZWdudW0gPCAwIHx8IHJlZ251bSA+PSBVTldfQUFSQ0g2NF9GUENSKQotKyAgICBnb3RvIGJhZHJlZzsKLSsjZWxpZiBkZWZpbmVkKFVOV19UQVJHRVRfQVJNKQotICAgaWYgKHJlZ251bSA8IDAgfHwgcmVnbnVtID49IDE2KQotICAgICBnb3RvIGJhZHJlZzsKLSAjZWxpZiBkZWZpbmVkKFVOV19UQVJHRVRfU0gpCi0tLS0gYS9zcmMvcHRyYWNlL19VUFRfcmVnX29mZnNldC5jCi0rKysgYi9zcmMvcHRyYWNlL19VUFRfcmVnX29mZnNldC5jCi1AQCAtMSw2ICsxLDcgQEAKLSAvKiBsaWJ1bndpbmQgLSBhIHBsYXRmb3JtLWluZGVwZW5kZW50IHVud2luZCBsaWJyYXJ5Ci0gICAgQ29weXJpZ2h0IChDKSAyMDAzLTIwMDQgSGV3bGV0dC1QYWNrYXJkIENvCi0gCUNvbnRyaWJ1dGVkIGJ5IERhdmlkIE1vc2Jlcmdlci1UYW5nIDxkYXZpZG1AaHBsLmhwLmNvbT4KLSsgICBDb3B5cmlnaHQgKEMpIDIwMTMgTGluYXJvIExpbWl0ZWQKLSAKLSBUaGlzIGZpbGUgaXMgcGFydCBvZiBsaWJ1bndpbmQuCi0gCi1AQCAtNTAxLDYgKzUwMiw0MSBAQCBjb25zdCBpbnQgX1VQVF9yZWdfb2Zmc2V0W1VOV19SRUdfTEFTVCArCi0gICAgIFtVTldfQVJNX1IxNV0gICAgICA9IDB4M2MsCi0gI2VsaWYgZGVmaW5lZChVTldfVEFSR0VUX01JUFMpCi0gI2VsaWYgZGVmaW5lZChVTldfVEFSR0VUX1NIKQotKyNlbGlmIGRlZmluZWQoVU5XX1RBUkdFVF9BQVJDSDY0KQotKyAgICBbVU5XX0FBUkNINjRfWDBdICAgICAgID0gMHgwMCwKLSsgICAgW1VOV19BQVJDSDY0X1gxXSAgICAgICA9IDB4MDgsCi0rICAgIFtVTldfQUFSQ0g2NF9YMl0gICAgICAgPSAweDEwLAotKyAgICBbVU5XX0FBUkNINjRfWDNdICAgICAgID0gMHgxOCwKLSsgICAgW1VOV19BQVJDSDY0X1g0XSAgICAgICA9IDB4MjAsCi0rICAgIFtVTldfQUFSQ0g2NF9YNV0gICAgICAgPSAweDI4LAotKyAgICBbVU5XX0FBUkNINjRfWDZdICAgICAgID0gMHgzMCwKLSsgICAgW1VOV19BQVJDSDY0X1g3XSAgICAgICA9IDB4MzgsCi0rICAgIFtVTldfQUFSQ0g2NF9YOF0gICAgICAgPSAweDQwLAotKyAgICBbVU5XX0FBUkNINjRfWDldICAgICAgID0gMHg0OCwKLSsgICAgW1VOV19BQVJDSDY0X1gxMF0gICAgICA9IDB4NTAsCi0rICAgIFtVTldfQUFSQ0g2NF9YMTFdICAgICAgPSAweDU4LAotKyAgICBbVU5XX0FBUkNINjRfWDEyXSAgICAgID0gMHg2MCwKLSsgICAgW1VOV19BQVJDSDY0X1gxM10gICAgICA9IDB4NjgsCi0rICAgIFtVTldfQUFSQ0g2NF9YMTRdICAgICAgPSAweDcwLAotKyAgICBbVU5XX0FBUkNINjRfWDE1XSAgICAgID0gMHg3OCwKLSsgICAgW1VOV19BQVJDSDY0X1gxNl0gICAgICA9IDB4ODAsCi0rICAgIFtVTldfQUFSQ0g2NF9YMTddICAgICAgPSAweDg4LAotKyAgICBbVU5XX0FBUkNINjRfWDE4XSAgICAgID0gMHg5MCwKLSsgICAgW1VOV19BQVJDSDY0X1gxOV0gICAgICA9IDB4OTgsCi0rICAgIFtVTldfQUFSQ0g2NF9YMjBdICAgICAgPSAweGEwLAotKyAgICBbVU5XX0FBUkNINjRfWDIxXSAgICAgID0gMHhhOCwKLSsgICAgW1VOV19BQVJDSDY0X1gyMl0gICAgICA9IDB4YjAsCi0rICAgIFtVTldfQUFSQ0g2NF9YMjNdICAgICAgPSAweGI4LAotKyAgICBbVU5XX0FBUkNINjRfWDI0XSAgICAgID0gMHhjMCwKLSsgICAgW1VOV19BQVJDSDY0X1gyNV0gICAgICA9IDB4YzgsCi0rICAgIFtVTldfQUFSQ0g2NF9YMjZdICAgICAgPSAweGQwLAotKyAgICBbVU5XX0FBUkNINjRfWDI3XSAgICAgID0gMHhkOCwKLSsgICAgW1VOV19BQVJDSDY0X1gyOF0gICAgICA9IDB4ZTAsCi0rICAgIFtVTldfQUFSQ0g2NF9YMjldICAgICAgPSAweGU4LAotKyAgICBbVU5XX0FBUkNINjRfWDMwXSAgICAgID0gMHhmMCwKLSsgICAgW1VOV19BQVJDSDY0X1NQXSAgICAgICA9IDB4ZjgsCi0rICAgIFtVTldfQUFSQ0g2NF9QQ10gICAgICAgPSAweDEwMCwKLSsgICAgW1VOV19BQVJDSDY0X1BTVEFURV0gICA9IDB4MTA4Ci0gI2Vsc2UKLSAjIGVycm9yIEZpeCBtZS4KLSAjZW5kaWYKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9saWJ1bndpbmQvbGlidW53aW5kLTEuMS9GaXgtdGVzdC1jYXNlLWxpbmstZmFpbHVyZS1vbi1Qb3dlclBDLXN5c3RlbXMtd2l0aC1BbHRpdmVjLnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2xpYnVud2luZC9saWJ1bndpbmQtMS4xL0ZpeC10ZXN0LWNhc2UtbGluay1mYWlsdXJlLW9uLVBvd2VyUEMtc3lzdGVtcy13aXRoLUFsdGl2ZWMucGF0Y2gKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGRjMGY1YzEuLjAwMDAwMDAKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2xpYnVud2luZC9saWJ1bndpbmQtMS4xL0ZpeC10ZXN0LWNhc2UtbGluay1mYWlsdXJlLW9uLVBvd2VyUEMtc3lzdGVtcy13aXRoLUFsdGl2ZWMucGF0Y2gKKysrIC9kZXYvbnVsbApAQCAtMSwyOCArMCwwIEBACi1GaXggdGVzdCBjYXNlIGxpbmsgZmFpbHVyZSBvbiBQb3dlclBDIHN5c3RlbXMgd2l0aCBBbHRpdmVjCi0KLVVwc3RyZWFtLVN0YXR1czpiYWNrcG9ydAotCi1PbiBzeXN0ZW1zIHdoZXJlIHRoZSBzeXN0ZW0gY29tcGlsZXIgc3VwcG9ydHMgQWx0aXZlYyBieSBkZWZhdWx0LAotdGhlIGxpYnVud2luZCBNYWtlZmlsZSB3aWxsIGF0dGVtcHQgdG8gYnVpbGQgYW4gZXh0cmEgdGVzdCBjYXNlCi1wcGM2NC10ZXN0LWFsdGl2ZWMuICBVbmZvcnR1bmF0ZWx5LCB0aGUgbGluayBzdGVwIHdpbGwgZmFpbCBzaW5jZQotdGhlIE1ha2VmaWxlIGRvZXMgbm90IGFjdHVhbGx5IGxpbmsgYWdhaW5zdCB0aGUgbGlidW53aW5kIGxpYnJhcnkuCi0KLUZpeGVkIGJ5IGFkZGluZyB0aGUgYXBwcm9wcmlhdGUgTERBREQgbWFjcm8uCi0KLVNpZ25lZC1vZmYtYnk6IFVscmljaCBXZWlnYW5kIDxhZGRyZXNzQGhpZGRlbj4KLS0tLQotIHRlc3RzL01ha2VmaWxlLmFtIHwgMSArCi0gMSBmaWxlIGNoYW5nZWQsIDEgaW5zZXJ0aW9uKCspCi0KLWRpZmYgLS1naXQgYS90ZXN0cy9NYWtlZmlsZS5hbSBiL3Rlc3RzL01ha2VmaWxlLmFtCi1pbmRleCAwZTMwNTM2Li45Yzc2NjI4IDEwMDY0NAotLS0tIGEvdGVzdHMvTWFrZWZpbGUuYW0KLSsrKyBiL3Rlc3RzL01ha2VmaWxlLmFtCi1AQCAtMjAxLDMgKzIwMSw0IEBAIExpYTY0X3Rlc3RfcmJzX0xEQUREID0gJChMSUJVTldJTkRfbG9jYWwpCi0gTGlhNjRfdGVzdF9yZWFkb25seV9MREFERCA9ICQoTElCVU5XSU5EX2xvY2FsKQotIGlhNjRfdGVzdF9keW4xX0xEQUREID0gJChMSUJVTldJTkQpCi0gaWE2NF90ZXN0X3NpZ19MREFERCA9ICQoTElCVU5XSU5EKQotK3BwYzY0X3Rlc3RfYWx0aXZlY19MREFERCA9ICQoTElCVU5XSU5EKQotLS0gCi0xLjguNQotCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbGlidW53aW5kL2xpYnVud2luZC0xLjEvTGluay1saWJ1bndpbmQtdG8tbGliZ2NjX3MtcmF0aGVyLXRoYW4tbGliZ2NjLnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2xpYnVud2luZC9saWJ1bndpbmQtMS4xL0xpbmstbGlidW53aW5kLXRvLWxpYmdjY19zLXJhdGhlci10aGFuLWxpYmdjYy5wYXRjaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMGU1NWM5MS4uMDAwMDAwMAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbGlidW53aW5kL2xpYnVud2luZC0xLjEvTGluay1saWJ1bndpbmQtdG8tbGliZ2NjX3MtcmF0aGVyLXRoYW4tbGliZ2NjLnBhdGNoCisrKyAvZGV2L251bGwKQEAgLTEsNDIgKzAsMCBAQAotRnJvbSA1MDhjYTE3YTdiZTAxZDFjYzk2MGQ5YTA3ZDBhZjQ1MTM5NDhmYjhkIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQotRnJvbTogVGhpZXJyeSBSZWRpbmcgPHRyZWRpbmdAbnZpZGlhLmNvbT4KLURhdGU6IEZyaSwgMjcgSnVuIDIwMTQgMDg6NDA6MzMgKzAyMDAKLVN1YmplY3Q6IFtQQVRDSF0gTGluayBsaWJ1bndpbmQgdG8gbGliZ2NjX3MgcmF0aGVyIHRoYW4gbGliZ2NjCi0KLUZvciBzb21lIGFyY2hpdGVjdHVyZXMsIC1sZ2NjIGFuZCAtbGdjY19zIGFyZSBub3QgZXF1aXZhbGVudC4gT24gQVJNIGZvcgotZXhhbXBsZSwgbGliZ2NjX3Muc28uMSBjb250YWlucyBzb21lIHN5bWJvbHMgbmVlZGVkIGJ5IGxpYnVud2luZCB3aGljaAotYXJlIG5vdCBwcmVzZW50IGluIGxpYmdjYy4KLQotVGhpcyBjYXVzZXMgdGhlIGZvbGxvd2luZyBsaW5rIGVycm9yIHdoZW4gYnVpbGRpbmcgdGhlIFguT3JnIFggc2VydmVyCi13aXRoIGxpYnVud2luZCBzdXBwb3J0OgotCi0JICBDQ0xEICAgICBYb3JnCi0JL3Vzci9saWIvbGlidW53aW5kLnNvOiB1bmRlZmluZWQgcmVmZXJlbmNlIHRvIGBfX2FlYWJpX3Vud2luZF9jcHBfcHIwJwotCS91c3IvbGliL2xpYnVud2luZC5zbzogdW5kZWZpbmVkIHJlZmVyZW5jZSB0byBgX19hZWFiaV91bndpbmRfY3BwX3ByMScKLQotTGlua2luZyBhZ2FpbnN0IGxpYmdjY19zIGV4cGxpY2l0bHkgc29sdmVzIHRoaXMgcHJvYmxlbS4KLQotVXBzdHJlYW0tU3RhdHVzOiBCYWNrcG9ydAotCi1TaWduZWQtb2ZmLWJ5OiBUaGllcnJ5IFJlZGluZyA8dHJlZGluZ0BudmlkaWEuY29tPgotU2lnbmVkLW9mZi1ieTogSm9uYXRoYW4gTGl1IDxuZXQxNDdAZ21haWwuY29tPgotLS0tCi0gY29uZmlndXJlLmFjIHwgMiArLQotIDEgZmlsZSBjaGFuZ2VkLCAxIGluc2VydGlvbigrKSwgMSBkZWxldGlvbigtKQotCi1kaWZmIC0tZ2l0IGEvY29uZmlndXJlLmFjIGIvY29uZmlndXJlLmFjCi1pbmRleCBjZmZlMTliLi4zYmViNWYyIDEwMDY0NAotLS0tIGEvY29uZmlndXJlLmFjCi0rKysgYi9jb25maWd1cmUuYWMKLUBAIC0yNTgsNyArMjU4LDcgQEAgQUNfQ09NUElMRV9JRkVMU0UoW0FDX0xBTkdfUFJPR1JBTShbW11dLCBbWyNpZm5kZWYgX19JTlRFTF9DT01QSUxFUgotIAotIGlmIHRlc3QgeCRHQ0MgPSB4eWVzIC1hIHgkaW50ZWxfY29tcGlsZXIgIT0geHllczsgdGhlbgotICAgQ0ZMQUdTPSIke0NGTEFHU30gLWZleGNlcHRpb25zIC1XYWxsIC1Xc2lnbi1jb21wYXJlIgotLSAgTElCQ1JUUz0iLWxnY2MiCi0rICBMSUJDUlRTPSItbGdjY19zIgotIGZpCi0gQUNfTVNHX1JFU1VMVChbJGludGVsX2NvbXBpbGVyXSkKLSAKLS0tIAotMi4zLjIKLQpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2xpYnVud2luZC9saWJ1bndpbmQtMS4xL1N1cHBvcnQtYnVpbGRpbmctd2l0aC1vbGRlci1jb21waWxlcnMucGF0Y2ggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbGlidW53aW5kL2xpYnVud2luZC0xLjEvU3VwcG9ydC1idWlsZGluZy13aXRoLW9sZGVyLWNvbXBpbGVycy5wYXRjaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjY4YjcwMi4uMDAwMDAwMAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbGlidW53aW5kL2xpYnVud2luZC0xLjEvU3VwcG9ydC1idWlsZGluZy13aXRoLW9sZGVyLWNvbXBpbGVycy5wYXRjaAorKysgL2Rldi9udWxsCkBAIC0xLDcyICswLDAgQEAKLUZyb20gMTBiMDY0ZmZlOTAyZDVhZjMxYmI0OWJkOGU0ZjAzYzU0NWY4ZDQ2MiBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKLUZyb206IExhZGlzbGF2IE1pY2hsIDxsYWRpc0BsaW51eC1taXBzLm9yZz4KLURhdGU6IFR1ZSwgMTMgTm92IDIwMTIgMTE6MTk6NDcgKzAxMDAKLVN1YmplY3Q6IFtQQVRDSF0gU3VwcG9ydCBidWlsZGluZyB3aXRoIG9sZGVyIGNvbXBpbGVycy4KLQotQWRkIGEgY2hlY2sgZm9yIF9fYnVpbHRpbl91bnJlYWNoYWJsZS4KLQotVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCi0tLS0KLSBjb25maWd1cmUuYWMgICAgICAgICAgfCAgIDExICsrKysrKysrKysrCi0gaW5jbHVkZS9saWJ1bndpbmRfaS5oIHwgICAgNiArKysrKysKLSBzcmMvYXJtL0dyZXN1bWUuYyAgICAgfCAgICAyICstCi0gc3JjL3NoL0dyZXN1bWUuYyAgICAgIHwgICAgMiArLQotIDQgZmlsZXMgY2hhbmdlZCwgMTkgaW5zZXJ0aW9ucygrKSwgMiBkZWxldGlvbnMoLSkKLQotLS0tIGEvY29uZmlndXJlLmFjCi0rKysgYi9jb25maWd1cmUuYWMKLUBAIC0yODUsNiArMjg1LDE3IEBAIGlmIHRlc3QgeCRoYXZlX19idWlsdGluX19fY2xlYXJfY2FjaGUgPQotIGZpCi0gQUNfTVNHX1JFU1VMVChbJGhhdmVfX2J1aWx0aW5fX19jbGVhcl9jYWNoZV0pCi0gCi0rQUNfTVNHX0NIRUNLSU5HKFtmb3IgX19idWlsdGluX3VucmVhY2hhYmxlXSkKLStBQ19MSU5LX0lGRUxTRSgKLSsgIFtBQ19MQU5HX1BST0dSQU0oW1tdXSwgW1tfX2J1aWx0aW5fdW5yZWFjaGFibGUoKV1dKV0sCi0rICBbaGF2ZV9fYnVpbHRpbl91bnJlYWNoYWJsZT15ZXNdLAotKyAgW2hhdmVfX2J1aWx0aW5fdW5yZWFjaGFibGU9bm9dKQotK2lmIHRlc3QgeCRoYXZlX19idWlsdGluX3VucmVhY2hhYmxlID0geHllczsgdGhlbgotKyAgQUNfREVGSU5FKFtIQVZFX19CVUlMVElOX1VOUkVBQ0hBQkxFXSwgWzFdLAotKyAgICAgICAgICAgIFtEZWZpbmVkIGlmIF9fYnVpbHRpbl91bnJlYWNoYWJsZSgpIGlzIGF2YWlsYWJsZV0pCi0rZmkKLStBQ19NU0dfUkVTVUxUKFskaGF2ZV9fYnVpbHRpbl91bnJlYWNoYWJsZV0pCi0rCi0gQUNfTVNHX0NIRUNLSU5HKFtmb3IgX19zeW5jIGF0b21pY3NdKQotIEFDX0xJTktfSUZFTFNFKAotICAgW0FDX0xBTkdfUFJPR1JBTShbW11dLCBbWwotLS0tIGEvaW5jbHVkZS9saWJ1bndpbmRfaS5oCi0rKysgYi9pbmNsdWRlL2xpYnVud2luZF9pLmgKLUBAIC03Miw2ICs3MiwxMiBAQCBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFCi0gIyBlbmRpZgotICNlbmRpZgotIAotKyNpZiBkZWZpbmVkKEhBVkVfX0JVSUxUSU5fVU5SRUFDSEFCTEUpCi0rIyBkZWZpbmUgdW5yZWFjaGFibGUoKSBfX2J1aWx0aW5fdW5yZWFjaGFibGUoKQotKyNlbHNlCi0rIyBkZWZpbmUgdW5yZWFjaGFibGUoKSBkbyB7IH0gd2hpbGUgKDEpCi0rI2VuZGlmCi0rCi0gI2lmZGVmIERFQlVHCi0gIyBkZWZpbmUgVU5XX0RFQlVHCTEKLSAjZWxzZQotLS0tIGEvc3JjL2FybS9HcmVzdW1lLmMKLSsrKyBiL3NyYy9hcm0vR3Jlc3VtZS5jCi1AQCAtOTYsNyArOTYsNyBAQCBhcm1fbG9jYWxfcmVzdW1lICh1bndfYWRkcl9zcGFjZV90IGFzLCB1Ci0gCTogOiAiciIgKGMtPnNpZ2NvbnRleHRfc3ApLCAiciIgKGMtPnNpZ2NvbnRleHRfcGMpCi0gICAgICAgKTsKLSAgICB9Ci0tICBfX2J1aWx0aW5fdW5yZWFjaGFibGUoKTsKLSsgIHVucmVhY2hhYmxlKCk7Ci0gI2Vsc2UKLSAgIHByaW50ZiAoIiVzOiBpbXBsZW1lbnQgbWVcbiIsIF9fRlVOQ1RJT05fXyk7Ci0gI2VuZGlmCi0tLS0gYS9zcmMvc2gvR3Jlc3VtZS5jCi0rKysgYi9zcmMvc2gvR3Jlc3VtZS5jCi1AQCAtMTA5LDcgKzEwOSw3IEBAIHNoX2xvY2FsX3Jlc3VtZSAodW53X2FkZHJfc3BhY2VfdCBhcywgdW4KLSAJICAiciIgKGMtPnNpZ2NvbnRleHRfcGMpCi0gICAgICAgKTsKLSAgICB9Ci0tICBfX2J1aWx0aW5fdW5yZWFjaGFibGUoKTsKLSsgIHVucmVhY2hhYmxlKCk7Ci0gI2VuZGlmCi0gICByZXR1cm4gLVVOV19FSU5WQUw7Ci0gfQpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2xpYnVud2luZC9saWJ1bndpbmQuaW5jIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2xpYnVud2luZC9saWJ1bndpbmQuaW5jCmluZGV4IDFjMzQyZDMuLmU0YWU4ZGYgMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9saWJ1bndpbmQvbGlidW53aW5kLmluYworKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbGlidW53aW5kL2xpYnVud2luZC5pbmMKQEAgLTE4LDE1ICsxOCw2IEBACiBBVE9NSUNPUFNfYXJtdjQgPSAiLURBT19VU0VfUFRIUkVBRF9ERUZTPTEiCiBBVE9NSUNPUFMgPz0gIiIKIAotTERGTEFHU19hcHBlbmRfeDg2ID0gIiAtZnVzZS1sZD1nb2xkIgotTERGTEFHU19hcHBlbmRfeDg2LTY0ID0gIiAtZnVzZS1sZD1nb2xkIgotCi1MREZMQUdTX2FwcGVuZF9hcm0gPSAiIC1mdXNlLWxkPWdvbGQiCi1MREZMQUdTX2FwcGVuZF9hYXJjaDY0ID0gIiAtZnVzZS1sZD1nb2xkIgotCi1MREZMQUdTX2FwcGVuZF9wb3dlcnBjID0gIiAtZnVzZS1sZD1nb2xkIC1tYnNzLXBsdCIKLUxERkxBR1NfYXBwZW5kX3Bvd2VycGM2NCA9ICIgLWZ1c2UtbGQ9Z29sZCAtbWJzcy1wbHQiCi0KIFNFQ1VSSVRZX0xERkxBR1NfYXBwZW5kX2xpYmMtbXVzbCA9ICIgLWxzc3Bfbm9uc2hhcmVkIC1sc3NwIgogCiBCQkNMQVNTRVhURU5EID0gIm5hdGl2ZSIKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9saWJ1bndpbmQvbGlidW53aW5kLzAwMDEtRml4LWJ1aWxkLW9uLW1pcHMtbXVzbC5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9saWJ1bndpbmQvbGlidW53aW5kLzAwMDEtRml4LWJ1aWxkLW9uLW1pcHMtbXVzbC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44YmNjMjUyCi0tLSAvZGV2L251bGwKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2xpYnVud2luZC9saWJ1bndpbmQvMDAwMS1GaXgtYnVpbGQtb24tbWlwcy1tdXNsLnBhdGNoCkBAIC0wLDAgKzEsODEgQEAKK0Zyb20gZTYyM2M3NzAzOTQ1YTVlYjZjOWEzMDU4NmVjNWUyM2IyZjczOTZmNiBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CitEYXRlOiBXZWQsIDIzIE1hciAyMDE2IDA2OjA4OjU5ICswMDAwCitTdWJqZWN0OiBbUEFUQ0hdIEZpeCBidWlsZCBvbiBtaXBzL211c2wKKworRG8gbm90IGluY2x1ZGUgZW5kaWFuLmggb24gbXVzbCBpdCBpbmNsdWRlcworZnVydGhlciBoZWFkZXJzIHdoaWNoIGNhbiBub3QgYmUgY29tcGlsZWQgaW4gX19BU1NFTUJMRVJfXworIG1vZGUKKworU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KKy0tLQorVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKKyBzcmMvY29yZWR1bXAvX1VDRF9pbnRlcm5hbC5oIHwgMzQgKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKworIHNyYy9taXBzL2dldGNvbnRleHQuUyAgICAgICAgfCAgMyArLS0KKyAyIGZpbGVzIGNoYW5nZWQsIDM1IGluc2VydGlvbnMoKyksIDIgZGVsZXRpb25zKC0pCisKK0luZGV4OiBnaXQvc3JjL2NvcmVkdW1wL19VQ0RfaW50ZXJuYWwuaAorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGdpdC5vcmlnL3NyYy9jb3JlZHVtcC9fVUNEX2ludGVybmFsLmgKKysrKyBnaXQvc3JjL2NvcmVkdW1wL19VQ0RfaW50ZXJuYWwuaAorQEAgLTQ0LDYgKzQ0LDQxIEBAIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREUKKyAKKyAjaW5jbHVkZSAibGlidW53aW5kX2kuaCIKKyAKKysjaWZuZGVmIF9fR0xJQkNfXworKyNpbmNsdWRlIDxzeXMvcmVnLmg+CisrCisrI2RlZmluZSBFRl9SRUcwCQkJNgorKyNkZWZpbmUgRUZfUkVHMQkJCTcKKysjZGVmaW5lIEVGX1JFRzIJCQk4CisrI2RlZmluZSBFRl9SRUczCQkJOQorKyNkZWZpbmUgRUZfUkVHNAkJCTEwCisrI2RlZmluZSBFRl9SRUc1CQkJMTEKKysjZGVmaW5lIEVGX1JFRzYJCQkxMgorKyNkZWZpbmUgRUZfUkVHNwkJCTEzCisrI2RlZmluZSBFRl9SRUc4CQkJMTQKKysjZGVmaW5lIEVGX1JFRzkJCQkxNQorKyNkZWZpbmUgRUZfUkVHMTAJCTE2CisrI2RlZmluZSBFRl9SRUcxMQkJMTcKKysjZGVmaW5lIEVGX1JFRzEyCQkxOAorKyNkZWZpbmUgRUZfUkVHMTMJCTE5CisrI2RlZmluZSBFRl9SRUcxNAkJMjAKKysjZGVmaW5lIEVGX1JFRzE1CQkyMQorKyNkZWZpbmUgRUZfUkVHMTYJCTIyCisrI2RlZmluZSBFRl9SRUcxNwkJMjMKKysjZGVmaW5lIEVGX1JFRzE4CQkyNAorKyNkZWZpbmUgRUZfUkVHMTkJCTI1CisrI2RlZmluZSBFRl9SRUcyMAkJMjYKKysjZGVmaW5lIEVGX1JFRzIxCQkyNworKyNkZWZpbmUgRUZfUkVHMjIJCTI4CisrI2RlZmluZSBFRl9SRUcyMwkJMjkKKysjZGVmaW5lIEVGX1JFRzI0CQkzMAorKyNkZWZpbmUgRUZfUkVHMjUJCTMxCisrI2RlZmluZSBFRl9SRUcyOAkJMzQKKysjZGVmaW5lIEVGX1JFRzI5CQkzNQorKyNkZWZpbmUgRUZfUkVHMzAJCTM2CisrI2RlZmluZSBFRl9SRUczMQkJMzcKKysjZW5kaWYKKysKKyAKKyAjaWYgU0laRU9GX09GRl9UID09IDQKKyB0eXBlZGVmIHVpbnQzMl90IHVvZmZfdDsKK0luZGV4OiBnaXQvc3JjL21pcHMvZ2V0Y29udGV4dC5TCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZ2l0Lm9yaWcvc3JjL21pcHMvZ2V0Y29udGV4dC5TCisrKysgZ2l0L3NyYy9taXBzL2dldGNvbnRleHQuUworQEAgLTI0LDEyICsyNCwxMSBAQCBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcKKyBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4gICovCisgCisgI2luY2x1ZGUgIm9mZnNldHMuaCIKKy0jaW5jbHVkZSA8ZW5kaWFuLmg+CisgCisgCS50ZXh0CisgCisgI2lmIF9NSVBTX1NJTSA9PSBfQUJJTzMyCistIyBpZiBfX0JZVEVfT1JERVIgPT0gX19CSUdfRU5ESUFOCisrIyBpZiBfX0JZVEVfT1JERVJfXyA9PSBfX09SREVSX0JJR19FTkRJQU5fXworICMgIGRlZmluZSBPRkZTRVQgNAorICMgZWxzZQorICMgIGRlZmluZSBPRkZTRVQgMApkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2xpYnVud2luZC9saWJ1bndpbmQvMDAwMS1hZGQta25vYnMtdG8tZGlzYWJsZS1lbmFibGUtdGVzdHMucGF0Y2ggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbGlidW53aW5kL2xpYnVud2luZC8wMDAxLWFkZC1rbm9icy10by1kaXNhYmxlLWVuYWJsZS10ZXN0cy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42NzNhNWJiCi0tLSAvZGV2L251bGwKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2xpYnVud2luZC9saWJ1bndpbmQvMDAwMS1hZGQta25vYnMtdG8tZGlzYWJsZS1lbmFibGUtdGVzdHMucGF0Y2gKQEAgLTAsMCArMSw2OSBAQAorRnJvbSA0NTllNDcxZmNjMzNkMzAwZjdiYmNkYWYzZTBkYzMzOGQ5ZGMxNWI5IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KK0RhdGU6IFNhdCwgMzAgQXByIDIwMTYgMTY6NTY6MzQgKzAwMDAKK1N1YmplY3Q6IFtQQVRDSF0gYWRkIGtub2JzIHRvIGRpc2FibGUvZW5hYmxlIHRlc3RzCisKK1NvbWUgdGVzdHMgZG8gbm90IGNvbXBpbGUgb24gbXVzbCBsaWJjCitpbiBnZW5lcmFsIGl0cyBnb29kIHRvIGhhdmUgc3VjaCBhIGtub2IKK3NpbmNlIG5vdCBhbGwgYnVpbGRzIG1heSB3YW50IHRvIGVuYWJsZQordGVzdHMKKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK1NpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CistLS0KKyBNYWtlZmlsZS5hbSAgfCAgNiArKysrKy0KKyBjb25maWd1cmUuYWMgfCAxMiArKysrKysrKysrLS0KKyAyIGZpbGVzIGNoYW5nZWQsIDE1IGluc2VydGlvbnMoKyksIDMgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9NYWtlZmlsZS5hbSBiL01ha2VmaWxlLmFtCitpbmRleCA2YTNlZDllLi4wYzI5YjNlIDEwMDY0NAorLS0tIGEvTWFrZWZpbGUuYW0KKysrKyBiL01ha2VmaWxlLmFtCitAQCAtNDIsNyArNDIsMTEgQEAgZW5kaWYKKyAKKyBub2Rpc3RfaW5jbHVkZV9IRUFERVJTID0gaW5jbHVkZS9saWJ1bndpbmQtY29tbW9uLmgKKyAKKy1TVUJESVJTID0gc3JjIHRlc3RzCisrU1VCRElSUyA9IHNyYworKworK2lmIENPTkZJR19URVNUUworK1NVQkRJUlMgKz0gdGVzdHMKKytlbmRpZgorIAorIGlmIENPTkZJR19ET0NTCisgU1VCRElSUyArPSBkb2MKK2RpZmYgLS1naXQgYS9jb25maWd1cmUuYWMgYi9jb25maWd1cmUuYWMKK2luZGV4IDg1ZDc4ZjguLmQzNjIzODcgMTAwNjQ0CistLS0gYS9jb25maWd1cmUuYWMKKysrKyBiL2NvbmZpZ3VyZS5hYworQEAgLTEyOSw2ICsxMjksMTAgQEAgQUNfQVJHX0VOQUJMRShkb2N1bWVudGF0aW9uLAorIAlBU19IRUxQX1NUUklORyhbLS1kaXNhYmxlLWRvY3VtZW50YXRpb25dLFtEaXNhYmxlIGdlbmVyYXRpbmcgdGhlIG1hbiBwYWdlc10pLCwKKyAJW2VuYWJsZV9kb2N1bWVudGF0aW9uPXllc10pCisgCisrQUNfQVJHX0VOQUJMRSh0ZXN0cywKKysJQVNfSEVMUF9TVFJJTkcoWy0tZGlzYWJsZS10ZXN0c10sW0Rpc2FibGUgYnVpbGRpbmcgdGVzdHNdKSwsCisrCVtlbmFibGVfdGVzdHM9eWVzXSkKKysKKyBBQ19NU0dfQ0hFQ0tJTkcoW2lmIHdlIHNob3VsZCBidWlsZCBsaWJ1bndpbmQtc2V0am1wXSkKKyBBQ19NU0dfUkVTVUxUKFskZW5hYmxlX3NldGptcF0pCisgCitAQCAtMzk1LDkgKzM5OSwxMyBAQCBBTV9DT05ESVRJT05BTChbQ09ORklHX0RPQ1NdLCBbdGVzdCB4JGVuYWJsZV9kb2N1bWVudGF0aW9uID0geHllc10pCisgaWYgdGVzdCAieCRlbmFibGVfZG9jdW1lbnRhdGlvbiIgPSAieHllcyI7IHRoZW4KKyAgIEFDX0NPTkZJR19GSUxFUyhkb2MvTWFrZWZpbGUgZG9jL2NvbW1vbi50ZXgpCisgZmkKKytBTV9DT05ESVRJT05BTChbQ09ORklHX1RFU1RTXSwgW3Rlc3QgeCRlbmFibGVfdGVzdHMgPSB4eWVzXSkKKytpZiB0ZXN0ICJ4JGVuYWJsZV90ZXN0cyIgPSAieHllcyI7IHRoZW4KKysgIEFDX0NPTkZJR19GSUxFUyh0ZXN0cy9NYWtlZmlsZSB0ZXN0cy9jaGVjay1uYW1lc3BhY2Uuc2gpCisrZmkKKysKKyAKKy1BQ19DT05GSUdfRklMRVMoTWFrZWZpbGUgc3JjL01ha2VmaWxlIHRlc3RzL01ha2VmaWxlIHRlc3RzL2NoZWNrLW5hbWVzcGFjZS5zaAorLQkJaW5jbHVkZS9saWJ1bndpbmQtY29tbW9uLmgKKytBQ19DT05GSUdfRklMRVMoTWFrZWZpbGUgc3JjL01ha2VmaWxlIGluY2x1ZGUvbGlidW53aW5kLWNvbW1vbi5oCisgICAgICAgICAgICAgICAgIGluY2x1ZGUvbGlidW53aW5kLmggaW5jbHVkZS90ZGVwL2xpYnVud2luZF9pLmgpCisgQUNfQ09ORklHX0ZJTEVTKHNyYy91bndpbmQvbGlidW53aW5kLnBjIHNyYy9jb3JlZHVtcC9saWJ1bndpbmQtY29yZWR1bXAucGMKKyAgICAgICAgICAgICAgICAgc3JjL3B0cmFjZS9saWJ1bndpbmQtcHRyYWNlLnBjIHNyYy9zZXRqbXAvbGlidW53aW5kLXNldGptcC5wYworLS0gCisxLjguMy4xCisKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9saWJ1bndpbmQvbGlidW53aW5kLTEuMS8wMDAxLWJhY2t0cmFjZS1Vc2Utb25seS13aXRoLWdsaWJjLWFuZC11Y2xpYmMucGF0Y2ggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbGlidW53aW5kL2xpYnVud2luZC8wMDAxLWJhY2t0cmFjZS1Vc2Utb25seS13aXRoLWdsaWJjLWFuZC11Y2xpYmMucGF0Y2gKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9saWJ1bndpbmQvbGlidW53aW5kLTEuMS8wMDAxLWJhY2t0cmFjZS1Vc2Utb25seS13aXRoLWdsaWJjLWFuZC11Y2xpYmMucGF0Y2gKcmVuYW1lIHRvIGltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9saWJ1bndpbmQvbGlidW53aW5kLzAwMDEtYmFja3RyYWNlLVVzZS1vbmx5LXdpdGgtZ2xpYmMtYW5kLXVjbGliYy5wYXRjaApkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2xpYnVud2luZC9saWJ1bndpbmQvMDAwMS1wcGMzMi1Db25zaWRlci11Y29udGV4dC1taXNtYXRjaGVzLWJldHdlZW4tZ2xpYmMtYW5kLnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2xpYnVud2luZC9saWJ1bndpbmQvMDAwMS1wcGMzMi1Db25zaWRlci11Y29udGV4dC1taXNtYXRjaGVzLWJldHdlZW4tZ2xpYmMtYW5kLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNhMDY0MWYKLS0tIC9kZXYvbnVsbAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbGlidW53aW5kL2xpYnVud2luZC8wMDAxLXBwYzMyLUNvbnNpZGVyLXVjb250ZXh0LW1pc21hdGNoZXMtYmV0d2Vlbi1nbGliYy1hbmQucGF0Y2gKQEAgLTAsMCArMSwyNDggQEAKK0Zyb20gZTBlZWE1M2M3N2ZjZTg1MzdjNThhMDcyYjY4NDA0MzUwNzk4N2JjYyBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CitEYXRlOiBTYXQsIDkgSnVsIDIwMTYgMDE6MDc6NTMgKzAwMDAKK1N1YmplY3Q6IFtQQVRDSF0gcHBjMzI6IENvbnNpZGVyIHVjb250ZXh0IG1pc21hdGNoZXMgYmV0d2VlbiBnbGliYyBhbmQgbXVzbAorCitUaGlzIGhlbHBzIGluIHBvcnRpbmcgbGlidW53aW5kIG9udG8gbXVzbCBiYXNlZCBzeXN0ZW1zCitwdHJhY2UuaCBjaGFuZ2UgaXMgcmVxdWlyZWQgYWdhaW4gYW4gZXJyb3IgdGhhdCBzdXJmYWNlcword2l0aCBtdXNsCisKKy9tbnQvb2Uvb3BlbmVtYmVkZGVkLWNvcmUvYnVpbGQvdG1wLW11c2wvc3lzcm9vdHMvcWVtdXBwYy91c3IvaW5jbHVkZS9hc20vcHRyYWNlLmg6MzE6ODogZXJyb3I6IHJlZGVmaW5pdGlvbiBvZiAnc3RydWN0IHB0X3JlZ3MnCisgc3RydWN0IHB0X3JlZ3MgeworICAgICAgICBefn5+fn5+CitJbiBmaWxlIGluY2x1ZGVkIGZyb20gL21udC9vZS9vcGVuZW1iZWRkZWQtY29yZS9idWlsZC90bXAtbXVzbC9zeXNyb290cy9xZW11cHBjL3Vzci9pbmNsdWRlL3N5cy91c2VyLmg6MTE6MCwKKyAgICAgICAgICAgICAgICAgZnJvbSAvbW50L29lL29wZW5lbWJlZGRlZC1jb3JlL2J1aWxkL3RtcC1tdXNsL3N5c3Jvb3RzL3FlbXVwcGMvdXNyL2luY2x1ZGUvc3lzL3Byb2Nmcy5oOjksCisgICAgICAgICAgICAgICAgIGZyb20gLi4vLi4vZ2l0L3NyYy9wdHJhY2UvX1VQVF9pbnRlcm5hbC5oOjQwLAorICAgICAgICAgICAgICAgICBmcm9tIC4uLy4uL2dpdC9zcmMvcHRyYWNlL19VUFRfcmVnX29mZnNldC5jOjI3OgorL21udC9vZS9vcGVuZW1iZWRkZWQtY29yZS9idWlsZC90bXAtbXVzbC9zeXNyb290cy9xZW11cHBjL3Vzci9pbmNsdWRlL2JpdHMvdXNlci5oOjE6ODogbm90ZTogb3JpZ2luYWxseSBkZWZpbmVkIGhlcmUKKyBzdHJ1Y3QgcHRfcmVncyB7CisgICAgICAgIF5+fn5+fn4KKworU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KKy0tLQorVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKKyBzcmMvcHBjMzIvR2luaXQuYyAgICAgICAgICAgIHwgICA2ICstCisgc3JjL3BwYzMyL3Vjb250ZXh0X2kuaCAgICAgICB8IDE1OCArKysrKysrKysrKysrKysrKysrKysrLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgc3JjL3B0cmFjZS9fVVBUX3JlZ19vZmZzZXQuYyB8ICAgNyArKworIDMgZmlsZXMgY2hhbmdlZCwgOTIgaW5zZXJ0aW9ucygrKSwgNzkgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9zcmMvcHBjMzIvR2luaXQuYyBiL3NyYy9wcGMzMi9HaW5pdC5jCitpbmRleCBmMmU2ZTgyLi42MTdhYWExIDEwMDY0NAorLS0tIGEvc3JjL3BwYzMyL0dpbml0LmMKKysrKyBiL3NyYy9wcGMzMi9HaW5pdC5jCitAQCAtNDgsMTIgKzQ4LDEyIEBAIHVjX2FkZHIgKHVjb250ZXh0X3QgKnVjLCBpbnQgcmVnKQorICAgdm9pZCAqYWRkcjsKKyAKKyAgIGlmICgodW5zaWduZWQpIChyZWcgLSBVTldfUFBDMzJfUjApIDwgMzIpCistICAgIGFkZHIgPSAmdWMtPnVjX21jb250ZXh0LnVjX3JlZ3MtPmdyZWdzW3JlZyAtIFVOV19QUEMzMl9SMF07CisrICAgIGFkZHIgPSAmdWMtPkdFVF9VQ19SRUdTLT5ncmVnc1tyZWcgLSBVTldfUFBDMzJfUjBdOworIAorICAgZWxzZQorICAgaWYgKCAoKHVuc2lnbmVkKSAocmVnIC0gVU5XX1BQQzMyX0YwKSA8IDMyKSAmJgorICAgICAgICAoKHVuc2lnbmVkKSAocmVnIC0gVU5XX1BQQzMyX0YwKSA+PSAwKSApCistICAgIGFkZHIgPSAmdWMtPnVjX21jb250ZXh0LnVjX3JlZ3MtPmZwcmVncy5mcHJlZ3NbcmVnIC0gVU5XX1BQQzMyX0YwXTsKKysgICAgYWRkciA9ICZ1Yy0+R0VUX1VDX1JFR1MtPmZwcmVncy5mcHJlZ3NbcmVnIC0gVU5XX1BQQzMyX0YwXTsKKyAKKyAgIGVsc2UKKyAgICAgeworQEAgLTc2LDcgKzc2LDcgQEAgdWNfYWRkciAodWNvbnRleHRfdCAqdWMsIGludCByZWcpCisgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgIH0KKy0gICAgICBhZGRyID0gJnVjLT51Y19tY29udGV4dC51Y19yZWdzLT5ncmVnc1tncmVnc19pZHhdOworKyAgICAgIGFkZHIgPSAmdWMtPkdFVF9VQ19SRUdTLT5ncmVnc1tncmVnc19pZHhdOworICAgICB9CisgICByZXR1cm4gYWRkcjsKKyB9CitkaWZmIC0tZ2l0IGEvc3JjL3BwYzMyL3Vjb250ZXh0X2kuaCBiL3NyYy9wcGMzMi91Y29udGV4dF9pLmgKK2luZGV4IGM2YmE4MDYuLmI3OWYxNWMgMTAwNjQ0CistLS0gYS9zcmMvcHBjMzIvdWNvbnRleHRfaS5oCisrKysgYi9zcmMvcHBjMzIvdWNvbnRleHRfaS5oCitAQCAtNDYsODMgKzQ2LDg5IEBAIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLiAgKi8KKyAgICB2YXJpb3VzIHN0cnVjdHVyZSBtZW1iZXJzLiAqLworIHN0YXRpYyB1Y29udGV4dF90IGRteV9jdHh0IFVOVVNFRDsKKyAKKy0jZGVmaW5lIFVDX01DT05URVhUX0dSRUdTX1IwICgodm9pZCAqKSZkbXlfY3R4dC51Y19tY29udGV4dC51Y19yZWdzLT5ncmVnc1swXSAtICh2b2lkICopJmRteV9jdHh0KQorLSNkZWZpbmUgVUNfTUNPTlRFWFRfR1JFR1NfUjEgKCh2b2lkICopJmRteV9jdHh0LnVjX21jb250ZXh0LnVjX3JlZ3MtPmdyZWdzWzFdIC0gKHZvaWQgKikmZG15X2N0eHQpCistI2RlZmluZSBVQ19NQ09OVEVYVF9HUkVHU19SMiAoKHZvaWQgKikmZG15X2N0eHQudWNfbWNvbnRleHQudWNfcmVncy0+Z3JlZ3NbMl0gLSAodm9pZCAqKSZkbXlfY3R4dCkKKy0jZGVmaW5lIFVDX01DT05URVhUX0dSRUdTX1IzICgodm9pZCAqKSZkbXlfY3R4dC51Y19tY29udGV4dC51Y19yZWdzLT5ncmVnc1szXSAtICh2b2lkICopJmRteV9jdHh0KQorLSNkZWZpbmUgVUNfTUNPTlRFWFRfR1JFR1NfUjQgKCh2b2lkICopJmRteV9jdHh0LnVjX21jb250ZXh0LnVjX3JlZ3MtPmdyZWdzWzRdIC0gKHZvaWQgKikmZG15X2N0eHQpCistI2RlZmluZSBVQ19NQ09OVEVYVF9HUkVHU19SNSAoKHZvaWQgKikmZG15X2N0eHQudWNfbWNvbnRleHQudWNfcmVncy0+Z3JlZ3NbNV0gLSAodm9pZCAqKSZkbXlfY3R4dCkKKy0jZGVmaW5lIFVDX01DT05URVhUX0dSRUdTX1I2ICgodm9pZCAqKSZkbXlfY3R4dC51Y19tY29udGV4dC51Y19yZWdzLT5ncmVnc1s2XSAtICh2b2lkICopJmRteV9jdHh0KQorLSNkZWZpbmUgVUNfTUNPTlRFWFRfR1JFR1NfUjcgKCh2b2lkICopJmRteV9jdHh0LnVjX21jb250ZXh0LnVjX3JlZ3MtPmdyZWdzWzddIC0gKHZvaWQgKikmZG15X2N0eHQpCistI2RlZmluZSBVQ19NQ09OVEVYVF9HUkVHU19SOCAoKHZvaWQgKikmZG15X2N0eHQudWNfbWNvbnRleHQudWNfcmVncy0+Z3JlZ3NbOF0gLSAodm9pZCAqKSZkbXlfY3R4dCkKKy0jZGVmaW5lIFVDX01DT05URVhUX0dSRUdTX1I5ICgodm9pZCAqKSZkbXlfY3R4dC51Y19tY29udGV4dC51Y19yZWdzLT5ncmVnc1s5XSAtICh2b2lkICopJmRteV9jdHh0KQorLSNkZWZpbmUgVUNfTUNPTlRFWFRfR1JFR1NfUjEwICgodm9pZCAqKSZkbXlfY3R4dC51Y19tY29udGV4dC51Y19yZWdzLT5ncmVnc1sxMF0gLSAodm9pZCAqKSZkbXlfY3R4dCkKKy0jZGVmaW5lIFVDX01DT05URVhUX0dSRUdTX1IxMSAoKHZvaWQgKikmZG15X2N0eHQudWNfbWNvbnRleHQudWNfcmVncy0+Z3JlZ3NbMTFdIC0gKHZvaWQgKikmZG15X2N0eHQpCistI2RlZmluZSBVQ19NQ09OVEVYVF9HUkVHU19SMTIgKCh2b2lkICopJmRteV9jdHh0LnVjX21jb250ZXh0LnVjX3JlZ3MtPmdyZWdzWzEyXSAtICh2b2lkICopJmRteV9jdHh0KQorLSNkZWZpbmUgVUNfTUNPTlRFWFRfR1JFR1NfUjEzICgodm9pZCAqKSZkbXlfY3R4dC51Y19tY29udGV4dC51Y19yZWdzLT5ncmVnc1sxM10gLSAodm9pZCAqKSZkbXlfY3R4dCkKKy0jZGVmaW5lIFVDX01DT05URVhUX0dSRUdTX1IxNCAoKHZvaWQgKikmZG15X2N0eHQudWNfbWNvbnRleHQudWNfcmVncy0+Z3JlZ3NbMTRdIC0gKHZvaWQgKikmZG15X2N0eHQpCistI2RlZmluZSBVQ19NQ09OVEVYVF9HUkVHU19SMTUgKCh2b2lkICopJmRteV9jdHh0LnVjX21jb250ZXh0LnVjX3JlZ3MtPmdyZWdzWzE1XSAtICh2b2lkICopJmRteV9jdHh0KQorLSNkZWZpbmUgVUNfTUNPTlRFWFRfR1JFR1NfUjE2ICgodm9pZCAqKSZkbXlfY3R4dC51Y19tY29udGV4dC51Y19yZWdzLT5ncmVnc1sxNl0gLSAodm9pZCAqKSZkbXlfY3R4dCkKKy0jZGVmaW5lIFVDX01DT05URVhUX0dSRUdTX1IxNyAoKHZvaWQgKikmZG15X2N0eHQudWNfbWNvbnRleHQudWNfcmVncy0+Z3JlZ3NbMTddIC0gKHZvaWQgKikmZG15X2N0eHQpCistI2RlZmluZSBVQ19NQ09OVEVYVF9HUkVHU19SMTggKCh2b2lkICopJmRteV9jdHh0LnVjX21jb250ZXh0LnVjX3JlZ3MtPmdyZWdzWzE4XSAtICh2b2lkICopJmRteV9jdHh0KQorLSNkZWZpbmUgVUNfTUNPTlRFWFRfR1JFR1NfUjE5ICgodm9pZCAqKSZkbXlfY3R4dC51Y19tY29udGV4dC51Y19yZWdzLT5ncmVnc1sxOV0gLSAodm9pZCAqKSZkbXlfY3R4dCkKKy0jZGVmaW5lIFVDX01DT05URVhUX0dSRUdTX1IyMCAoKHZvaWQgKikmZG15X2N0eHQudWNfbWNvbnRleHQudWNfcmVncy0+Z3JlZ3NbMjBdIC0gKHZvaWQgKikmZG15X2N0eHQpCistI2RlZmluZSBVQ19NQ09OVEVYVF9HUkVHU19SMjEgKCh2b2lkICopJmRteV9jdHh0LnVjX21jb250ZXh0LnVjX3JlZ3MtPmdyZWdzWzIxXSAtICh2b2lkICopJmRteV9jdHh0KQorLSNkZWZpbmUgVUNfTUNPTlRFWFRfR1JFR1NfUjIyICgodm9pZCAqKSZkbXlfY3R4dC51Y19tY29udGV4dC51Y19yZWdzLT5ncmVnc1syMl0gLSAodm9pZCAqKSZkbXlfY3R4dCkKKy0jZGVmaW5lIFVDX01DT05URVhUX0dSRUdTX1IyMyAoKHZvaWQgKikmZG15X2N0eHQudWNfbWNvbnRleHQudWNfcmVncy0+Z3JlZ3NbMjNdIC0gKHZvaWQgKikmZG15X2N0eHQpCistI2RlZmluZSBVQ19NQ09OVEVYVF9HUkVHU19SMjQgKCh2b2lkICopJmRteV9jdHh0LnVjX21jb250ZXh0LnVjX3JlZ3MtPmdyZWdzWzI0XSAtICh2b2lkICopJmRteV9jdHh0KQorLSNkZWZpbmUgVUNfTUNPTlRFWFRfR1JFR1NfUjI1ICgodm9pZCAqKSZkbXlfY3R4dC51Y19tY29udGV4dC51Y19yZWdzLT5ncmVnc1syNV0gLSAodm9pZCAqKSZkbXlfY3R4dCkKKy0jZGVmaW5lIFVDX01DT05URVhUX0dSRUdTX1IyNiAoKHZvaWQgKikmZG15X2N0eHQudWNfbWNvbnRleHQudWNfcmVncy0+Z3JlZ3NbMjZdIC0gKHZvaWQgKikmZG15X2N0eHQpCistI2RlZmluZSBVQ19NQ09OVEVYVF9HUkVHU19SMjcgKCh2b2lkICopJmRteV9jdHh0LnVjX21jb250ZXh0LnVjX3JlZ3MtPmdyZWdzWzI3XSAtICh2b2lkICopJmRteV9jdHh0KQorLSNkZWZpbmUgVUNfTUNPTlRFWFRfR1JFR1NfUjI4ICgodm9pZCAqKSZkbXlfY3R4dC51Y19tY29udGV4dC51Y19yZWdzLT5ncmVnc1syOF0gLSAodm9pZCAqKSZkbXlfY3R4dCkKKy0jZGVmaW5lIFVDX01DT05URVhUX0dSRUdTX1IyOSAoKHZvaWQgKikmZG15X2N0eHQudWNfbWNvbnRleHQudWNfcmVncy0+Z3JlZ3NbMjldIC0gKHZvaWQgKikmZG15X2N0eHQpCistI2RlZmluZSBVQ19NQ09OVEVYVF9HUkVHU19SMzAgKCh2b2lkICopJmRteV9jdHh0LnVjX21jb250ZXh0LnVjX3JlZ3MtPmdyZWdzWzMwXSAtICh2b2lkICopJmRteV9jdHh0KQorLSNkZWZpbmUgVUNfTUNPTlRFWFRfR1JFR1NfUjMxICgodm9pZCAqKSZkbXlfY3R4dC51Y19tY29udGV4dC51Y19yZWdzLT5ncmVnc1szMV0gLSAodm9pZCAqKSZkbXlfY3R4dCkKKysjaWZkZWYgX19HTElCQ19fCisrI2RlZmluZSBHRVRfVUNfUkVHUyB1Y19tY29udGV4dC51Y19yZWdzCisrI2Vsc2UKKysjZGVmaW5lIEdFVF9VQ19SRUdTIHVjX3JlZ3MKKysjZW5kaWYKKysKKysjZGVmaW5lIFVDX01DT05URVhUX0dSRUdTX1IwICgodm9pZCAqKSZkbXlfY3R4dC5HRVRfVUNfUkVHUy0+Z3JlZ3NbMF0gLSAodm9pZCAqKSZkbXlfY3R4dCkKKysjZGVmaW5lIFVDX01DT05URVhUX0dSRUdTX1IxICgodm9pZCAqKSZkbXlfY3R4dC5HRVRfVUNfUkVHUy0+Z3JlZ3NbMV0gLSAodm9pZCAqKSZkbXlfY3R4dCkKKysjZGVmaW5lIFVDX01DT05URVhUX0dSRUdTX1IyICgodm9pZCAqKSZkbXlfY3R4dC5HRVRfVUNfUkVHUy0+Z3JlZ3NbMl0gLSAodm9pZCAqKSZkbXlfY3R4dCkKKysjZGVmaW5lIFVDX01DT05URVhUX0dSRUdTX1IzICgodm9pZCAqKSZkbXlfY3R4dC5HRVRfVUNfUkVHUy0+Z3JlZ3NbM10gLSAodm9pZCAqKSZkbXlfY3R4dCkKKysjZGVmaW5lIFVDX01DT05URVhUX0dSRUdTX1I0ICgodm9pZCAqKSZkbXlfY3R4dC5HRVRfVUNfUkVHUy0+Z3JlZ3NbNF0gLSAodm9pZCAqKSZkbXlfY3R4dCkKKysjZGVmaW5lIFVDX01DT05URVhUX0dSRUdTX1I1ICgodm9pZCAqKSZkbXlfY3R4dC5HRVRfVUNfUkVHUy0+Z3JlZ3NbNV0gLSAodm9pZCAqKSZkbXlfY3R4dCkKKysjZGVmaW5lIFVDX01DT05URVhUX0dSRUdTX1I2ICgodm9pZCAqKSZkbXlfY3R4dC5HRVRfVUNfUkVHUy0+Z3JlZ3NbNl0gLSAodm9pZCAqKSZkbXlfY3R4dCkKKysjZGVmaW5lIFVDX01DT05URVhUX0dSRUdTX1I3ICgodm9pZCAqKSZkbXlfY3R4dC5HRVRfVUNfUkVHUy0+Z3JlZ3NbN10gLSAodm9pZCAqKSZkbXlfY3R4dCkKKysjZGVmaW5lIFVDX01DT05URVhUX0dSRUdTX1I4ICgodm9pZCAqKSZkbXlfY3R4dC5HRVRfVUNfUkVHUy0+Z3JlZ3NbOF0gLSAodm9pZCAqKSZkbXlfY3R4dCkKKysjZGVmaW5lIFVDX01DT05URVhUX0dSRUdTX1I5ICgodm9pZCAqKSZkbXlfY3R4dC5HRVRfVUNfUkVHUy0+Z3JlZ3NbOV0gLSAodm9pZCAqKSZkbXlfY3R4dCkKKysjZGVmaW5lIFVDX01DT05URVhUX0dSRUdTX1IxMCAoKHZvaWQgKikmZG15X2N0eHQuR0VUX1VDX1JFR1MtPmdyZWdzWzEwXSAtICh2b2lkICopJmRteV9jdHh0KQorKyNkZWZpbmUgVUNfTUNPTlRFWFRfR1JFR1NfUjExICgodm9pZCAqKSZkbXlfY3R4dC5HRVRfVUNfUkVHUy0+Z3JlZ3NbMTFdIC0gKHZvaWQgKikmZG15X2N0eHQpCisrI2RlZmluZSBVQ19NQ09OVEVYVF9HUkVHU19SMTIgKCh2b2lkICopJmRteV9jdHh0LkdFVF9VQ19SRUdTLT5ncmVnc1sxMl0gLSAodm9pZCAqKSZkbXlfY3R4dCkKKysjZGVmaW5lIFVDX01DT05URVhUX0dSRUdTX1IxMyAoKHZvaWQgKikmZG15X2N0eHQuR0VUX1VDX1JFR1MtPmdyZWdzWzEzXSAtICh2b2lkICopJmRteV9jdHh0KQorKyNkZWZpbmUgVUNfTUNPTlRFWFRfR1JFR1NfUjE0ICgodm9pZCAqKSZkbXlfY3R4dC5HRVRfVUNfUkVHUy0+Z3JlZ3NbMTRdIC0gKHZvaWQgKikmZG15X2N0eHQpCisrI2RlZmluZSBVQ19NQ09OVEVYVF9HUkVHU19SMTUgKCh2b2lkICopJmRteV9jdHh0LkdFVF9VQ19SRUdTLT5ncmVnc1sxNV0gLSAodm9pZCAqKSZkbXlfY3R4dCkKKysjZGVmaW5lIFVDX01DT05URVhUX0dSRUdTX1IxNiAoKHZvaWQgKikmZG15X2N0eHQuR0VUX1VDX1JFR1MtPmdyZWdzWzE2XSAtICh2b2lkICopJmRteV9jdHh0KQorKyNkZWZpbmUgVUNfTUNPTlRFWFRfR1JFR1NfUjE3ICgodm9pZCAqKSZkbXlfY3R4dC5HRVRfVUNfUkVHUy0+Z3JlZ3NbMTddIC0gKHZvaWQgKikmZG15X2N0eHQpCisrI2RlZmluZSBVQ19NQ09OVEVYVF9HUkVHU19SMTggKCh2b2lkICopJmRteV9jdHh0LkdFVF9VQ19SRUdTLT5ncmVnc1sxOF0gLSAodm9pZCAqKSZkbXlfY3R4dCkKKysjZGVmaW5lIFVDX01DT05URVhUX0dSRUdTX1IxOSAoKHZvaWQgKikmZG15X2N0eHQuR0VUX1VDX1JFR1MtPmdyZWdzWzE5XSAtICh2b2lkICopJmRteV9jdHh0KQorKyNkZWZpbmUgVUNfTUNPTlRFWFRfR1JFR1NfUjIwICgodm9pZCAqKSZkbXlfY3R4dC5HRVRfVUNfUkVHUy0+Z3JlZ3NbMjBdIC0gKHZvaWQgKikmZG15X2N0eHQpCisrI2RlZmluZSBVQ19NQ09OVEVYVF9HUkVHU19SMjEgKCh2b2lkICopJmRteV9jdHh0LkdFVF9VQ19SRUdTLT5ncmVnc1syMV0gLSAodm9pZCAqKSZkbXlfY3R4dCkKKysjZGVmaW5lIFVDX01DT05URVhUX0dSRUdTX1IyMiAoKHZvaWQgKikmZG15X2N0eHQuR0VUX1VDX1JFR1MtPmdyZWdzWzIyXSAtICh2b2lkICopJmRteV9jdHh0KQorKyNkZWZpbmUgVUNfTUNPTlRFWFRfR1JFR1NfUjIzICgodm9pZCAqKSZkbXlfY3R4dC5HRVRfVUNfUkVHUy0+Z3JlZ3NbMjNdIC0gKHZvaWQgKikmZG15X2N0eHQpCisrI2RlZmluZSBVQ19NQ09OVEVYVF9HUkVHU19SMjQgKCh2b2lkICopJmRteV9jdHh0LkdFVF9VQ19SRUdTLT5ncmVnc1syNF0gLSAodm9pZCAqKSZkbXlfY3R4dCkKKysjZGVmaW5lIFVDX01DT05URVhUX0dSRUdTX1IyNSAoKHZvaWQgKikmZG15X2N0eHQuR0VUX1VDX1JFR1MtPmdyZWdzWzI1XSAtICh2b2lkICopJmRteV9jdHh0KQorKyNkZWZpbmUgVUNfTUNPTlRFWFRfR1JFR1NfUjI2ICgodm9pZCAqKSZkbXlfY3R4dC5HRVRfVUNfUkVHUy0+Z3JlZ3NbMjZdIC0gKHZvaWQgKikmZG15X2N0eHQpCisrI2RlZmluZSBVQ19NQ09OVEVYVF9HUkVHU19SMjcgKCh2b2lkICopJmRteV9jdHh0LkdFVF9VQ19SRUdTLT5ncmVnc1syN10gLSAodm9pZCAqKSZkbXlfY3R4dCkKKysjZGVmaW5lIFVDX01DT05URVhUX0dSRUdTX1IyOCAoKHZvaWQgKikmZG15X2N0eHQuR0VUX1VDX1JFR1MtPmdyZWdzWzI4XSAtICh2b2lkICopJmRteV9jdHh0KQorKyNkZWZpbmUgVUNfTUNPTlRFWFRfR1JFR1NfUjI5ICgodm9pZCAqKSZkbXlfY3R4dC5HRVRfVUNfUkVHUy0+Z3JlZ3NbMjldIC0gKHZvaWQgKikmZG15X2N0eHQpCisrI2RlZmluZSBVQ19NQ09OVEVYVF9HUkVHU19SMzAgKCh2b2lkICopJmRteV9jdHh0LkdFVF9VQ19SRUdTLT5ncmVnc1szMF0gLSAodm9pZCAqKSZkbXlfY3R4dCkKKysjZGVmaW5lIFVDX01DT05URVhUX0dSRUdTX1IzMSAoKHZvaWQgKikmZG15X2N0eHQuR0VUX1VDX1JFR1MtPmdyZWdzWzMxXSAtICh2b2lkICopJmRteV9jdHh0KQorIAorLSNkZWZpbmUgVUNfTUNPTlRFWFRfR1JFR1NfTVNSICgodm9pZCAqKSZkbXlfY3R4dC51Y19tY29udGV4dC51Y19yZWdzLT5ncmVnc1tNU1JfSURYXSAtICh2b2lkICopJmRteV9jdHh0KQorLSNkZWZpbmUgVUNfTUNPTlRFWFRfR1JFR1NfT1JJR19HUFIzICgodm9pZCAqKSZkbXlfY3R4dC51Y19tY29udGV4dC51Y19yZWdzLT5ncmVnc1tPUklHX0dQUjNfSURYXSAtICh2b2lkICopJmRteV9jdHh0KQorLSNkZWZpbmUgVUNfTUNPTlRFWFRfR1JFR1NfQ1RSICgodm9pZCAqKSZkbXlfY3R4dC51Y19tY29udGV4dC51Y19yZWdzLT5ncmVnc1tDVFJfSURYXSAtICh2b2lkICopJmRteV9jdHh0KQorLSNkZWZpbmUgVUNfTUNPTlRFWFRfR1JFR1NfTElOSyAoKHZvaWQgKikmZG15X2N0eHQudWNfbWNvbnRleHQudWNfcmVncy0+Z3JlZ3NbTElOS19JRFhdIC0gKHZvaWQgKikmZG15X2N0eHQpCistI2RlZmluZSBVQ19NQ09OVEVYVF9HUkVHU19YRVIgKCh2b2lkICopJmRteV9jdHh0LnVjX21jb250ZXh0LnVjX3JlZ3MtPmdyZWdzW1hFUl9JRFhdIC0gKHZvaWQgKikmZG15X2N0eHQpCistI2RlZmluZSBVQ19NQ09OVEVYVF9HUkVHU19DQ1IgKCh2b2lkICopJmRteV9jdHh0LnVjX21jb250ZXh0LnVjX3JlZ3MtPmdyZWdzW0NDUl9JRFhdIC0gKHZvaWQgKikmZG15X2N0eHQpCistI2RlZmluZSBVQ19NQ09OVEVYVF9HUkVHU19TT0ZURSAoKHZvaWQgKikmZG15X2N0eHQudWNfbWNvbnRleHQudWNfcmVncy0+Z3JlZ3NbU09GVEVfSURYXSAtICh2b2lkICopJmRteV9jdHh0KQorLSNkZWZpbmUgVUNfTUNPTlRFWFRfR1JFR1NfVFJBUCAoKHZvaWQgKikmZG15X2N0eHQudWNfbWNvbnRleHQudWNfcmVncy0+Z3JlZ3NbVFJBUF9JRFhdIC0gKHZvaWQgKikmZG15X2N0eHQpCistI2RlZmluZSBVQ19NQ09OVEVYVF9HUkVHU19EQVIgKCh2b2lkICopJmRteV9jdHh0LnVjX21jb250ZXh0LnVjX3JlZ3MtPmdyZWdzW0RBUl9JRFhdIC0gKHZvaWQgKikmZG15X2N0eHQpCistI2RlZmluZSBVQ19NQ09OVEVYVF9HUkVHU19EU0lTUiAoKHZvaWQgKikmZG15X2N0eHQudWNfbWNvbnRleHQudWNfcmVncy0+Z3JlZ3NbRFNJU1JfSURYXSAtICh2b2lkICopJmRteV9jdHh0KQorLSNkZWZpbmUgVUNfTUNPTlRFWFRfR1JFR1NfUkVTVUxUICgodm9pZCAqKSZkbXlfY3R4dC51Y19tY29udGV4dC51Y19yZWdzLT5ncmVnc1tSRVNVTFRfSURYXSAtICh2b2lkICopJmRteV9jdHh0KQorKyNkZWZpbmUgVUNfTUNPTlRFWFRfR1JFR1NfTVNSICgodm9pZCAqKSZkbXlfY3R4dC5HRVRfVUNfUkVHUy0+Z3JlZ3NbTVNSX0lEWF0gLSAodm9pZCAqKSZkbXlfY3R4dCkKKysjZGVmaW5lIFVDX01DT05URVhUX0dSRUdTX09SSUdfR1BSMyAoKHZvaWQgKikmZG15X2N0eHQuR0VUX1VDX1JFR1MtPmdyZWdzW09SSUdfR1BSM19JRFhdIC0gKHZvaWQgKikmZG15X2N0eHQpCisrI2RlZmluZSBVQ19NQ09OVEVYVF9HUkVHU19DVFIgKCh2b2lkICopJmRteV9jdHh0LkdFVF9VQ19SRUdTLT5ncmVnc1tDVFJfSURYXSAtICh2b2lkICopJmRteV9jdHh0KQorKyNkZWZpbmUgVUNfTUNPTlRFWFRfR1JFR1NfTElOSyAoKHZvaWQgKikmZG15X2N0eHQuR0VUX1VDX1JFR1MtPmdyZWdzW0xJTktfSURYXSAtICh2b2lkICopJmRteV9jdHh0KQorKyNkZWZpbmUgVUNfTUNPTlRFWFRfR1JFR1NfWEVSICgodm9pZCAqKSZkbXlfY3R4dC5HRVRfVUNfUkVHUy0+Z3JlZ3NbWEVSX0lEWF0gLSAodm9pZCAqKSZkbXlfY3R4dCkKKysjZGVmaW5lIFVDX01DT05URVhUX0dSRUdTX0NDUiAoKHZvaWQgKikmZG15X2N0eHQuR0VUX1VDX1JFR1MtPmdyZWdzW0NDUl9JRFhdIC0gKHZvaWQgKikmZG15X2N0eHQpCisrI2RlZmluZSBVQ19NQ09OVEVYVF9HUkVHU19TT0ZURSAoKHZvaWQgKikmZG15X2N0eHQuR0VUX1VDX1JFR1MtPmdyZWdzW1NPRlRFX0lEWF0gLSAodm9pZCAqKSZkbXlfY3R4dCkKKysjZGVmaW5lIFVDX01DT05URVhUX0dSRUdTX1RSQVAgKCh2b2lkICopJmRteV9jdHh0LkdFVF9VQ19SRUdTLT5ncmVnc1tUUkFQX0lEWF0gLSAodm9pZCAqKSZkbXlfY3R4dCkKKysjZGVmaW5lIFVDX01DT05URVhUX0dSRUdTX0RBUiAoKHZvaWQgKikmZG15X2N0eHQuR0VUX1VDX1JFR1MtPmdyZWdzW0RBUl9JRFhdIC0gKHZvaWQgKikmZG15X2N0eHQpCisrI2RlZmluZSBVQ19NQ09OVEVYVF9HUkVHU19EU0lTUiAoKHZvaWQgKikmZG15X2N0eHQuR0VUX1VDX1JFR1MtPmdyZWdzW0RTSVNSX0lEWF0gLSAodm9pZCAqKSZkbXlfY3R4dCkKKysjZGVmaW5lIFVDX01DT05URVhUX0dSRUdTX1JFU1VMVCAoKHZvaWQgKikmZG15X2N0eHQuR0VUX1VDX1JFR1MtPmdyZWdzW1JFU1VMVF9JRFhdIC0gKHZvaWQgKikmZG15X2N0eHQpCisgCistI2RlZmluZSBVQ19NQ09OVEVYVF9GUkVHU19SMCAoKHZvaWQgKikmZG15X2N0eHQudWNfbWNvbnRleHQudWNfcmVncy0+ZnByZWdzLmZwcmVnc1swXSAtICh2b2lkICopJmRteV9jdHh0KQorLSNkZWZpbmUgVUNfTUNPTlRFWFRfRlJFR1NfUjEgKCh2b2lkICopJmRteV9jdHh0LnVjX21jb250ZXh0LnVjX3JlZ3MtPmZwcmVncy5mcHJlZ3NbMV0gLSAodm9pZCAqKSZkbXlfY3R4dCkKKy0jZGVmaW5lIFVDX01DT05URVhUX0ZSRUdTX1IyICgodm9pZCAqKSZkbXlfY3R4dC51Y19tY29udGV4dC51Y19yZWdzLT5mcHJlZ3MuZnByZWdzWzJdIC0gKHZvaWQgKikmZG15X2N0eHQpCistI2RlZmluZSBVQ19NQ09OVEVYVF9GUkVHU19SMyAoKHZvaWQgKikmZG15X2N0eHQudWNfbWNvbnRleHQudWNfcmVncy0+ZnByZWdzLmZwcmVnc1szXSAtICh2b2lkICopJmRteV9jdHh0KQorLSNkZWZpbmUgVUNfTUNPTlRFWFRfRlJFR1NfUjQgKCh2b2lkICopJmRteV9jdHh0LnVjX21jb250ZXh0LnVjX3JlZ3MtPmZwcmVncy5mcHJlZ3NbNF0gLSAodm9pZCAqKSZkbXlfY3R4dCkKKy0jZGVmaW5lIFVDX01DT05URVhUX0ZSRUdTX1I1ICgodm9pZCAqKSZkbXlfY3R4dC51Y19tY29udGV4dC51Y19yZWdzLT5mcHJlZ3MuZnByZWdzWzVdIC0gKHZvaWQgKikmZG15X2N0eHQpCistI2RlZmluZSBVQ19NQ09OVEVYVF9GUkVHU19SNiAoKHZvaWQgKikmZG15X2N0eHQudWNfbWNvbnRleHQudWNfcmVncy0+ZnByZWdzLmZwcmVnc1s2XSAtICh2b2lkICopJmRteV9jdHh0KQorLSNkZWZpbmUgVUNfTUNPTlRFWFRfRlJFR1NfUjcgKCh2b2lkICopJmRteV9jdHh0LnVjX21jb250ZXh0LnVjX3JlZ3MtPmZwcmVncy5mcHJlZ3NbN10gLSAodm9pZCAqKSZkbXlfY3R4dCkKKy0jZGVmaW5lIFVDX01DT05URVhUX0ZSRUdTX1I4ICgodm9pZCAqKSZkbXlfY3R4dC51Y19tY29udGV4dC51Y19yZWdzLT5mcHJlZ3MuZnByZWdzWzhdIC0gKHZvaWQgKikmZG15X2N0eHQpCistI2RlZmluZSBVQ19NQ09OVEVYVF9GUkVHU19SOSAoKHZvaWQgKikmZG15X2N0eHQudWNfbWNvbnRleHQudWNfcmVncy0+ZnByZWdzLmZwcmVnc1s5XSAtICh2b2lkICopJmRteV9jdHh0KQorLSNkZWZpbmUgVUNfTUNPTlRFWFRfRlJFR1NfUjEwICgodm9pZCAqKSZkbXlfY3R4dC51Y19tY29udGV4dC51Y19yZWdzLT5mcHJlZ3MuZnByZWdzWzEwXSAtICh2b2lkICopJmRteV9jdHh0KQorLSNkZWZpbmUgVUNfTUNPTlRFWFRfRlJFR1NfUjExICgodm9pZCAqKSZkbXlfY3R4dC51Y19tY29udGV4dC51Y19yZWdzLT5mcHJlZ3MuZnByZWdzWzExXSAtICh2b2lkICopJmRteV9jdHh0KQorLSNkZWZpbmUgVUNfTUNPTlRFWFRfRlJFR1NfUjEyICgodm9pZCAqKSZkbXlfY3R4dC51Y19tY29udGV4dC51Y19yZWdzLT5mcHJlZ3MuZnByZWdzWzEyXSAtICh2b2lkICopJmRteV9jdHh0KQorLSNkZWZpbmUgVUNfTUNPTlRFWFRfRlJFR1NfUjEzICgodm9pZCAqKSZkbXlfY3R4dC51Y19tY29udGV4dC51Y19yZWdzLT5mcHJlZ3MuZnByZWdzWzEzXSAtICh2b2lkICopJmRteV9jdHh0KQorLSNkZWZpbmUgVUNfTUNPTlRFWFRfRlJFR1NfUjE0ICgodm9pZCAqKSZkbXlfY3R4dC51Y19tY29udGV4dC51Y19yZWdzLT5mcHJlZ3MuZnByZWdzWzE0XSAtICh2b2lkICopJmRteV9jdHh0KQorLSNkZWZpbmUgVUNfTUNPTlRFWFRfRlJFR1NfUjE1ICgodm9pZCAqKSZkbXlfY3R4dC51Y19tY29udGV4dC51Y19yZWdzLT5mcHJlZ3MuZnByZWdzWzE1XSAtICh2b2lkICopJmRteV9jdHh0KQorLSNkZWZpbmUgVUNfTUNPTlRFWFRfRlJFR1NfUjE2ICgodm9pZCAqKSZkbXlfY3R4dC51Y19tY29udGV4dC51Y19yZWdzLT5mcHJlZ3MuZnByZWdzWzE2XSAtICh2b2lkICopJmRteV9jdHh0KQorLSNkZWZpbmUgVUNfTUNPTlRFWFRfRlJFR1NfUjE3ICgodm9pZCAqKSZkbXlfY3R4dC51Y19tY29udGV4dC51Y19yZWdzLT5mcHJlZ3MuZnByZWdzWzE3XSAtICh2b2lkICopJmRteV9jdHh0KQorLSNkZWZpbmUgVUNfTUNPTlRFWFRfRlJFR1NfUjE4ICgodm9pZCAqKSZkbXlfY3R4dC51Y19tY29udGV4dC51Y19yZWdzLT5mcHJlZ3MuZnByZWdzWzE4XSAtICh2b2lkICopJmRteV9jdHh0KQorLSNkZWZpbmUgVUNfTUNPTlRFWFRfRlJFR1NfUjE5ICgodm9pZCAqKSZkbXlfY3R4dC51Y19tY29udGV4dC51Y19yZWdzLT5mcHJlZ3MuZnByZWdzWzE5XSAtICh2b2lkICopJmRteV9jdHh0KQorLSNkZWZpbmUgVUNfTUNPTlRFWFRfRlJFR1NfUjIwICgodm9pZCAqKSZkbXlfY3R4dC51Y19tY29udGV4dC51Y19yZWdzLT5mcHJlZ3MuZnByZWdzWzIwXSAtICh2b2lkICopJmRteV9jdHh0KQorLSNkZWZpbmUgVUNfTUNPTlRFWFRfRlJFR1NfUjIxICgodm9pZCAqKSZkbXlfY3R4dC51Y19tY29udGV4dC51Y19yZWdzLT5mcHJlZ3MuZnByZWdzWzIxXSAtICh2b2lkICopJmRteV9jdHh0KQorLSNkZWZpbmUgVUNfTUNPTlRFWFRfRlJFR1NfUjIyICgodm9pZCAqKSZkbXlfY3R4dC51Y19tY29udGV4dC51Y19yZWdzLT5mcHJlZ3MuZnByZWdzWzIyXSAtICh2b2lkICopJmRteV9jdHh0KQorLSNkZWZpbmUgVUNfTUNPTlRFWFRfRlJFR1NfUjIzICgodm9pZCAqKSZkbXlfY3R4dC51Y19tY29udGV4dC51Y19yZWdzLT5mcHJlZ3MuZnByZWdzWzIzXSAtICh2b2lkICopJmRteV9jdHh0KQorLSNkZWZpbmUgVUNfTUNPTlRFWFRfRlJFR1NfUjI0ICgodm9pZCAqKSZkbXlfY3R4dC51Y19tY29udGV4dC51Y19yZWdzLT5mcHJlZ3MuZnByZWdzWzI0XSAtICh2b2lkICopJmRteV9jdHh0KQorLSNkZWZpbmUgVUNfTUNPTlRFWFRfRlJFR1NfUjI1ICgodm9pZCAqKSZkbXlfY3R4dC51Y19tY29udGV4dC51Y19yZWdzLT5mcHJlZ3MuZnByZWdzWzI1XSAtICh2b2lkICopJmRteV9jdHh0KQorLSNkZWZpbmUgVUNfTUNPTlRFWFRfRlJFR1NfUjI2ICgodm9pZCAqKSZkbXlfY3R4dC51Y19tY29udGV4dC51Y19yZWdzLT5mcHJlZ3MuZnByZWdzWzI2XSAtICh2b2lkICopJmRteV9jdHh0KQorLSNkZWZpbmUgVUNfTUNPTlRFWFRfRlJFR1NfUjI3ICgodm9pZCAqKSZkbXlfY3R4dC51Y19tY29udGV4dC51Y19yZWdzLT5mcHJlZ3MuZnByZWdzWzI3XSAtICh2b2lkICopJmRteV9jdHh0KQorLSNkZWZpbmUgVUNfTUNPTlRFWFRfRlJFR1NfUjI4ICgodm9pZCAqKSZkbXlfY3R4dC51Y19tY29udGV4dC51Y19yZWdzLT5mcHJlZ3MuZnByZWdzWzI4XSAtICh2b2lkICopJmRteV9jdHh0KQorLSNkZWZpbmUgVUNfTUNPTlRFWFRfRlJFR1NfUjI5ICgodm9pZCAqKSZkbXlfY3R4dC51Y19tY29udGV4dC51Y19yZWdzLT5mcHJlZ3MuZnByZWdzWzI5XSAtICh2b2lkICopJmRteV9jdHh0KQorLSNkZWZpbmUgVUNfTUNPTlRFWFRfRlJFR1NfUjMwICgodm9pZCAqKSZkbXlfY3R4dC51Y19tY29udGV4dC51Y19yZWdzLT5mcHJlZ3MuZnByZWdzWzMwXSAtICh2b2lkICopJmRteV9jdHh0KQorLSNkZWZpbmUgVUNfTUNPTlRFWFRfRlJFR1NfUjMxICgodm9pZCAqKSZkbXlfY3R4dC51Y19tY29udGV4dC51Y19yZWdzLT5mcHJlZ3MuZnByZWdzWzMxXSAtICh2b2lkICopJmRteV9jdHh0KQorLSNkZWZpbmUgVUNfTUNPTlRFWFRfRlJFR1NfRlBTQ1IgKCh2b2lkICopJmRteV9jdHh0LnVjX21jb250ZXh0LnVjX3JlZ3MtPmZwcmVncy5mcHJlZ3NbMzJdIC0gKHZvaWQgKikmZG15X2N0eHQpCisrI2RlZmluZSBVQ19NQ09OVEVYVF9GUkVHU19SMCAoKHZvaWQgKikmZG15X2N0eHQuR0VUX1VDX1JFR1MtPmZwcmVncy5mcHJlZ3NbMF0gLSAodm9pZCAqKSZkbXlfY3R4dCkKKysjZGVmaW5lIFVDX01DT05URVhUX0ZSRUdTX1IxICgodm9pZCAqKSZkbXlfY3R4dC5HRVRfVUNfUkVHUy0+ZnByZWdzLmZwcmVnc1sxXSAtICh2b2lkICopJmRteV9jdHh0KQorKyNkZWZpbmUgVUNfTUNPTlRFWFRfRlJFR1NfUjIgKCh2b2lkICopJmRteV9jdHh0LkdFVF9VQ19SRUdTLT5mcHJlZ3MuZnByZWdzWzJdIC0gKHZvaWQgKikmZG15X2N0eHQpCisrI2RlZmluZSBVQ19NQ09OVEVYVF9GUkVHU19SMyAoKHZvaWQgKikmZG15X2N0eHQuR0VUX1VDX1JFR1MtPmZwcmVncy5mcHJlZ3NbM10gLSAodm9pZCAqKSZkbXlfY3R4dCkKKysjZGVmaW5lIFVDX01DT05URVhUX0ZSRUdTX1I0ICgodm9pZCAqKSZkbXlfY3R4dC5HRVRfVUNfUkVHUy0+ZnByZWdzLmZwcmVnc1s0XSAtICh2b2lkICopJmRteV9jdHh0KQorKyNkZWZpbmUgVUNfTUNPTlRFWFRfRlJFR1NfUjUgKCh2b2lkICopJmRteV9jdHh0LkdFVF9VQ19SRUdTLT5mcHJlZ3MuZnByZWdzWzVdIC0gKHZvaWQgKikmZG15X2N0eHQpCisrI2RlZmluZSBVQ19NQ09OVEVYVF9GUkVHU19SNiAoKHZvaWQgKikmZG15X2N0eHQuR0VUX1VDX1JFR1MtPmZwcmVncy5mcHJlZ3NbNl0gLSAodm9pZCAqKSZkbXlfY3R4dCkKKysjZGVmaW5lIFVDX01DT05URVhUX0ZSRUdTX1I3ICgodm9pZCAqKSZkbXlfY3R4dC5HRVRfVUNfUkVHUy0+ZnByZWdzLmZwcmVnc1s3XSAtICh2b2lkICopJmRteV9jdHh0KQorKyNkZWZpbmUgVUNfTUNPTlRFWFRfRlJFR1NfUjggKCh2b2lkICopJmRteV9jdHh0LkdFVF9VQ19SRUdTLT5mcHJlZ3MuZnByZWdzWzhdIC0gKHZvaWQgKikmZG15X2N0eHQpCisrI2RlZmluZSBVQ19NQ09OVEVYVF9GUkVHU19SOSAoKHZvaWQgKikmZG15X2N0eHQuR0VUX1VDX1JFR1MtPmZwcmVncy5mcHJlZ3NbOV0gLSAodm9pZCAqKSZkbXlfY3R4dCkKKysjZGVmaW5lIFVDX01DT05URVhUX0ZSRUdTX1IxMCAoKHZvaWQgKikmZG15X2N0eHQuR0VUX1VDX1JFR1MtPmZwcmVncy5mcHJlZ3NbMTBdIC0gKHZvaWQgKikmZG15X2N0eHQpCisrI2RlZmluZSBVQ19NQ09OVEVYVF9GUkVHU19SMTEgKCh2b2lkICopJmRteV9jdHh0LkdFVF9VQ19SRUdTLT5mcHJlZ3MuZnByZWdzWzExXSAtICh2b2lkICopJmRteV9jdHh0KQorKyNkZWZpbmUgVUNfTUNPTlRFWFRfRlJFR1NfUjEyICgodm9pZCAqKSZkbXlfY3R4dC5HRVRfVUNfUkVHUy0+ZnByZWdzLmZwcmVnc1sxMl0gLSAodm9pZCAqKSZkbXlfY3R4dCkKKysjZGVmaW5lIFVDX01DT05URVhUX0ZSRUdTX1IxMyAoKHZvaWQgKikmZG15X2N0eHQuR0VUX1VDX1JFR1MtPmZwcmVncy5mcHJlZ3NbMTNdIC0gKHZvaWQgKikmZG15X2N0eHQpCisrI2RlZmluZSBVQ19NQ09OVEVYVF9GUkVHU19SMTQgKCh2b2lkICopJmRteV9jdHh0LkdFVF9VQ19SRUdTLT5mcHJlZ3MuZnByZWdzWzE0XSAtICh2b2lkICopJmRteV9jdHh0KQorKyNkZWZpbmUgVUNfTUNPTlRFWFRfRlJFR1NfUjE1ICgodm9pZCAqKSZkbXlfY3R4dC5HRVRfVUNfUkVHUy0+ZnByZWdzLmZwcmVnc1sxNV0gLSAodm9pZCAqKSZkbXlfY3R4dCkKKysjZGVmaW5lIFVDX01DT05URVhUX0ZSRUdTX1IxNiAoKHZvaWQgKikmZG15X2N0eHQuR0VUX1VDX1JFR1MtPmZwcmVncy5mcHJlZ3NbMTZdIC0gKHZvaWQgKikmZG15X2N0eHQpCisrI2RlZmluZSBVQ19NQ09OVEVYVF9GUkVHU19SMTcgKCh2b2lkICopJmRteV9jdHh0LkdFVF9VQ19SRUdTLT5mcHJlZ3MuZnByZWdzWzE3XSAtICh2b2lkICopJmRteV9jdHh0KQorKyNkZWZpbmUgVUNfTUNPTlRFWFRfRlJFR1NfUjE4ICgodm9pZCAqKSZkbXlfY3R4dC5HRVRfVUNfUkVHUy0+ZnByZWdzLmZwcmVnc1sxOF0gLSAodm9pZCAqKSZkbXlfY3R4dCkKKysjZGVmaW5lIFVDX01DT05URVhUX0ZSRUdTX1IxOSAoKHZvaWQgKikmZG15X2N0eHQuR0VUX1VDX1JFR1MtPmZwcmVncy5mcHJlZ3NbMTldIC0gKHZvaWQgKikmZG15X2N0eHQpCisrI2RlZmluZSBVQ19NQ09OVEVYVF9GUkVHU19SMjAgKCh2b2lkICopJmRteV9jdHh0LkdFVF9VQ19SRUdTLT5mcHJlZ3MuZnByZWdzWzIwXSAtICh2b2lkICopJmRteV9jdHh0KQorKyNkZWZpbmUgVUNfTUNPTlRFWFRfRlJFR1NfUjIxICgodm9pZCAqKSZkbXlfY3R4dC5HRVRfVUNfUkVHUy0+ZnByZWdzLmZwcmVnc1syMV0gLSAodm9pZCAqKSZkbXlfY3R4dCkKKysjZGVmaW5lIFVDX01DT05URVhUX0ZSRUdTX1IyMiAoKHZvaWQgKikmZG15X2N0eHQuR0VUX1VDX1JFR1MtPmZwcmVncy5mcHJlZ3NbMjJdIC0gKHZvaWQgKikmZG15X2N0eHQpCisrI2RlZmluZSBVQ19NQ09OVEVYVF9GUkVHU19SMjMgKCh2b2lkICopJmRteV9jdHh0LkdFVF9VQ19SRUdTLT5mcHJlZ3MuZnByZWdzWzIzXSAtICh2b2lkICopJmRteV9jdHh0KQorKyNkZWZpbmUgVUNfTUNPTlRFWFRfRlJFR1NfUjI0ICgodm9pZCAqKSZkbXlfY3R4dC5HRVRfVUNfUkVHUy0+ZnByZWdzLmZwcmVnc1syNF0gLSAodm9pZCAqKSZkbXlfY3R4dCkKKysjZGVmaW5lIFVDX01DT05URVhUX0ZSRUdTX1IyNSAoKHZvaWQgKikmZG15X2N0eHQuR0VUX1VDX1JFR1MtPmZwcmVncy5mcHJlZ3NbMjVdIC0gKHZvaWQgKikmZG15X2N0eHQpCisrI2RlZmluZSBVQ19NQ09OVEVYVF9GUkVHU19SMjYgKCh2b2lkICopJmRteV9jdHh0LkdFVF9VQ19SRUdTLT5mcHJlZ3MuZnByZWdzWzI2XSAtICh2b2lkICopJmRteV9jdHh0KQorKyNkZWZpbmUgVUNfTUNPTlRFWFRfRlJFR1NfUjI3ICgodm9pZCAqKSZkbXlfY3R4dC5HRVRfVUNfUkVHUy0+ZnByZWdzLmZwcmVnc1syN10gLSAodm9pZCAqKSZkbXlfY3R4dCkKKysjZGVmaW5lIFVDX01DT05URVhUX0ZSRUdTX1IyOCAoKHZvaWQgKikmZG15X2N0eHQuR0VUX1VDX1JFR1MtPmZwcmVncy5mcHJlZ3NbMjhdIC0gKHZvaWQgKikmZG15X2N0eHQpCisrI2RlZmluZSBVQ19NQ09OVEVYVF9GUkVHU19SMjkgKCh2b2lkICopJmRteV9jdHh0LkdFVF9VQ19SRUdTLT5mcHJlZ3MuZnByZWdzWzI5XSAtICh2b2lkICopJmRteV9jdHh0KQorKyNkZWZpbmUgVUNfTUNPTlRFWFRfRlJFR1NfUjMwICgodm9pZCAqKSZkbXlfY3R4dC5HRVRfVUNfUkVHUy0+ZnByZWdzLmZwcmVnc1szMF0gLSAodm9pZCAqKSZkbXlfY3R4dCkKKysjZGVmaW5lIFVDX01DT05URVhUX0ZSRUdTX1IzMSAoKHZvaWQgKikmZG15X2N0eHQuR0VUX1VDX1JFR1MtPmZwcmVncy5mcHJlZ3NbMzFdIC0gKHZvaWQgKikmZG15X2N0eHQpCisrI2RlZmluZSBVQ19NQ09OVEVYVF9GUkVHU19GUFNDUiAoKHZvaWQgKikmZG15X2N0eHQuR0VUX1VDX1JFR1MtPmZwcmVncy5mcHJlZ3NbMzJdIC0gKHZvaWQgKikmZG15X2N0eHQpCisgCisgI2VuZGlmCitkaWZmIC0tZ2l0IGEvc3JjL3B0cmFjZS9fVVBUX3JlZ19vZmZzZXQuYyBiL3NyYy9wdHJhY2UvX1VQVF9yZWdfb2Zmc2V0LmMKK2luZGV4IDY4NDYxYTIuLmZjYzQzZjcgMTAwNjQ0CistLS0gYS9zcmMvcHRyYWNlL19VUFRfcmVnX29mZnNldC5jCisrKysgYi9zcmMvcHRyYWNlL19VUFRfcmVnX29mZnNldC5jCitAQCAtMjcsNiArMjcsMTMgQEAgV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuICAqLworICNpbmNsdWRlICJfVVBUX2ludGVybmFsLmgiCisgCisgI2luY2x1ZGUgPHN0ZGRlZi5oPgorKyNpZiAhZGVmaW5lZChfX0dMSUJDX18pCisrIyBkZWZpbmUgcHRfcmVncyB1YXBpX3B0X3JlZ3MKKysjZW5kaWYKKysjaW5jbHVkZSA8YXNtL3B0cmFjZS5oPgorKyNpZiAhZGVmaW5lZChfX0dMSUJDX18pCisrIyB1bmRlZiBwdF9yZWdzCisrI2VuZGlmCisgCisgI2lmZGVmIEhBVkVfQVNNX1BUUkFDRV9PRkZTRVRTX0gKKyAjIGluY2x1ZGUgPGFzbS9wdHJhY2Vfb2Zmc2V0cy5oPgorLS0gCisxLjguMy4xCisKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9saWJ1bndpbmQvbGlidW53aW5kLTEuMS8wMDAxLXg4Ni1TdHViLW91dC14ODZfbG9jYWxfcmVzdW1lLnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2xpYnVud2luZC9saWJ1bndpbmQvMDAwMS14ODYtU3R1Yi1vdXQteDg2X2xvY2FsX3Jlc3VtZS5wYXRjaApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2xpYnVud2luZC9saWJ1bndpbmQtMS4xLzAwMDEteDg2LVN0dWItb3V0LXg4Nl9sb2NhbF9yZXN1bWUucGF0Y2gKcmVuYW1lIHRvIGltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9saWJ1bndpbmQvbGlidW53aW5kLzAwMDEteDg2LVN0dWItb3V0LXg4Nl9sb2NhbF9yZXN1bWUucGF0Y2gKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9saWJ1bndpbmQvbGlidW53aW5kLTEuMS9BZGQtQU9fUkVRVUlSRV9DQVMtdG8tZml4LWJ1aWxkLW9uLUFSTS12Ni5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9saWJ1bndpbmQvbGlidW53aW5kL0FkZC1BT19SRVFVSVJFX0NBUy10by1maXgtYnVpbGQtb24tQVJNLXY2LnBhdGNoCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbGlidW53aW5kL2xpYnVud2luZC0xLjEvQWRkLUFPX1JFUVVJUkVfQ0FTLXRvLWZpeC1idWlsZC1vbi1BUk0tdjYucGF0Y2gKcmVuYW1lIHRvIGltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9saWJ1bndpbmQvbGlidW53aW5kL0FkZC1BT19SRVFVSVJFX0NBUy10by1maXgtYnVpbGQtb24tQVJNLXY2LnBhdGNoCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbGlidW53aW5kL2xpYnVud2luZC9tdXNsLWhlYWRlci1jb25mbGljdC5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9saWJ1bndpbmQvbGlidW53aW5kL211c2wtaGVhZGVyLWNvbmZsaWN0LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc5ZjYzZmQKLS0tIC9kZXYvbnVsbAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbGlidW53aW5kL2xpYnVud2luZC9tdXNsLWhlYWRlci1jb25mbGljdC5wYXRjaApAQCAtMCwwICsxLDM3IEBACitJZiB5b3U6CisKK1RDTElCQz1tdXNsIGJpdGJha2UgdW53aW5kCitUQ0xJQkM9bXVzbCBiaXRiYWtlIGdjYy1ydW50aW1lIC1jIGNsZWFuc3N0YXRlCitUQ0xJQkM9bXVzbCBiaXRiYWtlIGdjYy1ydW50aW1lCisKK3lvdSB3aWxsIHNlZSBsaWJzdGRjKysgZmFpbCB0byBidWlsZCBkdWUgdG8gZmluZGluZyBsaWJ1bndpbmQncyBoZWFkZXIgZmlsZS4KKworS2hlbTogIldoZW4gd2UgYnVpbGQgYW55IG9mIGdjYyBjb21wb25lbnRzIHRoZXkgZXhwZWN0IHRvIHVzZSBpbnRlcm5hbCB2ZXJzaW9uIAorYW5kIHRoYXQgd29ya3Mgd2l0aCBnbGliYyBiYXNlZCBnY2Mgc2luY2UgdGhlIHNlYXJjaCBoZWFkZXJzIGZpcnN0IGxvb2sgaW50byBnY2MgCitoZWFkZXJzLCBob3dldmVyIHdpdGggbXVzbCB0aGUgZ2NjIGhlYWRlcnMgYXJlIHNlYXJjaGVkIGFmdGVyIHRoZSBzdGFuZGFyZCAKK2hlYWRlcnMgKCB3aGljaCBpcyBieSBkZXNpZ24gdGhlIHJpZ2h0IHRoaW5nICkuIgorCitUaGlzIHBhdGNoIGhhY2tzIGFyb3VuZCB0aGUgaXNzdWUgYnkgbG9va2luZyBmb3IgYSBkZWZpbmUgdXNlZCBkdXJpbmcgZ2NjLXJ1bnRpbWUncyAKK2J1aWxkIGFuZCBza2lwcGluZyB0byB0aGUgaW50ZXJuYWwgaGVhZGVyIGluIHRoYXQgY2FzZS4KKworW1lPQ1RPICMxMDEyOV0KKworUlAgMjAxNi84LzE4CisKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbcmVhbGx5IG5lZWQgdG8gZml4IGdjY10KKworSW5kZXg6IGdpdC9pbmNsdWRlL3Vud2luZC5oCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZ2l0Lm9yaWcvaW5jbHVkZS91bndpbmQuaAorKysrIGdpdC9pbmNsdWRlL3Vud2luZC5oCitAQCAtMjMsNiArMjMsMTAgQEAgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIgTAorIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTgorIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLiAgKi8KKyAKKysjaWZkZWYgX0dMSUJDWFhfU0hBUkVECisrI2luY2x1ZGVfbmV4dCA8dW53aW5kLmg+CisrI2VuZGlmCisrCisgI2lmbmRlZiBfVU5XSU5EX0gKKyAjZGVmaW5lIF9VTldJTkRfSAorIApkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2xpYnVud2luZC9saWJ1bndpbmRfMS4xLmJiIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2xpYnVud2luZC9saWJ1bndpbmRfMS4xLmJiCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhZmY4NDA5Li4wMDAwMDAwCi0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9saWJ1bndpbmQvbGlidW53aW5kXzEuMS5iYgorKysgL2Rldi9udWxsCkBAIC0xLDIyICswLDAgQEAKLXJlcXVpcmUgbGlidW53aW5kLmluYwotCi1TUkNfVVJJID0gIiR7U0FWQU5OQUhfTk9OR05VX01JUlJPUn0vJHtCUE59LyR7QlBOfS0ke1BWfS50YXIuZ3ogXAotICAgICAgICAgICBmaWxlOi8vU3VwcG9ydC1idWlsZGluZy13aXRoLW9sZGVyLWNvbXBpbGVycy5wYXRjaCBcCi0gICAgICAgICAgIGZpbGU6Ly9BQXJjaDY0LXBvcnQucGF0Y2ggXAotICAgICAgICAgICBmaWxlOi8vRml4LXRlc3QtY2FzZS1saW5rLWZhaWx1cmUtb24tUG93ZXJQQy1zeXN0ZW1zLXdpdGgtQWx0aXZlYy5wYXRjaCBcCi0gICAgICAgICAgIGZpbGU6Ly9MaW5rLWxpYnVud2luZC10by1saWJnY2Nfcy1yYXRoZXItdGhhbi1saWJnY2MucGF0Y2ggXAotICAgICAgICAgICBmaWxlOi8vMDAwMS1JbnZhbGlkLWR3YXJmLW9wY29kZXMtY2FuLWNhdXNlLXJlZmVyZW5jZXMtYmV5b25kLXRoLnBhdGNoIFwKLSAgICAgICAgICAgZmlsZTovL0FkZC1BT19SRVFVSVJFX0NBUy10by1maXgtYnVpbGQtb24tQVJNLXY2LnBhdGNoIFwKLSAgICAgICAgICAgZmlsZTovLzAwMDEtYmFja3RyYWNlLVVzZS1vbmx5LXdpdGgtZ2xpYmMtYW5kLXVjbGliYy5wYXRjaCBcCi0iCi1TUkNfVVJJX2FwcGVuZF9saWJjLW11c2wgPSAiXAotICAgICAgICAgICBmaWxlOi8vMDAwMS14ODYtU3R1Yi1vdXQteDg2X2xvY2FsX3Jlc3VtZS5wYXRjaCBcCi0gICAgICAgICAgIGZpbGU6Ly8wMDAxLWRpc2FibGUtdGVzdHMucGF0Y2ggXAotICAgICAgICAgICBmaWxlOi8vMDAwMS1GaXgtYnVpbGQtb24tbWlwcy1tdXNsLnBhdGNoIFwKLSIKLVNSQ19VUklbbWQ1c3VtXSA9ICJmYjRlYTJmNmZiYmU0NWJmMDMyY2QzNmU1ODY4ODNjZSIKLVNSQ19VUklbc2hhMjU2c3VtXSA9ICI5ZGZlMGZjYWUyYTg2NmRlOWQzOTQyYzY2OTk1ZTRiNDYwMjMwNDQ2ODg3ZGJkYWIzMDJkNDFhOGFlZThkMDlhIgotCi0jIGh0dHA6Ly9lcnJvcnMueW9jdG9wcm9qZWN0Lm9yZy9FcnJvcnMvRGV0YWlscy8yMDQ4Ny8KLUFSTV9JTlNUUlVDVElPTl9TRVRfYXJtdjQgPSAiYXJtIgotQVJNX0lOU1RSVUNUSU9OX1NFVF9hcm12NSA9ICJhcm0iCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbGlidW53aW5kL2xpYnVud2luZF9naXQuYmIgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbGlidW53aW5kL2xpYnVud2luZF9naXQuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDI0OTQzMAotLS0gL2Rldi9udWxsCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9saWJ1bndpbmQvbGlidW53aW5kX2dpdC5iYgpAQCAtMCwwICsxLDI5IEBACityZXF1aXJlIGxpYnVud2luZC5pbmMKKworUFYgPSAiMS4xK2dpdCR7U1JDUFZ9IgorCitTUkNSRVYgPSAiYmM4Njk4ZmQ3ZWQxM2E2MjlhOGVjM2NiMmE4OWJkNzRmOWQ4YjVjMCIKKworU1JDX1VSSSA9ICJnaXQ6Ly9naXQuc3YuZ251Lm9yZy9saWJ1bndpbmQuZ2l0IFwKKyAgICAgICAgICAgZmlsZTovL0FkZC1BT19SRVFVSVJFX0NBUy10by1maXgtYnVpbGQtb24tQVJNLXY2LnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovLzAwMDEtYmFja3RyYWNlLVVzZS1vbmx5LXdpdGgtZ2xpYmMtYW5kLXVjbGliYy5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly8wMDAxLXg4Ni1TdHViLW91dC14ODZfbG9jYWxfcmVzdW1lLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovLzAwMDEtRml4LWJ1aWxkLW9uLW1pcHMtbXVzbC5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly8wMDAxLWFkZC1rbm9icy10by1kaXNhYmxlLWVuYWJsZS10ZXN0cy5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly8wMDAxLXBwYzMyLUNvbnNpZGVyLXVjb250ZXh0LW1pc21hdGNoZXMtYmV0d2Vlbi1nbGliYy1hbmQucGF0Y2ggXAorICAgICAgICAgICAiCisKK1NSQ19VUklfYXBwZW5kX2xpYmMtbXVzbCA9ICIgZmlsZTovL211c2wtaGVhZGVyLWNvbmZsaWN0LnBhdGNoIgorRVhUUkFfT0VDT05GX2FwcGVuZF9saWJjLW11c2wgPSAiIC0tZGlzYWJsZS1kb2N1bWVudGF0aW9uIC0tZGlzYWJsZS10ZXN0cyAiCisKKyMgaHR0cDovL2Vycm9ycy55b2N0b3Byb2plY3Qub3JnL0Vycm9ycy9EZXRhaWxzLzIwNDg3LworQVJNX0lOU1RSVUNUSU9OX1NFVF9hcm12NCA9ICJhcm0iCitBUk1fSU5TVFJVQ1RJT05fU0VUX2FybXY1ID0gImFybSIKKworIyBzZWUgaHR0cHM6Ly9zb3VyY2V3YXJlLm9yZy9idWd6aWxsYS9zaG93X2J1Zy5jZ2k/aWQ9MTk5ODcKK1NFQ1VSSVRZX0NGTEFHU19yZW1vdmVfYWFyY2g2NCA9ICItZnBpZSIKK1NFQ1VSSVRZX0NGTEFHU19hcHBlbmRfYWFyY2g2NCA9ICIgLWZQSUUiCisKK1MgPSAiJHtXT1JLRElSfS9naXQiCisKK0xERkxBR1MgKz0gIi1XbCwteixyZWxybywteixub3cgJHtAYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsICdsZC1pcy1nb2xkJywgJyAtZnVzZS1sZD1iZmQgJywgJycsIGQpfSIKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9saWJ1cmN1L2xpYnVyY3VfMC45LjEuYmIgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbGlidXJjdS9saWJ1cmN1XzAuOS4xLmJiCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhYWRjMzJmLi4wMDAwMDAwCi0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9saWJ1cmN1L2xpYnVyY3VfMC45LjEuYmIKKysrIC9kZXYvbnVsbApAQCAtMSwyMSArMCwwIEBACi1TVU1NQVJZID0gIlVzZXJzcGFjZSBSQ1UgKHJlYWQtY29weS11cGRhdGUpIGxpYnJhcnkiCi1IT01FUEFHRSA9ICJodHRwOi8vbHR0bmcub3JnL3VyY3UiCi1CVUdUUkFDS0VSID0gImh0dHA6Ly9sdHRuZy5vcmcvcHJvamVjdC9pc3N1ZXMiCi0KLUxJQ0VOU0UgPSAiTEdQTHYyLjErICYgTUlULXN0eWxlIgotTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vTElDRU5TRTttZDU9ZTU0OGQyODczNzI4OWQ3NWE4ZjFlMDFiYTJmZDc4MjUgXAotICAgICAgICAgICAgICAgICAgICBmaWxlOi8vdXJjdS5oO2JlZ2lubGluZT00O2VuZGxpbmU9MzI7bWQ1PTRkZTBkNjhkM2E5OTc2NDM3MTUwMzZkMjIwOWFlMWQ5IFwKLSAgICAgICAgICAgICAgICAgICAgZmlsZTovL3VyY3UvdWF0b21pYy94ODYuaDtiZWdpbmxpbmU9NDtlbmRsaW5lPTIxO21kNT01OGU1MGJiZDhhMmYwNzNiYjU1MDBlNjU1NGFmMGQwYiIKLQotU1JDX1VSSSA9ICIgXAotCWh0dHA6Ly9sdHRuZy5vcmcvZmlsZXMvdXJjdS91c2Vyc3BhY2UtcmN1LSR7UFZ9LnRhci5iejIgXAotCWZpbGU6Ly8wMDAxLVN1cHBvcnQtZm9yLU5JT1MyLWFyY2hpdGVjdHVyZS5wYXRjaCBcCi0gICAgICAgIGZpbGU6Ly8wMDAyLVN1cHBvcnQtZm9yLWFhcmNoNjRfYmUucGF0Y2ggXAotCSIKLQotU1JDX1VSSVttZDVzdW1dID0gIjEyNGVhZWVhMDY4NjMyNzFjMGJkZjJhMGNjMWQ4ZTRiIgotU1JDX1VSSVtzaGEyNTZzdW1dID0gImY4ZDI3OGU5ZDk1YmVjOTdjOWJhOTU0ZmM0YzNmYjU4NDkzNmJjMDAxMDcxM2E4ZmUzNThiOTE2YmFmZDg3MTUiCi0KLVMgPSAiJHtXT1JLRElSfS91c2Vyc3BhY2UtcmN1LSR7UFZ9IgotQ0ZMQUdTX2FwcGVuZF9saWJjLXVjbGliYyA9ICIgLURfR05VX1NPVVJDRSIKLWluaGVyaXQgYXV0b3Rvb2xzCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbGlidXJjdS9saWJ1cmN1XzAuOS4yLmJiIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2xpYnVyY3UvbGlidXJjdV8wLjkuMi5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yM2ZiOGM0Ci0tLSAvZGV2L251bGwKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2xpYnVyY3UvbGlidXJjdV8wLjkuMi5iYgpAQCAtMCwwICsxLDIxIEBACitTVU1NQVJZID0gIlVzZXJzcGFjZSBSQ1UgKHJlYWQtY29weS11cGRhdGUpIGxpYnJhcnkiCitIT01FUEFHRSA9ICJodHRwOi8vbHR0bmcub3JnL3VyY3UiCitCVUdUUkFDS0VSID0gImh0dHA6Ly9sdHRuZy5vcmcvcHJvamVjdC9pc3N1ZXMiCisKK0xJQ0VOU0UgPSAiTEdQTHYyLjErICYgTUlULXN0eWxlIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vTElDRU5TRTttZDU9ZTU0OGQyODczNzI4OWQ3NWE4ZjFlMDFiYTJmZDc4MjUgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vdXJjdS5oO2JlZ2lubGluZT00O2VuZGxpbmU9MzI7bWQ1PTRkZTBkNjhkM2E5OTc2NDM3MTUwMzZkMjIwOWFlMWQ5IFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL3VyY3UvdWF0b21pYy94ODYuaDtiZWdpbmxpbmU9NDtlbmRsaW5lPTIxO21kNT01OGU1MGJiZDhhMmYwNzNiYjU1MDBlNjU1NGFmMGQwYiIKKworU1JDX1VSSSA9ICIgXAorCWh0dHA6Ly9sdHRuZy5vcmcvZmlsZXMvdXJjdS91c2Vyc3BhY2UtcmN1LSR7UFZ9LnRhci5iejIgXAorCWZpbGU6Ly8wMDAxLVN1cHBvcnQtZm9yLU5JT1MyLWFyY2hpdGVjdHVyZS5wYXRjaCBcCisgICAgICAgIGZpbGU6Ly8wMDAyLVN1cHBvcnQtZm9yLWFhcmNoNjRfYmUucGF0Y2ggXAorCSIKKworU1JDX1VSSVttZDVzdW1dID0gIjQ5Zjg2ZTY4YzFlMmY0MWQzMDMzODFhMjcxYjc5MWQxIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjhmN2ZhMzEzYjFlMGEzZjc0MmNlYTI0Y2U2M2EzOWMwZWZlNjNlNjE1YTc2OWUyOTYxZTU1YmQyNjYzZWNhYTMiCisKK1MgPSAiJHtXT1JLRElSfS91c2Vyc3BhY2UtcmN1LSR7UFZ9IgorQ0ZMQUdTX2FwcGVuZF9saWJjLXVjbGliYyA9ICIgLURfR05VX1NPVVJDRSIKK2luaGVyaXQgYXV0b3Rvb2xzCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbGlieHNsdC9saWJ4c2x0LzAwMDEtVXNlLXBrZy1jb25maWctdG8tZmluZC1nY3J5cHQtYW5kLWxpYnhtbDIucGF0Y2ggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbGlieHNsdC9saWJ4c2x0LzAwMDEtVXNlLXBrZy1jb25maWctdG8tZmluZC1nY3J5cHQtYW5kLWxpYnhtbDIucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzE4NjcwNgotLS0gL2Rldi9udWxsCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9saWJ4c2x0L2xpYnhzbHQvMDAwMS1Vc2UtcGtnLWNvbmZpZy10by1maW5kLWdjcnlwdC1hbmQtbGlieG1sMi5wYXRjaApAQCAtMCwwICsxLDEzMCBAQAorRnJvbSBlZDcxYWM5NTQ4YTJiYjZlY2QyZGM1YWQ4ODBjNjA0OTc1Zjg3MmIwIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogQWxleGFuZGVyIEthbmF2aW4gPGFsZXgua2FuYXZpbkBnbWFpbC5jb20+CitEYXRlOiBUaHUsIDIgSnVuIDIwMTYgMTQ6MjA6MDQgKzAzMDAKK1N1YmplY3Q6IFtQQVRDSF0gVXNlIHBrZy1jb25maWcgdG8gZmluZCBnY3J5cHQgYW5kIGxpYnhtbDIuCisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZyBbbGlieG1sMiBpcyB1cHN0cmVhbWFibGVdCisKK1JQIDIwMTQvNS8yMgorCitTaWduZWQtb2ZmLWJ5OiBBbGV4YW5kZXIgS2FuYXZpbiA8YWxleC5rYW5hdmluQGdtYWlsLmNvbT4KKy0tLQorIGNvbmZpZ3VyZS5pbiB8IDcwICsrKysrKysrKysrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIDEgZmlsZSBjaGFuZ2VkLCAxMiBpbnNlcnRpb25zKCspLCA1OCBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL2NvbmZpZ3VyZS5pbiBiL2NvbmZpZ3VyZS5pbgoraW5kZXggOGJkZjQ1YS4uMGIyYjMxMiAxMDA2NDQKKy0tLSBhL2NvbmZpZ3VyZS5pbgorKysrIGIvY29uZmlndXJlLmluCitAQCAtMzc3LDYgKzM3Nyw4IEBAIEFDX1NVQlNUKHB5dGhvbmRpcikKKyBBQ19TVUJTVChQWVRIT05fU1VCRElSKQorIEFDX1NVQlNUKFBZVEhPTl9MSUJTKQorIAorK1BLR19QUk9HX1BLR19DT05GSUcKKysKKyBBQ19BUkdfV0lUSChjcnlwdG8sIFsgIC0td2l0aC1jcnlwdG8gICAgICAgICAgIEFkZCBjcnlwdG8gc3VwcG9ydCB0byBleHNsdCAob24pXSkKKyBXSVRIX0NSWVBUTz0wCisgQ1JZUFRPX1RFU1RESVI9CitAQCAtMzk0LDI3ICszOTYsMTQgQEAgY2FzZSAkaG9zdCBpbgorICAgICBDUllQVE9fVEVTVERJUj1jcnlwdG8KKyAgICAgOzsKKyAgICopCistICAgIEFDX1BBVEhfVE9PTChMSUJHQ1JZUFRfQ09ORklHLCBsaWJnY3J5cHQtY29uZmlnLCBubykKKy0gICAgaWYgdGVzdCAiJExJQkdDUllQVF9DT05GSUciICE9ICJubyIgOyB0aGVuCistICAgICAgTElCR0NSWVBUX1ZFUlNJT049YCRMSUJHQ1JZUFRfQ09ORklHIC0tdmVyc2lvbmAKKy0gICAgICBpZiB0ZXN0IFZFUlNJT05fVE9fTlVNQkVSKGVjaG8gJExJQkdDUllQVF9WRVJTSU9OKSAtbHQgVkVSU0lPTl9UT19OVU1CRVIoZWNobyAiMS4xLjQyIikKKy0gICAgICB0aGVuCistICAgICAgICBMSUJHQ1JZUFRfQ0ZMQUdTPSIiCistICAgICAgICBMSUJHQ1JZUFRfTElCUz0iIgorLSAgICAgICAgZWNobyAnZ2NyeXB0IGxpYnJhcnkgdmVyc2lvbiA8IDEuMS40MiAtIENyeXB0byBleHRlbnNpb25zIHdpbGwgbm90IGJlIGF2YWlsYWJsZS4nCistICAgICAgZWxzZQorLSAgICAgICAgTElCR0NSWVBUX0NGTEFHUz1gJExJQkdDUllQVF9DT05GSUcgJGxpYmdjcnlwdF9jb25maWdfYXJncyAtLWNmbGFnc2AKKy0gICAgICAgIExJQkdDUllQVF9MSUJTPWAkTElCR0NSWVBUX0NPTkZJRyAkbGliZ2NyeXB0X2NvbmZpZ19hcmdzIC0tbGlic2AKKy0gICAgICAgIEFDX0RFRklORShIQVZFX0dDUllQVCwgMSwgW0RlZmluZSBpZiBnY3J5cHQgbGlicmFyeSBpcyBhdmFpbGFibGUuXSkKKy0gICAgICAgIGVjaG8gJ0NyeXB0byBleHRlbnNpb25zIHdpbGwgYmUgYXZhaWxhYmxlLicKKysgICAgUEtHX0NIRUNLX01PRFVMRVMoTElCR0NSWVBULCBbbGliZ2NyeXB0ID49IDEuMS40Ml0sIFsKKysgICAgICAgICAgQUNfREVGSU5FKEhBVkVfR0NSWVBULCAxLCBbRGVmaW5lIGlmIGdjcnlwdCBsaWJyYXJ5IGlzIGF2YWlsYWJsZS5dKQorKyAgICAgICAgICBlY2hvICdDcnlwdG8gZXh0ZW5zaW9ucyB3aWxsIGJlIGF2YWlsYWJsZS4nCisgICAgICAgICBXSVRIX0NSWVBUTz0xCisgICAgICAgICBDUllQVE9fVEVTVERJUj1jcnlwdG8KKy0gICAgICBmaQorLSAgICBlbHNlCistICAgICAgTElCR0NSWVBUX0NGTEFHUz0iIgorLSAgICAgIExJQkdDUllQVF9MSUJTPSIiCistICAgICAgZWNobyAnQ3J5cHRvIGV4dGVuc2lvbnMgd2lsbCBub3QgYmUgYXZhaWxhYmxlLiBJbnN0YWxsIGxpYmdjcnlwdCBhbmQgcmVjb25maWd1cmUgdG8gbWFrZSBhdmFpbGFibGUuJworLSAgICBmaQorKyAgICAgICBdLCBbCisrICAgICAgICAgIGVjaG8gJ0NyeXB0byBleHRlbnNpb25zIHdpbGwgbm90IGJlIGF2YWlsYWJsZS4gSW5zdGFsbCBsaWJnY3J5cHQgPj0gMS4xLjQyIGFuZCByZWNvbmZpZ3VyZSB0byBtYWtlIGF2YWlsYWJsZS4nCisrICAgICAgICBdKQorIGVzYWMKKyBmaQorIEFDX1NVQlNUKFdJVEhfQ1JZUFRPKQorQEAgLTQ3NiwyNCArNDY1LDggQEAgZG5sIG9yaWdpbmFsIHdvcmsgLSBNYXRoaWV1IExhY2FnZSAzMC8wMy8yMDAwCisgZG5sIHNvbWUgdHdlYWtpbmcgLSBEYXZpZCBIw6RyZGVtYW4gMzAvMTAvMjAwMQorIGRubAorIAorLUxJQlhNTF9DT05GSUdfUFJFRklYPSIiCisgTElCWE1MX1NSQz0iIgorIAorLUFDX0FSR19XSVRIKGxpYnhtbC1wcmVmaXgsCistICAgICAgICBbICAtLXdpdGgtbGlieG1sLXByZWZpeD1bUEZYXQkJU3BlY2lmeSBsb2NhdGlvbiBvZiBsaWJ4bWwgY29uZmlnXSwKKy0JTElCWE1MX0NPTkZJR19QUkVGSVg9JHdpdGh2YWwKKy0pCistICAgICAgICAKKy1BQ19BUkdfV0lUSChsaWJ4bWwtaW5jbHVkZS1wcmVmaXgsCistICAgICAgICBbICAtLXdpdGgtbGlieG1sLWluY2x1ZGUtcHJlZml4PVtQRlhdCVNwZWNpZnkgbG9jYXRpb24gb2YgbGlieG1sIGhlYWRlcnNdLAorLSAgICAgICAgTElCWE1MX0NGTEFHUz0iLUkkd2l0aHZhbCIKKy0pCistCistQUNfQVJHX1dJVEgobGlieG1sLWxpYnMtcHJlZml4LAorLSAgICAgICAgWyAgLS13aXRoLWxpYnhtbC1saWJzLXByZWZpeD1bUEZYXQlTcGVjaWZ5IGxvY2F0aW9uIG9mIGxpYnhtbCBsaWJzXSwKKy0gICAgICAgIExJQlhNTF9MSUJTPSItTCR3aXRodmFsIgorLSkKKy0KKyBBQ19BUkdfV0lUSChsaWJ4bWwtc3JjLAorIAlbICAtLXdpdGgtbGlieG1sLXNyYz1bRElSXSAgICAgICAgICAgICAgRm9yIGxpYnhtbCB0aGF0cyBub3QgaW5zdGFsbGVkIHlldCAoc2V0cyBhbGwgdGhyZWUgYWJvdmUpXSwKKyAJTElCWE1MX1NSQz0iJHdpdGh2YWwiCitAQCAtNTU2LDI4ICs1MjksOSBAQCB0aGVuCisgCWZpCisgZmkKKyAKKy1kbmwKKy1kbmwgbWFrZSBzdXJlIHhtbDItY29uZmlnIGlzIGV4ZWN1dGFibGUsCistZG5sIHRlc3QgdmVyc2lvbiBhbmQgaW5pdCBvdXIgdmFyaWFibGVzCistZG5sCistCistaWYgJHtYTUxfQ09ORklHfSAtLWxpYnMgcHJpbnQgPiAvZGV2L251bGwgMj4mMQorLXRoZW4KKy0JWE1MVkVSUz1gJFhNTF9DT05GSUcgLS12ZXJzaW9uYAorLQlpZiB0ZXN0IFZFUlNJT05fVE9fTlVNQkVSKGVjaG8gJFhNTFZFUlMpIC1nZSBWRVJTSU9OX1RPX05VTUJFUihlY2hvICRMSUJYTUxfUkVRVUlSRURfVkVSU0lPTikKKy0JdGhlbgorLQkJQUNfTVNHX1JFU1VMVCgkWE1MVkVSUyBmb3VuZCkKKy0JZWxzZQorLQkJQUNfTVNHX0VSUk9SKFZlcnNpb24gJFhNTFZFUlMgZm91bmQuIFlvdSBuZWVkIGF0IGxlYXN0IGxpYnhtbDIgJExJQlhNTF9SRVFVSVJFRF9WRVJTSU9OIGZvciB0aGlzIHZlcnNpb24gb2YgbGlieHNsdCkKKy0JZmkKKy0JTElCWE1MX0xJQlM9IiRMSUJYTUxfTElCUyBgJFhNTF9DT05GSUcgLS1saWJzYCIKKy0JaWYgdGVzdCAieCRMSUJYTUxfU1JDIiA9ICJ4IjsgdGhlbgorLQkJTElCWE1MX0NGTEFHUz0iJExJQlhNTF9DRkxBR1MgYCRYTUxfQ09ORklHIC0tY2ZsYWdzYCIKKy0JZmkKKy1lbHNlCistCUFDX01TR19FUlJPUihbQ291bGQgbm90IGZpbmQgbGlieG1sMiBhbnl3aGVyZSwgY2hlY2sgZnRwOi8veG1sc29mdC5vcmcvLl0pCistZmkKKy0KKytQS0dfQ0hFQ0tfTU9EVUxFUyhMSUJYTUwsIFtsaWJ4bWwtMi4wID49ICRMSUJYTUxfUkVRVUlSRURfVkVSU0lPTl0sLAorKyAgICBbQUNfTVNHX0VSUk9SKFtDb3VsZCBub3QgZmluZCBsaWJ4bWwtMi4wID49ICRMSUJYTUxfUkVRVUlSRURfVkVSU0lPTiBhbnl3aGVyZSwgY2hlY2sgZnRwOi8veG1sc29mdC5vcmcvLl0pXQorKykKKyAKKyBBQ19TVUJTVChDRkxBR1MpCisgQUNfU1VCU1QoQ1BQRkxBR1MpCitAQCAtNjAyLDcgKzU1Niw3IEBAIGZpCisgCisgaWYgdGVzdCAiJHdpdGhfcGx1Z2lucyIgPSAieWVzIiA7IHRoZW4KKyAgIEFDX01TR19DSEVDS0lORyhbbGlieG1sMiBtb2R1bGUgc3VwcG9ydF0pCistICBXSVRIX01PRFVMRVM9ImAkWE1MX0NPTkZJRyAtLW1vZHVsZXNgIgorKyAgV0lUSF9NT0RVTEVTPSJgJFBLR19DT05GSUcgLS12YXJpYWJsZT1tb2R1bGVzIGxpYnhtbC0yLjBgIgorICAgaWYgdGVzdCAiJHtXSVRIX01PRFVMRVN9IiA9ICIxIjsgdGhlbgorICAgICBBQ19NU0dfUkVTVUxUKHllcykKKyAgIGVsc2UKKy0tIAorMi44LjEKKwpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2xpYnhzbHQvbGlieHNsdC9DVkUtMjAxNS03OTk1LnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2xpYnhzbHQvbGlieHNsdC9DVkUtMjAxNS03OTk1LnBhdGNoCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmNDExM2VmLi4wMDAwMDAwCi0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9saWJ4c2x0L2xpYnhzbHQvQ1ZFLTIwMTUtNzk5NS5wYXRjaAorKysgL2Rldi9udWxsCkBAIC0xLDM0ICswLDAgQEAKLUZyb20gN2NhMTlkZjg5MmNhMjJkOTMxNGU5NWQ1OWNlMmFiZGVmZjQ2YjYxNyBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKLUZyb206IERhbmllbCBWZWlsbGFyZCA8dmVpbGxhcmRAcmVkaGF0LmNvbT4KLURhdGU6IFRodSwgMjkgT2N0IDIwMTUgMTk6MzM6MjMgKzA4MDAKLVN1YmplY3Q6IEZpeCBmb3IgdHlwZSBjb25mdXNpb24gaW4gcHJlcHJvY2Vzc2luZyBhdHRyaWJ1dGVzCi0KLUNWRS0yMDE1LTc5OTUgaHR0cDovL3d3dy5vcGVud2FsbC5jb20vbGlzdHMvb3NzLXNlY3VyaXR5LzIwMTUvMTAvMjcvMTAKLVdlIG5lZWQgdG8gY2hlY2sgdGhhdCB0aGUgcGFyZW50IG5vZGUgaXMgYW4gZWxlbWVudCBiZWZvcmUgZGVyZWZlcmVuY2luZwotaXRzIG5hbWVzcGFjZQotCi1VcHN0cmVhbS1TdGF0dXM6IEJhY2twb3J0Ci1DVkU6IENWRS0yMDE1LTc5OTUKLQotaHR0cHM6Ly9naXQuZ25vbWUub3JnL2Jyb3dzZS9saWJ4c2x0L2NvbW1pdC8/aWQ9N2NhMTlkZjg5MmNhMjJkOTMxNGU5NWQ1OWNlMmFiZGVmZjQ2YjYxNwotCi1TaWduZWQtb2ZmLWJ5OiBBcm1pbiBLdXN0ZXIgPGFrdXN0ZXJAbXZpc3RhLmNvbT4KLQotLS0tCi0gbGlieHNsdC9wcmVwcm9jLmMgfCAzICsrLQotIDEgZmlsZSBjaGFuZ2VkLCAyIGluc2VydGlvbnMoKyksIDEgZGVsZXRpb24oLSkKLQotSW5kZXg6IGxpYnhzbHQtMS4xLjI4L2xpYnhzbHQvcHJlcHJvYy5jCi09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLS0gbGlieHNsdC0xLjEuMjgub3JpZy9saWJ4c2x0L3ByZXByb2MuYwotKysrIGxpYnhzbHQtMS4xLjI4L2xpYnhzbHQvcHJlcHJvYy5jCi1AQCAtMjI0NSw3ICsyMjQ1LDggQEAgeHNsdFN0eWxlUHJlQ29tcHV0ZSh4c2x0U3R5bGVzaGVldFB0ciBzdAotIAl9IGVsc2UgaWYgKElTX1hTTFRfTkFNRShpbnN0LCAiYXR0cmlidXRlIikpIHsKLSAJICAgIHhtbE5vZGVQdHIgcGFyZW50ID0gaW5zdC0+cGFyZW50OwotIAotLQkgICAgaWYgKChwYXJlbnQgPT0gTlVMTCkgfHwgKHBhcmVudC0+bnMgPT0gTlVMTCkgfHwKLSsJICAgIGlmICgocGFyZW50ID09IE5VTEwpIHx8Ci0rCSAgICAgICAgKHBhcmVudC0+dHlwZSAhPSBYTUxfRUxFTUVOVF9OT0RFKSB8fCAocGFyZW50LT5ucyA9PSBOVUxMKSB8fAotIAkJKChwYXJlbnQtPm5zICE9IGluc3QtPm5zKSAmJgotIAkJICgheG1sU3RyRXF1YWwocGFyZW50LT5ucy0+aHJlZiwgaW5zdC0+bnMtPmhyZWYpKSkgfHwKLSAJCSgheG1sU3RyRXF1YWwocGFyZW50LT5uYW1lLCBCQURfQ0FTVCAiYXR0cmlidXRlLXNldCIpKSkgewpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2xpYnhzbHQvbGlieHNsdC9wa2djb25maWcucGF0Y2ggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbGlieHNsdC9saWJ4c2x0L3BrZ2NvbmZpZy5wYXRjaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODlkMTRjOS4uMDAwMDAwMAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbGlieHNsdC9saWJ4c2x0L3BrZ2NvbmZpZy5wYXRjaAorKysgL2Rldi9udWxsCkBAIC0xLDExOCArMCwwIEBACi1Vc2UgcGtnLWNvbmZpZyB0byBmaW5kIGdjcnlwdCBhbmQgbGlieG1sMi4KLQotVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nIFtsaWJ4bWwyIGlzIHVwc3RyZWFtYWJsZV0KLQotUlAgMjAxNC81LzIyCi0KLUluZGV4OiBsaWJ4c2x0LTEuMS4yOC9jb25maWd1cmUuaW4KLT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tLSBsaWJ4c2x0LTEuMS4yOC5vcmlnL2NvbmZpZ3VyZS5pbgkyMDE0LTA1LTEzIDE2OjQ2OjAyLjI3ODQ3NDk2NyArMDAwMAotKysrIGxpYnhzbHQtMS4xLjI4L2NvbmZpZ3VyZS5pbgkyMDE0LTA1LTEzIDE2OjUzOjU2LjUxMDQ3MjU2MSArMDAwMAotQEAgLTM3Niw2ICszNzYsOCBAQAotIEFDX1NVQlNUKFBZVEhPTl9TVUJESVIpCi0gQUNfU1VCU1QoUFlUSE9OX0xJQlMpCi0gCi0rUEtHX1BST0dfUEtHX0NPTkZJRwotKwotIEFDX0FSR19XSVRIKGNyeXB0bywgWyAgLS13aXRoLWNyeXB0byAgICAgICAgICAgQWRkIGNyeXB0byBzdXBwb3J0IHRvIGV4c2x0IChvbildKQotIFdJVEhfQ1JZUFRPPTAKLSBpZiB0ZXN0ICIkd2l0aF9jcnlwdG8iID0gIm5vIiA7IHRoZW4KLUBAIC0zOTEsMjYgKzM5MywxMyBAQAotICAgICBXSVRIX0NSWVBUTz0xCi0gICAgIDs7Ci0gICAqKQotLSAgICBBQ19QQVRIX1BST0coTElCR0NSWVBUX0NPTkZJRywgbGliZ2NyeXB0LWNvbmZpZywgbm8pCi0tICAgIGlmIHRlc3QgIiRMSUJHQ1JZUFRfQ09ORklHIiAhPSAibm8iIDsgdGhlbgotLSAgICAgIExJQkdDUllQVF9WRVJTSU9OPWAkTElCR0NSWVBUX0NPTkZJRyAtLXZlcnNpb25gCi0tICAgICAgaWYgdGVzdCBWRVJTSU9OX1RPX05VTUJFUihlY2hvICRMSUJHQ1JZUFRfVkVSU0lPTikgLWx0IFZFUlNJT05fVE9fTlVNQkVSKGVjaG8gIjEuMS40MiIpCi0tICAgICAgdGhlbgotLSAgICAgICAgTElCR0NSWVBUX0NGTEFHUz0iIgotLSAgICAgICAgTElCR0NSWVBUX0xJQlM9IiIKLS0gICAgICAgIGVjaG8gJ2djcnlwdCBsaWJyYXJ5IHZlcnNpb24gPCAxLjEuNDIgLSBDcnlwdG8gZXh0ZW5zaW9ucyB3aWxsIG5vdCBiZSBhdmFpbGFibGUuJwotLSAgICAgIGVsc2UKLS0gICAgICAgIExJQkdDUllQVF9DRkxBR1M9YCRMSUJHQ1JZUFRfQ09ORklHICRsaWJnY3J5cHRfY29uZmlnX2FyZ3MgLS1jZmxhZ3NgCi0tICAgICAgICBMSUJHQ1JZUFRfTElCUz1gJExJQkdDUllQVF9DT05GSUcgJGxpYmdjcnlwdF9jb25maWdfYXJncyAtLWxpYnNgCi0tICAgICAgICBBQ19ERUZJTkUoSEFWRV9HQ1JZUFQsIDEsIFtEZWZpbmUgaWYgZ2NyeXB0IGxpYnJhcnkgaXMgYXZhaWxhYmxlLl0pCi0tICAgICAgICBlY2hvICdDcnlwdG8gZXh0ZW5zaW9ucyB3aWxsIGJlIGF2YWlsYWJsZS4nCi0rICAgIFBLR19DSEVDS19NT0RVTEVTKExJQkdDUllQVCwgW2xpYmdjcnlwdCA+PSAxLjEuNDJdLCBbCi0rICAgICAgICAgIEFDX0RFRklORShIQVZFX0dDUllQVCwgMSwgW0RlZmluZSBpZiBnY3J5cHQgbGlicmFyeSBpcyBhdmFpbGFibGUuXSkKLSsgICAgICAgICAgZWNobyAnQ3J5cHRvIGV4dGVuc2lvbnMgd2lsbCBiZSBhdmFpbGFibGUuJwotIAkJV0lUSF9DUllQVE89MQotLSAgICAgIGZpCi0tICAgIGVsc2UKLS0gICAgICBMSUJHQ1JZUFRfQ0ZMQUdTPSIiCi0tICAgICAgTElCR0NSWVBUX0xJQlM9IiIKLS0gICAgICBlY2hvICdDcnlwdG8gZXh0ZW5zaW9ucyB3aWxsIG5vdCBiZSBhdmFpbGFibGUuIEluc3RhbGwgbGliZ2NyeXB0IGFuZCByZWNvbmZpZ3VyZSB0byBtYWtlIGF2YWlsYWJsZS4nCi0tICAgIGZpCi0rCV0sIFsKLSsgICAgICAgICAgZWNobyAnQ3J5cHRvIGV4dGVuc2lvbnMgd2lsbCBub3QgYmUgYXZhaWxhYmxlLiBJbnN0YWxsIGxpYmdjcnlwdCA+PSAxLjEuNDIgYW5kIHJlY29uZmlndXJlIHRvIG1ha2UgYXZhaWxhYmxlLicKLSsgICAgICAgIF0pCi0gZXNhYwotIGZpCi0gQUNfU1VCU1QoV0lUSF9DUllQVE8pCi1AQCAtNDcxLDI0ICs0NjAsOCBAQAotIGRubCBzb21lIHR3ZWFraW5nIC0gRGF2aWQgSMOkcmRlbWFuIDMwLzEwLzIwMDEKLSBkbmwKLSAKLS1MSUJYTUxfQ09ORklHX1BSRUZJWD0iIgotIExJQlhNTF9TUkM9IiIKLSAKLS1BQ19BUkdfV0lUSChsaWJ4bWwtcHJlZml4LAotLSAgICAgICAgWyAgLS13aXRoLWxpYnhtbC1wcmVmaXg9W1BGWF0JCVNwZWNpZnkgbG9jYXRpb24gb2YgbGlieG1sIGNvbmZpZ10sCi0tCUxJQlhNTF9DT05GSUdfUFJFRklYPSR3aXRodmFsCi0tKQotLSAgICAgICAgCi0tQUNfQVJHX1dJVEgobGlieG1sLWluY2x1ZGUtcHJlZml4LAotLSAgICAgICAgWyAgLS13aXRoLWxpYnhtbC1pbmNsdWRlLXByZWZpeD1bUEZYXQlTcGVjaWZ5IGxvY2F0aW9uIG9mIGxpYnhtbCBoZWFkZXJzXSwKLS0gICAgICAgIExJQlhNTF9DRkxBR1M9Ii1JJHdpdGh2YWwiCi0tKQotLQotLUFDX0FSR19XSVRIKGxpYnhtbC1saWJzLXByZWZpeCwKLS0gICAgICAgIFsgIC0td2l0aC1saWJ4bWwtbGlicy1wcmVmaXg9W1BGWF0JU3BlY2lmeSBsb2NhdGlvbiBvZiBsaWJ4bWwgbGlic10sCi0tICAgICAgICBMSUJYTUxfTElCUz0iLUwkd2l0aHZhbCIKLS0pCi0tCi0gQUNfQVJHX1dJVEgobGlieG1sLXNyYywKLSAJWyAgLS13aXRoLWxpYnhtbC1zcmM9W0RJUl0gICAgICAgICAgICAgIEZvciBsaWJ4bWwgdGhhdHMgbm90IGluc3RhbGxlZCB5ZXQgKHNldHMgYWxsIHRocmVlIGFib3ZlKV0sCi0gCUxJQlhNTF9TUkM9IiR3aXRodmFsIgotQEAgLTU1MSwyOCArNTI0LDkgQEAKLSAJZmkKLSBmaQotIAotLWRubAotLWRubCBtYWtlIHN1cmUgeG1sMi1jb25maWcgaXMgZXhlY3V0YWJsZSwKLS1kbmwgdGVzdCB2ZXJzaW9uIGFuZCBpbml0IG91ciB2YXJpYWJsZXMKLS1kbmwKLS0KLS1pZiAke1hNTF9DT05GSUd9IC0tbGlicyBwcmludCA+IC9kZXYvbnVsbCAyPiYxCi0tdGhlbgotLQlYTUxWRVJTPWAkWE1MX0NPTkZJRyAtLXZlcnNpb25gCi0tCWlmIHRlc3QgVkVSU0lPTl9UT19OVU1CRVIoZWNobyAkWE1MVkVSUykgLWdlIFZFUlNJT05fVE9fTlVNQkVSKGVjaG8gJExJQlhNTF9SRVFVSVJFRF9WRVJTSU9OKQotLQl0aGVuCi0tCQlBQ19NU0dfUkVTVUxUKCRYTUxWRVJTIGZvdW5kKQotLQllbHNlCi0tCQlBQ19NU0dfRVJST1IoVmVyc2lvbiAkWE1MVkVSUyBmb3VuZC4gWW91IG5lZWQgYXQgbGVhc3QgbGlieG1sMiAkTElCWE1MX1JFUVVJUkVEX1ZFUlNJT04gZm9yIHRoaXMgdmVyc2lvbiBvZiBsaWJ4c2x0KQotLQlmaQotLQlMSUJYTUxfTElCUz0iJExJQlhNTF9MSUJTIGAkWE1MX0NPTkZJRyAtLWxpYnNgIgotLQlpZiB0ZXN0ICJ4JExJQlhNTF9TUkMiID0gIngiOyB0aGVuCi0tCQlMSUJYTUxfQ0ZMQUdTPSIkTElCWE1MX0NGTEFHUyBgJFhNTF9DT05GSUcgLS1jZmxhZ3NgIgotLQlmaQotLWVsc2UKLS0JQUNfTVNHX0VSUk9SKFtDb3VsZCBub3QgZmluZCBsaWJ4bWwyIGFueXdoZXJlLCBjaGVjayBmdHA6Ly94bWxzb2Z0Lm9yZy8uXSkKLS1maQotLQotK1BLR19DSEVDS19NT0RVTEVTKExJQlhNTCwgW2xpYnhtbC0yLjAgPj0gJExJQlhNTF9SRVFVSVJFRF9WRVJTSU9OXSwsCi0rICAgIFtBQ19NU0dfRVJST1IoW0NvdWxkIG5vdCBmaW5kIGxpYnhtbC0yLjAgPj0gJExJQlhNTF9SRVFVSVJFRF9WRVJTSU9OIGFueXdoZXJlLCBjaGVjayBmdHA6Ly94bWxzb2Z0Lm9yZy8uXSldCi0rKQotIAotIEFDX1NVQlNUKENGTEFHUykKLSBBQ19TVUJTVChDUFBGTEFHUykKLUBAIC01OTcsNyArNTUxLDcgQEAKLSAKLSBpZiB0ZXN0ICIkd2l0aF9wbHVnaW5zIiA9ICJ5ZXMiIDsgdGhlbgotICAgQUNfTVNHX0NIRUNLSU5HKFtsaWJ4bWwyIG1vZHVsZSBzdXBwb3J0XSkKLS0gIFdJVEhfTU9EVUxFUz0iYCRYTUxfQ09ORklHIC0tbW9kdWxlc2AiCi0rICBXSVRIX01PRFVMRVM9ImAkUEtHX0NPTkZJRyAtLXZhcmlhYmxlPW1vZHVsZXMgbGlieG1sLTIuMGAiCi0gICBpZiB0ZXN0ICIke1dJVEhfTU9EVUxFU30iID0gIjEiOyB0aGVuCi0gICAgIEFDX01TR19SRVNVTFQoeWVzKQotICAgZWxzZQpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2xpYnhzbHQvbGlieHNsdF8xLjEuMjguYmIgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbGlieHNsdC9saWJ4c2x0XzEuMS4yOC5iYgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjNhYzU5OS4uMDAwMDAwMAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbGlieHNsdC9saWJ4c2x0XzEuMS4yOC5iYgorKysgL2Rldi9udWxsCkBAIC0xLDUwICswLDAgQEAKLVNVTU1BUlkgPSAiR05PTUUgWFNMVCBsaWJyYXJ5IgotSE9NRVBBR0UgPSAiaHR0cDovL3htbHNvZnQub3JnL1hTTFQvIgotQlVHVFJBQ0tFUiA9ICJodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy8iCi0KLUxJQ0VOU0UgPSAiTUlUIgotTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ29weXJpZ2h0O21kNT0wY2Q5YTA3YWZiZWIyNDAyNmM5YjAzYWVjZmViYTQ1OCIKLQotU0VDVElPTiA9ICJsaWJzIgotREVQRU5EUyA9ICJsaWJ4bWwyIgotCi1TUkNfVVJJID0gImZ0cDovL3htbHNvZnQub3JnL2xpYnhzbHQvbGlieHNsdC0ke1BWfS50YXIuZ3ogXAotICAgICAgICAgICBmaWxlOi8vcGtnY29uZmlnX2ZpeC5wYXRjaCBcCi0gICAgICAgICAgIGZpbGU6Ly9wa2djb25maWcucGF0Y2ggXAotICAgICAgICAgICBmaWxlOi8vQ1ZFLTIwMTUtNzk5NS5wYXRjaCIKLQotU1JDX1VSSVttZDVzdW1dID0gIjk2NjdiZjZmOTMxMGI5NTcyNTRmZGNmNjU5NjYwMGI3IgotU1JDX1VSSVtzaGEyNTZzdW1dID0gIjVmYzcxNTFhNTdiODljMDNkN2I4MjVkZjVhMGZhZTBhOGQ1ZjA1Njc0YzBlN2NmMjkzN2VjZWM0ZDU0YTAyOGMiCi0KLVVQU1RSRUFNX0NIRUNLX1JFR0VYID0gImxpYnhzbHQtKD9QPHB2ZXI+XGQrKFwuXGQrKSspXC50YXIiCi0KLVMgPSAiJHtXT1JLRElSfS9saWJ4c2x0LSR7UFZ9IgotCi1CSU5DT05GSUcgPSAiJHtiaW5kaXJ9L3hzbHQtY29uZmlnIgotCi1pbmhlcml0IGF1dG90b29scyBwa2djb25maWcgYmluY29uZmlnLWRpc2FibGVkIGxpYl9wYWNrYWdlCi0KLSMgV2UgZG9uJ3QgREVQRU5EIG9uIGJpbnV0aWxzIGZvciBhbnNpZGVjbC5oIHNvIGVuc3VyZSB3ZSBkb24ndCB1c2UgdGhlIGhlYWRlcgotZG9fY29uZmlndXJlX3ByZXBlbmQgKCkgewotCXNlZCAtaSAtZSAncy9hbnNpZGVjbC5oLy8nICR7U30vY29uZmlndXJlLmluCi0KLQkjIFRoZSB0aW1lc3RhbXBzIGluIHRoZSAxLjEuMjggdGFyYmFsbCBhcmUgbWVzc2VkIHVwIGNhdXNpbmcgdGhpcyBmaWxlIHRvCi0JIyBhcHBlYXIgb3V0IG9mIGRhdGUuICBUb3VjaCBpdCBzbyB0aGF0IHdlIGRvbid0IHRyeSB0byByZWdlbmVyYXRlIGl0LgotCXRvdWNoICR7U30vZG9jL3hzbHRwcm9jLjEKLX0KLQotRVhUUkFfT0VDT05GID0gIi0td2l0aG91dC1weXRob24gLS13aXRob3V0LWRlYnVnIC0td2l0aG91dC1tZW0tZGVidWcgLS13aXRob3V0LWNyeXB0byIKLSMgb2xkZXIgdmVyc2lvbnMgb2YgdGhpcyByZWNpcGUgaGFkICR7UE59LXV0aWxzCi1SUFJPVklERVNfJHtQTn0tYmluICs9ICIke1BOfS11dGlscyIKLVJDT05GTElDVFNfJHtQTn0tYmluICs9ICIke1BOfS11dGlscyIKLVJSRVBMQUNFU18ke1BOfS1iaW4gKz0gIiR7UE59LXV0aWxzIgotCi0KLWRvX2luc3RhbGxfYXBwZW5kX2NsYXNzLW5hdGl2ZSAoKSB7Ci0gICAgY3JlYXRlX3dyYXBwZXIgJHtEfS8ke2JpbmRpcn0veHNsdHByb2MgWE1MX0NBVEFMT0dfRklMRVM9JHtzeXNjb25mZGlyfS94bWwvY2F0YWxvZy54bWwKLX0KLQotRklMRVNfJHtQTn0gKz0gIiR7bGliZGlyfS9saWJ4c2x0LXBsdWdpbnMiCi1GSUxFU18ke1BOfS1kZXYgKz0gIiR7bGliZGlyfS94c2x0Q29uZi5zaCIKLQotQkJDTEFTU0VYVEVORCA9ICJuYXRpdmUgbmF0aXZlc2RrIgpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2xpYnhzbHQvbGlieHNsdF8xLjEuMjkuYmIgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbGlieHNsdC9saWJ4c2x0XzEuMS4yOS5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iZTc0N2U2Ci0tLSAvZGV2L251bGwKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2xpYnhzbHQvbGlieHNsdF8xLjEuMjkuYmIKQEAgLTAsMCArMSw1MCBAQAorU1VNTUFSWSA9ICJHTk9NRSBYU0xUIGxpYnJhcnkiCitIT01FUEFHRSA9ICJodHRwOi8veG1sc29mdC5vcmcvWFNMVC8iCitCVUdUUkFDS0VSID0gImh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnLyIKKworTElDRU5TRSA9ICJNSVQiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9Db3B5cmlnaHQ7bWQ1PTBjZDlhMDdhZmJlYjI0MDI2YzliMDNhZWNmZWJhNDU4IgorCitTRUNUSU9OID0gImxpYnMiCitERVBFTkRTID0gImxpYnhtbDIiCisKK1NSQ19VUkkgPSAiZnRwOi8veG1sc29mdC5vcmcvbGlieHNsdC9saWJ4c2x0LSR7UFZ9LnRhci5neiBcCisgICAgICAgICAgIGZpbGU6Ly9wa2djb25maWdfZml4LnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovLzAwMDEtVXNlLXBrZy1jb25maWctdG8tZmluZC1nY3J5cHQtYW5kLWxpYnhtbDIucGF0Y2ggXAorICAgICAgICAgICAiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICJhMTI5ZDNjNDRjMDIyZGUzYjlkY2Y2ZDZmMjg4ZDcyZSIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICJiNTk3NmUzODU3ODM3ZTc2MTdiMjlmMjI0OWViYjVlZWFjMzRlMjQ5MjA4ZDMxZjFmYmY3YTZiYTdhNDA5MGNlIgorCitVUFNUUkVBTV9DSEVDS19SRUdFWCA9ICJsaWJ4c2x0LSg/UDxwdmVyPlxkKyhcLlxkKykrKVwudGFyIgorCitTID0gIiR7V09SS0RJUn0vbGlieHNsdC0ke1BWfSIKKworQklOQ09ORklHID0gIiR7YmluZGlyfS94c2x0LWNvbmZpZyIKKworaW5oZXJpdCBhdXRvdG9vbHMgcGtnY29uZmlnIGJpbmNvbmZpZy1kaXNhYmxlZCBsaWJfcGFja2FnZQorCisjIFdlIGRvbid0IERFUEVORCBvbiBiaW51dGlscyBmb3IgYW5zaWRlY2wuaCBzbyBlbnN1cmUgd2UgZG9uJ3QgdXNlIHRoZSBoZWFkZXIKK2RvX2NvbmZpZ3VyZV9wcmVwZW5kICgpIHsKKwlzZWQgLWkgLWUgJ3MvYW5zaWRlY2wuaC8vJyAke1N9L2NvbmZpZ3VyZS5pbgorCisJIyBUaGUgdGltZXN0YW1wcyBpbiB0aGUgMS4xLjI4IHRhcmJhbGwgYXJlIG1lc3NlZCB1cCBjYXVzaW5nIHRoaXMgZmlsZSB0bworCSMgYXBwZWFyIG91dCBvZiBkYXRlLiAgVG91Y2ggaXQgc28gdGhhdCB3ZSBkb24ndCB0cnkgdG8gcmVnZW5lcmF0ZSBpdC4KKwl0b3VjaCAke1N9L2RvYy94c2x0cHJvYy4xCit9CisKK0VYVFJBX09FQ09ORiA9ICItLXdpdGhvdXQtcHl0aG9uIC0td2l0aG91dC1kZWJ1ZyAtLXdpdGhvdXQtbWVtLWRlYnVnIC0td2l0aG91dC1jcnlwdG8iCisjIG9sZGVyIHZlcnNpb25zIG9mIHRoaXMgcmVjaXBlIGhhZCAke1BOfS11dGlscworUlBST1ZJREVTXyR7UE59LWJpbiArPSAiJHtQTn0tdXRpbHMiCitSQ09ORkxJQ1RTXyR7UE59LWJpbiArPSAiJHtQTn0tdXRpbHMiCitSUkVQTEFDRVNfJHtQTn0tYmluICs9ICIke1BOfS11dGlscyIKKworCitkb19pbnN0YWxsX2FwcGVuZF9jbGFzcy1uYXRpdmUgKCkgeworICAgIGNyZWF0ZV93cmFwcGVyICR7RH0vJHtiaW5kaXJ9L3hzbHRwcm9jIFhNTF9DQVRBTE9HX0ZJTEVTPSR7c3lzY29uZmRpcn0veG1sL2NhdGFsb2cueG1sCit9CisKK0ZJTEVTXyR7UE59ICs9ICIke2xpYmRpcn0vbGlieHNsdC1wbHVnaW5zIgorRklMRVNfJHtQTn0tZGV2ICs9ICIke2xpYmRpcn0veHNsdENvbmYuc2giCisKK0JCQ0xBU1NFWFRFTkQgPSAibmF0aXZlIG5hdGl2ZXNkayIKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9saWJ5YW1sL2ZpbGVzL2xpYnlhbWwtQ1ZFLTIwMTQtOTEzMC5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9saWJ5YW1sL2ZpbGVzL2xpYnlhbWwtQ1ZFLTIwMTQtOTEzMC5wYXRjaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjFmYTdlNS4uMDAwMDAwMAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbGlieWFtbC9maWxlcy9saWJ5YW1sLUNWRS0yMDE0LTkxMzAucGF0Y2gKKysrIC9kZXYvbnVsbApAQCAtMSwzMyArMCwwIEBACi0jIEhHIGNoYW5nZXNldCBwYXRjaAotIyBVc2VyIEtpcmlsbCBTaW1vbm92IDx4aUByZXNvbHZlbnQubmV0PgotIyBEYXRlIDE0MTcxOTczMTIgMjE2MDAKLSMgTm9kZSBJRCAyYjkxNTY3NTY0MjNlOTY3Y2ZkMDlhNjFkMTI1ZDg4M2ZjYTZmNGYyCi0jIFBhcmVudCAgMDUzZjUzYTM4MWZmNmFkYmJjOTNhMzFhYjdmZGVlMDZhMTZjOGEzMwotUmVtb3ZlZCBpbnZhbGlkIHNpbXBsZSBrZXkgYXNzZXJ0aW9uICh0aGFuayB0byBKb25hdGhhbiBHcmF5KS4KLQotVGhlIHBhdGNoIGNvbWVzIGZyb20gCi0KLWh0dHBzOi8vYml0YnVja2V0Lm9yZy94aS9saWJ5YW1sL2NvbW1pdHMvMmI5MTU2NzU2NDIzZTk2N2NmZDA5YTYxZDEyNWQ4ODNmY2E2ZjRmMgotCi1VcHN0cmVhbS1TdGF0dXM6IEJhY2twb3J0Ci1DVkU6IENWRS0yMDE0LTkxMzAKLQotU2lnbmVkLW9mZi1ieTogWXVlIFRhbyA8eXVlLnRhb0B3aW5kcml2ZXIuY29tPgotCi1kaWZmIC1yIDA1M2Y1M2EzODFmZiAtciAyYjkxNTY3NTY0MjMgc3JjL3NjYW5uZXIuYwotLS0tIGEvc3JjL3NjYW5uZXIuYwlXZWQgTWFyIDI2IDEzOjU1OjU0IDIwMTQgLTA1MDAKLSsrKyBiL3NyYy9zY2FubmVyLmMJRnJpIE5vdiAyOCAxMTo1NToxMiAyMDE0IC0wNjAwCi1AQCAtMTEwNiwxMyArMTEwNiw2IEBACi0gICAgICAgICAgICAgJiYgcGFyc2VyLT5pbmRlbnQgPT0gKHB0cmRpZmZfdClwYXJzZXItPm1hcmsuY29sdW1uKTsKLSAKLSAgICAgLyoKLS0gICAgICogQSBzaW1wbGUga2V5IGlzIHJlcXVpcmVkIG9ubHkgd2hlbiBpdCBpcyB0aGUgZmlyc3QgdG9rZW4gaW4gdGhlIGN1cnJlbnQKLS0gICAgICogbGluZS4gIFRoZXJlZm9yZSBpdCBpcyBhbHdheXMgYWxsb3dlZC4gIEJ1dCB3ZSBhZGQgYSBjaGVjayBhbnl3YXkuCi0tICAgICAqLwotLQotLSAgICBhc3NlcnQocGFyc2VyLT5zaW1wbGVfa2V5X2FsbG93ZWQgfHwgIXJlcXVpcmVkKTsgICAgLyogSW1wb3NzaWJsZS4gKi8KLS0KLS0gICAgLyoKLSAgICAgICogSWYgdGhlIGN1cnJlbnQgcG9zaXRpb24gbWF5IHN0YXJ0IGEgc2ltcGxlIGtleSwgc2F2ZSBpdC4KLSAgICAgICovCi0gCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbGlieWFtbC9saWJ5YW1sXzAuMS42LmJiIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2xpYnlhbWwvbGlieWFtbF8wLjEuNi5iYgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjAxNTU3Ny4uMDAwMDAwMAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbGlieWFtbC9saWJ5YW1sXzAuMS42LmJiCisrKyAvZGV2L251bGwKQEAgLTEsMjEgKzAsMCBAQAotU1VNTUFSWSA9ICJMaWJZQU1MIGlzIGEgWUFNTCAxLjEgcGFyc2VyIGFuZCBlbWl0dGVyIHdyaXR0ZW4gaW4gQy4iCi1ERVNDUklQVElPTiA9ICJMaWJZQU1MIGlzIGEgQyBsaWJyYXJ5IGZvciBwYXJzaW5nIGFuZCBlbWl0dGluZyBkYXRhIGluIFlBTUwgMS4xLCBcCi1hIGh1bWFuLXJlYWRhYmxlIGRhdGEgc2VyaWFsaXphdGlvbiBmb3JtYXQuICIKLUhPTUVQQUdFID0gImh0dHA6Ly9weXlhbWwub3JnL3dpa2kvTGliWUFNTCIKLVNFQ1RJT04gPSAibGlicy9kZXZlbCIKLQotTElDRU5TRSA9ICJNSVQiCi1MSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9MSUNFTlNFO21kNT02MDE1ZjA4ODc1OWIxMGUwYmMyYmY2NDg5OGQ0YWUxNyIKLQotU1JDX1VSSSA9ICJodHRwOi8vcHl5YW1sLm9yZy9kb3dubG9hZC9saWJ5YW1sL3lhbWwtJHtQVn0udGFyLmd6IFwKLSAgICAgICAgICAgZmlsZTovL2xpYnlhbWwtQ1ZFLTIwMTQtOTEzMC5wYXRjaCBcCi0gICAgICAgICAgIgotCi1TUkNfVVJJW21kNXN1bV0gPSAiNWZlMDBjZGExOGNhNWRhZWI0Mzc2MmI4MGMzOGUwNmUiCi1TUkNfVVJJW3NoYTI1NnN1bV0gPSAiN2RhNjk3MWI0YmQwOGE5ODZkZDJhNjEzNTNiYzQyMjM2MmJkMGVkY2M2N2Q3ZWJhYWM2OGM5NWY3NDE4Mjc0OSIKLQotUyA9ICIke1dPUktESVJ9L3lhbWwtJHtQVn0iCi0KLWluaGVyaXQgYXV0b3Rvb2xzCi0KLUJCQ0xBU1NFWFRFTkQgPSAibmF0aXZlIgpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2xpYnlhbWwvbGlieWFtbF8wLjEuNy5iYiBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9saWJ5YW1sL2xpYnlhbWxfMC4xLjcuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWM0MjJlZgotLS0gL2Rldi9udWxsCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9saWJ5YW1sL2xpYnlhbWxfMC4xLjcuYmIKQEAgLTAsMCArMSwyMCBAQAorU1VNTUFSWSA9ICJMaWJZQU1MIGlzIGEgWUFNTCAxLjEgcGFyc2VyIGFuZCBlbWl0dGVyIHdyaXR0ZW4gaW4gQy4iCitERVNDUklQVElPTiA9ICJMaWJZQU1MIGlzIGEgQyBsaWJyYXJ5IGZvciBwYXJzaW5nIGFuZCBlbWl0dGluZyBkYXRhIGluIFlBTUwgMS4xLCBcCithIGh1bWFuLXJlYWRhYmxlIGRhdGEgc2VyaWFsaXphdGlvbiBmb3JtYXQuICIKK0hPTUVQQUdFID0gImh0dHA6Ly9weXlhbWwub3JnL3dpa2kvTGliWUFNTCIKK1NFQ1RJT04gPSAibGlicy9kZXZlbCIKKworTElDRU5TRSA9ICJNSVQiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9MSUNFTlNFO21kNT02MDE1ZjA4ODc1OWIxMGUwYmMyYmY2NDg5OGQ0YWUxNyIKKworU1JDX1VSSSA9ICJodHRwOi8vcHl5YW1sLm9yZy9kb3dubG9hZC9saWJ5YW1sL3lhbWwtJHtQVn0udGFyLmd6IFwKKyAgICAgICAgICAiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICIxYWJmNDViZDNhOTYzNzRmYTU1Y2E2M2IzMmY5ZjJmOSIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICI4MDg4ZTQ1NzI2NGE5OGJhNDUxYTkwYjg2NjFmY2I0ZjlkNmY0NzhmNzI2NWQ0ODMyMmExOTZjZWMyNDgwNzI5IgorCitTID0gIiR7V09SS0RJUn0veWFtbC0ke1BWfSIKKworaW5oZXJpdCBhdXRvdG9vbHMKKworQkJDTEFTU0VYVEVORCA9ICJuYXRpdmUiCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbHpvL2x6by9ydW4tcHRlc3QgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbHpvL2x6by9ydW4tcHRlc3QKaW5kZXggMmVhNzc0NS4uNmFjYjg5ZiAxMDA2NDQKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2x6by9sem8vcnVuLXB0ZXN0CisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9sem8vbHpvL3J1bi1wdGVzdApAQCAtMSw4ICsxLDMzIEBACiAjIS9iaW4vc2gKIAogLi9sem90ZXN0IC1tYXZhaWwgLW4xMCAtcSAvZXRjL3NlcnZpY2VzCitpZiBbICQ/IC1lcSAwIF07IHRoZW4KKyAgZWNobyAnUEFTUzogbHpvdGVzdCcKK2Vsc2UKKyAgZWNobyAnRkFJTDogbHpvdGVzdCcKK2ZpCiBMWk9URVNUPS4vbHpvdGVzdCAvYmluL3NoIC1lICIuL2NoZWNrLnNoIiAiL2V0YyIKIC4vYWxpZ24KK2lmIFsgJD8gLWVxIDAgXTsgdGhlbgorICBlY2hvICdQQVNTOiBhbGlnbicKK2Vsc2UKKyAgZWNobyAnRkFJTDogYWxpZ24nCitmaQogLi9jaGtzdW0KK2lmIFsgJD8gLWVxIDAgXTsgdGhlbgorICBlY2hvICdQQVNTOiBjaGtzdW0nCitlbHNlCisgIGVjaG8gJ0ZBSUw6IGNoa3N1bScKK2ZpCiAuL3NpbXBsZQoraWYgWyAkPyAtZXEgMCBdOyB0aGVuCisgIGVjaG8gJ1BBU1M6IHNpbXBsZScKK2Vsc2UKKyAgZWNobyAnRkFJTDogc2ltcGxlJworZmkKIC4vdGVzdG1pbmkKK2lmIFsgJD8gLWVxIDAgXTsgdGhlbgorICBlY2hvICdQQVNTOiB0ZXN0bWluaScKK2Vsc2UKKyAgZWNobyAnRkFJTDogdGVzdG1pbmknCitmaQpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2x6b3AvbHpvcC9sem9wLTEuMDMtZ2NjNi5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9sem9wL2x6b3AvbHpvcC0xLjAzLWdjYzYucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzJiMzM5NwotLS0gL2Rldi9udWxsCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9sem9wL2x6b3AvbHpvcC0xLjAzLWdjYzYucGF0Y2gKQEAgLTAsMCArMSwzNyBAQAorZ2NjLTYgaGFzIGFkZGl0aW9uYWwgZXJyb3JzIGUuZy4KKworLi90ZXN0LmM6MToxMjogZXJyb3I6IHZhcmlhYmx5IG1vZGlmaWVkICdfX2FjY19jdGEnIGF0IGZpbGUgc2NvcGUKKyBleHRlcm4gaW50IF9fYWNjX2N0YVsxLTIqISgoMWwgPDwgKDgqOCAtMSkpIDwgMCldOworICAgICAgICAgICAgXn5+fn5+fn5+CisKK1RoaXMgaXMgcmlnaHRseSBwb2ludGVkIG91dCBzaW5jZSB0aGF0IGluZGV4IGlzIHVuZGVmaW5lZAorCitTaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKKy0tLSBhL3NyYy9taW5pYWNjLmgub3JpZwkyMDE2LTAyLTEwIDE2OjA5OjIzLjI0NzMxNTg2NiArMDEwMAorKysrIGEvc3JjL21pbmlhY2MuaAkyMDE2LTAyLTEwIDE2OjEyOjE0Ljk3MzI5NzA1NCArMDEwMAorQEAgLTQ0NjksMTIgKzQ0NjksMTIgQEAKKyAjaWYgZGVmaW5lZChfX01TRE9TX18pICYmIGRlZmluZWQoX19UVVJCT0NfXykgJiYgKF9fVFVSQk9DX18gPCAweDAxNTApCisgI2VsaWYgMSAmJiAoQUNDX0NDX1NVTlBST0MpICYmICFkZWZpbmVkKEFDQ0NIS19DRkdfUEVEQU5USUMpCisgI2Vsc2UKKy0gICAgQUNDQ0hLX0FTU0VSVCgoMSAgIDw8ICg4KlNJWkVPRl9JTlQtMSkpIDwgMCkKKysgICAgQUNDQ0hLX0FTU0VSVCgoaW50KSgxdSAgIDw8ICg4KlNJWkVPRl9JTlQtMSkpIDwgMCkKKyAjZW5kaWYKKyAgICAgQUNDQ0hLX0FTU0VSVCgoMXUgIDw8ICg4KlNJWkVPRl9JTlQtMSkpID4gMCkKKyAjaWYgMSAmJiAoQUNDX0NDX1NVTlBST0MpICYmICFkZWZpbmVkKEFDQ0NIS19DRkdfUEVEQU5USUMpCisgI2Vsc2UKKy0gICAgQUNDQ0hLX0FTU0VSVCgoMWwgIDw8ICg4KlNJWkVPRl9MT05HLTEpKSA8IDApCisrICAgIEFDQ0NIS19BU1NFUlQoKGxvbmcpKDF1bCAgPDwgKDgqU0laRU9GX0xPTkctMSkpIDwgMCkKKyAjZW5kaWYKKyAgICAgQUNDQ0hLX0FTU0VSVCgoMXVsIDw8ICg4KlNJWkVPRl9MT05HLTEpKSA+IDApCisgI2lmIGRlZmluZWQoYWNjX2ludDE2ZV90KQorQEAgLTQ3MDMsNyArNDcwMyw3IEBACisgI2VsaWYgMSAmJiAoQUNDX0NDX0xDQyB8fCBBQ0NfQ0NfTENDV0lOMzIpICYmICFkZWZpbmVkKEFDQ0NIS19DRkdfUEVEQU5USUMpCisgI2VsaWYgMSAmJiAoQUNDX0NDX1NVTlBST0MpICYmICFkZWZpbmVkKEFDQ0NIS19DRkdfUEVEQU5USUMpCisgI2VsaWYgIShBQ0NfQlJPS0VOX0lOVEVHUkFMX1BST01PVElPTikgJiYgKFNJWkVPRl9JTlQgPiAxKQorLSAgICBBQ0NDSEtfQVNTRVJUKCAoKCh1bnNpZ25lZCBjaGFyKTEyOCkgPDwgKGludCkoOCpzaXplb2YoaW50KS04KSkgPCAwKQorKyAgICBBQ0NDSEtfQVNTRVJUKCAoaW50KSgodW5zaWduZWQgaW50KSgodW5zaWduZWQgY2hhcikxMjgpIDw8IChpbnQpKDgqc2l6ZW9mKGludCktOCkpIDwgMCkKKyAjZW5kaWYKKyAjaWYgKEFDQ19DQ19CT1JMQU5EQyAmJiAoX19CT1JMQU5EQ19fID49IDB4MDUzMCkgJiYgKF9fQk9STEFORENfXyA8IDB4MDU2MCkpCisgIyAgcHJhZ21hIG9wdGlvbiBwb3AKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9sem9wL2x6b3BfMS4wMy5iYiBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9sem9wL2x6b3BfMS4wMy5iYgppbmRleCAwN2Q2Mjg5Li42NDllNzI0IDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbHpvcC9sem9wXzEuMDMuYmIKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2x6b3AvbHpvcF8xLjAzLmJiCkBAIC0xNSwxNSArMTUsMTUgQEAKICAgICAgICAgICAgZmlsZTovL2FjaW5jbHVkZS5tNCBcCiAgICAgICAgICAgIGZpbGU6Ly94MzJfYWJpX21pbmlhY2NfaC5wYXRjaCBcCiAgICAgICAgICAgIGZpbGU6Ly8wMDAxLXVzZS1zdGF0aWMtaW5saW5lcy1hcy10aGUtZXh0ZXJuYWwtaW5saW5lLWRlZmluaXRpb24ucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vbHpvcC0xLjAzLWdjYzYucGF0Y2ggXAogICAgICAgICAgICIKIFNSQ19VUklbbWQ1c3VtXSA9ICIwMDZjNWUyN2ZiNzhjZGQxNGE2MjhmZGZhNWFhMTkwNSIKIFNSQ19VUklbc2hhMjU2c3VtXSA9ICJjMTQyNWI4Yzc3ZDQ5ZjVhNjc5ZDVhMTI2YzkwZWE2YWQ5OTU4NWE1NWUzMzVhNjEzY2FlNTllOTA5ZGJiMmM5IgogCiBpbmhlcml0IGF1dG90b29scwogCi1kb19jb25maWd1cmUgKCkgewotICAgIGxuIC1zZiAgLi4vYWNpbmNsdWRlLm00ICR7U30vYWNpbmNsdWRlLm00Ci0gICAgYXV0b3Rvb2xzX2RvX2NvbmZpZ3VyZQorZG9fY29uZmlndXJlX3ByZXBlbmQgKCkgeworICAgIGluc3RhbGwgLURtIDA2NDQgJHtXT1JLRElSfS9hY2luY2x1ZGUubTQgJHtTfS9hY2luY2x1ZGUubTQKIH0KIAogQkJDTEFTU0VYVEVORCArPSAibmF0aXZlIG5hdGl2ZXNkayIKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9tcGZyL21wZnItMy4xLjMvbG9uZy1sb25nLXRodW1iLnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L21wZnIvbXBmci9sb25nLWxvbmctdGh1bWIucGF0Y2gKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9tcGZyL21wZnItMy4xLjMvbG9uZy1sb25nLXRodW1iLnBhdGNoCnJlbmFtZSB0byBpbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbXBmci9tcGZyL2xvbmctbG9uZy10aHVtYi5wYXRjaApkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L21wZnIvbXBmcl8zLjEuMy5iYiBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9tcGZyL21wZnJfMy4xLjMuYmIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGVlOGEyMzguLjAwMDAwMDAKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L21wZnIvbXBmcl8zLjEuMy5iYgorKysgL2Rldi9udWxsCkBAIC0xLDE5ICswLDAgQEAKLXJlcXVpcmUgbXBmci5pbmMKLQotTElDRU5TRSA9ICJHUEx2MyAmIExHUEx2MyIKLUxJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PWQzMjIzOWJjYjY3MzQ2M2FiODc0ZTgwZDQ3ZmFlNTA0IFwKLQkJICAgIGZpbGU6Ly9DT1BZSU5HLkxFU1NFUjttZDU9NmE2YThlMDIwODM4YjIzNDA2YzgxYjE5YzFkNDZkZjYiCi1ERVBFTkRTID0gImdtcCIKLQotU1JDX1VSSSA9ICJodHRwOi8vd3d3Lm1wZnIub3JnL21wZnItJHtQVn0vbXBmci0ke1BWfS50YXIueHogXAotICAgICAgICAgICBmaWxlOi8vbG9uZy1sb25nLXRodW1iLnBhdGNoIFwKLSAgICAgICAgICAgIgotCi1TUkNfVVJJW21kNXN1bV0gPSAiNjk2OTM5OGNkMmZiYzU2YTZhZjU3MGI1MjczYzU2YTkiCi1TUkNfVVJJW3NoYTI1NnN1bV0gPSAiNjgzNWEwOGJkOTkyYzgyNTc2NDE3OTFlOWE2YTJiMzViMDIzMzZjOGRlMjZkMGE4NTc3OTUzNzQ3ZTUxNGExNiIKLQotVVBTVFJFQU1fQ0hFQ0tfVVJJID0gImh0dHA6Ly93d3cubXBmci5vcmcvbXBmci1jdXJyZW50LyIKLQotUyA9ICIke1dPUktESVJ9L21wZnItJHtQVn0iCi0KLUJCQ0xBU1NFWFRFTkQgPSAibmF0aXZlIG5hdGl2ZXNkayIKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9tcGZyL21wZnJfMy4xLjQuYmIgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbXBmci9tcGZyXzMuMS40LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIzMGE4NjIKLS0tIC9kZXYvbnVsbAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbXBmci9tcGZyXzMuMS40LmJiCkBAIC0wLDAgKzEsMTggQEAKK3JlcXVpcmUgbXBmci5pbmMKKworTElDRU5TRSA9ICJHUEx2MyAmIExHUEx2MyIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PWQzMjIzOWJjYjY3MzQ2M2FiODc0ZTgwZDQ3ZmFlNTA0IFwKKwkJICAgIGZpbGU6Ly9DT1BZSU5HLkxFU1NFUjttZDU9NmE2YThlMDIwODM4YjIzNDA2YzgxYjE5YzFkNDZkZjYiCitERVBFTkRTID0gImdtcCIKKworU1JDX1VSSSA9ICJodHRwOi8vd3d3Lm1wZnIub3JnL21wZnItJHtQVn0vbXBmci0ke1BWfS50YXIueHogXAorICAgICAgICAgICBmaWxlOi8vbG9uZy1sb25nLXRodW1iLnBhdGNoIFwKKyAgICAgICAgICAgIgorU1JDX1VSSVttZDVzdW1dID0gIjA2NGIyYzE4MTg1MDM4ZTQwNGE0MDFiODMwZDU5YmU4IgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjc2MTQxM2IxNmQ3NDljNTNlMmJmZDJiMWRmYWEzYjAyN2IwZTc5M2U0MDRiOTBiNWZiYWVlZjYwYWY2NTE3ZjUiCisKK1VQU1RSRUFNX0NIRUNLX1VSSSA9ICJodHRwOi8vd3d3Lm1wZnIub3JnL21wZnItY3VycmVudC8iCisKK1MgPSAiJHtXT1JLRElSfS9tcGZyLSR7UFZ9IgorCitCQkNMQVNTRVhURU5EID0gIm5hdGl2ZSBuYXRpdmVzZGsiCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbmV0dGxlL25ldHRsZV8yLjcuMS5iYiBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9uZXR0bGUvbmV0dGxlXzIuNy4xLmJiCmluZGV4IGQ0ZGYwYTMuLmFlOGUzMTEgMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9uZXR0bGUvbmV0dGxlXzIuNy4xLmJiCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9uZXR0bGUvbmV0dGxlXzIuNy4xLmJiCkBAIC0xLDYgKzEsNiBAQAogcmVxdWlyZSBuZXR0bGUuaW5jCiAKLUxJQ0VOU0UgPSAiTEdQTHYyLjEgJiBHUEx2MiIKK0xJQ0VOU0UgPSAiTEdQTHYyLjErICYgR1BMdjIiCiBMSUNFTlNFXyR7UE59ID0gIkxHUEx2Mi4xKyIKIAogTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORy5MSUI7bWQ1PTJkNTAyNWQ0YWEzNDk1YmVmZWY4ZjE3MjA2YTViMGExIFwKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9ucHRoL25wdGhfMS4yLmJiIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L25wdGgvbnB0aF8xLjIuYmIKaW5kZXggMWIzOTYyZS4uNjZhYTM0NyAxMDA2NDQKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L25wdGgvbnB0aF8xLjIuYmIKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L25wdGgvbnB0aF8xLjIuYmIKQEAgLTYsNyArNiw4IEBACiAgICAgZmlsZTovL0NPUFlJTkc7bWQ1PTc1MTQxOTI2MGFhOTU0NDk5ZjdhYmFhYmFhODgyYmJlXAogICAgIGZpbGU6Ly9DT1BZSU5HLkxFU1NFUjttZDU9NmE2YThlMDIwODM4YjIzNDA2YzgxYjE5YzFkNDZkZjZcCiAgICAgIgotU1JDX1VSSSA9ICJmdHA6Ly9mdHAuZ251cGcub3JnL2djcnlwdC9ucHRoL25wdGgtJHtQVn0udGFyLmJ6MiBcCitVUFNUUkVBTV9DSEVDS19VUkkgPSAiaHR0cHM6Ly9nbnVwZy5vcmcvZG93bmxvYWQvaW5kZXguaHRtbCIKK1NSQ19VUkkgPSAiJHtHTlVQR19NSVJST1J9L25wdGgvbnB0aC0ke1BWfS50YXIuYnoyIFwKICAgICAgICAgICAgZmlsZTovL3BrZ2NvbmZpZy5wYXRjaCBcCiAgICAgICAgICAgIgogCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbnNwci9uc3ByXzQuMTIuYmIgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbnNwci9uc3ByXzQuMTIuYmIKaW5kZXggMTY4MzQxYi4uZmE2ZDUyMyAxMDA2NDQKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L25zcHIvbnNwcl80LjEyLmJiCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9uc3ByL25zcHJfNC4xMi5iYgpAQCAtMTQ3LDYgKzE0Nyw5IEBACiAKIGluaGVyaXQgYXV0b3Rvb2xzCiAKK1BBQ0tBR0VDT05GSUcgPz89ICIke0BiYi51dGlscy5jb250YWlucygnRElTVFJPX0ZFQVRVUkVTJywgJ2lwdjYnLCAnaXB2NicsICcnLCBkKX0iCitQQUNLQUdFQ09ORklHW2lwdjZdID0gIi0tZW5hYmxlLWlwdjYsLS1kaXNhYmxlLWlwdjYsIgorCiBkb19jb21waWxlX3ByZXBlbmQoKSB7CiAJb2VfcnVubWFrZSBDUk9TU19DT01QSUxFPTEgQ0ZMQUdTPSItRFhQX1VOSVgiIExERkxBR1M9IiIgQ0M9Z2NjIC1DIGNvbmZpZyBleHBvcnQKIH0KZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9uc3MvbnNzLzAwMDEtRml4LWJ1aWxkLWZhaWx1cmUtb24tb3BlbnN1c2UtMTMuMS5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9uc3MvbnNzLzAwMDEtRml4LWJ1aWxkLWZhaWx1cmUtb24tb3BlbnN1c2UtMTMuMS5wYXRjaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggY2IzYWQwMC4uMDAwMDAwMAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbnNzL25zcy8wMDAxLUZpeC1idWlsZC1mYWlsdXJlLW9uLW9wZW5zdXNlLTEzLjEucGF0Y2gKKysrIC9kZXYvbnVsbApAQCAtMSwyNyArMCwwIEBACi1Gcm9tIDg3NThjNmE0NTA4YTVjYTAxNTA1YThkNjlhMjY5YzkxMmNlMTBiZWUgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCi1Gcm9tOiBBbGV4YW5kZXIgS2FuYXZpbiA8YWxleC5rYW5hdmluQGdtYWlsLmNvbT4KLURhdGU6IE1vbiwgMTggSmFuIDIwMTYgMTg6MjY6MTYgKzAwMDAKLVN1YmplY3Q6IFtQQVRDSF0gRml4IGJ1aWxkIGZhaWx1cmUgb24gb3BlbnN1c2UgMTMuMQotCi1VcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW2djYyA0Ljggc3BlY2lmaWMgaXNzdWVdCi1TaWduZWQtb2ZmLWJ5OiBBbGV4YW5kZXIgS2FuYXZpbiA8YWxleC5rYW5hdmluQGdtYWlsLmNvbT4KLS0tLQotIG5zcy9jbWQvbW9kdXRpbC9pbnN0YWxsLWRzLmggfCAyICstCi0gMSBmaWxlIGNoYW5nZWQsIDEgaW5zZXJ0aW9uKCspLCAxIGRlbGV0aW9uKC0pCi0KLWRpZmYgLS1naXQgYS9uc3MvY21kL21vZHV0aWwvaW5zdGFsbC1kcy5oIGIvbnNzL2NtZC9tb2R1dGlsL2luc3RhbGwtZHMuaAotaW5kZXggM2EzYWZiMy4uNDMzZWZlMCAxMDA2NDQKLS0tLSBhL25zcy9jbWQvbW9kdXRpbC9pbnN0YWxsLWRzLmgKLSsrKyBiL25zcy9jbWQvbW9kdXRpbC9pbnN0YWxsLWRzLmgKLUBAIC0yNDMsNyArMjQzLDcgQEAgc3RydWN0IFBrMTFJbnN0YWxsX0luZm9fc3RyIHsKLSBQazExSW5zdGFsbF9JbmZvKgotIFBrMTFJbnN0YWxsX0luZm9fbmV3KCk7Ci0gdm9pZAotLVBrMTFJbnN0YWxsX0luZm9faW5pdCgpOwotK1BrMTFJbnN0YWxsX0luZm9faW5pdChQazExSW5zdGFsbF9JbmZvKiBfdGhpcyk7Ci0gdm9pZAotIFBrMTFJbnN0YWxsX0luZm9fZGVsZXRlKFBrMTFJbnN0YWxsX0luZm8qIF90aGlzKTsKLSAvKi8vIFJldHVybnMgTlVMTCBmb3Igc3VjY2VzcywgZXJyb3IgbWVzc2FnZSBpZiBwYXJzZSBlcnJvci4qLwotLS0gCi0xLjguNC41Ci0KZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9uc3MvbnNzL2Rpc2FibGUtV3ZhcmFyZ3Mtd2l0aC1jbGFuZy5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9uc3MvbnNzL2Rpc2FibGUtV3ZhcmFyZ3Mtd2l0aC1jbGFuZy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44NmIxYjYwCi0tLSAvZGV2L251bGwKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L25zcy9uc3MvZGlzYWJsZS1XdmFyYXJncy13aXRoLWNsYW5nLnBhdGNoCkBAIC0wLDAgKzEsMzMgQEAKK2NsYW5nIDMuOSBhZGQgdGhpcyB3YXJuaW5nIHRvIHJpZ2h0bHkgZmxhZyB1bmRlZmluZWQKK2JlaGF2aW9yLCB3ZSByZWxlZ2F0ZSB0aGlzIHRvIGJlIGp1c3QgYSB3YXJuaW5nIGluc3RlYWQKK29mIGVycm9yIGFuZCBrZWVwIHRoZSBiZWhhdmlvciBhcyBpdCB3YXMuIFJpZ2h0IGZpeCB3b3VsZAorYmUgdG8gbm90IHBhc3MgZW51bSB0byB0aGUgZnVuY3Rpb24gd2l0aCB2YXJpYWRpYyBhcmd1bWVudHMKK2FzIGxhc3QgbmFtZWQgYXJndW1lbnQKKworRml4ZXMgZXJyb3JzIGxpa2UKK29jc3AuYzoyMjIwOjIyOiBlcnJvcjogcGFzc2luZyBhbiBvYmplY3QgdGhhdCB1bmRlcmdvZXMgZGVmYXVsdCBhcmd1bWVudCBwcm9tb3Rpb24gdG8gJ3ZhX3N0YXJ0JyBoYXMgdW5kZWZpbmVkIGJlaGF2aW9yIFstV2Vycm9yLC1XdmFyYXJnc10KKyAgICAgICAgdmFfc3RhcnQoYXAsIHJlc3BvbnNlVHlwZTApOworICAgICAgICAgICAgICAgICAgICAgXgorb2NzcC5jOjIyMDA6NDM6IG5vdGU6IHBhcmFtZXRlciBvZiB0eXBlICdTRUNPaWRUYWcnIGlzIGRlY2xhcmVkIGhlcmUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU0VDT2lkVGFnIHJlc3BvbnNlVHlwZTAsIC4uLikKKworc2VlCitodHRwczovL3d3dy5zZWN1cmVjb2RpbmcuY2VydC5vcmcvY29uZmx1ZW5jZS9kaXNwbGF5L2NwbHVzcGx1cy9FWFA1OC1DUFAuK1Bhc3MrYW4rb2JqZWN0K29mK3RoZStjb3JyZWN0K3R5cGUrdG8rdmFfc3RhcnQKK2ZvciBtb3JlIGRldGFpbHMKKworU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitJbmRleDogbnNzLTMuMjQvbnNzL2NvcmVjb25mL1dlcnJvci5taworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIG5zcy0zLjI0Lm9yaWcvbnNzL2NvcmVjb25mL1dlcnJvci5taworKysrIG5zcy0zLjI0L25zcy9jb3JlY29uZi9XZXJyb3IubWsKK0BAIC01NCw3ICs1NCw3IEBAIGlmbmRlZiBXQVJOSU5HX0NGTEFHUworICAgICBpZmRlZiBDQ19JU19DTEFORworICAgICAgICMgLVF1bnVzZWQtYXJndW1lbnRzIDogY2xhbmcgb2JqZWN0cyB0byBhcmd1bWVudHMgdGhhdCBpdCBkb2Vzbid0IHVuZGVyc3RhbmQKKyAgICAgICAjICAgIGFuZCBmaXhpbmcgdGhpcyB3b3VsZCByZXF1aXJlIHJlYXJjaGl0ZWN0dXJlCistICAgICAgV0FSTklOR19DRkxBR1MgKz0gLVF1bnVzZWQtYXJndW1lbnRzCisrICAgICAgV0FSTklOR19DRkxBR1MgKz0gLVF1bnVzZWQtYXJndW1lbnRzIC1Xbm8tZXJyb3I9dmFyYXJncworICAgICAgICMgLVduby1wYXJlbnRoZXNlcy1lcXVhbGl0eSA6IGJlY2F1c2UgY2xhbmcgd2FybnMgYWJvdXQgbWFjcm8gZXhwYW5zaW9ucworICAgICAgIFdBUk5JTkdfQ0ZMQUdTICs9ICQoY2FsbCBkaXNhYmxlX3dhcm5pbmcscGFyZW50aGVzZXMtZXF1YWxpdHkpCisgICAgICAgaWZkZWYgQlVJTERfT1BUCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbnNzL25zcy9uc3MtZml4LW5zaW5zdGFsbC1idWlsZC5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9uc3MvbnNzL25zcy1maXgtbnNpbnN0YWxsLWJ1aWxkLnBhdGNoCmluZGV4IDg2NmRlMDcuLjE4MWM2OWEgMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9uc3MvbnNzL25zcy1maXgtbnNpbnN0YWxsLWJ1aWxkLnBhdGNoCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9uc3MvbnNzL25zcy1maXgtbnNpbnN0YWxsLWJ1aWxkLnBhdGNoCkBAIC0xNiwxMSArMTYsMTEgQEAKIAogU2lnbmVkLW9mZi1ieTogV2Vuem9uZyBGYW4gPHdlbnpvbmcuZmFuQHdpbmRyaXZlci5jb20+CiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLWRpZmYgLS1naXQgYS9uc3MvY29yZWNvbmYvbnNpbnN0YWxsL01ha2VmaWxlIGIvbnNzL2NvcmVjb25mL25zaW5zdGFsbC9NYWtlZmlsZQotaW5kZXggMTg1MGJjYi4uNWFlZTg0ZiAxMDA2NDQKLS0tLSBhL25zcy9jb3JlY29uZi9uc2luc3RhbGwvTWFrZWZpbGUKLSsrKyBiL25zcy9jb3JlY29uZi9uc2luc3RhbGwvTWFrZWZpbGUKLUBAIC0xOCw2ICsxOCwxMiBAQCBJTlRFUk5BTF9UT09MUyAgPSAxCitJbmRleDogbnNzLTMuMjQvbnNzL2NvcmVjb25mL25zaW5zdGFsbC9NYWtlZmlsZQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIG5zcy0zLjI0Lm9yaWcvbnNzL2NvcmVjb25mL25zaW5zdGFsbC9NYWtlZmlsZQorKysrIG5zcy0zLjI0L25zcy9jb3JlY29uZi9uc2luc3RhbGwvTWFrZWZpbGUKK0BAIC0xOCw2ICsxOCwxMyBAQCBJTlRFUk5BTF9UT09MUyAgPSAxCiAgCiAgaW5jbHVkZSAkKERFUFRIKS9jb3JlY29uZi9jb25maWcubWsKICAKQEAgLTI5LDYgKzI5LDcgQEAKICsjIHRvIGNsZWFuIHRoZSAnLW02NCcgZnJvbSBBUkNIRkxBRyBhbmQgTERGTEFHUy4KICtBUkNIRkxBRyA9CiArTERGTEFHUyA9CisrQ0ZMQUdTID0KICsKICBpZmVxICgsJChmaWx0ZXItb3V0IE9TMiBXSU4lLCQoT1NfVEFSR0VUKSkpCiAgUFJPR1JBTQkJPQpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L25zcy9uc3MvcHFnLmMtVUxMX2FkZGVuZC5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9uc3MvbnNzL3BxZy5jLVVMTF9hZGRlbmQucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWNhYWFlYgotLS0gL2Rldi9udWxsCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9uc3MvbnNzL3BxZy5jLVVMTF9hZGRlbmQucGF0Y2gKQEAgLTAsMCArMSwyMyBAQAorbnNzIGRvZXMgbm90IGJ1aWxkIG9uIG1pcHMgd2l0aCBjbGFuZyBiZWNhdXNlIHdyb25nIHR5cGVzIGFyZSB1c2VkPworCitwcWcuYzozMzk6MTY6IGVycm9yOiBjb21wYXJpc29uIG9mIGNvbnN0YW50IDE4NDQ2NzQ0MDczNzA5NTUxNjE1IHdpdGggZXhwcmVzc2lvbiBvZiB0eXBlICd1bnNpZ25lZCBsb25nJyBpcyBhbHdheXMgdHJ1ZSBbLVdlcnJvciwtV3RhdXRvbG9naWNhbC1jb25zdGFudC1vdXQtb2YtcmFuZ2UtY29tcGFyZV0KKyAgICAgaWYgKGFkZGVuZCA8IE1QX0RJR0lUX01BWCkgeworICAgICAgIH5+fn5+fiBeIH5+fn5+fn5+fn5+fgorCitTaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCitJbmRleDogbnNzLTMuMjQvbnNzL2xpYi9mcmVlYmwvcHFnLmMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBuc3MtMy4yNC5vcmlnL25zcy9saWIvZnJlZWJsL3BxZy5jCisrKysgbnNzLTMuMjQvbnNzL2xpYi9mcmVlYmwvcHFnLmMKK0BAIC0zMjIsOCArMzIyLDggQEAgZ2VuZXJhdGVfaF9jYW5kaWRhdGUoU0VDSXRlbSAqaGl0LCBtcF9pbgorIAorIHN0YXRpYyBTRUNTdGF0dXMKKyBhZGRUb1NlZWQoY29uc3QgU0VDSXRlbSAqIHNlZWQsCistICAgICAgICAgIHVuc2lnbmVkIGxvbmcgICBhZGRlbmQsCistICAgICAgICAgIGludCAgICAgICAgICAgICBzZWVkbGVuLCAvKiBnIGluIDE4Ni0xICovCisrICAgICAgICAgIHVuc2lnbmVkIGxvbmcgbG9uZyAgYWRkZW5kLAorKyAgICAgICAgICBpbnQgICAgICAgICAgICAgICAgIHNlZWRsZW4sIC8qIGcgaW4gMTg2LTEgKi8KKyAgICAgICAgICAgU0VDSXRlbSAqIHNlZWRvdXQpCisgeworICAgICBtcF9pbnQgcywgc3VtLCBtb2R1bHVzLCB0bXA7CmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbnNzL25zc18zLjIxLmJiIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L25zcy9uc3NfMy4yMS5iYgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDJlMjQxMS4uMDAwMDAwMAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbnNzL25zc18zLjIxLmJiCisrKyAvZGV2L251bGwKQEAgLTEsMjQwICswLDAgQEAKLVNVTU1BUlkgPSAiTW96aWxsYSdzIFNTTCBhbmQgVExTIGltcGxlbWVudGF0aW9uIgotREVTQ1JJUFRJT04gPSAiTmV0d29yayBTZWN1cml0eSBTZXJ2aWNlcyAoTlNTKSBpcyBhIHNldCBvZiBsaWJyYXJpZXMgXAotZGVzaWduZWQgdG8gc3VwcG9ydCBjcm9zcy1wbGF0Zm9ybSBkZXZlbG9wbWVudCBvZiBcCi1zZWN1cml0eS1lbmFibGVkIGNsaWVudCBhbmQgc2VydmVyIGFwcGxpY2F0aW9ucy4gXAotQXBwbGljYXRpb25zIGJ1aWx0IHdpdGggTlNTIGNhbiBzdXBwb3J0IFNTTCB2MiBhbmQgdjMsIFwKLVRMUywgUEtDUyA1LCBQS0NTIDcsIFBLQ1MgMTEsIFBLQ1MgMTIsIFMvTUlNRSwgWC41MDkgXAotdjMgY2VydGlmaWNhdGVzLCBhbmQgb3RoZXIgc2VjdXJpdHkgc3RhbmRhcmRzLiIKLUhPTUVQQUdFID0gImh0dHA6Ly93d3cubW96aWxsYS5vcmcvcHJvamVjdHMvc2VjdXJpdHkvcGtpL25zcy8iCi1TRUNUSU9OID0gImxpYnMiCi0KLUxJQ0VOU0UgPSAiTVBMLTIuMCB8IChNUEwtMi4wICYgR1BMLTIuMCspIHwgKE1QTC0yLjAgJiBMR1BMLTIuMSspIgotCi1MSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9uc3MvQ09QWUlORzttZDU9M2IxZTg4ZTFiOWMwYjVhNGIyODgxZDQ2Y2NlMDZhMTggXAotICAgICAgICAgICAgICAgICAgICBmaWxlOi8vbnNzL2xpYi9mcmVlYmwvbXBpL2RvYy9MSUNFTlNFO21kNT00OTFmMTU4ZDA5ZDk0ODQ2NmFmY2U4NWQ2ZjFmZTE4ZiBcCi0gICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9uc3MvbGliL2ZyZWVibC9tcGkvZG9jL0xJQ0VOU0UtTVBMO21kNT01ZDQyNWM4ZjMxNTdkYmYyMTJkYjJlYzUzZDllNTEzMiIKLQotU1JDX1VSSSA9ICJcCi0gICAgaHR0cDovL2Z0cC5tb3ppbGxhLm9yZy9wdWIvbW96aWxsYS5vcmcvc2VjdXJpdHkvbnNzL3JlbGVhc2VzL05TU18zXzIxX1JUTS9zcmMvJHtCUH0udGFyLmd6IFwKLSAgICBmaWxlOi8vbnNzLWZpeC1zdXBwb3J0LWNyb3NzLWNvbXBpbGluZy5wYXRjaCBcCi0gICAgZmlsZTovL25zcy1uby1ycGF0aC1mb3ItY3Jvc3MtY29tcGlsaW5nLnBhdGNoIFwKLSAgICBmaWxlOi8vbnNzLWZpeC1pbmNvcnJlY3Qtc2hlYmFuZy1vZi1wZXJsLnBhdGNoIFwKLSAgICBmaWxlOi8vbnNzLWZpeC1uc2luc3RhbGwtYnVpbGQucGF0Y2ggXAotICAgIGZpbGU6Ly8wMDAxLUZpeC1idWlsZC1mYWlsdXJlLW9uLW9wZW5zdXNlLTEzLjEucGF0Y2ggXAotICAgIGZpbGU6Ly9uc3MucGMuaW4gXAotICAgIGZpbGU6Ly9zaWdubGlicy5zaCBcCi0iCi0KLVNSQ19VUklbbWQ1c3VtXSA9ICIzYzhiMmVkODgwZGQzYThkODZjOWUwMTUxYWZlNmViYSIKLVNSQ19VUklbc2hhMjU2c3VtXSA9ICIzZjdhNWIwMjdkN2NkZDVjMGU0ZmY3NTQ0ZGEzM2ZkYzZmNTZjMmY4YzI3ZmZmMDI5MzhmZDRhNmZiZTg3MjM5IgotCi1VUFNUUkVBTV9DSEVDS19VUkkgPSAiaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9Nb3ppbGxhL1Byb2plY3RzL05TUy9OU1NfUmVsZWFzZXMiCi1VUFNUUkVBTV9DSEVDS19SRUdFWCA9ICJOU1NfKD9QPHB2ZXI+LispX3JlbGVhc2Vfbm90ZXMiCi0KLWluaGVyaXQgc2l0ZWluZm8KLQotREVQRU5EUyA9ICJzcWxpdGUzIG5zcHIgemxpYiBuc3MtbmF0aXZlIgotREVQRU5EU19jbGFzcy1uYXRpdmUgPSAic3FsaXRlMy1uYXRpdmUgbnNwci1uYXRpdmUgemxpYi1uYXRpdmUiCi1SREVQRU5EU18ke1BOfS1zbWltZSA9ICJwZXJsIgotCi1URCA9ICIke1N9L3RlbnRhdGl2ZS1kaXN0IgotVERTID0gIiR7U30vdGVudGF0aXZlLWRpc3Qtc3RhZ2luZyIKLQotVEFSR0VUX0NDX0FSQ0ggKz0gIiR7TERGTEFHU30iCi0KLWRvX2NvbmZpZ3VyZV9wcmVwZW5kX2xpYmMtbXVzbCAoKSB7Ci0gICAgc2VkIC1pIC1lICcvLURIQVZFX1NZU19DREVGU19IL2QnICR7U30vbnNzL2xpYi9kYm0vY29uZmlnL2NvbmZpZy5tawotfQotCi1kb19jb21waWxlX3ByZXBlbmRfY2xhc3MtbmF0aXZlKCkgewotICAgIGV4cG9ydCBOU1BSX0lOQ0xVREVfRElSPSR7U1RBR0lOR19JTkNESVJfTkFUSVZFfQotICAgIGV4cG9ydCBOU1BSX0xJQl9ESVI9JHtTVEFHSU5HX0xJQkRJUl9OQVRJVkV9Ci19Ci0KLWRvX2NvbXBpbGVfcHJlcGVuZF9jbGFzcy1uYXRpdmVzZGsoKSB7Ci0gICAgZXhwb3J0IExERkxBR1M9IiIKLX0KLQotZG9fY29tcGlsZV9wcmVwZW5kX2NsYXNzLW5hdGl2ZSgpIHsKLSAgICAjIE5lZWQgdG8gc2V0IFJQQVRIIHNvIHRoYXQgY2hycGF0aCB3aWxsIGRvIGl0cyBqb2IgY29ycmVjdGx5Ci0gICAgUlBBVEg9Ii1XbCwtcnBhdGgtbGluaywke1NUQUdJTkdfTElCRElSX05BVElWRX0gLVdsLC1ycGF0aC1saW5rLCR7U1RBR0lOR19CQVNFX0xJQkRJUl9OQVRJVkV9IC1XbCwtcnBhdGgsJHtTVEFHSU5HX0xJQkRJUl9OQVRJVkV9IC1XbCwtcnBhdGgsJHtTVEFHSU5HX0JBU0VfTElCRElSX05BVElWRX0iCi19Ci0KLWRvX2NvbXBpbGUoKSB7Ci0gICAgZXhwb3J0IENST1NTX0NPTVBJTEU9MQotICAgIGV4cG9ydCBOQVRJVkVfQ0M9ImdjYyIKLSAgICBleHBvcnQgQlVJTERfT1BUPTEKLQotICAgIGV4cG9ydCBGUkVFQkxfTk9fREVQRU5EPTEKLSAgICBleHBvcnQgRlJFRUJMX0xPV0hBU0g9MQotCi0gICAgZXhwb3J0IExJQkRJUj0ke2xpYmRpcn0KLSAgICBleHBvcnQgTU9aSUxMQV9DTElFTlQ9MQotICAgIGV4cG9ydCBOU19VU0VfR0NDPTEKLSAgICBleHBvcnQgTlNTX1VTRV9TWVNURU1fU1FMSVRFPTEKLSAgICBleHBvcnQgTlNTX0VOQUJMRV9FQ0M9MQotCi0gICAgZXhwb3J0IE9TX1JFTEVBU0U9My40Ci0gICAgZXhwb3J0IE9TX1RBUkdFVD1MaW51eAotICAgIGV4cG9ydCBPU19BUkNIPUxpbnV4Ci0KLSAgICBpZiBbICIke1RBUkdFVF9BUkNIfSIgPSAicG93ZXJwYyIgXTsgdGhlbgotICAgICAgICBPU19URVNUPXBwYwotICAgIGVsaWYgWyAiJHtUQVJHRVRfQVJDSH0iID0gInBvd2VycGM2NCIgXTsgdGhlbgotICAgICAgICBPU19URVNUPXBwYzY0Ci0gICAgZWxpZiBbICIke1RBUkdFVF9BUkNIfSIgPSAibWlwcyIgLW8gIiR7VEFSR0VUX0FSQ0h9IiA9ICJtaXBzZWwiIC1vICIke1RBUkdFVF9BUkNIfSIgPSAibWlwczY0IiAtbyAiJHtUQVJHRVRfQVJDSH0iID0gIm1pcHM2NGVsIiBdOyB0aGVuCi0gICAgICAgIE9TX1RFU1Q9bWlwcwotICAgIGVsc2UKLSAgICAgICAgT1NfVEVTVD0iJHtUQVJHRVRfQVJDSH0iCi0gICAgZmkKLQotICAgIGlmIFsgIiR7U0lURUlORk9fQklUU30iID0gIjY0IiBdOyB0aGVuCi0gICAgICAgIGV4cG9ydCBVU0VfNjQ9MQotICAgIGVsaWYgWyAiJHtUQVJHRVRfQVJDSH0iID0gIng4Nl82NCIgLWEgIiR7U0lURUlORk9fQklUU30iID0gIjMyIiBdOyB0aGVuCi0gICAgICAgIGV4cG9ydCBVU0VfWDMyPTEKLSAgICBmaQotCi0gICAgZXhwb3J0IE5TU19ESVNBQkxFX0dURVNUUz0xCi0KLSAgICAjIFdlIGNhbiBtb2RpZnkgQ0MgaW4gdGhlIGVudmlyb25tZW50LCBidXQgaWYgd2Ugc2V0IGl0IHZpYSBhbgotICAgICMgYXJndW1lbnQgdG8gbWFrZSwgbnNpbnN0YWxsLCBhIGhvc3QgcHJvZ3JhbSwgd2lsbCBhbHNvIGJ1aWxkIHdpdGggaXQhCi0gICAgIwotICAgIGV4cG9ydCBDQz0iJHtDQ30gLWciCi0gICAgbWFrZSAtQyAuL25zcyBDQ0M9IiR7Q1hYfSAtZyIgXAotICAgICAgICBPU19URVNUPSR7T1NfVEVTVH0gXAotICAgICAgICBSUEFUSD0iJHtSUEFUSH0iCi19Ci0KLQotZG9faW5zdGFsbF9wcmVwZW5kX2NsYXNzLW5hdGl2ZXNkaygpIHsKLSAgICBleHBvcnQgTERGTEFHUz0iIgotfQotCi1kb19pbnN0YWxsKCkgewotICAgIGV4cG9ydCBDUk9TU19DT01QSUxFPTEKLSAgICBleHBvcnQgTkFUSVZFX0NDPSJnY2MiCi0gICAgZXhwb3J0IEJVSUxEX09QVD0xCi0KLSAgICBleHBvcnQgRlJFRUJMX05PX0RFUEVORD0xCi0KLSAgICBleHBvcnQgTElCRElSPSR7bGliZGlyfQotICAgIGV4cG9ydCBNT1pJTExBX0NMSUVOVD0xCi0gICAgZXhwb3J0IE5TX1VTRV9HQ0M9MQotICAgIGV4cG9ydCBOU1NfVVNFX1NZU1RFTV9TUUxJVEU9MQotICAgIGV4cG9ydCBOU1NfRU5BQkxFX0VDQz0xCi0KLSAgICBleHBvcnQgT1NfUkVMRUFTRT0zLjQKLSAgICBleHBvcnQgT1NfVEFSR0VUPUxpbnV4Ci0gICAgZXhwb3J0IE9TX0FSQ0g9TGludXgKLQotICAgIGlmIFsgIiR7VEFSR0VUX0FSQ0h9IiA9ICJwb3dlcnBjIiBdOyB0aGVuCi0gICAgICAgIE9TX1RFU1Q9cHBjCi0gICAgZWxpZiBbICIke1RBUkdFVF9BUkNIfSIgPSAicG93ZXJwYzY0IiBdOyB0aGVuCi0gICAgICAgIE9TX1RFU1Q9cHBjNjQKLSAgICBlbGlmIFsgIiR7VEFSR0VUX0FSQ0h9IiA9ICJtaXBzIiAtbyAiJHtUQVJHRVRfQVJDSH0iID0gIm1pcHNlbCIgLW8gIiR7VEFSR0VUX0FSQ0h9IiA9ICJtaXBzNjQiIC1vICIke1RBUkdFVF9BUkNIfSIgPSAibWlwczY0ZWwiIF07IHRoZW4KLSAgICAgICAgT1NfVEVTVD1taXBzCi0gICAgZWxzZQotICAgICAgICBPU19URVNUPSIke1RBUkdFVF9BUkNIfSIKLSAgICBmaQotICAgIGlmIFsgIiR7U0lURUlORk9fQklUU30iID0gIjY0IiBdOyB0aGVuCi0gICAgICAgIGV4cG9ydCBVU0VfNjQ9MQotICAgIGVsaWYgWyAiJHtUQVJHRVRfQVJDSH0iID0gIng4Nl82NCIgLWEgIiR7U0lURUlORk9fQklUU30iID0gIjMyIiBdOyB0aGVuCi0gICAgICAgIGV4cG9ydCBVU0VfWDMyPTEKLSAgICBmaQotCi0gICAgZXhwb3J0IE5TU19ESVNBQkxFX0dURVNUUz0xCi0KLSAgICBtYWtlIC1DIC4vbnNzIFwKLSAgICAgICAgQ0NDPSIke0NYWH0iIFwKLSAgICAgICAgT1NfVEVTVD0ke09TX1RFU1R9IFwKLSAgICAgICAgU09VUkNFX0xJQl9ESVI9IiR7VER9LyR7bGliZGlyfSIgXAotICAgICAgICBTT1VSQ0VfQklOX0RJUj0iJHtURH0vJHtiaW5kaXJ9IiBcCi0gICAgICAgIGluc3RhbGwKLQotICAgIGluc3RhbGwgLWQgJHtEfS8ke2xpYmRpcn0vCi0gICAgZm9yIGZpbGUgaW4gJHtTfS9kaXN0LyouT0JKL2xpYi8qLnNvOyBkbwotICAgICAgICBlY2hvICJJbnN0YWxsaW5nIGBiYXNlbmFtZSAkZmlsZWAuLi4iCi0gICAgICAgIGNwICRmaWxlICAke0R9LyR7bGliZGlyfS8KLSAgICBkb25lCi0KLSAgICBmb3Igc2hhcmVkX2xpYiBpbiAke1REfS8ke2xpYmRpcn0vKi5zby4qOyBkbwotICAgICAgICBpZiBbIC1mICRzaGFyZWRfbGliIF07IHRoZW4KLSAgICAgICAgICAgIGNwICRzaGFyZWRfbGliICR7RH0vJHtsaWJkaXJ9Ci0gICAgICAgICAgICBsbiAtc2YgJChiYXNlbmFtZSAkc2hhcmVkX2xpYikgJHtEfS8ke2xpYmRpcn0vJChiYXNlbmFtZSAkc2hhcmVkX2xpYiAuMW9lKQotICAgICAgICBmaQotICAgIGRvbmUKLSAgICBmb3Igc2hhcmVkX2xpYiBpbiAke1REfS8ke2xpYmRpcn0vKi5zbzsgZG8KLSAgICAgICAgaWYgWyAtZiAkc2hhcmVkX2xpYiAtYSAhIC1lICR7RH0vJHtsaWJkaXJ9LyRzaGFyZWRfbGliIF07IHRoZW4KLSAgICAgICAgICAgIGNwICRzaGFyZWRfbGliICR7RH0vJHtsaWJkaXJ9Ci0gICAgICAgIGZpCi0gICAgZG9uZQotCi0gICAgaW5zdGFsbCAtZCAke0R9LyR7aW5jbHVkZWRpcn0vbnNzMwotICAgIGluc3RhbGwgLW0gNjQ0IC10ICR7RH0vJHtpbmNsdWRlZGlyfS9uc3MzIGRpc3QvcHVibGljL25zcy8qCi0KLSAgICBpbnN0YWxsIC1kICR7RH0vJHtiaW5kaXJ9Ci0gICAgZm9yIGJpbmFyeSBpbiAke1REfS8ke2JpbmRpcn0vKjsgZG8KLSAgICAgICAgaW5zdGFsbCAtbSA3NTUgLXQgJHtEfS8ke2JpbmRpcn0gJGJpbmFyeQotICAgIGRvbmUKLX0KLQotZG9faW5zdGFsbF9hcHBlbmQoKSB7Ci0gICAgIyBDcmVhdGUgZW1wdHkgLmNoayBmaWxlcyBmb3IgdGhlIE5TUyBsaWJyYXJpZXMgYXQgYnVpbGQgdGltZS4gVGhleSBjb3VsZAotICAgICMgYmUgcmVnZW5lcmF0ZWQgYXQgdGFyZ2V0J3MgYm9vdCB0aW1lLgotICAgIGZvciBmaWxlIGluIGxpYnNvZnRva24zLmNoayBsaWJmcmVlYmwzLmNoayBsaWJuc3NkYm0zLmNoazsgZG8KLSAgICAgICAgdG91Y2ggJHtEfS8ke2xpYmRpcn0vJGZpbGUKLSAgICAgICAgY2htb2QgNzU1ICR7RH0vJHtsaWJkaXJ9LyRmaWxlCi0gICAgZG9uZQotICAgIGluc3RhbGwgLUQgLW0gNzU1ICR7V09SS0RJUn0vc2lnbmxpYnMuc2ggJHtEfS8ke2JpbmRpcn0vc2lnbmxpYnMuc2gKLQotICAgIGluc3RhbGwgLWQgJHtEfSR7bGliZGlyfS9wa2djb25maWcvCi0gICAgc2VkICdzLyVOU1NfVkVSU0lPTiUvJHtQVn0vJyAke1dPUktESVJ9L25zcy5wYy5pbiB8IHNlZCAncy8lTlNQUl9WRVJTSU9OJS80LjkuMi8nID4gJHtEfSR7bGliZGlyfS9wa2djb25maWcvbnNzLnBjCi0gICAgc2VkIC1pIHM6T0VQUkVGSVg6JHtwcmVmaXh9OmcgJHtEfSR7bGliZGlyfS9wa2djb25maWcvbnNzLnBjCi0gICAgc2VkIC1pIHM6T0VFWEVDUFJFRklYOiR7ZXhlY19wcmVmaXh9OmcgJHtEfSR7bGliZGlyfS9wa2djb25maWcvbnNzLnBjCi0gICAgc2VkIC1pIHM6T0VMSUJESVI6JHtsaWJkaXJ9OmcgJHtEfSR7bGliZGlyfS9wa2djb25maWcvbnNzLnBjCi0gICAgc2VkIC1pIHM6T0VJTkNESVI6JHtpbmNsdWRlZGlyfS9uc3MzOmcgJHtEfSR7bGliZGlyfS9wa2djb25maWcvbnNzLnBjCi19Ci0KLWRvX2luc3RhbGxfYXBwZW5kX2NsYXNzLXRhcmdldCgpIHsKLSAgICAjIENyZWF0ZSBhIGJsYW5rIGNlcnRpZmljYXRlCi0gICAgbWtkaXIgLXAgJHtEfSR7c3lzY29uZmRpcn0vcGtpL25zc2RiLwotICAgIHRvdWNoIC4vZW1wdHlfcGFzc3dvcmQKLSAgICBjZXJ0dXRpbCAtTiAtZCAke0R9JHtzeXNjb25mZGlyfS9wa2kvbnNzZGIvIC1mIC4vZW1wdHlfcGFzc3dvcmQKLSAgICBjaG1vZCA2NDQgJHtEfSR7c3lzY29uZmRpcn0vcGtpL25zc2RiLyouZGIKLSAgICBybSAuL2VtcHR5X3Bhc3N3b3JkCi19Ci0KLXBrZ19wb3N0aW5zdF8ke1BOfSAoKSB7Ci0gICAgaWYgWyAtbiAiJEQiIF07IHRoZW4KLSAgICAgICAgZm9yIEkgaW4gJEQvJHtsaWJkaXJ9L2xpYiouY2hrOyBkbwotICAgICAgICAgICAgRE49YGRpcm5hbWUgJElgCi0gICAgICAgICAgICBCTj1gYmFzZW5hbWUgJEkgLmNoa2AKLSAgICAgICAgICAgIEZOPSRETi8kQk4uc28KLSAgICAgICAgICAgIHNobGlic2lnbiAtaSAkRk4KLQkgICAgaWYgWyAkPyAtbmUgMCBdOyB0aGVuCi0JICAgICAgIGV4aXQgMQotCSAgICBmaQotICAgICAgICBkb25lCi0gICAgICAgIGV4aXQgMAotICAgIGZpCi0gICAgc2lnbmxpYnMuc2gKLX0KLQotUEFDS0FHRVMgPSsgIiR7UE59LXNtaW1lIgotRklMRVNfJHtQTn0tc21pbWUgPSAiXAotICAgICR7YmluZGlyfS9zbWltZSBcCi0iCi1GSUxFU18ke1BOfSA9ICJcCi0gICAgJHtzeXNjb25mZGlyfSBcCi0gICAgJHtiaW5kaXJ9IFwKLSAgICAke2xpYmRpcn0vbGliKi5jaGsgXAotICAgICR7bGliZGlyfS9saWIqLnNvIFwKLSAgICAiCi1GSUxFU18ke1BOfS1kZXYgPSAiXAotICAgICR7bGliZGlyfS9uc3MgXAotICAgICR7bGliZGlyfS9wa2djb25maWcvKiBcCi0gICAgJHtpbmNsdWRlZGlyfS8qIFwKLSAgICAiCi0KLUJCQ0xBU1NFWFRFTkQgPSAibmF0aXZlIG5hdGl2ZXNkayIKLQpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L25zcy9uc3NfMy4yNS5iYiBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9uc3MvbnNzXzMuMjUuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWZmMDllYgotLS0gL2Rldi9udWxsCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9uc3MvbnNzXzMuMjUuYmIKQEAgLTAsMCArMSwyNDIgQEAKK1NVTU1BUlkgPSAiTW96aWxsYSdzIFNTTCBhbmQgVExTIGltcGxlbWVudGF0aW9uIgorREVTQ1JJUFRJT04gPSAiTmV0d29yayBTZWN1cml0eSBTZXJ2aWNlcyAoTlNTKSBpcyBhIHNldCBvZiBsaWJyYXJpZXMgXAorZGVzaWduZWQgdG8gc3VwcG9ydCBjcm9zcy1wbGF0Zm9ybSBkZXZlbG9wbWVudCBvZiBcCitzZWN1cml0eS1lbmFibGVkIGNsaWVudCBhbmQgc2VydmVyIGFwcGxpY2F0aW9ucy4gXAorQXBwbGljYXRpb25zIGJ1aWx0IHdpdGggTlNTIGNhbiBzdXBwb3J0IFNTTCB2MiBhbmQgdjMsIFwKK1RMUywgUEtDUyA1LCBQS0NTIDcsIFBLQ1MgMTEsIFBLQ1MgMTIsIFMvTUlNRSwgWC41MDkgXAordjMgY2VydGlmaWNhdGVzLCBhbmQgb3RoZXIgc2VjdXJpdHkgc3RhbmRhcmRzLiIKK0hPTUVQQUdFID0gImh0dHA6Ly93d3cubW96aWxsYS5vcmcvcHJvamVjdHMvc2VjdXJpdHkvcGtpL25zcy8iCitTRUNUSU9OID0gImxpYnMiCisKK0xJQ0VOU0UgPSAiTVBMLTIuMCB8IChNUEwtMi4wICYgR1BMLTIuMCspIHwgKE1QTC0yLjAgJiBMR1BMLTIuMSspIgorCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9uc3MvQ09QWUlORzttZDU9M2IxZTg4ZTFiOWMwYjVhNGIyODgxZDQ2Y2NlMDZhMTggXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vbnNzL2xpYi9mcmVlYmwvbXBpL2RvYy9MSUNFTlNFO21kNT00OTFmMTU4ZDA5ZDk0ODQ2NmFmY2U4NWQ2ZjFmZTE4ZiBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9uc3MvbGliL2ZyZWVibC9tcGkvZG9jL0xJQ0VOU0UtTVBMO21kNT01ZDQyNWM4ZjMxNTdkYmYyMTJkYjJlYzUzZDllNTEzMiIKKworU1JDX1VSSSA9ICJcCisgICAgaHR0cDovL2Z0cC5tb3ppbGxhLm9yZy9wdWIvbW96aWxsYS5vcmcvc2VjdXJpdHkvbnNzL3JlbGVhc2VzL05TU18zXzI1X1JUTS9zcmMvJHtCUH0udGFyLmd6IFwKKyAgICBmaWxlOi8vbnNzLWZpeC1zdXBwb3J0LWNyb3NzLWNvbXBpbGluZy5wYXRjaCBcCisgICAgZmlsZTovL25zcy1uby1ycGF0aC1mb3ItY3Jvc3MtY29tcGlsaW5nLnBhdGNoIFwKKyAgICBmaWxlOi8vbnNzLWZpeC1pbmNvcnJlY3Qtc2hlYmFuZy1vZi1wZXJsLnBhdGNoIFwKKyAgICBmaWxlOi8vbnNzLWZpeC1uc2luc3RhbGwtYnVpbGQucGF0Y2ggXAorICAgIGZpbGU6Ly9kaXNhYmxlLVd2YXJhcmdzLXdpdGgtY2xhbmcucGF0Y2ggXAorICAgIGZpbGU6Ly9wcWcuYy1VTExfYWRkZW5kLnBhdGNoIFwKKyAgICBmaWxlOi8vbnNzLnBjLmluIFwKKyAgICBmaWxlOi8vc2lnbmxpYnMuc2ggXAorIgorU1JDX1VSSVttZDVzdW1dID0gIjIzMTY5YzQwNmFkYzhhYzM2NzJkMzRiZjllYTI0MzNkIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjVkMWFkNDc1ZGExOWQwYzAzM2E3MTYzNTBkYzVmOGE3NDc5OTlkM2ViYTVhYzA3ZWUwMzY4YzViYWQ2ZTIzNTkiCisKK1VQU1RSRUFNX0NIRUNLX1VSSSA9ICJodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL01vemlsbGEvUHJvamVjdHMvTlNTL05TU19SZWxlYXNlcyIKK1VQU1RSRUFNX0NIRUNLX1JFR0VYID0gIk5TU18oP1A8cHZlcj4uKylfcmVsZWFzZV9ub3RlcyIKKworaW5oZXJpdCBzaXRlaW5mbworCitERVBFTkRTID0gInNxbGl0ZTMgbnNwciB6bGliIG5zcy1uYXRpdmUiCitERVBFTkRTX2NsYXNzLW5hdGl2ZSA9ICJzcWxpdGUzLW5hdGl2ZSBuc3ByLW5hdGl2ZSB6bGliLW5hdGl2ZSIKK1JERVBFTkRTXyR7UE59LXNtaW1lID0gInBlcmwiCisKK1REID0gIiR7U30vdGVudGF0aXZlLWRpc3QiCitURFMgPSAiJHtTfS90ZW50YXRpdmUtZGlzdC1zdGFnaW5nIgorCitUQVJHRVRfQ0NfQVJDSCArPSAiJHtMREZMQUdTfSIKKworZG9fY29uZmlndXJlX3ByZXBlbmRfbGliYy1tdXNsICgpIHsKKyAgICBzZWQgLWkgLWUgJy8tREhBVkVfU1lTX0NERUZTX0gvZCcgJHtTfS9uc3MvbGliL2RibS9jb25maWcvY29uZmlnLm1rCit9CisKK2RvX2NvbXBpbGVfcHJlcGVuZF9jbGFzcy1uYXRpdmUoKSB7CisgICAgZXhwb3J0IE5TUFJfSU5DTFVERV9ESVI9JHtTVEFHSU5HX0lOQ0RJUl9OQVRJVkV9CisgICAgZXhwb3J0IE5TUFJfTElCX0RJUj0ke1NUQUdJTkdfTElCRElSX05BVElWRX0KKyAgICBleHBvcnQgTlNTX0VOQUJMRV9XRVJST1I9MAorfQorCitkb19jb21waWxlX3ByZXBlbmRfY2xhc3MtbmF0aXZlc2RrKCkgeworICAgIGV4cG9ydCBMREZMQUdTPSIiCit9CisKK2RvX2NvbXBpbGVfcHJlcGVuZF9jbGFzcy1uYXRpdmUoKSB7CisgICAgIyBOZWVkIHRvIHNldCBSUEFUSCBzbyB0aGF0IGNocnBhdGggd2lsbCBkbyBpdHMgam9iIGNvcnJlY3RseQorICAgIFJQQVRIPSItV2wsLXJwYXRoLWxpbmssJHtTVEFHSU5HX0xJQkRJUl9OQVRJVkV9IC1XbCwtcnBhdGgtbGluaywke1NUQUdJTkdfQkFTRV9MSUJESVJfTkFUSVZFfSAtV2wsLXJwYXRoLCR7U1RBR0lOR19MSUJESVJfTkFUSVZFfSAtV2wsLXJwYXRoLCR7U1RBR0lOR19CQVNFX0xJQkRJUl9OQVRJVkV9IgorfQorCitkb19jb21waWxlKCkgeworICAgIGV4cG9ydCBDUk9TU19DT01QSUxFPTEKKyAgICBleHBvcnQgTkFUSVZFX0NDPSJnY2MiCisgICAgZXhwb3J0IE5BVElWRV9GTEFHUz0iJHtIT1NUX0NGTEFHU30iCisgICAgZXhwb3J0IEJVSUxEX09QVD0xCisKKyAgICBleHBvcnQgRlJFRUJMX05PX0RFUEVORD0xCisgICAgZXhwb3J0IEZSRUVCTF9MT1dIQVNIPTEKKworICAgIGV4cG9ydCBMSUJESVI9JHtsaWJkaXJ9CisgICAgZXhwb3J0IE1PWklMTEFfQ0xJRU5UPTEKKyAgICBleHBvcnQgTlNfVVNFX0dDQz0xCisgICAgZXhwb3J0IE5TU19VU0VfU1lTVEVNX1NRTElURT0xCisgICAgZXhwb3J0IE5TU19FTkFCTEVfRUNDPTEKKworICAgIGV4cG9ydCBPU19SRUxFQVNFPTMuNAorICAgIGV4cG9ydCBPU19UQVJHRVQ9TGludXgKKyAgICBleHBvcnQgT1NfQVJDSD1MaW51eAorCisgICAgaWYgWyAiJHtUQVJHRVRfQVJDSH0iID0gInBvd2VycGMiIF07IHRoZW4KKyAgICAgICAgT1NfVEVTVD1wcGMKKyAgICBlbGlmIFsgIiR7VEFSR0VUX0FSQ0h9IiA9ICJwb3dlcnBjNjQiIF07IHRoZW4KKyAgICAgICAgT1NfVEVTVD1wcGM2NAorICAgIGVsaWYgWyAiJHtUQVJHRVRfQVJDSH0iID0gIm1pcHMiIC1vICIke1RBUkdFVF9BUkNIfSIgPSAibWlwc2VsIiAtbyAiJHtUQVJHRVRfQVJDSH0iID0gIm1pcHM2NCIgLW8gIiR7VEFSR0VUX0FSQ0h9IiA9ICJtaXBzNjRlbCIgXTsgdGhlbgorICAgICAgICBPU19URVNUPW1pcHMKKyAgICBlbHNlCisgICAgICAgIE9TX1RFU1Q9IiR7VEFSR0VUX0FSQ0h9IgorICAgIGZpCisKKyAgICBpZiBbICIke1NJVEVJTkZPX0JJVFN9IiA9ICI2NCIgXTsgdGhlbgorICAgICAgICBleHBvcnQgVVNFXzY0PTEKKyAgICBlbGlmIFsgIiR7VEFSR0VUX0FSQ0h9IiA9ICJ4ODZfNjQiIC1hICIke1NJVEVJTkZPX0JJVFN9IiA9ICIzMiIgXTsgdGhlbgorICAgICAgICBleHBvcnQgVVNFX1gzMj0xCisgICAgZmkKKworICAgIGV4cG9ydCBOU1NfRElTQUJMRV9HVEVTVFM9MQorCisgICAgIyBXZSBjYW4gbW9kaWZ5IENDIGluIHRoZSBlbnZpcm9ubWVudCwgYnV0IGlmIHdlIHNldCBpdCB2aWEgYW4KKyAgICAjIGFyZ3VtZW50IHRvIG1ha2UsIG5zaW5zdGFsbCwgYSBob3N0IHByb2dyYW0sIHdpbGwgYWxzbyBidWlsZCB3aXRoIGl0IQorICAgICMKKyAgICBleHBvcnQgQ0M9IiR7Q0N9IC1nIgorICAgIG1ha2UgLUMgLi9uc3MgQ0NDPSIke0NYWH0gLWciIFwKKyAgICAgICAgT1NfVEVTVD0ke09TX1RFU1R9IFwKKyAgICAgICAgUlBBVEg9IiR7UlBBVEh9IgorfQorCisKK2RvX2luc3RhbGxfcHJlcGVuZF9jbGFzcy1uYXRpdmVzZGsoKSB7CisgICAgZXhwb3J0IExERkxBR1M9IiIKK30KKworZG9faW5zdGFsbCgpIHsKKyAgICBleHBvcnQgQ1JPU1NfQ09NUElMRT0xCisgICAgZXhwb3J0IE5BVElWRV9DQz0iZ2NjIgorICAgIGV4cG9ydCBCVUlMRF9PUFQ9MQorCisgICAgZXhwb3J0IEZSRUVCTF9OT19ERVBFTkQ9MQorCisgICAgZXhwb3J0IExJQkRJUj0ke2xpYmRpcn0KKyAgICBleHBvcnQgTU9aSUxMQV9DTElFTlQ9MQorICAgIGV4cG9ydCBOU19VU0VfR0NDPTEKKyAgICBleHBvcnQgTlNTX1VTRV9TWVNURU1fU1FMSVRFPTEKKyAgICBleHBvcnQgTlNTX0VOQUJMRV9FQ0M9MQorCisgICAgZXhwb3J0IE9TX1JFTEVBU0U9My40CisgICAgZXhwb3J0IE9TX1RBUkdFVD1MaW51eAorICAgIGV4cG9ydCBPU19BUkNIPUxpbnV4CisKKyAgICBpZiBbICIke1RBUkdFVF9BUkNIfSIgPSAicG93ZXJwYyIgXTsgdGhlbgorICAgICAgICBPU19URVNUPXBwYworICAgIGVsaWYgWyAiJHtUQVJHRVRfQVJDSH0iID0gInBvd2VycGM2NCIgXTsgdGhlbgorICAgICAgICBPU19URVNUPXBwYzY0CisgICAgZWxpZiBbICIke1RBUkdFVF9BUkNIfSIgPSAibWlwcyIgLW8gIiR7VEFSR0VUX0FSQ0h9IiA9ICJtaXBzZWwiIC1vICIke1RBUkdFVF9BUkNIfSIgPSAibWlwczY0IiAtbyAiJHtUQVJHRVRfQVJDSH0iID0gIm1pcHM2NGVsIiBdOyB0aGVuCisgICAgICAgIE9TX1RFU1Q9bWlwcworICAgIGVsc2UKKyAgICAgICAgT1NfVEVTVD0iJHtUQVJHRVRfQVJDSH0iCisgICAgZmkKKyAgICBpZiBbICIke1NJVEVJTkZPX0JJVFN9IiA9ICI2NCIgXTsgdGhlbgorICAgICAgICBleHBvcnQgVVNFXzY0PTEKKyAgICBlbGlmIFsgIiR7VEFSR0VUX0FSQ0h9IiA9ICJ4ODZfNjQiIC1hICIke1NJVEVJTkZPX0JJVFN9IiA9ICIzMiIgXTsgdGhlbgorICAgICAgICBleHBvcnQgVVNFX1gzMj0xCisgICAgZmkKKworICAgIGV4cG9ydCBOU1NfRElTQUJMRV9HVEVTVFM9MQorCisgICAgbWFrZSAtQyAuL25zcyBcCisgICAgICAgIENDQz0iJHtDWFh9IiBcCisgICAgICAgIE9TX1RFU1Q9JHtPU19URVNUfSBcCisgICAgICAgIFNPVVJDRV9MSUJfRElSPSIke1REfS8ke2xpYmRpcn0iIFwKKyAgICAgICAgU09VUkNFX0JJTl9ESVI9IiR7VER9LyR7YmluZGlyfSIgXAorICAgICAgICBpbnN0YWxsCisKKyAgICBpbnN0YWxsIC1kICR7RH0vJHtsaWJkaXJ9LworICAgIGZvciBmaWxlIGluICR7U30vZGlzdC8qLk9CSi9saWIvKi5zbzsgZG8KKyAgICAgICAgZWNobyAiSW5zdGFsbGluZyBgYmFzZW5hbWUgJGZpbGVgLi4uIgorICAgICAgICBjcCAkZmlsZSAgJHtEfS8ke2xpYmRpcn0vCisgICAgZG9uZQorCisgICAgZm9yIHNoYXJlZF9saWIgaW4gJHtURH0vJHtsaWJkaXJ9Lyouc28uKjsgZG8KKyAgICAgICAgaWYgWyAtZiAkc2hhcmVkX2xpYiBdOyB0aGVuCisgICAgICAgICAgICBjcCAkc2hhcmVkX2xpYiAke0R9LyR7bGliZGlyfQorICAgICAgICAgICAgbG4gLXNmICQoYmFzZW5hbWUgJHNoYXJlZF9saWIpICR7RH0vJHtsaWJkaXJ9LyQoYmFzZW5hbWUgJHNoYXJlZF9saWIgLjFvZSkKKyAgICAgICAgZmkKKyAgICBkb25lCisgICAgZm9yIHNoYXJlZF9saWIgaW4gJHtURH0vJHtsaWJkaXJ9Lyouc287IGRvCisgICAgICAgIGlmIFsgLWYgJHNoYXJlZF9saWIgLWEgISAtZSAke0R9LyR7bGliZGlyfS8kc2hhcmVkX2xpYiBdOyB0aGVuCisgICAgICAgICAgICBjcCAkc2hhcmVkX2xpYiAke0R9LyR7bGliZGlyfQorICAgICAgICBmaQorICAgIGRvbmUKKworICAgIGluc3RhbGwgLWQgJHtEfS8ke2luY2x1ZGVkaXJ9L25zczMKKyAgICBpbnN0YWxsIC1tIDY0NCAtdCAke0R9LyR7aW5jbHVkZWRpcn0vbnNzMyBkaXN0L3B1YmxpYy9uc3MvKgorCisgICAgaW5zdGFsbCAtZCAke0R9LyR7YmluZGlyfQorICAgIGZvciBiaW5hcnkgaW4gJHtURH0vJHtiaW5kaXJ9Lyo7IGRvCisgICAgICAgIGluc3RhbGwgLW0gNzU1IC10ICR7RH0vJHtiaW5kaXJ9ICRiaW5hcnkKKyAgICBkb25lCit9CisKK2RvX2luc3RhbGxfYXBwZW5kKCkgeworICAgICMgQ3JlYXRlIGVtcHR5IC5jaGsgZmlsZXMgZm9yIHRoZSBOU1MgbGlicmFyaWVzIGF0IGJ1aWxkIHRpbWUuIFRoZXkgY291bGQKKyAgICAjIGJlIHJlZ2VuZXJhdGVkIGF0IHRhcmdldCdzIGJvb3QgdGltZS4KKyAgICBmb3IgZmlsZSBpbiBsaWJzb2Z0b2tuMy5jaGsgbGliZnJlZWJsMy5jaGsgbGlibnNzZGJtMy5jaGs7IGRvCisgICAgICAgIHRvdWNoICR7RH0vJHtsaWJkaXJ9LyRmaWxlCisgICAgICAgIGNobW9kIDc1NSAke0R9LyR7bGliZGlyfS8kZmlsZQorICAgIGRvbmUKKyAgICBpbnN0YWxsIC1EIC1tIDc1NSAke1dPUktESVJ9L3NpZ25saWJzLnNoICR7RH0vJHtiaW5kaXJ9L3NpZ25saWJzLnNoCisKKyAgICBpbnN0YWxsIC1kICR7RH0ke2xpYmRpcn0vcGtnY29uZmlnLworICAgIHNlZCAncy8lTlNTX1ZFUlNJT04lLyR7UFZ9LycgJHtXT1JLRElSfS9uc3MucGMuaW4gfCBzZWQgJ3MvJU5TUFJfVkVSU0lPTiUvNC45LjIvJyA+ICR7RH0ke2xpYmRpcn0vcGtnY29uZmlnL25zcy5wYworICAgIHNlZCAtaSBzOk9FUFJFRklYOiR7cHJlZml4fTpnICR7RH0ke2xpYmRpcn0vcGtnY29uZmlnL25zcy5wYworICAgIHNlZCAtaSBzOk9FRVhFQ1BSRUZJWDoke2V4ZWNfcHJlZml4fTpnICR7RH0ke2xpYmRpcn0vcGtnY29uZmlnL25zcy5wYworICAgIHNlZCAtaSBzOk9FTElCRElSOiR7bGliZGlyfTpnICR7RH0ke2xpYmRpcn0vcGtnY29uZmlnL25zcy5wYworICAgIHNlZCAtaSBzOk9FSU5DRElSOiR7aW5jbHVkZWRpcn0vbnNzMzpnICR7RH0ke2xpYmRpcn0vcGtnY29uZmlnL25zcy5wYworfQorCitkb19pbnN0YWxsX2FwcGVuZF9jbGFzcy10YXJnZXQoKSB7CisgICAgIyBDcmVhdGUgYSBibGFuayBjZXJ0aWZpY2F0ZQorICAgIG1rZGlyIC1wICR7RH0ke3N5c2NvbmZkaXJ9L3BraS9uc3NkYi8KKyAgICB0b3VjaCAuL2VtcHR5X3Bhc3N3b3JkCisgICAgY2VydHV0aWwgLU4gLWQgJHtEfSR7c3lzY29uZmRpcn0vcGtpL25zc2RiLyAtZiAuL2VtcHR5X3Bhc3N3b3JkCisgICAgY2htb2QgNjQ0ICR7RH0ke3N5c2NvbmZkaXJ9L3BraS9uc3NkYi8qLmRiCisgICAgcm0gLi9lbXB0eV9wYXNzd29yZAorfQorCitwa2dfcG9zdGluc3RfJHtQTn0gKCkgeworICAgIGlmIFsgLW4gIiREIiBdOyB0aGVuCisgICAgICAgIGZvciBJIGluICRELyR7bGliZGlyfS9saWIqLmNoazsgZG8KKyAgICAgICAgICAgIEROPWBkaXJuYW1lICRJYAorICAgICAgICAgICAgQk49YGJhc2VuYW1lICRJIC5jaGtgCisgICAgICAgICAgICBGTj0kRE4vJEJOLnNvCisgICAgICAgICAgICBzaGxpYnNpZ24gLWkgJEZOCisJICAgIGlmIFsgJD8gLW5lIDAgXTsgdGhlbgorCSAgICAgICBleGl0IDEKKwkgICAgZmkKKyAgICAgICAgZG9uZQorICAgICAgICBleGl0IDAKKyAgICBmaQorICAgIHNpZ25saWJzLnNoCit9CisKK1BBQ0tBR0VTID0rICIke1BOfS1zbWltZSIKK0ZJTEVTXyR7UE59LXNtaW1lID0gIlwKKyAgICAke2JpbmRpcn0vc21pbWUgXAorIgorRklMRVNfJHtQTn0gPSAiXAorICAgICR7c3lzY29uZmRpcn0gXAorICAgICR7YmluZGlyfSBcCisgICAgJHtsaWJkaXJ9L2xpYiouY2hrIFwKKyAgICAke2xpYmRpcn0vbGliKi5zbyBcCisgICAgIgorRklMRVNfJHtQTn0tZGV2ID0gIlwKKyAgICAke2xpYmRpcn0vbnNzIFwKKyAgICAke2xpYmRpcn0vcGtnY29uZmlnLyogXAorICAgICR7aW5jbHVkZWRpcn0vKiBcCisgICAgIgorCitCQkNMQVNTRVhURU5EID0gIm5hdGl2ZSBuYXRpdmVzZGsiCisKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9wMTEta2l0L3AxMS1raXRfMC4yMi4xLmJiIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L3AxMS1raXQvcDExLWtpdF8wLjIyLjEuYmIKaW5kZXggYTRlZmZmMS4uMzhmYTA5YiAxMDA2NDQKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L3AxMS1raXQvcDExLWtpdF8wLjIyLjEuYmIKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L3AxMS1raXQvcDExLWtpdF8wLjIyLjEuYmIKQEAgLTIsNyArMiw3IEBACiBMSUNFTlNFID0gIkJTRCIKIExJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PTAyOTMzODg3ZjYwOTgwN2ZiYjU3YWE0MjM3ZDE0YTUwIgogCi1pbmhlcml0IGF1dG90b29scyBnZXR0ZXh0IHBrZ2NvbmZpZyB1cHN0cmVhbS12ZXJzaW9uLWlzLWV2ZW4KK2luaGVyaXQgYXV0b3Rvb2xzIGdldHRleHQgcGtnY29uZmlnIHVwc3RyZWFtLXZlcnNpb24taXMtZXZlbiBndGstZG9jCiAKIERFUEVORFMgPSAibGlidGFzbjEgbGliZmZpIgogCkBAIC0xMiw2ICsxMiwyNiBAQAogCiBFWFRSQV9PRUNPTkYgPSAiLS13aXRob3V0LXRydXN0LXBhdGhzIgogCisjIFRoaXMgcmVjaXBlIGRvZXMgbm90IHVzZSB0aGUgc3RhbmRhcmQgZ3RrLWRvYyBtNCBtYWNyb3MsIGFuZCBzbyB0aGUgLi9jb25maWd1cmUgZmxhZ3MKKyMgdGhhdCBjb250cm9sIGd0ay1kb2MgYnVpbGQgYXJlIG5vbi1zdGFuZGFyZAorRVhUUkFfT0VDT05GX3ByZXBlbmRfY2xhc3MtdGFyZ2V0ID0gIiR7QGJiLnV0aWxzLmNvbnRhaW5zKCdHVEtET0NfRU5BQkxFRCcsICdUcnVlJywgJy0tZW5hYmxlLWRvYyAtLWVuYWJsZS1kb2MtaHRtbCAtLWRpc2FibGUtZG9jLXBkZicsIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICctLWRpc2FibGUtZG9jJywgZCl9ICIKKworIyBXaGVuIGJ1aWxkaW5nIG5hdGl2ZSByZWNpcGVzLCBkaXNhYmxlIGd0a2RvYywgYXMgaXQgaXMgbm90IG5lY2Vzc2FyeSwKKyMgcHVsbHMgaW4gYWRkaXRpb25hbCBkZXBlbmRlbmNpZXMsIGFuZCBtYWtlcyBidWlsZCB0aW1lcyBsb25nZXIKK0VYVFJBX09FQ09ORl9wcmVwZW5kX2NsYXNzLW5hdGl2ZSA9ICItLWRpc2FibGUtZG9jICIKK0VYVFJBX09FQ09ORl9wcmVwZW5kX2NsYXNzLW5hdGl2ZXNkayA9ICItLWRpc2FibGUtZG9jICIKKworVU5LTk9XTl9DT05GSUdVUkVfV0hJVEVMSVNUX2FwcGVuZCA9ICIgLS1lbmFibGUtZ3RrLWRvYy1odG1sIC0tZGlzYWJsZS1ndGstZG9jLXBkZiAtLWVuYWJsZS1ndGstZG9jIC0tZGlzYWJsZS1ndGstZG9jIgorCisjIHAxMS1raXQgcmVsaWVzIG9uIHRoZXNlIHR3byBiZWluZyBjb3BpZWQgZnJvbSBzb3VyY2UgdHJlZQorIyBpbnN0ZWFkIG9mIGJlaW5nIHJlZ2VuZXJhdGVkIGJ5IGd0a2RvYy1zY2FuLCBidXQgZG9lc24ndCBzZXR1cAorIyBkZXBlbmRlbmNpZXMgY29ycmVjdGx5IHdoZW4gdGhlcmUgaXMgYSBwYXJhbGxlbCBidWlsZC4gTGV0J3MgcHJlLWNvcHkKKyMgdGhlbSBpbnN0ZWFkLgorZG9fY29tcGlsZV9wcmVwZW5kICgpIHsKKyAgICAgICAgY3AgJHtTfS9kb2MvbWFudWFsL3AxMS1raXQtb3ZlcnJpZGVzLnR4dCAke1N9L2RvYy9tYW51YWwvcDExLWtpdC1zZWN0aW9ucy50eHQgJHtCfS9kb2MvbWFudWFsLworfQorCiBGSUxFU18ke1BOfSArPSAiIFwKICAgICAke2xpYmRpcn0vcDExLWtpdC1wcm94eS5zbyBcCiAgICAgJHtsaWJkaXJ9L3BrY3MxMS8qLnNvIFwKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9waW5lbnRyeS9waW5lbnRyeV8wLjkuMi5iYiBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9waW5lbnRyeS9waW5lbnRyeV8wLjkuMi5iYgppbmRleCBkNmI3MTMwLi5kMzE1YTk5IDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvcGluZW50cnkvcGluZW50cnlfMC45LjIuYmIKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L3BpbmVudHJ5L3BpbmVudHJ5XzAuOS4yLmJiCkBAIC0xMiw3ICsxMiw4IEBACiAKIERFUEVORFMgPSAiZ2V0dGV4dC1uYXRpdmUiCiAKLVNSQ19VUkkgPSAiZnRwOi8vZnRwLmdudXBnLm9yZy9nY3J5cHQvJHtCUE59LyR7QlBOfS0ke1BWfS50YXIuYnoyIgorVVBTVFJFQU1fQ0hFQ0tfVVJJID0gImh0dHBzOi8vZ251cGcub3JnL2Rvd25sb2FkL2luZGV4Lmh0bWwiCitTUkNfVVJJID0gIiR7R05VUEdfTUlSUk9SfS8ke0JQTn0vJHtCUE59LSR7UFZ9LnRhci5iejIiCiAKIFNSQ19VUklbbWQ1c3VtXSA9ICJmNTFkNDU0ZjkyMTExMWI1MTU2YTIyOTFjYmY3MDI3OCIKIFNSQ19VUklbc2hhMjU2c3VtXSA9ICJmZDhiYzE1OTJjZWIyMmJiNDkyYjA3Y2IyOWIxYjE0MGJiODgyYzg1OWU2NTAzYjk3NDI1NGMwYTRiNDEzNGQxIgpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L3BvcHQvcG9wdC9wb3B0X2ZpeF9mb3JfYXV0b21ha2UtMS4xMi5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9wb3B0L3BvcHQvcG9wdF9maXhfZm9yX2F1dG9tYWtlLTEuMTIucGF0Y2gKaW5kZXggOTFiY2E5Ni4uN2Q3NGFhZCAxMDA2NDQKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L3BvcHQvcG9wdC9wb3B0X2ZpeF9mb3JfYXV0b21ha2UtMS4xMi5wYXRjaAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvcG9wdC9wb3B0L3BvcHRfZml4X2Zvcl9hdXRvbWFrZS0xLjEyLnBhdGNoCkBAIC00LDcgKzQsNyBAQAogCiB8IGNvbmZpZ3VyZS5hYzo0OTogZXJyb3I6IGF1dG9tYXRpYyBkZS1BTlNJLWZpY2F0aW9uIHN1cHBvcnQgaGFzIGJlZW4gcmVtb3ZlZAogCi1TaWduZWQtT2ZmLUJ5OiBOaXRpbiBBIEthbWJsZSA8bml0aW4uYS5rYW1ibGVAaW50ZWwuY29tPgorU2lnbmVkLW9mZi1ieTogTml0aW4gQSBLYW1ibGUgPG5pdGluLmEua2FtYmxlQGludGVsLmNvbT4KIDIwMTIvMDUvMDIKIAogSW5kZXg6IHBvcHQtMS4xNi9jb25maWd1cmUuYWMKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9wb3B0L3BvcHRfMS4xNi5iYiBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9wb3B0L3BvcHRfMS4xNi5iYgppbmRleCBjYjEzYTgxLi40NzgyODhmIDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvcG9wdC9wb3B0XzEuMTYuYmIKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L3BvcHQvcG9wdF8xLjE2LmJiCkBAIC02LDYgKzYsOCBAQAogTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9Y2IwNjEzYzMwYWYyYTgyNDliOGRjYzY3ZDNlZGIwNmQiCiBQUiA9ICJyMyIKIAorREVQRU5EUyA9ICJ2aXJ0dWFsL2xpYmljb252IgorCiBTUkNfVVJJID0gImh0dHA6Ly9ycG01Lm9yZy9maWxlcy9wb3B0L3BvcHQtJHtQVn0udGFyLmd6IFwKICAgICAgICAgICAgZmlsZTovL3BrZ2NvbmZpZ19maXgucGF0Y2ggXAogICAgICAgICAgICBmaWxlOi8vcG9wdF9maXhfZm9yX2F1dG9tYWtlLTEuMTIucGF0Y2ggXApkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L3B0ZXN0LXJ1bm5lci9wdGVzdC1ydW5uZXJfMi4wLmJiIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L3B0ZXN0LXJ1bm5lci9wdGVzdC1ydW5uZXJfMi4wLmJiCmluZGV4IDcwODFhZmIuLjlkNDU1MTMgMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9wdGVzdC1ydW5uZXIvcHRlc3QtcnVubmVyXzIuMC5iYgorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvcHRlc3QtcnVubmVyL3B0ZXN0LXJ1bm5lcl8yLjAuYmIKQEAgLTcsOCArNyw4IEBACiBMSUNFTlNFID0gIkdQTHYyIgogTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vTElDRU5TRTttZDU9NzUxNDE5MjYwYWE5NTQ0OTlmN2FiYWFiYWE4ODJiYmUiCiAKLVNSQ1JFViA9ICI4YmZkZjk0NmU3ODRmNGQ1NzU3YmViZWUxZmJjNGI0YTNkN2E5NWM0IgotUFYgPSAiMi4wK2dpdCR7U1JDUFZ9IgorU1JDUkVWID0gImUyYWE0MjU2NzQ1Mzc3Yjc4NGM4NjkxZjU0NjA0MWI1OWY2ZTA0NmIiCitQViA9ICIyLjAuMStnaXQke1NSQ1BWfSIKIAogU1JDX1VSSSA9ICJnaXQ6Ly9naXQueW9jdG9wcm9qZWN0Lm9yZy9wdGVzdC1ydW5uZXIyIgogUyA9ICIke1dPUktESVJ9L2dpdCIKQEAgLTIyLDUgKzIyLDUgQEAKIH0KIAogZG9faW5zdGFsbCAoKSB7Ci0JaW5zdGFsbCAtRCAtbSAwNzU1ICR7V09SS0RJUn0vZ2l0L3B0ZXN0LXJ1bm5lciAke0R9JHtiaW5kaXJ9L3B0ZXN0LXJ1bm5lcgorCWluc3RhbGwgLUQgLW0gMDc1NSAke1N9L3B0ZXN0LXJ1bm5lciAke0R9JHtiaW5kaXJ9L3B0ZXN0LXJ1bm5lcgogfQpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L3NlcmYvc2VyZl8xLjMuOC5iYiBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9zZXJmL3NlcmZfMS4zLjguYmIKaW5kZXggYjUwNTlkNS4uYzQ5OGQ5MCAxMDA2NDQKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L3NlcmYvc2VyZl8xLjMuOC5iYgorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvc2VyZi9zZXJmXzEuMy44LmJiCkBAIC0xLDExICsxLDEzIEBACiBTVU1NQVJZID0gIkhpZ2gtUGVyZm9ybWFuY2UgQXN5bmNocm9ub3VzIEhUVFAgQ2xpZW50IExpYnJhcnkiCi1TUkNfVVJJID0gIiR7REVCSUFOX01JUlJPUn0vbWFpbi9zLyR7QlBOfS8ke0JQTn1fJHtQVn0ub3JpZy50YXIuZ3ogXAorU1JDX1VSSSA9ICJodHRwOi8vc25hcHNob3QuZGViaWFuLm9yZy9hcmNoaXZlL2RlYmlhbi8yMDE2MDcyOFQwNDM0NDNaL3Bvb2wvbWFpbi9zLyR7QlBOfS8ke0JQTn1fJHtQVn0ub3JpZy50YXIuZ3ogXAogICAgICAgICAgICBmaWxlOi8vbm9ycGF0aC5wYXRjaCBcCiAgICAgICAgICAgIGZpbGU6Ly9lbnYucGF0Y2giCiAKIFNSQ19VUklbbWQ1c3VtXSA9ICI3MTNiZWFmMDVkN2YzMzI5ZGUxMjFlMjE4ZTJmY2I5MyIKIFNSQ19VUklbc2hhMjU2c3VtXSA9ICI3NzEzNGNkNTAxMDY2NGNhMDIzNTg1YmNlNTA5NzhiZDQwMDU5MDZlZDI4MGZmODg5ZjU5MWY4NmRmN2M1OWU0IgogCitVUFNUUkVBTV9DSEVDS19VUkkgPSAiJHtERUJJQU5fTUlSUk9SfS9tYWluL3Mvc2VyZi8iCisKIExJQ0VOU0UgPSAiQXBhY2hlLTIuMCIKIExJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0xJQ0VOU0U7bWQ1PTg2ZDNmM2E5NWMzMjRjOTQ3OWJkODk4Njk2OGY0MzI3IgogCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvc291cmNlLWhpZ2hsaWdodC9maWxlcy8wMDAxLXNvdXJjZS1oaWdobGlnaHQucGMuaW4tZG8tbm90LWFkZC1Cb29zdC1zLWxpYnJhcmllcy0ucGF0Y2ggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvc291cmNlLWhpZ2hsaWdodC9maWxlcy8wMDAxLXNvdXJjZS1oaWdobGlnaHQucGMuaW4tZG8tbm90LWFkZC1Cb29zdC1zLWxpYnJhcmllcy0ucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjBhYTVkMQotLS0gL2Rldi9udWxsCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9zb3VyY2UtaGlnaGxpZ2h0L2ZpbGVzLzAwMDEtc291cmNlLWhpZ2hsaWdodC5wYy5pbi1kby1ub3QtYWRkLUJvb3N0LXMtbGlicmFyaWVzLS5wYXRjaApAQCAtMCwwICsxLDMwIEBACitGcm9tIDlhYTAxZmQ1ZjlkOGIyYjk4YzM0Njg0ZGM4ZjY4MTE1NzUwZWY0MWMgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBBbGV4YW5kZXIgS2FuYXZpbiA8YWxleC5rYW5hdmluQGdtYWlsLmNvbT4KK0RhdGU6IFR1ZSwgMTIgSnVsIDIwMTYgMTc6MTU6MTMgKzAzMDAKK1N1YmplY3Q6IFtQQVRDSF0gc291cmNlLWhpZ2hsaWdodC5wYy5pbjogZG8gbm90IGFkZCBCb29zdCdzIGxpYnJhcmllcyBhbmQKKyBpbmNsdWRlcworCitUaGlzIGJyZWFrcyB3aGVuIGNvbXBpbGluZyBpbiBzeXNyb290czsgYSBwcm9wZXIgd2F5IGlzIHRvIHVzZSBEZXBlbmRzCisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworU2lnbmVkLW9mZi1ieTogQWxleGFuZGVyIEthbmF2aW4gPGFsZXgua2FuYXZpbkBnbWFpbC5jb20+CistLS0KKyBzb3VyY2UtaGlnaGxpZ2h0LnBjLmluIHwgNCArKy0tCisgMSBmaWxlIGNoYW5nZWQsIDIgaW5zZXJ0aW9ucygrKSwgMiBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL3NvdXJjZS1oaWdobGlnaHQucGMuaW4gYi9zb3VyY2UtaGlnaGxpZ2h0LnBjLmluCitpbmRleCA3OWFiNjNlLi42NDExNGE3IDEwMDY0NAorLS0tIGEvc291cmNlLWhpZ2hsaWdodC5wYy5pbgorKysrIGIvc291cmNlLWhpZ2hsaWdodC5wYy5pbgorQEAgLTcsNiArNyw2IEBAIE5hbWU6IGxpYnNvdXJjZS1oaWdobGlnaHQKKyBEZXNjcmlwdGlvbjogR05VIFNvdXJjZS1oaWdobGlnaHQgbGlicmFyeS4KKyBVUkw6IGh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS9zcmMtaGlnaGxpdGUvCisgVmVyc2lvbjogQFZFUlNJT05ACistTGliczogLUwke2xpYmRpcn0gLWxzb3VyY2UtaGlnaGxpZ2h0IEBCT09TVF9MREZMQUdTQCBAQk9PU1RfUkVHRVhfTElCQAorLUNmbGFnczogLUkke2luY2x1ZGVkaXJ9IEBCT09TVF9DUFBGTEFHU0AKKytMaWJzOiAtTCR7bGliZGlyfSAtbHNvdXJjZS1oaWdobGlnaHQKKytDZmxhZ3M6IC1JJHtpbmNsdWRlZGlyfQorIAorLS0gCisyLjguMQorCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvc291cmNlLWhpZ2hsaWdodC9zb3VyY2UtaGlnaGxpZ2h0XzMuMS44LmJiIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L3NvdXJjZS1oaWdobGlnaHQvc291cmNlLWhpZ2hsaWdodF8zLjEuOC5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44NTkyM2U0Ci0tLSAvZGV2L251bGwKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L3NvdXJjZS1oaWdobGlnaHQvc291cmNlLWhpZ2hsaWdodF8zLjEuOC5iYgpAQCAtMCwwICsxLDI4IEBACitTVU1NQVJZID0gIlN5bnRheCBoaWdobGlnaHQgdXRpbGl0eSIKK0RFU0NSSVBUSU9OID0gIlNvdXJjZS1oaWdobGlnaHQgY29udmVydHMgc291cmNlIGNvZGUgdG8gZm9ybWF0dGVkIHRleHQgd2l0aCBzeW50YXggaGlnaGxpZ2h0aW5nLiIKK0hPTUVQQUdFID0gImh0dHBzOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvc3JjLWhpZ2hsaXRlLyIKK0xJQ0VOU0UgPSAiR1BMdjMiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT1mZjk1YmZlMDE5ZmVhZjkyZjUyNGI3M2RkNzllNzZlYiIKKworU1JDX1VSSSA9ICIke0dOVV9NSVJST1J9L3NyYy1oaWdobGl0ZS8ke0JQTn0tJHtQVn0udGFyLmd6IFwKKyAgICAgICAgICAgZmlsZTovLzAwMDEtc291cmNlLWhpZ2hsaWdodC5wYy5pbi1kby1ub3QtYWRkLUJvb3N0LXMtbGlicmFyaWVzLS5wYXRjaCIKK1NSQ19VUklbbWQ1c3VtXSA9ICIzMjQzNDcwNzA2ZWY1ZmVmZGMzZTQzYjUzMDZhNGU0MSIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICIwMTMzNmE3ZWExZDFjY2MzNzQyMDFmN2I4MWZmYTk0ZDBhZWNiMzNhZmM3ZDY5MDNlYmY5ZmJmMzNhNTVhZGEzIgorCitpbmhlcml0IGF1dG90b29scworCitERVBFTkRTX2FwcGVuZCA9ICIgYm9vc3QiCisKK0RFUEVORFNfYXBwZW5kX2NsYXNzLXRhcmdldCA9ICIgc291cmNlLWhpZ2hsaWdodC1uYXRpdmUiCisKK0VYVFJBX09FQ09ORiA9ICItLXdpdGgtYm9vc3Q9eWVzIC0td2l0aC1ib29zdC1saWJkaXI9JHtTVEFHSU5HX0RJUl9UQVJHRVR9JHtsaWJkaXJ9IgorCitCQkNMQVNTRVhURU5EID0gIm5hdGl2ZSIKKworIyBzb3VyY2UtaGlnaGxpZ2h0IGlzIHVzaW5nIGl0cyBvd24gYmluYXJ5IGZyb20gdGhlIGJ1aWxkIHRyZWUgdG8gbWFrZSBkb2N1bWVudGF0aW9uCisjIGxldCdzIHN1YnN0aXR1dGUgdGhlIG5hdGl2ZSBiaW5hcnkgaW5zdGVhZAorZG9fY29uZmlndXJlX3ByZXBlbmRfY2xhc3MtdGFyZ2V0ICgpIHsKKyAgICAgICAgc2VkIC1pIC1lICdzLF5TUkNISUxJVEVFWEUgPSAkKHRvcF9idWlsZGRpcikuKixTUkNISUxJVEVFWEUgPSBzb3VyY2UtaGlnaGxpZ2h0LCcgJHtTfS9kb2MvTWFrZWZpbGUuYW0KK30KKworUkRFUEVORFNfc291cmNlLWhpZ2hsaWdodCArPSAiYmFzaCIKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9zcWxpdGUvZmlsZXMvMDAwMS1yZXZlcnQtYWQ2MDFjNzk2Mi10aGF0LWJyaW5ncy0yLWluY3JlYXNlLW9mLWJ1aWxkLXRpLnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L3NxbGl0ZS9maWxlcy8wMDAxLXJldmVydC1hZDYwMWM3OTYyLXRoYXQtYnJpbmdzLTItaW5jcmVhc2Utb2YtYnVpbGQtdGkucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjY1NDBiMgotLS0gL2Rldi9udWxsCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9zcWxpdGUvZmlsZXMvMDAwMS1yZXZlcnQtYWQ2MDFjNzk2Mi10aGF0LWJyaW5ncy0yLWluY3JlYXNlLW9mLWJ1aWxkLXRpLnBhdGNoCkBAIC0wLDAgKzEsNTYgQEAKK0Zyb20gNGIyODZiNDQxZThlZmE5YTM0ZWIwZGI4MjI3NzQ4ZWJmZmQ5MWMzNSBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEppYW54dW4gWmhhbmcgPGppYW54dW4uemhhbmdAbGludXguaW50ZWwuY29tPgorRGF0ZTogVGh1LCAxMyBPY3QgMjAxNiAwOToyNDoyMSAtMDcwMAorU3ViamVjdDogW1BBVENIXSByZXZlcnQgYWQ2MDFjNzk2MiB0aGF0IGJyaW5ncyAyJSBpbmNyZWFzZSBvZiBidWlsZCB0aW1lLgorCitUaGUgY29tbWVudCBvZiB0aGUgY2hhbmdlIGluIHNxbGl0ZSBmb3NzaWwgcHJvamVjdCBpczoKKyJGb3IgaW4tbWVtb3J5IGRhdGFiYXNlcywgaXQgZG9lcyBub3QgbWF0dGVyIGlmIHBjYWNoZQorZW50cmllcyBhcmUgbWFya2VkICJjbGVhbiIgb3IgIndyaXRhYmxlIi4iCisKK1Vwc3RyZWFtIFN0YXR1czogSW5hcHByb3ByaWF0ZQorCitTaWduZWQtb2ZmLWJ5OiBKaWFueHVuIFpoYW5nIDxqaWFueHVuLnpoYW5nQGxpbnV4LmludGVsLmNvbT4KKy0tLQorIHNxbGl0ZTMuYyB8IDEyICsrKy0tLS0tLS0tLQorIDEgZmlsZSBjaGFuZ2VkLCAzIGluc2VydGlvbnMoKyksIDkgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9zcWxpdGUzLmMgYi9zcWxpdGUzLmMKK2luZGV4IGNjZGRmZTYuLmVjYWU1NTAgMTAwNjQ0CistLS0gYS9zcWxpdGUzLmMKKysrKyBiL3NxbGl0ZTMuYworQEAgLTEzMTQ2LDcgKzEzMTQ2LDcgQEAgc3RydWN0IFBnSGRyIHsKKyAgIHNxbGl0ZTNfcGNhY2hlX3BhZ2UgKnBQYWdlOyAgICAvKiBQY2FjaGUgb2JqZWN0IHBhZ2UgaGFuZGxlICovCisgICB2b2lkICpwRGF0YTsgICAgICAgICAgICAgICAgICAgLyogUGFnZSBkYXRhICovCisgICB2b2lkICpwRXh0cmE7ICAgICAgICAgICAgICAgICAgLyogRXh0cmEgY29udGVudCAqLworLSAgUGdIZHIgKnBEaXJ0eTsgICAgICAgICAgICAgICAgIC8qIFRyYW5zaWVudCBsaXN0IG9mIGRpcnR5IHNvcnRlZCBieSBwZ25vICovCisrICBQZ0hkciAqcERpcnR5OyAgICAgICAgICAgICAgICAgLyogVHJhbnNpZW50IGxpc3Qgb2YgZGlydHkgcGFnZXMgKi8KKyAgIFBhZ2VyICpwUGFnZXI7ICAgICAgICAgICAgICAgICAvKiBUaGUgcGFnZXIgdGhpcyBwYWdlIGlzIHBhcnQgb2YgKi8KKyAgIFBnbm8gcGdubzsgICAgICAgICAgICAgICAgICAgICAvKiBQYWdlIG51bWJlciBmb3IgdGhpcyBwYWdlICovCisgI2lmZGVmIFNRTElURV9DSEVDS19QQUdFUworQEAgLTQzNTA0LDEzICs0MzUwNCw3IEBAIGJpdHZlY19lbmQ6CisgLyogI2luY2x1ZGUgInNxbGl0ZUludC5oIiAqLworIAorIC8qCistKiogQSBjb21wbGV0ZSBwYWdlIGNhY2hlIGlzIGFuIGluc3RhbmNlIG9mIHRoaXMgc3RydWN0dXJlLiAgRXZlcnkKKy0qKiBlbnRyeSBpbiB0aGUgY2FjaGUgaG9sZHMgYSBzaW5nbGUgcGFnZSBvZiB0aGUgZGF0YWJhc2UgZmlsZS4gIFRoZQorLSoqIGJ0cmVlIGxheWVyIG9ubHkgb3BlcmF0ZXMgb24gdGhlIGNhY2hlZCBjb3B5IG9mIHRoZSBkYXRhYmFzZSBwYWdlcy4KKy0qKgorLSoqIEEgcGFnZSBjYWNoZSBlbnRyeSBpcyAiY2xlYW4iIGlmIGl0IGV4YWN0bHkgbWF0Y2hlcyB3aGF0IGlzIGN1cnJlbnRseQorLSoqIG9uIGRpc2suICBBIHBhZ2UgaXMgImRpcnR5IiBpZiBpdCBoYXMgYmVlbiBtb2RpZmllZCBhbmQgbmVlZHMgdG8gYmUKKy0qKiBwZXJzaXN0ZWQgdG8gZGlzay4KKysqKiBBIGNvbXBsZXRlIHBhZ2UgY2FjaGUgaXMgYW4gaW5zdGFuY2Ugb2YgdGhpcyBzdHJ1Y3R1cmUuCisgKioKKyAqKiBwRGlydHksIHBEaXJ0eVRhaWwsIHBTeW5jZWQ6CisgKiogICBBbGwgZGlydHkgcGFnZXMgYXJlIGxpbmtlZCBpbnRvIHRoZSBkb3VibHkgbGlua2VkIGxpc3QgdXNpbmcKK0BAIC00ODMxNCw3ICs0ODMwOCw3IEBAIHN0YXRpYyBpbnQgcGFnZXJfZW5kX3RyYW5zYWN0aW9uKFBhZ2VyICpwUGFnZXIsIGludCBoYXNNYXN0ZXIsIGludCBiQ29tbWl0KXsKKyAgIHBQYWdlci0+cEluSm91cm5hbCA9IDA7CisgICBwUGFnZXItPm5SZWMgPSAwOworICAgaWYoIHJjPT1TUUxJVEVfT0sgKXsKKy0gICAgaWYoIHBhZ2VyRmx1c2hPbkNvbW1pdChwUGFnZXIsIGJDb21taXQpICl7CisrICAgIGlmKCBNRU1EQiB8fCBwYWdlckZsdXNoT25Db21taXQocFBhZ2VyLCBiQ29tbWl0KSApeworICAgICAgIHNxbGl0ZTNQY2FjaGVDbGVhbkFsbChwUGFnZXItPnBQQ2FjaGUpOworICAgICB9ZWxzZXsKKyAgICAgICBzcWxpdGUzUGNhY2hlQ2xlYXJXcml0YWJsZShwUGFnZXItPnBQQ2FjaGUpOworLS0gCisyLjcuNAorCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvc3FsaXRlL3NxbGl0ZTMvZml4LWRpc2FibGUtc3RhdGljLXNoZWxsLnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L3NxbGl0ZS9zcWxpdGUzL2ZpeC1kaXNhYmxlLXN0YXRpYy1zaGVsbC5wYXRjaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNmYzOWFlMi4uMDAwMDAwMAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvc3FsaXRlL3NxbGl0ZTMvZml4LWRpc2FibGUtc3RhdGljLXNoZWxsLnBhdGNoCisrKyAvZGV2L251bGwKQEAgLTEsNjEgKzAsMCBAQAotRnJvbSBlZGU1ZGI4M2UzOGNjOGFkOGM5YmUyOTFjZDg5ODVmN2FkOTlmMjkxIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQotRnJvbTogQW5kcmUgTWNDdXJkeSA8YXJtY2N1cmR5QGdtYWlsLmNvbT4KLURhdGU6IFR1ZSwgMTYgRmViIDIwMTYgMTQ6MDA6MDAgLTA4MDAKLVN1YmplY3Q6IFtQQVRDSF0gZml4IC0tZGlzYWJsZS1zdGF0aWMtc2hlbGwKLQotVXBzdHJlYW0gc3FsaXRlIHNlZW1zIHRvIGJlIG1vdmluZyBmdXJ0aGVyIGFuZCBmdXJ0aGVyIGF3YXkgZnJvbQotYWxsb3dpbmcgdGhlIHNxbGl0ZTMgY29tbWFuZCBsaW5lIHRvb2wgdG8gYmUgZHluYW1pY2FsbHkgbGlua2VkIHdpdGgKLXNxbGl0ZS4KLQotVGhlIC0tZGlzYWJsZS1zdGF0aWMtc2hlbGwgY29uZmlndXJlIG9wdGlvbiBhZGRlZCBpbiAzLjEwLjAgbm8gbG9uZ2VyCi1oYXMgYW55IGVmZmVjdCBpbiAzLjExLjAuIEZvciBub3cgcGF0Y2ggdGhpbmdzIHVwIGFuZCBtYWtlIGl0IHdvcmsuCi0KLVVwc3RyZWFtLVN0YXR1czogUGVuZGluZwotCi1TaWduZWQtb2ZmLWJ5OiBBbmRyZSBNY0N1cmR5IDxhcm1jY3VyZHlAZ21haWwuY29tPgotLS0tCi0gTWFrZWZpbGUuYW0gIHwgMTMgKysrKysrKysrKystLQotIGNvbmZpZ3VyZS5hYyB8ICAyICstCi0gMiBmaWxlcyBjaGFuZ2VkLCAxMiBpbnNlcnRpb25zKCspLCAzIGRlbGV0aW9ucygtKQotCi1kaWZmIC0tZ2l0IGEvTWFrZWZpbGUuYW0gYi9NYWtlZmlsZS5hbQotaW5kZXggMGUwOWNmYy4uNjA4YzBmZCAxMDA2NDQKLS0tLSBhL01ha2VmaWxlLmFtCi0rKysgYi9NYWtlZmlsZS5hbQotQEAgLTYsOSArNiwxOCBAQCBsaWJzcWxpdGUzX2xhX1NPVVJDRVMgPSBzcWxpdGUzLmMKLSBsaWJzcWxpdGUzX2xhX0xERkxBR1MgPSAtbm8tdW5kZWZpbmVkIC12ZXJzaW9uLWluZm8gODo2OjgKLSAKLSBiaW5fUFJPR1JBTVMgPSBzcWxpdGUzCi0tc3FsaXRlM19TT1VSQ0VTID0gc2hlbGwuYyBzcWxpdGUzLmMgc3FsaXRlMy5oCi0tc3FsaXRlM19MREFERCA9IEBSRUFETElORV9MSUJTQAotK3NxbGl0ZTNfU09VUkNFUyA9IHNoZWxsLmMgc3FsaXRlMy5oCi0rRVhUUkFfc3FsaXRlM19TT1VSQ0VTID0gc3FsaXRlMy5jCi0rc3FsaXRlM19MREFERCA9IEBFWFRSQV9TSEVMTF9PQkpAIEBSRUFETElORV9MSUJTQAotIHNxbGl0ZTNfREVQRU5ERU5DSUVTID0gQEVYVFJBX1NIRUxMX09CSkAKLSsKLSsjIFdhcm5pbmc6IEFkZGluZyBTUUxJVEVfRU5BQkxFX0VYUExBSU5fQ09NTUVOVFMgdG8gc3FsaXRlM19DRkxBR1MgZG9lc24ndAotKyMgYWN0dWFsbHkgaGF2ZSBhbnkgZWZmZWN0IGlmIHdlIGxpbmsgdGhlIHNxbGl0ZTMgY29tbWFuZCBsaW5lIHRvb2wgd2l0aCB0aGUKLSsjIGxpYnNxbGl0ZTMuc28gc2hhcmVkIGxpYnJhcnkgKHdoaWNoIHdpbGwgY29udGFpbiBhIHZlcnNpb24gb2Ygc3FsaXRlMy5jCi0rIyBjb21waWxlZCB3aXRoIHRoZSBkZWZhdWx0IEFNX0NGTEFHUyBhYm92ZSkuIElmIFNRTElURV9FTkFCTEVfRVhQTEFJTl9DT01NRU5UUwotKyMgZGVidWcgaXMgcmVxdWlyZWQsIHRoZW4gc3FsaXRlMyBtdXN0IG5vdCBiZSBjb25maWd1cmVkIHdpdGgKLSsjIC0tZGlzYWJsZS1zdGF0aWMtc2hlbGwKLSsKLSBzcWxpdGUzX0NGTEFHUyA9ICQoQU1fQ0ZMQUdTKSAtRFNRTElURV9FTkFCTEVfRVhQTEFJTl9DT01NRU5UUwotIAotIGluY2x1ZGVfSEVBREVSUyA9IHNxbGl0ZTMuaCBzcWxpdGUzZXh0LmgKLWRpZmYgLS1naXQgYS9jb25maWd1cmUuYWMgYi9jb25maWd1cmUuYWMKLWluZGV4IDhlN2ZkNjkuLmFkYTU1OWUgMTAwNjQ0Ci0tLS0gYS9jb25maWd1cmUuYWMKLSsrKyBiL2NvbmZpZ3VyZS5hYwotQEAgLTEzMCw3ICsxMzAsNyBAQCBBQ19BUkdfRU5BQkxFKHN0YXRpYy1zaGVsbCwgW0FTX0hFTFBfU1RSSU5HKAotICAgW3N0YXRpY2FsbHkgbGluayBsaWJzcWxpdGUzIGludG8gc2hlbGwgdG9vbCBbZGVmYXVsdD15ZXNdXSldLCAKLSAgIFtdLCBbZW5hYmxlX3N0YXRpY19zaGVsbD15ZXNdKQotIGlmIHRlc3QgeCIkZW5hYmxlX3N0YXRpY19zaGVsbCIgPT0gInh5ZXMiOyB0aGVuCi0tICBFWFRSQV9TSEVMTF9PQko9c3FsaXRlMy4kT0JKRVhUCi0rICBFWFRSQV9TSEVMTF9PQko9c3FsaXRlMy1zcWxpdGUzLiRPQkpFWFQKLSBlbHNlCi0gICBFWFRSQV9TSEVMTF9PQko9bGlic3FsaXRlMy5sYQotIGZpCi0tLSAKLTEuOS4xCi0KZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9zcWxpdGUvc3FsaXRlM18zLjExLjAuYmIgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvc3FsaXRlL3NxbGl0ZTNfMy4xMS4wLmJiCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5OTJkMjBjLi4wMDAwMDAwCi0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9zcWxpdGUvc3FsaXRlM18zLjExLjAuYmIKKysrIC9kZXYvbnVsbApAQCAtMSwxMSArMCwwIEBACi1yZXF1aXJlIHNxbGl0ZTMuaW5jCi0KLUxJQ0VOU0UgPSAiUEQiCi1MSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9zcWxpdGUzLmg7ZW5kbGluZT0xMTttZDU9NjVmMGE1N2NhNjkyODcxMGI0MThjMDk0YjM1NzBiYjAiCi0KLVNSQ19VUkkgPSAiaHR0cDovL3d3dy5zcWxpdGUub3JnLzIwMTYvc3FsaXRlLWF1dG9jb25mLSR7U1FMSVRFX1BWfS50YXIuZ3ogXAotICAgICAgICAgICBmaWxlOi8vZml4LWRpc2FibGUtc3RhdGljLXNoZWxsLnBhdGNoIFwKLSIKLQotU1JDX1VSSVttZDVzdW1dID0gImE2Y2RjM2UwYTZlNTA4N2Q2MjAwMzdhZTBjNDg3MjBkIgotU1JDX1VSSVtzaGEyNTZzdW1dID0gIjUwOGQ0ZGNiY2Y3YTcxODFlOTVjNzE3YTFkYzRhZTNjMDg4MGIzZDU5M2JlMGM0YjQwYWJiNmMzYTBlMjAxZmIiCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvc3FsaXRlL3NxbGl0ZTNfMy4xNC4xLmJiIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L3NxbGl0ZS9zcWxpdGUzXzMuMTQuMS5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43YzhmYTQwCi0tLSAvZGV2L251bGwKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L3NxbGl0ZS9zcWxpdGUzXzMuMTQuMS5iYgpAQCAtMCwwICsxLDEyIEBACityZXF1aXJlIHNxbGl0ZTMuaW5jCisKK0xJQ0VOU0UgPSAiUEQiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9zcWxpdGUzLmg7ZW5kbGluZT0xMTttZDU9NjVmMGE1N2NhNjkyODcxMGI0MThjMDk0YjM1NzBiYjAiCisKK1NSQ19VUkkgPSAiXAorICBodHRwOi8vd3d3LnNxbGl0ZS5vcmcvMjAxNi9zcWxpdGUtYXV0b2NvbmYtJHtTUUxJVEVfUFZ9LnRhci5neiBcCisgIGZpbGU6Ly8wMDAxLXJldmVydC1hZDYwMWM3OTYyLXRoYXQtYnJpbmdzLTItaW5jcmVhc2Utb2YtYnVpbGQtdGkucGF0Y2ggXAorICAiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICIzNjM0YTkwYTNmNDk1NDE0NjJiY2FlZDM0NzRiMjY4NCIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICJiYzcxODI0NzY5MDAwMTdiZWNiODE1NjVlY2VhNzc3NWQ0NmFiNzQ3YTk3MjgxYWE2MTBmNGY0NTg4MWM0N2E2IgpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L3VzZXItY3JlYXRpb24veHVzZXItYWNjb3VudF8wLjEuYmIgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvdXNlci1jcmVhdGlvbi94dXNlci1hY2NvdW50XzAuMS5iYgppbmRleCAxM2JhNjc3Li44MTgxN2QxIDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvdXNlci1jcmVhdGlvbi94dXNlci1hY2NvdW50XzAuMS5iYgorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvdXNlci1jcmVhdGlvbi94dXNlci1hY2NvdW50XzAuMS5iYgpAQCAtMjEsNyArMjEsNiBAQAogRklMRVNfJHtQTn0gPSAiJHtzeXNjb25mZGlyfS9kYnVzLTEvc3lzdGVtLmQvc3lzdGVtLXh1c2VyLmNvbmYiCiAKIFVTRVJBRERfUEFDS0FHRVMgPSAiJHtQTn0iCi1HUk9VUEFERF9QQVJBTV8ke1BOfSA9ICItLXN5c3RlbSBzaHV0ZG93biIKIFVTRVJBRERfUEFSQU1fJHtQTn0gPSAiLS1jcmVhdGUtaG9tZSBcCiAgICAgICAgICAgICAgICAgICAgICAgIC0tZ3JvdXBzIHZpZGVvLHR0eSxhdWRpbyxpbnB1dCxzaHV0ZG93bixkaXNrIFwKICAgICAgICAgICAgICAgICAgICAgICAgLS11c2VyLWdyb3VwIHh1c2VyIgpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L3Z0ZS92dGUtMC4yOC4yL2N2ZS0yMDEyLTI3MzgucGF0Y2ggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvdnRlL3Z0ZS0wLjI4LjIvY3ZlLTIwMTItMjczOC5wYXRjaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOWI5OTgwMy4uMDAwMDAwMAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvdnRlL3Z0ZS0wLjI4LjIvY3ZlLTIwMTItMjczOC5wYXRjaAorKysgL2Rldi9udWxsCkBAIC0xLDEzNiArMCwwIEBACi1VcHN0cmVhbS1TdGF0dXM6IEJhY2twb3J0Ci1DVkU6IENWRS0yMDEyLTI3MzgKLVNpZ25lZC1vZmYtYnk6IFJvc3MgQnVydG9uIDxyb3NzLmJ1cnRvbkBpbnRlbC5jb20+Ci0KLUZyb20gZTUyNGIwYjNiZDhmYWQ4NDRmZmE3MzkyN2MxOTk1NDViODkyY2RiZCBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKLUZyb206IENocmlzdGlhbiBQZXJzY2ggPGNocGVAZ25vbWUub3JnPgotRGF0ZTogU2F0LCAxOSBNYXkgMjAxMiAxOTozNjowOSArMDIwMAotU3ViamVjdDogW1BBVENIIDEvMl0gZW11bGF0aW9uOiBMaW1pdCBpbnRlZ2VyIGFyZ3VtZW50cyB0byA2NTUzNQotCi1UbyBndWFyZCBhZ2FpbnN0IG1hbGljaW91cyBzZXF1ZW5jZXMgY29udGFpbmluZyBleGNlc3NpdmVseSBiaWcgbnVtYmVycywKLWxpbWl0IGFsbCBwYXJzZWQgbnVtYmVycyB0byAxNiBiaXQgcmFuZ2UuIERvaW5nIHRoaXMgaGVyZSBpbiB0aGUgcGFyc2luZwotcm91dGluZSBpcyBhIGNhdGNoLWFsbCBndWFyZDsgdGhpcyBkb2Vzbid0IHByZWNsdWRlIGVuZm9yY2luZwotbW9yZSBzdHJpbmdlbnQgbGltaXRzIGluIHRoZSBoYW5kbGVycyB0aGVtc2VsdmVzLgotCi1odHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9Njc2MDkwCi0tLS0KLSBzcmMvdGFibGUuYyAgfCAyICstCi0gc3JjL3Z0ZXNlcS5jIHwgMiArLQotIDIgZmlsZXMgY2hhbmdlZCwgMiBpbnNlcnRpb25zKCspLCAyIGRlbGV0aW9ucygtKQotCi1kaWZmIC0tZ2l0IGEvc3JjL3RhYmxlLmMgYi9zcmMvdGFibGUuYwotaW5kZXggMTQwZThjOC4uODVjZjYzMSAxMDA2NDQKLS0tLSBhL3NyYy90YWJsZS5jCi0rKysgYi9zcmMvdGFibGUuYwotQEAgLTU1MCw3ICs1NTAsNyBAQCBfdnRlX3RhYmxlX2V4dHJhY3RfbnVtYmVycyhHVmFsdWVBcnJheSAqKmFycmF5LAotIAkJaWYgKEdfVU5MSUtFTFkgKCphcnJheSA9PSBOVUxMKSkgewotIAkJCSphcnJheSA9IGdfdmFsdWVfYXJyYXlfbmV3KDEpOwotIAkJfQotLQkJZ192YWx1ZV9zZXRfbG9uZygmdmFsdWUsIHRvdGFsKTsKLSsJCWdfdmFsdWVfc2V0X2xvbmcoJnZhbHVlLCBDTEFNUCAodG90YWwsIDAsIEdfTUFYVVNIT1JUKSk7Ci0gCQlnX3ZhbHVlX2FycmF5X2FwcGVuZCgqYXJyYXksICZ2YWx1ZSk7Ci0gCX0gd2hpbGUgKGkrKyA8IGFyZ2luZm8tPmxlbmd0aCk7Ci0gCWdfdmFsdWVfdW5zZXQoJnZhbHVlKTsKLWRpZmYgLS1naXQgYS9zcmMvdnRlc2VxLmMgYi9zcmMvdnRlc2VxLmMKLWluZGV4IDdlZjRjOGMuLjEwOTkxZGIgMTAwNjQ0Ci0tLS0gYS9zcmMvdnRlc2VxLmMKLSsrKyBiL3NyYy92dGVzZXEuYwotQEAgLTU1Nyw3ICs1NTcsNyBAQCB2dGVfc2VxdWVuY2VfaGFuZGxlcl9tdWx0aXBsZShWdGVUZXJtaW5hbCAqdGVybWluYWwsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR1ZhbHVlQXJyYXkgKnBhcmFtcywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBWdGVUZXJtaW5hbFNlcXVlbmNlSGFuZGxlciBoYW5kbGVyKQotIHsKLS0gICAgICAgIHZ0ZV9zZXF1ZW5jZV9oYW5kbGVyX211bHRpcGxlX2xpbWl0ZWQodGVybWluYWwsIHBhcmFtcywgaGFuZGxlciwgR19NQVhMT05HKTsKLSsgICAgICAgIHZ0ZV9zZXF1ZW5jZV9oYW5kbGVyX211bHRpcGxlX2xpbWl0ZWQodGVybWluYWwsIHBhcmFtcywgaGFuZGxlciwgR19NQVhVU0hPUlQpOwotIH0KLSAKLSBzdGF0aWMgdm9pZAotLS0gCi0yLjQuOSAoQXBwbGUgR2l0LTYwKQotCi0KLUZyb20gY2YxYWQ0NTNhOGRlZjg3M2M0OWNmNmQ4ODE2MjU5MzQwMmYzMmJiMiBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKLUZyb206IENocmlzdGlhbiBQZXJzY2ggPGNocGVAZ25vbWUub3JnPgotRGF0ZTogU2F0LCAxOSBNYXkgMjAxMiAyMDowNDoxMiArMDIwMAotU3ViamVjdDogW1BBVENIIDIvMl0gZW11bGF0aW9uOiBMaW1pdCByZXBldGl0aW9ucwotCi1Eb24ndCBhbGxvdyBtYWxpY2lvdXMgc2VxdWVuY2VzIHRvIGNhdXNlIGV4Y2Vzc2l2ZSByZXBldGl0aW9ucy4KLQotaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTY3NjA5MAotLS0tCi0gc3JjL3Z0ZXNlcS5jIHwgMjUgKysrKysrKysrKysrKysrKysrLS0tLS0tLQotIDEgZmlsZSBjaGFuZ2VkLCAxOCBpbnNlcnRpb25zKCspLCA3IGRlbGV0aW9ucygtKQotCi1kaWZmIC0tZ2l0IGEvc3JjL3Z0ZXNlcS5jIGIvc3JjL3Z0ZXNlcS5jCi1pbmRleCAxMDk5MWRiLi4yMDk1MjJmIDEwMDY0NAotLS0tIGEvc3JjL3Z0ZXNlcS5jCi0rKysgYi9zcmMvdnRlc2VxLmMKLUBAIC0xMzkyLDcgKzEzOTIsNyBAQCB2dGVfc2VxdWVuY2VfaGFuZGxlcl9kYyAoVnRlVGVybWluYWwgKnRlcm1pbmFsLCBHVmFsdWVBcnJheSAqcGFyYW1zKQotIHN0YXRpYyB2b2lkCi0gdnRlX3NlcXVlbmNlX2hhbmRsZXJfREMgKFZ0ZVRlcm1pbmFsICp0ZXJtaW5hbCwgR1ZhbHVlQXJyYXkgKnBhcmFtcykKLSB7Ci0tCXZ0ZV9zZXF1ZW5jZV9oYW5kbGVyX211bHRpcGxlKHRlcm1pbmFsLCBwYXJhbXMsIHZ0ZV9zZXF1ZW5jZV9oYW5kbGVyX2RjKTsKLSsJdnRlX3NlcXVlbmNlX2hhbmRsZXJfbXVsdGlwbGVfcih0ZXJtaW5hbCwgcGFyYW1zLCB2dGVfc2VxdWVuY2VfaGFuZGxlcl9kYyk7Ci0gfQotIAotIC8qIERlbGV0ZSBhIGxpbmUgYXQgdGhlIGN1cnJlbnQgY3Vyc29yIHBvc2l0aW9uLiAqLwotQEAgLTE3ODUsNyArMTc4NSw3IEBAIHZ0ZV9zZXF1ZW5jZV9oYW5kbGVyX3JldmVyc2VfaW5kZXggKFZ0ZVRlcm1pbmFsICp0ZXJtaW5hbCwgR1ZhbHVlQXJyYXkgKnBhcmFtcykKLSBzdGF0aWMgdm9pZAotIHZ0ZV9zZXF1ZW5jZV9oYW5kbGVyX1JJIChWdGVUZXJtaW5hbCAqdGVybWluYWwsIEdWYWx1ZUFycmF5ICpwYXJhbXMpCi0gewotLQl2dGVfc2VxdWVuY2VfaGFuZGxlcl9tdWx0aXBsZSh0ZXJtaW5hbCwgcGFyYW1zLCB2dGVfc2VxdWVuY2VfaGFuZGxlcl9uZCk7Ci0rCXZ0ZV9zZXF1ZW5jZV9oYW5kbGVyX211bHRpcGxlX3IodGVybWluYWwsIHBhcmFtcywgdnRlX3NlcXVlbmNlX2hhbmRsZXJfbmQpOwotIH0KLSAKLSAvKiBTYXZlIGN1cnNvciAocG9zaXRpb24pLiAqLwotQEAgLTI3NzcsOCArMjc3Nyw3IEBAIHZ0ZV9zZXF1ZW5jZV9oYW5kbGVyX2luc2VydF9saW5lcyAoVnRlVGVybWluYWwgKnRlcm1pbmFsLCBHVmFsdWVBcnJheSAqcGFyYW1zKQotIHsKLSAJR1ZhbHVlICp2YWx1ZTsKLSAJVnRlU2NyZWVuICpzY3JlZW47Ci0tCWxvbmcgcGFyYW0sIGVuZCwgcm93OwotLQlpbnQgaTsKLSsJbG9uZyBwYXJhbSwgZW5kLCByb3csIGksIGxpbWl0OwotIAlzY3JlZW4gPSB0ZXJtaW5hbC0+cHZ0LT5zY3JlZW47Ci0gCS8qIFRoZSBkZWZhdWx0IGlzIG9uZS4gKi8KLSAJcGFyYW0gPSAxOwotQEAgLTI3OTYsNyArMjc5NSwxMyBAQCB2dGVfc2VxdWVuY2VfaGFuZGxlcl9pbnNlcnRfbGluZXMgKFZ0ZVRlcm1pbmFsICp0ZXJtaW5hbCwgR1ZhbHVlQXJyYXkgKnBhcmFtcykKLSAJfSBlbHNlIHsKLSAJCWVuZCA9IHNjcmVlbi0+aW5zZXJ0X2RlbHRhICsgdGVybWluYWwtPnJvd19jb3VudCAtIDE7Ci0gCX0KLS0JLyogSW5zZXJ0IHRoZSBuZXcgbGluZXMgYXQgdGhlIGN1cnNvci4gKi8KLSsKLSsJLyogT25seSBhbGxvdyB0byBpbnNlcnQgYXMgbWFueSBsaW5lcyBhcyB0aGVyZSBhcmUgYmV0d2VlbiB0aGlzIHJvdwotKyAgICAgICAgICogYW5kIHRoZSBlbmQgb2YgdGhlIHNjcm9sbGluZyByZWdpb24uIFNlZSBidWcgIzY3NjA5MC4KLSsgICAgICAgICAqLwotKyAgICAgICAgbGltaXQgPSBlbmQgLSByb3cgKyAxOwotKyAgICAgICAgcGFyYW0gPSBNSU4gKHBhcmFtLCBsaW1pdCk7Ci0rCi0gCWZvciAoaSA9IDA7IGkgPCBwYXJhbTsgaSsrKSB7Ci0gCQkvKiBDbGVhciBhIGxpbmUgb2ZmIHRoZSBlbmQgb2YgdGhlIHJlZ2lvbiBhbmQgYWRkIG9uZSB0byB0aGUKLSAJCSAqIHRvcCBvZiB0aGUgcmVnaW9uLiAqLwotQEAgLTI4MTcsOCArMjgyMiw3IEBAIHZ0ZV9zZXF1ZW5jZV9oYW5kbGVyX2RlbGV0ZV9saW5lcyAoVnRlVGVybWluYWwgKnRlcm1pbmFsLCBHVmFsdWVBcnJheSAqcGFyYW1zKQotIHsKLSAJR1ZhbHVlICp2YWx1ZTsKLSAJVnRlU2NyZWVuICpzY3JlZW47Ci0tCWxvbmcgcGFyYW0sIGVuZCwgcm93OwotLQlpbnQgaTsKLSsJbG9uZyBwYXJhbSwgZW5kLCByb3csIGksIGxpbWl0OwotIAotIAlzY3JlZW4gPSB0ZXJtaW5hbC0+cHZ0LT5zY3JlZW47Ci0gCS8qIFRoZSBkZWZhdWx0IGlzIG9uZS4gKi8KLUBAIC0yODM3LDYgKzI4NDEsMTMgQEAgdnRlX3NlcXVlbmNlX2hhbmRsZXJfZGVsZXRlX2xpbmVzIChWdGVUZXJtaW5hbCAqdGVybWluYWwsIEdWYWx1ZUFycmF5ICpwYXJhbXMpCi0gCX0gZWxzZSB7Ci0gCQllbmQgPSBzY3JlZW4tPmluc2VydF9kZWx0YSArIHRlcm1pbmFsLT5yb3dfY291bnQgLSAxOwotIAl9Ci0rCi0rICAgICAgICAvKiBPbmx5IGFsbG93IHRvIGRlbGV0ZSBhcyBtYW55IGxpbmVzIGFzIHRoZXJlIGFyZSBiZXR3ZWVuIHRoaXMgcm93Ci0rICAgICAgICAgKiBhbmQgdGhlIGVuZCBvZiB0aGUgc2Nyb2xsaW5nIHJlZ2lvbi4gU2VlIGJ1ZyAjNjc2MDkwLgotKyAgICAgICAgICovCi0rICAgICAgICBsaW1pdCA9IGVuZCAtIHJvdyArIDE7Ci0rICAgICAgICBwYXJhbSA9IE1JTiAocGFyYW0sIGxpbWl0KTsKLSsKLSAJLyogQ2xlYXIgdGhlbSBmcm9tIGJlbG93IHRoZSBjdXJyZW50IGN1cnNvci4gKi8KLSAJZm9yIChpID0gMDsgaSA8IHBhcmFtOyBpKyspIHsKLSAJCS8qIEluc2VydCBhIGxpbmUgYXQgdGhlIGVuZCBvZiB0aGUgcmVnaW9uIGFuZCByZW1vdmUgb25lIGZyb20KLS0tIAotMi40LjkgKEFwcGxlIEdpdC02MCkKLQpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L3Z0ZS92dGUtMC4yOC4yL29ic29sZXRlX2F1dG9tYWtlX21hY3Jvcy5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC92dGUvdnRlLTAuMjguMi9vYnNvbGV0ZV9hdXRvbWFrZV9tYWNyb3MucGF0Y2gKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDY3NjNkMzcuLjAwMDAwMDAKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L3Z0ZS92dGUtMC4yOC4yL29ic29sZXRlX2F1dG9tYWtlX21hY3Jvcy5wYXRjaAorKysgL2Rldi9udWxsCkBAIC0xLDE0ICswLDAgQEAKLVVwc3RyZWFtLVN0YXR1czogU3VibWl0dGVkIFtodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjkxNTQ1XQotCi1TaWduZWQtb2ZmLWJ5OiBNYXJrbyBMaW5kcXZpc3QgPGNhemZpNzRAZ21haWwuY29tPgotZGlmZiAtTnVyZCB2dGUtMC4yOC4yL2dub21lLXB0eS1oZWxwZXIvY29uZmlndXJlLmluIHZ0ZS0wLjI4LjIvZ25vbWUtcHR5LWhlbHBlci9jb25maWd1cmUuaW4KLS0tLSB2dGUtMC4yOC4yL2dub21lLXB0eS1oZWxwZXIvY29uZmlndXJlLmluCTIwMTAtMDctMTUgMjA6MDg6NDQuMDAwMDAwMDAwICswMzAwCi0rKysgdnRlLTAuMjguMi9nbm9tZS1wdHktaGVscGVyL2NvbmZpZ3VyZS5pbgkyMDEzLTAxLTExIDE0OjUwOjM0Ljk3MTAyNzQ0MCArMDIwMAotQEAgLTgsNyArOCw2IEBACi0gQUNfSVNDX1BPU0lYCi0gQUNfUFJPR19DQwotIEFDX1NURENfSEVBREVSUwotLUFNX1BST0dfQ0NfU1REQwotCi0gaWYgdGVzdCAteiAiJGVuYWJsZV9tYWludGFpbmVyX21vZGUiOyB0aGVuCi0gICBlbmFibGVfbWFpbnRhaW5lcl9tb2RlPXllcwpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L3Z0ZS92dGUuaW5jIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L3Z0ZS92dGUuaW5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4NTY1Y2MyLi4wMDAwMDAwCi0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC92dGUvdnRlLmluYworKysgL2Rldi9udWxsCkBAIC0xLDE1ICswLDAgQEAKLVNVTU1BUlkgPSAiVmlydHVhbCB0ZXJtaW5hbCBlbXVsYXRvciBHVEsrIHdpZGdldCBsaWJyYXJ5IgotQlVHVFJBQ0tFUiA9ICJodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9idWdsaXN0LmNnaT9wcm9kdWN0PXZ0ZSIKLUxJQ0VOU0UgPSAiTEdQTHYyLjAiCi1ERVBFTkRTID0gIiBnbGliLTIuMCBndGsrIGludGx0b29sLW5hdGl2ZSBuY3Vyc2VzIgotUkRFUEVORFNfbGlidnRlID0gInZ0ZS10ZXJtY2FwIgotCi1pbmhlcml0IGdub21lIGd0ay1kb2MgZGlzdHJvX2ZlYXR1cmVzX2NoZWNrIHVwc3RyZWFtLXZlcnNpb24taXMtZXZlbiBnb2JqZWN0LWludHJvc3BlY3Rpb24KLUFOWV9PRl9ESVNUUk9fRkVBVFVSRVMgPSAiJHtHVEsyRElTVFJPRkVBVFVSRVN9IgotCi1FWFRSQV9PRUNPTkYgPSAiLS1kaXNhYmxlLXB5dGhvbiIKLQotUEFDS0FHRVMgPSsgImxpYnZ0ZSB2dGUtdGVybWNhcCIKLUZJTEVTX2xpYnZ0ZSA9ICIke2xpYmRpcn0vKi5zby4qICR7bGliZXhlY2Rpcn0vZ25vbWUtcHR5LWhlbHBlciIKLUZJTEVTX3Z0ZS10ZXJtY2FwID0gIiR7ZGF0YWRpcn0vdnRlL3Rlcm1jYXAtMC4wIgotCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvdnRlL3Z0ZS8wMDAxLUFkZC1tNC12YXBpZ2VuLm00LnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L3Z0ZS92dGUvMDAwMS1BZGQtbTQtdmFwaWdlbi5tNC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xYzU2MzBlCi0tLSAvZGV2L251bGwKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L3Z0ZS92dGUvMDAwMS1BZGQtbTQtdmFwaWdlbi5tNC5wYXRjaApAQCAtMCwwICsxLDExOSBAQAorRnJvbSAwOGNhMWM0OGIyNWMzMzJiNzViYmEyYTZiNWQ3NTdkYTAwNmU5NTViIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogSnVzc2kgS3Vra29uZW4gPGp1c3NpLmt1a2tvbmVuQGludGVsLmNvbT4KK0RhdGU6IEZyaSwgNyBPY3QgMjAxNiAxNjoyNzo1NyArMDMwMAorU3ViamVjdDogW1BBVENIXSBBZGQgbTQvdmFwaWdlbi5tNAorCitCdWlsZGluZyB3aXRob3V0IHZhbGEgd2lsbCBmYWlsIGlmIHdlIGRvbid0IGhhdmUgYSB2YXBpZ2VuLm00LgorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKK1NpZ25lZC1vZmYtYnk6IEp1c3NpIEt1a2tvbmVuIDxqdXNzaS5rdWtrb25lbkBpbnRlbC5jb20+CistLS0KKyBtNC92YXBpZ2VuLm00IHwgOTYgKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysKKyAxIGZpbGUgY2hhbmdlZCwgOTYgaW5zZXJ0aW9ucygrKQorIGNyZWF0ZSBtb2RlIDEwMDY0NCBtNC92YXBpZ2VuLm00CisKK2RpZmYgLS1naXQgYS9tNC92YXBpZ2VuLm00IGIvbTQvdmFwaWdlbi5tNAorbmV3IGZpbGUgbW9kZSAxMDA2NDQKK2luZGV4IDAwMDAwMDAuLmYyZGYxMmYKKy0tLSAvZGV2L251bGwKKysrKyBiL200L3ZhcGlnZW4ubTQKK0BAIC0wLDAgKzEsOTYgQEAKKytkbmwgdmFwaWdlbi5tNAorK2RubAorK2RubCBDb3B5cmlnaHQgMjAxMiBFdmFuIE5lbWVyc29uCisrZG5sCisrZG5sIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKytkbmwgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworK2RubCBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKytkbmwgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisrZG5sCisrZG5sIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorK2RubCBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorK2RubCBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorK2RubCBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorK2RubAorK2RubCBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisrZG5sIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKytkbmwgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxICBVU0EKKysKKysjIFZBUElHRU5fQ0hFQ0soW1ZFUlNJT05dLCBbQVBJX1ZFUlNJT05dLCBbRk9VTkQtSU5UUk9TUEVDVElPTl0sIFtERUZBVUxUXSkKKysjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisrIyBDaGVjayB2YXBpZ2VuIGV4aXN0ZW5jZSBhbmQgdmVyc2lvbgorKyMKKysjIFNlZSBodHRwOi8vbGl2ZS5nbm9tZS5vcmcvVmFsYS9VcHN0cmVhbUd1aWRlIGZvciBkZXRhaWxlZCBkb2N1bWVudGF0aW9uCisrQUNfREVGVU4oW1ZBUElHRU5fQ0hFQ0tdLAorK1sKKysgIEFDX0JFRk9SRShbR09CSkVDVF9JTlRST1NQRUNUSU9OX0NIRUNLXSxbJDBdKQorKyAgQUNfQkVGT1JFKFtHT0JKRUNUX0lOVFJPU1BFQ1RJT05fUkVRVUlSRV0sWyQwXSkKKysKKysgIEFDX0FSR19FTkFCTEUoW3ZhbGFdLAorKyAgICBbQVNfSEVMUF9TVFJJTkcoWy0tZW5hYmxlLXZhbGFbPUA8OkBuby9hdXRvL3llc0A6PkBdXSxbYnVpbGQgVmFsYSBiaW5kaW5ncyBAPDpAZGVmYXVsdD1daWZlbHNlKCQ0LCxhdXRvLCQ0KVtAOj5AXSldLCxbCisrICAgICAgQVNfSUYoW3Rlc3QgIngkNCIgPSAieCJdLCBbCisrICAgICAgICAgIGVuYWJsZV92YWxhPWF1dG8KKysgICAgICAgIF0sIFsKKysgICAgICAgICAgZW5hYmxlX3ZhbGE9JDQKKysgICAgICAgIF0pCisrICAgIF0pCisrCisrICBBU19DQVNFKFskZW5hYmxlX3ZhbGFdLCBbbm9dLCBbZW5hYmxlX3ZhbGE9bm9dLAorKyAgICAgIFt5ZXNdLCBbCisrICAgICAgICBBU19JRihbdGVzdCAieCQzIiAhPSAieHllcyIgLWEgIngkZm91bmRfaW50cm9zcGVjdGlvbiIgIT0gInh5ZXMiXSwgWworKyAgICAgICAgICAgIEFDX01TR19FUlJPUihbVmFsYSBiaW5kaW5ncyByZXF1aXJlIEdPYmplY3QgSW50cm9zcGVjdGlvbl0pCisrICAgICAgICAgIF0pCisrICAgICAgXSwgW2F1dG9dLCBbCisrICAgICAgICBBU19JRihbdGVzdCAieCQzIiAhPSAieHllcyIgLWEgIngkZm91bmRfaW50cm9zcGVjdGlvbiIgIT0gInh5ZXMiXSwgWworKyAgICAgICAgICAgIGVuYWJsZV92YWxhPW5vCisrICAgICAgICAgIF0pCisrICAgICAgXSwgWworKyAgICAgICAgQUNfTVNHX0VSUk9SKFtJbnZhbGlkIGFyZ3VtZW50IHBhc3NlZCB0byAtLWVuYWJsZS12YWxhLCBzaG91bGQgYmUgb25lIG9mIEA8OkBuby9hdXRvL3llc0A6PkBdKQorKyAgICAgIF0pCisrCisrICBBU19JRihbdGVzdCAieCQyIiA9ICJ4Il0sIFsKKysgICAgICB2YXBpZ2VuX3BrZ19uYW1lPXZhcGlnZW4KKysgICAgXSwgWworKyAgICAgIHZhcGlnZW5fcGtnX25hbWU9dmFwaWdlbi0kMgorKyAgICBdKQorKyAgQVNfSUYoW3Rlc3QgIngkMSIgPSAieCJdLCBbCisrICAgICAgdmFwaWdlbl9wa2c9IiR2YXBpZ2VuX3BrZ19uYW1lIgorKyAgICBdLCBbCisrICAgICAgdmFwaWdlbl9wa2c9IiR2YXBpZ2VuX3BrZ19uYW1lID49ICQxIgorKyAgICBdKQorKworKyAgUEtHX1BST0dfUEtHX0NPTkZJRworKworKyAgUEtHX0NIRUNLX0VYSVNUUyhbJHZhcGlnZW5fcGtnXSwgWworKyAgICAgIEFTX0lGKFt0ZXN0ICIkZW5hYmxlX3ZhbGEiID0gImF1dG8iXSwgWworKyAgICAgICAgICBlbmFibGVfdmFsYT15ZXMKKysgICAgICAgIF0pCisrICAgIF0sIFsKKysgICAgICBBU19DQVNFKFskZW5hYmxlX3ZhbGFdLCBbeWVzXSwgWworKyAgICAgICAgICBBQ19NU0dfRVJST1IoWyR2YXBpZ2VuX3BrZyBub3QgZm91bmRdKQorKyAgICAgICAgXSwgW2F1dG9dLCBbCisrICAgICAgICAgIGVuYWJsZV92YWxhPW5vCisrICAgICAgICBdKQorKyAgICBdKQorKworKyAgQUNfTVNHX0NIRUNLSU5HKFtmb3IgdmFsYV0pCisrCisrICBBU19DQVNFKFskZW5hYmxlX3ZhbGFdLAorKyAgICBbeWVzXSwgWworKyAgICAgIFZBUElHRU49YCRQS0dfQ09ORklHIC0tdmFyaWFibGU9dmFwaWdlbiB2YXBpZ2VuYAorKyAgICAgIFZBUElHRU5fTUFLRUZJTEU9YCRQS0dfQ09ORklHIC0tdmFyaWFibGU9ZGF0YWRpciB2YXBpZ2VuYC92YWxhL01ha2VmaWxlLnZhcGlnZW4KKysgICAgICBBU19JRihbdGVzdCAieCQyIiA9ICJ4Il0sIFsKKysgICAgICAgICAgVkFQSUdFTl9WQVBJRElSPWAkUEtHX0NPTkZJRyAtLXZhcmlhYmxlPXZhcGlkaXIgdmFwaWdlbmAKKysgICAgICAgIF0sIFsKKysgICAgICAgICAgVkFQSUdFTl9WQVBJRElSPWAkUEtHX0NPTkZJRyAtLXZhcmlhYmxlPXZhcGlkaXJfdmVyc2lvbmVkIHZhcGlnZW5gCisrICAgICAgICBdKQorKyAgICBdKQorKworKyAgQUNfTVNHX1JFU1VMVChbJGVuYWJsZV92YWxhXSkKKysKKysgIEFDX1NVQlNUKFtWQVBJR0VOXSkKKysgIEFDX1NVQlNUKFtWQVBJR0VOX1ZBUElESVJdKQorKyAgQUNfU1VCU1QoW1ZBUElHRU5fTUFLRUZJTEVdKQorKworKyAgQU1fQ09ORElUSU9OQUwoRU5BQkxFX1ZBUElHRU4sIHRlc3QgIngkZW5hYmxlX3ZhbGEiID0gInh5ZXMiKQorK10pCistLSAKKzIuMS40CisKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC92dGUvdnRlLzAwMDEtRG9uLXQtZW5hYmxlLXN0YWNrLXByb3RlY3Rpb24tYnktZGVmYXVsdC5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC92dGUvdnRlLzAwMDEtRG9uLXQtZW5hYmxlLXN0YWNrLXByb3RlY3Rpb24tYnktZGVmYXVsdC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mY2ZjNTU5Ci0tLSAvZGV2L251bGwKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L3Z0ZS92dGUvMDAwMS1Eb24tdC1lbmFibGUtc3RhY2stcHJvdGVjdGlvbi1ieS1kZWZhdWx0LnBhdGNoCkBAIC0wLDAgKzEsMjkgQEAKK0Zyb20gYjBhNTc5ZDgzZTM1NTU0NWI2NDc0MmM5OTdmZThiMWQ1OGJmNDIwNyBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEp1c3NpIEt1a2tvbmVuIDxqdXNzaS5rdWtrb25lbkBpbnRlbC5jb20+CitEYXRlOiBNb24sIDEzIEp1biAyMDE2IDExOjA1OjAwICswMzAwCitTdWJqZWN0OiBbUEFUQ0hdIERvbid0IGVuYWJsZSBzdGFjay1wcm90ZWN0aW9uIGJ5IGRlZmF1bHQKKworVGhlc2UgYXJlIHNldCBieSBzZWN1cml0eV9mbGFncy5pbmMuCisKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbY29uZmlndXJhdGlvbl0KK1NpZ25lZC1vZmYtYnk6IEp1c3NpIEt1a2tvbmVuIDxqdXNzaS5rdWtrb25lbkBpbnRlbC5jb20+CistLS0KKyBjb25maWd1cmUuYWMgfCAyIC0tCisgMSBmaWxlIGNoYW5nZWQsIDIgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9jb25maWd1cmUuYWMgYi9jb25maWd1cmUuYWMKK2luZGV4IDA2OGQwNzIuLmQ1ODBmODQgMTAwNjQ0CistLS0gYS9jb25maWd1cmUuYWMKKysrKyBiL2NvbmZpZ3VyZS5hYworQEAgLTEzOCw4ICsxMzgsNiBAQCBtNF9kZWZpbmUoW2NvbXBpbGVyX2ZsYWdzX2NvbW1vbl0sWyBkbmwKKyAgIC1mbm8tY29tbW9uIGRubAorICAgLWZkaWFnbm9zdGljcy1zaG93LW9wdGlvbiBkbmwKKyAgIC1mbm8tc3RyaWN0LWFsaWFzaW5nIGRubAorLSAgLWZzdGFjay1wcm90ZWN0b3IgZG5sCistICAtZnN0YWNrLXByb3RlY3Rvci1zdHJvbmcgZG5sCisgICAtZm5vLXNlbWFudGljLWludGVycG9zaXRpb24gZG5sCisgICAtV25vLWRlcHJlY2F0ZWQtZGVjbGFyYXRpb25zIGRubAorIF0pCistLSAKKzIuMS40CisKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC92dGUvdnRlXzAuMjguMi5iYiBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC92dGUvdnRlXzAuMjguMi5iYgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzQwODdjYS4uMDAwMDAwMAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvdnRlL3Z0ZV8wLjI4LjIuYmIKKysrIC9kZXYvbnVsbApAQCAtMSwxNiArMCwwIEBACi1yZXF1aXJlIHZ0ZS5pbmMKLQotTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9M2JmNTAwMDJhZWZkMDAyZjQ5ZTdiYjg1NDA2M2Y3ZTciCi0KLVBSID0gInI2IgotCi1TUkNfVVJJICs9ICJmaWxlOi8vb2Jzb2xldGVfYXV0b21ha2VfbWFjcm9zLnBhdGNoIFwKLSAgICAgICAgICAgIGZpbGU6Ly9jdmUtMjAxMi0yNzM4LnBhdGNoIFwKLSAgICAgICAgICAgIgotCi1DRkxBR1MgKz0gIi1EX0dOVV9TT1VSQ0UiCi0KLVNSQ19VUklbYXJjaGl2ZS5tZDVzdW1dID0gIjQ5N2YyNmU0NTczMDg2NDllNmVjZTMyYjNiYjE0MmZmIgotU1JDX1VSSVthcmNoaXZlLnNoYTI1NnN1bV0gPSAiODZjZjBiODFhYTAyM2ZhOTNlZDQxNTY1M2Q1MWM5Njc2N2YyMGIyZDczMzRjODkzY2FiYTcxZTQyNjU0YjBhZSIKLQotUkVDSVBFX05PX1VQREFURV9SRUFTT04gPSAibWF0Y2hib3gtdGVybWluYWwgbmVlZHMgdG8gYmUgcG9ydGVkIG92ZXIgdG8gbmV3IHZ0ZSBmaXJzdCIKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC92dGUvdnRlXzAuNDQuMi5iYiBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC92dGUvdnRlXzAuNDQuMi5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMGI2NzFlCi0tLSAvZGV2L251bGwKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L3Z0ZS92dGVfMC40NC4yLmJiCkBAIC0wLDAgKzEsNDMgQEAKK1NVTU1BUlkgPSAiVmlydHVhbCB0ZXJtaW5hbCBlbXVsYXRvciBHVEsrIHdpZGdldCBsaWJyYXJ5IgorQlVHVFJBQ0tFUiA9ICJodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9idWdsaXN0LmNnaT9wcm9kdWN0PXZ0ZSIKK0xJQ0VOU0UgPSAiTEdQTHYyLjErIgorREVQRU5EUyA9ICJnbGliLTIuMCBndGsrMyBpbnRsdG9vbC1uYXRpdmUiCisKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PTRmYmQ2NTM4MGNkZDI1NTk1MTA3OTAwOGIzNjQ1MTZjIgorCitpbmhlcml0IGdub21lYmFzZSBndGstZG9jIGRpc3Ryb19mZWF0dXJlc19jaGVjayB1cHN0cmVhbS12ZXJzaW9uLWlzLWV2ZW4gZ29iamVjdC1pbnRyb3NwZWN0aW9uCisKKyMgdmFwaWdlbi5tNCBpcyByZXF1aXJlZCB3aGVuIHZhbGEgaXMgbm90IHByZXNlbnQgKGJ1dCB0aGUgb25lIGZyb20gdmFsYSBzaG91bGQgYmUgdXNlZCBub3JtYWxseSkKK1NSQ19VUkkgKz0gImZpbGU6Ly8wMDAxLURvbi10LWVuYWJsZS1zdGFjay1wcm90ZWN0aW9uLWJ5LWRlZmF1bHQucGF0Y2ggXAorICAgICAgICAgICAgJHtAYmIudXRpbHMuY29udGFpbnMoJ1BBQ0tBR0VDT05GSUcnLCAndmFsYScsICcnLCAnZmlsZTovLzAwMDEtQWRkLW00LXZhcGlnZW4ubTQucGF0Y2gnLCBkKSB9IFwKKyAgICAgICAgICAgICIKK1NSQ19VUklbYXJjaGl2ZS5tZDVzdW1dID0gImVjYThmOGE5ZDlmOWJiOGU5ZDU5MmQwYWNmZWVjMDE1IgorU1JDX1VSSVthcmNoaXZlLnNoYTI1NnN1bV0gPSAiYTFlYTU5NDgxNGJiMTM2YTNhOWE2Yzc2NTZiNDYyNDA1NzFmNmExOTg4MjVjMTExMTAwN2ZlOTkxOTRiMDk0OSIKKworQU5ZX09GX0RJU1RST19GRUFUVVJFUyA9ICIke0dUSzNESVNUUk9GRUFUVVJFU30iCisKKyMgSW5zdGVhZCBvZiAiaW5oZXJpdCB2YWxhIiB3ZSBkbyB0aGUgcmVsZXZhbnQgc2V0dGluZ3MgaGVyZSBzbyB3ZSBjYW4KKyMgc2V0IERFUEVORFMgYmFzZWQgb24gUEFDS0FHRUNPTkZJRy4KKworIyBPdXIgcGF0Y2hlZCB2ZXJzaW9uIG9mIFZhbGEgbG9va3MgaW4gU1RBR0lOR19EQVRBRElSIGZvciAudmFwaSBmaWxlcworZXhwb3J0IFNUQUdJTkdfREFUQURJUgorIyBVcHN0cmVhbSBWYWxhID49IDAuMTEgbG9va3MgaW4gWERHX0RBVEFfRElSUyBmb3IgLnZhcGkgZmlsZXMKK2V4cG9ydCBYREdfREFUQV9ESVJTID0gIiR7U1RBR0lOR19EQVRBRElSfSIKKworIyBQYWNrYWdlIGFkZGl0aW9uYWwgZmlsZXMKK0ZJTEVTXyR7UE59LWRldiArPSAiJHtkYXRhZGlyfS92YWxhL3ZhcGkvKiIKKworUEFDS0FHRUNPTkZJRyA/Pz0gIiIKK1BBQ0tBR0VDT05GSUdbdmFsYV0gPSAiLS1lbmFibGUtdmFsYSwtLWRpc2FibGUtdmFsYSx2YWxhLW5hdGl2ZSB2YWxhIgorUEFDS0FHRUNPTkZJR1tnbnV0bHNdID0gIi0td2l0aC1nbnV0bHMsLS13aXRob3V0LWdudXRscyxnbnV0bHMiCisKK0NGTEFHUyArPSAiLURfR05VX1NPVVJDRSIKKworRVhUUkFfT0VDT05GID0gIi0tZGlzYWJsZS10ZXN0LWFwcGxpY2F0aW9uIgorCisjIGxpYnRvb2wgYWRkcyAiLW5vc3RkbGliIiB3aGVuIGcrKyBpcyB1c2VkLiBUaGlzIGJyZWFrcyBQSUUgYnVpbGRzLgorIyBVc2UgbGlidG9vbC1jcm9zcyAod2hpY2ggaGFzIGEgaGFjayB0byBwcmV2ZW50IHRoYXQpIGluc3RlYWQuCitFWFRSQV9PRU1BS0VfY2xhc3MtdGFyZ2V0ID0gIkxJQlRPT0w9JHtTVEFHSU5HX0JJTkRJUl9DUk9TU30vJHtIT1NUX1NZU30tbGlidG9vbCIKKworUEFDS0FHRVMgPSsgImxpYnZ0ZSIKK0ZJTEVTX2xpYnZ0ZSA9ICIke2xpYmRpcn0vKi5zby4qICR7bGliZGlyfS9naXJlcG9zaXRvcnktMS4wLyoiCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9zaXRlL2FybS1jb21tb24gYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9zaXRlL2FybS1jb21tb24KaW5kZXggYTNjOTc5Zi4uMTk4Yzk4YyAxMDA2NDQKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvc2l0ZS9hcm0tY29tbW9uCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3NpdGUvYXJtLWNvbW1vbgpAQCAtMTEzLDcgKzExMyw2IEBACiByc3luY19jdl9IQVZFX1VOU0lHTkVEX0NIQVI9JHtyc3luY19jdl9IQVZFX1VOU0lHTkVEX0NIQVI9bm99CiByc3luY19jdl9IQVZFX0JST0tFTl9SRUFERElSPSR7cnN5bmNfY3ZfSEFWRV9CUk9LRU5fUkVBRERJUj1ub30KIHJzeW5jX2N2X0hBVkVfR0VUVElNRU9GREFZX1RaPSR7cnN5bmNfY3ZfSEFWRV9HRVRUSU1FT0ZEQVlfVFo9eWVzfQotcnN5bmNfY3ZfSEFWRV9DOTlfVlNOUFJJTlRGPSR7cnN5bmNfY3ZfSEFWRV9DOTlfVlNOUFJJTlRGPXllc30KIHJzeW5jX2N2X0hBVkVfU0VDVVJFX01LU1RFTVA9JHtyc3luY19jdl9IQVZFX1NFQ1VSRV9NS1NURU1QPXllc30KIHJzeW5jX2N2X1JFUExBQ0VfSU5FVF9OVE9BPSR7cnN5bmNfY3ZfUkVQTEFDRV9JTkVUX05UT0E9bm99CiByc3luY19jdl9SRVBMQUNFX0lORVRfQVRPTj0ke3JzeW5jX2N2X1JFUExBQ0VfSU5FVF9BVE9OPW5vfQpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvc2l0ZS9jb21tb24tbGludXggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9zaXRlL2NvbW1vbi1saW51eAppbmRleCAwYTc1MmE0Li4yOTU4NzE2IDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9zaXRlL2NvbW1vbi1saW51eAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9zaXRlL2NvbW1vbi1saW51eApAQCAtNjEsMyArNjEsNiBAQAogCiAjIGFwYWNoZQogYWNfY3Zfb19ub25ibG9ja19pbmhlcml0ZWQ9JHthY19jdl9vX25vbmJsb2NrX2luaGVyaXRlZD1ub30KKworIyByc3luYworcnN5bmNfY3ZfSEFWRV9DOTlfVlNOUFJJTlRGPSR7cnN5bmNfY3ZfSEFWRV9DOTlfVlNOUFJJTlRGPXllc30KZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3NpdGUvaXg4Ni1jb21tb24gYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9zaXRlL2l4ODYtY29tbW9uCmluZGV4IDIzYjhlOGIuLmY0Y2YwYjggMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3NpdGUvaXg4Ni1jb21tb24KKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvc2l0ZS9peDg2LWNvbW1vbgpAQCAtMTU0LDcgKzE1NCw2IEBACiByc3luY19jdl9IQVZFX1VOU0lHTkVEX0NIQVI9JHtyc3luY19jdl9IQVZFX1VOU0lHTkVEX0NIQVI9bm99CiByc3luY19jdl9IQVZFX0JST0tFTl9SRUFERElSPSR7cnN5bmNfY3ZfSEFWRV9CUk9LRU5fUkVBRERJUj1ub30KIHJzeW5jX2N2X0hBVkVfR0VUVElNRU9GREFZX1RaPSR7cnN5bmNfY3ZfSEFWRV9HRVRUSU1FT0ZEQVlfVFo9eWVzfQotcnN5bmNfY3ZfSEFWRV9DOTlfVlNOUFJJTlRGPSR7cnN5bmNfY3ZfSEFWRV9DOTlfVlNOUFJJTlRGPXllc30KIHJzeW5jX2N2X0hBVkVfU0VDVVJFX01LU1RFTVA9JHtyc3luY19jdl9IQVZFX1NFQ1VSRV9NS1NURU1QPXllc30KIHJzeW5jX2N2X1JFUExBQ0VfSU5FVF9OVE9BPSR7cnN5bmNfY3ZfUkVQTEFDRV9JTkVUX05UT0E9bm99CiByc3luY19jdl9SRVBMQUNFX0lORVRfQVRPTj0ke3JzeW5jX2N2X1JFUExBQ0VfSU5FVF9BVE9OPW5vfQpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvc2l0ZS9taXBzNjRlbC1saW51eCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3NpdGUvbWlwczY0ZWwtbGludXgKaW5kZXggOGI2MWViMC4uNjgwMTcxZCAxMDA2NDQKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvc2l0ZS9taXBzNjRlbC1saW51eAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9zaXRlL21pcHM2NGVsLWxpbnV4CkBAIC0zNSw2ICszNSw3IEBACiBhY19jdl9hbGlnbm9mX2d1aW50MzI9NAogYWNfY3ZfYWxpZ25vZl9ndWludDY0PTgKIGFjX2N2X2FsaWdub2ZfdW5zaWduZWRfbG9uZz04CithY19jdl9zaXplb2Zfc3NpemVfdD04CiAKICMgbGlicGNhcAogYWNfY3ZfbGludXhfdmVycz0ke2FjX2N2X2xpbnV4X3ZlcnM9Mn0KZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3NpdGUvbWlwc2lzYTMycjYtbGludXggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9zaXRlL21pcHNpc2EzMnI2LWxpbnV4Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjcyYTU0ZjkKLS0tIC9kZXYvbnVsbAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9zaXRlL21pcHNpc2EzMnI2LWxpbnV4CkBAIC0wLDAgKzEsNzkgQEAKKyMgZ2VuZXJhbAorYWNfY3ZfZnVuY19zZXR2YnVmX3JldmVyc2VkPSR7YWNfY3ZfZnVuY19zZXR2YnVmX3JldmVyc2VkPW5vfQorCisjIGJhc2gKK2FjX2N2X2NfbG9uZ19kb3VibGU9JHthY19jdl9jX2xvbmdfZG91YmxlPW5vfQorYmFzaF9jdl9mdW5jX3NpZ3NldGptcD0ke2Jhc2hfY3ZfZnVuY19zaWdzZXRqbXA9cHJlc2VudH0KKworIyBvcGVuc3NoCithY19jdl9oYXZlX2FjY3JpZ2h0c19pbl9tc2doZHI9JHthY19jdl9oYXZlX2FjY3JpZ2h0c19pbl9tc2doZHI9bm99CithY19jdl9oYXZlX2Jyb2tlbl9zbnByaW50Zj0ke2FjX2N2X2hhdmVfYnJva2VuX3NucHJpbnRmPW5vfQorYWNfY3ZfaGF2ZV9jb250cm9sX2luX21zZ2hkcj0ke2FjX2N2X2hhdmVfY29udHJvbF9pbl9tc2doZHI9eWVzfQorYWNfY3ZfaGF2ZV9vcGVucHR5X2N0dHlfYnVnPSR7YWNfY3ZfaGF2ZV9vcGVucHR5X2N0dHlfYnVnPW5vfQorYWNfY3ZfaGF2ZV9zcGFjZV9kX25hbWVfaW5fc3RydWN0X2RpcmVudD0ke2FjX2N2X2hhdmVfc3BhY2VfZF9uYW1lX2luX3N0cnVjdF9kaXJlbnQ9eWVzfQorCisjIGZnZXQKK2NvbXBhdF9jdl9mdW5jX3NucHJpbnRmX3dvcmtzPSR7Y29tcGF0X2N2X2Z1bmNfc25wcmludGZfd29ya3M9eWVzfQorCisjIGdsaWIKK2dsaWJfY3ZfX192YV9jb3B5PSR7Z2xpYl9jdl9fX3ZhX2NvcHk9eWVzfQorZ2xpYl9jdl9oYXNfX2lubGluZT0ke2dsaWJfY3ZfaGFzX19pbmxpbmU9eWVzfQorZ2xpYl9jdl9oYXNfX2lubGluZV9fPSR7Z2xpYl9jdl9oYXNfX2lubGluZV9fPXllc30KK2dsaWJfY3ZfaGFzaW5saW5lPSR7Z2xpYl9jdl9oYXNpbmxpbmU9eWVzfQorZ2xpYl9jdl9sb25nX2xvbmdfZm9ybWF0PSR7Z2xpYl9jdl9sb25nX2xvbmdfZm9ybWF0PWxsfQorZ2xpYl9jdl9ydGxkZ2xvYmFsX2Jyb2tlbj0ke2dsaWJfY3ZfcnRsZGdsb2JhbF9icm9rZW49bm99CitnbGliX2N2X3NhbmVfcmVhbGxvYz0ke2dsaWJfY3Zfc2FuZV9yZWFsbG9jPXllc30KK2dsaWJfY3Zfc2l6ZW9mX2dtdXRleD0ke2dsaWJfY3Zfc2l6ZW9mX2dtdXRleD0yNH0KK2dsaWJfY3Zfc2l6ZW9mX3N5c3RlbV90aHJlYWQ9JHtnbGliX2N2X3NpemVvZl9zeXN0ZW1fdGhyZWFkPTR9CitnbGliX2N2X3N0YWNrX2dyb3dzPSR7Z2xpYl9jdl9zdGFja19ncm93cz1ub30KK2dsaWJfY3ZfdXNjb3JlPSR7Z2xpYl9jdl91c2NvcmU9bm99CisKKyMgZ2xpYi0yLjAKK2dsaWJfY3Zfc3RhY2tfZ3Jvd3M9JHtnbGliX2N2X3N0YWNrX2dyb3dzPW5vfQordXRpbHNfY3Zfc3lzX29wZW5fbWF4PSR7dXRpbHNfY3Zfc3lzX29wZW5fbWF4PTEwMTV9CitnbGliX2N2X3VzZV9waWRfc3Vycm9nYXRlPSR7Z2xpYl9jdl91c2VfcGlkX3N1cnJvZ2F0ZT15ZXN9CisKKyMgbGlicGNhcAorYWNfY3ZfbGludXhfdmVycz0ke2FjX2N2X2xpbnV4X3ZlcnM9Mn0KKworIyBzdGFydHVwLW5vdGlmaWNhdGlvbgorbGZfY3Zfc2FuZV9yZWFsbG9jPSR7bGZfY3Zfc2FuZV9yZWFsbG9jPXllc30KKworIyBsaWJpZGwKK2xpYklETF9jdl9sb25nX2xvbmdfZm9ybWF0PSR7bGliSURMX2N2X2xvbmdfbG9uZ19mb3JtYXQ9bGx9CisKKyMgbmNmdHAKK3dpX2N2X3N0cnVjdF90aW1ldmFsX3R2X3NlYz0ke3dpX2N2X3N0cnVjdF90aW1ldmFsX3R2X3NlYz1sb25nfQord2lfY3Zfc3RydWN0X3RpbWV2YWxfdHZfdXNlYz0ke3dpX2N2X3N0cnVjdF90aW1ldmFsX3R2X3VzZWM9bG9uZ30KKworIyBkYgorZGJfY3ZfYWxpZ25fdD0ke2RiX2N2X2FsaWduX3Q9J3Vuc2lnbmVkIGxvbmcgbG9uZyd9CitkYl9jdl9hbGlnbnBfdD0ke2RiX2N2X2FsaWducF90PSd1bnNpZ25lZCBsb25nJ30KK2RiX2N2X2ZjbnRsX2Zfc2V0ZmQ9JHtkYl9jdl9mY250bF9mX3NldGZkPXllc30KK2RiX2N2X3NwcmludGZfY291bnQ9JHtkYl9jdl9zcHJpbnRmX2NvdW50PXllc30KKworIyBycmR0b29sCityZF9jdl9pZWVlX3dvcmtzPSR7cmRfY3ZfaWVlZV93b3Jrcz15ZXN9CisjIGFjX2N2X3BhdGhfUEVSTD0ke2FjX2N2X3BhdGhfUEVSTD1ub30KKworIyBnZXR0ZXh0CithbV9jdl9mdW5jX3dvcmtpbmdfZ2V0bGluZT0ke2FtX2N2X2Z1bmNfd29ya2luZ19nZXRsaW5lPXllc30KKworIyBzYW1iYQorc2FtYmFfY3ZfSEFWRV9HRVRUSU1FT0ZEQVlfVFo9JHtzYW1iYV9jdl9IQVZFX0dFVFRJTUVPRkRBWV9UWj15ZXN9CisKKyMgdmltCithY19jdl9zaXplb2ZfaW50PSR7YWNfY3Zfc2l6ZW9mX2ludD00fQorCisjIGludGVyY29tCithY19jdl9mdW5jX2ZubWF0Y2hfd29ya3M9JHthY19jdl9mdW5jX2ZubWF0Y2hfd29ya3M9eWVzfQorCisjIGxtYmVuY2gKK2FjX2N2X3VpbnQ9JHthY19jdl91bml0PXllc30KKworIyBELUJVUworYWNfY3ZfZnVuY19wb3NpeF9nZXRwd25hbV9yPSR7YWNfY3ZfZnVuY19wb3NpeF9nZXRwd25hbV9yPXllc30KKworIyBldm9sdXRpb24tZGF0YS1zZXJ2ZXIKK2FjX2N2X2xpYmljb252X3V0Zjg9JHthY19jdl9saWJpY29udl91dGY4PXllc30KKwpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvc2l0ZS9taXBzaXNhMzJyNmVsLWxpbnV4IGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvc2l0ZS9taXBzaXNhMzJyNmVsLWxpbnV4Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY5NmIxYmUKLS0tIC9kZXYvbnVsbAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9zaXRlL21pcHNpc2EzMnI2ZWwtbGludXgKQEAgLTAsMCArMSw3OSBAQAorIyBnZW5lcmFsCithY19jdl9mdW5jX3NldHZidWZfcmV2ZXJzZWQ9JHthY19jdl9mdW5jX3NldHZidWZfcmV2ZXJzZWQ9bm99CisKKyMgYmFzaAorYWNfY3ZfY19sb25nX2RvdWJsZT0ke2FjX2N2X2NfbG9uZ19kb3VibGU9bm99CitiYXNoX2N2X2Z1bmNfc2lnc2V0am1wPSR7YmFzaF9jdl9mdW5jX3NpZ3NldGptcD1wcmVzZW50fQorCisjIG9wZW5zc2gKK2FjX2N2X2hhdmVfYWNjcmlnaHRzX2luX21zZ2hkcj0ke2FjX2N2X2hhdmVfYWNjcmlnaHRzX2luX21zZ2hkcj1ub30KK2FjX2N2X2hhdmVfYnJva2VuX3NucHJpbnRmPSR7YWNfY3ZfaGF2ZV9icm9rZW5fc25wcmludGY9bm99CithY19jdl9oYXZlX2NvbnRyb2xfaW5fbXNnaGRyPSR7YWNfY3ZfaGF2ZV9jb250cm9sX2luX21zZ2hkcj15ZXN9CithY19jdl9oYXZlX29wZW5wdHlfY3R0eV9idWc9JHthY19jdl9oYXZlX29wZW5wdHlfY3R0eV9idWc9bm99CithY19jdl9oYXZlX3NwYWNlX2RfbmFtZV9pbl9zdHJ1Y3RfZGlyZW50PSR7YWNfY3ZfaGF2ZV9zcGFjZV9kX25hbWVfaW5fc3RydWN0X2RpcmVudD15ZXN9CisKKyMgZmdldAorY29tcGF0X2N2X2Z1bmNfc25wcmludGZfd29ya3M9JHtjb21wYXRfY3ZfZnVuY19zbnByaW50Zl93b3Jrcz15ZXN9CisKKyMgZ2xpYgorZ2xpYl9jdl9fX3ZhX2NvcHk9JHtnbGliX2N2X19fdmFfY29weT15ZXN9CitnbGliX2N2X2hhc19faW5saW5lPSR7Z2xpYl9jdl9oYXNfX2lubGluZT15ZXN9CitnbGliX2N2X2hhc19faW5saW5lX189JHtnbGliX2N2X2hhc19faW5saW5lX189eWVzfQorZ2xpYl9jdl9oYXNpbmxpbmU9JHtnbGliX2N2X2hhc2lubGluZT15ZXN9CitnbGliX2N2X2xvbmdfbG9uZ19mb3JtYXQ9JHtnbGliX2N2X2xvbmdfbG9uZ19mb3JtYXQ9bGx9CitnbGliX2N2X3J0bGRnbG9iYWxfYnJva2VuPSR7Z2xpYl9jdl9ydGxkZ2xvYmFsX2Jyb2tlbj1ub30KK2dsaWJfY3Zfc2FuZV9yZWFsbG9jPSR7Z2xpYl9jdl9zYW5lX3JlYWxsb2M9eWVzfQorZ2xpYl9jdl9zaXplb2ZfZ211dGV4PSR7Z2xpYl9jdl9zaXplb2ZfZ211dGV4PTI0fQorZ2xpYl9jdl9zaXplb2Zfc3lzdGVtX3RocmVhZD0ke2dsaWJfY3Zfc2l6ZW9mX3N5c3RlbV90aHJlYWQ9NH0KK2dsaWJfY3Zfc3RhY2tfZ3Jvd3M9JHtnbGliX2N2X3N0YWNrX2dyb3dzPW5vfQorZ2xpYl9jdl91c2NvcmU9JHtnbGliX2N2X3VzY29yZT1ub30KKworIyBnbGliLTIuMAorZ2xpYl9jdl9zdGFja19ncm93cz0ke2dsaWJfY3Zfc3RhY2tfZ3Jvd3M9bm99Cit1dGlsc19jdl9zeXNfb3Blbl9tYXg9JHt1dGlsc19jdl9zeXNfb3Blbl9tYXg9MTAxNX0KK2dsaWJfY3ZfdXNlX3BpZF9zdXJyb2dhdGU9JHtnbGliX2N2X3VzZV9waWRfc3Vycm9nYXRlPXllc30KKworIyBsaWJwY2FwCithY19jdl9saW51eF92ZXJzPSR7YWNfY3ZfbGludXhfdmVycz0yfQorCisjIHN0YXJ0dXAtbm90aWZpY2F0aW9uCitsZl9jdl9zYW5lX3JlYWxsb2M9JHtsZl9jdl9zYW5lX3JlYWxsb2M9eWVzfQorCisjIGxpYmlkbAorbGliSURMX2N2X2xvbmdfbG9uZ19mb3JtYXQ9JHtsaWJJRExfY3ZfbG9uZ19sb25nX2Zvcm1hdD1sbH0KKworIyBuY2Z0cAord2lfY3Zfc3RydWN0X3RpbWV2YWxfdHZfc2VjPSR7d2lfY3Zfc3RydWN0X3RpbWV2YWxfdHZfc2VjPWxvbmd9Cit3aV9jdl9zdHJ1Y3RfdGltZXZhbF90dl91c2VjPSR7d2lfY3Zfc3RydWN0X3RpbWV2YWxfdHZfdXNlYz1sb25nfQord2lfY3ZfdW5peF9kb21haW5fc29ja2V0cz0ke3dpX2N2X3VuaXhfZG9tYWluX3NvY2tldHM9eWVzfQorCisjIGRiCitkYl9jdl9hbGlnbl90PSR7ZGJfY3ZfYWxpZ25fdD0ndW5zaWduZWQgbG9uZyBsb25nJ30KK2RiX2N2X2FsaWducF90PSR7ZGJfY3ZfYWxpZ25wX3Q9J3Vuc2lnbmVkIGxvbmcnfQorZGJfY3ZfZmNudGxfZl9zZXRmZD0ke2RiX2N2X2ZjbnRsX2Zfc2V0ZmQ9eWVzfQorZGJfY3Zfc3ByaW50Zl9jb3VudD0ke2RiX2N2X3NwcmludGZfY291bnQ9eWVzfQorCisjIHJyZHRvb2wKK3JkX2N2X2llZWVfd29ya3M9JHtyZF9jdl9pZWVlX3dvcmtzPXllc30KKyMgYWNfY3ZfcGF0aF9QRVJMPSR7YWNfY3ZfcGF0aF9QRVJMPW5vfQorCisjIGdldHRleHQKK2FtX2N2X2Z1bmNfd29ya2luZ19nZXRsaW5lPSR7YW1fY3ZfZnVuY193b3JraW5nX2dldGxpbmU9eWVzfQorCisjIHNhbWJhCitzYW1iYV9jdl9IQVZFX0dFVFRJTUVPRkRBWV9UWj0ke3NhbWJhX2N2X0hBVkVfR0VUVElNRU9GREFZX1RaPXllc30KKworIyB2aW0KK2FjX2N2X3NpemVvZl9pbnQ9JHthY19jdl9zaXplb2ZfaW50PTR9CisKKyMgaW50ZXJjb20KK2FjX2N2X2Z1bmNfZm5tYXRjaF93b3Jrcz0ke2FjX2N2X2Z1bmNfZm5tYXRjaF93b3Jrcz15ZXN9CisKKyNsbWJlbmNoCithY19jdl91aW50PSR7YWNfY3ZfdW5pdD15ZXN9CisKKyMgRC1CVVMKK2FjX2N2X2Z1bmNfcG9zaXhfZ2V0cHduYW1fcj0ke2FjX2N2X2Z1bmNfcG9zaXhfZ2V0cHduYW1fcj15ZXN9CisKKyMgZXZvbHV0aW9uLWRhdGEtc2VydmVyCithY19jdl9saWJpY29udl91dGY4PSR7YWNfY3ZfbGliaWNvbnZfdXRmOD15ZXN9CmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9zaXRlL21pcHNpc2E2NHI2LWxpbnV4IGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvc2l0ZS9taXBzaXNhNjRyNi1saW51eApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lZDBmYmJlCi0tLSAvZGV2L251bGwKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvc2l0ZS9taXBzaXNhNjRyNi1saW51eApAQCAtMCwwICsxLDgzIEBACisjIGdlbmVyYWwKK2FjX2N2X2Z1bmNfc2V0dmJ1Zl9yZXZlcnNlZD0ke2FjX2N2X2Z1bmNfc2V0dmJ1Zl9yZXZlcnNlZD1ub30KKworIyBiYXNoCithY19jdl9jX2xvbmdfZG91YmxlPSR7YWNfY3ZfY19sb25nX2RvdWJsZT1ub30KK2Jhc2hfY3ZfZnVuY19zaWdzZXRqbXA9JHtiYXNoX2N2X2Z1bmNfc2lnc2V0am1wPXByZXNlbnR9CisKKyMgb3BlbnNzaAorYWNfY3ZfaGF2ZV9hY2NyaWdodHNfaW5fbXNnaGRyPSR7YWNfY3ZfaGF2ZV9hY2NyaWdodHNfaW5fbXNnaGRyPW5vfQorYWNfY3ZfaGF2ZV9icm9rZW5fc25wcmludGY9JHthY19jdl9oYXZlX2Jyb2tlbl9zbnByaW50Zj1ub30KK2FjX2N2X2hhdmVfY29udHJvbF9pbl9tc2doZHI9JHthY19jdl9oYXZlX2NvbnRyb2xfaW5fbXNnaGRyPXllc30KK2FjX2N2X2hhdmVfb3BlbnB0eV9jdHR5X2J1Zz0ke2FjX2N2X2hhdmVfb3BlbnB0eV9jdHR5X2J1Zz1ub30KK2FjX2N2X2hhdmVfc3BhY2VfZF9uYW1lX2luX3N0cnVjdF9kaXJlbnQ9JHthY19jdl9oYXZlX3NwYWNlX2RfbmFtZV9pbl9zdHJ1Y3RfZGlyZW50PXllc30KKworIyBmZ2V0Citjb21wYXRfY3ZfZnVuY19zbnByaW50Zl93b3Jrcz0ke2NvbXBhdF9jdl9mdW5jX3NucHJpbnRmX3dvcmtzPXllc30KKworIyBnbGliCitnbGliX2N2X19fdmFfY29weT0ke2dsaWJfY3ZfX192YV9jb3B5PXllc30KK2dsaWJfY3ZfaGFzX19pbmxpbmU9JHtnbGliX2N2X2hhc19faW5saW5lPXllc30KK2dsaWJfY3ZfaGFzX19pbmxpbmVfXz0ke2dsaWJfY3ZfaGFzX19pbmxpbmVfXz15ZXN9CitnbGliX2N2X2hhc2lubGluZT0ke2dsaWJfY3ZfaGFzaW5saW5lPXllc30KK2dsaWJfY3ZfbG9uZ19sb25nX2Zvcm1hdD0ke2dsaWJfY3ZfbG9uZ19sb25nX2Zvcm1hdD1sbH0KK2dsaWJfY3ZfcnRsZGdsb2JhbF9icm9rZW49JHtnbGliX2N2X3J0bGRnbG9iYWxfYnJva2VuPW5vfQorZ2xpYl9jdl9zYW5lX3JlYWxsb2M9JHtnbGliX2N2X3NhbmVfcmVhbGxvYz15ZXN9CitnbGliX2N2X3NpemVvZl9nbXV0ZXg9JHtnbGliX2N2X3NpemVvZl9nbXV0ZXg9MjR9CitnbGliX2N2X3NpemVvZl9zeXN0ZW1fdGhyZWFkPSR7Z2xpYl9jdl9zaXplb2Zfc3lzdGVtX3RocmVhZD00fQorZ2xpYl9jdl9zdGFja19ncm93cz0ke2dsaWJfY3Zfc3RhY2tfZ3Jvd3M9bm99CitnbGliX2N2X3VzY29yZT0ke2dsaWJfY3ZfdXNjb3JlPW5vfQorCisjIGdsaWItMi4wCitnbGliX2N2X3N0YWNrX2dyb3dzPSR7Z2xpYl9jdl9zdGFja19ncm93cz1ub30KK3V0aWxzX2N2X3N5c19vcGVuX21heD0ke3V0aWxzX2N2X3N5c19vcGVuX21heD0xMDE1fQorZ2xpYl9jdl91c2VfcGlkX3N1cnJvZ2F0ZT0ke2dsaWJfY3ZfdXNlX3BpZF9zdXJyb2dhdGU9eWVzfQorYWNfY3ZfYWxpZ25vZl9ndWludDMyPTQKK2FjX2N2X2FsaWdub2ZfZ3VpbnQ2ND04CithY19jdl9hbGlnbm9mX3Vuc2lnbmVkX2xvbmc9OAorYWNfY3Zfc2l6ZW9mX3NzaXplX3Q9OAorCisjIGxpYnBjYXAKK2FjX2N2X2xpbnV4X3ZlcnM9JHthY19jdl9saW51eF92ZXJzPTJ9CisKKyMgc3RhcnR1cC1ub3RpZmljYXRpb24KK2xmX2N2X3NhbmVfcmVhbGxvYz0ke2xmX2N2X3NhbmVfcmVhbGxvYz15ZXN9CisKKyMgbGliaWRsCitsaWJJRExfY3ZfbG9uZ19sb25nX2Zvcm1hdD0ke2xpYklETF9jdl9sb25nX2xvbmdfZm9ybWF0PWxsfQorCisjIG5jZnRwCit3aV9jdl9zdHJ1Y3RfdGltZXZhbF90dl9zZWM9JHt3aV9jdl9zdHJ1Y3RfdGltZXZhbF90dl9zZWM9bG9uZ30KK3dpX2N2X3N0cnVjdF90aW1ldmFsX3R2X3VzZWM9JHt3aV9jdl9zdHJ1Y3RfdGltZXZhbF90dl91c2VjPWxvbmd9CisKKyMgZGIKK2RiX2N2X2FsaWduX3Q9JHtkYl9jdl9hbGlnbl90PSd1bnNpZ25lZCBsb25nIGxvbmcnfQorZGJfY3ZfYWxpZ25wX3Q9JHtkYl9jdl9hbGlnbnBfdD0ndW5zaWduZWQgbG9uZyd9CitkYl9jdl9mY250bF9mX3NldGZkPSR7ZGJfY3ZfZmNudGxfZl9zZXRmZD15ZXN9CitkYl9jdl9zcHJpbnRmX2NvdW50PSR7ZGJfY3Zfc3ByaW50Zl9jb3VudD15ZXN9CisKKyMgcnJkdG9vbAorcmRfY3ZfaWVlZV93b3Jrcz0ke3JkX2N2X2llZWVfd29ya3M9eWVzfQorIyBhY19jdl9wYXRoX1BFUkw9JHthY19jdl9wYXRoX1BFUkw9bm99CisKKyMgZ2V0dGV4dAorYW1fY3ZfZnVuY193b3JraW5nX2dldGxpbmU9JHthbV9jdl9mdW5jX3dvcmtpbmdfZ2V0bGluZT15ZXN9CisKKyMgc2FtYmEKK3NhbWJhX2N2X0hBVkVfR0VUVElNRU9GREFZX1RaPSR7c2FtYmFfY3ZfSEFWRV9HRVRUSU1FT0ZEQVlfVFo9eWVzfQorCisjIHZpbQorYWNfY3Zfc2l6ZW9mX2ludD0ke2FjX2N2X3NpemVvZl9pbnQ9NH0KKworIyBpbnRlcmNvbQorYWNfY3ZfZnVuY19mbm1hdGNoX3dvcmtzPSR7YWNfY3ZfZnVuY19mbm1hdGNoX3dvcmtzPXllc30KKworIyBsbWJlbmNoCithY19jdl91aW50PSR7YWNfY3ZfdW5pdD15ZXN9CisKKyMgRC1CVVMKK2FjX2N2X2Z1bmNfcG9zaXhfZ2V0cHduYW1fcj0ke2FjX2N2X2Z1bmNfcG9zaXhfZ2V0cHduYW1fcj15ZXN9CisKKyMgZWRzLWRidXMKK2FjX2N2X2xpYmljb252X3V0Zjg9JHthY19jdl9saWJpY29udl91dGY4PXllc30KKwpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvc2l0ZS9taXBzaXNhNjRyNmVsLWxpbnV4IGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvc2l0ZS9taXBzaXNhNjRyNmVsLWxpbnV4Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY4MDE3MWQKLS0tIC9kZXYvbnVsbAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9zaXRlL21pcHNpc2E2NHI2ZWwtbGludXgKQEAgLTAsMCArMSw4MyBAQAorIyBnZW5lcmFsCithY19jdl9mdW5jX3NldHZidWZfcmV2ZXJzZWQ9JHthY19jdl9mdW5jX3NldHZidWZfcmV2ZXJzZWQ9bm99CisKKyMgYmFzaAorYWNfY3ZfY19sb25nX2RvdWJsZT0ke2FjX2N2X2NfbG9uZ19kb3VibGU9bm99CitiYXNoX2N2X2Z1bmNfc2lnc2V0am1wPSR7YmFzaF9jdl9mdW5jX3NpZ3NldGptcD1wcmVzZW50fQorCisjIG9wZW5zc2gKK2FjX2N2X2hhdmVfYWNjcmlnaHRzX2luX21zZ2hkcj0ke2FjX2N2X2hhdmVfYWNjcmlnaHRzX2luX21zZ2hkcj1ub30KK2FjX2N2X2hhdmVfYnJva2VuX3NucHJpbnRmPSR7YWNfY3ZfaGF2ZV9icm9rZW5fc25wcmludGY9bm99CithY19jdl9oYXZlX2NvbnRyb2xfaW5fbXNnaGRyPSR7YWNfY3ZfaGF2ZV9jb250cm9sX2luX21zZ2hkcj15ZXN9CithY19jdl9oYXZlX29wZW5wdHlfY3R0eV9idWc9JHthY19jdl9oYXZlX29wZW5wdHlfY3R0eV9idWc9bm99CithY19jdl9oYXZlX3NwYWNlX2RfbmFtZV9pbl9zdHJ1Y3RfZGlyZW50PSR7YWNfY3ZfaGF2ZV9zcGFjZV9kX25hbWVfaW5fc3RydWN0X2RpcmVudD15ZXN9CisKKyMgZmdldAorY29tcGF0X2N2X2Z1bmNfc25wcmludGZfd29ya3M9JHtjb21wYXRfY3ZfZnVuY19zbnByaW50Zl93b3Jrcz15ZXN9CisKKyMgZ2xpYgorZ2xpYl9jdl9fX3ZhX2NvcHk9JHtnbGliX2N2X19fdmFfY29weT15ZXN9CitnbGliX2N2X2hhc19faW5saW5lPSR7Z2xpYl9jdl9oYXNfX2lubGluZT15ZXN9CitnbGliX2N2X2hhc19faW5saW5lX189JHtnbGliX2N2X2hhc19faW5saW5lX189eWVzfQorZ2xpYl9jdl9oYXNpbmxpbmU9JHtnbGliX2N2X2hhc2lubGluZT15ZXN9CitnbGliX2N2X2xvbmdfbG9uZ19mb3JtYXQ9JHtnbGliX2N2X2xvbmdfbG9uZ19mb3JtYXQ9bGx9CitnbGliX2N2X3J0bGRnbG9iYWxfYnJva2VuPSR7Z2xpYl9jdl9ydGxkZ2xvYmFsX2Jyb2tlbj1ub30KK2dsaWJfY3Zfc2FuZV9yZWFsbG9jPSR7Z2xpYl9jdl9zYW5lX3JlYWxsb2M9eWVzfQorZ2xpYl9jdl9zaXplb2ZfZ211dGV4PSR7Z2xpYl9jdl9zaXplb2ZfZ211dGV4PTI0fQorZ2xpYl9jdl9zaXplb2Zfc3lzdGVtX3RocmVhZD0ke2dsaWJfY3Zfc2l6ZW9mX3N5c3RlbV90aHJlYWQ9NH0KK2dsaWJfY3Zfc3RhY2tfZ3Jvd3M9JHtnbGliX2N2X3N0YWNrX2dyb3dzPW5vfQorZ2xpYl9jdl91c2NvcmU9JHtnbGliX2N2X3VzY29yZT1ub30KKworIyBnbGliLTIuMAorZ2xpYl9jdl9zdGFja19ncm93cz0ke2dsaWJfY3Zfc3RhY2tfZ3Jvd3M9bm99Cit1dGlsc19jdl9zeXNfb3Blbl9tYXg9JHt1dGlsc19jdl9zeXNfb3Blbl9tYXg9MTAxNX0KK2dsaWJfY3ZfdXNlX3BpZF9zdXJyb2dhdGU9JHtnbGliX2N2X3VzZV9waWRfc3Vycm9nYXRlPXllc30KK2FjX2N2X2FsaWdub2ZfZ3VpbnQzMj00CithY19jdl9hbGlnbm9mX2d1aW50NjQ9OAorYWNfY3ZfYWxpZ25vZl91bnNpZ25lZF9sb25nPTgKK2FjX2N2X3NpemVvZl9zc2l6ZV90PTgKKworIyBsaWJwY2FwCithY19jdl9saW51eF92ZXJzPSR7YWNfY3ZfbGludXhfdmVycz0yfQorCisjIHN0YXJ0dXAtbm90aWZpY2F0aW9uCitsZl9jdl9zYW5lX3JlYWxsb2M9JHtsZl9jdl9zYW5lX3JlYWxsb2M9eWVzfQorCisjIGxpYmlkbAorbGliSURMX2N2X2xvbmdfbG9uZ19mb3JtYXQ9JHtsaWJJRExfY3ZfbG9uZ19sb25nX2Zvcm1hdD1sbH0KKworIyBuY2Z0cAord2lfY3Zfc3RydWN0X3RpbWV2YWxfdHZfc2VjPSR7d2lfY3Zfc3RydWN0X3RpbWV2YWxfdHZfc2VjPWxvbmd9Cit3aV9jdl9zdHJ1Y3RfdGltZXZhbF90dl91c2VjPSR7d2lfY3Zfc3RydWN0X3RpbWV2YWxfdHZfdXNlYz1sb25nfQord2lfY3ZfdW5peF9kb21haW5fc29ja2V0cz0ke3dpX2N2X3VuaXhfZG9tYWluX3NvY2tldHM9eWVzfQorCisjIGRiCitkYl9jdl9hbGlnbl90PSR7ZGJfY3ZfYWxpZ25fdD0ndW5zaWduZWQgbG9uZyBsb25nJ30KK2RiX2N2X2FsaWducF90PSR7ZGJfY3ZfYWxpZ25wX3Q9J3Vuc2lnbmVkIGxvbmcnfQorZGJfY3ZfZmNudGxfZl9zZXRmZD0ke2RiX2N2X2ZjbnRsX2Zfc2V0ZmQ9eWVzfQorZGJfY3Zfc3ByaW50Zl9jb3VudD0ke2RiX2N2X3NwcmludGZfY291bnQ9eWVzfQorCisjIHJyZHRvb2wKK3JkX2N2X2llZWVfd29ya3M9JHtyZF9jdl9pZWVlX3dvcmtzPXllc30KKyMgYWNfY3ZfcGF0aF9QRVJMPSR7YWNfY3ZfcGF0aF9QRVJMPW5vfQorCisjIGdldHRleHQKK2FtX2N2X2Z1bmNfd29ya2luZ19nZXRsaW5lPSR7YW1fY3ZfZnVuY193b3JraW5nX2dldGxpbmU9eWVzfQorCisjIHNhbWJhCitzYW1iYV9jdl9IQVZFX0dFVFRJTUVPRkRBWV9UWj0ke3NhbWJhX2N2X0hBVkVfR0VUVElNRU9GREFZX1RaPXllc30KKworIyB2aW0KK2FjX2N2X3NpemVvZl9pbnQ9JHthY19jdl9zaXplb2ZfaW50PTR9CisKKyMgaW50ZXJjb20KK2FjX2N2X2Z1bmNfZm5tYXRjaF93b3Jrcz0ke2FjX2N2X2Z1bmNfZm5tYXRjaF93b3Jrcz15ZXN9CisKKyNsbWJlbmNoCithY19jdl91aW50PSR7YWNfY3ZfdW5pdD15ZXN9CisKKyMgRC1CVVMKK2FjX2N2X2Z1bmNfcG9zaXhfZ2V0cHduYW1fcj0ke2FjX2N2X2Z1bmNfcG9zaXhfZ2V0cHduYW1fcj15ZXN9CisKKyMgZWRzLWRidXMKK2FjX2N2X2xpYmljb252X3V0Zjg9JHthY19jdl9saWJpY29udl91dGY4PXllc30KZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3NpdGUvbmlvczItbGludXggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9zaXRlL25pb3MyLWxpbnV4CmluZGV4IDk1YzA5ZDMuLjJmNGU1NzAgMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3NpdGUvbmlvczItbGludXgKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvc2l0ZS9uaW9zMi1saW51eApAQCAtMTcxLDcgKzE3MSw2IEBACiByc3luY19jdl9IQVZFX1VOU0lHTkVEX0NIQVI9JHtyc3luY19jdl9IQVZFX1VOU0lHTkVEX0NIQVI9bm99CiByc3luY19jdl9IQVZFX0JST0tFTl9SRUFERElSPSR7cnN5bmNfY3ZfSEFWRV9CUk9LRU5fUkVBRERJUj1ub30KIHJzeW5jX2N2X0hBVkVfR0VUVElNRU9GREFZX1RaPSR7cnN5bmNfY3ZfSEFWRV9HRVRUSU1FT0ZEQVlfVFo9eWVzfQotcnN5bmNfY3ZfSEFWRV9DOTlfVlNOUFJJTlRGPSR7cnN5bmNfY3ZfSEFWRV9DOTlfVlNOUFJJTlRGPXllc30KIHJzeW5jX2N2X0hBVkVfU0VDVVJFX01LU1RFTVA9JHtyc3luY19jdl9IQVZFX1NFQ1VSRV9NS1NURU1QPXllc30KIHJzeW5jX2N2X1JFUExBQ0VfSU5FVF9OVE9BPSR7cnN5bmNfY3ZfUkVQTEFDRV9JTkVUX05UT0E9bm99CiByc3luY19jdl9SRVBMQUNFX0lORVRfQVRPTj0ke3JzeW5jX2N2X1JFUExBQ0VfSU5FVF9BVE9OPW5vfQpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvc2l0ZS9zaC1jb21tb24gYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9zaXRlL3NoLWNvbW1vbgppbmRleCA1Y2JmMzZhLi5mYzRkNmFkIDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9zaXRlL3NoLWNvbW1vbgorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9zaXRlL3NoLWNvbW1vbgpAQCAtMjE2LDcgKzIxNiw2IEBACiByc3luY19jdl9IQVZFX1VOU0lHTkVEX0NIQVI9JHtyc3luY19jdl9IQVZFX1VOU0lHTkVEX0NIQVI9bm99CiByc3luY19jdl9IQVZFX0JST0tFTl9SRUFERElSPSR7cnN5bmNfY3ZfSEFWRV9CUk9LRU5fUkVBRERJUj1ub30KIHJzeW5jX2N2X0hBVkVfR0VUVElNRU9GREFZX1RaPSR7cnN5bmNfY3ZfSEFWRV9HRVRUSU1FT0ZEQVlfVFo9eWVzfQotcnN5bmNfY3ZfSEFWRV9DOTlfVlNOUFJJTlRGPSR7cnN5bmNfY3ZfSEFWRV9DOTlfVlNOUFJJTlRGPXllc30KIHJzeW5jX2N2X0hBVkVfU0VDVVJFX01LU1RFTVA9JHtyc3luY19jdl9IQVZFX1NFQ1VSRV9NS1NURU1QPXllc30KIHJzeW5jX2N2X1JFUExBQ0VfSU5FVF9OVE9BPSR7cnN5bmNfY3ZfUkVQTEFDRV9JTkVUX05UT0E9bm99CiByc3luY19jdl9SRVBMQUNFX0lORVRfQVRPTj0ke3JzeW5jX2N2X1JFUExBQ0VfSU5FVF9BVE9OPW5vfQpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L3NjcmlwdHMvYml0YmFrZS13aGF0Y2hhbmdlZCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9zY3JpcHRzL2JpdGJha2Utd2hhdGNoYW5nZWQKaW5kZXggYWY1NGQxNi4uMDIwNzc3NyAxMDA3NTUKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L3NjcmlwdHMvYml0YmFrZS13aGF0Y2hhbmdlZAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvc2NyaXB0cy9iaXRiYWtlLXdoYXRjaGFuZ2VkCkBAIC0xLDQgKzEsNCBAQAotIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCisjIS91c3IvYmluL2VudiBweXRob24zCiAjIGV4OnRzPTQ6c3c9NDpzdHM9NDpldAogIyAtKi0gdGFiLXdpZHRoOiA0OyBjLWJhc2ljLW9mZnNldDogNDsgaW5kZW50LXRhYnMtbW9kZTogbmlsIC0qLQogCkBAIC0xNyw3ICsxNyw2IEBACiAjIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCiAjIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcgVVNBCiAKLWZyb20gX19mdXR1cmVfXyBpbXBvcnQgcHJpbnRfZnVuY3Rpb24KIGltcG9ydCBvcwogaW1wb3J0IHN5cwogaW1wb3J0IGdldG9wdApAQCAtMjUsNyArMjQsNyBAQAogaW1wb3J0IHJlCiBpbXBvcnQgd2FybmluZ3MKIGltcG9ydCBzdWJwcm9jZXNzCi1mcm9tIG9wdHBhcnNlIGltcG9ydCBPcHRpb25QYXJzZXIKK2ltcG9ydCBhcmdwYXJzZQogCiBzY3JpcHRzX3BhdGggPSBvcy5wYXRoLmFic3BhdGgob3MucGF0aC5kaXJuYW1lKG9zLnBhdGguYWJzcGF0aChzeXMuYXJndlswXSkpKQogbGliX3BhdGggPSBzY3JpcHRzX3BhdGggKyAnL2xpYicKQEAgLTM4LDYgKzM3LDggQEAKIGlmIG5vdCBiaXRiYWtlcGF0aDoKICAgICBzeXMuc3RkZXJyLndyaXRlKCJVbmFibGUgdG8gZmluZCBiaXRiYWtlIGJ5IHNlYXJjaGluZyBwYXJlbnQgZGlyZWN0b3J5IG9mIHRoaXMgc2NyaXB0IG9yIFBBVEhcbiIpCiAgICAgc3lzLmV4aXQoMSkKK3NjcmlwdHBhdGguYWRkX29lX2xpYl9wYXRoKCkKK2ltcG9ydCBhcmdwYXJzZV9vZQogCiBpbXBvcnQgYmIuc2lnZ2VuCiBpbXBvcnQgYmIucHJvY2VzcwpAQCAtMTE4LDcgKzExOSw3IEBACiAgICAgUHJpbnQgdGhlIG5ld2x5IGFkZGVkIHRhc2tzCiAgICAgIiIiCiAgICAgYWRkZWQgPSB7fQotICAgIGZvciBrIGluIGRfbmV3LmtleXMoKToKKyAgICBmb3IgayBpbiBsaXN0KGRfbmV3LmtleXMoKSk6CiAgICAgICAgIGlmIGsgbm90IGluIGRfb2xkOgogICAgICAgICAgICAgIyBBZGQgdGhlIG5ldyBvbmUgdG8gYWRkZWQgZGljdCwgYW5kIHJlbW92ZSBpdCBmcm9tCiAgICAgICAgICAgICAjIGRfbmV3LCBzbyB0aGUgcmVtYWluaW5nIG9uZXMgYXJlIHRoZSBjaGFuZ2VkIG9uZXMKQEAgLTE1Myw3ICsxNTQsNyBAQAogICAgICIiIgogICAgIHB2Y2hhbmdlZCA9IHt9CiAgICAgY291bnRlciA9IDAKLSAgICBmb3IgayBpbiBkX25ldy5rZXlzKCk6CisgICAgZm9yIGsgaW4gbGlzdChkX25ldy5rZXlzKCkpOgogICAgICAgICBpZiBkX25ldy5nZXQoaykuZ2V0KHZyKSAhPSBkX29sZC5nZXQoaykuZ2V0KHZyKToKICAgICAgICAgICAgIGNvdW50ZXIgKz0gMQogICAgICAgICAgICAgcG4sIHRhc2sgPSBzcGxpdF9wbnRhc2soaykKQEAgLTIxOSw5ICsyMjAsNyBAQAogICAgIDMpIFVzZSBiYi5zaWdnZW4uY29tcGFyZV9zaWdmaWxlcyB0byBkaWZmIHRoZSBvbGQgYW5kIG5ldyBzdGFtcHMKICAgICAiIiIKIAotICAgIHBhcnNlciA9IE9wdGlvblBhcnNlcigKLSAgICAgICAgdmVyc2lvbiA9ICIxLjAiLAotICAgICAgICB1c2FnZSA9ICIiIiVwcm9nIFtvcHRpb25zXSBbcGFja2FnZSAuLi5dCisgICAgcGFyc2VyID0gYXJncGFyc2Vfb2UuQXJndW1lbnRQYXJzZXIodXNhZ2UgPSAiIiIlKHByb2cpcyBbb3B0aW9uc10gW3BhY2thZ2UgLi4uXQogcHJpbnQgd2hhdCB3aWxsIGJlIGRvbmUgYmV0d2VlbiB0aGUgY3VycmVudCBhbmQgbGFzdCBidWlsZHMsIGZvciBleGFtcGxlOgogCiAgICAgJCBiaXRiYWtlIGNvcmUtaW1hZ2Utc2F0bwpAQCAtMjM2LDE3ICsyMzUsOSBAQAogICAgIFRoZSAibm9zdGFtcCIgdGFzayBpcyBub3QgaW5jbHVkZWQuCiAiIiIKICkKLSAgICBwYXJzZXIuYWRkX29wdGlvbigiLXYiLCAiLS12ZXJib3NlIiwgaGVscCA9ICJwcmludCB0aGUgdmVyYm9zZSBjaGFuZ2VzIiwKLSAgICAgICAgICAgICAgIGFjdGlvbiA9ICJzdG9yZV90cnVlIiwgZGVzdCA9ICJ2ZXJib3NlIikKLQotICAgIG9wdGlvbnMsIGFyZ3MgPSBwYXJzZXIucGFyc2VfYXJncyhzeXMuYXJndikKLQotICAgIHZlcmJvc2UgPSBvcHRpb25zLnZlcmJvc2UKLQotICAgIGlmIGxlbihhcmdzKSAhPSAyOgotICAgICAgICBwYXJzZXIuZXJyb3IoIkluY29ycmVjdCBudW1iZXIgb2YgYXJndW1lbnRzIikKLSAgICBlbHNlOgotICAgICAgICByZWNpcGUgPSBhcmdzWzFdCisgICAgcGFyc2VyLmFkZF9hcmd1bWVudCgicmVjaXBlIiwgaGVscD0icmVjaXBlIHRvIGNoZWNrIikKKyAgICBwYXJzZXIuYWRkX2FyZ3VtZW50KCItdiIsICItLXZlcmJvc2UiLCBoZWxwID0gInByaW50IHRoZSB2ZXJib3NlIGNoYW5nZXMiLCBhY3Rpb24gPSAic3RvcmVfdHJ1ZSIpCisgICAgYXJncyA9IHBhcnNlci5wYXJzZV9hcmdzKCkKIAogICAgICMgR2V0IHRoZSBTVEFNUFNfRElSCiAgICAgcHJpbnQoIkZpZ3VyaW5nIG91dCB0aGUgU1RBTVBTX0RJUiAuLi4iKQpAQCAtMjU2LDcgKzI0Nyw3IEBACiAgICAgZXhjZXB0OgogICAgICAgICByYWlzZQogICAgIGlmIG5vdCBzdGFtcHNkaXI6Ci0gICAgICAgIHByaW50KCJFUlJPUjogTm8gU1RBTVBTX0RJUiBmb3VuZCBmb3IgJyVzJyIgJSByZWNpcGUsIGZpbGU9c3lzLnN0ZGVycikKKyAgICAgICAgcHJpbnQoIkVSUk9SOiBObyBTVEFNUFNfRElSIGZvdW5kIGZvciAnJXMnIiAlIGFyZ3MucmVjaXBlLCBmaWxlPXN5cy5zdGRlcnIpCiAgICAgICAgIHJldHVybiAyCiAgICAgc3RhbXBzZGlyID0gc3RhbXBzZGlyLnJzdHJpcCgiXG4iKQogICAgIGlmIG5vdCBvcy5wYXRoLmlzZGlyKHN0YW1wc2Rpcik6CkBAIC0yNzIsNyArMjYzLDcgQEAKICAgICB0cnk6CiAgICAgICAgICMgR2VuZXJhdGUgdGhlIG5ldyBzdGFtcHMgZGlyCiAgICAgICAgIHByaW50KCJHZW5lcmF0aW5nIHRoZSBuZXcgc3RhbXBzIC4uLiAobmVlZCBzZXZlcmFsIG1pbnV0ZXMpIikKLSAgICAgICAgY21kbGluZSA9ICJTVEFNUFNfRElSPSVzIGJpdGJha2UgLVMgbm9uZSAlcyIgJSAobmV3X3N0YW1wc2RpciwgcmVjaXBlKQorICAgICAgICBjbWRsaW5lID0gIlNUQU1QU19ESVI9JXMgYml0YmFrZSAtUyBub25lICVzIiAlIChuZXdfc3RhbXBzZGlyLCBhcmdzLnJlY2lwZSkKICAgICAgICAgIyBGSVhNRQogICAgICAgICAjIFRoZSAiYml0YmFrZSAtUyIgbWF5IGZhaWwsIG5vdCBmYXRhbCBlcnJvciwgdGhlIHN0YW1wcyB3aWxsIHN0aWxsCiAgICAgICAgICMgYmUgZ2VuZXJhdGVkLCB0aGlzIG1pZ2h0IGJlIGEgYnVnIG9mICJiaXRiYWtlIC1TIi4KQEAgLTI4Nyw3ICsyNzgsNyBAQAogCiAgICAgICAgICMgUmVtb3ZlIHRoZSBzYW1lIG9uZSBmcm9tIGJvdGggc3RhbXBzLgogICAgICAgICBjbnRfdW5jaGFuZ2VkID0gMAotICAgICAgICBmb3IgayBpbiBuZXdfZGljdC5rZXlzKCk6CisgICAgICAgIGZvciBrIGluIGxpc3QobmV3X2RpY3Qua2V5cygpKToKICAgICAgICAgICAgIGlmIGsgaW4gb2xkX2RpY3Q6CiAgICAgICAgICAgICAgICAgY250X3VuY2hhbmdlZCArPSAxCiAgICAgICAgICAgICAgICAgZGVsKG5ld19kaWN0W2tdKQpAQCAtMzEwLDE3ICszMDEsMTcgQEAKICAgICAgICAgIyBQViAoaW5jbHVkaW5nIFBFKSBhbmQgUFIgY2hhbmdlZAogICAgICAgICAjIExldCB0aGUgYmIuc2lnZ2VuIGhhbmRsZSB0aGVtIGlmIHZlcmJvc2UKICAgICAgICAgY250X3J2ID0ge30KLSAgICAgICAgaWYgbm90IHZlcmJvc2U6CisgICAgICAgIGlmIG5vdCBhcmdzLnZlcmJvc2U6CiAgICAgICAgICAgICBmb3IgaSBpbiAoJ3B2JywgJ3ByJyk6CiAgICAgICAgICAgICAgICBjbnRfcnZbaV0gPSBwcmludF92cmNoYW5nZWQobmV3X3JlY29uLCBvbGRfcmVjb24sIGkpCiAKICAgICAgICAgIyBEZXBlbmRlbmNpZXMgY2hhbmdlZCAodXNlIGJpdGJha2UtZGlmZnNpZ3MpCi0gICAgICAgIGNudF9kZXAgPSBwcmludF9kZXBjaGFuZ2VkKG5ld19yZWNvbiwgb2xkX3JlY29uLCB2ZXJib3NlKQorICAgICAgICBjbnRfZGVwID0gcHJpbnRfZGVwY2hhbmdlZChuZXdfcmVjb24sIG9sZF9yZWNvbiwgYXJncy52ZXJib3NlKQogCiAgICAgICAgIHRvdGFsX2NoYW5nZWQgPSBjbnRfYWRkZWQgKyAoY250X3J2LmdldCgncHYnKSBvciAwKSArIChjbnRfcnYuZ2V0KCdwcicpIG9yIDApICsgY250X2RlcAogCiAgICAgICAgIHByaW50KCJcbj09PSBTdW1tYXJ5OiAoJXMgY2hhbmdlZCwgJXMgdW5jaGFuZ2VkKSIgJSAodG90YWxfY2hhbmdlZCwgY250X3VuY2hhbmdlZCkpCi0gICAgICAgIGlmIHZlcmJvc2U6CisgICAgICAgIGlmIGFyZ3MudmVyYm9zZToKICAgICAgICAgICAgIHByaW50KCJOZXdseSBhZGRlZDogJXNcbkRlcGVuZGVuY2llcyBjaGFuZ2VkOiAlc1xuIiAlIFwKICAgICAgICAgICAgICAgICAoY250X2FkZGVkLCBjbnRfZGVwKSkKICAgICAgICAgZWxzZToKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9zY3JpcHRzL2J1aWxkaGlzdG9yeS1jb2xsZWN0LXNyY3JldnMgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvc2NyaXB0cy9idWlsZGhpc3RvcnktY29sbGVjdC1zcmNyZXZzCmluZGV4IGYzZWI3NmIuLjhhMDM1ODAgMTAwNzU1Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9zY3JpcHRzL2J1aWxkaGlzdG9yeS1jb2xsZWN0LXNyY3JldnMKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L3NjcmlwdHMvYnVpbGRoaXN0b3J5LWNvbGxlY3Qtc3JjcmV2cwpAQCAtMSw0ICsxLDQgQEAKLSMhL3Vzci9iaW4vZW52IHB5dGhvbgorIyEvdXNyL2Jpbi9lbnYgcHl0aG9uMwogIwogIyBDb2xsZWN0cyB0aGUgcmVjb3JkZWQgU1JDUkVWIHZhbHVlcyBmcm9tIGJ1aWxkaGlzdG9yeSBhbmQgcmVwb3J0cyBvbiB0aGVtCiAjCkBAIC0xMDMsNyArMTAzLDcgQEAKICAgICAgICAgICAgICAgICAgICAgaWYgb3B0aW9ucy5yZXBvcnRhbGwgb3IgdmFsdWUgIT0gb3JpZzoKICAgICAgICAgICAgICAgICAgICAgICAgIGFsbF9zcmNyZXZzW2N1cmRpcl0uYXBwZW5kKChwbiwgbmFtZSwgc3JjcmV2KSkKIAotICAgIGZvciBjdXJkaXIsIHNyY3JldnMgaW4gc29ydGVkKGFsbF9zcmNyZXZzLml0ZXJpdGVtcygpKToKKyAgICBmb3IgY3VyZGlyLCBzcmNyZXZzIGluIHNvcnRlZChhbGxfc3JjcmV2cy5pdGVtcygpKToKICAgICAgICAgaWYgc3JjcmV2czoKICAgICAgICAgICAgIHByaW50KCcjICVzJyAlIGN1cmRpcikKICAgICAgICAgICAgIGZvciBwbiwgbmFtZSwgc3JjcmV2IGluIHNyY3JldnM6CmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvc2NyaXB0cy9idWlsZGhpc3RvcnktZGlmZiBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9zY3JpcHRzL2J1aWxkaGlzdG9yeS1kaWZmCmluZGV4IGRmZWJjZGQuLmQ4Y2ExMmQgMTAwNzU1Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9zY3JpcHRzL2J1aWxkaGlzdG9yeS1kaWZmCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9zY3JpcHRzL2J1aWxkaGlzdG9yeS1kaWZmCkBAIC0xLDQgKzEsNCBAQAotIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCisjIS91c3IvYmluL2VudiBweXRob24zCiAKICMgUmVwb3J0IHNpZ25pZmljYW50IGRpZmZlcmVuY2VzIGluIHRoZSBidWlsZGhpc3RvcnkgcmVwb3NpdG9yeSBzaW5jZSBhIHNwZWNpZmljIHJldmlzaW9uCiAjCkBAIC0xNCw3ICsxNCw3IEBACiB0cnk6CiAgICAgaW1wb3J0IGdpdAogZXhjZXB0IEltcG9ydEVycm9yOgotICAgIHByaW50KCJQbGVhc2UgaW5zdGFsbCBHaXRQeXRob24gKHB5dGhvbi1naXQpIDAuMy4xIG9yIGxhdGVyIGluIG9yZGVyIHRvIHVzZSB0aGlzIHNjcmlwdCIpCisgICAgcHJpbnQoIlBsZWFzZSBpbnN0YWxsIEdpdFB5dGhvbiAocHl0aG9uMy1naXQpIDAuMy40IG9yIGxhdGVyIGluIG9yZGVyIHRvIHVzZSB0aGlzIHNjcmlwdCIpCiAgICAgc3lzLmV4aXQoMSkKIAogZGVmIG1haW4oKToKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9zY3JpcHRzL2J1aWxkc3RhdHMtZGlmZiBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9zY3JpcHRzL2J1aWxkc3RhdHMtZGlmZgpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5mOTE4YTZkCi0tLSAvZGV2L251bGwKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L3NjcmlwdHMvYnVpbGRzdGF0cy1kaWZmCkBAIC0wLDAgKzEsNTY0IEBACisjIS91c3IvYmluL3B5dGhvbjMKKyMKKyMgU2NyaXB0IGZvciBjb21wYXJpbmcgYnVpbGRzdGF0cyBmcm9tIHR3byBkaWZmZXJlbnQgYnVpbGRzCisjCisjIENvcHlyaWdodCAoYykgMjAxNiwgSW50ZWwgQ29ycG9yYXRpb24uCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisjIHVuZGVyIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsCisjIHZlcnNpb24gMiwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0IFdJVEhPVVQKKyMgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yCisjIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IKKyMgbW9yZSBkZXRhaWxzLgorIworaW1wb3J0IGFyZ3BhcnNlCitpbXBvcnQgZ2xvYgoraW1wb3J0IGpzb24KK2ltcG9ydCBsb2dnaW5nCitpbXBvcnQgbWF0aAoraW1wb3J0IG9zCitpbXBvcnQgcmUKK2ltcG9ydCBzeXMKK2Zyb20gY29sbGVjdGlvbnMgaW1wb3J0IG5hbWVkdHVwbGUKK2Zyb20gZGF0ZXRpbWUgaW1wb3J0IGRhdGV0aW1lLCB0aW1lZGVsdGEsIHR6aW5mbworZnJvbSBvcGVyYXRvciBpbXBvcnQgYXR0cmdldHRlcgorCisjIFNldHVwIGxvZ2dpbmcKK2xvZ2dpbmcuYmFzaWNDb25maWcobGV2ZWw9bG9nZ2luZy5JTkZPLCBmb3JtYXQ9IiUobGV2ZWxuYW1lKXM6ICUobWVzc2FnZSlzIikKK2xvZyA9IGxvZ2dpbmcuZ2V0TG9nZ2VyKCkKKworCitjbGFzcyBTY3JpcHRFcnJvcihFeGNlcHRpb24pOgorICAgICIiIkV4Y2VwdGlvbiBmb3IgaW50ZXJuYWwgZXJyb3IgaGFuZGxpbmcgb2YgdGhpcyBzY3JpcHQiIiIKKyAgICBwYXNzCisKKworY2xhc3MgVGltZVpvbmUodHppbmZvKToKKyAgICAiIiJTaW1wbGUgZml4ZWQtb2Zmc2V0IHR6aW5mbyIiIgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBzZWNvbmRzLCBuYW1lKToKKyAgICAgICAgc2VsZi5fb2Zmc2V0ID0gdGltZWRlbHRhKHNlY29uZHM9c2Vjb25kcykKKyAgICAgICAgc2VsZi5fbmFtZSA9IG5hbWUKKworICAgIGRlZiB1dGNvZmZzZXQoc2VsZiwgZHQpOgorICAgICAgICByZXR1cm4gc2VsZi5fb2Zmc2V0CisKKyAgICBkZWYgdHpuYW1lKHNlbGYsIGR0KToKKyAgICAgICAgcmV0dXJuIHNlbGYuX25hbWUKKworICAgIGRlZiBkc3Qoc2VsZiwgZHQpOgorICAgICAgICByZXR1cm4gTm9uZQorCitUSU1FWk9ORVMgPSB7J1VUQyc6IFRpbWVab25lKDAsICdVVEMnKSwKKyAgICAgICAgICAgICAnRUVUJzogVGltZVpvbmUoNzIwMCwgJ0VFVCcpLAorICAgICAgICAgICAgICdFRVNUJzogVGltZVpvbmUoMTA4MDAsICdFRVNUJyl9CisKK3Rhc2tkaWZmX2ZpZWxkcyA9ICgncGtnJywgJ3BrZ19vcCcsICd0YXNrJywgJ3Rhc2tfb3AnLCAndmFsdWUxJywgJ3ZhbHVlMicsCisgICAgICAgICAgICAgICAgICAgJ2Fic2RpZmYnLCAncmVsZGlmZicpCitUYXNrRGlmZiA9IG5hbWVkdHVwbGUoJ1Rhc2tEaWZmJywgJyAnLmpvaW4odGFza2RpZmZfZmllbGRzKSkKKworCitkZWYgdG9fZGF0ZXRpbWVfb2JqKG9iaik6CisgICAgIiIiSGVscGVyIGZvciBnZXR0aW5nIHRpbWVzdGFtcHMgaW4gZGF0ZXRpbWUgZm9ybWF0IiIiCisgICAgaWYgaXNpbnN0YW5jZShvYmosIGRhdGV0aW1lKToKKyAgICAgICAgcmV0dXJuIG9iagorICAgIGVsc2U6CisgICAgICAgIHJldHVybiBkYXRldGltZS51dGNmcm9tdGltZXN0YW1wKG9iaikucmVwbGFjZSh0emluZm89VElNRVpPTkVTWydVVEMnXSkKKworCitjbGFzcyBCU1Rhc2soZGljdCk6CisgICAgZGVmIF9faW5pdF9fKHNlbGYsICphcmdzLCAqKmt3YXJncyk6CisgICAgICAgIHNlbGZbJ3N0YXJ0X3RpbWUnXSA9IE5vbmUKKyAgICAgICAgc2VsZlsnZWxhcHNlZF90aW1lJ10gPSBOb25lCisgICAgICAgIHNlbGZbJ3N0YXR1cyddID0gTm9uZQorICAgICAgICBzZWxmWydpb3N0YXQnXSA9IHt9CisgICAgICAgIHNlbGZbJ3J1c2FnZSddID0ge30KKyAgICAgICAgc2VsZlsnY2hpbGRfcnVzYWdlJ10gPSB7fQorICAgICAgICBzdXBlcihCU1Rhc2ssIHNlbGYpLl9faW5pdF9fKCphcmdzLCAqKmt3YXJncykKKworICAgIEBwcm9wZXJ0eQorICAgIGRlZiBjcHV0aW1lKHNlbGYpOgorICAgICAgICAiIiJTdW0gb2YgdXNlciBhbmQgc3lzdGVtIHRpbWUgdGFrZW4gYnkgdGhlIHRhc2siIiIKKyAgICAgICAgcmV0dXJuIHNlbGZbJ3J1c2FnZSddWydydV9zdGltZSddICsgc2VsZlsncnVzYWdlJ11bJ3J1X3V0aW1lJ10gKyBcCisgICAgICAgICAgICAgICBzZWxmWydjaGlsZF9ydXNhZ2UnXVsncnVfc3RpbWUnXSArIHNlbGZbJ2NoaWxkX3J1c2FnZSddWydydV91dGltZSddCisKKyAgICBAcHJvcGVydHkKKyAgICBkZWYgd2FsbHRpbWUoc2VsZik6CisgICAgICAgICIiIkVsYXBzZWQgd2FsbCBjbG9jayB0aW1lIiIiCisgICAgICAgIHJldHVybiBzZWxmWydlbGFwc2VkX3RpbWUnXS50b3RhbF9zZWNvbmRzKCkKKworICAgIEBwcm9wZXJ0eQorICAgIGRlZiByZWFkX2J5dGVzKHNlbGYpOgorICAgICAgICAiIiJCeXRlcyByZWFkIGZyb20gdGhlIGJsb2NrIGxheWVyIiIiCisgICAgICAgIHJldHVybiBzZWxmWydpb3N0YXQnXVsncmVhZF9ieXRlcyddCisKKyAgICBAcHJvcGVydHkKKyAgICBkZWYgd3JpdGVfYnl0ZXMoc2VsZik6CisgICAgICAgICIiIkJ5dGVzIHdyaXR0ZW4gdG8gdGhlIGJsb2NrIGxheWVyIiIiCisgICAgICAgIHJldHVybiBzZWxmWydpb3N0YXQnXVsnd3JpdGVfYnl0ZXMnXQorCisgICAgQHByb3BlcnR5CisgICAgZGVmIHJlYWRfb3BzKHNlbGYpOgorICAgICAgICAiIiJOdW1iZXIgb2YgcmVhZCBvcGVyYXRpb25zIG9uIHRoZSBibG9jayBsYXllciIiIgorICAgICAgICByZXR1cm4gc2VsZlsncnVzYWdlJ11bJ3J1X2luYmxvY2snXSArIHNlbGZbJ2NoaWxkX3J1c2FnZSddWydydV9pbmJsb2NrJ10KKworICAgIEBwcm9wZXJ0eQorICAgIGRlZiB3cml0ZV9vcHMoc2VsZik6CisgICAgICAgICIiIk51bWJlciBvZiB3cml0ZSBvcGVyYXRpb25zIG9uIHRoZSBibG9jayBsYXllciIiIgorICAgICAgICByZXR1cm4gc2VsZlsncnVzYWdlJ11bJ3J1X291YmxvY2snXSArIHNlbGZbJ2NoaWxkX3J1c2FnZSddWydydV9vdWJsb2NrJ10KKworCitkZWYgcmVhZF9idWlsZHN0YXRzX2ZpbGUoYnVpbGRzdGF0X2ZpbGUpOgorICAgICIiIkNvbnZlcnQgYnVpbGRzdGF0IHRleHQgZmlsZSBpbnRvIGRpY3QvanNvbiIiIgorICAgIGJzX3Rhc2sgPSBCU1Rhc2soKQorICAgIGxvZy5kZWJ1ZygiUmVhZGluZyB0YXNrIGJ1aWxkc3RhdHMgZnJvbSAlcyIsIGJ1aWxkc3RhdF9maWxlKQorICAgIHdpdGggb3BlbihidWlsZHN0YXRfZmlsZSkgYXMgZm9iajoKKyAgICAgICAgZm9yIGxpbmUgaW4gZm9iai5yZWFkbGluZXMoKToKKyAgICAgICAgICAgIGtleSwgdmFsID0gbGluZS5zcGxpdCgnOicsIDEpCisgICAgICAgICAgICB2YWwgPSB2YWwuc3RyaXAoKQorICAgICAgICAgICAgaWYga2V5ID09ICdTdGFydGVkJzoKKyAgICAgICAgICAgICAgICBzdGFydF90aW1lID0gdG9fZGF0ZXRpbWVfb2JqKGZsb2F0KHZhbCkpCisgICAgICAgICAgICAgICAgYnNfdGFza1snc3RhcnRfdGltZSddID0gc3RhcnRfdGltZQorICAgICAgICAgICAgZWxpZiBrZXkgPT0gJ0VuZGVkJzoKKyAgICAgICAgICAgICAgICBlbmRfdGltZSA9IHRvX2RhdGV0aW1lX29iaihmbG9hdCh2YWwpKQorICAgICAgICAgICAgZWxpZiBrZXkuc3RhcnRzd2l0aCgnSU8gJyk6CisgICAgICAgICAgICAgICAgc3BsaXQgPSBrZXkuc3BsaXQoKQorICAgICAgICAgICAgICAgIGJzX3Rhc2tbJ2lvc3RhdCddW3NwbGl0WzFdXSA9IGludCh2YWwpCisgICAgICAgICAgICBlbGlmIGtleS5maW5kKCdydXNhZ2UnKSA+PSAwOgorICAgICAgICAgICAgICAgIHNwbGl0ID0ga2V5LnNwbGl0KCkKKyAgICAgICAgICAgICAgICBydV9rZXkgPSBzcGxpdFstMV0KKyAgICAgICAgICAgICAgICBpZiBydV9rZXkgaW4gKCdydV9zdGltZScsICdydV91dGltZScpOgorICAgICAgICAgICAgICAgICAgICB2YWwgPSBmbG9hdCh2YWwpCisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgdmFsID0gaW50KHZhbCkKKyAgICAgICAgICAgICAgICBydV90eXBlID0gJ3J1c2FnZScgaWYgc3BsaXRbMF0gPT0gJ3J1c2FnZScgZWxzZSBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdjaGlsZF9ydXNhZ2UnCisgICAgICAgICAgICAgICAgYnNfdGFza1tydV90eXBlXVtydV9rZXldID0gdmFsCisgICAgICAgICAgICBlbGlmIGtleSA9PSAnU3RhdHVzJzoKKyAgICAgICAgICAgICAgICBic190YXNrWydzdGF0dXMnXSA9IHZhbAorICAgIGJzX3Rhc2tbJ2VsYXBzZWRfdGltZSddID0gZW5kX3RpbWUgLSBzdGFydF90aW1lCisgICAgcmV0dXJuIGJzX3Rhc2sKKworCitkZWYgcmVhZF9idWlsZHN0YXRzX2Rpcihic19kaXIpOgorICAgICIiIlJlYWQgYnVpbGRzdGF0cyBkaXJlY3RvcnkiIiIKKyAgICBkZWYgc3BsaXRfbmV2cihuZXZyKToKKyAgICAgICAgIiIiU3BsaXQgbmFtZSBhbmQgdmVyc2lvbiBpbmZvcm1hdGlvbiBmcm9tIHJlY2lwZSAibmV2ciIgc3RyaW5nIiIiCisgICAgICAgIG5fZV92LCByZXZpc2lvbiA9IG5ldnIucnNwbGl0KCctJywgMSkKKyAgICAgICAgbWF0Y2ggPSByZS5tYXRjaChyJ14oP1A8bmFtZT5cUyspLSgoP1A8ZXBvY2g+WzAtOV17MSw1fSlfKT8oP1A8dmVyc2lvbj5bMC05XVxTKikkJywKKyAgICAgICAgICAgICAgICAgICAgICAgICBuX2VfdikKKyAgICAgICAgaWYgbm90IG1hdGNoOgorICAgICAgICAgICAgIyBJZiB3ZSdyZSBub3QgYWJsZSB0byBwYXJzZSBhIHZlcnNpb24gc3RhcnRpbmcgd2l0aCBhIG51bWJlciwganVzdAorICAgICAgICAgICAgIyB0YWtlIHRoZSBwYXJ0IGFmdGVyIGxhc3QgZGFzaAorICAgICAgICAgICAgbWF0Y2ggPSByZS5tYXRjaChyJ14oP1A8bmFtZT5cUyspLSgoP1A8ZXBvY2g+WzAtOV17MSw1fSlfKT8oP1A8dmVyc2lvbj5bXi1dKykkJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbl9lX3YpCisgICAgICAgIG5hbWUgPSBtYXRjaC5ncm91cCgnbmFtZScpCisgICAgICAgIHZlcnNpb24gPSBtYXRjaC5ncm91cCgndmVyc2lvbicpCisgICAgICAgIGVwb2NoID0gbWF0Y2guZ3JvdXAoJ2Vwb2NoJykKKyAgICAgICAgcmV0dXJuIG5hbWUsIGVwb2NoLCB2ZXJzaW9uLCByZXZpc2lvbgorCisgICAgaWYgbm90IG9zLnBhdGguaXNmaWxlKG9zLnBhdGguam9pbihic19kaXIsICdidWlsZF9zdGF0cycpKToKKyAgICAgICAgcmFpc2UgU2NyaXB0RXJyb3IoInt9IGRvZXMgbm90IGxvb2sgbGlrZSBhIGJ1aWxkc3RhdHMgZGlyZWN0b3J5Ii5mb3JtYXQoYnNfZGlyKSkKKworICAgIGxvZy5kZWJ1ZygiUmVhZGluZyBidWlsZHN0YXRzIGRpcmVjdG9yeSAlcyIsIGJzX2RpcikKKworICAgIGJ1aWxkc3RhdHMgPSB7fQorICAgIHN1YmRpcnMgPSBvcy5saXN0ZGlyKGJzX2RpcikKKyAgICBmb3IgZGlybmFtZSBpbiBzdWJkaXJzOgorICAgICAgICByZWNpcGVfZGlyID0gb3MucGF0aC5qb2luKGJzX2RpciwgZGlybmFtZSkKKyAgICAgICAgaWYgbm90IG9zLnBhdGguaXNkaXIocmVjaXBlX2Rpcik6CisgICAgICAgICAgICBjb250aW51ZQorICAgICAgICBuYW1lLCBlcG9jaCwgdmVyc2lvbiwgcmV2aXNpb24gPSBzcGxpdF9uZXZyKGRpcm5hbWUpCisgICAgICAgIHJlY2lwZV9icyA9IHsnbmV2cic6IGRpcm5hbWUsCisgICAgICAgICAgICAgICAgICAgICAnbmFtZSc6IG5hbWUsCisgICAgICAgICAgICAgICAgICAgICAnZXBvY2gnOiBlcG9jaCwKKyAgICAgICAgICAgICAgICAgICAgICd2ZXJzaW9uJzogdmVyc2lvbiwKKyAgICAgICAgICAgICAgICAgICAgICdyZXZpc2lvbic6IHJldmlzaW9uLAorICAgICAgICAgICAgICAgICAgICAgJ3Rhc2tzJzoge319CisgICAgICAgIGZvciB0YXNrIGluIG9zLmxpc3RkaXIocmVjaXBlX2Rpcik6CisgICAgICAgICAgICByZWNpcGVfYnNbJ3Rhc2tzJ11bdGFza10gPSBbcmVhZF9idWlsZHN0YXRzX2ZpbGUoCisgICAgICAgICAgICAgICAgICAgIG9zLnBhdGguam9pbihyZWNpcGVfZGlyLCB0YXNrKSldCisgICAgICAgIGlmIG5hbWUgaW4gYnVpbGRzdGF0czoKKyAgICAgICAgICAgIHJhaXNlIFNjcmlwdEVycm9yKCJDYW5ub3QgaGFuZGxlIG11bHRpcGxlIHZlcnNpb25zIG9mIHRoZSBzYW1lICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJwYWNrYWdlICh7fSkiLmZvcm1hdChuYW1lKSkKKyAgICAgICAgYnVpbGRzdGF0c1tuYW1lXSA9IHJlY2lwZV9icworCisgICAgcmV0dXJuIGJ1aWxkc3RhdHMKKworCitkZWYgYnNfYXBwZW5kKGRzdCwgc3JjKToKKyAgICAiIiJBcHBlbmQgZGF0YSBmcm9tIGFub3RoZXIgYnVpbGRzdGF0cyIiIgorICAgIGlmIHNldChkc3Qua2V5cygpKSAhPSBzZXQoc3JjLmtleXMoKSk6CisgICAgICAgIHJhaXNlIFNjcmlwdEVycm9yKCJSZWZ1c2luZyB0byBqb2luIGJ1aWxkc3RhdHMsIHNldCBvZiBwYWNrYWdlcyBpcyAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICJkaWZmZXJlbnQiKQorICAgIGZvciBwa2csIGRhdGEgaW4gZHN0Lml0ZW1zKCk6CisgICAgICAgIGlmIGRhdGFbJ25ldnInXSAhPSBzcmNbcGtnXVsnbmV2ciddOgorICAgICAgICAgICAgcmFpc2UgU2NyaXB0RXJyb3IoIlJlZnVzaW5nIHRvIGpvaW4gYnVpbGRzdGF0cywgcGFja2FnZSB2ZXJzaW9uICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJkaWZmZXJzOiB7fSB2cy4ge30iLmZvcm1hdChkYXRhWyduZXZyJ10sIHNyY1twa2ddWyduZXZyJ10pKQorICAgICAgICBpZiBzZXQoZGF0YVsndGFza3MnXS5rZXlzKCkpICE9IHNldChzcmNbcGtnXVsndGFza3MnXS5rZXlzKCkpOgorICAgICAgICAgICAgcmFpc2UgU2NyaXB0RXJyb3IoIlJlZnVzaW5nIHRvIGpvaW4gYnVpbGRzdGF0cywgc2V0IG9mIHRhc2tzICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJpbiB7fSBkaWZmZXIiLmZvcm1hdChwa2cpKQorICAgICAgICBmb3IgdGFza25hbWUsIHRhc2tkYXRhIGluIGRhdGFbJ3Rhc2tzJ10uaXRlbXMoKToKKyAgICAgICAgICAgIHRhc2tkYXRhLmV4dGVuZChzcmNbcGtnXVsndGFza3MnXVt0YXNrbmFtZV0pCisKKworZGVmIHJlYWRfYnVpbGRzdGF0c19qc29uKHBhdGgpOgorICAgICIiIlJlYWQgYnVpbGRzdGF0cyBmcm9tIEpTT04gZmlsZSIiIgorICAgIGJ1aWxkc3RhdHMgPSB7fQorICAgIHdpdGggb3BlbihwYXRoKSBhcyBmb2JqOgorICAgICAgICBic19qc29uID0ganNvbi5sb2FkKGZvYmopCisgICAgZm9yIHJlY2lwZV9icyBpbiBic19qc29uOgorICAgICAgICBpZiByZWNpcGVfYnNbJ25hbWUnXSBpbiBidWlsZHN0YXRzOgorICAgICAgICAgICAgcmFpc2UgU2NyaXB0RXJyb3IoIkNhbm5vdCBoYW5kbGUgbXVsdGlwbGUgdmVyc2lvbnMgb2YgdGhlIHNhbWUgIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInBhY2thZ2UgKHt9KSIuZm9ybWF0KHJlY2lwZV9ic1snbmFtZSddKSkKKworICAgICAgICBpZiByZWNpcGVfYnNbJ2Vwb2NoJ10gaXMgTm9uZToKKyAgICAgICAgICAgIHJlY2lwZV9ic1snbmV2ciddID0gInt9LXt9LXt9Ii5mb3JtYXQocmVjaXBlX2JzWyduYW1lJ10sIHJlY2lwZV9ic1sndmVyc2lvbiddLCByZWNpcGVfYnNbJ3JldmlzaW9uJ10pCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICByZWNpcGVfYnNbJ25ldnInXSA9ICJ7fS17fV97fS17fSIuZm9ybWF0KHJlY2lwZV9ic1snbmFtZSddLCByZWNpcGVfYnNbJ2Vwb2NoJ10sIHJlY2lwZV9ic1sndmVyc2lvbiddLCByZWNpcGVfYnNbJ3JldmlzaW9uJ10pCisKKyAgICAgICAgZm9yIHRhc2ssIGRhdGEgaW4gcmVjaXBlX2JzWyd0YXNrcyddLmNvcHkoKS5pdGVtcygpOgorICAgICAgICAgICAgcmVjaXBlX2JzWyd0YXNrcyddW3Rhc2tdID0gW0JTVGFzayhkYXRhKV0KKworICAgICAgICBidWlsZHN0YXRzW3JlY2lwZV9ic1snbmFtZSddXSA9IHJlY2lwZV9icworCisgICAgcmV0dXJuIGJ1aWxkc3RhdHMKKworCitkZWYgcmVhZF9idWlsZHN0YXRzKHBhdGgsIG11bHRpKToKKyAgICAiIiJSZWFkIGJ1aWxkc3RhdHMiIiIKKyAgICBpZiBub3Qgb3MucGF0aC5leGlzdHMocGF0aCk6CisgICAgICAgIHJhaXNlIFNjcmlwdEVycm9yKCJObyBzdWNoIGZpbGUgb3IgZGlyZWN0b3J5OiB7fSIuZm9ybWF0KHBhdGgpKQorCisgICAgaWYgb3MucGF0aC5pc2ZpbGUocGF0aCk6CisgICAgICAgIHJldHVybiByZWFkX2J1aWxkc3RhdHNfanNvbihwYXRoKQorCisgICAgaWYgb3MucGF0aC5pc2ZpbGUob3MucGF0aC5qb2luKHBhdGgsICdidWlsZF9zdGF0cycpKToKKyAgICAgICAgcmV0dXJuIHJlYWRfYnVpbGRzdGF0c19kaXIocGF0aCkKKworICAgICMgSGFuZGxlIGEgbm9uLWJ1aWxkc3RhdCBkaXJlY3RvcnkKKyAgICBzdWJwYXRocyA9IHNvcnRlZChnbG9iLmdsb2IocGF0aCArICcvKicpKQorICAgIGlmIGxlbihzdWJwYXRocykgPiAxOgorICAgICAgICBpZiBtdWx0aToKKyAgICAgICAgICAgIGxvZy5pbmZvKCJBdmVyYWdpbmcgb3ZlciB7fSBidWlsZHN0YXRzIGZyb20ge30iLmZvcm1hdCgKKyAgICAgICAgICAgICAgICAgICAgIGxlbihzdWJwYXRocyksIHBhdGgpKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgcmFpc2UgU2NyaXB0RXJyb3IoIk11bHRpcGxlIGJ1aWxkc3RhdHMgZm91bmQgaW4gJ3t9Jy4gUGxlYXNlIGdpdmUgIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImEgc2luZ2xlIGJ1aWxkc3RhdCBkaXJlY3Rvcnkgb2YgdXNlIHRoZSAtLW11bHRpICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJvcHRpb24iLmZvcm1hdChwYXRoKSkKKyAgICBicyA9IE5vbmUKKyAgICBmb3Igc3VicGF0aCBpbiBzdWJwYXRoczoKKyAgICAgICAgaWYgb3MucGF0aC5pc2ZpbGUoc3VicGF0aCk6CisgICAgICAgICAgICB0bXBicyA9IHJlYWRfYnVpbGRzdGF0c19qc29uKHN1YnBhdGgpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICB0bXBicyA9IHJlYWRfYnVpbGRzdGF0c19kaXIoc3VicGF0aCkKKyAgICAgICAgaWYgbm90IGJzOgorICAgICAgICAgICAgYnMgPSB0bXBicworICAgICAgICBlbHNlOgorICAgICAgICAgICAgbG9nLmRlYnVnKCJKb2luaW5nIGJ1aWxkc3RhdHMiKQorICAgICAgICAgICAgYnNfYXBwZW5kKGJzLCB0bXBicykKKworICAgIGlmIG5vdCBiczoKKyAgICAgICAgcmFpc2UgU2NyaXB0RXJyb3IoIk5vIGJ1aWxkc3RhdHMgZm91bmQgdW5kZXIge30iLmZvcm1hdChwYXRoKSkKKyAgICByZXR1cm4gYnMKKworCitkZWYgcHJpbnRfdmVyX2RpZmYoYnMxLCBiczIpOgorICAgICIiIlByaW50IHBhY2thZ2UgdmVyc2lvbiBkaWZmZXJlbmNlcyIiIgorICAgIHBrZ3MxID0gc2V0KGJzMS5rZXlzKCkpCisgICAgcGtnczIgPSBzZXQoYnMyLmtleXMoKSkKKyAgICBuZXdfcGtncyA9IHBrZ3MyIC0gcGtnczEKKyAgICBkZWxldGVkX3BrZ3MgPSBwa2dzMSAtIHBrZ3MyCisKKyAgICBlY2hhbmdlZCA9IFtdCisgICAgdmNoYW5nZWQgPSBbXQorICAgIHJjaGFuZ2VkID0gW10KKyAgICB1bmNoYW5nZWQgPSBbXQorICAgIGNvbW1vbl9wa2dzID0gcGtnczIuaW50ZXJzZWN0aW9uKHBrZ3MxKQorICAgIGlmIGNvbW1vbl9wa2dzOgorICAgICAgICBmb3IgcGtnIGluIGNvbW1vbl9wa2dzOgorICAgICAgICAgICAgaWYgYnMxW3BrZ11bJ2Vwb2NoJ10gIT0gYnMyW3BrZ11bJ2Vwb2NoJ106CisgICAgICAgICAgICAgICAgZWNoYW5nZWQuYXBwZW5kKHBrZykKKyAgICAgICAgICAgIGVsaWYgYnMxW3BrZ11bJ3ZlcnNpb24nXSAhPSBiczJbcGtnXVsndmVyc2lvbiddOgorICAgICAgICAgICAgICAgIHZjaGFuZ2VkLmFwcGVuZChwa2cpCisgICAgICAgICAgICBlbGlmIGJzMVtwa2ddWydyZXZpc2lvbiddICE9IGJzMltwa2ddWydyZXZpc2lvbiddOgorICAgICAgICAgICAgICAgIHJjaGFuZ2VkLmFwcGVuZChwa2cpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHVuY2hhbmdlZC5hcHBlbmQocGtnKQorCisgICAgbWF4bGVuID0gbWF4KFtsZW4ocGtnKSBmb3IgcGtnIGluIHBrZ3MxLnVuaW9uKHBrZ3MyKV0pCisgICAgZm10X3N0ciA9ICIgIHs6e21heGxlbn19ICh7fSkiCisjICAgIGlmIHVuY2hhbmdlZDoKKyMgICAgICAgIHByaW50KCJcblVOQ0hBTkdFRCBQQUNLQUdFUzoiKQorIyAgICAgICAgcHJpbnQoIi0tLS0tLS0tLS0tLS0tLS0tLS0iKQorIyAgICAgICAgbWF4bGVuID0gbWF4KFtsZW4ocGtnKSBmb3IgcGtnIGluIHVuY2hhbmdlZF0pCisjICAgICAgICBmb3IgcGtnIGluIHNvcnRlZCh1bmNoYW5nZWQpOgorIyAgICAgICAgICAgIHByaW50KGZtdF9zdHIuZm9ybWF0KHBrZywgYnMyW3BrZ11bJ25ldnInXSwgbWF4bGVuPW1heGxlbikpCisKKyAgICBpZiBuZXdfcGtnczoKKyAgICAgICAgcHJpbnQoIlxuTkVXIFBBQ0tBR0VTOiIpCisgICAgICAgIHByaW50KCItLS0tLS0tLS0tLS0tIikKKyAgICAgICAgZm9yIHBrZyBpbiBzb3J0ZWQobmV3X3BrZ3MpOgorICAgICAgICAgICAgcHJpbnQoZm10X3N0ci5mb3JtYXQocGtnLCBiczJbcGtnXVsnbmV2ciddLCBtYXhsZW49bWF4bGVuKSkKKworICAgIGlmIGRlbGV0ZWRfcGtnczoKKyAgICAgICAgcHJpbnQoIlxuREVMRVRFRCBQQUNLQUdFUzoiKQorICAgICAgICBwcmludCgiLS0tLS0tLS0tLS0tLS0tLS0iKQorICAgICAgICBmb3IgcGtnIGluIHNvcnRlZChkZWxldGVkX3BrZ3MpOgorICAgICAgICAgICAgcHJpbnQoZm10X3N0ci5mb3JtYXQocGtnLCBiczFbcGtnXVsnbmV2ciddLCBtYXhsZW49bWF4bGVuKSkKKworICAgIGZtdF9zdHIgPSAiICB7MDp7bWF4bGVufX0gezE6PDIwfSAgICAoezJ9KSIKKyAgICBpZiByY2hhbmdlZDoKKyAgICAgICAgcHJpbnQoIlxuUkVWSVNJT04gQ0hBTkdFRDoiKQorICAgICAgICBwcmludCgiLS0tLS0tLS0tLS0tLS0tLS0iKQorICAgICAgICBmb3IgcGtnIGluIHNvcnRlZChyY2hhbmdlZCk6CisgICAgICAgICAgICBmaWVsZDEgPSAie30gLT4ge30iLmZvcm1hdChwa2csIGJzMVtwa2ddWydyZXZpc2lvbiddLCBiczJbcGtnXVsncmV2aXNpb24nXSkKKyAgICAgICAgICAgIGZpZWxkMiA9ICJ7fSAtPiB7fSIuZm9ybWF0KGJzMVtwa2ddWyduZXZyJ10sIGJzMltwa2ddWyduZXZyJ10pCisgICAgICAgICAgICBwcmludChmbXRfc3RyLmZvcm1hdChwa2csIGZpZWxkMSwgZmllbGQyLCBtYXhsZW49bWF4bGVuKSkKKworICAgIGlmIHZjaGFuZ2VkOgorICAgICAgICBwcmludCgiXG5WRVJTSU9OIENIQU5HRUQ6IikKKyAgICAgICAgcHJpbnQoIi0tLS0tLS0tLS0tLS0tLS0iKQorICAgICAgICBmb3IgcGtnIGluIHNvcnRlZCh2Y2hhbmdlZCk6CisgICAgICAgICAgICBmaWVsZDEgPSAie30gLT4ge30iLmZvcm1hdChiczFbcGtnXVsndmVyc2lvbiddLCBiczJbcGtnXVsndmVyc2lvbiddKQorICAgICAgICAgICAgZmllbGQyID0gInt9IC0+IHt9Ii5mb3JtYXQoYnMxW3BrZ11bJ25ldnInXSwgYnMyW3BrZ11bJ25ldnInXSkKKyAgICAgICAgICAgIHByaW50KGZtdF9zdHIuZm9ybWF0KHBrZywgZmllbGQxLCBmaWVsZDIsIG1heGxlbj1tYXhsZW4pKQorCisgICAgaWYgZWNoYW5nZWQ6CisgICAgICAgIHByaW50KCJcbkVQT0NIIENIQU5HRUQ6IikKKyAgICAgICAgcHJpbnQoIi0tLS0tLS0tLS0tLS0tIikKKyAgICAgICAgZm9yIHBrZyBpbiBzb3J0ZWQoZWNoYW5nZWQpOgorICAgICAgICAgICAgZmllbGQxID0gInt9IC0+IHt9Ii5mb3JtYXQocGtnLCBiczFbcGtnXVsnZXBvY2gnXSwgYnMyW3BrZ11bJ2Vwb2NoJ10pCisgICAgICAgICAgICBmaWVsZDIgPSAie30gLT4ge30iLmZvcm1hdChiczFbcGtnXVsnbmV2ciddLCBiczJbcGtnXVsnbmV2ciddKQorICAgICAgICAgICAgcHJpbnQoZm10X3N0ci5mb3JtYXQocGtnLCBmaWVsZDEsIGZpZWxkMiwgbWF4bGVuPW1heGxlbikpCisKKworZGVmIHByaW50X3Rhc2tfZGlmZihiczEsIGJzMiwgdmFsX3R5cGUsIG1pbl92YWw9MCwgbWluX2Fic2RpZmY9MCwgc29ydF9ieT0oJ2Fic2RpZmYnLCkpOgorICAgICIiIkRpZmYgdGFzayBleGVjdXRpb24gdGltZXMiIiIKKyAgICBkZWYgdmFsX3RvX3N0cih2YWwsIGh1bWFuX3JlYWRhYmxlPUZhbHNlKToKKyAgICAgICAgIiIiQ29udmVydCByYXcgdmFsdWUgdG8gcHJpbnRhYmxlIHN0cmluZyIiIgorICAgICAgICBkZWYgaG1zX3RpbWUoc2Vjcyk6CisgICAgICAgICAgICAiIiJHZXQgdGltZSBpbiBodW1hbi1yZWFkYWJsZSBISDpNTTpTUyBmb3JtYXQiIiIKKyAgICAgICAgICAgIGggPSBpbnQoc2VjcyAvIDM2MDApCisgICAgICAgICAgICBtID0gaW50KChzZWNzICUgMzYwMCkgLyA2MCkKKyAgICAgICAgICAgIHMgPSBzZWNzICUgNjAKKyAgICAgICAgICAgIGlmIGggPT0gMDoKKyAgICAgICAgICAgICAgICByZXR1cm4gIns6MDJkfTp7OjA0LjFmfSIuZm9ybWF0KG0sIHMpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHJldHVybiAiezpkfTp7OjAyZH06ezowNC4xZn0iLmZvcm1hdChoLCBtLCBzKQorCisgICAgICAgIGlmICd0aW1lJyBpbiB2YWxfdHlwZToKKyAgICAgICAgICAgIGlmIGh1bWFuX3JlYWRhYmxlOgorICAgICAgICAgICAgICAgIHJldHVybiBobXNfdGltZSh2YWwpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHJldHVybiAiezouMWZ9cyIuZm9ybWF0KHZhbCkKKyAgICAgICAgZWxpZiAnYnl0ZXMnIGluIHZhbF90eXBlIGFuZCBodW1hbl9yZWFkYWJsZToKKyAgICAgICAgICAgICAgICBwcmVmaXggPSBbJycsICdLaScsICdNaScsICdHaScsICdUaScsICdQaSddCisgICAgICAgICAgICAgICAgZGVjID0gaW50KG1hdGgubG9nKHZhbCwgMikgLyAxMCkKKyAgICAgICAgICAgICAgICBwcmVjID0gMSBpZiBkZWMgPiAwIGVsc2UgMAorICAgICAgICAgICAgICAgIHJldHVybiAiezoue3ByZWN9Zn17fUIiLmZvcm1hdCh2YWwgLyAoMiAqKiAoMTAgKiBkZWMpKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJlZml4W2RlY10sIHByZWM9cHJlYykKKyAgICAgICAgZWxpZiAnb3BzJyBpbiB2YWxfdHlwZSBhbmQgaHVtYW5fcmVhZGFibGU6CisgICAgICAgICAgICAgICAgcHJlZml4ID0gWycnLCAnaycsICdNJywgJ0cnLCAnVCcsICdQJ10KKyAgICAgICAgICAgICAgICBkZWMgPSBpbnQobWF0aC5sb2codmFsLCAxMDAwKSkKKyAgICAgICAgICAgICAgICBwcmVjID0gMSBpZiBkZWMgPiAwIGVsc2UgMAorICAgICAgICAgICAgICAgIHJldHVybiAiezoue3ByZWN9Zn17fW9wcyIuZm9ybWF0KHZhbCAvICgxMDAwICoqIGRlYyksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJlZml4W2RlY10sIHByZWM9cHJlYykKKyAgICAgICAgcmV0dXJuIHN0cihpbnQodmFsKSkKKworICAgIGRlZiBzdW1fdmFscyhidWlsZHN0YXRzKToKKyAgICAgICAgIiIiR2V0IGN1bXVsYXRpdmUgc3VtIG9mIGFsbCB0YXNrcyIiIgorICAgICAgICB0b3RhbCA9IDAuMAorICAgICAgICBmb3IgcmVjaXBlX2RhdGEgaW4gYnVpbGRzdGF0cy52YWx1ZXMoKToKKyAgICAgICAgICAgIGZvciBic190YXNrIGluIHJlY2lwZV9kYXRhWyd0YXNrcyddLnZhbHVlcygpOgorICAgICAgICAgICAgICAgIHRvdGFsICs9IHN1bShbZ2V0YXR0cihiLCB2YWxfdHlwZSkgZm9yIGIgaW4gYnNfdGFza10pIC8gbGVuKGJzX3Rhc2spCisgICAgICAgIHJldHVybiB0b3RhbAorCisgICAgdGFza3NfZGlmZiA9IFtdCisKKyAgICBpZiBtaW5fdmFsOgorICAgICAgICBwcmludCgiSWdub3JpbmcgdGFza3MgbGVzcyB0aGFuIHt9ICh7fSkiLmZvcm1hdCgKKyAgICAgICAgICAgICAgICB2YWxfdG9fc3RyKG1pbl92YWwsIFRydWUpLCB2YWxfdG9fc3RyKG1pbl92YWwpKSkKKyAgICBpZiBtaW5fYWJzZGlmZjoKKyAgICAgICAgcHJpbnQoIklnbm9yaW5nIGRpZmZlcmVuY2VzIGxlc3MgdGhhbiB7fSAoe30pIi5mb3JtYXQoCisgICAgICAgICAgICAgICAgdmFsX3RvX3N0cihtaW5fYWJzZGlmZiwgVHJ1ZSksIHZhbF90b19zdHIobWluX2Fic2RpZmYpKSkKKworICAgICMgUHJlcGFyZSB0aGUgZGF0YQorICAgIHBrZ3MgPSBzZXQoYnMxLmtleXMoKSkudW5pb24oc2V0KGJzMi5rZXlzKCkpKQorICAgIGZvciBwa2cgaW4gcGtnczoKKyAgICAgICAgdGFza3MxID0gYnMxW3BrZ11bJ3Rhc2tzJ10gaWYgcGtnIGluIGJzMSBlbHNlIHt9CisgICAgICAgIHRhc2tzMiA9IGJzMltwa2ddWyd0YXNrcyddIGlmIHBrZyBpbiBiczIgZWxzZSB7fQorICAgICAgICBpZiBub3QgdGFza3MxOgorICAgICAgICAgICAgcGtnX29wID0gJysgJworICAgICAgICBlbGlmIG5vdCB0YXNrczI6CisgICAgICAgICAgICBwa2dfb3AgPSAnLSAnCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBwa2dfb3AgPSAnICAnCisKKyAgICAgICAgZm9yIHRhc2sgaW4gc2V0KHRhc2tzMS5rZXlzKCkpLnVuaW9uKHNldCh0YXNrczIua2V5cygpKSk6CisgICAgICAgICAgICB0YXNrX29wID0gJyAgJworICAgICAgICAgICAgaWYgdGFzayBpbiB0YXNrczE6CisgICAgICAgICAgICAgICAgIyBBdmVyYWdlIG92ZXIgYWxsIHZhbHVlcworICAgICAgICAgICAgICAgIHZhbDEgPSBbZ2V0YXR0cihiLCB2YWxfdHlwZSkgZm9yIGIgaW4gYnMxW3BrZ11bJ3Rhc2tzJ11bdGFza11dCisgICAgICAgICAgICAgICAgdmFsMSA9IHN1bSh2YWwxKSAvIGxlbih2YWwxKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICB0YXNrX29wID0gJysgJworICAgICAgICAgICAgICAgIHZhbDEgPSAwCisgICAgICAgICAgICBpZiB0YXNrIGluIHRhc2tzMjoKKyAgICAgICAgICAgICAgICAjIEF2ZXJhZ2Ugb3ZlciBhbGwgdmFsdWVzCisgICAgICAgICAgICAgICAgdmFsMiA9IFtnZXRhdHRyKGIsIHZhbF90eXBlKSBmb3IgYiBpbiBiczJbcGtnXVsndGFza3MnXVt0YXNrXV0KKyAgICAgICAgICAgICAgICB2YWwyID0gc3VtKHZhbDIpIC8gbGVuKHZhbDIpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHZhbDIgPSAwCisgICAgICAgICAgICAgICAgdGFza19vcCA9ICctICcKKworICAgICAgICAgICAgaWYgdmFsMSA9PSAwOgorICAgICAgICAgICAgICAgIHJlbGRpZmYgPSBmbG9hdCgnaW5mJykKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgcmVsZGlmZiA9IDEwMCAqICh2YWwyIC0gdmFsMSkgLyB2YWwxCisKKyAgICAgICAgICAgIGlmIG1heCh2YWwxLCB2YWwyKSA8IG1pbl92YWw6CisgICAgICAgICAgICAgICAgbG9nLmRlYnVnKCJGaWx0ZXJpbmcgb3V0ICVzOiVzICglcykiLCBwa2csIHRhc2ssCisgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbF90b19zdHIobWF4KHZhbDEsIHZhbDIpKSkKKyAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgaWYgYWJzKHZhbDIgLSB2YWwxKSA8IG1pbl9hYnNkaWZmOgorICAgICAgICAgICAgICAgIGxvZy5kZWJ1ZygiRmlsdGVyaW5nIG91dCAlczolcyAoZGlmZmVyZW5jZSBvZiAlcykiLCBwa2csIHRhc2ssCisgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbF90b19zdHIodmFsMi12YWwxKSkKKyAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgdGFza3NfZGlmZi5hcHBlbmQoVGFza0RpZmYocGtnLCBwa2dfb3AsIHRhc2ssIHRhc2tfb3AsIHZhbDEsIHZhbDIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWwyLXZhbDEsIHJlbGRpZmYpKQorCisgICAgIyBTb3J0IG91ciBsaXN0CisgICAgZm9yIGZpZWxkIGluIHJldmVyc2VkKHNvcnRfYnkpOgorICAgICAgICBpZiBmaWVsZC5zdGFydHN3aXRoKCctJyk6CisgICAgICAgICAgICBmaWVsZCA9IGZpZWxkWzE6XQorICAgICAgICAgICAgcmV2ZXJzZSA9IFRydWUKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHJldmVyc2UgPSBGYWxzZQorICAgICAgICB0YXNrc19kaWZmID0gc29ydGVkKHRhc2tzX2RpZmYsIGtleT1hdHRyZ2V0dGVyKGZpZWxkKSwgcmV2ZXJzZT1yZXZlcnNlKQorCisgICAgbGluZWRhdGEgPSBbKCcgICcsICdQS0cnLCAnICAnLCAnVEFTSycsICdBQlNESUZGJywgJ1JFTERJRkYnLAorICAgICAgICAgICAgICAgIHZhbF90eXBlLnVwcGVyKCkgKyAnMScsIHZhbF90eXBlLnVwcGVyKCkgKyAnMicpXQorICAgIGZpZWxkX2xlbnMgPSBkaWN0KFsoJ2xlbl97fScuZm9ybWF0KGkpLCBsZW4oZikpIGZvciBpLCBmIGluIGVudW1lcmF0ZShsaW5lZGF0YVswXSldKQorCisgICAgIyBQcmVwYXJlIGZpZWxkcyBpbiBzdHJpbmcgZm9ybWF0IGFuZCBtZWFzdXJlIGZpZWxkIGxlbmd0aHMKKyAgICBmb3IgZGlmZiBpbiB0YXNrc19kaWZmOgorICAgICAgICB0YXNrX3ByZWZpeCA9IGRpZmYudGFza19vcCBpZiBkaWZmLnBrZ19vcCA9PSAnICAnIGVsc2UgJyAgJworICAgICAgICBsaW5lZGF0YS5hcHBlbmQoKGRpZmYucGtnX29wLCBkaWZmLnBrZywgdGFza19wcmVmaXgsIGRpZmYudGFzaywKKyAgICAgICAgICAgICAgICAgICAgICAgICB2YWxfdG9fc3RyKGRpZmYuYWJzZGlmZiksCisgICAgICAgICAgICAgICAgICAgICAgICAgJ3s6Ky4xZn0lJy5mb3JtYXQoZGlmZi5yZWxkaWZmKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICB2YWxfdG9fc3RyKGRpZmYudmFsdWUxKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICB2YWxfdG9fc3RyKGRpZmYudmFsdWUyKSkpCisgICAgICAgIGZvciBpLCBmaWVsZCBpbiBlbnVtZXJhdGUobGluZWRhdGFbLTFdKToKKyAgICAgICAgICAgIGtleSA9ICdsZW5fe30nLmZvcm1hdChpKQorICAgICAgICAgICAgaWYgbGVuKGZpZWxkKSA+IGZpZWxkX2xlbnNba2V5XToKKyAgICAgICAgICAgICAgICBmaWVsZF9sZW5zW2tleV0gPSBsZW4oZmllbGQpCisKKyAgICAjIFByaW50IGRhdGEKKyAgICBwcmludCgpCisgICAgZm9yIGZpZWxkcyBpbiBsaW5lZGF0YToKKyAgICAgICAgcHJpbnQoIns6e2xlbl8wfX17OntsZW5fMX19ICB7OntsZW5fMn19ezp7bGVuXzN9fSAgezo+e2xlbl80fX0gIHs6PntsZW5fNX19ICB7Oj57bGVuXzZ9fSAtPiB7OntsZW5fN319Ii5mb3JtYXQoCisgICAgICAgICAgICAgICAgKmZpZWxkcywgKipmaWVsZF9sZW5zKSkKKworICAgICMgUHJpbnQgc3VtbWFyeSBvZiB0aGUgZGlmZnMKKyAgICB0b3RhbDEgPSBzdW1fdmFscyhiczEpCisgICAgdG90YWwyID0gc3VtX3ZhbHMoYnMyKQorICAgIHByaW50KCJcbkN1bXVsYXRpdmUge306Ii5mb3JtYXQodmFsX3R5cGUpKQorICAgIHByaW50ICgiICB7fSAgICB7OisuMWZ9JSAgICB7fSAoe30pIC0+IHt9ICh7fSkiLmZvcm1hdCgKKyAgICAgICAgICAgICAgICB2YWxfdG9fc3RyKHRvdGFsMiAtIHRvdGFsMSksIDEwMCAqICh0b3RhbDItdG90YWwxKSAvIHRvdGFsMSwKKyAgICAgICAgICAgICAgICB2YWxfdG9fc3RyKHRvdGFsMSwgVHJ1ZSksIHZhbF90b19zdHIodG90YWwxKSwKKyAgICAgICAgICAgICAgICB2YWxfdG9fc3RyKHRvdGFsMiwgVHJ1ZSksIHZhbF90b19zdHIodG90YWwyKSkpCisKKworZGVmIHBhcnNlX2FyZ3MoYXJndik6CisgICAgIiIiUGFyc2UgY21kbGluZSBhcmd1bWVudHMiIiIKKyAgICBkZXNjcmlwdGlvbj0iIiIKK1NjcmlwdCBmb3IgY29tcGFyaW5nIGJ1aWxkc3RhdHMgb2YgdHdvIHNlcGFyYXRlIGJ1aWxkcy4iIiIKKyAgICBwYXJzZXIgPSBhcmdwYXJzZS5Bcmd1bWVudFBhcnNlcigKKyAgICAgICAgICAgIGZvcm1hdHRlcl9jbGFzcz1hcmdwYXJzZS5Bcmd1bWVudERlZmF1bHRzSGVscEZvcm1hdHRlciwKKyAgICAgICAgICAgIGRlc2NyaXB0aW9uPWRlc2NyaXB0aW9uKQorCisgICAgbWluX3ZhbF9kZWZhdWx0cyA9IHsnY3B1dGltZSc6IDMuMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICdyZWFkX2J5dGVzJzogNTI0Mjg4LAorICAgICAgICAgICAgICAgICAgICAgICAgJ3dyaXRlX2J5dGVzJzogNTI0Mjg4LAorICAgICAgICAgICAgICAgICAgICAgICAgJ3JlYWRfb3BzJzogNTAwLAorICAgICAgICAgICAgICAgICAgICAgICAgJ3dyaXRlX29wcyc6IDUwMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICd3YWxsdGltZSc6IDV9CisgICAgbWluX2Fic2RpZmZfZGVmYXVsdHMgPSB7J2NwdXRpbWUnOiAxLjAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3JlYWRfYnl0ZXMnOiAxMzEwNzIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3dyaXRlX2J5dGVzJzogMTMxMDcyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICdyZWFkX29wcyc6IDUwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICd3cml0ZV9vcHMnOiA1MCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAnd2FsbHRpbWUnOiAyfQorCisgICAgcGFyc2VyLmFkZF9hcmd1bWVudCgnLS1kZWJ1ZycsICctZCcsIGFjdGlvbj0nc3RvcmVfdHJ1ZScsCisgICAgICAgICAgICAgICAgICAgICAgICBoZWxwPSJWZXJib3NlIGxvZ2dpbmciKQorICAgIHBhcnNlci5hZGRfYXJndW1lbnQoJy0tdmVyLWRpZmYnLCBhY3Rpb249J3N0b3JlX3RydWUnLAorICAgICAgICAgICAgICAgICAgICAgICAgaGVscD0iU2hvdyBwYWNrYWdlIHZlcnNpb24gZGlmZmVyZW5jZXMgYW5kIGV4aXQiKQorICAgIHBhcnNlci5hZGRfYXJndW1lbnQoJy0tZGlmZi1hdHRyJywgZGVmYXVsdD0nY3B1dGltZScsCisgICAgICAgICAgICAgICAgICAgICAgICBjaG9pY2VzPW1pbl92YWxfZGVmYXVsdHMua2V5cygpLAorICAgICAgICAgICAgICAgICAgICAgICAgaGVscD0iQnVpbGRzdGF0IGF0dHJpYnV0ZSB3aGljaCB0byBjb21wYXJlIikKKyAgICBwYXJzZXIuYWRkX2FyZ3VtZW50KCctLW1pbi12YWwnLCBkZWZhdWx0PW1pbl92YWxfZGVmYXVsdHMsIHR5cGU9ZmxvYXQsCisgICAgICAgICAgICAgICAgICAgICAgICBoZWxwPSJGaWx0ZXIgb3V0IHRhc2tzIGxlc3MgdGhhbiBNSU5fVkFMLiAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJEZWZhdWx0IGRlcGVuZHMgb24gLS1kaWZmLWF0dHIuIikKKyAgICBwYXJzZXIuYWRkX2FyZ3VtZW50KCctLW1pbi1hYnNkaWZmJywgZGVmYXVsdD1taW5fYWJzZGlmZl9kZWZhdWx0cywgdHlwZT1mbG9hdCwKKyAgICAgICAgICAgICAgICAgICAgICAgIGhlbHA9IkZpbHRlciBvdXQgdGFza3Mgd2hvc2UgZGlmZmVyZW5jZSBpcyBsZXNzIHRoYW4gIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiTUlOX0FCU0RJRkYsIERlZmF1bHQgZGVwZW5kcyBvbiAtLWRpZmYtYXR0ci4iKQorICAgIHBhcnNlci5hZGRfYXJndW1lbnQoJy0tc29ydC1ieScsIGRlZmF1bHQ9J2Fic2RpZmYnLAorICAgICAgICAgICAgICAgICAgICAgICAgaGVscD0iQ29tbWEtc2VwYXJhdGVkIGxpc3Qgb2YgZmllbGQgc29ydCBvcmRlci4gIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiUHJlcGVuZCB0aGUgZmllbGQgbmFtZSB3aXRoICctJyBmb3IgcmV2ZXJzZWQgc29ydC4gIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiQXZhaWxhYmxlIGZpZWxkcyBhcmU6IHt9Ii5mb3JtYXQoJywgJy5qb2luKHRhc2tkaWZmX2ZpZWxkcykpKQorICAgIHBhcnNlci5hZGRfYXJndW1lbnQoJy0tbXVsdGknLCBhY3Rpb249J3N0b3JlX3RydWUnLAorICAgICAgICAgICAgICAgICAgICAgICAgaGVscD0iUmVhZCBhbGwgYnVpbGRzdGF0cyBmcm9tIHRoZSBnaXZlbiBwYXRocyBhbmQgIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiYXZlcmFnZSBvdmVyIHRoZW0iKQorICAgIHBhcnNlci5hZGRfYXJndW1lbnQoJ2J1aWxkc3RhdHMxJywgbWV0YXZhcj0nQlVJTERTVEFUUzEnLCBoZWxwPSInTGVmdCcgYnVpbGRzdGF0IikKKyAgICBwYXJzZXIuYWRkX2FyZ3VtZW50KCdidWlsZHN0YXRzMicsIG1ldGF2YXI9J0JVSUxEU1RBVFMyJywgaGVscD0iJ1JpZ2h0JyBidWlsZHN0YXQiKQorCisgICAgYXJncyA9IHBhcnNlci5wYXJzZV9hcmdzKGFyZ3YpCisKKyAgICAjIFdlIGRvIG5vdCBuZWRkL3dhbnQgdG8gcmVhZCBhbGwgYnVpbGRzdGF0cyBpZiB3ZSBqdXN0IHdhbnQgdG8gbG9vayBhdCB0aGUKKyAgICAjIHBhY2thZ2UgdmVyc2lvbnMKKyAgICBpZiBhcmdzLnZlcl9kaWZmOgorICAgICAgICBhcmdzLm11bHRpID0gRmFsc2UKKworICAgICMgSGFuZGxlIGRlZmF1bHRzIGZvciB0aGUgZmlsdGVyIGFyZ3VtZW50cworICAgIGlmIGFyZ3MubWluX3ZhbCBpcyBtaW5fdmFsX2RlZmF1bHRzOgorICAgICAgICBhcmdzLm1pbl92YWwgPSBtaW5fdmFsX2RlZmF1bHRzW2FyZ3MuZGlmZl9hdHRyXQorICAgIGlmIGFyZ3MubWluX2Fic2RpZmYgaXMgbWluX2Fic2RpZmZfZGVmYXVsdHM6CisgICAgICAgIGFyZ3MubWluX2Fic2RpZmYgPSBtaW5fYWJzZGlmZl9kZWZhdWx0c1thcmdzLmRpZmZfYXR0cl0KKworICAgIHJldHVybiBhcmdzCisKKworZGVmIG1haW4oYXJndj1Ob25lKToKKyAgICAiIiJTY3JpcHQgZW50cnkgcG9pbnQiIiIKKyAgICBhcmdzID0gcGFyc2VfYXJncyhhcmd2KQorICAgIGlmIGFyZ3MuZGVidWc6CisgICAgICAgIGxvZy5zZXRMZXZlbChsb2dnaW5nLkRFQlVHKQorCisgICAgIyBWYWxpZGF0ZSBzb3J0IGZpZWxkcworICAgIHNvcnRfYnkgPSBbXQorICAgIGZvciBmaWVsZCBpbiBhcmdzLnNvcnRfYnkuc3BsaXQoJywnKToKKyAgICAgICAgaWYgZmllbGQubHN0cmlwKCctJykgbm90IGluIHRhc2tkaWZmX2ZpZWxkczoKKyAgICAgICAgICAgIGxvZy5lcnJvcigiSW52YWxpZCBzb3J0IGZpZWxkICclcycgKG11c3QgYmUgb25lIG9mOiAlcykiICUKKyAgICAgICAgICAgICAgICAgICAgICAoZmllbGQsICcsICcuam9pbih0YXNrZGlmZl9maWVsZHMpKSkKKyAgICAgICAgICAgIHN5cy5leGl0KDEpCisgICAgICAgIHNvcnRfYnkuYXBwZW5kKGZpZWxkKQorCisgICAgdHJ5OgorICAgICAgICBiczEgPSByZWFkX2J1aWxkc3RhdHMoYXJncy5idWlsZHN0YXRzMSwgYXJncy5tdWx0aSkKKyAgICAgICAgYnMyID0gcmVhZF9idWlsZHN0YXRzKGFyZ3MuYnVpbGRzdGF0czIsIGFyZ3MubXVsdGkpCisKKyAgICAgICAgaWYgYXJncy52ZXJfZGlmZjoKKyAgICAgICAgICAgIHByaW50X3Zlcl9kaWZmKGJzMSwgYnMyKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgcHJpbnRfdGFza19kaWZmKGJzMSwgYnMyLCBhcmdzLmRpZmZfYXR0ciwgYXJncy5taW5fdmFsLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyZ3MubWluX2Fic2RpZmYsIHNvcnRfYnkpCisgICAgZXhjZXB0IFNjcmlwdEVycm9yIGFzIGVycjoKKyAgICAgICAgbG9nLmVycm9yKHN0cihlcnIpKQorICAgICAgICByZXR1cm4gMQorICAgIHJldHVybiAwCisKK2lmIF9fbmFtZV9fID09ICJfX21haW5fXyI6CisgICAgc3lzLmV4aXQobWFpbigpKQpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L3NjcmlwdHMvY2xlYW51cC13b3JrZGlyIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L3NjcmlwdHMvY2xlYW51cC13b3JrZGlyCmluZGV4IDAxZWJkNTIuLjk4NzY5ZjYgMTAwNzU1Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9zY3JpcHRzL2NsZWFudXAtd29ya2RpcgorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvc2NyaXB0cy9jbGVhbnVwLXdvcmtkaXIKQEAgLTEsNCArMSw0IEBACi0jIS91c3IvYmluL2VudiBweXRob24KKyMhL3Vzci9iaW4vZW52IHB5dGhvbjMKIAogIyBDb3B5cmlnaHQgKGMpIDIwMTIgV2luZCBSaXZlciBTeXN0ZW1zLCBJbmMuCiAjCkBAIC0yNyw3ICsyNyw3IEBACiBwYXJzZXIgPSBOb25lCiAKIGRlZiBlcnJfcXVpdChtc2cpOgotICAgIHByaW50IG1zZworICAgIHByaW50KG1zZykKICAgICBwYXJzZXIucHJpbnRfdXNhZ2UoKQogICAgIHN5cy5leGl0KDEpCiAKQEAgLTQzLDE5ICs0MywxOSBAQAogICAgIHBpcGUgPSBzdWJwcm9jZXNzLlBvcGVuKGNtZCwgc3Rkb3V0PXN1YnByb2Nlc3MuUElQRSwgc2hlbGw9VHJ1ZSkKICAgICBvdXRwdXQgPSBwaXBlLmNvbW11bmljYXRlKClbMF0KICAgICBpZiBwaXBlLnJldHVybmNvZGUgIT0gMDoKLSAgICAgICAgcHJpbnQgIkV4ZWN1dGUgY29tbWFuZCAnJXMnIGZhaWxlZC4iICUgY21kCisgICAgICAgIHByaW50KCJFeGVjdXRlIGNvbW1hbmQgJyVzJyBmYWlsZWQuIiAlIGNtZCkKICAgICAgICAgc3lzLmV4aXQoMSkKLSAgICByZXR1cm4gb3V0cHV0CisgICAgcmV0dXJuIG91dHB1dC5kZWNvZGUoJ3V0Zi04JykKIAogZGVmIGdldF9jdXJfYXJjaF9kaXJzKHdvcmtkaXIsIGFyY2hfZGlycyk6CiAgICAgcGF0dGVybiA9IHdvcmtkaXIgKyAnLyguKj8pLycKIAotICAgIGNtZCA9ICJiaXRiYWtlIC1lIHwgZ3JlcCBeU0RLX0FSQ0g9IgorICAgIGNtZCA9ICJiaXRiYWtlIC1lIHwgZ3JlcCBeU0RLX1NZUz0iCiAgICAgb3V0cHV0ID0gcnVuX2NvbW1hbmQoY21kKQotICAgIHNka19hcmNoID0gb3V0cHV0LnNwbGl0KCciJylbMV0KKyAgICBzZGtfc3lzID0gb3V0cHV0LnNwbGl0KCciJylbMV0KIAogICAgICMgc2VsZWN0IHRoZXN0IDUgcGFja2FnZXMgdG8gZ2V0IHRoZSBkaXJzIG9mIGN1cnJlbnQgYXJjaAotICAgIHBrZ3MgPSBbJ2hpY29sb3ItaWNvbi10aGVtZScsICdiYXNlLWZpbGVzJywgJ2FjbC1uYXRpdmUnLCAnYmludXRpbHMtY3Jvc3NzZGstJyArIHNka19hcmNoLCAnbmF0aXZlc2RrLWF1dG9jb25mJ10KKyAgICBwa2dzID0gWydoaWNvbG9yLWljb24tdGhlbWUnLCAnYmFzZS1maWxlcycsICdhY2wtbmF0aXZlJywgJ2JpbnV0aWxzLWNyb3Nzc2RrLScgKyBzZGtfc3lzLCAnbmF0aXZlc2RrLWF1dG9jb25mJ10KIAogICAgIGZvciBwa2cgaW4gcGtnczoKICAgICAgICAgY21kID0gImJpdGJha2UgLWUgIiArIHBrZyArICIgfCBncmVwIF5JTUFHRV9ST09URlM9IgpAQCAtODQsNyArODQsNyBAQAogICAgIGlmIG9zLmdldGN3ZCgpICE9IGJ1aWxkZGlyOgogICAgICAgICBlcnJfcXVpdCgiUGxlYXNlIHJ1biAlcyB1bmRlcjogJXNcbiIgJSAob3MucGF0aC5iYXNlbmFtZShhcmdzWzBdKSwgYnVpbGRkaXIpKQogCi0gICAgcHJpbnQgJ1VwZGF0aW5nIGJpdGJha2UgY2FjaGVzLi4uJworICAgIHByaW50KCdVcGRhdGluZyBiaXRiYWtlIGNhY2hlcy4uLicpCiAgICAgY21kID0gImJpdGJha2UgLXMiCiAgICAgb3V0cHV0ID0gcnVuX2NvbW1hbmQoY21kKQogCkBAIC0xMjksMTMgKzEyOSwxMyBAQAogCiAgICAgIyB3b24ndCBmYWlsIGp1c3QgaW4gY2FzZQogICAgIGlmIG5vdCB0bXBkaXIgb3Igbm90IGltYWdlX3Jvb3RmczoKLSAgICAgICAgcHJpbnQgIkNhbid0IGdldCBUTVBESVIgb3IgSU1BR0VfUk9PVEZTLiIKKyAgICAgICAgcHJpbnQoIkNhbid0IGdldCBUTVBESVIgb3IgSU1BR0VfUk9PVEZTLiIpCiAgICAgICAgIHJldHVybiAxCiAKICAgICBwYXR0ZXJuID0gdG1wZGlyICsgJy8oLio/KS8oLio/KS8nCiAgICAgbSA9IHJlLm1hdGNoKHBhdHRlcm4sIGltYWdlX3Jvb3RmcykKICAgICBpZiBub3QgbToKLSAgICAgICAgcHJpbnQgIkNhbid0IGdldCBXT1JLRElSLiIKKyAgICAgICAgcHJpbnQoIkNhbid0IGdldCBXT1JLRElSLiIpCiAgICAgICAgIHJldHVybiAxCiAKICAgICB3b3JrZGlyID0gb3MucGF0aC5qb2luKHRtcGRpciwgbS5ncm91cCgxKSkKQEAgLTE3OCwxMyArMTc4LDEzIEBACiAgICAgICAgIGJyZWFrCiAKICAgICBmb3IgZCBpbiBvYnNvbGV0ZV9kaXJzOgotICAgICAgICBwcmludCAiRGVsZXRpbmcgJXMiICUgZAorICAgICAgICBwcmludCgiRGVsZXRpbmcgJXMiICUgZCkKICAgICAgICAgc2h1dGlsLnJtdHJlZShkLCBUcnVlKQogCiAgICAgaWYgbGVuKG9ic29sZXRlX2RpcnMpOgotICAgICAgICBwcmludCAnXG5Ub3RhbCAlZCBpdGVtcy4nICUgbGVuKG9ic29sZXRlX2RpcnMpCisgICAgICAgIHByaW50KCdcblRvdGFsICVkIGl0ZW1zLicgJSBsZW4ob2Jzb2xldGVfZGlycykpCiAgICAgZWxzZToKLSAgICAgICAgcHJpbnQgJ1xuTm8gb2Jzb2xldGUgZGlyZWN0b3J5IGZvdW5kIHVuZGVyICVzLicgJSB3b3JrZGlyCisgICAgICAgIHByaW50KCdcbk5vIG9ic29sZXRlIGRpcmVjdG9yeSBmb3VuZCB1bmRlciAlcy4nICUgd29ya2RpcikKIAogICAgIHJldHVybiAwCiAKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9zY3JpcHRzL2NvbWJvLWxheWVyIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L3NjcmlwdHMvY29tYm8tbGF5ZXIKaW5kZXggOTEyNzA0MS4uYjkwYmZjOCAxMDA3NTUKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L3NjcmlwdHMvY29tYm8tbGF5ZXIKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L3NjcmlwdHMvY29tYm8tbGF5ZXIKQEAgLTEsNCArMSw0IEBACi0jIS91c3IvYmluL2VudiBweXRob24KKyMhL3Vzci9iaW4vZW52IHB5dGhvbjMKICMgZXg6dHM9NDpzdz00OnN0cz00OmV0CiAjIC0qLSB0YWItd2lkdGg6IDQ7IGMtYmFzaWMtb2Zmc2V0OiA0OyBpbmRlbnQtdGFicy1tb2RlOiBuaWwgLSotCiAjCkBAIC0yNiwxMCArMjYsMTQgQEAKIGltcG9ydCBsb2dnaW5nCiBpbXBvcnQgc3VicHJvY2VzcwogaW1wb3J0IHRlbXBmaWxlCi1pbXBvcnQgQ29uZmlnUGFyc2VyCitpbXBvcnQgY29uZmlncGFyc2VyCiBpbXBvcnQgcmUKK2ltcG9ydCBjb3B5CitpbXBvcnQgcGlwZXMKK2ltcG9ydCBzaHV0aWwKIGZyb20gY29sbGVjdGlvbnMgaW1wb3J0IE9yZGVyZWREaWN0CiBmcm9tIHN0cmluZyBpbXBvcnQgVGVtcGxhdGUKK2Zyb20gZnVuY3Rvb2xzIGltcG9ydCByZWR1Y2UKIAogX192ZXJzaW9uX18gPSAiMC4yLjEiCiAKQEAgLTczLDcgKzc3LDcgQEAKICAgICAgICAgICAgICAgICBlbHNlOgogICAgICAgICAgICAgICAgICAgICAjIEFwcGx5IHNwZWNpYWwgdHlwZSB0cmFuc2Zvcm1hdGlvbnMgZm9yIHNvbWUgcHJvcGVydGllcy4KICAgICAgICAgICAgICAgICAgICAgIyBUeXBlIG1hdGNoZXMgdGhlIFJhd0NvbmZpZ1BhcnNlci5nZXQqKCkgbWV0aG9kcy4KLSAgICAgICAgICAgICAgICAgICAgdHlwZXMgPSB7J3NpZ25vZmYnOiAnYm9vbGVhbicsICd1cGRhdGUnOiAnYm9vbGVhbid9CisgICAgICAgICAgICAgICAgICAgIHR5cGVzID0geydzaWdub2ZmJzogJ2Jvb2xlYW4nLCAndXBkYXRlJzogJ2Jvb2xlYW4nLCAnaGlzdG9yeSc6ICdib29sZWFuJ30KICAgICAgICAgICAgICAgICAgICAgaWYgbmFtZSBpbiB0eXBlczoKICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlID0gZ2V0YXR0cihwYXJzZXIsICdnZXQnICsgdHlwZXNbbmFtZV0pKHNlY3Rpb24sIG5hbWUpCiAgICAgICAgICAgICAgICAgICAgIHNlbGYucmVwb3NbcmVwb11bbmFtZV0gPSB2YWx1ZQpAQCAtODQsNyArODgsNyBAQAogICAgICAgICAgICAgICAgICAgICBzZWxmLmNvbW1pdF9tc2dfdGVtcGxhdGUgPSB2YWx1ZQogCiAgICAgICAgIGxvZ2dlci5kZWJ1ZygiTG9hZGluZyBjb25maWcgZmlsZSAlcyIgJSBzZWxmLmNvbmZmaWxlKQotICAgICAgICBzZWxmLnBhcnNlciA9IENvbmZpZ1BhcnNlci5Db25maWdQYXJzZXIoKQorICAgICAgICBzZWxmLnBhcnNlciA9IGNvbmZpZ3BhcnNlci5Db25maWdQYXJzZXIoKQogICAgICAgICB3aXRoIG9wZW4oc2VsZi5jb25mZmlsZSkgYXMgZjoKICAgICAgICAgICAgIHNlbGYucGFyc2VyLnJlYWRmcChmKQogCkBAIC0xMTMsNyArMTE3LDcgQEAKIAogICAgICAgICAgICAgICAgIHNlbGYubG9jYWxjb25mZmlsZSA9IGxjZmlsZQogICAgICAgICAgICAgICAgIGxvZ2dlci5kZWJ1ZygiTG9hZGluZyBsb2NhbCBjb25maWcgZmlsZSAlcyIgJSBzZWxmLmxvY2FsY29uZmZpbGUpCi0gICAgICAgICAgICAgICAgc2VsZi5sb2NhbHBhcnNlciA9IENvbmZpZ1BhcnNlci5Db25maWdQYXJzZXIoKQorICAgICAgICAgICAgICAgIHNlbGYubG9jYWxwYXJzZXIgPSBjb25maWdwYXJzZXIuQ29uZmlnUGFyc2VyKCkKICAgICAgICAgICAgICAgICB3aXRoIG9wZW4oc2VsZi5sb2NhbGNvbmZmaWxlKSBhcyBmOgogICAgICAgICAgICAgICAgICAgICBzZWxmLmxvY2FscGFyc2VyLnJlYWRmcChmKQogCkBAIC0xNzQsMjggKzE3OCwyOCBAQAogICAgICAgICAgICAgbG9nZ2VyLmVycm9yKCJFUlJPUjogcGF0Y2h1dGlscyBwYWNrYWdlIGlzIG1pc3NpbmcsIHBsZWFzZSBpbnN0YWxsIGl0IChlLmcuICMgYXB0LWdldCBpbnN0YWxsIHBhdGNodXRpbHMpIikKICAgICAgICAgICAgIHN5cy5leGl0KDEpCiAKLWRlZiBydW5jbWQoY21kLGRlc3RkaXI9Tm9uZSxwcmludGVycj1UcnVlLG91dD1Ob25lKToKK2RlZiBydW5jbWQoY21kLGRlc3RkaXI9Tm9uZSxwcmludGVycj1UcnVlLG91dD1Ob25lLGVudj1Ob25lKToKICAgICAiIiIKICAgICAgICAgZXhlY3V0ZSBjb21tYW5kLCByYWlzZSBDYWxsZWRQcm9jZXNzRXJyb3IgaWYgZmFpbAogICAgICAgICByZXR1cm4gb3V0cHV0IGlmIHN1Y2NlZWQKICAgICAiIiIKICAgICBsb2dnZXIuZGVidWcoInJ1biBjbWQgJyVzJyBpbiAlcyIgJSAoY21kLCBvcy5nZXRjd2QoKSBpZiBkZXN0ZGlyIGlzIE5vbmUgZWxzZSBkZXN0ZGlyKSkKICAgICBpZiBub3Qgb3V0OgotICAgICAgICBvdXQgPSBvcy50bXBmaWxlKCkKKyAgICAgICAgb3V0ID0gdGVtcGZpbGUuVGVtcG9yYXJ5RmlsZSgpCiAgICAgICAgIGVyciA9IG91dAogICAgIGVsc2U6Ci0gICAgICAgIGVyciA9IG9zLnRtcGZpbGUoKQorICAgICAgICBlcnIgPSB0ZW1wZmlsZS5UZW1wb3JhcnlGaWxlKCkKICAgICB0cnk6Ci0gICAgICAgIHN1YnByb2Nlc3MuY2hlY2tfY2FsbChjbWQsIHN0ZG91dD1vdXQsIHN0ZGVycj1lcnIsIGN3ZD1kZXN0ZGlyLCBzaGVsbD1pc2luc3RhbmNlKGNtZCwgc3RyKSkKLSAgICBleGNlcHQgc3VicHJvY2Vzcy5DYWxsZWRQcm9jZXNzRXJyb3IsZToKKyAgICAgICAgc3VicHJvY2Vzcy5jaGVja19jYWxsKGNtZCwgc3Rkb3V0PW91dCwgc3RkZXJyPWVyciwgY3dkPWRlc3RkaXIsIHNoZWxsPWlzaW5zdGFuY2UoY21kLCBzdHIpLCBlbnY9ZW52IG9yIG9zLmVudmlyb24pCisgICAgZXhjZXB0IHN1YnByb2Nlc3MuQ2FsbGVkUHJvY2Vzc0Vycm9yIGFzIGU6CiAgICAgICAgIGVyci5zZWVrKDApCiAgICAgICAgIGlmIHByaW50ZXJyOgogICAgICAgICAgICAgbG9nZ2VyLmVycm9yKCIlcyIgJSBlcnIucmVhZCgpKQogICAgICAgICByYWlzZSBlCiAKICAgICBlcnIuc2VlaygwKQotICAgIG91dHB1dCA9IGVyci5yZWFkKCkKLSAgICBsb2dnZXIuZGVidWcoIm91dHB1dDogJXMiICUgb3V0cHV0ICkKKyAgICBvdXRwdXQgPSBlcnIucmVhZCgpLmRlY29kZSgndXRmLTgnKQorICAgIGxvZ2dlci5kZWJ1Zygib3V0cHV0OiAlcyIgJSBvdXRwdXQucmVwbGFjZShjaHIoMCksICdcXDAnKSkKICAgICByZXR1cm4gb3V0cHV0CiAKIGRlZiBhY3Rpb25faW5pdChjb25mLCBhcmdzKToKQEAgLTQyNiw3ICs0MzAsNyBAQAogICAgICAgICAgICAgICAgICAgICBydW5jbWQoJ2dpdCByZXBsYWNlIC0tZ3JhZnQgJXMgJXMnICUgKHN0YXJ0LCBzdGFydHJldikpCiAgICAgICAgICAgICB0cnk6CiAgICAgICAgICAgICAgICAgcnVuY21kKG1lcmdlKQotICAgICAgICAgICAgZXhjZXB0IEV4Y2VwdGlvbiwgZXJyb3I6CisgICAgICAgICAgICBleGNlcHQgRXhjZXB0aW9uIGFzIGVycm9yOgogICAgICAgICAgICAgICAgIGxvZ2dlci5pbmZvKCcnJ01lcmdpbmcgY29tcG9uZW50IHJlcG9zaXRvcnkgaGlzdG9yeSBmYWlsZWQsIHBlcmhhcHMgYmVjYXVzZSBvZiBtZXJnZSBjb25mbGljdHMuCiBJdCBtYXkgYmUgcG9zc2libGUgdG8gY29tbWl0IGFueXdheSBhZnRlciByZXNvbHZpbmcgdGhlc2UgY29uZmxpY3RzLgogCkBAIC00NzgsMzIgKzQ4MiwzMiBAQAogICAgICAgICBzeXMuZXhpdCgxKQogCiBkZWYgY2hlY2tfcGF0Y2gocGF0Y2hmaWxlKToKLSAgICBmID0gb3BlbihwYXRjaGZpbGUpCisgICAgZiA9IG9wZW4ocGF0Y2hmaWxlLCAncmInKQogICAgIGxuID0gZi5yZWFkbGluZSgpCiAgICAgb2YgPSBOb25lCiAgICAgaW5fcGF0Y2ggPSBGYWxzZQogICAgIGJleW9uZF9tc2cgPSBGYWxzZQotICAgIHByZV9idWYgPSAnJworICAgIHByZV9idWYgPSBiJycKICAgICB3aGlsZSBsbjoKICAgICAgICAgaWYgbm90IGJleW9uZF9tc2c6Ci0gICAgICAgICAgICBpZiBsbiA9PSAnLS0tXG4nOgorICAgICAgICAgICAgaWYgbG4gPT0gYictLS1cbic6CiAgICAgICAgICAgICAgICAgaWYgbm90IG9mOgogICAgICAgICAgICAgICAgICAgICBicmVhawogICAgICAgICAgICAgICAgIGluX3BhdGNoID0gRmFsc2UKICAgICAgICAgICAgICAgICBiZXlvbmRfbXNnID0gVHJ1ZQotICAgICAgICAgICAgZWxpZiBsbi5zdGFydHN3aXRoKCctLS0gJyk6CisgICAgICAgICAgICBlbGlmIGxuLnN0YXJ0c3dpdGgoYictLS0gJyk6CiAgICAgICAgICAgICAgICAgIyBXZSBoYXZlIGEgZGlmZiBpbiB0aGUgY29tbWl0IG1lc3NhZ2UKICAgICAgICAgICAgICAgICBpbl9wYXRjaCA9IFRydWUKICAgICAgICAgICAgICAgICBpZiBub3Qgb2Y6CiAgICAgICAgICAgICAgICAgICAgIHByaW50KCdXQVJOSU5HOiAlcyBjb250YWlucyBhIGRpZmYgaW4gaXRzIGNvbW1pdCBtZXNzYWdlLCBpbmRlbnRpbmcgdG8gYXZvaWQgZmFpbHVyZSBkdXJpbmcgYXBwbHknICUgcGF0Y2hmaWxlKQotICAgICAgICAgICAgICAgICAgICBvZiA9IG9wZW4ocGF0Y2hmaWxlICsgJy50bXAnLCAndycpCisgICAgICAgICAgICAgICAgICAgIG9mID0gb3BlbihwYXRjaGZpbGUgKyAnLnRtcCcsICd3YicpCiAgICAgICAgICAgICAgICAgICAgIG9mLndyaXRlKHByZV9idWYpCi0gICAgICAgICAgICAgICAgICAgIHByZV9idWYgPSAnJwotICAgICAgICAgICAgZWxpZiBpbl9wYXRjaCBhbmQgbm90IGxuWzBdIGluICcrLUAgXG5ccic6CisgICAgICAgICAgICAgICAgICAgIHByZV9idWYgPSBiJycKKyAgICAgICAgICAgIGVsaWYgaW5fcGF0Y2ggYW5kIG5vdCBsblswXSBpbiBiJystQCBcblxyJzoKICAgICAgICAgICAgICAgICBpbl9wYXRjaCA9IEZhbHNlCiAgICAgICAgIGlmIG9mOgogICAgICAgICAgICAgaWYgaW5fcGF0Y2g6Ci0gICAgICAgICAgICAgICAgb2Yud3JpdGUoJyAnICsgbG4pCisgICAgICAgICAgICAgICAgb2Yud3JpdGUoYicgJyArIGxuKQogICAgICAgICAgICAgZWxzZToKICAgICAgICAgICAgICAgICBvZi53cml0ZShsbikKICAgICAgICAgZWxzZToKQEAgLTUxNiw3ICs1MjAsNyBAQAogCiBkZWYgZHJvcF90b19zaGVsbCh3b3JrZGlyPU5vbmUpOgogICAgIGlmIG5vdCBzeXMuc3RkaW4uaXNhdHR5KCk6Ci0gICAgICAgIHByaW50ICJOb3QgYSBUVFkgc28gY2FuJ3QgZHJvcCB0byBzaGVsbCBmb3IgcmVzb2x1dGlvbiwgZXhpdGluZy4iCisgICAgICAgIHByaW50KCJOb3QgYSBUVFkgc28gY2FuJ3QgZHJvcCB0byBzaGVsbCBmb3IgcmVzb2x1dGlvbiwgZXhpdGluZy4iKQogICAgICAgICByZXR1cm4gRmFsc2UKIAogICAgIHNoZWxsID0gb3MuZW52aXJvbi5nZXQoJ1NIRUxMJywgJ2Jhc2gnKQpAQCAtNTI2LDcgKzUzMCw3IEBACiAgICAgICAgICAgJyAgICAgICBleGl0IDEgIC0tIGFib3J0XG4nICUgc2hlbGwpOwogICAgIHJldCA9IHN1YnByb2Nlc3MuY2FsbChbc2hlbGxdLCBjd2Q9d29ya2RpcikKICAgICBpZiByZXQgIT0gMDoKLSAgICAgICAgcHJpbnQgIkFib3J0aW5nIgorICAgICAgICBwcmludCgiQWJvcnRpbmciKQogICAgICAgICByZXR1cm4gRmFsc2UKICAgICBlbHNlOgogICAgICAgICByZXR1cm4gVHJ1ZQpAQCAtNjEwLDggKzYxNCwxMiBAQAogZGVmIGFjdGlvbl91cGRhdGUoY29uZiwgYXJncyk6CiAgICAgIiIiCiAgICAgICAgIHVwZGF0ZSB0aGUgY29tcG9uZW50IHJlcG9zCi0gICAgICAgIGdlbmVyYXRlIHRoZSBwYXRjaCBsaXN0Ci0gICAgICAgIGFwcGx5IHRoZSBnZW5lcmF0ZWQgcGF0Y2hlcworICAgICAgICBlaXRoZXI6CisgICAgICAgICAgIGdlbmVyYXRlIHRoZSBwYXRjaCBsaXN0CisgICAgICAgICAgIGFwcGx5IHRoZSBnZW5lcmF0ZWQgcGF0Y2hlcworICAgICAgICBvcjoKKyAgICAgICAgICAgcmUtY3JlYXRlcyB0aGUgZW50aXJlIGNvbXBvbmVudCBoaXN0b3J5IGFuZCBtZXJnZXMgdGhlbQorICAgICAgICAgICBpbnRvIHRoZSBjdXJyZW50IGJyYW5jaCB3aXRoIGEgbWVyZ2UgY29tbWl0CiAgICAgIiIiCiAgICAgY29tcG9uZW50cyA9IFthcmcuc3BsaXQoJzonKVswXSBmb3IgYXJnIGluIGFyZ3NbMTpdXQogICAgIHJldmlzaW9ucyA9IHt9CkBAIC02MjQsMTAgKzYzMiwyMiBAQAogICAgICMgbWFrZSBzdXJlIGNvbWJvIHJlcG8gaXMgY2xlYW4KICAgICBjaGVja19yZXBvX2NsZWFuKG9zLmdldGN3ZCgpKQogCi0gICAgaW1wb3J0IHV1aWQKLSAgICBwYXRjaF9kaXIgPSAicGF0Y2gtJXMiICUgdXVpZC51dWlkNCgpCi0gICAgaWYgbm90IG9zLnBhdGguZXhpc3RzKHBhdGNoX2Rpcik6Ci0gICAgICAgIG9zLm1rZGlyKHBhdGNoX2RpcikKKyAgICAjIENoZWNrIHdoZXRoZXIgd2Uga2VlcCB0aGUgY29tcG9uZW50IGhpc3Rvcmllcy4gTXVzdCBiZQorICAgICMgc2V0IGVpdGhlciB2aWEgLS1oaXN0b3J5IGNvbW1hbmQgbGluZSBwYXJhbWV0ZXIgb3IgY29uc2lzdGVudGx5CisgICAgIyBpbiBjb21iby1sYXllci5jb25mLiBNaXhpbmcgbW9kZXMgaXMgKGN1cnJlbnRseSwgYW5kIHByb2JhYmx5CisgICAgIyBwZXJtYW5lbnRseSBiZWNhdXNlIGl0IHdvdWxkIGJlIGNvbXBsaWNhdGVkKSBub3Qgc3VwcG9ydGVkLgorICAgIGlmIGNvbmYuaGlzdG9yeToKKyAgICAgICAgaGlzdG9yeSA9IFRydWUKKyAgICBlbHNlOgorICAgICAgICBoaXN0b3J5ID0gTm9uZQorICAgICAgICBmb3IgbmFtZSBpbiByZXBvczoKKyAgICAgICAgICAgIHJlcG8gPSBjb25mLnJlcG9zW25hbWVdCisgICAgICAgICAgICByZXBvX2hpc3RvcnkgPSByZXBvLmdldCgnaGlzdG9yeScsIEZhbHNlKQorICAgICAgICAgICAgaWYgaGlzdG9yeSBpcyBOb25lOgorICAgICAgICAgICAgICAgIGhpc3RvcnkgPSByZXBvX2hpc3RvcnkKKyAgICAgICAgICAgIGVsaWYgaGlzdG9yeSAhPSByZXBvX2hpc3Rvcnk6CisgICAgICAgICAgICAgICAgbG9nZ2VyLmVycm9yKCInaGlzdG9yeScgcHJvcGVydHkgaXMgc2V0IGluY29uc2lzdGVudGx5IikKKyAgICAgICAgICAgICAgICBzeXMuZXhpdCgxKQogCiAgICAgIyBTdGVwIDE6IHVwZGF0ZSB0aGUgY29tcG9uZW50IHJlcG9zCiAgICAgaWYgY29uZi5ub3B1bGw6CkBAIC02MzUsNiArNjU1LDE3IEBACiAgICAgZWxzZToKICAgICAgICAgYWN0aW9uX3B1bGwoY29uZiwgWydhcmcwJ10gKyBjb21wb25lbnRzKQogCisgICAgaWYgaGlzdG9yeToKKyAgICAgICAgdXBkYXRlX3dpdGhfaGlzdG9yeShjb25mLCBjb21wb25lbnRzLCByZXZpc2lvbnMsIHJlcG9zKQorICAgIGVsc2U6CisgICAgICAgIHVwZGF0ZV93aXRoX3BhdGNoZXMoY29uZiwgY29tcG9uZW50cywgcmV2aXNpb25zLCByZXBvcykKKworZGVmIHVwZGF0ZV93aXRoX3BhdGNoZXMoY29uZiwgY29tcG9uZW50cywgcmV2aXNpb25zLCByZXBvcyk6CisgICAgaW1wb3J0IHV1aWQKKyAgICBwYXRjaF9kaXIgPSAicGF0Y2gtJXMiICUgdXVpZC51dWlkNCgpCisgICAgaWYgbm90IG9zLnBhdGguZXhpc3RzKHBhdGNoX2Rpcik6CisgICAgICAgIG9zLm1rZGlyKHBhdGNoX2RpcikKKwogICAgIGZvciBuYW1lIGluIHJlcG9zOgogICAgICAgICByZXZpc2lvbiA9IHJldmlzaW9ucy5nZXQobmFtZSwgTm9uZSkKICAgICAgICAgcmVwbyA9IGNvbmYucmVwb3NbbmFtZV0KQEAgLTcxMSw2ICs3NDIsMjEgQEAKICAgICBydW5jbWQoInJtIC1yZiAlcyIgJSBwYXRjaF9kaXIpCiAKICAgICAjIFN0ZXAgNzogY29tbWl0IHRoZSB1cGRhdGVkIGNvbmZpZyBmaWxlIGlmIGl0J3MgYmVpbmcgdHJhY2tlZAorICAgIGNvbW1pdF9jb25mX2ZpbGUoY29uZiwgY29tcG9uZW50cykKKworZGVmIGNvbmZfY29tbWl0X21zZyhjb25mLCBjb21wb25lbnRzKToKKyAgICAjIGNyZWF0ZSB0aGUgImNvbXBvbmVudHMiIHN0cmluZworICAgIGNvbXBvbmVudF9zdHIgPSAiYWxsIGNvbXBvbmVudHMiCisgICAgaWYgbGVuKGNvbXBvbmVudHMpID4gMDoKKyAgICAgICAgIyBvdGhlcndpc2UgdGVsbCB3aGljaCBjb21wb25lbnRzIHdlcmUgYWN0dWFsbHkgY2hhbmdlZAorICAgICAgICBjb21wb25lbnRfc3RyID0gIiwgIi5qb2luKGNvbXBvbmVudHMpCisKKyAgICAjIGV4cGFuZCB0aGUgdGVtcGxhdGUgd2l0aCBrbm93biB2YWx1ZXMKKyAgICB0ZW1wbGF0ZSA9IFRlbXBsYXRlKGNvbmYuY29tbWl0X21zZ190ZW1wbGF0ZSkKKyAgICBtc2cgPSB0ZW1wbGF0ZS5zdWJzdGl0dXRlKGNvbXBvbmVudHMgPSBjb21wb25lbnRfc3RyKQorICAgIHJldHVybiBtc2cKKworZGVmIGNvbW1pdF9jb25mX2ZpbGUoY29uZiwgY29tcG9uZW50cywgY29tbWl0PVRydWUpOgogICAgIHJlbHBhdGggPSBvcy5wYXRoLnJlbHBhdGgoY29uZi5jb25mZmlsZSkKICAgICB0cnk6CiAgICAgICAgIG91dHB1dCA9IHJ1bmNtZCgiZ2l0IHN0YXR1cyAtLXBvcmNlbGFpbiAlcyIgJSByZWxwYXRoLCBwcmludGVycj1GYWxzZSkKQEAgLTcxOCwyMyArNzY0LDE1IEBACiAgICAgICAgICMgT3V0c2lkZSB0aGUgcmVwb3NpdG9yeQogICAgICAgICBvdXRwdXQgPSBOb25lCiAgICAgaWYgb3V0cHV0OgotICAgICAgICBsb2dnZXIuaW5mbygiQ29tbWl0dGluZyB1cGRhdGVkIGNvbmZpZ3VyYXRpb24gZmlsZSIpCiAgICAgICAgIGlmIG91dHB1dC5sc3RyaXAoKS5zdGFydHN3aXRoKCJNIik6Ci0KLSAgICAgICAgICAgICMgY3JlYXRlIHRoZSAiY29tcG9uZW50cyIgc3RyaW5nCi0gICAgICAgICAgICBjb21wb25lbnRfc3RyID0gImFsbCBjb21wb25lbnRzIgotICAgICAgICAgICAgaWYgbGVuKGNvbXBvbmVudHMpID4gMDoKLSAgICAgICAgICAgICAgICAjIG90aGVyd2lzZSB0ZWxsIHdoaWNoIGNvbXBvbmVudHMgd2VyZSBhY3R1YWxseSBjaGFuZ2VkCi0gICAgICAgICAgICAgICAgY29tcG9uZW50X3N0ciA9ICIsICIuam9pbihjb21wb25lbnRzKQotCi0gICAgICAgICAgICAjIGV4cGFuZCB0aGUgdGVtcGxhdGUgd2l0aCBrbm93biB2YWx1ZXMKLSAgICAgICAgICAgIHRlbXBsYXRlID0gVGVtcGxhdGUoY29uZi5jb21taXRfbXNnX3RlbXBsYXRlKQotICAgICAgICAgICAgcmF3X21zZyA9IHRlbXBsYXRlLnN1YnN0aXR1dGUoY29tcG9uZW50cyA9IGNvbXBvbmVudF9zdHIpCi0KLSAgICAgICAgICAgICMgc2FuaXRpemUgdGhlIHN0cmluZyBiZWZvcmUgdXNpbmcgaXQgaW4gY29tbWFuZCBsaW5lCi0gICAgICAgICAgICBtc2cgPSByYXdfbXNnLnJlcGxhY2UoJyInLCAnXFwiJykKLQotICAgICAgICAgICAgcnVuY21kKCdnaXQgY29tbWl0IC1tICIlcyIgJXMnICUgKG1zZywgcmVscGF0aCkpCisgICAgICAgICAgICBsb2dnZXIuaW5mbygiQ29tbWl0dGluZyB1cGRhdGVkIGNvbmZpZ3VyYXRpb24gZmlsZSIpCisgICAgICAgICAgICBpZiBjb21taXQ6CisgICAgICAgICAgICAgICAgbXNnID0gY29uZl9jb21taXRfbXNnKGNvbmYsIGNvbXBvbmVudHMpCisgICAgICAgICAgICAgICAgcnVuY21kKCdnaXQgY29tbWl0IC1tJy5zcGxpdCgpICsgW21zZywgcmVscGF0aF0pCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHJ1bmNtZCgnZ2l0IGFkZCAlcycgJSByZWxwYXRoKQorICAgICAgICAgICAgcmV0dXJuIFRydWUKKyAgICByZXR1cm4gRmFsc2UKIAogZGVmIGFwcGx5X3BhdGNobGlzdChjb25mLCByZXBvcyk6CiAgICAgIiIiCkBAIC04NTIsNiArODkwLDQxOCBAQAogICAgICAgICBlbHNlOgogICAgICAgICAgICAgbG9nZ2VyLmluZm8ocGF0Y2hfZmlsZW5hbWUpCiAKK2RlZiB1cGRhdGVfd2l0aF9oaXN0b3J5KGNvbmYsIGNvbXBvbmVudHMsIHJldmlzaW9ucywgcmVwb3MpOgorICAgICcnJ1VwZGF0ZSBhbGwgY29tcG9uZW50cyB3aXRoIGZ1bGwgaGlzdG9yeS4KKworICAgIFdvcmtzIGJ5IGltcG9ydGluZyBhbGwgY29tbWl0cyByZWFjaGFibGUgZnJvbSBhIGNvbXBvbmVudCdzCisgICAgY3VycmVudCBoZWFkIHJldmlzaW9uLiAgSWYgdGhvc2UgY29tbWl0cyBhcmUgcm9vdGVkIGluIGFuIGFscmVhZHkKKyAgICBpbXBvcnRlZCBjb21taXQsIHRoZWlyIGNvbnRlbnQgZ2V0cyBtaXhlZCB3aXRoIHRoZSBjb250ZW50IG9mIHRoZQorICAgIGNvbWJpbmVkIHJlcG8gb2YgdGhhdCBjb21taXQgKG5ldyBvciBtb2RpZmllZCBmaWxlcyBvdmVyd3JpdHRlbiwKKyAgICByZW1vdmVkIGZpbGVzIHJlbW92ZWQpLgorCisgICAgVGhlIGxhc3QgY29tbWl0IGlzIGFuIGFydGlmaWNpYWwgbWVyZ2UgY29tbWl0IHRoYXQgbWVyZ2VzIGFsbCB0aGUKKyAgICB1cGRhdGVkIGNvbXBvbmVudHMgaW50byB0aGUgY29tYmluZWQgcmVwb3NpdG9yeS4KKworICAgIFRoZSBIRUFEIHJlZiBvbmx5IGdldHMgdXBkYXRlZCBhdCB0aGUgdmVyeSBlbmQuIEFsbCBpbnRlcm1lZGlhdGUgd29yaworICAgIGhhcHBlbnMgaW4gYSB3b3JrdHJlZSB3aGljaCB3aWxsIGdldCBnYXJiYWdlIGNvbGxlY3RlZCBieSBnaXQgZXZlbnR1YWxseQorICAgIGFmdGVyIGEgZmFpbHVyZS4KKyAgICAnJycKKyAgICAjIFJlbWVtYmVyIGN1cnJlbnQgSEVBRCBhbmQgd2hhdCB3ZSBuZWVkIHRvIGFkZCB0byBpdC4KKyAgICBoZWFkID0gcnVuY21kKCJnaXQgcmV2LXBhcnNlIEhFQUQiKS5zdHJpcCgpCisgICAgYWRkaXRpb25hbF9oZWFkcyA9IHt9CisKKyAgICAjIFRyYWNrIHRoZSBtYXBwaW5nIGJldHdlZW4gb3JpZ2luYWwgY29tbWl0IGFuZCBjb21taXQgaW4gdGhlCisgICAgIyBjb21iaW5lZCByZXBvLiBXZSBkbyBub3QgaGF2ZSB0byBkaXN0aW5ndWlzaCBiZXR3ZWVuIGNvbXBvbmVudHMsCisgICAgIyBiZWNhdXNlIGNvbW1pdCBoYXNoZXMgYXJlIGRpZmZlcmVudCBhbnl3YXkuIE9mdGVuIHdlIGNhbgorICAgICMgc2tpcCBmaW5kX3JldnMoKSBlbnRpcmVseSAoZm9yIGV4YW1wbGUsIHdoZW4gYWxsIG5ldyBjb21taXRzCisgICAgIyBhcmUgZGVyaXZlZCBmcm9tIHRoZSBsYXN0IGltcG9ydGVkIHJldmlzaW9uKS4KKyAgICAjCisgICAgIyBVc2luZyAiaGVhZCIgKHR5cGljYWxseSB0aGUgbWVyZ2UgY29tbWl0KSBpbnN0ZWFkIG9mIHRoZSBhY3R1YWwKKyAgICAjIGNvbW1pdCBmb3IgdGhlIGNvbXBvbmVudCBsZWFkcyB0byBhIG5pY2VyIGhpc3RvcnkgaW4gdGhlIGNvbWJpbmVkCisgICAgIyByZXBvLgorICAgIG9sZDJuZXdfcmV2cyA9IHt9CisgICAgZm9yIG5hbWUgaW4gcmVwb3M6CisgICAgICAgIHJlcG8gPSBjb25mLnJlcG9zW25hbWVdCisgICAgICAgIHJldmlzaW9uID0gcmVwb1snbGFzdF9yZXZpc2lvbiddCisgICAgICAgIGlmIHJldmlzaW9uOgorICAgICAgICAgICAgb2xkMm5ld19yZXZzW3JldmlzaW9uXSA9IGhlYWQKKworICAgIGRlZiBhZGRfcChwYXJlbnRzKToKKyAgICAgICAgJycnSW5zZXJ0IC1wIGJlZm9yZSBlYWNoIGVudHJ5LicnJworICAgICAgICBwYXJhbWV0ZXJzID0gW10KKyAgICAgICAgZm9yIHAgaW4gcGFyZW50czoKKyAgICAgICAgICAgIHBhcmFtZXRlcnMuYXBwZW5kKCctcCcpCisgICAgICAgICAgICBwYXJhbWV0ZXJzLmFwcGVuZChwKQorICAgICAgICByZXR1cm4gcGFyYW1ldGVycworCisgICAgIyBEbyBhbGwgaW50ZXJtZWRpYXRlIHdvcmsgd2l0aCBhIHNlcGFyYXRlIHdvcmsgZGlyIGFuZCBpbmRleCwKKyAgICAjIGNob3NlbiB2aWEgZW52IHZhcmlhYmxlcyAoY2FuJ3QgdXNlICJnaXQgd29ya3RyZWUiLCBpdCBpcyB0b28KKyAgICAjIG5ldykuIFRoaXMgaXMgdXNlZnVsIChubyBjaGFuZ2VzIHRvIGN1cnJlbnQgd29yayB0cmVlIHVubGVzcyB0aGUKKyAgICAjIHVwZGF0ZSBzdWNjZWVkcykgYW5kIHJlcXVpcmVkIChvdGhlcndpc2Ugd2UgZW5kIHVwIHRlbXBvcmFyaWx5CisgICAgIyByZW1vdmluZyB0aGUgY29tYm8tbGF5ZXIgaG9va3MgdGhhdCB3ZSBjdXJyZW50bHkgdXNlIHdoZW4KKyAgICAjIGltcG9ydGluZyBhIG5ldyBjb21wb25lbnQpLgorICAgICMKKyAgICAjIE5vdCBjbGVhbmVkIHVwIGFmdGVyIGEgZmFpbHVyZSBhdCB0aGUgbW9tZW50LgorICAgIHdkaXIgPSBvcy5wYXRoLmpvaW4ob3MuZ2V0Y3dkKCksICIuZ2l0IiwgImNvbWJvLWxheWVyIikKKyAgICB3aW5kZXggPSB3ZGlyICsgIi5pbmRleCIKKyAgICBpZiBvcy5wYXRoLmlzZGlyKHdkaXIpOgorICAgICAgICBzaHV0aWwucm10cmVlKHdkaXIpCisgICAgb3MubWtkaXIod2RpcikKKyAgICB3ZW52ID0gY29weS5kZWVwY29weShvcy5lbnZpcm9uKQorICAgIHdlbnZbIkdJVF9XT1JLX1RSRUUiXSA9IHdkaXIKKyAgICB3ZW52WyJHSVRfSU5ERVhfRklMRSJdID0gd2luZGV4CisgICAgIyBUaGlzIG9uZSB0dXJuZWQgb3V0IHRvIGJlIG5lZWRlZCBpbiBwcmFjdGljZS4KKyAgICB3ZW52WyJHSVRfT0JKRUNUX0RJUkVDVE9SWSJdID0gb3MucGF0aC5qb2luKG9zLmdldGN3ZCgpLCAiLmdpdCIsICJvYmplY3RzIikKKyAgICB3YXJncyA9IHsiZGVzdGRpciI6IHdkaXIsICJlbnYiOiB3ZW52fQorCisgICAgZm9yIG5hbWUgaW4gcmVwb3M6CisgICAgICAgIHJldmlzaW9uID0gcmV2aXNpb25zLmdldChuYW1lLCBOb25lKQorICAgICAgICByZXBvID0gY29uZi5yZXBvc1tuYW1lXQorICAgICAgICBsZGlyID0gcmVwb1snbG9jYWxfcmVwb19kaXInXQorICAgICAgICBkZXN0X2RpciA9IHJlcG9bJ2Rlc3RfZGlyJ10KKyAgICAgICAgYnJhbmNoID0gcmVwby5nZXQoJ2JyYW5jaCcsICJtYXN0ZXIiKQorICAgICAgICBob29rID0gcmVwby5nZXQoJ2hvb2snLCBOb25lKQorICAgICAgICBsYXJncyA9IHsiZGVzdGRpciI6IGxkaXIsICJlbnYiOiBOb25lfQorICAgICAgICBmaWxlX2luY2x1ZGUgPSByZXBvLmdldCgnZmlsZV9maWx0ZXInLCAnJykuc3BsaXQoKQorICAgICAgICBmaWxlX2luY2x1ZGUuc29ydCgpICMgbWFrZSBzdXJlIHRoYXQgc2hvcnQgZW50cmllcyBsaWtlICcuJyBjb21lIGZpcnN0LgorICAgICAgICBmaWxlX2V4Y2x1ZGUgPSByZXBvLmdldCgnZmlsZV9leGNsdWRlJywgJycpLnNwbGl0KCkKKworICAgICAgICBkZWYgaW5jbHVkZV9maWxlKGZpbGUpOgorICAgICAgICAgICAgaWYgbm90IGZpbGVfaW5jbHVkZToKKyAgICAgICAgICAgICAgICAjIE5vIGV4cGxpY2l0IGZpbHRlciBzZXQsIGluY2x1ZGUgZmlsZS4KKyAgICAgICAgICAgICAgICByZXR1cm4gVHJ1ZQorICAgICAgICAgICAgZm9yIGZpbHRlciBpbiBmaWxlX2luY2x1ZGU6CisgICAgICAgICAgICAgICAgaWYgZmlsdGVyID09ICcuJzoKKyAgICAgICAgICAgICAgICAgICAgIyBBbm90aGVyIHNwZWNpYWwgY2FzZTogaW5jbHVkZSBjdXJyZW50IGRpcmVjdG9yeSBhbmQgdGh1cyBhbGwgZmlsZXMuCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBUcnVlCisgICAgICAgICAgICAgICAgaWYgb3MucGF0aC5jb21tb25wcmVmaXgoKGZpbHRlciwgZmlsZSkpID09IGZpbHRlcjoKKyAgICAgICAgICAgICAgICAgICAgIyBJbmNsdWRlZCBpbiBkaXJlY3Rvcnkgb3IgZGlyZWN0IGZpbGUgbWF0Y2guCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBUcnVlCisgICAgICAgICAgICAgICAgIyBDaGVjayBmb3Igd2lsZGNhcmQgbWF0Y2ggKndpdGgqIGFsbG93aW5nICogdG8gbWF0Y2ggLywgaS5lLgorICAgICAgICAgICAgICAgICMgc3JjLyouYyBkb2VzIG1hdGNoIHNyYy9mb29iYXIvKi5jLiBUaGF0J3Mgbm90IGhvdyBpdCBpcyBkb25lIGVsc2V3aGVyZQorICAgICAgICAgICAgICAgICMgd2hlbiBwYXNzaW5nIHRoZSBmaWx0ZXJpbmcgdG8gImdpdCBhcmNoaXZlIiwgYnV0IGl0IGlzIHVuY2xlYXIgd2hhdAorICAgICAgICAgICAgICAgICMgdGhlIGludGVuZGVkIHNlbWFudGljIGlzICh0aGUgY29tbWVudCBvbiBmaWxlX2V4Y2x1ZGUgdGhhdCAiYXBwZW5kIGEgKiB3aWxkY2FyZAorICAgICAgICAgICAgICAgICMgYXQgdGhlIGVuZCIgdG8gbWF0Y2ggdGhlIGZ1bGwgY29udGVudCBvZiBhIGRpcmVjdG9yaWVzIGltcGxpZXMgdGhhdAorICAgICAgICAgICAgICAgICMgc2xhc2hlcyBhcmUgaW5kZWVkIG5vdCBzcGVjaWFsKSwgc28gaGVyZSB3ZSBzaW1wbHkgZG8gd2hhdCdzIGVhc3kgdG8KKyAgICAgICAgICAgICAgICAjIGltcGxlbWVudCBpbiBQeXRob24uCisgICAgICAgICAgICAgICAgbG9nZ2VyLmRlYnVnKCdmbm1hdGNoKCVzLCAlcyknICUgKGZpbGUsIGZpbHRlcikpCisgICAgICAgICAgICAgICAgaWYgZm5tYXRjaC5mbm1hdGNoY2FzZShmaWxlLCBmaWx0ZXIpOgorICAgICAgICAgICAgICAgICAgICByZXR1cm4gVHJ1ZQorICAgICAgICAgICAgcmV0dXJuIEZhbHNlCisKKyAgICAgICAgZGVmIGV4Y2x1ZGVfZmlsZShmaWxlKToKKyAgICAgICAgICAgIGZvciBmaWx0ZXIgaW4gZmlsZV9leGNsdWRlOgorICAgICAgICAgICAgICAgIGlmIGZubWF0Y2guZm5tYXRjaGNhc2UoZmlsZSwgZmlsdGVyKToKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFRydWUKKyAgICAgICAgICAgIHJldHVybiBGYWxzZQorCisgICAgICAgIGRlZiBmaWxlX2ZpbHRlcihmaWxlcyk6CisgICAgICAgICAgICAnJydDbGVhbiB1cCBmaWxlIGxpc3Qgc28gdGhhdCBvbmx5IGluY2x1ZGVkIGZpbGVzIHJlbWFpbi4nJycKKyAgICAgICAgICAgIGluZGV4ID0gMAorICAgICAgICAgICAgd2hpbGUgaW5kZXggPCBsZW4oZmlsZXMpOgorICAgICAgICAgICAgICAgIGZpbGUgPSBmaWxlc1tpbmRleF0KKyAgICAgICAgICAgICAgICBpZiBub3QgaW5jbHVkZV9maWxlKGZpbGUpIG9yIGV4Y2x1ZGVfZmlsZShmaWxlKToKKyAgICAgICAgICAgICAgICAgICAgZGVsIGZpbGVzW2luZGV4XQorICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgIGluZGV4ICs9IDEKKworCisgICAgICAgICMgR2VuZXJhdGUgdGhlIHJldmlzaW9uIGxpc3QuCisgICAgICAgIGxvZ2dlci5pbmZvKCJBbmFseXppbmcgY29tbWl0cyBmcm9tICVzLi4uIiAlIG5hbWUpCisgICAgICAgIHRvcF9yZXZpc2lvbiA9IHJldmlzaW9uIG9yIGJyYW5jaAorICAgICAgICBpZiBub3QgY2hlY2tfcmV2X2JyYW5jaChuYW1lLCBsZGlyLCB0b3BfcmV2aXNpb24sIGJyYW5jaCk6CisgICAgICAgICAgICBzeXMuZXhpdCgxKQorCisgICAgICAgIGxhc3RfcmV2aXNpb24gPSByZXBvWydsYXN0X3JldmlzaW9uJ10KKyAgICAgICAgcmV2X2xpc3RfYXJncyA9ICItLWZ1bGwtaGlzdG9yeSAtLXNwYXJzZSAtLXRvcG8tb3JkZXIgLS1yZXZlcnNlIgorICAgICAgICBpZiBub3QgbGFzdF9yZXZpc2lvbjoKKyAgICAgICAgICAgIGxvZ2dlci5pbmZvKCJXYXJuaW5nOiBsYXN0X3JldmlzaW9uIG9mIGNvbXBvbmVudCAlcyBpcyBub3Qgc2V0LCBzdGFydGluZyBmcm9tIHRoZSBmaXJzdCBjb21taXQiICUgbmFtZSkKKyAgICAgICAgICAgIHJldl9saXN0X2FyZ3MgPSByZXZfbGlzdF9hcmdzICsgJyAnICsgdG9wX3JldmlzaW9uCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBpZiBub3QgY2hlY2tfcmV2X2JyYW5jaChuYW1lLCBsZGlyLCBsYXN0X3JldmlzaW9uLCBicmFuY2gpOgorICAgICAgICAgICAgICAgIHN5cy5leGl0KDEpCisgICAgICAgICAgICByZXZfbGlzdF9hcmdzID0gIiVzICVzLi4lcyIgJSAocmV2X2xpc3RfYXJncywgbGFzdF9yZXZpc2lvbiwgdG9wX3JldmlzaW9uKQorCisgICAgICAgICAgICAjIEJ5IGRlZmluaXRpb24sIHRoZSBjdXJyZW50IEhFQUQgY29udGFpbnMgdGhlIGxhdGVzdCBpbXBvcnRlZAorICAgICAgICAgICAgIyBjb21taXQgb2YgZWFjaCBjb21wb25lbnQuIFdlIHVzZSB0aGF0IGFzIGluaXRpYWwgbWFwcGluZyBldmVuCisgICAgICAgICAgICAjIHRob3VnaCB0aGUgY29tbWl0cyBkbyBub3QgbWF0Y2ggZXhhY3RseSBiZWNhdXNlCisgICAgICAgICAgICAjIGEpIGl0IGFsd2F5cyB3b3JrcyAoaW4gY29udHJhc3QgdG8gZmluZF9yZXZzLCB3aGljaCByZWxpZXMgb24gc3BlY2lhbAorICAgICAgICAgICAgIyAgICBjb21taXQgbWVzc2FnZXMpCisgICAgICAgICAgICAjIGIpIGl0IGlzIGZhc3RlciB0aGFuIGZpbmRfcmV2cywgd2hpY2ggd2lsbCBvbmx5IGJlIGNhbGxlZCBvbiBkZW1hbmQKKyAgICAgICAgICAgICMgICAgYW5kIGNhbiBiZSBza2lwcGVkIGVudGlyZWx5IGluIG1vc3QgY2FzZXMKKyAgICAgICAgICAgICMgYykgbGFzdCBidXQgbm90IGxlYXN0LCB0aGUgY29tYmluZWQgaGlzdG9yeSBsb29rcyBuaWNlciB3aGVuIGFsbAorICAgICAgICAgICAgIyAgICBuZXcgY29tbWl0cyBhcmUgcm9vdGVkIGluIHRoZSBzYW1lIG1lcmdlIGNvbW1pdAorICAgICAgICAgICAgb2xkMm5ld19yZXZzW2xhc3RfcmV2aXNpb25dID0gaGVhZAorCisgICAgICAgICMgV2UgY2FyZSBhYm91dCBhbGwgY29tbWl0cyAoLS1mdWxsLWhpc3RvcnkgYW5kIC0tc3BhcnNlKSBhbmQKKyAgICAgICAgIyB3ZSB3YW50IHJlY29uc3RydWN0IHRoZSB0b3BvbG9neSBhbmQgdGh1cyBkbyBub3QgY2FyZQorICAgICAgICAjIGFib3V0IG9yZGVyaW5nIGJ5IHRpbWUgKC0tdG9wby1vcmRlcikuIFdlIGFzayBmb3IgdGhlIG9uZXMKKyAgICAgICAgIyB3ZSBuZWVkIHRvIGltcG9ydCBmaXJzdCB0byBiZSBsaXN0ZWQgZmlyc3QgKC0tcmV2ZXJzZSkuCisgICAgICAgIHJldnMgPSBydW5jbWQoImdpdCByZXYtbGlzdCAlcyIgJSByZXZfbGlzdF9hcmdzLCAqKmxhcmdzKS5zcGxpdCgpCisgICAgICAgIGxvZ2dlci5kZWJ1ZygiVG8gYmUgaW1wb3J0ZWQ6ICVzIiAlIHJldnMpCisgICAgICAgICMgTm93ICdyZXZzJyBjb250YWlucyBhbGwgcmV2aXNpb25zIHJlYWNoYWJsZSBmcm9tIHRoZSB0b3AgcmV2aXNpb24uCisgICAgICAgICMgQWxsIHJldmlzaW9ucyBkZXJpdmVkIGZyb20gdGhlICdsYXN0X3JldmlzaW9uJyBkZWZpbml0ZWx5IGFyZSBuZXcsCisgICAgICAgICMgd2hlcmVhcyB0aGUgb3RoZXJzIG1heSBvciBtYXkgbm90IGhhdmUgYmVlbiBpbXBvcnRlZCBiZWZvcmUuIEZvcgorICAgICAgICAjIGEgbGluZWFyIGhpc3RvcnkgaW4gdGhlIGNvbXBvbmVudCwgdGhhdCBzZWNvbmQgc2V0IHdpbGwgYmUgZW1wdHkuCisgICAgICAgICMgVG8gZGlzdGluZ3Vpc2ggYmV0d2VlbiB0aGVtLCB3ZSBhbHNvIGdldCB0aGUgc2hvcnRlciBsaXN0CisgICAgICAgICMgb2YgcmV2aXNpb25zIHN0YXJ0aW5nIGF0IHRoZSBhbmNlc3Rvci4KKyAgICAgICAgaWYgbGFzdF9yZXZpc2lvbjoKKyAgICAgICAgICAgIGFuY2VzdG9yX3JldnMgPSBydW5jbWQoImdpdCByZXYtbGlzdCAtLWFuY2VzdHJ5LXBhdGggJXMiICUgcmV2X2xpc3RfYXJncywgKipsYXJncykuc3BsaXQoKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgYW5jZXN0b3JfcmV2cyA9IFtdCisgICAgICAgIGxvZ2dlci5kZWJ1ZygiQW5jZXN0b3JzOiAlcyIgJSBhbmNlc3Rvcl9yZXZzKQorCisgICAgICAgICMgTm93IGltcG9ydCBlYWNoIHJldmlzaW9uLgorICAgICAgICBsb2dnZXIuaW5mbygiSW1wb3J0aW5nIGNvbW1pdHMgZnJvbSAlcy4uLiIgJSBuYW1lKQorICAgICAgICBkZWYgaW1wb3J0X3JldihyZXYpOgorICAgICAgICAgICAgZ2xvYmFsIHNjYW5uZWRfcmV2cworCisgICAgICAgICAgICAjIElmIGl0IGlzIHBhcnQgb2YgdGhlIG5ldyBjb21taXRzLCB3ZSBkZWZpbml0ZWx5IG5lZWQKKyAgICAgICAgICAgICMgdG8gaW1wb3J0IGl0LiBPdGhlcndpc2Ugd2UgbmVlZCB0byBjaGVjaywgd2UgbWlnaHQgaGF2ZQorICAgICAgICAgICAgIyBpbXBvcnRlZCBpdCBiZWZvcmUuIElmIGl0IHdhcyBpbXBvcnRlZCBhbmQgd2UgbWVyZWx5CisgICAgICAgICAgICAjIGZhaWwgdG8gZmluZCBpdCBiZWNhdXNlIGNvbW1pdCBtZXNzYWdlcyBkaWQgbm90IHRyYWNrCisgICAgICAgICAgICAjIHRoZSBtYXBwaW5nLCB0aGVuIHdlIGVuZCB1cCBpbXBvcnRpbmcgaXQgYWdhaW4uIFNvCisgICAgICAgICAgICAjIGNvbWJpbmVkIHJlcG9zIHVzaW5nICJ1cGRhdGluZyB3aXRoIGhpc3RvcnkiIHJlYWxseSBzaG91bGQKKyAgICAgICAgICAgICMgZW5hYmxlIHRoZSAiRnJvbSAuLi4gcmV2OiIgY29tbWl0IGhlYWRlciBtb2RpZmljYXRpb25zLgorICAgICAgICAgICAgaWYgcmV2IG5vdCBpbiBhbmNlc3Rvcl9yZXZzIGFuZCByZXYgbm90IGluIG9sZDJuZXdfcmV2cyBhbmQgbm90IHNjYW5uZWRfcmV2czoKKyAgICAgICAgICAgICAgICBsb2dnZXIuZGVidWcoIlJldmlzaW9uICVzIHRyaWdnZXJzIGxvZyBhbmFseXNpcy4iICUgcmV2KQorICAgICAgICAgICAgICAgIGZpbmRfcmV2cyhvbGQybmV3X3JldnMsIGhlYWQpCisgICAgICAgICAgICAgICAgc2Nhbm5lZF9yZXZzID0gVHJ1ZQorICAgICAgICAgICAgbmV3X3JldiA9IG9sZDJuZXdfcmV2cy5nZXQocmV2LCBOb25lKQorICAgICAgICAgICAgaWYgbmV3X3JldjoKKyAgICAgICAgICAgICAgICByZXR1cm4gbmV3X3JldgorCisgICAgICAgICAgICAjIElmIHRoZSBjb21taXQgaXMgbm90IGluIHRoZSBvcmlnaW5hbCBsaXN0IG9mIHJldmlzaW9ucworICAgICAgICAgICAgIyB0byBiZSBpbXBvcnRlZCwgdGhlbiBpdCBtdXN0IGJlIGEgcGFyZW50IG9mIG9uZSBvZiB0aG9zZQorICAgICAgICAgICAgIyBjb21taXRzIGFuZCBpdCB3YXMgc2tpcHBlZCBkdXJpbmcgZWFybGllciBpbXBvcnRzIG9yIG5vdAorICAgICAgICAgICAgIyBmb3VuZC4gSW1wb3J0aW5nIHN1Y2ggbWVyZ2UgY29tbWl0cyBsZWFkcyB0byB2ZXJ5IHVnbHkKKyAgICAgICAgICAgICMgaGlzdG9yeSAobG9uZyBjYXNjYWRlIG9mIG1lcmdlIGNvbW1pdHMgd2hpY2ggYWxsIHBvaW50CisgICAgICAgICAgICAjIHRvIHRvIG9sZGVyIGNvbW1pdHMpIHdoZW4gc3dpdGNoaW5nIGZyb20gInVwZGF0ZSB2aWEKKyAgICAgICAgICAgICMgcGF0Y2hlcyIgdG8gInVwZGF0ZSB3aXRoIGhpc3RvcnkiLgorICAgICAgICAgICAgIworICAgICAgICAgICAgIyBXZSBjYW4gYXZvaWQgaW1wb3J0aW5nIG1lcmdlIGNvbW1pdHMgaWYgYWxsIG5vbi1tZXJnZSBjb21taXRzCisgICAgICAgICAgICAjIHJlYWNoYWJsZSBmcm9tIGl0IHdlcmUgYWxyZWFkeSBpbXBvcnRlZC4gSW4gdGhhdCBjYXNlIHdlCisgICAgICAgICAgICAjIGNhbiByb290IHRoZSBuZXcgY29tbWl0cyBpbiB0aGUgY3VycmVudCBoZWFkIHJldmlzaW9uLgorICAgICAgICAgICAgZGVmIGlzX2ltcG9ydGVkKHByZXYpOgorICAgICAgICAgICAgICAgIHBhcmVudHMgPSBydW5jbWQoImdpdCBzaG93IC0tbm8tcGF0Y2ggLS1wcmV0dHk9Zm9ybWF0OiVQICIgKyBwcmV2LCAqKmxhcmdzKS5zcGxpdCgpCisgICAgICAgICAgICAgICAgaWYgbGVuKHBhcmVudHMpID4gMToKKyAgICAgICAgICAgICAgICAgICAgZm9yIHAgaW4gcGFyZW50czoKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIG5vdCBpc19pbXBvcnRlZChwKToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb2dnZXIuZGVidWcoIk11c3QgaW1wb3J0ICVzIGJlY2F1c2UgJXMgaXMgbm90IGltcG9ydGVkLiIgJSAocmV2LCBwKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gRmFsc2UKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFRydWUKKyAgICAgICAgICAgICAgICBlbGlmIHByZXYgaW4gb2xkMm5ld19yZXZzOgorICAgICAgICAgICAgICAgICAgICByZXR1cm4gVHJ1ZQorICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgIGxvZ2dlci5kZWJ1ZygiTXVzdCBpbXBvcnQgJXMgYmVjYXVzZSAlcyBpcyBub3QgaW1wb3J0ZWQuIiAlIChyZXYsIHByZXYpKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gRmFsc2UKKyAgICAgICAgICAgIGlmIHJldiBub3QgaW4gcmV2cyBhbmQgaXNfaW1wb3J0ZWQocmV2KToKKyAgICAgICAgICAgICAgICBvbGQybmV3X3JldnNbcmV2XSA9IGhlYWQKKyAgICAgICAgICAgICAgICByZXR1cm4gaGVhZAorCisgICAgICAgICAgICAjIE5lZWQgdG8gaW1wb3J0IHJldi4gQ29sbGVjdCBzb21lIGluZm9ybWF0aW9uIGFib3V0IGl0LgorICAgICAgICAgICAgbG9nZ2VyLmRlYnVnKCJJbXBvcnRpbmcgJXMiICUgcmV2KQorICAgICAgICAgICAgKHBhcmVudHMsIGF1dGhvcl9uYW1lLCBhdXRob3JfZW1haWwsIGF1dGhvcl90aW1lc3RhbXAsIGJvZHkpID0gXAorICAgICAgICAgICAgICAgIHJ1bmNtZCgiZ2l0IHNob3cgLS1uby1wYXRjaCAtLXByZXR0eT1mb3JtYXQ6JVAleDAwJWFuJXgwMCVhZSV4MDAlYXQleDAwJUIgIiArIHJldiwgKipsYXJncykuc3BsaXQoY2hyKDApKQorICAgICAgICAgICAgcGFyZW50cyA9IHBhcmVudHMuc3BsaXQoKQorICAgICAgICAgICAgaWYgcGFyZW50czoKKyAgICAgICAgICAgICAgICAjIEFyYml0cmFyaWx5IHBpY2sgdGhlIGZpcnN0IHBhcmVudCBhcyBiYXNlLiBJdCBtYXkgb3IgbWF5IG5vdCBoYXZlCisgICAgICAgICAgICAgICAgIyBiZWVuIGltcG9ydGVkIGJlZm9yZS4gRm9yIGV4YW1wbGUsIGlmIHRoZSBwYXJlbnQgaXMgYSBtZXJnZSBjb21taXQKKyAgICAgICAgICAgICAgICAjIGFuZCBwcmV2aW91c2x5IHRoZSBjb21iaW5lZCByZXBvc2l0b3J5IHVzZWQgcGF0Y2hpbmcgYXMgdXBkYXRlCisgICAgICAgICAgICAgICAgIyBtZXRob2QsIHRoZW4gdGhlIGFjdHVhbCBtZXJnZSBjb21taXQgcGFyZW50IG5ldmVyIHdhcyBpbXBvcnRlZC4KKyAgICAgICAgICAgICAgICAjIFRvIGNvdmVyIHRoaXMsIFdlIHJlY3Vyc2l2ZWx5IGltcG9ydCBwYXJlbnRzLgorICAgICAgICAgICAgICAgIHBhcmVudCA9IHBhcmVudHNbMF0KKyAgICAgICAgICAgICAgICBuZXdfcGFyZW50ID0gaW1wb3J0X3JldihwYXJlbnQpCisgICAgICAgICAgICAgICAgIyBDbGVhbiBpbmRleCBhbmQgd29ya2luZyB0cmVlLiBUT0RPOiBjYW4gd2UgY29tYmluZSB0aGlzIGFuZCB0aGUKKyAgICAgICAgICAgICAgICAjIG5leHQgaW50byBvbmUgY29tbWFuZCB3aXRoIGxlc3MgZmlsZSBJTz8KKyAgICAgICAgICAgICAgICAjICJnaXQgcmVzZXQgLS1oYXJkIiBkb2VzIG5vdCB3b3JrLCBpdCBjaGFuZ2VzIEhFQUQgb2YgdGhlIHBhcmVudAorICAgICAgICAgICAgICAgICMgcmVwbywgd2hpY2ggd2Ugd2FudGVkIHRvIGF2b2lkLiBQcm9iYWJseSBuZWVkIHRvIGtlZXAKKyAgICAgICAgICAgICAgICAjIHRyYWNrIG9mIHRoZSByZXYgdGhhdCBjb3JyZXNwb25kcyB0byB0aGUgaW5kZXggYW5kIHVzZSBhcHBseV9jb21taXQoKS4KKyAgICAgICAgICAgICAgICBydW5jbWQoImdpdCBybSAtcSAtLWlnbm9yZS11bm1hdGNoIC1yZiAuIiwgKip3YXJncykKKyAgICAgICAgICAgICAgICAjIFVwZGF0ZSBpbmRleCBhbmQgd29ya2luZyB0cmVlIHRvIG1hdGNoIHRoZSBwYXJlbnQuCisgICAgICAgICAgICAgICAgcnVuY21kKCJnaXQgY2hlY2tvdXQgLXEgLWYgJXMgLiIgJSBuZXdfcGFyZW50LCAqKndhcmdzKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBwYXJlbnQgPSBOb25lCisgICAgICAgICAgICAgICAgIyBDbGVhbiBpbmRleCBhbmQgd29ya2luZyB0cmVlLgorICAgICAgICAgICAgICAgIHJ1bmNtZCgiZ2l0IHJtIC1xIC0taWdub3JlLXVubWF0Y2ggLXJmIC4iLCAqKndhcmdzKQorCisgICAgICAgICAgICAjIE1vZGlmeSBpbmRleCBhbmQgd29ya2luZyB0cmVlIHN1Y2ggdGhhdCBpdCBtaXJyb3JzIHRoZSBjb21taXQuCisgICAgICAgICAgICBhcHBseV9jb21taXQocGFyZW50LCByZXYsIGxhcmdzLCB3YXJncywgZGVzdF9kaXIsIGZpbGVfZmlsdGVyPWZpbGVfZmlsdGVyKQorCisgICAgICAgICAgICAjIE5vdyBjb21taXQuCisgICAgICAgICAgICBuZXdfdHJlZSA9IHJ1bmNtZCgiZ2l0IHdyaXRlLXRyZWUiLCAqKndhcmdzKS5zdHJpcCgpCisgICAgICAgICAgICBlbnYgPSBjb3B5LmRlZXBjb3B5KHdlbnYpCisgICAgICAgICAgICBlbnZbJ0dJVF9BVVRIT1JfTkFNRSddID0gYXV0aG9yX25hbWUKKyAgICAgICAgICAgIGVudlsnR0lUX0FVVEhPUl9FTUFJTCddID0gYXV0aG9yX2VtYWlsCisgICAgICAgICAgICBlbnZbJ0dJVF9BVVRIT1JfREFURSddID0gYXV0aG9yX3RpbWVzdGFtcAorICAgICAgICAgICAgaWYgaG9vazoKKyAgICAgICAgICAgICAgICAjIE5lZWQgdG8gdHVybiB0aGUgdmVyYmF0aW0gY29tbWl0IG1lc3NhZ2UgaW50byBzb21ldGhpbmcgcmVzZW1ibGluZyBhIHBhdGNoIGhlYWRlcgorICAgICAgICAgICAgICAgICMgZm9yIHRoZSBob29rLgorICAgICAgICAgICAgICAgIHdpdGggdGVtcGZpbGUuTmFtZWRUZW1wb3JhcnlGaWxlKGRlbGV0ZT1GYWxzZSkgYXMgcGF0Y2g6CisgICAgICAgICAgICAgICAgICAgIHBhdGNoLndyaXRlKCdTdWJqZWN0OiBbUEFUQ0hdICcpCisgICAgICAgICAgICAgICAgICAgIHBhdGNoLndyaXRlKGJvZHkpCisgICAgICAgICAgICAgICAgICAgIHBhdGNoLndyaXRlKCdcbi0tLVxuJykKKyAgICAgICAgICAgICAgICAgICAgcGF0Y2guY2xvc2UoKQorICAgICAgICAgICAgICAgICAgICBydW5jbWQoW2hvb2ssIHBhdGNoLm5hbWUsIHJldiwgbmFtZV0pCisgICAgICAgICAgICAgICAgICAgIHdpdGggb3BlbihwYXRjaC5uYW1lKSBhcyBmOgorICAgICAgICAgICAgICAgICAgICAgICAgYm9keSA9IGYucmVhZCgpW2xlbignU3ViamVjdDogW1BBVENIXSAnKTpdWzotbGVuKCdcbi0tLVxuJyldCisKKyAgICAgICAgICAgICMgV2UgY2FuIHNraXAgbm9uLW1lcmdlIGNvbW1pdHMgdGhhdCBkaWQgbm90IGNoYW5nZSBhbnkgZmlsZXMuIFRob3NlIGFyZSB0eXBpY2FsbHkKKyAgICAgICAgICAgICMgdGhlIHJlc3VsdCBvZiBmaWxlIGZpbHRlcmluZywgYWx0aG91Z2ggdGhleSBjb3VsZCBhbHNvIGhhdmUgYmVlbiBpbnRyb2R1Y2VkCisgICAgICAgICAgICAjIGludGVudGlvbmFsbHkgdXBzdHJlYW0sIGluIHdoaWNoIGNhc2Ugd2UgZHJvcCBzb21lIGluZm9ybWF0aW9uIGhlcmUuCisgICAgICAgICAgICBpZiBsZW4ocGFyZW50cykgPT0gMToKKyAgICAgICAgICAgICAgICBwYXJlbnRfcmV2ID0gaW1wb3J0X3JldihwYXJlbnRzWzBdKQorICAgICAgICAgICAgICAgIG9sZF90cmVlID0gcnVuY21kKCJnaXQgc2hvdyAtcyAtLXByZXR0eT1mb3JtYXQ6JVQgIiArIHBhcmVudF9yZXYsICoqd2FyZ3MpLnN0cmlwKCkKKyAgICAgICAgICAgICAgICBjb21taXQgPSBvbGRfdHJlZSAhPSBuZXdfdHJlZQorICAgICAgICAgICAgICAgIGlmIG5vdCBjb21taXQ6CisgICAgICAgICAgICAgICAgICAgIG5ld19yZXYgPSBwYXJlbnRfcmV2CisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIGNvbW1pdCA9IFRydWUKKyAgICAgICAgICAgIGlmIGNvbW1pdDoKKyAgICAgICAgICAgICAgICBuZXdfcmV2ID0gcnVuY21kKCJnaXQgY29tbWl0LXRyZWUiLnNwbGl0KCkgKyBhZGRfcChbaW1wb3J0X3JldihwKSBmb3IgcCBpbiBwYXJlbnRzXSkgKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWyItbSIsIGJvZHksIG5ld190cmVlXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVudj1lbnYpLnN0cmlwKCkKKyAgICAgICAgICAgIG9sZDJuZXdfcmV2c1tyZXZdID0gbmV3X3JldgorCisgICAgICAgICAgICByZXR1cm4gbmV3X3JldgorCisgICAgICAgIGlmIHJldnM6CisgICAgICAgICAgICBmb3IgcmV2IGluIHJldnM6CisgICAgICAgICAgICAgICAgaW1wb3J0X3JldihyZXYpCisgICAgICAgICAgICAjIFJlbWVtYmVyIGhvdyB0byB1cGRhdGUgb3VyIGN1cnJlbnQgaGVhZC4gTmV3IGNvbXBvbmVudHMgZ2V0IGFkZGVkLAorICAgICAgICAgICAgIyB1cGRhdGVkIGNvbXBvbmVudHMgZ2V0IHRoZSBkZWx0YSBiZXR3ZWVuIGN1cnJlbnQgaGVhZCBhbmQgdGhlIHVwZGF0ZWQgY29tcG9uZW50CisgICAgICAgICAgICAjIGFwcGxpZWQuCisgICAgICAgICAgICBhZGRpdGlvbmFsX2hlYWRzW29sZDJuZXdfcmV2c1tyZXZzWy0xXV1dID0gaGVhZCBpZiByZXBvWydsYXN0X3JldmlzaW9uJ10gZWxzZSBOb25lCisgICAgICAgICAgICByZXBvWydsYXN0X3JldmlzaW9uJ10gPSByZXZzWy0xXQorCisgICAgIyBOb3cgY29uc3RydWN0IHRoZSBmaW5hbCBtZXJnZSBjb21taXQuIFdlIGNyZWF0ZSB0aGUgdHJlZSBieQorICAgICMgc3RhcnRpbmcgd2l0aCB0aGUgaGVhZCBhbmQgYXBwbHlpbmcgdGhlIGNoYW5nZXMgZnJvbSBlYWNoCisgICAgIyBjb21wb25lbnRzIGltcG9ydGVkIGhlYWQgcmV2aXNpb24uCisgICAgaWYgYWRkaXRpb25hbF9oZWFkczoKKyAgICAgICAgcnVuY21kKCJnaXQgcmVzZXQgLS1oYXJkIiwgKip3YXJncykKKyAgICAgICAgZm9yIHJldiwgYmFzZSBpbiBhZGRpdGlvbmFsX2hlYWRzLml0ZW1zKCk6CisgICAgICAgICAgICBhcHBseV9jb21taXQoYmFzZSwgcmV2LCB3YXJncywgd2FyZ3MsIE5vbmUpCisKKyAgICAgICAgIyBDb21taXQgd2l0aCBhbGwgY29tcG9uZW50IGJyYW5jaGVzIGFzIHBhcmVudHMgYXMgd2VsbCBhcyB0aGUgcHJldmlvdXMgaGVhZC4KKyAgICAgICAgbG9nZ2VyLmluZm8oIldyaXRpbmcgZmluYWwgbWVyZ2UgY29tbWl0Li4uIikKKyAgICAgICAgbXNnID0gY29uZl9jb21taXRfbXNnKGNvbmYsIGNvbXBvbmVudHMpCisgICAgICAgIG5ld190cmVlID0gcnVuY21kKCJnaXQgd3JpdGUtdHJlZSIsICoqd2FyZ3MpLnN0cmlwKCkKKyAgICAgICAgbmV3X3JldiA9IHJ1bmNtZCgiZ2l0IGNvbW1pdC10cmVlIi5zcGxpdCgpICsKKyAgICAgICAgICAgICAgICAgICAgICAgICBhZGRfcChbaGVhZF0gKyBsaXN0KGFkZGl0aW9uYWxfaGVhZHMua2V5cygpKSkgKworICAgICAgICAgICAgICAgICAgICAgICAgIFsiLW0iLCBtc2csIG5ld190cmVlXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAqKndhcmdzKS5zdHJpcCgpCisgICAgICAgICMgQW5kIGRvbmUhIFRoaXMgaXMgdGhlIGZpcnN0IHRpbWUgd2UgY2hhbmdlIHRoZSBIRUFEIGluIHRoZSBhY3R1YWwgd29yayB0cmVlLgorICAgICAgICBydW5jbWQoImdpdCByZXNldCAtLWhhcmQgJXMiICUgbmV3X3JldikKKworICAgICAgICAjIFVwZGF0ZSBhbmQgc3RhZ2UgdGhlIChwb3RlbnRpYWxseSBtb2RpZmllZCkKKyAgICAgICAgIyBjb21iby1sYXllci5jb25mLCBidXQgZG8gbm90IGNvbW1pdCBzZXBhcmF0ZWx5LgorICAgICAgICBmb3IgbmFtZSBpbiByZXBvczoKKyAgICAgICAgICAgIHJlcG8gPSBjb25mLnJlcG9zW25hbWVdCisgICAgICAgICAgICByZXYgPSByZXBvWydsYXN0X3JldmlzaW9uJ10KKyAgICAgICAgICAgIGNvbmYudXBkYXRlKG5hbWUsICJsYXN0X3JldmlzaW9uIiwgcmV2KQorICAgICAgICBpZiBjb21taXRfY29uZl9maWxlKGNvbmYsIGNvbXBvbmVudHMsIEZhbHNlKToKKyAgICAgICAgICAgICMgTXVzdCBhdWdtZW50IHRoZSBwcmV2aW91cyBjb21taXQuCisgICAgICAgICAgICBydW5jbWQoImdpdCBjb21taXQgLS1hbWVuZCAtQyBIRUFEIikKKworCitzY2FubmVkX3JldnMgPSBGYWxzZQorZGVmIGZpbmRfcmV2cyhvbGQybmV3LCBoZWFkKToKKyAgICAnJydDb25zdHJ1Y3QgbWFwcGluZyBmcm9tIG9yaWdpbmFsIGNvbW1pdCBoYXNoIHRvIGNvbW1pdCBoYXNoIGluCisgICAgY29tYmluZWQgcmVwbyBieSBsb29raW5nIGF0IHRoZSBjb21taXQgbWVzc2FnZXMuIERlcGVuZHMgb24gdGhlCisgICAgIkZyb20gLi4uIHJldjogLi4uIiBjb252ZW50aW9uLicnJworICAgIGxvZ2dlci5pbmZvKCJBbmFseXppbmcgbG9nIG1lc3NhZ2VzIHRvIGZpbmQgcHJldmlvdXNseSBpbXBvcnRlZCBjb21taXRzLi4uIikKKyAgICBudW1fa25vd24gPSBsZW4ob2xkMm5ldykKKyAgICBsb2cgPSBydW5jbWQoImdpdCBsb2cgLS1ncmVwPSdGcm9tIC4qIHJldjogW2EtZkEtRjAtOV1bYS1mQS1GMC05XSonIC0tcHJldHR5PWZvcm1hdDolSCV4MDAlQiV4MDAgIiArIGhlYWQpLnNwbGl0KGNocigwKSkKKyAgICByZWdleCA9IHJlLmNvbXBpbGUocidGcm9tIC4qIHJldjogKFthLWZBLUYwLTldKyknKQorICAgIGZvciBuZXdfcmV2LCBib2R5IGluIHppcCgqW2l0ZXIobG9nKV0qIDIpOgorICAgICAgICAjIFVzZSB0aGUgbGFzdCBvbmUsIGluIHRoZSB1bmxpa2VseSBjYXNlIHRoZXJlIGFyZSBtb3JlIHRoYW4gb25lLgorICAgICAgICByZXYgPSByZWdleC5maW5kYWxsKGJvZHkpWy0xXQorICAgICAgICBpZiByZXYgbm90IGluIG9sZDJuZXc6CisgICAgICAgICAgICBvbGQybmV3W3Jldl0gPSBuZXdfcmV2LnN0cmlwKCkKKyAgICBsb2dnZXIuaW5mbygiRm91bmQgJWQgYWRkaXRpb25hbCBjb21taXRzLCBsZWFkaW5nIHRvOiAlcyIgJSAobGVuKG9sZDJuZXcpIC0gbnVtX2tub3duLCBvbGQybmV3KSkKKworCitkZWYgYXBwbHlfY29tbWl0KHBhcmVudCwgcmV2LCBsYXJncywgd2FyZ3MsIGRlc3RfZGlyLCBmaWxlX2ZpbHRlcj1Ob25lKToKKyAgICAnJydDb21wYXJlIHJldmlzaW9uIGFnYWluc3QgcGFyZW50LCByZW1vdmUgZmlsZXMgZGVsZXRlZCBpbiB0aGUKKyAgICBjb21taXQsIHJlLXdyaXRlIG5ldyBvciBtb2RpZmllZCBvbmVzLiBNb3ZlcyB0aGVtIGludG8gZGVzdF9kaXIuCisgICAgT3B0aW9uYWxseSBmaWx0ZXJzIGZpbGVzLgorICAgICcnJworICAgIGlmIG5vdCBkZXN0X2RpcjoKKyAgICAgICAgZGVzdF9kaXIgPSAiLiIKKyAgICAjIC1yIHJlY3Vyc2VzIGludG8gc3ViLWRpcmVjdG9yaWVzLCBnaXZlbiBpcyB0aGUgZnVsbCBvdmVydmlldyBvZgorICAgICMgd2hhdCBjaGFuZ2VkLiAgV2UgZG8gbm90IGNhcmUgYWJvdXQgY29weS9lZGl0cyBvciByZW5hbWVzLCBzbyB3ZQorICAgICMgY2FuIGRpc2FibGUgdGhvc2Ugd2l0aCAtLW5vLXJlbmFtZXMgKGJ1dCB3ZSBzdGlsbCBwYXJzZSB0aGVtLAorICAgICMgYmVjYXVzZSBpdCB3YXMgbm90IGNsZWFyIGZyb20gZ2l0IGRvY3VtZW50YXRpb24gd2hldGhlciBDIGFuZCBNCisgICAgIyBsaW5lcyBjYW4gc3RpbGwgb2NjdXIpLgorICAgIGxvZ2dlci5kZWJ1ZygiQXBwbHlpbmcgY2hhbmdlcyBiZXR3ZWVuICVzIGFuZCAlcyBpbiAlcyIgJSAocGFyZW50LCByZXYsIGxhcmdzWyJkZXN0ZGlyIl0pKQorICAgIGRlbGV0ZSA9IFtdCisgICAgdXBkYXRlID0gW10KKyAgICBpZiBwYXJlbnQ6CisgICAgICAgICMgQXBwbHkgZGVsdGEuCisgICAgICAgIGNoYW5nZXMgPSBydW5jbWQoImdpdCBkaWZmLXRyZWUgLS1uby1jb21taXQtaWQgLS1uby1yZW5hbWVzIC0tbmFtZS1zdGF0dXMgLXIgLS1yYXcgLXogJXMgJXMiICUgKHBhcmVudCwgcmV2KSwgKipsYXJncykuc3BsaXQoY2hyKDApKQorICAgICAgICBmb3Igc3RhdHVzLCBuYW1lIGluIHppcCgqW2l0ZXIoY2hhbmdlcyldKjIpOgorICAgICAgICAgICAgaWYgc3RhdHVzWzBdIGluICJBQ01SVCI6CisgICAgICAgICAgICAgICAgdXBkYXRlLmFwcGVuZChuYW1lKQorICAgICAgICAgICAgZWxpZiBzdGF0dXNbMF0gaW4gIkQiOgorICAgICAgICAgICAgICAgIGRlbGV0ZS5hcHBlbmQobmFtZSkKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgbG9nZ2VyLmVycm9yKCJVbmtub3duIHN0YXR1cyAlcyBvZiBmaWxlICVzIGluIHJldmlzaW9uICVzIiAlIChzdGF0dXMsIG5hbWUsIHJldikpCisgICAgICAgICAgICAgICAgc3lzLmV4aXQoMSkKKyAgICBlbHNlOgorICAgICAgICAjIENvcHkgYWxsIGZpbGVzLgorICAgICAgICB1cGRhdGUuZXh0ZW5kKHJ1bmNtZCgiZ2l0IGxzLXRyZWUgLXIgLS1uYW1lLW9ubHkgLXogJXMiICUgcmV2LCAqKmxhcmdzKS5zcGxpdChjaHIoMCkpKQorCisgICAgIyBJbmNsdWRlL2V4Y2x1ZGUgZmlsZXMgYXMgZGVmaW5lIGluIHRoZSBjb21wb25lbnQgY29uZmlnLgorICAgICMgQm90aCB1cGRhdGVkIGFuZCBkZWxldGVkIGZpbGUgbGlzdHMgZ2V0IGZpbHRlcmVkLCBiZWNhdXNlIGl0IG1pZ2h0IGhhcHBlbgorICAgICMgdGhhdCBhIGZpbGUgZ2V0cyBleGNsdWRlZCwgcHVsbGVkIGZyb20gYSBkaWZmZXJlbnQgY29tcG9uZW50LCBhbmQgdGhlbiB0aGUKKyAgICAjIGV4Y2x1ZGVkIGZpbGUgZ2V0cyBkZWxldGVkLiBJbiB0aGF0IGNhc2Ugd2UgbXVzdCBrZWVwIHRoZSBjb3B5LgorICAgIGlmIGZpbGVfZmlsdGVyOgorICAgICAgICBmaWxlX2ZpbHRlcih1cGRhdGUpCisgICAgICAgIGZpbGVfZmlsdGVyKGRlbGV0ZSkKKworICAgICMgV2UgZXhwb3J0IGludG8gYSB0YXIgYXJjaGl2ZSBoZXJlIGFuZCBleHRyYWN0IHdpdGggdGFyIGJlY2F1c2UgaXQgaXMgc2ltcGxlIChubworICAgICMgbmVlZCB0byBpbXBsZW1lbnQgZmlsZSBhbmQgc3ltbGluayB3cml0aW5nIG91cnNlbHZlcykgYW5kIGdpdmVzIHVzIHNvbWUgZGVncmVlCisgICAgIyBvZiBwYXJhbGxlbCBJTy4gVGhlIGRvd25zaWRlIGlzIHRoYXQgd2UgaGF2ZSB0byBwYXNzIHRoZSBsaXN0IG9mIGZpbGVzIHZpYQorICAgICMgY29tbWFuZCBsaW5lIHBhcmFtZXRlcnMgLSBob3BlZnVsbHkgdGhlcmUgd2lsbCBuZXZlciBiZSB0b28gbWFueSBhdCBvbmNlLgorICAgIGlmIHVwZGF0ZToKKyAgICAgICAgdGFyZ2V0ID0gb3MucGF0aC5qb2luKHdhcmdzWyJkZXN0ZGlyIl0sIGRlc3RfZGlyKQorICAgICAgICBpZiBub3Qgb3MucGF0aC5pc2Rpcih0YXJnZXQpOgorICAgICAgICAgICAgb3MubWFrZWRpcnModGFyZ2V0KQorICAgICAgICBxdW90ZWRfdGFyZ2V0ID0gcGlwZXMucXVvdGUodGFyZ2V0KQorICAgICAgICAjIG9zLnN5c2NvbmYoJ1NDX0FSR19NQVgnKSBpcyBseWluZzogcnVubmluZyBhIGNvbW1hbmQgd2l0aAorICAgICAgICAjIHN0cmluZyBsZW5ndGggNjI5MzQzIGFscmVhZHkgZmFpbGVkIHdpdGggIkFyZ3VtZW50IGxpc3QgdG9vCisgICAgICAgICMgbG9uZyIgYWx0aG91Z2ggU0NfQVJHX01BWCA9IDIwOTcxNTIuICJtYW4gZXhlY3ZlIiBleHBsYWlucworICAgICAgICAjIHRoZSBsaW1pdGF0aW9ucywgYnV0IHRob3NlIGFyZSBwcmV0dHkgY29tcGxpY2F0ZWQuIFNvIGhlcmUKKyAgICAgICAgIyB3ZSBqdXN0IGhhcmQtY29kZSBhIGZpeGVkIHZhbHVlIHdoaWNoIGlzIG1vcmUgbGlrZWx5IHRvIHdvcmsuCisgICAgICAgIG1heF9jbWRzaXplID0gNjQgKiAxMDI0CisgICAgICAgIHdoaWxlIHVwZGF0ZToKKyAgICAgICAgICAgIHF1b3RlZF9hcmdzID0gW10KKyAgICAgICAgICAgIHVucXVvdGVkX2FyZ3MgPSBbXQorICAgICAgICAgICAgY21kc2l6ZSA9IDEwMCArIGxlbihxdW90ZWRfdGFyZ2V0KQorICAgICAgICAgICAgd2hpbGUgdXBkYXRlOgorICAgICAgICAgICAgICAgIHF1b3RlZF9uZXh0ID0gcGlwZXMucXVvdGUodXBkYXRlWzBdKQorICAgICAgICAgICAgICAgIHNpemVfbmV4dCA9IGxlbihxdW90ZWRfbmV4dCkgKyBsZW4oZGVzdF9kaXIpICsgMQorICAgICAgICAgICAgICAgIGxvZ2dlci5kZWJ1ZygnY21kbGluZSBsZW5ndGggJWQgKyAlZCA8ICVkPycgJSAoY21kc2l6ZSwgc2l6ZV9uZXh0LCBvcy5zeXNjb25mKCdTQ19BUkdfTUFYJykpKQorICAgICAgICAgICAgICAgIGlmIGNtZHNpemUgKyBzaXplX25leHQgPCBtYXhfY21kc2l6ZToKKyAgICAgICAgICAgICAgICAgICAgcXVvdGVkX2FyZ3MuYXBwZW5kKHF1b3RlZF9uZXh0KQorICAgICAgICAgICAgICAgICAgICB1bnF1b3RlZF9hcmdzLmFwcGVuZCh1cGRhdGUucG9wKDApKQorICAgICAgICAgICAgICAgICAgICBjbWRzaXplICs9IHNpemVfbmV4dAorICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgIGxvZ2dlci5kZWJ1ZygnQnJlYWtpbmcgdGhlIGNtZGxpbmUgYXQgbGVuZ3RoICVkJyAlIGNtZHNpemUpCisgICAgICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgICAgICBsb2dnZXIuZGVidWcoJ0ZpbmFsIGNtZGxpbmUgbGVuZ3RoICVkIC8gJWQnICUgKGNtZHNpemUsIG9zLnN5c2NvbmYoJ1NDX0FSR19NQVgnKSkpCisgICAgICAgICAgICBjbWQgPSAiZ2l0IGFyY2hpdmUgJXMgJXMgfCB0YXIgLUMgJXMgLXhmIC0iICUgKHJldiwgJyAnLmpvaW4ocXVvdGVkX2FyZ3MpLCBxdW90ZWRfdGFyZ2V0KQorICAgICAgICAgICAgbG9nZ2VyLmRlYnVnKCdGaXJzdCBjbWRsaW5lIGxlbmd0aCAlZCcgJSBsZW4oY21kKSkKKyAgICAgICAgICAgIHJ1bmNtZChjbWQsICoqbGFyZ3MpCisgICAgICAgICAgICBjbWQgPSAiZ2l0IGFkZCAtZiIuc3BsaXQoKSArIFtvcy5wYXRoLmpvaW4oZGVzdF9kaXIsIHgpIGZvciB4IGluIHVucXVvdGVkX2FyZ3NdCisgICAgICAgICAgICBsb2dnZXIuZGVidWcoJ1NlY29uZCBjbWRsaW5lIGxlbmd0aCAlZCcgJSByZWR1Y2UobGFtYmRhIHgsIHk6IHggKyBsZW4oeSksIGNtZCwgMCkpCisgICAgICAgICAgICBydW5jbWQoY21kLCAqKndhcmdzKQorICAgIGlmIGRlbGV0ZToKKyAgICAgICAgZm9yIHBhdGggaW4gZGVsZXRlOgorICAgICAgICAgICAgaWYgZGVzdF9kaXI6CisgICAgICAgICAgICAgICAgcGF0aCA9IG9zLnBhdGguam9pbihkZXN0X2RpciwgcGF0aCkKKyAgICAgICAgcnVuY21kKCJnaXQgcm0gLWYgLS1pZ25vcmUtdW5tYXRjaCIuc3BsaXQoKSArIFtvcy5wYXRoLmpvaW4oZGVzdF9kaXIsIHgpIGZvciB4IGluIGRlbGV0ZV0sICoqd2FyZ3MpCisKIGRlZiBhY3Rpb25fZXJyb3IoY29uZiwgYXJncyk6CiAgICAgbG9nZ2VyLmluZm8oImludmFsaWQgYWN0aW9uICVzIiAlIGFyZ3NbMF0pCiAKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9zY3JpcHRzL2NvbnRyaWIvYmJ2YXJzLnB5IGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L3NjcmlwdHMvY29udHJpYi9iYnZhcnMucHkKaW5kZXggMDg5NmQ2NC4uZDhkMDU5NCAxMDA3NTUKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L3NjcmlwdHMvY29udHJpYi9iYnZhcnMucHkKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L3NjcmlwdHMvY29udHJpYi9iYnZhcnMucHkKQEAgLTEsNCArMSw0IEBACi0jIS91c3IvYmluL2VudiBweXRob24KKyMhL3Vzci9iaW4vZW52IHB5dGhvbjMKIAogIyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQogIyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQpAQCAtMjQsMTIgKzI0LDEyIEBACiBpbXBvcnQgcmUKIAogZGVmIHVzYWdlKCk6Ci0gICAgcHJpbnQgJ1VzYWdlOiAlcyAtZCBGSUxFTkFNRSBbLWQgRklMRU5BTUVdKiAtbSBNRVRBRElSIFstbSBNQVRBRElSXSonICUgb3MucGF0aC5iYXNlbmFtZShzeXMuYXJndlswXSkKLSAgICBwcmludCAnICAtZCBGSUxFTkFNRSAgICAgICAgIGRvY3VtZW50YXRpb24gZmlsZSB0byBzZWFyY2gnCi0gICAgcHJpbnQgJyAgLWgsIC0taGVscCAgICAgICAgICBkaXNwbGF5IHRoaXMgaGVscCBhbmQgZXhpdCcKLSAgICBwcmludCAnICAtbSBNRVRBRElSICAgICAgICAgIG1ldGEgZGlyZWN0b3J5IHRvIHNlYXJjaCBmb3IgcmVjaXBlcycKLSAgICBwcmludCAnICAtdCBGSUxFTkFNRSAgICAgICAgIGRvY3VtZW50YXRpb24gY29uZmlnIGZpbGUgKGZvciBkb2MgdGFncyknCi0gICAgcHJpbnQgJyAgLVQgICAgICAgICAgICAgICAgICBPbmx5IGRpc3BsYXkgdmFyaWFibGVzIHdpdGggZG9jIHRhZ3MgKHJlcXVpcmVzIC10KScKKyAgICBwcmludCgnVXNhZ2U6ICVzIC1kIEZJTEVOQU1FIFstZCBGSUxFTkFNRV0qIC1tIE1FVEFESVIgWy1tIE1BVEFESVJdKicgJSBvcy5wYXRoLmJhc2VuYW1lKHN5cy5hcmd2WzBdKSkKKyAgICBwcmludCgnICAtZCBGSUxFTkFNRSAgICAgICAgIGRvY3VtZW50YXRpb24gZmlsZSB0byBzZWFyY2gnKQorICAgIHByaW50KCcgIC1oLCAtLWhlbHAgICAgICAgICAgZGlzcGxheSB0aGlzIGhlbHAgYW5kIGV4aXQnKQorICAgIHByaW50KCcgIC1tIE1FVEFESVIgICAgICAgICAgbWV0YSBkaXJlY3RvcnkgdG8gc2VhcmNoIGZvciByZWNpcGVzJykKKyAgICBwcmludCgnICAtdCBGSUxFTkFNRSAgICAgICAgIGRvY3VtZW50YXRpb24gY29uZmlnIGZpbGUgKGZvciBkb2MgdGFncyknKQorICAgIHByaW50KCcgIC1UICAgICAgICAgICAgICAgICAgT25seSBkaXNwbGF5IHZhcmlhYmxlcyB3aXRoIGRvYyB0YWdzIChyZXF1aXJlcyAtdCknKQogCiBkZWYgcmVjaXBlX2JidmFycyhyZWNpcGUpOgogICAgICcnJyBSZXR1cm4gYSB1bmlxdWUgc2V0IG9mIGV2ZXJ5IGJidmFyIGVuY291bnRlcmVkIGluIHRoZSByZWNpcGUgJycnCkBAIC0zNyw5ICszNyw5IEBACiAgICAgdnNldCA9IHNldCgpCiAgICAgdHJ5OgogICAgICAgICByID0gb3BlbihyZWNpcGUpCi0gICAgZXhjZXB0IElPRXJyb3IgYXMgKGVycm5vLCBzdHJlcnJvcik6Ci0gICAgICAgIHByaW50ICdXQVJOSU5HOiBGYWlsZWQgdG8gb3BlbiByZWNpcGUgJywgcmVjaXBlCi0gICAgICAgIHByaW50IHN0cmVycm9yCisgICAgZXhjZXB0IElPRXJyb3IgYXMgZXJyOgorICAgICAgICBwcmludCgnV0FSTklORzogRmFpbGVkIHRvIG9wZW4gcmVjaXBlICcsIHJlY2lwZSkKKyAgICAgICAgcHJpbnQoZXJyLmFyZ3NbMV0pCiAKICAgICBmb3IgbGluZSBpbiByOgogICAgICAgICAjIFN0cmlwIGFueSBjb21tZW50cyBmcm9tIHRoZSBsaW5lCkBAIC01OSw4ICs1OSw4IEBACiAgICAgZm9yIHJvb3QsZGlycyxmaWxlcyBpbiBvcy53YWxrKG1ldGFkaXIpOgogICAgICAgICBmb3IgbmFtZSBpbiBmaWxlczoKICAgICAgICAgICAgIGlmIG5hbWUuZmluZCgiLmJiIikgPj0gMDoKLSAgICAgICAgICAgICAgICBmb3Iga2V5IGluIHJlY2lwZV9iYnZhcnMob3MucGF0aC5qb2luKHJvb3QsbmFtZSkpLml0ZXJrZXlzKCk6Ci0gICAgICAgICAgICAgICAgICAgIGlmIGJidmFycy5oYXNfa2V5KGtleSk6CisgICAgICAgICAgICAgICAgZm9yIGtleSBpbiByZWNpcGVfYmJ2YXJzKG9zLnBhdGguam9pbihyb290LG5hbWUpKS5rZXlzKCk6CisgICAgICAgICAgICAgICAgICAgIGlmIGtleSBpbiBiYnZhcnM6CiAgICAgICAgICAgICAgICAgICAgICAgICBiYnZhcnNba2V5XSA9IGJidmFyc1trZXldICsgMQogICAgICAgICAgICAgICAgICAgICBlbHNlOgogICAgICAgICAgICAgICAgICAgICAgICAgYmJ2YXJzW2tleV0gPSAxCkBAIC03MSw5ICs3MSw5IEBACiAgICAgZm9yIGRvYyBpbiBkb2NmaWxlczoKICAgICAgICAgdHJ5OgogICAgICAgICAgICAgZiA9IG9wZW4oZG9jKQotICAgICAgICBleGNlcHQgSU9FcnJvciBhcyAoZXJybm8sIHN0cmVycm9yKToKLSAgICAgICAgICAgIHByaW50ICdXQVJOSU5HOiBGYWlsZWQgdG8gb3BlbiBkb2MgJywgZG9jCi0gICAgICAgICAgICBwcmludCBzdHJlcnJvcgorICAgICAgICBleGNlcHQgSU9FcnJvciBhcyBlcnI6CisgICAgICAgICAgICBwcmludCgnV0FSTklORzogRmFpbGVkIHRvIG9wZW4gZG9jICcsIGRvYykKKyAgICAgICAgICAgIHByaW50KGVyci5hcmdzWzFdKQogICAgICAgICBmb3IgbGluZSBpbiBmOgogICAgICAgICAgICAgaWYgcHJvZy5tYXRjaChsaW5lKToKICAgICAgICAgICAgICAgICByZXR1cm4gVHJ1ZQpAQCAtODcsOCArODcsOCBAQAogCiAgICAgdHJ5OgogICAgICAgICBmID0gb3Blbihkb2Njb25mKQotICAgIGV4Y2VwdCBJT0Vycm9yIGFzIChlcnJubywgc3RyZXJyb3IpOgotICAgICAgICByZXR1cm4gc3RyZXJyb3IKKyAgICBleGNlcHQgSU9FcnJvciBhcyBlcnI6CisgICAgICAgIHJldHVybiBlcnIuYXJnc1sxXQogCiAgICAgZm9yIGxpbmUgaW4gZjoKICAgICAgICAgbSA9IHByb2cuc2VhcmNoKGxpbmUpCkBAIC0xMDksOCArMTA5LDggQEAKICAgICAjIENvbGxlY3QgYW5kIHZhbGlkYXRlIGlucHV0CiAgICAgdHJ5OgogICAgICAgICBvcHRzLCBhcmdzID0gZ2V0b3B0LmdldG9wdChzeXMuYXJndlsxOl0sICJkOmhtOnQ6VCIsIFsiaGVscCJdKQotICAgIGV4Y2VwdCBnZXRvcHQuR2V0b3B0RXJyb3IsIGVycjoKLSAgICAgICAgcHJpbnQgJyVzJyAlIHN0cihlcnIpCisgICAgZXhjZXB0IGdldG9wdC5HZXRvcHRFcnJvciBhcyBlcnI6CisgICAgICAgIHByaW50KCclcycgJSBzdHIoZXJyKSkKICAgICAgICAgdXNhZ2UoKQogICAgICAgICBzeXMuZXhpdCgyKQogCkBAIC0xMjIsMTMgKzEyMiwxMyBAQAogICAgICAgICAgICAgaWYgb3MucGF0aC5pc2ZpbGUoYSk6CiAgICAgICAgICAgICAgICAgZG9jZmlsZXMuYXBwZW5kKGEpCiAgICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgIHByaW50ICdFUlJPUjogZG9jdW1lbnRhdGlvbiBmaWxlICVzIGlzIG5vdCBhIHJlZ3VsYXIgZmlsZScgJSAoYSkKKyAgICAgICAgICAgICAgICBwcmludCgnRVJST1I6IGRvY3VtZW50YXRpb24gZmlsZSAlcyBpcyBub3QgYSByZWd1bGFyIGZpbGUnICUgYSkKICAgICAgICAgICAgICAgICBzeXMuZXhpdCgzKQogICAgICAgICBlbGlmIG8gPT0gJy1tJzoKICAgICAgICAgICAgIGlmIG9zLnBhdGguaXNkaXIoYSk6CiAgICAgICAgICAgICAgICAgbWV0YWRpcnMuYXBwZW5kKGEpCiAgICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgIHByaW50ICdFUlJPUjogbWV0YSBkaXJlY3RvcnkgJXMgaXMgbm90IGEgZGlyZWN0b3J5JyAlIChhKQorICAgICAgICAgICAgICAgIHByaW50KCdFUlJPUjogbWV0YSBkaXJlY3RvcnkgJXMgaXMgbm90IGEgZGlyZWN0b3J5JyAlIGEpCiAgICAgICAgICAgICAgICAgc3lzLmV4aXQoNCkKICAgICAgICAgZWxpZiBvID09ICItdCI6CiAgICAgICAgICAgICBpZiBvcy5wYXRoLmlzZmlsZShhKToKQEAgLTEzOSwzMSArMTM5LDMxIEBACiAgICAgICAgICAgICBhc3NlcnQgRmFsc2UsICJ1bmhhbmRsZWQgb3B0aW9uIgogCiAgICAgaWYgbGVuKGRvY2ZpbGVzKSA9PSAwOgotICAgICAgICBwcmludCAnRVJST1I6IG5vIGRvY2ZpbGUgc3BlY2lmaWVkJworICAgICAgICBwcmludCgnRVJST1I6IG5vIGRvY2ZpbGUgc3BlY2lmaWVkJykKICAgICAgICAgdXNhZ2UoKQogICAgICAgICBzeXMuZXhpdCg1KQogCiAgICAgaWYgbGVuKG1ldGFkaXJzKSA9PSAwOgotICAgICAgICBwcmludCAnRVJST1I6IG5vIG1ldGFkaXIgc3BlY2lmaWVkJworICAgICAgICBwcmludCgnRVJST1I6IG5vIG1ldGFkaXIgc3BlY2lmaWVkJykKICAgICAgICAgdXNhZ2UoKQogICAgICAgICBzeXMuZXhpdCg2KQogCiAgICAgaWYgb25seWRvY3RhZ3MgYW5kIGRvY2NvbmYgPT0gIiI6Ci0gICAgICAgIHByaW50ICdFUlJPUjogbm8gZG9jY29uZiBzcGVjaWZpZWQnCisgICAgICAgIHByaW50KCdFUlJPUjogbm8gZG9jY29uZiBzcGVjaWZpZWQnKQogICAgICAgICB1c2FnZSgpCiAgICAgICAgIHN5cy5leGl0KDcpCiAKICAgICAjIENvbGxlY3QgYWxsIHRoZSB2YXJpYWJsZSBuYW1lcyBmcm9tIHRoZSByZWNpcGVzIGluIHRoZSBtZXRhZGlycwogICAgIGZvciBtIGluIG1ldGFkaXJzOgotICAgICAgICBmb3Iga2V5LGNudCBpbiBjb2xsZWN0X2JidmFycyhtKS5pdGVyaXRlbXMoKToKLSAgICAgICAgICAgIGlmIGJidmFycy5oYXNfa2V5KGtleSk6CisgICAgICAgIGZvciBrZXksY250IGluIGNvbGxlY3RfYmJ2YXJzKG0pLml0ZW1zKCk6CisgICAgICAgICAgICBpZiBrZXkgaW4gYmJ2YXJzOgogICAgICAgICAgICAgICAgIGJidmFyc1trZXldID0gYmJ2YXJzW2tleV0gKyBjbnQKICAgICAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAgICAgYmJ2YXJzW2tleV0gPSBjbnQKIAogICAgICMgQ2hlY2sgZWFjaCB2YXIgZm9yIGRvY3VtZW50YXRpb24KICAgICB2YXJsZW4gPSAwCi0gICAgZm9yIHYgaW4gYmJ2YXJzLml0ZXJrZXlzKCk6CisgICAgZm9yIHYgaW4gYmJ2YXJzLmtleXMoKToKICAgICAgICAgaWYgbGVuKHYpID4gdmFybGVuOgogICAgICAgICAgICAgdmFybGVuID0gbGVuKHYpCiAgICAgICAgIGlmIG5vdCBiYnZhcl9pc19kb2N1bWVudGVkKHYsIGRvY2ZpbGVzKToKQEAgLTE3MiwxNCArMTcyLDE0IEBACiAgICAgdmFybGVuID0gdmFybGVuICsgMQogCiAgICAgIyBSZXBvcnQgYWxsIHVuZG9jdW1lbnRlZCB2YXJpYWJsZXMKLSAgICBwcmludCAnRm91bmQgJWQgdW5kb2N1bWVudGVkIGJiIHZhcmlhYmxlcyAob3V0IG9mICVkKTonICUgKGxlbih1bmRvY3VtZW50ZWQpLCBsZW4oYmJ2YXJzKSkKKyAgICBwcmludCgnRm91bmQgJWQgdW5kb2N1bWVudGVkIGJiIHZhcmlhYmxlcyAob3V0IG9mICVkKTonICUgKGxlbih1bmRvY3VtZW50ZWQpLCBsZW4oYmJ2YXJzKSkpCiAgICAgaGVhZGVyID0gJyVzJXMlcycgJSAoc3RyKCJWQVJJQUJMRSIpLmxqdXN0KHZhcmxlbiksIHN0cigiQ09VTlQiKS5sanVzdCg2KSwgc3RyKCJET0NUQUciKS5sanVzdCg3KSkKLSAgICBwcmludCBoZWFkZXIKLSAgICBwcmludCBzdHIoIiIpLmxqdXN0KGxlbihoZWFkZXIpLCAnPScpCisgICAgcHJpbnQoaGVhZGVyKQorICAgIHByaW50KHN0cigiIikubGp1c3QobGVuKGhlYWRlciksICc9JykpCiAgICAgZm9yIHYgaW4gdW5kb2N1bWVudGVkOgogICAgICAgICBkb2N0YWcgPSBiYnZhcl9kb2N0YWcodiwgZG9jY29uZikKICAgICAgICAgaWYgbm90IG9ubHlkb2N0YWdzIG9yIG5vdCBkb2N0YWcgPT0gIiI6Ci0gICAgICAgICAgICBwcmludCAnJXMlcyVzJyAlICh2LmxqdXN0KHZhcmxlbiksIHN0cihiYnZhcnNbdl0pLmxqdXN0KDYpLCBkb2N0YWcpCisgICAgICAgICAgICBwcmludCgnJXMlcyVzJyAlICh2LmxqdXN0KHZhcmxlbiksIHN0cihiYnZhcnNbdl0pLmxqdXN0KDYpLCBkb2N0YWcpKQogCiAKIGlmIF9fbmFtZV9fID09ICJfX21haW5fXyI6CmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvc2NyaXB0cy9jb250cmliL2J1aWxkLXBlcmYtdGVzdC13cmFwcGVyLnNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L3NjcmlwdHMvY29udHJpYi9idWlsZC1wZXJmLXRlc3Qtd3JhcHBlci5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5lMDNlYTk3Ci0tLSAvZGV2L251bGwKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L3NjcmlwdHMvY29udHJpYi9idWlsZC1wZXJmLXRlc3Qtd3JhcHBlci5zaApAQCAtMCwwICsxLDE1MyBAQAorIyEvYmluL2Jhc2gKKyMKKyMgQnVpbGQgcGVyZm9ybWFuY2UgdGVzdCBzY3JpcHQgd3JhcHBlcgorIworIyBDb3B5cmlnaHQgKGMpIDIwMTYsIEludGVsIENvcnBvcmF0aW9uLgorIworIyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorIyB1bmRlciB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLAorIyB2ZXJzaW9uIDIsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorIworIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCisjIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvcgorIyBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yCisjIG1vcmUgZGV0YWlscy4KKyMKKyMKKyMgVGhpcyBzY3JpcHQgaXMgYSBzaW1wbGUgd3JhcHBlciBhcm91bmQgdGhlIGFjdHVhbCBidWlsZCBwZXJmb3JtYW5jZSB0ZXN0ZXIKKyMgc2NyaXB0LiBUaGlzIHNjcmlwdCBpbml0aWFsaXplcyB0aGUgYnVpbGQgZW52aXJvbm1lbnQsIHJ1bnMKKyMgb2UtYnVpbGQtcGVyZi10ZXN0IGFuZCBhcmNoaXZlcyB0aGUgcmVzdWx0cy4KKworc2NyaXB0PWBiYXNlbmFtZSAkMGAKK2FyY2hpdmVfZGlyPX4vcGVyZi1yZXN1bHRzL2FyY2hpdmVzCisKK3VzYWdlICgpIHsKK2NhdCA8PCBFT0YKK1VzYWdlOiAkc2NyaXB0IFstaF0gWy1jIENPTU1JVElTSF0gWy1DIEdJVF9SRVBPXQorCitPcHRpb25hbCBhcmd1bWVudHM6CisgIC1oICAgICAgICAgICAgICAgIHNob3cgdGhpcyBoZWxwIGFuZCBleGl0LgorICAtYSBBUkNISVZFX0RJUiAgICBhcmNoaXZlIHJlc3VsdHMgdGFyYmFsbCBoZXJlLCBnaXZlIGFuIGVtcHR5IHN0cmluZyB0bworICAgICAgICAgICAgICAgICAgICBkaXNhYmxlIHRhcmJhbGwgYXJjaGl2aW5nIChkZWZhdWx0OiAkYXJjaGl2ZV9kaXIpCisgIC1jIENPTU1JVElTSCAgICAgIHRlc3QgKGNoZWNrb3V0KSB0aGlzIGNvbW1pdAorICAtQyBHSVRfUkVQTyAgICAgICBjb21taXQgcmVzdWx0cyBpbnRvIEdpdAorICAtdyBXT1JLX0RJUiAgICAgICB3b3JrIGRpciBmb3IgdGhpcyBzY3JpcHQKKyAgICAgICAgICAgICAgICAgICAgKGRlZmF1bHQ6IEdJVF9UT1BfRElSL2J1aWxkLXBlcmYtdGVzdCkKK0VPRgorfQorCisKKyMgUGFyc2UgY29tbWFuZCBsaW5lIGFyZ3VtZW50cworY29tbWl0aXNoPSIiCit3aGlsZSBnZXRvcHRzICJoYTpjOkM6dzoiIG9wdDsgZG8KKyAgICBjYXNlICRvcHQgaW4KKyAgICAgICAgaCkgIHVzYWdlCisgICAgICAgICAgICBleGl0IDAKKyAgICAgICAgICAgIDs7CisgICAgICAgIGEpICBhcmNoaXZlX2Rpcj1gcmVhbHBhdGggIiRPUFRBUkciYAorICAgICAgICAgICAgOzsKKyAgICAgICAgYykgIGNvbW1pdGlzaD0kT1BUQVJHCisgICAgICAgICAgICA7OworICAgICAgICBDKSAgcmVzdWx0c19yZXBvPWByZWFscGF0aCAiJE9QVEFSRyJgCisgICAgICAgICAgICBjb21taXRfcmVzdWx0cz0oIi0tY29tbWl0LXJlc3VsdHMiICIkcmVzdWx0c19yZXBvIikKKyAgICAgICAgICAgIDs7CisgICAgICAgIHcpICBiYXNlX2Rpcj1gcmVhbHBhdGggIiRPUFRBUkciYAorICAgICAgICAgICAgOzsKKyAgICAgICAgKikgIHVzYWdlCisgICAgICAgICAgICBleGl0IDEKKyAgICAgICAgICAgIDs7CisgICAgZXNhYworZG9uZQorCisjIENoZWNrIHBvc2l0aW9uYWwgYXJncworc2hpZnQgIiQoKE9QVElORCAtIDEpKSIKK2lmIFsgJCMgLW5lIDAgXTsgdGhlbgorICAgIGVjaG8gIkVSUk9SOiBObyBwb3NpdGlvbmFsIGFyZ3MgYXJlIGFjY2VwdGVkLiIKKyAgICB1c2FnZQorICAgIGV4aXQgMQorZmkKKworZWNobyAiUnVubmluZyBvbiBgdW5hbWUgLW5gIgoraWYgISBnaXRfdG9wZGlyPSQoZ2l0IHJldi1wYXJzZSAtLXNob3ctdG9wbGV2ZWwpOyB0aGVuCisgICAgICAgIGVjaG8gIlRoZSBjdXJyZW50IHdvcmtpbmcgZGlyIGRvZXNuJ3Qgc2VlbSB0byBiZSBhIGdpdCBjbG9uZS4gUGxlYXNlIGNkIHRoZXJlIGJlZm9yZSBydW5uaW5nIGBiYXNlbmFtZSAkMGAiCisgICAgICAgIGV4aXQgMQorZmkKKworY2QgIiRnaXRfdG9wZGlyIgorCitpZiBbIC1uICIkY29tbWl0aXNoIiBdOyB0aGVuCisgICAgIyBDaGVja291dCBjb3JyZWN0IHJldmlzaW9uCisgICAgZWNobyAiQ2hlY2tpbmcgb3V0ICRjb21taXRpc2giCisgICAgZ2l0IGZldGNoICY+IC9kZXYvbnVsbAorICAgIGdpdCBjaGVja291dCBIRUFEXjAgJj4gL2Rldi9udWxsCisgICAgZ2l0IGJyYW5jaCAtRCAkY29tbWl0aXNoICY+IC9kZXYvbnVsbAorICAgIGlmICEgZ2l0IGNoZWNrb3V0IC1mICRjb21taXRpc2ggJj4gL2Rldi9udWxsOyB0aGVuCisgICAgICAgIGVjaG8gIkdpdCBjaGVja291dCBmYWlsZWQiCisgICAgICAgIGV4aXQgMQorICAgIGZpCitmaQorCisjIFNldHVwIGJ1aWxkIGVudmlyb25tZW50CitpZiBbIC16ICIkYmFzZV9kaXIiIF07IHRoZW4KKyAgICBiYXNlX2Rpcj0iJGdpdF90b3BkaXIvYnVpbGQtcGVyZi10ZXN0IgorZmkKK2VjaG8gIlVzaW5nIHdvcmtpbmcgZGlyICRiYXNlX2RpciIKKwordGltZXN0YW1wPWBkYXRlICIrJVklbSVkJUglTSVTImAKK2dpdF9yZXY9JChnaXQgcmV2LXBhcnNlIC0tc2hvcnQgSEVBRCkgIHx8IGV4aXQgMQorYnVpbGRfZGlyPSIkYmFzZV9kaXIvYnVpbGQtJGdpdF9yZXYtJHRpbWVzdGFtcCIKK3Jlc3VsdHNfZGlyPSIkYmFzZV9kaXIvcmVzdWx0cy0kZ2l0X3Jldi0kdGltZXN0YW1wIgorZ2xvYmFscmVzX2xvZz0iJGJhc2VfZGlyL2dsb2JhbHJlcy5sb2ciCittYWNoaW5lPSJxZW11eDg2IgorCitta2RpciAtcCAiJGJhc2VfZGlyIgorc291cmNlIC4vb2UtaW5pdC1idWlsZC1lbnYgJGJ1aWxkX2RpciA+L2Rldi9udWxsIHx8IGV4aXQgMQorCisjIEFkZGl0aW9uYWwgY29uZmlnCithdXRvX2NvbmY9IiRidWlsZF9kaXIvY29uZi9hdXRvLmNvbmYiCitlY2hvICJNQUNISU5FID0gXCIkbWFjaGluZVwiIiA+ICIkYXV0b19jb25mIgorZWNobyAnQkJfTlVNQkVSX1RIUkVBRFMgPSAiOCInID4+ICIkYXV0b19jb25mIgorZWNobyAnUEFSQUxMRUxfTUFLRSA9ICItaiA4IicgPj4gIiRhdXRvX2NvbmYiCitlY2hvICJETF9ESVIgPSBcIiRiYXNlX2Rpci9kb3dubG9hZHNcIiIgPj4gIiRhdXRvX2NvbmYiCisjIERpc2FibGluZyBuZXR3b3JrIHNhbml0eSBjaGVjayBzbGlnaHRseSByZWR1Y2VzIHRoZSB2YXJpYW5jZSBvZiB0aW1pbmcgcmVzdWx0cworZWNobyAnQ09OTkVDVElWSVRZX0NIRUNLX1VSSVMgPSAiIicgPj4gIiRhdXRvX2NvbmYiCisjIFBvc3NpYmlsaXR5IHRvIGRlZmluZSBleHRyYSBzZXR0aW5ncworaWYgWyAtZiAiJGJhc2VfZGlyL2F1dG8uY29uZi5leHRyYSIgXTsgdGhlbgorICAgIGNhdCAiJGJhc2VfZGlyL2F1dG8uY29uZi5leHRyYSIgPj4gIiRhdXRvX2NvbmYiCitmaQorCisjIFJ1biBhY3R1YWwgdGVzdCBzY3JpcHQKK29lLWJ1aWxkLXBlcmYtdGVzdCAtLW91dC1kaXIgIiRyZXN1bHRzX2RpciIgXAorICAgICAgICAgICAgICAgICAgIC0tZ2xvYmFscmVzLWZpbGUgIiRnbG9iYWxyZXNfbG9nIiBcCisgICAgICAgICAgICAgICAgICAgLS1sb2NrLWZpbGUgIiRiYXNlX2Rpci9vZS1idWlsZC1wZXJmLmxvY2siIFwKKyAgICAgICAgICAgICAgICAgICAiJHtjb21taXRfcmVzdWx0c1tAXX0iIFwKKyAgICAgICAgICAgICAgICAgICAtLWNvbW1pdC1yZXN1bHRzLWJyYW5jaCAie3Rlc3Rlcl9ob3N0fS97Z2l0X2JyYW5jaH0vJG1hY2hpbmUiIFwKKyAgICAgICAgICAgICAgICAgICAtLWNvbW1pdC1yZXN1bHRzLXRhZyAie3Rlc3Rlcl9ob3N0fS97Z2l0X2JyYW5jaH0vJG1hY2hpbmUve2dpdF9jb21taXRfY291bnR9LWd7Z2l0X2NvbW1pdH0ve3RhZ19udW19IgorCitjYXNlICQ/IGluCisgICAgMSkgIGVjaG8gIkVSUk9SOiBvZS1idWlsZC1wZXJmLXRlc3Qgc2NyaXB0IGZhaWxlZCEiCisgICAgICAgIGV4aXQgMQorICAgICAgICA7OworICAgIDIpICBlY2hvICJOT1RFOiBzb21lIHRlc3RzIGZhaWxlZCEiCisgICAgICAgIDs7Citlc2FjCisKK2VjaG8gLW5lICJcblxuLS0tLS0tLS0tLS0tLS0tLS1cbiIKK2VjaG8gIkdsb2JhbCByZXN1bHRzIGZpbGU6IgorZWNobyAtbmUgIlxuIgorCitjYXQgIiRnbG9iYWxyZXNfbG9nIgorCitpZiBbIC1uICIkYXJjaGl2ZV9kaXIiIF07IHRoZW4KKyAgICBlY2hvIC1uZSAiXG5cbi0tLS0tLS0tLS0tLS0tLS0tXG4iCisgICAgZWNobyAiQXJjaGl2aW5nIHJlc3VsdHMgaW4gJGFyY2hpdmVfZGlyIgorICAgIG1rZGlyIC1wICIkYXJjaGl2ZV9kaXIiCisgICAgcmVzdWx0c19iYXNlbmFtZT1gYmFzZW5hbWUgIiRyZXN1bHRzX2RpciJgCisgICAgcmVzdWx0c19kaXJuYW1lPWBkaXJuYW1lICIkcmVzdWx0c19kaXIiYAorICAgIHRhciAtY3pmICIkYXJjaGl2ZV9kaXIvYHVuYW1lIC1uYC0ke3Jlc3VsdHNfYmFzZW5hbWV9LnRhci5neiIgLUMgIiRyZXN1bHRzX2Rpcm5hbWUiICIkcmVzdWx0c19iYXNlbmFtZSIKK2ZpCisKK3JtIC1yZiAiJGJ1aWxkX2RpciIKK3JtIC1yZiAiJHJlc3VsdHNfZGlyIgorCitlY2hvICJET05FIgpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L3NjcmlwdHMvY29udHJpYi9kZGltYWdlIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L3NjcmlwdHMvY29udHJpYi9kZGltYWdlCmluZGV4IGE1MDNmMTEuLmFiOTI5OTUgMTAwNzU1Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9zY3JpcHRzL2NvbnRyaWIvZGRpbWFnZQorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvc2NyaXB0cy9jb250cmliL2RkaW1hZ2UKQEAgLTEwMCw1ICsxMDAsOSBAQAogZmkKIAogZWNobyAiV3JpdGluZyBpbWFnZS4uLiIKLWRkIGlmPSIkSU1BR0UiIG9mPSIkREVWSUNFIiBicz0iJEJMT0NLU0laRSIKK2lmIHdoaWNoIHB2ID4vZGV2L251bGwgMj4mMTsgdGhlbgorCXB2ICIkSU1BR0UiIHwgZGQgb2Y9IiRERVZJQ0UiIGJzPSIkQkxPQ0tTSVpFIgorZWxzZQorCWRkIGlmPSIkSU1BR0UiIG9mPSIkREVWSUNFIiBicz0iJEJMT0NLU0laRSIKK2ZpCiBzeW5jCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvc2NyaXB0cy9jb250cmliL2RldnRvb2wtc3RyZXNzLnB5IGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L3NjcmlwdHMvY29udHJpYi9kZXZ0b29sLXN0cmVzcy5weQppbmRleCA4Y2Y5MmNhLi5kNTU1YzUxIDEwMDc1NQotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvc2NyaXB0cy9jb250cmliL2RldnRvb2wtc3RyZXNzLnB5CisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9zY3JpcHRzL2NvbnRyaWIvZGV2dG9vbC1zdHJlc3MucHkKQEAgLTEsNCArMSw0IEBACi0jIS91c3IvYmluL2VudiBweXRob24KKyMhL3Vzci9iaW4vZW52IHB5dGhvbjMKIAogIyBkZXZ0b29sIHN0cmVzcyB0ZXN0ZXIKICMKQEAgLTQzLDE1ICs0MywxNSBAQAogICAgIHRpbmZvaWwgPSBiYi50aW5mb2lsLlRpbmZvaWwoKQogICAgIHRpbmZvaWwucHJlcGFyZShGYWxzZSkKIAotICAgIHBrZ19wbiA9IHRpbmZvaWwuY29va2VyLnJlY2lwZWNhY2hlLnBrZ19wbgotICAgIChsYXRlc3RfdmVyc2lvbnMsIHByZWZlcnJlZF92ZXJzaW9ucykgPSBiYi5wcm92aWRlcnMuZmluZFByb3ZpZGVycyh0aW5mb2lsLmNvbmZpZ19kYXRhLCB0aW5mb2lsLmNvb2tlci5yZWNpcGVjYWNoZSwgcGtnX3BuKQorICAgIHBrZ19wbiA9IHRpbmZvaWwuY29va2VyLnJlY2lwZWNhY2hlc1snJ10ucGtnX3BuCisgICAgKGxhdGVzdF92ZXJzaW9ucywgcHJlZmVycmVkX3ZlcnNpb25zKSA9IGJiLnByb3ZpZGVycy5maW5kUHJvdmlkZXJzKHRpbmZvaWwuY29uZmlnX2RhdGEsIHRpbmZvaWwuY29va2VyLnJlY2lwZWNhY2hlc1snJ10sIHBrZ19wbikKIAogICAgIHNraXBfY2xhc3NlcyA9IGFyZ3Muc2tpcF9jbGFzc2VzLnNwbGl0KCcsJykKIAogICAgIHJlY2lwZWxpc3QgPSBbXQogICAgIGZvciBwbiBpbiBzb3J0ZWQocGtnX3BuKToKICAgICAgICAgcHJlZiA9IHByZWZlcnJlZF92ZXJzaW9uc1twbl0KLSAgICAgICAgaW5oZXJpdHMgPSBbb3MucGF0aC5zcGxpdGV4dChvcy5wYXRoLmJhc2VuYW1lKGYpKVswXSBmb3IgZiBpbiB0aW5mb2lsLmNvb2tlci5yZWNpcGVjYWNoZS5pbmhlcml0c1twcmVmWzFdXV0KKyAgICAgICAgaW5oZXJpdHMgPSBbb3MucGF0aC5zcGxpdGV4dChvcy5wYXRoLmJhc2VuYW1lKGYpKVswXSBmb3IgZiBpbiB0aW5mb2lsLmNvb2tlci5yZWNpcGVjYWNoZXNbJyddLmluaGVyaXRzW3ByZWZbMV1dXQogICAgICAgICBmb3IgY2xzIGluIHNraXBfY2xhc3NlczoKICAgICAgICAgICAgIGlmIGNscyBpbiBpbmhlcml0czoKICAgICAgICAgICAgICAgICBicmVhawpAQCAtMTIxLDE0ICsxMjEsMTggQEAKICAgICAgICAgICAgIHN5cy5zdGRvdXQud3JpdGUoJ1Rlc3RpbmcgJXMgJyAlIChwbiArICcgJykubGp1c3QoNDAsICcuJykpCiAgICAgICAgICAgICBzeXMuc3Rkb3V0LmZsdXNoKCkKICAgICAgICAgICAgIGZhaWxlZCA9IEZhbHNlCisgICAgICAgICAgICBza2lwcGVkID0gTm9uZQogCiAgICAgICAgICAgICBzcmN0cmVlID0gb3MucGF0aC5qb2luKHRtcGRpciwgcG4pCiAgICAgICAgICAgICB0cnk6CiAgICAgICAgICAgICAgICAgYmIucHJvY2Vzcy5ydW4oJ2RldnRvb2wgZXh0cmFjdCAlcyAlcycgJSAocG4sIHNyY3RyZWUpKQotICAgICAgICAgICAgZXhjZXB0IGJiLnByb2Nlc3MuQ21kRXJyb3IgYXMgZXhjOgotICAgICAgICAgICAgICAgIGZhaWxlZCA9IFRydWUKLSAgICAgICAgICAgICAgICB3aXRoIG9wZW4oJ3N0cmVzc18lc19leHRyYWN0LmxvZycgJSBwbiwgJ3cnKSBhcyBmOgotICAgICAgICAgICAgICAgICAgICBmLndyaXRlKHN0cihleGMpKQorICAgICAgICAgICAgZXhjZXB0IGJiLnByb2Nlc3MuRXhlY3V0aW9uRXJyb3IgYXMgZXhjOgorICAgICAgICAgICAgICAgIGlmIGV4Yy5leGl0Y29kZSA9PSA0OgorICAgICAgICAgICAgICAgICAgICBza2lwcGVkID0gJ2luY29tcGF0aWJsZScKKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICBmYWlsZWQgPSBUcnVlCisgICAgICAgICAgICAgICAgICAgIHdpdGggb3Blbignc3RyZXNzXyVzX2V4dHJhY3QubG9nJyAlIHBuLCAndycpIGFzIGY6CisgICAgICAgICAgICAgICAgICAgICAgICBmLndyaXRlKHN0cihleGMpKQogCiAgICAgICAgICAgICBpZiBvcy5wYXRoLmV4aXN0cyhzcmN0cmVlKToKICAgICAgICAgICAgICAgICBzaHV0aWwucm10cmVlKHNyY3RyZWUpCkBAIC0xMzYsNiArMTQwLDggQEAKICAgICAgICAgICAgIGlmIGZhaWxlZDoKICAgICAgICAgICAgICAgICBwcmludCgnZmFpbGVkJykKICAgICAgICAgICAgICAgICBmYWlsdXJlcyArPSAxCisgICAgICAgICAgICBlbGlmIHNraXBwZWQ6CisgICAgICAgICAgICAgICAgcHJpbnQoJ3NraXBwZWQgKCVzKScgJSBza2lwcGVkKQogICAgICAgICAgICAgZWxzZToKICAgICAgICAgICAgICAgICBwcmludCgnb2snKQogICAgIGV4Y2VwdCBLZXlib2FyZEludGVycnVwdDoKQEAgLTE2MiwyOSArMTY4LDM0IEBACiAgICAgICAgICAgICBzeXMuc3Rkb3V0LmZsdXNoKCkKICAgICAgICAgICAgIGZhaWxlZCA9IEZhbHNlCiAgICAgICAgICAgICByZXNldCA9IFRydWUKKyAgICAgICAgICAgIHNraXBwZWQgPSBOb25lCiAKICAgICAgICAgICAgIHNyY3RyZWUgPSBvcy5wYXRoLmpvaW4odG1wZGlyLCBwbikKICAgICAgICAgICAgIHRyeToKICAgICAgICAgICAgICAgICBiYi5wcm9jZXNzLnJ1bignZGV2dG9vbCBtb2RpZnkgLXggJXMgJXMnICUgKHBuLCBzcmN0cmVlKSkKLSAgICAgICAgICAgIGV4Y2VwdCBiYi5wcm9jZXNzLkNtZEVycm9yIGFzIGV4YzoKLSAgICAgICAgICAgICAgICB3aXRoIG9wZW4oJ3N0cmVzc18lc19tb2RpZnkubG9nJyAlIHBuLCAndycpIGFzIGY6Ci0gICAgICAgICAgICAgICAgICAgIGYud3JpdGUoc3RyKGV4YykpCi0gICAgICAgICAgICAgICAgZmFpbGVkID0gJ21vZGlmeScKLSAgICAgICAgICAgICAgICByZXNldCA9IEZhbHNlCi0KLSAgICAgICAgICAgIGlmIG5vdCBmYWlsZWQ6Ci0gICAgICAgICAgICAgICAgdHJ5OgotICAgICAgICAgICAgICAgICAgICBiYi5wcm9jZXNzLnJ1bignYml0YmFrZSAtYyBpbnN0YWxsICVzJyAlIHBuKQotICAgICAgICAgICAgICAgIGV4Y2VwdCBiYi5wcm9jZXNzLkNtZEVycm9yIGFzIGV4YzoKLSAgICAgICAgICAgICAgICAgICAgd2l0aCBvcGVuKCdzdHJlc3NfJXNfaW5zdGFsbC5sb2cnICUgcG4sICd3JykgYXMgZjoKKyAgICAgICAgICAgIGV4Y2VwdCBiYi5wcm9jZXNzLkV4ZWN1dGlvbkVycm9yIGFzIGV4YzoKKyAgICAgICAgICAgICAgICBpZiBleGMuZXhpdGNvZGUgPT0gNDoKKyAgICAgICAgICAgICAgICAgICAgc2tpcHBlZCA9ICdpbmNvbXBhdGlibGUnCisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgd2l0aCBvcGVuKCdzdHJlc3NfJXNfbW9kaWZ5LmxvZycgJSBwbiwgJ3cnKSBhcyBmOgogICAgICAgICAgICAgICAgICAgICAgICAgZi53cml0ZShzdHIoZXhjKSkKLSAgICAgICAgICAgICAgICAgICAgZmFpbGVkID0gJ2J1aWxkJwotICAgICAgICAgICAgaWYgcmVzZXQ6Ci0gICAgICAgICAgICAgICAgdHJ5OgotICAgICAgICAgICAgICAgICAgICBiYi5wcm9jZXNzLnJ1bignZGV2dG9vbCByZXNldCAlcycgJSBwbikKLSAgICAgICAgICAgICAgICBleGNlcHQgYmIucHJvY2Vzcy5DbWRFcnJvciBhcyBleGM6Ci0gICAgICAgICAgICAgICAgICAgIHByaW50KCdkZXZ0b29sIHJlc2V0IGZhaWxlZDogJXMnICUgc3RyKGV4YykpCi0gICAgICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgICAgICAgICAgICAgIGZhaWxlZCA9ICdtb2RpZnknCisgICAgICAgICAgICAgICAgICAgIHJlc2V0ID0gRmFsc2UKKworICAgICAgICAgICAgaWYgbm90IHNraXBwZWQ6CisgICAgICAgICAgICAgICAgaWYgbm90IGZhaWxlZDoKKyAgICAgICAgICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgICAgICAgICAgYmIucHJvY2Vzcy5ydW4oJ2JpdGJha2UgLWMgaW5zdGFsbCAlcycgJSBwbikKKyAgICAgICAgICAgICAgICAgICAgZXhjZXB0IGJiLnByb2Nlc3MuQ21kRXJyb3IgYXMgZXhjOgorICAgICAgICAgICAgICAgICAgICAgICAgd2l0aCBvcGVuKCdzdHJlc3NfJXNfaW5zdGFsbC5sb2cnICUgcG4sICd3JykgYXMgZjoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBmLndyaXRlKHN0cihleGMpKQorICAgICAgICAgICAgICAgICAgICAgICAgZmFpbGVkID0gJ2J1aWxkJworICAgICAgICAgICAgICAgIGlmIHJlc2V0OgorICAgICAgICAgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgICAgICAgICBiYi5wcm9jZXNzLnJ1bignZGV2dG9vbCByZXNldCAlcycgJSBwbikKKyAgICAgICAgICAgICAgICAgICAgZXhjZXB0IGJiLnByb2Nlc3MuQ21kRXJyb3IgYXMgZXhjOgorICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnQoJ2RldnRvb2wgcmVzZXQgZmFpbGVkOiAlcycgJSBzdHIoZXhjKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrCiAKICAgICAgICAgICAgIGlmIG9zLnBhdGguZXhpc3RzKHNyY3RyZWUpOgogICAgICAgICAgICAgICAgIHNodXRpbC5ybXRyZWUoc3JjdHJlZSkKQEAgLTE5Miw2ICsyMDMsOCBAQAogICAgICAgICAgICAgaWYgZmFpbGVkOgogICAgICAgICAgICAgICAgIHByaW50KCdmYWlsZWQgKCVzKScgJSBmYWlsZWQpCiAgICAgICAgICAgICAgICAgZmFpbHVyZXMgKz0gMQorICAgICAgICAgICAgZWxpZiBza2lwcGVkOgorICAgICAgICAgICAgICAgIHByaW50KCdza2lwcGVkICglcyknICUgc2tpcHBlZCkKICAgICAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAgICAgcHJpbnQoJ29rJykKICAgICBleGNlcHQgS2V5Ym9hcmRJbnRlcnJ1cHQ6CkBAIC0yMTAsOSArMjIzLDEwIEBACiAgICAgcGFyc2VyLmFkZF9hcmd1bWVudCgnLWQnLCAnLS1kZWJ1ZycsIGhlbHA9J0VuYWJsZSBkZWJ1ZyBvdXRwdXQnLCBhY3Rpb249J3N0b3JlX3RydWUnKQogICAgIHBhcnNlci5hZGRfYXJndW1lbnQoJy1yJywgJy0tcmVzdW1lLWZyb20nLCBoZWxwPSdSZXN1bWUgZnJvbSBzcGVjaWZpZWQgcmVjaXBlJywgbWV0YXZhcj0nUE4nKQogICAgIHBhcnNlci5hZGRfYXJndW1lbnQoJy1vJywgJy0tb25seScsIGhlbHA9J09ubHkgdGVzdCBzcGVjaWZpZWQgcmVjaXBlcyAoY29tbWEtc2VwYXJhdGVkIHdpdGhvdXQgc3BhY2VzLCB3aWxkY2FyZHMgYWxsb3dlZCknLCBtZXRhdmFyPSdQTkxJU1QnKQotICAgIHBhcnNlci5hZGRfYXJndW1lbnQoJy1zJywgJy0tc2tpcCcsIGhlbHA9J1NraXAgc3BlY2lmaWVkIHJlY2lwZXMgKGNvbW1hLXNlcGFyYXRlZCB3aXRob3V0IHNwYWNlcywgd2lsZGNhcmRzIGFsbG93ZWQpJywgbWV0YXZhcj0nUE5MSVNUJykKKyAgICBwYXJzZXIuYWRkX2FyZ3VtZW50KCctcycsICctLXNraXAnLCBoZWxwPSdTa2lwIHNwZWNpZmllZCByZWNpcGVzIChjb21tYS1zZXBhcmF0ZWQgd2l0aG91dCBzcGFjZXMsIHdpbGRjYXJkcyBhbGxvd2VkKScsIG1ldGF2YXI9J1BOTElTVCcsIGRlZmF1bHQ9J2djYy1zb3VyY2UtKixrZXJuZWwtZGV2c3JjLHBhY2thZ2UtaW5kZXgscGVyZixtZXRhLXdvcmxkLXBrZ2RhdGEsZ2xpYmMtbG9jYWxlLGdsaWJjLW10cmFjZSxnbGliYy1zY3JpcHRzLG9zLXJlbGVhc2UnKQogICAgIHBhcnNlci5hZGRfYXJndW1lbnQoJy1jJywgJy0tc2tpcC1jbGFzc2VzJywgaGVscD0nU2tpcCByZWNpcGVzIGluaGVyaXRpbmcgc3BlY2lmaWVkIGNsYXNzZXMgKGNvbW1hLXNlcGFyYXRlZCkgLSBkZWZhdWx0ICUoZGVmYXVsdClzJywgbWV0YXZhcj0nQ0xBU1NMSVNUJywgZGVmYXVsdD0nbmF0aXZlLG5hdGl2ZXNkayxjcm9zcyxjcm9zcy1jYW5hZGlhbixpbWFnZSxwb3B1bGF0ZV9zZGssbWV0YSxwYWNrYWdlZ3JvdXAnKQogICAgIHN1YnBhcnNlcnMgPSBwYXJzZXIuYWRkX3N1YnBhcnNlcnModGl0bGU9J3N1YmNvbW1hbmRzJywgbWV0YXZhcj0nPHN1YmNvbW1hbmQ+JykKKyAgICBzdWJwYXJzZXJzLnJlcXVpcmVkID0gVHJ1ZQogCiAgICAgcGFyc2VyX21vZGlmeSA9IHN1YnBhcnNlcnMuYWRkX3BhcnNlcignbW9kaWZ5JywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlbHA9J1J1biAiZGV2dG9vbCBtb2RpZnkiIGZvbGxvd2VkIGJ5IGEgYnVpbGQgd2l0aCBiaXRiYWtlIG9uIG1hdGNoaW5nIHJlY2lwZXMnLApkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L3NjcmlwdHMvY29udHJpYi9ncmFwaC10b29sIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L3NjcmlwdHMvY29udHJpYi9ncmFwaC10b29sCmluZGV4IDZkYzdkMzMuLjFkZjViOGMgMTAwNzU1Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9zY3JpcHRzL2NvbnRyaWIvZ3JhcGgtdG9vbAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvc2NyaXB0cy9jb250cmliL2dyYXBoLXRvb2wKQEAgLTEsNCArMSw0IEBACi0jIS91c3IvYmluL2VudiBweXRob24KKyMhL3Vzci9iaW4vZW52IHB5dGhvbjMKIAogIyBTaW1wbGUgZ3JhcGggcXVlcnkgdXRpbGl0eQogIyB1c2VmdWwgZm9yIGdldHRpbmcgYW5zd2VycyBmcm9tIC5kb3QgZmlsZXMgcHJvZHVjZWQgYnkgYml0YmFrZSAtZwpAQCAtMzAsOCArMzAsNyBAQAogICAgICAgICBwcmludCgnRVJST1I6IFBsZWFzZSBpbnN0YWxsIHRoZSBuZXR3b3JreCBweXRob24gbW9kdWxlJykKICAgICAgICAgc3lzLmV4aXQoMSkKIAotICAgIGdyYXBoID0gbmV0d29ya3guRGlHcmFwaChuZXR3b3JreC5yZWFkX2RvdChkb3RmaWxlKSkKLQorICAgIGdyYXBoID0gbmV0d29ya3guRGlHcmFwaChuZXR3b3JreC5ueF9weWRvdC5yZWFkX2RvdChkb3RmaWxlKSkKICAgICBkZWYgbm9kZV9taXNzaW5nKG5vZGUpOgogICAgICAgICBpbXBvcnQgZGlmZmxpYgogICAgICAgICBjbG9zZV9tYXRjaGVzID0gZGlmZmxpYi5nZXRfY2xvc2VfbWF0Y2hlcyhub2RlLCBncmFwaC5ub2RlcygpLCBjdXRvZmY9MC43KQpAQCAtNTMsMTEgKzUyLDExIEBACiAKICAgICBmcm9tbm9kZSA9IGFyZ3NbMV0KICAgICB0b25vZGUgPSBhcmdzWzJdCi0gICAgcGF0aHMgPSBsaXN0KGdldF9wYXRoX25ldHdvcmt4KGFyZ3NbMF0sIGZyb21ub2RlLCB0b25vZGUpKQotICAgIGlmIHBhdGhzOgotICAgICAgICBmb3IgcGF0aCBpbiBwYXRoczoKLSAgICAgICAgICAgIHByaW50ICcgLT4gJy5qb2luKHBhdGgpCi0gICAgZWxzZToKKworICAgIHBhdGggPSBOb25lCisgICAgZm9yIHBhdGggaW4gZ2V0X3BhdGhfbmV0d29ya3goYXJnc1swXSwgZnJvbW5vZGUsIHRvbm9kZSk6CisgICAgICAgIHByaW50KCIgLT4gIi5qb2luKG1hcChzdHIsIHBhdGgpKSkKKyAgICBpZiBub3QgcGF0aDoKICAgICAgICAgcHJpbnQoIkVSUk9SOiBubyBwYXRoIGZyb20gJXMgdG8gJXMgaW4gZ3JhcGgiICUgKGZyb21ub2RlLCB0b25vZGUpKQogICAgICAgICBzeXMuZXhpdCgxKQogCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvc2NyaXB0cy9jb250cmliL2xpc3QtcGFja2FnZWNvbmZpZy1mbGFncy5weSBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9zY3JpcHRzL2NvbnRyaWIvbGlzdC1wYWNrYWdlY29uZmlnLWZsYWdzLnB5CmluZGV4IDJmM2I4YjAuLjM4OWZiOTcgMTAwNzU1Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9zY3JpcHRzL2NvbnRyaWIvbGlzdC1wYWNrYWdlY29uZmlnLWZsYWdzLnB5CisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9zY3JpcHRzL2NvbnRyaWIvbGlzdC1wYWNrYWdlY29uZmlnLWZsYWdzLnB5CkBAIC0xLDQgKzEsNCBAQAotIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCisjIS91c3IvYmluL2VudiBweXRob24zCiAKICMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKICMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKQEAgLTM3LDcgKzM3LDYgQEAKICAgICBzeXMuc3RkZXJyLndyaXRlKCJVbmFibGUgdG8gZmluZCBiaXRiYWtlIGJ5IHNlYXJjaGluZyBwYXJlbnQgZGlyZWN0b3J5IG9mIHRoaXMgc2NyaXB0IG9yIFBBVEhcbiIpCiAgICAgc3lzLmV4aXQoMSkKIAotaW1wb3J0IGJiLmNhY2hlCiBpbXBvcnQgYmIuY29va2VyCiBpbXBvcnQgYmIucHJvdmlkZXJzCiBpbXBvcnQgYmIudGluZm9pbApAQCAtNDUsNyArNDQsNyBAQAogZGVmIGdldF9mbmxpc3QoYmJoYW5kbGVyLCBwa2dfcG4sIHByZWZlcnJlZCk6CiAgICAgJycnIEdldCBhbGwgcmVjaXBlIGZpbGUgbmFtZXMgJycnCiAgICAgaWYgcHJlZmVycmVkOgotICAgICAgICAobGF0ZXN0X3ZlcnNpb25zLCBwcmVmZXJyZWRfdmVyc2lvbnMpID0gYmIucHJvdmlkZXJzLmZpbmRQcm92aWRlcnMoYmJoYW5kbGVyLmNvbmZpZ19kYXRhLCBiYmhhbmRsZXIuY29va2VyLnJlY2lwZWNhY2hlLCBwa2dfcG4pCisgICAgICAgIChsYXRlc3RfdmVyc2lvbnMsIHByZWZlcnJlZF92ZXJzaW9ucykgPSBiYi5wcm92aWRlcnMuZmluZFByb3ZpZGVycyhiYmhhbmRsZXIuY29uZmlnX2RhdGEsIGJiaGFuZGxlci5jb29rZXIucmVjaXBlY2FjaGVzWycnXSwgcGtnX3BuKQogCiAgICAgZm5fbGlzdCA9IFtdCiAgICAgZm9yIHBuIGluIHNvcnRlZChwa2dfcG4pOgpAQCAtNTgsMTEgKzU3LDExIEBACiAKIGRlZiBnZXRfcmVjaXBlc2RhdGEoYmJoYW5kbGVyLCBwcmVmZXJyZWQpOgogICAgICcnJyBHZXQgZGF0YSBvZiBhbGwgYXZhaWxhYmxlIHJlY2lwZXMgd2hpY2ggaGF2ZSBQQUNLQUdFQ09ORklHIGZsYWdzICcnJwotICAgIHBrZ19wbiA9IGJiaGFuZGxlci5jb29rZXIucmVjaXBlY2FjaGUucGtnX3BuCisgICAgcGtnX3BuID0gYmJoYW5kbGVyLmNvb2tlci5yZWNpcGVjYWNoZXNbJyddLnBrZ19wbgogCiAgICAgZGF0YV9kaWN0ID0ge30KICAgICBmb3IgZm4gaW4gZ2V0X2ZubGlzdChiYmhhbmRsZXIsIHBrZ19wbiwgcHJlZmVycmVkKToKLSAgICAgICAgZGF0YSA9IGJiLmNhY2hlLkNhY2hlLmxvYWREYXRhRnVsbChmbiwgYmJoYW5kbGVyLmNvb2tlci5jb2xsZWN0aW9uLmdldF9maWxlX2FwcGVuZHMoZm4pLCBiYmhhbmRsZXIuY29uZmlnX2RhdGEpCisgICAgICAgIGRhdGEgPSBiYmhhbmRsZXIucGFyc2VfcmVjaXBlX2ZpbGUoZm4pCiAgICAgICAgIGZsYWdzID0gZGF0YS5nZXRWYXJGbGFncygiUEFDS0FHRUNPTkZJRyIpCiAgICAgICAgIGZsYWdzLnBvcCgnZG9jJywgTm9uZSkKICAgICAgICAgaWYgZmxhZ3M6CkBAIC04Niw3ICs4NSw3IEBACiAgICAgJycnIENvbGxlY3QgYXZhaWxhYmxlIFBBQ0tBR0VDT05GSUcgZmxhZ3MgYW5kIGFsbCBhZmZlY3RlZCBwa2dzICcnJwogICAgICMgZmxhZ19kaWN0ID0geydmbGFnJzogWydwa2cxJywgJ3BrZzInLC4uLl19CiAgICAgZmxhZ19kaWN0ID0ge30KLSAgICBmb3IgcGtnbmFtZSwgZmxhZ2xpc3QgaW4gcGtnX2RpY3QuaXRlcml0ZW1zKCk6CisgICAgZm9yIHBrZ25hbWUsIGZsYWdsaXN0IGluIHBrZ19kaWN0Lml0ZW1zKCk6CiAgICAgICAgIGZvciBmbGFnIGluIGZsYWdsaXN0OgogICAgICAgICAgICAgaWYgZmxhZyBpbiBmbGFnX2RpY3Q6CiAgICAgICAgICAgICAgICAgZmxhZ19kaWN0W2ZsYWddLmFwcGVuZChwa2duYW1lKQpAQCAtMTA0LDggKzEwMyw4IEBACiAgICAgcGtnbmFtZV9sZW4gKz0gMQogCiAgICAgaGVhZGVyID0gJyUtKnMlcycgJSAocGtnbmFtZV9sZW4sIHN0cigiUkVDSVBFIE5BTUUiKSwgc3RyKCJQQUNLQUdFQ09ORklHIEZMQUdTIikpCi0gICAgcHJpbnQgaGVhZGVyCi0gICAgcHJpbnQgc3RyKCIiKS5sanVzdChsZW4oaGVhZGVyKSwgJz0nKQorICAgIHByaW50KGhlYWRlcikKKyAgICBwcmludChzdHIoIiIpLmxqdXN0KGxlbihoZWFkZXIpLCAnPScpKQogICAgIGZvciBwa2duYW1lIGluIHNvcnRlZChwa2dfZGljdCk6CiAgICAgICAgIHByaW50KCclLSpzJXMnICUgKHBrZ25hbWVfbGVuLCBwa2duYW1lLCAnICcuam9pbihwa2dfZGljdFtwa2duYW1lXSkpKQogCkBAIC0xMTUsMjggKzExNCwyOCBAQAogICAgIGZsYWdfbGVuID0gbGVuKCJQQUNLQUdFQ09ORklHIEZMQUciKSArIDUKIAogICAgIGhlYWRlciA9ICclLSpzJXMnICUgKGZsYWdfbGVuLCBzdHIoIlBBQ0tBR0VDT05GSUcgRkxBRyIpLCBzdHIoIlJFQ0lQRSBOQU1FUyIpKQotICAgIHByaW50IGhlYWRlcgotICAgIHByaW50IHN0cigiIikubGp1c3QobGVuKGhlYWRlciksICc9JykKKyAgICBwcmludChoZWFkZXIpCisgICAgcHJpbnQoc3RyKCIiKS5sanVzdChsZW4oaGVhZGVyKSwgJz0nKSkKIAogICAgIGZvciBmbGFnIGluIHNvcnRlZChmbGFnX2RpY3QpOgogICAgICAgICBwcmludCgnJS0qcyVzJyAlIChmbGFnX2xlbiwgZmxhZywgJyAgJy5qb2luKHNvcnRlZChmbGFnX2RpY3RbZmxhZ10pKSkpCiAKIGRlZiBkaXNwbGF5X2FsbChkYXRhX2RpY3QpOgogICAgICcnJyBEaXNwbGF5IGFsbCBwa2dzIGFuZCBQQUNLQUdFQ09ORklHIGluZm9ybWF0aW9uICcnJwotICAgIHByaW50IHN0cigiIikubGp1c3QoNTAsICc9JykKKyAgICBwcmludChzdHIoIiIpLmxqdXN0KDUwLCAnPScpKQogICAgIGZvciBmbiBpbiBkYXRhX2RpY3Q6CiAgICAgICAgIHByaW50KCclcycgJSBkYXRhX2RpY3RbZm5dLmdldFZhcigiUCIsIFRydWUpKQotICAgICAgICBwcmludCBmbgorICAgICAgICBwcmludChmbikKICAgICAgICAgcGFja2FnZWNvbmZpZyA9IGRhdGFfZGljdFtmbl0uZ2V0VmFyKCJQQUNLQUdFQ09ORklHIiwgVHJ1ZSkgb3IgJycKICAgICAgICAgaWYgcGFja2FnZWNvbmZpZy5zdHJpcCgpID09ICcnOgogICAgICAgICAgICAgcGFja2FnZWNvbmZpZyA9ICdOb25lJwogICAgICAgICBwcmludCgnUEFDS0FHRUNPTkZJRyAlcycgJSBwYWNrYWdlY29uZmlnKQogCi0gICAgICAgIGZvciBmbGFnLGZsYWdfdmFsIGluIGRhdGFfZGljdFtmbl0uZ2V0VmFyRmxhZ3MoIlBBQ0tBR0VDT05GSUciKS5pdGVyaXRlbXMoKToKKyAgICAgICAgZm9yIGZsYWcsZmxhZ192YWwgaW4gZGF0YV9kaWN0W2ZuXS5nZXRWYXJGbGFncygiUEFDS0FHRUNPTkZJRyIpLml0ZW1zKCk6CiAgICAgICAgICAgICBpZiBmbGFnID09ICJkb2MiOgogICAgICAgICAgICAgICAgIGNvbnRpbnVlCiAgICAgICAgICAgICBwcmludCgnUEFDS0FHRUNPTkZJR1slc10gJXMnICUgKGZsYWcsIGZsYWdfdmFsKSkKLSAgICAgICAgcHJpbnQgJycKKyAgICAgICAgcHJpbnQoJycpCiAKIGRlZiBtYWluKCk6CiAgICAgcGtnX2RpY3QgPSB7fQpAQCAtMTYwLDIwICsxNTksMjAgQEAKIAogICAgIG9wdGlvbnMsIGFyZ3MgPSBwYXJzZXIucGFyc2VfYXJncyhzeXMuYXJndikKIAotICAgIGJiaGFuZGxlciA9IGJiLnRpbmZvaWwuVGluZm9pbCgpCi0gICAgYmJoYW5kbGVyLnByZXBhcmUoKQotICAgIHByaW50KCJHYXRoZXJpbmcgcmVjaXBlIGRhdGEuLi4iKQotICAgIGRhdGFfZGljdCA9IGdldF9yZWNpcGVzZGF0YShiYmhhbmRsZXIsIG9wdGlvbnMucHJlZmVycmVkKQorICAgIHdpdGggYmIudGluZm9pbC5UaW5mb2lsKCkgYXMgYmJoYW5kbGVyOgorICAgICAgICBiYmhhbmRsZXIucHJlcGFyZSgpCisgICAgICAgIHByaW50KCJHYXRoZXJpbmcgcmVjaXBlIGRhdGEuLi4iKQorICAgICAgICBkYXRhX2RpY3QgPSBnZXRfcmVjaXBlc2RhdGEoYmJoYW5kbGVyLCBvcHRpb25zLnByZWZlcnJlZCkKIAotICAgIGlmIG9wdGlvbnMubGlzdHR5cGUgPT0gJ2ZsYWdzJzoKLSAgICAgICAgcGtnX2RpY3QgPSBjb2xsZWN0X3BrZ3MoZGF0YV9kaWN0KQotICAgICAgICBmbGFnX2RpY3QgPSBjb2xsZWN0X2ZsYWdzKHBrZ19kaWN0KQotICAgICAgICBkaXNwbGF5X2ZsYWdzKGZsYWdfZGljdCkKLSAgICBlbGlmIG9wdGlvbnMubGlzdHR5cGUgPT0gJ3JlY2lwZXMnOgotICAgICAgICBwa2dfZGljdCA9IGNvbGxlY3RfcGtncyhkYXRhX2RpY3QpCi0gICAgICAgIGRpc3BsYXlfcGtncyhwa2dfZGljdCkKLSAgICBlbGlmIG9wdGlvbnMubGlzdHR5cGUgPT0gJ2FsbCc6Ci0gICAgICAgIGRpc3BsYXlfYWxsKGRhdGFfZGljdCkKKyAgICAgICAgaWYgb3B0aW9ucy5saXN0dHlwZSA9PSAnZmxhZ3MnOgorICAgICAgICAgICAgcGtnX2RpY3QgPSBjb2xsZWN0X3BrZ3MoZGF0YV9kaWN0KQorICAgICAgICAgICAgZmxhZ19kaWN0ID0gY29sbGVjdF9mbGFncyhwa2dfZGljdCkKKyAgICAgICAgICAgIGRpc3BsYXlfZmxhZ3MoZmxhZ19kaWN0KQorICAgICAgICBlbGlmIG9wdGlvbnMubGlzdHR5cGUgPT0gJ3JlY2lwZXMnOgorICAgICAgICAgICAgcGtnX2RpY3QgPSBjb2xsZWN0X3BrZ3MoZGF0YV9kaWN0KQorICAgICAgICAgICAgZGlzcGxheV9wa2dzKHBrZ19kaWN0KQorICAgICAgICBlbGlmIG9wdGlvbnMubGlzdHR5cGUgPT0gJ2FsbCc6CisgICAgICAgICAgICBkaXNwbGF5X2FsbChkYXRhX2RpY3QpCiAKIGlmIF9fbmFtZV9fID09ICJfX21haW5fXyI6CiAgICAgbWFpbigpCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvc2NyaXB0cy9jb250cmliL21rZWZpZGlzay5zaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9zY3JpcHRzL2NvbnRyaWIvbWtlZmlkaXNrLnNoCmluZGV4IDMzMzI4NGYuLmQ4ZGIzYzAgMTAwNzU1Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9zY3JpcHRzL2NvbnRyaWIvbWtlZmlkaXNrLnNoCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9zY3JpcHRzL2NvbnRyaWIvbWtlZmlkaXNrLnNoCkBAIC0zNjksOCArMzY5LDggQEAKICMgSW5zdGFsbGluZyB0byAkREVWSUNFCiAjCiBkZWJ1ZyAiTW91bnRpbmcgaW1hZ2VzIGFuZCBkZXZpY2UgaW4gcHJlcGFyYXRpb24gZm9yIGluc3RhbGxhdGlvbiIKLW1vdW50IC1vIGxvb3AgJEhERElNRyAkSERESU1HX01OVCA+JE9VVCAyPiYxIHx8IGVycm9yICJGYWlsZWQgdG8gbW91bnQgJEhERElNRyIKLW1vdW50IC1vIGxvb3AgJEhERElNR19NTlQvcm9vdGZzLmltZyAkSERESU1HX1JPT1RGU19NTlQgPiRPVVQgMj4mMSB8fCBlcnJvciAiRmFpbGVkIHRvIG1vdW50IHJvb3Rmcy5pbWciCittb3VudCAtbyBybyxsb29wICRIRERJTUcgJEhERElNR19NTlQgPiRPVVQgMj4mMSB8fCBlcnJvciAiRmFpbGVkIHRvIG1vdW50ICRIRERJTUciCittb3VudCAtbyBybyxsb29wICRIRERJTUdfTU5UL3Jvb3Rmcy5pbWcgJEhERElNR19ST09URlNfTU5UID4kT1VUIDI+JjEgfHwgZXJyb3IgIkZhaWxlZCB0byBtb3VudCByb290ZnMuaW1nIgogbW91bnQgJFJPT1RGUyAkUk9PVEZTX01OVCA+JE9VVCAyPiYxIHx8IGVycm9yICJGYWlsZWQgdG8gbW91bnQgJFJPT1RGUyBvbiAkUk9PVEZTX01OVCIKIG1vdW50ICRCT09URlMgJEJPT1RGU19NTlQgPiRPVVQgMj4mMSB8fCBlcnJvciAiRmFpbGVkIHRvIG1vdW50ICRCT09URlMgb24gJEJPT1RGU19NTlQiCiAKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9zY3JpcHRzL2NvbnRyaWIvcHl0aG9uL2dlbmVyYXRlLW1hbmlmZXN0LTIuNy5weSBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9zY3JpcHRzL2NvbnRyaWIvcHl0aG9uL2dlbmVyYXRlLW1hbmlmZXN0LTIuNy5weQppbmRleCBkOTNjOTQzLi5mMmVjZjhkIDEwMDc1NQotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvc2NyaXB0cy9jb250cmliL3B5dGhvbi9nZW5lcmF0ZS1tYW5pZmVzdC0yLjcucHkKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L3NjcmlwdHMvY29udHJpYi9weXRob24vZ2VuZXJhdGUtbWFuaWZlc3QtMi43LnB5CkBAIC05Nyw3ICs5Nyw3IEBACiAgICAgICAgICMgZ2VuZXJhdGUgcGFja2FnZSB2YXJpYWJsZXMKICAgICAgICAgIwogCi0gICAgICAgIGZvciBuYW1lLCBkYXRhIGluIHNvcnRlZChzZWxmLnBhY2thZ2VzLml0ZXJpdGVtcygpKToKKyAgICAgICAgZm9yIG5hbWUsIGRhdGEgaW4gc29ydGVkKHNlbGYucGFja2FnZXMuaXRlbXMoKSk6CiAgICAgICAgICAgICBkZXNjLCBkZXBzLCBmaWxlcyA9IGRhdGEKIAogICAgICAgICAgICAgIwpAQCAtMTMwLDcgKzEzMCw3IEBACiAgICAgICAgIHNlbGYub3V0KCAnU1VNTUFSWV8ke1BOfS1tb2R1bGVzPSJBbGwgUHl0aG9uIG1vZHVsZXMiJyApCiAgICAgICAgIGxpbmUgPSAnUkRFUEVORFNfJHtQTn0tbW9kdWxlcz0iJwogCi0gICAgICAgIGZvciBuYW1lLCBkYXRhIGluIHNvcnRlZChzZWxmLnBhY2thZ2VzLml0ZXJpdGVtcygpKToKKyAgICAgICAgZm9yIG5hbWUsIGRhdGEgaW4gc29ydGVkKHNlbGYucGFja2FnZXMuaXRlbXMoKSk6CiAgICAgICAgICAgICBpZiBuYW1lIG5vdCBpbiBbJyR7UE59LWRldicsICcke1BOfS1kaXN0dXRpbHMtc3RhdGljZGV2J106CiAgICAgICAgICAgICAgICAgbGluZSArPSAiJXMgIiAlIG5hbWUKIApAQCAtMTUzLDcgKzE1Myw3IEBACiAgICAgICAgICAgICBvcy51bmxpbmsoc3lzLmFyZ3ZbMV0pCiAgICAgICAgIGV4Y2VwdCBFeGNlcHRpb246CiAgICAgICAgICAgICBzeXMuZXhjX2NsZWFyKCkKLSAgICAgICAgb3V0ZmlsZSA9IGZpbGUoIHN5cy5hcmd2WzFdLCAidyIgKQorICAgICAgICBvdXRmaWxlID0gb3Blbiggc3lzLmFyZ3ZbMV0sICJ3IiApCiAgICAgZWxzZToKICAgICAgICAgb3V0ZmlsZSA9IHN5cy5zdGRvdXQKIApkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L3NjcmlwdHMvY29udHJpYi9weXRob24vZ2VuZXJhdGUtbWFuaWZlc3QtMy41LnB5IGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L3NjcmlwdHMvY29udHJpYi9weXRob24vZ2VuZXJhdGUtbWFuaWZlc3QtMy41LnB5CmluZGV4IDM2N2I0YjguLjI5MDZjYzYgMTAwNzU1Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9zY3JpcHRzL2NvbnRyaWIvcHl0aG9uL2dlbmVyYXRlLW1hbmlmZXN0LTMuNS5weQorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvc2NyaXB0cy9jb250cmliL3B5dGhvbi9nZW5lcmF0ZS1tYW5pZmVzdC0zLjUucHkKQEAgLTEwMCw3ICsxMDAsNyBAQAogICAgICAgICAjIGdlbmVyYXRlIHBhY2thZ2UgdmFyaWFibGVzCiAgICAgICAgICMKIAotICAgICAgICBmb3IgbmFtZSwgZGF0YSBpbiBzb3J0ZWQoc2VsZi5wYWNrYWdlcy5pdGVyaXRlbXMoKSk6CisgICAgICAgIGZvciBuYW1lLCBkYXRhIGluIHNvcnRlZChzZWxmLnBhY2thZ2VzLml0ZW1zKCkpOgogICAgICAgICAgICAgZGVzYywgZGVwcywgZmlsZXMgPSBkYXRhCiAKICAgICAgICAgICAgICMKQEAgLTEzMyw3ICsxMzMsNyBAQAogICAgICAgICBzZWxmLm91dCggJ1NVTU1BUllfJHtQTn0tbW9kdWxlcz0iQWxsIFB5dGhvbiBtb2R1bGVzIicgKQogICAgICAgICBsaW5lID0gJ1JERVBFTkRTXyR7UE59LW1vZHVsZXM9IicKIAotICAgICAgICBmb3IgbmFtZSwgZGF0YSBpbiBzb3J0ZWQoc2VsZi5wYWNrYWdlcy5pdGVyaXRlbXMoKSk6CisgICAgICAgIGZvciBuYW1lLCBkYXRhIGluIHNvcnRlZChzZWxmLnBhY2thZ2VzLml0ZW1zKCkpOgogICAgICAgICAgICAgaWYgbmFtZSBub3QgaW4gWycke1BOfS1kZXYnLCAnJHtQTn0tZGlzdHV0aWxzLXN0YXRpY2RldiddOgogICAgICAgICAgICAgICAgIGxpbmUgKz0gIiVzICIgJSBuYW1lCiAKQEAgLTE1Niw3ICsxNTYsNyBAQAogICAgICAgICAgICAgb3MudW5saW5rKHN5cy5hcmd2WzFdKQogICAgICAgICBleGNlcHQgRXhjZXB0aW9uOgogICAgICAgICAgICAgc3lzLmV4Y19jbGVhcigpCi0gICAgICAgIG91dGZpbGUgPSBmaWxlKCBzeXMuYXJndlsxXSwgInciICkKKyAgICAgICAgb3V0ZmlsZSA9IG9wZW4oIHN5cy5hcmd2WzFdLCAidyIgKQogICAgIGVsc2U6CiAgICAgICAgIG91dGZpbGUgPSBzeXMuc3Rkb3V0CiAKQEAgLTE2Nyw3ICsxNjcsNyBAQAogICAgICMKIAogICAgIG0uYWRkUGFja2FnZSggIiR7UE59LWNvcmUiLCAiUHl0aG9uIGludGVycHJldGVyIGFuZCBjb3JlIG1vZHVsZXMiLCAiJHtQTn0tbGFuZyAke1BOfS1yZSAke1BOfS1yZXBybGliICR7UE59LWNvZGVjcyAke1BOfS1pbyAke1BOfS1tYXRoIiwKLSAgICAiX19mdXR1cmVfXy4qIF9hYmNvbGwuKiBhYmMuKiBhc3QuKiBjb3B5LiogY29weXJlZy4qIENvbmZpZ1BhcnNlci4qICIgKworICAgICJfX2Z1dHVyZV9fLiogX2FiY29sbC4qIGFiYy4qIGFzdC4qIGNvcHkuKiBjb3B5cmVnLiogY29uZmlncGFyc2VyLiogIiArCiAgICAgImdlbmVyaWNwYXRoLiogZ2V0b3B0LiogbGluZWNhY2hlLiogbmV3LiogIiArCiAgICAgIm9zLiogcG9zaXhwYXRoLiogc3RydWN0LiogIiArCiAgICAgIndhcm5pbmdzLiogc2l0ZS4qIHN0YXQuKiAiICsKQEAgLTIwOCw2ICsyMDgsOSBAQAogICAgIG0uYWRkUGFja2FnZSggIiR7UE59LWF1ZGlvIiwgIlB5dGhvbiBBdWRpbyBIYW5kbGluZyIsICIke1BOfS1jb3JlIiwKICAgICAid2F2ZS4qIGNodW5rLiogc25kaGRyLiogbGliLWR5bmxvYWQvb3NzYXVkaW9kZXYuKi5zbyBsaWItZHlubG9hZC9hdWRpb29wLiouc28gYXVkaW9kZXYuKiBzdW5hdWRpby4qIHN1bmF1LiogdG9haWZmLioiICkKIAorICAgIG0uYWRkUGFja2FnZSggIiR7UE59LWFyZ3BhcnNlIiwgIlB5dGhvbiBjb21tYW5kIGxpbmUgYXJndW1lbnQgcGFyc2VyIiwgIiR7UE59LWNvcmUgJHtQTn0tY29kZWNzICR7UE59LXRleHR1dGlscyIsCisgICAgImFyZ3BhcnNlLioiICkKKwogICAgIG0uYWRkUGFja2FnZSggIiR7UE59LWFzeW5jaW8iLCAiUHl0aG9uIEFzeW5jaHJvbm91cyBJL08sIGV2ZW50IGxvb3AsIGNvcm91dGluZXMgYW5kIHRhc2tzIiwgIiR7UE59LWNvcmUiLAogICAgICJhc3luY2lvIiApCiAKQEAgLTIxNyw4ICsyMjAsOCBAQAogICAgIG0uYWRkUGFja2FnZSggIiR7UE59LWNvbXBpbGUiLCAiUHl0aG9uIGJ5dGVjb2RlIGNvbXBpbGF0aW9uIHN1cHBvcnQiLCAiJHtQTn0tY29yZSIsCiAgICAgInB5X2NvbXBpbGUuKiBjb21waWxlYWxsLioiICkKIAotICAgIG0uYWRkUGFja2FnZSggIiR7UE59LWNvbXByZXNzaW9uIiwgIlB5dGhvbiBoaWdoLWxldmVsIGNvbXByZXNzaW9uIHN1cHBvcnQiLCAiJHtQTn0tY29yZSAke1BOfS1jb2RlY3MiLAotICAgICJnemlwLiogemlwZmlsZS4qIHRhcmZpbGUuKiBsaWItZHlubG9hZC9iejIuKi5zbyIgKQorICAgIG0uYWRkUGFja2FnZSggIiR7UE59LWNvbXByZXNzaW9uIiwgIlB5dGhvbiBoaWdoLWxldmVsIGNvbXByZXNzaW9uIHN1cHBvcnQiLCAiJHtQTn0tY29yZSAke1BOfS1jb2RlY3MgJHtQTn0taW1wb3J0bGliICR7UE59LXRocmVhZGluZyAke1BOfS1zaGVsbCIsCisgICAgImd6aXAuKiB6aXBmaWxlLiogdGFyZmlsZS4qIGxpYi1keW5sb2FkL2J6Mi4qLnNvIGxpYi1keW5sb2FkL3psaWIuKi5zbyIgKQogCiAgICAgbS5hZGRQYWNrYWdlKCAiJHtQTn0tY3J5cHQiLCAiUHl0aG9uIGJhc2ljIGNyeXB0b2dyYXBoaWMgYW5kIGhhc2hpbmcgc3VwcG9ydCIsICIke1BOfS1jb3JlIiwKICAgICAiaGFzaGxpYi4qIG1kNS4qIHNoYS4qIGxpYi1keW5sb2FkL2NyeXB0Liouc28gbGliLWR5bmxvYWQvX2hhc2hsaWIuKi5zbyBsaWItZHlubG9hZC9fc2hhMjU2Liouc28gbGliLWR5bmxvYWQvX3NoYTUxMi4qLnNvIiApCkBAIC0yMjksMTEgKzIzMiwxMSBAQAogICAgIG0uYWRkUGFja2FnZSggIiR7UE59LWN1cnNlcyIsICJQeXRob24gY3Vyc2VzIHN1cHBvcnQiLCAiJHtQTn0tY29yZSIsCiAgICAgImN1cnNlcyBsaWItZHlubG9hZC9fY3Vyc2VzLiouc28gbGliLWR5bmxvYWQvX2N1cnNlc19wYW5lbC4qLnNvIiApICMgZGlyZWN0b3J5ICsgbG93IGxldmVsIG1vZHVsZQogCi0gICAgbS5hZGRQYWNrYWdlKCAiJHtQTn0tY3R5cGVzIiwgIlB5dGhvbiBDIHR5cGVzIHN1cHBvcnQiLCAiJHtQTn0tY29yZSIsCisgICAgbS5hZGRQYWNrYWdlKCAiJHtQTn0tY3R5cGVzIiwgIlB5dGhvbiBDIHR5cGVzIHN1cHBvcnQiLCAiJHtQTn0tY29yZSAke1BOfS1zdWJwcm9jZXNzIiwKICAgICAiY3R5cGVzIGxpYi1keW5sb2FkL19jdHlwZXMuKi5zbyBsaWItZHlubG9hZC9fY3R5cGVzX3Rlc3QuKi5zbyIgKSAjIGRpcmVjdG9yeSArIGxvdyBsZXZlbCBtb2R1bGUKIAogICAgIG0uYWRkUGFja2FnZSggIiR7UE59LWRhdGV0aW1lIiwgIlB5dGhvbiBjYWxlbmRhciBhbmQgdGltZSBzdXBwb3J0IiwgIiR7UE59LWNvcmUgJHtQTn0tY29kZWNzIiwKLSAgICAiX3N0cnB0aW1lLiogY2FsZW5kYXIuKiBsaWItZHlubG9hZC9kYXRldGltZS4qLnNvIiApCisgICAgIl9zdHJwdGltZS4qIGNhbGVuZGFyLiogZGF0ZXRpbWUuKiBsaWItZHlubG9hZC9fZGF0ZXRpbWUuKi5zbyIgKQogCiAgICAgbS5hZGRQYWNrYWdlKCAiJHtQTn0tZGIiLCAiUHl0aG9uIGZpbGUtYmFzZWQgZGF0YWJhc2Ugc3VwcG9ydCIsICIke1BOfS1jb3JlIiwKICAgICAiYW55ZGJtLiogZHVtYmRibS4qIHdoaWNoZGIuKiBkYm0gbGliLWR5bmxvYWQvX2RibS4qLnNvIiApCkBAIC0yNTYsMTMgKzI1OSwxNiBAQAogICAgIG0uYWRkUGFja2FnZSggIiR7UE59LWVtYWlsIiwgIlB5dGhvbiBlbWFpbCBzdXBwb3J0IiwgIiR7UE59LWNvcmUgJHtQTn0taW8gJHtQTn0tcmUgJHtQTn0tbWltZSAke1BOfS1hdWRpbyAke1BOfS1pbWFnZSAke1BOfS1uZXRjbGllbnQiLAogICAgICJpbWFwbGliLiogZW1haWwiICkgIyBwYWNrYWdlCiAKKyAgICBtLmFkZFBhY2thZ2UoICIke1BOfS1lbnVtIiwgIlB5dGhvbiBzdXBwb3J0IGZvciBlbnVtZXJhdGlvbnMiLCAiJHtQTn0tY29yZSIsCisgICAgImVudW0uKiIgKQorCiAgICAgbS5hZGRQYWNrYWdlKCAiJHtQTn0tZmNudGwiLCAiUHl0aG9uJ3MgZmNudGwgaW50ZXJmYWNlIiwgIiR7UE59LWNvcmUiLAogICAgICJsaWItZHlubG9hZC9mY250bC4qLnNvIiApCiAKICAgICBtLmFkZFBhY2thZ2UoICIke1BOfS1odG1sIiwgIlB5dGhvbiBIVE1MIHByb2Nlc3Npbmcgc3VwcG9ydCIsICIke1BOfS1jb3JlIiwKICAgICAiZm9ybWF0dGVyLiogaHRtbGVudGl0eWRlZnMuKiBodG1sbGliLiogbWFya3VwYmFzZS4qIHNnbWxsaWIuKiBIVE1MUGFyc2VyLiogIiApCiAKLSAgICBtLmFkZFBhY2thZ2UoICIke1BOfS1pbXBvcnRsaWIiLCAiUHl0aG9uIGltcG9ydCBpbXBsZW1lbnRhdGlvbiBsaWJyYXJ5IiwgIiR7UE59LWNvcmUiLAorICAgIG0uYWRkUGFja2FnZSggIiR7UE59LWltcG9ydGxpYiIsICJQeXRob24gaW1wb3J0IGltcGxlbWVudGF0aW9uIGxpYnJhcnkiLCAiJHtQTn0tY29yZSAke1BOfS1sYW5nIiwKICAgICAiaW1wb3J0bGliIiApCiAKICAgICBtLmFkZFBhY2thZ2UoICIke1BOfS1nZGJtIiwgIlB5dGhvbiBHTlUgZGF0YWJhc2Ugc3VwcG9ydCIsICIke1BOfS1jb3JlIiwKQEAgLTI3OCwxMCArMjg0LDEwIEBACiAgICAgbS5hZGRQYWNrYWdlKCAiJHtQTn0tanNvbiIsICJQeXRob24gSlNPTiBzdXBwb3J0IiwgIiR7UE59LWNvcmUgJHtQTn0tbWF0aCAke1BOfS1yZSIsCiAgICAgImpzb24gbGliLWR5bmxvYWQvX2pzb24uKi5zbyIgKSAjIHBhY2thZ2UKIAotICAgIG0uYWRkUGFja2FnZSggIiR7UE59LWxhbmciLCAiUHl0aG9uIGxvdy1sZXZlbCBsYW5ndWFnZSBzdXBwb3J0IiwgIiR7UE59LWNvcmUiLAorICAgIG0uYWRkUGFja2FnZSggIiR7UE59LWxhbmciLCAiUHl0aG9uIGxvdy1sZXZlbCBsYW5ndWFnZSBzdXBwb3J0IiwgIiR7UE59LWNvcmUgJHtQTn0taW1wb3J0bGliIiwKICAgICAibGliLWR5bmxvYWQvX2Jpc2VjdC4qLnNvIGxpYi1keW5sb2FkL19jb2xsZWN0aW9ucy4qLnNvIGxpYi1keW5sb2FkL19oZWFwcS4qLnNvIGxpYi1keW5sb2FkL193ZWFrcmVmLiouc28gbGliLWR5bmxvYWQvX2Z1bmN0b29scy4qLnNvICIgKwogICAgICJsaWItZHlubG9hZC9hcnJheS4qLnNvIGxpYi1keW5sb2FkL2l0ZXJ0b29scy4qLnNvIGxpYi1keW5sb2FkL29wZXJhdG9yLiouc28gbGliLWR5bmxvYWQvcGFyc2VyLiouc28gIiArCi0gICAgImF0ZXhpdC4qIGJpc2VjdC4qIGNvZGUuKiBjb2Rlb3AuKiBjb2xsZWN0aW9ucy4qIF9jb2xsZWN0aW9uc19hYmMuKiBkaXMuKiBmdW5jdG9vbHMuKiBoZWFwcS4qIGluc3BlY3QuKiBrZXl3b3JkLiogb3Bjb2RlLiogc3ltYm9sLiogcmVwci4qIHRva2VuLiogIiArCisgICAgImF0ZXhpdC4qIGJpc2VjdC4qIGNvZGUuKiBjb2Rlb3AuKiBjb2xsZWN0aW9ucy4qIF9jb2xsZWN0aW9uc19hYmMuKiBjb250ZXh0bGliLiogZGlzLiogZnVuY3Rvb2xzLiogaGVhcHEuKiBpbnNwZWN0Lioga2V5d29yZC4qIG9wY29kZS4qIG9wZXJhdG9yLiogc3ltYm9sLiogcmVwci4qIHRva2VuLiogIiArCiAgICAgInRva2VuaXplLiogdHJhY2ViYWNrLiogd2Vha3JlZi4qIiApCiAKICAgICBtLmFkZFBhY2thZ2UoICIke1BOfS1sb2dnaW5nIiwgIlB5dGhvbiBsb2dnaW5nIHN1cHBvcnQiLCAiJHtQTn0tY29yZSAke1BOfS1pbyAke1BOfS1sYW5nICR7UE59LXBpY2tsZSAke1BOfS1zdHJpbmdvbGQiLApAQCAtMjkwLDcgKzI5Niw3IEBACiAgICAgbS5hZGRQYWNrYWdlKCAiJHtQTn0tbWFpbGJveCIsICJQeXRob24gbWFpbGJveCBmb3JtYXQgc3VwcG9ydCIsICIke1BOfS1jb3JlICR7UE59LW1pbWUiLAogICAgICJtYWlsYm94LioiICkKIAotICAgIG0uYWRkUGFja2FnZSggIiR7UE59LW1hdGgiLCAiUHl0aG9uIG1hdGggc3VwcG9ydCIsICIke1BOfS1jb3JlIiwKKyAgICBtLmFkZFBhY2thZ2UoICIke1BOfS1tYXRoIiwgIlB5dGhvbiBtYXRoIHN1cHBvcnQiLCAiJHtQTn0tY29yZSAke1BOfS1jcnlwdCIsCiAgICAgImxpYi1keW5sb2FkL2NtYXRoLiouc28gbGliLWR5bmxvYWQvbWF0aC4qLnNvIGxpYi1keW5sb2FkL19yYW5kb20uKi5zbyByYW5kb20uKiBzZXRzLioiICkKIAogICAgIG0uYWRkUGFja2FnZSggIiR7UE59LW1pbWUiLCAiUHl0aG9uIE1JTUUgaGFuZGxpbmcgQVBJcyIsICIke1BOfS1jb3JlICR7UE59LWlvIiwKQEAgLTMzNiwxMSArMzQyLDE3IEBACiAgICAgbS5hZGRQYWNrYWdlKCAiJHtQTn0tcmVzb3VyY2UiLCAiUHl0aG9uIHJlc291cmNlIGNvbnRyb2wgaW50ZXJmYWNlIiwgIiR7UE59LWNvcmUiLAogICAgICJsaWItZHlubG9hZC9yZXNvdXJjZS4qLnNvIiApCiAKLSAgICBtLmFkZFBhY2thZ2UoICIke1BOfS1zaGVsbCIsICJQeXRob24gc2hlbGwtbGlrZSBmdW5jdGlvbmFsaXR5IiwgIiR7UE59LWNvcmUgJHtQTn0tcmUiLAorICAgIG0uYWRkUGFja2FnZSggIiR7UE59LXNlbGVjdG9ycyIsICJQeXRob24gSGlnaC1sZXZlbCBJL08gbXVsdGlwbGV4aW5nIiwgIiR7UE59LWNvcmUiLAorICAgICJzZWxlY3RvcnMuKiIgKQorCisgICAgbS5hZGRQYWNrYWdlKCAiJHtQTn0tc2hlbGwiLCAiUHl0aG9uIHNoZWxsLWxpa2UgZnVuY3Rpb25hbGl0eSIsICIke1BOfS1jb3JlICR7UE59LXJlICR7UE59LWNvbXByZXNzaW9uIiwKICAgICAiY21kLiogY29tbWFuZHMuKiBkaXJjYWNoZS4qIGZubWF0Y2guKiBnbG9iLiogcG9wZW4yLiogc2hsZXguKiBzaHV0aWwuKiIgKQogCi0gICAgbS5hZGRQYWNrYWdlKCAiJHtQTn0tc3VicHJvY2VzcyIsICJQeXRob24gc3VicHJvY2VzcyBzdXBwb3J0IiwgIiR7UE59LWNvcmUgJHtQTn0taW8gJHtQTn0tcmUgJHtQTn0tZmNudGwgJHtQTn0tcGlja2xlIiwKLSAgICAic3VicHJvY2Vzcy4qIiApCisgICAgbS5hZGRQYWNrYWdlKCAiJHtQTn0tc2lnbmFsIiwgIlB5dGhvbiBzZXQgaGFuZGxlcnMgZm9yIGFzeW5jaHJvbm91cyBldmVudHMgc3VwcG9ydCIsICIke1BOfS1jb3JlICR7UE59LWVudW0iLAorICAgICJzaWduYWwuKiIgKQorCisgICAgbS5hZGRQYWNrYWdlKCAiJHtQTn0tc3VicHJvY2VzcyIsICJQeXRob24gc3VicHJvY2VzcyBzdXBwb3J0IiwgIiR7UE59LWNvcmUgJHtQTn0taW8gJHtQTn0tcmUgJHtQTn0tZmNudGwgJHtQTn0tcGlja2xlICR7UE59LXRocmVhZGluZyAke1BOfS1zaWduYWwgJHtQTn0tc2VsZWN0b3JzIiwKKyAgICAic3VicHJvY2Vzcy4qIGxpYi1keW5sb2FkL19wb3NpeHN1YnByb2Nlc3MuKi5zbyIgKQogCiAgICAgbS5hZGRQYWNrYWdlKCAiJHtQTn0tc3FsaXRlMyIsICJQeXRob24gU3FsaXRlMyBkYXRhYmFzZSBzdXBwb3J0IiwgIiR7UE59LWNvcmUgJHtQTn0tZGF0ZXRpbWUgJHtQTn0tbGFuZyAke1BOfS1jcnlwdCAke1BOfS1pbyAke1BOfS10aHJlYWRpbmciLAogICAgICJsaWItZHlubG9hZC9fc3FsaXRlMy4qLnNvIHNxbGl0ZTMvZGJhcGkyLiogc3FsaXRlMy9fX2luaXRfXy4qIHNxbGl0ZTMvZHVtcC4qIiApCkBAIC0zNjEsNyArMzczLDcgQEAKICAgICAidGVzdCIgKSAjIHBhY2thZ2UKIAogICAgIG0uYWRkUGFja2FnZSggIiR7UE59LXRocmVhZGluZyIsICJQeXRob24gdGhyZWFkaW5nICYgc3luY2hyb25pemF0aW9uIHN1cHBvcnQiLCAiJHtQTn0tY29yZSAke1BOfS1sYW5nIiwKLSAgICAiX3RocmVhZGluZ19sb2NhbC4qIGR1bW15X3RocmVhZC4qIGR1bW15X3RocmVhZGluZy4qIG11dGV4LiogdGhyZWFkaW5nLiogUXVldWUuKiIgKQorICAgICJfdGhyZWFkaW5nX2xvY2FsLiogZHVtbXlfdGhyZWFkLiogZHVtbXlfdGhyZWFkaW5nLiogbXV0ZXguKiB0aHJlYWRpbmcuKiBxdWV1ZS4qIiApCiAKICAgICBtLmFkZFBhY2thZ2UoICIke1BOfS10a2ludGVyIiwgIlB5dGhvbiBUY2wvVGsgYmluZGluZ3MiLCAiJHtQTn0tY29yZSIsCiAgICAgImxpYi1keW5sb2FkL190a2ludGVyLiouc28gbGliLXRrIHRraW50ZXIiICkgIyBwYWNrYWdlCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvc2NyaXB0cy9jb250cmliL3VuY292ZXJlZCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9zY3JpcHRzL2NvbnRyaWIvdW5jb3ZlcmVkCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmE4Mzk5YWQKLS0tIC9kZXYvbnVsbAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvc2NyaXB0cy9jb250cmliL3VuY292ZXJlZApAQCAtMCwwICsxLDM5IEBACisjIS9iaW4vYmFzaCAtZXVyCisjIGV4OnRzPTQ6c3c9NDpzdHM9NDpldAorIyAtKi0gdGFiLXdpZHRoOiA0OyBjLWJhc2ljLW9mZnNldDogNDsgaW5kZW50LXRhYnMtbW9kZTogbmlsIC0qLQorIworIyBGaW5kIHB5dGhvbiBtb2R1bGVzIHVuY292ZXJlZCBieSBvZS1zZWx0ZXN0CisjCisjIENvcHlyaWdodCAoYykgMjAxNiwgSW50ZWwgQ29ycG9yYXRpb24KKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisjIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisjCisjIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCisjIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCisjIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSBVU0EuCisjCisjIEF1dGhvcjogRWQgQmFydG9zaCA8ZWQuYmFydG9zaEBsaW51eC5pbnRlbC5jb20+CisjCisKK2lmIFsgISAiJCMiIC1lcSAxIC1vIC10IDAgXSA7IHRoZW4KKyAgICBlY2hvICdVc2FnZTogY292ZXJhZ2UgcmVwb3J0IHwgLi9zY3JpcHRzL2NvbnRyaWIvdW5jb3ZlcmVkIDxkaXI+JyAxPiYyCisgICAgZXhpdCAxCitmaQorCitwYXRoPSQocmVhZGxpbmsgLWV2ICQxKQorCitpZiBbICEgLWQgIiRwYXRoIiBdIDsgdGhlbgorICAgIGVjaG8gImRpcmVjdG9yeSAkMSBkb2Vzbid0IGV4aXN0IiAxPiYyCisgICAgZXhpdCAxCitmaQorCitkaWZmIC11IDwoZ3JlcCAiJHBhdGgiIHwgZ3JlcCAtdiAnMCUkJyB8IGN1dCAtZjEgLWQ6IHwgc29ydCkgXAorICAgICA8KGZpbmQgJHBhdGggfCB4YXJncyBmaWxlIHwgZ3JlcCAnUHl0aG9uIHNjcmlwdCcgfCBjdXQgLWYxIC1kOnwgc29ydCkgfCBcCisgICAgIGdyZXAgIl4rJHBhdGgiIHwgY3V0IC1jMi0KZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9zY3JpcHRzL2NvbnRyaWIvdmVyaWZ5LWhvbWVwYWdlLnB5IGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L3NjcmlwdHMvY29udHJpYi92ZXJpZnktaG9tZXBhZ2UucHkKaW5kZXggMjY1ZmY2NS4uZDM5ZGQxZCAxMDA3NTUKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L3NjcmlwdHMvY29udHJpYi92ZXJpZnktaG9tZXBhZ2UucHkKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L3NjcmlwdHMvY29udHJpYi92ZXJpZnktaG9tZXBhZ2UucHkKQEAgLTEsNCArMSw0IEBACi0jIS91c3IvYmluL2VudiBweXRob24KKyMhL3Vzci9iaW4vZW52IHB5dGhvbjMKIAogIyBUaGlzIHNjcmlwdCBjYW4gYmUgdXNlZCB0byB2ZXJpZnkgSE9NRVBBR0UgdmFsdWVzIGZvciBhbGwgcmVjaXBlcyBpbgogIyB0aGUgY3VycmVudCBjb25maWd1cmF0aW9uLgpAQCAtNyw3ICs3LDcgQEAKIGltcG9ydCBzeXMKIGltcG9ydCBvcwogaW1wb3J0IHN1YnByb2Nlc3MKLWltcG9ydCB1cmxsaWIyCitpbXBvcnQgdXJsbGliLnJlcXVlc3QKIAogCiAjIEFsbG93IGltcG9ydGluZyBzY3JpcHRzL2xpYiBtb2R1bGVzCkBAIC0zMywzMCArMzMsMzAgQEAKICAgICAgICAgcmV0dXJuIDAKIAogZGVmIHZlcmlmeUhvbWVwYWdlKGJiaGFuZGxlcik6Ci0gICAgcGtnX3BuID0gYmJoYW5kbGVyLmNvb2tlci5yZWNpcGVjYWNoZS5wa2dfcG4KKyAgICBwa2dfcG4gPSBiYmhhbmRsZXIuY29va2VyLnJlY2lwZWNhY2hlc1snJ10ucGtnX3BuCiAgICAgcG5saXN0ID0gc29ydGVkKHBrZ19wbikKICAgICBjb3VudCA9IDAKICAgICBjaGVja2VkID0gW10KICAgICBmb3IgcG4gaW4gcG5saXN0OgogICAgICAgICBmb3IgZm4gaW4gcGtnX3BuW3BuXToKICAgICAgICAgICAgICMgVGhlcmUncyBubyBwb2ludCBjaGVja2luZyBtdWx0aXBsZSBCQkNMQVNTRVhURU5EZWQgdmFyaWFudHMgb2YgdGhlIHNhbWUgcmVjaXBlCi0gICAgICAgICAgICByZWFsZm4sIF8gPSBiYi5jYWNoZS5DYWNoZS52aXJ0dWFsZm4ycmVhbGZuKGZuKQorICAgICAgICAgICAgcmVhbGZuLCBfLCBfID0gYmIuY2FjaGUudmlydHVhbGZuMnJlYWxmbihmbikKICAgICAgICAgICAgIGlmIHJlYWxmbiBpbiBjaGVja2VkOgogICAgICAgICAgICAgICAgIGNvbnRpbnVlCi0gICAgICAgICAgICBkYXRhID0gYmIuY2FjaGUuQ2FjaGUubG9hZERhdGFGdWxsKHJlYWxmbiwgYmJoYW5kbGVyLmNvb2tlci5jb2xsZWN0aW9uLmdldF9maWxlX2FwcGVuZHMocmVhbGZuKSwgYmJoYW5kbGVyLmNvbmZpZ19kYXRhKQorICAgICAgICAgICAgZGF0YSA9IGJiaGFuZGxlci5wYXJzZV9yZWNpcGVfZmlsZShyZWFsZm4pCiAgICAgICAgICAgICBob21lcGFnZSA9IGRhdGEuZ2V0VmFyKCJIT01FUEFHRSIsIFRydWUpCiAgICAgICAgICAgICBpZiBob21lcGFnZToKICAgICAgICAgICAgICAgICB0cnk6Ci0gICAgICAgICAgICAgICAgICAgIHVybGxpYjIudXJsb3Blbihob21lcGFnZSwgdGltZW91dD01KQorICAgICAgICAgICAgICAgICAgICB1cmxsaWIucmVxdWVzdC51cmxvcGVuKGhvbWVwYWdlLCB0aW1lb3V0PTUpCiAgICAgICAgICAgICAgICAgZXhjZXB0IEV4Y2VwdGlvbjoKICAgICAgICAgICAgICAgICAgICAgY291bnQgPSBjb3VudCArIHdnZXRIb21lcGFnZShvcy5wYXRoLmJhc2VuYW1lKHJlYWxmbiksIGhvbWVwYWdlKQogICAgICAgICAgICAgY2hlY2tlZC5hcHBlbmQocmVhbGZuKQogICAgIHJldHVybiBjb3VudAogCiBpZiBfX25hbWVfXz09J19fbWFpbl9fJzoKLSAgICBiYmhhbmRsZXIgPSBiYi50aW5mb2lsLlRpbmZvaWwoKQotICAgIGJiaGFuZGxlci5wcmVwYXJlKCkKLSAgICBsb2dnZXIuaW5mbygiU3RhcnQgdmVyaWZ5aW5nIEhPTUVQQUdFOiIpCi0gICAgZmFpbGNvdW50ID0gdmVyaWZ5SG9tZXBhZ2UoYmJoYW5kbGVyKQotICAgIGxvZ2dlci5pbmZvKCJGaW5pc2hlZCB2ZXJpZnlpbmcgSE9NRVBBR0UuIikKLSAgICBsb2dnZXIuaW5mbygiU3VtbWFyeTogJXMgZmFpbGVkIiAlIGZhaWxjb3VudCkKKyAgICB3aXRoIGJiLnRpbmZvaWwuVGluZm9pbCgpIGFzIGJiaGFuZGxlcjoKKyAgICAgICAgYmJoYW5kbGVyLnByZXBhcmUoKQorICAgICAgICBsb2dnZXIuaW5mbygiU3RhcnQgdmVyaWZ5aW5nIEhPTUVQQUdFOiIpCisgICAgICAgIGZhaWxjb3VudCA9IHZlcmlmeUhvbWVwYWdlKGJiaGFuZGxlcikKKyAgICAgICAgbG9nZ2VyLmluZm8oIkZpbmlzaGVkIHZlcmlmeWluZyBIT01FUEFHRS4iKQorICAgICAgICBsb2dnZXIuaW5mbygiU3VtbWFyeTogJXMgZmFpbGVkIiAlIGZhaWxjb3VudCkKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9zY3JpcHRzL2NwLW5vZXJyb3IgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvc2NyaXB0cy9jcC1ub2Vycm9yCmluZGV4IDI4ZWI5MGQuLjM1ZWIyMTEgMTAwNzU1Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9zY3JpcHRzL2NwLW5vZXJyb3IKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L3NjcmlwdHMvY3Atbm9lcnJvcgpAQCAtMSw0ICsxLDQgQEAKLSMhL3Vzci9iaW4vZW52IHB5dGhvbgorIyEvdXNyL2Jpbi9lbnYgcHl0aG9uMwogIwogIyBBbGxvdyBjb3B5aW5nIG9mICQxIHRvICQyIGJ1dCBpZiBmaWxlcyBpbiAkMSBkaXNhcHBlYXIgZHVyaW5nIHRoZSBjb3B5IG9wZXJhdGlvbiwKICMgZG9uJ3QgZXJyb3IuCkBAIC0zMywxNiArMzMsMTYgQEAKICAgICAgICAgICAgICAgICBzaHV0aWwuY29weTIoc3JjbmFtZSwgZHN0bmFtZSkKICAgICAgICAgIyBjYXRjaCB0aGUgRXJyb3IgZnJvbSB0aGUgcmVjdXJzaXZlIGNvcHl0cmVlIHNvIHRoYXQgd2UgY2FuCiAgICAgICAgICMgY29udGludWUgd2l0aCBvdGhlciBmaWxlcwotICAgICAgICBleGNlcHQgc2h1dGlsLkVycm9yLCBlcnI6CisgICAgICAgIGV4Y2VwdCBzaHV0aWwuRXJyb3IgYXMgZXJyOgogICAgICAgICAgICAgZXJyb3JzLmV4dGVuZChlcnIuYXJnc1swXSkKLSAgICAgICAgZXhjZXB0IEVudmlyb25tZW50RXJyb3IsIHdoeToKKyAgICAgICAgZXhjZXB0IEVudmlyb25tZW50RXJyb3IgYXMgd2h5OgogICAgICAgICAgICAgZXJyb3JzLmFwcGVuZCgoc3JjbmFtZSwgZHN0bmFtZSwgc3RyKHdoeSkpKQogICAgIHRyeToKICAgICAgICAgc2h1dGlsLmNvcHlzdGF0KHNyYywgZHN0KQotICAgIGV4Y2VwdCBPU0Vycm9yLCB3aHk6CisgICAgZXhjZXB0IE9TRXJyb3IgYXMgd2h5OgogICAgICAgICBlcnJvcnMuZXh0ZW5kKChzcmMsIGRzdCwgc3RyKHdoeSkpKQogICAgIGlmIGVycm9yczoKLSAgICAgICAgcmFpc2Ugc2h1dGlsLkVycm9yLCBlcnJvcnMKKyAgICAgICAgcmFpc2Ugc2h1dGlsLkVycm9yKGVycm9ycykKIAogdHJ5OgogICAgIGNvcHl0cmVlKHN5cy5hcmd2WzFdLCBzeXMuYXJndlsyXSkKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9zY3JpcHRzL2NyZWF0ZS1wdWxsLXJlcXVlc3QgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvc2NyaXB0cy9jcmVhdGUtcHVsbC1yZXF1ZXN0CmluZGV4IDQ3OWFkNmUuLmE4OGYzNWEgMTAwNzU1Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9zY3JpcHRzL2NyZWF0ZS1wdWxsLXJlcXVlc3QKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L3NjcmlwdHMvY3JlYXRlLXB1bGwtcmVxdWVzdApAQCAtMzksMTMgKzM5LDE1IEBACiAgIC1sIGxvY2FsIGJyYW5jaCAgICAgTG9jYWwgYnJhbmNoIG5hbWUgKGRlZmF1bHQ6IEhFQUQpCiAgIC1jICAgICAgICAgICAgICAgICAgQ3JlYXRlIGFuIFJGQyAoUmVxdWVzdCBmb3IgQ29tbWVudCkgcGF0Y2ggc2VyaWVzCiAgIC1oICAgICAgICAgICAgICAgICAgRGlzcGxheSB0aGlzIGhlbHAgbWVzc2FnZQorICAtYSAgICAgICAgICAgICAgICAgIEF1dG9tYXRpY2FsbHkgcHVzaCBsb2NhbCBicmFuY2ggKC1sKSB0byByZW1vdGUgYnJhbmNoICgtYiksCisgICAgICAgICAgICAgICAgICAgICAgb3Igc2V0IENQUl9DT05UUklCX0FVVE9fUFVTSCBpbiBlbnYKICAgLWkgY29tbWl0X2lkICAgICAgICBFbmRpbmcgY29tbWl0IChkZWZhdWx0OiBIRUFEKQogICAtbSBtc2dfYm9keV9maWxlICAgIFRoZSBmaWxlIGNvbnRhaW5pbmcgYSBibHVyYiB0byBiZSBpbnNlcnRlZCBpbnRvIHRoZSBzdW1tYXJ5IGVtYWlsCiAgIC1vIG91dHB1dF9kaXIgICAgICAgU3BlY2lmeSB0aGUgb3V0cHV0IGRpcmVjdG9yeSBmb3IgdGhlIG1lc3NhZ2VzIChkZWZhdWx0OiBwdWxsLVBJRCkKICAgLXAgcHJlZml4ICAgICAgICAgICBVc2UgW3ByZWZpeCBOL01dIGluc3RlYWQgb2YgW1BBVENIIE4vTV0gYXMgdGhlIHN1YmplY3QgcHJlZml4CiAgIC1yIHJlbGF0aXZlX3RvICAgICAgU3RhcnRpbmcgY29tbWl0IChkZWZhdWx0OiBtYXN0ZXIpCiAgIC1zIHN1YmplY3QgICAgICAgICAgVGhlIHN1YmplY3QgdG8gYmUgaW5zZXJ0ZWQgaW50byB0aGUgc3VtbWFyeSBlbWFpbAotICAtdSByZW1vdGUgICAgICAgICAgIFRoZSBnaXQgcmVtb3RlIHdoZXJlIHRoZSBicmFuY2ggaXMgbG9jYXRlZAorICAtdSByZW1vdGUgICAgICAgICAgIFRoZSBnaXQgcmVtb3RlIHdoZXJlIHRoZSBicmFuY2ggaXMgbG9jYXRlZCwgb3Igc2V0IENQUl9DT05UUklCX1JFTU9URSBpbiBlbnYKICAgLWQgcmVsYXRpdmVfZGlyICAgICBHZW5lcmF0ZSBwYXRjaGVzIHJlbGF0aXZlIHRvIGRpcmVjdG9yeQogCiAgRXhhbXBsZXM6CkBAIC01OCw4ICs2MCw5IEBACiBFT00KIH0KIAorUkVNT1RFPSIkQ1BSX0NPTlRSSUJfUkVNT1RFIgogIyBQYXJzZSBhbmQgdmFsaWRhdGUgYXJndW1lbnRzCi13aGlsZSBnZXRvcHRzICJiOmNkOmhpOm06bzpwOnI6czp1Omw6IiBPUFQ7IGRvCit3aGlsZSBnZXRvcHRzICJiOmFjZDpoaTptOm86cDpyOnM6dTpsOiIgT1BUOyBkbwogCWNhc2UgJE9QVCBpbgogCWIpCiAJCUJSQU5DSD0iJE9QVEFSRyIKQEAgLTEwMSwzNSArMTA0LDQ1IEBACiAJCTs7CiAJdSkKIAkJUkVNT1RFPSIkT1BUQVJHIgotCQlSRU1PVEVfVVJMPSQoZ2l0IGNvbmZpZyByZW1vdGUuJFJFTU9URS51cmwpCi0JCWlmIFsgJD8gLW5lIDAgXTsgdGhlbgotCQkJZWNobyAiRVJST1I6IGdpdCBjb25maWcgZmFpbGVkIHRvIGZpbmQgYSB1cmwgZm9yICckUkVNT1RFJyIKLQkJCWVjaG8KLQkJCWVjaG8gIlRvIGFkZCBhIHJlbW90ZSB1cmwgZm9yICRSRU1PVEUsIHVzZToiCi0JCQllY2hvICIgIGdpdCBjb25maWcgcmVtb3RlLiRSRU1PVEUudXJsIDx1cmw+IgotCQkJZXhpdCAxCi0JCWZpCi0KLQkJIyBSZXdyaXRlIHByaXZhdGUgVVJMcyB0byBwdWJsaWMgVVJMcwotCQkjIERldGVybWluZSB0aGUgcmVwb3NpdG9yeSBuYW1lIGZvciB1c2UgaW4gdGhlIFdFQl9VUkwgbGF0ZXIKLQkJY2FzZSAiJFJFTU9URV9VUkwiIGluCi0JCSpAKikKLQkJCVVTRVJfUkU9IltBLVphLXowLTlfLkBdW0EtWmEtejAtOV8uQC1dKlwkXD8iCi0JCQlQUk9UT19SRT0iW2Etel1bYS16K10qOi8vIgotCQkJR0lUX1JFPSJcKF5cKCRQUk9UT19SRVwpXD8kVVNFUl9SRUBcKVwoW146L10qXClbOi9dXCguKlwpIgotCQkJUkVNT1RFX1VSTD0ke1JFTU9URV9VUkwlLmdpdH0KLQkJCVJFTU9URV9SRVBPPSQoZWNobyAkUkVNT1RFX1VSTCB8IHNlZCAicyMkR0lUX1JFI1w0IyIpCi0JCQlSRU1PVEVfVVJMPSQoZWNobyAkUkVNT1RFX1VSTCB8IHNlZCAicyMkR0lUX1JFI2dpdDovL1wzL1w0IyIpCi0JCQk7OwotCQkqKQotCQkJZWNobyAiV0FSTklORzogVW5yZWNvZ25pemVkIHJlbW90ZSBVUkw6ICRSRU1PVEVfVVJMIgotCQkJZWNobyAiICAgICAgICAgVGhlIHB1bGwgYW5kIGJyb3dzZSBVUkxzIHdpbGwgbGlrZWx5IGJlIGluY29ycmVjdCIKLQkJCTs7Ci0JCWVzYWMKKwkJOzsKKwlhKQorCQlDUFJfQ09OVFJJQl9BVVRPX1BVU0g9IjEiCiAJCTs7CiAJZXNhYwogZG9uZQogCitpZiBbIC16ICIkUkVNT1RFIiBdOyB0aGVuCisJZWNobyAiRVJST1I6IE1pc3NpbmcgcGFyYW1ldGVyIC11IG9yIENQUl9DT05UUklCX1JFTU9URSBpbiBlbnYsIG5vIGdpdCByZW1vdGUhIgorCXVzYWdlCisJZXhpdCAxCitmaQorCitSRU1PVEVfVVJMPSQoZ2l0IGNvbmZpZyByZW1vdGUuJFJFTU9URS51cmwpCitpZiBbICQ/IC1uZSAwIF07IHRoZW4KKwllY2hvICJFUlJPUjogZ2l0IGNvbmZpZyBmYWlsZWQgdG8gZmluZCBhIHVybCBmb3IgJyRSRU1PVEUnIgorCWVjaG8KKwllY2hvICJUbyBhZGQgYSByZW1vdGUgdXJsIGZvciAkUkVNT1RFLCB1c2U6IgorCWVjaG8gIiAgZ2l0IGNvbmZpZyByZW1vdGUuJFJFTU9URS51cmwgPHVybD4iCisJZXhpdCAxCitmaQorCisjIFJld3JpdGUgcHJpdmF0ZSBVUkxzIHRvIHB1YmxpYyBVUkxzCisjIERldGVybWluZSB0aGUgcmVwb3NpdG9yeSBuYW1lIGZvciB1c2UgaW4gdGhlIFdFQl9VUkwgbGF0ZXIKK2Nhc2UgIiRSRU1PVEVfVVJMIiBpbgorKkAqKQorCVVTRVJfUkU9IltBLVphLXowLTlfLkBdW0EtWmEtejAtOV8uQC1dKlwkXD8iCisJUFJPVE9fUkU9IlthLXpdW2EteitdKjovLyIKKwlHSVRfUkU9IlwoXlwoJFBST1RPX1JFXClcPyRVU0VSX1JFQFwpXChbXjovXSpcKVs6L11cKC4qXCkiCisJUkVNT1RFX1VSTD0ke1JFTU9URV9VUkwlLmdpdH0KKwlSRU1PVEVfUkVQTz0kKGVjaG8gJFJFTU9URV9VUkwgfCBzZWQgInMjJEdJVF9SRSNcNCMiKQorCVJFTU9URV9VUkw9JChlY2hvICRSRU1PVEVfVVJMIHwgc2VkICJzIyRHSVRfUkUjZ2l0Oi8vXDMvXDQjIikKKwk7OworKikKKwllY2hvICJXQVJOSU5HOiBVbnJlY29nbml6ZWQgcmVtb3RlIFVSTDogJFJFTU9URV9VUkwiCisJZWNobyAiICAgICAgICAgVGhlIHB1bGwgYW5kIGJyb3dzZSBVUkxzIHdpbGwgbGlrZWx5IGJlIGluY29ycmVjdCIKKwk7OworZXNhYworCiBpZiBbIC16ICIkQlJBTkNIIiBdOyB0aGVuCiAJQlJBTkNIPSQoZ2l0IGJyYW5jaCB8IGdyZXAgLWUgIl5cKiAiIHwgY3V0IC1kJyAnIC1mMikKIAllY2hvICJOT1RFOiBBc3N1bWluZyByZW1vdGUgYnJhbmNoICckQlJBTkNIJywgdXNlIC1iIHRvIG92ZXJyaWRlLiIKQEAgLTE0MCwxMiArMTUzLDYgQEAKIAllY2hvICJOT1RFOiBBc3N1bWluZyBsb2NhbCBicmFuY2ggSEVBRCwgdXNlIC1sIHRvIG92ZXJyaWRlLiIKIGZpCiAKLWlmIFsgLXogIiRSRU1PVEVfVVJMIiBdOyB0aGVuCi0JZWNobyAiRVJST1I6IE1pc3NpbmcgcGFyYW1ldGVyIC11LCBubyBnaXQgcmVtb3RlISIKLQl1c2FnZQotCWV4aXQgMQotZmkKLQogaWYgWyAkUkZDIC1lcSAxIF07IHRoZW4KIAlQUkVGSVg9IlJGQyAkUFJFRklYIgogZmkKQEAgLTE3MSw2ICsxNzgsMTEgQEAKICMgUGVyZm9ybSBhIHNhbml0eSB0ZXN0IG9uIHRoZSB3ZWIgVVJMLiBJc3N1ZSBhIHdhcm5pbmcgaWYgaXQgaXMgbm90CiAjIGFjY2Vzc2libGUsIGJ1dCBkbyBub3QgYWJvcnQgYXMgdXNlcnMgbWF5IHdhbnQgdG8gcnVuIG9mZmxpbmUuCiBpZiBbIC1uICIkV0VCX1VSTCIgXTsgdGhlbgorCWlmIFsgIiRDUFJfQ09OVFJJQl9BVVRPX1BVU0giID0gIjEiIF07IHRoZW4KKwkJZWNobyAiUHVzaGluZyAnJEJSQU5DSCcgb24gJyRSRU1PVEUnIGFzIHJlcXVlc3RlZC4uLiIKKwkJZ2l0IHB1c2ggJFJFTU9URSAkTF9CUkFOQ0g6JEJSQU5DSAorCQllY2hvICIiCisJZmkKIAl3Z2V0IC0tbm8tY2hlY2stY2VydGlmaWNhdGUgLXEgJFdFQl9VUkwgLU8gL2Rldi9udWxsCiAJaWYgWyAkPyAtbmUgMCBdOyB0aGVuCiAJCWVjaG8gIldBUk5JTkc6IEJyYW5jaCAnJEJSQU5DSCcgd2FzIG5vdCBmb3VuZCBvbiB0aGUgY29udHJpYiBnaXQgdHJlZS4iCkBAIC0yMTcsNiArMjI5LDcgQEAKIGZpCiBpZiBbICQ/IC1uZSAwIF07IHRoZW4KIAllY2hvICJFUlJPUjogZ2l0IHJlcXVlc3QtcHVsbCByZXBvcnRlZCBhbiBlcnJvciIKKwlybSAtcmYgJE9ESVIKIAlleGl0IDEKIGZpCiAKQEAgLTI0OSw3ICsyNjIsMTMgQEAKIAlzZWQgLWkgIi9CTFVSQiBIRVJFLyBkIiAiJENMIgogZmkKIAotIyBJZiB0aGUgdXNlciBzcGVjaWZpZWQgYSBzdWJqZWN0LCByZXBsYWNlIHRoZSBTVUJKRUNUIHRva2VuIHdpdGggaXQuCisjIFNldCBzdWJqZWN0IGF1dG9tYXRpY2FsbHkgaWYgdGhlcmUgaXMgb25seSBvbmUgcGF0Y2gKK3BhdGNoX2NudD1gZ2l0IGxvZyAtLXByZXR0eT1vbmVsaW5lICR7UkVMQVRJVkVfVE99Li4ke0xfQlJBTkNIfSB8IHdjIC1sYAoraWYgWyAteiAiJFNVQkpFQ1QiIC1hICRwYXRjaF9jbnQgLWVxIDEgXTsgdGhlbgorICAgIFNVQkpFQ1Q9ImBnaXQgbG9nIC0tZm9ybWF0PSVzICR7UkVMQVRJVkVfVE99Li4ke0xfQlJBTkNIfWAiCitmaQorCisjIFJlcGxhY2UgdGhlIFNVQkpFQ1QgdG9rZW4gd2l0aCBpdC4KIGlmIFsgLW4gIiRTVUJKRUNUIiBdOyB0aGVuCiAJc2VkIC1pIC1lICJzL1wqXCpcKiBTVUJKRUNUIEhFUkUgXCpcKlwqLyRTVUJKRUNULyIgIiRDTCIKIGZpCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvc2NyaXB0cy9kZXZ0b29sIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L3NjcmlwdHMvZGV2dG9vbAppbmRleCA0NzgwMzkwLi4wYzMyYzUwIDEwMDc1NQotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvc2NyaXB0cy9kZXZ0b29sCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9zY3JpcHRzL2RldnRvb2wKQEAgLTEsNCArMSw0IEBACi0jIS91c3IvYmluL2VudiBweXRob24KKyMhL3Vzci9iaW4vZW52IHB5dGhvbjMKIAogIyBPcGVuRW1iZWRkZWQgRGV2ZWxvcG1lbnQgdG9vbAogIwpAQCAtMjIsNyArMjIsNyBAQAogaW1wb3J0IGFyZ3BhcnNlCiBpbXBvcnQgZ2xvYgogaW1wb3J0IHJlCi1pbXBvcnQgQ29uZmlnUGFyc2VyCitpbXBvcnQgY29uZmlncGFyc2VyCiBpbXBvcnQgc3VicHJvY2VzcwogaW1wb3J0IGxvZ2dpbmcKIApAQCAtNTEsMTIgKzUxLDEyIEBACiAKICAgICBkZWYgX19pbml0X18oc2VsZiwgZmlsZW5hbWUpOgogICAgICAgICBzZWxmLmNvbmZpZ19maWxlID0gZmlsZW5hbWUKLSAgICAgICAgc2VsZi5jb25maWdfb2JqID0gQ29uZmlnUGFyc2VyLlNhZmVDb25maWdQYXJzZXIoKQorICAgICAgICBzZWxmLmNvbmZpZ19vYmogPSBjb25maWdwYXJzZXIuU2FmZUNvbmZpZ1BhcnNlcigpCiAKICAgICBkZWYgZ2V0KHNlbGYsIHNlY3Rpb24sIG9wdGlvbiwgZGVmYXVsdD1Ob25lKToKICAgICAgICAgdHJ5OgogICAgICAgICAgICAgcmV0ID0gc2VsZi5jb25maWdfb2JqLmdldChzZWN0aW9uLCBvcHRpb24pCi0gICAgICAgIGV4Y2VwdCAoQ29uZmlnUGFyc2VyLk5vT3B0aW9uRXJyb3IsIENvbmZpZ1BhcnNlci5Ob1NlY3Rpb25FcnJvcik6CisgICAgICAgIGV4Y2VwdCAoY29uZmlncGFyc2VyLk5vT3B0aW9uRXJyb3IsIGNvbmZpZ3BhcnNlci5Ob1NlY3Rpb25FcnJvcik6CiAgICAgICAgICAgICBpZiBkZWZhdWx0ICE9IE5vbmU6CiAgICAgICAgICAgICAgICAgcmV0ID0gZGVmYXVsdAogICAgICAgICAgICAgZWxzZToKQEAgLTg2LDYgKzg2LDExIEBACiAgICAgICAgIHdpdGggb3BlbihzZWxmLmNvbmZpZ19maWxlLCAndycpIGFzIGY6CiAgICAgICAgICAgICBzZWxmLmNvbmZpZ19vYmoud3JpdGUoZikKIAorICAgIGRlZiBzZXQoc2VsZiwgc2VjdGlvbiwgb3B0aW9uLCB2YWx1ZSk6CisgICAgICAgIGlmIG5vdCBzZWxmLmNvbmZpZ19vYmouaGFzX3NlY3Rpb24oc2VjdGlvbik6CisgICAgICAgICAgICBzZWxmLmNvbmZpZ19vYmouYWRkX3NlY3Rpb24oc2VjdGlvbikKKyAgICAgICAgc2VsZi5jb25maWdfb2JqLnNldChzZWN0aW9uLCBvcHRpb24sIHZhbHVlKQorCiBjbGFzcyBDb250ZXh0OgogICAgIGRlZiBfX2luaXRfXyhzZWxmLCAqKmt3YXJncyk6CiAgICAgICAgIHNlbGYuX19kaWN0X18udXBkYXRlKGt3YXJncykKQEAgLTE3NCwxMyArMTc5LDE2IEBACiAgICAgICAgICMgQWRkIGEgUkVBRE1FIGZpbGUKICAgICAgICAgd2l0aCBvcGVuKG9zLnBhdGguam9pbih3b3Jrc3BhY2VkaXIsICdSRUFETUUnKSwgJ3cnKSBhcyBmOgogICAgICAgICAgICAgZi53cml0ZSgnVGhpcyBsYXllciB3YXMgY3JlYXRlZCBieSB0aGUgT3BlbkVtYmVkZGVkIGRldnRvb2wgdXRpbGl0eSBpbiBvcmRlciB0b1xuJykKLSAgICAgICAgICAgIGYud3JpdGUoJ2NvbnRhaW4gcmVjaXBlcyBhbmQgYmJhcHBlbmRzLiBJbiBtb3N0IGluc3RhbmNlcyB5b3Ugc2hvdWxkIHVzZSB0aGVcbicpCisgICAgICAgICAgICBmLndyaXRlKCdjb250YWluIHJlY2lwZXMgYW5kIGJiYXBwZW5kcyB0aGF0IGFyZSBjdXJyZW50bHkgYmVpbmcgd29ya2VkIG9uLiBUaGUgaWRlYVxuJykKKyAgICAgICAgICAgIGYud3JpdGUoJ2lzIHRoYXQgdGhlIGNvbnRlbnRzIGlzIHRlbXBvcmFyeSAtIG9uY2UgeW91IGhhdmUgZmluaXNoZWQgd29ya2luZyBvbiBhXG4nKQorICAgICAgICAgICAgZi53cml0ZSgncmVjaXBlIHlvdSB1c2UgdGhlIGFwcHJvcHJpYXRlIG1ldGhvZCB0byBtb3ZlIHRoZSBmaWxlcyB5b3UgaGF2ZSBiZWVuXG4nKQorICAgICAgICAgICAgZi53cml0ZSgnd29ya2luZyBvbiB0byBhIHByb3BlciBsYXllci4gSW4gbW9zdCBpbnN0YW5jZXMgeW91IHNob3VsZCB1c2UgdGhlXG4nKQogICAgICAgICAgICAgZi53cml0ZSgnZGV2dG9vbCB1dGlsaXR5IHRvIG1hbmFnZSBmaWxlcyB3aXRoaW4gaXQgcmF0aGVyIHRoYW4gbW9kaWZ5aW5nIGZpbGVzXG4nKQogICAgICAgICAgICAgZi53cml0ZSgnZGlyZWN0bHkgKGFsdGhvdWdoIHJlY2lwZXMgYWRkZWQgd2l0aCAiZGV2dG9vbCBhZGQiIHdpbGwgb2Z0ZW4gbmVlZFxuJykKICAgICAgICAgICAgIGYud3JpdGUoJ2RpcmVjdCBtb2RpZmljYXRpb24uKVxuJykKLSAgICAgICAgICAgIGYud3JpdGUoJ1xuSWYgeW91IG5vIGxvbmdlciBuZWVkIHRvIHVzZSBkZXZ0b29sIHlvdSBjYW4gcmVtb3ZlIHRoZSBwYXRoIHRvIHRoaXNcbicpCi0gICAgICAgICAgICBmLndyaXRlKCd3b3Jrc3BhY2UgbGF5ZXIgZnJvbSB5b3VyIGNvbmYvYmJsYXllcnMuY29uZiBmaWxlIChhbmQgdGhlbiBkZWxldGUgdGhlXG4nKQotICAgICAgICAgICAgZi53cml0ZSgnbGF5ZXIsIGlmIHlvdSB3aXNoKS5cbicpCisgICAgICAgICAgICBmLndyaXRlKCdcbklmIHlvdSBubyBsb25nZXIgbmVlZCB0byB1c2UgZGV2dG9vbCBvciB0aGUgd29ya3NwYWNlIGxheWVyXCdzIGNvbnRlbnRzXG4nKQorICAgICAgICAgICAgZi53cml0ZSgneW91IGNhbiByZW1vdmUgdGhlIHBhdGggdG8gdGhpcyB3b3Jrc3BhY2UgbGF5ZXIgZnJvbSB5b3VyIGNvbmYvYmJsYXllcnMuY29uZlxuJykKKyAgICAgICAgICAgIGYud3JpdGUoJ2ZpbGUgKGFuZCB0aGVuIGRlbGV0ZSB0aGUgbGF5ZXIsIGlmIHlvdSB3aXNoKS5cbicpCiAgICAgICAgICAgICBmLndyaXRlKCdcbk5vdGUgdGhhdCBieSBkZWZhdWx0LCBpZiBkZXZ0b29sIGZldGNoZXMgYW5kIHVucGFja3Mgc291cmNlIGNvZGUsIGl0XG4nKQogICAgICAgICAgICAgZi53cml0ZSgnd2lsbCBwbGFjZSBpdCBpbiBhIHN1YmRpcmVjdG9yeSBvZiBhICJzb3VyY2VzIiBzdWJkaXJlY3Rvcnkgb2YgdGhlXG4nKQogICAgICAgICAgICAgZi53cml0ZSgnbGF5ZXIuIElmIHlvdSBwcmVmZXIgaXQgdG8gYmUgZWxzZXdoZXJlIHlvdSBjYW4gc3BlY2lmeSB0aGUgc291cmNlXG4nKQpAQCAtMjgxLDE4ICsyODksMTcgQEAKIAogICAgIGlmIGdsb2JhbF9hcmdzLmJicGF0aCBpcyBOb25lOgogICAgICAgICB0aW5mb2lsID0gc2V0dXBfdGluZm9pbChjb25maWdfb25seT1UcnVlLCBiYXNlcGF0aD1iYXNlcGF0aCkKLSAgICAgICAgZ2xvYmFsX2FyZ3MuYmJwYXRoID0gdGluZm9pbC5jb25maWdfZGF0YS5nZXRWYXIoJ0JCUEFUSCcsIFRydWUpCi0gICAgZWxzZToKLSAgICAgICAgdGluZm9pbCA9IE5vbmUKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgZ2xvYmFsX2FyZ3MuYmJwYXRoID0gdGluZm9pbC5jb25maWdfZGF0YS5nZXRWYXIoJ0JCUEFUSCcsIFRydWUpCisgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICB0aW5mb2lsLnNodXRkb3duKCkKIAogICAgIGZvciBwYXRoIGluIFtzY3JpcHRzX3BhdGhdICsgZ2xvYmFsX2FyZ3MuYmJwYXRoLnNwbGl0KCc6Jyk6CiAgICAgICAgIHBsdWdpbnBhdGggPSBvcy5wYXRoLmpvaW4ocGF0aCwgJ2xpYicsICdkZXZ0b29sJykKICAgICAgICAgc2NyaXB0dXRpbHMubG9hZF9wbHVnaW5zKGxvZ2dlciwgcGx1Z2lucywgcGx1Z2lucGF0aCkKIAotICAgIGlmIHRpbmZvaWw6Ci0gICAgICAgIHRpbmZvaWwuc2h1dGRvd24oKQotCiAgICAgc3VicGFyc2VycyA9IHBhcnNlci5hZGRfc3VicGFyc2VycyhkZXN0PSJzdWJwYXJzZXJfbmFtZSIsIHRpdGxlPSdzdWJjb21tYW5kcycsIG1ldGF2YXI9JzxzdWJjb21tYW5kPicpCisgICAgc3VicGFyc2Vycy5yZXF1aXJlZCA9IFRydWUKIAogICAgIHN1YnBhcnNlcnMuYWRkX3N1YnBhcnNlcl9ncm91cCgnc2RrJywgJ1NESyBtYWludGVuYW5jZScsIC0yKQogICAgIHN1YnBhcnNlcnMuYWRkX3N1YnBhcnNlcl9ncm91cCgnYWR2YW5jZWQnLCAnQWR2YW5jZWQnLCAtMSkKQEAgLTMyNSw3ICszMzIsNyBAQAogICAgIGV4Y2VwdCBEZXZ0b29sRXJyb3IgYXMgZXJyOgogICAgICAgICBpZiBzdHIoZXJyKToKICAgICAgICAgICAgIGxvZ2dlci5lcnJvcihzdHIoZXJyKSkKLSAgICAgICAgcmV0ID0gMQorICAgICAgICByZXQgPSBlcnIuZXhpdGNvZGUKICAgICBleGNlcHQgYXJncGFyc2Vfb2UuQXJndW1lbnRVc2FnZUVycm9yIGFzIGFlOgogICAgICAgICBwYXJzZXIuZXJyb3Jfc3ViY29tbWFuZChhZS5tZXNzYWdlLCBhZS5zdWJjb21tYW5kKQogCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvc2NyaXB0cy9nZW4tbG9ja2Vkc2lnLWNhY2hlIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L3NjcmlwdHMvZ2VuLWxvY2tlZHNpZy1jYWNoZQppbmRleCAwOTg2YTIxLi40OWRlNzRlIDEwMDc1NQotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvc2NyaXB0cy9nZW4tbG9ja2Vkc2lnLWNhY2hlCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9zY3JpcHRzL2dlbi1sb2NrZWRzaWctY2FjaGUKQEAgLTEsNCArMSw0IEBACi0jIS91c3IvYmluL2VudiBweXRob24KKyMhL3Vzci9iaW4vZW52IHB5dGhvbjMKIAogaW1wb3J0IG9zCiBpbXBvcnQgc3lzCkBAIC0xNSwxNSArMTUsMjcgQEAKIAogaWYgbGVuKHN5cy5hcmd2KSA8IDU6CiAgICAgcHJpbnQoIkluY29ycmVjdCBudW1iZXIgb2YgYXJndW1lbnRzIHNwZWNpZmllZCIpCi0gICAgcHJpbnQoInN5bnRheDogZ2VuLWxvY2tlZHNpZy1jYWNoZSA8bG9ja2VkLXNpZ3MuaW5jPiA8aW5wdXQtY2FjaGVkaXI+IDxvdXRwdXQtY2FjaGVkaXI+IDxuYXRpdmVsc2JzdHJpbmc+IikKKyAgICBwcmludCgic3ludGF4OiBnZW4tbG9ja2Vkc2lnLWNhY2hlIDxsb2NrZWQtc2lncy5pbmM+IDxpbnB1dC1jYWNoZWRpcj4gPG91dHB1dC1jYWNoZWRpcj4gPG5hdGl2ZWxzYnN0cmluZz4gW2ZpbHRlcmZpbGVdIikKICAgICBzeXMuZXhpdCgxKQogCitmaWx0ZXJsaXN0ID0gW10KK2lmIGxlbihzeXMuYXJndikgPiA1OgorICAgIHByaW50KCdSZWFkaW5nIGZpbHRlciBmaWxlICVzJyAlIHN5cy5hcmd2WzVdKQorICAgIHdpdGggb3BlbihzeXMuYXJndls1XSkgYXMgZjoKKyAgICAgICAgZm9yIGwgaW4gZi5yZWFkbGluZXMoKToKKyAgICAgICAgICAgIGlmICI6IiBpbiBsOgorICAgICAgICAgICAgICAgIGZpbHRlcmxpc3QuYXBwZW5kKGwucnN0cmlwKCkpCisKIHByaW50KCdSZWFkaW5nICVzJyAlIHN5cy5hcmd2WzFdKQogc2lncyA9IFtdCiB3aXRoIG9wZW4oc3lzLmFyZ3ZbMV0pIGFzIGY6CiAgICAgZm9yIGwgaW4gZi5yZWFkbGluZXMoKToKICAgICAgICAgaWYgIjoiIGluIGw6Ci0gICAgICAgICAgICBzaWdzLmFwcGVuZChsLnNwbGl0KCI6IilbMl0uc3BsaXQoKVswXSkKKyAgICAgICAgICAgIHRhc2ssIHNpZyA9IGwuc3BsaXQoKVswXS5yc3BsaXQoJzonLCAxKQorICAgICAgICAgICAgaWYgZmlsdGVybGlzdCBhbmQgbm90IHRhc2sgaW4gZmlsdGVybGlzdDoKKyAgICAgICAgICAgICAgICBwcmludCgnRmlsdGVyaW5nIG91dCAlcycgJSB0YXNrKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBzaWdzLmFwcGVuZChzaWcpCiAKIHByaW50KCdHYXRoZXJpbmcgZmlsZSBsaXN0JykKIGZpbGVzID0gc2V0KCkKQEAgLTQ1LDEzICs1NywxNCBAQAogICAgIGRlc3RkaXIgPSBvcy5wYXRoLmRpcm5hbWUoZHN0KQogICAgIG1rZGlyKGRlc3RkaXIpCiAKKyAgICBzcmMgPSBvcy5wYXRoLnJlYWxwYXRoKGYpCiAgICAgaWYgb3MucGF0aC5leGlzdHMoZHN0KToKICAgICAgICAgb3MucmVtb3ZlKGRzdCkKLSAgICBpZiAob3Muc3RhdChmKS5zdF9kZXYgPT0gb3Muc3RhdChkZXN0ZGlyKS5zdF9kZXYpOgorICAgIGlmIChvcy5zdGF0KHNyYykuc3RfZGV2ID09IG9zLnN0YXQoZGVzdGRpcikuc3RfZGV2KToKICAgICAgICAgcHJpbnQoJ2xpbmtpbmcnKQotICAgICAgICBvcy5saW5rKGYsIGRzdCkKKyAgICAgICAgb3MubGluayhzcmMsIGRzdCkKICAgICBlbHNlOgogICAgICAgICBwcmludCgnY29weWluZycpCi0gICAgICAgIHNodXRpbC5jb3B5ZmlsZShmLCBkc3QpCisgICAgICAgIHNodXRpbC5jb3B5ZmlsZShzcmMsIGRzdCkKIAogcHJpbnQoJ0RvbmUhJykKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9hcmdwYXJzZV9vZS5weSBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9hcmdwYXJzZV9vZS5weQppbmRleCBiZjNlYmFkLi5iZjZlYjE3IDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvYXJncGFyc2Vfb2UucHkKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L3NjcmlwdHMvbGliL2FyZ3BhcnNlX29lLnB5CkBAIC0xNCwyMyArMTQsMzUgQEAKICAgICAgICAga3dhcmdzLnNldGRlZmF1bHQoJ2Zvcm1hdHRlcl9jbGFzcycsIE9lSGVscEZvcm1hdHRlcikKICAgICAgICAgc2VsZi5fc3VicGFyc2VyX2dyb3VwcyA9IE9yZGVyZWREaWN0KCkKICAgICAgICAgc3VwZXIoQXJndW1lbnRQYXJzZXIsIHNlbGYpLl9faW5pdF9fKCphcmdzLCAqKmt3YXJncykKKyAgICAgICAgc2VsZi5fcG9zaXRpb25hbHMudGl0bGUgPSAnYXJndW1lbnRzJworICAgICAgICBzZWxmLl9vcHRpb25hbHMudGl0bGUgPSAnb3B0aW9ucycKIAogICAgIGRlZiBlcnJvcihzZWxmLCBtZXNzYWdlKToKLSAgICAgICAgc3lzLnN0ZGVyci53cml0ZSgnRVJST1I6ICVzXG4nICUgbWVzc2FnZSkKLSAgICAgICAgc2VsZi5wcmludF9oZWxwKCkKKyAgICAgICAgIiIiZXJyb3IobWVzc2FnZTogc3RyaW5nKQorCisgICAgICAgIFByaW50cyBhIGhlbHAgbWVzc2FnZSBpbmNvcnBvcmF0aW5nIHRoZSBtZXNzYWdlIHRvIHN0ZGVyciBhbmQKKyAgICAgICAgZXhpdHMuCisgICAgICAgICIiIgorICAgICAgICBzZWxmLl9wcmludF9tZXNzYWdlKCclczogZXJyb3I6ICVzXG4nICUgKHNlbGYucHJvZywgbWVzc2FnZSksIHN5cy5zdGRlcnIpCisgICAgICAgIHNlbGYucHJpbnRfaGVscChzeXMuc3RkZXJyKQogICAgICAgICBzeXMuZXhpdCgyKQogCiAgICAgZGVmIGVycm9yX3N1YmNvbW1hbmQoc2VsZiwgbWVzc2FnZSwgc3ViY29tbWFuZCk6CiAgICAgICAgIGlmIHN1YmNvbW1hbmQ6Ci0gICAgICAgICAgICBmb3IgYWN0aW9uIGluIHNlbGYuX2FjdGlvbnM6Ci0gICAgICAgICAgICAgICAgaWYgaXNpbnN0YW5jZShhY3Rpb24sIGFyZ3BhcnNlLl9TdWJQYXJzZXJzQWN0aW9uKToKLSAgICAgICAgICAgICAgICAgICAgZm9yIGNob2ljZSwgc3VicGFyc2VyIGluIGFjdGlvbi5jaG9pY2VzLml0ZW1zKCk6Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiBjaG9pY2UgPT0gc3ViY29tbWFuZDoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdWJwYXJzZXIuZXJyb3IobWVzc2FnZSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4KKyAgICAgICAgICAgIGFjdGlvbiA9IHNlbGYuX2dldF9zdWJwYXJzZXJfYWN0aW9uKCkKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBzdWJwYXJzZXIgPSBhY3Rpb24uX25hbWVfcGFyc2VyX21hcFtzdWJjb21tYW5kXQorICAgICAgICAgICAgZXhjZXB0IEtleUVycm9yOgorICAgICAgICAgICAgICAgIHNlbGYuZXJyb3IoJ25vIHN1YnBhcnNlciBmb3IgbmFtZSAiJXMiJyAlIHN1YmNvbW1hbmQpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHN1YnBhcnNlci5lcnJvcihtZXNzYWdlKQorCiAgICAgICAgIHNlbGYuZXJyb3IobWVzc2FnZSkKIAogICAgIGRlZiBhZGRfc3VicGFyc2VycyhzZWxmLCAqYXJncywgKiprd2FyZ3MpOgorICAgICAgICBpZiAnZGVzdCcgbm90IGluIGt3YXJnczoKKyAgICAgICAgICAgIGt3YXJnc1snZGVzdCddID0gJ19zdWJwYXJzZXJfbmFtZScKKwogICAgICAgICByZXQgPSBzdXBlcihBcmd1bWVudFBhcnNlciwgc2VsZikuYWRkX3N1YnBhcnNlcnMoKmFyZ3MsICoqa3dhcmdzKQogICAgICAgICAjIE5lZWQgYSB3YXkgb2YgYWNjZXNzaW5nIHRoZSBwYXJlbnQgcGFyc2VyCiAgICAgICAgIHJldC5fcGFyZW50X3BhcnNlciA9IHNlbGYKQEAgLTQzLDYgKzU1LDM4IEBACiAgICAgZGVmIGFkZF9zdWJwYXJzZXJfZ3JvdXAoc2VsZiwgZ3JvdXBuYW1lLCBncm91cGRlc2MsIG9yZGVyPTApOgogICAgICAgICBzZWxmLl9zdWJwYXJzZXJfZ3JvdXBzW2dyb3VwbmFtZV0gPSAoZ3JvdXBkZXNjLCBvcmRlcikKIAorICAgIGRlZiBwYXJzZV9hcmdzKHNlbGYsIGFyZ3M9Tm9uZSwgbmFtZXNwYWNlPU5vbmUpOgorICAgICAgICAiIiJQYXJzZSBhcmd1bWVudHMsIHVzaW5nIHRoZSBjb3JyZWN0IHN1YnBhcnNlciB0byBzaG93IHRoZSBlcnJvci4iIiIKKyAgICAgICAgYXJncywgYXJndiA9IHNlbGYucGFyc2Vfa25vd25fYXJncyhhcmdzLCBuYW1lc3BhY2UpCisgICAgICAgIGlmIGFyZ3Y6CisgICAgICAgICAgICBtZXNzYWdlID0gJ3VucmVjb2duaXplZCBhcmd1bWVudHM6ICVzJyAlICcgJy5qb2luKGFyZ3YpCisgICAgICAgICAgICBpZiBzZWxmLl9zdWJwYXJzZXJzOgorICAgICAgICAgICAgICAgIHN1YnBhcnNlciA9IHNlbGYuX2dldF9zdWJwYXJzZXIoYXJncykKKyAgICAgICAgICAgICAgICBzdWJwYXJzZXIuZXJyb3IobWVzc2FnZSkKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgc2VsZi5lcnJvcihtZXNzYWdlKQorICAgICAgICAgICAgc3lzLmV4aXQoMikKKyAgICAgICAgcmV0dXJuIGFyZ3MKKworICAgIGRlZiBfZ2V0X3N1YnBhcnNlcihzZWxmLCBhcmdzKToKKyAgICAgICAgYWN0aW9uID0gc2VsZi5fZ2V0X3N1YnBhcnNlcl9hY3Rpb24oKQorICAgICAgICBpZiBhY3Rpb24uZGVzdCA9PSBhcmdwYXJzZS5TVVBQUkVTUzoKKyAgICAgICAgICAgIHNlbGYuZXJyb3IoJ2Nhbm5vdCBnZXQgc3VicGFyc2VyLCB0aGUgc3VicGFyc2VyIGFjdGlvbiBkZXN0IGlzIHN1cHByZXNzZWQnKQorCisgICAgICAgIG5hbWUgPSBnZXRhdHRyKGFyZ3MsIGFjdGlvbi5kZXN0KQorICAgICAgICB0cnk6CisgICAgICAgICAgICByZXR1cm4gYWN0aW9uLl9uYW1lX3BhcnNlcl9tYXBbbmFtZV0KKyAgICAgICAgZXhjZXB0IEtleUVycm9yOgorICAgICAgICAgICAgc2VsZi5lcnJvcignbm8gc3VicGFyc2VyIGZvciBuYW1lICIlcyInICUgbmFtZSkKKworICAgIGRlZiBfZ2V0X3N1YnBhcnNlcl9hY3Rpb24oc2VsZik6CisgICAgICAgIGlmIG5vdCBzZWxmLl9zdWJwYXJzZXJzOgorICAgICAgICAgICAgc2VsZi5lcnJvcignY2Fubm90IHJldHVybiB0aGUgc3VicGFyc2VyIGFjdGlvbiwgbm8gc3VicGFyc2VycyBhZGRlZCcpCisKKyAgICAgICAgZm9yIGFjdGlvbiBpbiBzZWxmLl9zdWJwYXJzZXJzLl9ncm91cF9hY3Rpb25zOgorICAgICAgICAgICAgaWYgaXNpbnN0YW5jZShhY3Rpb24sIGFyZ3BhcnNlLl9TdWJQYXJzZXJzQWN0aW9uKToKKyAgICAgICAgICAgICAgICByZXR1cm4gYWN0aW9uCisKIAogY2xhc3MgQXJndW1lbnRTdWJQYXJzZXIoQXJndW1lbnRQYXJzZXIpOgogICAgIGRlZiBfX2luaXRfXyhzZWxmLCAqYXJncywgKiprd2FyZ3MpOgpAQCAtNTEsMTAgKzk1LDYgQEAKICAgICAgICAgaWYgJ29yZGVyJyBpbiBrd2FyZ3M6CiAgICAgICAgICAgICBzZWxmLl9vcmRlciA9IGt3YXJncy5wb3AoJ29yZGVyJykKICAgICAgICAgc3VwZXIoQXJndW1lbnRTdWJQYXJzZXIsIHNlbGYpLl9faW5pdF9fKCphcmdzLCAqKmt3YXJncykKLSAgICAgICAgZm9yIGFncm91cCBpbiBzZWxmLl9hY3Rpb25fZ3JvdXBzOgotICAgICAgICAgICAgaWYgYWdyb3VwLnRpdGxlID09ICdvcHRpb25hbCBhcmd1bWVudHMnOgotICAgICAgICAgICAgICAgIGFncm91cC50aXRsZSA9ICdvcHRpb25zJwotICAgICAgICAgICAgICAgIGJyZWFrCiAKICAgICBkZWYgcGFyc2Vfa25vd25fYXJncyhzZWxmLCBhcmdzPU5vbmUsIG5hbWVzcGFjZT1Ob25lKToKICAgICAgICAgIyBUaGlzIHdvcmtzIGFyb3VuZCBhcmdwYXJzZSBub3QgaGFuZGxpbmcgb3B0aW9uYWwgcG9zaXRpb25hbCBhcmd1bWVudHMgYmVpbmcKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9ic3AvZW5naW5lLnB5IGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L3NjcmlwdHMvbGliL2JzcC9lbmdpbmUucHkKaW5kZXggNjZlMjE2Mi4uMDdhMTViYiAxMDA2NDQKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L3NjcmlwdHMvbGliL2JzcC9lbmdpbmUucHkKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L3NjcmlwdHMvbGliL2JzcC9lbmdpbmUucHkKQEAgLTM0LDIzICszNCwyMiBAQAogaW1wb3J0IG9zCiBpbXBvcnQgc3lzCiBmcm9tIGFiYyBpbXBvcnQgQUJDTWV0YSwgYWJzdHJhY3RtZXRob2QKLWZyb20gdGFncyBpbXBvcnQgKgorZnJvbSAudGFncyBpbXBvcnQgKgogaW1wb3J0IHNobGV4CiBpbXBvcnQganNvbgogaW1wb3J0IHN1YnByb2Nlc3MKIGltcG9ydCBzaHV0aWwKIAotY2xhc3MgTGluZSgpOgorY2xhc3MgTGluZShtZXRhY2xhc3M9QUJDTWV0YSk6CiAgICAgIiIiCiAgICAgR2VuZXJpYyAoYWJzdHJhY3QpIGNvbnRhaW5lciByZXByZXNlbnRpbmcgYSBsaW5lIHRoYXQgd2lsbCBhcHBlYXIKICAgICBpbiB0aGUgQlNQLWdlbmVyYXRpbmcgcHJvZ3JhbS4KICAgICAiIiIKLSAgICBfX21ldGFjbGFzc19fID0gQUJDTWV0YQogCiAgICAgZGVmIF9faW5pdF9fKHNlbGYsIGxpbmUpOgogICAgICAgICBzZWxmLmxpbmUgPSBsaW5lCiAgICAgICAgIHNlbGYuZ2VuZXJhdGVkX2xpbmUgPSAiIgotICAgICAgICBzZWxmLnByaW8gPSBzeXMubWF4aW50CisgICAgICAgIHNlbGYucHJpbyA9IHN5cy5tYXhzaXplCiAgICAgICAgIHNlbGYuZGlzY2FyZCA9IEZhbHNlCiAKICAgICBAYWJzdHJhY3RtZXRob2QKQEAgLTE1NSw3ICsxNTQsNyBAQAogICAgICAgICB0cnk6CiAgICAgICAgICAgICBzZWxmLnByaW8gPSBpbnQocHJvcHNbInByaW8iXSkKICAgICAgICAgZXhjZXB0IEtleUVycm9yOgotICAgICAgICAgICAgc2VsZi5wcmlvID0gc3lzLm1heGludAorICAgICAgICAgICAgc2VsZi5wcmlvID0gc3lzLm1heHNpemUKIAogICAgIGRlZiBnZW4oc2VsZiwgY29udGV4dCA9IE5vbmUpOgogICAgICAgICB0cnk6CkBAIC0yMDEsNyArMjAwLDcgQEAKIAogICAgICAgICBtc2cgKz0gIiBbZGVmYXVsdDogIiArIGRlZmF1bHRfY2hvaWNlICsgIl0iCiAKLSAgICAgICAgbGluZSA9IG5hbWUgKyAiID0gZGVmYXVsdChyYXdfaW5wdXQoXCIiICsgbXNnICsgIiBcIiksICIgKyBuYW1lICsgIikiCisgICAgICAgIGxpbmUgPSBuYW1lICsgIiA9IGRlZmF1bHQoaW5wdXQoXCIiICsgbXNnICsgIiBcIiksICIgKyBuYW1lICsgIikiCiAKICAgICAgICAgcmV0dXJuIGxpbmUKIApAQCAtMzE0LDE2ICszMTMsMTUgQEAKIAogICAgICAgICBtc2cgKz0gIiBbZGVmYXVsdDogIiArIGRlZmF1bHRfY2hvaWNlICsgIl0iCiAKLSAgICAgICAgbGluZSA9IG5hbWUgKyAiID0gYm9vbGVhbihyYXdfaW5wdXQoXCIiICsgbXNnICsgIiBcIiksICIgKyBuYW1lICsgIikiCisgICAgICAgIGxpbmUgPSBuYW1lICsgIiA9IGJvb2xlYW4oaW5wdXQoXCIiICsgbXNnICsgIiBcIiksICIgKyBuYW1lICsgIikiCiAKICAgICAgICAgcmV0dXJuIGxpbmUKIAogCi1jbGFzcyBMaXN0SW5wdXRMaW5lKElucHV0TGluZSk6CitjbGFzcyBMaXN0SW5wdXRMaW5lKElucHV0TGluZSwgbWV0YWNsYXNzPUFCQ01ldGEpOgogICAgICIiIgogICAgIEJhc2UgY2xhc3MgZm9yIExpc3QtYmFzZWQgSW5wdXQgbGluZXMuIGUuZy4gQ2hvaWNlbGlzdCwgQ2hlY2tsaXN0LgogICAgICIiIgotICAgIF9fbWV0YWNsYXNzX18gPSBBQkNNZXRhCiAKICAgICBkZWYgX19pbml0X18oc2VsZiwgcHJvcHMsIHRhZywgbGluZW5vKToKICAgICAgICAgSW5wdXRMaW5lLl9faW5pdF9fKHNlbGYsIHByb3BzLCB0YWcsIGxpbmVubykKQEAgLTQ2NCw5ICs0NjIsOSBAQAogICAgICAgICBjaG9pY2VzX3N0ciA9IHNlbGYuZ2VuX2Nob2ljZXNfc3RyKGNob2ljZXBhaXJzKQogICAgICAgICBjaG9pY2VzX3ZhbF9saXN0ID0gc2VsZi5nZW5fY2hvaWNlc192YWxfbGlzdChjaG9pY2VwYWlycykKICAgICAgICAgaWYgY2hlY2tsaXN0OgotICAgICAgICAgICAgY2hvaWNldmFsID0gZGVmYXVsdChmaW5kX2Nob2ljZXZhbHMocmF3X2lucHV0KG1zZyArICJcbiIgKyBjaG9pY2VzX3N0ciksIGNob2ljZXNfdmFsX2xpc3QpLCBkZWZhdWx0X2Nob2ljZSkKKyAgICAgICAgICAgIGNob2ljZXZhbCA9IGRlZmF1bHQoZmluZF9jaG9pY2V2YWxzKGlucHV0KG1zZyArICJcbiIgKyBjaG9pY2VzX3N0ciksIGNob2ljZXNfdmFsX2xpc3QpLCBkZWZhdWx0X2Nob2ljZSkKICAgICAgICAgZWxzZToKLSAgICAgICAgICAgIGNob2ljZXZhbCA9IGRlZmF1bHQoZmluZF9jaG9pY2V2YWwocmF3X2lucHV0KG1zZyArICJcbiIgKyBjaG9pY2VzX3N0ciksIGNob2ljZXNfdmFsX2xpc3QpLCBkZWZhdWx0X2Nob2ljZSkKKyAgICAgICAgICAgIGNob2ljZXZhbCA9IGRlZmF1bHQoZmluZF9jaG9pY2V2YWwoaW5wdXQobXNnICsgIlxuIiArIGNob2ljZXNfc3RyKSwgY2hvaWNlc192YWxfbGlzdCksIGRlZmF1bHRfY2hvaWNlKQogCiAgICAgICAgIHJldHVybiBjaG9pY2V2YWwKIApAQCAtNTQwLDEyICs1MzgsMTIgQEAKICAgICAiIiIKICAgICBtc2cgPSBpbnB1dF9zdHIuc3RyaXAoKSArICIgIgogCi0gICAgZ2l0dXJsID0gZGVmYXVsdChyYXdfaW5wdXQobXNnKSwgbmFtZSkKKyAgICBnaXR1cmwgPSBkZWZhdWx0KGlucHV0KG1zZyksIG5hbWUpCiAKICAgICB3aGlsZSBUcnVlOgogICAgICAgICBpZiB2ZXJpZnlfZ2l0X3JlcG8oZ2l0dXJsKToKICAgICAgICAgICAgIHJldHVybiBnaXR1cmwKLSAgICAgICAgZ2l0dXJsID0gZGVmYXVsdChyYXdfaW5wdXQobXNnKSwgbmFtZSkKKyAgICAgICAgZ2l0dXJsID0gZGVmYXVsdChpbnB1dChtc2cpLCBuYW1lKQogCiAKIGRlZiBnZXRfdmVyaWZpZWRfZmlsZShpbnB1dF9zdHIsIG5hbWUsIGZpbGVuYW1lX2Nhbl9iZV9udWxsKToKQEAgLTU1NSwxNCArNTUzLDE0IEBACiAgICAgIiIiCiAgICAgbXNnID0gaW5wdXRfc3RyLnN0cmlwKCkgKyAiICIKIAotICAgIGZpbGVuYW1lID0gZGVmYXVsdChyYXdfaW5wdXQobXNnKSwgbmFtZSkKKyAgICBmaWxlbmFtZSA9IGRlZmF1bHQoaW5wdXQobXNnKSwgbmFtZSkKIAogICAgIHdoaWxlIFRydWU6CiAgICAgICAgIGlmIG5vdCBmaWxlbmFtZSBhbmQgZmlsZW5hbWVfY2FuX2JlX251bGw6CiAgICAgICAgICAgICByZXR1cm4gZmlsZW5hbWUKICAgICAgICAgaWYgb3MucGF0aC5pc2ZpbGUoZmlsZW5hbWUpOgogICAgICAgICAgICAgcmV0dXJuIGZpbGVuYW1lCi0gICAgICAgIGZpbGVuYW1lID0gZGVmYXVsdChyYXdfaW5wdXQobXNnKSwgbmFtZSkKKyAgICAgICAgZmlsZW5hbWUgPSBkZWZhdWx0KGlucHV0KG1zZyksIG5hbWUpCiAKIAogZGVmIHJlcGxhY2VfZmlsZShyZXBsYWNlX3RoaXMsIHdpdGhfdGhpcyk6CkBAIC0xMjYzLDEzICsxMjYxLDEzIEBACiAgICAgICAgICAgICByZXR1cm4gTm9uZQogICAgICAgICBlbmQgPSBmaWxlbmFtZS5maW5kKENMT1NFX1RBRywgb3BlbnRhZ19zdGFydCkKICAgICAgICAgaWYgZW5kID09IC0xOgotICAgICAgICAgICAgcHJpbnQgIk5vIGNsb3NlIHRhZyBmb3VuZCBmb3Igb3BlbiB0YWcgaW4gZmlsZW5hbWUgJXMiICUgZmlsZW5hbWUKKyAgICAgICAgICAgIHByaW50KCJObyBjbG9zZSB0YWcgZm91bmQgZm9yIG9wZW4gdGFnIGluIGZpbGVuYW1lICVzIiAlIGZpbGVuYW1lKQogICAgICAgICAgICAgc3lzLmV4aXQoMSkKIAogICAgICAgICAjIHdlIGhhdmUgYSB7eyB0YWcgaS5lLiBjb2RlCiAgICAgICAgIHRhZyA9IGZpbGVuYW1lW29wZW50YWdfc3RhcnQgKyBsZW4oT1BFTl9UQUcpOmVuZF0uc3RyaXAoKQogICAgICAgICBpZiBub3QgdGFnLmxzdHJpcCgpLnN0YXJ0c3dpdGgoSUZfVEFHKToKLSAgICAgICAgICAgIHByaW50ICJPbmx5ICdpZicgdGFncyBhcmUgYWxsb3dlZCBpbiBmaWxlIG9yIGRpcmVjdG9yeSBuYW1lcywgZmlsZW5hbWU6ICVzIiAlIGZpbGVuYW1lCisgICAgICAgICAgICBwcmludCgiT25seSAnaWYnIHRhZ3MgYXJlIGFsbG93ZWQgaW4gZmlsZSBvciBkaXJlY3RvcnkgbmFtZXMsIGZpbGVuYW1lOiAlcyIgJSBmaWxlbmFtZSkKICAgICAgICAgICAgIHN5cy5leGl0KDEpCiAKICAgICAgICAgcmV0dXJuIENvZGVMaW5lKHRhZykKQEAgLTEyODYsNyArMTI4NCw3IEBACiAgICAgZGVmIF9faW5pdF9fKHNlbGYsIGNvZGVsaW5lKToKICAgICAgICAgSW5wdXRMaW5lLl9faW5pdF9fKHNlbGYsIHt9LCAiIiwgMCkKICAgICAgICAgc2VsZi5ncm91cCA9IFtdCi0gICAgICAgIHNlbGYucHJpbyA9IHN5cy5tYXhpbnQKKyAgICAgICAgc2VsZi5wcmlvID0gc3lzLm1heHNpemUKICAgICAgICAgc2VsZi5ncm91cC5hcHBlbmQoY29kZWxpbmUpCiAKICAgICBkZWYgYXBwZW5kKHNlbGYsIGxpbmUpOgpAQCAtMTM2NCw3ICsxMzYyLDcgQEAKICAgICAgICAgb2YgPSBvcGVuKCJic3BnZW4ub3V0IiwgInciKQogICAgICAgICBvZi53cml0ZShidWYpCiAgICAgICAgIG9mLmNsb3NlKCkKLSAgICBleGVjIGJ1ZgorICAgIGV4ZWMoYnVmKQogCiAKIGRlZiBnZW5fdGFyZ2V0KGZpbGVzLCBjb250ZXh0ID0gTm9uZSk6CkBAIC0xMzg3LDcgKzEzODUsNyBAQAogICAgIEdlbmVyYXRlIHVzZXItc3BlY2lmaWVkIGVudHJpZXMgZm9yIGlucHV0IHZhbHVlcyBpbnN0ZWFkIG9mCiAgICAgZ2VuZXJhdGluZyBpbnB1dCBwcm9tcHRzLgogICAgICIiIgotICAgIGZvciBuYW1lLCB2YWwgaW4gcHJvcGVydGllcy5pdGVyaXRlbXMoKToKKyAgICBmb3IgbmFtZSwgdmFsIGluIHByb3BlcnRpZXMuaXRlbXMoKToKICAgICAgICAgcHJvZ3JhbV9saW5lID0gbmFtZSArICIgPSBcIiIgKyB2YWwgKyAiXCIiCiAgICAgICAgIHByb2dyYW1fbGluZXMuYXBwZW5kKHByb2dyYW1fbGluZSkKIApAQCAtMTUxNSw3ICsxNTEzLDcgQEAKIAogICAgIGFyY2hlcyA9IG9zLmxpc3RkaXIoYXJjaF9wYXRoKQogICAgIGlmIGFyY2ggbm90IGluIGFyY2hlcyBvciBhcmNoID09ICJjb21tb24iOgotICAgICAgICBwcmludCAiSW52YWxpZCBrYXJjaCwgZXhpdGluZ1xuIgorICAgICAgICBwcmludCgiSW52YWxpZCBrYXJjaCwgZXhpdGluZ1xuIikKICAgICAgICAgc3lzLmV4aXQoMSkKIAogICAgIHRhcmdldCA9IG9zLnBhdGguam9pbihhcmNoX3BhdGgsIGFyY2gpCkBAIC0xNTQxLDcgKzE1MzksNyBAQAogICAgIGV4cGFuZF9jb21tb24gLSBib29sZWFuLCB1c2UgdGhlIGNvbnRlbnRzIG9mIChmb3IgYnNwIGxheWVycykgYXJjaC9jb21tb24KICAgICAiIiIKICAgICBpZiBvcy5wYXRoLmV4aXN0cyhsYXllcl9vdXRwdXRfZGlyKToKLSAgICAgICAgcHJpbnQgIlxubGF5ZXIgb3V0cHV0IGRpciBhbHJlYWR5IGV4aXN0cywgZXhpdGluZy4gKCVzKSIgJSBsYXllcl9vdXRwdXRfZGlyCisgICAgICAgIHByaW50KCJcbmxheWVyIG91dHB1dCBkaXIgYWxyZWFkeSBleGlzdHMsIGV4aXRpbmcuICglcykiICUgbGF5ZXJfb3V0cHV0X2RpcikKICAgICAgICAgc3lzLmV4aXQoMSkKIAogICAgIHByb3BlcnRpZXMgPSBOb25lCkBAIC0xNTQ5LDExICsxNTQ3LDEzIEBACiAgICAgaWYgcHJvcGVydGllc19maWxlOgogICAgICAgICB0cnk6CiAgICAgICAgICAgICBpbmZpbGUgPSBvcGVuKHByb3BlcnRpZXNfZmlsZSwgInIiKQorICAgICAgICAgICAgcHJvcGVydGllcyA9IGpzb24ubG9hZChpbmZpbGUpCiAgICAgICAgIGV4Y2VwdCBJT0Vycm9yOgotICAgICAgICAgICAgcHJpbnQgIkNvdWxkbid0IG9wZW4gcHJvcGVydGllcyBmaWxlICVzIGZvciByZWFkaW5nLCBleGl0aW5nIiAlIHByb3BlcnRpZXNfZmlsZQorICAgICAgICAgICAgcHJpbnQoIkNvdWxkbid0IG9wZW4gcHJvcGVydGllcyBmaWxlICVzIGZvciByZWFkaW5nLCBleGl0aW5nIiAlIHByb3BlcnRpZXNfZmlsZSkKICAgICAgICAgICAgIHN5cy5leGl0KDEpCi0KLSAgICAgICAgcHJvcGVydGllcyA9IGpzb24ubG9hZChpbmZpbGUpCisgICAgICAgIGV4Y2VwdCBWYWx1ZUVycm9yOgorICAgICAgICAgICAgcHJpbnQoIldyb25nIGZvcm1hdCBvbiBwcm9wZXJ0aWVzIGZpbGUgJXMsIGV4aXRpbmciICUgcHJvcGVydGllc19maWxlKQorICAgICAgICAgICAgc3lzLmV4aXQoMSkKIAogICAgIGlmIHByb3BlcnRpZXNfc3RyIGFuZCBub3QgcHJvcGVydGllczoKICAgICAgICAgcHJvcGVydGllcyA9IGpzb24ubG9hZHMocHJvcGVydGllc19zdHIpCkBAIC0xNTk3LDggKzE1OTcsOCBAQAogICAgICIiIgogICAgIHlvY3RvX2NvbW1vbl9jcmVhdGUobGF5ZXJfbmFtZSwgImxheWVyIiwgc2NyaXB0c19wYXRoLCBsYXllcl9vdXRwdXRfZGlyLCBjb2RlZHVtcCwgcHJvcGVydGllc19maWxlLCBwcm9wZXJ0aWVzLCBGYWxzZSkKIAotICAgIHByaW50ICJcbk5ldyBsYXllciBjcmVhdGVkIGluICVzLlxuIiAlIChsYXllcl9vdXRwdXRfZGlyKQotICAgIHByaW50ICJEb24ndCBmb3JnZXQgdG8gYWRkIGl0IHRvIHlvdXIgQkJMQVlFUlMgKGZvciBkZXRhaWxzIHNlZSAlcy9SRUFETUUpLiIgJSAobGF5ZXJfb3V0cHV0X2RpcikKKyAgICBwcmludCgiXG5OZXcgbGF5ZXIgY3JlYXRlZCBpbiAlcy5cbiIgJSBsYXllcl9vdXRwdXRfZGlyKQorICAgIHByaW50KCJEb24ndCBmb3JnZXQgdG8gYWRkIGl0IHRvIHlvdXIgQkJMQVlFUlMgKGZvciBkZXRhaWxzIHNlZSAlcy9SRUFETUUpLiIgJSBsYXllcl9vdXRwdXRfZGlyKQogCiAKIGRlZiB5b2N0b19ic3BfY3JlYXRlKG1hY2hpbmUsIGFyY2gsIHNjcmlwdHNfcGF0aCwgYnNwX291dHB1dF9kaXIsIGNvZGVkdW1wLCBwcm9wZXJ0aWVzX2ZpbGUsIHByb3BlcnRpZXM9Tm9uZSk6CkBAIC0xNjE2LDIxICsxNjE2LDIxIEBACiAgICAgIiIiCiAgICAgeW9jdG9fY29tbW9uX2NyZWF0ZShtYWNoaW5lLCBhcmNoLCBzY3JpcHRzX3BhdGgsIGJzcF9vdXRwdXRfZGlyLCBjb2RlZHVtcCwgcHJvcGVydGllc19maWxlLCBwcm9wZXJ0aWVzKQogCi0gICAgcHJpbnQgIlxuTmV3ICVzIEJTUCBjcmVhdGVkIGluICVzIiAlIChhcmNoLCBic3Bfb3V0cHV0X2RpcikKKyAgICBwcmludCgiXG5OZXcgJXMgQlNQIGNyZWF0ZWQgaW4gJXMiICUgKGFyY2gsIGJzcF9vdXRwdXRfZGlyKSkKIAogCiBkZWYgcHJpbnRfZGljdChpdGVtcywgaW5kZW50ID0gMCk6CiAgICAgIiIiCiAgICAgUHJpbnQgdGhlIHZhbHVlcyBpbiBhIHBvc3NpYmx5IG5lc3RlZCBkaWN0aW9uYXJ5LgogICAgICIiIgotICAgIGZvciBrZXksIHZhbCBpbiBpdGVtcy5pdGVyaXRlbXMoKToKLSAgICAgICAgcHJpbnQgIiAgICAiKmluZGVudCArICJcIiVzXCIgOiIgJSBrZXksCisgICAgZm9yIGtleSwgdmFsIGluIGl0ZW1zLml0ZW1zKCk6CisgICAgICAgIHByaW50KCIgICAgIippbmRlbnQgKyAiXCIlc1wiIDoiICUga2V5KQogICAgICAgICBpZiB0eXBlKHZhbCkgPT0gZGljdDoKLSAgICAgICAgICAgIHByaW50ICJ7IgorICAgICAgICAgICAgcHJpbnQoInsiKQogICAgICAgICAgICAgcHJpbnRfZGljdCh2YWwsIGluZGVudCArIDEpCi0gICAgICAgICAgICBwcmludCAiICAgICIqaW5kZW50ICsgIn0iCisgICAgICAgICAgICBwcmludCgiICAgICIqaW5kZW50ICsgIn0iKQogICAgICAgICBlbHNlOgotICAgICAgICAgICAgcHJpbnQgIiVzIiAlIHZhbAorICAgICAgICAgICAgcHJpbnQoIiVzIiAlIHZhbCkKIAogCiBkZWYgZ2V0X3Byb3BlcnRpZXMoaW5wdXRfbGluZXMpOgpAQCAtMTY4MSw3ICsxNjgxLDcgQEAKICAgICAgICAgdHJ5OgogICAgICAgICAgICAgb2YgPSBvcGVuKHByb3BlcnRpZXNfZmlsZSwgInciKQogICAgICAgICBleGNlcHQgSU9FcnJvcjoKLSAgICAgICAgICAgIHByaW50ICJDb3VsZG4ndCBvcGVuIHByb3BlcnRpZXMgZmlsZSAlcyBmb3Igd3JpdGluZywgZXhpdGluZyIgJSBwcm9wZXJ0aWVzX2ZpbGUKKyAgICAgICAgICAgIHByaW50KCJDb3VsZG4ndCBvcGVuIHByb3BlcnRpZXMgZmlsZSAlcyBmb3Igd3JpdGluZywgZXhpdGluZyIgJSBwcm9wZXJ0aWVzX2ZpbGUpCiAgICAgICAgICAgICBzeXMuZXhpdCgxKQogCiAgICAgICAgIGpzb24uZHVtcChwcm9wZXJ0aWVzLCBvZiwgaW5kZW50PTEpCkBAIC0xNzU1LDEwICsxNzU1LDEwIEBACiAgICAgIiIiCiAgICAgaWYgdHlwZSA9PSAiY2hvaWNlbGlzdCI6CiAgICAgICAgIGZvciB2YWx1ZSBpbiB2YWx1ZXNfbGlzdDoKLSAgICAgICAgICAgIHByaW50ICJbXCIlc1wiLCBcIiVzXCJdIiAlICh2YWx1ZVswXSwgdmFsdWVbMV0pCisgICAgICAgICAgICBwcmludCgiW1wiJXNcIiwgXCIlc1wiXSIgJSAodmFsdWVbMF0sIHZhbHVlWzFdKSkKICAgICBlbGlmIHR5cGUgPT0gImJvb2xlYW4iOgogICAgICAgICBmb3IgdmFsdWUgaW4gdmFsdWVzX2xpc3Q6Ci0gICAgICAgICAgICBwcmludCAiW1wiJXNcIiwgXCIlc1wiXSIgJSAodmFsdWVbMF0sIHZhbHVlWzFdKQorICAgICAgICAgICAgcHJpbnQoIltcIiVzXCIsIFwiJXNcIl0iICUgKHZhbHVlWzBdLCB2YWx1ZVsxXSkpCiAKIAogZGVmIHlvY3RvX2xheWVyX2xpc3RfcHJvcGVydHlfdmFsdWVzKGFyY2gsIHByb3BlcnR5LCBzY3JpcHRzX3BhdGgsIHByb3BlcnRpZXNfZmlsZSwgZXhwYW5kX2NvbW1vbj1UcnVlKToKQEAgLTE3ODksNyArMTc4OSw3IEBACiAKICAgICBpbnB1dF9saW5lID0gZmluZF9pbnB1dF9saW5lKHByb3BlcnR5LCBpbnB1dF9saW5lcykKICAgICBpZiBub3QgaW5wdXRfbGluZToKLSAgICAgICAgcHJpbnQgIkNvdWxkbid0IGZpbmQgdmFsdWVzIGZvciBwcm9wZXJ0eSAlcyIgJSBwcm9wZXJ0eQorICAgICAgICBwcmludCgiQ291bGRuJ3QgZmluZCB2YWx1ZXMgZm9yIHByb3BlcnR5ICVzIiAlIHByb3BlcnR5KQogICAgICAgICByZXR1cm4KIAogICAgIHZhbHVlc19saXN0ID0gW10KQEAgLTE4MTgsNyArMTgxOCw3IEBACiAgICAgICAgIHRyeToKICAgICAgICAgICAgIG9mID0gb3Blbihwcm9wZXJ0aWVzX2ZpbGUsICJ3IikKICAgICAgICAgZXhjZXB0IElPRXJyb3I6Ci0gICAgICAgICAgICBwcmludCAiQ291bGRuJ3Qgb3BlbiBwcm9wZXJ0aWVzIGZpbGUgJXMgZm9yIHdyaXRpbmcsIGV4aXRpbmciICUgcHJvcGVydGllc19maWxlCisgICAgICAgICAgICBwcmludCgiQ291bGRuJ3Qgb3BlbiBwcm9wZXJ0aWVzIGZpbGUgJXMgZm9yIHdyaXRpbmcsIGV4aXRpbmciICUgcHJvcGVydGllc19maWxlKQogICAgICAgICAgICAgc3lzLmV4aXQoMSkKIAogICAgICAgICBqc29uLmR1bXAodmFsdWVzX2xpc3QsIG9mKQpAQCAtMTgyNiw0NCArMTgyNiwyOCBAQAogICAgIHByaW50X3ZhbHVlcyh0eXBlLCB2YWx1ZXNfbGlzdCkKIAogCi1kZWYgeW9jdG9fYnNwX2xpc3QoYXJncywgc2NyaXB0c19wYXRoLCBwcm9wZXJ0aWVzX2ZpbGUpOgorZGVmIHlvY3RvX2JzcF9saXN0KGFyZ3MsIHNjcmlwdHNfcGF0aCk6CiAgICAgIiIiCiAgICAgUHJpbnQgYXZhaWxhYmxlIGFyY2hpdGVjdHVyZXMsIG9yIHRoZSBjb21wbGV0ZSBsaXN0IG9mIHByb3BlcnRpZXMKICAgICBkZWZpbmVkIGJ5IHRoZSBCU1AsIG9yIHRoZSBwb3NzaWJsZSB2YWx1ZXMgZm9yIGEgcGFydGljdWxhciBCU1AKICAgICBwcm9wZXJ0eS4KICAgICAiIiIKLSAgICBpZiBsZW4oYXJncykgPCAxOgotICAgICAgICByZXR1cm4gRmFsc2UKLQotICAgIGlmIGFyZ3NbMF0gPT0gImthcmNoIjoKKyAgICBpZiBhcmdzLmthcmNoID09ICJrYXJjaCI6CiAgICAgICAgIGxpYl9wYXRoID0gc2NyaXB0c19wYXRoICsgJy9saWInCiAgICAgICAgIGJzcF9wYXRoID0gbGliX3BhdGggKyAnL2JzcCcKICAgICAgICAgYXJjaF9wYXRoID0gYnNwX3BhdGggKyAnL3N1YnN0cmF0ZS90YXJnZXQvYXJjaCcKLSAgICAgICAgcHJpbnQgIkFyY2hpdGVjdHVyZXMgYXZhaWxhYmxlOiIKKyAgICAgICAgcHJpbnQoIkFyY2hpdGVjdHVyZXMgYXZhaWxhYmxlOiIpCiAgICAgICAgIGZvciBhcmNoIGluIG9zLmxpc3RkaXIoYXJjaF9wYXRoKToKICAgICAgICAgICAgIGlmIGFyY2ggPT0gImNvbW1vbiIgb3IgYXJjaCA9PSAibGF5ZXIiOgogICAgICAgICAgICAgICAgIGNvbnRpbnVlCi0gICAgICAgICAgICBwcmludCAiICAgICVzIiAlIGFyY2gKLSAgICAgICAgcmV0dXJuIFRydWUKLSAgICBlbHNlOgotICAgICAgICBhcmNoID0gYXJnc1swXQorICAgICAgICAgICAgcHJpbnQoIiAgICAlcyIgJSBhcmNoKQorICAgICAgICByZXR1cm4KIAotICAgIGlmIGxlbihhcmdzKSA8IDIgb3IgbGVuKGFyZ3MpID4gMzoKLSAgICAgICAgcmV0dXJuIEZhbHNlCisgICAgaWYgYXJncy5wcm9wZXJ0aWVzOgorICAgICAgICB5b2N0b19sYXllcl9saXN0X3Byb3BlcnRpZXMoYXJncy5rYXJjaCwgc2NyaXB0c19wYXRoLCBhcmdzLnByb3BlcnRpZXNfZmlsZSkKKyAgICBlbGlmIGFyZ3MucHJvcGVydHk6CisgICAgICAgIHlvY3RvX2xheWVyX2xpc3RfcHJvcGVydHlfdmFsdWVzKGFyZ3Mua2FyY2gsIGFyZ3MucHJvcGVydHksIHNjcmlwdHNfcGF0aCwgYXJncy5wcm9wZXJ0aWVzX2ZpbGUpCiAKLSAgICBpZiBsZW4oYXJncykgPT0gMjoKLSAgICAgICAgaWYgYXJnc1sxXSA9PSAicHJvcGVydGllcyI6Ci0gICAgICAgICAgICB5b2N0b19sYXllcl9saXN0X3Byb3BlcnRpZXMoYXJjaCwgc2NyaXB0c19wYXRoLCBwcm9wZXJ0aWVzX2ZpbGUpCi0gICAgICAgIGVsc2U6Ci0gICAgICAgICAgICByZXR1cm4gRmFsc2UKLQotICAgIGlmIGxlbihhcmdzKSA9PSAzOgotICAgICAgICBpZiBhcmdzWzFdID09ICJwcm9wZXJ0eSI6Ci0gICAgICAgICAgICB5b2N0b19sYXllcl9saXN0X3Byb3BlcnR5X3ZhbHVlcyhhcmNoLCBhcmdzWzJdLCBzY3JpcHRzX3BhdGgsIHByb3BlcnRpZXNfZmlsZSkKLSAgICAgICAgZWxzZToKLSAgICAgICAgICAgIHJldHVybiBGYWxzZQotCi0gICAgcmV0dXJuIFRydWUKIAogCiBkZWYgeW9jdG9fbGF5ZXJfbGlzdChhcmdzLCBzY3JpcHRzX3BhdGgsIHByb3BlcnRpZXNfZmlsZSk6CmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvYnNwL2hlbHAucHkgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvYnNwL2hlbHAucHkKaW5kZXggODVhMDlkZC4uNGYwZDc3MiAxMDA2NDQKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L3NjcmlwdHMvbGliL2JzcC9oZWxwLnB5CisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9ic3AvaGVscC5weQpAQCAtNDIsNyArNDIsNyBAQAogCiAgICAgaGVscCA9IHN1YmNvbW1hbmRzLmdldChzdWJjb21tYW5kLCBzdWJjb21tYW5kX2Vycm9yKVsyXQogICAgIHBhZ2VyID0gc3VicHJvY2Vzcy5Qb3BlbignbGVzcycsIHN0ZGluPXN1YnByb2Nlc3MuUElQRSkKLSAgICBwYWdlci5jb21tdW5pY2F0ZShoZWxwKQorICAgIHBhZ2VyLmNvbW11bmljYXRlKGJ5dGVzKGhlbHAsICdVVEYtOCcpKQogCiAgICAgcmV0dXJuIFRydWUKIApAQCAtMTgzLDkgKzE4Myw5IEBACiB5b2N0b19ic3BfbGlzdF91c2FnZSA9ICIiIgogCiAgdXNhZ2U6IHlvY3RvLWJzcCBsaXN0IGthcmNoCi0gICAgICAgIHlvY3RvLWJzcCBsaXN0IDxrYXJjaD4gcHJvcGVydGllcworICAgICAgICB5b2N0by1ic3AgbGlzdCA8a2FyY2g+IC0tcHJvcGVydGllcwogICAgICAgICAgICAgICAgIFstbyA8SlNPTiBQUk9QRVJUWSBGSUxFPiB8IC0tb3V0ZmlsZSA8SlNPTiBQUk9QRVJUWV9GSUxFPl0KLSAgICAgICAgeW9jdG8tYnNwIGxpc3QgPGthcmNoPiBwcm9wZXJ0eSA8eHh4PgorICAgICAgICB5b2N0by1ic3AgbGlzdCA8a2FyY2g+IC0tcHJvcGVydHkgPHh4eD4KICAgICAgICAgICAgICAgICBbLW8gPEpTT04gUFJPUEVSVFkgRklMRT4gfCAtLW91dGZpbGUgPEpTT04gUFJPUEVSVFlfRklMRT5dCiAKICBUaGlzIGNvbW1hbmQgZW51bWVyYXRlcyB0aGUgY29tcGxldGUgc2V0IG9mIHBvc3NpYmxlIHZhbHVlcyBmb3IgYQpAQCAtMjEzLDkgKzIxMyw5IEBACiAKIFNZTk9QU0lTCiAgICAgeW9jdG8tYnNwIGxpc3Qga2FyY2gKLSAgICB5b2N0by1ic3AgbGlzdCA8a2FyY2g+IHByb3BlcnRpZXMKKyAgICB5b2N0by1ic3AgbGlzdCA8a2FyY2g+IC0tcHJvcGVydGllcwogICAgICAgICAgICAgWy0tbyA8SlNPTiBQUk9QRVJUWSBGSUxFPiB8IC1vdXRmaWxlIDxKU09OIFBST1BFUlRZX0ZJTEU+XQotICAgIHlvY3RvLWJzcCBsaXN0IDxrYXJjaD4gcHJvcGVydHkgPHh4eD4KKyAgICB5b2N0by1ic3AgbGlzdCA8a2FyY2g+IC0tcHJvcGVydHkgPHh4eD4KICAgICAgICAgICAgIFstLW8gPEpTT04gUFJPUEVSVFkgRklMRT4gfCAtb3V0ZmlsZSA8SlNPTiBQUk9QRVJUWV9GSUxFPl0KIAogREVTQ1JJUFRJT04KQEAgLTI0Niw5ICsyNDYsOSBAQAogICAgIG9iamVjdCB3aWxsIGNvbnNpc3Qgb2YgdGhlIHNldCBvZiBuYW1lOnZhbHVlIHBhaXJzIGNvcnJlc3BvbmRpbmcKICAgICB0byB0aGUgKHBvc3NpYmx5IG5lc3RlZCkgZGljdGlvbmFyeSBvZiBwcm9wZXJ0aWVzIGRlZmluZWQgYnkgdGhlCiAgICAgaW5wdXQgc3RhdGVtZW50cyB1c2VkIGJ5IHRoZSBCU1AuICBTb21lIGV4YW1wbGUgb3V0cHV0IGZvciB0aGUKLSAgICAnbGlzdCBwcm9wZXJ0aWVzJyBjb21tYW5kOgorICAgICdsaXN0IC0tcHJvcGVydGllcycgY29tbWFuZDoKIAotICAgICQgeW9jdG8tYnNwIGxpc3QgYXJtIHByb3BlcnRpZXMKKyAgICAkIHlvY3RvLWJzcCBsaXN0IGFybSAtLXByb3BlcnRpZXMKICAgICAidG91Y2hzY3JlZW4iIDogewogICAgICAgICAibXNnIiA6IERvZXMgeW91ciBCU1AgaGF2ZSBhIHRvdWNoc2NyZWVuPyAoeS9OKQogICAgICAgICAiZGVmYXVsdCIgOiBuCkBAIC0zMTAsMTEgKzMxMCwxMSBAQAogICAgIG5hbWU6dmFsdWUgcGFpcnMgY29ycmVzcG9uZGluZyB0byB0aGUgYXJyYXkgb2YgcHJvcGVydHkgdmFsdWVzCiAgICAgYXNzb2NpYXRlZCB3aXRoIHRoZSBwcm9wZXJ0eS4KIAotICAgICQgeW9jdG8tYnNwIGxpc3QgaTM4NiBwcm9wZXJ0eSB4c2VydmVyX2Nob2ljZQorICAgICQgeW9jdG8tYnNwIGxpc3QgaTM4NiAtLXByb3BlcnR5IHhzZXJ2ZXJfY2hvaWNlCiAgICAgICAgIFsieHNlcnZlcl92ZXNhIiwgIlZFU0EgeHNlcnZlciBzdXBwb3J0Il0KICAgICAgICAgWyJ4c2VydmVyX2k5MTUiLCAiaTkxNSB4c2VydmVyIHN1cHBvcnQiXQogCi0gICAgJCB5b2N0by1ic3AgbGlzdCBhcm0gcHJvcGVydHkgYmFzZV9rYnJhbmNoX2xpbnV4X3lvY3RvXzNfMAorICAgICQgeW9jdG8tYnNwIGxpc3QgYXJtIC0tcHJvcGVydHkgYmFzZV9rYnJhbmNoX2xpbnV4X3lvY3RvXzNfMAogICAgICAgICBHZXR0aW5nIGJyYW5jaGVzIGZyb20gcmVtb3RlIHJlcG8gZ2l0Oi8vZ2l0LnlvY3RvcHJvamVjdC5vcmcvbGludXgteW9jdG8tMy4wLi4uCiAgICAgICAgIFsieW9jdG8vYmFzZSIsICJ5b2N0by9iYXNlIl0KICAgICAgICAgWyJ5b2N0by9lZzIwdCIsICJ5b2N0by9lZzIwdCJdCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvYnNwL2tlcm5lbC5weSBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9ic3Ava2VybmVsLnB5CmluZGV4IGJhNjhiNjAuLmEzZWUzMjUgMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9ic3Ava2VybmVsLnB5CisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9ic3Ava2VybmVsLnB5CkBAIC0yOSwxMSArMjksMTAgQEAKIGltcG9ydCBzeXMKIGltcG9ydCBvcwogaW1wb3J0IHNodXRpbAotZnJvbSB0YWdzIGltcG9ydCAqCitmcm9tIC50YWdzIGltcG9ydCAqCiBpbXBvcnQgZ2xvYgogaW1wb3J0IHN1YnByb2Nlc3MKLWZyb20gZW5naW5lIGltcG9ydCBjcmVhdGVfY29udGV4dAotCitmcm9tIC5lbmdpbmUgaW1wb3J0IGNyZWF0ZV9jb250ZXh0CiAKIGRlZiBmaW5kX2JibGF5ZXJzKCk6CiAgICAgIiIiCkBAIC00Miw3ICs0MSw3IEBACiAgICAgdHJ5OgogICAgICAgICBidWlsZGRpciA9IG9zLmVudmlyb25bIkJVSUxERElSIl0KICAgICBleGNlcHQgS2V5RXJyb3I6Ci0gICAgICAgIHByaW50ICJCVUlMRERJUiBub3QgZm91bmQsIGV4aXRpbmcuIChEaWQgeW91IGZvcmdldCB0byBzb3VyY2Ugb2UtaW5pdC1idWlsZC1lbnY/KSIKKyAgICAgICAgcHJpbnQoIkJVSUxERElSIG5vdCBmb3VuZCwgZXhpdGluZy4gKERpZCB5b3UgZm9yZ2V0IHRvIHNvdXJjZSBvZS1pbml0LWJ1aWxkLWVudj8pIikKICAgICAgICAgc3lzLmV4aXQoMSkKICAgICBiYmxheWVyc19jb25mID0gb3MucGF0aC5qb2luKGJ1aWxkZGlyLCAiY29uZi9iYmxheWVycy5jb25mIikKIApAQCAtNTAsMTAgKzQ5LDEwIEBACiAKICAgICBiaXRiYWtlX2Vudl9jbWQgPSAiYml0YmFrZSAtZSIKICAgICBiaXRiYWtlX2Vudl9saW5lcyA9IHN1YnByb2Nlc3MuUG9wZW4oYml0YmFrZV9lbnZfY21kLCBzaGVsbD1UcnVlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGRvdXQ9c3VicHJvY2Vzcy5QSVBFKS5zdGRvdXQucmVhZCgpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZG91dD1zdWJwcm9jZXNzLlBJUEUpLnN0ZG91dC5yZWFkKCkuZGVjb2RlKCd1dGYtOCcpCiAKICAgICBpZiBub3QgYml0YmFrZV9lbnZfbGluZXM6Ci0gICAgICAgIHByaW50ICJDb3VsZG4ndCBnZXQgJyVzJyBvdXRwdXQsIGV4aXRpbmcuIiAlIGJpdGJha2VfZW52X2NtZAorICAgICAgICBwcmludCgiQ291bGRuJ3QgZ2V0ICclcycgb3V0cHV0LCBleGl0aW5nLiIgJSBiaXRiYWtlX2Vudl9jbWQpCiAgICAgICAgIHN5cy5leGl0KDEpCiAKICAgICBmb3IgbGluZSBpbiBiaXRiYWtlX2Vudl9saW5lcy5zcGxpdCgnXG4nKToKQEAgLTYyLDggKzYxLDcgQEAKICAgICAgICAgICAgIGJyZWFrCiAKICAgICBpZiBub3QgYmJsYXllcnM6Ci0gICAgICAgIHByaW50ICJDb3VsZG4ndCBmaW5kIEJCTEFZRVJTIGluICVzIG91dHB1dCwgZXhpdGluZy4iICUgXAotICAgICAgICAgICAgYml0YmFrZV9lbnZfY21kCisgICAgICAgIHByaW50KCJDb3VsZG4ndCBmaW5kIEJCTEFZRVJTIGluICVzIG91dHB1dCwgZXhpdGluZy4iICUgYml0YmFrZV9lbnZfY21kKQogICAgICAgICBzeXMuZXhpdCgxKQogCiAgICAgcmF3X2xheWVycyA9IGJibGF5ZXJzLnNwbGl0KCkKQEAgLTExMCw4ICsxMDgsOCBAQAogICAgICAgICBpZiBsYXllci5lbmRzd2l0aChtYWNoaW5lKToKICAgICAgICAgICAgIHJldHVybiBsYXllcgogCi0gICAgcHJpbnQgIlVuYWJsZSB0byBmaW5kIHRoZSBCU1AgbGF5ZXIgZm9yIG1hY2hpbmUgJXMuIiAlIG1hY2hpbmUKLSAgICBwcmludCAiUGxlYXNlIG1ha2Ugc3VyZSBpdCBpcyBsaXN0ZWQgaW4gYmJsYXllcnMuY29uZiIKKyAgICBwcmludCgiVW5hYmxlIHRvIGZpbmQgdGhlIEJTUCBsYXllciBmb3IgbWFjaGluZSAlcy4iICUgbWFjaGluZSkKKyAgICBwcmludCgiUGxlYXNlIG1ha2Ugc3VyZSBpdCBpcyBsaXN0ZWQgaW4gYmJsYXllcnMuY29uZiIpCiAgICAgc3lzLmV4aXQoMSkKIAogCkBAIC0xOTAsOCArMTg4LDggQEAKICAgICAiIiIKICAgICBjb25maWdfaXRlbXMgPSByZWFkX2NvbmZpZ19pdGVtcyhzY3JpcHRzX3BhdGgsIG1hY2hpbmUpCiAKLSAgICBwcmludCAiVGhlIGN1cnJlbnQgc2V0IG9mIG1hY2hpbmUtc3BlY2lmaWMga2VybmVsIGNvbmZpZyBpdGVtcyBmb3IgJXMgaXM6IiAlIG1hY2hpbmUKLSAgICBwcmludCBnZW5fY2hvaWNlc19zdHIoY29uZmlnX2l0ZW1zKQorICAgIHByaW50KCJUaGUgY3VycmVudCBzZXQgb2YgbWFjaGluZS1zcGVjaWZpYyBrZXJuZWwgY29uZmlnIGl0ZW1zIGZvciAlcyBpczoiICUgbWFjaGluZSkKKyAgICBwcmludChnZW5fY2hvaWNlc19zdHIoY29uZmlnX2l0ZW1zKSkKIAogCiBkZWYgeW9jdG9fa2VybmVsX2NvbmZpZ19ybShzY3JpcHRzX3BhdGgsIG1hY2hpbmUpOgpAQCAtMjAyLDkgKzIwMCw5IEBACiAgICAgIiIiCiAgICAgY29uZmlnX2l0ZW1zID0gcmVhZF9jb25maWdfaXRlbXMoc2NyaXB0c19wYXRoLCBtYWNoaW5lKQogCi0gICAgcHJpbnQgIlNwZWNpZnkgdGhlIGtlcm5lbCBjb25maWcgaXRlbXMgdG8gcmVtb3ZlOiIKLSAgICBpbnB1dCA9IHJhd19pbnB1dChnZW5fY2hvaWNlc19zdHIoY29uZmlnX2l0ZW1zKSkKLSAgICBybV9jaG9pY2VzID0gaW5wdXQuc3BsaXQoKQorICAgIHByaW50KCJTcGVjaWZ5IHRoZSBrZXJuZWwgY29uZmlnIGl0ZW1zIHRvIHJlbW92ZToiKQorICAgIGlucCA9IGlucHV0KGdlbl9jaG9pY2VzX3N0cihjb25maWdfaXRlbXMpKQorICAgIHJtX2Nob2ljZXMgPSBpbnAuc3BsaXQoKQogICAgIHJtX2Nob2ljZXMuc29ydCgpCiAKICAgICByZW1vdmVkID0gW10KQEAgLTIxMywxOCArMjExLDE4IEBACiAgICAgICAgIHRyeToKICAgICAgICAgICAgIGlkeCA9IGludChjaG9pY2UpIC0gMQogICAgICAgICBleGNlcHQgVmFsdWVFcnJvcjoKLSAgICAgICAgICAgIHByaW50ICJJbnZhbGlkIGNob2ljZSAoJXMpLCBleGl0aW5nIiAlIGNob2ljZQorICAgICAgICAgICAgcHJpbnQoIkludmFsaWQgY2hvaWNlICglcyksIGV4aXRpbmciICUgY2hvaWNlKQogICAgICAgICAgICAgc3lzLmV4aXQoMSkKICAgICAgICAgaWYgaWR4IDwgMCBvciBpZHggPj0gbGVuKGNvbmZpZ19pdGVtcyk6Ci0gICAgICAgICAgICBwcmludCAiSW52YWxpZCBjaG9pY2UgKCVkKSwgZXhpdGluZyIgJSAoaWR4ICsgMSkKKyAgICAgICAgICAgIHByaW50KCJJbnZhbGlkIGNob2ljZSAoJWQpLCBleGl0aW5nIiAlIChpZHggKyAxKSkKICAgICAgICAgICAgIHN5cy5leGl0KDEpCiAgICAgICAgIHJlbW92ZWQuYXBwZW5kKGNvbmZpZ19pdGVtcy5wb3AoaWR4KSkKIAogICAgIHdyaXRlX2NvbmZpZ19pdGVtcyhzY3JpcHRzX3BhdGgsIG1hY2hpbmUsIGNvbmZpZ19pdGVtcykKIAotICAgIHByaW50ICJSZW1vdmVkIGl0ZW1zOiIKKyAgICBwcmludCgiUmVtb3ZlZCBpdGVtczoiKQogICAgIGZvciByIGluIHJlbW92ZWQ6Ci0gICAgICAgIHByaW50ICJcdCVzIiAlIHIKKyAgICAgICAgcHJpbnQoIlx0JXMiICUgcikKIAogCiBkZWYgeW9jdG9fa2VybmVsX2NvbmZpZ19hZGQoc2NyaXB0c19wYXRoLCBtYWNoaW5lLCBjb25maWdfaXRlbXMpOgpAQCAtMjM5LDcgKzIzNyw3IEBACiAKICAgICBmb3IgaXRlbSBpbiBjb25maWdfaXRlbXM6CiAgICAgICAgIGlmIG5vdCBpdGVtLnN0YXJ0c3dpdGgoIkNPTkZJRyIpIG9yIChub3QgIj15IiBpbiBpdGVtIGFuZCBub3QgIj1tIiBpbiBpdGVtKToKLSAgICAgICAgICAgIHByaW50ICJJbnZhbGlkIGNvbmZpZyBpdGVtICglcyksIGV4aXRpbmciICUgaXRlbQorICAgICAgICAgICAgcHJpbnQoIkludmFsaWQgY29uZmlnIGl0ZW0gKCVzKSwgZXhpdGluZyIgJSBpdGVtKQogICAgICAgICAgICAgc3lzLmV4aXQoMSkKICAgICAgICAgaWYgaXRlbSBub3QgaW4gY3VyX2l0ZW1zIGFuZCBpdGVtIG5vdCBpbiBuZXdfaXRlbXM6CiAgICAgICAgICAgICBuZXdfaXRlbXMuYXBwZW5kKGl0ZW0pCkBAIC0yNDksMTYgKzI0NywxNiBAQAogICAgIGlmIGxlbihuZXdfaXRlbXMpID4gMDoKICAgICAgICAgY3VyX2l0ZW1zLmV4dGVuZChuZXdfaXRlbXMpCiAgICAgICAgIHdyaXRlX2NvbmZpZ19pdGVtcyhzY3JpcHRzX3BhdGgsIG1hY2hpbmUsIGN1cl9pdGVtcykKLSAgICAgICAgcHJpbnQgIkFkZGVkIGl0ZW0lczoiICUgKCIiIGlmIGxlbihuZXdfaXRlbXMpPT0xIGVsc2UgInMiKQorICAgICAgICBwcmludCgiQWRkZWQgaXRlbSVzOiIgJSAoIiIgaWYgbGVuKG5ld19pdGVtcyk9PTEgZWxzZSAicyIpKQogICAgICAgICBmb3IgbiBpbiBuZXdfaXRlbXM6Ci0gICAgICAgICAgICBwcmludCAiXHQlcyIgJSBuCisgICAgICAgICAgICBwcmludCgiXHQlcyIgJSBuKQogCiAgICAgaWYgbGVuKGR1cF9pdGVtcykgPiAwOgogICAgICAgICBvdXRwdXQ9IlRoZSBmb2xsb3dpbmcgaXRlbSVzIGFscmVhZHkgZXhpc3QlcyBpbiB0aGUgY3VycmVudCBjb25maWd1cmF0aW9uLCBpZ25vcmluZyAlczoiICUgXAogICAgICAgICAgICAgKCgiIiwicyIsICJpdCIpIGlmIGxlbihkdXBfaXRlbXMpPT0xIGVsc2UgKCJzIiwgIiIsICJ0aGVtIiApKQotICAgICAgICBwcmludCBvdXRwdXQKKyAgICAgICAgcHJpbnQob3V0cHV0KQogICAgICAgICBmb3IgbiBpbiBkdXBfaXRlbXM6Ci0gICAgICAgICAgICBwcmludCAiXHQlcyIgJSBuCisgICAgICAgICAgICBwcmludCgiXHQlcyIgJSBuKQogCiBkZWYgZmluZF9jdXJyZW50X2tlcm5lbChic3BfbGF5ZXIsIG1hY2hpbmUpOgogICAgICIiIgpAQCAtMzQ3LDggKzM0NSw4IEBACiAgICAgIiIiCiAgICAgcGF0Y2hlcyA9IHJlYWRfcGF0Y2hfaXRlbXMoc2NyaXB0c19wYXRoLCBtYWNoaW5lKQogCi0gICAgcHJpbnQgIlRoZSBjdXJyZW50IHNldCBvZiBtYWNoaW5lLXNwZWNpZmljIHBhdGNoZXMgZm9yICVzIGlzOiIgJSBtYWNoaW5lCi0gICAgcHJpbnQgZ2VuX2Nob2ljZXNfc3RyKHBhdGNoZXMpCisgICAgcHJpbnQoIlRoZSBjdXJyZW50IHNldCBvZiBtYWNoaW5lLXNwZWNpZmljIHBhdGNoZXMgZm9yICVzIGlzOiIgJSBtYWNoaW5lKQorICAgIHByaW50KGdlbl9jaG9pY2VzX3N0cihwYXRjaGVzKSkKIAogCiBkZWYgeW9jdG9fa2VybmVsX3BhdGNoX3JtKHNjcmlwdHNfcGF0aCwgbWFjaGluZSk6CkBAIC0zNTgsMjYgKzM1NiwyNiBAQAogICAgICIiIgogICAgIHBhdGNoZXMgPSByZWFkX3BhdGNoX2l0ZW1zKHNjcmlwdHNfcGF0aCwgbWFjaGluZSkKIAotICAgIHByaW50ICJTcGVjaWZ5IHRoZSBwYXRjaGVzIHRvIHJlbW92ZToiCi0gICAgaW5wdXQgPSByYXdfaW5wdXQoZ2VuX2Nob2ljZXNfc3RyKHBhdGNoZXMpKQotICAgIHJtX2Nob2ljZXMgPSBpbnB1dC5zcGxpdCgpCisgICAgcHJpbnQoIlNwZWNpZnkgdGhlIHBhdGNoZXMgdG8gcmVtb3ZlOiIpCisgICAgaW5wID0gaW5wdXQoZ2VuX2Nob2ljZXNfc3RyKHBhdGNoZXMpKQorICAgIHJtX2Nob2ljZXMgPSBpbnAuc3BsaXQoKQogICAgIHJtX2Nob2ljZXMuc29ydCgpCiAKICAgICByZW1vdmVkID0gW10KIAogICAgIGZpbGVzZGlyID0gZmluZF9maWxlc2RpcihzY3JpcHRzX3BhdGgsIG1hY2hpbmUpCiAgICAgaWYgbm90IGZpbGVzZGlyOgotICAgICAgICBwcmludCAiQ291bGRuJ3Qgcm0gcGF0Y2goZXMpIHNpbmNlIHdlIGNvdWxkbid0IGZpbmQgYSAnZmlsZXMnIGRpciIKKyAgICAgICAgcHJpbnQoIkNvdWxkbid0IHJtIHBhdGNoKGVzKSBzaW5jZSB3ZSBjb3VsZG4ndCBmaW5kIGEgJ2ZpbGVzJyBkaXIiKQogICAgICAgICBzeXMuZXhpdCgxKQogCiAgICAgZm9yIGNob2ljZSBpbiByZXZlcnNlZChybV9jaG9pY2VzKToKICAgICAgICAgdHJ5OgogICAgICAgICAgICAgaWR4ID0gaW50KGNob2ljZSkgLSAxCiAgICAgICAgIGV4Y2VwdCBWYWx1ZUVycm9yOgotICAgICAgICAgICAgcHJpbnQgIkludmFsaWQgY2hvaWNlICglcyksIGV4aXRpbmciICUgY2hvaWNlCisgICAgICAgICAgICBwcmludCgiSW52YWxpZCBjaG9pY2UgKCVzKSwgZXhpdGluZyIgJSBjaG9pY2UpCiAgICAgICAgICAgICBzeXMuZXhpdCgxKQogICAgICAgICBpZiBpZHggPCAwIG9yIGlkeCA+PSBsZW4ocGF0Y2hlcyk6Ci0gICAgICAgICAgICBwcmludCAiSW52YWxpZCBjaG9pY2UgKCVkKSwgZXhpdGluZyIgJSAoaWR4ICsgMSkKKyAgICAgICAgICAgIHByaW50KCJJbnZhbGlkIGNob2ljZSAoJWQpLCBleGl0aW5nIiAlIChpZHggKyAxKSkKICAgICAgICAgICAgIHN5cy5leGl0KDEpCiAgICAgICAgIGZpbGVzZGlyX3BhdGNoID0gb3MucGF0aC5qb2luKGZpbGVzZGlyLCBwYXRjaGVzW2lkeF0pCiAgICAgICAgIGlmIG9zLnBhdGguaXNmaWxlKGZpbGVzZGlyX3BhdGNoKToKQEAgLTM4Nyw5ICszODUsOSBAQAogCiAgICAgd3JpdGVfcGF0Y2hfaXRlbXMoc2NyaXB0c19wYXRoLCBtYWNoaW5lLCBwYXRjaGVzKQogCi0gICAgcHJpbnQgIlJlbW92ZWQgcGF0Y2hlczoiCisgICAgcHJpbnQoIlJlbW92ZWQgcGF0Y2hlczoiKQogICAgIGZvciByIGluIHJlbW92ZWQ6Ci0gICAgICAgIHByaW50ICJcdCVzIiAlIHIKKyAgICAgICAgcHJpbnQoIlx0JXMiICUgcikKIAogCiBkZWYgeW9jdG9fa2VybmVsX3BhdGNoX2FkZChzY3JpcHRzX3BhdGgsIG1hY2hpbmUsIHBhdGNoZXMpOgpAQCAtNDAxLDE5ICszOTksMTkgQEAKIAogICAgIGZvciBwYXRjaCBpbiBwYXRjaGVzOgogICAgICAgICBpZiBvcy5wYXRoLmJhc2VuYW1lKHBhdGNoKSBpbiBleGlzdGluZ19wYXRjaGVzOgotICAgICAgICAgICAgcHJpbnQgIkNvdWxkbid0IGFkZCBwYXRjaCAoJXMpIHNpbmNlIGl0J3MgYWxyZWFkeSBiZWVuIGFkZGVkIiAlIG9zLnBhdGguYmFzZW5hbWUocGF0Y2gpCisgICAgICAgICAgICBwcmludCgiQ291bGRuJ3QgYWRkIHBhdGNoICglcykgc2luY2UgaXQncyBhbHJlYWR5IGJlZW4gYWRkZWQiICUgb3MucGF0aC5iYXNlbmFtZShwYXRjaCkpCiAgICAgICAgICAgICBzeXMuZXhpdCgxKQogCiAgICAgZmlsZXNkaXIgPSBmaW5kX2ZpbGVzZGlyKHNjcmlwdHNfcGF0aCwgbWFjaGluZSkKICAgICBpZiBub3QgZmlsZXNkaXI6Ci0gICAgICAgIHByaW50ICJDb3VsZG4ndCBhZGQgcGF0Y2ggKCVzKSBzaW5jZSB3ZSBjb3VsZG4ndCBmaW5kIGEgJ2ZpbGVzJyBkaXIgdG8gYWRkIGl0IHRvIiAlIG9zLnBhdGguYmFzZW5hbWUocGF0Y2gpCisgICAgICAgIHByaW50KCJDb3VsZG4ndCBhZGQgcGF0Y2ggKCVzKSBzaW5jZSB3ZSBjb3VsZG4ndCBmaW5kIGEgJ2ZpbGVzJyBkaXIgdG8gYWRkIGl0IHRvIiAlIG9zLnBhdGguYmFzZW5hbWUocGF0Y2gpKQogICAgICAgICBzeXMuZXhpdCgxKQogCiAgICAgbmV3X3BhdGNoZXMgPSBbXQogCiAgICAgZm9yIHBhdGNoIGluIHBhdGNoZXM6CiAgICAgICAgIGlmIG5vdCBvcy5wYXRoLmlzZmlsZShwYXRjaCk6Ci0gICAgICAgICAgICBwcmludCAiQ291bGRuJ3QgZmluZCBwYXRjaCAoJXMpLCBleGl0aW5nIiAlIHBhdGNoCisgICAgICAgICAgICBwcmludCgiQ291bGRuJ3QgZmluZCBwYXRjaCAoJXMpLCBleGl0aW5nIiAlIHBhdGNoKQogICAgICAgICAgICAgc3lzLmV4aXQoMSkKICAgICAgICAgYmFzZW5hbWUgPSBvcy5wYXRoLmJhc2VuYW1lKHBhdGNoKQogICAgICAgICBmaWxlc2Rpcl9wYXRjaCA9IG9zLnBhdGguam9pbihmaWxlc2RpciwgYmFzZW5hbWUpCkBAIC00MjQsOSArNDIyLDkgQEAKICAgICBjdXJfaXRlbXMuZXh0ZW5kKG5ld19wYXRjaGVzKQogICAgIHdyaXRlX3BhdGNoX2l0ZW1zKHNjcmlwdHNfcGF0aCwgbWFjaGluZSwgY3VyX2l0ZW1zKQogCi0gICAgcHJpbnQgIkFkZGVkIHBhdGNoZXM6IgorICAgIHByaW50KCJBZGRlZCBwYXRjaGVzOiIpCiAgICAgZm9yIG4gaW4gbmV3X3BhdGNoZXM6Ci0gICAgICAgIHByaW50ICJcdCVzIiAlIG4KKyAgICAgICAgcHJpbnQoIlx0JXMiICUgbikKIAogCiBkZWYgaW5jX3ByKGxpbmUpOgpAQCAtNDYxLDcgKzQ1OSw3IEBACiAKICAgICBrZXJuZWwgPSBmaW5kX2N1cnJlbnRfa2VybmVsKGxheWVyLCBtYWNoaW5lKQogICAgIGlmIG5vdCBrZXJuZWw6Ci0gICAgICAgIHByaW50ICJDb3VsZG4ndCBkZXRlcm1pbmUgdGhlIGtlcm5lbCBmb3IgdGhpcyBCU1AsIGV4aXRpbmcuIgorICAgICAgICBwcmludCgiQ291bGRuJ3QgZGV0ZXJtaW5lIHRoZSBrZXJuZWwgZm9yIHRoaXMgQlNQLCBleGl0aW5nLiIpCiAgICAgICAgIHN5cy5leGl0KDEpCiAKICAgICBrZXJuZWxfYmJmaWxlID0gb3MucGF0aC5qb2luKGxheWVyLCAicmVjaXBlcy1rZXJuZWwvbGludXgvIiArIGtlcm5lbCArICIuYmJhcHBlbmQiKQpAQCAtNTk3LDggKzU5NSw4IEBACiAgICAgIiIiCiAgICAgZmVhdHVyZXMgPSByZWFkX2ZlYXR1cmVzKHNjcmlwdHNfcGF0aCwgbWFjaGluZSkKIAotICAgIHByaW50ICJUaGUgY3VycmVudCBzZXQgb2YgbWFjaGluZS1zcGVjaWZpYyBmZWF0dXJlcyBmb3IgJXMgaXM6IiAlIG1hY2hpbmUKLSAgICBwcmludCBnZW5fY2hvaWNlc19zdHIoZmVhdHVyZXMpCisgICAgcHJpbnQoIlRoZSBjdXJyZW50IHNldCBvZiBtYWNoaW5lLXNwZWNpZmljIGZlYXR1cmVzIGZvciAlcyBpczoiICUgbWFjaGluZSkKKyAgICBwcmludChnZW5fY2hvaWNlc19zdHIoZmVhdHVyZXMpKQogCiAKIGRlZiB5b2N0b19rZXJuZWxfZmVhdHVyZV9ybShzY3JpcHRzX3BhdGgsIG1hY2hpbmUpOgpAQCAtNjA5LDkgKzYwNyw5IEBACiAgICAgIiIiCiAgICAgZmVhdHVyZXMgPSByZWFkX2ZlYXR1cmVzKHNjcmlwdHNfcGF0aCwgbWFjaGluZSkKIAotICAgIHByaW50ICJTcGVjaWZ5IHRoZSBmZWF0dXJlcyB0byByZW1vdmU6IgotICAgIGlucHV0ID0gcmF3X2lucHV0KGdlbl9jaG9pY2VzX3N0cihmZWF0dXJlcykpCi0gICAgcm1fY2hvaWNlcyA9IGlucHV0LnNwbGl0KCkKKyAgICBwcmludCgiU3BlY2lmeSB0aGUgZmVhdHVyZXMgdG8gcmVtb3ZlOiIpCisgICAgaW5wID0gaW5wdXQoZ2VuX2Nob2ljZXNfc3RyKGZlYXR1cmVzKSkKKyAgICBybV9jaG9pY2VzID0gaW5wLnNwbGl0KCkKICAgICBybV9jaG9pY2VzLnNvcnQoKQogCiAgICAgcmVtb3ZlZCA9IFtdCkBAIC02MjAsMTggKzYxOCwxOCBAQAogICAgICAgICB0cnk6CiAgICAgICAgICAgICBpZHggPSBpbnQoY2hvaWNlKSAtIDEKICAgICAgICAgZXhjZXB0IFZhbHVlRXJyb3I6Ci0gICAgICAgICAgICBwcmludCAiSW52YWxpZCBjaG9pY2UgKCVzKSwgZXhpdGluZyIgJSBjaG9pY2UKKyAgICAgICAgICAgIHByaW50KCJJbnZhbGlkIGNob2ljZSAoJXMpLCBleGl0aW5nIiAlIGNob2ljZSkKICAgICAgICAgICAgIHN5cy5leGl0KDEpCiAgICAgICAgIGlmIGlkeCA8IDAgb3IgaWR4ID49IGxlbihmZWF0dXJlcyk6Ci0gICAgICAgICAgICBwcmludCAiSW52YWxpZCBjaG9pY2UgKCVkKSwgZXhpdGluZyIgJSAoaWR4ICsgMSkKKyAgICAgICAgICAgIHByaW50KCJJbnZhbGlkIGNob2ljZSAoJWQpLCBleGl0aW5nIiAlIChpZHggKyAxKSkKICAgICAgICAgICAgIHN5cy5leGl0KDEpCiAgICAgICAgIHJlbW92ZWQuYXBwZW5kKGZlYXR1cmVzLnBvcChpZHgpKQogCiAgICAgd3JpdGVfZmVhdHVyZXMoc2NyaXB0c19wYXRoLCBtYWNoaW5lLCBmZWF0dXJlcykKIAotICAgIHByaW50ICJSZW1vdmVkIGZlYXR1cmVzOiIKKyAgICBwcmludCgiUmVtb3ZlZCBmZWF0dXJlczoiKQogICAgIGZvciByIGluIHJlbW92ZWQ6Ci0gICAgICAgIHByaW50ICJcdCVzIiAlIHIKKyAgICAgICAgcHJpbnQoIlx0JXMiICUgcikKIAogCiBkZWYgeW9jdG9fa2VybmVsX2ZlYXR1cmVfYWRkKHNjcmlwdHNfcGF0aCwgbWFjaGluZSwgZmVhdHVyZXMpOgpAQCAtNjQzLDcgKzY0MSw3IEBACiAKICAgICBmb3IgaXRlbSBpbiBmZWF0dXJlczoKICAgICAgICAgaWYgbm90IGl0ZW0uZW5kc3dpdGgoIi5zY2MiKToKLSAgICAgICAgICAgIHByaW50ICJJbnZhbGlkIGZlYXR1cmUgKCVzKSwgZXhpdGluZyIgJSBpdGVtCisgICAgICAgICAgICBwcmludCgiSW52YWxpZCBmZWF0dXJlICglcyksIGV4aXRpbmciICUgaXRlbSkKICAgICAgICAgICAgIHN5cy5leGl0KDEpCiAgICAgICAgIG5ld19pdGVtcy5hcHBlbmQoaXRlbSkKIApAQCAtNjUyLDkgKzY1MCw5IEBACiAKICAgICB3cml0ZV9mZWF0dXJlcyhzY3JpcHRzX3BhdGgsIG1hY2hpbmUsIGN1cl9pdGVtcykKIAotICAgIHByaW50ICJBZGRlZCBmZWF0dXJlczoiCisgICAgcHJpbnQoIkFkZGVkIGZlYXR1cmVzOiIpCiAgICAgZm9yIG4gaW4gbmV3X2l0ZW1zOgotICAgICAgICBwcmludCAiXHQlcyIgJSBuCisgICAgICAgIHByaW50KCJcdCVzIiAlIG4pCiAKIAogZGVmIGZpbmRfZmVhdHVyZV91cmwoZ2l0X3VybCk6CkBAIC03MTQsNyArNzEyLDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmZWF0dXJlX2RpciArICIvIiArIGZpbGUpCiAgICAgICAgICAgICAgICAgZiA9IG9wZW4oZnVsbHBhdGgpCiAgICAgICAgICAgICAgICAgZmVhdHVyZV9kZXNjID0gZmluZF9mZWF0dXJlX2Rlc2MoZi5yZWFkbGluZXMoKSkKLSAgICAgICAgICAgICAgICBwcmludCBmZWF0dXJlX2RpciArICIvIiArIGZpbGUgKyAiOiAiICsgZmVhdHVyZV9kZXNjCisgICAgICAgICAgICAgICAgcHJpbnQoZmVhdHVyZV9kaXIgKyAiLyIgKyBmaWxlICsgIjogIiArIGZlYXR1cmVfZGVzYykKIAogCiBkZWYgeW9jdG9fa2VybmVsX2F2YWlsYWJsZV9mZWF0dXJlc19saXN0KHNjcmlwdHNfcGF0aCwgbWFjaGluZSk6CkBAIC03MjUsNyArNzIzLDcgQEAKICAgICBsYXllciA9IGZpbmRfYnNwX2xheWVyKG1hY2hpbmUpCiAgICAga2VybmVsID0gZmluZF9jdXJyZW50X2tlcm5lbChsYXllciwgbWFjaGluZSkKICAgICBpZiBub3Qga2VybmVsOgotICAgICAgICBwcmludCAiQ291bGRuJ3QgZGV0ZXJtaW5lIHRoZSBrZXJuZWwgZm9yIHRoaXMgQlNQLCBleGl0aW5nLiIKKyAgICAgICAgcHJpbnQoIkNvdWxkbid0IGRldGVybWluZSB0aGUga2VybmVsIGZvciB0aGlzIEJTUCwgZXhpdGluZy4iKQogICAgICAgICBzeXMuZXhpdCgxKQogCiAgICAgY29udGV4dCA9IGNyZWF0ZV9jb250ZXh0KG1hY2hpbmUsICJhcmNoIiwgc2NyaXB0c19wYXRoKQpAQCAtNzM1LDkgKzczMyw5IEBACiAgICAgZmVhdHVyZV91cmwgPSBmaW5kX2ZlYXR1cmVfdXJsKGdpdHVybCkKIAogICAgIGZlYXR1cmVfY21kID0gIndnZXQgLXEgLU8gLSAiICsgZmVhdHVyZV91cmwKLSAgICB0bXAgPSBzdWJwcm9jZXNzLlBvcGVuKGZlYXR1cmVfY21kLCBzaGVsbD1UcnVlLCBzdGRvdXQ9c3VicHJvY2Vzcy5QSVBFKS5zdGRvdXQucmVhZCgpCisgICAgdG1wID0gc3VicHJvY2Vzcy5Qb3BlbihmZWF0dXJlX2NtZCwgc2hlbGw9VHJ1ZSwgc3Rkb3V0PXN1YnByb2Nlc3MuUElQRSkuc3Rkb3V0LnJlYWQoKS5kZWNvZGUoJ3V0Zi04JykKIAotICAgIHByaW50ICJUaGUgY3VycmVudCBzZXQgb2Yga2VybmVsIGZlYXR1cmVzIGF2YWlsYWJsZSB0byAlcyBpczpcbiIgJSBtYWNoaW5lCisgICAgcHJpbnQoIlRoZSBjdXJyZW50IHNldCBvZiBrZXJuZWwgZmVhdHVyZXMgYXZhaWxhYmxlIHRvICVzIGlzOlxuIiAlIG1hY2hpbmUpCiAKICAgICBpZiB0bXA6CiAgICAgICAgIHRtcGxpbmUgPSB0bXAuc3BsaXQoIlxuIikKQEAgLTc1NCw5ICs3NTIsOSBAQAogICAgICAgICAgICAgICAgIGZlYXR1cmVfdHlwZSA9IGZlYXR1cmVfZGVmWzBdLnN0cmlwKCkKICAgICAgICAgICAgICAgICBmZWF0dXJlID0gZmVhdHVyZV9kZWZbMV0uc3RyaXAoKQogICAgICAgICAgICAgICAgIGRlc2MgPSBnZXRfZmVhdHVyZV9kZXNjKGdpdHVybCwgZmVhdHVyZSkKLSAgICAgICAgICAgICAgICBwcmludCAiJXM6ICVzIiAlIChmZWF0dXJlLCBkZXNjKQorICAgICAgICAgICAgICAgIHByaW50KCIlczogJXMiICUgKGZlYXR1cmUsIGRlc2MpKQogCi0gICAgcHJpbnQgIltsb2NhbF0iCisgICAgcHJpbnQoIltsb2NhbF0iKQogCiAgICAgcHJpbnRfZmVhdHVyZV9kZXNjcyhsYXllciwgImNmZyIpCiAgICAgcHJpbnRfZmVhdHVyZV9kZXNjcyhsYXllciwgImZlYXR1cmVzIikKQEAgLTc4Niw3ICs3ODQsNyBAQAogICAgICIiIgogICAgIGZlYXR1cmVfZGVzY191cmwgPSBmaW5kX2ZlYXR1cmVfZGVzY191cmwoZ2l0X3VybCwgZmVhdHVyZSkKICAgICBmZWF0dXJlX2Rlc2NfY21kID0gIndnZXQgLXEgLU8gLSAiICsgZmVhdHVyZV9kZXNjX3VybAotICAgIHRtcCA9IHN1YnByb2Nlc3MuUG9wZW4oZmVhdHVyZV9kZXNjX2NtZCwgc2hlbGw9VHJ1ZSwgc3Rkb3V0PXN1YnByb2Nlc3MuUElQRSkuc3Rkb3V0LnJlYWQoKQorICAgIHRtcCA9IHN1YnByb2Nlc3MuUG9wZW4oZmVhdHVyZV9kZXNjX2NtZCwgc2hlbGw9VHJ1ZSwgc3Rkb3V0PXN1YnByb2Nlc3MuUElQRSkuc3Rkb3V0LnJlYWQoKS5kZWNvZGUoJ3V0Zi04JykKIAogICAgIHJldHVybiBmaW5kX2ZlYXR1cmVfZGVzYyh0bXAuc3BsaXQoIlxuIikpCiAKQEAgLTgwMCw3ICs3OTgsNyBAQAogCiAgICAga2VybmVsID0gZmluZF9jdXJyZW50X2tlcm5lbChsYXllciwgbWFjaGluZSkKICAgICBpZiBub3Qga2VybmVsOgotICAgICAgICBwcmludCAiQ291bGRuJ3QgZGV0ZXJtaW5lIHRoZSBrZXJuZWwgZm9yIHRoaXMgQlNQLCBleGl0aW5nLiIKKyAgICAgICAgcHJpbnQoIkNvdWxkbid0IGRldGVybWluZSB0aGUga2VybmVsIGZvciB0aGlzIEJTUCwgZXhpdGluZy4iKQogICAgICAgICBzeXMuZXhpdCgxKQogCiAgICAgY29udGV4dCA9IGNyZWF0ZV9jb250ZXh0KG1hY2hpbmUsICJhcmNoIiwgc2NyaXB0c19wYXRoKQpAQCAtODEwLDcgKzgwOCw3IEBACiAKICAgICBkZXNjID0gZ2V0X2ZlYXR1cmVfZGVzYyhnaXR1cmwsIGZlYXR1cmUpCiAKLSAgICBwcmludCBkZXNjCisgICAgcHJpbnQoZGVzYykKIAogCiBkZWYgY2hlY2tfZmVhdHVyZV9uYW1lKGZlYXR1cmVfbmFtZSk6CkBAIC04MTgsMTEgKzgxNiwxMSBAQAogICAgIFNhbml0eS1jaGVjayB0aGUgZmVhdHVyZSBuYW1lIGZvciBjcmVhdGUvZGVzdHJveS4gIFJldHVybiBGYWxzZSBpZiBub3QgT0suCiAgICAgIiIiCiAgICAgaWYgbm90IGZlYXR1cmVfbmFtZS5lbmRzd2l0aCgiLnNjYyIpOgotICAgICAgICBwcmludCAiSW52YWxpZCBmZWF0dXJlIG5hbWUgKG11c3QgZW5kIHdpdGggLnNjYykgWyVzXSwgZXhpdGluZyIgJSBmZWF0dXJlX25hbWUKKyAgICAgICAgcHJpbnQoIkludmFsaWQgZmVhdHVyZSBuYW1lIChtdXN0IGVuZCB3aXRoIC5zY2MpIFslc10sIGV4aXRpbmciICUgZmVhdHVyZV9uYW1lKQogICAgICAgICByZXR1cm4gRmFsc2UKIAogICAgIGlmICIvIiBpbiBmZWF0dXJlX25hbWU6Ci0gICAgICAgIHByaW50ICJJbnZhbGlkIGZlYXR1cmUgbmFtZSAoZG9uJ3Qgc3BlY2lmeSBkaXJlY3RvcnkpIFslc10sIGV4aXRpbmciICUgZmVhdHVyZV9uYW1lCisgICAgICAgIHByaW50KCJJbnZhbGlkIGZlYXR1cmUgbmFtZSAoZG9uJ3Qgc3BlY2lmeSBkaXJlY3RvcnkpIFslc10sIGV4aXRpbmciICUgZmVhdHVyZV9uYW1lKQogICAgICAgICByZXR1cm4gRmFsc2UKIAogICAgIHJldHVybiBUcnVlCkBAIC04MzYsMTEgKzgzNCwxMSBAQAogICAgICAgICByZXR1cm4gRmFsc2UKIAogICAgIGlmIGZlYXR1cmVfaXRlbXNbMV0uZW5kc3dpdGgoIi5wYXRjaCIpIG9yIGZlYXR1cmVfaXRlbXNbMV0uc3RhcnRzd2l0aCgiQ09ORklHXyIpOgotICAgICAgICBwcmludCAiTWlzc2luZyBkZXNjcmlwdGlvbiBhbmQvb3IgY29tcGF0aWJpbHR5IFslc10sIGV4aXRpbmciICUgZmVhdHVyZV9pdGVtc1sxXQorICAgICAgICBwcmludCgiTWlzc2luZyBkZXNjcmlwdGlvbiBhbmQvb3IgY29tcGF0aWJpbHR5IFslc10sIGV4aXRpbmciICUgZmVhdHVyZV9pdGVtc1sxXSkKICAgICAgICAgcmV0dXJuIEZhbHNlCiAKICAgICBpZiBmZWF0dXJlX2l0ZW1zWzJdLmVuZHN3aXRoKCIucGF0Y2giKSBvciBmZWF0dXJlX2l0ZW1zWzJdLnN0YXJ0c3dpdGgoIkNPTkZJR18iKToKLSAgICAgICAgcHJpbnQgIk1pc3NpbmcgZGVzY3JpcHRpb24gYW5kL29yIGNvbXBhdGliaWxpdHkgWyVzXSwgZXhpdGluZyIgJSBmZWF0dXJlX2l0ZW1zWzFdCisgICAgICAgIHByaW50KCJNaXNzaW5nIGRlc2NyaXB0aW9uIGFuZC9vciBjb21wYXRpYmlsaXR5IFslc10sIGV4aXRpbmciICUgZmVhdHVyZV9pdGVtc1sxXSkKICAgICAgICAgcmV0dXJuIEZhbHNlCiAKICAgICByZXR1cm4gVHJ1ZQpAQCAtODY4LDcgKzg2Niw3IEBACiAgICAgICAgICAgICBpZiAoIj15IiBpbiBpdGVtIG9yICI9bSIgaW4gaXRlbSk6CiAgICAgICAgICAgICAgICAgY2ZnX2l0ZW1zLmFwcGVuZChpdGVtKQogICAgICAgICBlbHNlOgotICAgICAgICAgICAgcHJpbnQgIkludmFsaWQgZmVhdHVyZSBpdGVtIChtdXN0IGJlIC5wYXRjaCBvciBDT05GSUdfKikgWyVzXSwgZXhpdGluZyIgJSBpdGVtCisgICAgICAgICAgICBwcmludCgiSW52YWxpZCBmZWF0dXJlIGl0ZW0gKG11c3QgYmUgLnBhdGNoIG9yIENPTkZJR18qKSBbJXNdLCBleGl0aW5nIiAlIGl0ZW0pCiAgICAgICAgICAgICBzeXMuZXhpdCgxKQogCiAgICAgZmVhdHVyZV9kaXJuYW1lID0gImNmZyIKQEAgLTg3Nyw3ICs4NzUsNyBAQAogCiAgICAgZmlsZXNkaXIgPSBmaW5kX2ZpbGVzZGlyKHNjcmlwdHNfcGF0aCwgbWFjaGluZSkKICAgICBpZiBub3QgZmlsZXNkaXI6Ci0gICAgICAgIHByaW50ICJDb3VsZG4ndCBhZGQgZmVhdHVyZSAoJXMpLCBubyAnZmlsZXMnIGRpciBmb3VuZCIgJSBmZWF0dXJlCisgICAgICAgIHByaW50KCJDb3VsZG4ndCBhZGQgZmVhdHVyZSAoJXMpLCBubyAnZmlsZXMnIGRpciBmb3VuZCIgJSBmZWF0dXJlKQogICAgICAgICBzeXMuZXhpdCgxKQogCiAgICAgZmVhdGRpciA9IG9zLnBhdGguam9pbihmaWxlc2RpciwgZmVhdHVyZV9kaXJuYW1lKQpAQCAtODg2LDcgKzg4NCw3IEBACiAKICAgICBmb3IgcGF0Y2ggaW4gcGF0Y2hlczoKICAgICAgICAgaWYgbm90IG9zLnBhdGguaXNmaWxlKHBhdGNoKToKLSAgICAgICAgICAgIHByaW50ICJDb3VsZG4ndCBmaW5kIHBhdGNoICglcyksIGV4aXRpbmciICUgcGF0Y2gKKyAgICAgICAgICAgIHByaW50KCJDb3VsZG4ndCBmaW5kIHBhdGNoICglcyksIGV4aXRpbmciICUgcGF0Y2gpCiAgICAgICAgICAgICBzeXMuZXhpdCgxKQogICAgICAgICBiYXNlbmFtZSA9IG9zLnBhdGguYmFzZW5hbWUocGF0Y2gpCiAgICAgICAgIGZlYXRkaXJfcGF0Y2ggPSBvcy5wYXRoLmpvaW4oZmVhdGRpciwgYmFzZW5hbWUpCkBAIC05MTAsOCArOTA4LDggQEAKICAgICBuZXdfZmVhdHVyZV9maWxlLndyaXRlKCJrY29uZiBub24taGFyZHdhcmUgIiArIGZlYXR1cmVfYmFzZW5hbWUgKyAiLmNmZ1xuIikKICAgICBuZXdfZmVhdHVyZV9maWxlLmNsb3NlKCkKIAotICAgIHByaW50ICJBZGRlZCBmZWF0dXJlOiIKLSAgICBwcmludCAiXHQlcyIgJSBmZWF0dXJlX2Rpcm5hbWUgKyAiLyIgKyBmZWF0dXJlCisgICAgcHJpbnQoIkFkZGVkIGZlYXR1cmU6IikKKyAgICBwcmludCgiXHQlcyIgJSBmZWF0dXJlX2Rpcm5hbWUgKyAiLyIgKyBmZWF0dXJlKQogCiAKIGRlZiBmZWF0dXJlX2luX3VzZShzY3JpcHRzX3BhdGgsIG1hY2hpbmUsIGZlYXR1cmUpOgpAQCAtOTQ5LDE4ICs5NDcsMTggQEAKIAogICAgIGlmIGZlYXR1cmVfaW5fdXNlKHNjcmlwdHNfcGF0aCwgbWFjaGluZSwgImZlYXR1cmVzLyIgKyBmZWF0dXJlKSBvciBcCiAgICAgICAgICAgICBmZWF0dXJlX2luX3VzZShzY3JpcHRzX3BhdGgsIG1hY2hpbmUsICJjZmcvIiArIGZlYXR1cmUpOgotICAgICAgICBwcmludCAiRmVhdHVyZSAlcyBpcyBpbiB1c2UgKHVzZSAnZmVhdHVyZSBybScgdG8gdW4tdXNlIGl0IGZpcnN0KSwgZXhpdGluZyIgJSBmZWF0dXJlCisgICAgICAgIHByaW50KCJGZWF0dXJlICVzIGlzIGluIHVzZSAodXNlICdmZWF0dXJlIHJtJyB0byB1bi11c2UgaXQgZmlyc3QpLCBleGl0aW5nIiAlIGZlYXR1cmUpCiAgICAgICAgIHN5cy5leGl0KDEpCiAKICAgICBmaWxlc2RpciA9IGZpbmRfZmlsZXNkaXIoc2NyaXB0c19wYXRoLCBtYWNoaW5lKQogICAgIGlmIG5vdCBmaWxlc2RpcjoKLSAgICAgICAgcHJpbnQgIkNvdWxkbid0IGRlc3Ryb3kgZmVhdHVyZSAoJXMpLCBubyAnZmlsZXMnIGRpciBmb3VuZCIgJSBmZWF0dXJlCisgICAgICAgIHByaW50KCJDb3VsZG4ndCBkZXN0cm95IGZlYXR1cmUgKCVzKSwgbm8gJ2ZpbGVzJyBkaXIgZm91bmQiICUgZmVhdHVyZSkKICAgICAgICAgc3lzLmV4aXQoMSkKIAogICAgIGZlYXR1cmVfZGlybmFtZSA9ICJmZWF0dXJlcyIKICAgICBmZWF0ZGlyID0gb3MucGF0aC5qb2luKGZpbGVzZGlyLCBmZWF0dXJlX2Rpcm5hbWUpCiAgICAgaWYgbm90IG9zLnBhdGguZXhpc3RzKGZlYXRkaXIpOgotICAgICAgICBwcmludCAiQ291bGRuJ3QgZmluZCBmZWF0dXJlIGRpcmVjdG9yeSAoJXMpIiAlIGZlYXR1cmVfZGlybmFtZQorICAgICAgICBwcmludCgiQ291bGRuJ3QgZmluZCBmZWF0dXJlIGRpcmVjdG9yeSAoJXMpIiAlIGZlYXR1cmVfZGlybmFtZSkKICAgICAgICAgc3lzLmV4aXQoMSkKIAogICAgIGZlYXR1cmVfZnFuID0gb3MucGF0aC5qb2luKGZlYXRkaXIsIGZlYXR1cmUpCkBAIC05NjgsMTEgKzk2NiwxMSBAQAogICAgICAgICBmZWF0dXJlX2Rpcm5hbWUgPSAiY2ZnIgogICAgICAgICBmZWF0ZGlyID0gb3MucGF0aC5qb2luKGZpbGVzZGlyLCBmZWF0dXJlX2Rpcm5hbWUpCiAgICAgICAgIGlmIG5vdCBvcy5wYXRoLmV4aXN0cyhmZWF0ZGlyKToKLSAgICAgICAgICAgIHByaW50ICJDb3VsZG4ndCBmaW5kIGZlYXR1cmUgZGlyZWN0b3J5ICglcykiICUgZmVhdHVyZV9kaXJuYW1lCisgICAgICAgICAgICBwcmludCgiQ291bGRuJ3QgZmluZCBmZWF0dXJlIGRpcmVjdG9yeSAoJXMpIiAlIGZlYXR1cmVfZGlybmFtZSkKICAgICAgICAgICAgIHN5cy5leGl0KDEpCiAgICAgICAgIGZlYXR1cmVfZnFuID0gb3MucGF0aC5qb2luKGZlYXRkaXIsIGZlYXR1cmVfZmlsZW5hbWUpCiAgICAgICAgIGlmIG5vdCBvcy5wYXRoLmV4aXN0cyhmZWF0dXJlX2Zxbik6Ci0gICAgICAgICAgICBwcmludCAiQ291bGRuJ3QgZmluZCBmZWF0dXJlICglcykiICUgZmVhdHVyZQorICAgICAgICAgICAgcHJpbnQoIkNvdWxkbid0IGZpbmQgZmVhdHVyZSAoJXMpIiAlIGZlYXR1cmUpCiAgICAgICAgICAgICBzeXMuZXhpdCgxKQogCiAgICAgZiA9IG9wZW4oZmVhdHVyZV9mcW4sICJyIikKQEAgLTk4OSw4ICs5ODcsOCBAQAogCiAgICAgZmVhdHVyZV9yZW1vdmUoc2NyaXB0c19wYXRoLCBtYWNoaW5lLCBmZWF0dXJlKQogCi0gICAgcHJpbnQgIlJlbW92ZWQgZmVhdHVyZToiCi0gICAgcHJpbnQgIlx0JXMiICUgZmVhdHVyZV9kaXJuYW1lICsgIi8iICsgZmVhdHVyZQorICAgIHByaW50KCJSZW1vdmVkIGZlYXR1cmU6IikKKyAgICBwcmludCgiXHQlcyIgJSBmZWF0dXJlX2Rpcm5hbWUgKyAiLyIgKyBmZWF0dXJlKQogCiAKIGRlZiBiYXNlX2JyYW5jaGVzKGNvbnRleHQpOgpAQCAtOTk5LDEwICs5OTcsMTAgQEAKICAgICAiIiIKICAgICBnaXR1cmwgPSBmaW5kX2dpdHVybChjb250ZXh0KQogCi0gICAgcHJpbnQgIkdldHRpbmcgYnJhbmNoZXMgZnJvbSByZW1vdGUgcmVwbyAlcy4uLiIgJSBnaXR1cmwKKyAgICBwcmludCgiR2V0dGluZyBicmFuY2hlcyBmcm9tIHJlbW90ZSByZXBvICVzLi4uIiAlIGdpdHVybCkKIAogICAgIGdpdGNtZCA9ICJnaXQgbHMtcmVtb3RlICVzICpoZWFkcyogMj4mMSIgJSAoZ2l0dXJsKQotICAgIHRtcCA9IHN1YnByb2Nlc3MuUG9wZW4oZ2l0Y21kLCBzaGVsbD1UcnVlLCBzdGRvdXQ9c3VicHJvY2Vzcy5QSVBFKS5zdGRvdXQucmVhZCgpCisgICAgdG1wID0gc3VicHJvY2Vzcy5Qb3BlbihnaXRjbWQsIHNoZWxsPVRydWUsIHN0ZG91dD1zdWJwcm9jZXNzLlBJUEUpLnN0ZG91dC5yZWFkKCkuZGVjb2RlKCd1dGYtOCcpCiAKICAgICBicmFuY2hlcyA9IFtdCiAKQEAgLTEwMjksMTAgKzEwMjcsMTAgQEAKICAgICAiIiIKICAgICBnaXR1cmwgPSBmaW5kX2dpdHVybChjb250ZXh0KQogCi0gICAgcHJpbnQgIkdldHRpbmcgYnJhbmNoZXMgZnJvbSByZW1vdGUgcmVwbyAlcy4uLiIgJSBnaXR1cmwKKyAgICBwcmludCgiR2V0dGluZyBicmFuY2hlcyBmcm9tIHJlbW90ZSByZXBvICVzLi4uIiAlIGdpdHVybCkKIAogICAgIGdpdGNtZCA9ICJnaXQgbHMtcmVtb3RlICVzICpoZWFkcyogMj4mMSIgJSAoZ2l0dXJsKQotICAgIHRtcCA9IHN1YnByb2Nlc3MuUG9wZW4oZ2l0Y21kLCBzaGVsbD1UcnVlLCBzdGRvdXQ9c3VicHJvY2Vzcy5QSVBFKS5zdGRvdXQucmVhZCgpCisgICAgdG1wID0gc3VicHJvY2Vzcy5Qb3BlbihnaXRjbWQsIHNoZWxsPVRydWUsIHN0ZG91dD1zdWJwcm9jZXNzLlBJUEUpLnN0ZG91dC5yZWFkKCkuZGVjb2RlKCd1dGYtOCcpCiAKICAgICBicmFuY2hlcyA9IFtdCiAKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL2FybS9yZWNpcGVzLWtlcm5lbC9saW51eC9maWxlcy9tYWNoaW5lLXN0YW5kYXJkLnNjYyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL2FybS9yZWNpcGVzLWtlcm5lbC9saW51eC9maWxlcy9tYWNoaW5lLXN0YW5kYXJkLnNjYwppbmRleCA0MDU5NzJkLi44YTg4MTU3IDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC9hcm0vcmVjaXBlcy1rZXJuZWwvbGludXgvZmlsZXMvbWFjaGluZS1zdGFuZGFyZC5zY2MKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gvYXJtL3JlY2lwZXMta2VybmVsL2xpbnV4L2ZpbGVzL21hY2hpbmUtc3RhbmRhcmQuc2NjCkBAIC0zLDcgKzMsNyBAQAogCiBkZWZpbmUgS0FSQ0ggYXJtCiAKLWluY2x1ZGUge3s9bWFwX3N0YW5kYXJkX2ticmFuY2gobmVlZF9uZXdfa2JyYW5jaCwgbmV3X2ticmFuY2gsIGV4aXN0aW5nX2ticmFuY2gpfX0KK2luY2x1ZGUge3s9bWFwX3N0YW5kYXJkX2ticmFuY2gobmVlZF9uZXdfa2JyYW5jaCwgbmV3X2ticmFuY2gsIGV4aXN0aW5nX2ticmFuY2gpfX0gbm9wYXRjaAoge3sgaWYgbmVlZF9uZXdfa2JyYW5jaCA9PSAieSI6IH19CiBkZWZpbmUgS1RZUEUge3s9bmV3X2ticmFuY2h9fQogYnJhbmNoIHt7PW1hY2hpbmV9fQpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gvYXJtL3JlY2lwZXMta2VybmVsL2xpbnV4L2tlcm5lbC1saXN0Lm5vaW5zdGFsbCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL2FybS9yZWNpcGVzLWtlcm5lbC9saW51eC9rZXJuZWwtbGlzdC5ub2luc3RhbGwKaW5kZXggMDBjZjM2MC4uMDEyMGVkMCAxMDA2NDQKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gvYXJtL3JlY2lwZXMta2VybmVsL2xpbnV4L2tlcm5lbC1saXN0Lm5vaW5zdGFsbAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC9hcm0vcmVjaXBlcy1rZXJuZWwvbGludXgva2VybmVsLWxpc3Qubm9pbnN0YWxsCkBAIC0xLDUgKzEsNSBAQAoge3sgaWYga2VybmVsX2Nob2ljZSAhPSAiY3VzdG9tIjogfX0KLXt7IGlucHV0IHR5cGU6ImJvb2xlYW4iIG5hbWU6InVzZV9kZWZhdWx0X2tlcm5lbCIgcHJpbzoiMTAiIG1zZzoiV291bGQgeW91IGxpa2UgdG8gdXNlIHRoZSBkZWZhdWx0ICg0LjQpIGtlcm5lbD8gKHkvbikiIGRlZmF1bHQ6InkifX0KK3t7IGlucHV0IHR5cGU6ImJvb2xlYW4iIG5hbWU6InVzZV9kZWZhdWx0X2tlcm5lbCIgcHJpbzoiMTAiIG1zZzoiV291bGQgeW91IGxpa2UgdG8gdXNlIHRoZSBkZWZhdWx0ICg0LjgpIGtlcm5lbD8gKHkvbikiIGRlZmF1bHQ6InkifX0KIAoge3sgaWYga2VybmVsX2Nob2ljZSAhPSAiY3VzdG9tIiBhbmQgdXNlX2RlZmF1bHRfa2VybmVsID09ICJuIjogfX0KLXt7IGlucHV0IHR5cGU6ImNob2ljZWxpc3QiIG5hbWU6Imtlcm5lbF9jaG9pY2UiIGdlbjoiYnNwLmtlcm5lbC5rZXJuZWxzIiBwcmlvOiIxMCIgbXNnOiJQbGVhc2UgY2hvb3NlIHRoZSBrZXJuZWwgdG8gdXNlIGluIHRoaXMgQlNQOiIgZGVmYXVsdDoibGludXgteW9jdG9fNC40In19Cit7eyBpbnB1dCB0eXBlOiJjaG9pY2VsaXN0IiBuYW1lOiJrZXJuZWxfY2hvaWNlIiBnZW46ImJzcC5rZXJuZWwua2VybmVscyIgcHJpbzoiMTAiIG1zZzoiUGxlYXNlIGNob29zZSB0aGUga2VybmVsIHRvIHVzZSBpbiB0aGlzIEJTUDoiIGRlZmF1bHQ6ImxpbnV4LXlvY3RvXzQuOCJ9fQpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gvYXJtL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LXlvY3RvLXRpbnlfNC44LmJiYXBwZW5kIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gvYXJtL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LXlvY3RvLXRpbnlfNC44LmJiYXBwZW5kCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVmYjQ1ZDkKLS0tIC9kZXYvbnVsbAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC9hcm0vcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgteW9jdG8tdGlueV80LjguYmJhcHBlbmQKQEAgLTAsMCArMSwzMyBAQAorIyB5b2N0by1ic3AtZmlsZW5hbWUge3sgaWYga2VybmVsX2Nob2ljZSA9PSAibGludXgteW9jdG8tdGlueV80LjgiOiB9fSB0aGlzCitGSUxFU0VYVFJBUEFUSFNfcHJlcGVuZCA6PSAiJHtUSElTRElSfS9maWxlczoiCisKK1BSIDo9ICIke1BSfS4xIgorCitDT01QQVRJQkxFX01BQ0hJTkVfe3s9bWFjaGluZX19ID0gInt7PW1hY2hpbmV9fSIKKwore3sgaW5wdXQgdHlwZToiYm9vbGVhbiIgbmFtZToibmVlZF9uZXdfa2JyYW5jaCIgcHJpbzoiMjAiIG1zZzoiRG8geW91IG5lZWQgYSBuZXcgbWFjaGluZSBicmFuY2ggZm9yIHRoaXMgQlNQICh0aGUgYWx0ZXJuYXRpdmUgaXMgdG8gcmUtdXNlIGFuIGV4aXN0aW5nIGJyYW5jaCk/IFt5L25dIiBkZWZhdWx0OiJ5IiB9fQorCit7eyBpZiBuZWVkX25ld19rYnJhbmNoID09ICJ5IjogfX0KK3t7IGlucHV0IHR5cGU6ImNob2ljZWxpc3QiIG5hbWU6Im5ld19rYnJhbmNoIiBnZW46ImJzcC5rZXJuZWwuYWxsX2JyYW5jaGVzIiBicmFuY2hlc19iYXNlOiJzdGFuZGFyZC90aW55IiBwcmlvOiIyMCIgbXNnOiJQbGVhc2UgY2hvb3NlIGEgbWFjaGluZSBicmFuY2ggdG8gYmFzZSB0aGlzIEJTUCBvbjoiIGRlZmF1bHQ6InN0YW5kYXJkL3RpbnkvYmFzZSIgfX0KKwore3sgaWYgbmVlZF9uZXdfa2JyYW5jaCA9PSAibiI6IH19Cit7eyBpbnB1dCB0eXBlOiJjaG9pY2VsaXN0IiBuYW1lOiJleGlzdGluZ19rYnJhbmNoIiBnZW46ImJzcC5rZXJuZWwuYWxsX2JyYW5jaGVzIiBicmFuY2hlc19iYXNlOiJzdGFuZGFyZC90aW55IiBwcmlvOiIyMCIgbXNnOiJQbGVhc2UgY2hvb3NlIGEgbWFjaGluZSBicmFuY2ggdG8gYmFzZSB0aGlzIEJTUCBvbjoiIGRlZmF1bHQ6InN0YW5kYXJkL3RpbnkvYmFzZSIgfX0KKwore3sgaWYgbmVlZF9uZXdfa2JyYW5jaCA9PSAibiI6IH19CitLQlJBTkNIX3t7PW1hY2hpbmV9fSAgPSAie3s9ZXhpc3Rpbmdfa2JyYW5jaH19IgorCit7eyBpbnB1dCB0eXBlOiJib29sZWFuIiBuYW1lOiJzbXAiIHByaW86IjMwIiBtc2c6IkRvIHlvdSBuZWVkIFNNUCBzdXBwb3J0PyAoeS9uKSIgZGVmYXVsdDoieSJ9fQore3sgaWYgc21wID09ICJ5IjogfX0KK0tFUk5FTF9GRUFUVVJFU19hcHBlbmRfe3s9bWFjaGluZX19ICs9ICIgY2ZnL3NtcC5zY2MiCisKK1NSQ19VUkkgKz0gImZpbGU6Ly97ez1tYWNoaW5lfX0tdGlueS5zY2MgXAorICAgICAgICAgICAgZmlsZTovL3t7PW1hY2hpbmV9fS11c2VyLWNvbmZpZy5jZmcgXAorICAgICAgICAgICAgZmlsZTovL3t7PW1hY2hpbmV9fS11c2VyLXBhdGNoZXMuc2NjIFwKKyAgICAgICAgICAgIGZpbGU6Ly97ez1tYWNoaW5lfX0tdXNlci1mZWF0dXJlcy5zY2MgXAorICAgICAgICAgICAiCisKKyMgcmVwbGFjZSB0aGVzZSBTUkNSRVZzIHdpdGggdGhlIHJlYWwgY29tbWl0IGlkcyBvbmNlIHlvdSd2ZSBoYWQKKyMgdGhlIGFwcHJvcHJpYXRlIGNoYW5nZXMgY29tbWl0dGVkIHRvIHRoZSB1cHN0cmVhbSBsaW51eC15b2N0byByZXBvCitTUkNSRVZfbWFjaGluZV9wbi1saW51eC15b2N0by10aW55X3t7PW1hY2hpbmV9fSA/PSAiJHtBVVRPUkVWfSIKK1NSQ1JFVl9tZXRhX3BuLWxpbnV4LXlvY3RvLXRpbnlfe3s9bWFjaGluZX19ID89ICIke0FVVE9SRVZ9IgorI0xJTlVYX1ZFUlNJT04gPSAiNC44IgpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gvYXJtL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LXlvY3RvXzQuOC5iYmFwcGVuZCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL2FybS9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC15b2N0b180LjguYmJhcHBlbmQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2MwZGY4YgotLS0gL2Rldi9udWxsCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL2FybS9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC15b2N0b180LjguYmJhcHBlbmQKQEAgLTAsMCArMSwzMiBAQAorIyB5b2N0by1ic3AtZmlsZW5hbWUge3sgaWYga2VybmVsX2Nob2ljZSA9PSAibGludXgteW9jdG9fNC44IjogfX0gdGhpcworRklMRVNFWFRSQVBBVEhTX3ByZXBlbmQgOj0gIiR7VEhJU0RJUn0vZmlsZXM6IgorCitQUiA6PSAiJHtQUn0uMSIKKworQ09NUEFUSUJMRV9NQUNISU5FX3t7PW1hY2hpbmV9fSA9ICJ7ez1tYWNoaW5lfX0iCisKK3t7IGlucHV0IHR5cGU6ImJvb2xlYW4iIG5hbWU6Im5lZWRfbmV3X2ticmFuY2giIHByaW86IjIwIiBtc2c6IkRvIHlvdSBuZWVkIGEgbmV3IG1hY2hpbmUgYnJhbmNoIGZvciB0aGlzIEJTUCAodGhlIGFsdGVybmF0aXZlIGlzIHRvIHJlLXVzZSBhbiBleGlzdGluZyBicmFuY2gpPyBbeS9uXSIgZGVmYXVsdDoieSIgfX0KKwore3sgaWYgbmVlZF9uZXdfa2JyYW5jaCA9PSAieSI6IH19Cit7eyBpbnB1dCB0eXBlOiJjaG9pY2VsaXN0IiBuYW1lOiJuZXdfa2JyYW5jaCIgZ2VuOiJic3Aua2VybmVsLmFsbF9icmFuY2hlcyIgYnJhbmNoZXNfYmFzZToic3RhbmRhcmQiIHByaW86IjIwIiBtc2c6IlBsZWFzZSBjaG9vc2UgYSBtYWNoaW5lIGJyYW5jaCB0byBiYXNlIHRoaXMgQlNQIG9uOiIgZGVmYXVsdDoic3RhbmRhcmQvYmFzZSIgfX0KKwore3sgaWYgbmVlZF9uZXdfa2JyYW5jaCA9PSAibiI6IH19Cit7eyBpbnB1dCB0eXBlOiJjaG9pY2VsaXN0IiBuYW1lOiJleGlzdGluZ19rYnJhbmNoIiBnZW46ImJzcC5rZXJuZWwuYWxsX2JyYW5jaGVzIiBicmFuY2hlc19iYXNlOiJzdGFuZGFyZCIgcHJpbzoiMjAiIG1zZzoiUGxlYXNlIGNob29zZSBhIG1hY2hpbmUgYnJhbmNoIHRvIGJhc2UgdGhpcyBCU1Agb246IiBkZWZhdWx0OiJzdGFuZGFyZC9iYXNlIiB9fQorCit7eyBpZiBuZWVkX25ld19rYnJhbmNoID09ICJuIjogfX0KK0tCUkFOQ0hfe3s9bWFjaGluZX19ICA9ICJ7ez1leGlzdGluZ19rYnJhbmNofX0iCisKK3t7IGlucHV0IHR5cGU6ImJvb2xlYW4iIG5hbWU6InNtcCIgcHJpbzoiMzAiIG1zZzoiRG8geW91IG5lZWQgU01QIHN1cHBvcnQ/ICh5L24pIiBkZWZhdWx0OiJ5In19Cit7eyBpZiBzbXAgPT0gInkiOiB9fQorS0VSTkVMX0ZFQVRVUkVTX2FwcGVuZF97ez1tYWNoaW5lfX0gKz0gIiBjZmcvc21wLnNjYyIKKworU1JDX1VSSSArPSAiZmlsZTovL3t7PW1hY2hpbmV9fS1zdGFuZGFyZC5zY2MgXAorICAgICAgICAgICAgZmlsZTovL3t7PW1hY2hpbmV9fS11c2VyLWNvbmZpZy5jZmcgXAorICAgICAgICAgICAgZmlsZTovL3t7PW1hY2hpbmV9fS11c2VyLWZlYXR1cmVzLnNjYyBcCisgICAgICAgICAgICIKKworIyByZXBsYWNlIHRoZXNlIFNSQ1JFVnMgd2l0aCB0aGUgcmVhbCBjb21taXQgaWRzIG9uY2UgeW91J3ZlIGhhZAorIyB0aGUgYXBwcm9wcmlhdGUgY2hhbmdlcyBjb21taXR0ZWQgdG8gdGhlIHVwc3RyZWFtIGxpbnV4LXlvY3RvIHJlcG8KK1NSQ1JFVl9tYWNoaW5lX3BuLWxpbnV4LXlvY3RvX3t7PW1hY2hpbmV9fSA/PSAiJHtBVVRPUkVWfSIKK1NSQ1JFVl9tZXRhX3BuLWxpbnV4LXlvY3RvX3t7PW1hY2hpbmV9fSA/PSAiJHtBVVRPUkVWfSIKKyNMSU5VWF9WRVJTSU9OID0gIjQuOCIKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL2kzODYvY29uZi9tYWNoaW5lL21hY2hpbmUuY29uZiBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL2kzODYvY29uZi9tYWNoaW5lL21hY2hpbmUuY29uZgppbmRleCBkNWFiZTRmLi40NzQ1YzFjIDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC9pMzg2L2NvbmYvbWFjaGluZS9tYWNoaW5lLmNvbmYKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gvaTM4Ni9jb25mL21hY2hpbmUvbWFjaGluZS5jb25mCkBAIC0zMyw3ICszMyw3IEBACiAKIHt7IGlucHV0IHR5cGU6ImJvb2xlYW4iIG5hbWU6InhzZXJ2ZXIiIHByaW86IjUwIiBtc2c6IkRvIHlvdSBuZWVkIHN1cHBvcnQgZm9yIFg/ICh5L24pIiBkZWZhdWx0OiJ5IiB9fQogCi17eyBpZiB4c2VydmVyID09ICJ5IiBhbmQgKGtlcm5lbF9jaG9pY2UgPT0gImxpbnV4LXlvY3RvXzQuNCIgb3Iga2VybmVsX2Nob2ljZSA9PSAibGludXgteW9jdG9fNC4xIik6IH19Cit7eyBpZiB4c2VydmVyID09ICJ5IjogfX0KIHt7IGlucHV0IHR5cGU6ImNob2ljZWxpc3QiIG5hbWU6InhzZXJ2ZXJfY2hvaWNlIiBwcmlvOiI1MCIgbXNnOiJQbGVhc2Ugc2VsZWN0IGFuIHhzZXJ2ZXIgZm9yIHRoaXMgbWFjaGluZToiIGRlZmF1bHQ6InhzZXJ2ZXJfdmVzYSIgfX0KIHt7IGlucHV0IHR5cGU6ImNob2ljZSIgdmFsOiJ4c2VydmVyX3Zlc2EiIG1zZzoiVkVTQSB4c2VydmVyIHN1cHBvcnQiIH19CiB7eyBpbnB1dCB0eXBlOiJjaG9pY2UiIHZhbDoieHNlcnZlcl9pOTE1IiBtc2c6Imk5MTUgeHNlcnZlciBzdXBwb3J0IiB9fQpAQCAtNDEsMTUgKzQxLDcgQEAKIHt7IGlucHV0IHR5cGU6ImNob2ljZSIgdmFsOiJ4c2VydmVyX2ZiZGV2IiBtc2c6ImZiZGV2IHhzZXJ2ZXIgc3VwcG9ydCIgfX0KIHt7IGlucHV0IHR5cGU6ImNob2ljZSIgdmFsOiJ4c2VydmVyX21vZGVzZXR0aW5nIiBtc2c6Im1vZGVzZXR0aW5nIHhzZXJ2ZXIgc3VwcG9ydCIgfX0KIAote3sgaWYgeHNlcnZlciA9PSAieSIgYW5kIGtlcm5lbF9jaG9pY2UgPT0gImN1c3RvbSI6IH19Ci17eyBpbnB1dCB0eXBlOiJjaG9pY2VsaXN0IiBuYW1lOiJ4c2VydmVyX2Nob2ljZSIgcHJpbzoiNTAiIG1zZzoiUGxlYXNlIHNlbGVjdCBhbiB4c2VydmVyIGZvciB0aGlzIG1hY2hpbmU6IiBkZWZhdWx0OiJ4c2VydmVyX3Zlc2EiIH19Ci17eyBpbnB1dCB0eXBlOiJjaG9pY2UiIHZhbDoieHNlcnZlcl92ZXNhIiBtc2c6IlZFU0EgeHNlcnZlciBzdXBwb3J0IiB9fQote3sgaW5wdXQgdHlwZToiY2hvaWNlIiB2YWw6InhzZXJ2ZXJfaTkxNSIgbXNnOiJpOTE1IHhzZXJ2ZXIgc3VwcG9ydCIgfX0KLXt7IGlucHV0IHR5cGU6ImNob2ljZSIgdmFsOiJ4c2VydmVyX2k5NjUiIG1zZzoiaTk2NSB4c2VydmVyIHN1cHBvcnQiIH19Ci17eyBpbnB1dCB0eXBlOiJjaG9pY2UiIHZhbDoieHNlcnZlcl9mYmRldiIgbXNnOiJmYmRldiB4c2VydmVyIHN1cHBvcnQiIH19Ci17eyBpbnB1dCB0eXBlOiJjaG9pY2UiIHZhbDoieHNlcnZlcl9tb2Rlc2V0dGluZyIgbXNnOiJtb2Rlc2V0dGluZyB4c2VydmVyIHN1cHBvcnQiIH19Ci0KLXt7IGlmIHhzZXJ2ZXIgPT0gInkiIGFuZCBrZXJuZWxfY2hvaWNlICE9ICJsaW51eC15b2N0b180LjQiIGFuZCBrZXJuZWxfY2hvaWNlICE9ICJsaW51eC15b2N0b180LjEiIGFuZCBrZXJuZWxfY2hvaWNlICE9ICJjdXN0b20iOiB4c2VydmVyX2Nob2ljZSA9ICJ4c2VydmVyX2k5MTUiIH19Cit7eyBpZiB4c2VydmVyID09ICJ5IiBhbmQga2VybmVsX2Nob2ljZSAhPSAibGludXgteW9jdG9fNC44IiBhbmQga2VybmVsX2Nob2ljZSAhPSAibGludXgteW9jdG9fNC40IiBhbmQga2VybmVsX2Nob2ljZSAhPSAibGludXgteW9jdG9fNC4xIiBhbmQga2VybmVsX2Nob2ljZSAhPSAiY3VzdG9tIjogeHNlcnZlcl9jaG9pY2UgPSAieHNlcnZlcl9pOTE1IiB9fQogCiB7eyBpZiB4c2VydmVyID09ICJ5IjogfX0KIFhTRVJWRVIgPz0gIiR7WFNFUlZFUl9YODZfQkFTRX0gXApkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gvaTM4Ni9yZWNpcGVzLWtlcm5lbC9saW51eC9maWxlcy9tYWNoaW5lLXN0YW5kYXJkLnNjYyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL2kzODYvcmVjaXBlcy1rZXJuZWwvbGludXgvZmlsZXMvbWFjaGluZS1zdGFuZGFyZC5zY2MKaW5kZXggNjdhNTRiZS4uMzhkMWNhNSAxMDA2NDQKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gvaTM4Ni9yZWNpcGVzLWtlcm5lbC9saW51eC9maWxlcy9tYWNoaW5lLXN0YW5kYXJkLnNjYworKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC9pMzg2L3JlY2lwZXMta2VybmVsL2xpbnV4L2ZpbGVzL21hY2hpbmUtc3RhbmRhcmQuc2NjCkBAIC0zLDcgKzMsNyBAQAogCiBkZWZpbmUgS0FSQ0ggaTM4NgogCi1pbmNsdWRlIHt7PW1hcF9zdGFuZGFyZF9rYnJhbmNoKG5lZWRfbmV3X2ticmFuY2gsIG5ld19rYnJhbmNoLCBleGlzdGluZ19rYnJhbmNoKX19CitpbmNsdWRlIHt7PW1hcF9zdGFuZGFyZF9rYnJhbmNoKG5lZWRfbmV3X2ticmFuY2gsIG5ld19rYnJhbmNoLCBleGlzdGluZ19rYnJhbmNoKX19IG5vcGF0Y2gKIHt7IGlmIG5lZWRfbmV3X2ticmFuY2ggPT0gInkiOiB9fQogZGVmaW5lIEtUWVBFIHt7PW5ld19rYnJhbmNofX0KIGJyYW5jaCB7ez1tYWNoaW5lfX0KZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL2kzODYvcmVjaXBlcy1rZXJuZWwvbGludXgva2VybmVsLWxpc3Qubm9pbnN0YWxsIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gvaTM4Ni9yZWNpcGVzLWtlcm5lbC9saW51eC9rZXJuZWwtbGlzdC5ub2luc3RhbGwKaW5kZXggMDBjZjM2MC4uMDEyMGVkMCAxMDA2NDQKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gvaTM4Ni9yZWNpcGVzLWtlcm5lbC9saW51eC9rZXJuZWwtbGlzdC5ub2luc3RhbGwKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gvaTM4Ni9yZWNpcGVzLWtlcm5lbC9saW51eC9rZXJuZWwtbGlzdC5ub2luc3RhbGwKQEAgLTEsNSArMSw1IEBACiB7eyBpZiBrZXJuZWxfY2hvaWNlICE9ICJjdXN0b20iOiB9fQote3sgaW5wdXQgdHlwZToiYm9vbGVhbiIgbmFtZToidXNlX2RlZmF1bHRfa2VybmVsIiBwcmlvOiIxMCIgbXNnOiJXb3VsZCB5b3UgbGlrZSB0byB1c2UgdGhlIGRlZmF1bHQgKDQuNCkga2VybmVsPyAoeS9uKSIgZGVmYXVsdDoieSJ9fQore3sgaW5wdXQgdHlwZToiYm9vbGVhbiIgbmFtZToidXNlX2RlZmF1bHRfa2VybmVsIiBwcmlvOiIxMCIgbXNnOiJXb3VsZCB5b3UgbGlrZSB0byB1c2UgdGhlIGRlZmF1bHQgKDQuOCkga2VybmVsPyAoeS9uKSIgZGVmYXVsdDoieSJ9fQogCiB7eyBpZiBrZXJuZWxfY2hvaWNlICE9ICJjdXN0b20iIGFuZCB1c2VfZGVmYXVsdF9rZXJuZWwgPT0gIm4iOiB9fQote3sgaW5wdXQgdHlwZToiY2hvaWNlbGlzdCIgbmFtZToia2VybmVsX2Nob2ljZSIgZ2VuOiJic3Aua2VybmVsLmtlcm5lbHMiIHByaW86IjEwIiBtc2c6IlBsZWFzZSBjaG9vc2UgdGhlIGtlcm5lbCB0byB1c2UgaW4gdGhpcyBCU1A6IiBkZWZhdWx0OiJsaW51eC15b2N0b180LjQifX0KK3t7IGlucHV0IHR5cGU6ImNob2ljZWxpc3QiIG5hbWU6Imtlcm5lbF9jaG9pY2UiIGdlbjoiYnNwLmtlcm5lbC5rZXJuZWxzIiBwcmlvOiIxMCIgbXNnOiJQbGVhc2UgY2hvb3NlIHRoZSBrZXJuZWwgdG8gdXNlIGluIHRoaXMgQlNQOiIgZGVmYXVsdDoibGludXgteW9jdG9fNC44In19CmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC9pMzg2L3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LXlvY3RvLXRpbnlfNC44LmJiYXBwZW5kIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gvaTM4Ni9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC15b2N0by10aW55XzQuOC5iYmFwcGVuZApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ZmI0NWQ5Ci0tLSAvZGV2L251bGwKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gvaTM4Ni9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC15b2N0by10aW55XzQuOC5iYmFwcGVuZApAQCAtMCwwICsxLDMzIEBACisjIHlvY3RvLWJzcC1maWxlbmFtZSB7eyBpZiBrZXJuZWxfY2hvaWNlID09ICJsaW51eC15b2N0by10aW55XzQuOCI6IH19IHRoaXMKK0ZJTEVTRVhUUkFQQVRIU19wcmVwZW5kIDo9ICIke1RISVNESVJ9L2ZpbGVzOiIKKworUFIgOj0gIiR7UFJ9LjEiCisKK0NPTVBBVElCTEVfTUFDSElORV97ez1tYWNoaW5lfX0gPSAie3s9bWFjaGluZX19IgorCit7eyBpbnB1dCB0eXBlOiJib29sZWFuIiBuYW1lOiJuZWVkX25ld19rYnJhbmNoIiBwcmlvOiIyMCIgbXNnOiJEbyB5b3UgbmVlZCBhIG5ldyBtYWNoaW5lIGJyYW5jaCBmb3IgdGhpcyBCU1AgKHRoZSBhbHRlcm5hdGl2ZSBpcyB0byByZS11c2UgYW4gZXhpc3RpbmcgYnJhbmNoKT8gW3kvbl0iIGRlZmF1bHQ6InkiIH19CisKK3t7IGlmIG5lZWRfbmV3X2ticmFuY2ggPT0gInkiOiB9fQore3sgaW5wdXQgdHlwZToiY2hvaWNlbGlzdCIgbmFtZToibmV3X2ticmFuY2giIGdlbjoiYnNwLmtlcm5lbC5hbGxfYnJhbmNoZXMiIGJyYW5jaGVzX2Jhc2U6InN0YW5kYXJkL3RpbnkiIHByaW86IjIwIiBtc2c6IlBsZWFzZSBjaG9vc2UgYSBtYWNoaW5lIGJyYW5jaCB0byBiYXNlIHRoaXMgQlNQIG9uOiIgZGVmYXVsdDoic3RhbmRhcmQvdGlueS9iYXNlIiB9fQorCit7eyBpZiBuZWVkX25ld19rYnJhbmNoID09ICJuIjogfX0KK3t7IGlucHV0IHR5cGU6ImNob2ljZWxpc3QiIG5hbWU6ImV4aXN0aW5nX2ticmFuY2giIGdlbjoiYnNwLmtlcm5lbC5hbGxfYnJhbmNoZXMiIGJyYW5jaGVzX2Jhc2U6InN0YW5kYXJkL3RpbnkiIHByaW86IjIwIiBtc2c6IlBsZWFzZSBjaG9vc2UgYSBtYWNoaW5lIGJyYW5jaCB0byBiYXNlIHRoaXMgQlNQIG9uOiIgZGVmYXVsdDoic3RhbmRhcmQvdGlueS9iYXNlIiB9fQorCit7eyBpZiBuZWVkX25ld19rYnJhbmNoID09ICJuIjogfX0KK0tCUkFOQ0hfe3s9bWFjaGluZX19ICA9ICJ7ez1leGlzdGluZ19rYnJhbmNofX0iCisKK3t7IGlucHV0IHR5cGU6ImJvb2xlYW4iIG5hbWU6InNtcCIgcHJpbzoiMzAiIG1zZzoiRG8geW91IG5lZWQgU01QIHN1cHBvcnQ/ICh5L24pIiBkZWZhdWx0OiJ5In19Cit7eyBpZiBzbXAgPT0gInkiOiB9fQorS0VSTkVMX0ZFQVRVUkVTX2FwcGVuZF97ez1tYWNoaW5lfX0gKz0gIiBjZmcvc21wLnNjYyIKKworU1JDX1VSSSArPSAiZmlsZTovL3t7PW1hY2hpbmV9fS10aW55LnNjYyBcCisgICAgICAgICAgICBmaWxlOi8ve3s9bWFjaGluZX19LXVzZXItY29uZmlnLmNmZyBcCisgICAgICAgICAgICBmaWxlOi8ve3s9bWFjaGluZX19LXVzZXItcGF0Y2hlcy5zY2MgXAorICAgICAgICAgICAgZmlsZTovL3t7PW1hY2hpbmV9fS11c2VyLWZlYXR1cmVzLnNjYyBcCisgICAgICAgICAgICIKKworIyByZXBsYWNlIHRoZXNlIFNSQ1JFVnMgd2l0aCB0aGUgcmVhbCBjb21taXQgaWRzIG9uY2UgeW91J3ZlIGhhZAorIyB0aGUgYXBwcm9wcmlhdGUgY2hhbmdlcyBjb21taXR0ZWQgdG8gdGhlIHVwc3RyZWFtIGxpbnV4LXlvY3RvIHJlcG8KK1NSQ1JFVl9tYWNoaW5lX3BuLWxpbnV4LXlvY3RvLXRpbnlfe3s9bWFjaGluZX19ID89ICIke0FVVE9SRVZ9IgorU1JDUkVWX21ldGFfcG4tbGludXgteW9jdG8tdGlueV97ez1tYWNoaW5lfX0gPz0gIiR7QVVUT1JFVn0iCisjTElOVVhfVkVSU0lPTiA9ICI0LjgiCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC9pMzg2L3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LXlvY3RvXzQuOC5iYmFwcGVuZCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL2kzODYvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgteW9jdG9fNC44LmJiYXBwZW5kCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjEzN2Q4ZmEKLS0tIC9kZXYvbnVsbAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC9pMzg2L3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LXlvY3RvXzQuOC5iYmFwcGVuZApAQCAtMCwwICsxLDMyIEBACisjIHlvY3RvLWJzcC1maWxlbmFtZSB7eyBpZiBrZXJuZWxfY2hvaWNlID09ICJsaW51eC15b2N0b180LjgiOiB9fSB0aGlzCitGSUxFU0VYVFJBUEFUSFNfcHJlcGVuZCA6PSAiJHtUSElTRElSfS9maWxlczoiCisKK1BSIDo9ICIke1BSfS4xIgorCitDT01QQVRJQkxFX01BQ0hJTkVfe3s9bWFjaGluZX19ID0gInt7PW1hY2hpbmV9fSIKKwore3sgaW5wdXQgdHlwZToiYm9vbGVhbiIgbmFtZToibmVlZF9uZXdfa2JyYW5jaCIgcHJpbzoiMjAiIG1zZzoiRG8geW91IG5lZWQgYSBuZXcgbWFjaGluZSBicmFuY2ggZm9yIHRoaXMgQlNQICh0aGUgYWx0ZXJuYXRpdmUgaXMgdG8gcmUtdXNlIGFuIGV4aXN0aW5nIGJyYW5jaCk/IFt5L25dIiBkZWZhdWx0OiJ5IiB9fQorCit7eyBpZiBuZWVkX25ld19rYnJhbmNoID09ICJ5IjogfX0KK3t7IGlucHV0IHR5cGU6ImNob2ljZWxpc3QiIG5hbWU6Im5ld19rYnJhbmNoIiBnZW46ImJzcC5rZXJuZWwuYWxsX2JyYW5jaGVzIiBicmFuY2hlc19iYXNlOiJzdGFuZGFyZDpzdGFuZGFyZCIgcHJpbzoiMjAiIG1zZzoiUGxlYXNlIGNob29zZSBhIG1hY2hpbmUgYnJhbmNoIHRvIGJhc2UgdGhpcyBCU1Agb246IiBkZWZhdWx0OiJzdGFuZGFyZC9iYXNlIiB9fQorCit7eyBpZiBuZWVkX25ld19rYnJhbmNoID09ICJuIjogfX0KK3t7IGlucHV0IHR5cGU6ImNob2ljZWxpc3QiIG5hbWU6ImV4aXN0aW5nX2ticmFuY2giIGdlbjoiYnNwLmtlcm5lbC5hbGxfYnJhbmNoZXMiIGJyYW5jaGVzX2Jhc2U6InN0YW5kYXJkOnN0YW5kYXJkIiBwcmlvOiIyMCIgbXNnOiJQbGVhc2UgY2hvb3NlIGEgbWFjaGluZSBicmFuY2ggdG8gYmFzZSB0aGlzIEJTUCBvbjoiIGRlZmF1bHQ6InN0YW5kYXJkL2Jhc2UiIH19CisKK3t7IGlmIG5lZWRfbmV3X2ticmFuY2ggPT0gIm4iOiB9fQorS0JSQU5DSF97ez1tYWNoaW5lfX0gID0gInt7PWV4aXN0aW5nX2ticmFuY2h9fSIKKwore3sgaW5wdXQgdHlwZToiYm9vbGVhbiIgbmFtZToic21wIiBwcmlvOiIzMCIgbXNnOiJEbyB5b3UgbmVlZCBTTVAgc3VwcG9ydD8gKHkvbikiIGRlZmF1bHQ6InkifX0KK3t7IGlmIHNtcCA9PSAieSI6IH19CitLRVJORUxfRkVBVFVSRVNfYXBwZW5kX3t7PW1hY2hpbmV9fSArPSAiIGNmZy9zbXAuc2NjIgorCitTUkNfVVJJICs9ICJmaWxlOi8ve3s9bWFjaGluZX19LXN0YW5kYXJkLnNjYyBcCisgICAgICAgICAgICBmaWxlOi8ve3s9bWFjaGluZX19LXVzZXItY29uZmlnLmNmZyBcCisgICAgICAgICAgICBmaWxlOi8ve3s9bWFjaGluZX19LXVzZXItZmVhdHVyZXMuc2NjIFwKKyAgICAgICAgICAgIgorCisjIHJlcGxhY2UgdGhlc2UgU1JDUkVWcyB3aXRoIHRoZSByZWFsIGNvbW1pdCBpZHMgb25jZSB5b3UndmUgaGFkCisjIHRoZSBhcHByb3ByaWF0ZSBjaGFuZ2VzIGNvbW1pdHRlZCB0byB0aGUgdXBzdHJlYW0gbGludXgteW9jdG8gcmVwbworU1JDUkVWX21hY2hpbmVfcG4tbGludXgteW9jdG9fe3s9bWFjaGluZX19ID89ICIke0FVVE9SRVZ9IgorU1JDUkVWX21ldGFfcG4tbGludXgteW9jdG9fe3s9bWFjaGluZX19ID89ICIke0FVVE9SRVZ9IgorI0xJTlVYX1ZFUlNJT04gPSAiNC44IgpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gvbWlwcy9yZWNpcGVzLWtlcm5lbC9saW51eC9maWxlcy9tYWNoaW5lLXN0YW5kYXJkLnNjYyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL21pcHMvcmVjaXBlcy1rZXJuZWwvbGludXgvZmlsZXMvbWFjaGluZS1zdGFuZGFyZC5zY2MKaW5kZXggN2M5ZGM1Mi4uYjM0ZjNkMyAxMDA2NDQKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gvbWlwcy9yZWNpcGVzLWtlcm5lbC9saW51eC9maWxlcy9tYWNoaW5lLXN0YW5kYXJkLnNjYworKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC9taXBzL3JlY2lwZXMta2VybmVsL2xpbnV4L2ZpbGVzL21hY2hpbmUtc3RhbmRhcmQuc2NjCkBAIC0zLDcgKzMsNyBAQAogCiBkZWZpbmUgS0FSQ0ggbWlwcwogCi1pbmNsdWRlIHt7PW1hcF9zdGFuZGFyZF9rYnJhbmNoKG5lZWRfbmV3X2ticmFuY2gsIG5ld19rYnJhbmNoLCBleGlzdGluZ19rYnJhbmNoKX19CitpbmNsdWRlIHt7PW1hcF9zdGFuZGFyZF9rYnJhbmNoKG5lZWRfbmV3X2ticmFuY2gsIG5ld19rYnJhbmNoLCBleGlzdGluZ19rYnJhbmNoKX19IG5vcGF0Y2gKIHt7IGlmIG5lZWRfbmV3X2ticmFuY2ggPT0gInkiOiB9fQogZGVmaW5lIEtUWVBFIHt7PW5ld19rYnJhbmNofX0KIGJyYW5jaCB7ez1tYWNoaW5lfX0KZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL21pcHMvcmVjaXBlcy1rZXJuZWwvbGludXgva2VybmVsLWxpc3Qubm9pbnN0YWxsIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gvbWlwcy9yZWNpcGVzLWtlcm5lbC9saW51eC9rZXJuZWwtbGlzdC5ub2luc3RhbGwKaW5kZXggMDBjZjM2MC4uMDEyMGVkMCAxMDA2NDQKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gvbWlwcy9yZWNpcGVzLWtlcm5lbC9saW51eC9rZXJuZWwtbGlzdC5ub2luc3RhbGwKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gvbWlwcy9yZWNpcGVzLWtlcm5lbC9saW51eC9rZXJuZWwtbGlzdC5ub2luc3RhbGwKQEAgLTEsNSArMSw1IEBACiB7eyBpZiBrZXJuZWxfY2hvaWNlICE9ICJjdXN0b20iOiB9fQote3sgaW5wdXQgdHlwZToiYm9vbGVhbiIgbmFtZToidXNlX2RlZmF1bHRfa2VybmVsIiBwcmlvOiIxMCIgbXNnOiJXb3VsZCB5b3UgbGlrZSB0byB1c2UgdGhlIGRlZmF1bHQgKDQuNCkga2VybmVsPyAoeS9uKSIgZGVmYXVsdDoieSJ9fQore3sgaW5wdXQgdHlwZToiYm9vbGVhbiIgbmFtZToidXNlX2RlZmF1bHRfa2VybmVsIiBwcmlvOiIxMCIgbXNnOiJXb3VsZCB5b3UgbGlrZSB0byB1c2UgdGhlIGRlZmF1bHQgKDQuOCkga2VybmVsPyAoeS9uKSIgZGVmYXVsdDoieSJ9fQogCiB7eyBpZiBrZXJuZWxfY2hvaWNlICE9ICJjdXN0b20iIGFuZCB1c2VfZGVmYXVsdF9rZXJuZWwgPT0gIm4iOiB9fQote3sgaW5wdXQgdHlwZToiY2hvaWNlbGlzdCIgbmFtZToia2VybmVsX2Nob2ljZSIgZ2VuOiJic3Aua2VybmVsLmtlcm5lbHMiIHByaW86IjEwIiBtc2c6IlBsZWFzZSBjaG9vc2UgdGhlIGtlcm5lbCB0byB1c2UgaW4gdGhpcyBCU1A6IiBkZWZhdWx0OiJsaW51eC15b2N0b180LjQifX0KK3t7IGlucHV0IHR5cGU6ImNob2ljZWxpc3QiIG5hbWU6Imtlcm5lbF9jaG9pY2UiIGdlbjoiYnNwLmtlcm5lbC5rZXJuZWxzIiBwcmlvOiIxMCIgbXNnOiJQbGVhc2UgY2hvb3NlIHRoZSBrZXJuZWwgdG8gdXNlIGluIHRoaXMgQlNQOiIgZGVmYXVsdDoibGludXgteW9jdG9fNC44In19CmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC9taXBzL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LXlvY3RvLXRpbnlfNC44LmJiYXBwZW5kIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gvbWlwcy9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC15b2N0by10aW55XzQuOC5iYmFwcGVuZApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ZmI0NWQ5Ci0tLSAvZGV2L251bGwKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gvbWlwcy9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC15b2N0by10aW55XzQuOC5iYmFwcGVuZApAQCAtMCwwICsxLDMzIEBACisjIHlvY3RvLWJzcC1maWxlbmFtZSB7eyBpZiBrZXJuZWxfY2hvaWNlID09ICJsaW51eC15b2N0by10aW55XzQuOCI6IH19IHRoaXMKK0ZJTEVTRVhUUkFQQVRIU19wcmVwZW5kIDo9ICIke1RISVNESVJ9L2ZpbGVzOiIKKworUFIgOj0gIiR7UFJ9LjEiCisKK0NPTVBBVElCTEVfTUFDSElORV97ez1tYWNoaW5lfX0gPSAie3s9bWFjaGluZX19IgorCit7eyBpbnB1dCB0eXBlOiJib29sZWFuIiBuYW1lOiJuZWVkX25ld19rYnJhbmNoIiBwcmlvOiIyMCIgbXNnOiJEbyB5b3UgbmVlZCBhIG5ldyBtYWNoaW5lIGJyYW5jaCBmb3IgdGhpcyBCU1AgKHRoZSBhbHRlcm5hdGl2ZSBpcyB0byByZS11c2UgYW4gZXhpc3RpbmcgYnJhbmNoKT8gW3kvbl0iIGRlZmF1bHQ6InkiIH19CisKK3t7IGlmIG5lZWRfbmV3X2ticmFuY2ggPT0gInkiOiB9fQore3sgaW5wdXQgdHlwZToiY2hvaWNlbGlzdCIgbmFtZToibmV3X2ticmFuY2giIGdlbjoiYnNwLmtlcm5lbC5hbGxfYnJhbmNoZXMiIGJyYW5jaGVzX2Jhc2U6InN0YW5kYXJkL3RpbnkiIHByaW86IjIwIiBtc2c6IlBsZWFzZSBjaG9vc2UgYSBtYWNoaW5lIGJyYW5jaCB0byBiYXNlIHRoaXMgQlNQIG9uOiIgZGVmYXVsdDoic3RhbmRhcmQvdGlueS9iYXNlIiB9fQorCit7eyBpZiBuZWVkX25ld19rYnJhbmNoID09ICJuIjogfX0KK3t7IGlucHV0IHR5cGU6ImNob2ljZWxpc3QiIG5hbWU6ImV4aXN0aW5nX2ticmFuY2giIGdlbjoiYnNwLmtlcm5lbC5hbGxfYnJhbmNoZXMiIGJyYW5jaGVzX2Jhc2U6InN0YW5kYXJkL3RpbnkiIHByaW86IjIwIiBtc2c6IlBsZWFzZSBjaG9vc2UgYSBtYWNoaW5lIGJyYW5jaCB0byBiYXNlIHRoaXMgQlNQIG9uOiIgZGVmYXVsdDoic3RhbmRhcmQvdGlueS9iYXNlIiB9fQorCit7eyBpZiBuZWVkX25ld19rYnJhbmNoID09ICJuIjogfX0KK0tCUkFOQ0hfe3s9bWFjaGluZX19ICA9ICJ7ez1leGlzdGluZ19rYnJhbmNofX0iCisKK3t7IGlucHV0IHR5cGU6ImJvb2xlYW4iIG5hbWU6InNtcCIgcHJpbzoiMzAiIG1zZzoiRG8geW91IG5lZWQgU01QIHN1cHBvcnQ/ICh5L24pIiBkZWZhdWx0OiJ5In19Cit7eyBpZiBzbXAgPT0gInkiOiB9fQorS0VSTkVMX0ZFQVRVUkVTX2FwcGVuZF97ez1tYWNoaW5lfX0gKz0gIiBjZmcvc21wLnNjYyIKKworU1JDX1VSSSArPSAiZmlsZTovL3t7PW1hY2hpbmV9fS10aW55LnNjYyBcCisgICAgICAgICAgICBmaWxlOi8ve3s9bWFjaGluZX19LXVzZXItY29uZmlnLmNmZyBcCisgICAgICAgICAgICBmaWxlOi8ve3s9bWFjaGluZX19LXVzZXItcGF0Y2hlcy5zY2MgXAorICAgICAgICAgICAgZmlsZTovL3t7PW1hY2hpbmV9fS11c2VyLWZlYXR1cmVzLnNjYyBcCisgICAgICAgICAgICIKKworIyByZXBsYWNlIHRoZXNlIFNSQ1JFVnMgd2l0aCB0aGUgcmVhbCBjb21taXQgaWRzIG9uY2UgeW91J3ZlIGhhZAorIyB0aGUgYXBwcm9wcmlhdGUgY2hhbmdlcyBjb21taXR0ZWQgdG8gdGhlIHVwc3RyZWFtIGxpbnV4LXlvY3RvIHJlcG8KK1NSQ1JFVl9tYWNoaW5lX3BuLWxpbnV4LXlvY3RvLXRpbnlfe3s9bWFjaGluZX19ID89ICIke0FVVE9SRVZ9IgorU1JDUkVWX21ldGFfcG4tbGludXgteW9jdG8tdGlueV97ez1tYWNoaW5lfX0gPz0gIiR7QVVUT1JFVn0iCisjTElOVVhfVkVSU0lPTiA9ICI0LjgiCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC9taXBzL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LXlvY3RvXzQuOC5iYmFwcGVuZCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL21pcHMvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgteW9jdG9fNC44LmJiYXBwZW5kCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdjMGRmOGIKLS0tIC9kZXYvbnVsbAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC9taXBzL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LXlvY3RvXzQuOC5iYmFwcGVuZApAQCAtMCwwICsxLDMyIEBACisjIHlvY3RvLWJzcC1maWxlbmFtZSB7eyBpZiBrZXJuZWxfY2hvaWNlID09ICJsaW51eC15b2N0b180LjgiOiB9fSB0aGlzCitGSUxFU0VYVFJBUEFUSFNfcHJlcGVuZCA6PSAiJHtUSElTRElSfS9maWxlczoiCisKK1BSIDo9ICIke1BSfS4xIgorCitDT01QQVRJQkxFX01BQ0hJTkVfe3s9bWFjaGluZX19ID0gInt7PW1hY2hpbmV9fSIKKwore3sgaW5wdXQgdHlwZToiYm9vbGVhbiIgbmFtZToibmVlZF9uZXdfa2JyYW5jaCIgcHJpbzoiMjAiIG1zZzoiRG8geW91IG5lZWQgYSBuZXcgbWFjaGluZSBicmFuY2ggZm9yIHRoaXMgQlNQICh0aGUgYWx0ZXJuYXRpdmUgaXMgdG8gcmUtdXNlIGFuIGV4aXN0aW5nIGJyYW5jaCk/IFt5L25dIiBkZWZhdWx0OiJ5IiB9fQorCit7eyBpZiBuZWVkX25ld19rYnJhbmNoID09ICJ5IjogfX0KK3t7IGlucHV0IHR5cGU6ImNob2ljZWxpc3QiIG5hbWU6Im5ld19rYnJhbmNoIiBnZW46ImJzcC5rZXJuZWwuYWxsX2JyYW5jaGVzIiBicmFuY2hlc19iYXNlOiJzdGFuZGFyZCIgcHJpbzoiMjAiIG1zZzoiUGxlYXNlIGNob29zZSBhIG1hY2hpbmUgYnJhbmNoIHRvIGJhc2UgdGhpcyBCU1Agb246IiBkZWZhdWx0OiJzdGFuZGFyZC9iYXNlIiB9fQorCit7eyBpZiBuZWVkX25ld19rYnJhbmNoID09ICJuIjogfX0KK3t7IGlucHV0IHR5cGU6ImNob2ljZWxpc3QiIG5hbWU6ImV4aXN0aW5nX2ticmFuY2giIGdlbjoiYnNwLmtlcm5lbC5hbGxfYnJhbmNoZXMiIGJyYW5jaGVzX2Jhc2U6InN0YW5kYXJkIiBwcmlvOiIyMCIgbXNnOiJQbGVhc2UgY2hvb3NlIGEgbWFjaGluZSBicmFuY2ggdG8gYmFzZSB0aGlzIEJTUCBvbjoiIGRlZmF1bHQ6InN0YW5kYXJkL2Jhc2UiIH19CisKK3t7IGlmIG5lZWRfbmV3X2ticmFuY2ggPT0gIm4iOiB9fQorS0JSQU5DSF97ez1tYWNoaW5lfX0gID0gInt7PWV4aXN0aW5nX2ticmFuY2h9fSIKKwore3sgaW5wdXQgdHlwZToiYm9vbGVhbiIgbmFtZToic21wIiBwcmlvOiIzMCIgbXNnOiJEbyB5b3UgbmVlZCBTTVAgc3VwcG9ydD8gKHkvbikiIGRlZmF1bHQ6InkifX0KK3t7IGlmIHNtcCA9PSAieSI6IH19CitLRVJORUxfRkVBVFVSRVNfYXBwZW5kX3t7PW1hY2hpbmV9fSArPSAiIGNmZy9zbXAuc2NjIgorCitTUkNfVVJJICs9ICJmaWxlOi8ve3s9bWFjaGluZX19LXN0YW5kYXJkLnNjYyBcCisgICAgICAgICAgICBmaWxlOi8ve3s9bWFjaGluZX19LXVzZXItY29uZmlnLmNmZyBcCisgICAgICAgICAgICBmaWxlOi8ve3s9bWFjaGluZX19LXVzZXItZmVhdHVyZXMuc2NjIFwKKyAgICAgICAgICAgIgorCisjIHJlcGxhY2UgdGhlc2UgU1JDUkVWcyB3aXRoIHRoZSByZWFsIGNvbW1pdCBpZHMgb25jZSB5b3UndmUgaGFkCisjIHRoZSBhcHByb3ByaWF0ZSBjaGFuZ2VzIGNvbW1pdHRlZCB0byB0aGUgdXBzdHJlYW0gbGludXgteW9jdG8gcmVwbworU1JDUkVWX21hY2hpbmVfcG4tbGludXgteW9jdG9fe3s9bWFjaGluZX19ID89ICIke0FVVE9SRVZ9IgorU1JDUkVWX21ldGFfcG4tbGludXgteW9jdG9fe3s9bWFjaGluZX19ID89ICIke0FVVE9SRVZ9IgorI0xJTlVYX1ZFUlNJT04gPSAiNC44IgpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gvbWlwczY0L3JlY2lwZXMta2VybmVsL2xpbnV4L2ZpbGVzL21hY2hpbmUtc3RhbmRhcmQuc2NjIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gvbWlwczY0L3JlY2lwZXMta2VybmVsL2xpbnV4L2ZpbGVzL21hY2hpbmUtc3RhbmRhcmQuc2NjCmluZGV4IDdjOWRjNTIuLmIzNGYzZDMgMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL21pcHM2NC9yZWNpcGVzLWtlcm5lbC9saW51eC9maWxlcy9tYWNoaW5lLXN0YW5kYXJkLnNjYworKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC9taXBzNjQvcmVjaXBlcy1rZXJuZWwvbGludXgvZmlsZXMvbWFjaGluZS1zdGFuZGFyZC5zY2MKQEAgLTMsNyArMyw3IEBACiAKIGRlZmluZSBLQVJDSCBtaXBzCiAKLWluY2x1ZGUge3s9bWFwX3N0YW5kYXJkX2ticmFuY2gobmVlZF9uZXdfa2JyYW5jaCwgbmV3X2ticmFuY2gsIGV4aXN0aW5nX2ticmFuY2gpfX0KK2luY2x1ZGUge3s9bWFwX3N0YW5kYXJkX2ticmFuY2gobmVlZF9uZXdfa2JyYW5jaCwgbmV3X2ticmFuY2gsIGV4aXN0aW5nX2ticmFuY2gpfX0gbm9wYXRjaAoge3sgaWYgbmVlZF9uZXdfa2JyYW5jaCA9PSAieSI6IH19CiBkZWZpbmUgS1RZUEUge3s9bmV3X2ticmFuY2h9fQogYnJhbmNoIHt7PW1hY2hpbmV9fQpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gvbWlwczY0L3JlY2lwZXMta2VybmVsL2xpbnV4L2tlcm5lbC1saXN0Lm5vaW5zdGFsbCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL21pcHM2NC9yZWNpcGVzLWtlcm5lbC9saW51eC9rZXJuZWwtbGlzdC5ub2luc3RhbGwKaW5kZXggMDBjZjM2MC4uMDEyMGVkMCAxMDA2NDQKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gvbWlwczY0L3JlY2lwZXMta2VybmVsL2xpbnV4L2tlcm5lbC1saXN0Lm5vaW5zdGFsbAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC9taXBzNjQvcmVjaXBlcy1rZXJuZWwvbGludXgva2VybmVsLWxpc3Qubm9pbnN0YWxsCkBAIC0xLDUgKzEsNSBAQAoge3sgaWYga2VybmVsX2Nob2ljZSAhPSAiY3VzdG9tIjogfX0KLXt7IGlucHV0IHR5cGU6ImJvb2xlYW4iIG5hbWU6InVzZV9kZWZhdWx0X2tlcm5lbCIgcHJpbzoiMTAiIG1zZzoiV291bGQgeW91IGxpa2UgdG8gdXNlIHRoZSBkZWZhdWx0ICg0LjQpIGtlcm5lbD8gKHkvbikiIGRlZmF1bHQ6InkifX0KK3t7IGlucHV0IHR5cGU6ImJvb2xlYW4iIG5hbWU6InVzZV9kZWZhdWx0X2tlcm5lbCIgcHJpbzoiMTAiIG1zZzoiV291bGQgeW91IGxpa2UgdG8gdXNlIHRoZSBkZWZhdWx0ICg0LjgpIGtlcm5lbD8gKHkvbikiIGRlZmF1bHQ6InkifX0KIAoge3sgaWYga2VybmVsX2Nob2ljZSAhPSAiY3VzdG9tIiBhbmQgdXNlX2RlZmF1bHRfa2VybmVsID09ICJuIjogfX0KLXt7IGlucHV0IHR5cGU6ImNob2ljZWxpc3QiIG5hbWU6Imtlcm5lbF9jaG9pY2UiIGdlbjoiYnNwLmtlcm5lbC5rZXJuZWxzIiBwcmlvOiIxMCIgbXNnOiJQbGVhc2UgY2hvb3NlIHRoZSBrZXJuZWwgdG8gdXNlIGluIHRoaXMgQlNQOiIgZGVmYXVsdDoibGludXgteW9jdG9fNC40In19Cit7eyBpbnB1dCB0eXBlOiJjaG9pY2VsaXN0IiBuYW1lOiJrZXJuZWxfY2hvaWNlIiBnZW46ImJzcC5rZXJuZWwua2VybmVscyIgcHJpbzoiMTAiIG1zZzoiUGxlYXNlIGNob29zZSB0aGUga2VybmVsIHRvIHVzZSBpbiB0aGlzIEJTUDoiIGRlZmF1bHQ6ImxpbnV4LXlvY3RvXzQuOCJ9fQpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gvbWlwczY0L3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LXlvY3RvLXRpbnlfNC44LmJiYXBwZW5kIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gvbWlwczY0L3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LXlvY3RvLXRpbnlfNC44LmJiYXBwZW5kCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVmYjQ1ZDkKLS0tIC9kZXYvbnVsbAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC9taXBzNjQvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgteW9jdG8tdGlueV80LjguYmJhcHBlbmQKQEAgLTAsMCArMSwzMyBAQAorIyB5b2N0by1ic3AtZmlsZW5hbWUge3sgaWYga2VybmVsX2Nob2ljZSA9PSAibGludXgteW9jdG8tdGlueV80LjgiOiB9fSB0aGlzCitGSUxFU0VYVFJBUEFUSFNfcHJlcGVuZCA6PSAiJHtUSElTRElSfS9maWxlczoiCisKK1BSIDo9ICIke1BSfS4xIgorCitDT01QQVRJQkxFX01BQ0hJTkVfe3s9bWFjaGluZX19ID0gInt7PW1hY2hpbmV9fSIKKwore3sgaW5wdXQgdHlwZToiYm9vbGVhbiIgbmFtZToibmVlZF9uZXdfa2JyYW5jaCIgcHJpbzoiMjAiIG1zZzoiRG8geW91IG5lZWQgYSBuZXcgbWFjaGluZSBicmFuY2ggZm9yIHRoaXMgQlNQICh0aGUgYWx0ZXJuYXRpdmUgaXMgdG8gcmUtdXNlIGFuIGV4aXN0aW5nIGJyYW5jaCk/IFt5L25dIiBkZWZhdWx0OiJ5IiB9fQorCit7eyBpZiBuZWVkX25ld19rYnJhbmNoID09ICJ5IjogfX0KK3t7IGlucHV0IHR5cGU6ImNob2ljZWxpc3QiIG5hbWU6Im5ld19rYnJhbmNoIiBnZW46ImJzcC5rZXJuZWwuYWxsX2JyYW5jaGVzIiBicmFuY2hlc19iYXNlOiJzdGFuZGFyZC90aW55IiBwcmlvOiIyMCIgbXNnOiJQbGVhc2UgY2hvb3NlIGEgbWFjaGluZSBicmFuY2ggdG8gYmFzZSB0aGlzIEJTUCBvbjoiIGRlZmF1bHQ6InN0YW5kYXJkL3RpbnkvYmFzZSIgfX0KKwore3sgaWYgbmVlZF9uZXdfa2JyYW5jaCA9PSAibiI6IH19Cit7eyBpbnB1dCB0eXBlOiJjaG9pY2VsaXN0IiBuYW1lOiJleGlzdGluZ19rYnJhbmNoIiBnZW46ImJzcC5rZXJuZWwuYWxsX2JyYW5jaGVzIiBicmFuY2hlc19iYXNlOiJzdGFuZGFyZC90aW55IiBwcmlvOiIyMCIgbXNnOiJQbGVhc2UgY2hvb3NlIGEgbWFjaGluZSBicmFuY2ggdG8gYmFzZSB0aGlzIEJTUCBvbjoiIGRlZmF1bHQ6InN0YW5kYXJkL3RpbnkvYmFzZSIgfX0KKwore3sgaWYgbmVlZF9uZXdfa2JyYW5jaCA9PSAibiI6IH19CitLQlJBTkNIX3t7PW1hY2hpbmV9fSAgPSAie3s9ZXhpc3Rpbmdfa2JyYW5jaH19IgorCit7eyBpbnB1dCB0eXBlOiJib29sZWFuIiBuYW1lOiJzbXAiIHByaW86IjMwIiBtc2c6IkRvIHlvdSBuZWVkIFNNUCBzdXBwb3J0PyAoeS9uKSIgZGVmYXVsdDoieSJ9fQore3sgaWYgc21wID09ICJ5IjogfX0KK0tFUk5FTF9GRUFUVVJFU19hcHBlbmRfe3s9bWFjaGluZX19ICs9ICIgY2ZnL3NtcC5zY2MiCisKK1NSQ19VUkkgKz0gImZpbGU6Ly97ez1tYWNoaW5lfX0tdGlueS5zY2MgXAorICAgICAgICAgICAgZmlsZTovL3t7PW1hY2hpbmV9fS11c2VyLWNvbmZpZy5jZmcgXAorICAgICAgICAgICAgZmlsZTovL3t7PW1hY2hpbmV9fS11c2VyLXBhdGNoZXMuc2NjIFwKKyAgICAgICAgICAgIGZpbGU6Ly97ez1tYWNoaW5lfX0tdXNlci1mZWF0dXJlcy5zY2MgXAorICAgICAgICAgICAiCisKKyMgcmVwbGFjZSB0aGVzZSBTUkNSRVZzIHdpdGggdGhlIHJlYWwgY29tbWl0IGlkcyBvbmNlIHlvdSd2ZSBoYWQKKyMgdGhlIGFwcHJvcHJpYXRlIGNoYW5nZXMgY29tbWl0dGVkIHRvIHRoZSB1cHN0cmVhbSBsaW51eC15b2N0byByZXBvCitTUkNSRVZfbWFjaGluZV9wbi1saW51eC15b2N0by10aW55X3t7PW1hY2hpbmV9fSA/PSAiJHtBVVRPUkVWfSIKK1NSQ1JFVl9tZXRhX3BuLWxpbnV4LXlvY3RvLXRpbnlfe3s9bWFjaGluZX19ID89ICIke0FVVE9SRVZ9IgorI0xJTlVYX1ZFUlNJT04gPSAiNC44IgpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gvbWlwczY0L3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LXlvY3RvXzQuOC5iYmFwcGVuZCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL21pcHM2NC9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC15b2N0b180LjguYmJhcHBlbmQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWNjZjlkNQotLS0gL2Rldi9udWxsCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL21pcHM2NC9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC15b2N0b180LjguYmJhcHBlbmQKQEAgLTAsMCArMSwzMiBAQAorIyB5b2N0by1ic3AtZmlsZW5hbWUge3sgaWYga2VybmVsX2Nob2ljZSA9PSAibGludXgteW9jdG9fNC44IjogfX0gdGhpcworRklMRVNFWFRSQVBBVEhTX3ByZXBlbmQgOj0gIiR7VEhJU0RJUn0vZmlsZXM6IgorCitQUiA6PSAiJHtQUn0uMSIKKworQ09NUEFUSUJMRV9NQUNISU5FX3t7PW1hY2hpbmV9fSA9ICJ7ez1tYWNoaW5lfX0iCisKK3t7IGlucHV0IHR5cGU6ImJvb2xlYW4iIG5hbWU6Im5lZWRfbmV3X2ticmFuY2giIHByaW86IjIwIiBtc2c6IkRvIHlvdSBuZWVkIGEgbmV3IG1hY2hpbmUgYnJhbmNoIGZvciB0aGlzIEJTUCAodGhlIGFsdGVybmF0aXZlIGlzIHRvIHJlLXVzZSBhbiBleGlzdGluZyBicmFuY2gpPyBbeS9uXSIgZGVmYXVsdDoieSIgfX0KKwore3sgaWYgbmVlZF9uZXdfa2JyYW5jaCA9PSAieSI6IH19Cit7eyBpbnB1dCB0eXBlOiJjaG9pY2VsaXN0IiBuYW1lOiJuZXdfa2JyYW5jaCIgZ2VuOiJic3Aua2VybmVsLmFsbF9icmFuY2hlcyIgYnJhbmNoZXNfYmFzZToic3RhbmRhcmQiIHByaW86IjIwIiBtc2c6IlBsZWFzZSBjaG9vc2UgYSBtYWNoaW5lIGJyYW5jaCB0byBiYXNlIHRoaXMgQlNQIG9uOiIgZGVmYXVsdDoic3RhbmRhcmQvZWRnZXJvdXRlciIgfX0KKwore3sgaWYgbmVlZF9uZXdfa2JyYW5jaCA9PSAibiI6IH19Cit7eyBpbnB1dCB0eXBlOiJjaG9pY2VsaXN0IiBuYW1lOiJleGlzdGluZ19rYnJhbmNoIiBnZW46ImJzcC5rZXJuZWwuYWxsX2JyYW5jaGVzIiBicmFuY2hlc19iYXNlOiJzdGFuZGFyZCIgcHJpbzoiMjAiIG1zZzoiUGxlYXNlIGNob29zZSBhIG1hY2hpbmUgYnJhbmNoIHRvIGJhc2UgdGhpcyBCU1Agb246IiBkZWZhdWx0OiJzdGFuZGFyZC9lZGdlcm91dGVyIiB9fQorCit7eyBpZiBuZWVkX25ld19rYnJhbmNoID09ICJuIjogfX0KK0tCUkFOQ0hfe3s9bWFjaGluZX19ICA9ICJ7ez1leGlzdGluZ19rYnJhbmNofX0iCisKK3t7IGlucHV0IHR5cGU6ImJvb2xlYW4iIG5hbWU6InNtcCIgcHJpbzoiMzAiIG1zZzoiRG8geW91IG5lZWQgU01QIHN1cHBvcnQ/ICh5L24pIiBkZWZhdWx0OiJ5In19Cit7eyBpZiBzbXAgPT0gInkiOiB9fQorS0VSTkVMX0ZFQVRVUkVTX2FwcGVuZF97ez1tYWNoaW5lfX0gKz0gIiBjZmcvc21wLnNjYyIKKworU1JDX1VSSSArPSAiZmlsZTovL3t7PW1hY2hpbmV9fS1zdGFuZGFyZC5zY2MgXAorICAgICAgICAgICAgZmlsZTovL3t7PW1hY2hpbmV9fS11c2VyLWNvbmZpZy5jZmcgXAorICAgICAgICAgICAgZmlsZTovL3t7PW1hY2hpbmV9fS11c2VyLWZlYXR1cmVzLnNjYyBcCisgICAgICAgICAgICIKKworIyByZXBsYWNlIHRoZXNlIFNSQ1JFVnMgd2l0aCB0aGUgcmVhbCBjb21taXQgaWRzIG9uY2UgeW91J3ZlIGhhZAorIyB0aGUgYXBwcm9wcmlhdGUgY2hhbmdlcyBjb21taXR0ZWQgdG8gdGhlIHVwc3RyZWFtIGxpbnV4LXlvY3RvIHJlcG8KK1NSQ1JFVl9tYWNoaW5lX3BuLWxpbnV4LXlvY3RvX3t7PW1hY2hpbmV9fSA/PSAiJHtBVVRPUkVWfSIKK1NSQ1JFVl9tZXRhX3BuLWxpbnV4LXlvY3RvX3t7PW1hY2hpbmV9fSA/PSAiJHtBVVRPUkVWfSIKKyNMSU5VWF9WRVJTSU9OID0gIjQuOCIKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL3Bvd2VycGMvcmVjaXBlcy1rZXJuZWwvbGludXgvZmlsZXMvbWFjaGluZS1zdGFuZGFyZC5zY2MgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC9wb3dlcnBjL3JlY2lwZXMta2VybmVsL2xpbnV4L2ZpbGVzL21hY2hpbmUtc3RhbmRhcmQuc2NjCmluZGV4IDg5YjM0NGYuLmMxNjZmY2QgMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL3Bvd2VycGMvcmVjaXBlcy1rZXJuZWwvbGludXgvZmlsZXMvbWFjaGluZS1zdGFuZGFyZC5zY2MKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gvcG93ZXJwYy9yZWNpcGVzLWtlcm5lbC9saW51eC9maWxlcy9tYWNoaW5lLXN0YW5kYXJkLnNjYwpAQCAtMyw3ICszLDcgQEAKIAogZGVmaW5lIEtBUkNIIHBvd2VycGMKIAotaW5jbHVkZSB7ez1tYXBfc3RhbmRhcmRfa2JyYW5jaChuZWVkX25ld19rYnJhbmNoLCBuZXdfa2JyYW5jaCwgZXhpc3Rpbmdfa2JyYW5jaCl9fQoraW5jbHVkZSB7ez1tYXBfc3RhbmRhcmRfa2JyYW5jaChuZWVkX25ld19rYnJhbmNoLCBuZXdfa2JyYW5jaCwgZXhpc3Rpbmdfa2JyYW5jaCl9fSBub3BhdGNoCiB7eyBpZiBuZWVkX25ld19rYnJhbmNoID09ICJ5IjogfX0KIGRlZmluZSBLVFlQRSB7ez1uZXdfa2JyYW5jaH19CiBicmFuY2gge3s9bWFjaGluZX19CmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC9wb3dlcnBjL3JlY2lwZXMta2VybmVsL2xpbnV4L2tlcm5lbC1saXN0Lm5vaW5zdGFsbCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL3Bvd2VycGMvcmVjaXBlcy1rZXJuZWwvbGludXgva2VybmVsLWxpc3Qubm9pbnN0YWxsCmluZGV4IDAwY2YzNjAuLjAxMjBlZDAgMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL3Bvd2VycGMvcmVjaXBlcy1rZXJuZWwvbGludXgva2VybmVsLWxpc3Qubm9pbnN0YWxsCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL3Bvd2VycGMvcmVjaXBlcy1rZXJuZWwvbGludXgva2VybmVsLWxpc3Qubm9pbnN0YWxsCkBAIC0xLDUgKzEsNSBAQAoge3sgaWYga2VybmVsX2Nob2ljZSAhPSAiY3VzdG9tIjogfX0KLXt7IGlucHV0IHR5cGU6ImJvb2xlYW4iIG5hbWU6InVzZV9kZWZhdWx0X2tlcm5lbCIgcHJpbzoiMTAiIG1zZzoiV291bGQgeW91IGxpa2UgdG8gdXNlIHRoZSBkZWZhdWx0ICg0LjQpIGtlcm5lbD8gKHkvbikiIGRlZmF1bHQ6InkifX0KK3t7IGlucHV0IHR5cGU6ImJvb2xlYW4iIG5hbWU6InVzZV9kZWZhdWx0X2tlcm5lbCIgcHJpbzoiMTAiIG1zZzoiV291bGQgeW91IGxpa2UgdG8gdXNlIHRoZSBkZWZhdWx0ICg0LjgpIGtlcm5lbD8gKHkvbikiIGRlZmF1bHQ6InkifX0KIAoge3sgaWYga2VybmVsX2Nob2ljZSAhPSAiY3VzdG9tIiBhbmQgdXNlX2RlZmF1bHRfa2VybmVsID09ICJuIjogfX0KLXt7IGlucHV0IHR5cGU6ImNob2ljZWxpc3QiIG5hbWU6Imtlcm5lbF9jaG9pY2UiIGdlbjoiYnNwLmtlcm5lbC5rZXJuZWxzIiBwcmlvOiIxMCIgbXNnOiJQbGVhc2UgY2hvb3NlIHRoZSBrZXJuZWwgdG8gdXNlIGluIHRoaXMgQlNQOiIgZGVmYXVsdDoibGludXgteW9jdG9fNC40In19Cit7eyBpbnB1dCB0eXBlOiJjaG9pY2VsaXN0IiBuYW1lOiJrZXJuZWxfY2hvaWNlIiBnZW46ImJzcC5rZXJuZWwua2VybmVscyIgcHJpbzoiMTAiIG1zZzoiUGxlYXNlIGNob29zZSB0aGUga2VybmVsIHRvIHVzZSBpbiB0aGlzIEJTUDoiIGRlZmF1bHQ6ImxpbnV4LXlvY3RvXzQuOCJ9fQpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gvcG93ZXJwYy9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC15b2N0by10aW55XzQuOC5iYmFwcGVuZCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL3Bvd2VycGMvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgteW9jdG8tdGlueV80LjguYmJhcHBlbmQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWZiNDVkOQotLS0gL2Rldi9udWxsCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL3Bvd2VycGMvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgteW9jdG8tdGlueV80LjguYmJhcHBlbmQKQEAgLTAsMCArMSwzMyBAQAorIyB5b2N0by1ic3AtZmlsZW5hbWUge3sgaWYga2VybmVsX2Nob2ljZSA9PSAibGludXgteW9jdG8tdGlueV80LjgiOiB9fSB0aGlzCitGSUxFU0VYVFJBUEFUSFNfcHJlcGVuZCA6PSAiJHtUSElTRElSfS9maWxlczoiCisKK1BSIDo9ICIke1BSfS4xIgorCitDT01QQVRJQkxFX01BQ0hJTkVfe3s9bWFjaGluZX19ID0gInt7PW1hY2hpbmV9fSIKKwore3sgaW5wdXQgdHlwZToiYm9vbGVhbiIgbmFtZToibmVlZF9uZXdfa2JyYW5jaCIgcHJpbzoiMjAiIG1zZzoiRG8geW91IG5lZWQgYSBuZXcgbWFjaGluZSBicmFuY2ggZm9yIHRoaXMgQlNQICh0aGUgYWx0ZXJuYXRpdmUgaXMgdG8gcmUtdXNlIGFuIGV4aXN0aW5nIGJyYW5jaCk/IFt5L25dIiBkZWZhdWx0OiJ5IiB9fQorCit7eyBpZiBuZWVkX25ld19rYnJhbmNoID09ICJ5IjogfX0KK3t7IGlucHV0IHR5cGU6ImNob2ljZWxpc3QiIG5hbWU6Im5ld19rYnJhbmNoIiBnZW46ImJzcC5rZXJuZWwuYWxsX2JyYW5jaGVzIiBicmFuY2hlc19iYXNlOiJzdGFuZGFyZC90aW55IiBwcmlvOiIyMCIgbXNnOiJQbGVhc2UgY2hvb3NlIGEgbWFjaGluZSBicmFuY2ggdG8gYmFzZSB0aGlzIEJTUCBvbjoiIGRlZmF1bHQ6InN0YW5kYXJkL3RpbnkvYmFzZSIgfX0KKwore3sgaWYgbmVlZF9uZXdfa2JyYW5jaCA9PSAibiI6IH19Cit7eyBpbnB1dCB0eXBlOiJjaG9pY2VsaXN0IiBuYW1lOiJleGlzdGluZ19rYnJhbmNoIiBnZW46ImJzcC5rZXJuZWwuYWxsX2JyYW5jaGVzIiBicmFuY2hlc19iYXNlOiJzdGFuZGFyZC90aW55IiBwcmlvOiIyMCIgbXNnOiJQbGVhc2UgY2hvb3NlIGEgbWFjaGluZSBicmFuY2ggdG8gYmFzZSB0aGlzIEJTUCBvbjoiIGRlZmF1bHQ6InN0YW5kYXJkL3RpbnkvYmFzZSIgfX0KKwore3sgaWYgbmVlZF9uZXdfa2JyYW5jaCA9PSAibiI6IH19CitLQlJBTkNIX3t7PW1hY2hpbmV9fSAgPSAie3s9ZXhpc3Rpbmdfa2JyYW5jaH19IgorCit7eyBpbnB1dCB0eXBlOiJib29sZWFuIiBuYW1lOiJzbXAiIHByaW86IjMwIiBtc2c6IkRvIHlvdSBuZWVkIFNNUCBzdXBwb3J0PyAoeS9uKSIgZGVmYXVsdDoieSJ9fQore3sgaWYgc21wID09ICJ5IjogfX0KK0tFUk5FTF9GRUFUVVJFU19hcHBlbmRfe3s9bWFjaGluZX19ICs9ICIgY2ZnL3NtcC5zY2MiCisKK1NSQ19VUkkgKz0gImZpbGU6Ly97ez1tYWNoaW5lfX0tdGlueS5zY2MgXAorICAgICAgICAgICAgZmlsZTovL3t7PW1hY2hpbmV9fS11c2VyLWNvbmZpZy5jZmcgXAorICAgICAgICAgICAgZmlsZTovL3t7PW1hY2hpbmV9fS11c2VyLXBhdGNoZXMuc2NjIFwKKyAgICAgICAgICAgIGZpbGU6Ly97ez1tYWNoaW5lfX0tdXNlci1mZWF0dXJlcy5zY2MgXAorICAgICAgICAgICAiCisKKyMgcmVwbGFjZSB0aGVzZSBTUkNSRVZzIHdpdGggdGhlIHJlYWwgY29tbWl0IGlkcyBvbmNlIHlvdSd2ZSBoYWQKKyMgdGhlIGFwcHJvcHJpYXRlIGNoYW5nZXMgY29tbWl0dGVkIHRvIHRoZSB1cHN0cmVhbSBsaW51eC15b2N0byByZXBvCitTUkNSRVZfbWFjaGluZV9wbi1saW51eC15b2N0by10aW55X3t7PW1hY2hpbmV9fSA/PSAiJHtBVVRPUkVWfSIKK1NSQ1JFVl9tZXRhX3BuLWxpbnV4LXlvY3RvLXRpbnlfe3s9bWFjaGluZX19ID89ICIke0FVVE9SRVZ9IgorI0xJTlVYX1ZFUlNJT04gPSAiNC44IgpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gvcG93ZXJwYy9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC15b2N0b180LjguYmJhcHBlbmQgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC9wb3dlcnBjL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LXlvY3RvXzQuOC5iYmFwcGVuZApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43YzBkZjhiCi0tLSAvZGV2L251bGwKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gvcG93ZXJwYy9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC15b2N0b180LjguYmJhcHBlbmQKQEAgLTAsMCArMSwzMiBAQAorIyB5b2N0by1ic3AtZmlsZW5hbWUge3sgaWYga2VybmVsX2Nob2ljZSA9PSAibGludXgteW9jdG9fNC44IjogfX0gdGhpcworRklMRVNFWFRSQVBBVEhTX3ByZXBlbmQgOj0gIiR7VEhJU0RJUn0vZmlsZXM6IgorCitQUiA6PSAiJHtQUn0uMSIKKworQ09NUEFUSUJMRV9NQUNISU5FX3t7PW1hY2hpbmV9fSA9ICJ7ez1tYWNoaW5lfX0iCisKK3t7IGlucHV0IHR5cGU6ImJvb2xlYW4iIG5hbWU6Im5lZWRfbmV3X2ticmFuY2giIHByaW86IjIwIiBtc2c6IkRvIHlvdSBuZWVkIGEgbmV3IG1hY2hpbmUgYnJhbmNoIGZvciB0aGlzIEJTUCAodGhlIGFsdGVybmF0aXZlIGlzIHRvIHJlLXVzZSBhbiBleGlzdGluZyBicmFuY2gpPyBbeS9uXSIgZGVmYXVsdDoieSIgfX0KKwore3sgaWYgbmVlZF9uZXdfa2JyYW5jaCA9PSAieSI6IH19Cit7eyBpbnB1dCB0eXBlOiJjaG9pY2VsaXN0IiBuYW1lOiJuZXdfa2JyYW5jaCIgZ2VuOiJic3Aua2VybmVsLmFsbF9icmFuY2hlcyIgYnJhbmNoZXNfYmFzZToic3RhbmRhcmQiIHByaW86IjIwIiBtc2c6IlBsZWFzZSBjaG9vc2UgYSBtYWNoaW5lIGJyYW5jaCB0byBiYXNlIHRoaXMgQlNQIG9uOiIgZGVmYXVsdDoic3RhbmRhcmQvYmFzZSIgfX0KKwore3sgaWYgbmVlZF9uZXdfa2JyYW5jaCA9PSAibiI6IH19Cit7eyBpbnB1dCB0eXBlOiJjaG9pY2VsaXN0IiBuYW1lOiJleGlzdGluZ19rYnJhbmNoIiBnZW46ImJzcC5rZXJuZWwuYWxsX2JyYW5jaGVzIiBicmFuY2hlc19iYXNlOiJzdGFuZGFyZCIgcHJpbzoiMjAiIG1zZzoiUGxlYXNlIGNob29zZSBhIG1hY2hpbmUgYnJhbmNoIHRvIGJhc2UgdGhpcyBCU1Agb246IiBkZWZhdWx0OiJzdGFuZGFyZC9iYXNlIiB9fQorCit7eyBpZiBuZWVkX25ld19rYnJhbmNoID09ICJuIjogfX0KK0tCUkFOQ0hfe3s9bWFjaGluZX19ICA9ICJ7ez1leGlzdGluZ19rYnJhbmNofX0iCisKK3t7IGlucHV0IHR5cGU6ImJvb2xlYW4iIG5hbWU6InNtcCIgcHJpbzoiMzAiIG1zZzoiRG8geW91IG5lZWQgU01QIHN1cHBvcnQ/ICh5L24pIiBkZWZhdWx0OiJ5In19Cit7eyBpZiBzbXAgPT0gInkiOiB9fQorS0VSTkVMX0ZFQVRVUkVTX2FwcGVuZF97ez1tYWNoaW5lfX0gKz0gIiBjZmcvc21wLnNjYyIKKworU1JDX1VSSSArPSAiZmlsZTovL3t7PW1hY2hpbmV9fS1zdGFuZGFyZC5zY2MgXAorICAgICAgICAgICAgZmlsZTovL3t7PW1hY2hpbmV9fS11c2VyLWNvbmZpZy5jZmcgXAorICAgICAgICAgICAgZmlsZTovL3t7PW1hY2hpbmV9fS11c2VyLWZlYXR1cmVzLnNjYyBcCisgICAgICAgICAgICIKKworIyByZXBsYWNlIHRoZXNlIFNSQ1JFVnMgd2l0aCB0aGUgcmVhbCBjb21taXQgaWRzIG9uY2UgeW91J3ZlIGhhZAorIyB0aGUgYXBwcm9wcmlhdGUgY2hhbmdlcyBjb21taXR0ZWQgdG8gdGhlIHVwc3RyZWFtIGxpbnV4LXlvY3RvIHJlcG8KK1NSQ1JFVl9tYWNoaW5lX3BuLWxpbnV4LXlvY3RvX3t7PW1hY2hpbmV9fSA/PSAiJHtBVVRPUkVWfSIKK1NSQ1JFVl9tZXRhX3BuLWxpbnV4LXlvY3RvX3t7PW1hY2hpbmV9fSA/PSAiJHtBVVRPUkVWfSIKKyNMSU5VWF9WRVJTSU9OID0gIjQuOCIKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL3FlbXUvcmVjaXBlcy1rZXJuZWwvbGludXgvZmlsZXMvbWFjaGluZS1zdGFuZGFyZC5zY2MgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC9xZW11L3JlY2lwZXMta2VybmVsL2xpbnV4L2ZpbGVzL21hY2hpbmUtc3RhbmRhcmQuc2NjCmluZGV4IDE0NTU0ZGEuLjQzY2Y2NDIgMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL3FlbXUvcmVjaXBlcy1rZXJuZWwvbGludXgvZmlsZXMvbWFjaGluZS1zdGFuZGFyZC5zY2MKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gvcWVtdS9yZWNpcGVzLWtlcm5lbC9saW51eC9maWxlcy9tYWNoaW5lLXN0YW5kYXJkLnNjYwpAQCAtNCwxNSArNCwxNSBAQAogZGVmaW5lIEtBUkNIIHt7PXFlbXVhcmNofX0KIAoge3sgaWYgcWVtdWFyY2ggPT0gImkzODYiIG9yIHFlbXVhcmNoID09ICJ4ODZfNjQiOiB9fQotaW5jbHVkZSB7ez1tYXBfc3RhbmRhcmRfa2JyYW5jaChuZWVkX25ld19rYnJhbmNoLCBuZXdfa2JyYW5jaCwgZXhpc3Rpbmdfa2JyYW5jaCl9fQoraW5jbHVkZSB7ez1tYXBfc3RhbmRhcmRfa2JyYW5jaChuZWVkX25ld19rYnJhbmNoLCBuZXdfa2JyYW5jaCwgZXhpc3Rpbmdfa2JyYW5jaCl9fSBub3BhdGNoCiB7eyBpZiBxZW11YXJjaCA9PSAiYXJtIjogfX0KLWluY2x1ZGUgYnNwL2FybS12ZXJzYXRpbGUtOTI2ZWpzL2FybS12ZXJzYXRpbGUtOTI2ZWpzLXN0YW5kYXJkCitpbmNsdWRlIGJzcC9hcm0tdmVyc2F0aWxlLTkyNmVqcy9hcm0tdmVyc2F0aWxlLTkyNmVqcy1zdGFuZGFyZCBub3BhdGNoCiB7eyBpZiBxZW11YXJjaCA9PSAicG93ZXJwYyI6IH19Ci1pbmNsdWRlIGJzcC9xZW11LXBwYzMyL3FlbXUtcHBjMzItc3RhbmRhcmQKK2luY2x1ZGUgYnNwL3FlbXUtcHBjMzIvcWVtdS1wcGMzMi1zdGFuZGFyZCBub3BhdGNoCiB7eyBpZiBxZW11YXJjaCA9PSAibWlwcyI6IH19Ci1pbmNsdWRlIGJzcC9tdGktbWFsdGEzMi9tdGktbWFsdGEzMi1iZS1zdGFuZGFyZAoraW5jbHVkZSBic3AvbXRpLW1hbHRhMzIvbXRpLW1hbHRhMzItYmUtc3RhbmRhcmQgbm9wYXRjaAoge3sgaWYgcWVtdWFyY2ggPT0gIm1pcHM2NCI6IH19Ci1pbmNsdWRlIGJzcC9tdGktbWFsdGE2NC9tdGktbWFsdGE2NC1iZS1zdGFuZGFyZAoraW5jbHVkZSBic3AvbXRpLW1hbHRhNjQvbXRpLW1hbHRhNjQtYmUtc3RhbmRhcmQgbm9wYXRjaAoge3sgaWYgbmVlZF9uZXdfa2JyYW5jaCA9PSAieSI6IH19CiBkZWZpbmUgS1RZUEUge3s9bmV3X2ticmFuY2h9fQogYnJhbmNoIHt7PW1hY2hpbmV9fQpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gvcWVtdS9yZWNpcGVzLWtlcm5lbC9saW51eC9maWxlcy9tYWNoaW5lLmNmZyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL3FlbXUvcmVjaXBlcy1rZXJuZWwvbGludXgvZmlsZXMvbWFjaGluZS5jZmcKaW5kZXggZDU2MDc4NC4uM2ZhNGVkMCAxMDA2NDQKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gvcWVtdS9yZWNpcGVzLWtlcm5lbC9saW51eC9maWxlcy9tYWNoaW5lLmNmZworKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC9xZW11L3JlY2lwZXMta2VybmVsL2xpbnV4L2ZpbGVzL21hY2hpbmUuY2ZnCkBAIC0xICsxLDMgQEAKLSMgeW9jdG8tYnNwLWZpbGVuYW1lIHt7PW1hY2hpbmV9fS5jZmcKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCisjIHlvY3RvLWJzcC1maWxlbmFtZSB7ez1tYWNoaW5lfX0uY2ZnCit7eyBpZiBxZW11YXJjaCA9PSAiaTM4NiI6IH19CisjIENPTkZJR182NEJJVCBpcyBub3Qgc2V0CmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC9xZW11L3JlY2lwZXMta2VybmVsL2xpbnV4L2tlcm5lbC1saXN0Lm5vaW5zdGFsbCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL3FlbXUvcmVjaXBlcy1rZXJuZWwvbGludXgva2VybmVsLWxpc3Qubm9pbnN0YWxsCmluZGV4IDAwY2YzNjAuLjAxMjBlZDAgMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL3FlbXUvcmVjaXBlcy1rZXJuZWwvbGludXgva2VybmVsLWxpc3Qubm9pbnN0YWxsCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL3FlbXUvcmVjaXBlcy1rZXJuZWwvbGludXgva2VybmVsLWxpc3Qubm9pbnN0YWxsCkBAIC0xLDUgKzEsNSBAQAoge3sgaWYga2VybmVsX2Nob2ljZSAhPSAiY3VzdG9tIjogfX0KLXt7IGlucHV0IHR5cGU6ImJvb2xlYW4iIG5hbWU6InVzZV9kZWZhdWx0X2tlcm5lbCIgcHJpbzoiMTAiIG1zZzoiV291bGQgeW91IGxpa2UgdG8gdXNlIHRoZSBkZWZhdWx0ICg0LjQpIGtlcm5lbD8gKHkvbikiIGRlZmF1bHQ6InkifX0KK3t7IGlucHV0IHR5cGU6ImJvb2xlYW4iIG5hbWU6InVzZV9kZWZhdWx0X2tlcm5lbCIgcHJpbzoiMTAiIG1zZzoiV291bGQgeW91IGxpa2UgdG8gdXNlIHRoZSBkZWZhdWx0ICg0LjgpIGtlcm5lbD8gKHkvbikiIGRlZmF1bHQ6InkifX0KIAoge3sgaWYga2VybmVsX2Nob2ljZSAhPSAiY3VzdG9tIiBhbmQgdXNlX2RlZmF1bHRfa2VybmVsID09ICJuIjogfX0KLXt7IGlucHV0IHR5cGU6ImNob2ljZWxpc3QiIG5hbWU6Imtlcm5lbF9jaG9pY2UiIGdlbjoiYnNwLmtlcm5lbC5rZXJuZWxzIiBwcmlvOiIxMCIgbXNnOiJQbGVhc2UgY2hvb3NlIHRoZSBrZXJuZWwgdG8gdXNlIGluIHRoaXMgQlNQOiIgZGVmYXVsdDoibGludXgteW9jdG9fNC40In19Cit7eyBpbnB1dCB0eXBlOiJjaG9pY2VsaXN0IiBuYW1lOiJrZXJuZWxfY2hvaWNlIiBnZW46ImJzcC5rZXJuZWwua2VybmVscyIgcHJpbzoiMTAiIG1zZzoiUGxlYXNlIGNob29zZSB0aGUga2VybmVsIHRvIHVzZSBpbiB0aGlzIEJTUDoiIGRlZmF1bHQ6ImxpbnV4LXlvY3RvXzQuOCJ9fQpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gvcWVtdS9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC15b2N0by10aW55XzQuOC5iYmFwcGVuZCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL3FlbXUvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgteW9jdG8tdGlueV80LjguYmJhcHBlbmQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzE2MzVkNgotLS0gL2Rldi9udWxsCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL3FlbXUvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgteW9jdG8tdGlueV80LjguYmJhcHBlbmQKQEAgLTAsMCArMSw2MiBAQAorIyB5b2N0by1ic3AtZmlsZW5hbWUge3sgaWYga2VybmVsX2Nob2ljZSA9PSAibGludXgteW9jdG8tdGlueV80LjgiOiB9fSB0aGlzCitGSUxFU0VYVFJBUEFUSFNfcHJlcGVuZCA6PSAiJHtUSElTRElSfS9maWxlczoiCisKK1BSIDo9ICIke1BSfS4xIgorCitDT01QQVRJQkxFX01BQ0hJTkVfe3s9bWFjaGluZX19ID0gInt7PW1hY2hpbmV9fSIKK3t7IGlucHV0IHR5cGU6ImJvb2xlYW4iIG5hbWU6Im5lZWRfbmV3X2ticmFuY2giIHByaW86IjIwIiBtc2c6IkRvIHlvdSBuZWVkIGEgbmV3IG1hY2hpbmUgYnJhbmNoIGZvciB0aGlzIEJTUCAodGhlIGFsdGVybmF0aXZlIGlzIHRvIHJlLXVzZSBhbiBleGlzdGluZyBicmFuY2gpPyBbeS9uXSIgZGVmYXVsdDoieSIgfX0KKwore3sgaWYgbmVlZF9uZXdfa2JyYW5jaCA9PSAieSIgYW5kIHFlbXVhcmNoID09ICJhcm0iOiB9fQore3sgaW5wdXQgdHlwZToiY2hvaWNlbGlzdCIgbmFtZToibmV3X2ticmFuY2giIG5hbWVhcHBlbmQ6ImFybSIgZ2VuOiJic3Aua2VybmVsLmFsbF9icmFuY2hlcyIgYnJhbmNoZXNfYmFzZToic3RhbmRhcmQvdGlueSIgcHJpbzoiMjAiIG1zZzoiUGxlYXNlIGNob29zZSBhIG1hY2hpbmUgYnJhbmNoIHRvIGJhc2UgdGhpcyBCU1Agb246IiBkZWZhdWx0OiJzdGFuZGFyZC90aW55L2Jhc2UiIH19CisKK3t7IGlmIG5lZWRfbmV3X2ticmFuY2ggPT0gIm4iIGFuZCBxZW11YXJjaCA9PSAiYXJtIjogfX0KK3t7IGlucHV0IHR5cGU6ImNob2ljZWxpc3QiIG5hbWU6ImV4aXN0aW5nX2ticmFuY2giIG5hbWVhcHBlbmQ6ImFybSIgZ2VuOiJic3Aua2VybmVsLmFsbF9icmFuY2hlcyIgYnJhbmNoZXNfYmFzZToic3RhbmRhcmQvdGlueSIgcHJpbzoiMjAiIG1zZzoiUGxlYXNlIGNob29zZSBhIG1hY2hpbmUgYnJhbmNoIHRvIGJhc2UgdGhpcyBCU1Agb246IiBkZWZhdWx0OiJzdGFuZGFyZC90aW55L2Jhc2UiIH19CisKK3t7IGlmIG5lZWRfbmV3X2ticmFuY2ggPT0gInkiIGFuZCBxZW11YXJjaCA9PSAicG93ZXJwYyI6IH19Cit7eyBpbnB1dCB0eXBlOiJjaG9pY2VsaXN0IiBuYW1lOiJuZXdfa2JyYW5jaCIgbmFtZWFwcGVuZDoicG93ZXJwYyIgZ2VuOiJic3Aua2VybmVsLmFsbF9icmFuY2hlcyIgYnJhbmNoZXNfYmFzZToic3RhbmRhcmQvdGlueSIgcHJpbzoiMjAiIG1zZzoiUGxlYXNlIGNob29zZSBhIG1hY2hpbmUgYnJhbmNoIHRvIGJhc2UgdGhpcyBCU1Agb246IiBkZWZhdWx0OiJzdGFuZGFyZC90aW55L2Jhc2UiIH19CisKK3t7IGlmIG5lZWRfbmV3X2ticmFuY2ggPT0gIm4iIGFuZCBxZW11YXJjaCA9PSAicG93ZXJwYyI6IH19Cit7eyBpbnB1dCB0eXBlOiJjaG9pY2VsaXN0IiBuYW1lOiJleGlzdGluZ19rYnJhbmNoIiBuYW1lYXBwZW5kOiJwb3dlcnBjIiBnZW46ImJzcC5rZXJuZWwuYWxsX2JyYW5jaGVzIiBicmFuY2hlc19iYXNlOiJzdGFuZGFyZC90aW55IiBwcmlvOiIyMCIgbXNnOiJQbGVhc2UgY2hvb3NlIGEgbWFjaGluZSBicmFuY2ggdG8gYmFzZSB0aGlzIEJTUCBvbjoiIGRlZmF1bHQ6InN0YW5kYXJkL3RpbnkvYmFzZSIgfX0KKwore3sgaWYgbmVlZF9uZXdfa2JyYW5jaCA9PSAieSIgYW5kIHFlbXVhcmNoID09ICJpMzg2IjogfX0KK3t7IGlucHV0IHR5cGU6ImNob2ljZWxpc3QiIG5hbWU6Im5ld19rYnJhbmNoIiBuYW1lYXBwZW5kOiJpMzg2IiBnZW46ImJzcC5rZXJuZWwuYWxsX2JyYW5jaGVzIiBicmFuY2hlc19iYXNlOiJzdGFuZGFyZC90aW55IiBwcmlvOiIyMCIgbXNnOiJQbGVhc2UgY2hvb3NlIGEgbWFjaGluZSBicmFuY2ggdG8gYmFzZSB0aGlzIEJTUCBvbjoiIGRlZmF1bHQ6InN0YW5kYXJkL3RpbnkvYmFzZSIgfX0KKwore3sgaWYgbmVlZF9uZXdfa2JyYW5jaCA9PSAibiIgYW5kIHFlbXVhcmNoID09ICJpMzg2IjogfX0KK3t7IGlucHV0IHR5cGU6ImNob2ljZWxpc3QiIG5hbWU6ImV4aXN0aW5nX2ticmFuY2giIG5hbWVhcHBlbmQ6ImkzODYiIGdlbjoiYnNwLmtlcm5lbC5hbGxfYnJhbmNoZXMiIGJyYW5jaGVzX2Jhc2U6InN0YW5kYXJkL3RpbnkiIHByaW86IjIwIiBtc2c6IlBsZWFzZSBjaG9vc2UgYSBtYWNoaW5lIGJyYW5jaCB0byBiYXNlIHRoaXMgQlNQIG9uOiIgZGVmYXVsdDoic3RhbmRhcmQvdGlueS9jb21tb24tcGMiIH19CisKK3t7IGlmIG5lZWRfbmV3X2ticmFuY2ggPT0gInkiIGFuZCBxZW11YXJjaCA9PSAieDg2XzY0IjogfX0KK3t7IGlucHV0IHR5cGU6ImNob2ljZWxpc3QiIG5hbWU6Im5ld19rYnJhbmNoIiBuYW1lYXBwZW5kOiJ4ODZfNjQiIGdlbjoiYnNwLmtlcm5lbC5hbGxfYnJhbmNoZXMiIGJyYW5jaGVzX2Jhc2U6InN0YW5kYXJkL3RpbnkiIHByaW86IjIwIiBtc2c6IlBsZWFzZSBjaG9vc2UgYSBtYWNoaW5lIGJyYW5jaCB0byBiYXNlIHRoaXMgQlNQIG9uOiIgZGVmYXVsdDoic3RhbmRhcmQvdGlueS9iYXNlIiB9fQorCit7eyBpZiBuZWVkX25ld19rYnJhbmNoID09ICJuIiBhbmQgcWVtdWFyY2ggPT0gIng4Nl82NCI6IH19Cit7eyBpbnB1dCB0eXBlOiJjaG9pY2VsaXN0IiBuYW1lOiJleGlzdGluZ19rYnJhbmNoIiBuYW1lYXBwZW5kOiJ4ODZfNjQiIGdlbjoiYnNwLmtlcm5lbC5hbGxfYnJhbmNoZXMiIGJyYW5jaGVzX2Jhc2U6InN0YW5kYXJkL3RpbnkiIHByaW86IjIwIiBtc2c6IlBsZWFzZSBjaG9vc2UgYSBtYWNoaW5lIGJyYW5jaCB0byBiYXNlIHRoaXMgQlNQIG9uOiIgZGVmYXVsdDoic3RhbmRhcmQvdGlueS9iYXNlIiB9fQorCit7eyBpZiBuZWVkX25ld19rYnJhbmNoID09ICJ5IiBhbmQgcWVtdWFyY2ggPT0gIm1pcHMiOiB9fQore3sgaW5wdXQgdHlwZToiY2hvaWNlbGlzdCIgbmFtZToibmV3X2ticmFuY2giIG5hbWVhcHBlbmQ6Im1pcHMiIGdlbjoiYnNwLmtlcm5lbC5hbGxfYnJhbmNoZXMiIGJyYW5jaGVzX2Jhc2U6InN0YW5kYXJkL3RpbnkiIHByaW86IjIwIiBtc2c6IlBsZWFzZSBjaG9vc2UgYSBtYWNoaW5lIGJyYW5jaCB0byBiYXNlIHRoaXMgQlNQIG9uOiIgZGVmYXVsdDoic3RhbmRhcmQvdGlueS9iYXNlIiB9fQorCit7eyBpZiBuZWVkX25ld19rYnJhbmNoID09ICJuIiBhbmQgcWVtdWFyY2ggPT0gIm1pcHMiOiB9fQore3sgaW5wdXQgdHlwZToiY2hvaWNlbGlzdCIgbmFtZToiZXhpc3Rpbmdfa2JyYW5jaCIgbmFtZWFwcGVuZDoibWlwcyIgZ2VuOiJic3Aua2VybmVsLmFsbF9icmFuY2hlcyIgYnJhbmNoZXNfYmFzZToic3RhbmRhcmQvdGlueSIgcHJpbzoiMjAiIG1zZzoiUGxlYXNlIGNob29zZSBhIG1hY2hpbmUgYnJhbmNoIHRvIGJhc2UgdGhpcyBCU1Agb246IiBkZWZhdWx0OiJzdGFuZGFyZC90aW55L2Jhc2UiIH19CisKK3t7IGlmIG5lZWRfbmV3X2ticmFuY2ggPT0gInkiIGFuZCBxZW11YXJjaCA9PSAibWlwczY0IjogfX0KK3t7IGlucHV0IHR5cGU6ImNob2ljZWxpc3QiIG5hbWU6Im5ld19rYnJhbmNoIiBuYW1lYXBwZW5kOiJtaXBzNjQiIGdlbjoiYnNwLmtlcm5lbC5hbGxfYnJhbmNoZXMiIGJyYW5jaGVzX2Jhc2U6InN0YW5kYXJkL3RpbnkiIHByaW86IjIwIiBtc2c6IlBsZWFzZSBjaG9vc2UgYSBtYWNoaW5lIGJyYW5jaCB0byBiYXNlIHRoaXMgQlNQIG9uOiIgZGVmYXVsdDoic3RhbmRhcmQvdGlueS9iYXNlIiB9fQorCit7eyBpZiBuZWVkX25ld19rYnJhbmNoID09ICJuIiBhbmQgcWVtdWFyY2ggPT0gIm1pcHM2NCI6IH19Cit7eyBpbnB1dCB0eXBlOiJjaG9pY2VsaXN0IiBuYW1lOiJleGlzdGluZ19rYnJhbmNoIiBuYW1lYXBwZW5kOiJtaXBzNjQiIGdlbjoiYnNwLmtlcm5lbC5hbGxfYnJhbmNoZXMiIGJyYW5jaGVzX2Jhc2U6InN0YW5kYXJkL3RpbnkiIHByaW86IjIwIiBtc2c6IlBsZWFzZSBjaG9vc2UgYSBtYWNoaW5lIGJyYW5jaCB0byBiYXNlIHRoaXMgQlNQIG9uOiIgZGVmYXVsdDoic3RhbmRhcmQvdGlueS9iYXNlIiB9fQorCit7eyBpZiBuZWVkX25ld19rYnJhbmNoID09ICJuIjogfX0KK0tCUkFOQ0hfe3s9bWFjaGluZX19ICA9ICJ7ez1leGlzdGluZ19rYnJhbmNofX0iCisKK3t7IGlucHV0IHR5cGU6ImJvb2xlYW4iIG5hbWU6InNtcCIgcHJpbzoiMzAiIG1zZzoiRG8geW91IG5lZWQgU01QIHN1cHBvcnQ/ICh5L24pIiBkZWZhdWx0OiJ5In19Cit7eyBpZiBzbXAgPT0gInkiOiB9fQorS0VSTkVMX0ZFQVRVUkVTX2FwcGVuZF97ez1tYWNoaW5lfX0gKz0gIiBjZmcvc21wLnNjYyIKKworU1JDX1VSSSArPSAiZmlsZTovL3t7PW1hY2hpbmV9fS10aW55LnNjYyBcCisgICAgICAgICAgICBmaWxlOi8ve3s9bWFjaGluZX19LXVzZXItY29uZmlnLmNmZyBcCisgICAgICAgICAgICBmaWxlOi8ve3s9bWFjaGluZX19LXVzZXItcGF0Y2hlcy5zY2MgXAorICAgICAgICAgICAgZmlsZTovL3t7PW1hY2hpbmV9fS11c2VyLWZlYXR1cmVzLnNjYyBcCisgICAgICAgICAgICIKKworIyByZXBsYWNlIHRoZXNlIFNSQ1JFVnMgd2l0aCB0aGUgcmVhbCBjb21taXQgaWRzIG9uY2UgeW91J3ZlIGhhZAorIyB0aGUgYXBwcm9wcmlhdGUgY2hhbmdlcyBjb21taXR0ZWQgdG8gdGhlIHVwc3RyZWFtIGxpbnV4LXlvY3RvIHJlcG8KK1NSQ1JFVl9tYWNoaW5lX3BuLWxpbnV4LXlvY3RvLXRpbnlfe3s9bWFjaGluZX19ID89ICIke0FVVE9SRVZ9IgorU1JDUkVWX21ldGFfcG4tbGludXgteW9jdG8tdGlueV97ez1tYWNoaW5lfX0gPz0gIiR7QVVUT1JFVn0iCisjTElOVVhfVkVSU0lPTiA9ICI0LjgiCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC9xZW11L3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LXlvY3RvXzQuOC5iYmFwcGVuZCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL3FlbXUvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgteW9jdG9fNC44LmJiYXBwZW5kCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU4YzNmYzgKLS0tIC9kZXYvbnVsbAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC9xZW11L3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LXlvY3RvXzQuOC5iYmFwcGVuZApAQCAtMCwwICsxLDYxIEBACisjIHlvY3RvLWJzcC1maWxlbmFtZSB7eyBpZiBrZXJuZWxfY2hvaWNlID09ICJsaW51eC15b2N0b180LjgiOiB9fSB0aGlzCitGSUxFU0VYVFJBUEFUSFNfcHJlcGVuZCA6PSAiJHtUSElTRElSfS9maWxlczoiCisKK1BSIDo9ICIke1BSfS4xIgorCitDT01QQVRJQkxFX01BQ0hJTkVfe3s9bWFjaGluZX19ID0gInt7PW1hY2hpbmV9fSIKK3t7IGlucHV0IHR5cGU6ImJvb2xlYW4iIG5hbWU6Im5lZWRfbmV3X2ticmFuY2giIHByaW86IjIwIiBtc2c6IkRvIHlvdSBuZWVkIGEgbmV3IG1hY2hpbmUgYnJhbmNoIGZvciB0aGlzIEJTUCAodGhlIGFsdGVybmF0aXZlIGlzIHRvIHJlLXVzZSBhbiBleGlzdGluZyBicmFuY2gpPyBbeS9uXSIgZGVmYXVsdDoieSIgfX0KKwore3sgaWYgbmVlZF9uZXdfa2JyYW5jaCA9PSAieSIgYW5kIHFlbXVhcmNoID09ICJhcm0iOiB9fQore3sgaW5wdXQgdHlwZToiY2hvaWNlbGlzdCIgbmFtZToibmV3X2ticmFuY2giIGdlbjoiYnNwLmtlcm5lbC5hbGxfYnJhbmNoZXMiIGJyYW5jaGVzX2Jhc2U6InN0YW5kYXJkIiBwcmlvOiIyMCIgbXNnOiJQbGVhc2UgY2hvb3NlIGEgbWFjaGluZSBicmFuY2ggdG8gYmFzZSB5b3VyIG5ldyBCU1AgYnJhbmNoIG9uOiIgZGVmYXVsdDoic3RhbmRhcmQvYmFzZSIgfX0KKwore3sgaWYgbmVlZF9uZXdfa2JyYW5jaCA9PSAibiIgYW5kIHFlbXVhcmNoID09ICJhcm0iOiB9fQore3sgaW5wdXQgdHlwZToiY2hvaWNlbGlzdCIgbmFtZToiZXhpc3Rpbmdfa2JyYW5jaCIgZ2VuOiJic3Aua2VybmVsLmFsbF9icmFuY2hlcyIgYnJhbmNoZXNfYmFzZToic3RhbmRhcmQiIHByaW86IjIwIiBtc2c6IlBsZWFzZSBjaG9vc2UgYW4gZXhpc3RpbmcgbWFjaGluZSBicmFuY2ggdG8gdXNlIGZvciB0aGlzIEJTUDoiIGRlZmF1bHQ6InN0YW5kYXJkL2FybS12ZXJzYXRpbGUtOTI2ZWpzIiB9fQorCit7eyBpZiBuZWVkX25ld19rYnJhbmNoID09ICJ5IiBhbmQgcWVtdWFyY2ggPT0gInBvd2VycGMiOiB9fQore3sgaW5wdXQgdHlwZToiY2hvaWNlbGlzdCIgbmFtZToibmV3X2ticmFuY2giIG5hbWVhcHBlbmQ6InBvd2VycGMiIGdlbjoiYnNwLmtlcm5lbC5hbGxfYnJhbmNoZXMiIGJyYW5jaGVzX2Jhc2U6InN0YW5kYXJkIiBwcmlvOiIyMCIgbXNnOiJQbGVhc2UgY2hvb3NlIGEgbWFjaGluZSBicmFuY2ggdG8gYmFzZSB0aGlzIEJTUCBvbjoiIGRlZmF1bHQ6InN0YW5kYXJkL2Jhc2UiIH19CisKK3t7IGlmIG5lZWRfbmV3X2ticmFuY2ggPT0gIm4iIGFuZCBxZW11YXJjaCA9PSAicG93ZXJwYyI6IH19Cit7eyBpbnB1dCB0eXBlOiJjaG9pY2VsaXN0IiBuYW1lOiJleGlzdGluZ19rYnJhbmNoIiBuYW1lYXBwZW5kOiJwb3dlcnBjIiBnZW46ImJzcC5rZXJuZWwuYWxsX2JyYW5jaGVzIiBicmFuY2hlc19iYXNlOiJzdGFuZGFyZCIgcHJpbzoiMjAiIG1zZzoiUGxlYXNlIGNob29zZSBhIG1hY2hpbmUgYnJhbmNoIHRvIGJhc2UgdGhpcyBCU1Agb246IiBkZWZhdWx0OiJzdGFuZGFyZC9xZW11cHBjIiB9fQorCit7eyBpZiBuZWVkX25ld19rYnJhbmNoID09ICJ5IiBhbmQgcWVtdWFyY2ggPT0gImkzODYiOiB9fQore3sgaW5wdXQgdHlwZToiY2hvaWNlbGlzdCIgbmFtZToibmV3X2ticmFuY2giIG5hbWVhcHBlbmQ6ImkzODYiIGdlbjoiYnNwLmtlcm5lbC5hbGxfYnJhbmNoZXMiIGJyYW5jaGVzX2Jhc2U6InN0YW5kYXJkIiBwcmlvOiIyMCIgbXNnOiJQbGVhc2UgY2hvb3NlIGEgbWFjaGluZSBicmFuY2ggdG8gYmFzZSB0aGlzIEJTUCBvbjoiIGRlZmF1bHQ6InN0YW5kYXJkL2Jhc2UiIH19CisKK3t7IGlmIG5lZWRfbmV3X2ticmFuY2ggPT0gIm4iIGFuZCBxZW11YXJjaCA9PSAiaTM4NiI6IH19Cit7eyBpbnB1dCB0eXBlOiJjaG9pY2VsaXN0IiBuYW1lOiJleGlzdGluZ19rYnJhbmNoIiBuYW1lYXBwZW5kOiJpMzg2IiBnZW46ImJzcC5rZXJuZWwuYWxsX2JyYW5jaGVzIiBicmFuY2hlc19iYXNlOiJzdGFuZGFyZCIgcHJpbzoiMjAiIG1zZzoiUGxlYXNlIGNob29zZSBhIG1hY2hpbmUgYnJhbmNoIHRvIGJhc2UgdGhpcyBCU1Agb246IiBkZWZhdWx0OiJzdGFuZGFyZC9iYXNlIiB9fQorCit7eyBpZiBuZWVkX25ld19rYnJhbmNoID09ICJ5IiBhbmQgcWVtdWFyY2ggPT0gIng4Nl82NCI6IH19Cit7eyBpbnB1dCB0eXBlOiJjaG9pY2VsaXN0IiBuYW1lOiJuZXdfa2JyYW5jaCIgbmFtZWFwcGVuZDoieDg2XzY0IiBnZW46ImJzcC5rZXJuZWwuYWxsX2JyYW5jaGVzIiBicmFuY2hlc19iYXNlOiJzdGFuZGFyZCIgIHByaW86IjIwIiBtc2c6IlBsZWFzZSBjaG9vc2UgYSBtYWNoaW5lIGJyYW5jaCB0byBiYXNlIHRoaXMgQlNQIG9uOiIgZGVmYXVsdDoic3RhbmRhcmQvYmFzZSIgfX0KKwore3sgaWYgbmVlZF9uZXdfa2JyYW5jaCA9PSAibiIgYW5kIHFlbXVhcmNoID09ICJ4ODZfNjQiOiB9fQore3sgaW5wdXQgdHlwZToiY2hvaWNlbGlzdCIgbmFtZToiZXhpc3Rpbmdfa2JyYW5jaCIgbmFtZWFwcGVuZDoieDg2XzY0IiBnZW46ImJzcC5rZXJuZWwuYWxsX2JyYW5jaGVzIiBicmFuY2hlc19iYXNlOiJzdGFuZGFyZCIgIHByaW86IjIwIiBtc2c6IlBsZWFzZSBjaG9vc2UgYSBtYWNoaW5lIGJyYW5jaCB0byBiYXNlIHRoaXMgQlNQIG9uOiIgZGVmYXVsdDoic3RhbmRhcmQvYmFzZSIgfX0KKwore3sgaWYgbmVlZF9uZXdfa2JyYW5jaCA9PSAibiIgYW5kIHFlbXVhcmNoID09ICJtaXBzIjogfX0KK3t7IGlucHV0IHR5cGU6ImNob2ljZWxpc3QiIG5hbWU6ImV4aXN0aW5nX2ticmFuY2giIG5hbWVhcHBlbmQ6Im1pcHMiIGdlbjoiYnNwLmtlcm5lbC5hbGxfYnJhbmNoZXMiIGJyYW5jaGVzX2Jhc2U6InN0YW5kYXJkIiBwcmlvOiIyMCIgbXNnOiJQbGVhc2UgY2hvb3NlIGEgbWFjaGluZSBicmFuY2ggdG8gYmFzZSB0aGlzIEJTUCBvbjoiIGRlZmF1bHQ6InN0YW5kYXJkL210aS1tYWx0YTMyIiB9fQorCit7eyBpZiBuZWVkX25ld19rYnJhbmNoID09ICJuIiBhbmQgcWVtdWFyY2ggPT0gIm1pcHM2NCI6IH19Cit7eyBpbnB1dCB0eXBlOiJjaG9pY2VsaXN0IiBuYW1lOiJleGlzdGluZ19rYnJhbmNoIiBuYW1lYXBwZW5kOiJtaXBzNjQiIGdlbjoiYnNwLmtlcm5lbC5hbGxfYnJhbmNoZXMiIGJyYW5jaGVzX2Jhc2U6InN0YW5kYXJkIiBwcmlvOiIyMCIgbXNnOiJQbGVhc2UgY2hvb3NlIGEgbWFjaGluZSBicmFuY2ggdG8gYmFzZSB0aGlzIEJTUCBvbjoiIGRlZmF1bHQ6InN0YW5kYXJkL210aS1tYWx0YTY0IiB9fQorCit7eyBpZiBuZWVkX25ld19rYnJhbmNoID09ICJ5IiBhbmQgcWVtdWFyY2ggPT0gIm1pcHMiOiB9fQore3sgaW5wdXQgdHlwZToiY2hvaWNlbGlzdCIgbmFtZToibmV3X2ticmFuY2giIG5hbWVhcHBlbmQ6Im1pcHMiIGdlbjoiYnNwLmtlcm5lbC5hbGxfYnJhbmNoZXMiIGJyYW5jaGVzX2Jhc2U6InN0YW5kYXJkIiBwcmlvOiIyMCIgbXNnOiJQbGVhc2UgY2hvb3NlIGEgbWFjaGluZSBicmFuY2ggdG8gYmFzZSB0aGlzIEJTUCBvbjoiIGRlZmF1bHQ6InN0YW5kYXJkL2Jhc2UiIH19CisKK3t7IGlmIG5lZWRfbmV3X2ticmFuY2ggPT0gInkiIGFuZCBxZW11YXJjaCA9PSAibWlwczY0IjogfX0KK3t7IGlucHV0IHR5cGU6ImNob2ljZWxpc3QiIG5hbWU6Im5ld19rYnJhbmNoIiBuYW1lYXBwZW5kOiJtaXBzNjQiIGdlbjoiYnNwLmtlcm5lbC5hbGxfYnJhbmNoZXMiIGJyYW5jaGVzX2Jhc2U6InN0YW5kYXJkIiBwcmlvOiIyMCIgbXNnOiJQbGVhc2UgY2hvb3NlIGEgbWFjaGluZSBicmFuY2ggdG8gYmFzZSB0aGlzIEJTUCBvbjoiIGRlZmF1bHQ6InN0YW5kYXJkL2Jhc2UiIH19CisKK3t7IGlmIG5lZWRfbmV3X2ticmFuY2ggPT0gIm4iOiB9fQorS0JSQU5DSF97ez1tYWNoaW5lfX0gID0gInt7PWV4aXN0aW5nX2ticmFuY2h9fSIKKwore3sgaW5wdXQgdHlwZToiYm9vbGVhbiIgbmFtZToic21wIiBwcmlvOiIzMCIgbXNnOiJXb3VsZCB5b3UgbGlrZSBTTVAgc3VwcG9ydD8gKHkvbikiIGRlZmF1bHQ6InkifX0KK3t7IGlmIHNtcCA9PSAieSI6IH19CitLRVJORUxfRkVBVFVSRVNfYXBwZW5kX3t7PW1hY2hpbmV9fSArPSAiIGNmZy9zbXAuc2NjIgorCitTUkNfVVJJICs9ICJmaWxlOi8ve3s9bWFjaGluZX19LXN0YW5kYXJkLnNjYyBcCisgICAgICAgICAgICBmaWxlOi8ve3s9bWFjaGluZX19LXVzZXItY29uZmlnLmNmZyBcCisgICAgICAgICAgICBmaWxlOi8ve3s9bWFjaGluZX19LXVzZXItZmVhdHVyZXMuc2NjIFwKKyAgICAgICAgICAgIgorCisjIHJlcGxhY2UgdGhlc2UgU1JDUkVWcyB3aXRoIHRoZSByZWFsIGNvbW1pdCBpZHMgb25jZSB5b3UndmUgaGFkCisjIHRoZSBhcHByb3ByaWF0ZSBjaGFuZ2VzIGNvbW1pdHRlZCB0byB0aGUgdXBzdHJlYW0gbGludXgteW9jdG8gcmVwbworU1JDUkVWX21hY2hpbmVfcG4tbGludXgteW9jdG9fe3s9bWFjaGluZX19ID89ICIke0FVVE9SRVZ9IgorU1JDUkVWX21ldGFfcG4tbGludXgteW9jdG9fe3s9bWFjaGluZX19ID89ICIke0FVVE9SRVZ9IgorI0xJTlVYX1ZFUlNJT04gPSAiNC44IgpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gveDg2XzY0L3JlY2lwZXMta2VybmVsL2xpbnV4L2ZpbGVzL21hY2hpbmUtc3RhbmRhcmQuc2NjIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gveDg2XzY0L3JlY2lwZXMta2VybmVsL2xpbnV4L2ZpbGVzL21hY2hpbmUtc3RhbmRhcmQuc2NjCmluZGV4IDljOWNjOTAuLmEyYjI5MTAgMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL3g4Nl82NC9yZWNpcGVzLWtlcm5lbC9saW51eC9maWxlcy9tYWNoaW5lLXN0YW5kYXJkLnNjYworKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC94ODZfNjQvcmVjaXBlcy1rZXJuZWwvbGludXgvZmlsZXMvbWFjaGluZS1zdGFuZGFyZC5zY2MKQEAgLTMsNyArMyw3IEBACiAKIGRlZmluZSBLQVJDSCB4ODZfNjQKIAotaW5jbHVkZSB7ez1tYXBfc3RhbmRhcmRfa2JyYW5jaChuZWVkX25ld19rYnJhbmNoLCBuZXdfa2JyYW5jaCwgZXhpc3Rpbmdfa2JyYW5jaCl9fQoraW5jbHVkZSB7ez1tYXBfc3RhbmRhcmRfa2JyYW5jaChuZWVkX25ld19rYnJhbmNoLCBuZXdfa2JyYW5jaCwgZXhpc3Rpbmdfa2JyYW5jaCl9fSBub3BhdGNoCiB7eyBpZiBuZWVkX25ld19rYnJhbmNoID09ICJ5IjogfX0KIGRlZmluZSBLVFlQRSB7ez1uZXdfa2JyYW5jaH19CiBicmFuY2gge3s9bWFjaGluZX19CmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC94ODZfNjQvcmVjaXBlcy1rZXJuZWwvbGludXgva2VybmVsLWxpc3Qubm9pbnN0YWxsIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gveDg2XzY0L3JlY2lwZXMta2VybmVsL2xpbnV4L2tlcm5lbC1saXN0Lm5vaW5zdGFsbAppbmRleCAwMGNmMzYwLi4wMTIwZWQwIDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC94ODZfNjQvcmVjaXBlcy1rZXJuZWwvbGludXgva2VybmVsLWxpc3Qubm9pbnN0YWxsCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL3g4Nl82NC9yZWNpcGVzLWtlcm5lbC9saW51eC9rZXJuZWwtbGlzdC5ub2luc3RhbGwKQEAgLTEsNSArMSw1IEBACiB7eyBpZiBrZXJuZWxfY2hvaWNlICE9ICJjdXN0b20iOiB9fQote3sgaW5wdXQgdHlwZToiYm9vbGVhbiIgbmFtZToidXNlX2RlZmF1bHRfa2VybmVsIiBwcmlvOiIxMCIgbXNnOiJXb3VsZCB5b3UgbGlrZSB0byB1c2UgdGhlIGRlZmF1bHQgKDQuNCkga2VybmVsPyAoeS9uKSIgZGVmYXVsdDoieSJ9fQore3sgaW5wdXQgdHlwZToiYm9vbGVhbiIgbmFtZToidXNlX2RlZmF1bHRfa2VybmVsIiBwcmlvOiIxMCIgbXNnOiJXb3VsZCB5b3UgbGlrZSB0byB1c2UgdGhlIGRlZmF1bHQgKDQuOCkga2VybmVsPyAoeS9uKSIgZGVmYXVsdDoieSJ9fQogCiB7eyBpZiBrZXJuZWxfY2hvaWNlICE9ICJjdXN0b20iIGFuZCB1c2VfZGVmYXVsdF9rZXJuZWwgPT0gIm4iOiB9fQote3sgaW5wdXQgdHlwZToiY2hvaWNlbGlzdCIgbmFtZToia2VybmVsX2Nob2ljZSIgZ2VuOiJic3Aua2VybmVsLmtlcm5lbHMiIHByaW86IjEwIiBtc2c6IlBsZWFzZSBjaG9vc2UgdGhlIGtlcm5lbCB0byB1c2UgaW4gdGhpcyBCU1A6IiBkZWZhdWx0OiJsaW51eC15b2N0b180LjQifX0KK3t7IGlucHV0IHR5cGU6ImNob2ljZWxpc3QiIG5hbWU6Imtlcm5lbF9jaG9pY2UiIGdlbjoiYnNwLmtlcm5lbC5rZXJuZWxzIiBwcmlvOiIxMCIgbXNnOiJQbGVhc2UgY2hvb3NlIHRoZSBrZXJuZWwgdG8gdXNlIGluIHRoaXMgQlNQOiIgZGVmYXVsdDoibGludXgteW9jdG9fNC44In19CmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC94ODZfNjQvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgteW9jdG8tdGlueV80LjguYmJhcHBlbmQgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC94ODZfNjQvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgteW9jdG8tdGlueV80LjguYmJhcHBlbmQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWZiNDVkOQotLS0gL2Rldi9udWxsCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL3g4Nl82NC9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC15b2N0by10aW55XzQuOC5iYmFwcGVuZApAQCAtMCwwICsxLDMzIEBACisjIHlvY3RvLWJzcC1maWxlbmFtZSB7eyBpZiBrZXJuZWxfY2hvaWNlID09ICJsaW51eC15b2N0by10aW55XzQuOCI6IH19IHRoaXMKK0ZJTEVTRVhUUkFQQVRIU19wcmVwZW5kIDo9ICIke1RISVNESVJ9L2ZpbGVzOiIKKworUFIgOj0gIiR7UFJ9LjEiCisKK0NPTVBBVElCTEVfTUFDSElORV97ez1tYWNoaW5lfX0gPSAie3s9bWFjaGluZX19IgorCit7eyBpbnB1dCB0eXBlOiJib29sZWFuIiBuYW1lOiJuZWVkX25ld19rYnJhbmNoIiBwcmlvOiIyMCIgbXNnOiJEbyB5b3UgbmVlZCBhIG5ldyBtYWNoaW5lIGJyYW5jaCBmb3IgdGhpcyBCU1AgKHRoZSBhbHRlcm5hdGl2ZSBpcyB0byByZS11c2UgYW4gZXhpc3RpbmcgYnJhbmNoKT8gW3kvbl0iIGRlZmF1bHQ6InkiIH19CisKK3t7IGlmIG5lZWRfbmV3X2ticmFuY2ggPT0gInkiOiB9fQore3sgaW5wdXQgdHlwZToiY2hvaWNlbGlzdCIgbmFtZToibmV3X2ticmFuY2giIGdlbjoiYnNwLmtlcm5lbC5hbGxfYnJhbmNoZXMiIGJyYW5jaGVzX2Jhc2U6InN0YW5kYXJkL3RpbnkiIHByaW86IjIwIiBtc2c6IlBsZWFzZSBjaG9vc2UgYSBtYWNoaW5lIGJyYW5jaCB0byBiYXNlIHRoaXMgQlNQIG9uOiIgZGVmYXVsdDoic3RhbmRhcmQvdGlueS9iYXNlIiB9fQorCit7eyBpZiBuZWVkX25ld19rYnJhbmNoID09ICJuIjogfX0KK3t7IGlucHV0IHR5cGU6ImNob2ljZWxpc3QiIG5hbWU6ImV4aXN0aW5nX2ticmFuY2giIGdlbjoiYnNwLmtlcm5lbC5hbGxfYnJhbmNoZXMiIGJyYW5jaGVzX2Jhc2U6InN0YW5kYXJkL3RpbnkiIHByaW86IjIwIiBtc2c6IlBsZWFzZSBjaG9vc2UgYSBtYWNoaW5lIGJyYW5jaCB0byBiYXNlIHRoaXMgQlNQIG9uOiIgZGVmYXVsdDoic3RhbmRhcmQvdGlueS9iYXNlIiB9fQorCit7eyBpZiBuZWVkX25ld19rYnJhbmNoID09ICJuIjogfX0KK0tCUkFOQ0hfe3s9bWFjaGluZX19ICA9ICJ7ez1leGlzdGluZ19rYnJhbmNofX0iCisKK3t7IGlucHV0IHR5cGU6ImJvb2xlYW4iIG5hbWU6InNtcCIgcHJpbzoiMzAiIG1zZzoiRG8geW91IG5lZWQgU01QIHN1cHBvcnQ/ICh5L24pIiBkZWZhdWx0OiJ5In19Cit7eyBpZiBzbXAgPT0gInkiOiB9fQorS0VSTkVMX0ZFQVRVUkVTX2FwcGVuZF97ez1tYWNoaW5lfX0gKz0gIiBjZmcvc21wLnNjYyIKKworU1JDX1VSSSArPSAiZmlsZTovL3t7PW1hY2hpbmV9fS10aW55LnNjYyBcCisgICAgICAgICAgICBmaWxlOi8ve3s9bWFjaGluZX19LXVzZXItY29uZmlnLmNmZyBcCisgICAgICAgICAgICBmaWxlOi8ve3s9bWFjaGluZX19LXVzZXItcGF0Y2hlcy5zY2MgXAorICAgICAgICAgICAgZmlsZTovL3t7PW1hY2hpbmV9fS11c2VyLWZlYXR1cmVzLnNjYyBcCisgICAgICAgICAgICIKKworIyByZXBsYWNlIHRoZXNlIFNSQ1JFVnMgd2l0aCB0aGUgcmVhbCBjb21taXQgaWRzIG9uY2UgeW91J3ZlIGhhZAorIyB0aGUgYXBwcm9wcmlhdGUgY2hhbmdlcyBjb21taXR0ZWQgdG8gdGhlIHVwc3RyZWFtIGxpbnV4LXlvY3RvIHJlcG8KK1NSQ1JFVl9tYWNoaW5lX3BuLWxpbnV4LXlvY3RvLXRpbnlfe3s9bWFjaGluZX19ID89ICIke0FVVE9SRVZ9IgorU1JDUkVWX21ldGFfcG4tbGludXgteW9jdG8tdGlueV97ez1tYWNoaW5lfX0gPz0gIiR7QVVUT1JFVn0iCisjTElOVVhfVkVSU0lPTiA9ICI0LjgiCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC94ODZfNjQvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgteW9jdG9fNC44LmJiYXBwZW5kIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gveDg2XzY0L3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LXlvY3RvXzQuOC5iYmFwcGVuZApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43YzBkZjhiCi0tLSAvZGV2L251bGwKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gveDg2XzY0L3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LXlvY3RvXzQuOC5iYmFwcGVuZApAQCAtMCwwICsxLDMyIEBACisjIHlvY3RvLWJzcC1maWxlbmFtZSB7eyBpZiBrZXJuZWxfY2hvaWNlID09ICJsaW51eC15b2N0b180LjgiOiB9fSB0aGlzCitGSUxFU0VYVFJBUEFUSFNfcHJlcGVuZCA6PSAiJHtUSElTRElSfS9maWxlczoiCisKK1BSIDo9ICIke1BSfS4xIgorCitDT01QQVRJQkxFX01BQ0hJTkVfe3s9bWFjaGluZX19ID0gInt7PW1hY2hpbmV9fSIKKwore3sgaW5wdXQgdHlwZToiYm9vbGVhbiIgbmFtZToibmVlZF9uZXdfa2JyYW5jaCIgcHJpbzoiMjAiIG1zZzoiRG8geW91IG5lZWQgYSBuZXcgbWFjaGluZSBicmFuY2ggZm9yIHRoaXMgQlNQICh0aGUgYWx0ZXJuYXRpdmUgaXMgdG8gcmUtdXNlIGFuIGV4aXN0aW5nIGJyYW5jaCk/IFt5L25dIiBkZWZhdWx0OiJ5IiB9fQorCit7eyBpZiBuZWVkX25ld19rYnJhbmNoID09ICJ5IjogfX0KK3t7IGlucHV0IHR5cGU6ImNob2ljZWxpc3QiIG5hbWU6Im5ld19rYnJhbmNoIiBnZW46ImJzcC5rZXJuZWwuYWxsX2JyYW5jaGVzIiBicmFuY2hlc19iYXNlOiJzdGFuZGFyZCIgcHJpbzoiMjAiIG1zZzoiUGxlYXNlIGNob29zZSBhIG1hY2hpbmUgYnJhbmNoIHRvIGJhc2UgdGhpcyBCU1Agb246IiBkZWZhdWx0OiJzdGFuZGFyZC9iYXNlIiB9fQorCit7eyBpZiBuZWVkX25ld19rYnJhbmNoID09ICJuIjogfX0KK3t7IGlucHV0IHR5cGU6ImNob2ljZWxpc3QiIG5hbWU6ImV4aXN0aW5nX2ticmFuY2giIGdlbjoiYnNwLmtlcm5lbC5hbGxfYnJhbmNoZXMiIGJyYW5jaGVzX2Jhc2U6InN0YW5kYXJkIiBwcmlvOiIyMCIgbXNnOiJQbGVhc2UgY2hvb3NlIGEgbWFjaGluZSBicmFuY2ggdG8gYmFzZSB0aGlzIEJTUCBvbjoiIGRlZmF1bHQ6InN0YW5kYXJkL2Jhc2UiIH19CisKK3t7IGlmIG5lZWRfbmV3X2ticmFuY2ggPT0gIm4iOiB9fQorS0JSQU5DSF97ez1tYWNoaW5lfX0gID0gInt7PWV4aXN0aW5nX2ticmFuY2h9fSIKKwore3sgaW5wdXQgdHlwZToiYm9vbGVhbiIgbmFtZToic21wIiBwcmlvOiIzMCIgbXNnOiJEbyB5b3UgbmVlZCBTTVAgc3VwcG9ydD8gKHkvbikiIGRlZmF1bHQ6InkifX0KK3t7IGlmIHNtcCA9PSAieSI6IH19CitLRVJORUxfRkVBVFVSRVNfYXBwZW5kX3t7PW1hY2hpbmV9fSArPSAiIGNmZy9zbXAuc2NjIgorCitTUkNfVVJJICs9ICJmaWxlOi8ve3s9bWFjaGluZX19LXN0YW5kYXJkLnNjYyBcCisgICAgICAgICAgICBmaWxlOi8ve3s9bWFjaGluZX19LXVzZXItY29uZmlnLmNmZyBcCisgICAgICAgICAgICBmaWxlOi8ve3s9bWFjaGluZX19LXVzZXItZmVhdHVyZXMuc2NjIFwKKyAgICAgICAgICAgIgorCisjIHJlcGxhY2UgdGhlc2UgU1JDUkVWcyB3aXRoIHRoZSByZWFsIGNvbW1pdCBpZHMgb25jZSB5b3UndmUgaGFkCisjIHRoZSBhcHByb3ByaWF0ZSBjaGFuZ2VzIGNvbW1pdHRlZCB0byB0aGUgdXBzdHJlYW0gbGludXgteW9jdG8gcmVwbworU1JDUkVWX21hY2hpbmVfcG4tbGludXgteW9jdG9fe3s9bWFjaGluZX19ID89ICIke0FVVE9SRVZ9IgorU1JDUkVWX21ldGFfcG4tbGludXgteW9jdG9fe3s9bWFjaGluZX19ID89ICIke0FVVE9SRVZ9IgorI0xJTlVYX1ZFUlNJT04gPSAiNC44IgpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L3NjcmlwdHMvbGliL2RldnRvb2wvX19pbml0X18ucHkgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvZGV2dG9vbC9fX2luaXRfXy5weQppbmRleCBmZjk3ZGZjLi5lNjc1MTMzIDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvZGV2dG9vbC9fX2luaXRfXy5weQorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvZGV2dG9vbC9fX2luaXRfXy5weQpAQCAtMSw0ICsxLDQgQEAKLSMhL3Vzci9iaW4vZW52IHB5dGhvbgorIyEvdXNyL2Jpbi9lbnYgcHl0aG9uMwogCiAjIERldmVsb3BtZW50IHRvb2wgLSB1dGlsaXR5IGZ1bmN0aW9ucyBmb3IgcGx1Z2lucwogIwpAQCAtMjYsMTAgKzI2LDExIEBACiAKIGxvZ2dlciA9IGxvZ2dpbmcuZ2V0TG9nZ2VyKCdkZXZ0b29sJykKIAotCiBjbGFzcyBEZXZ0b29sRXJyb3IoRXhjZXB0aW9uKToKICAgICAiIiJFeGNlcHRpb24gZm9yIGhhbmRsaW5nIGRldnRvb2wgZXJyb3JzIiIiCi0gICAgcGFzcworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBtZXNzYWdlLCBleGl0Y29kZT0xKToKKyAgICAgICAgc3VwZXIoRGV2dG9vbEVycm9yLCBzZWxmKS5fX2luaXRfXyhtZXNzYWdlKQorICAgICAgICBzZWxmLmV4aXRjb2RlID0gZXhpdGNvZGUKIAogCiBkZWYgZXhlY19idWlsZF9lbnZfY29tbWFuZChpbml0X3BhdGgsIGJ1aWxkZGlyLCBjbWQsIHdhdGNoPUZhbHNlLCAqKm9wdGlvbnMpOgpAQCAtNTksNyArNjAsNyBAQAogZGVmIGV4ZWNfd2F0Y2goY21kLCAqKm9wdGlvbnMpOgogICAgICIiIlJ1biBwcm9ncmFtIHdpdGggc3Rkb3V0IHNob3duIG9uIHN5cy5zdGRvdXQiIiIKICAgICBpbXBvcnQgYmIKLSAgICBpZiBpc2luc3RhbmNlKGNtZCwgYmFzZXN0cmluZykgYW5kIG5vdCAic2hlbGwiIGluIG9wdGlvbnM6CisgICAgaWYgaXNpbnN0YW5jZShjbWQsIHN0cikgYW5kIG5vdCAic2hlbGwiIGluIG9wdGlvbnM6CiAgICAgICAgIG9wdGlvbnNbInNoZWxsIl0gPSBUcnVlCiAKICAgICBwcm9jZXNzID0gc3VicHJvY2Vzcy5Qb3BlbigKQEAgLTY5LDYgKzcwLDcgQEAKICAgICBidWYgPSAnJwogICAgIHdoaWxlIFRydWU6CiAgICAgICAgIG91dCA9IHByb2Nlc3Muc3Rkb3V0LnJlYWQoMSkKKyAgICAgICAgb3V0ID0gb3V0LmRlY29kZSgndXRmLTgnKQogICAgICAgICBpZiBvdXQ6CiAgICAgICAgICAgICBzeXMuc3Rkb3V0LndyaXRlKG91dCkKICAgICAgICAgICAgIHN5cy5zdGRvdXQuZmx1c2goKQpAQCAtMTQ0LDggKzE0Niw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbm90IHBhdGguc3RhcnRzd2l0aChjb25maWcud29ya3NwYWNlX3BhdGgpXQogICAgIGVsc2U6CiAgICAgICAgIGFwcGVuZF9maWxlcyA9IE5vbmUKLSAgICByZXR1cm4gb2UucmVjaXBldXRpbHMucGFyc2VfcmVjaXBlKHJlY2lwZWZpbGUsIGFwcGVuZF9maWxlcywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRpbmZvaWwuY29uZmlnX2RhdGEpCisgICAgcmV0dXJuIG9lLnJlY2lwZXV0aWxzLnBhcnNlX3JlY2lwZSh0aW5mb2lsLmNvb2tlciwgcmVjaXBlZmlsZSwgYXBwZW5kX2ZpbGVzKQogCiBkZWYgY2hlY2tfd29ya3NwYWNlX3JlY2lwZSh3b3Jrc3BhY2UsIHBuLCBjaGVja3NyYz1UcnVlLCBiYmNsYXNzZXh0ZW5kPUZhbHNlKToKICAgICAiIiIKQEAgLTE1NSw3ICsxNTYsNyBAQAogCiAgICAgd29ya3NwYWNlcG4gPSBwbgogCi0gICAgZm9yIHJlY2lwZSwgdmFsdWUgaW4gd29ya3NwYWNlLml0ZXJpdGVtcygpOgorICAgIGZvciByZWNpcGUsIHZhbHVlIGluIHdvcmtzcGFjZS5pdGVtcygpOgogICAgICAgICBpZiByZWNpcGUgPT0gcG46CiAgICAgICAgICAgICBicmVhawogICAgICAgICBpZiBiYmNsYXNzZXh0ZW5kOgpAQCAtMTk1LDE1ICsxOTYsMTggQEAKICAgICAgICAgYl9pc19zID0gRmFsc2UKICAgICByZXR1cm4gYl9pc19zCiAKLWRlZiBzZXR1cF9naXRfcmVwbyhyZXBvZGlyLCB2ZXJzaW9uLCBkZXZicmFuY2gsIGJhc2V0YWc9J2RldnRvb2wtYmFzZScpOgorZGVmIHNldHVwX2dpdF9yZXBvKHJlcG9kaXIsIHZlcnNpb24sIGRldmJyYW5jaCwgYmFzZXRhZz0nZGV2dG9vbC1iYXNlJywgZD1Ob25lKToKICAgICAiIiIKICAgICBTZXQgdXAgdGhlIGdpdCByZXBvc2l0b3J5IGZvciB0aGUgc291cmNlIHRyZWUKICAgICAiIiIKICAgICBpbXBvcnQgYmIucHJvY2VzcworICAgIGltcG9ydCBvZS5wYXRjaAogICAgIGlmIG5vdCBvcy5wYXRoLmV4aXN0cyhvcy5wYXRoLmpvaW4ocmVwb2RpciwgJy5naXQnKSk6CiAgICAgICAgIGJiLnByb2Nlc3MucnVuKCdnaXQgaW5pdCcsIGN3ZD1yZXBvZGlyKQogICAgICAgICBiYi5wcm9jZXNzLnJ1bignZ2l0IGFkZCAuJywgY3dkPXJlcG9kaXIpCi0gICAgICAgIGNvbW1pdF9jbWQgPSBbJ2dpdCcsICdjb21taXQnLCAnLXEnXQorICAgICAgICBjb21taXRfY21kID0gWydnaXQnXQorICAgICAgICBvZS5wYXRjaC5HaXRBcHBseVRyZWUuZ2l0Q29tbWFuZFVzZXJPcHRpb25zKGNvbW1pdF9jbWQsIGQ9ZCkKKyAgICAgICAgY29tbWl0X2NtZCArPSBbJ2NvbW1pdCcsICctcSddCiAgICAgICAgIHN0ZG91dCwgXyA9IGJiLnByb2Nlc3MucnVuKCdnaXQgc3RhdHVzIC0tcG9yY2VsYWluJywgY3dkPXJlcG9kaXIpCiAgICAgICAgIGlmIG5vdCBzdGRvdXQ6CiAgICAgICAgICAgICBjb21taXRfY21kLmFwcGVuZCgnLS1hbGxvdy1lbXB0eScpCkBAIC0yNTUsMyArMjU5LDMyIEBACiAgICAgICAgICAgICBlbGlmIHZhcmlhbnQgaW4gWyduYXRpdmUnLCAnY3Jvc3MnLCAnY3Jvc3NzZGsnXToKICAgICAgICAgICAgICAgICB0YXJnZXRzLmFwcGVuZCgnJXMtJXMnICUgKHBuLCB2YXJpYW50KSkKICAgICByZXR1cm4gdGFyZ2V0cworCitkZWYgZW5zdXJlX25wbShjb25maWcsIGJhc2VwYXRoLCBmaXhlZF9zZXR1cD1GYWxzZSk6CisgICAgIiIiCisgICAgRW5zdXJlIHRoYXQgbnBtIGlzIGF2YWlsYWJsZSBhbmQgZWl0aGVyIGJ1aWxkIGl0IG9yIHNob3cgYQorICAgIHJlYXNvbmFibGUgZXJyb3IgbWVzc2FnZQorICAgICIiIgorICAgIHRpbmZvaWwgPSBzZXR1cF90aW5mb2lsKGNvbmZpZ19vbmx5PVRydWUsIGJhc2VwYXRoPWJhc2VwYXRoKQorICAgIHRyeToKKyAgICAgICAgbmF0aXZlcGF0aCA9IHRpbmZvaWwuY29uZmlnX2RhdGEuZ2V0VmFyKCdTVEFHSU5HX0JJTkRJUl9OQVRJVkUnLCBUcnVlKQorICAgIGZpbmFsbHk6CisgICAgICAgIHRpbmZvaWwuc2h1dGRvd24oKQorCisgICAgbnBtcGF0aCA9IG9zLnBhdGguam9pbihuYXRpdmVwYXRoLCAnbnBtJykKKyAgICBpZiBub3Qgb3MucGF0aC5leGlzdHMobnBtcGF0aCk6CisgICAgICAgIGxvZ2dlci5pbmZvKCdCdWlsZGluZyBub2RlanMtbmF0aXZlJykKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgZXhlY19idWlsZF9lbnZfY29tbWFuZChjb25maWcuaW5pdF9wYXRoLCBiYXNlcGF0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2JpdGJha2UgLXEgbm9kZWpzLW5hdGl2ZScsIHdhdGNoPVRydWUpCisgICAgICAgIGV4Y2VwdCBiYi5wcm9jZXNzLkV4ZWN1dGlvbkVycm9yIGFzIGU6CisgICAgICAgICAgICBpZiAiTm90aGluZyBQUk9WSURFUyAnbm9kZWpzLW5hdGl2ZSciIGluIGUuc3Rkb3V0OgorICAgICAgICAgICAgICAgIGlmIGZpeGVkX3NldHVwOgorICAgICAgICAgICAgICAgICAgICBtc2cgPSAnbm9kZWpzLW5hdGl2ZSBpcyByZXF1aXJlZCBmb3IgbnBtIGJ1dCBpcyBub3QgYXZhaWxhYmxlIHdpdGhpbiB0aGlzIFNESycKKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICBtc2cgPSAnbm9kZWpzLW5hdGl2ZSBpcyByZXF1aXJlZCBmb3IgbnBtIGJ1dCBpcyBub3QgYXZhaWxhYmxlIC0geW91IHdpbGwgbGlrZWx5IG5lZWQgdG8gYWRkIGEgbGF5ZXIgdGhhdCBwcm92aWRlcyBub2RlanMnCisgICAgICAgICAgICAgICAgcmFpc2UgRGV2dG9vbEVycm9yKG1zZykKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgcmFpc2UKKyAgICAgICAgaWYgbm90IG9zLnBhdGguZXhpc3RzKG5wbXBhdGgpOgorICAgICAgICAgICAgcmFpc2UgRGV2dG9vbEVycm9yKCdCdWlsdCBub2RlanMtbmF0aXZlIGJ1dCBucG0gYmluYXJ5IHN0aWxsIGNvdWxkIG5vdCBiZSBmb3VuZCBhdCAlcycgJSBucG1wYXRoKQpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L3NjcmlwdHMvbGliL2RldnRvb2wvYnVpbGQucHkgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvZGV2dG9vbC9idWlsZC5weQppbmRleCA0OGY2ZmUxLi42YmU1NDlkIDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvZGV2dG9vbC9idWlsZC5weQorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvZGV2dG9vbC9idWlsZC5weQpAQCAtMjcsNyArMjcsNyBAQAogCiAKIGRlZiBfc2V0X2ZpbGVfdmFsdWVzKGZuLCB2YWx1ZXMpOgotICAgIHJlbWFpbmluZyA9IHZhbHVlcy5rZXlzKCkKKyAgICByZW1haW5pbmcgPSBsaXN0KHZhbHVlcy5rZXlzKCkpCiAKICAgICBkZWYgdmFyZnVuYyh2YXJuYW1lLCBvcmlndmFsdWUsIG9wLCBuZXdsaW5lcyk6CiAgICAgICAgIG5ld3ZhbHVlID0gdmFsdWVzLmdldCh2YXJuYW1lLCBvcmlndmFsdWUpCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvZGV2dG9vbC9idWlsZF9pbWFnZS5weSBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9kZXZ0b29sL2J1aWxkX2ltYWdlLnB5CmluZGV4IGU1MWQ3NjYuLmFlNzU1MTEgMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9kZXZ0b29sL2J1aWxkX2ltYWdlLnB5CisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9kZXZ0b29sL2J1aWxkX2ltYWdlLnB5CkBAIC0xOCw2ICsxOCw3IEBACiAiIiJEZXZ0b29sIHBsdWdpbiBjb250YWluaW5nIHRoZSBidWlsZC1pbWFnZSBzdWJjb21tYW5kLiIiIgogCiBpbXBvcnQgb3MKK2ltcG9ydCBlcnJubwogaW1wb3J0IGxvZ2dpbmcKIAogZnJvbSBiYi5wcm9jZXNzIGltcG9ydCBFeGVjdXRpb25FcnJvcgpAQCAtMzQsNyArMzUsNyBAQAogICAgIGZvciByZWNpcGUgaW4gd29ya3NwYWNlOgogICAgICAgICBkYXRhID0gcGFyc2VfcmVjaXBlKGNvbmZpZywgdGluZm9pbCwgcmVjaXBlLCBUcnVlKQogICAgICAgICBpZiAnY2xhc3MtdGFyZ2V0JyBpbiBkYXRhLmdldFZhcignT1ZFUlJJREVTJywgVHJ1ZSkuc3BsaXQoJzonKToKLSAgICAgICAgICAgIGlmIHJlY2lwZSBpbiBkYXRhLmdldFZhcignUEFDS0FHRVMnLCBUcnVlKToKKyAgICAgICAgICAgIGlmIHJlY2lwZSBpbiBkYXRhLmdldFZhcignUEFDS0FHRVMnLCBUcnVlKS5zcGxpdCgpOgogICAgICAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQocmVjaXBlKQogICAgICAgICAgICAgZWxzZToKICAgICAgICAgICAgICAgICBsb2dnZXIud2FybmluZygiU2tpcHBpbmcgcmVjaXBlICVzIGFzIGl0IGRvZXNuJ3QgcHJvZHVjZSBhICIKQEAgLTcyLDcwICs3Myw4OSBAQAogICAgIHJldHVybiByZXN1bHQKIAogZGVmIGJ1aWxkX2ltYWdlX3Rhc2soY29uZmlnLCBiYXNlcGF0aCwgd29ya3NwYWNlLCBpbWFnZSwgYWRkX3BhY2thZ2VzPU5vbmUsIHRhc2s9Tm9uZSwgZXh0cmFfYXBwZW5kPU5vbmUpOgotICAgIGFwcGVuZGZpbGUgPSBvcy5wYXRoLmpvaW4oY29uZmlnLndvcmtzcGFjZV9wYXRoLCAnYXBwZW5kcycsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnJXMuYmJhcHBlbmQnICUgaW1hZ2UpCi0KICAgICAjIHJlbW92ZSA8aW1hZ2U+LmJiYXBwZW5kIHRvIG1ha2Ugc3VyZSBzZXR1cF90aW5mb2lsIGRvZXNuJ3QKICAgICAjIGJyZWFrIGJlY2F1c2Ugb2YgaXQKLSAgICBpZiBvcy5wYXRoLmlzZmlsZShhcHBlbmRmaWxlKToKLSAgICAgICAgb3MudW5saW5rKGFwcGVuZGZpbGUpCisgICAgdGFyZ2V0X2Jhc2VuYW1lID0gY29uZmlnLmdldCgnU0RLJywgJ3RhcmdldF9iYXNlbmFtZScsICcnKQorICAgIGlmIHRhcmdldF9iYXNlbmFtZToKKyAgICAgICAgYXBwZW5kZmlsZSA9IG9zLnBhdGguam9pbihjb25maWcud29ya3NwYWNlX3BhdGgsICdhcHBlbmRzJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnJXMuYmJhcHBlbmQnICUgdGFyZ2V0X2Jhc2VuYW1lKQorICAgICAgICB0cnk6CisgICAgICAgICAgICBvcy51bmxpbmsoYXBwZW5kZmlsZSkKKyAgICAgICAgZXhjZXB0IE9TRXJyb3IgYXMgZXhjOgorICAgICAgICAgICAgaWYgZXhjLmVycm5vICE9IGVycm5vLkVOT0VOVDoKKyAgICAgICAgICAgICAgICByYWlzZQogCiAgICAgdGluZm9pbCA9IHNldHVwX3RpbmZvaWwoYmFzZXBhdGg9YmFzZXBhdGgpCi0gICAgcmQgPSBwYXJzZV9yZWNpcGUoY29uZmlnLCB0aW5mb2lsLCBpbWFnZSwgVHJ1ZSkKLSAgICBpZiBub3QgcmQ6Ci0gICAgICAgICMgRXJyb3IgYWxyZWFkeSBzaG93bgotICAgICAgICByZXR1cm4gKDEsIE5vbmUpCi0gICAgaWYgbm90IGJiLmRhdGEuaW5oZXJpdHNfY2xhc3MoJ2ltYWdlJywgcmQpOgotICAgICAgICByYWlzZSBUYXJnZXROb3RJbWFnZUVycm9yKCkKLQotICAgIG91dHB1dGRpciA9IE5vbmUKICAgICB0cnk6Ci0gICAgICAgIGlmIHdvcmtzcGFjZSBvciBhZGRfcGFja2FnZXM6Ci0gICAgICAgICAgICBpZiBhZGRfcGFja2FnZXM6Ci0gICAgICAgICAgICAgICAgcGFja2FnZXMgPSBhZGRfcGFja2FnZXMKLSAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgcGFja2FnZXMgPSBfZ2V0X3BhY2thZ2VzKHRpbmZvaWwsIHdvcmtzcGFjZSwgY29uZmlnKQotICAgICAgICBlbHNlOgotICAgICAgICAgICAgcGFja2FnZXMgPSBOb25lCi0gICAgICAgIGlmIG5vdCB0YXNrOgotICAgICAgICAgICAgaWYgbm90IHBhY2thZ2VzIGFuZCBub3QgYWRkX3BhY2thZ2VzIGFuZCB3b3Jrc3BhY2U6Ci0gICAgICAgICAgICAgICAgbG9nZ2VyLndhcm5pbmcoJ05vIHJlY2lwZXMgaW4gd29ya3NwYWNlLCBidWlsZGluZyBpbWFnZSAlcyB1bm1vZGlmaWVkJywgaW1hZ2UpCi0gICAgICAgICAgICBlbGlmIG5vdCBwYWNrYWdlczoKLSAgICAgICAgICAgICAgICBsb2dnZXIud2FybmluZygnTm8gcGFja2FnZXMgdG8gYWRkLCBidWlsZGluZyBpbWFnZSAlcyB1bm1vZGlmaWVkJywgaW1hZ2UpCisgICAgICAgIHJkID0gcGFyc2VfcmVjaXBlKGNvbmZpZywgdGluZm9pbCwgaW1hZ2UsIFRydWUpCisgICAgICAgIGlmIG5vdCByZDoKKyAgICAgICAgICAgICMgRXJyb3IgYWxyZWFkeSBzaG93bgorICAgICAgICAgICAgcmV0dXJuICgxLCBOb25lKQorICAgICAgICBpZiBub3QgYmIuZGF0YS5pbmhlcml0c19jbGFzcygnaW1hZ2UnLCByZCk6CisgICAgICAgICAgICByYWlzZSBUYXJnZXROb3RJbWFnZUVycm9yKCkKIAotICAgICAgICBpZiBwYWNrYWdlcyBvciBleHRyYV9hcHBlbmQ6Ci0gICAgICAgICAgICBiYi51dGlscy5ta2RpcmhpZXIob3MucGF0aC5kaXJuYW1lKGFwcGVuZGZpbGUpKQotICAgICAgICAgICAgd2l0aCBvcGVuKGFwcGVuZGZpbGUsICd3JykgYXMgYWZpbGU6Ci0gICAgICAgICAgICAgICAgaWYgcGFja2FnZXM6Ci0gICAgICAgICAgICAgICAgICAgICMgaW5jbHVkZSBwYWNrYWdlcyBmcm9tIHdvcmtzcGFjZSByZWNpcGVzIGludG8gdGhlIGltYWdlCi0gICAgICAgICAgICAgICAgICAgIGFmaWxlLndyaXRlKCdJTUFHRV9JTlNUQUxMX2FwcGVuZCA9ICIgJXMiXG4nICUgJyAnLmpvaW4ocGFja2FnZXMpKQotICAgICAgICAgICAgICAgICAgICBpZiBub3QgdGFzazoKLSAgICAgICAgICAgICAgICAgICAgICAgIGxvZ2dlci5pbmZvKCdCdWlsZGluZyBpbWFnZSAlcyB3aXRoIHRoZSBmb2xsb3dpbmcgJwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2FkZGl0aW9uYWwgcGFja2FnZXM6ICVzJywgaW1hZ2UsICcgJy5qb2luKHBhY2thZ2VzKSkKLSAgICAgICAgICAgICAgICBpZiBleHRyYV9hcHBlbmQ6Ci0gICAgICAgICAgICAgICAgICAgIGZvciBsaW5lIGluIGV4dHJhX2FwcGVuZDoKLSAgICAgICAgICAgICAgICAgICAgICAgIGFmaWxlLndyaXRlKCclc1xuJyAlIGxpbmUpCisgICAgICAgICMgR2V0IHRoZSBhY3R1YWwgZmlsZW5hbWUgdXNlZCBhbmQgc3RyaXAgdGhlIC5iYiBhbmQgZnVsbCBwYXRoCisgICAgICAgIHRhcmdldF9iYXNlbmFtZSA9IHJkLmdldFZhcignRklMRScsIFRydWUpCisgICAgICAgIHRhcmdldF9iYXNlbmFtZSA9IG9zLnBhdGguc3BsaXRleHQob3MucGF0aC5iYXNlbmFtZSh0YXJnZXRfYmFzZW5hbWUpKVswXQorICAgICAgICBjb25maWcuc2V0KCdTREsnLCAndGFyZ2V0X2Jhc2VuYW1lJywgdGFyZ2V0X2Jhc2VuYW1lKQorICAgICAgICBjb25maWcud3JpdGUoKQogCi0gICAgICAgIGlmIHRhc2sgaW4gWydwb3B1bGF0ZV9zZGsnLCAncG9wdWxhdGVfc2RrX2V4dCddOgotICAgICAgICAgICAgb3V0cHV0ZGlyID0gcmQuZ2V0VmFyKCdTREtfREVQTE9ZJywgVHJ1ZSkKLSAgICAgICAgZWxzZToKLSAgICAgICAgICAgIG91dHB1dGRpciA9IHJkLmdldFZhcignREVQTE9ZX0RJUl9JTUFHRScsIFRydWUpCisgICAgICAgIGFwcGVuZGZpbGUgPSBvcy5wYXRoLmpvaW4oY29uZmlnLndvcmtzcGFjZV9wYXRoLCAnYXBwZW5kcycsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICclcy5iYmFwcGVuZCcgJSB0YXJnZXRfYmFzZW5hbWUpCiAKLSAgICAgICAgdGluZm9pbC5zaHV0ZG93bigpCi0KLSAgICAgICAgb3B0aW9ucyA9ICcnCi0gICAgICAgIGlmIHRhc2s6Ci0gICAgICAgICAgICBvcHRpb25zICs9ICctYyAlcycgJSB0YXNrCi0KLSAgICAgICAgIyBydW4gYml0YmFrZSB0byBidWlsZCBpbWFnZSAob3Igc3BlY2lmaWVkIHRhc2spCisgICAgICAgIG91dHB1dGRpciA9IE5vbmUKICAgICAgICAgdHJ5OgotICAgICAgICAgICAgZXhlY19idWlsZF9lbnZfY29tbWFuZChjb25maWcuaW5pdF9wYXRoLCBiYXNlcGF0aCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2JpdGJha2UgJXMgJXMnICUgKG9wdGlvbnMsIGltYWdlKSwgd2F0Y2g9VHJ1ZSkKLSAgICAgICAgZXhjZXB0IEV4ZWN1dGlvbkVycm9yIGFzIGVycjoKLSAgICAgICAgICAgIHJldHVybiAoZXJyLmV4aXRjb2RlLCBOb25lKQorICAgICAgICAgICAgaWYgd29ya3NwYWNlIG9yIGFkZF9wYWNrYWdlczoKKyAgICAgICAgICAgICAgICBpZiBhZGRfcGFja2FnZXM6CisgICAgICAgICAgICAgICAgICAgIHBhY2thZ2VzID0gYWRkX3BhY2thZ2VzCisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgcGFja2FnZXMgPSBfZ2V0X3BhY2thZ2VzKHRpbmZvaWwsIHdvcmtzcGFjZSwgY29uZmlnKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBwYWNrYWdlcyA9IE5vbmUKKyAgICAgICAgICAgIGlmIG5vdCB0YXNrOgorICAgICAgICAgICAgICAgIGlmIG5vdCBwYWNrYWdlcyBhbmQgbm90IGFkZF9wYWNrYWdlcyBhbmQgd29ya3NwYWNlOgorICAgICAgICAgICAgICAgICAgICBsb2dnZXIud2FybmluZygnTm8gcmVjaXBlcyBpbiB3b3Jrc3BhY2UsIGJ1aWxkaW5nIGltYWdlICVzIHVubW9kaWZpZWQnLCBpbWFnZSkKKyAgICAgICAgICAgICAgICBlbGlmIG5vdCBwYWNrYWdlczoKKyAgICAgICAgICAgICAgICAgICAgbG9nZ2VyLndhcm5pbmcoJ05vIHBhY2thZ2VzIHRvIGFkZCwgYnVpbGRpbmcgaW1hZ2UgJXMgdW5tb2RpZmllZCcsIGltYWdlKQorCisgICAgICAgICAgICBpZiBwYWNrYWdlcyBvciBleHRyYV9hcHBlbmQ6CisgICAgICAgICAgICAgICAgYmIudXRpbHMubWtkaXJoaWVyKG9zLnBhdGguZGlybmFtZShhcHBlbmRmaWxlKSkKKyAgICAgICAgICAgICAgICB3aXRoIG9wZW4oYXBwZW5kZmlsZSwgJ3cnKSBhcyBhZmlsZToKKyAgICAgICAgICAgICAgICAgICAgaWYgcGFja2FnZXM6CisgICAgICAgICAgICAgICAgICAgICAgICAjIGluY2x1ZGUgcGFja2FnZXMgZnJvbSB3b3Jrc3BhY2UgcmVjaXBlcyBpbnRvIHRoZSBpbWFnZQorICAgICAgICAgICAgICAgICAgICAgICAgYWZpbGUud3JpdGUoJ0lNQUdFX0lOU1RBTExfYXBwZW5kID0gIiAlcyJcbicgJSAnICcuam9pbihwYWNrYWdlcykpCisgICAgICAgICAgICAgICAgICAgICAgICBpZiBub3QgdGFzazoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb2dnZXIuaW5mbygnQnVpbGRpbmcgaW1hZ2UgJXMgd2l0aCB0aGUgZm9sbG93aW5nICcKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnYWRkaXRpb25hbCBwYWNrYWdlczogJXMnLCBpbWFnZSwgJyAnLmpvaW4ocGFja2FnZXMpKQorICAgICAgICAgICAgICAgICAgICBpZiBleHRyYV9hcHBlbmQ6CisgICAgICAgICAgICAgICAgICAgICAgICBmb3IgbGluZSBpbiBleHRyYV9hcHBlbmQ6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWZpbGUud3JpdGUoJyVzXG4nICUgbGluZSkKKworICAgICAgICAgICAgaWYgdGFzayBpbiBbJ3BvcHVsYXRlX3NkaycsICdwb3B1bGF0ZV9zZGtfZXh0J106CisgICAgICAgICAgICAgICAgb3V0cHV0ZGlyID0gcmQuZ2V0VmFyKCdTREtfREVQTE9ZJywgVHJ1ZSkKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgb3V0cHV0ZGlyID0gcmQuZ2V0VmFyKCdERVBMT1lfRElSX0lNQUdFJywgVHJ1ZSkKKworICAgICAgICAgICAgdG1wX3RpbmZvaWwgPSB0aW5mb2lsCisgICAgICAgICAgICB0aW5mb2lsID0gTm9uZQorICAgICAgICAgICAgdG1wX3RpbmZvaWwuc2h1dGRvd24oKQorCisgICAgICAgICAgICBvcHRpb25zID0gJycKKyAgICAgICAgICAgIGlmIHRhc2s6CisgICAgICAgICAgICAgICAgb3B0aW9ucyArPSAnLWMgJXMnICUgdGFzaworCisgICAgICAgICAgICAjIHJ1biBiaXRiYWtlIHRvIGJ1aWxkIGltYWdlIChvciBzcGVjaWZpZWQgdGFzaykKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBleGVjX2J1aWxkX2Vudl9jb21tYW5kKGNvbmZpZy5pbml0X3BhdGgsIGJhc2VwYXRoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2JpdGJha2UgJXMgJXMnICUgKG9wdGlvbnMsIGltYWdlKSwgd2F0Y2g9VHJ1ZSkKKyAgICAgICAgICAgIGV4Y2VwdCBFeGVjdXRpb25FcnJvciBhcyBlcnI6CisgICAgICAgICAgICAgICAgcmV0dXJuIChlcnIuZXhpdGNvZGUsIE5vbmUpCisgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICBpZiBvcy5wYXRoLmlzZmlsZShhcHBlbmRmaWxlKToKKyAgICAgICAgICAgICAgICBvcy51bmxpbmsoYXBwZW5kZmlsZSkKICAgICBmaW5hbGx5OgotICAgICAgICBpZiBvcy5wYXRoLmlzZmlsZShhcHBlbmRmaWxlKToKLSAgICAgICAgICAgIG9zLnVubGluayhhcHBlbmRmaWxlKQorICAgICAgICBpZiB0aW5mb2lsOgorICAgICAgICAgICAgdGluZm9pbC5zaHV0ZG93bigpCiAgICAgcmV0dXJuICgwLCBvdXRwdXRkaXIpCiAKIApkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L3NjcmlwdHMvbGliL2RldnRvb2wvZGVwbG95LnB5IGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L3NjcmlwdHMvbGliL2RldnRvb2wvZGVwbG95LnB5CmluZGV4IDY2NjQ0Y2MuLmM0YzdiZjYgMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9kZXZ0b29sL2RlcGxveS5weQorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvZGV2dG9vbC9kZXBsb3kucHkKQEAgLTg1LDcgKzg1LDcgQEAKICAgICAgICAgICAgIGxpbmVzLmFwcGVuZCgnZG8nKQogICAgICAgICAgICAgbGluZXMuYXBwZW5kKCcgICAgY2hlY2twYXRoPWBkaXJuYW1lICIkY2hlY2twYXRoImAnKQogICAgICAgICAgICAgbGluZXMuYXBwZW5kKCdkb25lJykKLSAgICAgICAgICAgIGxpbmVzLmFwcGVuZCgnZnJlZXNwYWNlPWBkZiAtUCAkY2hlY2twYXRoIHwgc2VkICIxZCIgfCBhd2sgXCd7IHByaW50ICQ0IH1cJ2AnKQorICAgICAgICAgICAgbGluZXMuYXBwZW5kKHInZnJlZXNwYWNlPSQoZGYgLVAgJGNoZWNrcGF0aCB8IHNlZCAtbnJlICJzL14oXFMrXHMrKXszfShbMC05XSspLiovXDIvcCIpJykKICAgICAgICAgICAgICMgRmlyc3QgbGluZSBvZiB0aGUgZmlsZSBpcyB0aGUgdG90YWwgc3BhY2UKICAgICAgICAgICAgIGxpbmVzLmFwcGVuZCgndG90YWw9YGhlYWQgLW4xICQzYCcpCiAgICAgICAgICAgICBsaW5lcy5hcHBlbmQoJ2lmIFsgJHRvdGFsIC1ndCAkZnJlZXNwYWNlIF0gOyB0aGVuJykKQEAgLTE1NSw4MyArMTU1LDg2IEBACiAKICAgICB0aW5mb2lsID0gc2V0dXBfdGluZm9pbChiYXNlcGF0aD1iYXNlcGF0aCkKICAgICB0cnk6Ci0gICAgICAgIHJkID0gb2UucmVjaXBldXRpbHMucGFyc2VfcmVjaXBlX3NpbXBsZSh0aW5mb2lsLmNvb2tlciwgYXJncy5yZWNpcGVuYW1lLCB0aW5mb2lsLmNvbmZpZ19kYXRhKQotICAgIGV4Y2VwdCBFeGNlcHRpb24gYXMgZToKLSAgICAgICAgcmFpc2UgRGV2dG9vbEVycm9yKCdFeGNlcHRpb24gcGFyc2luZyByZWNpcGUgJXM6ICVzJyAlCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAoYXJncy5yZWNpcGVuYW1lLCBlKSkKLSAgICByZWNpcGVfb3V0ZGlyID0gcmQuZ2V0VmFyKCdEJywgVHJ1ZSkKLSAgICBpZiBub3Qgb3MucGF0aC5leGlzdHMocmVjaXBlX291dGRpcikgb3Igbm90IG9zLmxpc3RkaXIocmVjaXBlX291dGRpcik6Ci0gICAgICAgIHJhaXNlIERldnRvb2xFcnJvcignTm8gZmlsZXMgdG8gZGVwbG95IC0gaGF2ZSB5b3UgYnVpbHQgdGhlICVzICcKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICdyZWNpcGU/IElmIHNvLCB0aGUgaW5zdGFsbCBzdGVwIGhhcyBub3QgaW5zdGFsbGVkICcKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICdhbnkgZmlsZXMuJyAlIGFyZ3MucmVjaXBlbmFtZSkKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgcmQgPSBvZS5yZWNpcGV1dGlscy5wYXJzZV9yZWNpcGVfc2ltcGxlKHRpbmZvaWwuY29va2VyLCBhcmdzLnJlY2lwZW5hbWUsIHRpbmZvaWwuY29uZmlnX2RhdGEpCisgICAgICAgIGV4Y2VwdCBFeGNlcHRpb24gYXMgZToKKyAgICAgICAgICAgIHJhaXNlIERldnRvb2xFcnJvcignRXhjZXB0aW9uIHBhcnNpbmcgcmVjaXBlICVzOiAlcycgJQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIChhcmdzLnJlY2lwZW5hbWUsIGUpKQorICAgICAgICByZWNpcGVfb3V0ZGlyID0gcmQuZ2V0VmFyKCdEJywgVHJ1ZSkKKyAgICAgICAgaWYgbm90IG9zLnBhdGguZXhpc3RzKHJlY2lwZV9vdXRkaXIpIG9yIG5vdCBvcy5saXN0ZGlyKHJlY2lwZV9vdXRkaXIpOgorICAgICAgICAgICAgcmFpc2UgRGV2dG9vbEVycm9yKCdObyBmaWxlcyB0byBkZXBsb3kgLSBoYXZlIHlvdSBidWlsdCB0aGUgJXMgJworICAgICAgICAgICAgICAgICAgICAgICAgICAgICdyZWNpcGU/IElmIHNvLCB0aGUgaW5zdGFsbCBzdGVwIGhhcyBub3QgaW5zdGFsbGVkICcKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAnYW55IGZpbGVzLicgJSBhcmdzLnJlY2lwZW5hbWUpCiAKLSAgICBmaWxlbGlzdCA9IFtdCi0gICAgZnRvdGFsc2l6ZSA9IDAKLSAgICBmb3Igcm9vdCwgXywgZmlsZXMgaW4gb3Mud2FsayhyZWNpcGVfb3V0ZGlyKToKLSAgICAgICAgZm9yIGZuIGluIGZpbGVzOgotICAgICAgICAgICAgIyBHZXQgdGhlIHNpemUgaW4ga2lCIChzaW5jZSB3ZSdsbCBiZSBjb21wYXJpbmcgaXQgdG8gdGhlIG91dHB1dCBvZiBkdSAtaykKLSAgICAgICAgICAgICMgTVVTVCB1c2UgbHN0YXQoKSBoZXJlIG5vdCBzdGF0KCkgb3IgZ2V0ZmlsZXNpemUoKSBzaW5jZSB3ZSBkb24ndCB3YW50IHRvCi0gICAgICAgICAgICAjIGRlcmVmZXJlbmNlIHN5bWxpbmtzCi0gICAgICAgICAgICBmc2l6ZSA9IGludChtYXRoLmNlaWwoZmxvYXQob3MubHN0YXQob3MucGF0aC5qb2luKHJvb3QsIGZuKSkuc3Rfc2l6ZSkvMTAyNCkpCi0gICAgICAgICAgICBmdG90YWxzaXplICs9IGZzaXplCi0gICAgICAgICAgICAjIFRoZSBwYXRoIGFzIGl0IHdvdWxkIGFwcGVhciBvbiB0aGUgdGFyZ2V0Ci0gICAgICAgICAgICBmcGF0aCA9IG9zLnBhdGguam9pbihkZXN0ZGlyLCBvcy5wYXRoLnJlbHBhdGgocm9vdCwgcmVjaXBlX291dGRpciksIGZuKQotICAgICAgICAgICAgZmlsZWxpc3QuYXBwZW5kKChmcGF0aCwgZnNpemUpKQorICAgICAgICBmaWxlbGlzdCA9IFtdCisgICAgICAgIGZ0b3RhbHNpemUgPSAwCisgICAgICAgIGZvciByb290LCBfLCBmaWxlcyBpbiBvcy53YWxrKHJlY2lwZV9vdXRkaXIpOgorICAgICAgICAgICAgZm9yIGZuIGluIGZpbGVzOgorICAgICAgICAgICAgICAgICMgR2V0IHRoZSBzaXplIGluIGtpQiAoc2luY2Ugd2UnbGwgYmUgY29tcGFyaW5nIGl0IHRvIHRoZSBvdXRwdXQgb2YgZHUgLWspCisgICAgICAgICAgICAgICAgIyBNVVNUIHVzZSBsc3RhdCgpIGhlcmUgbm90IHN0YXQoKSBvciBnZXRmaWxlc2l6ZSgpIHNpbmNlIHdlIGRvbid0IHdhbnQgdG8KKyAgICAgICAgICAgICAgICAjIGRlcmVmZXJlbmNlIHN5bWxpbmtzCisgICAgICAgICAgICAgICAgZnNpemUgPSBpbnQobWF0aC5jZWlsKGZsb2F0KG9zLmxzdGF0KG9zLnBhdGguam9pbihyb290LCBmbikpLnN0X3NpemUpLzEwMjQpKQorICAgICAgICAgICAgICAgIGZ0b3RhbHNpemUgKz0gZnNpemUKKyAgICAgICAgICAgICAgICAjIFRoZSBwYXRoIGFzIGl0IHdvdWxkIGFwcGVhciBvbiB0aGUgdGFyZ2V0CisgICAgICAgICAgICAgICAgZnBhdGggPSBvcy5wYXRoLmpvaW4oZGVzdGRpciwgb3MucGF0aC5yZWxwYXRoKHJvb3QsIHJlY2lwZV9vdXRkaXIpLCBmbikKKyAgICAgICAgICAgICAgICBmaWxlbGlzdC5hcHBlbmQoKGZwYXRoLCBmc2l6ZSkpCiAKLSAgICBpZiBhcmdzLmRyeV9ydW46Ci0gICAgICAgIHByaW50KCdGaWxlcyB0byBiZSBkZXBsb3llZCBmb3IgJXMgb24gdGFyZ2V0ICVzOicgJSAoYXJncy5yZWNpcGVuYW1lLCBhcmdzLnRhcmdldCkpCi0gICAgICAgIGZvciBpdGVtLCBfIGluIGZpbGVsaXN0OgotICAgICAgICAgICAgcHJpbnQoJyAgJXMnICUgaXRlbSkKLSAgICAgICAgcmV0dXJuIDAKKyAgICAgICAgaWYgYXJncy5kcnlfcnVuOgorICAgICAgICAgICAgcHJpbnQoJ0ZpbGVzIHRvIGJlIGRlcGxveWVkIGZvciAlcyBvbiB0YXJnZXQgJXM6JyAlIChhcmdzLnJlY2lwZW5hbWUsIGFyZ3MudGFyZ2V0KSkKKyAgICAgICAgICAgIGZvciBpdGVtLCBfIGluIGZpbGVsaXN0OgorICAgICAgICAgICAgICAgIHByaW50KCcgICVzJyAlIGl0ZW0pCisgICAgICAgICAgICByZXR1cm4gMAogCiAKLSAgICBleHRyYW9wdGlvbnMgPSAnJwotICAgIGlmIGFyZ3Mubm9faG9zdF9jaGVjazoKLSAgICAgICAgZXh0cmFvcHRpb25zICs9ICctbyBVc2VyS25vd25Ib3N0c0ZpbGU9L2Rldi9udWxsIC1vIFN0cmljdEhvc3RLZXlDaGVja2luZz1ubycKLSAgICBpZiBub3QgYXJncy5zaG93X3N0YXR1czoKLSAgICAgICAgZXh0cmFvcHRpb25zICs9ICcgLXEnCisgICAgICAgIGV4dHJhb3B0aW9ucyA9ICcnCisgICAgICAgIGlmIGFyZ3Mubm9faG9zdF9jaGVjazoKKyAgICAgICAgICAgIGV4dHJhb3B0aW9ucyArPSAnLW8gVXNlcktub3duSG9zdHNGaWxlPS9kZXYvbnVsbCAtbyBTdHJpY3RIb3N0S2V5Q2hlY2tpbmc9bm8nCisgICAgICAgIGlmIG5vdCBhcmdzLnNob3dfc3RhdHVzOgorICAgICAgICAgICAgZXh0cmFvcHRpb25zICs9ICcgLXEnCiAKLSAgICAjIEluIG9yZGVyIHRvIGRlbGV0ZSBwcmV2aW91c2x5IGRlcGxveWVkIGZpbGVzIGFuZCBoYXZlIHRoZSBtYW5pZmVzdCBmaWxlIG9uCi0gICAgIyB0aGUgdGFyZ2V0LCB3ZSB3cml0ZSBvdXQgYSBzaGVsbCBzY3JpcHQgYW5kIHRoZW4gY29weSBpdCB0byB0aGUgdGFyZ2V0Ci0gICAgIyBzbyB3ZSBjYW4gdGhlbiBydW4gaXQgKHBpcGluZyB0YXIgb3V0cHV0IHRvIGl0KS4KLSAgICAjIChXZSBjYW5ub3QgdXNlIHNjcCBoZXJlLCBiZWNhdXNlIGl0IGRvZXNuJ3QgcHJlc2VydmUgc3ltbGlua3MuKQotICAgIHRtcGRpciA9IHRlbXBmaWxlLm1rZHRlbXAocHJlZml4PSdkZXZ0b29sJykKLSAgICB0cnk6Ci0gICAgICAgIHRtcHNjcmlwdCA9ICcvdG1wL2RldnRvb2xfZGVwbG95LnNoJwotICAgICAgICB0bXBmaWxlbGlzdCA9IG9zLnBhdGguam9pbihvcy5wYXRoLmRpcm5hbWUodG1wc2NyaXB0KSwgJ2RldnRvb2xfZGVwbG95Lmxpc3QnKQotICAgICAgICBzaGVsbHNjcmlwdCA9IF9wcmVwYXJlX3JlbW90ZV9zY3JpcHQoZGVwbG95PVRydWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZXJib3NlPWFyZ3Muc2hvd19zdGF0dXMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBub3ByZXNlcnZlPWFyZ3Mubm9fcHJlc2VydmUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBub2NoZWNrc3BhY2U9YXJncy5ub19jaGVja19zcGFjZSkKLSAgICAgICAgIyBXcml0ZSBvdXQgdGhlIHNjcmlwdCB0byBhIGZpbGUKLSAgICAgICAgd2l0aCBvcGVuKG9zLnBhdGguam9pbih0bXBkaXIsIG9zLnBhdGguYmFzZW5hbWUodG1wc2NyaXB0KSksICd3JykgYXMgZjoKLSAgICAgICAgICAgIGYud3JpdGUoc2hlbGxzY3JpcHQpCi0gICAgICAgICMgV3JpdGUgb3V0IHRoZSBmaWxlIGxpc3QKLSAgICAgICAgd2l0aCBvcGVuKG9zLnBhdGguam9pbih0bXBkaXIsIG9zLnBhdGguYmFzZW5hbWUodG1wZmlsZWxpc3QpKSwgJ3cnKSBhcyBmOgotICAgICAgICAgICAgZi53cml0ZSgnJWRcbicgJSBmdG90YWxzaXplKQotICAgICAgICAgICAgZm9yIGZwYXRoLCBmc2l6ZSBpbiBmaWxlbGlzdDoKLSAgICAgICAgICAgICAgICBmLndyaXRlKCclcyAlZFxuJyAlIChmcGF0aCwgZnNpemUpKQotICAgICAgICAjIENvcHkgdGhlbSB0byB0aGUgdGFyZ2V0Ci0gICAgICAgIHJldCA9IHN1YnByb2Nlc3MuY2FsbCgic2NwICVzICVzLyogJXM6JXMiICUgKGV4dHJhb3B0aW9ucywgdG1wZGlyLCBhcmdzLnRhcmdldCwgb3MucGF0aC5kaXJuYW1lKHRtcHNjcmlwdCkpLCBzaGVsbD1UcnVlKQorICAgICAgICAjIEluIG9yZGVyIHRvIGRlbGV0ZSBwcmV2aW91c2x5IGRlcGxveWVkIGZpbGVzIGFuZCBoYXZlIHRoZSBtYW5pZmVzdCBmaWxlIG9uCisgICAgICAgICMgdGhlIHRhcmdldCwgd2Ugd3JpdGUgb3V0IGEgc2hlbGwgc2NyaXB0IGFuZCB0aGVuIGNvcHkgaXQgdG8gdGhlIHRhcmdldAorICAgICAgICAjIHNvIHdlIGNhbiB0aGVuIHJ1biBpdCAocGlwaW5nIHRhciBvdXRwdXQgdG8gaXQpLgorICAgICAgICAjIChXZSBjYW5ub3QgdXNlIHNjcCBoZXJlLCBiZWNhdXNlIGl0IGRvZXNuJ3QgcHJlc2VydmUgc3ltbGlua3MuKQorICAgICAgICB0bXBkaXIgPSB0ZW1wZmlsZS5ta2R0ZW1wKHByZWZpeD0nZGV2dG9vbCcpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHRtcHNjcmlwdCA9ICcvdG1wL2RldnRvb2xfZGVwbG95LnNoJworICAgICAgICAgICAgdG1wZmlsZWxpc3QgPSBvcy5wYXRoLmpvaW4ob3MucGF0aC5kaXJuYW1lKHRtcHNjcmlwdCksICdkZXZ0b29sX2RlcGxveS5saXN0JykKKyAgICAgICAgICAgIHNoZWxsc2NyaXB0ID0gX3ByZXBhcmVfcmVtb3RlX3NjcmlwdChkZXBsb3k9VHJ1ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlcmJvc2U9YXJncy5zaG93X3N0YXR1cywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5vcHJlc2VydmU9YXJncy5ub19wcmVzZXJ2ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5vY2hlY2tzcGFjZT1hcmdzLm5vX2NoZWNrX3NwYWNlKQorICAgICAgICAgICAgIyBXcml0ZSBvdXQgdGhlIHNjcmlwdCB0byBhIGZpbGUKKyAgICAgICAgICAgIHdpdGggb3Blbihvcy5wYXRoLmpvaW4odG1wZGlyLCBvcy5wYXRoLmJhc2VuYW1lKHRtcHNjcmlwdCkpLCAndycpIGFzIGY6CisgICAgICAgICAgICAgICAgZi53cml0ZShzaGVsbHNjcmlwdCkKKyAgICAgICAgICAgICMgV3JpdGUgb3V0IHRoZSBmaWxlIGxpc3QKKyAgICAgICAgICAgIHdpdGggb3Blbihvcy5wYXRoLmpvaW4odG1wZGlyLCBvcy5wYXRoLmJhc2VuYW1lKHRtcGZpbGVsaXN0KSksICd3JykgYXMgZjoKKyAgICAgICAgICAgICAgICBmLndyaXRlKCclZFxuJyAlIGZ0b3RhbHNpemUpCisgICAgICAgICAgICAgICAgZm9yIGZwYXRoLCBmc2l6ZSBpbiBmaWxlbGlzdDoKKyAgICAgICAgICAgICAgICAgICAgZi53cml0ZSgnJXMgJWRcbicgJSAoZnBhdGgsIGZzaXplKSkKKyAgICAgICAgICAgICMgQ29weSB0aGVtIHRvIHRoZSB0YXJnZXQKKyAgICAgICAgICAgIHJldCA9IHN1YnByb2Nlc3MuY2FsbCgic2NwICVzICVzLyogJXM6JXMiICUgKGV4dHJhb3B0aW9ucywgdG1wZGlyLCBhcmdzLnRhcmdldCwgb3MucGF0aC5kaXJuYW1lKHRtcHNjcmlwdCkpLCBzaGVsbD1UcnVlKQorICAgICAgICAgICAgaWYgcmV0ICE9IDA6CisgICAgICAgICAgICAgICAgcmFpc2UgRGV2dG9vbEVycm9yKCdGYWlsZWQgdG8gY29weSBzY3JpcHQgdG8gJXMgLSByZXJ1biB3aXRoIC1zIHRvICcKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2dldCBhIGNvbXBsZXRlIGVycm9yIG1lc3NhZ2UnICUgYXJncy50YXJnZXQpCisgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICBzaHV0aWwucm10cmVlKHRtcGRpcikKKworICAgICAgICAjIE5vdyBydW4gdGhlIHNjcmlwdAorICAgICAgICByZXQgPSBleGVjX2Zha2Vyb290KHJkLCAndGFyIGNmIC0gLiB8IHNzaCAlcyAlcyBcJ3NoICVzICVzICVzICVzXCcnICUgKGV4dHJhb3B0aW9ucywgYXJncy50YXJnZXQsIHRtcHNjcmlwdCwgYXJncy5yZWNpcGVuYW1lLCBkZXN0ZGlyLCB0bXBmaWxlbGlzdCksIGN3ZD1yZWNpcGVfb3V0ZGlyLCBzaGVsbD1UcnVlKQogICAgICAgICBpZiByZXQgIT0gMDoKLSAgICAgICAgICAgIHJhaXNlIERldnRvb2xFcnJvcignRmFpbGVkIHRvIGNvcHkgc2NyaXB0IHRvICVzIC0gcmVydW4gd2l0aCAtcyB0byAnCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2dldCBhIGNvbXBsZXRlIGVycm9yIG1lc3NhZ2UnICUgYXJncy50YXJnZXQpCisgICAgICAgICAgICByYWlzZSBEZXZ0b29sRXJyb3IoJ0RlcGxveSBmYWlsZWQgLSByZXJ1biB3aXRoIC1zIHRvIGdldCBhIGNvbXBsZXRlICcKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAnZXJyb3IgbWVzc2FnZScpCisKKyAgICAgICAgbG9nZ2VyLmluZm8oJ1N1Y2Nlc3NmdWxseSBkZXBsb3llZCAlcycgJSByZWNpcGVfb3V0ZGlyKQorCisgICAgICAgIGZpbGVzX2xpc3QgPSBbXQorICAgICAgICBmb3Igcm9vdCwgXywgZmlsZXMgaW4gb3Mud2FsayhyZWNpcGVfb3V0ZGlyKToKKyAgICAgICAgICAgIGZvciBmaWxlbmFtZSBpbiBmaWxlczoKKyAgICAgICAgICAgICAgICBmaWxlbmFtZSA9IG9zLnBhdGgucmVscGF0aChvcy5wYXRoLmpvaW4ocm9vdCwgZmlsZW5hbWUpLCByZWNpcGVfb3V0ZGlyKQorICAgICAgICAgICAgICAgIGZpbGVzX2xpc3QuYXBwZW5kKG9zLnBhdGguam9pbihkZXN0ZGlyLCBmaWxlbmFtZSkpCiAgICAgZmluYWxseToKLSAgICAgICAgc2h1dGlsLnJtdHJlZSh0bXBkaXIpCi0KLSAgICAjIE5vdyBydW4gdGhlIHNjcmlwdAotICAgIHJldCA9IGV4ZWNfZmFrZXJvb3QocmQsICd0YXIgY2YgLSAuIHwgc3NoICVzICVzIFwnc2ggJXMgJXMgJXMgJXNcJycgJSAoZXh0cmFvcHRpb25zLCBhcmdzLnRhcmdldCwgdG1wc2NyaXB0LCBhcmdzLnJlY2lwZW5hbWUsIGRlc3RkaXIsIHRtcGZpbGVsaXN0KSwgY3dkPXJlY2lwZV9vdXRkaXIsIHNoZWxsPVRydWUpCi0gICAgaWYgcmV0ICE9IDA6Ci0gICAgICAgIHJhaXNlIERldnRvb2xFcnJvcignRGVwbG95IGZhaWxlZCAtIHJlcnVuIHdpdGggLXMgdG8gZ2V0IGEgY29tcGxldGUgJwotICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2Vycm9yIG1lc3NhZ2UnKQotCi0gICAgbG9nZ2VyLmluZm8oJ1N1Y2Nlc3NmdWxseSBkZXBsb3llZCAlcycgJSByZWNpcGVfb3V0ZGlyKQotCi0gICAgZmlsZXNfbGlzdCA9IFtdCi0gICAgZm9yIHJvb3QsIF8sIGZpbGVzIGluIG9zLndhbGsocmVjaXBlX291dGRpcik6Ci0gICAgICAgIGZvciBmaWxlbmFtZSBpbiBmaWxlczoKLSAgICAgICAgICAgIGZpbGVuYW1lID0gb3MucGF0aC5yZWxwYXRoKG9zLnBhdGguam9pbihyb290LCBmaWxlbmFtZSksIHJlY2lwZV9vdXRkaXIpCi0gICAgICAgICAgICBmaWxlc19saXN0LmFwcGVuZChvcy5wYXRoLmpvaW4oZGVzdGRpciwgZmlsZW5hbWUpKQorICAgICAgICB0aW5mb2lsLnNodXRkb3duKCkKIAogICAgIHJldHVybiAwCiAKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9kZXZ0b29sL3J1bnFlbXUucHkgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvZGV2dG9vbC9ydW5xZW11LnB5CmluZGV4IGRhZWU3ZmIuLmFlMjVjZWUgMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9kZXZ0b29sL3J1bnFlbXUucHkKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L3NjcmlwdHMvbGliL2RldnRvb2wvcnVucWVtdS5weQpAQCAtMzAsOSArMzAsMTEgQEAKICAgICAiIiJFbnRyeSBwb2ludCBmb3IgdGhlIGRldnRvb2wgJ3J1bnFlbXUnIHN1YmNvbW1hbmQiIiIKIAogICAgIHRpbmZvaWwgPSBzZXR1cF90aW5mb2lsKGNvbmZpZ19vbmx5PVRydWUsIGJhc2VwYXRoPWJhc2VwYXRoKQotICAgIG1hY2hpbmUgPSB0aW5mb2lsLmNvbmZpZ19kYXRhLmdldFZhcignTUFDSElORScsIFRydWUpCi0gICAgYmluZGlyX25hdGl2ZSA9IHRpbmZvaWwuY29uZmlnX2RhdGEuZ2V0VmFyKCdTVEFHSU5HX0JJTkRJUl9OQVRJVkUnLCBUcnVlKQotICAgIHRpbmZvaWwuc2h1dGRvd24oKQorICAgIHRyeToKKyAgICAgICAgbWFjaGluZSA9IHRpbmZvaWwuY29uZmlnX2RhdGEuZ2V0VmFyKCdNQUNISU5FJywgVHJ1ZSkKKyAgICAgICAgYmluZGlyX25hdGl2ZSA9IHRpbmZvaWwuY29uZmlnX2RhdGEuZ2V0VmFyKCdTVEFHSU5HX0JJTkRJUl9OQVRJVkUnLCBUcnVlKQorICAgIGZpbmFsbHk6CisgICAgICAgIHRpbmZvaWwuc2h1dGRvd24oKQogCiAgICAgaWYgbm90IGdsb2IuZ2xvYihvcy5wYXRoLmpvaW4oYmluZGlyX25hdGl2ZSwgJ3FlbXUtc3lzdGVtLSonKSk6CiAgICAgICAgIHJhaXNlIERldnRvb2xFcnJvcignUUVNVSBpcyBub3QgYXZhaWxhYmxlIHdpdGhpbiB0aGlzIFNESycpCkBAIC00Niw3ICs0OCwxMiBAQAogICAgICAgICByYWlzZSBEZXZ0b29sRXJyb3IoJ1VuYWJsZSB0byBkZXRlcm1pbmUgaW1hZ2UgbmFtZSB0byBydW4sIHBsZWFzZSBzcGVjaWZ5IG9uZScpCiAKICAgICB0cnk6Ci0gICAgICAgIGV4ZWNfYnVpbGRfZW52X2NvbW1hbmQoY29uZmlnLmluaXRfcGF0aCwgYmFzZXBhdGgsICdydW5xZW11ICVzICVzICVzJyAlIChtYWNoaW5lLCBpbWFnZW5hbWUsICIgIi5qb2luKGFyZ3MuYXJncykpLCB3YXRjaD1UcnVlKQorICAgICAgICAjIEZJWE1FIHJ1bnFlbXUgYXNzdW1lcyB0aGF0IGlmIE9FQ09SRV9OQVRJVkVfU1lTUk9PVCBpcyBzZXQgdGhlbiBpdCBzaG91bGRuJ3QKKyAgICAgICAgIyBydW4gYml0YmFrZSB0byBmaW5kIG91dCB0aGUgdmFsdWVzIG9mIHZhcmlvdXMgZW52aXJvbm1lbnQgdmFyaWFibGVzLCB3aGljaAorICAgICAgICAjIGlzbid0IHRoZSBjYXNlIGZvciB0aGUgZXh0ZW5zaWJsZSBTREsuIFdvcmsgYXJvdW5kIGl0IGZvciBub3cuCisgICAgICAgIG5ld2VudiA9IGRpY3Qob3MuZW52aXJvbikKKyAgICAgICAgbmV3ZW52LnBvcCgnT0VDT1JFX05BVElWRV9TWVNST09UJywgJycpCisgICAgICAgIGV4ZWNfYnVpbGRfZW52X2NvbW1hbmQoY29uZmlnLmluaXRfcGF0aCwgYmFzZXBhdGgsICdydW5xZW11ICVzICVzICVzJyAlIChtYWNoaW5lLCBpbWFnZW5hbWUsICIgIi5qb2luKGFyZ3MuYXJncykpLCB3YXRjaD1UcnVlLCBlbnY9bmV3ZW52KQogICAgIGV4Y2VwdCBiYi5wcm9jZXNzLkV4ZWN1dGlvbkVycm9yIGFzIGU6CiAgICAgICAgICMgV2UndmUgYWxyZWFkeSBzZWVuIHRoZSBvdXRwdXQgc2luY2Ugd2F0Y2g9VHJ1ZSwgc28ganVzdCBlbnN1cmUgd2UgcmV0dXJuIHNvbWV0aGluZyB0byB0aGUgdXNlcgogICAgICAgICByZXR1cm4gZS5leGl0Y29kZQpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L3NjcmlwdHMvbGliL2RldnRvb2wvc2RrLnB5IGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L3NjcmlwdHMvbGliL2RldnRvb2wvc2RrLnB5CmluZGV4IDQ2ZmQxMmIuLjkyMjI3N2IgMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9kZXZ0b29sL3Nkay5weQorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvZGV2dG9vbC9zZGsucHkKQEAgLTEwNyw3ICsxMDcsNyBAQAogICAgIHJldHVybiBjaGFuZ2VkZmlsZXMKIAogZGVmIHNka191cGRhdGUoYXJncywgY29uZmlnLCBiYXNlcGF0aCwgd29ya3NwYWNlKToKLSAgICAjIEZldGNoIGxvY2tlZC1zaWdzLmluYyBmaWxlIGZyb20gcmVtb3RlL2xvY2FsIGRlc3RpbmF0aW9uCisgICAgIiIiRW50cnkgcG9pbnQgZm9yIGRldnRvb2wgc2RrLXVwZGF0ZSBjb21tYW5kIiIiCiAgICAgdXBkYXRlc2VydmVyID0gYXJncy51cGRhdGVzZXJ2ZXIKICAgICBpZiBub3QgdXBkYXRlc2VydmVyOgogICAgICAgICB1cGRhdGVzZXJ2ZXIgPSBjb25maWcuZ2V0KCdTREsnLCAndXBkYXRlc2VydmVyJywgJycpCkBAIC0xMjIsMTAgKzEyMiw5IEBACiAgICAgZWxzZToKICAgICAgICAgbG9nZ2VyLmRlYnVnKCJGb3VuZCBjb25mL2xvY2tlZC1zaWdzLmluYyBpbiAlcyIgJSBiYXNlcGF0aCkKIAotICAgIGlmICc6JyBpbiB1cGRhdGVzZXJ2ZXI6Ci0gICAgICAgIGlzX3JlbW90ZSA9IFRydWUKLSAgICBlbHNlOgotICAgICAgICBpc19yZW1vdGUgPSBGYWxzZQorICAgIGlmIG5vdCAnOi8vJyBpbiB1cGRhdGVzZXJ2ZXI6CisgICAgICAgIGxvZ2dlci5lcnJvcigiVXBkYXRlIHNlcnZlciBtdXN0IGJlIGEgVVJMIikKKyAgICAgICAgcmV0dXJuIC0xCiAKICAgICBsYXllcnNfZGlyID0gb3MucGF0aC5qb2luKGJhc2VwYXRoLCAnbGF5ZXJzJykKICAgICBjb25mX2RpciA9IG9zLnBhdGguam9pbihiYXNlcGF0aCwgJ2NvbmYnKQpAQCAtMTM5LDEyMCArMTM4LDg1IEBACiAgICAgZmluYWxseToKICAgICAgICAgdGluZm9pbC5zaHV0ZG93bigpCiAKLSAgICBpZiBub3QgaXNfcmVtb3RlOgotICAgICAgICAjIGRldnRvb2wgc2RrLXVwZGF0ZSAvbG9jYWwvcGF0aC90by9sYXRlc3Qvc2RrCi0gICAgICAgIG5ld19sb2NrZWRfc2lnX2ZpbGVfcGF0aCA9IG9zLnBhdGguam9pbih1cGRhdGVzZXJ2ZXIsICdjb25mL2xvY2tlZC1zaWdzLmluYycpCi0gICAgICAgIGlmIG5vdCBvcy5wYXRoLmV4aXN0cyhuZXdfbG9ja2VkX3NpZ19maWxlX3BhdGgpOgotICAgICAgICAgICAgbG9nZ2VyLmVycm9yKCIlcyBkb2Vzbid0IGV4aXN0IG9yIGlzIG5vdCBhbiBleHRlbnNpYmxlIFNESyIgJSB1cGRhdGVzZXJ2ZXIpCi0gICAgICAgICAgICByZXR1cm4gLTEKLSAgICAgICAgZWxzZToKLSAgICAgICAgICAgIGxvZ2dlci5kZWJ1ZygiRm91bmQgY29uZi9sb2NrZWQtc2lncy5pbmMgaW4gJXMiICUgdXBkYXRlc2VydmVyKQotICAgICAgICB1cGRhdGVfZGljdCA9IGdlbmVyYXRlX3VwZGF0ZV9kaWN0KG5ld19sb2NrZWRfc2lnX2ZpbGVfcGF0aCwgb2xkX2xvY2tlZF9zaWdfZmlsZV9wYXRoKQotICAgICAgICBsb2dnZXIuZGVidWcoInVwZGF0ZV9kaWN0ID0gJXMiICUgdXBkYXRlX2RpY3QpCi0gICAgICAgIG5ld3Nka19wYXRoID0gdXBkYXRlc2VydmVyCi0gICAgICAgIHNzdGF0ZV9kaXIgPSBvcy5wYXRoLmpvaW4obmV3c2RrX3BhdGgsICdzc3RhdGUtY2FjaGUnKQotICAgICAgICBpZiBub3Qgb3MucGF0aC5leGlzdHMoc3N0YXRlX2Rpcik6Ci0gICAgICAgICAgICBsb2dnZXIuZXJyb3IoInNzdGF0ZS1jYWNoZSBkaXJlY3Rvcnkgbm90IGZvdW5kIHVuZGVyICVzIiAlIG5ld3Nka19wYXRoKQotICAgICAgICAgICAgcmV0dXJuIDEKLSAgICAgICAgc3N0YXRlX29iamVjdHMgPSBnZXRfc3N0YXRlX29iamVjdHModXBkYXRlX2RpY3QsIHNzdGF0ZV9kaXIpCi0gICAgICAgIGxvZ2dlci5kZWJ1Zygic3N0YXRlX29iamVjdHMgPSAlcyIgJSBzc3RhdGVfb2JqZWN0cykKLSAgICAgICAgaWYgbGVuKHNzdGF0ZV9vYmplY3RzKSA9PSAwOgotICAgICAgICAgICAgbG9nZ2VyLmluZm8oIk5vIG5lZWQgdG8gdXBkYXRlLiIpCisgICAgdG1wc2RrX2RpciA9IHRlbXBmaWxlLm1rZHRlbXAoKQorICAgIHRyeToKKyAgICAgICAgb3MubWFrZWRpcnMob3MucGF0aC5qb2luKHRtcHNka19kaXIsICdjb25mJykpCisgICAgICAgIG5ld19sb2NrZWRfc2lnX2ZpbGVfcGF0aCA9IG9zLnBhdGguam9pbih0bXBzZGtfZGlyLCAnY29uZicsICdsb2NrZWQtc2lncy5pbmMnKQorICAgICAgICAjIEZldGNoIG1hbmlmZXN0IGZyb20gc2VydmVyCisgICAgICAgIHRtcG1hbmlmZXN0ID0gb3MucGF0aC5qb2luKHRtcHNka19kaXIsICdjb25mJywgJ3Nkay1jb25mLW1hbmlmZXN0JykKKyAgICAgICAgcmV0ID0gc3VicHJvY2Vzcy5jYWxsKCJ3Z2V0IC1xIC1PICVzICVzL2NvbmYvc2RrLWNvbmYtbWFuaWZlc3QiICUgKHRtcG1hbmlmZXN0LCB1cGRhdGVzZXJ2ZXIpLCBzaGVsbD1UcnVlKQorICAgICAgICBjaGFuZ2VkZmlsZXMgPSBjaGVja19tYW5pZmVzdCh0bXBtYW5pZmVzdCwgYmFzZXBhdGgpCisgICAgICAgIGlmIG5vdCBjaGFuZ2VkZmlsZXM6CisgICAgICAgICAgICBsb2dnZXIuaW5mbygiQWxyZWFkeSB1cC10by1kYXRlIikKICAgICAgICAgICAgIHJldHVybiAwCi0gICAgICAgIGxvZ2dlci5pbmZvKCJJbnN0YWxsaW5nIHNzdGF0ZSBvYmplY3RzIGludG8gJXMiLCBiYXNlcGF0aCkKLSAgICAgICAgaW5zdGFsbF9zc3RhdGVfb2JqZWN0cyhzc3RhdGVfb2JqZWN0cywgdXBkYXRlc2VydmVyLnJzdHJpcCgnLycpLCBiYXNlcGF0aCkKLSAgICAgICAgbG9nZ2VyLmluZm8oIlVwZGF0aW5nIGNvbmZpZ3VyYXRpb24gZmlsZXMiKQotICAgICAgICBuZXdfY29uZl9kaXIgPSBvcy5wYXRoLmpvaW4odXBkYXRlc2VydmVyLCAnY29uZicpCi0gICAgICAgIHNodXRpbC5ybXRyZWUoY29uZl9kaXIpCi0gICAgICAgIHNodXRpbC5jb3B5dHJlZShuZXdfY29uZl9kaXIsIGNvbmZfZGlyKQotICAgICAgICBsb2dnZXIuaW5mbygiVXBkYXRpbmcgbGF5ZXJzIikKLSAgICAgICAgbmV3X2xheWVyc19kaXIgPSBvcy5wYXRoLmpvaW4odXBkYXRlc2VydmVyLCAnbGF5ZXJzJykKLSAgICAgICAgc2h1dGlsLnJtdHJlZShsYXllcnNfZGlyKQotICAgICAgICByZXQgPSBzdWJwcm9jZXNzLmNhbGwoImNwIC1hICVzICVzIiAlIChuZXdfbGF5ZXJzX2RpciwgbGF5ZXJzX2RpciksIHNoZWxsPVRydWUpCi0gICAgICAgIGlmIHJldCAhPSAwOgotICAgICAgICAgICAgbG9nZ2VyLmVycm9yKCJDb3B5aW5nICVzIHRvICVzIGZhaWxlZCIgJSAobmV3X2xheWVyc19kaXIsIGxheWVyc19kaXIpKQotICAgICAgICAgICAgcmV0dXJuIHJldAotICAgIGVsc2U6Ci0gICAgICAgICMgZGV2dG9vbCBzZGstdXBkYXRlIGh0dHA6Ly9teWhvc3Qvc2RrCi0gICAgICAgIHRtcHNka19kaXIgPSB0ZW1wZmlsZS5ta2R0ZW1wKCkKLSAgICAgICAgdHJ5OgotICAgICAgICAgICAgb3MubWFrZWRpcnMob3MucGF0aC5qb2luKHRtcHNka19kaXIsICdjb25mJykpCi0gICAgICAgICAgICBuZXdfbG9ja2VkX3NpZ19maWxlX3BhdGggPSBvcy5wYXRoLmpvaW4odG1wc2RrX2RpciwgJ2NvbmYnLCAnbG9ja2VkLXNpZ3MuaW5jJykKLSAgICAgICAgICAgICMgRmV0Y2ggbWFuaWZlc3QgZnJvbSBzZXJ2ZXIKLSAgICAgICAgICAgIHRtcG1hbmlmZXN0ID0gb3MucGF0aC5qb2luKHRtcHNka19kaXIsICdjb25mJywgJ3Nkay1jb25mLW1hbmlmZXN0JykKLSAgICAgICAgICAgIHJldCA9IHN1YnByb2Nlc3MuY2FsbCgid2dldCAtcSAtTyAlcyAlcy9jb25mL3Nkay1jb25mLW1hbmlmZXN0IiAlICh0bXBtYW5pZmVzdCwgdXBkYXRlc2VydmVyKSwgc2hlbGw9VHJ1ZSkKLSAgICAgICAgICAgIGNoYW5nZWRmaWxlcyA9IGNoZWNrX21hbmlmZXN0KHRtcG1hbmlmZXN0LCBiYXNlcGF0aCkKLSAgICAgICAgICAgIGlmIG5vdCBjaGFuZ2VkZmlsZXM6Ci0gICAgICAgICAgICAgICAgbG9nZ2VyLmluZm8oIkFscmVhZHkgdXAtdG8tZGF0ZSIpCi0gICAgICAgICAgICAgICAgcmV0dXJuIDAKLSAgICAgICAgICAgICMgVXBkYXRlIG1ldGFkYXRhCi0gICAgICAgICAgICBsb2dnZXIuZGVidWcoIlVwZGF0aW5nIG1ldGFkYXRhIHZpYSBnaXQgLi4uIikKLSAgICAgICAgICAgICNDaGVjayBmb3IgdGhlIHN0YXR1cyBiZWZvcmUgZG9pbmcgYSBmZXRjaCBhbmQgcmVzZXQKLSAgICAgICAgICAgIGlmIG9zLnBhdGguZXhpc3RzKG9zLnBhdGguam9pbihiYXNlcGF0aCwgJ2xheWVycy8uZ2l0JykpOgotICAgICAgICAgICAgICAgIG91dCA9IHN1YnByb2Nlc3MuY2hlY2tfb3V0cHV0KCJnaXQgc3RhdHVzIC0tcG9yY2VsYWluIiwgc2hlbGw9VHJ1ZSwgY3dkPWxheWVyc19kaXIpCi0gICAgICAgICAgICAgICAgaWYgbm90IG91dDoKLSAgICAgICAgICAgICAgICAgICAgcmV0ID0gc3VicHJvY2Vzcy5jYWxsKCJnaXQgZmV0Y2ggLS1hbGw7IGdpdCByZXNldCAtLWhhcmQiLCBzaGVsbD1UcnVlLCBjd2Q9bGF5ZXJzX2RpcikKLSAgICAgICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgICAgICBsb2dnZXIuZXJyb3IoIkZhaWxlZCB0byB1cGRhdGUgbWV0YWRhdGEgYXMgdGhlcmUgaGF2ZSBiZWVuIGNoYW5nZXMgbWFkZSB0byBpdC4gQWJvcnRpbmcuIik7Ci0gICAgICAgICAgICAgICAgICAgIGxvZ2dlci5lcnJvcigiQ2hhbmdlZCBmaWxlczpcbiVzIiAlIG91dCk7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiAtMQorICAgICAgICAjIFVwZGF0ZSBtZXRhZGF0YQorICAgICAgICBsb2dnZXIuZGVidWcoIlVwZGF0aW5nIG1ldGFkYXRhIHZpYSBnaXQgLi4uIikKKyAgICAgICAgI0NoZWNrIGZvciB0aGUgc3RhdHVzIGJlZm9yZSBkb2luZyBhIGZldGNoIGFuZCByZXNldAorICAgICAgICBpZiBvcy5wYXRoLmV4aXN0cyhvcy5wYXRoLmpvaW4oYmFzZXBhdGgsICdsYXllcnMvLmdpdCcpKToKKyAgICAgICAgICAgIG91dCA9IHN1YnByb2Nlc3MuY2hlY2tfb3V0cHV0KCJnaXQgc3RhdHVzIC0tcG9yY2VsYWluIiwgc2hlbGw9VHJ1ZSwgY3dkPWxheWVyc19kaXIpCisgICAgICAgICAgICBpZiBub3Qgb3V0OgorICAgICAgICAgICAgICAgIHJldCA9IHN1YnByb2Nlc3MuY2FsbCgiZ2l0IGZldGNoIC0tYWxsOyBnaXQgcmVzZXQgLS1oYXJkIiwgc2hlbGw9VHJ1ZSwgY3dkPWxheWVyc19kaXIpCiAgICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgIHJldCA9IC0xCisgICAgICAgICAgICAgICAgbG9nZ2VyLmVycm9yKCJGYWlsZWQgdG8gdXBkYXRlIG1ldGFkYXRhIGFzIHRoZXJlIGhhdmUgYmVlbiBjaGFuZ2VzIG1hZGUgdG8gaXQuIEFib3J0aW5nLiIpOworICAgICAgICAgICAgICAgIGxvZ2dlci5lcnJvcigiQ2hhbmdlZCBmaWxlczpcbiVzIiAlIG91dCk7CisgICAgICAgICAgICAgICAgcmV0dXJuIC0xCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICByZXQgPSAtMQorICAgICAgICBpZiByZXQgIT0gMDoKKyAgICAgICAgICAgIHJldCA9IHN1YnByb2Nlc3MuY2FsbCgiZ2l0IGNsb25lICVzL2xheWVycy8uZ2l0IiAlIHVwZGF0ZXNlcnZlciwgc2hlbGw9VHJ1ZSwgY3dkPXRtcHNka19kaXIpCiAgICAgICAgICAgICBpZiByZXQgIT0gMDoKLSAgICAgICAgICAgICAgICByZXQgPSBzdWJwcm9jZXNzLmNhbGwoImdpdCBjbG9uZSAlcy9sYXllcnMvLmdpdCIgJSB1cGRhdGVzZXJ2ZXIsIHNoZWxsPVRydWUsIGN3ZD10bXBzZGtfZGlyKQotICAgICAgICAgICAgICAgIGlmIHJldCAhPSAwOgotICAgICAgICAgICAgICAgICAgICBsb2dnZXIuZXJyb3IoIlVwZGF0aW5nIG1ldGFkYXRhIHZpYSBnaXQgZmFpbGVkIikKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJldAotICAgICAgICAgICAgbG9nZ2VyLmRlYnVnKCJVcGRhdGluZyBjb25mIGZpbGVzIC4uLiIpCi0gICAgICAgICAgICBmb3IgY2hhbmdlZGZpbGUgaW4gY2hhbmdlZGZpbGVzOgotICAgICAgICAgICAgICAgIHJldCA9IHN1YnByb2Nlc3MuY2FsbCgid2dldCAtcSAtTyAlcyAlcy8lcyIgJSAoY2hhbmdlZGZpbGUsIHVwZGF0ZXNlcnZlciwgY2hhbmdlZGZpbGUpLCBzaGVsbD1UcnVlLCBjd2Q9dG1wc2RrX2RpcikKLSAgICAgICAgICAgICAgICBpZiByZXQgIT0gMDoKLSAgICAgICAgICAgICAgICAgICAgbG9nZ2VyLmVycm9yKCJVcGRhdGluZyAlcyBmYWlsZWQiICUgY2hhbmdlZGZpbGUpCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiByZXQKKyAgICAgICAgICAgICAgICBsb2dnZXIuZXJyb3IoIlVwZGF0aW5nIG1ldGFkYXRhIHZpYSBnaXQgZmFpbGVkIikKKyAgICAgICAgICAgICAgICByZXR1cm4gcmV0CisgICAgICAgIGxvZ2dlci5kZWJ1ZygiVXBkYXRpbmcgY29uZiBmaWxlcyAuLi4iKQorICAgICAgICBmb3IgY2hhbmdlZGZpbGUgaW4gY2hhbmdlZGZpbGVzOgorICAgICAgICAgICAgcmV0ID0gc3VicHJvY2Vzcy5jYWxsKCJ3Z2V0IC1xIC1PICVzICVzLyVzIiAlIChjaGFuZ2VkZmlsZSwgdXBkYXRlc2VydmVyLCBjaGFuZ2VkZmlsZSksIHNoZWxsPVRydWUsIGN3ZD10bXBzZGtfZGlyKQorICAgICAgICAgICAgaWYgcmV0ICE9IDA6CisgICAgICAgICAgICAgICAgbG9nZ2VyLmVycm9yKCJVcGRhdGluZyAlcyBmYWlsZWQiICUgY2hhbmdlZGZpbGUpCisgICAgICAgICAgICAgICAgcmV0dXJuIHJldAogCi0gICAgICAgICAgICAjIENoZWNrIGlmIFVOSU5BVElWRV9DSEVDS1NVTSBjaGFuZ2VkCi0gICAgICAgICAgICB1bmluYXRpdmUgPSBGYWxzZQotICAgICAgICAgICAgaWYgJ2NvbmYvbG9jYWwuY29uZicgaW4gY2hhbmdlZGZpbGVzOgotICAgICAgICAgICAgICAgIGRlZiByZWFkX3VuaW5hdGl2ZV9jaGVja3N1bXMoZm4pOgotICAgICAgICAgICAgICAgICAgICBjaGtzdW1pdGVtcyA9IFtdCi0gICAgICAgICAgICAgICAgICAgIHdpdGggb3BlbihmbiwgJ3InKSBhcyBmOgotICAgICAgICAgICAgICAgICAgICAgICAgZm9yIGxpbmUgaW4gZjoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiBsaW5lLnN0YXJ0c3dpdGgoJ1VOSU5BVElWRV9DSEVDS1NVTScpOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcGxpdGxpbmUgPSByZS5zcGxpdChyJ1tcW1xdIlwnXScsIGxpbmUpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIGxlbihzcGxpdGxpbmUpID4gMzoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoa3N1bWl0ZW1zLmFwcGVuZCgoc3BsaXRsaW5lWzFdLCBzcGxpdGxpbmVbM10pKQotICAgICAgICAgICAgICAgICAgICByZXR1cm4gY2hrc3VtaXRlbXMKKyAgICAgICAgIyBDaGVjayBpZiBVTklOQVRJVkVfQ0hFQ0tTVU0gY2hhbmdlZAorICAgICAgICB1bmluYXRpdmUgPSBGYWxzZQorICAgICAgICBpZiAnY29uZi9sb2NhbC5jb25mJyBpbiBjaGFuZ2VkZmlsZXM6CisgICAgICAgICAgICBkZWYgcmVhZF91bmluYXRpdmVfY2hlY2tzdW1zKGZuKToKKyAgICAgICAgICAgICAgICBjaGtzdW1pdGVtcyA9IFtdCisgICAgICAgICAgICAgICAgd2l0aCBvcGVuKGZuLCAncicpIGFzIGY6CisgICAgICAgICAgICAgICAgICAgIGZvciBsaW5lIGluIGY6CisgICAgICAgICAgICAgICAgICAgICAgICBpZiBsaW5lLnN0YXJ0c3dpdGgoJ1VOSU5BVElWRV9DSEVDS1NVTScpOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNwbGl0bGluZSA9IHJlLnNwbGl0KHInW1xbXF0iXCddJywgbGluZSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiBsZW4oc3BsaXRsaW5lKSA+IDM6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoa3N1bWl0ZW1zLmFwcGVuZCgoc3BsaXRsaW5lWzFdLCBzcGxpdGxpbmVbM10pKQorICAgICAgICAgICAgICAgIHJldHVybiBjaGtzdW1pdGVtcwogCi0gICAgICAgICAgICAgICAgb2xkc3VtcyA9IHJlYWRfdW5pbmF0aXZlX2NoZWNrc3Vtcyhvcy5wYXRoLmpvaW4oYmFzZXBhdGgsICdjb25mL2xvY2FsLmNvbmYnKSkKLSAgICAgICAgICAgICAgICBuZXdzdW1zID0gcmVhZF91bmluYXRpdmVfY2hlY2tzdW1zKG9zLnBhdGguam9pbih0bXBzZGtfZGlyLCAnY29uZi9sb2NhbC5jb25mJykpCi0gICAgICAgICAgICAgICAgaWYgb2xkc3VtcyAhPSBuZXdzdW1zOgotICAgICAgICAgICAgICAgICAgICB1bmluYXRpdmUgPSBUcnVlCi0gICAgICAgICAgICAgICAgICAgIGZvciBidWlsZGFyY2gsIGNoa3N1bSBpbiBuZXdzdW1zOgotICAgICAgICAgICAgICAgICAgICAgICAgdW5pbmF0aXZlX2ZpbGUgPSBvcy5wYXRoLmpvaW4oJ2Rvd25sb2FkcycsICd1bmluYXRpdmUnLCBjaGtzdW0sICclcy1uYXRpdmVzZGstbGliYy50YXIuYnoyJyAlIGJ1aWxkYXJjaCkKLSAgICAgICAgICAgICAgICAgICAgICAgIG1rZGlyKG9zLnBhdGguam9pbih0bXBzZGtfZGlyLCBvcy5wYXRoLmRpcm5hbWUodW5pbmF0aXZlX2ZpbGUpKSkKLSAgICAgICAgICAgICAgICAgICAgICAgIHJldCA9IHN1YnByb2Nlc3MuY2FsbCgid2dldCAtcSAtTyAlcyAlcy8lcyIgJSAodW5pbmF0aXZlX2ZpbGUsIHVwZGF0ZXNlcnZlciwgdW5pbmF0aXZlX2ZpbGUpLCBzaGVsbD1UcnVlLCBjd2Q9dG1wc2RrX2RpcikKKyAgICAgICAgICAgIG9sZHN1bXMgPSByZWFkX3VuaW5hdGl2ZV9jaGVja3N1bXMob3MucGF0aC5qb2luKGJhc2VwYXRoLCAnY29uZi9sb2NhbC5jb25mJykpCisgICAgICAgICAgICBuZXdzdW1zID0gcmVhZF91bmluYXRpdmVfY2hlY2tzdW1zKG9zLnBhdGguam9pbih0bXBzZGtfZGlyLCAnY29uZi9sb2NhbC5jb25mJykpCisgICAgICAgICAgICBpZiBvbGRzdW1zICE9IG5ld3N1bXM6CisgICAgICAgICAgICAgICAgdW5pbmF0aXZlID0gVHJ1ZQorICAgICAgICAgICAgICAgIGZvciBidWlsZGFyY2gsIGNoa3N1bSBpbiBuZXdzdW1zOgorICAgICAgICAgICAgICAgICAgICB1bmluYXRpdmVfZmlsZSA9IG9zLnBhdGguam9pbignZG93bmxvYWRzJywgJ3VuaW5hdGl2ZScsIGNoa3N1bSwgJyVzLW5hdGl2ZXNkay1saWJjLnRhci5iejInICUgYnVpbGRhcmNoKQorICAgICAgICAgICAgICAgICAgICBta2Rpcihvcy5wYXRoLmpvaW4odG1wc2RrX2Rpciwgb3MucGF0aC5kaXJuYW1lKHVuaW5hdGl2ZV9maWxlKSkpCisgICAgICAgICAgICAgICAgICAgIHJldCA9IHN1YnByb2Nlc3MuY2FsbCgid2dldCAtcSAtTyAlcyAlcy8lcyIgJSAodW5pbmF0aXZlX2ZpbGUsIHVwZGF0ZXNlcnZlciwgdW5pbmF0aXZlX2ZpbGUpLCBzaGVsbD1UcnVlLCBjd2Q9dG1wc2RrX2RpcikKIAotICAgICAgICAgICAgIyBPaywgYWxsIGlzIHdlbGwgYXQgdGhpcyBwb2ludCAtIG1vdmUgZXZlcnl0aGluZyBvdmVyCi0gICAgICAgICAgICB0bXBsYXllcnNfZGlyID0gb3MucGF0aC5qb2luKHRtcHNka19kaXIsICdsYXllcnMnKQotICAgICAgICAgICAgaWYgb3MucGF0aC5leGlzdHModG1wbGF5ZXJzX2Rpcik6Ci0gICAgICAgICAgICAgICAgc2h1dGlsLnJtdHJlZShsYXllcnNfZGlyKQotICAgICAgICAgICAgICAgIHNodXRpbC5tb3ZlKHRtcGxheWVyc19kaXIsIGxheWVyc19kaXIpCi0gICAgICAgICAgICBmb3IgY2hhbmdlZGZpbGUgaW4gY2hhbmdlZGZpbGVzOgotICAgICAgICAgICAgICAgIGRlc3RmaWxlID0gb3MucGF0aC5qb2luKGJhc2VwYXRoLCBjaGFuZ2VkZmlsZSkKLSAgICAgICAgICAgICAgICBvcy5yZW1vdmUoZGVzdGZpbGUpCi0gICAgICAgICAgICAgICAgc2h1dGlsLm1vdmUob3MucGF0aC5qb2luKHRtcHNka19kaXIsIGNoYW5nZWRmaWxlKSwgZGVzdGZpbGUpCi0gICAgICAgICAgICBvcy5yZW1vdmUob3MucGF0aC5qb2luKGNvbmZfZGlyLCAnc2RrLWNvbmYtbWFuaWZlc3QnKSkKLSAgICAgICAgICAgIHNodXRpbC5tb3ZlKHRtcG1hbmlmZXN0LCBjb25mX2RpcikKLSAgICAgICAgICAgIGlmIHVuaW5hdGl2ZToKLSAgICAgICAgICAgICAgICBzaHV0aWwucm10cmVlKG9zLnBhdGguam9pbihiYXNlcGF0aCwgJ2Rvd25sb2FkcycsICd1bmluYXRpdmUnKSkKLSAgICAgICAgICAgICAgICBzaHV0aWwubW92ZShvcy5wYXRoLmpvaW4odG1wc2RrX2RpciwgJ2Rvd25sb2FkcycsICd1bmluYXRpdmUnKSwgb3MucGF0aC5qb2luKGJhc2VwYXRoLCAnZG93bmxvYWRzJykpCisgICAgICAgICMgT2ssIGFsbCBpcyB3ZWxsIGF0IHRoaXMgcG9pbnQgLSBtb3ZlIGV2ZXJ5dGhpbmcgb3ZlcgorICAgICAgICB0bXBsYXllcnNfZGlyID0gb3MucGF0aC5qb2luKHRtcHNka19kaXIsICdsYXllcnMnKQorICAgICAgICBpZiBvcy5wYXRoLmV4aXN0cyh0bXBsYXllcnNfZGlyKToKKyAgICAgICAgICAgIHNodXRpbC5ybXRyZWUobGF5ZXJzX2RpcikKKyAgICAgICAgICAgIHNodXRpbC5tb3ZlKHRtcGxheWVyc19kaXIsIGxheWVyc19kaXIpCisgICAgICAgIGZvciBjaGFuZ2VkZmlsZSBpbiBjaGFuZ2VkZmlsZXM6CisgICAgICAgICAgICBkZXN0ZmlsZSA9IG9zLnBhdGguam9pbihiYXNlcGF0aCwgY2hhbmdlZGZpbGUpCisgICAgICAgICAgICBvcy5yZW1vdmUoZGVzdGZpbGUpCisgICAgICAgICAgICBzaHV0aWwubW92ZShvcy5wYXRoLmpvaW4odG1wc2RrX2RpciwgY2hhbmdlZGZpbGUpLCBkZXN0ZmlsZSkKKyAgICAgICAgb3MucmVtb3ZlKG9zLnBhdGguam9pbihjb25mX2RpciwgJ3Nkay1jb25mLW1hbmlmZXN0JykpCisgICAgICAgIHNodXRpbC5tb3ZlKHRtcG1hbmlmZXN0LCBjb25mX2RpcikKKyAgICAgICAgaWYgdW5pbmF0aXZlOgorICAgICAgICAgICAgc2h1dGlsLnJtdHJlZShvcy5wYXRoLmpvaW4oYmFzZXBhdGgsICdkb3dubG9hZHMnLCAndW5pbmF0aXZlJykpCisgICAgICAgICAgICBzaHV0aWwubW92ZShvcy5wYXRoLmpvaW4odG1wc2RrX2RpciwgJ2Rvd25sb2FkcycsICd1bmluYXRpdmUnKSwgb3MucGF0aC5qb2luKGJhc2VwYXRoLCAnZG93bmxvYWRzJykpCiAKLSAgICAgICAgICAgIGlmIG5vdCBzc3RhdGVfbWlycm9yczoKLSAgICAgICAgICAgICAgICB3aXRoIG9wZW4ob3MucGF0aC5qb2luKGNvbmZfZGlyLCAnc2l0ZS5jb25mJyksICdhJykgYXMgZjoKLSAgICAgICAgICAgICAgICAgICAgZi53cml0ZSgnU0NPTkZfVkVSU0lPTiA9ICIlcyJcbicgJSBzaXRlX2NvbmZfdmVyc2lvbikKLSAgICAgICAgICAgICAgICAgICAgZi53cml0ZSgnU1NUQVRFX01JUlJPUlNfYXBwZW5kID0gIiBmaWxlOi8vLiogJXMvc3N0YXRlLWNhY2hlL1BBVEggXFxuICJcbicgJSB1cGRhdGVzZXJ2ZXIpCi0gICAgICAgIGZpbmFsbHk6Ci0gICAgICAgICAgICBzaHV0aWwucm10cmVlKHRtcHNka19kaXIpCisgICAgICAgIGlmIG5vdCBzc3RhdGVfbWlycm9yczoKKyAgICAgICAgICAgIHdpdGggb3Blbihvcy5wYXRoLmpvaW4oY29uZl9kaXIsICdzaXRlLmNvbmYnKSwgJ2EnKSBhcyBmOgorICAgICAgICAgICAgICAgIGYud3JpdGUoJ1NDT05GX1ZFUlNJT04gPSAiJXMiXG4nICUgc2l0ZV9jb25mX3ZlcnNpb24pCisgICAgICAgICAgICAgICAgZi53cml0ZSgnU1NUQVRFX01JUlJPUlNfYXBwZW5kID0gIiBmaWxlOi8vLiogJXMvc3N0YXRlLWNhY2hlL1BBVEggXFxuICJcbicgJSB1cGRhdGVzZXJ2ZXIpCisgICAgZmluYWxseToKKyAgICAgICAgc2h1dGlsLnJtdHJlZSh0bXBzZGtfZGlyKQogCiAgICAgaWYgbm90IGFyZ3Muc2tpcF9wcmVwYXJlOgogICAgICAgICAjIEZpbmQgYWxsIHBvdGVudGlhbGx5IHVwZGF0ZWFibGUgdGFza3MKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9kZXZ0b29sL3N0YW5kYXJkLnB5IGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L3NjcmlwdHMvbGliL2RldnRvb2wvc3RhbmRhcmQucHkKaW5kZXggNzdhODJkNS4uNGVmZjZmOCAxMDA2NDQKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L3NjcmlwdHMvbGliL2RldnRvb2wvc3RhbmRhcmQucHkKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L3NjcmlwdHMvbGliL2RldnRvb2wvc3RhbmRhcmQucHkKQEAgLTEsNiArMSw2IEBACiAjIERldmVsb3BtZW50IHRvb2wgLSBzdGFuZGFyZCBjb21tYW5kcyBwbHVnaW4KICMKLSMgQ29weXJpZ2h0IChDKSAyMDE0LTIwMTUgSW50ZWwgQ29ycG9yYXRpb24KKyMgQ29weXJpZ2h0IChDKSAyMDE0LTIwMTYgSW50ZWwgQ29ycG9yYXRpb24KICMKICMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKICMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKQEAgLTI4LDggKzI4LDkgQEAKIGltcG9ydCBzY3JpcHR1dGlscwogaW1wb3J0IGVycm5vCiBpbXBvcnQgZ2xvYgoraW1wb3J0IGZpbGVjbXAKIGZyb20gY29sbGVjdGlvbnMgaW1wb3J0IE9yZGVyZWREaWN0Ci1mcm9tIGRldnRvb2wgaW1wb3J0IGV4ZWNfYnVpbGRfZW52X2NvbW1hbmQsIHNldHVwX3RpbmZvaWwsIGNoZWNrX3dvcmtzcGFjZV9yZWNpcGUsIHVzZV9leHRlcm5hbF9idWlsZCwgc2V0dXBfZ2l0X3JlcG8sIHJlY2lwZV90b19hcHBlbmQsIGdldF9iYmNsYXNzZXh0ZW5kX3RhcmdldHMsIERldnRvb2xFcnJvcgorZnJvbSBkZXZ0b29sIGltcG9ydCBleGVjX2J1aWxkX2Vudl9jb21tYW5kLCBzZXR1cF90aW5mb2lsLCBjaGVja193b3Jrc3BhY2VfcmVjaXBlLCB1c2VfZXh0ZXJuYWxfYnVpbGQsIHNldHVwX2dpdF9yZXBvLCByZWNpcGVfdG9fYXBwZW5kLCBnZXRfYmJjbGFzc2V4dGVuZF90YXJnZXRzLCBlbnN1cmVfbnBtLCBEZXZ0b29sRXJyb3IKIGZyb20gZGV2dG9vbCBpbXBvcnQgcGFyc2VfcmVjaXBlCiAKIGxvZ2dlciA9IGxvZ2dpbmcuZ2V0TG9nZ2VyKCdkZXZ0b29sJykKQEAgLTQ2LDEzICs0NywxMyBAQAogICAgICMgVGhlc2UgYXJlIHBvc2l0aW9uYWwgYXJndW1lbnRzLCBidXQgYmVjYXVzZSB3ZSdyZSBuaWNlLCBhbGxvdwogICAgICMgc3BlY2lmeWluZyBlLmcuIHNvdXJjZSB0cmVlIHdpdGhvdXQgbmFtZSwgb3IgZmV0Y2ggVVJJIHdpdGhvdXQgbmFtZSBvcgogICAgICMgc291cmNlIHRyZWUgKGlmIHdlIGNhbiBkZXRlY3QgdGhhdCB0aGF0IGlzIHdoYXQgdGhlIHVzZXIgbWVhbnQpCi0gICAgaWYgJzovLycgaW4gYXJncy5yZWNpcGVuYW1lOgorICAgIGlmIHNjcmlwdHV0aWxzLmlzX3NyY191cmwoYXJncy5yZWNpcGVuYW1lKToKICAgICAgICAgaWYgbm90IGFyZ3MuZmV0Y2h1cmk6CiAgICAgICAgICAgICBpZiBhcmdzLmZldGNoOgogICAgICAgICAgICAgICAgIHJhaXNlIERldnRvb2xFcnJvcignVVJJIHNwZWNpZmllZCBhcyBwb3NpdGlvbmFsIGFyZ3VtZW50IGFzIHdlbGwgYXMgLWYvLS1mZXRjaCcpCiAgICAgICAgICAgICBhcmdzLmZldGNodXJpID0gYXJncy5yZWNpcGVuYW1lCiAgICAgICAgICAgICBhcmdzLnJlY2lwZW5hbWUgPSAnJwotICAgIGVsaWYgYXJncy5zcmN0cmVlIGFuZCAnOi8vJyBpbiBhcmdzLnNyY3RyZWU6CisgICAgZWxpZiBzY3JpcHR1dGlscy5pc19zcmNfdXJsKGFyZ3Muc3JjdHJlZSk6CiAgICAgICAgIGlmIG5vdCBhcmdzLmZldGNodXJpOgogICAgICAgICAgICAgaWYgYXJncy5mZXRjaDoKICAgICAgICAgICAgICAgICByYWlzZSBEZXZ0b29sRXJyb3IoJ1VSSSBzcGVjaWZpZWQgYXMgcG9zaXRpb25hbCBhcmd1bWVudCBhcyB3ZWxsIGFzIC1mLy0tZmV0Y2gnKQpAQCAtNjMsMTMgKzY0LDE3IEBACiAgICAgICAgICAgICBhcmdzLnNyY3RyZWUgPSBhcmdzLnJlY2lwZW5hbWUKICAgICAgICAgICAgIGFyZ3MucmVjaXBlbmFtZSA9IE5vbmUKICAgICAgICAgZWxpZiBvcy5wYXRoLmlzZGlyKGFyZ3MucmVjaXBlbmFtZSk6Ci0gICAgICAgICAgICBsb2dnZXIud2FybignQW1iaWd1b3VzIGFyZ3VtZW50ICVzIC0gYXNzdW1pbmcgeW91IG1lYW4gaXQgdG8gYmUgdGhlIHJlY2lwZSBuYW1lJykKKyAgICAgICAgICAgIGxvZ2dlci53YXJuKCdBbWJpZ3VvdXMgYXJndW1lbnQgIiVzIiAtIGFzc3VtaW5nIHlvdSBtZWFuIGl0IHRvIGJlIHRoZSByZWNpcGUgbmFtZScgJSBhcmdzLnJlY2lwZW5hbWUpCisKKyAgICBpZiBhcmdzLnNyY3RyZWUgYW5kIG9zLnBhdGguaXNmaWxlKGFyZ3Muc3JjdHJlZSk6CisgICAgICAgIGFyZ3MuZmV0Y2h1cmkgPSAnZmlsZTovLycgKyBvcy5wYXRoLmFic3BhdGgoYXJncy5zcmN0cmVlKQorICAgICAgICBhcmdzLnNyY3RyZWUgPSAnJwogCiAgICAgaWYgYXJncy5mZXRjaDoKICAgICAgICAgaWYgYXJncy5mZXRjaHVyaToKICAgICAgICAgICAgIHJhaXNlIERldnRvb2xFcnJvcignVVJJIHNwZWNpZmllZCBhcyBwb3NpdGlvbmFsIGFyZ3VtZW50IGFzIHdlbGwgYXMgLWYvLS1mZXRjaCcpCiAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAjIEZJWE1FIHNob3VsZCBzaG93IGEgd2FybmluZyB0aGF0IC1mLy0tZmV0Y2ggaXMgZGVwcmVjYXRlZCBoZXJlCisgICAgICAgICAgICBsb2dnZXIud2FybignLWYvLS1mZXRjaCBvcHRpb24gaXMgZGVwcmVjYXRlZCAtIHlvdSBjYW4gbm93IHNpbXBseSBzcGVjaWZ5IHRoZSBVUkwgdG8gZmV0Y2ggYXMgYSBwb3NpdGlvbmFsIGFyZ3VtZW50IGluc3RlYWQnKQogICAgICAgICAgICAgYXJncy5mZXRjaHVyaSA9IGFyZ3MuZmV0Y2gKIAogICAgIGlmIGFyZ3MucmVjaXBlbmFtZToKQEAgLTgwLDEwICs4NSw2IEBACiAgICAgICAgIGlmIHJlYXNvbjoKICAgICAgICAgICAgIHJhaXNlIERldnRvb2xFcnJvcihyZWFzb24pCiAKLSAgICAgICAgIyBGSVhNRSB0aGlzIG91Z2h0IHRvIGJlIGluIHZhbGlkYXRlX3BuIGJ1dCB3ZSdyZSB1c2luZyB0aGF0IGluIG90aGVyIGNvbnRleHRzCi0gICAgICAgIGlmICcvJyBpbiBhcmdzLnJlY2lwZW5hbWU6Ci0gICAgICAgICAgICByYWlzZSBEZXZ0b29sRXJyb3IoJyIvIiBpcyBub3QgYSB2YWxpZCBjaGFyYWN0ZXIgaW4gcmVjaXBlIG5hbWVzJykKLQogICAgIGlmIGFyZ3Muc3JjdHJlZToKICAgICAgICAgc3JjdHJlZSA9IG9zLnBhdGguYWJzcGF0aChhcmdzLnNyY3RyZWUpCiAgICAgICAgIHNyY3RyZWVwYXJlbnQgPSBOb25lCkBAIC0xMjcsNiArMTI4LDkgQEAKICAgICAgICAgY29sb3IgPSBhcmdzLmNvbG9yCiAgICAgZXh0cmFjbWRvcHRzID0gJycKICAgICBpZiBhcmdzLmZldGNodXJpOgorICAgICAgICBpZiBhcmdzLmZldGNodXJpLnN0YXJ0c3dpdGgoJ25wbTovLycpOgorICAgICAgICAgICAgZW5zdXJlX25wbShjb25maWcsIGJhc2VwYXRoLCBhcmdzLmZpeGVkX3NldHVwKQorCiAgICAgICAgIHNvdXJjZSA9IGFyZ3MuZmV0Y2h1cmkKICAgICAgICAgaWYgc3JjdHJlZToKICAgICAgICAgICAgIGV4dHJhY21kb3B0cyArPSAnIC14ICVzJyAlIHNyY3RyZWUKQEAgLTE0NCwxNiArMTQ4LDI4IEBACiAgICAgICAgIGV4dHJhY21kb3B0cyArPSAnIC0tYWxzby1uYXRpdmUnCiAgICAgaWYgYXJncy5zcmNfc3ViZGlyOgogICAgICAgICBleHRyYWNtZG9wdHMgKz0gJyAtLXNyYy1zdWJkaXIgIiVzIicgJSBhcmdzLnNyY19zdWJkaXIKKyAgICBpZiBhcmdzLmF1dG9yZXY6CisgICAgICAgIGV4dHJhY21kb3B0cyArPSAnIC1hJwogCiAgICAgdGVtcGRpciA9IHRlbXBmaWxlLm1rZHRlbXAocHJlZml4PSdkZXZ0b29sJykKICAgICB0cnk6Ci0gICAgICAgIHRyeToKLSAgICAgICAgICAgIHN0ZG91dCwgXyA9IGV4ZWNfYnVpbGRfZW52X2NvbW1hbmQoY29uZmlnLmluaXRfcGF0aCwgYmFzZXBhdGgsICdyZWNpcGV0b29sIC0tY29sb3I9JXMgY3JlYXRlIC1vICVzICIlcyIgJXMnICUgKGNvbG9yLCB0ZW1wZGlyLCBzb3VyY2UsIGV4dHJhY21kb3B0cykpCi0gICAgICAgIGV4Y2VwdCBiYi5wcm9jZXNzLkV4ZWN1dGlvbkVycm9yIGFzIGU6Ci0gICAgICAgICAgICBpZiBlLmV4aXRjb2RlID09IDE1OgotICAgICAgICAgICAgICAgIHJhaXNlIERldnRvb2xFcnJvcignQ291bGQgbm90IGF1dG8tZGV0ZXJtaW5lIHJlY2lwZSBuYW1lLCBwbGVhc2Ugc3BlY2lmeSBpdCBvbiB0aGUgY29tbWFuZCBsaW5lJykKLSAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgcmFpc2UgRGV2dG9vbEVycm9yKCdDb21tYW5kIFwnJXNcJyBmYWlsZWQ6XG4lcycgJSAoZS5jb21tYW5kLCBlLnN0ZG91dCkpCisgICAgICAgIHdoaWxlIFRydWU6CisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgc3Rkb3V0LCBfID0gZXhlY19idWlsZF9lbnZfY29tbWFuZChjb25maWcuaW5pdF9wYXRoLCBiYXNlcGF0aCwgJ3JlY2lwZXRvb2wgLS1jb2xvcj0lcyBjcmVhdGUgLW8gJXMgIiVzIiAlcycgJSAoY29sb3IsIHRlbXBkaXIsIHNvdXJjZSwgZXh0cmFjbWRvcHRzKSkKKyAgICAgICAgICAgIGV4Y2VwdCBiYi5wcm9jZXNzLkV4ZWN1dGlvbkVycm9yIGFzIGU6CisgICAgICAgICAgICAgICAgaWYgZS5leGl0Y29kZSA9PSAxNDoKKyAgICAgICAgICAgICAgICAgICAgIyBGSVhNRSB0aGlzIGlzIGEgaG9ycmlibGUgaGFjayB0aGF0IGlzIHVuZm9ydHVuYXRlbHkKKyAgICAgICAgICAgICAgICAgICAgIyBuZWNlc3NhcnkgZHVlIHRvIHRoZSBmYWN0IHRoYXQgd2UgY2FuJ3QgcnVuIGJpdGJha2UgZnJvbQorICAgICAgICAgICAgICAgICAgICAjIGluc2lkZSByZWNpcGV0b29sIHNpbmNlIHJlY2lwZXRvb2wga2VlcHMgdGluZm9pbCBhY3RpdmUKKyAgICAgICAgICAgICAgICAgICAgIyB3aXRoIHJlZmVyZW5jZXMgdG8gaXQgdGhyb3VnaG91dCB0aGUgY29kZSwgc28gd2UgaGF2ZQorICAgICAgICAgICAgICAgICAgICAjIHRvIGV4aXQgb3V0IGFuZCBjb21lIGJhY2sgaGVyZSB0byBkbyBpdC4KKyAgICAgICAgICAgICAgICAgICAgZW5zdXJlX25wbShjb25maWcsIGJhc2VwYXRoLCBhcmdzLmZpeGVkX3NldHVwKQorICAgICAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgICAgIGVsaWYgZS5leGl0Y29kZSA9PSAxNToKKyAgICAgICAgICAgICAgICAgICAgcmFpc2UgRGV2dG9vbEVycm9yKCdDb3VsZCBub3QgYXV0by1kZXRlcm1pbmUgcmVjaXBlIG5hbWUsIHBsZWFzZSBzcGVjaWZ5IGl0IG9uIHRoZSBjb21tYW5kIGxpbmUnKQorICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgIHJhaXNlIERldnRvb2xFcnJvcignQ29tbWFuZCBcJyVzXCcgZmFpbGVkOlxuJXMnICUgKGUuY29tbWFuZCwgZS5zdGRvdXQpKQorICAgICAgICAgICAgYnJlYWsKIAogICAgICAgICByZWNpcGVzID0gZ2xvYi5nbG9iKG9zLnBhdGguam9pbih0ZW1wZGlyLCAnKi5iYicpKQogICAgICAgICBpZiByZWNpcGVzOgpAQCAtMjA1LDU1ICsyMjEsNTcgQEAKICAgICBmb3IgZm4gaW4gb3MubGlzdGRpcihyZWNpcGVkaXIpOgogICAgICAgICBfYWRkX21kNShjb25maWcsIHJlY2lwZW5hbWUsIG9zLnBhdGguam9pbihyZWNpcGVkaXIsIGZuKSkKIAotICAgIGlmIGFyZ3MuZmV0Y2h1cmkgYW5kIG5vdCBhcmdzLm5vX2dpdDoKLSAgICAgICAgc2V0dXBfZ2l0X3JlcG8oc3JjdHJlZSwgYXJncy52ZXJzaW9uLCAnZGV2dG9vbCcpCi0KLSAgICBpbml0aWFsX3JldiA9IE5vbmUKLSAgICBpZiBvcy5wYXRoLmV4aXN0cyhvcy5wYXRoLmpvaW4oc3JjdHJlZSwgJy5naXQnKSk6Ci0gICAgICAgIChzdGRvdXQsIF8pID0gYmIucHJvY2Vzcy5ydW4oJ2dpdCByZXYtcGFyc2UgSEVBRCcsIGN3ZD1zcmN0cmVlKQotICAgICAgICBpbml0aWFsX3JldiA9IHN0ZG91dC5yc3RyaXAoKQotCiAgICAgdGluZm9pbCA9IHNldHVwX3RpbmZvaWwoY29uZmlnX29ubHk9VHJ1ZSwgYmFzZXBhdGg9YmFzZXBhdGgpCi0gICAgcmQgPSBvZS5yZWNpcGV1dGlscy5wYXJzZV9yZWNpcGUocmVjaXBlZmlsZSwgTm9uZSwgdGluZm9pbC5jb25maWdfZGF0YSkKLSAgICBpZiBub3QgcmQ6Ci0gICAgICAgIHJldHVybiAxCisgICAgdHJ5OgorICAgICAgICByZCA9IG9lLnJlY2lwZXV0aWxzLnBhcnNlX3JlY2lwZSh0aW5mb2lsLmNvb2tlciwgcmVjaXBlZmlsZSwgTm9uZSkKKyAgICAgICAgaWYgbm90IHJkOgorICAgICAgICAgICAgcmV0dXJuIDEKIAotICAgIGlmIGFyZ3Muc3JjX3N1YmRpcjoKLSAgICAgICAgc3JjdHJlZSA9IG9zLnBhdGguam9pbihzcmN0cmVlLCBhcmdzLnNyY19zdWJkaXIpCisgICAgICAgIGlmIGFyZ3MuZmV0Y2h1cmkgYW5kIG5vdCBhcmdzLm5vX2dpdDoKKyAgICAgICAgICAgIHNldHVwX2dpdF9yZXBvKHNyY3RyZWUsIGFyZ3MudmVyc2lvbiwgJ2RldnRvb2wnLCBkPXRpbmZvaWwuY29uZmlnX2RhdGEpCiAKLSAgICBiYi51dGlscy5ta2RpcmhpZXIob3MucGF0aC5kaXJuYW1lKGFwcGVuZGZpbGUpKQotICAgIHdpdGggb3BlbihhcHBlbmRmaWxlLCAndycpIGFzIGY6Ci0gICAgICAgIGYud3JpdGUoJ2luaGVyaXQgZXh0ZXJuYWxzcmNcbicpCi0gICAgICAgIGYud3JpdGUoJ0VYVEVSTkFMU1JDID0gIiVzIlxuJyAlIHNyY3RyZWUpCisgICAgICAgIGluaXRpYWxfcmV2ID0gTm9uZQorICAgICAgICBpZiBvcy5wYXRoLmV4aXN0cyhvcy5wYXRoLmpvaW4oc3JjdHJlZSwgJy5naXQnKSk6CisgICAgICAgICAgICAoc3Rkb3V0LCBfKSA9IGJiLnByb2Nlc3MucnVuKCdnaXQgcmV2LXBhcnNlIEhFQUQnLCBjd2Q9c3JjdHJlZSkKKyAgICAgICAgICAgIGluaXRpYWxfcmV2ID0gc3Rkb3V0LnJzdHJpcCgpCiAKLSAgICAgICAgYl9pc19zID0gdXNlX2V4dGVybmFsX2J1aWxkKGFyZ3Muc2FtZV9kaXIsIGFyZ3Mubm9fc2FtZV9kaXIsIHJkKQotICAgICAgICBpZiBiX2lzX3M6Ci0gICAgICAgICAgICBmLndyaXRlKCdFWFRFUk5BTFNSQ19CVUlMRCA9ICIlcyJcbicgJSBzcmN0cmVlKQotICAgICAgICBpZiBpbml0aWFsX3JldjoKLSAgICAgICAgICAgIGYud3JpdGUoJ1xuIyBpbml0aWFsX3JldjogJXNcbicgJSBpbml0aWFsX3JldikKKyAgICAgICAgaWYgYXJncy5zcmNfc3ViZGlyOgorICAgICAgICAgICAgc3JjdHJlZSA9IG9zLnBhdGguam9pbihzcmN0cmVlLCBhcmdzLnNyY19zdWJkaXIpCiAKLSAgICAgICAgaWYgYXJncy5iaW5hcnk6Ci0gICAgICAgICAgICBmLndyaXRlKCdkb19pbnN0YWxsX2FwcGVuZCgpIHtcbicpCi0gICAgICAgICAgICBmLndyaXRlKCcgICAgcm0gLXJmICR7RH0vLmdpdFxuJykKLSAgICAgICAgICAgIGYud3JpdGUoJyAgICBybSAtZiAke0R9L3NpbmdsZXRhc2subG9ja1xuJykKLSAgICAgICAgICAgIGYud3JpdGUoJ31cbicpCisgICAgICAgIGJiLnV0aWxzLm1rZGlyaGllcihvcy5wYXRoLmRpcm5hbWUoYXBwZW5kZmlsZSkpCisgICAgICAgIHdpdGggb3BlbihhcHBlbmRmaWxlLCAndycpIGFzIGY6CisgICAgICAgICAgICBmLndyaXRlKCdpbmhlcml0IGV4dGVybmFsc3JjXG4nKQorICAgICAgICAgICAgZi53cml0ZSgnRVhURVJOQUxTUkMgPSAiJXMiXG4nICUgc3JjdHJlZSkKIAotICAgICAgICBpZiBiYi5kYXRhLmluaGVyaXRzX2NsYXNzKCducG0nLCByZCk6Ci0gICAgICAgICAgICBmLndyaXRlKCdkb19pbnN0YWxsX2FwcGVuZCgpIHtcbicpCi0gICAgICAgICAgICBmLndyaXRlKCcgICAgIyBSZW1vdmUgZmlsZXMgYWRkZWQgdG8gc291cmNlIGRpciBieSBkZXZ0b29sL2V4dGVybmFsc3JjXG4nKQotICAgICAgICAgICAgZi53cml0ZSgnICAgIHJtIC1mICR7TlBNX0lOU1RBTExESVJ9L3NpbmdsZXRhc2subG9ja1xuJykKLSAgICAgICAgICAgIGYud3JpdGUoJyAgICBybSAtcmYgJHtOUE1fSU5TVEFMTERJUn0vLmdpdFxuJykKLSAgICAgICAgICAgIGYud3JpdGUoJyAgICBybSAtcmYgJHtOUE1fSU5TVEFMTERJUn0vb2UtbG9jYWwtZmlsZXNcbicpCi0gICAgICAgICAgICBmLndyaXRlKCcgICAgZm9yIHN5bWxpbmsgaW4gJHtFWFRFUk5BTFNSQ19TWU1MSU5LU30gOyBkb1xuJykKLSAgICAgICAgICAgIGYud3JpdGUoJyAgICAgICAgcm0gLWYgJHtOUE1fSU5TVEFMTERJUn0vJHtzeW1saW5rJSU6Kn1cbicpCi0gICAgICAgICAgICBmLndyaXRlKCcgICAgZG9uZVxuJykKLSAgICAgICAgICAgIGYud3JpdGUoJ31cbicpCisgICAgICAgICAgICBiX2lzX3MgPSB1c2VfZXh0ZXJuYWxfYnVpbGQoYXJncy5zYW1lX2RpciwgYXJncy5ub19zYW1lX2RpciwgcmQpCisgICAgICAgICAgICBpZiBiX2lzX3M6CisgICAgICAgICAgICAgICAgZi53cml0ZSgnRVhURVJOQUxTUkNfQlVJTEQgPSAiJXMiXG4nICUgc3JjdHJlZSkKKyAgICAgICAgICAgIGlmIGluaXRpYWxfcmV2OgorICAgICAgICAgICAgICAgIGYud3JpdGUoJ1xuIyBpbml0aWFsX3JldjogJXNcbicgJSBpbml0aWFsX3JldikKIAotICAgIF9hZGRfbWQ1KGNvbmZpZywgcmVjaXBlbmFtZSwgYXBwZW5kZmlsZSkKKyAgICAgICAgICAgIGlmIGFyZ3MuYmluYXJ5OgorICAgICAgICAgICAgICAgIGYud3JpdGUoJ2RvX2luc3RhbGxfYXBwZW5kKCkge1xuJykKKyAgICAgICAgICAgICAgICBmLndyaXRlKCcgICAgcm0gLXJmICR7RH0vLmdpdFxuJykKKyAgICAgICAgICAgICAgICBmLndyaXRlKCcgICAgcm0gLWYgJHtEfS9zaW5nbGV0YXNrLmxvY2tcbicpCisgICAgICAgICAgICAgICAgZi53cml0ZSgnfVxuJykKIAotICAgIGxvZ2dlci5pbmZvKCdSZWNpcGUgJXMgaGFzIGJlZW4gYXV0b21hdGljYWxseSBjcmVhdGVkOyBmdXJ0aGVyIGVkaXRpbmcgbWF5IGJlIHJlcXVpcmVkIHRvIG1ha2UgaXQgZnVsbHkgZnVuY3Rpb25hbCcgJSByZWNpcGVmaWxlKQorICAgICAgICAgICAgaWYgYmIuZGF0YS5pbmhlcml0c19jbGFzcygnbnBtJywgcmQpOgorICAgICAgICAgICAgICAgIGYud3JpdGUoJ2RvX2luc3RhbGxfYXBwZW5kKCkge1xuJykKKyAgICAgICAgICAgICAgICBmLndyaXRlKCcgICAgIyBSZW1vdmUgZmlsZXMgYWRkZWQgdG8gc291cmNlIGRpciBieSBkZXZ0b29sL2V4dGVybmFsc3JjXG4nKQorICAgICAgICAgICAgICAgIGYud3JpdGUoJyAgICBybSAtZiAke05QTV9JTlNUQUxMRElSfS9zaW5nbGV0YXNrLmxvY2tcbicpCisgICAgICAgICAgICAgICAgZi53cml0ZSgnICAgIHJtIC1yZiAke05QTV9JTlNUQUxMRElSfS8uZ2l0XG4nKQorICAgICAgICAgICAgICAgIGYud3JpdGUoJyAgICBybSAtcmYgJHtOUE1fSU5TVEFMTERJUn0vb2UtbG9jYWwtZmlsZXNcbicpCisgICAgICAgICAgICAgICAgZi53cml0ZSgnICAgIGZvciBzeW1saW5rIGluICR7RVhURVJOQUxTUkNfU1lNTElOS1N9IDsgZG9cbicpCisgICAgICAgICAgICAgICAgZi53cml0ZSgnICAgICAgICBybSAtZiAke05QTV9JTlNUQUxMRElSfS8ke3N5bWxpbmslJToqfVxuJykKKyAgICAgICAgICAgICAgICBmLndyaXRlKCcgICAgZG9uZVxuJykKKyAgICAgICAgICAgICAgICBmLndyaXRlKCd9XG4nKQogCi0gICAgdGluZm9pbC5zaHV0ZG93bigpCisgICAgICAgIF9hZGRfbWQ1KGNvbmZpZywgcmVjaXBlbmFtZSwgYXBwZW5kZmlsZSkKKworICAgICAgICBsb2dnZXIuaW5mbygnUmVjaXBlICVzIGhhcyBiZWVuIGF1dG9tYXRpY2FsbHkgY3JlYXRlZDsgZnVydGhlciBlZGl0aW5nIG1heSBiZSByZXF1aXJlZCB0byBtYWtlIGl0IGZ1bGx5IGZ1bmN0aW9uYWwnICUgcmVjaXBlZmlsZSkKKworICAgIGZpbmFsbHk6CisgICAgICAgIHRpbmZvaWwuc2h1dGRvd24oKQogCiAgICAgcmV0dXJuIDAKIApAQCAtMjYyLDI4ICsyODAsMzAgQEAKICAgICAiIiJDaGVjayBpZiB0aGUgcmVjaXBlIGlzIHN1cHBvcnRlZCBieSBkZXZ0b29sIiIiCiAgICAgaWYgcG4gPT0gJ3BlcmYnOgogICAgICAgICByYWlzZSBEZXZ0b29sRXJyb3IoIlRoZSBwZXJmIHJlY2lwZSBkb2VzIG5vdCBhY3R1YWxseSBjaGVjayBvdXQgIgotICAgICAgICAgICAgICAgICAgICAgICAgICAgInNvdXJjZSBhbmQgdGh1cyBjYW5ub3QgYmUgc3VwcG9ydGVkIGJ5IHRoaXMgdG9vbCIpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAic291cmNlIGFuZCB0aHVzIGNhbm5vdCBiZSBzdXBwb3J0ZWQgYnkgdGhpcyB0b29sIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIDQpCiAKICAgICBpZiBwbiBpbiBbJ2tlcm5lbC1kZXZzcmMnLCAncGFja2FnZS1pbmRleCddIG9yIHBuLnN0YXJ0c3dpdGgoJ2djYy1zb3VyY2UnKToKLSAgICAgICAgcmFpc2UgRGV2dG9vbEVycm9yKCJUaGUgJXMgcmVjaXBlIGlzIG5vdCBzdXBwb3J0ZWQgYnkgdGhpcyB0b29sIiAlIHBuKQorICAgICAgICByYWlzZSBEZXZ0b29sRXJyb3IoIlRoZSAlcyByZWNpcGUgaXMgbm90IHN1cHBvcnRlZCBieSB0aGlzIHRvb2wiICUgcG4sIDQpCiAKICAgICBpZiBiYi5kYXRhLmluaGVyaXRzX2NsYXNzKCdpbWFnZScsIGQpOgogICAgICAgICByYWlzZSBEZXZ0b29sRXJyb3IoIlRoZSAlcyByZWNpcGUgaXMgYW4gaW1hZ2UsIGFuZCB0aGVyZWZvcmUgaXMgbm90ICIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICJzdXBwb3J0ZWQgYnkgdGhpcyB0b29sIiAlIHBuKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgInN1cHBvcnRlZCBieSB0aGlzIHRvb2wiICUgcG4sIDQpCiAKICAgICBpZiBiYi5kYXRhLmluaGVyaXRzX2NsYXNzKCdwb3B1bGF0ZV9zZGsnLCBkKToKICAgICAgICAgcmFpc2UgRGV2dG9vbEVycm9yKCJUaGUgJXMgcmVjaXBlIGlzIGFuIFNESywgYW5kIHRoZXJlZm9yZSBpcyBub3QgIgotICAgICAgICAgICAgICAgICAgICAgICAgICAgInN1cHBvcnRlZCBieSB0aGlzIHRvb2wiICUgcG4pCisgICAgICAgICAgICAgICAgICAgICAgICAgICAic3VwcG9ydGVkIGJ5IHRoaXMgdG9vbCIgJSBwbiwgNCkKIAogICAgIGlmIGJiLmRhdGEuaW5oZXJpdHNfY2xhc3MoJ3BhY2thZ2Vncm91cCcsIGQpOgogICAgICAgICByYWlzZSBEZXZ0b29sRXJyb3IoIlRoZSAlcyByZWNpcGUgaXMgYSBwYWNrYWdlZ3JvdXAsIGFuZCB0aGVyZWZvcmUgaXMgIgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIm5vdCBzdXBwb3J0ZWQgYnkgdGhpcyB0b29sIiAlIHBuKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIm5vdCBzdXBwb3J0ZWQgYnkgdGhpcyB0b29sIiAlIHBuLCA0KQogCiAgICAgaWYgYmIuZGF0YS5pbmhlcml0c19jbGFzcygnbWV0YScsIGQpOgogICAgICAgICByYWlzZSBEZXZ0b29sRXJyb3IoIlRoZSAlcyByZWNpcGUgaXMgYSBtZXRhLXJlY2lwZSwgYW5kIHRoZXJlZm9yZSBpcyAiCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAibm90IHN1cHBvcnRlZCBieSB0aGlzIHRvb2wiICUgcG4pCisgICAgICAgICAgICAgICAgICAgICAgICAgICAibm90IHN1cHBvcnRlZCBieSB0aGlzIHRvb2wiICUgcG4sIDQpCiAKICAgICBpZiBiYi5kYXRhLmluaGVyaXRzX2NsYXNzKCdleHRlcm5hbHNyYycsIGQpIGFuZCBkLmdldFZhcignRVhURVJOQUxTUkMnLCBUcnVlKToKKyAgICAgICAgIyBOb3QgYW4gaW5jb21wYXRpYmlsaXR5IGVycm9yIHBlciBzZSwgc28gd2UgZG9uJ3QgcGFzcyB0aGUgZXJyb3IgY29kZQogICAgICAgICByYWlzZSBEZXZ0b29sRXJyb3IoImV4dGVybmFsc3JjIGlzIGN1cnJlbnRseSBlbmFibGVkIGZvciB0aGUgJXMgIgogICAgICAgICAgICAgICAgICAgICAgICAgICAgInJlY2lwZS4gVGhpcyBwcmV2ZW50cyB0aGUgbm9ybWFsIGRvX3BhdGNoIHRhc2sgIgogICAgICAgICAgICAgICAgICAgICAgICAgICAgImZyb20gd29ya2luZy4gWW91IHdpbGwgbmVlZCB0byBkaXNhYmxlIHRoaXMgIgpAQCAtMjk2LDYgKzMxNiwxMyBAQAogICAgICAgICBiYi51dGlscy5ta2RpcmhpZXIoZHN0X2QpCiAgICAgc2h1dGlsLm1vdmUoc3JjLCBkc3QpCiAKK2RlZiBfY29weV9maWxlKHNyYywgZHN0KToKKyAgICAiIiJDb3B5IGEgZmlsZS4gQ3JlYXRlcyBhbGwgdGhlIGRpcmVjdG9yeSBjb21wb25lbnRzIG9mIGRlc3RpbmF0aW9uIHBhdGguIiIiCisgICAgZHN0X2QgPSBvcy5wYXRoLmRpcm5hbWUoZHN0KQorICAgIGlmIGRzdF9kOgorICAgICAgICBiYi51dGlscy5ta2RpcmhpZXIoZHN0X2QpCisgICAgc2h1dGlsLmNvcHkoc3JjLCBkc3QpCisKIGRlZiBfZ2l0X2xzX3RyZWUocmVwb2RpciwgdHJlZWlzaD0nSEVBRCcsIHJlY3Vyc2l2ZT1GYWxzZSk6CiAgICAgIiIiTGlzdCBjb250ZW50cyBvZiBhIGdpdCB0cmVlaXNoIiIiCiAgICAgaW1wb3J0IGJiCkBAIC0zMTksNyArMzQ2LDcgQEAKICAgICAjIGJlY29tZXMgZ3JlYXRlciB0aGFuIHRoYXQuCiAgICAgcGF0aCA9IG9zLnBhdGgubm9ybXBhdGgocGF0aCkKICAgICByZWN1cnNlID0gVHJ1ZSBpZiBsZW4ocGF0aC5zcGxpdChvcy5wYXRoLnNlcCkpID4gMSBlbHNlIEZhbHNlCi0gICAgZ2l0X2ZpbGVzID0gX2dpdF9sc190cmVlKHNyY3RyZWUsICdIRUFEJywgcmVjdXJzZSkua2V5cygpCisgICAgZ2l0X2ZpbGVzID0gbGlzdChfZ2l0X2xzX3RyZWUoc3JjdHJlZSwgJ0hFQUQnLCByZWN1cnNlKS5rZXlzKCkpCiAgICAgaWYgcGF0aCBpbiBnaXRfZmlsZXM6CiAgICAgICAgIGdpdF9maWxlcy5yZW1vdmUocGF0aCkKICAgICAgICAgcmV0dXJuIGdpdF9maWxlcwpAQCAtMzQzLDE5ICszNzAsMjEgQEAKICAgICBpZiBub3QgdGluZm9pbDoKICAgICAgICAgIyBFcnJvciBhbHJlYWR5IHNob3duCiAgICAgICAgIHJldHVybiAxCisgICAgdHJ5OgorICAgICAgICByZCA9IHBhcnNlX3JlY2lwZShjb25maWcsIHRpbmZvaWwsIGFyZ3MucmVjaXBlbmFtZSwgVHJ1ZSkKKyAgICAgICAgaWYgbm90IHJkOgorICAgICAgICAgICAgcmV0dXJuIDEKIAotICAgIHJkID0gcGFyc2VfcmVjaXBlKGNvbmZpZywgdGluZm9pbCwgYXJncy5yZWNpcGVuYW1lLCBUcnVlKQotICAgIGlmIG5vdCByZDoKLSAgICAgICAgcmV0dXJuIDEKKyAgICAgICAgc3JjdHJlZSA9IG9zLnBhdGguYWJzcGF0aChhcmdzLnNyY3RyZWUpCisgICAgICAgIGluaXRpYWxfcmV2ID0gX2V4dHJhY3Rfc291cmNlKHNyY3RyZWUsIGFyZ3Mua2VlcF90ZW1wLCBhcmdzLmJyYW5jaCwgRmFsc2UsIHJkKQorICAgICAgICBsb2dnZXIuaW5mbygnU291cmNlIHRyZWUgZXh0cmFjdGVkIHRvICVzJyAlIHNyY3RyZWUpCiAKLSAgICBzcmN0cmVlID0gb3MucGF0aC5hYnNwYXRoKGFyZ3Muc3JjdHJlZSkKLSAgICBpbml0aWFsX3JldiA9IF9leHRyYWN0X3NvdXJjZShzcmN0cmVlLCBhcmdzLmtlZXBfdGVtcCwgYXJncy5icmFuY2gsIEZhbHNlLCByZCkKLSAgICBsb2dnZXIuaW5mbygnU291cmNlIHRyZWUgZXh0cmFjdGVkIHRvICVzJyAlIHNyY3RyZWUpCi0KLSAgICBpZiBpbml0aWFsX3JldjoKLSAgICAgICAgcmV0dXJuIDAKLSAgICBlbHNlOgotICAgICAgICByZXR1cm4gMQorICAgICAgICBpZiBpbml0aWFsX3JldjoKKyAgICAgICAgICAgIHJldHVybiAwCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICByZXR1cm4gMQorICAgIGZpbmFsbHk6CisgICAgICAgIHRpbmZvaWwuc2h1dGRvd24oKQogCiBkZWYgc3luYyhhcmdzLCBjb25maWcsIGJhc2VwYXRoLCB3b3Jrc3BhY2UpOgogICAgICIiIkVudHJ5IHBvaW50IGZvciB0aGUgZGV2dG9vbCAnc3luYycgc3ViY29tbWFuZCIiIgpAQCAtMzY1LDE5ICszOTQsMjEgQEAKICAgICBpZiBub3QgdGluZm9pbDoKICAgICAgICAgIyBFcnJvciBhbHJlYWR5IHNob3duCiAgICAgICAgIHJldHVybiAxCisgICAgdHJ5OgorICAgICAgICByZCA9IHBhcnNlX3JlY2lwZShjb25maWcsIHRpbmZvaWwsIGFyZ3MucmVjaXBlbmFtZSwgVHJ1ZSkKKyAgICAgICAgaWYgbm90IHJkOgorICAgICAgICAgICAgcmV0dXJuIDEKIAotICAgIHJkID0gcGFyc2VfcmVjaXBlKGNvbmZpZywgdGluZm9pbCwgYXJncy5yZWNpcGVuYW1lLCBUcnVlKQotICAgIGlmIG5vdCByZDoKLSAgICAgICAgcmV0dXJuIDEKKyAgICAgICAgc3JjdHJlZSA9IG9zLnBhdGguYWJzcGF0aChhcmdzLnNyY3RyZWUpCisgICAgICAgIGluaXRpYWxfcmV2ID0gX2V4dHJhY3Rfc291cmNlKHNyY3RyZWUsIGFyZ3Mua2VlcF90ZW1wLCBhcmdzLmJyYW5jaCwgVHJ1ZSwgcmQpCisgICAgICAgIGxvZ2dlci5pbmZvKCdTb3VyY2UgdHJlZSAlcyBzeW5jaHJvbml6ZWQnICUgc3JjdHJlZSkKIAotICAgIHNyY3RyZWUgPSBvcy5wYXRoLmFic3BhdGgoYXJncy5zcmN0cmVlKQotICAgIGluaXRpYWxfcmV2ID0gX2V4dHJhY3Rfc291cmNlKHNyY3RyZWUsIGFyZ3Mua2VlcF90ZW1wLCBhcmdzLmJyYW5jaCwgVHJ1ZSwgcmQpCi0gICAgbG9nZ2VyLmluZm8oJ1NvdXJjZSB0cmVlICVzIHN5bmNocm9uaXplZCcgJSBzcmN0cmVlKQotCi0gICAgaWYgaW5pdGlhbF9yZXY6Ci0gICAgICAgIHJldHVybiAwCi0gICAgZWxzZToKLSAgICAgICAgcmV0dXJuIDEKKyAgICAgICAgaWYgaW5pdGlhbF9yZXY6CisgICAgICAgICAgICByZXR1cm4gMAorICAgICAgICBlbHNlOgorICAgICAgICAgICAgcmV0dXJuIDEKKyAgICBmaW5hbGx5OgorICAgICAgICB0aW5mb2lsLnNodXRkb3duKCkKIAogY2xhc3MgQmJUYXNrRXhlY3V0b3Iob2JqZWN0KToKICAgICAiIiJDbGFzcyBmb3IgZXhlY3V0aW5nIGJpdGJha2UgdGFza3MgZm9yIGEgcmVjaXBlCkBAIC00MTEsNyArNDQyLDEwIEBACiAKIGNsYXNzIFBhdGNoVGFza0V4ZWN1dG9yKEJiVGFza0V4ZWN1dG9yKToKICAgICBkZWYgX19pbml0X18oc2VsZiwgcmRhdGEpOgorICAgICAgICBpbXBvcnQgb2UucGF0Y2gKICAgICAgICAgc2VsZi5jaGVja19naXQgPSBGYWxzZQorICAgICAgICBzZWxmLnVzZXJvcHRpb25zID0gW10KKyAgICAgICAgb2UucGF0Y2guR2l0QXBwbHlUcmVlLmdpdENvbW1hbmRVc2VyT3B0aW9ucyhzZWxmLnVzZXJvcHRpb25zLCBkPXJkYXRhKQogICAgICAgICBzdXBlcihQYXRjaFRhc2tFeGVjdXRvciwgc2VsZikuX19pbml0X18ocmRhdGEpCiAKICAgICBkZWYgZXhlY19mdW5jKHNlbGYsIGZ1bmMsIHJlcG9ydCk6CkBAIC00MzgsNyArNDcyLDcgQEAKIAogICAgICAgICAgICAgc3Rkb3V0LCBfID0gYmIucHJvY2Vzcy5ydW4oJ2dpdCBzdGF0dXMgLS1wb3JjZWxhaW4nLCBjd2Q9c3Jjc3ViZGlyKQogICAgICAgICAgICAgaWYgc3Rkb3V0OgotICAgICAgICAgICAgICAgIGJiLnByb2Nlc3MucnVuKCdnaXQgYWRkIC47IGdpdCBjb21taXQgLWEgLW0gIkNvbW1pdHRpbmcgY2hhbmdlcyBmcm9tICVzXG5cbiVzIicgJSAoZnVuYywgR2l0QXBwbHlUcmVlLmlnbm9yZV9jb21taXRfcHJlZml4ICsgJyAtIGZyb20gJXMnICUgZnVuYyksIGN3ZD1zcmNzdWJkaXIpCisgICAgICAgICAgICAgICAgYmIucHJvY2Vzcy5ydW4oJ2dpdCBhZGQgLjsgZ2l0ICVzIGNvbW1pdCAtYSAtbSAiQ29tbWl0dGluZyBjaGFuZ2VzIGZyb20gJXNcblxuJXMiJyAlICgnICcuam9pbihzZWxmLnVzZXJvcHRpb25zKSwgZnVuYywgR2l0QXBwbHlUcmVlLmlnbm9yZV9jb21taXRfcHJlZml4ICsgJyAtIGZyb20gJXMnICUgZnVuYyksIGN3ZD1zcmNzdWJkaXIpCiAKIAogZGVmIF9wcmVwX2V4dHJhY3Rfb3BlcmF0aW9uKGNvbmZpZywgYmFzZXBhdGgsIHJlY2lwZW5hbWUsIHRpbmZvaWw9Tm9uZSk6CkBAIC00OTYsNyArNTMwLDcgQEAKIAogICAgICAgICBpZiAnbm9leGVjJyBpbiAoZC5nZXRWYXJGbGFncygnZG9fdW5wYWNrJywgRmFsc2UpIG9yIFtdKToKICAgICAgICAgICAgIHJhaXNlIERldnRvb2xFcnJvcigiVGhlICVzIHJlY2lwZSBoYXMgZG9fdW5wYWNrIGRpc2FibGVkLCB1bmFibGUgdG8gIgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJleHRyYWN0IHNvdXJjZSIgJSBwbikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZXh0cmFjdCBzb3VyY2UiICUgcG4sIDQpCiAKICAgICBpZiBub3Qgc3luYzoKICAgICAgICAgIyBQcmVwYXJlIGZvciBzaHV0aWwubW92ZSBsYXRlciBvbgpAQCAtNTQ3LDggKzU4MSwxNCBAQAogICAgICAgICByZWNpcGVfcGF0Y2hlcyA9IFtvcy5wYXRoLmJhc2VuYW1lKHBhdGNoKSBmb3IgcGF0Y2ggaW4KICAgICAgICAgICAgICAgICAgICAgICAgICAgb2UucmVjaXBldXRpbHMuZ2V0X3JlY2lwZV9wYXRjaGVzKGNyZCldCiAgICAgICAgIGxvY2FsX2ZpbGVzID0gb2UucmVjaXBldXRpbHMuZ2V0X3JlY2lwZV9sb2NhbF9maWxlcyhjcmQpCisKKyAgICAgICAgIyBJZ25vcmUgbG9jYWwgZmlsZXMgd2l0aCBzdWJkaXI9e0JQfQorICAgICAgICBzcmNhYnNwYXRoID0gb3MucGF0aC5hYnNwYXRoKHNyY3N1YmRpcikKICAgICAgICAgbG9jYWxfZmlsZXMgPSBbZm5hbWUgZm9yIGZuYW1lIGluIGxvY2FsX2ZpbGVzIGlmCi0gICAgICAgICAgICAgICAgICAgICAgIG9zLnBhdGguZXhpc3RzKG9zLnBhdGguam9pbih3b3JrZGlyLCBmbmFtZSkpXQorICAgICAgICAgICAgICAgICAgICAgICBvcy5wYXRoLmV4aXN0cyhvcy5wYXRoLmpvaW4od29ya2RpciwgZm5hbWUpKSBhbmQKKyAgICAgICAgICAgICAgICAgICAgICAgKHNyY2Fic3BhdGggPT0gd29ya2RpciBvciBub3QKKyAgICAgICAgICAgICAgICAgICAgICAgb3MucGF0aC5qb2luKHdvcmtkaXIsIGZuYW1lKS5zdGFydHN3aXRoKHNyY2Fic3BhdGggKworICAgICAgICAgICAgICAgICAgICAgICAgICAgb3Muc2VwKSldCiAgICAgICAgIGlmIGxvY2FsX2ZpbGVzOgogICAgICAgICAgICAgZm9yIGZuYW1lIGluIGxvY2FsX2ZpbGVzOgogICAgICAgICAgICAgICAgIF9tb3ZlX2ZpbGUob3MucGF0aC5qb2luKHdvcmtkaXIsIGZuYW1lKSwKQEAgLTU4Myw3ICs2MjMsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgImRvZXNuJ3QgdXNlIGFueSBzb3VyY2Ugb3IgdGhlIGNvcnJlY3Qgc291cmNlICIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICJkaXJlY3RvcnkgY291bGQgbm90IGJlIGRldGVybWluZWQiICUgcG4pCiAKLSAgICAgICAgc2V0dXBfZ2l0X3JlcG8oc3Jjc3ViZGlyLCBjcmQuZ2V0VmFyKCdQVicsIFRydWUpLCBkZXZicmFuY2gpCisgICAgICAgIHNldHVwX2dpdF9yZXBvKHNyY3N1YmRpciwgY3JkLmdldFZhcignUFYnLCBUcnVlKSwgZGV2YnJhbmNoLCBkPWQpCiAKICAgICAgICAgKHN0ZG91dCwgXykgPSBiYi5wcm9jZXNzLnJ1bignZ2l0IHJldi1wYXJzZSBIRUFEJywgY3dkPXNyY3N1YmRpcikKICAgICAgICAgaW5pdGlhbF9yZXYgPSBzdGRvdXQucnN0cmlwKCkKQEAgLTcwMywxMjggKzc0MywxMjcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyZ3MucmVjaXBlbmFtZSkKIAogICAgIHRpbmZvaWwgPSBzZXR1cF90aW5mb2lsKGJhc2VwYXRoPWJhc2VwYXRoKQotICAgIHJkID0gcGFyc2VfcmVjaXBlKGNvbmZpZywgdGluZm9pbCwgYXJncy5yZWNpcGVuYW1lLCBUcnVlKQotICAgIGlmIG5vdCByZDoKLSAgICAgICAgcmV0dXJuIDEKLQotICAgIHBuID0gcmQuZ2V0VmFyKCdQTicsIFRydWUpCi0gICAgaWYgcG4gIT0gYXJncy5yZWNpcGVuYW1lOgotICAgICAgICBsb2dnZXIuaW5mbygnTWFwcGluZyAlcyB0byAlcycgJSAoYXJncy5yZWNpcGVuYW1lLCBwbikpCi0gICAgaWYgcG4gaW4gd29ya3NwYWNlOgotICAgICAgICByYWlzZSBEZXZ0b29sRXJyb3IoInJlY2lwZSAlcyBpcyBhbHJlYWR5IGluIHlvdXIgd29ya3NwYWNlIiAlCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBwbikKLQotICAgIGlmIGFyZ3Muc3JjdHJlZToKLSAgICAgICAgc3JjdHJlZSA9IG9zLnBhdGguYWJzcGF0aChhcmdzLnNyY3RyZWUpCi0gICAgZWxzZToKLSAgICAgICAgc3JjdHJlZSA9IGdldF9kZWZhdWx0X3NyY3RyZWUoY29uZmlnLCBwbikKLQotICAgIGlmIGFyZ3Mubm9fZXh0cmFjdCBhbmQgbm90IG9zLnBhdGguaXNkaXIoc3JjdHJlZSk6Ci0gICAgICAgIHJhaXNlIERldnRvb2xFcnJvcigiLS1uby1leHRyYWN0IHNwZWNpZmllZCBhbmQgc291cmNlIHBhdGggJXMgZG9lcyAiCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAibm90IGV4aXN0IG9yIGlzIG5vdCBhIGRpcmVjdG9yeSIgJQotICAgICAgICAgICAgICAgICAgICAgICAgICAgc3JjdHJlZSkKLSAgICBpZiBub3QgYXJncy5ub19leHRyYWN0OgotICAgICAgICB0aW5mb2lsID0gX3ByZXBfZXh0cmFjdF9vcGVyYXRpb24oY29uZmlnLCBiYXNlcGF0aCwgcG4sIHRpbmZvaWwpCi0gICAgICAgIGlmIG5vdCB0aW5mb2lsOgotICAgICAgICAgICAgIyBFcnJvciBhbHJlYWR5IHNob3duCisgICAgdHJ5OgorICAgICAgICByZCA9IHBhcnNlX3JlY2lwZShjb25maWcsIHRpbmZvaWwsIGFyZ3MucmVjaXBlbmFtZSwgVHJ1ZSkKKyAgICAgICAgaWYgbm90IHJkOgogICAgICAgICAgICAgcmV0dXJuIDEKIAotICAgIHJlY2lwZWZpbGUgPSByZC5nZXRWYXIoJ0ZJTEUnLCBUcnVlKQotICAgIGFwcGVuZGZpbGUgPSByZWNpcGVfdG9fYXBwZW5kKHJlY2lwZWZpbGUsIGNvbmZpZywgYXJncy53aWxkY2FyZCkKLSAgICBpZiBvcy5wYXRoLmV4aXN0cyhhcHBlbmRmaWxlKToKLSAgICAgICAgcmFpc2UgRGV2dG9vbEVycm9yKCJBbm90aGVyIHZhcmlhbnQgb2YgcmVjaXBlICVzIGlzIGFscmVhZHkgaW4geW91ciAiCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAid29ya3NwYWNlIChvbmx5IG9uZSB2YXJpYW50IG9mIGEgcmVjaXBlIGNhbiAiCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAiY3VycmVudGx5IGJlIHdvcmtlZCBvbiBhdCBvbmNlKSIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICUgcG4pCisgICAgICAgIHBuID0gcmQuZ2V0VmFyKCdQTicsIFRydWUpCisgICAgICAgIGlmIHBuICE9IGFyZ3MucmVjaXBlbmFtZToKKyAgICAgICAgICAgIGxvZ2dlci5pbmZvKCdNYXBwaW5nICVzIHRvICVzJyAlIChhcmdzLnJlY2lwZW5hbWUsIHBuKSkKKyAgICAgICAgaWYgcG4gaW4gd29ya3NwYWNlOgorICAgICAgICAgICAgcmFpc2UgRGV2dG9vbEVycm9yKCJyZWNpcGUgJXMgaXMgYWxyZWFkeSBpbiB5b3VyIHdvcmtzcGFjZSIgJQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBuKQogCi0gICAgX2NoZWNrX2NvbXBhdGlibGVfcmVjaXBlKHBuLCByZCkKKyAgICAgICAgaWYgYXJncy5zcmN0cmVlOgorICAgICAgICAgICAgc3JjdHJlZSA9IG9zLnBhdGguYWJzcGF0aChhcmdzLnNyY3RyZWUpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzcmN0cmVlID0gZ2V0X2RlZmF1bHRfc3JjdHJlZShjb25maWcsIHBuKQogCi0gICAgaW5pdGlhbF9yZXYgPSBOb25lCi0gICAgY29tbWl0cyA9IFtdCi0gICAgaWYgbm90IGFyZ3Mubm9fZXh0cmFjdDoKLSAgICAgICAgaW5pdGlhbF9yZXYgPSBfZXh0cmFjdF9zb3VyY2Uoc3JjdHJlZSwgRmFsc2UsIGFyZ3MuYnJhbmNoLCBGYWxzZSwgcmQpCi0gICAgICAgIGlmIG5vdCBpbml0aWFsX3JldjoKLSAgICAgICAgICAgIHJldHVybiAxCi0gICAgICAgIGxvZ2dlci5pbmZvKCdTb3VyY2UgdHJlZSBleHRyYWN0ZWQgdG8gJXMnICUgc3JjdHJlZSkKLSAgICAgICAgIyBHZXQgbGlzdCBvZiBjb21taXRzIHNpbmNlIHRoaXMgcmV2aXNpb24KLSAgICAgICAgKHN0ZG91dCwgXykgPSBiYi5wcm9jZXNzLnJ1bignZ2l0IHJldi1saXN0IC0tcmV2ZXJzZSAlcy4uSEVBRCcgJSBpbml0aWFsX3JldiwgY3dkPXNyY3RyZWUpCi0gICAgICAgIGNvbW1pdHMgPSBzdGRvdXQuc3BsaXQoKQotICAgIGVsc2U6Ci0gICAgICAgIGlmIG9zLnBhdGguZXhpc3RzKG9zLnBhdGguam9pbihzcmN0cmVlLCAnLmdpdCcpKToKLSAgICAgICAgICAgICMgQ2hlY2sgaWYgaXQncyBhIHRyZWUgcHJldmlvdXNseSBleHRyYWN0ZWQgYnkgdXMKLSAgICAgICAgICAgIHRyeToKLSAgICAgICAgICAgICAgICAoc3Rkb3V0LCBfKSA9IGJiLnByb2Nlc3MucnVuKCdnaXQgYnJhbmNoIC0tY29udGFpbnMgZGV2dG9vbC1iYXNlJywgY3dkPXNyY3RyZWUpCi0gICAgICAgICAgICBleGNlcHQgYmIucHJvY2Vzcy5FeGVjdXRpb25FcnJvcjoKLSAgICAgICAgICAgICAgICBzdGRvdXQgPSAnJwotICAgICAgICAgICAgZm9yIGxpbmUgaW4gc3Rkb3V0LnNwbGl0bGluZXMoKToKLSAgICAgICAgICAgICAgICBpZiBsaW5lLnN0YXJ0c3dpdGgoJyonKToKLSAgICAgICAgICAgICAgICAgICAgKHN0ZG91dCwgXykgPSBiYi5wcm9jZXNzLnJ1bignZ2l0IHJldi1wYXJzZSBkZXZ0b29sLWJhc2UnLCBjd2Q9c3JjdHJlZSkKLSAgICAgICAgICAgICAgICAgICAgaW5pdGlhbF9yZXYgPSBzdGRvdXQucnN0cmlwKCkKKyAgICAgICAgaWYgYXJncy5ub19leHRyYWN0IGFuZCBub3Qgb3MucGF0aC5pc2RpcihzcmN0cmVlKToKKyAgICAgICAgICAgIHJhaXNlIERldnRvb2xFcnJvcigiLS1uby1leHRyYWN0IHNwZWNpZmllZCBhbmQgc291cmNlIHBhdGggJXMgZG9lcyAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm5vdCBleGlzdCBvciBpcyBub3QgYSBkaXJlY3RvcnkiICUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcmN0cmVlKQorICAgICAgICBpZiBub3QgYXJncy5ub19leHRyYWN0OgorICAgICAgICAgICAgdGluZm9pbCA9IF9wcmVwX2V4dHJhY3Rfb3BlcmF0aW9uKGNvbmZpZywgYmFzZXBhdGgsIHBuLCB0aW5mb2lsKQorICAgICAgICAgICAgaWYgbm90IHRpbmZvaWw6CisgICAgICAgICAgICAgICAgIyBFcnJvciBhbHJlYWR5IHNob3duCisgICAgICAgICAgICAgICAgcmV0dXJuIDEKKworICAgICAgICByZWNpcGVmaWxlID0gcmQuZ2V0VmFyKCdGSUxFJywgVHJ1ZSkKKyAgICAgICAgYXBwZW5kZmlsZSA9IHJlY2lwZV90b19hcHBlbmQocmVjaXBlZmlsZSwgY29uZmlnLCBhcmdzLndpbGRjYXJkKQorICAgICAgICBpZiBvcy5wYXRoLmV4aXN0cyhhcHBlbmRmaWxlKToKKyAgICAgICAgICAgIHJhaXNlIERldnRvb2xFcnJvcigiQW5vdGhlciB2YXJpYW50IG9mIHJlY2lwZSAlcyBpcyBhbHJlYWR5IGluIHlvdXIgIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ3b3Jrc3BhY2UgKG9ubHkgb25lIHZhcmlhbnQgb2YgYSByZWNpcGUgY2FuICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAiY3VycmVudGx5IGJlIHdvcmtlZCBvbiBhdCBvbmNlKSIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAlIHBuKQorCisgICAgICAgIF9jaGVja19jb21wYXRpYmxlX3JlY2lwZShwbiwgcmQpCisKKyAgICAgICAgaW5pdGlhbF9yZXYgPSBOb25lCisgICAgICAgIGNvbW1pdHMgPSBbXQorICAgICAgICBpZiBub3QgYXJncy5ub19leHRyYWN0OgorICAgICAgICAgICAgaW5pdGlhbF9yZXYgPSBfZXh0cmFjdF9zb3VyY2Uoc3JjdHJlZSwgRmFsc2UsIGFyZ3MuYnJhbmNoLCBGYWxzZSwgcmQpCiAgICAgICAgICAgICBpZiBub3QgaW5pdGlhbF9yZXY6Ci0gICAgICAgICAgICAgICAgIyBPdGhlcndpc2UsIGp1c3QgZ3JhYiB0aGUgaGVhZCByZXZpc2lvbgotICAgICAgICAgICAgICAgIChzdGRvdXQsIF8pID0gYmIucHJvY2Vzcy5ydW4oJ2dpdCByZXYtcGFyc2UgSEVBRCcsIGN3ZD1zcmN0cmVlKQotICAgICAgICAgICAgICAgIGluaXRpYWxfcmV2ID0gc3Rkb3V0LnJzdHJpcCgpCisgICAgICAgICAgICAgICAgcmV0dXJuIDEKKyAgICAgICAgICAgIGxvZ2dlci5pbmZvKCdTb3VyY2UgdHJlZSBleHRyYWN0ZWQgdG8gJXMnICUgc3JjdHJlZSkKKyAgICAgICAgICAgICMgR2V0IGxpc3Qgb2YgY29tbWl0cyBzaW5jZSB0aGlzIHJldmlzaW9uCisgICAgICAgICAgICAoc3Rkb3V0LCBfKSA9IGJiLnByb2Nlc3MucnVuKCdnaXQgcmV2LWxpc3QgLS1yZXZlcnNlICVzLi5IRUFEJyAlIGluaXRpYWxfcmV2LCBjd2Q9c3JjdHJlZSkKKyAgICAgICAgICAgIGNvbW1pdHMgPSBzdGRvdXQuc3BsaXQoKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgaWYgb3MucGF0aC5leGlzdHMob3MucGF0aC5qb2luKHNyY3RyZWUsICcuZ2l0JykpOgorICAgICAgICAgICAgICAgICMgQ2hlY2sgaWYgaXQncyBhIHRyZWUgcHJldmlvdXNseSBleHRyYWN0ZWQgYnkgdXMKKyAgICAgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgICAgIChzdGRvdXQsIF8pID0gYmIucHJvY2Vzcy5ydW4oJ2dpdCBicmFuY2ggLS1jb250YWlucyBkZXZ0b29sLWJhc2UnLCBjd2Q9c3JjdHJlZSkKKyAgICAgICAgICAgICAgICBleGNlcHQgYmIucHJvY2Vzcy5FeGVjdXRpb25FcnJvcjoKKyAgICAgICAgICAgICAgICAgICAgc3Rkb3V0ID0gJycKKyAgICAgICAgICAgICAgICBmb3IgbGluZSBpbiBzdGRvdXQuc3BsaXRsaW5lcygpOgorICAgICAgICAgICAgICAgICAgICBpZiBsaW5lLnN0YXJ0c3dpdGgoJyonKToKKyAgICAgICAgICAgICAgICAgICAgICAgIChzdGRvdXQsIF8pID0gYmIucHJvY2Vzcy5ydW4oJ2dpdCByZXYtcGFyc2UgZGV2dG9vbC1iYXNlJywgY3dkPXNyY3RyZWUpCisgICAgICAgICAgICAgICAgICAgICAgICBpbml0aWFsX3JldiA9IHN0ZG91dC5yc3RyaXAoKQorICAgICAgICAgICAgICAgIGlmIG5vdCBpbml0aWFsX3JldjoKKyAgICAgICAgICAgICAgICAgICAgIyBPdGhlcndpc2UsIGp1c3QgZ3JhYiB0aGUgaGVhZCByZXZpc2lvbgorICAgICAgICAgICAgICAgICAgICAoc3Rkb3V0LCBfKSA9IGJiLnByb2Nlc3MucnVuKCdnaXQgcmV2LXBhcnNlIEhFQUQnLCBjd2Q9c3JjdHJlZSkKKyAgICAgICAgICAgICAgICAgICAgaW5pdGlhbF9yZXYgPSBzdGRvdXQucnN0cmlwKCkKIAotICAgICMgQ2hlY2sgdGhhdCByZWNpcGUgaXNuJ3QgdXNpbmcgYSBzaGFyZWQgd29ya2RpcgotICAgIHMgPSBvcy5wYXRoLmFic3BhdGgocmQuZ2V0VmFyKCdTJywgVHJ1ZSkpCi0gICAgd29ya2RpciA9IG9zLnBhdGguYWJzcGF0aChyZC5nZXRWYXIoJ1dPUktESVInLCBUcnVlKSkKLSAgICBpZiBzLnN0YXJ0c3dpdGgod29ya2RpcikgYW5kIHMgIT0gd29ya2RpciBhbmQgb3MucGF0aC5kaXJuYW1lKHMpICE9IHdvcmtkaXI6Ci0gICAgICAgICMgSGFuZGxlIGlmIFMgaXMgc2V0IHRvIGEgc3ViZGlyZWN0b3J5IG9mIHRoZSBzb3VyY2UKLSAgICAgICAgc3Jjc3ViZGlyID0gb3MucGF0aC5yZWxwYXRoKHMsIHdvcmtkaXIpLnNwbGl0KG9zLnNlcCwgMSlbMV0KLSAgICAgICAgc3JjdHJlZSA9IG9zLnBhdGguam9pbihzcmN0cmVlLCBzcmNzdWJkaXIpCisgICAgICAgICMgQ2hlY2sgdGhhdCByZWNpcGUgaXNuJ3QgdXNpbmcgYSBzaGFyZWQgd29ya2RpcgorICAgICAgICBzID0gb3MucGF0aC5hYnNwYXRoKHJkLmdldFZhcignUycsIFRydWUpKQorICAgICAgICB3b3JrZGlyID0gb3MucGF0aC5hYnNwYXRoKHJkLmdldFZhcignV09SS0RJUicsIFRydWUpKQorICAgICAgICBpZiBzLnN0YXJ0c3dpdGgod29ya2RpcikgYW5kIHMgIT0gd29ya2RpciBhbmQgb3MucGF0aC5kaXJuYW1lKHMpICE9IHdvcmtkaXI6CisgICAgICAgICAgICAjIEhhbmRsZSBpZiBTIGlzIHNldCB0byBhIHN1YmRpcmVjdG9yeSBvZiB0aGUgc291cmNlCisgICAgICAgICAgICBzcmNzdWJkaXIgPSBvcy5wYXRoLnJlbHBhdGgocywgd29ya2Rpcikuc3BsaXQob3Muc2VwLCAxKVsxXQorICAgICAgICAgICAgc3JjdHJlZSA9IG9zLnBhdGguam9pbihzcmN0cmVlLCBzcmNzdWJkaXIpCiAKLSAgICBiYi51dGlscy5ta2RpcmhpZXIob3MucGF0aC5kaXJuYW1lKGFwcGVuZGZpbGUpKQotICAgIHdpdGggb3BlbihhcHBlbmRmaWxlLCAndycpIGFzIGY6Ci0gICAgICAgIGYud3JpdGUoJ0ZJTEVTRVhUUkFQQVRIU19wcmVwZW5kIDo9ICIke1RISVNESVJ9LyR7UE59OiJcbicpCi0gICAgICAgICMgTG9jYWwgZmlsZXMgY2FuIGJlIG1vZGlmaWVkL3RyYWNrZWQgaW4gc2VwYXJhdGUgc3ViZGlyIHVuZGVyIHNyY3RyZWUKLSAgICAgICAgIyBNb3N0bHkgdXNlZnVsIGZvciBwYWNrYWdlcyB3aXRoIFMgIT0gV09SS0RJUgotICAgICAgICBmLndyaXRlKCdGSUxFU1BBVEhfcHJlcGVuZCA6PSAiJXM6IlxuJyAlCi0gICAgICAgICAgICAgICAgb3MucGF0aC5qb2luKHNyY3RyZWUsICdvZS1sb2NhbC1maWxlcycpKQorICAgICAgICBiYi51dGlscy5ta2RpcmhpZXIob3MucGF0aC5kaXJuYW1lKGFwcGVuZGZpbGUpKQorICAgICAgICB3aXRoIG9wZW4oYXBwZW5kZmlsZSwgJ3cnKSBhcyBmOgorICAgICAgICAgICAgZi53cml0ZSgnRklMRVNFWFRSQVBBVEhTX3ByZXBlbmQgOj0gIiR7VEhJU0RJUn0vJHtQTn06IlxuJykKKyAgICAgICAgICAgICMgTG9jYWwgZmlsZXMgY2FuIGJlIG1vZGlmaWVkL3RyYWNrZWQgaW4gc2VwYXJhdGUgc3ViZGlyIHVuZGVyIHNyY3RyZWUKKyAgICAgICAgICAgICMgTW9zdGx5IHVzZWZ1bCBmb3IgcGFja2FnZXMgd2l0aCBTICE9IFdPUktESVIKKyAgICAgICAgICAgIGYud3JpdGUoJ0ZJTEVTUEFUSF9wcmVwZW5kIDo9ICIlczoiXG4nICUKKyAgICAgICAgICAgICAgICAgICAgb3MucGF0aC5qb2luKHNyY3RyZWUsICdvZS1sb2NhbC1maWxlcycpKQogCi0gICAgICAgIGYud3JpdGUoJ1xuaW5oZXJpdCBleHRlcm5hbHNyY1xuJykKLSAgICAgICAgZi53cml0ZSgnIyBOT1RFOiBXZSB1c2UgcG4tIG92ZXJyaWRlcyBoZXJlIHRvIGF2b2lkIGFmZmVjdGluZyBtdWx0aXBsZSB2YXJpYW50cyBpbiB0aGUgY2FzZSB3aGVyZSB0aGUgcmVjaXBlIHVzZXMgQkJDTEFTU0VYVEVORFxuJykKLSAgICAgICAgZi53cml0ZSgnRVhURVJOQUxTUkNfcG4tJXMgPSAiJXMiXG4nICUgKHBuLCBzcmN0cmVlKSkKKyAgICAgICAgICAgIGYud3JpdGUoJ1xuaW5oZXJpdCBleHRlcm5hbHNyY1xuJykKKyAgICAgICAgICAgIGYud3JpdGUoJyMgTk9URTogV2UgdXNlIHBuLSBvdmVycmlkZXMgaGVyZSB0byBhdm9pZCBhZmZlY3RpbmcgbXVsdGlwbGUgdmFyaWFudHMgaW4gdGhlIGNhc2Ugd2hlcmUgdGhlIHJlY2lwZSB1c2VzIEJCQ0xBU1NFWFRFTkRcbicpCisgICAgICAgICAgICBmLndyaXRlKCdFWFRFUk5BTFNSQ19wbi0lcyA9ICIlcyJcbicgJSAocG4sIHNyY3RyZWUpKQogCi0gICAgICAgIGJfaXNfcyA9IHVzZV9leHRlcm5hbF9idWlsZChhcmdzLnNhbWVfZGlyLCBhcmdzLm5vX3NhbWVfZGlyLCByZCkKLSAgICAgICAgaWYgYl9pc19zOgotICAgICAgICAgICAgZi53cml0ZSgnRVhURVJOQUxTUkNfQlVJTERfcG4tJXMgPSAiJXMiXG4nICUgKHBuLCBzcmN0cmVlKSkKKyAgICAgICAgICAgIGJfaXNfcyA9IHVzZV9leHRlcm5hbF9idWlsZChhcmdzLnNhbWVfZGlyLCBhcmdzLm5vX3NhbWVfZGlyLCByZCkKKyAgICAgICAgICAgIGlmIGJfaXNfczoKKyAgICAgICAgICAgICAgICBmLndyaXRlKCdFWFRFUk5BTFNSQ19CVUlMRF9wbi0lcyA9ICIlcyJcbicgJSAocG4sIHNyY3RyZWUpKQogCi0gICAgICAgIGlmIGJiLmRhdGEuaW5oZXJpdHNfY2xhc3MoJ2tlcm5lbCcsIHJkKToKLSAgICAgICAgICAgIGYud3JpdGUoJ1NSQ1RSRUVDT1ZFUkVEVEFTS1MgPSAiZG9fdmFsaWRhdGVfYnJhbmNoZXMgZG9fa2VybmVsX2NoZWNrb3V0ICcKLSAgICAgICAgICAgICAgICAgICAgJ2RvX2ZldGNoIGRvX3VucGFjayBkb19wYXRjaCBkb19rZXJuZWxfY29uZmlnbWUgZG9fa2VybmVsX2NvbmZpZ2NoZWNrIlxuJykKLSAgICAgICAgICAgIGYud3JpdGUoJ1xuZG9fY29uZmlndXJlX2FwcGVuZCgpIHtcbicKLSAgICAgICAgICAgICAgICAgICAgJyAgICBjcCAke0J9Ly5jb25maWcgJHtTfS8uY29uZmlnLmJhc2VsaW5lXG4nCi0gICAgICAgICAgICAgICAgICAgICcgICAgbG4gLXNmVCAke0J9Ly5jb25maWcgJHtTfS8uY29uZmlnLm5ld1xuJwotICAgICAgICAgICAgICAgICAgICAnfVxuJykKLSAgICAgICAgaWYgaW5pdGlhbF9yZXY6Ci0gICAgICAgICAgICBmLndyaXRlKCdcbiMgaW5pdGlhbF9yZXY6ICVzXG4nICUgaW5pdGlhbF9yZXYpCi0gICAgICAgICAgICBmb3IgY29tbWl0IGluIGNvbW1pdHM6Ci0gICAgICAgICAgICAgICAgZi53cml0ZSgnIyBjb21taXQ6ICVzXG4nICUgY29tbWl0KQorICAgICAgICAgICAgaWYgYmIuZGF0YS5pbmhlcml0c19jbGFzcygna2VybmVsJywgcmQpOgorICAgICAgICAgICAgICAgIGYud3JpdGUoJ1NSQ1RSRUVDT1ZFUkVEVEFTS1MgPSAiZG9fdmFsaWRhdGVfYnJhbmNoZXMgZG9fa2VybmVsX2NoZWNrb3V0ICcKKyAgICAgICAgICAgICAgICAgICAgICAgICdkb19mZXRjaCBkb191bnBhY2sgZG9fcGF0Y2ggZG9fa2VybmVsX2NvbmZpZ21lIGRvX2tlcm5lbF9jb25maWdjaGVjayJcbicpCisgICAgICAgICAgICAgICAgZi53cml0ZSgnXG5kb19jb25maWd1cmVfYXBwZW5kKCkge1xuJworICAgICAgICAgICAgICAgICAgICAgICAgJyAgICBjcCAke0J9Ly5jb25maWcgJHtTfS8uY29uZmlnLmJhc2VsaW5lXG4nCisgICAgICAgICAgICAgICAgICAgICAgICAnICAgIGxuIC1zZlQgJHtCfS8uY29uZmlnICR7U30vLmNvbmZpZy5uZXdcbicKKyAgICAgICAgICAgICAgICAgICAgICAgICd9XG4nKQorICAgICAgICAgICAgaWYgaW5pdGlhbF9yZXY6CisgICAgICAgICAgICAgICAgZi53cml0ZSgnXG4jIGluaXRpYWxfcmV2OiAlc1xuJyAlIGluaXRpYWxfcmV2KQorICAgICAgICAgICAgICAgIGZvciBjb21taXQgaW4gY29tbWl0czoKKyAgICAgICAgICAgICAgICAgICAgZi53cml0ZSgnIyBjb21taXQ6ICVzXG4nICUgY29tbWl0KQogCi0gICAgX2FkZF9tZDUoY29uZmlnLCBwbiwgYXBwZW5kZmlsZSkKKyAgICAgICAgX2FkZF9tZDUoY29uZmlnLCBwbiwgYXBwZW5kZmlsZSkKIAotICAgIGxvZ2dlci5pbmZvKCdSZWNpcGUgJXMgbm93IHNldCB1cCB0byBidWlsZCBmcm9tICVzJyAlIChwbiwgc3JjdHJlZSkpCisgICAgICAgIGxvZ2dlci5pbmZvKCdSZWNpcGUgJXMgbm93IHNldCB1cCB0byBidWlsZCBmcm9tICVzJyAlIChwbiwgc3JjdHJlZSkpCiAKLSAgICB0aW5mb2lsLnNodXRkb3duKCkKKyAgICBmaW5hbGx5OgorICAgICAgICB0aW5mb2lsLnNodXRkb3duKCkKIAogICAgIHJldHVybiAwCiAKLWRlZiBfZ2V0X3BhdGNoc2V0X3JldnMoYXJncywgc3JjdHJlZSwgcmVjaXBlX3BhdGgpOgorZGVmIF9nZXRfcGF0Y2hzZXRfcmV2cyhzcmN0cmVlLCByZWNpcGVfcGF0aCwgaW5pdGlhbF9yZXY9Tm9uZSk6CiAgICAgIiIiR2V0IGluaXRpYWwgYW5kIHVwZGF0ZSByZXYgb2YgYSByZWNpcGUuIFRoZXNlIGFyZSB0aGUgc3RhcnQgcG9pbnQgb2YgdGhlCiAgICAgd2hvbGUgcGF0Y2hzZXQgYW5kIHN0YXJ0IHBvaW50IGZvciB0aGUgcGF0Y2hlcyB0byBiZSByZS1nZW5lcmF0ZWQvdXBkYXRlZC4KICAgICAiIiIKICAgICBpbXBvcnQgYmIKIAotICAgIGlmIGFyZ3MuaW5pdGlhbF9yZXY6Ci0gICAgICAgIHJldHVybiBhcmdzLmluaXRpYWxfcmV2LCBhcmdzLmluaXRpYWxfcmV2Ci0KLSAgICAjIFBhcnNlIGluaXRpYWwgcmV2IGZyb20gcmVjaXBlCisgICAgIyBQYXJzZSBpbml0aWFsIHJldiBmcm9tIHJlY2lwZSBpZiBub3Qgc3BlY2lmaWVkCiAgICAgY29tbWl0cyA9IFtdCi0gICAgaW5pdGlhbF9yZXYgPSBOb25lCiAgICAgd2l0aCBvcGVuKHJlY2lwZV9wYXRoLCAncicpIGFzIGY6CiAgICAgICAgIGZvciBsaW5lIGluIGY6CiAgICAgICAgICAgICBpZiBsaW5lLnN0YXJ0c3dpdGgoJyMgaW5pdGlhbF9yZXY6Jyk6Ci0gICAgICAgICAgICAgICAgaW5pdGlhbF9yZXYgPSBsaW5lLnNwbGl0KCc6JylbLTFdLnN0cmlwKCkKKyAgICAgICAgICAgICAgICBpZiBub3QgaW5pdGlhbF9yZXY6CisgICAgICAgICAgICAgICAgICAgIGluaXRpYWxfcmV2ID0gbGluZS5zcGxpdCgnOicpWy0xXS5zdHJpcCgpCiAgICAgICAgICAgICBlbGlmIGxpbmUuc3RhcnRzd2l0aCgnIyBjb21taXQ6Jyk6CiAgICAgICAgICAgICAgICAgY29tbWl0cy5hcHBlbmQobGluZS5zcGxpdCgnOicpWy0xXS5zdHJpcCgpKQogCkBAIC04MzUsNyArODc0LDcgQEAKICAgICAgICAgc3Rkb3V0LCBfID0gYmIucHJvY2Vzcy5ydW4oJ2dpdCByZXYtbGlzdCAtLXJldmVyc2UgJXMuLkhFQUQnICUKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5pdGlhbF9yZXYsIGN3ZD1zcmN0cmVlKQogICAgICAgICBuZXdjb21taXRzID0gc3Rkb3V0LnNwbGl0KCkKLSAgICAgICAgZm9yIGkgaW4geHJhbmdlKG1pbihsZW4oY29tbWl0cyksIGxlbihuZXdjb21taXRzKSkpOgorICAgICAgICBmb3IgaSBpbiByYW5nZShtaW4obGVuKGNvbW1pdHMpLCBsZW4obmV3Y29tbWl0cykpKToKICAgICAgICAgICAgIGlmIG5ld2NvbW1pdHNbaV0gPT0gY29tbWl0c1tpXToKICAgICAgICAgICAgICAgICB1cGRhdGVfcmV2ID0gY29tbWl0c1tpXQogCkBAIC04NjEsNyArOTAwLDcgQEAKICAgICBlbnRyaWVzID0gW10KICAgICBmb3IgZm5hbWUgaW4gZmlsZWxpc3Q6CiAgICAgICAgIGJhc2VuYW1lID0gb3MucGF0aC5iYXNlbmFtZShmbmFtZSkKLSAgICAgICAgZm9yIGkgaW4geHJhbmdlKGxlbihzcmN1cmkpKToKKyAgICAgICAgZm9yIGkgaW4gcmFuZ2UobGVuKHNyY3VyaSkpOgogICAgICAgICAgICAgaWYgKHNyY3VyaVtpXS5zdGFydHN3aXRoKCdmaWxlOi8vJykgYW5kCiAgICAgICAgICAgICAgICAgICAgIG9zLnBhdGguYmFzZW5hbWUoc3JjdXJpW2ldLnNwbGl0KCc7JylbMF0pID09IGJhc2VuYW1lKToKICAgICAgICAgICAgICAgICBlbnRyaWVzLmFwcGVuZChzcmN1cmlbaV0pCkBAIC04NzAsMTAgKzkwOSwxMCBAQAogICAgICAgICAgICAgICAgIGJyZWFrCiAgICAgcmV0dXJuIGVudHJpZXMsIHJlbWFpbmluZwogCi1kZWYgX3JlbW92ZV9zb3VyY2VfZmlsZXMoYXJncywgZmlsZXMsIGRlc3RwYXRoKToKK2RlZiBfcmVtb3ZlX3NvdXJjZV9maWxlcyhhcHBlbmQsIGZpbGVzLCBkZXN0cGF0aCk6CiAgICAgIiIiVW5saW5rIGV4aXN0aW5nIHBhdGNoIGZpbGVzIiIiCiAgICAgZm9yIHBhdGggaW4gZmlsZXM6Ci0gICAgICAgIGlmIGFyZ3MuYXBwZW5kOgorICAgICAgICBpZiBhcHBlbmQ6CiAgICAgICAgICAgICBpZiBub3QgZGVzdHBhdGg6CiAgICAgICAgICAgICAgICAgcmFpc2UgRXhjZXB0aW9uKCdkZXN0cGF0aCBzaG91bGQgYmUgc2V0IGhlcmUnKQogICAgICAgICAgICAgcGF0aCA9IG9zLnBhdGguam9pbihkZXN0cGF0aCwgb3MucGF0aC5iYXNlbmFtZShwYXRoKSkKQEAgLTk5Niw3ICsxMDM1LDcgQEAKICAgICAgICAgYmIucHJvY2Vzcy5ydW4oWydnaXQnLCAnY2hlY2tvdXQnLCB0cmVlLCAnLS0nLCAnLiddLCBjd2Q9c3JjdHJlZSwKICAgICAgICAgICAgICAgICAgICAgICAgIGVudj1kaWN0KG9zLmVudmlyb24sIEdJVF9XT1JLX1RSRUU9ZGVzdGRpciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdJVF9JTkRFWF9GSUxFPXRtcF9pbmRleCkpCi0gICAgICAgIG5ld19zZXQgPSBfZ2l0X2xzX3RyZWUoc3JjdHJlZSwgdHJlZSwgVHJ1ZSkua2V5cygpCisgICAgICAgIG5ld19zZXQgPSBsaXN0KF9naXRfbHNfdHJlZShzcmN0cmVlLCB0cmVlLCBUcnVlKS5rZXlzKCkpCiAgICAgZWxpZiBvcy5wYXRoLmlzZGlyKGxvY2FsX2ZpbGVzX2Rpcik6CiAgICAgICAgICMgSWYgbm90IHRyYWNrZWQgYnkgR2l0LCBqdXN0IGNvcHkgZnJvbSB3b3JraW5nIGNvcHkKICAgICAgICAgbmV3X3NldCA9IF9sc190cmVlKG9zLnBhdGguam9pbihzcmN0cmVlLCAnb2UtbG9jYWwtZmlsZXMnKSkKQEAgLTEwMjYsMTUgKzEwNjUsNDcgQEAKICAgICBpZiBuZXdfc2V0IGlzIG5vdCBOb25lOgogICAgICAgICBmb3IgZm5hbWUgaW4gbmV3X3NldDoKICAgICAgICAgICAgIGlmIGZuYW1lIGluIGV4aXN0aW5nX2ZpbGVzOgotICAgICAgICAgICAgICAgIHVwZGF0ZWRbZm5hbWVdID0gZXhpc3RpbmdfZmlsZXMucG9wKGZuYW1lKQorICAgICAgICAgICAgICAgIG9yaWdwYXRoID0gZXhpc3RpbmdfZmlsZXMucG9wKGZuYW1lKQorICAgICAgICAgICAgICAgIHdvcmtwYXRoID0gb3MucGF0aC5qb2luKGxvY2FsX2ZpbGVzX2RpciwgZm5hbWUpCisgICAgICAgICAgICAgICAgaWYgbm90IGZpbGVjbXAuY21wKG9yaWdwYXRoLCB3b3JrcGF0aCk6CisgICAgICAgICAgICAgICAgICAgIHVwZGF0ZWRbZm5hbWVdID0gb3JpZ3BhdGgKICAgICAgICAgICAgIGVsaWYgZm5hbWUgIT0gJy5naXRpZ25vcmUnOgogICAgICAgICAgICAgICAgIGFkZGVkW2ZuYW1lXSA9IE5vbmUKIAorICAgICAgICB3b3JrZGlyID0gcmQuZ2V0VmFyKCdXT1JLRElSJywgVHJ1ZSkKKyAgICAgICAgcyA9IHJkLmdldFZhcignUycsIFRydWUpCisgICAgICAgIGlmIG5vdCBzLmVuZHN3aXRoKG9zLnNlcCk6CisgICAgICAgICAgICBzICs9IG9zLnNlcAorCisgICAgICAgIGlmIHdvcmtkaXIgIT0gczoKKyAgICAgICAgICAgICMgSGFuZGxlIGZpbGVzIHdoZXJlIHN1YmRpcj0gd2FzIHNwZWNpZmllZAorICAgICAgICAgICAgZm9yIGZuYW1lIGluIGxpc3QoZXhpc3RpbmdfZmlsZXMua2V5cygpKToKKyAgICAgICAgICAgICAgICAjIEZJWE1FIGhhbmRsZSBib3RoIHN1YmRpciBzdGFydGluZyB3aXRoIEJQIGFuZCBub3Q/CisgICAgICAgICAgICAgICAgZndvcmtwYXRoID0gb3MucGF0aC5qb2luKHdvcmtkaXIsIGZuYW1lKQorICAgICAgICAgICAgICAgIGlmIGZ3b3JrcGF0aC5zdGFydHN3aXRoKHMpOgorICAgICAgICAgICAgICAgICAgICBmcGF0aCA9IG9zLnBhdGguam9pbihzcmN0cmVlLCBvcy5wYXRoLnJlbHBhdGgoZndvcmtwYXRoLCBzKSkKKyAgICAgICAgICAgICAgICAgICAgaWYgb3MucGF0aC5leGlzdHMoZnBhdGgpOgorICAgICAgICAgICAgICAgICAgICAgICAgb3JpZ3BhdGggPSBleGlzdGluZ19maWxlcy5wb3AoZm5hbWUpCisgICAgICAgICAgICAgICAgICAgICAgICBpZiBub3QgZmlsZWNtcC5jbXAob3JpZ3BhdGgsIGZwYXRoKToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB1cGRhdGVkW2ZwYXRoXSA9IG9yaWdwYXRoCisKICAgICAgICAgcmVtb3ZlZCA9IGV4aXN0aW5nX2ZpbGVzCiAgICAgcmV0dXJuICh1cGRhdGVkLCBhZGRlZCwgcmVtb3ZlZCkKIAogCi1kZWYgX3VwZGF0ZV9yZWNpcGVfc3JjcmV2KGFyZ3MsIHNyY3RyZWUsIHJkLCBjb25maWdfZGF0YSk6CitkZWYgX2RldGVybWluZV9maWxlc19kaXIocmQpOgorICAgICIiIkRldGVybWluZSB0aGUgYXBwcm9wcmlhdGUgZmlsZXMgZGlyZWN0b3J5IGZvciBhIHJlY2lwZSIiIgorICAgIHJlY2lwZWRpciA9IHJkLmdldFZhcignRklMRV9ESVJOQU1FJywgVHJ1ZSkKKyAgICBmb3IgZW50cnkgaW4gcmQuZ2V0VmFyKCdGSUxFU1BBVEgnLCBUcnVlKS5zcGxpdCgnOicpOgorICAgICAgICByZWxwdGggPSBvcy5wYXRoLnJlbHBhdGgoZW50cnksIHJlY2lwZWRpcikKKyAgICAgICAgaWYgbm90IG9zLnNlcCBpbiByZWxwdGg6CisgICAgICAgICAgICAjIE9uZSAob3IgemVybykgbGV2ZWxzIGJlbG93IG9ubHksIHNvIHdlIGRvbid0IHB1dCBhbnl0aGluZyBpbiBtYWNoaW5lLXNwZWNpZmljIGRpcmVjdG9yaWVzCisgICAgICAgICAgICBpZiBvcy5wYXRoLmlzZGlyKGVudHJ5KToKKyAgICAgICAgICAgICAgICByZXR1cm4gZW50cnkKKyAgICByZXR1cm4gb3MucGF0aC5qb2luKHJlY2lwZWRpciwgcmQuZ2V0VmFyKCdCUE4nLCBUcnVlKSkKKworCitkZWYgX3VwZGF0ZV9yZWNpcGVfc3JjcmV2KHNyY3RyZWUsIHJkLCBhcHBlbmRsYXllcmRpciwgd2lsZGNhcmRfdmVyc2lvbiwgbm9fcmVtb3ZlKToKICAgICAiIiJJbXBsZW1lbnQgdGhlICdzcmNyZXYnIG1vZGUgb2YgdXBkYXRlLXJlY2lwZSIiIgogICAgIGltcG9ydCBiYgogICAgIGltcG9ydCBvZS5yZWNpcGV1dGlscwpAQCAtMTA2Myw3ICsxMTM0LDcgQEAKICAgICB0cnk6CiAgICAgICAgIGxvY2FsX2ZpbGVzX2RpciA9IHRlbXBmaWxlLm1rZHRlbXAoZGlyPXRlbXBkaXIpCiAgICAgICAgIHVwZF9mLCBuZXdfZiwgZGVsX2YgPSBfZXhwb3J0X2xvY2FsX2ZpbGVzKHNyY3RyZWUsIHJkLCBsb2NhbF9maWxlc19kaXIpCi0gICAgICAgIGlmIG5vdCBhcmdzLm5vX3JlbW92ZToKKyAgICAgICAgaWYgbm90IG5vX3JlbW92ZToKICAgICAgICAgICAgICMgRmluZCBsaXN0IG9mIGV4aXN0aW5nIHBhdGNoZXMgaW4gcmVjaXBlIGZpbGUKICAgICAgICAgICAgIHBhdGNoZXNfZGlyID0gdGVtcGZpbGUubWtkdGVtcChkaXI9dGVtcGRpcikKICAgICAgICAgICAgIG9sZF9zcmNyZXYgPSAocmQuZ2V0VmFyKCdTUkNSRVYnLCBGYWxzZSkgb3IgJycpCkBAIC0xMDcxLDI5ICsxMTQyLDMzIEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhdGNoZXNfZGlyKQogCiAgICAgICAgICAgICAjIFJlbW92ZSBkZWxldGVkIGxvY2FsIGZpbGVzIGFuZCAib3ZlcmxhcHBpbmciIHBhdGNoZXMKLSAgICAgICAgICAgIHJlbW92ZV9maWxlcyA9IGRlbF9mLnZhbHVlcygpICsgdXBkX3AudmFsdWVzKCkKKyAgICAgICAgICAgIHJlbW92ZV9maWxlcyA9IGxpc3QoZGVsX2YudmFsdWVzKCkpICsgbGlzdCh1cGRfcC52YWx1ZXMoKSkKICAgICAgICAgICAgIGlmIHJlbW92ZV9maWxlczoKICAgICAgICAgICAgICAgICByZW1vdmVkZW50cmllcyA9IF9yZW1vdmVfZmlsZV9lbnRyaWVzKHNyY3VyaSwgcmVtb3ZlX2ZpbGVzKVswXQogICAgICAgICAgICAgICAgIHVwZGF0ZV9zcmN1cmkgPSBUcnVlCiAKLSAgICAgICAgaWYgYXJncy5hcHBlbmQ6CisgICAgICAgIGlmIGFwcGVuZGxheWVyZGlyOgogICAgICAgICAgICAgZmlsZXMgPSBkaWN0KChvcy5wYXRoLmpvaW4obG9jYWxfZmlsZXNfZGlyLCBrZXkpLCB2YWwpIGZvcgotICAgICAgICAgICAgICAgICAgICAgICAgICBrZXksIHZhbCBpbiB1cGRfZi5pdGVtcygpICsgbmV3X2YuaXRlbXMoKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAga2V5LCB2YWwgaW4gbGlzdCh1cGRfZi5pdGVtcygpKSArIGxpc3QobmV3X2YuaXRlbXMoKSkpCiAgICAgICAgICAgICByZW1vdmV2YWx1ZXMgPSB7fQogICAgICAgICAgICAgaWYgdXBkYXRlX3NyY3VyaToKICAgICAgICAgICAgICAgICByZW1vdmV2YWx1ZXMgID0geydTUkNfVVJJJzogcmVtb3ZlZGVudHJpZXN9CiAgICAgICAgICAgICAgICAgcGF0Y2hmaWVsZHNbJ1NSQ19VUkknXSA9ICdcXFxuICAgICcuam9pbihzcmN1cmkpCiAgICAgICAgICAgICBfLCBkZXN0cGF0aCA9IG9lLnJlY2lwZXV0aWxzLmJiYXBwZW5kX3JlY2lwZSgKLSAgICAgICAgICAgICAgICAgICAgcmQsIGFyZ3MuYXBwZW5kLCBmaWxlcywgd2lsZGNhcmR2ZXI9YXJncy53aWxkY2FyZF92ZXJzaW9uLAorICAgICAgICAgICAgICAgICAgICByZCwgYXBwZW5kbGF5ZXJkaXIsIGZpbGVzLCB3aWxkY2FyZHZlcj13aWxkY2FyZF92ZXJzaW9uLAogICAgICAgICAgICAgICAgICAgICBleHRyYWxpbmVzPXBhdGNoZmllbGRzLCByZW1vdmV2YWx1ZXM9cmVtb3ZldmFsdWVzKQogICAgICAgICBlbHNlOgotICAgICAgICAgICAgZmlsZXNfZGlyID0gb3MucGF0aC5qb2luKG9zLnBhdGguZGlybmFtZShyZWNpcGVmaWxlKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZC5nZXRWYXIoJ0JQTicsIFRydWUpKQotICAgICAgICAgICAgZm9yIGJhc2VwYXRoLCBwYXRoIGluIHVwZF9mLml0ZXJpdGVtcygpOgorICAgICAgICAgICAgZmlsZXNfZGlyID0gX2RldGVybWluZV9maWxlc19kaXIocmQpCisgICAgICAgICAgICBmb3IgYmFzZXBhdGgsIHBhdGggaW4gdXBkX2YuaXRlbXMoKToKICAgICAgICAgICAgICAgICBsb2dnZXIuaW5mbygnVXBkYXRpbmcgZmlsZSAlcycgJSBiYXNlcGF0aCkKLSAgICAgICAgICAgICAgICBfbW92ZV9maWxlKG9zLnBhdGguam9pbihsb2NhbF9maWxlc19kaXIsIGJhc2VwYXRoKSwgcGF0aCkKKyAgICAgICAgICAgICAgICBpZiBvcy5wYXRoLmlzYWJzKGJhc2VwYXRoKToKKyAgICAgICAgICAgICAgICAgICAgIyBPcmlnaW5hbCBmaWxlIChwcm9iYWJseSB3aXRoIHN1YmRpciBwb2ludGluZyBpbnNpZGUgc291cmNlIHRyZWUpCisgICAgICAgICAgICAgICAgICAgICMgc28gd2UgZG8gbm90IHdhbnQgdG8gbW92ZSBpdCwganVzdCBjb3B5CisgICAgICAgICAgICAgICAgICAgIF9jb3B5X2ZpbGUoYmFzZXBhdGgsIHBhdGgpCisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgX21vdmVfZmlsZShvcy5wYXRoLmpvaW4obG9jYWxfZmlsZXNfZGlyLCBiYXNlcGF0aCksIHBhdGgpCiAgICAgICAgICAgICAgICAgdXBkYXRlX3NyY3VyaT0gVHJ1ZQotICAgICAgICAgICAgZm9yIGJhc2VwYXRoLCBwYXRoIGluIG5ld19mLml0ZXJpdGVtcygpOgorICAgICAgICAgICAgZm9yIGJhc2VwYXRoLCBwYXRoIGluIG5ld19mLml0ZW1zKCk6CiAgICAgICAgICAgICAgICAgbG9nZ2VyLmluZm8oJ0FkZGluZyBuZXcgZmlsZSAlcycgJSBiYXNlcGF0aCkKICAgICAgICAgICAgICAgICBfbW92ZV9maWxlKG9zLnBhdGguam9pbihsb2NhbF9maWxlc19kaXIsIGJhc2VwYXRoKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9zLnBhdGguam9pbihmaWxlc19kaXIsIGJhc2VwYXRoKSkKQEAgLTExMDksMjEgKzExODQsMjEgQEAKICAgICAgICAgICAgICAgICAgICAgJ3BvaW50IHRvIGEgZ2l0IHJlcG9zaXRvcnkgd2hlcmUgeW91IGhhdmUgcHVzaGVkIHlvdXIgJwogICAgICAgICAgICAgICAgICAgICAnY2hhbmdlcycpCiAKLSAgICBfcmVtb3ZlX3NvdXJjZV9maWxlcyhhcmdzLCByZW1vdmVfZmlsZXMsIGRlc3RwYXRoKQorICAgIF9yZW1vdmVfc291cmNlX2ZpbGVzKGFwcGVuZGxheWVyZGlyLCByZW1vdmVfZmlsZXMsIGRlc3RwYXRoKQogICAgIHJldHVybiBUcnVlCiAKLWRlZiBfdXBkYXRlX3JlY2lwZV9wYXRjaChhcmdzLCBjb25maWcsIHdvcmtzcGFjZSwgc3JjdHJlZSwgcmQsIGNvbmZpZ19kYXRhKToKK2RlZiBfdXBkYXRlX3JlY2lwZV9wYXRjaChyZWNpcGVuYW1lLCB3b3Jrc3BhY2UsIHNyY3RyZWUsIHJkLCBhcHBlbmRsYXllcmRpciwgd2lsZGNhcmRfdmVyc2lvbiwgbm9fcmVtb3ZlLCBpbml0aWFsX3Jldik6CiAgICAgIiIiSW1wbGVtZW50IHRoZSAncGF0Y2gnIG1vZGUgb2YgdXBkYXRlLXJlY2lwZSIiIgogICAgIGltcG9ydCBiYgogICAgIGltcG9ydCBvZS5yZWNpcGV1dGlscwogCiAgICAgcmVjaXBlZmlsZSA9IHJkLmdldFZhcignRklMRScsIFRydWUpCi0gICAgYXBwZW5kID0gd29ya3NwYWNlW2FyZ3MucmVjaXBlbmFtZV1bJ2JiYXBwZW5kJ10KKyAgICBhcHBlbmQgPSB3b3Jrc3BhY2VbcmVjaXBlbmFtZV1bJ2JiYXBwZW5kJ10KICAgICBpZiBub3Qgb3MucGF0aC5leGlzdHMoYXBwZW5kKToKICAgICAgICAgcmFpc2UgRGV2dG9vbEVycm9yKCd1bmFibGUgdG8gZmluZCB3b3Jrc3BhY2UgYmJhcHBlbmQgZm9yIHJlY2lwZSAlcycgJQotICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJncy5yZWNpcGVuYW1lKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVjaXBlbmFtZSkKIAotICAgIGluaXRpYWxfcmV2LCB1cGRhdGVfcmV2LCBjaGFuZ2VkX3JldnMgPSBfZ2V0X3BhdGNoc2V0X3JldnMoYXJncywgc3JjdHJlZSwgYXBwZW5kKQorICAgIGluaXRpYWxfcmV2LCB1cGRhdGVfcmV2LCBjaGFuZ2VkX3JldnMgPSBfZ2V0X3BhdGNoc2V0X3JldnMoc3JjdHJlZSwgYXBwZW5kLCBpbml0aWFsX3JldikKICAgICBpZiBub3QgaW5pdGlhbF9yZXY6CiAgICAgICAgIHJhaXNlIERldnRvb2xFcnJvcignVW5hYmxlIHRvIGZpbmQgaW5pdGlhbCByZXZpc2lvbiAtIHBsZWFzZSBzcGVjaWZ5ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICdpdCB3aXRoIC0taW5pdGlhbC1yZXYnKQpAQCAtMTEzNCwxMyArMTIwOSwxMyBAQAogICAgICAgICB1cGRfZiwgbmV3X2YsIGRlbF9mID0gX2V4cG9ydF9sb2NhbF9maWxlcyhzcmN0cmVlLCByZCwgbG9jYWxfZmlsZXNfZGlyKQogCiAgICAgICAgIHJlbW92ZV9maWxlcyA9IFtdCi0gICAgICAgIGlmIG5vdCBhcmdzLm5vX3JlbW92ZToKKyAgICAgICAgaWYgbm90IG5vX3JlbW92ZToKICAgICAgICAgICAgICMgR2V0IGFsbCBwYXRjaGVzIGZyb20gc291cmNlIHRyZWUgYW5kIGNoZWNrIGlmIGFueSBzaG91bGQgYmUgcmVtb3ZlZAogICAgICAgICAgICAgYWxsX3BhdGNoZXNfZGlyID0gdGVtcGZpbGUubWtkdGVtcChkaXI9dGVtcGRpcikKICAgICAgICAgICAgIHVwZF9wLCBuZXdfcCwgZGVsX3AgPSBfZXhwb3J0X3BhdGNoZXMoc3JjdHJlZSwgcmQsIGluaXRpYWxfcmV2LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbGxfcGF0Y2hlc19kaXIpCiAgICAgICAgICAgICAjIFJlbW92ZSBkZWxldGVkIGxvY2FsIGZpbGVzIGFuZCAgcGF0Y2hlcwotICAgICAgICAgICAgcmVtb3ZlX2ZpbGVzID0gZGVsX2YudmFsdWVzKCkgKyBkZWxfcC52YWx1ZXMoKQorICAgICAgICAgICAgcmVtb3ZlX2ZpbGVzID0gbGlzdChkZWxfZi52YWx1ZXMoKSkgKyBsaXN0KGRlbF9wLnZhbHVlcygpKQogCiAgICAgICAgICMgR2V0IHVwZGF0ZWQgcGF0Y2hlcyBmcm9tIHNvdXJjZSB0cmVlCiAgICAgICAgIHBhdGNoZXNfZGlyID0gdGVtcGZpbGUubWtkdGVtcChkaXI9dGVtcGRpcikKQEAgLTExNTAsMTEgKzEyMjUsMTEgQEAKICAgICAgICAgdXBkYXRlcmVjaXBlID0gRmFsc2UKICAgICAgICAgZGVzdHBhdGggPSBOb25lCiAgICAgICAgIHNyY3VyaSA9IChyZC5nZXRWYXIoJ1NSQ19VUkknLCBGYWxzZSkgb3IgJycpLnNwbGl0KCkKLSAgICAgICAgaWYgYXJncy5hcHBlbmQ6CisgICAgICAgIGlmIGFwcGVuZGxheWVyZGlyOgogICAgICAgICAgICAgZmlsZXMgPSBkaWN0KChvcy5wYXRoLmpvaW4obG9jYWxfZmlsZXNfZGlyLCBrZXkpLCB2YWwpIGZvcgotICAgICAgICAgICAgICAgICAgICAgICAgIGtleSwgdmFsIGluIHVwZF9mLml0ZW1zKCkgKyBuZXdfZi5pdGVtcygpKQorICAgICAgICAgICAgICAgICAgICAgICAgIGtleSwgdmFsIGluIGxpc3QodXBkX2YuaXRlbXMoKSkgKyBsaXN0KG5ld19mLml0ZW1zKCkpKQogICAgICAgICAgICAgZmlsZXMudXBkYXRlKGRpY3QoKG9zLnBhdGguam9pbihwYXRjaGVzX2Rpciwga2V5KSwgdmFsKSBmb3IKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleSwgdmFsIGluIHVwZF9wLml0ZW1zKCkgKyBuZXdfcC5pdGVtcygpKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleSwgdmFsIGluIGxpc3QodXBkX3AuaXRlbXMoKSkgKyBsaXN0KG5ld19wLml0ZW1zKCkpKSkKICAgICAgICAgICAgIGlmIGZpbGVzIG9yIHJlbW92ZV9maWxlczoKICAgICAgICAgICAgICAgICByZW1vdmV2YWx1ZXMgPSBOb25lCiAgICAgICAgICAgICAgICAgaWYgcmVtb3ZlX2ZpbGVzOgpAQCAtMTE2NSwxNyArMTI0MCwyMyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW0gaW4gcmVtYWluaW5nXQogICAgICAgICAgICAgICAgICAgICAgICAgcmVtb3ZldmFsdWVzID0geydTUkNfVVJJJzogcmVtb3ZlZGVudHJpZXMgKyByZW1haW5pbmd9CiAgICAgICAgICAgICAgICAgXywgZGVzdHBhdGggPSBvZS5yZWNpcGV1dGlscy5iYmFwcGVuZF9yZWNpcGUoCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJkLCBhcmdzLmFwcGVuZCwgZmlsZXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJkLCBhcHBlbmRsYXllcmRpciwgZmlsZXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpbGRjYXJkdmVyPXdpbGRjYXJkX3ZlcnNpb24sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlbW92ZXZhbHVlcz1yZW1vdmV2YWx1ZXMpCiAgICAgICAgICAgICBlbHNlOgogICAgICAgICAgICAgICAgIGxvZ2dlci5pbmZvKCdObyBwYXRjaGVzIG9yIGxvY2FsIHNvdXJjZSBmaWxlcyBuZWVkZWQgdXBkYXRpbmcnKQogICAgICAgICBlbHNlOgogICAgICAgICAgICAgIyBVcGRhdGUgZXhpc3RpbmcgZmlsZXMKLSAgICAgICAgICAgIGZvciBiYXNlcGF0aCwgcGF0aCBpbiB1cGRfZi5pdGVyaXRlbXMoKToKKyAgICAgICAgICAgIGZvciBiYXNlcGF0aCwgcGF0aCBpbiB1cGRfZi5pdGVtcygpOgogICAgICAgICAgICAgICAgIGxvZ2dlci5pbmZvKCdVcGRhdGluZyBmaWxlICVzJyAlIGJhc2VwYXRoKQotICAgICAgICAgICAgICAgIF9tb3ZlX2ZpbGUob3MucGF0aC5qb2luKGxvY2FsX2ZpbGVzX2RpciwgYmFzZXBhdGgpLCBwYXRoKQorICAgICAgICAgICAgICAgIGlmIG9zLnBhdGguaXNhYnMoYmFzZXBhdGgpOgorICAgICAgICAgICAgICAgICAgICAjIE9yaWdpbmFsIGZpbGUgKHByb2JhYmx5IHdpdGggc3ViZGlyIHBvaW50aW5nIGluc2lkZSBzb3VyY2UgdHJlZSkKKyAgICAgICAgICAgICAgICAgICAgIyBzbyB3ZSBkbyBub3Qgd2FudCB0byBtb3ZlIGl0LCBqdXN0IGNvcHkKKyAgICAgICAgICAgICAgICAgICAgX2NvcHlfZmlsZShiYXNlcGF0aCwgcGF0aCkKKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICBfbW92ZV9maWxlKG9zLnBhdGguam9pbihsb2NhbF9maWxlc19kaXIsIGJhc2VwYXRoKSwgcGF0aCkKICAgICAgICAgICAgICAgICB1cGRhdGVmaWxlcyA9IFRydWUKLSAgICAgICAgICAgIGZvciBiYXNlcGF0aCwgcGF0aCBpbiB1cGRfcC5pdGVyaXRlbXMoKToKKyAgICAgICAgICAgIGZvciBiYXNlcGF0aCwgcGF0aCBpbiB1cGRfcC5pdGVtcygpOgogICAgICAgICAgICAgICAgIHBhdGNoZm4gPSBvcy5wYXRoLmpvaW4ocGF0Y2hlc19kaXIsIGJhc2VwYXRoKQogICAgICAgICAgICAgICAgIGlmIGNoYW5nZWRfcmV2cyBpcyBub3QgTm9uZToKICAgICAgICAgICAgICAgICAgICAgIyBBdm9pZCB1cGRhdGluZyBwYXRjaGVzIHRoYXQgaGF2ZSBub3QgYWN0dWFsbHkgY2hhbmdlZApAQCAtMTE4OCwxNSArMTI2OSwxNCBAQAogICAgICAgICAgICAgICAgIF9tb3ZlX2ZpbGUocGF0Y2hmbiwgcGF0aCkKICAgICAgICAgICAgICAgICB1cGRhdGVmaWxlcyA9IFRydWUKICAgICAgICAgICAgICMgQWRkIGFueSBuZXcgZmlsZXMKLSAgICAgICAgICAgIGZpbGVzX2RpciA9IG9zLnBhdGguam9pbihvcy5wYXRoLmRpcm5hbWUocmVjaXBlZmlsZSksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmQuZ2V0VmFyKCdCUE4nLCBUcnVlKSkKLSAgICAgICAgICAgIGZvciBiYXNlcGF0aCwgcGF0aCBpbiBuZXdfZi5pdGVyaXRlbXMoKToKKyAgICAgICAgICAgIGZpbGVzX2RpciA9IF9kZXRlcm1pbmVfZmlsZXNfZGlyKHJkKQorICAgICAgICAgICAgZm9yIGJhc2VwYXRoLCBwYXRoIGluIG5ld19mLml0ZW1zKCk6CiAgICAgICAgICAgICAgICAgbG9nZ2VyLmluZm8oJ0FkZGluZyBuZXcgZmlsZSAlcycgJSBiYXNlcGF0aCkKICAgICAgICAgICAgICAgICBfbW92ZV9maWxlKG9zLnBhdGguam9pbihsb2NhbF9maWxlc19kaXIsIGJhc2VwYXRoKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9zLnBhdGguam9pbihmaWxlc19kaXIsIGJhc2VwYXRoKSkKICAgICAgICAgICAgICAgICBzcmN1cmkuYXBwZW5kKCdmaWxlOi8vJXMnICUgYmFzZXBhdGgpCiAgICAgICAgICAgICAgICAgdXBkYXRlcmVjaXBlID0gVHJ1ZQotICAgICAgICAgICAgZm9yIGJhc2VwYXRoLCBwYXRoIGluIG5ld19wLml0ZXJpdGVtcygpOgorICAgICAgICAgICAgZm9yIGJhc2VwYXRoLCBwYXRoIGluIG5ld19wLml0ZW1zKCk6CiAgICAgICAgICAgICAgICAgbG9nZ2VyLmluZm8oJ0FkZGluZyBuZXcgcGF0Y2ggJXMnICUgYmFzZXBhdGgpCiAgICAgICAgICAgICAgICAgX21vdmVfZmlsZShvcy5wYXRoLmpvaW4ocGF0Y2hlc19kaXIsIGJhc2VwYXRoKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9zLnBhdGguam9pbihmaWxlc19kaXIsIGJhc2VwYXRoKSkKQEAgLTEyMTYsNyArMTI5Niw3IEBACiAgICAgZmluYWxseToKICAgICAgICAgc2h1dGlsLnJtdHJlZSh0ZW1wZGlyKQogCi0gICAgX3JlbW92ZV9zb3VyY2VfZmlsZXMoYXJncywgcmVtb3ZlX2ZpbGVzLCBkZXN0cGF0aCkKKyAgICBfcmVtb3ZlX3NvdXJjZV9maWxlcyhhcHBlbmRsYXllcmRpciwgcmVtb3ZlX2ZpbGVzLCBkZXN0cGF0aCkKICAgICByZXR1cm4gVHJ1ZQogCiBkZWYgX2d1ZXNzX3JlY2lwZV91cGRhdGVfbW9kZShzcmN0cmVlLCByZGF0YSk6CkBAIC0xMjQxLDYgKzEzMjEsMTkgQEAKIAogICAgIHJldHVybiAncGF0Y2gnCiAKK2RlZiBfdXBkYXRlX3JlY2lwZShyZWNpcGVuYW1lLCB3b3Jrc3BhY2UsIHJkLCBtb2RlLCBhcHBlbmRsYXllcmRpciwgd2lsZGNhcmRfdmVyc2lvbiwgbm9fcmVtb3ZlLCBpbml0aWFsX3Jldik6CisgICAgc3JjdHJlZSA9IHdvcmtzcGFjZVtyZWNpcGVuYW1lXVsnc3JjdHJlZSddCisgICAgaWYgbW9kZSA9PSAnYXV0byc6CisgICAgICAgIG1vZGUgPSBfZ3Vlc3NfcmVjaXBlX3VwZGF0ZV9tb2RlKHNyY3RyZWUsIHJkKQorCisgICAgaWYgbW9kZSA9PSAnc3JjcmV2JzoKKyAgICAgICAgdXBkYXRlZCA9IF91cGRhdGVfcmVjaXBlX3NyY3JldihzcmN0cmVlLCByZCwgYXBwZW5kbGF5ZXJkaXIsIHdpbGRjYXJkX3ZlcnNpb24sIG5vX3JlbW92ZSkKKyAgICBlbGlmIG1vZGUgPT0gJ3BhdGNoJzoKKyAgICAgICAgdXBkYXRlZCA9IF91cGRhdGVfcmVjaXBlX3BhdGNoKHJlY2lwZW5hbWUsIHdvcmtzcGFjZSwgc3JjdHJlZSwgcmQsIGFwcGVuZGxheWVyZGlyLCB3aWxkY2FyZF92ZXJzaW9uLCBub19yZW1vdmUsIGluaXRpYWxfcmV2KQorICAgIGVsc2U6CisgICAgICAgIHJhaXNlIERldnRvb2xFcnJvcigndXBkYXRlX3JlY2lwZTogaW52YWxpZCBtb2RlICVzJyAlIG1vZGUpCisgICAgcmV0dXJuIHVwZGF0ZWQKKwogZGVmIHVwZGF0ZV9yZWNpcGUoYXJncywgY29uZmlnLCBiYXNlcGF0aCwgd29ya3NwYWNlKToKICAgICAiIiJFbnRyeSBwb2ludCBmb3IgdGhlIGRldnRvb2wgJ3VwZGF0ZS1yZWNpcGUnIHN1YmNvbW1hbmQiIiIKICAgICBjaGVja193b3Jrc3BhY2VfcmVjaXBlKHdvcmtzcGFjZSwgYXJncy5yZWNpcGVuYW1lKQpAQCAtMTI1NCwyOCArMTM0NywyMCBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdkZXN0aW5hdGlvbiBsYXllciAiJXMiJyAlIGFyZ3MuYXBwZW5kKQogCiAgICAgdGluZm9pbCA9IHNldHVwX3RpbmZvaWwoYmFzZXBhdGg9YmFzZXBhdGgsIHRyYWNraW5nPVRydWUpCisgICAgdHJ5OgogCi0gICAgcmQgPSBwYXJzZV9yZWNpcGUoY29uZmlnLCB0aW5mb2lsLCBhcmdzLnJlY2lwZW5hbWUsIFRydWUpCi0gICAgaWYgbm90IHJkOgotICAgICAgICByZXR1cm4gMQorICAgICAgICByZCA9IHBhcnNlX3JlY2lwZShjb25maWcsIHRpbmZvaWwsIGFyZ3MucmVjaXBlbmFtZSwgVHJ1ZSkKKyAgICAgICAgaWYgbm90IHJkOgorICAgICAgICAgICAgcmV0dXJuIDEKIAotICAgIHNyY3RyZWUgPSB3b3Jrc3BhY2VbYXJncy5yZWNpcGVuYW1lXVsnc3JjdHJlZSddCi0gICAgaWYgYXJncy5tb2RlID09ICdhdXRvJzoKLSAgICAgICAgbW9kZSA9IF9ndWVzc19yZWNpcGVfdXBkYXRlX21vZGUoc3JjdHJlZSwgcmQpCi0gICAgZWxzZToKLSAgICAgICAgbW9kZSA9IGFyZ3MubW9kZQorICAgICAgICB1cGRhdGVkID0gX3VwZGF0ZV9yZWNpcGUoYXJncy5yZWNpcGVuYW1lLCB3b3Jrc3BhY2UsIHJkLCBhcmdzLm1vZGUsIGFyZ3MuYXBwZW5kLCBhcmdzLndpbGRjYXJkX3ZlcnNpb24sIGFyZ3Mubm9fcmVtb3ZlLCBhcmdzLmluaXRpYWxfcmV2KQogCi0gICAgaWYgbW9kZSA9PSAnc3JjcmV2JzoKLSAgICAgICAgdXBkYXRlZCA9IF91cGRhdGVfcmVjaXBlX3NyY3JldihhcmdzLCBzcmN0cmVlLCByZCwgdGluZm9pbC5jb25maWdfZGF0YSkKLSAgICBlbGlmIG1vZGUgPT0gJ3BhdGNoJzoKLSAgICAgICAgdXBkYXRlZCA9IF91cGRhdGVfcmVjaXBlX3BhdGNoKGFyZ3MsIGNvbmZpZywgd29ya3NwYWNlLCBzcmN0cmVlLCByZCwgdGluZm9pbC5jb25maWdfZGF0YSkKLSAgICBlbHNlOgotICAgICAgICByYWlzZSBEZXZ0b29sRXJyb3IoJ3VwZGF0ZV9yZWNpcGU6IGludmFsaWQgbW9kZSAlcycgJSBtb2RlKQotCi0gICAgaWYgdXBkYXRlZDoKLSAgICAgICAgcmYgPSByZC5nZXRWYXIoJ0ZJTEUnLCBUcnVlKQotICAgICAgICBpZiByZi5zdGFydHN3aXRoKGNvbmZpZy53b3Jrc3BhY2VfcGF0aCk6Ci0gICAgICAgICAgICBsb2dnZXIud2FybignUmVjaXBlIGZpbGUgJXMgaGFzIGJlZW4gdXBkYXRlZCBidXQgaXMgaW5zaWRlIHRoZSB3b3Jrc3BhY2UgLSB5b3Ugd2lsbCBuZWVkIHRvIG1vdmUgaXQgKGFuZCBhbnkgYXNzb2NpYXRlZCBmaWxlcyBuZXh0IHRvIGl0KSBvdXQgdG8gdGhlIGRlc2lyZWQgbGF5ZXIgYmVmb3JlIHVzaW5nICJkZXZ0b29sIHJlc2V0IiBpbiBvcmRlciB0byBrZWVwIGFueSBjaGFuZ2VzJyAlIHJmKQorICAgICAgICBpZiB1cGRhdGVkOgorICAgICAgICAgICAgcmYgPSByZC5nZXRWYXIoJ0ZJTEUnLCBUcnVlKQorICAgICAgICAgICAgaWYgcmYuc3RhcnRzd2l0aChjb25maWcud29ya3NwYWNlX3BhdGgpOgorICAgICAgICAgICAgICAgIGxvZ2dlci53YXJuKCdSZWNpcGUgZmlsZSAlcyBoYXMgYmVlbiB1cGRhdGVkIGJ1dCBpcyBpbnNpZGUgdGhlIHdvcmtzcGFjZSAtIHlvdSB3aWxsIG5lZWQgdG8gbW92ZSBpdCAoYW5kIGFueSBhc3NvY2lhdGVkIGZpbGVzIG5leHQgdG8gaXQpIG91dCB0byB0aGUgZGVzaXJlZCBsYXllciBiZWZvcmUgdXNpbmcgImRldnRvb2wgcmVzZXQiIGluIG9yZGVyIHRvIGtlZXAgYW55IGNoYW5nZXMnICUgcmYpCisgICAgZmluYWxseToKKyAgICAgICAgdGluZm9pbC5zaHV0ZG93bigpCiAKICAgICByZXR1cm4gMAogCkBAIC0xMjgzLDcgKzEzNjgsNyBAQAogZGVmIHN0YXR1cyhhcmdzLCBjb25maWcsIGJhc2VwYXRoLCB3b3Jrc3BhY2UpOgogICAgICIiIkVudHJ5IHBvaW50IGZvciB0aGUgZGV2dG9vbCAnc3RhdHVzJyBzdWJjb21tYW5kIiIiCiAgICAgaWYgd29ya3NwYWNlOgotICAgICAgICBmb3IgcmVjaXBlLCB2YWx1ZSBpbiB3b3Jrc3BhY2UuaXRlcml0ZW1zKCk6CisgICAgICAgIGZvciByZWNpcGUsIHZhbHVlIGluIHdvcmtzcGFjZS5pdGVtcygpOgogICAgICAgICAgICAgcmVjaXBlZmlsZSA9IHZhbHVlWydyZWNpcGVmaWxlJ10KICAgICAgICAgICAgIGlmIHJlY2lwZWZpbGU6CiAgICAgICAgICAgICAgICAgcmVjaXBlc3RyID0gJyAoJXMpJyAlIHJlY2lwZWZpbGUKQEAgLTEyOTUsMjMgKzEzODAsMTAgQEAKICAgICByZXR1cm4gMAogCiAKLWRlZiByZXNldChhcmdzLCBjb25maWcsIGJhc2VwYXRoLCB3b3Jrc3BhY2UpOgotICAgICIiIkVudHJ5IHBvaW50IGZvciB0aGUgZGV2dG9vbCAncmVzZXQnIHN1YmNvbW1hbmQiIiIKLSAgICBpbXBvcnQgYmIKLSAgICBpZiBhcmdzLnJlY2lwZW5hbWU6Ci0gICAgICAgIGlmIGFyZ3MuYWxsOgotICAgICAgICAgICAgcmFpc2UgRGV2dG9vbEVycm9yKCJSZWNpcGUgY2Fubm90IGJlIHNwZWNpZmllZCBpZiAtYS8tLWFsbCBpcyB1c2VkIikKLSAgICAgICAgZWxzZToKLSAgICAgICAgICAgIGNoZWNrX3dvcmtzcGFjZV9yZWNpcGUod29ya3NwYWNlLCBhcmdzLnJlY2lwZW5hbWUsIGNoZWNrc3JjPUZhbHNlKQotICAgIGVsaWYgbm90IGFyZ3MuYWxsOgotICAgICAgICByYWlzZSBEZXZ0b29sRXJyb3IoIlJlY2lwZSBtdXN0IGJlIHNwZWNpZmllZCwgb3Igc3BlY2lmeSAtYS8tLWFsbCB0byAiCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAicmVzZXQgYWxsIHJlY2lwZXMiKQotICAgIGlmIGFyZ3MuYWxsOgotICAgICAgICByZWNpcGVzID0gd29ya3NwYWNlLmtleXMoKQotICAgIGVsc2U6Ci0gICAgICAgIHJlY2lwZXMgPSBbYXJncy5yZWNpcGVuYW1lXQorZGVmIF9yZXNldChyZWNpcGVzLCBub19jbGVhbiwgY29uZmlnLCBiYXNlcGF0aCwgd29ya3NwYWNlKToKKyAgICAiIiJSZXNldCBvbmUgb3IgbW9yZSByZWNpcGVzIiIiCiAKLSAgICBpZiByZWNpcGVzIGFuZCBub3QgYXJncy5ub19jbGVhbjoKKyAgICBpZiByZWNpcGVzIGFuZCBub3Qgbm9fY2xlYW46CiAgICAgICAgIGlmIGxlbihyZWNpcGVzKSA9PSAxOgogICAgICAgICAgICAgbG9nZ2VyLmluZm8oJ0NsZWFuaW5nIHN5c3Jvb3QgZm9yIHJlY2lwZSAlcy4uLicgJSByZWNpcGVzWzBdKQogICAgICAgICBlbHNlOgpAQCAtMTMyMyw3ICsxMzk1LDcgQEAKICAgICAgICAgZm9yIHJlY2lwZSBpbiByZWNpcGVzOgogICAgICAgICAgICAgdGFyZ2V0cy5hcHBlbmQocmVjaXBlKQogICAgICAgICAgICAgcmVjaXBlZmlsZSA9IHdvcmtzcGFjZVtyZWNpcGVdWydyZWNpcGVmaWxlJ10KLSAgICAgICAgICAgIGlmIHJlY2lwZWZpbGU6CisgICAgICAgICAgICBpZiByZWNpcGVmaWxlIGFuZCBvcy5wYXRoLmV4aXN0cyhyZWNpcGVmaWxlKToKICAgICAgICAgICAgICAgICB0YXJnZXRzLmV4dGVuZChnZXRfYmJjbGFzc2V4dGVuZF90YXJnZXRzKHJlY2lwZWZpbGUsIHJlY2lwZSkpCiAgICAgICAgIHRyeToKICAgICAgICAgICAgIGV4ZWNfYnVpbGRfZW52X2NvbW1hbmQoY29uZmlnLmluaXRfcGF0aCwgYmFzZXBhdGgsICdiaXRiYWtlIC1jIGNsZWFuICVzJyAlICcgJy5qb2luKHRhcmdldHMpKQpAQCAtMTM2Myw2ICsxNDM1LDEyNiBAQAogICAgICAgICAgICAgICAgICMgVGhpcyBpcyB1bmxpa2VseSwgYnV0IGlmIGl0J3MgZW1wdHkgd2UgY2FuIGp1c3QgcmVtb3ZlIGl0CiAgICAgICAgICAgICAgICAgb3Mucm1kaXIoc3JjdHJlZSkKIAorCitkZWYgcmVzZXQoYXJncywgY29uZmlnLCBiYXNlcGF0aCwgd29ya3NwYWNlKToKKyAgICAiIiJFbnRyeSBwb2ludCBmb3IgdGhlIGRldnRvb2wgJ3Jlc2V0JyBzdWJjb21tYW5kIiIiCisgICAgaW1wb3J0IGJiCisgICAgaWYgYXJncy5yZWNpcGVuYW1lOgorICAgICAgICBpZiBhcmdzLmFsbDoKKyAgICAgICAgICAgIHJhaXNlIERldnRvb2xFcnJvcigiUmVjaXBlIGNhbm5vdCBiZSBzcGVjaWZpZWQgaWYgLWEvLS1hbGwgaXMgdXNlZCIpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBmb3IgcmVjaXBlIGluIGFyZ3MucmVjaXBlbmFtZToKKyAgICAgICAgICAgICAgICBjaGVja193b3Jrc3BhY2VfcmVjaXBlKHdvcmtzcGFjZSwgcmVjaXBlLCBjaGVja3NyYz1GYWxzZSkKKyAgICBlbGlmIG5vdCBhcmdzLmFsbDoKKyAgICAgICAgcmFpc2UgRGV2dG9vbEVycm9yKCJSZWNpcGUgbXVzdCBiZSBzcGVjaWZpZWQsIG9yIHNwZWNpZnkgLWEvLS1hbGwgdG8gIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgInJlc2V0IGFsbCByZWNpcGVzIikKKyAgICBpZiBhcmdzLmFsbDoKKyAgICAgICAgcmVjaXBlcyA9IGxpc3Qod29ya3NwYWNlLmtleXMoKSkKKyAgICBlbHNlOgorICAgICAgICByZWNpcGVzID0gYXJncy5yZWNpcGVuYW1lCisKKyAgICBfcmVzZXQocmVjaXBlcywgYXJncy5ub19jbGVhbiwgY29uZmlnLCBiYXNlcGF0aCwgd29ya3NwYWNlKQorCisgICAgcmV0dXJuIDAKKworCitkZWYgX2dldF9sYXllcihsYXllcm5hbWUsIGQpOgorICAgICIiIkRldGVybWluZSB0aGUgYmFzZSBsYXllciBwYXRoIGZvciB0aGUgc3BlY2lmaWVkIGxheWVyIG5hbWUvcGF0aCIiIgorICAgIGxheWVyZGlycyA9IGQuZ2V0VmFyKCdCQkxBWUVSUycsIFRydWUpLnNwbGl0KCkKKyAgICBsYXllcnMgPSB7b3MucGF0aC5iYXNlbmFtZShwKTogcCBmb3IgcCBpbiBsYXllcmRpcnN9CisgICAgIyBQcm92aWRlIHNvbWUgc2hvcnRjdXRzCisgICAgaWYgbGF5ZXJuYW1lLmxvd2VyKCkgaW4gWydvZS1jb3JlJywgJ29wZW5lbWJlZGRlZC1jb3JlJ106CisgICAgICAgIGxheWVyZGlyID0gbGF5ZXJzLmdldCgnbWV0YScsIE5vbmUpCisgICAgZWxzZToKKyAgICAgICAgbGF5ZXJkaXIgPSBsYXllcnMuZ2V0KGxheWVybmFtZSwgTm9uZSkKKyAgICBpZiBsYXllcmRpcjoKKyAgICAgICAgbGF5ZXJkaXIgPSBvcy5wYXRoLmFic3BhdGgobGF5ZXJkaXIpCisgICAgcmV0dXJuIGxheWVyZGlyIG9yIGxheWVybmFtZQorCitkZWYgZmluaXNoKGFyZ3MsIGNvbmZpZywgYmFzZXBhdGgsIHdvcmtzcGFjZSk6CisgICAgIiIiRW50cnkgcG9pbnQgZm9yIHRoZSBkZXZ0b29sICdmaW5pc2gnIHN1YmNvbW1hbmQiIiIKKyAgICBpbXBvcnQgYmIKKyAgICBpbXBvcnQgb2UucmVjaXBldXRpbHMKKworICAgIGNoZWNrX3dvcmtzcGFjZV9yZWNpcGUod29ya3NwYWNlLCBhcmdzLnJlY2lwZW5hbWUpCisKKyAgICB0aW5mb2lsID0gc2V0dXBfdGluZm9pbChiYXNlcGF0aD1iYXNlcGF0aCwgdHJhY2tpbmc9VHJ1ZSkKKyAgICB0cnk6CisgICAgICAgIHJkID0gcGFyc2VfcmVjaXBlKGNvbmZpZywgdGluZm9pbCwgYXJncy5yZWNpcGVuYW1lLCBUcnVlKQorICAgICAgICBpZiBub3QgcmQ6CisgICAgICAgICAgICByZXR1cm4gMQorCisgICAgICAgIGRlc3RsYXllcmRpciA9IF9nZXRfbGF5ZXIoYXJncy5kZXN0aW5hdGlvbiwgdGluZm9pbC5jb25maWdfZGF0YSkKKyAgICAgICAgb3JpZ2xheWVyZGlyID0gb2UucmVjaXBldXRpbHMuZmluZF9sYXllcmRpcihyZC5nZXRWYXIoJ0ZJTEUnLCBUcnVlKSkKKworICAgICAgICBpZiBub3Qgb3MucGF0aC5pc2RpcihkZXN0bGF5ZXJkaXIpOgorICAgICAgICAgICAgcmFpc2UgRGV2dG9vbEVycm9yKCdVbmFibGUgdG8gZmluZCBsYXllciBvciBkaXJlY3RvcnkgbWF0Y2hpbmcgIiVzIicgJSBhcmdzLmRlc3RpbmF0aW9uKQorCisgICAgICAgIGlmIG9zLnBhdGguYWJzcGF0aChkZXN0bGF5ZXJkaXIpID09IGNvbmZpZy53b3Jrc3BhY2VfcGF0aDoKKyAgICAgICAgICAgIHJhaXNlIERldnRvb2xFcnJvcignIiVzIiBzcGVjaWZpZXMgdGhlIHdvcmtzcGFjZSBsYXllciAtIHRoYXQgaXMgbm90IGEgdmFsaWQgZGVzdGluYXRpb24nICUgYXJncy5kZXN0aW5hdGlvbikKKworICAgICAgICAjIElmIGl0J3MgYW4gdXBncmFkZSwgZ3JhYiB0aGUgb3JpZ2luYWwgcGF0aAorICAgICAgICBvcmlncGF0aCA9IE5vbmUKKyAgICAgICAgb3JpZ2ZpbGVsaXN0ID0gTm9uZQorICAgICAgICBhcHBlbmQgPSB3b3Jrc3BhY2VbYXJncy5yZWNpcGVuYW1lXVsnYmJhcHBlbmQnXQorICAgICAgICB3aXRoIG9wZW4oYXBwZW5kLCAncicpIGFzIGY6CisgICAgICAgICAgICBmb3IgbGluZSBpbiBmOgorICAgICAgICAgICAgICAgIGlmIGxpbmUuc3RhcnRzd2l0aCgnIyBvcmlnaW5hbF9wYXRoOicpOgorICAgICAgICAgICAgICAgICAgICBvcmlncGF0aCA9IGxpbmUuc3BsaXQoJzonKVsxXS5zdHJpcCgpCisgICAgICAgICAgICAgICAgZWxpZiBsaW5lLnN0YXJ0c3dpdGgoJyMgb3JpZ2luYWxfZmlsZXM6Jyk6CisgICAgICAgICAgICAgICAgICAgIG9yaWdmaWxlbGlzdCA9IGxpbmUuc3BsaXQoJzonKVsxXS5zcGxpdCgpCisKKyAgICAgICAgaWYgb3JpZ2xheWVyZGlyID09IGNvbmZpZy53b3Jrc3BhY2VfcGF0aDoKKyAgICAgICAgICAgICMgUmVjaXBlIGZpbGUgaXRzZWxmIGlzIGluIHdvcmtzcGFjZSwgdXBkYXRlIGl0IHRoZXJlIGZpcnN0CisgICAgICAgICAgICBhcHBlbmRsYXllcmRpciA9IE5vbmUKKyAgICAgICAgICAgIG9yaWdyZWxwYXRoID0gTm9uZQorICAgICAgICAgICAgaWYgb3JpZ3BhdGg6CisgICAgICAgICAgICAgICAgb3JpZ2xheWVycGF0aCA9IG9lLnJlY2lwZXV0aWxzLmZpbmRfbGF5ZXJkaXIob3JpZ3BhdGgpCisgICAgICAgICAgICAgICAgaWYgb3JpZ2xheWVycGF0aDoKKyAgICAgICAgICAgICAgICAgICAgb3JpZ3JlbHBhdGggPSBvcy5wYXRoLnJlbHBhdGgob3JpZ3BhdGgsIG9yaWdsYXllcnBhdGgpCisgICAgICAgICAgICBkZXN0cGF0aCA9IG9lLnJlY2lwZXV0aWxzLmdldF9iYmZpbGVfcGF0aChyZCwgZGVzdGxheWVyZGlyLCBvcmlncmVscGF0aCkKKyAgICAgICAgICAgIGlmIG5vdCBkZXN0cGF0aDoKKyAgICAgICAgICAgICAgICByYWlzZSBEZXZ0b29sRXJyb3IoIlVuYWJsZSB0byBkZXRlcm1pbmUgZGVzdGluYXRpb24gbGF5ZXIgcGF0aCAtIGNoZWNrIHRoYXQgJXMgc3BlY2lmaWVzIGFuIGFjdHVhbCBsYXllciBhbmQgJXMvY29uZi9sYXllci5jb25mIHNwZWNpZmllcyBCQkZJTEVTLiBZb3UgbWF5IGFsc28gbmVlZCB0byBzcGVjaWZ5IGEgbW9yZSBjb21wbGV0ZSBwYXRoLiIgJSAoYXJncy5kZXN0aW5hdGlvbiwgZGVzdGxheWVyZGlyKSkKKyAgICAgICAgZWxpZiBkZXN0bGF5ZXJkaXIgPT0gb3JpZ2xheWVyZGlyOgorICAgICAgICAgICAgIyBTYW1lIGxheWVyLCB1cGRhdGUgdGhlIG9yaWdpbmFsIHJlY2lwZQorICAgICAgICAgICAgYXBwZW5kbGF5ZXJkaXIgPSBOb25lCisgICAgICAgICAgICBkZXN0cGF0aCA9IE5vbmUKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgICMgQ3JlYXRlL3VwZGF0ZSBhIGJiYXBwZW5kIGluIHRoZSBzcGVjaWZpZWQgbGF5ZXIKKyAgICAgICAgICAgIGFwcGVuZGxheWVyZGlyID0gZGVzdGxheWVyZGlyCisgICAgICAgICAgICBkZXN0cGF0aCA9IE5vbmUKKworICAgICAgICAjIFJlbW92ZSBhbnkgb2xkIGZpbGVzIGluIHRoZSBjYXNlIG9mIGFuIHVwZ3JhZGUKKyAgICAgICAgaWYgb3JpZ3BhdGggYW5kIG9yaWdmaWxlbGlzdCBhbmQgb2UucmVjaXBldXRpbHMuZmluZF9sYXllcmRpcihvcmlncGF0aCkgPT0gb2UucmVjaXBldXRpbHMuZmluZF9sYXllcmRpcihkZXN0bGF5ZXJkaXIpOgorICAgICAgICAgICAgZm9yIGZuIGluIG9yaWdmaWxlbGlzdDoKKyAgICAgICAgICAgICAgICBmbnAgPSBvcy5wYXRoLmpvaW4ob3JpZ3BhdGgsIGZuKQorICAgICAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICAgICAgb3MucmVtb3ZlKGZucCkKKyAgICAgICAgICAgICAgICBleGNlcHQgRmlsZU5vdEZvdW5kRXJyb3I6CisgICAgICAgICAgICAgICAgICAgIHBhc3MKKworICAgICAgICAjIEFjdHVhbGx5IHVwZGF0ZSB0aGUgcmVjaXBlIC8gYmJhcHBlbmQKKyAgICAgICAgX3VwZGF0ZV9yZWNpcGUoYXJncy5yZWNpcGVuYW1lLCB3b3Jrc3BhY2UsIHJkLCBhcmdzLm1vZGUsIGFwcGVuZGxheWVyZGlyLCB3aWxkY2FyZF92ZXJzaW9uPVRydWUsIG5vX3JlbW92ZT1GYWxzZSwgaW5pdGlhbF9yZXY9YXJncy5pbml0aWFsX3JldikKKworICAgICAgICBpZiBvcmlnbGF5ZXJkaXIgPT0gY29uZmlnLndvcmtzcGFjZV9wYXRoIGFuZCBkZXN0cGF0aDoKKyAgICAgICAgICAgICMgUmVjaXBlIGZpbGUgaXRzZWxmIGlzIGluIHRoZSB3b3Jrc3BhY2UgLSBuZWVkIHRvIG1vdmUgaXQgYW5kIGFueQorICAgICAgICAgICAgIyBhc3NvY2lhdGVkIGZpbGVzIHRvIHRoZSBzcGVjaWZpZWQgbGF5ZXIKKyAgICAgICAgICAgIGxvZ2dlci5pbmZvKCdNb3ZpbmcgcmVjaXBlIGZpbGUgdG8gJXMnICUgZGVzdHBhdGgpCisgICAgICAgICAgICByZWNpcGVkaXIgPSBvcy5wYXRoLmRpcm5hbWUocmQuZ2V0VmFyKCdGSUxFJywgVHJ1ZSkpCisgICAgICAgICAgICBmb3Igcm9vdCwgXywgZmlsZXMgaW4gb3Mud2FsayhyZWNpcGVkaXIpOgorICAgICAgICAgICAgICAgIGZvciBmbiBpbiBmaWxlczoKKyAgICAgICAgICAgICAgICAgICAgc3JjcGF0aCA9IG9zLnBhdGguam9pbihyb290LCBmbikKKyAgICAgICAgICAgICAgICAgICAgcmVscHRoID0gb3MucGF0aC5yZWxwYXRoKG9zLnBhdGguZGlybmFtZShzcmNwYXRoKSwgcmVjaXBlZGlyKQorICAgICAgICAgICAgICAgICAgICBkZXN0ZGlyID0gb3MucGF0aC5hYnNwYXRoKG9zLnBhdGguam9pbihkZXN0cGF0aCwgcmVscHRoKSkKKyAgICAgICAgICAgICAgICAgICAgYmIudXRpbHMubWtkaXJoaWVyKGRlc3RkaXIpCisgICAgICAgICAgICAgICAgICAgIHNodXRpbC5tb3ZlKHNyY3BhdGgsIG9zLnBhdGguam9pbihkZXN0ZGlyLCBmbikpCisKKyAgICBmaW5hbGx5OgorICAgICAgICB0aW5mb2lsLnNodXRkb3duKCkKKworICAgICMgRXZlcnl0aGluZyBlbHNlIGhhcyBzdWNjZWVkZWQsIHdlIGNhbiBub3cgcmVzZXQKKyAgICBfcmVzZXQoW2FyZ3MucmVjaXBlbmFtZV0sIG5vX2NsZWFuPUZhbHNlLCBjb25maWc9Y29uZmlnLCBiYXNlcGF0aD1iYXNlcGF0aCwgd29ya3NwYWNlPXdvcmtzcGFjZSkKKwogICAgIHJldHVybiAwCiAKIApAQCAtMTM5MCwxMCArMTU4MiwxMSBAQAogICAgIHBhcnNlcl9hZGQuYWRkX2FyZ3VtZW50KCctLWZldGNoJywgJy1mJywgaGVscD0nRmV0Y2ggdGhlIHNwZWNpZmllZCBVUkkgYW5kIGV4dHJhY3QgaXQgdG8gY3JlYXRlIHRoZSBzb3VyY2UgdHJlZSAoZGVwcmVjYXRlZCAtIHBhc3MgYXMgcG9zaXRpb25hbCBhcmd1bWVudCBpbnN0ZWFkKScsIG1ldGF2YXI9J1VSSScpCiAgICAgcGFyc2VyX2FkZC5hZGRfYXJndW1lbnQoJy0tdmVyc2lvbicsICctVicsIGhlbHA9J1ZlcnNpb24gdG8gdXNlIHdpdGhpbiByZWNpcGUgKFBWKScpCiAgICAgcGFyc2VyX2FkZC5hZGRfYXJndW1lbnQoJy0tbm8tZ2l0JywgJy1nJywgaGVscD0nSWYgZmV0Y2hpbmcgc291cmNlLCBkbyBub3Qgc2V0IHVwIHNvdXJjZSB0cmVlIGFzIGEgZ2l0IHJlcG9zaXRvcnknLCBhY3Rpb249InN0b3JlX3RydWUiKQorICAgIHBhcnNlcl9hZGQuYWRkX2FyZ3VtZW50KCctLWF1dG9yZXYnLCAnLWEnLCBoZWxwPSdXaGVuIGZldGNoaW5nIGZyb20gYSBnaXQgcmVwb3NpdG9yeSwgc2V0IFNSQ1JFViBpbiB0aGUgcmVjaXBlIHRvIGEgZmxvYXRpbmcgcmV2aXNpb24gaW5zdGVhZCBvZiBmaXhlZCcsIGFjdGlvbj0ic3RvcmVfdHJ1ZSIpCiAgICAgcGFyc2VyX2FkZC5hZGRfYXJndW1lbnQoJy0tYmluYXJ5JywgJy1iJywgaGVscD0nVHJlYXQgdGhlIHNvdXJjZSB0cmVlIGFzIHNvbWV0aGluZyB0aGF0IHNob3VsZCBiZSBpbnN0YWxsZWQgdmVyYmF0aW0gKG5vIGNvbXBpbGF0aW9uLCBzYW1lIGRpcmVjdG9yeSBzdHJ1Y3R1cmUpLiBVc2VmdWwgd2l0aCBiaW5hcnkgcGFja2FnZXMgZS5nLiBSUE1zLicsIGFjdGlvbj0nc3RvcmVfdHJ1ZScpCiAgICAgcGFyc2VyX2FkZC5hZGRfYXJndW1lbnQoJy0tYWxzby1uYXRpdmUnLCBoZWxwPSdBbHNvIGFkZCBuYXRpdmUgdmFyaWFudCAoaS5lLiBzdXBwb3J0IGJ1aWxkaW5nIHJlY2lwZSBmb3IgdGhlIGJ1aWxkIGhvc3QgYXMgd2VsbCBhcyB0aGUgdGFyZ2V0IG1hY2hpbmUpJywgYWN0aW9uPSdzdG9yZV90cnVlJykKICAgICBwYXJzZXJfYWRkLmFkZF9hcmd1bWVudCgnLS1zcmMtc3ViZGlyJywgaGVscD0nU3BlY2lmeSBzdWJkaXJlY3Rvcnkgd2l0aGluIHNvdXJjZSB0cmVlIHRvIHVzZScsIG1ldGF2YXI9J1NVQkRJUicpCi0gICAgcGFyc2VyX2FkZC5zZXRfZGVmYXVsdHMoZnVuYz1hZGQpCisgICAgcGFyc2VyX2FkZC5zZXRfZGVmYXVsdHMoZnVuYz1hZGQsIGZpeGVkX3NldHVwPWNvbnRleHQuZml4ZWRfc2V0dXApCiAKICAgICBwYXJzZXJfbW9kaWZ5ID0gc3VicGFyc2Vycy5hZGRfcGFyc2VyKCdtb2RpZnknLCBoZWxwPSdNb2RpZnkgdGhlIHNvdXJjZSBmb3IgYW4gZXhpc3RpbmcgcmVjaXBlJywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uPSdTZXRzIHVwIHRoZSBidWlsZCBlbnZpcm9ubWVudCB0byBtb2RpZnkgdGhlIHNvdXJjZSBmb3IgYW4gZXhpc3RpbmcgcmVjaXBlLiBUaGUgZGVmYXVsdCBiZWhhdmlvdXIgaXMgdG8gZXh0cmFjdCB0aGUgc291cmNlIGJlaW5nIGZldGNoZWQgYnkgdGhlIHJlY2lwZSBpbnRvIGEgZ2l0IHRyZWUgc28geW91IGNhbiB3b3JrIG9uIGl0OyBhbHRlcm5hdGl2ZWx5IGlmIHlvdSBhbHJlYWR5IGhhdmUgeW91ciBvd24gcHJlLXByZXBhcmVkIHNvdXJjZSB0cmVlIHlvdSBjYW4gc3BlY2lmeSAtbi8tLW5vLWV4dHJhY3QuJywKQEAgLTE0NDYsOSArMTYzOSwxOCBAQAogICAgIHBhcnNlcl9zdGF0dXMuc2V0X2RlZmF1bHRzKGZ1bmM9c3RhdHVzKQogCiAgICAgcGFyc2VyX3Jlc2V0ID0gc3VicGFyc2Vycy5hZGRfcGFyc2VyKCdyZXNldCcsIGhlbHA9J1JlbW92ZSBhIHJlY2lwZSBmcm9tIHlvdXIgd29ya3NwYWNlJywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVzY3JpcHRpb249J1JlbW92ZXMgdGhlIHNwZWNpZmllZCByZWNpcGUgZnJvbSB5b3VyIHdvcmtzcGFjZSAocmVzZXR0aW5nIGl0cyBzdGF0ZSknLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbj0nUmVtb3ZlcyB0aGUgc3BlY2lmaWVkIHJlY2lwZShzKSBmcm9tIHlvdXIgd29ya3NwYWNlIChyZXNldHRpbmcgaXRzIHN0YXRlIGJhY2sgdG8gdGhhdCBkZWZpbmVkIGJ5IHRoZSBtZXRhZGF0YSkuJywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3JvdXA9J3dvcmtpbmcnLCBvcmRlcj0tMTAwKQotICAgIHBhcnNlcl9yZXNldC5hZGRfYXJndW1lbnQoJ3JlY2lwZW5hbWUnLCBuYXJncz0nPycsIGhlbHA9J1JlY2lwZSB0byByZXNldCcpCisgICAgcGFyc2VyX3Jlc2V0LmFkZF9hcmd1bWVudCgncmVjaXBlbmFtZScsIG5hcmdzPScqJywgaGVscD0nUmVjaXBlIHRvIHJlc2V0JykKICAgICBwYXJzZXJfcmVzZXQuYWRkX2FyZ3VtZW50KCctLWFsbCcsICctYScsIGFjdGlvbj0ic3RvcmVfdHJ1ZSIsIGhlbHA9J1Jlc2V0IGFsbCByZWNpcGVzIChjbGVhciB3b3Jrc3BhY2UpJykKICAgICBwYXJzZXJfcmVzZXQuYWRkX2FyZ3VtZW50KCctLW5vLWNsZWFuJywgJy1uJywgYWN0aW9uPSJzdG9yZV90cnVlIiwgaGVscD0nRG9uXCd0IGNsZWFuIHRoZSBzeXNyb290IHRvIHJlbW92ZSByZWNpcGUgb3V0cHV0JykKICAgICBwYXJzZXJfcmVzZXQuc2V0X2RlZmF1bHRzKGZ1bmM9cmVzZXQpCisKKyAgICBwYXJzZXJfZmluaXNoID0gc3VicGFyc2Vycy5hZGRfcGFyc2VyKCdmaW5pc2gnLCBoZWxwPSdGaW5pc2ggd29ya2luZyBvbiBhIHJlY2lwZSBpbiB5b3VyIHdvcmtzcGFjZScsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uPSdQdXNoZXMgYW55IGNvbW1pdHRlZCBjaGFuZ2VzIHRvIHRoZSBzcGVjaWZpZWQgcmVjaXBlIHRvIHRoZSBzcGVjaWZpZWQgbGF5ZXIgYW5kIHJlbW92ZXMgaXQgZnJvbSB5b3VyIHdvcmtzcGFjZS4gUm91Z2hseSBlcXVpdmFsZW50IHRvIGFuIHVwZGF0ZS1yZWNpcGUgZm9sbG93ZWQgYnkgcmVzZXQsIGV4Y2VwdCB0aGUgdXBkYXRlLXJlY2lwZSBzdGVwIHdpbGwgZG8gdGhlICJyaWdodCB0aGluZyIgZGVwZW5kaW5nIG9uIHRoZSByZWNpcGUgYW5kIHRoZSBkZXN0aW5hdGlvbiBsYXllciBzcGVjaWZpZWQuJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3JvdXA9J3dvcmtpbmcnLCBvcmRlcj0tMTAwKQorICAgIHBhcnNlcl9maW5pc2guYWRkX2FyZ3VtZW50KCdyZWNpcGVuYW1lJywgaGVscD0nUmVjaXBlIHRvIGZpbmlzaCcpCisgICAgcGFyc2VyX2ZpbmlzaC5hZGRfYXJndW1lbnQoJ2Rlc3RpbmF0aW9uJywgaGVscD0nTGF5ZXIvcGF0aCB0byBwdXQgcmVjaXBlIGludG8uIENhbiBiZSB0aGUgbmFtZSBvZiBhIGxheWVyIGNvbmZpZ3VyZWQgaW4geW91ciBiYmxheWVycy5jb25mLCB0aGUgcGF0aCB0byB0aGUgYmFzZSBvZiBhIGxheWVyLCBvciBhIHBhcnRpYWwgcGF0aCBpbnNpZGUgYSBsYXllci4gJShwcm9nKXMgd2lsbCBhdHRlbXB0IHRvIGNvbXBsZXRlIHRoZSBwYXRoIGJhc2VkIG9uIHRoZSBsYXllclwncyBzdHJ1Y3R1cmUuJykKKyAgICBwYXJzZXJfZmluaXNoLmFkZF9hcmd1bWVudCgnLS1tb2RlJywgJy1tJywgY2hvaWNlcz1bJ3BhdGNoJywgJ3NyY3JldicsICdhdXRvJ10sIGRlZmF1bHQ9J2F1dG8nLCBoZWxwPSdVcGRhdGUgbW9kZSAod2hlcmUgJShtZXRhdmFyKXMgaXMgJShjaG9pY2VzKXM7IGRlZmF1bHQgaXMgJShkZWZhdWx0KXMpJywgbWV0YXZhcj0nTU9ERScpCisgICAgcGFyc2VyX2ZpbmlzaC5hZGRfYXJndW1lbnQoJy0taW5pdGlhbC1yZXYnLCBoZWxwPSdPdmVycmlkZSBzdGFydGluZyByZXZpc2lvbiBmb3IgcGF0Y2hlcycpCisgICAgcGFyc2VyX2ZpbmlzaC5zZXRfZGVmYXVsdHMoZnVuYz1maW5pc2gpCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvZGV2dG9vbC91cGdyYWRlLnB5IGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L3NjcmlwdHMvbGliL2RldnRvb2wvdXBncmFkZS5weQppbmRleCBhMDg1Zjc4Li5hNDIzOWYxIDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvZGV2dG9vbC91cGdyYWRlLnB5CisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9kZXZ0b29sL3VwZ3JhZGUucHkKQEAgLTcwLDE4ICs3MCwyNiBAQAogZGVmIF9yZWNpcGVfY29udGFpbnMocmQsIHZhcik6CiAgICAgcmYgPSByZC5nZXRWYXIoJ0ZJTEUnLCBUcnVlKQogICAgIHZhcmZpbGVzID0gb2UucmVjaXBldXRpbHMuZ2V0X3Zhcl9maWxlcyhyZiwgW3Zhcl0sIHJkKQotICAgIGZvciB2YXIsIGZuIGluIHZhcmZpbGVzLml0ZXJpdGVtcygpOgorICAgIGZvciB2YXIsIGZuIGluIHZhcmZpbGVzLml0ZW1zKCk6CiAgICAgICAgIGlmIGZuIGFuZCBmbi5zdGFydHN3aXRoKG9zLnBhdGguZGlybmFtZShyZikgKyBvcy5zZXApOgogICAgICAgICAgICAgcmV0dXJuIFRydWUKICAgICByZXR1cm4gRmFsc2UKIAogZGVmIF9yZW5hbWVfcmVjaXBlX2RpcnMob2xkcHYsIG5ld3B2LCBwYXRoKToKICAgICBmb3Igcm9vdCwgZGlycywgZmlsZXMgaW4gb3Mud2FsayhwYXRoKToKKyAgICAgICAgIyBSZW5hbWUgZGlyZWN0b3JpZXMgd2l0aCB0aGUgdmVyc2lvbiBpbiB0aGVpciBuYW1lCiAgICAgICAgIGZvciBvbGRkaXIgaW4gZGlyczoKICAgICAgICAgICAgIGlmIG9sZGRpci5maW5kKG9sZHB2KSAhPSAtMToKICAgICAgICAgICAgICAgICBuZXdkaXIgPSBvbGRkaXIucmVwbGFjZShvbGRwdiwgbmV3cHYpCiAgICAgICAgICAgICAgICAgaWYgb2xkZGlyICE9IG5ld2RpcjoKICAgICAgICAgICAgICAgICAgICAgc2h1dGlsLm1vdmUob3MucGF0aC5qb2luKHBhdGgsIG9sZGRpciksIG9zLnBhdGguam9pbihwYXRoLCBuZXdkaXIpKQorICAgICAgICAjIFJlbmFtZSBhbnkgaW5jIGZpbGVzIHdpdGggdGhlIHZlcnNpb24gaW4gdGhlaXIgbmFtZSAodW51c3VhbCwgYnV0IHBvc3NpYmxlKQorICAgICAgICBmb3Igb2xkZmlsZSBpbiBmaWxlczoKKyAgICAgICAgICAgIGlmIG9sZGZpbGUuZW5kc3dpdGgoJy5pbmMnKToKKyAgICAgICAgICAgICAgICBpZiBvbGRmaWxlLmZpbmQob2xkcHYpICE9IC0xOgorICAgICAgICAgICAgICAgICAgICBuZXdmaWxlID0gb2xkZmlsZS5yZXBsYWNlKG9sZHB2LCBuZXdwdikKKyAgICAgICAgICAgICAgICAgICAgaWYgb2xkZmlsZSAhPSBuZXdmaWxlOgorICAgICAgICAgICAgICAgICAgICAgICAgb3MucmVuYW1lKG9zLnBhdGguam9pbihwYXRoLCBvbGRmaWxlKSwgb3MucGF0aC5qb2luKHBhdGgsIG5ld2ZpbGUpKQogCiBkZWYgX3JlbmFtZV9yZWNpcGVfZmlsZShvbGRyZWNpcGUsIGJwbiwgb2xkcHYsIG5ld3B2LCBwYXRoKToKICAgICBvbGRyZWNpcGUgPSBvcy5wYXRoLmJhc2VuYW1lKG9sZHJlY2lwZSkKQEAgLTk3LDcgKzEwNSw3IEBACiAgICAgX3JlbmFtZV9yZWNpcGVfZGlycyhvbGRwdiwgbmV3cHYsIHBhdGgpCiAgICAgcmV0dXJuIF9yZW5hbWVfcmVjaXBlX2ZpbGUob2xkcmVjaXBlLCBicG4sIG9sZHB2LCBuZXdwdiwgcGF0aCkKIAotZGVmIF93cml0ZV9hcHBlbmQocmMsIHNyY3RyZWUsIHNhbWVfZGlyLCBub19zYW1lX2RpciwgcmV2LCB3b3Jrc3BhY2UsIGQpOgorZGVmIF93cml0ZV9hcHBlbmQocmMsIHNyY3RyZWUsIHNhbWVfZGlyLCBub19zYW1lX2RpciwgcmV2LCBjb3BpZWQsIHdvcmtzcGFjZSwgZCk6CiAgICAgIiIiV3JpdGVzIGFuIGFwcGVuZCBmaWxlIiIiCiAgICAgaWYgbm90IG9zLnBhdGguZXhpc3RzKHJjKToKICAgICAgICAgcmFpc2UgRGV2dG9vbEVycm9yKCJiYmFwcGVuZCBub3QgY3JlYXRlZCBiZWNhdXNlICVzIGRvZXMgbm90IGV4aXN0IiAlIHJjKQpAQCAtMTIwLDggKzEyOCwxMiBAQAogICAgICAgICBiX2lzX3MgPSB1c2VfZXh0ZXJuYWxfYnVpbGQoc2FtZV9kaXIsIG5vX3NhbWVfZGlyLCBkKQogICAgICAgICBpZiBiX2lzX3M6CiAgICAgICAgICAgICBmLndyaXRlKCdFWFRFUk5BTFNSQ19CVUlMRF9wbi0lcyA9ICIlcyJcbicgJSAocG4sIHNyY3RyZWUpKQorICAgICAgICBmLndyaXRlKCdcbicpCiAgICAgICAgIGlmIHJldjoKLSAgICAgICAgICAgIGYud3JpdGUoJ1xuIyBpbml0aWFsX3JldjogJXNcbicgJSByZXYpCisgICAgICAgICAgICBmLndyaXRlKCcjIGluaXRpYWxfcmV2OiAlc1xuJyAlIHJldikKKyAgICAgICAgaWYgY29waWVkOgorICAgICAgICAgICAgZi53cml0ZSgnIyBvcmlnaW5hbF9wYXRoOiAlc1xuJyAlIG9zLnBhdGguZGlybmFtZShkLmdldFZhcignRklMRScsIFRydWUpKSkKKyAgICAgICAgICAgIGYud3JpdGUoJyMgb3JpZ2luYWxfZmlsZXM6ICVzXG4nICUgJyAnLmpvaW4oY29waWVkKSkKICAgICByZXR1cm4gYWYKIAogZGVmIF9jbGVhbnVwX29uX2Vycm9yKHJmLCBzcmN0cmVlKToKQEAgLTIxNSw3ICsyMjcsOSBAQAogICAgICAgICBmb3IgZiBpbiBzdGRvdXQuc3BsaXRsaW5lcygpOgogICAgICAgICAgICAgX19ydW4oJ2dpdCBhZGQgIiVzIicgJSBmKQogCi0gICAgICAgIF9fcnVuKCdnaXQgY29tbWl0IC1xIC1tICJDb21taXQgb2YgdXBzdHJlYW0gY2hhbmdlcyBhdCB2ZXJzaW9uICVzIiAtLWFsbG93LWVtcHR5JyAlIG5ld3B2KQorICAgICAgICB1c2Vyb3B0aW9ucyA9IFtdCisgICAgICAgIG9lLnBhdGNoLkdpdEFwcGx5VHJlZS5naXRDb21tYW5kVXNlck9wdGlvbnModXNlcm9wdGlvbnMsIGQ9cmQpCisgICAgICAgIF9fcnVuKCdnaXQgJXMgY29tbWl0IC1xIC1tICJDb21taXQgb2YgdXBzdHJlYW0gY2hhbmdlcyBhdCB2ZXJzaW9uICVzIiAtLWFsbG93LWVtcHR5JyAlICgnICcuam9pbih1c2Vyb3B0aW9ucyksIG5ld3B2KSkKICAgICAgICAgX19ydW4oJ2dpdCB0YWcgLWYgZGV2dG9vbC1iYXNlLSVzJyAlIG5ld3B2KQogCiAgICAgKHN0ZG91dCwgXykgPSBfX3J1bignZ2l0IHJldi1wYXJzZSBIRUFEJykKQEAgLTIyOCwxNiArMjQyLDIyIEBACiAgICAgICAgICAgICBmb3IgcGF0Y2ggaW4gcGF0Y2hlczoKICAgICAgICAgICAgICAgICBsb2dnZXIud2FybigiJXMiICUgb3MucGF0aC5iYXNlbmFtZShwYXRjaCkpCiAgICAgZWxzZToKKyAgICAgICAgX19ydW4oJ2dpdCBjaGVja291dCBkZXZ0b29sLXBhdGNoZWQgLWIgJXMnICUgYnJhbmNoKQorICAgICAgICBza2lwdGFnID0gRmFsc2UKICAgICAgICAgdHJ5OgotICAgICAgICAgICAgX19ydW4oJ2dpdCBjaGVja291dCBkZXZ0b29sLXBhdGNoZWQgLWIgJXMnICUgYnJhbmNoKQogICAgICAgICAgICAgX19ydW4oJ2dpdCByZWJhc2UgJXMnICUgcmV2KQorICAgICAgICBleGNlcHQgYmIucHJvY2Vzcy5FeGVjdXRpb25FcnJvciBhcyBlOgorICAgICAgICAgICAgc2tpcHRhZyA9IFRydWUKKyAgICAgICAgICAgIGlmICdjb25mbGljdCcgaW4gZS5zdGRvdXQ6CisgICAgICAgICAgICAgICAgbG9nZ2VyLndhcm4oJ0NvbW1hbmQgXCclc1wnIGZhaWxlZDpcbiVzXG5cbllvdSB3aWxsIG5lZWQgdG8gcmVzb2x2ZSBjb25mbGljdHMgaW4gb3JkZXIgdG8gY29tcGxldGUgdGhlIHVwZ3JhZGUuJyAlIChlLmNvbW1hbmQsIGUuc3Rkb3V0LnJzdHJpcCgpKSkKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgbG9nZ2VyLndhcm4oJ0NvbW1hbmQgXCclc1wnIGZhaWxlZDpcbiVzJyAlIChlLmNvbW1hbmQsIGUuc3Rkb3V0KSkKKyAgICAgICAgaWYgbm90IHNraXB0YWc6CiAgICAgICAgICAgICBpZiB1cmkuc3RhcnRzd2l0aCgnZ2l0Oi8vJyk6CiAgICAgICAgICAgICAgICAgc3VmZml4ID0gJ25ldycKICAgICAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAgICAgc3VmZml4ID0gbmV3cHYKICAgICAgICAgICAgIF9fcnVuKCdnaXQgdGFnIC1mIGRldnRvb2wtcGF0Y2hlZC0lcycgJSBzdWZmaXgpCi0gICAgICAgIGV4Y2VwdCBiYi5wcm9jZXNzLkV4ZWN1dGlvbkVycm9yIGFzIGU6Ci0gICAgICAgICAgICBsb2dnZXIud2FybignQ29tbWFuZCBcJyVzXCcgZmFpbGVkOlxuJXMnICUgKGUuY29tbWFuZCwgZS5zdGRvdXQpKQogCiAgICAgaWYgdG1wc3JjdHJlZToKICAgICAgICAgaWYga2VlcF90ZW1wOgpAQCAtMjUzLDcgKzI3Myw3IEBACiAgICAgYnBuID0gcmQuZ2V0VmFyKCdCUE4nLCBUcnVlKQogICAgIHBhdGggPSBvcy5wYXRoLmpvaW4od29ya3NwYWNlLCAncmVjaXBlcycsIGJwbikKICAgICBiYi51dGlscy5ta2RpcmhpZXIocGF0aCkKLSAgICBvZS5yZWNpcGV1dGlscy5jb3B5X3JlY2lwZV9maWxlcyhyZCwgcGF0aCkKKyAgICBjb3BpZWQsIF8gPSBvZS5yZWNpcGV1dGlscy5jb3B5X3JlY2lwZV9maWxlcyhyZCwgcGF0aCkKIAogICAgIG9sZHB2ID0gcmQuZ2V0VmFyKCdQVicsIFRydWUpCiAgICAgaWYgbm90IG5ld3B2OgpAQCAtMzAwLDEwICszMjAsMTAgQEAKICAgICAgICAgbmV3dmFsdWVzWydTUkNfVVJJW21kNXN1bV0nXSA9IG1kNQogICAgICAgICBuZXd2YWx1ZXNbJ1NSQ19VUklbc2hhMjU2c3VtXSddID0gc2hhMjU2CiAKLSAgICByZCA9IG9lLnJlY2lwZXV0aWxzLnBhcnNlX3JlY2lwZShmdWxscGF0aCwgTm9uZSwgdGluZm9pbC5jb25maWdfZGF0YSkKKyAgICByZCA9IG9lLnJlY2lwZXV0aWxzLnBhcnNlX3JlY2lwZSh0aW5mb2lsLmNvb2tlciwgZnVsbHBhdGgsIE5vbmUpCiAgICAgb2UucmVjaXBldXRpbHMucGF0Y2hfcmVjaXBlKHJkLCBmdWxscGF0aCwgbmV3dmFsdWVzKQogCi0gICAgcmV0dXJuIGZ1bGxwYXRoCisgICAgcmV0dXJuIGZ1bGxwYXRoLCBjb3BpZWQKIAogZGVmIHVwZ3JhZGUoYXJncywgY29uZmlnLCBiYXNlcGF0aCwgd29ya3NwYWNlKToKICAgICAiIiJFbnRyeSBwb2ludCBmb3IgdGhlIGRldnRvb2wgJ3VwZ3JhZGUnIHN1YmNvbW1hbmQiIiIKQEAgLTMxNiw0OCArMzM2LDUxIEBACiAgICAgICAgIHJhaXNlIERldnRvb2xFcnJvcigiSWYgeW91IHNwZWNpZnkgLS1zcmNicmFuY2gvLUIgdGhlbiB5b3UgbXVzdCB1c2UgLS1zcmNyZXYvLVMgdG8gc3BlY2lmeSB0aGUgcmV2aXNpb24iICUgYXJncy5yZWNpcGVuYW1lKQogCiAgICAgdGluZm9pbCA9IHNldHVwX3RpbmZvaWwoYmFzZXBhdGg9YmFzZXBhdGgsIHRyYWNraW5nPVRydWUpCi0gICAgcmQgPSBwYXJzZV9yZWNpcGUoY29uZmlnLCB0aW5mb2lsLCBhcmdzLnJlY2lwZW5hbWUsIFRydWUpCi0gICAgaWYgbm90IHJkOgotICAgICAgICByZXR1cm4gMQotCi0gICAgcG4gPSByZC5nZXRWYXIoJ1BOJywgVHJ1ZSkKLSAgICBpZiBwbiAhPSBhcmdzLnJlY2lwZW5hbWU6Ci0gICAgICAgIGxvZ2dlci5pbmZvKCdNYXBwaW5nICVzIHRvICVzJyAlIChhcmdzLnJlY2lwZW5hbWUsIHBuKSkKLSAgICBpZiBwbiBpbiB3b3Jrc3BhY2U6Ci0gICAgICAgIHJhaXNlIERldnRvb2xFcnJvcigicmVjaXBlICVzIGlzIGFscmVhZHkgaW4geW91ciB3b3Jrc3BhY2UiICUgcG4pCi0KLSAgICBpZiBhcmdzLnNyY3RyZWU6Ci0gICAgICAgIHNyY3RyZWUgPSBvcy5wYXRoLmFic3BhdGgoYXJncy5zcmN0cmVlKQotICAgIGVsc2U6Ci0gICAgICAgIHNyY3RyZWUgPSBzdGFuZGFyZC5nZXRfZGVmYXVsdF9zcmN0cmVlKGNvbmZpZywgcG4pCi0KLSAgICBzdGFuZGFyZC5fY2hlY2tfY29tcGF0aWJsZV9yZWNpcGUocG4sIHJkKQotICAgIG9sZF9zcmNyZXYgPSByZC5nZXRWYXIoJ1NSQ1JFVicsIFRydWUpCi0gICAgaWYgb2xkX3NyY3JldiA9PSAnSU5WQUxJRCc6Ci0gICAgICAgIG9sZF9zcmNyZXYgPSBOb25lCi0gICAgaWYgb2xkX3NyY3JldiBhbmQgbm90IGFyZ3Muc3JjcmV2OgotICAgICAgICByYWlzZSBEZXZ0b29sRXJyb3IoIlJlY2lwZSBzcGVjaWZpZXMgYSBTUkNSRVYgdmFsdWU7IHlvdSBtdXN0IHNwZWNpZnkgYSBuZXcgb25lIHdoZW4gdXBncmFkaW5nIikKLSAgICBpZiByZC5nZXRWYXIoJ1BWJywgVHJ1ZSkgPT0gYXJncy52ZXJzaW9uIGFuZCBvbGRfc3JjcmV2ID09IGFyZ3Muc3JjcmV2OgotICAgICAgICByYWlzZSBEZXZ0b29sRXJyb3IoIkN1cnJlbnQgYW5kIHVwZ3JhZGUgdmVyc2lvbnMgYXJlIHRoZSBzYW1lIHZlcnNpb24iKQotCi0gICAgcmYgPSBOb25lCiAgICAgdHJ5OgotICAgICAgICByZXYxID0gc3RhbmRhcmQuX2V4dHJhY3Rfc291cmNlKHNyY3RyZWUsIEZhbHNlLCAnZGV2dG9vbC1vcmlnJywgRmFsc2UsIHJkKQotICAgICAgICByZXYyLCBtZDUsIHNoYTI1NiA9IF9leHRyYWN0X25ld19zb3VyY2UoYXJncy52ZXJzaW9uLCBzcmN0cmVlLCBhcmdzLm5vX3BhdGNoLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJncy5zcmNyZXYsIGFyZ3MuYnJhbmNoLCBhcmdzLmtlZXBfdGVtcCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRpbmZvaWwsIHJkKQotICAgICAgICByZiA9IF9jcmVhdGVfbmV3X3JlY2lwZShhcmdzLnZlcnNpb24sIG1kNSwgc2hhMjU2LCBhcmdzLnNyY3JldiwgYXJncy5zcmNicmFuY2gsIGNvbmZpZy53b3Jrc3BhY2VfcGF0aCwgdGluZm9pbCwgcmQpCi0gICAgZXhjZXB0IGJiLnByb2Nlc3MuQ21kRXJyb3IgYXMgZToKLSAgICAgICAgX3VwZ3JhZGVfZXJyb3IoZSwgcmYsIHNyY3RyZWUpCi0gICAgZXhjZXB0IERldnRvb2xFcnJvciBhcyBlOgotICAgICAgICBfdXBncmFkZV9lcnJvcihlLCByZiwgc3JjdHJlZSkKLSAgICBzdGFuZGFyZC5fYWRkX21kNShjb25maWcsIHBuLCBvcy5wYXRoLmRpcm5hbWUocmYpKQorICAgICAgICByZCA9IHBhcnNlX3JlY2lwZShjb25maWcsIHRpbmZvaWwsIGFyZ3MucmVjaXBlbmFtZSwgVHJ1ZSkKKyAgICAgICAgaWYgbm90IHJkOgorICAgICAgICAgICAgcmV0dXJuIDEKIAotICAgIGFmID0gX3dyaXRlX2FwcGVuZChyZiwgc3JjdHJlZSwgYXJncy5zYW1lX2RpciwgYXJncy5ub19zYW1lX2RpciwgcmV2MiwKLSAgICAgICAgICAgICAgICAgICAgICAgY29uZmlnLndvcmtzcGFjZV9wYXRoLCByZCkKLSAgICBzdGFuZGFyZC5fYWRkX21kNShjb25maWcsIHBuLCBhZikKLSAgICBsb2dnZXIuaW5mbygnVXBncmFkZWQgc291cmNlIGV4dHJhY3RlZCB0byAlcycgJSBzcmN0cmVlKQotICAgIGxvZ2dlci5pbmZvKCdOZXcgcmVjaXBlIGlzICVzJyAlIHJmKQorICAgICAgICBwbiA9IHJkLmdldFZhcignUE4nLCBUcnVlKQorICAgICAgICBpZiBwbiAhPSBhcmdzLnJlY2lwZW5hbWU6CisgICAgICAgICAgICBsb2dnZXIuaW5mbygnTWFwcGluZyAlcyB0byAlcycgJSAoYXJncy5yZWNpcGVuYW1lLCBwbikpCisgICAgICAgIGlmIHBuIGluIHdvcmtzcGFjZToKKyAgICAgICAgICAgIHJhaXNlIERldnRvb2xFcnJvcigicmVjaXBlICVzIGlzIGFscmVhZHkgaW4geW91ciB3b3Jrc3BhY2UiICUgcG4pCisKKyAgICAgICAgaWYgYXJncy5zcmN0cmVlOgorICAgICAgICAgICAgc3JjdHJlZSA9IG9zLnBhdGguYWJzcGF0aChhcmdzLnNyY3RyZWUpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzcmN0cmVlID0gc3RhbmRhcmQuZ2V0X2RlZmF1bHRfc3JjdHJlZShjb25maWcsIHBuKQorCisgICAgICAgIHN0YW5kYXJkLl9jaGVja19jb21wYXRpYmxlX3JlY2lwZShwbiwgcmQpCisgICAgICAgIG9sZF9zcmNyZXYgPSByZC5nZXRWYXIoJ1NSQ1JFVicsIFRydWUpCisgICAgICAgIGlmIG9sZF9zcmNyZXYgPT0gJ0lOVkFMSUQnOgorICAgICAgICAgICAgb2xkX3NyY3JldiA9IE5vbmUKKyAgICAgICAgaWYgb2xkX3NyY3JldiBhbmQgbm90IGFyZ3Muc3JjcmV2OgorICAgICAgICAgICAgcmFpc2UgRGV2dG9vbEVycm9yKCJSZWNpcGUgc3BlY2lmaWVzIGEgU1JDUkVWIHZhbHVlOyB5b3UgbXVzdCBzcGVjaWZ5IGEgbmV3IG9uZSB3aGVuIHVwZ3JhZGluZyIpCisgICAgICAgIGlmIHJkLmdldFZhcignUFYnLCBUcnVlKSA9PSBhcmdzLnZlcnNpb24gYW5kIG9sZF9zcmNyZXYgPT0gYXJncy5zcmNyZXY6CisgICAgICAgICAgICByYWlzZSBEZXZ0b29sRXJyb3IoIkN1cnJlbnQgYW5kIHVwZ3JhZGUgdmVyc2lvbnMgYXJlIHRoZSBzYW1lIHZlcnNpb24iKQorCisgICAgICAgIHJmID0gTm9uZQorICAgICAgICB0cnk6CisgICAgICAgICAgICByZXYxID0gc3RhbmRhcmQuX2V4dHJhY3Rfc291cmNlKHNyY3RyZWUsIEZhbHNlLCAnZGV2dG9vbC1vcmlnJywgRmFsc2UsIHJkKQorICAgICAgICAgICAgcmV2MiwgbWQ1LCBzaGEyNTYgPSBfZXh0cmFjdF9uZXdfc291cmNlKGFyZ3MudmVyc2lvbiwgc3JjdHJlZSwgYXJncy5ub19wYXRjaCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcmdzLnNyY3JldiwgYXJncy5icmFuY2gsIGFyZ3Mua2VlcF90ZW1wLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRpbmZvaWwsIHJkKQorICAgICAgICAgICAgcmYsIGNvcGllZCA9IF9jcmVhdGVfbmV3X3JlY2lwZShhcmdzLnZlcnNpb24sIG1kNSwgc2hhMjU2LCBhcmdzLnNyY3JldiwgYXJncy5zcmNicmFuY2gsIGNvbmZpZy53b3Jrc3BhY2VfcGF0aCwgdGluZm9pbCwgcmQpCisgICAgICAgIGV4Y2VwdCBiYi5wcm9jZXNzLkNtZEVycm9yIGFzIGU6CisgICAgICAgICAgICBfdXBncmFkZV9lcnJvcihlLCByZiwgc3JjdHJlZSkKKyAgICAgICAgZXhjZXB0IERldnRvb2xFcnJvciBhcyBlOgorICAgICAgICAgICAgX3VwZ3JhZGVfZXJyb3IoZSwgcmYsIHNyY3RyZWUpCisgICAgICAgIHN0YW5kYXJkLl9hZGRfbWQ1KGNvbmZpZywgcG4sIG9zLnBhdGguZGlybmFtZShyZikpCisKKyAgICAgICAgYWYgPSBfd3JpdGVfYXBwZW5kKHJmLCBzcmN0cmVlLCBhcmdzLnNhbWVfZGlyLCBhcmdzLm5vX3NhbWVfZGlyLCByZXYyLAorICAgICAgICAgICAgICAgICAgICAgICAgY29waWVkLCBjb25maWcud29ya3NwYWNlX3BhdGgsIHJkKQorICAgICAgICBzdGFuZGFyZC5fYWRkX21kNShjb25maWcsIHBuLCBhZikKKyAgICAgICAgbG9nZ2VyLmluZm8oJ1VwZ3JhZGVkIHNvdXJjZSBleHRyYWN0ZWQgdG8gJXMnICUgc3JjdHJlZSkKKyAgICAgICAgbG9nZ2VyLmluZm8oJ05ldyByZWNpcGUgaXMgJXMnICUgcmYpCisgICAgZmluYWxseToKKyAgICAgICAgdGluZm9pbC5zaHV0ZG93bigpCiAgICAgcmV0dXJuIDAKIAogZGVmIHJlZ2lzdGVyX2NvbW1hbmRzKHN1YnBhcnNlcnMsIGNvbnRleHQpOgpAQCAtMzcxLDcgKzM5NCw3IEBACiAgICAgcGFyc2VyX3VwZ3JhZGUuYWRkX2FyZ3VtZW50KCdyZWNpcGVuYW1lJywgaGVscD0nTmFtZSBvZiByZWNpcGUgdG8gdXBncmFkZSAoanVzdCBuYW1lIC0gbm8gdmVyc2lvbiwgcGF0aCBvciBleHRlbnNpb24pJykKICAgICBwYXJzZXJfdXBncmFkZS5hZGRfYXJndW1lbnQoJ3NyY3RyZWUnLCAgbmFyZ3M9Jz8nLCBoZWxwPSdQYXRoIHRvIHdoZXJlIHRvIGV4dHJhY3QgdGhlIHNvdXJjZSB0cmVlLiBJZiBub3Qgc3BlY2lmaWVkLCBhIHN1YmRpcmVjdG9yeSBvZiAlcyB3aWxsIGJlIHVzZWQuJyAlIGRlZnNyY3RyZWUpCiAgICAgcGFyc2VyX3VwZ3JhZGUuYWRkX2FyZ3VtZW50KCctLXZlcnNpb24nLCAnLVYnLCBoZWxwPSdWZXJzaW9uIHRvIHVwZ3JhZGUgdG8gKFBWKScpCi0gICAgcGFyc2VyX3VwZ3JhZGUuYWRkX2FyZ3VtZW50KCctLXNyY3JldicsICctUycsIGhlbHA9J1NvdXJjZSByZXZpc2lvbiB0byB1cGdyYWRlIHRvIChpZiBmZXRjaGluZyBmcm9tIGFuIFNDTSBzdWNoIGFzIGdpdCknKQorICAgIHBhcnNlcl91cGdyYWRlLmFkZF9hcmd1bWVudCgnLS1zcmNyZXYnLCAnLVMnLCBoZWxwPSdTb3VyY2UgcmV2aXNpb24gdG8gdXBncmFkZSB0byAocmVxdWlyZWQgaWYgZmV0Y2hpbmcgZnJvbSBhbiBTQ00gc3VjaCBhcyBnaXQpJykKICAgICBwYXJzZXJfdXBncmFkZS5hZGRfYXJndW1lbnQoJy0tc3JjYnJhbmNoJywgJy1CJywgaGVscD0nQnJhbmNoIGluIHNvdXJjZSByZXBvc2l0b3J5IGNvbnRhaW5pbmcgdGhlIHJldmlzaW9uIHRvIHVzZSAoaWYgZmV0Y2hpbmcgZnJvbSBhbiBTQ00gc3VjaCBhcyBnaXQpJykKICAgICBwYXJzZXJfdXBncmFkZS5hZGRfYXJndW1lbnQoJy0tYnJhbmNoJywgJy1iJywgZGVmYXVsdD0iZGV2dG9vbCIsIGhlbHA9J05hbWUgZm9yIG5ldyBkZXZlbG9wbWVudCBicmFuY2ggdG8gY2hlY2tvdXQgKGRlZmF1bHQgIiUoZGVmYXVsdClzIiknKQogICAgIHBhcnNlcl91cGdyYWRlLmFkZF9hcmd1bWVudCgnLS1uby1wYXRjaCcsIGFjdGlvbj0ic3RvcmVfdHJ1ZSIsIGhlbHA9J0RvIG5vdCBhcHBseSBwYXRjaGVzIGZyb20gdGhlIHJlY2lwZSB0byB0aGUgbmV3IHNvdXJjZSBjb2RlJykKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9yZWNpcGV0b29sL2FwcGVuZC5weSBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9yZWNpcGV0b29sL2FwcGVuZC5weQppbmRleCA1NThmZDI1Li4xZTBmYzFlIDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvcmVjaXBldG9vbC9hcHBlbmQucHkKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L3NjcmlwdHMvbGliL3JlY2lwZXRvb2wvYXBwZW5kLnB5CkBAIC02MSw3ICs2MSw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgJy9ldGMvZ3NoYWRvdyc6ICcvZXRjL2dzaGFkb3cgc2hvdWxkIGJlIG1hbmFnZWQgdGhyb3VnaCB0aGUgdXNlcmFkZCBhbmQgZXh0cmF1c2VycyBjbGFzc2VzJywKICAgICAgICAgICAgICAgICAgICAgICAnJHtzeXNjb25mZGlyfS9ob3N0bmFtZSc6ICcke3N5c2NvbmZkaXJ9L2hvc3RuYW1lIGNvbnRlbnRzIHNob3VsZCBiZSBzZXQgYnkgc2V0dGluZyBob3N0bmFtZV9wbi1iYXNlLWZpbGVzID0gInZhbHVlIiBpbiBjb25maWd1cmF0aW9uJyx9CiAKLSAgICBmb3IgcHRoc3BlYywgbWVzc2FnZSBpbiBpbnZhbGlkdGFyZ2V0cy5pdGVyaXRlbXMoKToKKyAgICBmb3IgcHRoc3BlYywgbWVzc2FnZSBpbiBpbnZhbGlkdGFyZ2V0cy5pdGVtcygpOgogICAgICAgICBpZiBmbm1hdGNoLmZubWF0Y2hjYXNlKHRhcmdldHBhdGgsIGQuZXhwYW5kKHB0aHNwZWMpKToKICAgICAgICAgICAgIHJhaXNlIEludmFsaWRUYXJnZXRGaWxlRXJyb3IoZC5leHBhbmQobWVzc2FnZSkpCiAKQEAgLTkwLDcgKzkwLDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiBmbm1hdGNoLmZubWF0Y2hjYXNlKGZ1bGxwdGgsIHRhcmdldHBhdGgpOgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWNpcGVzW3RhcmdldHBhdGhdLmFwcGVuZChwbikKICAgICAgICAgICAgICAgICAgICAgZWxpZiBsaW5lLnN0YXJ0c3dpdGgoJ3BrZ19wcmVpbnN0XycpIG9yIGxpbmUuc3RhcnRzd2l0aCgncGtnX3Bvc3RpbnN0XycpOgotICAgICAgICAgICAgICAgICAgICAgICAgc2NyaXB0dmFsID0gbGluZS5zcGxpdCgnOicsIDEpWzFdLnN0cmlwKCkuZGVjb2RlKCdzdHJpbmdfZXNjYXBlJykKKyAgICAgICAgICAgICAgICAgICAgICAgIHNjcmlwdHZhbCA9IGxpbmUuc3BsaXQoJzonLCAxKVsxXS5zdHJpcCgpLmVuY29kZSgndXRmLTgnKS5kZWNvZGUoJ3VuaWNvZGVfZXNjYXBlJykKICAgICAgICAgICAgICAgICAgICAgICAgIGlmICd1cGRhdGUtYWx0ZXJuYXRpdmVzIC0taW5zdGFsbCAlcyAnICUgdGFyZ2V0cGF0aCBpbiBzY3JpcHR2YWw6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVjaXBlc1t0YXJnZXRwYXRoXS5hcHBlbmQoJz8lcycgJSBwbikKICAgICAgICAgICAgICAgICAgICAgICAgIGVsaWYgdGFyZ2V0cGF0aF9yZS5zZWFyY2goc2NyaXB0dmFsKToKQEAgLTExNSw4ICsxMTUsNyBAQAogICAgICAgICAjIEVycm9yIGFscmVhZHkgbG9nZ2VkCiAgICAgICAgIHJldHVybiBOb25lCiAgICAgYXBwZW5kX2ZpbGVzID0gdGluZm9pbC5jb29rZXIuY29sbGVjdGlvbi5nZXRfZmlsZV9hcHBlbmRzKHJlY2lwZWZpbGUpCi0gICAgcmQgPSBvZS5yZWNpcGV1dGlscy5wYXJzZV9yZWNpcGUocmVjaXBlZmlsZSwgYXBwZW5kX2ZpbGVzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGluZm9pbC5jb25maWdfZGF0YSkKKyAgICByZCA9IG9lLnJlY2lwZXV0aWxzLnBhcnNlX3JlY2lwZSh0aW5mb2lsLmNvb2tlciwgcmVjaXBlZmlsZSwgYXBwZW5kX2ZpbGVzKQogICAgIHJldHVybiByZAogCiBkZWYgZGV0ZXJtaW5lX2ZpbGVfc291cmNlKHRhcmdldHBhdGgsIHJkKToKQEAgLTE1Miw3ICsxNTEsNyBAQAogICAgICAgICAjIENoZWNrIHBhdGNoZXMKICAgICAgICAgc3JjcGF0Y2hlcyA9IFtdCiAgICAgICAgIHBhdGNoZWRmaWxlcyA9IG9lLnJlY2lwZXV0aWxzLmdldF9yZWNpcGVfcGF0Y2hlZF9maWxlcyhyZCkKLSAgICAgICAgZm9yIHBhdGNoLCBmaWxlbGlzdCBpbiBwYXRjaGVkZmlsZXMuaXRlcml0ZW1zKCk6CisgICAgICAgIGZvciBwYXRjaCwgZmlsZWxpc3QgaW4gcGF0Y2hlZGZpbGVzLml0ZW1zKCk6CiAgICAgICAgICAgICBmb3IgZmlsZWl0ZW0gaW4gZmlsZWxpc3Q6CiAgICAgICAgICAgICAgICAgaWYgZmlsZWl0ZW1bMF0gPT0gc3JjcGF0aDoKICAgICAgICAgICAgICAgICAgICAgc3JjcGF0Y2hlcy5hcHBlbmQoKHBhdGNoLCBmaWxlaXRlbVsxXSkpCkBAIC0xNzIsNyArMTcxLDcgQEAKICAgICAiIiJGaW5kIHRoZSBzb3VyY2UgcGF0aCBzcGVjaWZpZWQgd2l0aGluIGEgY29tbWFuZCIiIgogICAgIGNvbW1hbmQgPSBjbWRlbGVtZW50c1swXQogICAgIGlmIGNvbW1hbmQgaW4gWydpbnN0YWxsJywgJ2NwJ106Ci0gICAgICAgIGhlbHB0ZXh0ID0gc3VicHJvY2Vzcy5jaGVja19vdXRwdXQoJ0xDX0FMTD1DICVzIC0taGVscCcgJSBjb21tYW5kLCBzaGVsbD1UcnVlKQorICAgICAgICBoZWxwdGV4dCA9IHN1YnByb2Nlc3MuY2hlY2tfb3V0cHV0KCdMQ19BTEw9QyAlcyAtLWhlbHAnICUgY29tbWFuZCwgc2hlbGw9VHJ1ZSkuZGVjb2RlKCd1dGYtOCcpCiAgICAgICAgIGFyZ29wdHMgPSAnJwogICAgICAgICBhcmdvcHRfbGluZV9yZSA9IHJlLmNvbXBpbGUoJ14tKFthLXpBLVowLTldKSwgLS1bYS16LV0rPScpCiAgICAgICAgIGZvciBsaW5lIGluIGhlbHB0ZXh0LnNwbGl0bGluZXMoKToKQEAgLTI3MCw3ICsyNjksNyBAQAogICAgIHBvc3RpbnN0X3BucyA9IFtdCiAKICAgICBzZWxlY3RwbiA9IE5vbmUKLSAgICBmb3IgdGFyZ2V0cGF0aCwgcG5saXN0IGluIHJlY2lwZXMuaXRlcml0ZW1zKCk6CisgICAgZm9yIHRhcmdldHBhdGgsIHBubGlzdCBpbiByZWNpcGVzLml0ZW1zKCk6CiAgICAgICAgIGZvciBwbiBpbiBwbmxpc3Q6CiAgICAgICAgICAgICBpZiBwbi5zdGFydHN3aXRoKCc/Jyk6CiAgICAgICAgICAgICAgICAgYWx0ZXJuYXRpdmVfcG5zLmFwcGVuZChwblsxOl0pCkBAIC0zNTEsNyArMzUwLDcgQEAKIAogICAgIGNvcHlmaWxlcyA9IHt9CiAgICAgZXh0cmFsaW5lcyA9IGV4dHJhbGluZXMgb3IgW10KLSAgICBmb3IgbmV3ZmlsZSwgc3JjZmlsZSBpbiBmaWxlcy5pdGVyaXRlbXMoKToKKyAgICBmb3IgbmV3ZmlsZSwgc3JjZmlsZSBpbiBmaWxlcy5pdGVtcygpOgogICAgICAgICBzcmNfZGVzdGRpciA9IG9zLnBhdGguZGlybmFtZShzcmNmaWxlKQogICAgICAgICBpZiBub3QgYXJncy51c2Vfd29ya2RpcjoKICAgICAgICAgICAgIGlmIHJkLmdldFZhcignUycsIFRydWUpID09IHJkLmdldFZhcignU1RBR0lOR19LRVJORUxfRElSJywgVHJ1ZSk6CmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvcmVjaXBldG9vbC9jcmVhdGUucHkgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvcmVjaXBldG9vbC9jcmVhdGUucHkKaW5kZXggYmI5ZmI5Yi4uZDQyN2QzMiAxMDA2NDQKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L3NjcmlwdHMvbGliL3JlY2lwZXRvb2wvY3JlYXRlLnB5CisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9yZWNpcGV0b29sL2NyZWF0ZS5weQpAQCAtMjQsNyArMjQsNyBAQAogaW1wb3J0IGpzb24KIGltcG9ydCBsb2dnaW5nCiBpbXBvcnQgc2NyaXB0dXRpbHMKLWltcG9ydCB1cmxwYXJzZQorZnJvbSB1cmxsaWIucGFyc2UgaW1wb3J0IHVybHBhcnNlLCB1cmxkZWZyYWcsIHVybHNwbGl0CiBpbXBvcnQgaGFzaGxpYgogCiBsb2dnZXIgPSBsb2dnaW5nLmdldExvZ2dlcigncmVjaXBldG9vbCcpCkBAIC02MSw4ICs2MSw4IEBACiAgICAgICAgIGxpYnBhdGhzID0gbGlzdChzZXQoW2Jhc2VfbGliZGlyLCBsaWJkaXJdKSkKICAgICAgICAgbGlibmFtZV9yZSA9IHJlLmNvbXBpbGUoJ15saWIoLispXC5zby4qJCcpCiAgICAgICAgIHBrZ2xpYm1hcCA9IHt9Ci0gICAgICAgIGZvciBsaWIsIGl0ZW0gaW4gc2hsaWJfcHJvdmlkZXJzLml0ZXJpdGVtcygpOgotICAgICAgICAgICAgZm9yIHBhdGgsIHBrZyBpbiBpdGVtLml0ZXJpdGVtcygpOgorICAgICAgICBmb3IgbGliLCBpdGVtIGluIHNobGliX3Byb3ZpZGVycy5pdGVtcygpOgorICAgICAgICAgICAgZm9yIHBhdGgsIHBrZyBpbiBpdGVtLml0ZW1zKCk6CiAgICAgICAgICAgICAgICAgaWYgcGF0aCBpbiBsaWJwYXRoczoKICAgICAgICAgICAgICAgICAgICAgcmVzID0gbGlibmFtZV9yZS5tYXRjaChsaWIpCiAgICAgICAgICAgICAgICAgICAgIGlmIHJlczoKQEAgLTc0LDcgKzc0LDcgQEAKIAogICAgICAgICAjIE5vdyB0dXJuIGl0IGludG8gYSBsaWJyYXJ5LT5yZWNpcGUgbWFwcGluZwogICAgICAgICBwa2dkYXRhX2RpciA9IGQuZ2V0VmFyKCdQS0dEQVRBX0RJUicsIFRydWUpCi0gICAgICAgIGZvciBsaWJuYW1lLCBwa2cgaW4gcGtnbGlibWFwLml0ZXJpdGVtcygpOgorICAgICAgICBmb3IgbGlibmFtZSwgcGtnIGluIHBrZ2xpYm1hcC5pdGVtcygpOgogICAgICAgICAgICAgdHJ5OgogICAgICAgICAgICAgICAgIHdpdGggb3Blbihvcy5wYXRoLmpvaW4ocGtnZGF0YV9kaXIsICdydW50aW1lJywgcGtnKSkgYXMgZjoKICAgICAgICAgICAgICAgICAgICAgZm9yIGxpbmUgaW4gZjoKQEAgLTE2Nyw3ICsxNjcsNyBAQAogICAgICAgICB1bm1hcHBlZHBjID0gW10KICAgICAgICAgcGNkZXBzID0gbGlzdChzZXQocGNkZXBzKSkKICAgICAgICAgZm9yIHBjZGVwIGluIHBjZGVwczoKLSAgICAgICAgICAgIGlmIGlzaW5zdGFuY2UocGNkZXAsIGJhc2VzdHJpbmcpOgorICAgICAgICAgICAgaWYgaXNpbnN0YW5jZShwY2RlcCwgc3RyKToKICAgICAgICAgICAgICAgICByZWNpcGUgPSByZWNpcGVtYXAuZ2V0KHBjZGVwLCBOb25lKQogICAgICAgICAgICAgICAgIGlmIHJlY2lwZToKICAgICAgICAgICAgICAgICAgICAgZGVwcy5hcHBlbmQocmVjaXBlKQpAQCAtMjU2LDMwICsyNTYsNTYgQEAKIAogZGVmIGRldGVybWluZV9mcm9tX2ZpbGVuYW1lKHNyY2ZpbGUpOgogICAgICIiIkRldGVybWluZSBuYW1lIGFuZCB2ZXJzaW9uIGZyb20gYSBmaWxlbmFtZSIiIgotICAgIHBhcnQgPSAnJworICAgIGlmIGlzX3BhY2thZ2Uoc3JjZmlsZSk6CisgICAgICAgICMgRm9yY2UgZ2V0dGluZyB0aGUgdmFsdWUgZnJvbSB0aGUgcGFja2FnZSBtZXRhZGF0YQorICAgICAgICByZXR1cm4gTm9uZSwgTm9uZQorCiAgICAgaWYgJy50YXIuJyBpbiBzcmNmaWxlOgotICAgICAgICBuYW1lcGFydCA9IHNyY2ZpbGUuc3BsaXQoJy50YXIuJylbMF0ubG93ZXIoKQorICAgICAgICBuYW1lcGFydCA9IHNyY2ZpbGUuc3BsaXQoJy50YXIuJylbMF0KICAgICBlbHNlOgotICAgICAgICBuYW1lcGFydCA9IG9zLnBhdGguc3BsaXRleHQoc3JjZmlsZSlbMF0ubG93ZXIoKQotICAgIHNwbGl0dmFsID0gbmFtZXBhcnQucnNwbGl0KCdfJywgMSkKKyAgICAgICAgbmFtZXBhcnQgPSBvcy5wYXRoLnNwbGl0ZXh0KHNyY2ZpbGUpWzBdCisgICAgbmFtZXBhcnQgPSBuYW1lcGFydC5sb3dlcigpLnJlcGxhY2UoJ18nLCAnLScpCisgICAgaWYgbmFtZXBhcnQuZW5kc3dpdGgoJy5zcmMnKToKKyAgICAgICAgbmFtZXBhcnQgPSBuYW1lcGFydFs6LTRdCisgICAgaWYgbmFtZXBhcnQuZW5kc3dpdGgoJy5vcmlnJyk6CisgICAgICAgIG5hbWVwYXJ0ID0gbmFtZXBhcnRbOi01XQorICAgIHNwbGl0dmFsID0gbmFtZXBhcnQuc3BsaXQoJy0nKQorICAgIGxvZ2dlci5kZWJ1ZygnZGV0ZXJtaW5lX2Zyb21fZmlsZW5hbWU6IHNwbGl0IG5hbWUgJXMgaW50bzogJXMnICUgKHNyY2ZpbGUsIHNwbGl0dmFsKSkKKworICAgIHZlcl9yZSA9IHJlLmNvbXBpbGUoJ152P1swLTldJykKKworICAgIHB2ID0gTm9uZQorICAgIHBuID0gTm9uZQogICAgIGlmIGxlbihzcGxpdHZhbCkgPT0gMToKLSAgICAgICAgc3BsaXR2YWwgPSBuYW1lcGFydC5yc3BsaXQoJy0nLCAxKQotICAgIHBuID0gc3BsaXR2YWxbMF0ucmVwbGFjZSgnXycsICctJykKLSAgICBpZiBsZW4oc3BsaXR2YWwpID4gMToKLSAgICAgICAgaWYgc3BsaXR2YWxbMV1bMF0gaW4gJzAxMjM0NTY3ODknOgotICAgICAgICAgICAgcHYgPSBzcGxpdHZhbFsxXQorICAgICAgICAjIFRyeSB0byBzcGxpdCB0aGUgdmVyc2lvbiBvdXQgaWYgdGhlcmUgaXMgbm8gc2VwYXJhdG9yIChvciBhIC4pCisgICAgICAgIHJlcyA9IHJlLm1hdGNoKCdeKFteMC05XSspKFswLTkuXSsuKikkJywgbmFtZXBhcnQpCisgICAgICAgIGlmIHJlczoKKyAgICAgICAgICAgIGlmIGxlbihyZXMuZ3JvdXAoMSkpID4gMSBhbmQgbGVuKHJlcy5ncm91cCgyKSkgPiAxOgorICAgICAgICAgICAgICAgIHBuID0gcmVzLmdyb3VwKDEpLnJzdHJpcCgnLicpCisgICAgICAgICAgICAgICAgcHYgPSByZXMuZ3JvdXAoMikKICAgICAgICAgZWxzZToKLSAgICAgICAgICAgIHBuID0gJy0nLmpvaW4oc3BsaXR2YWwpLnJlcGxhY2UoJ18nLCAnLScpCi0gICAgICAgICAgICBwdiA9IE5vbmUKKyAgICAgICAgICAgIHBuID0gbmFtZXBhcnQKICAgICBlbHNlOgotICAgICAgICBwdiA9IE5vbmUKKyAgICAgICAgaWYgc3BsaXR2YWxbLTFdIGluIFsnc291cmNlJywgJ3NyYyddOgorICAgICAgICAgICAgc3BsaXR2YWwucG9wKCkKKyAgICAgICAgaWYgbGVuKHNwbGl0dmFsKSA+IDIgYW5kIHJlLm1hdGNoKCdeKGFscGhhfGJldGF8c3RhYmxlfHJlbGVhc2V8cmNbMC05XXxwcmVbMC05XXxwWzAtOV18WzAtOV17OH0pJywgc3BsaXR2YWxbLTFdKSBhbmQgdmVyX3JlLm1hdGNoKHNwbGl0dmFsWy0yXSk6CisgICAgICAgICAgICBwdiA9ICctJy5qb2luKHNwbGl0dmFsWy0yOl0pCisgICAgICAgICAgICBpZiBwdi5lbmRzd2l0aCgnLXJlbGVhc2UnKToKKyAgICAgICAgICAgICAgICBwdiA9IHB2WzotOF0KKyAgICAgICAgICAgIHNwbGl0dmFsID0gc3BsaXR2YWxbOi0yXQorICAgICAgICBlbGlmIHZlcl9yZS5tYXRjaChzcGxpdHZhbFstMV0pOgorICAgICAgICAgICAgcHYgPSBzcGxpdHZhbC5wb3AoKQorICAgICAgICBwbiA9ICctJy5qb2luKHNwbGl0dmFsKQorICAgICAgICBpZiBwdiBhbmQgcHYuc3RhcnRzd2l0aCgndicpOgorICAgICAgICAgICAgcHYgPSBwdlsxOl0KKyAgICBsb2dnZXIuZGVidWcoJ2RldGVybWluZV9mcm9tX2ZpbGVuYW1lOiBuYW1lID0gIiVzIiB2ZXJzaW9uID0gIiVzIicgJSAocG4sIHB2KSkKICAgICByZXR1cm4gKHBuLCBwdikKIAogZGVmIGRldGVybWluZV9mcm9tX3VybChzcmN1cmkpOgogICAgICIiIkRldGVybWluZSBuYW1lIGFuZCB2ZXJzaW9uIGZyb20gYSBVUkwiIiIKICAgICBwbiA9IE5vbmUKICAgICBwdiA9IE5vbmUKLSAgICBwYXJzZXJlcyA9IHVybHBhcnNlLnVybHBhcnNlKHNyY3VyaS5sb3dlcigpLnNwbGl0KCc7JywgMSlbMF0pCisgICAgcGFyc2VyZXMgPSB1cmxwYXJzZShzcmN1cmkubG93ZXIoKS5zcGxpdCgnOycsIDEpWzBdKQogICAgIGlmIHBhcnNlcmVzLnBhdGg6CiAgICAgICAgIGlmICdnaXRodWIuY29tJyBpbiBwYXJzZXJlcy5uZXRsb2M6CiAgICAgICAgICAgICByZXMgPSByZS5zZWFyY2gocicuKi8oLio/KS9hcmNoaXZlLyguKiktZmluYWxcLih0YXJ8emlwKScsIHBhcnNlcmVzLnBhdGgpCkBAIC0zMTAsNDMgKzMzNiw2NiBAQAogICAgICMgb2RkIGludGVyYWN0aW9ucyB3aXRoIHRoZSB1cmxkYXRhIGNhY2hlIHdoaWNoIGxlYWQgdG8gZXJyb3JzCiAgICAgbG9jYWxkYXRhLnNldFZhcignU1JDUkVWJywgJyR7QVVUT1JFVn0nKQogICAgIGJiLmRhdGEudXBkYXRlX2RhdGEobG9jYWxkYXRhKQotICAgIGZldGNoZXIgPSBiYi5mZXRjaDIuRmV0Y2goW3VyaV0sIGxvY2FsZGF0YSkKLSAgICB1cmxkYXRhID0gZmV0Y2hlci51ZAotICAgIGZvciB1IGluIHVybGRhdGE6Ci0gICAgICAgIGlmIHVybGRhdGFbdV0ubWV0aG9kLnN1cHBvcnRzX3NyY3JldigpOgorICAgIHRyeToKKyAgICAgICAgZmV0Y2hlciA9IGJiLmZldGNoMi5GZXRjaChbdXJpXSwgbG9jYWxkYXRhKQorICAgICAgICB1cmxkYXRhID0gZmV0Y2hlci51ZAorICAgICAgICBmb3IgdSBpbiB1cmxkYXRhOgorICAgICAgICAgICAgaWYgdXJsZGF0YVt1XS5tZXRob2Quc3VwcG9ydHNfc3JjcmV2KCk6CisgICAgICAgICAgICAgICAgcmV0dXJuIFRydWUKKyAgICBleGNlcHQgYmIuZmV0Y2gyLkZldGNoRXJyb3IgYXMgZToKKyAgICAgICAgbG9nZ2VyLmRlYnVnKCdGZXRjaEVycm9yIGluIHN1cHBvcnRzX3NyY3JldjogJXMnICUgc3RyKGUpKQorICAgICAgICAjIEZhbGwgYmFjayB0byBiYXNpYyBjaGVjaworICAgICAgICBpZiB1cmkuc3RhcnRzd2l0aCgoJ2dpdDovLycsICdnaXRzbTovLycpKToKICAgICAgICAgICAgIHJldHVybiBUcnVlCiAgICAgcmV0dXJuIEZhbHNlCiAKIGRlZiByZWZvcm1hdF9naXRfdXJpKHVyaSk6CiAgICAgJycnQ29udmVydCBhbnkgaHR0cFtzXTovLy4uLi5naXQgVVJJIGludG8gZ2l0Oi8vLi4uO3Byb3RvY29sPWh0dHBbc10nJycKICAgICBjaGVja3VyaSA9IHVyaS5zcGxpdCgnOycsIDEpWzBdCi0gICAgaWYgY2hlY2t1cmkuZW5kc3dpdGgoJy5naXQnKSBvciAnL2dpdC8nIGluIGNoZWNrdXJpOgotICAgICAgICByZXMgPSByZS5tYXRjaCgnKGh0dHBzPyk6Ly8oW147XSsoXC5naXQpPykoOy4qKT8kJywgdXJpKQorICAgIGlmIGNoZWNrdXJpLmVuZHN3aXRoKCcuZ2l0Jykgb3IgJy9naXQvJyBpbiBjaGVja3VyaSBvciByZS5tYXRjaCgnaHR0cHM/Oi8vZ2l0aHViLmNvbS9bXi9dKy9bXi9dKy8/JCcsIGNoZWNrdXJpKToKKyAgICAgICAgcmVzID0gcmUubWF0Y2goJyhodHRwfGh0dHBzfHNzaCk6Ly8oW147XSsoXC5naXQpPykoOy4qKT8kJywgdXJpKQogICAgICAgICBpZiByZXM6CiAgICAgICAgICAgICAjIE5lZWQgdG8gc3dpdGNoIHRoZSBVUkkgYXJvdW5kIHNvIHRoYXQgdGhlIGdpdCBmZXRjaGVyIGlzIHVzZWQKICAgICAgICAgICAgIHJldHVybiAnZ2l0Oi8vJXM7cHJvdG9jb2w9JXMlcycgJSAocmVzLmdyb3VwKDIpLCByZXMuZ3JvdXAoMSksIHJlcy5ncm91cCg0KSBvciAnJykKKyAgICAgICAgZWxpZiAnQCcgaW4gY2hlY2t1cmk6CisgICAgICAgICAgICAjIENhdGNoIGUuZy4gZ2l0QGdpdC5leGFtcGxlLmNvbTpyZXBvLmdpdAorICAgICAgICAgICAgcmV0dXJuICdnaXQ6Ly8lcztwcm90b2NvbD1zc2gnICUgY2hlY2t1cmkucmVwbGFjZSgnOicsICcvJywgMSkKICAgICByZXR1cm4gdXJpCiAKK2RlZiBpc19wYWNrYWdlKHVybCk6CisgICAgJycnQ2hlY2sgaWYgYSBVUkwgcG9pbnRzIHRvIGEgcGFja2FnZScnJworICAgIGNoZWNrdXJsID0gdXJsLnNwbGl0KCc7JywgMSlbMF0KKyAgICBpZiBjaGVja3VybC5lbmRzd2l0aCgoJy5kZWInLCAnLmlwaycsICcucnBtJywgJy5zcnBtJykpOgorICAgICAgICByZXR1cm4gVHJ1ZQorICAgIHJldHVybiBGYWxzZQorCiBkZWYgY3JlYXRlX3JlY2lwZShhcmdzKToKICAgICBpbXBvcnQgYmIucHJvY2VzcwogICAgIGltcG9ydCB0ZW1wZmlsZQogICAgIGltcG9ydCBzaHV0aWwKKyAgICBpbXBvcnQgb2UucmVjaXBldXRpbHMKIAogICAgIHBrZ2FyY2ggPSAiIgogICAgIGlmIGFyZ3MubWFjaGluZToKICAgICAgICAgcGtnYXJjaCA9ICIke01BQ0hJTkVfQVJDSH0iCiAKKyAgICBleHRyYXZhbHVlcyA9IHt9CiAgICAgY2hlY2tzdW1zID0gKE5vbmUsIE5vbmUpCiAgICAgdGVtcHNyYyA9ICcnCisgICAgc291cmNlID0gYXJncy5zb3VyY2UKICAgICBzcmNzdWJkaXIgPSAnJwogICAgIHNyY3JldiA9ICcke0FVVE9SRVZ9JwotICAgIGlmICc6Ly8nIGluIGFyZ3Muc291cmNlOgorCisgICAgaWYgb3MucGF0aC5pc2ZpbGUoc291cmNlKToKKyAgICAgICAgc291cmNlID0gJ2ZpbGU6Ly8lcycgJSBvcy5wYXRoLmFic3BhdGgoc291cmNlKQorCisgICAgaWYgc2NyaXB0dXRpbHMuaXNfc3JjX3VybChzb3VyY2UpOgogICAgICAgICAjIEZldGNoIGEgVVJMCi0gICAgICAgIGZldGNodXJpID0gcmVmb3JtYXRfZ2l0X3VyaSh1cmxwYXJzZS51cmxkZWZyYWcoYXJncy5zb3VyY2UpWzBdKQorICAgICAgICBmZXRjaHVyaSA9IHJlZm9ybWF0X2dpdF91cmkodXJsZGVmcmFnKHNvdXJjZSlbMF0pCiAgICAgICAgIGlmIGFyZ3MuYmluYXJ5OgogICAgICAgICAgICAgIyBBc3N1bWUgdGhlIGFyY2hpdmUgY29udGFpbnMgdGhlIGRpcmVjdG9yeSBzdHJ1Y3R1cmUgdmVyYmF0aW0KICAgICAgICAgICAgICMgc28gd2UgbmVlZCB0byBleHRyYWN0IHRvIGEgc3ViZGlyZWN0b3J5Ci0gICAgICAgICAgICBmZXRjaHVyaSArPSAnO3N1YmRpcj0lcycgJSBvcy5wYXRoLnNwbGl0ZXh0KG9zLnBhdGguYmFzZW5hbWUodXJscGFyc2UudXJsc3BsaXQoZmV0Y2h1cmkpLnBhdGgpKVswXQorICAgICAgICAgICAgZmV0Y2h1cmkgKz0gJztzdWJkaXI9JHtCUH0nCiAgICAgICAgIHNyY3VyaSA9IGZldGNodXJpCiAgICAgICAgIHJldl9yZSA9IHJlLmNvbXBpbGUoJztyZXY9KFteO10rKScpCiAgICAgICAgIHJlcyA9IHJldl9yZS5zZWFyY2goc3JjdXJpKQpAQCAtMzU3LDEwICs0MDYsNyBAQAogICAgICAgICBzcmN0cmVlID0gdGVtcHNyYwogICAgICAgICBpZiBmZXRjaHVyaS5zdGFydHN3aXRoKCducG06Ly8nKToKICAgICAgICAgICAgICMgQ2hlY2sgaWYgbnBtIGlzIGF2YWlsYWJsZQotICAgICAgICAgICAgbnBtID0gYmIudXRpbHMud2hpY2godGluZm9pbC5jb25maWdfZGF0YS5nZXRWYXIoJ1BBVEgnLCBUcnVlKSwgJ25wbScpCi0gICAgICAgICAgICBpZiBub3QgbnBtOgotICAgICAgICAgICAgICAgIGxvZ2dlci5lcnJvcignbnBtOi8vIFVSTCByZXF1ZXN0ZWQgYnV0IG5wbSBpcyBub3QgYXZhaWxhYmxlIC0geW91IG5lZWQgdG8gZWl0aGVyIGJ1aWxkIG5vZGVqcy1uYXRpdmUgb3IgaW5zdGFsbCBucG0gdXNpbmcgeW91ciBwYWNrYWdlIG1hbmFnZXInKQotICAgICAgICAgICAgICAgIHN5cy5leGl0KDEpCisgICAgICAgICAgICBjaGVja19ucG0odGluZm9pbC5jb25maWdfZGF0YSkKICAgICAgICAgbG9nZ2VyLmluZm8oJ0ZldGNoaW5nICVzLi4uJyAlIHNyY3VyaSkKICAgICAgICAgdHJ5OgogICAgICAgICAgICAgY2hlY2tzdW1zID0gc2NyaXB0dXRpbHMuZmV0Y2hfdXJpKHRpbmZvaWwuY29uZmlnX2RhdGEsIGZldGNodXJpLCBzcmN0cmVlLCBzcmNyZXYpCkBAIC0zNzcsMTkgKzQyMyw1MCBAQAogICAgICAgICAgICAgICAgIHNyY3N1YmRpciA9IGRpcmxpc3RbMF0KICAgICAgICAgICAgICAgICBzcmN0cmVlID0gb3MucGF0aC5qb2luKHNyY3RyZWUsIHNyY3N1YmRpcikKICAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgd2l0aCBvcGVuKHNpbmdsZWl0ZW0sICdyJykgYXMgZjoKKyAgICAgICAgICAgICAgICB3aXRoIG9wZW4oc2luZ2xlaXRlbSwgJ3InLCBlcnJvcnM9J3N1cnJvZ2F0ZWVzY2FwZScpIGFzIGY6CiAgICAgICAgICAgICAgICAgICAgIGlmICc8aHRtbCcgaW4gZi5yZWFkKDEwMCkubG93ZXIoKToKICAgICAgICAgICAgICAgICAgICAgICAgIGxvZ2dlci5lcnJvcignRmV0Y2hpbmcgIiVzIiByZXR1cm5lZCBhIHNpbmdsZSBIVE1MIHBhZ2UgLSBjaGVjayB0aGUgVVJMIGlzIGNvcnJlY3QgYW5kIGZ1bmN0aW9uYWwnICUgZmV0Y2h1cmkpCiAgICAgICAgICAgICAgICAgICAgICAgICBzeXMuZXhpdCgxKQorICAgICAgICBpZiBvcy5wYXRoLmV4aXN0cyhvcy5wYXRoLmpvaW4oc3JjdHJlZSwgJy5naXRtb2R1bGVzJykpIGFuZCBzcmN1cmkuc3RhcnRzd2l0aCgnZ2l0Oi8vJyk6CisgICAgICAgICAgICBzcmN1cmkgPSAnZ2l0c206Ly8nICsgc3JjdXJpWzY6XQorICAgICAgICAgICAgbG9nZ2VyLmluZm8oJ0ZldGNoaW5nIHN1Ym1vZHVsZXMuLi4nKQorICAgICAgICAgICAgYmIucHJvY2Vzcy5ydW4oJ2dpdCBzdWJtb2R1bGUgdXBkYXRlIC0taW5pdCAtLXJlY3Vyc2l2ZScsIGN3ZD1zcmN0cmVlKQorCisgICAgICAgIGlmIGlzX3BhY2thZ2UoZmV0Y2h1cmkpOgorICAgICAgICAgICAgdG1wZmRpciA9IHRlbXBmaWxlLm1rZHRlbXAocHJlZml4PSdyZWNpcGV0b29sLScpCisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgcGtnZmlsZSA9IE5vbmUKKyAgICAgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgICAgIGZpbGV1cmkgPSBmZXRjaHVyaSArICc7dW5wYWNrPTAnCisgICAgICAgICAgICAgICAgICAgIHNjcmlwdHV0aWxzLmZldGNoX3VyaSh0aW5mb2lsLmNvbmZpZ19kYXRhLCBmaWxldXJpLCB0bXBmZGlyLCBzcmNyZXYpCisgICAgICAgICAgICAgICAgICAgIGZvciByb290LCBfLCBmaWxlcyBpbiBvcy53YWxrKHRtcGZkaXIpOgorICAgICAgICAgICAgICAgICAgICAgICAgZm9yIGYgaW4gZmlsZXM6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGtnZmlsZSA9IG9zLnBhdGguam9pbihyb290LCBmKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgICAgICAgICAgZXhjZXB0IGJiLmZldGNoMi5CQkZldGNoRXhjZXB0aW9uIGFzIGU6CisgICAgICAgICAgICAgICAgICAgIGxvZ2dlci53YXJuKCdTZWNvbmQgZmV0Y2ggdG8gZ2V0IG1ldGFkYXRhIGZhaWxlZDogJXMnICUgc3RyKGUpLnJzdHJpcCgpKQorCisgICAgICAgICAgICAgICAgaWYgcGtnZmlsZToKKyAgICAgICAgICAgICAgICAgICAgaWYgcGtnZmlsZS5lbmRzd2l0aCgoJy5kZWInLCAnLmlwaycpKToKKyAgICAgICAgICAgICAgICAgICAgICAgIHN0ZG91dCwgXyA9IGJiLnByb2Nlc3MucnVuKCdhciB4ICVzIGNvbnRyb2wudGFyLmd6JyAlIHBrZ2ZpbGUsIGN3ZD10bXBmZGlyKQorICAgICAgICAgICAgICAgICAgICAgICAgc3Rkb3V0LCBfID0gYmIucHJvY2Vzcy5ydW4oJ3RhciB4ZiBjb250cm9sLnRhci5neiAuL2NvbnRyb2wnLCBjd2Q9dG1wZmRpcikKKyAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlcyA9IGNvbnZlcnRfZGViaWFuKHRtcGZkaXIpCisgICAgICAgICAgICAgICAgICAgICAgICBleHRyYXZhbHVlcy51cGRhdGUodmFsdWVzKQorICAgICAgICAgICAgICAgICAgICBlbGlmIHBrZ2ZpbGUuZW5kc3dpdGgoKCcucnBtJywgJy5zcnBtJykpOgorICAgICAgICAgICAgICAgICAgICAgICAgc3Rkb3V0LCBfID0gYmIucHJvY2Vzcy5ydW4oJ3JwbSAtcXAgLS14bWwgJXMgPiBwa2dpbmZvLnhtbCcgJSBwa2dmaWxlLCBjd2Q9dG1wZmRpcikKKyAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlcyA9IGNvbnZlcnRfcnBtX3htbChvcy5wYXRoLmpvaW4odG1wZmRpciwgJ3BrZ2luZm8ueG1sJykpCisgICAgICAgICAgICAgICAgICAgICAgICBleHRyYXZhbHVlcy51cGRhdGUodmFsdWVzKQorICAgICAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgICAgICBzaHV0aWwucm10cmVlKHRtcGZkaXIpCiAgICAgZWxzZToKICAgICAgICAgIyBBc3N1bWUgd2UncmUgcG9pbnRpbmcgdG8gYW4gZXhpc3Rpbmcgc291cmNlIHRyZWUKICAgICAgICAgaWYgYXJncy5leHRyYWN0X3RvOgogICAgICAgICAgICAgbG9nZ2VyLmVycm9yKCctLWV4dHJhY3QtdG8gY2Fubm90IGJlIHNwZWNpZmllZCBpZiBzb3VyY2UgaXMgYSBkaXJlY3RvcnknKQogICAgICAgICAgICAgc3lzLmV4aXQoMSkKLSAgICAgICAgaWYgbm90IG9zLnBhdGguaXNkaXIoYXJncy5zb3VyY2UpOgotICAgICAgICAgICAgbG9nZ2VyLmVycm9yKCdJbnZhbGlkIHNvdXJjZSBkaXJlY3RvcnkgJXMnICUgYXJncy5zb3VyY2UpCisgICAgICAgIGlmIG5vdCBvcy5wYXRoLmlzZGlyKHNvdXJjZSk6CisgICAgICAgICAgICBsb2dnZXIuZXJyb3IoJ0ludmFsaWQgc291cmNlIGRpcmVjdG9yeSAlcycgJSBzb3VyY2UpCiAgICAgICAgICAgICBzeXMuZXhpdCgxKQotICAgICAgICBzcmN0cmVlID0gYXJncy5zb3VyY2UKKyAgICAgICAgc3JjdHJlZSA9IHNvdXJjZQogICAgICAgICBzcmN1cmkgPSAnJwogICAgICAgICBpZiBvcy5wYXRoLmV4aXN0cyhvcy5wYXRoLmpvaW4oc3JjdHJlZSwgJy5naXQnKSk6CiAgICAgICAgICAgICAjIFRyeSB0byBnZXQgdXBzdHJlYW0gcmVwbyBsb2NhdGlvbiBmcm9tIG9yaWdpbiByZW1vdGUKQEAgLTQwMSw3ICs0NzgsNyBAQAogICAgICAgICAgICAgICAgIGZvciBsaW5lIGluIHN0ZG91dC5zcGxpdGxpbmVzKCk6CiAgICAgICAgICAgICAgICAgICAgIHNwbGl0bGluZSA9IGxpbmUuc3BsaXQoKQogICAgICAgICAgICAgICAgICAgICBpZiBsZW4oc3BsaXRsaW5lKSA+IDE6Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiBzcGxpdGxpbmVbMF0gPT0gJ29yaWdpbicgYW5kICc6Ly8nIGluIHNwbGl0bGluZVsxXToKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIHNwbGl0bGluZVswXSA9PSAnb3JpZ2luJyBhbmQgc2NyaXB0dXRpbHMuaXNfc3JjX3VybChzcGxpdGxpbmVbMV0pOgogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNyY3VyaSA9IHJlZm9ybWF0X2dpdF91cmkoc3BsaXRsaW5lWzFdKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNyY3N1YmRpciA9ICdnaXQnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsKQEAgLTQyOSwzNyArNTA2LDEyIEBACiAgICAgbGluZXNfYmVmb3JlLmFwcGVuZCgnIyBSZWNpcGUgY3JlYXRlZCBieSAlcycgJSBvcy5wYXRoLmJhc2VuYW1lKHN5cy5hcmd2WzBdKSkKICAgICBsaW5lc19iZWZvcmUuYXBwZW5kKCcjIFRoaXMgaXMgdGhlIGJhc2lzIG9mIGEgcmVjaXBlIGFuZCBtYXkgbmVlZCBmdXJ0aGVyIGVkaXRpbmcgaW4gb3JkZXIgdG8gYmUgZnVsbHkgZnVuY3Rpb25hbC4nKQogICAgIGxpbmVzX2JlZm9yZS5hcHBlbmQoJyMgKEZlZWwgZnJlZSB0byByZW1vdmUgdGhlc2UgY29tbWVudHMgd2hlbiBlZGl0aW5nLiknKQotICAgIGxpbmVzX2JlZm9yZS5hcHBlbmQoJyMnKQotCi0gICAgbGljdmFsdWVzID0gZ3Vlc3NfbGljZW5zZShzcmN0cmVlX3VzZSkKLSAgICBsaWNfZmlsZXNfY2hrc3VtID0gW10KLSAgICBpZiBsaWN2YWx1ZXM6Ci0gICAgICAgIGxpY2Vuc2VzID0gW10KLSAgICAgICAgZm9yIGxpY3ZhbHVlIGluIGxpY3ZhbHVlczoKLSAgICAgICAgICAgIGlmIG5vdCBsaWN2YWx1ZVswXSBpbiBsaWNlbnNlczoKLSAgICAgICAgICAgICAgICBsaWNlbnNlcy5hcHBlbmQobGljdmFsdWVbMF0pCi0gICAgICAgICAgICBsaWNfZmlsZXNfY2hrc3VtLmFwcGVuZCgnZmlsZTovLyVzO21kNT0lcycgJSAobGljdmFsdWVbMV0sIGxpY3ZhbHVlWzJdKSkKLSAgICAgICAgbGluZXNfYmVmb3JlLmFwcGVuZCgnIyBXQVJOSU5HOiB0aGUgZm9sbG93aW5nIExJQ0VOU0UgYW5kIExJQ19GSUxFU19DSEtTVU0gdmFsdWVzIGFyZSBiZXN0IGd1ZXNzZXMgLSBpdCBpcycpCi0gICAgICAgIGxpbmVzX2JlZm9yZS5hcHBlbmQoJyMgeW91ciByZXNwb25zaWJpbGl0eSB0byB2ZXJpZnkgdGhhdCB0aGUgdmFsdWVzIGFyZSBjb21wbGV0ZSBhbmQgY29ycmVjdC4nKQotICAgICAgICBpZiBsZW4obGljdmFsdWVzKSA+IDE6Ci0gICAgICAgICAgICBsaW5lc19iZWZvcmUuYXBwZW5kKCcjJykKLSAgICAgICAgICAgIGxpbmVzX2JlZm9yZS5hcHBlbmQoJyMgTk9URTogbXVsdGlwbGUgbGljZW5zZXMgaGF2ZSBiZWVuIGRldGVjdGVkOyBpZiB0aGF0IGlzIGNvcnJlY3QgeW91IHNob3VsZCBzZXBhcmF0ZScpCi0gICAgICAgICAgICBsaW5lc19iZWZvcmUuYXBwZW5kKCcjIHRoZXNlIGluIHRoZSBMSUNFTlNFIHZhbHVlIHVzaW5nICYgaWYgdGhlIG11bHRpcGxlIGxpY2Vuc2VzIGFsbCBhcHBseSwgb3IgfCBpZiB0aGVyZScpCi0gICAgICAgICAgICBsaW5lc19iZWZvcmUuYXBwZW5kKCcjIGlzIGEgY2hvaWNlIGJldHdlZW4gdGhlIG11bHRpcGxlIGxpY2Vuc2VzLiBJZiBpbiBkb3VidCwgY2hlY2sgdGhlIGFjY29tcGFueWluZycpCi0gICAgICAgICAgICBsaW5lc19iZWZvcmUuYXBwZW5kKCcjIGRvY3VtZW50YXRpb24gdG8gZGV0ZXJtaW5lIHdoaWNoIHNpdHVhdGlvbiBpcyBhcHBsaWNhYmxlLicpCi0gICAgZWxzZToKLSAgICAgICAgbGluZXNfYmVmb3JlLmFwcGVuZCgnIyBVbmFibGUgdG8gZmluZCBhbnkgZmlsZXMgdGhhdCBsb29rZWQgbGlrZSBsaWNlbnNlIHN0YXRlbWVudHMuIENoZWNrIHRoZSBhY2NvbXBhbnlpbmcnKQotICAgICAgICBsaW5lc19iZWZvcmUuYXBwZW5kKCcjIGRvY3VtZW50YXRpb24gYW5kIHNvdXJjZSBoZWFkZXJzIGFuZCBzZXQgTElDRU5TRSBhbmQgTElDX0ZJTEVTX0NIS1NVTSBhY2NvcmRpbmdseS4nKQotICAgICAgICBsaW5lc19iZWZvcmUuYXBwZW5kKCcjJykKLSAgICAgICAgbGluZXNfYmVmb3JlLmFwcGVuZCgnIyBOT1RFOiBMSUNFTlNFIGlzIGJlaW5nIHNldCB0byAiQ0xPU0VEIiB0byBhbGxvdyB5b3UgdG8gYXQgbGVhc3Qgc3RhcnQgYnVpbGRpbmcgLSBpZicpCi0gICAgICAgIGxpbmVzX2JlZm9yZS5hcHBlbmQoJyMgdGhpcyBpcyBub3QgYWNjdXJhdGUgd2l0aCByZXNwZWN0IHRvIHRoZSBsaWNlbnNpbmcgb2YgdGhlIHNvZnR3YXJlIGJlaW5nIGJ1aWx0IChpdCcpCi0gICAgICAgIGxpbmVzX2JlZm9yZS5hcHBlbmQoJyMgd2lsbCBub3QgYmUgaW4gbW9zdCBjYXNlcykgeW91IG11c3Qgc3BlY2lmeSB0aGUgY29ycmVjdCB2YWx1ZSBiZWZvcmUgdXNpbmcgdGhpcycpCi0gICAgICAgIGxpbmVzX2JlZm9yZS5hcHBlbmQoJyMgcmVjaXBlIGZvciBhbnl0aGluZyBvdGhlciB0aGFuIGluaXRpYWwgdGVzdGluZy9kZXZlbG9wbWVudCEnKQotICAgICAgICBsaWNlbnNlcyA9IFsnQ0xPU0VEJ10KLSAgICBsaW5lc19iZWZvcmUuYXBwZW5kKCdMSUNFTlNFID0gIiVzIicgJSAnICcuam9pbihsaWNlbnNlcykpCi0gICAgbGluZXNfYmVmb3JlLmFwcGVuZCgnTElDX0ZJTEVTX0NIS1NVTSA9ICIlcyInICUgJyBcXFxuICAgICAgICAgICAgICAgICAgICAnLmpvaW4obGljX2ZpbGVzX2Noa3N1bSkpCisgICAgIyBXZSBuZWVkIGEgYmxhbmsgbGluZSBoZXJlIHNvIHRoYXQgcGF0Y2hfcmVjaXBlX2xpbmVzIGNhbiByZXdpbmQgYmVmb3JlIHRoZSBMSUNFTlNFIGNvbW1lbnRzCiAgICAgbGluZXNfYmVmb3JlLmFwcGVuZCgnJykKIAorICAgIGhhbmRsZWQgPSBbXQorICAgIGxpY3ZhbHVlcyA9IGhhbmRsZV9saWNlbnNlX3ZhcnMoc3JjdHJlZV91c2UsIGxpbmVzX2JlZm9yZSwgaGFuZGxlZCwgZXh0cmF2YWx1ZXMsIHRpbmZvaWwuY29uZmlnX2RhdGEpCisKICAgICBjbGFzc2VzID0gW10KIAogICAgICMgRklYTUUgVGhpcyBpcyBraW5kIG9mIGEgaGFjaywgd2UgcHJvYmFibHkgb3VnaHQgdG8gYmUgdXNpbmcgYml0YmFrZSB0byBkbyB0aGlzCkBAIC01MTUsMTAgKzU2NywxNiBAQAogICAgICAgICBsaW5lc19iZWZvcmUuYXBwZW5kKCcnKQogICAgICAgICBsaW5lc19iZWZvcmUuYXBwZW5kKCcjIE1vZGlmeSB0aGVzZSBhcyBkZXNpcmVkJykKICAgICAgICAgbGluZXNfYmVmb3JlLmFwcGVuZCgnUFYgPSAiJXMrZ2l0JHtTUkNQVn0iJyAlIChyZWFscHYgb3IgJzEuMCcpKQorICAgICAgICBpZiBub3QgYXJncy5hdXRvcmV2IGFuZCBzcmNyZXYgPT0gJyR7QVVUT1JFVn0nOgorICAgICAgICAgICAgaWYgb3MucGF0aC5leGlzdHMob3MucGF0aC5qb2luKHNyY3RyZWUsICcuZ2l0JykpOgorICAgICAgICAgICAgICAgIChzdGRvdXQsIF8pID0gYmIucHJvY2Vzcy5ydW4oJ2dpdCByZXYtcGFyc2UgSEVBRCcsIGN3ZD1zcmN0cmVlKQorICAgICAgICAgICAgc3JjcmV2ID0gc3Rkb3V0LnJzdHJpcCgpCiAgICAgICAgIGxpbmVzX2JlZm9yZS5hcHBlbmQoJ1NSQ1JFViA9ICIlcyInICUgc3JjcmV2KQogICAgIGxpbmVzX2JlZm9yZS5hcHBlbmQoJycpCiAKLSAgICBpZiBzcmNzdWJkaXI6CisgICAgaWYgc3Jjc3ViZGlyIGFuZCBub3QgYXJncy5iaW5hcnk6CisgICAgICAgICMgKGZvciBiaW5hcnkgcGFja2FnZXMgd2UgZXhwbGljaXRseSBzcGVjaWZ5IHN1YmRpcj0gd2hlbiBmZXRjaGluZyB0bworICAgICAgICAjIG1hdGNoIHRoZSBkZWZhdWx0IHZhbHVlIG9mIFMsIHNvIHdlIGRvbid0IG5lZWQgdG8gc2V0IGl0IGluIHRoYXQgY2FzZSkKICAgICAgICAgbGluZXNfYmVmb3JlLmFwcGVuZCgnUyA9ICIke1dPUktESVJ9LyVzIicgJSBzcmNzdWJkaXIpCiAgICAgICAgIGxpbmVzX2JlZm9yZS5hcHBlbmQoJycpCiAKQEAgLTU0OSw0MCArNjA3LDM2IEBACiAgICAgaGFuZGxlcnMgPSBbaXRlbVswXSBmb3IgaXRlbSBpbiBoYW5kbGVyc10KIAogICAgICMgQXBwbHkgdGhlIGhhbmRsZXJzCi0gICAgaGFuZGxlZCA9IFtdCi0gICAgaGFuZGxlZC5hcHBlbmQoKCdsaWNlbnNlJywgbGljdmFsdWVzKSkKLQogICAgIGlmIGFyZ3MuYmluYXJ5OgogICAgICAgICBjbGFzc2VzLmFwcGVuZCgnYmluX3BhY2thZ2UnKQogICAgICAgICBoYW5kbGVkLmFwcGVuZCgnYnVpbGRzeXN0ZW0nKQogCi0gICAgZXh0cmF2YWx1ZXMgPSB7fQogICAgIGZvciBoYW5kbGVyIGluIGhhbmRsZXJzOgogICAgICAgICBoYW5kbGVyLnByb2Nlc3Moc3JjdHJlZV91c2UsIGNsYXNzZXMsIGxpbmVzX2JlZm9yZSwgbGluZXNfYWZ0ZXIsIGhhbmRsZWQsIGV4dHJhdmFsdWVzKQogCiAgICAgZXh0cmFmaWxlcyA9IGV4dHJhdmFsdWVzLnBvcCgnZXh0cmFmaWxlcycsIHt9KQorICAgIGV4dHJhX3BuID0gZXh0cmF2YWx1ZXMucG9wKCdQTicsIE5vbmUpCisgICAgZXh0cmFfcHYgPSBleHRyYXZhbHVlcy5wb3AoJ1BWJywgTm9uZSkKIAotICAgIGlmIG5vdCByZWFscHY6Ci0gICAgICAgIHJlYWxwdiA9IGV4dHJhdmFsdWVzLmdldCgnUFYnLCBOb25lKQotICAgICAgICBpZiByZWFscHY6Ci0gICAgICAgICAgICBpZiBub3QgdmFsaWRhdGVfcHYocmVhbHB2KToKLSAgICAgICAgICAgICAgICByZWFscHYgPSBOb25lCi0gICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgIHJlYWxwdiA9IHJlYWxwdi5sb3dlcigpLnNwbGl0KClbMF0KLSAgICAgICAgICAgICAgICBpZiAnXycgaW4gcmVhbHB2OgotICAgICAgICAgICAgICAgICAgICByZWFscHYgPSByZWFscHYucmVwbGFjZSgnXycsICctJykKLSAgICBpZiBub3QgcG46Ci0gICAgICAgIHBuID0gZXh0cmF2YWx1ZXMuZ2V0KCdQTicsIE5vbmUpCi0gICAgICAgIGlmIHBuOgotICAgICAgICAgICAgaWYgcG4uc3RhcnRzd2l0aCgnR05VICcpOgotICAgICAgICAgICAgICAgIHBuID0gcG5bNDpdCi0gICAgICAgICAgICBpZiAnICcgaW4gcG46Ci0gICAgICAgICAgICAgICAgIyBQcm9iYWJseSBhIGRlc2NyaXB0aXZlIGlkZW50aWZpZXIgcmF0aGVyIHRoYW4gYSBwcm9wZXIgbmFtZQotICAgICAgICAgICAgICAgIHBuID0gTm9uZQotICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICBwbiA9IHBuLmxvd2VyKCkKLSAgICAgICAgICAgICAgICBpZiAnXycgaW4gcG46Ci0gICAgICAgICAgICAgICAgICAgIHBuID0gcG4ucmVwbGFjZSgnXycsICctJykKKyAgICBpZiBleHRyYV9wdiBhbmQgbm90IHJlYWxwdjoKKyAgICAgICAgcmVhbHB2ID0gZXh0cmFfcHYKKyAgICAgICAgaWYgbm90IHZhbGlkYXRlX3B2KHJlYWxwdik6CisgICAgICAgICAgICByZWFscHYgPSBOb25lCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICByZWFscHYgPSByZWFscHYubG93ZXIoKS5zcGxpdCgpWzBdCisgICAgICAgICAgICBpZiAnXycgaW4gcmVhbHB2OgorICAgICAgICAgICAgICAgIHJlYWxwdiA9IHJlYWxwdi5yZXBsYWNlKCdfJywgJy0nKQorICAgIGlmIGV4dHJhX3BuIGFuZCBub3QgcG46CisgICAgICAgIHBuID0gZXh0cmFfcG4KKyAgICAgICAgaWYgcG4uc3RhcnRzd2l0aCgnR05VICcpOgorICAgICAgICAgICAgcG4gPSBwbls0Ol0KKyAgICAgICAgaWYgJyAnIGluIHBuOgorICAgICAgICAgICAgIyBQcm9iYWJseSBhIGRlc2NyaXB0aXZlIGlkZW50aWZpZXIgcmF0aGVyIHRoYW4gYSBwcm9wZXIgbmFtZQorICAgICAgICAgICAgcG4gPSBOb25lCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBwbiA9IHBuLmxvd2VyKCkKKyAgICAgICAgICAgIGlmICdfJyBpbiBwbjoKKyAgICAgICAgICAgICAgICBwbiA9IHBuLnJlcGxhY2UoJ18nLCAnLScpCiAKICAgICBpZiBub3Qgb3V0ZmlsZToKICAgICAgICAgaWYgbm90IHBuOgpAQCAtNTkwLDggKzY0NCwxMSBAQAogICAgICAgICAgICAgIyBkZXZ0b29sIGxvb2tzIGZvciB0aGlzIHNwZWNpZmljIGV4aXQgY29kZSwgc28gZG9uJ3QgY2hhbmdlIGl0CiAgICAgICAgICAgICBzeXMuZXhpdCgxNSkKICAgICAgICAgZWxzZToKLSAgICAgICAgICAgIGlmIHNyY3VyaSBhbmQgc3JjdXJpLnN0YXJ0c3dpdGgoKCdnaXQ6Ly8nLCAnaGc6Ly8nLCAnc3ZuOi8vJykpOgotICAgICAgICAgICAgICAgIG91dGZpbGUgPSAnJXNfJXMuYmInICUgKHBuLCBzcmN1cmkuc3BsaXQoJzonLCAxKVswXSkKKyAgICAgICAgICAgIGlmIHNyY3VyaSBhbmQgc3JjdXJpLnN0YXJ0c3dpdGgoKCdnaXRzbTovLycsICdnaXQ6Ly8nLCAnaGc6Ly8nLCAnc3ZuOi8vJykpOgorICAgICAgICAgICAgICAgIHN1ZmZpeCA9IHNyY3VyaS5zcGxpdCgnOicsIDEpWzBdCisgICAgICAgICAgICAgICAgaWYgc3VmZml4ID09ICdnaXRzbSc6CisgICAgICAgICAgICAgICAgICAgIHN1ZmZpeCA9ICdnaXQnCisgICAgICAgICAgICAgICAgb3V0ZmlsZSA9ICclc18lcy5iYicgJSAocG4sIHN1ZmZpeCkKICAgICAgICAgICAgIGVsaWYgcmVhbHB2OgogICAgICAgICAgICAgICAgIG91dGZpbGUgPSAnJXNfJXMuYmInICUgKHBuLCByZWFscHYpCiAgICAgICAgICAgICBlbHNlOgpAQCAtNjEwLDcgKzY2Nyw3IEBACiAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICBleHRyYW91dGRpciA9IG9zLnBhdGguam9pbihvcy5wYXRoLmRpcm5hbWUob3V0ZmlsZSksIHBuKQogICAgICAgICBiYi51dGlscy5ta2RpcmhpZXIoZXh0cmFvdXRkaXIpCi0gICAgICAgIGZvciBkZXN0Zm4sIGV4dHJhZmlsZSBpbiBleHRyYWZpbGVzLml0ZXJpdGVtcygpOgorICAgICAgICBmb3IgZGVzdGZuLCBleHRyYWZpbGUgaW4gZXh0cmFmaWxlcy5pdGVtcygpOgogICAgICAgICAgICAgc2h1dGlsLm1vdmUoZXh0cmFmaWxlLCBvcy5wYXRoLmpvaW4oZXh0cmFvdXRkaXIsIGRlc3RmbikpCiAKICAgICBsaW5lcyA9IGxpbmVzX2JlZm9yZQpAQCAtNjYyLDYgKzcxOSwxMiBAQAogICAgICAgICBvdXRsaW5lcy5hcHBlbmQoJycpCiAgICAgb3V0bGluZXMuZXh0ZW5kKGxpbmVzX2FmdGVyKQogCisgICAgaWYgZXh0cmF2YWx1ZXM6CisgICAgICAgIGlmICdMSUNFTlNFJyBpbiBleHRyYXZhbHVlcyBhbmQgbm90IGxpY3ZhbHVlczoKKyAgICAgICAgICAgICMgRG9uJ3QgYmxvdyBhd2F5ICdDTE9TRUQnIHZhbHVlIHRoYXQgY29tbWVudHMgc2F5IHdlIHNldAorICAgICAgICAgICAgZGVsIGV4dHJhdmFsdWVzWydMSUNFTlNFJ10KKyAgICAgICAgXywgb3V0bGluZXMgPSBvZS5yZWNpcGV1dGlscy5wYXRjaF9yZWNpcGVfbGluZXMob3V0bGluZXMsIGV4dHJhdmFsdWVzLCB0cmFpbGluZ19uZXdsaW5lPUZhbHNlKQorCiAgICAgaWYgYXJncy5leHRyYWN0X3RvOgogICAgICAgICBzY3JpcHR1dGlscy5naXRfY29udmVydF9zdGFuZGFsb25lX2Nsb25lKHNyY3RyZWUpCiAgICAgICAgIGlmIG9zLnBhdGguaXNkaXIoYXJncy5leHRyYWN0X3RvKToKQEAgLTY3OSwxNCArNzQyLDcyIEBACiAgICAgICAgIHN5cy5zdGRvdXQud3JpdGUoJ1xuJy5qb2luKG91dGxpbmVzKSArICdcbicpCiAgICAgZWxzZToKICAgICAgICAgd2l0aCBvcGVuKG91dGZpbGUsICd3JykgYXMgZjoKLSAgICAgICAgICAgIGYud3JpdGUoJ1xuJy5qb2luKG91dGxpbmVzKSArICdcbicpCisgICAgICAgICAgICBsYXN0bGluZSA9IE5vbmUKKyAgICAgICAgICAgIGZvciBsaW5lIGluIG91dGxpbmVzOgorICAgICAgICAgICAgICAgIGlmIG5vdCBsYXN0bGluZSBhbmQgbm90IGxpbmU6CisgICAgICAgICAgICAgICAgICAgICMgU2tpcCBleHRyYSBibGFuayBsaW5lcworICAgICAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgICAgIGYud3JpdGUoJyVzXG4nICUgbGluZSkKKyAgICAgICAgICAgICAgICBsYXN0bGluZSA9IGxpbmUKICAgICAgICAgbG9nZ2VyLmluZm8oJ1JlY2lwZSAlcyBoYXMgYmVlbiBjcmVhdGVkOyBmdXJ0aGVyIGVkaXRpbmcgbWF5IGJlIHJlcXVpcmVkIHRvIG1ha2UgaXQgZnVsbHkgZnVuY3Rpb25hbCcgJSBvdXRmaWxlKQogCiAgICAgaWYgdGVtcHNyYzoKLSAgICAgICAgc2h1dGlsLnJtdHJlZSh0ZW1wc3JjKQorICAgICAgICBpZiBhcmdzLmtlZXBfdGVtcDoKKyAgICAgICAgICAgIGxvZ2dlci5pbmZvKCdQcmVzZXJ2aW5nIHRlbXBvcmFyeSBkaXJlY3RvcnkgJXMnICUgdGVtcHNyYykKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNodXRpbC5ybXRyZWUodGVtcHNyYykKIAogICAgIHJldHVybiAwCiAKK2RlZiBoYW5kbGVfbGljZW5zZV92YXJzKHNyY3RyZWUsIGxpbmVzX2JlZm9yZSwgaGFuZGxlZCwgZXh0cmF2YWx1ZXMsIGQpOgorICAgIGxpY3ZhbHVlcyA9IGd1ZXNzX2xpY2Vuc2Uoc3JjdHJlZSwgZCkKKyAgICBsaWNfZmlsZXNfY2hrc3VtID0gW10KKyAgICBsaWNfdW5rbm93biA9IFtdCisgICAgaWYgbGljdmFsdWVzOgorICAgICAgICBsaWNlbnNlcyA9IFtdCisgICAgICAgIGZvciBsaWN2YWx1ZSBpbiBsaWN2YWx1ZXM6CisgICAgICAgICAgICBpZiBub3QgbGljdmFsdWVbMF0gaW4gbGljZW5zZXM6CisgICAgICAgICAgICAgICAgbGljZW5zZXMuYXBwZW5kKGxpY3ZhbHVlWzBdKQorICAgICAgICAgICAgbGljX2ZpbGVzX2Noa3N1bS5hcHBlbmQoJ2ZpbGU6Ly8lczttZDU9JXMnICUgKGxpY3ZhbHVlWzFdLCBsaWN2YWx1ZVsyXSkpCisgICAgICAgICAgICBpZiBsaWN2YWx1ZVswXSA9PSAnVW5rbm93bic6CisgICAgICAgICAgICAgICAgbGljX3Vua25vd24uYXBwZW5kKGxpY3ZhbHVlWzFdKQorICAgICAgICBsaW5lc19iZWZvcmUuYXBwZW5kKCcjIFdBUk5JTkc6IHRoZSBmb2xsb3dpbmcgTElDRU5TRSBhbmQgTElDX0ZJTEVTX0NIS1NVTSB2YWx1ZXMgYXJlIGJlc3QgZ3Vlc3NlcyAtIGl0IGlzJykKKyAgICAgICAgbGluZXNfYmVmb3JlLmFwcGVuZCgnIyB5b3VyIHJlc3BvbnNpYmlsaXR5IHRvIHZlcmlmeSB0aGF0IHRoZSB2YWx1ZXMgYXJlIGNvbXBsZXRlIGFuZCBjb3JyZWN0LicpCisgICAgICAgIGlmIGxlbihsaWN2YWx1ZXMpID4gMToKKyAgICAgICAgICAgIGxpbmVzX2JlZm9yZS5hcHBlbmQoJyMnKQorICAgICAgICAgICAgbGluZXNfYmVmb3JlLmFwcGVuZCgnIyBOT1RFOiBtdWx0aXBsZSBsaWNlbnNlcyBoYXZlIGJlZW4gZGV0ZWN0ZWQ7IGlmIHRoYXQgaXMgY29ycmVjdCB5b3Ugc2hvdWxkIHNlcGFyYXRlJykKKyAgICAgICAgICAgIGxpbmVzX2JlZm9yZS5hcHBlbmQoJyMgdGhlc2UgaW4gdGhlIExJQ0VOU0UgdmFsdWUgdXNpbmcgJiBpZiB0aGUgbXVsdGlwbGUgbGljZW5zZXMgYWxsIGFwcGx5LCBvciB8IGlmIHRoZXJlJykKKyAgICAgICAgICAgIGxpbmVzX2JlZm9yZS5hcHBlbmQoJyMgaXMgYSBjaG9pY2UgYmV0d2VlbiB0aGUgbXVsdGlwbGUgbGljZW5zZXMuIElmIGluIGRvdWJ0LCBjaGVjayB0aGUgYWNjb21wYW55aW5nJykKKyAgICAgICAgICAgIGxpbmVzX2JlZm9yZS5hcHBlbmQoJyMgZG9jdW1lbnRhdGlvbiB0byBkZXRlcm1pbmUgd2hpY2ggc2l0dWF0aW9uIGlzIGFwcGxpY2FibGUuJykKKyAgICAgICAgaWYgbGljX3Vua25vd246CisgICAgICAgICAgICBsaW5lc19iZWZvcmUuYXBwZW5kKCcjJykKKyAgICAgICAgICAgIGxpbmVzX2JlZm9yZS5hcHBlbmQoJyMgVGhlIGZvbGxvd2luZyBsaWNlbnNlIGZpbGVzIHdlcmUgbm90IGFibGUgdG8gYmUgaWRlbnRpZmllZCBhbmQgYXJlJykKKyAgICAgICAgICAgIGxpbmVzX2JlZm9yZS5hcHBlbmQoJyMgcmVwcmVzZW50ZWQgYXMgIlVua25vd24iIGJlbG93LCB5b3Ugd2lsbCBuZWVkIHRvIGNoZWNrIHRoZW0geW91cnNlbGY6JykKKyAgICAgICAgICAgIGZvciBsaWNmaWxlIGluIGxpY191bmtub3duOgorICAgICAgICAgICAgICAgIGxpbmVzX2JlZm9yZS5hcHBlbmQoJyMgICAlcycgJSBsaWNmaWxlKQorICAgICAgICAgICAgbGluZXNfYmVmb3JlLmFwcGVuZCgnIycpCisgICAgZWxzZToKKyAgICAgICAgbGluZXNfYmVmb3JlLmFwcGVuZCgnIyBVbmFibGUgdG8gZmluZCBhbnkgZmlsZXMgdGhhdCBsb29rZWQgbGlrZSBsaWNlbnNlIHN0YXRlbWVudHMuIENoZWNrIHRoZSBhY2NvbXBhbnlpbmcnKQorICAgICAgICBsaW5lc19iZWZvcmUuYXBwZW5kKCcjIGRvY3VtZW50YXRpb24gYW5kIHNvdXJjZSBoZWFkZXJzIGFuZCBzZXQgTElDRU5TRSBhbmQgTElDX0ZJTEVTX0NIS1NVTSBhY2NvcmRpbmdseS4nKQorICAgICAgICBsaW5lc19iZWZvcmUuYXBwZW5kKCcjJykKKyAgICAgICAgbGluZXNfYmVmb3JlLmFwcGVuZCgnIyBOT1RFOiBMSUNFTlNFIGlzIGJlaW5nIHNldCB0byAiQ0xPU0VEIiB0byBhbGxvdyB5b3UgdG8gYXQgbGVhc3Qgc3RhcnQgYnVpbGRpbmcgLSBpZicpCisgICAgICAgIGxpbmVzX2JlZm9yZS5hcHBlbmQoJyMgdGhpcyBpcyBub3QgYWNjdXJhdGUgd2l0aCByZXNwZWN0IHRvIHRoZSBsaWNlbnNpbmcgb2YgdGhlIHNvZnR3YXJlIGJlaW5nIGJ1aWx0IChpdCcpCisgICAgICAgIGxpbmVzX2JlZm9yZS5hcHBlbmQoJyMgd2lsbCBub3QgYmUgaW4gbW9zdCBjYXNlcykgeW91IG11c3Qgc3BlY2lmeSB0aGUgY29ycmVjdCB2YWx1ZSBiZWZvcmUgdXNpbmcgdGhpcycpCisgICAgICAgIGxpbmVzX2JlZm9yZS5hcHBlbmQoJyMgcmVjaXBlIGZvciBhbnl0aGluZyBvdGhlciB0aGFuIGluaXRpYWwgdGVzdGluZy9kZXZlbG9wbWVudCEnKQorICAgICAgICBsaWNlbnNlcyA9IFsnQ0xPU0VEJ10KKyAgICBwa2dfbGljZW5zZSA9IGV4dHJhdmFsdWVzLnBvcCgnTElDRU5TRScsIE5vbmUpCisgICAgaWYgcGtnX2xpY2Vuc2U6CisgICAgICAgIGlmIGxpY2Vuc2VzID09IFsnVW5rbm93biddOgorICAgICAgICAgICAgbGluZXNfYmVmb3JlLmFwcGVuZCgnIyBOT1RFOiBUaGUgZm9sbG93aW5nIExJQ0VOU0UgdmFsdWUgd2FzIGRldGVybWluZWQgZnJvbSB0aGUgb3JpZ2luYWwgcGFja2FnZSBtZXRhZGF0YScpCisgICAgICAgICAgICBsaWNlbnNlcyA9IFtwa2dfbGljZW5zZV0KKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGxpbmVzX2JlZm9yZS5hcHBlbmQoJyMgTk9URTogT3JpZ2luYWwgcGFja2FnZSBtZXRhZGF0YSBpbmRpY2F0ZXMgbGljZW5zZSBpczogJXMnICUgcGtnX2xpY2Vuc2UpCisgICAgbGluZXNfYmVmb3JlLmFwcGVuZCgnTElDRU5TRSA9ICIlcyInICUgJyAnLmpvaW4obGljZW5zZXMpKQorICAgIGxpbmVzX2JlZm9yZS5hcHBlbmQoJ0xJQ19GSUxFU19DSEtTVU0gPSAiJXMiJyAlICcgXFxcbiAgICAgICAgICAgICAgICAgICAgJy5qb2luKGxpY19maWxlc19jaGtzdW0pKQorICAgIGxpbmVzX2JlZm9yZS5hcHBlbmQoJycpCisgICAgaGFuZGxlZC5hcHBlbmQoKCdsaWNlbnNlJywgbGljdmFsdWVzKSkKKyAgICByZXR1cm4gbGljdmFsdWVzCisKIGRlZiBnZXRfbGljZW5zZV9tZDVzdW1zKGQsIHN0YXRpY19vbmx5PUZhbHNlKToKICAgICBpbXBvcnQgYmIudXRpbHMKICAgICBtZDVzdW1zID0ge30KQEAgLTc1MSw3ICs4NzIsNyBAQAogCiAgICAgIyBOb3RlOiB0aGVzZSBhcmUgY2FyZWZ1bGx5IGNvbnN0cnVjdGVkIQogICAgIGxpY2Vuc2VfdGl0bGVfcmUgPSByZS5jb21waWxlKCdeXCg/KCMrICopPyhUaGUgKT8uezEsMTB9IFtMbF1pY2VuW3NjXWUoIFwoLnsxLDEwfVwpKT9cKT86PyQnKQotICAgIGxpY2Vuc2Vfc3RhdGVtZW50X3JlID0gcmUuY29tcGlsZSgnXlRoaXMgKHByb2plY3R8c29mdHdhcmUpIGlzKCBmcmVlIHNvZnR3YXJlKT8gcmVsZWFzZWQgdW5kZXIgdGhlIC57MSwxMH0gW0xsXWljZW5bc2NdZTo/JCcpCisgICAgbGljZW5zZV9zdGF0ZW1lbnRfcmUgPSByZS5jb21waWxlKCdeKFRoaXMgKHByb2plY3R8c29mdHdhcmUpIGlzKCBmcmVlIHNvZnR3YXJlKT8gKHJlbGVhc2VkfGxpY2VuW3NjXWVkKXwoUmVsZWFzZWR8TGljZW5bY3NdZWQpKSB1bmRlciB0aGUgLnsxLDEwfSBbTGxdaWNlbltzY11lOj8kJykKICAgICBjb3B5cmlnaHRfcmUgPSByZS5jb21waWxlKCdeKCMrKT8gKkNvcHlyaWdodCAuKiQnKQogCiAgICAgY3J1bmNoZWRfbWQ1c3VtcyA9IHt9CkBAIC03ODEsNyArOTAyLDcgQEAKICAgICAjIGh0dHBzOi8vZ2l0aHViLmNvbS9GRm1wZWcvRkZtcGVnL2Jsb2IvbWFzdGVyL0NPUFlJTkcuTEdQTHYzCiAgICAgY3J1bmNoZWRfbWQ1c3Vtc1snMmViZmIzYmI0OWI5YTQ4YTA3NWNjMTQyNWU3ZjQxMjknXSA9ICdMR1BMdjMnCiAgICAgbGljdGV4dCA9IFtdCi0gICAgd2l0aCBvcGVuKGxpY2ZpbGUsICdyJykgYXMgZjoKKyAgICB3aXRoIG9wZW4obGljZmlsZSwgJ3InLCBlcnJvcnM9J3N1cnJvZ2F0ZWVzY2FwZScpIGFzIGY6CiAgICAgICAgIGZvciBsaW5lIGluIGY6CiAgICAgICAgICAgICAjIERyb3Agb3BlbmluZyBzdGF0ZW1lbnRzCiAgICAgICAgICAgICBpZiBjb3B5cmlnaHRfcmUubWF0Y2gobGluZSk6CkBAIC03OTIsMTQgKzkxMywxNCBAQAogICAgICAgICAgICAgICAgIGNvbnRpbnVlCiAgICAgICAgICAgICAjIFNxdWFzaCBzcGFjZXMsIGFuZCByZXBsYWNlIHNtYXJ0IHF1b3RlcywgZG91YmxlIHF1b3RlcwogICAgICAgICAgICAgIyBhbmQgYmFja3RpY2tzIHdpdGggc2luZ2xlIHF1b3RlcwotICAgICAgICAgICAgbGluZSA9IG9lLnV0aWxzLnNxdWFzaHNwYWNlcyhsaW5lLnN0cmlwKCkpLmRlY29kZSgidXRmLTgiKQorICAgICAgICAgICAgbGluZSA9IG9lLnV0aWxzLnNxdWFzaHNwYWNlcyhsaW5lLnN0cmlwKCkpCiAgICAgICAgICAgICBsaW5lID0gbGluZS5yZXBsYWNlKHUiXHUyMDE4IiwgIiciKS5yZXBsYWNlKHUiXHUyMDE5IiwgIiciKS5yZXBsYWNlKHUiXHUyMDFjIiwiJyIpLnJlcGxhY2UodSJcdTIwMWQiLCAiJyIpLnJlcGxhY2UoJyInLCAnXCcnKS5yZXBsYWNlKCdgJywgJ1wnJykKICAgICAgICAgICAgIGlmIGxpbmU6CiAgICAgICAgICAgICAgICAgbGljdGV4dC5hcHBlbmQobGluZSkKIAogICAgIG0gPSBoYXNobGliLm1kNSgpCiAgICAgdHJ5OgotICAgICAgICBtLnVwZGF0ZSgnICcuam9pbihsaWN0ZXh0KSkKKyAgICAgICAgbS51cGRhdGUoJyAnLmpvaW4obGljdGV4dCkuZW5jb2RlKCd1dGYtOCcpKQogICAgICAgICBtZDV2YWwgPSBtLmhleGRpZ2VzdCgpCiAgICAgZXhjZXB0IFVuaWNvZGVFbmNvZGVFcnJvcjoKICAgICAgICAgbWQ1dmFsID0gTm9uZQpAQCAtODA3LDkgKzkyOCw5IEBACiAgICAgbGljZW5zZSA9IGNydW5jaGVkX21kNXN1bXMuZ2V0KG1kNXZhbCwgTm9uZSkKICAgICByZXR1cm4gbGljZW5zZSwgbWQ1dmFsLCBsaWN0ZXh0CiAKLWRlZiBndWVzc19saWNlbnNlKHNyY3RyZWUpOgorZGVmIGd1ZXNzX2xpY2Vuc2Uoc3JjdHJlZSwgZCk6CiAgICAgaW1wb3J0IGJiCi0gICAgbWQ1c3VtcyA9IGdldF9saWNlbnNlX21kNXN1bXModGluZm9pbC5jb25maWdfZGF0YSkKKyAgICBtZDVzdW1zID0gZ2V0X2xpY2Vuc2VfbWQ1c3VtcyhkKQogCiAgICAgbGljZW5zZXMgPSBbXQogICAgIGxpY3NwZWNzID0gWycqTElDRU5bQ1NdRSonLCAnQ09QWUlORyonLCAnKltMbF1pY2Vuc2UqJywgJ0xFR0FMKicsICdbTGxdZWdhbConLCAnKkdQTConLCAnUkVBRE1FLmxpYyonLCAnQ09QWVJJR0hUKicsICdbQ2Ndb3B5cmlnaHQqJ10KQEAgLTg0Miw3ICs5NjMsNyBAQAogICAgICIiIgogICAgIHBrZ2xpY2Vuc2VzID0ge3BuOiBbXX0KICAgICBmb3IgbGljZW5zZSwgbGljcGF0aCwgXyBpbiBsaWN2YWx1ZXM6Ci0gICAgICAgIGZvciBwa2duYW1lLCBwa2dwYXRoIGluIHBhY2thZ2VzLml0ZXJpdGVtcygpOgorICAgICAgICBmb3IgcGtnbmFtZSwgcGtncGF0aCBpbiBwYWNrYWdlcy5pdGVtcygpOgogICAgICAgICAgICAgaWYgbGljcGF0aC5zdGFydHN3aXRoKHBrZ3BhdGggKyAnLycpOgogICAgICAgICAgICAgICAgIGlmIHBrZ25hbWUgaW4gcGtnbGljZW5zZXM6CiAgICAgICAgICAgICAgICAgICAgIHBrZ2xpY2Vuc2VzW3BrZ25hbWVdLmFwcGVuZChsaWNlbnNlKQpAQCAtODU0LDcgKzk3NSw3IEBACiAgICAgICAgICAgICBwa2dsaWNlbnNlc1twbl0uYXBwZW5kKGxpY2Vuc2UpCiAgICAgb3V0bGljZW5zZXMgPSB7fQogICAgIGZvciBwa2duYW1lIGluIHBhY2thZ2VzOgotICAgICAgICBsaWNlbnNlID0gJyAnLmpvaW4obGlzdChzZXQocGtnbGljZW5zZXMuZ2V0KHBrZ25hbWUsIFsnVW5rbm93biddKSkpKQorICAgICAgICBsaWNlbnNlID0gJyAnLmpvaW4obGlzdChzZXQocGtnbGljZW5zZXMuZ2V0KHBrZ25hbWUsIFsnVW5rbm93biddKSkpKSBvciAnVW5rbm93bicKICAgICAgICAgaWYgbGljZW5zZSA9PSAnVW5rbm93bicgYW5kIHBrZ25hbWUgaW4gZmFsbGJhY2tfbGljZW5zZXM6CiAgICAgICAgICAgICBsaWNlbnNlID0gZmFsbGJhY2tfbGljZW5zZXNbcGtnbmFtZV0KICAgICAgICAgb3V0bGluZXMuYXBwZW5kKCdMSUNFTlNFXyVzID0gIiVzIicgJSAocGtnbmFtZSwgbGljZW5zZSkpCkBAIC04NjksNyArOTkwLDcgQEAKICAgICAgICAgICAgIGZvciBsaW5lIGluIGY6CiAgICAgICAgICAgICAgICAgcGtnbWFwW29zLnBhdGguYmFzZW5hbWUobGluZS5yc3RyaXAoKSldID0gb3MucGF0aC5zcGxpdGV4dChvcy5wYXRoLmJhc2VuYW1lKGZuKSlbMF0KICAgICByZWNpcGVtYXAgPSB7fQotICAgIGZvciBwYywgcGtnIGluIHBrZ21hcC5pdGVyaXRlbXMoKToKKyAgICBmb3IgcGMsIHBrZyBpbiBwa2dtYXAuaXRlbXMoKToKICAgICAgICAgcGtnZGF0YWZpbGUgPSBvcy5wYXRoLmpvaW4ocGtnZGF0YWRpciwgJ3J1bnRpbWUnLCBwa2cpCiAgICAgICAgIGlmIG9zLnBhdGguZXhpc3RzKHBrZ2RhdGFmaWxlKToKICAgICAgICAgICAgIHdpdGggb3Blbihwa2dkYXRhZmlsZSwgJ3InKSBhcyBmOgpAQCAtODc4LDczICs5OTksODQgQEAKICAgICAgICAgICAgICAgICAgICAgICAgIHJlY2lwZW1hcFtwY10gPSBsaW5lLnNwbGl0KCc6JywgMSlbMV0uc3RyaXAoKQogICAgIHJldHVybiByZWNpcGVtYXAKIAotZGVmIGNvbnZlcnRfcGtnaW5mbyhwa2dpbmZvZmlsZSk6Ci0gICAgdmFsdWVzID0ge30KLSAgICB3aXRoIG9wZW4ocGtnaW5mb2ZpbGUsICdyJykgYXMgZjoKLSAgICAgICAgaW5kZXNjID0gRmFsc2UKLSAgICAgICAgZm9yIGxpbmUgaW4gZjoKLSAgICAgICAgICAgIGlmIGluZGVzYzoKLSAgICAgICAgICAgICAgICBpZiBsaW5lLnN0cmlwKCk6Ci0gICAgICAgICAgICAgICAgICAgIHZhbHVlc1snREVTQ1JJUFRJT04nXSArPSAnICcgKyBsaW5lLnN0cmlwKCkKLSAgICAgICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgICAgICBpbmRlc2MgPSBGYWxzZQotICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICBzcGxpdGxpbmUgPSBsaW5lLnNwbGl0KCc6ICcsIDEpCi0gICAgICAgICAgICAgICAga2V5ID0gbGluZVswXQotICAgICAgICAgICAgICAgIHZhbHVlID0gbGluZVsxXQotICAgICAgICAgICAgICAgIGlmIGtleSA9PSAnTElDRU5TRSc6Ci0gICAgICAgICAgICAgICAgICAgIGZvciBkZXAgaW4gdmFsdWUuc3BsaXQoJywnKToKLSAgICAgICAgICAgICAgICAgICAgICAgIGRlcCA9IGRlcC5zcGxpdCgpWzBdCi0gICAgICAgICAgICAgICAgICAgICAgICBtYXBwZWQgPSBkZXBtYXAuZ2V0KGRlcCwgJycpCi0gICAgICAgICAgICAgICAgICAgICAgICBpZiBtYXBwZWQ6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVwZW5kcy5hcHBlbmQobWFwcGVkKQotICAgICAgICAgICAgICAgIGVsaWYga2V5ID09ICdMaWNlbnNlJzoKLSAgICAgICAgICAgICAgICAgICAgdmFsdWVzWydMSUNFTlNFJ10gPSB2YWx1ZQotICAgICAgICAgICAgICAgIGVsaWYga2V5ID09ICdTdW1tYXJ5JzoKLSAgICAgICAgICAgICAgICAgICAgdmFsdWVzWydTVU1NQVJZJ10gPSB2YWx1ZQotICAgICAgICAgICAgICAgIGVsaWYga2V5ID09ICdEZXNjcmlwdGlvbic6Ci0gICAgICAgICAgICAgICAgICAgIHZhbHVlc1snREVTQ1JJUFRJT04nXSA9IHZhbHVlCi0gICAgICAgICAgICAgICAgICAgIGluZGVzYyA9IFRydWUKLSAgICByZXR1cm4gdmFsdWVzCi0KIGRlZiBjb252ZXJ0X2RlYmlhbihkZWJwYXRoKToKKyAgICB2YWx1ZV9tYXAgPSB7J1BhY2thZ2UnOiAnUE4nLAorICAgICAgICAgICAgICAgICAnVmVyc2lvbic6ICdQVicsCisgICAgICAgICAgICAgICAgICdTZWN0aW9uJzogJ1NFQ1RJT04nLAorICAgICAgICAgICAgICAgICAnTGljZW5zZSc6ICdMSUNFTlNFJywKKyAgICAgICAgICAgICAgICAgJ0hvbWVwYWdlJzogJ0hPTUVQQUdFJ30KKwogICAgICMgRklYTUUgZXh0ZW5kIHRoaXMgbWFwcGluZyAtIHBlcmhhcHMgdXNlIGRpc3Ryb19hbGlhcy5pbmM/CiAgICAgZGVwbWFwID0geydsaWJ6LWRldic6ICd6bGliJ30KIAogICAgIHZhbHVlcyA9IHt9CiAgICAgZGVwZW5kcyA9IFtdCi0gICAgd2l0aCBvcGVuKG9zLnBhdGguam9pbihkZWJwYXRoLCAnY29udHJvbCcpKSBhcyBmOgorICAgIHdpdGggb3Blbihvcy5wYXRoLmpvaW4oZGVicGF0aCwgJ2NvbnRyb2wnKSwgJ3InLCBlcnJvcnM9J3N1cnJvZ2F0ZWVzY2FwZScpIGFzIGY6CiAgICAgICAgIGluZGVzYyA9IEZhbHNlCiAgICAgICAgIGZvciBsaW5lIGluIGY6CiAgICAgICAgICAgICBpZiBpbmRlc2M6Ci0gICAgICAgICAgICAgICAgaWYgbGluZS5zdHJpcCgpOgorICAgICAgICAgICAgICAgIGlmIGxpbmUuc3RhcnRzd2l0aCgnICcpOgogICAgICAgICAgICAgICAgICAgICBpZiBsaW5lLnN0YXJ0c3dpdGgoJyBUaGlzIHBhY2thZ2UgY29udGFpbnMnKToKICAgICAgICAgICAgICAgICAgICAgICAgIGluZGVzYyA9IEZhbHNlCiAgICAgICAgICAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZXNbJ0RFU0NSSVBUSU9OJ10gKz0gJyAnICsgbGluZS5zdHJpcCgpCisgICAgICAgICAgICAgICAgICAgICAgICBpZiAnREVTQ1JJUFRJT04nIGluIHZhbHVlczoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZXNbJ0RFU0NSSVBUSU9OJ10gKz0gJyAnICsgbGluZS5zdHJpcCgpCisgICAgICAgICAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlc1snREVTQ1JJUFRJT04nXSA9IGxpbmUuc3RyaXAoKQogICAgICAgICAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAgICAgICAgIGluZGVzYyA9IEZhbHNlCi0gICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgaWYgbm90IGluZGVzYzoKICAgICAgICAgICAgICAgICBzcGxpdGxpbmUgPSBsaW5lLnNwbGl0KCc6JywgMSkKLSAgICAgICAgICAgICAgICBrZXkgPSBsaW5lWzBdCi0gICAgICAgICAgICAgICAgdmFsdWUgPSBsaW5lWzFdCisgICAgICAgICAgICAgICAgaWYgbGVuKHNwbGl0bGluZSkgPCAyOgorICAgICAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgICAgIGtleSA9IHNwbGl0bGluZVswXQorICAgICAgICAgICAgICAgIHZhbHVlID0gc3BsaXRsaW5lWzFdLnN0cmlwKCkKICAgICAgICAgICAgICAgICBpZiBrZXkgPT0gJ0J1aWxkLURlcGVuZHMnOgogICAgICAgICAgICAgICAgICAgICBmb3IgZGVwIGluIHZhbHVlLnNwbGl0KCcsJyk6CiAgICAgICAgICAgICAgICAgICAgICAgICBkZXAgPSBkZXAuc3BsaXQoKVswXQogICAgICAgICAgICAgICAgICAgICAgICAgbWFwcGVkID0gZGVwbWFwLmdldChkZXAsICcnKQogICAgICAgICAgICAgICAgICAgICAgICAgaWYgbWFwcGVkOgogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlcGVuZHMuYXBwZW5kKG1hcHBlZCkKLSAgICAgICAgICAgICAgICBlbGlmIGtleSA9PSAnU2VjdGlvbic6Ci0gICAgICAgICAgICAgICAgICAgIHZhbHVlc1snU0VDVElPTiddID0gdmFsdWUKICAgICAgICAgICAgICAgICBlbGlmIGtleSA9PSAnRGVzY3JpcHRpb24nOgogICAgICAgICAgICAgICAgICAgICB2YWx1ZXNbJ1NVTU1BUlknXSA9IHZhbHVlCiAgICAgICAgICAgICAgICAgICAgIGluZGVzYyA9IFRydWUKKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICB2YXJuYW1lID0gdmFsdWVfbWFwLmdldChrZXksIE5vbmUpCisgICAgICAgICAgICAgICAgICAgIGlmIHZhcm5hbWU6CisgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZXNbdmFybmFtZV0gPSB2YWx1ZQogCi0gICAgaWYgZGVwZW5kczoKLSAgICAgICAgdmFsdWVzWydERVBFTkRTJ10gPSAnICcuam9pbihkZXBlbmRzKQorICAgICNpZiBkZXBlbmRzOgorICAgICMgICAgdmFsdWVzWydERVBFTkRTJ10gPSAnICcuam9pbihkZXBlbmRzKQogCiAgICAgcmV0dXJuIHZhbHVlcwogCitkZWYgY29udmVydF9ycG1feG1sKHhtbGZpbGUpOgorICAgICcnJ0NvbnZlcnRzIHRoZSBvdXRwdXQgZnJvbSBycG0gLXFwIC0teG1sIHRvIGEgc2V0IG9mIHZhcmlhYmxlIHZhbHVlcycnJworICAgIGltcG9ydCB4bWwuZXRyZWUuRWxlbWVudFRyZWUgYXMgRWxlbWVudFRyZWUKKyAgICBycG10YWdfbWFwID0geydOYW1lJzogJ1BOJywKKyAgICAgICAgICAgICAgICAgICdWZXJzaW9uJzogJ1BWJywKKyAgICAgICAgICAgICAgICAgICdTdW1tYXJ5JzogJ1NVTU1BUlknLAorICAgICAgICAgICAgICAgICAgJ0Rlc2NyaXB0aW9uJzogJ0RFU0NSSVBUSU9OJywKKyAgICAgICAgICAgICAgICAgICdMaWNlbnNlJzogJ0xJQ0VOU0UnLAorICAgICAgICAgICAgICAgICAgJ1VybCc6ICdIT01FUEFHRSd9CisKKyAgICB2YWx1ZXMgPSB7fQorICAgIHRyZWUgPSBFbGVtZW50VHJlZS5wYXJzZSh4bWxmaWxlKQorICAgIHJvb3QgPSB0cmVlLmdldHJvb3QoKQorICAgIGZvciBjaGlsZCBpbiByb290OgorICAgICAgICBpZiBjaGlsZC50YWcgPT0gJ3JwbVRhZyc6CisgICAgICAgICAgICBuYW1lID0gY2hpbGQuYXR0cmliLmdldCgnbmFtZScsIE5vbmUpCisgICAgICAgICAgICBpZiBuYW1lOgorICAgICAgICAgICAgICAgIHZhcm5hbWUgPSBycG10YWdfbWFwLmdldChuYW1lLCBOb25lKQorICAgICAgICAgICAgICAgIGlmIHZhcm5hbWU6CisgICAgICAgICAgICAgICAgICAgIHZhbHVlc1t2YXJuYW1lXSA9IGNoaWxkWzBdLnRleHQKKyAgICByZXR1cm4gdmFsdWVzCisKKworZGVmIGNoZWNrX25wbShkKToKKyAgICBpZiBub3Qgb3MucGF0aC5leGlzdHMob3MucGF0aC5qb2luKGQuZ2V0VmFyKCdTVEFHSU5HX0JJTkRJUl9OQVRJVkUnLCBUcnVlKSwgJ25wbScpKToKKyAgICAgICAgbG9nZ2VyLmVycm9yKCducG0gcmVxdWlyZWQgdG8gcHJvY2VzcyBzcGVjaWZpZWQgc291cmNlLCBidXQgbnBtIGlzIG5vdCBhdmFpbGFibGUgLSB5b3UgbmVlZCB0byBidWlsZCBub2RlanMtbmF0aXZlIGZpcnN0JykKKyAgICAgICAgc3lzLmV4aXQoMTQpCiAKIGRlZiByZWdpc3Rlcl9jb21tYW5kcyhzdWJwYXJzZXJzKToKICAgICBwYXJzZXJfY3JlYXRlID0gc3VicGFyc2Vycy5hZGRfcGFyc2VyKCdjcmVhdGUnLApAQCAtOTU5LDUgKzEwOTEsNyBAQAogICAgIHBhcnNlcl9jcmVhdGUuYWRkX2FyZ3VtZW50KCctYicsICctLWJpbmFyeScsIGhlbHA9J1RyZWF0IHRoZSBzb3VyY2UgdHJlZSBhcyBzb21ldGhpbmcgdGhhdCBzaG91bGQgYmUgaW5zdGFsbGVkIHZlcmJhdGltIChubyBjb21waWxhdGlvbiwgc2FtZSBkaXJlY3Rvcnkgc3RydWN0dXJlKScsIGFjdGlvbj0nc3RvcmVfdHJ1ZScpCiAgICAgcGFyc2VyX2NyZWF0ZS5hZGRfYXJndW1lbnQoJy0tYWxzby1uYXRpdmUnLCBoZWxwPSdBbHNvIGFkZCBuYXRpdmUgdmFyaWFudCAoaS5lLiBzdXBwb3J0IGJ1aWxkaW5nIHJlY2lwZSBmb3IgdGhlIGJ1aWxkIGhvc3QgYXMgd2VsbCBhcyB0aGUgdGFyZ2V0IG1hY2hpbmUpJywgYWN0aW9uPSdzdG9yZV90cnVlJykKICAgICBwYXJzZXJfY3JlYXRlLmFkZF9hcmd1bWVudCgnLS1zcmMtc3ViZGlyJywgaGVscD0nU3BlY2lmeSBzdWJkaXJlY3Rvcnkgd2l0aGluIHNvdXJjZSB0cmVlIHRvIHVzZScsIG1ldGF2YXI9J1NVQkRJUicpCisgICAgcGFyc2VyX2NyZWF0ZS5hZGRfYXJndW1lbnQoJy1hJywgJy0tYXV0b3JldicsIGhlbHA9J1doZW4gZmV0Y2hpbmcgZnJvbSBhIGdpdCByZXBvc2l0b3J5LCBzZXQgU1JDUkVWIGluIHRoZSByZWNpcGUgdG8gYSBmbG9hdGluZyByZXZpc2lvbiBpbnN0ZWFkIG9mIGZpeGVkJywgYWN0aW9uPSJzdG9yZV90cnVlIikKKyAgICBwYXJzZXJfY3JlYXRlLmFkZF9hcmd1bWVudCgnLS1rZWVwLXRlbXAnLCBhY3Rpb249InN0b3JlX3RydWUiLCBoZWxwPSdLZWVwIHRlbXBvcmFyeSBkaXJlY3RvcnkgKGZvciBkZWJ1Z2dpbmcpJykKICAgICBwYXJzZXJfY3JlYXRlLnNldF9kZWZhdWx0cyhmdW5jPWNyZWF0ZV9yZWNpcGUpCiAKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9yZWNpcGV0b29sL2NyZWF0ZV9idWlsZHN5cy5weSBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9yZWNpcGV0b29sL2NyZWF0ZV9idWlsZHN5cy5weQppbmRleCBmODRlYzNkLi5lOTE0ZTUzIDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvcmVjaXBldG9vbC9jcmVhdGVfYnVpbGRzeXMucHkKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L3NjcmlwdHMvbGliL3JlY2lwZXRvb2wvY3JlYXRlX2J1aWxkc3lzLnB5CkBAIC00NCw3ICs0NCw3IEBACiAgICAgICAgICAgICBjbGFzc2VzLmFwcGVuZCgnY21ha2UnKQogICAgICAgICAgICAgdmFsdWVzID0gQ21ha2VSZWNpcGVIYW5kbGVyLmV4dHJhY3RfY21ha2VfZGVwcyhsaW5lc19iZWZvcmUsIHNyY3RyZWUsIGV4dHJhdmFsdWVzKQogICAgICAgICAgICAgY2xhc3Nlcy5leHRlbmQodmFsdWVzLnBvcCgnaW5oZXJpdCcsICcnKS5zcGxpdCgpKQotICAgICAgICAgICAgZm9yIHZhciwgdmFsdWUgaW4gdmFsdWVzLml0ZXJpdGVtcygpOgorICAgICAgICAgICAgZm9yIHZhciwgdmFsdWUgaW4gdmFsdWVzLml0ZW1zKCk6CiAgICAgICAgICAgICAgICAgbGluZXNfYmVmb3JlLmFwcGVuZCgnJXMgPSAiJXMiJyAlICh2YXIsIHZhbHVlKSkKICAgICAgICAgICAgIGxpbmVzX2FmdGVyLmFwcGVuZCgnIyBTcGVjaWZ5IGFueSBvcHRpb25zIHlvdSB3YW50IHRvIHBhc3MgdG8gY21ha2UgdXNpbmcgRVhUUkFfT0VDTUFLRTonKQogICAgICAgICAgICAgbGluZXNfYWZ0ZXIuYXBwZW5kKCdFWFRSQV9PRUNNQUtFID0gIiInKQpAQCAtMTU5LDcgKzE1OSw3IEBACiAKICAgICAgICAgZGVmIGZpbmRfY21ha2VfcGFja2FnZShwa2cpOgogICAgICAgICAgICAgUmVjaXBlSGFuZGxlci5sb2FkX2RldmVsX2ZpbGVtYXAodGluZm9pbC5jb25maWdfZGF0YSkKLSAgICAgICAgICAgIGZvciBmbiwgcG4gaW4gUmVjaXBlSGFuZGxlci5yZWNpcGVjbWFrZWZpbGVtYXAuaXRlcml0ZW1zKCk6CisgICAgICAgICAgICBmb3IgZm4sIHBuIGluIFJlY2lwZUhhbmRsZXIucmVjaXBlY21ha2VmaWxlbWFwLml0ZW1zKCk6CiAgICAgICAgICAgICAgICAgc3BsaXRuYW1lID0gZm4uc3BsaXQoJy8nKQogICAgICAgICAgICAgICAgIGlmIGxlbihzcGxpdG5hbWUpID4gMToKICAgICAgICAgICAgICAgICAgICAgaWYgc3BsaXRuYW1lWzBdLmxvd2VyKCkuc3RhcnRzd2l0aChwa2cubG93ZXIoKSk6CkBAIC0xNzMsNyArMTczLDcgQEAKICAgICAgICAgZGVmIHBhcnNlX2NtYWtlX2ZpbGUoZm4sIHBhdGhzPU5vbmUpOgogICAgICAgICAgICAgc2VhcmNocGF0aHMgPSAocGF0aHMgb3IgW10pICsgW29zLnBhdGguZGlybmFtZShmbildCiAgICAgICAgICAgICBsb2dnZXIuZGVidWcoJ1BhcnNpbmcgZmlsZSAlcycgJSBmbikKLSAgICAgICAgICAgIHdpdGggb3BlbihmbiwgJ3InKSBhcyBmOgorICAgICAgICAgICAgd2l0aCBvcGVuKGZuLCAncicsIGVycm9ycz0nc3Vycm9nYXRlZXNjYXBlJykgYXMgZjoKICAgICAgICAgICAgICAgICBmb3IgbGluZSBpbiBmOgogICAgICAgICAgICAgICAgICAgICBsaW5lID0gbGluZS5zdHJpcCgpCiAgICAgICAgICAgICAgICAgICAgIGZvciBoYW5kbGVyIGluIGhhbmRsZXJzOgpAQCAtMzQ4LDEzICszNDgsMTMgQEAKICAgICAgICAgICAgIGF1dG9jb25mID0gVHJ1ZQogICAgICAgICAgICAgdmFsdWVzID0gQXV0b3Rvb2xzUmVjaXBlSGFuZGxlci5leHRyYWN0X2F1dG90b29sc19kZXBzKGxpbmVzX2JlZm9yZSwgc3JjdHJlZSwgZXh0cmF2YWx1ZXMpCiAgICAgICAgICAgICBjbGFzc2VzLmV4dGVuZCh2YWx1ZXMucG9wKCdpbmhlcml0JywgJycpLnNwbGl0KCkpCi0gICAgICAgICAgICBmb3IgdmFyLCB2YWx1ZSBpbiB2YWx1ZXMuaXRlcml0ZW1zKCk6CisgICAgICAgICAgICBmb3IgdmFyLCB2YWx1ZSBpbiB2YWx1ZXMuaXRlbXMoKToKICAgICAgICAgICAgICAgICBsaW5lc19iZWZvcmUuYXBwZW5kKCclcyA9ICIlcyInICUgKHZhciwgdmFsdWUpKQogICAgICAgICBlbHNlOgogICAgICAgICAgICAgY29uZmZpbGUgPSBSZWNpcGVIYW5kbGVyLmNoZWNrZmlsZXMoc3JjdHJlZSwgWydjb25maWd1cmUnXSkKICAgICAgICAgICAgIGlmIGNvbmZmaWxlOgogICAgICAgICAgICAgICAgICMgQ2hlY2sgaWYgdGhpcyBpcyBqdXN0IGEgcHJlLWdlbmVyYXRlZCBhdXRvY29uZiBjb25maWd1cmUgc2NyaXB0Ci0gICAgICAgICAgICAgICAgd2l0aCBvcGVuKGNvbmZmaWxlWzBdLCAncicpIGFzIGY6CisgICAgICAgICAgICAgICAgd2l0aCBvcGVuKGNvbmZmaWxlWzBdLCAncicsIGVycm9ycz0nc3Vycm9nYXRlZXNjYXBlJykgYXMgZjoKICAgICAgICAgICAgICAgICAgICAgZm9yIGkgaW4gcmFuZ2UoMSwgMTApOgogICAgICAgICAgICAgICAgICAgICAgICAgaWYgJ0dlbmVyYXRlZCBieSBHTlUgQXV0b2NvbmYnIGluIGYucmVhZGxpbmUoKToKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdXRvY29uZiA9IFRydWUKQEAgLTM2NCw3ICszNjQsNyBAQAogICAgICAgICAgICAgIyBMYXN0IHJlc29ydAogICAgICAgICAgICAgY29uZmZpbGUgPSBSZWNpcGVIYW5kbGVyLmNoZWNrZmlsZXMoc3JjdHJlZSwgWydjb25maWd1cmUnXSkKICAgICAgICAgICAgIGlmIGNvbmZmaWxlOgotICAgICAgICAgICAgICAgIHdpdGggb3Blbihjb25mZmlsZVswXSwgJ3InKSBhcyBmOgorICAgICAgICAgICAgICAgIHdpdGggb3Blbihjb25mZmlsZVswXSwgJ3InLCBlcnJvcnM9J3N1cnJvZ2F0ZWVzY2FwZScpIGFzIGY6CiAgICAgICAgICAgICAgICAgICAgIGZvciBsaW5lIGluIGY6CiAgICAgICAgICAgICAgICAgICAgICAgICBsaW5lID0gbGluZS5zdHJpcCgpCiAgICAgICAgICAgICAgICAgICAgICAgICBpZiBsaW5lLnN0YXJ0c3dpdGgoJ1ZFUlNJT049Jykgb3IgbGluZS5zdGFydHN3aXRoKCdQQUNLQUdFX1ZFUlNJT049Jyk6CkBAIC00NDIsMTEgKzQ0MiwxMiBAQAogICAgICAgICBhY19pbml0X3JlID0gcmUuY29tcGlsZSgnQUNfSU5JVFwoXHMqKFteLF0rKSxccyooW14sXSspWywpXS4qJykKICAgICAgICAgYW1faW5pdF9yZSA9IHJlLmNvbXBpbGUoJ0FNX0lOSVRfQVVUT01BS0VcKFxzKihbXixdKyksXHMqKFteLF0rKVssKV0uKicpCiAgICAgICAgIGRlZmluZV9yZSA9IHJlLmNvbXBpbGUoJ1xzKihtNF8pP2RlZmluZVwoXHMqKFteLF0rKSxccyooW14sXSspXCknKQorICAgICAgICB2ZXJzaW9uX3JlID0gcmUuY29tcGlsZSgnKFswLTkuXSspJykKIAogICAgICAgICBkZWZpbmVzID0ge30KICAgICAgICAgZGVmIHN1YnN0X2RlZmluZXModmFsdWUpOgogICAgICAgICAgICAgbmV3dmFsdWUgPSB2YWx1ZQotICAgICAgICAgICAgZm9yIGRlZmluZSwgZGVmdmFsIGluIGRlZmluZXMuaXRlcml0ZW1zKCk6CisgICAgICAgICAgICBmb3IgZGVmaW5lLCBkZWZ2YWwgaW4gZGVmaW5lcy5pdGVtcygpOgogICAgICAgICAgICAgICAgIG5ld3ZhbHVlID0gbmV3dmFsdWUucmVwbGFjZShkZWZpbmUsIGRlZnZhbCkKICAgICAgICAgICAgIGlmIG5ld3ZhbHVlICE9IHZhbHVlOgogICAgICAgICAgICAgICAgIHJldHVybiBzdWJzdF9kZWZpbmVzKG5ld3ZhbHVlKQpAQCAtNDg4LDYgKzQ4OSw3IEBACiAgICAgICAgICAgICBmb3IgaGFuZGxlciBpbiBoYW5kbGVyczoKICAgICAgICAgICAgICAgICBpZiBoYW5kbGVyLnByb2Nlc3NfbWFjcm8oc3JjdHJlZSwga2V5d29yZCwgdmFsdWUsIHByb2Nlc3NfdmFsdWUsIGxpYmRlcHMsIHBjZGVwcywgZGVwcywgb3V0bGluZXMsIGluaGVyaXRzLCB2YWx1ZXMpOgogICAgICAgICAgICAgICAgICAgICByZXR1cm4KKyAgICAgICAgICAgIGxvZ2dlci5kZWJ1ZygnRm91bmQga2V5d29yZCAlcyB3aXRoIHZhbHVlICIlcyInICUgKGtleXdvcmQsIHZhbHVlKSkKICAgICAgICAgICAgIGlmIGtleXdvcmQgPT0gJ1BLR19DSEVDS19NT0RVTEVTJzoKICAgICAgICAgICAgICAgICByZXMgPSBwa2dfcmUuc2VhcmNoKHZhbHVlKQogICAgICAgICAgICAgICAgIGlmIHJlczoKQEAgLTU2OSwxMCArNTcxLDIxIEBACiAgICAgICAgICAgICAgICAgZGVwcy5hcHBlbmQoJ3NxbGl0ZTMnKQogICAgICAgICAgICAgZWxpZiBrZXl3b3JkID09ICdBWF9MSUJfVEFHTElCJzoKICAgICAgICAgICAgICAgICBkZXBzLmFwcGVuZCgndGFnbGliJykKLSAgICAgICAgICAgIGVsaWYga2V5d29yZCA9PSAnQVhfUEtHX1NXSUcnOgotICAgICAgICAgICAgICAgIGRlcHMuYXBwZW5kKCdzd2lnJykKKyAgICAgICAgICAgIGVsaWYga2V5d29yZCBpbiBbJ0FYX1BLR19TV0lHJywgJ0FDX1BST0dfU1dJRyddOgorICAgICAgICAgICAgICAgIGRlcHMuYXBwZW5kKCdzd2lnLW5hdGl2ZScpCiAgICAgICAgICAgICBlbGlmIGtleXdvcmQgPT0gJ0FYX1BST0dfWFNMVFBST0MnOgogICAgICAgICAgICAgICAgIGRlcHMuYXBwZW5kKCdsaWJ4c2x0LW5hdGl2ZScpCisgICAgICAgICAgICBlbGlmIGtleXdvcmQgaW4gWydBQ19QWVRIT05fREVWRUwnLCAnQVhfUFlUSE9OX0RFVkVMJywgJ0FNX1BBVEhfUFlUSE9OJ106CisgICAgICAgICAgICAgICAgcHl0aG9uY2xhc3MgPSAncHl0aG9ubmF0aXZlJworICAgICAgICAgICAgICAgIHJlcyA9IHZlcnNpb25fcmUuc2VhcmNoKHZhbHVlKQorICAgICAgICAgICAgICAgIGlmIHJlczoKKyAgICAgICAgICAgICAgICAgICAgaWYgcmVzLmdyb3VwKDEpLnN0YXJ0c3dpdGgoJzMnKToKKyAgICAgICAgICAgICAgICAgICAgICAgIHB5dGhvbmNsYXNzID0gJ3B5dGhvbjNuYXRpdmUnCisgICAgICAgICAgICAgICAgIyBBdm9pZCByZXBsYWNpbmcgcHl0aG9uM25hdGl2ZSB3aXRoIHB5dGhvbm5hdGl2ZQorICAgICAgICAgICAgICAgIGlmIG5vdCBweXRob25jbGFzcyBpbiBpbmhlcml0cyBhbmQgbm90ICdweXRob24zbmF0aXZlJyBpbiBpbmhlcml0czoKKyAgICAgICAgICAgICAgICAgICAgaWYgJ3B5dGhvbm5hdGl2ZScgaW4gaW5oZXJpdHM6CisgICAgICAgICAgICAgICAgICAgICAgICBpbmhlcml0cy5yZW1vdmUoJ3B5dGhvbm5hdGl2ZScpCisgICAgICAgICAgICAgICAgICAgIGluaGVyaXRzLmFwcGVuZChweXRob25jbGFzcykKICAgICAgICAgICAgIGVsaWYga2V5d29yZCA9PSAnQVhfV0lUSF9DVVJTRVMnOgogICAgICAgICAgICAgICAgIGRlcHMuYXBwZW5kKCduY3Vyc2VzJykKICAgICAgICAgICAgIGVsaWYga2V5d29yZCA9PSAnQVhfUEFUSF9CREInOgpAQCAtNjM4LDcgKzY1MSwxMSBAQAogICAgICAgICAgICAgICAgICAgICAnQVhfTElCX1NRTElURTMnLAogICAgICAgICAgICAgICAgICAgICAnQVhfTElCX1RBR0xJQicsCiAgICAgICAgICAgICAgICAgICAgICdBWF9QS0dfU1dJRycsCisgICAgICAgICAgICAgICAgICAgICdBQ19QUk9HX1NXSUcnLAogICAgICAgICAgICAgICAgICAgICAnQVhfUFJPR19YU0xUUFJPQycsCisgICAgICAgICAgICAgICAgICAgICdBQ19QWVRIT05fREVWRUwnLAorICAgICAgICAgICAgICAgICAgICAnQVhfUFlUSE9OX0RFVkVMJywKKyAgICAgICAgICAgICAgICAgICAgJ0FNX1BBVEhfUFlUSE9OJywKICAgICAgICAgICAgICAgICAgICAgJ0FYX1dJVEhfQ1VSU0VTJywKICAgICAgICAgICAgICAgICAgICAgJ0FYX1BBVEhfQkRCJywKICAgICAgICAgICAgICAgICAgICAgJ0FYX1BBVEhfTElCX1BDUkUnLApAQCAtNjU0LDcgKzY3MSw3IEBACiAgICAgICAgICAgICBuZXN0aW5nID0gMAogICAgICAgICAgICAgaW5fa2V5d29yZCA9ICcnCiAgICAgICAgICAgICBwYXJ0aWFsID0gJycKLSAgICAgICAgICAgIHdpdGggb3BlbihzcmNmaWxlLCAncicpIGFzIGY6CisgICAgICAgICAgICB3aXRoIG9wZW4oc3JjZmlsZSwgJ3InLCBlcnJvcnM9J3N1cnJvZ2F0ZWVzY2FwZScpIGFzIGY6CiAgICAgICAgICAgICAgICAgZm9yIGxpbmUgaW4gZjoKICAgICAgICAgICAgICAgICAgICAgaWYgaW5fa2V5d29yZDoKICAgICAgICAgICAgICAgICAgICAgICAgIHBhcnRpYWwgKz0gJyAnICsgbGluZS5zdHJpcCgpCkBAIC02ODIsNyArNjk5LDcgQEAKICAgICAgICAgICAgICAgICBwcm9jZXNzX21hY3JvKGluX2tleXdvcmQsIHBhcnRpYWwpCiAKICAgICAgICAgaWYgZXh0cmF2YWx1ZXM6Ci0gICAgICAgICAgICBmb3Igayx2IGluIGV4dHJhdmFsdWVzLml0ZW1zKCk6CisgICAgICAgICAgICBmb3Igayx2IGluIGxpc3QoZXh0cmF2YWx1ZXMuaXRlbXMoKSk6CiAgICAgICAgICAgICAgICAgaWYgdjoKICAgICAgICAgICAgICAgICAgICAgaWYgdi5zdGFydHN3aXRoKCckJykgb3Igdi5zdGFydHN3aXRoKCdAJykgb3Igdi5zdGFydHN3aXRoKCclJyk6CiAgICAgICAgICAgICAgICAgICAgICAgICBkZWwgZXh0cmF2YWx1ZXNba10KQEAgLTczNyw3ICs3NTQsNyBAQAogICAgICAgICBpZiAnYnVpbGRzeXN0ZW0nIGluIGhhbmRsZWQ6CiAgICAgICAgICAgICByZXR1cm4gRmFsc2UKIAotICAgICAgICBtYWtlZmlsZSA9IFJlY2lwZUhhbmRsZXIuY2hlY2tmaWxlcyhzcmN0cmVlLCBbJ01ha2VmaWxlJ10pCisgICAgICAgIG1ha2VmaWxlID0gUmVjaXBlSGFuZGxlci5jaGVja2ZpbGVzKHNyY3RyZWUsIFsnTWFrZWZpbGUnLCAnbWFrZWZpbGUnLCAnR05VbWFrZWZpbGUnXSkKICAgICAgICAgaWYgbWFrZWZpbGU6CiAgICAgICAgICAgICBsaW5lc19hZnRlci5hcHBlbmQoJyMgTk9URTogdGhpcyBpcyBhIE1ha2VmaWxlLW9ubHkgcGllY2Ugb2Ygc29mdHdhcmUsIHNvIHdlIGNhbm5vdCBnZW5lcmF0ZSBtdWNoIG9mIHRoZScpCiAgICAgICAgICAgICBsaW5lc19hZnRlci5hcHBlbmQoJyMgcmVjaXBlIGF1dG9tYXRpY2FsbHkgLSB5b3Ugd2lsbCBuZWVkIHRvIGV4YW1pbmUgdGhlIE1ha2VmaWxlIHlvdXJzZWxmIGFuZCBlbnN1cmUnKQpAQCAtNzUzLDcgKzc3MCw3IEBACiAgICAgICAgICAgICBpZiBzY2FuZmlsZSBhbmQgb3MucGF0aC5leGlzdHMoc2NhbmZpbGUpOgogICAgICAgICAgICAgICAgIHZhbHVlcyA9IEF1dG90b29sc1JlY2lwZUhhbmRsZXIuZXh0cmFjdF9hdXRvdG9vbHNfZGVwcyhsaW5lc19iZWZvcmUsIHNyY3RyZWUsIGFjZmlsZT1zY2FuZmlsZSkKICAgICAgICAgICAgICAgICBjbGFzc2VzLmV4dGVuZCh2YWx1ZXMucG9wKCdpbmhlcml0JywgJycpLnNwbGl0KCkpCi0gICAgICAgICAgICAgICAgZm9yIHZhciwgdmFsdWUgaW4gdmFsdWVzLml0ZXJpdGVtcygpOgorICAgICAgICAgICAgICAgIGZvciB2YXIsIHZhbHVlIGluIHZhbHVlcy5pdGVtcygpOgogICAgICAgICAgICAgICAgICAgICBpZiB2YXIgPT0gJ0RFUEVORFMnOgogICAgICAgICAgICAgICAgICAgICAgICAgbGluZXNfYmVmb3JlLmFwcGVuZCgnIyBOT1RFOiBzb21lIG9mIHRoZXNlIGRlcGVuZGVuY2llcyBtYXkgYmUgb3B0aW9uYWwsIGNoZWNrIHRoZSBNYWtlZmlsZSBhbmQvb3IgdXBzdHJlYW0gZG9jdW1lbnRhdGlvbicpCiAgICAgICAgICAgICAgICAgICAgIGxpbmVzX2JlZm9yZS5hcHBlbmQoJyVzID0gIiVzIicgJSAodmFyLCB2YWx1ZSkpCkBAIC03ODAsNyArNzk3LDcgQEAKICAgICAgICAgICAgIGlmIGluc3RhbGx0YXJnZXQ6CiAgICAgICAgICAgICAgICAgZnVuYy5hcHBlbmQoJyMgVGhpcyBpcyBhIGd1ZXNzOyBhZGRpdGlvbmFsIGFyZ3VtZW50cyBtYXkgYmUgcmVxdWlyZWQnKQogICAgICAgICAgICAgICAgIG1ha2VhcmdzID0gJycKLSAgICAgICAgICAgICAgICB3aXRoIG9wZW4obWFrZWZpbGVbMF0sICdyJykgYXMgZjoKKyAgICAgICAgICAgICAgICB3aXRoIG9wZW4obWFrZWZpbGVbMF0sICdyJywgZXJyb3JzPSdzdXJyb2dhdGVlc2NhcGUnKSBhcyBmOgogICAgICAgICAgICAgICAgICAgICBmb3IgaSBpbiByYW5nZSgxLCAxMDApOgogICAgICAgICAgICAgICAgICAgICAgICAgaWYgJ0RFU1RESVInIGluIGYucmVhZGxpbmUoKToKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYWtlYXJncyArPSAiICdERVNURElSPSR7RH0nIgpAQCAtODA5LDcgKzgyNiw3IEBACiAgICAgICAgICAgICB2ZXJzaW9uID0gTm9uZQogICAgICAgICAgICAgZm9yIGZpbGVpdGVtIGluIGZpbGVsaXN0OgogICAgICAgICAgICAgICAgIGxpbmVjb3VudCA9IDAKLSAgICAgICAgICAgICAgICB3aXRoIG9wZW4oZmlsZWl0ZW0sICdyJykgYXMgZjoKKyAgICAgICAgICAgICAgICB3aXRoIG9wZW4oZmlsZWl0ZW0sICdyJywgZXJyb3JzPSdzdXJyb2dhdGVlc2NhcGUnKSBhcyBmOgogICAgICAgICAgICAgICAgICAgICBmb3IgbGluZSBpbiBmOgogICAgICAgICAgICAgICAgICAgICAgICAgbGluZSA9IGxpbmUucnN0cmlwKCkuc3RyaXAoJyJcJycpCiAgICAgICAgICAgICAgICAgICAgICAgICBsaW5lY291bnQgKz0gMQpAQCAtODMwLDIyICs4NDcsMzUgQEAKICAgICAgICAgaWYgJ1BWJyBpbiBleHRyYXZhbHVlcyBhbmQgJ1BOJyBpbiBleHRyYXZhbHVlczoKICAgICAgICAgICAgIHJldHVybgogICAgICAgICBmaWxlbGlzdCA9IFJlY2lwZUhhbmRsZXIuY2hlY2tmaWxlcyhzcmN0cmVlLCBbJyouc3BlYyddLCByZWN1cnNpdmU9VHJ1ZSkKLSAgICAgICAgcG4gPSBOb25lCi0gICAgICAgIHB2ID0gTm9uZQorICAgICAgICB2YWx1ZW1hcCA9IHsnTmFtZSc6ICdQTicsCisgICAgICAgICAgICAgICAgICAgICdWZXJzaW9uJzogJ1BWJywKKyAgICAgICAgICAgICAgICAgICAgJ1N1bW1hcnknOiAnU1VNTUFSWScsCisgICAgICAgICAgICAgICAgICAgICdVcmwnOiAnSE9NRVBBR0UnLAorICAgICAgICAgICAgICAgICAgICAnTGljZW5zZSc6ICdMSUNFTlNFJ30KKyAgICAgICAgZm91bmR2YWx1ZXMgPSB7fQogICAgICAgICBmb3IgZmlsZWl0ZW0gaW4gZmlsZWxpc3Q6CiAgICAgICAgICAgICBsaW5lY291bnQgPSAwCi0gICAgICAgICAgICB3aXRoIG9wZW4oZmlsZWl0ZW0sICdyJykgYXMgZjoKKyAgICAgICAgICAgIHdpdGggb3BlbihmaWxlaXRlbSwgJ3InLCBlcnJvcnM9J3N1cnJvZ2F0ZWVzY2FwZScpIGFzIGY6CiAgICAgICAgICAgICAgICAgZm9yIGxpbmUgaW4gZjoKLSAgICAgICAgICAgICAgICAgICAgaWYgbGluZS5zdGFydHN3aXRoKCdOYW1lOicpIGFuZCBub3QgcG46Ci0gICAgICAgICAgICAgICAgICAgICAgICBwbiA9IGxpbmUuc3BsaXQoJzonKVsxXS5zdHJpcCgpCi0gICAgICAgICAgICAgICAgICAgIGlmIGxpbmUuc3RhcnRzd2l0aCgnVmVyc2lvbjonKSBhbmQgbm90IHB2OgotICAgICAgICAgICAgICAgICAgICAgICAgcHYgPSBsaW5lLnNwbGl0KCc6JylbMV0uc3RyaXAoKQotICAgICAgICAgICAgaWYgcHYgb3IgcG46Ci0gICAgICAgICAgICAgICAgaWYgcHYgYW5kIG5vdCAnUFYnIGluIGV4dHJhdmFsdWVzIGFuZCB2YWxpZGF0ZV9wdihwdik6Ci0gICAgICAgICAgICAgICAgICAgIGV4dHJhdmFsdWVzWydQViddID0gcHYKLSAgICAgICAgICAgICAgICBpZiBwbiBhbmQgbm90ICdQTicgaW4gZXh0cmF2YWx1ZXM6Ci0gICAgICAgICAgICAgICAgICAgIGV4dHJhdmFsdWVzWydQTiddID0gcG4KLSAgICAgICAgICAgICAgICBicmVhaworICAgICAgICAgICAgICAgICAgICBmb3IgdmFsdWUsIHZhcm5hbWUgaW4gdmFsdWVtYXAuaXRlbXMoKToKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIGxpbmUuc3RhcnRzd2l0aCh2YWx1ZSArICc6JykgYW5kIG5vdCB2YXJuYW1lIGluIGZvdW5kdmFsdWVzOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvdW5kdmFsdWVzW3Zhcm5hbWVdID0gbGluZS5zcGxpdCgnOicsIDEpWzFdLnN0cmlwKCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaworICAgICAgICAgICAgICAgICAgICBpZiBsZW4oZm91bmR2YWx1ZXMpID09IGxlbih2YWx1ZW1hcCk6CisgICAgICAgICAgICAgICAgICAgICAgICBicmVhaworICAgICAgICBpZiAnUFYnIGluIGZvdW5kdmFsdWVzOgorICAgICAgICAgICAgaWYgbm90IHZhbGlkYXRlX3B2KGZvdW5kdmFsdWVzWydQViddKToKKyAgICAgICAgICAgICAgICBkZWwgZm91bmR2YWx1ZXNbJ1BWJ10KKyAgICAgICAgbGljZW5zZSA9IGZvdW5kdmFsdWVzLnBvcCgnTElDRU5TRScsIE5vbmUpCisgICAgICAgIGlmIGxpY2Vuc2U6CisgICAgICAgICAgICBsaWNjb21tZW50ID0gJyMgTk9URTogc3BlYyBmaWxlIGluZGljYXRlcyB0aGUgbGljZW5zZSBtYXkgYmUgIiVzIicgJSBsaWNlbnNlCisgICAgICAgICAgICBmb3IgaSwgbGluZSBpbiBlbnVtZXJhdGUobGluZXNfYmVmb3JlKToKKyAgICAgICAgICAgICAgICBpZiBsaW5lLnN0YXJ0c3dpdGgoJ0xJQ0VOU0UgPScpOgorICAgICAgICAgICAgICAgICAgICBsaW5lc19iZWZvcmUuaW5zZXJ0KGksIGxpY2NvbW1lbnQpCisgICAgICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIGxpbmVzX2JlZm9yZS5hcHBlbmQobGljY29tbWVudCkKKyAgICAgICAgZXh0cmF2YWx1ZXMudXBkYXRlKGZvdW5kdmFsdWVzKQogCiBkZWYgcmVnaXN0ZXJfcmVjaXBlX2hhbmRsZXJzKGhhbmRsZXJzKToKICAgICAjIFNldCBwcmlvcml0aWVzIHdpdGggc29tZSBnYXBzIHNvIHRoYXQgb3RoZXIgcGx1Z2lucyBjYW4gaW5zZXJ0CmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvcmVjaXBldG9vbC9jcmVhdGVfYnVpbGRzeXNfcHl0aG9uLnB5IGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L3NjcmlwdHMvbGliL3JlY2lwZXRvb2wvY3JlYXRlX2J1aWxkc3lzX3B5dGhvbi5weQppbmRleCBjMzgyMzMwLi5lNDFkODFhIDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvcmVjaXBldG9vbC9jcmVhdGVfYnVpbGRzeXNfcHl0aG9uLnB5CisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9yZWNpcGV0b29sL2NyZWF0ZV9idWlsZHN5c19weXRob24ucHkKQEAgLTYxLDggKzYxLDYgQEAKICAgICB9CiAgICAgIyBQTi9QViBhcmUgYWxyZWFkeSBzZXQgYnkgcmVjaXBldG9vbCBjb3JlICYgZGVzYyBjYW4gYmUgZXh0cmVtZWx5IGxvbmcKICAgICBleGNsdWRlZF9maWVsZHMgPSBbCi0gICAgICAgICdOYW1lJywKLSAgICAgICAgJ1ZlcnNpb24nLAogICAgICAgICAnRGVzY3JpcHRpb24nLAogICAgIF0KICAgICBzZXR1cF9wYXJzZV9tYXAgPSB7CkBAIC04OCw4ICs4NiwxMSBAQAogICAgIF0KICAgICBzZXR1cGFyZ19tdWx0aV9saW5lX3ZhbHVlcyA9IFsnRGVzY3JpcHRpb24nXQogICAgIHJlcGxhY2VtZW50cyA9IFsKKyAgICAgICAgKCdMaWNlbnNlJywgcicgKyQnLCAnJyksCisgICAgICAgICgnTGljZW5zZScsIHInXiArJywgJycpLAogICAgICAgICAoJ0xpY2Vuc2UnLCByJyAnLCAnLScpLAotICAgICAgICAoJ0xpY2Vuc2UnLCByJy1MaWNlbnNlJCcsICcnKSwKKyAgICAgICAgKCdMaWNlbnNlJywgcideR05VLScsICcnKSwKKyAgICAgICAgKCdMaWNlbnNlJywgcictW0xsXWljZW5bY3NdZSgsPy1bVnZdZXJzaW9uKT8nLCAnJyksCiAgICAgICAgICgnTGljZW5zZScsIHInXlVOS05PV04kJywgJycpLAogCiAgICAgICAgICMgUmVtb3ZlIGN1cnJlbnRseSB1bmhhbmRsZWQgdmVyc2lvbiBudW1iZXJzIGZyb20gdGhlc2UgdmFyaWFibGVzCkBAIC0yMTgsNiArMjE5LDkgQEAKICAgICAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAgICAgaW5mbyA9IHNlbGYuZ2V0X3NldHVwX2FyZ3NfaW5mbyhzZXR1cHNjcmlwdCkKIAorICAgICAgICAjIEdyYWIgdGhlIGxpY2Vuc2UgdmFsdWUgYmVmb3JlIGFwcGx5aW5nIHJlcGxhY2VtZW50cworICAgICAgICBsaWNlbnNlX3N0ciA9IGluZm8uZ2V0KCdMaWNlbnNlJywgJycpLnN0cmlwKCkKKwogICAgICAgICBzZWxmLmFwcGx5X2luZm9fcmVwbGFjZW1lbnRzKGluZm8pCiAKICAgICAgICAgaWYgdXNlc19zZXR1cHRvb2xzOgpAQCAtMjI1LDYzICsyMjksNTMgQEAKICAgICAgICAgZWxzZToKICAgICAgICAgICAgIGNsYXNzZXMuYXBwZW5kKCdkaXN0dXRpbHMnKQogCisgICAgICAgIGlmIGxpY2Vuc2Vfc3RyOgorICAgICAgICAgICAgZm9yIGksIGxpbmUgaW4gZW51bWVyYXRlKGxpbmVzX2JlZm9yZSk6CisgICAgICAgICAgICAgICAgaWYgbGluZS5zdGFydHN3aXRoKCdMSUNFTlNFID0gJyk6CisgICAgICAgICAgICAgICAgICAgIGxpbmVzX2JlZm9yZS5pbnNlcnQoaSwgJyMgTk9URTogTGljZW5zZSBpbiBzZXR1cC5weS9QS0dJTkZPIGlzOiAlcycgJSBsaWNlbnNlX3N0cikKKyAgICAgICAgICAgICAgICAgICAgYnJlYWsKKwogICAgICAgICBpZiAnQ2xhc3NpZmllcicgaW4gaW5mbzoKKyAgICAgICAgICAgIGV4aXN0aW5nX2xpY2Vuc2VzID0gaW5mby5nZXQoJ0xpY2Vuc2UnLCAnJykKICAgICAgICAgICAgIGxpY2Vuc2VzID0gW10KICAgICAgICAgICAgIGZvciBjbGFzc2lmaWVyIGluIGluZm9bJ0NsYXNzaWZpZXInXToKICAgICAgICAgICAgICAgICBpZiBjbGFzc2lmaWVyIGluIHNlbGYuY2xhc3NpZmllcl9saWNlbnNlX21hcDoKICAgICAgICAgICAgICAgICAgICAgbGljZW5zZSA9IHNlbGYuY2xhc3NpZmllcl9saWNlbnNlX21hcFtjbGFzc2lmaWVyXQorICAgICAgICAgICAgICAgICAgICBpZiBsaWNlbnNlID09ICdBcGFjaGUnIGFuZCAnQXBhY2hlLTIuMCcgaW4gZXhpc3RpbmdfbGljZW5zZXM6CisgICAgICAgICAgICAgICAgICAgICAgICBsaWNlbnNlID0gJ0FwYWNoZS0yLjAnCisgICAgICAgICAgICAgICAgICAgIGVsaWYgbGljZW5zZSA9PSAnR1BMJzoKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICdHUEwtMi4wJyBpbiBleGlzdGluZ19saWNlbnNlcyBvciAnR1BMdjInIGluIGV4aXN0aW5nX2xpY2Vuc2VzOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpY2Vuc2UgPSAnR1BMLTIuMCcKKyAgICAgICAgICAgICAgICAgICAgICAgIGVsaWYgJ0dQTC0zLjAnIGluIGV4aXN0aW5nX2xpY2Vuc2VzIG9yICdHUEx2MycgaW4gZXhpc3RpbmdfbGljZW5zZXM6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGljZW5zZSA9ICdHUEwtMy4wJworICAgICAgICAgICAgICAgICAgICBlbGlmIGxpY2Vuc2UgPT0gJ0xHUEwnOgorICAgICAgICAgICAgICAgICAgICAgICAgaWYgJ0xHUEwtMi4xJyBpbiBleGlzdGluZ19saWNlbnNlcyBvciAnTEdQTHYyLjEnIGluIGV4aXN0aW5nX2xpY2Vuc2VzOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpY2Vuc2UgPSAnTEdQTC0yLjEnCisgICAgICAgICAgICAgICAgICAgICAgICBlbGlmICdMR1BMLTIuMCcgaW4gZXhpc3RpbmdfbGljZW5zZXMgb3IgJ0xHUEx2MicgaW4gZXhpc3RpbmdfbGljZW5zZXM6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGljZW5zZSA9ICdMR1BMLTIuMCcKKyAgICAgICAgICAgICAgICAgICAgICAgIGVsaWYgJ0xHUEwtMy4wJyBpbiBleGlzdGluZ19saWNlbnNlcyBvciAnTEdQTHYzJyBpbiBleGlzdGluZ19saWNlbnNlczoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaWNlbnNlID0gJ0xHUEwtMy4wJwogICAgICAgICAgICAgICAgICAgICBsaWNlbnNlcy5hcHBlbmQobGljZW5zZSkKIAogICAgICAgICAgICAgaWYgbGljZW5zZXM6CiAgICAgICAgICAgICAgICAgaW5mb1snTGljZW5zZSddID0gJyAmICcuam9pbihsaWNlbnNlcykKIAotCiAgICAgICAgICMgTWFwIFBLRy1JTkZPICYgc2V0dXAucHkgZmllbGRzIHRvIGJpdGJha2UgdmFyaWFibGVzCi0gICAgICAgIGJiaW5mbyA9IHt9Ci0gICAgICAgIGZvciBmaWVsZCwgdmFsdWVzIGluIGluZm8uaXRlcml0ZW1zKCk6CisgICAgICAgIGZvciBmaWVsZCwgdmFsdWVzIGluIGluZm8uaXRlbXMoKToKICAgICAgICAgICAgIGlmIGZpZWxkIGluIHNlbGYuZXhjbHVkZWRfZmllbGRzOgogICAgICAgICAgICAgICAgIGNvbnRpbnVlCiAKICAgICAgICAgICAgIGlmIGZpZWxkIG5vdCBpbiBzZWxmLmJidmFyX21hcDoKICAgICAgICAgICAgICAgICBjb250aW51ZQogCi0gICAgICAgICAgICBpZiBpc2luc3RhbmNlKHZhbHVlcywgYmFzZXN0cmluZyk6CisgICAgICAgICAgICBpZiBpc2luc3RhbmNlKHZhbHVlcywgc3RyKToKICAgICAgICAgICAgICAgICB2YWx1ZSA9IHZhbHVlcwogICAgICAgICAgICAgZWxzZToKICAgICAgICAgICAgICAgICB2YWx1ZSA9ICcgJy5qb2luKHN0cih2KSBmb3IgdiBpbiB2YWx1ZXMgaWYgdikKIAogICAgICAgICAgICAgYmJ2YXIgPSBzZWxmLmJidmFyX21hcFtmaWVsZF0KLSAgICAgICAgICAgIGlmIGJidmFyIG5vdCBpbiBiYmluZm8gYW5kIHZhbHVlOgotICAgICAgICAgICAgICAgIGJiaW5mb1tiYnZhcl0gPSB2YWx1ZQotCi0gICAgICAgIGNvbW1lbnRfbGljX2xpbmUgPSBOb25lCi0gICAgICAgIGZvciBwb3MsIGxpbmUgaW4gZW51bWVyYXRlKGxpc3QobGluZXNfYmVmb3JlKSk6Ci0gICAgICAgICAgICBpZiBsaW5lLnN0YXJ0c3dpdGgoJyMnKSBhbmQgJ0xJQ0VOU0UnIGluIGxpbmU6Ci0gICAgICAgICAgICAgICAgY29tbWVudF9saWNfbGluZSA9IHBvcwotICAgICAgICAgICAgZWxpZiBsaW5lLnN0YXJ0c3dpdGgoJ0xJQ0VOU0UgPScpIGFuZCAnTElDRU5TRScgaW4gYmJpbmZvOgotICAgICAgICAgICAgICAgIGlmIGxpbmUgaW4gKCdMSUNFTlNFID0gIlVua25vd24iJywgJ0xJQ0VOU0UgPSAiQ0xPU0VEIicpOgotICAgICAgICAgICAgICAgICAgICBsaW5lc19iZWZvcmVbcG9zXSA9ICdMSUNFTlNFID0gInt9IicuZm9ybWF0KGJiaW5mb1snTElDRU5TRSddKQotICAgICAgICAgICAgICAgICAgICBpZiBsaW5lID09ICdMSUNFTlNFID0gIkNMT1NFRCInIGFuZCBjb21tZW50X2xpY19saW5lOgotICAgICAgICAgICAgICAgICAgICAgICAgbGluZXNfYmVmb3JlW2NvbW1lbnRfbGljX2xpbmU6cG9zXSA9IFsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAnIyBXQVJOSU5HOiB0aGUgZm9sbG93aW5nIExJQ0VOU0UgdmFsdWUgaXMgYSBiZXN0IGd1ZXNzIC0gaXQgaXMgeW91cicsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgJyMgcmVzcG9uc2liaWxpdHkgdG8gdmVyaWZ5IHRoYXQgdGhlIHZhbHVlIGlzIGNvbXBsZXRlIGFuZCBjb3JyZWN0LicKLSAgICAgICAgICAgICAgICAgICAgICAgIF0KLSAgICAgICAgICAgICAgICBkZWwgYmJpbmZvWydMSUNFTlNFJ10KLQotICAgICAgICBzcmNfdXJpX2xpbmUgPSBOb25lCi0gICAgICAgIGZvciBwb3MsIGxpbmUgaW4gZW51bWVyYXRlKGxpbmVzX2JlZm9yZSk6Ci0gICAgICAgICAgICBpZiBsaW5lLnN0YXJ0c3dpdGgoJ1NSQ19VUkkgPScpOgotICAgICAgICAgICAgICAgIHNyY191cmlfbGluZSA9IHBvcwotCi0gICAgICAgIGlmIGJiaW5mbzoKLSAgICAgICAgICAgIG1kaW5mbyA9IFsnJ10KLSAgICAgICAgICAgIGZvciBrIGluIHNvcnRlZChiYmluZm8pOgotICAgICAgICAgICAgICAgIHYgPSBiYmluZm9ba10KLSAgICAgICAgICAgICAgICBtZGluZm8uYXBwZW5kKCd7fSA9ICJ7fSInLmZvcm1hdChrLCB2KSkKLSAgICAgICAgICAgIGlmIHNyY191cmlfbGluZToKLSAgICAgICAgICAgICAgICBsaW5lc19iZWZvcmVbc3JjX3VyaV9saW5lLTE6c3JjX3VyaV9saW5lLTFdID0gbWRpbmZvCi0gICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgIGxpbmVzX2JlZm9yZS5leHRlbmQobWRpbmZvKQorICAgICAgICAgICAgaWYgYmJ2YXIgbm90IGluIGV4dHJhdmFsdWVzIGFuZCB2YWx1ZToKKyAgICAgICAgICAgICAgICBleHRyYXZhbHVlc1tiYnZhcl0gPSB2YWx1ZQogCiAgICAgICAgIG1hcHBlZF9kZXBzLCB1bm1hcHBlZF9kZXBzID0gc2VsZi5zY2FuX3NldHVwX3B5dGhvbl9kZXBzKHNyY3RyZWUsIHNldHVwX2luZm8sIHNldHVwX25vbl9saXRlcmFscykKIApAQCAtMjk0LDggKzI4OCw4IEBACiAgICAgICAgICAgICAgICAgbGluZXNfYWZ0ZXIuYXBwZW5kKCcjIFRoZSB1cHN0cmVhbSBuYW1lcyBtYXkgbm90IGNvcnJlc3BvbmQgZXhhY3RseSB0byBiaXRiYWtlIHBhY2thZ2UgbmFtZXMuJykKICAgICAgICAgICAgICAgICBsaW5lc19hZnRlci5hcHBlbmQoJyMnKQogICAgICAgICAgICAgICAgIGxpbmVzX2FmdGVyLmFwcGVuZCgnIyBVbmNvbW1lbnQgdGhpcyBsaW5lIHRvIGVuYWJsZSBhbGwgdGhlIG9wdGlvbmFsIGZlYXR1cmVzLicpCi0gICAgICAgICAgICAgICAgbGluZXNfYWZ0ZXIuYXBwZW5kKCcjUEFDS0FHRUNPTkZJRyA/PSAie30iJy5mb3JtYXQoJyAnLmpvaW4oay5sb3dlcigpIGZvciBrIGluIGV4dHJhc19yZXEuaXRlcmtleXMoKSkpKQotICAgICAgICAgICAgICAgIGZvciBmZWF0dXJlLCBmZWF0dXJlX3JlcXMgaW4gZXh0cmFzX3JlcS5pdGVyaXRlbXMoKToKKyAgICAgICAgICAgICAgICBsaW5lc19hZnRlci5hcHBlbmQoJyNQQUNLQUdFQ09ORklHID89ICJ7fSInLmZvcm1hdCgnICcuam9pbihrLmxvd2VyKCkgZm9yIGsgaW4gZXh0cmFzX3JlcSkpKQorICAgICAgICAgICAgICAgIGZvciBmZWF0dXJlLCBmZWF0dXJlX3JlcXMgaW4gZXh0cmFzX3JlcS5pdGVtcygpOgogICAgICAgICAgICAgICAgICAgICB1bm1hcHBlZF9kZXBzLmRpZmZlcmVuY2VfdXBkYXRlKGZlYXR1cmVfcmVxcykKIAogICAgICAgICAgICAgICAgICAgICBmZWF0dXJlX3JlcV9kZXBzID0gKCdweXRob24tJyArIHIucmVwbGFjZSgnLicsICctJykubG93ZXIoKSBmb3IgciBpbiBzb3J0ZWQoZmVhdHVyZV9yZXFzKSkKQEAgLTM2MSw3ICszNTUsNyBAQAogCiAgICAgICAgICMgTmFpdmUgbWFwcGluZyBvZiBzZXR1cCgpIGFyZ3VtZW50cyB0byBQS0ctSU5GTyBmaWVsZCBuYW1lcwogICAgICAgICBmb3IgZCBpbiBbaW5mbywgbm9uX2xpdGVyYWxzXToKLSAgICAgICAgICAgIGZvciBrZXksIHZhbHVlIGluIGQuaXRlbXMoKToKKyAgICAgICAgICAgIGZvciBrZXksIHZhbHVlIGluIGxpc3QoZC5pdGVtcygpKToKICAgICAgICAgICAgICAgICBuZXdfa2V5ID0gX21hcChrZXkpCiAgICAgICAgICAgICAgICAgaWYgbmV3X2tleSAhPSBrZXk6CiAgICAgICAgICAgICAgICAgICAgIGRlbCBkW2tleV0KQEAgLTQzNiwxNCArNDMwLDE0IEBACiAgICAgICAgICAgICAgICAgcmV0dXJuIHZhbHVlCiAKICAgICAgICAgICAgIHZhbHVlID0gaW5mb1t2YXJpYWJsZV0KLSAgICAgICAgICAgIGlmIGlzaW5zdGFuY2UodmFsdWUsIGJhc2VzdHJpbmcpOgorICAgICAgICAgICAgaWYgaXNpbnN0YW5jZSh2YWx1ZSwgc3RyKToKICAgICAgICAgICAgICAgICBuZXdfdmFsdWUgPSByZXBsYWNlX3ZhbHVlKHNlYXJjaCwgcmVwbGFjZSwgdmFsdWUpCiAgICAgICAgICAgICAgICAgaWYgbmV3X3ZhbHVlIGlzIE5vbmU6CiAgICAgICAgICAgICAgICAgICAgIGRlbCBpbmZvW3ZhcmlhYmxlXQogICAgICAgICAgICAgICAgIGVsaWYgbmV3X3ZhbHVlICE9IHZhbHVlOgogICAgICAgICAgICAgICAgICAgICBpbmZvW3ZhcmlhYmxlXSA9IG5ld192YWx1ZQotICAgICAgICAgICAgZWxpZiBoYXNhdHRyKHZhbHVlLCAnaXRlcml0ZW1zJyk6Ci0gICAgICAgICAgICAgICAgZm9yIGRrZXksIGR2YWx1ZSBpbiB2YWx1ZS5pdGVyaXRlbXMoKToKKyAgICAgICAgICAgIGVsaWYgaGFzYXR0cih2YWx1ZSwgJ2l0ZW1zJyk6CisgICAgICAgICAgICAgICAgZm9yIGRrZXksIGR2YWx1ZSBpbiBsaXN0KHZhbHVlLml0ZW1zKCkpOgogICAgICAgICAgICAgICAgICAgICBuZXdfbGlzdCA9IFtdCiAgICAgICAgICAgICAgICAgICAgIGZvciBwb3MsIGFfdmFsdWUgaW4gZW51bWVyYXRlKGR2YWx1ZSk6CiAgICAgICAgICAgICAgICAgICAgICAgICBuZXdfdmFsdWUgPSByZXBsYWNlX3ZhbHVlKHNlYXJjaCwgcmVwbGFjZSwgYV92YWx1ZSkKQEAgLTUwNCw4ICs0OTgsMTAgQEAKICAgICAgICAgZm9yIGRlcCBpbiBzY2FubmVkX2RlcHM6CiAgICAgICAgICAgICBtYXBwZWQgPSBwcm92aWRlZF9wYWNrYWdlcy5nZXQoZGVwKQogICAgICAgICAgICAgaWYgbWFwcGVkOgorICAgICAgICAgICAgICAgIGxvZ2dlci5kZWJ1ZygnTWFwcGVkICVzIHRvICVzJyAlIChkZXAsIG1hcHBlZCkpCiAgICAgICAgICAgICAgICAgbWFwcGVkX2RlcHMuYWRkKG1hcHBlZCkKICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgbG9nZ2VyLmRlYnVnKCdDb3VsZCBub3QgbWFwICVzJyAlIGRlcCkKICAgICAgICAgICAgICAgICB1bm1hcHBlZF9kZXBzLmFkZChkZXApCiAgICAgICAgIHJldHVybiBtYXBwZWRfZGVwcywgdW5tYXBwZWRfZGVwcwogCkBAIC01MTYsNyArNTEyLDcgQEAKICAgICAgICAgZXhjZXB0IChPU0Vycm9yLCBzdWJwcm9jZXNzLkNhbGxlZFByb2Nlc3NFcnJvcik6CiAgICAgICAgICAgICBwYXNzCiAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICBmb3IgbGluZSBpbiBkZXBfb3V0cHV0LnNwbGl0bGluZXMoKToKKyAgICAgICAgICAgIGZvciBsaW5lIGluIGRlcF9vdXRwdXQuZGVjb2RlKCd1dGYtOCcpLnNwbGl0bGluZXMoKToKICAgICAgICAgICAgICAgICBsaW5lID0gbGluZS5yc3RyaXAoKQogICAgICAgICAgICAgICAgIGRlcCwgZmlsZW5hbWUgPSBsaW5lLnNwbGl0KCdcdCcsIDEpCiAgICAgICAgICAgICAgICAgaWYgZmlsZW5hbWUuZW5kc3dpdGgoJy9zZXR1cC5weScpOgpAQCAtNTU4LDcgKzU1NCw3IEBACiAgICAgICAgICAgICAgICAgZWxzZToKICAgICAgICAgICAgICAgICAgICAgY29udGludWUKIAotICAgICAgICAgICAgZm9yIGZuIGluIGZpbGVzX2luZm8uaXRlcmtleXMoKToKKyAgICAgICAgICAgIGZvciBmbiBpbiBmaWxlc19pbmZvOgogICAgICAgICAgICAgICAgIGZvciBzdWZmaXggaW4gc3VmZml4ZXM6CiAgICAgICAgICAgICAgICAgICAgIGlmIGZuLmVuZHN3aXRoKHN1ZmZpeCk6CiAgICAgICAgICAgICAgICAgICAgICAgICBicmVhawpAQCAtNTY2LDYgKzU2Miw4IEBACiAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCiAKICAgICAgICAgICAgICAgICBpZiBmbi5zdGFydHN3aXRoKGR5bmxvYWRfZGlyICsgb3Muc2VwKToKKyAgICAgICAgICAgICAgICAgICAgaWYgJy8uZGVidWcvJyBpbiBmbjoKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCiAgICAgICAgICAgICAgICAgICAgIGJhc2UgPSBvcy5wYXRoLmJhc2VuYW1lKGZuKQogICAgICAgICAgICAgICAgICAgICBwcm92aWRlZCA9IGJhc2Uuc3BsaXQoJy4nLCAxKVswXQogICAgICAgICAgICAgICAgICAgICBwYWNrYWdlc1twcm92aWRlZF0gPSBvcy5wYXRoLmJhc2VuYW1lKHBrZ2RhdGFmaWxlKQpAQCAtNjA4LDcgKzYwNiw3IEBACiAgICAgdmlzaXRvci52aXNpdChwYXJzZWQpCiAKICAgICBub25fbGl0ZXJhbHMsIGV4dGVuc2lvbnMgPSB7fSwgW10KLSAgICBmb3Iga2V5LCB2YWx1ZSBpbiB2aXNpdG9yLmtleXdvcmRzLml0ZW1zKCk6CisgICAgZm9yIGtleSwgdmFsdWUgaW4gbGlzdCh2aXNpdG9yLmtleXdvcmRzLml0ZW1zKCkpOgogICAgICAgICBpZiBrZXkgPT0gJ2V4dF9tb2R1bGVzJzoKICAgICAgICAgICAgIGlmIGlzaW5zdGFuY2UodmFsdWUsIGxpc3QpOgogICAgICAgICAgICAgICAgIGZvciBleHQgaW4gdmFsdWU6CkBAIC02NDAsNyArNjM4LDcgQEAKICAgICBkZWYgdmlzaXRfc2V0dXAoc2VsZiwgbm9kZSk6CiAgICAgICAgIGNhbGwgPSBMaXRlcmFsQXN0VHJhbnNmb3JtKCkudmlzaXQobm9kZSkKICAgICAgICAgc2VsZi5rZXl3b3JkcyA9IGNhbGwua2V5d29yZHMKLSAgICAgICAgZm9yIGssIHYgaW4gc2VsZi5rZXl3b3Jkcy5pdGVyaXRlbXMoKToKKyAgICAgICAgZm9yIGssIHYgaW4gc2VsZi5rZXl3b3Jkcy5pdGVtcygpOgogICAgICAgICAgICAgaWYgaGFzX25vbl9saXRlcmFscyh2KToKICAgICAgICAgICAgICAgIHNlbGYubm9uX2xpdGVyYWxzLmFwcGVuZChrKQogCkBAIC03MDYsMTAgKzcwNCwxMCBAQAogZGVmIGhhc19ub25fbGl0ZXJhbHModmFsdWUpOgogICAgIGlmIGlzaW5zdGFuY2UodmFsdWUsIGFzdC5BU1QpOgogICAgICAgICByZXR1cm4gVHJ1ZQotICAgIGVsaWYgaXNpbnN0YW5jZSh2YWx1ZSwgYmFzZXN0cmluZyk6CisgICAgZWxpZiBpc2luc3RhbmNlKHZhbHVlLCBzdHIpOgogICAgICAgICByZXR1cm4gRmFsc2UKLSAgICBlbGlmIGhhc2F0dHIodmFsdWUsICdpdGVydmFsdWVzJyk6Ci0gICAgICAgIHJldHVybiBhbnkoaGFzX25vbl9saXRlcmFscyh2KSBmb3IgdiBpbiB2YWx1ZS5pdGVydmFsdWVzKCkpCisgICAgZWxpZiBoYXNhdHRyKHZhbHVlLCAndmFsdWVzJyk6CisgICAgICAgIHJldHVybiBhbnkoaGFzX25vbl9saXRlcmFscyh2KSBmb3IgdiBpbiB2YWx1ZS52YWx1ZXMoKSkKICAgICBlbGlmIGhhc2F0dHIodmFsdWUsICdfX2l0ZXJfXycpOgogICAgICAgICByZXR1cm4gYW55KGhhc19ub25fbGl0ZXJhbHModikgZm9yIHYgaW4gdmFsdWUpCiAKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9yZWNpcGV0b29sL2NyZWF0ZV9rZXJuZWwucHkgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvcmVjaXBldG9vbC9jcmVhdGVfa2VybmVsLnB5CmluZGV4IGM2ZTg2YmQuLjdkYWM1OWYgMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9yZWNpcGV0b29sL2NyZWF0ZV9rZXJuZWwucHkKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L3NjcmlwdHMvbGliL3JlY2lwZXRvb2wvY3JlYXRlX2tlcm5lbC5weQpAQCAtNTksNyArNTksNyBAQAogICAgICAgICAgICAgICAgICAgICBrcGF0Y2hsZXZlbCA9IC0xCiAgICAgICAgICAgICAgICAgICAgIGtzdWJsZXZlbCA9IC0xCiAgICAgICAgICAgICAgICAgICAgIGtleHRyYXZlcnNpb24gPSAnJwotICAgICAgICAgICAgICAgICAgICB3aXRoIG9wZW4obWFrZWZpbGUsICdyJykgYXMgZjoKKyAgICAgICAgICAgICAgICAgICAgd2l0aCBvcGVuKG1ha2VmaWxlLCAncicsIGVycm9ycz0nc3Vycm9nYXRlZXNjYXBlJykgYXMgZjoKICAgICAgICAgICAgICAgICAgICAgICAgIGZvciBpLCBsaW5lIGluIGVudW1lcmF0ZShmKToKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiBpID4gMTA6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvcmVjaXBldG9vbC9jcmVhdGVfa21vZC5weSBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9yZWNpcGV0b29sL2NyZWF0ZV9rbW9kLnB5CmluZGV4IGZlMzllZGIuLjdjZjE4OGQgMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9yZWNpcGV0b29sL2NyZWF0ZV9rbW9kLnB5CisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9yZWNpcGV0b29sL2NyZWF0ZV9rbW9kLnB5CkBAIC01Myw3ICs1Myw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsKICAgICAgICAgICAgICAgICBlbHNlOgogICAgICAgICAgICAgICAgICAgICBjb250aW51ZQotICAgICAgICAgICAgICAgIHdpdGggb3BlbihjZmlsZSwgJ3InKSBhcyBmOgorICAgICAgICAgICAgICAgIHdpdGggb3BlbihjZmlsZSwgJ3InLCBlcnJvcnM9J3N1cnJvZ2F0ZWVzY2FwZScpIGFzIGY6CiAgICAgICAgICAgICAgICAgICAgIGZvciBsaW5lIGluIGY6CiAgICAgICAgICAgICAgICAgICAgICAgICBpZiBtb2R1bGVfaW5jX3JlLm1hdGNoKGxpbmUuc3RyaXAoKSk6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXNfbW9kdWxlID0gVHJ1ZQpAQCAtNzMsNyArNzMsNyBAQAogICAgICAgICAgICAgaW5faW5zdGFsbCA9IEZhbHNlCiAgICAgICAgICAgICBpbl9jb21waWxlID0gRmFsc2UKICAgICAgICAgICAgIGluc3RhbGxfdGFyZ2V0ID0gTm9uZQotICAgICAgICAgICAgd2l0aCBvcGVuKG1ha2VmaWxlLCAncicpIGFzIGY6CisgICAgICAgICAgICB3aXRoIG9wZW4obWFrZWZpbGUsICdyJywgZXJyb3JzPSdzdXJyb2dhdGVlc2NhcGUnKSBhcyBmOgogICAgICAgICAgICAgICAgIGZvciBsaW5lIGluIGY6CiAgICAgICAgICAgICAgICAgICAgIGlmIGxpbmUuc3RhcnRzd2l0aCgnaW5zdGFsbDonKToKICAgICAgICAgICAgICAgICAgICAgICAgIGlmIG5vdCBpbnN0YWxsX2xpbmVzOgpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L3NjcmlwdHMvbGliL3JlY2lwZXRvb2wvY3JlYXRlX25wbS5weSBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9yZWNpcGV0b29sL2NyZWF0ZV9ucG0ucHkKaW5kZXggYjNmZmNkYi4uN2JiODQ0YyAxMDA2NDQKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L3NjcmlwdHMvbGliL3JlY2lwZXRvb2wvY3JlYXRlX25wbS5weQorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvcmVjaXBldG9vbC9jcmVhdGVfbnBtLnB5CkBAIC0yMSw3ICsyMSw3IEBACiBpbXBvcnQgdGVtcGZpbGUKIGltcG9ydCBzaHV0aWwKIGltcG9ydCBqc29uCi1mcm9tIHJlY2lwZXRvb2wuY3JlYXRlIGltcG9ydCBSZWNpcGVIYW5kbGVyLCBzcGxpdF9wa2dfbGljZW5zZXMKK2Zyb20gcmVjaXBldG9vbC5jcmVhdGUgaW1wb3J0IFJlY2lwZUhhbmRsZXIsIHNwbGl0X3BrZ19saWNlbnNlcywgaGFuZGxlX2xpY2Vuc2VfdmFycywgY2hlY2tfbnBtCiAKIGxvZ2dlciA9IGxvZ2dpbmcuZ2V0TG9nZ2VyKCdyZWNpcGV0b29sJykKIApAQCAtNDUsNyArNDUsNyBAQAogICAgICAgICAgICAgbGljZW5zZSA9IGRhdGFbJ2xpY2Vuc2UnXQogICAgICAgICAgICAgaWYgaXNpbnN0YW5jZShsaWNlbnNlLCBkaWN0KToKICAgICAgICAgICAgICAgICBsaWNlbnNlID0gbGljZW5zZS5nZXQoJ3R5cGUnLCBOb25lKQotICAgICAgICByZXR1cm4gTm9uZQorICAgICAgICByZXR1cm4gbGljZW5zZQogCiAgICAgZGVmIF9zaHJpbmt3cmFwKHNlbGYsIHNyY3RyZWUsIGxvY2FsZmlsZXNkaXIsIGV4dHJhdmFsdWVzLCBsaW5lc19iZWZvcmUpOgogICAgICAgICB0cnk6CkBAIC04Myw2ICs4Myw2NiBAQAogICAgICAgICBleHRyYXZhbHVlc1snZXh0cmFmaWxlcyddWydsb2NrZG93bi5qc29uJ10gPSB0bXBmaWxlCiAgICAgICAgIGxpbmVzX2JlZm9yZS5hcHBlbmQoJ05QTV9MT0NLRE9XTiA6PSAiJHtUSElTRElSfS8ke1BOfS9sb2NrZG93bi5qc29uIicpCiAKKyAgICBkZWYgX2hhbmRsZV9kZXBlbmRlbmNpZXMoc2VsZiwgZCwgZGVwcywgbGluZXNfYmVmb3JlLCBzcmN0cmVlKToKKyAgICAgICAgaW1wb3J0IHNjcmlwdHV0aWxzCisgICAgICAgICMgSWYgdGhpcyBpc24ndCBhIHNpbmdsZSBtb2R1bGUgd2UgbmVlZCB0byBnZXQgdGhlIGRlcGVuZGVuY2llcworICAgICAgICAjIGFuZCBhZGQgdGhlbSB0byBTUkNfVVJJCisgICAgICAgIGRlZiB2YXJmdW5jKHZhcm5hbWUsIG9yaWd2YWx1ZSwgb3AsIG5ld2xpbmVzKToKKyAgICAgICAgICAgIGlmIHZhcm5hbWUgPT0gJ1NSQ19VUkknOgorICAgICAgICAgICAgICAgIGlmIG5vdCBvcmlndmFsdWUuc3RhcnRzd2l0aCgnbnBtOi8vJyk6CisgICAgICAgICAgICAgICAgICAgIHNyY191cmkgPSBvcmlndmFsdWUuc3BsaXQoKQorICAgICAgICAgICAgICAgICAgICBjaGFuZ2VkID0gRmFsc2UKKyAgICAgICAgICAgICAgICAgICAgZm9yIGRlcCwgZGVwZGF0YSBpbiBkZXBzLml0ZW1zKCk6CisgICAgICAgICAgICAgICAgICAgICAgICB2ZXJzaW9uID0gc2VsZi5nZXRfbm9kZV92ZXJzaW9uKGRlcCwgZGVwZGF0YSwgZCkKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIHZlcnNpb246CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXJsID0gJ25wbTovL3JlZ2lzdHJ5Lm5wbWpzLm9yZztuYW1lPSVzO3ZlcnNpb249JXM7c3ViZGlyPW5vZGVfbW9kdWxlcy8lcycgJSAoZGVwLCB2ZXJzaW9uLCBkZXApCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2NyaXB0dXRpbHMuZmV0Y2hfdXJpKGQsIHVybCwgc3JjdHJlZSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcmNfdXJpLmFwcGVuZCh1cmwpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhbmdlZCA9IFRydWUKKyAgICAgICAgICAgICAgICAgICAgaWYgY2hhbmdlZDoKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBzcmNfdXJpLCBOb25lLCAtMSwgVHJ1ZQorICAgICAgICAgICAgcmV0dXJuIG9yaWd2YWx1ZSwgTm9uZSwgMCwgVHJ1ZQorICAgICAgICB1cGRhdGVkLCBuZXdsaW5lcyA9IGJiLnV0aWxzLmVkaXRfbWV0YWRhdGEobGluZXNfYmVmb3JlLCBbJ1NSQ19VUkknXSwgdmFyZnVuYykKKyAgICAgICAgaWYgdXBkYXRlZDoKKyAgICAgICAgICAgIGRlbCBsaW5lc19iZWZvcmVbOl0KKyAgICAgICAgICAgIGZvciBsaW5lIGluIG5ld2xpbmVzOgorICAgICAgICAgICAgICAgICMgSGFjayB0byBhdm9pZCBuZXdsaW5lcyB0aGF0IGVkaXRfbWV0YWRhdGEgaW5zZXJ0cworICAgICAgICAgICAgICAgIGlmIGxpbmUuZW5kc3dpdGgoJ1xuJyk6CisgICAgICAgICAgICAgICAgICAgIGxpbmUgPSBsaW5lWzotMV0KKyAgICAgICAgICAgICAgICBsaW5lc19iZWZvcmUuYXBwZW5kKGxpbmUpCisgICAgICAgIHJldHVybiB1cGRhdGVkCisKKyAgICBkZWYgX3JlcGxhY2VfbGljZW5zZV92YXJzKHNlbGYsIHNyY3RyZWUsIGxpbmVzX2JlZm9yZSwgaGFuZGxlZCwgZXh0cmF2YWx1ZXMsIGQpOgorICAgICAgICBmb3IgaXRlbSBpbiBoYW5kbGVkOgorICAgICAgICAgICAgaWYgaXNpbnN0YW5jZShpdGVtLCB0dXBsZSk6CisgICAgICAgICAgICAgICAgaWYgaXRlbVswXSA9PSAnbGljZW5zZSc6CisgICAgICAgICAgICAgICAgICAgIGRlbCBpdGVtCisgICAgICAgICAgICAgICAgICAgIGJyZWFrCisKKyAgICAgICAgY2FsbGVkdmFycyA9IFtdCisgICAgICAgIGRlZiB2YXJmdW5jKHZhcm5hbWUsIG9yaWd2YWx1ZSwgb3AsIG5ld2xpbmVzKToKKyAgICAgICAgICAgIGlmIHZhcm5hbWUgaW4gWydMSUNFTlNFJywgJ0xJQ19GSUxFU19DSEtTVU0nXToKKyAgICAgICAgICAgICAgICBmb3IgaSwgZSBpbiBlbnVtZXJhdGUocmV2ZXJzZWQobmV3bGluZXMpKToKKyAgICAgICAgICAgICAgICAgICAgaWYgbm90IGUuc3RhcnRzd2l0aCgnIycpOgorICAgICAgICAgICAgICAgICAgICAgICAgc3RvcCA9IGkKKyAgICAgICAgICAgICAgICAgICAgICAgIHdoaWxlIHN0b3AgPiAwOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ld2xpbmVzLnBvcCgpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RvcCAtPSAxCisgICAgICAgICAgICAgICAgICAgICAgICBicmVhaworICAgICAgICAgICAgICAgIGNhbGxlZHZhcnMuYXBwZW5kKHZhcm5hbWUpCisgICAgICAgICAgICAgICAgaWYgbGVuKGNhbGxlZHZhcnMpID4gMToKKyAgICAgICAgICAgICAgICAgICAgIyBUaGUgc2Vjb25kIHRpbWUgYXJvdW5kLCBwdXQgdGhlIG5ldyBsaWNlbnNlIHRleHQgaW4KKyAgICAgICAgICAgICAgICAgICAgaW5zZXJ0cG9zID0gbGVuKG5ld2xpbmVzKQorICAgICAgICAgICAgICAgICAgICBoYW5kbGVfbGljZW5zZV92YXJzKHNyY3RyZWUsIG5ld2xpbmVzLCBoYW5kbGVkLCBleHRyYXZhbHVlcywgZCkKKyAgICAgICAgICAgICAgICByZXR1cm4gTm9uZSwgTm9uZSwgMCwgVHJ1ZQorICAgICAgICAgICAgcmV0dXJuIG9yaWd2YWx1ZSwgTm9uZSwgMCwgVHJ1ZQorICAgICAgICB1cGRhdGVkLCBuZXdsaW5lcyA9IGJiLnV0aWxzLmVkaXRfbWV0YWRhdGEobGluZXNfYmVmb3JlLCBbJ0xJQ0VOU0UnLCAnTElDX0ZJTEVTX0NIS1NVTSddLCB2YXJmdW5jKQorICAgICAgICBpZiB1cGRhdGVkOgorICAgICAgICAgICAgZGVsIGxpbmVzX2JlZm9yZVs6XQorICAgICAgICAgICAgbGluZXNfYmVmb3JlLmV4dGVuZChuZXdsaW5lcykKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHJhaXNlIEV4Y2VwdGlvbignRGlkIG5vdCBmaW5kIGxpY2Vuc2UgdmFyaWFibGVzJykKKwogICAgIGRlZiBwcm9jZXNzKHNlbGYsIHNyY3RyZWUsIGNsYXNzZXMsIGxpbmVzX2JlZm9yZSwgbGluZXNfYWZ0ZXIsIGhhbmRsZWQsIGV4dHJhdmFsdWVzKToKICAgICAgICAgaW1wb3J0IGJiLnV0aWxzCiAgICAgICAgIGltcG9ydCBvZQpAQCAtOTIsMTEgKzE1MiwxMyBAQAogICAgICAgICAgICAgcmV0dXJuIEZhbHNlCiAKICAgICAgICAgZGVmIHJlYWRfcGFja2FnZV9qc29uKGZuKToKLSAgICAgICAgICAgIHdpdGggb3BlbihmbiwgJ3InKSBhcyBmOgorICAgICAgICAgICAgd2l0aCBvcGVuKGZuLCAncicsIGVycm9ycz0nc3Vycm9nYXRlZXNjYXBlJykgYXMgZjoKICAgICAgICAgICAgICAgICByZXR1cm4ganNvbi5sb2FkcyhmLnJlYWQoKSkKIAogICAgICAgICBmaWxlcyA9IFJlY2lwZUhhbmRsZXIuY2hlY2tmaWxlcyhzcmN0cmVlLCBbJ3BhY2thZ2UuanNvbiddKQogICAgICAgICBpZiBmaWxlczoKKyAgICAgICAgICAgIGNoZWNrX25wbSh0aW5mb2lsLmNvbmZpZ19kYXRhKQorCiAgICAgICAgICAgICBkYXRhID0gcmVhZF9wYWNrYWdlX2pzb24oZmlsZXNbMF0pCiAgICAgICAgICAgICBpZiAnbmFtZScgaW4gZGF0YSBhbmQgJ3ZlcnNpb24nIGluIGRhdGE6CiAgICAgICAgICAgICAgICAgZXh0cmF2YWx1ZXNbJ1BOJ10gPSBkYXRhWyduYW1lJ10KQEAgLTEwNCw5ICsxNjYsMTUgQEAKICAgICAgICAgICAgICAgICBjbGFzc2VzLmFwcGVuZCgnbnBtJykKICAgICAgICAgICAgICAgICBoYW5kbGVkLmFwcGVuZCgnYnVpbGRzeXN0ZW0nKQogICAgICAgICAgICAgICAgIGlmICdkZXNjcmlwdGlvbicgaW4gZGF0YToKLSAgICAgICAgICAgICAgICAgICAgbGluZXNfYmVmb3JlLmFwcGVuZCgnU1VNTUFSWSA9ICIlcyInICUgZGF0YVsnZGVzY3JpcHRpb24nXSkKKyAgICAgICAgICAgICAgICAgICAgZXh0cmF2YWx1ZXNbJ1NVTU1BUlknXSA9IGRhdGFbJ2Rlc2NyaXB0aW9uJ10KICAgICAgICAgICAgICAgICBpZiAnaG9tZXBhZ2UnIGluIGRhdGE6Ci0gICAgICAgICAgICAgICAgICAgIGxpbmVzX2JlZm9yZS5hcHBlbmQoJ0hPTUVQQUdFID0gIiVzIicgJSBkYXRhWydob21lcGFnZSddKQorICAgICAgICAgICAgICAgICAgICBleHRyYXZhbHVlc1snSE9NRVBBR0UnXSA9IGRhdGFbJ2hvbWVwYWdlJ10KKworICAgICAgICAgICAgICAgIGRlcHMgPSBkYXRhLmdldCgnZGVwZW5kZW5jaWVzJywge30pCisgICAgICAgICAgICAgICAgdXBkYXRlZCA9IHNlbGYuX2hhbmRsZV9kZXBlbmRlbmNpZXModGluZm9pbC5jb25maWdfZGF0YSwgZGVwcywgbGluZXNfYmVmb3JlLCBzcmN0cmVlKQorICAgICAgICAgICAgICAgIGlmIHVwZGF0ZWQ6CisgICAgICAgICAgICAgICAgICAgICMgV2UgbmVlZCB0byByZWRvIHRoZSBsaWNlbnNlIHN0dWZmCisgICAgICAgICAgICAgICAgICAgIHNlbGYuX3JlcGxhY2VfbGljZW5zZV92YXJzKHNyY3RyZWUsIGxpbmVzX2JlZm9yZSwgaGFuZGxlZCwgZXh0cmF2YWx1ZXMsIHRpbmZvaWwuY29uZmlnX2RhdGEpCiAKICAgICAgICAgICAgICAgICAjIFNocmlua3dyYXAKICAgICAgICAgICAgICAgICBsb2NhbGZpbGVzZGlyID0gdGVtcGZpbGUubWtkdGVtcChwcmVmaXg9J3JlY2lwZXRvb2wtbnBtJykKQEAgLTEyOCw3ICsxOTYsNyBAQAogICAgICAgICAgICAgICAgICAgICBsaWNlbnNlID0gc2VsZi5faGFuZGxlX2xpY2Vuc2UoZGF0YSkKICAgICAgICAgICAgICAgICAgICAgaWYgbGljZW5zZToKICAgICAgICAgICAgICAgICAgICAgICAgIGxpY2Vuc2VzWycke1BOfSddID0gbGljZW5zZQotICAgICAgICAgICAgICAgICAgICBmb3IgcGtnbmFtZSwgcGtnaXRlbSBpbiBucG1wYWNrYWdlcy5pdGVyaXRlbXMoKToKKyAgICAgICAgICAgICAgICAgICAgZm9yIHBrZ25hbWUsIHBrZ2l0ZW0gaW4gbnBtcGFja2FnZXMuaXRlbXMoKToKICAgICAgICAgICAgICAgICAgICAgICAgIF8sIHBkYXRhID0gcGtnaXRlbQogICAgICAgICAgICAgICAgICAgICAgICAgbGljZW5zZSA9IHNlbGYuX2hhbmRsZV9saWNlbnNlKHBkYXRhKQogICAgICAgICAgICAgICAgICAgICAgICAgaWYgbGljZW5zZToKQEAgLTEzNiw3ICsyMDQsNyBAQAogICAgICAgICAgICAgICAgICAgICAjIE5vdyB3cml0ZSBvdXQgdGhlIHBhY2thZ2Utc3BlY2lmaWMgbGljZW5zZSB2YWx1ZXMKICAgICAgICAgICAgICAgICAgICAgIyBXZSBuZWVkIHRvIHN0cmlwIG91dCB0aGUganNvbiBkYXRhIGRpY3RzIGZvciB0aGlzIHNpbmNlIHNwbGl0X3BrZ19saWNlbnNlcwogICAgICAgICAgICAgICAgICAgICAjIGlzbid0IGV4cGVjdGluZyBpdAotICAgICAgICAgICAgICAgICAgICBwYWNrYWdlcyA9IE9yZGVyZWREaWN0KCh4LHlbMF0pIGZvciB4LHkgaW4gbnBtcGFja2FnZXMuaXRlcml0ZW1zKCkpCisgICAgICAgICAgICAgICAgICAgIHBhY2thZ2VzID0gT3JkZXJlZERpY3QoKHgseVswXSkgZm9yIHgseSBpbiBucG1wYWNrYWdlcy5pdGVtcygpKQogICAgICAgICAgICAgICAgICAgICBwYWNrYWdlc1snJHtQTn0nXSA9ICcnCiAgICAgICAgICAgICAgICAgICAgIHBrZ2xpY2Vuc2VzID0gc3BsaXRfcGtnX2xpY2Vuc2VzKGxpY3ZhbHVlcywgcGFja2FnZXMsIGxpbmVzX2FmdGVyLCBsaWNlbnNlcykKICAgICAgICAgICAgICAgICAgICAgYWxsX2xpY2Vuc2VzID0gbGlzdChzZXQoW2l0ZW0gZm9yIHBrZ2xpY2Vuc2UgaW4gcGtnbGljZW5zZXMudmFsdWVzKCkgZm9yIGl0ZW0gaW4gcGtnbGljZW5zZV0pKQpAQCAtMTQ4LDkgKzIxNiw1MiBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpbmVzX2JlZm9yZVtpXSA9ICdMSUNFTlNFID0gIiVzIicgJSAnICYgJy5qb2luKGFsbF9saWNlbnNlcykKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhawogCisgICAgICAgICAgICAgICAgIyBOZWVkIHRvIG1vdmUgUyBzZXR0aW5nIGFmdGVyIGluaGVyaXQgbnBtCisgICAgICAgICAgICAgICAgZm9yIGksIGxpbmUgaW4gZW51bWVyYXRlKGxpbmVzX2JlZm9yZSk6CisgICAgICAgICAgICAgICAgICAgIGlmIGxpbmUuc3RhcnRzd2l0aCgnUyA9Jyk6CisgICAgICAgICAgICAgICAgICAgICAgICBsaW5lc19iZWZvcmUucG9wKGkpCisgICAgICAgICAgICAgICAgICAgICAgICBsaW5lc19hZnRlci5pbnNlcnQoMCwgJyMgTXVzdCBiZSBzZXQgYWZ0ZXIgaW5oZXJpdCBucG0gc2luY2UgdGhhdCBpdHNlbGYgc2V0cyBTJykKKyAgICAgICAgICAgICAgICAgICAgICAgIGxpbmVzX2FmdGVyLmluc2VydCgxLCBsaW5lKQorICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsKKwogICAgICAgICAgICAgICAgIHJldHVybiBUcnVlCiAKICAgICAgICAgcmV0dXJuIEZhbHNlCiAKKyAgICAjIEZJWE1FIHRoaXMgaXMgZHVwbGljYXRlZCBmcm9tIGxpYi9iYi9mZXRjaDIvbnBtLnB5CisgICAgZGVmIF9wYXJzZV92aWV3KHNlbGYsIG91dHB1dCk6CisgICAgICAgICcnJworICAgICAgICBQYXJzZSB0aGUgb3V0cHV0IG9mIG5wbSB2aWV3IC0tanNvbjsgdGhlIGxhc3QgSlNPTiByZXN1bHQKKyAgICAgICAgaXMgYXNzdW1lZCB0byBiZSB0aGUgb25lIHRoYXQgd2UncmUgaW50ZXJlc3RlZCBpbi4KKyAgICAgICAgJycnCisgICAgICAgIHBkYXRhID0gTm9uZQorICAgICAgICBvdXRkZXBzID0ge30KKyAgICAgICAgZGF0YWxpbmVzID0gW10KKyAgICAgICAgYnJhY2VsZXZlbCA9IDAKKyAgICAgICAgZm9yIGxpbmUgaW4gb3V0cHV0LnNwbGl0bGluZXMoKToKKyAgICAgICAgICAgIGlmIGJyYWNlbGV2ZWw6CisgICAgICAgICAgICAgICAgZGF0YWxpbmVzLmFwcGVuZChsaW5lKQorICAgICAgICAgICAgZWxpZiAneycgaW4gbGluZToKKyAgICAgICAgICAgICAgICBkYXRhbGluZXMgPSBbXQorICAgICAgICAgICAgICAgIGRhdGFsaW5lcy5hcHBlbmQobGluZSkKKyAgICAgICAgICAgIGJyYWNlbGV2ZWwgPSBicmFjZWxldmVsICsgbGluZS5jb3VudCgneycpIC0gbGluZS5jb3VudCgnfScpCisgICAgICAgIGlmIGRhdGFsaW5lczoKKyAgICAgICAgICAgIHBkYXRhID0ganNvbi5sb2FkcygnXG4nLmpvaW4oZGF0YWxpbmVzKSkKKyAgICAgICAgcmV0dXJuIHBkYXRhCisKKyAgICAjIEZJWE1FIHRoaXMgaXMgZWZmZWN0aXZlbHkgZHVwbGljYXRlZCBmcm9tIGxpYi9iYi9mZXRjaDIvbnBtLnB5CisgICAgIyAoc3BsaXQgb3V0IGZyb20gX2dldGRlcGVuZGVuY2llcygpKQorICAgIGRlZiBnZXRfbm9kZV92ZXJzaW9uKHNlbGYsIHBrZywgdmVyc2lvbiwgZCk6CisgICAgICAgIGltcG9ydCBiYi5mZXRjaDIKKyAgICAgICAgcGtnZnVsbG5hbWUgPSBwa2cKKyAgICAgICAgaWYgdmVyc2lvbiAhPSAnKicgYW5kIG5vdCAnLycgaW4gdmVyc2lvbjoKKyAgICAgICAgICAgIHBrZ2Z1bGxuYW1lICs9ICJAJyVzJyIgJSB2ZXJzaW9uCisgICAgICAgIGxvZ2dlci5kZWJ1ZygyLCAiQ2FsbGluZyBnZXRkZXBzIG9uICVzIiAlIHBrZykKKyAgICAgICAgcnVuZW52ID0gZGljdChvcy5lbnZpcm9uLCBQQVRIPWQuZ2V0VmFyKCdQQVRIJywgVHJ1ZSkpCisgICAgICAgIGZldGNoY21kID0gIm5wbSB2aWV3ICVzIC0tanNvbiIgJSBwa2dmdWxsbmFtZQorICAgICAgICBvdXRwdXQsIF8gPSBiYi5wcm9jZXNzLnJ1bihmZXRjaGNtZCwgc3RkZXJyPXN1YnByb2Nlc3MuU1RET1VULCBlbnY9cnVuZW52LCBzaGVsbD1UcnVlKQorICAgICAgICBkYXRhID0gc2VsZi5fcGFyc2VfdmlldyhvdXRwdXQpCisgICAgICAgIHJldHVybiBkYXRhLmdldCgndmVyc2lvbicsIE5vbmUpCisKIGRlZiByZWdpc3Rlcl9yZWNpcGVfaGFuZGxlcnMoaGFuZGxlcnMpOgogICAgIGhhbmRsZXJzLmFwcGVuZCgoTnBtUmVjaXBlSGFuZGxlcigpLCA2MCkpCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvcmVjaXBldG9vbC9uZXdhcHBlbmQucHkgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvcmVjaXBldG9vbC9uZXdhcHBlbmQucHkKaW5kZXggYmRmMDY5My4uZmJkZDdiYyAxMDA2NDQKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L3NjcmlwdHMvbGliL3JlY2lwZXRvb2wvbmV3YXBwZW5kLnB5CisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9yZWNpcGV0b29sL25ld2FwcGVuZC5weQpAQCAtMzksMTYgKzM5LDYgQEAKICAgICB0aW5mb2lsID0gaW5zdGFuY2UKIAogCi1kZWYgX3Byb3ZpZGVfdG9fcG4oY29va2VyLCBwcm92aWRlKToKLSAgICAiIiJHZXQgdGhlIG5hbWUgb2YgdGhlIHByZWZlcnJlZCByZWNpcGUgZm9yIHRoZSBzcGVjaWZpZWQgcHJvdmlkZS4iIiIKLSAgICBpbXBvcnQgYmIucHJvdmlkZXJzCi0gICAgZmlsZW5hbWVzID0gY29va2VyLnJlY2lwZWNhY2hlLnByb3ZpZGVyc1twcm92aWRlXQotICAgIGVsaWdpYmxlLCBmb3VuZFVuaXF1ZSA9IGJiLnByb3ZpZGVycy5maWx0ZXJQcm92aWRlcnMoZmlsZW5hbWVzLCBwcm92aWRlLCBjb29rZXIuZXhwYW5kZWRfZGF0YSwgY29va2VyLnJlY2lwZWNhY2hlKQotICAgIGZpbGVuYW1lID0gZWxpZ2libGVbMF0KLSAgICBwbiA9IGNvb2tlci5yZWNpcGVjYWNoZS5wa2dfZm5bZmlsZW5hbWVdCi0gICAgcmV0dXJuIHBuCi0KLQogZGVmIF9nZXRfcmVjaXBlX2ZpbGUoY29va2VyLCBwbik6CiAgICAgaW1wb3J0IG9lLnJlY2lwZXV0aWxzCiAgICAgcmVjaXBlZmlsZSA9IG9lLnJlY2lwZXV0aWxzLnBuX3RvX3JlY2lwZShjb29rZXIsIHBuKQpAQCAtNzAsOCArNjAsNyBAQAogZGVmIG5ld2FwcGVuZChhcmdzKToKICAgICBpbXBvcnQgb2UucmVjaXBldXRpbHMKIAotICAgIHBuID0gX3Byb3ZpZGVfdG9fcG4odGluZm9pbC5jb29rZXIsIGFyZ3MudGFyZ2V0KQotICAgIHJlY2lwZV9wYXRoID0gX2dldF9yZWNpcGVfZmlsZSh0aW5mb2lsLmNvb2tlciwgcG4pCisgICAgcmVjaXBlX3BhdGggPSBfZ2V0X3JlY2lwZV9maWxlKHRpbmZvaWwuY29va2VyLCBhcmdzLnRhcmdldCkKIAogICAgIHJkID0gdGluZm9pbC5jb25maWdfZGF0YS5jcmVhdGVDb3B5KCkKICAgICByZC5zZXRWYXIoJ0ZJTEUnLCByZWNpcGVfcGF0aCkKQEAgLTgxLDcgKzcwLDcgQEAKICAgICAgICAgcmV0dXJuIDEKIAogICAgIGlmIG5vdCBwYXRoX29rOgotICAgICAgICBsb2dnZXIud2FybignVW5hYmxlIHRvIGRldGVybWluZSBjb3JyZWN0IHN1YmRpcmVjdG9yeSBwYXRoIGZvciBiYmFwcGVuZCBmaWxlIC0gY2hlY2sgdGhhdCB3aGF0ICVzIGFkZHMgdG8gQkJGSUxFUyBhbHNvIG1hdGNoZXMgLmJiYXBwZW5kIGZpbGVzLiBVc2luZyAlcyBmb3Igbm93LCBidXQgdW50aWwgeW91IGZpeCB0aGlzIHRoZSBiYmFwcGVuZCB3aWxsIG5vdCBiZSBhcHBsaWVkLicsIG9zLnBhdGguam9pbihkZXN0bGF5ZXJkaXIsICdjb25mJywgJ2xheWVyLmNvbmYnKSwgb3MucGF0aC5kaXJuYW1lKGFwcGVuZHBhdGgpKQorICAgICAgICBsb2dnZXIud2FybignVW5hYmxlIHRvIGRldGVybWluZSBjb3JyZWN0IHN1YmRpcmVjdG9yeSBwYXRoIGZvciBiYmFwcGVuZCBmaWxlIC0gY2hlY2sgdGhhdCB3aGF0ICVzIGFkZHMgdG8gQkJGSUxFUyBhbHNvIG1hdGNoZXMgLmJiYXBwZW5kIGZpbGVzLiBVc2luZyAlcyBmb3Igbm93LCBidXQgdW50aWwgeW91IGZpeCB0aGlzIHRoZSBiYmFwcGVuZCB3aWxsIG5vdCBiZSBhcHBsaWVkLicsIG9zLnBhdGguam9pbihhcmdzLmRlc3RsYXllciwgJ2NvbmYnLCAnbGF5ZXIuY29uZicpLCBvcy5wYXRoLmRpcm5hbWUoYXBwZW5kX3BhdGgpKQogCiAgICAgbGF5ZXJkaXJzID0gW29zLnBhdGguYWJzcGF0aChsYXllcmRpcikgZm9yIGxheWVyZGlyIGluIHJkLmdldFZhcignQkJMQVlFUlMnLCBUcnVlKS5zcGxpdCgpXQogICAgIGlmIG5vdCBvcy5wYXRoLmFic3BhdGgoYXJncy5kZXN0bGF5ZXIpIGluIGxheWVyZGlyczoKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9yZWNpcGV0b29sL3NldHZhci5weSBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9yZWNpcGV0b29sL3NldHZhci5weQppbmRleCA2NTdkMmI2Li44NTcwMWMwIDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvcmVjaXBldG9vbC9zZXR2YXIucHkKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L3NjcmlwdHMvbGliL3JlY2lwZXRvb2wvc2V0dmFyLnB5CkBAIC01MSw3ICs1MSw3IEBACiAgICAgaWYgYXJncy5yZWNpcGVfb25seToKICAgICAgICAgcGF0Y2hlcyA9IFtvZS5yZWNpcGV1dGlscy5wYXRjaF9yZWNpcGVfZmlsZShhcmdzLnJlY2lwZWZpbGUsIHZhcnZhbHVlcywgcGF0Y2g9YXJncy5wYXRjaCldCiAgICAgZWxzZToKLSAgICAgICAgcmQgPSBvZS5yZWNpcGV1dGlscy5wYXJzZV9yZWNpcGUoYXJncy5yZWNpcGVmaWxlLCBOb25lLCB0aW5mb2lsLmNvbmZpZ19kYXRhKQorICAgICAgICByZCA9IG9lLnJlY2lwZXV0aWxzLnBhcnNlX3JlY2lwZSh0aW5mb2lsLmNvb2tlciwgYXJncy5yZWNpcGVmaWxlLCBOb25lKQogICAgICAgICBpZiBub3QgcmQ6CiAgICAgICAgICAgICByZXR1cm4gMQogICAgICAgICBwYXRjaGVzID0gb2UucmVjaXBldXRpbHMucGF0Y2hfcmVjaXBlKHJkLCBhcmdzLnJlY2lwZWZpbGUsIHZhcnZhbHVlcywgcGF0Y2g9YXJncy5wYXRjaCkKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9zY3JpcHR1dGlscy5weSBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9zY3JpcHR1dGlscy5weQppbmRleCBhZWYxOWQzLi41Y2NjMDI3IDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvc2NyaXB0dXRpbHMucHkKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L3NjcmlwdHMvbGliL3NjcmlwdHV0aWxzLnB5CkBAIC0xMDMsNyArMTAzLDcgQEAKICAgICByZXR1cm4gcmV0CiAKIGRlZiBydW5fZWRpdG9yKGZuKToKLSAgICBpZiBpc2luc3RhbmNlKGZuLCBiYXNlc3RyaW5nKToKKyAgICBpZiBpc2luc3RhbmNlKGZuLCBzdHIpOgogICAgICAgICBwYXJhbXMgPSAnIiVzIicgJSBmbgogICAgIGVsc2U6CiAgICAgICAgIHBhcmFtcyA9ICcnCkBAIC0xMTYsMyArMTE2LDE2IEBACiAgICAgZXhjZXB0IE9TRXJyb3IgYXMgZXhjOgogICAgICAgICBsb2dnZXIuZXJyb3IoIkV4ZWN1dGlvbiBvZiBlZGl0b3IgJyVzJyBmYWlsZWQ6ICVzIiwgZWRpdG9yLCBleGMpCiAgICAgICAgIHJldHVybiAxCisKK2RlZiBpc19zcmNfdXJsKHBhcmFtKToKKyAgICAiIiIKKyAgICBDaGVjayBpZiBhIHBhcmFtZXRlciBpcyBhIFVSTCBhbmQgcmV0dXJuIFRydWUgaWYgc28KKyAgICBOT1RFOiBiZSBjYXJlZnVsIGFib3V0IGNoYW5naW5nIHRoaXMgYXMgaXQgd2lsbCBpbmZsdWVuY2UgaG93IGRldnRvb2wvcmVjaXBldG9vbCBjb21tYW5kIGxpbmUgaGFuZGxpbmcgd29ya3MKKyAgICAiIiIKKyAgICBpZiBub3QgcGFyYW06CisgICAgICAgIHJldHVybiBGYWxzZQorICAgIGVsaWYgJzovLycgaW4gcGFyYW06CisgICAgICAgIHJldHVybiBUcnVlCisgICAgZWxpZiBwYXJhbS5zdGFydHN3aXRoKCdnaXRAJykgb3IgKCdAJyBpbiBwYXJhbSBhbmQgcGFyYW0uZW5kc3dpdGgoJy5naXQnKSk6CisgICAgICAgIHJldHVybiBUcnVlCisgICAgcmV0dXJuIEZhbHNlCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvd2ljL2Nhbm5lZC13a3MvZGlyZWN0ZGlzay1ncHQud2tzIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L3NjcmlwdHMvbGliL3dpYy9jYW5uZWQtd2tzL2RpcmVjdGRpc2stZ3B0LndrcwppbmRleCBlYTAxY2YzLi44ZDdkOGRlIDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvd2ljL2Nhbm5lZC13a3MvZGlyZWN0ZGlzay1ncHQud2tzCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9zY3JpcHRzL2xpYi93aWMvY2FubmVkLXdrcy9kaXJlY3RkaXNrLWdwdC53a3MKQEAgLTYsNSArNiw1IEBACiBwYXJ0IC9ib290IC0tc291cmNlIGJvb3RpbWctcGNiaW9zIC0tb25kaXNrIHNkYSAtLWxhYmVsIGJvb3QgLS1hY3RpdmUgLS1hbGlnbiAxMDI0CiBwYXJ0IC8gLS1zb3VyY2Ugcm9vdGZzIC0tb25kaXNrIHNkYSAtLWZzdHlwZT1leHQ0IC0tbGFiZWwgcGxhdGZvcm0gLS1hbGlnbiAxMDI0IC0tdXNlLXV1aWQKIAotYm9vdGxvYWRlciAgLS1wdGFibGUgZ3B0IC0tdGltZW91dD0wICAtLWFwcGVuZD0icm9vdHdhaXQgcm9vdGZzdHlwZT1leHQ0IHZpZGVvPXZlc2FmYiB2Z2E9MHgzMTggY29uc29sZT10dHkwIgorYm9vdGxvYWRlciAgLS1wdGFibGUgZ3B0IC0tdGltZW91dD0wICAtLWFwcGVuZD0icm9vdHdhaXQgcm9vdGZzdHlwZT1leHQ0IHZpZGVvPXZlc2FmYiB2Z2E9MHgzMTggY29uc29sZT10dHkwIGNvbnNvbGU9dHR5UzAsMTE1MjAwbjgiCiAKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9zY3JpcHRzL2xpYi93aWMvY2FubmVkLXdrcy9kaXJlY3RkaXNrLW11bHRpLXJvb3Rmcy53a3MgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvd2ljL2Nhbm5lZC13a3MvZGlyZWN0ZGlzay1tdWx0aS1yb290ZnMud2tzCmluZGV4IDhhODFmOGYuLmY2MWQ5NDEgMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9zY3JpcHRzL2xpYi93aWMvY2FubmVkLXdrcy9kaXJlY3RkaXNrLW11bHRpLXJvb3Rmcy53a3MKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L3NjcmlwdHMvbGliL3dpYy9jYW5uZWQtd2tzL2RpcmVjdGRpc2stbXVsdGktcm9vdGZzLndrcwpAQCAtMTksNSArMTksNSBAQAogcGFydCAvIC0tc291cmNlIHJvb3RmcyAtLXJvb3Rmcy1kaXI9cm9vdGZzMSAtLW9uZGlzayBzZGEgLS1mc3R5cGU9ZXh0NCAtLWxhYmVsIHBsYXRmb3JtIC0tYWxpZ24gMTAyNAogcGFydCAvcmVzY3VlIC0tc291cmNlIHJvb3RmcyAtLXJvb3Rmcy1kaXI9cm9vdGZzMiAtLW9uZGlzayBzZGEgLS1mc3R5cGU9ZXh0NCAtLWxhYmVsIHNlY29uZGFyeSAtLWFsaWduIDEwMjQKIAotYm9vdGxvYWRlciAgLS10aW1lb3V0PTAgIC0tYXBwZW5kPSJyb290d2FpdCByb290ZnN0eXBlPWV4dDQgdmlkZW89dmVzYWZiIHZnYT0weDMxOCBjb25zb2xlPXR0eTAiCitib290bG9hZGVyICAtLXRpbWVvdXQ9MCAgLS1hcHBlbmQ9InJvb3R3YWl0IHJvb3Rmc3R5cGU9ZXh0NCB2aWRlbz12ZXNhZmIgdmdhPTB4MzE4IGNvbnNvbGU9dHR5MCBjb25zb2xlPXR0eVMwLDExNTIwMG44IgogCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvd2ljL2Nhbm5lZC13a3MvZGlyZWN0ZGlzay53a3MgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvd2ljL2Nhbm5lZC13a3MvZGlyZWN0ZGlzay53a3MKaW5kZXggNmRiNzRhNy4uOGM4ZTA2YiAxMDA2NDQKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L3NjcmlwdHMvbGliL3dpYy9jYW5uZWQtd2tzL2RpcmVjdGRpc2sud2tzCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9zY3JpcHRzL2xpYi93aWMvY2FubmVkLXdrcy9kaXJlY3RkaXNrLndrcwpAQCAtNCw1ICs0LDUgQEAKIAogaW5jbHVkZSBjb21tb24ud2tzLmluYwogCi1ib290bG9hZGVyICAtLXRpbWVvdXQ9MCAgLS1hcHBlbmQ9InJvb3R3YWl0IHJvb3Rmc3R5cGU9ZXh0NCB2aWRlbz12ZXNhZmIgdmdhPTB4MzE4IGNvbnNvbGU9dHR5MCIKK2Jvb3Rsb2FkZXIgIC0tdGltZW91dD0wICAtLWFwcGVuZD0icm9vdHdhaXQgcm9vdGZzdHlwZT1leHQ0IHZpZGVvPXZlc2FmYiB2Z2E9MHgzMTggY29uc29sZT10dHkwIGNvbnNvbGU9dHR5UzAsMTE1MjAwbjgiCiAKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9zY3JpcHRzL2xpYi93aWMvY2FubmVkLXdrcy9ta2VmaWRpc2sud2tzIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L3NjcmlwdHMvbGliL3dpYy9jYW5uZWQtd2tzL21rZWZpZGlzay53a3MKaW5kZXggNjk2ZTk0ZS4uOWY1MzRmZSAxMDA2NDQKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L3NjcmlwdHMvbGliL3dpYy9jYW5uZWQtd2tzL21rZWZpZGlzay53a3MKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L3NjcmlwdHMvbGliL3dpYy9jYW5uZWQtd2tzL21rZWZpZGlzay53a3MKQEAgLTQsOCArNCw4IEBACiAKIHBhcnQgL2Jvb3QgLS1zb3VyY2UgYm9vdGltZy1lZmkgLS1zb3VyY2VwYXJhbXM9ImxvYWRlcj1ncnViLWVmaSIgLS1vbmRpc2sgc2RhIC0tbGFiZWwgbXNkb3MgLS1hY3RpdmUgLS1hbGlnbiAxMDI0CiAKLXBhcnQgLyAtLXNvdXJjZSByb290ZnMgLS1vbmRpc2sgc2RhIC0tZnN0eXBlPWV4dDQgLS1sYWJlbCBwbGF0Zm9ybSAtLWFsaWduIDEwMjQKK3BhcnQgLyAtLXNvdXJjZSByb290ZnMgLS1vbmRpc2sgc2RhIC0tZnN0eXBlPWV4dDQgLS1sYWJlbCBwbGF0Zm9ybSAtLWFsaWduIDEwMjQgLS11c2UtdXVpZAogCiBwYXJ0IHN3YXAgLS1vbmRpc2sgc2RhIC0tc2l6ZSA0NCAtLWxhYmVsIHN3YXAxIC0tZnN0eXBlPXN3YXAKIAotYm9vdGxvYWRlciAgLS10aW1lb3V0PTEwICAtLWFwcGVuZD0icm9vdHdhaXQgcm9vdGZzdHlwZT1leHQ0IGNvbnNvbGU9dHR5UENIMCwxMTUyMDAgY29uc29sZT10dHkwIHZtYWxsb2M9MjU2TUIgc25kLWhkYS1pbnRlbC5lbmFibGVfbXNpPTAiCitib290bG9hZGVyIC0tcHRhYmxlIGdwdCAtLXRpbWVvdXQ9NSAtLWFwcGVuZD0icm9vdGZzdHlwZT1leHQ0IGNvbnNvbGU9dHR5UzAsMTE1MjAwIGNvbnNvbGU9dHR5MCIKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9zY3JpcHRzL2xpYi93aWMvY2FubmVkLXdrcy9ta2d1bW1pZGlzay53a3MgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvd2ljL2Nhbm5lZC13a3MvbWtndW1taWRpc2sud2tzCmluZGV4IDY2YTIyZjYuLmYzYWUwOTAgMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9zY3JpcHRzL2xpYi93aWMvY2FubmVkLXdrcy9ta2d1bW1pZGlzay53a3MKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L3NjcmlwdHMvbGliL3dpYy9jYW5uZWQtd2tzL21rZ3VtbWlkaXNrLndrcwpAQCAtOCw0ICs4LDQgQEAKIAogcGFydCBzd2FwIC0tb25kaXNrIHNkYSAtLXNpemUgNDQgLS1sYWJlbCBzd2FwMSAtLWZzdHlwZT1zd2FwCiAKLWJvb3Rsb2FkZXIgIC0tdGltZW91dD0xMCAgLS1hcHBlbmQ9InJvb3R3YWl0IHJvb3Rmc3R5cGU9ZXh0NCBjb25zb2xlPXR0eVBDSDAsMTE1MjAwIGNvbnNvbGU9dHR5MCB2bWFsbG9jPTI1Nk1CIHNuZC1oZGEtaW50ZWwuZW5hYmxlX21zaT0wIgorYm9vdGxvYWRlciAtLXB0YWJsZSBncHQgLS10aW1lb3V0PTUgIC0tYXBwZW5kPSJyb290d2FpdCByb290ZnN0eXBlPWV4dDQgY29uc29sZT10dHlTMCwxMTUyMDAgY29uc29sZT10dHkwIgpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L3NjcmlwdHMvbGliL3dpYy9jYW5uZWQtd2tzL3N5c3RlbWQtYm9vdGRpc2sud2tzIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L3NjcmlwdHMvbGliL3dpYy9jYW5uZWQtd2tzL3N5c3RlbWQtYm9vdGRpc2sud2tzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI5MDAwMjMKLS0tIC9kZXYvbnVsbAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvd2ljL2Nhbm5lZC13a3Mvc3lzdGVtZC1ib290ZGlzay53a3MKQEAgLTAsMCArMSwxMSBAQAorIyBzaG9ydC1kZXNjcmlwdGlvbjogQ3JlYXRlIGFuIEVGSSBkaXNrIGltYWdlIHdpdGggc3lzdGVtZC1ib290CisjIGxvbmctZGVzY3JpcHRpb246IENyZWF0ZXMgYSBwYXJ0aXRpb25lZCBFRkkgZGlzayBpbWFnZSB0aGF0IHRoZSB1c2VyCisjIGNhbiBkaXJlY3RseSBkZCB0byBib290IG1lZGlhLiBUaGUgc2VsZWN0ZWQgYm9vdGxvYWRlciBpcyBzeXN0ZW1kLWJvb3QuCisKK3BhcnQgL2Jvb3QgLS1zb3VyY2UgYm9vdGltZy1lZmkgLS1zb3VyY2VwYXJhbXM9ImxvYWRlcj1zeXN0ZW1kLWJvb3QiIC0tb25kaXNrIHNkYSAtLWxhYmVsIG1zZG9zIC0tYWN0aXZlIC0tYWxpZ24gMTAyNAorCitwYXJ0IC8gLS1zb3VyY2Ugcm9vdGZzIC0tb25kaXNrIHNkYSAtLWZzdHlwZT1leHQ0IC0tbGFiZWwgcGxhdGZvcm0gLS1hbGlnbiAxMDI0CisKK3BhcnQgc3dhcCAtLW9uZGlzayBzZGEgLS1zaXplIDQ0IC0tbGFiZWwgc3dhcDEgLS1mc3R5cGU9c3dhcAorCitib290bG9hZGVyIC0tcHRhYmxlIGdwdCAtLXRpbWVvdXQ9NSAtLWFwcGVuZD0icm9vdHdhaXQgcm9vdGZzdHlwZT1leHQ0IGNvbnNvbGU9dHR5UzAsMTE1MjAwIGNvbnNvbGU9dHR5MCIKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9zY3JpcHRzL2xpYi93aWMvY29uZi5weSBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9zY3JpcHRzL2xpYi93aWMvY29uZi5weQppbmRleCBmN2Q1NmQwLi4wNzBlYzMwIDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvd2ljL2NvbmYucHkKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L3NjcmlwdHMvbGliL3dpYy9jb25mLnB5CkBAIC03MCw3ICs3MCw3IEBACiAgICAgICAgIHNlbGYuY3JlYXRlID0ge30KIAogICAgICAgICAjIGluaXRpYWxpemUgdGhlIHZhbHVlcyB3aXRoIGRlZmF1bHRzCi0gICAgICAgIGZvciBzZWMsIHZhbHMgaW4gc2VsZi5ERUZBVUxUUy5pdGVyaXRlbXMoKToKKyAgICAgICAgZm9yIHNlYywgdmFscyBpbiBzZWxmLkRFRkFVTFRTLml0ZW1zKCk6CiAgICAgICAgICAgICBzZXRhdHRyKHNlbGYsIHNlYywgdmFscykKIAogICAgIGRlZiBfX3NldF9rc2NvbmYoc2VsZiwga3Njb25mKToKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9zY3JpcHRzL2xpYi93aWMvY3JlYXRvci5weSBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9zY3JpcHRzL2xpYi93aWMvY3JlYXRvci5weQppbmRleCA1MjMxMjk3Li44ZjdkMTUwIDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvd2ljL2NyZWF0b3IucHkKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L3NjcmlwdHMvbGliL3dpYy9jcmVhdG9yLnB5CkBAIC0yNCw3ICsyNCw3IEBACiBmcm9tIHdpYy5wbHVnaW4gaW1wb3J0IHBsdWdpbm1ncgogCiAKLWNsYXNzIENyZWF0b3Iob2JqZWN0KToKK2NsYXNzIENyZWF0b3IoKToKICAgICAiIiIke25hbWV9OiBjcmVhdGUgYW4gaW1hZ2UKIAogICAgIFVzYWdlOgpAQCAtNDEsNyArNDEsNyBAQAogCiAgICAgICAgICMgZ2V0IGNtZHMgZnJvbSBwbHVnaW5tZ3IKICAgICAgICAgIyBtaXgtaW4gZG9fc3ViY21kIGludGVyZmFjZQotICAgICAgICBmb3Igc3ViY21kLCBrbGFzcyBpbiBwbHVnaW5tZ3IuZ2V0X3BsdWdpbnMoJ2ltYWdlcicpLml0ZXJpdGVtcygpOgorICAgICAgICBmb3Igc3ViY21kLCBrbGFzcyBpbiBwbHVnaW5tZ3IuZ2V0X3BsdWdpbnMoJ2ltYWdlcicpLml0ZW1zKCk6CiAgICAgICAgICAgICBpZiBub3QgaGFzYXR0cihrbGFzcywgJ2RvX2NyZWF0ZScpOgogICAgICAgICAgICAgICAgIG1zZ2VyLndhcm5pbmcoIlVuc3VwcG9ydGVkIHN1YmNtZDogJXMiICUgc3ViY21kKQogICAgICAgICAgICAgICAgIGNvbnRpbnVlCkBAIC02OSw2ICs2OSw3IEBACiAgICAgICAgIG9wdHBhcnNlci5hZGRfb3B0aW9uKCcnLCAnLS10bXBmcycsIGFjdGlvbj0nc3RvcmVfdHJ1ZScsIGRlc3Q9J2VuYWJsZXRtcGZzJywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVscD0nU2V0dXAgdG1wZGlyIGFzIHRtcGZzIHRvIGFjY2VsZXJhdGUsIGV4cGVyaW1lbnRhbCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnIGZlYXR1cmUsIHVzZSBpdCBpZiB5b3UgaGF2ZSBtb3JlIHRoYW4gNEcgbWVtb3J5JykKKyAgICAgICAgb3B0cGFyc2VyLmFkZF9vcHRpb24oJycsICctLWJtYXAnLCBhY3Rpb249J3N0b3JlX3RydWUnLCBoZWxwPSdnZW5lcmF0ZSAuYm1hcCcpCiAgICAgICAgIHJldHVybiBvcHRwYXJzZXIKIAogICAgIGRlZiBwb3N0b3B0cGFyc2Uoc2VsZiwgb3B0aW9ucyk6CmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvd2ljL2VuZ2luZS5weSBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9zY3JpcHRzL2xpYi93aWMvZW5naW5lLnB5CmluZGV4IDc2YjkzZTguLjViMTA0NjMgMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9zY3JpcHRzL2xpYi93aWMvZW5naW5lLnB5CisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9zY3JpcHRzL2xpYi93aWMvZW5naW5lLnB5CkBAIC00NCw3ICs0NCw3IEBACiAgICAgUmV0dXJucyBUcnVlIGlmIGl0IGlzLCBmYWxzZSBvdGhlcndpc2UKICAgICAiIiIKICAgICBpZiBub3Qgb3MuZW52aXJvbi5nZXQoIkJVSUxERElSIik6Ci0gICAgICAgIHByaW50ICJCVUlMRERJUiBub3QgZm91bmQsIGV4aXRpbmcuIChEaWQgeW91IGZvcmdldCB0byBzb3VyY2Ugb2UtaW5pdC1idWlsZC1lbnY/KSIKKyAgICAgICAgcHJpbnQoIkJVSUxERElSIG5vdCBmb3VuZCwgZXhpdGluZy4gKERpZCB5b3UgZm9yZ2V0IHRvIHNvdXJjZSBvZS1pbml0LWJ1aWxkLWVudj8pIikKICAgICAgICAgc3lzLmV4aXQoMSkKIAogICAgIHJldHVybiBUcnVlCkBAIC0xMDcsNyArMTA3LDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVzYyA9IGxpbmVbaWR4ICsgbGVuKCJzaG9ydC1kZXNjcmlwdGlvbjoiKTpdLnN0cmlwKCkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsKICAgICAgICAgICAgICAgICAgICAgYmFzZW5hbWUgPSBvcy5wYXRoLnNwbGl0ZXh0KGZuYW1lKVswXQotICAgICAgICAgICAgICAgICAgICBwcmludCAiICAlc1x0XHQlcyIgJSAoYmFzZW5hbWUubGp1c3QoMzApLCBkZXNjKQorICAgICAgICAgICAgICAgICAgICBwcmludCgiICAlc1x0XHQlcyIgJSAoYmFzZW5hbWUubGp1c3QoMzApLCBkZXNjKSkKIAogCiBkZWYgbGlzdF9jYW5uZWRfaW1hZ2VfaGVscChzY3JpcHRzX3BhdGgsIGZ1bGxwYXRoKToKQEAgLTEyMCwxNSArMTIwLDE1IEBACiAgICAgICAgICAgICBpZiBub3QgZm91bmQ6CiAgICAgICAgICAgICAgICAgaWR4ID0gbGluZS5maW5kKCJsb25nLWRlc2NyaXB0aW9uOiIpCiAgICAgICAgICAgICAgICAgaWYgaWR4ICE9IC0xOgotICAgICAgICAgICAgICAgICAgICBwcmludAotICAgICAgICAgICAgICAgICAgICBwcmludCBsaW5lW2lkeCArIGxlbigibG9uZy1kZXNjcmlwdGlvbjoiKTpdLnN0cmlwKCkKKyAgICAgICAgICAgICAgICAgICAgcHJpbnQoKQorICAgICAgICAgICAgICAgICAgICBwcmludChsaW5lW2lkeCArIGxlbigibG9uZy1kZXNjcmlwdGlvbjoiKTpdLnN0cmlwKCkpCiAgICAgICAgICAgICAgICAgICAgIGZvdW5kID0gVHJ1ZQogICAgICAgICAgICAgICAgIGNvbnRpbnVlCiAgICAgICAgICAgICBpZiBub3QgbGluZS5zdHJpcCgpOgogICAgICAgICAgICAgICAgIGJyZWFrCiAgICAgICAgICAgICBpZHggPSBsaW5lLmZpbmQoIiMiKQogICAgICAgICAgICAgaWYgaWR4ICE9IC0xOgotICAgICAgICAgICAgICAgIHByaW50IGxpbmVbaWR4ICsgbGVuKCIjOiIpOl0ucnN0cmlwKCkKKyAgICAgICAgICAgICAgICBwcmludChsaW5lW2lkeCArIGxlbigiIzoiKTpdLnJzdHJpcCgpKQogICAgICAgICAgICAgZWxzZToKICAgICAgICAgICAgICAgICBicmVhawogCkBAIC0xNDAsMTIgKzE0MCwxMiBAQAogICAgIHBsdWdpbnMgPSBwbHVnaW5tZ3IuZ2V0X3NvdXJjZV9wbHVnaW5zKCkKIAogICAgIGZvciBwbHVnaW4gaW4gcGx1Z2luczoKLSAgICAgICAgcHJpbnQgIiAgJXMiICUgcGx1Z2luCisgICAgICAgIHByaW50KCIgICVzIiAlIHBsdWdpbikKIAogCiBkZWYgd2ljX2NyZWF0ZSh3a3NfZmlsZSwgcm9vdGZzX2RpciwgYm9vdGltZ19kaXIsIGtlcm5lbF9kaXIsCiAgICAgICAgICAgICAgICBuYXRpdmVfc3lzcm9vdCwgc2NyaXB0c19wYXRoLCBpbWFnZV9vdXRwdXRfZGlyLAotICAgICAgICAgICAgICAgY29tcHJlc3NvciwgZGVidWcpOgorICAgICAgICAgICAgICAgY29tcHJlc3NvciwgYm1hcCwgZGVidWcpOgogICAgICIiIkNyZWF0ZSBpbWFnZQogCiAgICAgd2tzX2ZpbGUgLSB1c2VyLWRlZmluZWQgT0Uga2lja3N0YXJ0IGZpbGUKQEAgLTE1Niw2ICsxNTYsNyBAQAogICAgIHNjcmlwdHNfcGF0aCAtIGFic29sdXRlIHBhdGggdG8gL3NjcmlwdHMgZGlyCiAgICAgaW1hZ2Vfb3V0cHV0X2RpciAtIGRpcm5hbWUgdG8gY3JlYXRlIGZvciBpbWFnZQogICAgIGNvbXByZXNzb3IgLSBjb21wcmVzc29yIHV0aWxpdHkgdG8gY29tcHJlc3MgdGhlIGltYWdlCisgICAgYm1hcCAtIGVuYWJsZSBnZW5lcmF0aW9uIG9mIC5ibWFwCiAKICAgICBOb3JtYWxseSwgdGhlIHZhbHVlcyBmb3IgdGhlIGJ1aWxkIGFydGlmYWN0cyB2YWx1ZXMgYXJlIGRldGVybWluZWQKICAgICBieSAnd2ljIC1lJyBmcm9tIHRoZSBvdXRwdXQgb2YgdGhlICdiaXRiYWtlIC1lJyBjb21tYW5kIGdpdmVuIGFuCkBAIC0xNzgsNyArMTc5LDcgQEAKICAgICB0cnk6CiAgICAgICAgIG9lX2J1aWxkZGlyID0gb3MuZW52aXJvblsiQlVJTERESVIiXQogICAgIGV4Y2VwdCBLZXlFcnJvcjoKLSAgICAgICAgcHJpbnQgIkJVSUxERElSIG5vdCBmb3VuZCwgZXhpdGluZy4gKERpZCB5b3UgZm9yZ2V0IHRvIHNvdXJjZSBvZS1pbml0LWJ1aWxkLWVudj8pIgorICAgICAgICBwcmludCgiQlVJTERESVIgbm90IGZvdW5kLCBleGl0aW5nLiAoRGlkIHlvdSBmb3JnZXQgdG8gc291cmNlIG9lLWluaXQtYnVpbGQtZW52PykiKQogICAgICAgICBzeXMuZXhpdCgxKQogCiAgICAgaWYgZGVidWc6CkBAIC0xODYsMTAgKzE4NywxNCBAQAogCiAgICAgY3JvYmogPSBjcmVhdG9yLkNyZWF0b3IoKQogCi0gICAgY3JvYmoubWFpbihbImRpcmVjdCIsIG5hdGl2ZV9zeXNyb290LCBrZXJuZWxfZGlyLCBib290aW1nX2Rpciwgcm9vdGZzX2RpciwKLSAgICAgICAgICAgICAgICB3a3NfZmlsZSwgaW1hZ2Vfb3V0cHV0X2Rpciwgb2VfYnVpbGRkaXIsIGNvbXByZXNzb3Igb3IgIiJdKQorICAgIGNtZGxpbmUgPSBbImRpcmVjdCIsIG5hdGl2ZV9zeXNyb290LCBrZXJuZWxfZGlyLCBib290aW1nX2Rpciwgcm9vdGZzX2RpciwKKyAgICAgICAgICAgICAgICB3a3NfZmlsZSwgaW1hZ2Vfb3V0cHV0X2Rpciwgb2VfYnVpbGRkaXIsIGNvbXByZXNzb3Igb3IgIiJdCisgICAgaWYgYm1hcDoKKyAgICAgICAgY21kbGluZS5hcHBlbmQoJy0tYm1hcCcpCiAKLSAgICBwcmludCAiXG5UaGUgaW1hZ2Uocykgd2VyZSBjcmVhdGVkIHVzaW5nIE9FIGtpY2tzdGFydCBmaWxlOlxuICAlcyIgJSB3a3NfZmlsZQorICAgIGNyb2JqLm1haW4oY21kbGluZSkKKworICAgIHByaW50KCJcblRoZSBpbWFnZShzKSB3ZXJlIGNyZWF0ZWQgdXNpbmcgT0Uga2lja3N0YXJ0IGZpbGU6XG4gICVzIiAlIHdrc19maWxlKQogCiAKIGRlZiB3aWNfbGlzdChhcmdzLCBzY3JpcHRzX3BhdGgpOgpAQCAtMjA5LDEwICsyMTQsMTAgQEAKICAgICAgICAgd2tzX2ZpbGUgPSBhcmdzWzBdCiAgICAgICAgIGZ1bGxwYXRoID0gZmluZF9jYW5uZWRfaW1hZ2Uoc2NyaXB0c19wYXRoLCB3a3NfZmlsZSkKICAgICAgICAgaWYgbm90IGZ1bGxwYXRoOgotICAgICAgICAgICAgcHJpbnQgIk5vIGltYWdlIG5hbWVkICVzIGZvdW5kLCBleGl0aW5nLiAiXAorICAgICAgICAgICAgcHJpbnQoIk5vIGltYWdlIG5hbWVkICVzIGZvdW5kLCBleGl0aW5nLiAiXAogICAgICAgICAgICAgICAgICAgIihVc2UgJ3dpYyBsaXN0IGltYWdlcycgdG8gbGlzdCBhdmFpbGFibGUgaW1hZ2VzLCBvciAiXAogICAgICAgICAgICAgICAgICAgInNwZWNpZnkgYSBmdWxseS1xdWFsaWZpZWQgT0Uga2lja3N0YXJ0ICgud2tzKSAiXAotICAgICAgICAgICAgICAgICAgImZpbGVuYW1lKVxuIiAlIHdrc19maWxlCisgICAgICAgICAgICAgICAgICAiZmlsZW5hbWUpXG4iICUgd2tzX2ZpbGUpCiAgICAgICAgICAgICBzeXMuZXhpdCgxKQogICAgICAgICBsaXN0X2Nhbm5lZF9pbWFnZV9oZWxwKHNjcmlwdHNfcGF0aCwgZnVsbHBhdGgpCiAgICAgICAgIHJldHVybiBUcnVlCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvd2ljL2ZpbGVtYXAucHkgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvd2ljL2ZpbGVtYXAucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjMyNDBiYQotLS0gL2Rldi9udWxsCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9zY3JpcHRzL2xpYi93aWMvZmlsZW1hcC5weQpAQCAtMCwwICsxLDU2MSBAQAorIyBDb3B5cmlnaHQgKGMpIDIwMTIgSW50ZWwsIEluYy4KKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgdmVyc2lvbiAyLAorIyBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorIyBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisjIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gU2VlIHRoZSBHTlUKKyMgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisiIiIKK1RoaXMgbW9kdWxlIGltcGxlbWVudHMgcHl0aG9uIGltcGxlbWVudHMgYSB3YXkgdG8gZ2V0IGZpbGUgYmxvY2suIFR3byBtZXRob2RzCithcmUgc3VwcG9ydGVkIC0gdGhlIEZJRU1BUCBpb2N0bCBhbmQgdGhlICdTRUVLX0hPTEUgLyBTRUVLX0RBVEEnIGZlYXR1cmVzIG9mCit0aGUgZmlsZSBzZWVrIHN5c2NhbGwuIFRoZSBmb3JtZXIgaXMgaW1wbGVtZW50ZWQgYnkgdGhlICdGaWxlbWFwRmllbWFwJyBjbGFzcywKK3RoZSBsYXR0ZXIgaXMgaW1wbGVtZW50ZWQgYnkgdGhlICdGaWxlbWFwU2VlaycgY2xhc3MuIEJvdGggY2xhc3NlcyBwcm92aWRlIHRoZQorc2FtZSBBUEkuIFRoZSAnZmlsZW1hcCcgZnVuY3Rpb24gYXV0b21hdGljYWxseSBzZWxlY3RzIHdoaWNoIGNsYXNzIGNhbiBiZSB1c2VkCithbmQgcmV0dXJucyBhbiBpbnN0YW5jZSBvZiB0aGUgY2xhc3MuCisiIiIKKworIyBEaXNhYmxlIHRoZSBmb2xsb3dpbmcgcHlsaW50IHJlY29tbWVuZGF0aW9uczoKKyMgICAqIFRvbyBtYW55IGluc3RhbmNlIGF0dHJpYnV0ZXMgKFIwOTAyKQorIyBweWxpbnQ6IGRpc2FibGU9UjA5MDIKKworaW1wb3J0IG9zCitpbXBvcnQgc3RydWN0CitpbXBvcnQgYXJyYXkKK2ltcG9ydCBmY250bAoraW1wb3J0IHRlbXBmaWxlCitpbXBvcnQgbG9nZ2luZworCitkZWYgZ2V0X2Jsb2NrX3NpemUoZmlsZV9vYmopOgorICAgICIiIgorICAgIFJldHVybnMgYmxvY2sgc2l6ZSBmb3IgZmlsZSBvYmplY3QgJ2ZpbGVfb2JqJy4gRXJyb3JzIGFyZSBpbmRpY2F0ZWQgYnkgdGhlCisgICAgJ0lPRXJyb3InIGV4Y2VwdGlvbi4KKyAgICAiIiIKKworICAgIGZyb20gZmNudGwgaW1wb3J0IGlvY3RsCisgICAgaW1wb3J0IHN0cnVjdAorCisgICAgIyBHZXQgdGhlIGJsb2NrIHNpemUgb2YgdGhlIGhvc3QgZmlsZS1zeXN0ZW0gZm9yIHRoZSBpbWFnZSBmaWxlIGJ5IGNhbGxpbmcKKyAgICAjIHRoZSBGSUdFVEJTWiBpb2N0bCAobnVtYmVyIDIpLgorICAgIGJpbmFyeV9kYXRhID0gaW9jdGwoZmlsZV9vYmosIDIsIHN0cnVjdC5wYWNrKCdJJywgMCkpCisgICAgcmV0dXJuIHN0cnVjdC51bnBhY2soJ0knLCBiaW5hcnlfZGF0YSlbMF0KKworY2xhc3MgRXJyb3JOb3RTdXBwKEV4Y2VwdGlvbik6CisgICAgIiIiCisgICAgQW4gZXhjZXB0aW9uIG9mIHRoaXMgdHlwZSBpcyByYWlzZWQgd2hlbiB0aGUgJ0ZJRU1BUCcgb3IgJ1NFRUtfSE9MRScgZmVhdHVyZQorICAgIGlzIG5vdCBzdXBwb3J0ZWQgZWl0aGVyIGJ5IHRoZSBrZXJuZWwgb3IgdGhlIGZpbGUtc3lzdGVtLgorICAgICIiIgorICAgIHBhc3MKKworY2xhc3MgRXJyb3IoRXhjZXB0aW9uKToKKyAgICAiIiJBIGNsYXNzIGZvciBhbGwgdGhlIG90aGVyIGV4Y2VwdGlvbnMgcmFpc2VkIGJ5IHRoaXMgbW9kdWxlLiIiIgorICAgIHBhc3MKKworCitjbGFzcyBfRmlsZW1hcEJhc2Uob2JqZWN0KToKKyAgICAiIiIKKyAgICBUaGlzIGlzIGEgYmFzZSBjbGFzcyBmb3IgYSBjb3VwbGUgb2Ygb3RoZXIgY2xhc3NlcyBpbiB0aGlzIG1vZHVsZS4gVGhpcworICAgIGNsYXNzIHNpbXBseSBwZXJmb3JtcyB0aGUgY29tbW9uIHBhcnRzIG9mIHRoZSBpbml0aWFsaXphdGlvbiBwcm9jZXNzOiBvcGVucworICAgIHRoZSBpbWFnZSBmaWxlLCBnZXRzIGl0cyBzaXplLCBldGMuIFRoZSAnbG9nJyBwYXJhbWV0ZXIgaXMgdGhlIGxvZ2dlciBvYmplY3QKKyAgICB0byB1c2UgZm9yIHByaW50aW5nIG1lc3NhZ2VzLgorICAgICIiIgorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGltYWdlLCBsb2c9Tm9uZSk6CisgICAgICAgICIiIgorICAgICAgICBJbml0aWFsaXplIGEgY2xhc3MgaW5zdGFuY2UuIFRoZSAnaW1hZ2UnIGFyZ3VtZW50IGlzIGZ1bGwgcGF0aCB0byB0aGUKKyAgICAgICAgZmlsZSBvciBmaWxlIG9iamVjdCB0byBvcGVyYXRlIG9uLgorICAgICAgICAiIiIKKworICAgICAgICBzZWxmLl9sb2cgPSBsb2cKKyAgICAgICAgaWYgc2VsZi5fbG9nIGlzIE5vbmU6CisgICAgICAgICAgICBzZWxmLl9sb2cgPSBsb2dnaW5nLmdldExvZ2dlcihfX25hbWVfXykKKworICAgICAgICBzZWxmLl9mX2ltYWdlX25lZWRzX2Nsb3NlID0gRmFsc2UKKworICAgICAgICBpZiBoYXNhdHRyKGltYWdlLCAiZmlsZW5vIik6CisgICAgICAgICAgICBzZWxmLl9mX2ltYWdlID0gaW1hZ2UKKyAgICAgICAgICAgIHNlbGYuX2ltYWdlX3BhdGggPSBpbWFnZS5uYW1lCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzZWxmLl9pbWFnZV9wYXRoID0gaW1hZ2UKKyAgICAgICAgICAgIHNlbGYuX29wZW5faW1hZ2VfZmlsZSgpCisKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgc2VsZi5pbWFnZV9zaXplID0gb3MuZnN0YXQoc2VsZi5fZl9pbWFnZS5maWxlbm8oKSkuc3Rfc2l6ZQorICAgICAgICBleGNlcHQgSU9FcnJvciBhcyBlcnI6CisgICAgICAgICAgICByYWlzZSBFcnJvcigiY2Fubm90IGdldCBpbmZvcm1hdGlvbiBhYm91dCBmaWxlICclcyc6ICVzIgorICAgICAgICAgICAgICAgICAgICAgICAgJSAoc2VsZi5fZl9pbWFnZS5uYW1lLCBlcnIpKQorCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHNlbGYuYmxvY2tfc2l6ZSA9IGdldF9ibG9ja19zaXplKHNlbGYuX2ZfaW1hZ2UpCisgICAgICAgIGV4Y2VwdCBJT0Vycm9yIGFzIGVycjoKKyAgICAgICAgICAgIHJhaXNlIEVycm9yKCJjYW5ub3QgZ2V0IGJsb2NrIHNpemUgZm9yICclcyc6ICVzIgorICAgICAgICAgICAgICAgICAgICAgICAgJSAoc2VsZi5faW1hZ2VfcGF0aCwgZXJyKSkKKworICAgICAgICBzZWxmLmJsb2Nrc19jbnQgPSBzZWxmLmltYWdlX3NpemUgKyBzZWxmLmJsb2NrX3NpemUgLSAxCisgICAgICAgIHNlbGYuYmxvY2tzX2NudCAvLz0gc2VsZi5ibG9ja19zaXplCisKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgc2VsZi5fZl9pbWFnZS5mbHVzaCgpCisgICAgICAgIGV4Y2VwdCBJT0Vycm9yIGFzIGVycjoKKyAgICAgICAgICAgIHJhaXNlIEVycm9yKCJjYW5ub3QgZmx1c2ggaW1hZ2UgZmlsZSAnJXMnOiAlcyIKKyAgICAgICAgICAgICAgICAgICAgICAgICUgKHNlbGYuX2ltYWdlX3BhdGgsIGVycikpCisKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgb3MuZnN5bmMoc2VsZi5fZl9pbWFnZS5maWxlbm8oKSksCisgICAgICAgIGV4Y2VwdCBPU0Vycm9yIGFzIGVycjoKKyAgICAgICAgICAgIHJhaXNlIEVycm9yKCJjYW5ub3Qgc3luY2hyb25pemUgaW1hZ2UgZmlsZSAnJXMnOiAlcyAiCisgICAgICAgICAgICAgICAgICAgICAgICAlIChzZWxmLl9pbWFnZV9wYXRoLCBlcnIuc3RyZXJyb3IpKQorCisgICAgICAgIHNlbGYuX2xvZy5kZWJ1Zygib3BlbmVkIGltYWdlIFwiJXNcIiIgJSBzZWxmLl9pbWFnZV9wYXRoKQorICAgICAgICBzZWxmLl9sb2cuZGVidWcoImJsb2NrIHNpemUgJWQsIGJsb2NrcyBjb3VudCAlZCwgaW1hZ2Ugc2l6ZSAlZCIKKyAgICAgICAgICAgICAgICAgICAgICAgICUgKHNlbGYuYmxvY2tfc2l6ZSwgc2VsZi5ibG9ja3NfY250LCBzZWxmLmltYWdlX3NpemUpKQorCisgICAgZGVmIF9fZGVsX18oc2VsZik6CisgICAgICAgICIiIlRoZSBjbGFzcyBkZXN0cnVjdG9yIHdoaWNoIGp1c3QgY2xvc2VzIHRoZSBpbWFnZSBmaWxlLiIiIgorICAgICAgICBpZiBzZWxmLl9mX2ltYWdlX25lZWRzX2Nsb3NlOgorICAgICAgICAgICAgc2VsZi5fZl9pbWFnZS5jbG9zZSgpCisKKyAgICBkZWYgX29wZW5faW1hZ2VfZmlsZShzZWxmKToKKyAgICAgICAgIiIiT3BlbiB0aGUgaW1hZ2UgZmlsZS4iIiIKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgc2VsZi5fZl9pbWFnZSA9IG9wZW4oc2VsZi5faW1hZ2VfcGF0aCwgJ3JiJykKKyAgICAgICAgZXhjZXB0IElPRXJyb3IgYXMgZXJyOgorICAgICAgICAgICAgcmFpc2UgRXJyb3IoImNhbm5vdCBvcGVuIGltYWdlIGZpbGUgJyVzJzogJXMiCisgICAgICAgICAgICAgICAgICAgICAgICAlIChzZWxmLl9pbWFnZV9wYXRoLCBlcnIpKQorCisgICAgICAgIHNlbGYuX2ZfaW1hZ2VfbmVlZHNfY2xvc2UgPSBUcnVlCisKKyAgICBkZWYgYmxvY2tfaXNfbWFwcGVkKHNlbGYsIGJsb2NrKTogIyBweWxpbnQ6IGRpc2FibGU9VzA2MTMsUjAyMDEKKyAgICAgICAgIiIiCisgICAgICAgIFRoaXMgbWV0aG9kIGhhcyBoYXMgdG8gYmUgaW1wbGVtZW50ZWQgYnkgY2hpbGQgY2xhc3Nlcy4gSXQgcmV0dXJucworICAgICAgICAnVHJ1ZScgaWYgYmxvY2sgbnVtYmVyICdibG9jaycgb2YgdGhlIGltYWdlIGZpbGUgaXMgbWFwcGVkIGFuZCAnRmFsc2UnCisgICAgICAgIG90aGVyd2lzZS4KKyAgICAgICAgIiIiCisKKyAgICAgICAgcmFpc2UgRXJyb3IoInRoZSBtZXRob2QgaXMgbm90IGltcGxlbWVudGVkIikKKworICAgIGRlZiBibG9ja19pc191bm1hcHBlZChzZWxmLCBibG9jayk6ICMgcHlsaW50OiBkaXNhYmxlPVcwNjEzLFIwMjAxCisgICAgICAgICIiIgorICAgICAgICBUaGlzIG1ldGhvZCBoYXMgaGFzIHRvIGJlIGltcGxlbWVudGVkIGJ5IGNoaWxkIGNsYXNzZXMuIEl0IHJldHVybnMKKyAgICAgICAgJ1RydWUnIGlmIGJsb2NrIG51bWJlciAnYmxvY2snIG9mIHRoZSBpbWFnZSBmaWxlIGlzIG5vdCBtYXBwZWQgKGhvbGUpCisgICAgICAgIGFuZCAnRmFsc2UnIG90aGVyd2lzZS4KKyAgICAgICAgIiIiCisKKyAgICAgICAgcmFpc2UgRXJyb3IoInRoZSBtZXRob2QgaXMgbm90IGltcGxlbWVudGVkIikKKworICAgIGRlZiBnZXRfbWFwcGVkX3JhbmdlcyhzZWxmLCBzdGFydCwgY291bnQpOiAjIHB5bGludDogZGlzYWJsZT1XMDYxMyxSMDIwMQorICAgICAgICAiIiIKKyAgICAgICAgVGhpcyBtZXRob2QgaGFzIGhhcyB0byBiZSBpbXBsZW1lbnRlZCBieSBjaGlsZCBjbGFzc2VzLiBUaGlzIGlzIGEKKyAgICAgICAgZ2VuZXJhdG9yIHdoaWNoIHlpZWxkcyByYW5nZXMgb2YgbWFwcGVkIGJsb2NrcyBpbiB0aGUgZmlsZS4gVGhlIHJhbmdlcworICAgICAgICBhcmUgdHVwbGVzIG9mIDIgZWxlbWVudHM6IFtmaXJzdCwgbGFzdF0sIHdoZXJlICdmaXJzdCcgaXMgdGhlIGZpcnN0CisgICAgICAgIG1hcHBlZCBibG9jayBhbmQgJ2xhc3QnIGlzIHRoZSBsYXN0IG1hcHBlZCBibG9jay4KKworICAgICAgICBUaGUgcmFuZ2VzIGFyZSB5aWVsZGVkIGZvciB0aGUgYXJlYSBvZiB0aGUgZmlsZSBvZiBzaXplICdjb3VudCcgYmxvY2tzLAorICAgICAgICBzdGFydGluZyBmcm9tIGJsb2NrICdzdGFydCcuCisgICAgICAgICIiIgorCisgICAgICAgIHJhaXNlIEVycm9yKCJ0aGUgbWV0aG9kIGlzIG5vdCBpbXBsZW1lbnRlZCIpCisKKyAgICBkZWYgZ2V0X3VubWFwcGVkX3JhbmdlcyhzZWxmLCBzdGFydCwgY291bnQpOiAjIHB5bGludDogZGlzYWJsZT1XMDYxMyxSMDIwMQorICAgICAgICAiIiIKKyAgICAgICAgVGhpcyBtZXRob2QgaGFzIGhhcyB0byBiZSBpbXBsZW1lbnRlZCBieSBjaGlsZCBjbGFzc2VzLiBKdXN0IGxpa2UKKyAgICAgICAgJ2dldF9tYXBwZWRfcmFuZ2VzKCknLCBidXQgeWllbGRzIHVubWFwcGVkIGJsb2NrIHJhbmdlcyBpbnN0ZWFkCisgICAgICAgIChob2xlcykuCisgICAgICAgICIiIgorCisgICAgICAgIHJhaXNlIEVycm9yKCJ0aGUgbWV0aG9kIGlzIG5vdCBpbXBsZW1lbnRlZCIpCisKKworIyBUaGUgJ1NFRUtfSE9MRScgYW5kICdTRUVLX0RBVEEnIG9wdGlvbnMgb2YgdGhlIGZpbGUgc2VlayBzeXN0ZW0gY2FsbAorX1NFRUtfREFUQSA9IDMKK19TRUVLX0hPTEUgPSA0CisKK2RlZiBfbHNlZWsoZmlsZV9vYmosIG9mZnNldCwgd2hlbmNlKToKKyAgICAiIiJUaGlzIGlzIGEgaGVscGVyIGZ1bmN0aW9uIHdoaWNoIGludm9rZXMgJ29zLmxzZWVrJyBmb3IgZmlsZSBvYmplY3QKKyAgICAnZmlsZV9vYmonIGFuZCB3aXRoIHNwZWNpZmllZCAnb2Zmc2V0JyBhbmQgJ3doZW5jZScuIFRoZSAnd2hlbmNlJworICAgIGFyZ3VtZW50IGlzIHN1cHBvc2VkIHRvIGJlIGVpdGhlciAnX1NFRUtfREFUQScgb3IgJ19TRUVLX0hPTEUnLiBXaGVuCisgICAgdGhlcmUgaXMgbm8gbW9yZSBkYXRhIG9yIGhvbGUgc3RhcnRpbmcgZnJvbSAnb2Zmc2V0JywgdGhpcyBmdW5jdGlvbgorICAgIHJldHVybnMgJy0xJy4gIE90aGVyd2lzZSB0aGUgZGF0YSBvciBob2xlIHBvc2l0aW9uIGlzIHJldHVybmVkLiIiIgorCisgICAgdHJ5OgorICAgICAgICByZXR1cm4gb3MubHNlZWsoZmlsZV9vYmouZmlsZW5vKCksIG9mZnNldCwgd2hlbmNlKQorICAgIGV4Y2VwdCBPU0Vycm9yIGFzIGVycjoKKyAgICAgICAgIyBUaGUgJ2xzZWVrJyBzeXN0ZW0gY2FsbCByZXR1cm5zIHRoZSBFTlhJTyBpZiB0aGVyZSBpcyBubyBkYXRhIG9yCisgICAgICAgICMgaG9sZSBzdGFydGluZyBmcm9tIHRoZSBzcGVjaWZpZWQgb2Zmc2V0LgorICAgICAgICBpZiBlcnIuZXJybm8gPT0gb3MuZXJybm8uRU5YSU86CisgICAgICAgICAgICByZXR1cm4gLTEKKyAgICAgICAgZWxpZiBlcnIuZXJybm8gPT0gb3MuZXJybm8uRUlOVkFMOgorICAgICAgICAgICAgcmFpc2UgRXJyb3JOb3RTdXBwKCJ0aGUga2VybmVsIG9yIGZpbGUtc3lzdGVtIGRvZXMgbm90IHN1cHBvcnQgIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJcIlNFRUtfSE9MRVwiIGFuZCBcIlNFRUtfREFUQVwiIikKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHJhaXNlCisKK2NsYXNzIEZpbGVtYXBTZWVrKF9GaWxlbWFwQmFzZSk6CisgICAgIiIiCisgICAgVGhpcyBjbGFzcyB1c2VzIHRoZSAnU0VFS19IT0xFJyBhbmQgJ1NFRUtfREFUQScgdG8gZmluZCBmaWxlIGJsb2NrIG1hcHBpbmcuCisgICAgVW5mb3J0dW5hdGVseSwgdGhlIGN1cnJlbnQgaW1wbGVtZW50YXRpb24gcmVxdWlyZXMgdGhlIGNhbGxlciB0byBoYXZlIHdyaXRlCisgICAgYWNjZXNzIHRvIHRoZSBpbWFnZSBmaWxlLgorICAgICIiIgorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGltYWdlLCBsb2c9Tm9uZSk6CisgICAgICAgICIiIlJlZmVyIHRoZSAnX0ZpbGVtYXBCYXNlJyBjbGFzcyBmb3IgdGhlIGRvY3VtZW50YXRpb24uIiIiCisKKyAgICAgICAgIyBDYWxsIHRoZSBiYXNlIGNsYXNzIGNvbnN0cnVjdG9yIGZpcnN0CisgICAgICAgIF9GaWxlbWFwQmFzZS5fX2luaXRfXyhzZWxmLCBpbWFnZSwgbG9nKQorICAgICAgICBzZWxmLl9sb2cuZGVidWcoIkZpbGVtYXBTZWVrOiBpbml0aWFsaXppbmciKQorCisgICAgICAgIHNlbGYuX3Byb2JlX3NlZWtfaG9sZSgpCisKKyAgICBkZWYgX3Byb2JlX3NlZWtfaG9sZShzZWxmKToKKyAgICAgICAgIiIiCisgICAgICAgIENoZWNrIHdoZXRoZXIgdGhlIHN5c3RlbSBpbXBsZW1lbnRzICdTRUVLX0hPTEUnIGFuZCAnU0VFS19EQVRBJy4KKyAgICAgICAgVW5mb3J0dW5hdGVseSwgdGhlcmUgc2VlbXMgdG8gYmUgbm8gY2xlYW4gd2F5IGZvciBkZXRlY3RpbmcgdGhpcywKKyAgICAgICAgYmVjYXVzZSBvZnRlbiB0aGUgc3lzdGVtIGp1c3QgZmFrZXMgdGhlbSBieSBqdXN0IGFzc3VtaW5nIHRoYXQgYWxsCisgICAgICAgIGZpbGVzIGFyZSBmdWxseSBtYXBwZWQsIHNvICdTRUVLX0hPTEUnIGFsd2F5cyByZXR1cm5zIEVPRiBhbmQKKyAgICAgICAgJ1NFRUtfREFUQScgYWx3YXlzIHJldHVybnMgdGhlIHJlcXVlc3RlZCBvZmZzZXQuCisKKyAgICAgICAgSSBjb3VsZCBub3QgaW52ZW50IGEgYmV0dGVyIHdheSBvZiBkZXRlY3RpbmcgdGhlIGZha2UgJ1NFRUtfSE9MRScKKyAgICAgICAgaW1wbGVtZW50YXRpb24gdGhhbiBqdXN0IHRvIGNyZWF0ZSBhIHRlbXBvcmFyeSBmaWxlIGluIHRoZSBzYW1lCisgICAgICAgIGRpcmVjdG9yeSB3aGVyZSB0aGUgaW1hZ2UgZmlsZSByZXNpZGVzLiBJdCB3b3VsZCBiZSBuaWNlIHRvIGNoYW5nZSB0aGlzCisgICAgICAgIHRvIHNvbWV0aGluZyBiZXR0ZXIuCisgICAgICAgICIiIgorCisgICAgICAgIGRpcmVjdG9yeSA9IG9zLnBhdGguZGlybmFtZShzZWxmLl9pbWFnZV9wYXRoKQorCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHRtcF9vYmogPSB0ZW1wZmlsZS5UZW1wb3JhcnlGaWxlKCJ3KyIsIGRpcj1kaXJlY3RvcnkpCisgICAgICAgIGV4Y2VwdCBJT0Vycm9yIGFzIGVycjoKKyAgICAgICAgICAgIHJhaXNlIEVycm9yTm90U3VwcCgiY2Fubm90IGNyZWF0ZSBhIHRlbXBvcmFyeSBpbiBcIiVzXCI6ICVzIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJSAoZGlyZWN0b3J5LCBlcnIpKQorCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIG9zLmZ0cnVuY2F0ZSh0bXBfb2JqLmZpbGVubygpLCBzZWxmLmJsb2NrX3NpemUpCisgICAgICAgIGV4Y2VwdCBPU0Vycm9yIGFzIGVycjoKKyAgICAgICAgICAgIHJhaXNlIEVycm9yTm90U3VwcCgiY2Fubm90IHRydW5jYXRlIHRlbXBvcmFyeSBmaWxlIGluIFwiJXNcIjogJXMiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJSAoZGlyZWN0b3J5LCBlcnIpKQorCisgICAgICAgIG9mZnMgPSBfbHNlZWsodG1wX29iaiwgMCwgX1NFRUtfSE9MRSkKKyAgICAgICAgaWYgb2ZmcyAhPSAwOgorICAgICAgICAgICAgIyBXZSBhcmUgZGVhbGluZyB3aXRoIHRoZSBzdHViICdTRUVLX0hPTEUnIGltcGxlbWVudGF0aW9uIHdoaWNoCisgICAgICAgICAgICAjIGFsd2F5cyByZXR1cm5zIEVPRi4KKyAgICAgICAgICAgIHNlbGYuX2xvZy5kZWJ1ZygibHNlZWsoMCwgU0VFS19IT0xFKSByZXR1cm5lZCAlZCIgJSBvZmZzKQorICAgICAgICAgICAgcmFpc2UgRXJyb3JOb3RTdXBwKCJ0aGUgZmlsZS1zeXN0ZW0gZG9lcyBub3Qgc3VwcG9ydCAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlwiU0VFS19IT0xFXCIgYW5kIFwiU0VFS19EQVRBXCIgYnV0IG9ubHkgIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJwcm92aWRlcyBhIHN0dWIgaW1wbGVtZW50YXRpb24iKQorCisgICAgICAgIHRtcF9vYmouY2xvc2UoKQorCisgICAgZGVmIGJsb2NrX2lzX21hcHBlZChzZWxmLCBibG9jayk6CisgICAgICAgICIiIlJlZmVyIHRoZSAnX0ZpbGVtYXBCYXNlJyBjbGFzcyBmb3IgdGhlIGRvY3VtZW50YXRpb24uIiIiCisgICAgICAgIG9mZnMgPSBfbHNlZWsoc2VsZi5fZl9pbWFnZSwgYmxvY2sgKiBzZWxmLmJsb2NrX3NpemUsIF9TRUVLX0RBVEEpCisgICAgICAgIGlmIG9mZnMgPT0gLTE6CisgICAgICAgICAgICByZXN1bHQgPSBGYWxzZQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgcmVzdWx0ID0gKG9mZnMgLy8gc2VsZi5ibG9ja19zaXplID09IGJsb2NrKQorCisgICAgICAgIHNlbGYuX2xvZy5kZWJ1ZygiRmlsZW1hcFNlZWs6IGJsb2NrX2lzX21hcHBlZCglZCkgcmV0dXJucyAlcyIKKyAgICAgICAgICAgICAgICAgICAgICAgICUgKGJsb2NrLCByZXN1bHQpKQorICAgICAgICByZXR1cm4gcmVzdWx0CisKKyAgICBkZWYgYmxvY2tfaXNfdW5tYXBwZWQoc2VsZiwgYmxvY2spOgorICAgICAgICAiIiJSZWZlciB0aGUgJ19GaWxlbWFwQmFzZScgY2xhc3MgZm9yIHRoZSBkb2N1bWVudGF0aW9uLiIiIgorICAgICAgICByZXR1cm4gbm90IHNlbGYuYmxvY2tfaXNfbWFwcGVkKGJsb2NrKQorCisgICAgZGVmIF9nZXRfcmFuZ2VzKHNlbGYsIHN0YXJ0LCBjb3VudCwgd2hlbmNlMSwgd2hlbmNlMik6CisgICAgICAgICIiIgorICAgICAgICBUaGlzIGZ1bmN0aW9uIGltcGxlbWVudHMgJ2dldF9tYXBwZWRfcmFuZ2VzKCknIGFuZAorICAgICAgICAnZ2V0X3VubWFwcGVkX3JhbmdlcygpJyBkZXBlbmRpbmcgb24gd2hhdCBpcyBwYXNzZWQgaW4gdGhlICd3aGVuY2UxJworICAgICAgICBhbmQgJ3doZW5jZTInIGFyZ3VtZW50cy4KKyAgICAgICAgIiIiCisKKyAgICAgICAgYXNzZXJ0IHdoZW5jZTEgIT0gd2hlbmNlMgorICAgICAgICBlbmQgPSBzdGFydCAqIHNlbGYuYmxvY2tfc2l6ZQorICAgICAgICBsaW1pdCA9IGVuZCArIGNvdW50ICogc2VsZi5ibG9ja19zaXplCisKKyAgICAgICAgd2hpbGUgVHJ1ZToKKyAgICAgICAgICAgIHN0YXJ0ID0gX2xzZWVrKHNlbGYuX2ZfaW1hZ2UsIGVuZCwgd2hlbmNlMSkKKyAgICAgICAgICAgIGlmIHN0YXJ0ID09IC0xIG9yIHN0YXJ0ID49IGxpbWl0IG9yIHN0YXJ0ID09IHNlbGYuaW1hZ2Vfc2l6ZToKKyAgICAgICAgICAgICAgICBicmVhaworCisgICAgICAgICAgICBlbmQgPSBfbHNlZWsoc2VsZi5fZl9pbWFnZSwgc3RhcnQsIHdoZW5jZTIpCisgICAgICAgICAgICBpZiBlbmQgPT0gLTEgb3IgZW5kID09IHNlbGYuaW1hZ2Vfc2l6ZToKKyAgICAgICAgICAgICAgICBlbmQgPSBzZWxmLmJsb2Nrc19jbnQgKiBzZWxmLmJsb2NrX3NpemUKKyAgICAgICAgICAgIGlmIGVuZCA+IGxpbWl0OgorICAgICAgICAgICAgICAgIGVuZCA9IGxpbWl0CisKKyAgICAgICAgICAgIHN0YXJ0X2JsayA9IHN0YXJ0IC8vIHNlbGYuYmxvY2tfc2l6ZQorICAgICAgICAgICAgZW5kX2JsayA9IGVuZCAvLyBzZWxmLmJsb2NrX3NpemUgLSAxCisgICAgICAgICAgICBzZWxmLl9sb2cuZGVidWcoIkZpbGVtYXBTZWVrOiB5aWVsZGluZyByYW5nZSAoJWQsICVkKSIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAlIChzdGFydF9ibGssIGVuZF9ibGspKQorICAgICAgICAgICAgeWllbGQgKHN0YXJ0X2JsaywgZW5kX2JsaykKKworICAgIGRlZiBnZXRfbWFwcGVkX3JhbmdlcyhzZWxmLCBzdGFydCwgY291bnQpOgorICAgICAgICAiIiJSZWZlciB0aGUgJ19GaWxlbWFwQmFzZScgY2xhc3MgZm9yIHRoZSBkb2N1bWVudGF0aW9uLiIiIgorICAgICAgICBzZWxmLl9sb2cuZGVidWcoIkZpbGVtYXBTZWVrOiBnZXRfbWFwcGVkX3JhbmdlcyglZCwgICVkKCVkKSkiCisgICAgICAgICAgICAgICAgICAgICAgICAlIChzdGFydCwgY291bnQsIHN0YXJ0ICsgY291bnQgLSAxKSkKKyAgICAgICAgcmV0dXJuIHNlbGYuX2dldF9yYW5nZXMoc3RhcnQsIGNvdW50LCBfU0VFS19EQVRBLCBfU0VFS19IT0xFKQorCisgICAgZGVmIGdldF91bm1hcHBlZF9yYW5nZXMoc2VsZiwgc3RhcnQsIGNvdW50KToKKyAgICAgICAgIiIiUmVmZXIgdGhlICdfRmlsZW1hcEJhc2UnIGNsYXNzIGZvciB0aGUgZG9jdW1lbnRhdGlvbi4iIiIKKyAgICAgICAgc2VsZi5fbG9nLmRlYnVnKCJGaWxlbWFwU2VlazogZ2V0X3VubWFwcGVkX3JhbmdlcyglZCwgICVkKCVkKSkiCisgICAgICAgICAgICAgICAgICAgICAgICAlIChzdGFydCwgY291bnQsIHN0YXJ0ICsgY291bnQgLSAxKSkKKyAgICAgICAgcmV0dXJuIHNlbGYuX2dldF9yYW5nZXMoc3RhcnQsIGNvdW50LCBfU0VFS19IT0xFLCBfU0VFS19EQVRBKQorCisKKyMgQmVsb3cgZ29lcyB0aGUgRklFTUFQIGlvY3RsIGltcGxlbWVudGF0aW9uLCB3aGljaCBpcyBub3QgdmVyeSByZWFkYWJsZQorIyBiZWNhdXNlIGl0IGRlYWxzIHdpdGggdGhlIHJhdGhlciBjb21wbGV4IEZJRU1BUCBpb2N0bC4gVG8gdW5kZXJzdGFuZCB0aGUKKyMgY29kZSwgeW91IG5lZWQgdG8ga25vdyB0aGUgRklFTUFQIGludGVyZmFjZSwgd2hpY2ggaXMgZG9jdW1lbnRlZCBpbiB0aGUKKyMgIkRvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvZmllbWFwLnR4dCIgZmlsZSBpbiB0aGUgTGludXgga2VybmVsIHNvdXJjZXMuCisKKyMgRm9ybWF0IHN0cmluZyBmb3IgJ3N0cnVjdCBmaWVtYXAnCitfRklFTUFQX0ZPUk1BVCA9ICI9UVFMTExMIgorIyBzaXplb2Yoc3RydWN0IGZpZW1hcCkKK19GSUVNQVBfU0laRSA9IHN0cnVjdC5jYWxjc2l6ZShfRklFTUFQX0ZPUk1BVCkKKyMgRm9ybWF0IHN0cmluZyBmb3IgJ3N0cnVjdCBmaWVtYXBfZXh0ZW50JworX0ZJRU1BUF9FWFRFTlRfRk9STUFUID0gIj1RUVFRUUxMTEwiCisjIHNpemVvZihzdHJ1Y3QgZmllbWFwX2V4dGVudCkKK19GSUVNQVBfRVhURU5UX1NJWkUgPSBzdHJ1Y3QuY2FsY3NpemUoX0ZJRU1BUF9FWFRFTlRfRk9STUFUKQorIyBUaGUgRklFTUFQIGlvY3RsIG51bWJlcgorX0ZJRU1BUF9JT0NUTCA9IDB4QzAyMDY2MEIKKyMgVGhpcyBGSUVNQVAgaW9jdGwgZmxhZyB3aGljaCBpbnN0cnVjdHMgdGhlIGtlcm5lbCB0byBzeW5jIHRoZSBmaWxlIGJlZm9yZQorIyByZWFkaW5nIHRoZSBibG9jayBtYXAKK19GSUVNQVBfRkxBR19TWU5DID0gMHgwMDAwMDAwMQorIyBTaXplIG9mIHRoZSBidWZmZXIgZm9yICdzdHJ1Y3QgZmllbWFwX2V4dGVudCcgZWxlbWVudHMgd2hpY2ggd2lsbCBiZSB1c2VkCisjIHdoZW4gaW52b2tpbmcgdGhlIEZJRU1BUCBpb2N0bC4gVGhlIGxhcmdlciBpcyB0aGUgYnVmZmVyLCB0aGUgbGVzcyB0aW1lcyB0aGUKKyMgRklFTUFQIGlvY3RsIHdpbGwgYmUgaW52b2tlZC4KK19GSUVNQVBfQlVGRkVSX1NJWkUgPSAyNTYgKiAxMDI0CisKK2NsYXNzIEZpbGVtYXBGaWVtYXAoX0ZpbGVtYXBCYXNlKToKKyAgICAiIiIKKyAgICBUaGlzIGNsYXNzIHByb3ZpZGVzIEFQSSB0byB0aGUgRklFTUFQIGlvY3RsLiBOYW1lbHksIGl0IGFsbG93cyB0byBpdGVyYXRlCisgICAgb3ZlciBhbGwgbWFwcGVkIGJsb2NrcyBhbmQgb3ZlciBhbGwgaG9sZXMuCisKKyAgICBUaGlzIGNsYXNzIHN5bmNocm9uaXplcyB0aGUgaW1hZ2UgZmlsZSBldmVyeSB0aW1lIGl0IGludm9rZXMgdGhlIEZJRU1BUAorICAgIGlvY3RsIGluIG9yZGVyIHRvIHdvcmstYXJvdW5kIGVhcmx5IEZJRU1BUCBpbXBsZW1lbnRhdGlvbiBrZXJuZWwgYnVncy4KKyAgICAiIiIKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBpbWFnZSwgbG9nPU5vbmUpOgorICAgICAgICAiIiIKKyAgICAgICAgSW5pdGlhbGl6ZSBhIGNsYXNzIGluc3RhbmNlLiBUaGUgJ2ltYWdlJyBhcmd1bWVudCBpcyBmdWxsIHRoZSBmaWxlCisgICAgICAgIG9iamVjdCB0byBvcGVyYXRlIG9uLgorICAgICAgICAiIiIKKworICAgICAgICAjIENhbGwgdGhlIGJhc2UgY2xhc3MgY29uc3RydWN0b3IgZmlyc3QKKyAgICAgICAgX0ZpbGVtYXBCYXNlLl9faW5pdF9fKHNlbGYsIGltYWdlLCBsb2cpCisgICAgICAgIHNlbGYuX2xvZy5kZWJ1ZygiRmlsZW1hcEZpZW1hcDogaW5pdGlhbGl6aW5nIikKKworICAgICAgICBzZWxmLl9idWZfc2l6ZSA9IF9GSUVNQVBfQlVGRkVSX1NJWkUKKworICAgICAgICAjIENhbGN1bGF0ZSBob3cgbWFueSAnc3RydWN0IGZpZW1hcF9leHRlbnQnIGVsZW1lbnRzIGZpdCB0aGUgYnVmZmVyCisgICAgICAgIHNlbGYuX2J1Zl9zaXplIC09IF9GSUVNQVBfU0laRQorICAgICAgICBzZWxmLl9maWVtYXBfZXh0ZW50X2NudCA9IHNlbGYuX2J1Zl9zaXplIC8vIF9GSUVNQVBfRVhURU5UX1NJWkUKKyAgICAgICAgYXNzZXJ0IHNlbGYuX2ZpZW1hcF9leHRlbnRfY250ID4gMAorICAgICAgICBzZWxmLl9idWZfc2l6ZSA9IHNlbGYuX2ZpZW1hcF9leHRlbnRfY250ICogX0ZJRU1BUF9FWFRFTlRfU0laRQorICAgICAgICBzZWxmLl9idWZfc2l6ZSArPSBfRklFTUFQX1NJWkUKKworICAgICAgICAjIEFsbG9jYXRlIGEgbXV0YWJsZSBidWZmZXIgZm9yIHRoZSBGSUVNQVAgaW9jdGwKKyAgICAgICAgc2VsZi5fYnVmID0gYXJyYXkuYXJyYXkoJ0InLCBbMF0gKiBzZWxmLl9idWZfc2l6ZSkKKworICAgICAgICAjIENoZWNrIGlmIHRoZSBGSUVNQVAgaW9jdGwgaXMgc3VwcG9ydGVkCisgICAgICAgIHNlbGYuYmxvY2tfaXNfbWFwcGVkKDApCisKKyAgICBkZWYgX2ludm9rZV9maWVtYXAoc2VsZiwgYmxvY2ssIGNvdW50KToKKyAgICAgICAgIiIiCisgICAgICAgIEludm9rZSB0aGUgRklFTUFQIGlvY3RsIGZvciAnY291bnQnIGJsb2NrcyBvZiB0aGUgZmlsZSBzdGFydGluZyBmcm9tCisgICAgICAgIGJsb2NrIG51bWJlciAnYmxvY2snLgorCisgICAgICAgIFRoZSBmdWxsIHJlc3VsdCBvZiB0aGUgb3BlcmF0aW9uIGlzIHN0b3JlZCBpbiAnc2VsZi5fYnVmJyBvbiBleGl0LgorICAgICAgICBSZXR1cm5zIHRoZSB1bnBhY2tlZCAnc3RydWN0IGZpZW1hcCcgZGF0YSBzdHJ1Y3R1cmUgaW4gZm9ybSBvZiBhIHB5dGhvbgorICAgICAgICBsaXN0IChqdXN0IGxpa2UgJ3N0cnVjdC51cGFjaygpJykuCisgICAgICAgICIiIgorCisgICAgICAgIGlmIHNlbGYuYmxvY2tzX2NudCAhPSAwIGFuZCAoYmxvY2sgPCAwIG9yIGJsb2NrID49IHNlbGYuYmxvY2tzX2NudCk6CisgICAgICAgICAgICByYWlzZSBFcnJvcigiYmFkIGJsb2NrIG51bWJlciAlZCwgc2hvdWxkIGJlIHdpdGhpbiBbMCwgJWRdIgorICAgICAgICAgICAgICAgICAgICAgICAgJSAoYmxvY2ssIHNlbGYuYmxvY2tzX2NudCkpCisKKyAgICAgICAgIyBJbml0aWFsaXplIHRoZSAnc3RydWN0IGZpZW1hcCcgcGFydCBvZiB0aGUgYnVmZmVyLiBXZSB1c2UgdGhlCisgICAgICAgICMgJ19GSUVNQVBfRkxBR19TWU5DJyBmbGFnIGluIG9yZGVyIHRvIG1ha2Ugc3VyZSB0aGUgZmlsZSBpcworICAgICAgICAjIHN5bmNocm9uaXplZC4gVGhlIHJlYXNvbiBmb3IgdGhpcyBpcyB0aGF0IGVhcmx5IEZJRU1BUAorICAgICAgICAjIGltcGxlbWVudGF0aW9ucyBoYWQgbWFueSBidWdzIHJlbGF0ZWQgdG8gY2FjaGVkIGRpcnR5IGRhdGEsIGFuZAorICAgICAgICAjIHN5bmNocm9uaXppbmcgdGhlIGZpbGUgaXMgYSBuZWNlc3Nhcnkgd29yay1hcm91bmQuCisgICAgICAgIHN0cnVjdC5wYWNrX2ludG8oX0ZJRU1BUF9GT1JNQVQsIHNlbGYuX2J1ZiwgMCwgYmxvY2sgKiBzZWxmLmJsb2NrX3NpemUsCisgICAgICAgICAgICAgICAgICAgICAgICAgY291bnQgKiBzZWxmLmJsb2NrX3NpemUsIF9GSUVNQVBfRkxBR19TWU5DLCAwLAorICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuX2ZpZW1hcF9leHRlbnRfY250LCAwKQorCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGZjbnRsLmlvY3RsKHNlbGYuX2ZfaW1hZ2UsIF9GSUVNQVBfSU9DVEwsIHNlbGYuX2J1ZiwgMSkKKyAgICAgICAgZXhjZXB0IElPRXJyb3IgYXMgZXJyOgorICAgICAgICAgICAgIyBOb3RlLCB0aGUgRklFTUFQIGlvY3RsIGlzIHN1cHBvcnRlZCBieSB0aGUgTGludXgga2VybmVsIHN0YXJ0aW5nCisgICAgICAgICAgICAjIGZyb20gdmVyc2lvbiAyLjYuMjggKHllYXIgMjAwOCkuCisgICAgICAgICAgICBpZiBlcnIuZXJybm8gPT0gb3MuZXJybm8uRU9QTk9UU1VQUDoKKyAgICAgICAgICAgICAgICBlcnJzdHIgPSAiRmlsZW1hcEZpZW1hcDogdGhlIEZJRU1BUCBpb2N0bCBpcyBub3Qgc3VwcG9ydGVkICIgXAorICAgICAgICAgICAgICAgICAgICAgICAgICJieSB0aGUgZmlsZS1zeXN0ZW0iCisgICAgICAgICAgICAgICAgc2VsZi5fbG9nLmRlYnVnKGVycnN0cikKKyAgICAgICAgICAgICAgICByYWlzZSBFcnJvck5vdFN1cHAoZXJyc3RyKQorICAgICAgICAgICAgaWYgZXJyLmVycm5vID09IG9zLmVycm5vLkVOT1RUWToKKyAgICAgICAgICAgICAgICBlcnJzdHIgPSAiRmlsZW1hcEZpZW1hcDogdGhlIEZJRU1BUCBpb2N0bCBpcyBub3Qgc3VwcG9ydGVkICIgXAorICAgICAgICAgICAgICAgICAgICAgICAgICJieSB0aGUga2VybmVsIgorICAgICAgICAgICAgICAgIHNlbGYuX2xvZy5kZWJ1ZyhlcnJzdHIpCisgICAgICAgICAgICAgICAgcmFpc2UgRXJyb3JOb3RTdXBwKGVycnN0cikKKyAgICAgICAgICAgIHJhaXNlIEVycm9yKCJ0aGUgRklFTUFQIGlvY3RsIGZhaWxlZCBmb3IgJyVzJzogJXMiCisgICAgICAgICAgICAgICAgICAgICAgICAlIChzZWxmLl9pbWFnZV9wYXRoLCBlcnIpKQorCisgICAgICAgIHJldHVybiBzdHJ1Y3QudW5wYWNrKF9GSUVNQVBfRk9STUFULCBzZWxmLl9idWZbOl9GSUVNQVBfU0laRV0pCisKKyAgICBkZWYgYmxvY2tfaXNfbWFwcGVkKHNlbGYsIGJsb2NrKToKKyAgICAgICAgIiIiUmVmZXIgdGhlICdfRmlsZW1hcEJhc2UnIGNsYXNzIGZvciB0aGUgZG9jdW1lbnRhdGlvbi4iIiIKKyAgICAgICAgc3RydWN0X2ZpZW1hcCA9IHNlbGYuX2ludm9rZV9maWVtYXAoYmxvY2ssIDEpCisKKyAgICAgICAgIyBUaGUgM3JkIGVsZW1lbnQgb2YgJ3N0cnVjdF9maWVtYXAnIGlzIHRoZSAnZm1fbWFwcGVkX2V4dGVudHMnIGZpZWxkLgorICAgICAgICAjIElmIGl0IGNvbnRhaW5zIHplcm8sIHRoZSBibG9jayBpcyBub3QgbWFwcGVkLCBvdGhlcndpc2UgaXQgaXMKKyAgICAgICAgIyBtYXBwZWQuCisgICAgICAgIHJlc3VsdCA9IGJvb2woc3RydWN0X2ZpZW1hcFszXSkKKyAgICAgICAgc2VsZi5fbG9nLmRlYnVnKCJGaWxlbWFwRmllbWFwOiBibG9ja19pc19tYXBwZWQoJWQpIHJldHVybnMgJXMiCisgICAgICAgICAgICAgICAgICAgICAgICAlIChibG9jaywgcmVzdWx0KSkKKyAgICAgICAgcmV0dXJuIHJlc3VsdAorCisgICAgZGVmIGJsb2NrX2lzX3VubWFwcGVkKHNlbGYsIGJsb2NrKToKKyAgICAgICAgIiIiUmVmZXIgdGhlICdfRmlsZW1hcEJhc2UnIGNsYXNzIGZvciB0aGUgZG9jdW1lbnRhdGlvbi4iIiIKKyAgICAgICAgcmV0dXJuIG5vdCBzZWxmLmJsb2NrX2lzX21hcHBlZChibG9jaykKKworICAgIGRlZiBfdW5wYWNrX2ZpZW1hcF9leHRlbnQoc2VsZiwgaW5kZXgpOgorICAgICAgICAiIiIKKyAgICAgICAgVW5wYWNrIGEgJ3N0cnVjdCBmaWVtYXBfZXh0ZW50JyBzdHJ1Y3R1cmUgb2JqZWN0IG51bWJlciAnaW5kZXgnIGZyb20KKyAgICAgICAgdGhlIGludGVybmFsICdzZWxmLl9idWYnIGJ1ZmZlci4KKyAgICAgICAgIiIiCisKKyAgICAgICAgb2Zmc2V0ID0gX0ZJRU1BUF9TSVpFICsgX0ZJRU1BUF9FWFRFTlRfU0laRSAqIGluZGV4CisgICAgICAgIHJldHVybiBzdHJ1Y3QudW5wYWNrKF9GSUVNQVBfRVhURU5UX0ZPUk1BVCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5fYnVmW29mZnNldCA6IG9mZnNldCArIF9GSUVNQVBfRVhURU5UX1NJWkVdKQorCisgICAgZGVmIF9kb19nZXRfbWFwcGVkX3JhbmdlcyhzZWxmLCBzdGFydCwgY291bnQpOgorICAgICAgICAiIiIKKyAgICAgICAgSW1wbGVtZW50cyBtb3N0IHRoZSBmdW5jdGlvbmFsaXR5IGZvciB0aGUgICdnZXRfbWFwcGVkX3JhbmdlcygpJworICAgICAgICBnZW5lcmF0b3I6IGludm9rZXMgdGhlIEZJRU1BUCBpb2N0bCwgd2Fsa3MgdGhyb3VnaCB0aGUgbWFwcGVkIGV4dGVudHMKKyAgICAgICAgYW5kIHlpZWxkcyBtYXBwZWQgYmxvY2sgcmFuZ2VzLiBIb3dldmVyLCB0aGUgcmFuZ2VzIG1heSBiZSBjb25zZWN1dGl2ZQorICAgICAgICAoZS5nLiwgKDEsIDEwMCksICgxMDAsIDIwMCkpIGFuZCAnZ2V0X21hcHBlZF9yYW5nZXMoKScgc2ltcGx5IG1lcmdlcworICAgICAgICB0aGVtLgorICAgICAgICAiIiIKKworICAgICAgICBibG9jayA9IHN0YXJ0CisgICAgICAgIHdoaWxlIGJsb2NrIDwgc3RhcnQgKyBjb3VudDoKKyAgICAgICAgICAgIHN0cnVjdF9maWVtYXAgPSBzZWxmLl9pbnZva2VfZmllbWFwKGJsb2NrLCBjb3VudCkKKworICAgICAgICAgICAgbWFwcGVkX2V4dGVudHMgPSBzdHJ1Y3RfZmllbWFwWzNdCisgICAgICAgICAgICBpZiBtYXBwZWRfZXh0ZW50cyA9PSAwOgorICAgICAgICAgICAgICAgICMgTm8gbW9yZSBtYXBwZWQgYmxvY2tzCisgICAgICAgICAgICAgICAgcmV0dXJuCisKKyAgICAgICAgICAgIGV4dGVudCA9IDAKKyAgICAgICAgICAgIHdoaWxlIGV4dGVudCA8IG1hcHBlZF9leHRlbnRzOgorICAgICAgICAgICAgICAgIGZpZW1hcF9leHRlbnQgPSBzZWxmLl91bnBhY2tfZmllbWFwX2V4dGVudChleHRlbnQpCisKKyAgICAgICAgICAgICAgICAjIFN0YXJ0IG9mIHRoZSBleHRlbnQKKyAgICAgICAgICAgICAgICBleHRlbnRfc3RhcnQgPSBmaWVtYXBfZXh0ZW50WzBdCisgICAgICAgICAgICAgICAgIyBTdGFydGluZyBibG9jayBudW1iZXIgb2YgdGhlIGV4dGVudAorICAgICAgICAgICAgICAgIGV4dGVudF9ibG9jayA9IGV4dGVudF9zdGFydCAvLyBzZWxmLmJsb2NrX3NpemUKKyAgICAgICAgICAgICAgICAjIExlbmd0aCBvZiB0aGUgZXh0ZW50CisgICAgICAgICAgICAgICAgZXh0ZW50X2xlbiA9IGZpZW1hcF9leHRlbnRbMl0KKyAgICAgICAgICAgICAgICAjIENvdW50IG9mIGJsb2NrcyBpbiB0aGUgZXh0ZW50CisgICAgICAgICAgICAgICAgZXh0ZW50X2NvdW50ID0gZXh0ZW50X2xlbiAvLyBzZWxmLmJsb2NrX3NpemUKKworICAgICAgICAgICAgICAgICMgRXh0ZW50IGxlbmd0aCBhbmQgb2Zmc2V0IGhhdmUgdG8gYmUgYmxvY2stYWxpZ25lZAorICAgICAgICAgICAgICAgIGFzc2VydCBleHRlbnRfc3RhcnQgJSBzZWxmLmJsb2NrX3NpemUgPT0gMAorICAgICAgICAgICAgICAgIGFzc2VydCBleHRlbnRfbGVuICUgc2VsZi5ibG9ja19zaXplID09IDAKKworICAgICAgICAgICAgICAgIGlmIGV4dGVudF9ibG9jayA+IHN0YXJ0ICsgY291bnQgLSAxOgorICAgICAgICAgICAgICAgICAgICByZXR1cm4KKworICAgICAgICAgICAgICAgIGZpcnN0ID0gbWF4KGV4dGVudF9ibG9jaywgYmxvY2spCisgICAgICAgICAgICAgICAgbGFzdCA9IG1pbihleHRlbnRfYmxvY2sgKyBleHRlbnRfY291bnQsIHN0YXJ0ICsgY291bnQpIC0gMQorICAgICAgICAgICAgICAgIHlpZWxkIChmaXJzdCwgbGFzdCkKKworICAgICAgICAgICAgICAgIGV4dGVudCArPSAxCisKKyAgICAgICAgICAgIGJsb2NrID0gZXh0ZW50X2Jsb2NrICsgZXh0ZW50X2NvdW50CisKKyAgICBkZWYgZ2V0X21hcHBlZF9yYW5nZXMoc2VsZiwgc3RhcnQsIGNvdW50KToKKyAgICAgICAgIiIiUmVmZXIgdGhlICdfRmlsZW1hcEJhc2UnIGNsYXNzIGZvciB0aGUgZG9jdW1lbnRhdGlvbi4iIiIKKyAgICAgICAgc2VsZi5fbG9nLmRlYnVnKCJGaWxlbWFwRmllbWFwOiBnZXRfbWFwcGVkX3JhbmdlcyglZCwgICVkKCVkKSkiCisgICAgICAgICAgICAgICAgICAgICAgICAlIChzdGFydCwgY291bnQsIHN0YXJ0ICsgY291bnQgLSAxKSkKKyAgICAgICAgaXRlcmF0b3IgPSBzZWxmLl9kb19nZXRfbWFwcGVkX3JhbmdlcyhzdGFydCwgY291bnQpCisgICAgICAgIGZpcnN0X3ByZXYsIGxhc3RfcHJldiA9IG5leHQoaXRlcmF0b3IpCisKKyAgICAgICAgZm9yIGZpcnN0LCBsYXN0IGluIGl0ZXJhdG9yOgorICAgICAgICAgICAgaWYgbGFzdF9wcmV2ID09IGZpcnN0IC0gMToKKyAgICAgICAgICAgICAgICBsYXN0X3ByZXYgPSBsYXN0CisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHNlbGYuX2xvZy5kZWJ1ZygiRmlsZW1hcEZpZW1hcDogeWllbGRpbmcgcmFuZ2UgKCVkLCAlZCkiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICUgKGZpcnN0X3ByZXYsIGxhc3RfcHJldikpCisgICAgICAgICAgICAgICAgeWllbGQgKGZpcnN0X3ByZXYsIGxhc3RfcHJldikKKyAgICAgICAgICAgICAgICBmaXJzdF9wcmV2LCBsYXN0X3ByZXYgPSBmaXJzdCwgbGFzdAorCisgICAgICAgIHNlbGYuX2xvZy5kZWJ1ZygiRmlsZW1hcEZpZW1hcDogeWllbGRpbmcgcmFuZ2UgKCVkLCAlZCkiCisgICAgICAgICAgICAgICAgICAgICAgICAlIChmaXJzdF9wcmV2LCBsYXN0X3ByZXYpKQorICAgICAgICB5aWVsZCAoZmlyc3RfcHJldiwgbGFzdF9wcmV2KQorCisgICAgZGVmIGdldF91bm1hcHBlZF9yYW5nZXMoc2VsZiwgc3RhcnQsIGNvdW50KToKKyAgICAgICAgIiIiUmVmZXIgdGhlICdfRmlsZW1hcEJhc2UnIGNsYXNzIGZvciB0aGUgZG9jdW1lbnRhdGlvbi4iIiIKKyAgICAgICAgc2VsZi5fbG9nLmRlYnVnKCJGaWxlbWFwRmllbWFwOiBnZXRfdW5tYXBwZWRfcmFuZ2VzKCVkLCAgJWQoJWQpKSIKKyAgICAgICAgICAgICAgICAgICAgICAgICUgKHN0YXJ0LCBjb3VudCwgc3RhcnQgKyBjb3VudCAtIDEpKQorICAgICAgICBob2xlX2ZpcnN0ID0gc3RhcnQKKyAgICAgICAgZm9yIGZpcnN0LCBsYXN0IGluIHNlbGYuX2RvX2dldF9tYXBwZWRfcmFuZ2VzKHN0YXJ0LCBjb3VudCk6CisgICAgICAgICAgICBpZiBmaXJzdCA+IGhvbGVfZmlyc3Q6CisgICAgICAgICAgICAgICAgc2VsZi5fbG9nLmRlYnVnKCJGaWxlbWFwRmllbWFwOiB5aWVsZGluZyByYW5nZSAoJWQsICVkKSIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJSAoaG9sZV9maXJzdCwgZmlyc3QgLSAxKSkKKyAgICAgICAgICAgICAgICB5aWVsZCAoaG9sZV9maXJzdCwgZmlyc3QgLSAxKQorCisgICAgICAgICAgICBob2xlX2ZpcnN0ID0gbGFzdCArIDEKKworICAgICAgICBpZiBob2xlX2ZpcnN0IDwgc3RhcnQgKyBjb3VudDoKKyAgICAgICAgICAgIHNlbGYuX2xvZy5kZWJ1ZygiRmlsZW1hcEZpZW1hcDogeWllbGRpbmcgcmFuZ2UgKCVkLCAlZCkiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgJSAoaG9sZV9maXJzdCwgc3RhcnQgKyBjb3VudCAtIDEpKQorICAgICAgICAgICAgeWllbGQgKGhvbGVfZmlyc3QsIHN0YXJ0ICsgY291bnQgLSAxKQorCitkZWYgZmlsZW1hcChpbWFnZSwgbG9nPU5vbmUpOgorICAgICIiIgorICAgIENyZWF0ZSBhbmQgcmV0dXJuIGFuIGluc3RhbmNlIG9mIGEgRmlsZW1hcCBjbGFzcyAtICdGaWxlbWFwRmllbWFwJyBvcgorICAgICdGaWxlbWFwU2VlaycsIGRlcGVuZGluZyBvbiB3aGF0IHRoZSBzeXN0ZW0gd2UgcnVuIG9uIHN1cHBvcnRzLiBJZiB0aGUKKyAgICBGSUVNQVAgaW9jdGwgaXMgc3VwcG9ydGVkLCBhbiBpbnN0YW5jZSBvZiB0aGUgJ0ZpbGVtYXBGaWVtYXAnIGNsYXNzIGlzCisgICAgcmV0dXJuZWQuIE90aGVyd2lzZSwgaWYgJ1NFRUtfSE9MRScgaXMgc3VwcG9ydGVkIGFuIGluc3RhbmNlIG9mIHRoZQorICAgICdGaWxlbWFwU2VlaycgY2xhc3MgaXMgcmV0dXJuZWQuIElmIG5vbmUgb2YgdGhlc2UgYXJlIHN1cHBvcnRlZCwgdGhlCisgICAgZnVuY3Rpb24gZ2VuZXJhdGVzIGFuICdFcnJvcicgdHlwZSBleGNlcHRpb24uCisgICAgIiIiCisKKyAgICB0cnk6CisgICAgICAgIHJldHVybiBGaWxlbWFwRmllbWFwKGltYWdlLCBsb2cpCisgICAgZXhjZXB0IEVycm9yTm90U3VwcDoKKyAgICAgICAgcmV0dXJuIEZpbGVtYXBTZWVrKGltYWdlLCBsb2cpCisKK2RlZiBzcGFyc2VfY29weShzcmNfZm5hbWUsIGRzdF9mbmFtZSwgb2Zmc2V0PTAsIHNraXA9MCk6CisgICAgIiIiRWZmaWNpZW50bHkgY29weSBzcGFyc2UgZmlsZSB0byBvciBpbnRvIGFub3RoZXIgZmlsZS4iIiIKKyAgICBmbWFwID0gZmlsZW1hcChzcmNfZm5hbWUpCisgICAgdHJ5OgorICAgICAgICBkc3RfZmlsZSA9IG9wZW4oZHN0X2ZuYW1lLCAncitiJykKKyAgICBleGNlcHQgSU9FcnJvcjoKKyAgICAgICAgZHN0X2ZpbGUgPSBvcGVuKGRzdF9mbmFtZSwgJ3diJykKKworICAgIGZvciBmaXJzdCwgbGFzdCBpbiBmbWFwLmdldF9tYXBwZWRfcmFuZ2VzKDAsIGZtYXAuYmxvY2tzX2NudCk6CisgICAgICAgIHN0YXJ0ID0gZmlyc3QgKiBmbWFwLmJsb2NrX3NpemUKKyAgICAgICAgZW5kID0gKGxhc3QgKyAxKSAqIGZtYXAuYmxvY2tfc2l6ZQorCisgICAgICAgIGlmIHN0YXJ0IDwgc2tpcCA8IGVuZDoKKyAgICAgICAgICAgIHN0YXJ0ID0gc2tpcAorCisgICAgICAgIGZtYXAuX2ZfaW1hZ2Uuc2VlayhzdGFydCwgb3MuU0VFS19TRVQpCisgICAgICAgIGRzdF9maWxlLnNlZWsob2Zmc2V0ICsgc3RhcnQsIG9zLlNFRUtfU0VUKQorCisgICAgICAgIGNodW5rX3NpemUgPSAxMDI0ICogMTAyNAorICAgICAgICB0b19yZWFkID0gZW5kIC0gc3RhcnQKKyAgICAgICAgcmVhZCA9IDAKKworICAgICAgICB3aGlsZSByZWFkIDwgdG9fcmVhZDoKKyAgICAgICAgICAgIGlmIHJlYWQgKyBjaHVua19zaXplID4gdG9fcmVhZDoKKyAgICAgICAgICAgICAgICBjaHVua19zaXplID0gdG9fcmVhZCAtIHJlYWQKKyAgICAgICAgICAgIGNodW5rID0gZm1hcC5fZl9pbWFnZS5yZWFkKGNodW5rX3NpemUpCisgICAgICAgICAgICBkc3RfZmlsZS53cml0ZShjaHVuaykKKyAgICAgICAgICAgIHJlYWQgKz0gY2h1bmtfc2l6ZQorICAgIGRzdF9maWxlLmNsb3NlKCkKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9zY3JpcHRzL2xpYi93aWMvaGVscC5weSBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9zY3JpcHRzL2xpYi93aWMvaGVscC5weQppbmRleCA0MDVkMjVhLi5lNTM0N2VjIDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvd2ljL2hlbHAucHkKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L3NjcmlwdHMvbGliL3dpYy9oZWxwLnB5CkBAIC00NSw3ICs0NSw3IEBACiAgICAgaWYgY2FsbGFibGUoaGxwKToKICAgICAgICAgaGxwID0gaGxwKCkKICAgICBwYWdlciA9IHN1YnByb2Nlc3MuUG9wZW4oJ2xlc3MnLCBzdGRpbj1zdWJwcm9jZXNzLlBJUEUpCi0gICAgcGFnZXIuY29tbXVuaWNhdGUoaGxwKQorICAgIHBhZ2VyLmNvbW11bmljYXRlKGhscC5lbmNvZGUoJ3V0Zi04JykpCiAKICAgICByZXR1cm4gVHJ1ZQogCkBAIC01NSw3ICs1NSw3IEBACiAgICAgU3ViY29tbWFuZCBoZWxwIGRpc3BhdGNoZXIuCiAgICAgIiIiCiAgICAgaWYgbGVuKGFyZ3MpID09IDEgb3Igbm90IGRpc3BsYXlfaGVscChhcmdzWzFdLCBzdWJjb21tYW5kcyk6Ci0gICAgICAgIHByaW50IHVzYWdlX3N0cgorICAgICAgICBwcmludCh1c2FnZV9zdHIpCiAKIAogZGVmIGdldF93aWNfcGx1Z2luc19oZWxwKCk6CkBAIC02Niw3ICs2Niw3IEBACiAgICAgcmVzdWx0ID0gd2ljX3BsdWdpbnNfaGVscAogICAgIGZvciBwbHVnaW5fdHlwZSBpbiBQTFVHSU5fVFlQRVM6CiAgICAgICAgIHJlc3VsdCArPSAnXG5cbiVzIFBMVUdJTlNcblxuJyAlIHBsdWdpbl90eXBlLnVwcGVyKCkKLSAgICAgICAgZm9yIG5hbWUsIHBsdWdpbiBpbiBwbHVnaW5tZ3IuZ2V0X3BsdWdpbnMocGx1Z2luX3R5cGUpLml0ZXJpdGVtcygpOgorICAgICAgICBmb3IgbmFtZSwgcGx1Z2luIGluIHBsdWdpbm1nci5nZXRfcGx1Z2lucyhwbHVnaW5fdHlwZSkuaXRlbXMoKToKICAgICAgICAgICAgIHJlc3VsdCArPSAiXG4gJXMgcGx1Z2luOlxuIiAlIG5hbWUKICAgICAgICAgICAgIGlmIHBsdWdpbi5fX2RvY19fOgogICAgICAgICAgICAgICAgIHJlc3VsdCArPSBwbHVnaW4uX19kb2NfXwpAQCAtMTUyLDcgKzE1Miw3IEBACiAgICAgICAgIFstZSB8IC0taW1hZ2UtbmFtZV0gWy1zLCAtLXNraXAtYnVpbGQtY2hlY2tdIFstRCwgLS1kZWJ1Z10KICAgICAgICAgWy1yLCAtLXJvb3Rmcy1kaXJdIFstYiwgLS1ib290aW1nLWRpcl0KICAgICAgICAgWy1rLCAtLWtlcm5lbC1kaXJdIFstbiwgLS1uYXRpdmUtc3lzcm9vdF0gWy1mLCAtLWJ1aWxkLXJvb3Rmc10KLSAgICAgICAgWy1jLCAtLWNvbXByZXNzLXdpdGhdCisgICAgICAgIFstYywgLS1jb21wcmVzcy13aXRoXSBbLW0sIC0tYm1hcF0KIAogREVTQ1JJUFRJT04KICAgICBUaGlzIGNvbW1hbmQgY3JlYXRlcyBhbiBPcGVuRW1iZWRkZWQgaW1hZ2UgYmFzZWQgb24gdGhlICdPRQpAQCAtMjIxLDYgKzIyMSw5IEBACiAKICAgICBUaGUgLWMgb3B0aW9uIGlzIHVzZWQgdG8gc3BlY2lmeSBjb21wcmVzc29yIHV0aWxpdHkgdG8gY29tcHJlc3MKICAgICBhbiBpbWFnZS4gZ3ppcCwgYnppcDIgYW5kIHh6IGNvbXByZXNzb3JzIGFyZSBzdXBwb3J0ZWQuCisKKyAgICBUaGUgLW0gb3B0aW9uIGlzIHVzZWQgdG8gcHJvZHVjZSAuYm1hcCBmaWxlIGZvciB0aGUgaW1hZ2UuIFRoaXMgZmlsZQorICAgIGNhbiBiZSB1c2VkIHRvIGZsYXNoIGltYWdlIHVzaW5nIGJtYXB0b29sIHV0aWxpdHkuCiAiIiIKIAogd2ljX2xpc3RfdXNhZ2UgPSAiIiIKQEAgLTczOCw2ICs3NDEsMTAgQEAKICAgICAgICAgICAgICAgICAgaW4gYm9vdGxvYWRlciBjb25maWd1cmF0aW9uIGJlZm9yZSBydW5uaW5nIHdpYy4gSW4gdGhpcyBjYXNlIC53a3MgZmlsZSBjYW4KICAgICAgICAgICAgICAgICAgYmUgZ2VuZXJhdGVkIG9yIG1vZGlmaWVkIHRvIHNldCBwcmVjb25maWd1cmVkIHBhcml0aW9uIFVVSUQgdXNpbmcgdGhpcyBvcHRpb24uCiAKKyAgICAgICAgIC0tc3lzdGVtLWlkOiBUaGlzIG9wdGlvbiBpcyBzcGVjaWZpYyB0byB3aWMuIEl0IHNwZWNpZmllcyBwYXJ0aXRpb24gc3lzdGVtIGlkLiBJdCdzIHVzZWZ1bAorICAgICAgICAgICAgICAgICAgICAgIGZvciB0aGUgaGFyd2FyZSB0aGF0IHJlcXVpcmVzIG5vbi1kZWZhdWx0IHBhcnRpdGlvbiBzeXN0ZW0gaWRzLiBUaGUgcGFyYW1ldGVyCisgICAgICAgICAgICAgICAgICAgICAgaW4gb25lIGJ5dGUgbG9uZyBoZXggbnVtYmVyIGVpdGhlciB3aXRoIDB4IHByZWZpeCBvciB3aXRob3V0IGl0LgorCiAgICAgKiBib290bG9hZGVyCiAKICAgICAgIFRoaXMgY29tbWFuZCBhbGxvd3MgdGhlIHVzZXIgdG8gc3BlY2lmeSB2YXJpb3VzIGJvb3Rsb2FkZXIKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9zY3JpcHRzL2xpYi93aWMvaW1hZ2VyL2Jhc2VpbWFnZXIucHkgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvd2ljL2ltYWdlci9iYXNlaW1hZ2VyLnB5CmluZGV4IDc2MGNmOGEuLjFhNTJkZDggMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9zY3JpcHRzL2xpYi93aWMvaW1hZ2VyL2Jhc2VpbWFnZXIucHkKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L3NjcmlwdHMvbGliL3dpYy9pbWFnZXIvYmFzZWltYWdlci5weQpAQCAtMTYsNyArMTYsNiBAQAogIyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1OQogIyBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBLgogCi1mcm9tIF9fZnV0dXJlX18gaW1wb3J0IHdpdGhfc3RhdGVtZW50CiBpbXBvcnQgb3MKIGltcG9ydCB0ZW1wZmlsZQogaW1wb3J0IHNodXRpbApAQCAtMjUsNyArMjQsNyBAQAogZnJvbSB3aWMudXRpbHMuZXJyb3JzIGltcG9ydCBDcmVhdG9yRXJyb3IKIGZyb20gd2ljLnV0aWxzIGltcG9ydCBydW5uZXIKIAotY2xhc3MgQmFzZUltYWdlQ3JlYXRvcihvYmplY3QpOgorY2xhc3MgQmFzZUltYWdlQ3JlYXRvcigpOgogICAgICIiIkJhc2UgY2xhc3MgZm9yIGltYWdlIGNyZWF0aW9uLgogCiAgICAgQmFzZUltYWdlQ3JlYXRvciBpcyB0aGUgc2ltcGxlc3QgY3JlYXRvciBjbGFzcyBhdmFpbGFibGU7IGl0IHdpbGwKQEAgLTY4LDcgKzY3LDcgQEAKICAgICAgICAgICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgIyB1cGRhdGUgc2V0dGluZyBmcm9tIGNyZWF0ZW9wdHMKLSAgICAgICAgICAgIGZvciBrZXkgaW4gY3JlYXRlb3B0cy5rZXlzKCk6CisgICAgICAgICAgICBmb3Iga2V5IGluIGNyZWF0ZW9wdHM6CiAgICAgICAgICAgICAgICAgaWYga2V5IGluIG9wdG1hcDoKICAgICAgICAgICAgICAgICAgICAgb3B0aW9uID0gb3B0bWFwW2tleV0KICAgICAgICAgICAgICAgICBlbHNlOgpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L3NjcmlwdHMvbGliL3dpYy9pbWFnZXIvZGlyZWN0LnB5IGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L3NjcmlwdHMvbGliL3dpYy9pbWFnZXIvZGlyZWN0LnB5CmluZGV4IGExYjQyNDkuLmVkZjVlNWQgMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9zY3JpcHRzL2xpYi93aWMvaW1hZ2VyL2RpcmVjdC5weQorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvd2ljL2ltYWdlci9kaXJlY3QucHkKQEAgLTI2LDIwICsyNiw0MCBAQAogCiBpbXBvcnQgb3MKIGltcG9ydCBzaHV0aWwKK2ltcG9ydCB1dWlkCiAKIGZyb20gd2ljIGltcG9ydCBtc2dlcgotZnJvbSB3aWMudXRpbHMgaW1wb3J0IGZzX3JlbGF0ZWQKIGZyb20gd2ljLnV0aWxzLm9lLm1pc2MgaW1wb3J0IGdldF9iaXRiYWtlX3ZhcgogZnJvbSB3aWMudXRpbHMucGFydGl0aW9uZWRmcyBpbXBvcnQgSW1hZ2UKIGZyb20gd2ljLnV0aWxzLmVycm9ycyBpbXBvcnQgQ3JlYXRvckVycm9yLCBJbWFnZUVycm9yCiBmcm9tIHdpYy5pbWFnZXIuYmFzZWltYWdlciBpbXBvcnQgQmFzZUltYWdlQ3JlYXRvcgogZnJvbSB3aWMucGx1Z2luIGltcG9ydCBwbHVnaW5tZ3IKLWZyb20gd2ljLnV0aWxzLm9lLm1pc2MgaW1wb3J0IGV4ZWNfY21kCitmcm9tIHdpYy51dGlscy5vZS5taXNjIGltcG9ydCBleGVjX2NtZCwgZXhlY19uYXRpdmVfY21kCiAKIGRpc2tfbWV0aG9kcyA9IHsKICAgICAiZG9faW5zdGFsbF9kaXNrIjpOb25lLAogfQogCitjbGFzcyBEaXNrSW1hZ2UoKToKKyAgICAiIiIKKyAgICBBIERpc2sgYmFja2VkIGJ5IGEgZmlsZS4KKyAgICAiIiIKKyAgICBkZWYgX19pbml0X18oc2VsZiwgZGV2aWNlLCBzaXplKToKKyAgICAgICAgc2VsZi5zaXplID0gc2l6ZQorICAgICAgICBzZWxmLmRldmljZSA9IGRldmljZQorICAgICAgICBzZWxmLmNyZWF0ZWQgPSBGYWxzZQorCisgICAgZGVmIGV4aXN0cyhzZWxmKToKKyAgICAgICAgcmV0dXJuIG9zLnBhdGguZXhpc3RzKHNlbGYuZGV2aWNlKQorCisgICAgZGVmIGNyZWF0ZShzZWxmKToKKyAgICAgICAgaWYgc2VsZi5jcmVhdGVkOgorICAgICAgICAgICAgcmV0dXJuCisgICAgICAgICMgY3JlYXRlIHNwYXJzZSBkaXNrIGltYWdlCisgICAgICAgIGNtZCA9ICJ0cnVuY2F0ZSAlcyAtcyAlcyIgJSAoc2VsZi5kZXZpY2UsIHNlbGYuc2l6ZSkKKyAgICAgICAgZXhlY19jbWQoY21kKQorICAgICAgICBzZWxmLmNyZWF0ZWQgPSBUcnVlCisKIGNsYXNzIERpcmVjdEltYWdlQ3JlYXRvcihCYXNlSW1hZ2VDcmVhdG9yKToKICAgICAiIiIKICAgICBJbnN0YWxscyBhIHN5c3RlbSBpbnRvIGEgZmlsZSBjb250YWluaW5nIGEgcGFydGl0aW9uZWQgZGlzayBpbWFnZS4KQEAgLTUyLDcgKzcyLDggQEAKICAgICAiIiIKIAogICAgIGRlZiBfX2luaXRfXyhzZWxmLCBvZV9idWlsZGRpciwgaW1hZ2Vfb3V0cHV0X2Rpciwgcm9vdGZzX2RpciwgYm9vdGltZ19kaXIsCi0gICAgICAgICAgICAgICAgIGtlcm5lbF9kaXIsIG5hdGl2ZV9zeXNyb290LCBjb21wcmVzc29yLCBjcmVhdG9yb3B0cz1Ob25lKToKKyAgICAgICAgICAgICAgICAga2VybmVsX2RpciwgbmF0aXZlX3N5c3Jvb3QsIGNvbXByZXNzb3IsIGNyZWF0b3JvcHRzPU5vbmUsCisgICAgICAgICAgICAgICAgIGJtYXA9RmFsc2UpOgogICAgICAgICAiIiIKICAgICAgICAgSW5pdGlhbGl6ZSBhIERpcmVjdEltYWdlQ3JlYXRvciBpbnN0YW5jZS4KIApAQCAtNzQsNiArOTUsNyBAQAogICAgICAgICBzZWxmLmtlcm5lbF9kaXIgPSBrZXJuZWxfZGlyCiAgICAgICAgIHNlbGYubmF0aXZlX3N5c3Jvb3QgPSBuYXRpdmVfc3lzcm9vdAogICAgICAgICBzZWxmLmNvbXByZXNzb3IgPSBjb21wcmVzc29yCisgICAgICAgIHNlbGYuYm1hcCA9IGJtYXAKIAogICAgIGRlZiBfX2dldF9wYXJ0X251bShzZWxmLCBudW0sIHBhcnRzKToKICAgICAgICAgIiIiY2FsY3VsYXRlIHRoZSByZWFsIHBhcnRpdGlvbiBudW1iZXIsIGFjY291bnRpbmcgZm9yIHBhcnRpdGlvbnMgbm90CkBAIC0yMjEsMTIgKzI0MywyMyBAQAogCiAgICAgICAgIHNlbGYuX19pbWFnZSA9IEltYWdlKHNlbGYubmF0aXZlX3N5c3Jvb3QpCiAKLSAgICAgICAgZm9yIHBhcnQgaW4gcGFydHM6CisgICAgICAgIGRpc2tfaWRzID0ge30KKyAgICAgICAgZm9yIG51bSwgcGFydCBpbiBlbnVtZXJhdGUocGFydHMsIDEpOgogICAgICAgICAgICAgIyBhcyBhIGNvbnZlbmllbmNlLCBzZXQgc291cmNlIHRvIHRoZSBib290IHBhcnRpdGlvbiBzb3VyY2UKICAgICAgICAgICAgICMgaW5zdGVhZCBvZiBmb3JjaW5nIGl0IHRvIGJlIHNldCB2aWEgYm9vdGxvYWRlciAtLXNvdXJjZQogICAgICAgICAgICAgaWYgbm90IHNlbGYua3MuYm9vdGxvYWRlci5zb3VyY2UgYW5kIHBhcnQubW91bnRwb2ludCA9PSAiL2Jvb3QiOgogICAgICAgICAgICAgICAgIHNlbGYua3MuYm9vdGxvYWRlci5zb3VyY2UgPSBwYXJ0LnNvdXJjZQogCisgICAgICAgICAgICAjIGdlbmVyYXRlIHBhcml0aW9uIFVVSURzCisgICAgICAgICAgICBpZiBub3QgcGFydC51dWlkIGFuZCBwYXJ0LnVzZV91dWlkOgorICAgICAgICAgICAgICAgIGlmIHNlbGYucHRhYmxlX2Zvcm1hdCA9PSAnZ3B0JzoKKyAgICAgICAgICAgICAgICAgICAgcGFydC51dWlkID0gc3RyKHV1aWQudXVpZDQoKSkKKyAgICAgICAgICAgICAgICBlbHNlOiAjIG1zZG9zIHBhcnRpdGlvbiB0YWJsZQorICAgICAgICAgICAgICAgICAgICBpZiBwYXJ0LmRpc2sgbm90IGluIGRpc2tfaWRzOgorICAgICAgICAgICAgICAgICAgICAgICAgZGlza19pZHNbcGFydC5kaXNrXSA9IGludC5mcm9tX2J5dGVzKG9zLnVyYW5kb20oNCksICdsaXR0bGUnKQorICAgICAgICAgICAgICAgICAgICBkaXNrX2lkID0gZGlza19pZHNbcGFydC5kaXNrXQorICAgICAgICAgICAgICAgICAgICBwYXJ0LnV1aWQgPSAnJTB4LSUwMmQnICUgKGRpc2tfaWQsIHNlbGYuX19nZXRfcGFydF9udW0obnVtLCBwYXJ0cykpCisKICAgICAgICAgZnN0YWJfcGF0aCA9IHNlbGYuX3dyaXRlX2ZzdGFiKHNlbGYucm9vdGZzX2Rpci5nZXQoIlJPT1RGU19ESVIiKSkKIAogICAgICAgICBzaHV0aWwucm10cmVlKHNlbGYud29ya2RpcikKQEAgLTI2Nyw3ICszMDAsOCBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWxpZ249cGFydC5hbGlnbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5vX3RhYmxlPXBhcnQubm9fdGFibGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJ0X3R5cGU9cGFydC5wYXJ0X3R5cGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1dWlkPXBhcnQudXVpZCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHV1aWQ9cGFydC51dWlkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3lzdGVtX2lkPXBhcnQuc3lzdGVtX2lkKQogCiAgICAgICAgIGlmIGZzdGFiX3BhdGg6CiAgICAgICAgICAgICBzaHV0aWwubW92ZShmc3RhYl9wYXRoICsgIi5vcmlnIiwgZnN0YWJfcGF0aCkKQEAgLTI3OSw5ICszMTMsOSBAQAogICAgICAgICAgICAgZnVsbF9wYXRoID0gc2VsZi5fZnVsbF9wYXRoKHNlbGYuX19pbWdkaXIsIGRpc2tfbmFtZSwgImRpcmVjdCIpCiAgICAgICAgICAgICBtc2dlci5kZWJ1ZygiQWRkaW5nIGRpc2sgJXMgYXMgJXMgd2l0aCBzaXplICVzIGJ5dGVzIiBcCiAgICAgICAgICAgICAgICAgICAgICAgICAlIChkaXNrX25hbWUsIGZ1bGxfcGF0aCwgZGlza1snbWluX3NpemUnXSkpCi0gICAgICAgICAgICBkaXNrX29iaiA9IGZzX3JlbGF0ZWQuRGlza0ltYWdlKGZ1bGxfcGF0aCwgZGlza1snbWluX3NpemUnXSkKKyAgICAgICAgICAgIGRpc2tfb2JqID0gRGlza0ltYWdlKGZ1bGxfcGF0aCwgZGlza1snbWluX3NpemUnXSkKICAgICAgICAgICAgIHNlbGYuX19kaXNrc1tkaXNrX25hbWVdID0gZGlza19vYmoKLSAgICAgICAgICAgIHNlbGYuX19pbWFnZS5hZGRfZGlzayhkaXNrX25hbWUsIGRpc2tfb2JqKQorICAgICAgICAgICAgc2VsZi5fX2ltYWdlLmFkZF9kaXNrKGRpc2tfbmFtZSwgZGlza19vYmosIGRpc2tfaWRzLmdldChkaXNrX25hbWUpKQogCiAgICAgICAgIHNlbGYuX19pbWFnZS5jcmVhdGUoKQogCkBAIC0zMTMsMTIgKzM0NywxNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmJvb3RpbWdfZGlyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmtlcm5lbF9kaXIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYubmF0aXZlX3N5c3Jvb3QpCi0gICAgICAgICMgQ29tcHJlc3MgdGhlIGltYWdlCi0gICAgICAgIGlmIHNlbGYuY29tcHJlc3NvcjoKLSAgICAgICAgICAgIGZvciBkaXNrX25hbWUsIGRpc2sgaW4gc2VsZi5fX2ltYWdlLmRpc2tzLml0ZW1zKCk6Ci0gICAgICAgICAgICAgICAgZnVsbF9wYXRoID0gc2VsZi5fZnVsbF9wYXRoKHNlbGYuX19pbWdkaXIsIGRpc2tfbmFtZSwgImRpcmVjdCIpCi0gICAgICAgICAgICAgICAgbXNnZXIuZGVidWcoIkNvbXByZXNzaW5nIGRpc2sgJXMgd2l0aCAlcyIgJSBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgKGRpc2tfbmFtZSwgc2VsZi5jb21wcmVzc29yKSkKKworICAgICAgICBmb3IgZGlza19uYW1lLCBkaXNrIGluIHNlbGYuX19pbWFnZS5kaXNrcy5pdGVtcygpOgorICAgICAgICAgICAgZnVsbF9wYXRoID0gc2VsZi5fZnVsbF9wYXRoKHNlbGYuX19pbWdkaXIsIGRpc2tfbmFtZSwgImRpcmVjdCIpCisgICAgICAgICAgICAjIEdlbmVyYXRlIC5ibWFwCisgICAgICAgICAgICBpZiBzZWxmLmJtYXA6CisgICAgICAgICAgICAgICAgbXNnZXIuZGVidWcoIkdlbmVyYXRpbmcgYm1hcCBmaWxlIGZvciAlcyIgJSBkaXNrX25hbWUpCisgICAgICAgICAgICAgICAgZXhlY19uYXRpdmVfY21kKCJibWFwdG9vbCBjcmVhdGUgJXMgLW8gJXMuYm1hcCIgJSAoZnVsbF9wYXRoLCBmdWxsX3BhdGgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLm5hdGl2ZV9zeXNyb290KQorICAgICAgICAgICAgIyBDb21wcmVzcyB0aGUgaW1hZ2UKKyAgICAgICAgICAgIGlmIHNlbGYuY29tcHJlc3NvcjoKKyAgICAgICAgICAgICAgICBtc2dlci5kZWJ1ZygiQ29tcHJlc3NpbmcgZGlzayAlcyB3aXRoICVzIiAlIChkaXNrX25hbWUsIHNlbGYuY29tcHJlc3NvcikpCiAgICAgICAgICAgICAgICAgZXhlY19jbWQoIiVzICVzIiAlIChzZWxmLmNvbXByZXNzb3IsIGZ1bGxfcGF0aCkpCiAKICAgICBkZWYgcHJpbnRfb3V0aW1hZ2VfaW5mbyhzZWxmKToKQEAgLTM3NSw2ICs0MTQsNiBAQAogICAgICAgICBpZiBub3Qgc2VsZi5fX2ltYWdlIGlzIE5vbmU6CiAgICAgICAgICAgICB0cnk6CiAgICAgICAgICAgICAgICAgc2VsZi5fX2ltYWdlLmNsZWFudXAoKQotICAgICAgICAgICAgZXhjZXB0IEltYWdlRXJyb3IsIGVycjoKKyAgICAgICAgICAgIGV4Y2VwdCBJbWFnZUVycm9yIGFzIGVycjoKICAgICAgICAgICAgICAgICBtc2dlci53YXJuaW5nKCIlcyIgJSBlcnIpCiAKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9zY3JpcHRzL2xpYi93aWMva3NwYXJzZXIucHkgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvd2ljL2tzcGFyc2VyLnB5CmluZGV4IDhjM2Y4MDguLjA4OTRlMmIgMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9zY3JpcHRzL2xpYi93aWMva3NwYXJzZXIucHkKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L3NjcmlwdHMvbGliL3dpYy9rc3BhcnNlci5weQpAQCAtNTEsNyArNTEsNyBAQAogICAgIENvbnZlcnRzIHNpemUgc3RyaW5nIGluIDxudW0+W0t8a3xNfEddIGZvcm1hdCBpbnRvIHRoZSBpbnRlZ2VyIHZhbHVlCiAgICAgIiIiCiAgICAgaWYgYXJnLmlzZGlnaXQoKToKLSAgICAgICAgcmV0dXJuIGludChhcmcpICogMTAyNEwKKyAgICAgICAgcmV0dXJuIGludChhcmcpICogMTAyNAogCiAgICAgaWYgbm90IGFyZ1s6LTFdLmlzZGlnaXQoKToKICAgICAgICAgcmFpc2UgQXJndW1lbnRUeXBlRXJyb3IoIkludmFsaWQgc2l6ZTogJXIiICUgYXJnKQpAQCAtNjAsOSArNjAsOSBAQAogICAgIGlmIGFyZy5lbmRzd2l0aCgiayIpIG9yIGFyZy5lbmRzd2l0aCgiSyIpOgogICAgICAgICByZXR1cm4gc2l6ZQogICAgIGlmIGFyZy5lbmRzd2l0aCgiTSIpOgotICAgICAgICByZXR1cm4gc2l6ZSAqIDEwMjRMCisgICAgICAgIHJldHVybiBzaXplICogMTAyNAogICAgIGlmIGFyZy5lbmRzd2l0aCgiRyIpOgotICAgICAgICByZXR1cm4gc2l6ZSAqIDEwMjRMICogMTAyNEwKKyAgICAgICAgcmV0dXJuIHNpemUgKiAxMDI0ICogMTAyNAogCiAgICAgcmFpc2UgQXJndW1lbnRUeXBlRXJyb3IoIkludmFsaWQgc2l6ZTogJXIiICUgYXJnKQogCkBAIC05Miw3ICs5MiwyNSBAQAogICAgICAgICByYWlzZSBBcmd1bWVudFR5cGVFcnJvcigiZmlsZSBub3QgZm91bmQ6ICVzIiAlIGFyZykKICAgICByZXR1cm4gcmVzdWx0CiAKLWNsYXNzIEtpY2tTdGFydChvYmplY3QpOgorZGVmIHN5c3RlbWlkdHlwZShhcmcpOgorICAgICIiIgorICAgIEN1c3RvbSB0eXBlIGZvciBBcmd1bWVudFBhcnNlcgorICAgIENoZWNrcyBpZiB0aGUgYXJndW1lbnQgc3V0aXNmaWVzIHN5c3RlbSBpZCByZXF1aXJlbWVudHMsCisgICAgaS5lLiBpZiBpdCdzIG9uZSBieXRlIGxvbmcgaW50ZWdlciA+IDAKKyAgICAiIiIKKyAgICBlcnJvciA9ICJJbnZhbGlkIHN5c3RlbSB0eXBlOiAlcy4gbXVzdCBiZSBoZXggIlwKKyAgICAgICAgICAgICJiZXR3ZWVuIDB4MSBhbmQgMHhGRiIgJSBhcmcKKyAgICB0cnk6CisgICAgICAgIHJlc3VsdCA9IGludChhcmcsIDE2KQorICAgIGV4Y2VwdCBWYWx1ZUVycm9yOgorICAgICAgICByYWlzZSBBcmd1bWVudFR5cGVFcnJvcihlcnJvcikKKworICAgIGlmIHJlc3VsdCA8PSAwIG9yIHJlc3VsdCA+IDB4ZmY6CisgICAgICAgIHJhaXNlIEFyZ3VtZW50VHlwZUVycm9yKGVycm9yKQorCisgICAgcmV0dXJuIGFyZworCitjbGFzcyBLaWNrU3RhcnQoKToKICAgICAiIiIiS2lja3N0YXJ0IHBhcnNlciBpbXBsZW1lbnRhdGlvbi4iIiIKIAogICAgIGRlZiBfX2luaXRfXyhzZWxmLCBjb25mcGF0aCk6CkBAIC0xMDYsMTAgKzEyNCwxMCBAQAogICAgICAgICBzdWJwYXJzZXJzID0gcGFyc2VyLmFkZF9zdWJwYXJzZXJzKCkKIAogICAgICAgICBwYXJ0ID0gc3VicGFyc2Vycy5hZGRfcGFyc2VyKCdwYXJ0JykKLSAgICAgICAgcGFydC5hZGRfYXJndW1lbnQoJ21vdW50cG9pbnQnKQorICAgICAgICBwYXJ0LmFkZF9hcmd1bWVudCgnbW91bnRwb2ludCcsIG5hcmdzPSc/JykKICAgICAgICAgcGFydC5hZGRfYXJndW1lbnQoJy0tYWN0aXZlJywgYWN0aW9uPSdzdG9yZV90cnVlJykKICAgICAgICAgcGFydC5hZGRfYXJndW1lbnQoJy0tYWxpZ24nLCB0eXBlPWludCkKLSAgICAgICAgcGFydC5hZGRfYXJndW1lbnQoIi0tZXh0cmEtc3BhY2UiLCB0eXBlPXNpemV0eXBlLCBkZWZhdWx0PTEwKjEwMjRMKQorICAgICAgICBwYXJ0LmFkZF9hcmd1bWVudCgiLS1leHRyYS1zcGFjZSIsIHR5cGU9c2l6ZXR5cGUsIGRlZmF1bHQ9MTAqMTAyNCkKICAgICAgICAgcGFydC5hZGRfYXJndW1lbnQoJy0tZnNvcHRpb25zJywgZGVzdD0nZnNvcHRzJykKICAgICAgICAgcGFydC5hZGRfYXJndW1lbnQoJy0tZnN0eXBlJykKICAgICAgICAgcGFydC5hZGRfYXJndW1lbnQoJy0tbGFiZWwnKQpAQCAtMTIxLDYgKzEzOSw3IEBACiAgICAgICAgIHBhcnQuYWRkX2FyZ3VtZW50KCctLXNpemUnLCB0eXBlPXNpemV0eXBlLCBkZWZhdWx0PTApCiAgICAgICAgIHBhcnQuYWRkX2FyZ3VtZW50KCctLXNvdXJjZScpCiAgICAgICAgIHBhcnQuYWRkX2FyZ3VtZW50KCctLXNvdXJjZXBhcmFtcycpCisgICAgICAgIHBhcnQuYWRkX2FyZ3VtZW50KCctLXN5c3RlbS1pZCcsIHR5cGU9c3lzdGVtaWR0eXBlKQogICAgICAgICBwYXJ0LmFkZF9hcmd1bWVudCgnLS11c2UtdXVpZCcsIGFjdGlvbj0nc3RvcmVfdHJ1ZScpCiAgICAgICAgIHBhcnQuYWRkX2FyZ3VtZW50KCctLXV1aWQnKQogCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvd2ljL21zZ2VyLnB5IGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L3NjcmlwdHMvbGliL3dpYy9tc2dlci5weQppbmRleCBiNzM3NTU0Li5mYjgzMzZkIDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvd2ljL21zZ2VyLnB5CisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9zY3JpcHRzL2xpYi93aWMvbXNnZXIucHkKQEAgLTIxLDE4ICsyMSwxNCBAQAogaW1wb3J0IHJlCiBpbXBvcnQgdGltZQogCi1fX0FMTF9fID0gWydzZXRfbW9kZScsCi0gICAgICAgICAgICdnZXRfbG9nbGV2ZWwnLAorX19BTExfXyA9IFsnZ2V0X2xvZ2xldmVsJywKICAgICAgICAgICAgJ3NldF9sb2dsZXZlbCcsCiAgICAgICAgICAgICdzZXRfbG9nZmlsZScsCi0gICAgICAgICAgICdyYXcnLAogICAgICAgICAgICAnZGVidWcnLAogICAgICAgICAgICAndmVyYm9zZScsCiAgICAgICAgICAgICdpbmZvJywKICAgICAgICAgICAgJ3dhcm5pbmcnLAogICAgICAgICAgICAnZXJyb3InLAotICAgICAgICAgICAnYXNrJywKLSAgICAgICAgICAgJ3BhdXNlJywKICAgICAgICAgICBdCiAKICMgQ09MT1JzIGluIEFOU0kKQEAgLTcwLDEwICs2Niw2IEBACiAgICAgICAgICMgc2tpcAogICAgICAgICByZXR1cm4KIAotICAgICMgZW5jb2RlIHJhdyAndW5pY29kZScgc3RyIHRvIHV0ZjggZW5jb2RlZCBzdHIKLSAgICBpZiBtc2cgYW5kIGlzaW5zdGFuY2UobXNnLCB1bmljb2RlKToKLSAgICAgICAgbXNnID0gbXNnLmVuY29kZSgndXRmLTgnLCAnaWdub3JlJykKLQogICAgIGVycm9ybXNnID0gJycKICAgICBpZiBDQVRDSEVSUl9CVUZGSUxFX0ZEID4gMDoKICAgICAgICAgc2l6ZSA9IG9zLmxzZWVrKENBVENIRVJSX0JVRkZJTEVfRkQsIDAsIG9zLlNFRUtfRU5EKQpAQCAtMTIyLDkgKzExNCw2IEBACiAgICAgICAgICAgICAgICAgbmV3bGluZSA9IFRydWUKIAogICAgIGlmIG1zZyBpcyBub3QgTm9uZToKLSAgICAgICAgaWYgaXNpbnN0YW5jZShtc2csIHVuaWNvZGUpOgotICAgICAgICAgICAgbXNnID0gbXNnLmVuY29kZSgndXRmOCcsICdpZ25vcmUnKQotCiAgICAgICAgIHN0cmVhbS53cml0ZSgnJXMlcycgJSAoaGVhZCwgbXNnKSkKICAgICAgICAgaWYgbmV3bGluZToKICAgICAgICAgICAgIHN0cmVhbS53cml0ZSgnXG4nKQpAQCAtMTU5LDcgKzE0OCw3IEBACiAgICAgcmV0dXJuIGhlYWQsIG1zZwogCiBkZWYgZ2V0X2xvZ2xldmVsKCk6Ci0gICAgcmV0dXJuIChrIGZvciBrLCB2IGluIExPR19MRVZFTFMuaXRlbXMoKSBpZiB2ID09IExPR19MRVZFTCkubmV4dCgpCisgICAgcmV0dXJuIG5leHQoKGsgZm9yIGssIHYgaW4gTE9HX0xFVkVMUy5pdGVtcygpIGlmIHYgPT0gTE9HX0xFVkVMKSkKIAogZGVmIHNldF9sb2dsZXZlbChsZXZlbCk6CiAgICAgZ2xvYmFsIExPR19MRVZFTApAQCAtMTgyLDkgKzE3MSw2IEBACiAgICAgaWYgbXNnOgogICAgICAgICBMT0dfQ09OVEVOVCArPSBtc2cKIAotZGVmIHJhdyhtc2c9JycpOgotICAgIF9nZW5lcmFsX3ByaW50KCcnLCBOT19DT0xPUiwgbXNnKQotCiBkZWYgaW5mbyhtc2cpOgogICAgIGhlYWQsIG1zZyA9IF9zcGxpdF9tc2coJ0luZm8nLCBtc2cpCiAgICAgX2dlbmVyYWxfcHJpbnQoaGVhZCwgSU5GT19DT0xPUiwgbXNnKQpAQCAtMjA2LDY2ICsxOTIsNiBAQAogICAgIF9jb2xvcl9wZXJyb3IoaGVhZCwgRVJSX0NPTE9SLCBtc2cpCiAgICAgc3lzLmV4aXQoMSkKIAotZGVmIGFzayhtc2csIGRlZmF1bHQ9VHJ1ZSk6Ci0gICAgX2dlbmVyYWxfcHJpbnQoJ1xyUScsIEFTS19DT0xPUiwgJycpCi0gICAgdHJ5OgotICAgICAgICBpZiBkZWZhdWx0OgotICAgICAgICAgICAgbXNnICs9ICcoWS9uKSAnCi0gICAgICAgIGVsc2U6Ci0gICAgICAgICAgICBtc2cgKz0gJyh5L04pICcKLSAgICAgICAgaWYgSU5URVJBQ1RJVkU6Ci0gICAgICAgICAgICB3aGlsZSBUcnVlOgotICAgICAgICAgICAgICAgIHJlcGwgPSByYXdfaW5wdXQobXNnKQotICAgICAgICAgICAgICAgIGlmIHJlcGwubG93ZXIoKSA9PSAneSc6Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBUcnVlCi0gICAgICAgICAgICAgICAgZWxpZiByZXBsLmxvd2VyKCkgPT0gJ24nOgotICAgICAgICAgICAgICAgICAgICByZXR1cm4gRmFsc2UKLSAgICAgICAgICAgICAgICBlbGlmIG5vdCByZXBsLnN0cmlwKCk6Ci0gICAgICAgICAgICAgICAgICAgICMgPEVudGVyPgotICAgICAgICAgICAgICAgICAgICByZXR1cm4gZGVmYXVsdAotCi0gICAgICAgICAgICAgICAgIyBlbHNlIGxvb3AKLSAgICAgICAgZWxzZToKLSAgICAgICAgICAgIGlmIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAgbXNnICs9ICcgWScKLSAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgbXNnICs9ICcgTicKLSAgICAgICAgICAgIF9nZW5lcmFsX3ByaW50KCcnLCBOT19DT0xPUiwgbXNnKQotCi0gICAgICAgICAgICByZXR1cm4gZGVmYXVsdAotICAgIGV4Y2VwdCBLZXlib2FyZEludGVycnVwdDoKLSAgICAgICAgc3lzLnN0ZG91dC53cml0ZSgnXG4nKQotICAgICAgICBzeXMuZXhpdCgyKQotCi1kZWYgY2hvaWNlKG1zZywgY2hvaWNlcywgZGVmYXVsdD0wKToKLSAgICBpZiBkZWZhdWx0ID49IGxlbihjaG9pY2VzKToKLSAgICAgICAgcmV0dXJuIE5vbmUKLSAgICBfZ2VuZXJhbF9wcmludCgnXHJRJywgQVNLX0NPTE9SLCAnJykKLSAgICB0cnk6Ci0gICAgICAgIG1zZyArPSAiIFslc10gIiAlICcvJy5qb2luKGNob2ljZXMpCi0gICAgICAgIGlmIElOVEVSQUNUSVZFOgotICAgICAgICAgICAgd2hpbGUgVHJ1ZToKLSAgICAgICAgICAgICAgICByZXBsID0gcmF3X2lucHV0KG1zZykKLSAgICAgICAgICAgICAgICBpZiByZXBsIGluIGNob2ljZXM6Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiByZXBsCi0gICAgICAgICAgICAgICAgZWxpZiBub3QgcmVwbC5zdHJpcCgpOgotICAgICAgICAgICAgICAgICAgICByZXR1cm4gY2hvaWNlc1tkZWZhdWx0XQotICAgICAgICBlbHNlOgotICAgICAgICAgICAgbXNnICs9IGNob2ljZXNbZGVmYXVsdF0KLSAgICAgICAgICAgIF9nZW5lcmFsX3ByaW50KCcnLCBOT19DT0xPUiwgbXNnKQotCi0gICAgICAgICAgICByZXR1cm4gY2hvaWNlc1tkZWZhdWx0XQotICAgIGV4Y2VwdCBLZXlib2FyZEludGVycnVwdDoKLSAgICAgICAgc3lzLnN0ZG91dC53cml0ZSgnXG4nKQotICAgICAgICBzeXMuZXhpdCgyKQotCi1kZWYgcGF1c2UobXNnPU5vbmUpOgotICAgIGlmIElOVEVSQUNUSVZFOgotICAgICAgICBfZ2VuZXJhbF9wcmludCgnXHJRJywgQVNLX0NPTE9SLCAnJykKLSAgICAgICAgaWYgbXNnIGlzIE5vbmU6Ci0gICAgICAgICAgICBtc2cgPSAncHJlc3MgPEVOVEVSPiB0byBjb250aW51ZSAuLi4nCi0gICAgICAgIHJhd19pbnB1dChtc2cpCi0KIGRlZiBzZXRfbG9nZmlsZShmcGF0aCk6CiAgICAgZ2xvYmFsIExPR19GSUxFX0ZQCiAKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9zY3JpcHRzL2xpYi93aWMvcGFydGl0aW9uLnB5IGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L3NjcmlwdHMvbGliL3dpYy9wYXJ0aXRpb24ucHkKaW5kZXggZjQwZDFiYy4uOTBmNjVhMSAxMDA2NDQKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L3NjcmlwdHMvbGliL3dpYy9wYXJ0aXRpb24ucHkKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L3NjcmlwdHMvbGliL3dpYy9wYXJ0aXRpb24ucHkKQEAgLTI2LDcgKzI2LDYgQEAKIAogaW1wb3J0IG9zCiBpbXBvcnQgdGVtcGZpbGUKLWltcG9ydCB1dWlkCiAKIGZyb20gd2ljLnV0aWxzLm9lLm1pc2MgaW1wb3J0IG1zZ2VyLCBwYXJzZV9zb3VyY2VwYXJhbXMKIGZyb20gd2ljLnV0aWxzLm9lLm1pc2MgaW1wb3J0IGV4ZWNfY21kLCBleGVjX25hdGl2ZV9jbWQKQEAgLTM4LDcgKzM3LDcgQEAKICAgICAiZG9fY29uZmlndXJlX3BhcnRpdGlvbiI6Tm9uZSwKIH0KIAotY2xhc3MgUGFydGl0aW9uKG9iamVjdCk6CitjbGFzcyBQYXJ0aXRpb24oKToKIAogICAgIGRlZiBfX2luaXRfXyhzZWxmLCBhcmdzLCBsaW5lbm8pOgogICAgICAgICBzZWxmLmFyZ3MgPSBhcmdzCkBAIC01NywxMCArNTYsOSBAQAogICAgICAgICBzZWxmLnNpemUgPSBhcmdzLnNpemUKICAgICAgICAgc2VsZi5zb3VyY2UgPSBhcmdzLnNvdXJjZQogICAgICAgICBzZWxmLnNvdXJjZXBhcmFtcyA9IGFyZ3Muc291cmNlcGFyYW1zCisgICAgICAgIHNlbGYuc3lzdGVtX2lkID0gYXJncy5zeXN0ZW1faWQKICAgICAgICAgc2VsZi51c2VfdXVpZCA9IGFyZ3MudXNlX3V1aWQKICAgICAgICAgc2VsZi51dWlkID0gYXJncy51dWlkCi0gICAgICAgIGlmIGFyZ3MudXNlX3V1aWQgYW5kIG5vdCBzZWxmLnV1aWQ6Ci0gICAgICAgICAgICBzZWxmLnV1aWQgPSBzdHIodXVpZC51dWlkNCgpKQogCiAgICAgICAgIHNlbGYubGluZW5vID0gbGluZW5vCiAgICAgICAgIHNlbGYuc291cmNlX2ZpbGUgPSAiIgpAQCAtMjE5LDkgKzIxNyw3IEBACiAgICAgICAgIG1zZ2VyLmRlYnVnKCJBZGRlZCAlZCBleHRyYSBibG9ja3MgdG8gJXMgdG8gZ2V0IHRvICVkIHRvdGFsIGJsb2NrcyIgJSBcCiAgICAgICAgICAgICAgICAgICAgIChleHRyYV9ibG9ja3MsIHNlbGYubW91bnRwb2ludCwgcm9vdGZzX3NpemUpKQogCi0gICAgICAgIGRkX2NtZCA9ICJkZCBpZj0vZGV2L3plcm8gb2Y9JXMgYnM9MTAyNCBzZWVrPSVkIGNvdW50PTAgYnM9MWsiICUgXAotICAgICAgICAgICAgKHJvb3Rmcywgcm9vdGZzX3NpemUpCi0gICAgICAgIGV4ZWNfY21kKGRkX2NtZCkKKyAgICAgICAgZXhlY19jbWQoInRydW5jYXRlICVzIC1zICVkIiAlIChyb290ZnMsIHJvb3Rmc19zaXplICogMTAyNCkpCiAKICAgICAgICAgZXh0cmFfaW1hZ2VjbWQgPSAiLWkgODE5MiIKIApAQCAtMjU0LDkgKzI1MCw3IEBACiAgICAgICAgIG1zZ2VyLmRlYnVnKCJBZGRlZCAlZCBleHRyYSBibG9ja3MgdG8gJXMgdG8gZ2V0IHRvICVkIHRvdGFsIGJsb2NrcyIgJSBcCiAgICAgICAgICAgICAgICAgICAgIChleHRyYV9ibG9ja3MsIHNlbGYubW91bnRwb2ludCwgcm9vdGZzX3NpemUpKQogCi0gICAgICAgIGRkX2NtZCA9ICJkZCBpZj0vZGV2L3plcm8gb2Y9JXMgYnM9MTAyNCBzZWVrPSVkIGNvdW50PTAgYnM9MWsiICUgXAotICAgICAgICAgICAgKHJvb3Rmcywgcm9vdGZzX3NpemUpCi0gICAgICAgIGV4ZWNfY21kKGRkX2NtZCkKKyAgICAgICAgZXhlY19jbWQoInRydW5jYXRlICVzIC1zICVkIiAlIChyb290ZnMsIHJvb3Rmc19zaXplICogMTAyNCkpCiAKICAgICAgICAgbGFiZWxfc3RyID0gIiIKICAgICAgICAgaWYgc2VsZi5sYWJlbDoKQEAgLTI4NCwxNCArMjc4LDYgQEAKICAgICAgICAgbXNnZXIuZGVidWcoIkFkZGVkICVkIGV4dHJhIGJsb2NrcyB0byAlcyB0byBnZXQgdG8gJWQgdG90YWwgYmxvY2tzIiAlIFwKICAgICAgICAgICAgICAgICAgICAgKGV4dHJhX2Jsb2Nrcywgc2VsZi5tb3VudHBvaW50LCBibG9ja3MpKQogCi0gICAgICAgICMgRW5zdXJlIHRvdGFsIHNlY3RvcnMgaXMgYW4gaW50ZWdyYWwgbnVtYmVyIG9mIHNlY3RvcnMgcGVyCi0gICAgICAgICMgdHJhY2sgb3IgbWNvcHkgd2lsbCBjb21wbGFpbi4gU2VjdG9ycyBhcmUgNTEyIGJ5dGVzLCBhbmQgd2UKLSAgICAgICAgIyBnZW5lcmF0ZSBpbWFnZXMgd2l0aCAzMiBzZWN0b3JzIHBlciB0cmFjay4gVGhpcyBjYWxjdWxhdGlvbgotICAgICAgICAjIGlzIGRvbmUgaW4gYmxvY2tzLCB0aHVzIHRoZSBtb2QgYnkgMTYgaW5zdGVhZCBvZiAzMi4gQXBwbHkKLSAgICAgICAgIyBzZWN0b3IgY291bnQgZml4IG9ubHkgd2hlbiBuZWVkZWQuCi0gICAgICAgIGlmIGJsb2NrcyAlIDE2ICE9IDA6Ci0gICAgICAgICAgICBibG9ja3MgKz0gKDE2IC0gKGJsb2NrcyAlIDE2KSkKLQogICAgICAgICBsYWJlbF9zdHIgPSAiLW4gYm9vdCIKICAgICAgICAgaWYgc2VsZi5sYWJlbDoKICAgICAgICAgICAgIGxhYmVsX3N0ciA9ICItbiAlcyIgJSBzZWxmLmxhYmVsCkBAIC0zMTksOSArMzA1LDcgQEAKICAgICAgICAgIiIiCiAgICAgICAgIFByZXBhcmUgYW4gZW1wdHkgZXh0Mi8zLzQgcGFydGl0aW9uLgogICAgICAgICAiIiIKLSAgICAgICAgZGRfY21kID0gImRkIGlmPS9kZXYvemVybyBvZj0lcyBicz0xayBzZWVrPSVkIGNvdW50PTAiICUgXAotICAgICAgICAgICAgKHJvb3Rmcywgc2VsZi5zaXplKQotICAgICAgICBleGVjX2NtZChkZF9jbWQpCisgICAgICAgIGV4ZWNfY21kKCJ0cnVuY2F0ZSAlcyAtcyAlZCIgJSAocm9vdGZzLCBzZWxmLnNpemUgKiAxMDI0KSkKIAogICAgICAgICBleHRyYV9pbWFnZWNtZCA9ICItaSA4MTkyIgogCkBAIC0zMzgsOSArMzIyLDcgQEAKICAgICAgICAgIiIiCiAgICAgICAgIFByZXBhcmUgYW4gZW1wdHkgYnRyZnMgcGFydGl0aW9uLgogICAgICAgICAiIiIKLSAgICAgICAgZGRfY21kID0gImRkIGlmPS9kZXYvemVybyBvZj0lcyBicz0xayBzZWVrPSVkIGNvdW50PTAiICUgXAotICAgICAgICAgICAgKHJvb3Rmcywgc2VsZi5zaXplKQotICAgICAgICBleGVjX2NtZChkZF9jbWQpCisgICAgICAgIGV4ZWNfY21kKCJ0cnVuY2F0ZSAlcyAtcyAlZCIgJSAocm9vdGZzLCBzZWxmLnNpemUgKiAxMDI0KSkKIAogICAgICAgICBsYWJlbF9zdHIgPSAiIgogICAgICAgICBpZiBzZWxmLmxhYmVsOgpAQCAtNDAxLDkgKzM4Myw3IEBACiAgICAgICAgICIiIgogICAgICAgICBwYXRoID0gIiVzL2ZzLiVzIiAlIChjcl93b3JrZGlyLCBzZWxmLmZzdHlwZSkKIAotICAgICAgICBkZF9jbWQgPSAiZGQgaWY9L2Rldi96ZXJvIG9mPSVzIGJzPTFrIHNlZWs9JWQgY291bnQ9MCIgJSBcCi0gICAgICAgICAgICAocGF0aCwgc2VsZi5zaXplKQotICAgICAgICBleGVjX2NtZChkZF9jbWQpCisgICAgICAgIGV4ZWNfY21kKCJ0cnVuY2F0ZSAlcyAtcyAlZCIgJSAocGF0aCwgc2VsZi5zaXplICogMTAyNCkpCiAKICAgICAgICAgaW1wb3J0IHV1aWQKICAgICAgICAgbGFiZWxfc3RyID0gIiIKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9zY3JpcHRzL2xpYi93aWMvcGx1Z2luLnB5IGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L3NjcmlwdHMvbGliL3dpYy9wbHVnaW4ucHkKaW5kZXggY2NmZGZjYi4uMzA2YjMyNCAxMDA2NDQKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L3NjcmlwdHMvbGliL3dpYy9wbHVnaW4ucHkKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L3NjcmlwdHMvbGliL3dpYy9wbHVnaW4ucHkKQEAgLTI5LDcgKzI5LDcgQEAKIFBMVUdJTl9ESVIgPSAiL2xpYi93aWMvcGx1Z2lucyIgIyByZWxhdGl2ZSB0byBzY3JpcHRzCiBTQ1JJUFRTX1BMVUdJTl9ESVIgPSAic2NyaXB0cyIgKyBQTFVHSU5fRElSCiAKLWNsYXNzIFBsdWdpbk1ncihvYmplY3QpOgorY2xhc3MgUGx1Z2luTWdyKCk6CiAgICAgcGx1Z2luX2RpcnMgPSB7fQogCiAgICAgIyBtYWtlIHRoZSBtYW5hZ2VyIGNsYXNzIGFzIHNpbmdsZXRvbgpAQCAtNDIsNyArNDIsNyBAQAogCiAgICAgZGVmIF9faW5pdF9fKHNlbGYpOgogICAgICAgICB3aWNfcGF0aCA9IG9zLnBhdGguZGlybmFtZShfX2ZpbGVfXykKLSAgICAgICAgZW9zID0gd2ljX3BhdGguZmluZCgnc2NyaXB0cycpICsgbGVuKCdzY3JpcHRzJykKKyAgICAgICAgZW9zID0gd2ljX3BhdGgucmZpbmQoJ3NjcmlwdHMnKSArIGxlbignc2NyaXB0cycpCiAgICAgICAgIHNjcmlwdHNfcGF0aCA9IHdpY19wYXRoWzplb3NdCiAgICAgICAgIHNlbGYuc2NyaXB0c19wYXRoID0gc2NyaXB0c19wYXRoCiAgICAgICAgIHNlbGYucGx1Z2luX2RpciA9IHNjcmlwdHNfcGF0aCArIFBMVUdJTl9ESVIKQEAgLTgxLDcgKzgxLDcgQEAKICAgICAgICAgICAgICMgdGhlIHZhbHVlIFRydWUvRmFsc2UgbWVhbnMgImxvYWRlZCIKIAogICAgIGRlZiBfbG9hZF9hbGwoc2VsZik6Ci0gICAgICAgIGZvciAocGRpciwgbG9hZGVkKSBpbiBzZWxmLnBsdWdpbl9kaXJzLml0ZXJpdGVtcygpOgorICAgICAgICBmb3IgKHBkaXIsIGxvYWRlZCkgaW4gc2VsZi5wbHVnaW5fZGlycy5pdGVtcygpOgogICAgICAgICAgICAgaWYgbG9hZGVkOgogICAgICAgICAgICAgICAgIGNvbnRpbnVlCiAKQEAgLTk3LDcgKzk3LDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLnBsdWdpbl9kaXJzW3BkaXJdID0gVHJ1ZQogICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1zZ2VyLmRlYnVnKCJQbHVnaW4gbW9kdWxlICVzOiVzIGltcG9ydGVkIlwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAlIChtb2QsIHB5bW9kLl9fZmlsZV9fKSkKLSAgICAgICAgICAgICAgICAgICAgICAgIGV4Y2VwdCBJbXBvcnRFcnJvciwgZXJyOgorICAgICAgICAgICAgICAgICAgICAgICAgZXhjZXB0IEltcG9ydEVycm9yIGFzIGVycjoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtc2cgPSAnRmFpbGVkIHRvIGxvYWQgcGx1Z2luICVzLyVzOiAlcycgXAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAlIChvcy5wYXRoLmJhc2VuYW1lKHBkaXIpLCBtb2QsIGVycikKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtc2dlci53YXJuaW5nKG1zZykKQEAgLTEzNSw5ICsxMzUsOSBAQAogICAgICAgICBOb25lIGlzIHJldHVybmVkLgogICAgICAgICAiIiIKICAgICAgICAgcmV0dXJuX21ldGhvZHMgPSBOb25lCi0gICAgICAgIGZvciBfc291cmNlX25hbWUsIGtsYXNzIGluIHNlbGYuZ2V0X3BsdWdpbnMoJ3NvdXJjZScpLml0ZXJpdGVtcygpOgorICAgICAgICBmb3IgX3NvdXJjZV9uYW1lLCBrbGFzcyBpbiBzZWxmLmdldF9wbHVnaW5zKCdzb3VyY2UnKS5pdGVtcygpOgogICAgICAgICAgICAgaWYgX3NvdXJjZV9uYW1lID09IHNvdXJjZV9uYW1lOgotICAgICAgICAgICAgICAgIGZvciBfbWV0aG9kX25hbWUgaW4gbWV0aG9kcy5rZXlzKCk6CisgICAgICAgICAgICAgICAgZm9yIF9tZXRob2RfbmFtZSBpbiBtZXRob2RzOgogICAgICAgICAgICAgICAgICAgICBpZiBub3QgaGFzYXR0cihrbGFzcywgX21ldGhvZF9uYW1lKToKICAgICAgICAgICAgICAgICAgICAgICAgIG1zZ2VyLndhcm5pbmcoIlVuaW1wbGVtZW50ZWQgJXMgc291cmNlIGludGVyZmFjZSBmb3I6ICVzIlwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJSAoX21ldGhvZF9uYW1lLCBfc291cmNlX25hbWUpKQpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L3NjcmlwdHMvbGliL3dpYy9wbHVnaW5iYXNlLnB5IGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L3NjcmlwdHMvbGliL3dpYy9wbHVnaW5iYXNlLnB5CmluZGV4IGVlOGZlOTUuLmU3MzdkZWUgMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9zY3JpcHRzL2xpYi93aWMvcGx1Z2luYmFzZS5weQorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvd2ljL3BsdWdpbmJhc2UucHkKQEAgLTE1LDM0ICsxNSwyNiBAQAogIyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1OQogIyBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBLgogCitfX2FsbF9fID0gWydJbWFnZXJQbHVnaW4nLCAnU291cmNlUGx1Z2luJywgJ2dldF9wbHVnaW5zJ10KKworaW1wb3J0IHN5cworZnJvbSBjb2xsZWN0aW9ucyBpbXBvcnQgZGVmYXVsdGRpY3QKKwogZnJvbSB3aWMgaW1wb3J0IG1zZ2VyCiAKLWNsYXNzIF9QbHVnaW4ob2JqZWN0KToKLSAgICBjbGFzcyBfX21ldGFjbGFzc19fKHR5cGUpOgotICAgICAgICBkZWYgX19pbml0X18oY2xzLCBuYW1lLCBiYXNlcywgYXR0cnMpOgotICAgICAgICAgICAgaWYgbm90IGhhc2F0dHIoY2xzLCAncGx1Z2lucycpOgotICAgICAgICAgICAgICAgIGNscy5wbHVnaW5zID0ge30KK2NsYXNzIFBsdWdpbk1ldGEodHlwZSk6CisgICAgcGx1Z2lucyA9IGRlZmF1bHRkaWN0KGRpY3QpCisgICAgZGVmIF9fbmV3X18oY2xzLCBuYW1lLCBiYXNlcywgYXR0cnMpOgorICAgICAgICBjbGFzc190eXBlID0gdHlwZS5fX25ld19fKGNscywgbmFtZSwgYmFzZXMsIGF0dHJzKQorICAgICAgICBpZiAnbmFtZScgaW4gYXR0cnM6CisgICAgICAgICAgICBjbHMucGx1Z2luc1tjbGFzc190eXBlLndpY19wbHVnaW5fdHlwZV1bYXR0cnNbJ25hbWUnXV0gPSBjbGFzc190eXBlCiAKLSAgICAgICAgICAgIGVsaWYgJ3dpY19wbHVnaW5fdHlwZScgaW4gYXR0cnM6Ci0gICAgICAgICAgICAgICAgaWYgYXR0cnNbJ3dpY19wbHVnaW5fdHlwZSddIG5vdCBpbiBjbHMucGx1Z2luczoKLSAgICAgICAgICAgICAgICAgICAgY2xzLnBsdWdpbnNbYXR0cnNbJ3dpY19wbHVnaW5fdHlwZSddXSA9IHt9CisgICAgICAgIHJldHVybiBjbGFzc190eXBlCiAKLSAgICAgICAgICAgIGVsaWYgaGFzYXR0cihjbHMsICd3aWNfcGx1Z2luX3R5cGUnKSBhbmQgJ25hbWUnIGluIGF0dHJzOgotICAgICAgICAgICAgICAgIGNscy5wbHVnaW5zW2Nscy53aWNfcGx1Z2luX3R5cGVdW2F0dHJzWyduYW1lJ11dID0gY2xzCi0KLSAgICAgICAgZGVmIHNob3dfcGx1Z2lucyhjbHMpOgotICAgICAgICAgICAgZm9yIGNscyBpbiBjbHMucGx1Z2luc1tjbHMud2ljX3BsdWdpbl90eXBlXToKLSAgICAgICAgICAgICAgICBwcmludCBjbHMKLQotICAgICAgICBkZWYgZ2V0X3BsdWdpbnMoY2xzKToKLSAgICAgICAgICAgIHJldHVybiBjbHMucGx1Z2lucwotCi0KLWNsYXNzIEltYWdlclBsdWdpbihfUGx1Z2luKToKK2NsYXNzIEltYWdlclBsdWdpbihQbHVnaW5NZXRhKCJQbHVnaW4iLCAoKSwge30pKToKICAgICB3aWNfcGx1Z2luX3R5cGUgPSAiaW1hZ2VyIgogCi0KLWNsYXNzIFNvdXJjZVBsdWdpbihfUGx1Z2luKToKK2NsYXNzIFNvdXJjZVBsdWdpbihQbHVnaW5NZXRhKCJQbHVnaW4iLCAoKSwge30pKToKICAgICB3aWNfcGx1Z2luX3R5cGUgPSAic291cmNlIgogICAgICIiIgogICAgIFRoZSBtZXRob2RzIHRoYXQgY2FuIGJlIGltcGxlbWVudGVkIGJ5IC0tc291cmNlIHBsdWdpbnMuCkBAIC05OSwxMCArOTEsNCBAQAogICAgICAgICBtc2dlci5kZWJ1ZygiU291cmNlUGx1Z2luOiBkb19wcmVwYXJlX3BhcnRpdGlvbjogcGFydDogJXMiICUgcGFydCkKIAogZGVmIGdldF9wbHVnaW5zKHR5cGVuKToKLSAgICBwbHVnaW5zID0gSW1hZ2VyUGx1Z2luLmdldF9wbHVnaW5zKCkKLSAgICBpZiB0eXBlbiBpbiBwbHVnaW5zOgotICAgICAgICByZXR1cm4gcGx1Z2luc1t0eXBlbl0KLSAgICBlbHNlOgotICAgICAgICByZXR1cm4gTm9uZQotCi1fX2FsbF9fID0gWydJbWFnZXJQbHVnaW4nLCAnU291cmNlUGx1Z2luJywgJ2dldF9wbHVnaW5zJ10KKyAgICByZXR1cm4gUGx1Z2luTWV0YS5wbHVnaW5zLmdldCh0eXBlbikKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9zY3JpcHRzL2xpYi93aWMvcGx1Z2lucy9pbWFnZXIvZGlyZWN0X3BsdWdpbi5weSBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9zY3JpcHRzL2xpYi93aWMvcGx1Z2lucy9pbWFnZXIvZGlyZWN0X3BsdWdpbi5weQppbmRleCA2ZDNmNDZjLi44ZmUzOTMwIDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvd2ljL3BsdWdpbnMvaW1hZ2VyL2RpcmVjdF9wbHVnaW4ucHkKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L3NjcmlwdHMvbGliL3dpYy9wbHVnaW5zL2ltYWdlci9kaXJlY3RfcGx1Z2luLnB5CkBAIC04Niw3ICs4Niw4IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtlcm5lbF9kaXIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hdGl2ZV9zeXNyb290LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb21wcmVzc29yLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjcmVhdG9yb3B0cykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3JlYXRvcm9wdHMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wdHMuYm1hcCkKIAogICAgICAgICB0cnk6CiAgICAgICAgICAgICBjcmVhdG9yLmNyZWF0ZSgpCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvd2ljL3BsdWdpbnMvc291cmNlL2Jvb3RpbWctZWZpLnB5IGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L3NjcmlwdHMvbGliL3dpYy9wbHVnaW5zL3NvdXJjZS9ib290aW1nLWVmaS5weQppbmRleCBhNDczNGM5Li44YmMzNjIyIDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvd2ljL3BsdWdpbnMvc291cmNlL2Jvb3RpbWctZWZpLnB5CisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9zY3JpcHRzL2xpYi93aWMvcGx1Z2lucy9zb3VyY2UvYm9vdGltZy1lZmkucHkKQEAgLTg0LDcgKzg0LDcgQEAKICAgICBAY2xhc3NtZXRob2QKICAgICBkZWYgZG9fY29uZmlndXJlX2d1bW1pYm9vdChjbHMsIGhkZGRpciwgY3JlYXRvciwgY3Jfd29ya2Rpcik6CiAgICAgICAgICIiIgotICAgICAgICBDcmVhdGUgbG9hZGVyLXNwZWNpZmljIChndW1taWJvb3QpIGNvbmZpZworICAgICAgICBDcmVhdGUgbG9hZGVyLXNwZWNpZmljIHN5c3RlbWQtYm9vdC9ndW1taWJvb3QgY29uZmlnCiAgICAgICAgICIiIgogICAgICAgICBpbnN0YWxsX2NtZCA9ICJpbnN0YWxsIC1kICVzL2xvYWRlciIgJSBoZGRkaXIKICAgICAgICAgZXhlY19jbWQoaW5zdGFsbF9jbWQpCkBAIC0xNDksNyArMTQ5LDggQEAKICAgICAgICAgdHJ5OgogICAgICAgICAgICAgaWYgc291cmNlX3BhcmFtc1snbG9hZGVyJ10gPT0gJ2dydWItZWZpJzoKICAgICAgICAgICAgICAgICBjbHMuZG9fY29uZmlndXJlX2dydWJlZmkoaGRkZGlyLCBjcmVhdG9yLCBjcl93b3JrZGlyKQotICAgICAgICAgICAgZWxpZiBzb3VyY2VfcGFyYW1zWydsb2FkZXInXSA9PSAnZ3VtbWlib290JzoKKyAgICAgICAgICAgIGVsaWYgc291cmNlX3BhcmFtc1snbG9hZGVyJ10gPT0gJ2d1bW1pYm9vdCcgXAorICAgICAgICAgICAgICAgICBvciBzb3VyY2VfcGFyYW1zWydsb2FkZXInXSA9PSAnc3lzdGVtZC1ib290JzoKICAgICAgICAgICAgICAgICBjbHMuZG9fY29uZmlndXJlX2d1bW1pYm9vdChoZGRkaXIsIGNyZWF0b3IsIGNyX3dvcmtkaXIpCiAgICAgICAgICAgICBlbHNlOgogICAgICAgICAgICAgICAgIG1zZ2VyLmVycm9yKCJ1bnJlY29nbml6ZWQgYm9vdGltZy1lZmkgbG9hZGVyOiAlcyIgJSBzb3VyY2VfcGFyYW1zWydsb2FkZXInXSkKQEAgLTE4OSw3ICsxOTAsOCBAQAogICAgICAgICAgICAgICAgIGV4ZWNfY21kKGNwX2NtZCwgVHJ1ZSkKICAgICAgICAgICAgICAgICBzaHV0aWwubW92ZSgiJXMvZ3J1Yi5jZmciICUgY3Jfd29ya2RpciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiJXMvaGRkL2Jvb3QvRUZJL0JPT1QvZ3J1Yi5jZmciICUgY3Jfd29ya2RpcikKLSAgICAgICAgICAgIGVsaWYgc291cmNlX3BhcmFtc1snbG9hZGVyJ10gPT0gJ2d1bW1pYm9vdCc6CisgICAgICAgICAgICBlbGlmIHNvdXJjZV9wYXJhbXNbJ2xvYWRlciddID09ICdndW1taWJvb3QnIFwKKyAgICAgICAgICAgICAgICAgb3Igc291cmNlX3BhcmFtc1snbG9hZGVyJ10gPT0gJ3N5c3RlbWQtYm9vdCc6CiAgICAgICAgICAgICAgICAgY3BfY21kID0gImNwICVzL0VGSS9CT09ULyogJXMvRUZJL0JPT1QiICUgKGJvb3RpbWdfZGlyLCBoZGRkaXIpCiAgICAgICAgICAgICAgICAgZXhlY19jbWQoY3BfY21kLCBUcnVlKQogICAgICAgICAgICAgZWxzZToKQEAgLTE5Nyw2ICsxOTksMTEgQEAKICAgICAgICAgZXhjZXB0IEtleUVycm9yOgogICAgICAgICAgICAgbXNnZXIuZXJyb3IoImJvb3RpbWctZWZpIHJlcXVpcmVzIGEgbG9hZGVyLCBub25lIHNwZWNpZmllZCIpCiAKKyAgICAgICAgc3RhcnR1cCA9IG9zLnBhdGguam9pbihib290aW1nX2RpciwgInN0YXJ0dXAubnNoIikKKyAgICAgICAgaWYgb3MucGF0aC5leGlzdHMoc3RhcnR1cCk6CisgICAgICAgICAgICBjcF9jbWQgPSAiY3AgJXMgJXMvIiAlIChzdGFydHVwLCBoZGRkaXIpCisgICAgICAgICAgICBleGVjX2NtZChjcF9jbWQsIFRydWUpCisKICAgICAgICAgZHVfY21kID0gImR1IC1ia3MgJXMiICUgaGRkZGlyCiAgICAgICAgIG91dCA9IGV4ZWNfY21kKGR1X2NtZCkKICAgICAgICAgYmxvY2tzID0gaW50KG91dC5zcGxpdCgpWzBdKQpAQCAtMjExLDEyICsyMTgsNiBAQAogICAgICAgICBtc2dlci5kZWJ1ZygiQWRkZWQgJWQgZXh0cmEgYmxvY2tzIHRvICVzIHRvIGdldCB0byAlZCB0b3RhbCBibG9ja3MiICUgXAogICAgICAgICAgICAgICAgICAgICAoZXh0cmFfYmxvY2tzLCBwYXJ0Lm1vdW50cG9pbnQsIGJsb2NrcykpCiAKLSAgICAgICAgIyBFbnN1cmUgdG90YWwgc2VjdG9ycyBpcyBhbiBpbnRlZ3JhbCBudW1iZXIgb2Ygc2VjdG9ycyBwZXIKLSAgICAgICAgIyB0cmFjayBvciBtY29weSB3aWxsIGNvbXBsYWluLiBTZWN0b3JzIGFyZSA1MTIgYnl0ZXMsIGFuZCB3ZQotICAgICAgICAjIGdlbmVyYXRlIGltYWdlcyB3aXRoIDMyIHNlY3RvcnMgcGVyIHRyYWNrLiBUaGlzIGNhbGN1bGF0aW9uIGlzCi0gICAgICAgICMgZG9uZSBpbiBibG9ja3MsIHRodXMgdGhlIG1vZCBieSAxNiBpbnN0ZWFkIG9mIDMyLgotICAgICAgICBibG9ja3MgKz0gKDE2IC0gKGJsb2NrcyAlIDE2KSkKLQogICAgICAgICAjIGRvc2ZzIGltYWdlLCBjcmVhdGVkIGJ5IG1rZG9zZnMKICAgICAgICAgYm9vdGltZyA9ICIlcy9ib290LmltZyIgJSBjcl93b3JrZGlyCiAKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9zY3JpcHRzL2xpYi93aWMvcGx1Z2lucy9zb3VyY2UvYm9vdGltZy1wY2Jpb3MucHkgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvd2ljL3BsdWdpbnMvc291cmNlL2Jvb3RpbWctcGNiaW9zLnB5CmluZGV4IDViNzE5YmYuLmYyMDRkYWEgMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9zY3JpcHRzL2xpYi93aWMvcGx1Z2lucy9zb3VyY2UvYm9vdGltZy1wY2Jpb3MucHkKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L3NjcmlwdHMvbGliL3dpYy9wbHVnaW5zL3NvdXJjZS9ib290aW1nLXBjYmlvcy5weQpAQCAtMTc5LDEyICsxNzksNiBAQAogICAgICAgICBtc2dlci5kZWJ1ZygiQWRkZWQgJWQgZXh0cmEgYmxvY2tzIHRvICVzIHRvIGdldCB0byAlZCB0b3RhbCBibG9ja3MiICUgXAogICAgICAgICAgICAgICAgICAgICAoZXh0cmFfYmxvY2tzLCBwYXJ0Lm1vdW50cG9pbnQsIGJsb2NrcykpCiAKLSAgICAgICAgIyBFbnN1cmUgdG90YWwgc2VjdG9ycyBpcyBhbiBpbnRlZ3JhbCBudW1iZXIgb2Ygc2VjdG9ycyBwZXIKLSAgICAgICAgIyB0cmFjayBvciBtY29weSB3aWxsIGNvbXBsYWluLiBTZWN0b3JzIGFyZSA1MTIgYnl0ZXMsIGFuZCB3ZQotICAgICAgICAjIGdlbmVyYXRlIGltYWdlcyB3aXRoIDMyIHNlY3RvcnMgcGVyIHRyYWNrLiBUaGlzIGNhbGN1bGF0aW9uIGlzCi0gICAgICAgICMgZG9uZSBpbiBibG9ja3MsIHRodXMgdGhlIG1vZCBieSAxNiBpbnN0ZWFkIG9mIDMyLgotICAgICAgICBibG9ja3MgKz0gKDE2IC0gKGJsb2NrcyAlIDE2KSkKLQogICAgICAgICAjIGRvc2ZzIGltYWdlLCBjcmVhdGVkIGJ5IG1rZG9zZnMKICAgICAgICAgYm9vdGltZyA9ICIlcy9ib290LmltZyIgJSBjcl93b3JrZGlyCiAKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9zY3JpcHRzL2xpYi93aWMvcGx1Z2lucy9zb3VyY2UvaXNvaW1hZ2UtaXNvaHlicmlkLnB5IGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L3NjcmlwdHMvbGliL3dpYy9wbHVnaW5zL3NvdXJjZS9pc29pbWFnZS1pc29oeWJyaWQucHkKaW5kZXggYmM5OTI4My4uMzg1OGZkNCAxMDA2NDQKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L3NjcmlwdHMvbGliL3dpYy9wbHVnaW5zL3NvdXJjZS9pc29pbWFnZS1pc29oeWJyaWQucHkKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L3NjcmlwdHMvbGliL3dpYy9wbHVnaW5zL3NvdXJjZS9pc29pbWFnZS1pc29oeWJyaWQucHkKQEAgLTI3LDYgKzI3LDcgQEAKIAogZnJvbSB3aWMgaW1wb3J0IG1zZ2VyCiBmcm9tIHdpYy5wbHVnaW5iYXNlIGltcG9ydCBTb3VyY2VQbHVnaW4KK2Zyb20gd2ljLnV0aWxzLm1pc2MgaW1wb3J0IGdldF9jdXN0b21fY29uZmlnCiBmcm9tIHdpYy51dGlscy5vZS5taXNjIGltcG9ydCBleGVjX2NtZCwgZXhlY19uYXRpdmVfY21kLCBnZXRfYml0YmFrZV92YXIKIAogY2xhc3MgSXNvSW1hZ2VQbHVnaW4oU291cmNlUGx1Z2luKToKQEAgLTU5LDcgKzYwLDcgQEAKICAgICAgICAgIiIiCiAgICAgICAgIENyZWF0ZSBsb2FkZXItc3BlY2lmaWMgKHN5c2xpbnV4KSBjb25maWcKICAgICAgICAgIiIiCi0gICAgICAgIHNwbGFzaCA9IG9zLnBhdGguam9pbihjcl93b3JrZGlyLCAiL0lTTy9ib290L3NwbGFzaC5qcGciKQorICAgICAgICBzcGxhc2ggPSBvcy5wYXRoLmpvaW4oY3Jfd29ya2RpciwgIklTTy9ib290L3NwbGFzaC5qcGciKQogICAgICAgICBpZiBvcy5wYXRoLmV4aXN0cyhzcGxhc2gpOgogICAgICAgICAgICAgc3BsYXNobGluZSA9ICJtZW51IGJhY2tncm91bmQgc3BsYXNoLmpwZyIKICAgICAgICAgZWxzZToKQEAgLTk0LDMzICs5NSw0MyBAQAogICAgICAgICAiIiIKICAgICAgICAgQ3JlYXRlIGxvYWRlci1zcGVjaWZpYyAoZ3J1Yi1lZmkpIGNvbmZpZwogICAgICAgICAiIiIKLSAgICAgICAgc3BsYXNoID0gb3MucGF0aC5qb2luKGNyX3dvcmtkaXIsICIvRUZJL2Jvb3Qvc3BsYXNoLmpwZyIpCi0gICAgICAgIGlmIG9zLnBhdGguZXhpc3RzKHNwbGFzaCk6Ci0gICAgICAgICAgICBzcGxhc2hsaW5lID0gIm1lbnUgYmFja2dyb3VuZCBzcGxhc2guanBnIgorICAgICAgICBjb25maWdmaWxlID0gY3JlYXRvci5rcy5ib290bG9hZGVyLmNvbmZpZ2ZpbGUKKyAgICAgICAgaWYgY29uZmlnZmlsZToKKyAgICAgICAgICAgIGdydWJlZmlfY29uZiA9IGdldF9jdXN0b21fY29uZmlnKGNvbmZpZ2ZpbGUpCisgICAgICAgICAgICBpZiBncnViZWZpX2NvbmY6CisgICAgICAgICAgICAgICAgbXNnZXIuZGVidWcoIlVzaW5nIGN1c3RvbSBjb25maWd1cmF0aW9uIGZpbGUgIgorICAgICAgICAgICAgICAgICAgICAgICAgIiVzIGZvciBncnViLmNmZyIgJSBjb25maWdmaWxlKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBtc2dlci5lcnJvcigiY29uZmlnZmlsZSBpcyBzcGVjaWZpZWQgYnV0IGZhaWxlZCB0byAiCisgICAgICAgICAgICAgICAgICAgICAgICAiZ2V0IGl0IGZyb20gJXMuIiAlIGNvbmZpZ2ZpbGUpCiAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICBzcGxhc2hsaW5lID0gIiIKKyAgICAgICAgICAgIHNwbGFzaCA9IG9zLnBhdGguam9pbihjcl93b3JrZGlyLCAiRUZJL2Jvb3Qvc3BsYXNoLmpwZyIpCisgICAgICAgICAgICBpZiBvcy5wYXRoLmV4aXN0cyhzcGxhc2gpOgorICAgICAgICAgICAgICAgIHNwbGFzaGxpbmUgPSAibWVudSBiYWNrZ3JvdW5kIHNwbGFzaC5qcGciCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHNwbGFzaGxpbmUgPSAiIgogCi0gICAgICAgIGJvb3Rsb2FkZXIgPSBjcmVhdG9yLmtzLmJvb3Rsb2FkZXIKKyAgICAgICAgICAgIGJvb3Rsb2FkZXIgPSBjcmVhdG9yLmtzLmJvb3Rsb2FkZXIKIAotICAgICAgICBncnViZWZpX2NvbmYgPSAiIgotICAgICAgICBncnViZWZpX2NvbmYgKz0gInNlcmlhbCAtLXVuaXQ9MCAtLXNwZWVkPTExNTIwMCAtLXdvcmQ9OCAiCi0gICAgICAgIGdydWJlZmlfY29uZiArPSAiLS1wYXJpdHk9bm8gLS1zdG9wPTFcbiIKLSAgICAgICAgZ3J1YmVmaV9jb25mICs9ICJkZWZhdWx0PWJvb3RcbiIKLSAgICAgICAgZ3J1YmVmaV9jb25mICs9ICJ0aW1lb3V0PSVzXG4iICUgKGJvb3Rsb2FkZXIudGltZW91dCBvciAxMCkKLSAgICAgICAgZ3J1YmVmaV9jb25mICs9ICJcbiIKLSAgICAgICAgZ3J1YmVmaV9jb25mICs9ICJzZWFyY2ggLS1zZXQ9cm9vdCAtLWxhYmVsICVzICIgJSBwYXJ0LmxhYmVsCi0gICAgICAgIGdydWJlZmlfY29uZiArPSAiXG4iCi0gICAgICAgIGdydWJlZmlfY29uZiArPSAibWVudWVudHJ5ICdib290J3tcbiIKKyAgICAgICAgICAgIGdydWJlZmlfY29uZiA9ICIiCisgICAgICAgICAgICBncnViZWZpX2NvbmYgKz0gInNlcmlhbCAtLXVuaXQ9MCAtLXNwZWVkPTExNTIwMCAtLXdvcmQ9OCAiCisgICAgICAgICAgICBncnViZWZpX2NvbmYgKz0gIi0tcGFyaXR5PW5vIC0tc3RvcD0xXG4iCisgICAgICAgICAgICBncnViZWZpX2NvbmYgKz0gImRlZmF1bHQ9Ym9vdFxuIgorICAgICAgICAgICAgZ3J1YmVmaV9jb25mICs9ICJ0aW1lb3V0PSVzXG4iICUgKGJvb3Rsb2FkZXIudGltZW91dCBvciAxMCkKKyAgICAgICAgICAgIGdydWJlZmlfY29uZiArPSAiXG4iCisgICAgICAgICAgICBncnViZWZpX2NvbmYgKz0gInNlYXJjaCAtLXNldD1yb290IC0tbGFiZWwgJXMgIiAlIHBhcnQubGFiZWwKKyAgICAgICAgICAgIGdydWJlZmlfY29uZiArPSAiXG4iCisgICAgICAgICAgICBncnViZWZpX2NvbmYgKz0gIm1lbnVlbnRyeSAnYm9vdCd7XG4iCiAKLSAgICAgICAga2VybmVsID0gIi9iekltYWdlIgorICAgICAgICAgICAga2VybmVsID0gIi9iekltYWdlIgogCi0gICAgICAgIGdydWJlZmlfY29uZiArPSAibGludXggJXMgcm9vdHdhaXQgJXNcbiIgXAotICAgICAgICAgICAgJSAoa2VybmVsLCBib290bG9hZGVyLmFwcGVuZCkKLSAgICAgICAgZ3J1YmVmaV9jb25mICs9ICJpbml0cmQgL2luaXRyZCBcbiIKLSAgICAgICAgZ3J1YmVmaV9jb25mICs9ICJ9XG4iCisgICAgICAgICAgICBncnViZWZpX2NvbmYgKz0gImxpbnV4ICVzIHJvb3R3YWl0ICVzXG4iIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAlIChrZXJuZWwsIGJvb3Rsb2FkZXIuYXBwZW5kKQorICAgICAgICAgICAgZ3J1YmVmaV9jb25mICs9ICJpbml0cmQgL2luaXRyZCBcbiIKKyAgICAgICAgICAgIGdydWJlZmlfY29uZiArPSAifVxuIgogCi0gICAgICAgIGlmIHNwbGFzaGxpbmU6Ci0gICAgICAgICAgICBncnViZWZpX2NvbmYgKz0gIiVzXG4iICUgc3BsYXNobGluZQorICAgICAgICAgICAgaWYgc3BsYXNobGluZToKKyAgICAgICAgICAgICAgICBncnViZWZpX2NvbmYgKz0gIiVzXG4iICUgc3BsYXNobGluZQogCiAgICAgICAgIG1zZ2VyLmRlYnVnKCJXcml0aW5nIGdydWJlZmkgY29uZmlnICVzL0VGSS9CT09UL2dydWIuY2ZnIiBcCiAgICAgICAgICAgICAgICAgICAgICAgICAlIGNyX3dvcmtkaXIpCkBAIC00MzAsMTIgKzQ0MSw2IEBACiAgICAgICAgICAgICAgICAgICAgICUgKHBhcnQubW91bnRwb2ludCwgYmxvY2tzKQogICAgICAgICAgICAgbXNnZXIuZGVidWcobXNnKQogCi0gICAgICAgICAgICAjIEVuc3VyZSB0b3RhbCBzZWN0b3JzIGlzIGFuIGludGVncmFsIG51bWJlciBvZiBzZWN0b3JzIHBlcgotICAgICAgICAgICAgIyB0cmFjayBvciBtY29weSB3aWxsIGNvbXBsYWluLiBTZWN0b3JzIGFyZSA1MTIgYnl0ZXMsIGFuZCB3ZQotICAgICAgICAgICAgIyBnZW5lcmF0ZSBpbWFnZXMgd2l0aCAzMiBzZWN0b3JzIHBlciB0cmFjay4gVGhpcyBjYWxjdWxhdGlvbiBpcwotICAgICAgICAgICAgIyBkb25lIGluIGJsb2NrcywgdGh1cyB0aGUgbW9kIGJ5IDE2IGluc3RlYWQgb2YgMzIuCi0gICAgICAgICAgICBibG9ja3MgKz0gKDE2IC0gKGJsb2NrcyAlIDE2KSkKLQogICAgICAgICAgICAgIyBkb3NmcyBpbWFnZSBmb3IgRUZJIGJvb3QKICAgICAgICAgICAgIGJvb3RpbWcgPSAiJXMvZWZpLmltZyIgJSBpc29kaXIKIApkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L3NjcmlwdHMvbGliL3dpYy9wbHVnaW5zL3NvdXJjZS9yYXdjb3B5LnB5IGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L3NjcmlwdHMvbGliL3dpYy9wbHVnaW5zL3NvdXJjZS9yYXdjb3B5LnB5CmluZGV4IDA0NzJmNTMuLmUwYjExZjkgMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9zY3JpcHRzL2xpYi93aWMvcGx1Z2lucy9zb3VyY2UvcmF3Y29weS5weQorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvd2ljL3BsdWdpbnMvc291cmNlL3Jhd2NvcHkucHkKQEAgLTIwLDYgKzIwLDcgQEAKIGZyb20gd2ljIGltcG9ydCBtc2dlcgogZnJvbSB3aWMucGx1Z2luYmFzZSBpbXBvcnQgU291cmNlUGx1Z2luCiBmcm9tIHdpYy51dGlscy5vZS5taXNjIGltcG9ydCBleGVjX2NtZCwgZ2V0X2JpdGJha2VfdmFyCitmcm9tIHdpYy5maWxlbWFwIGltcG9ydCBzcGFyc2VfY29weQogCiBjbGFzcyBSYXdDb3B5UGx1Z2luKFNvdXJjZVBsdWdpbik6CiAgICAgIiIiCkBAIC02NywxNCArNjgsMTIgQEAKICAgICAgICAgICAgIHJldHVybgogCiAgICAgICAgIHNyYyA9IG9zLnBhdGguam9pbihib290aW1nX2Rpciwgc291cmNlX3BhcmFtc1snZmlsZSddKQotICAgICAgICBkc3QgPSBvcy5wYXRoLmpvaW4oY3Jfd29ya2Rpciwgc291cmNlX3BhcmFtc1snZmlsZSddKQorICAgICAgICBkc3QgPSBvcy5wYXRoLmpvaW4oY3Jfd29ya2RpciwgIiVzLiVzIiAlIChzb3VyY2VfcGFyYW1zWydmaWxlJ10sIHBhcnQubGluZW5vKSkKIAogICAgICAgICBpZiAnc2tpcCcgaW4gc291cmNlX3BhcmFtczoKLSAgICAgICAgICAgIGRkX2NtZCA9ICJkZCBpZj0lcyBvZj0lcyBpYnM9JXMgc2tpcD0xIGNvbnY9bm90cnVuYyIgJSBcCi0gICAgICAgICAgICAgICAgICAgIChzcmMsIGRzdCwgc291cmNlX3BhcmFtc1snc2tpcCddKQorICAgICAgICAgICAgc3BhcnNlX2NvcHkoc3JjLCBkc3QsIHNraXA9c291cmNlX3BhcmFtc1snc2tpcCddKQogICAgICAgICBlbHNlOgotICAgICAgICAgICAgZGRfY21kID0gImNwICVzICVzIiAlIChzcmMsIGRzdCkKLSAgICAgICAgZXhlY19jbWQoZGRfY21kKQorICAgICAgICAgICAgc3BhcnNlX2NvcHkoc3JjLCBkc3QpCiAKICAgICAgICAgIyBnZXQgdGhlIHNpemUgaW4gdGhlIHJpZ2h0IHVuaXRzIGZvciBraWNrc3RhcnQgKGtCKQogICAgICAgICBkdV9jbWQgPSAiZHUgLUxia3MgJXMiICUgZHN0CmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvd2ljL3V0aWxzL2ZzX3JlbGF0ZWQucHkgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvd2ljL3V0aWxzL2ZzX3JlbGF0ZWQucHkKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDJlNzQ0NjEuLjAwMDAwMDAKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L3NjcmlwdHMvbGliL3dpYy91dGlscy9mc19yZWxhdGVkLnB5CisrKyAvZGV2L251bGwKQEAgLTEsODQgKzAsMCBAQAotIyEvdXNyL2Jpbi9lbnYgcHl0aG9uIC10dAotIwotIyBDb3B5cmlnaHQgKGMpIDIwMDcsIFJlZCBIYXQsIEluYy4KLSMgQ29weXJpZ2h0IChjKSAyMDA5LCAyMDEwLCAyMDExIEludGVsLCBJbmMuCi0jCi0jIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0Ci0jIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlCi0jIFNvZnR3YXJlIEZvdW5kYXRpb247IHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZQotIwotIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0Ci0jIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZCi0jIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotIyBmb3IgbW9yZSBkZXRhaWxzLgotIwotIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZwotIyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1OQotIyBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBLgotCi1mcm9tIF9fZnV0dXJlX18gaW1wb3J0IHdpdGhfc3RhdGVtZW50Ci1pbXBvcnQgb3MKLWltcG9ydCBlcnJubwotCi1mcm9tIHdpYy51dGlscy5vZS5taXNjIGltcG9ydCBleGVjX2NtZAotCi1kZWYgbWFrZWRpcnMoZGlybmFtZSk6Ci0gICAgIiIiQSB2ZXJzaW9uIG9mIG9zLm1ha2VkaXJzKCkgdGhhdCBkb2Vzbid0IHRocm93IGFuCi0gICAgZXhjZXB0aW9uIGlmIHRoZSBsZWFmIGRpcmVjdG9yeSBhbHJlYWR5IGV4aXN0cy4KLSAgICAiIiIKLSAgICB0cnk6Ci0gICAgICAgIG9zLm1ha2VkaXJzKGRpcm5hbWUpCi0gICAgZXhjZXB0IE9TRXJyb3IsIGVycjoKLSAgICAgICAgaWYgZXJyLmVycm5vICE9IGVycm5vLkVFWElTVDoKLSAgICAgICAgICAgIHJhaXNlCi0KLWNsYXNzIERpc2s6Ci0gICAgIiIiCi0gICAgR2VuZXJpYyBiYXNlIG9iamVjdCBmb3IgYSBkaXNrLgotICAgICIiIgotICAgIGRlZiBfX2luaXRfXyhzZWxmLCBzaXplLCBkZXZpY2U9Tm9uZSk6Ci0gICAgICAgIHNlbGYuX2RldmljZSA9IGRldmljZQotICAgICAgICBzZWxmLl9zaXplID0gc2l6ZQotCi0gICAgZGVmIGNyZWF0ZShzZWxmKToKLSAgICAgICAgcGFzcwotCi0gICAgZGVmIGNsZWFudXAoc2VsZik6Ci0gICAgICAgIHBhc3MKLQotICAgIGRlZiBnZXRfZGV2aWNlKHNlbGYpOgotICAgICAgICByZXR1cm4gc2VsZi5fZGV2aWNlCi0gICAgZGVmIHNldF9kZXZpY2Uoc2VsZiwgcGF0aCk6Ci0gICAgICAgIHNlbGYuX2RldmljZSA9IHBhdGgKLSAgICBkZXZpY2UgPSBwcm9wZXJ0eShnZXRfZGV2aWNlLCBzZXRfZGV2aWNlKQotCi0gICAgZGVmIGdldF9zaXplKHNlbGYpOgotICAgICAgICByZXR1cm4gc2VsZi5fc2l6ZQotICAgIHNpemUgPSBwcm9wZXJ0eShnZXRfc2l6ZSkKLQotCi1jbGFzcyBEaXNrSW1hZ2UoRGlzayk6Ci0gICAgIiIiCi0gICAgQSBEaXNrIGJhY2tlZCBieSBhIGZpbGUuCi0gICAgIiIiCi0gICAgZGVmIF9faW5pdF9fKHNlbGYsIGltYWdlX2ZpbGUsIHNpemUpOgotICAgICAgICBEaXNrLl9faW5pdF9fKHNlbGYsIHNpemUpCi0gICAgICAgIHNlbGYuaW1hZ2VfZmlsZSA9IGltYWdlX2ZpbGUKLQotICAgIGRlZiBleGlzdHMoc2VsZik6Ci0gICAgICAgIHJldHVybiBvcy5wYXRoLmV4aXN0cyhzZWxmLmltYWdlX2ZpbGUpCi0KLSAgICBkZWYgY3JlYXRlKHNlbGYpOgotICAgICAgICBpZiBzZWxmLmRldmljZSBpcyBub3QgTm9uZToKLSAgICAgICAgICAgIHJldHVybgotCi0gICAgICAgIGJsb2NrcyA9IHNlbGYuc2l6ZSAvIDEwMjQKLSAgICAgICAgaWYgc2VsZi5zaXplIC0gYmxvY2tzICogMTAyNDoKLSAgICAgICAgICAgIGJsb2NrcyArPSAxCi0KLSAgICAgICAgIyBjcmVhdGUgZGlzayBpbWFnZQotICAgICAgICBkZF9jbWQgPSAiZGQgaWY9L2Rldi96ZXJvIG9mPSVzIGJzPTEwMjQgc2Vlaz0lZCBjb3VudD0xIiAlIFwKLSAgICAgICAgICAgIChzZWxmLmltYWdlX2ZpbGUsIGJsb2NrcykKLSAgICAgICAgZXhlY19jbWQoZGRfY21kKQotCi0gICAgICAgIHNlbGYuZGV2aWNlID0gc2VsZi5pbWFnZV9maWxlCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvd2ljL3V0aWxzL29lL21pc2MucHkgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvd2ljL3V0aWxzL29lL21pc2MucHkKaW5kZXggODEyMzlhYy4uZmUxODhjOSAxMDA2NDQKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L3NjcmlwdHMvbGliL3dpYy91dGlscy9vZS9taXNjLnB5CisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9zY3JpcHRzL2xpYi93aWMvdXRpbHMvb2UvbWlzYy5weQpAQCAtMjgsMTIgKzI4LDE0IEBACiAKIGltcG9ydCBvcwogZnJvbSBjb2xsZWN0aW9ucyBpbXBvcnQgZGVmYXVsdGRpY3QKK2Zyb20gZGlzdHV0aWxzIGltcG9ydCBzcGF3bgogCiBmcm9tIHdpYyBpbXBvcnQgbXNnZXIKIGZyb20gd2ljLnV0aWxzIGltcG9ydCBydW5uZXIKIAogIyBleGVjdXRhYmxlIC0+IHJlY2lwZSBwYWlycyBmb3IgZXhlY19uYXRpdmVfY21kCi1OQVRJVkVfUkVDSVBFUyA9IHsibWNvcHkiOiAibXRvb2xzIiwKK05BVElWRV9SRUNJUEVTID0geyJibWFwdG9vbCI6ICJibWFwLXRvb2xzIiwKKyAgICAgICAgICAgICAgICAgICJtY29weSI6ICJtdG9vbHMiLAogICAgICAgICAgICAgICAgICAgIm1rZG9zZnMiOiAiZG9zZnN0b29scyIsCiAgICAgICAgICAgICAgICAgICAibWtmcy5idHJmcyI6ICJidHJmcy10b29scyIsCiAgICAgICAgICAgICAgICAgICAibWtmcy5leHQyIjogImUyZnNwcm9ncyIsCkBAIC00Myw2ICs0NSw3IEBACiAgICAgICAgICAgICAgICAgICAibWtzcXVhc2hmcyI6ICJzcXVhc2hmcy10b29scyIsCiAgICAgICAgICAgICAgICAgICAibWtzd2FwIjogInV0aWwtbGludXgiLAogICAgICAgICAgICAgICAgICAgInBhcnRlZCI6ICJwYXJ0ZWQiLAorICAgICAgICAgICAgICAgICAgInNmZGlzayI6ICJ1dGlsLWxpbnV4IiwKICAgICAgICAgICAgICAgICAgICJzZ2Rpc2siOiAiZ3B0ZmRpc2siLAogICAgICAgICAgICAgICAgICAgInN5c2xpbnV4IjogInN5c2xpbnV4IgogICAgICAgICAgICAgICAgICB9CkBAIC04MiwxMyArODUsNiBAQAogCiAgICAgcmV0dXJuIG91dAogCi1kZWYgY21kX2luX3BhdGgoY21kLCBwYXRoKToKLSAgICBpbXBvcnQgc2NyaXB0cGF0aAotCi0gICAgc2NyaXB0cGF0aC5hZGRfYml0YmFrZV9saWJfcGF0aCgpCi0KLSAgICByZXR1cm4gYmIudXRpbHMud2hpY2gocGF0aCwgY21kKSAhPSAiIiBvciBGYWxzZQotCiBkZWYgZXhlY19uYXRpdmVfY21kKGNtZF9hbmRfYXJncywgbmF0aXZlX3N5c3Jvb3QsIGNhdGNoPTMsIHBzZXVkbz0iIik6CiAgICAgIiIiCiAgICAgRXhlY3V0ZSBuYXRpdmUgY29tbWFuZCwgY2F0Y2hpbmcgc3RkZXJyLCBzdGRvdXQKQEAgLTExMSw3ICsxMDcsNyBAQAogICAgIG1zZ2VyLmRlYnVnKCJleGVjX25hdGl2ZV9jbWQ6ICVzIiAlIGNtZF9hbmRfYXJncykKIAogICAgICMgSWYgdGhlIGNvbW1hbmQgaXNuJ3QgaW4gdGhlIG5hdGl2ZSBzeXNyb290IHNheSB3ZSBmYWlsZWQuCi0gICAgaWYgY21kX2luX3BhdGgoYXJnc1swXSwgbmF0aXZlX3BhdGhzKToKKyAgICBpZiBzcGF3bi5maW5kX2V4ZWN1dGFibGUoYXJnc1swXSwgbmF0aXZlX3BhdGhzKToKICAgICAgICAgcmV0LCBvdXQgPSBfZXhlY19jbWQobmF0aXZlX2NtZF9hbmRfYXJncywgVHJ1ZSwgY2F0Y2gpCiAgICAgZWxzZToKICAgICAgICAgcmV0ID0gMTI3CkBAIC0xODYsOCArMTgyLDggQEAKICAgICAgICAgICAgICAgICAgICAgICAgIGZvciBsaW5lIGluIHZhcnNmaWxlOgogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuX3BhcnNlX2xpbmUobGluZSwgaW1hZ2UpCiAgICAgICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICAgICAgcHJpbnQgIkNvdWxkbid0IGdldCBiaXRiYWtlIHZhcmlhYmxlIGZyb20gJXMuIiAlIGZuYW1lCi0gICAgICAgICAgICAgICAgICAgIHByaW50ICJGaWxlICVzIGRvZXNuJ3QgZXhpc3QuIiAlIGZuYW1lCisgICAgICAgICAgICAgICAgICAgIHByaW50KCJDb3VsZG4ndCBnZXQgYml0YmFrZSB2YXJpYWJsZSBmcm9tICVzLiIgJSBmbmFtZSkKKyAgICAgICAgICAgICAgICAgICAgcHJpbnQoIkZpbGUgJXMgZG9lc24ndCBleGlzdC4iICUgZm5hbWUpCiAgICAgICAgICAgICAgICAgICAgIHJldHVybgogICAgICAgICAgICAgZWxzZToKICAgICAgICAgICAgICAgICAjIEdldCBiaXRiYWtlIC1lIG91dHB1dApAQCAtMjAxLDggKzE5Nyw4IEBACiAgICAgICAgICAgICAgICAgbXNnZXIuc2V0X2xvZ2xldmVsKGxvZ19sZXZlbCkKIAogICAgICAgICAgICAgICAgIGlmIHJldDoKLSAgICAgICAgICAgICAgICAgICAgcHJpbnQgIkNvdWxkbid0IGdldCAnJXMnIG91dHB1dC4iICUgY21kCi0gICAgICAgICAgICAgICAgICAgIHByaW50ICJCaXRiYWtlIGZhaWxlZCB3aXRoIGVycm9yOlxuJXNcbiIgJSBsaW5lcworICAgICAgICAgICAgICAgICAgICBwcmludCgiQ291bGRuJ3QgZ2V0ICclcycgb3V0cHV0LiIgJSBjbWQpCisgICAgICAgICAgICAgICAgICAgIHByaW50KCJCaXRiYWtlIGZhaWxlZCB3aXRoIGVycm9yOlxuJXNcbiIgJSBsaW5lcykKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuCiAKICAgICAgICAgICAgICAgICAjIFBhcnNlIGJpdGJha2UgLWUgb3V0cHV0CmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvd2ljL3V0aWxzL3BhcnRpdGlvbmVkZnMucHkgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvd2ljL3V0aWxzL3BhcnRpdGlvbmVkZnMucHkKaW5kZXggYWQ1OTZkMi4uY2IwMzAwOSAxMDA2NDQKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L3NjcmlwdHMvbGliL3dpYy91dGlscy9wYXJ0aXRpb25lZGZzLnB5CisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9zY3JpcHRzL2xpYi93aWMvdXRpbHMvcGFydGl0aW9uZWRmcy5weQpAQCAtMjIsNiArMjIsNyBAQAogZnJvbSB3aWMgaW1wb3J0IG1zZ2VyCiBmcm9tIHdpYy51dGlscy5lcnJvcnMgaW1wb3J0IEltYWdlRXJyb3IKIGZyb20gd2ljLnV0aWxzLm9lLm1pc2MgaW1wb3J0IGV4ZWNfY21kLCBleGVjX25hdGl2ZV9jbWQKK2Zyb20gd2ljLmZpbGVtYXAgaW1wb3J0IHNwYXJzZV9jb3B5CiAKICMgT3ZlcmhlYWQgb2YgdGhlIE1CUiBwYXJ0aXRpb25pbmcgc2NoZW1lIChqdXN0IG9uZSBzZWN0b3IpCiBNQlJfT1ZFUkhFQUQgPSAxCkBAIC0zMiw3ICszMyw3IEBACiAjIFNpemUgb2YgYSBzZWN0b3IgaW4gYnl0ZXMKIFNFQ1RPUl9TSVpFID0gNTEyCiAKLWNsYXNzIEltYWdlKG9iamVjdCk6CitjbGFzcyBJbWFnZSgpOgogICAgICIiIgogICAgIEdlbmVyaWMgYmFzZSBvYmplY3QgZm9yIGFuIGltYWdlLgogCkBAIC00Miw2ICs0Myw3IEBACiAgICAgZGVmIF9faW5pdF9fKHNlbGYsIG5hdGl2ZV9zeXNyb290PU5vbmUpOgogICAgICAgICBzZWxmLmRpc2tzID0ge30KICAgICAgICAgc2VsZi5wYXJ0aXRpb25zID0gW10KKyAgICAgICAgc2VsZi5wYXJ0aW1hZ2VzID0gW10KICAgICAgICAgIyBTaXplIG9mIGEgc2VjdG9yIHVzZWQgaW4gY2FsY3VsYXRpb25zCiAgICAgICAgIHNlbGYuc2VjdG9yX3NpemUgPSBTRUNUT1JfU0laRQogICAgICAgICBzZWxmLl9wYXJ0aXRpb25zX2xheWVkX291dCA9IEZhbHNlCkBAIC02NiwxNSArNjgsMTcgQEAKICAgICAgICAgICAgICAgICAgJ29mZnNldCc6IDAsICAgICAgIyBPZmZzZXQgb2YgbmV4dCBwYXJ0aXRpb24gKGluIHNlY3RvcnMpCiAgICAgICAgICAgICAgICAgICMgTWluaW11bSByZXF1aXJlZCBkaXNrIHNpemUgdG8gZml0IGFsbCBwYXJ0aXRpb25zIChpbiBieXRlcykKICAgICAgICAgICAgICAgICAgJ21pbl9zaXplJzogMCwKLSAgICAgICAgICAgICAgICAgJ3B0YWJsZV9mb3JtYXQnOiAibXNkb3MifSAjIFBhcnRpdGlvbiB0YWJsZSBmb3JtYXQKKyAgICAgICAgICAgICAgICAgJ3B0YWJsZV9mb3JtYXQnOiAibXNkb3MiLCAjIFBhcnRpdGlvbiB0YWJsZSBmb3JtYXQKKyAgICAgICAgICAgICAgICAgJ2lkZW50aWZpZXInOiBOb25lfSAjIERpc2sgc3lzdGVtIGlkZW50aWZpZXIKIAotICAgIGRlZiBhZGRfZGlzayhzZWxmLCBkaXNrX25hbWUsIGRpc2tfb2JqKToKKyAgICBkZWYgYWRkX2Rpc2soc2VsZiwgZGlza19uYW1lLCBkaXNrX29iaiwgaWRlbnRpZmllcik6CiAgICAgICAgICIiIiBBZGQgYSBkaXNrIG9iamVjdCB3aGljaCBoYXZlIHRvIGJlIHBhcnRpdGlvbmVkLiBNb3JlIHRoYW4gb25lIGRpc2sKICAgICAgICAgY2FuIGJlIGFkZGVkLiBJbiBjYXNlIG9mIG11bHRpcGxlIGRpc2tzLCBkaXNrIHBhcnRpdGlvbnMgaGF2ZSB0byBiZQogICAgICAgICBhZGRlZCBmb3IgZWFjaCBkaXNrIHNlcGFyYXRlbHkgd2l0aCAnYWRkX3BhcnRpdGlvbigpIi4gIiIiCiAKICAgICAgICAgc2VsZi5fX2FkZF9kaXNrKGRpc2tfbmFtZSkKICAgICAgICAgc2VsZi5kaXNrc1tkaXNrX25hbWVdWydkaXNrJ10gPSBkaXNrX29iagorICAgICAgICBzZWxmLmRpc2tzW2Rpc2tfbmFtZV1bJ2lkZW50aWZpZXInXSA9IGlkZW50aWZpZXIKIAogICAgIGRlZiBfX2FkZF9wYXJ0aXRpb24oc2VsZiwgcGFydCk6CiAgICAgICAgICIiIiBUaGlzIGlzIGEgaGVscGVyIGZ1bmN0aW9uIGZvciAnYWRkX3BhcnRpdGlvbigpJyB3aGljaCBhZGRzIGEKQEAgLTg3LDE0ICs5MSwxNCBAQAogCiAgICAgZGVmIGFkZF9wYXJ0aXRpb24oc2VsZiwgc2l6ZSwgZGlza19uYW1lLCBtb3VudHBvaW50LCBzb3VyY2VfZmlsZT1Ob25lLCBmc3R5cGU9Tm9uZSwKICAgICAgICAgICAgICAgICAgICAgICBsYWJlbD1Ob25lLCBmc29wdHM9Tm9uZSwgYm9vdD1GYWxzZSwgYWxpZ249Tm9uZSwgbm9fdGFibGU9RmFsc2UsCi0gICAgICAgICAgICAgICAgICAgICAgcGFydF90eXBlPU5vbmUsIHV1aWQ9Tm9uZSk6CisgICAgICAgICAgICAgICAgICAgICAgcGFydF90eXBlPU5vbmUsIHV1aWQ9Tm9uZSwgc3lzdGVtX2lkPU5vbmUpOgogICAgICAgICAiIiIgQWRkIHRoZSBuZXh0IHBhcnRpdGlvbi4gUHJ0aXRpb25zIGhhdmUgdG8gYmUgYWRkZWQgaW4gdGhlCiAgICAgICAgIGZpcnN0LXRvLWxhc3Qgb3JkZXIuICIiIgogCiAgICAgICAgIGtzX3BudW0gPSBsZW4oc2VsZi5wYXJ0aXRpb25zKQogCiAgICAgICAgICMgQ29udmVydGluZyBrQiB0byBzZWN0b3JzIGZvciBwYXJ0ZWQKLSAgICAgICAgc2l6ZSA9IHNpemUgKiAxMDI0IC8gc2VsZi5zZWN0b3Jfc2l6ZQorICAgICAgICBzaXplID0gc2l6ZSAqIDEwMjQgLy8gc2VsZi5zZWN0b3Jfc2l6ZQogCiAgICAgICAgIHBhcnQgPSB7J2tzX3BudW0nOiBrc19wbnVtLCAjIFBhcnRpdGlvbiBudW1iZXIgaW4gdGhlIEtTIGZpbGUKICAgICAgICAgICAgICAgICAnc2l6ZSc6IHNpemUsICMgSW4gc2VjdG9ycwpAQCAtMTEwLDcgKzExNCw4IEBACiAgICAgICAgICAgICAgICAgJ2FsaWduJzogYWxpZ24sICMgUGFydGl0aW9uIGFsaWdubWVudAogICAgICAgICAgICAgICAgICdub190YWJsZScgOiBub190YWJsZSwgIyBQYXJ0aXRpb24gZG9lcyBub3QgYXBwZWFyIGluIHBhcnRpdGlvbiB0YWJsZQogICAgICAgICAgICAgICAgICdwYXJ0X3R5cGUnIDogcGFydF90eXBlLCAjIFBhcnRpdGlvbiB0eXBlCi0gICAgICAgICAgICAgICAgJ3V1aWQnOiB1dWlkfSAjIFBhcnRpdGlvbiBVVUlECisgICAgICAgICAgICAgICAgJ3V1aWQnOiB1dWlkLCAjIFBhcnRpdGlvbiBVVUlECisgICAgICAgICAgICAgICAgJ3N5c3RlbV9pZCc6IHN5c3RlbV9pZH0gIyBQYXJ0aXRpb24gc3lzdGVtIGlkCiAKICAgICAgICAgc2VsZi5fX2FkZF9wYXJ0aXRpb24ocGFydCkKIApAQCAtMTMwLDcgKzEzNSw3IEBACiAgICAgICAgIGZvciBudW0gaW4gcmFuZ2UobGVuKHNlbGYucGFydGl0aW9ucykpOgogICAgICAgICAgICAgcGFydCA9IHNlbGYucGFydGl0aW9uc1tudW1dCiAKLSAgICAgICAgICAgIGlmIG5vdCBzZWxmLmRpc2tzLmhhc19rZXkocGFydFsnZGlza19uYW1lJ10pOgorICAgICAgICAgICAgaWYgcGFydFsnZGlza19uYW1lJ10gbm90IGluIHNlbGYuZGlza3M6CiAgICAgICAgICAgICAgICAgcmFpc2UgSW1hZ2VFcnJvcigiTm8gZGlzayAlcyBmb3IgcGFydGl0aW9uICVzIiBcCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAlIChwYXJ0WydkaXNrX25hbWUnXSwgcGFydFsnbW91bnRwb2ludCddKSkKIApAQCAtMTcxLDEyICsxNzYsMTIgQEAKICAgICAgICAgICAgICAgICAjIGdhcHMgd2UgY291bGQgZW5sYXJnZWEgdGhlIHByZXZpb3VzIHBhcnRpdGlvbj8KIAogICAgICAgICAgICAgICAgICMgQ2FsYyBob3cgbXVjaCB0aGUgYWxpZ25tZW50IGlzIG9mZi4KLSAgICAgICAgICAgICAgICBhbGlnbl9zZWN0b3JzID0gZGlza1snb2Zmc2V0J10gJSAocGFydFsnYWxpZ24nXSAqIDEwMjQgLyBzZWxmLnNlY3Rvcl9zaXplKQorICAgICAgICAgICAgICAgIGFsaWduX3NlY3RvcnMgPSBkaXNrWydvZmZzZXQnXSAlIChwYXJ0WydhbGlnbiddICogMTAyNCAvLyBzZWxmLnNlY3Rvcl9zaXplKQogCiAgICAgICAgICAgICAgICAgaWYgYWxpZ25fc2VjdG9yczoKICAgICAgICAgICAgICAgICAgICAgIyBJZiBwYXJ0aXRpb24gaXMgbm90IGFsaWduZWQgYXMgcmVxdWlyZWQsIHdlIG5lZWQKICAgICAgICAgICAgICAgICAgICAgIyB0byBtb3ZlIGZvcndhcmQgdG8gdGhlIG5leHQgYWxpZ25tZW50IHBvaW50Ci0gICAgICAgICAgICAgICAgICAgIGFsaWduX3NlY3RvcnMgPSAocGFydFsnYWxpZ24nXSAqIDEwMjQgLyBzZWxmLnNlY3Rvcl9zaXplKSAtIGFsaWduX3NlY3RvcnMKKyAgICAgICAgICAgICAgICAgICAgYWxpZ25fc2VjdG9ycyA9IChwYXJ0WydhbGlnbiddICogMTAyNCAvLyBzZWxmLnNlY3Rvcl9zaXplKSAtIGFsaWduX3NlY3RvcnMKIAogICAgICAgICAgICAgICAgICAgICBtc2dlci5kZWJ1ZygiUmVhbGlnbm1lbnQgZm9yICVzJXMgd2l0aCAlcyBzZWN0b3JzLCBvcmlnaW5hbCIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiBvZmZzZXQgJXMsIHRhcmdldCBhbGlnbm1lbnQgaXMgJXNLLiIgJQpAQCAtMjM0LDcgKzIzOSw3IEBACiAgICAgZGVmIF9fZm9ybWF0X2Rpc2tzKHNlbGYpOgogICAgICAgICBzZWxmLmxheW91dF9wYXJ0aXRpb25zKCkKIAotICAgICAgICBmb3IgZGV2IGluIHNlbGYuZGlza3Mua2V5cygpOgorICAgICAgICBmb3IgZGV2IGluIHNlbGYuZGlza3M6CiAgICAgICAgICAgICBkaXNrID0gc2VsZi5kaXNrc1tkZXZdCiAgICAgICAgICAgICBtc2dlci5kZWJ1ZygiSW5pdGlhbGl6aW5nIHBhcnRpdGlvbiB0YWJsZSBmb3IgJXMiICUgXAogICAgICAgICAgICAgICAgICAgICAgICAgKGRpc2tbJ2Rpc2snXS5kZXZpY2UpKQpAQCAtMjQyLDYgKzI0NywxMiBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIChkaXNrWydkaXNrJ10uZGV2aWNlLCBkaXNrWydwdGFibGVfZm9ybWF0J10pLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYubmF0aXZlX3N5c3Jvb3QpCiAKKyAgICAgICAgICAgIGlmIGRpc2tbJ2lkZW50aWZpZXInXToKKyAgICAgICAgICAgICAgICBtc2dlci5kZWJ1ZygiU2V0IGRpc2sgaWRlbnRpZmllciAleCIgJSBkaXNrWydpZGVudGlmaWVyJ10pCisgICAgICAgICAgICAgICAgd2l0aCBvcGVuKGRpc2tbJ2Rpc2snXS5kZXZpY2UsICdyK2InKSBhcyBpbWc6CisgICAgICAgICAgICAgICAgICAgIGltZy5zZWVrKDB4MUI4KQorICAgICAgICAgICAgICAgICAgICBpbWcud3JpdGUoZGlza1snaWRlbnRpZmllciddLnRvX2J5dGVzKDQsICdsaXR0bGUnKSkKKwogICAgICAgICBtc2dlci5kZWJ1ZygiQ3JlYXRpbmcgcGFydGl0aW9ucyIpCiAKICAgICAgICAgZm9yIHBhcnQgaW4gc2VsZi5wYXJ0aXRpb25zOgpAQCAtMjk2LDcgKzMwNyw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChwYXJ0WydudW0nXSwgcGFydFsncGFydF90eXBlJ10sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXNrWydkaXNrJ10uZGV2aWNlKSwgc2VsZi5uYXRpdmVfc3lzcm9vdCkKIAotICAgICAgICAgICAgaWYgcGFydFsndXVpZCddOgorICAgICAgICAgICAgaWYgcGFydFsndXVpZCddIGFuZCBkaXNrWydwdGFibGVfZm9ybWF0J10gPT0gImdwdCI6CiAgICAgICAgICAgICAgICAgbXNnZXIuZGVidWcoInBhcnRpdGlvbiAlZDogc2V0IFVVSUQgdG8gJXMiICUgXAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIChwYXJ0WydudW0nXSwgcGFydFsndXVpZCddKSkKICAgICAgICAgICAgICAgICBleGVjX25hdGl2ZV9jbWQoInNnZGlzayAtLXBhcnRpdGlvbi1ndWlkPSVkOiVzICVzIiAlIFwKQEAgLTMxMCw2ICszMjEsMTAgQEAKICAgICAgICAgICAgICAgICBleGVjX25hdGl2ZV9jbWQoInBhcnRlZCAtcyAlcyBzZXQgJWQgJXMgb24iICUgXAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoZGlza1snZGlzayddLmRldmljZSwgcGFydFsnbnVtJ10sIGZsYWdfbmFtZSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYubmF0aXZlX3N5c3Jvb3QpCisgICAgICAgICAgICBpZiBwYXJ0WydzeXN0ZW1faWQnXToKKyAgICAgICAgICAgICAgICBleGVjX25hdGl2ZV9jbWQoInNmZGlzayAtLXBhcnQtdHlwZSAlcyAlcyAlcyIgJSBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChkaXNrWydkaXNrJ10uZGV2aWNlLCBwYXJ0WydudW0nXSwgcGFydFsnc3lzdGVtX2lkJ10pLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLm5hdGl2ZV9zeXNyb290KQogCiAgICAgICAgICAgICAjIFBhcnRlZCBkZWZhdWx0cyB0byBlbmFibGluZyB0aGUgbGJhIGZsYWcgZm9yIGZhdDE2IHBhcnRpdGlvbnMsCiAgICAgICAgICAgICAjIHdoaWNoIGNhdXNlcyBjb21wYXRpYmlsaXR5IGlzc3VlcyB3aXRoIHNvbWUgZmlybXdhcmUgKGFuZCByZWFsbHkKQEAgLTMzMCw2ICszNDUsMTAgQEAKICAgICAgICAgICAgICAgICAgICAgZGlza1snZGlzayddLmNsZWFudXAoKQogICAgICAgICAgICAgICAgIGV4Y2VwdDoKICAgICAgICAgICAgICAgICAgICAgcGFzcworICAgICAgICAjIHJlbW92ZSBwYXJ0aXRpb24gaW1hZ2VzCisgICAgICAgIGZvciBpbWFnZSBpbiBzZWxmLnBhcnRpbWFnZXM6CisgICAgICAgICAgICBpZiBvcy5wYXRoLmlzZmlsZShpbWFnZSk6CisgICAgICAgICAgICAgICAgb3MucmVtb3ZlKGltYWdlKQogCiAgICAgZGVmIGFzc2VtYmxlKHNlbGYsIGltYWdlX2ZpbGUpOgogICAgICAgICBtc2dlci5kZWJ1ZygiSW5zdGFsbGluZyBwYXJ0aXRpb25zIikKQEAgLTMzOCwyMCArMzU3LDE5IEBACiAgICAgICAgICAgICBzb3VyY2UgPSBwYXJ0Wydzb3VyY2VfZmlsZSddCiAgICAgICAgICAgICBpZiBzb3VyY2U6CiAgICAgICAgICAgICAgICAgIyBpbnN0YWxsIHNvdXJjZV9maWxlIGNvbnRlbnRzIGludG8gYSBwYXJ0aXRpb24KLSAgICAgICAgICAgICAgICBjbWQgPSAiZGQgaWY9JXMgb2Y9JXMgYnM9JWQgc2Vlaz0lZCBjb3VudD0lZCBjb252PW5vdHJ1bmMiICUgXAotICAgICAgICAgICAgICAgICAgICAgIChzb3VyY2UsIGltYWdlX2ZpbGUsIHNlbGYuc2VjdG9yX3NpemUsCi0gICAgICAgICAgICAgICAgICAgICAgIHBhcnRbJ3N0YXJ0J10sIHBhcnRbJ3NpemUnXSkKLSAgICAgICAgICAgICAgICBleGVjX2NtZChjbWQpCisgICAgICAgICAgICAgICAgc3BhcnNlX2NvcHkoc291cmNlLCBpbWFnZV9maWxlLCBwYXJ0WydzdGFydCddICogc2VsZi5zZWN0b3Jfc2l6ZSkKIAogICAgICAgICAgICAgICAgIG1zZ2VyLmRlYnVnKCJJbnN0YWxsZWQgJXMgaW4gcGFydGl0aW9uICVkLCBzZWN0b3JzICVkLSVkLCAiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInNpemUgJWQgc2VjdG9ycyIgJSBcCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHNvdXJjZSwgcGFydFsnbnVtJ10sIHBhcnRbJ3N0YXJ0J10sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcnRbJ3N0YXJ0J10gKyBwYXJ0WydzaXplJ10gLSAxLCBwYXJ0WydzaXplJ10pKQogCi0gICAgICAgICAgICAgICAgb3MucmVuYW1lKHNvdXJjZSwgaW1hZ2VfZmlsZSArICcucCVkJyAlIHBhcnRbJ251bSddKQorICAgICAgICAgICAgICAgIHBhcnRpbWFnZSA9IGltYWdlX2ZpbGUgKyAnLnAlZCcgJSBwYXJ0WydudW0nXQorICAgICAgICAgICAgICAgIG9zLnJlbmFtZShzb3VyY2UsIHBhcnRpbWFnZSkKKyAgICAgICAgICAgICAgICBzZWxmLnBhcnRpbWFnZXMuYXBwZW5kKHBhcnRpbWFnZSkKIAogICAgIGRlZiBjcmVhdGUoc2VsZik6Ci0gICAgICAgIGZvciBkZXYgaW4gc2VsZi5kaXNrcy5rZXlzKCk6CisgICAgICAgIGZvciBkZXYgaW4gc2VsZi5kaXNrczoKICAgICAgICAgICAgIGRpc2sgPSBzZWxmLmRpc2tzW2Rldl0KICAgICAgICAgICAgIGRpc2tbJ2Rpc2snXS5jcmVhdGUoKQogCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvd2ljL3V0aWxzL3J1bm5lci5weSBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9zY3JpcHRzL2xpYi93aWMvdXRpbHMvcnVubmVyLnB5CmluZGV4IDc0MzE5MTcuLmRiNTM2YmEgMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9zY3JpcHRzL2xpYi93aWMvdXRpbHMvcnVubmVyLnB5CisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9zY3JpcHRzL2xpYi93aWMvdXRpbHMvcnVubmVyLnB5CkBAIC02NSw5ICs2NSw5IEBACiAgICAgICAgIHByb2Nlc3MgPSBzdWJwcm9jZXNzLlBvcGVuKGNtZGxuX29yX2FyZ3MsIHN0ZG91dD1zb3V0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGRlcnI9c2Vyciwgc2hlbGw9c2hlbGwpCiAgICAgICAgIChzb3V0LCBzZXJyKSA9IHByb2Nlc3MuY29tbXVuaWNhdGUoKQotICAgICAgICAjIGNvbWJpbmUgc3Rkb3V0IGFuZCBzdGRlcnIsIGZpbHRlciBOb25lIG91dAotICAgICAgICBvdXQgPSAnJy5qb2luKGZpbHRlcihOb25lLCBbc291dCwgc2Vycl0pKQotICAgIGV4Y2VwdCBPU0Vycm9yLCBlcnI6CisgICAgICAgICMgY29tYmluZSBzdGRvdXQgYW5kIHN0ZGVyciwgZmlsdGVyIE5vbmUgb3V0IGFuZCBkZWNvZGUKKyAgICAgICAgb3V0ID0gJycuam9pbihbb3V0LmRlY29kZSgndXRmLTgnKSBmb3Igb3V0IGluIFtzb3V0LCBzZXJyXSBpZiBvdXRdKQorICAgIGV4Y2VwdCBPU0Vycm9yIGFzIGVycjoKICAgICAgICAgaWYgZXJyLmVycm5vID09IDI6CiAgICAgICAgICAgICAjIFtFcnJubyAyXSBObyBzdWNoIGZpbGUgb3IgZGlyZWN0b3J5CiAgICAgICAgICAgICBtc2dlci5lcnJvcignQ2Fubm90IHJ1biBjb21tYW5kOiAlcywgbG9zdCBkZXBlbmRlbmN5PycgJSBjbWQpCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvc2NyaXB0cy9sbnIgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvc2NyaXB0cy9sbnIKaW5kZXggOWRhY2ViZS4uNWZlZDc4MCAxMDA3NTUKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L3NjcmlwdHMvbG5yCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9zY3JpcHRzL2xucgpAQCAtMSw0ICsxLDQgQEAKLSMhIC91c3IvYmluL2VudiBweXRob24KKyMhIC91c3IvYmluL2VudiBweXRob24zCiAKICMgQ3JlYXRlIGEgKnJlbGF0aXZlKiBzeW1saW5rLCBqdXN0IGxpa2UgbG4gLS1yZWxhdGl2ZSBkb2VzIGJ1dCB3aXRob3V0IG5lZWRpbmcKICMgY29yZXV0aWxzIDguMTYuCkBAIC02LDcgKzYsNyBAQAogaW1wb3J0IHN5cywgb3MKIAogaWYgbGVuKHN5cy5hcmd2KSAhPSAzOgotICAgcHJpbnQgIiQgbG5yIFRBUkdFVCBMSU5LX05BTUUiCisgICBwcmludCgiJCBsbnIgVEFSR0VUIExJTktfTkFNRSIpCiAgICBzeXMuZXhpdCgxKQogCiB0YXJnZXQgPSBzeXMuYXJndlsxXQpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L3NjcmlwdHMvb2UtYnVpbGQtcGVyZi10ZXN0IGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L3NjcmlwdHMvb2UtYnVpbGQtcGVyZi10ZXN0Cm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjYzOGUxOTUKLS0tIC9kZXYvbnVsbAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvc2NyaXB0cy9vZS1idWlsZC1wZXJmLXRlc3QKQEAgLTAsMCArMSwyMTEgQEAKKyMhL3Vzci9iaW4vcHl0aG9uMworIworIyBCdWlsZCBwZXJmb3JtYW5jZSB0ZXN0IHNjcmlwdAorIworIyBDb3B5cmlnaHQgKGMpIDIwMTYsIEludGVsIENvcnBvcmF0aW9uLgorIworIyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorIyB1bmRlciB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLAorIyB2ZXJzaW9uIDIsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorIworIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCisjIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvcgorIyBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yCisjIG1vcmUgZGV0YWlscy4KKyMKKyIiIkJ1aWxkIHBlcmZvcm1hbmNlIHRlc3Qgc2NyaXB0IiIiCitpbXBvcnQgYXJncGFyc2UKK2ltcG9ydCBlcnJubworaW1wb3J0IGZjbnRsCitpbXBvcnQgbG9nZ2luZworaW1wb3J0IG9zCitpbXBvcnQgc2h1dGlsCitpbXBvcnQgc3lzCitpbXBvcnQgdW5pdHRlc3QKK2Zyb20gZGF0ZXRpbWUgaW1wb3J0IGRhdGV0aW1lCisKK3N5cy5wYXRoLmluc2VydCgwLCBvcy5wYXRoLmRpcm5hbWUob3MucGF0aC5yZWFscGF0aChfX2ZpbGVfXykpICsgJy9saWInKQoraW1wb3J0IHNjcmlwdHBhdGgKK3NjcmlwdHBhdGguYWRkX29lX2xpYl9wYXRoKCkKK2ltcG9ydCBvZXFhLmJ1aWxkcGVyZgorZnJvbSBvZXFhLmJ1aWxkcGVyZiBpbXBvcnQgKEJ1aWxkUGVyZlRlc3RMb2FkZXIsIEJ1aWxkUGVyZlRlc3RSZXN1bHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgQnVpbGRQZXJmVGVzdFJ1bm5lciwgS2VybmVsRHJvcENhY2hlcykKK2Zyb20gb2VxYS51dGlscy5jb21tYW5kcyBpbXBvcnQgcnVuQ21kCitmcm9tIG9lcWEudXRpbHMuZ2l0IGltcG9ydCBHaXRSZXBvLCBHaXRFcnJvcgorCisKKyMgU2V0LXVwIGxvZ2dpbmcKK0xPR19GT1JNQVQgPSAnWyUoYXNjdGltZSlzXSAlKGxldmVsbmFtZSlzOiAlKG1lc3NhZ2UpcycKK2xvZ2dpbmcuYmFzaWNDb25maWcobGV2ZWw9bG9nZ2luZy5JTkZPLCBmb3JtYXQ9TE9HX0ZPUk1BVCwKKyAgICAgICAgICAgICAgICAgICAgZGF0ZWZtdD0nJVktJW0tJWQgJUg6JU06JVMnKQorbG9nID0gbG9nZ2luZy5nZXRMb2dnZXIoKQorCisKK2RlZiBhY3F1aXJlX2xvY2sobG9ja19mKToKKyAgICAiIiJBY3F1aXJlIGZsb2NrIG9uIGZpbGUiIiIKKyAgICBsb2cuZGVidWcoIkFjcXVpcmluZyBsb2NrICVzIiwgb3MucGF0aC5hYnNwYXRoKGxvY2tfZi5uYW1lKSkKKyAgICB0cnk6CisgICAgICAgIGZjbnRsLmZsb2NrKGxvY2tfZiwgZmNudGwuTE9DS19FWCB8IGZjbnRsLkxPQ0tfTkIpCisgICAgZXhjZXB0IElPRXJyb3IgYXMgZXJyOgorICAgICAgICBpZiBlcnIuZXJybm8gPT0gZXJybm8uRUFHQUlOOgorICAgICAgICAgICAgcmV0dXJuIEZhbHNlCisgICAgICAgIHJhaXNlCisgICAgbG9nLmRlYnVnKCJMb2NrIGFjcXVpcmVkIikKKyAgICByZXR1cm4gVHJ1ZQorCisKK2RlZiBwcmVfcnVuX3Nhbml0eV9jaGVjaygpOgorICAgICIiIlNhbml0eSBjaGVjayBvZiBidWlsZCBlbnZpcm9ubWVudCIiIgorICAgIGJ1aWxkX2RpciA9IG9zLmVudmlyb24uZ2V0KCJCVUlMRERJUiIpCisgICAgaWYgbm90IGJ1aWxkX2RpcjoKKyAgICAgICAgbG9nLmVycm9yKCJCVUlMRERJUiBub3Qgc2V0LiBQbGVhc2UgcnVuIHRoZSBidWlsZCBlbnZpcm9ubW5lbnQgc2V0dXAgIgorICAgICAgICAgICAgICAgICAgInNjcmlwdC4iKQorICAgICAgICByZXR1cm4gRmFsc2UKKyAgICBpZiBvcy5nZXRjd2QoKSAhPSBidWlsZF9kaXI6CisgICAgICAgIGxvZy5lcnJvcigiUGxlYXNlIHJ1biB0aGlzIHNjcmlwdCB1bmRlciBCVUlMRERJUiAoJXMpIiwgYnVpbGRfZGlyKQorICAgICAgICByZXR1cm4gRmFsc2UKKworICAgIHJldCA9IHJ1bkNtZCgnd2hpY2ggYml0YmFrZScsIGlnbm9yZV9zdGF0dXM9VHJ1ZSkKKyAgICBpZiByZXQuc3RhdHVzOgorICAgICAgICBsb2cuZXJyb3IoImJpdGJha2UgY29tbWFuZCBub3QgZm91bmQiKQorICAgICAgICByZXR1cm4gRmFsc2UKKyAgICByZXR1cm4gVHJ1ZQorCitkZWYgaW5pdF9naXRfcmVwbyhwYXRoKToKKyAgICAiIiJDaGVjay9jcmVhdGUgR2l0IHJlcG9zaXRvcnkgd2hlcmUgdG8gc3RvcmUgcmVzdWx0cyIiIgorICAgIHBhdGggPSBvcy5wYXRoLmFic3BhdGgocGF0aCkKKyAgICBpZiBvcy5wYXRoLmlzZmlsZShwYXRoKToKKyAgICAgICAgbG9nLmVycm9yKCJJbnZhbGlkIEdpdCByZXBvICVzOiBwYXRoIGV4aXN0cyBidXQgaXMgbm90IGEgZGlyZWN0b3J5IiwgcGF0aCkKKyAgICAgICAgcmV0dXJuIEZhbHNlCisgICAgaWYgbm90IG9zLnBhdGguaXNkaXIocGF0aCk6CisgICAgICAgIHRyeToKKyAgICAgICAgICAgIG9zLm1rZGlyKHBhdGgpCisgICAgICAgIGV4Y2VwdCAoRmlsZU5vdEZvdW5kRXJyb3IsIFBlcm1pc3Npb25FcnJvcikgYXMgZXJyOgorICAgICAgICAgICAgbG9nLmVycm9yKCJGYWlsZWQgdG8gbWtkaXIgJXM6ICVzIiwgcGF0aCwgZXJyKQorICAgICAgICAgICAgcmV0dXJuIEZhbHNlCisgICAgaWYgbm90IG9zLmxpc3RkaXIocGF0aCk6CisgICAgICAgIGxvZy5pbmZvKCJJbml0aWFsaXppbmcgYSBuZXcgR2l0IHJlcG8gYXQgJXMiLCBwYXRoKQorICAgICAgICBHaXRSZXBvLmluaXQocGF0aCkKKyAgICB0cnk6CisgICAgICAgIEdpdFJlcG8ocGF0aCwgaXNfdG9wZGlyPVRydWUpCisgICAgZXhjZXB0IEdpdEVycm9yOgorICAgICAgICBsb2cuZXJyb3IoIk5vIEdpdCByZXBvc2l0b3J5IGJ1dCBhIG5vbi1lbXB0eSBkaXJlY3RvcnkgZm91bmQgYXQgJXMuXG4iCisgICAgICAgICAgICAgICAgICAiUGxlYXNlIHNwZWNpZnkgYSBHaXQgcmVwb3NpdG9yeSwgYW4gZW1wdHkgZGlyZWN0b3J5IG9yICIKKyAgICAgICAgICAgICAgICAgICJhIG5vbi1leGlzdGluZyBkaXJlY3RvcnkiLCBwYXRoKQorICAgICAgICByZXR1cm4gRmFsc2UKKyAgICByZXR1cm4gVHJ1ZQorCisKK2RlZiBzZXR1cF9maWxlX2xvZ2dpbmcobG9nX2ZpbGUpOgorICAgICIiIlNldHVwIGxvZ2dpbiB0byBmaWxlIiIiCisgICAgbG9nX2RpciA9IG9zLnBhdGguZGlybmFtZShsb2dfZmlsZSkKKyAgICBpZiBub3Qgb3MucGF0aC5leGlzdHMobG9nX2Rpcik6CisgICAgICAgIG9zLm1ha2VkaXJzKGxvZ19kaXIpCisgICAgZm9ybWF0dGVyID0gbG9nZ2luZy5Gb3JtYXR0ZXIoTE9HX0ZPUk1BVCkKKyAgICBoYW5kbGVyID0gbG9nZ2luZy5GaWxlSGFuZGxlcihsb2dfZmlsZSkKKyAgICBoYW5kbGVyLnNldEZvcm1hdHRlcihmb3JtYXR0ZXIpCisgICAgbG9nLmFkZEhhbmRsZXIoaGFuZGxlcikKKworCitkZWYgYXJjaGl2ZV9idWlsZF9jb25mKG91dF9kaXIpOgorICAgICIiIkFyY2hpdmUgYnVpbGQvY29uZiB0byB0ZXN0IHJlc3VsdHMiIiIKKyAgICBzcmNfZGlyID0gb3MucGF0aC5qb2luKG9zLmVudmlyb25bJ0JVSUxERElSJ10sICdjb25mJykKKyAgICB0Z3RfZGlyID0gb3MucGF0aC5qb2luKG91dF9kaXIsICdidWlsZCcsICdjb25mJykKKyAgICBvcy5tYWtlZGlycyhvcy5wYXRoLmRpcm5hbWUodGd0X2RpcikpCisgICAgc2h1dGlsLmNvcHl0cmVlKHNyY19kaXIsIHRndF9kaXIpCisKKworZGVmIHBhcnNlX2FyZ3MoYXJndik6CisgICAgIiIiUGFyc2UgY29tbWFuZCBsaW5lIGFyZ3VtZW50cyIiIgorICAgIHBhcnNlciA9IGFyZ3BhcnNlLkFyZ3VtZW50UGFyc2VyKAorICAgICAgICBmb3JtYXR0ZXJfY2xhc3M9YXJncGFyc2UuQXJndW1lbnREZWZhdWx0c0hlbHBGb3JtYXR0ZXIpCisKKyAgICBwYXJzZXIuYWRkX2FyZ3VtZW50KCctRCcsICctLWRlYnVnJywgYWN0aW9uPSdzdG9yZV90cnVlJywKKyAgICAgICAgICAgICAgICAgICAgICAgIGhlbHA9J0VuYWJsZSBkZWJ1ZyBsZXZlbCBsb2dnaW5nJykKKyAgICBwYXJzZXIuYWRkX2FyZ3VtZW50KCctLWdsb2JhbHJlcy1maWxlJywKKyAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU9b3MucGF0aC5hYnNwYXRoLAorICAgICAgICAgICAgICAgICAgICAgICAgaGVscD0iQXBwZW5kIHJlc3VsdHMgdG8gJ2dsb2JhbHJlcycgY3N2IGZpbGUiKQorICAgIHBhcnNlci5hZGRfYXJndW1lbnQoJy0tbG9jay1maWxlJywgZGVmYXVsdD0nLi9vZS1idWlsZC1wZXJmLmxvY2snLAorICAgICAgICAgICAgICAgICAgICAgICAgbWV0YXZhcj0nRklMRU5BTUUnLCB0eXBlPW9zLnBhdGguYWJzcGF0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgIGhlbHA9IkxvY2sgZmlsZSB0byB1c2UiKQorICAgIHBhcnNlci5hZGRfYXJndW1lbnQoJy1vJywgJy0tb3V0LWRpcicsIGRlZmF1bHQ9J3Jlc3VsdHMte2RhdGV9JywKKyAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU9b3MucGF0aC5hYnNwYXRoLAorICAgICAgICAgICAgICAgICAgICAgICAgaGVscD0iT3V0cHV0IGRpcmVjdG9yeSBmb3IgdGVzdCByZXN1bHRzIikKKyAgICBwYXJzZXIuYWRkX2FyZ3VtZW50KCctLWxvZy1maWxlJywKKyAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ9J3tvdXRfZGlyfS9vZS1idWlsZC1wZXJmLXRlc3QubG9nJywKKyAgICAgICAgICAgICAgICAgICAgICAgIGhlbHA9IkxvZyBmaWxlIG9mIHRoaXMgc2NyaXB0IikKKyAgICBwYXJzZXIuYWRkX2FyZ3VtZW50KCctLXJ1bi10ZXN0cycsIG5hcmdzPScrJywgbWV0YXZhcj0nVEVTVCcsCisgICAgICAgICAgICAgICAgICAgICAgICBoZWxwPSJMaXN0IG9mIHRlc3RzIHRvIHJ1biIpCisgICAgcGFyc2VyLmFkZF9hcmd1bWVudCgnLS1jb21taXQtcmVzdWx0cycsIG1ldGF2YXI9J0dJVF9ESVInLAorICAgICAgICAgICAgICAgICAgICAgICAgdHlwZT1vcy5wYXRoLmFic3BhdGgsCisgICAgICAgICAgICAgICAgICAgICAgICBoZWxwPSJDb21taXQgcmVzdWx0IGRhdGEgdG8gYSAobG9jYWwpIGdpdCByZXBvc2l0b3J5IikKKyAgICBwYXJzZXIuYWRkX2FyZ3VtZW50KCctLWNvbW1pdC1yZXN1bHRzLWJyYW5jaCcsIG1ldGF2YXI9J0JSQU5DSCcsCisgICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0PSJ7Z2l0X2JyYW5jaH0iLAorICAgICAgICAgICAgICAgICAgICAgICAgaGVscD0iQ29tbWl0IHJlc3VsdHMgdG8gYnJhbmNoIEJSQU5DSC4iKQorICAgIHBhcnNlci5hZGRfYXJndW1lbnQoJy0tY29tbWl0LXJlc3VsdHMtdGFnJywgbWV0YXZhcj0nVEFHJywKKyAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ9IntnaXRfYnJhbmNofS97Z2l0X2NvbW1pdF9jb3VudH0tZ3tnaXRfY29tbWl0fS97dGFnX251bX0iLAorICAgICAgICAgICAgICAgICAgICAgICAgaGVscD0iVGFnIHJlc3VsdHMgY29tbWl0IHdpdGggVEFHLiIpCisKKyAgICByZXR1cm4gcGFyc2VyLnBhcnNlX2FyZ3MoYXJndikKKworCitkZWYgbWFpbihhcmd2PU5vbmUpOgorICAgICIiIlNjcmlwdCBlbnRyeSBwb2ludCIiIgorICAgIGFyZ3MgPSBwYXJzZV9hcmdzKGFyZ3YpCisKKyAgICAjIFNldC11cCBsb2cgZmlsZQorICAgIG91dF9kaXIgPSBhcmdzLm91dF9kaXIuZm9ybWF0KGRhdGU9ZGF0ZXRpbWUubm93KCkuc3RyZnRpbWUoJyVZJW0lZCVIJU0lUycpKQorICAgIHNldHVwX2ZpbGVfbG9nZ2luZyhhcmdzLmxvZ19maWxlLmZvcm1hdChvdXRfZGlyPW91dF9kaXIpKQorCisgICAgaWYgYXJncy5kZWJ1ZzoKKyAgICAgICAgbG9nLnNldExldmVsKGxvZ2dpbmcuREVCVUcpCisKKyAgICBsb2NrX2YgPSBvcGVuKGFyZ3MubG9ja19maWxlLCAndycpCisgICAgaWYgbm90IGFjcXVpcmVfbG9jayhsb2NrX2YpOgorICAgICAgICBsb2cuZXJyb3IoIkFub3RoZXIgaW5zdGFuY2Ugb2YgdGhpcyBzY3JpcHQgaXMgcnVubmluZywgZXhpdGluZy4uLiIpCisgICAgICAgIHJldHVybiAxCisKKyAgICBpZiBub3QgcHJlX3J1bl9zYW5pdHlfY2hlY2soKToKKyAgICAgICAgcmV0dXJuIDEKKyAgICBpZiBhcmdzLmNvbW1pdF9yZXN1bHRzOgorICAgICAgICBpZiBub3QgaW5pdF9naXRfcmVwbyhhcmdzLmNvbW1pdF9yZXN1bHRzKToKKyAgICAgICAgICAgIHJldHVybiAxCisKKyAgICAjIENoZWNrIG91ciBjYXBhYmlsaXR5IHRvIGRyb3AgY2FjaGVzIGFuZCBhc2sgcGFzcyBpZiBuZWVkZWQKKyAgICBLZXJuZWxEcm9wQ2FjaGVzLmNoZWNrKCkKKworICAgICMgTG9hZCBidWlsZCBwZXJmIHRlc3RzCisgICAgbG9hZGVyID0gQnVpbGRQZXJmVGVzdExvYWRlcigpCisgICAgaWYgYXJncy5ydW5fdGVzdHM6CisgICAgICAgIHN1aXRlID0gbG9hZGVyLmxvYWRUZXN0c0Zyb21OYW1lcyhhcmdzLnJ1bl90ZXN0cywgb2VxYS5idWlsZHBlcmYpCisgICAgZWxzZToKKyAgICAgICAgc3VpdGUgPSBsb2FkZXIubG9hZFRlc3RzRnJvbU1vZHVsZShvZXFhLmJ1aWxkcGVyZikKKworICAgIGFyY2hpdmVfYnVpbGRfY29uZihvdXRfZGlyKQorICAgIHJ1bm5lciA9IEJ1aWxkUGVyZlRlc3RSdW5uZXIob3V0X2RpciwgdmVyYm9zaXR5PTIpCisKKyAgICAjIFN1cHByZXNzIGxvZ2dlciBvdXRwdXQgdG8gc3RkZXJyIHNvIHRoYXQgdGhlIG91dHB1dCBmcm9tIHVuaXR0ZXN0CisgICAgIyBpcyBub3QgbWl4ZWQgd2l0aCBvY2Nhc2lvbmFsIGxvZ2dlciBvdXRwdXQKKyAgICBsb2cuaGFuZGxlcnNbMF0uc2V0TGV2ZWwobG9nZ2luZy5DUklUSUNBTCkKKworICAgICMgUnVuIGFjdHVhbCB0ZXN0cworICAgIHJlc3VsdCA9IHJ1bm5lci5ydW4oc3VpdGUpCisKKyAgICAjIFJlc3RvcmUgbG9nZ2VyIG91dHB1dCB0byBzdGRlcnIKKyAgICBsb2cuaGFuZGxlcnNbMF0uc2V0TGV2ZWwobG9nLmxldmVsKQorCisgICAgaWYgYXJncy5nbG9iYWxyZXNfZmlsZToKKyAgICAgICAgcmVzdWx0LnVwZGF0ZV9nbG9iYWxyZXNfZmlsZShhcmdzLmdsb2JhbHJlc19maWxlKQorICAgIGlmIGFyZ3MuY29tbWl0X3Jlc3VsdHM6CisgICAgICAgIHJlc3VsdC5naXRfY29tbWl0X3Jlc3VsdHMoYXJncy5jb21taXRfcmVzdWx0cywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcmdzLmNvbW1pdF9yZXN1bHRzX2JyYW5jaCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcmdzLmNvbW1pdF9yZXN1bHRzX3RhZykKKyAgICBpZiByZXN1bHQud2FzU3VjY2Vzc2Z1bCgpOgorICAgICAgICByZXR1cm4gMAorCisgICAgcmV0dXJuIDIKKworCitpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgorICAgIHN5cy5leGl0KG1haW4oKSkKKwpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L3NjcmlwdHMvb2UtYnVpbGRlbnYtaW50ZXJuYWwgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvc2NyaXB0cy9vZS1idWlsZGVudi1pbnRlcm5hbAppbmRleCBlMDRkYjAzLi45ZmFlM2I0IDEwMDc1NQotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvc2NyaXB0cy9vZS1idWlsZGVudi1pbnRlcm5hbAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvc2NyaXB0cy9vZS1idWlsZGVudi1pbnRlcm5hbApAQCAtMjksMjcgKzI5LDMxIEBACiAgICAgcmV0dXJuIDEKIGZpCiAKLSMgTWFrZSBzdXJlIHdlJ3JlIG5vdCB1c2luZyBweXRob24gdjMueC4gVGhpcyBjaGVjayBjYW4ndCBnbyBpbnRvCi0jIHNhbml0eS5iYmNsYXNzIGJlY2F1c2UgYml0YmFrZSdzIHNvdXJjZSBjb2RlIGRvZXNuJ3QgZXZlbiBwYXNzCi0jIHBhcnNpbmcgc3RhZ2Ugd2hlbiB1c2VkIHdpdGggcHl0aG9uIHYzLCBzbyB3ZSBjYXRjaCBpdCBoZXJlIHNvIHdlCi0jIGNhbiBvZmZlciBhIG1lYW5pbmdmdWwgZXJyb3IgbWVzc2FnZS4KLXB5X3YzX2NoZWNrPSQoL3Vzci9iaW4vZW52IHB5dGhvbiAtLXZlcnNpb24gMj4mMSB8IGdyZXAgIlB5dGhvbiAzIikKLWlmIFsgLW4gIiRweV92M19jaGVjayIgXTsgdGhlbgotICAgIGVjaG8gPiYyICJCaXRiYWtlIGlzIG5vdCBjb21wYXRpYmxlIHdpdGggcHl0aG9uIHYzIgotICAgIGVjaG8gPiYyICJQbGVhc2Ugc2V0IHVwIHB5dGhvbiB2MiBhcyB5b3VyIGRlZmF1bHQgcHl0aG9uIGludGVycHJldGVyIgorIyBNYWtlIHN1cmUgd2UncmUgbm90IHVzaW5nIHB5dGhvbiB2My54IGFzICdweXRob24nLCB3ZSBkb24ndCBzdXBwb3J0IGl0LgorcHlfdjJfY2hlY2s9JCgvdXNyL2Jpbi9lbnYgcHl0aG9uIC0tdmVyc2lvbiAyPiYxIHwgZ3JlcCAiUHl0aG9uIDMiKQoraWYgWyAtbiAiJHB5X3YyX2NoZWNrIiBdOyB0aGVuCisgICAgZWNobyA+JjIgIk9wZW5FbWJlZGRlZCByZXF1aXJlcyAncHl0aG9uJyB0byBiZSBweXRob24gdjIgKD49IDIuNy4zKSwgbm90IHB5dGhvbiB2My4iCisgICAgZWNobyA+JjIgIlBsZWFzZSBzZXQgdXAgcHl0aG9uIHYyIGFzIHlvdXIgZGVmYXVsdCAncHl0aG9uJyBpbnRlcnByZXRlci4iCiAgICAgcmV0dXJuIDEKIGZpCi11bnNldCBweV92M19jaGVjawordW5zZXQgcHlfdjJfY2hlY2sKIAotIyBTaW1pbGFybHksIHdlIG5vdyBoYXZlIGNvZGUgdGhhdCBkb2Vzbid0IHBhcnNlIGNvcnJlY3RseSB3aXRoIG9sZGVyCi0jIHZlcnNpb25zIG9mIFB5dGhvbiwgYW5kIHJhdGhlciB0aGFuIGZpeGluZyB0aGF0IGFuZCBiZWluZyBldGVybmFsbHkKLSMgdmlnaWxhbnQgZm9yIGFueSBvdGhlciBuZXcgZmVhdHVyZSB1c2UsIGp1c3QgY2hlY2sgdGhlIHZlcnNpb24gaGVyZS4KLXB5X3YyNl9jaGVjaz0kKHB5dGhvbiAtYyAnaW1wb3J0IHN5czsgcHJpbnQgc3lzLnZlcnNpb25faW5mbyA+PSAoMiw3LDMpJykKLWlmIFsgIiRweV92MjZfY2hlY2siICE9ICJUcnVlIiBdOyB0aGVuCi0gICAgZWNobyA+JjIgIkJpdEJha2UgcmVxdWlyZXMgUHl0aG9uIDIuNy4zIG9yIGxhdGVyIgorcHlfdjI3X2NoZWNrPSQocHl0aG9uIC1jICdpbXBvcnQgc3lzOyBwcmludCBzeXMudmVyc2lvbl9pbmZvID49ICgyLDcsMyknKQoraWYgWyAiJHB5X3YyN19jaGVjayIgIT0gIlRydWUiIF07IHRoZW4KKyAgICBlY2hvID4mMiAiT3BlbkVtYmVkZGVkIHJlcXVpcmVzICdweXRob24nIHRvIGJlIHB5dGhvbiB2MiAoPj0gMi43LjMpLCBub3QgcHl0aG9uIHYzLiIKKyAgICBlY2hvID4mMiAiUGxlYXNlIHVwZ3JhZGUgeW91ciBweXRob24gdjIuIgorZmkKK3Vuc2V0IHB5X3YyN19jaGVjaworCisjIFdlIHBvdGVudGlhbGx5IGhhdmUgY29kZSB0aGF0IGRvZXNuJ3QgcGFyc2UgY29ycmVjdGx5IHdpdGggb2xkZXIgdmVyc2lvbnMgCisjIG9mIFB5dGhvbiwgYW5kIHJhdGhlciB0aGFuIGZpeGluZyB0aGF0IGFuZCBiZWluZyBldGVybmFsbHkgdmlnaWxhbnQgZm9yIAorIyBhbnkgb3RoZXIgbmV3IGZlYXR1cmUgdXNlLCBqdXN0IGNoZWNrIHRoZSB2ZXJzaW9uIGhlcmUuCitweV92MzRfY2hlY2s9JChweXRob24zIC1jICdpbXBvcnQgc3lzOyBwcmludChzeXMudmVyc2lvbl9pbmZvID49ICgzLDQsMCkpJykKK2lmIFsgIiRweV92MzRfY2hlY2siICE9ICJUcnVlIiBdOyB0aGVuCisgICAgZWNobyA+JjIgIkJpdEJha2UgcmVxdWlyZXMgUHl0aG9uIDMuNC4wIG9yIGxhdGVyIGFzICdweXRob24zJyIKICAgICByZXR1cm4gMQogZmkKLXVuc2V0IHB5X3YyNl9jaGVjawordW5zZXQgcHlfdjM0X2NoZWNrCiAKIGlmIFsgLXogIiRCRElSIiBdOyB0aGVuCiAgICAgaWYgWyAteiAiJDEiIF07IHRoZW4KQEAgLTkyLDcgKzk2LDcgQEAKIEJVSUxERElSPSQocmVhZGxpbmsgLWYgIiRCVUlMRERJUiIpCiAKIGlmIFsgISAtZCAiJEJJVEJBS0VESVIiIF07IHRoZW4KLSAgICBlY2hvID4mMiAiRXJyb3I6IFRoZSBiaXRiYWtlIGRpcmVjdG9yeSAoJEJJVEJBS0VESVIpIGRvZXMgbm90IGV4aXN0ISAgUGxlYXNlIGVuc3VyZSBhIGNvcHkgb2YgYml0YmFrZSBleGlzdHMgYXQgdGhpcyBsb2NhdGlvbiIKKyAgICBlY2hvID4mMiAiRXJyb3I6IFRoZSBiaXRiYWtlIGRpcmVjdG9yeSAoJEJJVEJBS0VESVIpIGRvZXMgbm90IGV4aXN0ISAgUGxlYXNlIGVuc3VyZSBhIGNvcHkgb2YgYml0YmFrZSBleGlzdHMgYXQgdGhpcyBsb2NhdGlvbiBvciBzcGVjaWZ5IGFuIGFsdGVybmF0aXZlIHBhdGggb24gdGhlIGNvbW1hbmQgbGluZSIKICAgICByZXR1cm4gMQogZmkKIApAQCAtMTE0LDcgKzExOCw3IEBACiBIVFRQU19QUk9YWSBodHRwc19wcm94eSBGVFBfUFJPWFkgZnRwX3Byb3h5IEZUUFNfUFJPWFkgZnRwc19wcm94eSBBTExfUFJPWFkgXAogYWxsX3Byb3h5IE5PX1BST1hZIG5vX3Byb3h5IFNTSF9BR0VOVF9QSUQgU1NIX0FVVEhfU09DSyBCQl9TUkNSRVZfUE9MSUNZIFwKIFNES01BQ0hJTkUgQkJfTlVNQkVSX1RIUkVBRFMgQkJfTk9fTkVUV09SSyBQQVJBTExFTF9NQUtFIEdJVF9QUk9YWV9DT01NQU5EIFwKLVNPQ0tTNV9QQVNTV0QgU09DS1M1X1VTRVIgU0NSRUVORElSIFNUQU1QU19ESVIiCitTT0NLUzVfUEFTU1dEIFNPQ0tTNV9VU0VSIFNDUkVFTkRJUiBTVEFNUFNfRElSIEJCUEFUSF9FWFRSQSBCQl9TRVRTQ0VORV9FTkZPUkNFIgogCiBCQl9FTlZfRVhUUkFXSElURT0iJChlY2hvICRCQl9FTlZfRVhUUkFXSElURSAkQkJfRU5WX0VYVFJBV0hJVEVfT0UgfCB0ciAnICcgJ1xuJyB8IExDX0FMTD1DIHNvcnQgLS11bmlxdWUgfCB0ciAnXG4nICcgJykiCiAKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9zY3JpcHRzL29lLWNoZWNrLXNzdGF0ZSBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9zY3JpcHRzL29lLWNoZWNrLXNzdGF0ZQpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5kMDZlZmU0Ci0tLSAvZGV2L251bGwKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L3NjcmlwdHMvb2UtY2hlY2stc3N0YXRlCkBAIC0wLDAgKzEsMTIxIEBACisjIS91c3IvYmluL2VudiBweXRob24zCisKKyMgUXVlcnkgd2hpY2ggdGFza3Mgd2lsbCBiZSByZXN0b3JlZCBmcm9tIHNzdGF0ZQorIworIyBDb3B5cmlnaHQgMjAxNiBJbnRlbCBDb3Jwb3JhdGlvbgorIyBBdXRob3JlZC1ieTogIFBhdWwgRWdnbGV0b24gPHBhdWwuZWdnbGV0b25AaW50ZWwuY29tPgorIworIyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorIyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworIyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisjIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisjIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyMgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyMKKyMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcKKyMgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKKyMgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxIFVTQS4KKworaW1wb3J0IHN5cworaW1wb3J0IG9zCitpbXBvcnQgc3VicHJvY2VzcworaW1wb3J0IHRlbXBmaWxlCitpbXBvcnQgc2h1dGlsCitpbXBvcnQgcmUKKworc2NyaXB0c19wYXRoID0gb3MucGF0aC5kaXJuYW1lKG9zLnBhdGgucmVhbHBhdGgoX19maWxlX18pKQorbGliX3BhdGggPSBzY3JpcHRzX3BhdGggKyAnL2xpYicKK3N5cy5wYXRoID0gc3lzLnBhdGggKyBbbGliX3BhdGhdCitpbXBvcnQgc2NyaXB0dXRpbHMKK2ltcG9ydCBzY3JpcHRwYXRoCitzY3JpcHRwYXRoLmFkZF9iaXRiYWtlX2xpYl9wYXRoKCkKK2ltcG9ydCBhcmdwYXJzZV9vZQorCisKK2RlZiB0cmFuc2xhdGVfdmlydHVhbGZucyh0YXNrcyk6CisgICAgaW1wb3J0IGJiLnRpbmZvaWwKKyAgICB0aW5mb2lsID0gYmIudGluZm9pbC5UaW5mb2lsKCkKKyAgICB0cnk6CisgICAgICAgIHRpbmZvaWwucHJlcGFyZShGYWxzZSkKKworICAgICAgICByZWNpcGVjYWNoZXMgPSB0aW5mb2lsLmNvb2tlci5yZWNpcGVjYWNoZXMKKyAgICAgICAgb3V0dGFza3MgPSBbXQorICAgICAgICBmb3IgdGFzayBpbiB0YXNrczoKKyAgICAgICAgICAgIChtYywgZm4sIHRhc2tuYW1lKSA9IGJiLnJ1bnF1ZXVlLnNwbGl0X3RpZCh0YXNrKQorICAgICAgICAgICAgaWYgdGFza25hbWUuZW5kc3dpdGgoJ19zZXRzY2VuZScpOgorICAgICAgICAgICAgICAgIHRhc2tuYW1lID0gdGFza25hbWVbOi05XQorICAgICAgICAgICAgb3V0dGFza3MuYXBwZW5kKCclczolcycgJSAocmVjaXBlY2FjaGVzW21jXS5wa2dfZm5bZm5dLCB0YXNrbmFtZSkpCisgICAgZmluYWxseToKKyAgICAgICAgdGluZm9pbC5zaHV0ZG93bigpCisgICAgcmV0dXJuIG91dHRhc2tzCisKKworZGVmIGNoZWNrKGFyZ3MpOgorICAgIHRtcGRpciA9IHRlbXBmaWxlLm1rZHRlbXAocHJlZml4PSdvZS1jaGVjay1zc3RhdGUtJykKKyAgICB0cnk6CisgICAgICAgIGVudiA9IG9zLmVudmlyb24uY29weSgpCisgICAgICAgIGlmIG5vdCBhcmdzLnNhbWVfdG1wZGlyOgorICAgICAgICAgICAgZW52WydCQl9FTlZfRVhUUkFXSElURSddID0gZW52LmdldCgnQkJfRU5WX0VYVFJBV0hJVEUnLCAnJykgKyAnIFRNUERJUl9mb3JjZXZhcmlhYmxlJworICAgICAgICAgICAgZW52WydUTVBESVJfZm9yY2V2YXJpYWJsZSddID0gdG1wZGlyCisKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgb3V0cHV0ID0gc3VicHJvY2Vzcy5jaGVja19vdXRwdXQoCisgICAgICAgICAgICAgICAgICAgICdiaXRiYWtlIC1uICVzJyAlICcgJy5qb2luKGFyZ3MudGFyZ2V0KSwKKyAgICAgICAgICAgICAgICAgICAgc3RkZXJyPXN1YnByb2Nlc3MuU1RET1VULAorICAgICAgICAgICAgICAgICAgICBlbnY9ZW52LAorICAgICAgICAgICAgICAgICAgICBzaGVsbD1UcnVlKQorCisgICAgICAgICAgICB0YXNrX3JlID0gcmUuY29tcGlsZSgnTk9URTogUnVubmluZyBzZXRzY2VuZSB0YXNrIFswLTldKyBvZiBbMC05XSsgXCgoW14pXSspXCknKQorICAgICAgICAgICAgdGFza3MgPSBbXQorICAgICAgICAgICAgZm9yIGxpbmUgaW4gb3V0cHV0LmRlY29kZSgndXRmLTgnKS5zcGxpdGxpbmVzKCk6CisgICAgICAgICAgICAgICAgcmVzID0gdGFza19yZS5tYXRjaChsaW5lKQorICAgICAgICAgICAgICAgIGlmIHJlczoKKyAgICAgICAgICAgICAgICAgICAgdGFza3MuYXBwZW5kKHJlcy5ncm91cCgxKSkKKyAgICAgICAgICAgIG91dHRhc2tzID0gdHJhbnNsYXRlX3ZpcnR1YWxmbnModGFza3MpCisgICAgICAgIGV4Y2VwdCBzdWJwcm9jZXNzLkNhbGxlZFByb2Nlc3NFcnJvciBhcyBlOgorICAgICAgICAgICAgcHJpbnQoJ0VSUk9SOiBiaXRiYWtlIGZhaWxlZDpcbiVzJyAlIGUub3V0cHV0LmRlY29kZSgndXRmLTgnKSkKKyAgICAgICAgICAgIHJldHVybiBlLnJldHVybmNvZGUKKyAgICBmaW5hbGx5OgorICAgICAgICBzaHV0aWwucm10cmVlKHRtcGRpcikKKworICAgIGlmIGFyZ3MubG9nOgorICAgICAgICB3aXRoIG9wZW4oYXJncy5sb2csICd3YicpIGFzIGY6CisgICAgICAgICAgICBmLndyaXRlKG91dHB1dCkKKworICAgIGlmIGFyZ3Mub3V0ZmlsZToKKyAgICAgICAgd2l0aCBvcGVuKGFyZ3Mub3V0ZmlsZSwgJ3cnKSBhcyBmOgorICAgICAgICAgICAgZm9yIHRhc2sgaW4gb3V0dGFza3M6CisgICAgICAgICAgICAgICAgZi53cml0ZSgnJXNcbicgJSB0YXNrKQorICAgIGVsc2U6CisgICAgICAgIGZvciB0YXNrIGluIG91dHRhc2tzOgorICAgICAgICAgICAgcHJpbnQodGFzaykKKworICAgIHJldHVybiAwCisKKworZGVmIG1haW4oKToKKyAgICBwYXJzZXIgPSBhcmdwYXJzZV9vZS5Bcmd1bWVudFBhcnNlcihkZXNjcmlwdGlvbj0nT3BlbkVtYmVkZGVkIHNzdGF0ZSBjaGVjayB0b29sLiBEb2VzIGEgZHJ5LXJ1biB0byBjaGVjayByZXN0b3JpbmcgdGhlIHNwZWNpZmllZCB0YXJnZXRzIGZyb20gc2hhcmVkIHN0YXRlLCBhbmQgbGlzdHMgdGhlIHRhc2tzIHRoYXQgd291bGQgYmUgcmVzdG9yZWQuIFNldCBCQl9TRVRTQ0VORV9FTkZPUkNFPTEgaW4gdGhlIGVudmlyb25tZW50IGlmIHlvdSB3aXNoIHRvIGVuc3VyZSByZWFsIHRhc2tzIGFyZSBkaXNhbGxvd2VkLicpCisKKyAgICBwYXJzZXIuYWRkX2FyZ3VtZW50KCd0YXJnZXQnLCBuYXJncz0nKycsIGhlbHA9J1RhcmdldCB0byBjaGVjaycpCisgICAgcGFyc2VyLmFkZF9hcmd1bWVudCgnLW8nLCAnLS1vdXRmaWxlJywgaGVscD0nV3JpdGUgbGlzdCB0byBhIGZpbGUgaW5zdGVhZCBvZiBzdGRvdXQnKQorICAgIHBhcnNlci5hZGRfYXJndW1lbnQoJy1sJywgJy0tbG9nJywgaGVscD0nV3JpdGUgZnVsbCBsb2cgdG8gYSBmaWxlJykKKyAgICBwYXJzZXIuYWRkX2FyZ3VtZW50KCctcycsICctLXNhbWUtdG1wZGlyJywgYWN0aW9uPSdzdG9yZV90cnVlJywgaGVscD0nVXNlIHNhbWUgVE1QRElSIGZvciBjaGVjayAobGlzdCB3aWxsIHRoZW4gYmUgZGVwZW5kZW50IG9uIHdoYXQgdGFza3MgaGF2ZSBleGVjdXRlZCBwcmV2aW91c2x5KScpCisKKyAgICBwYXJzZXIuc2V0X2RlZmF1bHRzKGZ1bmM9Y2hlY2spCisKKyAgICBhcmdzID0gcGFyc2VyLnBhcnNlX2FyZ3MoKQorCisgICAgcmV0ID0gYXJncy5mdW5jKGFyZ3MpCisgICAgcmV0dXJuIHJldAorCisKK2lmIF9fbmFtZV9fID09ICJfX21haW5fXyI6CisgICAgdHJ5OgorICAgICAgICByZXQgPSBtYWluKCkKKyAgICBleGNlcHQgRXhjZXB0aW9uOgorICAgICAgICByZXQgPSAxCisgICAgICAgIGltcG9ydCB0cmFjZWJhY2sKKyAgICAgICAgdHJhY2ViYWNrLnByaW50X2V4YygpCisgICAgc3lzLmV4aXQocmV0KQpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L3NjcmlwdHMvb2UtZ2l0LXByb3h5IGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L3NjcmlwdHMvb2UtZ2l0LXByb3h5CmluZGV4IDEyNDc5MDIuLjAwNzhlOTUgMTAwNzU1Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9zY3JpcHRzL29lLWdpdC1wcm94eQorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvc2NyaXB0cy9vZS1naXQtcHJveHkKQEAgLTg2LDEzICs4NiwxNCBAQAogCiAJIyBNYXRjaCBieSBuZXRtYXNrCiAJaWYgdmFsaWRfaXB2NCAkR0xPQjsgdGhlbgotCQlIT1NUX0lQPSQoZ2V0aG9zdGlwIC1kICRIT1NUKQotCQlpZiB2YWxpZF9pcHY0ICRIT1NUX0lQOyB0aGVuCi0JCQltYXRjaF9pcHY0ICRHTE9CICRIT1NUX0lQCi0JCQlpZiBbICQ/IC1lcSAwIF07IHRoZW4KLQkJCQlyZXR1cm4gMAorCQlmb3IgSE9TVF9JUCBpbiAkKGdldGVudCBhaG9zdHN2NCAkSE9TVCB8IGdyZXAgJyBTVFJFQU0gJyB8IGN1dCAtZCAnICcgLWYgMSkgOyBkbworCQkJaWYgdmFsaWRfaXB2NCAkSE9TVF9JUDsgdGhlbgorCQkJCW1hdGNoX2lwdjQgJEdMT0IgJEhPU1RfSVAKKwkJCQlpZiBbICQ/IC1lcSAwIF07IHRoZW4KKwkJCQkJcmV0dXJuIDAKKwkJCQlmaQogCQkJZmkKLQkJZmkKKwkJZG9uZQogCWZpCiAKIAlyZXR1cm4gMQpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L3NjcmlwdHMvb2UtZ25vbWUtdGVybWluYWwtcGhvbmVob21lIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L3NjcmlwdHMvb2UtZ25vbWUtdGVybWluYWwtcGhvbmVob21lCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmUwMjM1NDgKLS0tIC9kZXYvbnVsbAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvc2NyaXB0cy9vZS1nbm9tZS10ZXJtaW5hbC1waG9uZWhvbWUKQEAgLTAsMCArMSwxMCBAQAorIyEvYmluL3NoCisjCisjIEdub21lIHRlcm1pbmFsIHdvbid0IHRlbGwgdXMgd2hpY2ggUElEIGEgZ2l2ZW4gY29tbWFuZCBpcyBydW4gYXMgCisjIG9yIGFsbG93IGEgc2luZ2xlIGluc3RhbmNlIHNvIHdlIGNhbid0IHRlbGwgd2hlbiBpdCBjb21wbGV0ZXMuCisjIFRoaXMgYWxsb3dzIHVzIHRvIGZpZ3VyZSBvdXQgdGhlIFBJRCBvZiB0aGUgdGFyZ2V0IHNvIHdlIGNhbiB0ZWxsIAorIyB3aGVuIGl0cyBkb25lLgorIworZWNobyAkJCA+ICQxCitzaGlmdAorZXhlYyAkQApkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L3NjcmlwdHMvb2UtcGtnZGF0YS11dGlsIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L3NjcmlwdHMvb2UtcGtnZGF0YS11dGlsCmluZGV4IGEwNGU0NGQuLmJiOTE3YjQgMTAwNzU1Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9zY3JpcHRzL29lLXBrZ2RhdGEtdXRpbAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvc2NyaXB0cy9vZS1wa2dkYXRhLXV0aWwKQEAgLTEsNCArMSw0IEBACi0jIS91c3IvYmluL2VudiBweXRob24KKyMhL3Vzci9iaW4vZW52IHB5dGhvbjMKIAogIyBPcGVuRW1iZWRkZWQgcGtnZGF0YSB1dGlsaXR5CiAjCkBAIC0yNDAsNyArMjQwLDcgQEAKICAgICAgICAgc3lzLmV4aXQoMSkKIAogICAgIGlmIGFyZ3MucmV2ZXJzZToKLSAgICAgICAgaXRlbXMgPSBtYXBwaW5ncy52YWx1ZXMoKQorICAgICAgICBpdGVtcyA9IGxpc3QobWFwcGluZ3MudmFsdWVzKCkpCiAgICAgZWxzZToKICAgICAgICAgaXRlbXMgPSBbXQogICAgICAgICBmb3IgcGtnIGluIHBrZ3M6CkBAIC0yNzQsNiArMjc0LDYxIEBACiAgICAgICAgIGl0ZW1zLmV4dGVuZChtYXBwaW5ncy5nZXQocGtnLCBbXSkpCiAgICAgcHJpbnQoJ1xuJy5qb2luKGl0ZW1zKSkKIAorZGVmIHBhY2thZ2VfaW5mbyhhcmdzKToKKyAgICAjIEhhbmRsZSBib3RoIG11bHRpcGxlIGFyZ3VtZW50cyBhbmQgbXVsdGlwbGUgdmFsdWVzIHdpdGhpbiBhbiBhcmcgKG9sZCBzeW50YXgpCisgICAgcGFja2FnZXMgPSBbXQorICAgIGlmIGFyZ3MuZmlsZToKKyAgICAgICAgd2l0aCBvcGVuKGFyZ3MuZmlsZSwgJ3InKSBhcyBmOgorICAgICAgICAgICAgZm9yIGxpbmUgaW4gZjoKKyAgICAgICAgICAgICAgICBzcGxpdGxpbmUgPSBsaW5lLnNwbGl0KCkKKyAgICAgICAgICAgICAgICBpZiBzcGxpdGxpbmU6CisgICAgICAgICAgICAgICAgICAgIHBhY2thZ2VzLmFwcGVuZChzcGxpdGxpbmVbMF0pCisgICAgZWxzZToKKyAgICAgICAgZm9yIHBrZ2l0ZW0gaW4gYXJncy5wa2c6CisgICAgICAgICAgICBwYWNrYWdlcy5leHRlbmQocGtnaXRlbS5zcGxpdCgpKQorICAgICAgICBpZiBub3QgcGFja2FnZXM6CisgICAgICAgICAgICBsb2dnZXIuZXJyb3IoIk5vIHBhY2thZ2VzIHNwZWNpZmllZCIpCisgICAgICAgICAgICBzeXMuZXhpdCgxKQorCisgICAgbWFwcGluZ3MgPSBkZWZhdWx0ZGljdChsYW1iZGE6IGRlZmF1bHRkaWN0KHN0cikpCisgICAgZm9yIHBrZyBpbiBwYWNrYWdlczoKKyAgICAgICAgcGtnZmlsZSA9IG9zLnBhdGguam9pbihhcmdzLnBrZ2RhdGFfZGlyLCAncnVudGltZS1yZXZlcnNlJywgcGtnKQorICAgICAgICBpZiBvcy5wYXRoLmV4aXN0cyhwa2dmaWxlKToKKyAgICAgICAgICAgIHdpdGggb3Blbihwa2dmaWxlLCAncicpIGFzIGY6CisgICAgICAgICAgICAgICAgZm9yIGxpbmUgaW4gZjoKKyAgICAgICAgICAgICAgICAgICAgZmllbGRzID0gbGluZS5yc3RyaXAoKS5zcGxpdCgnOiAnKQorICAgICAgICAgICAgICAgICAgICBpZiBmaWVsZHNbMF0uZW5kc3dpdGgoIl8iICsgcGtnKToKKyAgICAgICAgICAgICAgICAgICAgICAgIGsgPSBmaWVsZHNbMF1bOmxlbihmaWVsZHNbMF0pIC0gbGVuKHBrZykgLSAxXQorICAgICAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICAgICAgayA9IGZpZWxkc1swXQorICAgICAgICAgICAgICAgICAgICB2ID0gZmllbGRzWzFdIGlmIGxlbihmaWVsZHMpID09IDIgZWxzZSAiIgorICAgICAgICAgICAgICAgICAgICBtYXBwaW5nc1twa2ddW2tdID0gdgorCisgICAgaWYgbGVuKG1hcHBpbmdzKSA8IGxlbihwYWNrYWdlcyk6CisgICAgICAgIG1pc3NpbmcgPSBsaXN0KHNldChwYWNrYWdlcykgLSBzZXQobWFwcGluZ3Mua2V5cygpKSkKKyAgICAgICAgbG9nZ2VyLmVycm9yKCJUaGUgZm9sbG93aW5nIHBhY2thZ2VzIGNvdWxkIG5vdCBiZSBmb3VuZDogJXMiICUKKyAgICAgICAgICAgICAgICAgICAgICcsICcuam9pbihtaXNzaW5nKSkKKyAgICAgICAgc3lzLmV4aXQoMSkKKworICAgIGl0ZW1zID0gW10KKyAgICBmb3IgcGtnIGluIHBhY2thZ2VzOgorICAgICAgICBwa2dfdmVyc2lvbiA9IG1hcHBpbmdzW3BrZ11bJ1BLR1YnXQorICAgICAgICBpZiBtYXBwaW5nc1twa2ddWydQS0dFJ106CisgICAgICAgICAgICBwa2dfdmVyc2lvbiA9IG1hcHBpbmdzW3BrZ11bJ1BLR0UnXSArICI6IiArIHBrZ192ZXJzaW9uCisgICAgICAgIGlmIG1hcHBpbmdzW3BrZ11bJ1BLR1InXToKKyAgICAgICAgICAgIHBrZ192ZXJzaW9uID0gcGtnX3ZlcnNpb24gKyAiLSIgKyBtYXBwaW5nc1twa2ddWydQS0dSJ10KKyAgICAgICAgcmVjaXBlID0gbWFwcGluZ3NbcGtnXVsnUE4nXQorICAgICAgICByZWNpcGVfdmVyc2lvbiA9IG1hcHBpbmdzW3BrZ11bJ1BWJ10KKyAgICAgICAgaWYgbWFwcGluZ3NbcGtnXVsnUEUnXToKKyAgICAgICAgICAgIHJlY2lwZV92ZXJzaW9uID0gbWFwcGluZ3NbcGtnXVsnUEUnXSArICI6IiArIHJlY2lwZV92ZXJzaW9uCisgICAgICAgIGlmIG1hcHBpbmdzW3BrZ11bJ1BSJ106CisgICAgICAgICAgICByZWNpcGVfdmVyc2lvbiA9IHJlY2lwZV92ZXJzaW9uICsgIi0iICsgbWFwcGluZ3NbcGtnXVsnUFInXQorICAgICAgICBwa2dfc2l6ZSA9IG1hcHBpbmdzW3BrZ11bJ1BLR1NJWkUnXQorCisgICAgICAgIGl0ZW1zLmFwcGVuZCgiJXMgJXMgJXMgJXMgJXMiICUKKyAgICAgICAgICAgICAgICAgICAgIChwa2csIHBrZ192ZXJzaW9uLCByZWNpcGUsIHJlY2lwZV92ZXJzaW9uLCBwa2dfc2l6ZSkpCisgICAgcHJpbnQoJ1xuJy5qb2luKGl0ZW1zKSkKKwogZGVmIGdldF9yZWNpcGVfcGtncyhwa2dkYXRhX2RpciwgcmVjaXBlLCB1bnBhY2thZ2VkKToKICAgICByZWNpcGVkYXRhZmlsZSA9IG9zLnBhdGguam9pbihwa2dkYXRhX2RpciwgcmVjaXBlKQogICAgIGlmIG5vdCBvcy5wYXRoLmV4aXN0cyhyZWNpcGVkYXRhZmlsZSk6CkBAIC00MzcsNiArNDkyLDcgQEAKICAgICBwYXJzZXIuYWRkX2FyZ3VtZW50KCctZCcsICctLWRlYnVnJywgaGVscD0nRW5hYmxlIGRlYnVnIG91dHB1dCcsIGFjdGlvbj0nc3RvcmVfdHJ1ZScpCiAgICAgcGFyc2VyLmFkZF9hcmd1bWVudCgnLXAnLCAnLS1wa2dkYXRhLWRpcicsIGhlbHA9J1BhdGggdG8gcGtnZGF0YSBkaXJlY3RvcnkgKGRldGVybWluZWQgYXV0b21hdGljYWxseSBpZiBub3Qgc3BlY2lmaWVkKScpCiAgICAgc3VicGFyc2VycyA9IHBhcnNlci5hZGRfc3VicGFyc2Vycyh0aXRsZT0nc3ViY29tbWFuZHMnLCBtZXRhdmFyPSc8c3ViY29tbWFuZD4nKQorICAgIHN1YnBhcnNlcnMucmVxdWlyZWQgPSBUcnVlCiAKICAgICBwYXJzZXJfbG9va3VwX3BrZyA9IHN1YnBhcnNlcnMuYWRkX3BhcnNlcignbG9va3VwLXBrZycsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWxwPSdUcmFuc2xhdGUgYmV0d2VlbiByZWNpcGUtc3BhY2UgcGFja2FnZSBuYW1lcyBhbmQgcnVudGltZSBwYWNrYWdlIG5hbWVzJywKQEAgLTQ2OSw2ICs1MjUsMTMgQEAKICAgICBwYXJzZXJfbG9va3VwX3JlY2lwZS5hZGRfYXJndW1lbnQoJ3BrZycsIG5hcmdzPScrJywgaGVscD0nUnVudGltZSBwYWNrYWdlIG5hbWUgdG8gbG9vayB1cCcpCiAgICAgcGFyc2VyX2xvb2t1cF9yZWNpcGUuc2V0X2RlZmF1bHRzKGZ1bmM9bG9va3VwX3JlY2lwZSkKIAorICAgIHBhcnNlcl9wYWNrYWdlX2luZm8gPSBzdWJwYXJzZXJzLmFkZF9wYXJzZXIoJ3BhY2thZ2UtaW5mbycsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWxwPSdTaG93cyB2ZXJzaW9uLCByZWNpcGUgYW5kIHNpemUgaW5mb3JtYXRpb24gZm9yIG9uZSBvciBtb3JlIHBhY2thZ2VzJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uPSdMb29rcyB1cCB0aGUgc3BlY2lmaWVkIHJ1bnRpbWUgcGFja2FnZShzKSBhbmQgZGlzcGxheSBpbmZvcm1hdGlvbicpCisgICAgcGFyc2VyX3BhY2thZ2VfaW5mby5hZGRfYXJndW1lbnQoJ3BrZycsIG5hcmdzPScqJywgaGVscD0nUnVudGltZSBwYWNrYWdlIG5hbWUgdG8gbG9vayB1cCcpCisgICAgcGFyc2VyX3BhY2thZ2VfaW5mby5hZGRfYXJndW1lbnQoJy1mJywgJy0tZmlsZScsIGhlbHA9J1JlYWQgcGFja2FnZSBuYW1lcyBmcm9tIHRoZSBzcGVjaWZpZWQgZmlsZSAob25lIHBlciBsaW5lLCBmaXJzdCBmaWVsZCBvbmx5KScpCisgICAgcGFyc2VyX3BhY2thZ2VfaW5mby5zZXRfZGVmYXVsdHMoZnVuYz1wYWNrYWdlX2luZm8pCisKICAgICBwYXJzZXJfZmluZF9wYXRoID0gc3VicGFyc2Vycy5hZGRfcGFyc2VyKCdmaW5kLXBhdGgnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVscD0nRmluZCBwYWNrYWdlIHByb3ZpZGluZyBhIHRhcmdldCBwYXRoJywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uPSdGaW5kcyB0aGUgcmVjaXBlLXNwYWNlIHBhY2thZ2UgcHJvdmlkaW5nIHRoZSBzcGVjaWZpZWQgdGFyZ2V0IHBhdGgnKQpAQCAtNTA2LDcgKzU2OSwxMCBAQAogICAgICAgICAgICAgc3lzLmV4aXQoMSkKICAgICAgICAgbG9nZ2VyLmRlYnVnKCdGb3VuZCBiaXRiYWtlIHBhdGg6ICVzJyAlIGJpdGJha2VwYXRoKQogICAgICAgICB0aW5mb2lsID0gdGluZm9pbF9pbml0KCkKLSAgICAgICAgYXJncy5wa2dkYXRhX2RpciA9IHRpbmZvaWwuY29uZmlnX2RhdGEuZ2V0VmFyKCdQS0dEQVRBX0RJUicsIFRydWUpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGFyZ3MucGtnZGF0YV9kaXIgPSB0aW5mb2lsLmNvbmZpZ19kYXRhLmdldFZhcignUEtHREFUQV9ESVInLCBUcnVlKQorICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgdGluZm9pbC5zaHV0ZG93bigpCiAgICAgICAgIGxvZ2dlci5kZWJ1ZygnVmFsdWUgb2YgUEtHREFUQV9ESVIgaXMgIiVzIicgJSBhcmdzLnBrZ2RhdGFfZGlyKQogICAgICAgICBpZiBub3QgYXJncy5wa2dkYXRhX2RpcjoKICAgICAgICAgICAgIGxvZ2dlci5lcnJvcignVW5hYmxlIHRvIGRldGVybWluZSBwa2dkYXRhIGRpcmVjdG9yeSBmcm9tIFBLR0RBVEFfRElSJykKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9zY3JpcHRzL29lLXB1Ymxpc2gtc2RrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L3NjcmlwdHMvb2UtcHVibGlzaC1zZGsKaW5kZXggNTU4NzJmMi4uNGZlODk3NCAxMDA3NTUKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L3NjcmlwdHMvb2UtcHVibGlzaC1zZGsKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L3NjcmlwdHMvb2UtcHVibGlzaC1zZGsKQEAgLTEsNCArMSw0IEBACi0jIS91c3IvYmluL2VudiBweXRob24KKyMhL3Vzci9iaW4vZW52IHB5dGhvbjMKIAogIyBPcGVuRW1iZWRkZWQgU0RLIHB1Ymxpc2hpbmcgdG9vbAogCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvc2NyaXB0cy9vZS1ydW4tbmF0aXZlIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L3NjcmlwdHMvb2UtcnVuLW5hdGl2ZQpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi40OTZlMzRmCi0tLSAvZGV2L251bGwKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L3NjcmlwdHMvb2UtcnVuLW5hdGl2ZQpAQCAtMCwwICsxLDQ4IEBACisjIS9iaW4vc2gKKyMKKyMgQ29weXJpZ2h0IChjKSAyMDE2LCAgSW50ZWwgQ29ycG9yYXRpb24uCisjIEFsbCBSaWdodHMgUmVzZXJ2ZWQKKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7ICB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisjIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisjIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisjIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7ICB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlCisjIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorIworIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorIyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgIGlmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPgorIworCisjCisjIFRoaXMgc2NyaXB0IGlzIGZvciBydW5uaW5nIHRvb2xzIGZyb20gbmF0aXZlIG9lIHN5c3Jvb3QKKyMKKworaWYgWyAkIyAtbHQgMSAtbyAiJDEiID0gJy0taGVscCcgLW8gIiQxIiA9ICctaCcgXSA7IHRoZW4KKyAgICBlY2hvICJVc2FnZTogJDAgPG5hdGl2ZSB0b29sPiBbcGFyYW1ldGVyc10iCisgICAgZXhpdCAxCitmaQorCitTWVNST09UX1NFVFVQX1NDUklQVD1gd2hpY2ggb2UtZmluZC1uYXRpdmUtc3lzcm9vdCAyPiAvZGV2L251bGxgCitpZiBbIC16ICIkU1lTUk9PVF9TRVRVUF9TQ1JJUFQiIF07IHRoZW4KKyAgICAgICAgZWNobyAiRXJyb3I6IFVuYWJsZSB0byBmaW5kIG9lLWZpbmQtbmF0aXZlLXN5c3Jvb3Qgc2NyaXB0IgorICAgICAgICBleGl0IDEKK2ZpCisuICRTWVNST09UX1NFVFVQX1NDUklQVAorCitPTERQQVRIPSRQQVRICisKKyMgbG9vayBmb3IgYSB0b29sIG9ubHkgaW4gbmF0aXZlIHN5c3Jvb3QKK1BBVEg9JE9FQ09SRV9OQVRJVkVfU1lTUk9PVC91c3IvYmluOiRPRUNPUkVfTkFUSVZFX1NZU1JPT1QvYmluOiRPRUNPUkVfTkFUSVZFX1NZU1JPT1QvdXNyL3NiaW46JE9FQ09SRV9OQVRJVkVfU1lTUk9PVC9zYmluCit0b29sPWAvdXNyL2Jpbi93aGljaCAkMSAyPi9kZXYvbnVsbGAKKworaWYgWyAtbiAiJHRvb2wiIF0gOyB0aGVuCisgICAgIyBhZGQgb2xkIHBhdGggdG8gYWxsb3cgdXNhZ2Ugb2YgaG9zdCB0b29scworICAgIFBBVEg9JFBBVEg6JE9MRF9QQVRIICRACitlbHNlCisgICAgZWNobyAiRXJyb3I6IFVuYWJsZSB0byBmaW5kICckMScgaW4gbmF0aXZlIHN5c3Jvb3QiCisgICAgZXhpdCAxCitmaQpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L3NjcmlwdHMvb2Utc2VsZnRlc3QgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvc2NyaXB0cy9vZS1zZWxmdGVzdAppbmRleCA1ZTIzZWYwLi5kOWZmZDQwIDEwMDc1NQotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvc2NyaXB0cy9vZS1zZWxmdGVzdAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvc2NyaXB0cy9vZS1zZWxmdGVzdApAQCAtMSw0ICsxLDQgQEAKLSMhL3Vzci9iaW4vZW52IHB5dGhvbgorIyEvdXNyL2Jpbi9lbnYgcHl0aG9uMwogCiAjIENvcHlyaWdodCAoYykgMjAxMyBJbnRlbCBDb3Jwb3JhdGlvbgogIwpAQCAtMzQsNiArMzQsOCBAQAogaW1wb3J0IHRpbWUgYXMgdAogaW1wb3J0IHJlCiBpbXBvcnQgZm5tYXRjaAoraW1wb3J0IGNvbGxlY3Rpb25zCitpbXBvcnQgaW1wCiAKIHN5cy5wYXRoLmluc2VydCgwLCBvcy5wYXRoLmRpcm5hbWUob3MucGF0aC5yZWFscGF0aChfX2ZpbGVfXykpICsgJy9saWInKQogaW1wb3J0IHNjcmlwdHBhdGgKQEAgLTQ2LDggKzQ4LDE5IEBACiBmcm9tIG9lcWEudXRpbHMuY29tbWFuZHMgaW1wb3J0IHJ1bkNtZCwgZ2V0X2JiX3ZhciwgZ2V0X3Rlc3RfbGF5ZXIKIGZyb20gb2VxYS5zZWxmdGVzdC5iYXNlIGltcG9ydCBvZVNlbGZUZXN0LCBnZXRfYXZhaWxhYmxlX21hY2hpbmVzCiAKK3RyeToKKyAgICBpbXBvcnQgeG1scnVubmVyCisgICAgZnJvbSB4bWxydW5uZXIucmVzdWx0IGltcG9ydCBfWE1MVGVzdFJlc3VsdCBhcyBUZXN0UmVzdWx0CisgICAgZnJvbSB4bWxydW5uZXIgaW1wb3J0IFhNTFRlc3RSdW5uZXIgYXMgX1Rlc3RSdW5uZXIKK2V4Y2VwdCBJbXBvcnRFcnJvcjoKKyAgICAjIHVzZSB0aGUgYmFzZSBydW5uZXIgaW5zdGVhZAorICAgIGZyb20gdW5pdHRlc3QgaW1wb3J0IFRleHRUZXN0UmVzdWx0IGFzIFRlc3RSZXN1bHQKKyAgICBmcm9tIHVuaXR0ZXN0IGltcG9ydCBUZXh0VGVzdFJ1bm5lciBhcyBfVGVzdFJ1bm5lcgorCitsb2dfcHJlZml4ID0gIm9lLXNlbGZ0ZXN0LSIgKyB0LnN0cmZ0aW1lKCIlWSVtJWQtJUglTSVTIikKKwogZGVmIGxvZ2dlcl9jcmVhdGUoKToKLSAgICBsb2dfZmlsZSA9ICJvZS1zZWxmdGVzdC0iICsgdC5zdHJmdGltZSgiJVktJW0tJWRfJUg6JU06JVMiKSArICIubG9nIgorICAgIGxvZ19maWxlID0gbG9nX3ByZWZpeCArICIubG9nIgogICAgIGlmIG9zLnBhdGguZXhpc3RzKCJvZS1zZWxmdGVzdC5sb2ciKTogb3MucmVtb3ZlKCJvZS1zZWxmdGVzdC5sb2ciKQogICAgIG9zLnN5bWxpbmsobG9nX2ZpbGUsICJvZS1zZWxmdGVzdC5sb2ciKQogCkBAIC0yMTEsNyArMjI0LDcgQEAKICAgICB0cnk6CiAgICAgICAgIGltcG9ydCBpbXBvcnRsaWIKICAgICAgICAgbW9kbGliID0gaW1wb3J0bGliLmltcG9ydF9tb2R1bGUodG1vZCkKLSAgICAgICAgZm9yIG1vZCBpbiB2YXJzKG1vZGxpYikudmFsdWVzKCk6CisgICAgICAgIGZvciBtb2QgaW4gbGlzdCh2YXJzKG1vZGxpYikudmFsdWVzKCkpOgogICAgICAgICAgICAgaWYgaXNpbnN0YW5jZShtb2QsIHR5cGUob2VTZWxmVGVzdCkpIGFuZCBpc3N1YmNsYXNzKG1vZCwgb2VTZWxmVGVzdCkgYW5kIG1vZCBpcyBub3Qgb2VTZWxmVGVzdDoKICAgICAgICAgICAgICAgICBmb3IgdGVzdCBpbiBkaXIobW9kKToKICAgICAgICAgICAgICAgICAgICAgaWYgdGVzdC5zdGFydHN3aXRoKCd0ZXN0XycpIGFuZCBoYXNhdHRyKHZhcnMobW9kKVt0ZXN0XSwgJ19fY2FsbF9fJyk6CkBAIC0yMjAsMTIgKzIzMywxMiBAQAogICAgICAgICAgICAgICAgICAgICAgICAgdHJ5OgogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRpZCA9IHZhcnMobW9kKVt0ZXN0XS50ZXN0X2Nhc2UKICAgICAgICAgICAgICAgICAgICAgICAgIGV4Y2VwdDoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmludCAnREVCVUc6IHRjIGlkIG1pc3NpbmcgZm9yICcgKyBzdHIodGVzdCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmludCgnREVCVUc6IHRjIGlkIG1pc3NpbmcgZm9yICcgKyBzdHIodGVzdCkpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGlkID0gTm9uZQogICAgICAgICAgICAgICAgICAgICAgICAgdHJ5OgogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR0YWcgPSB2YXJzKG1vZClbdGVzdF0udGFnX19mZWF0dXJlCiAgICAgICAgICAgICAgICAgICAgICAgICBleGNlcHQ6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBwcmludCAnREVCVUc6IGZlYXR1cmUgdGFnIG1pc3NpbmcgZm9yICcgKyBzdHIodGVzdCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIHByaW50KCdERUJVRzogZmVhdHVyZSB0YWcgbWlzc2luZyBmb3IgJyArIHN0cih0ZXN0KSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0dGFnID0gTm9uZQogCiAgICAgICAgICAgICAgICAgICAgICAgICAjIE5PVEU6IGZvciBzb21lIHJlYXNvbiBsc3RyaXAoKSBkb2Vzbid0IHdvcmsgZm9yIG1vZC5fX21vZHVsZV9fCkBAIC0yNjAsMTYgKzI3MywyMiBAQAogICAgICAgICByZXN1bHQgPSBbXQogICAgICAgICByZW1haW5pbmcgPSB2YWx1ZXNbOl0KICAgICAgICAgZm9yIGtleSBpbiBrZXl3b3JkOgorICAgICAgICAgICAgZm91bmQgPSBGYWxzZQogICAgICAgICAgICAgaWYga2V5IGluIHJlbWFpbmluZzoKICAgICAgICAgICAgICAgICAjIFJlZ3VsYXIgbWF0Y2hpbmcgb2YgZXhhY3QgaXRlbQogICAgICAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQoa2V5KQogICAgICAgICAgICAgICAgIHJlbWFpbmluZy5yZW1vdmUoa2V5KQorICAgICAgICAgICAgICAgIGZvdW5kID0gVHJ1ZQogICAgICAgICAgICAgZWxzZToKICAgICAgICAgICAgICAgICAjIFdpbGRjYXJkIG1hdGNoaW5nCiAgICAgICAgICAgICAgICAgcGF0dGVybiA9IHJlLmNvbXBpbGUoZm5tYXRjaC50cmFuc2xhdGUociIlcyIgJSBrZXkpKQogICAgICAgICAgICAgICAgIGFkZGVkID0gW3ggZm9yIHggaW4gcmVtYWluaW5nIGlmIHBhdHRlcm4ubWF0Y2goeCldCi0gICAgICAgICAgICAgICAgcmVzdWx0LmV4dGVuZChhZGRlZCkKLSAgICAgICAgICAgICAgICByZW1haW5pbmcgPSBbeCBmb3IgeCBpbiByZW1haW5pbmcgaWYgeCBub3QgaW4gYWRkZWRdCisgICAgICAgICAgICAgICAgaWYgYWRkZWQ6CisgICAgICAgICAgICAgICAgICAgIHJlc3VsdC5leHRlbmQoYWRkZWQpCisgICAgICAgICAgICAgICAgICAgIHJlbWFpbmluZyA9IFt4IGZvciB4IGluIHJlbWFpbmluZyBpZiB4IG5vdCBpbiBhZGRlZF0KKyAgICAgICAgICAgICAgICAgICAgZm91bmQgPSBUcnVlCisgICAgICAgICAgICBpZiBub3QgZm91bmQ6CisgICAgICAgICAgICAgICAgbG9nLmVycm9yKCJGYWlsZWQgdG8gZmluZCB0ZXN0OiAlcyIgJSBrZXkpCiAKICAgICAgICAgcmV0dXJuIHJlc3VsdAogCkBAIC0zMjAsMTcgKzMzOSwxNyBAQAogCiAgICAgdHMgPSBzb3J0ZWQoWyAodGMudGNpZCwgdGMudGN0YWcsIHRjLnRjbmFtZSwgdGMudGNjbGFzcywgdGMudGNtb2R1bGUpIGZvciB0YyBpbiBnZXRfdGVzdHN1aXRlX2J5KGNyaXRlcmlhLCBrZXl3b3JkKSBdKQogCi0gICAgcHJpbnQgJyUtNHNcdCUtMjBzXHQlLTYwc1x0JS0yNXNcdCUtMjBzJyAlICgnaWQnLCAndGFnJywgJ25hbWUnLCAnY2xhc3MnLCAnbW9kdWxlJykKLSAgICBwcmludCAnXycgKiAxNTAKKyAgICBwcmludCgnJS00c1x0JS0yMHNcdCUtNjBzXHQlLTI1c1x0JS0yMHMnICUgKCdpZCcsICd0YWcnLCAnbmFtZScsICdjbGFzcycsICdtb2R1bGUnKSkKKyAgICBwcmludCgnXycgKiAxNTApCiAgICAgZm9yIHQgaW4gdHM6CiAgICAgICAgIGlmIGlzaW5zdGFuY2UodFsxXSwgKHR1cGxlLCBsaXN0KSk6Ci0gICAgICAgICAgICBwcmludCAnJS00c1x0JS0yMHNcdCUtNjBzXHQlLTI1c1x0JS0yMHMnICUgKHRbMF0sICcsICcuam9pbih0WzFdKSwgdFsyXSwgdFszXSwgdFs0XSkKKyAgICAgICAgICAgIHByaW50KCclLTRzXHQlLTIwc1x0JS02MHNcdCUtMjVzXHQlLTIwcycgJSAodFswXSwgJywgJy5qb2luKHRbMV0pLCB0WzJdLCB0WzNdLCB0WzRdKSkKICAgICAgICAgZWxzZToKLSAgICAgICAgICAgIHByaW50ICclLTRzXHQlLTIwc1x0JS02MHNcdCUtMjVzXHQlLTIwcycgJSB0Ci0gICAgcHJpbnQgJ18nICogMTUwCi0gICAgcHJpbnQgJ0ZpbHRlcmluZyBieTpcdCAlcycgJSBjcml0ZXJpYQotICAgIHByaW50ICdMb29raW5nIGZvcjpcdCAlcycgJSAnLCAnLmpvaW4oc3RyKHgpIGZvciB4IGluIGtleXdvcmQpCi0gICAgcHJpbnQgJ1RvdGFsIGZvdW5kOlx0ICVzJyAlIGxlbih0cykKKyAgICAgICAgICAgIHByaW50KCclLTRzXHQlLTIwc1x0JS02MHNcdCUtMjVzXHQlLTIwcycgJSB0KQorICAgIHByaW50KCdfJyAqIDE1MCkKKyAgICBwcmludCgnRmlsdGVyaW5nIGJ5Olx0ICVzJyAlIGNyaXRlcmlhKQorICAgIHByaW50KCdMb29raW5nIGZvcjpcdCAlcycgJSAnLCAnLmpvaW4oc3RyKHgpIGZvciB4IGluIGtleXdvcmQpKQorICAgIHByaW50KCdUb3RhbCBmb3VuZDpcdCAlcycgJSBsZW4odHMpKQogCiAKIGRlZiBsaXN0X3Rlc3RzKCk6CkBAIC0zMzgsMTYgKzM1NywxNSBAQAogCiAgICAgdHMgPSBnZXRfYWxsX3Rlc3RzKCkKIAotICAgIHByaW50ICclLTRzXHQlLTIwc1x0JS02MHNcdCUtMjVzXHQlLTIwcycgJSAoJ2lkJywgJ3RhZycsICduYW1lJywgJ2NsYXNzJywgJ21vZHVsZScpCi0gICAgcHJpbnQgJ18nICogMTUwCisgICAgcHJpbnQoJyUtNHNcdCUtMTBzXHQlLTUwcycgJSAoJ2lkJywgJ3RhZycsICd0ZXN0JykpCisgICAgcHJpbnQoJ18nICogODApCiAgICAgZm9yIHQgaW4gdHM6CiAgICAgICAgIGlmIGlzaW5zdGFuY2UodC50Y3RhZywgKHR1cGxlLCBsaXN0KSk6Ci0gICAgICAgICAgICBwcmludCAnJS00c1x0JS0yMHNcdCUtNjBzXHQlLTI1c1x0JS0yMHMnICUgKHQudGNpZCwgJywgJy5qb2luKHQudGN0YWcpLCB0LnRjbmFtZSwgdC50Y2NsYXNzLCB0LnRjbW9kdWxlKQorICAgICAgICAgICAgcHJpbnQoJyUtNHNcdCUtMTBzXHQlLTUwcycgJSAodC50Y2lkLCAnLCAnLmpvaW4odC50Y3RhZyksICcuJy5qb2luKFt0LnRjbW9kdWxlLCB0LnRjY2xhc3MsIHQudGNuYW1lXSkpKQogICAgICAgICBlbHNlOgotICAgICAgICAgICAgcHJpbnQgJyUtNHNcdCUtMjBzXHQlLTYwc1x0JS0yNXNcdCUtMjBzJyAlICh0LnRjaWQsIHQudGN0YWcsIHQudGNuYW1lLCB0LnRjY2xhc3MsIHQudGNtb2R1bGUpCi0gICAgcHJpbnQgJ18nICogMTUwCi0gICAgcHJpbnQgJ1RvdGFsIGZvdW5kOlx0ICVzJyAlIGxlbih0cykKLQorICAgICAgICAgICAgcHJpbnQoJyUtNHNcdCUtMTBzXHQlLTUwcycgJSAodC50Y2lkLCB0LnRjdGFnLCAnLicuam9pbihbdC50Y21vZHVsZSwgdC50Y2NsYXNzLCB0LnRjbmFtZV0pKSkKKyAgICBwcmludCgnXycgKiA4MCkKKyAgICBwcmludCgnVG90YWwgZm91bmQ6XHQgJXMnICUgbGVuKHRzKSkKIAogZGVmIGxpc3RfdGFncygpOgogICAgICMgR2V0IGFsbCB0YWdzIHNldCB0byB0ZXN0IGNhc2VzCkBAIC0zNjIsNyArMzgwLDcgQEAKICAgICAgICAgZWxzZToKICAgICAgICAgICAgIHRhZ3MuYWRkKHRjLnRjdGFnKQogCi0gICAgcHJpbnQgJ1RhZ3M6XHQlcycgJSAnLCAnLmpvaW4oc3RyKHgpIGZvciB4IGluIHRhZ3MpCisgICAgcHJpbnQoJ1RhZ3M6XHQlcycgJSAnLCAnLmpvaW4oc3RyKHgpIGZvciB4IGluIHRhZ3MpKQogCiBkZWYgY292ZXJhZ2Vfc2V0dXAoY292ZXJhZ2Vfc291cmNlLCBjb3ZlcmFnZV9pbmNsdWRlLCBjb3ZlcmFnZV9vbWl0KToKICAgICAiIiIgU2V0IHVwIHRoZSBjb3ZlcmFnZSBtZWFzdXJlbWVudCBmb3IgdGhlIHRlc3RjYXNlcyB0byBiZSBydW4gIiIiCkBAIC0zNzAsNyArMzg4LDcgQEAKICAgICBpbXBvcnQgc3VicHJvY2VzcwogICAgIGJ1aWxkZGlyID0gb3MuZW52aXJvbi5nZXQoIkJVSUxERElSIikKICAgICBwb2t5ZGlyID0gb3MucGF0aC5kaXJuYW1lKG9zLnBhdGguZGlybmFtZShvcy5wYXRoLnJlYWxwYXRoKF9fZmlsZV9fKSkpCi0gICAgY3VyY29tbWl0PSBzdWJwcm9jZXNzLmNoZWNrX291dHB1dChbImdpdCIsICItLWdpdC1kaXIiLCBvcy5wYXRoLmpvaW4ocG9reWRpciwgIi5naXQiKSwgInJldi1wYXJzZSIsICJIRUFEIl0pCisgICAgY3VyY29tbWl0PSBzdWJwcm9jZXNzLmNoZWNrX291dHB1dChbImdpdCIsICItLWdpdC1kaXIiLCBvcy5wYXRoLmpvaW4ocG9reWRpciwgIi5naXQiKSwgInJldi1wYXJzZSIsICJIRUFEIl0pLmRlY29kZSgndXRmLTgnKQogICAgIGNvdmVyYWdlcmMgPSAiJXMvLmNvdmVyYWdlcmMiICUgYnVpbGRkaXIKICAgICBkYXRhX2ZpbGUgPSAiJXMvLmNvdmVyYWdlLiIgJSBidWlsZGRpcgogICAgIGRhdGFfZmlsZSArPSBkYXRldGltZS5kYXRldGltZS5ub3coKS5zdHJmdGltZSgnJVklbSVkVCVIJU0lUycpCkBAIC00MTUsNyArNDMzLDcgQEAKICAgICAgICAgIyBDb3ZlcmFnZSB1bmRlciB2ZXJzaW9uIDQgdXNlcyBjb3ZlcmFnZS5jb3ZlcmFnZQogICAgICAgICBmcm9tIGNvdmVyYWdlIGltcG9ydCBjb3ZlcmFnZSBhcyBDb3ZlcmFnZQogCi0gICAgaW1wb3J0IGNTdHJpbmdJTyBhcyBTdHJpbmdJTworICAgIGltcG9ydCBpbyBhcyBTdHJpbmdJTwogICAgIGZyb20gY292ZXJhZ2UubWlzYyBpbXBvcnQgQ292ZXJhZ2VFeGNlcHRpb24KIAogICAgIGNvdl9vdXRwdXQgPSBTdHJpbmdJTy5TdHJpbmdJTygpCkBAIC00NDMsMjIgKzQ2MSwyNCBAQAogICAgIGJicGF0aCA9IGdldF9iYl92YXIoJ0JCUEFUSCcpLnNwbGl0KCc6JykKICAgICBsYXllcl9saWJkaXJzID0gW3AgZm9yIHAgaW4gKG9zLnBhdGguam9pbihsLCAnbGliJykgZm9yIGwgaW4gYmJwYXRoKSBpZiBvcy5wYXRoLmV4aXN0cyhwKV0KICAgICBzeXMucGF0aC5leHRlbmQobGF5ZXJfbGliZGlycykKLSAgICByZWxvYWQob2VxYS5zZWxmdGVzdCkKKyAgICBpbXAucmVsb2FkKG9lcWEuc2VsZnRlc3QpCiAKICAgICBpZiBhcmdzLnJ1bl90ZXN0c19ieSBhbmQgbGVuKGFyZ3MucnVuX3Rlc3RzX2J5KSA+PSAyOgogICAgICAgICB2YWxpZF9vcHRpb25zID0gWyduYW1lJywgJ2NsYXNzJywgJ21vZHVsZScsICdpZCcsICd0YWcnXQogICAgICAgICBpZiBhcmdzLnJ1bl90ZXN0c19ieVswXSBub3QgaW4gdmFsaWRfb3B0aW9uczoKLSAgICAgICAgICAgIHByaW50ICctLXJ1bi10ZXN0cy1ieSAlcyBub3QgYSB2YWxpZCBvcHRpb24uIENob29zZSBvbmUgb2YgPG5hbWV8Y2xhc3N8bW9kdWxlfGlkfHRhZz4uJyAlIGFyZ3MucnVuX3Rlc3RzX2J5WzBdCisgICAgICAgICAgICBwcmludCgnLS1ydW4tdGVzdHMtYnkgJXMgbm90IGEgdmFsaWQgb3B0aW9uLiBDaG9vc2Ugb25lIG9mIDxuYW1lfGNsYXNzfG1vZHVsZXxpZHx0YWc+LicgJSBhcmdzLnJ1bl90ZXN0c19ieVswXSkKICAgICAgICAgICAgIHJldHVybiAxCiAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICBjcml0ZXJpYSA9IGFyZ3MucnVuX3Rlc3RzX2J5WzBdCiAgICAgICAgICAgICBrZXl3b3JkID0gYXJncy5ydW5fdGVzdHNfYnlbMTpdCiAgICAgICAgICAgICB0cyA9IHNvcnRlZChbIHRjLmZ1bGxwYXRoIGZvciB0YyBpbiBnZXRfdGVzdHN1aXRlX2J5KGNyaXRlcmlhLCBrZXl3b3JkKSBdKQorICAgICAgICBpZiBub3QgdHM6CisgICAgICAgICAgICByZXR1cm4gMQogCiAgICAgaWYgYXJncy5saXN0X3Rlc3RzX2J5IGFuZCBsZW4oYXJncy5saXN0X3Rlc3RzX2J5KSA+PSAyOgogICAgICAgICB2YWxpZF9vcHRpb25zID0gWyduYW1lJywgJ2NsYXNzJywgJ21vZHVsZScsICdpZCcsICd0YWcnXQogICAgICAgICBpZiBhcmdzLmxpc3RfdGVzdHNfYnlbMF0gbm90IGluIHZhbGlkX29wdGlvbnM6Ci0gICAgICAgICAgICBwcmludCAnLS1saXN0LXRlc3RzLWJ5ICVzIG5vdCBhIHZhbGlkIG9wdGlvbi4gQ2hvb3NlIG9uZSBvZiA8bmFtZXxjbGFzc3xtb2R1bGV8aWR8dGFnPi4nICUgYXJncy5saXN0X3Rlc3RzX2J5WzBdCisgICAgICAgICAgICBwcmludCgnLS1saXN0LXRlc3RzLWJ5ICVzIG5vdCBhIHZhbGlkIG9wdGlvbi4gQ2hvb3NlIG9uZSBvZiA8bmFtZXxjbGFzc3xtb2R1bGV8aWR8dGFnPi4nICUgYXJncy5saXN0X3Rlc3RzX2J5WzBdKQogICAgICAgICAgICAgcmV0dXJuIDEKICAgICAgICAgZWxzZToKICAgICAgICAgICAgIGNyaXRlcmlhID0gYXJncy5saXN0X3Rlc3RzX2J5WzBdCkBAIC00ODIsNyArNTAyLDcgQEAKICAgICAgICAgICAgIGluZm8gPSAnJwogICAgICAgICAgICAgaWYgbW9kdWxlLnN0YXJ0c3dpdGgoJ18nKToKICAgICAgICAgICAgICAgICBpbmZvID0gJyAoaGlkZGVuKScKLSAgICAgICAgICAgIHByaW50IG1vZHVsZSArIGluZm8KKyAgICAgICAgICAgIHByaW50KG1vZHVsZSArIGluZm8pCiAgICAgICAgICAgICBpZiBhcmdzLmxpc3RfYWxsY2xhc3NlczoKICAgICAgICAgICAgICAgICB0cnk6CiAgICAgICAgICAgICAgICAgICAgIGltcG9ydCBpbXBvcnRsaWIKQEAgLTQ5MCwxMyArNTEwLDEzIEBACiAgICAgICAgICAgICAgICAgICAgIGZvciB2IGluIHZhcnMobW9kbGliKToKICAgICAgICAgICAgICAgICAgICAgICAgIHQgPSB2YXJzKG1vZGxpYilbdl0KICAgICAgICAgICAgICAgICAgICAgICAgIGlmIGlzaW5zdGFuY2UodCwgdHlwZShvZVNlbGZUZXN0KSkgYW5kIGlzc3ViY2xhc3ModCwgb2VTZWxmVGVzdCkgYW5kIHQhPW9lU2VsZlRlc3Q6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnQgIiAtLSIsIHYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmludCgiIC0tIiwgdikKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgbWV0aG9kIGluIGRpcih0KToKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgbWV0aG9kLnN0YXJ0c3dpdGgoInRlc3RfIikgYW5kIGNhbGxhYmxlKHZhcnModClbbWV0aG9kXSk6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmludCAiIC0tICAtLSIsIG1ldGhvZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiBtZXRob2Quc3RhcnRzd2l0aCgidGVzdF8iKSBhbmQgaXNpbnN0YW5jZSh2YXJzKHQpW21ldGhvZF0sIGNvbGxlY3Rpb25zLkNhbGxhYmxlKToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByaW50KCIgLS0gIC0tIiwgbWV0aG9kKQogCiAgICAgICAgICAgICAgICAgZXhjZXB0IChBdHRyaWJ1dGVFcnJvciwgSW1wb3J0RXJyb3IpIGFzIGU6Ci0gICAgICAgICAgICAgICAgICAgIHByaW50IGUKKyAgICAgICAgICAgICAgICAgICAgcHJpbnQoZSkKICAgICAgICAgICAgICAgICAgICAgcGFzcwogCiAgICAgaWYgYXJncy5ydW5fdGVzdHMgb3IgYXJncy5ydW5fYWxsX3Rlc3RzIG9yIGFyZ3MucnVuX3Rlc3RzX2J5OgpAQCAtNTExLDcgKzUzMSw4IEBACiAgICAgICAgIHN1aXRlID0gdW5pdHRlc3QuVGVzdFN1aXRlKCkKICAgICAgICAgbG9hZGVyID0gdW5pdHRlc3QuVGVzdExvYWRlcigpCiAgICAgICAgIGxvYWRlci5zb3J0VGVzdE1ldGhvZHNVc2luZyA9IE5vbmUKLSAgICAgICAgcnVubmVyID0gdW5pdHRlc3QuVGV4dFRlc3RSdW5uZXIodmVyYm9zaXR5PTIsIHJlc3VsdGNsYXNzPWJ1aWxkUmVzdWx0Q2xhc3MoYXJncykpCisgICAgICAgIHJ1bm5lciA9IFRlc3RSdW5uZXIodmVyYm9zaXR5PTIsCisgICAgICAgICAgICAgICAgcmVzdWx0Y2xhc3M9YnVpbGRSZXN1bHRDbGFzcyhhcmdzKSkKICAgICAgICAgIyB3ZSBuZWVkIHRvIGRvIHRoaXMgaGVyZSwgb3RoZXJ3aXNlIGp1c3QgbG9hZGluZyB0aGUgdGVzdHMKICAgICAgICAgIyB3aWxsIHRha2UgMiBtaW51dGVzIChiaXRiYWtlIC1lIGNhbGxzKQogICAgICAgICBvZVNlbGZUZXN0LnRlc3RsYXllcl9wYXRoID0gZ2V0X3Rlc3RfbGF5ZXIoKQpAQCAtNTUyLDcgKzU3Myw3IEBACiAgICAgIiIiQnVpbGQgYSBSZXN1bHQgQ2xhc3MgdG8gdXNlIGluIHRoZSB0ZXN0Y2FzZSBleGVjdXRpb24iIiIKICAgICBpbXBvcnQgc2l0ZQogCi0gICAgY2xhc3MgU3RhbXBlZFJlc3VsdCh1bml0dGVzdC5UZXh0VGVzdFJlc3VsdCk6CisgICAgY2xhc3MgU3RhbXBlZFJlc3VsdChUZXN0UmVzdWx0KToKICAgICAgICAgIiIiCiAgICAgICAgIEN1c3RvbSBUZXN0UmVzdWx0IHRoYXQgcHJpbnRzIHRoZSB0aW1lIHdoZW4gYSB0ZXN0IHN0YXJ0cy4gIEFzIG9lLXNlbGZ0ZXN0CiAgICAgICAgIGNhbiB0YWtlIGEgbG9uZyB0aW1lIChpZSBhIGZldyBob3VycykgdG8gcnVuLCB0aW1lc3RhbXBzIGhlbHAgdXMgdW5kZXJzdGFuZApAQCAtNTg0LDYgKzYwNSwxMCBAQAogICAgICAgICAgICAgICAgIGlmIHNlbGYuY292ZXJhZ2VfaW5zdGFsbGVkOgogICAgICAgICAgICAgICAgICAgICBsb2cuaW5mbygiQ292ZXJhZ2UgaXMgZW5hYmxlZCIpCiAKKyAgICAgICAgICAgICAgICAgICAgbWFqb3JfdmVyc2lvbiA9IGludChjb3ZlcmFnZS52ZXJzaW9uLl9fdmVyc2lvbl9fWzBdKQorICAgICAgICAgICAgICAgICAgICBpZiBtYWpvcl92ZXJzaW9uIDwgNDoKKyAgICAgICAgICAgICAgICAgICAgICAgIGxvZy5lcnJvcigicHl0aG9uIGNvdmVyYWdlICVzIGluc3RhbGxlZC4gUmVxdWlyZSB2ZXJzaW9uIDQgb3IgZ3JlYXRlci4iICUgY292ZXJhZ2UudmVyc2lvbi5fX3ZlcnNpb25fXykKKyAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuc3RvcCgpCiAgICAgICAgICAgICAgICAgICAgICMgSW4gY2FzZSB0aGUgdXNlciBoYXMgbm90IHNldCB0aGUgdmFyaWFibGUgQ09WRVJBR0VfUFJPQ0VTU19TVEFSVCwKICAgICAgICAgICAgICAgICAgICAgIyBjcmVhdGUgYSBkZWZhdWx0IG9uZSBhbmQgZXhwb3J0IGl0LiBUaGUgQ09WRVJBR0VfUFJPQ0VTU19TVEFSVAogICAgICAgICAgICAgICAgICAgICAjIHZhbHVlIGluZGljYXRlcyB3aGVyZSB0aGUgY292ZXJhZ2UgY29uZmlndXJhdGlvbiBmaWxlIHJlc2lkZXMKQEAgLTYyMiw2ICs2NDcsMjEgQEAKIAogICAgIHJldHVybiBTdGFtcGVkUmVzdWx0CiAKK2NsYXNzIFRlc3RSdW5uZXIoX1Rlc3RSdW5uZXIpOgorICAgICIiIlRlc3QgcnVubmVyIGNsYXNzIGF3YXJlIG9mIGV4cG9ydGluZyB0ZXN0cy4iIiIKKyAgICBkZWYgX19pbml0X18oc2VsZiwgKmFyZ3MsICoqa3dhcmdzKToKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgZXhwb3J0ZGlyID0gb3MucGF0aC5qb2luKG9zLmdldGN3ZCgpLCBsb2dfcHJlZml4KQorICAgICAgICAgICAga3dhcmdzeCA9IGRpY3QoKiprd2FyZ3MpCisgICAgICAgICAgICAjIGFyZ3VtZW50IHNwZWNpZmljIHRvIFhNTFRlc3RSdW5uZXIsIGlmIGFkZGluZyBhIG5ldyBydW5uZXIgdGhlbgorICAgICAgICAgICAgIyBhbHNvIGFkZCBsb2dpYyB0byB1c2Ugb3RoZXIgcnVubmVyJ3MgYXJncy4KKyAgICAgICAgICAgIGt3YXJnc3hbJ291dHB1dCddID0gZXhwb3J0ZGlyCisgICAgICAgICAgICBrd2FyZ3N4WydkZXNjcmlwdGlvbnMnXSA9IEZhbHNlCisgICAgICAgICAgICAjIGRvbmUgZm9yIHRoZSBjYXNlIHdoZXJlIHRlbGxpbmcgdGhlIHJ1bm5lciB3aGVyZSB0byBleHBvcnQKKyAgICAgICAgICAgIHN1cGVyKFRlc3RSdW5uZXIsIHNlbGYpLl9faW5pdF9fKCphcmdzLCAqKmt3YXJnc3gpCisgICAgICAgIGV4Y2VwdCBUeXBlRXJyb3I6CisgICAgICAgICAgICBsb2cuaW5mbygidGVzdCBydW5uZXIgaW5pdCdlZCBsaWtlIHVuaXR0ZXN0IikKKyAgICAgICAgICAgIHN1cGVyKFRlc3RSdW5uZXIsIHNlbGYpLl9faW5pdF9fKCphcmdzLCAqKmt3YXJncykKIAogaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKICAgICB0cnk6CmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvc2NyaXB0cy9vZS10cmltLXNjaGVtYXMgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvc2NyaXB0cy9vZS10cmltLXNjaGVtYXMKaW5kZXggMjlmYjNhMS4uNjZhMWI4ZCAxMDA3NTUKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L3NjcmlwdHMvb2UtdHJpbS1zY2hlbWFzCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9zY3JpcHRzL29lLXRyaW0tc2NoZW1hcwpAQCAtMSw0ICsxLDQgQEAKLSMhIC91c3IvYmluL2VudiBweXRob24KKyMhIC91c3IvYmluL2VudiBweXRob24zCiAKIGltcG9ydCBzeXMKIHRyeToKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9zY3JpcHRzL29lcHlkZXZzaGVsbC1pbnRlcm5hbC5weSBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9zY3JpcHRzL29lcHlkZXZzaGVsbC1pbnRlcm5hbC5weQppbmRleCBmN2IyZTRlLi5hMjJiZWMzIDEwMDc1NQotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvc2NyaXB0cy9vZXB5ZGV2c2hlbGwtaW50ZXJuYWwucHkKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L3NjcmlwdHMvb2VweWRldnNoZWxsLWludGVybmFsLnB5CkBAIC0xLDQgKzEsNCBAQAotIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCisjIS91c3IvYmluL2VudiBweXRob24zCiAKIGltcG9ydCBvcwogaW1wb3J0IHN5cwpAQCAtMjksOSArMjksNiBAQAogcHR5ID0gb3BlbihzeXMuYXJndlsxXSwgIncrYiIsIDApCiBwYXJlbnQgPSBpbnQoc3lzLmFyZ3ZbMl0pCiAKLSMgRG9uJ3QgYnVmZmVyIG91dHB1dCBieSBsaW5lIGVuZGluZ3MKLXN5cy5zdGRvdXQgPSBvcy5mZG9wZW4oc3lzLnN0ZG91dC5maWxlbm8oKSwgJ3cnLCAwKQotc3lzLnN0ZGluID0gb3MuZmRvcGVuKHN5cy5zdGRpbi5maWxlbm8oKSwgJ3InLCAwKQogbm9uYmxvY2tpbmdmZChwdHkpCiBub25ibG9ja2luZ2ZkKHN5cy5zdGRpbikKIApAQCAtNTAsNyArNDcsNyBAQAogICAgICMgTmVlZCBjYnJlYWsvbm9lY2hvIHdoaWxzdCBpbiBzZWxlY3Qgc28gd2UgdHJpZ2dlciBvbiBhbnkga2V5cHJlc3MKICAgICBjYnJlYWtub2VjaG8oc3lzLnN0ZGluLmZpbGVubygpKQogICAgICMgU2VuZCBvdXIgUElEIHRvIHRoZSBvdGhlciBlbmQgc28gdGhleSBjYW4ga2lsbCB1cy4KLSAgICBwdHkud3JpdGUoc3RyKG9zLmdldHBpZCgpKSArICJcbiIpCisgICAgcHR5LndyaXRlKHN0cihvcy5nZXRwaWQoKSkuZW5jb2RlKCd1dGYtOCcpICsgYiJcbiIpCiAgICAgd2hpbGUgVHJ1ZToKICAgICAgICAgdHJ5OgogICAgICAgICAgICAgd3JpdGVycyA9IFtdCkBAIC01OSwxNyArNTYsMTggQEAKICAgICAgICAgICAgIChyZWFkeSwgXywgXykgPSBzZWxlY3Quc2VsZWN0KFtwdHksIHN5cy5zdGRpbl0sIHdyaXRlcnMgLCBbXSwgMCkKICAgICAgICAgICAgIHRyeToKICAgICAgICAgICAgICAgICBpZiBwdHkgaW4gcmVhZHk6Ci0gICAgICAgICAgICAgICAgICAgIGkgPSBpICsgcHR5LnJlYWQoKQorICAgICAgICAgICAgICAgICAgICBpID0gaSArIHB0eS5yZWFkKCkuZGVjb2RlKCd1dGYtOCcpCiAgICAgICAgICAgICAgICAgaWYgaToKICAgICAgICAgICAgICAgICAgICAgIyBXcml0ZSBhIHBhZ2UgYXQgYSB0aW1lIHRvIGF2b2lkIG92ZXJmbG93aW5nIG91dHB1dCAKICAgICAgICAgICAgICAgICAgICAgIyBkLmtleXMoKSBpcyBhIGdvb2Qgd2F5IHRvIGRvIHRoYXQKICAgICAgICAgICAgICAgICAgICAgc3lzLnN0ZG91dC53cml0ZShpWzo0MDk2XSkKKyAgICAgICAgICAgICAgICAgICAgc3lzLnN0ZG91dC5mbHVzaCgpCiAgICAgICAgICAgICAgICAgICAgIGkgPSBpWzQwOTY6XQogICAgICAgICAgICAgICAgIGlmIHN5cy5zdGRpbiBpbiByZWFkeToKICAgICAgICAgICAgICAgICAgICAgZWNob25vY2JyZWFrKHN5cy5zdGRpbi5maWxlbm8oKSkKLSAgICAgICAgICAgICAgICAgICAgbyA9IHJhd19pbnB1dCgpCisgICAgICAgICAgICAgICAgICAgIG8gPSBpbnB1dCgpLmVuY29kZSgndXRmLTgnKQogICAgICAgICAgICAgICAgICAgICBjYnJlYWtub2VjaG8oc3lzLnN0ZGluLmZpbGVubygpKQotICAgICAgICAgICAgICAgICAgICBwdHkud3JpdGUobyArICJcbiIpCisgICAgICAgICAgICAgICAgICAgIHB0eS53cml0ZShvICsgYiJcbiIpCiAgICAgICAgICAgICBleGNlcHQgKElPRXJyb3IsIE9TRXJyb3IpIGFzIGU6CiAgICAgICAgICAgICAgICAgaWYgZS5lcnJubyA9PSAxMToKICAgICAgICAgICAgICAgICAgICAgY29udGludWUKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9zY3JpcHRzL29wa2ctcXVlcnktaGVscGVyLnB5IGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L3NjcmlwdHMvb3BrZy1xdWVyeS1oZWxwZXIucHkKaW5kZXggMmZiMWE3OC4uY2U4OTQ5MSAxMDA3NTUKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L3NjcmlwdHMvb3BrZy1xdWVyeS1oZWxwZXIucHkKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L3NjcmlwdHMvb3BrZy1xdWVyeS1oZWxwZXIucHkKQEAgLTEsNCArMSw0IEBACi0jIS91c3IvYmluL2VudiBweXRob24KKyMhL3Vzci9iaW4vZW52IHB5dGhvbjMKIAogIyBPcGVuRW1iZWRkZWQgb3BrZyBxdWVyeSBoZWxwZXIgdXRpbGl0eQogIwpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L3NjcmlwdHMvcHlib290Y2hhcnRndWkvcHlib290Y2hhcnRndWkvbWFpbi5weS5pbiBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9zY3JpcHRzL3B5Ym9vdGNoYXJ0Z3VpL3B5Ym9vdGNoYXJ0Z3VpL21haW4ucHkuaW4KaW5kZXggMjFiYjBiZS4uYTk1NGIxMiAxMDA2NDQKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L3NjcmlwdHMvcHlib290Y2hhcnRndWkvcHlib290Y2hhcnRndWkvbWFpbi5weS5pbgorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvc2NyaXB0cy9weWJvb3RjaGFydGd1aS9weWJvb3RjaGFydGd1aS9tYWluLnB5LmluCkBAIC0xNiw4ICsxNiw2IEBACiAjICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQogIyAgYWxvbmcgd2l0aCBweWJvb3RjaGFydGd1aS4gSWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgogCi1mcm9tIF9fZnV0dXJlX18gaW1wb3J0IHByaW50X2Z1bmN0aW9uCi0KIGltcG9ydCBzeXMKIGltcG9ydCBvcwogaW1wb3J0IG9wdHBhcnNlCkBAIC0xNDksOSArMTQ3LDcgQEAKIAkJCQkJZm9yIHRpbWUgaW4gcmVzWzRdOgogCQkJCQkJaWYgdGltZSBpcyBub3QgTm9uZToKIAkJCQkJCQkjIG91dHB1dCBhcyBtcwotCQkJCQkJCXByaW50KHRpbWUgKiAxMCwgZmlsZT1mKQotCQkJCQkJZWxzZToKLQkJCQkJCQlwcmludChmaWxlPWYpCisJCQkJCQkJZi53cml0ZSh0aW1lICogMTApCiAJCQkJZmluYWxseToKIAkJCQkJZi5jbG9zZSgpCiAJCQlmaWxlbmFtZSA9IF9nZXRfZmlsZW5hbWUob3B0aW9ucy5vdXRwdXQpCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvc2NyaXB0cy9weWJvb3RjaGFydGd1aS9weWJvb3RjaGFydGd1aS9wYXJzaW5nLnB5IGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L3NjcmlwdHMvcHlib290Y2hhcnRndWkvcHlib290Y2hhcnRndWkvcGFyc2luZy5weQppbmRleCBkNDIzYjlmLi5hM2EwYjBiIDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvc2NyaXB0cy9weWJvb3RjaGFydGd1aS9weWJvb3RjaGFydGd1aS9wYXJzaW5nLnB5CisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9zY3JpcHRzL3B5Ym9vdGNoYXJ0Z3VpL3B5Ym9vdGNoYXJ0Z3VpL3BhcnNpbmcucHkKQEAgLTEzLDkgKzEzLDYgQEAKICMgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCiAjICBhbG9uZyB3aXRoIHB5Ym9vdGNoYXJ0Z3VpLiBJZiBub3QsIHNlZSA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCiAKLQotZnJvbSBfX2Z1dHVyZV9fIGltcG9ydCB3aXRoX3N0YXRlbWVudAotCiBpbXBvcnQgb3MKIGltcG9ydCBzdHJpbmcKIGltcG9ydCByZQpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L3NjcmlwdHMvcHl0aG9uZGVwcyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9zY3JpcHRzL3B5dGhvbmRlcHMKaW5kZXggZmY5MmU3NC4uNTkwYjk3NiAxMDA3NTUKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L3NjcmlwdHMvcHl0aG9uZGVwcworKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvc2NyaXB0cy9weXRob25kZXBzCkBAIC0xLDQgKzEsNCBAQAotIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCisjIS91c3IvYmluL2VudiBweXRob24zCiAjCiAjIERldGVybWluZSBkZXBlbmRlbmNpZXMgb2YgcHl0aG9uIHNjcmlwdHMgb3IgYXZhaWxhYmxlIHB5dGhvbiBtb2R1bGVzIGluIGEgc2VhcmNoIHBhdGguCiAjCkBAIC0xODcsNyArMTg3LDcgQEAKICAgICBkaXJlY3RvcnkgPSBvcy5wYXRoLnJlYWxwYXRoKGRpcmVjdG9yeSkKIAogICAgIHByb3ZpZGVzID0gZGljdCgodiwgaykgZm9yIGssIHYgaW4gZ2V0X3Byb3ZpZGVzKGRpcmVjdG9yeSkpCi0gICAgZm9yIGZpbGVuYW1lLCBwcm92aWRlIGluIHByb3ZpZGVzLml0ZXJpdGVtcygpOgorICAgIGZvciBmaWxlbmFtZSwgcHJvdmlkZSBpbiBwcm92aWRlcy5pdGVtcygpOgogICAgICAgICBpZiBvcy5wYXRoLmlzZGlyKGZpbGVuYW1lKToKICAgICAgICAgICAgIGZpbGVuYW1lID0gb3MucGF0aC5qb2luKGZpbGVuYW1lLCAnX19pbml0X18ucHknKQogICAgICAgICAgICAgaXNwa2cgPSBUcnVlCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvc2NyaXB0cy9yZWNpcGV0b29sIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L3NjcmlwdHMvcmVjaXBldG9vbAppbmRleCA2YzY2NDg3Li4xMDUyY2QyIDEwMDc1NQotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvc2NyaXB0cy9yZWNpcGV0b29sCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9zY3JpcHRzL3JlY2lwZXRvb2wKQEAgLTEsNCArMSw0IEBACi0jIS91c3IvYmluL2VudiBweXRob24KKyMhL3Vzci9iaW4vZW52IHB5dGhvbjMKIAogIyBSZWNpcGUgY3JlYXRpb24gdG9vbAogIwpAQCAtNjAsNiArNjAsNyBAQAogICAgIHBhcnNlci5hZGRfYXJndW1lbnQoJy1oJywgJy0taGVscCcsIGFjdGlvbj0naGVscCcsIGRlZmF1bHQ9YXJncGFyc2UuU1VQUFJFU1MsCiAgICAgICAgICAgICAgICAgICAgICAgICBoZWxwPSdzaG93IHRoaXMgaGVscCBtZXNzYWdlIGFuZCBleGl0JykKICAgICBzdWJwYXJzZXJzID0gcGFyc2VyLmFkZF9zdWJwYXJzZXJzKHRpdGxlPSdzdWJjb21tYW5kcycsIG1ldGF2YXI9JzxzdWJjb21tYW5kPicpCisgICAgc3VicGFyc2Vycy5yZXF1aXJlZCA9IFRydWUKIAogICAgIGlmIGdsb2JhbF9hcmdzLmRlYnVnOgogICAgICAgICBsb2dnZXIuc2V0TGV2ZWwobG9nZ2luZy5ERUJVRykKQEAgLTc2LDM3ICs3Nyw0MCBAQAogICAgIHNjcmlwdHV0aWxzLmxvZ2dlcl9zZXR1cF9jb2xvcihsb2dnZXIsIGdsb2JhbF9hcmdzLmNvbG9yKQogCiAgICAgdGluZm9pbCA9IHRpbmZvaWxfaW5pdChGYWxzZSkKLSAgICBmb3IgcGF0aCBpbiAoW3NjcmlwdHNfcGF0aF0gKwotICAgICAgICAgICAgICAgICB0aW5mb2lsLmNvbmZpZ19kYXRhLmdldFZhcignQkJQQVRIJywgVHJ1ZSkuc3BsaXQoJzonKSk6Ci0gICAgICAgIHBsdWdpbnBhdGggPSBvcy5wYXRoLmpvaW4ocGF0aCwgJ2xpYicsICdyZWNpcGV0b29sJykKLSAgICAgICAgc2NyaXB0dXRpbHMubG9hZF9wbHVnaW5zKGxvZ2dlciwgcGx1Z2lucywgcGx1Z2lucGF0aCkKLQotICAgIHJlZ2lzdGVyZWQgPSBGYWxzZQotICAgIGZvciBwbHVnaW4gaW4gcGx1Z2luczoKLSAgICAgICAgaWYgaGFzYXR0cihwbHVnaW4sICdyZWdpc3Rlcl9jb21tYW5kcycpOgotICAgICAgICAgICAgcmVnaXN0ZXJlZCA9IFRydWUKLSAgICAgICAgICAgIHBsdWdpbi5yZWdpc3Rlcl9jb21tYW5kcyhzdWJwYXJzZXJzKQotICAgICAgICBlbGlmIGhhc2F0dHIocGx1Z2luLCAncmVnaXN0ZXJfY29tbWFuZCcpOgotICAgICAgICAgICAgIyBMZWdhY3kgZnVuY3Rpb24gbmFtZQotICAgICAgICAgICAgcmVnaXN0ZXJlZCA9IFRydWUKLSAgICAgICAgICAgIHBsdWdpbi5yZWdpc3Rlcl9jb21tYW5kKHN1YnBhcnNlcnMpCi0gICAgICAgIGlmIGhhc2F0dHIocGx1Z2luLCAndGluZm9pbF9pbml0Jyk6Ci0gICAgICAgICAgICBwbHVnaW4udGluZm9pbF9pbml0KHRpbmZvaWwpCi0KLSAgICBpZiBub3QgcmVnaXN0ZXJlZDoKLSAgICAgICAgbG9nZ2VyLmVycm9yKCJObyBjb21tYW5kcyByZWdpc3RlcmVkIC0gbWlzc2luZyBwbHVnaW5zPyIpCi0gICAgICAgIHN5cy5leGl0KDEpCi0KLSAgICBhcmdzID0gcGFyc2VyLnBhcnNlX2FyZ3ModW5wYXJzZWRfYXJncywgbmFtZXNwYWNlPWdsb2JhbF9hcmdzKQotCiAgICAgdHJ5OgotICAgICAgICBpZiBnZXRhdHRyKGFyZ3MsICdwYXJzZXJlY2lwZXMnLCBGYWxzZSk6Ci0gICAgICAgICAgICB0aW5mb2lsLmNvbmZpZ19kYXRhLmRpc2FibGVUcmFja2luZygpCi0gICAgICAgICAgICB0aW5mb2lsLnBhcnNlUmVjaXBlcygpCi0gICAgICAgICAgICB0aW5mb2lsLmNvbmZpZ19kYXRhLmVuYWJsZVRyYWNraW5nKCkKLSAgICAgICAgcmV0ID0gYXJncy5mdW5jKGFyZ3MpCi0gICAgZXhjZXB0IGJiLkJCSGFuZGxlZEV4Y2VwdGlvbjoKLSAgICAgICAgcmV0ID0gMQorICAgICAgICBmb3IgcGF0aCBpbiAoW3NjcmlwdHNfcGF0aF0gKworICAgICAgICAgICAgICAgICAgICB0aW5mb2lsLmNvbmZpZ19kYXRhLmdldFZhcignQkJQQVRIJywgVHJ1ZSkuc3BsaXQoJzonKSk6CisgICAgICAgICAgICBwbHVnaW5wYXRoID0gb3MucGF0aC5qb2luKHBhdGgsICdsaWInLCAncmVjaXBldG9vbCcpCisgICAgICAgICAgICBzY3JpcHR1dGlscy5sb2FkX3BsdWdpbnMobG9nZ2VyLCBwbHVnaW5zLCBwbHVnaW5wYXRoKQorCisgICAgICAgIHJlZ2lzdGVyZWQgPSBGYWxzZQorICAgICAgICBmb3IgcGx1Z2luIGluIHBsdWdpbnM6CisgICAgICAgICAgICBpZiBoYXNhdHRyKHBsdWdpbiwgJ3JlZ2lzdGVyX2NvbW1hbmRzJyk6CisgICAgICAgICAgICAgICAgcmVnaXN0ZXJlZCA9IFRydWUKKyAgICAgICAgICAgICAgICBwbHVnaW4ucmVnaXN0ZXJfY29tbWFuZHMoc3VicGFyc2VycykKKyAgICAgICAgICAgIGVsaWYgaGFzYXR0cihwbHVnaW4sICdyZWdpc3Rlcl9jb21tYW5kJyk6CisgICAgICAgICAgICAgICAgIyBMZWdhY3kgZnVuY3Rpb24gbmFtZQorICAgICAgICAgICAgICAgIHJlZ2lzdGVyZWQgPSBUcnVlCisgICAgICAgICAgICAgICAgcGx1Z2luLnJlZ2lzdGVyX2NvbW1hbmQoc3VicGFyc2VycykKKyAgICAgICAgICAgIGlmIGhhc2F0dHIocGx1Z2luLCAndGluZm9pbF9pbml0Jyk6CisgICAgICAgICAgICAgICAgcGx1Z2luLnRpbmZvaWxfaW5pdCh0aW5mb2lsKQorCisgICAgICAgIGlmIG5vdCByZWdpc3RlcmVkOgorICAgICAgICAgICAgbG9nZ2VyLmVycm9yKCJObyBjb21tYW5kcyByZWdpc3RlcmVkIC0gbWlzc2luZyBwbHVnaW5zPyIpCisgICAgICAgICAgICBzeXMuZXhpdCgxKQorCisgICAgICAgIGFyZ3MgPSBwYXJzZXIucGFyc2VfYXJncyh1bnBhcnNlZF9hcmdzLCBuYW1lc3BhY2U9Z2xvYmFsX2FyZ3MpCisKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgaWYgZ2V0YXR0cihhcmdzLCAncGFyc2VyZWNpcGVzJywgRmFsc2UpOgorICAgICAgICAgICAgICAgIHRpbmZvaWwuY29uZmlnX2RhdGEuZGlzYWJsZVRyYWNraW5nKCkKKyAgICAgICAgICAgICAgICB0aW5mb2lsLnBhcnNlUmVjaXBlcygpCisgICAgICAgICAgICAgICAgdGluZm9pbC5jb25maWdfZGF0YS5lbmFibGVUcmFja2luZygpCisgICAgICAgICAgICByZXQgPSBhcmdzLmZ1bmMoYXJncykKKyAgICAgICAgZXhjZXB0IGJiLkJCSGFuZGxlZEV4Y2VwdGlvbjoKKyAgICAgICAgICAgIHJldCA9IDEKKyAgICBmaW5hbGx5OgorICAgICAgICB0aW5mb2lsLnNodXRkb3duKCkKIAogICAgIHJldHVybiByZXQKIApkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L3NjcmlwdHMvcmVsb2NhdGVfc2RrLnB5IGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L3NjcmlwdHMvcmVsb2NhdGVfc2RrLnB5CmluZGV4IDk5ZmNhODYuLmU0N2I0ZDkgMTAwNzU1Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9zY3JpcHRzL3JlbG9jYXRlX3Nkay5weQorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvc2NyaXB0cy9yZWxvY2F0ZV9zZGsucHkKQEAgLTEsNCArMSw0IEBACi0jIS91c3IvYmluL2VudiBweXRob24KKyMhL3Vzci9iaW4vZW52IHB5dGhvbjMKICMKICMgQ29weXJpZ2h0IChjKSAyMDEyIEludGVsIENvcnBvcmF0aW9uCiAjCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvc2NyaXB0cy9ydW5xZW11IGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L3NjcmlwdHMvcnVucWVtdQppbmRleCBkN2ZhOTQxLi5kYmUxN2FiIDEwMDc1NQotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvc2NyaXB0cy9ydW5xZW11CisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9zY3JpcHRzL3J1bnFlbXUKQEAgLTEsOCArMSw5IEBACi0jIS9iaW4vYmFzaAotIworIyEvdXNyL2Jpbi9lbnYgcHl0aG9uMworCiAjIEhhbmRsZSBydW5uaW5nIE9FIGltYWdlcyBzdGFuZGFsb25lIHdpdGggUUVNVQogIwogIyBDb3B5cmlnaHQgKEMpIDIwMDYtMjAxMSBMaW51eCBGb3VuZGF0aW9uCisjIENvcHlyaWdodCAoYykgMjAxNiBXaW5kIFJpdmVyIFN5c3RlbXMsIEluYy4KICMKICMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKICMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKQEAgLTE3LDUzMCArMTgsMTAxMCBAQAogIyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAogIyA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEgVVNBLgogCi11c2FnZSgpIHsKLSAgICBNWU5BTUU9YGJhc2VuYW1lICQwYAotY2F0IDw8X0VPRgoraW1wb3J0IG9zCitpbXBvcnQgc3lzCitpbXBvcnQgbG9nZ2luZworaW1wb3J0IHN1YnByb2Nlc3MKK2ltcG9ydCByZQoraW1wb3J0IGZjbnRsCitpbXBvcnQgc2h1dGlsCitpbXBvcnQgZ2xvYgoraW1wb3J0IGNvbmZpZ3BhcnNlcgogCitjbGFzcyBPRVBhdGhFcnJvcihFeGNlcHRpb24pOgorICAgICIiIkN1c3RvbSBFeGNlcHRpb24gdG8gZ2l2ZSBiZXR0ZXIgZ3VpZGFuY2Ugb24gbWlzc2luZyBiaW5hcmllcyIiIgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBtZXNzYWdlKToKKyAgICAgICAgc2VsZi5tZXNzYWdlID0gIkluIG9yZGVyIGZvciB0aGlzIHNjcmlwdCB0byBkeW5hbWljYWxseSBpbmZlciBwYXRoc1xuIFwKK2tlcm5lbHMgb3IgZmlsZXN5c3RlbSBpbWFnZXMsIHlvdSBlaXRoZXIgbmVlZCBiaXRiYWtlIGluIHlvdXIgUEFUSFxuIFwKK29yIHRvIHNvdXJjZSBvZS1pbml0LWJ1aWxkLWVudiBiZWZvcmUgcnVubmluZyB0aGlzIHNjcmlwdC5cblxuIFwKK0R5bmFtaWMgcGF0aCBpbmZlcmVuY2UgY2FuIGJlIGF2b2lkZWQgYnkgcGFzc2luZyBhICoucWVtdWJvb3QuY29uZiB0b1xuIFwKK3J1bnFlbXUsIGkuZS4gYHJ1bnFlbXUgL3BhdGgvdG8vbXktaW1hZ2UtbmFtZS5xZW11Ym9vdC5jb25mYFxuXG4gJXMiICUgbWVzc2FnZQorCisKK2RlZiBjcmVhdGVfbG9nZ2VyKCk6CisgICAgbG9nZ2VyID0gbG9nZ2luZy5nZXRMb2dnZXIoJ3J1bnFlbXUnKQorICAgIGxvZ2dlci5zZXRMZXZlbChsb2dnaW5nLklORk8pCisKKyAgICAjIGNyZWF0ZSBjb25zb2xlIGhhbmRsZXIgYW5kIHNldCBsZXZlbCB0byBkZWJ1ZworICAgIGNoID0gbG9nZ2luZy5TdHJlYW1IYW5kbGVyKCkKKyAgICBjaC5zZXRMZXZlbChsb2dnaW5nLklORk8pCisKKyAgICAjIGNyZWF0ZSBmb3JtYXR0ZXIKKyAgICBmb3JtYXR0ZXIgPSBsb2dnaW5nLkZvcm1hdHRlcignJShuYW1lKXMgLSAlKGxldmVsbmFtZSlzIC0gJShtZXNzYWdlKXMnKQorCisgICAgIyBhZGQgZm9ybWF0dGVyIHRvIGNoCisgICAgY2guc2V0Rm9ybWF0dGVyKGZvcm1hdHRlcikKKworICAgICMgYWRkIGNoIHRvIGxvZ2dlcgorICAgIGxvZ2dlci5hZGRIYW5kbGVyKGNoKQorCisgICAgcmV0dXJuIGxvZ2dlcgorCitsb2dnZXIgPSBjcmVhdGVfbG9nZ2VyKCkKKworZGVmIHByaW50X3VzYWdlKCk6CisgICAgcHJpbnQoIiIiCiBVc2FnZTogeW91IGNhbiBydW4gdGhpcyBzY3JpcHQgd2l0aCBhbnkgdmFsaWQgY29tYmluYXRpb24KIG9mIHRoZSBmb2xsb3dpbmcgZW52aXJvbm1lbnQgdmFyaWFibGVzIChpbiBhbnkgb3JkZXIpOgogICBLRVJORUwgLSB0aGUga2VybmVsIGltYWdlIGZpbGUgdG8gdXNlCiAgIFJPT1RGUyAtIHRoZSByb290ZnMgaW1hZ2UgZmlsZSBvciBuZnNyb290IGRpcmVjdG9yeSB0byB1c2UKICAgTUFDSElORSAtIHRoZSBtYWNoaW5lIG5hbWUgKG9wdGlvbmFsLCBhdXRvZGV0ZWN0ZWQgZnJvbSBLRVJORUwgZmlsZW5hbWUgaWYgdW5zcGVjaWZpZWQpCiAgIFNpbXBsaWZpZWQgUUVNVSBjb21tYW5kLWxpbmUgb3B0aW9ucyBjYW4gYmUgcGFzc2VkIHdpdGg6Ci0gICAgbm9ncmFwaGljIC0gZGlzYWJsZXMgdmlkZW8gY29uc29sZQotICAgIHNlcmlhbCAtIGVuYWJsZXMgYSBzZXJpYWwgY29uc29sZSBvbiAvZGV2L3R0eVMwCi0gICAga3ZtIC0gZW5hYmxlcyBLVk0gd2hlbiBydW5uaW5nIHFlbXV4ODYvcWVtdXg4Ni02NCAoVlQtY2FwYWJsZSBDUFUgcmVxdWlyZWQpCi0gICAga3ZtLXZob3N0IC0gZW5hYmxlcyBLVk0gd2l0aCB2aG9zdCBzdXBwb3J0IHdoZW4gcnVubmluZyBxZW11eDg2L3FlbXV4ODYtNjQgKFZULWNhcGFibGUgQ1BVIHJlcXVpcmVkKQorICAgIG5vZ3JhcGhpYyAtIGRpc2FibGUgdmlkZW8gY29uc29sZQorICAgIHNlcmlhbCAtIGVuYWJsZSBhIHNlcmlhbCBjb25zb2xlIG9uIC9kZXYvdHR5UzAKKyAgICBzbGlycCAtIGVuYWJsZSB1c2VyIG5ldHdvcmtpbmcsIG5vIHJvb3QgcHJpdmlsZWdlcyBpcyByZXF1aXJlZAorICAgIGt2bSAtIGVuYWJsZSBLVk0gd2hlbiBydW5uaW5nIHg4Ni94ODZfNjQgKFZULWNhcGFibGUgQ1BVIHJlcXVpcmVkKQorICAgIGt2bS12aG9zdCAtIGVuYWJsZSBLVk0gd2l0aCB2aG9zdCB3aGVuIHJ1bm5pbmcgeDg2L3g4Nl82NCAoVlQtY2FwYWJsZSBDUFUgcmVxdWlyZWQpCiAgICAgcHVibGljdm5jIC0gZW5hYmxlIGEgVk5DIHNlcnZlciBvcGVuIHRvIGFsbCBob3N0cwotICBxZW11cGFyYW1zPSJ4eXoiIC0gc3BlY2lmeSBjdXN0b20gcGFyYW1ldGVycyB0byBRRU1VCi0gIGJvb3RwYXJhbXM9Inh5eiIgLSBzcGVjaWZ5IGN1c3RvbSBrZXJuZWwgcGFyYW1ldGVycyBkdXJpbmcgYm9vdAorICAgIGF1ZGlvIC0gZW5hYmxlIGF1ZGlvCisgIHRjcHNlcmlhbD08cG9ydD4gLSBzcGVjaWZ5IHRjcCBzZXJpYWwgcG9ydCBudW1iZXIKKyAgYmlvc2Rpcj08ZGlyPiAtIHNwZWNpZnkgY3VzdG9tIGJpb3MgZGlyCisgIGJpb3NmaWxlbmFtZT08ZmlsZW5hbWU+IC0gc3BlY2lmeSBiaW9zIGZpbGVuYW1lCisgIHFlbXVwYXJhbXM9PHh5ej4gLSBzcGVjaWZ5IGN1c3RvbSBwYXJhbWV0ZXJzIHRvIFFFTVUKKyAgYm9vdHBhcmFtcz08eHl6PiAtIHNwZWNpZnkgY3VzdG9tIGtlcm5lbCBwYXJhbWV0ZXJzIGR1cmluZyBib290CisgIGhlbHA6IHByaW50IHRoaXMgdGV4dAogCiBFeGFtcGxlczoKLSAgJE1ZTkFNRSBxZW11YXJtCi0gICRNWU5BTUUgcWVtdXg4Ni02NCBjb3JlLWltYWdlLXNhdG8gZXh0NAotICAkTVlOQU1FIHFlbXV4ODYtNjQgd2ljLWltYWdlLW1pbmltYWwgd2ljCi0gICRNWU5BTUUgcGF0aC90by9iekltYWdlLXFlbXV4ODYuYmluIHBhdGgvdG8vbmZzcm9vdGRpci8gc2VyaWFsCi0gICRNWU5BTUUgcWVtdXg4NiBpc28vaGRkaW1nL3ZtZGsvcWNvdzIvdmRpL3JhbWZzL2NwaW8uZ3ouLi4KLSAgJE1ZTkFNRSBxZW11eDg2IHFlbXVwYXJhbXM9Ii1tIDI1NiIKLSAgJE1ZTkFNRSBxZW11eDg2IGJvb3RwYXJhbXM9InBzcGxhc2g9ZmFsc2UiCi0gICRNWU5BTUUgcGF0aC90by88aW1hZ2U+LTxtYWNoaW5lPi52bWRrCi0gICRNWU5BTUUgcGF0aC90by88aW1hZ2U+LTxtYWNoaW5lPi53aWMKLV9FT0YKLSAgICBleGl0IDEKLX0KKyAgcnVucWVtdSBxZW11YXJtCisgIHJ1bnFlbXUgdG1wL2RlcGxveS9pbWFnZXMvcWVtdWFybQorICBydW5xZW11IHRtcC9kZXBsb3kvaW1hZ2VzL3FlbXV4ODYvLnFlbXVib290LmNvbmYKKyAgcnVucWVtdSBxZW11eDg2LTY0IGNvcmUtaW1hZ2Utc2F0byBleHQ0CisgIHJ1bnFlbXUgcWVtdXg4Ni02NCB3aWMtaW1hZ2UtbWluaW1hbCB3aWMKKyAgcnVucWVtdSBwYXRoL3RvL2J6SW1hZ2UtcWVtdXg4Ni5iaW4gcGF0aC90by9uZnNyb290ZGlyLyBzZXJpYWwKKyAgcnVucWVtdSBxZW11eDg2IGlzby9oZGRpbWcvdm1kay9xY293Mi92ZGkvcmFtZnMvY3Bpby5nei4uLgorICBydW5xZW11IHFlbXV4ODYgcWVtdXBhcmFtcz0iLW0gMjU2IgorICBydW5xZW11IHFlbXV4ODYgYm9vdHBhcmFtcz0icHNwbGFzaD1mYWxzZSIKKyAgcnVucWVtdSBwYXRoL3RvLzxpbWFnZT4tPG1hY2hpbmU+LnZtZGsKKyAgcnVucWVtdSBwYXRoL3RvLzxpbWFnZT4tPG1hY2hpbmU+LndpYworIiIiKQogCi1pZiBbICJ4JDEiID0gIngiIF07IHRoZW4KLSAgICB1c2FnZQotZmkKK2RlZiBjaGVja190dW4oKToKKyAgICAiIiJDaGVjayAvZGV2L25ldC9ydW4iIiIKKyAgICBkZXZfdHVuID0gJy9kZXYvbmV0L3R1bicKKyAgICBpZiBub3Qgb3MucGF0aC5leGlzdHMoZGV2X3R1bik6CisgICAgICAgIHJhaXNlIEV4Y2VwdGlvbigiVFVOIGNvbnRyb2wgZGV2aWNlICVzIGlzIHVuYXZhaWxhYmxlOyB5b3UgbWF5IG5lZWQgdG8gZW5hYmxlIFRVTiAoZS5nLiBzdWRvIG1vZHByb2JlIHR1bikiICUgZGV2X3R1bikKIAotZXJyb3IoKSB7Ci0gICAgZWNobyAiRXJyb3I6ICIkKgotICAgIHVzYWdlCi19CisgICAgaWYgbm90IG9zLmFjY2VzcyhkZXZfdHVuLCBvcy5XX09LKToKKyAgICAgICAgcmFpc2UgRXhjZXB0aW9uKCJUVU4gY29udHJvbCBkZXZpY2UgJXMgaXMgbm90IHdyaXRhYmxlLCBwbGVhc2UgZml4IChlLmcuIHN1ZG8gY2htb2QgNjY2ICVzKSIgJSAoZGV2X3R1biwgZGV2X3R1bikpCiAKLU1BQ0hJTkU9JHtNQUNISU5FOj0iIn0KLUtFUk5FTD0ke0tFUk5FTDo9IiJ9Ci1ST09URlM9JHtST09URlM6PSIifQotRlNUWVBFPSR7RlNUWVBFOj0iIn0KLUxBWllfUk9PVEZTPSIiCi1TQ1JJUFRfUUVNVV9PUFQ9IiIKLVNDUklQVF9RRU1VX0VYVFJBX09QVD0iIgotU0NSSVBUX0tFUk5FTF9PUFQ9IiIKLVNFUklBTFNURElPPSIiCi1UQ1BTRVJJQUxfUE9SVE5VTT0iIgotS1ZNX0VOQUJMRUQ9Im5vIgotS1ZNX0FDVElWRT0ibm8iCi1WSE9TVF9FTkFCTEVEPSJubyIKLVZIT1NUX0FDVElWRT0ibm8iCi1JU19WTT0iZmFsc2UiCitkZWYgY2hlY2tfbGliZ2wocWVtdV9iaW4pOgorICAgIGNtZCA9ICdsZGQgJXMnICUgcWVtdV9iaW4KKyAgICBsb2dnZXIuaW5mbygnUnVubmluZyAlcy4uLicgJSBjbWQpCisgICAgbmVlZF9nbCA9IHN1YnByb2Nlc3MuUG9wZW4oY21kLCBzaGVsbD1UcnVlLCBzdGRvdXQ9c3VicHJvY2Vzcy5QSVBFKS5zdGRvdXQucmVhZCgpLmRlY29kZSgndXRmLTgnKQorICAgIGlmIHJlLnNlYXJjaCgnbGliR0xVJywgbmVlZF9nbCk6CisgICAgICAgICMgV2UgY2FuJ3QgcnVuIHdpdGhvdXQgYSBsaWJHTC5zbworICAgICAgICBsaWJnbCA9IEZhbHNlCisgICAgICAgIGNoZWNrX2ZpbGVzID0gKCgnL3Vzci9saWIvbGliR0wuc28nLCAnL3Vzci9saWIvbGliR0xVLnNvJyksIFwKKyAgICAgICAgICAgICgnL3Vzci9saWI2NC9saWJHTC5zbycsICcvdXNyL2xpYjY0L2xpYkdMVS5zbycpLCBcCisgICAgICAgICAgICAoJy91c3IvbGliLyotbGludXgtZ251L2xpYkdMLnNvJywgJy91c3IvbGliLyotbGludXgtZ251L2xpYkdMVS5zbycpKQogCi0jIERldGVybWluZSB3aGV0aGVyIHRoZSBmaWxlIGlzIGEga2VybmVsIG9yIFFFTVUgaW1hZ2UsIGFuZCBzZXQgdGhlCi0jIGFwcHJvcHJpYXRlIHZhcmlhYmxlcwotcHJvY2Vzc19maWxlbmFtZSgpIHsKLSAgICBmaWxlbmFtZT0kMQorICAgICAgICBmb3IgKGYxLCBmMikgaW4gY2hlY2tfZmlsZXM6CisgICAgICAgICAgICBpZiByZS5zZWFyY2goJ1wqJywgZjEpOgorICAgICAgICAgICAgICAgIGZvciBnMSBpbiBnbG9iLmdsb2IoZjEpOgorICAgICAgICAgICAgICAgICAgICBpZiBsaWJnbDoKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgICAgICAgICAgICAgIGlmIG9zLnBhdGguZXhpc3RzKGcxKToKKyAgICAgICAgICAgICAgICAgICAgICAgIGZvciBnMiBpbiBnbG9iLmdsb2IoZjIpOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIG9zLnBhdGguZXhpc3RzKGcyKToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGliZ2wgPSBUcnVlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgICAgICAgICAgaWYgbGliZ2w6CisgICAgICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIGlmIG9zLnBhdGguZXhpc3RzKGYxKSBhbmQgb3MucGF0aC5leGlzdHMoZjIpOgorICAgICAgICAgICAgICAgICAgICBsaWJnbCA9IFRydWUKKyAgICAgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgaWYgbm90IGxpYmdsOgorICAgICAgICAgICAgbG9nZ2VyLmVycm9yKCJZb3UgbmVlZCBsaWJHTC5zbyBhbmQgbGliR0xVLnNvIHRvIGV4aXN0IGluIHlvdXIgbGlicmFyeSBwYXRoIHRvIHJ1biB0aGUgUUVNVSBlbXVsYXRvci4iKQorICAgICAgICAgICAgbG9nZ2VyLmVycm9yKCJVYnVudHUgcGFja2FnZSBuYW1lcyBhcmU6IGxpYmdsMS1tZXNhLWRldiBhbmQgbGliZ2x1MS1tZXNhLWRldi4iKQorICAgICAgICAgICAgbG9nZ2VyLmVycm9yKCJGZWRvcmEgcGFja2FnZSBuYW1lcyBhcmU6IG1lc2EtbGliR0wtZGV2ZWwgbWVzYS1saWJHTFUtZGV2ZWwuIikKKyAgICAgICAgICAgIHJhaXNlIEV4Y2VwdGlvbignJXMgcmVxdWlyZXMgbGliR0xVLCBidXQgbm90IGZvdW5kJyAlIHFlbXVfYmluKQogCi0gICAgIyBFeHRyYWN0IHRoZSBmaWxlbmFtZSBleHRlbnNpb24KLSAgICBFWFQ9YGVjaG8gJGZpbGVuYW1lIHwgYXdrIC1GIC4gJ3sgcHJpbnQgXCRORiB9J2AKLSAgICBjYXNlIC8kRVhULyBpbgotCS9iaW4vKQotCQkjIEEgZmlsZSBlbmRpbmcgaW4gLmJpbiBpcyBhIGtlcm5lbAotCQlbIC16ICIkS0VSTkVMIiBdICYmIEtFUk5FTD0kZmlsZW5hbWUgfHwgXAotCQkgICAgZXJyb3IgImNvbmZsaWN0aW5nIEtFUk5FTCBhcmdzIFskS0VSTkVMXSBhbmQgWyRmaWxlbmFtZV0iCi0JCTs7Ci0JL2V4dFsyMzRdL3wvamZmczIvfC9idHJmcy8pCi0JCSMgQSBmaWxlIGVuZGluZyBpbiBhIHN1cHBvcnR0ZWQgZnMgdHlwZSBpcyBhIHJvb3RmcyBpbWFnZQotCQlpZiBbIC16ICIkRlNUWVBFIiAtbyAiJEZTVFlQRSIgPSAiJEVYVCIgXTsgdGhlbgotCQkgICAgRlNUWVBFPSRFWFQKLQkJICAgIFJPT1RGUz0kZmlsZW5hbWUKLQkJZWxzZQotCQkgICAgZXJyb3IgImNvbmZsaWN0aW5nIEZTVFlQRSB0eXBlcyBbJEZTVFlQRV0gYW5kIFskRVhUXSIKLQkJZmkKLQkJOzsKLQkvaGRkaW1nL3wvaGRkZGlyZWN0L3wvdm1kay98L3dpYy98L3Fjb3cyL3wvdmRpLykKLQkJRlNUWVBFPSRFWFQKLQkJVk09JGZpbGVuYW1lCi0JCVJPT1RGUz0kZmlsZW5hbWUKLQkJSVNfVk09InRydWUiCi0JCTs7Ci0JKikKLQkJZXJyb3IgInVua25vd24gZmlsZSBhcmcgWyRmaWxlbmFtZV0iCi0JCTs7Ci0gICAgZXNhYwotfQorZGVmIGdldF9maXJzdF9maWxlKGNtZHMpOgorICAgICIiIlJldHVybiBmaXJzdCBmaWxlIGZvdW5kIGluIHdpbGRjYXJkIGNtZHMiIiIKKyAgICBmb3IgY21kIGluIGNtZHM6CisgICAgICAgIGFsbF9maWxlcyA9IGdsb2IuZ2xvYihjbWQpCisgICAgICAgIGlmIGFsbF9maWxlczoKKyAgICAgICAgICAgIGZvciBmIGluIGFsbF9maWxlczoKKyAgICAgICAgICAgICAgICBpZiBub3Qgb3MucGF0aC5pc2RpcihmKToKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGYKKyAgICByZXR1cm4gJycKIAotY2hlY2tfZnN0eXBlX2NvbmZsaWN0cygpIHsKLSAgICBpZiBbIC16ICIkRlNUWVBFIiAtbyAiJEZTVFlQRSIgPSAiJDEiIF07IHRoZW4KLSAgICAgICAgRlNUWVBFPSQxCi0gICAgZWxzZQotICAgICAgICBlcnJvciAiY29uZmxpY3RpbmcgRlNUWVBFIHR5cGVzIFskRlNUWVBFXSBhbmQgWyQxXSIKLSAgICBmaQotfQotIyBQYXJzZSBjb21tYW5kIGxpbmUgYXJncyB3aXRob3V0IHJlcXVpcmluZyBzcGVjaWZpYyBvcmRlcmluZy4gSXQncyBhCi0jIGJpdCBtb3JlIGNvbXBsZXgsIGJ1dCBvZmZlcnMgYSBncmVhdCB1c2VyIGV4cGVyaWVuY2UuCi13aGlsZSB0cnVlOyBkbwotICAgIGFyZz0kezF9Ci0gICAgY2FzZSAiJGFyZyIgaW4KLSAgICAgICAgInFlbXV4ODYiIHwgInFlbXV4ODYtNjQiIHwgInFlbXVhcm0iIHwgInFlbXVhcm02NCIgfCAicWVtdW1pcHMiIHwgInFlbXVtaXBzZWwiIHwgXAotICAgICAgICAicWVtdW1pcHM2NCIgfCAicWVtdXNoNCIgIHwgInFlbXVwcGMiIHwgInFlbXVtaWNyb2JsYXplIiB8ICJxZW11enlucSIpCi0gICAgICAgICAgICBbIC16ICIkTUFDSElORSIgLW8gIiRNQUNISU5FIiA9ICIkYXJnIiBdICYmIE1BQ0hJTkU9JGFyZyB8fCBcCi0gICAgICAgICAgICAgICAgZXJyb3IgImNvbmZsaWN0aW5nIE1BQ0hJTkUgdHlwZXMgWyRNQUNISU5FXSBhbmQgWyRhcmddIgotICAgICAgICAgICAgOzsKLSAgICAgICAgImV4dCJbMjM0XSB8ICJqZmZzMiIgfCAibmZzIiB8ICJidHJmcyIpCi0gICAgICAgICAgICBjaGVja19mc3R5cGVfY29uZmxpY3RzICRhcmcKLSAgICAgICAgICAgIDs7Ci0gICAgICAgICJoZGRpbWciIHwgImhkZGRpcmVjdCIgfCAid2ljIiB8ICJ2bWRrIiB8ICJxY293MiIgfCAidmRpIiB8ICJpc28iKQotICAgICAgICAgICAgY2hlY2tfZnN0eXBlX2NvbmZsaWN0cyAkYXJnCi0gICAgICAgICAgICBJU19WTT0idHJ1ZSIKLSAgICAgICAgICAgIDs7Ci0gICAgICAgICJyYW1mcyIgfCAiY3Bpby5neiIpCi0gICAgICAgICAgICBGU1RZUEU9Y3Bpby5negotICAgICAgICAgICAgOzsKLSAgICAgICAgIm5vZ3JhcGhpYyIpCi0gICAgICAgICAgICBTQ1JJUFRfUUVNVV9PUFQ9IiRTQ1JJUFRfUUVNVV9PUFQgLW5vZ3JhcGhpYyIKLSAgICAgICAgICAgIFNDUklQVF9LRVJORUxfT1BUPSIkU0NSSVBUX0tFUk5FTF9PUFQgY29uc29sZT10dHlTMCIKLSAgICAgICAgICAgIDs7Ci0gICAgICAgICJzZXJpYWwiKQotICAgICAgICAgICAgU0NSSVBUX1FFTVVfT1BUPSIkU0NSSVBUX1FFTVVfT1BUIC1zZXJpYWwgc3RkaW8iCi0gICAgICAgICAgICBTQ1JJUFRfS0VSTkVMX09QVD0iJFNDUklQVF9LRVJORUxfT1BUIGNvbnNvbGU9dHR5UzAiCi0gICAgICAgICAgICBTRVJJQUxTVERJTz0iMSIKLSAgICAgICAgICAgIDs7Ci0gICAgICAgICJ0Y3BzZXJpYWw9IiopCi0gICAgICAgICAgICBUQ1BTRVJJQUxfUE9SVE5VTT0ke2FyZyMjdGNwc2VyaWFsPX0KLSAgICAgICAgICAgIDs7Ci0gICAgICAgICJiaW9zZGlyPSIqKQotICAgICAgICAgICAgQ1VTVE9NQklPU0RJUj0iJHthcmcjI2Jpb3NkaXI9fSIKLQkgICAgOzsKLSAgICAgICAgImJpb3NmaWxlbmFtZT0iKikKLSAgICAgICAgICAgIFNDUklQVF9RRU1VX09QVD0iJFNDUklQVF9RRU1VX09QVCAtYmlvcyAke2FyZyMjYmlvc2ZpbGVuYW1lPX0iCi0gICAgICAgICAgICA7OwotICAgICAgICAicWVtdXBhcmFtcz0iKikKLSAgICAgICAgICAgIFNDUklQVF9RRU1VX0VYVFJBX09QVD0iJHthcmcjI3FlbXVwYXJhbXM9fSIKK2NsYXNzIEJhc2VDb25maWcob2JqZWN0KToKKyAgICBkZWYgX19pbml0X18oc2VsZik6CisgICAgICAgICMgVmFycyBjYW4gYmUgbWVyZ2VkIHdpdGggLnFlbXVib290LmNvbmYsIHVzZSBhIGRpY3QgdG8gbWFuYWdlIHRoZW0uCisgICAgICAgIHNlbGYuZCA9IHsKKyAgICAgICAgICAgICdNQUNISU5FJzogJycsCisgICAgICAgICAgICAnREVQTE9ZX0RJUl9JTUFHRSc6ICcnLAorICAgICAgICAgICAgJ1FCX0tFUk5FTF9ST09UJzogJy9kZXYvdmRhJywKKyAgICAgICAgfQogCi0gICAgICAgICAgICAjIFdhcm4gdXNlciBpZiB0aGV5IHRyeSB0byBzcGVjaWZ5IHNlcmlhbCBvciBrdm0gb3B0aW9ucwotICAgICAgICAgICAgIyB0byB1c2Ugc2ltcGxpZmllZCBvcHRpb25zIGluc3RlYWQKLSAgICAgICAgICAgIHNlcmlhbF9vcHRpb249YGV4cHIgIiRTQ1JJUFRfUUVNVV9FWFRSQV9PUFQiIDogJy4qXCgtc2VyaWFsXCknYAotICAgICAgICAgICAga3ZtX29wdGlvbj1gZXhwciAiJFNDUklQVF9RRU1VX0VYVFJBX09QVCIgOiAnLipcKC1lbmFibGUta3ZtXCknYAotICAgICAgICAgICAgdmdhX29wdGlvbj1gZXhwciAiJFNDUklQVF9RRU1VX0VYVFJBX09QVCIgOiAnLipcKC12Z2FcKSdgCi0gICAgICAgICAgICBbICEgLXogIiRzZXJpYWxfb3B0aW9uIiAtbyAhIC16ICIka3ZtX29wdGlvbiIgXSAmJiBcCi0gICAgICAgICAgICAgICAgZWNobyAiUGxlYXNlIHVzZSBzaW1wbGlmaWVkIHNlcmlhbCBvciBrdm0gb3B0aW9ucyBpbnN0ZWFkIgotICAgICAgICAgICAgOzsKLSAgICAgICAgImJvb3RwYXJhbXM9IiopCi0gICAgICAgICAgICBTQ1JJUFRfS0VSTkVMX09QVD0iJFNDUklQVF9LRVJORUxfT1BUICR7YXJnIyNib290cGFyYW1zPX0iCi0gICAgICAgICAgICA7OwotICAgICAgICAiYXVkaW8iKQotICAgICAgICAgICAgaWYgWyAieCRNQUNISU5FIiA9ICJ4cWVtdXg4NiIgLW8gIngkTUFDSElORSIgPSAieHFlbXV4ODYtNjQiIF07IHRoZW4KLSAgICAgICAgICAgICAgICBlY2hvICJFbmFibGluZyBhdWRpbyBpbiBxZW11LiIKLSAgICAgICAgICAgICAgICBlY2hvICJQbGVhc2UgaW5zdGFsbCBzbmRfaW50ZWw4eDAgb3Igc25kX2VuczEzNzAgZHJpdmVyIGluIGxpbnV4IGd1ZXN0LiIKLSAgICAgICAgICAgICAgICBRRU1VX0FVRElPX0RSVj0iYWxzYSIKLSAgICAgICAgICAgICAgICBTQ1JJUFRfUUVNVV9PUFQ9IiRTQ1JJUFRfUUVNVV9PUFQgLXNvdW5kaHcgYWM5NyxlczEzNzAiCi0gICAgICAgICAgICBmaQotICAgICAgICAgICAgOzsKLSAgICAgICAgImt2bSIpCi0gICAgICAgICAgICBLVk1fRU5BQkxFRD0ieWVzIgotICAgICAgICAgICAgS1ZNX0NBUEFCTEU9YGdyZXAgLXEgJ3ZteFx8c3ZtJyAvcHJvYy9jcHVpbmZvICYmIGVjaG8gMWAKLSAgICAgICAgICAgIDs7Ci0gICAgICAgICJrdm0tdmhvc3QiKQotICAgICAgICAgICAgS1ZNX0VOQUJMRUQ9InllcyIKLSAgICAgICAgICAgIEtWTV9DQVBBQkxFPWBncmVwIC1xICd2bXhcfHN2bScgL3Byb2MvY3B1aW5mbyAmJiBlY2hvIDFgCi0gICAgICAgICAgICBWSE9TVF9FTkFCTEVEPSJ5ZXMiCi0gICAgICAgICAgICA7OwotICAgICAgICAic2xpcnAiKQotICAgICAgICAgICAgU0xJUlBfRU5BQkxFRD0ieWVzIgotICAgICAgICAgICAgOzsKLSAgICAgICAgInB1YmxpY3ZuYyIpCi0gICAgICAgICAgICBTQ1JJUFRfUUVNVV9PUFQ9IiRTQ1JJUFRfUUVNVV9PUFQgLXZuYyA6MCIKLSAgICAgICAgICAgIDs7Ci0gICAgICAgICotaW1hZ2UqKQotICAgICAgICAgICAgWyAteiAiJFJPT1RGUyIgXSB8fCBcCi0gICAgICAgIAkJZXJyb3IgImNvbmZsaWN0aW5nIFJPT1RGUyBhcmdzIFskUk9PVEZTXSBhbmQgWyRhcmddIgotICAgICAgICAgICAgaWYgWyAtZiAiJGFyZyIgXTsgdGhlbgotICAgICAgICAgICAgICAgIHByb2Nlc3NfZmlsZW5hbWUgJGFyZwotICAgICAgICAgICAgZWxpZiBbIC1kICIkYXJnIiBdOyB0aGVuCi0gICAgICAgICAgICAgICAgIyBIYW5kbGUgdGhlIGNhc2Ugd2hlcmUgdGhlIG5mc3Jvb3QgZGlyIGhhcyAtaW1hZ2UtCi0gICAgICAgICAgICAgICAgIyBpbiB0aGUgcGF0aG5hbWUKLSAgICAgICAgICAgICAgICBlY2hvICJBc3N1bWluZyAkYXJnIGlzIGFuIG5mcyByb290ZnMiCi0gICAgICAgICAgICAgICAgRlNUWVBFPW5mcwotICAgICAgICAgICAgICAgIFJPT1RGUz0kYXJnCi0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgUk9PVEZTPSRhcmcKLSAgICAgICAgICAgICAgICBMQVpZX1JPT1RGUz0idHJ1ZSIKLSAgICAgICAgICAgIGZpCi0gICAgICAgICAgICA7OwotICAgICAgICAiIikgYnJlYWsgOzsKLSAgICAgICAgKikKLSAgICAgICAgICAgICMgQSBkaXJlY3RvcnkgbmFtZSBpcyBhbiBuZnMgcm9vdGZzCi0gICAgICAgICAgICBpZiBbIC1kICIkYXJnIiBdOyB0aGVuCi0gICAgICAgICAgICAgICAgZWNobyAiQXNzdW1pbmcgJGFyZyBpcyBhbiBuZnMgcm9vdGZzIgotICAgICAgICAgICAgICAgIGlmIFsgLXogIiRGU1RZUEUiIC1vICIkRlNUWVBFIiA9ICJuZnMiIF07IHRoZW4KLSAgICAgICAgICAgICAgICAgICAgRlNUWVBFPW5mcwotICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgICAgZXJyb3IgImNvbmZsaWN0aW5nIEZTVFlQRSB0eXBlcyBbJGFyZ10gYW5kIG5mcyIKLSAgICAgICAgICAgICAgICBmaQorICAgICAgICBzZWxmLnFlbXVfb3B0ID0gJycKKyAgICAgICAgc2VsZi5xZW11X29wdF9zY3JpcHQgPSAnJworICAgICAgICBzZWxmLm5mc19kaXIgPSAnJworICAgICAgICBzZWxmLmNsZWFuX25mc19kaXIgPSBGYWxzZQorICAgICAgICBzZWxmLm5mc19zZXJ2ZXIgPSAnJworICAgICAgICBzZWxmLnJvb3RmcyA9ICcnCisgICAgICAgIHNlbGYucWVtdWJvb3QgPSAnJworICAgICAgICBzZWxmLnFiY29uZmxvYWQgPSBGYWxzZQorICAgICAgICBzZWxmLmtlcm5lbCA9ICcnCisgICAgICAgIHNlbGYua2VybmVsX2NtZGxpbmUgPSAnJworICAgICAgICBzZWxmLmtlcm5lbF9jbWRsaW5lX3NjcmlwdCA9ICcnCisgICAgICAgIHNlbGYuZHRiID0gJycKKyAgICAgICAgc2VsZi5mc3R5cGUgPSAnJworICAgICAgICBzZWxmLmt2bV9lbmFibGVkID0gRmFsc2UKKyAgICAgICAgc2VsZi52aG9zdF9lbmFibGVkID0gRmFsc2UKKyAgICAgICAgc2VsZi5zbGlycF9lbmFibGVkID0gRmFsc2UKKyAgICAgICAgc2VsZi5uZnNfaW5zdGFuY2UgPSAwCisgICAgICAgIHNlbGYubmZzX3J1bm5pbmcgPSBGYWxzZQorICAgICAgICBzZWxmLnNlcmlhbHN0ZGlvID0gRmFsc2UKKyAgICAgICAgc2VsZi5jbGVhbnRhcCA9IEZhbHNlCisgICAgICAgIHNlbGYuc2F2ZWRfc3R0eSA9ICcnCisgICAgICAgIHNlbGYuYXVkaW9fZW5hYmxlZCA9IEZhbHNlCisgICAgICAgIHNlbGYudGNwc2VyaWFsX3BvcnRudW0gPSAnJworICAgICAgICBzZWxmLmN1c3RvbWJpb3NkaXIgPSAnJworICAgICAgICBzZWxmLmxvY2sgPSAnJworICAgICAgICBzZWxmLmxvY2tfZGVzY3JpcHRvciA9ICcnCisgICAgICAgIHNlbGYuYml0YmFrZV9lID0gJycKKyAgICAgICAgc2VsZi5zbmFwc2hvdCA9IEZhbHNlCisgICAgICAgIHNlbGYuZnN0eXBlcyA9ICgnZXh0MicsICdleHQzJywgJ2V4dDQnLCAnamZmczInLCAnbmZzJywgJ2J0cmZzJywgJ2NwaW8uZ3onLCAnY3BpbycsICdyYW1mcycpCisgICAgICAgIHNlbGYudm10eXBlcyA9ICgnaGRkaW1nJywgJ2hkZGRpcmVjdCcsICd3aWMnLCAndm1kaycsICdxY293MicsICd2ZGknLCAnaXNvJykKIAotICAgICAgICAgICAgICAgIGlmIFsgLXogIiRST09URlMiIF07IHRoZW4KLSAgICAgICAgICAgICAgICAgICAgUk9PVEZTPSRhcmcKLSAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgICAgIGVycm9yICJjb25mbGljdGluZyBST09URlMgYXJncyBbJFJPT1RGU10gYW5kIFskYXJnXSIKLSAgICAgICAgICAgICAgICBmaQotICAgICAgICAgICAgZWxpZiBbIC1mICIkYXJnIiBdOyB0aGVuCi0gICAgICAgICAgICAgICAgcHJvY2Vzc19maWxlbmFtZSAkYXJnCi0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgZXJyb3IgInVuYWJsZSB0byBjbGFzc2lmeSBhcmcgWyRhcmddIgotICAgICAgICAgICAgZmkKLSAgICAgICAgICAgIDs7Ci0gICAgZXNhYwotICAgIHNoaWZ0Ci1kb25lCisgICAgZGVmIGFjcXVpcmVfbG9jayhzZWxmKToKKyAgICAgICAgbG9nZ2VyLmluZm8oIkFjcXVpcmluZyBsb2NrZmlsZSAlcy4uLiIgJSBzZWxmLmxvY2spCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHNlbGYubG9ja19kZXNjcmlwdG9yID0gb3BlbihzZWxmLmxvY2ssICd3JykKKyAgICAgICAgICAgIGZjbnRsLmZsb2NrKHNlbGYubG9ja19kZXNjcmlwdG9yLCBmY250bC5MT0NLX0VYfGZjbnRsLkxPQ0tfTkIpCisgICAgICAgIGV4Y2VwdCBFeGNlcHRpb24gYXMgZToKKyAgICAgICAgICAgIGxvZ2dlci5pbmZvKCJBY3F1aXJpbmcgbG9ja2ZpbGUgJXMgZmFpbGVkOiAlcyIgJSAoc2VsZi5sb2NrLCBlKSkKKyAgICAgICAgICAgIGlmIHNlbGYubG9ja19kZXNjcmlwdG9yOgorICAgICAgICAgICAgICAgIHNlbGYubG9ja19kZXNjcmlwdG9yLmNsb3NlKCkKKyAgICAgICAgICAgIHJldHVybiBGYWxzZQorICAgICAgICByZXR1cm4gVHJ1ZQogCi1pZiBbICEgLWMgL2Rldi9uZXQvdHVuIF0gOyB0aGVuCi0JZWNobyAiVFVOIGNvbnRyb2wgZGV2aWNlIC9kZXYvbmV0L3R1biBpcyB1bmF2YWlsYWJsZTsgeW91IG1heSBuZWVkIHRvIGVuYWJsZSBUVU4gKGUuZy4gc3VkbyBtb2Rwcm9iZSB0dW4pIgotCWV4aXQgMQotZWxpZiBbICEgLXcgL2Rldi9uZXQvdHVuIF0gOyB0aGVuCi0JZWNobyAiVFVOIGNvbnRyb2wgZGV2aWNlIC9kZXYvbmV0L3R1biBpcyBub3Qgd3JpdGFibGUsIHBsZWFzZSBmaXggKGUuZy4gc3VkbyBjaG1vZCA2NjYgL2Rldi9uZXQvdHVuKSIKLQlleGl0IDEKLWZpCisgICAgZGVmIHJlbGVhc2VfbG9jayhzZWxmKToKKyAgICAgICAgZmNudGwuZmxvY2soc2VsZi5sb2NrX2Rlc2NyaXB0b3IsIGZjbnRsLkxPQ0tfVU4pCisgICAgICAgIHNlbGYubG9ja19kZXNjcmlwdG9yLmNsb3NlKCkKKyAgICAgICAgb3MucmVtb3ZlKHNlbGYubG9jaykKIAotIyBSZXBvcnQgZXJyb3JzIGZvciBtaXNzaW5nIGNvbWJpbmF0aW9ucyBvZiBvcHRpb25zCi1pZiBbIC16ICIkTUFDSElORSIgLWEgLXogIiRLRVJORUwiIC1hIC16ICIkVk0iIC1hICIkRlNUWVBFIiAhPSAid2ljIiBdOyB0aGVuCi0gICAgZXJyb3IgInlvdSBtdXN0IHNwZWNpZnkgYXQgbGVhc3QgYSBNQUNISU5FIG9yIEtFUk5FTCBhcmd1bWVudCIKLWZpCi1pZiBbICIkRlNUWVBFIiA9ICJuZnMiIC1hIC16ICIkUk9PVEZTIiBdOyB0aGVuCi0gICAgZXJyb3IgIk5GUyBib290aW5nIHdpdGhvdXQgYW4gZXhwbGljaXQgUk9PVEZTIHBhdGggaXMgbm90IHlldCBzdXBwb3J0ZWQiCi1maQorICAgIGRlZiBnZXQoc2VsZiwga2V5KToKKyAgICAgICAgaWYga2V5IGluIHNlbGYuZDoKKyAgICAgICAgICAgIHJldHVybiBzZWxmLmQuZ2V0KGtleSkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHJldHVybiAnJwogCi1pZiBbIC16ICIkTUFDSElORSIgXTsgdGhlbgotICAgIGlmIFsgIiRJU19WTSIgPSAidHJ1ZSIgXTsgdGhlbgotICAgICAgICBbICJ4JEZTVFlQRSIgPSAieHdpYyIgXSAmJiBmaWxlbmFtZT0kUk9PVEZTIHx8IGZpbGVuYW1lPSRWTQotICAgICAgICBNQUNISU5FPWBiYXNlbmFtZSAkZmlsZW5hbWUgfCBzZWQgLW4gJ3MvLipcKHFlbXV4ODYtNjRcfHFlbXV4ODZcfHFlbXVhcm02NFx8cWVtdWFybVx8cWVtdW1pcHM2NFx8cWVtdW1pcHNcfHFlbXVwcGNcfHFlbXVzaDRcKS4qL1wxL3AnYAotICAgICAgICBpZiBbIC16ICIkTUFDSElORSIgXTsgdGhlbgotICAgICAgICAgICAgZXJyb3IgIlVuYWJsZSB0byBzZXQgTUFDSElORSBmcm9tIGltYWdlIGZpbGVuYW1lIFskVk1dIgotICAgICAgICBmaQotICAgICAgICBlY2hvICJTZXQgTUFDSElORSB0byBbJE1BQ0hJTkVdIGJhc2VkIG9uIGltYWdlIFskVk1dIgotICAgIGVsc2UKLSAgICAgICAgTUFDSElORT1gYmFzZW5hbWUgJEtFUk5FTCB8IHNlZCAtbiAncy8uKlwocWVtdXg4Ni02NFx8cWVtdXg4Nlx8cWVtdWFybTY0XHxxZW11YXJtXHxxZW11bWlwczY0XHxxZW11bWlwc1x8cWVtdXBwY1x8cWVtdXNoNFwpLiovXDEvcCdgCi0gICAgICAgIGlmIFsgLXogIiRNQUNISU5FIiBdOyB0aGVuCi0gICAgICAgICAgICBlcnJvciAiVW5hYmxlIHRvIHNldCBNQUNISU5FIGZyb20ga2VybmVsIGZpbGVuYW1lIFskS0VSTkVMXSIKLSAgICAgICAgZmkKLSAgICAgICAgZWNobyAiU2V0IE1BQ0hJTkUgdG8gWyRNQUNISU5FXSBiYXNlZCBvbiBrZXJuZWwgWyRLRVJORUxdIgotICAgIGZpCi1maQorICAgIGRlZiBzZXQoc2VsZiwga2V5LCB2YWx1ZSk6CisgICAgICAgIHNlbGYuZFtrZXldID0gdmFsdWUKIAotWU9DVE9fS1ZNX1dJS0k9Imh0dHBzOi8vd2lraS55b2N0b3Byb2plY3Qub3JnL3dpa2kvSG93X3RvX2VuYWJsZV9LVk1fZm9yX1Bva3lfcWVtdSIKLVlPQ1RPX1BBUkFWSVJUX0tWTV9XSUtJPSJodHRwczovL3dpa2kueW9jdG9wcm9qZWN0Lm9yZy93aWtpL1J1bm5pbmdfYW5feDg2X1lvY3RvX0xpbnV4X2ltYWdlX3VuZGVyX1FFTVVfS1ZNIgotIyBEZXRlY3QgS1ZNIGNvbmZpZ3VyYXRpb24KLWlmIFsgIngkS1ZNX0VOQUJMRUQiID0gInh5ZXMiIF07IHRoZW4KLSAgICBpZiBbIC16ICIkS1ZNX0NBUEFCTEUiIF07IHRoZW4KLSAgICAgICAgZWNobyAiWW91IGFyZSB0cnlpbmcgdG8gZW5hYmxlIEtWTSBvbiBhIGNwdSB3aXRob3V0IFZUIHN1cHBvcnQuIgotICAgICAgICBlY2hvICJSZW1vdmUga3ZtIGZyb20gdGhlIGNvbW1hbmQtbGluZSwgb3IgcmVmZXIiCi0gICAgICAgIGVjaG8gIiRZT0NUT19LVk1fV0lLSSI7Ci0gICAgICAgIGV4aXQgMTsKLSAgICBmaQotICAgIGlmIFsgIngkTUFDSElORSIgIT0gInhxZW11eDg2IiAtYSAieCRNQUNISU5FIiAhPSAieHFlbXV4ODYtNjQiIF07IHRoZW4KLSAgICAgICAgZWNobyAiS1ZNIG9ubHkgc3VwcG9ydCB4ODYgJiB4ODYtNjQuIFJlbW92ZSBrdm0gZnJvbSB0aGUgY29tbWFuZC1saW5lIjsKLSAgICAgICAgZXhpdCAxOwotICAgIGZpCi0gICAgaWYgWyAhIC1lIC9kZXYva3ZtIF07IHRoZW4KLSAgICAgICAgZWNobyAiTWlzc2luZyBLVk0gZGV2aWNlLiBIYXZlIHlvdSBpbnNlcnRlZCBrdm0gbW9kdWxlcz8iCi0gICAgICAgIGVjaG8gIkZvciBmdXJ0aGVyIGhlbHAgc2VlOiIKLSAgICAgICAgZWNobyAiJFlPQ1RPX0tWTV9XSUtJIjsKLSAgICAgICAgZXhpdCAxOwotICAgIGZpCi0gICAgaWYgWyAtdyAvZGV2L2t2bSAtYSAtciAvZGV2L2t2bSBdOyB0aGVuCi0gICAgICAgIFNDUklQVF9RRU1VX09QVD0iJFNDUklQVF9RRU1VX09QVCAtZW5hYmxlLWt2bSIKLSAgICAgICAgS1ZNX0FDVElWRT0ieWVzIgotICAgIGVsc2UKLSAgICAgICAgZWNobyAiWW91IGhhdmUgbm8gcmlnaHRzIG9uIC9kZXYva3ZtLiIKLSAgICAgICAgZWNobyAiUGxlYXNlIGNoYW5nZSB0aGUgb3duZXJzaGlwIG9mIHRoaXMgZmlsZSBhcyBkZXNjcmliZWQgYXQ6IgotICAgICAgICBlY2hvICIkWU9DVE9fS1ZNX1dJS0kiOwotICAgICAgICBleGl0IDE7Ci0gICAgZmkKLSAgICBpZiBbICJ4JFZIT1NUX0VOQUJMRUQiID0gInh5ZXMiIF07IHRoZW4KLSAgICAgICAgaWYgWyAhIC1lIC9kZXYvdmhvc3QtbmV0IF07IHRoZW4KLSAgICAgICAgICAgIGVjaG8gIk1pc3NpbmcgdmlydGlvIG5ldCBkZXZpY2UuIEhhdmUgeW91IGluc2VydGVkIHZob3N0LW5ldCBtb2R1bGU/IgotICAgICAgICAgICAgZWNobyAiRm9yIGZ1cnRoZXIgaGVscCBzZWU6IgotICAgICAgICAgICAgZWNobyAiJFlPQ1RPX1BBUkFWSVJUX0tWTV9XSUtJIjsKLSAgICAgICAgICAgIGV4aXQgMTsKLSAgICAgICAgZmkKKyAgICBkZWYgaXNfZGVwbG95X2Rpcl9pbWFnZShzZWxmLCBwKToKKyAgICAgICAgaWYgb3MucGF0aC5pc2RpcihwKToKKyAgICAgICAgICAgIGlmIG5vdCByZS5zZWFyY2goJy5xZW11Ym9vdC5jb25mJCcsICdcbicuam9pbihvcy5saXN0ZGlyKHApKSwgcmUuTSk6CisgICAgICAgICAgICAgICAgbG9nZ2VyLmluZm8oIkNhbid0IGZpbmQgcmVxdWlyZWQgKi5xZW11Ym9vdC5jb25mIGluICVzIiAlIHApCisgICAgICAgICAgICAgICAgcmV0dXJuIEZhbHNlCisgICAgICAgICAgICBpZiBub3QgcmUuc2VhcmNoKCctaW1hZ2UtJywgJ1xuJy5qb2luKG9zLmxpc3RkaXIocCkpKToKKyAgICAgICAgICAgICAgICBsb2dnZXIuaW5mbygiQ2FuJ3QgZmluZCAqLWltYWdlLSogaW4gJXMiICUgcCkKKyAgICAgICAgICAgICAgICByZXR1cm4gRmFsc2UKKyAgICAgICAgICAgIHJldHVybiBUcnVlCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICByZXR1cm4gRmFsc2UKIAotICAgICAgICBpZiBbIC13IC9kZXYvdmhvc3QtbmV0IC1hIC1yIC9kZXYvdmhvc3QtbmV0IF07IHRoZW4KLSAgICAgICAgICAgIFZIT1NUX0FDVElWRT0ieWVzIgotICAgICAgICBlbHNlCi0gICAgICAgICAgICBlY2hvICJZb3UgaGF2ZSBubyByaWdodHMgb24gL2Rldi92aG9zdC1uZXQuIgotICAgICAgICAgICAgZWNobyAiUGxlYXNlIGNoYW5nZSB0aGUgb3duZXJzaGlwIG9mIHRoaXMgZmlsZSBhcyBkZXNjcmliZWQgYXQ6IgotICAgICAgICAgICAgZWNobyAiJFlPQ1RPX0tWTV9XSUtJIjsKLSAgICAgICAgICAgIGV4aXQgMTsKLSAgICAgICAgZmkKLSAgICBmaQotZmkKKyAgICBkZWYgY2hlY2tfYXJnX2ZzdHlwZShzZWxmLCBmc3QpOgorICAgICAgICAiIiJDaGVjayBhbmQgc2V0IEZTVFlQRSIiIgorICAgICAgICBpZiBmc3Qgbm90IGluIHNlbGYuZnN0eXBlcyArIHNlbGYudm10eXBlczoKKyAgICAgICAgICAgIGxvZ2dlci53YXJuKCJNYXliZSB1bnN1cHBvcnRlZCBGU1RZUEU6ICVzIiAlIGZzdCkKKyAgICAgICAgaWYgbm90IHNlbGYuZnN0eXBlIG9yIHNlbGYuZnN0eXBlID09IGZzdDoKKyAgICAgICAgICAgIGlmIGZzdCA9PSAncmFtZnMnOgorICAgICAgICAgICAgICAgIGZzdCA9ICdjcGlvLmd6JworICAgICAgICAgICAgc2VsZi5mc3R5cGUgPSBmc3QKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHJhaXNlIEV4Y2VwdGlvbigiQ29uZmxpY3Rpbmc6IEZTVFlQRSAlcyBhbmQgJXMiICUgKHNlbGYuZnN0eXBlLCBmc3QpKQogCi1tYWNoaW5lMj1gZWNobyAkTUFDSElORSB8IHRyICdhLXonICdBLVonIHwgc2VkICdzLy0vXy8nYAotIyBNQUNISU5FIGlzIG5vdyBzZXQgZm9yIGFsbCBjYXNlcworICAgIGRlZiBzZXRfbWFjaGluZV9kZXBsb3lfZGlyKHNlbGYsIG1hY2hpbmUsIGRlcGxveV9kaXJfaW1hZ2UpOgorICAgICAgICAiIiJTZXQgTUFDSElORSBhbmQgREVQTE9ZX0RJUl9JTUFHRSIiIgorICAgICAgICBsb2dnZXIuaW5mbygnTUFDSElORTogJXMnICUgbWFjaGluZSkKKyAgICAgICAgc2VsZi5zZXQoIk1BQ0hJTkUiLCBtYWNoaW5lKQorICAgICAgICBsb2dnZXIuaW5mbygnREVQTE9ZX0RJUl9JTUFHRTogJXMnICUgZGVwbG95X2Rpcl9pbWFnZSkKKyAgICAgICAgc2VsZi5zZXQoIkRFUExPWV9ESVJfSU1BR0UiLCBkZXBsb3lfZGlyX2ltYWdlKQogCi0jIERlZmF1bHRzIHVzZWQgd2hlbiB0aGVzZSB2YXJzIG5lZWQgdG8gYmUgaW5mZXJyZWQKLVFFTVVYODZfREVGQVVMVF9LRVJORUw9YnpJbWFnZS1xZW11eDg2LmJpbgotUUVNVVg4Nl9ERUZBVUxUX0ZTVFlQRT1leHQ0CisgICAgZGVmIGNoZWNrX2FyZ19uZnMoc2VsZiwgcCk6CisgICAgICAgIGlmIG9zLnBhdGguaXNkaXIocCk6CisgICAgICAgICAgICBzZWxmLm5mc19kaXIgPSBwCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBtID0gcmUubWF0Y2goJyguKik6KC4qKScsIHApCisgICAgICAgICAgICBzZWxmLm5mc19zZXJ2ZXIgPSBtLmdyb3VwKDEpCisgICAgICAgICAgICBzZWxmLm5mc19kaXIgPSBtLmdyb3VwKDIpCisgICAgICAgIHNlbGYucm9vdGZzID0gIiIKKyAgICAgICAgc2VsZi5jaGVja19hcmdfZnN0eXBlKCduZnMnKQogCi1RRU1VWDg2XzY0X0RFRkFVTFRfS0VSTkVMPWJ6SW1hZ2UtcWVtdXg4Ni02NC5iaW4KLVFFTVVYODZfNjRfREVGQVVMVF9GU1RZUEU9ZXh0NAorICAgIGRlZiBjaGVja19hcmdfcGF0aChzZWxmLCBwKToKKyAgICAgICAgIiIiCisgICAgICAgIC0gQ2hlY2sgd2hldGhlciBpdCBpcyA8aW1hZ2U+LnFlbXVib290LmNvbmYgb3IgY29udGFpbnMgPGltYWdlPi5xZW11Ym9vdC5jb25mCisgICAgICAgIC0gQ2hlY2sgd2hldGhlciBpcyBhIGtlcm5lbCBmaWxlCisgICAgICAgIC0gQ2hlY2sgd2hldGhlciBpcyBhIGltYWdlIGZpbGUKKyAgICAgICAgLSBDaGVjayB3aGV0aGVyIGl0IGlzIGEgbmZzIGRpcgorICAgICAgICAiIiIKKyAgICAgICAgaWYgcC5lbmRzd2l0aCgnLnFlbXVib290LmNvbmYnKToKKyAgICAgICAgICAgIHNlbGYucWVtdWJvb3QgPSBwCisgICAgICAgICAgICBzZWxmLnFiY29uZmxvYWQgPSBUcnVlCisgICAgICAgIGVsaWYgcmUuc2VhcmNoKCdcLmJpbiQnLCBwKSBvciByZS5zZWFyY2goJ2J6SW1hZ2UnLCBwKSBvciBcCisgICAgICAgICAgICAgcmUuc2VhcmNoKCd6SW1hZ2UnLCBwKSBvciByZS5zZWFyY2goJ3ZtbGludXgnLCBwKSBvciBcCisgICAgICAgICAgICAgcmUuc2VhcmNoKCdmaXRJbWFnZScsIHApIG9yIHJlLnNlYXJjaCgndUltYWdlJywgcCk6CisgICAgICAgICAgICBzZWxmLmtlcm5lbCA9ICBwCisgICAgICAgIGVsaWYgb3MucGF0aC5leGlzdHMocCkgYW5kIChub3Qgb3MucGF0aC5pc2RpcihwKSkgYW5kIHJlLnNlYXJjaCgnLWltYWdlLScsIG9zLnBhdGguYmFzZW5hbWUocCkpOgorICAgICAgICAgICAgc2VsZi5yb290ZnMgPSBwCisgICAgICAgICAgICBkaXJwYXRoID0gb3MucGF0aC5kaXJuYW1lKHApCisgICAgICAgICAgICBtID0gcmUuc2VhcmNoKCcoLiopXC4oLiopJCcsIHApCisgICAgICAgICAgICBpZiBtOgorICAgICAgICAgICAgICAgIHFiID0gJyVzJXMnICUgKHJlLnN1YignXC5yb290ZnMkJywgJycsIG0uZ3JvdXAoMSkpLCAnLnFlbXVib290LmNvbmYnKQorICAgICAgICAgICAgICAgIGlmIG9zLnBhdGguZXhpc3RzKHFiKToKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5xZW11Ym9vdCA9IHFiCisgICAgICAgICAgICAgICAgICAgIHNlbGYucWJjb25mbG9hZCA9IFRydWUKKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICBsb2dnZXIud2FybigiJXMgZG9lc24ndCBleGlzdCIgJSBxYikKKyAgICAgICAgICAgICAgICBmc3QgPSBtLmdyb3VwKDIpCisgICAgICAgICAgICAgICAgc2VsZi5jaGVja19hcmdfZnN0eXBlKGZzdCkKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgcmFpc2UgRXhjZXB0aW9uKCJDYW4ndCBmaW5kIEZTVFlQRSBmcm9tOiAlcyIgJSBwKQorICAgICAgICBlbGlmIG9zLnBhdGguaXNkaXIocCkgb3IgcmUuc2VhcmNoKCc6JywgYXJnKSBhbmQgcmUuc2VhcmNoKCcvJywgYXJnKToKKyAgICAgICAgICAgIGlmIHNlbGYuaXNfZGVwbG95X2Rpcl9pbWFnZShwKToKKyAgICAgICAgICAgICAgICBsb2dnZXIuaW5mbygnREVQTE9ZX0RJUl9JTUFHRTogJXMnICUgcCkKKyAgICAgICAgICAgICAgICBzZWxmLnNldCgiREVQTE9ZX0RJUl9JTUFHRSIsIHApCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIGxvZ2dlci5pbmZvKCJBc3N1bWluZyAlcyBpcyBhbiBuZnMgcm9vdGZzIiAlIHApCisgICAgICAgICAgICAgICAgc2VsZi5jaGVja19hcmdfbmZzKHApCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICByYWlzZSBFeGNlcHRpb24oIlVua25vd24gcGF0aCBhcmcgJXMiICUgcCkKIAotUUVNVUFSTV9ERUZBVUxUX0tFUk5FTD16SW1hZ2UtcWVtdWFybS5iaW4KLVFFTVVBUk1fREVGQVVMVF9GU1RZUEU9ZXh0NAorICAgIGRlZiBjaGVja19hcmdfbWFjaGluZShzZWxmLCBhcmcpOgorICAgICAgICAiIiJDaGVjayB3aGV0aGVyIGl0IGlzIGEgbWFjaGluZSIiIgorICAgICAgICBpZiBzZWxmLmdldCgnTUFDSElORScpIGFuZCBzZWxmLmdldCgnTUFDSElORScpICE9IGFyZyBvciByZS5zZWFyY2goJy8nLCBhcmcpOgorICAgICAgICAgICAgcmFpc2UgRXhjZXB0aW9uKCJVbmtub3duIGFyZzogJXMiICUgYXJnKQorICAgICAgICBlbGlmIHNlbGYuZ2V0KCdNQUNISU5FJykgPT0gYXJnOgorICAgICAgICAgICAgcmV0dXJuCisgICAgICAgIGxvZ2dlci5pbmZvKCdBc3N1bWluZyBNQUNISU5FID0gJXMnICUgYXJnKQogCi1RRU1VQVJNNjRfREVGQVVMVF9LRVJORUw9SW1hZ2UtcWVtdWFybTY0LmJpbgotUUVNVUFSTTY0X0RFRkFVTFRfRlNUWVBFPWV4dDQKKyAgICAgICAgIyBpZiB3ZSdyZSBydW5uaW5nIHVuZGVyIHRlc3RpbWFnZSwgb3Igc2ltaWxhcmx5IGFzIGEgY2hpbGQKKyAgICAgICAgIyBvZiBhbiBleGlzdGluZyBiaXRiYWtlIGludm9jYXRpb24sIHdlIGNhbid0IGludm9rZSBiaXRiYWtlCisgICAgICAgICMgdG8gdmFsaWRhdGUgdGhlIE1BQ0hJTkUgc2V0dGluZyBhbmQgbXVzdCBhc3N1bWUgaXQncyBjb3JyZWN0Li4uCisgICAgICAgICMgRklYTUU6IHRlc3RpbWFnZS5iYmNsYXNzIGV4cG9ydHMgdGhlc2UgdHdvIHZhcmlhYmxlcyBpbnRvIGVudiwKKyAgICAgICAgIyBhcmUgdGhlcmUgb3RoZXIgc2NlbmFyaW9zIGluIHdoaWNoIHdlIG5lZWQgdG8gc3VwcG9ydCBiZWluZworICAgICAgICAjIGludm9rZWQgYnkgYml0YmFrZT8KKyAgICAgICAgZGVwbG95ID0gb3MuZW52aXJvbi5nZXQoJ0RFUExPWV9ESVJfSU1BR0UnKQorICAgICAgICBiYmNoaWxkID0gZGVwbG95IGFuZCBvcy5lbnZpcm9uLmdldCgnT0VfVE1QRElSJykKKyAgICAgICAgaWYgYmJjaGlsZDoKKyAgICAgICAgICAgIHNlbGYuc2V0X21hY2hpbmVfZGVwbG95X2RpcihhcmcsIGRlcGxveSkKKyAgICAgICAgICAgIHJldHVybgorICAgICAgICAjIGFsc28gY2hlY2sgd2hldGhlciB3ZSdyZSBydW5uaW5nIHVuZGVyIGEgc291cmNlZCB0b29sY2hhaW4KKyAgICAgICAgIyBlbnZpcm9ubWVudCBmaWxlCisgICAgICAgIGlmIG9zLmVudmlyb24uZ2V0KCdPRUNPUkVfTkFUSVZFX1NZU1JPT1QnKToKKyAgICAgICAgICAgIHNlbGYuc2V0KCJNQUNISU5FIiwgYXJnKQorICAgICAgICAgICAgcmV0dXJuCiAKLVFFTVVNSVBTX0RFRkFVTFRfS0VSTkVMPXZtbGludXgtcWVtdW1pcHMuYmluCi1RRU1VTUlQU19ERUZBVUxUX0ZTVFlQRT1leHQ0CisgICAgICAgIGNtZCA9ICdNQUNISU5FPSVzIGJpdGJha2UgLWUnICUgYXJnCisgICAgICAgIGxvZ2dlci5pbmZvKCdSdW5uaW5nICVzLi4uJyAlIGNtZCkKKyAgICAgICAgc2VsZi5iaXRiYWtlX2UgPSBzdWJwcm9jZXNzLlBvcGVuKGNtZCwgc2hlbGw9VHJ1ZSwgc3Rkb3V0PXN1YnByb2Nlc3MuUElQRSkuc3Rkb3V0LnJlYWQoKS5kZWNvZGUoJ3V0Zi04JykKKyAgICAgICAgIyBiaXRiYWtlIC1lIGRvZXNuJ3QgcmVwb3J0IGludmFsaWQgTUFDSElORSBhcyBhbiBlcnJvciwgc28KKyAgICAgICAgIyBsZXQncyBjaGVjayBERVBMT1lfRElSX0lNQUdFIHRvIG1ha2Ugc3VyZSB0aGF0IGl0IGlzIGEgdmFsaWQKKyAgICAgICAgIyBNQUNISU5FLgorICAgICAgICBzID0gcmUuc2VhcmNoKCdeREVQTE9ZX0RJUl9JTUFHRT0iKC4qKSInLCBzZWxmLmJpdGJha2VfZSwgcmUuTSkKKyAgICAgICAgaWYgczoKKyAgICAgICAgICAgIGRlcGxveV9kaXJfaW1hZ2UgPSBzLmdyb3VwKDEpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICByYWlzZSBFeGNlcHRpb24oImJpdGJha2UgLWUgJXMiICUgc2VsZi5iaXRiYWtlX2UpCisgICAgICAgIGlmIHNlbGYuaXNfZGVwbG95X2Rpcl9pbWFnZShkZXBsb3lfZGlyX2ltYWdlKToKKyAgICAgICAgICAgIHNlbGYuc2V0X21hY2hpbmVfZGVwbG95X2RpcihhcmcsIGRlcGxveV9kaXJfaW1hZ2UpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBsb2dnZXIuZXJyb3IoIiVzIG5vdCBhIGRpcmVjdG9yeSB2YWxpZCBERVBMT1lfRElSX0lNQUdFIiAlIGRlcGxveV9kaXJfaW1hZ2UpCisgICAgICAgICAgICBzZWxmLnNldCgiTUFDSElORSIsIGFyZykKIAotUUVNVU1JUFNFTF9ERUZBVUxUX0tFUk5FTD12bWxpbnV4LXFlbXVtaXBzZWwuYmluCi1RRU1VTUlQU0VMX0RFRkFVTFRfRlNUWVBFPWV4dDQKKyAgICBkZWYgY2hlY2tfYXJncyhzZWxmKToKKyAgICAgICAgdW5rbm93bl9hcmcgPSAiIgorICAgICAgICBmb3IgYXJnIGluIHN5cy5hcmd2WzE6XToKKyAgICAgICAgICAgIGlmIGFyZyBpbiBzZWxmLmZzdHlwZXMgKyBzZWxmLnZtdHlwZXM6CisgICAgICAgICAgICAgICAgc2VsZi5jaGVja19hcmdfZnN0eXBlKGFyZykKKyAgICAgICAgICAgIGVsaWYgYXJnID09ICdub2dyYXBoaWMnOgorICAgICAgICAgICAgICAgIHNlbGYucWVtdV9vcHRfc2NyaXB0ICs9ICcgLW5vZ3JhcGhpYycKKyAgICAgICAgICAgICAgICBzZWxmLmtlcm5lbF9jbWRsaW5lX3NjcmlwdCArPSAnIGNvbnNvbGU9dHR5UzAnCisgICAgICAgICAgICBlbGlmIGFyZyA9PSAnc2VyaWFsJzoKKyAgICAgICAgICAgICAgICBzZWxmLmtlcm5lbF9jbWRsaW5lX3NjcmlwdCArPSAnIGNvbnNvbGU9dHR5UzAnCisgICAgICAgICAgICAgICAgc2VsZi5zZXJpYWxzdGRpbyA9IFRydWUKKyAgICAgICAgICAgIGVsaWYgYXJnID09ICdhdWRpbyc6CisgICAgICAgICAgICAgICAgbG9nZ2VyLmluZm8oIkVuYWJsaW5nIGF1ZGlvIGluIHFlbXUiKQorICAgICAgICAgICAgICAgIGxvZ2dlci5pbmZvKCJQbGVhc2UgaW5zdGFsbCBzb3VuZCBkcml2ZXJzIGluIGxpbnV4IGhvc3QiKQorICAgICAgICAgICAgICAgIHNlbGYuYXVkaW9fZW5hYmxlZCA9IFRydWUKKyAgICAgICAgICAgIGVsaWYgYXJnID09ICdrdm0nOgorICAgICAgICAgICAgICAgIHNlbGYua3ZtX2VuYWJsZWQgPSBUcnVlCisgICAgICAgICAgICBlbGlmIGFyZyA9PSAna3ZtLXZob3N0JzoKKyAgICAgICAgICAgICAgICBzZWxmLnZob3N0X2VuYWJsZWQgPSBUcnVlCisgICAgICAgICAgICBlbGlmIGFyZyA9PSAnc2xpcnAnOgorICAgICAgICAgICAgICAgIHNlbGYuc2xpcnBfZW5hYmxlZCA9IFRydWUKKyAgICAgICAgICAgIGVsaWYgYXJnID09ICdzbmFwc2hvdCc6CisgICAgICAgICAgICAgICAgc2VsZi5zbmFwc2hvdCA9IFRydWUKKyAgICAgICAgICAgIGVsaWYgYXJnID09ICdwdWJsaWN2bmMnOgorICAgICAgICAgICAgICAgIHNlbGYucWVtdV9vcHRfc2NyaXB0ICs9ICcgLXZuYyA6MCcKKyAgICAgICAgICAgIGVsaWYgYXJnLnN0YXJ0c3dpdGgoJ3RjcHNlcmlhbD0nKToKKyAgICAgICAgICAgICAgICBzZWxmLnRjcHNlcmlhbF9wb3J0bnVtID0gYXJnW2xlbigndGNwc2VyaWFsPScpOl0KKyAgICAgICAgICAgIGVsaWYgYXJnLnN0YXJ0c3dpdGgoJ2Jpb3NkaXI9Jyk6CisgICAgICAgICAgICAgICAgc2VsZi5jdXN0b21iaW9zZGlyID0gYXJnW2xlbignYmlvc2Rpcj0nKTpdCisgICAgICAgICAgICBlbGlmIGFyZy5zdGFydHN3aXRoKCdiaW9zZmlsZW5hbWU9Jyk6CisgICAgICAgICAgICAgICAgc2VsZi5xZW11X29wdF9zY3JpcHQgKz0gJyAtYmlvcyAlcycgJSBhcmdbbGVuKCdiaW9zZmlsZW5hbWU9Jyk6XQorICAgICAgICAgICAgZWxpZiBhcmcuc3RhcnRzd2l0aCgncWVtdXBhcmFtcz0nKToKKyAgICAgICAgICAgICAgICBzZWxmLnFlbXVfb3B0X3NjcmlwdCArPSAnICVzJyAlIGFyZ1tsZW4oJ3FlbXVwYXJhbXM9Jyk6XQorICAgICAgICAgICAgZWxpZiBhcmcuc3RhcnRzd2l0aCgnYm9vdHBhcmFtcz0nKToKKyAgICAgICAgICAgICAgICBzZWxmLmtlcm5lbF9jbWRsaW5lX3NjcmlwdCArPSAnICVzJyAlIGFyZ1tsZW4oJ2Jvb3RwYXJhbXM9Jyk6XQorICAgICAgICAgICAgZWxpZiBvcy5wYXRoLmV4aXN0cyhhcmcpIG9yIChyZS5zZWFyY2goJzonLCBhcmcpIGFuZCByZS5zZWFyY2goJy8nLCBhcmcpKToKKyAgICAgICAgICAgICAgICBzZWxmLmNoZWNrX2FyZ19wYXRoKG9zLnBhdGguYWJzcGF0aChhcmcpKQorICAgICAgICAgICAgZWxpZiByZS5zZWFyY2goJy1pbWFnZS0nLCBhcmcpOgorICAgICAgICAgICAgICAgICMgTGF6eSByb290ZnMKKyAgICAgICAgICAgICAgICBzZWxmLnJvb3RmcyA9IGFyZworICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAjIEF0IGxhc3QsIGFzc3VtZSBpcyBpdCB0aGUgTUFDSElORQorICAgICAgICAgICAgICAgIGlmIChub3QgdW5rbm93bl9hcmcpIG9yIHVua25vd25fYXJnID09IGFyZzoKKyAgICAgICAgICAgICAgICAgICAgdW5rbm93bl9hcmcgPSBhcmcKKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICByYWlzZSBFeGNlcHRpb24oIkNhbid0IGhhbmRsZSB0d28gdW5rbm93biBhcmdzOiAlcyAlcyIgJSAodW5rbm93bl9hcmcsIGFyZykpCisgICAgICAgICMgQ2hlY2sgdG8gbWFrZSBzdXJlIGl0IGlzIGEgdmFsaWQgbWFjaGluZQorICAgICAgICBpZiB1bmtub3duX2FyZzoKKyAgICAgICAgICAgIGlmIHNlbGYuZ2V0KCdNQUNISU5FJykgPT0gdW5rbm93bl9hcmc6CisgICAgICAgICAgICAgICAgcmV0dXJuCisgICAgICAgICAgICBpZiBub3Qgc2VsZi5nZXQoJ0RFUExPWV9ESVJfSU1BR0UnKToKKyAgICAgICAgICAgICAgICAjIFRyeWluZyB0byBnZXQgREVQTE9ZX0RJUl9JTUFHRSBmcm9tIGVudi4KKyAgICAgICAgICAgICAgICBwID0gb3MuZ2V0ZW52KCdERVBMT1lfRElSX0lNQUdFJykKKyAgICAgICAgICAgICAgICBpZiBwIGFuZCBzZWxmLmlzX2RlcGxveV9kaXJfaW1hZ2UocCk6CisgICAgICAgICAgICAgICAgICAgIG1hY2hpbmUgPSBvcy5wYXRoLmJhc2VuYW1lKHApCisgICAgICAgICAgICAgICAgICAgIGlmIHVua25vd25fYXJnID09IG1hY2hpbmU6CisgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLnNldF9tYWNoaW5lX2RlcGxveV9kaXIobWFjaGluZSwgcCkKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybgorICAgICAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICAgICAgbG9nZ2VyLmluZm8oJ0RFUExPWV9ESVJfSU1BR0U6ICVzJyAlIHApCisgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLnNldCgiREVQTE9ZX0RJUl9JTUFHRSIsIHApCisgICAgICAgICAgICBzZWxmLmNoZWNrX2FyZ19tYWNoaW5lKHVua25vd25fYXJnKQogCi1RRU1VTUlQUzY0X0RFRkFVTFRfS0VSTkVMPXZtbGludXgtcWVtdW1pcHM2NC5iaW4KLVFFTVVNSVBTNjRfREVGQVVMVF9GU1RZUEU9ZXh0NAorICAgIGRlZiBjaGVja19rdm0oc2VsZik6CisgICAgICAgICIiIkNoZWNrIGt2bSBhbmQga3ZtLWhvc3QiIiIKKyAgICAgICAgaWYgbm90IChzZWxmLmt2bV9lbmFibGVkIG9yIHNlbGYudmhvc3RfZW5hYmxlZCk6CisgICAgICAgICAgICBzZWxmLnFlbXVfb3B0X3NjcmlwdCArPSAnICVzICVzJyAlIChzZWxmLmdldCgnUUJfTUFDSElORScpLCBzZWxmLmdldCgnUUJfQ1BVJykpCisgICAgICAgICAgICByZXR1cm4KIAotUUVNVVNINF9ERUZBVUxUX0tFUk5FTD12bWxpbnV4LXFlbXVtaXBzLmJpbgotUUVNVVNINF9ERUZBVUxUX0ZTVFlQRT1leHQ0CisgICAgICAgIGlmIG5vdCBzZWxmLmdldCgnUUJfQ1BVX0tWTScpOgorICAgICAgICAgICAgcmFpc2UgRXhjZXB0aW9uKCJRQl9DUFVfS1ZNIGlzIE5VTEwsIHRoaXMgYm9hcmQgZG9lc24ndCBzdXBwb3J0IGt2bSIpCiAKLVFFTVVQUENfREVGQVVMVF9LRVJORUw9dm1saW51eC1xZW11cHBjLmJpbgotUUVNVVBQQ19ERUZBVUxUX0ZTVFlQRT1leHQ0CisgICAgICAgIHNlbGYucWVtdV9vcHRfc2NyaXB0ICs9ICcgJXMgJXMnICUgKHNlbGYuZ2V0KCdRQl9NQUNISU5FJyksIHNlbGYuZ2V0KCdRQl9DUFVfS1ZNJykpCisgICAgICAgIHlvY3RvX2t2bV93aWtpID0gImh0dHBzOi8vd2lraS55b2N0b3Byb2plY3Qub3JnL3dpa2kvSG93X3RvX2VuYWJsZV9LVk1fZm9yX1Bva3lfcWVtdSIKKyAgICAgICAgeW9jdG9fcGFyYXZpcnRfa3ZtX3dpa2kgPSAiaHR0cHM6Ly93aWtpLnlvY3RvcHJvamVjdC5vcmcvd2lraS9SdW5uaW5nX2FuX3g4Nl9Zb2N0b19MaW51eF9pbWFnZV91bmRlcl9RRU1VX0tWTSIKKyAgICAgICAgZGV2X2t2bSA9ICcvZGV2L2t2bScKKyAgICAgICAgZGV2X3Zob3N0ID0gJy9kZXYvdmhvc3QtbmV0JworICAgICAgICB3aXRoIG9wZW4oJy9wcm9jL2NwdWluZm8nLCAncicpIGFzIGY6CisgICAgICAgICAgICBrdm1fY2FwID0gcmUuc2VhcmNoKCd2bXh8c3ZtJywgIiIuam9pbihmLnJlYWRsaW5lcygpKSkKKyAgICAgICAgaWYgbm90IGt2bV9jYXA6CisgICAgICAgICAgICBsb2dnZXIuZXJyb3IoIllvdSBhcmUgdHJ5aW5nIHRvIGVuYWJsZSBLVk0gb24gYSBjcHUgd2l0aG91dCBWVCBzdXBwb3J0LiIpCisgICAgICAgICAgICBsb2dnZXIuZXJyb3IoIlJlbW92ZSBrdm0gZnJvbSB0aGUgY29tbWFuZC1saW5lLCBvciByZWZlcjoiKQorICAgICAgICAgICAgcmFpc2UgRXhjZXB0aW9uKHlvY3RvX2t2bV93aWtpKQogCi1RRU1VTUlDUk9CTEFaRV9ERUZBVUxUX0tFUk5FTD1saW51eC5iaW4udWIKLVFFTVVNSUNST0JMQVpFX0RFRkFVTFRfRlNUWVBFPWNwaW8KKyAgICAgICAgaWYgbm90IG9zLnBhdGguZXhpc3RzKGRldl9rdm0pOgorICAgICAgICAgICAgbG9nZ2VyLmVycm9yKCJNaXNzaW5nIEtWTSBkZXZpY2UuIEhhdmUgeW91IGluc2VydGVkIGt2bSBtb2R1bGVzPyIpCisgICAgICAgICAgICBsb2dnZXIuZXJyb3IoIkZvciBmdXJ0aGVyIGhlbHAgc2VlOiIpCisgICAgICAgICAgICByYWlzZSBFeGNlcHRpb24oeW9jdG9fa3ZtX3dpa2kpCiAKLVFFTVVaWU5RX0RFRkFVTFRfS0VSTkVMPXVJbWFnZQotUUVNVVpZTlFfREVGQVVMVF9GU1RZUEU9Y3BpbworICAgICAgICBpZiBvcy5hY2Nlc3MoZGV2X2t2bSwgb3MuV19PS3xvcy5SX09LKToKKyAgICAgICAgICAgIHNlbGYucWVtdV9vcHRfc2NyaXB0ICs9ICcgLWVuYWJsZS1rdm0nCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBsb2dnZXIuZXJyb3IoIllvdSBoYXZlIG5vIHJlYWQgb3Igd3JpdGUgcGVybWlzc2lvbiBvbiAvZGV2L2t2bS4iKQorICAgICAgICAgICAgbG9nZ2VyLmVycm9yKCJQbGVhc2UgY2hhbmdlIHRoZSBvd25lcnNoaXAgb2YgdGhpcyBmaWxlIGFzIGRlc2NyaWJlZCBhdDoiKQorICAgICAgICAgICAgcmFpc2UgRXhjZXB0aW9uKHlvY3RvX2t2bV93aWtpKQogCi1zZXR1cF9wYXRoX3ZhcnMoKSB7Ci0gICAgaWYgWyAteiAiJE9FX1RNUERJUiIgXSA7IHRoZW4KLSAgICAgICAgUEFUSFNfUkVRVUlSRUQ9dHJ1ZQotICAgIGVsaWYgWyAiJDEiID0gIjEiIC1hIC16ICIkREVQTE9ZX0RJUl9JTUFHRSIgXSA7IHRoZW4KLSAgICAgICAgUEFUSFNfUkVRVUlSRUQ9dHJ1ZQotICAgIGVsc2UKLSAgICAgICAgUEFUSFNfUkVRVUlSRUQ9ZmFsc2UKLSAgICBmaQorICAgICAgICBpZiBzZWxmLnZob3N0X2VuYWJsZWQ6CisgICAgICAgICAgICBpZiBub3Qgb3MucGF0aC5leGlzdHMoZGV2X3Zob3N0KToKKyAgICAgICAgICAgICAgICBsb2dnZXIuZXJyb3IoIk1pc3NpbmcgdmlydGlvIG5ldCBkZXZpY2UuIEhhdmUgeW91IGluc2VydGVkIHZob3N0LW5ldCBtb2R1bGU/IikKKyAgICAgICAgICAgICAgICBsb2dnZXIuZXJyb3IoIkZvciBmdXJ0aGVyIGhlbHAgc2VlOiIpCisgICAgICAgICAgICAgICAgcmFpc2UgRXhjZXB0aW9uKHlvY3RvX3BhcmF2aXJ0X2t2bV93aWtpKQogCi0gICAgaWYgWyAiJFBBVEhTX1JFUVVJUkVEIiA9ICJ0cnVlIiBdOyB0aGVuCi0gICAgICAgICMgVHJ5IHRvIGdldCB0aGUgdmFyaWFibGUgdmFsdWVzIGZyb20gYml0YmFrZQotICAgICAgICB0eXBlIC1QIGJpdGJha2UgJj4vZGV2L251bGwgfHwgewotICAgICAgICAgICAgZWNobyAiSW4gb3JkZXIgZm9yIHRoaXMgc2NyaXB0IHRvIGR5bmFtaWNhbGx5IGluZmVyIHBhdGhzIjsKLSAgICAgICAgICAgIGVjaG8gInRvIGtlcm5lbHMgb3IgZmlsZXN5c3RlbSBpbWFnZXMsIHlvdSBlaXRoZXIgbmVlZCI7Ci0gICAgICAgICAgICBlY2hvICJiaXRiYWtlIGluIHlvdXIgUEFUSCBvciB0byBzb3VyY2Ugb2UtaW5pdC1idWlsZC1lbnYiOwotICAgICAgICAgICAgZWNobyAiYmVmb3JlIHJ1bm5pbmcgdGhpcyBzY3JpcHQiID4mMjsKLSAgICAgICAgICAgIGV4aXQgMTsgfQorICAgICAgICBpZiBub3Qgb3MuYWNjZXNzKGRldl9rdm0sIG9zLldfT0t8b3MuUl9PSyk6CisgICAgICAgICAgICAgICAgbG9nZ2VyLmVycm9yKCJZb3UgaGF2ZSBubyByZWFkIG9yIHdyaXRlIHBlcm1pc3Npb24gb24gL2Rldi92aG9zdC1uZXQuIikKKyAgICAgICAgICAgICAgICBsb2dnZXIuZXJyb3IoIlBsZWFzZSBjaGFuZ2UgdGhlIG93bmVyc2hpcCBvZiB0aGlzIGZpbGUgYXMgZGVzY3JpYmVkIGF0OiIpCisgICAgICAgICAgICAgICAgcmFpc2UgRXhjZXB0aW9uKHlvY3RvX2t2bV93aWtpKQogCi0gICAgICAgICMgV2UgaGF2ZSBiaXRiYWtlIGluIFBBVEgsIGdldCB0aGUgdmFyaWFibGUgdmFsdWVzIGZyb20gYml0YmFrZQotICAgICAgICBCSVRCQUtFX0VOVl9UTVBGSUxFPWBta3RlbXAgLS10bXBkaXIgcnVucWVtdS5YWFhYWFhYWFhYYAotICAgICAgICBpZiBbICIkPyIgIT0gIjAiIF0gOyB0aGVuCi0gICAgICAgICAgICBlY2hvICJFcnJvcjogbWt0ZW1wIGZhaWxlZCBmb3IgYml0YmFrZSBlbnZpcm9ubWVudCBvdXRwdXQiCi0gICAgICAgICAgICBleGl0IDEKLSAgICAgICAgZmkKKyAgICBkZWYgY2hlY2tfZnN0eXBlKHNlbGYpOgorICAgICAgICAiIiJDaGVjayBhbmQgc2V0dXAgRlNUWVBFIiIiCisgICAgICAgIGlmIG5vdCBzZWxmLmZzdHlwZToKKyAgICAgICAgICAgIGZzdHlwZSA9IHNlbGYuZ2V0KCdRQl9ERUZBVUxUX0ZTVFlQRScpCisgICAgICAgICAgICBpZiBmc3R5cGU6CisgICAgICAgICAgICAgICAgc2VsZi5mc3R5cGUgPSBmc3R5cGUKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgcmFpc2UgRXhjZXB0aW9uKCJGU1RZUEUgaXMgTlVMTCEiKQogCi0gICAgICAgIE1BQ0hJTkU9JE1BQ0hJTkUgYml0YmFrZSAtZSA+ICRCSVRCQUtFX0VOVl9UTVBGSUxFCi0gICAgICAgIGlmIFsgLXogIiRPRV9UTVBESVIiIF0gOyB0aGVuCi0gICAgICAgICAgICBPRV9UTVBESVI9YHNlZCAtbiAncy9eVE1QRElSPVwiXCguKlwpXCIvXDEvcCcgJEJJVEJBS0VfRU5WX1RNUEZJTEVgCi0gICAgICAgIGZpCi0gICAgICAgIGlmIFsgLXogIiRERVBMT1lfRElSX0lNQUdFIiBdIDsgdGhlbgotICAgICAgICAgICAgREVQTE9ZX0RJUl9JTUFHRT1gc2VkIC1uICdzL15ERVBMT1lfRElSX0lNQUdFPVwiXCguKlwpXCIvXDEvcCcgJEJJVEJBS0VfRU5WX1RNUEZJTEVgCi0gICAgICAgIGZpCi0gICAgICAgIGlmIFsgLXogIiRPRV9UTVBESVIiIF07IHRoZW4KLSAgICAgICAgICAgICMgQ2hlY2sgZm9yIGVycm9ycyBmcm9tIGJpdGJha2UgdGhhdCB0aGUgdXNlciBuZWVkcyB0byBrbm93IGFib3V0Ci0gICAgICAgICAgICBCSVRCQUtFX09VVFBVVD1gY2F0ICRCSVRCQUtFX0VOVl9UTVBGSUxFIHwgd2MgLWxgCi0gICAgICAgICAgICBpZiBbICIkQklUQkFLRV9PVVRQVVQiIC1lcSAiMCIgXTsgdGhlbgotICAgICAgICAgICAgICAgIGVjaG8gIkVycm9yOiB0aGlzIHNjcmlwdCBuZWVkcyB0byBiZSBydW4gZnJvbSB5b3VyIGJ1aWxkIGRpcmVjdG9yeSwgb3IgeW91IG5lZWQiCi0gICAgICAgICAgICAgICAgZWNobyAidG8gZXhwbGljaXRseSBzZXQgT0VfVE1QRElSIGFuZCBERVBMT1lfRElSX0lNQUdFIGluIHlvdXIgZW52aXJvbm1lbnQiCi0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgZWNobyAiVGhlcmUgd2FzIGFuIGVycm9yIHJ1bm5pbmcgYml0YmFrZSB0byBkZXRlcm1pbmUgVE1QRElSIgotICAgICAgICAgICAgICAgIGVjaG8gIkhlcmUgaXMgdGhlIG91dHB1dCBmcm9tICdiaXRiYWtlIC1lJzoiCi0gICAgICAgICAgICAgICAgY2F0ICRCSVRCQUtFX0VOVl9UTVBGSUxFCi0gICAgICAgICAgICBmaQotICAgICAgICAgICAgcm0gJEJJVEJBS0VfRU5WX1RNUEZJTEUKLSAgICAgICAgICAgIGV4aXQgMQotICAgICAgICBmaQotICAgICAgICBybSAkQklUQkFLRV9FTlZfVE1QRklMRQotICAgIGZpCi19CisgICAgZGVmIGNoZWNrX3Jvb3RmcyhzZWxmKToKKyAgICAgICAgIiIiQ2hlY2sgYW5kIHNldCByb290ZnMiIiIKIAotc2V0dXBfc3lzcm9vdCgpIHsKLSAgICAjIFRvb2xjaGFpbiBpbnN0YWxscyBzZXQgdXAgJE9FQ09SRV9OQVRJVkVfU1lTUk9PVCBpbiB0aGVpcgotICAgICMgZW52aXJvbm1lbnQgc2NyaXB0LiBJZiB0aGF0IHZhcmlhYmxlIGlzbid0IHNldCwgd2UncmUKLSAgICAjIGVpdGhlciBpbiBhbiBpbi10cmVlIGJ1aWxkIHNjZW5hcmlvIG9yIHRoZSBlbnZpcm9ubWVudAotICAgICMgc2NyaXB0IHdhc24ndCBzb3VyY2UnZC4KLSAgICBpZiBbIC16ICIkT0VDT1JFX05BVElWRV9TWVNST09UIiBdOyB0aGVuCi0gICAgICAgIHNldHVwX3BhdGhfdmFycwotICAgICAgICBCVUlMRF9BUkNIPWB1bmFtZSAtbWAKLSAgICAgICAgQlVJTERfT1M9YHVuYW1lIHwgdHIgJ1tBLVpdJyAnW2Etel0nYAotICAgICAgICBCVUlMRF9TWVM9IiRCVUlMRF9BUkNILSRCVUlMRF9PUyIKKyAgICAgICAgaWYgc2VsZi5mc3R5cGUgPT0gJ25mcyc6CisgICAgICAgICAgICByZXR1cm4KIAotICAgICAgICBPRUNPUkVfTkFUSVZFX1NZU1JPT1Q9JE9FX1RNUERJUi9zeXNyb290cy8kQlVJTERfU1lTCi0gICAgZmkgCisgICAgICAgIGlmIHNlbGYucm9vdGZzIGFuZCBub3Qgb3MucGF0aC5leGlzdHMoc2VsZi5yb290ZnMpOgorICAgICAgICAgICAgIyBMYXp5IHJvb3RmcworICAgICAgICAgICAgc2VsZi5yb290ZnMgPSAiJXMvJXMtJXMuJXMiICUgKHNlbGYuZ2V0KCdERVBMT1lfRElSX0lNQUdFJyksCisgICAgICAgICAgICAgICAgICAgIHNlbGYucm9vdGZzLCBzZWxmLmdldCgnTUFDSElORScpLAorICAgICAgICAgICAgICAgICAgICBzZWxmLmZzdHlwZSkKKyAgICAgICAgZWxpZiBub3Qgc2VsZi5yb290ZnM6CisgICAgICAgICAgICBjbWRfbmFtZSA9ICclcy8lcyouJXMnICUgKHNlbGYuZ2V0KCdERVBMT1lfRElSX0lNQUdFJyksIHNlbGYuZ2V0KCdJTUFHRV9OQU1FJyksIHNlbGYuZnN0eXBlKQorICAgICAgICAgICAgY21kX2xpbmsgPSAnJXMvJXMqLiVzJyAlIChzZWxmLmdldCgnREVQTE9ZX0RJUl9JTUFHRScpLCBzZWxmLmdldCgnSU1BR0VfTElOS19OQU1FJyksIHNlbGYuZnN0eXBlKQorICAgICAgICAgICAgY21kcyA9IChjbWRfbmFtZSwgY21kX2xpbmspCisgICAgICAgICAgICBzZWxmLnJvb3RmcyA9IGdldF9maXJzdF9maWxlKGNtZHMpCisgICAgICAgICAgICBpZiBub3Qgc2VsZi5yb290ZnM6CisgICAgICAgICAgICAgICAgcmFpc2UgRXhjZXB0aW9uKCJGYWlsZWQgdG8gZmluZCByb290ZnM6ICVzIG9yICVzIiAlIGNtZHMpCiAKLSAgICAjIFNvbWUgcmVjaXBlcyBzdG9yZSB0aGUgQklPUyB1bmRlciAkT0VfVE1QRElSL3N5c3Jvb3RzLyRNQUNISU5FLAotICAgICMgbm93IGRlZmluZWQgYXMgT0VDT1JFX01BQ0hJTkVfU1lTUk9PVC4gVGhlIGxhdHRlciBpcyB1c2VkIHdoZW4gc2VhcmNoaW5nCi0gICAgIyBCSU9TLCBWR0EgQklPUyBhbmQga2V5bWFwcy4KLSAgICBpZiBbIC16ICIkT0VDT1JFX01BQ0hJTkVfU1lTUk9PVCIgXTsgdGhlbgotICAgICAgICBPRUNPUkVfTUFDSElORV9TWVNST09UPSRPRV9UTVBESVIvc3lzcm9vdHMvJE1BQ0hJTkUKLSAgICBmaQotfQorICAgICAgICBpZiBub3Qgb3MucGF0aC5leGlzdHMoc2VsZi5yb290ZnMpOgorICAgICAgICAgICAgcmFpc2UgRXhjZXB0aW9uKCJDYW4ndCBmaW5kIHJvb3RmczogJXMiICUgc2VsZi5yb290ZnMpCiAKLSMgTG9jYXRlIGEgcm9vdGZzIGltYWdlIHRvIGJvb3Qgd2hpY2ggbWF0Y2hlcyBvdXIgZXhwZWN0ZWQKLSMgbWFjaGluZSBhbmQgZnN0eXBlLiAKLWZpbmRpbWFnZSgpIHsKLSAgICB3aGVyZT0kMQotICAgIG1hY2hpbmU9JDIKLSAgICBleHRlbnNpb249JDMKKyAgICBkZWYgY2hlY2tfa2VybmVsKHNlbGYpOgorICAgICAgICAiIiJDaGVjayBhbmQgc2V0IGtlcm5lbCwgZHRiIiIiCisgICAgICAgICMgVGhlIHZtIGltYWdlIGRvZXNuJ3QgbmVlZCBhIGtlcm5lbAorICAgICAgICBpZiBzZWxmLmZzdHlwZSBpbiBzZWxmLnZtdHlwZXM6CisgICAgICAgICAgICByZXR1cm4KIAotICAgICMgU29ydCByb290ZnMgY2FuZGlkYXRlcyBieSBtb2RpZmljYXRpb24gdGltZSAtIHRoZSBtb3N0Ci0gICAgIyByZWNlbnRseSBjcmVhdGVkIG9uZSBpcyB0aGUgb25lIHdlIG1vc3QgbGlrZWx5IHdhbnQgdG8gYm9vdC4KLSAgICBmaWxlbmFtZT1gbHMgLXQxICR3aGVyZS8qLWltYWdlKiRtYWNoaW5lLiRleHRlbnNpb24gMj4vZGV2L251bGwgfCBoZWFkIC1uMWAKLSAgICBpZiBbICJ4JGZpbGVuYW1lIiAhPSAieCIgXTsgdGhlbgotICAgICAgICBST09URlM9JGZpbGVuYW1lCi0gICAgICAgIHJldHVybgotICAgIGZpCisgICAgICAgIGRlcGxveV9kaXJfaW1hZ2UgPSBzZWxmLmdldCgnREVQTE9ZX0RJUl9JTUFHRScpCisgICAgICAgIGlmIG5vdCBzZWxmLmtlcm5lbDoKKyAgICAgICAgICAgIGtlcm5lbF9tYXRjaF9uYW1lID0gIiVzLyVzIiAlIChkZXBsb3lfZGlyX2ltYWdlLCBzZWxmLmdldCgnUUJfREVGQVVMVF9LRVJORUwnKSkKKyAgICAgICAgICAgIGtlcm5lbF9tYXRjaF9saW5rID0gIiVzLyVzIiAlIChkZXBsb3lfZGlyX2ltYWdlLCBzZWxmLmdldCgnS0VSTkVMX0lNQUdFVFlQRScpKQorICAgICAgICAgICAga2VybmVsX3N0YXJ0c3dpdGggPSAiJXMvJXMqIiAlIChkZXBsb3lfZGlyX2ltYWdlLCBzZWxmLmdldCgnS0VSTkVMX0lNQUdFVFlQRScpKQorICAgICAgICAgICAgY21kcyA9IChrZXJuZWxfbWF0Y2hfbmFtZSwga2VybmVsX21hdGNoX2xpbmssIGtlcm5lbF9zdGFydHN3aXRoKQorICAgICAgICAgICAgc2VsZi5rZXJuZWwgPSBnZXRfZmlyc3RfZmlsZShjbWRzKQorICAgICAgICAgICAgaWYgbm90IHNlbGYua2VybmVsOgorICAgICAgICAgICAgICAgIHJhaXNlIEV4Y2VwdGlvbignS0VSTkVMIG5vdCBmb3VuZDogJXMsICVzIG9yICVzJyAlIGNtZHMpCiAKLSAgICBlY2hvICJDb3VsZG4ndCBmaW5kIGEgJG1hY2hpbmUgcm9vdGZzIGltYWdlIGluICR3aGVyZS4iCi0gICAgZXhpdCAxCi19CisgICAgICAgIGlmIG5vdCBvcy5wYXRoLmV4aXN0cyhzZWxmLmtlcm5lbCk6CisgICAgICAgICAgICByYWlzZSBFeGNlcHRpb24oIktFUk5FTCAlcyBub3QgZm91bmQiICUgc2VsZi5rZXJuZWwpCiAKLWlmIFsgLWUgIiRST09URlMiIC1hIC16ICIkRlNUWVBFIiBdOyB0aGVuCi0gICAgIyBFeHRyYWN0IHRoZSBmaWxlbmFtZSBleHRlbnNpb24KLSAgICBFWFQ9YGVjaG8gJFJPT1RGUyB8IGF3ayAtRiAuICd7IHByaW50IFwkTkYgfSdgCi0gICAgaWYgWyAieCRFWFQiID0gInhleHQyIiAtbyAieCRFWFQiID0gInhleHQzIiAtbyBcCi0gICAgICAgICAgIngkRVhUIiA9ICJ4amZmczIiIC1vICJ4JEVYVCIgPSAieGJ0cmZzIiAtbyBcCi0gICAgICAgICAgIngkRVhUIiA9ICJ4ZXh0NCIgXTsgdGhlbgotICAgICAgICBGU1RZUEU9JEVYVAotICAgIGVsc2UKLSAgICAgICAgZWNobyAiTm90ZTogVW5hYmxlIHRvIGRldGVybWluZSBmaWxlc3lzdGVtIGV4dGVuc2lvbiBmb3IgJFJPT1RGUyIKLSAgICAgICAgZWNobyAiV2Ugd2lsbCB1c2UgdGhlIGRlZmF1bHQgRlNUWVBFIGZvciAkTUFDSElORSIKLSAgICAgICAgIyAuLi53aGljaCBpcyBkb25lIGZ1cnRoZXIgYmVsb3cuLi4KLSAgICBmaQotZmkKKyAgICAgICAgZHRiID0gc2VsZi5nZXQoJ1FCX0RUQicpCisgICAgICAgIGlmIGR0YjoKKyAgICAgICAgICAgIGNtZF9tYXRjaCA9ICIlcy8lcyIgJSAoZGVwbG95X2Rpcl9pbWFnZSwgZHRiKQorICAgICAgICAgICAgY21kX3N0YXJ0c3dpdGggPSAiJXMvJXMqIiAlIChkZXBsb3lfZGlyX2ltYWdlLCBkdGIpCisgICAgICAgICAgICBjbWRfd2lsZCA9ICIlcy8qLmR0YiIgJSBkZXBsb3lfZGlyX2ltYWdlCisgICAgICAgICAgICBjbWRzID0gKGNtZF9tYXRjaCwgY21kX3N0YXJ0c3dpdGgsIGNtZF93aWxkKQorICAgICAgICAgICAgc2VsZi5kdGIgPSBnZXRfZmlyc3RfZmlsZShjbWRzKQorICAgICAgICAgICAgaWYgbm90IG9zLnBhdGguZXhpc3RzKHNlbGYuZHRiKToKKyAgICAgICAgICAgICAgICByYWlzZSBFeGNlcHRpb24oJ0RUQiBub3QgZm91bmQ6ICVzLCAlcyBvciAlcycgJSBjbWRzKQogCi1pZiBbIC16ICIkS0VSTkVMIiAtYSAiJElTX1ZNIiA9ICJmYWxzZSIgXTsgdGhlbiBcCi0gICAgc2V0dXBfcGF0aF92YXJzIDEKLSAgICBldmFsIGtlcm5lbF9maWxlPVwkJHttYWNoaW5lMn1fREVGQVVMVF9LRVJORUwKLSAgICBLRVJORUw9JERFUExPWV9ESVJfSU1BR0UvJGtlcm5lbF9maWxlCisgICAgZGVmIGNoZWNrX2Jpb3NkaXIoc2VsZik6CisgICAgICAgICIiIkNoZWNrIGN1c3RvbWJpb3NkaXIiIiIKKyAgICAgICAgaWYgbm90IHNlbGYuY3VzdG9tYmlvc2RpcjoKKyAgICAgICAgICAgIHJldHVybgogCi0gICAgaWYgWyAteiAiJEtFUk5FTCIgXTsgdGhlbgotICAgICAgICBlcnJvciAiVW5hYmxlIHRvIGRldGVybWluZSBkZWZhdWx0IGtlcm5lbCBmb3IgTUFDSElORSBbJE1BQ0hJTkVdIgotICAgIGZpCi1maQotIyBLRVJORUwgaXMgbm93IHNldCBmb3IgYWxsIGNhc2VzCisgICAgICAgIGJpb3NkaXIgPSAiIgorICAgICAgICBiaW9zZGlyX25hdGl2ZSA9ICIlcy8lcyIgJSAoc2VsZi5nZXQoJ1NUQUdJTkdfRElSX05BVElWRScpLCBzZWxmLmN1c3RvbWJpb3NkaXIpCisgICAgICAgIGJpb3NkaXJfaG9zdCA9ICIlcy8lcyIgJSAoc2VsZi5nZXQoJ1NUQUdJTkdfRElSX0hPU1QnKSwgc2VsZi5jdXN0b21iaW9zZGlyKQorICAgICAgICBmb3IgaSBpbiAoc2VsZi5jdXN0b21iaW9zZGlyLCBiaW9zZGlyX25hdGl2ZSwgYmlvc2Rpcl9ob3N0KToKKyAgICAgICAgICAgIGlmIG9zLnBhdGguaXNkaXIoaSk6CisgICAgICAgICAgICAgICAgYmlvc2RpciA9IGkKKyAgICAgICAgICAgICAgICBicmVhawogCi1pZiBbIC16ICIkRlNUWVBFIiBdOyB0aGVuCi0gICAgZXZhbCBGU1RZUEU9XCQke21hY2hpbmUyfV9ERUZBVUxUX0ZTVFlQRQorICAgICAgICBpZiBiaW9zZGlyOgorICAgICAgICAgICAgbG9nZ2VyLmluZm8oIkFzc3VtaW5nIGJpb3NkaXIgaXM6ICVzIiAlIGJpb3NkaXIpCisgICAgICAgICAgICBzZWxmLnFlbXVfb3B0X3NjcmlwdCArPSAnIC1MICVzJyAlIGJpb3NkaXIKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGxvZ2dlci5lcnJvcigiQ3VzdG9tIEJJT1MgZGlyZWN0b3J5IG5vdCBmb3VuZC4gVHJpZWQ6ICVzLCAlcywgYW5kICVzIiAlIChzZWxmLmN1c3RvbWJpb3NkaXIsIGJpb3NkaXJfbmF0aXZlLCBiaW9zZGlyX2hvc3QpKQorICAgICAgICAgICAgcmFpc2UgRXhjZXB0aW9uKCJJbnZhbGlkIGN1c3RvbWJpb3NkaXI6ICVzIiAlIHNlbGYuY3VzdG9tYmlvc2RpcikKIAotICAgIGlmIFsgLXogIiRGU1RZUEUiIF07IHRoZW4KLSAgICAgICAgZXJyb3IgIlVuYWJsZSB0byBkZXRlcm1pbmUgZGVmYXVsdCBmc3R5cGUgZm9yIE1BQ0hJTkUgWyRNQUNISU5FXSIKLSAgICBmaQotZmkKKyAgICBkZWYgY2hlY2tfbWVtKHNlbGYpOgorICAgICAgICBzID0gcmUuc2VhcmNoKCctbSArKFswLTldKyknLCBzZWxmLnFlbXVfb3B0X3NjcmlwdCkKKyAgICAgICAgaWYgczoKKyAgICAgICAgICAgIHNlbGYuc2V0KCdRQl9NRU0nLCAnLW0gJXMnICUgcy5ncm91cCgxKSkKKyAgICAgICAgZWxpZiBub3Qgc2VsZi5nZXQoJ1FCX01FTScpOgorICAgICAgICAgICAgbG9nZ2VyLmluZm8oJ1FCX01FTSBpcyBub3Qgc2V0LCB1c2UgNTEyTSBieSBkZWZhdWx0JykKKyAgICAgICAgICAgIHNlbGYuc2V0KCdRQl9NRU0nLCAnLW0gNTEyJykKIAotIyBGU1RZUEUgaXMgbm93IHNldCBmb3IgYWxsIGNhc2VzCisgICAgICAgIHNlbGYua2VybmVsX2NtZGxpbmVfc2NyaXB0ICs9ICcgbWVtPSVzJyAlIHNlbGYuZ2V0KCdRQl9NRU0nKS5yZXBsYWNlKCctbScsJycpLnN0cmlwKCkgKyAnTScKKyAgICAgICAgc2VsZi5xZW11X29wdF9zY3JpcHQgKz0gJyAlcycgJSBzZWxmLmdldCgnUUJfTUVNJykKIAotIyBIYW5kbGUgY2FzZXMgd2hlcmUgYSBST09URlMgdHlwZSBpcyBnaXZlbiBpbnN0ZWFkIG9mIGEgZmlsZW5hbWUsIGUuZy4KLSMgY29yZS1pbWFnZS1zYXRvCi1pZiBbICIkTEFaWV9ST09URlMiID0gInRydWUiIF07IHRoZW4KLSAgICBzZXR1cF9wYXRoX3ZhcnMgMQotICAgIGVjaG8gIkFzc3VtaW5nICRST09URlMgcmVhbGx5IG1lYW5zICRERVBMT1lfRElSX0lNQUdFLyRST09URlMtJE1BQ0hJTkUuJEZTVFlQRSIKLSAgICBpZiBbICIkSVNfVk0iID0gInRydWUiIF07IHRoZW4KLSAgICAgICAgVk09JERFUExPWV9ESVJfSU1BR0UvJFJPT1RGUy0kTUFDSElORS4kRlNUWVBFCi0gICAgZWxzZQotICAgICAgICBST09URlM9JERFUExPWV9ESVJfSU1BR0UvJFJPT1RGUy0kTUFDSElORS4kRlNUWVBFCi0gICAgZmkKLWZpCisgICAgZGVmIGNoZWNrX3RjcHNlcmlhbChzZWxmKToKKyAgICAgICAgaWYgc2VsZi50Y3BzZXJpYWxfcG9ydG51bToKKyAgICAgICAgICAgIGlmIHNlbGYuZ2V0KCdRQl9UQ1BTRVJJQUxfT1BUJyk6CisgICAgICAgICAgICAgICAgc2VsZi5xZW11X29wdF9zY3JpcHQgKz0gJyAnICsgc2VsZi5nZXQoJ1FCX1RDUFNFUklBTF9PUFQnKS5yZXBsYWNlKCdAUE9SVEAnLCBzZWxmLnRjcHNlcmlhbF9wb3J0bnVtKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBzZWxmLnFlbXVfb3B0X3NjcmlwdCArPSAnIC1zZXJpYWwgdGNwOjEyNy4wLjAuMTolcycgJSBzZWxmLnRjcHNlcmlhbF9wb3J0bnVtCiAKLWlmIFsgLXogIiRST09URlMiIF07IHRoZW4KLSAgICBzZXR1cF9wYXRoX3ZhcnMgMQotICAgIFQ9JERFUExPWV9ESVJfSU1BR0UKLSAgICBldmFsIHJvb3Rmc19saXN0PVwkJHttYWNoaW5lMn1fREVGQVVMVF9ST09URlMKLSAgICBmaW5kaW1hZ2UgJFQgJE1BQ0hJTkUgJEZTVFlQRQorICAgIGRlZiBjaGVja19hbmRfc2V0KHNlbGYpOgorICAgICAgICAiIiJDaGVjayBjb25maWdzIHNhbml0eSBhbmQgc2V0IHdoZW4gbmVlZGVkIiIiCisgICAgICAgIHNlbGYudmFsaWRhdGVfcGF0aHMoKQorICAgICAgICBjaGVja190dW4oKQorICAgICAgICAjIENoZWNrIGF1ZGlvCisgICAgICAgIGlmIHNlbGYuYXVkaW9fZW5hYmxlZDoKKyAgICAgICAgICAgIGlmIG5vdCBzZWxmLmdldCgnUUJfQVVESU9fRFJWJyk6CisgICAgICAgICAgICAgICAgcmFpc2UgRXhjZXB0aW9uKCJRQl9BVURJT19EUlYgaXMgTlVMTCwgdGhpcyBib2FyZCBkb2Vzbid0IHN1cHBvcnQgYXVkaW8iKQorICAgICAgICAgICAgaWYgbm90IHNlbGYuZ2V0KCdRQl9BVURJT19PUFQnKToKKyAgICAgICAgICAgICAgICBsb2dnZXIud2FybignUUJfQVVESU9fT1BUIGlzIE5VTEwsIHlvdSBtYXkgbmVlZCBkZWZpbmUgaXQgdG8gbWFrZSBhdWRpbyB3b3JrJykKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgc2VsZi5xZW11X29wdF9zY3JpcHQgKz0gJyAlcycgJSBzZWxmLmdldCgnUUJfQVVESU9fT1BUJykKKyAgICAgICAgICAgIG9zLnB1dGVudignUUVNVV9BVURJT19EUlYnLCBzZWxmLmdldCgnUUJfQVVESU9fRFJWJykpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBvcy5wdXRlbnYoJ1FFTVVfQVVESU9fRFJWJywgJ25vbmUnKQogCi0gICAgaWYgWyAteiAiJFJPT1RGUyIgXTsgdGhlbgotICAgICAgICBlcnJvciAiVW5hYmxlIHRvIGRldGVybWluZSBkZWZhdWx0IHJvb3RmcyBmb3IgTUFDSElORSBbJE1BQ0hJTkVdIgotICAgIGVsaWYgWyAiJElTX1ZNIiA9ICJ0cnVlIiBdOyB0aGVuCi0JCVZNPSRST09URlMKLSAgICBmaQotZmkKLSMgUk9PVEZTIGlzIG5vdyBzZXQgZm9yIGFsbCBjYXNlcywgbm93IGV4cGFuZCBpdCB0byBiZSBhbiBhYnNvbHV0ZSBwYXRoLCBpdCBzaG91bGQgZXhpc3QgYXQgdGhpcyBwb2ludAorICAgICAgICBzZWxmLmNoZWNrX2t2bSgpCisgICAgICAgIHNlbGYuY2hlY2tfZnN0eXBlKCkKKyAgICAgICAgc2VsZi5jaGVja19yb290ZnMoKQorICAgICAgICBzZWxmLmNoZWNrX2tlcm5lbCgpCisgICAgICAgIHNlbGYuY2hlY2tfYmlvc2RpcigpCisgICAgICAgIHNlbGYuY2hlY2tfbWVtKCkKKyAgICAgICAgc2VsZi5jaGVja190Y3BzZXJpYWwoKQogCi1ST09URlM9YHJlYWRsaW5rIC1mICRST09URlNgCisgICAgZGVmIHJlYWRfcWVtdWJvb3Qoc2VsZik6CisgICAgICAgIGlmIG5vdCBzZWxmLnFlbXVib290OgorICAgICAgICAgICAgaWYgc2VsZi5nZXQoJ0RFUExPWV9ESVJfSU1BR0UnKToKKyAgICAgICAgICAgICAgICBkZXBsb3lfZGlyX2ltYWdlID0gc2VsZi5nZXQoJ0RFUExPWV9ESVJfSU1BR0UnKQorICAgICAgICAgICAgZWxpZiBvcy5nZXRlbnYoJ0RFUExPWV9ESVJfSU1BR0UnKToKKyAgICAgICAgICAgICAgICBkZXBsb3lfZGlyX2ltYWdlID0gb3MuZ2V0ZW52KCdERVBMT1lfRElSX0lNQUdFJykKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgbG9nZ2VyLmluZm8oIkNhbid0IGZpbmQgcWVtdWJvb3QgY29uZiBmaWxlLCBERVBMT1lfRElSX0lNQUdFIGlzIE5VTEwhIikKKyAgICAgICAgICAgICAgICByZXR1cm4KIAotZWNobyAiIgotZWNobyAiQ29udGludWluZyB3aXRoIHRoZSBmb2xsb3dpbmcgcGFyYW1ldGVyczoiCi1pZiBbICIkSVNfVk0iID0gImZhbHNlIiBdOyB0aGVuCi0gICAgZWNobyAiS0VSTkVMOiBbJEtFUk5FTF0iCi0gICAgZWNobyAiUk9PVEZTOiBbJFJPT1RGU10iCi1lbHNlCi0gICAgZWNobyAiVk06ICAgWyRWTV0iCi1maQotZWNobyAiRlNUWVBFOiBbJEZTVFlQRV0iCisgICAgICAgICAgICBpZiBzZWxmLnJvb3RmcyBhbmQgbm90IG9zLnBhdGguZXhpc3RzKHNlbGYucm9vdGZzKToKKyAgICAgICAgICAgICAgICAjIExhenkgcm9vdGZzCisgICAgICAgICAgICAgICAgbWFjaGluZSA9IHNlbGYuZ2V0KCdNQUNISU5FJykKKyAgICAgICAgICAgICAgICBpZiBub3QgbWFjaGluZToKKyAgICAgICAgICAgICAgICAgICAgbWFjaGluZSA9IG9zLnBhdGguYmFzZW5hbWUoZGVwbG95X2Rpcl9pbWFnZSkKKyAgICAgICAgICAgICAgICBzZWxmLnFlbXVib290ID0gIiVzLyVzLSVzLnFlbXVib290LmNvbmYiICUgKGRlcGxveV9kaXJfaW1hZ2UsCisgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLnJvb3RmcywgbWFjaGluZSkKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgY21kID0gJ2xzIC10ICVzLyoucWVtdWJvb3QuY29uZicgJSAgZGVwbG95X2Rpcl9pbWFnZQorICAgICAgICAgICAgICAgIGxvZ2dlci5pbmZvKCdSdW5uaW5nICVzLi4uJyAlIGNtZCkKKyAgICAgICAgICAgICAgICBxYnMgPSBzdWJwcm9jZXNzLlBvcGVuKGNtZCwgc2hlbGw9VHJ1ZSwgc3Rkb3V0PXN1YnByb2Nlc3MuUElQRSkuc3Rkb3V0LnJlYWQoKS5kZWNvZGUoJ3V0Zi04JykKKyAgICAgICAgICAgICAgICBpZiBxYnM6CisgICAgICAgICAgICAgICAgICAgIHNlbGYucWVtdWJvb3QgPSBxYnMuc3BsaXQoKVswXQorICAgICAgICAgICAgICAgICAgICBzZWxmLnFiY29uZmxvYWQgPSBUcnVlCiAKLXNldHVwX3N5c3Jvb3QKLSMgT0VDT1JFX05BVElWRV9TWVNST09UIGFuZCBPRUNPUkVfTUFDSElORV9TWVNST09UIGFyZSBub3cgc2V0IGZvciBhbGwgY2FzZXMKKyAgICAgICAgaWYgbm90IHNlbGYucWVtdWJvb3Q6CisgICAgICAgICAgICAjIElmIHdlIGhhdmVuJ3QgZm91bmQgYSAucWVtdWJvb3QuY29uZiBhdCB0aGlzIHBvaW50IGl0IHByb2JhYmx5CisgICAgICAgICAgICAjIGRvZXNuJ3QgZXhpc3QsIGNvbnRpbnVlIHdpdGhvdXQKKyAgICAgICAgICAgIHJldHVybgogCi1JTlRFUk5BTF9TQ1JJUFQ9IiQwLWludGVybmFsIgotaWYgWyAhIC1mICIkSU5URVJOQUxfU0NSSVBUIiAtbyAhIC1yICIkSU5URVJOQUxfU0NSSVBUIiBdOyB0aGVuCi1JTlRFUk5BTF9TQ1JJUFQ9YHdoaWNoIHJ1bnFlbXUtaW50ZXJuYWxgCi1maQorICAgICAgICBpZiBub3Qgb3MucGF0aC5leGlzdHMoc2VsZi5xZW11Ym9vdCk6CisgICAgICAgICAgICByYWlzZSBFeGNlcHRpb24oIkZhaWxlZCB0byBmaW5kIDxpbWFnZT4ucWVtdWJvb3QuY29uZiEiKQogCi0jIFNwZWNpZnkgZGlyZWN0b3J5IGZvciBCSU9TLCBWR0EgQklPUyBhbmQga2V5bWFwcwotaWYgWyAhIC16ICIkQ1VTVE9NQklPU0RJUiIgXTsgdGhlbgotICAgIGlmIFsgLWQgIiRPRUNPUkVfTkFUSVZFX1NZU1JPT1QvJENVU1RPTUJJT1NESVIiIF07IHRoZW4KLSAgICAgICAgZWNobyAiQXNzdW1pbmcgYmlvc2RpciBpcyAkT0VDT1JFX05BVElWRV9TWVNST09ULyRDVVNUT01CSU9TRElSIgotICAgICAgICBTQ1JJUFRfUUVNVV9PUFQ9IiRTQ1JJUFRfUUVNVV9PUFQgLUwgJE9FQ09SRV9OQVRJVkVfU1lTUk9PVC8kQ1VTVE9NQklPU0RJUiIKLSAgICBlbGlmIFsgLWQgIiRPRUNPUkVfTUFDSElORV9TWVNST09ULyRDVVNUT01CSU9TRElSIiBdOyB0aGVuCi0gICAgICAgIGVjaG8gIkFzc3VtaW5nIGJpb3NkaXIgaXMgJE9FQ09SRV9NQUNISU5FX1NZU1JPT1QvJENVU1RPTUJJT1NESVIiCi0gICAgICAgIFNDUklQVF9RRU1VX09QVD0iJFNDUklQVF9RRU1VX09QVCAtTCAkT0VDT1JFX01BQ0hJTkVfU1lTUk9PVC8kQ1VTVE9NQklPU0RJUiIKLSAgICBlbHNlCi0gICAgICAgIGlmIFsgISAtZCAiJENVU1RPTUJJT1NESVIiIF07IHRoZW4KLSAgICAgICAgICAgIGVjaG8gIkN1c3RvbSBCSU9TIGRpcmVjdG9yeSBub3QgZm91bmQuIFRyaWVkOiAkQ1VTVE9NQklPU0RJUiIKLSAgICAgICAgICAgIGVjaG8gImFuZCAkT0VDT1JFX05BVElWRV9TWVNST09ULyRDVVNUT01CSU9TRElSIgotICAgICAgICAgICAgZWNobyAiYW5kICRPRUNPUkVfTUFDSElORV9TWVNST09ULyRDVVNUT01CSU9TRElSIgotICAgICAgICAgICAgZXhpdCAxOwotICAgICAgICBmaQotICAgICAgICBlY2hvICJBc3N1bWluZyBiaW9zZGlyIGlzICRDVVNUT01CSU9TRElSIgotICAgICAgICBTQ1JJUFRfUUVNVV9PUFQ9IiRTQ1JJUFRfUUVNVV9PUFQgLUwgJENVU1RPTUJJT1NESVIiCi0gICAgZmkKLWZpCisgICAgICAgIGxvZ2dlci5pbmZvKCdDT05GRklMRTogJXMnICUgc2VsZi5xZW11Ym9vdCkKIAotLiAkSU5URVJOQUxfU0NSSVBUCi1leGl0ICQ/CisgICAgICAgIGNmID0gY29uZmlncGFyc2VyLkNvbmZpZ1BhcnNlcigpCisgICAgICAgIGNmLnJlYWQoc2VsZi5xZW11Ym9vdCkKKyAgICAgICAgZm9yIGssIHYgaW4gY2YuaXRlbXMoJ2NvbmZpZ19ic3AnKToKKyAgICAgICAgICAgIGtfdXBwZXIgPSBrLnVwcGVyKCkKKyAgICAgICAgICAgIHNlbGYuc2V0KGtfdXBwZXIsIHYpCisKKyAgICBkZWYgdmFsaWRhdGVfcGF0aHMoc2VsZik6CisgICAgICAgICIiIkVuc3VyZSBhbGwgcmVsZXZhbnQgcGF0aCB2YXJpYWJsZXMgYXJlIHNldCIiIgorICAgICAgICAjIFdoZW4gd2UncmUgc3RhcnRlZCB3aXRoIGEgKi5xZW11Ym9vdC5jb25mIGFyZyBhc3N1bWUgdGhhdCBpbWFnZQorICAgICAgICAjIGFydGVmYWN0cyBhcmUgcmVsYXRpdmUgdG8gdGhhdCBmaWxlLCByYXRoZXIgdGhhbiBpbiB3aGF0ZXZlcgorICAgICAgICAjIGRpcmVjdG9yeSBERVBMT1lfRElSX0lNQUdFIGluIHRoZSBjb25mIGZpbGUgcG9pbnRzIHRvLgorICAgICAgICBpZiBzZWxmLnFiY29uZmxvYWQ6CisgICAgICAgICAgICBpbWdkaXIgPSBvcy5wYXRoLmRpcm5hbWUoc2VsZi5xZW11Ym9vdCkKKyAgICAgICAgICAgIGlmIGltZ2RpciAhPSBzZWxmLmdldCgnREVQTE9ZX0RJUl9JTUFHRScpOgorICAgICAgICAgICAgICAgIGxvZ2dlci5pbmZvKCdTZXR0aW5nIERFUExPWV9ESVJfSU1BR0UgdG8gZm9sZGVyIGNvbnRhaW5pbmcgJXMgKCVzKScgJSAoc2VsZi5xZW11Ym9vdCwgaW1nZGlyKSkKKyAgICAgICAgICAgICAgICBzZWxmLnNldCgnREVQTE9ZX0RJUl9JTUFHRScsIGltZ2RpcikKKworICAgICAgICAjIElmIHRoZSBTVEFHSU5HXypfTkFUSVZFIGRpcmVjdG9yaWVzIGZyb20gdGhlIGNvbmZpZyBmaWxlIGRvbid0IGV4aXN0CisgICAgICAgICMgYW5kIHdlJ3JlIGluIGEgc291cmNlZCBPRSBidWlsZCBkaXJlY3RvcnkgdHJ5IHRvIGV4dHJhY3QgdGhlIHBhdGhzCisgICAgICAgICMgZnJvbSBgYml0YmFrZSAtZWAKKyAgICAgICAgaGF2ZW5hdGl2ZSA9IG9zLnBhdGguZXhpc3RzKHNlbGYuZ2V0KCdTVEFHSU5HX0RJUl9OQVRJVkUnKSkgYW5kIFwKKyAgICAgICAgICAgIG9zLnBhdGguZXhpc3RzKHNlbGYuZ2V0KCdTVEFHSU5HX0JJTkRJUl9OQVRJVkUnKSkKKworICAgICAgICBpZiBub3QgaGF2ZW5hdGl2ZToKKyAgICAgICAgICAgIGlmIG5vdCBzZWxmLmJpdGJha2VfZToKKyAgICAgICAgICAgICAgICBzZWxmLmxvYWRfYml0YmFrZV9lbnYoKQorCisgICAgICAgICAgICBpZiBzZWxmLmJpdGJha2VfZToKKyAgICAgICAgICAgICAgICBuYXRpdmVfdmFycyA9IFsnU1RBR0lOR19ESVJfTkFUSVZFJywgJ1NUQUdJTkdfQklORElSX05BVElWRSddCisgICAgICAgICAgICAgICAgZm9yIG52IGluIG5hdGl2ZV92YXJzOgorICAgICAgICAgICAgICAgICAgICBzID0gcmUuc2VhcmNoKCdeJXM9IiguKikiJyAlIG52LCBzZWxmLmJpdGJha2VfZSwgcmUuTSkKKyAgICAgICAgICAgICAgICAgICAgaWYgcyBhbmQgcy5ncm91cCgxKSAhPSBzZWxmLmdldChudik6CisgICAgICAgICAgICAgICAgICAgICAgICBsb2dnZXIuaW5mbygnT3ZlcnJpZGluZyBjb25mIGZpbGUgc2V0dGluZyBvZiAlcyB0byAlcyBmcm9tIEJpdGJha2UgZW52aXJvbm1lbnQnICUgKG52LCBzLmdyb3VwKDEpKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuc2V0KG52LCBzLmdyb3VwKDEpKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAjIHdoZW4gd2UncmUgaW52b2tlZCBmcm9tIGEgcnVubmluZyBiaXRiYWtlIGluc3RhbmNlIHdlIHdvbid0CisgICAgICAgICAgICAgICAgIyBiZSBhYmxlIHRvIGNhbGwgYGJpdGJha2UgLWVgLCB0aGVuIHRyeToKKyAgICAgICAgICAgICAgICAjIC0gZ2V0IE9FX1RNUERJUiBmcm9tIGVudmlyb25tZW50IGFuZCBndWVzcyBwYXRocyBiYXNlZCBvbiBpdAorICAgICAgICAgICAgICAgICMgLSBnZXQgT0VDT1JFX05BVElWRV9TWVNST09UIGZyb20gZW52aXJvbm1lbnQgKGZvciBzZGspCisgICAgICAgICAgICAgICAgdG1wZGlyID0gb3MuZW52aXJvbi5nZXQoJ09FX1RNUERJUicsIE5vbmUpCisgICAgICAgICAgICAgICAgb2Vjb3JlX25hdGl2ZV9zeXNyb290ID0gb3MuZW52aXJvbi5nZXQoJ09FQ09SRV9OQVRJVkVfU1lTUk9PVCcsIE5vbmUpCisgICAgICAgICAgICAgICAgaWYgdG1wZGlyOgorICAgICAgICAgICAgICAgICAgICBsb2dnZXIuaW5mbygnU2V0dGluZyBTVEFHSU5HX0RJUl9OQVRJVkUgYW5kIFNUQUdJTkdfQklORElSX05BVElWRSByZWxhdGl2ZSB0byBPRV9UTVBESVIgKCVzKScgJSB0bXBkaXIpCisgICAgICAgICAgICAgICAgICAgIGhvc3RvcywgXywgXywgXywgbWFjaGluZSA9IG9zLnVuYW1lKCkKKyAgICAgICAgICAgICAgICAgICAgYnVpbGRzeXMgPSAnJXMtJXMnICUgKG1hY2hpbmUsIGhvc3Rvcy5sb3dlcigpKQorICAgICAgICAgICAgICAgICAgICBzdGFnaW5nX2Rpcl9uYXRpdmUgPSAnJXMvc3lzcm9vdHMvJXMnICUgKHRtcGRpciwgYnVpbGRzeXMpCisgICAgICAgICAgICAgICAgICAgIHNlbGYuc2V0KCdTVEFHSU5HX0RJUl9OQVRJVkUnLCBzdGFnaW5nX2Rpcl9uYXRpdmUpCisgICAgICAgICAgICAgICAgZWxpZiBvZWNvcmVfbmF0aXZlX3N5c3Jvb3Q6CisgICAgICAgICAgICAgICAgICAgIGxvZ2dlci5pbmZvKCdTZXR0aW5nIFNUQUdJTkdfRElSX05BVElWRSB0byBPRUNPUkVfTkFUSVZFX1NZU1JPT1QgKCVzKScgJSBvZWNvcmVfbmF0aXZlX3N5c3Jvb3QpCisgICAgICAgICAgICAgICAgICAgIHNlbGYuc2V0KCdTVEFHSU5HX0RJUl9OQVRJVkUnLCBvZWNvcmVfbmF0aXZlX3N5c3Jvb3QpCisgICAgICAgICAgICAgICAgaWYgc2VsZi5nZXQoJ1NUQUdJTkdfRElSX05BVElWRScpOgorICAgICAgICAgICAgICAgICAgICAjIHdlIGhhdmUgdG8gYXNzdW1lIHRoYXQgU1RBR0lOR19CSU5ESVJfTkFUSVZFIGlzIGF0IHVzci9iaW4KKyAgICAgICAgICAgICAgICAgICAgc3RhZ2luZ19iaW5kaXJfbmF0aXZlID0gJyVzL3Vzci9iaW4nICUgc2VsZi5nZXQoJ1NUQUdJTkdfRElSX05BVElWRScpCisgICAgICAgICAgICAgICAgICAgIGxvZ2dlci5pbmZvKCdTZXR0aW5nIFNUQUdJTkdfQklORElSX05BVElWRSB0byAlcycgJSBzdGFnaW5nX2JpbmRpcl9uYXRpdmUpCisgICAgICAgICAgICAgICAgICAgIHNlbGYuc2V0KCdTVEFHSU5HX0JJTkRJUl9OQVRJVkUnLCAnJXMvdXNyL2JpbicgJSBzZWxmLmdldCgnU1RBR0lOR19ESVJfTkFUSVZFJykpCisKKyAgICBkZWYgcHJpbnRfY29uZmlnKHNlbGYpOgorICAgICAgICBsb2dnZXIuaW5mbygnQ29udGludWluZyB3aXRoIHRoZSBmb2xsb3dpbmcgcGFyYW1ldGVyczpcbicpCisgICAgICAgIGlmIG5vdCBzZWxmLmZzdHlwZSBpbiBzZWxmLnZtdHlwZXM6CisgICAgICAgICAgICBwcmludCgnS0VSTkVMOiBbJXNdJyAlIHNlbGYua2VybmVsKQorICAgICAgICAgICAgaWYgc2VsZi5kdGI6CisgICAgICAgICAgICAgICAgcHJpbnQoJ0RUQjogWyVzXScgJSBzZWxmLmR0YikKKyAgICAgICAgcHJpbnQoJ01BQ0hJTkU6IFslc10nICUgc2VsZi5nZXQoJ01BQ0hJTkUnKSkKKyAgICAgICAgcHJpbnQoJ0ZTVFlQRTogWyVzXScgJSBzZWxmLmZzdHlwZSkKKyAgICAgICAgaWYgc2VsZi5mc3R5cGUgID09ICduZnMnOgorICAgICAgICAgICAgcHJpbnQoJ05GU19ESVI6IFslc10nICUgc2VsZi5uZnNfZGlyKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgcHJpbnQoJ1JPT1RGUzogWyVzXScgJSBzZWxmLnJvb3RmcykKKyAgICAgICAgcHJpbnQoJ0NPTkZGSUxFOiBbJXNdJyAlIHNlbGYucWVtdWJvb3QpCisgICAgICAgIHByaW50KCcnKQorCisgICAgZGVmIHNldHVwX25mcyhzZWxmKToKKyAgICAgICAgaWYgbm90IHNlbGYubmZzX3NlcnZlcjoKKyAgICAgICAgICAgIGlmIHNlbGYuc2xpcnBfZW5hYmxlZDoKKyAgICAgICAgICAgICAgICBzZWxmLm5mc19zZXJ2ZXIgPSAnMTAuMC4yLjInCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHNlbGYubmZzX3NlcnZlciA9ICcxOTIuMTY4LjcuMScKKworICAgICAgICBuZnNfaW5zdGFuY2UgPSBpbnQoc2VsZi5uZnNfaW5zdGFuY2UpCisKKyAgICAgICAgbW91bnRkX3JwY3BvcnQgPSAyMTExMSArIG5mc19pbnN0YW5jZQorICAgICAgICBuZnNkX3JwY3BvcnQgPSAxMTExMSArIG5mc19pbnN0YW5jZQorICAgICAgICBuZnNkX3BvcnQgPSAzMDQ5ICsgMiAqIG5mc19pbnN0YW5jZQorICAgICAgICBtb3VudGRfcG9ydCA9IDMwNDggKyAyICogbmZzX2luc3RhbmNlCisgICAgICAgIHVuZnNfb3B0cz0ibmZzdmVycz0zLHBvcnQ9JXMsbW91bnRwcm9nPSVzLG5mc3Byb2c9JXMsdWRwLG1vdW50cG9ydD0lcyIgJSAobmZzZF9wb3J0LCBtb3VudGRfcnBjcG9ydCwgbmZzZF9ycGNwb3J0LCBtb3VudGRfcG9ydCkKKyAgICAgICAgc2VsZi51bmZzX29wdHMgPSB1bmZzX29wdHMKKworICAgICAgICBwID0gJyVzLy5ydW5xZW11LXNkay9wc2V1ZG8nICUgb3MuZ2V0ZW52KCdIT01FJykKKyAgICAgICAgb3MucHV0ZW52KCdQU0VVRE9fTE9DQUxTVEFURURJUicsIHApCisKKyAgICAgICAgIyBFeHRyYWN0IC50YXIuYnoyIG9yIC50YXIuYnogaWYgbm8gc2VsZi5uZnNfZGlyCisgICAgICAgIGlmIG5vdCBzZWxmLm5mc19kaXI6CisgICAgICAgICAgICBzcmNfcHJlZml4ID0gJyVzLyVzJyAlIChzZWxmLmdldCgnREVQTE9ZX0RJUl9JTUFHRScpLCBzZWxmLmdldCgnSU1BR0VfTElOS19OQU1FJykpCisgICAgICAgICAgICBkZXN0ID0gIiVzLW5mc3Jvb3QiICUgc3JjX3ByZWZpeAorICAgICAgICAgICAgaWYgb3MucGF0aC5leGlzdHMoJyVzLnBzZXVkb19zdGF0ZScgJSBkZXN0KToKKyAgICAgICAgICAgICAgICBsb2dnZXIuaW5mbygnVXNlICVzIGFzIE5GU19ESVInICUgZGVzdCkKKyAgICAgICAgICAgICAgICBzZWxmLm5mc19kaXIgPSBkZXN0CisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHNyYyA9ICIiCisgICAgICAgICAgICAgICAgc3JjMSA9ICclcy50YXIuYnoyJyAlIHNyY19wcmVmaXgKKyAgICAgICAgICAgICAgICBzcmMyID0gJyVzLnRhci5neicgJSBzcmNfcHJlZml4CisgICAgICAgICAgICAgICAgaWYgb3MucGF0aC5leGlzdHMoc3JjMSk6CisgICAgICAgICAgICAgICAgICAgIHNyYyA9IHNyYzEKKyAgICAgICAgICAgICAgICBlbGlmIG9zLnBhdGguZXhpc3RzKHNyYzIpOgorICAgICAgICAgICAgICAgICAgICBzcmMgPSBzcmMyCisgICAgICAgICAgICAgICAgaWYgbm90IHNyYzoKKyAgICAgICAgICAgICAgICAgICAgcmFpc2UgRXhjZXB0aW9uKCJObyBORlNfRElSIGlzIHNldCwgYW5kIGNhbid0IGZpbmQgJXMgb3IgJXMgdG8gZXh0cmFjdCIgJSAoc3JjMSwgc3JjMikpCisgICAgICAgICAgICAgICAgbG9nZ2VyLmluZm8oJ05GU19ESVIgbm90IGZvdW5kLCBleHRyYWN0aW5nICVzIHRvICVzJyAlIChzcmMsIGRlc3QpKQorICAgICAgICAgICAgICAgIGNtZCA9ICdydW5xZW11LWV4dHJhY3Qtc2RrICVzICVzJyAlIChzcmMsIGRlc3QpCisgICAgICAgICAgICAgICAgbG9nZ2VyLmluZm8oJ1J1bm5pbmcgJXMuLi4nICUgY21kKQorICAgICAgICAgICAgICAgIGlmIHN1YnByb2Nlc3MuY2FsbChjbWQsIHNoZWxsPVRydWUpICE9IDA6CisgICAgICAgICAgICAgICAgICAgIHJhaXNlIEV4Y2VwdGlvbignRmFpbGVkIHRvIHJ1biAlcycgJSBjbWQpCisgICAgICAgICAgICAgICAgc2VsZi5jbGVhbl9uZnNfZGlyID0gVHJ1ZQorICAgICAgICAgICAgICAgIHNlbGYubmZzX2RpciA9IGRlc3QKKworICAgICAgICAjIFN0YXJ0IHRoZSB1c2Vyc3BhY2UgTkZTIHNlcnZlcgorICAgICAgICBjbWQgPSAncnVucWVtdS1leHBvcnQtcm9vdGZzIHJlc3RhcnQgJXMnICUgc2VsZi5uZnNfZGlyCisgICAgICAgIGxvZ2dlci5pbmZvKCdSdW5uaW5nICVzLi4uJyAlIGNtZCkKKyAgICAgICAgaWYgc3VicHJvY2Vzcy5jYWxsKGNtZCwgc2hlbGw9VHJ1ZSkgIT0gMDoKKyAgICAgICAgICAgIHJhaXNlIEV4Y2VwdGlvbignRmFpbGVkIHRvIHJ1biAlcycgJSBjbWQpCisKKyAgICAgICAgc2VsZi5uZnNfcnVubmluZyA9IFRydWUKKworCisgICAgZGVmIHNldHVwX3NsaXJwKHNlbGYpOgorICAgICAgICBpZiBzZWxmLmZzdHlwZSA9PSAnbmZzJzoKKyAgICAgICAgICAgIHNlbGYuc2V0dXBfbmZzKCkKKyAgICAgICAgc2VsZi5rZXJuZWxfY21kbGluZV9zY3JpcHQgKz0gJyBpcD1kaGNwJworICAgICAgICBzZWxmLnNldCgnTkVUV09SS19DTUQnLCBzZWxmLmdldCgnUUJfU0xJUlBfT1BUJykpCisKKyAgICBkZWYgc2V0dXBfdGFwKHNlbGYpOgorICAgICAgICAiIiJTZXR1cCB0YXAiIiIKKworICAgICAgICAjIFRoaXMgZmlsZSBpcyBjcmVhdGVkIHdoZW4gcnVucWVtdS1nZW4tdGFwZGV2cyBjcmVhdGVzIGEgYmFuayBvZiB0YXAKKyAgICAgICAgIyBkZXZpY2VzLCBpbmRpY2F0aW5nIHRoYXQgdGhlIHVzZXIgc2hvdWxkIG5vdCBicmluZyB1cCBuZXcgb25lcyB1c2luZworICAgICAgICAjIHN1ZG8uCisgICAgICAgIG5vc3Vkb19mbGFnID0gJy9ldGMvcnVucWVtdS1ub3N1ZG8nCisgICAgICAgIHNlbGYucWVtdWlmdXAgPSBzaHV0aWwud2hpY2goJ3J1bnFlbXUtaWZ1cCcpCisgICAgICAgIHNlbGYucWVtdWlmZG93biA9IHNodXRpbC53aGljaCgncnVucWVtdS1pZmRvd24nKQorICAgICAgICBpcCA9IHNodXRpbC53aGljaCgnaXAnKQorICAgICAgICBsb2NrZGlyID0gIi90bXAvcWVtdS10YXAtbG9ja3MiCisKKyAgICAgICAgaWYgbm90IChzZWxmLnFlbXVpZnVwIGFuZCBzZWxmLnFlbXVpZmRvd24gYW5kIGlwKToKKyAgICAgICAgICAgIHJhaXNlIE9FUGF0aEVycm9yKCJydW5xZW11LWlmdXAsIHJ1bnFlbXUtaWZkb3duIG9yIGlwIG5vdCBmb3VuZCIpCisKKyAgICAgICAgaWYgbm90IG9zLnBhdGguZXhpc3RzKGxvY2tkaXIpOgorICAgICAgICAgICAgIyBUaGVyZSBtaWdodCBiZSBhIHJhY2UgaXNzdWUgd2hlbiBtdWx0aSBydW5xZW11IHByb2Nlc3Nlc3MgYXJlCisgICAgICAgICAgICAjIHJ1bm5pbmcgYXQgdGhlIHNhbWUgdGltZS4KKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBvcy5ta2Rpcihsb2NrZGlyKQorICAgICAgICAgICAgZXhjZXB0IEZpbGVFeGlzdHNFcnJvcjoKKyAgICAgICAgICAgICAgICBwYXNzCisKKyAgICAgICAgY21kID0gJyVzIGxpbmsnICUgaXAKKyAgICAgICAgbG9nZ2VyLmluZm8oJ1J1bm5pbmcgJXMuLi4nICUgY21kKQorICAgICAgICBpcF9saW5rID0gc3VicHJvY2Vzcy5Qb3BlbihjbWQsIHNoZWxsPVRydWUsIHN0ZG91dD1zdWJwcm9jZXNzLlBJUEUpLnN0ZG91dC5yZWFkKCkuZGVjb2RlKCd1dGYtOCcpCisgICAgICAgICMgTWF0Y2hlcyBsaW5lIGxpa2U6IDY6IHRhcDA6IDxmb28+CisgICAgICAgIHBvc3NpYmxlcyA9IHJlLmZpbmRhbGwoJ15bMS05XSs6ICsodGFwWzAtOV0rKTogPC4qJywgaXBfbGluaywgcmUuTSkKKyAgICAgICAgdGFwID0gIiIKKyAgICAgICAgZm9yIHAgaW4gcG9zc2libGVzOgorICAgICAgICAgICAgbG9ja2ZpbGUgPSBvcy5wYXRoLmpvaW4obG9ja2RpciwgcCkKKyAgICAgICAgICAgIGlmIG9zLnBhdGguZXhpc3RzKCclcy5za2lwJyAlIGxvY2tmaWxlKToKKyAgICAgICAgICAgICAgICBsb2dnZXIuaW5mbygnRm91bmQgJXMuc2tpcCwgc2tpcHBpbmcgJXMnICUgKGxvY2tmaWxlLCBwKSkKKyAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgc2VsZi5sb2NrID0gbG9ja2ZpbGUgKyAnLmxvY2snCisgICAgICAgICAgICBpZiBzZWxmLmFjcXVpcmVfbG9jaygpOgorICAgICAgICAgICAgICAgIHRhcCA9IHAKKyAgICAgICAgICAgICAgICBsb2dnZXIuaW5mbygiVXNpbmcgcHJlY29uZmlndXJlZCB0YXAgZGV2aWNlICVzIiAlIHRhcCkKKyAgICAgICAgICAgICAgICBsb2dnZXIuaW5mbygiSWYgdGhpcyBpcyBub3QgaW50ZW5kZWQsIHRvdWNoICVzLnNraXAgdG8gbWFrZSBydW5xZW11IHNraXAgJXMuIiAlKGxvY2tmaWxlLCB0YXApKQorICAgICAgICAgICAgICAgIGJyZWFrCisKKyAgICAgICAgaWYgbm90IHRhcDoKKyAgICAgICAgICAgIGlmIG9zLnBhdGguZXhpc3RzKG5vc3Vkb19mbGFnKToKKyAgICAgICAgICAgICAgICBsb2dnZXIuZXJyb3IoIkVycm9yOiBUaGVyZSBhcmUgbm8gYXZhaWxhYmxlIHRhcCBkZXZpY2VzIHRvIHVzZSBmb3IgbmV0d29ya2luZywiKQorICAgICAgICAgICAgICAgIGxvZ2dlci5lcnJvcigiYW5kIEkgc2VlICVzIGV4aXN0cywgc28gSSBhbSBub3QgZ29pbmcgdG8gdHJ5IGNyZWF0aW5nIiAlIG5vc3Vkb19mbGFnKQorICAgICAgICAgICAgICAgIHJhaXNlIEV4Y2VwdGlvbigiYSBuZXcgb25lIHdpdGggc3Vkby4iKQorCisgICAgICAgICAgICBnaWQgPSBvcy5nZXRnaWQoKQorICAgICAgICAgICAgdWlkID0gb3MuZ2V0dWlkKCkKKyAgICAgICAgICAgIGxvZ2dlci5pbmZvKCJTZXR0aW5nIHVwIHRhcCBpbnRlcmZhY2UgdW5kZXIgc3VkbyIpCisgICAgICAgICAgICBjbWQgPSAnc3VkbyAlcyAlcyAlcyAlcycgJSAoc2VsZi5xZW11aWZ1cCwgdWlkLCBnaWQsIHNlbGYuZ2V0KCdTVEFHSU5HX0RJUl9OQVRJVkUnKSkKKyAgICAgICAgICAgIHRhcCA9IHN1YnByb2Nlc3MuUG9wZW4oY21kLCBzaGVsbD1UcnVlLCBzdGRvdXQ9c3VicHJvY2Vzcy5QSVBFKS5zdGRvdXQucmVhZCgpLmRlY29kZSgndXRmLTgnKS5yc3RyaXAoJ1xuJykKKyAgICAgICAgICAgIGxvY2tmaWxlID0gb3MucGF0aC5qb2luKGxvY2tkaXIsIHRhcCkKKyAgICAgICAgICAgIHNlbGYubG9jayA9IGxvY2tmaWxlICsgJy5sb2NrJworICAgICAgICAgICAgc2VsZi5hY3F1aXJlX2xvY2soKQorICAgICAgICAgICAgc2VsZi5jbGVhbnRhcCA9IFRydWUKKyAgICAgICAgICAgIGxvZ2dlci5pbmZvKCdDcmVhdGVkIHRhcDogJXMnICUgdGFwKQorCisgICAgICAgIGlmIG5vdCB0YXA6CisgICAgICAgICAgICBsb2dnZXIuZXJyb3IoIkZhaWxlZCB0byBzZXR1cCB0YXAgZGV2aWNlLiBSdW4gcnVucWVtdS1nZW4tdGFwZGV2cyB0byBtYW51YWxseSBjcmVhdGUuIikKKyAgICAgICAgICAgIHJldHVybiAxCisgICAgICAgIHNlbGYudGFwID0gdGFwCisgICAgICAgIG4wID0gdGFwWzM6XQorICAgICAgICBuMSA9IGludChuMCkgKiAyICsgMQorICAgICAgICBuMiA9IG4xICsgMQorICAgICAgICBzZWxmLm5mc19pbnN0YW5jZSA9IG4wCisgICAgICAgIGlmIHNlbGYuZnN0eXBlID09ICduZnMnOgorICAgICAgICAgICAgc2VsZi5zZXR1cF9uZnMoKQorICAgICAgICBzZWxmLmtlcm5lbF9jbWRsaW5lX3NjcmlwdCArPSAiIGlwPTE5Mi4xNjguNy4lczo6MTkyLjE2OC43LiVzOjI1NS4yNTUuMjU1LjAiICUgKG4yLCBuMSkKKyAgICAgICAgbWFjID0gIjUyOjU0OjAwOjEyOjM0OiUwMngiICUgbjIKKyAgICAgICAgcWJfdGFwX29wdCA9IHNlbGYuZ2V0KCdRQl9UQVBfT1BUJykKKyAgICAgICAgaWYgcWJfdGFwX29wdDoKKyAgICAgICAgICAgIHFlbXVfdGFwX29wdCA9IHFiX3RhcF9vcHQucmVwbGFjZSgnQFRBUEAnLCB0YXApLnJlcGxhY2UoJ0BNQUNAJywgbWFjKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgcWVtdV90YXBfb3B0ID0gIi1kZXZpY2UgdmlydGlvLW5ldC1wY2ksbmV0ZGV2PW5ldDAsbWFjPSVzIC1uZXRkZXYgdGFwLGlkPW5ldDAsaWZuYW1lPSVzLHNjcmlwdD1ubyxkb3duc2NyaXB0PW5vIiAlIChtYWMsIHNlbGYudGFwKQorCisgICAgICAgIGlmIHNlbGYudmhvc3RfZW5hYmxlZDoKKyAgICAgICAgICAgIHFlbXVfdGFwX29wdCArPSAnLHZob3N0PW9uJworCisgICAgICAgIHNlbGYuc2V0KCdORVRXT1JLX0NNRCcsIHFlbXVfdGFwX29wdCkKKworICAgIGRlZiBzZXR1cF9uZXR3b3JrKHNlbGYpOgorICAgICAgICBjbWQgPSAic3R0eSAtZyIKKyAgICAgICAgc2VsZi5zYXZlZF9zdHR5ID0gc3VicHJvY2Vzcy5Qb3BlbihjbWQsIHNoZWxsPVRydWUsIHN0ZG91dD1zdWJwcm9jZXNzLlBJUEUpLnN0ZG91dC5yZWFkKCkuZGVjb2RlKCd1dGYtOCcpCisgICAgICAgIGlmIHNlbGYuc2xpcnBfZW5hYmxlZDoKKyAgICAgICAgICAgIHNlbGYuc2V0dXBfc2xpcnAoKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgc2VsZi5zZXR1cF90YXAoKQorCisgICAgICAgIHJvb3Rmc19mb3JtYXQgPSBzZWxmLmZzdHlwZSBpZiBzZWxmLmZzdHlwZSBpbiAoJ3ZtZGsnLCAncWNvdzInLCAndmRpJykgZWxzZSAncmF3JworCisgICAgICAgIHFiX3Jvb3Rmc19vcHQgPSBzZWxmLmdldCgnUUJfUk9PVEZTX09QVCcpCisgICAgICAgIGlmIHFiX3Jvb3Rmc19vcHQ6CisgICAgICAgICAgICBzZWxmLnJvb3Rmc19vcHRpb25zID0gcWJfcm9vdGZzX29wdC5yZXBsYWNlKCdAUk9PVEZTQCcsIHNlbGYucm9vdGZzKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgc2VsZi5yb290ZnNfb3B0aW9ucyA9ICctZHJpdmUgZmlsZT0lcyxpZj12aXJ0aW8sZm9ybWF0PSVzJyAlIChzZWxmLnJvb3Rmcywgcm9vdGZzX2Zvcm1hdCkKKworICAgICAgICBpZiBzZWxmLmZzdHlwZSBpbiAoJ2NwaW8uZ3onLCAnY3BpbycpOgorICAgICAgICAgICAgc2VsZi5rZXJuZWxfY21kbGluZSA9ICdyb290PS9kZXYvcmFtMCBydyBkZWJ1Z3NoZWxsJworICAgICAgICAgICAgc2VsZi5yb290ZnNfb3B0aW9ucyA9ICctaW5pdHJkICVzJyAlIHNlbGYucm9vdGZzCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBpZiBzZWxmLmZzdHlwZSBpbiBzZWxmLnZtdHlwZXM6CisgICAgICAgICAgICAgICAgaWYgc2VsZi5mc3R5cGUgPT0gJ2lzbyc6CisgICAgICAgICAgICAgICAgICAgIHZtX2RyaXZlID0gJy1jZHJvbSAlcycgJSBzZWxmLnJvb3RmcworICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgIGNtZDEgPSAiZ3JlcCAtcSAncm9vdD0vZGV2L3NkJyAlcyIgJSBzZWxmLnJvb3RmcworICAgICAgICAgICAgICAgICAgICBjbWQyID0gImdyZXAgLXEgJ3Jvb3Q9L2Rldi9oZCcgJXMiICUgc2VsZi5yb290ZnMKKyAgICAgICAgICAgICAgICAgICAgaWYgc3VicHJvY2Vzcy5jYWxsKGNtZDEsIHNoZWxsPVRydWUpID09IDA6CisgICAgICAgICAgICAgICAgICAgICAgICBsb2dnZXIuaW5mbygnVXNpbmcgc2NzaSBkcml2ZScpCisgICAgICAgICAgICAgICAgICAgICAgICB2bV9kcml2ZSA9ICctZHJpdmUgaWY9bm9uZSxpZD1oZCxmaWxlPSVzLGZvcm1hdD0lcyAtZGV2aWNlIHZpcnRpby1zY3NpLXBjaSxpZD1zY3NpIC1kZXZpY2Ugc2NzaS1oZCxkcml2ZT1oZCcgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJSAoc2VsZi5yb290ZnMsIHJvb3Rmc19mb3JtYXQpCisgICAgICAgICAgICAgICAgICAgIGVsaWYgc3VicHJvY2Vzcy5jYWxsKGNtZDIsIHNoZWxsPVRydWUpID09IDA6CisgICAgICAgICAgICAgICAgICAgICAgICBsb2dnZXIuaW5mbygnVXNpbmcgc2NzaSBkcml2ZScpCisgICAgICAgICAgICAgICAgICAgICAgICB2bV9kcml2ZSA9ICIlcyxmb3JtYXQ9JXMiICUgKHNlbGYucm9vdGZzLCByb290ZnNfZm9ybWF0KQorICAgICAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICAgICAgbG9nZ2VyLndhcm4oIkNhbid0IGRldGVjdCBkcml2ZSB0eXBlICVzIiAlIHNlbGYucm9vdGZzKQorICAgICAgICAgICAgICAgICAgICAgICAgbG9nZ2VyLndhcm4oJ1RyaW5nIHRvIHVzZSB2aXJ0aW8gYmxvY2sgZHJpdmUnKQorICAgICAgICAgICAgICAgICAgICAgICAgdm1fZHJpdmUgPSAnLWRyaXZlIGlmPXZpcnRpbyxmaWxlPSVzLGZvcm1hdD0lcycgJSAoc2VsZi5yb290ZnMsIHJvb3Rmc19mb3JtYXQpCisgICAgICAgICAgICAgICAgc2VsZi5yb290ZnNfb3B0aW9ucyA9ICclcyAtbm8tcmVib290JyAlIHZtX2RyaXZlCisgICAgICAgICAgICBzZWxmLmtlcm5lbF9jbWRsaW5lID0gJ3Jvb3Q9JXMgcncgaGlnaHJlcz1vZmYnICUgKHNlbGYuZ2V0KCdRQl9LRVJORUxfUk9PVCcpKQorCisgICAgICAgIGlmIHNlbGYuZnN0eXBlID09ICduZnMnOgorICAgICAgICAgICAgc2VsZi5yb290ZnNfb3B0aW9ucyA9ICcnCisgICAgICAgICAgICBrX3Jvb3QgPSAnL2Rldi9uZnMgbmZzcm9vdD0lczolcywlcycgJSAoc2VsZi5uZnNfc2VydmVyLCBzZWxmLm5mc19kaXIsIHNlbGYudW5mc19vcHRzKQorICAgICAgICAgICAgc2VsZi5rZXJuZWxfY21kbGluZSA9ICdyb290PSVzIHJ3IGhpZ2hyZXM9b2ZmJyAlIGtfcm9vdAorCisgICAgICAgIHNlbGYuc2V0KCdST09URlNfT1BUSU9OUycsIHNlbGYucm9vdGZzX29wdGlvbnMpCisKKyAgICBkZWYgZ3Vlc3NfcWJfc3lzdGVtKHNlbGYpOgorICAgICAgICAiIiJhdHRlbXB0IHRvIGRldGVybWluZSB0aGUgYXBwcm9wcmlhdGUgcWVtdS1zeXN0ZW0gYmluYXJ5IiIiCisgICAgICAgIG1hY2ggPSBzZWxmLmdldCgnTUFDSElORScpCisgICAgICAgIGlmIG5vdCBtYWNoOgorICAgICAgICAgICAgc2VhcmNoID0gJy4qKHFlbXV4ODYtNjR8cWVtdXg4NnxxZW11YXJtNjR8cWVtdWFybXxxZW11bWlwczY0fHFlbXVtaXBzNjRlbHxxZW11bWlwc2VsfHFlbXVtaXBzfHFlbXVwcGMpLionCisgICAgICAgICAgICBpZiBzZWxmLnJvb3RmczoKKyAgICAgICAgICAgICAgICBtYXRjaCA9IHJlLm1hdGNoKHNlYXJjaCwgc2VsZi5yb290ZnMpCisgICAgICAgICAgICAgICAgaWYgbWF0Y2g6CisgICAgICAgICAgICAgICAgICAgIG1hY2ggPSBtYXRjaC5ncm91cCgxKQorICAgICAgICAgICAgZWxpZiBzZWxmLmtlcm5lbDoKKyAgICAgICAgICAgICAgICBtYXRjaCA9IHJlLm1hdGNoKHNlYXJjaCwgc2VsZi5rZXJuZWwpCisgICAgICAgICAgICAgICAgaWYgbWF0Y2g6CisgICAgICAgICAgICAgICAgICAgIG1hY2ggPSBtYXRjaC5ncm91cCgxKQorCisgICAgICAgIGlmIG5vdCBtYWNoOgorICAgICAgICAgICAgcmV0dXJuIE5vbmUKKworICAgICAgICBpZiBtYWNoID09ICdxZW11YXJtJzoKKyAgICAgICAgICAgIHFic3lzID0gJ2FybScKKyAgICAgICAgZWxpZiBtYWNoID09ICdxZW11YXJtNjQnOgorICAgICAgICAgICAgcWJzeXMgPSAnYWFyY2g2NCcKKyAgICAgICAgZWxpZiBtYWNoID09ICdxZW11eDg2JzoKKyAgICAgICAgICAgIHFic3lzID0gJ2kzODYnCisgICAgICAgIGVsaWYgbWFjaCA9PSAncWVtdXg4Ni02NCc6CisgICAgICAgICAgICBxYnN5cyA9ICd4ODZfNjQnCisgICAgICAgIGVsaWYgbWFjaCA9PSAncWVtdXBwYyc6CisgICAgICAgICAgICBxYnN5cyA9ICdwcGMnCisgICAgICAgIGVsaWYgbWFjaCA9PSAncWVtdW1pcHMnOgorICAgICAgICAgICAgcWJzeXMgPSAnbWlwcycKKyAgICAgICAgZWxpZiBtYWNoID09ICdxZW11bWlwczY0JzoKKyAgICAgICAgICAgIHFic3lzID0gJ21pcHM2NCcKKyAgICAgICAgZWxpZiBtYWNoID09ICdxZW11bWlwc2VsJzoKKyAgICAgICAgICAgIHFic3lzID0gJ21pcHNlbCcKKyAgICAgICAgZWxpZiBtYWNoID09ICdxZW11bWlwczY0ZWwnOgorICAgICAgICAgICAgcWJzeXMgPSAnbWlwczY0ZWwnCisKKyAgICAgICAgcmV0dXJuICdxZW11LXN5c3RlbS0lcycgJSBxYnN5cworCisgICAgZGVmIHNldHVwX2ZpbmFsKHNlbGYpOgorICAgICAgICBxZW11X3N5c3RlbSA9IHNlbGYuZ2V0KCdRQl9TWVNURU1fTkFNRScpCisgICAgICAgIGlmIG5vdCBxZW11X3N5c3RlbToKKyAgICAgICAgICAgIHFlbXVfc3lzdGVtID0gc2VsZi5ndWVzc19xYl9zeXN0ZW0oKQorICAgICAgICBpZiBub3QgcWVtdV9zeXN0ZW06CisgICAgICAgICAgICByYWlzZSBFeGNlcHRpb24oIkZhaWxlZCB0byBib290LCBRQl9TWVNURU1fTkFNRSBpcyBOVUxMISIpCisKKyAgICAgICAgcWVtdV9iaW4gPSAnJXMvJXMnICUgKHNlbGYuZ2V0KCdTVEFHSU5HX0JJTkRJUl9OQVRJVkUnKSwgcWVtdV9zeXN0ZW0pCisgICAgICAgIGlmIG5vdCBvcy5hY2Nlc3MocWVtdV9iaW4sIG9zLlhfT0spOgorICAgICAgICAgICAgcmFpc2UgT0VQYXRoRXJyb3IoIk5vIFFFTVUgYmluYXJ5ICclcycgY291bGQgYmUgZm91bmQiICUgcWVtdV9iaW4pCisKKyAgICAgICAgY2hlY2tfbGliZ2wocWVtdV9iaW4pCisKKyAgICAgICAgc2VsZi5xZW11X29wdCA9ICIlcyAlcyAlcyAlcyAlcyIgJSAocWVtdV9iaW4sIHNlbGYuZ2V0KCdORVRXT1JLX0NNRCcpLCBzZWxmLnFlbXVfb3B0X3NjcmlwdCwgc2VsZi5nZXQoJ1JPT1RGU19PUFRJT05TJyksIHNlbGYuZ2V0KCdRQl9PUFRfQVBQRU5EJykpCisKKyAgICAgICAgaWYgc2VsZi5zbmFwc2hvdDoKKyAgICAgICAgICAgIHNlbGYucWVtdV9vcHQgKz0gIiAtc25hcHNob3QiCisKKyAgICAgICAgaWYgc2VsZi5zZXJpYWxzdGRpbzoKKyAgICAgICAgICAgIGxvZ2dlci5pbmZvKCJJbnRlcnJ1cHQgY2hhcmFjdGVyIGlzICdeXSciKQorICAgICAgICAgICAgY21kID0gInN0dHkgaW50ciBeXSIKKyAgICAgICAgICAgIHN1YnByb2Nlc3MuY2FsbChjbWQsIHNoZWxsPVRydWUpCisKKyAgICAgICAgICAgIGZpcnN0X3NlcmlhbCA9ICIiCisgICAgICAgICAgICBpZiBub3QgcmUuc2VhcmNoKCItbm9ncmFwaGljIiwgc2VsZi5xZW11X29wdCk6CisgICAgICAgICAgICAgICAgZmlyc3Rfc2VyaWFsID0gIi1zZXJpYWwgbW9uOnZjIgorICAgICAgICAgICAgIyBXZSBhbHdheXMgd2FudCBhIHR0eVMxLiBTaW5jZSBxZW11IGJ5IGRlZmF1bHQgYWRkcyBhIHNlcmlhbAorICAgICAgICAgICAgIyBwb3J0IHdoZW4gbm9kZWZhdWx0cyBpcyBub3Qgc3BlY2lmaWVkLCBpdCBzZWVtcyB0aGF0IGFsbCB0aGF0CisgICAgICAgICAgICAjIHdvdWxkIGJlIG5lZWRlZCBpcyB0byBtYWtlIHN1cmUgYSAiLXNlcmlhbCIgaXMgdGhlcmUuIEhvd2V2ZXIsCisgICAgICAgICAgICAjIGl0IGFwcGVhcnMgdGhhdCB3aGVuICItc2VyaWFsIiBpcyBzcGVjaWZpZWQsIGl0IGlnbm9yZXMgdGhlCisgICAgICAgICAgICAjIGRlZmF1bHQgc2VyaWFsIHBvcnQgdGhhdCBpcyBub3JtYWxseSBhZGRlZC4gIFNvIGhlcmUgd2UgbWFrZQorICAgICAgICAgICAgIyBzdXJlIHRvIGFkZCB0d28gLXNlcmlhbCBpZiB0aGVyZSBhcmUgbm9uZS4gQW5kIG9ubHkgb25lIGlmCisgICAgICAgICAgICAjIHRoZXJlIGlzIG9uZSAtc2VyaWFsIGFscmVhZHkuCisgICAgICAgICAgICBzZXJpYWxfbnVtID0gbGVuKHJlLmZpbmRhbGwoIi1zZXJpYWwiLCBzZWxmLnFlbXVfb3B0KSkKKyAgICAgICAgICAgIGlmIHNlcmlhbF9udW0gPT0gMDoKKyAgICAgICAgICAgICAgICBzZWxmLnFlbXVfb3B0ICs9ICIgJXMgJXMiICUgKGZpcnN0X3NlcmlhbCwgc2VsZi5nZXQoIlFCX1NFUklBTF9PUFQiKSkKKyAgICAgICAgICAgIGVsaWYgc2VyaWFsX251bSA9PSAxOgorICAgICAgICAgICAgICAgIHNlbGYucWVtdV9vcHQgKz0gIiAlcyIgJSBzZWxmLmdldCgiUUJfU0VSSUFMX09QVCIpCisKKyAgICBkZWYgc3RhcnRfcWVtdShzZWxmKToKKyAgICAgICAgaWYgc2VsZi5rZXJuZWw6CisgICAgICAgICAgICBrZXJuZWxfb3B0cyA9ICIta2VybmVsICVzIC1hcHBlbmQgJyVzICVzICVzJyIgJSAoc2VsZi5rZXJuZWwsIHNlbGYua2VybmVsX2NtZGxpbmUsIHNlbGYua2VybmVsX2NtZGxpbmVfc2NyaXB0LCBzZWxmLmdldCgnUUJfS0VSTkVMX0NNRExJTkVfQVBQRU5EJykpCisgICAgICAgICAgICBpZiBzZWxmLmR0YjoKKyAgICAgICAgICAgICAgICBrZXJuZWxfb3B0cyArPSAiIC1kdGIgJXMiICUgc2VsZi5kdGIKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGtlcm5lbF9vcHRzID0gIiIKKyAgICAgICAgY21kID0gIiVzICVzIiAlIChzZWxmLnFlbXVfb3B0LCBrZXJuZWxfb3B0cykKKyAgICAgICAgbG9nZ2VyLmluZm8oJ1J1bm5pbmcgJXMnICUgY21kKQorICAgICAgICBpZiBzdWJwcm9jZXNzLmNhbGwoY21kLCBzaGVsbD1UcnVlKSAhPSAwOgorICAgICAgICAgICAgcmFpc2UgRXhjZXB0aW9uKCdGYWlsZWQgdG8gcnVuICVzJyAlIGNtZCkKKworICAgIGRlZiBjbGVhbnVwKHNlbGYpOgorICAgICAgICBpZiBzZWxmLmNsZWFudGFwOgorICAgICAgICAgICAgY21kID0gJ3N1ZG8gJXMgJXMgJXMnICUgKHNlbGYucWVtdWlmZG93biwgc2VsZi50YXAsIHNlbGYuZ2V0KCdTVEFHSU5HX0RJUl9OQVRJVkUnKSkKKyAgICAgICAgICAgIGxvZ2dlci5pbmZvKCdSdW5uaW5nICVzJyAlIGNtZCkKKyAgICAgICAgICAgIHN1YnByb2Nlc3MuY2FsbChjbWQsIHNoZWxsPVRydWUpCisgICAgICAgIGlmIHNlbGYubG9ja19kZXNjcmlwdG9yOgorICAgICAgICAgICAgbG9nZ2VyLmluZm8oIlJlbGVhc2luZyBsb2NrZmlsZSBmb3IgdGFwIGRldmljZSAnJXMnIiAlIHNlbGYudGFwKQorICAgICAgICAgICAgc2VsZi5yZWxlYXNlX2xvY2soKQorCisgICAgICAgIGlmIHNlbGYubmZzX3J1bm5pbmc6CisgICAgICAgICAgICBsb2dnZXIuaW5mbygiU2h1dHRpbmcgZG93biB0aGUgdXNlcnNwYWNlIE5GUyBzZXJ2ZXIuLi4iKQorICAgICAgICAgICAgY21kID0gInJ1bnFlbXUtZXhwb3J0LXJvb3RmcyBzdG9wICVzIiAlIHNlbGYubmZzX2RpcgorICAgICAgICAgICAgbG9nZ2VyLmluZm8oJ1J1bm5pbmcgJXMnICUgY21kKQorICAgICAgICAgICAgc3VicHJvY2Vzcy5jYWxsKGNtZCwgc2hlbGw9VHJ1ZSkKKworICAgICAgICBpZiBzZWxmLnNhdmVkX3N0dHk6CisgICAgICAgICAgICBjbWQgPSAic3R0eSAlcyIgJSBzZWxmLnNhdmVkX3N0dHkKKyAgICAgICAgICAgIHN1YnByb2Nlc3MuY2FsbChjbWQsIHNoZWxsPVRydWUpCisKKyAgICAgICAgaWYgc2VsZi5jbGVhbl9uZnNfZGlyOgorICAgICAgICAgICAgbG9nZ2VyLmluZm8oJ1JlbW92aW5nICVzJyAlIHNlbGYubmZzX2RpcikKKyAgICAgICAgICAgIHNodXRpbC5ybXRyZWUoc2VsZi5uZnNfZGlyKQorICAgICAgICAgICAgc2h1dGlsLnJtdHJlZSgnJXMucHNldWRvX3N0YXRlJyAlIHNlbGYubmZzX2RpcikKKworICAgIGRlZiBsb2FkX2JpdGJha2VfZW52KHNlbGYsIG1hY2g9Tm9uZSk6CisgICAgICAgIGlmIHNlbGYuYml0YmFrZV9lOgorICAgICAgICAgICAgcmV0dXJuCisKKyAgICAgICAgYml0YmFrZSA9IHNodXRpbC53aGljaCgnYml0YmFrZScpCisgICAgICAgIGlmIG5vdCBiaXRiYWtlOgorICAgICAgICAgICAgcmV0dXJuCisKKyAgICAgICAgaWYgbm90IG1hY2g6CisgICAgICAgICAgICBtYWNoID0gc2VsZi5nZXQoJ01BQ0hJTkUnKQorCisgICAgICAgIGlmIG1hY2g6CisgICAgICAgICAgICBjbWQgPSAnTUFDSElORT0lcyBiaXRiYWtlIC1lJyAlIG1hY2gKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGNtZCA9ICdiaXRiYWtlIC1lJworCisgICAgICAgIGxvZ2dlci5pbmZvKCdSdW5uaW5nICVzLi4uJyAlIGNtZCkKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgc2VsZi5iaXRiYWtlX2UgPSBzdWJwcm9jZXNzLmNoZWNrX291dHB1dChjbWQsIHNoZWxsPVRydWUpLmRlY29kZSgndXRmLTgnKQorICAgICAgICBleGNlcHQgc3VicHJvY2Vzcy5DYWxsZWRQcm9jZXNzRXJyb3IgYXMgZXJyOgorICAgICAgICAgICAgc2VsZi5iaXRiYWtlX2UgPSAnJworICAgICAgICAgICAgbG9nZ2VyLndhcm4oIkNvdWxkbid0IHJ1biAnYml0YmFrZSAtZScgdG8gZ2F0aGVyIGVudmlyb25tZW50IGluZm9ybWF0aW9uOlxuJXMiICUgZXJyLm91dHB1dC5kZWNvZGUoJ3V0Zi04JykpCisKK2RlZiBtYWluKCk6CisgICAgaWYgbGVuKHN5cy5hcmd2KSA9PSAxIG9yICJoZWxwIiBpbiBzeXMuYXJndjoKKyAgICAgICAgcHJpbnRfdXNhZ2UoKQorICAgICAgICByZXR1cm4gMAorICAgIGNvbmZpZyA9IEJhc2VDb25maWcoKQorICAgIHRyeToKKyAgICAgICAgY29uZmlnLmNoZWNrX2FyZ3MoKQorICAgIGV4Y2VwdCBFeGNlcHRpb24gYXMgZXNjOgorICAgICAgICBsb2dnZXIuZXJyb3IoZXNjKQorICAgICAgICBsb2dnZXIuZXJyb3IoIlRyeSAncnVucWVtdSBoZWxwJyBvbiBob3cgdG8gdXNlIGl0IikKKyAgICAgICAgcmV0dXJuIDEKKyAgICBjb25maWcucmVhZF9xZW11Ym9vdCgpCisgICAgY29uZmlnLmNoZWNrX2FuZF9zZXQoKQorICAgIGNvbmZpZy5wcmludF9jb25maWcoKQorICAgIHRyeToKKyAgICAgICAgY29uZmlnLnNldHVwX25ldHdvcmsoKQorICAgICAgICBjb25maWcuc2V0dXBfZmluYWwoKQorICAgICAgICBjb25maWcuc3RhcnRfcWVtdSgpCisgICAgZmluYWxseToKKyAgICAgICAgY29uZmlnLmNsZWFudXAoKQorICAgIHJldHVybiAwCisKK2lmIF9fbmFtZV9fID09ICJfX21haW5fXyI6CisgICAgdHJ5OgorICAgICAgICByZXQgPSBtYWluKCkKKyAgICBleGNlcHQgT0VQYXRoRXJyb3IgYXMgZXJyOgorICAgICAgICByZXQgPSAxCisgICAgICAgIGxvZ2dlci5lcnJvcihlcnIubWVzc2FnZSkKKyAgICBleGNlcHQgRXhjZXB0aW9uIGFzIGVzYzoKKyAgICAgICAgcmV0ID0gMQorICAgICAgICBpbXBvcnQgdHJhY2ViYWNrCisgICAgICAgIHRyYWNlYmFjay5wcmludF9leGMoKQorICAgIHN5cy5leGl0KHJldCkKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9zY3JpcHRzL3J1bnFlbXUtZ2VuLXRhcGRldnMgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvc2NyaXB0cy9ydW5xZW11LWdlbi10YXBkZXZzCmluZGV4IDYyNGRlYWMuLmJmYjYwZjQgMTAwNzU1Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9zY3JpcHRzL3J1bnFlbXUtZ2VuLXRhcGRldnMKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L3NjcmlwdHMvcnVucWVtdS1nZW4tdGFwZGV2cwpAQCAtNjksMzIgKzY5LDM4IEBACiAgICAgICAgZXhpdCAxCiBmaQogCi0jIEVuc3VyZSB3ZSBzdGFydCB3aXRoIGEgY2xlYW4gc2xhdGUKLWZvciB0YXAgaW4gYCRJRkNPTkZJRyBsaW5rIHwgZ3JlcCB0YXAgfCBhd2sgJ3sgcHJpbnQgXCQyIH0nIHwgc2VkIHMvOi8vYDsgZG8KLQllY2hvICJOb3RlOiBEZXN0cm95aW5nIHByZS1leGlzdGluZyB0YXAgaW50ZXJmYWNlICR0YXAuLi4iCi0JJFRVTkNUTCAtZCAkdGFwCi1kb25lCi0KLWVjaG8gIkNyZWF0aW5nICRDT1VOVCB0YXAgZGV2aWNlcyBmb3IgVUlEOiAkVFVJRCBHSUQ6ICRHSUQuLi4iCi1mb3IgKChpbmRleD0wOyBpbmRleCA8ICRDT1VOVDsgaW5kZXgrKykpOyBkbwotCWVjaG8gIkNyZWF0aW5nIHRhcCRpbmRleCIKLQlpZnVwPWAkUlVOUUVNVV9JRlVQICRUVUlEICRHSUQgJFNZU1JPT1QgMj4mMWAKLQlpZiBbICQ/IC1uZSAwIF07IHRoZW4KLQkJZWNobyAiRXJyb3IgcnVubmluZyB0dW5jdGw6ICRpZnVwIgotCQlleGl0IDEKLQlmaQotZG9uZQoraWYgWyAkQ09VTlQgLWdlIDAgXTsgdGhlbgorCSMgRW5zdXJlIHdlIHN0YXJ0IHdpdGggYSBjbGVhbiBzbGF0ZQorCWZvciB0YXAgaW4gYCRJRkNPTkZJRyBsaW5rIHwgZ3JlcCB0YXAgfCBhd2sgJ3sgcHJpbnQgXCQyIH0nIHwgc2VkIHMvOi8vYDsgZG8KKwkJZWNobyAiTm90ZTogRGVzdHJveWluZyBwcmUtZXhpc3RpbmcgdGFwIGludGVyZmFjZSAkdGFwLi4uIgorCQkkVFVOQ1RMIC1kICR0YXAKKwlkb25lCisJcm0gLWYgL2V0Yy9ydW5xZW11LW5vc3VkbworZWxzZQorCWVjaG8gIkVycm9yOiBJbmNvcnJlY3QgY291bnQ6ICRDT1VOVCIKKwlleGl0IDEKK2ZpCiAKIGlmIFsgJENPVU5UIC1ndCAwIF07IHRoZW4KKwllY2hvICJDcmVhdGluZyAkQ09VTlQgdGFwIGRldmljZXMgZm9yIFVJRDogJFRVSUQgR0lEOiAkR0lELi4uIgorCWZvciAoKGluZGV4PTA7IGluZGV4IDwgJENPVU5UOyBpbmRleCsrKSk7IGRvCisJCWVjaG8gIkNyZWF0aW5nIHRhcCRpbmRleCIKKwkJaWZ1cD1gJFJVTlFFTVVfSUZVUCAkVFVJRCAkR0lEICRTWVNST09UIDI+JjFgCisJCWlmIFsgJD8gLW5lIDAgXTsgdGhlbgorCQkJZWNobyAiRXJyb3IgcnVubmluZyB0dW5jdGw6ICRpZnVwIgorCQkJZXhpdCAxCisJCWZpCisJZG9uZQorCiAJZWNobyAiTm90ZTogRm9yIHN5c3RlbXMgcnVubmluZyBOZXR3b3JrTWFuYWdlciwgaXQncyByZWNvbW1lbmRlZCIKIAllY2hvICJOb3RlOiB0aGF0IHRoZSB0YXAgZGV2aWNlcyBiZSBzZXQgYXMgdW5tYW5hZ2VkIGluIHRoZSIKIAllY2hvICJOb3RlOiBOZXR3b3JrTWFuYWdlci5jb25mIGZpbGUuIEFkZCB0aGUgZm9sbG93aW5nIGxpbmVzIHRvIgogCWVjaG8gIk5vdGU6IC9ldGMvTmV0d29ya01hbmFnZXIvTmV0d29ya01hbmFnZXIuY29uZiIKIAllY2hvICJba2V5ZmlsZV0iCiAJZWNobyAidW5tYW5hZ2VkLWRldmljZXM9aW50ZXJmYWNlLW5hbWU6dGFwKiIKLWZpCiAKLSMgVGhlIHJ1bnFlbXUgc2NyaXB0IHdpbGwgY2hlY2sgZm9yIHRoaXMgZmlsZSwgYW5kIGlmIGl0IGV4aXN0cywKLSMgd2lsbCB1c2UgdGhlIGV4aXN0aW5nIGJhbmsgb2YgdGFwIGRldmljZXMgd2l0aG91dCBjcmVhdGluZwotIyBhZGRpdGlvbmFsIG9uZXMgdmlhIHN1ZG8uCi10b3VjaCAvZXRjL3J1bnFlbXUtbm9zdWRvCisJIyBUaGUgcnVucWVtdSBzY3JpcHQgd2lsbCBjaGVjayBmb3IgdGhpcyBmaWxlLCBhbmQgaWYgaXQgZXhpc3RzLAorCSMgd2lsbCB1c2UgdGhlIGV4aXN0aW5nIGJhbmsgb2YgdGFwIGRldmljZXMgd2l0aG91dCBjcmVhdGluZworCSMgYWRkaXRpb25hbCBvbmVzIHZpYSBzdWRvLgorCXRvdWNoIC9ldGMvcnVucWVtdS1ub3N1ZG8KK2ZpCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvc2NyaXB0cy9ydW5xZW11LWludGVybmFsIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L3NjcmlwdHMvcnVucWVtdS1pbnRlcm5hbApkZWxldGVkIGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggYWMxYzcwMy4uMDAwMDAwMAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvc2NyaXB0cy9ydW5xZW11LWludGVybmFsCisrKyAvZGV2L251bGwKQEAgLTEsNzE3ICswLDAgQEAKLSMhL2Jpbi9iYXNoIC14Ci0KLSMgSGFuZGxlIHJ1bm5pbmcgT0UgaW1hZ2VzIHVuZGVyIHFlbXUKLSMKLSMgQ29weXJpZ2h0IChDKSAyMDA2LTIwMTEgTGludXggRm91bmRhdGlvbgotIwotIyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotIyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcwotIyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KLSMKLSMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0jIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0jIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKLSMgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSMKLSMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcKLSMgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKLSMgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxIFVTQS4KLQotIyBDYWxsIHNldHRpbmc6Ci0jICAgUUVNVV9NRU1PUlkgKG9wdGlvbmFsKSAtIHNldCB0aGUgYW1vdW50IG9mIG1lbW9yeSBpbiB0aGUgZW11YWx0ZWQgc3lzdGVtLgotIyAgIFNFUklBTF9MT0dGSUxFIChvcHRpb25hbCkgLSBsb2cgdGhlIHNlcmlhbCBwb3J0IG91dHB1dCB0byBhIGZpbGUKLSMKLSMgSW1hZ2Ugb3B0aW9uczoKLSMgICBNQUNISU5FIC0gdGhlIG1hY2hpbmUgdG8gcnVuCi0jICAgRlNUWVBFIC0gdGhlIGltYWdlIHR5cGUgdG8gcnVuCi0jICAgS0VSTkVMIC0gdGhlIGtlcm5lbCBpbWFnZSBmaWxlIHRvIHVzZQotIyAgIFJPT1RGUyAtIHRoZSBkaXNrIGltYWdlIGZpbGUgdG8gdXNlCi0jCi0KLW1lbV9zaXplPS0xCi0KLSNHZXQgcmlkIG9mIDw+IGFuZCBnZXQgdGhlIGNvbnRlbnRzIG9mIGV4dHJhIHFlbXUgcnVubmluZyBwYXJhbXMKLVNDUklQVF9RRU1VX0VYVFJBX09QVD1gZWNobyAkU0NSSVBUX1FFTVVfRVhUUkFfT1BUIHwgc2VkIC1lICdzLzwvLycgLWUgJ3MvPi8vJ2AKLSNpZiB1c2VyIHNldCBxZW11IG1lbW9yeSwgZWc6IC1tIDI1NiBpbiBxZW11IGV4dHJhIHBhcmFtcywgd2UgbmVlZCB0byBkbyBzb21lIAotIyB2YWxpZGF0aW9uIGNoZWNrCi1tZW1fc2V0PWBleHByICIkU0NSSVBUX1FFTVVfRVhUUkFfT1BUIiA6ICcuKlwoLW1bWzpzcGFjZTpdXSAqWzAtOV0qXCknYAotaWYgWyAhIC16ICIkbWVtX3NldCIgXSA7IHRoZW4KLSNHZXQgbWVtb3J5IHNldHRpbmcgc2l6ZSBmcm9tIHVzZXIgaW5wdXQKLSAgbWVtX3NpemU9YGVjaG8gJG1lbV9zZXQgfCBzZWQgJ3MvLW1bWzpzcGFjZTpdXSAqLy8nYAotZmkKLQotIyBUaGlzIGZpbGUgaXMgY3JlYXRlZCB3aGVuIHJ1bnFlbXUtZ2VuLXRhcGRldnMgY3JlYXRlcyBhIGJhbmsgb2YgdGFwCi0jIGRldmljZXMsIGluZGljYXRpbmcgdGhhdCB0aGUgdXNlciBzaG91bGQgbm90IGJyaW5nIHVwIG5ldyBvbmVzIHVzaW5nCi0jIHN1ZG8uCi1OT1NVRE9fRkxBRz0iL2V0Yy9ydW5xZW11LW5vc3VkbyIKLQotUUVNVUlGVVA9YHdoaWNoIHJ1bnFlbXUtaWZ1cCAyPiAvZGV2L251bGxgCi1RRU1VSUZET1dOPWB3aGljaCBydW5xZW11LWlmZG93biAyPiAvZGV2L251bGxgCi1pZiBbIC16ICIkUUVNVUlGVVAiIC1vICEgLXggIiRRRU1VSUZVUCIgXTsgdGhlbgotICAgICAgIGVjaG8gInJ1bnFlbXUtaWZ1cCBjYW5ub3QgYmUgZm91bmQgb3IgZXhlY3V0ZWQiCi0gICAgICAgZXhpdCAxCi1maQotaWYgWyAteiAiJFFFTVVJRkRPV04iIC1vICEgLXggIiRRRU1VSUZET1dOIiBdOyB0aGVuCi0gICAgICAgZWNobyAicnVucWVtdS1pZmRvd24gY2Fubm90IGJlIGZvdW5kIG9yIGV4ZWN1dGVkIgotICAgICAgIGV4aXQgMQotZmkKLQotTkZTUlVOTklORz0iZmFsc2UiCi0KLSNjYXB0dXJlIG9yaWdpbmFsIHN0dHkgdmFsdWVzCi1PUklHX1NUVFk9JChzdHR5IC1nKQotCi1pZiBbICIkU0xJUlBfRU5BQkxFRCIgPSAieWVzIiBdOyB0aGVuCi0gICAgS0VSTkVMX05FVFdPUktfQ01EPSJpcD1kaGNwIgotICAgIFFFTVVfVEFQX0NNRD0iIgotICAgIFFFTVVfVUlfT1BUSU9OUz0iLXNob3ctY3Vyc29yIC11c2IgLXVzYmRldmljZSB0YWJsZXQiCi0gICAgUUVNVV9ORVRXT1JLX0NNRD0iIgotICAgIERST09UPSIvZGV2L3ZkYSIKLSAgICBST09URlNfT1BUSU9OUz0iLWRyaXZlIGZpbGU9JFJPT1RGUyxpZj12aXJ0aW8sZm9ybWF0PXJhdyIKLWVsc2UKLSAgICAgICAgYWNxdWlyZV9sb2NrKCkgewotICAgICAgICAgICAgbG9ja2ZpbGU9JDEKLSAgICAgICAgICAgIGlmIFsgLXogIiRsb2NrZmlsZSIgXTsgdGhlbgotICAgICAgICAgICAgICAgIGVjaG8gIkVycm9yOiBtaXNzaW5nIGxvY2tmaWxlIGFyZyBwYXNzZWQgdG8gYWNxdWlyZV9sb2NrKCkiCi0gICAgICAgICAgICAgICAgcmV0dXJuIDEKLSAgICAgICAgICAgIGZpCi0KLSAgICAgICAgICAgIHRvdWNoICRsb2NrZmlsZS5sb2NrIDI+L2Rldi9udWxsCi0gICAgICAgICAgICBpZiBbICQ/IC1uZSAwIF07IHRoZW4KLSAgICAgICAgICAgICAgICBlY2hvICJBY3F1aXJpbmcgbG9ja2ZpbGUgZm9yICRsb2NrZmlsZS5sb2NrIGZhaWxlZCIKLSAgICAgICAgICAgICAgICByZXR1cm4gMQotICAgICAgICAgICAgZmkKLSAgICAgICAgICAgIGV4ZWMgOD4kbG9ja2ZpbGUubG9jawotICAgICAgICAgICAgZmxvY2sgLW4gLXggOAotICAgICAgICAgICAgaWYgWyAkPyAtbmUgMCBdOyB0aGVuCi0gICAgICAgICAgICAgICAgZXhlYyA4PiYtCi0gICAgICAgICAgICAgICAgcmV0dXJuIDEKLSAgICAgICAgICAgIGZpCi0KLSAgICAgICAgICAgIHJldHVybiAwCi0gICAgICAgIH0KLQotICAgICAgICByZWxlYXNlX2xvY2soKSB7Ci0gICAgICAgICAgICBsb2NrZmlsZT0kMQotICAgICAgICAgICAgaWYgWyAteiAiJGxvY2tmaWxlIiBdOyB0aGVuCi0gICAgICAgICAgICAgICAgZWNobyAiRXJyb3I6IG1pc3NpbmcgbG9ja2ZpbGUgYXJnIHBhc3NlZCB0byByZWxlYXNlX2xvY2soKSIKLSAgICAgICAgICAgICAgICByZXR1cm4gMQotICAgICAgICAgICAgZmkKLQotICAgICAgICAgICAgcm0gLWYgJGxvY2tmaWxlLmxvY2sKLSAgICAgICAgICAgIGV4ZWMgIDg+Ji0KLSAgICAgICAgfQotCi0gICAgICAgIExPQ0tESVI9Ii90bXAvcWVtdS10YXAtbG9ja3MiCi0gICAgICAgIGlmIFsgISAtZCAiJExPQ0tESVIiIF07IHRoZW4KLSAgICAgICAgICAgIG1rZGlyICRMT0NLRElSCi0gICAgICAgICAgICBjaG1vZCA3NzcgJExPQ0tESVIKLSAgICAgICAgZmkKLQotICAgICAgICBJRkNPTkZJRz1gd2hpY2ggaXAgMj4gL2Rldi9udWxsYAotICAgICAgICBpZiBbIC16ICIkSUZDT05GSUciIF07IHRoZW4KLSAgICAgICAgICAgIElGQ09ORklHPS9zYmluL2lwCi0gICAgICAgIGZpCi0gICAgICAgIGlmIFsgISAteCAiJElGQ09ORklHIiBdOyB0aGVuCi0gICAgICAgICAgICAgICBlY2hvICIkSUZDT05GSUcgY2Fubm90IGJlIGV4ZWN1dGVkIgotICAgICAgICAgICAgICAgZXhpdCAxCi0gICAgICAgIGZpCi0KLSAgICAgICAgUE9TU0lCTEU9YCRJRkNPTkZJRyBsaW5rIHwgZ3JlcCAndGFwJyB8IGF3ayAne3ByaW50ICQyfScgfCBzZWQgLWUgJ3MvOi8vJyAtZSAncy9ALiovLydgCi0gICAgICAgIFRBUD0iIgotICAgICAgICBMT0NLRklMRT0iIgotICAgICAgICBVU0VfUFJFQ09ORl9UQVA9Im5vIgotICAgICAgICBmb3IgdGFwIGluICRQT1NTSUJMRTsgZG8KLSAgICAgICAgICAgIExPQ0tGSUxFPSIkTE9DS0RJUi8kdGFwIgotICAgICAgICAgICAgaWYgWyAtZSAiJExPQ0tGSUxFLnNraXAiIF07IHRoZW4KLSAgICAgICAgICAgICAgICBlY2hvICJGb3VuZCAkTE9DS0ZJTEUuc2tpcCwgc2tpcHBpbmcgJHRhcCIKLSAgICAgICAgICAgICAgICBjb250aW51ZQotICAgICAgICAgICAgZmkKLSAgICAgICAgICAgIGVjaG8gIkFjcXVpcmluZyBsb2NrZmlsZSBmb3IgJHRhcC4uLiIKLSAgICAgICAgICAgIGFjcXVpcmVfbG9jayAkTE9DS0ZJTEUKLSAgICAgICAgICAgIGlmIFsgJD8gLWVxIDAgXTsgdGhlbgotICAgICAgICAgICAgICAgIFRBUD0kdGFwCi0gICAgICAgICAgICAgICAgVVNFX1BSRUNPTkZfVEFQPSJ5ZXMiCi0gICAgICAgICAgICAgICAgYnJlYWsKLSAgICAgICAgICAgIGZpCi0gICAgICAgIGRvbmUKLQotICAgICAgICBpZiBbICIkVEFQIiA9ICIiIF07IHRoZW4KLSAgICAgICAgICAgIGlmIFsgLWUgIiROT1NVRE9fRkxBRyIgXTsgdGhlbgotICAgICAgICAgICAgICAgIGVjaG8gIkVycm9yOiBUaGVyZSBhcmUgbm8gYXZhaWxhYmxlIHRhcCBkZXZpY2VzIHRvIHVzZSBmb3IgbmV0d29ya2luZywiCi0gICAgICAgICAgICAgICAgZWNobyAiYW5kIEkgc2VlICROT1NVRE9fRkxBRyBleGlzdHMsIHNvIEkgYW0gbm90IGdvaW5nIHRvIHRyeSBjcmVhdGluZyIKLSAgICAgICAgICAgICAgICBlY2hvICJhIG5ldyBvbmUgd2l0aCBzdWRvLiIKLSAgICAgICAgICAgICAgICBleGl0IDEKLSAgICAgICAgICAgIGZpCi0KLSAgICAgICAgICAgIEdST1VQSUQ9YGlkIC1nYAotICAgICAgICAgICAgVVNFUklEPWBpZCAtdWAKLSAgICAgICAgICAgIGVjaG8gIlNldHRpbmcgdXAgdGFwIGludGVyZmFjZSB1bmRlciBzdWRvIgotICAgICAgICAgICAgIyBSZWRpcmVjdCBzdGRlcnIgc2luY2Ugd2UgY291bGQgc2VlIGEgTERfUFJFTE9BRCB3YXJuaW5nIGhlcmUgaWYgcHNldWRvIGlzIGxvYWRlZAotICAgICAgICAgICAgIyBidXQgaW5hY3RpdmUuIFRoaXMgbG9va3Mgc2NhcnkgYnV0IGlzIGhhcm1sZXNzCi0gICAgICAgICAgICB0YXA9YHN1ZG8gJFFFTVVJRlVQICRVU0VSSUQgJEdST1VQSUQgJE9FQ09SRV9OQVRJVkVfU1lTUk9PVCAyPiAvZGV2L251bGxgCi0gICAgICAgICAgICBpZiBbICQ/IC1uZSAwIF07IHRoZW4KLSAgICAgICAgICAgICAgICAjIFJlLXJ1biBzdGFuZGFsb25lIHRvIHNlZSB2ZXJib3NlIGVycm9ycwotICAgICAgICAgICAgICAgIHN1ZG8gJFFFTVVJRlVQICRVU0VSSUQgJEdST1VQSUQgJE9FQ09SRV9OQVRJVkVfU1lTUk9PVAotICAgICAgICAgICAgICAgIHJldHVybiAxCi0gICAgICAgICAgICBmaQotICAgICAgICAgICAgTE9DS0ZJTEU9IiRMT0NLRElSLyR0YXAiCi0gICAgICAgICAgICBlY2hvICJBY3F1aXJpbmcgbG9ja2ZpbGUgZm9yICR0YXAuLi4iCi0gICAgICAgICAgICBhY3F1aXJlX2xvY2sgJExPQ0tGSUxFCi0gICAgICAgICAgICBpZiBbICQ/IC1lcSAwIF07IHRoZW4KLSAgICAgICAgICAgICAgICBUQVA9JHRhcAotICAgICAgICAgICAgZmkgCi0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIGVjaG8gIlVzaW5nIHByZWNvbmZpZ3VyZWQgdGFwIGRldmljZSAnJFRBUCciCi0gICAgICAgICAgICBlY2hvICJJZiB0aGlzIGlzIG5vdCBpbnRlbmRlZCwgdG91Y2ggJExPQ0tGSUxFLnNraXAgdG8gbWFrZSBydW5xZW11IHNraXAgJFRBUC4iCi0gICAgICAgIGZpCi0KLSAgICAgICAgY2xlYW51cCgpIHsKLSAgICAgICAgICAgIGlmIFsgISAtZSAiJE5PU1VET19GTEFHIiAtYSAiJFVTRV9QUkVDT05GX1RBUCIgPSAibm8iIF07IHRoZW4KLSAgICAgICAgICAgICAgICAjIFJlZGlyZWN0IHN0ZGVyciBzaW5jZSB3ZSBjb3VsZCBzZWUgYSBMRF9QUkVMT0FEIHdhcm5pbmcgaGVyZSBpZiBwc2V1ZG8gaXMgbG9hZGVkCi0gICAgICAgICAgICAgICAgIyBidXQgaW5hY3RpdmUuIFRoaXMgbG9va3Mgc2NhcnkgYnV0IGlzIGhhcm1sZXNzCi0gICAgICAgICAgICAgICAgc3VkbyAkUUVNVUlGRE9XTiAkVEFQICRPRUNPUkVfTkFUSVZFX1NZU1JPT1QgMj4gL2Rldi9udWxsCi0gICAgICAgICAgICBmaQotICAgICAgICAgICAgZWNobyAiUmVsZWFzaW5nIGxvY2tmaWxlIG9mIHByZWNvbmZpZ3VyZWQgdGFwIGRldmljZSAnJFRBUCciCi0gICAgICAgICAgICByZWxlYXNlX2xvY2sgJExPQ0tGSUxFCi0KLSAgICAgICAgICAgIGlmIFsgIiRORlNSVU5OSU5HIiA9ICJ0cnVlIiBdOyB0aGVuCi0gICAgICAgICAgICAgICAgZWNobyAiU2h1dHRpbmcgZG93biB0aGUgdXNlcnNwYWNlIE5GUyBzZXJ2ZXIuLi4iCi0gICAgICAgICAgICAgICAgZWNobyAicnVucWVtdS1leHBvcnQtcm9vdGZzIHN0b3AgJFJPT1RGUyIKLSAgICAgICAgICAgICAgICBydW5xZW11LWV4cG9ydC1yb290ZnMgc3RvcCAkUk9PVEZTCi0gICAgICAgICAgICBmaQotICAgICAgICAgICAgIyBJZiBRRU1VIGNyYXNoZXMgb3Igc29tZWhvdyB0dHkgcHJvcGVydGllcyBhcmUgbm90IHJlc3RvcmVkCi0gICAgICAgICAgICAjIGFmdGVyIHFlbXUgZXhpdHMsIHdlIG5lZWQgdG8gcnVuIHN0dHkgc2FuZQotICAgICAgICAgICAgI3N0dHkgc2FuZQotCi0gICAgICAgICAgICAjaW5zdGVhZCBvZiB1c2luZyBzdHR5IHNhbmUgd2Ugc2V0IHRoZSBvcmlnaW5hbCBzdHR5IHZhbHVlcwotICAgICAgICAgICAgc3R0eSAke09SSUdfU1RUWX0KLQotICAgICAgICB9Ci0KLQotICAgICAgICBuMD0kKGVjaG8gJFRBUCB8IHNlZCAncy90YXAvLycpCi0KLSAgICAgICAgY2FzZSAkbjAgaW4KLSAgICAgICAgICAgICcnfCpbITAtOV0qKQotICAgICAgICAgICAgICAgIGVjaG8gIkVycm9yIENvdWxkbid0IHR1cm4gJFRBUCBpbnRvIGFuIGludGVyZmFjZSBudW1iZXI/IgotICAgICAgICAgICAgICAgIGV4aXQgMQotICAgICAgICAgICAgICAgIDs7Ci0gICAgICAgIGVzYWMKLQotICAgICAgICBuMT0kKCgkbjAgKiAyICsgMSkpCi0gICAgICAgIG4yPSQoKCRuMSArIDEpKQotCi0gICAgICAgIEtFUk5FTF9ORVRXT1JLX0NNRD0iaXA9MTkyLjE2OC43LiRuMjo6MTkyLjE2OC43LiRuMToyNTUuMjU1LjI1NS4wIgotICAgICAgICBRRU1VX1RBUF9DTUQ9Ii1uZXQgdGFwLHZsYW49MCxpZm5hbWU9JFRBUCxzY3JpcHQ9bm8sZG93bnNjcmlwdD1ubyIKLSAgICAgICAgaWYgWyAiJFZIT1NUX0FDVElWRSIgPSAieWVzIiBdOyB0aGVuCi0gICAgICAgICAgICBRRU1VX05FVFdPUktfQ01EPSItbmV0IG5pYyxtb2RlbD12aXJ0aW8gJFFFTVVfVEFQX0NNRCx2aG9zdD1vbiIKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgUUVNVV9ORVRXT1JLX0NNRD0iLW5ldCBuaWMsbW9kZWw9dmlydGlvICRRRU1VX1RBUF9DTUQiCi0gICAgICAgIGZpCi0gICAgICAgIERST09UPSIvZGV2L3ZkYSIKLSAgICAgICAgUk9PVEZTX09QVElPTlM9Ii1kcml2ZSBmaWxlPSRST09URlMsaWY9dmlydGlvLGZvcm1hdD1yYXciCi0KLSAgICAgICAgS0VSTkNNRExJTkU9Im1lbT0kUUVNVV9NRU1PUlkiCi0gICAgICAgIFFFTVVfVUlfT1BUSU9OUz0iLXNob3ctY3Vyc29yIC11c2IgLXVzYmRldmljZSB0YWJsZXQiCi0KLSAgICAgICAgTkZTX0lOU1RBTkNFPWBlY2hvICRUQVAgfCBzZWQgJ3MvdGFwLy8nYAotICAgICAgICBleHBvcnQgTkZTX0lOU1RBTkNFCi0KLSAgICAgICAgU0VSSUFMT1BUUz0iIgotICAgICAgICBpZiBbICJ4JFNFUklBTF9MT0dGSUxFIiAhPSAieCIgXTsgdGhlbgotICAgICAgICAgICAgU0VSSUFMT1BUUz0iLXNlcmlhbCBmaWxlOiRTRVJJQUxfTE9HRklMRSIKLSAgICAgICAgZmkKLWZpCi0KLWlmIFsgISAtZiAiJEtFUk5FTCIgLWEgIiRJU19WTSIgPSAiZmFsc2UiIF07IHRoZW4KLSAgICBlY2hvICJFcnJvcjogS2VybmVsIGltYWdlIGZpbGUgJEtFUk5FTCBkb2Vzbid0IGV4aXN0IgotICAgIGNsZWFudXAKLSAgICByZXR1cm4gMQotZmkKLQotaWYgWyAiJEZTVFlQRSIgIT0gIm5mcyIgLWEgIiRJU19WTSIgPSAiZmFsc2UiIC1hICEgLWYgIiRST09URlMiIF07IHRoZW4KLSAgICBlY2hvICJFcnJvcjogSW1hZ2UgZmlsZSAkUk9PVEZTIGRvZXNuJ3QgZXhpc3QiCi0gICAgY2xlYW51cAotICAgIHJldHVybiAxCi1maQotCi1pZiBbICIkTkZTX1NFUlZFUiIgPSAiIiBdOyB0aGVuCi0gICAgTkZTX1NFUlZFUj0iMTkyLjE2OC43LjEiCi0gICAgaWYgWyAiJFNMSVJQX0VOQUJMRUQiID0gInllcyIgXTsgdGhlbgotCU5GU19TRVJWRVI9IjEwLjAuMi4yIgotICAgIGZpCi1maQotCi1pZiBbICIkRlNUWVBFIiA9ICJuZnMiIF07IHRoZW4KLSAgICBORlNfRElSPWBlY2hvICRST09URlMgfCBzZWQgJ3MvXlteOl0qOlwoLipcKS9cMS8nYAotICAgIGlmIFsgIiRORlNfSU5TVEFOQ0UiID0gIiIgXSA7IHRoZW4KLQlORlNfSU5TVEFOQ0U9MAotICAgIGZpCi0gICAgTU9VTlREX1JQQ1BPUlQ9JFsgMjExMTEgKyAkTkZTX0lOU1RBTkNFIF0KLSAgICBORlNEX1JQQ1BPUlQ9JFsgMTExMTEgKyAkTkZTX0lOU1RBTkNFIF0KLSAgICBORlNEX1BPUlQ9JFsgMzA0OSArIDIgKiAkTkZTX0lOU1RBTkNFIF0KLSAgICBNT1VOVERfUE9SVD0kWyAzMDQ4ICsgMiAqICRORlNfSU5TVEFOQ0UgXQotICAgIFVORlNfT1BUUz0ibmZzdmVycz0zLHBvcnQ9JE5GU0RfUE9SVCxtb3VudHByb2c9JE1PVU5URF9SUENQT1JULG5mc3Byb2c9JE5GU0RfUlBDUE9SVCx1ZHAsbW91bnRwb3J0PSRNT1VOVERfUE9SVCIKLQotICAgIFBTRVVET19MT0NBTFNUQVRFRElSPX4vLnJ1bnFlbXUtc2RrL3BzZXVkbwotICAgIGV4cG9ydCBQU0VVRE9fTE9DQUxTVEFURURJUgotCi0gICAgIyBTdGFydCB0aGUgdXNlcnNwYWNlIE5GUyBzZXJ2ZXIKLSAgICBlY2hvICJydW5xZW11LWV4cG9ydC1yb290ZnMgcmVzdGFydCAkUk9PVEZTIgotICAgIHJ1bnFlbXUtZXhwb3J0LXJvb3RmcyByZXN0YXJ0ICRST09URlMKLSAgICBpZiBbICQ/ICE9IDAgXTsgdGhlbgotICAgICAgICByZXR1cm4gMQotICAgIGZpCi0gICAgTkZTUlVOTklORz0idHJ1ZSIKLWZpCi0KLQotc2V0X21lbV9zaXplKCkgewotICAgIGlmIFsgISAteiAiJG1lbV9zZXQiIF0gOyB0aGVuCi0gICAgICAgICNHZXQgbWVtb3J5IHNldHRpbmcgc2l6ZSBmcm9tIHVzZXIgaW5wdXQKLSAgICAgICAgbWVtX3NpemU9YGVjaG8gJG1lbV9zZXQgfCBzZWQgJ3MvLW1bWzpzcGFjZTpdXSAqLy8nYAotICAgIGVsc2UKLSAgICAgICAgbWVtX3NpemU9JDEKLSAgICBmaQotICAgICMgUUVNVV9NRU1PUlkgaGFzICdNJyBhcHBlbmRlZCB0byBtZW1fc2l6ZQotICAgIFFFTVVfTUVNT1JZPSIkbWVtX3NpemUiTQotCi19Ci0KLWNvbmZpZ19xZW11YXJtKCkgewotICAgIHNldF9tZW1fc2l6ZSAxMjgKLSAgICBRRU1VPXFlbXUtc3lzdGVtLWFybQotICAgIE1BQ0hJTkVfU1VCVFlQRT12ZXJzYXRpbGVwYgotICAgIGV4cG9ydCBRRU1VX0FVRElPX0RSVj0ibm9uZSIKLSAgICBRRU1VX1VJX09QVElPTlM9IiRRRU1VX1VJX09QVElPTlMiCi0gICAgaWYgWyAiJHtGU1RZUEU6MDozfSIgPSAiZXh0IiAtbyAiJEZTVFlQRSIgPSAiYnRyZnMiIC1vICIkRlNUWVBFIiA9ICJ3aWMiIF07IHRoZW4KLSAgICAgICAgS0VSTkNNRExJTkU9InJvb3Q9JERST09UIHJ3IGNvbnNvbGU9dHR5QU1BMCwxMTUyMDAgY29uc29sZT10dHkgJEtFUk5FTF9ORVRXT1JLX0NNRCBtZW09JFFFTVVfTUVNT1JZIGhpZ2hyZXM9b2ZmIgotICAgICAgICBRRU1VT1BUSU9OUz0iJFFFTVVfTkVUV09SS19DTUQgLU0gJHtNQUNISU5FX1NVQlRZUEV9ICRST09URlNfT1BUSU9OUyAtbm8tcmVib290ICRRRU1VX1VJX09QVElPTlMiCi0gICAgZmkKLSAgICBpZiBbICIkRlNUWVBFIiA9ICJuZnMiIF07IHRoZW4KLSAgICAgICAgaWYgWyAiJE5GU19TRVJWRVIiID0gIjE5Mi4xNjguNy4xIiAtYSAhIC1kICIkTkZTX0RJUiIgXTsgdGhlbgotICAgICAgICAgICAgZWNobyAiRXJyb3I6IE5GUyBtb3VudCBwb2ludCAkUk9PVEZTIGRvZXNuJ3QgZXhpc3QiCi0gICAgICAgICAgICBjbGVhbnVwCi0gICAgICAgICAgICByZXR1cm4gMQotICAgICAgICBmaQotICAgICAgICBLRVJOQ01ETElORT0icm9vdD0vZGV2L25mcyBuZnNyb290PSRORlNfU0VSVkVSOiRORlNfRElSLCRVTkZTX09QVFMgcncgY29uc29sZT10dHlBTUEwLDExNTIwMCAkS0VSTkVMX05FVFdPUktfQ01EIG1lbT0kUUVNVV9NRU1PUlkiCi0gICAgICAgIFFFTVVPUFRJT05TPSIkUUVNVV9ORVRXT1JLX0NNRCAtTSAke01BQ0hJTkVfU1VCVFlQRX0gLS1uby1yZWJvb3QgJFFFTVVfVUlfT1BUSU9OUyIKLSAgICBmaQotICAgIGlmIFsgIiRNQUNISU5FIiA9ICJxZW11YXJtdjYiIF07IHRoZW4KLSAgICAgICAgUUVNVU9QVElPTlM9IiRRRU1VT1BUSU9OUyAtY3B1IGFybTExMzYiCi0gICAgZmkKLSAgICBpZiBbICIkTUFDSElORSIgPSAicWVtdWFybXY3IiBdOyB0aGVuCi0gICAgICAgIFFFTVVPUFRJT05TPSIkUUVNVU9QVElPTlMgLWNwdSBjb3J0ZXgtYTgiCi0gICAgZmkKLX0KLQotY29uZmlnX3FlbXVhcm02NCgpIHsKLSAgICBzZXRfbWVtX3NpemUgNTEyCi0gICAgUUVNVT1xZW11LXN5c3RlbS1hYXJjaDY0Ci0KLSAgICBRRU1VX05FVFdPUktfQ01EPSItbmV0ZGV2IHRhcCxpZD1uZXQwLGlmbmFtZT0kVEFQLHNjcmlwdD1ubyxkb3duc2NyaXB0PW5vIC1kZXZpY2UgdmlydGlvLW5ldC1kZXZpY2UsbmV0ZGV2PW5ldDAgIgotICAgIERST09UPSIvZGV2L3ZkYSIKLSAgICBST09URlNfT1BUSU9OUz0iLWRyaXZlIGlkPWRpc2swLGZpbGU9JFJPT1RGUyxpZj1ub25lLGZvcm1hdD1yYXcgLWRldmljZSB2aXJ0aW8tYmxrLWRldmljZSxkcml2ZT1kaXNrMCIKLQotICAgIGV4cG9ydCBRRU1VX0FVRElPX0RSVj0ibm9uZSIKLSAgICBpZiBbICJ4JFNFUklBTFNURElPIiA9ICJ4IiBdIDsgdGhlbgotICAgICAgICBRRU1VX1VJX09QVElPTlM9Ii1ub2dyYXBoaWMiCi0gICAgZWxzZQotICAgICAgICBRRU1VX1VJX09QVElPTlM9IiIKLSAgICBmaQotICAgIGlmIFsgIiR7RlNUWVBFOjA6M30iID0gImV4dCIgLW8gIiRGU1RZUEUiID0gImJ0cmZzIiAtbyAiJEZTVFlQRSIgPSAid2ljIiBdOyB0aGVuCi0gICAgICAgIEtFUk5DTURMSU5FPSJyb290PSREUk9PVCBydyBjb25zb2xlPXR0eUFNQTAsMzg0MDAgbWVtPSRRRU1VX01FTU9SWSBoaWdocmVzPW9mZiAkS0VSTkVMX05FVFdPUktfQ01EIgotICAgICAgICAjIHFlbXUtc3lzdGVtLWFhcmNoNjQgb25seSBzdXBwb3J0ICctbWFjaGluZSB2aXJ0IC1jcHUgY29ydGV4LWE1NycgZm9yIG5vdwotICAgICAgICBRRU1VT1BUSU9OUz0iJFFFTVVfTkVUV09SS19DTUQgLW1hY2hpbmUgdmlydCAtY3B1IGNvcnRleC1hNTcgJFJPT1RGU19PUFRJT05TICRRRU1VX1VJX09QVElPTlMiCi0gICAgZmkKLSAgICBpZiBbICIkRlNUWVBFIiA9ICJuZnMiIF07IHRoZW4KLSAgICAgICAgaWYgWyAiJE5GU19TRVJWRVIiID0gIjE5Mi4xNjguNy4xIiAtYSAhIC1kICIkTkZTX0RJUiIgXTsgdGhlbgotICAgICAgICAgICAgZWNobyAiRXJyb3I6IE5GUyBtb3VudCBwb2ludCAkUk9PVEZTIGRvZXNuJ3QgZXhpc3QiCi0gICAgICAgICAgICBjbGVhbnVwCi0gICAgICAgICAgICByZXR1cm4gMQotICAgICAgICBmaQotICAgICAgICBLRVJOQ01ETElORT0icm9vdD0vZGV2L25mcyBuZnNyb290PSRORlNfU0VSVkVSOiRORlNfRElSLCRVTkZTX09QVFMgcncgY29uc29sZT10dHlBTUEwLDM4NDAwIG1lbT0kUUVNVV9NRU1PUlkgaGlnaHJlcz1vZmYgJEtFUk5FTF9ORVRXT1JLX0NNRCIKLSAgICAgICAgUUVNVU9QVElPTlM9IiRRRU1VX05FVFdPUktfQ01EIC1tYWNoaW5lIHZpcnQgLWNwdSBjb3J0ZXgtYTU3ICRRRU1VX1VJX09QVElPTlMiCi0gICAgZmkKLX0KLQotY29uZmlnX3FlbXV4ODYoKSB7Ci0gICAgc2V0X21lbV9zaXplIDI1NgotICAgIFFFTVU9cWVtdS1zeXN0ZW0taTM4NgotICAgIGlmIFsgIiRLVk1fQUNUSVZFIiA9ICJ5ZXMiIF07IHRoZW4KLSAgICAgICAgQ1BVX1NVQlRZUEU9a3ZtMzIKLSAgICBlbHNlCi0gICAgICAgIENQVV9TVUJUWVBFPXFlbXUzMgotICAgIGZpCi0gICAgaWYgWyAhIC16ICIkdmdhX29wdGlvbiIgXTsgdGhlbgotICAgICAgICBRRU1VX1VJX09QVElPTlM9IiRRRU1VX1VJX09QVElPTlMiCi0gICAgZWxzZQotICAgICAgICBRRU1VX1VJX09QVElPTlM9IiRRRU1VX1VJX09QVElPTlMgLXZnYSB2bXdhcmUiCi0gICAgZmkKLSAgICBpZiBbICIke0ZTVFlQRTowOjN9IiA9ICJleHQiIC1vICIkRlNUWVBFIiA9ICJidHJmcyIgLW8gIiRGU1RZUEUiID0gIndpYyIgXTsgdGhlbgotICAgICAgICBLRVJOQ01ETElORT0idmdhPTAgdXZlc2FmYi5tb2RlX29wdGlvbj02NDB4NDgwLTMyIHJvb3Q9JERST09UIHJ3IG1lbT0kUUVNVV9NRU1PUlkgJEtFUk5FTF9ORVRXT1JLX0NNRCIKLSAgICAgICAgUUVNVU9QVElPTlM9IiRRRU1VX05FVFdPUktfQ01EIC1jcHUgJENQVV9TVUJUWVBFICRST09URlNfT1BUSU9OUyAkUUVNVV9VSV9PUFRJT05TIgotICAgIGZpCi0gICAgaWYgWyAiJHtGU1RZUEU6MDo0fSIgPSAiY3BpbyIgXTsgdGhlbgotICAgICAgICBLRVJOQ01ETElORT0idmdhPTAgdXZlc2FmYi5tb2RlX29wdGlvbj02NDB4NDgwLTMyIHJvb3Q9L2Rldi9yYW0wIHJ3IG1lbT0kUUVNVV9NRU1PUlkgJEtFUk5FTF9ORVRXT1JLX0NNRCIKLSAgICAgICAgUUVNVU9QVElPTlM9IiRRRU1VX05FVFdPUktfQ01EIC1jcHUgJENQVV9TVUJUWVBFIC1pbml0cmQgJFJPT1RGUyAkUUVNVV9VSV9PUFRJT05TIgotICAgIGZpCi0KLSAgICBpZiBbICIkRlNUWVBFIiA9ICJuZnMiIF07IHRoZW4KLSAgICAgICAgaWYgWyAiJE5GU19TRVJWRVIiID0gIjE5Mi4xNjguNy4xIiAtYSAhIC1kICIkTkZTX0RJUiIgXTsgdGhlbgotICAgICAgICAgICAgZWNobyAiRXJyb3I6IE5GUyBtb3VudCBwb2ludCAkUk9PVEZTIGRvZXNuJ3QgZXhpc3QuIgotICAgICAgICAgICAgY2xlYW51cAotICAgICAgICAgICAgcmV0dXJuIDEKLSAgICAgICAgZmkKLSAgICAgICAgS0VSTkNNRExJTkU9InJvb3Q9L2Rldi9uZnMgbmZzcm9vdD0kTkZTX1NFUlZFUjokTkZTX0RJUiwkVU5GU19PUFRTIHJ3ICRLRVJORUxfTkVUV09SS19DTUQgbWVtPSRRRU1VX01FTU9SWSIKLSAgICAgICAgUUVNVU9QVElPTlM9IiRRRU1VX05FVFdPUktfQ01EICRRRU1VX1VJX09QVElPTlMiCi0gICAgZmkKLSAgICBpZiBbICIkSVNfVk0iID0gInRydWUiIF07IHRoZW4KLSAgICAgICAgUUVNVU9QVElPTlM9IiRRRU1VX05FVFdPUktfQ01EICRRRU1VX1VJX09QVElPTlMiCi0gICAgZmkKLSAgICAjIEN1cnJlbnRseSBvcHJvZmlsZSdzIGV2ZW50IGJhc2VkIGludGVycnVwdCBtb2RlIGRvZXNuJ3Qgd29yayhCdWcgIzgyOCkgaW4KLSAgICAjIHFlbXV4ODYgYW5kIHFlbXV4ODYtNjQuIFdlIGNhbiB1c2UgdGltZXIgaW50ZXJydXB0IG1vZGUgZm9yIG5vdy4KLSAgICBLRVJOQ01ETElORT0iJEtFUk5DTURMSU5FIG9wcm9maWxlLnRpbWVyPTEiCi19Ci0KLWNvbmZpZ19xZW11eDg2XzY0KCkgewotICAgIHNldF9tZW1fc2l6ZSAyNTYKLSAgICBRRU1VPXFlbXUtc3lzdGVtLXg4Nl82NAotICAgIGlmIFsgIiRLVk1fQUNUSVZFIiA9ICJ5ZXMiIF07IHRoZW4KLSAgICAgICAgQ1BVX1NVQlRZUEU9a3ZtNjQKLSAgICBlbHNlCi0gICAgICAgIENQVV9TVUJUWVBFPWNvcmUyZHVvCi0gICAgZmkKLSAgICBpZiBbICEgLXogIiR2Z2Ffb3B0aW9uIiBdOyB0aGVuCi0gICAgICAgIFFFTVVfVUlfT1BUSU9OUz0iJFFFTVVfVUlfT1BUSU9OUyIKLSAgICBlbHNlCi0gICAgICAgIFFFTVVfVUlfT1BUSU9OUz0iJFFFTVVfVUlfT1BUSU9OUyAtdmdhIHZtd2FyZSIKLSAgICBmaQotICAgIGlmIFsgIiR7RlNUWVBFOjA6M30iID0gImV4dCIgLW8gIiRGU1RZUEUiID0gImJ0cmZzIiAtbyAiJEZTVFlQRSIgPSAid2ljIiBdOyB0aGVuCi0gICAgICAgIEtFUk5DTURMSU5FPSJ2Z2E9MCB1dmVzYWZiLm1vZGVfb3B0aW9uPTY0MHg0ODAtMzIgcm9vdD0kRFJPT1QgcncgbWVtPSRRRU1VX01FTU9SWSAkS0VSTkVMX05FVFdPUktfQ01EIgotICAgICAgICBRRU1VT1BUSU9OUz0iJFFFTVVfTkVUV09SS19DTUQgLWNwdSAkQ1BVX1NVQlRZUEUgJFJPT1RGU19PUFRJT05TICRRRU1VX1VJX09QVElPTlMiCi0gICAgZmkKLSAgICBpZiBbICIkRlNUWVBFIiA9ICJuZnMiIF07IHRoZW4KLSAgICAgICAgaWYgWyAieCRST09URlMiID0gIngiIF07IHRoZW4KLSAgICAgICAgICAgIFJPT1RGUz0vc3J2L25mcy9xZW11eDg2LTY0Ci0gICAgICAgIGZpCi0gICAgICAgIGlmIFsgISAtZCAiJFJPT1RGUyIgXTsgdGhlbgotICAgICAgICAgICAgZWNobyAiRXJyb3I6IE5GUyBtb3VudCBwb2ludCAkUk9PVEZTIGRvZXNuJ3QgZXhpc3QuIgotICAgICAgICAgICAgY2xlYW51cAotICAgICAgICAgICAgcmV0dXJuIDEKLSAgICAgICAgZmkKLSAgICAgICAgS0VSTkNNRExJTkU9InJvb3Q9L2Rldi9uZnMgbmZzcm9vdD0kTkZTX1NFUlZFUjokTkZTX0RJUiwkVU5GU19PUFRTIHJ3ICRLRVJORUxfTkVUV09SS19DTUQgbWVtPSRRRU1VX01FTU9SWSIKLSAgICAgICAgUUVNVU9QVElPTlM9IiRRRU1VX05FVFdPUktfQ01EIC1jcHUgJENQVV9TVUJUWVBFICRRRU1VX1VJX09QVElPTlMiCi0gICAgZmkKLSAgICBpZiBbICIkSVNfVk0iID0gInRydWUiIF07IHRoZW4KLSAgICAgICAgUUVNVU9QVElPTlM9IiRRRU1VX05FVFdPUktfQ01EIC1jcHUgJENQVV9TVUJUWVBFICRRRU1VX1VJX09QVElPTlMiCi0gICAgZmkKLSAgICAjIEN1cnJlbnRseSBvcHJvZmlsZSdzIGV2ZW50IGJhc2VkIGludGVycnVwdCBtb2RlIGRvZXNuJ3Qgd29yayhCdWcgIzgyOCkgaW4KLSAgICAjIHFlbXV4ODYgYW5kIHFlbXV4ODYtNjQuIFdlIGNhbiB1c2UgdGltZXIgaW50ZXJydXB0IG1vZGUgZm9yIG5vdy4KLSAgICBLRVJOQ01ETElORT0iJEtFUk5DTURMSU5FIG9wcm9maWxlLnRpbWVyPTEiCi19Ci0KLWNvbmZpZ19xZW11bWlwcygpIHsKLSAgICBzZXRfbWVtX3NpemUgMjU2Ci0gICAgY2FzZSAiJE1BQ0hJTkUiIGluCi0gICAgICAgcWVtdW1pcHMpICAgUUVNVT1xZW11LXN5c3RlbS1taXBzIDs7Ci0gICAgICAgcWVtdW1pcHNlbCkgUUVNVT1xZW11LXN5c3RlbS1taXBzZWwgOzsKLSAgICAgICBxZW11bWlwczY0KSBRRU1VPXFlbXUtc3lzdGVtLW1pcHM2NCA7OwotICAgIGVzYWMKLSAgICBNQUNISU5FX1NVQlRZUEU9bWFsdGEKLSAgICBRRU1VX1VJX09QVElPTlM9Ii12Z2EgY2lycnVzICRRRU1VX1VJX09QVElPTlMiCi0gICAgaWYgWyAiJHtGU1RZUEU6MDozfSIgPSAiZXh0IiAtbyAiJEZTVFlQRSIgPSAiYnRyZnMiIC1vICIkRlNUWVBFIiA9ICJ3aWMiIF07IHRoZW4KLSAgICAgICAgI0tFUk5DTURMSU5FPSJyb290PS9kZXYvaGRhIGNvbnNvbGU9dHR5UzAgY29uc29sZT10dHkwICRLRVJORUxfTkVUV09SS19DTUQgbWVtPSRRRU1VX01FTU9SWSIKLSAgICAgICAgS0VSTkNNRExJTkU9InJvb3Q9JERST09UIHJ3IGNvbnNvbGU9dHR5UzAgY29uc29sZT10dHkgJEtFUk5FTF9ORVRXT1JLX0NNRCBtZW09JFFFTVVfTUVNT1JZIgotICAgICAgICBRRU1VT1BUSU9OUz0iJFFFTVVfTkVUV09SS19DTUQgLU0gJE1BQ0hJTkVfU1VCVFlQRSAkUk9PVEZTX09QVElPTlMgLW5vLXJlYm9vdCAkUUVNVV9VSV9PUFRJT05TIgotICAgIGZpCi0gICAgaWYgWyAiJEZTVFlQRSIgPSAibmZzIiBdOyB0aGVuCi0gICAgICAgIGlmIFsgIiRORlNfU0VSVkVSIiA9ICIxOTIuMTY4LjcuMSIgLWEgISAtZCAiJE5GU19ESVIiIF07IHRoZW4KLSAgICAgICAgICAgIGVjaG8gIkVycm9yOiBORlMgbW91bnQgcG9pbnQgJFJPT1RGUyBkb2Vzbid0IGV4aXN0IgotICAgICAgICAgICAgY2xlYW51cAotICAgICAgICAgICAgcmV0dXJuIDEKLSAgICAgICAgZmkKLSAgICAgICAgS0VSTkNNRExJTkU9InJvb3Q9L2Rldi9uZnMgY29uc29sZT10dHlTMCBjb25zb2xlPXR0eSBuZnNyb290PSRORlNfU0VSVkVSOiRORlNfRElSLCRVTkZTX09QVFMgcncgJEtFUk5FTF9ORVRXT1JLX0NNRCBtZW09JFFFTVVfTUVNT1JZIgotICAgICAgICBRRU1VT1BUSU9OUz0iJFFFTVVfTkVUV09SS19DTUQgLU0gJE1BQ0hJTkVfU1VCVFlQRSAtbm8tcmVib290ICRRRU1VX1VJX09QVElPTlMiCi0gICAgZmkKLX0KLQotY29uZmlnX3FlbXVwcGMoKSB7Ci0gICAgc2V0X21lbV9zaXplIDI1NgotICAgIFFFTVU9cWVtdS1zeXN0ZW0tcHBjCi0gICAgTUFDSElORV9TVUJUWVBFPW1hYzk5Ci0gICAgQ1BVX1NVQlRZUEU9RzQKLSAgICBRRU1VX1VJX09QVElPTlM9IiRRRU1VX1VJX09QVElPTlMiCi0gICAgaWYgWyAiJFNMSVJQX0VOQUJMRUQiID0gInllcyIgXTsgdGhlbgotICAgICAgICBRRU1VX05FVFdPUktfQ01EPSIiCi0gICAgZWxzZQotICAgICAgICBRRU1VX05FVFdPUktfQ01EPSItbmV0IG5pYyxtb2RlbD1wY25ldCAkUUVNVV9UQVBfQ01EIgotICAgIGZpCi0gICAgaWYgWyAiJHtGU1RZUEU6MDozfSIgPSAiZXh0IiAtbyAiJEZTVFlQRSIgPSAiYnRyZnMiIC1vICIkRlNUWVBFIiA9ICJ3aWMiIF07IHRoZW4KLSAgICAgICAgS0VSTkNNRExJTkU9InJvb3Q9JERST09UIHJ3IGNvbnNvbGU9dHR5UzAgY29uc29sZT10dHkgJEtFUk5FTF9ORVRXT1JLX0NNRCBtZW09JFFFTVVfTUVNT1JZIgotICAgICAgICBRRU1VT1BUSU9OUz0iJFFFTVVfTkVUV09SS19DTUQgLWNwdSAkQ1BVX1NVQlRZUEUgLU0gJE1BQ0hJTkVfU1VCVFlQRSAkUk9PVEZTX09QVElPTlMgLW5vLXJlYm9vdCAkUUVNVV9VSV9PUFRJT05TIgotICAgIGZpCi0gICAgaWYgWyAiJEZTVFlQRSIgPSAibmZzIiBdOyB0aGVuCi0gICAgICAgIGlmIFsgIiRORlNfU0VSVkVSIiA9ICIxOTIuMTY4LjcuMSIgLWEgISAtZCAiJE5GU19ESVIiIF07IHRoZW4KLSAgICAgICAgICAgIGVjaG8gIkVycm9yOiBORlMgbW91bnQgcG9pbnQgJFJPT1RGUyBkb2Vzbid0IGV4aXN0IgotICAgICAgICAgICAgY2xlYW51cAotICAgICAgICAgICAgcmV0dXJuIDEKLSAgICAgICAgZmkKLSAgICAgICAgS0VSTkNNRExJTkU9InJvb3Q9L2Rldi9uZnMgY29uc29sZT10dHlTMCBjb25zb2xlPXR0eSBuZnNyb290PSRORlNfU0VSVkVSOiRORlNfRElSLCRVTkZTX09QVFMgcncgJEtFUk5FTF9ORVRXT1JLX0NNRCBtZW09JFFFTVVfTUVNT1JZIgotICAgICAgICBRRU1VT1BUSU9OUz0iJFFFTVVfTkVUV09SS19DTUQgLWNwdSAkQ1BVX1NVQlRZUEUgLU0gJE1BQ0hJTkVfU1VCVFlQRSAtbm8tcmVib290ICRRRU1VX1VJX09QVElPTlMiCi0gICAgZmkKLX0KLQotY29uZmlnX3FlbXVzaDQoKSB7Ci0gICAgc2V0X21lbV9zaXplIDEwMjQKLSAgICBRRU1VPXFlbXUtc3lzdGVtLXNoNAotICAgIE1BQ0hJTkVfU1VCVFlQRT1yMmQKLSAgICBRRU1VX1VJX09QVElPTlM9IiRRRU1VX1VJX09QVElPTlMiCi0gICAgaWYgWyAiJHtGU1RZUEU6MDozfSIgPSAiZXh0IiAtbyAiJEZTVFlQRSIgPSAiYnRyZnMiIC1vICIkRlNUWVBFIiA9ICJ3aWMiIF07IHRoZW4KLSAgICAgICAgI0tFUk5DTURMSU5FPSJyb290PS9kZXYvaGRhIGNvbnNvbGU9dHR5UzAgY29uc29sZT10dHkwICRLRVJORUxfTkVUV09SS19DTUQgbWVtPSRRRU1VX01FTU9SWSIKLSAgICAgICAgS0VSTkNNRExJTkU9InJvb3Q9L2Rldi9oZGEgcncgY29uc29sZT10dHlTQzEgbm9pb3RyYXAgZWFybHlwcmludGs9c2gtc2NpLjEgY29uc29sZT10dHkgJEtFUk5FTF9ORVRXT1JLX0NNRCBtZW09JFFFTVVfTUVNT1JZIgotICAgICAgICBRRU1VT1BUSU9OUz0iJFFFTVVfTkVUV09SS19DTUQgLU0gJE1BQ0hJTkVfU1VCVFlQRSAtaGRhICRST09URlMgLW5vLXJlYm9vdCAkUUVNVV9VSV9PUFRJT05TIC1tb25pdG9yIG51bGwgLXNlcmlhbCB2YyAtc2VyaWFsIHN0ZGlvIgotICAgICAgICBTRVJJQUxTVERJTz0iMSIKLSAgICBmaQotICAgIGlmIFsgIiRGU1RZUEUiID0gIm5mcyIgXTsgdGhlbgotICAgICAgICBpZiBbICIkTkZTX1NFUlZFUiIgPSAiMTkyLjE2OC43LjEiIC1hICEgLWQgIiRORlNfRElSIiBdOyB0aGVuCi0gICAgICAgICAgICBlY2hvICJFcnJvcjogTkZTIG1vdW50IHBvaW50ICRST09URlMgZG9lc24ndCBleGlzdCIKLSAgICAgICAgICAgIGNsZWFudXAKLSAgICAgICAgICAgIHJldHVybiAxCi0gICAgICAgIGZpCi0gICAgICAgIEtFUk5DTURMSU5FPSJyb290PS9kZXYvbmZzIGNvbnNvbGU9dHR5U0MxIG5vaW90cmFwIGVhcmx5cHJpbnRrPXNoLXNjaS4xIGNvbnNvbGU9dHR5IG5mc3Jvb3Q9JE5GU19TRVJWRVI6JE5GU19ESVIsJFVORlNfT1BUUyBydyAkS0VSTkVMX05FVFdPUktfQ01EIG1lbT0kUUVNVV9NRU1PUlkiCi0gICAgICAgIFFFTVVPUFRJT05TPSIkUUVNVV9ORVRXT1JLX0NNRCAtTSAkTUFDSElORV9TVUJUWVBFIC1uby1yZWJvb3QgJFFFTVVfVUlfT1BUSU9OUyAtbW9uaXRvciBudWxsIC1zZXJpYWwgdmMgLXNlcmlhbCBzdGRpbyIKLSAgICAgICAgU0VSSUFMU1RESU89IjEiCi0gICAgZmkKLX0KLQotY29uZmlnX3FlbXV6eW5xKCkgewotICAgIHNldF9tZW1fc2l6ZSAxMDI0Ci0gICAgUUVNVT1xZW11LXN5c3RlbS1hcm0KLSAgICBRRU1VX1NZU1RFTV9PUFRJT05TPSIkUUVNVV9ORVRXT1JLX0NNRCAtTSB4aWxpbngtenlucS1hOSAtc2VyaWFsIG51bGwgLXNlcmlhbCBtb246c3RkaW8gLWR0YiAkS0VSTkVMLSRNQUNISU5FLmR0YiIKLSAgICAjIHp5bnEgc2VyaWFsIHBvcnRzIGFyZSBuYW1lZCAndHR5UFMwJyBhbmQgJ3R0eVBTMScsIGZpeHVwIHRoZSBkZWZhdWx0IHZhbHVlcwotICAgIFNDUklQVF9LRVJORUxfT1BUPSQoZWNobyAiJFNDUklQVF9LRVJORUxfT1BUIiB8IHNlZCAncy9jb25zb2xlPXR0eVMvY29uc29sZT10dHlQUy9nJykKLSAgICBpZiBbICIke0ZTVFlQRTowOjN9IiA9ICJleHQiIC1vICIke0ZTVFlQRTowOjR9IiA9ICJjcGlvIiBdOyB0aGVuCi0gICAgICAgIEtFUk5DTURMSU5FPSJlYXJseXByaW50ayByb290PS9kZXYvcmFtIHJ3ICRLRVJORUxfTkVUV09SS19DTUQgbWVtPSRRRU1VX01FTU9SWSIKLSAgICAgICAgUUVNVU9QVElPTlM9IiRRRU1VX1NZU1RFTV9PUFRJT05TIC1pbml0cmQgJFJPT1RGUyIKLSAgICBmaQotfQotCi1jb25maWdfcWVtdW1pY3JvYmxhemUoKSB7Ci0gICAgc2V0X21lbV9zaXplIDI1NgotICAgIFFFTVU9cWVtdS1zeXN0ZW0tbWljcm9ibGF6ZWVsCi0gICAgUUVNVV9TWVNURU1fT1BUSU9OUz0iJFFFTVVfTkVUV09SS19DTUQgLU0gcGV0YWxvZ2l4LW1sNjA1IC1zZXJpYWwgbW9uOnN0ZGlvIgotICAgIGlmIFsgIiR7RlNUWVBFOjA6M30iID0gImV4dCIgLW8gIiR7RlNUWVBFOjA6NH0iID0gImNwaW8iIF07IHRoZW4KLSAgICAgICAgS0VSTkNNRExJTkU9ImVhcmx5cHJpbnRrIHJvb3Q9L2Rldi9yYW0gcncgJEtFUk5FTF9ORVRXT1JLX0NNRCBtZW09JFFFTVVfTUVNT1JZIgotICAgICAgICBRRU1VT1BUSU9OUz0iJFFFTVVfU1lTVEVNX09QVElPTlMgLWluaXRyZCAkUk9PVEZTIgotICAgIGZpCi19Ci0KLWNhc2UgIiRNQUNISU5FIiBpbgotICAgICJxZW11YXJtIiB8ICJxZW11YXJtdjYiIHwgInFlbXVhcm12NyIpCi0gICAgICAgIGNvbmZpZ19xZW11YXJtCi0gICAgICAgIDs7Ci0gICAgInFlbXVhcm02NCIpCi0gICAgICAgIGNvbmZpZ19xZW11YXJtNjQKLSAgICAgICAgOzsKLSAgICAicWVtdXg4NiIpCi0gICAgICAgIGNvbmZpZ19xZW11eDg2Ci0gICAgICAgIDs7Ci0gICAgInFlbXV4ODYtNjQiKQotICAgICAgICBjb25maWdfcWVtdXg4Nl82NAotICAgICAgICA7OwotICAgICJxZW11bWlwcyIgfCAicWVtdW1pcHNlbCIgfCAicWVtdW1pcHM2NCIpCi0gICAgICAgIGNvbmZpZ19xZW11bWlwcwotICAgICAgICA7OwotICAgICJxZW11cHBjIikKLSAgICAgICAgY29uZmlnX3FlbXVwcGMKLSAgICAgICAgOzsKLSAgICAicWVtdXNoNCIpCi0gICAgICAgIGNvbmZpZ19xZW11c2g0Ci0gICAgICAgIDs7Ci0gICAgInFlbXV6eW5xIikKLSAgICAgICAgY29uZmlnX3FlbXV6eW5xCi0gICAgICAgIDs7Ci0gICAgInFlbXVtaWNyb2JsYXplIikKLSAgICAgICAgY29uZmlnX3FlbXVtaWNyb2JsYXplCi0gICAgICAgIDs7Ci0gICAgKikKLSAgICAgICAgZWNobyAiRXJyb3I6IFVuc3VwcG9ydGVkIG1hY2hpbmUgdHlwZSAkTUFDSElORSIKLSAgICAgICAgcmV0dXJuIDEKLSAgICA7OwotZXNhYwotCi0jIFdlIG5lZWQgdG8gc3BlY2lmeSAtbSA8bWVtX3NpemU+IHRvIG92ZXJjb21lIGEgYnVnIGluIHFlbXUgMC4xNC4wCi0jIGh0dHBzOi8vYnVncy5sYXVuY2hwYWQubmV0L3VidW50dS8rc291cmNlL3FlbXUta3ZtLytidWcvNTg0NDgwCi1pZiBbIC16ICIkbWVtX3NldCIgXSA7IHRoZW4KLSAgU0NSSVBUX1FFTVVfRVhUUkFfT1BUPSIkU0NSSVBUX1FFTVVfRVhUUkFfT1BUIC1tICRtZW1fc2l6ZSIKLWZpCi0KLWlmIFsgIiR7RlNUWVBFOjA6M30iID0gImV4dCIgXTsgdGhlbgotICAgIEtFUk5DTURMSU5FPSIkS0VSTkNNRExJTkUgcm9vdGZzdHlwZT0kRlNUWVBFIgotZmkKLQotaWYgWyAiJEZTVFlQRSIgPSAiY3Bpby5neiIgXTsgdGhlbgotICAgIFFFTVVPUFRJT05TPSItaW5pdHJkICRST09URlMgLW5vZ3JhcGhpYyIKLSAgICBLRVJOQ01ETElORT0icm9vdD0vZGV2L3JhbTAgY29uc29sZT10dHlTMCBkZWJ1Z3NoZWxsIgotZmkKLQotaWYgWyAiJEZTVFlQRSIgPSAiaXNvIiBdOyB0aGVuCi0gICAgUUVNVU9QVElPTlM9IiRRRU1VX05FVFdPUktfQ01EIC1jZHJvbSAkUk9PVEZTICRRRU1VX1VJX09QVElPTlMiCi1maQotCi1pZiBbICJ4JFFFTVVPUFRJT05TIiA9ICJ4IiBdOyB0aGVuCi0gICAgZWNobyAiRXJyb3I6IFVuYWJsZSB0byBzdXBwb3J0IHRoaXMgY29tYmluYXRpb24gb2Ygb3B0aW9ucyIKLSAgICBjbGVhbnVwCi0gICAgcmV0dXJuIDEKLWZpCi0KLWlmIFsgIiRUQ1BTRVJJQUxfUE9SVE5VTSIgIT0gIiIgXTsgdGhlbgotICAgIGlmIFsgIiRNQUNISU5FIiA9ICJxZW11YXJtNjQiIF07IHRoZW4KLSAgICAgICAgU0NSSVBUX1FFTVVfRVhUUkFfT1BUPSIkU0NSSVBUX1FFTVVfRVhUUkFfT1BUIC1kZXZpY2UgdmlydGlvLXNlcmlhbC1kZXZpY2UgLWNoYXJkZXYgc29ja2V0LGlkPXZpcnRjb24scG9ydD0kVENQU0VSSUFMX1BPUlROVU0saG9zdD0xMjcuMC4wLjEgLWRldmljZSB2aXJ0Y29uc29sZSxjaGFyZGV2PXZpcnRjb24iCi0gICAgZWxzZQotICAgICAgICBTQ1JJUFRfUUVNVV9FWFRSQV9PUFQ9IiRTQ1JJUFRfUUVNVV9FWFRSQV9PUFQgLXNlcmlhbCB0Y3A6MTI3LjAuMC4xOiRUQ1BTRVJJQUxfUE9SVE5VTSIKLSAgICBmaQotZmkKLQotUEFUSD0kT0VDT1JFX05BVElWRV9TWVNST09UL3Vzci9iaW46JFBBVEgKLQotUUVNVUJJTj1gd2hpY2ggJFFFTVUgMj4gL2Rldi9udWxsYAotaWYgWyAhIC14ICIkUUVNVUJJTiIgXTsgdGhlbgotICAgIGVjaG8gIkVycm9yOiBObyBRRU1VIGJpbmFyeSAnJFFFTVUnIGNvdWxkIGJlIGZvdW5kLiIKLSAgICBjbGVhbnVwCi0gICAgcmV0dXJuIDEKLWZpCi0KLU5FRURfR0w9YGxkZCAkUUVNVUJJTi8kUUVNVSAyPiYxIHwgZ3JlcCBsaWJHTFVgCi0jIFdlIGNhbid0IHJ1biB3aXRob3V0IGEgbGliR0wuc28KLWlmIFsgIiRORUVEX0dMIiAhPSAiIiBdOyB0aGVuCi0gICAgbGliZ2w9J25vJwotCi0gICAgWyAtZSAvdXNyL2xpYi9saWJHTC5zbyAtYSAtZSAvdXNyL2xpYi9saWJHTFUuc28gXSAmJiBsaWJnbD0neWVzJwotICAgIFsgLWUgL3Vzci9saWI2NC9saWJHTC5zbyAtYSAtZSAvdXNyL2xpYjY0L2xpYkdMVS5zbyBdICYmIGxpYmdsPSd5ZXMnCi0gICAgWyAtZSAvdXNyL2xpYi8qLWxpbnV4LWdudS9saWJHTC5zbyAtYSAtZSAvdXNyL2xpYi8qLWxpbnV4LWdudS9saWJHTFUuc28gXSAmJiBsaWJnbD0neWVzJwotCi0gICAgaWYgWyAiJGxpYmdsIiAhPSAneWVzJyBdOyB0aGVuCi0gICAgICAgIGVjaG8gIllvdSBuZWVkIGxpYkdMLnNvIGFuZCBsaWJHTFUuc28gdG8gZXhpc3QgaW4geW91ciBsaWJyYXJ5IHBhdGggdG8gcnVuIHRoZSBRRU1VIGVtdWxhdG9yLgotICAgICAgICBVYnVudHUgcGFja2FnZSBuYW1lcyBhcmU6IGxpYmdsMS1tZXNhLWRldiBhbmQgbGliZ2x1MS1tZXNhLWRldi4KLSAgICAgICAgRmVkb3JhIHBhY2thZ2UgbmFtZXMgYXJlOiBtZXNhLWxpYkdMLWRldmVsIG1lc2EtbGliR0xVLWRldmVsLiIKLSAgICAgICAgcmV0dXJuIDE7Ci0gICAgZmkKLWZpCi0KLWRvX3F1aXQoKSB7Ci0gICAgY2xlYW51cAotICAgIHJldHVybiAxCi19Ci0KLXRyYXAgZG9fcXVpdCBJTlQgVEVSTSBRVUlUCi0KLSMgcWVtdSBnb3Qgc2VnZmF1bHQgaWYgbGlua2VkIHdpdGggblZpZGlhJ3MgbGliZ2wKLUdMX0xEX1BSRUxPQUQ9JExEX1BSRUxPQUQKLQotaWYgbGRkICRRRU1VQklOIHwgZ3JlcCAtaSBudmlkaWEgJj4gL2Rldi9udWxsCi10aGVuCi1jYXQgPDwgRU9NCi1XQVJOSU5HOiBuVmlkaWEgcHJvcHJpZXRhcnkgT3BlbkdMIGxpYnJhcmllcyBkZXRlY3RlZC4KLW5WaWRpYSdzIE9wZW5HTCBsaWJyYXJpZXMgYXJlIGtub3duIHRvIGhhdmUgY29tcGF0aWJpbGl0eSBpc3N1ZXMgd2l0aCBxZW11LAotcmVzdWx0aW5nIGluIGEgc2VnZmF1bHQuIFBsZWFzZSB1bmluc3RhbGwgdGhlc2UgZHJpdmVycyBvciBlbnN1cmUgdGhlIG1lc2EgbGliR0wKLWxpYnJhcmllcyBwcmVjZWRlIG52aWRpYSdzIHZpYSBMRF9QUkVMT0FEKEFscmVhZHkgZG8gaXQgb24gVWJ1bnR1IDEwKS4KLUVPTQotCi0jIEF1dG9tYXRpY2FsbHkgdXNlIFVidW50dSBzeXN0ZW0ncyBtZXNhIGxpYkdMLCBvdGhlciBkaXN0cm8gY2FuIGFkZCBpdHMgb3duIHBhdGgKLWlmIGdyZXAgLWkgdWJ1bnR1IC9ldGMvbHNiLXJlbGVhc2UgJj4gL2Rldi9udWxsCi10aGVuCi0gICAgIyBwcmVjZWRlIG52aWRpYSdzIGRyaXZlciBvbiBVYnVudHUgMTAKLSAgICBVQlVOVFVfTUFJTl9WRVJTSU9OPWBjYXQgL2V0Yy9sc2ItcmVsZWFzZSB8Z3JlcCBESVNUUklCX1JFTEVBU0UgfGN1dCAtZD0gIC1mIDJ8IGN1dCAtZC4gLWYgMWAKLSAgICBpZiBbICIkVUJVTlRVX01BSU5fVkVSU0lPTiIgPSAiMTAiIF07Ci0gICAgdGhlbgotICAgICAgICBHTF9QQVRIPSIiCi0gICAgICAgIGlmIHRlc3QgLWUgL3Vzci9saWIvbGliR0wuc28KLSAgICAgICAgdGhlbiAKLSAgICAgICAgICAgIEdMX1BBVEg9Ii91c3IvbGliL2xpYkdMLnNvIgotICAgICAgICBlbGlmIHRlc3QgLWUgL3Vzci9saWIveDg2XzY0LWxpbnV4LWdudS9saWJHTC5zbwotICAgICAgICB0aGVuCi0gICAgICAgICAgICBHTF9QQVRIPSIvdXNyL2xpYi94ODZfNjQtbGludXgtZ251L2xpYkdMLnNvIgotICAgICAgICBmaQotCi0gICAgICAgIGVjaG8gIlNraXAgblZpZGlhJ3MgbGliR0wgb24gVWJ1bnR1IDEwISIKLSAgICAgICAgR0xfTERfUFJFTE9BRD0iJEdMX1BBVEggJExEX1BSRUxPQUQiCi0gICAgZmkKLWZpCi1maQotCi1pZiBbICJ4JFNFUklBTFNURElPIiA9ICJ4MSIgXTsgdGhlbgotICAgICAgICBlY2hvICJJbnRlcnJ1cHQgY2hhcmFjdGVyIGlzICdeXSciCi0gICAgICAgIHN0dHkgaW50ciBeXQotZmkKLQotCi0jIFByZXNlcnZlIHRoZSBtdWx0aXBsZXhpbmcgYmVoYXZpb3IgZm9yIHRoZSBtb25pdG9yIHRoYXQgd291bGQgYmUgdGhlcmUgYmFzZWQKLSMgb24gd2hldGhlciBub2dyYXBoaWMgaXMgdXNlZC4KLWlmIGVjaG8gIiRRRU1VT1BUSU9OUyAkU0VSSUFMT1BUUyAkU0NSSVBUX1FFTVVfT1BUICRTQ1JJUFRfUUVNVV9FWFRSQV9PUFQiIHwgZ3JlcCAtLSAiLW5vZ3JhcGhpYyI7IHRoZW4KLSAgICBGSVJTVF9TRVJJQUxfT1BUPSItc2VyaWFsIG1vbjpzdGRpbyIKLWVsc2UKLSAgICBGSVJTVF9TRVJJQUxfT1BUPSItc2VyaWFsIG1vbjp2YyIKLWZpCi0KLSMgcWVtdWFybTY0IHVzZXMgdmlydGlvIGZvciBhbnkgYWRkaXRpb25hbCBzZXJpYWwgcG9ydHMgc28gdGhlIG5vcm1hbCBtZWNoYW5pc20KLSMgb2YgdXNpbmcgLXNlcmlhbCB3aWxsIG5vdCB3b3JrCi1pZiBbICIkTUFDSElORSIgPSAicWVtdWFybTY0IiBdOyB0aGVuCi0gICAgU0VDT05EX1NFUklBTF9PUFQ9IiRTQ1JJUFRfUUVNVV9FWFRSQV9PUFQgLWRldmljZSB2aXJ0aW8tc2VyaWFsLWRldmljZSAtY2hhcmRldiBudWxsLGlkPXZpcnRjb24gLWRldmljZSB2aXJ0Y29uc29sZSxjaGFyZGV2PXZpcnRjb24iCi1lbHNlCi0gICAgU0VDT05EX1NFUklBTF9PUFQ9Ii1zZXJpYWwgbnVsbCIKLWZpCi0KLSMgV2UgYWx3YXlzIHdhbnQgYSB0dHlTMS4gU2luY2UgcWVtdSBieSBkZWZhdWx0IGFkZHMgYSBzZXJpYWwgcG9ydCB3aGVuCi0jIG5vZGVmYXVsdHMgaXMgbm90IHNwZWNpZmllZCwgaXQgc2VlbXMgdGhhdCBhbGwgdGhhdCB3b3VsZCBiZSBuZWVkZWQgaXMgdG8KLSMgbWFrZSBzdXJlIGEgIi1zZXJpYWwiIGlzIHRoZXJlLiBIb3dldmVyLCBpdCBhcHBlYXJzIHRoYXQgd2hlbiAiLXNlcmlhbCIgaXMKLSMgc3BlY2lmaWVkLCBpdCBpZ25vcmVzIHRoZSBkZWZhdWx0IHNlcmlhbCBwb3J0IHRoYXQgaXMgbm9ybWFsbHkgYWRkZWQuCi0jIFNvIGhlcmUgd2UgbWFrZSBzdXJlIHRvIGFkZCB0d28gLXNlcmlhbCBpZiB0aGVyZSBhcmUgbm9uZS4gQW5kIG9ubHkgb25lCi0jIGlmIHRoZXJlIGlzIG9uZSAtc2VyaWFsIGFscmVhZHkuCi1OVU1fU0VSSUFMX09QVFM9YGVjaG8gJFFFTVVPUFRJT05TICRTRVJJQUxPUFRTICRTQ1JJUFRfUUVNVV9PUFQgJFNDUklQVF9RRU1VX0VYVFJBX09QVCB8IHNlZCAtZSAncy8gL1xuL2cnIHwgZ3JlcCAtLWNvdW50IC0tIC1zZXJpYWxgCi0KLWlmIFsgIiROVU1fU0VSSUFMX09QVFMiID0gIjAiIF07IHRoZW4KLSAgICBTQ1JJUFRfUUVNVV9FWFRSQV9PUFQ9IiRTQ1JJUFRfUUVNVV9FWFRSQV9PUFQgJEZJUlNUX1NFUklBTF9PUFQgJFNFQ09ORF9TRVJJQUxfT1BUIgotZWxpZiBbICIkTlVNX1NFUklBTF9PUFRTIiA9ICIxIiBdOyB0aGVuCi0gICAgU0NSSVBUX1FFTVVfRVhUUkFfT1BUPSIkU0NSSVBUX1FFTVVfRVhUUkFfT1BUICRTRUNPTkRfU0VSSUFMX09QVCIKLWZpCi0KLWVjaG8gIlJ1bm5pbmcgJFFFTVUuLi4iCi0jIC1uby1yZWJvb3QgaXMgYSBtYW5kYXRvcnkgb3B0aW9uIC0gc2VlIGJ1ZyAjMTAwCi1pZiBbICIkSVNfVk0iID0gInRydWUiIF07IHRoZW4KLSAgICAjIENoZWNrIHJvb3Q9L2Rldi9zZFggb3Igcm9vdD0vZGV2L3ZkWAotICAgIFsgISAtZSAiJFZNIiBdICYmIGVycm9yICJWTSBpbWFnZSBpcyBub3QgZm91bmQhIgotICAgIGlmIGdyZXAgLXEgJ3Jvb3Q9L2Rldi9zZCcgJFZNOyB0aGVuCi0gICAgICAgIGVjaG8gIlVzaW5nIHNjc2kgZHJpdmUiCi0gICAgICAgIFZNX0RSSVZFPSItZHJpdmUgaWY9bm9uZSxpZD1oZCxmaWxlPSRWTSAtZGV2aWNlIHZpcnRpby1zY3NpLXBjaSxpZD1zY3NpIC1kZXZpY2Ugc2NzaS1oZCxkcml2ZT1oZCIKLSAgICBlbGlmIGdyZXAgLXEgJ3Jvb3Q9L2Rldi9oZCcgJFZNOyB0aGVuCi0gICAgICAgIGVjaG8gIlVzaW5nIGlkZSBkcml2ZSIKLSAgICAgICAgVk1fRFJJVkU9IiRWTSIKLSAgICBlbHNlCi0gICAgICAgIGVjaG8gIlVzaW5nIHZpcnRpbyBibG9jayBkcml2ZSIKLSAgICAgICAgVk1fRFJJVkU9Ii1kcml2ZSBpZj12aXJ0aW8sZmlsZT0kVk0iCi0gICAgZmkKLSAgICBRRU1VX0ZJUkU9IiRRRU1VQklOICRWTV9EUklWRSAkUUVNVU9QVElPTlMgJFNFUklBTE9QVFMgLW5vLXJlYm9vdCAkU0NSSVBUX1FFTVVfT1BUICRTQ1JJUFRfUUVNVV9FWFRSQV9PUFQiCi0gICAgZWNobyAkUUVNVV9GSVJFCi0gICAgTERfUFJFTE9BRD0iJEdMX0xEX1BSRUxPQUQiICRRRU1VX0ZJUkUKLWVsaWYgWyAiJEZTVFlQRSIgPSAiaXNvIiAtbyAiJEZTVFlQRSIgPSAid2ljIiBdOyB0aGVuCi0gICAgUUVNVV9GSVJFPSIkUUVNVUJJTiAkUUVNVU9QVElPTlMgJFNFUklBTE9QVFMgLW5vLXJlYm9vdCAkU0NSSVBUX1FFTVVfT1BUICRTQ1JJUFRfUUVNVV9FWFRSQV9PUFQiCi0gICAgZWNobyAkUUVNVV9GSVJFCi0gICAgTERfUFJFTE9BRD0iJEdMX0xEX1BSRUxPQUQiICRRRU1VX0ZJUkUKLWVsc2UKLSAgICBRRU1VX0ZJUkU9IiRRRU1VQklOIC1rZXJuZWwgJEtFUk5FTCAkUUVNVU9QVElPTlMgJFNMSVJQX0NNRCAkU0VSSUFMT1BUUyAtbm8tcmVib290ICRTQ1JJUFRfUUVNVV9PUFQgJFNDUklQVF9RRU1VX0VYVFJBX09QVCIKLSAgICBlY2hvICRRRU1VX0ZJUkUgLWFwcGVuZCAnIickS0VSTkNNRExJTkUgJFNDUklQVF9LRVJORUxfT1BUJyInCi0gICAgTERfUFJFTE9BRD0iJEdMX0xEX1BSRUxPQUQiICRRRU1VX0ZJUkUgLWFwcGVuZCAiJEtFUk5DTURMSU5FICRTQ1JJUFRfS0VSTkVMX09QVCIKLWZpCi1yZXQ9JD8KLWlmIFsgIiRTTElSUF9FTkFCTEVEIiAhPSAieWVzIiBdOyB0aGVuCi0gICAgICAgIGNsZWFudXAKLWZpCi0KLSNzZXQgdGhlIG9yaWdpbmFsIHN0dHkgdmFsdWVzIGJlZm9yZSBleGl0Ci1zdHR5ICR7T1JJR19TVFRZfQotdHJhcCAtIElOVCBURVJNIFFVSVQKLQotcmV0dXJuICRyZXQKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9zY3JpcHRzL3NlbmQtZXJyb3ItcmVwb3J0IGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L3NjcmlwdHMvc2VuZC1lcnJvci1yZXBvcnQKaW5kZXggYTI5ZmVmZi4uMTViNWU4NCAxMDA3NTUKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L3NjcmlwdHMvc2VuZC1lcnJvci1yZXBvcnQKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L3NjcmlwdHMvc2VuZC1lcnJvci1yZXBvcnQKQEAgLTEsNCArMSw0IEBACi0jIS91c3IvYmluL2VudiBweXRob24KKyMhL3Vzci9iaW4vZW52IHB5dGhvbjMKIAogIyBTZW5kcyBhbiBlcnJvciByZXBvcnQgKGlmIHRoZSByZXBvcnQtZXJyb3IgY2xhc3Mgd2FzIGVuYWJsZWQpIHRvIGEKICMgcmVtb3RlIHNlcnZlci4KQEAgLTcsNyArNyw3IEBACiAjIEF1dGhvcjogQW5kcmVlYSBQcm9jYSA8YW5kcmVlYS5iLnByb2NhQGludGVsLmNvbT4KICMgQXV0aG9yOiBNaWNoYWVsIFdvb2QgPG1pY2hhZWwuZy53b29kQGludGVsLmNvbT4KIAotaW1wb3J0IHVybGxpYjIKK2ltcG9ydCB1cmxsaWIucmVxdWVzdCwgdXJsbGliLmVycm9yCiBpbXBvcnQgc3lzCiBpbXBvcnQganNvbgogaW1wb3J0IG9zCkBAIC0yNSwxMCArMjUsMTAgQEAKIGxvZ2dpbmcuYmFzaWNDb25maWcoZm9ybWF0PSclKGxldmVsbmFtZSlzOiAlKG1lc3NhZ2UpcycpCiAKIGRlZiBnZXRQYXlsb2FkTGltaXQodXJsKToKLSAgICByZXEgPSB1cmxsaWIyLlJlcXVlc3QodXJsLCBOb25lKQorICAgIHJlcSA9IHVybGxpYi5yZXF1ZXN0LlJlcXVlc3QodXJsLCBOb25lKQogICAgIHRyeToKLSAgICAgICAgcmVzcG9uc2UgPSB1cmxsaWIyLnVybG9wZW4ocmVxKQotICAgIGV4Y2VwdCB1cmxsaWIyLlVSTEVycm9yIGFzIGU6CisgICAgICAgIHJlc3BvbnNlID0gdXJsbGliLnJlcXVlc3QudXJsb3BlbihyZXEpCisgICAgZXhjZXB0IHVybGxpYi5lcnJvci5VUkxFcnJvciBhcyBlOgogICAgICAgICAjIFVzZSB0aGlzIG9wcG9ydHVuaXR5IHRvIGJhaWwgb3V0IGlmIHdlIGNhbid0IGV2ZW4gY29udGFjdCB0aGUgc2VydmVyCiAgICAgICAgIGxvZy5lcnJvcigiQ291bGQgbm90IGNvbnRhY3Qgc2VydmVyOiAiICsgdXJsKQogICAgICAgICBsb2cuZXJyb3IoZS5yZWFzb24pCkBAIC00NCwxMiArNDQsMTIgQEAKIAogZGVmIGFza19mb3JfY29udGFjdGRldGFpbHMoKToKICAgICBwcmludCgiUGxlYXNlIGVudGVyIHlvdXIgbmFtZSBhbmQgeW91ciBlbWFpbCAob3B0aW9uYWxseSksIHRoZXknbGwgYmUgc2F2ZWQgaW4gdGhlIGZpbGUgeW91IHNlbmQuIikKLSAgICB1c2VybmFtZSA9IHJhd19pbnB1dCgiTmFtZSAocmVxdWlyZWQpOiAiKQotICAgIGVtYWlsID0gcmF3X2lucHV0KCJFLW1haWwgKG5vdCByZXF1aXJlZCk6ICIpCisgICAgdXNlcm5hbWUgPSBpbnB1dCgiTmFtZSAocmVxdWlyZWQpOiAiKQorICAgIGVtYWlsID0gaW5wdXQoIkUtbWFpbCAobm90IHJlcXVpcmVkKTogIikKICAgICByZXR1cm4gdXNlcm5hbWUsIGVtYWlsCiAKIGRlZiBlZGl0X2NvbnRlbnQoanNvbl9maWxlX3BhdGgpOgotICAgIGVkaXQgPSByYXdfaW5wdXQoIlJldmlldyBpbmZvcm1hdGlvbiBiZWZvcmUgc2VuZGluZz8gKHkvbik6ICIpCisgICAgZWRpdCA9IGlucHV0KCJSZXZpZXcgaW5mb3JtYXRpb24gYmVmb3JlIHNlbmRpbmc/ICh5L24pOiAiKQogICAgIGlmICd5JyBpbiBlZGl0IG9yICdZJyBpbiBlZGl0OgogICAgICAgICBlZGl0b3IgPSBvcy5lbnZpcm9uLmdldCgnRURJVE9SJywgTm9uZSkKICAgICAgICAgaWYgZWRpdG9yOgpAQCAtMTA4LDcgKzEwOCw3IEBACiAgICAgICAgIGlmIG1heF9sb2dfc2l6ZSAhPSAwOgogICAgICAgICAgICAgZm9yIGZhaWwgaW4ganNvbmRhdGFbJ2ZhaWx1cmVzJ106CiAgICAgICAgICAgICAgICAgaWYgbGVuKGZhaWxbJ2xvZyddKSA+IG1heF9sb2dfc2l6ZToKLSAgICAgICAgICAgICAgICAgICAgcHJpbnQgIlRydW5jYXRpbmcgbG9nIHRvIGFsbG93IGZvciB1cGxvYWQiCisgICAgICAgICAgICAgICAgICAgIHByaW50KCJUcnVuY2F0aW5nIGxvZyB0byBhbGxvdyBmb3IgdXBsb2FkIikKICAgICAgICAgICAgICAgICAgICAgZmFpbFsnbG9nJ10gPSBmYWlsWydsb2cnXVstbWF4X2xvZ19zaXplOl0KIAogICAgICAgICBkYXRhID0ganNvbi5kdW1wcyhqc29uZGF0YSwgaW5kZW50PTQsIHNvcnRfa2V5cz1UcnVlKQpAQCAtMTI1LDcgKzEyNSw3IEBACiAgICAgICAgIHdpdGggb3BlbihhcmdzLmVycm9yX2ZpbGUsICdyJykgYXMganNvbl9mcDoKICAgICAgICAgICAgIGRhdGEgPSBqc29uX2ZwLnJlYWQoKQogCi0gICAgcmV0dXJuIGRhdGEKKyAgICByZXR1cm4gZGF0YS5lbmNvZGUoJ3V0Zi04JykKIAogCiBkZWYgc2VuZF9kYXRhKGRhdGEsIGFyZ3MpOgpAQCAtMTM2LDE0ICsxMzYsMTQgQEAKICAgICBlbHNlOgogICAgICAgICB1cmwgPSAiaHR0cDovLyIrYXJncy5zZXJ2ZXIrIi9DbGllbnRQb3N0LyIKIAotICAgIHJlcSA9IHVybGxpYjIuUmVxdWVzdCh1cmwsIGRhdGE9ZGF0YSwgaGVhZGVycz1oZWFkZXJzKQorICAgIHJlcSA9IHVybGxpYi5yZXF1ZXN0LlJlcXVlc3QodXJsLCBkYXRhPWRhdGEsIGhlYWRlcnM9aGVhZGVycykKICAgICB0cnk6Ci0gICAgICAgIHJlc3BvbnNlID0gdXJsbGliMi51cmxvcGVuKHJlcSkKLSAgICBleGNlcHQgdXJsbGliMi5IVFRQRXJyb3IsIGU6CisgICAgICAgIHJlc3BvbnNlID0gdXJsbGliLnJlcXVlc3QudXJsb3BlbihyZXEpCisgICAgZXhjZXB0IHVybGxpYi5lcnJvci5IVFRQRXJyb3IgYXMgZToKICAgICAgICAgbG9nZ2luZy5lcnJvcihlLnJlYXNvbikKICAgICAgICAgc3lzLmV4aXQoMSkKIAotICAgIHByaW50IHJlc3BvbnNlLnJlYWQoKQorICAgIHByaW50KHJlc3BvbnNlLnJlYWQoKSkKIAogCiBpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgpAQCAtMTkyLDcgKzE5Miw3IEBACiAgICAgYXJncyA9IGFyZ19wYXJzZS5wYXJzZV9hcmdzKCkKIAogICAgIGlmIChhcmdzLmpzb24gPT0gRmFsc2UpOgotICAgICAgICBwcmludCAiUHJlcGFyaW5nIHRvIHNlbmQgZXJyb3JzIHRvOiAiK2FyZ3Muc2VydmVyCisgICAgICAgIHByaW50KCJQcmVwYXJpbmcgdG8gc2VuZCBlcnJvcnMgdG86ICIrYXJncy5zZXJ2ZXIpCiAKICAgICBkYXRhID0gcHJlcGFyZV9kYXRhKGFyZ3MpCiAgICAgc2VuZF9kYXRhKGRhdGEsIGFyZ3MpCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvc2NyaXB0cy9zd2FiYmVyLXN0cmFjZS1hdHRhY2ggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvc2NyaXB0cy9zd2FiYmVyLXN0cmFjZS1hdHRhY2gKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IGJiMDM5MWEuLjAwMDAwMDAKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L3NjcmlwdHMvc3dhYmJlci1zdHJhY2UtYXR0YWNoCisrKyAvZGV2L251bGwKQEAgLTEsMzEgKzAsMCBAQAotIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCi1pbXBvcnQgb3MKLWltcG9ydCBzeXMKLWltcG9ydCBzdWJwcm9jZXNzCi0KLSMgRGV0YWNoIGZyb20gdGhlIGNvbnRyb2xsaW5nIHRlcm1pbmFsIGFuZCBwYXJlbnQgcHJvY2VzcyBieSBmb3JraW5nIHR3aWNlIHRvIGRhZW1vbml6ZSBvdXJzZWx2ZXMsCi0jIHRoZW4gcnVuIHRoZSBjb21tYW5kIHBhc3NlZCBhcyBhcmd2WzFdLiBTZW5kIGxvZyBkYXRhIHRvIGFyZ3ZbMl0uCi0KLXBpZCA9IG9zLmZvcmsoKQotaWYgKHBpZCA9PSAwKToKLSAgICBvcy5zZXRzaWQoKQotICAgIHBpZCA9IG9zLmZvcmsoKQotICAgIGlmIChwaWQgIT0gMCk6Ci0gICAgICAgIG9zLl9leGl0KDApCi1lbHNlOgotICAgIHN5cy5leGl0KCkKLQotCi1zaSA9IGZpbGUob3MuZGV2bnVsbCwgJ3InKQotc28gPSBmaWxlKHN5cy5hcmd2WzJdLCAndycpCi1zZSA9IHNvCi0KLSMgUmVwbGFjZSB0aG9zZSBmZHMgd2l0aCBvdXIgb3duCi1vcy5kdXAyKHNpLmZpbGVubygpLCBzeXMuc3RkaW4uZmlsZW5vKCkpCi1vcy5kdXAyKHNvLmZpbGVubygpLCBzeXMuc3Rkb3V0LmZpbGVubygpKQotb3MuZHVwMihzZS5maWxlbm8oKSwgc3lzLnN0ZGVyci5maWxlbm8oKSkKLQotcmV0ID0gc3VicHJvY2Vzcy5jYWxsKHN5cy5hcmd2WzFdLCBzaGVsbD1UcnVlKQotCi1vcy5fZXhpdChyZXQpCi0KZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9zY3JpcHRzL3N5c3Jvb3QtcmVsYXRpdmVsaW5rcy5weSBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9zY3JpcHRzL3N5c3Jvb3QtcmVsYXRpdmVsaW5rcy5weQppbmRleCBhYzI2MzY3Li5lNDRlYmEyIDEwMDc1NQotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvc2NyaXB0cy9zeXNyb290LXJlbGF0aXZlbGlua3MucHkKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L3NjcmlwdHMvc3lzcm9vdC1yZWxhdGl2ZWxpbmtzLnB5CkBAIC0xLDQgKzEsNCBAQAotIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCisjIS91c3IvYmluL2VudiBweXRob24zCiBpbXBvcnQgc3lzCiBpbXBvcnQgb3MKIApkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L3NjcmlwdHMvdGVzdC1kZXBlbmRlbmNpZXMuc2ggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvc2NyaXB0cy90ZXN0LWRlcGVuZGVuY2llcy5zaAppbmRleCAwMTcwOTQ3Li4wMGM1MGUwIDEwMDc1NQotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvc2NyaXB0cy90ZXN0LWRlcGVuZGVuY2llcy5zaAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvc2NyaXB0cy90ZXN0LWRlcGVuZGVuY2llcy5zaApAQCAtMTQxLDcgKzE0MSw3IEBACiAgIGJpdGJha2UgLWsgJHRhcmdldHMgMj4mMSB8IHRlZSAtYSAke09VVFBVVDF9L2NvbXBsZXRlLmxvZwogICBSRVNVTFQrPSR7UElQRVNUQVRVU1swXX0KICAgZ3JlcCAiRVJST1I6IFRhc2suKmZhaWxlZCIgJHtPVVRQVVQxfS9jb21wbGV0ZS5sb2cgPiAke09VVFBVVDF9L2ZhaWxlZC10YXNrcy5sb2cKLSAgY2F0ICR7T1VUUFVUMX0vZmFpbGVkLXRhc2tzLmxvZyB8IHNlZCAnc0AuKi9AQGc7IHNAXy4qQEBnOyBzQFwuYmIsIC4qQEBnJyB8IHNvcnQgLXUgPiAke09VVFBVVDF9L2ZhaWxlZC1yZWNpcGVzLmxvZworICBjYXQgJHtPVVRQVVQxfS9mYWlsZWQtdGFza3MubG9nIHwgc2VkICdzQC4qL0BAZzsgc0BfLipAQGc7IHNAXC5iYiwgLipAQGc7IHNAXC5iYjsuKkBAZycgfCBzb3J0IC11ID4gJHtPVVRQVVQxfS9mYWlsZWQtcmVjaXBlcy5sb2cKIH0KIAogYnVpbGRfZXZlcnlfcmVjaXBlKCkgewpAQCAtMTc4LDcgKzE3OCw3IEBACiAgICAgICBSRVNVTFQrPSR7UkVDSVBFX1JFU1VMVH0KICAgICAgIG12ICR7T1VUUFVUQn0vJHtyZWNpcGV9LmxvZyAke09VVFBVVEJ9L2ZhaWxlZC8KICAgICAgIGdyZXAgIkVSUk9SOiBUYXNrLipmYWlsZWQiICAke09VVFBVVEJ9L2ZhaWxlZC8ke3JlY2lwZX0ubG9nIHwgdGVlIC1hICR7T1VUUFVUQn0vZmFpbGVkLXRhc2tzLmxvZwotICAgICAgZ3JlcCAiRVJST1I6IFRhc2suKmZhaWxlZCIgICR7T1VUUFVUQn0vZmFpbGVkLyR7cmVjaXBlfS5sb2cgfCBzZWQgJ3NALiovQEBnOyBzQF8uKkBAZzsgc0BcLmJiLCAuKkBAZycgPj4gJHtPVVRQVVRCfS9mYWlsZWQtcmVjaXBlcy5sb2cKKyAgICAgIGdyZXAgIkVSUk9SOiBUYXNrLipmYWlsZWQiICAke09VVFBVVEJ9L2ZhaWxlZC8ke3JlY2lwZX0ubG9nIHwgc2VkICdzQC4qL0BAZzsgc0BfLipAQGc7IHNAXC5iYiwgLipAQGc7IHNAXC5iYjsuKkBAZycgPj4gJHtPVVRQVVRCfS9mYWlsZWQtcmVjaXBlcy5sb2cKICAgICAgICMgYW5kIGFwcGVuZCBhbHNvICR7cmVjaXBlfSBpbiBjYXNlIHRoZSBmYWlsZWQgdGFzayB3YXMgZnJvbSBzb21lIGRlcGVuZGVuY3kKICAgICAgIGVjaG8gJHtyZWNpcGV9ID4+ICR7T1VUUFVUQn0vZmFpbGVkLXJlY2lwZXMubG9nCiAgICAgZWxzZQpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L3NjcmlwdHMvdGVzdC1yZW1vdGUtaW1hZ2UgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvc2NyaXB0cy90ZXN0LXJlbW90ZS1pbWFnZQppbmRleCA5YzViMDE1Li4yN2IxY2FlIDEwMDc1NQotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvc2NyaXB0cy90ZXN0LXJlbW90ZS1pbWFnZQorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvc2NyaXB0cy90ZXN0LXJlbW90ZS1pbWFnZQpAQCAtMSw0ICsxLDQgQEAKLSMhL3Vzci9iaW4vZW52IHB5dGhvbgorIyEvdXNyL2Jpbi9lbnYgcHl0aG9uMwogCiAjIENvcHlyaWdodCAoYykgMjAxNCBJbnRlbCBDb3Jwb3JhdGlvbgogIwpAQCAtOTIsMTMgKzkyLDExIEBACiAgICAgcGFyc2VyLmFkZF9hcmd1bWVudCgnLS1za2lwLWRvd25sb2FkJywgcmVxdWlyZWQ9RmFsc2UsIGFjdGlvbj0ic3RvcmVfdHJ1ZSIsIGRlc3Q9InNraXBfZG93bmxvYWQiLCBkZWZhdWx0PUZhbHNlLCBoZWxwPSdTa2lwIGRvd25sb2FkaW5nIHRoZSBpbWFnZXMgY29tcGxldGVseS4gVGhpcyBuZWVkcyB0aGUgY29ycmVjdCBmaWxlcyB0byBiZSBwcmVzZW50IGluIHRoZSBkaXJlY3Rvcnkgc3BlY2lmaWVkIGJ5IHRoZSB0YXJnZXQgcHJvZmlsZS4nKQogICAgIHJldHVybiBwYXJzZXIKIAotY2xhc3MgQmFzZVRhcmdldFByb2ZpbGUob2JqZWN0KToKK2NsYXNzIEJhc2VUYXJnZXRQcm9maWxlKG9iamVjdCwgbWV0YWNsYXNzPUFCQ01ldGEpOgogICAgICIiIgogICAgIFRoaXMgY2xhc3MgZGVmaW5lcyB0aGUgbWV0YSBwcm9maWxlIGZvciBhIHNwZWNpZmljIHRhcmdldCAoTUFDSElORSB0eXBlICsgaW1hZ2UgdHlwZSkuCiAgICAgIiIiCiAKLSAgICBfX21ldGFjbGFzc19fID0gQUJDTWV0YQotCiAgICAgZGVmIF9faW5pdF9fKHNlbGYsIGltYWdlX3R5cGUpOgogICAgICAgICBzZWxmLmltYWdlX3R5cGUgPSBpbWFnZV90eXBlCiAKQEAgLTE5MSwxMyArMTg5LDExIEBACiAgICAgICAgIHJldHVybiBjb250cm9sbGVyLmdldF9leHRyYV9maWxlcygpCiAKIAotY2xhc3MgQmFzZVJlcG9Qcm9maWxlKG9iamVjdCk6CitjbGFzcyBCYXNlUmVwb1Byb2ZpbGUob2JqZWN0LCBtZXRhY2xhc3M9QUJDTWV0YSk6CiAgICAgIiIiCiAgICAgVGhpcyBjbGFzcyBkZWZpbmVzIHRoZSBtZXRhIHByb2ZpbGUgZm9yIGFuIGltYWdlcyByZXBvc2l0b3J5LgogICAgICIiIgogCi0gICAgX19tZXRhY2xhc3NfXyA9IEFCQ01ldGEKLQogICAgIGRlZiBfX2luaXRfXyhzZWxmLCByZXBvbGluaywgbG9jYWxkaXIpOgogICAgICAgICBzZWxmLmxvY2FsZGlyID0gbG9jYWxkaXIKICAgICAgICAgc2VsZi5yZXBvbGluayA9IHJlcG9saW5rCkBAIC0yODksNyArMjg1LDcgQEAKICAgICAgICAgcmVzdWx0ID0gYml0YmFrZSgiJXMgLWMgdGVzdGltYWdlIiAlIGltYWdlX3R5cGUsIGlnbm9yZV9zdGF0dXM9VHJ1ZSwgcG9zdGNvbmZpZz1wb3N0Y29uZmlnKQogICAgICAgICB0ZXN0aW1hZ2VfcmVzdWx0cyA9IGZ0b29scy5yZWFkX2ZpbGUob3MucGF0aC5qb2luKGdldF9iYl92YXIoIlQiLCBpbWFnZV90eXBlKSwgImxvZy5kb190ZXN0aW1hZ2UiKSkKICAgICAgICAgbG9nLmluZm8oJ1J1bnRpbWUgdGVzdHMgcmVzdWx0cyBmb3IgJXM6JyAlIGltYWdlX3R5cGUpCi0gICAgICAgIHByaW50IHRlc3RpbWFnZV9yZXN1bHRzCisgICAgICAgIHByaW50KHRlc3RpbWFnZV9yZXN1bHRzKQogICAgICAgICByZXR1cm4gcmVzdWx0CiAKICAgICAjIFN0YXJ0IHRoZSBwcm9jZWR1cmUhCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvc2NyaXB0cy90aW55L2RpcnNpemUucHkgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvc2NyaXB0cy90aW55L2RpcnNpemUucHkKaW5kZXggNDBmZjRhYi4uZGRjY2M1YSAxMDA3NTUKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L3NjcmlwdHMvdGlueS9kaXJzaXplLnB5CisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9zY3JpcHRzL3RpbnkvZGlyc2l6ZS5weQpAQCAtMSw0ICsxLDQgQEAKLSMhL3Vzci9iaW4vZW52IHB5dGhvbgorIyEvdXNyL2Jpbi9lbnYgcHl0aG9uMwogIwogIyBDb3B5cmlnaHQgKGMpIDIwMTEsIEludGVsIENvcnBvcmF0aW9uLgogIyBBbGwgcmlnaHRzIHJlc2VydmVkLgpAQCAtNTIsMjYgKzUyLDIyIEBACiAgICAgICAgIHNlbGYuc2l6ZSA9IDAKICAgICAgICAgc2VsZi5yZWNvcmRzID0gW10KIAotICAgIGRlZiBfX2NtcF9fKHRoaXMsIHRoYXQpOgorICAgIGRlZiBfX2x0X18odGhpcywgdGhhdCk6CiAgICAgICAgIGlmIHRoYXQgaXMgTm9uZToKLSAgICAgICAgICAgIHJldHVybiAxCisgICAgICAgICAgICByZXR1cm4gRmFsc2UKICAgICAgICAgaWYgbm90IGlzaW5zdGFuY2UodGhhdCwgUmVjb3JkKToKICAgICAgICAgICAgIHJhaXNlIFR5cGVFcnJvcgogICAgICAgICBpZiBsZW4odGhpcy5yZWNvcmRzKSA+IDAgYW5kIGxlbih0aGF0LnJlY29yZHMpID09IDA6Ci0gICAgICAgICAgICByZXR1cm4gLTEKLSAgICAgICAgaWYgbGVuKHRoaXMucmVjb3JkcykgPT0gMCBhbmQgbGVuKHRoYXQucmVjb3JkcykgPiAwOgotICAgICAgICAgICAgcmV0dXJuIDEKLSAgICAgICAgaWYgdGhpcy5zaXplIDwgdGhhdC5zaXplOgotICAgICAgICAgICAgcmV0dXJuIC0xCisgICAgICAgICAgICByZXR1cm4gRmFsc2UKICAgICAgICAgaWYgdGhpcy5zaXplID4gdGhhdC5zaXplOgotICAgICAgICAgICAgcmV0dXJuIDEKLSAgICAgICAgcmV0dXJuIDAKKyAgICAgICAgICAgIHJldHVybiBGYWxzZQorICAgICAgICByZXR1cm4gVHJ1ZQogCiAgICAgZGVmIHNob3coc2VsZiwgbWluc2l6ZSk6CiAgICAgICAgIHRvdGFsID0gMAogICAgICAgICBpZiBzZWxmLnNpemUgPD0gbWluc2l6ZToKICAgICAgICAgICAgIHJldHVybiAwCi0gICAgICAgIHByaW50ICIlMTBkICVzIiAlIChzZWxmLnNpemUsIHNlbGYucGF0aCkKKyAgICAgICAgcHJpbnQoIiUxMGQgJXMiICUgKHNlbGYuc2l6ZSwgc2VsZi5wYXRoKSkKICAgICAgICAgZm9yIHIgaW4gc2VsZi5yZWNvcmRzOgogICAgICAgICAgICAgdG90YWwgKz0gci5zaG93KG1pbnNpemUpCiAgICAgICAgIGlmIGxlbihzZWxmLnJlY29yZHMpID09IDA6CkBAIC04NSw4ICs4MSw4IEBACiAgICAgICAgIG1pbnNpemUgPSBpbnQoc3lzLmFyZ3ZbMV0pCiAgICAgcm9vdGZzID0gUmVjb3JkLmNyZWF0ZSgiLiIpCiAgICAgdG90YWwgPSByb290ZnMuc2hvdyhtaW5zaXplKQotICAgIHByaW50ICJEaXNwbGF5ZWQgJWQvJWQgYnl0ZXMgKCUuMmYlJSkiICUgXAotICAgICAgICAgICh0b3RhbCwgcm9vdGZzLnNpemUsIDEwMCAqIGZsb2F0KHRvdGFsKSAvIHJvb3Rmcy5zaXplKQorICAgIHByaW50KCJEaXNwbGF5ZWQgJWQvJWQgYnl0ZXMgKCUuMmYlJSkiICUgXAorICAgICAgICAgICh0b3RhbCwgcm9vdGZzLnNpemUsIDEwMCAqIGZsb2F0KHRvdGFsKSAvIHJvb3Rmcy5zaXplKSkKIAogCiBpZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L3NjcmlwdHMvdGlueS9rc2l6ZS5weSBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9zY3JpcHRzL3Rpbnkva3NpemUucHkKaW5kZXggNDAwNmYyZi4uYjlkMmIxOSAxMDA3NTUKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L3NjcmlwdHMvdGlueS9rc2l6ZS5weQorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvc2NyaXB0cy90aW55L2tzaXplLnB5CkBAIC0xLDQgKzEsNCBAQAotIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCisjIS91c3IvYmluL2VudiBweXRob24zCiAjCiAjIENvcHlyaWdodCAoYykgMjAxMSwgSW50ZWwgQ29ycG9yYXRpb24uCiAjIEFsbCByaWdodHMgcmVzZXJ2ZWQuCkBAIC0yOCwxNiArMjgsMTQgQEAKIGltcG9ydCBnZXRvcHQKIGltcG9ydCBvcwogZnJvbSBzdWJwcm9jZXNzIGltcG9ydCAqCi1mcm9tIHN0cmluZyBpbXBvcnQgam9pbgotCiAKIGRlZiB1c2FnZSgpOgogICAgIHByb2cgPSBvcy5wYXRoLmJhc2VuYW1lKHN5cy5hcmd2WzBdKQotICAgIHByaW50ICdVc2FnZTogJXMgW09QVElPTl0uLi4nICUgKHByb2cpCi0gICAgcHJpbnQgJyAgLWQsICAgICAgICAgICAgICAgICBkaXNwbGF5IGFuIGFkZGl0aW9uYWwgbGV2ZWwgb2YgZHJpdmVycyBkZXRhaWwnCi0gICAgcHJpbnQgJyAgLWgsIC0taGVscCAgICAgICAgICBkaXNwbGF5IHRoaXMgaGVscCBhbmQgZXhpdCcKLSAgICBwcmludCAnJwotICAgIHByaW50ICdSdW4gJXMgZnJvbSB0aGUgdG9wLWxldmVsIExpbnV4IGtlcm5lbCBidWlsZCBkaXJlY3RvcnkuJyAlIChwcm9nKQorICAgIHByaW50KCdVc2FnZTogJXMgW09QVElPTl0uLi4nICUgcHJvZykKKyAgICBwcmludCgnICAtZCwgICAgICAgICAgICAgICAgIGRpc3BsYXkgYW4gYWRkaXRpb25hbCBsZXZlbCBvZiBkcml2ZXJzIGRldGFpbCcpCisgICAgcHJpbnQoJyAgLWgsIC0taGVscCAgICAgICAgICBkaXNwbGF5IHRoaXMgaGVscCBhbmQgZXhpdCcpCisgICAgcHJpbnQoJycpCisgICAgcHJpbnQoJ1J1biAlcyBmcm9tIHRoZSB0b3AtbGV2ZWwgTGludXgga2VybmVsIGJ1aWxkIGRpcmVjdG9yeS4nICUgcHJvZykKIAogCiBjbGFzcyBTaXplczoKQEAgLTU1LDggKzUzLDggQEAKICAgICAgICAgICAgIHNlbGYudGV4dCA9IHNlbGYuZGF0YSA9IHNlbGYuYnNzID0gc2VsZi50b3RhbCA9IDAKIAogICAgIGRlZiBzaG93KHNlbGYsIGluZGVudD0iIik6Ci0gICAgICAgIHByaW50ICIlLTMycyAlMTBkIHwgJTEwZCAlMTBkICUxMGQiICUgXAotICAgICAgICAgICAgICAoaW5kZW50K3NlbGYudGl0bGUsIHNlbGYudG90YWwsIHNlbGYudGV4dCwgc2VsZi5kYXRhLCBzZWxmLmJzcykKKyAgICAgICAgcHJpbnQoIiUtMzJzICUxMGQgfCAlMTBkICUxMGQgJTEwZCIgJSBcCisgICAgICAgICAgICAgIChpbmRlbnQrc2VsZi50aXRsZSwgc2VsZi50b3RhbCwgc2VsZi50ZXh0LCBzZWxmLmRhdGEsIHNlbGYuYnNzKSkKIAogCiBjbGFzcyBSZXBvcnQ6CkBAIC02Niw3ICs2NCw3IEBACiAKICAgICAgICAgcCA9IFBvcGVuKCJscyAiICsgcGF0aCArICIvKi5vIHwgZ3JlcCAtdiBidWlsdC1pbi5vIiwKICAgICAgICAgICAgICAgICAgIHNoZWxsPVRydWUsIHN0ZG91dD1QSVBFLCBzdGRlcnI9UElQRSkKLSAgICAgICAgZ2xvYiA9IGpvaW4ocC5jb21tdW5pY2F0ZSgpWzBdLnNwbGl0bGluZXMoKSkKKyAgICAgICAgZ2xvYiA9ICcgJy5qb2luKHAuY29tbXVuaWNhdGUoKVswXS5zcGxpdGxpbmVzKCkpCiAgICAgICAgIG9yZXBvcnQgPSBSZXBvcnQoZ2xvYiwgcGF0aCArICIvKi5vIikKICAgICAgICAgb3JlcG9ydC5zaXplcy50aXRsZSA9IHBhdGggKyAiLyoubyIKICAgICAgICAgci5wYXJ0cy5hcHBlbmQob3JlcG9ydCkKQEAgLTEwMSwyMiArOTksMjIgQEAKIAogICAgIGRlZiBzaG93KHNlbGYsIGluZGVudD0iIik6CiAgICAgICAgIHJ1bGUgPSBzdHIubGp1c3QoaW5kZW50LCA4MCwgJy0nKQotICAgICAgICBwcmludCAiJS0zMnMgJTEwcyB8ICUxMHMgJTEwcyAlMTBzIiAlIFwKLSAgICAgICAgICAgICAgKGluZGVudCtzZWxmLnRpdGxlLCAidG90YWwiLCAidGV4dCIsICJkYXRhIiwgImJzcyIpCi0gICAgICAgIHByaW50IHJ1bGUKKyAgICAgICAgcHJpbnQoIiUtMzJzICUxMHMgfCAlMTBzICUxMHMgJTEwcyIgJSBcCisgICAgICAgICAgICAgIChpbmRlbnQrc2VsZi50aXRsZSwgInRvdGFsIiwgInRleHQiLCAiZGF0YSIsICJic3MiKSkKKyAgICAgICAgcHJpbnQocnVsZSkKICAgICAgICAgc2VsZi5zaXplcy5zaG93KGluZGVudCkKLSAgICAgICAgcHJpbnQgcnVsZQorICAgICAgICBwcmludChydWxlKQogICAgICAgICBmb3IgcCBpbiBzZWxmLnBhcnRzOgogICAgICAgICAgICAgaWYgcC5zaXplcy50b3RhbCA+IDA6CiAgICAgICAgICAgICAgICAgcC5zaXplcy5zaG93KGluZGVudCkKLSAgICAgICAgcHJpbnQgcnVsZQotICAgICAgICBwcmludCAiJS0zMnMgJTEwZCB8ICUxMGQgJTEwZCAlMTBkIiAlIFwKKyAgICAgICAgcHJpbnQocnVsZSkKKyAgICAgICAgcHJpbnQoIiUtMzJzICUxMGQgfCAlMTBkICUxMGQgJTEwZCIgJSBcCiAgICAgICAgICAgICAgIChpbmRlbnQrInN1bSIsIHNlbGYudG90YWxzWyJ0b3RhbCJdLCBzZWxmLnRvdGFsc1sidGV4dCJdLAotICAgICAgICAgICAgICAgc2VsZi50b3RhbHNbImRhdGEiXSwgc2VsZi50b3RhbHNbImJzcyJdKQotICAgICAgICBwcmludCAiJS0zMnMgJTEwZCB8ICUxMGQgJTEwZCAlMTBkIiAlIFwKKyAgICAgICAgICAgICAgIHNlbGYudG90YWxzWyJkYXRhIl0sIHNlbGYudG90YWxzWyJic3MiXSkpCisgICAgICAgIHByaW50KCIlLTMycyAlMTBkIHwgJTEwZCAlMTBkICUxMGQiICUgXAogICAgICAgICAgICAgICAoaW5kZW50KyJkZWx0YSIsIHNlbGYuZGVsdGFzWyJ0b3RhbCJdLCBzZWxmLmRlbHRhc1sidGV4dCJdLAotICAgICAgICAgICAgICAgc2VsZi5kZWx0YXNbImRhdGEiXSwgc2VsZi5kZWx0YXNbImJzcyJdKQotICAgICAgICBwcmludCAiXG4iCisgICAgICAgICAgICAgICBzZWxmLmRlbHRhc1siZGF0YSJdLCBzZWxmLmRlbHRhc1siYnNzIl0pKQorICAgICAgICBwcmludCgiXG4iKQogCiAgICAgZGVmIF9fY21wX18odGhpcywgdGhhdCk6CiAgICAgICAgIGlmIHRoYXQgaXMgTm9uZToKQEAgLTEzMyw4ICsxMzEsOCBAQAogZGVmIG1haW4oKToKICAgICB0cnk6CiAgICAgICAgIG9wdHMsIGFyZ3MgPSBnZXRvcHQuZ2V0b3B0KHN5cy5hcmd2WzE6XSwgImRoIiwgWyJoZWxwIl0pCi0gICAgZXhjZXB0IGdldG9wdC5HZXRvcHRFcnJvciwgZXJyOgotICAgICAgICBwcmludCAnJXMnICUgc3RyKGVycikKKyAgICBleGNlcHQgZ2V0b3B0LkdldG9wdEVycm9yIGFzIGVycjoKKyAgICAgICAgcHJpbnQoJyVzJyAlIHN0cihlcnIpKQogICAgICAgICB1c2FnZSgpCiAgICAgICAgIHN5cy5leGl0KDIpCiAKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9zY3JpcHRzL3ZlcmlmeS1iYXNoaXNtcyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9zY3JpcHRzL3ZlcmlmeS1iYXNoaXNtcwpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi4wNzQxZTE4Ci0tLSAvZGV2L251bGwKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L3NjcmlwdHMvdmVyaWZ5LWJhc2hpc21zCkBAIC0wLDAgKzEsMTE2IEBACisjIS91c3IvYmluL2VudiBweXRob24zCisKK2ltcG9ydCBzeXMsIG9zLCBzdWJwcm9jZXNzLCByZSwgc2h1dGlsCisKK3doaXRlbGlzdCA9ICgKKyAgICAjIHR5cGUgaXMgc3VwcG9ydGVkIGJ5IGRhc2gKKyAgICAnaWYgdHlwZSBzeXN0ZW1jdGwgPi9kZXYvbnVsbCAyPi9kZXYvbnVsbDsgdGhlbicsCisgICAgJ2lmIHR5cGUgc3lzdGVtZC10bXBmaWxlcyA+L2Rldi9udWxsIDI+L2Rldi9udWxsOyB0aGVuJywKKyAgICAnaWYgdHlwZSB1cGRhdGUtcmMuZCA+L2Rldi9udWxsIDI+L2Rldi9udWxsOyB0aGVuJywKKyAgICAnY29tbWFuZCAtdicsCisgICAgIyBIT1NUTkFNRSBpcyBzZXQgbG9jYWxseQorICAgICdidWlsZGhpc3Rvcnlfc2luZ2xlX2NvbW1pdCAiJENNRExJTkUiICIkSE9TVE5BTUUiJywKKyAgICAjIEZhbHNlLXBvc2l0aXZlLCBtYXRjaCBpcyBhIGdyZXAgbm90IHNoZWxsIGV4cHJlc3Npb24KKyAgICAnZ3JlcCAiXiRncm91cG5hbWU6W146XSo6W146XSo6XFwoW14sXSosXFwpKiR1c2VybmFtZVxcKCxbXixdKlxcKSoiJywKKyAgICAjIFRPRE8gdmVyaWZ5IGRhc2gncyAnLiBzY3JpcHQgYXJncycgYmVoYXZpb3VyCisgICAgJy4gJHRhcmdldF9zZGtfZGlyLyR7b2VfaW5pdF9idWlsZF9lbnZfcGF0aH0gJHRhcmdldF9zZGtfZGlyID4+ICRMT0dGSUxFJworICAgICkKKworZGVmIGlzX3doaXRlbGlzdGVkKHMpOgorICAgIGZvciB3IGluIHdoaXRlbGlzdDoKKyAgICAgICAgaWYgdyBpbiBzOgorICAgICAgICAgICAgcmV0dXJuIFRydWUKKyAgICByZXR1cm4gRmFsc2UKKworZGVmIHByb2Nlc3MocmVjaXBlLCBmdW5jdGlvbiwgc2NyaXB0KToKKyAgICBpbXBvcnQgdGVtcGZpbGUKKworICAgIGlmIG5vdCBzY3JpcHQuc3RhcnRzd2l0aCgiIyEiKToKKyAgICAgICAgc2NyaXB0ID0gIiMhIC9iaW4vc2hcbiIgKyBzY3JpcHQKKworICAgIGZuID0gdGVtcGZpbGUuTmFtZWRUZW1wb3JhcnlGaWxlKG1vZGU9IncrdCIpCisgICAgZm4ud3JpdGUoc2NyaXB0KQorICAgIGZuLmZsdXNoKCkKKworICAgIHRyeToKKyAgICAgICAgc3VicHJvY2Vzcy5jaGVja19vdXRwdXQoKCJjaGVja2Jhc2hpc21zLnBsIiwgZm4ubmFtZSksIHVuaXZlcnNhbF9uZXdsaW5lcz1UcnVlLCBzdGRlcnI9c3VicHJvY2Vzcy5TVERPVVQpCisgICAgICAgICMgTm8gYmFzaGlzbXMsIHNvIGp1c3QgcmV0dXJuCisgICAgICAgIHJldHVybgorICAgIGV4Y2VwdCBzdWJwcm9jZXNzLkNhbGxlZFByb2Nlc3NFcnJvciBhcyBlOgorICAgICAgICAjIFRPRE8gY2hlY2sgZXhpdCBjb2RlIGlzIDEKKworICAgICAgICAjIFJlcGxhY2UgdGhlIHRlbXBvcmFyeSBmaWxlbmFtZSB3aXRoIHRoZSBmdW5jdGlvbiBhbmQgc3BsaXQgaXQKKyAgICAgICAgb3V0cHV0ID0gZS5vdXRwdXQucmVwbGFjZShmbi5uYW1lLCBmdW5jdGlvbikuc3BsaXRsaW5lcygpCisgICAgICAgIGlmIGxlbihyZXN1bHRzKSAlIDIgIT0gMDoKKyAgICAgICAgICAgIHByaW50KCJVbmV4cGVjdGVkIG91dHB1dCBmcm9tIGNoZWNrYmFzaGlzbTogJXMiICUgc3RyKG91dHB1dCkpCisgICAgICAgICAgICByZXR1cm4KKworICAgICAgICAjIFR1cm4gdGhlIG91dHB1dCBpbnRvIGEgbGlzdCBvZiAobWVzc2FnZSwgc291cmNlKSB2YWx1ZXMKKyAgICAgICAgcmVzdWx0ID0gW10KKyAgICAgICAgIyBDaGVjayB0aGUgcmVzdWx0cyBhZ2FpbnN0IHRoZSB3aGl0ZWxpc3QKKyAgICAgICAgZm9yIG1lc3NhZ2UsIHNvdXJjZSBpbiB6aXAob3V0cHV0WzA6OjJdLCBvdXRwdXRbMTo6Ml0pOgorICAgICAgICAgICAgaWYgbm90IGlzX3doaXRlbGlzdGVkKHNvdXJjZSk6CisgICAgICAgICAgICAgICAgcmVzdWx0LmFwcGVuZCgobWVzc2FnZSwgc291cmNlKSkKKyAgICAgICAgcmV0dXJuIHJlc3VsdAorCitkZWYgZ2V0X3RpbmZvaWwoKToKKyAgICBzY3JpcHRzX3BhdGggPSBvcy5wYXRoLmRpcm5hbWUob3MucGF0aC5yZWFscGF0aChfX2ZpbGVfXykpCisgICAgbGliX3BhdGggPSBzY3JpcHRzX3BhdGggKyAnL2xpYicKKyAgICBzeXMucGF0aCA9IHN5cy5wYXRoICsgW2xpYl9wYXRoXQorICAgIGltcG9ydCBzY3JpcHRwYXRoCisgICAgc2NyaXB0cGF0aC5hZGRfYml0YmFrZV9saWJfcGF0aCgpCisgICAgaW1wb3J0IGJiLnRpbmZvaWwKKyAgICB0aW5mb2lsID0gYmIudGluZm9pbC5UaW5mb2lsKCkKKyAgICB0aW5mb2lsLnByZXBhcmUoKQorICAgICMgdGluZm9pbC5sb2dnZXIuc2V0TGV2ZWwobG9nZ2luZy5XQVJOSU5HKQorICAgIHJldHVybiB0aW5mb2lsCisKK2lmIF9fbmFtZV9fPT0nX19tYWluX18nOgorICAgIGltcG9ydCBzaHV0aWwKKyAgICBpZiBzaHV0aWwud2hpY2goImNoZWNrYmFzaGlzbXMucGwiKSBpcyBOb25lOgorICAgICAgICBwcmludCgiQ2Fubm90IGZpbmQgY2hlY2tiYXNoaXNtcy5wbCBvbiAkUEFUSCIpCisgICAgICAgIHN5cy5leGl0KDEpCisKKyAgICB0aW5mb2lsID0gZ2V0X3RpbmZvaWwoKQorCisgICAgIyBUaGlzIGlzIG9ubHkgdGhlIGRlZmF1bHQgY29uZmlndXJhdGlvbiBhbmQgc2hvdWxkIGl0ZXJhdGUgb3ZlcgorICAgICMgcmVjaXBlY2FjaGVzIHRvIGhhbmRsZSBtdWx0aWNvbmZpZyBlbnZpcm9ubWVudHMKKyAgICBwa2dfcG4gPSB0aW5mb2lsLmNvb2tlci5yZWNpcGVjYWNoZXNbIiJdLnBrZ19wbgorCisgICAgIyBUT0RPOiB1c2UgYXJncGFyc2UgYW5kIGhhdmUgLS1oZWxwCisgICAgaWYgbGVuKHN5cy5hcmd2KSA+IDE6CisgICAgICAgIGluaXRpYWxfcG5zID0gc3lzLmFyZ3ZbMTpdCisgICAgZWxzZToKKyAgICAgICAgaW5pdGlhbF9wbnMgPSBzb3J0ZWQocGtnX3BuKQorCisgICAgcG5zID0gW10KKyAgICBwcmludCgiR2VuZXJhdGluZyBmaWxlIGxpc3QuLi4iKQorICAgIGZvciBwbiBpbiBpbml0aWFsX3BuczoKKyAgICAgICAgZm9yIGZuIGluIHBrZ19wbltwbl06CisgICAgICAgICAgICAjIFRoZXJlJ3Mgbm8gcG9pbnQgY2hlY2tpbmcgbXVsdGlwbGUgQkJDTEFTU0VYVEVORGVkIHZhcmlhbnRzIG9mIHRoZSBzYW1lIHJlY2lwZQorICAgICAgICAgICAgcmVhbGZuLCBfLCBfID0gYmIuY2FjaGUudmlydHVhbGZuMnJlYWxmbihmbikKKyAgICAgICAgICAgIGlmIHJlYWxmbiBub3QgaW4gcG5zOgorICAgICAgICAgICAgICAgIHBucy5hcHBlbmQocmVhbGZuKQorCisKKyAgICBkZWYgZnVuYyhmbik6CisgICAgICAgIHJlc3VsdCA9IFtdCisgICAgICAgIGRhdGEgPSB0aW5mb2lsLnBhcnNlX3JlY2lwZV9maWxlKGZuKQorICAgICAgICBmb3Iga2V5IGluIGRhdGEua2V5cygpOgorICAgICAgICAgICAgaWYgZGF0YS5nZXRWYXJGbGFnKGtleSwgImZ1bmMiLCBUcnVlKSBhbmQgbm90IGRhdGEuZ2V0VmFyRmxhZyhrZXksICJweXRob24iLCBUcnVlKToKKyAgICAgICAgICAgICAgICBzY3JpcHQgPSBkYXRhLmdldFZhcihrZXksIEZhbHNlKQorICAgICAgICAgICAgICAgIGlmIG5vdCBzY3JpcHQ6IGNvbnRpbnVlCisgICAgICAgICAgICAgICAgI3ByaW50ICgiJXM6JXMiICUgKGZuLCBrZXkpKQorICAgICAgICAgICAgICAgIHIgPSBwcm9jZXNzKGZuLCBrZXksIHNjcmlwdCkKKyAgICAgICAgICAgICAgICBpZiByOiByZXN1bHQuZXh0ZW5kKHIpCisgICAgICAgIHJldHVybiBmbiwgcmVzdWx0CisKKyAgICBwcmludCgiU2Nhbm5pbmcgc2NyaXB0cy4uLlxuIikKKyAgICBpbXBvcnQgbXVsdGlwcm9jZXNzaW5nCisgICAgcG9vbCA9IG11bHRpcHJvY2Vzc2luZy5Qb29sKCkKKyAgICBmb3IgcG4scmVzdWx0cyBpbiBwb29sLmltYXAoZnVuYywgcG5zKToKKyAgICAgICAgaWYgcmVzdWx0czoKKyAgICAgICAgICAgIHByaW50KHBuKQorICAgICAgICAgICAgZm9yIG1lc3NhZ2Usc291cmNlIGluIHJlc3VsdHM6CisgICAgICAgICAgICAgICAgcHJpbnQoIiAlc1xuICAlcyIgJSAobWVzc2FnZSwgc291cmNlKSkKKyAgICAgICAgICAgIHByaW50KCkKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9zY3JpcHRzL3dpYyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9zY3JpcHRzL3dpYwppbmRleCAyMjg2ZjIwLi5mZTJjMzNmIDEwMDc1NQotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvc2NyaXB0cy93aWMKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L3NjcmlwdHMvd2ljCkBAIC0xLDQgKzEsNCBAQAotIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCisjIS91c3IvYmluL2VudiBweXRob24zCiAjIGV4OnRzPTQ6c3c9NDpzdHM9NDpldAogIyAtKi0gdGFiLXdpZHRoOiA0OyBjLWJhc2ljLW9mZnNldDogNDsgaW5kZW50LXRhYnMtbW9kZTogbmlsIC0qLQogIwpAQCAtMjgsNyArMjgsNiBAQAogIyBBVVRIT1JTCiAjIFRvbSBaYW51c3NpIDx0b20uemFudXNzaSAoYXRdIGxpbnV4LmludGVsLmNvbT4KICMKLQogX192ZXJzaW9uX18gPSAiMC4yLjAiCiAKICMgUHl0aG9uIFN0YW5kYXJkIExpYnJhcnkgbW9kdWxlcwpAQCAtMTE0LDYgKzExMyw3IEBACiAgICAgcGFyc2VyLmFkZF9vcHRpb24oIi1jIiwgIi0tY29tcHJlc3Mtd2l0aCIsIGNob2ljZXM9KCJnemlwIiwgImJ6aXAyIiwgInh6IiksCiAgICAgICAgICAgICAgICAgICAgICAgZGVzdD0nY29tcHJlc3NvcicsCiAgICAgICAgICAgICAgICAgICAgICAgaGVscD0iY29tcHJlc3MgaW1hZ2Ugd2l0aCBzcGVjaWZpZWQgY29tcHJlc3NvciIpCisgICAgcGFyc2VyLmFkZF9vcHRpb24oIi1tIiwgIi0tYm1hcCIsIGFjdGlvbj0ic3RvcmVfdHJ1ZSIsIGhlbHA9ImdlbmVyYXRlIC5ibWFwIikKICAgICBwYXJzZXIuYWRkX29wdGlvbigiLXYiLCAiLS12YXJzIiwgZGVzdD0ndmFyc19kaXInLAogICAgICAgICAgICAgICAgICAgICAgIGhlbHA9ImRpcmVjdG9yeSB3aXRoIDxpbWFnZT4uZW52IGZpbGVzIHRoYXQgc3RvcmUgIgogICAgICAgICAgICAgICAgICAgICAgICAgICAgImJpdGJha2UgdmFyaWFibGVzIikKQEAgLTE0MCw4ICsxNDAsOCBAQAogICAgICAgICAgICAgaWYgbm90IHZhbDoKICAgICAgICAgICAgICAgICBtaXNzZWQuYXBwZW5kKG9wdCkKICAgICAgICAgaWYgbWlzc2VkOgotICAgICAgICAgICAgcHJpbnQgIlRoZSBmb2xsb3dpbmcgYnVpbGQgYXJ0aWZhY3RzIGFyZSBub3Qgc3BlY2lmaWVkOiIKLSAgICAgICAgICAgIHByaW50ICIgICIgKyAiLCAiLmpvaW4obWlzc2VkKQorICAgICAgICAgICAgcHJpbnQoIlRoZSBmb2xsb3dpbmcgYnVpbGQgYXJ0aWZhY3RzIGFyZSBub3Qgc3BlY2lmaWVkOiIpCisgICAgICAgICAgICBwcmludCgiICAiICsgIiwgIi5qb2luKG1pc3NlZCkpCiAgICAgICAgICAgICBzeXMuZXhpdCgxKQogCiAgICAgaWYgb3B0aW9ucy5pbWFnZV9uYW1lOgpAQCAtMTUzLDEyICsxNTMsMTIgQEAKICAgICAgICAgQkJfVkFSUy52YXJzX2RpciA9IG9wdGlvbnMudmFyc19kaXIKIAogICAgIGlmIG9wdGlvbnMuYnVpbGRfY2hlY2s6Ci0gICAgICAgIHByaW50ICJDaGVja2luZyBiYXNpYyBidWlsZCBlbnZpcm9ubWVudC4uLiIKKyAgICAgICAgcHJpbnQoIkNoZWNraW5nIGJhc2ljIGJ1aWxkIGVudmlyb25tZW50Li4uIikKICAgICAgICAgaWYgbm90IGVuZ2luZS52ZXJpZnlfYnVpbGRfZW52KCk6Ci0gICAgICAgICAgICBwcmludCAiQ291bGRuJ3QgdmVyaWZ5IGJ1aWxkIGVudmlyb25tZW50LCBleGl0aW5nXG4iCisgICAgICAgICAgICBwcmludCgiQ291bGRuJ3QgdmVyaWZ5IGJ1aWxkIGVudmlyb25tZW50LCBleGl0aW5nXG4iKQogICAgICAgICAgICAgc3lzLmV4aXQoMSkKICAgICAgICAgZWxzZToKLSAgICAgICAgICAgIHByaW50ICJEb25lLlxuIgorICAgICAgICAgICAgcHJpbnQoIkRvbmUuXG4iKQogCiAgICAgYm9vdGltZ19kaXIgPSAiIgogCkBAIC0xNjgsNyArMTY4LDcgQEAKICAgICAgICAgICAgIGlmIG9wdGlvbnMuZGVidWc6CiAgICAgICAgICAgICAgICAgYXJndi5hcHBlbmQoIi0tZGVidWciKQogCi0gICAgICAgICAgICBwcmludCAiQnVpbGRpbmcgcm9vdGZzLi4uXG4iCisgICAgICAgICAgICBwcmludCgiQnVpbGRpbmcgcm9vdGZzLi4uXG4iKQogICAgICAgICAgICAgaWYgYml0YmFrZV9tYWluKEJpdEJha2VDb25maWdQYXJhbWV0ZXJzKGFyZ3YpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvb2tlcmRhdGEuQ29va2VyQ29uZmlndXJhdGlvbigpKToKICAgICAgICAgICAgICAgICBzeXMuZXhpdCgxKQpAQCAtMTc5LDcgKzE3OSw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wdGlvbnMuaW1hZ2VfbmFtZSkKICAgICBlbHNlOgogICAgICAgICBpZiBvcHRpb25zLmJ1aWxkX3Jvb3RmczoKLSAgICAgICAgICAgIHByaW50ICJJbWFnZSBuYW1lIGlzIG5vdCBzcGVjaWZpZWQsIGV4aXRpbmcuIChVc2UgLWUvLS1pbWFnZS1uYW1lIHRvIHNwZWNpZnkgaXQpXG4iCisgICAgICAgICAgICBwcmludCgiSW1hZ2UgbmFtZSBpcyBub3Qgc3BlY2lmaWVkLCBleGl0aW5nLiAoVXNlIC1lLy0taW1hZ2UtbmFtZSB0byBzcGVjaWZ5IGl0KVxuIikKICAgICAgICAgICAgIHN5cy5leGl0KDEpCiAKICAgICB3a3NfZmlsZSA9IGFyZ3NbMF0KQEAgLTE4Nyw5ICsxODcsOSBAQAogICAgIGlmIG5vdCB3a3NfZmlsZS5lbmRzd2l0aCgiLndrcyIpOgogICAgICAgICB3a3NfZmlsZSA9IGVuZ2luZS5maW5kX2Nhbm5lZF9pbWFnZShzY3JpcHRzX3BhdGgsIHdrc19maWxlKQogICAgICAgICBpZiBub3Qgd2tzX2ZpbGU6Ci0gICAgICAgICAgICBwcmludCAiTm8gaW1hZ2UgbmFtZWQgJXMgZm91bmQsIGV4aXRpbmcuICAoVXNlICd3aWMgbGlzdCBpbWFnZXMnICJcCisgICAgICAgICAgICBwcmludCgiTm8gaW1hZ2UgbmFtZWQgJXMgZm91bmQsIGV4aXRpbmcuICAoVXNlICd3aWMgbGlzdCBpbWFnZXMnICJcCiAgICAgICAgICAgICAgICAgICAidG8gbGlzdCBhdmFpbGFibGUgaW1hZ2VzLCBvciBzcGVjaWZ5IGEgZnVsbHktcXVhbGlmaWVkIE9FICJcCi0gICAgICAgICAgICAgICAgICAia2lja3N0YXJ0ICgud2tzKSBmaWxlbmFtZSlcbiIgJSBhcmdzWzBdCisgICAgICAgICAgICAgICAgICAia2lja3N0YXJ0ICgud2tzKSBmaWxlbmFtZSlcbiIgJSBhcmdzWzBdKQogICAgICAgICAgICAgc3lzLmV4aXQoMSkKIAogICAgIGltYWdlX291dHB1dF9kaXIgPSAiIgpAQCAtMjA0LDE2ICsyMDQsMTYgQEAKICAgICAgICAga2VybmVsX2RpciA9IG9wdGlvbnMua2VybmVsX2RpcgogICAgICAgICBuYXRpdmVfc3lzcm9vdCA9IG9wdGlvbnMubmF0aXZlX3N5c3Jvb3QKICAgICAgICAgaWYgcm9vdGZzX2RpciBhbmQgbm90IG9zLnBhdGguaXNkaXIocm9vdGZzX2Rpcik6Ci0gICAgICAgICAgICBwcmludCAiLS1yb29mcy1kaXIgKC1yKSBub3QgZm91bmQsIGV4aXRpbmdcbiIKKyAgICAgICAgICAgIHByaW50KCItLXJvb2ZzLWRpciAoLXIpIG5vdCBmb3VuZCwgZXhpdGluZ1xuIikKICAgICAgICAgICAgIHN5cy5leGl0KDEpCiAgICAgICAgIGlmIG5vdCBvcy5wYXRoLmlzZGlyKGJvb3RpbWdfZGlyKToKLSAgICAgICAgICAgIHByaW50ICItLWJvb3RpbWctZGlyICgtYikgbm90IGZvdW5kLCBleGl0aW5nXG4iCisgICAgICAgICAgICBwcmludCgiLS1ib290aW1nLWRpciAoLWIpIG5vdCBmb3VuZCwgZXhpdGluZ1xuIikKICAgICAgICAgICAgIHN5cy5leGl0KDEpCiAgICAgICAgIGlmIG5vdCBvcy5wYXRoLmlzZGlyKGtlcm5lbF9kaXIpOgotICAgICAgICAgICAgcHJpbnQgIi0ta2VybmVsLWRpciAoLWspIG5vdCBmb3VuZCwgZXhpdGluZ1xuIgorICAgICAgICAgICAgcHJpbnQoIi0ta2VybmVsLWRpciAoLWspIG5vdCBmb3VuZCwgZXhpdGluZ1xuIikKICAgICAgICAgICAgIHN5cy5leGl0KDEpCiAgICAgICAgIGlmIG5vdCBvcy5wYXRoLmlzZGlyKG5hdGl2ZV9zeXNyb290KToKLSAgICAgICAgICAgIHByaW50ICItLW5hdGl2ZS1zeXNyb290ICgtbikgbm90IGZvdW5kLCBleGl0aW5nXG4iCisgICAgICAgICAgICBwcmludCgiLS1uYXRpdmUtc3lzcm9vdCAoLW4pIG5vdCBmb3VuZCwgZXhpdGluZ1xuIikKICAgICAgICAgICAgIHN5cy5leGl0KDEpCiAgICAgZWxzZToKICAgICAgICAgbm90X2ZvdW5kID0gbm90X2ZvdW5kX2RpciA9ICIiCkBAIC0yMjYsMTIgKzIyNiwxMiBAQAogICAgICAgICBpZiBub3RfZm91bmQ6CiAgICAgICAgICAgICBpZiBub3Qgbm90X2ZvdW5kX2RpcjoKICAgICAgICAgICAgICAgICBub3RfZm91bmRfZGlyID0gIkNvbXBsZXRlbHkgbWlzc2luZyBhcnRpZmFjdCAtIHdyb25nIGltYWdlICgud2tzKSB1c2VkPyIKLSAgICAgICAgICAgIHByaW50ICJCdWlsZCBhcnRpZmFjdHMgbm90IGZvdW5kLCBleGl0aW5nLiIKLSAgICAgICAgICAgIHByaW50ICIgIChQbGVhc2UgY2hlY2sgdGhhdCB0aGUgYnVpbGQgYXJ0aWZhY3RzIGZvciB0aGUgbWFjaGluZSIKLSAgICAgICAgICAgIHByaW50ICIgICBzZWxlY3RlZCBpbiBsb2NhbC5jb25mIGFjdHVhbGx5IGV4aXN0IGFuZCB0aGF0IHRoZXkiCi0gICAgICAgICAgICBwcmludCAiICAgYXJlIHRoZSBjb3JyZWN0IGFydGlmYWN0cyBmb3IgdGhlIGltYWdlICgud2tzIGZpbGUpKS5cbiIKLSAgICAgICAgICAgIHByaW50ICJUaGUgYXJ0aWZhY3QgdGhhdCBjb3VsZG4ndCBiZSBmb3VuZCB3YXMgJXM6XG4gICVzIiAlIFwKLSAgICAgICAgICAgICAgICAobm90X2ZvdW5kLCBub3RfZm91bmRfZGlyKQorICAgICAgICAgICAgcHJpbnQoIkJ1aWxkIGFydGlmYWN0cyBub3QgZm91bmQsIGV4aXRpbmcuIikKKyAgICAgICAgICAgIHByaW50KCIgIChQbGVhc2UgY2hlY2sgdGhhdCB0aGUgYnVpbGQgYXJ0aWZhY3RzIGZvciB0aGUgbWFjaGluZSIpCisgICAgICAgICAgICBwcmludCgiICAgc2VsZWN0ZWQgaW4gbG9jYWwuY29uZiBhY3R1YWxseSBleGlzdCBhbmQgdGhhdCB0aGV5IikKKyAgICAgICAgICAgIHByaW50KCIgICBhcmUgdGhlIGNvcnJlY3QgYXJ0aWZhY3RzIGZvciB0aGUgaW1hZ2UgKC53a3MgZmlsZSkpLlxuIikKKyAgICAgICAgICAgIHByaW50KCJUaGUgYXJ0aWZhY3QgdGhhdCBjb3VsZG4ndCBiZSBmb3VuZCB3YXMgJXM6XG4gICVzIiAlIFwKKyAgICAgICAgICAgICAgICAobm90X2ZvdW5kLCBub3RfZm91bmRfZGlyKSkKICAgICAgICAgICAgIHN5cy5leGl0KDEpCiAKICAgICBrcm9vdGZzX2RpciA9IG9wdGlvbnMucm9vdGZzX2RpcgpAQCAtMjQxLDEwICsyNDEsMTAgQEAKIAogICAgIHJvb3Rmc19kaXIgPSByb290ZnNfZGlyX3RvX2FyZ3Moa3Jvb3Rmc19kaXIpCiAKLSAgICBwcmludCAiQ3JlYXRpbmcgaW1hZ2UocykuLi5cbiIKKyAgICBwcmludCgiQ3JlYXRpbmcgaW1hZ2UocykuLi5cbiIpCiAgICAgZW5naW5lLndpY19jcmVhdGUod2tzX2ZpbGUsIHJvb3Rmc19kaXIsIGJvb3RpbWdfZGlyLCBrZXJuZWxfZGlyLAogICAgICAgICAgICAgICAgICAgICAgIG5hdGl2ZV9zeXNyb290LCBzY3JpcHRzX3BhdGgsIGltYWdlX291dHB1dF9kaXIsCi0gICAgICAgICAgICAgICAgICAgICAgb3B0aW9ucy5jb21wcmVzc29yLCBvcHRpb25zLmRlYnVnKQorICAgICAgICAgICAgICAgICAgICAgIG9wdGlvbnMuY29tcHJlc3Nvciwgb3B0aW9ucy5ibWFwLCBvcHRpb25zLmRlYnVnKQogCiAKIGRlZiB3aWNfbGlzdF9zdWJjb21tYW5kKGFyZ3MsIHVzYWdlX3N0cik6CkBAIC0yOTQsNyArMjk0LDcgQEAKIAogCiBkZWYgc3RhcnRfbG9nZ2luZyhsb2dsZXZlbCk6Ci0gICAgbG9nZ2luZy5iYXNpY0NvbmZpZyhmaWxuYW1lPSd3aWMubG9nJywgZmlsZW1vZGU9J3cnLCBsZXZlbD1sb2dsZXZlbCkKKyAgICBsb2dnaW5nLmJhc2ljQ29uZmlnKGZpbGVuYW1lPSd3aWMubG9nJywgZmlsZW1vZGU9J3cnLCBsZXZlbD1sb2dsZXZlbCkKIAogCiBkZWYgbWFpbihhcmd2KToKQEAgLTMxOCw2ICszMTgsNiBAQAogICAgIHRyeToKICAgICAgICAgc3lzLmV4aXQobWFpbihzeXMuYXJndlsxOl0pKQogICAgIGV4Y2VwdCBXaWNFcnJvciBhcyBlcnI6Ci0gICAgICAgIHByaW50ID4+IHN5cy5zdGRlcnIsICJFUlJPUjoiLCBlcnIKKyAgICAgICAgcHJpbnQoIkVSUk9SOiIsIGVyciwgZmlsZT1zeXMuc3RkZXJyKQogICAgICAgICBzeXMuZXhpdCgxKQogCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvc2NyaXB0cy93aXBlLXN5c3Jvb3QgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvc2NyaXB0cy93aXBlLXN5c3Jvb3QKaW5kZXggOWUwNjdlOC4uNWU2YjFhNCAxMDA3NTUKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L3NjcmlwdHMvd2lwZS1zeXNyb290CisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9zY3JpcHRzL3dpcGUtc3lzcm9vdApAQCAtNTEsNCArNTEsNCBAQAogcm0gLXJmICRTVEFNUFNfRElSLyovKi8qLmRvX3BhY2thZ2VkYXRhX3NldHNjZW5lLioKIAogIyBUaGUgc3N0YXRlIG1hbmlmZXN0cwotcm0gLXJmICRTU1RBVEVfTUFOSUZFU1RTL21hbmlmZXN0LSoucG9wdWxhdGUtc3lzcm9vdAorcm0gLXJmICRTU1RBVEVfTUFOSUZFU1RTL21hbmlmZXN0LSoucG9wdWxhdGVfc3lzcm9vdApkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L3NjcmlwdHMveW9jdG8tYnNwIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L3NjcmlwdHMveW9jdG8tYnNwCmluZGV4IDgyYTA1MGUuLjZmYjFmNDEgMTAwNzU1Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9zY3JpcHRzL3lvY3RvLWJzcAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvc2NyaXB0cy95b2N0by1ic3AKQEAgLTEsNCArMSw0IEBACi0jIS91c3IvYmluL2VudiBweXRob24KKyMhL3Vzci9iaW4vZW52IHB5dGhvbjMKICMgZXg6dHM9NDpzdz00OnN0cz00OmV0CiAjIC0qLSB0YWItd2lkdGg6IDQ7IGMtYmFzaWMtb2Zmc2V0OiA0OyBpbmRlbnQtdGFicy1tb2RlOiBuaWwgLSotCiAjCkBAIC0zMCwxMjAgKzMwLDEyOCBAQAogIyBUb20gWmFudXNzaSA8dG9tLnphbnVzc2kgKGF0XSBpbnRlbC5jb20+CiAjCiAKLV9fdmVyc2lvbl9fID0gIjAuMS4wIgotCiBpbXBvcnQgb3MKIGltcG9ydCBzeXMKLWltcG9ydCBvcHRwYXJzZQoraW1wb3J0IGFyZ3BhcnNlCiBpbXBvcnQgbG9nZ2luZwogCi1zY3JpcHRzX3BhdGggPSBvcy5wYXRoLmFic3BhdGgob3MucGF0aC5kaXJuYW1lKG9zLnBhdGguYWJzcGF0aChzeXMuYXJndlswXSkpKQotbGliX3BhdGggPSBzY3JpcHRzX3BhdGggKyAnL2xpYicKLXN5cy5wYXRoID0gc3lzLnBhdGggKyBbbGliX3BhdGhdCitzY3JpcHRzX3BhdGggPSBvcy5wYXRoLmRpcm5hbWUob3MucGF0aC5yZWFscGF0aChfX2ZpbGVfXykpCitzeXMucGF0aC5pbnNlcnQoMCwgc2NyaXB0c19wYXRoICsgJy9saWInKQoraW1wb3J0IGFyZ3BhcnNlX29lCiAKIGZyb20gYnNwLmhlbHAgaW1wb3J0ICoKIGZyb20gYnNwLmVuZ2luZSBpbXBvcnQgKgogCiAKLWRlZiB5b2N0b19ic3BfY3JlYXRlX3N1YmNvbW1hbmQoYXJncywgdXNhZ2Vfc3RyKToKK2RlZiBkb19jcmVhdGVfYnNwKGFyZ3MpOgogICAgICIiIgogICAgIENvbW1hbmQtbGluZSBoYW5kbGluZyBmb3IgQlNQIGNyZWF0aW9uLiAgVGhlIHJlYWwgd29yayBpcyBkb25lIGJ5CiAgICAgYnNwLmVuZ2luZS55b2N0b19ic3BfY3JlYXRlKCkKICAgICAiIiIKLSAgICBwYXJzZXIgPSBvcHRwYXJzZS5PcHRpb25QYXJzZXIodXNhZ2UgPSB1c2FnZV9zdHIpCi0KLSAgICBwYXJzZXIuYWRkX29wdGlvbigiLW8iLCAiLS1vdXRkaXIiLCBkZXN0ID0gIm91dGRpciIsIGFjdGlvbiA9ICJzdG9yZSIsCi0gICAgICAgICAgICAgICAgICAgICAgaGVscCA9ICJuYW1lIG9mIEJTUCBkaXIgdG8gY3JlYXRlIikKLSAgICBwYXJzZXIuYWRkX29wdGlvbigiLWkiLCAiLS1pbmZpbGUiLCBkZXN0ID0gInByb3BlcnRpZXNfZmlsZSIsIGFjdGlvbiA9ICJzdG9yZSIsCi0gICAgICAgICAgICAgICAgICAgICAgaGVscCA9ICJuYW1lIG9mIGZpbGUgY29udGFpbmluZyB0aGUgdmFsdWVzIGZvciBCU1AgcHJvcGVydGllcyBhcyBhIEpTT04gZmlsZSIpCi0gICAgcGFyc2VyLmFkZF9vcHRpb24oIi1jIiwgIi0tY29kZWR1bXAiLCBkZXN0ID0gImNvZGVkdW1wIiwgYWN0aW9uID0gInN0b3JlX3RydWUiLAotICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQgPSBGYWxzZSwgaGVscCA9ICJkdW1wIHRoZSBnZW5lcmF0ZWQgY29kZSB0byBic3BnZW4ub3V0IikKLSAgICBwYXJzZXIuYWRkX29wdGlvbigiLXMiLCAiLS1za2lwLWdpdC1jaGVjayIsIGRlc3QgPSAiZ2l0X2NoZWNrIiwgYWN0aW9uID0gInN0b3JlX2ZhbHNlIiwKLSAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0ID0gVHJ1ZSwgaGVscCA9ICJza2lwIHRoZSBnaXQgY29ubmVjdGl2aXR5IGNoZWNrIikKLSAgICAob3B0aW9ucywgYXJncykgPSBwYXJzZXIucGFyc2VfYXJncyhhcmdzKQotCi0gICAgaWYgbGVuKGFyZ3MpICE9IDI6Ci0gICAgICAgIGxvZ2dpbmcuZXJyb3IoIldyb25nIG51bWJlciBvZiBhcmd1bWVudHMsIGV4aXRpbmdcbiIpCi0gICAgICAgIHBhcnNlci5wcmludF9oZWxwKCkKLSAgICAgICAgc3lzLmV4aXQoMSkKLQotICAgIG1hY2hpbmUgPSBhcmdzWzBdCi0gICAga2FyY2ggPSBhcmdzWzFdCi0KLSAgICBpZiBvcHRpb25zLm91dGRpcjoKLSAgICAgICAgYnNwX291dHB1dF9kaXIgPSBvcHRpb25zLm91dGRpcgorICAgIGlmIGFyZ3Mub3V0ZGlyOgorICAgICAgICBic3Bfb3V0cHV0X2RpciA9IGFyZ3Mub3V0ZGlyCiAgICAgZWxzZToKLSAgICAgICAgYnNwX291dHB1dF9kaXIgPSAibWV0YS0iICsgbWFjaGluZQorICAgICAgICBic3Bfb3V0cHV0X2RpciA9ICJtZXRhLSIgKyBhcmdzLmJzcG5hbWUKIAotICAgIGlmIG9wdGlvbnMuZ2l0X2NoZWNrIGFuZCBub3Qgb3B0aW9ucy5wcm9wZXJ0aWVzX2ZpbGU6Ci0gICAgICAgIHByaW50ICJDaGVja2luZyBiYXNpYyBnaXQgY29ubmVjdGl2aXR5Li4uIgorICAgIGlmIGFyZ3MuZ2l0X2NoZWNrIGFuZCBub3QgYXJncy5wcm9wZXJ0aWVzX2ZpbGU6CisgICAgICAgIHByaW50KCJDaGVja2luZyBiYXNpYyBnaXQgY29ubmVjdGl2aXR5Li4uIikKICAgICAgICAgaWYgbm90IHZlcmlmeV9naXRfcmVwbyhHSVRfQ0hFQ0tfVVJJKToKLSAgICAgICAgICAgIHByaW50ICJDb3VsZG4ndCB2ZXJpZnkgZ2l0IGNvbm5lY3Rpdml0eSwgZXhpdGluZ1xuIgotICAgICAgICAgICAgcHJpbnQgIkRldGFpbHM6IGNvdWxkbid0IGFjY2VzcyAlcyIgJSBHSVRfQ0hFQ0tfVVJJCi0gICAgICAgICAgICBwcmludCAiICAgICAgICAgKHRoaXMgbW9zdCBsaWtlbHkgaW5kaWNhdGVzIGEgbmV0d29yayBjb25uZWN0aXZpdHkgcHJvYmxlbSBvciIKLSAgICAgICAgICAgIHByaW50ICIgICAgICAgICBhIG1pc2NvbmZpZ3VyZWQgZ2l0IGludGFsbGF0aW9uKSIKKyAgICAgICAgICAgIHByaW50KCJDb3VsZG4ndCB2ZXJpZnkgZ2l0IGNvbm5lY3Rpdml0eSwgZXhpdGluZ1xuIikKKyAgICAgICAgICAgIHByaW50KCJEZXRhaWxzOiBjb3VsZG4ndCBhY2Nlc3MgJXMiICUgR0lUX0NIRUNLX1VSSSkKKyAgICAgICAgICAgIHByaW50KCIgICAgICAgICAodGhpcyBtb3N0IGxpa2VseSBpbmRpY2F0ZXMgYSBuZXR3b3JrIGNvbm5lY3Rpdml0eSBwcm9ibGVtIG9yIikKKyAgICAgICAgICAgIHByaW50KCIgICAgICAgICBhIG1pc2NvbmZpZ3VyZWQgZ2l0IGludGFsbGF0aW9uKSIpCiAgICAgICAgICAgICBzeXMuZXhpdCgxKQogICAgICAgICBlbHNlOgotICAgICAgICAgICAgcHJpbnQgIkRvbmUuXG4iCisgICAgICAgICAgICBwcmludCgiRG9uZS5cbiIpCiAKLSAgICB5b2N0b19ic3BfY3JlYXRlKG1hY2hpbmUsIGthcmNoLCBzY3JpcHRzX3BhdGgsIGJzcF9vdXRwdXRfZGlyLCBvcHRpb25zLmNvZGVkdW1wLCBvcHRpb25zLnByb3BlcnRpZXNfZmlsZSkKKyAgICB5b2N0b19ic3BfY3JlYXRlKGFyZ3MuYnNwbmFtZSwgYXJncy5rYXJjaCwgc2NyaXB0c19wYXRoLCBic3Bfb3V0cHV0X2RpciwgYXJncy5jb2RlZHVtcCwgYXJncy5wcm9wZXJ0aWVzX2ZpbGUpCiAKIAotZGVmIHlvY3RvX2JzcF9saXN0X3N1YmNvbW1hbmQoYXJncywgdXNhZ2Vfc3RyKToKK2RlZiBkb19saXN0X2JzcChhcmdzKToKICAgICAiIiIKICAgICBDb21tYW5kLWxpbmUgaGFuZGxpbmcgZm9yIGxpc3RpbmcgYXZhaWxhYmxlIEJTUCBwcm9wZXJ0aWVzIGFuZAogICAgIHZhbHVlcy4gIFRoZSByZWFsIHdvcmsgaXMgZG9uZSBieSBic3AuZW5naW5lLnlvY3RvX2JzcF9saXN0KCkKICAgICAiIiIKLSAgICBwYXJzZXIgPSBvcHRwYXJzZS5PcHRpb25QYXJzZXIodXNhZ2UgPSB1c2FnZV9zdHIpCisgICAgeW9jdG9fYnNwX2xpc3QoYXJncywgc2NyaXB0c19wYXRoKQogCi0gICAgcGFyc2VyLmFkZF9vcHRpb24oIi1vIiwgIi0tb3V0ZmlsZSIsIGFjdGlvbiA9ICJzdG9yZSIsIGRlc3QgPSAicHJvcGVydGllc19maWxlIiwKLSAgICAgICAgICAgICAgICAgICAgICBoZWxwID0gImR1bXAgdGhlIHBvc3NpYmxlIHZhbHVlcyBmb3IgQlNQIHByb3BlcnRpZXMgdG8gYSBKU09OIGZpbGUiKQorZGVmIGRvX2hlbHBfYnNwKGFyZ3MpOgorICAgICIiIgorICAgIENvbW1hbmQtbGluZSBoZWxwIHRvb2wKKyAgICAiIiIKKyAgICBoZWxwX3RleHQgPSBjb21tYW5kX2hlbHAuZ2V0KGFyZ3Muc3ViY29tbWFuZCkKKyAgICBwYWdlciA9IHN1YnByb2Nlc3MuUG9wZW4oJ2xlc3MnLCBzdGRpbj1zdWJwcm9jZXNzLlBJUEUpCisgICAgcGFnZXIuY29tbXVuaWNhdGUoYnl0ZXMoaGVscF90ZXh0LCdVVEYtOCcpKQogCi0gICAgKG9wdGlvbnMsIGFyZ3MpID0gcGFyc2VyLnBhcnNlX2FyZ3MoYXJncykKLQotICAgIGlmIG5vdCB5b2N0b19ic3BfbGlzdChhcmdzLCBzY3JpcHRzX3BhdGgsIG9wdGlvbnMucHJvcGVydGllc19maWxlKToKLSAgICAgICAgbG9nZ2luZy5lcnJvcigiQmFkIGxpc3QgYXJndW1lbnRzLCBleGl0aW5nXG4iKQotICAgICAgICBwYXJzZXIucHJpbnRfaGVscCgpCi0gICAgICAgIHN5cy5leGl0KDEpCi0KLQotc3ViY29tbWFuZHMgPSB7Ci0gICAgImNyZWF0ZSI6IFt5b2N0b19ic3BfY3JlYXRlX3N1YmNvbW1hbmQsCi0gICAgICAgICAgICAgICB5b2N0b19ic3BfY3JlYXRlX3VzYWdlLAotICAgICAgICAgICAgICAgeW9jdG9fYnNwX2NyZWF0ZV9oZWxwXSwKLSAgICAibGlzdCI6ICAgW3lvY3RvX2JzcF9saXN0X3N1YmNvbW1hbmQsCi0gICAgICAgICAgICAgICB5b2N0b19ic3BfbGlzdF91c2FnZSwKLSAgICAgICAgICAgICAgIHlvY3RvX2JzcF9saXN0X2hlbHBdLAorY29tbWFuZF9oZWxwID0geworICAgICJjcmVhdGUiOiB5b2N0b19ic3BfY3JlYXRlX2hlbHAsCisgICAgImxpc3QiOiAgeW9jdG9fYnNwX2xpc3RfaGVscAogfQogCiAKIGRlZiBzdGFydF9sb2dnaW5nKGxvZ2xldmVsKToKLSAgICBsb2dnaW5nLmJhc2ljQ29uZmlnKGZpbG5hbWUgPSAneW9jdG8tYnNwLmxvZycsIGZpbGVtb2RlID0gJ3cnLCBsZXZlbD1sb2dsZXZlbCkKKyAgICBsb2dnaW5nLmJhc2ljQ29uZmlnKGZpbGVuYW1lID0gJ3lvY3RvLWJzcC5sb2cnLCBmaWxlbW9kZSA9ICd3JywgbGV2ZWw9bG9nbGV2ZWwpCiAKIAogZGVmIG1haW4oKToKLSAgICBwYXJzZXIgPSBvcHRwYXJzZS5PcHRpb25QYXJzZXIodmVyc2lvbiA9ICJ5b2N0by1ic3AgdmVyc2lvbiAlcyIgJSBfX3ZlcnNpb25fXywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXNhZ2UgPSB5b2N0b19ic3BfdXNhZ2UpCisgICAgcGFyc2VyID0gYXJncGFyc2Vfb2UuQXJndW1lbnRQYXJzZXIoZGVzY3JpcHRpb249J0NyZWF0ZSBhIGN1c3RvbWl6ZWQgWW9jdG8gQlNQIGxheWVyLicsCisgICAgICAgICAgICAgICAgICAgICAgZXBpbG9nPSJTZWUgJyUocHJvZylzIGhlbHAgPHN1YmNvbW1hbmQ+JyBmb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiBhIHNwZWNpZmljIGNvbW1hbmQuIikKIAotICAgIHBhcnNlci5kaXNhYmxlX2ludGVyc3BlcnNlZF9hcmdzKCkKLSAgICBwYXJzZXIuYWRkX29wdGlvbigiLUQiLCAiLS1kZWJ1ZyIsIGRlc3QgPSAiZGVidWciLCBhY3Rpb24gPSAic3RvcmVfdHJ1ZSIsCisgICAgcGFyc2VyLmFkZF9hcmd1bWVudCgiLUQiLCAiLS1kZWJ1ZyIsIGFjdGlvbiA9ICJzdG9yZV90cnVlIiwKICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0ID0gRmFsc2UsIGhlbHAgPSAib3V0cHV0IGRlYnVnIGluZm9ybWF0aW9uIikKKyAgICBzdWJwYXJzZXJzID0gcGFyc2VyLmFkZF9zdWJwYXJzZXJzKHRpdGxlPSdzdWJjb21tYW5kcycsIG1ldGF2YXI9JzxzdWJjb21tYW5kPicpCisgICAgc3VicGFyc2Vycy5yZXF1aXJlZCA9IFRydWUKIAotICAgIChvcHRpb25zLCBhcmdzKSA9IHBhcnNlci5wYXJzZV9hcmdzKCkKKyAgICBjcmVhdGVfcGFyc2VyID0gc3VicGFyc2Vycy5hZGRfcGFyc2VyKCdjcmVhdGUnLCBoZWxwPSdDcmVhdGUgYSBuZXcgWW9jdG8gQlNQJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uPSdDcmVhdGUgYSBuZXcgWW9jdG8gQlNQJykKKyAgICBjcmVhdGVfcGFyc2VyLmFkZF9hcmd1bWVudCgnYnNwbmFtZScsIG1ldGF2YXI9J2JzcC1uYW1lJywgaGVscD0nbmFtZSBmb3IgdGhlIG5ldyBCU1AnKQorICAgIGNyZWF0ZV9wYXJzZXIuYWRkX2FyZ3VtZW50KCdrYXJjaCcsIGhlbHA9J2tlcm5lbCBhcmNoaXRlY3R1cmUnKQorICAgIGNyZWF0ZV9wYXJzZXIuYWRkX2FyZ3VtZW50KCItbyIsICItLW91dGRpciIsIGhlbHAgPSAibmFtZSBvZiBCU1AgZGlyIHRvIGNyZWF0ZSIpCisgICAgY3JlYXRlX3BhcnNlci5hZGRfYXJndW1lbnQoIi1pIiwgIi0taW5maWxlIiwgZGVzdCA9ICJwcm9wZXJ0aWVzX2ZpbGUiLAorICAgICAgICAgICAgICAgICAgICAgIGhlbHAgPSAibmFtZSBvZiBmaWxlIGNvbnRhaW5pbmcgdGhlIHZhbHVlcyBmb3IgQlNQIHByb3BlcnRpZXMgYXMgYSBKU09OIGZpbGUiKQorICAgIGNyZWF0ZV9wYXJzZXIuYWRkX2FyZ3VtZW50KCItYyIsICItLWNvZGVkdW1wIiwgYWN0aW9uID0gInN0b3JlX3RydWUiLCBkZWZhdWx0ID0gRmFsc2UsCisgICAgICAgICAgICAgICAgICAgICAgaGVscCA9ICJkdW1wIHRoZSBnZW5lcmF0ZWQgY29kZSB0byBic3BnZW4ub3V0IikKKyAgICBjcmVhdGVfcGFyc2VyLmFkZF9hcmd1bWVudCgiLXMiLCAiLS1za2lwLWdpdC1jaGVjayIsIGRlc3QgPSAiZ2l0X2NoZWNrIiwgYWN0aW9uID0gInN0b3JlX2ZhbHNlIiwKKyAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0ID0gVHJ1ZSwgaGVscCA9ICJza2lwIHRoZSBnaXQgY29ubmVjdGl2aXR5IGNoZWNrIikKKyAgICBjcmVhdGVfcGFyc2VyLnNldF9kZWZhdWx0cyhmdW5jPWRvX2NyZWF0ZV9ic3ApCisKKworICAgIGxpc3RfcGFyc2VyID0gc3VicGFyc2Vycy5hZGRfcGFyc2VyKCdsaXN0JywgaGVscD0nTGlzdCBhdmFpbGFibGUgdmFsdWVzIGZvciBvcHRpb25zIGFuZCBCU1AgcHJvcGVydGllcycpCisgICAgbGlzdF9wYXJzZXIuYWRkX2FyZ3VtZW50KCdrYXJjaCcsIGhlbHA9J2tlcm5lbCBhcmNoaXRlY3R1cmUnKQorICAgIHByb3BfZ3JvdXAgPSBsaXN0X3BhcnNlci5hZGRfbXV0dWFsbHlfZXhjbHVzaXZlX2dyb3VwKCkKKyAgICBwcm9wX2dyb3VwLmFkZF9hcmd1bWVudCgiLS1wcm9wZXJ0aWVzIiwgYWN0aW9uID0gInN0b3JlX3RydWUiLCBkZWZhdWx0ID0gRmFsc2UsCisgICAgICAgICAgICAgICAgICAgICAgaGVscCA9ICJsaXN0IGFsbCBwcm9wZXJ0aWVzIGZvciB0aGUga2VybmVsIGFyY2hpdGVjdHVyZSIpCisgICAgcHJvcF9ncm91cC5hZGRfYXJndW1lbnQoIi0tcHJvcGVydHkiLCBoZWxwID0gImxpc3QgYXZhaWxhYmxlIHZhbHVlcyBmb3IgdGhlIHByb3BlcnR5IikKKyAgICBsaXN0X3BhcnNlci5hZGRfYXJndW1lbnQoIi1vIiwgIi0tb3V0ZmlsZSIsIGRlc3QgPSAicHJvcGVydGllc19maWxlIiwKKyAgICAgICAgICAgICAgICAgICAgICBoZWxwID0gImR1bXAgdGhlIHBvc3NpYmxlIHZhbHVlcyBmb3IgQlNQIHByb3BlcnRpZXMgdG8gYSBKU09OIGZpbGUiKQorCisgICAgbGlzdF9wYXJzZXIuc2V0X2RlZmF1bHRzKGZ1bmM9ZG9fbGlzdF9ic3ApCisKKyAgICBoZWxwX3BhcnNlciA9IHN1YnBhcnNlcnMuYWRkX3BhcnNlcignaGVscCcsCisgICAgICAgICAgICAgICAgICAgICAgZGVzY3JpcHRpb249J1RoaXMgY29tbWFuZCBkaXNwbGF5cyBkZXRhaWxlZCBoZWxwIGZvciB0aGUgc3BlY2lmaWVkIHN1YmNvbW1hbmQuJykKKyAgICBoZWxwX3BhcnNlci5hZGRfYXJndW1lbnQoJ3N1YmNvbW1hbmQnLCBuYXJncz0nPycpCisgICAgaGVscF9wYXJzZXIuc2V0X2RlZmF1bHRzKGZ1bmM9ZG9faGVscF9ic3ApCisKKyAgICBhcmdzID0gcGFyc2VyLnBhcnNlX2FyZ3MoKQogCiAgICAgbG9nbGV2ZWwgPSBsb2dnaW5nLklORk8KLSAgICBpZiBvcHRpb25zLmRlYnVnOgorICAgIGlmIGFyZ3MuZGVidWc6CiAgICAgICAgIGxvZ2xldmVsID0gbG9nZ2luZy5ERUJVRwogICAgIHN0YXJ0X2xvZ2dpbmcobG9nbGV2ZWwpCiAKLSAgICBpZiBsZW4oYXJncyk6Ci0gICAgICAgIGlmIGFyZ3NbMF0gPT0gImhlbHAiOgotICAgICAgICAgICAgaWYgbGVuKGFyZ3MpID09IDE6Ci0gICAgICAgICAgICAgICAgcGFyc2VyLnByaW50X2hlbHAoKQotICAgICAgICAgICAgICAgIHN5cy5leGl0KCkKKyAgICBpZiBhcmdzLl9zdWJwYXJzZXJfbmFtZSA9PSAibGlzdCI6CisgICAgICAgIGlmIG5vdCBhcmdzLmthcmNoID09ICJrYXJjaCIgYW5kIG5vdCBhcmdzLnByb3BlcnRpZXMgYW5kIG5vdCBhcmdzLnByb3BlcnR5OgorICAgICAgICAgICAgcHJpbnQgKCJ5b2N0by1ic3AgbGlzdDogZXJyb3I6IG9uZSBvZiB0aGUgYXJndW1lbnRzIC0tcHJvcGVydGllcyAtLXByb3BlcnR5IGlzIHJlcXVpcmVkIikKKyAgICAgICAgICAgIGxpc3RfcGFyc2VyLnByaW50X2hlbHAoKQogCi0gICAgaW52b2tlX3N1YmNvbW1hbmQoYXJncywgcGFyc2VyLCB5b2N0b19ic3BfaGVscF91c2FnZSwgc3ViY29tbWFuZHMpCisgICAgaWYgYXJncy5fc3VicGFyc2VyX25hbWUgPT0gImhlbHAiOgorICAgICAgICBpZiBub3QgYXJncy5zdWJjb21tYW5kOgorICAgICAgICAgICAgcGFyc2VyLnByaW50X2hlbHAoKQorICAgICAgICAgICAgcmV0dXJuIDAKKyAgICAgICAgZWxpZiBub3QgY29tbWFuZF9oZWxwLmdldChhcmdzLnN1YmNvbW1hbmQpOgorICAgICAgICAgICAgcHJpbnQgKCJ5b2N0by1ic3AgaGVscDogTm8gbWFudWFsIGVudHJ5IGZvciAlcyIgJSBhcmdzLnN1YmNvbW1hbmQpCisgICAgICAgICAgICByZXR1cm4gMQogCisgICAgcmV0dXJuIGFyZ3MuZnVuYyhhcmdzKQogCiBpZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgogICAgIHRyeToKQEAgLTE1Myw0ICsxNjEsMyBAQAogICAgICAgICBpbXBvcnQgdHJhY2ViYWNrCiAgICAgICAgIHRyYWNlYmFjay5wcmludF9leGMoKQogICAgIHN5cy5leGl0KHJldCkKLQpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L3NjcmlwdHMveW9jdG8ta2VybmVsIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L3NjcmlwdHMveW9jdG8ta2VybmVsCmluZGV4IGRhYWFkMDcuLjVjNzBkMGMgMTAwNzU1Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9zY3JpcHRzL3lvY3RvLWtlcm5lbAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvc2NyaXB0cy95b2N0by1rZXJuZWwKQEAgLTEsNCArMSw0IEBACi0jIS91c3IvYmluL2VudiBweXRob24KKyMhL3Vzci9iaW4vZW52IHB5dGhvbjMKICMgZXg6dHM9NDpzdz00OnN0cz00OmV0CiAjIC0qLSB0YWItd2lkdGg6IDQ7IGMtYmFzaWMtb2Zmc2V0OiA0OyBpbmRlbnQtdGFicy1tb2RlOiBuaWwgLSotCiAjCkBAIC0zNTEsNyArMzUxLDcgQEAKIAogCiBkZWYgc3RhcnRfbG9nZ2luZyhsb2dsZXZlbCk6Ci0gICAgbG9nZ2luZy5iYXNpY0NvbmZpZyhmaWxuYW1lID0gJ3lvY3RvLWtlcm5lbC5sb2cnLCBmaWxlbW9kZSA9ICd3JywgbGV2ZWw9bG9nbGV2ZWwpCisgICAgbG9nZ2luZy5iYXNpY0NvbmZpZyhmaWxlbmFtZSA9ICd5b2N0by1rZXJuZWwubG9nJywgZmlsZW1vZGUgPSAndycsIGxldmVsPWxvZ2xldmVsKQogCiAKIGRlZiBtYWluKCk6CmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvc2NyaXB0cy95b2N0by1sYXllciBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9zY3JpcHRzL3lvY3RvLWxheWVyCmluZGV4IDM1Njk3MmUuLmQ1OGZhY2EgMTAwNzU1Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9zY3JpcHRzL3lvY3RvLWxheWVyCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9zY3JpcHRzL3lvY3RvLWxheWVyCkBAIC0xLDQgKzEsNCBAQAotIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCisjIS91c3IvYmluL2VudiBweXRob24zCiAjIGV4OnRzPTQ6c3c9NDpzdHM9NDpldAogIyAtKi0gdGFiLXdpZHRoOiA0OyBjLWJhc2ljLW9mZnNldDogNDsgaW5kZW50LXRhYnMtbW9kZTogbmlsIC0qLQogIwpAQCAtMTEzLDcgKzExMyw3IEBACiAKIAogZGVmIHN0YXJ0X2xvZ2dpbmcobG9nbGV2ZWwpOgotICAgIGxvZ2dpbmcuYmFzaWNDb25maWcoZmlsbmFtZSA9ICd5b2N0by1sYXllci5sb2cnLCBmaWxlbW9kZSA9ICd3JywgbGV2ZWw9bG9nbGV2ZWwpCisgICAgbG9nZ2luZy5iYXNpY0NvbmZpZyhmaWxlbmFtZSA9ICd5b2N0by1sYXllci5sb2cnLCBmaWxlbW9kZSA9ICd3JywgbGV2ZWw9bG9nbGV2ZWwpCiAKIAogZGVmIG1haW4oKToK